From 706c8903a16aacc8c5e196682c46be0519365132 Mon Sep 17 00:00:00 2001 From: Phaneron Date: Sat, 18 Nov 2023 10:50:16 -0500 Subject: [PATCH] feat(gx): add incomplete 'CGxDeviceGLSDL' (#2) * chore(build): add vendored SDL 3.0.0 library * chore(build): add vendored glew-cmake-2.2.0 library * feat(console): in the presence of -opengl launch flag, change GxApi to OpenGl * feat(gx): add uncompleted CGxDeviceGLSDL targeting Windows and Linux * chore(build): change SDL3 linkage from shared (bad) to to static (good) --- src/console/Device.cpp | 4 + src/gx/CGxDevice.cpp | 14 +- src/gx/CMakeLists.txt | 15 + src/gx/glsdl/CGxDeviceGLSDL.cpp | 1326 + src/gx/glsdl/CGxDeviceGLSDL.hpp | 82 + src/gx/glsdl/GL.cpp | 50 + src/gx/glsdl/GL.hpp | 33 + src/gx/glsdl/GLBatch.hpp | 45 + src/gx/glsdl/GLBuffer.cpp | 130 + src/gx/glsdl/GLBuffer.hpp | 47 + src/gx/glsdl/GLBufferPool.hpp | 8 + src/gx/glsdl/GLDebugMipmap2D.hpp | 8 + src/gx/glsdl/GLFramebuffer.cpp | 150 + src/gx/glsdl/GLFramebuffer.hpp | 38 + src/gx/glsdl/GLGLSLProgram.cpp | 7 + src/gx/glsdl/GLGLSLProgram.hpp | 14 + src/gx/glsdl/GLMipmap.cpp | 480 + src/gx/glsdl/GLMipmap.hpp | 62 + src/gx/glsdl/GLObject.cpp | 22 + src/gx/glsdl/GLObject.hpp | 22 + src/gx/glsdl/GLPixelShader.cpp | 17 + src/gx/glsdl/GLPixelShader.hpp | 12 + src/gx/glsdl/GLPool.hpp | 57 + src/gx/glsdl/GLSDLContext.cpp | 48 + src/gx/glsdl/GLSDLContext.hpp | 20 + src/gx/glsdl/GLSDLDevice.cpp | 2769 + src/gx/glsdl/GLSDLDevice.hpp | 190 + src/gx/glsdl/GLSDLWindow.cpp | 131 + src/gx/glsdl/GLSDLWindow.hpp | 44 + src/gx/glsdl/GLShader.cpp | 135 + src/gx/glsdl/GLShader.hpp | 75 + src/gx/glsdl/GLShaderInput.hpp | 33 + src/gx/glsdl/GLTexture.cpp | 632 + src/gx/glsdl/GLTexture.hpp | 101 + src/gx/glsdl/GLTypes.cpp | 58 + src/gx/glsdl/GLTypes.hpp | 376 + src/gx/glsdl/GLUtil.cpp | 22 + src/gx/glsdl/GLUtil.hpp | 9 + src/gx/glsdl/GLVertexArray.cpp | 316 + src/gx/glsdl/GLVertexArray.hpp | 46 + src/gx/glsdl/GLVertexFormat.hpp | 13 + src/gx/glsdl/GLVertexShader.cpp | 17 + src/gx/glsdl/GLVertexShader.hpp | 12 + vendor/CMakeLists.txt | 10 + vendor/glew-cmake-2.2.0/.gitattributes | 6 + .../.github/workflows/cmake.yml | 217 + vendor/glew-cmake-2.2.0/.gitignore | 25 + vendor/glew-cmake-2.2.0/.lgtm.yml | 12 + vendor/glew-cmake-2.2.0/.travis.yml | 27 + vendor/glew-cmake-2.2.0/CMakeLists.txt | 287 + .../glew-cmake-2.2.0/GeneratePkgConfig.cmake | 62 + vendor/glew-cmake-2.2.0/LICENSE.txt | 73 + vendor/glew-cmake-2.2.0/Makefile | 357 + vendor/glew-cmake-2.2.0/README.md | 29 + vendor/glew-cmake-2.2.0/README_glew.md | 255 + vendor/glew-cmake-2.2.0/auto/Makefile | 365 + .../auto/bin/filter_gl_ext.sh | 614 + .../auto/bin/filter_gles_ext.sh | 20 + .../glew-cmake-2.2.0/auto/bin/filter_spec.py | 38 + vendor/glew-cmake-2.2.0/auto/bin/make.pl | 224 + .../glew-cmake-2.2.0/auto/bin/make_def_fun.pl | 37 + .../glew-cmake-2.2.0/auto/bin/make_def_var.pl | 33 + .../auto/bin/make_enable_index.pl | 48 + .../glew-cmake-2.2.0/auto/bin/make_header.pl | 73 + vendor/glew-cmake-2.2.0/auto/bin/make_html.pl | 57 + .../glew-cmake-2.2.0/auto/bin/make_index.pl | 41 + vendor/glew-cmake-2.2.0/auto/bin/make_info.pl | 71 + .../auto/bin/make_info_list.pl | 49 + vendor/glew-cmake-2.2.0/auto/bin/make_init.pl | 61 + .../glew-cmake-2.2.0/auto/bin/make_initd.pl | 45 + vendor/glew-cmake-2.2.0/auto/bin/make_list.pl | 75 + .../glew-cmake-2.2.0/auto/bin/make_list2.pl | 46 + vendor/glew-cmake-2.2.0/auto/bin/make_str.pl | 55 + .../auto/bin/make_struct_fun.pl | 38 + .../auto/bin/make_struct_var.pl | 33 + .../glew-cmake-2.2.0/auto/bin/parse_spec.pl | 410 + vendor/glew-cmake-2.2.0/auto/bin/parse_xml.py | 145 + .../glew-cmake-2.2.0/auto/bin/update_ext.sh | 26 + vendor/glew-cmake-2.2.0/auto/blacklist | 27 + .../auto/core/gl/EGL_EXT_device_base | 7 + .../auto/core/gl/EGL_KHR_fence_sync | 7 + .../auto/core/gl/EGL_KHR_image_base | 6 + .../auto/core/gl/EGL_KHR_lock_surface3 | 27 + .../auto/core/gl/EGL_VERSION_1_0 | 86 + .../auto/core/gl/EGL_VERSION_1_1 | 22 + .../auto/core/gl/EGL_VERSION_1_2 | 38 + .../auto/core/gl/EGL_VERSION_1_3 | 16 + .../auto/core/gl/EGL_VERSION_1_4 | 13 + .../auto/core/gl/EGL_VERSION_1_5 | 59 + .../auto/core/gl/GLX_ARB_get_proc_address | 5 + .../auto/core/gl/GLX_ATI_pixel_format_float | 5 + .../auto/core/gl/GLX_ATI_render_texture | 42 + .../auto/core/gl/GLX_EXT_scene_marker | 4 + .../auto/core/gl/GLX_NV_vertex_array_range | 6 + .../auto/core/gl/GLX_SGIS_color_range | 4 + .../auto/core/gl/GLX_SGIX_hyperpipe | 26 + .../auto/core/gl/GLX_SUN_video_resize | 8 + .../auto/core/gl/GLX_VERSION_1_2 | 5 + .../auto/core/gl/GLX_VERSION_1_3 | 83 + .../auto/core/gl/GLX_VERSION_1_4 | 7 + .../auto/core/gl/GL_APPLE_float_pixels | 18 + .../auto/core/gl/GL_APPLE_pixel_buffer | 5 + .../auto/core/gl/GL_APPLE_texture_range | 13 + .../auto/core/gl/GL_ARB_draw_instanced | 4 + .../auto/core/gl/GL_ARB_imaging | 113 + .../auto/core/gl/GL_ARB_instanced_arrays | 8 + .../auto/core/gl/GL_ARB_internalformat_query2 | 104 + .../auto/core/gl/GL_ARB_matrix_palette | 19 + .../auto/core/gl/GL_ARB_multitexture | 73 + .../auto/core/gl/GL_ARB_robustness | 31 + .../core/gl/GL_ARB_separate_shader_objects | 73 + .../auto/core/gl/GL_ARB_vertex_attrib_64bit | 14 + .../auto/core/gl/GL_ARB_vertex_blend | 56 + .../auto/core/gl/GL_ATIX_point_sprites | 10 + .../auto/core/gl/GL_ATIX_texture_env_combine3 | 7 + .../auto/core/gl/GL_ATIX_texture_env_route | 7 + .../GL_ATIX_vertex_shader_output_point_size | 5 + .../auto/core/gl/GL_ATI_envmap_bumpmap | 16 + .../auto/core/gl/GL_ATI_map_object_buffer | 6 + .../auto/core/gl/GL_ATI_pn_triangles | 15 + .../auto/core/gl/GL_ATI_separate_stencil | 10 + .../auto/core/gl/GL_ATI_shader_texture_lod | 4 + .../core/gl/GL_ATI_texture_compression_3dc | 5 + .../auto/core/gl/GL_ATI_vertex_streams | 59 + .../auto/core/gl/GL_EXT_Cg_shader | 6 + .../auto/core/gl/GL_EXT_bindable_uniform | 13 + .../auto/core/gl/GL_EXT_debug_marker | 7 + .../auto/core/gl/GL_EXT_depth_bounds_test | 7 + .../auto/core/gl/GL_EXT_draw_instanced | 6 + .../auto/core/gl/GL_EXT_draw_range_elements | 7 + .../auto/core/gl/GL_EXT_external_buffer | 7 + .../auto/core/gl/GL_EXT_fog_coord | 17 + .../auto/core/gl/GL_EXT_framebuffer_sRGB | 6 + .../auto/core/gl/GL_EXT_geometry_shader4 | 27 + .../core/gl/GL_EXT_gpu_program_parameters | 6 + .../auto/core/gl/GL_EXT_gpu_shader4 | 64 + .../auto/core/gl/GL_EXT_memory_object | 34 + .../auto/core/gl/GL_EXT_memory_object_fd | 6 + .../auto/core/gl/GL_EXT_memory_object_win32 | 17 + .../auto/core/gl/GL_EXT_packed_float | 7 + .../auto/core/gl/GL_EXT_pixel_buffer_object | 8 + .../auto/core/gl/GL_EXT_scene_marker | 6 + .../auto/core/gl/GL_EXT_secondary_color | 28 + .../auto/core/gl/GL_EXT_semaphore | 21 + .../auto/core/gl/GL_EXT_semaphore_fd | 5 + .../auto/core/gl/GL_EXT_semaphore_win32 | 6 + .../auto/core/gl/GL_EXT_texture_array | 13 + .../auto/core/gl/GL_EXT_texture_buffer_object | 10 + .../core/gl/GL_EXT_texture_compression_latc | 8 + .../core/gl/GL_EXT_texture_compression_rgtc | 8 + .../auto/core/gl/GL_EXT_texture_cube_map | 16 + .../auto/core/gl/GL_EXT_texture_edge_clamp | 5 + .../auto/core/gl/GL_EXT_texture_integer | 57 + .../auto/core/gl/GL_EXT_texture_rectangle | 8 + .../core/gl/GL_EXT_texture_shared_exponent | 7 + .../auto/core/gl/GL_EXT_timer_query | 7 + .../auto/core/gl/GL_EXT_vertex_shader | 157 + .../auto/core/gl/GL_KHR_context_flush_control | 7 + .../auto/core/gl/GL_KTX_buffer_region | 13 + .../auto/core/gl/GL_NVX_gpu_memory_info | 9 + .../auto/core/gl/GL_NV_depth_buffer_float | 11 + .../auto/core/gl/GL_NV_depth_range_unclamped | 9 + .../auto/core/gl/GL_NV_fragment_program2 | 9 + .../auto/core/gl/GL_NV_fragment_program4 | 4 + .../core/gl/GL_NV_fragment_program_option | 4 + .../gl/GL_NV_framebuffer_multisample_coverage | 9 + .../auto/core/gl/GL_NV_geometry_program4 | 8 + .../auto/core/gl/GL_NV_geometry_shader4 | 4 + .../auto/core/gl/GL_NV_gpu_program4 | 24 + .../auto/core/gl/GL_NV_gpu_program5 | 10 + .../core/gl/GL_NV_parameter_buffer_object | 12 + .../auto/core/gl/GL_NV_present_video | 16 + .../auto/core/gl/GL_NV_sample_locations | 15 + .../auto/core/gl/GL_NV_tessellation_program5 | 9 + .../auto/core/gl/GL_NV_transform_feedback | 40 + .../auto/core/gl/GL_NV_vdpau_interop | 19 + .../auto/core/gl/GL_NV_vertex_program2_option | 6 + .../auto/core/gl/GL_NV_vertex_program3 | 5 + .../auto/core/gl/GL_NV_vertex_program4 | 5 + .../auto/core/gl/GL_SGIX_shadow | 8 + .../auto/core/gl/GL_SUN_read_video_pixels | 5 + .../auto/core/gl/GL_VERSION_1_2 | 50 + .../auto/core/gl/GL_VERSION_1_2_1 | 4 + .../auto/core/gl/GL_VERSION_1_3 | 147 + .../auto/core/gl/GL_VERSION_1_4 | 90 + .../auto/core/gl/GL_VERSION_1_5 | 75 + .../auto/core/gl/GL_VERSION_2_0 | 181 + .../auto/core/gl/GL_VERSION_2_1 | 33 + .../auto/core/gl/GL_VERSION_3_0 | 164 + .../auto/core/gl/GL_VERSION_3_1 | 42 + .../auto/core/gl/GL_VERSION_3_2 | 29 + .../auto/core/gl/GL_VERSION_3_3 | 7 + .../auto/core/gl/GL_VERSION_4_0 | 21 + .../auto/core/gl/GL_VERSION_4_1 | 3 + .../auto/core/gl/GL_VERSION_4_2 | 13 + .../auto/core/gl/GL_VERSION_4_3 | 6 + .../auto/core/gl/GL_VERSION_4_4 | 8 + .../auto/core/gl/GL_VERSION_4_5 | 9 + .../auto/core/gl/GL_VERSION_4_6 | 29 + .../auto/core/gl/GL_WIN_swap_hint | 5 + .../auto/core/gl/WGL_NV_gpu_affinity | 13 + vendor/glew-cmake-2.2.0/auto/custom.txt | 7 + .../glew-cmake-2.2.0/auto/doc/advanced.html | 130 + vendor/glew-cmake-2.2.0/auto/doc/basic.html | 180 + vendor/glew-cmake-2.2.0/auto/doc/build.html | 49 + vendor/glew-cmake-2.2.0/auto/doc/credits.html | 2 + vendor/glew-cmake-2.2.0/auto/doc/index.html | 113 + vendor/glew-cmake-2.2.0/auto/doc/install.html | 126 + vendor/glew-cmake-2.2.0/auto/doc/log.html | 1319 + vendor/glew-cmake-2.2.0/auto/src/eglew_head.h | 98 + vendor/glew-cmake-2.2.0/auto/src/eglew_mid.h | 4 + vendor/glew-cmake-2.2.0/auto/src/eglew_tail.h | 15 + vendor/glew-cmake-2.2.0/auto/src/footer.html | 4 + vendor/glew-cmake-2.2.0/auto/src/glew.rc | 136 + vendor/glew-cmake-2.2.0/auto/src/glew_head.c | 289 + vendor/glew-cmake-2.2.0/auto/src/glew_head.h | 1139 + .../glew-cmake-2.2.0/auto/src/glew_init_egl.c | 45 + .../glew-cmake-2.2.0/auto/src/glew_init_gl.c | 209 + .../glew-cmake-2.2.0/auto/src/glew_init_glx.c | 57 + .../auto/src/glew_init_tail.c | 68 + .../glew-cmake-2.2.0/auto/src/glew_init_wgl.c | 41 + .../glew-cmake-2.2.0/auto/src/glew_license.h | 32 + .../glew-cmake-2.2.0/auto/src/glew_str_egl.c | 17 + .../glew-cmake-2.2.0/auto/src/glew_str_glx.c | 17 + .../glew-cmake-2.2.0/auto/src/glew_str_head.c | 9 + .../glew-cmake-2.2.0/auto/src/glew_str_tail.c | 7 + .../glew-cmake-2.2.0/auto/src/glew_str_wgl.c | 17 + vendor/glew-cmake-2.2.0/auto/src/glew_tail.h | 69 + vendor/glew-cmake-2.2.0/auto/src/glewinfo.rc | 124 + .../glew-cmake-2.2.0/auto/src/glewinfo_egl.c | 6 + .../glew-cmake-2.2.0/auto/src/glewinfo_gl.c | 7 + .../glew-cmake-2.2.0/auto/src/glewinfo_glx.c | 6 + .../glew-cmake-2.2.0/auto/src/glewinfo_head.c | 96 + .../glew-cmake-2.2.0/auto/src/glewinfo_tail.c | 609 + .../glew-cmake-2.2.0/auto/src/glewinfo_wgl.c | 8 + vendor/glew-cmake-2.2.0/auto/src/glxew_head.h | 111 + vendor/glew-cmake-2.2.0/auto/src/glxew_mid.h | 4 + vendor/glew-cmake-2.2.0/auto/src/glxew_tail.h | 20 + vendor/glew-cmake-2.2.0/auto/src/header.html | 96 + .../auto/src/khronos_license.h | 23 + .../glew-cmake-2.2.0/auto/src/mesa_license.h | 24 + .../glew-cmake-2.2.0/auto/src/visualinfo.rc | 124 + vendor/glew-cmake-2.2.0/auto/src/wglew_head.h | 36 + vendor/glew-cmake-2.2.0/auto/src/wglew_mid.h | 4 + vendor/glew-cmake-2.2.0/auto/src/wglew_tail.h | 22 + vendor/glew-cmake-2.2.0/azure-pipelines.yml | 22 + .../build/cmake/CMakeLists.txt | 267 + .../cmake/CopyImportedTargetProperties.cmake | 88 + .../build/cmake/cmake_uninstall.cmake.in | 26 + .../build/cmake/glew-config.cmake | 60 + .../build/cmake/testbuild/CMakeLists.txt | 19 + .../build/cmake/testbuild/main.c | 23 + .../glew-cmake-2.2.0/build/vc10/common.props | 29 + vendor/glew-cmake-2.2.0/build/vc10/glew.sln | 56 + .../build/vc10/glew_shared.vcxproj | 254 + .../build/vc10/glew_static.vcxproj | 228 + .../build/vc10/glewinfo.vcxproj | 252 + .../build/vc10/visualinfo.vcxproj | 251 + .../glew-cmake-2.2.0/build/vc12/common.props | 29 + vendor/glew-cmake-2.2.0/build/vc12/glew.sln | 56 + .../build/vc12/glew_shared.vcxproj | 258 + .../build/vc12/glew_static.vcxproj | 232 + .../build/vc12/glewinfo.vcxproj | 259 + .../build/vc12/visualinfo.vcxproj | 258 + .../glew-cmake-2.2.0/build/vc14/common.props | 29 + vendor/glew-cmake-2.2.0/build/vc14/glew.sln | 56 + .../build/vc14/glew_shared.vcxproj | 258 + .../build/vc14/glew_static.vcxproj | 232 + .../build/vc14/glewinfo.vcxproj | 259 + .../build/vc14/visualinfo.vcxproj | 258 + .../glew-cmake-2.2.0/build/vc15/common.props | 29 + vendor/glew-cmake-2.2.0/build/vc15/glew.sln | 59 + .../build/vc15/glew_shared.vcxproj | 258 + .../build/vc15/glew_static.vcxproj | 232 + .../build/vc15/glewinfo.vcxproj | 261 + .../build/vc15/visualinfo.vcxproj | 260 + vendor/glew-cmake-2.2.0/build/vc6/Makefile | 21 + vendor/glew-cmake-2.2.0/build/vc6/glew.dsw | 71 + .../build/vc6/glew_shared.dsp | 122 + .../build/vc6/glew_static.dsp | 112 + .../glew-cmake-2.2.0/build/vc6/glewinfo.dsp | 103 + .../glew-cmake-2.2.0/build/vc6/visualinfo.dsp | 103 + vendor/glew-cmake-2.2.0/cmake-testbuild.sh | 71 + .../glew-cmake-2.2.0/config/Makefile.cygming | 21 + .../glew-cmake-2.2.0/config/Makefile.cygwin | 20 + .../config/Makefile.cygwin-x11 | 19 + .../glew-cmake-2.2.0/config/Makefile.darwin | 27 + .../config/Makefile.darwin-gcc6 | 31 + .../config/Makefile.darwin-ppc | 30 + .../config/Makefile.darwin-universal | 33 + .../config/Makefile.darwin-x86_64 | 28 + .../config/Makefile.fedora-mingw32 | 12 + .../config/Makefile.flatpak-32 | 24 + .../glew-cmake-2.2.0/config/Makefile.freebsd | 19 + vendor/glew-cmake-2.2.0/config/Makefile.gnu | 17 + vendor/glew-cmake-2.2.0/config/Makefile.haiku | 20 + vendor/glew-cmake-2.2.0/config/Makefile.irix | 17 + .../glew-cmake-2.2.0/config/Makefile.kfreebsd | 17 + vendor/glew-cmake-2.2.0/config/Makefile.linux | 39 + .../config/Makefile.linux-clang | 34 + .../config/Makefile.linux-clang-egl | 4 + .../config/Makefile.linux-egl | 4 + .../config/Makefile.linux-egl-glvnd | 5 + .../config/Makefile.linux-mingw32 | 24 + .../config/Makefile.linux-mingw64 | 24 + .../config/Makefile.linux-osmesa | 4 + vendor/glew-cmake-2.2.0/config/Makefile.mingw | 17 + .../config/Makefile.mingw-win32 | 5 + vendor/glew-cmake-2.2.0/config/Makefile.msys | 20 + .../config/Makefile.msys-win32 | 5 + .../config/Makefile.msys-win64 | 5 + .../glew-cmake-2.2.0/config/Makefile.nacl-32 | 31 + .../glew-cmake-2.2.0/config/Makefile.nacl-64 | 31 + .../glew-cmake-2.2.0/config/Makefile.netbsd | 17 + .../glew-cmake-2.2.0/config/Makefile.openbsd | 17 + .../glew-cmake-2.2.0/config/Makefile.solaris | 14 + .../config/Makefile.solaris-gcc | 15 + vendor/glew-cmake-2.2.0/config/config.guess | 1700 + vendor/glew-cmake-2.2.0/config/version | 7 + vendor/glew-cmake-2.2.0/doc/advanced.html | 230 + vendor/glew-cmake-2.2.0/doc/basic.html | 280 + vendor/glew-cmake-2.2.0/doc/build.html | 149 + vendor/glew-cmake-2.2.0/doc/credits.html | 102 + vendor/glew-cmake-2.2.0/doc/github.png | Bin 0 -> 1219 bytes vendor/glew-cmake-2.2.0/doc/glew.css | 187 + vendor/glew-cmake-2.2.0/doc/glew.html | 1076 + vendor/glew-cmake-2.2.0/doc/glew.png | Bin 0 -> 9298 bytes vendor/glew-cmake-2.2.0/doc/glew.txt | 29 + vendor/glew-cmake-2.2.0/doc/glxew.html | 188 + vendor/glew-cmake-2.2.0/doc/gpl.txt | 340 + vendor/glew-cmake-2.2.0/doc/index.html | 213 + vendor/glew-cmake-2.2.0/doc/install.html | 226 + vendor/glew-cmake-2.2.0/doc/khronos.txt | 20 + vendor/glew-cmake-2.2.0/doc/log.html | 1419 + vendor/glew-cmake-2.2.0/doc/mesa.txt | 21 + vendor/glew-cmake-2.2.0/doc/new.png | Bin 0 -> 1180 bytes vendor/glew-cmake-2.2.0/doc/ogl_sm.jpg | Bin 0 -> 1617 bytes vendor/glew-cmake-2.2.0/doc/travis.png | Bin 0 -> 2541 bytes vendor/glew-cmake-2.2.0/doc/wglew.html | 169 + vendor/glew-cmake-2.2.0/glew-cmake/Dockerfile | 10 + .../glew-cmake/cmake-install-test.cmake | 11 + .../glew-cmake/fetch-content.cmake | 18 + .../glew-cmake-2.2.0/glew-cmake/maintain.sh | 240 + .../glew-cmake-2.2.0/glew-cmake/mingw.cmake | 16 + .../glew-cmake/sub-directory-test.cmake | 6 + vendor/glew-cmake-2.2.0/glew.pc.in | 11 + vendor/sdl-3.0.0/.clang-format | 90 + vendor/sdl-3.0.0/.clang-tidy | 59 + vendor/sdl-3.0.0/.editorconfig | 69 + .../.github/PULL_REQUEST_TEMPLATE.md | 7 + vendor/sdl-3.0.0/.github/cmake/CMakeLists.txt | 16 + .../sdl-3.0.0/.github/workflows/android.yml | 105 + .../sdl-3.0.0/.github/workflows/cpactions.yml | 69 + .../.github/workflows/emscripten.yml | 58 + vendor/sdl-3.0.0/.github/workflows/haiku.yml | 57 + vendor/sdl-3.0.0/.github/workflows/ios.yml | 24 + .../.github/workflows/loongarch64.yml | 92 + vendor/sdl-3.0.0/.github/workflows/main.yml | 151 + vendor/sdl-3.0.0/.github/workflows/msvc.yml | 102 + vendor/sdl-3.0.0/.github/workflows/n3ds.yml | 65 + .../sdl-3.0.0/.github/workflows/ppc64le.yml | 61 + vendor/sdl-3.0.0/.github/workflows/ps2.yml | 69 + vendor/sdl-3.0.0/.github/workflows/psp.yml | 61 + vendor/sdl-3.0.0/.github/workflows/riscos.yml | 64 + .../.github/workflows/visionos.yml.disabled | 22 + vendor/sdl-3.0.0/.github/workflows/vita.yml | 136 + vendor/sdl-3.0.0/.gitignore | 160 + vendor/sdl-3.0.0/.wikiheaders-options | 17 + vendor/sdl-3.0.0/Android.mk | 136 + vendor/sdl-3.0.0/BUGS.txt | 16 + vendor/sdl-3.0.0/CMakeLists.txt | 3427 + vendor/sdl-3.0.0/CREDITS.txt | 53 + vendor/sdl-3.0.0/INSTALL.txt | 43 + vendor/sdl-3.0.0/LICENSE.txt | 18 + vendor/sdl-3.0.0/README-SDL.txt | 13 + vendor/sdl-3.0.0/README.md | 18 + vendor/sdl-3.0.0/TODO.txt | 10 + vendor/sdl-3.0.0/VisualC-GDK/SDL.sln | 117 + vendor/sdl-3.0.0/VisualC-GDK/SDL/SDL.vcxproj | 802 + .../VisualC-GDK/SDL/SDL.vcxproj.filters | 1425 + .../VisualC-GDK/SDL_test/SDL_test.vcxproj | 209 + vendor/sdl-3.0.0/VisualC-GDK/clean.sh | 6 + .../VisualC-GDK/logos/Logo100x100.png | Bin 0 -> 10832 bytes .../VisualC-GDK/logos/Logo150x150.png | Bin 0 -> 12709 bytes .../sdl-3.0.0/VisualC-GDK/logos/Logo44x44.png | Bin 0 -> 7460 bytes .../VisualC-GDK/logos/Logo480x480.png | Bin 0 -> 28677 bytes .../VisualC-GDK/logos/SplashScreenImage.png | Bin 0 -> 6599 bytes .../tests/testcontroller/PackageLayout.xml | 9 + .../testcontroller/testcontroller.vcxproj | 333 + .../testcontroller.vcxproj.filters | 52 + .../wingdk/MicrosoftGame.config | 34 + .../xboxone/MicrosoftGame.config | 29 + .../xboxseries/MicrosoftGame.config | 29 + .../tests/testgdk/PackageLayout.xml | 10 + .../VisualC-GDK/tests/testgdk/src/testgdk.cpp | 503 + .../VisualC-GDK/tests/testgdk/testgdk.vcxproj | 395 + .../tests/testgdk/testgdk.vcxproj.filters | 53 + .../tests/testgdk/wingdk/MicrosoftGame.config | 34 + .../testgdk/xboxone/MicrosoftGame.config | 29 + .../testgdk/xboxseries/MicrosoftGame.config | 29 + .../tests/testsprite/PackageLayout.xml | 9 + .../tests/testsprite/testsprite.vcxproj | 389 + .../testsprite/testsprite.vcxproj.filters | 52 + .../testsprite/wingdk/MicrosoftGame.config | 34 + .../testsprite/xboxone/MicrosoftGame.config | 29 + .../xboxseries/MicrosoftGame.config | 29 + vendor/sdl-3.0.0/VisualC-WinRT/SDL-UWP.sln | 69 + .../sdl-3.0.0/VisualC-WinRT/SDL-UWP.vcxproj | 876 + .../VisualC-WinRT/SDL-UWP.vcxproj.filters | 888 + .../Assets/LockScreenLogo.scale-200.png | Bin 0 -> 1430 bytes .../Assets/SplashScreen.scale-200.png | Bin 0 -> 7700 bytes .../Assets/Square150x150Logo.scale-200.png | Bin 0 -> 2937 bytes .../Assets/Square44x44Logo.scale-200.png | Bin 0 -> 1647 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 0 -> 1255 bytes .../testdraw/Assets/StoreLogo.png | Bin 0 -> 1451 bytes .../Assets/Wide310x150Logo.scale-200.png | Bin 0 -> 3204 bytes .../testdraw/Package.appxmanifest | 49 + .../VisualC-WinRT/testdraw/testdraw.vcxproj | 331 + .../testdraw/testdraw.vcxproj.filters | 88 + vendor/sdl-3.0.0/VisualC/SDL.sln | 284 + vendor/sdl-3.0.0/VisualC/SDL/SDL.vcxproj | 678 + .../sdl-3.0.0/VisualC/SDL/SDL.vcxproj.filters | 1385 + .../VisualC/SDL_test/SDL_test.vcxproj | 175 + vendor/sdl-3.0.0/VisualC/clean.sh | 4 + .../cmake/sdl3-config-version.cmake | 54 + .../pkg-support/cmake/sdl3-config.cmake | 129 + .../VisualC/tests/checkkeys/checkkeys.vcxproj | 219 + .../VisualC/tests/loopwave/loopwave.vcxproj | 231 + .../tests/testatomic/testatomic.vcxproj | 204 + .../testautomation/testautomation.vcxproj | 231 + .../testcontroller/testcontroller.vcxproj | 206 + .../VisualC/tests/testdraw/testdraw.vcxproj | 204 + .../VisualC/tests/testfile/testfile.vcxproj | 204 + .../VisualC/tests/testgl/testgl.vcxproj | 208 + .../VisualC/tests/testgles2/testgles2.vcxproj | 204 + .../tests/testoverlay/testoverlay.vcxproj | 225 + .../tests/testplatform/testplatform.vcxproj | 232 + .../VisualC/tests/testpower/testpower.vcxproj | 204 + .../testrendertarget/testrendertarget.vcxproj | 243 + .../tests/testrumble/testrumble.vcxproj | 204 + .../VisualC/tests/testscale/testscale.vcxproj | 243 + .../tests/testsensor/testsensor.vcxproj | 204 + .../VisualC/tests/testshape/testshape.vcxproj | 204 + .../tests/testsprite/testsprite.vcxproj | 225 + .../tests/testsurround/testsurround.vcxproj | 210 + .../tests/testvulkan/testvulkan.vcxproj | 200 + .../VisualC/tests/testwm/testwm.vcxproj | 204 + .../VisualC/tests/testyuv/testyuv.vcxproj | 229 + vendor/sdl-3.0.0/WhatsNew.txt | 32 + .../sdl-3.0.0/Xcode/SDL/Info-Framework.plist | 28 + .../Xcode/SDL/SDL.xcodeproj/project.pbxproj | 2811 + vendor/sdl-3.0.0/Xcode/SDL/SDL3/Info.plist | 22 + .../sdl-3.0.0/Xcode/SDL/pkg-support/SDL.info | 15 + .../resources/CMake/sdl3-config-version.cmake | 48 + .../resources/CMake/sdl3-config.cmake | 104 + .../SDL/pkg-support/resources/License.txt | 19 + .../SDL/pkg-support/resources/ReadMe.txt | 44 + .../SDL/pkg-support/resources/SDL_DS_Store | Bin 0 -> 10244 bytes .../Xcode/SDL/pkg-support/sdl_logo.pdf | Bin 0 -> 163800 bytes .../SDLTest/SDLTest.xcodeproj/project.pbxproj | 5069 ++ .../sdl-3.0.0/Xcode/SDLTest/config.xcconfig | 14 + vendor/sdl-3.0.0/Xcode/XcodeDocSet/Doxyfile | 1558 + .../android-project/app/build.gradle | 76 + .../android-project/app/jni/Android.mk | 1 + .../android-project/app/jni/Application.mk | 10 + .../android-project/app/jni/CMakeLists.txt | 20 + .../android-project/app/jni/src/Android.mk | 18 + .../app/jni/src/CMakeLists.txt | 13 + .../android-project/app/proguard-rules.pro | 17 + .../app/src/main/AndroidManifest.xml | 99 + .../main/java/org/libsdl/app/HIDDevice.java | 21 + .../app/HIDDeviceBLESteamController.java | 645 + .../java/org/libsdl/app/HIDDeviceManager.java | 668 + .../java/org/libsdl/app/HIDDeviceUSB.java | 308 + .../app/src/main/java/org/libsdl/app/SDL.java | 86 + .../main/java/org/libsdl/app/SDLActivity.java | 2189 + .../java/org/libsdl/app/SDLAudioManager.java | 500 + .../org/libsdl/app/SDLControllerManager.java | 854 + .../main/java/org/libsdl/app/SDLSurface.java | 408 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2683 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1698 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3872 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6874 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 14526 bytes .../app/src/main/res/values/colors.xml | 6 + .../app/src/main/res/values/strings.xml | 3 + .../app/src/main/res/values/styles.xml | 8 + vendor/sdl-3.0.0/android-project/build.gradle | 25 + .../android-project/gradle.properties | 17 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54213 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + vendor/sdl-3.0.0/android-project/gradlew | 160 + vendor/sdl-3.0.0/android-project/gradlew.bat | 90 + .../sdl-3.0.0/android-project/settings.gradle | 1 + .../build-scripts/SDL_migration.cocci | 2747 + .../build-scripts/add-source-to-projects.pl | 600 + .../sdl-3.0.0/build-scripts/android-prefab.sh | 315 + .../sdl-3.0.0/build-scripts/androidbuild.sh | 100 + .../build-scripts/androidbuildlibs.sh | 78 + .../build-scripts/check_stdlib_usage.py | 260 + .../build-scripts/clang-format-src.sh | 32 + .../cmake-toolchain-mingw64-i686.cmake | 13 + .../cmake-toolchain-mingw64-x86_64.cmake | 13 + .../cmake-toolchain-qnx-aarch64le.cmake | 14 + .../cmake-toolchain-qnx-x86_64.cmake | 14 + .../build-scripts/codechecker-buildbot.sh | 59 + vendor/sdl-3.0.0/build-scripts/fnsince.pl | 156 + .../gen_audio_channel_conversion.c | 461 + .../gen_audio_resampler_filter.c | 149 + .../build-scripts/git-pre-push-hook.pl | 78 + vendor/sdl-3.0.0/build-scripts/mkinstalldirs | 162 + vendor/sdl-3.0.0/build-scripts/rename_api.py | 250 + .../sdl-3.0.0/build-scripts/rename_headers.py | 71 + .../sdl-3.0.0/build-scripts/rename_symbols.py | 130 + vendor/sdl-3.0.0/build-scripts/showrev.sh | 48 + vendor/sdl-3.0.0/build-scripts/strip_fPIC.sh | 21 + .../build-scripts/test-versioning.sh | 162 + .../build-scripts/update-copyright.sh | 15 + .../sdl-3.0.0/build-scripts/update-version.sh | 79 + vendor/sdl-3.0.0/build-scripts/updaterev.sh | 49 + vendor/sdl-3.0.0/build-scripts/wikiheaders.pl | 1708 + vendor/sdl-3.0.0/cmake/3rdparty.cmake | 118 + .../cmake/CPackProjectConfig.cmake.in | 36 + .../cmake/CheckCPUArchitecture.cmake | 48 + vendor/sdl-3.0.0/cmake/FindFFmpeg.cmake | 138 + .../cmake/GetGitRevisionDescription.cmake | 284 + .../cmake/GetGitRevisionDescription.cmake.in | 43 + vendor/sdl-3.0.0/cmake/PkgConfigHelper.cmake | 34 + vendor/sdl-3.0.0/cmake/SDL3Config.cmake.in | 97 + .../cmake/android/FindSdlAndroid.cmake | 103 + .../android/FindSdlAndroidBuildTools.cmake | 115 + .../android/FindSdlAndroidPlatform.cmake | 123 + .../cmake/android/SdlAndroidFunctions.cmake | 276 + .../cmake/android/SdlAndroidScript.cmake | 74 + .../sdl-3.0.0/cmake/cmake_uninstall.cmake.in | 17 + vendor/sdl-3.0.0/cmake/macros.cmake | 180 + vendor/sdl-3.0.0/cmake/sdl3.pc.in | 13 + vendor/sdl-3.0.0/cmake/sdlchecks.cmake | 1224 + vendor/sdl-3.0.0/cmake/sdlcompilers.cmake | 128 + vendor/sdl-3.0.0/cmake/sdlmanpages.cmake | 68 + vendor/sdl-3.0.0/cmake/sdlplatform.cmake | 109 + vendor/sdl-3.0.0/cmake/sdltargets.cmake | 361 + vendor/sdl-3.0.0/cmake/test/CMakeLists.txt | 96 + vendor/sdl-3.0.0/cmake/test/inc_sdl_noslash.c | 8 + vendor/sdl-3.0.0/cmake/test/inc_sdl_slash.c | 8 + vendor/sdl-3.0.0/cmake/test/main_cli.c | 15 + vendor/sdl-3.0.0/cmake/test/main_gui.c | 24 + vendor/sdl-3.0.0/cmake/test/main_lib.c | 34 + vendor/sdl-3.0.0/cmake/test/sdltest.c | 9 + vendor/sdl-3.0.0/cmake/test/test_pkgconfig.sh | 51 + vendor/sdl-3.0.0/cmake/xxd.py | 37 + vendor/sdl-3.0.0/docs/README-android.md | 563 + vendor/sdl-3.0.0/docs/README-cmake.md | 328 + vendor/sdl-3.0.0/docs/README-contributing.md | 97 + vendor/sdl-3.0.0/docs/README-dynapi.md | 138 + vendor/sdl-3.0.0/docs/README-emscripten.md | 365 + vendor/sdl-3.0.0/docs/README-gdk.md | 159 + vendor/sdl-3.0.0/docs/README-git.md | 19 + vendor/sdl-3.0.0/docs/README-hg.md | 7 + vendor/sdl-3.0.0/docs/README-highdpi.md | 8 + vendor/sdl-3.0.0/docs/README-ios.md | 292 + vendor/sdl-3.0.0/docs/README-kmsbsd.md | 27 + vendor/sdl-3.0.0/docs/README-linux.md | 88 + vendor/sdl-3.0.0/docs/README-macos.md | 252 + vendor/sdl-3.0.0/docs/README-migration.md | 1300 + vendor/sdl-3.0.0/docs/README-n3ds.md | 28 + vendor/sdl-3.0.0/docs/README-ngage.md | 44 + vendor/sdl-3.0.0/docs/README-platforms.md | 8 + vendor/sdl-3.0.0/docs/README-porting.md | 65 + vendor/sdl-3.0.0/docs/README-ps2.md | 51 + vendor/sdl-3.0.0/docs/README-psp.md | 36 + vendor/sdl-3.0.0/docs/README-raspberrypi.md | 180 + vendor/sdl-3.0.0/docs/README-riscos.md | 35 + vendor/sdl-3.0.0/docs/README-touch.md | 81 + vendor/sdl-3.0.0/docs/README-versions.md | 60 + vendor/sdl-3.0.0/docs/README-visualc.md | 113 + vendor/sdl-3.0.0/docs/README-vita.md | 33 + vendor/sdl-3.0.0/docs/README-wayland.md | 45 + vendor/sdl-3.0.0/docs/README-windows.md | 66 + vendor/sdl-3.0.0/docs/README-winrt.md | 523 + vendor/sdl-3.0.0/docs/README.md | 57 + vendor/sdl-3.0.0/docs/doxyfile | 1563 + vendor/sdl-3.0.0/docs/release_checklist.md | 49 + vendor/sdl-3.0.0/include/SDL3/SDL.h | 81 + vendor/sdl-3.0.0/include/SDL3/SDL_assert.h | 346 + vendor/sdl-3.0.0/include/SDL3/SDL_atomic.h | 418 + vendor/sdl-3.0.0/include/SDL3/SDL_audio.h | 1495 + .../sdl-3.0.0/include/SDL3/SDL_begin_code.h | 204 + vendor/sdl-3.0.0/include/SDL3/SDL_bits.h | 124 + vendor/sdl-3.0.0/include/SDL3/SDL_blendmode.h | 196 + vendor/sdl-3.0.0/include/SDL3/SDL_clipboard.h | 247 + .../sdl-3.0.0/include/SDL3/SDL_close_code.h | 40 + vendor/sdl-3.0.0/include/SDL3/SDL_copying.h | 26 + vendor/sdl-3.0.0/include/SDL3/SDL_cpuinfo.h | 369 + vendor/sdl-3.0.0/include/SDL3/SDL_egl.h | 2355 + vendor/sdl-3.0.0/include/SDL3/SDL_endian.h | 398 + vendor/sdl-3.0.0/include/SDL3/SDL_error.h | 169 + vendor/sdl-3.0.0/include/SDL3/SDL_events.h | 1144 + .../sdl-3.0.0/include/SDL3/SDL_filesystem.h | 245 + vendor/sdl-3.0.0/include/SDL3/SDL_gamepad.h | 1250 + vendor/sdl-3.0.0/include/SDL3/SDL_guid.h | 100 + vendor/sdl-3.0.0/include/SDL3/SDL_haptic.h | 1339 + vendor/sdl-3.0.0/include/SDL3/SDL_hidapi.h | 550 + vendor/sdl-3.0.0/include/SDL3/SDL_hints.h | 2712 + vendor/sdl-3.0.0/include/SDL3/SDL_init.h | 187 + vendor/sdl-3.0.0/include/SDL3/SDL_intrin.h | 161 + vendor/sdl-3.0.0/include/SDL3/SDL_joystick.h | 1025 + vendor/sdl-3.0.0/include/SDL3/SDL_keyboard.h | 355 + vendor/sdl-3.0.0/include/SDL3/SDL_keycode.h | 356 + vendor/sdl-3.0.0/include/SDL3/SDL_loadso.h | 112 + vendor/sdl-3.0.0/include/SDL3/SDL_locale.h | 101 + vendor/sdl-3.0.0/include/SDL3/SDL_log.h | 402 + vendor/sdl-3.0.0/include/SDL3/SDL_main.h | 310 + vendor/sdl-3.0.0/include/SDL3/SDL_main_impl.h | 201 + .../sdl-3.0.0/include/SDL3/SDL_messagebox.h | 191 + vendor/sdl-3.0.0/include/SDL3/SDL_metal.h | 105 + vendor/sdl-3.0.0/include/SDL3/SDL_misc.h | 77 + vendor/sdl-3.0.0/include/SDL3/SDL_mouse.h | 479 + vendor/sdl-3.0.0/include/SDL3/SDL_mutex.h | 778 + vendor/sdl-3.0.0/include/SDL3/SDL_oldnames.h | 942 + vendor/sdl-3.0.0/include/SDL3/SDL_opengl.h | 2123 + .../sdl-3.0.0/include/SDL3/SDL_opengl_glext.h | 13213 ++++ vendor/sdl-3.0.0/include/SDL3/SDL_opengles.h | 39 + vendor/sdl-3.0.0/include/SDL3/SDL_opengles2.h | 52 + .../include/SDL3/SDL_opengles2_gl2.h | 656 + .../include/SDL3/SDL_opengles2_gl2ext.h | 4033 ++ .../include/SDL3/SDL_opengles2_gl2platform.h | 27 + .../include/SDL3/SDL_opengles2_khrplatform.h | 311 + vendor/sdl-3.0.0/include/SDL3/SDL_pixels.h | 663 + vendor/sdl-3.0.0/include/SDL3/SDL_platform.h | 63 + .../include/SDL3/SDL_platform_defines.h | 219 + vendor/sdl-3.0.0/include/SDL3/SDL_power.h | 85 + .../sdl-3.0.0/include/SDL3/SDL_properties.h | 174 + vendor/sdl-3.0.0/include/SDL3/SDL_quit.h | 58 + vendor/sdl-3.0.0/include/SDL3/SDL_rect.h | 380 + vendor/sdl-3.0.0/include/SDL3/SDL_render.h | 1620 + vendor/sdl-3.0.0/include/SDL3/SDL_revision.h | 37 + vendor/sdl-3.0.0/include/SDL3/SDL_rwops.h | 997 + vendor/sdl-3.0.0/include/SDL3/SDL_scancode.h | 436 + vendor/sdl-3.0.0/include/SDL3/SDL_sensor.h | 294 + vendor/sdl-3.0.0/include/SDL3/SDL_shape.h | 150 + vendor/sdl-3.0.0/include/SDL3/SDL_stdinc.h | 831 + vendor/sdl-3.0.0/include/SDL3/SDL_surface.h | 970 + vendor/sdl-3.0.0/include/SDL3/SDL_system.h | 679 + vendor/sdl-3.0.0/include/SDL3/SDL_syswm.h | 387 + vendor/sdl-3.0.0/include/SDL3/SDL_test.h | 66 + .../sdl-3.0.0/include/SDL3/SDL_test_assert.h | 103 + .../sdl-3.0.0/include/SDL3/SDL_test_common.h | 237 + .../sdl-3.0.0/include/SDL3/SDL_test_compare.h | 86 + .../sdl-3.0.0/include/SDL3/SDL_test_crc32.h | 122 + vendor/sdl-3.0.0/include/SDL3/SDL_test_font.h | 167 + .../sdl-3.0.0/include/SDL3/SDL_test_fuzzer.h | 384 + .../sdl-3.0.0/include/SDL3/SDL_test_harness.h | 132 + vendor/sdl-3.0.0/include/SDL3/SDL_test_log.h | 65 + vendor/sdl-3.0.0/include/SDL3/SDL_test_md5.h | 127 + .../sdl-3.0.0/include/SDL3/SDL_test_memory.h | 68 + .../sdl-3.0.0/include/SDL3/SDL_test_random.h | 112 + vendor/sdl-3.0.0/include/SDL3/SDL_thread.h | 448 + vendor/sdl-3.0.0/include/SDL3/SDL_timer.h | 198 + vendor/sdl-3.0.0/include/SDL3/SDL_touch.h | 153 + vendor/sdl-3.0.0/include/SDL3/SDL_version.h | 163 + vendor/sdl-3.0.0/include/SDL3/SDL_video.h | 2232 + vendor/sdl-3.0.0/include/SDL3/SDL_vulkan.h | 195 + .../include/build_config/SDL_build_config.h | 61 + .../build_config/SDL_build_config.h.cmake | 597 + .../build_config/SDL_build_config_android.h | 192 + .../SDL_build_config_emscripten.h | 212 + .../build_config/SDL_build_config_ios.h | 212 + .../build_config/SDL_build_config_macos.h | 274 + .../build_config/SDL_build_config_minimal.h | 95 + .../build_config/SDL_build_config_ngage.h | 89 + .../build_config/SDL_build_config_windows.h | 307 + .../build_config/SDL_build_config_wingdk.h | 250 + .../build_config/SDL_build_config_winrt.h | 218 + .../build_config/SDL_build_config_xbox.h | 236 + .../include/build_config/SDL_revision.h.cmake | 39 + .../cmake/sdl3-config-version.cmake | 19 + .../mingw/pkg-support/cmake/sdl3-config.cmake | 19 + vendor/sdl-3.0.0/src/SDL.c | 667 + vendor/sdl-3.0.0/src/SDL_assert.c | 453 + vendor/sdl-3.0.0/src/SDL_assert_c.h | 28 + vendor/sdl-3.0.0/src/SDL_error.c | 104 + vendor/sdl-3.0.0/src/SDL_error_c.h | 42 + vendor/sdl-3.0.0/src/SDL_guid.c | 92 + vendor/sdl-3.0.0/src/SDL_hashtable.c | 276 + vendor/sdl-3.0.0/src/SDL_hashtable.h | 57 + vendor/sdl-3.0.0/src/SDL_hints.c | 312 + vendor/sdl-3.0.0/src/SDL_hints_c.h | 31 + vendor/sdl-3.0.0/src/SDL_internal.h | 210 + vendor/sdl-3.0.0/src/SDL_list.c | 86 + vendor/sdl-3.0.0/src/SDL_list.h | 36 + vendor/sdl-3.0.0/src/SDL_log.c | 506 + vendor/sdl-3.0.0/src/SDL_log_c.h | 31 + vendor/sdl-3.0.0/src/SDL_properties.c | 289 + vendor/sdl-3.0.0/src/SDL_properties_c.h | 23 + vendor/sdl-3.0.0/src/SDL_utils.c | 63 + vendor/sdl-3.0.0/src/SDL_utils_c.h | 33 + vendor/sdl-3.0.0/src/atomic/SDL_atomic.c | 301 + vendor/sdl-3.0.0/src/atomic/SDL_spinlock.c | 207 + vendor/sdl-3.0.0/src/audio/SDL_audio.c | 2131 + vendor/sdl-3.0.0/src/audio/SDL_audio_c.h | 27 + .../src/audio/SDL_audio_channel_converters.h | 1068 + .../src/audio/SDL_audio_resampler_filter.h | 544 + vendor/sdl-3.0.0/src/audio/SDL_audiocvt.c | 1255 + vendor/sdl-3.0.0/src/audio/SDL_audiodev.c | 125 + vendor/sdl-3.0.0/src/audio/SDL_audiodev_c.h | 41 + vendor/sdl-3.0.0/src/audio/SDL_audioqueue.c | 516 + vendor/sdl-3.0.0/src/audio/SDL_audioqueue.h | 77 + .../sdl-3.0.0/src/audio/SDL_audioresample.c | 335 + .../sdl-3.0.0/src/audio/SDL_audioresample.h | 43 + vendor/sdl-3.0.0/src/audio/SDL_audiotypecvt.c | 1009 + vendor/sdl-3.0.0/src/audio/SDL_mixer.c | 293 + vendor/sdl-3.0.0/src/audio/SDL_sysaudio.h | 360 + vendor/sdl-3.0.0/src/audio/SDL_wave.c | 2129 + vendor/sdl-3.0.0/src/audio/SDL_wave.h | 151 + .../sdl-3.0.0/src/audio/aaudio/SDL_aaudio.c | 536 + .../sdl-3.0.0/src/audio/aaudio/SDL_aaudio.h | 38 + .../src/audio/aaudio/SDL_aaudiofuncs.h | 82 + .../sdl-3.0.0/src/audio/alsa/SDL_alsa_audio.c | 994 + .../sdl-3.0.0/src/audio/alsa/SDL_alsa_audio.h | 42 + .../src/audio/android/SDL_androidaudio.c | 191 + .../src/audio/android/SDL_androidaudio.h | 38 + .../src/audio/coreaudio/SDL_coreaudio.h | 68 + .../src/audio/coreaudio/SDL_coreaudio.m | 979 + .../src/audio/directsound/SDL_directsound.c | 675 + .../src/audio/directsound/SDL_directsound.h | 43 + .../sdl-3.0.0/src/audio/disk/SDL_diskaudio.c | 173 + .../sdl-3.0.0/src/audio/disk/SDL_diskaudio.h | 36 + vendor/sdl-3.0.0/src/audio/dsp/SDL_dspaudio.c | 304 + vendor/sdl-3.0.0/src/audio/dsp/SDL_dspaudio.h | 37 + .../src/audio/dummy/SDL_dummyaudio.c | 97 + .../src/audio/dummy/SDL_dummyaudio.h | 34 + .../audio/emscripten/SDL_emscriptenaudio.c | 351 + .../audio/emscripten/SDL_emscriptenaudio.h | 33 + .../src/audio/haiku/SDL_haikuaudio.cc | 222 + .../src/audio/haiku/SDL_haikuaudio.h | 35 + .../sdl-3.0.0/src/audio/jack/SDL_jackaudio.c | 443 + .../sdl-3.0.0/src/audio/jack/SDL_jackaudio.h | 35 + .../sdl-3.0.0/src/audio/n3ds/SDL_n3dsaudio.c | 287 + .../sdl-3.0.0/src/audio/n3ds/SDL_n3dsaudio.h | 40 + .../src/audio/netbsd/SDL_netbsdaudio.c | 328 + .../src/audio/netbsd/SDL_netbsdaudio.h | 44 + .../src/audio/openslES/SDL_openslES.c | 782 + .../src/audio/openslES/SDL_openslES.h | 38 + .../src/audio/pipewire/SDL_pipewire.c | 1286 + .../src/audio/pipewire/SDL_pipewire.h | 43 + vendor/sdl-3.0.0/src/audio/ps2/SDL_ps2audio.c | 159 + vendor/sdl-3.0.0/src/audio/ps2/SDL_ps2audio.h | 42 + vendor/sdl-3.0.0/src/audio/psp/SDL_pspaudio.c | 183 + vendor/sdl-3.0.0/src/audio/psp/SDL_pspaudio.h | 41 + .../src/audio/pulseaudio/SDL_pulseaudio.c | 1032 + .../src/audio/pulseaudio/SDL_pulseaudio.h | 44 + .../sdl-3.0.0/src/audio/qnx/SDL_qsa_audio.c | 450 + .../sdl-3.0.0/src/audio/qnx/SDL_qsa_audio.h | 40 + .../src/audio/sndio/SDL_sndioaudio.c | 359 + .../src/audio/sndio/SDL_sndioaudio.h | 38 + .../sdl-3.0.0/src/audio/vita/SDL_vitaaudio.c | 238 + .../sdl-3.0.0/src/audio/vita/SDL_vitaaudio.h | 41 + .../sdl-3.0.0/src/audio/wasapi/SDL_wasapi.c | 765 + .../sdl-3.0.0/src/audio/wasapi/SDL_wasapi.h | 73 + .../src/audio/wasapi/SDL_wasapi_win32.c | 195 + .../src/audio/wasapi/SDL_wasapi_winrt.cpp | 360 + .../sdl-3.0.0/src/core/SDL_core_unsupported.c | 218 + vendor/sdl-3.0.0/src/core/SDL_runapp.c | 45 + .../sdl-3.0.0/src/core/android/SDL_android.c | 2742 + .../sdl-3.0.0/src/core/android/SDL_android.h | 152 + .../freebsd/SDL_evdev_kbd_default_keyaccmap.h | 167 + .../src/core/freebsd/SDL_evdev_kbd_freebsd.c | 598 + vendor/sdl-3.0.0/src/core/gdk/SDL_gdk.cpp | 236 + vendor/sdl-3.0.0/src/core/gdk/SDL_gdk.h | 24 + vendor/sdl-3.0.0/src/core/haiku/SDL_BApp.h | 425 + vendor/sdl-3.0.0/src/core/haiku/SDL_BeApp.cc | 195 + vendor/sdl-3.0.0/src/core/haiku/SDL_BeApp.h | 40 + vendor/sdl-3.0.0/src/core/linux/SDL_dbus.c | 634 + vendor/sdl-3.0.0/src/core/linux/SDL_dbus.h | 109 + vendor/sdl-3.0.0/src/core/linux/SDL_evdev.c | 962 + vendor/sdl-3.0.0/src/core/linux/SDL_evdev.h | 38 + .../src/core/linux/SDL_evdev_capabilities.c | 167 + .../src/core/linux/SDL_evdev_capabilities.h | 72 + .../sdl-3.0.0/src/core/linux/SDL_evdev_kbd.c | 819 + .../sdl-3.0.0/src/core/linux/SDL_evdev_kbd.h | 32 + .../linux/SDL_evdev_kbd_default_accents.h | 282 + .../core/linux/SDL_evdev_kbd_default_keymap.h | 4765 ++ vendor/sdl-3.0.0/src/core/linux/SDL_fcitx.c | 483 + vendor/sdl-3.0.0/src/core/linux/SDL_fcitx.h | 35 + vendor/sdl-3.0.0/src/core/linux/SDL_ibus.c | 759 + vendor/sdl-3.0.0/src/core/linux/SDL_ibus.h | 55 + vendor/sdl-3.0.0/src/core/linux/SDL_ime.c | 150 + vendor/sdl-3.0.0/src/core/linux/SDL_ime.h | 35 + vendor/sdl-3.0.0/src/core/linux/SDL_sandbox.c | 45 + vendor/sdl-3.0.0/src/core/linux/SDL_sandbox.h | 37 + .../src/core/linux/SDL_system_theme.c | 156 + .../src/core/linux/SDL_system_theme.h | 30 + .../sdl-3.0.0/src/core/linux/SDL_threadprio.c | 345 + vendor/sdl-3.0.0/src/core/linux/SDL_udev.c | 569 + vendor/sdl-3.0.0/src/core/linux/SDL_udev.h | 113 + vendor/sdl-3.0.0/src/core/n3ds/SDL_n3ds.c | 49 + .../src/core/ngage/SDL_ngage_runapp.cpp | 78 + .../sdl-3.0.0/src/core/openbsd/SDL_wscons.h | 25 + .../src/core/openbsd/SDL_wscons_kbd.c | 929 + .../src/core/openbsd/SDL_wscons_mouse.c | 133 + vendor/sdl-3.0.0/src/core/ps2/SDL_ps2.c | 85 + vendor/sdl-3.0.0/src/core/psp/SDL_psp.c | 82 + vendor/sdl-3.0.0/src/core/unix/SDL_appid.c | 76 + vendor/sdl-3.0.0/src/core/unix/SDL_appid.h | 30 + vendor/sdl-3.0.0/src/core/unix/SDL_poll.c | 95 + vendor/sdl-3.0.0/src/core/unix/SDL_poll.h | 33 + .../sdl-3.0.0/src/core/windows/SDL_directx.h | 112 + vendor/sdl-3.0.0/src/core/windows/SDL_hid.c | 84 + vendor/sdl-3.0.0/src/core/windows/SDL_hid.h | 213 + .../src/core/windows/SDL_immdevice.c | 434 + .../src/core/windows/SDL_immdevice.h | 45 + .../sdl-3.0.0/src/core/windows/SDL_windows.c | 483 + .../sdl-3.0.0/src/core/windows/SDL_windows.h | 178 + .../sdl-3.0.0/src/core/windows/SDL_xinput.c | 141 + .../sdl-3.0.0/src/core/windows/SDL_xinput.h | 265 + vendor/sdl-3.0.0/src/core/windows/pch.c | 21 + vendor/sdl-3.0.0/src/core/windows/pch_cpp.cpp | 21 + vendor/sdl-3.0.0/src/core/windows/version.rc | 38 + .../src/core/winrt/SDL_winrtapp_common.cpp | 59 + .../src/core/winrt/SDL_winrtapp_common.h | 31 + .../src/core/winrt/SDL_winrtapp_direct3d.cpp | 772 + .../src/core/winrt/SDL_winrtapp_direct3d.h | 93 + .../src/core/winrt/SDL_winrtapp_xaml.cpp | 146 + .../src/core/winrt/SDL_winrtapp_xaml.h | 31 + vendor/sdl-3.0.0/src/cpuinfo/SDL_cpuinfo.c | 1085 + vendor/sdl-3.0.0/src/dynapi/SDL_dynapi.c | 550 + vendor/sdl-3.0.0/src/dynapi/SDL_dynapi.h | 77 + vendor/sdl-3.0.0/src/dynapi/SDL_dynapi.sym | 925 + .../src/dynapi/SDL_dynapi_overrides.h | 947 + .../sdl-3.0.0/src/dynapi/SDL_dynapi_procs.h | 979 + .../src/dynapi/SDL_dynapi_unsupported.h | 48 + vendor/sdl-3.0.0/src/dynapi/gendynapi.py | 559 + .../src/events/SDL_clipboardevents.c | 41 + .../src/events/SDL_clipboardevents_c.h | 28 + .../sdl-3.0.0/src/events/SDL_displayevents.c | 65 + .../src/events/SDL_displayevents_c.h | 28 + vendor/sdl-3.0.0/src/events/SDL_dropevents.c | 105 + .../sdl-3.0.0/src/events/SDL_dropevents_c.h | 31 + vendor/sdl-3.0.0/src/events/SDL_events.c | 1426 + vendor/sdl-3.0.0/src/events/SDL_events_c.h | 59 + vendor/sdl-3.0.0/src/events/SDL_keyboard.c | 1322 + vendor/sdl-3.0.0/src/events/SDL_keyboard_c.h | 85 + .../src/events/SDL_keysym_to_scancode.c | 438 + .../src/events/SDL_keysym_to_scancode_c.h | 28 + vendor/sdl-3.0.0/src/events/SDL_mouse.c | 1454 + vendor/sdl-3.0.0/src/events/SDL_mouse_c.h | 169 + vendor/sdl-3.0.0/src/events/SDL_quit.c | 195 + .../src/events/SDL_scancode_tables.c | 71 + .../src/events/SDL_scancode_tables_c.h | 33 + vendor/sdl-3.0.0/src/events/SDL_touch.c | 490 + vendor/sdl-3.0.0/src/events/SDL_touch_c.h | 57 + .../sdl-3.0.0/src/events/SDL_windowevents.c | 242 + .../sdl-3.0.0/src/events/SDL_windowevents_c.h | 29 + vendor/sdl-3.0.0/src/events/blank_cursor.h | 31 + vendor/sdl-3.0.0/src/events/default_cursor.h | 113 + vendor/sdl-3.0.0/src/events/imKStoUCS.c | 349 + vendor/sdl-3.0.0/src/events/imKStoUCS.h | 32 + vendor/sdl-3.0.0/src/events/scancodes_ascii.h | 165 + .../sdl-3.0.0/src/events/scancodes_darwin.h | 159 + vendor/sdl-3.0.0/src/events/scancodes_linux.h | 848 + .../sdl-3.0.0/src/events/scancodes_windows.h | 55 + .../sdl-3.0.0/src/events/scancodes_xfree86.h | 520 + vendor/sdl-3.0.0/src/file/SDL_rwops.c | 1022 + .../src/file/cocoa/SDL_rwopsbundlesupport.h | 30 + .../src/file/cocoa/SDL_rwopsbundlesupport.m | 65 + .../sdl-3.0.0/src/file/n3ds/SDL_rwopsromfs.c | 89 + .../sdl-3.0.0/src/file/n3ds/SDL_rwopsromfs.h | 28 + .../filesystem/android/SDL_sysfilesystem.c | 61 + .../src/filesystem/cocoa/SDL_sysfilesystem.m | 242 + .../src/filesystem/dummy/SDL_sysfilesystem.c | 46 + .../filesystem/emscripten/SDL_sysfilesystem.c | 111 + .../src/filesystem/gdk/SDL_sysfilesystem.cpp | 140 + .../src/filesystem/haiku/SDL_sysfilesystem.cc | 149 + .../src/filesystem/n3ds/SDL_sysfilesystem.c | 89 + .../src/filesystem/ps2/SDL_sysfilesystem.c | 112 + .../src/filesystem/psp/SDL_sysfilesystem.c | 79 + .../src/filesystem/riscos/SDL_sysfilesystem.c | 209 + .../src/filesystem/unix/SDL_sysfilesystem.c | 613 + .../src/filesystem/vita/SDL_sysfilesystem.c | 93 + .../filesystem/windows/SDL_sysfilesystem.c | 334 + .../filesystem/winrt/SDL_sysfilesystem.cpp | 242 + vendor/sdl-3.0.0/src/haptic/SDL_haptic.c | 813 + vendor/sdl-3.0.0/src/haptic/SDL_haptic_c.h | 28 + vendor/sdl-3.0.0/src/haptic/SDL_syshaptic.h | 213 + .../src/haptic/android/SDL_syshaptic.c | 304 + .../src/haptic/android/SDL_syshaptic_c.h | 28 + .../src/haptic/darwin/SDL_syshaptic.c | 1362 + .../src/haptic/darwin/SDL_syshaptic_c.h | 29 + .../src/haptic/dummy/SDL_syshaptic.c | 144 + .../src/haptic/linux/SDL_syshaptic.c | 1122 + .../src/haptic/windows/SDL_dinputhaptic.c | 1254 + .../src/haptic/windows/SDL_dinputhaptic_c.h | 53 + .../src/haptic/windows/SDL_windowshaptic.c | 445 + .../src/haptic/windows/SDL_windowshaptic_c.h | 95 + .../src/haptic/windows/SDL_xinputhaptic.c | 446 + .../src/haptic/windows/SDL_xinputhaptic_c.h | 53 + vendor/sdl-3.0.0/src/hidapi/AUTHORS.txt | 18 + .../sdl-3.0.0/src/hidapi/BUILD.autotools.md | 114 + vendor/sdl-3.0.0/src/hidapi/BUILD.cmake.md | 280 + vendor/sdl-3.0.0/src/hidapi/BUILD.md | 127 + vendor/sdl-3.0.0/src/hidapi/CMakeLists.txt | 105 + vendor/sdl-3.0.0/src/hidapi/HACKING.txt | 19 + vendor/sdl-3.0.0/src/hidapi/LICENSE-bsd.txt | 26 + vendor/sdl-3.0.0/src/hidapi/LICENSE-gpl3.txt | 674 + vendor/sdl-3.0.0/src/hidapi/LICENSE-orig.txt | 9 + vendor/sdl-3.0.0/src/hidapi/LICENSE.txt | 13 + vendor/sdl-3.0.0/src/hidapi/Makefile.am | 85 + vendor/sdl-3.0.0/src/hidapi/README.md | 196 + vendor/sdl-3.0.0/src/hidapi/SDL_hidapi.c | 1750 + .../sdl-3.0.0/src/hidapi/SDL_hidapi_android.h | 26 + vendor/sdl-3.0.0/src/hidapi/SDL_hidapi_c.h | 35 + vendor/sdl-3.0.0/src/hidapi/SDL_hidapi_ios.h | 26 + .../sdl-3.0.0/src/hidapi/SDL_hidapi_libusb.h | 126 + .../sdl-3.0.0/src/hidapi/SDL_hidapi_linux.h | 47 + vendor/sdl-3.0.0/src/hidapi/SDL_hidapi_mac.h | 25 + .../src/hidapi/SDL_hidapi_steamxbox.h | 23 + .../sdl-3.0.0/src/hidapi/SDL_hidapi_windows.h | 82 + vendor/sdl-3.0.0/src/hidapi/VERSION | 1 + vendor/sdl-3.0.0/src/hidapi/android/hid.cpp | 1448 + vendor/sdl-3.0.0/src/hidapi/android/hid.h | 39 + vendor/sdl-3.0.0/src/hidapi/bootstrap | 2 + vendor/sdl-3.0.0/src/hidapi/configure.ac | 256 + .../sdl-3.0.0/src/hidapi/dist/hidapi.podspec | 31 + .../documentation/cmake-gui-drop-down.png | Bin 0 -> 22316 bytes .../documentation/cmake-gui-highlights.png | Bin 0 -> 77327 bytes vendor/sdl-3.0.0/src/hidapi/doxygen/Doxyfile | 2724 + .../sdl-3.0.0/src/hidapi/doxygen/main_page.md | 13 + vendor/sdl-3.0.0/src/hidapi/hidapi/hidapi.h | 634 + .../src/hidapi/hidtest/CMakeLists.txt | 40 + .../sdl-3.0.0/src/hidapi/hidtest/Makefile.am | 28 + vendor/sdl-3.0.0/src/hidapi/hidtest/test.c | 316 + vendor/sdl-3.0.0/src/hidapi/ios/hid.m | 1037 + .../src/hidapi/libusb/CMakeLists.txt | 107 + .../src/hidapi/libusb/Makefile-manual | 22 + .../sdl-3.0.0/src/hidapi/libusb/Makefile.am | 34 + .../src/hidapi/libusb/Makefile.freebsd | 39 + .../src/hidapi/libusb/Makefile.haiku | 39 + .../src/hidapi/libusb/Makefile.linux | 42 + vendor/sdl-3.0.0/src/hidapi/libusb/hid.c | 2143 + .../src/hidapi/libusb/hidapi_libusb.h | 56 + .../src/hidapi/libusb/hidapi_thread_pthread.h | 174 + .../src/hidapi/libusb/hidapi_thread_sdl.h | 198 + .../sdl-3.0.0/src/hidapi/linux/CMakeLists.txt | 38 + .../src/hidapi/linux/Makefile-manual | 42 + vendor/sdl-3.0.0/src/hidapi/linux/Makefile.am | 10 + vendor/sdl-3.0.0/src/hidapi/linux/hid.c | 1483 + vendor/sdl-3.0.0/src/hidapi/m4/ax_pthread.m4 | 309 + vendor/sdl-3.0.0/src/hidapi/m4/pkg.m4 | 157 + .../sdl-3.0.0/src/hidapi/mac/CMakeLists.txt | 48 + .../sdl-3.0.0/src/hidapi/mac/Makefile-manual | 27 + vendor/sdl-3.0.0/src/hidapi/mac/Makefile.am | 9 + vendor/sdl-3.0.0/src/hidapi/mac/hid.c | 1593 + .../sdl-3.0.0/src/hidapi/mac/hidapi_darwin.h | 98 + vendor/sdl-3.0.0/src/hidapi/meson.build | 22 + .../src/hidapi/pc/hidapi-hidraw.pc.in | 11 + .../src/hidapi/pc/hidapi-libusb.pc.in | 11 + vendor/sdl-3.0.0/src/hidapi/pc/hidapi.pc.in | 11 + .../sdl-3.0.0/src/hidapi/src/CMakeLists.txt | 193 + .../hidapi/src/cmake/hidapi-config.cmake.in | 61 + .../src/hidapi/subprojects/README.md | 2 + .../hidapi_build_cmake/CMakeLists.txt | 10 + .../src/hidapi/testgui/Makefile-manual | 26 + .../sdl-3.0.0/src/hidapi/testgui/Makefile.am | 43 + .../src/hidapi/testgui/Makefile.freebsd | 33 + .../src/hidapi/testgui/Makefile.linux | 32 + .../sdl-3.0.0/src/hidapi/testgui/Makefile.mac | 46 + .../src/hidapi/testgui/Makefile.mingw | 32 + .../TestGUI.app.in/Contents/Info.plist | 28 + .../testgui/TestGUI.app.in/Contents/PkgInfo | 1 + .../Resources/English.lproj/InfoPlist.strings | Bin 0 -> 92 bytes .../Contents/Resources/Signal11.icns | Bin 0 -> 21918 bytes .../src/hidapi/testgui/copy_to_bundle.sh | 98 + .../src/hidapi/testgui/mac_support.h | 17 + .../src/hidapi/testgui/mac_support_cocoa.m | 103 + vendor/sdl-3.0.0/src/hidapi/testgui/test.cpp | 532 + .../sdl-3.0.0/src/hidapi/testgui/testgui.sln | 20 + .../src/hidapi/testgui/testgui.vcproj | 217 + vendor/sdl-3.0.0/src/hidapi/udev/69-hid.rules | 36 + .../src/hidapi/windows/CMakeLists.txt | 63 + .../src/hidapi/windows/Makefile-manual | 14 + .../sdl-3.0.0/src/hidapi/windows/Makefile.am | 15 + .../src/hidapi/windows/Makefile.mingw | 30 + vendor/sdl-3.0.0/src/hidapi/windows/hid.c | 1665 + vendor/sdl-3.0.0/src/hidapi/windows/hidapi.rc | 35 + .../sdl-3.0.0/src/hidapi/windows/hidapi.sln | 41 + .../src/hidapi/windows/hidapi.vcproj | 200 + .../src/hidapi/windows/hidapi.vcxproj | 200 + .../src/hidapi/windows/hidapi_cfgmgr32.h | 86 + .../windows/hidapi_descriptor_reconstruct.c | 991 + .../windows/hidapi_descriptor_reconstruct.h | 239 + .../src/hidapi/windows/hidapi_hidclass.h | 40 + .../src/hidapi/windows/hidapi_hidpi.h | 72 + .../src/hidapi/windows/hidapi_hidsdi.h | 59 + .../src/hidapi/windows/hidapi_winapi.h | 74 + .../src/hidapi/windows/hidtest.vcproj | 196 + .../src/hidapi/windows/hidtest.vcxproj | 176 + .../windows/pp_data_dump/CMakeLists.txt | 15 + .../src/hidapi/windows/pp_data_dump/README.md | 122 + .../windows/pp_data_dump/pp_data_dump.c | 238 + .../src/hidapi/windows/test/CMakeLists.txt | 76 + .../test/data/045E_02FF_0005_0001.pp_data | 420 + .../045E_02FF_0005_0001_expected.rpt_desc | 12 + .../data/045E_02FF_0005_0001_real.rpt_desc | 64 + .../test/data/046A_0011_0006_0001.pp_data | 183 + .../046A_0011_0006_0001_expected.rpt_desc | 7 + .../data/046A_0011_0006_0001_real.rpt_desc | 7 + .../test/data/046D_0A37_0001_000C.pp_data | 532 + .../046D_0A37_0001_000C_expected.rpt_desc | 16 + .../data/046D_0A37_0001_000C_real.rpt_desc | 61 + .../test/data/046D_B010_0001_000C.pp_data | 97 + .../046D_B010_0001_000C_expected.rpt_desc | 3 + .../data/046D_B010_0001_000C_real.rpt_desc | 38 + .../test/data/046D_B010_0001_FF00.pp_data | 139 + .../046D_B010_0001_FF00_expected.rpt_desc | 4 + .../data/046D_B010_0001_FF00_real.rpt_desc | 39 + .../test/data/046D_B010_0002_0001.pp_data | 302 + .../046D_B010_0002_0001_expected.rpt_desc | 8 + .../data/046D_B010_0002_0001_real.rpt_desc | 61 + .../test/data/046D_B010_0002_FF00.pp_data | 139 + .../046D_B010_0002_FF00_expected.rpt_desc | 4 + .../data/046D_B010_0002_FF00_real.rpt_desc | 39 + .../test/data/046D_B010_0006_0001.pp_data | 185 + .../046D_B010_0006_0001_expected.rpt_desc | 7 + .../data/046D_B010_0006_0001_real.rpt_desc | 58 + .../test/data/046D_C077_0002_0001.pp_data | 252 + .../046D_C077_0002_0001_expected.rpt_desc | 5 + .../data/046D_C077_0002_0001_real.rpt_desc | 24 + .../test/data/046D_C283_0004_0001.pp_data | 520 + .../046D_C283_0004_0001_expected.rpt_desc | 18 + .../data/046D_C283_0004_0001_real.rpt_desc | 18 + .../test/data/046D_C52F_0001_000C.pp_data | 93 + .../046D_C52F_0001_000C_expected.rpt_desc | 3 + .../data/046D_C52F_0001_000C_real.rpt_desc | 12 + .../test/data/046D_C52F_0001_FF00.pp_data | 139 + .../046D_C52F_0001_FF00_expected.rpt_desc | 4 + .../data/046D_C52F_0001_FF00_real.rpt_desc | 13 + .../test/data/046D_C52F_0002_0001.pp_data | 302 + .../046D_C52F_0002_0001_expected.rpt_desc | 8 + .../data/046D_C52F_0002_0001_real.rpt_desc | 33 + .../test/data/046D_C52F_0002_FF00.pp_data | 139 + .../046D_C52F_0002_FF00_expected.rpt_desc | 4 + .../data/046D_C52F_0002_FF00_real.rpt_desc | 13 + .../test/data/046D_C534_0001_000C.pp_data | 93 + .../046D_C534_0001_000C_expected.rpt_desc | 3 + .../data/046D_C534_0001_000C_real.rpt_desc | 18 + .../test/data/046D_C534_0001_FF00.pp_data | 139 + .../046D_C534_0001_FF00_expected.rpt_desc | 4 + .../data/046D_C534_0001_FF00_real.rpt_desc | 20 + .../test/data/046D_C534_0002_0001.pp_data | 302 + .../046D_C534_0002_0001_expected.rpt_desc | 8 + .../data/046D_C534_0002_0001_real.rpt_desc | 44 + .../test/data/046D_C534_0002_FF00.pp_data | 139 + .../046D_C534_0002_FF00_expected.rpt_desc | 4 + .../data/046D_C534_0002_FF00_real.rpt_desc | 22 + .../test/data/046D_C534_0006_0001.pp_data | 185 + .../046D_C534_0006_0001_expected.rpt_desc | 7 + .../data/046D_C534_0006_0001_real.rpt_desc | 42 + .../test/data/046D_C534_0080_0001.pp_data | 185 + .../046D_C534_0080_0001_expected.rpt_desc | 4 + .../data/046D_C534_0080_0001_real.rpt_desc | 22 + .../test/data/047F_C056_0001_000C.pp_data | 385 + .../047F_C056_0001_000C_expected.rpt_desc | 10 + .../data/047F_C056_0001_000C_real.rpt_desc | 47 + .../test/data/047F_C056_0003_FFA0.pp_data | 1255 + .../047F_C056_0003_FFA0_expected.rpt_desc | 24 + .../data/047F_C056_0003_FFA0_real.rpt_desc | 113 + .../test/data/047F_C056_0005_000B.pp_data | 461 + .../047F_C056_0005_000B_expected.rpt_desc | 17 + .../data/047F_C056_0005_000B_real.rpt_desc | 68 + .../test/data/17CC_1130_0000_FF01.pp_data | 11508 ++++ .../17CC_1130_0000_FF01_expected.rpt_desc | 75 + .../data/17CC_1130_0000_FF01_real.rpt_desc | 381 + .../test/hid_report_reconstructor_test.c | 561 + vendor/sdl-3.0.0/src/joystick/SDL_gamepad.c | 3543 + vendor/sdl-3.0.0/src/joystick/SDL_gamepad_c.h | 50 + .../sdl-3.0.0/src/joystick/SDL_gamepad_db.h | 997 + vendor/sdl-3.0.0/src/joystick/SDL_joystick.c | 3413 + .../sdl-3.0.0/src/joystick/SDL_joystick_c.h | 229 + .../sdl-3.0.0/src/joystick/SDL_sysjoystick.h | 258 + .../src/joystick/android/SDL_sysjoystick.c | 701 + .../src/joystick/android/SDL_sysjoystick_c.h | 57 + .../src/joystick/apple/SDL_mfijoystick.m | 1917 + .../src/joystick/apple/SDL_mfijoystick_c.h | 59 + .../src/joystick/bsd/SDL_bsdjoystick.c | 871 + vendor/sdl-3.0.0/src/joystick/check_8bitdo.sh | 15 + .../sdl-3.0.0/src/joystick/controller_list.h | 596 + .../sdl-3.0.0/src/joystick/controller_type.c | 140 + .../sdl-3.0.0/src/joystick/controller_type.h | 77 + .../src/joystick/darwin/SDL_iokitjoystick.c | 1075 + .../src/joystick/darwin/SDL_iokitjoystick_c.h | 79 + .../src/joystick/dummy/SDL_sysjoystick.c | 150 + .../src/joystick/emscripten/SDL_sysjoystick.c | 439 + .../joystick/emscripten/SDL_sysjoystick_c.h | 49 + .../src/joystick/haiku/SDL_haikujoystick.cc | 321 + .../src/joystick/hidapi/SDL_hidapi_combined.c | 234 + .../src/joystick/hidapi/SDL_hidapi_gamecube.c | 556 + .../src/joystick/hidapi/SDL_hidapi_luna.c | 449 + .../src/joystick/hidapi/SDL_hidapi_nintendo.h | 49 + .../src/joystick/hidapi/SDL_hidapi_ps3.c | 993 + .../src/joystick/hidapi/SDL_hidapi_ps4.c | 1324 + .../src/joystick/hidapi/SDL_hidapi_ps5.c | 1581 + .../src/joystick/hidapi/SDL_hidapi_rumble.c | 283 + .../src/joystick/hidapi/SDL_hidapi_rumble.h | 42 + .../src/joystick/hidapi/SDL_hidapi_shield.c | 601 + .../src/joystick/hidapi/SDL_hidapi_stadia.c | 334 + .../src/joystick/hidapi/SDL_hidapi_steam.c | 1236 + .../src/joystick/hidapi/SDL_hidapi_switch.c | 2372 + .../src/joystick/hidapi/SDL_hidapi_wii.c | 1677 + .../src/joystick/hidapi/SDL_hidapi_xbox360.c | 386 + .../src/joystick/hidapi/SDL_hidapi_xbox360w.c | 379 + .../src/joystick/hidapi/SDL_hidapi_xboxone.c | 1654 + .../src/joystick/hidapi/SDL_hidapijoystick.c | 1666 + .../joystick/hidapi/SDL_hidapijoystick_c.h | 162 + .../hidapi/steam/controller_constants.h | 499 + .../hidapi/steam/controller_structs.h | 307 + .../src/joystick/linux/SDL_sysjoystick.c | 2588 + .../src/joystick/linux/SDL_sysjoystick_c.h | 111 + .../src/joystick/n3ds/SDL_sysjoystick.c | 281 + .../src/joystick/ps2/SDL_sysjoystick.c | 361 + .../src/joystick/psp/SDL_sysjoystick.c | 273 + .../src/joystick/sort_controllers.py | 152 + .../src/joystick/steam/SDL_steamcontroller.c | 49 + .../src/joystick/steam/SDL_steamcontroller.h | 37 + vendor/sdl-3.0.0/src/joystick/usb_ids.h | 167 + .../joystick/virtual/SDL_virtualjoystick.c | 748 + .../joystick/virtual/SDL_virtualjoystick_c.h | 56 + .../src/joystick/vita/SDL_sysjoystick.c | 402 + .../src/joystick/windows/SDL_dinputjoystick.c | 1202 + .../joystick/windows/SDL_dinputjoystick_c.h | 41 + .../joystick/windows/SDL_rawinputjoystick.c | 2214 + .../joystick/windows/SDL_rawinputjoystick_c.h | 35 + .../windows/SDL_windows_gaming_input.c | 1031 + .../joystick/windows/SDL_windowsjoystick.c | 826 + .../joystick/windows/SDL_windowsjoystick_c.h | 101 + .../src/joystick/windows/SDL_xinputjoystick.c | 609 + .../joystick/windows/SDL_xinputjoystick_c.h | 43 + vendor/sdl-3.0.0/src/libm/e_atan2.c | 135 + vendor/sdl-3.0.0/src/libm/e_exp.c | 201 + vendor/sdl-3.0.0/src/libm/e_fmod.c | 145 + vendor/sdl-3.0.0/src/libm/e_log.c | 153 + vendor/sdl-3.0.0/src/libm/e_log10.c | 107 + vendor/sdl-3.0.0/src/libm/e_pow.c | 348 + vendor/sdl-3.0.0/src/libm/e_rem_pio2.c | 162 + vendor/sdl-3.0.0/src/libm/e_sqrt.c | 458 + vendor/sdl-3.0.0/src/libm/k_cos.c | 83 + vendor/sdl-3.0.0/src/libm/k_rem_pio2.c | 317 + vendor/sdl-3.0.0/src/libm/k_sin.c | 66 + vendor/sdl-3.0.0/src/libm/k_tan.c | 119 + vendor/sdl-3.0.0/src/libm/math_libm.h | 46 + vendor/sdl-3.0.0/src/libm/math_private.h | 228 + vendor/sdl-3.0.0/src/libm/s_atan.c | 119 + vendor/sdl-3.0.0/src/libm/s_copysign.c | 30 + vendor/sdl-3.0.0/src/libm/s_cos.c | 74 + vendor/sdl-3.0.0/src/libm/s_fabs.c | 30 + vendor/sdl-3.0.0/src/libm/s_floor.c | 76 + vendor/sdl-3.0.0/src/libm/s_modf.c | 68 + vendor/sdl-3.0.0/src/libm/s_scalbn.c | 74 + vendor/sdl-3.0.0/src/libm/s_sin.c | 74 + vendor/sdl-3.0.0/src/libm/s_tan.c | 68 + .../src/loadso/dlopen/SDL_sysloadso.c | 82 + .../src/loadso/dummy/SDL_sysloadso.c | 47 + .../src/loadso/windows/SDL_sysloadso.c | 80 + vendor/sdl-3.0.0/src/locale/SDL_locale.c | 100 + vendor/sdl-3.0.0/src/locale/SDL_syslocale.h | 33 + .../src/locale/android/SDL_syslocale.c | 30 + .../src/locale/dummy/SDL_syslocale.c | 29 + .../src/locale/emscripten/SDL_syslocale.c | 71 + .../src/locale/haiku/SDL_syslocale.cc | 72 + .../src/locale/macos/SDL_syslocale.m | 76 + .../sdl-3.0.0/src/locale/n3ds/SDL_syslocale.c | 56 + .../sdl-3.0.0/src/locale/unix/SDL_syslocale.c | 103 + .../sdl-3.0.0/src/locale/vita/SDL_syslocale.c | 69 + .../src/locale/windows/SDL_syslocale.c | 111 + .../src/locale/winrt/SDL_syslocale.c | 54 + .../winrt/SDL3-WinRTResource_BlankCursor.cur | Bin 0 -> 326 bytes .../src/main/winrt/SDL3-WinRTResources.rc | 2 + vendor/sdl-3.0.0/src/misc/SDL_sysurl.h | 31 + vendor/sdl-3.0.0/src/misc/SDL_url.c | 31 + .../sdl-3.0.0/src/misc/android/SDL_sysurl.c | 29 + vendor/sdl-3.0.0/src/misc/dummy/SDL_sysurl.c | 28 + .../src/misc/emscripten/SDL_sysurl.c | 33 + vendor/sdl-3.0.0/src/misc/haiku/SDL_sysurl.cc | 31 + vendor/sdl-3.0.0/src/misc/ios/SDL_sysurl.m | 43 + vendor/sdl-3.0.0/src/misc/macos/SDL_sysurl.m | 39 + vendor/sdl-3.0.0/src/misc/riscos/SDL_sysurl.c | 46 + vendor/sdl-3.0.0/src/misc/unix/SDL_sysurl.c | 85 + vendor/sdl-3.0.0/src/misc/vita/SDL_sysurl.c | 41 + .../sdl-3.0.0/src/misc/windows/SDL_sysurl.c | 59 + .../sdl-3.0.0/src/misc/winrt/SDL_sysurl.cpp | 38 + vendor/sdl-3.0.0/src/power/SDL_power.c | 116 + vendor/sdl-3.0.0/src/power/SDL_syspower.h | 47 + .../src/power/android/SDL_syspower.c | 60 + .../src/power/emscripten/SDL_syspower.c | 58 + .../sdl-3.0.0/src/power/haiku/SDL_syspower.c | 123 + .../sdl-3.0.0/src/power/linux/SDL_syspower.c | 648 + .../sdl-3.0.0/src/power/macos/SDL_syspower.c | 185 + .../sdl-3.0.0/src/power/n3ds/SDL_syspower.c | 102 + vendor/sdl-3.0.0/src/power/psp/SDL_syspower.c | 61 + .../sdl-3.0.0/src/power/uikit/SDL_syspower.h | 28 + .../sdl-3.0.0/src/power/uikit/SDL_syspower.m | 105 + .../sdl-3.0.0/src/power/vita/SDL_syspower.c | 61 + .../src/power/windows/SDL_syspower.c | 70 + .../src/power/winrt/SDL_syspower.cpp | 39 + vendor/sdl-3.0.0/src/render/SDL_d3dmath.c | 132 + vendor/sdl-3.0.0/src/render/SDL_d3dmath.h | 81 + vendor/sdl-3.0.0/src/render/SDL_render.c | 4337 ++ .../src/render/SDL_render_unsupported.c | 49 + vendor/sdl-3.0.0/src/render/SDL_sysrender.h | 323 + vendor/sdl-3.0.0/src/render/SDL_yuv_sw.c | 403 + vendor/sdl-3.0.0/src/render/SDL_yuv_sw_c.h | 67 + .../src/render/direct3d/SDL_render_d3d.c | 1753 + .../src/render/direct3d/SDL_shaders_d3d.c | 268 + .../src/render/direct3d/SDL_shaders_d3d.h | 33 + .../src/render/direct3d11/SDL_render_d3d11.c | 2533 + .../render/direct3d11/SDL_render_winrt.cpp | 114 + .../src/render/direct3d11/SDL_render_winrt.h | 36 + .../src/render/direct3d11/SDL_shaders_d3d11.c | 1950 + .../src/render/direct3d11/SDL_shaders_d3d11.h | 44 + .../src/render/direct3d12/SDL_render_d3d12.c | 3077 + .../direct3d12/SDL_render_d3d12_xbox.cpp | 27 + .../render/direct3d12/SDL_render_d3d12_xbox.h | 22 + .../src/render/direct3d12/SDL_shaders_d3d12.c | 6935 ++ .../src/render/direct3d12/SDL_shaders_d3d12.h | 67 + .../direct3d12/SDL_shaders_d3d12_xboxone.cpp | 27 + .../SDL_shaders_d3d12_xboxseries.cpp | 27 + .../src/render/metal/SDL_render_metal.m | 2000 + .../src/render/metal/SDL_shaders_metal.metal | 120 + .../src/render/metal/SDL_shaders_metal_ios.h | 1821 + .../metal/SDL_shaders_metal_iphonesimulator.h | 2060 + .../render/metal/SDL_shaders_metal_macos.h | 1826 + .../src/render/metal/SDL_shaders_metal_tvos.h | 1821 + .../metal/SDL_shaders_metal_tvsimulator.h | 2062 + .../src/render/metal/build-metal-shaders.sh | 24 + .../sdl-3.0.0/src/render/opengl/SDL_glfuncs.h | 476 + .../src/render/opengl/SDL_render_gl.c | 1980 + .../src/render/opengl/SDL_shaders_gl.c | 578 + .../src/render/opengl/SDL_shaders_gl.h | 58 + .../src/render/opengles2/SDL_gles2funcs.h | 76 + .../src/render/opengles2/SDL_render_gles2.c | 2275 + .../src/render/opengles2/SDL_shaders_gles2.c | 444 + .../src/render/opengles2/SDL_shaders_gles2.h | 71 + .../sdl-3.0.0/src/render/ps2/SDL_render_ps2.c | 679 + .../sdl-3.0.0/src/render/psp/SDL_render_psp.c | 1423 + .../src/render/software/SDL_blendfillrect.c | 346 + .../src/render/software/SDL_blendfillrect.h | 30 + .../src/render/software/SDL_blendline.c | 862 + .../src/render/software/SDL_blendline.h | 30 + .../src/render/software/SDL_blendpoint.c | 351 + .../src/render/software/SDL_blendpoint.h | 30 + .../sdl-3.0.0/src/render/software/SDL_draw.h | 659 + .../src/render/software/SDL_drawline.c | 200 + .../src/render/software/SDL_drawline.h | 30 + .../src/render/software/SDL_drawpoint.c | 109 + .../src/render/software/SDL_drawpoint.h | 30 + .../src/render/software/SDL_render_sw.c | 1190 + .../src/render/software/SDL_render_sw_c.h | 27 + .../src/render/software/SDL_rotate.c | 616 + .../src/render/software/SDL_rotate.h | 30 + .../src/render/software/SDL_triangle.c | 892 + .../src/render/software/SDL_triangle.h | 40 + .../src/render/vitagxm/SDL_render_vita_gxm.c | 1225 + .../vitagxm/SDL_render_vita_gxm_memory.c | 177 + .../vitagxm/SDL_render_vita_gxm_memory.h | 42 + .../vitagxm/SDL_render_vita_gxm_shaders.h | 282 + .../vitagxm/SDL_render_vita_gxm_tools.c | 1213 + .../vitagxm/SDL_render_vita_gxm_tools.h | 63 + .../vitagxm/SDL_render_vita_gxm_types.h | 211 + .../src/render/vitagxm/shader_src/clear_f.cg | 4 + .../src/render/vitagxm/shader_src/clear_v.cg | 4 + .../src/render/vitagxm/shader_src/color_f.cg | 4 + .../src/render/vitagxm/shader_src/color_v.cg | 13 + .../render/vitagxm/shader_src/texture_f.cg | 4 + .../render/vitagxm/shader_src/texture_v.cg | 14 + vendor/sdl-3.0.0/src/sensor/SDL_sensor.c | 637 + vendor/sdl-3.0.0/src/sensor/SDL_sensor_c.h | 59 + vendor/sdl-3.0.0/src/sensor/SDL_syssensor.h | 112 + .../src/sensor/android/SDL_androidsensor.c | 288 + .../src/sensor/android/SDL_androidsensor.h | 21 + .../sensor/coremotion/SDL_coremotionsensor.h | 27 + .../sensor/coremotion/SDL_coremotionsensor.m | 214 + .../src/sensor/dummy/SDL_dummysensor.c | 93 + .../src/sensor/dummy/SDL_dummysensor.h | 21 + .../src/sensor/n3ds/SDL_n3dssensor.c | 203 + .../src/sensor/vita/SDL_vitasensor.c | 204 + .../src/sensor/vita/SDL_vitasensor.h | 29 + .../src/sensor/windows/SDL_windowssensor.c | 485 + .../src/sensor/windows/SDL_windowssensor.h | 21 + vendor/sdl-3.0.0/src/stdlib/SDL_crc16.c | 52 + vendor/sdl-3.0.0/src/stdlib/SDL_crc32.c | 50 + vendor/sdl-3.0.0/src/stdlib/SDL_getenv.c | 227 + vendor/sdl-3.0.0/src/stdlib/SDL_iconv.c | 849 + vendor/sdl-3.0.0/src/stdlib/SDL_malloc.c | 5333 ++ vendor/sdl-3.0.0/src/stdlib/SDL_mslibc.c | 788 + .../sdl-3.0.0/src/stdlib/SDL_mslibc_x64.asm | 29 + vendor/sdl-3.0.0/src/stdlib/SDL_qsort.c | 560 + vendor/sdl-3.0.0/src/stdlib/SDL_stdlib.c | 701 + vendor/sdl-3.0.0/src/stdlib/SDL_string.c | 2224 + vendor/sdl-3.0.0/src/stdlib/SDL_strtokr.c | 95 + vendor/sdl-3.0.0/src/stdlib/SDL_vacopy.h | 34 + vendor/sdl-3.0.0/src/test/SDL_test_assert.c | 157 + vendor/sdl-3.0.0/src/test/SDL_test_common.c | 2649 + vendor/sdl-3.0.0/src/test/SDL_test_compare.c | 158 + vendor/sdl-3.0.0/src/test/SDL_test_crc32.c | 160 + vendor/sdl-3.0.0/src/test/SDL_test_font.c | 3493 + vendor/sdl-3.0.0/src/test/SDL_test_fuzzer.c | 488 + vendor/sdl-3.0.0/src/test/SDL_test_harness.c | 698 + vendor/sdl-3.0.0/src/test/SDL_test_log.c | 111 + vendor/sdl-3.0.0/src/test/SDL_test_md5.c | 342 + vendor/sdl-3.0.0/src/test/SDL_test_memory.c | 391 + vendor/sdl-3.0.0/src/test/SDL_test_random.c | 98 + vendor/sdl-3.0.0/src/thread/SDL_systhread.h | 77 + vendor/sdl-3.0.0/src/thread/SDL_thread.c | 510 + vendor/sdl-3.0.0/src/thread/SDL_thread_c.h | 104 + .../src/thread/generic/SDL_syscond.c | 218 + .../src/thread/generic/SDL_syscond_c.h | 36 + .../src/thread/generic/SDL_sysmutex.c | 134 + .../src/thread/generic/SDL_sysmutex_c.h | 21 + .../src/thread/generic/SDL_sysrwlock.c | 185 + .../src/thread/generic/SDL_sysrwlock_c.h | 38 + .../sdl-3.0.0/src/thread/generic/SDL_syssem.c | 173 + .../src/thread/generic/SDL_systhread.c | 61 + .../src/thread/generic/SDL_systhread_c.h | 24 + .../sdl-3.0.0/src/thread/generic/SDL_systls.c | 33 + .../sdl-3.0.0/src/thread/n3ds/SDL_syscond.c | 118 + .../sdl-3.0.0/src/thread/n3ds/SDL_sysmutex.c | 66 + .../src/thread/n3ds/SDL_sysmutex_c.h | 33 + vendor/sdl-3.0.0/src/thread/n3ds/SDL_syssem.c | 118 + .../sdl-3.0.0/src/thread/n3ds/SDL_systhread.c | 137 + .../src/thread/n3ds/SDL_systhread_c.h | 30 + .../src/thread/ngage/SDL_sysmutex.cpp | 102 + .../sdl-3.0.0/src/thread/ngage/SDL_syssem.cpp | 160 + .../src/thread/ngage/SDL_systhread.cpp | 110 + .../src/thread/ngage/SDL_systhread_c.h | 23 + vendor/sdl-3.0.0/src/thread/ps2/SDL_syssem.c | 145 + .../sdl-3.0.0/src/thread/ps2/SDL_systhread.c | 135 + .../src/thread/ps2/SDL_systhread_c.h | 24 + vendor/sdl-3.0.0/src/thread/psp/SDL_syscond.c | 204 + .../sdl-3.0.0/src/thread/psp/SDL_sysmutex.c | 108 + .../sdl-3.0.0/src/thread/psp/SDL_sysmutex_c.h | 21 + vendor/sdl-3.0.0/src/thread/psp/SDL_syssem.c | 145 + .../sdl-3.0.0/src/thread/psp/SDL_systhread.c | 107 + .../src/thread/psp/SDL_systhread_c.h | 24 + .../src/thread/pthread/SDL_syscond.c | 143 + .../src/thread/pthread/SDL_sysmutex.c | 155 + .../src/thread/pthread/SDL_sysmutex_c.h | 40 + .../src/thread/pthread/SDL_sysrwlock.c | 115 + .../sdl-3.0.0/src/thread/pthread/SDL_syssem.c | 182 + .../src/thread/pthread/SDL_systhread.c | 283 + .../src/thread/pthread/SDL_systhread_c.h | 25 + .../sdl-3.0.0/src/thread/pthread/SDL_systls.c | 64 + .../src/thread/stdcpp/SDL_syscond.cpp | 141 + .../src/thread/stdcpp/SDL_sysmutex.cpp | 77 + .../src/thread/stdcpp/SDL_sysmutex_c.h | 29 + .../src/thread/stdcpp/SDL_sysrwlock.cpp | 114 + .../src/thread/stdcpp/SDL_systhread.cpp | 161 + .../src/thread/stdcpp/SDL_systhread_c.h | 24 + .../sdl-3.0.0/src/thread/vita/SDL_syscond.c | 204 + .../sdl-3.0.0/src/thread/vita/SDL_sysmutex.c | 108 + .../src/thread/vita/SDL_sysmutex_c.h | 21 + vendor/sdl-3.0.0/src/thread/vita/SDL_syssem.c | 147 + .../sdl-3.0.0/src/thread/vita/SDL_systhread.c | 133 + .../src/thread/vita/SDL_systhread_c.h | 24 + .../src/thread/windows/SDL_syscond_cv.c | 269 + .../src/thread/windows/SDL_sysmutex.c | 259 + .../src/thread/windows/SDL_sysmutex_c.h | 73 + .../src/thread/windows/SDL_sysrwlock_srw.c | 256 + .../sdl-3.0.0/src/thread/windows/SDL_syssem.c | 389 + .../src/thread/windows/SDL_systhread.c | 200 + .../src/thread/windows/SDL_systhread_c.h | 30 + .../sdl-3.0.0/src/thread/windows/SDL_systls.c | 79 + vendor/sdl-3.0.0/src/timer/SDL_timer.c | 601 + vendor/sdl-3.0.0/src/timer/SDL_timer_c.h | 37 + .../sdl-3.0.0/src/timer/dummy/SDL_systimer.c | 41 + .../sdl-3.0.0/src/timer/haiku/SDL_systimer.c | 43 + .../sdl-3.0.0/src/timer/n3ds/SDL_systimer.c | 43 + .../src/timer/ngage/SDL_systimer.cpp | 59 + vendor/sdl-3.0.0/src/timer/ps2/SDL_systimer.c | 50 + vendor/sdl-3.0.0/src/timer/psp/SDL_systimer.c | 58 + .../sdl-3.0.0/src/timer/unix/SDL_systimer.c | 188 + .../sdl-3.0.0/src/timer/vita/SDL_systimer.c | 51 + .../src/timer/windows/SDL_systimer.c | 115 + vendor/sdl-3.0.0/src/video/SDL_RLEaccel.c | 1602 + vendor/sdl-3.0.0/src/video/SDL_RLEaccel_c.h | 32 + vendor/sdl-3.0.0/src/video/SDL_blit.c | 283 + vendor/sdl-3.0.0/src/video/SDL_blit.h | 581 + vendor/sdl-3.0.0/src/video/SDL_blit_0.c | 793 + vendor/sdl-3.0.0/src/video/SDL_blit_1.c | 548 + vendor/sdl-3.0.0/src/video/SDL_blit_A.c | 1471 + vendor/sdl-3.0.0/src/video/SDL_blit_N.c | 3448 + vendor/sdl-3.0.0/src/video/SDL_blit_auto.c | 6995 ++ vendor/sdl-3.0.0/src/video/SDL_blit_auto.h | 33 + vendor/sdl-3.0.0/src/video/SDL_blit_copy.c | 164 + vendor/sdl-3.0.0/src/video/SDL_blit_copy.h | 27 + vendor/sdl-3.0.0/src/video/SDL_blit_slow.c | 203 + vendor/sdl-3.0.0/src/video/SDL_blit_slow.h | 29 + vendor/sdl-3.0.0/src/video/SDL_bmp.c | 922 + vendor/sdl-3.0.0/src/video/SDL_clipboard.c | 400 + vendor/sdl-3.0.0/src/video/SDL_clipboard_c.h | 42 + vendor/sdl-3.0.0/src/video/SDL_egl.c | 1343 + vendor/sdl-3.0.0/src/video/SDL_egl_c.h | 170 + vendor/sdl-3.0.0/src/video/SDL_fillrect.c | 442 + vendor/sdl-3.0.0/src/video/SDL_pixels.c | 1140 + vendor/sdl-3.0.0/src/video/SDL_pixels_c.h | 48 + vendor/sdl-3.0.0/src/video/SDL_rect.c | 110 + vendor/sdl-3.0.0/src/video/SDL_rect_c.h | 29 + vendor/sdl-3.0.0/src/video/SDL_rect_impl.h | 436 + vendor/sdl-3.0.0/src/video/SDL_shape.c | 274 + .../sdl-3.0.0/src/video/SDL_shape_internals.h | 59 + vendor/sdl-3.0.0/src/video/SDL_stretch.c | 945 + vendor/sdl-3.0.0/src/video/SDL_surface.c | 1598 + .../src/video/SDL_surface_pixel_impl.h | 80 + vendor/sdl-3.0.0/src/video/SDL_sysvideo.h | 545 + vendor/sdl-3.0.0/src/video/SDL_video.c | 5217 ++ vendor/sdl-3.0.0/src/video/SDL_video_c.h | 62 + .../src/video/SDL_video_unsupported.c | 83 + .../sdl-3.0.0/src/video/SDL_vulkan_internal.h | 90 + vendor/sdl-3.0.0/src/video/SDL_vulkan_utils.c | 496 + vendor/sdl-3.0.0/src/video/SDL_yuv.c | 2375 + vendor/sdl-3.0.0/src/video/SDL_yuv_c.h | 36 + .../src/video/android/SDL_androidclipboard.c | 44 + .../src/video/android/SDL_androidclipboard.h | 30 + .../src/video/android/SDL_androidevents.c | 246 + .../src/video/android/SDL_androidevents.h | 26 + .../src/video/android/SDL_androidgl.c | 85 + .../src/video/android/SDL_androidgl.h | 31 + .../src/video/android/SDL_androidkeyboard.c | 367 + .../src/video/android/SDL_androidkeyboard.h | 33 + .../src/video/android/SDL_androidmessagebox.c | 33 + .../src/video/android/SDL_androidmessagebox.h | 27 + .../src/video/android/SDL_androidmouse.c | 253 + .../src/video/android/SDL_androidmouse.h | 31 + .../src/video/android/SDL_androidtouch.c | 85 + .../src/video/android/SDL_androidtouch.h | 27 + .../src/video/android/SDL_androidvideo.c | 302 + .../src/video/android/SDL_androidvideo.h | 50 + .../src/video/android/SDL_androidvulkan.c | 170 + .../src/video/android/SDL_androidvulkan.h | 49 + .../src/video/android/SDL_androidwindow.c | 211 + .../src/video/android/SDL_androidwindow.h | 52 + .../sdl-3.0.0/src/video/arm/pixman-arm-asm.h | 36 + .../src/video/arm/pixman-arm-neon-asm.S | 375 + .../src/video/arm/pixman-arm-neon-asm.h | 1184 + .../src/video/arm/pixman-arm-simd-asm.S | 532 + .../src/video/arm/pixman-arm-simd-asm.h | 1034 + .../src/video/cocoa/SDL_cocoaclipboard.h | 37 + .../src/video/cocoa/SDL_cocoaclipboard.m | 178 + .../src/video/cocoa/SDL_cocoaevents.h | 33 + .../src/video/cocoa/SDL_cocoaevents.m | 616 + .../src/video/cocoa/SDL_cocoakeyboard.h | 36 + .../src/video/cocoa/SDL_cocoakeyboard.m | 467 + .../src/video/cocoa/SDL_cocoamessagebox.h | 27 + .../src/video/cocoa/SDL_cocoamessagebox.m | 145 + .../src/video/cocoa/SDL_cocoametalview.h | 66 + .../src/video/cocoa/SDL_cocoametalview.m | 182 + .../src/video/cocoa/SDL_cocoamodes.h | 43 + .../src/video/cocoa/SDL_cocoamodes.m | 540 + .../src/video/cocoa/SDL_cocoamouse.h | 50 + .../src/video/cocoa/SDL_cocoamouse.m | 567 + .../src/video/cocoa/SDL_cocoaopengl.h | 89 + .../src/video/cocoa/SDL_cocoaopengl.m | 541 + .../src/video/cocoa/SDL_cocoaopengles.h | 48 + .../src/video/cocoa/SDL_cocoaopengles.m | 156 + .../src/video/cocoa/SDL_cocoashape.h | 38 + .../src/video/cocoa/SDL_cocoashape.m | 115 + .../src/video/cocoa/SDL_cocoavideo.h | 119 + .../src/video/cocoa/SDL_cocoavideo.m | 315 + .../src/video/cocoa/SDL_cocoavulkan.h | 49 + .../src/video/cocoa/SDL_cocoavulkan.m | 304 + .../src/video/cocoa/SDL_cocoawindow.h | 174 + .../src/video/cocoa/SDL_cocoawindow.m | 2711 + .../src/video/dummy/SDL_nullevents.c | 38 + .../src/video/dummy/SDL_nullevents_c.h | 31 + .../src/video/dummy/SDL_nullframebuffer.c | 83 + .../src/video/dummy/SDL_nullframebuffer_c.h | 31 + .../sdl-3.0.0/src/video/dummy/SDL_nullvideo.c | 166 + .../sdl-3.0.0/src/video/dummy/SDL_nullvideo.h | 28 + .../video/emscripten/SDL_emscriptenevents.c | 1019 + .../video/emscripten/SDL_emscriptenevents.h | 31 + .../emscripten/SDL_emscriptenframebuffer.c | 161 + .../emscripten/SDL_emscriptenframebuffer.h | 30 + .../video/emscripten/SDL_emscriptenmouse.c | 260 + .../video/emscripten/SDL_emscriptenmouse.h | 37 + .../video/emscripten/SDL_emscriptenopengles.c | 158 + .../video/emscripten/SDL_emscriptenopengles.h | 43 + .../video/emscripten/SDL_emscriptenvideo.c | 332 + .../video/emscripten/SDL_emscriptenvideo.h | 50 + .../src/video/gdk/SDL_gdktextinput.cpp | 304 + .../src/video/gdk/SDL_gdktextinput.h | 51 + vendor/sdl-3.0.0/src/video/haiku/SDL_BApp.h | 425 + vendor/sdl-3.0.0/src/video/haiku/SDL_BWin.h | 757 + .../src/video/haiku/SDL_bclipboard.cc | 92 + .../src/video/haiku/SDL_bclipboard.h | 31 + .../sdl-3.0.0/src/video/haiku/SDL_bevents.cc | 39 + .../sdl-3.0.0/src/video/haiku/SDL_bevents.h | 37 + .../src/video/haiku/SDL_bframebuffer.cc | 127 + .../src/video/haiku/SDL_bframebuffer.h | 45 + .../src/video/haiku/SDL_bkeyboard.cc | 186 + .../sdl-3.0.0/src/video/haiku/SDL_bkeyboard.h | 40 + .../src/video/haiku/SDL_bmessagebox.cc | 394 + .../src/video/haiku/SDL_bmessagebox.h | 43 + .../sdl-3.0.0/src/video/haiku/SDL_bmodes.cc | 298 + vendor/sdl-3.0.0/src/video/haiku/SDL_bmodes.h | 45 + .../sdl-3.0.0/src/video/haiku/SDL_bopengl.cc | 195 + .../sdl-3.0.0/src/video/haiku/SDL_bopengl.h | 52 + .../sdl-3.0.0/src/video/haiku/SDL_bvideo.cc | 307 + vendor/sdl-3.0.0/src/video/haiku/SDL_bvideo.h | 40 + .../sdl-3.0.0/src/video/haiku/SDL_bwindow.cc | 225 + .../sdl-3.0.0/src/video/haiku/SDL_bwindow.h | 46 + vendor/sdl-3.0.0/src/video/khronos/EGL/egl.h | 342 + .../sdl-3.0.0/src/video/khronos/EGL/eglext.h | 1483 + .../src/video/khronos/EGL/eglplatform.h | 169 + .../sdl-3.0.0/src/video/khronos/GLES2/gl2.h | 656 + .../src/video/khronos/GLES2/gl2ext.h | 4033 ++ .../src/video/khronos/GLES2/gl2platform.h | 27 + .../src/video/khronos/KHR/khrplatform.h | 311 + .../src/video/khronos/vulkan/vk_icd.h | 245 + .../src/video/khronos/vulkan/vk_layer.h | 210 + .../src/video/khronos/vulkan/vk_platform.h | 84 + .../video/khronos/vulkan/vk_sdk_platform.h | 69 + .../src/video/khronos/vulkan/vulkan.h | 92 + .../src/video/khronos/vulkan/vulkan_android.h | 125 + .../src/video/khronos/vulkan/vulkan_beta.h | 1020 + .../src/video/khronos/vulkan/vulkan_core.h | 15119 ++++ .../video/khronos/vulkan/vulkan_directfb.h | 54 + .../src/video/khronos/vulkan/vulkan_fuchsia.h | 258 + .../src/video/khronos/vulkan/vulkan_ggp.h | 58 + .../src/video/khronos/vulkan/vulkan_ios.h | 47 + .../src/video/khronos/vulkan/vulkan_macos.h | 47 + .../src/video/khronos/vulkan/vulkan_metal.h | 201 + .../src/video/khronos/vulkan/vulkan_screen.h | 54 + .../src/video/khronos/vulkan/vulkan_vi.h | 47 + .../src/video/khronos/vulkan/vulkan_wayland.h | 54 + .../src/video/khronos/vulkan/vulkan_win32.h | 315 + .../src/video/khronos/vulkan/vulkan_xcb.h | 55 + .../src/video/khronos/vulkan/vulkan_xlib.h | 55 + .../video/khronos/vulkan/vulkan_xlib_xrandr.h | 45 + .../src/video/kmsdrm/SDL_kmsdrmdyn.c | 157 + .../src/video/kmsdrm/SDL_kmsdrmdyn.h | 51 + .../src/video/kmsdrm/SDL_kmsdrmevents.c | 44 + .../src/video/kmsdrm/SDL_kmsdrmevents.h | 31 + .../src/video/kmsdrm/SDL_kmsdrmmouse.c | 437 + .../src/video/kmsdrm/SDL_kmsdrmmouse.h | 53 + .../src/video/kmsdrm/SDL_kmsdrmopengles.c | 203 + .../src/video/kmsdrm/SDL_kmsdrmopengles.h | 46 + .../src/video/kmsdrm/SDL_kmsdrmsym.h | 127 + .../src/video/kmsdrm/SDL_kmsdrmvideo.c | 1613 + .../src/video/kmsdrm/SDL_kmsdrmvideo.h | 152 + .../src/video/kmsdrm/SDL_kmsdrmvulkan.c | 515 + .../src/video/kmsdrm/SDL_kmsdrmvulkan.h | 49 + .../sdl-3.0.0/src/video/n3ds/SDL_n3dsevents.c | 45 + .../src/video/n3ds/SDL_n3dsevents_c.h | 29 + .../src/video/n3ds/SDL_n3dsframebuffer.c | 126 + .../src/video/n3ds/SDL_n3dsframebuffer_c.h | 31 + .../sdl-3.0.0/src/video/n3ds/SDL_n3dsswkb.c | 68 + .../sdl-3.0.0/src/video/n3ds/SDL_n3dsswkb.h | 36 + .../sdl-3.0.0/src/video/n3ds/SDL_n3dstouch.c | 79 + .../sdl-3.0.0/src/video/n3ds/SDL_n3dstouch.h | 29 + .../sdl-3.0.0/src/video/n3ds/SDL_n3dsvideo.c | 175 + .../sdl-3.0.0/src/video/n3ds/SDL_n3dsvideo.h | 37 + .../src/video/ngage/SDL_ngageevents.cpp | 194 + .../src/video/ngage/SDL_ngageevents_c.h | 26 + .../src/video/ngage/SDL_ngageframebuffer.cpp | 397 + .../src/video/ngage/SDL_ngageframebuffer_c.h | 36 + .../src/video/ngage/SDL_ngagevideo.cpp | 165 + .../src/video/ngage/SDL_ngagevideo.h | 66 + .../src/video/ngage/SDL_ngagewindow.cpp | 125 + .../src/video/ngage/SDL_ngagewindow.h | 43 + .../src/video/offscreen/SDL_offscreenevents.c | 38 + .../video/offscreen/SDL_offscreenevents_c.h | 23 + .../offscreen/SDL_offscreenframebuffer.c | 84 + .../offscreen/SDL_offscreenframebuffer_c.h | 25 + .../video/offscreen/SDL_offscreenopengles.c | 84 + .../video/offscreen/SDL_offscreenopengles.h | 44 + .../src/video/offscreen/SDL_offscreenvideo.c | 125 + .../src/video/offscreen/SDL_offscreenvideo.h | 28 + .../src/video/offscreen/SDL_offscreenwindow.c | 85 + .../src/video/offscreen/SDL_offscreenwindow.h | 39 + vendor/sdl-3.0.0/src/video/ps2/SDL_ps2video.c | 120 + vendor/sdl-3.0.0/src/video/ps2/SDL_ps2video.h | 40 + .../sdl-3.0.0/src/video/psp/SDL_pspevents.c | 276 + .../sdl-3.0.0/src/video/psp/SDL_pspevents_c.h | 27 + vendor/sdl-3.0.0/src/video/psp/SDL_pspgl.c | 190 + vendor/sdl-3.0.0/src/video/psp/SDL_pspgl_c.h | 50 + vendor/sdl-3.0.0/src/video/psp/SDL_pspmouse.c | 37 + .../sdl-3.0.0/src/video/psp/SDL_pspmouse_c.h | 24 + vendor/sdl-3.0.0/src/video/psp/SDL_pspvideo.c | 263 + vendor/sdl-3.0.0/src/video/psp/SDL_pspvideo.h | 82 + vendor/sdl-3.0.0/src/video/qnx/SDL_qnx.h | 48 + vendor/sdl-3.0.0/src/video/qnx/SDL_qnxgl.c | 276 + .../sdl-3.0.0/src/video/qnx/SDL_qnxkeyboard.c | 132 + vendor/sdl-3.0.0/src/video/qnx/SDL_qnxvideo.c | 345 + .../src/video/raspberry/SDL_rpievents.c | 43 + .../src/video/raspberry/SDL_rpievents_c.h | 31 + .../src/video/raspberry/SDL_rpimouse.c | 321 + .../src/video/raspberry/SDL_rpimouse.h | 41 + .../src/video/raspberry/SDL_rpiopengles.c | 65 + .../src/video/raspberry/SDL_rpiopengles.h | 47 + .../src/video/raspberry/SDL_rpivideo.c | 378 + .../src/video/raspberry/SDL_rpivideo.h | 90 + .../src/video/riscos/SDL_riscosdefs.h | 51 + .../src/video/riscos/SDL_riscosevents.c | 176 + .../src/video/riscos/SDL_riscosevents_c.h | 33 + .../src/video/riscos/SDL_riscosframebuffer.c | 127 + .../video/riscos/SDL_riscosframebuffer_c.h | 31 + .../src/video/riscos/SDL_riscosmessagebox.c | 67 + .../src/video/riscos/SDL_riscosmessagebox.h | 27 + .../src/video/riscos/SDL_riscosmodes.c | 310 + .../src/video/riscos/SDL_riscosmodes.h | 31 + .../src/video/riscos/SDL_riscosmouse.c | 83 + .../src/video/riscos/SDL_riscosmouse.h | 28 + .../src/video/riscos/SDL_riscosvideo.c | 121 + .../src/video/riscos/SDL_riscosvideo.h | 36 + .../src/video/riscos/SDL_riscoswindow.c | 70 + .../src/video/riscos/SDL_riscoswindow.h | 39 + .../src/video/riscos/scancodes_riscos.h | 157 + vendor/sdl-3.0.0/src/video/sdlgenblit.pl | 683 + .../src/video/uikit/SDL_uikitappdelegate.h | 45 + .../src/video/uikit/SDL_uikitappdelegate.m | 540 + .../src/video/uikit/SDL_uikitclipboard.h | 33 + .../src/video/uikit/SDL_uikitclipboard.m | 104 + .../src/video/uikit/SDL_uikitevents.h | 40 + .../src/video/uikit/SDL_uikitevents.m | 454 + .../src/video/uikit/SDL_uikitmessagebox.h | 29 + .../src/video/uikit/SDL_uikitmessagebox.m | 154 + .../src/video/uikit/SDL_uikitmetalview.h | 54 + .../src/video/uikit/SDL_uikitmetalview.m | 127 + .../src/video/uikit/SDL_uikitmodes.h | 65 + .../src/video/uikit/SDL_uikitmodes.m | 528 + .../src/video/uikit/SDL_uikitopengles.h | 40 + .../src/video/uikit/SDL_uikitopengles.m | 216 + .../src/video/uikit/SDL_uikitopenglview.h | 62 + .../src/video/uikit/SDL_uikitopenglview.m | 377 + .../src/video/uikit/SDL_uikitvideo.h | 52 + .../src/video/uikit/SDL_uikitvideo.m | 305 + .../sdl-3.0.0/src/video/uikit/SDL_uikitview.h | 46 + .../sdl-3.0.0/src/video/uikit/SDL_uikitview.m | 492 + .../src/video/uikit/SDL_uikitviewcontroller.h | 95 + .../src/video/uikit/SDL_uikitviewcontroller.m | 641 + .../src/video/uikit/SDL_uikitvulkan.h | 49 + .../src/video/uikit/SDL_uikitvulkan.m | 263 + .../src/video/uikit/SDL_uikitwindow.h | 56 + .../src/video/uikit/SDL_uikitwindow.m | 492 + .../src/video/vita/SDL_vitaframebuffer.c | 116 + .../src/video/vita/SDL_vitaframebuffer.h | 25 + .../sdl-3.0.0/src/video/vita/SDL_vitagl_pvr.c | 122 + .../src/video/vita/SDL_vitagl_pvr_c.h | 31 + .../sdl-3.0.0/src/video/vita/SDL_vitagles.c | 217 + .../sdl-3.0.0/src/video/vita/SDL_vitagles_c.h | 53 + .../src/video/vita/SDL_vitagles_pvr.c | 93 + .../src/video/vita/SDL_vitagles_pvr_c.h | 32 + .../src/video/vita/SDL_vitakeyboard.c | 185 + .../src/video/vita/SDL_vitakeyboard.h | 31 + .../src/video/vita/SDL_vitamessagebox.c | 125 + .../src/video/vita/SDL_vitamessagebox.h | 31 + .../sdl-3.0.0/src/video/vita/SDL_vitamouse.c | 84 + .../src/video/vita/SDL_vitamouse_c.h | 31 + .../sdl-3.0.0/src/video/vita/SDL_vitatouch.c | 189 + .../sdl-3.0.0/src/video/vita/SDL_vitatouch.h | 33 + .../sdl-3.0.0/src/video/vita/SDL_vitavideo.c | 561 + .../sdl-3.0.0/src/video/vita/SDL_vitavideo.h | 107 + .../src/video/vivante/SDL_vivanteopengles.c | 41 + .../src/video/vivante/SDL_vivanteopengles.h | 46 + .../src/video/vivante/SDL_vivanteplatform.c | 49 + .../src/video/vivante/SDL_vivanteplatform.h | 45 + .../src/video/vivante/SDL_vivantevideo.c | 374 + .../src/video/vivante/SDL_vivantevideo.h | 89 + .../src/video/vivante/SDL_vivantevulkan.c | 149 + .../src/video/vivante/SDL_vivantevulkan.h | 48 + .../src/video/wayland/SDL_waylandclipboard.c | 173 + .../src/video/wayland/SDL_waylandclipboard.h | 34 + .../video/wayland/SDL_waylanddatamanager.c | 627 + .../video/wayland/SDL_waylanddatamanager.h | 161 + .../src/video/wayland/SDL_waylanddyn.c | 176 + .../src/video/wayland/SDL_waylanddyn.h | 188 + .../src/video/wayland/SDL_waylandevents.c | 3135 + .../src/video/wayland/SDL_waylandevents_c.h | 208 + .../src/video/wayland/SDL_waylandkeyboard.c | 153 + .../src/video/wayland/SDL_waylandkeyboard.h | 41 + .../src/video/wayland/SDL_waylandmessagebox.c | 269 + .../src/video/wayland/SDL_waylandmessagebox.h | 31 + .../src/video/wayland/SDL_waylandmouse.c | 797 + .../src/video/wayland/SDL_waylandmouse.h | 33 + .../src/video/wayland/SDL_waylandopengles.c | 205 + .../src/video/wayland/SDL_waylandopengles.h | 48 + .../src/video/wayland/SDL_waylandsym.h | 239 + .../src/video/wayland/SDL_waylandtouch.c | 283 + .../src/video/wayland/SDL_waylandtouch.h | 334 + .../src/video/wayland/SDL_waylandvideo.c | 1129 + .../src/video/wayland/SDL_waylandvideo.h | 126 + .../src/video/wayland/SDL_waylandvulkan.c | 178 + .../src/video/wayland/SDL_waylandvulkan.h | 49 + .../src/video/wayland/SDL_waylandwindow.c | 2452 + .../src/video/wayland/SDL_waylandwindow.h | 162 + .../sdl-3.0.0/src/video/windows/SDL_msctf.h | 246 + .../sdl-3.0.0/src/video/windows/SDL_vkeys.h | 74 + .../src/video/windows/SDL_windowsclipboard.c | 346 + .../src/video/windows/SDL_windowsclipboard.h | 34 + .../src/video/windows/SDL_windowsevents.c | 2021 + .../src/video/windows/SDL_windowsevents.h | 37 + .../video/windows/SDL_windowsframebuffer.c | 132 + .../video/windows/SDL_windowsframebuffer.h | 25 + .../src/video/windows/SDL_windowskeyboard.c | 1734 + .../src/video/windows/SDL_windowskeyboard.h | 40 + .../src/video/windows/SDL_windowsmessagebox.c | 1043 + .../src/video/windows/SDL_windowsmessagebox.h | 27 + .../src/video/windows/SDL_windowsmodes.c | 690 + .../src/video/windows/SDL_windowsmodes.h | 55 + .../src/video/windows/SDL_windowsmouse.c | 488 + .../src/video/windows/SDL_windowsmouse.h | 34 + .../src/video/windows/SDL_windowsopengl.c | 916 + .../src/video/windows/SDL_windowsopengl.h | 179 + .../src/video/windows/SDL_windowsopengles.c | 144 + .../src/video/windows/SDL_windowsopengles.h | 48 + .../src/video/windows/SDL_windowsshape.c | 90 + .../src/video/windows/SDL_windowsshape.h | 38 + .../src/video/windows/SDL_windowsvideo.c | 727 + .../src/video/windows/SDL_windowsvideo.h | 471 + .../src/video/windows/SDL_windowsvulkan.c | 171 + .../src/video/windows/SDL_windowsvulkan.h | 49 + .../src/video/windows/SDL_windowswindow.c | 1570 + .../src/video/windows/SDL_windowswindow.h | 119 + vendor/sdl-3.0.0/src/video/windows/wmmsg.h | 1050 + .../src/video/winrt/SDL_winrtevents.cpp | 143 + .../src/video/winrt/SDL_winrtevents_c.h | 81 + .../src/video/winrt/SDL_winrtgamebar.cpp | 185 + .../src/video/winrt/SDL_winrtgamebar_cpp.h | 33 + .../src/video/winrt/SDL_winrtkeyboard.cpp | 478 + .../src/video/winrt/SDL_winrtmessagebox.cpp | 111 + .../src/video/winrt/SDL_winrtmessagebox.h | 27 + .../src/video/winrt/SDL_winrtmouse.cpp | 233 + .../src/video/winrt/SDL_winrtmouse_c.h | 38 + .../src/video/winrt/SDL_winrtopengles.cpp | 207 + .../src/video/winrt/SDL_winrtopengles.h | 67 + .../src/video/winrt/SDL_winrtpointerinput.cpp | 394 + .../src/video/winrt/SDL_winrtvideo.cpp | 849 + .../src/video/winrt/SDL_winrtvideo_cpp.h | 105 + .../src/video/x11/SDL_x11clipboard.c | 276 + .../src/video/x11/SDL_x11clipboard.h | 45 + vendor/sdl-3.0.0/src/video/x11/SDL_x11dyn.c | 201 + vendor/sdl-3.0.0/src/video/x11/SDL_x11dyn.h | 106 + .../sdl-3.0.0/src/video/x11/SDL_x11events.c | 1871 + .../sdl-3.0.0/src/video/x11/SDL_x11events.h | 33 + .../src/video/x11/SDL_x11framebuffer.c | 256 + .../src/video/x11/SDL_x11framebuffer.h | 34 + .../sdl-3.0.0/src/video/x11/SDL_x11keyboard.c | 498 + .../sdl-3.0.0/src/video/x11/SDL_x11keyboard.h | 38 + .../src/video/x11/SDL_x11messagebox.c | 855 + .../src/video/x11/SDL_x11messagebox.h | 31 + vendor/sdl-3.0.0/src/video/x11/SDL_x11modes.c | 1040 + vendor/sdl-3.0.0/src/video/x11/SDL_x11modes.h | 68 + vendor/sdl-3.0.0/src/video/x11/SDL_x11mouse.c | 493 + vendor/sdl-3.0.0/src/video/x11/SDL_x11mouse.h | 39 + .../sdl-3.0.0/src/video/x11/SDL_x11opengl.c | 990 + .../sdl-3.0.0/src/video/x11/SDL_x11opengl.h | 86 + .../sdl-3.0.0/src/video/x11/SDL_x11opengles.c | 129 + .../sdl-3.0.0/src/video/x11/SDL_x11opengles.h | 55 + vendor/sdl-3.0.0/src/video/x11/SDL_x11shape.c | 98 + vendor/sdl-3.0.0/src/video/x11/SDL_x11shape.h | 37 + vendor/sdl-3.0.0/src/video/x11/SDL_x11sym.h | 333 + vendor/sdl-3.0.0/src/video/x11/SDL_x11touch.c | 46 + vendor/sdl-3.0.0/src/video/x11/SDL_x11touch.h | 30 + vendor/sdl-3.0.0/src/video/x11/SDL_x11video.c | 465 + vendor/sdl-3.0.0/src/video/x11/SDL_x11video.h | 139 + .../sdl-3.0.0/src/video/x11/SDL_x11vulkan.c | 235 + .../sdl-3.0.0/src/video/x11/SDL_x11vulkan.h | 45 + .../sdl-3.0.0/src/video/x11/SDL_x11window.c | 2011 + .../sdl-3.0.0/src/video/x11/SDL_x11window.h | 124 + .../sdl-3.0.0/src/video/x11/SDL_x11xfixes.c | 212 + .../sdl-3.0.0/src/video/x11/SDL_x11xfixes.h | 39 + .../sdl-3.0.0/src/video/x11/SDL_x11xinput2.c | 521 + .../sdl-3.0.0/src/video/x11/SDL_x11xinput2.h | 42 + vendor/sdl-3.0.0/src/video/x11/edid-parse.c | 753 + vendor/sdl-3.0.0/src/video/x11/edid.h | 167 + vendor/sdl-3.0.0/src/video/yuv2rgb/LICENSE | 27 + vendor/sdl-3.0.0/src/video/yuv2rgb/README.md | 63 + vendor/sdl-3.0.0/src/video/yuv2rgb/yuv_rgb.c | 728 + vendor/sdl-3.0.0/src/video/yuv2rgb/yuv_rgb.h | 411 + .../src/video/yuv2rgb/yuv_rgb_lsx_func.h | 372 + .../src/video/yuv2rgb/yuv_rgb_sse_func.h | 529 + .../src/video/yuv2rgb/yuv_rgb_std_func.h | 233 + vendor/sdl-3.0.0/test/CMakeLists.txt | 705 + vendor/sdl-3.0.0/test/COPYING | 8 + vendor/sdl-3.0.0/test/README | 48 + .../android/cmake/AndroidManifest.xml.cmake | 70 + .../cmake/SDLEntryTestActivity.java.cmake | 121 + .../android/cmake/SDLTestActivity.java.cmake | 33 + .../cmake/res/values/strings.xml.cmake | 5 + .../android/cmake/res/xml/shortcuts.xml.cmake | 24 + .../res/drawable/sdl-test_foreground.xml | 102 + .../android/res/layout/arguments_layout.xml | 26 + .../res/mipmap-anydpi-v26/sdl-test.xml | 5 + .../res/mipmap-anydpi-v26/sdl-test_round.xml | 5 + .../test/android/res/mipmap-hdpi/sdl-test.png | Bin 0 -> 3041 bytes .../res/mipmap-hdpi/sdl-test_round.png | Bin 0 -> 5292 bytes .../test/android/res/mipmap-mdpi/sdl-test.png | Bin 0 -> 1881 bytes .../res/mipmap-mdpi/sdl-test_round.png | Bin 0 -> 3150 bytes .../android/res/mipmap-xhdpi/sdl-test.png | Bin 0 -> 4426 bytes .../res/mipmap-xhdpi/sdl-test_round.png | Bin 0 -> 7789 bytes .../android/res/mipmap-xxhdpi/sdl-test.png | Bin 0 -> 7389 bytes .../res/mipmap-xxhdpi/sdl-test_round.png | Bin 0 -> 13232 bytes .../android/res/mipmap-xxxhdpi/sdl-test.png | Bin 0 -> 11218 bytes .../res/mipmap-xxxhdpi/sdl-test_round.png | Bin 0 -> 19626 bytes .../test/android/res/values/arg_strings.xml | 7 + .../res/values/sdl-test_background.xml | 4 + vendor/sdl-3.0.0/test/audiofile.bmp | Bin 0 -> 65674 bytes vendor/sdl-3.0.0/test/checkkeys.c | 307 + vendor/sdl-3.0.0/test/checkkeysthreads.c | 313 + .../sdl-3.0.0/test/emscripten/joystick-pre.js | 25 + vendor/sdl-3.0.0/test/emscripten/server.py | 75 + vendor/sdl-3.0.0/test/gamepad_axis.bmp | Bin 0 -> 10122 bytes vendor/sdl-3.0.0/test/gamepad_axis.h | 847 + vendor/sdl-3.0.0/test/gamepad_axis_arrow.bmp | Bin 0 -> 410 bytes vendor/sdl-3.0.0/test/gamepad_axis_arrow.h | 38 + vendor/sdl-3.0.0/test/gamepad_back.bmp | Bin 0 -> 17952 bytes vendor/sdl-3.0.0/test/gamepad_back.h | 1499 + .../sdl-3.0.0/test/gamepad_battery_empty.bmp | Bin 0 -> 2106 bytes vendor/sdl-3.0.0/test/gamepad_battery_empty.h | 179 + .../sdl-3.0.0/test/gamepad_battery_full.bmp | Bin 0 -> 2106 bytes vendor/sdl-3.0.0/test/gamepad_battery_full.h | 179 + vendor/sdl-3.0.0/test/gamepad_battery_low.bmp | Bin 0 -> 2106 bytes vendor/sdl-3.0.0/test/gamepad_battery_low.h | 179 + .../sdl-3.0.0/test/gamepad_battery_medium.bmp | Bin 0 -> 2106 bytes .../sdl-3.0.0/test/gamepad_battery_medium.h | 179 + .../test/gamepad_battery_unknown.bmp | Bin 0 -> 2106 bytes .../sdl-3.0.0/test/gamepad_battery_unknown.h | 179 + .../sdl-3.0.0/test/gamepad_battery_wired.bmp | Bin 0 -> 2106 bytes vendor/sdl-3.0.0/test/gamepad_battery_wired.h | 179 + vendor/sdl-3.0.0/test/gamepad_button.bmp | Bin 0 -> 10122 bytes vendor/sdl-3.0.0/test/gamepad_button.h | 847 + .../test/gamepad_button_background.bmp | Bin 0 -> 8458 bytes .../test/gamepad_button_background.h | 708 + .../sdl-3.0.0/test/gamepad_button_small.bmp | Bin 0 -> 714 bytes vendor/sdl-3.0.0/test/gamepad_button_small.h | 63 + vendor/sdl-3.0.0/test/gamepad_face_abxy.bmp | Bin 0 -> 33030 bytes vendor/sdl-3.0.0/test/gamepad_face_abxy.h | 2756 + vendor/sdl-3.0.0/test/gamepad_face_bayx.bmp | Bin 0 -> 33030 bytes vendor/sdl-3.0.0/test/gamepad_face_bayx.h | 2756 + vendor/sdl-3.0.0/test/gamepad_face_sony.bmp | Bin 0 -> 33030 bytes vendor/sdl-3.0.0/test/gamepad_face_sony.h | 2756 + vendor/sdl-3.0.0/test/gamepad_front.bmp | Bin 0 -> 33894 bytes vendor/sdl-3.0.0/test/gamepad_front.h | 2828 + vendor/sdl-3.0.0/test/gamepad_touchpad.bmp | Bin 0 -> 3724 bytes vendor/sdl-3.0.0/test/gamepad_touchpad.h | 314 + vendor/sdl-3.0.0/test/gamepadutils.c | 2815 + vendor/sdl-3.0.0/test/gamepadutils.h | 177 + vendor/sdl-3.0.0/test/icon.bmp | Bin 0 -> 578 bytes vendor/sdl-3.0.0/test/icon.h | 52 + vendor/sdl-3.0.0/test/logaudiodev.bmp | Bin 0 -> 65674 bytes vendor/sdl-3.0.0/test/loopwave.c | 182 + vendor/sdl-3.0.0/test/main.cpp | 11 + vendor/sdl-3.0.0/test/moose.dat | Bin 0 -> 56320 bytes vendor/sdl-3.0.0/test/n3ds/logo48x48.png | Bin 0 -> 3069 bytes vendor/sdl-3.0.0/test/physaudiodev.bmp | Bin 0 -> 65674 bytes vendor/sdl-3.0.0/test/picture.xbm | 14 + vendor/sdl-3.0.0/test/pretest.c | 36 + vendor/sdl-3.0.0/test/relative_mode.markdown | 58 + vendor/sdl-3.0.0/test/sample.bmp | Bin 0 -> 69202 bytes vendor/sdl-3.0.0/test/sample.wav | Bin 0 -> 121946 bytes vendor/sdl-3.0.0/test/shapes/p01_shape24.bmp | Bin 0 -> 1228938 bytes .../test/shapes/p01_shape32alpha.bmp | Bin 0 -> 1638538 bytes vendor/sdl-3.0.0/test/shapes/p01_shape8.bmp | Bin 0 -> 410678 bytes vendor/sdl-3.0.0/test/shapes/p02_shape24.bmp | Bin 0 -> 1228938 bytes .../test/shapes/p02_shape32alpha.bmp | Bin 0 -> 1638538 bytes vendor/sdl-3.0.0/test/shapes/p02_shape8.bmp | Bin 0 -> 410678 bytes vendor/sdl-3.0.0/test/shapes/p03_shape24.bmp | Bin 0 -> 1228938 bytes vendor/sdl-3.0.0/test/shapes/p03_shape8.bmp | Bin 0 -> 410678 bytes vendor/sdl-3.0.0/test/shapes/p04_shape1.bmp | Bin 0 -> 51346 bytes vendor/sdl-3.0.0/test/shapes/p04_shape24.bmp | Bin 0 -> 1228938 bytes .../test/shapes/p04_shape32alpha.bmp | Bin 0 -> 1638538 bytes vendor/sdl-3.0.0/test/shapes/p04_shape8.bmp | Bin 0 -> 410678 bytes vendor/sdl-3.0.0/test/shapes/p05_shape8.bmp | Bin 0 -> 410678 bytes .../sdl-3.0.0/test/shapes/p06_shape1alpha.bmp | Bin 0 -> 1638538 bytes vendor/sdl-3.0.0/test/shapes/p06_shape24.bmp | Bin 0 -> 1228938 bytes .../test/shapes/p06_shape32alpha.bmp | Bin 0 -> 1638538 bytes vendor/sdl-3.0.0/test/shapes/p06_shape8.bmp | Bin 0 -> 410678 bytes vendor/sdl-3.0.0/test/shapes/p07_shape24.bmp | Bin 0 -> 1228938 bytes .../test/shapes/p07_shape32alpha.bmp | Bin 0 -> 1638538 bytes vendor/sdl-3.0.0/test/shapes/p07_shape8.bmp | Bin 0 -> 410678 bytes vendor/sdl-3.0.0/test/shapes/p08_shape24.bmp | Bin 0 -> 1228938 bytes .../test/shapes/p08_shape32alpha.bmp | Bin 0 -> 1638538 bytes vendor/sdl-3.0.0/test/shapes/p08_shape8.bmp | Bin 0 -> 410678 bytes vendor/sdl-3.0.0/test/shapes/p09_shape24.bmp | Bin 0 -> 1228938 bytes .../test/shapes/p09_shape32alpha.bmp | Bin 0 -> 1638538 bytes vendor/sdl-3.0.0/test/shapes/p09_shape8.bmp | Bin 0 -> 410678 bytes vendor/sdl-3.0.0/test/shapes/p10_shape1.bmp | Bin 0 -> 51346 bytes vendor/sdl-3.0.0/test/shapes/p10_shape24.bmp | Bin 0 -> 1228938 bytes .../test/shapes/p10_shape32alpha.bmp | Bin 0 -> 1638538 bytes vendor/sdl-3.0.0/test/shapes/p10_shape8.bmp | Bin 0 -> 410678 bytes vendor/sdl-3.0.0/test/shapes/p11_shape24.bmp | Bin 0 -> 1228938 bytes .../test/shapes/p11_shape32alpha.bmp | Bin 0 -> 1638538 bytes vendor/sdl-3.0.0/test/shapes/p11_shape8.bmp | Bin 0 -> 410678 bytes vendor/sdl-3.0.0/test/shapes/p12_shape24.bmp | Bin 0 -> 1228938 bytes vendor/sdl-3.0.0/test/shapes/p12_shape8.bmp | Bin 0 -> 410678 bytes vendor/sdl-3.0.0/test/shapes/p13_shape24.bmp | Bin 0 -> 1228938 bytes .../test/shapes/p13_shape32alpha.bmp | Bin 0 -> 1638538 bytes vendor/sdl-3.0.0/test/shapes/p13_shape8.bmp | Bin 0 -> 410678 bytes vendor/sdl-3.0.0/test/shapes/p14_shape24.bmp | Bin 0 -> 1228938 bytes vendor/sdl-3.0.0/test/shapes/p14_shape8.bmp | Bin 0 -> 410678 bytes vendor/sdl-3.0.0/test/shapes/p15_shape24.bmp | Bin 0 -> 1228938 bytes .../test/shapes/p15_shape32alpha.bmp | Bin 0 -> 1638538 bytes vendor/sdl-3.0.0/test/shapes/p15_shape8.bmp | Bin 0 -> 410678 bytes vendor/sdl-3.0.0/test/shapes/p16_shape1.bmp | Bin 0 -> 51346 bytes vendor/sdl-3.0.0/test/shapes/p16_shape24.bmp | Bin 0 -> 1228938 bytes vendor/sdl-3.0.0/test/shapes/p16_shape8.bmp | Bin 0 -> 410678 bytes vendor/sdl-3.0.0/test/shapes/trollface_24.bmp | Bin 0 -> 196662 bytes .../test/shapes/trollface_32alpha.bmp | Bin 0 -> 262198 bytes vendor/sdl-3.0.0/test/soundboard.bmp | Bin 0 -> 65674 bytes vendor/sdl-3.0.0/test/soundboard_levels.bmp | Bin 0 -> 2698 bytes vendor/sdl-3.0.0/test/speaker.bmp | Bin 0 -> 65674 bytes vendor/sdl-3.0.0/test/template.test.in | 3 + vendor/sdl-3.0.0/test/testatomic.c | 731 + vendor/sdl-3.0.0/test/testaudio-art.txt | 8 + vendor/sdl-3.0.0/test/testaudio.c | 1276 + vendor/sdl-3.0.0/test/testaudiocapture.c | 236 + vendor/sdl-3.0.0/test/testaudiohotplug.c | 213 + vendor/sdl-3.0.0/test/testaudioinfo.c | 122 + .../test/testaudiostreamdynamicresample.c | 449 + vendor/sdl-3.0.0/test/testautomation.c | 172 + vendor/sdl-3.0.0/test/testautomation_audio.c | 1343 + .../sdl-3.0.0/test/testautomation_clipboard.c | 567 + vendor/sdl-3.0.0/test/testautomation_events.c | 204 + vendor/sdl-3.0.0/test/testautomation_guid.c | 172 + vendor/sdl-3.0.0/test/testautomation_hints.c | 262 + vendor/sdl-3.0.0/test/testautomation_images.c | 5929 ++ vendor/sdl-3.0.0/test/testautomation_images.h | 36 + .../test/testautomation_intrinsics.c | 688 + .../sdl-3.0.0/test/testautomation_joystick.c | 95 + .../sdl-3.0.0/test/testautomation_keyboard.c | 703 + vendor/sdl-3.0.0/test/testautomation_main.c | 147 + vendor/sdl-3.0.0/test/testautomation_math.c | 3387 + vendor/sdl-3.0.0/test/testautomation_mouse.c | 661 + vendor/sdl-3.0.0/test/testautomation_pixels.c | 378 + .../sdl-3.0.0/test/testautomation_platform.c | 592 + .../test/testautomation_properties.c | 190 + vendor/sdl-3.0.0/test/testautomation_rect.c | 1821 + vendor/sdl-3.0.0/test/testautomation_render.c | 1291 + vendor/sdl-3.0.0/test/testautomation_rwops.c | 654 + .../sdl-3.0.0/test/testautomation_sdltest.c | 1299 + vendor/sdl-3.0.0/test/testautomation_stdlib.c | 975 + vendor/sdl-3.0.0/test/testautomation_suites.h | 36 + .../sdl-3.0.0/test/testautomation_surface.c | 825 + vendor/sdl-3.0.0/test/testautomation_syswm.c | 60 + vendor/sdl-3.0.0/test/testautomation_timer.c | 201 + vendor/sdl-3.0.0/test/testautomation_video.c | 1907 + vendor/sdl-3.0.0/test/testbounds.c | 56 + vendor/sdl-3.0.0/test/testcontroller.c | 2029 + vendor/sdl-3.0.0/test/testcustomcursor.c | 329 + vendor/sdl-3.0.0/test/testdisplayinfo.c | 104 + vendor/sdl-3.0.0/test/testdraw.c | 314 + vendor/sdl-3.0.0/test/testdrawchessboard.c | 160 + vendor/sdl-3.0.0/test/testdropfile.c | 111 + vendor/sdl-3.0.0/test/testerror.c | 98 + vendor/sdl-3.0.0/test/testevdev.c | 1956 + vendor/sdl-3.0.0/test/testffmpeg.c | 1143 + .../sdl-3.0.0/test/testffmpeg_videotoolbox.h | 15 + .../sdl-3.0.0/test/testffmpeg_videotoolbox.m | 147 + vendor/sdl-3.0.0/test/testfile.c | 375 + vendor/sdl-3.0.0/test/testfilesystem.c | 73 + vendor/sdl-3.0.0/test/testgeometry.c | 271 + vendor/sdl-3.0.0/test/testgl.c | 455 + vendor/sdl-3.0.0/test/testgles.c | 352 + vendor/sdl-3.0.0/test/testgles2.c | 967 + vendor/sdl-3.0.0/test/testgles2_sdf.c | 800 + .../test/testgles2_sdf_img_normal.bmp | Bin 0 -> 68122 bytes .../sdl-3.0.0/test/testgles2_sdf_img_sdf.bmp | Bin 0 -> 72202 bytes vendor/sdl-3.0.0/test/testhaptic.c | 384 + vendor/sdl-3.0.0/test/testhittesting.c | 166 + vendor/sdl-3.0.0/test/testhotplug.c | 163 + vendor/sdl-3.0.0/test/testiconv.c | 126 + vendor/sdl-3.0.0/test/testime.c | 790 + vendor/sdl-3.0.0/test/testintersections.c | 390 + vendor/sdl-3.0.0/test/testkeys.c | 51 + vendor/sdl-3.0.0/test/testloadso.c | 115 + vendor/sdl-3.0.0/test/testlocale.c | 103 + vendor/sdl-3.0.0/test/testlock.c | 212 + vendor/sdl-3.0.0/test/testmessage.c | 229 + vendor/sdl-3.0.0/test/testmouse.c | 312 + vendor/sdl-3.0.0/test/testmultiaudio.c | 208 + vendor/sdl-3.0.0/test/testnative.c | 224 + vendor/sdl-3.0.0/test/testnative.h | 47 + vendor/sdl-3.0.0/test/testnativecocoa.m | 58 + vendor/sdl-3.0.0/test/testnativew32.c | 88 + vendor/sdl-3.0.0/test/testnativex11.c | 55 + vendor/sdl-3.0.0/test/testoffscreen.c | 178 + vendor/sdl-3.0.0/test/testoverlay.c | 542 + vendor/sdl-3.0.0/test/testplatform.c | 490 + vendor/sdl-3.0.0/test/testpopup.c | 278 + vendor/sdl-3.0.0/test/testpower.c | 93 + vendor/sdl-3.0.0/test/testqsort.c | 129 + vendor/sdl-3.0.0/test/testrelative.c | 136 + vendor/sdl-3.0.0/test/testrendercopyex.c | 177 + vendor/sdl-3.0.0/test/testrendertarget.c | 292 + vendor/sdl-3.0.0/test/testresample.c | 157 + vendor/sdl-3.0.0/test/testrumble.c | 157 + vendor/sdl-3.0.0/test/testrwlock.c | 178 + vendor/sdl-3.0.0/test/testscale.c | 169 + vendor/sdl-3.0.0/test/testsem.c | 321 + vendor/sdl-3.0.0/test/testsensor.c | 141 + vendor/sdl-3.0.0/test/testshader.c | 559 + vendor/sdl-3.0.0/test/testshape.c | 390 + vendor/sdl-3.0.0/test/testsprite.c | 604 + vendor/sdl-3.0.0/test/testspriteminimal.c | 173 + vendor/sdl-3.0.0/test/teststreaming.c | 208 + vendor/sdl-3.0.0/test/testsurround.c | 241 + vendor/sdl-3.0.0/test/testthread.c | 164 + vendor/sdl-3.0.0/test/testtimer.c | 205 + vendor/sdl-3.0.0/test/testurl.c | 43 + vendor/sdl-3.0.0/test/testutils.c | 158 + vendor/sdl-3.0.0/test/testutils.h | 24 + vendor/sdl-3.0.0/test/testver.c | 48 + vendor/sdl-3.0.0/test/testviewport.c | 239 + vendor/sdl-3.0.0/test/testvulkan.c | 1169 + vendor/sdl-3.0.0/test/testwm.c | 291 + vendor/sdl-3.0.0/test/testyuv.bmp | Bin 0 -> 739398 bytes vendor/sdl-3.0.0/test/testyuv.c | 497 + vendor/sdl-3.0.0/test/testyuv_cvt.c | 298 + vendor/sdl-3.0.0/test/testyuv_cvt.h | 16 + vendor/sdl-3.0.0/test/torturethread.c | 128 + vendor/sdl-3.0.0/test/trashcan.bmp | Bin 0 -> 65674 bytes .../test/unifont-13.0.06-license.txt | 90 + vendor/sdl-3.0.0/test/unifont-13.0.06.hex | 57086 ++++++++++++++++ vendor/sdl-3.0.0/test/utf8.txt | 287 + .../test/uwp/Package.appxmanifest.in | 52 + vendor/sdl-3.0.0/test/uwp/logo-50x50.png | Bin 0 -> 2421 bytes vendor/sdl-3.0.0/test/uwp/splash-620x300.png | Bin 0 -> 30918 bytes vendor/sdl-3.0.0/test/uwp/square-150x150.png | Bin 0 -> 10605 bytes vendor/sdl-3.0.0/test/uwp/square-44x44.png | Bin 0 -> 2082 bytes .../wayland-protocols/fractional-scale-v1.xml | 102 + .../idle-inhibit-unstable-v1.xml | 83 + .../input-timestamps-unstable-v1.xml | 145 + ...keyboard-shortcuts-inhibit-unstable-v1.xml | 143 + .../pointer-constraints-unstable-v1.xml | 339 + .../primary-selection-unstable-v1.xml | 225 + .../relative-pointer-unstable-v1.xml | 136 + .../wayland-protocols/tablet-unstable-v2.xml | 1178 + .../text-input-unstable-v3.xml | 452 + .../wayland-protocols/viewporter.xml | 186 + .../sdl-3.0.0/wayland-protocols/wayland.xml | 3151 + .../wayland-protocols/xdg-activation-v1.xml | 186 + .../xdg-decoration-unstable-v1.xml | 156 + .../xdg-output-unstable-v1.xml | 220 + .../sdl-3.0.0/wayland-protocols/xdg-shell.xml | 1370 + 2043 files changed, 663533 insertions(+), 5 deletions(-) create mode 100644 src/gx/glsdl/CGxDeviceGLSDL.cpp create mode 100644 src/gx/glsdl/CGxDeviceGLSDL.hpp create mode 100644 src/gx/glsdl/GL.cpp create mode 100644 src/gx/glsdl/GL.hpp create mode 100644 src/gx/glsdl/GLBatch.hpp create mode 100644 src/gx/glsdl/GLBuffer.cpp create mode 100644 src/gx/glsdl/GLBuffer.hpp create mode 100644 src/gx/glsdl/GLBufferPool.hpp create mode 100644 src/gx/glsdl/GLDebugMipmap2D.hpp create mode 100644 src/gx/glsdl/GLFramebuffer.cpp create mode 100644 src/gx/glsdl/GLFramebuffer.hpp create mode 100644 src/gx/glsdl/GLGLSLProgram.cpp create mode 100644 src/gx/glsdl/GLGLSLProgram.hpp create mode 100644 src/gx/glsdl/GLMipmap.cpp create mode 100644 src/gx/glsdl/GLMipmap.hpp create mode 100644 src/gx/glsdl/GLObject.cpp create mode 100644 src/gx/glsdl/GLObject.hpp create mode 100644 src/gx/glsdl/GLPixelShader.cpp create mode 100644 src/gx/glsdl/GLPixelShader.hpp create mode 100644 src/gx/glsdl/GLPool.hpp create mode 100644 src/gx/glsdl/GLSDLContext.cpp create mode 100644 src/gx/glsdl/GLSDLContext.hpp create mode 100644 src/gx/glsdl/GLSDLDevice.cpp create mode 100644 src/gx/glsdl/GLSDLDevice.hpp create mode 100644 src/gx/glsdl/GLSDLWindow.cpp create mode 100644 src/gx/glsdl/GLSDLWindow.hpp create mode 100644 src/gx/glsdl/GLShader.cpp create mode 100644 src/gx/glsdl/GLShader.hpp create mode 100644 src/gx/glsdl/GLShaderInput.hpp create mode 100644 src/gx/glsdl/GLTexture.cpp create mode 100644 src/gx/glsdl/GLTexture.hpp create mode 100644 src/gx/glsdl/GLTypes.cpp create mode 100644 src/gx/glsdl/GLTypes.hpp create mode 100644 src/gx/glsdl/GLUtil.cpp create mode 100644 src/gx/glsdl/GLUtil.hpp create mode 100644 src/gx/glsdl/GLVertexArray.cpp create mode 100644 src/gx/glsdl/GLVertexArray.hpp create mode 100644 src/gx/glsdl/GLVertexFormat.hpp create mode 100644 src/gx/glsdl/GLVertexShader.cpp create mode 100644 src/gx/glsdl/GLVertexShader.hpp create mode 100644 vendor/glew-cmake-2.2.0/.gitattributes create mode 100644 vendor/glew-cmake-2.2.0/.github/workflows/cmake.yml create mode 100644 vendor/glew-cmake-2.2.0/.gitignore create mode 100644 vendor/glew-cmake-2.2.0/.lgtm.yml create mode 100644 vendor/glew-cmake-2.2.0/.travis.yml create mode 100644 vendor/glew-cmake-2.2.0/CMakeLists.txt create mode 100644 vendor/glew-cmake-2.2.0/GeneratePkgConfig.cmake create mode 100644 vendor/glew-cmake-2.2.0/LICENSE.txt create mode 100644 vendor/glew-cmake-2.2.0/Makefile create mode 100644 vendor/glew-cmake-2.2.0/README.md create mode 100644 vendor/glew-cmake-2.2.0/README_glew.md create mode 100644 vendor/glew-cmake-2.2.0/auto/Makefile create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/filter_gl_ext.sh create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/filter_gles_ext.sh create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/filter_spec.py create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/make.pl create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/make_def_fun.pl create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/make_def_var.pl create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/make_enable_index.pl create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/make_header.pl create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/make_html.pl create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/make_index.pl create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/make_info.pl create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/make_info_list.pl create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/make_init.pl create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/make_initd.pl create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/make_list.pl create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/make_list2.pl create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/make_str.pl create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/make_struct_fun.pl create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/make_struct_var.pl create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/parse_spec.pl create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/parse_xml.py create mode 100644 vendor/glew-cmake-2.2.0/auto/bin/update_ext.sh create mode 100644 vendor/glew-cmake-2.2.0/auto/blacklist create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/EGL_EXT_device_base create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/EGL_KHR_fence_sync create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/EGL_KHR_image_base create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/EGL_KHR_lock_surface3 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_0 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_1 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_2 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_3 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_4 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_5 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GLX_ARB_get_proc_address create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GLX_ATI_pixel_format_float create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GLX_ATI_render_texture create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GLX_EXT_scene_marker create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GLX_NV_vertex_array_range create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GLX_SGIS_color_range create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GLX_SGIX_hyperpipe create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GLX_SUN_video_resize create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GLX_VERSION_1_2 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GLX_VERSION_1_3 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GLX_VERSION_1_4 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_APPLE_float_pixels create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_APPLE_pixel_buffer create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_APPLE_texture_range create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_draw_instanced create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_imaging create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_instanced_arrays create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_internalformat_query2 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_matrix_palette create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_multitexture create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_robustness create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_separate_shader_objects create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_vertex_attrib_64bit create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_vertex_blend create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATIX_point_sprites create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATIX_texture_env_combine3 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATIX_texture_env_route create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATIX_vertex_shader_output_point_size create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_envmap_bumpmap create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_map_object_buffer create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_pn_triangles create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_separate_stencil create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_shader_texture_lod create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_texture_compression_3dc create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_vertex_streams create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_Cg_shader create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_bindable_uniform create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_debug_marker create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_depth_bounds_test create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_draw_instanced create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_draw_range_elements create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_external_buffer create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_fog_coord create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_framebuffer_sRGB create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_geometry_shader4 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_gpu_program_parameters create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_gpu_shader4 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_memory_object create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_memory_object_fd create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_memory_object_win32 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_packed_float create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_pixel_buffer_object create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_scene_marker create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_secondary_color create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_semaphore create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_semaphore_fd create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_semaphore_win32 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_array create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_buffer_object create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_compression_latc create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_compression_rgtc create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_cube_map create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_edge_clamp create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_integer create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_rectangle create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_shared_exponent create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_timer_query create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_vertex_shader create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_KHR_context_flush_control create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_KTX_buffer_region create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NVX_gpu_memory_info create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_depth_buffer_float create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_depth_range_unclamped create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_fragment_program2 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_fragment_program4 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_fragment_program_option create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_framebuffer_multisample_coverage create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_geometry_program4 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_geometry_shader4 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_gpu_program4 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_gpu_program5 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_parameter_buffer_object create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_present_video create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_sample_locations create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_tessellation_program5 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_transform_feedback create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_vdpau_interop create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_vertex_program2_option create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_vertex_program3 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_vertex_program4 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_SGIX_shadow create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_SUN_read_video_pixels create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_2 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_2_1 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_3 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_4 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_5 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_2_0 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_2_1 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_3_0 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_3_1 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_3_2 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_3_3 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_0 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_1 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_2 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_3 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_4 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_5 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_6 create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/GL_WIN_swap_hint create mode 100644 vendor/glew-cmake-2.2.0/auto/core/gl/WGL_NV_gpu_affinity create mode 100644 vendor/glew-cmake-2.2.0/auto/custom.txt create mode 100644 vendor/glew-cmake-2.2.0/auto/doc/advanced.html create mode 100644 vendor/glew-cmake-2.2.0/auto/doc/basic.html create mode 100644 vendor/glew-cmake-2.2.0/auto/doc/build.html create mode 100644 vendor/glew-cmake-2.2.0/auto/doc/credits.html create mode 100644 vendor/glew-cmake-2.2.0/auto/doc/index.html create mode 100644 vendor/glew-cmake-2.2.0/auto/doc/install.html create mode 100644 vendor/glew-cmake-2.2.0/auto/doc/log.html create mode 100644 vendor/glew-cmake-2.2.0/auto/src/eglew_head.h create mode 100644 vendor/glew-cmake-2.2.0/auto/src/eglew_mid.h create mode 100644 vendor/glew-cmake-2.2.0/auto/src/eglew_tail.h create mode 100644 vendor/glew-cmake-2.2.0/auto/src/footer.html create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glew.rc create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glew_head.c create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glew_head.h create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glew_init_egl.c create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glew_init_gl.c create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glew_init_glx.c create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glew_init_tail.c create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glew_init_wgl.c create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glew_license.h create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glew_str_egl.c create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glew_str_glx.c create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glew_str_head.c create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glew_str_tail.c create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glew_str_wgl.c create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glew_tail.h create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glewinfo.rc create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glewinfo_egl.c create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glewinfo_gl.c create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glewinfo_glx.c create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glewinfo_head.c create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glewinfo_tail.c create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glewinfo_wgl.c create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glxew_head.h create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glxew_mid.h create mode 100644 vendor/glew-cmake-2.2.0/auto/src/glxew_tail.h create mode 100644 vendor/glew-cmake-2.2.0/auto/src/header.html create mode 100644 vendor/glew-cmake-2.2.0/auto/src/khronos_license.h create mode 100644 vendor/glew-cmake-2.2.0/auto/src/mesa_license.h create mode 100644 vendor/glew-cmake-2.2.0/auto/src/visualinfo.rc create mode 100644 vendor/glew-cmake-2.2.0/auto/src/wglew_head.h create mode 100644 vendor/glew-cmake-2.2.0/auto/src/wglew_mid.h create mode 100644 vendor/glew-cmake-2.2.0/auto/src/wglew_tail.h create mode 100644 vendor/glew-cmake-2.2.0/azure-pipelines.yml create mode 100644 vendor/glew-cmake-2.2.0/build/cmake/CMakeLists.txt create mode 100644 vendor/glew-cmake-2.2.0/build/cmake/CopyImportedTargetProperties.cmake create mode 100644 vendor/glew-cmake-2.2.0/build/cmake/cmake_uninstall.cmake.in create mode 100644 vendor/glew-cmake-2.2.0/build/cmake/glew-config.cmake create mode 100644 vendor/glew-cmake-2.2.0/build/cmake/testbuild/CMakeLists.txt create mode 100644 vendor/glew-cmake-2.2.0/build/cmake/testbuild/main.c create mode 100644 vendor/glew-cmake-2.2.0/build/vc10/common.props create mode 100644 vendor/glew-cmake-2.2.0/build/vc10/glew.sln create mode 100644 vendor/glew-cmake-2.2.0/build/vc10/glew_shared.vcxproj create mode 100644 vendor/glew-cmake-2.2.0/build/vc10/glew_static.vcxproj create mode 100644 vendor/glew-cmake-2.2.0/build/vc10/glewinfo.vcxproj create mode 100644 vendor/glew-cmake-2.2.0/build/vc10/visualinfo.vcxproj create mode 100644 vendor/glew-cmake-2.2.0/build/vc12/common.props create mode 100644 vendor/glew-cmake-2.2.0/build/vc12/glew.sln create mode 100644 vendor/glew-cmake-2.2.0/build/vc12/glew_shared.vcxproj create mode 100644 vendor/glew-cmake-2.2.0/build/vc12/glew_static.vcxproj create mode 100644 vendor/glew-cmake-2.2.0/build/vc12/glewinfo.vcxproj create mode 100644 vendor/glew-cmake-2.2.0/build/vc12/visualinfo.vcxproj create mode 100644 vendor/glew-cmake-2.2.0/build/vc14/common.props create mode 100644 vendor/glew-cmake-2.2.0/build/vc14/glew.sln create mode 100644 vendor/glew-cmake-2.2.0/build/vc14/glew_shared.vcxproj create mode 100644 vendor/glew-cmake-2.2.0/build/vc14/glew_static.vcxproj create mode 100644 vendor/glew-cmake-2.2.0/build/vc14/glewinfo.vcxproj create mode 100644 vendor/glew-cmake-2.2.0/build/vc14/visualinfo.vcxproj create mode 100644 vendor/glew-cmake-2.2.0/build/vc15/common.props create mode 100644 vendor/glew-cmake-2.2.0/build/vc15/glew.sln create mode 100644 vendor/glew-cmake-2.2.0/build/vc15/glew_shared.vcxproj create mode 100644 vendor/glew-cmake-2.2.0/build/vc15/glew_static.vcxproj create mode 100644 vendor/glew-cmake-2.2.0/build/vc15/glewinfo.vcxproj create mode 100644 vendor/glew-cmake-2.2.0/build/vc15/visualinfo.vcxproj create mode 100644 vendor/glew-cmake-2.2.0/build/vc6/Makefile create mode 100644 vendor/glew-cmake-2.2.0/build/vc6/glew.dsw create mode 100644 vendor/glew-cmake-2.2.0/build/vc6/glew_shared.dsp create mode 100644 vendor/glew-cmake-2.2.0/build/vc6/glew_static.dsp create mode 100644 vendor/glew-cmake-2.2.0/build/vc6/glewinfo.dsp create mode 100644 vendor/glew-cmake-2.2.0/build/vc6/visualinfo.dsp create mode 100644 vendor/glew-cmake-2.2.0/cmake-testbuild.sh create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.cygming create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.cygwin create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.cygwin-x11 create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.darwin create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.darwin-gcc6 create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.darwin-ppc create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.darwin-universal create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.darwin-x86_64 create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.fedora-mingw32 create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.flatpak-32 create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.freebsd create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.gnu create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.haiku create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.irix create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.kfreebsd create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.linux create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.linux-clang create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.linux-clang-egl create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.linux-egl create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.linux-egl-glvnd create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.linux-mingw32 create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.linux-mingw64 create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.linux-osmesa create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.mingw create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.mingw-win32 create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.msys create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.msys-win32 create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.msys-win64 create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.nacl-32 create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.nacl-64 create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.netbsd create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.openbsd create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.solaris create mode 100644 vendor/glew-cmake-2.2.0/config/Makefile.solaris-gcc create mode 100644 vendor/glew-cmake-2.2.0/config/config.guess create mode 100644 vendor/glew-cmake-2.2.0/config/version create mode 100644 vendor/glew-cmake-2.2.0/doc/advanced.html create mode 100644 vendor/glew-cmake-2.2.0/doc/basic.html create mode 100644 vendor/glew-cmake-2.2.0/doc/build.html create mode 100644 vendor/glew-cmake-2.2.0/doc/credits.html create mode 100644 vendor/glew-cmake-2.2.0/doc/github.png create mode 100644 vendor/glew-cmake-2.2.0/doc/glew.css create mode 100644 vendor/glew-cmake-2.2.0/doc/glew.html create mode 100644 vendor/glew-cmake-2.2.0/doc/glew.png create mode 100644 vendor/glew-cmake-2.2.0/doc/glew.txt create mode 100644 vendor/glew-cmake-2.2.0/doc/glxew.html create mode 100644 vendor/glew-cmake-2.2.0/doc/gpl.txt create mode 100644 vendor/glew-cmake-2.2.0/doc/index.html create mode 100644 vendor/glew-cmake-2.2.0/doc/install.html create mode 100644 vendor/glew-cmake-2.2.0/doc/khronos.txt create mode 100644 vendor/glew-cmake-2.2.0/doc/log.html create mode 100644 vendor/glew-cmake-2.2.0/doc/mesa.txt create mode 100644 vendor/glew-cmake-2.2.0/doc/new.png create mode 100644 vendor/glew-cmake-2.2.0/doc/ogl_sm.jpg create mode 100644 vendor/glew-cmake-2.2.0/doc/travis.png create mode 100644 vendor/glew-cmake-2.2.0/doc/wglew.html create mode 100644 vendor/glew-cmake-2.2.0/glew-cmake/Dockerfile create mode 100644 vendor/glew-cmake-2.2.0/glew-cmake/cmake-install-test.cmake create mode 100644 vendor/glew-cmake-2.2.0/glew-cmake/fetch-content.cmake create mode 100644 vendor/glew-cmake-2.2.0/glew-cmake/maintain.sh create mode 100644 vendor/glew-cmake-2.2.0/glew-cmake/mingw.cmake create mode 100644 vendor/glew-cmake-2.2.0/glew-cmake/sub-directory-test.cmake create mode 100644 vendor/glew-cmake-2.2.0/glew.pc.in create mode 100644 vendor/sdl-3.0.0/.clang-format create mode 100644 vendor/sdl-3.0.0/.clang-tidy create mode 100644 vendor/sdl-3.0.0/.editorconfig create mode 100644 vendor/sdl-3.0.0/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 vendor/sdl-3.0.0/.github/cmake/CMakeLists.txt create mode 100644 vendor/sdl-3.0.0/.github/workflows/android.yml create mode 100644 vendor/sdl-3.0.0/.github/workflows/cpactions.yml create mode 100644 vendor/sdl-3.0.0/.github/workflows/emscripten.yml create mode 100644 vendor/sdl-3.0.0/.github/workflows/haiku.yml create mode 100644 vendor/sdl-3.0.0/.github/workflows/ios.yml create mode 100644 vendor/sdl-3.0.0/.github/workflows/loongarch64.yml create mode 100644 vendor/sdl-3.0.0/.github/workflows/main.yml create mode 100644 vendor/sdl-3.0.0/.github/workflows/msvc.yml create mode 100644 vendor/sdl-3.0.0/.github/workflows/n3ds.yml create mode 100644 vendor/sdl-3.0.0/.github/workflows/ppc64le.yml create mode 100644 vendor/sdl-3.0.0/.github/workflows/ps2.yml create mode 100644 vendor/sdl-3.0.0/.github/workflows/psp.yml create mode 100644 vendor/sdl-3.0.0/.github/workflows/riscos.yml create mode 100644 vendor/sdl-3.0.0/.github/workflows/visionos.yml.disabled create mode 100644 vendor/sdl-3.0.0/.github/workflows/vita.yml create mode 100644 vendor/sdl-3.0.0/.gitignore create mode 100644 vendor/sdl-3.0.0/.wikiheaders-options create mode 100644 vendor/sdl-3.0.0/Android.mk create mode 100644 vendor/sdl-3.0.0/BUGS.txt create mode 100644 vendor/sdl-3.0.0/CMakeLists.txt create mode 100644 vendor/sdl-3.0.0/CREDITS.txt create mode 100644 vendor/sdl-3.0.0/INSTALL.txt create mode 100644 vendor/sdl-3.0.0/LICENSE.txt create mode 100644 vendor/sdl-3.0.0/README-SDL.txt create mode 100644 vendor/sdl-3.0.0/README.md create mode 100644 vendor/sdl-3.0.0/TODO.txt create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/SDL.sln create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/SDL/SDL.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/SDL/SDL.vcxproj.filters create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/SDL_test/SDL_test.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/clean.sh create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/logos/Logo100x100.png create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/logos/Logo150x150.png create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/logos/Logo44x44.png create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/logos/Logo480x480.png create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/logos/SplashScreenImage.png create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/PackageLayout.xml create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/testcontroller.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/testcontroller.vcxproj.filters create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/wingdk/MicrosoftGame.config create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/xboxone/MicrosoftGame.config create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/xboxseries/MicrosoftGame.config create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/PackageLayout.xml create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/src/testgdk.cpp create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/testgdk.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/testgdk.vcxproj.filters create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/wingdk/MicrosoftGame.config create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/xboxone/MicrosoftGame.config create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/xboxseries/MicrosoftGame.config create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/PackageLayout.xml create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/testsprite.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/testsprite.vcxproj.filters create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/wingdk/MicrosoftGame.config create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/xboxone/MicrosoftGame.config create mode 100644 vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/xboxseries/MicrosoftGame.config create mode 100644 vendor/sdl-3.0.0/VisualC-WinRT/SDL-UWP.sln create mode 100644 vendor/sdl-3.0.0/VisualC-WinRT/SDL-UWP.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC-WinRT/SDL-UWP.vcxproj.filters create mode 100644 vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/LockScreenLogo.scale-200.png create mode 100644 vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/SplashScreen.scale-200.png create mode 100644 vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/Square150x150Logo.scale-200.png create mode 100644 vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/Square44x44Logo.scale-200.png create mode 100644 vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/Square44x44Logo.targetsize-24_altform-unplated.png create mode 100644 vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/StoreLogo.png create mode 100644 vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/Wide310x150Logo.scale-200.png create mode 100644 vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Package.appxmanifest create mode 100644 vendor/sdl-3.0.0/VisualC-WinRT/testdraw/testdraw.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC-WinRT/testdraw/testdraw.vcxproj.filters create mode 100644 vendor/sdl-3.0.0/VisualC/SDL.sln create mode 100644 vendor/sdl-3.0.0/VisualC/SDL/SDL.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/SDL/SDL.vcxproj.filters create mode 100644 vendor/sdl-3.0.0/VisualC/SDL_test/SDL_test.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/clean.sh create mode 100644 vendor/sdl-3.0.0/VisualC/pkg-support/cmake/sdl3-config-version.cmake create mode 100644 vendor/sdl-3.0.0/VisualC/pkg-support/cmake/sdl3-config.cmake create mode 100644 vendor/sdl-3.0.0/VisualC/tests/checkkeys/checkkeys.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/loopwave/loopwave.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testatomic/testatomic.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testautomation/testautomation.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testcontroller/testcontroller.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testdraw/testdraw.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testfile/testfile.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testgl/testgl.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testgles2/testgles2.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testoverlay/testoverlay.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testplatform/testplatform.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testpower/testpower.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testrendertarget/testrendertarget.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testrumble/testrumble.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testscale/testscale.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testsensor/testsensor.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testshape/testshape.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testsprite/testsprite.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testsurround/testsurround.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testvulkan/testvulkan.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testwm/testwm.vcxproj create mode 100644 vendor/sdl-3.0.0/VisualC/tests/testyuv/testyuv.vcxproj create mode 100644 vendor/sdl-3.0.0/WhatsNew.txt create mode 100644 vendor/sdl-3.0.0/Xcode/SDL/Info-Framework.plist create mode 100644 vendor/sdl-3.0.0/Xcode/SDL/SDL.xcodeproj/project.pbxproj create mode 100644 vendor/sdl-3.0.0/Xcode/SDL/SDL3/Info.plist create mode 100644 vendor/sdl-3.0.0/Xcode/SDL/pkg-support/SDL.info create mode 100644 vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/CMake/sdl3-config-version.cmake create mode 100644 vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/CMake/sdl3-config.cmake create mode 100644 vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/License.txt create mode 100644 vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/ReadMe.txt create mode 100644 vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/SDL_DS_Store create mode 100644 vendor/sdl-3.0.0/Xcode/SDL/pkg-support/sdl_logo.pdf create mode 100644 vendor/sdl-3.0.0/Xcode/SDLTest/SDLTest.xcodeproj/project.pbxproj create mode 100644 vendor/sdl-3.0.0/Xcode/SDLTest/config.xcconfig create mode 100644 vendor/sdl-3.0.0/Xcode/XcodeDocSet/Doxyfile create mode 100644 vendor/sdl-3.0.0/android-project/app/build.gradle create mode 100644 vendor/sdl-3.0.0/android-project/app/jni/Android.mk create mode 100644 vendor/sdl-3.0.0/android-project/app/jni/Application.mk create mode 100644 vendor/sdl-3.0.0/android-project/app/jni/CMakeLists.txt create mode 100644 vendor/sdl-3.0.0/android-project/app/jni/src/Android.mk create mode 100644 vendor/sdl-3.0.0/android-project/app/jni/src/CMakeLists.txt create mode 100644 vendor/sdl-3.0.0/android-project/app/proguard-rules.pro create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/AndroidManifest.xml create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/HIDDevice.java create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/HIDDeviceBLESteamController.java create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/HIDDeviceUSB.java create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/SDL.java create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/SDLAudioManager.java create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/SDLControllerManager.java create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/SDLSurface.java create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/res/values/colors.xml create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/res/values/strings.xml create mode 100644 vendor/sdl-3.0.0/android-project/app/src/main/res/values/styles.xml create mode 100644 vendor/sdl-3.0.0/android-project/build.gradle create mode 100644 vendor/sdl-3.0.0/android-project/gradle.properties create mode 100644 vendor/sdl-3.0.0/android-project/gradle/wrapper/gradle-wrapper.jar create mode 100644 vendor/sdl-3.0.0/android-project/gradle/wrapper/gradle-wrapper.properties create mode 100644 vendor/sdl-3.0.0/android-project/gradlew create mode 100644 vendor/sdl-3.0.0/android-project/gradlew.bat create mode 100644 vendor/sdl-3.0.0/android-project/settings.gradle create mode 100644 vendor/sdl-3.0.0/build-scripts/SDL_migration.cocci create mode 100644 vendor/sdl-3.0.0/build-scripts/add-source-to-projects.pl create mode 100644 vendor/sdl-3.0.0/build-scripts/android-prefab.sh create mode 100644 vendor/sdl-3.0.0/build-scripts/androidbuild.sh create mode 100644 vendor/sdl-3.0.0/build-scripts/androidbuildlibs.sh create mode 100644 vendor/sdl-3.0.0/build-scripts/check_stdlib_usage.py create mode 100644 vendor/sdl-3.0.0/build-scripts/clang-format-src.sh create mode 100644 vendor/sdl-3.0.0/build-scripts/cmake-toolchain-mingw64-i686.cmake create mode 100644 vendor/sdl-3.0.0/build-scripts/cmake-toolchain-mingw64-x86_64.cmake create mode 100644 vendor/sdl-3.0.0/build-scripts/cmake-toolchain-qnx-aarch64le.cmake create mode 100644 vendor/sdl-3.0.0/build-scripts/cmake-toolchain-qnx-x86_64.cmake create mode 100644 vendor/sdl-3.0.0/build-scripts/codechecker-buildbot.sh create mode 100644 vendor/sdl-3.0.0/build-scripts/fnsince.pl create mode 100644 vendor/sdl-3.0.0/build-scripts/gen_audio_channel_conversion.c create mode 100644 vendor/sdl-3.0.0/build-scripts/gen_audio_resampler_filter.c create mode 100644 vendor/sdl-3.0.0/build-scripts/git-pre-push-hook.pl create mode 100644 vendor/sdl-3.0.0/build-scripts/mkinstalldirs create mode 100644 vendor/sdl-3.0.0/build-scripts/rename_api.py create mode 100644 vendor/sdl-3.0.0/build-scripts/rename_headers.py create mode 100644 vendor/sdl-3.0.0/build-scripts/rename_symbols.py create mode 100644 vendor/sdl-3.0.0/build-scripts/showrev.sh create mode 100644 vendor/sdl-3.0.0/build-scripts/strip_fPIC.sh create mode 100644 vendor/sdl-3.0.0/build-scripts/test-versioning.sh create mode 100644 vendor/sdl-3.0.0/build-scripts/update-copyright.sh create mode 100644 vendor/sdl-3.0.0/build-scripts/update-version.sh create mode 100644 vendor/sdl-3.0.0/build-scripts/updaterev.sh create mode 100644 vendor/sdl-3.0.0/build-scripts/wikiheaders.pl create mode 100644 vendor/sdl-3.0.0/cmake/3rdparty.cmake create mode 100644 vendor/sdl-3.0.0/cmake/CPackProjectConfig.cmake.in create mode 100644 vendor/sdl-3.0.0/cmake/CheckCPUArchitecture.cmake create mode 100644 vendor/sdl-3.0.0/cmake/FindFFmpeg.cmake create mode 100644 vendor/sdl-3.0.0/cmake/GetGitRevisionDescription.cmake create mode 100644 vendor/sdl-3.0.0/cmake/GetGitRevisionDescription.cmake.in create mode 100644 vendor/sdl-3.0.0/cmake/PkgConfigHelper.cmake create mode 100644 vendor/sdl-3.0.0/cmake/SDL3Config.cmake.in create mode 100644 vendor/sdl-3.0.0/cmake/android/FindSdlAndroid.cmake create mode 100644 vendor/sdl-3.0.0/cmake/android/FindSdlAndroidBuildTools.cmake create mode 100644 vendor/sdl-3.0.0/cmake/android/FindSdlAndroidPlatform.cmake create mode 100644 vendor/sdl-3.0.0/cmake/android/SdlAndroidFunctions.cmake create mode 100644 vendor/sdl-3.0.0/cmake/android/SdlAndroidScript.cmake create mode 100644 vendor/sdl-3.0.0/cmake/cmake_uninstall.cmake.in create mode 100644 vendor/sdl-3.0.0/cmake/macros.cmake create mode 100644 vendor/sdl-3.0.0/cmake/sdl3.pc.in create mode 100644 vendor/sdl-3.0.0/cmake/sdlchecks.cmake create mode 100644 vendor/sdl-3.0.0/cmake/sdlcompilers.cmake create mode 100644 vendor/sdl-3.0.0/cmake/sdlmanpages.cmake create mode 100644 vendor/sdl-3.0.0/cmake/sdlplatform.cmake create mode 100644 vendor/sdl-3.0.0/cmake/sdltargets.cmake create mode 100644 vendor/sdl-3.0.0/cmake/test/CMakeLists.txt create mode 100644 vendor/sdl-3.0.0/cmake/test/inc_sdl_noslash.c create mode 100644 vendor/sdl-3.0.0/cmake/test/inc_sdl_slash.c create mode 100644 vendor/sdl-3.0.0/cmake/test/main_cli.c create mode 100644 vendor/sdl-3.0.0/cmake/test/main_gui.c create mode 100644 vendor/sdl-3.0.0/cmake/test/main_lib.c create mode 100644 vendor/sdl-3.0.0/cmake/test/sdltest.c create mode 100644 vendor/sdl-3.0.0/cmake/test/test_pkgconfig.sh create mode 100644 vendor/sdl-3.0.0/cmake/xxd.py create mode 100644 vendor/sdl-3.0.0/docs/README-android.md create mode 100644 vendor/sdl-3.0.0/docs/README-cmake.md create mode 100644 vendor/sdl-3.0.0/docs/README-contributing.md create mode 100644 vendor/sdl-3.0.0/docs/README-dynapi.md create mode 100644 vendor/sdl-3.0.0/docs/README-emscripten.md create mode 100644 vendor/sdl-3.0.0/docs/README-gdk.md create mode 100644 vendor/sdl-3.0.0/docs/README-git.md create mode 100644 vendor/sdl-3.0.0/docs/README-hg.md create mode 100644 vendor/sdl-3.0.0/docs/README-highdpi.md create mode 100644 vendor/sdl-3.0.0/docs/README-ios.md create mode 100644 vendor/sdl-3.0.0/docs/README-kmsbsd.md create mode 100644 vendor/sdl-3.0.0/docs/README-linux.md create mode 100644 vendor/sdl-3.0.0/docs/README-macos.md create mode 100644 vendor/sdl-3.0.0/docs/README-migration.md create mode 100644 vendor/sdl-3.0.0/docs/README-n3ds.md create mode 100644 vendor/sdl-3.0.0/docs/README-ngage.md create mode 100644 vendor/sdl-3.0.0/docs/README-platforms.md create mode 100644 vendor/sdl-3.0.0/docs/README-porting.md create mode 100644 vendor/sdl-3.0.0/docs/README-ps2.md create mode 100644 vendor/sdl-3.0.0/docs/README-psp.md create mode 100644 vendor/sdl-3.0.0/docs/README-raspberrypi.md create mode 100644 vendor/sdl-3.0.0/docs/README-riscos.md create mode 100644 vendor/sdl-3.0.0/docs/README-touch.md create mode 100644 vendor/sdl-3.0.0/docs/README-versions.md create mode 100644 vendor/sdl-3.0.0/docs/README-visualc.md create mode 100644 vendor/sdl-3.0.0/docs/README-vita.md create mode 100644 vendor/sdl-3.0.0/docs/README-wayland.md create mode 100644 vendor/sdl-3.0.0/docs/README-windows.md create mode 100644 vendor/sdl-3.0.0/docs/README-winrt.md create mode 100644 vendor/sdl-3.0.0/docs/README.md create mode 100644 vendor/sdl-3.0.0/docs/doxyfile create mode 100644 vendor/sdl-3.0.0/docs/release_checklist.md create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_assert.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_atomic.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_audio.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_begin_code.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_bits.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_blendmode.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_clipboard.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_close_code.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_copying.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_cpuinfo.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_egl.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_endian.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_error.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_events.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_filesystem.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_gamepad.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_guid.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_haptic.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_hidapi.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_hints.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_init.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_intrin.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_joystick.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_keyboard.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_keycode.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_loadso.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_locale.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_log.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_main.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_main_impl.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_messagebox.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_metal.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_misc.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_mouse.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_mutex.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_oldnames.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_opengl.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_opengl_glext.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_opengles.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_opengles2.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_opengles2_gl2.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_opengles2_gl2ext.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_opengles2_gl2platform.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_opengles2_khrplatform.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_pixels.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_platform.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_platform_defines.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_power.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_properties.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_quit.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_rect.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_render.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_revision.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_rwops.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_scancode.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_sensor.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_shape.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_stdinc.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_surface.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_system.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_syswm.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_test.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_test_assert.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_test_common.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_test_compare.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_test_crc32.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_test_font.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_test_fuzzer.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_test_harness.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_test_log.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_test_md5.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_test_memory.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_test_random.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_thread.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_timer.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_touch.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_version.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_video.h create mode 100644 vendor/sdl-3.0.0/include/SDL3/SDL_vulkan.h create mode 100644 vendor/sdl-3.0.0/include/build_config/SDL_build_config.h create mode 100644 vendor/sdl-3.0.0/include/build_config/SDL_build_config.h.cmake create mode 100644 vendor/sdl-3.0.0/include/build_config/SDL_build_config_android.h create mode 100644 vendor/sdl-3.0.0/include/build_config/SDL_build_config_emscripten.h create mode 100644 vendor/sdl-3.0.0/include/build_config/SDL_build_config_ios.h create mode 100644 vendor/sdl-3.0.0/include/build_config/SDL_build_config_macos.h create mode 100644 vendor/sdl-3.0.0/include/build_config/SDL_build_config_minimal.h create mode 100644 vendor/sdl-3.0.0/include/build_config/SDL_build_config_ngage.h create mode 100644 vendor/sdl-3.0.0/include/build_config/SDL_build_config_windows.h create mode 100644 vendor/sdl-3.0.0/include/build_config/SDL_build_config_wingdk.h create mode 100644 vendor/sdl-3.0.0/include/build_config/SDL_build_config_winrt.h create mode 100644 vendor/sdl-3.0.0/include/build_config/SDL_build_config_xbox.h create mode 100644 vendor/sdl-3.0.0/include/build_config/SDL_revision.h.cmake create mode 100644 vendor/sdl-3.0.0/mingw/pkg-support/cmake/sdl3-config-version.cmake create mode 100644 vendor/sdl-3.0.0/mingw/pkg-support/cmake/sdl3-config.cmake create mode 100644 vendor/sdl-3.0.0/src/SDL.c create mode 100644 vendor/sdl-3.0.0/src/SDL_assert.c create mode 100644 vendor/sdl-3.0.0/src/SDL_assert_c.h create mode 100644 vendor/sdl-3.0.0/src/SDL_error.c create mode 100644 vendor/sdl-3.0.0/src/SDL_error_c.h create mode 100644 vendor/sdl-3.0.0/src/SDL_guid.c create mode 100644 vendor/sdl-3.0.0/src/SDL_hashtable.c create mode 100644 vendor/sdl-3.0.0/src/SDL_hashtable.h create mode 100644 vendor/sdl-3.0.0/src/SDL_hints.c create mode 100644 vendor/sdl-3.0.0/src/SDL_hints_c.h create mode 100644 vendor/sdl-3.0.0/src/SDL_internal.h create mode 100644 vendor/sdl-3.0.0/src/SDL_list.c create mode 100644 vendor/sdl-3.0.0/src/SDL_list.h create mode 100644 vendor/sdl-3.0.0/src/SDL_log.c create mode 100644 vendor/sdl-3.0.0/src/SDL_log_c.h create mode 100644 vendor/sdl-3.0.0/src/SDL_properties.c create mode 100644 vendor/sdl-3.0.0/src/SDL_properties_c.h create mode 100644 vendor/sdl-3.0.0/src/SDL_utils.c create mode 100644 vendor/sdl-3.0.0/src/SDL_utils_c.h create mode 100644 vendor/sdl-3.0.0/src/atomic/SDL_atomic.c create mode 100644 vendor/sdl-3.0.0/src/atomic/SDL_spinlock.c create mode 100644 vendor/sdl-3.0.0/src/audio/SDL_audio.c create mode 100644 vendor/sdl-3.0.0/src/audio/SDL_audio_c.h create mode 100644 vendor/sdl-3.0.0/src/audio/SDL_audio_channel_converters.h create mode 100644 vendor/sdl-3.0.0/src/audio/SDL_audio_resampler_filter.h create mode 100644 vendor/sdl-3.0.0/src/audio/SDL_audiocvt.c create mode 100644 vendor/sdl-3.0.0/src/audio/SDL_audiodev.c create mode 100644 vendor/sdl-3.0.0/src/audio/SDL_audiodev_c.h create mode 100644 vendor/sdl-3.0.0/src/audio/SDL_audioqueue.c create mode 100644 vendor/sdl-3.0.0/src/audio/SDL_audioqueue.h create mode 100644 vendor/sdl-3.0.0/src/audio/SDL_audioresample.c create mode 100644 vendor/sdl-3.0.0/src/audio/SDL_audioresample.h create mode 100644 vendor/sdl-3.0.0/src/audio/SDL_audiotypecvt.c create mode 100644 vendor/sdl-3.0.0/src/audio/SDL_mixer.c create mode 100644 vendor/sdl-3.0.0/src/audio/SDL_sysaudio.h create mode 100644 vendor/sdl-3.0.0/src/audio/SDL_wave.c create mode 100644 vendor/sdl-3.0.0/src/audio/SDL_wave.h create mode 100644 vendor/sdl-3.0.0/src/audio/aaudio/SDL_aaudio.c create mode 100644 vendor/sdl-3.0.0/src/audio/aaudio/SDL_aaudio.h create mode 100644 vendor/sdl-3.0.0/src/audio/aaudio/SDL_aaudiofuncs.h create mode 100644 vendor/sdl-3.0.0/src/audio/alsa/SDL_alsa_audio.c create mode 100644 vendor/sdl-3.0.0/src/audio/alsa/SDL_alsa_audio.h create mode 100644 vendor/sdl-3.0.0/src/audio/android/SDL_androidaudio.c create mode 100644 vendor/sdl-3.0.0/src/audio/android/SDL_androidaudio.h create mode 100644 vendor/sdl-3.0.0/src/audio/coreaudio/SDL_coreaudio.h create mode 100644 vendor/sdl-3.0.0/src/audio/coreaudio/SDL_coreaudio.m create mode 100644 vendor/sdl-3.0.0/src/audio/directsound/SDL_directsound.c create mode 100644 vendor/sdl-3.0.0/src/audio/directsound/SDL_directsound.h create mode 100644 vendor/sdl-3.0.0/src/audio/disk/SDL_diskaudio.c create mode 100644 vendor/sdl-3.0.0/src/audio/disk/SDL_diskaudio.h create mode 100644 vendor/sdl-3.0.0/src/audio/dsp/SDL_dspaudio.c create mode 100644 vendor/sdl-3.0.0/src/audio/dsp/SDL_dspaudio.h create mode 100644 vendor/sdl-3.0.0/src/audio/dummy/SDL_dummyaudio.c create mode 100644 vendor/sdl-3.0.0/src/audio/dummy/SDL_dummyaudio.h create mode 100644 vendor/sdl-3.0.0/src/audio/emscripten/SDL_emscriptenaudio.c create mode 100644 vendor/sdl-3.0.0/src/audio/emscripten/SDL_emscriptenaudio.h create mode 100644 vendor/sdl-3.0.0/src/audio/haiku/SDL_haikuaudio.cc create mode 100644 vendor/sdl-3.0.0/src/audio/haiku/SDL_haikuaudio.h create mode 100644 vendor/sdl-3.0.0/src/audio/jack/SDL_jackaudio.c create mode 100644 vendor/sdl-3.0.0/src/audio/jack/SDL_jackaudio.h create mode 100644 vendor/sdl-3.0.0/src/audio/n3ds/SDL_n3dsaudio.c create mode 100644 vendor/sdl-3.0.0/src/audio/n3ds/SDL_n3dsaudio.h create mode 100644 vendor/sdl-3.0.0/src/audio/netbsd/SDL_netbsdaudio.c create mode 100644 vendor/sdl-3.0.0/src/audio/netbsd/SDL_netbsdaudio.h create mode 100644 vendor/sdl-3.0.0/src/audio/openslES/SDL_openslES.c create mode 100644 vendor/sdl-3.0.0/src/audio/openslES/SDL_openslES.h create mode 100644 vendor/sdl-3.0.0/src/audio/pipewire/SDL_pipewire.c create mode 100644 vendor/sdl-3.0.0/src/audio/pipewire/SDL_pipewire.h create mode 100644 vendor/sdl-3.0.0/src/audio/ps2/SDL_ps2audio.c create mode 100644 vendor/sdl-3.0.0/src/audio/ps2/SDL_ps2audio.h create mode 100644 vendor/sdl-3.0.0/src/audio/psp/SDL_pspaudio.c create mode 100644 vendor/sdl-3.0.0/src/audio/psp/SDL_pspaudio.h create mode 100644 vendor/sdl-3.0.0/src/audio/pulseaudio/SDL_pulseaudio.c create mode 100644 vendor/sdl-3.0.0/src/audio/pulseaudio/SDL_pulseaudio.h create mode 100644 vendor/sdl-3.0.0/src/audio/qnx/SDL_qsa_audio.c create mode 100644 vendor/sdl-3.0.0/src/audio/qnx/SDL_qsa_audio.h create mode 100644 vendor/sdl-3.0.0/src/audio/sndio/SDL_sndioaudio.c create mode 100644 vendor/sdl-3.0.0/src/audio/sndio/SDL_sndioaudio.h create mode 100644 vendor/sdl-3.0.0/src/audio/vita/SDL_vitaaudio.c create mode 100644 vendor/sdl-3.0.0/src/audio/vita/SDL_vitaaudio.h create mode 100644 vendor/sdl-3.0.0/src/audio/wasapi/SDL_wasapi.c create mode 100644 vendor/sdl-3.0.0/src/audio/wasapi/SDL_wasapi.h create mode 100644 vendor/sdl-3.0.0/src/audio/wasapi/SDL_wasapi_win32.c create mode 100644 vendor/sdl-3.0.0/src/audio/wasapi/SDL_wasapi_winrt.cpp create mode 100644 vendor/sdl-3.0.0/src/core/SDL_core_unsupported.c create mode 100644 vendor/sdl-3.0.0/src/core/SDL_runapp.c create mode 100644 vendor/sdl-3.0.0/src/core/android/SDL_android.c create mode 100644 vendor/sdl-3.0.0/src/core/android/SDL_android.h create mode 100644 vendor/sdl-3.0.0/src/core/freebsd/SDL_evdev_kbd_default_keyaccmap.h create mode 100644 vendor/sdl-3.0.0/src/core/freebsd/SDL_evdev_kbd_freebsd.c create mode 100644 vendor/sdl-3.0.0/src/core/gdk/SDL_gdk.cpp create mode 100644 vendor/sdl-3.0.0/src/core/gdk/SDL_gdk.h create mode 100644 vendor/sdl-3.0.0/src/core/haiku/SDL_BApp.h create mode 100644 vendor/sdl-3.0.0/src/core/haiku/SDL_BeApp.cc create mode 100644 vendor/sdl-3.0.0/src/core/haiku/SDL_BeApp.h create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_dbus.c create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_dbus.h create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_evdev.c create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_evdev.h create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_evdev_capabilities.c create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_evdev_capabilities.h create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_evdev_kbd.c create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_evdev_kbd.h create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_evdev_kbd_default_accents.h create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_evdev_kbd_default_keymap.h create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_fcitx.c create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_fcitx.h create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_ibus.c create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_ibus.h create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_ime.c create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_ime.h create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_sandbox.c create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_sandbox.h create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_system_theme.c create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_system_theme.h create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_threadprio.c create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_udev.c create mode 100644 vendor/sdl-3.0.0/src/core/linux/SDL_udev.h create mode 100644 vendor/sdl-3.0.0/src/core/n3ds/SDL_n3ds.c create mode 100644 vendor/sdl-3.0.0/src/core/ngage/SDL_ngage_runapp.cpp create mode 100644 vendor/sdl-3.0.0/src/core/openbsd/SDL_wscons.h create mode 100644 vendor/sdl-3.0.0/src/core/openbsd/SDL_wscons_kbd.c create mode 100644 vendor/sdl-3.0.0/src/core/openbsd/SDL_wscons_mouse.c create mode 100644 vendor/sdl-3.0.0/src/core/ps2/SDL_ps2.c create mode 100644 vendor/sdl-3.0.0/src/core/psp/SDL_psp.c create mode 100644 vendor/sdl-3.0.0/src/core/unix/SDL_appid.c create mode 100644 vendor/sdl-3.0.0/src/core/unix/SDL_appid.h create mode 100644 vendor/sdl-3.0.0/src/core/unix/SDL_poll.c create mode 100644 vendor/sdl-3.0.0/src/core/unix/SDL_poll.h create mode 100644 vendor/sdl-3.0.0/src/core/windows/SDL_directx.h create mode 100644 vendor/sdl-3.0.0/src/core/windows/SDL_hid.c create mode 100644 vendor/sdl-3.0.0/src/core/windows/SDL_hid.h create mode 100644 vendor/sdl-3.0.0/src/core/windows/SDL_immdevice.c create mode 100644 vendor/sdl-3.0.0/src/core/windows/SDL_immdevice.h create mode 100644 vendor/sdl-3.0.0/src/core/windows/SDL_windows.c create mode 100644 vendor/sdl-3.0.0/src/core/windows/SDL_windows.h create mode 100644 vendor/sdl-3.0.0/src/core/windows/SDL_xinput.c create mode 100644 vendor/sdl-3.0.0/src/core/windows/SDL_xinput.h create mode 100644 vendor/sdl-3.0.0/src/core/windows/pch.c create mode 100644 vendor/sdl-3.0.0/src/core/windows/pch_cpp.cpp create mode 100644 vendor/sdl-3.0.0/src/core/windows/version.rc create mode 100644 vendor/sdl-3.0.0/src/core/winrt/SDL_winrtapp_common.cpp create mode 100644 vendor/sdl-3.0.0/src/core/winrt/SDL_winrtapp_common.h create mode 100644 vendor/sdl-3.0.0/src/core/winrt/SDL_winrtapp_direct3d.cpp create mode 100644 vendor/sdl-3.0.0/src/core/winrt/SDL_winrtapp_direct3d.h create mode 100644 vendor/sdl-3.0.0/src/core/winrt/SDL_winrtapp_xaml.cpp create mode 100644 vendor/sdl-3.0.0/src/core/winrt/SDL_winrtapp_xaml.h create mode 100644 vendor/sdl-3.0.0/src/cpuinfo/SDL_cpuinfo.c create mode 100644 vendor/sdl-3.0.0/src/dynapi/SDL_dynapi.c create mode 100644 vendor/sdl-3.0.0/src/dynapi/SDL_dynapi.h create mode 100644 vendor/sdl-3.0.0/src/dynapi/SDL_dynapi.sym create mode 100644 vendor/sdl-3.0.0/src/dynapi/SDL_dynapi_overrides.h create mode 100644 vendor/sdl-3.0.0/src/dynapi/SDL_dynapi_procs.h create mode 100644 vendor/sdl-3.0.0/src/dynapi/SDL_dynapi_unsupported.h create mode 100644 vendor/sdl-3.0.0/src/dynapi/gendynapi.py create mode 100644 vendor/sdl-3.0.0/src/events/SDL_clipboardevents.c create mode 100644 vendor/sdl-3.0.0/src/events/SDL_clipboardevents_c.h create mode 100644 vendor/sdl-3.0.0/src/events/SDL_displayevents.c create mode 100644 vendor/sdl-3.0.0/src/events/SDL_displayevents_c.h create mode 100644 vendor/sdl-3.0.0/src/events/SDL_dropevents.c create mode 100644 vendor/sdl-3.0.0/src/events/SDL_dropevents_c.h create mode 100644 vendor/sdl-3.0.0/src/events/SDL_events.c create mode 100644 vendor/sdl-3.0.0/src/events/SDL_events_c.h create mode 100644 vendor/sdl-3.0.0/src/events/SDL_keyboard.c create mode 100644 vendor/sdl-3.0.0/src/events/SDL_keyboard_c.h create mode 100644 vendor/sdl-3.0.0/src/events/SDL_keysym_to_scancode.c create mode 100644 vendor/sdl-3.0.0/src/events/SDL_keysym_to_scancode_c.h create mode 100644 vendor/sdl-3.0.0/src/events/SDL_mouse.c create mode 100644 vendor/sdl-3.0.0/src/events/SDL_mouse_c.h create mode 100644 vendor/sdl-3.0.0/src/events/SDL_quit.c create mode 100644 vendor/sdl-3.0.0/src/events/SDL_scancode_tables.c create mode 100644 vendor/sdl-3.0.0/src/events/SDL_scancode_tables_c.h create mode 100644 vendor/sdl-3.0.0/src/events/SDL_touch.c create mode 100644 vendor/sdl-3.0.0/src/events/SDL_touch_c.h create mode 100644 vendor/sdl-3.0.0/src/events/SDL_windowevents.c create mode 100644 vendor/sdl-3.0.0/src/events/SDL_windowevents_c.h create mode 100644 vendor/sdl-3.0.0/src/events/blank_cursor.h create mode 100644 vendor/sdl-3.0.0/src/events/default_cursor.h create mode 100644 vendor/sdl-3.0.0/src/events/imKStoUCS.c create mode 100644 vendor/sdl-3.0.0/src/events/imKStoUCS.h create mode 100644 vendor/sdl-3.0.0/src/events/scancodes_ascii.h create mode 100644 vendor/sdl-3.0.0/src/events/scancodes_darwin.h create mode 100644 vendor/sdl-3.0.0/src/events/scancodes_linux.h create mode 100644 vendor/sdl-3.0.0/src/events/scancodes_windows.h create mode 100644 vendor/sdl-3.0.0/src/events/scancodes_xfree86.h create mode 100644 vendor/sdl-3.0.0/src/file/SDL_rwops.c create mode 100644 vendor/sdl-3.0.0/src/file/cocoa/SDL_rwopsbundlesupport.h create mode 100644 vendor/sdl-3.0.0/src/file/cocoa/SDL_rwopsbundlesupport.m create mode 100644 vendor/sdl-3.0.0/src/file/n3ds/SDL_rwopsromfs.c create mode 100644 vendor/sdl-3.0.0/src/file/n3ds/SDL_rwopsromfs.h create mode 100644 vendor/sdl-3.0.0/src/filesystem/android/SDL_sysfilesystem.c create mode 100644 vendor/sdl-3.0.0/src/filesystem/cocoa/SDL_sysfilesystem.m create mode 100644 vendor/sdl-3.0.0/src/filesystem/dummy/SDL_sysfilesystem.c create mode 100644 vendor/sdl-3.0.0/src/filesystem/emscripten/SDL_sysfilesystem.c create mode 100644 vendor/sdl-3.0.0/src/filesystem/gdk/SDL_sysfilesystem.cpp create mode 100644 vendor/sdl-3.0.0/src/filesystem/haiku/SDL_sysfilesystem.cc create mode 100644 vendor/sdl-3.0.0/src/filesystem/n3ds/SDL_sysfilesystem.c create mode 100644 vendor/sdl-3.0.0/src/filesystem/ps2/SDL_sysfilesystem.c create mode 100644 vendor/sdl-3.0.0/src/filesystem/psp/SDL_sysfilesystem.c create mode 100644 vendor/sdl-3.0.0/src/filesystem/riscos/SDL_sysfilesystem.c create mode 100644 vendor/sdl-3.0.0/src/filesystem/unix/SDL_sysfilesystem.c create mode 100644 vendor/sdl-3.0.0/src/filesystem/vita/SDL_sysfilesystem.c create mode 100644 vendor/sdl-3.0.0/src/filesystem/windows/SDL_sysfilesystem.c create mode 100644 vendor/sdl-3.0.0/src/filesystem/winrt/SDL_sysfilesystem.cpp create mode 100644 vendor/sdl-3.0.0/src/haptic/SDL_haptic.c create mode 100644 vendor/sdl-3.0.0/src/haptic/SDL_haptic_c.h create mode 100644 vendor/sdl-3.0.0/src/haptic/SDL_syshaptic.h create mode 100644 vendor/sdl-3.0.0/src/haptic/android/SDL_syshaptic.c create mode 100644 vendor/sdl-3.0.0/src/haptic/android/SDL_syshaptic_c.h create mode 100644 vendor/sdl-3.0.0/src/haptic/darwin/SDL_syshaptic.c create mode 100644 vendor/sdl-3.0.0/src/haptic/darwin/SDL_syshaptic_c.h create mode 100644 vendor/sdl-3.0.0/src/haptic/dummy/SDL_syshaptic.c create mode 100644 vendor/sdl-3.0.0/src/haptic/linux/SDL_syshaptic.c create mode 100644 vendor/sdl-3.0.0/src/haptic/windows/SDL_dinputhaptic.c create mode 100644 vendor/sdl-3.0.0/src/haptic/windows/SDL_dinputhaptic_c.h create mode 100644 vendor/sdl-3.0.0/src/haptic/windows/SDL_windowshaptic.c create mode 100644 vendor/sdl-3.0.0/src/haptic/windows/SDL_windowshaptic_c.h create mode 100644 vendor/sdl-3.0.0/src/haptic/windows/SDL_xinputhaptic.c create mode 100644 vendor/sdl-3.0.0/src/haptic/windows/SDL_xinputhaptic_c.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/AUTHORS.txt create mode 100644 vendor/sdl-3.0.0/src/hidapi/BUILD.autotools.md create mode 100644 vendor/sdl-3.0.0/src/hidapi/BUILD.cmake.md create mode 100644 vendor/sdl-3.0.0/src/hidapi/BUILD.md create mode 100644 vendor/sdl-3.0.0/src/hidapi/CMakeLists.txt create mode 100644 vendor/sdl-3.0.0/src/hidapi/HACKING.txt create mode 100644 vendor/sdl-3.0.0/src/hidapi/LICENSE-bsd.txt create mode 100644 vendor/sdl-3.0.0/src/hidapi/LICENSE-gpl3.txt create mode 100644 vendor/sdl-3.0.0/src/hidapi/LICENSE-orig.txt create mode 100644 vendor/sdl-3.0.0/src/hidapi/LICENSE.txt create mode 100644 vendor/sdl-3.0.0/src/hidapi/Makefile.am create mode 100644 vendor/sdl-3.0.0/src/hidapi/README.md create mode 100644 vendor/sdl-3.0.0/src/hidapi/SDL_hidapi.c create mode 100644 vendor/sdl-3.0.0/src/hidapi/SDL_hidapi_android.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/SDL_hidapi_c.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/SDL_hidapi_ios.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/SDL_hidapi_libusb.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/SDL_hidapi_linux.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/SDL_hidapi_mac.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/SDL_hidapi_steamxbox.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/SDL_hidapi_windows.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/VERSION create mode 100644 vendor/sdl-3.0.0/src/hidapi/android/hid.cpp create mode 100644 vendor/sdl-3.0.0/src/hidapi/android/hid.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/bootstrap create mode 100644 vendor/sdl-3.0.0/src/hidapi/configure.ac create mode 100644 vendor/sdl-3.0.0/src/hidapi/dist/hidapi.podspec create mode 100644 vendor/sdl-3.0.0/src/hidapi/documentation/cmake-gui-drop-down.png create mode 100644 vendor/sdl-3.0.0/src/hidapi/documentation/cmake-gui-highlights.png create mode 100644 vendor/sdl-3.0.0/src/hidapi/doxygen/Doxyfile create mode 100644 vendor/sdl-3.0.0/src/hidapi/doxygen/main_page.md create mode 100644 vendor/sdl-3.0.0/src/hidapi/hidapi/hidapi.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/hidtest/CMakeLists.txt create mode 100644 vendor/sdl-3.0.0/src/hidapi/hidtest/Makefile.am create mode 100644 vendor/sdl-3.0.0/src/hidapi/hidtest/test.c create mode 100644 vendor/sdl-3.0.0/src/hidapi/ios/hid.m create mode 100644 vendor/sdl-3.0.0/src/hidapi/libusb/CMakeLists.txt create mode 100644 vendor/sdl-3.0.0/src/hidapi/libusb/Makefile-manual create mode 100644 vendor/sdl-3.0.0/src/hidapi/libusb/Makefile.am create mode 100644 vendor/sdl-3.0.0/src/hidapi/libusb/Makefile.freebsd create mode 100644 vendor/sdl-3.0.0/src/hidapi/libusb/Makefile.haiku create mode 100644 vendor/sdl-3.0.0/src/hidapi/libusb/Makefile.linux create mode 100644 vendor/sdl-3.0.0/src/hidapi/libusb/hid.c create mode 100644 vendor/sdl-3.0.0/src/hidapi/libusb/hidapi_libusb.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/libusb/hidapi_thread_pthread.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/libusb/hidapi_thread_sdl.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/linux/CMakeLists.txt create mode 100644 vendor/sdl-3.0.0/src/hidapi/linux/Makefile-manual create mode 100644 vendor/sdl-3.0.0/src/hidapi/linux/Makefile.am create mode 100644 vendor/sdl-3.0.0/src/hidapi/linux/hid.c create mode 100644 vendor/sdl-3.0.0/src/hidapi/m4/ax_pthread.m4 create mode 100644 vendor/sdl-3.0.0/src/hidapi/m4/pkg.m4 create mode 100644 vendor/sdl-3.0.0/src/hidapi/mac/CMakeLists.txt create mode 100644 vendor/sdl-3.0.0/src/hidapi/mac/Makefile-manual create mode 100644 vendor/sdl-3.0.0/src/hidapi/mac/Makefile.am create mode 100644 vendor/sdl-3.0.0/src/hidapi/mac/hid.c create mode 100644 vendor/sdl-3.0.0/src/hidapi/mac/hidapi_darwin.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/meson.build create mode 100644 vendor/sdl-3.0.0/src/hidapi/pc/hidapi-hidraw.pc.in create mode 100644 vendor/sdl-3.0.0/src/hidapi/pc/hidapi-libusb.pc.in create mode 100644 vendor/sdl-3.0.0/src/hidapi/pc/hidapi.pc.in create mode 100644 vendor/sdl-3.0.0/src/hidapi/src/CMakeLists.txt create mode 100644 vendor/sdl-3.0.0/src/hidapi/src/cmake/hidapi-config.cmake.in create mode 100644 vendor/sdl-3.0.0/src/hidapi/subprojects/README.md create mode 100644 vendor/sdl-3.0.0/src/hidapi/subprojects/hidapi_build_cmake/CMakeLists.txt create mode 100644 vendor/sdl-3.0.0/src/hidapi/testgui/Makefile-manual create mode 100644 vendor/sdl-3.0.0/src/hidapi/testgui/Makefile.am create mode 100644 vendor/sdl-3.0.0/src/hidapi/testgui/Makefile.freebsd create mode 100644 vendor/sdl-3.0.0/src/hidapi/testgui/Makefile.linux create mode 100644 vendor/sdl-3.0.0/src/hidapi/testgui/Makefile.mac create mode 100644 vendor/sdl-3.0.0/src/hidapi/testgui/Makefile.mingw create mode 100644 vendor/sdl-3.0.0/src/hidapi/testgui/TestGUI.app.in/Contents/Info.plist create mode 100644 vendor/sdl-3.0.0/src/hidapi/testgui/TestGUI.app.in/Contents/PkgInfo create mode 100644 vendor/sdl-3.0.0/src/hidapi/testgui/TestGUI.app.in/Contents/Resources/English.lproj/InfoPlist.strings create mode 100644 vendor/sdl-3.0.0/src/hidapi/testgui/TestGUI.app.in/Contents/Resources/Signal11.icns create mode 100644 vendor/sdl-3.0.0/src/hidapi/testgui/copy_to_bundle.sh create mode 100644 vendor/sdl-3.0.0/src/hidapi/testgui/mac_support.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/testgui/mac_support_cocoa.m create mode 100644 vendor/sdl-3.0.0/src/hidapi/testgui/test.cpp create mode 100644 vendor/sdl-3.0.0/src/hidapi/testgui/testgui.sln create mode 100644 vendor/sdl-3.0.0/src/hidapi/testgui/testgui.vcproj create mode 100644 vendor/sdl-3.0.0/src/hidapi/udev/69-hid.rules create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/CMakeLists.txt create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/Makefile-manual create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/Makefile.am create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/Makefile.mingw create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/hid.c create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/hidapi.rc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/hidapi.sln create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/hidapi.vcproj create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/hidapi.vcxproj create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/hidapi_cfgmgr32.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/hidapi_descriptor_reconstruct.c create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/hidapi_descriptor_reconstruct.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/hidapi_hidclass.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/hidapi_hidpi.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/hidapi_hidsdi.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/hidapi_winapi.h create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/hidtest.vcproj create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/hidtest.vcxproj create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/pp_data_dump/CMakeLists.txt create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/pp_data_dump/README.md create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/pp_data_dump/pp_data_dump.c create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/CMakeLists.txt create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/045E_02FF_0005_0001.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/045E_02FF_0005_0001_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/045E_02FF_0005_0001_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046A_0011_0006_0001.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046A_0011_0006_0001_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046A_0011_0006_0001_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_0A37_0001_000C.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_0A37_0001_000C_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_0A37_0001_000C_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_B010_0001_000C.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_B010_0001_000C_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_B010_0001_000C_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_B010_0001_FF00.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_B010_0001_FF00_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_B010_0001_FF00_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_B010_0002_0001.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_B010_0002_0001_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_B010_0002_0001_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_B010_0002_FF00.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_B010_0002_FF00_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_B010_0002_FF00_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_B010_0006_0001.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_B010_0006_0001_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_B010_0006_0001_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C077_0002_0001.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C077_0002_0001_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C077_0002_0001_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C283_0004_0001.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C283_0004_0001_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C283_0004_0001_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C52F_0001_000C.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C52F_0001_000C_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C52F_0001_000C_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C52F_0001_FF00.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C52F_0001_FF00_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C52F_0001_FF00_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C52F_0002_0001.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C52F_0002_0001_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C52F_0002_0001_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C52F_0002_FF00.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C52F_0002_FF00_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C52F_0002_FF00_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0001_000C.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0001_000C_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0001_000C_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0001_FF00.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0001_FF00_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0001_FF00_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0002_0001.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0002_0001_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0002_0001_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0002_FF00.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0002_FF00_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0002_FF00_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0006_0001.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0006_0001_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0006_0001_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0080_0001.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0080_0001_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/046D_C534_0080_0001_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/047F_C056_0001_000C.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/047F_C056_0001_000C_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/047F_C056_0001_000C_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/047F_C056_0003_FFA0.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/047F_C056_0003_FFA0_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/047F_C056_0003_FFA0_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/047F_C056_0005_000B.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/047F_C056_0005_000B_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/047F_C056_0005_000B_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/17CC_1130_0000_FF01.pp_data create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/17CC_1130_0000_FF01_expected.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/data/17CC_1130_0000_FF01_real.rpt_desc create mode 100644 vendor/sdl-3.0.0/src/hidapi/windows/test/hid_report_reconstructor_test.c create mode 100644 vendor/sdl-3.0.0/src/joystick/SDL_gamepad.c create mode 100644 vendor/sdl-3.0.0/src/joystick/SDL_gamepad_c.h create mode 100644 vendor/sdl-3.0.0/src/joystick/SDL_gamepad_db.h create mode 100644 vendor/sdl-3.0.0/src/joystick/SDL_joystick.c create mode 100644 vendor/sdl-3.0.0/src/joystick/SDL_joystick_c.h create mode 100644 vendor/sdl-3.0.0/src/joystick/SDL_sysjoystick.h create mode 100644 vendor/sdl-3.0.0/src/joystick/android/SDL_sysjoystick.c create mode 100644 vendor/sdl-3.0.0/src/joystick/android/SDL_sysjoystick_c.h create mode 100644 vendor/sdl-3.0.0/src/joystick/apple/SDL_mfijoystick.m create mode 100644 vendor/sdl-3.0.0/src/joystick/apple/SDL_mfijoystick_c.h create mode 100644 vendor/sdl-3.0.0/src/joystick/bsd/SDL_bsdjoystick.c create mode 100644 vendor/sdl-3.0.0/src/joystick/check_8bitdo.sh create mode 100644 vendor/sdl-3.0.0/src/joystick/controller_list.h create mode 100644 vendor/sdl-3.0.0/src/joystick/controller_type.c create mode 100644 vendor/sdl-3.0.0/src/joystick/controller_type.h create mode 100644 vendor/sdl-3.0.0/src/joystick/darwin/SDL_iokitjoystick.c create mode 100644 vendor/sdl-3.0.0/src/joystick/darwin/SDL_iokitjoystick_c.h create mode 100644 vendor/sdl-3.0.0/src/joystick/dummy/SDL_sysjoystick.c create mode 100644 vendor/sdl-3.0.0/src/joystick/emscripten/SDL_sysjoystick.c create mode 100644 vendor/sdl-3.0.0/src/joystick/emscripten/SDL_sysjoystick_c.h create mode 100644 vendor/sdl-3.0.0/src/joystick/haiku/SDL_haikujoystick.cc create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapi_combined.c create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapi_gamecube.c create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapi_luna.c create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapi_nintendo.h create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapi_ps3.c create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapi_ps4.c create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapi_ps5.c create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapi_rumble.c create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapi_rumble.h create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapi_shield.c create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapi_stadia.c create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapi_steam.c create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapi_switch.c create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapi_wii.c create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapi_xbox360.c create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapi_xbox360w.c create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapi_xboxone.c create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapijoystick.c create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/SDL_hidapijoystick_c.h create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/steam/controller_constants.h create mode 100644 vendor/sdl-3.0.0/src/joystick/hidapi/steam/controller_structs.h create mode 100644 vendor/sdl-3.0.0/src/joystick/linux/SDL_sysjoystick.c create mode 100644 vendor/sdl-3.0.0/src/joystick/linux/SDL_sysjoystick_c.h create mode 100644 vendor/sdl-3.0.0/src/joystick/n3ds/SDL_sysjoystick.c create mode 100644 vendor/sdl-3.0.0/src/joystick/ps2/SDL_sysjoystick.c create mode 100644 vendor/sdl-3.0.0/src/joystick/psp/SDL_sysjoystick.c create mode 100644 vendor/sdl-3.0.0/src/joystick/sort_controllers.py create mode 100644 vendor/sdl-3.0.0/src/joystick/steam/SDL_steamcontroller.c create mode 100644 vendor/sdl-3.0.0/src/joystick/steam/SDL_steamcontroller.h create mode 100644 vendor/sdl-3.0.0/src/joystick/usb_ids.h create mode 100644 vendor/sdl-3.0.0/src/joystick/virtual/SDL_virtualjoystick.c create mode 100644 vendor/sdl-3.0.0/src/joystick/virtual/SDL_virtualjoystick_c.h create mode 100644 vendor/sdl-3.0.0/src/joystick/vita/SDL_sysjoystick.c create mode 100644 vendor/sdl-3.0.0/src/joystick/windows/SDL_dinputjoystick.c create mode 100644 vendor/sdl-3.0.0/src/joystick/windows/SDL_dinputjoystick_c.h create mode 100644 vendor/sdl-3.0.0/src/joystick/windows/SDL_rawinputjoystick.c create mode 100644 vendor/sdl-3.0.0/src/joystick/windows/SDL_rawinputjoystick_c.h create mode 100644 vendor/sdl-3.0.0/src/joystick/windows/SDL_windows_gaming_input.c create mode 100644 vendor/sdl-3.0.0/src/joystick/windows/SDL_windowsjoystick.c create mode 100644 vendor/sdl-3.0.0/src/joystick/windows/SDL_windowsjoystick_c.h create mode 100644 vendor/sdl-3.0.0/src/joystick/windows/SDL_xinputjoystick.c create mode 100644 vendor/sdl-3.0.0/src/joystick/windows/SDL_xinputjoystick_c.h create mode 100644 vendor/sdl-3.0.0/src/libm/e_atan2.c create mode 100644 vendor/sdl-3.0.0/src/libm/e_exp.c create mode 100644 vendor/sdl-3.0.0/src/libm/e_fmod.c create mode 100644 vendor/sdl-3.0.0/src/libm/e_log.c create mode 100644 vendor/sdl-3.0.0/src/libm/e_log10.c create mode 100644 vendor/sdl-3.0.0/src/libm/e_pow.c create mode 100644 vendor/sdl-3.0.0/src/libm/e_rem_pio2.c create mode 100644 vendor/sdl-3.0.0/src/libm/e_sqrt.c create mode 100644 vendor/sdl-3.0.0/src/libm/k_cos.c create mode 100644 vendor/sdl-3.0.0/src/libm/k_rem_pio2.c create mode 100644 vendor/sdl-3.0.0/src/libm/k_sin.c create mode 100644 vendor/sdl-3.0.0/src/libm/k_tan.c create mode 100644 vendor/sdl-3.0.0/src/libm/math_libm.h create mode 100644 vendor/sdl-3.0.0/src/libm/math_private.h create mode 100644 vendor/sdl-3.0.0/src/libm/s_atan.c create mode 100644 vendor/sdl-3.0.0/src/libm/s_copysign.c create mode 100644 vendor/sdl-3.0.0/src/libm/s_cos.c create mode 100644 vendor/sdl-3.0.0/src/libm/s_fabs.c create mode 100644 vendor/sdl-3.0.0/src/libm/s_floor.c create mode 100644 vendor/sdl-3.0.0/src/libm/s_modf.c create mode 100644 vendor/sdl-3.0.0/src/libm/s_scalbn.c create mode 100644 vendor/sdl-3.0.0/src/libm/s_sin.c create mode 100644 vendor/sdl-3.0.0/src/libm/s_tan.c create mode 100644 vendor/sdl-3.0.0/src/loadso/dlopen/SDL_sysloadso.c create mode 100644 vendor/sdl-3.0.0/src/loadso/dummy/SDL_sysloadso.c create mode 100644 vendor/sdl-3.0.0/src/loadso/windows/SDL_sysloadso.c create mode 100644 vendor/sdl-3.0.0/src/locale/SDL_locale.c create mode 100644 vendor/sdl-3.0.0/src/locale/SDL_syslocale.h create mode 100644 vendor/sdl-3.0.0/src/locale/android/SDL_syslocale.c create mode 100644 vendor/sdl-3.0.0/src/locale/dummy/SDL_syslocale.c create mode 100644 vendor/sdl-3.0.0/src/locale/emscripten/SDL_syslocale.c create mode 100644 vendor/sdl-3.0.0/src/locale/haiku/SDL_syslocale.cc create mode 100644 vendor/sdl-3.0.0/src/locale/macos/SDL_syslocale.m create mode 100644 vendor/sdl-3.0.0/src/locale/n3ds/SDL_syslocale.c create mode 100644 vendor/sdl-3.0.0/src/locale/unix/SDL_syslocale.c create mode 100644 vendor/sdl-3.0.0/src/locale/vita/SDL_syslocale.c create mode 100644 vendor/sdl-3.0.0/src/locale/windows/SDL_syslocale.c create mode 100644 vendor/sdl-3.0.0/src/locale/winrt/SDL_syslocale.c create mode 100644 vendor/sdl-3.0.0/src/main/winrt/SDL3-WinRTResource_BlankCursor.cur create mode 100644 vendor/sdl-3.0.0/src/main/winrt/SDL3-WinRTResources.rc create mode 100644 vendor/sdl-3.0.0/src/misc/SDL_sysurl.h create mode 100644 vendor/sdl-3.0.0/src/misc/SDL_url.c create mode 100644 vendor/sdl-3.0.0/src/misc/android/SDL_sysurl.c create mode 100644 vendor/sdl-3.0.0/src/misc/dummy/SDL_sysurl.c create mode 100644 vendor/sdl-3.0.0/src/misc/emscripten/SDL_sysurl.c create mode 100644 vendor/sdl-3.0.0/src/misc/haiku/SDL_sysurl.cc create mode 100644 vendor/sdl-3.0.0/src/misc/ios/SDL_sysurl.m create mode 100644 vendor/sdl-3.0.0/src/misc/macos/SDL_sysurl.m create mode 100644 vendor/sdl-3.0.0/src/misc/riscos/SDL_sysurl.c create mode 100644 vendor/sdl-3.0.0/src/misc/unix/SDL_sysurl.c create mode 100644 vendor/sdl-3.0.0/src/misc/vita/SDL_sysurl.c create mode 100644 vendor/sdl-3.0.0/src/misc/windows/SDL_sysurl.c create mode 100644 vendor/sdl-3.0.0/src/misc/winrt/SDL_sysurl.cpp create mode 100644 vendor/sdl-3.0.0/src/power/SDL_power.c create mode 100644 vendor/sdl-3.0.0/src/power/SDL_syspower.h create mode 100644 vendor/sdl-3.0.0/src/power/android/SDL_syspower.c create mode 100644 vendor/sdl-3.0.0/src/power/emscripten/SDL_syspower.c create mode 100644 vendor/sdl-3.0.0/src/power/haiku/SDL_syspower.c create mode 100644 vendor/sdl-3.0.0/src/power/linux/SDL_syspower.c create mode 100644 vendor/sdl-3.0.0/src/power/macos/SDL_syspower.c create mode 100644 vendor/sdl-3.0.0/src/power/n3ds/SDL_syspower.c create mode 100644 vendor/sdl-3.0.0/src/power/psp/SDL_syspower.c create mode 100644 vendor/sdl-3.0.0/src/power/uikit/SDL_syspower.h create mode 100644 vendor/sdl-3.0.0/src/power/uikit/SDL_syspower.m create mode 100644 vendor/sdl-3.0.0/src/power/vita/SDL_syspower.c create mode 100644 vendor/sdl-3.0.0/src/power/windows/SDL_syspower.c create mode 100644 vendor/sdl-3.0.0/src/power/winrt/SDL_syspower.cpp create mode 100644 vendor/sdl-3.0.0/src/render/SDL_d3dmath.c create mode 100644 vendor/sdl-3.0.0/src/render/SDL_d3dmath.h create mode 100644 vendor/sdl-3.0.0/src/render/SDL_render.c create mode 100644 vendor/sdl-3.0.0/src/render/SDL_render_unsupported.c create mode 100644 vendor/sdl-3.0.0/src/render/SDL_sysrender.h create mode 100644 vendor/sdl-3.0.0/src/render/SDL_yuv_sw.c create mode 100644 vendor/sdl-3.0.0/src/render/SDL_yuv_sw_c.h create mode 100644 vendor/sdl-3.0.0/src/render/direct3d/SDL_render_d3d.c create mode 100644 vendor/sdl-3.0.0/src/render/direct3d/SDL_shaders_d3d.c create mode 100644 vendor/sdl-3.0.0/src/render/direct3d/SDL_shaders_d3d.h create mode 100644 vendor/sdl-3.0.0/src/render/direct3d11/SDL_render_d3d11.c create mode 100644 vendor/sdl-3.0.0/src/render/direct3d11/SDL_render_winrt.cpp create mode 100644 vendor/sdl-3.0.0/src/render/direct3d11/SDL_render_winrt.h create mode 100644 vendor/sdl-3.0.0/src/render/direct3d11/SDL_shaders_d3d11.c create mode 100644 vendor/sdl-3.0.0/src/render/direct3d11/SDL_shaders_d3d11.h create mode 100644 vendor/sdl-3.0.0/src/render/direct3d12/SDL_render_d3d12.c create mode 100644 vendor/sdl-3.0.0/src/render/direct3d12/SDL_render_d3d12_xbox.cpp create mode 100644 vendor/sdl-3.0.0/src/render/direct3d12/SDL_render_d3d12_xbox.h create mode 100644 vendor/sdl-3.0.0/src/render/direct3d12/SDL_shaders_d3d12.c create mode 100644 vendor/sdl-3.0.0/src/render/direct3d12/SDL_shaders_d3d12.h create mode 100644 vendor/sdl-3.0.0/src/render/direct3d12/SDL_shaders_d3d12_xboxone.cpp create mode 100644 vendor/sdl-3.0.0/src/render/direct3d12/SDL_shaders_d3d12_xboxseries.cpp create mode 100644 vendor/sdl-3.0.0/src/render/metal/SDL_render_metal.m create mode 100644 vendor/sdl-3.0.0/src/render/metal/SDL_shaders_metal.metal create mode 100644 vendor/sdl-3.0.0/src/render/metal/SDL_shaders_metal_ios.h create mode 100644 vendor/sdl-3.0.0/src/render/metal/SDL_shaders_metal_iphonesimulator.h create mode 100644 vendor/sdl-3.0.0/src/render/metal/SDL_shaders_metal_macos.h create mode 100644 vendor/sdl-3.0.0/src/render/metal/SDL_shaders_metal_tvos.h create mode 100644 vendor/sdl-3.0.0/src/render/metal/SDL_shaders_metal_tvsimulator.h create mode 100644 vendor/sdl-3.0.0/src/render/metal/build-metal-shaders.sh create mode 100644 vendor/sdl-3.0.0/src/render/opengl/SDL_glfuncs.h create mode 100644 vendor/sdl-3.0.0/src/render/opengl/SDL_render_gl.c create mode 100644 vendor/sdl-3.0.0/src/render/opengl/SDL_shaders_gl.c create mode 100644 vendor/sdl-3.0.0/src/render/opengl/SDL_shaders_gl.h create mode 100644 vendor/sdl-3.0.0/src/render/opengles2/SDL_gles2funcs.h create mode 100644 vendor/sdl-3.0.0/src/render/opengles2/SDL_render_gles2.c create mode 100644 vendor/sdl-3.0.0/src/render/opengles2/SDL_shaders_gles2.c create mode 100644 vendor/sdl-3.0.0/src/render/opengles2/SDL_shaders_gles2.h create mode 100644 vendor/sdl-3.0.0/src/render/ps2/SDL_render_ps2.c create mode 100644 vendor/sdl-3.0.0/src/render/psp/SDL_render_psp.c create mode 100644 vendor/sdl-3.0.0/src/render/software/SDL_blendfillrect.c create mode 100644 vendor/sdl-3.0.0/src/render/software/SDL_blendfillrect.h create mode 100644 vendor/sdl-3.0.0/src/render/software/SDL_blendline.c create mode 100644 vendor/sdl-3.0.0/src/render/software/SDL_blendline.h create mode 100644 vendor/sdl-3.0.0/src/render/software/SDL_blendpoint.c create mode 100644 vendor/sdl-3.0.0/src/render/software/SDL_blendpoint.h create mode 100644 vendor/sdl-3.0.0/src/render/software/SDL_draw.h create mode 100644 vendor/sdl-3.0.0/src/render/software/SDL_drawline.c create mode 100644 vendor/sdl-3.0.0/src/render/software/SDL_drawline.h create mode 100644 vendor/sdl-3.0.0/src/render/software/SDL_drawpoint.c create mode 100644 vendor/sdl-3.0.0/src/render/software/SDL_drawpoint.h create mode 100644 vendor/sdl-3.0.0/src/render/software/SDL_render_sw.c create mode 100644 vendor/sdl-3.0.0/src/render/software/SDL_render_sw_c.h create mode 100644 vendor/sdl-3.0.0/src/render/software/SDL_rotate.c create mode 100644 vendor/sdl-3.0.0/src/render/software/SDL_rotate.h create mode 100644 vendor/sdl-3.0.0/src/render/software/SDL_triangle.c create mode 100644 vendor/sdl-3.0.0/src/render/software/SDL_triangle.h create mode 100644 vendor/sdl-3.0.0/src/render/vitagxm/SDL_render_vita_gxm.c create mode 100644 vendor/sdl-3.0.0/src/render/vitagxm/SDL_render_vita_gxm_memory.c create mode 100644 vendor/sdl-3.0.0/src/render/vitagxm/SDL_render_vita_gxm_memory.h create mode 100644 vendor/sdl-3.0.0/src/render/vitagxm/SDL_render_vita_gxm_shaders.h create mode 100644 vendor/sdl-3.0.0/src/render/vitagxm/SDL_render_vita_gxm_tools.c create mode 100644 vendor/sdl-3.0.0/src/render/vitagxm/SDL_render_vita_gxm_tools.h create mode 100644 vendor/sdl-3.0.0/src/render/vitagxm/SDL_render_vita_gxm_types.h create mode 100644 vendor/sdl-3.0.0/src/render/vitagxm/shader_src/clear_f.cg create mode 100644 vendor/sdl-3.0.0/src/render/vitagxm/shader_src/clear_v.cg create mode 100644 vendor/sdl-3.0.0/src/render/vitagxm/shader_src/color_f.cg create mode 100644 vendor/sdl-3.0.0/src/render/vitagxm/shader_src/color_v.cg create mode 100644 vendor/sdl-3.0.0/src/render/vitagxm/shader_src/texture_f.cg create mode 100644 vendor/sdl-3.0.0/src/render/vitagxm/shader_src/texture_v.cg create mode 100644 vendor/sdl-3.0.0/src/sensor/SDL_sensor.c create mode 100644 vendor/sdl-3.0.0/src/sensor/SDL_sensor_c.h create mode 100644 vendor/sdl-3.0.0/src/sensor/SDL_syssensor.h create mode 100644 vendor/sdl-3.0.0/src/sensor/android/SDL_androidsensor.c create mode 100644 vendor/sdl-3.0.0/src/sensor/android/SDL_androidsensor.h create mode 100644 vendor/sdl-3.0.0/src/sensor/coremotion/SDL_coremotionsensor.h create mode 100644 vendor/sdl-3.0.0/src/sensor/coremotion/SDL_coremotionsensor.m create mode 100644 vendor/sdl-3.0.0/src/sensor/dummy/SDL_dummysensor.c create mode 100644 vendor/sdl-3.0.0/src/sensor/dummy/SDL_dummysensor.h create mode 100644 vendor/sdl-3.0.0/src/sensor/n3ds/SDL_n3dssensor.c create mode 100644 vendor/sdl-3.0.0/src/sensor/vita/SDL_vitasensor.c create mode 100644 vendor/sdl-3.0.0/src/sensor/vita/SDL_vitasensor.h create mode 100644 vendor/sdl-3.0.0/src/sensor/windows/SDL_windowssensor.c create mode 100644 vendor/sdl-3.0.0/src/sensor/windows/SDL_windowssensor.h create mode 100644 vendor/sdl-3.0.0/src/stdlib/SDL_crc16.c create mode 100644 vendor/sdl-3.0.0/src/stdlib/SDL_crc32.c create mode 100644 vendor/sdl-3.0.0/src/stdlib/SDL_getenv.c create mode 100644 vendor/sdl-3.0.0/src/stdlib/SDL_iconv.c create mode 100644 vendor/sdl-3.0.0/src/stdlib/SDL_malloc.c create mode 100644 vendor/sdl-3.0.0/src/stdlib/SDL_mslibc.c create mode 100644 vendor/sdl-3.0.0/src/stdlib/SDL_mslibc_x64.asm create mode 100644 vendor/sdl-3.0.0/src/stdlib/SDL_qsort.c create mode 100644 vendor/sdl-3.0.0/src/stdlib/SDL_stdlib.c create mode 100644 vendor/sdl-3.0.0/src/stdlib/SDL_string.c create mode 100644 vendor/sdl-3.0.0/src/stdlib/SDL_strtokr.c create mode 100644 vendor/sdl-3.0.0/src/stdlib/SDL_vacopy.h create mode 100644 vendor/sdl-3.0.0/src/test/SDL_test_assert.c create mode 100644 vendor/sdl-3.0.0/src/test/SDL_test_common.c create mode 100644 vendor/sdl-3.0.0/src/test/SDL_test_compare.c create mode 100644 vendor/sdl-3.0.0/src/test/SDL_test_crc32.c create mode 100644 vendor/sdl-3.0.0/src/test/SDL_test_font.c create mode 100644 vendor/sdl-3.0.0/src/test/SDL_test_fuzzer.c create mode 100644 vendor/sdl-3.0.0/src/test/SDL_test_harness.c create mode 100644 vendor/sdl-3.0.0/src/test/SDL_test_log.c create mode 100644 vendor/sdl-3.0.0/src/test/SDL_test_md5.c create mode 100644 vendor/sdl-3.0.0/src/test/SDL_test_memory.c create mode 100644 vendor/sdl-3.0.0/src/test/SDL_test_random.c create mode 100644 vendor/sdl-3.0.0/src/thread/SDL_systhread.h create mode 100644 vendor/sdl-3.0.0/src/thread/SDL_thread.c create mode 100644 vendor/sdl-3.0.0/src/thread/SDL_thread_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/generic/SDL_syscond.c create mode 100644 vendor/sdl-3.0.0/src/thread/generic/SDL_syscond_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/generic/SDL_sysmutex.c create mode 100644 vendor/sdl-3.0.0/src/thread/generic/SDL_sysmutex_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/generic/SDL_sysrwlock.c create mode 100644 vendor/sdl-3.0.0/src/thread/generic/SDL_sysrwlock_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/generic/SDL_syssem.c create mode 100644 vendor/sdl-3.0.0/src/thread/generic/SDL_systhread.c create mode 100644 vendor/sdl-3.0.0/src/thread/generic/SDL_systhread_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/generic/SDL_systls.c create mode 100644 vendor/sdl-3.0.0/src/thread/n3ds/SDL_syscond.c create mode 100644 vendor/sdl-3.0.0/src/thread/n3ds/SDL_sysmutex.c create mode 100644 vendor/sdl-3.0.0/src/thread/n3ds/SDL_sysmutex_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/n3ds/SDL_syssem.c create mode 100644 vendor/sdl-3.0.0/src/thread/n3ds/SDL_systhread.c create mode 100644 vendor/sdl-3.0.0/src/thread/n3ds/SDL_systhread_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/ngage/SDL_sysmutex.cpp create mode 100644 vendor/sdl-3.0.0/src/thread/ngage/SDL_syssem.cpp create mode 100644 vendor/sdl-3.0.0/src/thread/ngage/SDL_systhread.cpp create mode 100644 vendor/sdl-3.0.0/src/thread/ngage/SDL_systhread_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/ps2/SDL_syssem.c create mode 100644 vendor/sdl-3.0.0/src/thread/ps2/SDL_systhread.c create mode 100644 vendor/sdl-3.0.0/src/thread/ps2/SDL_systhread_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/psp/SDL_syscond.c create mode 100644 vendor/sdl-3.0.0/src/thread/psp/SDL_sysmutex.c create mode 100644 vendor/sdl-3.0.0/src/thread/psp/SDL_sysmutex_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/psp/SDL_syssem.c create mode 100644 vendor/sdl-3.0.0/src/thread/psp/SDL_systhread.c create mode 100644 vendor/sdl-3.0.0/src/thread/psp/SDL_systhread_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/pthread/SDL_syscond.c create mode 100644 vendor/sdl-3.0.0/src/thread/pthread/SDL_sysmutex.c create mode 100644 vendor/sdl-3.0.0/src/thread/pthread/SDL_sysmutex_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/pthread/SDL_sysrwlock.c create mode 100644 vendor/sdl-3.0.0/src/thread/pthread/SDL_syssem.c create mode 100644 vendor/sdl-3.0.0/src/thread/pthread/SDL_systhread.c create mode 100644 vendor/sdl-3.0.0/src/thread/pthread/SDL_systhread_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/pthread/SDL_systls.c create mode 100644 vendor/sdl-3.0.0/src/thread/stdcpp/SDL_syscond.cpp create mode 100644 vendor/sdl-3.0.0/src/thread/stdcpp/SDL_sysmutex.cpp create mode 100644 vendor/sdl-3.0.0/src/thread/stdcpp/SDL_sysmutex_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/stdcpp/SDL_sysrwlock.cpp create mode 100644 vendor/sdl-3.0.0/src/thread/stdcpp/SDL_systhread.cpp create mode 100644 vendor/sdl-3.0.0/src/thread/stdcpp/SDL_systhread_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/vita/SDL_syscond.c create mode 100644 vendor/sdl-3.0.0/src/thread/vita/SDL_sysmutex.c create mode 100644 vendor/sdl-3.0.0/src/thread/vita/SDL_sysmutex_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/vita/SDL_syssem.c create mode 100644 vendor/sdl-3.0.0/src/thread/vita/SDL_systhread.c create mode 100644 vendor/sdl-3.0.0/src/thread/vita/SDL_systhread_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/windows/SDL_syscond_cv.c create mode 100644 vendor/sdl-3.0.0/src/thread/windows/SDL_sysmutex.c create mode 100644 vendor/sdl-3.0.0/src/thread/windows/SDL_sysmutex_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/windows/SDL_sysrwlock_srw.c create mode 100644 vendor/sdl-3.0.0/src/thread/windows/SDL_syssem.c create mode 100644 vendor/sdl-3.0.0/src/thread/windows/SDL_systhread.c create mode 100644 vendor/sdl-3.0.0/src/thread/windows/SDL_systhread_c.h create mode 100644 vendor/sdl-3.0.0/src/thread/windows/SDL_systls.c create mode 100644 vendor/sdl-3.0.0/src/timer/SDL_timer.c create mode 100644 vendor/sdl-3.0.0/src/timer/SDL_timer_c.h create mode 100644 vendor/sdl-3.0.0/src/timer/dummy/SDL_systimer.c create mode 100644 vendor/sdl-3.0.0/src/timer/haiku/SDL_systimer.c create mode 100644 vendor/sdl-3.0.0/src/timer/n3ds/SDL_systimer.c create mode 100644 vendor/sdl-3.0.0/src/timer/ngage/SDL_systimer.cpp create mode 100644 vendor/sdl-3.0.0/src/timer/ps2/SDL_systimer.c create mode 100644 vendor/sdl-3.0.0/src/timer/psp/SDL_systimer.c create mode 100644 vendor/sdl-3.0.0/src/timer/unix/SDL_systimer.c create mode 100644 vendor/sdl-3.0.0/src/timer/vita/SDL_systimer.c create mode 100644 vendor/sdl-3.0.0/src/timer/windows/SDL_systimer.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_RLEaccel.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_RLEaccel_c.h create mode 100644 vendor/sdl-3.0.0/src/video/SDL_blit.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_blit.h create mode 100644 vendor/sdl-3.0.0/src/video/SDL_blit_0.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_blit_1.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_blit_A.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_blit_N.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_blit_auto.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_blit_auto.h create mode 100644 vendor/sdl-3.0.0/src/video/SDL_blit_copy.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_blit_copy.h create mode 100644 vendor/sdl-3.0.0/src/video/SDL_blit_slow.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_blit_slow.h create mode 100644 vendor/sdl-3.0.0/src/video/SDL_bmp.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_clipboard.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_clipboard_c.h create mode 100644 vendor/sdl-3.0.0/src/video/SDL_egl.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_egl_c.h create mode 100644 vendor/sdl-3.0.0/src/video/SDL_fillrect.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_pixels.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_pixels_c.h create mode 100644 vendor/sdl-3.0.0/src/video/SDL_rect.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_rect_c.h create mode 100644 vendor/sdl-3.0.0/src/video/SDL_rect_impl.h create mode 100644 vendor/sdl-3.0.0/src/video/SDL_shape.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_shape_internals.h create mode 100644 vendor/sdl-3.0.0/src/video/SDL_stretch.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_surface.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_surface_pixel_impl.h create mode 100644 vendor/sdl-3.0.0/src/video/SDL_sysvideo.h create mode 100644 vendor/sdl-3.0.0/src/video/SDL_video.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_video_c.h create mode 100644 vendor/sdl-3.0.0/src/video/SDL_video_unsupported.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_vulkan_internal.h create mode 100644 vendor/sdl-3.0.0/src/video/SDL_vulkan_utils.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_yuv.c create mode 100644 vendor/sdl-3.0.0/src/video/SDL_yuv_c.h create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidclipboard.c create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidclipboard.h create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidevents.c create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidevents.h create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidgl.c create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidgl.h create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidkeyboard.c create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidkeyboard.h create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidmessagebox.c create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidmessagebox.h create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidmouse.c create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidmouse.h create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidtouch.c create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidtouch.h create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidvideo.c create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidvideo.h create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidvulkan.c create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidvulkan.h create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidwindow.c create mode 100644 vendor/sdl-3.0.0/src/video/android/SDL_androidwindow.h create mode 100644 vendor/sdl-3.0.0/src/video/arm/pixman-arm-asm.h create mode 100644 vendor/sdl-3.0.0/src/video/arm/pixman-arm-neon-asm.S create mode 100644 vendor/sdl-3.0.0/src/video/arm/pixman-arm-neon-asm.h create mode 100644 vendor/sdl-3.0.0/src/video/arm/pixman-arm-simd-asm.S create mode 100644 vendor/sdl-3.0.0/src/video/arm/pixman-arm-simd-asm.h create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoaclipboard.h create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoaclipboard.m create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoaevents.h create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoaevents.m create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoakeyboard.h create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoakeyboard.m create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoamessagebox.h create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoamessagebox.m create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoametalview.h create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoametalview.m create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoamodes.h create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoamodes.m create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoamouse.h create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoamouse.m create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoaopengl.h create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoaopengl.m create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoaopengles.h create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoaopengles.m create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoashape.h create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoashape.m create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoavideo.h create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoavideo.m create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoavulkan.h create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoavulkan.m create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoawindow.h create mode 100644 vendor/sdl-3.0.0/src/video/cocoa/SDL_cocoawindow.m create mode 100644 vendor/sdl-3.0.0/src/video/dummy/SDL_nullevents.c create mode 100644 vendor/sdl-3.0.0/src/video/dummy/SDL_nullevents_c.h create mode 100644 vendor/sdl-3.0.0/src/video/dummy/SDL_nullframebuffer.c create mode 100644 vendor/sdl-3.0.0/src/video/dummy/SDL_nullframebuffer_c.h create mode 100644 vendor/sdl-3.0.0/src/video/dummy/SDL_nullvideo.c create mode 100644 vendor/sdl-3.0.0/src/video/dummy/SDL_nullvideo.h create mode 100644 vendor/sdl-3.0.0/src/video/emscripten/SDL_emscriptenevents.c create mode 100644 vendor/sdl-3.0.0/src/video/emscripten/SDL_emscriptenevents.h create mode 100644 vendor/sdl-3.0.0/src/video/emscripten/SDL_emscriptenframebuffer.c create mode 100644 vendor/sdl-3.0.0/src/video/emscripten/SDL_emscriptenframebuffer.h create mode 100644 vendor/sdl-3.0.0/src/video/emscripten/SDL_emscriptenmouse.c create mode 100644 vendor/sdl-3.0.0/src/video/emscripten/SDL_emscriptenmouse.h create mode 100644 vendor/sdl-3.0.0/src/video/emscripten/SDL_emscriptenopengles.c create mode 100644 vendor/sdl-3.0.0/src/video/emscripten/SDL_emscriptenopengles.h create mode 100644 vendor/sdl-3.0.0/src/video/emscripten/SDL_emscriptenvideo.c create mode 100644 vendor/sdl-3.0.0/src/video/emscripten/SDL_emscriptenvideo.h create mode 100644 vendor/sdl-3.0.0/src/video/gdk/SDL_gdktextinput.cpp create mode 100644 vendor/sdl-3.0.0/src/video/gdk/SDL_gdktextinput.h create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_BApp.h create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_BWin.h create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bclipboard.cc create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bclipboard.h create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bevents.cc create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bevents.h create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bframebuffer.cc create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bframebuffer.h create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bkeyboard.cc create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bkeyboard.h create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bmessagebox.cc create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bmessagebox.h create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bmodes.cc create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bmodes.h create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bopengl.cc create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bopengl.h create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bvideo.cc create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bvideo.h create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bwindow.cc create mode 100644 vendor/sdl-3.0.0/src/video/haiku/SDL_bwindow.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/EGL/egl.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/EGL/eglext.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/EGL/eglplatform.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/GLES2/gl2.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/GLES2/gl2ext.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/GLES2/gl2platform.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/KHR/khrplatform.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vk_icd.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vk_layer.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vk_platform.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vk_sdk_platform.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vulkan.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vulkan_android.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vulkan_beta.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vulkan_core.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vulkan_directfb.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vulkan_fuchsia.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vulkan_ggp.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vulkan_ios.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vulkan_macos.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vulkan_metal.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vulkan_screen.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vulkan_vi.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vulkan_wayland.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vulkan_win32.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vulkan_xcb.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vulkan_xlib.h create mode 100644 vendor/sdl-3.0.0/src/video/khronos/vulkan/vulkan_xlib_xrandr.h create mode 100644 vendor/sdl-3.0.0/src/video/kmsdrm/SDL_kmsdrmdyn.c create mode 100644 vendor/sdl-3.0.0/src/video/kmsdrm/SDL_kmsdrmdyn.h create mode 100644 vendor/sdl-3.0.0/src/video/kmsdrm/SDL_kmsdrmevents.c create mode 100644 vendor/sdl-3.0.0/src/video/kmsdrm/SDL_kmsdrmevents.h create mode 100644 vendor/sdl-3.0.0/src/video/kmsdrm/SDL_kmsdrmmouse.c create mode 100644 vendor/sdl-3.0.0/src/video/kmsdrm/SDL_kmsdrmmouse.h create mode 100644 vendor/sdl-3.0.0/src/video/kmsdrm/SDL_kmsdrmopengles.c create mode 100644 vendor/sdl-3.0.0/src/video/kmsdrm/SDL_kmsdrmopengles.h create mode 100644 vendor/sdl-3.0.0/src/video/kmsdrm/SDL_kmsdrmsym.h create mode 100644 vendor/sdl-3.0.0/src/video/kmsdrm/SDL_kmsdrmvideo.c create mode 100644 vendor/sdl-3.0.0/src/video/kmsdrm/SDL_kmsdrmvideo.h create mode 100644 vendor/sdl-3.0.0/src/video/kmsdrm/SDL_kmsdrmvulkan.c create mode 100644 vendor/sdl-3.0.0/src/video/kmsdrm/SDL_kmsdrmvulkan.h create mode 100644 vendor/sdl-3.0.0/src/video/n3ds/SDL_n3dsevents.c create mode 100644 vendor/sdl-3.0.0/src/video/n3ds/SDL_n3dsevents_c.h create mode 100644 vendor/sdl-3.0.0/src/video/n3ds/SDL_n3dsframebuffer.c create mode 100644 vendor/sdl-3.0.0/src/video/n3ds/SDL_n3dsframebuffer_c.h create mode 100644 vendor/sdl-3.0.0/src/video/n3ds/SDL_n3dsswkb.c create mode 100644 vendor/sdl-3.0.0/src/video/n3ds/SDL_n3dsswkb.h create mode 100644 vendor/sdl-3.0.0/src/video/n3ds/SDL_n3dstouch.c create mode 100644 vendor/sdl-3.0.0/src/video/n3ds/SDL_n3dstouch.h create mode 100644 vendor/sdl-3.0.0/src/video/n3ds/SDL_n3dsvideo.c create mode 100644 vendor/sdl-3.0.0/src/video/n3ds/SDL_n3dsvideo.h create mode 100644 vendor/sdl-3.0.0/src/video/ngage/SDL_ngageevents.cpp create mode 100644 vendor/sdl-3.0.0/src/video/ngage/SDL_ngageevents_c.h create mode 100644 vendor/sdl-3.0.0/src/video/ngage/SDL_ngageframebuffer.cpp create mode 100644 vendor/sdl-3.0.0/src/video/ngage/SDL_ngageframebuffer_c.h create mode 100644 vendor/sdl-3.0.0/src/video/ngage/SDL_ngagevideo.cpp create mode 100644 vendor/sdl-3.0.0/src/video/ngage/SDL_ngagevideo.h create mode 100644 vendor/sdl-3.0.0/src/video/ngage/SDL_ngagewindow.cpp create mode 100644 vendor/sdl-3.0.0/src/video/ngage/SDL_ngagewindow.h create mode 100644 vendor/sdl-3.0.0/src/video/offscreen/SDL_offscreenevents.c create mode 100644 vendor/sdl-3.0.0/src/video/offscreen/SDL_offscreenevents_c.h create mode 100644 vendor/sdl-3.0.0/src/video/offscreen/SDL_offscreenframebuffer.c create mode 100644 vendor/sdl-3.0.0/src/video/offscreen/SDL_offscreenframebuffer_c.h create mode 100644 vendor/sdl-3.0.0/src/video/offscreen/SDL_offscreenopengles.c create mode 100644 vendor/sdl-3.0.0/src/video/offscreen/SDL_offscreenopengles.h create mode 100644 vendor/sdl-3.0.0/src/video/offscreen/SDL_offscreenvideo.c create mode 100644 vendor/sdl-3.0.0/src/video/offscreen/SDL_offscreenvideo.h create mode 100644 vendor/sdl-3.0.0/src/video/offscreen/SDL_offscreenwindow.c create mode 100644 vendor/sdl-3.0.0/src/video/offscreen/SDL_offscreenwindow.h create mode 100644 vendor/sdl-3.0.0/src/video/ps2/SDL_ps2video.c create mode 100644 vendor/sdl-3.0.0/src/video/ps2/SDL_ps2video.h create mode 100644 vendor/sdl-3.0.0/src/video/psp/SDL_pspevents.c create mode 100644 vendor/sdl-3.0.0/src/video/psp/SDL_pspevents_c.h create mode 100644 vendor/sdl-3.0.0/src/video/psp/SDL_pspgl.c create mode 100644 vendor/sdl-3.0.0/src/video/psp/SDL_pspgl_c.h create mode 100644 vendor/sdl-3.0.0/src/video/psp/SDL_pspmouse.c create mode 100644 vendor/sdl-3.0.0/src/video/psp/SDL_pspmouse_c.h create mode 100644 vendor/sdl-3.0.0/src/video/psp/SDL_pspvideo.c create mode 100644 vendor/sdl-3.0.0/src/video/psp/SDL_pspvideo.h create mode 100644 vendor/sdl-3.0.0/src/video/qnx/SDL_qnx.h create mode 100644 vendor/sdl-3.0.0/src/video/qnx/SDL_qnxgl.c create mode 100644 vendor/sdl-3.0.0/src/video/qnx/SDL_qnxkeyboard.c create mode 100644 vendor/sdl-3.0.0/src/video/qnx/SDL_qnxvideo.c create mode 100644 vendor/sdl-3.0.0/src/video/raspberry/SDL_rpievents.c create mode 100644 vendor/sdl-3.0.0/src/video/raspberry/SDL_rpievents_c.h create mode 100644 vendor/sdl-3.0.0/src/video/raspberry/SDL_rpimouse.c create mode 100644 vendor/sdl-3.0.0/src/video/raspberry/SDL_rpimouse.h create mode 100644 vendor/sdl-3.0.0/src/video/raspberry/SDL_rpiopengles.c create mode 100644 vendor/sdl-3.0.0/src/video/raspberry/SDL_rpiopengles.h create mode 100644 vendor/sdl-3.0.0/src/video/raspberry/SDL_rpivideo.c create mode 100644 vendor/sdl-3.0.0/src/video/raspberry/SDL_rpivideo.h create mode 100644 vendor/sdl-3.0.0/src/video/riscos/SDL_riscosdefs.h create mode 100644 vendor/sdl-3.0.0/src/video/riscos/SDL_riscosevents.c create mode 100644 vendor/sdl-3.0.0/src/video/riscos/SDL_riscosevents_c.h create mode 100644 vendor/sdl-3.0.0/src/video/riscos/SDL_riscosframebuffer.c create mode 100644 vendor/sdl-3.0.0/src/video/riscos/SDL_riscosframebuffer_c.h create mode 100644 vendor/sdl-3.0.0/src/video/riscos/SDL_riscosmessagebox.c create mode 100644 vendor/sdl-3.0.0/src/video/riscos/SDL_riscosmessagebox.h create mode 100644 vendor/sdl-3.0.0/src/video/riscos/SDL_riscosmodes.c create mode 100644 vendor/sdl-3.0.0/src/video/riscos/SDL_riscosmodes.h create mode 100644 vendor/sdl-3.0.0/src/video/riscos/SDL_riscosmouse.c create mode 100644 vendor/sdl-3.0.0/src/video/riscos/SDL_riscosmouse.h create mode 100644 vendor/sdl-3.0.0/src/video/riscos/SDL_riscosvideo.c create mode 100644 vendor/sdl-3.0.0/src/video/riscos/SDL_riscosvideo.h create mode 100644 vendor/sdl-3.0.0/src/video/riscos/SDL_riscoswindow.c create mode 100644 vendor/sdl-3.0.0/src/video/riscos/SDL_riscoswindow.h create mode 100644 vendor/sdl-3.0.0/src/video/riscos/scancodes_riscos.h create mode 100644 vendor/sdl-3.0.0/src/video/sdlgenblit.pl create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitappdelegate.h create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitappdelegate.m create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitclipboard.h create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitclipboard.m create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitevents.h create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitevents.m create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitmessagebox.h create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitmessagebox.m create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitmetalview.h create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitmetalview.m create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitmodes.h create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitmodes.m create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitopengles.h create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitopengles.m create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitopenglview.h create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitopenglview.m create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitvideo.h create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitvideo.m create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitview.h create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitview.m create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitviewcontroller.h create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitviewcontroller.m create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitvulkan.h create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitvulkan.m create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitwindow.h create mode 100644 vendor/sdl-3.0.0/src/video/uikit/SDL_uikitwindow.m create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitaframebuffer.c create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitaframebuffer.h create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitagl_pvr.c create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitagl_pvr_c.h create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitagles.c create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitagles_c.h create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitagles_pvr.c create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitagles_pvr_c.h create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitakeyboard.c create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitakeyboard.h create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitamessagebox.c create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitamessagebox.h create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitamouse.c create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitamouse_c.h create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitatouch.c create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitatouch.h create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitavideo.c create mode 100644 vendor/sdl-3.0.0/src/video/vita/SDL_vitavideo.h create mode 100644 vendor/sdl-3.0.0/src/video/vivante/SDL_vivanteopengles.c create mode 100644 vendor/sdl-3.0.0/src/video/vivante/SDL_vivanteopengles.h create mode 100644 vendor/sdl-3.0.0/src/video/vivante/SDL_vivanteplatform.c create mode 100644 vendor/sdl-3.0.0/src/video/vivante/SDL_vivanteplatform.h create mode 100644 vendor/sdl-3.0.0/src/video/vivante/SDL_vivantevideo.c create mode 100644 vendor/sdl-3.0.0/src/video/vivante/SDL_vivantevideo.h create mode 100644 vendor/sdl-3.0.0/src/video/vivante/SDL_vivantevulkan.c create mode 100644 vendor/sdl-3.0.0/src/video/vivante/SDL_vivantevulkan.h create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandclipboard.c create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandclipboard.h create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylanddatamanager.c create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylanddatamanager.h create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylanddyn.c create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylanddyn.h create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandevents.c create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandevents_c.h create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandkeyboard.c create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandkeyboard.h create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandmessagebox.c create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandmessagebox.h create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandmouse.c create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandmouse.h create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandopengles.c create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandopengles.h create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandsym.h create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandtouch.c create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandtouch.h create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandvideo.c create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandvideo.h create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandvulkan.c create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandvulkan.h create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandwindow.c create mode 100644 vendor/sdl-3.0.0/src/video/wayland/SDL_waylandwindow.h create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_msctf.h create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_vkeys.h create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsclipboard.c create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsclipboard.h create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsevents.c create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsevents.h create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsframebuffer.c create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsframebuffer.h create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowskeyboard.c create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowskeyboard.h create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsmessagebox.c create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsmessagebox.h create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsmodes.c create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsmodes.h create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsmouse.c create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsmouse.h create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsopengl.c create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsopengl.h create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsopengles.c create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsopengles.h create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsshape.c create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsshape.h create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsvideo.c create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsvideo.h create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsvulkan.c create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowsvulkan.h create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowswindow.c create mode 100644 vendor/sdl-3.0.0/src/video/windows/SDL_windowswindow.h create mode 100644 vendor/sdl-3.0.0/src/video/windows/wmmsg.h create mode 100644 vendor/sdl-3.0.0/src/video/winrt/SDL_winrtevents.cpp create mode 100644 vendor/sdl-3.0.0/src/video/winrt/SDL_winrtevents_c.h create mode 100644 vendor/sdl-3.0.0/src/video/winrt/SDL_winrtgamebar.cpp create mode 100644 vendor/sdl-3.0.0/src/video/winrt/SDL_winrtgamebar_cpp.h create mode 100644 vendor/sdl-3.0.0/src/video/winrt/SDL_winrtkeyboard.cpp create mode 100644 vendor/sdl-3.0.0/src/video/winrt/SDL_winrtmessagebox.cpp create mode 100644 vendor/sdl-3.0.0/src/video/winrt/SDL_winrtmessagebox.h create mode 100644 vendor/sdl-3.0.0/src/video/winrt/SDL_winrtmouse.cpp create mode 100644 vendor/sdl-3.0.0/src/video/winrt/SDL_winrtmouse_c.h create mode 100644 vendor/sdl-3.0.0/src/video/winrt/SDL_winrtopengles.cpp create mode 100644 vendor/sdl-3.0.0/src/video/winrt/SDL_winrtopengles.h create mode 100644 vendor/sdl-3.0.0/src/video/winrt/SDL_winrtpointerinput.cpp create mode 100644 vendor/sdl-3.0.0/src/video/winrt/SDL_winrtvideo.cpp create mode 100644 vendor/sdl-3.0.0/src/video/winrt/SDL_winrtvideo_cpp.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11clipboard.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11clipboard.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11dyn.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11dyn.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11events.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11events.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11framebuffer.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11framebuffer.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11keyboard.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11keyboard.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11messagebox.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11messagebox.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11modes.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11modes.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11mouse.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11mouse.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11opengl.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11opengl.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11opengles.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11opengles.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11shape.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11shape.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11sym.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11touch.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11touch.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11video.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11video.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11vulkan.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11vulkan.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11window.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11window.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11xfixes.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11xfixes.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11xinput2.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/SDL_x11xinput2.h create mode 100644 vendor/sdl-3.0.0/src/video/x11/edid-parse.c create mode 100644 vendor/sdl-3.0.0/src/video/x11/edid.h create mode 100644 vendor/sdl-3.0.0/src/video/yuv2rgb/LICENSE create mode 100644 vendor/sdl-3.0.0/src/video/yuv2rgb/README.md create mode 100644 vendor/sdl-3.0.0/src/video/yuv2rgb/yuv_rgb.c create mode 100644 vendor/sdl-3.0.0/src/video/yuv2rgb/yuv_rgb.h create mode 100644 vendor/sdl-3.0.0/src/video/yuv2rgb/yuv_rgb_lsx_func.h create mode 100644 vendor/sdl-3.0.0/src/video/yuv2rgb/yuv_rgb_sse_func.h create mode 100644 vendor/sdl-3.0.0/src/video/yuv2rgb/yuv_rgb_std_func.h create mode 100644 vendor/sdl-3.0.0/test/CMakeLists.txt create mode 100644 vendor/sdl-3.0.0/test/COPYING create mode 100644 vendor/sdl-3.0.0/test/README create mode 100644 vendor/sdl-3.0.0/test/android/cmake/AndroidManifest.xml.cmake create mode 100644 vendor/sdl-3.0.0/test/android/cmake/SDLEntryTestActivity.java.cmake create mode 100644 vendor/sdl-3.0.0/test/android/cmake/SDLTestActivity.java.cmake create mode 100644 vendor/sdl-3.0.0/test/android/cmake/res/values/strings.xml.cmake create mode 100644 vendor/sdl-3.0.0/test/android/cmake/res/xml/shortcuts.xml.cmake create mode 100644 vendor/sdl-3.0.0/test/android/res/drawable/sdl-test_foreground.xml create mode 100644 vendor/sdl-3.0.0/test/android/res/layout/arguments_layout.xml create mode 100644 vendor/sdl-3.0.0/test/android/res/mipmap-anydpi-v26/sdl-test.xml create mode 100644 vendor/sdl-3.0.0/test/android/res/mipmap-anydpi-v26/sdl-test_round.xml create mode 100644 vendor/sdl-3.0.0/test/android/res/mipmap-hdpi/sdl-test.png create mode 100644 vendor/sdl-3.0.0/test/android/res/mipmap-hdpi/sdl-test_round.png create mode 100644 vendor/sdl-3.0.0/test/android/res/mipmap-mdpi/sdl-test.png create mode 100644 vendor/sdl-3.0.0/test/android/res/mipmap-mdpi/sdl-test_round.png create mode 100644 vendor/sdl-3.0.0/test/android/res/mipmap-xhdpi/sdl-test.png create mode 100644 vendor/sdl-3.0.0/test/android/res/mipmap-xhdpi/sdl-test_round.png create mode 100644 vendor/sdl-3.0.0/test/android/res/mipmap-xxhdpi/sdl-test.png create mode 100644 vendor/sdl-3.0.0/test/android/res/mipmap-xxhdpi/sdl-test_round.png create mode 100644 vendor/sdl-3.0.0/test/android/res/mipmap-xxxhdpi/sdl-test.png create mode 100644 vendor/sdl-3.0.0/test/android/res/mipmap-xxxhdpi/sdl-test_round.png create mode 100644 vendor/sdl-3.0.0/test/android/res/values/arg_strings.xml create mode 100644 vendor/sdl-3.0.0/test/android/res/values/sdl-test_background.xml create mode 100644 vendor/sdl-3.0.0/test/audiofile.bmp create mode 100644 vendor/sdl-3.0.0/test/checkkeys.c create mode 100644 vendor/sdl-3.0.0/test/checkkeysthreads.c create mode 100644 vendor/sdl-3.0.0/test/emscripten/joystick-pre.js create mode 100644 vendor/sdl-3.0.0/test/emscripten/server.py create mode 100644 vendor/sdl-3.0.0/test/gamepad_axis.bmp create mode 100644 vendor/sdl-3.0.0/test/gamepad_axis.h create mode 100644 vendor/sdl-3.0.0/test/gamepad_axis_arrow.bmp create mode 100644 vendor/sdl-3.0.0/test/gamepad_axis_arrow.h create mode 100644 vendor/sdl-3.0.0/test/gamepad_back.bmp create mode 100644 vendor/sdl-3.0.0/test/gamepad_back.h create mode 100644 vendor/sdl-3.0.0/test/gamepad_battery_empty.bmp create mode 100644 vendor/sdl-3.0.0/test/gamepad_battery_empty.h create mode 100644 vendor/sdl-3.0.0/test/gamepad_battery_full.bmp create mode 100644 vendor/sdl-3.0.0/test/gamepad_battery_full.h create mode 100644 vendor/sdl-3.0.0/test/gamepad_battery_low.bmp create mode 100644 vendor/sdl-3.0.0/test/gamepad_battery_low.h create mode 100644 vendor/sdl-3.0.0/test/gamepad_battery_medium.bmp create mode 100644 vendor/sdl-3.0.0/test/gamepad_battery_medium.h create mode 100644 vendor/sdl-3.0.0/test/gamepad_battery_unknown.bmp create mode 100644 vendor/sdl-3.0.0/test/gamepad_battery_unknown.h create mode 100644 vendor/sdl-3.0.0/test/gamepad_battery_wired.bmp create mode 100644 vendor/sdl-3.0.0/test/gamepad_battery_wired.h create mode 100644 vendor/sdl-3.0.0/test/gamepad_button.bmp create mode 100644 vendor/sdl-3.0.0/test/gamepad_button.h create mode 100644 vendor/sdl-3.0.0/test/gamepad_button_background.bmp create mode 100644 vendor/sdl-3.0.0/test/gamepad_button_background.h create mode 100644 vendor/sdl-3.0.0/test/gamepad_button_small.bmp create mode 100644 vendor/sdl-3.0.0/test/gamepad_button_small.h create mode 100644 vendor/sdl-3.0.0/test/gamepad_face_abxy.bmp create mode 100644 vendor/sdl-3.0.0/test/gamepad_face_abxy.h create mode 100644 vendor/sdl-3.0.0/test/gamepad_face_bayx.bmp create mode 100644 vendor/sdl-3.0.0/test/gamepad_face_bayx.h create mode 100644 vendor/sdl-3.0.0/test/gamepad_face_sony.bmp create mode 100644 vendor/sdl-3.0.0/test/gamepad_face_sony.h create mode 100644 vendor/sdl-3.0.0/test/gamepad_front.bmp create mode 100644 vendor/sdl-3.0.0/test/gamepad_front.h create mode 100644 vendor/sdl-3.0.0/test/gamepad_touchpad.bmp create mode 100644 vendor/sdl-3.0.0/test/gamepad_touchpad.h create mode 100644 vendor/sdl-3.0.0/test/gamepadutils.c create mode 100644 vendor/sdl-3.0.0/test/gamepadutils.h create mode 100644 vendor/sdl-3.0.0/test/icon.bmp create mode 100644 vendor/sdl-3.0.0/test/icon.h create mode 100644 vendor/sdl-3.0.0/test/logaudiodev.bmp create mode 100644 vendor/sdl-3.0.0/test/loopwave.c create mode 100644 vendor/sdl-3.0.0/test/main.cpp create mode 100644 vendor/sdl-3.0.0/test/moose.dat create mode 100644 vendor/sdl-3.0.0/test/n3ds/logo48x48.png create mode 100644 vendor/sdl-3.0.0/test/physaudiodev.bmp create mode 100644 vendor/sdl-3.0.0/test/picture.xbm create mode 100644 vendor/sdl-3.0.0/test/pretest.c create mode 100644 vendor/sdl-3.0.0/test/relative_mode.markdown create mode 100644 vendor/sdl-3.0.0/test/sample.bmp create mode 100644 vendor/sdl-3.0.0/test/sample.wav create mode 100644 vendor/sdl-3.0.0/test/shapes/p01_shape24.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p01_shape32alpha.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p01_shape8.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p02_shape24.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p02_shape32alpha.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p02_shape8.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p03_shape24.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p03_shape8.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p04_shape1.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p04_shape24.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p04_shape32alpha.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p04_shape8.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p05_shape8.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p06_shape1alpha.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p06_shape24.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p06_shape32alpha.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p06_shape8.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p07_shape24.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p07_shape32alpha.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p07_shape8.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p08_shape24.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p08_shape32alpha.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p08_shape8.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p09_shape24.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p09_shape32alpha.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p09_shape8.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p10_shape1.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p10_shape24.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p10_shape32alpha.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p10_shape8.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p11_shape24.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p11_shape32alpha.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p11_shape8.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p12_shape24.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p12_shape8.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p13_shape24.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p13_shape32alpha.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p13_shape8.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p14_shape24.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p14_shape8.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p15_shape24.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p15_shape32alpha.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p15_shape8.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p16_shape1.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p16_shape24.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/p16_shape8.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/trollface_24.bmp create mode 100644 vendor/sdl-3.0.0/test/shapes/trollface_32alpha.bmp create mode 100644 vendor/sdl-3.0.0/test/soundboard.bmp create mode 100644 vendor/sdl-3.0.0/test/soundboard_levels.bmp create mode 100644 vendor/sdl-3.0.0/test/speaker.bmp create mode 100644 vendor/sdl-3.0.0/test/template.test.in create mode 100644 vendor/sdl-3.0.0/test/testatomic.c create mode 100644 vendor/sdl-3.0.0/test/testaudio-art.txt create mode 100644 vendor/sdl-3.0.0/test/testaudio.c create mode 100644 vendor/sdl-3.0.0/test/testaudiocapture.c create mode 100644 vendor/sdl-3.0.0/test/testaudiohotplug.c create mode 100644 vendor/sdl-3.0.0/test/testaudioinfo.c create mode 100644 vendor/sdl-3.0.0/test/testaudiostreamdynamicresample.c create mode 100644 vendor/sdl-3.0.0/test/testautomation.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_audio.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_clipboard.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_events.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_guid.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_hints.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_images.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_images.h create mode 100644 vendor/sdl-3.0.0/test/testautomation_intrinsics.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_joystick.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_keyboard.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_main.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_math.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_mouse.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_pixels.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_platform.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_properties.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_rect.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_render.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_rwops.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_sdltest.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_stdlib.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_suites.h create mode 100644 vendor/sdl-3.0.0/test/testautomation_surface.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_syswm.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_timer.c create mode 100644 vendor/sdl-3.0.0/test/testautomation_video.c create mode 100644 vendor/sdl-3.0.0/test/testbounds.c create mode 100644 vendor/sdl-3.0.0/test/testcontroller.c create mode 100644 vendor/sdl-3.0.0/test/testcustomcursor.c create mode 100644 vendor/sdl-3.0.0/test/testdisplayinfo.c create mode 100644 vendor/sdl-3.0.0/test/testdraw.c create mode 100644 vendor/sdl-3.0.0/test/testdrawchessboard.c create mode 100644 vendor/sdl-3.0.0/test/testdropfile.c create mode 100644 vendor/sdl-3.0.0/test/testerror.c create mode 100644 vendor/sdl-3.0.0/test/testevdev.c create mode 100644 vendor/sdl-3.0.0/test/testffmpeg.c create mode 100644 vendor/sdl-3.0.0/test/testffmpeg_videotoolbox.h create mode 100644 vendor/sdl-3.0.0/test/testffmpeg_videotoolbox.m create mode 100644 vendor/sdl-3.0.0/test/testfile.c create mode 100644 vendor/sdl-3.0.0/test/testfilesystem.c create mode 100644 vendor/sdl-3.0.0/test/testgeometry.c create mode 100644 vendor/sdl-3.0.0/test/testgl.c create mode 100644 vendor/sdl-3.0.0/test/testgles.c create mode 100644 vendor/sdl-3.0.0/test/testgles2.c create mode 100644 vendor/sdl-3.0.0/test/testgles2_sdf.c create mode 100644 vendor/sdl-3.0.0/test/testgles2_sdf_img_normal.bmp create mode 100644 vendor/sdl-3.0.0/test/testgles2_sdf_img_sdf.bmp create mode 100644 vendor/sdl-3.0.0/test/testhaptic.c create mode 100644 vendor/sdl-3.0.0/test/testhittesting.c create mode 100644 vendor/sdl-3.0.0/test/testhotplug.c create mode 100644 vendor/sdl-3.0.0/test/testiconv.c create mode 100644 vendor/sdl-3.0.0/test/testime.c create mode 100644 vendor/sdl-3.0.0/test/testintersections.c create mode 100644 vendor/sdl-3.0.0/test/testkeys.c create mode 100644 vendor/sdl-3.0.0/test/testloadso.c create mode 100644 vendor/sdl-3.0.0/test/testlocale.c create mode 100644 vendor/sdl-3.0.0/test/testlock.c create mode 100644 vendor/sdl-3.0.0/test/testmessage.c create mode 100644 vendor/sdl-3.0.0/test/testmouse.c create mode 100644 vendor/sdl-3.0.0/test/testmultiaudio.c create mode 100644 vendor/sdl-3.0.0/test/testnative.c create mode 100644 vendor/sdl-3.0.0/test/testnative.h create mode 100644 vendor/sdl-3.0.0/test/testnativecocoa.m create mode 100644 vendor/sdl-3.0.0/test/testnativew32.c create mode 100644 vendor/sdl-3.0.0/test/testnativex11.c create mode 100644 vendor/sdl-3.0.0/test/testoffscreen.c create mode 100644 vendor/sdl-3.0.0/test/testoverlay.c create mode 100644 vendor/sdl-3.0.0/test/testplatform.c create mode 100644 vendor/sdl-3.0.0/test/testpopup.c create mode 100644 vendor/sdl-3.0.0/test/testpower.c create mode 100644 vendor/sdl-3.0.0/test/testqsort.c create mode 100644 vendor/sdl-3.0.0/test/testrelative.c create mode 100644 vendor/sdl-3.0.0/test/testrendercopyex.c create mode 100644 vendor/sdl-3.0.0/test/testrendertarget.c create mode 100644 vendor/sdl-3.0.0/test/testresample.c create mode 100644 vendor/sdl-3.0.0/test/testrumble.c create mode 100644 vendor/sdl-3.0.0/test/testrwlock.c create mode 100644 vendor/sdl-3.0.0/test/testscale.c create mode 100644 vendor/sdl-3.0.0/test/testsem.c create mode 100644 vendor/sdl-3.0.0/test/testsensor.c create mode 100644 vendor/sdl-3.0.0/test/testshader.c create mode 100644 vendor/sdl-3.0.0/test/testshape.c create mode 100644 vendor/sdl-3.0.0/test/testsprite.c create mode 100644 vendor/sdl-3.0.0/test/testspriteminimal.c create mode 100644 vendor/sdl-3.0.0/test/teststreaming.c create mode 100644 vendor/sdl-3.0.0/test/testsurround.c create mode 100644 vendor/sdl-3.0.0/test/testthread.c create mode 100644 vendor/sdl-3.0.0/test/testtimer.c create mode 100644 vendor/sdl-3.0.0/test/testurl.c create mode 100644 vendor/sdl-3.0.0/test/testutils.c create mode 100644 vendor/sdl-3.0.0/test/testutils.h create mode 100644 vendor/sdl-3.0.0/test/testver.c create mode 100644 vendor/sdl-3.0.0/test/testviewport.c create mode 100644 vendor/sdl-3.0.0/test/testvulkan.c create mode 100644 vendor/sdl-3.0.0/test/testwm.c create mode 100644 vendor/sdl-3.0.0/test/testyuv.bmp create mode 100644 vendor/sdl-3.0.0/test/testyuv.c create mode 100644 vendor/sdl-3.0.0/test/testyuv_cvt.c create mode 100644 vendor/sdl-3.0.0/test/testyuv_cvt.h create mode 100644 vendor/sdl-3.0.0/test/torturethread.c create mode 100644 vendor/sdl-3.0.0/test/trashcan.bmp create mode 100644 vendor/sdl-3.0.0/test/unifont-13.0.06-license.txt create mode 100644 vendor/sdl-3.0.0/test/unifont-13.0.06.hex create mode 100644 vendor/sdl-3.0.0/test/utf8.txt create mode 100644 vendor/sdl-3.0.0/test/uwp/Package.appxmanifest.in create mode 100644 vendor/sdl-3.0.0/test/uwp/logo-50x50.png create mode 100644 vendor/sdl-3.0.0/test/uwp/splash-620x300.png create mode 100644 vendor/sdl-3.0.0/test/uwp/square-150x150.png create mode 100644 vendor/sdl-3.0.0/test/uwp/square-44x44.png create mode 100644 vendor/sdl-3.0.0/wayland-protocols/fractional-scale-v1.xml create mode 100644 vendor/sdl-3.0.0/wayland-protocols/idle-inhibit-unstable-v1.xml create mode 100644 vendor/sdl-3.0.0/wayland-protocols/input-timestamps-unstable-v1.xml create mode 100644 vendor/sdl-3.0.0/wayland-protocols/keyboard-shortcuts-inhibit-unstable-v1.xml create mode 100644 vendor/sdl-3.0.0/wayland-protocols/pointer-constraints-unstable-v1.xml create mode 100644 vendor/sdl-3.0.0/wayland-protocols/primary-selection-unstable-v1.xml create mode 100644 vendor/sdl-3.0.0/wayland-protocols/relative-pointer-unstable-v1.xml create mode 100644 vendor/sdl-3.0.0/wayland-protocols/tablet-unstable-v2.xml create mode 100644 vendor/sdl-3.0.0/wayland-protocols/text-input-unstable-v3.xml create mode 100644 vendor/sdl-3.0.0/wayland-protocols/viewporter.xml create mode 100644 vendor/sdl-3.0.0/wayland-protocols/wayland.xml create mode 100644 vendor/sdl-3.0.0/wayland-protocols/xdg-activation-v1.xml create mode 100644 vendor/sdl-3.0.0/wayland-protocols/xdg-decoration-unstable-v1.xml create mode 100644 vendor/sdl-3.0.0/wayland-protocols/xdg-output-unstable-v1.xml create mode 100644 vendor/sdl-3.0.0/wayland-protocols/xdg-shell.xml diff --git a/src/console/Device.cpp b/src/console/Device.cpp index b2f08c2..9bb65a2 100644 --- a/src/console/Device.cpp +++ b/src/console/Device.cpp @@ -198,6 +198,10 @@ void ConsoleDeviceInitialize(const char* title) { EGxApi api = GxApi_OpenGl; #if defined(WHOA_SYSTEM_WIN) api = GxApi_D3d9; + + if (CmdLineGetBool(CMD_OPENGL)) { + api = GxApi_OpenGl; + } #elif defined(WHOA_SYSTEM_MAC) api = GxApi_GLL; #endif diff --git a/src/gx/CGxDevice.cpp b/src/gx/CGxDevice.cpp index 16387a9..a5c5653 100644 --- a/src/gx/CGxDevice.cpp +++ b/src/gx/CGxDevice.cpp @@ -14,6 +14,10 @@ #include "gx/d3d/CGxDeviceD3d.hpp" #endif +#if defined(WHOA_SYSTEM_LINUX) || defined(WHOA_SYSTEM_WIN) + #include "gx/glsdl/CGxDeviceGLSDL.hpp" +#endif + #if defined(WHOA_SYSTEM_MAC) #include "gx/gll/CGxDeviceGLL.hpp" #endif @@ -119,13 +123,13 @@ CGxDevice* CGxDevice::NewGLL() { } #endif -CGxDevice* CGxDevice::NewOpenGl() { - // TODO - // auto m = SMemAlloc(sizeof(CGxDeviceOpenGl), __FILE__, __LINE__, 0x0); - // return new (m) CGxDeviceOpenGl(); - return nullptr; +#if defined(WHOA_SYSTEM_WIN) || defined(WHOA_SYSTEM_LINUX) +CGxDevice* CGxDevice::NewOpenGl() { + auto m = SMemAlloc(sizeof(CGxDeviceGLSDL), __FILE__, __LINE__, 0x0); + return new (m) CGxDeviceGLSDL(); } +#endif uint32_t CGxDevice::PrimCalcCount(EGxPrim primType, uint32_t count) { auto div = CGxDevice::s_primVtxDiv[primType]; diff --git a/src/gx/CMakeLists.txt b/src/gx/CMakeLists.txt index 33338b0..dc0d56c 100644 --- a/src/gx/CMakeLists.txt +++ b/src/gx/CMakeLists.txt @@ -19,6 +19,12 @@ if(WHOA_SYSTEM_MAC) list(APPEND GX_SOURCES ${GLL_SOURCES}) endif() +# Build OpenGL/SDL graphics device on Windows and Linux +if(WHOA_SYSTEM_WIN OR WHOA_SYSTEM_LINUX) + file(GLOB GLSDL_SOURCES "glsdl/*.cpp") + list(APPEND GX_SOURCES ${GLSDL_SOURCES}) +endif() + add_library(gx STATIC ${GX_SOURCES}) target_include_directories(gx @@ -47,6 +53,15 @@ if(WHOA_SYSTEM_WIN) ) endif() +# Link SDL3 and GLEW for Windows and Linux +if (WHOA_SYSTEM_WIN OR WHOA_SYSTEM_LINUX) + target_link_libraries(gx + PRIVATE + SDL3::SDL3-static + libglew_static + ) +endif() + if(WHOA_SYSTEM_MAC) target_link_libraries(gx PRIVATE diff --git a/src/gx/glsdl/CGxDeviceGLSDL.cpp b/src/gx/glsdl/CGxDeviceGLSDL.cpp new file mode 100644 index 0000000..4c814d8 --- /dev/null +++ b/src/gx/glsdl/CGxDeviceGLSDL.cpp @@ -0,0 +1,1326 @@ +#include "gx/glsdl/CGxDeviceGLSDL.hpp" +#include "event/Input.hpp" +#include "gx/Blit.hpp" +#include "gx/CGxBatch.hpp" +#include "gx/Shader.hpp" +#include "gx/Window.hpp" +#include "gx/texture/CGxTex.hpp" +#include +#include +#include +#include + +GLEnum CGxDeviceGLSDL::s_glCubeMapFaces[] = { + GL_TEXTURE_CUBE_MAP_POSITIVE_X, + GL_TEXTURE_CUBE_MAP_NEGATIVE_X, + GL_TEXTURE_CUBE_MAP_POSITIVE_Y, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + GL_TEXTURE_CUBE_MAP_POSITIVE_Z, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z +}; + +GLEnum CGxDeviceGLSDL::s_glDstBlend[] = { + GL_ZERO, // GxBlend_Opaque + GL_ZERO, // GxBlend_AlphaKey + GL_ONE_MINUS_SRC_ALPHA, // GxBlend_Alpha + GL_ONE, // GxBlend_Add + GL_ZERO, // GxBlend_Mod + GL_SRC_COLOR, // GxBlend_Mod2x + GL_ONE, // GxBlend_ModAdd + GL_ONE, // GxBlend_InvSrcAlphaAdd + GL_ZERO, // GxBlend_InvSrcAlphaOpaque + GL_ZERO, // GxBlend_SrcAlphaOpaque + GL_ONE, // GxBlend_NoAlphaAdd + GL_ONE_MINUS_CONSTANT_ALPHA // GxBlend_ConstantAlpha +}; + +GLEnum CGxDeviceGLSDL::s_glSrcBlend[] = { + GL_ONE, // GxBlend_Opaque + GL_ONE, // GxBlend_AlphaKey + GL_SRC_ALPHA, // GxBlend_Alpha + GL_SRC_ALPHA, // GxBlend_Add + GL_DST_COLOR, // GxBlend_Mod + GL_DST_COLOR, // GxBlend_Mod2x + GL_DST_COLOR, // GxBlend_ModAdd + GL_ONE_MINUS_SRC_ALPHA, // GxBlend_InvSrcAlphaAdd + GL_ONE_MINUS_SRC_ALPHA, // GxBlend_InvSrcAlphaOpaque + GL_SRC_ALPHA, // GxBlend_SrcAlphaOpaque + GL_ONE, // GxBlend_NoAlphaAdd + GL_CONSTANT_ALPHA // GxBlend_ConstantAlpha +}; + +GLTextureFormat CGxDeviceGLSDL::s_gxTexFmtToGLSDLFmt[] = { + GLTF_INVALID, // GxTex_Unknown + GLTF_ABGR8888, // GxTex_Abgr8888 + GLTF_ARGB8888, // GxTex_Argb8888 + GLTF_ARGB4444, // GxTex_Argb4444 + GLTF_ARGB1555, // GxTex_Argb1555 + GLTF_RGB565, // GxTex_Rgb565 + GLTF_DXT1, // GxTex_Dxt1 + GLTF_DXT3, // GxTex_Dxt3 + GLTF_DXT5, // GxTex_Dxt5 + GLTF_INVALID, // GxTex_Uv88 + GLTF_INVALID, // GxTex_Gr1616F + GLTF_INVALID, // GxTex_R32F + GLTF_D24 // GxTex_D24X8 +}; + +GLEnum CGxDeviceGLSDL::s_poolTarget2BufferFormat[] = { + GL_ZERO, // GxPoolTarget_Vertex + GL_UNSIGNED_SHORT // GxPoolTarget_Index +}; + +GLEnum CGxDeviceGLSDL::s_poolTarget2BufferType[] = { + GL_ARRAY_BUFFER, // GxPoolTarget_Vertex + GL_ELEMENT_ARRAY_BUFFER // GxPoolTarget_Index +}; + +GLEnum CGxDeviceGLSDL::s_poolUsage2BufferUsage[] = { + GL_STATIC_DRAW, // GxPoolUsage_Static + GL_DYNAMIC_DRAW, // GxPoolUsage_Dynamic + GL_DYNAMIC_DRAW // GxPoolUsage_Stream +}; + +GLEnum CGxDeviceGLSDL::s_primitiveConversion[] = { + GL_POINTS, // GxPrim_Points + GL_LINES, // GxPrim_Lines + GL_LINE_STRIP, // GxPrim_LineStrip + GL_TRIANGLES, // GxPrim_Triangles + GL_TRIANGLE_STRIP, // GxPrim_TriangleStrip + GL_TRIANGLE_FAN, // GxPrim_TriangleFan + GL_ZERO // GxPrims_Last +}; + +CGxDeviceGLSDL::CGxDeviceGLSDL() : CGxDevice() { + // TODO + + this->m_api = GxApi_OpenGl; + this->m_caps.m_colorFormat = GxCF_rgba; + + // TODO + + this->DeviceCreatePools(); + this->DeviceCreateStreamBufs(); + + // TODO +} + +char* CGxDeviceGLSDL::BufLock(CGxBuf* buf) { + CGxDevice::BufLock(buf); + return this->IBufLock(buf); +} + +int32_t CGxDeviceGLSDL::BufUnlock(CGxBuf* buf, uint32_t size) { + CGxDevice::BufUnlock(buf, size); + return this->IBufUnlock(buf); +} + +void CGxDeviceGLSDL::BufData(CGxBuf* buf, const void* data, size_t size, uintptr_t offset) { + CGxDevice::BufData(buf, data, size, offset); + + auto bufData = this->IBufLock(buf); + memcpy(&bufData[offset], data, size); + this->IBufUnlock(buf); +} + +void CGxDeviceGLSDL::CapsWindowSize(CRect& rect) { + CRect windowRect = this->DeviceCurWindow(); + + rect.minX = windowRect.minX; + rect.minY = windowRect.minY; + rect.maxX = windowRect.maxX; + rect.maxY = windowRect.maxY; +} + +void CGxDeviceGLSDL::CapsWindowSizeInScreenCoords(CRect& dst) { + if (this->IDevIsWindowed()) { + auto windowRect = this->DeviceCurWindow(); + auto deviceRect = this->m_GLSDLWindow.GetRect(); + + dst.minX = windowRect.minX + deviceRect.origin.x; + dst.maxX = windowRect.maxX + deviceRect.origin.x; + dst.minY = windowRect.minY + deviceRect.origin.y; + dst.maxY = windowRect.maxY + deviceRect.origin.y; + } else { + dst = this->DeviceCurWindow(); + } +} + +int32_t CGxDeviceGLSDL::DeviceCreate(int32_t (*windowProc)(void* window, uint32_t message, uintptr_t wparam, intptr_t lparam), const CGxFormat& format) { + GLSDLWindowRect rect; + Rect* bounds; + Rect* zoomedBounds = GetSavedZoomedWindowBounds(); + + if ( + zoomedBounds + && zoomedBounds->bottom - zoomedBounds->top > 599 + && zoomedBounds->right - zoomedBounds->left > 799 + ) { + bounds = GetSavedZoomedWindowBounds(); + } else { + bounds = GetSavedWindowBounds(); + } + + if ( + bounds->bottom - bounds->top > 599 + && bounds->right - bounds->left > 799 + ) { + rect.origin.x = bounds->left; + rect.origin.y = bounds->top; + rect.size.width = bounds->right - bounds->left; + rect.size.height = bounds->bottom - bounds->top; + } else { + Rect newBounds = { + 0, + 0, + static_cast(std::floor((static_cast(format.size.y) / static_cast(format.size.x)) * 1024.0f)), + 1024, + }; + + SetSavedWindowBounds(newBounds); + + rect.origin.x = newBounds.left; + rect.origin.y = newBounds.top; + rect.size.width = newBounds.right; + rect.size.height = newBounds.bottom; + } + + this->m_GLSDLWindow.Create("World of Warcraft", rect, GLTF_D24, 1); + this->m_GLSDLDevice.Init(&this->m_GLSDLWindow, "WoW", 0); + // this->m_GLSDLDevice.Init(&this->m_GLSDLWindow, "WoW", 4); + + GLSDLDevice::SetOption(GLSDLDevice::eShaderConstantBindings, false); + GLSDLDevice::SetOption(GLSDLDevice::eUseMTGL, true); + + if (CGxDevice::DeviceCreate(windowProc, format)) { + // this->m_glWindow.Show(); + + GLSDLDevice::SetOption(GLSDLDevice::eUseHybridShader, true); + + this->ISetCaps(format); + + this->m_context = 1; + + this->ICursorCreate(format); + + return 1; + } else { + return 0; + } +} + +int32_t CGxDeviceGLSDL::DeviceSetFormat(const CGxFormat& format) { + static GLTextureFormat glSDLTexFormats[] = { + GLTF_RGB565, + GLTF_XRGB8888, + GLTF_ARGB8888, + GLTF_A2RGB10, + GLTF_D16, + GLTF_D24, + GLTF_D24S8, + GLTF_D32 + }; + + bool v7 = false; + bool v10 = false; + + Rect v15 = { + 0, + 0, + static_cast(format.size.y), + static_cast(format.size.x) + }; + + if (format.window && format.maximize != 1) { + Rect* zoomedBounds = GetSavedZoomedWindowBounds(); + Rect* bounds; + + if ( + zoomedBounds + && zoomedBounds->bottom - zoomedBounds->top > 599 + && zoomedBounds->right - zoomedBounds->left > 799 + ) { + bounds = GetSavedZoomedWindowBounds(); + } else { + bounds = GetSavedWindowBounds(); + } + + if ( + bounds->bottom - bounds->top > 599 + && bounds->right - bounds->left > 799 + ) { + v15.right = bounds->right - bounds->left; + v15.bottom = bounds->bottom - bounds->top; + } else { + Rect newBounds = { + 0, + 0, + static_cast(std::floor((static_cast(format.size.y) / static_cast(format.size.x)) * 1024.0f)), + 1024, + }; + + SetSavedWindowBounds(newBounds); + + v15.right = newBounds.right; + v15.bottom = newBounds.bottom; + } + + // TODO GxMacPrivate::SetAspectRatio(static_cast(format.size.x) / static_cast(format.size.y)); + + // TODO auto v8 = LMGetMainDevice(); + // TODO GxMacPrivate::ConstrainWindowRect(v15, v8); + + v7 = true; + v10 = true; + } + + CRect wind = { + 0.0f, + 0.0f, + static_cast(v15.bottom - v15.top), + static_cast(v15.right - v15.left) + }; + + this->DeviceSetDefWindow(wind); + + this->m_GLSDLDevice.SetDisplay( + v15.right - v15.left, + v15.bottom - v15.top, + glSDLTexFormats[format.colorFormat], + glSDLTexFormats[format.depthFormat], + format.refreshRate, + v7, + format.window ^ 1, + format.sampleCount + ); + + OsInputPostEvent(OS_INPUT_SIZE, v15.right - v15.left, v15.bottom - v15.top, 0, 0); + + // TODO + // GameFrame::SetSize(v15.right - v15.left, v15.bottom - v15.top); + + // TODO + // this->m_GLSDLDevice.SetVSync(format.vsync != 0); + + this->IStateSetGLSDLDefaults(); + + if (v10) { + // TODO + // this->m_GLSDLDevice.RestoreDefaultGamma(); + } else { + // TODO + // - unknown vtable call + } + + // TODO + // - this seems to belong elsewhere + CGxDevice::DeviceSetFormat(format); + + return 1; +} + +void* CGxDeviceGLSDL::DeviceWindow() { + return &this->m_GLSDLWindow; +} + +void CGxDeviceGLSDL::Draw(CGxBatch* batch, int32_t indexed) { + if (!this->m_context) { + return; + } + + // TODO + // unk conditional check early return + + this->IStateSync(); + this->ValidateDraw(batch, indexed); + + uint32_t baseIndex = 0; + if (!this->m_caps.int10) { + baseIndex = this->m_primVertexFormatBuf[0]->m_index / this->m_primVertexFormatBuf[0]->m_itemSize; + } + + if (indexed) { + this->m_GLSDLDevice.DrawIndexed( + CGxDeviceGLSDL::s_primitiveConversion[batch->m_primType], + batch->m_minIndex, + batch->m_maxIndex, + baseIndex, + batch->m_start + (this->m_primIndexBuf->m_index / 2), + batch->m_count + ); + } else { + this->m_GLSDLDevice.Draw( + CGxDeviceGLSDL::s_primitiveConversion[batch->m_primType], + baseIndex, + batch->m_count + ); + } +} + +char* CGxDeviceGLSDL::IBufLock(CGxBuf* buf) { + if (!this->m_context) { + // TODO + // EmergencyMem + return nullptr; + } + + CGxPool* pool = buf->m_pool; + + GLBuffer::eMapFlag mapFlag = GLBuffer::GLMap_None; + + if (pool->m_usage == GxPoolUsage_Stream) { + mapFlag = GLBuffer::GLMap_Unk1; + + uint32_t v7 = pool->unk1C + buf->m_itemSize - 1; + uint32_t alignedNext = v7 - v7 % buf->m_itemSize; + + if (alignedNext + buf->m_size > pool->m_size) { + pool->Discard(); + alignedNext = 0; + mapFlag = GLBuffer::GLMap_Unk2; + } + + buf->m_index = alignedNext; + pool->unk1C = alignedNext + buf->m_size; + } else { + mapFlag = pool->m_usage == GxPoolUsage_Dynamic ? GLBuffer::GLMap_Unk1 : GLBuffer::GLMap_None; + } + + GLBuffer* glBuf = reinterpret_cast(pool->m_apiSpecific); + + if (!glBuf) { + glBuf = this->m_GLSDLDevice.CreateBuffer( + CGxDeviceGLSDL::s_poolTarget2BufferType[pool->m_target], + pool->m_size, + nullptr, + CGxDeviceGLSDL::s_poolUsage2BufferUsage[pool->m_usage], + CGxDeviceGLSDL::s_poolTarget2BufferFormat[pool->m_target] + ); + + pool->m_apiSpecific = glBuf; + } + + if (!glBuf) { + // TODO + // EmergencyMem + return nullptr; + } + + return glBuf->Map(buf->m_index, buf->m_size, mapFlag); +} + +int32_t CGxDeviceGLSDL::IBufUnlock(CGxBuf* buf) { + CGxPool* pool = buf->m_pool; + + // TODO + // EmergencyMem + + auto glBuf = reinterpret_cast(pool->m_apiSpecific); + + glBuf->Unmap(0); + buf->unk1D = 1; + + return 1; +} + +void CGxDeviceGLSDL::IRsSendToHw(EGxRenderState which) { + auto state = &this->m_appRenderStates[which]; + + switch (which) { + // TODO + // - remaining render states + + case GxRs_BlendingMode: { + int32_t blend = static_cast(state->m_value); + + if (blend <= GxBlend_AlphaKey) { + this->m_GLSDLDevice.SetAlphaBlendEnable(0); + } else { + this->m_GLSDLDevice.SetAlphaBlendEnable(1); + this->m_GLSDLDevice.SetAlphaBlend( + CGxDeviceGLSDL::s_glSrcBlend[blend], + CGxDeviceGLSDL::s_glDstBlend[blend], + GL_FUNC_ADD + ); + } + + break; + } + + case GxRs_AlphaRef: { + int32_t alphaRef = static_cast(state->m_value); + + if (alphaRef <= 0) { + this->m_GLSDLDevice.SetAlphaTestEnable(0); + } else { + this->m_GLSDLDevice.SetAlphaTest(GL_GEQUAL, static_cast(alphaRef) / static_cast(255)); + this->m_GLSDLDevice.SetAlphaTestEnable(1); + } + + break; + } + + case GxRs_FogStart: { + auto fogStart = static_cast(state->m_value); + + this->m_GLSDLDevice.SetFogParam(GL_FOG_START, fogStart); + + break; + } + + case GxRs_FogEnd: { + auto fogEnd = static_cast(state->m_value); + + this->m_GLSDLDevice.SetFogParam(GL_FOG_END, fogEnd); + + break; + } + + case GxRs_FogColor: { + auto fogColor = static_cast(state->m_value); + + this->m_GLSDLDevice.SetFogColor( + fogColor.r / 255.0f, + fogColor.g / 255.0f, + fogColor.b / 255.0f, + fogColor.a / 255.0f + ); + + break; + } + + case GxRs_Lighting: { + int32_t lightingEnable = 0; + + if (this->MasterEnable(GxMasterEnable_Lighting)) { + lightingEnable = static_cast(state->m_value); + } + + this->m_GLSDLDevice.SetLightingEnable(lightingEnable); + + break; + } + + case GxRs_Fog: { + int32_t fogEnable = 0; + + if (this->MasterEnable(GxMasterEnable_Fog)) { + fogEnable = static_cast(state->m_value); + } + + this->m_GLSDLDevice.SetFogEnable(fogEnable); + + break; + } + + case GxRs_DepthTest: { + int32_t depthTest = 0; + + if (this->MasterEnable(GxMasterEnable_DepthTest)) { + depthTest = static_cast(state->m_value); + } + + this->m_GLSDLDevice.SetDepthTestEnable(depthTest != 0); + + break; + } + + case GxRs_DepthFunc: { + static GLEnum s_glDepthFunc[] = { + GL_LEQUAL, + GL_EQUAL, + GL_GEQUAL, + GL_LESS, + GL_NONE, + GL_NONE + }; + + GLEnum depthFunc = s_glDepthFunc[static_cast(state->m_value)]; + this->m_GLSDLDevice.SetDepthTestFunc(depthFunc); + + break; + } + + case GxRs_DepthWrite: { + int32_t depthWrite = static_cast(state->m_value); + bool depthWriteMask = this->MasterEnable(GxMasterEnable_DepthWrite) && depthWrite + ? 1 : 0; + + this->m_GLSDLDevice.SetDepthWriteMask(depthWriteMask); + + break; + } + + case GxRs_Culling: { + static GLEnum cullMode[] = { + GL_ZERO, + GL_CW, + GL_CCW + }; + + // TODO + // - only use state if unk flag 0x20 set, otherwise use 0 + + int32_t mode = static_cast(state->m_value); + + // TODO + // BLIZZARD_ASSERT(mode <= GxCullState_CCW); + + this->m_GLSDLDevice.SetCullMode(cullMode[mode]); + + break; + } + + case GxRs_Texture0: + case GxRs_Texture1: + case GxRs_Texture2: + case GxRs_Texture3: + case GxRs_Texture4: + case GxRs_Texture5: + case GxRs_Texture6: + case GxRs_Texture7: + case GxRs_Texture8: + case GxRs_Texture9: + case GxRs_Texture10: + case GxRs_Texture11: + case GxRs_Texture12: + case GxRs_Texture13: + case GxRs_Texture14: + case GxRs_Texture15: { + int32_t tmu = which - GxRs_Texture0; + + if (tmu <= 15) { + CGxTex* texture = static_cast(static_cast(state->m_value)); + + if (texture) { + this->ITexBind(); + this->ITexMarkAsUpdated(texture); + + GLTexture* glTexture = static_cast(texture->m_apiSpecificData); + this->m_GLSDLDevice.SetTexture(tmu, glTexture); + } else { + this->m_GLSDLDevice.SetTexture(tmu, nullptr); + } + } + + break; + } + + case GxRs_TexGen0: + case GxRs_TexGen1: + case GxRs_TexGen2: + case GxRs_TexGen3: + case GxRs_TexGen4: + case GxRs_TexGen5: + case GxRs_TexGen6: + case GxRs_TexGen7: { + // TODO + + break; + } + + case GxRs_VertexShader: { + auto vs = static_cast(static_cast(state->m_value)); + this->IShaderBindVertex(vs); + + break; + } + + case GxRs_PixelShader: { + auto ps = static_cast(static_cast(state->m_value)); + this->IShaderBindPixel(ps); + + break; + } + + default: { + fprintf(stderr, "Unhandled render state in CGxDeviceGLSDL::IRsSendToHw: %i\n", which); + + break; + } + } +} + +void CGxDeviceGLSDL::ISceneBegin() { + if (this->m_context) { + this->ShaderConstantsClear(); + } + + // TODO GameMovie::ReadFrame(this); +} + +void CGxDeviceGLSDL::ISetCaps(const CGxFormat& format) { + // TODO fill in proper implementation + + this->m_caps.m_pixelCenterOnEdge = 1; + this->m_caps.m_texelCenterOnEdge = 1; + + this->m_caps.m_colorFormat = GxCF_rgba; + + this->m_caps.m_generateMipMaps = 1; + + this->m_caps.int10 = 1; + + this->m_caps.m_texFmt[GxTex_Dxt1] = 1; + this->m_caps.m_texFmt[GxTex_Dxt3] = 1; + this->m_caps.m_texFmt[GxTex_Dxt5] = 1; + + this->m_caps.m_shaderTargets[GxSh_Vertex] = GxShVS_arbvp1; + this->m_caps.m_shaderTargets[GxSh_Pixel] = GxShPS_arbfp1; + + this->m_caps.m_texFilterAnisotropic = 1; + this->m_caps.m_maxTexAnisotropy = 16; + + this->m_caps.m_texTarget[GxTex_2d] = 1; + this->m_caps.m_texTarget[GxTex_CubeMap] = 1; + this->m_caps.m_texTarget[GxTex_Rectangle] = 1; + this->m_caps.m_texTarget[GxTex_NonPow2] = 1; + + this->m_caps.m_texMaxSize[GxTex_2d] = 4096; + this->m_caps.m_texMaxSize[GxTex_CubeMap] = 4096; + this->m_caps.m_texMaxSize[GxTex_Rectangle] = 4096; + this->m_caps.m_texMaxSize[GxTex_NonPow2] = 4096; + + // TODO +} + +void CGxDeviceGLSDL::IShaderBindPixel(CGxShader* sh) { + CGxDevice::IShaderBind(); + + if (!sh) { + this->m_GLSDLDevice.SetShader(GLShader::ePixelShader, nullptr); + return; + } + + if (!sh->loaded) { + this->IShaderCreatePixel(sh); + } + + BLIZZARD_ASSERT(sh->Valid()); + + this->m_GLSDLDevice.SetShader(GLShader::ePixelShader, static_cast(sh->apiSpecific)); +} + +void CGxDeviceGLSDL::IShaderBindVertex(CGxShader* sh) { + CGxDevice::IShaderBind(); + + if (!sh) { + this->m_GLSDLDevice.SetShader(GLShader::eVertexShader, nullptr); + return; + } + + if (!sh->loaded) { + this->IShaderCreateVertex(sh); + } + + BLIZZARD_ASSERT(sh->Valid()); + + this->m_GLSDLDevice.SetShader(GLShader::eVertexShader, static_cast(sh->apiSpecific)); +} + +void CGxDeviceGLSDL::IShaderConstantsFlush() { + // Vertex shader constants + auto vsConst = &CGxDevice::s_shadowConstants[1]; + if (vsConst->unk2 <= vsConst->unk1) { + this->m_GLSDLDevice.SetShaderConstants( + GLShader::eVertexShader, + vsConst->unk2, + reinterpret_cast(&vsConst->constants[vsConst->unk2]), + vsConst->unk1 - vsConst->unk2 + 1 + ); + } + vsConst->unk2 = 255; + vsConst->unk1 = 0; + + // Pixel shader constants + auto psConst = &CGxDevice::s_shadowConstants[0]; + if (psConst->unk2 <= psConst->unk1) { + this->m_GLSDLDevice.SetShaderConstants( + GLShader::ePixelShader, + psConst->unk2, + reinterpret_cast(&psConst->constants[psConst->unk2]), + psConst->unk1 - psConst->unk2 + 1 + ); + } + psConst->unk2 = 255; + psConst->unk1 = 0; +} + +void CGxDeviceGLSDL::IShaderCreate(CGxShader* sh) { + if (sh->target == GxSh_Vertex) { + this->IShaderCreateVertex(sh); + } else if (sh->target == GxSh_Pixel) { + this->IShaderCreatePixel(sh); + } +} + +void CGxDeviceGLSDL::IShaderCreatePixel(CGxShader* ps) { + BLIZZARD_ASSERT(!ps->loaded); + + ps->loaded = 1; + ps->valid = 0; + + unsigned char* codeStr = ps->code.m_data; + uint32_t codeLen = ps->code.Count(); + + if (codeLen) { + this->PatchPixelShader(ps); + + GLShader* glShader = this->m_GLSDLDevice.CreateShader( + GLShader::ShaderType::ePixelShader, + codeStr, + codeLen, + ps->m_key.m_str + ); + + glShader->Compile(nullptr); + + ps->apiSpecific = glShader; + ps->valid = 1; + } +} + +void CGxDeviceGLSDL::IShaderCreateVertex(CGxShader* vs) { + BLIZZARD_ASSERT(!vs->loaded); + + vs->loaded = 1; + vs->valid = 0; + + unsigned char* code = vs->code.m_data; + uint32_t codeLen = vs->code.Count(); + + if (codeLen) { + this->PatchVertexShader(vs); + + GLShader* glShader = this->m_GLSDLDevice.CreateShader( + GLShader::ShaderType::eVertexShader, + code, + codeLen, + vs->m_key.m_str + ); + + glShader->Compile(nullptr); + + vs->apiSpecific = glShader; + vs->valid = 1; + } +} + +void CGxDeviceGLSDL::IStateSetGLSDLDefaults() { + this->IRsForceUpdate(); + this->IRsSync(0); + + // TODO a1->unk8 = -1; + // TODO a1->unk13 = 0; + + this->m_GLSDLDevice.SetIndexBuffer(nullptr); + + GLTexture* a2 = nullptr; + GLTexture* a3 = nullptr; + // TODO this->m_GLSDLDevice.GetBackBuffer(&a2, &a3, nullptr); + // TODO this->gllunk2[12] = a2->GetMipmap(0, GL_TEXTURE_CUBE_MAP_POSITIVE_X); + // TODO this->gllunk2[13] = a3->GetMipmap(0, GL_TEXTURE_CUBE_MAP_POSITIVE_X); + + this->m_GLSDLDevice.SetFogParam(GL_FOG_DENSITY, 0.0f); + // TODO this->InitLights(); + + // TODO this->gllunk2[10] = 0; + + this->ISceneBegin(); +} + +void CGxDeviceGLSDL::IStateSync() { + this->IShaderConstantsFlush(); + this->IRsSync(0); + this->IStateSyncXforms(); + this->IStateSyncLights(); + this->IStateSyncEnables(); + this->IStateSyncMaterial(); + // TODO clip plane + this->IStateSyncScissorRect(); + this->IStateSyncVertexPtrs(); + this->IStateSyncIndexPtr(); +} + +void CGxDeviceGLSDL::IStateSyncEnables() { + // TODO +} + +void CGxDeviceGLSDL::IStateSyncIndexPtr() { + if (this->m_primIndexDirty) { + this->m_primIndexDirty = 0; + this->m_GLSDLDevice.SetIndexBuffer(static_cast(this->m_primIndexBuf->m_pool->m_apiSpecific)); + } +} + +void CGxDeviceGLSDL::IStateSyncLights() { + // TODO +} + +void CGxDeviceGLSDL::IStateSyncMaterial() { + // TODO +} + +void CGxDeviceGLSDL::IStateSyncScissorRect() { + // TODO +} + +void CGxDeviceGLSDL::IStateSyncVertexPtrs() { + static int32_t gxAttribSlot[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; + + static int32_t gxAttribTypeToGLSDLAttribType[] = { + GLVT_UBYTE4N, + GLVT_UBYTE4, + GLVT_UBYTE4N, + GLVT_FLOAT2, + GLVT_FLOAT3, + GLVT_SHORT2N, + GLVT_FLOAT1 + }; + + if (this->m_primVertexFormat < GxVertexBufferFormats_Last) { + GLVertexFormat* glFormat = &this->m_glFormats[this->m_primVertexFormat]; + + if (glFormat->m_Size) { + this->m_GLSDLDevice.SetVertexFormat(glFormat); + + this->m_GLSDLDevice.SetVertexBuffer( + 0, + static_cast(this->m_primVertexBuf->m_pool->m_apiSpecific), + this->m_primVertexBuf->m_index, + this->m_primVertexSize + ); + + return; + } + } + + GLVertexFormat* glFormat = nullptr; + + if (this->m_primVertexFormat < GxVertexBufferFormats_Last) { + glFormat = &this->m_glFormats[this->m_primVertexFormat]; + } + + for (int32_t i = 0; i < GxVAs_Last; i++) { + if ((1 << i) & this->m_primVertexMask) { + CGxVertexAttrib* attrib = &this->m_primVertexFormatAttrib[i]; + + uint32_t j = glFormat->m_Size; + + glFormat->m_Attribs[j].stream = 0; + glFormat->m_Attribs[j].slot = gxAttribSlot[attrib->attrib]; + glFormat->m_Attribs[j].type = gxAttribTypeToGLSDLAttribType[attrib->type]; + glFormat->m_Attribs[j].offset = attrib->offset; + + glFormat->m_Size++; + } + } + + this->m_GLSDLDevice.SetVertexFormat(glFormat); + + this->m_GLSDLDevice.SetVertexBuffer( + 0, + static_cast(this->m_primVertexBuf->m_pool->m_apiSpecific), + this->m_primVertexBuf->m_index, + this->m_primVertexSize + ); +} + +void CGxDeviceGLSDL::IStateSyncXforms() { + // TODO this->IXformSetWorld(); + // TODO this->IXformSetTex(); + + this->IXformSetViewport(); +} + +void CGxDeviceGLSDL::ITexCreate(CGxTex* gxTex) { + uint32_t width, height, baseMip, mipCount; + this->ITexWHDStartEnd(gxTex, width, height, baseMip, mipCount); + + uint32_t flags = 0; + + flags |= gxTex->m_flags.m_renderTarget ? GLTFLAG_RENDERTARGET : 0x0; + flags |= gxTex->m_format == GxTex_D24X8 ? GLTFLAG_DEPTH : 0x0; + flags |= gxTex->m_flags.m_generateMipMaps ? GLTFLAG_AUTOGEN_MIPMAP : 0x0; + + // TODO + // 2 bits, appearing at m_maxAnisotropy + 1 bit + // flags |= gxTex->m_flags & 0xC000 : GLTFLAG_READ_ACCESS : 0x0; + + if (gxTex->m_target == 1) { + gxTex->m_apiSpecificData = this->m_GLSDLDevice.CreateTextureCubeMap( + width, + mipCount - baseMip, + CGxDeviceGLSDL::s_gxTexFmtToGLSDLFmt[gxTex->m_format], + flags + ); + } else { + gxTex->m_apiSpecificData = this->m_GLSDLDevice.CreateTexture2D( + width, + height, + mipCount - baseMip, + CGxDeviceGLSDL::s_gxTexFmtToGLSDLFmt[gxTex->m_format], + flags + ); + + if (gxTex->m_flags.m_renderTarget) { + gxTex->m_apiSpecificData2 = this->m_GLSDLDevice.CreateTexture2D( + width, + height, + mipCount - baseMip, + GLTF_D24, + flags | GLTFLAG_DEPTH + ); + } + } + + this->ITexSetFlags(gxTex); + + // TODO + // CGxDevice::IOnAcquireCPUTex(); + + gxTex->m_needsCreation = 0; +} + +void CGxDeviceGLSDL::ITexMarkAsUpdated(CGxTex* texId) { + if (texId->m_needsFlagUpdate && !texId->m_needsCreation && (texId->m_apiSpecificData || texId->m_apiSpecificData2)) { + this->ITexSetFlags(texId); + } + + if (texId->m_needsUpdate/* TODO && (this + 4000) */) { + if (texId->m_needsCreation || (!texId->m_apiSpecificData && !texId->m_apiSpecificData2)) { + this->ITexCreate(texId); + } + + if (!texId->m_needsCreation && (texId->m_apiSpecificData || texId->m_apiSpecificData2)) { + if (texId->m_userFunc) { + this->ITexUpload(texId); + } + + CGxDevice::ITexMarkAsUpdated(texId); + } + } +} + +void CGxDeviceGLSDL::ITexSetFlags(CGxTex* texId) { + GLTexture* v2 = static_cast(texId->m_apiSpecificData); + GLSDLTexSetFlags(texId, v2); + texId->m_needsFlagUpdate = 0; +} + +void CGxDeviceGLSDL::ITexUpload(CGxTex* texId) { + uint32_t texelStrideInBytes; + const void* texels = nullptr; + + texId->m_userFunc( + GxTex_Lock, + texId->m_width, + texId->m_height, + 0, + 0, + texId->m_userArg, + texelStrideInBytes, + texels + ); + + uint32_t width, height, baseMip, mipCount; + this->ITexWHDStartEnd(texId, width, height, baseMip, mipCount); + + int32_t numFace = texId->m_target == GxTex_CubeMap ? 6 : 1; + + for (int32_t face = 0; face < numFace; face++) { + for (int32_t mipLevel = baseMip; mipLevel < mipCount; mipLevel++) { + texels = nullptr; + + texId->m_userFunc( + GxTex_Latch, + texId->m_width >> mipLevel, + texId->m_height >> mipLevel, + face, + mipLevel, + texId->m_userArg, + texelStrideInBytes, + texels + ); + + BLIZZARD_ASSERT(texels != nullptr || texId->m_flags.m_renderTarget); + + if (!texId->m_flags.m_renderTarget) { + GLMipmap* mipmap = static_cast(texId->m_apiSpecificData)->GetMipmap(mipLevel - baseMip, CGxDeviceGLSDL::s_glCubeMapFaces[face]); + + CiRect lockRect = { + texId->m_updateRect.minY >> mipLevel, + texId->m_updateRect.minX >> mipLevel, + (texId->m_updateRect.maxY >> mipLevel) + 1, + (texId->m_updateRect.maxX >> mipLevel) + 1 + }; + + lockRect.maxY = std::min(lockRect.maxY, static_cast(height)); + lockRect.maxX = std::min(lockRect.maxX, static_cast(width)); + + BLIZZARD_ASSERT(lockRect.minX >= 0 && lockRect.maxX <= static_cast(width)); + BLIZZARD_ASSERT(lockRect.minY >= 0 && lockRect.maxY <= static_cast(height)); + + GLRect rect = { + lockRect.minX, + lockRect.minY, + lockRect.maxX - lockRect.minX, + lockRect.maxY - lockRect.minY + }; + + if (mipmap->GetFormatInfo().m_IsCompressed) { + int32_t v17 = rect.width + (rect.left & 3); + rect.left &= 0xFFFFFFFC; + rect.width = (v17 + 3) & 0xFFFFFFFC; + rect.width = std::max(rect.width, 4); + + int32_t v20 = rect.height + (rect.top & 3); + rect.top &= 0xFFFFFFFC; + rect.height = (v20 + 3) & 0xFFFFFFFC; + rect.height = std::max(rect.height, 4); + } + + const void* src = texels; + + if (texId->m_flags.m_bit15) { + src = texels; + } else if (texId->m_dataFormat == GxTex_Dxt1 || texId->m_dataFormat == GxTex_Dxt3 || texId->m_dataFormat == GxTex_Dxt5) { + uint32_t bytesPerBlock = CGxDevice::s_texFormatBytesPerBlock[texId->m_dataFormat]; + uint32_t offset = (bytesPerBlock * (rect.left >> 2)) + (texelStrideInBytes * (rect.top >> 2)); + + src = static_cast(texels) + offset; + } else { + uint32_t bitDepth = CGxDevice::s_texFormatBitDepth[texId->m_dataFormat]; + uint32_t offset = ((bitDepth * rect.left) >> 3) + (texelStrideInBytes * rect.top); + + src = static_cast(texels) + offset; + } + + uint32_t dstStride = mipmap->GetPitch(); + + BlitFormat dstFmt = GxGetBlitFormat(texId->m_format); + + void* dst = mipmap->Map(GL_WRITE_ONLY, &rect); + + BlitFormat srcFmt = GxGetBlitFormat(texId->m_dataFormat); + + C2iVector size = { rect.width, rect.height }; + + Blit(size, BlitAlpha_0, src, texelStrideInBytes, srcFmt, dst, dstStride, dstFmt); + + mipmap->Unmap(); + } + + width = std::max(width >> 1, 1u); + height = std::max(height >> 1, 1u); + } + } + + texId->m_userFunc( + GxTex_Unlock, + texId->m_width, + texId->m_height, + 0, + 0, + texId->m_userArg, + texelStrideInBytes, + texels + ); +} + +void CGxDeviceGLSDL::IXformSetProjection(const C44Matrix& matrix) { + C44Matrix glSDLMat = matrix; + + if (!this->MasterEnable(GxMasterEnable_NormalProjection) && matrix.d3 != 1.0f) { + C44Matrix shrink = { + 0.2f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.2f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.2f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f + }; + + glSDLMat = glSDLMat * shrink; + } + + this->m_GLSDLDevice.SetTransform(GL_PROJECTION, reinterpret_cast(&glSDLMat)); + + this->m_projNative = glSDLMat; + + this->m_projNative.a1 *= -1.0f; + this->m_projNative.b1 *= -1.0f; + this->m_projNative.c1 *= -1.0f; + this->m_projNative.d1 *= -1.0f; +} + +void CGxDeviceGLSDL::IXformSetView(const C44Matrix& matrix) { + this->m_GLSDLDevice.SetTransform('VIEW', reinterpret_cast(&matrix)); +} + +void CGxDeviceGLSDL::IXformSetViewport() { + auto window = this->DeviceCurWindow(); + + GLRect viewport = { + static_cast((this->m_viewport.x.l * window.maxX) + 0.5f), + static_cast(((1.0f - this->m_viewport.y.h) * window.maxY) + 0.5f), + static_cast(((this->m_viewport.x.h - this->m_viewport.x.l) * window.maxX) + 0.5f), + static_cast(((this->m_viewport.y.h - this->m_viewport.y.l) * window.maxY) + 0.5f), + }; + + this->m_GLSDLDevice.SetViewport(viewport, this->m_viewport.z.l, this->m_viewport.z.h); + + // TODO (this + 4020) = 0; +} + +void CGxDeviceGLSDL::PatchPixelShader(CGxShader* ps) { + // TODO +} + +void CGxDeviceGLSDL::PatchVertexShader(CGxShader* vs) { + if (vs->patched) { + return; + } + + vs->patched = 1; + + // TODO properly calculate v2 + int32_t v2 = 192; + + char buf[64]; + + for (int32_t i = 0; i < vs->code.Count(); i++) { + char* str = reinterpret_cast(&vs->code[i]); + + if (!SStrCmp(str, ".local", 6)) { + memcpy(str, ".env ", 6); + + int v16, v12, n; + if (str[6] == '[' && sscanf(&str[4], " [%d..%d]%n", &v16, &v12, &n) == 2 && v12 == 93) { + SStrPrintf(buf, sizeof(buf), "[%d..%d] ", v16, v2 - 1); + memcpy(&str[4], buf, n); + } + } + + int32_t v13, n; + if (sscanf(str, "PARAM c[%d] = { %n", &v13, &n) == 1 && v13 == 94) { + SStrPrintf(buf, sizeof(buf), "PARAM c[%d]={ ", v2); + memcpy(str, buf, n); + } + } +} + +void CGxDeviceGLSDL::PoolSizeSet(CGxPool* pool, uint32_t size) { + if (pool->m_usage == GxPoolUsage_Stream) { + pool->unk1C = 0; + } + + GLBuffer* buffer = reinterpret_cast(pool->m_apiSpecific); + + if (buffer) { + delete buffer; + } + + pool->m_size = size; + + pool->m_apiSpecific = this->m_GLSDLDevice.CreateBuffer( + CGxDeviceGLSDL::s_poolTarget2BufferType[pool->m_target], + size, + nullptr, + CGxDeviceGLSDL::s_poolUsage2BufferUsage[pool->m_usage], + CGxDeviceGLSDL::s_poolTarget2BufferFormat[pool->m_target] + ); +} + +void CGxDeviceGLSDL::Resize(uint32_t width, uint32_t height) { + this->m_GLSDLDevice.Resize(width, height); + + CRect rect = { 0.0f, 0.0f, static_cast(height), static_cast(width) }; + this->DeviceSetDefWindow(rect); +} + +void CGxDeviceGLSDL::SceneClear(uint32_t mask, CImVector color) { + CGxDevice::SceneClear(mask, color); + + if (!this->m_context) { + return; + } + + uint32_t glMask = 0x0; + + if (mask & 0x1) { + glMask |= GL_COLOR_BUFFER_BIT; + } + + if (mask & 0x2) { + glMask |= GL_DEPTH_BUFFER_BIT; + } + + this->IXformSetViewport(); + this->IStateSyncScissorRect(); + + GLColor4f glColor = { + color.r / 255.0f, + color.g / 255.0f, + color.b / 255.0f, + color.a / 255.0f + }; + + this->m_GLSDLDevice.Clear(glMask, glColor, 1.0, 0); +} + +void CGxDeviceGLSDL::ScenePresent() { + if (this->m_context) { + // TODO + + CGxDevice::ScenePresent(); + + // TODO + + this->m_GLSDLDevice.Swap(); + + // TODO + + CGxDevice::ShaderConstantsClear(); + } + + // TODO +} + +void CGxDeviceGLSDL::ShaderCreate(CGxShader* shaders[], EGxShTarget target, const char* a4, const char* a5, int32_t permutations) { + CGxDevice::ShaderCreate(shaders, target, a4, a5, permutations); + + if (permutations == 1 && !shaders[0]->loaded) { + if (target == GxSh_Vertex) { + this->IShaderCreateVertex(shaders[0]); + } else if (target == GxSh_Pixel) { + this->IShaderCreatePixel(shaders[0]); + } + } +} + +int32_t CGxDeviceGLSDL::StereoEnabled() { + return 0; +} + +void CGxDeviceGLSDL::TexDestroy(CGxTex* texId) { + BLIZZARD_ASSERT(texId); + + auto texture = static_cast(texId->m_apiSpecificData); + + if (texture) { + texture->Release(); + texId->m_apiSpecificData = nullptr; + } + + // TODO CGxDevice::IOnReleaseCPUTex(texId); + CGxDevice::TexDestroy(texId); +} + +void CGxDeviceGLSDL::XformSetProjection(const C44Matrix& matrix) { + CGxDevice::XformSetProjection(matrix); + this->IXformSetProjection(matrix); +} + +void CGxDeviceGLSDL::XformSetView(const C44Matrix& matrix) { + CGxDevice::XformSetView(matrix); + this->IXformSetView(matrix); +} diff --git a/src/gx/glsdl/CGxDeviceGLSDL.hpp b/src/gx/glsdl/CGxDeviceGLSDL.hpp new file mode 100644 index 0000000..316317c --- /dev/null +++ b/src/gx/glsdl/CGxDeviceGLSDL.hpp @@ -0,0 +1,82 @@ +#ifndef GX_GL_SDL_C_GX_DEVICE_GL_SDL_HPP +#define GX_GL_SDL_C_GX_DEVICE_GL_SDL_HPP + +#include "gx/CGxDevice.hpp" +#include "gx/glsdl/GLSDLDevice.hpp" +#include "gx/glsdl/GLSDLWindow.hpp" + +class CGxBatch; +class CGxShader; + +class CGxDeviceGLSDL : public CGxDevice { + public: + // Static variables + static GLEnum s_glCubeMapFaces[]; + static GLEnum s_glDstBlend[]; + static GLEnum s_glSrcBlend[]; + static GLTextureFormat s_gxTexFmtToGLSDLFmt[]; + static GLEnum s_poolTarget2BufferFormat[]; + static GLEnum s_poolTarget2BufferType[]; + static GLEnum s_poolUsage2BufferUsage[]; + static GLEnum s_primitiveConversion[]; + + // Member variables + GLSDLDevice m_GLSDLDevice; + GLSDLWindow m_GLSDLWindow; + GLVertexFormat m_glFormats[GxVertexBufferFormats_Last] = {}; + + // Virtual member functions + virtual void ITexMarkAsUpdated(CGxTex*); + virtual void IRsSendToHw(EGxRenderState); + virtual int32_t DeviceCreate(int32_t (*windowProc)(void* window, uint32_t message, uintptr_t wparam, intptr_t lparam), const CGxFormat&); + virtual int32_t DeviceSetFormat(const CGxFormat&); + virtual void* DeviceWindow(); + virtual void DeviceWM(EGxWM wm, uintptr_t param1, uintptr_t param2) {}; + virtual void CapsWindowSize(CRect&); + virtual void CapsWindowSizeInScreenCoords(CRect& dst); + virtual void ScenePresent(); + virtual void SceneClear(uint32_t, CImVector); + virtual void XformSetProjection(const C44Matrix&); + virtual void XformSetView(const C44Matrix&); + virtual void Draw(CGxBatch* batch, int32_t indexed); + virtual void PoolSizeSet(CGxPool*, uint32_t); + virtual char* BufLock(CGxBuf*); + virtual int32_t BufUnlock(CGxBuf*, uint32_t); + virtual void BufData(CGxBuf* buf, const void* data, size_t size, uintptr_t offset); + virtual void TexDestroy(CGxTex* texId); + virtual void IShaderCreate(CGxShader*); + virtual void ShaderCreate(CGxShader*[], EGxShTarget, const char*, const char*, int32_t); + virtual int32_t StereoEnabled(); + + // Member functions + CGxDeviceGLSDL(); + char* IBufLock(CGxBuf*); + int32_t IBufUnlock(CGxBuf*); + void ISceneBegin(); + void ISetCaps(const CGxFormat& format); + void IShaderBindPixel(CGxShader*); + void IShaderBindVertex(CGxShader*); + void IShaderConstantsFlush(); + void IShaderCreatePixel(CGxShader*); + void IShaderCreateVertex(CGxShader*); + void IStateSetGLSDLDefaults(); + void IStateSync(); + void IStateSyncEnables(); + void IStateSyncIndexPtr(); + void IStateSyncLights(); + void IStateSyncMaterial(); + void IStateSyncScissorRect(); + void IStateSyncVertexPtrs(); + void IStateSyncXforms(); + void ITexCreate(CGxTex*); + void ITexSetFlags(CGxTex*); + void ITexUpload(CGxTex*); + void IXformSetProjection(const C44Matrix&); + void IXformSetView(const C44Matrix&); + void IXformSetViewport(); + void PatchPixelShader(CGxShader*); + void PatchVertexShader(CGxShader*); + void Resize(uint32_t width, uint32_t height); +}; + +#endif diff --git a/src/gx/glsdl/GL.cpp b/src/gx/glsdl/GL.cpp new file mode 100644 index 0000000..e5c5e8e --- /dev/null +++ b/src/gx/glsdl/GL.cpp @@ -0,0 +1,50 @@ +#include "gx/glsdl/GL.hpp" + +TextureFormatInfo k_TextureFormatInfo[GLTF_NUM_TEXTURE_FORMATS] = { + { 0, 0, 0, 0, 0, "GLTF INVALID!!" }, + { GL_RGBA8, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, 0, 4, "ARGB8888" }, + { GL_RGB8, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, 0, 4, "XRGB8888" }, + { GL_RGBA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, 0, 4, "RGBA8888" }, + { GL_RGBA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, 0, 4, "ABGR8888" }, + { GL_RGB8, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, 0, 4, "ARGB0888" }, + { GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE, 0, 3, "RGB888" }, + { GL_RGB8, GL_BGR, GL_UNSIGNED_BYTE, 0, 3, "BGR888" }, + { GL_RGBA32F_ARB, GL_RGBA, GL_FLOAT, 0, 16, "RGBA32F" }, + { GL_RGBA16F_ARB, GL_RGBA, GL_HALF_FLOAT, 0, 8, "RGBA16F" }, + { GL_RGB16F_ARB, GL_RGB, GL_HALF_FLOAT, 0, 6, "RG16F" }, + { GL_DEPTH_COMPONENT32, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0, 4, "D32" }, + { GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0, 4, "D24" }, + { GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, 0, 2, "D16" }, + { GL_DEPTH_COMPONENT32, GL_DEPTH_COMPONENT, GL_HALF_FLOAT, 0, 4, "DF" }, + { GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, 0, 4, "D24S8" }, + { GL_ALPHA8, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, 0, 1, "S8" }, + { GL_RGBA4, GL_BGRA, GL_UNSIGNED_SHORT_4_4_4_4_REV, 0, 2, "ARGB4444" }, + { GL_RGB5_A1, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, 0, 2, "ARGB1555" }, + { GL_RGB5, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, 0, 2, "ARGB0555" }, + { GL_RGB, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, 0, 2, "RGB565" }, + { GL_RGBA, GL_BGRA, GL_UNSIGNED_INT_2_10_10_10_REV, 0, 4, "A2RGB10" }, + { GL_RGB16, GL_RGB, GL_UNSIGNED_SHORT, 0, 6, "RGB16" }, + { GL_LUMINANCE8, GL_LUMINANCE, GL_UNSIGNED_BYTE, 0, 1, "L8" }, + { GL_ALPHA8, GL_ALPHA, GL_UNSIGNED_BYTE, 0, 1, "A8" }, + { GL_LUMINANCE8_ALPHA8, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, 0, 2, "A8L8" }, + { GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, GL_RGBA, GL_UNSIGNED_BYTE, 1, 8, "DXT1" }, + { GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, GL_RGBA, GL_UNSIGNED_BYTE, 1, 16, "DXT3" }, + { GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, GL_RGBA, GL_UNSIGNED_BYTE, 1, 16, "DXT5" } +}; + +VertexTypeInfo k_VertexTypeInfo[GLVT_NUM_VERTEX_TYPES] = { + { 0, 0, 0, 0, "INVALID" }, + { GL_FLOAT, 1, 0, 4, "FLOAT1" }, + { GL_FLOAT, 2, 0, 8, "FLOAT2" }, + { GL_FLOAT, 3, 0, 12, "FLOAT3" }, + { GL_FLOAT, 4, 0, 16, "FLOAT4" }, + { GL_UNSIGNED_BYTE, 4, 0, 4, "UBYTE4" }, + { GL_UNSIGNED_BYTE, 4, 1, 4, "UBYTE4N" }, + { GL_SHORT, 1, 0, 2, "SHORT" }, + { GL_SHORT, 2, 0, 4, "SHORT2" }, + { GL_SHORT, 4, 0, 8, "SHORT4" }, + { GL_SHORT, 2, 1, 4, "SHORT2N" }, + { GL_SHORT, 4, 1, 8, "SHORT4N" }, + { GL_UNSIGNED_SHORT, 2, 1, 4, "USHORT2N" }, + { GL_UNSIGNED_SHORT, 4, 1, 8, "USHORT4N" } +}; diff --git a/src/gx/glsdl/GL.hpp b/src/gx/glsdl/GL.hpp new file mode 100644 index 0000000..80ab4bd --- /dev/null +++ b/src/gx/glsdl/GL.hpp @@ -0,0 +1,33 @@ +#ifndef GX_GL_SDL_GL_HPP +#define GX_GL_SDL_GL_HPP + +#include +#include + +#include "gx/glsdl/GLTypes.hpp" + +typedef GLenum GLEnum; + +#define kMAX_VERTEX_ATTRIBS 16 + +struct TextureFormatInfo { + GLenum m_InternalFormat; + GLenum m_DataFormat; + GLenum m_DataType; + int32_t m_IsCompressed; + int32_t m_BytePerPixel; + char m_Name[16]; +}; + +struct VertexTypeInfo { + GLenum m_Type; + GLint m_Size; + GLboolean m_Normalized; + GLint m_ByteSize; + const char* m_Name; +}; + +extern TextureFormatInfo k_TextureFormatInfo[GLTF_NUM_TEXTURE_FORMATS]; +extern VertexTypeInfo k_VertexTypeInfo[GLVT_NUM_VERTEX_TYPES]; + +#endif diff --git a/src/gx/glsdl/GLBatch.hpp b/src/gx/glsdl/GLBatch.hpp new file mode 100644 index 0000000..83632d1 --- /dev/null +++ b/src/gx/glsdl/GLBatch.hpp @@ -0,0 +1,45 @@ +#ifndef GX_GL_SDL_GL_BATCH_HPP +#define GX_GL_SDL_GL_BATCH_HPP + +#include "gx/glsdl/GLBuffer.hpp" +#include "gx/glsdl/GLShader.hpp" +#include "gx/glsdl/GLTexture.hpp" +#include "gx/glsdl/GLTypes.hpp" +#include "gx/glsdl/GLVertexFormat.hpp" +#include + +class GLBatch { + public: + GLShader* var0; + GLShader* var1; + GLTexture* textures[16]; + GLBuffer* var3; + GLBuffer* var4[4]; + uint32_t var5[4]; + uint32_t var6[4]; + GLVertexFormat* var7; + uint32_t var8; + uint32_t var9; + uint32_t var10; + uint32_t var11; + uint32_t var12; + uint32_t var13; + uint32_t var14; + int32_t var15; + bool var16; + bool var17; + GLStates var18; + GLTexture2D* colorBuffer[4]; + GLTexture2D* var20; + uint32_t var21[128]; + char var22[64]; + char var23[1024]; + uint32_t var24; + bool var25; + int64_t var26; + int64_t var27; + float var28[4096]; + float var29[1024]; +}; + +#endif diff --git a/src/gx/glsdl/GLBuffer.cpp b/src/gx/glsdl/GLBuffer.cpp new file mode 100644 index 0000000..e0f22e2 --- /dev/null +++ b/src/gx/glsdl/GLBuffer.cpp @@ -0,0 +1,130 @@ +#include "gx/glsdl/GLBuffer.hpp" +#include "gx/glsdl/GLSDLDevice.hpp" +#include "gx/glsdl/GLPool.hpp" +#include "gx/glsdl/GL.hpp" +#include +#include + +bool GLBuffer::m_UsingVBO = 1; + +GLEnum GLBuffer::s_FlagToAccess[] = { + GL_READ_WRITE, // GLMap_None + GL_WRITE_ONLY, // GLMap_Unk1 + GL_WRITE_ONLY, // GLMap_Unk2 + GL_READ_ONLY // GLMap_Unk3 +}; + +GLBuffer* GLBuffer::Create(GLEnum type, uint32_t size, const void* a3, GLEnum usage, GLEnum format) { + GLBuffer* buffer = GLPool::Get()->GetNextObject(); + + buffer->m_Type = type; + buffer->m_Size = size; + buffer->m_Usage = usage; + buffer->m_IndexFormat = format; + + GLSDLDevice* device = GLSDLDevice::Get(); + device->BindBuffer(buffer, GL_ZERO); + + if (GLBuffer::m_UsingVBO) { + glBufferData(buffer->m_Type, buffer->m_Size, a3, buffer->m_Usage); + // glBufferParameteriAPPLE(buffer->m_Type, GL_BUFFER_SERIALIZED_MODIFY_APPLE, buffer->m_Usage - GL_DYNAMIC_DRAW > 1); + // glBufferParameteriAPPLE(buffer->m_Type, GL_BUFFER_FLUSHING_UNMAP_APPLE, 0); + } else { + Blizzard::Memory::Free(buffer->m_Data); + + void* data = Blizzard::Memory::Allocate(size); + if (a3) { + memcpy(data, a3, size); + } + + buffer->m_Data = reinterpret_cast(data); + } + + // TODO + // buffer->m_TimeStamp = Blizzard::Time::GetTimestamp(); + + return buffer; +} + +GLBuffer::GLBuffer() : GLObject() { + if (GLBuffer::m_UsingVBO) { + this->m_BufferID = GLPool::Get()->GetNextName(); + } +} + +char* GLBuffer::Map(uint32_t offset, uint32_t size, eMapFlag flag) { + BLIZZARD_ASSERT((offset + size) <= this->m_Size); + BLIZZARD_ASSERT(this->m_Usage == GL_STATIC_DRAW || flag != GLMap_None); + BLIZZARD_ASSERT(this->m_MapFlag == GLMap_NotMapped); + BLIZZARD_ASSERT(flag >= GLMap_None && flag < GLMap_Count); + + this->m_MapOffset = offset; + this->m_MapSize = offset + size == 0 ? this->m_Size : size; + this->m_MapFlag = flag; + + if (GLBuffer::m_UsingVBO) { + GLSDLDevice* device = GLSDLDevice::Get(); + device->BindBuffer(this, GL_ZERO); + + if (flag == GLMap_Unk2) { + if (this->m_Usage - GL_DYNAMIC_DRAW <= 1) { + BLIZZARD_ASSERT(offset == 0); + } + + glBufferData(this->m_Type, this->m_Size, nullptr, this->m_Usage); + } + + void* data = glMapBuffer(this->m_Type, GLBuffer::s_FlagToAccess[flag]); + this->m_Data = reinterpret_cast(data); + + BLIZZARD_ASSERT(this->m_Data != nullptr); + } + + return this->m_Data + offset; +} + +void GLBuffer::ReleaseObject() { + if (GLBuffer::m_UsingVBO) { + if (this->m_Type) { + GLSDLDevice* device = GLSDLDevice::Get(); + device->BindBuffer(this, GL_ZERO); + + glBufferData(this->m_Type, 1, nullptr, this->m_Usage); + + // TODO GLPool::GLObjectPool::Push((GLPool::m_pool + 32776), this); + } else { + // TODO GLPool::GLObjectPool::Push((GLPool::m_pool + 32776), this); + } + } else { + Blizzard::Memory::Free(this->m_Data); + this->m_Data = nullptr; + + // TODO GLPool::GLObjectPool::Push((GLPool::m_pool + 32776), this); + } +} + +void GLBuffer::Unmap(uint32_t size) { + BLIZZARD_ASSERT((this->m_MapOffset + size) <= m_Size); + + GLSDLDevice* device = GLSDLDevice::Get(); + device->BindBuffer(this, GL_ZERO); + + if (this->m_MapFlag != 3) { + if (GLBuffer::m_UsingVBO) { + glFlushMappedBufferRange(this->m_Type, this->m_MapOffset, size ? size : this->m_MapSize); + } + + // TODO + // this->m_TimeStamp = Blizzard::Time::GetTimestamp(); + } + + if (!GLBuffer::m_UsingVBO) { + this->m_MapFlag = GLMap_NotMapped; + return; + } + + GLboolean result = glUnmapBuffer(this->m_Type); + BLIZZARD_ASSERT(result); + + this->m_MapFlag = GLMap_NotMapped; +} diff --git a/src/gx/glsdl/GLBuffer.hpp b/src/gx/glsdl/GLBuffer.hpp new file mode 100644 index 0000000..93ed6d5 --- /dev/null +++ b/src/gx/glsdl/GLBuffer.hpp @@ -0,0 +1,47 @@ +#ifndef GX_GL_SDL_GL_BUFFER_HPP +#define GX_GL_SDL_GL_BUFFER_HPP + +#include "gx/glsdl/GL.hpp" +#include "gx/glsdl/GLObject.hpp" +#include "gx/glsdl/GLTypes.hpp" + +class GLBuffer : public GLObject { + public: + // Types + enum eMapFlag { + GLMap_NotMapped = -1, + GLMap_None = 0, + GLMap_Unk1 = 1, + GLMap_Unk2 = 2, + GLMap_Unk3 = 3, + GLMap_Count = 4 + }; + + // Static variables + static bool m_UsingVBO; + static GLEnum s_FlagToAccess[]; + + // Static functions + static GLBuffer* Create(GLEnum, uint32_t, const void*, GLEnum, GLEnum); + + // Member variables + uint32_t m_Size = 0; + GLEnum m_Type = 0; + GLEnum m_Usage = 0; + uint32_t m_BufferID = 0; + GLEnum m_IndexFormat = 0; + char* m_Data = nullptr; + uint32_t m_MapOffset = 0; + uint32_t m_MapSize = 0; + uint32_t m_MapFlag = GLMap_NotMapped; + + // Virtual member functions + virtual void ReleaseObject(); + + // Member functions + GLBuffer(); + char* Map(uint32_t, uint32_t, eMapFlag); + void Unmap(uint32_t); +}; + +#endif diff --git a/src/gx/glsdl/GLBufferPool.hpp b/src/gx/glsdl/GLBufferPool.hpp new file mode 100644 index 0000000..b00d198 --- /dev/null +++ b/src/gx/glsdl/GLBufferPool.hpp @@ -0,0 +1,8 @@ +#ifndef GX_GL_SDL_GL_BUFFER_POOL_HPP +#define GX_GL_SDL_GL_BUFFER_POOL_HPP + +class GLBufferPool { + public: +}; + +#endif diff --git a/src/gx/glsdl/GLDebugMipmap2D.hpp b/src/gx/glsdl/GLDebugMipmap2D.hpp new file mode 100644 index 0000000..7ad41aa --- /dev/null +++ b/src/gx/glsdl/GLDebugMipmap2D.hpp @@ -0,0 +1,8 @@ +#ifndef GX_GL_SDL_GL_DEBUG_MIPMAP_2D_HPP +#define GX_GL_SDL_GL_DEBUG_MIPMAP_2D_HPP + +class GLDebugMipmap2D { + public: +}; + +#endif diff --git a/src/gx/glsdl/GLFramebuffer.cpp b/src/gx/glsdl/GLFramebuffer.cpp new file mode 100644 index 0000000..ade6c35 --- /dev/null +++ b/src/gx/glsdl/GLFramebuffer.cpp @@ -0,0 +1,150 @@ +#include "gx/glsdl/GLFramebuffer.hpp" +#include "gx/glsdl/GLSDLDevice.hpp" +#include "gx/glsdl/GLMipmap.hpp" +#include "gx/glsdl/GLPool.hpp" +#include "gx/glsdl/GLTypes.hpp" +#include + +GLFramebuffer* GLFramebuffer::Create(bool a1) { + GLFramebuffer* framebuffer = new GLFramebuffer(a1); + + if (!a1) { + // TODO + // BLIZZARD_ASSERT(framebuffer->m_FramebufferID >= PoolStats::NAME_POOL_FIRST_NAME); + } + + BLIZZARD_ASSERT(framebuffer->m_NumAttach == 0); + + framebuffer->m_Width = 0; + framebuffer->m_Height = 0; + framebuffer->m_Device = GLSDLDevice::Get(); + + return framebuffer; +} + +GLFramebuffer::GLFramebuffer(bool a1) : GLObject() { + if (!a1) { + this->m_FramebufferID = GLPool::Get()->GetNextName(); + } +} + +void GLFramebuffer::Attach(GLMipmap* image, GLenum a3, int32_t a4) { + BLIZZARD_ASSERT(this->m_Device == GLSDLDevice::Get()); + + if (!image) { + this->Detach(a3); + return; + } + + if (a3 == GL_DEPTH_STENCIL) { + BLIZZARD_ASSERT(image->GetFormat() == GLTF_D24S8); + + this->Attach(image, GL_DEPTH_ATTACHMENT, 0); + this->Attach(image, GL_STENCIL_ATTACHMENT, 0); + + (*image->m_AttachPoints)[this->m_FramebufferID].point = GL_DEPTH_STENCIL; + + return; + } + + int32_t index; + + if (a3 == GL_DEPTH_ATTACHMENT) { + index = 4; + } else if (a3 == GL_STENCIL_ATTACHMENT) { + index = 5; + } else { + index = a3 - GL_COLOR_ATTACHMENT0; + } + + BLIZZARD_ASSERT(index < MAX_ATTACHMENT); + + GLMipmap* oldImage = this->m_Attachments[index]; + + if (image != oldImage) { + if (oldImage) { + oldImage->Detach(this, a3, true); + } else { + ++this->m_NumAttach; + } + + this->m_Attachments[index] = image; + + this->m_Width = image->m_Width; + this->m_Height = image->m_Height; + + image->Attach(this, a3, a4); + this->m_Device->Sub38460(0); + } + + BLIZZARD_ASSERT((*image->m_AttachPoints)[m_FramebufferID].framebuffer == this); +} + +void GLFramebuffer::Detach(GLenum a2) { + int32_t v2 = a2; + int32_t index; + + if (a2 == GL_DEPTH_STENCIL) { + index = 5; + v2 = GL_STENCIL_ATTACHMENT; + this->Detach(GL_DEPTH_ATTACHMENT); + } else if (a2 == GL_DEPTH_ATTACHMENT) { + index = 4; + } else if (a2 == GL_STENCIL_ATTACHMENT) { + index = 5; + } else { + index = a2 - GL_COLOR_ATTACHMENT0; + } + + BLIZZARD_ASSERT(index < MAX_ATTACHMENT); + + GLMipmap* oldImage = this->m_Attachments[index]; + + if (oldImage) { + oldImage->Detach(this, v2, 0); + + --this->m_NumAttach; + + this->m_Attachments[index] = 0; + + if (this->m_Device == GLSDLDevice::Get()) { + this->m_Device->Sub38460(0); + } + + if (this->m_NumAttach == 0) { + this->m_Width = 0; + this->m_Height = 0; + } + } +} + +GLMipmap* GLFramebuffer::GetAttachment(GLEnum a2) { + int32_t index; + + if (a2 == GL_DEPTH_ATTACHMENT) { + index = 4; + } else if (a2 == GL_STENCIL_ATTACHMENT) { + index = 5; + } else { + index = a2 - GL_COLOR_ATTACHMENT0; + } + + BLIZZARD_ASSERT(index < MAX_ATTACHMENT); + + return this->m_Attachments[index]; +} + +int32_t GLFramebuffer::GetSampleCount() { + return this->m_FramebufferID + ? 1 + : this->m_Device->m_Context.GetSampleCount(); +} + +bool GLFramebuffer::IsValid() { + auto status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); + return status == GL_FRAMEBUFFER_COMPLETE; +} + +void GLFramebuffer::ReleaseObject() { + // TODO +} diff --git a/src/gx/glsdl/GLFramebuffer.hpp b/src/gx/glsdl/GLFramebuffer.hpp new file mode 100644 index 0000000..1fee673 --- /dev/null +++ b/src/gx/glsdl/GLFramebuffer.hpp @@ -0,0 +1,38 @@ +#ifndef GX_GL_SDL_GL_FRAMEBUFFER_HPP +#define GX_GL_SDL_GL_FRAMEBUFFER_HPP + +#include "gx/glsdl/GL.hpp" +#include "gx/glsdl/GLObject.hpp" +#include + +#define MAX_ATTACHMENT 6 + +class GLSDLDevice; +class GLMipmap; + +class GLFramebuffer : public GLObject { + public: + // Static functions + static GLFramebuffer* Create(bool); + + // Member variables + int32_t m_Width = 0; + int32_t m_Height = 0; + uint32_t m_FramebufferID = 0; + GLSDLDevice* m_Device; + GLMipmap* m_Attachments[6] = {}; + uint32_t m_NumAttach = 0; + + // Virtual member functions + virtual void ReleaseObject(); + + // Member functions + GLFramebuffer(bool); + void Attach(GLMipmap*, GLenum, int32_t); + void Detach(GLenum); + GLMipmap* GetAttachment(GLEnum); + int32_t GetSampleCount(void); + bool IsValid(); +}; + +#endif diff --git a/src/gx/glsdl/GLGLSLProgram.cpp b/src/gx/glsdl/GLGLSLProgram.cpp new file mode 100644 index 0000000..55e59c0 --- /dev/null +++ b/src/gx/glsdl/GLGLSLProgram.cpp @@ -0,0 +1,7 @@ +#include "gx/glsdl/GLGLSLProgram.hpp" +#include "gx/glsdl/GLShader.hpp" + +GLGLSLProgram* GLGLSLProgram::Find(GLShader* a1, GLShader* a2) { + // TODO + return nullptr; +} diff --git a/src/gx/glsdl/GLGLSLProgram.hpp b/src/gx/glsdl/GLGLSLProgram.hpp new file mode 100644 index 0000000..45f2390 --- /dev/null +++ b/src/gx/glsdl/GLGLSLProgram.hpp @@ -0,0 +1,14 @@ +#ifndef GX_GL_SDL_GL_GLSL_PROGRAM_HPP +#define GX_GL_SDL_GL_GLSL_PROGRAM_HPP + +#include "gx/glsdl/GLObject.hpp" + +class GLShader; + +class GLGLSLProgram : public GLObject { + public: + // Static functions + static GLGLSLProgram* Find(GLShader*, GLShader*); +}; + +#endif diff --git a/src/gx/glsdl/GLMipmap.cpp b/src/gx/glsdl/GLMipmap.cpp new file mode 100644 index 0000000..e913ed8 --- /dev/null +++ b/src/gx/glsdl/GLMipmap.cpp @@ -0,0 +1,480 @@ +#include "gx/glsdl/GLMipmap.hpp" +#include "gx/glsdl/GLSDLDevice.hpp" +#include "gx/glsdl/GLFramebuffer.hpp" +#include + +int32_t GLMipmap::GetDepthBits() { + return this->m_DepthBits; +} + +void GLMipmap::Attach(GLFramebuffer* framebuffer, GLenum attachPoint, int32_t a4) { + if (!this->m_AttachPoints) { + this->m_AttachPoints = new std::vector(); + } + + auto& attachPoints = *this->m_AttachPoints; + auto framebufferID = framebuffer->m_FramebufferID; + + if (framebufferID >= attachPoints.size()) { + attachPoints.resize(framebufferID + 1); + } else { + BLIZZARD_ASSERT(attachPoints[framebufferID].framebuffer != framebuffer || attachPoints[framebufferID].point != attachPoint); + + auto& attach = attachPoints[framebufferID]; + + if ( + attach.point + && (attach.point != GL_DEPTH_ATTACHMENT || attachPoint != GL_STENCIL_ATTACHMENT) + && (attach.point != GL_STENCIL_ATTACHMENT || attachPoint != GL_DEPTH_ATTACHMENT) + ) { + framebuffer->Detach(attach.point); + } + } + + GLSDLDevice* device = GLSDLDevice::Get(); + + auto currentTarget = device->GetCurrentTarget(); + device->BindFramebuffer(framebuffer); + + if (framebufferID) { + if (this->m_Target == GL_TEXTURE_3D) { + glFramebufferTexture3DEXT( + GL_FRAMEBUFFER, + attachPoint, + GL_TEXTURE_3D, + this->m_Texture->m_TextureID, + this->m_Level, + a4 + ); + } else { + glFramebufferTexture2DEXT( + GL_FRAMEBUFFER, + attachPoint, + this->m_Target, + this->m_Texture->m_TextureID, + this->m_Level + ); + } + } + + if (attachPoint == GL_DEPTH_ATTACHMENT && !this->m_DepthBits) { + GLint depthBits = 0; + glGetIntegerv(GL_DEPTH_BITS, &depthBits); + this->m_DepthBits = depthBits; + } + + device->BindFramebuffer(currentTarget); + + auto& attach = attachPoints[framebufferID]; + attach.framebuffer = framebuffer; + attach.zOffset = a4; + + if ( + (attach.point != GL_DEPTH_ATTACHMENT || attachPoint != GL_STENCIL_ATTACHMENT) + && (attach.point != GL_STENCIL_ATTACHMENT || attachPoint != GL_DEPTH_ATTACHMENT) + ) { + attach.point = attachPoint; + } else { + attach.point = GL_DEPTH_STENCIL; + } +} + +void GLMipmap::Detach(GLFramebuffer* framebuffer, GLenum attachPoint, bool a4) { + GLuint framebufferID = framebuffer->m_FramebufferID; + + auto& attachPoints = *this->m_AttachPoints; + + BLIZZARD_ASSERT(attachPoints.size() >= framebufferID); + BLIZZARD_ASSERT(attachPoints[framebufferID].framebuffer == framebuffer); + + if (!a4 && framebufferID) { + GLSDLDevice* v12 = GLSDLDevice::Get(); + GLFramebuffer* v14 = v12->GetCurrentTarget(); + v12->BindFramebuffer(framebuffer); + + if (this->m_Target == GL_TEXTURE_3D) { + glFramebufferTexture3DEXT(GL_FRAMEBUFFER, attachPoint, GL_TEXTURE_3D, 0, 0, 0); + } else { + glFramebufferTexture2DEXT(GL_FRAMEBUFFER, attachPoint, this->m_Target, 0, 0); + } + + v12->BindFramebuffer(v14); + } + + GLAttachPoint* v9 = &attachPoints[framebufferID]; + + if (v9->point == GL_DEPTH_STENCIL) { + BLIZZARD_ASSERT(this->GetFormat() == GLTF_D24S8); + + if (attachPoint == GL_DEPTH_ATTACHMENT) { + v9->point = GL_STENCIL_ATTACHMENT; + } else if (attachPoint == GL_STENCIL_ATTACHMENT) { + v9->point = GL_DEPTH_ATTACHMENT; + } else { + BLIZZARD_ASSERT(false); + } + } else { + BLIZZARD_ASSERT(attachPoints[framebufferID].point == attachPoint); + + v9->framebuffer = 0; + v9->point = 0; + v9->zOffset = 0; + + // TODO + // this->m_Texture->m_TimeStamp = Blizzard::Time::GetTimestamp(); + } +} + +void GLMipmap::DetachAll() { + if (!this->m_AttachPoints) { + return; + } + + auto& attachPoints = *this->m_AttachPoints; + for (int32_t i = 0; i < attachPoints.size(); i++) { + BLIZZARD_ASSERT(attachPoints[i].point != GL_ZERO); + BLIZZARD_ASSERT(attachPoints[i].framebuffer->m_FramebufferID == i); + + attachPoints[i].framebuffer->Detach(attachPoints[i].point); + } +} + +GLTextureFormat GLMipmap::GetFormat() { + return this->m_Texture->GetFormat(); +} + +TextureFormatInfo& GLMipmap::GetFormatInfo() { + return this->m_Texture->GetFormatInfo(); +}; + +uint16_t GLMipmap::GetHeight() { + return this->m_Height; +} + +int32_t GLMipmap::GetPitch() { + int32_t bpp = this->GetFormatInfo().m_BytePerPixel; + int32_t v4 = this->m_Texture->var12 >> this->m_Level; + return v4 >= bpp ? v4 : bpp; +} + +GLTexture* GLMipmap::GetTexture() { + return this->m_Texture; +} + +uint32_t GLMipmap::GetTextureID() { + return this->m_Texture->m_TextureID; +} + +uint16_t GLMipmap::GetWidth() { + return this->m_Width; +} + +void* GLMipmap::Map(GLEnum mode, const GLBox* area) { + BLIZZARD_ASSERT(!this->m_Texture->IsSystemBuffer()); + BLIZZARD_ASSERT(this->m_Data != nullptr); + BLIZZARD_ASSERT(!this->m_Texture->IsRenderTarget()); + BLIZZARD_ASSERT(mode != GL_ZERO); + BLIZZARD_ASSERT(this->m_MapParams == nullptr); + + if (mode != GL_READ_ONLY) { + this->m_Texture->m_MappedMipmaps++; + } + + MapParams* mapParams = new MapParams(); + this->m_MapParams = mapParams; + + if (area) { + BLIZZARD_ASSERT(area->width > 0); + BLIZZARD_ASSERT(area->height > 0); + BLIZZARD_ASSERT(area->depth > 0); + BLIZZARD_ASSERT(!this->GetFormatInfo().m_IsCompressed || ((area->top & 0x3) == 0 && (area->left & 0x3) == 0 && (area->width & 0x3) == 0 && (area->height & 0x3) == 0)); + BLIZZARD_ASSERT((area->height + area->top) <= this->m_Height); + BLIZZARD_ASSERT((area->depth + area->front) <= this->m_Depth); + BLIZZARD_ASSERT((area->width + area->left) <= this->m_Width); + + mapParams->m_MapArea = { + area->left, + area->top, + area->front, + area->width, + area->height, + area->depth + }; + + int32_t size = this->GetFormatInfo().m_BytePerPixel + * this->m_Width + * mapParams->m_MapArea.depth + * mapParams->m_MapArea.height; + + mapParams->m_Size = this->GetFormatInfo().m_IsCompressed + ? size >> 4 + : size; + + mapParams->m_Unk7 = (this->GetFormatInfo().m_BytePerPixel * mapParams->m_MapArea.left) + >> this->GetFormatInfo().m_IsCompressed ? 2 : 0; + } else { + mapParams->m_MapArea = { + 0, + 0, + 0, + this->m_Width, + this->m_Height, + this->m_Depth + }; + + mapParams->m_Size = this->m_Size; + + mapParams->m_Unk7 = 0; + } + + mapParams->m_MapMode = mode; + + int32_t rowPitch = this->GetPitch(); + + BLIZZARD_ASSERT(((mapParams->m_MapArea.top * rowPitch) + mapParams->m_MapArea.left * this->GetFormatInfo().m_BytePerPixel) < (this->GetFormatInfo().m_IsCompressed ? this->m_Size << 4 : this->m_Size)); + + int32_t v22 = rowPitch * this->m_Height; + if (this->GetFormatInfo().m_IsCompressed) { + v22 >>= 2; + } + + unsigned char* v24 = this->m_Data + + ((mapParams->m_MapArea.top * rowPitch) >> (this->GetFormatInfo().m_IsCompressed ? 2 : 0)) + + (mapParams->m_MapArea.front * v22); + + mapParams->m_Unk8 = v24; + + return v24 + mapParams->m_Unk7; +} + +void* GLMipmap::Map(GLEnum mode, const GLRect* rect) { + if (rect) { + GLBox area = { + rect->left, + rect->top, + 0, + rect->width, + rect->height, + 1 + }; + + return this->Map(mode, &area); + } else { + return this->Map(mode, static_cast(nullptr)); + } +} + +void GLMipmap::ReleaseObject() { + BLIZZARD_ASSERT(this->m_MapParams == nullptr); + + this->RemoveDebugMipmap(); + this->DetachAll(); + + if (this->m_AttachPoints) { + delete this->m_AttachPoints; + } + + this->m_AttachPoints = nullptr; + this->m_Unk24 = 0; +} + +void GLMipmap::RemoveDebugMipmap() { + // TODO +} + +void GLMipmap::ResetData(GLEnum target, int32_t level, unsigned char* data) { + BLIZZARD_ASSERT(this->m_Target != GL_TEXTURE_3D || !this->GetFormatInfo().m_IsCompressed); + + this->m_Target = target; + this->m_Level = level; + this->m_Data = data; + + BLIZZARD_ASSERT(this->GetFormat() != GLTF_INVALID); + BLIZZARD_ASSERT(this->GetFormat() < GLTF_NUM_TEXTURE_FORMATS); + + if (!this->m_Texture->IsSystemBuffer() && this->m_Texture->IsRenderTarget()) { + BLIZZARD_ASSERT(!this->GetFormatInfo().m_IsCompressed); + + this->TexImage(nullptr); + this->m_Unk24 = 1; + } +} + +void GLMipmap::ResetSize(uint32_t width, uint32_t height, uint32_t depth) { + this->m_Width = width ? width : 1; + this->m_Height = height ? height : 1; + this->m_Depth = depth ? depth : 1; + + if (this->GetFormatInfo().m_IsCompressed) { + BLIZZARD_ASSERT(this->m_Depth == 1); + + this->m_Width = (this->m_Width + 3) & 0xFFFC; + this->m_Height = (this->m_Height + 3) & 0xFFFC; + } + + uint32_t v11 = this->GetFormatInfo().m_BytePerPixel; + uint32_t v20 = this->m_Texture->var12 >> this->m_Level; + + if (v20 >= v11) { + v11 = v20; + } + + uint32_t v15 = v11 * this->m_Height; + uint32_t v12; + + if (this->GetFormatInfo().m_IsCompressed) { + v12 = v15 >> 2; + } else { + v12 = v15; + } + + this->m_Size = this->m_Depth * v12; +} + +void GLMipmap::TexImage(const void* pixels) { + BLIZZARD_ASSERT((this->m_Texture->IsRenderTarget() || pixels != nullptr) && GLSDLDevice::Get()->GetVertexArrayStates().buffers[eGLBT_PIXEL_UNPACK] == 0); + + if (this->m_Target == GL_TEXTURE_3D) { + glTexImage3D( + GL_TEXTURE_3D, + this->m_Level, + this->GetFormatInfo().m_InternalFormat, + this->m_Width, + this->m_Height, + this->m_Depth, + 0, + this->GetFormatInfo().m_DataFormat, + this->GetFormatInfo().m_DataType, + pixels + ); + } else if (this->GetFormatInfo().m_IsCompressed) { + glCompressedTexImage2D( + this->m_Target, + this->m_Level, + this->GetFormatInfo().m_InternalFormat, + this->m_Width, + this->m_Height, + 0, + this->m_Size, + pixels + ); + } else { + glTexImage2D( + this->m_Target, + this->m_Level, + this->GetFormatInfo().m_InternalFormat, + this->m_Width, + this->m_Height, + 0, + this->GetFormatInfo().m_DataFormat, + this->GetFormatInfo().m_DataType, + pixels + ); + } +} + +void GLMipmap::TexSubImage(const GLBox& a2, int32_t size, const void* pixels) { + BLIZZARD_ASSERT(!this->m_Texture->IsRenderTarget() && pixels != nullptr && GLSDLDevice::Get()->GetVertexArrayStates().buffers[eGLBT_PIXEL_UNPACK] == 0); + + if (this->m_Target == GL_TEXTURE_3D) { + glPixelStorei(GL_UNPACK_ROW_LENGTH, this->m_Width); + glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, this->m_Height); + + glTexSubImage3D( + this->m_Target, + this->m_Level, + a2.left, + a2.top, + a2.front, + a2.width, + a2.height, + a2.depth, + this->GetFormatInfo().m_DataFormat, + this->GetFormatInfo().m_DataType, + pixels + ); + + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, 0); + } else if (this->GetFormatInfo().m_IsCompressed) { + glCompressedTexSubImage2D( + this->m_Target, + this->m_Level, + 0, + a2.top, + this->m_Width, + a2.height, + this->GetFormatInfo().m_InternalFormat, + size, + pixels + ); + } else { + glPixelStorei(GL_UNPACK_ROW_LENGTH, this->m_Width); + + glTexSubImage2D( + this->m_Target, + this->m_Level, + a2.left, + a2.top, + a2.width, + a2.height, + this->GetFormatInfo().m_DataFormat, + this->GetFormatInfo().m_DataType, + pixels + ); + + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + } +} + +void GLMipmap::Unmap() { + BLIZZARD_ASSERT(!this->m_Texture->IsRenderTarget()); + BLIZZARD_ASSERT(!this->m_Texture->IsSystemBuffer()); + BLIZZARD_ASSERT(this->m_MapParams != nullptr); + + if (this->m_MapParams->m_MapMode == GL_READ_ONLY) { + delete this->m_MapParams; + this->m_MapParams = nullptr; + return; + } + + GLSDLDevice* device = GLSDLDevice::Get(); + + BLIZZARD_ASSERT(this->m_Texture->m_MappedMipmaps > 0); + + this->Unmap(this->m_MapParams); + + this->m_MapParams = nullptr; +} + +void GLMipmap::Unmap(MapParams* mapParams) { + BLIZZARD_ASSERT(mapParams != nullptr); + + this->m_Texture->Bind(nullptr, 0); + + if (this->m_Unk24) { + if (this->GetFormatInfo().m_IsCompressed) { + GLBox area = { + 0, + mapParams->m_MapArea.top, + mapParams->m_MapArea.front, + this->m_Width, + mapParams->m_MapArea.height, + mapParams->m_MapArea.depth + }; + + this->TexSubImage(area, mapParams->m_Size, mapParams->m_Unk8); + } else { + this->TexSubImage(mapParams->m_MapArea, mapParams->m_Size, mapParams->m_Unk8 + mapParams->m_Unk7); + } + } else { + this->TexImage(this->m_Data); + this->m_Unk24 = 1; + } + + delete mapParams; + + // TODO + + this->m_Texture->m_MappedMipmaps--; +} diff --git a/src/gx/glsdl/GLMipmap.hpp b/src/gx/glsdl/GLMipmap.hpp new file mode 100644 index 0000000..33e7b8c --- /dev/null +++ b/src/gx/glsdl/GLMipmap.hpp @@ -0,0 +1,62 @@ +#ifndef GX_GL_SDL_GL_MIPMAP_HPP +#define GX_GL_SDL_GL_MIPMAP_HPP + +#include "gx/glsdl/GL.hpp" +#include "gx/glsdl/GLTypes.hpp" +#include +#include + +class GLFramebuffer; +class GLTexture; + +class GLMipmap { + public: + // Types + struct MapParams { + GLBox m_MapArea; + int32_t m_MapMode = 0; + int32_t m_Unk7 = 0; + unsigned char* m_Unk8 = nullptr; + int32_t m_Size = 0; + }; + + // Member variables + GLTexture* m_Texture = nullptr; + uint16_t m_Width = 0; + uint16_t m_Height = 0; + uint16_t m_Depth = 0; + uint8_t m_Level = 0; + uint8_t m_DepthBits = 0; + uint32_t m_Size = 0; + int32_t m_Target = 0; + unsigned char* m_Data = nullptr; // TODO proper type + MapParams* m_MapParams = nullptr; + std::vector* m_AttachPoints = nullptr; + uint32_t m_Unk20 = 0; + uint32_t m_Unk24 = 0; + + // Member functions + void Attach(GLFramebuffer*, GLenum, int32_t); + void Detach(GLFramebuffer*, GLenum, bool); + void DetachAll(); + int32_t GetDepthBits(void); + GLTextureFormat GetFormat(void); + TextureFormatInfo& GetFormatInfo(void); + uint16_t GetHeight(void); + int32_t GetPitch(void); + GLTexture* GetTexture(); + uint32_t GetTextureID(void); + uint16_t GetWidth(void); + void* Map(GLEnum, const GLBox*); + void* Map(GLEnum, const GLRect*); + void ReleaseObject(); + void RemoveDebugMipmap(); + void ResetData(GLEnum, int32_t, unsigned char*); + void ResetSize(uint32_t, uint32_t, uint32_t); + void TexImage(const void*); + void TexSubImage(const GLBox&, int32_t, const void*); + void Unmap(void); + void Unmap(MapParams*); +}; + +#endif diff --git a/src/gx/glsdl/GLObject.cpp b/src/gx/glsdl/GLObject.cpp new file mode 100644 index 0000000..205acca --- /dev/null +++ b/src/gx/glsdl/GLObject.cpp @@ -0,0 +1,22 @@ +#include "gx/glsdl/GLObject.hpp" +#include + +void GLObject::AddRefTwin() { +} + +uint32_t GLObject::Release() { + BLIZZARD_ASSERT(this->m_RefCount > 0); + + this->m_RefCount--; + + if (this->m_RefCount == 0) { + this->ReleaseObject(); + } + + this->ReleaseTwin(); + + return this->m_RefCount; +} + +void GLObject::ReleaseTwin() { +} diff --git a/src/gx/glsdl/GLObject.hpp b/src/gx/glsdl/GLObject.hpp new file mode 100644 index 0000000..32e0eba --- /dev/null +++ b/src/gx/glsdl/GLObject.hpp @@ -0,0 +1,22 @@ +#ifndef GX_GL_SDL_GL_OBJECT_HPP +#define GX_GL_SDL_GL_OBJECT_HPP + +#include + +class GLObject { + public: + // Member variables + GLObject* m_Next; + uint32_t m_RefCount; + int64_t m_TimeStamp; + + // Virtual member functions + virtual void ReleaseObject() = 0; + virtual void AddRefTwin(); + virtual void ReleaseTwin(); + + // Member functions + uint32_t Release(); +}; + +#endif diff --git a/src/gx/glsdl/GLPixelShader.cpp b/src/gx/glsdl/GLPixelShader.cpp new file mode 100644 index 0000000..dfe4f50 --- /dev/null +++ b/src/gx/glsdl/GLPixelShader.cpp @@ -0,0 +1,17 @@ +#include "gx/glsdl/GLPixelShader.hpp" +#include "gx/glsdl/GL.hpp" + +GLPixelShader* GLPixelShader::Create() { + // TODO + // GLPool stuff + + GLPixelShader* shader = new GLPixelShader(); + + shader->m_ShaderID = 0; + shader->m_RefCount = 1; + shader->m_ShaderType = ePixelShader; + shader->m_UsingGLSL = 0; + shader->var5 = GL_FRAGMENT_PROGRAM_ARB; + + return shader; +} diff --git a/src/gx/glsdl/GLPixelShader.hpp b/src/gx/glsdl/GLPixelShader.hpp new file mode 100644 index 0000000..eec6ded --- /dev/null +++ b/src/gx/glsdl/GLPixelShader.hpp @@ -0,0 +1,12 @@ +#ifndef GX_SDL_GL_PIXEL_SHADER_HPP +#define GX_SDL_GL_PIXEL_SHADER_HPP + +#include "gx/glsdl/GLShader.hpp" + +class GLPixelShader : public GLShader { + public: + // Static functions + static GLPixelShader* Create(void); +}; + +#endif diff --git a/src/gx/glsdl/GLPool.hpp b/src/gx/glsdl/GLPool.hpp new file mode 100644 index 0000000..18a829b --- /dev/null +++ b/src/gx/glsdl/GLPool.hpp @@ -0,0 +1,57 @@ +#ifndef GX_GL_SDL_GL_POOL_HPP +#define GX_GL_SDL_GL_POOL_HPP + +#include +#include + +template +class GLPool { + public: + // Static variables + static GLPool* m_pool; + + // Static functions + static GLPool* Get(void); + static void Init(void); + + // Member variables + std::atomic m_NextName; + + // Member functions + uint32_t GetNextName(void); + T* GetNextObject(void); + void SetNextName(uint32_t); +}; + +template +GLPool* GLPool::m_pool; + +template +GLPool* GLPool::Get() { + return GLPool::m_pool; +} + +template +void GLPool::Init() { + GLPool::m_pool = new GLPool(); +} + +template +uint32_t GLPool::GetNextName() { + return this->m_NextName++; +} + +template +T* GLPool::GetNextObject() { + // TODO + // - pop off of GLObjectPool + + return new T(); +} + +template +void GLPool::SetNextName(uint32_t name) { + this->m_NextName = name; +} + +#endif diff --git a/src/gx/glsdl/GLSDLContext.cpp b/src/gx/glsdl/GLSDLContext.cpp new file mode 100644 index 0000000..23a94fc --- /dev/null +++ b/src/gx/glsdl/GLSDLContext.cpp @@ -0,0 +1,48 @@ +#include "gx/glsdl/GLSDLContext.hpp" +#include +#include + +static bool s_GLEW_Initialized = false; + +void GLSDLContext::Create(GLSDLWindow* window) { + BLIZZARD_ASSERT(this->m_sdlGLContext == nullptr); + + this->m_sdlGLContext = SDL_GL_CreateContext(window->m_sdlWindow); + + BLIZZARD_ASSERT(this->m_sdlGLContext != nullptr); + + if (s_GLEW_Initialized == false) { + glewExperimental = true; + + auto glewError = glewInit(); + + if (glewError != GLEW_OK) { + SErrDisplayAppFatal("Error initializing GLEW: %s\n", glewGetErrorString(glewError)); + } + + s_GLEW_Initialized = true; + } +} + +void GLSDLContext::Destroy() { + BLIZZARD_ASSERT(this->m_sdlGLContext != nullptr); + + SDL_GL_DeleteContext(this->m_sdlGLContext); + this->m_sdlGLContext = nullptr; +} + +bool GLSDLContext::IsCurrentContext() { + return this->m_sdlGLContext == SDL_GL_GetCurrentContext(); +} + +void GLSDLContext::MakeCurrent(GLSDLWindow* window) { + auto status = SDL_GL_MakeCurrent(window->m_sdlWindow, this->m_sdlGLContext); + BLIZZARD_ASSERT(status == 0); +} + +int32_t GLSDLContext::GetSampleCount() { + int samples; + auto status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &samples); + BLIZZARD_ASSERT(status == 0); + return static_cast(samples); +} diff --git a/src/gx/glsdl/GLSDLContext.hpp b/src/gx/glsdl/GLSDLContext.hpp new file mode 100644 index 0000000..8fd074a --- /dev/null +++ b/src/gx/glsdl/GLSDLContext.hpp @@ -0,0 +1,20 @@ +#ifndef GX_GL_SDL_GL_SDL_CONTEXT_HPP + +#include + +#include "gx/glsdl/GLSDLWindow.hpp" +#include "gx/glsdl/GLTypes.hpp" + +class GLSDLContext { + public: + SDL_GLContext m_sdlGLContext = nullptr; + + GLSDLContext() = default; + void Create(GLSDLWindow* window); + void Destroy(); + bool IsCurrentContext(); + void MakeCurrent(GLSDLWindow* window); + int32_t GetSampleCount(); +}; + +#endif diff --git a/src/gx/glsdl/GLSDLDevice.cpp b/src/gx/glsdl/GLSDLDevice.cpp new file mode 100644 index 0000000..dd49d79 --- /dev/null +++ b/src/gx/glsdl/GLSDLDevice.cpp @@ -0,0 +1,2769 @@ +#include "gx/glsdl/GLSDLDevice.hpp" +#include "gx/glsdl/GLPool.hpp" +#include "gx/glsdl/GLUtil.hpp" +#include "gx/glsdl/GL.hpp" +#include +#include +#include +#include +#include + +#define GL_MAX_STREAM 4 + +class GLPixelShader; +class GLVertexShader; + +Blizzard::Thread::TLSSlot GLSDLDevice::m_CurrentDevice; +std::vector> GLSDLDevice::m_Devices; +bool GLSDLDevice::m_ExtColorMaskIndexed = false; +int32_t GLSDLDevice::m_StaticResourcesRefCount = 0; +GLSDLDevice::RendererInfo GLSDLDevice::m_RendererInfo; +bool GLSDLDevice::m_UseHybridShader = 0; +bool GLSDLDevice::m_ExtARBShadow = 0; +bool GLSDLDevice::m_ShaderConstantBindings = 1; +GLBuffer* GLSDLDevice::m_BlitQuadVBO = nullptr; +GLShader* GLSDLDevice::m_DeviceShaders[11] = {}; +GLTexture* GLSDLDevice::m_DeviceTextures[4] = {}; +GLVertexFormat GLSDLDevice::m_NormalBlitVF; +GLVertexFormat GLSDLDevice::m_InvertedBlitVF; +GLFramebuffer* GLSDLDevice::m_F8330C = nullptr; + +const char* GLSDLBlitVsCode = R"(!!ARBvp1.0 +PARAM c0 = { 1.0 }; +MOV result.position.xyz, vertex.attrib[0]; +MOV result.position.w, c0.x; +MOV result.texcoord[0].xyz, vertex.attrib[1]; +END)"; + +const char* GLSDLDummyVsCode = R"(!!ARBvp1.0 +PARAM c = {0.0, 0.0, 0.0, 1.0}; +MOV result.position, c; +END)"; + +const char* GLSDLBlitPsCode = R"(!!ARBfp1.0 +PARAM c0 = { 1.0 }; +TEX result.color.rgba, fragment.texcoord[0], texture[0], 2D; +END)"; + +inline void COPY_TRANSFORM(GLTransform& dst, const GLTransform& src) { + if (src.isIdentity) { + dst.isIdentity = true; + dst.isDirty = true; + } else { + dst.isIdentity = false; + dst.isDirty = true; + memcpy(dst.m, src.m, sizeof(float) * 16); + } +} + +void* Sub1D210(void* ptr) { + GLSDLDevice** ptrptr = new GLSDLDevice*; + *ptrptr = nullptr; + return ptrptr; +} + +void Sub1D230(void* ptr) { + delete static_cast(ptr); +} + +GLSDLDevice* GLSDLDevice::Get() { + return *static_cast( + Blizzard::Thread::RegisterLocalStorage(&GLSDLDevice::m_CurrentDevice, Sub1D210, 0, Sub1D230) + ); +} + +void GLSDLDevice::Set(GLSDLDevice* device) { + *static_cast( + Blizzard::Thread::RegisterLocalStorage(&GLSDLDevice::m_CurrentDevice, Sub1D210, 0, Sub1D230) + ) = device; +} + +GLSDLDevice::RendererInfo GLSDLDevice::GetRendererInfo() { + if (!GLSDLDevice::m_RendererInfo.init) { + GLSDLDevice::InitRendererInfo(); + } + + return GLSDLDevice::m_RendererInfo; +} + +void GLSDLDevice::InitRendererInfo() { + // TODO + + GLSDLDevice::m_RendererInfo.init = 1; +} + +void GLSDLDevice::InitPools() { + // TODO + // - init all pools + + GLPool::Init(); + GLPool::Get()->SetNextName(1); + + GLPool::Init(); + GLPool::Get()->SetNextName(0x21); + + GLPool::Init(); + GLPool::Get()->SetNextName(0x1); + + GLPool::Init(); + GLPool::Get()->SetNextName(0x2001); + + GLPool::Init(); + GLPool::Get()->SetNextName(0x1); +} + +void GLSDLDevice::SetOption(GLSDLDeviceOption option, bool enable) { + switch (option) { + case eUseMTGL: { + break; + } + + case eUseVertexArray: { + break; + } + + case eUseGLSL: { + break; + } + + case eCheckGLStates: { + break; + } + + case eFlushBeforeDraw: { + break; + } + + case eDeviceOption5: { + break; + } + + case eUseHybridShader: { + break; + } + + case eDeviceOption7: { + break; + } + + case eDeviceOption8: { + break; + } + + case eShaderConstantBindings: { + GLSDLDevice::m_ShaderConstantBindings = enable; + break; + } + + default: { + BLIZZARD_ASSERT(false); + } + } +} + +void GLSDLDevice::StaticInit() { + static float blitQuad[] = { + -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, + 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, + -1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, + 1.0f, -1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f + }; + + GLSDLDevice::m_BlitQuadVBO = GLBuffer::Create( + GL_ARRAY_BUFFER, + sizeof(blitQuad), + blitQuad, + GL_STATIC_DRAW, + 0 + ); + + GLSDLDevice::m_InvertedBlitVF.m_Attribs[0] = { 0, 0, GLVT_FLOAT3, 0 }; + GLSDLDevice::m_InvertedBlitVF.m_Attribs[1] = { 0, 1, GLVT_FLOAT2, 12 }; + GLSDLDevice::m_InvertedBlitVF.m_Size = 2; + + GLSDLDevice::m_NormalBlitVF.m_Attribs[0] = { 0, 0, GLVT_FLOAT3, 0 }; + GLSDLDevice::m_NormalBlitVF.m_Attribs[1] = { 0, 1, GLVT_FLOAT2, 20 }; + GLSDLDevice::m_NormalBlitVF.m_Size = 2; + + GLSDLDevice::m_F8330C = GLFramebuffer::Create(0); + + GLSDLDevice::m_DeviceShaders[0] = GLShader::Create( + GLShader::eVertexShader, + GLSDLDevice::m_UseHybridShader, + false, + "", + GLSDLBlitVsCode, + strlen(GLSDLBlitVsCode), + "", + "GL SDL Blit VS", + nullptr + ); + + GLSDLDevice::m_DeviceShaders[0]->Compile(nullptr); + + GLSDLDevice::m_DeviceShaders[1] = GLShader::Create( + GLShader::eVertexShader, + GLSDLDevice::m_UseHybridShader, + false, + "", + GLSDLDummyVsCode, + strlen(GLSDLDummyVsCode), + "", + "GL SDL Dummy VS", + nullptr + ); + + GLSDLDevice::m_DeviceShaders[1]->Compile(nullptr); + + GLSDLDevice::m_DeviceShaders[2] = GLShader::Create( + GLShader::ePixelShader, + GLSDLDevice::m_UseHybridShader, + false, + "", + GLSDLBlitPsCode, + strlen(GLSDLBlitPsCode), + "", + "GL SDL Blit PS", + nullptr + ); + + GLSDLDevice::m_DeviceShaders[2]->Compile(nullptr); + + // TODO + // - remaining device shaders + + // Device textures + + uint32_t v30 = 0; + uint32_t v31 = 0; + + auto texture0 = GLTexture2D::Create(1, 1, 1, GLTF_RGBA8888, 0x0); + *static_cast(texture0->Map(0, nullptr, v30, GL_WRITE_ONLY)) = 0xFF; + texture0->Unmap(0, GL_TEXTURE_CUBE_MAP_POSITIVE_X); + GLSDLDevice::m_DeviceTextures[0] = texture0; + + // TODO + // auto texture1 = GLTexture3D::Create(1, 1, 1, 1, GLTF_RGBA8888, 0x0); + // *texture1->Map(0, nullptr, v30, v31, GL_WRITE_ONLY) = 0xFF; + // texture1->Unmap(0, GL_TEXTURE_CUBE_MAP_POSITIVE_X); + // GLSDLDevice::m_DeviceTextures[1] = texture1; + + // TODO texture2 + + auto texture3 = GLTexture2D::Create(1, 1, 1, GLTF_D32, 0x0); + *static_cast(texture3->Map(0, nullptr, v30, GL_WRITE_ONLY)) = 0xFF; + texture3->Unmap(0, GL_TEXTURE_CUBE_MAP_POSITIVE_X); + GLSDLDevice::m_DeviceTextures[3] = texture3; +} + +GLSDLDevice::GLSDLDevice() : m_Context(), m_DefaultVertexArrayObject(true) { + // TODO + // - fill in remaining initializers +} + +void GLSDLDevice::ApplyGLBindings(const GLStates& states, bool a3) { + static GLenum texTarget[4] = { + GL_TEXTURE_2D, + GL_TEXTURE_3D, + GL_TEXTURE_CUBE_MAP, + GL_TEXTURE_RECTANGLE + }; + + for (int32_t i = 0; i < 16; ++i) { + for (int32_t t = 0; t < 4; ++t) { + if (this->m_States.binding.texture[t][i] != states.binding.texture[t][i] || a3) { + glActiveTexture(GL_TEXTURE0 + i); + glBindTexture(texTarget[t], states.binding.texture[t][i]); + } + } + } + + glActiveTexture(GL_TEXTURE0 + states.binding.currentActiveTexture); + + if (this->m_States.binding.framebuffer != states.binding.framebuffer || a3) { + glBindFramebufferEXT(GL_FRAMEBUFFER, states.binding.framebuffer); + } + + if (this->m_States.binding.renderbuffer != states.binding.renderbuffer || a3) { + glBindRenderbufferEXT(GL_RENDERBUFFER, states.binding.renderbuffer); + } + + if (this->m_States.binding.vertexArrayObject != states.binding.vertexArrayObject || a3) { + glBindVertexArray(states.binding.vertexArrayObject); + } + + if (this->m_States.binding.vertexProgram != states.binding.vertexProgram || a3) { + glBindProgramARB(GL_VERTEX_PROGRAM_ARB, states.binding.vertexProgram); + } + + if (this->m_States.binding.pixelProgram != states.binding.pixelProgram || a3) { + glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, states.binding.pixelProgram); + } + + if (this->m_States.binding.glslProgram != states.binding.glslProgram || a3) { + glUseProgram(states.binding.glslProgram); + } + + memcpy(&this->m_States.binding, &states.binding, sizeof(this->m_States.binding)); +} + +void GLSDLDevice::ApplyGLStates(const GLStates& states, bool force) { + if (force) { + for (int32_t i = 0; i < 8; ++i) { + glActiveTexture(GL_TEXTURE0 + i); + + float sPlane[] = { 1.0, 0.0, 0.0, 0.0 }; + float tPlane[] = { 0.0, 1.0, 0.0, 0.0 }; + float rPlane[] = { 0.0, 0.0, 1.0, 0.0 }; + float qPlane[] = { 0.0, 0.0, 0.0, 1.0 }; + + glTexGenfv(GL_S, GL_EYE_PLANE, sPlane); + glTexGenfv(GL_T, GL_EYE_PLANE, tPlane); + glTexGenfv(GL_R, GL_EYE_PLANE, rPlane); + glTexGenfv(GL_Q, GL_EYE_PLANE, qPlane); + glTexGenfv(GL_S, GL_OBJECT_PLANE, sPlane); + glTexGenfv(GL_T, GL_OBJECT_PLANE, tPlane); + glTexGenfv(GL_R, GL_OBJECT_PLANE, rPlane); + glTexGenfv(GL_Q, GL_OBJECT_PLANE, qPlane); + + glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, 1); + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); + glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, (GLfloat*)&GLColor4f::WHITE); + } + + glActiveTexture(GL_TEXTURE0 + states.binding.currentActiveTexture); + glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR_EXT); + glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + glPixelStorei(GL_PACK_ALIGNMENT, 1); + } + + if (this->m_States.depth.testEnable != states.depth.testEnable || force) { + if (states.depth.testEnable) { + glEnable(GL_DEPTH_TEST); + } else { + glDisable(GL_DEPTH_TEST); + } + } + + if (this->m_States.depth.compareFunc != states.depth.compareFunc || force) { + glDepthFunc(states.depth.compareFunc); + } + + if (this->m_States.depth.writeMask != states.depth.writeMask || force) { + glDepthMask(states.depth.writeMask); + } + + if (this->m_States.stencil.testEnable != states.stencil.testEnable || force) { + if (states.stencil.testEnable) { + glEnable(GL_STENCIL_TEST); + } else { + glDisable(GL_STENCIL_TEST); + } + } + + if (this->m_States.stencil.front.compareFunc != states.stencil.front.compareFunc + || this->m_States.stencil.back.compareFunc != states.stencil.back.compareFunc + || this->m_States.stencil.ref != states.stencil.ref + || this->m_States.stencil.mask != states.stencil.mask + || force) + { + glStencilFuncSeparate( + states.stencil.front.compareFunc, + states.stencil.back.compareFunc, + states.stencil.ref, + states.stencil.mask + ); + } + + if (this->m_States.stencil.front.opFail != states.stencil.front.opFail + || this->m_States.stencil.front.opZFail != states.stencil.front.opZFail + || this->m_States.stencil.front.opZPass != states.stencil.front.opZPass + || force) + { + glStencilOpSeparate( + states.stencil.useTwoSidedStencil ? GL_FRONT : GL_FRONT_AND_BACK, + states.stencil.front.opFail, + states.stencil.front.opZFail, + states.stencil.front.opZPass + ); + } + + if (states.stencil.useTwoSidedStencil) { + if (this->m_States.stencil.back.opFail != states.stencil.back.opFail + || this->m_States.stencil.back.opZFail != states.stencil.back.opZFail + || this->m_States.stencil.back.opZPass != states.stencil.back.opZPass + || force) + { + glStencilOpSeparate( + GL_BACK, + states.stencil.back.opFail, + states.stencil.back.opZFail, + states.stencil.back.opZPass + ); + } + } + + if (this->m_States.stencil.writeMask != states.stencil.writeMask || force) { + glStencilMask(states.stencil.writeMask); + } + + if (this->m_States.rasterizer.cullFaceMode != states.rasterizer.cullFaceMode || force) { + glCullFace(states.rasterizer.cullFaceMode); + } + + if (this->m_States.rasterizer.cullMode != states.rasterizer.cullMode || force) { + if (states.rasterizer.cullMode != 0) { + glEnable(GL_CULL_FACE); + glFrontFace(states.rasterizer.cullMode); + } else { + glDisable(GL_CULL_FACE); + } + } + + if (this->m_States.rasterizer.fillMode != states.rasterizer.fillMode || force) { + glPolygonMode(GL_FRONT_AND_BACK, states.rasterizer.fillMode); + } + + if (this->m_CurrentTargetDepth + && (this->m_States.rasterizer.constantDepthBias != states.rasterizer.constantDepthBias + || this->m_States.rasterizer.slopeScaledDepthBias != states.rasterizer.slopeScaledDepthBias + || force)) + { + if (states.rasterizer.slopeScaledDepthBias == 0.0 && states.rasterizer.constantDepthBias == 0.0) { + glDisable(GL_POLYGON_OFFSET_FILL); + } else { + glEnable(GL_POLYGON_OFFSET_FILL); + } + + float units; + + if (states.rasterizer.constantDepthBias == 0.0 ) { + units = 0.0; + } else { + units = + (states.rasterizer.constantDepthBias * 2.0) + * (1 << this->m_CurrentTargetDepth->GetDepthBits()); + } + + glPolygonOffset(states.rasterizer.slopeScaledDepthBias * 2.0, units); + } + + if (this->m_States.rasterizer.viewport.left != states.rasterizer.viewport.left + || this->m_States.rasterizer.viewport.top != states.rasterizer.viewport.top + || this->m_States.rasterizer.viewport.width != states.rasterizer.viewport.width + || this->m_States.rasterizer.viewport.height != states.rasterizer.viewport.height + || force) + { + glViewport( + states.rasterizer.viewport.left, + states.rasterizer.viewport.top, + states.rasterizer.viewport.width, + states.rasterizer.viewport.height + ); + } + + if (this->m_States.rasterizer.zNear != states.rasterizer.zNear + || this->m_States.rasterizer.zFar != states.rasterizer.zFar + || force) + { + glDepthRange(states.rasterizer.zNear, states.rasterizer.zFar); + } + + if (this->m_States.rasterizer.scissorEnable != states.rasterizer.scissorEnable || force) { + if (states.rasterizer.scissorEnable) { + glEnable(GL_SCISSOR_TEST); + } else { + glDisable(GL_SCISSOR_TEST); + } + } + + if (this->m_States.rasterizer.scissor.left != states.rasterizer.scissor.left + || this->m_States.rasterizer.scissor.top != states.rasterizer.scissor.top + || this->m_States.rasterizer.scissor.width != states.rasterizer.scissor.width + || this->m_States.rasterizer.scissor.height != states.rasterizer.scissor.height + || force) + { + glScissor( + states.rasterizer.scissor.left, + states.rasterizer.scissor.top, + states.rasterizer.scissor.width, + states.rasterizer.scissor.height + ); + } + + int32_t maxClipPlaneIndex = GLSDLDevice::GetRendererInfo().unk36; + + if (this->m_States.rasterizer.clipPlaneMask != states.rasterizer.clipPlaneMask) { + for (int32_t i = 0; i < maxClipPlaneIndex; ++i) { + if (!(states.rasterizer.clipPlaneMask & this->m_States.rasterizer.clipPlaneMask & (1 << i))) { + if ((1 << i) & states.rasterizer.clipPlaneMask) { + glEnable(GL_CLIP_PLANE0 + i); + } else { + glDisable(GL_CLIP_PLANE0 + i); + } + } + } + } + + for (int32_t i = 0; i < maxClipPlaneIndex; ++i) { + if (memcmp(&this->m_States.rasterizer.clipPlanes[i].plane, &states.rasterizer.clipPlanes[i].plane, sizeof(this->m_States.rasterizer.clipPlanes[i].plane))) { + glClipPlane(GL_CLIP_PLANE0 + i, states.rasterizer.clipPlanes[i].plane); + } + } + + int32_t maxColorMaskIndex = GLSDLDevice::m_ExtColorMaskIndexed ? GLSDLDevice::GetRendererInfo().max_color_attachments : 1; + + for (int32_t i = 0; i < maxColorMaskIndex; ++i) { + if (memcmp(&this->m_States.blend.colorMask[i], &states.blend.colorMask[i], sizeof(GLColor4f)) || force) { + if (GLSDLDevice::m_ExtColorMaskIndexed) { + glColorMaskIndexedEXT( + i, + states.blend.colorMask[i].red, + states.blend.colorMask[i].green, + states.blend.colorMask[i].blue, + states.blend.colorMask[i].alpha + ); + } else { + glColorMask( + states.blend.colorMask[i].red, + states.blend.colorMask[i].green, + states.blend.colorMask[i].blue, + states.blend.colorMask[i].alpha + ); + } + } + } + + if (this->m_States.blend.alphaBlend != states.blend.alphaBlend || force) { + if (states.blend.alphaBlend) { + glEnable(GL_BLEND); + } else { + glDisable(GL_BLEND); + } + } + + if (this->m_States.blend.srcBlendFactor != states.blend.srcBlendFactor + || this->m_States.blend.destBlendFactor != states.blend.destBlendFactor + || force) + { + glBlendFunc(states.blend.srcBlendFactor, states.blend.destBlendFactor); + } + + if (this->m_States.blend.blendOp != states.blend.blendOp || force) { + glBlendEquation(states.blend.blendOp); + } + + if (memcmp(&this->m_States.blend.blendColor, &states.blend.blendColor, sizeof(GLColor4f)) || force) { + glBlendColor( + states.blend.blendColor.r, + states.blend.blendColor.g, + states.blend.blendColor.b, + states.blend.blendColor.a + ); + } + + if (this->m_States.fixedFunc.fogEnable != states.fixedFunc.fogEnable) { + if (states.fixedFunc.fogEnable) { + glEnable(GL_FOG); + } else { + glDisable(GL_FOG); + } + } + + if (memcmp(&this->m_States.fixedFunc.fogColor, &states.fixedFunc.fogColor, sizeof(GLColor4f)) || force) { + glFogfv(GL_FOG_COLOR, (GLfloat*)&states.fixedFunc.fogColor); + } + + if (this->m_States.fixedFunc.fogMode != states.fixedFunc.fogMode || force) { + glFogi(GL_FOG_MODE, states.fixedFunc.fogMode); + } + + if (this->m_States.fixedFunc.fogStart != states.fixedFunc.fogStart || force) { + glFogf(GL_FOG_START, states.fixedFunc.fogStart); + } + + if (this->m_States.fixedFunc.fogEnd != states.fixedFunc.fogEnd || force) { + glFogf(GL_FOG_END, states.fixedFunc.fogEnd); + } + + if (this->m_States.fixedFunc.fogDensity != states.fixedFunc.fogDensity || force) { + glFogf(GL_FOG_DENSITY, states.fixedFunc.fogDensity); + } + + if (this->m_States.fixedFunc.alphaTestEnable != states.fixedFunc.alphaTestEnable || force) { + if (states.fixedFunc.alphaTestEnable) { + glEnable(GL_ALPHA_TEST); + } else { + glDisable(GL_ALPHA_TEST); + } + } + + if (this->m_States.fixedFunc.alphaTestFunc != states.fixedFunc.alphaTestFunc + || this->m_States.fixedFunc.alphaTestRef != states.fixedFunc.alphaTestRef + || force) + { + glAlphaFunc(states.fixedFunc.alphaTestFunc, states.fixedFunc.alphaTestRef); + } + + if (this->m_States.fixedFunc.transforms.modelView.isIdentity != states.fixedFunc.transforms.modelView.isIdentity + || memcmp(this->m_States.fixedFunc.transforms.modelView.m, states.fixedFunc.transforms.modelView.m, sizeof(float) * 16) + || force) + { + glMatrixMode(GL_MODELVIEW); + + if (states.fixedFunc.transforms.modelView.isIdentity) { + glLoadIdentity(); + } else { + glLoadMatrixf(states.fixedFunc.transforms.modelView.m); + } + + const_cast(states).fixedFunc.transforms.modelView.isDirty = false; + } + + if (this->m_States.fixedFunc.transforms.projection.isIdentity != states.fixedFunc.transforms.projection.isIdentity + || memcmp(this->m_States.fixedFunc.transforms.projection.m, states.fixedFunc.transforms.projection.m, sizeof(float) * 16) + || force) + { + glMatrixMode(GL_PROJECTION); + + GLTransform projection = { + true, + { + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f, + }, + true + }; + + if (!states.fixedFunc.transforms.projection.isIdentity) { + projection.isIdentity = false; + + memcpy(projection.m, states.fixedFunc.transforms.projection.m, sizeof(projection.m)); + projection.isDirty = true; + } + + if (projection.isIdentity) { + projection.SetIdentity(); + } + + projection.a1 *= -1.0f; + projection.b1 *= -1.0f; + projection.c1 *= -1.0f; + projection.d1 *= -1.0f; + + auto isIdentity = projection.a0 == 1.0f + && projection.a1 == 0.0f + && projection.a2 == 0.0f + && projection.a3 == 0.0f + && projection.b0 == 0.0f + && projection.b1 == 1.0f + && projection.b2 == 0.0f + && projection.b3 == 0.0f + && projection.c0 == 0.0f + && projection.c1 == 0.0f + && projection.c2 == 1.0f + && projection.c3 == 0.0f + && projection.d0 == 0.0f + && projection.d1 == 0.0f + && projection.d2 == 0.0f + && projection.d3 == 1.0f; + + projection.isDirty = true; + + if (isIdentity) { + glLoadIdentity(); + } else { + glLoadMatrixf(projection.m); + } + + projection.isDirty = false; + } + + glMatrixMode(states.fixedFunc.transforms.matrixMode); + glMatrixMode(GL_MODELVIEW); + + if (states.fixedFunc.transforms.view.isIdentity) { + glLoadIdentity(); + } else { + glLoadMatrixf(states.fixedFunc.transforms.view.m); + } + + const_cast(states).fixedFunc.transforms.view.isDirty = false; + + if (this->m_States.fixedFunc.lighting.enable != states.fixedFunc.lighting.enable || force) { + if (states.fixedFunc.lighting.enable) { + glEnable(GL_LIGHTING); + } else { + glDisable(GL_LIGHTING); + } + } + + for (int32_t i = 0; i < 8; ++i) { + // TODO + // Set up each light + } + + if (memcmp(&this->m_States.fixedFunc.lighting.sceneAmbient, &states.fixedFunc.lighting.sceneAmbient, sizeof(GLColor4f)) || force) { + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, (GLfloat*)&states.fixedFunc.lighting.sceneAmbient); + } + + if (this->m_States.fixedFunc.lighting.material.materialSource != states.fixedFunc.lighting.material.materialSource || force) { + glColorMaterial(GL_FRONT_AND_BACK, states.fixedFunc.lighting.material.materialSource); + + // TODO + // this->Sub38A20(); + } + + if (this->m_States.fixedFunc.lighting.material.colorTracking != states.fixedFunc.lighting.material.colorTracking || force) { + if (states.fixedFunc.lighting.material.colorTracking) { + glEnable(GL_COLOR_MATERIAL); + } else { + glDisable(GL_COLOR_MATERIAL); + } + + // TODO + // this->Sub38A20(); + } + + if (memcmp(&this->m_States.fixedFunc.lighting.material.ambient, &states.fixedFunc.lighting.material.ambient, sizeof(GLColor4f)) || force) { + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, (GLfloat*)&states.fixedFunc.lighting.material.ambient); + } + + if (memcmp(&this->m_States.fixedFunc.lighting.material.diffuse, &states.fixedFunc.lighting.material.diffuse, sizeof(GLColor4f)) || force) { + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, (GLfloat*)&states.fixedFunc.lighting.material.diffuse); + } + + if (memcmp(&this->m_States.fixedFunc.lighting.material.specular, &states.fixedFunc.lighting.material.specular, sizeof(GLColor4f)) || force) { + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, (GLfloat*)&states.fixedFunc.lighting.material.specular); + } + + if (memcmp(&this->m_States.fixedFunc.lighting.material.emission, &states.fixedFunc.lighting.material.emission, sizeof(GLColor4f)) || force) { + glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, (GLfloat*)&states.fixedFunc.lighting.material.emission); + } + + if (this->m_States.fixedFunc.lighting.material.shininess != states.fixedFunc.lighting.material.shininess || force) { + glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, states.fixedFunc.lighting.material.shininess); + } + + for (int32_t i = 0; i < 8; ++i) { + // TODO fixedFunc.transforms.texture[i] + // TODO fixedFunc.texOp[i] + // TODO fixedFunc.texGen[i] + } + + glMatrixMode(states.fixedFunc.transforms.matrixMode); + + if (this->m_States.fixedFunc.normalizeNormal != states.fixedFunc.normalizeNormal) { + if (states.fixedFunc.normalizeNormal) { + glEnable(GL_NORMALIZE); + } else { + glDisable(GL_NORMALIZE); + } + } + + if (this->m_States.fixedFunc.pointSprite.enable != states.fixedFunc.pointSprite.enable || force) { + if (states.fixedFunc.pointSprite.enable) { + glEnable(GL_POINT_SPRITE); + glEnable(GL_PROGRAM_POINT_SIZE_EXT); + } else { + glDisable(GL_POINT_SPRITE); + glDisable(GL_PROGRAM_POINT_SIZE_EXT); + } + } + + if (this->m_States.fixedFunc.pointSprite.size != states.fixedFunc.pointSprite.size || force) { + glPointSize(states.fixedFunc.pointSprite.size); + } + + if (memcmp(&this->m_States.fixedFunc.pointSprite.attenuation, &states.fixedFunc.pointSprite.attenuation, sizeof(this->m_States.fixedFunc.pointSprite.attenuation)) || force) { + glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION, states.fixedFunc.pointSprite.attenuation); + } + + if (this->m_States.fixedFunc.pointSprite.min != states.fixedFunc.pointSprite.min || force ) { + glPointParameterfARB(GL_POINT_SIZE_MIN, states.fixedFunc.pointSprite.min); + } + + if (this->m_States.fixedFunc.pointSprite.max != states.fixedFunc.pointSprite.max || force) { + glPointParameterfARB(GL_POINT_SIZE_MAX, states.fixedFunc.pointSprite.max); + } + + if (this->m_States.shader.vertexShaderEnable != states.shader.vertexShaderEnable || force) { + if (states.shader.vertexShaderEnable) { + glEnable(GL_VERTEX_PROGRAM_ARB); + } else { + glDisable(GL_VERTEX_PROGRAM_ARB); + } + } + + glProgramEnvParameters4fvEXT(GL_VERTEX_PROGRAM_ARB, 0, 256, (GLfloat*)states.shader.vertexShaderConst); + + if (this->m_States.shader.pixelShaderEnable != states.shader.pixelShaderEnable || force) { + if (states.shader.pixelShaderEnable) { + glEnable(GL_FRAGMENT_PROGRAM_ARB); + } else { + glDisable(GL_FRAGMENT_PROGRAM_ARB); + } + } + + glProgramEnvParameters4fvEXT(GL_FRAGMENT_PROGRAM_ARB, 0, 64, (GLfloat*)states.shader.pixelShaderConst); + + if (memcmp(&this->m_States.clear.clearColor, &states.clear.clearColor, sizeof(GLColor4f)) || force) { + glClearColor( + states.clear.clearColor.r, + states.clear.clearColor.g, + states.clear.clearColor.b, + states.clear.clearColor.a + ); + } + + if (this->m_States.clear.clearDepth != states.clear.clearDepth || force) { + glClearDepth(states.clear.clearDepth); + } + + if (this->m_States.clear.clearStencil != states.clear.clearStencil || force) { + glClearStencil(states.clear.clearStencil); + } + + // Copy provided states into current states + + memcpy(&this->m_States.depth, &states.depth, sizeof(this->m_States.depth)); + memcpy(&this->m_States.stencil, &states.stencil, sizeof(this->m_States.stencil)); + + if (!states.stencil.useTwoSidedStencil) { + memcpy(&this->m_States.stencil.back, &states.stencil.front, sizeof(this->m_States.stencil.back)); + } + + if (this->m_CurrentTargetDepth) { + memcpy(&this->m_States.rasterizer, &states.rasterizer, sizeof(this->m_States.rasterizer)); + } else { + float v117 = this->m_States.rasterizer.constantDepthBias; + float v118 = this->m_States.rasterizer.slopeScaledDepthBias; + memcpy(&this->m_States.rasterizer, &states.rasterizer, sizeof(this->m_States.rasterizer)); + this->m_States.rasterizer.constantDepthBias = v117; + this->m_States.rasterizer.slopeScaledDepthBias = v118; + } + + memcpy(&this->m_States.blend, &states.blend, sizeof(this->m_States.blend)); + memcpy(&this->m_States.clear, &states.clear, sizeof(this->m_States.clear)); + + this->m_States.fixedFunc.fogEnable = states.fixedFunc.fogEnable; + memcpy(&this->m_States.fixedFunc.fogColor, &states.fixedFunc.fogColor, sizeof(GLColor4f)); + this->m_States.fixedFunc.fogMode = states.fixedFunc.fogMode; + this->m_States.fixedFunc.fogStart = states.fixedFunc.fogStart; + this->m_States.fixedFunc.fogEnd = states.fixedFunc.fogEnd; + + this->m_States.fixedFunc.alphaTestEnable = states.fixedFunc.alphaTestEnable; + this->m_States.fixedFunc.alphaTestRef = states.fixedFunc.alphaTestRef; + + memcpy(this->m_States.fixedFunc.texOp, states.fixedFunc.texOp, sizeof(this->m_States.fixedFunc.texOp)); + + this->m_States.fixedFunc.lighting.enable = states.fixedFunc.lighting.enable; + memcpy(&this->m_States.fixedFunc.lighting.sceneAmbient, &states.fixedFunc.lighting.sceneAmbient, sizeof(GLColor4f)); + + for (int32_t i = 0; i < 8; ++i) { + this->m_States.fixedFunc.lighting.lights[i].enable = states.fixedFunc.lighting.lights[i].enable; + memcpy(&this->m_States.fixedFunc.lighting.lights[i].position, &states.fixedFunc.lighting.lights[i].position, sizeof(GLfloat4)); + COPY_TRANSFORM(this->m_States.fixedFunc.lighting.lights[i].view, states.fixedFunc.lighting.lights[i].view); + this->m_States.fixedFunc.lighting.lights[i].constantAttenuation = states.fixedFunc.lighting.lights[i].constantAttenuation; + this->m_States.fixedFunc.lighting.lights[i].linearAttenuation = states.fixedFunc.lighting.lights[i].linearAttenuation; + this->m_States.fixedFunc.lighting.lights[i].quadraticAttenuation = states.fixedFunc.lighting.lights[i].quadraticAttenuation; + memcpy(&this->m_States.fixedFunc.lighting.lights[i].ambient, &states.fixedFunc.lighting.lights[i].ambient, sizeof(GLColor4f)); + memcpy(&this->m_States.fixedFunc.lighting.lights[i].diffuse, &states.fixedFunc.lighting.lights[i].diffuse, sizeof(GLColor4f)); + memcpy(&this->m_States.fixedFunc.lighting.lights[i].specular, &states.fixedFunc.lighting.lights[i].specular, sizeof(GLColor4f)); + } + + memcpy(&this->m_States.fixedFunc.lighting.material, &states.fixedFunc.lighting.material, sizeof(this->m_States.fixedFunc.lighting.material)); + + COPY_TRANSFORM(this->m_States.fixedFunc.transforms.modelView, states.fixedFunc.transforms.modelView); + COPY_TRANSFORM(this->m_States.fixedFunc.transforms.world, states.fixedFunc.transforms.world); + COPY_TRANSFORM(this->m_States.fixedFunc.transforms.view, states.fixedFunc.transforms.view); + COPY_TRANSFORM(this->m_States.fixedFunc.transforms.projection, states.fixedFunc.transforms.projection); + + for (int32_t i = 0; i < 8; ++i) { + COPY_TRANSFORM(this->m_States.fixedFunc.transforms.texture[i], states.fixedFunc.transforms.texture[i]); + } + + memcpy(this->m_States.fixedFunc.texCoordIndex, states.fixedFunc.texCoordIndex, sizeof(this->m_States.fixedFunc.texCoordIndex)); + memcpy(this->m_States.fixedFunc.texGen, states.fixedFunc.texGen, sizeof(this->m_States.fixedFunc.texGen)); + + memcpy(this->m_States.samplers, states.samplers, sizeof(this->m_States.samplers)); + memcpy(&this->m_States.shader, &states.shader, sizeof(this->m_States.shader)); +} + +void GLSDLDevice::ApplyShaderConstants() { + GLShader* vs = this->m_VertexShader; + + if (vs) { + if (vs->m_UsingGLSL) { + vs->FlushUniforms(this->m_GLSLProgram); + } else { + auto start = this->m_DirtyVertexShaderConsts.start; + auto end = this->m_DirtyVertexShaderConsts.end; + + if (start != end) { + glProgramEnvParameters4fvEXT( + GL_VERTEX_PROGRAM_ARB, + start, + end - start, + reinterpret_cast(&this->m_States.shader.vertexShaderConst[start]) + ); + + this->m_DirtyVertexShaderConsts.start = 0; + this->m_DirtyVertexShaderConsts.end = 0; + } + } + } + + GLShader* ps = this->m_PixelShader; + + if (ps) { + if (ps->m_UsingGLSL) { + ps->FlushUniforms(this->m_GLSLProgram); + } else { + auto start = this->m_DirtyPixelShaderConsts.start; + auto end = this->m_DirtyPixelShaderConsts.end; + + if (start != end) { + glProgramEnvParameters4fvEXT( + GL_FRAGMENT_PROGRAM_ARB, + start, + end - start, + reinterpret_cast(&this->m_States.shader.pixelShaderConst[start]) + ); + + this->m_DirtyPixelShaderConsts.start = 0; + this->m_DirtyPixelShaderConsts.end = 0; + } + } + } +} + +void GLSDLDevice::ApplyTransforms() { + this->SetModelView(GL_MODELVIEW); + + auto& projection = this->m_States.fixedFunc.transforms.projection; + if (projection.isDirty) { + if (projection.isIdentity) { + projection.SetIdentity(); + } + + projection.a1 *= -1.0f; + projection.b1 *= -1.0f; + projection.c1 *= -1.0f; + projection.d1 *= -1.0f; + + projection.isIdentity = projection.a0 == 1.0f + && projection.a1 == 0.0f + && projection.a2 == 0.0f + && projection.a3 == 0.0f + && projection.b0 == 0.0f + && projection.b1 == 1.0f + && projection.b2 == 0.0f + && projection.b3 == 0.0f + && projection.c0 == 0.0f + && projection.c1 == 0.0f + && projection.c2 == 1.0f + && projection.c3 == 0.0f + && projection.d0 == 0.0f + && projection.d1 == 0.0f + && projection.d2 == 0.0f + && projection.d3 == 1.0f; + + projection.isDirty = true; + + if (this->m_States.fixedFunc.transforms.matrixMode != GL_PROJECTION) { + glMatrixMode(GL_PROJECTION); + this->m_States.fixedFunc.transforms.matrixMode = GL_PROJECTION; + } + + if (projection.isIdentity) { + glLoadIdentity(); + } else { + glLoadMatrixf(projection.m); + } + + projection.isDirty = false; + } + + // TODO texture transforms +} + +void GLSDLDevice::BindBuffer(GLBuffer* buffer, GLEnum target) { + BLIZZARD_ASSERT(this->m_Context.IsCurrentContext()); + BLIZZARD_ASSERT(buffer != nullptr || target != GL_ZERO); + + GLEnum bindTarget = target == GL_ZERO ? buffer->m_Type : target; + GLuint bindName = buffer == nullptr ? 0 : buffer->m_BufferID; + + int32_t bindIndex; + + if (bindTarget == GL_ARRAY_BUFFER) { + bindIndex = 0; + } else if (bindTarget == GL_ELEMENT_ARRAY_BUFFER) { + bindIndex = 1; + } else if (bindTarget == GL_PIXEL_PACK_BUFFER) { + bindIndex = 2; + } else if (bindTarget == GL_PIXEL_UNPACK_BUFFER) { + bindIndex = 3; + } else { + BLIZZARD_ASSERT(false); + } + + if (bindTarget == GL_ARRAY_BUFFER) { + if (this->m_States.binding.vertexArrayObject && this->m_VertexArrayObject != &this->m_DefaultVertexArrayObject) { + glBindVertexArray(0); + this->m_States.binding.vertexArrayObject = 0; + this->m_VertexArrayObject = &this->m_DefaultVertexArrayObject; + } + } else if (bindTarget == GL_PIXEL_PACK_BUFFER) { + this->m_VertexArrayObject->m_Properties.m_PixelPackBuffer = buffer; + } else if (bindTarget == GL_PIXEL_UNPACK_BUFFER) { + this->m_VertexArrayObject->m_Properties.m_PixelUnpackBuffer = buffer; + } + + if (this->m_VertexArrayObject->m_GLStates.buffers[bindIndex] != bindName) { + glBindBuffer(bindTarget, bindName); + this->m_VertexArrayObject->m_GLStates.buffers[bindIndex] = bindName; + } +} + +void GLSDLDevice::BindFramebuffer(GLFramebuffer* framebuffer) { + BLIZZARD_ASSERT(this->m_Context.IsCurrentContext()); + + GLuint v3; + + if (framebuffer) { + v3 = framebuffer->m_FramebufferID; + } else { + v3 = 0; + } + + this->m_CurrentTarget = framebuffer; + + if (this->m_States.binding.framebuffer != v3) { + glBindFramebufferEXT(GL_FRAMEBUFFER, v3); + this->m_States.binding.framebuffer = v3; + } +} + +void GLSDLDevice::BindGLSLProgram(GLGLSLProgram* a2) { + // TODO +} + +void GLSDLDevice::BindShader(GLShader* shader) { + BLIZZARD_ASSERT(this->m_Context.IsCurrentContext()); + BLIZZARD_ASSERT(shader); + + if (shader->var5 == GL_FRAGMENT_PROGRAM_ARB) { + if (this->m_States.binding.pixelProgram != shader->m_ShaderID) { + glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, shader->m_ShaderID); + this->m_States.binding.pixelProgram = shader->m_ShaderID; + } + } else if (shader->var5 == GL_VERTEX_PROGRAM_ARB) { + if (this->m_States.binding.vertexProgram != shader->m_ShaderID) { + glBindProgramARB(GL_VERTEX_PROGRAM_ARB, shader->m_ShaderID); + this->m_States.binding.vertexProgram = shader->m_ShaderID; + } + } else { + BLIZZARD_ASSERT(false); + } +} + +void GLSDLDevice::BindTexture(GLEnum textureType, GLTexture* texture) { + BLIZZARD_ASSERT(this->m_Context.IsCurrentContext()); + BLIZZARD_ASSERT(texture == nullptr || textureType == texture->m_TextureType); + + uint32_t textureID = texture ? texture->m_TextureID : 0; + uint32_t index = GLSDLTextureTypeToIndex(textureType); + + BLIZZARD_ASSERT(this->m_States.binding.texture[index][this->m_States.binding.currentActiveTexture] != textureID); + BLIZZARD_ASSERT(this->m_BoundTextures[index][this->m_States.binding.currentActiveTexture] != texture); + + GLTexture* boundTexture = this->m_BoundTextures[index][this->m_States.binding.currentActiveTexture]; + if (boundTexture) { + boundTexture->Unbind(this, this->m_States.binding.currentActiveTexture); + } + + glBindTexture(textureType, textureID); + this->m_BoundTextures[index][this->m_States.binding.currentActiveTexture] = texture; + this->m_States.binding.texture[index][this->m_States.binding.currentActiveTexture] = textureID; + + if (!texture || this->m_WorkerDevice || textureType == GL_TEXTURE_RECTANGLE) { + return; + } + + GLSDLDevice* mainDevice = GLSDLDevice::m_Devices[0]; + + if (texture->var7 == mainDevice->m_TextureList.begin()) { + texture->var7 = mainDevice->m_TextureList.insert(mainDevice->m_TextureList.begin(), texture); + + mainDevice->m_TextureTotalSize += texture->m_Size; + texture->m_LastFrameUsed = mainDevice->m_FrameNumber; + } else if (texture->m_LastFrameUsed == 0 || texture->m_LastFrameUsed + 60 < mainDevice->m_FrameNumber) { + if (texture->m_LastFrameUsed == 0) { + texture->RecreateGLTexture(); + mainDevice->m_TextureTotalSize += texture->m_Size; + } + + // TODO + // - oldest texture logic + + // TODO + // - list transfer logic + + texture->m_LastFrameUsed = mainDevice->m_FrameNumber; + } + + if (mainDevice->m_TextureTotalSize > 384 * 1024 * 1024) { + // TODO + // - track / clean up oldest textures + } +} + +void GLSDLDevice::BindVertexArray(GLVertexArray* a2) { + BLIZZARD_ASSERT(this->m_Context.IsCurrentContext()); + + int32_t v4 = a2 ? a2->m_VertexArrayID : 0; + + if (this->m_States.binding.vertexArrayObject != v4) { + glBindVertexArray(v4); + this->m_States.binding.vertexArrayObject = v4; + this->m_VertexArrayObject = a2 ? a2 : &this->m_DefaultVertexArrayObject; + } +} + +void GLSDLDevice::BlitFramebuffer(GLMipmap* src, const GLRect* srcRect, GLMipmap* dst, const GLRect* dstRect, GLEnum mask, GLEnum filter) { + BLIZZARD_ASSERT(mask == GL_COLOR_BUFFER_BIT); + BLIZZARD_ASSERT(src != nullptr); + + GLRect fullSrcRect = { + 0, + 0, + src->GetWidth(), + src->GetHeight() + }; + + GLRect fullDstRect = { + 0, + 0, + dst ? dst->GetWidth() : this->m_Window->GetWidth(), + dst ? dst->GetHeight() : this->m_Window->GetHeight() + }; + + BLIZZARD_ASSERT(filter == GL_NEAREST); + // TODO + // BLIZZARD_ASSERT(srcRect == nullptr || *srcRect == fullSrcRect); + + // TODO + // - non-shader code path + + glEnable(GL_VERTEX_PROGRAM_ARB); + glEnable(GL_FRAGMENT_PROGRAM_ARB); + + auto alphaTestEnable = this->m_States.fixedFunc.alphaTestEnable; + auto depthTestEnable = this->m_States.depth.testEnable; + auto alphaBlend = this->m_States.blend.alphaBlend; + auto cullEnable = this->m_States.rasterizer.cullMode != 0; + auto scissorEnable = this->m_States.rasterizer.scissorEnable; + auto stencilTestEnable = this->m_States.stencil.testEnable; + uint32_t width; + uint32_t height; + + if (alphaTestEnable) { + glDisable(GL_ALPHA_TEST); + } + + if (depthTestEnable) { + glDisable(GL_DEPTH_TEST); + } + + if (alphaBlend) { + glDisable(GL_BLEND); + } + + if (cullEnable) { + glDisable(GL_CULL_FACE); + } + + if (scissorEnable) { + glDisable(GL_SCISSOR_TEST); + } + + if (stencilTestEnable) { + glDisable(GL_STENCIL_TEST); + } + + if (GLSDLDevice::m_ExtColorMaskIndexed) { + glColorMaskIndexedEXT(0, GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + } else { + glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + } + + if (dst) { + glFramebufferTexture2DEXT( + GL_FRAMEBUFFER, + GL_COLOR_ATTACHMENT0, + dst->m_Target, + dst->GetTextureID(), + dst->m_Level + ); + + auto currentTargetDepth = this->m_CurrentTargetDepth; + if (currentTargetDepth) { + glFramebufferTexture2DEXT( + GL_FRAMEBUFFER, + GL_DEPTH_ATTACHMENT, + currentTargetDepth->m_Target, + 0, + 0 + ); + } + + auto currentTargetStencil = this->m_CurrentTargetStencil; + if (currentTargetStencil) { + glFramebufferTexture2DEXT( + GL_FRAMEBUFFER, + GL_STENCIL_ATTACHMENT, + currentTargetStencil->m_Target, + 0, + 0 + ); + } + + dst->m_Texture->SetAddressModeS(GL_CLAMP_TO_EDGE); + dst->m_Texture->SetAddressModeT(GL_CLAMP_TO_EDGE); + dst->m_Texture->SetMinFilterMode(GL_LINEAR); + dst->m_Texture->SetMagFilterMode(GL_LINEAR); + + width = dst->m_Width; + height = dst->m_Height; + } else { + glBindFramebufferEXT(GL_FRAMEBUFFER, 0); + + width = this->m_Window->GetWidth(); + height = this->m_Window->GetHeight(); + } + + if ( + this->m_States.rasterizer.viewport.left != 0 + || this->m_States.rasterizer.viewport.top != 0 + || this->m_States.rasterizer.viewport.width != width + || this->m_States.rasterizer.viewport.height != height + ) { + glViewport(0, 0, width, height); + } + + this->SetActiveTexture(0); + src->m_Texture->Bind(nullptr, true); + src->m_Texture->SetAddressModeS(GL_CLAMP_TO_EDGE); + src->m_Texture->SetAddressModeT(GL_CLAMP_TO_EDGE); + src->m_Texture->SetMinFilterMode(filter); + src->m_Texture->SetMagFilterMode(filter); + + this->SetVertexBuffer(0, GLSDLDevice::m_BlitQuadVBO, 0, 28); + + GLVertexFormat* format = dst + ? &GLSDLDevice::m_NormalBlitVF + : &GLSDLDevice::m_InvertedBlitVF; + + this->SetVertexFormat(format); + + auto vertexShader = this->m_VertexShader; + auto pixelShader = this->m_PixelShader; + this->BindGLSLProgram(nullptr); + + this->SetShader(GLShader::eVertexShader, GLSDLDevice::m_DeviceShaders[0]); + this->SetShader(GLShader::ePixelShader, GLSDLDevice::m_DeviceShaders[2]); + + this->m_DefaultVertexArrayObject.m_Properties.m_VertexBase = 0; + GLVertexArray::FindVertexArray(this, this->m_DefaultVertexArrayObject); + + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + + this->SetShader(GLShader::eVertexShader, vertexShader); + this->SetShader(GLShader::ePixelShader, pixelShader); + + if (alphaTestEnable) { + glEnable(GL_ALPHA_TEST); + } + + if (depthTestEnable) { + glEnable(GL_DEPTH_TEST); + } + + if (alphaBlend) { + glEnable(GL_BLEND); + } + + if (cullEnable) { + glEnable(GL_CULL_FACE); + } + + if (scissorEnable) { + glEnable(GL_SCISSOR_TEST); + } + + if (stencilTestEnable) { + glEnable(GL_STENCIL_TEST); + } + + if (GLSDLDevice::m_ExtColorMaskIndexed) { + glColorMaskIndexedEXT( + 0, + this->m_States.blend.colorMask[0].red, + this->m_States.blend.colorMask[0].green, + this->m_States.blend.colorMask[0].blue, + this->m_States.blend.colorMask[0].alpha + ); + } else { + glColorMask( + this->m_States.blend.colorMask[0].red, + this->m_States.blend.colorMask[0].green, + this->m_States.blend.colorMask[0].blue, + this->m_States.blend.colorMask[0].alpha + ); + } + + if (dst) { + auto currentTargetColor = this->m_CurrentTargetColor[0]; + glFramebufferTexture2DEXT( + GL_FRAMEBUFFER, + GL_COLOR_ATTACHMENT0, + dst->m_Target, + currentTargetColor->GetTextureID(), + 0 + ); + + auto currentTargetDepth = this->m_CurrentTargetDepth; + if (currentTargetDepth) { + glFramebufferTexture2DEXT( + GL_FRAMEBUFFER, + GL_DEPTH_ATTACHMENT, + currentTargetDepth->m_Target, + currentTargetDepth->GetTextureID(), + currentTargetDepth->m_Level + ); + } + + auto currentTargetStencil = this->m_CurrentTargetStencil; + if (currentTargetStencil) { + glFramebufferTexture2DEXT( + GL_FRAMEBUFFER, + GL_STENCIL_ATTACHMENT, + currentTargetStencil->m_Target, + currentTargetStencil->GetTextureID(), + currentTargetStencil->m_Level + ); + } + } + + if ( + this->m_States.rasterizer.viewport.left != 0 + || this->m_States.rasterizer.viewport.top != 0 + || this->m_States.rasterizer.viewport.width != width + || this->m_States.rasterizer.viewport.height != height + ) { + glViewport( + this->m_States.rasterizer.viewport.left, + this->m_States.rasterizer.viewport.top, + this->m_States.rasterizer.viewport.width, + this->m_States.rasterizer.viewport.height + ); + } +} + +void GLSDLDevice::CheckDepthTarget() { + BLIZZARD_ASSERT(this->m_CurrentTargetColor[0] == nullptr || this->m_CurrentTargetColor[0]->GetTexture()->IsValid()); + BLIZZARD_ASSERT(this->m_CurrentTargetColor[1] == nullptr || this->m_CurrentTargetColor[1]->GetTexture()->IsValid()); + BLIZZARD_ASSERT(this->m_CurrentTargetColor[2] == nullptr || this->m_CurrentTargetColor[2]->GetTexture()->IsValid()); + BLIZZARD_ASSERT(this->m_CurrentTargetColor[3] == nullptr || this->m_CurrentTargetColor[3]->GetTexture()->IsValid()); + + BLIZZARD_ASSERT(this->m_CurrentTargetDepth == nullptr || this->m_CurrentDepthBuffer != nullptr); + + if (!this->m_CurrentDepthBuffer) { + return; + } + + BLIZZARD_ASSERT(this->m_CurrentDepthBuffer->GetTexture()->IsValid()); + + auto currentTargetColor = this->m_CurrentTargetColor[0]; + auto currentDepthBuffer = this->m_CurrentDepthBuffer; + + if ( + !currentTargetColor + || (currentTargetColor->m_Width == currentDepthBuffer->m_Width && currentTargetColor->m_Height == currentDepthBuffer->m_Height) + ) { + if (this->m_CurrentTargetDepth != currentDepthBuffer) { + this->Sub34BB0(GL_DEPTH_ATTACHMENT, currentDepthBuffer, 0); + this->m_CurrentTarget->Attach(currentDepthBuffer, GL_DEPTH_ATTACHMENT, 0); + auto currentTargetDepth = this->m_CurrentTargetDepth; + this->m_CurrentTargetDepth = currentDepthBuffer; + this->m_CurrentDepthBuffer = currentDepthBuffer; + + if ( + (currentTargetDepth == nullptr && currentDepthBuffer != nullptr) + || (currentDepthBuffer != nullptr && currentTargetDepth != nullptr && currentTargetDepth->m_DepthBits != currentDepthBuffer->m_DepthBits) + ) { + this->SetDepthBias(this->m_ConstantDepthBias, this->m_SlopeScaledDepthBias); + } + + if (this->m_CurrentDepthBuffer->GetFormat() == GLTF_D24S8) { + this->Sub34BB0(GL_STENCIL_ATTACHMENT, this->m_CurrentDepthBuffer, 0); + this->m_CurrentTarget->Attach(this->m_CurrentDepthBuffer, GL_STENCIL_ATTACHMENT, 0); + this->m_CurrentTargetStencil = this->m_CurrentDepthBuffer; + } + } + + return; + } + + auto currentTargetDepth = this->m_CurrentTargetDepth; + + if (currentTargetDepth == currentDepthBuffer) { + this->Sub34BB0(GL_DEPTH_ATTACHMENT, nullptr, 0); + this->m_CurrentTarget->Attach(nullptr, GL_DEPTH_ATTACHMENT, 0); + this->m_CurrentTargetDepth = nullptr; + this->m_CurrentDepthBuffer = currentTargetDepth; + + if (currentTargetDepth->GetFormat() == GLTF_D24S8) { + this->Sub34BB0(GL_STENCIL_ATTACHMENT, nullptr, 0); + this->m_CurrentTarget->Attach(nullptr, GL_STENCIL_ATTACHMENT, 0); + this->m_CurrentTargetStencil = nullptr; + } + } +} + +void GLSDLDevice::Clear(uint32_t clearMask, const GLColor4f& clearColor, double clearDepth, int32_t clearStencil) { + this->CheckDepthTarget(); + this->RestoreTextures(); + + auto colorMask = this->m_States.blend.colorMask[0]; + + if (clearMask & 0x4000) { + for (int32_t i = 0; i < 4; i++) { + if (this->m_CurrentTargetColor[i] && this->m_CurrentTargetColor[i]->GetTextureID() == this->m_States.binding.texture[0][this->m_States.binding.currentActiveTexture]) { + this->BindTexture(this->m_CurrentTargetColor[i]->m_Target, nullptr); + } + } + + this->SetColorWriteMask(1, 1, 1, 1, 0); + this->SetClearColor(clearColor); + } + + if (clearMask & 0x100) { + if (this->m_CurrentTargetDepth) { + if (this->m_CurrentTargetDepth->GetTextureID() == this->m_States.binding.texture[0][this->m_States.binding.currentActiveTexture]) { + this->BindTexture(this->m_CurrentTargetDepth->m_Target, nullptr); + } + + if (!this->m_States.depth.writeMask) { + glDepthMask(1); + } + + this->SetClearDepth(clearDepth); + } else { + clearMask &= ~0x100; + } + } else { + if (this->m_CurrentTargetDepth) { + this->m_CurrentTarget->Detach(GL_DEPTH_ATTACHMENT); + } + } + + if (clearMask & 0x400) { + if (this->m_CurrentTargetStencil) { + if (this->m_CurrentTargetStencil->GetTextureID() == this->m_States.binding.texture[0][this->m_States.binding.currentActiveTexture]) { + this->BindTexture(this->m_CurrentTargetStencil->m_Target, nullptr); + } + + if (this->m_States.stencil.writeMask != -1) { + glStencilMask(-1); + } + + this->SetClearStencil(clearStencil); + } else { + clearMask &= ~0x400; + } + } else { + if (this->m_CurrentTargetStencil) { + this->m_CurrentTarget->Detach(GL_STENCIL_ATTACHMENT); + } + } + + auto scissorEnable = this->m_States.rasterizer.scissorEnable; + auto scissorRect = this->m_States.rasterizer.scissor; + auto currentTargetColor = this->m_CurrentTargetColor[0]; + + if ( + currentTargetColor + && ( + this->m_States.rasterizer.viewport.left + || this->m_States.rasterizer.viewport.top + || this->m_States.rasterizer.viewport.width != currentTargetColor->m_Width + || this->m_States.rasterizer.viewport.height != currentTargetColor->m_Height + ) + ) { + this->SetScissor(1, this->m_States.rasterizer.viewport); + glClear(clearMask); + this->SetScissor(scissorEnable, scissorRect); + } else { + glClear(clearMask); + } + + if (clearMask & 0x4000) { + this->SetColorWriteMask(colorMask.red, colorMask.blue, colorMask.green, colorMask.alpha, 0); + } + + if (clearMask & 0x100) { + if (!this->m_States.depth.writeMask) { + glDepthMask(0); + } + } else { + if (this->m_CurrentTargetDepth) { + this->m_CurrentTarget->Attach(this->m_CurrentTargetDepth, GL_DEPTH_ATTACHMENT, 0); + } + } + + if (clearMask & 0x400) { + if (this->m_States.stencil.writeMask != -1) { + glStencilMask(this->m_States.stencil.writeMask); + } + } else { + if (this->m_CurrentTargetStencil) { + this->m_CurrentTarget->Attach(this->m_CurrentTargetStencil, GL_STENCIL_ATTACHMENT, 0); + } + } +} + +void GLSDLDevice::CopyTex(uint32_t a2, uint32_t a3, GLMipmap* dst, const GLRect* framebufferRect) { + BLIZZARD_ASSERT(framebufferRect->width == dst->GetWidth()); + BLIZZARD_ASSERT(framebufferRect->height == dst->GetHeight()); + + dst->m_Texture->Bind(nullptr, false); + + glCopyTexSubImage2D( + dst->m_Target, + dst->m_Level, + a2, + a3, + framebufferRect->left, + framebufferRect->top, + framebufferRect->width, + framebufferRect->height + ); +} + +GLBuffer* GLSDLDevice::CreateBuffer(GLEnum type, uint32_t a3, const void* a4, GLEnum usage, GLEnum format) { + return GLBuffer::Create(type, a3, a4, usage, format); +} + +GLShader* GLSDLDevice::CreateShader(GLShader::ShaderType type, const void* buf, int32_t codeLen, const char* name) { + // TODO + // Blizzard::Debug::Assert(this); + + return GLShader::Create(type, GLSDLDevice::m_UseHybridShader, false, "", buf, codeLen, "", name, nullptr); +} + +GLTexture* GLSDLDevice::CreateTexture2D(uint32_t width, uint32_t height, uint32_t numMipMap, GLTextureFormat format, uint32_t flags) { + return GLTexture2D::Create(width, height, numMipMap, format, flags); +} + +GLTexture* GLSDLDevice::CreateTextureCubeMap(uint32_t size, uint32_t numMipMap, GLTextureFormat format, uint32_t flags) { + // TODO + + return nullptr; +} + +void GLSDLDevice::Draw(GLEnum primitive, uint32_t a3, uint32_t a4) { + // TODO +} + +void GLSDLDevice::DrawIndexed(GLEnum primitive, uint32_t a3, uint32_t a4, uint32_t a5, uint32_t a6, uint32_t count) { + this->GLSDLDraw(primitive, a3, a4, a5, a6, count); +} + +void GLSDLDevice::DrawRect() { + if (!this->m_Window) { + return; + } + + if (!this->m_UseWindowSystemBuffer || this->m_FlippedSystemBuffer) { + GLTexture2D* backBuffer = this->m_BackBufferColor; + + if (!backBuffer) { + return; + } + + GLMipmap* backBufferImage = backBuffer->GetMipmap(0, GL_TEXTURE_CUBE_MAP_POSITIVE_X); + this->BlitFramebuffer(backBufferImage, nullptr, nullptr, nullptr, GL_COLOR_BUFFER_BIT, GL_NEAREST); + + glBindFramebufferEXT(GL_FRAMEBUFFER, 0); + this->m_States.binding.framebuffer = 0; + } + + this->m_Window->Swap(); + + if (!this->m_UseWindowSystemBuffer || this->m_FlippedSystemBuffer) { + glBindFramebufferEXT(GL_FRAMEBUFFER, this->m_CurrentTarget->m_FramebufferID); + this->m_States.binding.framebuffer = this->m_CurrentTarget->m_FramebufferID; + } +} + +uint32_t GLSDLDevice::GetID() { + return this->m_ID; +} + +GLFramebuffer* GLSDLDevice::GetCurrentTarget() { + return this->m_CurrentTarget; +} + +GLShader* GLSDLDevice::GetShader(GLShader::ShaderType shaderType) { + if (shaderType == GLShader::eVertexShader) { + return this->m_VertexShader; + } else if (shaderType == GLShader::ePixelShader) { + return this->m_PixelShader; + } else { + return nullptr; + } +} + +const GLStates::VertexArrayObject& GLSDLDevice::GetVertexArrayStates() { + return this->m_VertexArrayObject->m_GLStates; +} + +void GLSDLDevice::GLSDLDraw(GLEnum mode, uint32_t start, uint32_t end, uint32_t a5, uint32_t a6, uint32_t count) { + BLIZZARD_ASSERT(this->m_Context.IsCurrentContext()); + + this->CheckDepthTarget(); + + // if (!this->m_DrawCount) { + // if (this->m_Context.m_MTGLEnabled) { + // glFlush(); + // } + + // // GLFence::TestFences(); + // } + + this->m_DrawCount++; + + this->RestoreTextures(); + + this->m_DefaultVertexArrayObject.m_Properties.m_VertexBase = a5; + GLVertexArray::FindVertexArray(this, this->m_DefaultVertexArrayObject); + + auto vs = this->m_VertexShader; + auto ps = this->m_PixelShader; + + if (ps) { + // TODO + // this->Sub30440(); + } + + // if (this->m_TexWorker && !this->m_TexWorker->m_UnkA1) { + // this->m_TexWorker->WaitOnGLObjects(); + // } + + if (vs) { + this->SetShader(GLShader::eVertexShader, vs); + } else { + this->ApplyTransforms(); + } + + if (ps) { + this->SetShader(GLShader::ePixelShader, ps); + } else { + this->UpdateFFPTexturing(); + } + + if (vs && vs->m_UsingGLSL && ps && ps->m_UsingGLSL) { + this->m_GLSLProgram = GLGLSLProgram::Find(vs, ps); + } else { + this->BindGLSLProgram(nullptr); + } + + this->ApplyShaderConstants(); + + if (count) { + GLBuffer* buffer = this->m_VertexArrayObject->m_Properties.m_IndexBuffer; + GLEnum format = buffer->m_IndexFormat; + + uint32_t v18; + + if (format == GL_UNSIGNED_SHORT) { + v18 = 1; + } else if (format == GL_UNSIGNED_INT) { + v18 = 2; + } else { + BLIZZARD_ASSERT(!"buffer uses unknown format"); + } + + void* indices = GLBuffer::m_UsingVBO + ? reinterpret_cast(a6 << v18) + : buffer->m_Data + (a6 << v18); + + glDrawRangeElements(mode, start, end, count, buffer->m_IndexFormat, indices); + } else { + glDrawArrays(mode, start, end - start); + } +} + +void GLSDLDevice::Init(GLSDLWindow* window, const char* debugName, uint32_t flags) { + if (this->m_Init) { + return; + } + + this->m_BatchViewerEnabled = flags & 0x1; + this->m_UseWindowSystemBuffer = flags & (0x2 | 0x4); + this->m_FlippedSystemBuffer = flags & 0x4; + this->m_ShaderCompiler = flags & 0x8; + this->m_WorkerDevice = flags & 0x10; + + this->m_DebugName.assign(debugName, strlen(debugName)); + + this->m_Window = window; + + // *** sets + // this->m_UseWindowSystemBuffer = false; + // *** + + GLSDLDevice::Set(this); + + this->m_Context.Create(window); + this->m_Context.MakeCurrent(window); + + // TODO + // if (dword_10329E4 == dword_10329E0) + // GLRendererInfo::InitExtensions(); + + this->LoadDefaultStates(); + + this->m_Init = true; + + if (this->m_ID == -1) { + this->m_ID = GLSDLDevice::m_Devices.size(); + GLSDLDevice::m_Devices.insert(GLSDLDevice::m_Devices.end(), this); + } else { + GLSDLDevice::m_Devices[this->m_ID] = this; + } + + if (!GLSDLDevice::m_StaticResourcesRefCount) { + // GLContext::s_MainContext = this->m_Context.m_Context->context; + GLSDLDevice::InitPools(); + GLSDLDevice::StaticInit(); + } + + ++GLSDLDevice::m_StaticResourcesRefCount; + + // if (!this->m_WorkerDevice) { + // GLWorker* v11 = new GLWorker(this); + // this->m_TexWorker = v11; + // } + + glBindFramebufferEXT(GL_FRAMEBUFFER, 0); + glClear(GL_COLOR_BUFFER_BIT); + + GLFramebuffer* v12 = GLFramebuffer::Create(0); + this->m_FBOTarget = v12; + GLFramebuffer* currentTarget = v12; + + // TODO verify this check + if (this->m_UseWindowSystemBuffer) { + GLFramebuffer* v14 = GLFramebuffer::Create(1); + this->m_SystemTarget = v14; + currentTarget = v14; + } + + this->m_CurrentTarget = currentTarget; + + GLuint v15 = 0; + + if (currentTarget) { + v15 = currentTarget->m_FramebufferID; + } + + if (this->m_States.binding.framebuffer != v15) { + glBindFramebufferEXT(GL_FRAMEBUFFER, v15); + this->m_States.binding.framebuffer = v15; + } +} + +void GLSDLDevice::LoadDefaultStates() { + // Depth + + this->m_States.depth.testEnable = false; + this->m_States.depth.compareFunc = GL_GEQUAL; + this->m_States.depth.writeMask = true; + + // Stencil + + this->m_States.stencil.testEnable = false; + this->m_States.stencil.ref = 0; + this->m_States.stencil.mask = 0xFFFFFFFF; + this->m_States.stencil.writeMask = 0xFFFFFFFF; + this->m_States.stencil.useTwoSidedStencil = false; + + this->m_States.stencil.front.compareFunc = GL_ALWAYS; + this->m_States.stencil.front.opFail = GL_KEEP; + this->m_States.stencil.front.opZFail = GL_KEEP; + this->m_States.stencil.front.opZPass = GL_KEEP; + + this->m_States.stencil.back.compareFunc = GL_ALWAYS; + this->m_States.stencil.back.opFail = GL_KEEP; + this->m_States.stencil.back.opZFail = GL_KEEP; + this->m_States.stencil.back.opZPass = GL_KEEP; + + // Rasterizer + + this->m_States.rasterizer.cullMode = GL_CCW; + this->m_States.rasterizer.cullFaceMode = GL_BACK; + this->m_States.rasterizer.fillMode = GL_FILL; + this->m_States.rasterizer.constantDepthBias = 0.0; + this->m_States.rasterizer.slopeScaledDepthBias = 0.0; + + this->m_States.rasterizer.viewport = { + 0, + 0, + this->m_Window->GetWidth(), + this->m_Window->GetHeight() + }; + + this->m_States.rasterizer.zNear = 0.0; + this->m_States.rasterizer.zFar = 1.0; + this->m_States.rasterizer.scissorEnable = false; + + this->m_States.rasterizer.scissor = { + 0, + 0, + this->m_Window->GetWidth(), + this->m_Window->GetHeight() + }; + + this->m_States.rasterizer.clipPlaneMask = 0; + memset(this->m_States.rasterizer.clipPlanes, 0, sizeof(this->m_States.rasterizer.clipPlanes)); + + // Blend + + for (int32_t i = 0; i < 4; ++i) { + this->m_States.blend.colorMask[i] = { true, true, true, true }; + } + + this->m_States.blend.alphaBlend = 0; + this->m_States.blend.srcBlendFactor = 1; + this->m_States.blend.destBlendFactor = 0; + this->m_States.blend.blendOp = GL_FUNC_ADD; + this->m_States.blend.blendColor = GLColor4f::ZERO; + + // FixedFunc + + this->m_States.fixedFunc.fogColor = { 0.0, 0.0, 0.0, 0.0 }; + this->m_States.fixedFunc.fogStart = 0.0; + this->m_States.fixedFunc.alphaTestRef = 0.0; + this->m_States.fixedFunc.fogEnable = 0; + this->m_States.fixedFunc.fogMode = GL_LINEAR; + this->m_States.fixedFunc.fogEnd = 1.0; + this->m_States.fixedFunc.fogDensity = 1.0; + this->m_States.fixedFunc.alphaTestEnable = 0; + this->m_States.fixedFunc.alphaTestFunc = GL_ALWAYS; + + for (int32_t i = 0; i < 8; ++i) { + this->m_States.fixedFunc.texOp[i].texturing = 0; + this->m_States.fixedFunc.texOp[i].constant = GLColor4f::ZERO; + this->m_States.fixedFunc.texOp[i].colorOp = GL_MODULATE; + this->m_States.fixedFunc.texOp[i].colorScale = 1.0; + this->m_States.fixedFunc.texOp[i].colorArg0 = GL_TEXTURE; + this->m_States.fixedFunc.texOp[i].colorArg1 = GL_PREVIOUS; + this->m_States.fixedFunc.texOp[i].colorArg2 = GL_CONSTANT; + this->m_States.fixedFunc.texOp[i].alphaOp = GL_MODULATE; + this->m_States.fixedFunc.texOp[i].alphaScale = 1.0; + this->m_States.fixedFunc.texOp[i].alphaArg0 = GL_TEXTURE; + this->m_States.fixedFunc.texOp[i].alphaArg1 = GL_PREVIOUS; + this->m_States.fixedFunc.texOp[i].alphaArg2 = GL_CONSTANT; + } + + this->m_States.fixedFunc.lighting.enable = true; + this->m_States.fixedFunc.lighting.sceneAmbient = { 0.0, 0.0, 0.0, 0.0 }; + + for (int32_t i = 0; i < 8; ++i) { + this->m_States.fixedFunc.lighting.lights[i].enable = false; + this->m_States.fixedFunc.lighting.lights[i].position = { 0.0, 0.0, 1.0, 0.0 }; + this->m_States.fixedFunc.lighting.lights[i].view.isDirty = true; + this->m_States.fixedFunc.lighting.lights[i].view.isIdentity = true; + this->m_States.fixedFunc.lighting.lights[i].constantAttenuation = 0.0; + this->m_States.fixedFunc.lighting.lights[i].linearAttenuation = 0.0; + this->m_States.fixedFunc.lighting.lights[i].quadraticAttenuation = 0.0; + this->m_States.fixedFunc.lighting.lights[i].ambient = GLColor4f::ZERO; + this->m_States.fixedFunc.lighting.lights[i].diffuse = GLColor4f::WHITE; + this->m_States.fixedFunc.lighting.lights[i].specular = GLColor4f::ZERO; + } + + this->m_States.fixedFunc.lighting.lights[0].enable = true; + + this->m_States.fixedFunc.lighting.material.materialSource = 4609; + this->m_States.fixedFunc.lighting.material.ambient = GLColor4f::ZERO; + this->m_States.fixedFunc.lighting.material.diffuse = GLColor4f::WHITE; + this->m_States.fixedFunc.lighting.material.specular = GLColor4f::ZERO; + this->m_States.fixedFunc.lighting.material.shininess = 0.0; + this->m_States.fixedFunc.lighting.material.emission = GLColor4f::ZERO; + + this->m_States.fixedFunc.transforms.matrixMode = 5888; + this->m_States.fixedFunc.transforms.modelviewStatus = 5888; + this->m_States.fixedFunc.transforms.modelView.isIdentity = true; + this->m_States.fixedFunc.transforms.modelView.isDirty = true; + this->m_States.fixedFunc.transforms.world.isIdentity = true; + this->m_States.fixedFunc.transforms.world.isDirty = true; + this->m_States.fixedFunc.transforms.view.isIdentity = true; + this->m_States.fixedFunc.transforms.view.isDirty = true; + this->m_States.fixedFunc.transforms.projection.isIdentity = true; + this->m_States.fixedFunc.transforms.projection.isDirty = true; + + for (int32_t i = 0; i < 8; ++i) { + this->m_States.fixedFunc.transforms.texture[i].isIdentity = true; + this->m_States.fixedFunc.transforms.texture[i].isDirty = true; + } + + for (int32_t i = 0; i < 8; ++i) { + this->m_States.fixedFunc.texCoordIndex[i] = i; + } + + for (int32_t i = 0; i < 8; ++i) { + this->m_States.fixedFunc.texGen[i].S = 0; + this->m_States.fixedFunc.texGen[i].T = 0; + this->m_States.fixedFunc.texGen[i].R = 0; + this->m_States.fixedFunc.texGen[i].Q = 0; + } + + this->m_States.fixedFunc.pointSprite.enable = false; + this->m_States.fixedFunc.pointSprite.size = 1.0; + this->m_States.fixedFunc.pointSprite.attenuation[0] = 1.0; + this->m_States.fixedFunc.pointSprite.attenuation[1] = 0.0; + this->m_States.fixedFunc.pointSprite.attenuation[2] = 0.0; + this->m_States.fixedFunc.pointSprite.min = 0.0; + this->m_States.fixedFunc.pointSprite.max = 1.0; + + this->m_States.fixedFunc.normalizeNormal = false; + + // Samplers + + for (int32_t i = 0; i < 16; ++i) { + this->m_States.samplers[i].mipmapBias = 0.0; + this->m_States.samplers[i].addressModeS = 10497; + this->m_States.samplers[i].addressModeT = 10497; + this->m_States.samplers[i].addressModeR = 10497; + this->m_States.samplers[i].magFilterMode = 9729; + this->m_States.samplers[i].minFilterMode = 9729; + this->m_States.samplers[i].maxAnisotropy = 1.0; + this->m_States.samplers[i].borderColor = { 0.0, 0.0, 0.0, 0.0 }; + } + + // Shader + + this->m_States.shader.vertexShaderEnable = false; + + for (int32_t i = 0; i < 256; ++i) { + this->m_States.shader.vertexShaderConst[i] = { 0.0, 0.0, 0.0, 1.0 }; + } + + this->m_States.shader.pixelShaderEnable = false; + + for (int32_t i = 0; i < 64; ++i) { + this->m_States.shader.pixelShaderConst[i] = { 0.0, 0.0, 0.0, 1.0 }; + } + + // Binding + + memset(&this->m_States.binding, 0, sizeof(this->m_States.binding)); + + // Clear + + this->m_States.clear.clearColor = GLColor4f::ZERO; + this->m_States.clear.clearDepth = 1.0; + this->m_States.clear.clearStencil = 0; + + // Misc + + this->m_States.misc.drawBuffers[0] = 0; + this->m_States.misc.drawBuffers[1] = 0; + this->m_States.misc.drawBuffers[2] = 0; + this->m_States.misc.drawBuffers[3] = 0; + this->m_States.misc.readBuffer = 0; + + // Assign default states + memcpy(&this->m_DefaultStates.depth, &this->m_States.depth, sizeof(this->m_DefaultStates.depth)); + memcpy(&this->m_DefaultStates.stencil, &this->m_States.stencil, sizeof(this->m_DefaultStates.stencil)); + memcpy(&this->m_DefaultStates.rasterizer, &this->m_States.rasterizer, sizeof(this->m_DefaultStates.rasterizer)); + memcpy(&this->m_DefaultStates.blend, &this->m_States.blend, sizeof(this->m_DefaultStates.blend)); + memcpy(&this->m_DefaultStates.clear, &this->m_States.clear, sizeof(this->m_DefaultStates.clear)); + memcpy(&this->m_DefaultStates.fixedFunc, &this->m_States.fixedFunc, sizeof(this->m_DefaultStates.fixedFunc)); + memcpy(this->m_DefaultStates.samplers, this->m_States.samplers, sizeof(this->m_DefaultStates.samplers)); + memcpy(&this->m_DefaultStates.shader, &this->m_States.shader, sizeof(this->m_DefaultStates.shader)); + memcpy(&this->m_DefaultStates.binding, &this->m_States.binding, sizeof(this->m_DefaultStates.binding)); + memcpy(&this->m_DefaultStates.misc, &this->m_States.misc, sizeof(this->m_DefaultStates.misc)); + + // TODO + // if (v54 != this->m_States.misc.unpackClientStorage) { + // glPixelStorei(34226, v54); + // this->m_States.misc.unpackClientStorage = v54; + // } + + this->ApplyGLBindings(this->m_States, 1); + this->ApplyGLStates(this->m_States, 1); +} + +void GLSDLDevice::ResetBackbuffer(uint32_t width, uint32_t height, GLTextureFormat colorFormat, GLTextureFormat depthFormat, uint32_t sampleCount) { + BLIZZARD_ASSERT(this->m_Context.IsCurrentContext()); + + if ( + this->m_BackBufferColor + && this->m_BackBufferColor->m_Width == width + && this->m_BackBufferColor->m_Height == height + && this->m_BackBufferColor->m_Format == colorFormat + && this->m_BackBufferDepth + && this->m_BackBufferDepth->m_Format == depthFormat + ) { + if (this->m_UseWindowSystemBuffer && this->m_CurrentTarget->GetSampleCount() != sampleCount) { + // this->m_Context.SetContextFormat(depthFormat, sampleCount); + } + + return; + } + + auto v24 = this->m_BackBufferColor != 0; + + if (this->m_BackBufferColor) { + this->m_BackBufferColor->Release(); + this->m_BackBufferColor = nullptr; + } + + if (this->m_BackBufferStencil) { + this->m_BackBufferStencil->Release(); + this->m_BackBufferStencil = nullptr; + } + + if (this->m_BackBufferDepth) { + this->m_BackBufferDepth->Release(); + this->m_BackBufferDepth = nullptr; + } + + GLTextureFormat v10 = this->m_UseWindowSystemBuffer ? depthFormat : GLTF_INVALID; + // this->m_Context.SetContextFormat(v10, sampleCount); + + this->BindFramebuffer( + this->m_UseWindowSystemBuffer + ? this->m_SystemTarget + : this->m_FBOTarget + ); + + if (this->m_UseWindowSystemBuffer && !v24) { + this->Clear(0x4500, GLColor4f::BLACK, 1.0, 0); + this->m_Window->Swap(); + } + + uint32_t v13 = GLTFLAG_SYSTEM_BUFFER; + if (!this->m_UseWindowSystemBuffer) { + v13 = 0; + } + + uint32_t v14 = GLTFLAG_RENDERTARGET; + if (!this->m_FlippedSystemBuffer) { + v14 = v13 | GLTFLAG_RENDERTARGET; + } + + auto v15 = GLTexture2D::Create(width, height, 1, colorFormat, v14); + this->m_BackBufferColor = v15; + auto v16 = v15->GetMipmap(0, GL_TEXTURE_CUBE_MAP_POSITIVE_X); + this->m_CurrentTargetColor[0] = v16; + this->m_CurrentTarget->Attach(v16, GL_COLOR_ATTACHMENT0, 0); + + GLRect v29 = { 0, 0, static_cast(width), static_cast(height) }; + this->SetViewport(v29, 0.0, 1.0); + + if (this->m_FlippedSystemBuffer) { + auto v19 = this->m_BackBufferColor->GetMipmap(0, GL_TEXTURE_CUBE_MAP_POSITIVE_X); + GLRect v25 = { 0, 0, v19->m_Width, v19->m_Height }; + this->CopyTex(0, 0, v19, &v25); + } + + if (depthFormat) { + if (depthFormat == GLTF_D24S8) { + auto v20 = GLTexture2D::Create(width, height, 1, GLTF_D24S8, v13 | GLTFLAG_RENDERTARGET | GLTFLAG_DEPTH | GLTFLAG_STENCIL); + this->m_BackBufferDepth = v20; + this->m_BackBufferStencil = v20; + + // TODO how to properly increment GLObject ref counts? + v20->AddRefTwin(); + v20->m_RefCount++; + + auto v22 = this->m_BackBufferStencil->GetMipmap(0, GL_TEXTURE_CUBE_MAP_POSITIVE_X); + this->m_CurrentTargetStencil = v22; + this->m_CurrentTarget->Attach(v22, GL_STENCIL_ATTACHMENT, 0); + } else { + this->m_BackBufferDepth = GLTexture2D::Create(width, height, 1, depthFormat, v13 | GLTFLAG_RENDERTARGET | GLTFLAG_DEPTH); + } + + auto v17 = this->m_BackBufferDepth->GetMipmap(0, GL_TEXTURE_CUBE_MAP_POSITIVE_X); + this->m_CurrentTargetDepth = v17; + this->m_CurrentTarget->Attach(v17, GL_DEPTH_ATTACHMENT, 0); + this->m_CurrentDepthBuffer = this->m_CurrentTargetDepth; + this->SetDepthTestEnable(1); + } + + BLIZZARD_ASSERT(this->m_CurrentTarget->IsValid()); + + this->Clear(0x4500, GLColor4f::BLACK, 1.0, 0); +} + +void GLSDLDevice::Resize(uint32_t width, uint32_t height) { + auto colorFormat = this->m_BackBufferColor ? this->m_BackBufferColor->m_Format : GLTF_INVALID; + auto depthFormat = this->m_BackBufferDepth ? this->m_BackBufferDepth->m_Format : GLTF_INVALID; + + this->SetDisplay( + width, + height, + colorFormat, + depthFormat, + 0, + false, + false, + this->m_Context.GetSampleCount() + ); +} + +void GLSDLDevice::RestoreTextures() { + BLIZZARD_ASSERT(this->m_Context.IsCurrentContext()); + + for (int32_t i = 0; i < 16; i++) { + GLTexture* texture = this->m_Textures[i]; + + if (texture && !texture->IsValid()) { + this->m_Textures[i] = nullptr; + } + + this->SetTexture(i, this->m_Textures[i]); + } +} + +void GLSDLDevice::SetActiveTexture(uint32_t a2) { + if (this->m_States.binding.currentActiveTexture != a2) { + glActiveTexture(GL_TEXTURE0 + a2); + this->m_States.binding.currentActiveTexture = a2; + } +} + +void GLSDLDevice::SetAlphaBlend(GLEnum srcBlend, GLEnum dstBlend, GLEnum blendOp) { + if (this->m_States.blend.srcBlendFactor != srcBlend || this->m_States.blend.destBlendFactor != dstBlend) { + glBlendFunc(srcBlend, dstBlend); + this->m_States.blend.srcBlendFactor = srcBlend; + this->m_States.blend.destBlendFactor = dstBlend; + } + + if (this->m_States.blend.blendOp != blendOp) { + glBlendEquation(blendOp); + this->m_States.blend.blendOp = blendOp; + } +} + +void GLSDLDevice::SetAlphaBlendEnable(bool enable) { + if (this->m_States.blend.alphaBlend != enable) { + if (enable) { + glEnable(GL_BLEND); + } else { + glDisable(GL_BLEND); + } + + this->m_States.blend.alphaBlend = enable; + } +} + +void GLSDLDevice::SetAlphaTest(GLEnum func, float ref) { + if (this->m_States.fixedFunc.alphaTestFunc != func || this->m_States.fixedFunc.alphaTestRef != ref) { + BLIZZARD_ASSERT(ref <= 1.0f); + + glAlphaFunc(func, ref); + this->m_States.fixedFunc.alphaTestFunc = func; + this->m_States.fixedFunc.alphaTestRef = ref; + } +} + +void GLSDLDevice::SetAlphaTestEnable(bool enable) { + if (this->m_States.fixedFunc.alphaTestEnable != enable) { + if (enable) { + glEnable(GL_ALPHA_TEST); + } else { + glDisable(GL_ALPHA_TEST); + } + } +} + +void GLSDLDevice::SetClearColor(const GLColor4f& clearColor) { + if ( + this->m_States.clear.clearColor.r != clearColor.r + || this->m_States.clear.clearColor.g != clearColor.g + || this->m_States.clear.clearColor.b != clearColor.b + || this->m_States.clear.clearColor.a != clearColor.a + ) { + glClearColor(clearColor.r, clearColor.g, clearColor.b, clearColor.a); + this->m_States.clear.clearColor = { clearColor.r, clearColor.g, clearColor.b, clearColor.a }; + } +} + +void GLSDLDevice::SetClearDepth(double clearDepth) { + if (this->m_States.clear.clearDepth != clearDepth) { + glClearDepth(clearDepth); + this->m_States.clear.clearDepth = clearDepth; + } +} + +void GLSDLDevice::SetClearStencil(int32_t clearStencil) { + if (this->m_States.clear.clearStencil != clearStencil) { + glClearStencil(clearStencil); + this->m_States.clear.clearStencil = clearStencil; + } +} + +void GLSDLDevice::SetColorWriteMask(bool red, bool green, bool blue, bool alpha, uint32_t index) { + if ( + this->m_States.blend.colorMask[index].red != red + || this->m_States.blend.colorMask[index].green != green + || this->m_States.blend.colorMask[index].blue != blue + || this->m_States.blend.colorMask[index].alpha != alpha + ) { + if (GLSDLDevice::m_ExtColorMaskIndexed) { + glColorMaskIndexedEXT(index, red, green, blue, alpha); + } else if (index == 0) { + glColorMask(red, green, blue, alpha); + } + + this->m_States.blend.colorMask[index].red = red; + this->m_States.blend.colorMask[index].green = green; + this->m_States.blend.colorMask[index].blue = blue; + this->m_States.blend.colorMask[index].alpha = alpha; + } +} + +void GLSDLDevice::SetCullMode(GLEnum cullMode) { + if (this->m_States.rasterizer.cullMode != cullMode) { + if (cullMode) { + if (cullMode - GL_CW <= 1) { + glEnable(GL_CULL_FACE); + glFrontFace(cullMode); + } + + this->m_States.rasterizer.cullMode = cullMode; + } else { + glDisable(GL_CULL_FACE); + this->m_States.rasterizer.cullMode = 0; + } + } +} + +void GLSDLDevice::SetDepthBias(float constantBias, float slopeScaledBias) { + // TODO +} + +void GLSDLDevice::SetDepthTestEnable(bool enable) { + if (this->m_States.depth.testEnable != enable) { + if (enable) { + glEnable(GL_DEPTH_TEST); + } else { + glDisable(GL_DEPTH_TEST); + } + + this->m_States.depth.testEnable = enable; + } +} + +void GLSDLDevice::SetDepthTestFunc(GLEnum func) { + if (this->m_States.depth.compareFunc != func) { + glDepthFunc(func); + this->m_States.depth.compareFunc = func; + } +} + +void GLSDLDevice::SetDepthWriteMask(bool enable) { + if (this->m_States.depth.writeMask != enable) { + glDepthMask(enable); + this->m_States.depth.writeMask = enable; + } +} + +void GLSDLDevice::SetDisplay(uint32_t width, uint32_t height, GLTextureFormat colorFormat, GLTextureFormat depthFormat, uint32_t refreshRate, bool windowed, bool captureDisplay, uint32_t sampleCount) { + // uint32_t v9 = a9; + + // if (this->m_PBOPool) { + // // TODO + // // this->m_PBOPool->Flush(1); + // } + + // if (a9 > 7) { + // uint32_t v10; + + // if (a7) { + // // CGDirectDisplayID mainDisplay = CGMainDisplayID(); + // // CGRect bounds = CGDisplayBounds(mainDisplay); + // // CGFloat boundsWidth = CGRectGetWidth(bounds); + // // CGFloat boundsHeight = CGRectGetHeight(bounds); + + // // v10 = std::floor(boundsWidth) * std::floor(boundsHeight); + // } else { + // v10 = width * height; + // } + + // if (v10 >= 2304001) { + // v9 = 6; + // } + // } + + // if (this->m_Context.m_Window) { + // // TODO + // // - callback related... set to default callbacks? + // // (this->m_Context.m_Window + 84)(); + // } + + // if (a7) { + // if (this->m_Context.m_Window) { + // this->m_Context.m_Window->Resize(width, height); + // } + + // this->m_Context.SetWindow(this->m_Context.m_Window, 0); + // } else { + // this->m_Context.SetFullscreenMode(width, height, a6, a8); + // } + + GLSDLWindowRect newRect; + newRect.size.width = width; + newRect.size.height = height; + + this->m_Window->Resize(newRect); + + this->ResetBackbuffer(width, height, colorFormat, depthFormat, sampleCount); + + // if (this->m_Context.m_Window) { + // // TODO + // // - set active callbacks to callbacks + // // (this->m_Context.m_Window + 88)(); + // } +} + +void GLSDLDevice::SetFogColor(float r, float g, float b, float a) { + if ( + this->m_States.fixedFunc.fogColor.r != r + || this->m_States.fixedFunc.fogColor.g != g + || this->m_States.fixedFunc.fogColor.b != b + || this->m_States.fixedFunc.fogColor.a != a + ) { + this->m_States.fixedFunc.fogColor.r = r; + this->m_States.fixedFunc.fogColor.g = g; + this->m_States.fixedFunc.fogColor.b = b; + this->m_States.fixedFunc.fogColor.a = a; + + glFogfv(GL_FOG_COLOR, reinterpret_cast(&this->m_States.fixedFunc.fogColor)); + + // TODO logic related to a renderer info value + } +} + +void GLSDLDevice::SetFogEnable(bool enable) { + if (this->m_States.fixedFunc.fogEnable != enable) { + if (enable) { + glEnable(GL_FOG); + } else { + glDisable(GL_FOG); + } + + this->m_States.fixedFunc.fogEnable = enable; + } +} + +void GLSDLDevice::SetFogParam(GLEnum param, float value) { + if (param == GL_FOG_START) { + if (this->m_States.fixedFunc.fogStart != value) { + glFogf(GL_FOG_START, value); + this->m_States.fixedFunc.fogStart = value; + } + } else if (param == GL_FOG_END) { + if (this->m_States.fixedFunc.fogEnd != value) { + glFogf(GL_FOG_END, value); + this->m_States.fixedFunc.fogEnd = value; + } + } else if (param == GL_FOG_DENSITY) { + if (this->m_States.fixedFunc.fogDensity != value) { + glFogf(GL_FOG_DENSITY, value); + this->m_States.fixedFunc.fogDensity = value; + } + } else { + BLIZZARD_ASSERT(false); + } +} + +void GLSDLDevice::SetIndexBuffer(GLBuffer* buffer) { + BLIZZARD_ASSERT(buffer == nullptr || buffer->m_IndexFormat != GL_ZERO); + this->m_DefaultVertexArrayObject.m_Properties.m_IndexBuffer = buffer; +} + +void GLSDLDevice::SetLightingEnable(bool enable) { + if (this->m_States.fixedFunc.lighting.enable != enable) { + if (enable) { + glEnable(GL_LIGHTING); + } else { + glDisable(GL_LIGHTING); + } + + this->m_States.fixedFunc.lighting.enable = enable; + } +} + +void GLSDLDevice::SetModelView(GLEnum transform) { + if (transform == 'VIEW') { + // TODO + return; + } + + if (transform == 'WRLD') { + // TODO + return; + } + + if (transform != GL_MODELVIEW) { + BLIZZARD_ASSERT(false); + } + + auto& world = this->m_States.fixedFunc.transforms.world; + auto& view = this->m_States.fixedFunc.transforms.view; + auto& modelView = this->m_States.fixedFunc.transforms.modelView; + + if (this->m_States.fixedFunc.transforms.modelviewStatus != transform || modelView.isDirty) { + if (world.isIdentity && view.isIdentity) { + modelView.isIdentity = true; + modelView.isDirty = true; + } else if (world.isIdentity) { + modelView = view; + modelView.isIdentity = false; + modelView.isDirty = true; + } else if (view.isIdentity) { + modelView = world; + modelView.isIdentity = false; + modelView.isDirty = true; + } else { + // TODO assign model * view to modelView + BLIZZARD_ASSERT(!"Unimplemented"); + } + + if (this->m_States.fixedFunc.transforms.matrixMode != GL_MODELVIEW) { + glMatrixMode(GL_MODELVIEW); + this->m_States.fixedFunc.transforms.matrixMode = GL_MODELVIEW; + } + + if (modelView.isIdentity) { + glLoadIdentity(); + } else { + glLoadMatrixf(modelView.m); + } + + this->m_States.fixedFunc.transforms.modelviewStatus = transform; + } +} + +void GLSDLDevice::SetScissor(bool a2, const GLRect& a3) { + // TODO +} + +void GLSDLDevice::SetShader(GLShader::ShaderType shaderType, GLShader* shader) { + if (shader) { + if (shader->var18) { + // TODO + } + + BLIZZARD_ASSERT(shader->IsEnabled()); + BLIZZARD_ASSERT(shader->GetShaderType() == shaderType); + + this->BindShader(shader); + } + + int32_t enable = shader != nullptr; + + if (shaderType == GLShader::eVertexShader) { + if (this->m_States.shader.vertexShaderEnable != enable) { + if (enable) { + glEnable(GL_VERTEX_PROGRAM_ARB); + } else { + glDisable(GL_VERTEX_PROGRAM_ARB); + } + + this->m_States.shader.vertexShaderEnable = enable; + } + + this->m_VertexShader = shader; + } else if (shaderType == GLShader::ePixelShader) { + if (this->m_States.shader.pixelShaderEnable != enable) { + if (enable) { + glEnable(GL_FRAGMENT_PROGRAM_ARB); + } else { + glDisable(GL_FRAGMENT_PROGRAM_ARB); + } + + this->m_States.shader.pixelShaderEnable = enable; + } + + this->m_PixelShader = shader; + } else { + BLIZZARD_ASSERT(!"Unknown shader type!"); + } +} + +void GLSDLDevice::SetShaderConstants(GLShader::ShaderType shaderType, uint32_t index, const float* constants, uint32_t count) { + BLIZZARD_ASSERT(count != 0); + + GLShader* shader = nullptr; + + if (shaderType == GLShader::eVertexShader) { + shader = this->m_VertexShader; + } else if (shaderType == GLShader::ePixelShader) { + shader = this->m_PixelShader; + } + + if (GLSDLDevice::m_ShaderConstantBindings) { + if (!shader) { + return; + } + + if (shader && shader->var10) { + shader->SetShaderConstants(shaderType, index, constants, count); + return; + } + } + + this->SetShaderConstantsInternal(shaderType, index, constants, count); +} + +void GLSDLDevice::SetShaderConstantsInternal(GLShader::ShaderType shaderType, uint32_t index, const float* constants, uint32_t count) { + if (shaderType == GLShader::eVertexShader) { + BLIZZARD_ASSERT((index + count) <= std::extentm_States.shader.vertexShaderConst)>::value); + + memcpy(&this->m_States.shader.vertexShaderConst[index], constants, (sizeof(float) * 4) * count); + + BLIZZARD_ASSERT(index <= 0xFFFF); + BLIZZARD_ASSERT(count <= 0xFFFF); + + uint16_t start = std::min(static_cast(index), this->m_DirtyVertexShaderConsts.start); + uint16_t end = std::max(static_cast(index + count), this->m_DirtyVertexShaderConsts.end); + + this->m_DirtyVertexShaderConsts.start = start; + this->m_DirtyVertexShaderConsts.end = end; + } else if (shaderType == GLShader::ePixelShader) { + BLIZZARD_ASSERT((index + count) <= std::extentm_States.shader.pixelShaderConst)>::value); + + memcpy(&this->m_States.shader.pixelShaderConst[index], constants, (sizeof(float) * 4) * count); + + BLIZZARD_ASSERT(index <= 0xFFFF); + BLIZZARD_ASSERT(count <= 0xFFFF); + + uint16_t start = std::min(static_cast(index), this->m_DirtyPixelShaderConsts.start); + uint16_t end = std::max(static_cast(index + count), this->m_DirtyPixelShaderConsts.end); + + this->m_DirtyPixelShaderConsts.start = start; + this->m_DirtyPixelShaderConsts.end = end; + } else { + // TODO + // BLIZZARD_ASSERT(false, "Unknown shader type %d!", shaderType); + } +} + +void GLSDLDevice::SetTexture(uint32_t stage, GLTexture* texture) { + if (stage > 15) { + BLIZZARD_ASSERT(!"setting an unsupported texture stage to a non-NULL texture"); + } + + BLIZZARD_ASSERT(texture == nullptr || texture->IsValid()); + + uint32_t textureID = 0; + GLEnum textureType = GL_TEXTURE_2D; + + if (this->m_Textures[stage]) { + textureType = this->m_Textures[stage]->m_TextureType; + } + + if (texture) { + textureID = texture->m_TextureID; + textureType = texture->m_TextureType; + } + + uint32_t index = GLSDLTextureTypeToIndex(textureType); + + if (this->m_States.binding.texture[index][stage] != textureID) { + this->SetActiveTexture(stage); + + if (texture) { + texture->Bind(this, 1); + } else { + this->BindTexture(textureType, nullptr); + } + } + + this->m_Textures[stage] = texture; +} + +void GLSDLDevice::SetTransform(GLEnum transform, const float* a3) { + GLTransform* t; + + if (transform == 'VIEW') { + t = &this->m_States.fixedFunc.transforms.view; + } else if (transform == 'WRLD') { + t = &this->m_States.fixedFunc.transforms.world; + } else if (transform == GL_PROJECTION) { + t = &this->m_States.fixedFunc.transforms.projection; + } else if (transform >= GL_TEXTURE0 && transform <= GL_TEXTURE7) { + t = &this->m_States.fixedFunc.transforms.texture[transform - GL_TEXTURE0]; + } else { + BLIZZARD_ASSERT(false); + } + + if (*t != a3) { + t->Set(a3); + } + + if (t->isDirty) { + if (transform == 'VIEW' || transform == 'WRLD') { + this->m_States.fixedFunc.transforms.modelView.isDirty = true; + } + } +} + +void GLSDLDevice::SetUnpackClientStorage(bool enable) { + // TODO + // Blizzard::Debug::Assert(!this->IsUsingPBO() || enable == GL_FALSE); + + if (this->m_States.misc.unpackClientStorage != enable) { + // glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, enable); + this->m_States.misc.unpackClientStorage = enable; + } +} + +void GLSDLDevice::SetVertexBuffer(uint32_t index, GLBuffer* buffer, uint32_t offset, uint32_t stride) { + BLIZZARD_ASSERT(index < GL_MAX_STREAM); + BLIZZARD_ASSERT(buffer == nullptr || buffer->m_IndexFormat == GL_ZERO); + + auto properties = &this->m_DefaultVertexArrayObject.m_Properties; + properties->m_VertexBuffer[index] = buffer; + properties->m_VertexBufferOffset[index] = offset; + properties->m_VertexBufferStride[index] = stride; +} + +void GLSDLDevice::SetVertexFormat(GLVertexFormat* format) { + BLIZZARD_ASSERT(format->m_Size <= kMAX_VERTEX_ATTRIBS); + this->m_DefaultVertexArrayObject.m_Properties.m_VertexBufferFormat = format; +} + +void GLSDLDevice::SetViewport(const GLRect& viewport, double zNear, double zFar) { + if ( + this->m_States.rasterizer.viewport.left != viewport.left + || this->m_States.rasterizer.viewport.top != viewport.top + || this->m_States.rasterizer.viewport.width != viewport.width + || this->m_States.rasterizer.viewport.height != viewport.height + ) { + glViewport(viewport.left, viewport.top, viewport.width, viewport.height); + this->m_States.rasterizer.viewport = viewport; + } + + if ( + this->m_States.rasterizer.zNear != zNear + || this->m_States.rasterizer.zFar != zFar + ) { + glDepthRange(zNear, zFar); + this->m_States.rasterizer.zNear = zNear; + this->m_States.rasterizer.zFar = zFar; + } +} + +void GLSDLDevice::Sub34BB0(GLEnum a2, GLMipmap* a3, uint32_t index) { + if (!a3 || !this->m_UseWindowSystemBuffer) { + return; + } + + GLFramebuffer* target; + + if (a3->GetTexture() == this->m_BackBufferColor || a3->GetTexture() == this->m_BackBufferDepth || a3->GetTexture() == this->m_BackBufferStencil) { + if (this->m_CurrentTarget == this->m_SystemTarget) { + return; + } + + switch (a2) { + case GL_DEPTH_ATTACHMENT: + this->Sub34BB0(GL_DEPTH_ATTACHMENT, nullptr, 0); + this->m_CurrentTarget->Attach(nullptr, GL_DEPTH_ATTACHMENT, 0); + this->m_CurrentTargetDepth = nullptr; + this->m_CurrentDepthBuffer = nullptr; + break; + + case GL_STENCIL_ATTACHMENT: + this->Sub34BB0(GL_STENCIL_ATTACHMENT, nullptr, 0); + this->m_CurrentTarget->Attach(nullptr, GL_STENCIL_ATTACHMENT, 0); + this->m_CurrentTargetStencil = nullptr; + break; + + case GL_COLOR_ATTACHMENT0: + // TODO this->SetColorTarget(0, index); + break; + } + + target = this->m_SystemTarget; + } else { + target = this->m_FBOTarget; + } + + this->BindFramebuffer(target); +} + +void GLSDLDevice::Sub38460(bool a2) { + if (this->m_States.binding.framebuffer == 0) { + glDrawBuffer(GL_BACK); + this->m_States.misc.drawBuffers[0] = GL_BACK; + + glReadBuffer(GL_BACK); + this->m_States.misc.readBuffer = GL_BACK; + + return; + } + + if (a2) { + // TODO + + return; + } + + // TODO +} + +void GLSDLDevice::Swap() { + // if (this->m_Context.m_Window) { + // if (this->m_FlippedSystemBuffer) { + // GLRect rect = { + // 0, + // 0, + // static_cast(this->m_BackBufferColor->m_Width), + // static_cast(this->m_BackBufferColor->m_Height) + // }; + + // GLMipmap* image = this->m_BackBufferColor->GetMipmap(0, GL_TEXTURE_CUBE_MAP_POSITIVE_X); + // this->CopyTex(0, 0, image, &rect); + // } + + // this->DrawRect(); + + // this->m_FrameNumber++; + // this->m_DrawCount = 0; + // } else { + // // glFlushRender(); + // this->m_DrawCount = 0; + // } + + this->DrawRect(); + this->m_FrameNumber++; + this->m_DrawCount = 0; +} + +void GLSDLDevice::UpdateFFPTexturing() { + // TODO +} diff --git a/src/gx/glsdl/GLSDLDevice.hpp b/src/gx/glsdl/GLSDLDevice.hpp new file mode 100644 index 0000000..fd7cd1f --- /dev/null +++ b/src/gx/glsdl/GLSDLDevice.hpp @@ -0,0 +1,190 @@ +#ifndef GX_GL_SDL_GL_SDL_DEVICE_HPP +#define GX_GL_SDL_GL_SDL_DEVICE_HPP + +#include "gx/glsdl/GL.hpp" +#include "gx/glsdl/GLSDLWindow.hpp" +#include "gx/glsdl/GLBatch.hpp" +#include "gx/glsdl/GLBufferPool.hpp" +#include "gx/glsdl/GLSDLContext.hpp" +#include "gx/glsdl/GLDebugMipmap2D.hpp" +#include "gx/glsdl/GLFramebuffer.hpp" +#include "gx/glsdl/GLGLSLProgram.hpp" +#include "gx/glsdl/GLMipmap.hpp" +#include "gx/glsdl/GLShader.hpp" +#include "gx/glsdl/GLTexture.hpp" +#include "gx/glsdl/GLTypes.hpp" +#include "gx/glsdl/GLVertexArray.hpp" +#include +#include +#include +#include +#include + +class GLSDLDevice { + public: + // Types + enum GLSDLDeviceOption { + eUseMTGL = 0, + eUseVertexArray = 1, + eUseGLSL = 2, + eCheckGLStates = 3, + eFlushBeforeDraw = 4, + eDeviceOption5 = 5, + eUseHybridShader = 6, + eDeviceOption7 = 7, + eDeviceOption8 = 8, + eShaderConstantBindings = 9 + }; + + struct RendererInfo { + uint8_t init = 0; + uint32_t vendor_id; + uint32_t renderer_id; + uint32_t max_color_attachments; + uint32_t unk36; // max clip planes + uint32_t unk100; + }; + + // Static variables + static Blizzard::Thread::TLSSlot m_CurrentDevice; + static std::vector m_Devices; + static bool m_ExtARBShadow; + static bool m_ExtColorMaskIndexed; + static RendererInfo m_RendererInfo; + static bool m_ShaderConstantBindings; + static int32_t m_StaticResourcesRefCount; + static bool m_UseHybridShader; + static GLBuffer* m_BlitQuadVBO; + static GLShader* m_DeviceShaders[]; + static GLTexture* m_DeviceTextures[]; + static GLVertexFormat m_NormalBlitVF; + static GLVertexFormat m_InvertedBlitVF; + static GLFramebuffer* m_F8330C; + + // Static functions + static GLSDLDevice* Get(); + static void Set(GLSDLDevice* device); + static void InitPools(); + static RendererInfo GetRendererInfo(); + static void InitRendererInfo(); + static void SetOption(GLSDLDeviceOption option, bool enable); + static void StaticInit(); + + // Member variables + std::string m_DebugName; + GLStates m_States; + GLTexture* m_Textures[16] = {}; + GLShader* m_PixelShader = nullptr; + GLShader* m_VertexShader = nullptr; + GLGLSLProgram* m_GLSLProgram = nullptr; + GLVertexArray* m_VertexArrayObject = &m_DefaultVertexArrayObject; + GLFramebuffer* m_SystemTarget = nullptr; + GLFramebuffer* m_FBOTarget = nullptr; + GLFramebuffer* m_CurrentTarget = nullptr; + GLMipmap* m_CurrentTargetColor[4] = {}; + GLMipmap* m_CurrentTargetDepth = nullptr; + GLMipmap* m_CurrentTargetStencil = nullptr; + GLMipmap* m_CurrentDepthBuffer = nullptr; + GLTexture2D* m_BackBufferColor = nullptr; + GLTexture2D* m_BackBufferDepth = nullptr; + GLTexture2D* m_BackBufferStencil = nullptr; + GLSDLWindow* m_Window = nullptr; + GLBufferPool* m_PBOPool = nullptr; + GLSDLContext m_Context; + GLTexture* m_BoundTextures[4][16] = {}; + GLVertexArray m_DefaultVertexArrayObject; + GLDirtyRange m_DirtyVertexShaderConsts; + GLDirtyRange m_DirtyPixelShaderConsts; + float m_ConstantDepthBias = 0.0f; + float m_SlopeScaledDepthBias = 0.0f; + bool m_Init = 0; + uint32_t m_DrawCount = 0; + uint32_t m_ID = -1; + std::list m_TextureList; + std::list::iterator m_OldestActiveTexture; + uint32_t m_TextureTotalSize = 0; + uint32_t m_FrameNumber = 1; + std::list m_DebugMipmaps; + bool m_BatchViewerEnabled = 0; + bool m_UseWindowSystemBuffer = 0; + bool m_FlippedSystemBuffer = 0; + bool m_ShaderCompiler = 0; + bool m_WorkerDevice; + GLStates m_DefaultStates; + std::vector* m_FrameBatches; + bool m_CaptureOnlyOneFrame = 0; + bool m_StopCapturingBatches = 0; + bool m_CaptureBatches = 0; + int32_t m_IndentLevel = 0; + + // Member functions + GLSDLDevice(); + void ApplyGLBindings(const GLStates& states, bool a3); + void ApplyGLStates(const GLStates& states, bool force); + void ApplyShaderConstants(); + void ApplyTransforms(); + void BindBuffer(GLBuffer* buffer, GLEnum target); + void BindFramebuffer(GLFramebuffer* framebuffer); + void BindGLSLProgram(GLGLSLProgram* a2); + void BindShader(GLShader* shader); + void BindTexture(GLEnum textureType, GLTexture* texture); + void BindVertexArray(GLVertexArray* a2); + void BlitFramebuffer(GLMipmap* src, const GLRect* srcRect, GLMipmap* dst, const GLRect* dstRect, GLEnum mask, GLEnum filter); + void CheckDepthTarget(); + void Clear(uint32_t clearMask, const GLColor4f& clearColor, double clearDepth, int32_t clearStencil); + void CopyTex(uint32_t a2, uint32_t a3, GLMipmap* dst, const GLRect* framebufferRect); + GLBuffer* CreateBuffer(GLEnum type, uint32_t a3, const void* a4, GLEnum usage, GLEnum format); + GLShader* CreateShader(GLShader::ShaderType type, const void* buf, int32_t codeLen, const char* name); + GLTexture* CreateTexture2D(uint32_t width, uint32_t height, uint32_t numMipMap, GLTextureFormat format, uint32_t flags); + GLTexture* CreateTextureCubeMap(uint32_t size, uint32_t numMipMap, GLTextureFormat format, uint32_t flags); + void Draw(GLEnum primitive, uint32_t a3, uint32_t a4); + void DrawIndexed(GLEnum primitive, uint32_t a3, uint32_t a4, uint32_t a5, uint32_t a6, uint32_t count); + void DrawRect(); + GLFramebuffer* GetCurrentTarget(); // invented name + uint32_t GetID(); + GLShader* GetShader(GLShader::ShaderType shaderType); + const GLStates::VertexArrayObject& GetVertexArrayStates(); + void GLSDLDraw(GLEnum mode, uint32_t start, uint32_t end, uint32_t a5, uint32_t a6, uint32_t count); + void Init(GLSDLWindow* a2, const char* a3, uint32_t a4); + void LoadDefaultStates(); + void ResetBackbuffer(uint32_t width, uint32_t height, GLTextureFormat colorFormat, GLTextureFormat depthFormat,uint32_t sampleCount); + void Resize(uint32_t width, uint32_t height); + void RestoreTextures(); + void SetActiveTexture(uint32_t a2); + void SetAlphaBlend(GLEnum srcBlend, GLEnum dstBlend, GLEnum blendOp); + void SetAlphaBlendEnable(bool enable); + void SetAlphaTest(GLEnum func, float ref); + void SetAlphaTestEnable(bool enable); + void SetClearColor(const GLColor4f& clearColor); + void SetClearDepth(double clearDepth); + void SetClearStencil(int32_t clearStencil); + void SetColorWriteMask(bool red, bool green, bool blue, bool alpha, uint32_t index); + void SetCullMode(GLEnum cullMode); + void SetDepthBias(float constantBias, float slopeScaledBias); + void SetDepthTestEnable(bool enable); + void SetDepthTestFunc(GLEnum func); + void SetDepthWriteMask(bool enable); + void SetDisplay(uint32_t width, uint32_t height, GLTextureFormat colorFormat, GLTextureFormat depthFormat, uint32_t refreshRate, bool windowed, bool captureDisplay, uint32_t sampleCount); + void SetFogColor(float r, float g, float b, float a); + void SetFogEnable(bool enable); + void SetFogParam(GLEnum param, float value); + void SetIndexBuffer(GLBuffer* buffer); + void SetLightingEnable(bool enable); + void SetModelView(GLEnum transform); + void SetScissor(bool a2, const GLRect& a3); + void SetShader(GLShader::ShaderType shaderType, GLShader* shader); + void SetShaderConstants(GLShader::ShaderType shaderType, uint32_t index, const float* constants, uint32_t count); + void SetShaderConstantsInternal(GLShader::ShaderType shaderType, uint32_t index, const float* constants, uint32_t count); + void SetTexture(uint32_t stage, GLTexture* texture); + void SetTransform(GLEnum transform, const float* a3); + void SetUnpackClientStorage(bool enable); + void SetVertexBuffer(uint32_t index, GLBuffer* buffer, uint32_t offset, uint32_t stride); + void SetVertexFormat(GLVertexFormat* format); + void SetViewport(const GLRect& viewport, double zNear, double zFar); + void Sub34BB0(GLEnum a2, GLMipmap* a3, uint32_t index); + void Sub38460(bool a2); + void Swap(); + void UpdateFFPTexturing(); +}; + +#endif diff --git a/src/gx/glsdl/GLSDLWindow.cpp b/src/gx/glsdl/GLSDLWindow.cpp new file mode 100644 index 0000000..2ac49af --- /dev/null +++ b/src/gx/glsdl/GLSDLWindow.cpp @@ -0,0 +1,131 @@ +#include "gx/glsdl/GLSDLWindow.hpp" + +#include + +static bool s_GLSDL_Initialized = false; + +void GLSDLWindow::Create(const char* title, const GLSDLWindowRect& rect, GLTextureFormat depthFormat, uint32_t sampleCount) { + BLIZZARD_ASSERT(this->m_sdlWindow == nullptr); + + if (!s_GLSDL_Initialized) { + // Initialize SDL video context + SDL_Init(SDL_INIT_VIDEO); + + // Set GL version profile + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); + + s_GLSDL_Initialized = true; + } + + // Set depth and stencil size according to format + uint32_t depthSize = 0; + uint32_t stencilSize = 0; + + switch (depthFormat) { + case GLTF_INVALID: + break; + case GLTF_D32: + depthSize = 32; + break; + case GLTF_D24: + depthSize = 24; + break; + case GLTF_D16: + depthSize = 16; + break; + case GLTF_D24S8: + depthSize = 24; + stencilSize = 8; + break; + default: + BLIZZARD_ASSERT(false); + break; + } + + SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, depthSize); + SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, stencilSize); + + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); + + // Set multisampling + if (sampleCount >= 1) { + SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, sampleCount); + SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); + } + + this->m_sdlWindow = SDL_CreateWindow( + title, + static_cast(rect.size.width), static_cast(rect.size.height), + SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE + ); + + BLIZZARD_ASSERT(this->m_sdlWindow != nullptr); +} + +void GLSDLWindow::Swap() { + SDL_GL_SwapWindow(this->m_sdlWindow); +} + +void GLSDLWindow::Destroy() { + SDL_DestroyWindow(this->m_sdlWindow); + this->m_sdlWindow = nullptr; +} + +GLSDLWindowRect GLSDLWindow::GetRect() { + // Default rectangle + GLSDLWindowRect rect; + + int origin_x = 0; + int origin_y = 0; + if (SDL_GetWindowPosition(this->m_sdlWindow, &origin_x, &origin_y) == 0) { + rect.origin.x = static_cast(origin_x); + rect.origin.y = static_cast(origin_y); + } + + int width = 0; + int height = 0; + if (SDL_GetWindowSize(this->m_sdlWindow, &width, &height) == 0) { + rect.size.width = static_cast(width); + rect.size.height = static_cast(height); + } + + return rect; +} + +GLSDLWindowRect GLSDLWindow::GetBackingRect() { + // Default rectangle + GLSDLWindowRect rect; + + // Query backing width/height + int width = 0; + int height = 0; + if (SDL_GetWindowSizeInPixels(this->m_sdlWindow, &width, &height) == 0) { + rect.size.width = static_cast(width); + rect.size.height = static_cast(height); + } + + return rect; +} + +void GLSDLWindow::Resize(const GLSDLWindowRect& rect) { + auto current = this->GetBackingRect(); + + if (current.size.width != rect.size.width || current.size.height != rect.size.width) { + auto status = SDL_SetWindowSize(this->m_sdlWindow, rect.size.width, rect.size.height); + BLIZZARD_ASSERT(status == 0); + } +} + +int32_t GLSDLWindow::GetWidth() { + return this->GetBackingRect().size.width; +} + +int32_t GLSDLWindow::GetHeight() { + return this->GetBackingRect().size.height; +} + diff --git a/src/gx/glsdl/GLSDLWindow.hpp b/src/gx/glsdl/GLSDLWindow.hpp new file mode 100644 index 0000000..40d84bb --- /dev/null +++ b/src/gx/glsdl/GLSDLWindow.hpp @@ -0,0 +1,44 @@ +#ifndef GX_GL_SDL_GL_SDL_WINDOW_HPP +#define GX_GL_SDL_GL_SDL_WINDOW_HPP + +#include +#include + +#include "gx/glsdl/GLTypes.hpp" + +class GLSDLWindowRect { + public: + struct Point { + int32_t x = 0; + int32_t y = 0; + }; + + struct Size { + int32_t width = 0; + int32_t height = 0; + }; + + Point origin; + Size size; +}; + +class GLSDLWindow { + public: + SDL_Window* m_sdlWindow = nullptr; + + // Create an SDL window with the requested OpenGL attributes + void Create(const char* title, const GLSDLWindowRect& rect, GLTextureFormat depthFormat, uint32_t sampleCount); + void Destroy(); + void Swap(); + void Resize(const GLSDLWindowRect& rect); + + GLSDLWindowRect GetRect(); + GLSDLWindowRect GetBackingRect(); + + int32_t GetWidth(); + int32_t GetHeight(); + + +}; + +#endif diff --git a/src/gx/glsdl/GLShader.cpp b/src/gx/glsdl/GLShader.cpp new file mode 100644 index 0000000..94fec2f --- /dev/null +++ b/src/gx/glsdl/GLShader.cpp @@ -0,0 +1,135 @@ +#include "gx/glsdl/GLShader.hpp" +#include "gx/glsdl/GLSDLDevice.hpp" +#include "gx/glsdl/GLPixelShader.hpp" +#include "gx/glsdl/GLPool.hpp" +#include "gx/glsdl/GLVertexShader.hpp" +#include "gx/glsdl/GL.hpp" +#include + +// TODO +// - threaded compiler support +// - glsl support +// - hybrid support +GLShader* GLShader::Create(ShaderType shaderType, bool hybrid, bool usingCG, const char* a4, const void* buf, int32_t codeLen, const char* a7, const char* name, GLShaderLogInfo* logInfo) { + const char* shaderCode = reinterpret_cast(buf); + + if (*reinterpret_cast(buf) == 'GSL1') { + BLIZZARD_ASSERT(!usingCG); + + const ShaderDataHeader header = *reinterpret_cast(buf); + + BLIZZARD_ASSERT(header.shaderType == shaderType); + BLIZZARD_ASSERT(header.size == codeLen); + BLIZZARD_ASSERT(header.codePos >= sizeof(ShaderDataHeader)); + BLIZZARD_ASSERT(header.codeSize > 0); + + shaderCode = &reinterpret_cast(buf)[header.codePos]; + } + + GLShader* shader = nullptr; + + if (shaderType == ePixelShader) { + shader = GLPixelShader::Create(); + } else if (shaderType == eVertexShader) { + shader = GLVertexShader::Create(); + } else { + // TODO + // sub_1C5E0(&v38, "Unknown shader type %d!", shaderType); + } + + shader->m_UsingCG = usingCG; + + if (usingCG) { + shader->CompileCG(a4, shaderCode, codeLen, a7, logInfo); + } else { + shader->m_Code.assign(shaderCode, codeLen); + + // TODO + // sub_5CD10(shader); + } + + return shader; +} + +bool GLShader::CheckErrorsARB(GLShaderLogInfo* logInfo) { + GLint errorPos; + + glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &errorPos); + const GLubyte* errorStr = glGetString(GL_PROGRAM_ERROR_STRING_ARB); + + // TODO + // Blizzard::Debug::VAssert(logInfo != 0 || errorPos == -1, errorStr); + + return errorPos == -1; +} + +void GLShader::Compile(GLShaderLogInfo* logInfo) { + this->ImmediateCompile(logInfo); +} + +void GLShader::CompileCG(const char* a2, const void* shaderCode, int32_t codeLen, const char* a5, GLShaderLogInfo* logInfo) { + // TODO +} + +void GLShader::FlushUniforms(GLGLSLProgram* program) { + // TODO +} + +std::string& GLShader::GetCode() { + return this->m_Code; +} + +int32_t GLShader::GetShaderType() { + return this->m_ShaderType; +} + +void GLShader::ImmediateCompile(GLShaderLogInfo* logInfo) { + BLIZZARD_ASSERT(!this->GetCode().empty()); + + this->m_Device = GLSDLDevice::Get(); + + if (!this->m_UsingGLSL) { + if (!this->m_ShaderID) { + if (this->m_ShaderType == eVertexShader) { + this->m_ShaderID = GLPool::Get()->GetNextName(); + } else { + this->m_ShaderID = GLPool::Get()->GetNextName(); + } + } + + this->m_Device->BindShader(this); + + const char* arbCode = this->GetCode().c_str(); + size_t arbLen = strlen(arbCode); + + glProgramStringARB(this->var5, GL_PROGRAM_FORMAT_ASCII_ARB, arbLen, arbCode); + + BLIZZARD_ASSERT(this->CheckErrorsARB(logInfo)); + } else { + // TODO + // - handle GLSL shaders + // - handle hybrid shaders + } + + if (logInfo) { + // TODO + // this->var20 = logInfo[0]; + } else { + this->var20 = 1; + } + + // TODO + // this->m_TimeStamp = Blizzard::Time::GetTimestamp(); +} + +bool GLShader::IsEnabled() { + return this->m_Enabled; +} + +void GLShader::ReleaseObject() { + // TODO +} + +void GLShader::SetShaderConstants(ShaderType shaderType, uint32_t index, const float* constants, uint32_t count) { + // TODO +} diff --git a/src/gx/glsdl/GLShader.hpp b/src/gx/glsdl/GLShader.hpp new file mode 100644 index 0000000..3ca970e --- /dev/null +++ b/src/gx/glsdl/GLShader.hpp @@ -0,0 +1,75 @@ +#ifndef GX_GL_SDL_GL_SHADER_HPP +#define GX_GL_SDL_GL_SHADER_HPP + +#include "gx/glsdl/GLObject.hpp" +#include "gx/glsdl/GLShaderInput.hpp" +#include +#include +#include + +class GLSDLDevice; +class GLGLSLProgram; +class GLShaderLogInfo; + +class GLShader : public GLObject { + public: + // Types + enum ShaderType { + eVertexShader = 1, + ePixelShader = 2, + eShaderTypeCount = 3 + }; + + struct ShaderDataHeader { + uint32_t signature; + uint32_t size; + ShaderType shaderType; + uint32_t codePos; + uint32_t codeSize; + uint32_t unk1; + uint32_t unk2; + uint32_t unk3; + }; + + // Static functions + static GLShader* Create(ShaderType, bool, bool, const char*, const void*, int32_t, const char*, const char*, GLShaderLogInfo*); + + // Member variables + int32_t m_ShaderType = 0; + int32_t var5 = 0; + uint32_t m_ShaderID = 0; + bool m_UsingCG = false; + bool m_UsingGLSL = false; + uint32_t m_UniformRegisterCount = 0; + GLShaderInput** var10 = nullptr; + float* var11 = nullptr; + bool var12 = false; + uint32_t var13 = 0; + uint32_t var14 = 0; + std::vector> var15; + std::vector> var16; + std::vector> var17; + GLShader* var18 = nullptr; + GLSDLDevice* m_Device = nullptr; + bool var20 = 0; + bool m_Enabled = true; + std::basic_string, std::allocator> m_Code; + std::basic_string, std::allocator> var23; + + // Virtual member functions + virtual void ReleaseObject(); + + // Member functions + bool CheckErrorsARB(GLShaderLogInfo*); + bool CheckErrorsGLSL(GLShaderLogInfo*); + void Compile(GLShaderLogInfo*); + void CompileCG(const char*, const void*, int32_t, const char*, GLShaderLogInfo*); + void FlushUniforms(GLGLSLProgram*); + std::string& GetCode(void); + int32_t GetShaderType(void); + void ImmediateCompile(GLShaderLogInfo*); + bool IsEnabled(void); + void SetShaderConstants(ShaderType, uint32_t, const float*, uint32_t); +}; + +#endif diff --git a/src/gx/glsdl/GLShaderInput.hpp b/src/gx/glsdl/GLShaderInput.hpp new file mode 100644 index 0000000..dca3947 --- /dev/null +++ b/src/gx/glsdl/GLShaderInput.hpp @@ -0,0 +1,33 @@ +#ifndef GX_GL_SDL_GL_SHADER_INPUT_HPP +#define GX_GL_SDL_GL_SHADER_INPUT_HPP + +#include + +class GLShader; + +class GLShaderInput { + public: + // Member variables + GLShader *m_Shader; + std::basic_string, std::allocator> m_Name; + std::basic_string, std::allocator> var2; + int16_t m_MapIndex; + int16_t var4; + int16_t var5; + int16_t m_UsedSize; + int16_t var7; + int16_t var8; + GLShaderInput *m_Parent; + int32_t var10; + int32_t var11; + int32_t var12; + int8_t m_ChildrenCount; + int8_t var14; + uint16_t var15; + int8_t var16; + int8_t m_Variability; + int8_t var18; + int8_t var19; +}; + +#endif diff --git a/src/gx/glsdl/GLTexture.cpp b/src/gx/glsdl/GLTexture.cpp new file mode 100644 index 0000000..6f0d9ff --- /dev/null +++ b/src/gx/glsdl/GLTexture.cpp @@ -0,0 +1,632 @@ +#include "gx/glsdl/GLTexture.hpp" +#include "gx/glsdl/GLSDLDevice.hpp" +#include "gx/glsdl/GLPool.hpp" +#include "gx/glsdl/GLUtil.hpp" +#include "gx/texture/CGxTex.hpp" +#include +#include +#include + +Blizzard::Thread::TLSSlot GLTexture::m_Bindings[4]; + +void* GLTexture::CreateBindings(void* ptr) { + return new std::deque>; +} + +void GLTexture::DestroyBindings(void* ptr) { + delete static_cast>*>(ptr); +} + +void GLTexture::Bind(GLSDLDevice* device, bool force) { + BLIZZARD_ASSERT(!this->IsSystemBuffer()); + BLIZZARD_ASSERT(this->m_Depth != 0); + + if (!device) { + device = GLSDLDevice::Get(); + } + + BLIZZARD_ASSERT(device != nullptr); + + auto& bindings = this->GetBindings(); + uint32_t deviceID = device->GetID(); + + if (deviceID >= bindings.size()) { + bindings.resize(deviceID + 1); + } + + bindings[deviceID].device = device; + + uint32_t currentActiveTexture = device->m_States.binding.currentActiveTexture; + + if (bindings[deviceID].boundStages[currentActiveTexture]) { + return; + } + + if (force) { + bindings[deviceID].boundStages[currentActiveTexture] = 1; + device->BindTexture(this->m_TextureType, this); + return; + } + + for (int32_t i = 0; i < 16; i++) { + if (bindings[deviceID].boundStages[i]) { + device->SetActiveTexture(i); + return; + } + } + + bindings[deviceID].boundStages[currentActiveTexture] = 1; + device->BindTexture(this->m_TextureType, this); +} + +void GLTexture::FreeTexture() { + auto device = GLSDLDevice::Get(); + + int32_t numFace = this->m_TextureType == GL_TEXTURE_CUBE_MAP ? 6 : 1; + for (int32_t face = 0; face < numFace; face++) { + if (this->m_Mipmaps[face]) { + delete[] this->m_Mipmaps[face]; + } + } + + if (this->m_Mipmaps) { + delete[] this->m_Mipmaps; + } + + this->m_Mipmaps = nullptr; + this->m_Depth = 0; + + // TODO this->Sub690D0(); + + glDeleteTextures(1, &this->m_TextureID); + + this->m_GenerateMipmaps = 0; + this->m_MaxMipmapLevel = 1000; + this->m_BaseMipmapLevel = 0; + this->m_CompareMode = 0; + + this->m_Sampler.mipmapBias = 0.0f; + this->m_Sampler.borderColor = { 0.0f, 0.0f, 0.0f, 0.0f }; + this->m_Sampler.addressModeS = GL_REPEAT; + this->m_Sampler.addressModeT = GL_REPEAT; + this->m_Sampler.addressModeR = GL_REPEAT; + this->m_Sampler.magFilterMode = GL_LINEAR; + this->m_Sampler.minFilterMode = GL_NEAREST_MIPMAP_LINEAR; + this->m_Sampler.maxAnisotropy = 1.0f; + + Blizzard::Memory::Free(this->m_Data); + this->m_Data = nullptr; + + switch (this->m_TextureType) { + case GL_TEXTURE_3D: + // TODO GLPool::GLObjectPool::Push(GLPool::m_pool + 264, this); + break; + + case GL_TEXTURE_CUBE_MAP: + // TODO GLPool::GLObjectPool::Push(GLPool::m_pool + 520, this); + break; + + case GL_TEXTURE_2D: + // TODO GLPool::GLObjectPool::Push(GLPool::m_pool + 131080, this); + break; + } +} + +std::vector& GLTexture::GetBindings() { + uint32_t index = GLSDLTextureTypeToIndex(this->m_TextureType); + + uint32_t id; + + if (index == 0) { + id = this->m_TextureID - 33; + } else if (index == 1) { + id = this->m_TextureID - 32801; + } else if (index == 2) { + id = this->m_TextureID - 32865; + } else if (index == 3) { + id = this->m_TextureID - 1; + } + + auto target = static_cast>*>( + Blizzard::Thread::RegisterLocalStorage( + &GLTexture::m_Bindings[index], + GLTexture::CreateBindings, + nullptr, + GLTexture::DestroyBindings + ) + ); + + if (id >= target->size()) { + target->resize(id + 1); + } + + return (*target)[id]; +} + +GLTextureFormat GLTexture::GetFormat() { + return this->m_Format; +} + +TextureFormatInfo& GLTexture::GetFormatInfo() { + return k_TextureFormatInfo[this->m_Format]; +} + +GLMipmap* GLTexture::GetMipmap(uint32_t level, GLEnum face) { + BLIZZARD_ASSERT(face >= GL_TEXTURE_CUBE_MAP_POSITIVE_X && face <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z); + BLIZZARD_ASSERT(level < this->m_NumMipmap); + BLIZZARD_ASSERT(this->m_Mipmaps != nullptr); + BLIZZARD_ASSERT(this->m_Mipmaps[face - GL_TEXTURE_CUBE_MAP_POSITIVE_X] != nullptr); + + return &this->m_Mipmaps[face - GL_TEXTURE_CUBE_MAP_POSITIVE_X][level]; +} + +bool GLTexture::IsRenderTarget() { + return this->m_Flags & GLTFLAG_RENDERTARGET; +} + +bool GLTexture::IsSystemBuffer() { + return this->m_Flags & GLTFLAG_SYSTEM_BUFFER; +} + +bool GLTexture::IsValid() { + return this->m_Depth; +} + +void* GLTexture::Map(uint32_t level, const GLRect* a3, uint32_t& a4, GLEnum a5) { + BLIZZARD_ASSERT(this->m_TextureType != GL_TEXTURE_3D); + + auto mipmap = this->GetMipmap(level, GL_TEXTURE_CUBE_MAP_POSITIVE_X); + a4 = mipmap->GetPitch(); + return mipmap->Map(a5, a3); +} + +void GLTexture::RecreateGLTexture() { + if (this->m_TextureType == GL_TEXTURE_RECTANGLE) { + return; + } + + bool isCubeMap = this->m_TextureType == GL_TEXTURE_CUBE_MAP; + int32_t numFace = isCubeMap ? 6 : 1; + + for (int32_t face = 0; face < numFace; face++) { + for (int32_t level = 0; level < this->m_NumMipmap; level++) { + this->m_Mipmaps[face][level].Map(GL_WRITE_ONLY, static_cast(nullptr)); + this->m_Mipmaps[face][level].Unmap(); + } + } + + glTexParameterf(this->m_TextureType, GL_TEXTURE_LOD_BIAS, this->m_Sampler.mipmapBias); + glTexParameteri(this->m_TextureType, GL_TEXTURE_WRAP_S, this->m_Sampler.addressModeS); + glTexParameteri(this->m_TextureType, GL_TEXTURE_WRAP_T, this->m_Sampler.addressModeT); + glTexParameteri(this->m_TextureType, GL_TEXTURE_WRAP_R, this->m_Sampler.addressModeR); + glTexParameteri(this->m_TextureType, GL_TEXTURE_MIN_FILTER, this->m_Sampler.minFilterMode); + glTexParameteri(this->m_TextureType, GL_TEXTURE_MAG_FILTER, this->m_Sampler.magFilterMode); + glTexParameterf(this->m_TextureType, GL_TEXTURE_MAX_ANISOTROPY_EXT, this->m_Sampler.maxAnisotropy); + glTexParameterfv(this->m_TextureType, GL_TEXTURE_BORDER_COLOR, reinterpret_cast(&this->m_Sampler.borderColor)); + glTexParameteri(this->m_TextureType, GL_TEXTURE_MAX_LEVEL, this->m_MaxMipmapLevel); + glTexParameteri(this->m_TextureType, GL_TEXTURE_BASE_LEVEL, this->m_BaseMipmapLevel); + glTexParameteri(this->m_TextureType, GL_GENERATE_MIPMAP, this->m_GenerateMipmaps); +} + +void GLTexture::ResizeMipmaps() { + BLIZZARD_ASSERT(this->m_Mipmaps == nullptr); + + int32_t numFace = this->m_TextureType == GL_TEXTURE_CUBE_MAP ? 6 : 1; + + this->m_Mipmaps = new GLMipmap*[numFace]; + + for (int32_t face = 0; face < numFace; face++) { + this->m_Mipmaps[face] = new GLMipmap[this->m_NumMipmap]; + } +} + +void GLTexture::SetAddressModeR(GLEnum mode) { + // TODO +} + +void GLTexture::SetAddressModeS(GLEnum mode) { + if (this->m_Sampler.addressModeS == mode) { + return; + } + + if (mode == GL_CLAMP_TO_EDGE) { + this->Bind(nullptr, 0); + glTexParameteri(this->m_TextureType, GL_TEXTURE_WRAP_S, mode); + this->m_Sampler.addressModeS = mode; + } else { + // Workaround for buggy GPU (possibly ATI Radeon X1900) + if (GLSDLDevice::GetRendererInfo().renderer_id == 0x21900) { + if (this->m_Width & (this->m_Width - 1)) { + return; + } + + if (this->m_Height & (this->m_Height - 1)) { + return; + } + } + + this->Bind(nullptr, 0); + glTexParameteri(this->m_TextureType, GL_TEXTURE_WRAP_S, mode); + this->m_Sampler.addressModeS = mode; + } +} + +void GLTexture::SetAddressModeT(GLEnum mode) { + if (this->m_Sampler.addressModeT == mode) { + return; + } + + if (mode == GL_CLAMP_TO_EDGE) { + this->Bind(nullptr, 0); + glTexParameteri(this->m_TextureType, GL_TEXTURE_WRAP_T, mode); + this->m_Sampler.addressModeT = mode; + } else { + // Workaround for buggy GPU (possibly ATI Radeon X1900) + if (GLSDLDevice::GetRendererInfo().renderer_id == 0x21900) { + if (this->m_Width & (this->m_Width - 1)) { + return; + } + + if (this->m_Height & (this->m_Height - 1)) { + return; + } + } + + this->Bind(nullptr, 0); + glTexParameteri(this->m_TextureType, GL_TEXTURE_WRAP_T, mode); + this->m_Sampler.addressModeT = mode; + } +} + +void GLTexture::SetBorderColor(const GLColor4f& color) { + // TODO +} + +void GLTexture::SetCompareMode(GLEnum compareMode) { + BLIZZARD_ASSERT( + this->GetFormatInfo().m_DataFormat == GL_DEPTH_COMPONENT + || this->GetFormatInfo().m_DataFormat == GL_DEPTH_STENCIL_EXT + || compareMode == GL_NONE + ); + + if (this->m_CompareMode != compareMode) { + this->Bind(nullptr, 0); + glTexParameteri(this->m_TextureType, GL_TEXTURE_COMPARE_MODE, compareMode); + this->m_CompareMode = compareMode; + } +} + +void GLTexture::SetMagFilterMode(GLEnum mode) { + if (this->m_Sampler.magFilterMode == mode) { + return; + } + + if (GLSDLDevice::GetRendererInfo().vendor_id == 2 && this->IsRenderTarget() && mode != GL_LINEAR) { + return; + } + + this->Bind(nullptr, 0); + glTexParameteri(this->m_TextureType, GL_TEXTURE_MAG_FILTER, mode); + this->m_Sampler.magFilterMode = mode; +} + +void GLTexture::SetMaxAnisotropy(int32_t maxAnisotropy) { + if (this->m_Sampler.maxAnisotropy == maxAnisotropy) { + return; + } + + this->Bind(nullptr, 0); + glTexParameterf(this->m_TextureType, GL_TEXTURE_MAX_ANISOTROPY_EXT, maxAnisotropy); + this->m_Sampler.maxAnisotropy = maxAnisotropy; +} + +void GLTexture::SetMinFilterMode(GLEnum mode) { + if (this->m_Sampler.minFilterMode == mode) { + return; + } + + if (GLSDLDevice::GetRendererInfo().vendor_id == 2 && this->IsRenderTarget() && mode != GL_LINEAR) { + return; + } + + this->Bind(nullptr, 0); + glTexParameteri(this->m_TextureType, GL_TEXTURE_MIN_FILTER, mode); + this->m_Sampler.minFilterMode = mode; +} + +void GLTexture::SetupTexture() { + BLIZZARD_ASSERT(this->m_NumMipmap == 1 || (this->m_Flags & GLTFLAG_AUTOGEN_MIPMAP) == 0); + BLIZZARD_ASSERT(!this->IsRenderTarget() || this->m_NumMipmap == 1); + BLIZZARD_ASSERT(!this->IsRenderTarget() || (this->m_Flags & GLTFLAG_READ_ACCESS) == 0); + + GLSDLDevice* device = GLSDLDevice::Get(); + + if (this->GetFormatInfo().m_IsCompressed) { + int32_t smallestDim = std::min(this->m_Width, this->m_Height); + + BLIZZARD_ASSERT(smallestDim >= 4); + + if (smallestDim == 4) { + this->m_NumMipmap = 1; + } else if (smallestDim == 8) { + this->m_NumMipmap = 2; + } else if (smallestDim == 16) { + this->m_NumMipmap = 3; + } else if (smallestDim == 32) { + this->m_NumMipmap = 4; + } else if (smallestDim == 64) { + this->m_NumMipmap = 5; + } else if (smallestDim == 128) { + this->m_NumMipmap = 6; + } else if (smallestDim == 256) { + this->m_NumMipmap = 7; + } else if (smallestDim == 512) { + this->m_NumMipmap = 8; + } else if (smallestDim == 1024) { + this->m_NumMipmap = 9; + } else if (smallestDim == 2048) { + this->m_NumMipmap = 10; + } else if (smallestDim == 4096) { + this->m_NumMipmap = 11; + } else { + int32_t i = smallestDim >> 1; + int32_t n = 0; + + while (i) { + i >>= 1; + n++; + } + + this->m_NumMipmap = n - 1; + } + } else { + int32_t largestDim = std::max(this->m_Width, this->m_Height); + + if (largestDim == 1) { + this->m_NumMipmap = 1; + } else if (largestDim == 2) { + this->m_NumMipmap = 2; + } else if (largestDim == 4) { + this->m_NumMipmap = 3; + } else if (largestDim == 8) { + this->m_NumMipmap = 4; + } else if (largestDim == 16) { + this->m_NumMipmap = 5; + } else if (largestDim == 32) { + this->m_NumMipmap = 6; + } else if (largestDim == 64) { + this->m_NumMipmap = 7; + } else if (largestDim == 128) { + this->m_NumMipmap = 8; + } else if (largestDim == 256) { + this->m_NumMipmap = 9; + } else if (largestDim == 512) { + this->m_NumMipmap = 10; + } else if (largestDim == 1024) { + this->m_NumMipmap = 11; + } else if (largestDim == 2048) { + this->m_NumMipmap = 12; + } else if (largestDim == 4096) { + this->m_NumMipmap = 13; + } else { + int32_t i = largestDim >> 1; + int32_t n = 0; + + while (i) { + i >>= 1; + n++; + } + + this->m_NumMipmap = n + 1; + } + } + + if (!(this->m_Flags & GLTFLAG_SYSTEM_BUFFER)) { + BLIZZARD_ASSERT(this->m_RequestedNumMipmaps != 0); + + this->m_NumMipmap = std::min(this->m_NumMipmap, this->m_RequestedNumMipmaps); + } + + this->var12 = this->GetFormatInfo().m_BytePerPixel * this->m_Width; + if (this->GetFormatInfo().m_IsCompressed) { + this->var12 >>= 2; + } + + this->ResizeMipmaps(); + + bool isCubeMap = this->m_TextureType == GL_TEXTURE_CUBE_MAP; + + this->m_Size = 0; + + int32_t numFace = isCubeMap ? 6 : 1; + + for (int32_t face = 0; face < numFace; face++) { + for (int32_t level = 0; level < this->m_NumMipmap; level++) { + GLMipmap* mip = this->GetMipmap(level, GL_TEXTURE_CUBE_MAP_POSITIVE_X + face); + + mip->m_Level = level; + mip->m_Texture = this; + mip->ResetSize(this->m_Width >> level, this->m_Height >> level, this->m_Depth >> level); + + this->m_Size += mip->m_Size; + } + } + + this->var7 = GLSDLDevice::m_Devices[0]->m_TextureList.begin(); + + if (this->m_Flags & GLTFLAG_SYSTEM_BUFFER) { + return; + } + + BLIZZARD_ASSERT(this->m_Data == nullptr); + + if (!this->IsRenderTarget()) { + this->m_Data = static_cast(Blizzard::Memory::Allocate(this->m_Size)); + } + + this->Bind(nullptr, 0); + + if (this->IsRenderTarget()) { + this->SetAddressModeR(GL_CLAMP_TO_EDGE); + this->SetAddressModeS(GL_CLAMP_TO_EDGE); + this->SetAddressModeT(GL_CLAMP_TO_EDGE); + this->SetMinFilterMode(GL_LINEAR); + this->SetMagFilterMode(GL_LINEAR); + + // glTexParameteri(this->m_TextureType, GL_TEXTURE_STORAGE_HINT_APPLE, GL_STORAGE_CACHED_APPLE); + } else { + this->SetAddressModeR(GL_REPEAT); + this->SetAddressModeS(GL_REPEAT); + this->SetAddressModeT(GL_REPEAT); + this->SetMinFilterMode(GL_NEAREST_MIPMAP_NEAREST); + this->SetMagFilterMode(GL_NEAREST); + } + + if (this->GetFormatInfo().m_DataFormat == GL_DEPTH_COMPONENT || this->GetFormatInfo().m_DataFormat == GL_DEPTH_STENCIL) { + this->SetCompareMode(GLSDLDevice::m_ExtARBShadow >= 1 ? GL_COMPARE_R_TO_TEXTURE : 0); + glTexParameteri(this->m_TextureType, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL); + glTexParameteri(this->m_TextureType, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE); + } else { + this->SetCompareMode(0); + } + + this->SetMaxAnisotropy(1); + + this->SetBorderColor(GLColor4f::ZERO); + + int32_t autogenMipmap = this->m_Flags & GLTFLAG_AUTOGEN_MIPMAP; + if (autogenMipmap != this->m_GenerateMipmaps) { + this->Bind(nullptr, 0); + glTexParameteri(this->m_TextureType, GL_GENERATE_MIPMAP, autogenMipmap); + this->m_GenerateMipmaps = autogenMipmap; + } + + int32_t maxMipmapLevel = this->m_NumMipmap - 1; + if (maxMipmapLevel != this->m_MaxMipmapLevel) { + this->Bind(nullptr, 0); + glTexParameteri(this->m_TextureType, GL_TEXTURE_MAX_LEVEL, maxMipmapLevel); + this->m_MaxMipmapLevel = maxMipmapLevel; + } + + if (this->m_TextureType == GL_TEXTURE_RECTANGLE) { + return; + } + + if (this->IsRenderTarget()) { + device->SetUnpackClientStorage(0); + } + + unsigned char* data = reinterpret_cast(this->m_Data); + + for (int32_t face = 0; face < numFace; face++) { + for (int32_t level = 0; level < this->m_NumMipmap; level++) { + GLMipmap* mip = this->GetMipmap(level, GL_TEXTURE_CUBE_MAP_POSITIVE_X + face); + + if (this->m_TextureType == GL_TEXTURE_CUBE_MAP) { + mip->ResetData(face, level, data); + } else { + mip->ResetData(this->m_TextureType, level, data); + } + + if (data) { + data += mip->m_Size; + } + } + } + + // TODO + // this->m_TimeStamp = Blizzard::Time::GetTimestamp(); + + if (this->IsRenderTarget()) { + device->SetUnpackClientStorage(1); + } +} + +void GLTexture::Unbind(GLSDLDevice* device, uint32_t stage) { + auto& bindings = this->GetBindings(); + + BLIZZARD_ASSERT(device->GetID() < bindings.size()); + BLIZZARD_ASSERT(bindings[device->GetID()].device == device); + BLIZZARD_ASSERT(bindings[device->GetID()].boundStages[stage]); + + bindings[device->GetID()].boundStages[stage] = 0; +} + +void GLTexture::Unmap(uint32_t level, GLEnum face) { + auto mipmap = this->GetMipmap(level, face); + mipmap->Unmap(); +} + +GLTexture2D* GLTexture2D::Create(uint32_t width, uint32_t height, uint32_t numMipMap, GLTextureFormat format, uint32_t flags) { + GLTexture2D* tex; + + // TODO + // tex = GLPool::GLObjectPool::Pop(GLPool::m_pool + 131080); + tex = nullptr; + + if (!tex) { + tex = new GLTexture2D(); + } + + // TODO + // Blizzard::Debug::Assert(tex->m_refCount == 0); + + tex->m_RefCount = 1; + + // TODO + // Blizzard::Debug::Assert(tex->m_TextureID >= PoolStats::NAME_POOL_FIRST_NAME); + + tex->m_TextureType = GL_TEXTURE_2D; + tex->m_Width = width; + tex->m_Depth = 1; + tex->m_Height = height; + tex->m_Format = format; + tex->m_NumMipmap = numMipMap; + tex->m_RequestedNumMipmaps = numMipMap; + tex->m_Flags = flags; + + tex->SetupTexture(); + + return tex; +} + +GLTexture2D::GLTexture2D() : GLTexture() { + this->m_TextureType = GL_TEXTURE_2D; + this->m_TextureID = GLPool::Get()->GetNextName(); + + // TODO + // Blizzard::Debug::Assert(this->m_TextureID >= PoolStats::NAME_POOL_FIRST_NAME); +} + +void GLTexture2D::ReleaseObject() { + BLIZZARD_ASSERT(this->m_TextureType == GL_TEXTURE_2D); + this->FreeTexture(); +} + +void GLSDLTexSetFlags(CGxTex* texId, GLTexture* a2) { + static GLEnum convertMagFilterToOgl[] = { + GL_NEAREST, + GL_LINEAR, + GL_NEAREST, + GL_LINEAR, + GL_LINEAR, + GL_LINEAR + }; + + static GLEnum convertMinFilterToOgl[] = { + GL_NEAREST, + GL_LINEAR, + GL_NEAREST_MIPMAP_NEAREST, + GL_LINEAR_MIPMAP_NEAREST, + GL_LINEAR_MIPMAP_LINEAR, + GL_LINEAR_MIPMAP_LINEAR + }; + + a2->SetMagFilterMode(convertMagFilterToOgl[texId->m_flags.m_filter]); + a2->SetMinFilterMode(convertMinFilterToOgl[texId->m_flags.m_filter]); + + a2->SetAddressModeS(texId->m_flags.m_wrapU ? GL_REPEAT : GL_CLAMP_TO_EDGE); + a2->SetAddressModeT(texId->m_flags.m_wrapV ? GL_REPEAT : GL_CLAMP_TO_EDGE); + + a2->SetMaxAnisotropy(texId->m_flags.m_maxAnisotropy); +} diff --git a/src/gx/glsdl/GLTexture.hpp b/src/gx/glsdl/GLTexture.hpp new file mode 100644 index 0000000..00832fb --- /dev/null +++ b/src/gx/glsdl/GLTexture.hpp @@ -0,0 +1,101 @@ +#ifndef GX_GL_SDL_GL_TEXTURE_HPP +#define GX_GL_SDL_GL_TEXTURE_HPP + +#include "gx/glsdl/GL.hpp" +#include "gx/glsdl/GLObject.hpp" +#include "gx/glsdl/GLTypes.hpp" +#include +#include +#include +#include + +#define GLTFLAG_RENDERTARGET 0x1 +#define GLTFLAG_DEPTH 0x2 +#define GLTFLAG_STENCIL 0x4 +#define GLTFLAG_AUTOGEN_MIPMAP 0x8 +#define GLTFLAG_READ_ACCESS 0x10 +#define GLTFLAG_SYSTEM_BUFFER 0x20 + +class CGxTex; +class GLMipmap; +class GLSDLDevice; + +class GLTexture : public GLObject { + public: + // Types + struct Binding { + uint8_t boundStages[16]; + GLSDLDevice* device; + }; + + // Static variables + static Blizzard::Thread::TLSSlot m_Bindings[4]; + + // Static functions + static void* CreateBindings(void*); + static void DestroyBindings(void*); + + // Member variables + uint32_t m_TextureID = 0; + GLEnum m_TextureType = 0; + GLMipmap** m_Mipmaps = nullptr; + std::list::iterator var7; + uint32_t m_LastFrameUsed; + uint32_t m_Width = 0; + uint32_t m_Height = 0; + uint32_t m_Depth = 0; + uint32_t var12 = 0; + uint32_t m_Size = 0; + GLTextureFormat m_Format = GLTF_INVALID; + uint32_t m_Flags = 0; + uint32_t m_NumMipmap = 0; + uint32_t m_RequestedNumMipmaps; + char* m_Data = nullptr; + std::atomic m_MappedMipmaps = { 0 }; + GLStates::Sampler m_Sampler; + bool m_GenerateMipmaps = 0; + int32_t m_MaxMipmapLevel = 1000; + int32_t m_BaseMipmapLevel = 0; + int32_t m_CompareMode = 0; + + // Member functions + void Bind(GLSDLDevice*, bool); + void FreeTexture(); + std::vector& GetBindings(void); // invented name + GLTextureFormat GetFormat(void); + TextureFormatInfo& GetFormatInfo(void); + GLMipmap* GetMipmap(uint32_t, GLEnum); + bool IsRenderTarget(void); + bool IsSystemBuffer(void); + bool IsValid(void); + void* Map(uint32_t, const GLRect*, uint32_t&, GLEnum); + void RecreateGLTexture(void); + void ResizeMipmaps(void); + void SetAddressModeR(GLEnum); + void SetAddressModeS(GLEnum); + void SetAddressModeT(GLEnum); + void SetBorderColor(const GLColor4f&); + void SetCompareMode(GLEnum); + void SetMagFilterMode(GLEnum); + void SetMaxAnisotropy(int32_t); + void SetMinFilterMode(GLEnum); + void SetupTexture(void); + void Unbind(GLSDLDevice*, uint32_t); // invented name + void Unmap(uint32_t level, GLEnum face); +}; + +class GLTexture2D : public GLTexture { + public: + // Static functions + static GLTexture2D* Create(uint32_t, uint32_t, uint32_t, GLTextureFormat, uint32_t); + + // Virtual member functions + virtual void ReleaseObject(); + + // Member functions + GLTexture2D(); +}; + +void GLSDLTexSetFlags(CGxTex*, GLTexture*); + +#endif diff --git a/src/gx/glsdl/GLTypes.cpp b/src/gx/glsdl/GLTypes.cpp new file mode 100644 index 0000000..82dd7d2 --- /dev/null +++ b/src/gx/glsdl/GLTypes.cpp @@ -0,0 +1,58 @@ +#include "gx/glsdl/GLTypes.hpp" +#include + +GLColor4f GLColor4f::ZERO = { 0.0, 0.0, 0.0, 0.0 }; +GLColor4f GLColor4f::WHITE = { 1.0, 1.0, 1.0, 1.0 }; +GLColor4f GLColor4f::BLACK = { 0.0, 0.0, 0.0, 1.0 }; + +bool GLTransform::operator==(const float m[16]) const { + return this->m[0] == m[0] + && this->m[1] == m[1] + && this->m[2] == m[2] + && this->m[3] == m[3] + && this->m[4] == m[4] + && this->m[5] == m[5] + && this->m[6] == m[6] + && this->m[7] == m[7] + && this->m[8] == m[8] + && this->m[9] == m[9] + && this->m[10] == m[10] + && this->m[11] == m[11] + && this->m[12] == m[12] + && this->m[13] == m[13] + && this->m[14] == m[14] + && this->m[15] == m[15]; +} + +bool GLTransform::operator!=(const float m[16]) const { + return !(*this == m); +} + +void GLTransform::Set(const float m[16]) { + memcpy(this->m, m, sizeof(this->m)); + this->isDirty = true; + this->isIdentity = this->a0 == 1.0f + && this->a1 == 0.0f + && this->a2 == 0.0f + && this->a3 == 0.0f + && this->b0 == 0.0f + && this->b1 == 1.0f + && this->b2 == 0.0f + && this->b3 == 0.0f + && this->c0 == 0.0f + && this->c1 == 0.0f + && this->c2 == 1.0f + && this->c3 == 0.0f + && this->d0 == 0.0f + && this->d1 == 0.0f + && this->d2 == 0.0f + && this->d3 == 1.0f; +} + +void GLTransform::SetIdentity() { + memset(this->m, 0, sizeof(this->m)); + this->a0 = 1.0f; + this->b1 = 1.0f; + this->c2 = 1.0f; + this->d3 = 1.0f; +} diff --git a/src/gx/glsdl/GLTypes.hpp b/src/gx/glsdl/GLTypes.hpp new file mode 100644 index 0000000..0df1480 --- /dev/null +++ b/src/gx/glsdl/GLTypes.hpp @@ -0,0 +1,376 @@ +#ifndef GX_GL_SDL_GL_TYPES_HPP +#define GX_GL_SDL_GL_TYPES_HPP + +#include + +#include + +class GLBuffer; +class GLFramebuffer; + +enum GLTextureFormat { + GLTF_INVALID = 0, + GLTF_ARGB8888 = 1, + GLTF_XRGB8888 = 2, + GLTF_RGBA8888 = 3, + GLTF_ABGR8888 = 4, + GLTF_ARGB0888 = 5, + GLTF_RGB888 = 6, + GLTF_BGR888 = 7, + GLTF_RGBA32F = 8, + GLTF_RGBA16F = 9, + GLTF_RG16F = 10, + GLTF_D32 = 11, + GLTF_D24 = 12, + GLTF_D16 = 13, + GLTF_DF = 14, + GLTF_D24S8 = 15, + GLTF_S8 = 16, + GLTF_ARGB4444 = 17, + GLTF_ARGB1555 = 18, + GLTF_ARGB0555 = 19, + GLTF_RGB565 = 20, + GLTF_A2RGB10 = 21, + GLTF_RGB16 = 22, + GLTF_L8 = 23, + GLTF_A8 = 24, + GLTF_A8L8 = 25, + GLTF_DXT1 = 26, + GLTF_DXT3 = 27, + GLTF_DXT5 = 28, + GLTF_NUM_TEXTURE_FORMATS = 29 +}; + +enum GLVertexType { + GLVT_INVALID = 0, + GLVT_FLOAT1 = 1, + GLVT_FLOAT2 = 2, + GLVT_FLOAT3 = 3, + GLVT_FLOAT4 = 4, + GLVT_UBYTE4 = 5, + GLVT_UBYTE4N = 6, + GLVT_SHORT = 7, + GLVT_SHORT2 = 8, + GLVT_SHORT4 = 9, + GLVT_SHORT2N = 10, + GLVT_SHORT4N = 11, + GLVT_USHORT2N = 12, + GLVT_USHORT4N = 13, + GLVT_NUM_VERTEX_TYPES = 14 +}; + +enum GLBufferType { + eGLBT_PIXEL_UNPACK = 3, +}; + +struct GLAttachPoint { + GLFramebuffer* framebuffer; + int32_t point; // TODO GLenum? + int32_t zOffset; // TODO check type +}; + +struct GLBox { + int32_t left; + int32_t top; + int32_t front; + int32_t width; + int32_t height; + int32_t depth; +}; + +struct GLColor4f { + float r; + float g; + float b; + float a; + + static GLColor4f ZERO; + static GLColor4f WHITE; + static GLColor4f BLACK; +}; + +struct GLDirtyRange { + uint16_t start; + uint16_t end; +}; + +struct GLfloat4 { + float x; + float y; + float z; + float w; +}; + +struct GLRect { + int32_t left; + int32_t top; + int32_t width; + int32_t height; +}; + +struct GLTransform { + bool isDirty; + + union { + struct { + float a0; + float a1; + float a2; + float a3; + float b0; + float b1; + float b2; + float b3; + float c0; + float c1; + float c2; + float c3; + float d0; + float d1; + float d2; + float d3; + }; + + struct { + float rows[4][4]; + }; + + float m[16]; + }; + + bool isIdentity; + + bool operator==(const float m[16]) const; + bool operator!=(const float m[16]) const; + void Set(const float m[16]); + void SetIdentity(); +}; + +struct GLStates { + struct Depth { + bool testEnable; + int32_t compareFunc; + bool writeMask; + }; + + struct Stencil { + struct StencilFace { + int32_t compareFunc; + int32_t opFail; + int32_t opZFail; + int32_t opZPass; + }; + + bool testEnable; + int32_t ref; + uint32_t mask; + uint32_t writeMask; + bool useTwoSidedStencil; + StencilFace front; + StencilFace back; + }; + + struct Rasterizer { + struct ClipPlane { + double plane[4]; + }; + + int32_t cullMode; + int32_t cullFaceMode; + int32_t fillMode; + float constantDepthBias; + float slopeScaledDepthBias; + GLRect viewport; + double zNear; + double zFar; + bool scissorEnable; + GLRect scissor; + uint32_t clipPlaneMask; + ClipPlane clipPlanes[6]; + }; + + struct Blend { + struct ColorMask { + bool red; + bool green; + bool blue; + bool alpha; + }; + + ColorMask colorMask[4]; + bool alphaBlend; + int32_t srcBlendFactor; + int32_t destBlendFactor; + int32_t blendOp; + GLColor4f blendColor; + }; + + struct Clear { + GLColor4f clearColor; + double clearDepth; + int32_t clearStencil; + }; + + struct FixedFunc { + struct TexOp { + int32_t texturing; + GLColor4f constant; + int32_t colorOp; + float colorScale; + int32_t colorArg0; + int32_t colorArg1; + int32_t colorArg2; + int32_t alphaOp; + float alphaScale; + int32_t alphaArg0; + int32_t alphaArg1; + int32_t alphaArg2; + }; + + struct Light { + bool enable; + GLfloat4 position; + GLTransform view; + float constantAttenuation; + float linearAttenuation; + float quadraticAttenuation; + GLColor4f ambient; + GLColor4f diffuse; + GLColor4f specular; + }; + + struct Material { + bool colorTracking; + int32_t materialSource; + GLColor4f ambient; + GLColor4f diffuse; + GLColor4f specular; + float shininess; + GLColor4f emission; + }; + + struct Lighting { + bool enable; + GLColor4f sceneAmbient; + Light lights[8]; + Material material; + }; + + struct Transforms { + int32_t matrixMode; + int32_t modelviewStatus; + GLTransform modelView; + GLTransform world; + GLTransform view; + GLTransform projection; + GLTransform texture[8]; + }; + + struct TexGen { + int32_t S; + int32_t T; + int32_t R; + int32_t Q; + }; + + struct PointSprite { + bool enable; + float size; + float attenuation[3]; + float min; + float max; + }; + + bool fogEnable; + GLColor4f fogColor; + int32_t fogMode; + float fogStart; + float fogEnd; + float fogDensity; + bool alphaTestEnable; + int32_t alphaTestFunc; + float alphaTestRef; + TexOp texOp[8]; + Lighting lighting; + Transforms transforms; + int32_t texCoordIndex[8]; + TexGen texGen[8]; + PointSprite pointSprite; + bool normalizeNormal; + }; + + struct Sampler { + float mipmapBias; + int32_t addressModeS; + int32_t addressModeT; + int32_t addressModeR; + int32_t magFilterMode; + int32_t minFilterMode; + float maxAnisotropy; + GLColor4f borderColor; + }; + + struct Shader { + bool vertexShaderEnable; + GLfloat4 vertexShaderConst[256]; + bool pixelShaderEnable; + GLfloat4 pixelShaderConst[64]; + }; + + struct Binding { + uint32_t currentActiveTexture; + uint32_t texture[4][16]; + uint32_t framebuffer; + uint32_t renderbuffer; + uint32_t vertexProgram; + uint32_t pixelProgram; + uint32_t glslProgram; + uint32_t vertexArrayObject; + }; + + struct Misc { + bool unpackClientStorage; + int32_t drawBuffers[4]; + int32_t readBuffer; + }; + + struct VertexArrayObject { + struct VertexAttrib { + bool enable = 0; + uint32_t size = 4; + int32_t type = GL_FLOAT; + bool normalized = 0; + uint32_t stride = 0; + void* offset = nullptr; + GLBuffer* buffer = nullptr; + }; + + uint32_t buffers[4] = {}; + VertexAttrib vertexAttribs[16]; + VertexAttrib position; + VertexAttrib normal; + VertexAttrib color0; + VertexAttrib color1; + VertexAttrib texCoord[8]; + }; + + Depth depth; + Stencil stencil; + Rasterizer rasterizer; + Blend blend; + Clear clear; + FixedFunc fixedFunc; + Sampler samplers[16]; + Shader shader; + Binding binding; + Misc misc; +}; + +struct GLVertexAttrib { + uint32_t stream; + int32_t slot; + int32_t type; + uint32_t offset; +}; + +#endif diff --git a/src/gx/glsdl/GLUtil.cpp b/src/gx/glsdl/GLUtil.cpp new file mode 100644 index 0000000..c57b3e4 --- /dev/null +++ b/src/gx/glsdl/GLUtil.cpp @@ -0,0 +1,22 @@ +#include "gx/glsdl/GLUtil.hpp" +#include + +uint32_t GLSDLTextureTypeToIndex(GLEnum textureType) { + uint32_t index; + + if (textureType == GL_TEXTURE_2D) { + index = 0; + } else if (textureType == GL_TEXTURE_3D) { + index = 1; + } else if (textureType == GL_TEXTURE_CUBE_MAP) { + index = 2; + } else if (textureType == GL_TEXTURE_RECTANGLE) { + index = 3; + } else { + index = 5; + + BLIZZARD_ASSERT(false); + } + + return index; +} diff --git a/src/gx/glsdl/GLUtil.hpp b/src/gx/glsdl/GLUtil.hpp new file mode 100644 index 0000000..425f75c --- /dev/null +++ b/src/gx/glsdl/GLUtil.hpp @@ -0,0 +1,9 @@ +#ifndef GX_GL_SDL_GL_UTIL_HPP +#define GX_GL_SDL_GL_UTIL_HPP + +#include "gx/glsdl/GL.hpp" +#include + +uint32_t GLSDLTextureTypeToIndex(GLEnum textureType); + +#endif diff --git a/src/gx/glsdl/GLVertexArray.cpp b/src/gx/glsdl/GLVertexArray.cpp new file mode 100644 index 0000000..d7841f8 --- /dev/null +++ b/src/gx/glsdl/GLVertexArray.cpp @@ -0,0 +1,316 @@ +#include "gx/glsdl/GLVertexArray.hpp" +#include "gx/glsdl/GLSDLDevice.hpp" +#include + +bool GLVertexArray::s_VertexArrayEnable = false; + +GLVertexArray::GLVertexArray(bool a2) { + // TODO +} + +void GLVertexArray::FindVertexArray(GLSDLDevice* a1, GLVertexArray& a2) { + if (GLVertexArray::s_VertexArrayEnable) { + // TODO + } + + a2.ApplyVertexFormat(a1); +} + +void GLVertexArray::ApplyGLStates(GLStates::VertexArrayObject& vao) { + GLSDLDevice* device = GLSDLDevice::Get(); + + device->BindVertexArray(this); + + for (int32_t i = 0; i < kMAX_VERTEX_ATTRIBS; i++) { + auto& attrib = vao.vertexAttribs[i]; + + if (attrib.enable) { + glBindBuffer(attrib.buffer->m_Type, attrib.buffer->m_BufferID); + + glVertexAttribPointerARB( + i, + attrib.size, + attrib.type, + attrib.normalized, + attrib.stride, + reinterpret_cast(attrib.offset) + ); + + glEnableVertexAttribArrayARB(i); + } else { + glDisableVertexAttribArrayARB(i); + } + } + + if (vao.position.enable) { + glBindBuffer(vao.position.buffer->m_Type, vao.position.buffer->m_BufferID); + glVertexPointer(vao.position.size, vao.position.type, vao.position.stride, vao.position.offset); + glEnableClientState(GL_VERTEX_ARRAY); + } else { + glDisableClientState(GL_VERTEX_ARRAY); + } + + if (vao.normal.enable) { + glBindBuffer(vao.normal.buffer->m_Type, vao.normal.buffer->m_BufferID); + glNormalPointer(vao.normal.type, vao.normal.stride, vao.normal.offset); + glEnableClientState(GL_NORMAL_ARRAY); + } else { + glDisableClientState(GL_NORMAL_ARRAY); + } + + if (vao.color0.enable) { + glBindBuffer(vao.color0.buffer->m_Type, vao.color0.buffer->m_BufferID); + glColorPointer(vao.color0.size, vao.color0.type, vao.color0.stride, vao.color0.offset); + glEnableClientState(GL_COLOR_ARRAY); + } else { + glDisableClientState(GL_COLOR_ARRAY); + } + + if (vao.color1.enable) { + glBindBuffer(vao.color1.buffer->m_Type, vao.color1.buffer->m_BufferID); + glColorPointer(vao.color1.size, vao.color1.type, vao.color1.stride, vao.color1.offset); + glEnableClientState(GL_SECONDARY_COLOR_ARRAY); + } else { + glDisableClientState(GL_SECONDARY_COLOR_ARRAY); + } + + for (int32_t i = 0; i < 8; i++) { + glClientActiveTextureARB(GL_TEXTURE0 + i); + + if (vao.texCoord[i].enable) { + glBindBuffer(vao.texCoord[i].buffer->m_Type, vao.texCoord[0].buffer->m_BufferID); + glTexCoordPointer(vao.texCoord[i].size, vao.texCoord[i].type, vao.texCoord[i].stride, vao.texCoord[i].offset); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + } else { + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + } + } + + glBindBuffer(GL_ARRAY_BUFFER, vao.buffers[0]); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vao.buffers[1]); + glBindBuffer(GL_PIXEL_PACK_BUFFER, vao.buffers[2]); + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, vao.buffers[3]); + + this->m_GLStates = vao; +} + +void GLVertexArray::ApplyVertexFormat(GLSDLDevice* device) { + if (GLVertexArray::s_VertexArrayEnable) { + device->BindVertexArray(this); + } + + auto indexBuffer = this->m_Properties.m_IndexBuffer; + uint32_t indexBufferID = indexBuffer ? indexBuffer->m_BufferID : 0; + + if (this->m_GLStates.buffers[1] != indexBufferID) { + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBufferID); + this->m_GLStates.buffers[1] = indexBufferID; + } + + BLIZZARD_ASSERT(this->GetProperties().m_VertexBufferFormat != nullptr); + + auto& properties = this->GetProperties(); + bool attribEnable[16] = {}; + + bool useVertexShader = device->GetShader(GLShader::eVertexShader) != nullptr; + + for (int32_t index = 0; index < this->GetProperties().m_VertexBufferFormat->m_Size; index++) { + BLIZZARD_ASSERT(index < kMAX_VERTEX_ATTRIBS); + + auto& attrib = this->GetProperties().m_VertexBufferFormat->m_Attribs[index]; + + BLIZZARD_ASSERT(attrib.type != GLVT_INVALID); + BLIZZARD_ASSERT(attrib.type < GLVT_NUM_VERTEX_TYPES); + + auto vertexBuffer = this->GetProperties().m_VertexBuffer[attrib.stream]; + + if (useVertexShader || static_cast(attrib.slot - 1) > 1) { + if (this->m_GLStates.buffers[0] != vertexBuffer->m_BufferID) { + glBindBuffer(vertexBuffer->m_Type, vertexBuffer->m_BufferID); + this->m_GLStates.buffers[0] = vertexBuffer->m_BufferID; + } + + attribEnable[attrib.slot] = 1; + + int32_t stride = properties.m_VertexBufferStride[attrib.stream]; + int32_t offset = attrib.offset + + properties.m_VertexBufferOffset[attrib.stream] + + properties.m_VertexBase * stride; + + if (useVertexShader) { + glVertexAttribPointerARB( + attrib.slot, + k_VertexTypeInfo[attrib.type].m_Size, + k_VertexTypeInfo[attrib.type].m_Type, + k_VertexTypeInfo[attrib.type].m_Normalized, + stride, + reinterpret_cast(offset) + ); + } else { + switch (attrib.slot) { + case 0: { + glVertexPointer( + k_VertexTypeInfo[attrib.type].m_Size, + k_VertexTypeInfo[attrib.type].m_Type, + stride, + reinterpret_cast(offset) + ); + + break; + } + + case 3: { + glNormalPointer( + k_VertexTypeInfo[attrib.type].m_Type, + stride, + reinterpret_cast(offset) + ); + + break; + } + + case 4: { + glColorPointer( + k_VertexTypeInfo[attrib.type].m_Size, + k_VertexTypeInfo[attrib.type].m_Type, + stride, + reinterpret_cast(offset) + ); + + break; + } + + case 5: { + glSecondaryColorPointer( + k_VertexTypeInfo[attrib.type].m_Size, + k_VertexTypeInfo[attrib.type].m_Type, + stride, + reinterpret_cast(offset) + ); + + break; + } + + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: { + auto tmu = attrib.slot - 6; + auto texCoordIndex = device->m_States.fixedFunc.texCoordIndex[tmu]; + glClientActiveTextureARB(GL_TEXTURE0 + texCoordIndex); + glTexCoordPointer( + k_VertexTypeInfo[attrib.type].m_Size, + k_VertexTypeInfo[attrib.type].m_Type, + stride, + reinterpret_cast(offset) + ); + + break; + } + } + } + } + } + + for (int32_t s = 0; s < 16; s++) { + // Shader + if (useVertexShader) { + auto prevAttribEnable = &this->m_GLStates.vertexAttribs[s].enable; + + if (*prevAttribEnable != attribEnable[s]) { + if (attribEnable[s]) { + glEnableVertexAttribArrayARB(s); + } else { + glDisableVertexAttribArrayARB(s); + } + } + + *prevAttribEnable = attribEnable[s]; + + // FFP + } else { + bool* prevAttribEnable = nullptr; + GLenum glArray = GL_NONE; + + switch (s) { + case 0: { + prevAttribEnable = &this->m_GLStates.position.enable; + glArray = GL_VERTEX_ARRAY; + + break; + } + + case 3: { + prevAttribEnable = &this->m_GLStates.normal.enable; + glArray = GL_NORMAL_ARRAY; + + break; + } + + case 4: { + prevAttribEnable = &this->m_GLStates.color0.enable; + glArray = GL_COLOR_ARRAY; + + break; + } + + case 5: { + prevAttribEnable = &this->m_GLStates.color1.enable; + glArray = GL_SECONDARY_COLOR_ARRAY; + + break; + } + + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: { + auto tmu = s - 6; + auto texCoordIndex = device->m_States.fixedFunc.texCoordIndex[tmu]; + + prevAttribEnable = &this->m_GLStates.texCoord[texCoordIndex].enable; + glArray = GL_TEXTURE_COORD_ARRAY; + + glClientActiveTextureARB(GL_TEXTURE0 + texCoordIndex); + + break; + } + + default: + break; + } + + if (prevAttribEnable) { + if (*prevAttribEnable != attribEnable[s]) { + if (attribEnable[s]) { + glEnableClientState(glArray); + } else { + glDisableClientState(glArray); + } + } + + *prevAttribEnable = attribEnable[s]; + } + } + } + + if (!useVertexShader) { + // TODO device->SetColorMaterial(this->m_GLStates.color0.enable); + } +} + +GLVertexArray::Properties& GLVertexArray::GetProperties() { + return this->m_Properties; +} + +void GLVertexArray::ReleaseObject() { + // TODO +} diff --git a/src/gx/glsdl/GLVertexArray.hpp b/src/gx/glsdl/GLVertexArray.hpp new file mode 100644 index 0000000..49eae5d --- /dev/null +++ b/src/gx/glsdl/GLVertexArray.hpp @@ -0,0 +1,46 @@ +#ifndef GX_GL_SDL_GL_VERTEX_ARRAY_HPP +#define GX_GL_SDL_GL_VERTEX_ARRAY_HPP + +#include "gx/glsdl/GLBuffer.hpp" +#include "gx/glsdl/GLObject.hpp" +#include "gx/glsdl/GLVertexFormat.hpp" +#include + +class GLSDLDevice; + +class GLVertexArray : public GLObject { + public: + // Types + struct Properties { + GLVertexFormat* m_VertexBufferFormat = nullptr; + GLBuffer* m_IndexBuffer = nullptr; + GLBuffer* m_PixelPackBuffer = nullptr; + GLBuffer* m_PixelUnpackBuffer = nullptr; + GLBuffer* m_VertexBuffer[4] = {}; + uint32_t m_VertexBase = 0; + uint32_t m_VertexBufferOffset[4] = {}; + uint32_t m_VertexBufferStride[4] = {}; + }; + + // Static variables + static bool s_VertexArrayEnable; + + // Static functions + static void FindVertexArray(GLSDLDevice*, GLVertexArray&); + + // Member variables + Properties m_Properties; + GLStates::VertexArrayObject m_GLStates; + uint32_t m_VertexArrayID = 0; + + // Virtual member functions + virtual void ReleaseObject(); + + // Member functions + GLVertexArray(bool); + void ApplyGLStates(GLStates::VertexArrayObject&); + void ApplyVertexFormat(GLSDLDevice*); + Properties& GetProperties(void); +}; + +#endif diff --git a/src/gx/glsdl/GLVertexFormat.hpp b/src/gx/glsdl/GLVertexFormat.hpp new file mode 100644 index 0000000..5c14b6e --- /dev/null +++ b/src/gx/glsdl/GLVertexFormat.hpp @@ -0,0 +1,13 @@ +#ifndef GX_GL_SDL_GL_VERTEX_FORMAT_HPP +#define GX_GL_SDL_GL_VERTEX_FORMAT_HPP + +#include "gx/glsdl/GLTypes.hpp" +#include + +class GLVertexFormat { + public: + uint32_t m_Size; + GLVertexAttrib m_Attribs[16]; +}; + +#endif diff --git a/src/gx/glsdl/GLVertexShader.cpp b/src/gx/glsdl/GLVertexShader.cpp new file mode 100644 index 0000000..89e0ebd --- /dev/null +++ b/src/gx/glsdl/GLVertexShader.cpp @@ -0,0 +1,17 @@ +#include "gx/glsdl/GLVertexShader.hpp" +#include "gx/glsdl/GL.hpp" + +GLVertexShader* GLVertexShader::Create() { + // TODO + // GLPool stuff + + GLVertexShader* shader = new GLVertexShader(); + + shader->m_ShaderID = 0; + shader->m_RefCount = 1; + shader->m_ShaderType = eVertexShader; + shader->m_UsingGLSL = 0; + shader->var5 = GL_VERTEX_PROGRAM_ARB; + + return shader; +} diff --git a/src/gx/glsdl/GLVertexShader.hpp b/src/gx/glsdl/GLVertexShader.hpp new file mode 100644 index 0000000..511abe3 --- /dev/null +++ b/src/gx/glsdl/GLVertexShader.hpp @@ -0,0 +1,12 @@ +#ifndef GX_GL_SDL_GL_VERTEX_SHADER_HPP +#define GX_GL_SDL_GL_VERTEX_SHADER_HPP + +#include "gx/glsdl/GLShader.hpp" + +class GLVertexShader : public GLShader { + public: + // Static functions + static GLVertexShader* Create(void); +}; + +#endif diff --git a/vendor/CMakeLists.txt b/vendor/CMakeLists.txt index a813247..904ca92 100644 --- a/vendor/CMakeLists.txt +++ b/vendor/CMakeLists.txt @@ -1,6 +1,16 @@ add_subdirectory(freetype-2.0.9) add_subdirectory(lua-5.1.3) +if (WHOA_SYSTEM_WIN OR WHOA_SYSTEM_LINUX) + set(SDL_SHARED OFF) + set(SDL_STATIC ON) + add_subdirectory(sdl-3.0.0) + + set(glew-cmake_BUILD_SHARED OFF) + set(glew-cmake_BUILD_STATIC ON) + add_subdirectory(glew-cmake-2.2.0) +endif() + # FMOD Ex set(FMODEX_DIR "./fmodex-4.32.09") add_library(fmodex SHARED IMPORTED) diff --git a/vendor/glew-cmake-2.2.0/.gitattributes b/vendor/glew-cmake-2.2.0/.gitattributes new file mode 100644 index 0000000..100a05f --- /dev/null +++ b/vendor/glew-cmake-2.2.0/.gitattributes @@ -0,0 +1,6 @@ +* text eol=lf +*.png binary +*.pdf binary +build/*/* text eol=crlf +CMakeLists.txt text eol=lf +build/cmake/* text eol=lf diff --git a/vendor/glew-cmake-2.2.0/.github/workflows/cmake.yml b/vendor/glew-cmake-2.2.0/.github/workflows/cmake.yml new file mode 100644 index 0000000..5719ce4 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/.github/workflows/cmake.yml @@ -0,0 +1,217 @@ +name: CMake + +on: + pull_request: + branches: + - master + types: + - opened + - synchronize + - reopened + push: + branches: + - master + +env: + # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) + BUILD_TYPE: Release + +jobs: + build: + # The CMake configure and build commands are platform agnostic and should work equally + # well on Windows or Mac. You can convert this to a matrix build if you need + # cross-platform coverage. + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + runs-on: ubuntu-latest + container: ubuntu:latest + + steps: + - uses: actions/checkout@v2 + + - name: Install dependencies + run: apt update && DEBIAN_FRONTEND=noninteractive apt install -y cmake gcc g++ libglu1-mesa-dev pkg-config libx11-dev libxext-dev + + - name: Create Build Environment + # Some projects don't allow in-source building, so create a separate build directory + # We'll use this as our working directory for all subsequent commands + run: | + mkdir build_test + mkdir from_installed + mkdir pkg-config + mkdir as_subdirectory + + - name: Configure CMake + # Use a bash shell so we can use the same syntax for environment variable + # access regardless of the host operating system + shell: bash + working-directory: build_test + # Note the current convention is to use the -S and -B options here to specify source + # and build directories, but this is only available with CMake 3.13 and higher. + # The CMake binaries on the Github Actions machines are (as of this writing) 3.12 + run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE + + - name: Build test + working-directory: build_test + shell: bash + # Execute the build. You can specify a specific target with "--target " + run: cmake --build . --config $BUILD_TYPE + + - name: Install test + shell: bash + working-directory: from_installed + run: | + mkdir -p ext_project/build + cp $GITHUB_WORKSPACE/src/glewinfo.c ext_project/ + cmake $GITHUB_WORKSPACE -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/glew-root-cmake + cmake --build . --target install + + cd ext_project + cp $GITHUB_WORKSPACE/glew-cmake/cmake-install-test.cmake CMakeLists.txt + cmake -DCMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/glew-root-cmake/ . + cmake --build . + + - name: Package config test + shell: bash + working-directory: pkg-config + run: | + mkdir -p ext_project + cp $GITHUB_WORKSPACE/src/glewinfo.c ext_project/ + cmake $GITHUB_WORKSPACE -DPKG_CONFIG_REPRESENTATIVE_TARGET=libglew_static -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/glew-root-pkg-config + cmake --build . --target install + + cd ext_project + gcc $GITHUB_WORKSPACE/src/glewinfo.c $(PKG_CONFIG_PATH=$GITHUB_WORKSPACE/glew-root-pkg-config/lib/pkgconfig pkg-config --libs --cflags glew) -o glewinfo + + - name: Subdirectory test + shell: bash + working-directory: as_subdirectory + run: | + cp $GITHUB_WORKSPACE/src/glewinfo.c ./ + cp $GITHUB_WORKSPACE/glew-cmake/sub-directory-test.cmake CMakeLists.txt + cmake . + cmake --build . + + build_2_8: + # The CMake configure and build commands are platform agnostic and should work equally + # well on Windows or Mac. You can convert this to a matrix build if you need + # cross-platform coverage. + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + runs-on: ubuntu-latest + container: ubuntu:14.04 + + steps: + - uses: actions/checkout@v2 + + - name: Install dependencies + run: apt update && apt install -y cmake gcc libgl1-mesa-dev libx11-dev libxext-dev + + - name: Configure CMake + shell: bash + run: cmake . -DCMAKE_BUILD_TYPE=$BUILD_TYPE + + - name: Build test + shell: bash + run: cmake --build . + + - name: Check alias + shell: bash + run: test -e lib/libGLEW.a + + build_3_10: + # The CMake configure and build commands are platform agnostic and should work equally + # well on Windows or Mac. You can convert this to a matrix build if you need + # cross-platform coverage. + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + runs-on: ubuntu-latest + container: ubuntu:18.04 + + steps: + - uses: actions/checkout@v2 + + - name: Install dependencies + run: apt update && apt install -y cmake gcc libgl1-mesa-dev libx11-dev libxext-dev + + - name: Configure CMake + shell: bash + run: cmake . -DCMAKE_BUILD_TYPE=$BUILD_TYPE + + - name: Build test + shell: bash + run: cmake --build . + + - name: Check alias + shell: bash + run: test -e lib/libGLEW.a + + build_latest: + runs-on: ubuntu-latest + container: ubuntu:latest + + steps: + - uses: actions/checkout@v2 + + - name: Install dependencies + run: apt update && apt install -y python3 python3-pip gcc libgl1-mesa-dev libx11-dev libxext-dev && pip install cmake + + - name: Configure CMake + shell: bash + run: cmake . -DCMAKE_BUILD_TYPE=$BUILD_TYPE + + - name: Build test + shell: bash + run: cmake --build . + + - name: Check alias + shell: bash + run: test -e lib/libGLEW.a + + build_mingw: + # The CMake configure and build commands are platform agnostic and should work equally + # well on Windows or Mac. You can convert this to a matrix build if you need + # cross-platform coverage. + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + runs-on: ubuntu-latest + container: ubuntu:18.04 + + steps: + - uses: actions/checkout@v2 + + - name: Install dependencies + run: apt update && apt install -y cmake g++-mingw-w64-x86-64 make libgl1-mesa-dev libx11-dev libxext-dev + + - name: Configure CMake + shell: bash + run: cmake . -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_TOOLCHAIN_FILE="$GITHUB_WORKSPACE/glew-cmake/mingw.cmake" + + - name: Build test + shell: bash + run: cmake --build . + + + build_mac: + runs-on: macos-latest + + steps: + - uses: actions/checkout@v2 + + - name: Configure CMake + shell: bash + run: cmake . -DCMAKE_BUILD_TYPE=$BUILD_TYPE + + - name: Build test + shell: bash + run: cmake --build . + + build_windows: + runs-on: windows-latest + + steps: + - uses: actions/checkout@v2 + + - name: Configure CMake + shell: bash + run: cmake . -DCMAKE_BUILD_TYPE=$BUILD_TYPE + + - name: Build test + shell: bash + run: cmake --build . diff --git a/vendor/glew-cmake-2.2.0/.gitignore b/vendor/glew-cmake-2.2.0/.gitignore new file mode 100644 index 0000000..95d86b1 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/.gitignore @@ -0,0 +1,25 @@ +*.pc +/src/*.c +/include/GL/*.h +/build/vc6/*.rc +/build/*.rc +/build/*/*.sdf +/build/*/*.suo +/build/*/*.db +/build/*/*.vcxproj.user +/build/*/.vs/ +/build/*/tmp/ +/build/cmake/CMakeFiles/ +/build/cmake/CMakeCache.txt +/build/cmake/cmake_install.cmake +/build/cmake/Makefile +/auto/extensions +/auto/registry +/bin +/lib +/tmp +/out +.DS_Store* +auto/EGL-Registry +auto/OpenGL-Registry +auto/glfixes diff --git a/vendor/glew-cmake-2.2.0/.lgtm.yml b/vendor/glew-cmake-2.2.0/.lgtm.yml new file mode 100644 index 0000000..6bd850c --- /dev/null +++ b/vendor/glew-cmake-2.2.0/.lgtm.yml @@ -0,0 +1,12 @@ +extraction: + cpp: + prepare: + packages: + - "build-essential" + - "libxmu-dev" + - "libxi-dev" + - "libgl-dev" + index: + build_command: + - "cd auto; make all -j8; cd .." + - "make all -j8" diff --git a/vendor/glew-cmake-2.2.0/.travis.yml b/vendor/glew-cmake-2.2.0/.travis.yml new file mode 100644 index 0000000..f2424a2 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/.travis.yml @@ -0,0 +1,27 @@ +language: cpp +dist: trusty +install: +script: +- make -C auto clobber +- make extensions +- make dist-src +- make clean && SYSTEM=linux make +- make clean && SYSTEM=linux-osmesa make +- make clean && SYSTEM=linux-egl make +- make clean && SYSTEM=linux-clang make +- make clean && SYSTEM=linux-clang-egl make +- pushd build/cmake && git clean -xdf . && cmake -G 'Unix Makefiles' . && make && popd +- pushd build/cmake && git clean -xdf . && cmake -G 'Unix Makefiles' -DGLEW_OSMESA=ON . && make && popd +- pushd build/cmake && git clean -xdf . && cmake -G 'Unix Makefiles' -DGLEW_EGL=ON -DGLEW_X11=OFF . && make && popd +addons: + apt: + packages: + - git + - cmake + - dos2unix + - libosmesa6-dev + - libegl1-mesa-dev + artifacts: + paths: + - $(ls *.zip *.tgz | tr "\n" ":") + - $(find doc -type f | tr "\n" ":") diff --git a/vendor/glew-cmake-2.2.0/CMakeLists.txt b/vendor/glew-cmake-2.2.0/CMakeLists.txt new file mode 100644 index 0000000..8e92afa --- /dev/null +++ b/vendor/glew-cmake-2.2.0/CMakeLists.txt @@ -0,0 +1,287 @@ +cmake_minimum_required(VERSION 2.8.12...3.5) + +file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/config/version _VERSION_MAJOR_STRING REGEX "GLEW_MAJOR[ ]*=[ ]*[0-9]+.*") +string(REGEX REPLACE "GLEW_MAJOR[ ]*=[ ]*([0-9]+)" "\\1" MAJOR_VERSION ${_VERSION_MAJOR_STRING}) +file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/config/version _VERSION_MINOR_STRING REGEX "GLEW_MINOR[ ]*=[ ]*[0-9]+.*") +string(REGEX REPLACE "GLEW_MINOR[ ]*=[ ]*([0-9]+)" "\\1" MINOR_VERSION ${_VERSION_MINOR_STRING}) +file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/config/version _VERSION_PATCH_STRING REGEX "GLEW_MICRO[ ]*=[ ]*[0-9]+.*") +string(REGEX REPLACE "GLEW_MICRO[ ]*=[ ]*([0-9]+)" "\\1" PATCH_VERSION ${_VERSION_PATCH_STRING}) +set(GLEW_VERSION ${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}) + +if(NOT CMAKE_VERSION VERSION_LESS 3.0) + cmake_policy(SET CMP0048 NEW) + project("glew" VERSION ${GLEW_VERSION} LANGUAGES C) +else() + project("glew" C) + set(CPACK_PACKAGE_VERSION_MAJOR ${MAJOR_VERSION}) + set(CPACK_PACKAGE_VERSION_MINOR ${MAJOR_VERSION}) + set(CPACK_PACKAGE_VERSION_PATCH ${MAJOR_VERSION}) +endif() + +set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) +set(INCLUDE_DIR "$$") +set(RC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/build) + +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) + +include("GeneratePkgConfig.cmake") + +if (POLICY CMP0077) + cmake_policy(SET CMP0077 NEW) +endif() + +option(glew-cmake_BUILD_SHARED "Build the shared glew library" ON) +option(glew-cmake_BUILD_STATIC "Build the static glew library" ON) +option(USE_GLU "Use GLU" OFF) +option(GLEW_OSMESA "Off-screen Mesa mode" OFF) +option(PKG_CONFIG_REPRESENTATIVE_TARGET "Generate pc file for specified target as glew. libglew_static|libglew_shared" OFF) +option(ONLY_LIBS "Do not build executables" OFF) + +set(LIBGLEW_SRCS ${SRC_DIR}/glew.c) + +set(DEFINITIONS) +if(WIN32) + list(APPEND DEFINITIONS -DWIN32_MEAN_AND_LEAN -DVC_EXTRALEAN -D_CRT_SECURE_NO_WARNINGS) +endif() + +if(MSVC) + list(APPEND LIBGLEW_SRCS ${RC_DIR}/glew.rc) +endif() + +# Use namespaced libraries when supported +if(NOT CMAKE_VERSION VERSION_LESS 3.14) + set(USE_NAMESPACED_LIB YES) +else() + set(USE_NAMESPACED_LIB NO) +endif() + +if(POLICY CMP0028) + cmake_policy(SET CMP0028 NEW) +endif() + +if(POLICY CMP0042) + cmake_policy(SET CMP0042 NEW) +endif() + +if(POLICY CMP0072) + set(OpenGL_GL_PREFERENCE GLVND) +endif() + +if(NOT (WIN32 OR APPLE)) + message("Try to find OpenGL with GLVND") + find_package(OpenGL REQUIRED + COMPONENTS OpenGL GLX) +endif() + +if(OPENGL_FOUND AND OpenGL_GLX_FOUND AND TARGET OpenGL::OpenGL) + set(USE_GLVND YES) +else() + message("GLVND not supported. Try find OpenGL legacy") + find_package(OpenGL REQUIRED) + set(USE_GLVND NO) +endif() + +set(pc_requires) + +if(NOT USE_GLU) + list(APPEND DEFINITIONS -DGLEW_NO_GLU) +else() + if(NOT OPENGL_GLU_FOUND) + message(FATAL_ERROR "GLU is not found. but GLU option is enabled") + endif() + + list(APPEND pc_requires glu) + + if(USE_NAMESPACED_LIB) + list(APPEND LIBRARIES OpenGL::GLU) + else() + list(APPEND LIBRARIES ${OPENGL_glu_LIBRARY}) + endif() +endif() + +list(APPEND pc_requires gl) +if(USE_NAMESPACED_LIB) + if(USE_GLVND) + list(APPEND LIBRARIES OpenGL::OpenGL) + else() + list(APPEND LIBRARIES OpenGL::GL) + endif() +else() + if(USE_GLVND) + list(APPEND LIBRARIES ${OPENGL_opengl_LIBRARY}) + else() + list(APPEND LIBRARIES ${OPENGL_gl_LIBRARY}) + endif() +endif() + +# OS Specific dependencies +if(APPLE) + find_library(AGL_LIBRARY AGL REQUIRED) + list(APPEND LIBRARIES ${AGL_LIBRARY}) +elseif(NOT WIN32) + if(GLEW_OSMESA) + find_library(OSMESA_LIBRARY OSMesa REQUIRED) + list(APPEND LIBRARIES ${OSMESA_LIBRARY}) + list(APPEND DEFINITIONS -DGLEW_OSMESA) + list(APPEND pc_requires osmesa) + else() + if(USE_GLVND) + if(NOT OpenGL_GLX_FOUND) + message(FATAL_ERROR "GLX is not found. Try with PREFER_GLVND=NO") + endif() + + if(USE_NAMESPACED_LIB) + list(APPEND LIBRARIES OpenGL::GLX) + else() + list(APPEND LIBRARIES ${OPENGL_glx_LIBRARY}) + endif() + endif() + + find_package(X11 REQUIRED) + + list(APPEND pc_requires x11 xext) + if(USE_NAMESPACED_LIB) + list(APPEND LIBRARIES X11::X11 X11::Xext) + else() + list(APPEND LIBRARIES ${X11_X11_LIB} ${X11_Xext_LIB}) + endif() + endif() +endif() + +set(GLEW_TARGETS) + +if(NOT CMAKE_INSTALL_LIBDIR) + set(INSTALL_LIBDIR lib) +else() + set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}) +endif() + +execute_process( + COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_BINARY_DIR}/test_fs_support_case_sensitivity + COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_BINARY_DIR}/test_fs_support_CASE_sensitivity) +file(GLOB TEST_FILE_LIST ${CMAKE_BINARY_DIR}/test_fs_support_*_sensitivity) +list(LENGTH TEST_FILE_LIST TEST_FILE_COUNT) +if(TEST_FILE_COUNT EQUAL 2) + set(SUPPORT_CASE_SENSITIVE_FS YES) +else() + set(SUPPORT_CASE_SENSITIVE_FS NO) +endif() + +function(set_representative_target TARGET) + set_target_properties(${TARGET} PROPERTIES + OUTPUT_NAME "glew" + DEBUG_POSTFIX d) + + # Windows & macOS use case-insensetive FS. do not create symbolic link + if(SUPPORT_CASE_SENSITIVE_FS) + get_target_property(TARGET_TYPE ${TARGET} TYPE) + string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER) + if(CMAKE_BUILD_TYPE_LOWER STREQUAL "debug" AND NOT ANDROID) + set(GLEW_DEBUG_SUFFIX "d") + else() + set(GLEW_DEBUG_SUFFIX "") + endif() + if(TARGET_TYPE STREQUAL STATIC_LIBRARY) + set(EXT ".a") + get_target_property(OUT_DIR ${TARGET} ARCHIVE_OUTPUT_DIRECTORY) + else() + set(EXT ".so") + get_target_property(OUT_DIR ${TARGET} LIBRARY_OUTPUT_DIRECTORY) + endif() + if(NOT ${CMAKE_VERSION} VERSION_LESS 3.0) + add_custom_command(TARGET ${TARGET} POST_BUILD + COMMAND ${CMAKE_COMMAND} ARGS -E create_symlink libglew${GLEW_DEBUG_SUFFIX}${EXT} libGLEW${GLEW_DEBUG_SUFFIX}${EXT} + WORKING_DIRECTORY ${OUT_DIR} + BYPRODUCTS ${OUT_DIR}/libGLEW${GLEW_DEBUG_SUFFIX}${EXT} + COMMENT "create libGLEW${GLEW_DEBUG_SUFFIX} symbolic link") + else() + add_custom_command(TARGET ${TARGET} POST_BUILD + COMMAND bash ARGS -c "( test ! -e ${OUT_DIR}/libGLEW${GLEW_DEBUG_SUFFIX}${EXT} && cd ${OUT_DIR} && ${CMAKE_COMMAND} -E create_symlink libglew${GLEW_DEBUG_SUFFIX}${EXT} libGLEW${GLEW_DEBUG_SUFFIX}${EXT} ) || true" + COMMENT "create libGLEW${GLEW_DEBUG_SUFFIX} symbolic link" + VERBATIM) + endif() + + if(NOT ${CMAKE_VERSION} VERSION_LESS 3.14) + install(FILES ${OUT_DIR}/libGLEW${GLEW_DEBUG_SUFFIX}${EXT} TYPE LIB) + else() + install(FILES ${OUT_DIR}/libGLEW${GLEW_DEBUG_SUFFIX}${EXT} DESTINATION ${INSTALL_LIBDIR}) + endif() + endif() +endfunction() + +if(glew-cmake_BUILD_STATIC) + add_library(libglew_static STATIC ${LIBGLEW_SRCS}) + + set_representative_target(libglew_static) + + target_compile_definitions(libglew_static PUBLIC GLEW_STATIC) + list(APPEND GLEW_TARGETS libglew_static) +endif() + +if(glew-cmake_BUILD_SHARED) + add_library(libglew_shared SHARED ${LIBGLEW_SRCS}) + + if(glew-cmake_BUILD_STATIC) + set_target_properties(libglew_shared PROPERTIES + OUTPUT_NAME "glew-shared" + DEBUG_POSTFIX d) + else() + set_representative_target(libglew_shared) + endif() + + target_compile_definitions(libglew_shared PRIVATE GLEW_BUILD) + if(MINGW) + if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13) + target_link_options(libglew_shared PRIVATE -nostdlib) + else() + target_link_libraries(libglew_shared PRIVATE -nostdlib) + endif() + endif() + list(APPEND GLEW_TARGETS libglew_shared) +endif() + +foreach(GLEW_TARGET ${GLEW_TARGETS}) + target_compile_definitions(${GLEW_TARGET} PUBLIC ${DEFINITIONS}) + target_include_directories(${GLEW_TARGET} PUBLIC ${INCLUDE_DIR}) + target_link_libraries(${GLEW_TARGET} PUBLIC ${LIBRARIES}) + set_target_properties(${GLEW_TARGET} PROPERTIES VERSION ${GLEW_VERSION}) +endforeach() + +if(PKG_CONFIG_REPRESENTATIVE_TARGET) + GeneratePkgConfigFile(${PKG_CONFIG_REPRESENTATIVE_TARGET} "The OpenGL Extension Wrangler library" + NAME "glew" + LIBRARY_DIR ${INSTALL_LIBDIR} + REQUIRES ${pc_requires}) +endif() + +install(TARGETS ${GLEW_TARGETS} EXPORT glew-cmake + ARCHIVE DESTINATION ${INSTALL_LIBDIR} + LIBRARY DESTINATION ${INSTALL_LIBDIR}) +install(EXPORT glew-cmake DESTINATION ${INSTALL_LIBDIR}/cmake/glew FILE glewConfig.cmake) + +file(GLOB PUBLIC_HEADERS "include/GL/*.h") +install(FILES ${PUBLIC_HEADERS} DESTINATION include/GL/) + +if(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_SOURCE_DIR} AND NOT ONLY_LIBS) + set(GLEWINFO_SRCS ${SRC_DIR}/glewinfo.c) + set(VISUALINFO_SRCS ${SRC_DIR}/visualinfo.c) + if(MSVS) + list(APPEND GLEWINFO_SRCS ${RC_DIR}/glewinfo.rc) + list(APPEND VISUALINFO_SRCS ${RC_DIR}/visualinfo.rc) + endif() + + add_executable(glewinfo ${GLEWINFO_SRCS}) + add_executable(visualinfo ${VISUALINFO_SRCS}) + + if(glew-cmake_BUILD_STATIC) + target_link_libraries(glewinfo libglew_static) + target_link_libraries(visualinfo libglew_static) + else() + target_link_libraries(glewinfo libglew_shared) + target_link_libraries(visualinfo libglew_shared) + endif() + + install(TARGETS glewinfo visualinfo DESTINATION bin) +endif() diff --git a/vendor/glew-cmake-2.2.0/GeneratePkgConfig.cmake b/vendor/glew-cmake-2.2.0/GeneratePkgConfig.cmake new file mode 100644 index 0000000..e06f0ec --- /dev/null +++ b/vendor/glew-cmake-2.2.0/GeneratePkgConfig.cmake @@ -0,0 +1,62 @@ +function(GeneratePkgConfigFile target description) + cmake_parse_arguments(pc "" "NAME;LIBRARY_DIR" "REQUIRES" ${ARGV}) + if(NOT pc_LIBRARY_DIR) + set(pc_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}) + endif() + if(WIN32) + set(PKGCONFIG_INSTALL_DIR) + else() + set(PKGCONFIG_INSTALL_DIR ${pc_LIBRARY_DIR}/pkgconfig) + endif() + if(NOT pc_NAME) + set(pc_NAME ${target}) + endif() + + get_property(raw_definitions TARGET ${target} PROPERTY INTERFACE_COMPILE_DEFINITIONS) + set(definitions "") + foreach(def IN LISTS raw_definitions) + if(def MATCHES "-D") + list(APPEND definitions ${def}) + else() + list(APPEND definitions "-D${def}") + endif() + endforeach() + list(JOIN definitions " " definitions) + + get_property(target_output TARGET ${target} PROPERTY OUTPUT_NAME) + get_filename_component(target_output ${target_output} NAME) + set(links "-l${target_output}") + get_property(raw_links TARGET ${target} PROPERTY INTERFACE_LINK_LIBRARIES) + foreach(link IN LISTS raw_links) + if(link MATCHES "-l") + list(APPEND links ${link}) + elseif(TARGET ${link}) + get_property(is_imported TARGET ${link} PROPERTY IMPORTED) + if(NOT is_imported) + get_property(link_target TARGET ${link} PROPERTY OUTPUT_NAME) + list(APPEND links ${link_target}) + endif() + else() + list(APPEND links "-l${link}") + endif() + endforeach() + list(JOIN links " " links) + get_property(version TARGET ${target} PROPERTY VERSION) + + set(out_file "${CMAKE_CURRENT_BINARY_DIR}/${pc_NAME}.pc") + file(WRITE ${out_file} "prefix=${CMAKE_INSTALL_PREFIX}\n") + file(APPEND ${out_file} "exec_prefix=\${prefix}\n") + file(APPEND ${out_file} "libdir=\${prefix}/${pc_LIBRARY_DIR}\n") + file(APPEND ${out_file} "includedir=\${prefix}/include\n") + file(APPEND ${out_file} "\n") + file(APPEND ${out_file} "Name: ${pc_NAME}\n") + file(APPEND ${out_file} "Description: ${description}\n") + file(APPEND ${out_file} "Version: ${version}\n") + file(APPEND ${out_file} "Cflags: -I\${includedir} ${definitions}\n") + file(APPEND ${out_file} "Libs: -L\${libdir} ${links}\n") + if(pc_REQUIRES) + string(REPLACE ";" " " REQUIRES "${pc_REQUIRES}") + file(APPEND ${out_file} "Requires: ${REQUIRES}") + endif() + install(FILES ${out_file} DESTINATION "${PKGCONFIG_INSTALL_DIR}") +endfunction() diff --git a/vendor/glew-cmake-2.2.0/LICENSE.txt b/vendor/glew-cmake-2.2.0/LICENSE.txt new file mode 100644 index 0000000..f707804 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/LICENSE.txt @@ -0,0 +1,73 @@ +The OpenGL Extension Wrangler Library +Copyright (C) 2002-2007, Milan Ikits +Copyright (C) 2002-2007, Marcelo E. Magallon +Copyright (C) 2002, Lev Povalahev +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* The name of the author may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. + + +Mesa 3-D graphics library +Version: 7.0 + +Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + +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 +BRIAN PAUL 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. + + +Copyright (c) 2007 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. diff --git a/vendor/glew-cmake-2.2.0/Makefile b/vendor/glew-cmake-2.2.0/Makefile new file mode 100644 index 0000000..9a6b9ef --- /dev/null +++ b/vendor/glew-cmake-2.2.0/Makefile @@ -0,0 +1,357 @@ +#!gmake +## The OpenGL Extension Wrangler Library +## Copyright (C) 2002-2008, Milan Ikits +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002, Lev Povalahev +## All rights reserved. +## +## Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are met: +## +## * Redistributions of source code must retain the above copyright notice, +## this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright notice, +## this list of conditions and the following disclaimer in the documentation +## and/or other materials provided with the distribution. +## * The name of the author may be used to endorse or promote products +## derived from this software without specific prior written permission. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +## ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +## LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +## CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +## SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +## INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +## CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +## ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +## THE POSSIBILITY OF SUCH DAMAGE. + +include config/version + +SHELL = /bin/sh +SYSTEM ?= $(shell config/config.guess | cut -d - -f 3 | sed -e 's/[0-9\.]//g;') +SYSTEM.SUPPORTED = $(shell test -f config/Makefile.$(SYSTEM) && echo 1) + +ifeq ($(SYSTEM.SUPPORTED), 1) +include config/Makefile.$(SYSTEM) +else +$(error "Platform '$(SYSTEM)' not supported") +endif + +GLEW_PREFIX ?= /usr/local +GLEW_DEST ?= /usr/local +BINDIR ?= $(GLEW_DEST)/bin +LIBDIR ?= $(GLEW_DEST)/lib +INCDIR ?= $(GLEW_DEST)/include/GL +PKGDIR ?= $(GLEW_DEST)/lib/pkgconfig + +ifneq ($(GLEW_NO_GLU), -DGLEW_NO_GLU) +LIBGLU = glu +endif + +DIST_NAME ?= glew-$(GLEW_VERSION) +DIST_SRC_ZIP ?= $(shell pwd)/$(DIST_NAME).zip +DIST_SRC_TGZ ?= $(shell pwd)/$(DIST_NAME).tgz +DIST_WIN32 ?= $(shell pwd)/$(DIST_NAME)-win32.zip + +DIST_DIR := $(shell mktemp -d /tmp/glew.XXXXXX)/$(DIST_NAME) + +# To disable stripping of linked binaries either: +# - use STRIP= on gmake command-line +# - edit this makefile to set STRIP to the empty string +# +# To disable symlinks: +# - use LN= on gmake command-line + +AR ?= ar +ARFLAGS ?= cr +INSTALL ?= install +STRIP ?= strip +RM ?= rm -f +LN ?= ln -sf +UNIX2DOS ?= unix2dos -q +DOS2UNIX ?= dos2unix -q + +ifneq (,$(filter debug,$(MAKECMDGOALS))) +OPT = -g +STRIP := +else +OPT = $(POPT) +endif +INCLUDE = -Iinclude +CFLAGS = $(OPT) $(WARN) $(INCLUDE) $(CFLAGS.EXTRA) + +all debug: glew.lib glew.bin + +# GLEW shared and static libraries + +LIB.LDFLAGS := $(LDFLAGS.EXTRA) $(LDFLAGS.GL) +LIB.LIBS := $(GL_LDFLAGS) +LIB.SHARED.DIR ?= lib + +LIB.SRCS := src/glew.c +LIB.SRCS.NAMES := $(notdir $(LIB.SRCS)) + +LIB.OBJS := $(addprefix tmp/$(SYSTEM)/default/static/,$(LIB.SRCS.NAMES)) +LIB.OBJS := $(LIB.OBJS:.c=.o) +LIB.SOBJS := $(addprefix tmp/$(SYSTEM)/default/shared/,$(LIB.SRCS.NAMES)) +LIB.SOBJS := $(LIB.SOBJS:.c=.o) + +glew.lib: glew.lib.shared glew.lib.static + +glew.lib.shared: lib $(LIB.SHARED.DIR) $(LIB.SHARED.DIR)/$(LIB.SHARED) glew.pc +glew.lib.static: lib lib/$(LIB.STATIC) glew.pc + +.PHONY: glew.lib glew.lib.shared glew.lib.static + +lib: + mkdir lib + +lib/$(LIB.STATIC): $(LIB.OBJS) +ifneq ($(AR),) + $(AR) $(ARFLAGS) $@ $^ +else ifneq ($(LIBTOOL),) + $(LIBTOOL) $@ $^ +endif +ifneq ($(STRIP),) + $(STRIP) -x $@ +endif + +$(LIB.SHARED.DIR)/$(LIB.SHARED): $(LIB.SOBJS) + $(LD) $(LDFLAGS.SO) -o $@ $^ $(LIB.LDFLAGS) $(LIB.LIBS) +ifneq ($(LN),) + $(LN) $(LIB.SHARED) $(LIB.SHARED.DIR)/$(LIB.SONAME) + $(LN) $(LIB.SHARED) $(LIB.SHARED.DIR)/$(LIB.DEVLNK) +endif +ifneq ($(STRIP),) + $(STRIP) -x $@ +endif + +tmp/$(SYSTEM)/default/static/glew.o: src/glew.c include/GL/glew.h include/GL/wglew.h include/GL/glxew.h + @mkdir -p $(dir $@) + $(CC) -DGLEW_NO_GLU -DGLEW_STATIC $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< + +tmp/$(SYSTEM)/default/shared/glew.o: src/glew.c include/GL/glew.h include/GL/wglew.h include/GL/glxew.h + @mkdir -p $(dir $@) + $(CC) -DGLEW_NO_GLU -DGLEW_BUILD $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< + +# Force re-write of glew.pc, GLEW_DEST can vary + +.PHONY: glew.pc + +glew.pc: glew.pc.in + sed \ + -e "s|@prefix@|$(GLEW_PREFIX)|g" \ + -e "s|@libdir@|$(LIBDIR)|g" \ + -e "s|@exec_prefix@|$(BINDIR)|g" \ + -e "s|@includedir@|$(INCDIR)|g" \ + -e "s|@version@|$(GLEW_VERSION)|g" \ + -e "s|@cflags@||g" \ + -e "s|@libname@|$(NAME)|g" \ + -e "s|@libgl@|$(LDFLAGS.GL)|g" \ + -e "s|@requireslib@|$(LIBGLU)|g" \ + < $< > $@ + +# GLEW utility programs + +BIN.LIBS = -Llib $(LDFLAGS.DYNAMIC) -l$(NAME) $(LDFLAGS.EXTRA) $(LDFLAGS.GL) + +GLEWINFO.BIN := glewinfo$(BIN.SUFFIX) +GLEWINFO.BIN.SRC := src/glewinfo.c +GLEWINFO.BIN.OBJ := $(addprefix tmp/$(SYSTEM)/default/shared/,$(notdir $(GLEWINFO.BIN.SRC))) +GLEWINFO.BIN.OBJ := $(GLEWINFO.BIN.OBJ:.c=.o) + +VISUALINFO.BIN := visualinfo$(BIN.SUFFIX) +VISUALINFO.BIN.SRC := src/visualinfo.c +VISUALINFO.BIN.OBJ := $(addprefix tmp/$(SYSTEM)/default/shared/,$(notdir $(VISUALINFO.BIN.SRC))) +VISUALINFO.BIN.OBJ := $(VISUALINFO.BIN.OBJ:.c=.o) + +# Don't build glewinfo or visualinfo for NaCL, yet. + +ifneq ($(filter nacl%,$(SYSTEM)),) +glew.bin: glew.lib +else +glew.bin: glew.lib bin/$(GLEWINFO.BIN) bin/$(VISUALINFO.BIN) +endif + +bin/$(GLEWINFO.BIN): $(GLEWINFO.BIN.OBJ) $(LIB.SHARED.DIR)/$(LIB.SHARED) + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) -o $@ $(GLEWINFO.BIN.OBJ) $(BIN.LIBS) +ifneq ($(STRIP),) + $(STRIP) -x $@ +endif + +bin/$(VISUALINFO.BIN): $(VISUALINFO.BIN.OBJ) $(LIB.SHARED.DIR)/$(LIB.SHARED) + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) -o $@ $(VISUALINFO.BIN.OBJ) $(BIN.LIBS) +ifneq ($(STRIP),) + $(STRIP) -x $@ +endif + +$(GLEWINFO.BIN.OBJ): $(GLEWINFO.BIN.SRC) include/GL/glew.h include/GL/wglew.h include/GL/glxew.h + @mkdir -p $(dir $@) + $(CC) -DGLEW_NO_GLU $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< + +$(VISUALINFO.BIN.OBJ): $(VISUALINFO.BIN.SRC) include/GL/glew.h include/GL/wglew.h include/GL/glxew.h + @mkdir -p $(dir $@) + $(CC) -DGLEW_NO_GLU $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< + +# Install targets + +install.all: install install.bin + +install: install.include install.lib install.pkgconfig + +install.lib: glew.lib + $(INSTALL) -d -m 0755 "$(DESTDIR)$(LIBDIR)" +# runtime +ifeq ($(filter-out mingw% cygwin,$(SYSTEM)),) + $(INSTALL) -d -m 0755 "$(DESTDIR)$(BINDIR)" + $(INSTALL) -m 0755 $(LIB.SHARED.DIR)/$(LIB.SHARED) "$(DESTDIR)$(BINDIR)/" +else + $(INSTALL) -m 0644 $(LIB.SHARED.DIR)/$(LIB.SHARED) "$(DESTDIR)$(LIBDIR)/" +endif +ifneq ($(LN),) + $(LN) $(LIB.SHARED) "$(DESTDIR)$(LIBDIR)/$(LIB.SONAME)" +endif + +# development files +ifeq ($(filter-out mingw% cygwin,$(SYSTEM)),) + $(INSTALL) -m 0644 lib/$(LIB.DEVLNK) "$(DESTDIR)$(LIBDIR)/" +endif +ifneq ($(LN),) + $(LN) $(LIB.SHARED) "$(DESTDIR)$(LIBDIR)/$(LIB.DEVLNK)" +endif + $(INSTALL) -m 0644 lib/$(LIB.STATIC) "$(DESTDIR)$(LIBDIR)/" + +install.bin: glew.bin + $(INSTALL) -d -m 0755 "$(DESTDIR)$(BINDIR)" + $(INSTALL) -m 0755 bin/$(GLEWINFO.BIN) bin/$(VISUALINFO.BIN) "$(DESTDIR)$(BINDIR)/" + +install.include: + $(INSTALL) -d -m 0755 "$(DESTDIR)$(INCDIR)" + $(INSTALL) -m 0644 include/GL/wglew.h "$(DESTDIR)$(INCDIR)/" + $(INSTALL) -m 0644 include/GL/glew.h "$(DESTDIR)$(INCDIR)/" + $(INSTALL) -m 0644 include/GL/glxew.h "$(DESTDIR)$(INCDIR)/" + $(INSTALL) -m 0644 include/GL/eglew.h "$(DESTDIR)$(INCDIR)/" + +install.pkgconfig: glew.pc + $(INSTALL) -d -m 0755 "$(DESTDIR)$(PKGDIR)" + $(INSTALL) -d -m 0755 "$(DESTDIR)$(PKGDIR)" + $(INSTALL) -m 0644 glew.pc "$(DESTDIR)$(PKGDIR)/" + +uninstall: + $(RM) "$(DESTDIR)$(INCDIR)/wglew.h" + $(RM) "$(DESTDIR)$(INCDIR)/glew.h" + $(RM) "$(DESTDIR)$(INCDIR)/glxew.h" + $(RM) "$(DESTDIR)$(LIBDIR)/$(LIB.DEVLNK)" +ifeq ($(filter-out mingw% cygwin,$(SYSTEM)),) + $(RM) "$(DESTDIR)$(BINDIR)/$(LIB.SHARED)" +else + $(RM) "$(DESTDIR)$(LIBDIR)/$(LIB.SONAME)" + $(RM) "$(DESTDIR)$(LIBDIR)/$(LIB.SHARED)" +endif + $(RM) "$(DESTDIR)$(LIBDIR)/$(LIB.STATIC)" + $(RM) "$(DESTDIR)$(BINDIR)/$(GLEWINFO.BIN)" "$(DESTDIR)$(BINDIR)/$(VISUALINFO.BIN)" + +clean: + $(RM) -r tmp/ + $(RM) -r lib/ + $(RM) -r bin/ + $(RM) glew.pc + +distclean: clean + find . -name \*~ | xargs $(RM) + find . -name .\*.sw\? | xargs $(RM) + +# Distributions + +dist-win32: + $(RM) -r $(DIST_DIR) + mkdir -p $(DIST_DIR) + cp -a include $(DIST_DIR) + cp -a doc $(DIST_DIR) + cp -a *.txt $(DIST_DIR) + cp -a bin $(DIST_DIR) + cp -a lib $(DIST_DIR) + $(RM) -f $(DIST_DIR)/bin/*/*/*.pdb $(DIST_DIR)/bin/*/*/*.exp + $(RM) -f $(DIST_DIR)/bin/*/*/glewinfo-*.exe $(DIST_DIR)/bin/*/*/visualinfo-*.exe + $(RM) -f $(DIST_DIR)/lib/*/*/*.pdb $(DIST_DIR)/lib/*/*/*.exp + $(UNIX2DOS) $(DIST_DIR)/include/GL/*.h + $(UNIX2DOS) $(DIST_DIR)/doc/*.txt + $(UNIX2DOS) $(DIST_DIR)/doc/*.html + $(UNIX2DOS) $(DIST_DIR)/*.txt + rm -f $(DIST_WIN32) + cd $(DIST_DIR)/.. && zip -rq9 $(DIST_WIN32) $(DIST_NAME) + $(RM) -r $(DIST_DIR) + +dist-src: + $(RM) -r $(DIST_DIR) + mkdir -p $(DIST_DIR) + mkdir -p $(DIST_DIR)/bin + mkdir -p $(DIST_DIR)/lib + cp -a auto $(DIST_DIR) + $(RM) -Rf $(DIST_DIR)/auto/registry + $(RM) -Rf $(DIST_DIR)/auto/glfixes + $(RM) -Rf $(DIST_DIR)/auto/OpenGL-Registry + $(RM) -Rf $(DIST_DIR)/auto/EGL-Registry + cp -a build $(DIST_DIR) + cp -a config $(DIST_DIR) + cp -a src $(DIST_DIR) + cp -a doc $(DIST_DIR) + cp -a include $(DIST_DIR) + cp -a *.md $(DIST_DIR) + cp -a *.txt $(DIST_DIR) + cp -a Makefile $(DIST_DIR) + cp -a glew.pc.in $(DIST_DIR) + find $(DIST_DIR) -name '*.o' | xargs $(RM) -r + find $(DIST_DIR) -name '*~' | xargs $(RM) -r + find $(DIST_DIR) -name CVS -o -name .cvsignore | xargs $(RM) -r + find $(DIST_DIR) -name .svn | xargs $(RM) -r + find $(DIST_DIR) -name "*.patch" | xargs $(RM) -r + $(DOS2UNIX) $(DIST_DIR)/Makefile + $(DOS2UNIX) $(DIST_DIR)/auto/Makefile + $(DOS2UNIX) $(DIST_DIR)/config/* + $(UNIX2DOS) $(DIST_DIR)/auto/core/* + $(UNIX2DOS) $(DIST_DIR)/auto/extensions/* + find $(DIST_DIR) -name '*.h' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.c' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.md' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.txt' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.html' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.css' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.sh' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.pl' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name 'Makefile' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.in' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.pm' | xargs $(UNIX2DOS) + find $(DIST_DIR) -name '*.rc' | xargs $(UNIX2DOS) + rm -f $(DIST_SRC_ZIP) + cd $(DIST_DIR)/.. && zip -rq9 $(DIST_SRC_ZIP) $(DIST_NAME) + $(DOS2UNIX) $(DIST_DIR)/Makefile + $(DOS2UNIX) $(DIST_DIR)/auto/Makefile + $(DOS2UNIX) $(DIST_DIR)/config/* + $(DOS2UNIX) $(DIST_DIR)/auto/core/* + $(DOS2UNIX) $(DIST_DIR)/auto/extensions/* + find $(DIST_DIR) -name '*.h' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.c' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.md' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.txt' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.html' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.css' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.sh' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.pl' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name 'Makefile' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.in' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.pm' | xargs $(DOS2UNIX) + find $(DIST_DIR) -name '*.rc' | xargs $(DOS2UNIX) + rm -f $(DIST_SRC_TGZ) + cd $(DIST_DIR)/.. && env GZIP=-9 tar czf $(DIST_SRC_TGZ) $(DIST_NAME) + $(RM) -r $(DIST_DIR) + +extensions: + $(MAKE) -C auto + +.PHONY: clean distclean tardist dist-win32 dist-src diff --git a/vendor/glew-cmake-2.2.0/README.md b/vendor/glew-cmake-2.2.0/README.md new file mode 100644 index 0000000..838fd6f --- /dev/null +++ b/vendor/glew-cmake-2.2.0/README.md @@ -0,0 +1,29 @@ +# GLEW-cmake - nightly pre-generated snapshot with old unofficial cmake support + +[GLEW](https://github.com/nigels-com/glew) is upstream of this project. +But *GLEW* repository does not contain generated sources. Only releases include generated sources. + +*GLEW-cmake* has generated sources based on the latest *GLEW*. Sources are generated nightly. +If you need only the latest snapshot of *GLEW*, try the build system of *GLEW*. It is placed under the `build` directory. Official `CMakeLists.txt` is placed in `build/cmake`. +Please check [README_glew.md](./README_glew.md) for using build system of *GLEW*. + +Also, *GLEW-cmake* has unofficial cmake support - It is created when the official CMake support of *GLEW* does not exist. +You can see some CMake script examples in [`glew-cmake`](./glew-cmake/) directory. But, I **strongly** recommend using official CMakeLists of *GLEW*. + +## Usage + +This project provide `libglew_static` and `libglew_shared` library targets and `glewinfo` and `visualinfo` executable targets. + +`libglew_static` provides a static library, and `libglew_shared` provides a shared library. +*glew-cmake* does not affected by [BUILD_SHARED_LIBS](https://cmake.org/cmake/help/latest/variable/BUILD_SHARED_LIBS.html). + +You can disable each library target by setting `glew-cmake_BUILD_SHARED` or `glew-cmake_BUILD_STATIC` falsy value (ex. `NO`, `FALSE`). + +If you need only libraries, Please set `ONLY_LIBS` to `ON`. Otherwise, cmake generates executable targets also. + +You can get pkg-config fils by setting `PKG_CONFIG_REPRESENTATIVE_TARGET` to `libglew_static` or `libglew_shared`. + +Simply specify dependency of your target with `libglew_static` or `libglew_shared` by `target_link_libraries`. +It will set the additional include directory & the libraries to link to your target. + +If you are not familiar with cmake, Some `sub-directory-test.cmake`, `fetch-content.cmake` in [`glew-cmake`](./glew-cmake/) could be helpful. diff --git a/vendor/glew-cmake-2.2.0/README_glew.md b/vendor/glew-cmake-2.2.0/README_glew.md new file mode 100644 index 0000000..f0b2f68 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/README_glew.md @@ -0,0 +1,255 @@ +# GLEW - The OpenGL Extension Wrangler Library + +The OpenGL Extension Wrangler Library (GLEW) is a cross-platform open-source C/C++ extension loading library. GLEW provides efficient run-time mechanisms for determining which OpenGL extensions are supported on the target platform. OpenGL core and extension functionality is exposed in a single header file. GLEW has been tested on a variety of operating systems, including Windows, Linux, Mac OS X, FreeBSD, Irix, and Solaris. + +![](http://glew.sourceforge.net/glew.png) + +http://glew.sourceforge.net/ + +https://github.com/nigels-com/glew + +[![Gitter](https://badges.gitter.im/nigels-com/glew.svg)](https://gitter.im/nigels-com/glew?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +[![Download](https://img.shields.io/sourceforge/dm/glew.svg)](https://sourceforge.net/projects/glew/files/latest/download) + +## Table of Contents + +* [Downloads](#downloads) + * [Recent snapshots](#recent-snapshots) +* [Build](#build) + * [Linux and Mac](#linux-and-mac) + * [Using GNU Make](#using-gnu-make) + * [Install build tools](#install-build-tools) + * [Build](#build-1) + * [Linux EGL](#linux-egl) + * [Linux OSMesa](#linux-osmesa) + * [Linux mingw-w64](#linux-mingw-w64) + * [Using cmake](#using-cmake) + * [Install build tools](#install-build-tools-1) + * [Build](#build-2) + * [Windows](#windows) + * [Visual Studio](#visual-studio) + * [MSYS/Mingw](#msysmingw) + * [MSYS2/Mingw-w64](#msys2mingw-w64) +* [glewinfo](#glewinfo) +* [Code Generation](#code-generation) +* [Authors](#authors) +* [Contributions](#contributions) +* [Copyright and Licensing](#copyright-and-licensing) + +## Downloads + +Current release is [2.2.0](https://github.com/nigels-com/glew/releases/tag/glew-2.2.0). +[(Change Log)](http://glew.sourceforge.net/log.html) + +Sources available as +[ZIP](https://github.com/nigels-com/glew/releases/download/glew-2.2.0/glew-2.2.0.zip) or +[TGZ](https://github.com/nigels-com/glew/releases/download/glew-2.2.0/glew-2.2.0.tgz). + +Windows binaries for [32-bit and 64-bit](https://github.com/nigels-com/glew/releases/download/glew-2.2.0/glew-2.2.0-win32.zip). + +### Recent snapshots + +Snapshots may contain new features, bug-fixes or new OpenGL extensions ahead of tested, official releases. + +[glew-20220402.tgz](https://sourceforge.net/projects/glew/files/glew/snapshots/glew-20220402.tgz/download) *GLEW 2.2.0 - with fix for glCreateProgressFenceNVX* + +## Build + +It is highly recommended to build from a tgz or zip release snapshot. +The code generation workflow is a complex brew of gnu make, perl and python, that works best on Linux or Mac. +The code generation is known to work on Windows using [MSYS2](https://www.msys2.org/). +For most end-users of GLEW the official releases are the best choice, with first class support. + +### Linux and Mac + +#### Using GNU Make + +GNU make is the primary build system for GLEW, historically. +It includes targets for building the sources and headers, for maintenance purposes. + +##### Install build tools + +Debian/Ubuntu/Mint: `$ sudo apt-get install build-essential libxmu-dev libxi-dev libgl-dev` + +RedHat/CentOS/Fedora: `$ sudo yum install libXmu-devel libXi-devel libGL-devel` + +FreeBSD: `# pkg install xorg lang/gcc git cmake gmake bash python perl5` + +##### Build + + $ make + $ sudo make install + $ make clean + +Targets: `all, glew.lib (sub-targets: glew.lib.shared, glew.lib.static), glew.bin, clean, install, uninstall` + +Variables: `SYSTEM=linux-clang, GLEW_DEST=/usr/local, STRIP=` + +_Note: you may need to call `make` in the **auto** folder first_ + +##### Linux EGL + + $ sudo apt install libegl1-mesa-dev + $ make SYSTEM=linux-egl + +##### Linux OSMesa + + $ sudo apt install libosmesa-dev + $ make SYSTEM=linux-osmesa + +##### Linux mingw-w64 + + $ sudo apt install mingw-w64 + $ make SYSTEM=linux-mingw32 + $ make SYSTEM=linux-mingw64 + +#### Using cmake + +The cmake build is mostly contributor maintained. +Due to the multitude of use cases this is maintained on a _best effort_ basis. +Pull requests are welcome. + +*CMake 3.16 or higher is required.* + +##### Install build tools + +Debian/Ubuntu/Mint: `$ sudo apt-get install build-essential libxmu-dev libxi-dev libgl-dev cmake git` + +RedHat/CentOS/Fedora: `$ sudo yum install libXmu-devel libXi-devel libGL-devel cmake git` + +##### Build + + $ cd build + $ cmake ./cmake + $ make -j4 + +| Target | Description | +| ---------- | ----------- | +| glew | Build the glew shared library. | +| glew_s | Build the glew static library. | +| glewinfo | Build the `glewinfo` executable (requires `BUILD_UTILS` to be `ON`). | +| visualinfo | Build the `visualinfo` executable (requires `BUILD_UTILS` to be `ON`). | +| install | Install all enabled targets into `CMAKE_INSTALL_PREFIX`. | +| clean | Clean up build artifacts. | +| all | Build all enabled targets (default target). | + +| Variables | Description | +| --------------- | ----------- | +| BUILD_UTILS | Build the `glewinfo` and `visualinfo` executables. | +| GLEW_REGAL | Build in Regal mode. | +| GLEW_OSMESA | Build in off-screen Mesa mode. | +| BUILD_FRAMEWORK | Build as MacOSX Framework. Setting `CMAKE_INSTALL_PREFIX` to `/Library/Frameworks` is recommended. | + +### Windows + +#### Visual Studio + +Use the provided Visual Studio project file in build/vc15/ + +Projects for vc6, vc10, vc12 and vc14 are also provided + +#### MSYS/Mingw + +Available from [Mingw](http://www.mingw.org/) + +Requirements: bash, make, gcc + + $ mingw32-make + $ mingw32-make install + $ mingw32-make install.all + +Alternative toolchain: `SYSTEM=mingw-win32` + +#### MSYS2/Mingw-w64 + +Available from [Msys2](http://msys2.github.io/) and/or [Mingw-w64](http://mingw-w64.org/) + +Requirements: bash, make, gcc + + $ pacman -S gcc make mingw-w64-i686-gcc mingw-w64-x86_64-gcc + $ make + $ make install + $ make install.all + +Alternative toolchain: `SYSTEM=msys, SYSTEM=msys-win32, SYSTEM=msys-win64` + +## glewinfo + +`glewinfo` is a command-line tool useful for inspecting the capabilities of an +OpenGL implementation and GLEW support for that. Please include `glewinfo.txt` +with bug reports, as appropriate. + + --------------------------- + GLEW Extension Info + --------------------------- + + GLEW version 2.0.0 + Reporting capabilities of pixelformat 3 + Running on a Intel(R) HD Graphics 3000 from Intel + OpenGL version 3.1.0 - Build 9.17.10.4229 is supported + + GL_VERSION_1_1: OK + --------------- + + GL_VERSION_1_2: OK + --------------- + glCopyTexSubImage3D: OK + glDrawRangeElements: OK + glTexImage3D: OK + glTexSubImage3D: OK + + ... + +## Code Generation + +A Unix or Mac environment is needed for building GLEW from scratch to +include new extensions, or customize the code generation. The extension +data is regenerated from the top level source directory with: + + make extensions + +An alternative to generating the GLEW sources from scratch is to +download a pre-generated (unsupported) snapshot: + +https://sourceforge.net/projects/glew/files/glew/snapshots/ + +## Authors + +GLEW is currently maintained by [Nigel Stewart](https://github.com/nigels-com) +with bug fixes, new OpenGL extension support and new releases. + +GLEW was developed by [Milan Ikits](http://www.cs.utah.edu/~ikits/) +and [Marcelo Magallon](http://wwwvis.informatik.uni-stuttgart.de/~magallon/). +Aaron Lefohn, Joe Kniss, and Chris Wyman were the first users and also +assisted with the design and debugging process. + +The acronym GLEW originates from Aaron Lefohn. +Pasi Kärkkäinen identified and fixed several problems with +GLX and SDL. Nate Robins created the `wglinfo` utility, to +which modifications were made by Michael Wimmer. + +## Contributions + +GLEW welcomes community contributions. Typically these are co-ordinated +via [Issues](https://github.com/nigels-com/glew/issues) or +[Pull Requests](https://github.com/nigels-com/glew/pulls) in the +GitHub web interface. + +Be sure to mention platform and compiler toolchain details when filing +a bug report. The output of `glewinfo` can be quite useful for discussion +also. + +Generally GLEW is usually released once a year, around the time of the Siggraph +computer graphics conference. If you're not using the current release +version of GLEW, be sure to check if the issue or bug is fixed there. + +## Copyright and Licensing + +GLEW is originally derived from the EXTGL project by Lev Povalahev. +The source code is licensed under the +[Modified BSD License](http://glew.sourceforge.net/glew.txt), the +[Mesa 3-D License](http://glew.sourceforge.net/mesa.txt) (MIT) and the +[Khronos License](http://glew.sourceforge.net/khronos.txt) (MIT). + +The automatic code generation scripts are released under the +[GNU GPL](http://glew.sourceforge.net/gpl.txt). diff --git a/vendor/glew-cmake-2.2.0/auto/Makefile b/vendor/glew-cmake-2.2.0/auto/Makefile new file mode 100644 index 0000000..a92d442 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/Makefile @@ -0,0 +1,365 @@ +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +include ../config/version + +#GLEW_SPLIT_SOURCE = yes + +SHELL = bash +PYTHON ?= python + +EXT = extensions/gl +CORE = core/gl + +REPO_OPENGL ?= https://github.com/KhronosGroup/OpenGL-Registry.git +REPO_EGL ?= https://github.com/KhronosGroup/EGL-Registry.git +REPO_GLFIXES ?= https://github.com/nigels-com/glfixes + +BIN = bin +SRC = src +BLACKLIST = blacklist + +GL_CORE_SPEC := $(CORE)/GL_VERSION* +GLX_CORE_SPEC := $(CORE)/GLX_VERSION* +EGL_CORE_SPEC := $(CORE)/EGL_VERSION* +ifeq (custom,$(MAKECMDGOALS)) +#GL_CORE_SPEC := $(shell grep GL_VERSION custom.txt | perl -pi -e "s=^=$(CORE)/=g;") +GL_EXT_SPEC := $(shell grep "^[ \t]*GL_" custom.txt | grep -v GL_VERSION | perl -pi -e "s=^=$(EXT)/=g;") +WGL_EXT_SPEC := $(shell grep "^[ \t]*WGL_" custom.txt | perl -pi -e "s=^=$(EXT)/=g;") +#GLX_CORE_SPEC := $(shell grep GLX_VERSION custom.txt | perl -pi -e "s=^=$(CORE)/=g;") +GLX_EXT_SPEC := $(shell grep "^[ \t]*GLX_" custom.txt | grep -v GLX_VERSION | perl -pi -e "s=^=$(EXT)/=g;") +EGL_EXT_SPEC := $(shell grep "^[ \t]*EGL_" custom.txt | grep -v EGL_VERSION | perl -pi -e "s=^=$(EXT)/=g;") +else +GL_EXT_SPEC := $(EXT)/GL_* +WGL_EXT_SPEC := $(EXT)/WGL_* +GLX_EXT_SPEC := $(EXT)/GLX_* +EGL_EXT_SPEC := $(EXT)/EGL_* +endif + +PARSE_SPEC = parse_spec.pl +SYSTEM = $(strip $(shell uname -s)) + +TOP = .. +I.DEST = $(TOP)/include/GL +S.DEST = $(TOP)/src +D.DEST = $(TOP)/doc +B.DEST = $(TOP)/build + +I.TARGETS = \ + $(I.DEST)/glew.h \ + $(I.DEST)/wglew.h \ + $(I.DEST)/glxew.h \ + $(I.DEST)/eglew.h + +ifeq (yes,$(GLEW_SPLIT_SOURCE)) +S.TARGETS = \ + $(S.DEST)/glew_def.c \ + $(S.DEST)/glew_init.c \ + $(S.DEST)/glew_str.c \ + $(S.DEST)/glewinfo.c +else +S.TARGETS = \ + $(S.DEST)/glew.c \ + $(S.DEST)/glewinfo.c +endif + +D.TARGETS = \ + $(D.DEST)/index.html \ + $(D.DEST)/install.html \ + $(D.DEST)/basic.html \ + $(D.DEST)/advanced.html \ + $(D.DEST)/build.html \ + $(D.DEST)/credits.html \ + $(D.DEST)/log.html \ + $(D.DEST)/glew.html \ + $(D.DEST)/wglew.html \ + $(D.DEST)/glxew.html + +B.TARGETS = \ + $(B.DEST)/glew.rc \ + $(B.DEST)/glewinfo.rc \ + $(B.DEST)/visualinfo.rc + +all custom: $(I.TARGETS) $(S.TARGETS) $(D.TARGETS) $(B.TARGETS) + +ext: $(EXT)/.dummy + +OpenGL-Registry/.dummy: + @echo "--------------------------------------------------------------------" + @echo "Downloading OpenGL-Registry" + @echo "--------------------------------------------------------------------" + git clone --depth=1 $(REPO_OPENGL) OpenGL-Registry + git clone --depth=1 --branch glew $(REPO_GLFIXES) glfixes + touch $@ + +EGL-Registry/.dummy: + @echo "--------------------------------------------------------------------" + @echo "Downloading EGL-Registry" + @echo "--------------------------------------------------------------------" + git clone --depth=1 $(REPO_EGL) EGL-Registry + touch $@ + +$(EXT)/.dummy: OpenGL-Registry/.dummy EGL-Registry/.dummy + @echo "--------------------------------------------------------------------" + @echo "OpenGL descriptors" + @echo "--------------------------------------------------------------------" + rm -rf $(EXT) + cp -r glfixes/gl/specs/ANGLE OpenGL-Registry/extensions + cp -r glfixes/gl/specs/REGAL OpenGL-Registry/extensions + $(BIN)/update_ext.sh $(EXT) OpenGL-Registry/extensions $(BLACKLIST) + @echo "--------------------------------------------------------------------" + @echo "WGL descriptors" + @echo "--------------------------------------------------------------------" + rm -f $(EXT)/WGL_* + $(PYTHON) $(BIN)/parse_xml.py OpenGL-Registry/xml/wgl.xml --api wgl --extensions extensions/gl + @echo "--------------------------------------------------------------------" + @echo "GLX descriptors" + @echo "--------------------------------------------------------------------" + rm -f $(EXT)/GLX_* + $(PYTHON) $(BIN)/parse_xml.py OpenGL-Registry/xml/glx.xml --api glx --extensions extensions/gl + @echo "--------------------------------------------------------------------" + @echo "EGL descriptors" + @echo "--------------------------------------------------------------------" + $(PYTHON) $(BIN)/parse_xml.py EGL-Registry/api/egl.xml --api egl --extensions extensions/gl + @echo "--------------------------------------------------------------------" + @echo "filter descriptors" + @echo "--------------------------------------------------------------------" + $(BIN)/filter_gl_ext.sh $(EXT) +ifeq ($(patsubst Darwin%,Darwin,$(SYSTEM)), Darwin) + find $(CORE) -maxdepth 1 -type f | grep -v VERSION | grep -v "~" | \ + xargs -J % cp % $(EXT) +else + find $(CORE) -maxdepth 1 -type f | grep -v VERSION | grep -v "~" | \ + xargs -I % -n 1 cp % $(EXT) +endif + touch $@ + +$(I.DEST)/glew.h: $(EXT)/.dummy + @echo "--------------------------------------------------------------------" + @echo "Creating glew.h" + @echo "--------------------------------------------------------------------" + test -d $(I.DEST) || mkdir -p $(I.DEST) + cp -f $(SRC)/glew_license.h $@ + cat $(SRC)/mesa_license.h >> $@ + cat $(SRC)/khronos_license.h >> $@ + cat $(SRC)/glew_head.h >> $@ + $(BIN)/make_header.pl GLAPIENTRY GL $(GL_CORE_SPEC) >> $@ + $(BIN)/make_header.pl GLAPIENTRY GL $(GL_EXT_SPEC) >> $@ + echo -e "/* ------------------------------------------------------------------------- */\n\n" >> $@ + $(BIN)/make_struct_fun.pl GLEW_FUN_EXPORT $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ + $(BIN)/make_struct_var.pl GLEW_VAR_EXPORT $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ + perl -e "s/GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2;/GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_1;\nGLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2;/" -pi $@ + cat $(SRC)/glew_tail.h >> $@ + perl -e "s/GLEW_VERSION_STRING/$(GLEW_VERSION)/g" -pi $@ + perl -e "s/GLEW_VERSION_MAJOR_STRING/$(GLEW_MAJOR)/g" -pi $@ + perl -e "s/GLEW_VERSION_MINOR_STRING/$(GLEW_MINOR)/g" -pi $@ + perl -e "s/GLEW_VERSION_MICRO_STRING/$(GLEW_MICRO)/g" -pi $@ + rm -f $@.bak + +$(I.DEST)/wglew.h: $(EXT)/.dummy + @echo "--------------------------------------------------------------------" + @echo "Creating wglew.h" + @echo "--------------------------------------------------------------------" + cp -f $(SRC)/glew_license.h $@ + cat $(SRC)/khronos_license.h >> $@ + cat $(SRC)/wglew_head.h >> $@ + $(BIN)/make_header.pl WINAPI WGL $(WGL_EXT_SPEC) >> $@ + cat $(SRC)/wglew_mid.h >> $@ + $(BIN)/make_struct_fun.pl WGLEW_FUN_EXPORT $(WGL_EXT_SPEC) >> $@ + $(BIN)/make_struct_var.pl WGLEW_VAR_EXPORT $(WGL_EXT_SPEC) >> $@ + cat $(SRC)/wglew_tail.h >> $@ + +$(I.DEST)/glxew.h: $(EXT)/.dummy + @echo "--------------------------------------------------------------------" + @echo "Creating glxew.h" + @echo "--------------------------------------------------------------------" + cp -f $(SRC)/glew_license.h $@ + cat $(SRC)/mesa_license.h >> $@ + cat $(SRC)/khronos_license.h >> $@ + cat $(SRC)/glxew_head.h >> $@ + $(BIN)/make_header.pl "" GLX $(GLX_CORE_SPEC) >> $@ + $(BIN)/make_header.pl "" GLX $(GLX_EXT_SPEC) >> $@ + cat $(SRC)/glxew_mid.h >> $@ + $(BIN)/make_struct_fun.pl GLXEW_FUN_EXPORT $(GLX_CORE_SPEC) $(GLX_EXT_SPEC) >> $@ + $(BIN)/make_struct_var.pl GLXEW_VAR_EXPORT $(GLX_CORE_SPEC) $(GLX_EXT_SPEC) >> $@ + perl -e "s/GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_2;/GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_0;\nGLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_1;\nGLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_2;/" -pi $@ + cat $(SRC)/glxew_tail.h >> $@ + +$(I.DEST)/eglew.h: $(EXT)/.dummy + @echo "--------------------------------------------------------------------" + @echo "Creating eglew.h" + @echo "--------------------------------------------------------------------" + cp -f $(SRC)/glew_license.h $@ + cat $(SRC)/mesa_license.h >> $@ + cat $(SRC)/khronos_license.h >> $@ + cat $(SRC)/eglew_head.h >> $@ + $(BIN)/make_header.pl "" EGL $(EGL_CORE_SPEC) >> $@ + $(BIN)/make_header.pl "" EGL $(EGL_EXT_SPEC) >> $@ + cat $(SRC)/eglew_mid.h >> $@ + $(BIN)/make_struct_fun.pl EGLEW_FUN_EXPORT $(EGL_CORE_SPEC) $(EGL_EXT_SPEC) >> $@ + $(BIN)/make_struct_var.pl EGLEW_VAR_EXPORT $(EGL_CORE_SPEC) $(EGL_EXT_SPEC) >> $@ + cat $(SRC)/eglew_tail.h >> $@ + +$(S.DEST)/glew.c: $(EXT)/.dummy + @echo "--------------------------------------------------------------------" + @echo "Creating glew.c" + @echo "--------------------------------------------------------------------" + cp -f $(SRC)/glew_license.h $@ + cat $(SRC)/glew_head.c >> $@ + $(BIN)/make_def_fun.pl GL $(GL_CORE_SPEC) >> $@ + $(BIN)/make_def_fun.pl GL $(GL_EXT_SPEC) >> $@ + echo -e "\nGLboolean __GLEW_VERSION_1_1 = GL_FALSE;" >> $@ + $(BIN)/make_def_var.pl GL $(GL_CORE_SPEC) >> $@ + $(BIN)/make_def_var.pl GL $(GL_EXT_SPEC) >> $@ + echo -e "\nstatic const char * _glewExtensionLookup[] = {" >> $@; + $(BIN)/make_index.pl $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ + echo -e " NULL\n};\n\n" >> $@; + $(BIN)/make_enable_index.pl $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ + $(BIN)/make_initd.pl GL $(GL_CORE_SPEC) >> $@ + $(BIN)/make_initd.pl GL $(GL_EXT_SPEC) >> $@ + echo -e "" >> $@; + $(BIN)/make_init.pl GL $(GL_CORE_SPEC) >> $@ + $(BIN)/make_init.pl GL $(GL_EXT_SPEC) >> $@ + cat $(SRC)/glew_init_gl.c >> $@ + $(BIN)/make_list.pl $(GL_CORE_SPEC) | grep -v '\"GL_VERSION' >> $@ + $(BIN)/make_list.pl $(GL_EXT_SPEC) >> $@ + $(BIN)/make_list2.pl $(GL_EXT_SPEC) >> $@ + echo -e "\n return GLEW_OK;\n}\n" >> $@ + echo -e "\n#if defined(GLEW_OSMESA)" >> $@ + echo -e "\n#elif defined(GLEW_EGL)" >> $@ + $(BIN)/make_def_fun.pl EGL $(EGL_CORE_SPEC) >> $@ + $(BIN)/make_def_fun.pl EGL $(EGL_EXT_SPEC) >> $@ + $(BIN)/make_def_var.pl EGL $(EGL_CORE_SPEC) >> $@ + $(BIN)/make_def_var.pl EGL $(EGL_EXT_SPEC) >> $@ + $(BIN)/make_init.pl EGL $(EGL_CORE_SPEC) >> $@ + $(BIN)/make_init.pl EGL $(EGL_EXT_SPEC) >> $@ + cat $(SRC)/glew_init_egl.c >> $@ + $(BIN)/make_list.pl $(EGL_CORE_SPEC) >> $@ + $(BIN)/make_list.pl $(EGL_EXT_SPEC) >> $@ + echo -e "\n return GLEW_OK;\n}" >> $@ + echo -e "\n#elif defined(_WIN32)" >> $@ + $(BIN)/make_def_fun.pl WGL $(WGL_EXT_SPEC) >> $@ + $(BIN)/make_def_var.pl WGL $(WGL_EXT_SPEC) >> $@ + $(BIN)/make_init.pl WGL $(WGL_EXT_SPEC) >> $@ + cat $(SRC)/glew_init_wgl.c >> $@ + $(BIN)/make_list.pl $(WGL_EXT_SPEC) >> $@ + echo -e "\n return GLEW_OK;\n}" >> $@; + echo -e "\n#elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX))" >> $@ + $(BIN)/make_def_fun.pl GLX $(GLX_CORE_SPEC) >> $@ + $(BIN)/make_def_fun.pl GLX $(GLX_EXT_SPEC) >> $@ + echo -e "\nGLboolean __GLXEW_VERSION_1_0 = GL_FALSE;" >> $@ + echo -e "GLboolean __GLXEW_VERSION_1_1 = GL_FALSE;" >> $@ + $(BIN)/make_def_var.pl GLX $(GLX_CORE_SPEC) >> $@ + $(BIN)/make_def_var.pl GLX $(GLX_EXT_SPEC) >> $@ + $(BIN)/make_init.pl GLX $(GLX_CORE_SPEC) >> $@ + $(BIN)/make_init.pl GLX $(GLX_EXT_SPEC) >> $@ + cat $(SRC)/glew_init_glx.c >> $@ + $(BIN)/make_list.pl $(CORE)/GLX_VERSION_1_3 | grep -v '\"GLX_VERSION' >> $@ + $(BIN)/make_list.pl $(GLX_EXT_SPEC) >> $@ + echo -e "\n return GLEW_OK;\n}" >> $@ + echo -e "\n#endif /* !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) */\n" >> $@; + cat $(SRC)/glew_init_tail.c >> $@ + cat $(SRC)/glew_str_head.c >> $@ + $(BIN)/make_str.pl $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ + cat $(SRC)/glew_str_wgl.c >> $@ + $(BIN)/make_str.pl $(WGL_EXT_SPEC) >> $@ + cat $(SRC)/glew_str_glx.c >> $@ + $(BIN)/make_str.pl $(GLX_CORE_SPEC) $(GLX_EXT_SPEC) >> $@ + cat $(SRC)/glew_str_egl.c >> $@ + $(BIN)/make_str.pl $(EGL_CORE_SPEC) $(EGL_EXT_SPEC) >> $@ + cat $(SRC)/glew_str_tail.c >> $@ + perl -e "s/GLEW_VERSION_STRING/$(GLEW_VERSION)/g" -pi $@ + perl -e "s/GLEW_VERSION_MAJOR_STRING/$(GLEW_MAJOR)/g" -pi $@ + perl -e "s/GLEW_VERSION_MINOR_STRING/$(GLEW_MINOR)/g" -pi $@ + perl -e "s/GLEW_VERSION_MICRO_STRING/$(GLEW_MICRO)/g" -pi $@ + perl -e "s/GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader\(\);/{ GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader(); _glewInit_GL_ARB_vertex_program(); }/g" -pi $@ + perl -e "s/\(\(glColorSubTable = /((glBlendEquation = (PFNGLBLENDEQUATIONPROC)glewGetProcAddress((const GLubyte*)\"glBlendEquation\")) == NULL) || r;\n r = ((glColorSubTable = /g" -pi $@ + rm -f $@.bak + +$(S.DEST)/glewinfo.c: $(EXT)/.dummy + @echo "--------------------------------------------------------------------" + @echo "Creating glewinfo.c" + @echo "--------------------------------------------------------------------" + cp -f $(SRC)/glew_license.h $@ + cat $(SRC)/glewinfo_head.c >> $@ + $(BIN)/make_info.pl $(GL_CORE_SPEC) >> $@ + $(BIN)/make_info.pl $(GL_EXT_SPEC) >> $@ + echo -e "#if defined(GLEW_EGL)\n" >> $@ + $(BIN)/make_info.pl $(EGL_CORE_SPEC) >> $@ + $(BIN)/make_info.pl $(EGL_EXT_SPEC) >> $@ + echo -e "#elif _WIN32\n" >> $@ + $(BIN)/make_info.pl $(WGL_EXT_SPEC) >> $@ + echo -e "#else /* _UNIX */\n" >> $@ + $(BIN)/make_info.pl $(GLX_CORE_SPEC) >> $@ + $(BIN)/make_info.pl $(GLX_EXT_SPEC) >> $@ + echo -e "#endif /* _WIN32 */\n" >> $@ + + cat $(SRC)/glewinfo_gl.c >> $@ + $(BIN)/make_info_list.pl $(GL_CORE_SPEC) >> $@ + $(BIN)/make_info_list.pl $(GL_EXT_SPEC) >> $@ + cat $(SRC)/glewinfo_wgl.c >> $@ + $(BIN)/make_info_list.pl $(WGL_EXT_SPEC) >> $@ + cat $(SRC)/glewinfo_glx.c >> $@ + $(BIN)/make_info_list.pl $(GLX_CORE_SPEC) >> $@ + $(BIN)/make_info_list.pl $(GLX_EXT_SPEC) >> $@ + cat $(SRC)/glewinfo_egl.c >> $@ + $(BIN)/make_info_list.pl $(EGL_CORE_SPEC) >> $@ + $(BIN)/make_info_list.pl $(EGL_EXT_SPEC) >> $@ + cat $(SRC)/glewinfo_tail.c >> $@ + perl -e 's/"glColorSubTable"/"glBlendEquation", glBlendEquation == NULL);\n glewInfoFunc(fi, "glColorSubTable"/g' -pi $@ + rm -f $@.bak + +# Update documentation + +$(D.DEST)/%.html: doc/%.html + @echo "--------------------------------------------------------------------" + @echo "Creating $(@F)" + @echo "--------------------------------------------------------------------" + cat $(SRC)/header.html $< $(SRC)/footer.html | \ + perl -pe 's#(.*)#\1#' > $@ + +$(D.DEST)/glew.html: $(EXT)/.dummy + @echo "--------------------------------------------------------------------" + @echo "Creating glew.html" + @echo "--------------------------------------------------------------------" + cp -f $(SRC)/header.html $@ + echo -e "

Supported OpenGL Extensions

\n" >> $@ + $(BIN)/make_html.pl $(GL_EXT_SPEC) >> $@ + cat $(SRC)/footer.html >> $@ + perl -i -pe 's#(.*)#\1#' $@ + +$(D.DEST)/wglew.html: $(EXT)/.dummy + @echo "--------------------------------------------------------------------" + @echo "Creating wglew.html" + @echo "--------------------------------------------------------------------" + cp -f $(SRC)/header.html $@ + echo -e "

Supported WGL Extensions

\n" >> $@ + $(BIN)/make_html.pl $(WGL_EXT_SPEC) >> $@ + cat $(SRC)/footer.html >> $@ + perl -i -pe 's#(.*)#\1#' $@ + +$(D.DEST)/glxew.html: $(EXT)/.dummy + @echo "--------------------------------------------------------------------" + @echo "Creating glxew.html" + @echo "--------------------------------------------------------------------" + cp -f $(SRC)/header.html $@ + echo -e "

Supported GLX Extensions

\n" >> $@ + $(BIN)/make_html.pl $(GLX_EXT_SPEC) >> $@ + cat $(SRC)/footer.html >> $@ + perl -i -pe 's#(.*)#\1#' $@ + +$(B.DEST)/%.rc: src/%.rc $(EXT)/.dummy + perl -e "s/GLEW_MAJOR/$(GLEW_MAJOR)/g;s/GLEW_MINOR/$(GLEW_MINOR)/g;s/GLEW_MICRO/$(GLEW_MICRO)/g;" -p $< > $@ + +clean: + rm -rf $(I.TARGETS) $(S.TARGETS) $(D.TARGETS) $(B.TARGETS) + +clobber: clean + rm -rf $(EXT) + +destroy: clobber + rm -rf registry diff --git a/vendor/glew-cmake-2.2.0/auto/bin/filter_gl_ext.sh b/vendor/glew-cmake-2.2.0/auto/bin/filter_gl_ext.sh new file mode 100644 index 0000000..e295f65 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/filter_gl_ext.sh @@ -0,0 +1,614 @@ +#!/usr/bin/env bash +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. +## +## Parameters: +## +## $1: Extensions directory + +set -e + +# fix GL_NV_texture_compression_vtc + grep -v EXT $1/GL_NV_texture_compression_vtc > tmp + mv tmp $1/GL_NV_texture_compression_vtc + +# remove duplicates from GL_ARB_vertex_program and GL_ARB_fragment_program + tail -n +5 $1/GL_ARB_vertex_program > patterns + grep -v -F -f patterns $1/GL_ARB_fragment_program > tmp + mv tmp $1/GL_ARB_fragment_program + +# remove duplicates from GLX_EXT_visual_rating and GLX_EXT_visual_info + tail -n +5 $1/GLX_EXT_visual_info > patterns + grep -v -F -f patterns $1/GLX_EXT_visual_rating > tmp + mv tmp $1/GLX_EXT_visual_rating + +# GL_EXT_draw_buffers2 and GL_EXT_transform_feedback both define glGetBooleanIndexedvEXT but with different parameter names + grep -v glGetBooleanIndexedvEXT $1/GL_EXT_transform_feedback > tmp + mv tmp $1/GL_EXT_transform_feedback + +# GL_EXT_draw_buffers2 and GL_EXT_transform_feedback both define glGetIntegerIndexedvEXT but with different parameter names + grep -v glGetIntegerIndexedvEXT $1/GL_EXT_transform_feedback > tmp + mv tmp $1/GL_EXT_transform_feedback + +# remove duplicates from GL_NV_video_capture and GLX_NV_video_capture + grep -v glX $1/GL_NV_video_capture > tmp + mv tmp $1/GL_NV_video_capture + +# add missing functions to GL_NV_video_capture + cat >> $1/GL_NV_video_capture <> $1/WGL_NV_video_capture <> $1/GLX_NV_video_capture < patterns + grep -v -F -f patterns $1/GL_NV_present_video > tmp + mv tmp $1/GL_NV_present_video + +# fix WGL_NV_present_video + cat >> $1/WGL_NV_present_video <> $1/WGL_NV_video_output < tmp + mv tmp $1/GL_NV_occlusion_query + +# add deprecated constants to GL_ATI_fragment_shader + cat >> $1/GL_ATI_fragment_shader <> $1/GL_NV_texture_shader <> $1/WGL_ATI_pixel_format_float <> $1/WGL_ARB_make_current_read <> $1/WGL_EXT_make_current_read <> $1/GL_ARB_vertex_buffer_object <> $1/GLX_EXT_import_context <> $1/GLX_OML_swap_method <> $1/GLX_SGIX_fbconfig <> $1/GLX_SGIX_pbuffer <> $1/GL_NV_half_float <> $1/WGL_ARB_pbuffer <> $1/WGL_EXT_pbuffer < patterns + grep -v -F -f patterns $1/GL_ARB_fragment_shader > tmp + mv tmp $1/GL_ARB_fragment_shader + grep -v -F -f patterns $1/GL_ARB_vertex_shader > tmp + mv tmp $1/GL_ARB_vertex_shader + +# remove duplicates in GL_ARB_vertex_program and GL_ARB_vertex_shader + tail -n +5 $1/GL_ARB_vertex_program > patterns + grep -v -F -f patterns $1/GL_ARB_vertex_shader > tmp + mv tmp $1/GL_ARB_vertex_shader + +# remove triplicates in GL_ARB_fragment_program, GL_ARB_fragment_shader, +# and GL_ARB_vertex_shader + tail -n +5 $1/GL_ARB_fragment_program > patterns + grep -v -F -f patterns $1/GL_ARB_fragment_shader > tmp + mv tmp $1/GL_ARB_fragment_shader + grep -v -F -f patterns $1/GL_ARB_vertex_shader > tmp + mv tmp $1/GL_ARB_vertex_shader + +# remove duplicates in GL_EXT_direct_state_access + grep -v "glGetBooleanIndexedvEXT" $1/GL_EXT_direct_state_access > tmp + mv tmp $1/GL_EXT_direct_state_access + grep -v "glGetIntegerIndexedvEXT" $1/GL_EXT_direct_state_access > tmp + mv tmp $1/GL_EXT_direct_state_access + grep -v "glDisableIndexedEXT" $1/GL_EXT_direct_state_access > tmp + mv tmp $1/GL_EXT_direct_state_access + grep -v "glEnableIndexedEXT" $1/GL_EXT_direct_state_access > tmp + mv tmp $1/GL_EXT_direct_state_access + grep -v "glIsEnabledIndexedEXT" $1/GL_EXT_direct_state_access > tmp + mv tmp $1/GL_EXT_direct_state_access + +# remove duplicates in GL_NV_explicit_multisample + grep -v "glGetBooleanIndexedvEXT" $1/GL_NV_explicit_multisample > tmp + mv tmp $1/GL_NV_explicit_multisample + grep -v "glGetIntegerIndexedvEXT" $1/GL_NV_explicit_multisample > tmp + mv tmp $1/GL_NV_explicit_multisample + +# fix bugs in GL_ARB_vertex_shader + grep -v "GL_FLOAT" $1/GL_ARB_vertex_shader > tmp + mv tmp $1/GL_ARB_vertex_shader + perl -e 's/handle /GLhandleARB /g' -pi $1/GL_ARB_vertex_shader + +# fix bugs in GL_ARB_shader_objects + grep -v "GL_FLOAT " $1/GL_ARB_shader_objects > tmp + mv tmp $1/GL_ARB_shader_objects + grep -v "GL_INT " $1/GL_ARB_shader_objects > tmp + mv tmp $1/GL_ARB_shader_objects + +# add typedefs to GL_ARB_shader_objects + cat >> $1/GL_ARB_shader_objects <> $1/GL_ARB_transpose_matrix <> $1/GL_EXT_framebuffer_multisample < tmp + mv tmp $1/GL_NV_gpu_program_fp64 + +# Filter glGetUniformui64vNV from GL_NV_shader_buffer_load + grep -v "glGetUniformui64vNV" $1/GL_NV_shader_buffer_load > tmp + mv tmp $1/GL_NV_shader_buffer_load + +# Filter out profile enumerations from GLX_ARB_create_context + grep -v "_PROFILE_" $1/GLX_ARB_create_context > tmp + mv tmp $1/GLX_ARB_create_context + +# Filter only profile related enumerations for GLX_ARB_create_context_profile + head -n4 $1/GLX_ARB_create_context_profile > tmp + grep "_PROFILE_" $1/GLX_ARB_create_context_profile >> tmp + mv tmp $1/GLX_ARB_create_context_profile + +# Filter out profile enumerations from WGL_ARB_create_context + grep -v "_PROFILE_" $1/WGL_ARB_create_context > tmp + mv tmp $1/WGL_ARB_create_context + +# Filter only profile related enumerations for WGL_ARB_create_context_profile + head -n4 $1/WGL_ARB_create_context_profile > tmp + grep "_PROFILE_" $1/WGL_ARB_create_context_profile >> tmp + mv tmp $1/WGL_ARB_create_context_profile + +# add missing function to GLX_NV_copy_image + cat >> $1/GLX_NV_copy_image <> $1/WGL_NV_copy_image < tmp + mv tmp $1/GL_EXT_separate_shader_objects + +# Filter out EXT functions from GL_ARB_viewport_array + grep -v "EXT" $1/GL_ARB_viewport_array > tmp + mv tmp $1/GL_ARB_viewport_array + +# Additional enumerations for GL_NV_vertex_buffer_unified_memory +# These are mentioned in GL_ARB_draw_indirect.txt + + cat >> $1/GL_NV_vertex_buffer_unified_memory < tmp + mv tmp $1/GL_ARB_debug_output + +# Filter glGetPointerv from GL_EXT_vertex_array +# It's part of OpenGL 1.1, after all + + grep -v "glGetPointerv" $1/GL_EXT_vertex_array > tmp + mv tmp $1/GL_EXT_vertex_array + +# add typedef to GL_AMD_debug_output +# parse_spec.pl can't parse typedefs from New Types section, but ought to + cat >> $1/GL_AMD_debug_output <> $1/GL_ARB_debug_output <> $1/GL_KHR_debug < tmp + mv tmp $1/GL_KHR_debug + +# add typedefs to GL_ARB_cl_event +# parse_spec.pl can't parse typedefs from New Types section, but ought to + cat >> $1/GL_ARB_cl_event < tmp + mv tmp $1/GL_ARB_gpu_shader_fp64 + +# add missing functions to GL_EXT_direct_state_access (GL_ARB_gpu_shader_fp64 related) + cat >> $1/GL_EXT_direct_state_access <> $1/GL_EXT_direct_state_access < tmp + mv tmp $1/GL_AMD_performance_monitor + grep -v 'GL_FLOAT ' $1/GL_AMD_performance_monitor > tmp + mv tmp $1/GL_AMD_performance_monitor + +# Filter out GL_STORAGE_CACHED_APPLE and GL_STORAGE_SHARED_APPLE from GL_APPLE_texture_range + grep -v 'GL_STORAGE_CACHED_APPLE ' $1/GL_APPLE_texture_range > tmp + mv tmp $1/GL_APPLE_texture_range + grep -v 'GL_STORAGE_SHARED_APPLE ' $1/GL_APPLE_texture_range > tmp + mv tmp $1/GL_APPLE_texture_range + +# Filter out GL_RED from GL_ARB_texture_rg + grep -v 'GL_RED ' $1/GL_ARB_texture_rg > tmp + mv tmp $1/GL_ARB_texture_rg + +# Filter out _EXT enums from GL_ARB_texture_storage + grep -v '_EXT ' $1/GL_ARB_texture_storage > tmp + mv tmp $1/GL_ARB_texture_storage + +# Filter out TEXTURE_3D enums from GL_EXT_paletted_texture + grep -v 'TEXTURE_3D' $1/GL_EXT_paletted_texture > tmp + mv tmp $1/GL_EXT_paletted_texture + +# Filter out GL_VERSION_1_1 enums from GL_AMD_stencil_operation_extended + grep -v '0x150' $1/GL_AMD_stencil_operation_extended > tmp + mv tmp $1/GL_AMD_stencil_operation_extended + +# Filter out from GL_APPLE_ycbcr_422 + grep -v 'GL_UNSIGNED_SHORT_8_8_APPLE' $1/GL_APPLE_ycbcr_422 > tmp + mv tmp $1/GL_APPLE_ycbcr_422 + grep -v 'GL_UNSIGNED_SHORT_8_8_REV_APPLE' $1/GL_APPLE_ycbcr_422 > tmp + mv tmp $1/GL_APPLE_ycbcr_422 + +# Filter out GL_FRAGMENT_DEPTH_EXT from GL_EXT_light_texture + grep -v 'GL_FRAGMENT_DEPTH_EXT' $1/GL_EXT_light_texture > tmp + mv tmp $1/GL_EXT_light_texture + +# Filter out GL_MULTISAMPLE_BIT_EXT from GL_SGIS_multisample + grep -v 'GL_MULTISAMPLE_BIT_EXT' $1/GL_SGIS_multisample > tmp + mv tmp $1/GL_SGIS_multisample + +# Filter out GL_COMPRESSED_RGB_S3TC_DXT1_EXT from GL_EXT_texture_compression_dxt1 + grep -v 'GL_COMPRESSED_RGB_S3TC_DXT1_EXT' $1/GL_EXT_texture_compression_dxt1 > tmp + mv tmp $1/GL_EXT_texture_compression_dxt1 + +# Filter out GL_COMPRESSED_RGBA_S3TC_DXT1_EXT from GL_EXT_texture_compression_dxt1 + grep -v 'GL_COMPRESSED_RGBA_S3TC_DXT1_EXT' $1/GL_EXT_texture_compression_dxt1 > tmp + mv tmp $1/GL_EXT_texture_compression_dxt1 + +# Append GLfixed to GL_ARB_ES2_compatibility +# Probably ought to be explicitly mentioned in the spec language + + cat >> $1/GL_ARB_ES2_compatibility <> $1/GL_REGAL_ES1_0_compatibility <> $1/GL_REGAL_log < GLLOGPROCREGAL + perl -e 's/LOGPROCREGAL/GLLOGPROCREGAL/g' -pi $1/GL_REGAL_log + +# Filter out GL_BYTE from GL_OES_byte_coordinates + grep -v 'GL_BYTE' $1/GL_OES_byte_coordinates > tmp + mv tmp $1/GL_OES_byte_coordinates + +# Filter out fp64 (not widely supported) from GL_EXT_direct_state_access + egrep -v 'glProgramUniform.*[1234]d[v]?EXT' $1/GL_EXT_direct_state_access > tmp + mv tmp $1/GL_EXT_direct_state_access + +# Filter out all enums from GL_ANGLE_depth_texture + grep -v '0x' $1/GL_ANGLE_depth_texture > tmp + mv tmp $1/GL_ANGLE_depth_texture + +# Filter out GL_NONE enum from GL_ANGLE_depth_texture + grep -v 'GL_NONE' $1/GL_ANGLE_texture_usage > tmp + mv tmp $1/GL_ANGLE_texture_usage + +# Fixup REGAL and ANGLE urls + + for i in $1/GL_REGAL_*; do perl -e 's#http://www.opengl.org/registry/specs/REGAL/.*#https://github.com/p3/regal/tree/master/doc/extensions#g' -pi $i; done + for i in $1/GL_ANGLE_*; do perl -e 's#http://www.opengl.org/registry/specs/ANGLE/.*#https://code.google.com/p/angleproject/source/browse/\#git%2Fextensions#g' -pi $i; done + +# Filter out GL_NV_blend_equation_advanced_coherent enums and functions + head -n4 $1/GL_NV_blend_equation_advanced_coherent > tmp + mv tmp $1/GL_NV_blend_equation_advanced_coherent + +# Filter out GL_AMD_gpu_shader_int64 enums and functions + head -n4 $1/GL_AMD_gpu_shader_int64 > tmp + mv tmp $1/GL_AMD_gpu_shader_int64 + +# Filter out GL_NO_ERROR enum and glGetGraphicsResetStatus from GL_KHR_robustness + grep -v 'GL_NO_ERROR' $1/GL_KHR_robustness | + grep -v 'glGetGraphicsResetStatus' > tmp + mv tmp $1/GL_KHR_robustness + +# Filter out all enums from GL_KHR_blend_equation_advanced_coherent + grep -v '0x' $1/GL_KHR_blend_equation_advanced_coherent > tmp + mv tmp $1/GL_KHR_blend_equation_advanced_coherent + +# Filter out glBlendBarrierKHR enum from GL_KHR_blend_equation_advanced_coherent + grep -v 'glBlendBarrierKHR' $1/GL_KHR_blend_equation_advanced_coherent > tmp + mv tmp $1/GL_KHR_blend_equation_advanced_coherent + +# Filter out GL_NONE enum from GL_KHR_context_flush_control + grep -v 'GL_NONE' $1/GL_KHR_context_flush_control > tmp + mv tmp $1/GL_KHR_context_flush_control + +# Filter out CoverageModulation from NV_framebuffer_mixed_samples +# Superset of EXT_raster_multisample + + grep -v "CoverageModulation" $1/GL_NV_framebuffer_mixed_samples > tmp + mv tmp $1/GL_NV_framebuffer_mixed_samples + +# Filter out glRasterSamplesEXT from NV_framebuffer_mixed_samples +# Superset of EXT_raster_multisample + + grep -v "RasterSamplesEXT" $1/GL_NV_framebuffer_mixed_samples > tmp + mv tmp $1/GL_NV_framebuffer_mixed_samples + +# Filter out glNamedBufferStorageEXT from GL_ARB_buffer_storage + + grep -v "glNamedBufferStorageEXT" $1/GL_ARB_buffer_storage > tmp + mv tmp $1/GL_ARB_buffer_storage + +# Filter out glFramebufferTextureEXT from GL_EXT_geometry_point_size +# and GL_EXT_geometry_shader + + grep -v "glFramebufferTextureEXT" $1/GL_EXT_geometry_point_size > tmp + mv tmp $1/GL_EXT_geometry_point_size + + grep -v "glFramebufferTextureEXT" $1/GL_EXT_geometry_shader > tmp + mv tmp $1/GL_EXT_geometry_shader + +# Filter out glBindFragDataLocationEXT from GL_EXT_blend_func_extended + + grep -v "glBindFragDataLocationEXT" $1/GL_EXT_blend_func_extended > tmp + mv tmp $1/GL_EXT_blend_func_extended + +# Filter out glDrawArraysInstancedEXT and glDrawElementsInstancedEXT from GL_EXT_blend_func_extended + + grep -v "glDrawArraysInstancedEXT" $1/GL_EXT_instanced_arrays > tmp + mv tmp $1/GL_EXT_instanced_arrays + + grep -v "glDrawElementsInstancedEXT" $1/GL_EXT_instanced_arrays > tmp + mv tmp $1/GL_EXT_instanced_arrays + +# Filter out glRenderbufferStorageMultisampleEXT from GL_EXT_multisampled_render_to_texture + + grep -v "glRenderbufferStorageMultisampleEXT" $1/GL_EXT_multisampled_render_to_texture > tmp + mv tmp $1/GL_EXT_multisampled_render_to_texture + +# Filter out glTexturePageCommitmentEXT from GL_ARB_sparse_texture + + grep -v "glTexturePageCommitmentEXT" $1/GL_ARB_sparse_texture > tmp + mv tmp $1/GL_ARB_sparse_texture + +# Filter out TextureStorage* from GL_ARB_texture_storage + + grep -v "TextureStorage" $1/GL_ARB_texture_storage > tmp + mv tmp $1/GL_ARB_texture_storage + +# Filter out functions from GL_EXT_occlusion_query_boolean + + grep -v "(" $1/GL_EXT_occlusion_query_boolean > tmp + mv tmp $1/GL_EXT_occlusion_query_boolean + +# Filter out duplicate enums from GL_EXT_protected_textures + + cat $1/GL_EXT_protected_textures | grep -v GL_TRUE | grep -v GL_FALSE > tmp + mv tmp $1/GL_EXT_protected_textures + +# Filter out duplicate enums from GL_EXT_robustness + + cat $1/GL_EXT_robustness | grep -v GL_NO_ERROR > tmp + mv tmp $1/GL_EXT_robustness + +# Filter GL_EXT_shader_framebuffer_fetch_non_coherent + + grep -v "FramebufferFetchBarrierEXT" $1/GL_EXT_shader_framebuffer_fetch_non_coherent > tmp + mv tmp $1/GL_EXT_shader_framebuffer_fetch_non_coherent + +# Filter GL_EXT_tessellation_shader + + grep -v "PatchParameteriEXT" $1/GL_EXT_tessellation_shader > tmp + mv tmp $1/GL_EXT_tessellation_shader + +# Filter GL_EXT_texture_buffer + + grep -v "TexBuffer" $1/GL_EXT_texture_buffer > tmp + mv tmp $1/GL_EXT_texture_buffer + +# Filter GL_EXT_texture_border_clamp + + grep -v "TexParameter" $1/GL_EXT_texture_border_clamp > tmp + mv tmp $1/GL_EXT_texture_border_clamp + +# Filter GL_EXT_disjoint_timer_query + + cat $1/GL_EXT_disjoint_timer_query | grep -v GetQueryObjecti64v | grep -v GetQueryObjectui64v > tmp + mv tmp $1/GL_EXT_disjoint_timer_query + +# Filter GL_NV_read_buffer_front + + grep -v "ReadBufferNV" $1/GL_NV_read_buffer_front > tmp + mv tmp $1/GL_NV_read_buffer_front + +# Append GLVULKANPROCNV to GL_NV_draw_vulkan_image +# Probably ought to be explicitly mentioned in the spec language + + cat >> $1/GL_NV_draw_vulkan_image < +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. +## +## Parameters: +## +## $1: Extensions directory +## $2: Registry directory +## $3: The black list + +set -e + +# clean up + rm -f $1/*.bak diff --git a/vendor/glew-cmake-2.2.0/auto/bin/filter_spec.py b/vendor/glew-cmake-2.2.0/auto/bin/filter_spec.py new file mode 100644 index 0000000..16c2fa9 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/filter_spec.py @@ -0,0 +1,38 @@ +#!/usr/bin/python + +import re + +section = re.compile('^(Name|Name Strings?|Contact|Notice|Number|Dependencies|Overview|Issues|IP Status|Status|Version|New Procedures and Functions|New Tokens|Additions to .*|Changes to .*|Modifications to .*|Add new Section .*)\s*$') +token = re.compile('^\s+(([A-Z0-9][A-Z0-9_x]*):?\s+((?:0x)?[0-9A-F]+)([^\?]*))?\s*$') +match = [ 'Name', 'Name String', 'Contact', 'Notice', 'Name Strings', 'Version', 'Number', 'Dependencies', 'New Procedures and Functions', 'New Tokens'] + +if __name__ == '__main__': + + from optparse import OptionParser + import os + + parser = OptionParser('usage: %prog [options] [SOURCES...]') + (options, args) = parser.parse_args() + + for i in args: + lines = open(i).readlines() + f = open(i,'w') + + # Keep track of the current section as we iterate over the input + current = '' + for j in lines: + + # Detect the start of a new section + m = section.match(j) + if m: + current = m.group(1).strip() + if current in match: + print >>f, j, + continue + + if current=='New Tokens': + if token.match(j): + print >>f, j, + elif current in match: + print >>f, j, + diff --git a/vendor/glew-cmake-2.2.0/auto/bin/make.pl b/vendor/glew-cmake-2.2.0/auto/bin/make.pl new file mode 100644 index 0000000..e0b32ef --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/make.pl @@ -0,0 +1,224 @@ +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +my %regex = ( + extname => qr/^[A-Z][A-Za-z0-9_]+$/, + exturl => qr/^http.+$/, + function => qr/^(.+) ([a-z][a-z0-9_]*) \((.*)\)$/i, + token => qr/^([A-Z][A-Z0-9_x]*)\s+((?:0x)?[0-9A-Fa-f]+(u(ll)?)?|[A-Z][A-Z0-9_]*)$/, + type => qr/^typedef\s+(.+)$/, + exact => qr/.*;$/, +); + +# prefix function name with glew +sub prefixname($) +{ + my $name = $_[0]; + $name =~ s/^(.*?)gl/__$1glew/; + return $name; +} + +# prefix function name with glew +sub prefix_varname($) +{ + my $name = $_[0]; + $name =~ s/^(.*?)GL(X*?)EW/__$1GL$2EW/; + return $name; +} + +#--------------------------------------------------------------------------------------- + +sub make_exact($) +{ + my $exact = $_[0]; + $exact =~ s/(; |{)/$1\n/g; + return $exact; +} + +sub make_separator($) +{ + my $extname = $_[0]; + my $l = length $extname; + my $s = (71 - $l)/2; + print "/* "; + my $j = 3; + for (my $i = 0; $i < $s; $i++) + { + print "-"; + $j++; + } + print " $_[0] "; + $j += $l + 2; + while ($j < 76) + { + print "-"; + $j++; + } + print " */\n\n"; +} + +#--------------------------------------------------------------------------------------- + +sub parse_ext($) +{ + my $filename = shift; + my %functions = (); + my %tokens = (); + my @reuse = (); # Extensions to reuse + my @types = (); + my @exacts = (); + my $extname = ""; # Full extension name GL_FOO_extension + my $exturl = ""; # Info URL + my $extstring = ""; # Relevant extension string + + open EXT, "<$filename" or return; + + # As of GLEW 1.14.0 the first four lines _must_ be + # the extension name, the URL and the GL extension + # string (which might be different to the name), + # and the reused extensions + # + # For example GL_NV_geometry_program4 is available + # iff GL_NV_gpu_program4 appears in the extension + # string. + # + # For core OpenGL versions, the third line should + # be blank. + # + # If the URL is unknown, the second line should be + # blank. + + $extname = readline(*EXT); + $exturl = readline(*EXT); + $extstring = readline(*EXT); + @reuse = split(" ", readline(*EXT)); + + chomp($extname); + chomp($exturl); + chomp($extstring); + + while() + { + chomp; + if (s/^\s+//) + { + if (/$regex{exact}/) + { + push @exacts, $_; + } + elsif (/$regex{type}/) + { + push @types, $_; + } + elsif (/$regex{token}/) + { + my ($name, $value) = ($1, $2); + $tokens{$name} = $value; + } + elsif (/$regex{function}/) + { + my ($return, $name, $parms) = ($1, $2, $3); + $functions{$name} = { + rtype => $return, + parms => $parms, + }; + } else { + print STDERR "'$_' matched no regex.\n"; + } + } + } + + close EXT; + + return ($extname, $exturl, $extstring, \@reuse, \@types, \%tokens, \%functions, \@exacts); +} + +sub output_tokens($$) +{ + my ($tbl, $fnc) = @_; + if (keys %{$tbl}) + { + local $, = "\n"; + print "\n"; + print map { &{$fnc}($_, $tbl->{$_}) } sort { + if (${$tbl}{$a} eq ${$tbl}{$b}) { + $a cmp $b + } else { + if (${$tbl}{$a} =~ /_/) { + if (${$tbl}{$b} =~ /_/) { + $a cmp $b + } else { + -1 + } + } else { + if (${$tbl}{$b} =~ /_/) { + 1 + } else { + if (hex ${$tbl}{$a} eq hex ${$tbl}{$b}) { + $a cmp $b + } else { + hex ${$tbl}{$a} <=> hex ${$tbl}{$b} + } + } + } + } + } keys %{$tbl}; + print "\n"; + } else { + print STDERR "no keys in table!\n"; + } +} + +sub output_types($$) +{ + my ($tbl, $fnc) = @_; + if (scalar @{$tbl}) + { + local $, = "\n"; + print "\n"; + print map { &{$fnc}($_) } sort @{$tbl}; + print "\n"; + } +} + +sub output_decls($$) +{ + my ($tbl, $fnc) = @_; + if (keys %{$tbl}) + { + local $, = "\n"; + print "\n"; + print map { &{$fnc}($_, $tbl->{$_}) } sort keys %{$tbl}; + print "\n"; + } +} + +sub output_exacts($$) +{ + my ($tbl, $fnc) = @_; + if (scalar @{$tbl}) + { + local $, = "\n"; + print "\n"; + print map { &{$fnc}($_) } sort @{$tbl}; + print "\n"; + } +} + +sub output_reuse($$) +{ + my ($tbl, $fnc) = @_; + if (scalar @{$tbl}) + { + local $, = "\n"; + print "\n"; + print map { &{$fnc}($_) } sort @{$tbl}; + print "\n"; + } +} diff --git a/vendor/glew-cmake-2.2.0/auto/bin/make_def_fun.pl b/vendor/glew-cmake-2.2.0/auto/bin/make_def_fun.pl new file mode 100644 index 0000000..af74706 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/make_def_fun.pl @@ -0,0 +1,37 @@ +#!/usr/bin/env perl +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +use lib '.'; +do 'bin/make.pl'; + +# function pointer declaration +sub make_pfn_decl($%) +{ + return "PFN" . (uc $_[0]) . "PROC " . prefixname($_[0]) . " = NULL;"; +} + +my @extlist = (); +my %extensions = (); + +our $type = shift; + +if (@ARGV) +{ + @extlist = @ARGV; + + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); + output_decls($functions, \&make_pfn_decl); + } +} diff --git a/vendor/glew-cmake-2.2.0/auto/bin/make_def_var.pl b/vendor/glew-cmake-2.2.0/auto/bin/make_def_var.pl new file mode 100644 index 0000000..993a68c --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/make_def_var.pl @@ -0,0 +1,33 @@ +#!/usr/bin/env perl +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +use lib '.'; +do 'bin/make.pl'; + +my @extlist = (); +my %extensions = (); + +our $type = shift; + +if (@ARGV) +{ + @extlist = @ARGV; + + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); + my $extvar = $extname; + $extvar =~ s/GL(X*)_/GL$1EW_/; + print "GLboolean " . prefix_varname($extvar) . " = GL_FALSE;\n"; + } +} diff --git a/vendor/glew-cmake-2.2.0/auto/bin/make_enable_index.pl b/vendor/glew-cmake-2.2.0/auto/bin/make_enable_index.pl new file mode 100644 index 0000000..bdbe7d1 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/make_enable_index.pl @@ -0,0 +1,48 @@ +#!/usr/bin/env perl +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; +use File::Basename; + +use lib '.'; +do 'bin/make.pl'; + +## +## Make Extension-enabled Index +## + +my @extlist = (); + +if (@ARGV) +{ + @extlist = @ARGV; + + print "/* Detected in the extension string or strings */\n"; + print "static GLboolean _glewExtensionString[" . scalar @extlist . "];\n"; + + print "/* Detected via extension string or experimental mode */\n"; + print "static GLboolean* _glewExtensionEnabled[] = {\n";; + + foreach my $ext (sort { basename($a) cmp basename($b) } @extlist) + { + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = + parse_ext($ext); + + my $extvar = $extname; + $extvar =~ s/GL(X*)_/GL$1EW_/; + + print "#ifdef $extname\n"; + print " &__$extvar,\n"; + print "#endif\n"; + } + + print " NULL\n};\n\n"; +} diff --git a/vendor/glew-cmake-2.2.0/auto/bin/make_header.pl b/vendor/glew-cmake-2.2.0/auto/bin/make_header.pl new file mode 100644 index 0000000..9917db1 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/make_header.pl @@ -0,0 +1,73 @@ +#!/usr/bin/env perl +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +use lib '.'; +do 'bin/make.pl'; + +# token +sub make_define($$) +{ + return "#define $_[0] $_[1]" +} + +# type declaration +sub make_type($$) +{ + return "@_;" +} + +# function pointer type declaration +sub make_pfn_type($%) +{ + our $api; + return join(' ', "typedef", $_[1]->{rtype}, + "($api * PFN" . (uc $_[0]) . "PROC)", + "(" . $_[1]->{parms} . ")") . ";"; +} + +# function name alias +sub make_pfn_alias($%) +{ + our $type; + return join(" ", "#define", $_[0], $type . "EW_GET_FUN(" . prefixname($_[0]) . ")") +} + +my @extlist = (); +my %extensions = (); + +our $api = shift; +our $type = shift; + +if (@ARGV) +{ + @extlist = @ARGV; + + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); + + make_separator($extname); + print "#ifndef $extname\n#define $extname 1\n"; + output_tokens($tokens, \&make_define); + output_types($types, \&make_type); + output_exacts($exacts, \&make_exact); + output_decls($functions, \&make_pfn_type); + output_decls($functions, \&make_pfn_alias); + + my $extvar = $extname; + $extvar =~ s/GL(X*)_/GL$1EW_/; + + print "\n#define $extvar " . $type . "EW_GET_VAR(" . prefix_varname($extvar) . ")\n"; + print "\n#endif /* $extname */\n\n"; + } +} diff --git a/vendor/glew-cmake-2.2.0/auto/bin/make_html.pl b/vendor/glew-cmake-2.2.0/auto/bin/make_html.pl new file mode 100644 index 0000000..be97003 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/make_html.pl @@ -0,0 +1,57 @@ +#!/usr/bin/env perl +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +use lib '.'; +do 'bin/make.pl'; + +#--------------------------------------------------------------------------------------- + +my @extlist = (); +my %extensions = (); +my $group = ""; +my $cur_group = ""; + +if (@ARGV) +{ + @extlist = @ARGV; + my $n = 1; + print "\n"; + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); + $cur_group = $extname; + $cur_group =~ s/^(?:W?)GL(?:X?)_([A-Z0-9]+?)_.*$/$1/; + $extname =~ s/^(?:W?)GL(?:X?)_(.*)$/$1/; + if ($cur_group ne $group) + { + if ($group ne "") + { + print "\n"; + } + $group = $cur_group; + } + + { + if ($exturl) + { + print "\n"; + } + else + { + print "\n"; + } + $n++; + } + } + print "

$n $extname
$n $extname
\n" +} diff --git a/vendor/glew-cmake-2.2.0/auto/bin/make_index.pl b/vendor/glew-cmake-2.2.0/auto/bin/make_index.pl new file mode 100644 index 0000000..cf247f8 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/make_index.pl @@ -0,0 +1,41 @@ +#!/usr/bin/env perl +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; +use File::Basename; + +use lib '.'; +do 'bin/make.pl'; + +## +## Make Index +## +## Output sorted array of extension strings for indexing into extension +## enable/disable flags. This provides a way to convert an extension string +## into an integer index. +## + +my @extlist = (); + +if (@ARGV) +{ + @extlist = @ARGV; + + foreach my $ext (sort { basename($a) cmp basename($b) } @extlist) + { + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = + parse_ext($ext); + + print "#ifdef $extname\n"; + print " \"$extname\",\n"; + print "#endif\n"; + } +} diff --git a/vendor/glew-cmake-2.2.0/auto/bin/make_info.pl b/vendor/glew-cmake-2.2.0/auto/bin/make_info.pl new file mode 100644 index 0000000..3dcece9 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/make_info.pl @@ -0,0 +1,71 @@ +#!/usr/bin/env perl +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +use lib '.'; +do 'bin/make.pl'; + +#--------------------------------------------------------------------------------------- + +# function pointer definition +sub make_pfn_info($%) +{ + my $name = $_[0]; + return " glewInfoFunc(fi, \"$_[0]\", $name == NULL);"; +} + +#--------------------------------------------------------------------------------------- + +my @extlist = (); +my %extensions = (); + +if (@ARGV) +{ + @extlist = @ARGV; + + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); + my $extvar = $extname; + $extvar =~ s/GL(X*)_/GL$1EW_/; + my $extpre = $extname; + $extpre =~ s/(GLX|GLW|GL).*/$1/; + $extpre = lc $extpre; + + #make_separator($extname); + print "#ifdef $extname\n\n"; + print "static void _glewInfo_$extname (void)\n{\n"; + + if (! %$functions) + { + print " "; + } + else + { + print " GLboolean fi = "; + } + + if ($extvar =~ /VERSION/) + { + print "glewPrintExt(\"$extname\", $extvar, $extvar, $extvar);\n"; + } + else + { + print "glewPrintExt(\"$extname\", $extvar, $extpre" . + "ewIsSupported(\"$extname\"), $extpre" . + "ewGetExtension(\"$extstring\"));\n"; + } + output_decls($functions, \&make_pfn_info); + print "}\n\n"; + print "#endif /* $extname */\n\n"; + } +} diff --git a/vendor/glew-cmake-2.2.0/auto/bin/make_info_list.pl b/vendor/glew-cmake-2.2.0/auto/bin/make_info_list.pl new file mode 100644 index 0000000..74dbb77 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/make_info_list.pl @@ -0,0 +1,49 @@ +#!/usr/bin/env perl +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +use lib '.'; +do 'bin/make.pl'; + +#--------------------------------------------------------------------------------------- + +# function pointer definition +sub make_pfn_def($%) +{ + return "PFN" . (uc $_[0]) . "PROC " . prefixname($_[0]) . " = NULL;"; +} + +# function pointer definition +sub make_init_call($%) +{ + my $name = prefixname($_[0]); + return " r = r || (" . $name . " = (PFN" . (uc $_[0]) . "PROC)glewGetProcAddress((const GLubyte*)\"" . $name . "\")) == NULL;"; +} + +#--------------------------------------------------------------------------------------- + +my @extlist = (); +my %extensions = (); + +if (@ARGV) +{ + @extlist = @ARGV; + + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); + + print "#ifdef $extname\n"; + print " _glewInfo_$extname();\n"; + print "#endif /* $extname */\n"; + } +} diff --git a/vendor/glew-cmake-2.2.0/auto/bin/make_init.pl b/vendor/glew-cmake-2.2.0/auto/bin/make_init.pl new file mode 100644 index 0000000..37922ee --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/make_init.pl @@ -0,0 +1,61 @@ +#!/usr/bin/env perl +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +use lib '.'; +do 'bin/make.pl'; + +#------------------------------------------------------------------------------- + +# function pointer definition +sub make_pfn_def_init($%) +{ + #my $name = prefixname($_[0]); + return " r = ((" . $_[0] . " = (PFN" . (uc $_[0]) . "PROC)glewGetProcAddress((const GLubyte*)\"" . $_[0] . "\")) == NULL) || r;"; +} + +sub make_reuse_call($%) +{ + return " r = _glewInit_" . $_[0] . "() || r;"; +} + +#------------------------------------------------------------------------------- + +my @extlist = (); +my %extensions = (); + +our $type = shift; + +if (@ARGV) +{ + @extlist = @ARGV; + + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = + parse_ext($ext); + + #make_separator($extname); + my $extvar = $extname; + my $extvardef = $extname; + $extvar =~ s/GL(X*)_/GL$1EW_/; + if (keys %$functions or keys @$reuse) + { + print "#ifdef $extname\n\n"; + print "static GLboolean _glewInit_$extname ()\n{\n GLboolean r = GL_FALSE;\n"; + output_reuse($reuse, \&make_reuse_call); + output_decls($functions, \&make_pfn_def_init); + print "\n return r;\n}\n\n"; + print "#endif /* $extname */\n\n"; + } + } +} diff --git a/vendor/glew-cmake-2.2.0/auto/bin/make_initd.pl b/vendor/glew-cmake-2.2.0/auto/bin/make_initd.pl new file mode 100644 index 0000000..2f7e2e6 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/make_initd.pl @@ -0,0 +1,45 @@ +#!/usr/bin/env perl +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +use lib '.'; +do 'bin/make.pl'; + +## Output declarations for the _glewInit_[extension] functions defined +## by make_init.pl script. These are necessary for for initializers to +## call each other, such as a core GL 3 context that depends on certain +## extensions. + +#------------------------------------------------------------------------------- + +my @extlist = (); +my %extensions = (); + +our $type = shift; + +if (@ARGV) +{ + @extlist = @ARGV; + + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = + parse_ext($ext); + + #print "#ifdef $extname\n\n"; + if (keys %$functions) + { + print "static GLboolean _glewInit_$extname ();\n"; + } + #print "#endif /* $extname */\n\n"; + } +} diff --git a/vendor/glew-cmake-2.2.0/auto/bin/make_list.pl b/vendor/glew-cmake-2.2.0/auto/bin/make_list.pl new file mode 100644 index 0000000..38aebcd --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/make_list.pl @@ -0,0 +1,75 @@ +#!/usr/bin/env perl +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +use lib '.'; +do 'bin/make.pl'; + +#--------------------------------------------------------------------------------------- + +# function pointer definition +sub make_init_call($%) +{ + my $name = prefixname($_[0]); + return " r = r || (" . $_[0] . " = (PFN" . (uc $_[0]) . "PROC)glewGetProcAddress(\"" . $name . "\")) == NULL;"; +} + +#--------------------------------------------------------------------------------------- + +my @extlist = (); +my %extensions = (); + +if (@ARGV) +{ + @extlist = @ARGV; + + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); + + my $extvar = $extname; + $extvar =~ s/GL(X*)_/GL$1EW_/; + + my $extpre = $extname; + $extpre =~ s/^(W?E?)GL(X?).*$/\l$1gl\l$2ew/; + + #my $pextvar = prefix_varname($extvar); + + if (length($extstring) && $extstring !~ /^GL_/ || keys %$functions) + { + print "#ifdef $extname\n"; + } + + if (length($extstring) && $extstring !~ /^GL_/) + { + print " " . $extvar . " = _glewSearchExtension(\"$extstring\", extStart, extEnd);\n"; + } + + if (keys %$functions) + { + if ($extname =~ /WGL_.*/) + { + print " if (glewExperimental || " . $extvar . "|| crippled) " . $extvar . "= !_glewInit_$extname();\n"; + } + else + { + print " if (glewExperimental || " . $extvar . ") " . $extvar . " = !_glewInit_$extname();\n"; + } + } + + if (length($extstring) && $extstring !~ /^GL_/ || keys %$functions) + { + print "#endif /* $extname */\n"; + } + } + +} diff --git a/vendor/glew-cmake-2.2.0/auto/bin/make_list2.pl b/vendor/glew-cmake-2.2.0/auto/bin/make_list2.pl new file mode 100644 index 0000000..3ded727 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/make_list2.pl @@ -0,0 +1,46 @@ +#!/usr/bin/env perl +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +use lib '.'; +do 'bin/make.pl'; + +#--------------------------------------------------------------------------------------- +# Extensions that depend on others can be enabled once we know +# if the one it depends on, is enabled. + +my @extlist = (); +my %extensions = (); + +if (@ARGV) +{ + @extlist = @ARGV; + + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); + + if ($extname ne $extstring && length($extstring)) + { + my $extvar = $extname; + $extvar =~ s/GL(X*)_/GL$1EW_/; + + my $parent = $extstring; + $parent =~ s/GL(X*)_/GL$1EW_/; + + print "#ifdef $extname\n"; + print " $extvar = $parent;\n"; + print "#endif /* $extname */\n"; + } + } + +} diff --git a/vendor/glew-cmake-2.2.0/auto/bin/make_str.pl b/vendor/glew-cmake-2.2.0/auto/bin/make_str.pl new file mode 100644 index 0000000..a6d7709 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/make_str.pl @@ -0,0 +1,55 @@ +#!/usr/bin/env perl +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +use lib '.'; +do 'bin/make.pl'; + +my @extlist = (); +my %extensions = (); + +if (@ARGV) +{ + @extlist = @ARGV; + + my $curexttype = ""; + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); + my $exttype = $extname; + $exttype =~ s/(W?E?)GL(X?)_(.*?_)(.*)/$3/; + my $extrem = $extname; + $extrem =~ s/(W?E?)GL(X?)_(.*?_)(.*)/$4/; + my $extvar = $extname; + $extvar =~ s/(W?E?)GL(X?)_/$1GL$2EW_/; + if(!($exttype =~ $curexttype)) + { + if(length($curexttype) > 0) + { + print " }\n"; + } + print " if (_glewStrSame2(&pos, &len, (const GLubyte*)\"$exttype\", " . length($exttype) . "))\n"; + print " {\n"; + $curexttype = $exttype; + } + print "#ifdef $extname\n"; + print " if (_glewStrSame3(&pos, &len, (const GLubyte*)\"$extrem\", ". length($extrem) . "))\n"; + #print " return $extvar;\n"; + print " {\n"; + print " ret = $extvar;\n"; + print " continue;\n"; + print " }\n"; + print "#endif\n"; + } + + print " }\n"; +} diff --git a/vendor/glew-cmake-2.2.0/auto/bin/make_struct_fun.pl b/vendor/glew-cmake-2.2.0/auto/bin/make_struct_fun.pl new file mode 100644 index 0000000..cc9eef5 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/make_struct_fun.pl @@ -0,0 +1,38 @@ +#!/usr/bin/env perl +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +use lib '.'; +do 'bin/make.pl'; + +# function pointer declaration +sub make_pfn_decl($%) +{ + our $export; + return $export . " PFN" . (uc $_[0]) . "PROC " . prefixname($_[0]) . ";"; +} + +my @extlist = (); +my %extensions = (); + +our $export = shift; + +if (@ARGV) +{ + @extlist = @ARGV; + + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); + output_decls($functions, \&make_pfn_decl); + } +} diff --git a/vendor/glew-cmake-2.2.0/auto/bin/make_struct_var.pl b/vendor/glew-cmake-2.2.0/auto/bin/make_struct_var.pl new file mode 100644 index 0000000..ab8b8b5 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/make_struct_var.pl @@ -0,0 +1,33 @@ +#!/usr/bin/env perl +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +use lib '.'; +do 'bin/make.pl'; + +my @extlist = (); +my %extensions = (); + +our $export = shift; + +if (@ARGV) +{ + @extlist = @ARGV; + + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); + my $extvar = $extname; + $extvar =~ s/GL(X*)_/GL$1EW_/; + print $export . " GLboolean " . prefix_varname($extvar) . ";\n"; + } +} diff --git a/vendor/glew-cmake-2.2.0/auto/bin/parse_spec.pl b/vendor/glew-cmake-2.2.0/auto/bin/parse_spec.pl new file mode 100644 index 0000000..5e12f60 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/parse_spec.pl @@ -0,0 +1,410 @@ +#!/usr/bin/env perl +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +sub compile_regex +{ + my $regex = join('', @_); + return qr/$regex/ +} + +my @sections = ( + "Name", + "Name Strings?", + "New Procedures and Functions", + "New Tokens.*", # Optional (GL/WGL/GLX/...) suffix + "Additions to Chapter.*", +); + +my %typemap = ( + bitfield => "GLbitfield", + boolean => "GLboolean", + # fsck up in EXT_vertex_array + Boolean => "GLboolean", + byte => "GLbyte", + clampd => "GLclampd", + clampf => "GLclampf", + double => "GLdouble", + enum => "GLenum", + # Intel fsck up + Glenum => "GLenum", + float => "GLfloat", + half => "GLhalf", + int => "GLint", + short => "GLshort", + sizei => "GLsizei", + ubyte => "GLubyte", + uint => "GLuint", + ushort => "GLushort", + DMbuffer => "void *", + # Nvidia video output fsck up + int64EXT => "GLint64EXT", + uint64EXT=> "GLuint64EXT", + + # ARB VBO introduces these. + + sizeiptr => "GLsizeiptr", + intptr => "GLintptr", + sizeiptrARB => "GLsizeiptrARB", + intptrARB => "GLintptrARB", + + # ARB shader objects introduces these, charARB is at least 8 bits, + # handleARB is at least 32 bits + charARB => "GLcharARB", + handleARB => "GLhandleARB", + + char => "GLchar", + + # OpenGL 3.2 and GL_ARB_sync + + int64 => "GLint64", + uint64 => "GLuint64", + sync => "GLsync", + + # GL_EXT_EGL_image_storage + + eglImageOES => "GLeglImageOES", + + # AMD_debug_output + + DEBUGPROCAMD => "GLDEBUGPROCAMD", + + # ARB_debug_output + + DEBUGPROCARB => "GLDEBUGPROCARB", + + # KHR_debug + + DEBUGPROC => "GLDEBUGPROC", + + VULKANPROCNV => "GLVULKANPROCNV", + + vdpauSurfaceNV => "GLvdpauSurfaceNV", + + # GLX 1.3 defines new types which might not be available at compile time + + #GLXFBConfig => "void*", + #GLXFBConfigID => "XID", + #GLXContextID => "XID", + #GLXWindow => "XID", + #GLXPbuffer => "XID", + + # Weird stuff to some SGIX extension + + #GLXFBConfigSGIX => "void*", + #GLXFBConfigIDSGIX => "XID", + +); + +my %voidtypemap = ( + void => "GLvoid", +); + +my %taboo_tokens = ( + GL_ZERO => 1, +); + +# list of function definitions to be ignored, unless they are being defined in +# the given spec. This is an ugly hack around the fact that people writing +# spec files seem to shut down all brain activity while they are at this task. +# +# This will be moved to its own file eventually. +# +# (mem, 2003-03-19) + +my %fnc_ignore_list = ( + "BindProgramARB" => "ARB_vertex_program", + "ColorSubTableEXT" => "EXT_color_subtable", + "DeleteProgramsARB" => "ARB_vertex_program", + "GenProgramsARB" => "ARB_vertex_program", + "GetProgramEnvParameterdvARB" => "ARB_vertex_program", + "GetProgramEnvParameterfvARB" => "ARB_vertex_program", + "GetProgramLocalParameterdvARB" => "ARB_vertex_program", + "GetProgramLocalParameterfvARB" => "ARB_vertex_program", + "GetProgramStringARB" => "ARB_vertex_program", + "GetProgramivARB" => "ARB_vertex_program", + "IsProgramARB" => "ARB_vertex_program", + "ProgramEnvParameter4dARB" => "ARB_vertex_program", + "ProgramEnvParameter4dvARB" => "ARB_vertex_program", + "ProgramEnvParameter4fARB" => "ARB_vertex_program", + "ProgramEnvParameter4fvARB" => "ARB_vertex_program", + "ProgramLocalParameter4dARB" => "ARB_vertex_program", + "ProgramLocalParameter4dvARB" => "ARB_vertex_program", + "ProgramLocalParameter4fARB" => "ARB_vertex_program", + "ProgramLocalParameter4fvARB" => "ARB_vertex_program", + "ProgramStringARB" => "ARB_vertex_program", + "EGLImageTargetTexture2DOES" => "OES_EGL_image", + "FramebufferTextureOES" => "GL_OES_geometry_shader", + "PatchParameteriOES" => "GL_OES_tessellation_shader", + "PointSizePointerOES" => "GL_OES_point_size_array", + "LockArraysEXT" => "EXT_compiled_vertex_array", + "UnlockArraysEXT" => "EXT_compiled_vertex_array", + "CoverageMaskNV" => "NV_coverage_sample", + "CoverageOperationNV" => "NV_coverage_sample", + "glXCreateContextAttribsARB" => "ARB_create_context_profile", + "wglCreateContextAttribsARB" => "WGL_ARB_create_context_profile", +); + +my %regex = ( + eofnc => qr/(?:\);?$|^$)/, # )$ | );$ | ^$ + extname => qr/^[A-Z][A-Za-z0-9_]+$/, + none => qr/^\(none\)$/, + function => qr/^(.+) ([a-z][a-z0-9_]*) \((.*)\)$/i, + prefix => qr/^(?:[aw]?gl|glX|egl)/, # gl | agl | wgl | glX + tprefix => qr/^(?:[AW]?GL|GLX|EGL)_/, # GL_ | AGL_ | WGL_ | GLX_ + section => compile_regex('^(', join('|', @sections), ')$'), # sections in spec + token => qr/^([A-Z0-9][A-Z0-9_x]*):?\s+((?:0x)?[0-9A-Fa-f]+(u(ll)?)?)(|\s[^\?]*)$/, # define tokens + types => compile_regex('\b(', join('|', keys %typemap), ')\b'), # var types + voidtype => compile_regex('\b(', keys %voidtypemap, ')\b '), # void type +); + +# reshapes the the function declaration from multiline to single line form +sub normalize_prototype +{ + local $_ = join(" ", @_); + s/\s+/ /g; # multiple whitespace -> single space + s/\<.*\>//g; # remove from direct state access extension + s/\<.*$//g; # remove incomplete from direct state access extension + s#/\*.*\*/##g; # remove /* ... */ comments + s/\s*\(\s*/ \(/; # exactly one space before ( and none after + s/\s*\)\s*/\)/; # no space before or after ) + s/\s*\*([a-zA-Z])/\* $1/; # "* identifier" + s/\*wgl/\* wgl/; # "* wgl" + s/\*glX/\* glX/; # "* glX" + s/\.\.\./void/; # ... -> void + s/;$//; # remove ; at the end of the line + return $_; +} + +# Ugly hack to work around the fact that functions are declared in more +# than one spec file. +sub ignore_function($$) +{ + return exists($fnc_ignore_list{$_[0]}) && $fnc_ignore_list{$_[0]} ne $_[1] +} + +sub parse_spec($) +{ + my $filename = shift; + my $extname = ""; + my $vendortag = ""; + my @extnames = (); + my %functions = (); + my %tokens = (); + + my $section = ""; + my @fnc = (); + + my %proc = ( + "Name" => sub { + if (/^([a-z0-9]+)_([a-z0-9_]+)/i) + { + $extname = "$1_$2"; + $vendortag = $1; + } + }, + + "Name Strings" => sub { + # Add extension name to extension list + + # Initially use $extname if (none) specified + if (/$regex{none}/) + { + $_ = $extname; + } + + if (/$regex{extname}/) + { + # prefix with "GL_" if prefix not present + s/^/GL_/ unless /$regex{tprefix}/o; + # Add extension name to extension list + push @extnames, $_; + } + }, + + "New Procedures and Functions" => sub { + # if line matches end of function + if (/$regex{eofnc}/) + { + # add line to function declaration + push @fnc, $_; + + # if normalized version of function looks like a function + if (normalize_prototype(@fnc) =~ /$regex{function}/) + { + # get return type, name, and arguments from regex + my ($return, $name, $parms) = ($1, $2, $3); + if (!ignore_function($name, $extname)) + { + # prefix with "gl" if prefix not present + $name =~ s/^/gl/ unless $name =~ /$regex{prefix}/; + # is this a pure GL function? + if ($name =~ /^gl/ && $name !~ /^glX/) + { + # apply typemaps + $return =~ s/$regex{types}/$typemap{$1}/og; + $return =~ s/GLvoid/void/og; + $return =~ s/void\*/void */og; + $parms =~ s/$regex{types}/$typemap{$1}/og; + $parms =~ s/$regex{voidtype}/$voidtypemap{$1}/og; + $parms =~ s/GLvoid/void/og; + $parms =~ s/ void\* / void */og; + if ($parms eq "") + { + $parms = "void"; # NVX_progress_fence and others + } + } + # add to functions hash + $functions{$name} = { + rtype => $return, + parms => $parms, + }; + } + } + # reset function declaration + @fnc = (); + } elsif ($_ ne "" and $_ ne "None") { + # if not eof, add line to function declaration + push @fnc, $_ + } + }, + + "New Tokens" => sub { + if (/$regex{token}/) + { + my ($name, $value) = ($1, $2); + # prefix with "GL_" if prefix not present + $name =~ s/^/GL_/ unless $name =~ /$regex{tprefix}/; + # Add (name, value) pair to tokens hash, unless it's taboo + $tokens{$name} = $value unless exists $taboo_tokens{$name}; + } + }, + ); + + # Some people can't read, the template clearly says "Name String_s_" + $proc{"Name String"} = $proc{"Name Strings"}; + + # Open spec file + open SPEC, "<$filename" or return; + + # For each line of SPEC + while() + { + # Delete trailing newline character + chomp; + # Remove trailing white spaces + s/\s+$//; + # If starts with a capital letter, it must be a new section + if (/^[A-Z]/) + { + # Match section name with one of the predefined names + $section = /$regex{section}/o ? $1 : "default"; + } else { + # Line is internal to a section + # Remove leading whitespace + s/^\s+//; + # Call appropriate section processing function if it exists + &{$proc{$section}} if exists $proc{$section}; + } + } + + close SPEC; + + return ($extname, \@extnames, \%tokens, \%functions); +} + +#---------------------------------------------------------------------------------------- + +my @speclist = (); +my %extensions = (); + +my $ext_dir = shift; +my $reg_http = "https://www.khronos.org/registry/OpenGL/extensions/"; + +# Take command line arguments or read list from file +if (@ARGV) +{ + @speclist = @ARGV; +} else { + local $/; #??? + @speclist = split "\n", (<>); +} + +foreach my $spec (sort @speclist) +{ + my ($extname, $extnames, $tokens, $functions) = parse_spec($spec); + + foreach my $ext (@{$extnames}) + { + my $info = "$ext_dir/" . $ext; + open EXT, ">$info"; + print EXT $ext . "\n"; # Extension name + my $specname = $spec; + $specname =~ s/OpenGL-Registry\/extensions\///; + print EXT $reg_http . $specname . "\n"; # Extension info URL + print EXT $ext . "\n"; # Extension string + print EXT "\n"; # Resuses nothing by default + + my $prefix = $ext; + $prefix =~ s/^(.+?)(_.+)$/$1/; + foreach my $token (sort { + if (${$tokens}{$a} eq ${$tokens}{$b}) { + $a cmp $b + } else { + if (${$tokens}{$a} =~ /_/) { + if (${$tokens}{$b} =~ /_/) { + $a cmp $b + } else { + -1 + } + } else { + if (${$tokens}{$b} =~ /_/) { + 1 + } else { + if (${$tokens}{$a} =~ /u(ll)?$/) { + if (${$tokens}{$b} =~ /u(ll)?$/) { + $a cmp $b + } else { + -1 + } + } else { + if (${$tokens}{$b} =~ /u(ll)?$/) { + 1 + } else { + if (hex ${$tokens}{$a} eq hex ${$tokens}{$b}) + { + $a cmp $b + } else { + hex ${$tokens}{$a} <=> hex ${$tokens}{$b} + } + } + } + } + } + } + } keys %{$tokens}) + { + if ($token =~ /^$prefix\_.*/i) + { + print EXT "\t" . $token . " " . ${\%{$tokens}}{$token} . "\n"; + } + } + foreach my $function (sort keys %{$functions}) + { + if ($function =~ /^$prefix.*/i) + { + print EXT "\t" . ${$functions}{$function}{rtype} . " " . $function . " (" . ${$functions}{$function}{parms} . ")" . "\n"; + } + } + close EXT; + } +} diff --git a/vendor/glew-cmake-2.2.0/auto/bin/parse_xml.py b/vendor/glew-cmake-2.2.0/auto/bin/parse_xml.py new file mode 100644 index 0000000..28ecb9f --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/parse_xml.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python + +import re +import sys +from xml.dom.minidom import parse, Node + +# +# DOM traversal utility functions +# + +def findChildren(node, path): + result = [] + if len(path)==1: + for i in node.childNodes: + if i.nodeType==Node.ELEMENT_NODE: + if i.tagName==path[0]: + result.append(i) + else: + for i in node.childNodes: + if i.nodeType==Node.ELEMENT_NODE: + if i.tagName==path[0]: + result.extend(findChildren(i, path[1:])) + return result + +def findData(node, path): + return [ i.firstChild.data for i in findChildren(node, path) ] + +isPointer = re.compile('(.*)([ ]+)([*]+)') + +def findParams(node): + n = findData(node, ['name'])[0] + t = '' + for i in node.childNodes: + if i.nodeType==Node.TEXT_NODE: + t += i.data + if i.nodeType==Node.ELEMENT_NODE and i.tagName=='ptype': + t += i.firstChild.data + + t.strip() + m = isPointer.match(t) + if m: + t = ('%s%s'%(m.group(1), m.group(3))).strip() + return ( t, n.strip()) + +def findEnums(dom): + return {i.getAttribute('name'): i.getAttribute('value') for i in findChildren(dom, [ 'registry', 'enums', 'enum' ])} + +def findCommands(dom): + ret = {} + for i in findChildren(dom, [ 'registry', 'commands', 'command' ]): + r,n = findParams(findChildren(i, ['proto'])[0]) + p = [ findParams(j) for j in findChildren(i, ['param'])] + ret[n] = (r, p) + return ret + +def findFeatures(dom): + ret = {} + for i in findChildren(dom, [ 'registry', 'feature' ]): + n = i.getAttribute('name') + e = [j.getAttribute("name") for j in findChildren(i, [ 'require', 'enum' ])] + c = [j.getAttribute("name") for j in findChildren(i, [ 'require', 'command' ])] + ret[n] = (e,c) + return ret + +def findExtensions(dom): + ret = {} + for i in findChildren(dom, [ 'registry', 'extensions', 'extension' ]): + n = i.getAttribute('name') + e = [j.getAttribute("name") for j in findChildren(i, [ 'require', 'enum' ])] + c = [j.getAttribute("name") for j in findChildren(i, [ 'require', 'command' ])] + ret[n] = (e,c) + return ret + +def findApi(dom, name): + enums = findEnums(dom) + commands = findCommands(dom) + features = findFeatures(dom) + extensions = findExtensions(dom) + return (enums, commands, features, extensions) + +# +# +# + +isWGL = re.compile('WGL_([A-Z0-9]+)_.*') + +def writeExtension(f, name, extension, enums, commands): + f.write(('%s\n'%name).encode()) + + url = 'https://www.khronos.org/registry/egl/specs/eglspec.1.5.pdf' + + m = isWGL.match(name) + if m: + url = 'https://www.khronos.org/registry/OpenGL/extensions/%s/%s.txt'%(m.group(1), name) + + f.write(('%s\n'%(url)).encode()) + + if name.find('_VERSION_')==-1: + f.write(('%s\n'%name).encode()) + else: + f.write('\n'.encode()) + f.write('\n'.encode()) + + enums = [ (j, enums[j]) for j in extension[0] ] + for e in sorted(enums, key=lambda i: i[1]): + f.write(('\t%s %s\n'%(e[0], e[1])).encode()) + + commands = [ (j, commands[j]) for j in extension[1] ] + for c in sorted(commands): + params = ', '.join( [ '%s %s'%(j[0].strip(), j[1].strip()) for j in c[1][1] ] ) + if len(params)==0: + params = 'void' + f.write(('\t%s %s (%s)\n'%(c[1][0].strip(), c[0].strip(), params)).encode()) + +if __name__ == '__main__': + + from argparse import ArgumentParser + import os + + parser = ArgumentParser(description='usage: %prog [options] [XML specs...]') + parser.add_argument("--core", dest="core", help="location for core outputs", default='') + parser.add_argument("--api", dest="name", help="API name: egl, wgl, glx, etc", default='') + parser.add_argument("--extensions", dest="extensions", help="location for extensions outputs", default='') + + (options, args) = parser.parse_known_args() + options = vars(options) + + for i in args: + + dom = parse(i) + api = findApi(dom, options['name']) + + print('Found {} enums, {} commands, {} features and {} extensions.'.format( + len(api[0]), len(api[1]), len(api[2]), len(api[3]))) + + if len(options['core']): + for i in api[2].keys(): + with open(os.path.join(options['core'], i), 'wb') as f: + writeExtension(f, i, api[2][i], api[0], api[1]) + + if len(options['extensions']): + for i in api[3].keys(): + with open(os.path.join(options['extensions'], i), 'wb') as f: + writeExtension(f, i, api[3][i], api[0], api[1]) + diff --git a/vendor/glew-cmake-2.2.0/auto/bin/update_ext.sh b/vendor/glew-cmake-2.2.0/auto/bin/update_ext.sh new file mode 100644 index 0000000..0ee3af1 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/bin/update_ext.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +## +## Copyright (C) 2008-2019, Nigel Stewart +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. +## +## Parameters: +## +## $1: Extensions directory +## $2: Registry directory +## $3: The black list + +set -e + +if [ ! -d $1 ] ; then + mkdir -p $1 + +# Parse each of the extensions in the registry + find $2 -name doc -type d -prune -o -name "*.txt" -print | \ + grep -v -f $3 | sort | bin/parse_spec.pl $1 + +fi diff --git a/vendor/glew-cmake-2.2.0/auto/blacklist b/vendor/glew-cmake-2.2.0/auto/blacklist new file mode 100644 index 0000000..6e57351 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/blacklist @@ -0,0 +1,27 @@ +EXT/draw_range_elements.txt +EXT/static_vertex_array.txt +EXT/vertex_array_set.alt.txt +EXT/vertex_array_set.txt +EXT/nurbs_tessellator.txt +EXT/object_space_tess.txt +SGI/filter4_parameters.txt +SGIS/SGIS_texture_color_mask.txt +SGIX/SGIX_dmbuffer.txt +SGIX/SGIX_instruments.txt +SGIX/SGIX_video_source.txt +SGIX/SGIX_hyperpipe_group.txt +OES/OES_fixed_point.txt +OES/OES_query_matrix.txt +IMG/IMG_user_clip_plane.txt +NV/NV_query_resource.txt +NV/EGL_NV_coverage_sample.txt +OES/OES_draw_elements_base_vertex.txt +OES/OES_viewport_array.txt +OES/EGL_KHR_fence_sync.txt +EXT/EXT_texenv_op.txt +EXT/EXT_transform_feedback2.txt +EXT/EXT_vertex_array_set.txt +EXT/EXT_separate_shader_objects.gles.txt +IGLOO/IGLOO_swap_triangle_strip_vertex_pointerXXX.txt +IGLOO/IGLOO_viewport_offsetXXX.txt +IGLOO/IGLOO_toggle_color_and_lightXXX.txt diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_EXT_device_base b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_EXT_device_base new file mode 100644 index 0000000..fa1d2e1 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_EXT_device_base @@ -0,0 +1,7 @@ +EGL_EXT_device_base +https://www.khronos.org/registry/egl/specs/eglspec.1.5.pdf +EGL_EXT_device_base + + EGL_BAD_DEVICE_EXT 0x322B + EGL_DEVICE_EXT 0x322C + EGL_NO_DEVICE_EXT EGL_CAST(EGLDeviceEXT,0) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_KHR_fence_sync b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_KHR_fence_sync new file mode 100644 index 0000000..398b292 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_KHR_fence_sync @@ -0,0 +1,7 @@ +EGL_KHR_fence_sync +https://www.khronos.org/registry/egl/specs/eglspec.1.5.pdf +EGL_KHR_fence_sync + + EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0 + EGL_SYNC_CONDITION_KHR 0x30F8 + EGL_SYNC_FENCE_KHR 0x30F9 diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_KHR_image_base b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_KHR_image_base new file mode 100644 index 0000000..dd38a6c --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_KHR_image_base @@ -0,0 +1,6 @@ +EGL_KHR_image_base +https://www.khronos.org/registry/egl/specs/eglspec.1.5.pdf +EGL_KHR_image_base + + EGL_IMAGE_PRESERVED_KHR 0x30D2 + EGL_NO_IMAGE_KHR EGL_CAST(EGLImageKHR,0) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_KHR_lock_surface3 b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_KHR_lock_surface3 new file mode 100644 index 0000000..4c0e13a --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_KHR_lock_surface3 @@ -0,0 +1,27 @@ +EGL_KHR_lock_surface3 +https://www.khronos.org/registry/egl/specs/eglspec.1.5.pdf +EGL_KHR_lock_surface3 + + EGL_READ_SURFACE_BIT_KHR 0x0001 + EGL_WRITE_SURFACE_BIT_KHR 0x0002 + EGL_LOCK_SURFACE_BIT_KHR 0x0080 + EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100 + EGL_MATCH_FORMAT_KHR 0x3043 + EGL_FORMAT_RGB_565_EXACT_KHR 0x30C0 + EGL_FORMAT_RGB_565_KHR 0x30C1 + EGL_FORMAT_RGBA_8888_EXACT_KHR 0x30C2 + EGL_FORMAT_RGBA_8888_KHR 0x30C3 + EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4 + EGL_LOCK_USAGE_HINT_KHR 0x30C5 + EGL_BITMAP_POINTER_KHR 0x30C6 + EGL_BITMAP_PITCH_KHR 0x30C7 + EGL_BITMAP_ORIGIN_KHR 0x30C8 + EGL_BITMAP_PIXEL_RED_OFFSET_KHR 0x30C9 + EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA + EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR 0x30CB + EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC + EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD + EGL_LOWER_LEFT_KHR 0x30CE + EGL_UPPER_LEFT_KHR 0x30CF + EGL_BITMAP_PIXEL_SIZE_KHR 0x3110 + EGLBoolean eglQuerySurface64KHR (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR * value) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_0 b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_0 new file mode 100644 index 0000000..ef48e74 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_0 @@ -0,0 +1,86 @@ +EGL_VERSION_1_0 +https://www.khronos.org/registry/egl/specs/eglspec.1.5.pdf + + + EGL_FALSE 0 + EGL_PBUFFER_BIT 0x0001 + EGL_PIXMAP_BIT 0x0002 + EGL_WINDOW_BIT 0x0004 + EGL_SUCCESS 0x3000 + EGL_NOT_INITIALIZED 0x3001 + EGL_BAD_ACCESS 0x3002 + EGL_BAD_ALLOC 0x3003 + EGL_BAD_ATTRIBUTE 0x3004 + EGL_BAD_CONFIG 0x3005 + EGL_BAD_CONTEXT 0x3006 + EGL_BAD_CURRENT_SURFACE 0x3007 + EGL_BAD_DISPLAY 0x3008 + EGL_BAD_MATCH 0x3009 + EGL_BAD_NATIVE_PIXMAP 0x300A + EGL_BAD_NATIVE_WINDOW 0x300B + EGL_BAD_PARAMETER 0x300C + EGL_BAD_SURFACE 0x300D + EGL_BUFFER_SIZE 0x3020 + EGL_ALPHA_SIZE 0x3021 + EGL_BLUE_SIZE 0x3022 + EGL_GREEN_SIZE 0x3023 + EGL_RED_SIZE 0x3024 + EGL_DEPTH_SIZE 0x3025 + EGL_STENCIL_SIZE 0x3026 + EGL_CONFIG_CAVEAT 0x3027 + EGL_CONFIG_ID 0x3028 + EGL_LEVEL 0x3029 + EGL_MAX_PBUFFER_HEIGHT 0x302A + EGL_MAX_PBUFFER_PIXELS 0x302B + EGL_MAX_PBUFFER_WIDTH 0x302C + EGL_NATIVE_RENDERABLE 0x302D + EGL_NATIVE_VISUAL_ID 0x302E + EGL_NATIVE_VISUAL_TYPE 0x302F + EGL_SAMPLES 0x3031 + EGL_SAMPLE_BUFFERS 0x3032 + EGL_SURFACE_TYPE 0x3033 + EGL_TRANSPARENT_TYPE 0x3034 + EGL_TRANSPARENT_BLUE_VALUE 0x3035 + EGL_TRANSPARENT_GREEN_VALUE 0x3036 + EGL_TRANSPARENT_RED_VALUE 0x3037 + EGL_NONE 0x3038 + EGL_SLOW_CONFIG 0x3050 + EGL_NON_CONFORMANT_CONFIG 0x3051 + EGL_TRANSPARENT_RGB 0x3052 + EGL_VENDOR 0x3053 + EGL_VERSION 0x3054 + EGL_EXTENSIONS 0x3055 + EGL_HEIGHT 0x3056 + EGL_WIDTH 0x3057 + EGL_LARGEST_PBUFFER 0x3058 + EGL_DRAW 0x3059 + EGL_READ 0x305A + EGL_CORE_NATIVE_ENGINE 0x305B + EGL_TRUE 1 + EGL_NO_CONTEXT EGL_CAST(EGLContext,0) + EGL_NO_DISPLAY EGL_CAST(EGLDisplay,0) + EGL_NO_SURFACE EGL_CAST(EGLSurface,0) + EGL_DONT_CARE EGL_CAST(EGLint,-1) + EGLBoolean eglChooseConfig (EGLDisplay dpy, const EGLint * attrib_list, EGLConfig * configs, EGLint config_size, EGLint * num_config) + EGLBoolean eglCopyBuffers (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target) + EGLContext eglCreateContext (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint * attrib_list) + EGLSurface eglCreatePbufferSurface (EGLDisplay dpy, EGLConfig config, const EGLint * attrib_list) + EGLSurface eglCreatePixmapSurface (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint * attrib_list) + EGLSurface eglCreateWindowSurface (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint * attrib_list) + EGLBoolean eglDestroyContext (EGLDisplay dpy, EGLContext ctx) + EGLBoolean eglDestroySurface (EGLDisplay dpy, EGLSurface surface) + EGLBoolean eglGetConfigAttrib (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint * value) + EGLBoolean eglGetConfigs (EGLDisplay dpy, EGLConfig * configs, EGLint config_size, EGLint * num_config) + EGLDisplay eglGetCurrentDisplay ( void ) + EGLSurface eglGetCurrentSurface (EGLint readdraw) + EGLDisplay eglGetDisplay (EGLNativeDisplayType display_id) + EGLint eglGetError ( void ) + EGLBoolean eglInitialize (EGLDisplay dpy, EGLint * major, EGLint * minor) + EGLBoolean eglMakeCurrent (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx) + EGLBoolean eglQueryContext (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint * value) + const char * eglQueryString (EGLDisplay dpy, EGLint name) + EGLBoolean eglQuerySurface (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint * value) + EGLBoolean eglSwapBuffers (EGLDisplay dpy, EGLSurface surface) + EGLBoolean eglTerminate (EGLDisplay dpy) + EGLBoolean eglWaitGL ( void ) + EGLBoolean eglWaitNative (EGLint engine) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_1 b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_1 new file mode 100644 index 0000000..550dc24 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_1 @@ -0,0 +1,22 @@ +EGL_VERSION_1_1 +https://www.khronos.org/registry/egl/specs/eglspec.1.5.pdf + + + EGL_CONTEXT_LOST 0x300E + EGL_BIND_TO_TEXTURE_RGB 0x3039 + EGL_BIND_TO_TEXTURE_RGBA 0x303A + EGL_MIN_SWAP_INTERVAL 0x303B + EGL_MAX_SWAP_INTERVAL 0x303C + EGL_NO_TEXTURE 0x305C + EGL_TEXTURE_RGB 0x305D + EGL_TEXTURE_RGBA 0x305E + EGL_TEXTURE_2D 0x305F + EGL_TEXTURE_FORMAT 0x3080 + EGL_TEXTURE_TARGET 0x3081 + EGL_MIPMAP_TEXTURE 0x3082 + EGL_MIPMAP_LEVEL 0x3083 + EGL_BACK_BUFFER 0x3084 + EGLBoolean eglBindTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer) + EGLBoolean eglReleaseTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer) + EGLBoolean eglSurfaceAttrib (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value) + EGLBoolean eglSwapInterval (EGLDisplay dpy, EGLint interval) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_2 b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_2 new file mode 100644 index 0000000..e5a3a38 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_2 @@ -0,0 +1,38 @@ +EGL_VERSION_1_2 +https://www.khronos.org/registry/egl/specs/eglspec.1.5.pdf + + + EGL_OPENGL_ES_BIT 0x0001 + EGL_OPENVG_BIT 0x0002 + EGL_LUMINANCE_SIZE 0x303D + EGL_ALPHA_MASK_SIZE 0x303E + EGL_COLOR_BUFFER_TYPE 0x303F + EGL_RENDERABLE_TYPE 0x3040 + EGL_SINGLE_BUFFER 0x3085 + EGL_RENDER_BUFFER 0x3086 + EGL_COLORSPACE 0x3087 + EGL_ALPHA_FORMAT 0x3088 + EGL_COLORSPACE_sRGB 0x3089 + EGL_COLORSPACE_LINEAR 0x308A + EGL_ALPHA_FORMAT_NONPRE 0x308B + EGL_ALPHA_FORMAT_PRE 0x308C + EGL_CLIENT_APIS 0x308D + EGL_RGB_BUFFER 0x308E + EGL_LUMINANCE_BUFFER 0x308F + EGL_HORIZONTAL_RESOLUTION 0x3090 + EGL_VERTICAL_RESOLUTION 0x3091 + EGL_PIXEL_ASPECT_RATIO 0x3092 + EGL_SWAP_BEHAVIOR 0x3093 + EGL_BUFFER_PRESERVED 0x3094 + EGL_BUFFER_DESTROYED 0x3095 + EGL_OPENVG_IMAGE 0x3096 + EGL_CONTEXT_CLIENT_TYPE 0x3097 + EGL_OPENGL_ES_API 0x30A0 + EGL_OPENVG_API 0x30A1 + EGL_DISPLAY_SCALING 10000 + EGL_UNKNOWN EGL_CAST(EGLint,-1) + EGLBoolean eglBindAPI (EGLenum api) + EGLSurface eglCreatePbufferFromClientBuffer (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint * attrib_list) + EGLenum eglQueryAPI ( void ) + EGLBoolean eglReleaseThread ( void ) + EGLBoolean eglWaitClient ( void ) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_3 b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_3 new file mode 100644 index 0000000..de1d34d --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_3 @@ -0,0 +1,16 @@ +EGL_VERSION_1_3 +https://www.khronos.org/registry/egl/specs/eglspec.1.5.pdf + + + EGL_OPENGL_ES2_BIT 0x0004 + EGL_VG_COLORSPACE_LINEAR_BIT 0x0020 + EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040 + EGL_MATCH_NATIVE_PIXMAP 0x3041 + EGL_CONFORMANT 0x3042 + EGL_VG_COLORSPACE 0x3087 + EGL_VG_ALPHA_FORMAT 0x3088 + EGL_VG_COLORSPACE_sRGB 0x3089 + EGL_VG_COLORSPACE_LINEAR 0x308A + EGL_VG_ALPHA_FORMAT_NONPRE 0x308B + EGL_VG_ALPHA_FORMAT_PRE 0x308C + EGL_CONTEXT_CLIENT_VERSION 0x3098 diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_4 b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_4 new file mode 100644 index 0000000..d8c71d3 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_4 @@ -0,0 +1,13 @@ +EGL_VERSION_1_4 +https://www.khronos.org/registry/egl/specs/eglspec.1.5.pdf + + + EGL_OPENGL_BIT 0x0008 + EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 + EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 + EGL_MULTISAMPLE_RESOLVE 0x3099 + EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A + EGL_MULTISAMPLE_RESOLVE_BOX 0x309B + EGL_OPENGL_API 0x30A2 + EGL_DEFAULT_DISPLAY EGL_CAST(EGLNativeDisplayType,0) + EGLContext eglGetCurrentContext ( void ) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_5 b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_5 new file mode 100644 index 0000000..b436fdf --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/EGL_VERSION_1_5 @@ -0,0 +1,59 @@ +EGL_VERSION_1_5 +https://www.khronos.org/registry/egl/specs/eglspec.1.5.pdf + + + EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001 + EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002 + EGL_OPENGL_ES3_BIT 0x00000040 + EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001 + EGL_GL_COLORSPACE_SRGB 0x3089 + EGL_GL_COLORSPACE_LINEAR 0x308A + EGL_CONTEXT_MAJOR_VERSION 0x3098 + EGL_CL_EVENT_HANDLE 0x309C + EGL_GL_COLORSPACE 0x309D + EGL_GL_TEXTURE_2D 0x30B1 + EGL_GL_TEXTURE_3D 0x30B2 + EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3 + EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4 + EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5 + EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6 + EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7 + EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8 + EGL_GL_RENDERBUFFER 0x30B9 + EGL_GL_TEXTURE_LEVEL 0x30BC + EGL_GL_TEXTURE_ZOFFSET 0x30BD + EGL_IMAGE_PRESERVED 0x30D2 + EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0 + EGL_SYNC_STATUS 0x30F1 + EGL_SIGNALED 0x30F2 + EGL_UNSIGNALED 0x30F3 + EGL_TIMEOUT_EXPIRED 0x30F5 + EGL_CONDITION_SATISFIED 0x30F6 + EGL_SYNC_TYPE 0x30F7 + EGL_SYNC_CONDITION 0x30F8 + EGL_SYNC_FENCE 0x30F9 + EGL_CONTEXT_MINOR_VERSION 0x30FB + EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD + EGL_SYNC_CL_EVENT 0x30FE + EGL_SYNC_CL_EVENT_COMPLETE 0x30FF + EGL_CONTEXT_OPENGL_DEBUG 0x31B0 + EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1 + EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2 + EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2 + EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD + EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD + EGL_NO_RESET_NOTIFICATION 0x31BE + EGL_LOSE_CONTEXT_ON_RESET 0x31BF + EGL_FOREVER 0xFFFFFFFFFFFFFFFF + EGL_NO_IMAGE EGL_CAST(EGLImage,0) + EGL_NO_SYNC EGL_CAST(EGLSync,0) + EGLint eglClientWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout) + EGLImage eglCreateImage (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib * attrib_list) + EGLSurface eglCreatePlatformPixmapSurface (EGLDisplay dpy, EGLConfig config, void * native_pixmap, const EGLAttrib * attrib_list) + EGLSurface eglCreatePlatformWindowSurface (EGLDisplay dpy, EGLConfig config, void * native_window, const EGLAttrib * attrib_list) + EGLSync eglCreateSync (EGLDisplay dpy, EGLenum type, const EGLAttrib * attrib_list) + EGLBoolean eglDestroyImage (EGLDisplay dpy, EGLImage image) + EGLBoolean eglDestroySync (EGLDisplay dpy, EGLSync sync) + EGLDisplay eglGetPlatformDisplay (EGLenum platform, void * native_display, const EGLAttrib * attrib_list) + EGLBoolean eglGetSyncAttrib (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib * value) + EGLBoolean eglWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_ARB_get_proc_address b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_ARB_get_proc_address new file mode 100644 index 0000000..e2cb2c5 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_ARB_get_proc_address @@ -0,0 +1,5 @@ +GLX_ARB_get_proc_address +http://oss.sgi.com/projects/ogl-sample/registry/ARB/get_proc_address.txt +GLX_ARB_get_proc_address + + extern void ( * glXGetProcAddressARB (const GLubyte *procName)) (void); diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_ATI_pixel_format_float b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_ATI_pixel_format_float new file mode 100644 index 0000000..5336da4 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_ATI_pixel_format_float @@ -0,0 +1,5 @@ +GLX_ATI_pixel_format_float + +GLX_ATI_pixel_format_float + + GLX_RGBA_FLOAT_ATI_BIT 0x00000100 diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_ATI_render_texture b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_ATI_render_texture new file mode 100644 index 0000000..6b35814 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_ATI_render_texture @@ -0,0 +1,42 @@ +GLX_ATI_render_texture + +GLX_ATI_render_texture + + GLX_BIND_TO_TEXTURE_RGB_ATI 0x9800 + GLX_BIND_TO_TEXTURE_RGBA_ATI 0x9801 + GLX_TEXTURE_FORMAT_ATI 0x9802 + GLX_TEXTURE_TARGET_ATI 0x9803 + GLX_MIPMAP_TEXTURE_ATI 0x9804 + GLX_TEXTURE_RGB_ATI 0x9805 + GLX_TEXTURE_RGBA_ATI 0x9806 + GLX_NO_TEXTURE_ATI 0x9807 + GLX_TEXTURE_CUBE_MAP_ATI 0x9808 + GLX_TEXTURE_1D_ATI 0x9809 + GLX_TEXTURE_2D_ATI 0x980A + GLX_MIPMAP_LEVEL_ATI 0x980B + GLX_CUBE_MAP_FACE_ATI 0x980C + GLX_TEXTURE_CUBE_MAP_POSITIVE_X_ATI 0x980D + GLX_TEXTURE_CUBE_MAP_NEGATIVE_X_ATI 0x980E + GLX_TEXTURE_CUBE_MAP_POSITIVE_Y_ATI 0x980F + GLX_TEXTURE_CUBE_MAP_NEGATIVE_Y_ATI 0x9810 + GLX_TEXTURE_CUBE_MAP_POSITIVE_Z_ATI 0x9811 + GLX_TEXTURE_CUBE_MAP_NEGATIVE_Z_ATI 0x9812 + GLX_FRONT_LEFT_ATI 0x9813 + GLX_FRONT_RIGHT_ATI 0x9814 + GLX_BACK_LEFT_ATI 0x9815 + GLX_BACK_RIGHT_ATI 0x9816 + GLX_AUX0_ATI 0x9817 + GLX_AUX1_ATI 0x9818 + GLX_AUX2_ATI 0x9819 + GLX_AUX3_ATI 0x981A + GLX_AUX4_ATI 0x981B + GLX_AUX5_ATI 0x981C + GLX_AUX6_ATI 0x981D + GLX_AUX7_ATI 0x981E + GLX_AUX8_ATI 0x981F + GLX_AUX9_ATI 0x9820 + GLX_BIND_TO_TEXTURE_LUMINANCE_ATI 0x9821 + GLX_BIND_TO_TEXTURE_INTENSITY_ATI 0x9822 + void glXBindTexImageATI (Display *dpy, GLXPbuffer pbuf, int buffer) + void glXReleaseTexImageATI (Display *dpy, GLXPbuffer pbuf, int buffer) + void glXDrawableAttribATI (Display *dpy, GLXDrawable draw, const int *attrib_list) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_EXT_scene_marker b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_EXT_scene_marker new file mode 100644 index 0000000..064caac --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_EXT_scene_marker @@ -0,0 +1,4 @@ +GLX_EXT_scene_marker +https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_scene_marker.txt +GLX_EXT_scene_marker + diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_NV_vertex_array_range b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_NV_vertex_array_range new file mode 100644 index 0000000..9250ec2 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_NV_vertex_array_range @@ -0,0 +1,6 @@ +GLX_NV_vertex_array_range +http://oss.sgi.com/projects/ogl-sample/registry/NV/vertex_array_range.txt +GLX_NV_vertex_array_range + + void * glXAllocateMemoryNV (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority) + void glXFreeMemoryNV (void *pointer) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_SGIS_color_range b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_SGIS_color_range new file mode 100644 index 0000000..9286cff --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_SGIS_color_range @@ -0,0 +1,4 @@ +GLX_SGIS_color_range +https://www.khronos.org/registry/OpenGL/extensions/SGIS/GLX_SGIS_color_range.txt +GLX_SGIS_color_range + diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_SGIX_hyperpipe b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_SGIX_hyperpipe new file mode 100644 index 0000000..80fd7d6 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_SGIX_hyperpipe @@ -0,0 +1,26 @@ +GLX_SGIX_hyperpipe +http://oss.sgi.com/projects/ogl-sample/registry/SGIX/hyperpipe_group.txt +GLX_SGIX_hyperpipe + + GLX_HYPERPIPE_ID_SGIX 0x8030 + GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 + GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 + GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002 + GLX_PIPE_RECT_SGIX 0x00000001 + GLX_PIPE_RECT_LIMITS_SGIX 0x00000002 + GLX_HYPERPIPE_STEREO_SGIX 0x00000003 + GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004 + GLX_BAD_HYPERPIPE_CONFIG_SGIX 91 + GLX_BAD_HYPERPIPE_SGIX 92 + typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int networkId; } GLXHyperpipeNetworkSGIX; + typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int channel; unsigned int participationType; int timeSlice; } GLXHyperpipeConfigSGIX; + typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int srcXOrigin; int srcYOrigin; int srcWidth; int srcHeight; int destXOrigin; int destYOrigin; int destWidth; int destHeight; } GLXPipeRect; + typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int XOrigin; int YOrigin; int maxHeight; int maxWidth; } GLXPipeRectLimits; + GLXHyperpipeNetworkSGIX * glXQueryHyperpipeNetworkSGIX (Display *dpy, int *npipes) + int glXHyperpipeConfigSGIX (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId) + GLXHyperpipeConfigSGIX * glXQueryHyperpipeConfigSGIX (Display *dpy, int hpId, int *npipes) + int glXDestroyHyperpipeConfigSGIX (Display *dpy, int hpId) + int glXBindHyperpipeSGIX (Display *dpy, int hpId) + int glXQueryHyperpipeBestAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList) + int glXHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList) + int glXQueryHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_SUN_video_resize b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_SUN_video_resize new file mode 100644 index 0000000..3a5a176 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_SUN_video_resize @@ -0,0 +1,8 @@ +GLX_SUN_video_resize +http://wwws.sun.com/software/graphics/opengl/extensions/glx_sun_video_resize.txt +GLX_SUN_video_resize + + GL_VIDEO_RESIZE_COMPENSATION_SUN 0x85CD + GLX_VIDEO_RESIZE_SUN 0x8171 + int glXVideoResizeSUN (Display* display, GLXDrawable window, float factor) + int glXGetVideoResizeSUN (Display* display, GLXDrawable window, float* factor) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_VERSION_1_2 b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_VERSION_1_2 new file mode 100644 index 0000000..8a12e84 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_VERSION_1_2 @@ -0,0 +1,5 @@ +GLX_VERSION_1_2 +http://www.opengl.org/documentation/specs/glx/glx1.2.ps +GLX_VERSION_1_2 + + Display* glXGetCurrentDisplay (void) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_VERSION_1_3 b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_VERSION_1_3 new file mode 100644 index 0000000..1cf24be --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_VERSION_1_3 @@ -0,0 +1,83 @@ +GLX_VERSION_1_3 +http://www.opengl.org/documentation/specs/glx/glx1.3.pdf +GLX_VERSION_1_3 + + GLX_WINDOW_BIT 0x00000001 + GLX_PIXMAP_BIT 0x00000002 + GLX_PBUFFER_BIT 0x00000004 + GLX_RGBA_BIT 0x00000001 + GLX_COLOR_INDEX_BIT 0x00000002 + GLX_PBUFFER_CLOBBER_MASK 0x08000000 + GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 + GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 + GLX_BACK_LEFT_BUFFER_BIT 0x00000004 + GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 + GLX_AUX_BUFFERS_BIT 0x00000010 + GLX_DEPTH_BUFFER_BIT 0x00000020 + GLX_STENCIL_BUFFER_BIT 0x00000040 + GLX_ACCUM_BUFFER_BIT 0x00000080 + GLX_CONFIG_CAVEAT 0x20 + GLX_X_VISUAL_TYPE 0x22 + GLX_TRANSPARENT_TYPE 0x23 + GLX_TRANSPARENT_INDEX_VALUE 0x24 + GLX_TRANSPARENT_RED_VALUE 0x25 + GLX_TRANSPARENT_GREEN_VALUE 0x26 + GLX_TRANSPARENT_BLUE_VALUE 0x27 + GLX_TRANSPARENT_ALPHA_VALUE 0x28 + GLX_DONT_CARE 0xFFFFFFFF + GLX_NONE 0x8000 + GLX_SLOW_CONFIG 0x8001 + GLX_TRUE_COLOR 0x8002 + GLX_DIRECT_COLOR 0x8003 + GLX_PSEUDO_COLOR 0x8004 + GLX_STATIC_COLOR 0x8005 + GLX_GRAY_SCALE 0x8006 + GLX_STATIC_GRAY 0x8007 + GLX_TRANSPARENT_RGB 0x8008 + GLX_TRANSPARENT_INDEX 0x8009 + GLX_VISUAL_ID 0x800B + GLX_SCREEN 0x800C + GLX_NON_CONFORMANT_CONFIG 0x800D + GLX_DRAWABLE_TYPE 0x8010 + GLX_RENDER_TYPE 0x8011 + GLX_X_RENDERABLE 0x8012 + GLX_FBCONFIG_ID 0x8013 + GLX_RGBA_TYPE 0x8014 + GLX_COLOR_INDEX_TYPE 0x8015 + GLX_MAX_PBUFFER_WIDTH 0x8016 + GLX_MAX_PBUFFER_HEIGHT 0x8017 + GLX_MAX_PBUFFER_PIXELS 0x8018 + GLX_PRESERVED_CONTENTS 0x801B + GLX_LARGEST_PBUFFER 0x801C + GLX_WIDTH 0x801D + GLX_HEIGHT 0x801E + GLX_EVENT_MASK 0x801F + GLX_DAMAGED 0x8020 + GLX_SAVED 0x8021 + GLX_WINDOW 0x8022 + GLX_PBUFFER 0x8023 + GLX_PBUFFER_HEIGHT 0x8040 + GLX_PBUFFER_WIDTH 0x8041 + GLXFBConfig* glXChooseFBConfig (Display *dpy, int screen, const int *attrib_list, int *nelements) + GLXFBConfig* glXGetFBConfigs (Display *dpy, int screen, int *nelements) + XVisualInfo* glXGetVisualFromFBConfig (Display *dpy, GLXFBConfig config) + int glXGetFBConfigAttrib (Display *dpy, GLXFBConfig config, int attribute, int *value) + GLXWindow glXCreateWindow (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list) + void glXDestroyWindow (Display *dpy, GLXWindow win) + GLXPixmap glXCreatePixmap (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list) + void glXDestroyPixmap (Display *dpy, GLXPixmap pixmap) + GLXPbuffer glXCreatePbuffer (Display *dpy, GLXFBConfig config, const int *attrib_list) + void glXDestroyPbuffer (Display *dpy, GLXPbuffer pbuf) + void glXQueryDrawable (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value) + GLXContext glXCreateNewContext (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct) + Bool glXMakeContextCurrent (Display *display, GLXDrawable draw, GLXDrawable read, GLXContext ctx) + GLXDrawable glXGetCurrentReadDrawable (void) + int glXQueryContext (Display *dpy, GLXContext ctx, int attribute, int *value) + void glXSelectEvent (Display *dpy, GLXDrawable draw, unsigned long event_mask) + void glXGetSelectedEvent (Display *dpy, GLXDrawable draw, unsigned long *event_mask) + typedef XID GLXWindow + typedef XID GLXPbuffer + typedef XID GLXFBConfigID + typedef struct __GLXFBConfigRec *GLXFBConfig + typedef struct { int event_type; int draw_type; unsigned long serial; Bool send_event; Display *display; GLXDrawable drawable; unsigned int buffer_mask; unsigned int aux_buffer; int x, y; int width, height; int count; } GLXPbufferClobberEvent; + typedef union __GLXEvent { GLXPbufferClobberEvent glxpbufferclobber; long pad[24]; } GLXEvent; diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_VERSION_1_4 b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_VERSION_1_4 new file mode 100644 index 0000000..9b9de3e --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GLX_VERSION_1_4 @@ -0,0 +1,7 @@ +GLX_VERSION_1_4 +http://www.opengl.org/documentation/specs/glx/glx1.4.pdf +GLX_VERSION_1_4 + + GLX_SAMPLE_BUFFERS 100000 + GLX_SAMPLES 100001 + extern void ( * glXGetProcAddress (const GLubyte *procName)) (void); diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_APPLE_float_pixels b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_APPLE_float_pixels new file mode 100644 index 0000000..3eacd42 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_APPLE_float_pixels @@ -0,0 +1,18 @@ +GL_APPLE_float_pixels +http://www.opengl.org/registry/specs/APPLE/float_pixels.txt +GL_APPLE_float_pixels + + GL_HALF_APPLE 0x140B + GL_COLOR_FLOAT_APPLE 0x8A0F + GL_RGBA_FLOAT32_APPLE 0x8814 + GL_RGB_FLOAT32_APPLE 0x8815 + GL_ALPHA_FLOAT32_APPLE 0x8816 + GL_INTENSITY_FLOAT32_APPLE 0x8817 + GL_LUMINANCE_FLOAT32_APPLE 0x8818 + GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 + GL_RGBA_FLOAT16_APPLE 0x881A + GL_RGB_FLOAT16_APPLE 0x881B + GL_ALPHA_FLOAT16_APPLE 0x881C + GL_INTENSITY_FLOAT16_APPLE 0x881D + GL_LUMINANCE_FLOAT16_APPLE 0x881E + GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_APPLE_pixel_buffer b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_APPLE_pixel_buffer new file mode 100644 index 0000000..1a8ad97 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_APPLE_pixel_buffer @@ -0,0 +1,5 @@ +GL_APPLE_pixel_buffer + +GL_APPLE_pixel_buffer + + GL_MIN_PBUFFER_VIEWPORT_DIMS_APPLE 0x8A10 diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_APPLE_texture_range b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_APPLE_texture_range new file mode 100644 index 0000000..e2bf85c --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_APPLE_texture_range @@ -0,0 +1,13 @@ +GL_APPLE_texture_range +http://www.opengl.org/registry/specs/APPLE/texture_range.txt +GL_APPLE_texture_range + + GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC + GL_STORAGE_PRIVATE_APPLE 0x85BD + GL_STORAGE_CACHED_APPLE 0x85BE + GL_STORAGE_SHARED_APPLE 0x85BF + GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 + GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 + void glTextureRangeAPPLE (GLenum target, GLsizei length, void *pointer) + void glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, void **params) + diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_draw_instanced b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_draw_instanced new file mode 100644 index 0000000..a730952 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_draw_instanced @@ -0,0 +1,4 @@ +GL_ARB_draw_instanced +http://www.opengl.org/registry/specs/ARB/draw_instanced.txt +GL_ARB_draw_instanced + diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_imaging b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_imaging new file mode 100644 index 0000000..727adf0 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_imaging @@ -0,0 +1,113 @@ +GL_ARB_imaging + +GL_ARB_imaging + + GL_CONSTANT_COLOR 0x8001 + GL_ONE_MINUS_CONSTANT_COLOR 0x8002 + GL_CONSTANT_ALPHA 0x8003 + GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 + GL_BLEND_COLOR 0x8005 + GL_FUNC_ADD 0x8006 + GL_MIN 0x8007 + GL_MAX 0x8008 + GL_BLEND_EQUATION 0x8009 + GL_FUNC_SUBTRACT 0x800A + GL_FUNC_REVERSE_SUBTRACT 0x800B + GL_CONVOLUTION_1D 0x8010 + GL_CONVOLUTION_2D 0x8011 + GL_SEPARABLE_2D 0x8012 + GL_CONVOLUTION_BORDER_MODE 0x8013 + GL_CONVOLUTION_FILTER_SCALE 0x8014 + GL_CONVOLUTION_FILTER_BIAS 0x8015 + GL_REDUCE 0x8016 + GL_CONVOLUTION_FORMAT 0x8017 + GL_CONVOLUTION_WIDTH 0x8018 + GL_CONVOLUTION_HEIGHT 0x8019 + GL_MAX_CONVOLUTION_WIDTH 0x801A + GL_MAX_CONVOLUTION_HEIGHT 0x801B + GL_POST_CONVOLUTION_RED_SCALE 0x801C + GL_POST_CONVOLUTION_GREEN_SCALE 0x801D + GL_POST_CONVOLUTION_BLUE_SCALE 0x801E + GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F + GL_POST_CONVOLUTION_RED_BIAS 0x8020 + GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 + GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 + GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 + GL_HISTOGRAM 0x8024 + GL_PROXY_HISTOGRAM 0x8025 + GL_HISTOGRAM_WIDTH 0x8026 + GL_HISTOGRAM_FORMAT 0x8027 + GL_HISTOGRAM_RED_SIZE 0x8028 + GL_HISTOGRAM_GREEN_SIZE 0x8029 + GL_HISTOGRAM_BLUE_SIZE 0x802A + GL_HISTOGRAM_ALPHA_SIZE 0x802B + GL_HISTOGRAM_LUMINANCE_SIZE 0x802C + GL_HISTOGRAM_SINK 0x802D + GL_MINMAX 0x802E + GL_MINMAX_FORMAT 0x802F + GL_MINMAX_SINK 0x8030 + GL_TABLE_TOO_LARGE 0x8031 + GL_COLOR_MATRIX 0x80B1 + GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 + GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 + GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 + GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 + GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 + GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 + GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 + GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 + GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA + GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB + GL_COLOR_TABLE 0x80D0 + GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 + GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 + GL_PROXY_COLOR_TABLE 0x80D3 + GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 + GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 + GL_COLOR_TABLE_SCALE 0x80D6 + GL_COLOR_TABLE_BIAS 0x80D7 + GL_COLOR_TABLE_FORMAT 0x80D8 + GL_COLOR_TABLE_WIDTH 0x80D9 + GL_COLOR_TABLE_RED_SIZE 0x80DA + GL_COLOR_TABLE_GREEN_SIZE 0x80DB + GL_COLOR_TABLE_BLUE_SIZE 0x80DC + GL_COLOR_TABLE_ALPHA_SIZE 0x80DD + GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE + GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF + GL_IGNORE_BORDER 0x8150 + GL_CONSTANT_BORDER 0x8151 + GL_WRAP_BORDER 0x8152 + GL_REPLICATE_BORDER 0x8153 + GL_CONVOLUTION_BORDER_COLOR 0x8154 + void glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table) + void glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data) + void glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params) + void glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params) + void glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) + void glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) + void glGetColorTable (GLenum target, GLenum format, GLenum type, void *table) + void glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params) + void glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params) + void glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) + void glResetHistogram (GLenum target) + void glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values) + void glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params) + void glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params) + void glMinmax (GLenum target, GLenum internalformat, GLboolean sink) + void glResetMinmax (GLenum target) + void glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params) + void glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params) + void glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image) + void glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image) + void glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params) + void glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params) + void glConvolutionParameteri (GLenum target, GLenum pname, GLint params) + void glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params) + void glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) + void glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height) + void glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, void *image) + void glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params) + void glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params) + void glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column) + void glGetSeparableFilter (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span) + void glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum types, void *values) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_instanced_arrays b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_instanced_arrays new file mode 100644 index 0000000..1487d39 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_instanced_arrays @@ -0,0 +1,8 @@ +GL_ARB_instanced_arrays +http://www.opengl.org/registry/specs/ARB/instanced_arrays.txt +GL_ARB_instanced_arrays + + GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE + void glVertexAttribDivisorARB (GLuint index, GLuint divisor) + void glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount) + void glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_internalformat_query2 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_internalformat_query2 new file mode 100644 index 0000000..7af5091 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_internalformat_query2 @@ -0,0 +1,104 @@ +GL_ARB_internalformat_query2 +http://www.opengl.org/registry/specs/ARB/internalformat_query2.txt +GL_ARB_internalformat_query2 + + GL_INTERNALFORMAT_SUPPORTED 0x826F + GL_INTERNALFORMAT_PREFERRED 0x8270 + GL_INTERNALFORMAT_RED_SIZE 0x8271 + GL_INTERNALFORMAT_GREEN_SIZE 0x8272 + GL_INTERNALFORMAT_BLUE_SIZE 0x8273 + GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 + GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 + GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 + GL_INTERNALFORMAT_SHARED_SIZE 0x8277 + GL_INTERNALFORMAT_RED_TYPE 0x8278 + GL_INTERNALFORMAT_GREEN_TYPE 0x8279 + GL_INTERNALFORMAT_BLUE_TYPE 0x827A + GL_INTERNALFORMAT_ALPHA_TYPE 0x827B + GL_INTERNALFORMAT_DEPTH_TYPE 0x827C + GL_INTERNALFORMAT_STENCIL_TYPE 0x827D + GL_MAX_WIDTH 0x827E + GL_MAX_HEIGHT 0x827F + GL_MAX_DEPTH 0x8280 + GL_MAX_LAYERS 0x8281 + GL_MAX_COMBINED_DIMENSIONS 0x8282 + GL_COLOR_COMPONENTS 0x8283 + GL_DEPTH_COMPONENTS 0x8284 + GL_STENCIL_COMPONENTS 0x8285 + GL_COLOR_RENDERABLE 0x8286 + GL_DEPTH_RENDERABLE 0x8287 + GL_STENCIL_RENDERABLE 0x8288 + GL_FRAMEBUFFER_RENDERABLE 0x8289 + GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A + GL_FRAMEBUFFER_BLEND 0x828B + GL_READ_PIXELS 0x828C + GL_READ_PIXELS_FORMAT 0x828D + GL_READ_PIXELS_TYPE 0x828E + GL_TEXTURE_IMAGE_FORMAT 0x828F + GL_TEXTURE_IMAGE_TYPE 0x8290 + GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 + GL_GET_TEXTURE_IMAGE_TYPE 0x8292 + GL_MIPMAP 0x8293 + GL_MANUAL_GENERATE_MIPMAP 0x8294 + GL_AUTO_GENERATE_MIPMAP 0x8295 + GL_COLOR_ENCODING 0x8296 + GL_SRGB_READ 0x8297 + GL_SRGB_WRITE 0x8298 + GL_SRGB_DECODE_ARB 0x8299 + GL_FILTER 0x829A + GL_VERTEX_TEXTURE 0x829B + GL_TESS_CONTROL_TEXTURE 0x829C + GL_TESS_EVALUATION_TEXTURE 0x829D + GL_GEOMETRY_TEXTURE 0x829E + GL_FRAGMENT_TEXTURE 0x829F + GL_COMPUTE_TEXTURE 0x82A0 + GL_TEXTURE_SHADOW 0x82A1 + GL_TEXTURE_GATHER 0x82A2 + GL_TEXTURE_GATHER_SHADOW 0x82A3 + GL_SHADER_IMAGE_LOAD 0x82A4 + GL_SHADER_IMAGE_STORE 0x82A5 + GL_SHADER_IMAGE_ATOMIC 0x82A6 + GL_IMAGE_TEXEL_SIZE 0x82A7 + GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 + GL_IMAGE_PIXEL_FORMAT 0x82A9 + GL_IMAGE_PIXEL_TYPE 0x82AA + GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC + GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD + GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE + GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF + GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 + GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 + GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 + GL_CLEAR_BUFFER 0x82B4 + GL_TEXTURE_VIEW 0x82B5 + GL_VIEW_COMPATIBILITY_CLASS 0x82B6 + GL_FULL_SUPPORT 0x82B7 + GL_CAVEAT_SUPPORT 0x82B8 + GL_IMAGE_CLASS_4_X_32 0x82B9 + GL_IMAGE_CLASS_2_X_32 0x82BA + GL_IMAGE_CLASS_1_X_32 0x82BB + GL_IMAGE_CLASS_4_X_16 0x82BC + GL_IMAGE_CLASS_2_X_16 0x82BD + GL_IMAGE_CLASS_1_X_16 0x82BE + GL_IMAGE_CLASS_4_X_8 0x82BF + GL_IMAGE_CLASS_2_X_8 0x82C0 + GL_IMAGE_CLASS_1_X_8 0x82C1 + GL_IMAGE_CLASS_11_11_10 0x82C2 + GL_IMAGE_CLASS_10_10_10_2 0x82C3 + GL_VIEW_CLASS_128_BITS 0x82C4 + GL_VIEW_CLASS_96_BITS 0x82C5 + GL_VIEW_CLASS_64_BITS 0x82C6 + GL_VIEW_CLASS_48_BITS 0x82C7 + GL_VIEW_CLASS_32_BITS 0x82C8 + GL_VIEW_CLASS_24_BITS 0x82C9 + GL_VIEW_CLASS_16_BITS 0x82CA + GL_VIEW_CLASS_8_BITS 0x82CB + GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC + GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD + GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE + GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF + GL_VIEW_CLASS_RGTC1_RED 0x82D0 + GL_VIEW_CLASS_RGTC2_RG 0x82D1 + GL_VIEW_CLASS_BPTC_UNORM 0x82D2 + GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 + void glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64* params) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_matrix_palette b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_matrix_palette new file mode 100644 index 0000000..98b0d0b --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_matrix_palette @@ -0,0 +1,19 @@ +GL_ARB_matrix_palette +http://oss.sgi.com/projects/ogl-sample/registry/ARB/matrix_palette.txt +GL_ARB_matrix_palette + + GL_MATRIX_PALETTE_ARB 0x8840 + GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 + GL_MAX_PALETTE_MATRICES_ARB 0x8842 + GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 + GL_MATRIX_INDEX_ARRAY_ARB 0x8844 + GL_CURRENT_MATRIX_INDEX_ARB 0x8845 + GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 + GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 + GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 + GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 + void glCurrentPaletteMatrixARB (GLint index) + void glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, void *pointer) + void glMatrixIndexubvARB (GLint size, GLubyte *indices) + void glMatrixIndexusvARB (GLint size, GLushort *indices) + void glMatrixIndexuivARB (GLint size, GLuint *indices) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_multitexture b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_multitexture new file mode 100644 index 0000000..46a9546 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_multitexture @@ -0,0 +1,73 @@ +GL_ARB_multitexture +http://oss.sgi.com/projects/ogl-sample/registry/ARB/multitexture.txt +GL_ARB_multitexture + + GL_TEXTURE0_ARB 0x84C0 + GL_TEXTURE1_ARB 0x84C1 + GL_TEXTURE2_ARB 0x84C2 + GL_TEXTURE3_ARB 0x84C3 + GL_TEXTURE4_ARB 0x84C4 + GL_TEXTURE5_ARB 0x84C5 + GL_TEXTURE6_ARB 0x84C6 + GL_TEXTURE7_ARB 0x84C7 + GL_TEXTURE8_ARB 0x84C8 + GL_TEXTURE9_ARB 0x84C9 + GL_TEXTURE10_ARB 0x84CA + GL_TEXTURE11_ARB 0x84CB + GL_TEXTURE12_ARB 0x84CC + GL_TEXTURE13_ARB 0x84CD + GL_TEXTURE14_ARB 0x84CE + GL_TEXTURE15_ARB 0x84CF + GL_TEXTURE16_ARB 0x84D0 + GL_TEXTURE17_ARB 0x84D1 + GL_TEXTURE18_ARB 0x84D2 + GL_TEXTURE19_ARB 0x84D3 + GL_TEXTURE20_ARB 0x84D4 + GL_TEXTURE21_ARB 0x84D5 + GL_TEXTURE22_ARB 0x84D6 + GL_TEXTURE23_ARB 0x84D7 + GL_TEXTURE24_ARB 0x84D8 + GL_TEXTURE25_ARB 0x84D9 + GL_TEXTURE26_ARB 0x84DA + GL_TEXTURE27_ARB 0x84DB + GL_TEXTURE28_ARB 0x84DC + GL_TEXTURE29_ARB 0x84DD + GL_TEXTURE30_ARB 0x84DE + GL_TEXTURE31_ARB 0x84DF + GL_ACTIVE_TEXTURE_ARB 0x84E0 + GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 + GL_MAX_TEXTURE_UNITS_ARB 0x84E2 + void glActiveTextureARB (GLenum texture) + void glClientActiveTextureARB (GLenum texture) + void glMultiTexCoord1dARB (GLenum target, GLdouble s) + void glMultiTexCoord1dvARB (GLenum target, const GLdouble *v) + void glMultiTexCoord1fARB (GLenum target, GLfloat s) + void glMultiTexCoord1fvARB (GLenum target, const GLfloat *v) + void glMultiTexCoord1iARB (GLenum target, GLint s) + void glMultiTexCoord1ivARB (GLenum target, const GLint *v) + void glMultiTexCoord1sARB (GLenum target, GLshort s) + void glMultiTexCoord1svARB (GLenum target, const GLshort *v) + void glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t) + void glMultiTexCoord2dvARB (GLenum target, const GLdouble *v) + void glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t) + void glMultiTexCoord2fvARB (GLenum target, const GLfloat *v) + void glMultiTexCoord2iARB (GLenum target, GLint s, GLint t) + void glMultiTexCoord2ivARB (GLenum target, const GLint *v) + void glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t) + void glMultiTexCoord2svARB (GLenum target, const GLshort *v) + void glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r) + void glMultiTexCoord3dvARB (GLenum target, const GLdouble *v) + void glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r) + void glMultiTexCoord3fvARB (GLenum target, const GLfloat *v) + void glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r) + void glMultiTexCoord3ivARB (GLenum target, const GLint *v) + void glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r) + void glMultiTexCoord3svARB (GLenum target, const GLshort *v) + void glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) + void glMultiTexCoord4dvARB (GLenum target, const GLdouble *v) + void glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) + void glMultiTexCoord4fvARB (GLenum target, const GLfloat *v) + void glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q) + void glMultiTexCoord4ivARB (GLenum target, const GLint *v) + void glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) + void glMultiTexCoord4svARB (GLenum target, const GLshort *v) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_robustness b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_robustness new file mode 100644 index 0000000..82d48d8 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_robustness @@ -0,0 +1,31 @@ +GL_ARB_robustness +http://www.opengl.org/registry/specs/ARB/robustness.txt +GL_ARB_robustness + + GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 + GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 + GL_GUILTY_CONTEXT_RESET_ARB 0x8253 + GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 + GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 + GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 + GL_NO_RESET_NOTIFICATION_ARB 0x8261 + GLenum glGetGraphicsResetStatusARB (void) + void glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* table) + void glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void* img) + void glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* image) + void glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values) + void glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble* v) + void glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat* v) + void glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint* v) + void glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values) + void glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat* values) + void glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint* values) + void glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort* values) + void glGetnPolygonStippleARB (GLsizei bufSize, GLubyte* pattern) + void glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void* row, GLsizei columnBufSize, void*column, void*span) + void glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void* img) + void glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble* params) + void glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat* params) + void glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint* params) + void glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint* params) + void glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void* data) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_separate_shader_objects b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_separate_shader_objects new file mode 100644 index 0000000..3d3d869 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_separate_shader_objects @@ -0,0 +1,73 @@ +GL_ARB_separate_shader_objects +http://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt +GL_ARB_separate_shader_objects + + GL_VERTEX_SHADER_BIT 0x00000001 + GL_FRAGMENT_SHADER_BIT 0x00000002 + GL_GEOMETRY_SHADER_BIT 0x00000004 + GL_TESS_CONTROL_SHADER_BIT 0x00000008 + GL_TESS_EVALUATION_SHADER_BIT 0x00000010 + GL_PROGRAM_SEPARABLE 0x8258 + GL_ACTIVE_PROGRAM 0x8259 + GL_PROGRAM_PIPELINE_BINDING 0x825A + GL_ALL_SHADER_BITS 0xFFFFFFFF + void glActiveShaderProgram (GLuint pipeline, GLuint program) + void glBindProgramPipeline (GLuint pipeline) + GLuint glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar * const * strings) + void glDeleteProgramPipelines (GLsizei n, const GLuint* pipelines) + void glGenProgramPipelines (GLsizei n, GLuint* pipelines) + void glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar *infoLog) + void glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint* params) + GLboolean glIsProgramPipeline (GLuint pipeline) + void glProgramUniform1d (GLuint program, GLint location, GLdouble x) + void glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) + void glProgramUniform1f (GLuint program, GLint location, GLfloat x) + void glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) + void glProgramUniform1i (GLuint program, GLint location, GLint x) + void glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint* value) + void glProgramUniform1ui (GLuint program, GLint location, GLuint x) + void glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) + void glProgramUniform2d (GLuint program, GLint location, GLdouble x, GLdouble y) + void glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) + void glProgramUniform2f (GLuint program, GLint location, GLfloat x, GLfloat y) + void glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) + void glProgramUniform2i (GLuint program, GLint location, GLint x, GLint y) + void glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint* value) + void glProgramUniform2ui (GLuint program, GLint location, GLuint x, GLuint y) + void glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) + void glProgramUniform3d (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z) + void glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) + void glProgramUniform3f (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z) + void glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) + void glProgramUniform3i (GLuint program, GLint location, GLint x, GLint y, GLint z) + void glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint* value) + void glProgramUniform3ui (GLuint program, GLint location, GLuint x, GLuint y, GLuint z) + void glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) + void glProgramUniform4d (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w) + void glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) + void glProgramUniform4f (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) + void glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) + void glProgramUniform4i (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w) + void glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint* value) + void glProgramUniform4ui (GLuint program, GLint location, GLuint x, GLuint y, GLuint z, GLuint w) + void glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) + void glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) + void glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) + void glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) + void glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) + void glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) + void glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) + void glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) + void glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) + void glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) + void glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) + void glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) + void glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) + void glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) + void glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) + void glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) + void glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) + void glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) + void glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) + void glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program) + void glValidateProgramPipeline (GLuint pipeline) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_vertex_attrib_64bit b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_vertex_attrib_64bit new file mode 100644 index 0000000..68117c5 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_vertex_attrib_64bit @@ -0,0 +1,14 @@ +GL_ARB_vertex_attrib_64bit +http://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt +GL_ARB_vertex_attrib_64bit + + void glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble* params) + void glVertexAttribL1d (GLuint index, GLdouble x) + void glVertexAttribL1dv (GLuint index, const GLdouble* v) + void glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y) + void glVertexAttribL2dv (GLuint index, const GLdouble* v) + void glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z) + void glVertexAttribL3dv (GLuint index, const GLdouble* v) + void glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) + void glVertexAttribL4dv (GLuint index, const GLdouble* v) + void glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_vertex_blend b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_vertex_blend new file mode 100644 index 0000000..f4b3f58 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ARB_vertex_blend @@ -0,0 +1,56 @@ +GL_ARB_vertex_blend +http://oss.sgi.com/projects/ogl-sample/registry/ARB/vertex_blend.txt +GL_ARB_vertex_blend + + GL_MAX_VERTEX_UNITS_ARB 0x86A4 + GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 + GL_WEIGHT_SUM_UNITY_ARB 0x86A6 + GL_VERTEX_BLEND_ARB 0x86A7 + GL_CURRENT_WEIGHT_ARB 0x86A8 + GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 + GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA + GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB + GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC + GL_WEIGHT_ARRAY_ARB 0x86AD + GL_MODELVIEW0_ARB 0x1700 + GL_MODELVIEW1_ARB 0x850A + GL_MODELVIEW2_ARB 0x8722 + GL_MODELVIEW3_ARB 0x8723 + GL_MODELVIEW4_ARB 0x8724 + GL_MODELVIEW5_ARB 0x8725 + GL_MODELVIEW6_ARB 0x8726 + GL_MODELVIEW7_ARB 0x8727 + GL_MODELVIEW8_ARB 0x8728 + GL_MODELVIEW9_ARB 0x8729 + GL_MODELVIEW10_ARB 0x872A + GL_MODELVIEW11_ARB 0x872B + GL_MODELVIEW12_ARB 0x872C + GL_MODELVIEW13_ARB 0x872D + GL_MODELVIEW14_ARB 0x872E + GL_MODELVIEW15_ARB 0x872F + GL_MODELVIEW16_ARB 0x8730 + GL_MODELVIEW17_ARB 0x8731 + GL_MODELVIEW18_ARB 0x8732 + GL_MODELVIEW19_ARB 0x8733 + GL_MODELVIEW20_ARB 0x8734 + GL_MODELVIEW21_ARB 0x8735 + GL_MODELVIEW22_ARB 0x8736 + GL_MODELVIEW23_ARB 0x8737 + GL_MODELVIEW24_ARB 0x8738 + GL_MODELVIEW25_ARB 0x8739 + GL_MODELVIEW26_ARB 0x873A + GL_MODELVIEW27_ARB 0x873B + GL_MODELVIEW28_ARB 0x873C + GL_MODELVIEW29_ARB 0x873D + GL_MODELVIEW30_ARB 0x873E + GL_MODELVIEW31_ARB 0x873F + void glWeightbvARB (GLint size, GLbyte *weights) + void glWeightsvARB (GLint size, GLshort *weights) + void glWeightivARB (GLint size, GLint *weights) + void glWeightfvARB (GLint size, GLfloat *weights) + void glWeightdvARB (GLint size, GLdouble *weights) + void glWeightubvARB (GLint size, GLubyte *weights) + void glWeightusvARB (GLint size, GLushort *weights) + void glWeightuivARB (GLint size, GLuint *weights) + void glWeightPointerARB (GLint size, GLenum type, GLsizei stride, void *pointer) + void glVertexBlendARB (GLint count) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATIX_point_sprites b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATIX_point_sprites new file mode 100644 index 0000000..d2434e7 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATIX_point_sprites @@ -0,0 +1,10 @@ +GL_ATIX_point_sprites +http://www.ati.com/developer/atiopengl.pdf +GL_ATIX_point_sprites + + GL_TEXTURE_POINT_MODE_ATIX 0x60B0 + GL_TEXTURE_POINT_ONE_COORD_ATIX 0x60B1 + GL_TEXTURE_POINT_SPRITE_ATIX 0x60B2 + GL_POINT_SPRITE_CULL_MODE_ATIX 0x60B3 + GL_POINT_SPRITE_CULL_CENTER_ATIX 0x60B4 + GL_POINT_SPRITE_CULL_CLIP_ATIX 0x60B5 diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATIX_texture_env_combine3 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATIX_texture_env_combine3 new file mode 100644 index 0000000..77f425d --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATIX_texture_env_combine3 @@ -0,0 +1,7 @@ +GL_ATIX_texture_env_combine3 +http://www.ati.com/developer/atiopengl.pdf +GL_ATIX_texture_env_combine3 + + GL_MODULATE_ADD_ATIX 0x8744 + GL_MODULATE_SIGNED_ADD_ATIX 0x8745 + GL_MODULATE_SUBTRACT_ATIX 0x8746 diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATIX_texture_env_route b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATIX_texture_env_route new file mode 100644 index 0000000..d972fd1 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATIX_texture_env_route @@ -0,0 +1,7 @@ +GL_ATIX_texture_env_route +http://www.ati.com/developer/sdk/RadeonSDK/Html/Info/ATIX_texture_env_route.txt +GL_ATIX_texture_env_route + + GL_SECONDARY_COLOR_ATIX 0x8747 + GL_TEXTURE_OUTPUT_RGB_ATIX 0x8748 + GL_TEXTURE_OUTPUT_ALPHA_ATIX 0x8749 diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATIX_vertex_shader_output_point_size b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATIX_vertex_shader_output_point_size new file mode 100644 index 0000000..85a6d58 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATIX_vertex_shader_output_point_size @@ -0,0 +1,5 @@ +GL_ATIX_vertex_shader_output_point_size +http://www.ati.com/developer/atiopengl.pdf +GL_ATIX_vertex_shader_output_point_size + + GL_OUTPUT_POINT_SIZE_ATIX 0x610E diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_envmap_bumpmap b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_envmap_bumpmap new file mode 100644 index 0000000..09a4112 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_envmap_bumpmap @@ -0,0 +1,16 @@ +GL_ATI_envmap_bumpmap +http://oss.sgi.com/projects/ogl-sample/registry/ATI/envmap_bumpmap.txt +GL_ATI_envmap_bumpmap + + GL_BUMP_ROT_MATRIX_ATI 0x8775 + GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 + GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 + GL_BUMP_TEX_UNITS_ATI 0x8778 + GL_DUDV_ATI 0x8779 + GL_DU8DV8_ATI 0x877A + GL_BUMP_ENVMAP_ATI 0x877B + GL_BUMP_TARGET_ATI 0x877C + void glTexBumpParameterivATI (GLenum pname, GLint *param) + void glTexBumpParameterfvATI (GLenum pname, GLfloat *param) + void glGetTexBumpParameterivATI (GLenum pname, GLint *param) + void glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_map_object_buffer b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_map_object_buffer new file mode 100644 index 0000000..6a683d0 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_map_object_buffer @@ -0,0 +1,6 @@ +GL_ATI_map_object_buffer +http://www.opengl.org/registry/specs/ATI/map_object_buffer.txt +GL_ATI_map_object_buffer + + void * glMapObjectBufferATI (GLuint buffer) + void glUnmapObjectBufferATI (GLuint buffer) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_pn_triangles b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_pn_triangles new file mode 100644 index 0000000..ca3923d --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_pn_triangles @@ -0,0 +1,15 @@ +GL_ATI_pn_triangles +http://www.opengl.org/registry/specs/ATI/pn_triangles.txt +GL_ATI_pn_triangles + + GL_PN_TRIANGLES_ATI 0x87F0 + GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 + GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 + GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 + GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 + GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 + GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 + GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 + GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 + void glPNTrianglesiATI (GLenum pname, GLint param) + void glPNTrianglesfATI (GLenum pname, GLfloat param) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_separate_stencil b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_separate_stencil new file mode 100644 index 0000000..b7237e5 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_separate_stencil @@ -0,0 +1,10 @@ +GL_ATI_separate_stencil +http://www.opengl.org/registry/specs/ATI/separate_stencil.txt +GL_ATI_separate_stencil + + GL_STENCIL_BACK_FUNC_ATI 0x8800 + GL_STENCIL_BACK_FAIL_ATI 0x8801 + GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 + GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 + void glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) + void glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_shader_texture_lod b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_shader_texture_lod new file mode 100644 index 0000000..e6e6c04 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_shader_texture_lod @@ -0,0 +1,4 @@ +GL_ATI_shader_texture_lod + +GL_ATI_shader_texture_lod + diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_texture_compression_3dc b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_texture_compression_3dc new file mode 100644 index 0000000..fc3ee44 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_texture_compression_3dc @@ -0,0 +1,5 @@ +GL_ATI_texture_compression_3dc + +GL_ATI_texture_compression_3dc + + GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_vertex_streams b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_vertex_streams new file mode 100644 index 0000000..f6e64fd --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_ATI_vertex_streams @@ -0,0 +1,59 @@ +GL_ATI_vertex_streams +http://www.opengl.org/registry/specs/ATI/vertex_streams.txt +GL_ATI_vertex_streams + + GL_MAX_VERTEX_STREAMS_ATI 0x876B + GL_VERTEX_SOURCE_ATI 0x876C + GL_VERTEX_STREAM0_ATI 0x876D + GL_VERTEX_STREAM1_ATI 0x876E + GL_VERTEX_STREAM2_ATI 0x876F + GL_VERTEX_STREAM3_ATI 0x8770 + GL_VERTEX_STREAM4_ATI 0x8771 + GL_VERTEX_STREAM5_ATI 0x8772 + GL_VERTEX_STREAM6_ATI 0x8773 + GL_VERTEX_STREAM7_ATI 0x8774 + void glClientActiveVertexStreamATI (GLenum stream) + void glVertexBlendEnviATI (GLenum pname, GLint param) + void glVertexBlendEnvfATI (GLenum pname, GLfloat param) + void glVertexStream1sATI (GLenum stream, GLshort x) + void glVertexStream1svATI (GLenum stream, const GLshort *coords) + void glVertexStream1iATI (GLenum stream, GLint x) + void glVertexStream1ivATI (GLenum stream, const GLint *coords) + void glVertexStream1fATI (GLenum stream, GLfloat x) + void glVertexStream1fvATI (GLenum stream, const GLfloat *coords) + void glVertexStream1dATI (GLenum stream, GLdouble x) + void glVertexStream1dvATI (GLenum stream, const GLdouble *coords) + void glVertexStream2sATI (GLenum stream, GLshort x, GLshort y) + void glVertexStream2svATI (GLenum stream, const GLshort *coords) + void glVertexStream2iATI (GLenum stream, GLint x, GLint y) + void glVertexStream2ivATI (GLenum stream, const GLint *coords) + void glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y) + void glVertexStream2fvATI (GLenum stream, const GLfloat *coords) + void glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y) + void glVertexStream2dvATI (GLenum stream, const GLdouble *coords) + void glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z) + void glVertexStream3svATI (GLenum stream, const GLshort *coords) + void glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z) + void glVertexStream3ivATI (GLenum stream, const GLint *coords) + void glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z) + void glVertexStream3fvATI (GLenum stream, const GLfloat *coords) + void glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z) + void glVertexStream3dvATI (GLenum stream, const GLdouble *coords) + void glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w) + void glVertexStream4svATI (GLenum stream, const GLshort *coords) + void glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w) + void glVertexStream4ivATI (GLenum stream, const GLint *coords) + void glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w) + void glVertexStream4fvATI (GLenum stream, const GLfloat *coords) + void glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w) + void glVertexStream4dvATI (GLenum stream, const GLdouble *coords) + void glNormalStream3bATI (GLenum stream, GLbyte x, GLbyte y, GLbyte z) + void glNormalStream3bvATI (GLenum stream, const GLbyte *coords) + void glNormalStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z) + void glNormalStream3svATI (GLenum stream, const GLshort *coords) + void glNormalStream3iATI (GLenum stream, GLint x, GLint y, GLint z) + void glNormalStream3ivATI (GLenum stream, const GLint *coords) + void glNormalStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z) + void glNormalStream3fvATI (GLenum stream, const GLfloat *coords) + void glNormalStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z) + void glNormalStream3dvATI (GLenum stream, const GLdouble *coords) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_Cg_shader b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_Cg_shader new file mode 100644 index 0000000..b2df900 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_Cg_shader @@ -0,0 +1,6 @@ +GL_EXT_Cg_shader +http://download.nvidia.com/developer/GLSL/GLSL%20Release%20Notes%20for%20Release%2060.pdf +GL_EXT_Cg_shader + + GL_CG_VERTEX_SHADER_EXT 0x890E + GL_CG_FRAGMENT_SHADER_EXT 0x890F diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_bindable_uniform b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_bindable_uniform new file mode 100644 index 0000000..00ec270 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_bindable_uniform @@ -0,0 +1,13 @@ +GL_EXT_bindable_uniform +http://developer.download.nvidia.com/opengl/specs/GL_EXT_bindable_uniform.txt +GL_EXT_bindable_uniform + + GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 + GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 + GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 + GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED + GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF + GL_UNIFORM_BUFFER_EXT 0x8DEE + void glUniformBufferEXT (GLuint program, GLint location, GLuint buffer) + GLint glGetUniformBufferSizeEXT (GLuint program, GLint location) + GLintptr glGetUniformOffsetEXT (GLuint program, GLint location) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_debug_marker b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_debug_marker new file mode 100644 index 0000000..ce9ffe4 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_debug_marker @@ -0,0 +1,7 @@ +GL_EXT_debug_marker +http://www.khronos.org/registry/gles/extensions/EXT/EXT_debug_marker.txt +GL_EXT_debug_marker + + void glInsertEventMarkerEXT (GLsizei length, const GLchar* marker) + void glPushGroupMarkerEXT (GLsizei length, const GLchar* marker) + void glPopGroupMarkerEXT (void) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_depth_bounds_test b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_depth_bounds_test new file mode 100644 index 0000000..da2a453 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_depth_bounds_test @@ -0,0 +1,7 @@ +GL_EXT_depth_bounds_test +http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_depth_bounds_test.txt +GL_EXT_depth_bounds_test + + GL_DEPTH_BOUNDS_TEST_EXT 0x8890 + GL_DEPTH_BOUNDS_EXT 0x8891 + void glDepthBoundsEXT (GLclampd zmin, GLclampd zmax) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_draw_instanced b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_draw_instanced new file mode 100644 index 0000000..ca7f17e --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_draw_instanced @@ -0,0 +1,6 @@ +GL_EXT_draw_instanced +http://developer.download.nvidia.com/opengl/specs/GL_EXT_draw_instanced.txt +GL_EXT_draw_instanced + + void glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount) + void glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_draw_range_elements b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_draw_range_elements new file mode 100644 index 0000000..f5346de --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_draw_range_elements @@ -0,0 +1,7 @@ +GL_EXT_draw_range_elements +http://oss.sgi.com/projects/ogl-sample/registry/EXT/draw_range_elements.txt +GL_EXT_draw_range_elements + + GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 + GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 + void glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_external_buffer b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_external_buffer new file mode 100644 index 0000000..25a3ca6 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_external_buffer @@ -0,0 +1,7 @@ +GL_EXT_external_buffer +http://www.opengl.org/registry/specs/EXT/external_buffer.txt +GL_EXT_external_buffer + + void glBufferStorageExternalEXT (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags) + void glNamedBufferStorageExternalEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags) + typedef void* GLeglClientBufferEXT \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_fog_coord b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_fog_coord new file mode 100644 index 0000000..148866a --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_fog_coord @@ -0,0 +1,17 @@ +GL_EXT_fog_coord +http://oss.sgi.com/projects/ogl-sample/registry/EXT/fog_coord.txt +GL_EXT_fog_coord + + GL_FOG_COORDINATE_SOURCE_EXT 0x8450 + GL_FOG_COORDINATE_EXT 0x8451 + GL_FRAGMENT_DEPTH_EXT 0x8452 + GL_CURRENT_FOG_COORDINATE_EXT 0x8453 + GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 + GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 + GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 + GL_FOG_COORDINATE_ARRAY_EXT 0x8457 + void glFogCoordfEXT (GLfloat coord) + void glFogCoordfvEXT (const GLfloat *coord) + void glFogCoorddEXT (GLdouble coord) + void glFogCoorddvEXT (const GLdouble *coord) + void glFogCoordPointerEXT (GLenum type, GLsizei stride, const void *pointer) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_framebuffer_sRGB b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_framebuffer_sRGB new file mode 100644 index 0000000..2f4c6ff --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_framebuffer_sRGB @@ -0,0 +1,6 @@ +GL_EXT_framebuffer_sRGB +http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt +GL_EXT_framebuffer_sRGB + + GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 + GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_geometry_shader4 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_geometry_shader4 new file mode 100644 index 0000000..a463c4c --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_geometry_shader4 @@ -0,0 +1,27 @@ +GL_EXT_geometry_shader4 +http://developer.download.nvidia.com/opengl/specs/GL_EXT_geometry_shader4.txt +GL_EXT_geometry_shader4 + + GL_GEOMETRY_SHADER_EXT 0x8DD9 + GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD + GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE + GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B + GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF + GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 + GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 + GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA + GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB + GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC + GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 + GL_LINES_ADJACENCY_EXT 0xA + GL_LINE_STRIP_ADJACENCY_EXT 0xB + GL_TRIANGLES_ADJACENCY_EXT 0xC + GL_TRIANGLE_STRIP_ADJACENCY_EXT 0xD + GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 + GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 + GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 + GL_PROGRAM_POINT_SIZE_EXT 0x8642 + void glProgramParameteriEXT (GLuint program, GLenum pname, GLint value) + void glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level) + void glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_gpu_program_parameters b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_gpu_program_parameters new file mode 100644 index 0000000..298bc36 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_gpu_program_parameters @@ -0,0 +1,6 @@ +GL_EXT_gpu_program_parameters +http://developer.download.nvidia.com/opengl/specs/GL_EXT_gpu_program_parameters.txt +GL_EXT_gpu_program_parameters + + void glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat* params) + void glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat* params) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_gpu_shader4 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_gpu_shader4 new file mode 100644 index 0000000..7e95dbc --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_gpu_shader4 @@ -0,0 +1,64 @@ +GL_EXT_gpu_shader4 +http://developer.download.nvidia.com/opengl/specs/GL_EXT_gpu_shader4.txt +GL_EXT_gpu_shader4 + + GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 + GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 + GL_SAMPLER_BUFFER_EXT 0x8DC2 + GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 + GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 + GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 + GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 + GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 + GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 + GL_INT_SAMPLER_1D_EXT 0x8DC9 + GL_INT_SAMPLER_2D_EXT 0x8DCA + GL_INT_SAMPLER_3D_EXT 0x8DCB + GL_INT_SAMPLER_CUBE_EXT 0x8DCC + GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD + GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE + GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF + GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 + GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 + GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 + GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 + GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 + GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 + GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 + GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 + GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 + GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD + void glGetUniformuivEXT (GLuint program, GLint location, GLuint *params) + void glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name) + GLint glGetFragDataLocationEXT (GLuint program, const GLchar *name) + void glUniform1uiEXT (GLint location, GLuint v0) + void glUniform2uiEXT (GLint location, GLuint v0, GLuint v1) + void glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2) + void glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) + void glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value) + void glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value) + void glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value) + void glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value) + void glVertexAttribI1iEXT (GLuint index, GLint x) + void glVertexAttribI2iEXT (GLuint index, GLint x, GLint y) + void glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z) + void glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w) + void glVertexAttribI1uiEXT (GLuint index, GLuint x) + void glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y) + void glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z) + void glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) + void glVertexAttribI1ivEXT (GLuint index, const GLint *v) + void glVertexAttribI2ivEXT (GLuint index, const GLint *v) + void glVertexAttribI3ivEXT (GLuint index, const GLint *v) + void glVertexAttribI4ivEXT (GLuint index, const GLint *v) + void glVertexAttribI1uivEXT (GLuint index, const GLuint *v) + void glVertexAttribI2uivEXT (GLuint index, const GLuint *v) + void glVertexAttribI3uivEXT (GLuint index, const GLuint *v) + void glVertexAttribI4uivEXT (GLuint index, const GLuint *v) + void glVertexAttribI4bvEXT (GLuint index, const GLbyte *v) + void glVertexAttribI4svEXT (GLuint index, const GLshort *v) + void glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v) + void glVertexAttribI4usvEXT (GLuint index, const GLushort *v) + void glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer) + void glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params) + void glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_memory_object b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_memory_object new file mode 100644 index 0000000..5520422 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_memory_object @@ -0,0 +1,34 @@ +GL_EXT_memory_object +http://www.opengl.org/registry/specs/EXT/external_objects.txt +GL_EXT_memory_object + + GL_UUID_SIZE_EXT 16 + GL_TEXTURE_TILING_EXT 0x9580 + GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581 + GL_NUM_TILING_TYPES_EXT 0x9582 + GL_TILING_TYPES_EXT 0x9583 + GL_OPTIMAL_TILING_EXT 0x9584 + GL_LINEAR_TILING_EXT 0x9585 + GL_NUM_DEVICE_UUIDS_EXT 0x9596 + GL_DEVICE_UUID_EXT 0x9597 + GL_DRIVER_UUID_EXT 0x9598 + GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B + void glBufferStorageMemEXT (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset) + void glCreateMemoryObjectsEXT (GLsizei n, GLuint* memoryObjects) + void glDeleteMemoryObjectsEXT (GLsizei n, const GLuint* memoryObjects) + void glGetMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, GLint* params) + void glGetUnsignedBytei_vEXT (GLenum target, GLuint index, GLubyte* data) + void glGetUnsignedBytevEXT (GLenum pname, GLubyte* data) + GLboolean glIsMemoryObjectEXT (GLuint memoryObject) + void glMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, const GLint* params) + void glNamedBufferStorageMemEXT (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset) + void glTexStorageMem1DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset) + void glTexStorageMem2DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset) + void glTexStorageMem2DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) + void glTexStorageMem3DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset) + void glTexStorageMem3DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) + void glTextureStorageMem1DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset) + void glTextureStorageMem2DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset) + void glTextureStorageMem2DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) + void glTextureStorageMem3DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset) + void glTextureStorageMem3DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_memory_object_fd b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_memory_object_fd new file mode 100644 index 0000000..38536c0 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_memory_object_fd @@ -0,0 +1,6 @@ +GL_EXT_memory_object_fd +http://www.opengl.org/registry/specs/EXT/external_objects_fd.txt +GL_EXT_memory_object_fd + + GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 + void glImportMemoryFdEXT (GLuint memory, GLuint64 size, GLenum handleType, GLint fd) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_memory_object_win32 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_memory_object_win32 new file mode 100644 index 0000000..6d36a69 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_memory_object_win32 @@ -0,0 +1,17 @@ +GL_EXT_memory_object_win32 +http://www.opengl.org/registry/specs/EXT/external_objects_win32.txt +GL_EXT_memory_object_win32 + + GL_LUID_SIZE_EXT 8 + GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 + GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 + GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589 + GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A + GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B + GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C + GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594 + GL_D3D12_FENCE_VALUE_EXT 0x9595 + GL_DEVICE_LUID_EXT 0x9599 + GL_DEVICE_NODE_MASK_EXT 0x959A + void glImportMemoryWin32HandleEXT (GLuint memory, GLuint64 size, GLenum handleType, void *handle) + void glImportMemoryWin32NameEXT (GLuint memory, GLuint64 size, GLenum handleType, const void *name) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_packed_float b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_packed_float new file mode 100644 index 0000000..15ac680 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_packed_float @@ -0,0 +1,7 @@ +GL_EXT_packed_float +http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt +GL_EXT_packed_float + + GL_R11F_G11F_B10F_EXT 0x8C3A + GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B + GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_pixel_buffer_object b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_pixel_buffer_object new file mode 100644 index 0000000..f685e4c --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_pixel_buffer_object @@ -0,0 +1,8 @@ +GL_EXT_pixel_buffer_object +http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_pixel_buffer_object.txt +GL_EXT_pixel_buffer_object + + GL_PIXEL_PACK_BUFFER_EXT 0x88EB + GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC + GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED + GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_scene_marker b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_scene_marker new file mode 100644 index 0000000..504efcf --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_scene_marker @@ -0,0 +1,6 @@ +GL_EXT_scene_marker +https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_scene_marker.txt +GL_EXT_scene_marker + + void glBeginSceneEXT (void) + void glEndSceneEXT (void) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_secondary_color b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_secondary_color new file mode 100644 index 0000000..505761d --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_secondary_color @@ -0,0 +1,28 @@ +GL_EXT_secondary_color +http://oss.sgi.com/projects/ogl-sample/registry/EXT/secondary_color.txt +GL_EXT_secondary_color + + GL_COLOR_SUM_EXT 0x8458 + GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 + GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A + GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B + GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C + GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D + GL_SECONDARY_COLOR_ARRAY_EXT 0x845E + void glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue) + void glSecondaryColor3bvEXT (const GLbyte *v) + void glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue) + void glSecondaryColor3dvEXT (const GLdouble *v) + void glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue) + void glSecondaryColor3fvEXT (const GLfloat *v) + void glSecondaryColor3iEXT (GLint red, GLint green, GLint blue) + void glSecondaryColor3ivEXT (const GLint *v) + void glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue) + void glSecondaryColor3svEXT (const GLshort *v) + void glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue) + void glSecondaryColor3ubvEXT (const GLubyte *v) + void glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue) + void glSecondaryColor3uivEXT (const GLuint *v) + void glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue) + void glSecondaryColor3usvEXT (const GLushort *v) + void glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_semaphore b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_semaphore new file mode 100644 index 0000000..faf18b3 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_semaphore @@ -0,0 +1,21 @@ +GL_EXT_semaphore +http://www.opengl.org/registry/specs/EXT/external_objects.txt +GL_EXT_semaphore + + GL_LAYOUT_GENERAL_EXT 0x958D + GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E + GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F + GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590 + GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591 + GL_LAYOUT_TRANSFER_SRC_EXT 0x9592 + GL_LAYOUT_TRANSFER_DST_EXT 0x9593 + GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530 + GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531 + + void glDeleteSemaphoresEXT (GLsizei n, const GLuint* semaphores) + void glGenSemaphoresEXT (GLsizei n, GLuint* semaphores) + void glGetSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, GLuint64* params) + GLboolean glIsSemaphoreEXT (GLuint semaphore) + void glSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, const GLuint64* params) + void glSignalSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint* buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts) + void glWaitSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint* buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_semaphore_fd b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_semaphore_fd new file mode 100644 index 0000000..e3b2985 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_semaphore_fd @@ -0,0 +1,5 @@ +GL_EXT_semaphore_fd +http://www.opengl.org/registry/specs/EXT/external_objects_fd.txt +GL_EXT_semaphore_fd + + void glImportSemaphoreFdEXT (GLuint semaphore, GLenum handleType, GLint fd) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_semaphore_win32 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_semaphore_win32 new file mode 100644 index 0000000..4854f58 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_semaphore_win32 @@ -0,0 +1,6 @@ +GL_EXT_semaphore_win32 +http://www.opengl.org/registry/specs/EXT/external_objects_win32.txt +GL_EXT_semaphore_win32 + + void glImportSemaphoreWin32HandleEXT (GLuint semaphore, GLenum handleType, void *handle) + void glImportSemaphoreWin32NameEXT (GLuint semaphore, GLenum handleType, const void *name) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_array b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_array new file mode 100644 index 0000000..c5c2c9f --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_array @@ -0,0 +1,13 @@ +GL_EXT_texture_array +http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_array.txt +GL_EXT_texture_array + + GL_TEXTURE_1D_ARRAY_EXT 0x8C18 + GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 + GL_TEXTURE_2D_ARRAY_EXT 0x8C1A + GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B + GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C + GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D + GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF + GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E + void glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_buffer_object b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_buffer_object new file mode 100644 index 0000000..81b5835 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_buffer_object @@ -0,0 +1,10 @@ +GL_EXT_texture_buffer_object +http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_buffer_object.txt +GL_EXT_texture_buffer_object + + GL_TEXTURE_BUFFER_EXT 0x8C2A + GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B + GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C + GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D + GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E + void glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_compression_latc b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_compression_latc new file mode 100644 index 0000000..e8fcacc --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_compression_latc @@ -0,0 +1,8 @@ +GL_EXT_texture_compression_latc +http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_compression_latc.txt +GL_EXT_texture_compression_latc + + GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 + GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 + GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 + GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_compression_rgtc b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_compression_rgtc new file mode 100644 index 0000000..054b7f0 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_compression_rgtc @@ -0,0 +1,8 @@ +GL_EXT_texture_compression_rgtc +http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_compression_rgtc.txt +GL_EXT_texture_compression_rgtc + + GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB + GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC + GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD + GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_cube_map b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_cube_map new file mode 100644 index 0000000..73a2c73 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_cube_map @@ -0,0 +1,16 @@ +GL_EXT_texture_cube_map +http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_texture_cube_map.txt +GL_EXT_texture_cube_map + + GL_NORMAL_MAP_EXT 0x8511 + GL_REFLECTION_MAP_EXT 0x8512 + GL_TEXTURE_CUBE_MAP_EXT 0x8513 + GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 + GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 + GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 + GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 + GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 + GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A + GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B + GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_edge_clamp b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_edge_clamp new file mode 100644 index 0000000..c0b3e2a --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_edge_clamp @@ -0,0 +1,5 @@ +GL_EXT_texture_edge_clamp +http://www.opengl.org/developers/documentation/Version1.2/1.2specs/texture_edge_clamp.txt +GL_EXT_texture_edge_clamp + + GL_CLAMP_TO_EDGE_EXT 0x812F diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_integer b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_integer new file mode 100644 index 0000000..43219cf --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_integer @@ -0,0 +1,57 @@ +GL_EXT_texture_integer +http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_integer.txt +GL_EXT_texture_integer + + GL_RGBA32UI_EXT 0x8D70 + GL_RGB32UI_EXT 0x8D71 + GL_ALPHA32UI_EXT 0x8D72 + GL_INTENSITY32UI_EXT 0x8D73 + GL_LUMINANCE32UI_EXT 0x8D74 + GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 + GL_RGBA16UI_EXT 0x8D76 + GL_RGB16UI_EXT 0x8D77 + GL_ALPHA16UI_EXT 0x8D78 + GL_INTENSITY16UI_EXT 0x8D79 + GL_LUMINANCE16UI_EXT 0x8D7A + GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B + GL_RGBA8UI_EXT 0x8D7C + GL_RGB8UI_EXT 0x8D7D + GL_ALPHA8UI_EXT 0x8D7E + GL_INTENSITY8UI_EXT 0x8D7F + GL_LUMINANCE8UI_EXT 0x8D80 + GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 + GL_RGBA32I_EXT 0x8D82 + GL_RGB32I_EXT 0x8D83 + GL_ALPHA32I_EXT 0x8D84 + GL_INTENSITY32I_EXT 0x8D85 + GL_LUMINANCE32I_EXT 0x8D86 + GL_LUMINANCE_ALPHA32I_EXT 0x8D87 + GL_RGBA16I_EXT 0x8D88 + GL_RGB16I_EXT 0x8D89 + GL_ALPHA16I_EXT 0x8D8A + GL_INTENSITY16I_EXT 0x8D8B + GL_LUMINANCE16I_EXT 0x8D8C + GL_LUMINANCE_ALPHA16I_EXT 0x8D8D + GL_RGBA8I_EXT 0x8D8E + GL_RGB8I_EXT 0x8D8F + GL_ALPHA8I_EXT 0x8D90 + GL_INTENSITY8I_EXT 0x8D91 + GL_LUMINANCE8I_EXT 0x8D92 + GL_LUMINANCE_ALPHA8I_EXT 0x8D93 + GL_RED_INTEGER_EXT 0x8D94 + GL_GREEN_INTEGER_EXT 0x8D95 + GL_BLUE_INTEGER_EXT 0x8D96 + GL_ALPHA_INTEGER_EXT 0x8D97 + GL_RGB_INTEGER_EXT 0x8D98 + GL_RGBA_INTEGER_EXT 0x8D99 + GL_BGR_INTEGER_EXT 0x8D9A + GL_BGRA_INTEGER_EXT 0x8D9B + GL_LUMINANCE_INTEGER_EXT 0x8D9C + GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D + GL_RGBA_INTEGER_MODE_EXT 0x8D9E + void glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params) + void glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params) + void glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params) + void glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params) + void glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha) + void glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_rectangle b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_rectangle new file mode 100644 index 0000000..1394311 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_rectangle @@ -0,0 +1,8 @@ +GL_EXT_texture_rectangle +http://developer.apple.com/opengl/extensions/ext_texture_rectangle.html +GL_EXT_texture_rectangle + + GL_TEXTURE_RECTANGLE_EXT 0x84F5 + GL_TEXTURE_BINDING_RECTANGLE_EXT 0x84F6 + GL_PROXY_TEXTURE_RECTANGLE_EXT 0x84F7 + GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT 0x84F8 diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_shared_exponent b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_shared_exponent new file mode 100644 index 0000000..4c7d461 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_texture_shared_exponent @@ -0,0 +1,7 @@ +GL_EXT_texture_shared_exponent +http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_shared_exponent.txt +GL_EXT_texture_shared_exponent + + GL_RGB9_E5_EXT 0x8C3D + GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E + GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_timer_query b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_timer_query new file mode 100644 index 0000000..530ba35 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_timer_query @@ -0,0 +1,7 @@ +GL_EXT_timer_query +http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_timer_query.txt +GL_EXT_timer_query + + GL_TIME_ELAPSED_EXT 0x88BF + void glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64EXT *params) + void glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64EXT *params) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_vertex_shader b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_vertex_shader new file mode 100644 index 0000000..8d3314f --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_EXT_vertex_shader @@ -0,0 +1,157 @@ +GL_EXT_vertex_shader +http://oss.sgi.com/projects/ogl-sample/registry/EXT/vertex_shader.txt +GL_EXT_vertex_shader + + GL_VERTEX_SHADER_EXT 0x8780 + GL_VERTEX_SHADER_BINDING_EXT 0x8781 + GL_OP_INDEX_EXT 0x8782 + GL_OP_NEGATE_EXT 0x8783 + GL_OP_DOT3_EXT 0x8784 + GL_OP_DOT4_EXT 0x8785 + GL_OP_MUL_EXT 0x8786 + GL_OP_ADD_EXT 0x8787 + GL_OP_MADD_EXT 0x8788 + GL_OP_FRAC_EXT 0x8789 + GL_OP_MAX_EXT 0x878A + GL_OP_MIN_EXT 0x878B + GL_OP_SET_GE_EXT 0x878C + GL_OP_SET_LT_EXT 0x878D + GL_OP_CLAMP_EXT 0x878E + GL_OP_FLOOR_EXT 0x878F + GL_OP_ROUND_EXT 0x8790 + GL_OP_EXP_BASE_2_EXT 0x8791 + GL_OP_LOG_BASE_2_EXT 0x8792 + GL_OP_POWER_EXT 0x8793 + GL_OP_RECIP_EXT 0x8794 + GL_OP_RECIP_SQRT_EXT 0x8795 + GL_OP_SUB_EXT 0x8796 + GL_OP_CROSS_PRODUCT_EXT 0x8797 + GL_OP_MULTIPLY_MATRIX_EXT 0x8798 + GL_OP_MOV_EXT 0x8799 + GL_OUTPUT_VERTEX_EXT 0x879A + GL_OUTPUT_COLOR0_EXT 0x879B + GL_OUTPUT_COLOR1_EXT 0x879C + GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D + GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E + GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F + GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 + GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 + GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 + GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 + GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 + GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 + GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 + GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 + GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 + GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 + GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA + GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB + GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC + GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD + GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE + GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF + GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 + GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 + GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 + GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 + GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 + GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 + GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 + GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 + GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 + GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 + GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA + GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB + GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC + GL_OUTPUT_FOG_EXT 0x87BD + GL_SCALAR_EXT 0x87BE + GL_VECTOR_EXT 0x87BF + GL_MATRIX_EXT 0x87C0 + GL_VARIANT_EXT 0x87C1 + GL_INVARIANT_EXT 0x87C2 + GL_LOCAL_CONSTANT_EXT 0x87C3 + GL_LOCAL_EXT 0x87C4 + GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 + GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 + GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 + GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 + GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 + GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA + GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB + GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CC + GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CD + GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE + GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF + GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 + GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 + GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 + GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 + GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 + GL_X_EXT 0x87D5 + GL_Y_EXT 0x87D6 + GL_Z_EXT 0x87D7 + GL_W_EXT 0x87D8 + GL_NEGATIVE_X_EXT 0x87D9 + GL_NEGATIVE_Y_EXT 0x87DA + GL_NEGATIVE_Z_EXT 0x87DB + GL_NEGATIVE_W_EXT 0x87DC + GL_ZERO_EXT 0x87DD + GL_ONE_EXT 0x87DE + GL_NEGATIVE_ONE_EXT 0x87DF + GL_NORMALIZED_RANGE_EXT 0x87E0 + GL_FULL_RANGE_EXT 0x87E1 + GL_CURRENT_VERTEX_EXT 0x87E2 + GL_MVP_MATRIX_EXT 0x87E3 + GL_VARIANT_VALUE_EXT 0x87E4 + GL_VARIANT_DATATYPE_EXT 0x87E5 + GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 + GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 + GL_VARIANT_ARRAY_EXT 0x87E8 + GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 + GL_INVARIANT_VALUE_EXT 0x87EA + GL_INVARIANT_DATATYPE_EXT 0x87EB + GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC + GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED + + void glBeginVertexShaderEXT (void) + void glEndVertexShaderEXT (void) + void glBindVertexShaderEXT (GLuint id) + GLuint glGenVertexShadersEXT (GLuint range) + void glDeleteVertexShaderEXT (GLuint id) + void glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1) + void glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2) + void glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3) + void glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW) + void glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW) + void glInsertComponentEXT (GLuint res, GLuint src, GLuint num) + void glExtractComponentEXT (GLuint res, GLuint src, GLuint num) + GLuint glGenSymbolsEXT (GLenum dataType, GLenum storageType, GLenum range, GLuint components) + void glSetInvariantEXT (GLuint id, GLenum type, void *addr) + void glSetLocalConstantEXT (GLuint id, GLenum type, void *addr) + void glVariantbvEXT (GLuint id, GLbyte *addr) + void glVariantsvEXT (GLuint id, GLshort *addr) + void glVariantivEXT (GLuint id, GLint *addr) + void glVariantfvEXT (GLuint id, GLfloat *addr) + void glVariantdvEXT (GLuint id, GLdouble *addr) + void glVariantubvEXT (GLuint id, GLubyte *addr) + void glVariantusvEXT (GLuint id, GLushort *addr) + void glVariantuivEXT (GLuint id, GLuint *addr) + void glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, void *addr) + void glEnableVariantClientStateEXT (GLuint id) + void glDisableVariantClientStateEXT (GLuint id) + GLuint glBindLightParameterEXT (GLenum light, GLenum value) + GLuint glBindMaterialParameterEXT (GLenum face, GLenum value) + GLuint glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value) + GLuint glBindTextureUnitParameterEXT (GLenum unit, GLenum value) + GLuint glBindParameterEXT (GLenum value) + GLboolean glIsVariantEnabledEXT (GLuint id, GLenum cap) + void glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) + void glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data) + void glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data) + void glGetVariantPointervEXT (GLuint id, GLenum value, void **data) + void glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) + void glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data) + void glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data) + void glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) + void glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data) + void glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_KHR_context_flush_control b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_KHR_context_flush_control new file mode 100644 index 0000000..18de5aa --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_KHR_context_flush_control @@ -0,0 +1,7 @@ +GL_KHR_context_flush_control +https://www.khronos.org/registry/OpenGL/extensions/KHR/KHR_context_flush_control.txt +GL_KHR_context_flush_control + + GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB + GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC + diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_KTX_buffer_region b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_KTX_buffer_region new file mode 100644 index 0000000..ef281b1 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_KTX_buffer_region @@ -0,0 +1,13 @@ +GL_KTX_buffer_region + +GL_KTX_buffer_region + + GL_KTX_FRONT_REGION 0x0 + GL_KTX_BACK_REGION 0x1 + GL_KTX_Z_REGION 0x2 + GL_KTX_STENCIL_REGION 0x3 + GLuint glBufferRegionEnabled (void) + GLuint glNewBufferRegion (GLenum region) + void glDeleteBufferRegion (GLenum region) + void glReadBufferRegion (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height) + void glDrawBufferRegion (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height, GLint xDest, GLint yDest) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NVX_gpu_memory_info b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NVX_gpu_memory_info new file mode 100644 index 0000000..a8d97b9 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NVX_gpu_memory_info @@ -0,0 +1,9 @@ +GL_NVX_gpu_memory_info +http://developer.download.nvidia.com/opengl/specs/GL_NVX_gpu_memory_info.txt +GL_NVX_gpu_memory_info + + GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 + GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 + GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 + GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A + GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_depth_buffer_float b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_depth_buffer_float new file mode 100644 index 0000000..421d266 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_depth_buffer_float @@ -0,0 +1,11 @@ +GL_NV_depth_buffer_float +http://developer.download.nvidia.com/opengl/specs/GL_NV_depth_buffer_float.txt +GL_NV_depth_buffer_float + + GL_DEPTH_COMPONENT32F_NV 0x8DAB + GL_DEPTH32F_STENCIL8_NV 0x8DAC + GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD + GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF + void glDepthRangedNV (GLdouble zNear, GLdouble zFar) + void glClearDepthdNV (GLdouble depth) + void glDepthBoundsdNV (GLdouble zmin, GLdouble zmax) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_depth_range_unclamped b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_depth_range_unclamped new file mode 100644 index 0000000..b63a0ee --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_depth_range_unclamped @@ -0,0 +1,9 @@ +GL_NV_depth_range_unclamped + +GL_NV_depth_range_unclamped + + GL_SAMPLE_COUNT_BITS_NV 0x8864 + GL_CURRENT_SAMPLE_COUNT_QUERY_NV 0x8865 + GL_QUERY_RESULT_NV 0x8866 + GL_QUERY_RESULT_AVAILABLE_NV 0x8867 + GL_SAMPLE_COUNT_NV 0x8914 diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_fragment_program2 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_fragment_program2 new file mode 100644 index 0000000..79d4b63 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_fragment_program2 @@ -0,0 +1,9 @@ +GL_NV_fragment_program2 +http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_fragment_program2.txt +GL_NV_fragment_program2 + + GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 + GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 + GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 + GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 + GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_fragment_program4 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_fragment_program4 new file mode 100644 index 0000000..edd4383 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_fragment_program4 @@ -0,0 +1,4 @@ +GL_NV_fragment_program4 +http://developer.download.nvidia.com/opengl/specs/GL_NV_fragment_program4.txt +GL_NV_gpu_program4 + diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_fragment_program_option b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_fragment_program_option new file mode 100644 index 0000000..01b8ed6 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_fragment_program_option @@ -0,0 +1,4 @@ +GL_NV_fragment_program_option +http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_fragment_program_option.txt +GL_NV_fragment_program_option + diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_framebuffer_multisample_coverage b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_framebuffer_multisample_coverage new file mode 100644 index 0000000..526d0f0 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_framebuffer_multisample_coverage @@ -0,0 +1,9 @@ +GL_NV_framebuffer_multisample_coverage +http://developer.download.nvidia.com/opengl/specs/GL_NV_framebuffer_multisample_coverage.txt +GL_NV_framebuffer_multisample_coverage + + GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB + GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 + GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 + GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 + void glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_geometry_program4 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_geometry_program4 new file mode 100644 index 0000000..a6cb164 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_geometry_program4 @@ -0,0 +1,8 @@ +GL_NV_geometry_program4 +http://developer.download.nvidia.com/opengl/specs/GL_NV_geometry_program4.txt +GL_NV_gpu_program4 + + GL_GEOMETRY_PROGRAM_NV 0x8C26 + GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 + GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 + void glProgramVertexLimitNV (GLenum target, GLint limit) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_geometry_shader4 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_geometry_shader4 new file mode 100644 index 0000000..1b00429 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_geometry_shader4 @@ -0,0 +1,4 @@ +GL_NV_geometry_shader4 +http://developer.download.nvidia.com/opengl/specs/GL_NV_geometry_shader4.txt +GL_NV_geometry_shader4 + diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_gpu_program4 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_gpu_program4 new file mode 100644 index 0000000..19f7169 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_gpu_program4 @@ -0,0 +1,24 @@ +GL_NV_gpu_program4 +http://developer.download.nvidia.com/opengl/specs/GL_NV_gpu_program4.txt +GL_NV_gpu_program4 + + GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 + GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 + GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 + GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 + GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 + GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 + GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 + GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 + void glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) + void glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params) + void glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params) + void glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) + void glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params) + void glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params) + void glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) + void glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params) + void glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params) + void glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) + void glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params) + void glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_gpu_program5 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_gpu_program5 new file mode 100644 index 0000000..68079f3 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_gpu_program5 @@ -0,0 +1,10 @@ +GL_NV_gpu_program5 +http://www.opengl.org/registry/specs/NV/gpu_program5.txt +GL_NV_gpu_program5 + + GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A + GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B + GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C + GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D + GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E + GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_parameter_buffer_object b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_parameter_buffer_object new file mode 100644 index 0000000..91494e3 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_parameter_buffer_object @@ -0,0 +1,12 @@ +GL_NV_parameter_buffer_object +http://developer.download.nvidia.com/opengl/specs/GL_NV_parameter_buffer_object.txt +GL_NV_parameter_buffer_object + + GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 + GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 + GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 + GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 + GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 + void glProgramBufferParametersfvNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params) + void glProgramBufferParametersIivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params) + void glProgramBufferParametersIuivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_present_video b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_present_video new file mode 100644 index 0000000..1a5b8ce --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_present_video @@ -0,0 +1,16 @@ +GL_NV_present_video +http://www.opengl.org/registry/specs/NV/present_video.txt +GL_NV_present_video + + GL_FRAME_NV 0x8E26 + GL_FIELDS_NV 0x8E27 + GL_CURRENT_TIME_NV 0x8E28 + GL_NUM_FILL_STREAMS_NV 0x8E29 + GL_PRESENT_TIME_NV 0x8E2A + GL_PRESENT_DURATION_NV 0x8E2B + void glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT* params) + void glGetVideoivNV (GLuint video_slot, GLenum pname, GLint* params) + void glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT* params) + void glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint* params) + void glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3) + void glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_sample_locations b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_sample_locations new file mode 100644 index 0000000..f3dfc98 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_sample_locations @@ -0,0 +1,15 @@ +GL_NV_sample_locations +https://www.khronos.org/registry/OpenGL/extensions/NV/NV_sample_locations.txt +GL_NV_sample_locations + + GL_SAMPLE_LOCATION_NV 0x8E50 + GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D + GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E + GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F + GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340 + GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341 + GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342 + GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343 + void glFramebufferSampleLocationsfvNV (GLenum target, GLuint start, GLsizei count, const GLfloat* v) + void glNamedFramebufferSampleLocationsfvNV (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat* v) + void glResolveDepthValuesNV (void) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_tessellation_program5 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_tessellation_program5 new file mode 100644 index 0000000..75fd3c7 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_tessellation_program5 @@ -0,0 +1,9 @@ +GL_NV_tessellation_program5 +http://www.opengl.org/registry/specs/NV/tessellation_program5.txt +GL_NV_gpu_program5 + + GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 + GL_TESS_CONTROL_PROGRAM_NV 0x891E + GL_TESS_EVALUATION_PROGRAM_NV 0x891F + GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 + GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_transform_feedback b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_transform_feedback new file mode 100644 index 0000000..5f1816e --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_transform_feedback @@ -0,0 +1,40 @@ +GL_NV_transform_feedback +http://developer.download.nvidia.com/opengl/specs/GL_NV_transform_feedback.txt +GL_NV_transform_feedback + + GL_BACK_PRIMARY_COLOR_NV 0x8C77 + GL_BACK_SECONDARY_COLOR_NV 0x8C78 + GL_TEXTURE_COORD_NV 0x8C79 + GL_CLIP_DISTANCE_NV 0x8C7A + GL_VERTEX_ID_NV 0x8C7B + GL_PRIMITIVE_ID_NV 0x8C7C + GL_GENERIC_ATTRIB_NV 0x8C7D + GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E + GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F + GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 + GL_ACTIVE_VARYINGS_NV 0x8C81 + GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 + GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 + GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 + GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 + GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 + GL_PRIMITIVES_GENERATED_NV 0x8C87 + GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 + GL_RASTERIZER_DISCARD_NV 0x8C89 + GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A + GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B + GL_INTERLEAVED_ATTRIBS_NV 0x8C8C + GL_SEPARATE_ATTRIBS_NV 0x8C8D + GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E + GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F + void glBeginTransformFeedbackNV (GLenum primitiveMode) + void glEndTransformFeedbackNV (void) + void glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode) + void glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) + void glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset) + void glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer) + void glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode) + void glActiveVaryingNV (GLuint program, const GLchar *name) + GLint glGetVaryingLocationNV (GLuint program, const GLchar *name) + void glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name) + void glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_vdpau_interop b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_vdpau_interop new file mode 100644 index 0000000..f52949c --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_vdpau_interop @@ -0,0 +1,19 @@ +GL_NV_vdpau_interop +http://www.opengl.org/registry/specs/NV/vdpau_interop.txt +GL_NV_vdpau_interop + + GL_SURFACE_STATE_NV 0x86EB + GL_SURFACE_REGISTERED_NV 0x86FD + GL_SURFACE_MAPPED_NV 0x8700 + GL_WRITE_DISCARD_NV 0x88BE + void glVDPAUFiniNV (void) + void glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei* length, GLint *values) + void glVDPAUInitNV (const void* vdpDevice, const void*getProcAddress) + void glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface) + void glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV* surfaces) + GLvdpauSurfaceNV glVDPAURegisterOutputSurfaceNV (const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames) + GLvdpauSurfaceNV glVDPAURegisterVideoSurfaceNV (const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames) + void glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access) + void glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV* surfaces) + void glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface) + typedef GLintptr GLvdpauSurfaceNV diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_vertex_program2_option b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_vertex_program2_option new file mode 100644 index 0000000..3e3e0b7 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_vertex_program2_option @@ -0,0 +1,6 @@ +GL_NV_vertex_program2_option +http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_vertex_program2_option.txt +GL_NV_vertex_program2_option + + GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 + GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_vertex_program3 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_vertex_program3 new file mode 100644 index 0000000..fbd3899 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_vertex_program3 @@ -0,0 +1,5 @@ +GL_NV_vertex_program3 +http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_vertex_program3.txt +GL_NV_vertex_program3 + + MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_vertex_program4 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_vertex_program4 new file mode 100644 index 0000000..b1ff7f8 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_NV_vertex_program4 @@ -0,0 +1,5 @@ +GL_NV_vertex_program4 +http://developer.download.nvidia.com/opengl/specs/GL_NV_vertex_program4.txt +GL_NV_gpu_program4 + + GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_SGIX_shadow b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_SGIX_shadow new file mode 100644 index 0000000..3580721 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_SGIX_shadow @@ -0,0 +1,8 @@ +GL_SGIX_shadow +http://oss.sgi.com/projects/ogl-sample/registry/SGIX/shadow.txt +GL_SGIX_shadow + + GL_TEXTURE_COMPARE_SGIX 0x819A + GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B + GL_TEXTURE_LEQUAL_R_SGIX 0x819C + GL_TEXTURE_GEQUAL_R_SGIX 0x819D diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_SUN_read_video_pixels b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_SUN_read_video_pixels new file mode 100644 index 0000000..871e6f9 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_SUN_read_video_pixels @@ -0,0 +1,5 @@ +GL_SUN_read_video_pixels +http://wwws.sun.com/software/graphics/opengl/extensions/gl_sun_read_video_pixels.txt +GL_SUN_read_video_pixels + + void glReadVideoPixelsSUN (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_2 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_2 new file mode 100644 index 0000000..fe610b6 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_2 @@ -0,0 +1,50 @@ +GL_VERSION_1_2 +http://www.opengl.org/documentation/specs/version1.2/opengl1.2.1.pdf + + + GL_UNSIGNED_BYTE_3_3_2 0x8032 + GL_UNSIGNED_SHORT_4_4_4_4 0x8033 + GL_UNSIGNED_SHORT_5_5_5_1 0x8034 + GL_UNSIGNED_INT_8_8_8_8 0x8035 + GL_UNSIGNED_INT_10_10_10_2 0x8036 + GL_RESCALE_NORMAL 0x803A + GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 + GL_UNSIGNED_SHORT_5_6_5 0x8363 + GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 + GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 + GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 + GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 + GL_BGR 0x80E0 + GL_BGRA 0x80E1 + GL_MAX_ELEMENTS_VERTICES 0x80E8 + GL_MAX_ELEMENTS_INDICES 0x80E9 + GL_CLAMP_TO_EDGE 0x812F + GL_TEXTURE_MIN_LOD 0x813A + GL_TEXTURE_MAX_LOD 0x813B + GL_TEXTURE_BASE_LEVEL 0x813C + GL_TEXTURE_MAX_LEVEL 0x813D + GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 + GL_SINGLE_COLOR 0x81F9 + GL_SEPARATE_SPECULAR_COLOR 0x81FA + GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 + GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 + GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 + GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 + GL_ALIASED_POINT_SIZE_RANGE 0x846D + GL_ALIASED_LINE_WIDTH_RANGE 0x846E + GL_PACK_SKIP_IMAGES 0x806B + GL_PACK_IMAGE_HEIGHT 0x806C + GL_UNPACK_SKIP_IMAGES 0x806D + GL_UNPACK_IMAGE_HEIGHT 0x806E + GL_TEXTURE_3D 0x806F + GL_PROXY_TEXTURE_3D 0x8070 + GL_TEXTURE_DEPTH 0x8071 + GL_TEXTURE_WRAP_R 0x8072 + GL_MAX_3D_TEXTURE_SIZE 0x8073 + GL_TEXTURE_BINDING_3D 0x806A + GL_MAX_ELEMENTS_VERTICES 0x80E8 + GL_MAX_ELEMENTS_INDICES 0x80E9 + void glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices) + void glTexImage3D (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels) + void glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels) + void glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_2_1 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_2_1 new file mode 100644 index 0000000..42634cb --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_2_1 @@ -0,0 +1,4 @@ +GL_VERSION_1_2_1 +http://www.opengl.org/documentation/specs/version1.2/opengl1.2.1.pdf + + diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_3 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_3 new file mode 100644 index 0000000..d6342fa --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_3 @@ -0,0 +1,147 @@ +GL_VERSION_1_3 +http://www.opengl.org/documentation/specs/version1.3/glspec13.pdf + + + GL_TEXTURE0 0x84C0 + GL_TEXTURE1 0x84C1 + GL_TEXTURE2 0x84C2 + GL_TEXTURE3 0x84C3 + GL_TEXTURE4 0x84C4 + GL_TEXTURE5 0x84C5 + GL_TEXTURE6 0x84C6 + GL_TEXTURE7 0x84C7 + GL_TEXTURE8 0x84C8 + GL_TEXTURE9 0x84C9 + GL_TEXTURE10 0x84CA + GL_TEXTURE11 0x84CB + GL_TEXTURE12 0x84CC + GL_TEXTURE13 0x84CD + GL_TEXTURE14 0x84CE + GL_TEXTURE15 0x84CF + GL_TEXTURE16 0x84D0 + GL_TEXTURE17 0x84D1 + GL_TEXTURE18 0x84D2 + GL_TEXTURE19 0x84D3 + GL_TEXTURE20 0x84D4 + GL_TEXTURE21 0x84D5 + GL_TEXTURE22 0x84D6 + GL_TEXTURE23 0x84D7 + GL_TEXTURE24 0x84D8 + GL_TEXTURE25 0x84D9 + GL_TEXTURE26 0x84DA + GL_TEXTURE27 0x84DB + GL_TEXTURE28 0x84DC + GL_TEXTURE29 0x84DD + GL_TEXTURE30 0x84DE + GL_TEXTURE31 0x84DF + GL_ACTIVE_TEXTURE 0x84E0 + GL_CLIENT_ACTIVE_TEXTURE 0x84E1 + GL_MAX_TEXTURE_UNITS 0x84E2 + GL_NORMAL_MAP 0x8511 + GL_REFLECTION_MAP 0x8512 + GL_TEXTURE_CUBE_MAP 0x8513 + GL_TEXTURE_BINDING_CUBE_MAP 0x8514 + GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 + GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 + GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 + GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 + GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A + GL_PROXY_TEXTURE_CUBE_MAP 0x851B + GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C + GL_COMPRESSED_ALPHA 0x84E9 + GL_COMPRESSED_LUMINANCE 0x84EA + GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB + GL_COMPRESSED_INTENSITY 0x84EC + GL_COMPRESSED_RGB 0x84ED + GL_COMPRESSED_RGBA 0x84EE + GL_TEXTURE_COMPRESSION_HINT 0x84EF + GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 + GL_TEXTURE_COMPRESSED 0x86A1 + GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 + GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 + GL_MULTISAMPLE 0x809D + GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E + GL_SAMPLE_ALPHA_TO_ONE 0x809F + GL_SAMPLE_COVERAGE 0x80A0 + GL_SAMPLE_BUFFERS 0x80A8 + GL_SAMPLES 0x80A9 + GL_SAMPLE_COVERAGE_VALUE 0x80AA + GL_SAMPLE_COVERAGE_INVERT 0x80AB + GL_MULTISAMPLE_BIT 0x20000000 + GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 + GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 + GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 + GL_TRANSPOSE_COLOR_MATRIX 0x84E6 + GL_COMBINE 0x8570 + GL_COMBINE_RGB 0x8571 + GL_COMBINE_ALPHA 0x8572 + GL_SOURCE0_RGB 0x8580 + GL_SOURCE1_RGB 0x8581 + GL_SOURCE2_RGB 0x8582 + GL_SOURCE0_ALPHA 0x8588 + GL_SOURCE1_ALPHA 0x8589 + GL_SOURCE2_ALPHA 0x858A + GL_OPERAND0_RGB 0x8590 + GL_OPERAND1_RGB 0x8591 + GL_OPERAND2_RGB 0x8592 + GL_OPERAND0_ALPHA 0x8598 + GL_OPERAND1_ALPHA 0x8599 + GL_OPERAND2_ALPHA 0x859A + GL_RGB_SCALE 0x8573 + GL_ADD_SIGNED 0x8574 + GL_INTERPOLATE 0x8575 + GL_SUBTRACT 0x84E7 + GL_CONSTANT 0x8576 + GL_PRIMARY_COLOR 0x8577 + GL_PREVIOUS 0x8578 + GL_DOT3_RGB 0x86AE + GL_DOT3_RGBA 0x86AF + GL_CLAMP_TO_BORDER 0x812D + + void glActiveTexture (GLenum texture) + void glClientActiveTexture (GLenum texture) + void glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data) + void glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data) + void glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data) + void glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data) + void glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data) + void glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data) + void glGetCompressedTexImage (GLenum target, GLint lod, void *img) + void glLoadTransposeMatrixd (const GLdouble m[16]) + void glLoadTransposeMatrixf (const GLfloat m[16]) + void glMultTransposeMatrixd (const GLdouble m[16]) + void glMultTransposeMatrixf (const GLfloat m[16]) + void glMultiTexCoord1d (GLenum target, GLdouble s) + void glMultiTexCoord1dv (GLenum target, const GLdouble *v) + void glMultiTexCoord1f (GLenum target, GLfloat s) + void glMultiTexCoord1fv (GLenum target, const GLfloat *v) + void glMultiTexCoord1i (GLenum target, GLint s) + void glMultiTexCoord1iv (GLenum target, const GLint *v) + void glMultiTexCoord1s (GLenum target, GLshort s) + void glMultiTexCoord1sv (GLenum target, const GLshort *v) + void glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t) + void glMultiTexCoord2dv (GLenum target, const GLdouble *v) + void glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t) + void glMultiTexCoord2fv (GLenum target, const GLfloat *v) + void glMultiTexCoord2i (GLenum target, GLint s, GLint t) + void glMultiTexCoord2iv (GLenum target, const GLint *v) + void glMultiTexCoord2s (GLenum target, GLshort s, GLshort t) + void glMultiTexCoord2sv (GLenum target, const GLshort *v) + void glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r) + void glMultiTexCoord3dv (GLenum target, const GLdouble *v) + void glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r) + void glMultiTexCoord3fv (GLenum target, const GLfloat *v) + void glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r) + void glMultiTexCoord3iv (GLenum target, const GLint *v) + void glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r) + void glMultiTexCoord3sv (GLenum target, const GLshort *v) + void glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) + void glMultiTexCoord4dv (GLenum target, const GLdouble *v) + void glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) + void glMultiTexCoord4fv (GLenum target, const GLfloat *v) + void glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q) + void glMultiTexCoord4iv (GLenum target, const GLint *v) + void glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) + void glMultiTexCoord4sv (GLenum target, const GLshort *v) + void glSampleCoverage (GLclampf value, GLboolean invert) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_4 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_4 new file mode 100644 index 0000000..8d0724a --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_4 @@ -0,0 +1,90 @@ +GL_VERSION_1_4 +http://www.opengl.org/documentation/specs/version1.4/glspec14.pdf + + + GL_GENERATE_MIPMAP 0x8191 + GL_GENERATE_MIPMAP_HINT 0x8192 + GL_DEPTH_COMPONENT16 0x81A5 + GL_DEPTH_COMPONENT24 0x81A6 + GL_DEPTH_COMPONENT32 0x81A7 + GL_TEXTURE_DEPTH_SIZE 0x884A + GL_DEPTH_TEXTURE_MODE 0x884B + GL_TEXTURE_COMPARE_MODE 0x884C + GL_TEXTURE_COMPARE_FUNC 0x884D + GL_COMPARE_R_TO_TEXTURE 0x884E + GL_FOG_COORDINATE_SOURCE 0x8450 + GL_FOG_COORDINATE 0x8451 + GL_FRAGMENT_DEPTH 0x8452 + GL_CURRENT_FOG_COORDINATE 0x8453 + GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 + GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 + GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 + GL_FOG_COORDINATE_ARRAY 0x8457 + GL_POINT_SIZE_MIN 0x8126 + GL_POINT_SIZE_MAX 0x8127 + GL_POINT_FADE_THRESHOLD_SIZE 0x8128 + GL_POINT_DISTANCE_ATTENUATION 0x8129 + GL_COLOR_SUM 0x8458 + GL_CURRENT_SECONDARY_COLOR 0x8459 + GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A + GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B + GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C + GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D + GL_SECONDARY_COLOR_ARRAY 0x845E + GL_BLEND_DST_RGB 0x80C8 + GL_BLEND_SRC_RGB 0x80C9 + GL_BLEND_DST_ALPHA 0x80CA + GL_BLEND_SRC_ALPHA 0x80CB + GL_INCR_WRAP 0x8507 + GL_DECR_WRAP 0x8508 + GL_TEXTURE_FILTER_CONTROL 0x8500 + GL_TEXTURE_LOD_BIAS 0x8501 + GL_MAX_TEXTURE_LOD_BIAS 0x84FD + GL_MIRRORED_REPEAT 0x8370 + void glBlendEquation (GLenum mode) + void glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) + void glFogCoordf (GLfloat coord) + void glFogCoordfv (const GLfloat *coord) + void glFogCoordd (GLdouble coord) + void glFogCoorddv (const GLdouble *coord) + void glFogCoordPointer (GLenum type, GLsizei stride, const void *pointer) + void glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount) + void glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const* indices, GLsizei drawcount) + void glPointParameteri (GLenum pname, GLint param) + void glPointParameteriv (GLenum pname, const GLint *params) + void glPointParameterf (GLenum pname, GLfloat param) + void glPointParameterfv (GLenum pname, const GLfloat *params) + void glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue) + void glSecondaryColor3bv (const GLbyte *v) + void glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue) + void glSecondaryColor3dv (const GLdouble *v) + void glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue) + void glSecondaryColor3fv (const GLfloat *v) + void glSecondaryColor3i (GLint red, GLint green, GLint blue) + void glSecondaryColor3iv (const GLint *v) + void glSecondaryColor3s (GLshort red, GLshort green, GLshort blue) + void glSecondaryColor3sv (const GLshort *v) + void glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue) + void glSecondaryColor3ubv (const GLubyte *v) + void glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue) + void glSecondaryColor3uiv (const GLuint *v) + void glSecondaryColor3us (GLushort red, GLushort green, GLushort blue) + void glSecondaryColor3usv (const GLushort *v) + void glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer) + void glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) + void glWindowPos2d (GLdouble x, GLdouble y) + void glWindowPos2f (GLfloat x, GLfloat y) + void glWindowPos2i (GLint x, GLint y) + void glWindowPos2s (GLshort x, GLshort y) + void glWindowPos2dv (const GLdouble *p) + void glWindowPos2fv (const GLfloat *p) + void glWindowPos2iv (const GLint *p) + void glWindowPos2sv (const GLshort *p) + void glWindowPos3d (GLdouble x, GLdouble y, GLdouble z) + void glWindowPos3f (GLfloat x, GLfloat y, GLfloat z) + void glWindowPos3i (GLint x, GLint y, GLint z) + void glWindowPos3s (GLshort x, GLshort y, GLshort z) + void glWindowPos3dv (const GLdouble *p) + void glWindowPos3fv (const GLfloat *p) + void glWindowPos3iv (const GLint *p) + void glWindowPos3sv (const GLshort *p) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_5 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_5 new file mode 100644 index 0000000..439ecb6 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_1_5 @@ -0,0 +1,75 @@ +GL_VERSION_1_5 +http://www.opengl.org/documentation/specs/version1.5/glspec15.pdf + + + GL_BUFFER_SIZE 0x8764 + GL_BUFFER_USAGE 0x8765 + GL_QUERY_COUNTER_BITS 0x8864 + GL_CURRENT_QUERY 0x8865 + GL_QUERY_RESULT 0x8866 + GL_QUERY_RESULT_AVAILABLE 0x8867 + GL_ARRAY_BUFFER 0x8892 + GL_ELEMENT_ARRAY_BUFFER 0x8893 + GL_ARRAY_BUFFER_BINDING 0x8894 + GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 + GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 + GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 + GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 + GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 + GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A + GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B + GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C + GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D + GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E + GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F + GL_READ_ONLY 0x88B8 + GL_WRITE_ONLY 0x88B9 + GL_READ_WRITE 0x88BA + GL_BUFFER_ACCESS 0x88BB + GL_BUFFER_MAPPED 0x88BC + GL_BUFFER_MAP_POINTER 0x88BD + GL_STREAM_DRAW 0x88E0 + GL_STREAM_READ 0x88E1 + GL_STREAM_COPY 0x88E2 + GL_STATIC_DRAW 0x88E4 + GL_STATIC_READ 0x88E5 + GL_STATIC_COPY 0x88E6 + GL_DYNAMIC_DRAW 0x88E8 + GL_DYNAMIC_READ 0x88E9 + GL_DYNAMIC_COPY 0x88EA + GL_SAMPLES_PASSED 0x8914 + GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE + GL_FOG_COORD GL_FOG_COORDINATE + GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE + GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE + GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE + GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER + GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY + GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING + GL_SRC0_RGB GL_SOURCE0_RGB + GL_SRC1_RGB GL_SOURCE1_RGB + GL_SRC2_RGB GL_SOURCE2_RGB + GL_SRC0_ALPHA GL_SOURCE0_ALPHA + GL_SRC1_ALPHA GL_SOURCE1_ALPHA + GL_SRC2_ALPHA GL_SOURCE2_ALPHA + void glGenQueries (GLsizei n, GLuint* ids) + void glDeleteQueries (GLsizei n, const GLuint* ids) + GLboolean glIsQuery (GLuint id) + void glBeginQuery (GLenum target, GLuint id) + void glEndQuery (GLenum target) + void glGetQueryiv (GLenum target, GLenum pname, GLint* params) + void glGetQueryObjectiv (GLuint id, GLenum pname, GLint* params) + void glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint* params) + void glBindBuffer (GLenum target, GLuint buffer) + void glDeleteBuffers (GLsizei n, const GLuint* buffers) + void glGenBuffers (GLsizei n, GLuint* buffers) + GLboolean glIsBuffer (GLuint buffer) + void glBufferData (GLenum target, GLsizeiptr size, const void* data, GLenum usage) + void glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void* data) + void glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void* data) + void* glMapBuffer (GLenum target, GLenum access) + GLboolean glUnmapBuffer (GLenum target) + void glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params) + void glGetBufferPointerv (GLenum target, GLenum pname, void** params) + typedef ptrdiff_t GLsizeiptr + typedef ptrdiff_t GLintptr diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_2_0 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_2_0 new file mode 100644 index 0000000..e52d96c --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_2_0 @@ -0,0 +1,181 @@ +GL_VERSION_2_0 +http://www.opengl.org/documentation/specs/version2.0/glspec20.pdf + + + GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION + GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 + GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 + GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 + GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 + GL_CURRENT_VERTEX_ATTRIB 0x8626 + GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 + GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 + GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 + GL_STENCIL_BACK_FUNC 0x8800 + GL_STENCIL_BACK_FAIL 0x8801 + GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 + GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 + GL_MAX_DRAW_BUFFERS 0x8824 + GL_DRAW_BUFFER0 0x8825 + GL_DRAW_BUFFER1 0x8826 + GL_DRAW_BUFFER2 0x8827 + GL_DRAW_BUFFER3 0x8828 + GL_DRAW_BUFFER4 0x8829 + GL_DRAW_BUFFER5 0x882A + GL_DRAW_BUFFER6 0x882B + GL_DRAW_BUFFER7 0x882C + GL_DRAW_BUFFER8 0x882D + GL_DRAW_BUFFER9 0x882E + GL_DRAW_BUFFER10 0x882F + GL_DRAW_BUFFER11 0x8830 + GL_DRAW_BUFFER12 0x8831 + GL_DRAW_BUFFER13 0x8832 + GL_DRAW_BUFFER14 0x8833 + GL_DRAW_BUFFER15 0x8834 + GL_BLEND_EQUATION_ALPHA 0x883D + GL_POINT_SPRITE 0x8861 + GL_COORD_REPLACE 0x8862 + GL_MAX_VERTEX_ATTRIBS 0x8869 + GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A + GL_MAX_TEXTURE_COORDS 0x8871 + GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 + GL_FRAGMENT_SHADER 0x8B30 + GL_VERTEX_SHADER 0x8B31 + GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 + GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A + GL_MAX_VARYING_FLOATS 0x8B4B + GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C + GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D + GL_SHADER_TYPE 0x8B4F + GL_FLOAT_VEC2 0x8B50 + GL_FLOAT_VEC3 0x8B51 + GL_FLOAT_VEC4 0x8B52 + GL_INT_VEC2 0x8B53 + GL_INT_VEC3 0x8B54 + GL_INT_VEC4 0x8B55 + GL_BOOL 0x8B56 + GL_BOOL_VEC2 0x8B57 + GL_BOOL_VEC3 0x8B58 + GL_BOOL_VEC4 0x8B59 + GL_FLOAT_MAT2 0x8B5A + GL_FLOAT_MAT3 0x8B5B + GL_FLOAT_MAT4 0x8B5C + GL_SAMPLER_1D 0x8B5D + GL_SAMPLER_2D 0x8B5E + GL_SAMPLER_3D 0x8B5F + GL_SAMPLER_CUBE 0x8B60 + GL_SAMPLER_1D_SHADOW 0x8B61 + GL_SAMPLER_2D_SHADOW 0x8B62 + GL_DELETE_STATUS 0x8B80 + GL_COMPILE_STATUS 0x8B81 + GL_LINK_STATUS 0x8B82 + GL_VALIDATE_STATUS 0x8B83 + GL_INFO_LOG_LENGTH 0x8B84 + GL_ATTACHED_SHADERS 0x8B85 + GL_ACTIVE_UNIFORMS 0x8B86 + GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 + GL_SHADER_SOURCE_LENGTH 0x8B88 + GL_ACTIVE_ATTRIBUTES 0x8B89 + GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A + GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B + GL_SHADING_LANGUAGE_VERSION 0x8B8C + GL_CURRENT_PROGRAM 0x8B8D + GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 + GL_LOWER_LEFT 0x8CA1 + GL_UPPER_LEFT 0x8CA2 + GL_STENCIL_BACK_REF 0x8CA3 + GL_STENCIL_BACK_VALUE_MASK 0x8CA4 + GL_STENCIL_BACK_WRITEMASK 0x8CA5 + void glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha) + void glDrawBuffers (GLsizei n, const GLenum* bufs) + void glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) + void glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask) + void glStencilMaskSeparate (GLenum face, GLuint mask) + void glAttachShader (GLuint program, GLuint shader) + void glBindAttribLocation (GLuint program, GLuint index, const GLchar* name) + void glCompileShader (GLuint shader) + GLuint glCreateProgram (void) + GLuint glCreateShader (GLenum type) + void glDeleteProgram (GLuint program) + void glDeleteShader (GLuint shader) + void glDetachShader (GLuint program, GLuint shader) + void glDisableVertexAttribArray (GLuint index) + void glEnableVertexAttribArray (GLuint index) + void glGetActiveAttrib (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name) + void glGetActiveUniform (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name) + void glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei* count, GLuint* shaders) + GLint glGetAttribLocation (GLuint program, const GLchar* name) + void glGetProgramiv (GLuint program, GLenum pname, GLint* param) + void glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) + void glGetShaderiv (GLuint shader, GLenum pname, GLint* param) + void glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) + void glShaderSource (GLuint shader, GLsizei count, const GLchar *const* string, const GLint* length) + GLint glGetUniformLocation (GLuint program, const GLchar* name) + void glGetUniformfv (GLuint program, GLint location, GLfloat* params) + void glGetUniformiv (GLuint program, GLint location, GLint* params) + void glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble* params) + void glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params) + void glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params) + void glGetVertexAttribPointerv (GLuint index, GLenum pname, void** pointer) + GLboolean glIsProgram (GLuint program) + GLboolean glIsShader (GLuint shader) + void glLinkProgram (GLuint program) + void glGetShaderSource (GLuint obj, GLsizei maxLength, GLsizei* length, GLchar* source) + void glUseProgram (GLuint program) + void glUniform1f (GLint location, GLfloat v0) + void glUniform1fv (GLint location, GLsizei count, const GLfloat* value) + void glUniform1i (GLint location, GLint v0) + void glUniform1iv (GLint location, GLsizei count, const GLint* value) + void glUniform2f (GLint location, GLfloat v0, GLfloat v1) + void glUniform2fv (GLint location, GLsizei count, const GLfloat* value) + void glUniform2i (GLint location, GLint v0, GLint v1) + void glUniform2iv (GLint location, GLsizei count, const GLint* value) + void glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2) + void glUniform3fv (GLint location, GLsizei count, const GLfloat* value) + void glUniform3i (GLint location, GLint v0, GLint v1, GLint v2) + void glUniform3iv (GLint location, GLsizei count, const GLint* value) + void glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) + void glUniform4fv (GLint location, GLsizei count, const GLfloat* value) + void glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3) + void glUniform4iv (GLint location, GLsizei count, const GLint* value) + void glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) + void glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) + void glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) + void glValidateProgram (GLuint program) + void glVertexAttrib1d (GLuint index, GLdouble x) + void glVertexAttrib1dv (GLuint index, const GLdouble* v) + void glVertexAttrib1f (GLuint index, GLfloat x) + void glVertexAttrib1fv (GLuint index, const GLfloat* v) + void glVertexAttrib1s (GLuint index, GLshort x) + void glVertexAttrib1sv (GLuint index, const GLshort* v) + void glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y) + void glVertexAttrib2dv (GLuint index, const GLdouble* v) + void glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y) + void glVertexAttrib2fv (GLuint index, const GLfloat* v) + void glVertexAttrib2s (GLuint index, GLshort x, GLshort y) + void glVertexAttrib2sv (GLuint index, const GLshort* v) + void glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z) + void glVertexAttrib3dv (GLuint index, const GLdouble* v) + void glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z) + void glVertexAttrib3fv (GLuint index, const GLfloat* v) + void glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z) + void glVertexAttrib3sv (GLuint index, const GLshort* v) + void glVertexAttrib4Nbv (GLuint index, const GLbyte* v) + void glVertexAttrib4Niv (GLuint index, const GLint* v) + void glVertexAttrib4Nsv (GLuint index, const GLshort* v) + void glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) + void glVertexAttrib4Nubv (GLuint index, const GLubyte* v) + void glVertexAttrib4Nuiv (GLuint index, const GLuint* v) + void glVertexAttrib4Nusv (GLuint index, const GLushort* v) + void glVertexAttrib4bv (GLuint index, const GLbyte* v) + void glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) + void glVertexAttrib4dv (GLuint index, const GLdouble* v) + void glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) + void glVertexAttrib4fv (GLuint index, const GLfloat* v) + void glVertexAttrib4iv (GLuint index, const GLint* v) + void glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) + void glVertexAttrib4sv (GLuint index, const GLshort* v) + void glVertexAttrib4ubv (GLuint index, const GLubyte* v) + void glVertexAttrib4uiv (GLuint index, const GLuint* v) + void glVertexAttrib4usv (GLuint index, const GLushort* v) + void glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_2_1 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_2_1 new file mode 100644 index 0000000..88ecce8 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_2_1 @@ -0,0 +1,33 @@ +GL_VERSION_2_1 +http://www.opengl.org/documentation/specs/version2.1/glspec21.pdf + + + GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F + GL_PIXEL_PACK_BUFFER 0x88EB + GL_PIXEL_UNPACK_BUFFER 0x88EC + GL_PIXEL_PACK_BUFFER_BINDING 0x88ED + GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF + GL_FLOAT_MAT2x3 0x8B65 + GL_FLOAT_MAT2x4 0x8B66 + GL_FLOAT_MAT3x2 0x8B67 + GL_FLOAT_MAT3x4 0x8B68 + GL_FLOAT_MAT4x2 0x8B69 + GL_FLOAT_MAT4x3 0x8B6A + GL_SRGB 0x8C40 + GL_SRGB8 0x8C41 + GL_SRGB_ALPHA 0x8C42 + GL_SRGB8_ALPHA8 0x8C43 + GL_SLUMINANCE_ALPHA 0x8C44 + GL_SLUMINANCE8_ALPHA8 0x8C45 + GL_SLUMINANCE 0x8C46 + GL_SLUMINANCE8 0x8C47 + GL_COMPRESSED_SRGB 0x8C48 + GL_COMPRESSED_SRGB_ALPHA 0x8C49 + GL_COMPRESSED_SLUMINANCE 0x8C4A + GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B + void glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) + void glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) + void glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) + void glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) + void glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) + void glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_3_0 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_3_0 new file mode 100644 index 0000000..4be5db0 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_3_0 @@ -0,0 +1,164 @@ +GL_VERSION_3_0 +https://www.opengl.org/registry/doc/glspec30.20080923.pdf + +GL_ARB_framebuffer_object GL_ARB_map_buffer_range GL_ARB_uniform_buffer_object GL_ARB_vertex_array_object + GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_R_TO_TEXTURE_ARB + GL_CLIP_DISTANCE0 GL_CLIP_PLANE0 + GL_CLIP_DISTANCE1 GL_CLIP_PLANE1 + GL_CLIP_DISTANCE2 GL_CLIP_PLANE2 + GL_CLIP_DISTANCE3 GL_CLIP_PLANE3 + GL_CLIP_DISTANCE4 GL_CLIP_PLANE4 + GL_CLIP_DISTANCE5 GL_CLIP_PLANE5 + GL_MAX_CLIP_DISTANCES GL_MAX_CLIP_PLANES + GL_MAJOR_VERSION 0x821B + GL_MINOR_VERSION 0x821C + GL_NUM_EXTENSIONS 0x821D + GL_CONTEXT_FLAGS 0x821E + GL_DEPTH_BUFFER 0x8223 + GL_STENCIL_BUFFER 0x8224 + GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001 + GL_RGBA32F 0x8814 + GL_RGB32F 0x8815 + GL_RGBA16F 0x881A + GL_RGB16F 0x881B + GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD + GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF + GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 + GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 + GL_CLAMP_VERTEX_COLOR 0x891A + GL_CLAMP_FRAGMENT_COLOR 0x891B + GL_CLAMP_READ_COLOR 0x891C + GL_FIXED_ONLY 0x891D + GL_MAX_VARYING_COMPONENTS GL_MAX_VARYING_FLOATS + GL_TEXTURE_RED_TYPE 0x8C10 + GL_TEXTURE_GREEN_TYPE 0x8C11 + GL_TEXTURE_BLUE_TYPE 0x8C12 + GL_TEXTURE_ALPHA_TYPE 0x8C13 + GL_TEXTURE_LUMINANCE_TYPE 0x8C14 + GL_TEXTURE_INTENSITY_TYPE 0x8C15 + GL_TEXTURE_DEPTH_TYPE 0x8C16 + GL_TEXTURE_1D_ARRAY 0x8C18 + GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 + GL_TEXTURE_2D_ARRAY 0x8C1A + GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B + GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C + GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D + GL_R11F_G11F_B10F 0x8C3A + GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B + GL_RGB9_E5 0x8C3D + GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E + GL_TEXTURE_SHARED_SIZE 0x8C3F + GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 + GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F + GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 + GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 + GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 + GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 + GL_PRIMITIVES_GENERATED 0x8C87 + GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 + GL_RASTERIZER_DISCARD 0x8C89 + GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A + GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B + GL_INTERLEAVED_ATTRIBS 0x8C8C + GL_SEPARATE_ATTRIBS 0x8C8D + GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E + GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F + GL_RGBA32UI 0x8D70 + GL_RGB32UI 0x8D71 + GL_RGBA16UI 0x8D76 + GL_RGB16UI 0x8D77 + GL_RGBA8UI 0x8D7C + GL_RGB8UI 0x8D7D + GL_RGBA32I 0x8D82 + GL_RGB32I 0x8D83 + GL_RGBA16I 0x8D88 + GL_RGB16I 0x8D89 + GL_RGBA8I 0x8D8E + GL_RGB8I 0x8D8F + GL_RED_INTEGER 0x8D94 + GL_GREEN_INTEGER 0x8D95 + GL_BLUE_INTEGER 0x8D96 + GL_ALPHA_INTEGER 0x8D97 + GL_RGB_INTEGER 0x8D98 + GL_RGBA_INTEGER 0x8D99 + GL_BGR_INTEGER 0x8D9A + GL_BGRA_INTEGER 0x8D9B + GL_SAMPLER_1D_ARRAY 0x8DC0 + GL_SAMPLER_2D_ARRAY 0x8DC1 + GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 + GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 + GL_SAMPLER_CUBE_SHADOW 0x8DC5 + GL_UNSIGNED_INT_VEC2 0x8DC6 + GL_UNSIGNED_INT_VEC3 0x8DC7 + GL_UNSIGNED_INT_VEC4 0x8DC8 + GL_INT_SAMPLER_1D 0x8DC9 + GL_INT_SAMPLER_2D 0x8DCA + GL_INT_SAMPLER_3D 0x8DCB + GL_INT_SAMPLER_CUBE 0x8DCC + GL_INT_SAMPLER_1D_ARRAY 0x8DCE + GL_INT_SAMPLER_2D_ARRAY 0x8DCF + GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 + GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 + GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 + GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 + GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 + GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 + GL_QUERY_WAIT 0x8E13 + GL_QUERY_NO_WAIT 0x8E14 + GL_QUERY_BY_REGION_WAIT 0x8E15 + GL_QUERY_BY_REGION_NO_WAIT 0x8E16 + void glColorMaski (GLuint buf, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) + void glGetBooleani_v (GLenum pname, GLuint index, GLboolean* data) + void glEnablei (GLenum cap, GLuint index) + void glDisablei (GLenum cap, GLuint index) + GLboolean glIsEnabledi (GLenum cap, GLuint index) + void glBeginTransformFeedback (GLenum primitiveMode) + void glEndTransformFeedback (void) + void glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode) + void glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name) + void glClampColor (GLenum target, GLenum clamp) + void glBeginConditionalRender (GLuint id, GLenum mode) + void glEndConditionalRender (void) + void glVertexAttribI1i (GLuint index, GLint v0) + void glVertexAttribI2i (GLuint index, GLint v0, GLint v1) + void glVertexAttribI3i (GLuint index, GLint v0, GLint v1, GLint v2) + void glVertexAttribI4i (GLuint index, GLint v0, GLint v1, GLint v2, GLint v3) + void glVertexAttribI1ui (GLuint index, GLuint v0) + void glVertexAttribI2ui (GLuint index, GLuint v0, GLuint v1) + void glVertexAttribI3ui (GLuint index, GLuint v0, GLuint v1, GLuint v2) + void glVertexAttribI4ui (GLuint index, GLuint v0, GLuint v1, GLuint v2, GLuint v3) + void glVertexAttribI1iv (GLuint index, const GLint* v0) + void glVertexAttribI2iv (GLuint index, const GLint* v0) + void glVertexAttribI3iv (GLuint index, const GLint* v0) + void glVertexAttribI4iv (GLuint index, const GLint* v0) + void glVertexAttribI1uiv (GLuint index, const GLuint* v0) + void glVertexAttribI2uiv (GLuint index, const GLuint* v0) + void glVertexAttribI3uiv (GLuint index, const GLuint* v0) + void glVertexAttribI4uiv (GLuint index, const GLuint* v0) + void glVertexAttribI4bv (GLuint index, const GLbyte* v0) + void glVertexAttribI4sv (GLuint index, const GLshort* v0) + void glVertexAttribI4ubv (GLuint index, const GLubyte* v0) + void glVertexAttribI4usv (GLuint index, const GLushort* v0) + void glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void*pointer) + void glGetVertexAttribIiv (GLuint index, GLenum pname, GLint* params) + void glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint* params) + void glGetUniformuiv (GLuint program, GLint location, GLuint* params) + void glBindFragDataLocation (GLuint program, GLuint colorNumber, const GLchar* name) + GLint glGetFragDataLocation (GLuint program, const GLchar* name) + void glUniform1ui (GLint location, GLuint v0) + void glUniform2ui (GLint location, GLuint v0, GLuint v1) + void glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2) + void glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) + void glUniform1uiv (GLint location, GLsizei count, const GLuint* value) + void glUniform2uiv (GLint location, GLsizei count, const GLuint* value) + void glUniform3uiv (GLint location, GLsizei count, const GLuint* value) + void glUniform4uiv (GLint location, GLsizei count, const GLuint* value) + void glTexParameterIiv (GLenum target, GLenum pname, const GLint* params) + void glTexParameterIuiv (GLenum target, GLenum pname, const GLuint* params) + void glGetTexParameterIiv (GLenum target, GLenum pname, GLint* params) + void glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint* params) + void glClearBufferiv (GLenum buffer, GLint drawBuffer, const GLint* value) + void glClearBufferuiv (GLenum buffer, GLint drawBuffer, const GLuint* value) + void glClearBufferfv (GLenum buffer, GLint drawBuffer, const GLfloat* value) + void glClearBufferfi (GLenum buffer, GLint drawBuffer, GLfloat depth, GLint stencil) + const GLubyte* glGetStringi (GLenum name, GLuint index) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_3_1 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_3_1 new file mode 100644 index 0000000..c546704 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_3_1 @@ -0,0 +1,42 @@ +GL_VERSION_3_1 +https://www.opengl.org/registry/doc/glspec31.20090528.pdf + +GL_ARB_copy_buffer + GL_SAMPLER_2D_RECT 0x8B63 + GL_SAMPLER_2D_RECT_SHADOW 0x8B64 + GL_SAMPLER_BUFFER 0x8DC2 + GL_INT_SAMPLER_2D_RECT 0x8DCD + GL_INT_SAMPLER_BUFFER 0x8DD0 + GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 + GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 + GL_TEXTURE_BUFFER 0x8C2A + GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B + GL_TEXTURE_BINDING_BUFFER 0x8C2C + GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D + GL_TEXTURE_BUFFER_FORMAT 0x8C2E + GL_TEXTURE_RECTANGLE 0x84F5 + GL_TEXTURE_BINDING_RECTANGLE 0x84F6 + GL_PROXY_TEXTURE_RECTANGLE 0x84F7 + GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 + GL_RED_SNORM 0x8F90 + GL_RG_SNORM 0x8F91 + GL_RGB_SNORM 0x8F92 + GL_RGBA_SNORM 0x8F93 + GL_R8_SNORM 0x8F94 + GL_RG8_SNORM 0x8F95 + GL_RGB8_SNORM 0x8F96 + GL_RGBA8_SNORM 0x8F97 + GL_R16_SNORM 0x8F98 + GL_RG16_SNORM 0x8F99 + GL_RGB16_SNORM 0x8F9A + GL_RGBA16_SNORM 0x8F9B + GL_SIGNED_NORMALIZED 0x8F9C + GL_PRIMITIVE_RESTART 0x8F9D + GL_PRIMITIVE_RESTART_INDEX 0x8F9E + GL_BUFFER_ACCESS_FLAGS 0x911F + GL_BUFFER_MAP_LENGTH 0x9120 + GL_BUFFER_MAP_OFFSET 0x9121 + void glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei primcount) + void glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount) + void glTexBuffer (GLenum target, GLenum internalFormat, GLuint buffer) + void glPrimitiveRestartIndex (GLuint buffer) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_3_2 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_3_2 new file mode 100644 index 0000000..a987541 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_3_2 @@ -0,0 +1,29 @@ +GL_VERSION_3_2 +https://www.opengl.org/registry/doc/glspec32.compatibility.20091207.pdf + +GL_ARB_draw_elements_base_vertex GL_ARB_provoking_vertex GL_ARB_sync GL_ARB_texture_multisample + GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 + GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 + GL_LINES_ADJACENCY 0x000A + GL_LINE_STRIP_ADJACENCY 0x000B + GL_TRIANGLES_ADJACENCY 0x000C + GL_TRIANGLE_STRIP_ADJACENCY 0x000D + GL_PROGRAM_POINT_SIZE 0x8642 + GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 + GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 + GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 + GL_GEOMETRY_SHADER 0x8DD9 + GL_GEOMETRY_VERTICES_OUT 0x8916 + GL_GEOMETRY_INPUT_TYPE 0x8917 + GL_GEOMETRY_OUTPUT_TYPE 0x8918 + GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF + GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 + GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 + GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 + GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 + GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 + GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 + GL_CONTEXT_PROFILE_MASK 0x9126 + void glGetInteger64i_v (GLenum pname, GLuint index, GLint64 * data) + void glGetBufferParameteri64v (GLenum target, GLenum value, GLint64 * data) + void glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_3_3 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_3_3 new file mode 100644 index 0000000..a80dbcc --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_3_3 @@ -0,0 +1,7 @@ +GL_VERSION_3_3 +https://www.opengl.org/registry/doc/glspec33.compatibility.20100311.pdf + + + GL_RGB10_A2UI 0x906F + GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE + void glVertexAttribDivisor (GLuint index, GLuint divisor) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_0 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_0 new file mode 100644 index 0000000..3715b40 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_0 @@ -0,0 +1,21 @@ +GL_VERSION_4_0 +https://www.opengl.org/registry/doc/glspec40.compatibility.20100311.pdf + + + GL_SAMPLE_SHADING 0x8C36 + GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 + GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E + GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F + GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS 0x8F9F + GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 + GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A + GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B + GL_SAMPLER_CUBE_MAP_ARRAY 0x900C + GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D + GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E + GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F + void glMinSampleShading (GLclampf value) + void glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha) + void glBlendEquationi (GLuint buf, GLenum mode) + void glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) + void glBlendFunci (GLuint buf, GLenum src, GLenum dst) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_1 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_1 new file mode 100644 index 0000000..6153c27 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_1 @@ -0,0 +1,3 @@ +GL_VERSION_4_1 +https://www.opengl.org/registry/doc/glspec41.compatibility.20100725.pdf + diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_2 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_2 new file mode 100644 index 0000000..ff12b4c --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_2 @@ -0,0 +1,13 @@ +GL_VERSION_4_2 +https://www.opengl.org/registry/doc/glspec42.compatibility.20120427.pdf + + + GL_COPY_READ_BUFFER_BINDING 0x8F36 + GL_COPY_WRITE_BUFFER_BINDING 0x8F37 + GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 + GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 + GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C + GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D + GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E + GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F + diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_3 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_3 new file mode 100644 index 0000000..32fc35b --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_3 @@ -0,0 +1,6 @@ +GL_VERSION_4_3 +https://www.opengl.org/registry/doc/glspec43.compatibility.20130214.pdf + + + GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E + GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_4 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_4 new file mode 100644 index 0000000..cf6416e --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_4 @@ -0,0 +1,8 @@ +GL_VERSION_4_4 +https://www.opengl.org/registry/doc/glspec44.compatibility.pdf + + + GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 + GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 + GL_TEXTURE_BUFFER_BINDING 0x8C2A + diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_5 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_5 new file mode 100644 index 0000000..1ecda61 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_5 @@ -0,0 +1,9 @@ +GL_VERSION_4_5 +https://www.opengl.org/registry/doc/glspec45.compatibility.pdf + + + GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004 + GLenum glGetGraphicsResetStatus (void) + void glGetnTexImage (GLenum tex, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *pixels) + void glGetnCompressedTexImage (GLenum target, GLint lod, GLsizei bufSize, GLvoid *pixels) + void glGetnUniformdv (GLuint program, GLint location, GLsizei bufSize, GLdouble *params) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_6 b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_6 new file mode 100644 index 0000000..2efe918 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_VERSION_4_6 @@ -0,0 +1,29 @@ +GL_VERSION_4_6 +https://www.opengl.org/registry/doc/glspec46.compatibility.pdf + + + GL_PARAMETER_BUFFER 0x80EE + GL_PARAMETER_BUFFER_BINDING 0x80EF + GL_VERTICES_SUBMITTED 0x82EE + GL_PRIMITIVES_SUBMITTED 0x82EF + GL_VERTEX_SHADER_INVOCATIONS 0x82F0 + GL_TESS_CONTROL_SHADER_PATCHES 0x82F1 + GL_TESS_EVALUATION_SHADER_INVOCATIONS 0x82F2 + GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED 0x82F3 + GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4 + GL_COMPUTE_SHADER_INVOCATIONS 0x82F5 + GL_CLIPPING_INPUT_PRIMITIVES 0x82F6 + GL_CLIPPING_OUTPUT_PRIMITIVES 0x82F7 + GL_TRANSFORM_FEEDBACK_OVERFLOW 0x82EC + GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW 0x82ED + GL_POLYGON_OFFSET_CLAMP 0x8E1B + GL_TEXTURE_MAX_ANISOTROPY 0x84FE + GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF + GL_SHADER_BINARY_FORMAT_SPIR_V 0x9551 + GL_SPIR_V_BINARY 0x9552 + GL_CONTEXT_FLAG_NO_ERROR_BIT 0x00000008 + GL_SPIR_V_EXTENSIONS 0x9553 + GL_NUM_SPIR_V_EXTENSIONS 0x9554 + void glMultiDrawArraysIndirectCount (GLenum mode, const GLvoid *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride) + void glMultiDrawElementsIndirectCount (GLenum mode, GLenum type, const GLvoid *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride) + void glSpecializeShader (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/GL_WIN_swap_hint b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_WIN_swap_hint new file mode 100644 index 0000000..9bb490b --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/GL_WIN_swap_hint @@ -0,0 +1,5 @@ +GL_WIN_swap_hint +http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glfunc01_16zy.asp +GL_WIN_swap_hint + + void glAddSwapHintRectWIN (GLint x, GLint y, GLsizei width, GLsizei height) diff --git a/vendor/glew-cmake-2.2.0/auto/core/gl/WGL_NV_gpu_affinity b/vendor/glew-cmake-2.2.0/auto/core/gl/WGL_NV_gpu_affinity new file mode 100644 index 0000000..61ed3f1 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/core/gl/WGL_NV_gpu_affinity @@ -0,0 +1,13 @@ +WGL_NV_gpu_affinity +http://developer.download.nvidia.com/opengl/specs/WGL_nv_gpu_affinity.txt +WGL_NV_gpu_affinity + + WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 + WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 + BOOL wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu) + BOOL wglEnumGpuDevicesNV (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice) + HDC wglCreateAffinityDCNV (const HGPUNV *phGpuList) + BOOL wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu) + BOOL wglDeleteDCNV (HDC hdc) + DECLARE_HANDLE(HGPUNV); + typedef struct _GPU_DEVICE { DWORD cb; CHAR DeviceName[32]; CHAR DeviceString[128]; DWORD Flags; RECT rcVirtualScreen; } GPU_DEVICE, *PGPU_DEVICE; diff --git a/vendor/glew-cmake-2.2.0/auto/custom.txt b/vendor/glew-cmake-2.2.0/auto/custom.txt new file mode 100644 index 0000000..b797b95 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/custom.txt @@ -0,0 +1,7 @@ +WGL_ARB_extensions_string +WGL_EXT_extensions_string +WGL_ARB_pixel_format +WGL_ARB_pbuffer +WGL_NV_float_buffer +WGL_ATI_pixel_format_float +WGL_ARB_multisample diff --git a/vendor/glew-cmake-2.2.0/auto/doc/advanced.html b/vendor/glew-cmake-2.2.0/auto/doc/advanced.html new file mode 100644 index 0000000..3e0ad79 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/doc/advanced.html @@ -0,0 +1,130 @@ +

Automatic Code Generation

+ +

+Starting from release 1.1.0, the source code and parts of the +documentation are automatically generated from the extension +specifications in a two-step process. In the first step, +specification files from the OpenGL registry are downloaded and +parsed. Skeleton descriptors are created for each extension. These +descriptors contain all necessary information for creating the source +code and documentation in a simple and compact format, including the +name of the extension, url link to the specification, tokens, function +declarations, typedefs and struct definitions. In the second step, +the header files as well as the library and glewinfo source are +generated from the descriptor files. The code generation scripts are +located in the auto subdirectory. +

+ +

+The code generation scripts require GNU make, wget, and perl. On +Windows, the simplest way to get access to these tools is to install +Cygwin, but make sure that the +root directory is mounted in binary mode. The makefile in the +auto directory provides the following build targets: +

+ + + + + + + + + + + + +
makeCreate the source files from the descriptors.
If the +descriptors do not exist, create them from the spec files.
If the spec +files do not exist, download them from the OpenGL repository.
make cleanDelete the source files.
make clobberDelete the source files and the descriptors.
make destroyDelete the source files, the descriptors, and the spec files.
make customCreate the source files for the extensions +listed in auto/custom.txt.
See "Custom Code +Generation" below for more details.
+ +

Adding a New Extension

+ +

+To add a new extension, create a descriptor file for the extension in +auto/core and rerun the code generation scripts by typing +make clean; make in the auto directory. +

+ +

+The format of the descriptor file is given below. Items in +brackets are optional. +

+ +

+<Extension Name>
+[<URL of Specification File>]
+    [<Token Name> <Token Value>]
+    [<Token Name> <Token Value>]
+    ...
+    [<Typedef>]
+    [<Typedef>]
+    ...
+    [<Function Signature>]
+    [<Function Signature>]
+    ...
+ +

+ + + +

+Take a look at one of the files in auto/core for an +example. Note that typedefs and function signatures should not be +terminated with a semicolon. +

+ +

Custom Code Generation

+

+Starting from GLEW 1.3.0, it is possible to control which extensions +to include in the library by specifying a list in +auto/custom.txt. This is useful when you do not need all the +extensions and would like to reduce the size of the source files. +Type make clean; make custom in the auto directory +to rerun the scripts with the custom list of extensions. +

+ +

+For example, the following is the list of extensions needed to get GLEW and the +utilities to compile. +

+ +

+WGL_ARB_extensions_string
+WGL_ARB_multisample
+WGL_ARB_pixel_format
+WGL_ARB_pbuffer
+WGL_EXT_extensions_string
+WGL_ATI_pixel_format_float
+WGL_NV_float_buffer
+

+ +

Separate Namespace

+ +

+To avoid name clashes when linking with libraries that include the +same symbols, extension entry points are declared in a separate +namespace (release 1.1.0 and up). This is achieved by aliasing OpenGL +function names to their GLEW equivalents. For instance, +glFancyFunction is simply an alias to +glewFancyFunction. The separate namespace does not effect +token and function pointer definitions. +

+ +

Known Issues

+ +

+GLEW requires GLX 1.2 for compatibility with GLUT. +

+ diff --git a/vendor/glew-cmake-2.2.0/auto/doc/basic.html b/vendor/glew-cmake-2.2.0/auto/doc/basic.html new file mode 100644 index 0000000..693575b --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/doc/basic.html @@ -0,0 +1,180 @@ +

Initializing GLEW

+

+First you need to create a valid OpenGL rendering context and call +glewInit() to initialize the extension entry points. If +glewInit() returns GLEW_OK, the initialization +succeeded and you can use the available extensions as well as core +OpenGL functionality. For example: +

+ +

+#include <GL/glew.h>
+#include <GL/glut.h>
+...
+glutInit(&argc, argv);
+glutCreateWindow("GLEW Test");
+GLenum err = glewInit();
+if (GLEW_OK != err)
+{
+  /* Problem: glewInit failed, something is seriously wrong. */
+  fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
+  ...
+}
+fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
+

+ +

Checking for Extensions

+ +

+Starting from GLEW 1.1.0, you can find out if a particular extension +is available on your platform by querying globally defined variables +of the form GLEW_{extension_name}: +

+ +

+if (GLEW_ARB_vertex_program)
+{
+  /* It is safe to use the ARB_vertex_program extension here. */
+  glGenProgramsARB(...);
+}
+

+ +

+In GLEW 1.0.x, a global structure was used for this task. To ensure +binary compatibility between releases, the struct was replaced with a +set of variables. +

+ +

+You can also check for core OpenGL functionality. For example, to +see if OpenGL 1.3 is supported, do the following: +

+ +

+if (GLEW_VERSION_1_3)
+{
+  /* Yay! OpenGL 1.3 is supported! */
+}
+

+ +

+In general, you can check if GLEW_{extension_name} or +GLEW_VERSION_{version} is true or false. +

+ +

+It is also possible to perform extension checks from string +input. Starting from the 1.3.0 release, use glewIsSupported +to check if the required core or extension functionality is +available: +

+ +

+if (glewIsSupported("GL_VERSION_1_4  GL_ARB_point_sprite"))
+{
+  /* Great, we have OpenGL 1.4 + point sprites. */
+}
+

+ +

+For extensions only, glewGetExtension provides a slower alternative +(GLEW 1.0.x-1.2.x). Note that in the 1.3.0 release +glewGetExtension was replaced with +glewIsSupported. +

+ +

+if (glewGetExtension("GL_ARB_fragment_program"))
+{
+  /* Looks like ARB_fragment_program is supported. */
+}
+

+ +

Experimental Drivers

+ +

+GLEW obtains information on the supported extensions from the graphics +driver. Experimental or pre-release drivers, however, might not +report every available extension through the standard mechanism, in +which case GLEW will report it unsupported. To circumvent this +situation, the glewExperimental global switch can be turned +on by setting it to GL_TRUE before calling +glewInit(), which ensures that all extensions with valid +entry points will be exposed. +

+ +

Platform Specific Extensions

+ +

+Platform specific extensions are separated into two header files: +wglew.h and glxew.h, which define the available +WGL and GLX extensions. To determine if a certain +extension is supported, query WGLEW_{extension name} or +GLXEW_{extension_name}. For example: +

+ +

+#include <GL/wglew.h>
+
+if (WGLEW_ARB_pbuffer)
+{
+  /* OK, we can use pbuffers. */
+}
+else
+{
+  /* Sorry, pbuffers will not work on this platform. */
+}
+

+ +

+Alternatively, use wglewIsSupported or +glxewIsSupported to check for extensions from a string: +

+ +

+if (wglewIsSupported("WGL_ARB_pbuffer"))
+{
+  /* OK, we can use pbuffers. */
+}
+

+ +

Utilities

+ +

+GLEW provides two command-line utilities: one for creating a list of +available extensions and visuals; and another for verifying extension +entry points. +

+ +

visualinfo: extensions and visuals

+ +

+visualinfo is an extended version of glxinfo. The +Windows version creates a file called visualinfo.txt, which +contains a list of available OpenGL, WGL, and GLU extensions as well +as a table of visuals aka. pixel formats. Pbuffer and MRT capable +visuals are also included. For additional usage information, type +visualinfo -h. +

+ +

glewinfo: extension verification utility

+ +

+glewinfo allows you to verify the entry points for the +extensions supported on your platform. The Windows version +reports the results to a text file called glewinfo.txt. The +Unix version prints the results to stdout. +

+ +

Windows usage:

+
glewinfo [-pf <id>]
+ +

where <id> is the pixel format id for which the +capabilities are displayed.

+ +

Unix usage:

+
glewinfo [-display <dpy>] [-visual <id>]
+ +

where <dpy> is the X11 display and <id> is +the visual id for which the capabilities are displayed.

+ diff --git a/vendor/glew-cmake-2.2.0/auto/doc/build.html b/vendor/glew-cmake-2.2.0/auto/doc/build.html new file mode 100644 index 0000000..467a7f3 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/doc/build.html @@ -0,0 +1,49 @@ +

Building GLEW

+ +

Windows

+ +

A MS Visual Studio project is provided in the build/vc6 directory.

+

Pre-built shared and static libraries are also available for download.

+ +

Makefile

+ +

For platforms other than MS Windows, the provided Makefile is used.

+ +

Command-line variables

+ + + + + + +
SYSTEMautoTarget system to build: darwin, linux, solaris, etc.
For a full list of supported targets: ls config/Makefile.*
+config.guess is used to auto detect, as necessary.
GLEW_DEST/usrBase directory for installation.
+ +

Make targets

+ + + + + + + + + + + + +
allBuild everything.
glew.libBuild static and dynamic GLEW libraries.
glew.lib.mxBuild static and dynamic GLEWmx libraries.
glew.binBuild glewinfo and visualinfo utilities.
cleanDelete temporary and built files.
install.allInstall everything.
installInstall GLEW libraries.
install.mxInstall GLEWmx libraries.
install.binInstall glewinfo and visualinfo utilities.
uninstallDelete installed files.
+ +

Requirements

+ +
    +
  • GNU make
  • +
  • perl
  • +
  • wget
  • +
  • GNU sed
  • +
  • gcc compiler
  • +
  • git
  • +
+ +Ubuntu:
sudo apt-get install libXmu-dev libXi-dev libgl-dev dos2unix git wget
+Fedora:
sudo yum install libXmu-devel libXi-devel libGL-devel dos2unix git wget
diff --git a/vendor/glew-cmake-2.2.0/auto/doc/credits.html b/vendor/glew-cmake-2.2.0/auto/doc/credits.html new file mode 100644 index 0000000..6c36de0 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/doc/credits.html @@ -0,0 +1,2 @@ +

+Author, copyright and licensing information on github.

diff --git a/vendor/glew-cmake-2.2.0/auto/doc/index.html b/vendor/glew-cmake-2.2.0/auto/doc/index.html new file mode 100644 index 0000000..e569e75 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/doc/index.html @@ -0,0 +1,113 @@ +

+The OpenGL Extension Wrangler Library (GLEW) is a cross-platform +open-source C/C++ extension loading library. GLEW provides efficient +run-time mechanisms for determining which OpenGL extensions are +supported on the target platform. OpenGL core and extension +functionality is exposed in a single header file. GLEW has been +tested on a variety of operating systems, including Windows, Linux, +Mac OS X, FreeBSD, Irix, and Solaris. +

+ +

Downloads

+

+GLEW is distributed +as source and precompiled binaries.
+The latest release is +2.2.0[03-15-20]: +

+

+

+

+ + + +
+ + + + + + + + + + + + + + + +
Source +ZIP |  +TGZ
Binaries +Windows 32-bit and 64-bit +
+
+ +

+

+An up-to-date copy is also available using git: +

+
    +
  • github
    +git clone https://github.com/nigels-com/glew.git glew
     
  • +
+ +

Supported Extensions

+

+The latest release contains support for OpenGL 4.6, compatibility and forward-compatible contexts and the following extensions: +

+ + +

News

+
    +
  • [03-15-20] GLEW 2.2.0 new extensions and minor bug fixes
  • +
  • [07-31-17] GLEW 2.1.0 adds support for OpenGL 4.6, new extensions and minor bug fixes
  • +
  • [07-24-16] GLEW 2.0.0 adds support for forward-compatible contexts, adds new extensions, OSMesa and EGL support, MX discontinued and minor bug fixes
  • +
  • [08-10-15] GLEW 1.13.0 adds support for new extensions, fixes minor bugs
  • +
  • [26-01-15] GLEW 1.12.0 fixes minor bugs and adds new extensions
  • +
  • [08-11-14] GLEW 1.11.0 adds support for OpenGL 4.5, new extensions
  • +
  • [07-22-13] GLEW 1.10.0 adds support for OpenGL 4.4, new extensions
  • +
  • [08-06-12] GLEW 1.9.0 adds support for OpenGL 4.3, new extensions
  • +
  • [07-17-12] GLEW 1.8.0 fixes minor bugs and adds new extensions
  • +
  • [08-26-11] GLEW 1.7.0 adds support for OpenGL 4.2, new extensions, fixes bugs
  • +
  • [04-27-11] GLEW 1.6.0 fixes minor bugs and adds eight new extensions
  • +
  • [01-31-11] GLEW 1.5.8 fixes minor bugs and adds two new extensions
  • +
  • [11-03-10] GLEW 1.5.7 fixes minor bugs and adds one new extension
  • +
  • [09-07-10] GLEW 1.5.6 adds support for OpenGL 4.1, fixes bugs
  • +
  • [07-13-10] GLEW 1.5.5 fixes minor bugs and adds new extensions
  • +
  • [04-21-10] GLEW 1.5.4 adds support for OpenGL 3.3, OpenGL 4.0 and new extensions, fixes bugs
  • +
  • [02-28-10] GLEW 1.5.3 fixes minor bugs and adds three new extensions
  • +
  • [12-31-09] GLEW 1.5.2 adds support for OpenGL 3.1, OpenGL 3.2 and new extensions
  • +
  • [11-03-08] GLEW 1.5.1 adds support for OpenGL 3.0 and 31 new extensions
  • +
  • [12-27-07] GLEW 1.5.0 is released under less restrictive licenses
  • +
  • [04-27-07] GLEW 1.4.0 is released
  • +
  • [03-08-07] GLEW is included in the NVIDIA OpenGL SDK
  • +
  • [03-04-07] GLEW 1.3.6 is released
  • +
  • [02-28-07] Repository is migrated to SVN
  • +
  • [02-25-07] GLEW is included in the OpenGL SDK
  • +
  • [11-21-06] GLEW 1.3.5 adds OpenGL 2.1 and NVIDIA G80 extensions
  • +
  • [03-04-06] GLEW 1.3.4 adds support for five new extensions
  • +
  • [05-16-05] GLEW 1.3.3 is released
  • +
  • [03-16-05] GLEW 1.3.2 adds support for GL_APPLE_pixel_buffer
  • +
  • [02-11-05] gljava and sdljava provide a Java binding to OpenGL via GLEW
  • +
  • [02-02-05] GLEW 1.3.1 adds support for GL_EXT_framebuffer_object
  • +
  • [01-04-05] GLEW 1.3.0 adds core OpenGL 2.0 support plus many enhancements
  • +
  • [12-22-04] GLEWpy Python wrapper announced
  • +
  • [12-12-04] Mailing lists created on sourceforge
  • +
  • [12-06-04] GLEW 1.2.5 adds new extensions and support for FreeBSD
  • +
+ +

Links

+ + diff --git a/vendor/glew-cmake-2.2.0/auto/doc/install.html b/vendor/glew-cmake-2.2.0/auto/doc/install.html new file mode 100644 index 0000000..448aafd --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/doc/install.html @@ -0,0 +1,126 @@ +

Installation

+ +

+To use the shared library version of GLEW, you need to copy the +headers and libraries into their destination directories. On Windows +this typically boils down to copying: +

+ + + + + + + + + + +
bin/glew32.dll    to    %SystemRoot%/system32
lib/glew32.lib    to    {VC Root}/Lib
include/GL/glew.h    to    {VC Root}/Include/GL
include/GL/wglew.h    to    {VC Root}/Include/GL
+

+

+ +

+where {VC Root} is the Visual C++ root directory, typically +C:/Program Files/Microsoft Visual Studio/VC98 for Visual +Studio 6.0 or C:/Program Files/Microsoft Visual +Studio .NET 2003/Vc7/PlatformSDK for Visual Studio .NET. +

+ +

+On Unix, typing make install will attempt to install GLEW +into /usr/include/GL and /usr/lib. You can +customize the installation target via the GLEW_DEST +environment variable if you do not have write access to these +directories. +

+ +

Building Your Project with GLEW

+

+There are two ways to build your project with GLEW. +

+

Including the source files / project file

+

+The simpler but less flexible way is to include glew.h and +glew.c into your project. On Windows, you also need to +define the GLEW_STATIC preprocessor token when building a +static library or executable, and the GLEW_BUILD preprocessor +token when building a dll. You also need to replace +<GL/gl.h> and <GL/glu.h> with +<glew.h> in your code and set the appropriate include +flag (-I) to tell the compiler where to look for it. For +example: +

+

+#include <glew.h>
+#include <GL/glut.h>
+<gl, glu, and glut functionality is available here>
+

+

+Depending on where you put glew.h you may also need to change +the include directives in glew.c. Note that if you are using +GLEW together with GLUT, you have to include glew.h first. +In addition, glew.h includes glu.h, so you do not +need to include it separately. +

+

+On Windows, you also have the option of adding the supplied project +file glew_static.dsp to your workspace (solution) and compile +it together with your other projects. In this case you also need to +change the GLEW_BUILD preprocessor constant to +GLEW_STATIC when building a static library or executable, +otherwise you get build errors. +

+

+Note that GLEW does not use the C +runtime library, so it does not matter which version (single-threaded, +multi-threaded or multi-threaded DLL) it is linked with (without +debugging information). It is, however, always a good idea to compile all +your projects including GLEW with the same C runtime settings. +

+ +

Using GLEW as a shared library

+ +

+Alternatively, you can use the provided project files / makefile to +build a separate shared library you can link your projects with later. +In this case the best practice is to install glew.h, +glew32.lib, and glew32.dll / libGLEW.so to +where the OpenGL equivalents gl.h, opengl32.lib, and +opengl32.dll / libGL.so are located. Note that you +need administrative privileges to do this. If you do not have +administrator access and your system administrator will not do it for +you, you can install GLEW into your own lib and include subdirectories +and tell the compiler where to find it. Then you can just replace +<GL/gl.h> with <GL/glew.h> in your +program: +

+ +

+#include <GL/glew.h>
+#include <GL/glut.h>
+<gl, glu, and glut functionality is available here>
+

+ +

+or: +

+ +

+#include <GL/glew.h>
+<gl and glu functionality is available here>
+

+ +

+Remember to link your project with glew32.lib, +glu32.lib, and opengl32.lib on Windows and +libGLEW.so, libGLU.so, and libGL.so on +Unix (-lGLEW -lGLU -lGL). +

+ +

+It is important to keep in mind that glew.h includes neither +windows.h nor gl.h. Also, GLEW will warn you by +issuing a preprocessor error in case you have included gl.h, +glext.h, or glATI.h before glew.h. +

+ diff --git a/vendor/glew-cmake-2.2.0/auto/doc/log.html b/vendor/glew-cmake-2.2.0/auto/doc/log.html new file mode 100644 index 0000000..531b3b2 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/doc/log.html @@ -0,0 +1,1319 @@ +

Change Log

+ +
+
    +
  • 2.2.0 [03-15-20] + +
      +
    • Bug fixes: +
        +
      • GL_EXT_semaphore constants +
      • Some const pointer fixups in OpenGL API +
      • Correction for GLEW_VERSION_4_5 +
      • Windows build updates and fixes +
      +
    + +
      +
    • New extensions: +
        +
      • GL_AMD_framebuffer_multisample_advanced +
      • GL_AMD_gpu_shader_half_float_fetch +
      • GL_AMD_shader_image_load_store_lod +
      • GL_ARM_texture_unnormalized_coordinates +
      • GL_DMP_program_binary +
      • GL_DMP_shader_binary +
      • GL_EXT_EGL_image_external_wrap_modes +
      • GL_EXT_EGL_image_storage +
      • GL_EXT_EGL_sync +
      • GL_EXT_clip_control +
      • GL_EXT_depth_clamp +
      • GL_EXT_disjoint_timer_query +
      • GL_EXT_draw_transform_feedback +
      • GL_EXT_multiview_tessellation_geometry_shader +
      • GL_EXT_multiview_texture_multisample +
      • GL_EXT_multiview_timer_query +
      • GL_EXT_occlusion_query_boolean +
      • GL_EXT_primitive_bounding_box +
      • GL_EXT_protected_textures +
      • GL_EXT_robustness +
      • GL_EXT_shader_framebuffer_fetch_non_coherent +
      • GL_EXT_static_vertex_array +
      • GL_EXT_tessellation_point_size +
      • GL_EXT_tessellation_shader +
      • GL_EXT_texture_border_clamp +
      • GL_EXT_texture_buffer +
      • GL_EXT_texture_compression_s3tc_srgb +
      • GL_EXT_texture_format_sRGB_override +
      • GL_EXT_texture_mirror_clamp_to_edge +
      • GL_EXT_texture_query_lod +
      • GL_EXT_texture_shadow_lod +
      • GL_FJ_shader_binary_GCCSO +
      • GL_IMG_bindless_texture +
      • GL_IMG_framebuffer_downsample +
      • GL_IMG_multisampled_render_to_texture +
      • GL_IMG_program_binary +
      • GL_IMG_read_format +
      • GL_IMG_shader_binary +
      • GL_IMG_texture_compression_pvrtc +
      • GL_IMG_texture_compression_pvrtc2 +
      • GL_IMG_texture_env_enhanced_fixed_function +
      • GL_IMG_texture_filter_cubic +
      • GL_INTEL_blackhole_render +
      • GL_INTEL_shader_integer_functions2 +
      • GL_KHR_shader_subgroup +
      • GL_MESA_framebuffer_flip_y +
      • GL_MESA_program_binary_formats +
      • GL_MESA_tile_raster_order +
      • GL_NVX_gpu_multicast2 +
      • GL_NVX_progress_fence +
      • GL_NV_compute_shader_derivatives +
      • GL_NV_conservative_raster_pre_snap +
      • GL_NV_conservative_raster_underestimation +
      • GL_NV_depth_nonlinear +
      • GL_NV_fragment_shader_barycentric +
      • GL_NV_memory_attachment +
      • GL_NV_mesh_shader +
      • GL_NV_query_resource_tag +
      • GL_NV_read_buffer +
      • GL_NV_read_buffer_front +
      • GL_NV_representative_fragment_test +
      • GL_NV_scissor_exclusive +
      • GL_NV_shader_subgroup_partitioned +
      • GL_NV_shader_texture_footprint +
      • GL_NV_shading_rate_image +
      • GL_NV_vdpau_interop2 +
      • GL_OES_EGL_image +
      • GL_OES_EGL_image_external +
      • GL_OES_EGL_image_external_essl3 +
      • GL_OES_blend_equation_separate +
      • GL_OES_blend_func_separate +
      • GL_OES_blend_subtract +
      • GL_OES_compressed_ETC1_RGB8_texture +
      • GL_OES_compressed_paletted_texture +
      • GL_OES_copy_image +
      • GL_OES_depth24 +
      • GL_OES_depth32 +
      • GL_OES_depth_texture +
      • GL_OES_depth_texture_cube_map +
      • GL_OES_draw_buffers_indexed +
      • GL_OES_draw_texture +
      • GL_OES_element_index_uint +
      • GL_OES_extended_matrix_palette +
      • GL_OES_fbo_render_mipmap +
      • GL_OES_fragment_precision_high +
      • GL_OES_framebuffer_object +
      • GL_OES_geometry_point_size +
      • GL_OES_geometry_shader +
      • GL_OES_get_program_binary +
      • GL_OES_gpu_shader5 +
      • GL_OES_mapbuffer +
      • GL_OES_matrix_get +
      • GL_OES_matrix_palette +
      • GL_OES_packed_depth_stencil +
      • GL_OES_point_size_array +
      • GL_OES_point_sprite +
      • GL_OES_read_format +
      • GL_OES_required_internalformat +
      • GL_OES_rgb8_rgba8 +
      • GL_OES_sample_shading +
      • GL_OES_sample_variables +
      • GL_OES_shader_image_atomic +
      • GL_OES_shader_io_blocks +
      • GL_OES_shader_multisample_interpolation +
      • GL_OES_single_precision +
      • GL_OES_standard_derivatives +
      • GL_OES_stencil1 +
      • GL_OES_stencil4 +
      • GL_OES_stencil8 +
      • GL_OES_surfaceless_context +
      • GL_OES_tessellation_point_size +
      • GL_OES_tessellation_shader +
      • GL_OES_texture_3D +
      • GL_OES_texture_border_clamp +
      • GL_OES_texture_buffer +
      • GL_OES_texture_compression_astc +
      • GL_OES_texture_cube_map +
      • GL_OES_texture_cube_map_array +
      • GL_OES_texture_env_crossbar +
      • GL_OES_texture_mirrored_repeat +
      • GL_OES_texture_npot +
      • GL_OES_texture_stencil8 +
      • GL_OES_texture_storage_multisample_2d_array +
      • GL_OES_texture_view +
      • GL_OES_vertex_array_object +
      • GL_OES_vertex_half_float +
      • GL_OES_vertex_type_10_10_10_2 +
      • GL_QCOM_YUV_texture_gather +
      • GL_QCOM_shader_framebuffer_fetch_rate +
      • GL_QCOM_texture_foveated +
      • GL_QCOM_texture_foveated_subsampled_layout +
      • GL_VIV_shader_binary +
      • EGL_ANDROID_GLES_layers +
      • EGL_ANDROID_get_frame_timestamps +
      • EGL_ANDROID_get_native_client_buffer +
      • EGL_ARM_image_format +
      • EGL_EXT_bind_to_front +
      • EGL_EXT_client_sync +
      • EGL_EXT_compositor +
      • EGL_EXT_gl_colorspace_display_p3 +
      • EGL_EXT_gl_colorspace_display_p3_linear +
      • EGL_EXT_gl_colorspace_display_p3_passthrough +
      • EGL_EXT_gl_colorspace_scrgb +
      • EGL_EXT_image_gl_colorspace +
      • EGL_EXT_image_implicit_sync_control +
      • EGL_EXT_surface_CTA861_3_metadata +
      • EGL_EXT_sync_reuse +
      • EGL_KHR_display_reference +
      • EGL_MESA_query_driver +
      • EGL_NV_context_priority_realtime +
      • EGL_NV_quadruple_buffer +
      • EGL_NV_stream_dma +
      • EGL_NV_stream_flush +
      • EGL_NV_stream_origin +
      • EGL_NV_triple_buffer +
      • EGL_WL_bind_wayland_display +
      • EGL_WL_create_wayland_buffer_from_image +
      • GLX_EXT_context_priority +
      • GLX_EXT_no_config_context +
      • GLX_NV_multigpu_context +
      • WGL_NV_multigpu_context +
      +
    + +
+ +
+
    +
  • 2.1.0 [07-31-17] +
      +
    • Enhancements: +
        +
      • OpenGL 4.6 support added +
      • Improved Mac OSX build support +
      • Improved cmake build support +
      +
    + +
      +
    • Bug fixes: +
        +
      • Resolved crash when glXGetCurrentDisplay() is NULL +
      • CMake: only install PDB files with MSVC +
      • wglGetProcAddress crash with NOGDI defined +
      • Mac: using -Os rather than -O2 +
      +
    + +
      +
    • New extensions: +
        +
      • GL_AMD_gpu_shader_half_float +
      • GL_AMD_shader_ballot +
      • GL_ARB_gl_spirv +
      • GL_EGL_KHR_context_flush_control +
      • GL_INTEL_conservative_rasterization +
      • GL_MESA_shader_integer_functions +
      • GL_NVX_blend_equation_advanced_multi_draw_buffers +
      • GL_NV_gpu_multicast +
      • EGL_ARM_implicit_external_sync +
      • EGL_EXT_gl_colorspace_bt2020_linear +
      • EGL_EXT_gl_colorspace_bt2020_pq +
      • EGL_EXT_gl_colorspace_scrgb_linear +
      • EGL_EXT_image_dma_buf_import_modifiers +
      • EGL_EXT_pixel_format_float +
      • EGL_EXT_surface_SMPTE2086_metadata +
      • EGL_KHR_context_flush_control +
      • EGL_KHR_no_config_context +
      • EGL_KHR_stream_attrib +
      • EGL_MESA_platform_surfaceless +
      • EGL_NV_stream_cross_display +
      • EGL_NV_stream_cross_object +
      • EGL_NV_stream_cross_partition +
      • EGL_NV_stream_cross_process +
      • EGL_NV_stream_cross_system +
      • EGL_NV_stream_fifo_next +
      • EGL_NV_stream_fifo_synchronous +
      • EGL_NV_stream_frame_limits +
      • EGL_NV_stream_remote +
      • EGL_NV_stream_reset +
      • EGL_NV_stream_socket +
      • EGL_NV_stream_socket_inet +
      • EGL_NV_stream_socket_unix +
      • WGL_EXT_colorspace +
      +
    + +
+ +
+
    +
  • 2.0.0 [07-24-16] +
      +
    • Enhancements: +
        +
      • Forward context support added +
      • OSMesa support added +
      • EGL support added +
      • MX support discontinued +
      • Improved cmake build support +
      +
    +
      +
    • New extensions: +
        +
      • GL_AMD_shader_explicit_vertex_parameter +
      • GL_ARB_gl_spirv +
      • GL_EGL_NV_robustness_video_memory_purge +
      • GL_EXT_window_rectangles +
      • GL_INTEL_conservative_rasterization +
      • GL_KHR_texture_compression_astc_sliced_3d +
      • GL_MESA_shader_integer_functions +
      • GL_NVX_blend_equation_advanced_multi_draw_buffers +
      • GL_NVX_linked_gpu_multicast +
      • GL_NV_clip_space_w_scaling +
      • GL_NV_command_list +
      • GL_NV_conservative_raster_pre_snap_triangles +
      • GL_NV_draw_vulkan_image +
      • GL_NV_gpu_multicast +
      • GL_NV_robustness_video_memory_purge +
      • GL_NV_shader_atomic_float64 +
      • GL_NV_stereo_view_rendering +
      • GL_NV_viewport_swizzle +
      • GLX_EXT_libglvnd +
      • GLX_NV_robustness_video_memory_purge +
      +
    +
+ +
+
    +
  • 1.13.0 [08-10-15] +
      +
    • Enhancements: +
        +
      • glxewInit, wglewInit +
      • glewinfo adds support for -version, -profile core|compatibility and -flag debug|forward parameters +
      • Improved cmake build support +
      +
    +
      +
    • New extensions: +
        +
      • GL_ARB_ES3_2_compatibility +
      • GL_ARB_fragment_shader_interlock +
      • GL_ARB_gpu_shader_int64 +
      • GL_ARB_parallel_shader_compile +
      • GL_ARB_post_depth_coverage +
      • GL_ARB_sample_locations +
      • GL_ARB_shader_atomic_counter_ops +
      • GL_ARB_shader_ballot +
      • GL_ARB_shader_clock +
      • GL_ARB_shader_viewport_layer_array +
      • GL_ARB_sparse_texture2 +
      • GL_ARB_sparse_texture_clamp +
      • GL_ARB_texture_filter_minmax +
      • GL_INTEL_framebuffer_CMAA +
      • GL_KHR_no_error +
      • GL_NV_conservative_raster_dilate +
      • GL_OVR_multiview +
      • GL_OVR_multiview2 +
      +
    • Bug fixes +
    +
+ +
+
    +
  • 1.12.0 [01-26-15] +
      +
    • New extensions: +
        +
      • GL_EXT_polygon_offset_clamp +
      • GL_EXT_post_depth_coverage +
      • GL_EXT_raster_multisample +
      • GL_EXT_sparse_texture2 +
      • GL_EXT_texture_filter_minmax +
      • GL_NV_conservative_raster +
      • GL_NV_fill_rectangle +
      • GL_NV_fragment_coverage_to_color +
      • GL_NV_fragment_shader_interlock +
      • GL_NV_framebuffer_mixed_samples +
      • GL_NV_geometry_shader_passthrough +
      • GL_NV_internalformat_sample_query +
      • GL_NV_sample_locations +
      • GL_NV_sample_mask_override_coverage +
      • GL_NV_shader_atomic_fp16_vector +
      • GL_NV_uniform_buffer_unified_memory +
      • GL_NV_viewport_array2 +
      +
    • Bug fixes +
    +
+ +
+
    +
  • 1.11.0 [08-11-14] +
      +
    • New features: +
        +
      • Support for OpenGL 4.5 +
      +
    • New extensions: +
        +
      • GL_AMD_gcn_shader +
      • GL_AMD_gpu_shader_int64 +
      • GL_AMD_occlusion_query_event +
      • GL_AMD_shader_atomic_counter_ops +
      • GL_AMD_shader_stencil_value_export +
      • GL_AMD_transform_feedback4 +
      • GL_ARB_ES3_1_compatibility +
      • GL_ARB_clip_control +
      • GL_ARB_conditional_render_inverted +
      • GL_ARB_cull_distance +
      • GL_ARB_derivative_control +
      • GL_ARB_direct_state_access +
      • GL_ARB_get_texture_sub_image +
      • GL_ARB_pipeline_statistics_query +
      • GL_ARB_shader_texture_image_samples +
      • GL_ARB_sparse_buffer +
      • GL_ARB_texture_barrier +
      • GL_ARB_transform_feedback_overflow_query +
      • GL_EXT_debug_label +
      • GL_EXT_shader_image_load_formatted +
      • GL_EXT_shader_integer_mix +
      • GL_INTEL_fragment_shader_ordering +
      • GL_INTEL_performance_query +
      • GL_KHR_blend_equation_advanced +
      • GL_KHR_blend_equation_advanced_coherent +
      • GL_KHR_context_flush_control +
      • GL_KHR_robust_buffer_access_behavior +
      • GL_KHR_robustness +
      • GL_KHR_texture_compression_astc_hdr +
      • GL_NV_bindless_multi_draw_indirect_count +
      • GL_NV_shader_atomic_int64 +
      • GL_NV_shader_thread_group +
      • GL_NV_shader_thread_shuffle +
      • GL_REGAL_proc_address +
      • GLX_ARB_context_flush_control +
      • GLX_EXT_stereo_tree +
      • GLX_MESA_query_renderer +
      • GLX_NV_copy_buffer +
      • GLX_NV_delay_before_swap +
      • WGL_ARB_context_flush_control +
      • WGL_NV_delay_before_swap +
      +
    • Bug fixes +
    +
+ +
+
    +
  • 1.10.0 [07-22-13] +
      +
    • New features: +
        +
      • Support for OpenGL 4.4 +
      +
    • New extensions: +
        +
      • GL_AMD_interleaved_elements +
      • GL_AMD_shader_trinary_minmax +
      • GL_AMD_sparse_texture +
      • GL_ANGLE_depth_texture +
      • GL_ANGLE_framebuffer_blit +
      • GL_ANGLE_framebuffer_multisample +
      • GL_ANGLE_instanced_arrays +
      • GL_ANGLE_pack_reverse_row_order +
      • GL_ANGLE_program_binary +
      • GL_ANGLE_texture_compression_dxt1 +
      • GL_ANGLE_texture_compression_dxt3 +
      • GL_ANGLE_texture_compression_dxt5 +
      • GL_ANGLE_texture_usage +
      • GL_ANGLE_timer_query +
      • GL_ANGLE_translated_shader_source +
      • GL_ARB_bindless_texture +
      • GL_ARB_buffer_storage +
      • GL_ARB_clear_texture +
      • GL_ARB_compute_variable_group_size +
      • GL_ARB_enhanced_layouts +
      • GL_ARB_indirect_parameters +
      • GL_ARB_multi_bind +
      • GL_ARB_query_buffer_object +
      • GL_ARB_seamless_cubemap_per_texture +
      • GL_ARB_shader_draw_parameters +
      • GL_ARB_shader_group_vote +
      • GL_ARB_sparse_texture +
      • GL_ARB_texture_mirror_clamp_to_edge +
      • GL_ARB_texture_stencil8 +
      • GL_ARB_vertex_type_10f_11f_11f_rev +
      • GL_INTEL_map_texture +
      • GL_NVX_conditional_render +
      • GL_NV_bindless_multi_draw_indirect +
      • GL_NV_blend_equation_advanced +
      • GL_NV_compute_program5 +
      • GL_NV_deep_texture3D +
      • GL_NV_draw_texture +
      • GL_NV_shader_atomic_counters +
      • GL_NV_shader_storage_buffer_object +
      • GL_REGAL_ES1_0_compatibility +
      • GL_REGAL_ES1_1_compatibility +
      • GL_REGAL_enable +
      • GLX_EXT_buffer_age +
      • WGL_ARB_robustness_application_isolation +
      • WGL_ARB_robustness_share_group_isolation +
      +
    • Bug fixes +
    +
+ +
+
    +
  • 1.9.0 [08-06-12] +
      +
    • New features: + +
    • New extensions: +
        +
      • GL_ARB_ES3_compatibility +
      • GL_ARB_clear_buffer_object +
      • GL_ARB_compute_shader +
      • GL_ARB_copy_image +
      • GL_ARB_explicit_uniform_location +
      • GL_ARB_fragment_layer_viewport +
      • GL_ARB_framebuffer_no_attachments +
      • GL_ARB_internalformat_query2 +
      • GL_ARB_multi_draw_indirect +
      • GL_ARB_program_interface_query +
      • GL_ARB_robust_buffer_access_behavior +
      • GL_ARB_robustness_application_isolation +
      • GL_ARB_robustness_share_group_isolation +
      • GL_ARB_shader_image_size +
      • GL_ARB_shader_storage_buffer_object +
      • GL_ARB_stencil_texturing +
      • GL_ARB_texture_buffer_range +
      • GL_ARB_texture_query_levels +
      • GL_ARB_texture_storage_multisample +
      • GL_ARB_texture_view +
      • GL_ARB_vertex_attrib_binding +
      • GL_EXT_debug_marker +
      • GL_KHR_debug +
      • GL_REGAL_error_string +
      • GL_REGAL_extension_query +
      • GL_REGAL_log +
      • GLX_ARB_robustness_application_isolation +
      • GLX_ARB_robustness_share_group_isolation +
      • GLX_EXT_create_context_es_profile +
      • WGL_EXT_create_context_es_profile +
      +
    • Bug fixes: +
        +
      • Not using GLU library for Makefile builds. +
      +
    +
+ +
+
    +
  • 1.8.0 [07-17-12] +
      +
    • New extensions: +
        +
      • GL_AMD_pinned_memory +
      • GL_AMD_query_buffer_object +
      • GL_AMD_stencil_operation_extended +
      • GL_AMD_vertex_shader_layer +
      • GL_AMD_vertex_shader_viewport_index +
      • GL_NV_bindless_texture +
      • GL_NV_shader_atomic_float +
      • GLX_EXT_swap_control_tear +
      • WGL_EXT_swap_control_tear +
      • WGL_NV_DX_interop2 +
      +
    • Bug fixes: +
        +
      • MS Visual Studio 2010 projects added +
      • GLX_NV_video_out replaces GLX_NV_video_output +
      • ANSI C prototype for glewInit +
      • Improved CentOS build support +
      • Improved GL_ARB_gpu_shader_fp64 support +
      • ARB_texture_compression_bptc and ARB_copy_buffer constants +
      • Linux needs to define GLEW_STATIC for static library builds +
      • Custom code generation problem resolved +
      • GLEWAPIENTRY added to glew.h for calling convention customization +
      • Correction for glPathStencilDepthOffsetNV +
      • Resolve OSX gcc warnings +
      • Added build support for NetBSD +
      +
    +
+ +
+
    +
  • 1.7.0 [08-26-11] +
      +
    • New features: +
        +
      • Support for OpenGL 4.2 +
      +
    • New extensions: +
        +
      • GL_AMD_multi_draw_indirect +
      • GL_ARB_base_instance +
      • GL_ARB_compressed_texture_pixel_storage +
      • GL_ARB_conservative_depth +
      • GL_ARB_internalformat_query +
      • GL_ARB_map_buffer_alignment +
      • GL_ARB_shader_atomic_counters +
      • GL_ARB_shader_image_load_store +
      • GL_ARB_shading_language_420pack +
      • GL_ARB_shading_language_packing +
      • GL_ARB_texture_storage +
      • GL_ARB_transform_feedback_instanced +
      • GL_EXT_framebuffer_multisample_blit_scaled +
      • GL_NV_path_rendering +
      • GL_NV_path_rendering +
      • GLX_MESA_swap_control +
      +
    • Bug fixes: +
        +
      • const qualifiers for GL 1.4 MultiDrawArrays, MultiDrawElements +
      • Add glGetGraphicsResetStatusARB to GL_ARB_robustness +
      • Remove EXT suffix from GL_KTX_buffer_region entry points +
      • Solaris needs inttypes.h +
      • Add ERROR_INVALID_VERSION_ARB and ERROR_INVALID_PROFILE_ARB to WGL_ARB_create_context +
      • Add GLX_MESA_swap_control +
      • Set -install_name for OSX +
      • Add 64-bit darwin build option (SYSTEM=darwin_x86-64) +
      • Add GL_NV_path_rendering +
      +
    +
+ +
+
    +
  • 1.6.0 [04-27-11] +
      +
    • New extensions: +
        +
      • GL_AMD_blend_minmax_factor +
      • GL_AMD_sample_positions +
      • GL_EXT_x11_sync_object +
      • GL_NV_texture_multisample +
      • GL_NV_video_capture +
      • GLX_NV_video_capture +
      • WGL_NV_DX_interop +
      • WGL_NV_video_capture +
      +
    • Bug fixes: +
        +
      • Define GLEW_NO_GLU for no glu dependency. +
      • mx suffix for GLEW MX libraries, build both libraries by default. +
      • Cygwin build improvements +
      • Soname of GLEWmx shared libraries +
      • Query GL extension string only once +
      • GLX_OML_sync_control no longer requires C99 +
      • glDraw*InstancedARB moved from GL_ARB_draw_instanced to GL_ARB_instanced_arrays +
      • glFramebufferTextureLayerEXT moved from GL_EXT_geometry_shader4 to GL_EXT_texture_array +
      • Fixes for BSD build +
      +
    +
+ +
+
    +
  • 1.5.8 [01-31-11] +
      +
    • New extensions: +
        +
      • GL_AMD_depth_clamp_separate +
      • GL_EXT_texture_sRGB_decode +
      +
    • Bug fixes: +
        +
      • Borland C++ fix for __int64 +
      • GL_DOUBLE_MATNxM enumerants for OpenGL 4.0 +
      • Correction to glGetTransformFeedbackVarying +
      • Correction to glSecondaryColorPointer +
      • Corrections to glGetVertexAttribPointerv and glGetShaderSource +
      • Switched code repository from svn to git +
      +
    +
+ +
+
    +
  • 1.5.7 [11-03-10] +
      +
    • New extension: +
        +
      • GL_NVX_gpu_memory_info +
      +
    • Bug fixes: +
        +
      • Improved mingw32 build support +
      • Improved cygwin build support +
      • glGetPointervEXT fix +
      • Add GLEW_VERSION_1_2_1 +
      +
    +
+ +
+
    +
  • 1.5.6 [09-07-10] +
      +
    • New features: +
        +
      • Support for OpenGL 4.1 +
      +
    • New extensions: +
        +
      • GL_ARB_ES2_compatibility +
      • GL_ARB_cl_event +
      • GL_ARB_debug_output +
      • GL_ARB_get_program_binary +
      • GL_ARB_robustness +
      • GL_ARB_separate_shader_objects +
      • GL_ARB_shader_precision +
      • GL_ARB_shader_stencil_export +
      • GL_ARB_vertex_attrib_64bit +
      • GL_ARB_viewport_array +
      • GLX_ARB_create_context_robustness +
      • GLX_EXT_create_context_es2_profile +
      • WGL_ARB_create_context_robustness +
      • WGL_EXT_create_context_es2_profile +
      +
    +
+ +
+
    +
  • 1.5.5 [07-13-10] +
      +
    • New extensions: +
        +
      • GL_AMD_debug_output +
      • GL_AMD_name_gen_delete +
      • GL_AMD_transform_feedback3_lines_triangles +
      • GL_NV_multisample_coverage +
      • GL_NV_vdpau_interop +
      • GLX_AMD_gpu_association +
      • GLX_NV_multisample_coverage +
      • WGL_NV_multisample_coverage +
      +
    • Bug fixes: +
        +
      • Compilation issue with GLX_SGI_video_sync +
      • OpenGL 4.0 double-precision uniform functions added +
      • Constness of glPointParameterfvARB and glPointParameterfvEXT +
      • Added glVertexAttribDivisor +
      • Compilation issue with Nvidia GLX headers +
      +
    +
+ +
+
    +
  • 1.5.4 [04-21-10] +
      +
    • New features: +
        +
      • Support for OpenGL 3.3 +
      • Support for OpenGL 4.0 +
      +
    • New extensions: +
        +
      • GL_AMD_conservative_depth +
      • GL_ARB_blend_func_extended +
      • GL_ARB_draw_indirect +
      • GL_ARB_explicit_attrib_location +
      • GL_ARB_gpu_shader5 +
      • GL_ARB_gpu_shader_fp64 +
      • GL_ARB_occlusion_query2 +
      • GL_ARB_sampler_objects +
      • GL_ARB_shader_bit_encoding +
      • GL_ARB_shader_subroutine +
      • GL_ARB_shading_language_include +
      • GL_ARB_tessellation_shader +
      • GL_ARB_texture_buffer_object_rgb32 +
      • GL_ARB_texture_compression_bptc +
      • GL_ARB_texture_rgb10_a2ui +
      • GL_ARB_texture_swizzle +
      • GL_ARB_timer_query +
      • GL_ARB_transform_feedback2 +
      • GL_ARB_transform_feedback3 +
      • GL_ARB_vertex_type_2_10_10_10_rev +
      • GL_EXT_shader_image_load_store +
      • GL_EXT_vertex_attrib_64bit +
      • GL_NV_gpu_program5 +
      • GL_NV_gpu_program_fp64 +
      • GL_NV_gpu_shader5 +
      • GL_NV_tessellation_program5 +
      • GL_NV_vertex_attrib_integer_64bit +
      • GLX_ARB_vertex_buffer_object +
      +
    • Bug fixes: +
        +
      • Parameter constness fix for glPointParameteriv and glPointParameterfv +
      +
    +
+ +
+
    +
  • 1.5.3 [02-28-10] +
      +
    • New extensions: +
        +
      • GLX_INTEL_swap_event +
      • GL_AMD_seamless_cubemap_per_texture +
      • GL_AMD_shader_stencil_export +
      +
    • Bug fixes: +
        +
      • Correct version detection for GL 3.1 and 3.2 +
      • Missing 3.1 enumerants +
      • Add glew.pc +
      +
    +
+ +
+
    +
  • 1.5.2 [12-31-09] +
      +
    • New features: +
        +
      • Support for OpenGL 3.1 +
      • Support for OpenGL 3.2 +
      +
    • New extensions: +
        +
      • GL_AMD_draw_buffers_blend +
      • GL_AMD_performance_monitor +
      • GL_AMD_texture_texture4 +
      • GL_AMD_vertex_shader_tessellator +
      • GL_APPLE_aux_depth_stencil +
      • GL_APPLE_object_purgeable +
      • GL_APPLE_rgb_422 +
      • GL_APPLE_row_bytes +
      • GL_APPLE_vertex_program_evaluators +
      • GL_ARB_compatibility +
      • GL_ARB_copy_buffer +
      • GL_ARB_depth_clamp +
      • GL_ARB_draw_buffers_blend +
      • GL_ARB_draw_elements_base_vertex +
      • GL_ARB_fragment_coord_conventions +
      • GL_ARB_provoking_vertex +
      • GL_ARB_sample_shading +
      • GL_ARB_seamless_cube_map +
      • GL_ARB_shader_texture_lod +
      • GL_ARB_sync +
      • GL_ARB_texture_cube_map_array +
      • GL_ARB_texture_gather +
      • GL_ARB_texture_multisample +
      • GL_ARB_texture_query_lod +
      • GL_ARB_uniform_buffer_object +
      • GL_ARB_vertex_array_bgra +
      • GL_ATI_meminfo +
      • GL_EXT_provoking_vertex +
      • GL_EXT_separate_shader_objects +
      • GL_EXT_texture_snorm +
      • GL_NV_copy_image +
      • GL_NV_parameter_buffer_object2 +
      • GL_NV_shader_buffer_load +
      • GL_NV_texture_barrier +
      • GL_NV_transform_feedback2 +
      • GL_NV_vertex_buffer_unified_memory +
      • WGL_AMD_gpu_association +
      • WGL_ARB_create_context_profile +
      • WGL_NV_copy_image +
      • GLX_ARB_create_context_profile +
      • GLX_EXT_swap_control +
      • GLX_NV_copy_image +
      +
    • Bug fixes: +
        +
      • DOS line endings for windows .zip archives only. +
      • glTransformFeedbackVaryings arguments. +
      • Resource leak in glewinfo and visualinfo tools. +
      • WIN32_LEAN_AND_MEAN preprocessor pollution. +
      • Fixed version detection for GLEW_VERSION_2_1 and GLEW_VERSION_3_0. +
      • MesaGLUT glut.h GLAPIENTRY dependency. +
      • glFramebufferTextureLayer correction. +
      • OSX compiler warnings resolved. +
      • Cygwin linking to opengl32 by default, rather than X11 OpenGL. +
      • SnowLeopard (OSX 10.6) gl.h detection. +
      • Use $(STRIP) consistently. +
      +
    +
+ +
+
    +
  • 1.5.1 [11-03-08] +
      +
    • New features: +
        +
      • Support for OpenGL 3.0 +
      +
    • New extensions: +
        +
      • GL_ARB_depth_buffer_float +
      • GL_ARB_draw_instance, +
      • GL_ARB_framebuffer_object +
      • GL_ARB_framebuffer_sRGB +
      • GL_ARB_geometry_shader4 +
      • GL_ARB_half_float_pixel +
      • GL_ARB_half_float_vertex +
      • GL_ARB_instanced_arrays +
      • GL_ARB_map_buffer_range +
      • GL_ARB_texture_buffer_object +
      • GL_ARB_texture_compression_rgtc +
      • GL_ARB_vertex_array_object +
      • GL_EXT_direct_state_access +
      • GL_EXT_texture_swizzle +
      • GL_EXT_transform_feedback +
      • GL_EXT_vertex_array_bgra +
      • GL_NV_conditional_render +
      • GL_NV_explicit_multisample +
      • GL_NV_present_video +
      • GL_SGIS_point_line_texgen +
      • GL_SGIX_convolution_accuracy +
      • WGL_ARB_create_context +
      • WGL_ARB_framebuffer_sRGB +
      • WGL_NV_present_video +
      • WGL_NV_swap_group +
      • WGL_NV_video_output +
      • GLX_ARB_create_context +
      • GLX_ARB_framebuffer_sRGB +
      • GLX_NV_present_video +
      • GLX_NV_swap_group +
      • GLX_NV_video_output +
      +
    • Bug fixes: +
        +
      • Licensing issues with documentation +
      • Problems with long long and _MSC_VER on MINGW +
      • Incorrect parameter for glGetUniformLocation +
      • glewGetExtension fails on last entry +
      • Incomplete GL_NV_texture_shader tokens +
      • Scripting problems on Cygwin +
      • Incorrect definition for GLint on OS X +
      +
    +
+ +
+
    +
  • 1.5.0 [12-27-07] +
      +
    • New features: +
        +
      • Licensing change (BSD, Mesa 3-D, Khronos) +
      • Switch to using registry on www.opengl.org +
      • Support for major and minor version strings +
      +
    • New extensions: +
        +
      • GL_APPLE_flush_buffer_range +
      • GL_GREMEDY_frame_terminator +
      • GLX_EXT_texture_from_pixmap +
      +
    • Bug fixes: +
        +
      • Incorrect 64-bit type definitions +
      • Do not strip static library on install +
      • Missing tokens in GL_ATI_fragment_shader and WGL_{ARB,EXT}_make_current_read +
      • Missing tokens in GL_VERSION_2_1 +
      • Missing functions in GL_VERSION_1_4 +
      • Incorrect parameter type for glXCopyContext +
      +
    +
+
+
    +
  • 1.4.0 [04-27-07] +
      +
    • New features: +
        +
      • Extension variables are declared const to avoid possible +corruption of their values +
      +
    • New extensions: +
        +
      • GL_NV_depth_range_unclamped +
      +
    • Bug fixes: +
        +
      • Incorrect tokens in GL_NV_transform_feedback and GL_NV_framebuffer_multisample_coverage +
      • Incorrect function names in GL_EXT_gpu_program_parameters +
      • Missing tokens in GL_EXT_framebuffer_multisample +
      • GLEW_MX initialization problem for WGL_{ARB,EXT}_extensions_string +
      +
    +
+
+
    +
  • 1.3.6 [03-04-07] +
      +
    • New extensions: +
        +
      • GL_ATI_shader_texture_lod +
      • GL_EXT_gpu_program_parameters +
      • GL_NV_geometry_shader4 +
      • WGL_NV_gpu_affinity +
      • GLX_SGIX_hyperpipe +
      +
    • Bug fixes: +
        +
      • Missing include guards in glxew.h +
      • Makefile and install problems for Cygwin builds +
      • Install problem for Linux AMD64 builds +
      • Incorrect token in GL_ATI_texture_compression_3dc +
      • Missing tokens from GL_ATIX_point_sprites +
      +
    +
+
+
    +
  • 1.3.5 [11-21-06] +
      +
    • New features: +
        +
      • Support for core OpenGL 2.1 +
      • Debug support for glewIsSupported +
      +
    • New extensions: +
        +
      • GL_EXT_bindable_uniform +
      • GL_EXT_draw_buffers2 +
      • GL_EXT_draw_instanced +
      • GL_EXT_framebuffer_sRGB +
      • GL_EXT_geometry_shader4 +
      • GL_EXT_gpu_shader4 +
      • GL_EXT_packed_float +
      • GL_EXT_texture_array +
      • GL_EXT_texture_buffer_object +
      • GL_EXT_texture_compression_latc +
      • GL_EXT_texture_compression_rgtc +
      • GL_EXT_texture_integer +
      • GL_EXT_texture_shared_exponent +
      • GL_EXT_timer_query +
      • GL_NV_depth_buffer_float +
      • GL_NV_fragment_program4 +
      • GL_NV_framebuffer_multisample_coverage +
      • GL_NV_geometry_program4 +
      • GL_NV_gpu_program4 +
      • GL_NV_parameter_buffer_object +
      • GL_NV_transform_feedback +
      • GL_NV_vertex_program4 +
      • GL_OES_byte_coordinates +
      • GL_OES_compressed_paletted_texture +
      • GL_OES_read_format +
      • GL_OES_single_precision +
      • WGL_EXT_pixel_format_packed_float +
      • WGL_EXT_framebuffer_sRGB +
      • GLX_EXT_fbconfig_packed_float +
      • GLX_EXT_framebuffer_sRGB +
      +
    • Bug fixes: +
        +
      • Wrong GLXContext definition on Solaris +
      • Makefile problem for parallel builds +
      +
    +
+
+
    +
  • 1.3.4 [03-04-06] +
      +
    • New extensions: +
        +
      • GL_EXT_framebuffer_blit +
      • GL_EXT_framebuffer_multisample +
      • GL_EXT_packed_depth_stencil +
      • GL_MESAX_texture_stack +
      • WGL_3DL_stereo_control +
      +
    +
      +
    • Bug fixes: +
        +
      • glBlendEquation missing from GL_ARB_imaging +
      • Wrong APIENTRY definition for Cygwin +
      • Incorrect OS X OpenGL types +
      • Unix 64-bit installation patch +
      +
    +
+
+
    +
  • 1.3.3 [05-16-05] +
      +
    • New feature: +
        +
      • Code generation option to split source into multiple files +
      +
    +
      +
    • Bug fixes: +
        +
      • OpenGL 2.0 core initialization problems +
      • Wrong value for token GL_SHADER_TYPE +
      • Missing tokens in GL_ATI_fragment_shader +
      • Missing entry points in GL_ARB_transpose_matrix +
      +
    +
+
+
    +
  • 1.3.2 [03-16-05] +
      +
    • New extension: +
        +
      • GL_APPLE_pixel_buffer +
      +
    • Bug fixes: +
        +
      • Missing OpenGL 2.0 entry points +
      • Missing tokens in GL_SGIX_shadow +
      • MinGW makefile problem +
      • Check for incorrect OpenGL version string on SiS hardware +
      • Documentation update to meet the HTML 4.01 Transitional specification +
      +
    +
+
+
    +
  • 1.3.1 [02-02-05] +
      +
    • New features: +
        +
      • Consistent Unix and Windows versioning +
      +
    • New extensions: +
        +
      • GL_EXT_framebuffer_object +
      • GL_ARB_pixel_buffer_object +
      +
    • Bug fixes: +
        +
      • Missing OpenGL 2.0 tokens +
      • Incorrect typedefs (GLhandleARB and GLhalf) +
      • Borland compiler problems +
      +
    +
+
+
    +
  • 1.3.0 [01-04-05] +
      +
    • New features: +
        +
      • Support for core OpenGL 2.0 +
      • glewIsSupported provides efficient string-based extension checks +
      • Custom code generation from a list of extensions +
      • Makefile changes +
      +
    • New extensions: +
        +
      • WGL_ATI_render_texture_rectangle +
      +
    • Bug fixes: +
        +
      • Incorrect function signature in OpenGL 1.5 core +
      +
    +
+
+
    +
  • 1.2.5 [12-06-04] +
      +
    • New extensions: +
        +
      • GL_ATI_texture_compression_3dc +
      • GL_EXT_Cg_shader +
      • GL_EXT_draw_range_elements +
      • GL_KTX_buffer_region +
      +
    • Bug fixes: +
        +
      • OpenGL version detection bug +
      • Problems with wxWindows and MinGW compilation +
      • visualinfo compilation problem with GLEW_MX specified +
      • Wrong token name in OpenGL 1.5 core +
      +
    • Support for FreeBSD +
    +
+
+
    +
  • 1.2.4 [09-06-04] +
      +
    • Added ARB_draw_buffers and ARB_texture_rectangle +
    • Fixed bug in ARB_shader_objects +
    • Replaced wglinfo with visualinfo +
    +
+
+
    +
  • 1.2.3 [06-10-04] +
      +
    • Added GL_NV_fragment_program2, GL_NV_fragment_program_option, GL_NV_vertex_program2_option, GL_NV_vertex_program3 +
    • Bug fix in GL_ARB_vertex_blend +
    +
+
+
    +
  • 1.2.2 [05-08-04] +
      +
    • Added GL_EXT_pixel_buffer_object, removed GL_NV_element_array +
    • Fixed GLEW_MX problems +
    • Bug fix in GL_EXT_texture_rectangle and wglinfo +
    +
+
+
    +
  • 1.2.1 [03-18-04] +
      +
    • Bug fix in OpenGL version query (early release of 1.2.0 contained this bug) +
    • Bug fix in GL_ARB_shader_objects and temporary bug fix in GL_ARB_vertex_shader +
    • Added flags on GDI support and multisampling to wglinfo +
    +
+
+
    +
  • 1.2.0 [02-19-04] +
      +
    • Added full OpenGL 1.5 support +
    • Added support for multiple rendering contexts with different capabilities +
    • Added command line flags to glewinfo for selecting displays and visuals +
    • Added GLX_SGIS_multisample, GLX_SUN_video_resize, and GL_SUN_read_video_pixels +
    • Added MinGW/MSYS support +
    • Bug fixes in GL_ARB_shader_objects and the OS X build +
    +
+
+
    +
  • 1.1.4 [12-15-03] +
      +
    • Added GL_APPLE_float_pixels, GL_APPLE_texture_range, +GL_EXT_texture_cube_map, GL_EXT_texture_edge_clamp, +GLX_ATI_pixel_format_float, and GLX_ATI_render_texture +
    • Bug fixes in GL_ATI_map_object_buffer and GL_ATI_fragment_shader +
    +
+
+
    +
  • 1.1.3 [10-28-03] +
      +
    • Added Solaris and Darwin support +
    • Added GL_ARB_fragment_shader, GL_ARB_shader_objects, and GL_ARB_vertex_shader +
    • Fixed bug in GL_WIN_swap_hint +
    • Removed glewinfo's dependency on GLUT +
    +
+
+
    +
  • 1.1.2 [09-15-03] +
      +
    • Removed dependency on WGL_{ARB,EXT}_extensions_string to make GLEW run on Matrox cards +
    • Added glewGetString for querying the GLEW version string +
    +
+
+
    +
  • 1.1.1 [08-11-03] +
      +
    • Added GLX_NV_float_buffer, GL_ARB_shading_language_100, and GL_ARB_texture_non_power_of_two +
    • Fixed bug in GL_ARB_vertex_buffer_object +
    • Minor updates in documentation +
    +
+
+
    +
  • 1.1.0 [07-08-03] +
      +
    • Added automatic code generation +
    • Added almost every extension in the registry +
    • Added separate namespace +
    • Added Irix support +
    • Updated documentation +
    +
+
+
    +
  • 1.0.7 [06-29-03] +
      +
    • Added GL_EXT_depth_bounds_test +
    • Fixed typos +
    +
+
+
    +
  • 1.0.6 [05-05-03] +
      +
    • Added ARB_vertex_buffer_object and NV_half_float +
    • Updated wglinfo +
    • Temporary Linux bug fixes (problems with SDL and MESA) +
    +
+
+
    +
  • 1.0.5 [02-17-03] +
      +
    • Bug fixes +
    • Added wglinfo +
    • Updated documentation +
    +
+
+
    +
  • 1.0.4 [02-02-03] +
      +
    • Added NV_texture_expand_normal +
    • Added mingw support +
    • Updated documentation +
    +
+
+
    +
  • 1.0.3 [01-09-03] +
      +
    • Cleaned up ATI extensions +
    • Changed function prototypes to match glext.h +
    • Added EXT_texture3D +
    • Fixed typos in ATI_vertex_attrib_array_object and ATI_draw_buffers +
    +
+
+
    +
  • 1.0.2 [12-21-02] +
      +
    • Added list of supported extensions to documentation +
    • Added NV_half_float and NV_texgen_emboss +
    +
+
+
    +
  • 1.0.1 [12-17-02] +
      +
    • Bug fixes +
    • Added glewGetExtension +
    +
+
+
    +
  • 1.0.0 [12-12-02] +
      +
    • Initial release +
    +
+
+ diff --git a/vendor/glew-cmake-2.2.0/auto/src/eglew_head.h b/vendor/glew-cmake-2.2.0/auto/src/eglew_head.h new file mode 100644 index 0000000..121efaf --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/eglew_head.h @@ -0,0 +1,98 @@ +#ifndef __eglew_h__ +#define __eglew_h__ +#define __EGLEW_H__ + +#ifdef __eglext_h_ +#error eglext.h included before eglew.h +#endif + +#if defined(__egl_h_) +#error egl.h included before eglew.h +#endif + +#define __eglext_h_ + +#define __egl_h_ + +#ifndef EGLAPIENTRY +#define EGLAPIENTRY +#endif +#ifndef EGLAPI +#define EGLAPI extern +#endif + +/* EGL Types */ +#include + +#include +#include + +#ifndef GLEW_INCLUDE +# include +#else +# include GLEW_INCLUDE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef int32_t EGLint; + +typedef unsigned int EGLBoolean; +typedef void *EGLDisplay; +typedef void *EGLConfig; +typedef void *EGLSurface; +typedef void *EGLContext; +typedef void (*__eglMustCastToProperFunctionPointerType)(void); + +typedef unsigned int EGLenum; +typedef void *EGLClientBuffer; + +typedef void *EGLSync; +typedef intptr_t EGLAttrib; +typedef khronos_utime_nanoseconds_t EGLTime; +typedef void *EGLImage; + +typedef void *EGLSyncKHR; +typedef intptr_t EGLAttribKHR; +typedef void *EGLLabelKHR; +typedef void *EGLObjectKHR; +typedef void (EGLAPIENTRY *EGLDEBUGPROCKHR)(EGLenum error,const char *command,EGLint messageType,EGLLabelKHR threadLabel,EGLLabelKHR objectLabel,const char* message); +typedef khronos_utime_nanoseconds_t EGLTimeKHR; +typedef void *EGLImageKHR; +typedef void *EGLStreamKHR; +typedef khronos_uint64_t EGLuint64KHR; +typedef int EGLNativeFileDescriptorKHR; +typedef khronos_ssize_t EGLsizeiANDROID; +typedef void (*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize); +typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize); +typedef void *EGLDeviceEXT; +typedef void *EGLOutputLayerEXT; +typedef void *EGLOutputPortEXT; +typedef void *EGLSyncNV; +typedef khronos_utime_nanoseconds_t EGLTimeNV; +typedef khronos_utime_nanoseconds_t EGLuint64NV; +typedef khronos_stime_nanoseconds_t EGLnsecsANDROID; + +struct EGLClientPixmapHI; +struct AHardwareBuffer; + +/* Wayland types for WL_bind_wayland_display purposes */ +struct wl_buffer; +struct wl_display; +struct wl_resource; + +#define EGL_DONT_CARE ((EGLint)-1) + +#define EGL_NO_CONTEXT ((EGLContext)0) +#define EGL_NO_DISPLAY ((EGLDisplay)0) +#define EGL_NO_IMAGE ((EGLImage)0) +#define EGL_NO_SURFACE ((EGLSurface)0) +#define EGL_NO_SYNC ((EGLSync)0) + +#define EGL_UNKNOWN ((EGLint)-1) + +#define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0) + +EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname); diff --git a/vendor/glew-cmake-2.2.0/auto/src/eglew_mid.h b/vendor/glew-cmake-2.2.0/auto/src/eglew_mid.h new file mode 100644 index 0000000..f94a149 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/eglew_mid.h @@ -0,0 +1,4 @@ +/* ------------------------------------------------------------------------- */ + +#define EGLEW_FUN_EXPORT GLEW_FUN_EXPORT +#define EGLEW_VAR_EXPORT GLEW_VAR_EXPORT diff --git a/vendor/glew-cmake-2.2.0/auto/src/eglew_tail.h b/vendor/glew-cmake-2.2.0/auto/src/eglew_tail.h new file mode 100644 index 0000000..a91a76e --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/eglew_tail.h @@ -0,0 +1,15 @@ +/* ------------------------------------------------------------------------ */ + +GLEWAPI GLenum GLEWAPIENTRY eglewInit (EGLDisplay display); +GLEWAPI GLboolean GLEWAPIENTRY eglewIsSupported (const char *name); + +#define EGLEW_GET_VAR(x) (*(const GLboolean*)&x) +#define EGLEW_GET_FUN(x) x + +GLEWAPI GLboolean GLEWAPIENTRY eglewGetExtension (const char *name); + +#ifdef __cplusplus +} +#endif + +#endif /* __eglew_h__ */ diff --git a/vendor/glew-cmake-2.2.0/auto/src/footer.html b/vendor/glew-cmake-2.2.0/auto/src/footer.html new file mode 100644 index 0000000..3adb9c1 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/footer.html @@ -0,0 +1,4 @@ + + + + diff --git a/vendor/glew-cmake-2.2.0/auto/src/glew.rc b/vendor/glew-cmake-2.2.0/auto/src/glew.rc new file mode 100644 index 0000000..71167fd --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glew.rc @@ -0,0 +1,136 @@ + +#include + +#ifdef GLEW_STATIC +# ifdef _DEBUG +# define FILENAME "glew32sd.dll" +# else +# define FILENAME "glew32s.dll" +# endif +#else +# ifdef _DEBUG +# define FILENAME "glew32d.dll" +# else +# define FILENAME "glew32.dll" +# endif +#endif + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// +VS_VERSION_INFO VERSIONINFO +FILEVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 +PRODUCTVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 +FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG +FILEFLAGS VS_FF_DEBUG +#else +FILEFLAGS 0x0L +#endif +FILEOS VOS__WINDOWS32 +#ifdef GLEW_STATIC +FILETYPE VFT_STATIC_LIB +#else +FILETYPE VFT_DLL +#endif +FILESUBTYPE VFT2_UNKNOWN +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", + "The OpenGL Extension Wrangler Library\r\n" + "Copyright (C) 2008-2019, Nigel Stewart \r\n" + "Copyright (C) 2002-2008, Milan Ikits \r\n" + "Copyright (C) 2002-2008, Marcelo E. Magallon \r\n" + "Copyright (C) 2002, Lev Povalahev\r\n" + "All rights reserved.\r\n" + "\r\n" + "Redistribution and use in source and binary forms, with or without \r\n" + "modification, are permitted provided that the following conditions are met:\r\n" + "\r\n" + "* Redistributions of source code must retain the above copyright notice, \r\n" + " this list of conditions and the following disclaimer.\r\n" + "* Redistributions in binary form must reproduce the above copyright notice, \r\n" + " this list of conditions and the following disclaimer in the documentation \r\n" + " and/or other materials provided with the distribution.\r\n" + "* The name of the author may be used to endorse or promote products \r\n" + " derived from this software without specific prior written permission.\r\n" + "\r\n" + "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' \r\n" + "AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \r\n" + "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n" + "ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE \r\n" + "LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR \r\n" + "CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF \r\n" + "SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n" + "INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n" + "CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n" + "ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\r\n" + "THE POSSIBILITY OF SUCH DAMAGE.\r\n" + "\r\n" + "\r\n" + "Mesa 3-D graphics library\r\n" + "\r\n" + "Version: 7.0\r\n" + "\r\n" + "Copyright (C) 1999-2007 Brian Paul All Rights Reserved.\r\n" + "\r\n" + "Permission is hereby granted, free of charge, to any person obtaining a\r\n" + "copy of this software and associated documentation files (the ''Software''),\r\n" + "to deal in the Software without restriction, including without limitation\r\n" + "the rights to use, copy, modify, merge, publish, distribute, sublicense,\r\n" + "and/or sell copies of the Software, and to permit persons to whom the\r\n" + "Software is furnished to do so, subject to the following conditions:\r\n" + "\r\n" + "The above copyright notice and this permission notice shall be included\r\n" + "in all copies or substantial portions of the Software.\r\n" + "\r\n" + "THE SOFTWARE IS PROVIDED ''AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n" + "OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n" + "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r\n" + "BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\r\n" + "AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n" + "CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n" + "\r\n" + "\r\n" + "Copyright (c) 2007 The Khronos Group Inc.\r\n" + "\r\n" + "Permission is hereby granted, free of charge, to any person obtaining a\r\n" + "copy of this software and/or associated documentation files (the\r\n" + "''Materials''), to deal in the Materials without restriction, including\r\n" + "without limitation the rights to use, copy, modify, merge, publish,\r\n" + "distribute, sublicense, and/or sell copies of the Materials, and to\r\n" + "permit persons to whom the Materials are furnished to do so, subject to\r\n" + "the following conditions:\r\n" + "\r\n" + "The above copyright notice and this permission notice shall be included\r\n" + "in all copies or substantial portions of the Materials.\r\n" + "\r\n" + "THE MATERIALS ARE PROVIDED ''AS IS'', WITHOUT WARRANTY OF ANY KIND,\r\n" + "EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n" + "MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n" + "IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n" + "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n" + "TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n" + "MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.\0" + VALUE "CompanyName", "\0" + VALUE "FileDescription", "The OpenGL Extension Wrangler Library\0" + VALUE "FileVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" + VALUE "InternalName", "GLEW\0" + VALUE "LegalCopyright", "(C) 2002-2019 Nigel Stewart & Milan Ikits & Marcelo Magallon\0" + VALUE "LegalTrademarks", "\0" + VALUE "OriginalFilename", FILENAME "\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "The OpenGL Extension Wrangler Library\0" + VALUE "ProductVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END diff --git a/vendor/glew-cmake-2.2.0/auto/src/glew_head.c b/vendor/glew-cmake-2.2.0/auto/src/glew_head.c new file mode 100644 index 0000000..9a3802f --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glew_head.c @@ -0,0 +1,289 @@ +#ifndef GLEW_INCLUDE +# include +#else +# include GLEW_INCLUDE +#endif + +#if defined(GLEW_OSMESA) +# define GLAPI extern +# include +#elif defined(GLEW_EGL) +# include +#elif defined(_WIN32) +/* + * If NOGDI is defined, wingdi.h won't be included by windows.h, and thus + * wglGetProcAddress won't be declared. It will instead be implicitly declared, + * potentially incorrectly, which we don't want. + */ +# if defined(NOGDI) +# undef NOGDI +# endif +# include +#elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) +# include +#endif + +#include /* For size_t */ + +#if defined(GLEW_EGL) +#elif defined(GLEW_REGAL) + +/* In GLEW_REGAL mode we call directly into the linked + libRegal.so glGetProcAddressREGAL for looking up + the GL function pointers. */ + +# undef glGetProcAddressREGAL +# ifdef WIN32 +extern void * __stdcall glGetProcAddressREGAL(const GLchar *name); +static void * (__stdcall * regalGetProcAddress) (const GLchar *) = glGetProcAddressREGAL; +# else +extern void * glGetProcAddressREGAL(const GLchar *name); +static void * (*regalGetProcAddress) (const GLchar *) = glGetProcAddressREGAL; +# endif +# define glGetProcAddressREGAL GLEW_GET_FUN(__glewGetProcAddressREGAL) + +#elif defined(__sgi) || defined (__sun) || defined(__HAIKU__) || defined(GLEW_APPLE_GLX) +#include +#include +#include + +void* dlGetProcAddress (const GLubyte* name) +{ + static void* h = NULL; + static void* gpa; + + if (h == NULL) + { + if ((h = dlopen(NULL, RTLD_LAZY | RTLD_LOCAL)) == NULL) return NULL; + gpa = dlsym(h, "glXGetProcAddress"); + } + + if (gpa != NULL) + return ((void*(*)(const GLubyte*))gpa)(name); + else + return dlsym(h, (const char*)name); +} +#endif /* __sgi || __sun || GLEW_APPLE_GLX */ + +#if defined(__APPLE__) +#include +#include +#include + +#if defined(MAC_OS_X_VERSION_10_3) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_3 + +#include + +void* NSGLGetProcAddress (const GLubyte *name) +{ + static void* image = NULL; + void* addr; + if (NULL == image) + { + image = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_LAZY); + } + if( !image ) return NULL; + addr = dlsym(image, (const char*)name); + if( addr ) return addr; +#ifdef GLEW_APPLE_GLX + return dlGetProcAddress( name ); // try next for glx symbols +#else + return NULL; +#endif +} +#else + +#include + +void* NSGLGetProcAddress (const GLubyte *name) +{ + static const struct mach_header* image = NULL; + NSSymbol symbol; + char* symbolName; + if (NULL == image) + { + image = NSAddImage("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", NSADDIMAGE_OPTION_RETURN_ON_ERROR); + } + /* prepend a '_' for the Unix C symbol mangling convention */ + symbolName = malloc(strlen((const char*)name) + 2); + strcpy(symbolName+1, (const char*)name); + symbolName[0] = '_'; + symbol = NULL; + /* if (NSIsSymbolNameDefined(symbolName)) + symbol = NSLookupAndBindSymbol(symbolName); */ + symbol = image ? NSLookupSymbolInImage(image, symbolName, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND | NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR) : NULL; + free(symbolName); + if( symbol ) return NSAddressOfSymbol(symbol); +#ifdef GLEW_APPLE_GLX + return dlGetProcAddress( name ); // try next for glx symbols +#else + return NULL; +#endif +} +#endif /* defined(MAC_OS_X_VERSION_10_3) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_3 */ +#endif /* __APPLE__ */ + +/* + * Define glewGetProcAddress. + */ +#if defined(GLEW_REGAL) +# define glewGetProcAddress(name) regalGetProcAddress((const GLchar *)name) +#elif defined(GLEW_OSMESA) +# define glewGetProcAddress(name) OSMesaGetProcAddress((const char *)name) +#elif defined(GLEW_EGL) +# define glewGetProcAddress(name) eglGetProcAddress((const char *)name) +#elif defined(_WIN32) +# define glewGetProcAddress(name) wglGetProcAddress((LPCSTR)name) +#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) +# define glewGetProcAddress(name) NSGLGetProcAddress(name) +#elif defined(__sgi) || defined(__sun) || defined(__HAIKU__) +# define glewGetProcAddress(name) dlGetProcAddress(name) +#elif defined(__ANDROID__) +# define glewGetProcAddress(name) NULL /* TODO */ +#elif defined(__native_client__) +# define glewGetProcAddress(name) NULL /* TODO */ +#else /* __linux */ +# define glewGetProcAddress(name) (*glXGetProcAddressARB)(name) +#endif + +/* + * Redefine GLEW_GET_VAR etc without const cast + */ + +#undef GLEW_GET_VAR +# define GLEW_GET_VAR(x) (x) + +#ifdef WGLEW_GET_VAR +# undef WGLEW_GET_VAR +# define WGLEW_GET_VAR(x) (x) +#endif /* WGLEW_GET_VAR */ + +#ifdef GLXEW_GET_VAR +# undef GLXEW_GET_VAR +# define GLXEW_GET_VAR(x) (x) +#endif /* GLXEW_GET_VAR */ + +#ifdef EGLEW_GET_VAR +# undef EGLEW_GET_VAR +# define EGLEW_GET_VAR(x) (x) +#endif /* EGLEW_GET_VAR */ + +/* + * GLEW, just like OpenGL or GLU, does not rely on the standard C library. + * These functions implement the functionality required in this file. + */ + +static GLuint _glewStrLen (const GLubyte* s) +{ + GLuint i=0; + if (s == NULL) return 0; + while (s[i] != '\0') i++; + return i; +} + +static GLuint _glewStrCLen (const GLubyte* s, GLubyte c) +{ + GLuint i=0; + if (s == NULL) return 0; + while (s[i] != '\0' && s[i] != c) i++; + return i; +} + +static GLuint _glewStrCopy(char *d, const char *s, char c) +{ + GLuint i=0; + if (s == NULL) return 0; + while (s[i] != '\0' && s[i] != c) { d[i] = s[i]; i++; } + d[i] = '\0'; + return i; +} + +#if !defined(GLEW_OSMESA) +#if !defined(__APPLE__) || defined(GLEW_APPLE_GLX) +static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) +{ + GLuint i=0; + if(a == NULL || b == NULL) + return (a == NULL && b == NULL && n == 0) ? GL_TRUE : GL_FALSE; + while (i < n && a[i] != '\0' && b[i] != '\0' && a[i] == b[i]) i++; + return i == n ? GL_TRUE : GL_FALSE; +} +#endif +#endif + +static GLboolean _glewStrSame1 (const GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) +{ + while (*na > 0 && (**a == ' ' || **a == '\n' || **a == '\r' || **a == '\t')) + { + (*a)++; + (*na)--; + } + if(*na >= nb) + { + GLuint i=0; + while (i < nb && (*a)[i] == b[i]) i++; + if(i == nb) + { + *a = *a + nb; + *na = *na - nb; + return GL_TRUE; + } + } + return GL_FALSE; +} + +static GLboolean _glewStrSame2 (const GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) +{ + if(*na >= nb) + { + GLuint i=0; + while (i < nb && (*a)[i] == b[i]) i++; + if(i == nb) + { + *a = *a + nb; + *na = *na - nb; + return GL_TRUE; + } + } + return GL_FALSE; +} + +static GLboolean _glewStrSame3 (const GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) +{ + if(*na >= nb) + { + GLuint i=0; + while (i < nb && (*a)[i] == b[i]) i++; + if (i == nb && (*na == nb || (*a)[i] == ' ' || (*a)[i] == '\n' || (*a)[i] == '\r' || (*a)[i] == '\t')) + { + *a = *a + nb; + *na = *na - nb; + return GL_TRUE; + } + } + return GL_FALSE; +} + +/* + * Search for name in the extensions string. Use of strstr() + * is not sufficient because extension names can be prefixes of + * other extension names. Could use strtok() but the constant + * string returned by glGetString might be in read-only memory. + */ +#if !defined(GLEW_OSMESA) +#if !defined(__APPLE__) || defined(GLEW_APPLE_GLX) +static GLboolean _glewSearchExtension (const char* name, const GLubyte *start, const GLubyte *end) +{ + const GLubyte* p; + GLuint len = _glewStrLen((const GLubyte*)name); + p = start; + while (p < end) + { + GLuint n = _glewStrCLen(p, ' '); + if (len == n && _glewStrSame((const GLubyte*)name, p, n)) return GL_TRUE; + p += n+1; + } + return GL_FALSE; +} +#endif +#endif diff --git a/vendor/glew-cmake-2.2.0/auto/src/glew_head.h b/vendor/glew-cmake-2.2.0/auto/src/glew_head.h new file mode 100644 index 0000000..9277d2a --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glew_head.h @@ -0,0 +1,1139 @@ +#ifndef __glew_h__ +#define __glew_h__ +#define __GLEW_H__ + +#if defined(__gl_h_) || defined(__GL_H__) || defined(_GL_H) || defined(__gl_gl_h_) || defined(__X_GL_H) +#error gl.h included before glew.h +#endif +#if defined(__gl2_h_) +#error gl2.h included before glew.h +#endif +#if defined(__gltypes_h_) +#error gltypes.h included before glew.h +#endif +#if defined(__REGAL_H__) +#error Regal.h included before glew.h +#endif +#if defined(__glext_h_) || defined(__GLEXT_H_) || defined(__gl_glext_h_) +#error glext.h included before glew.h +#endif +#if defined(__gl_ATI_h_) +#error glATI.h included before glew.h +#endif + +#define __gl_h_ +#define __gl2_h_ +#define __GL_H__ +#define _GL_H +#define __gl_gl_h_ +#define __gltypes_h_ +#define __REGAL_H__ +#define __X_GL_H +#define __glext_h_ +#define __GLEXT_H_ +#define __gl_glext_h_ +#define __gl_ATI_h_ + +#if defined(_WIN32) + +/* + * GLEW does not include to avoid name space pollution. + * GL needs GLAPI and GLAPIENTRY, GLU needs APIENTRY, CALLBACK, and wchar_t + * defined properly. + */ +/* and */ +#ifdef APIENTRY +# ifndef GLAPIENTRY +# define GLAPIENTRY APIENTRY +# endif +# ifndef GLEWAPIENTRY +# define GLEWAPIENTRY APIENTRY +# endif +#else +#define GLEW_APIENTRY_DEFINED +# if defined(__MINGW32__) || defined(__CYGWIN__) || (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) +# define APIENTRY __stdcall +# ifndef GLAPIENTRY +# define GLAPIENTRY __stdcall +# endif +# ifndef GLEWAPIENTRY +# define GLEWAPIENTRY __stdcall +# endif +# else +# define APIENTRY +# endif +#endif +/* */ +#ifndef CALLBACK +#define GLEW_CALLBACK_DEFINED +# if defined(__MINGW32__) || defined(__CYGWIN__) +# define CALLBACK __attribute__ ((__stdcall__)) +# elif (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) +# define CALLBACK __stdcall +# else +# define CALLBACK +# endif +#endif +/* and */ +#ifndef WINGDIAPI +#define GLEW_WINGDIAPI_DEFINED +#define WINGDIAPI __declspec(dllimport) +#endif +/* */ +#if (defined(_MSC_VER) || defined(__BORLANDC__)) && !defined(_WCHAR_T_DEFINED) +typedef unsigned short wchar_t; +# define _WCHAR_T_DEFINED +#endif +/* */ +#if !defined(_W64) +# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && defined(_MSC_VER) && _MSC_VER >= 1300 +# define _W64 __w64 +# else +# define _W64 +# endif +#endif +#if !defined(_PTRDIFF_T_DEFINED) && !defined(_PTRDIFF_T_) && !defined(__MINGW64__) +# ifdef _WIN64 +typedef __int64 ptrdiff_t; +# else +typedef _W64 int ptrdiff_t; +# endif +# define _PTRDIFF_T_DEFINED +# define _PTRDIFF_T_ +#endif + +#ifndef GLAPI +# if defined(__MINGW32__) || defined(__CYGWIN__) +# define GLAPI extern +# else +# define GLAPI WINGDIAPI +# endif +#endif + +/* + * GLEW_STATIC is defined for static library. + * GLEW_BUILD is defined for building the DLL library. + */ + +#ifdef GLEW_STATIC +# define GLEWAPI extern +#else +# ifdef GLEW_BUILD +# define GLEWAPI extern __declspec(dllexport) +# else +# define GLEWAPI extern __declspec(dllimport) +# endif +#endif + +#else /* _UNIX */ + +/* + * Needed for ptrdiff_t in turn needed by VBO. This is defined by ISO + * C. On my system, this amounts to _3 lines_ of included code, all of + * them pretty much harmless. If you know of a way of detecting 32 vs + * 64 _targets_ at compile time you are free to replace this with + * something that's portable. For now, _this_ is the portable solution. + * (mem, 2004-01-04) + */ + +#if defined(__APPLE__) || defined(__linux__) +# if defined(__cplusplus) +# include +# include +# else +# include +# include +# endif +#else + +# include + +/* SGI MIPSPro doesn't like stdint.h in C++ mode */ +/* ID: 3376260 Solaris 9 has inttypes.h, but not stdint.h */ + +# if (defined(__sgi) || defined(__sun)) && !defined(__GNUC__) +# include +# else +# include +# endif +#endif + +#define GLEW_APIENTRY_DEFINED +#define APIENTRY + +/* + * GLEW_STATIC is defined for static library. + */ + +#ifdef GLEW_STATIC +# define GLEWAPI extern +#else +# if defined(__GNUC__) && __GNUC__>=4 +# define GLEWAPI extern __attribute__ ((visibility("default"))) +# elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) +# define GLEWAPI extern __global +# else +# define GLEWAPI extern +# endif +#endif + +/* */ +#ifndef GLAPI +#define GLAPI extern +#endif + +#endif /* _WIN32 */ + +#ifndef GLAPIENTRY +#define GLAPIENTRY +#endif + +#ifndef GLEWAPIENTRY +#define GLEWAPIENTRY +#endif + +#define GLEW_VAR_EXPORT GLEWAPI +#define GLEW_FUN_EXPORT GLEWAPI + +#ifdef __cplusplus +extern "C" { +#endif + +/* ----------------------------- GL_VERSION_1_1 ---------------------------- */ + +#ifndef GL_VERSION_1_1 +#define GL_VERSION_1_1 1 + +typedef unsigned int GLenum; +typedef unsigned int GLbitfield; +typedef unsigned int GLuint; +typedef int GLint; +typedef int GLsizei; +typedef unsigned char GLboolean; +typedef signed char GLbyte; +typedef short GLshort; +typedef unsigned char GLubyte; +typedef unsigned short GLushort; +typedef unsigned long GLulong; +typedef float GLfloat; +typedef float GLclampf; +typedef double GLdouble; +typedef double GLclampd; +typedef void GLvoid; +#if defined(_MSC_VER) && _MSC_VER < 1400 +typedef __int64 GLint64EXT; +typedef unsigned __int64 GLuint64EXT; +#elif defined(_MSC_VER) || defined(__BORLANDC__) +typedef signed long long GLint64EXT; +typedef unsigned long long GLuint64EXT; +#else +# if defined(__MINGW32__) || defined(__CYGWIN__) +#include +# endif +typedef int64_t GLint64EXT; +typedef uint64_t GLuint64EXT; +#endif +typedef GLint64EXT GLint64; +typedef GLuint64EXT GLuint64; +typedef struct __GLsync *GLsync; + +typedef char GLchar; + +typedef void *GLeglImageOES; /* GL_EXT_EGL_image_storage */ + +#define GL_ZERO 0 +#define GL_FALSE 0 +#define GL_LOGIC_OP 0x0BF1 +#define GL_NONE 0 +#define GL_TEXTURE_COMPONENTS 0x1003 +#define GL_NO_ERROR 0 +#define GL_POINTS 0x0000 +#define GL_CURRENT_BIT 0x00000001 +#define GL_TRUE 1 +#define GL_ONE 1 +#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_POINT_BIT 0x00000002 +#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 +#define GL_LINE_STRIP 0x0003 +#define GL_LINE_BIT 0x00000004 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 +#define GL_QUADS 0x0007 +#define GL_QUAD_STRIP 0x0008 +#define GL_POLYGON_BIT 0x00000008 +#define GL_POLYGON 0x0009 +#define GL_POLYGON_STIPPLE_BIT 0x00000010 +#define GL_PIXEL_MODE_BIT 0x00000020 +#define GL_LIGHTING_BIT 0x00000040 +#define GL_FOG_BIT 0x00000080 +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_ACCUM 0x0100 +#define GL_LOAD 0x0101 +#define GL_RETURN 0x0102 +#define GL_MULT 0x0103 +#define GL_ADD 0x0104 +#define GL_NEVER 0x0200 +#define GL_ACCUM_BUFFER_BIT 0x00000200 +#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_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_STENCIL_BUFFER_BIT 0x00000400 +#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_AUX0 0x0409 +#define GL_AUX1 0x040A +#define GL_AUX2 0x040B +#define GL_AUX3 0x040C +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_OUT_OF_MEMORY 0x0505 +#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_VIEWPORT_BIT 0x00000800 +#define GL_EXP2 0x0801 +#define GL_CW 0x0900 +#define GL_CCW 0x0901 +#define GL_COEFF 0x0A00 +#define GL_ORDER 0x0A01 +#define GL_DOMAIN 0x0A02 +#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_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_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_MODE 0x0B40 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_POLYGON_STIPPLE 0x0B42 +#define GL_EDGE_FLAG 0x0B43 +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#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_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_ACCUM_CLEAR_VALUE 0x0B80 +#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_MATRIX_MODE 0x0BA0 +#define GL_NORMALIZE 0x0BA1 +#define GL_VIEWPORT 0x0BA2 +#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_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 +#define GL_ALPHA_TEST 0x0BC0 +#define GL_ALPHA_TEST_FUNC 0x0BC1 +#define GL_ALPHA_TEST_REF 0x0BC2 +#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_INDEX_LOGIC_OP 0x0BF1 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_AUX_BUFFERS 0x0C00 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_READ_BUFFER 0x0C02 +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_INDEX_CLEAR_VALUE 0x0C20 +#define GL_INDEX_WRITEMASK 0x0C21 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_INDEX_MODE 0x0C30 +#define GL_RGBA_MODE 0x0C31 +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_STEREO 0x0C33 +#define GL_RENDER_MODE 0x0C40 +#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 +#define GL_POINT_SMOOTH_HINT 0x0C51 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#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 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_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_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_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_TEXTURE_SIZE 0x0D33 +#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_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B +#define GL_SUBPIXEL_BITS 0x0D50 +#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_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 +#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 +#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 +#define GL_SELECTION_BUFFER_POINTER 0x0DF3 +#define GL_SELECTION_BUFFER_SIZE 0x0DF4 +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TRANSFORM_BIT 0x00001000 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_BORDER 0x1005 +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 +#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_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_2_BYTES 0x1407 +#define GL_3_BYTES 0x1408 +#define GL_4_BYTES 0x1409 +#define GL_DOUBLE 0x140A +#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_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_TEXTURE 0x1702 +#define GL_COLOR 0x1800 +#define GL_DEPTH 0x1801 +#define GL_STENCIL 0x1802 +#define GL_COLOR_INDEX 0x1900 +#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_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A +#define GL_BITMAP 0x1A00 +#define GL_POINT 0x1B00 +#define GL_LINE 0x1B01 +#define GL_FILL 0x1B02 +#define GL_RENDER 0x1C00 +#define GL_FEEDBACK 0x1C01 +#define GL_SELECT 0x1C02 +#define GL_FLAT 0x1D00 +#define GL_SMOOTH 0x1D01 +#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_S 0x2000 +#define GL_ENABLE_BIT 0x00002000 +#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_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_CLAMP 0x2900 +#define GL_REPEAT 0x2901 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_R3_G3_B2 0x2A10 +#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_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_COLOR_BUFFER_BIT 0x00004000 +#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_HINT_BIT 0x00008000 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#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_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_TEXTURE_RED_SIZE 0x805C +#define GL_TEXTURE_GREEN_SIZE 0x805D +#define GL_TEXTURE_BLUE_SIZE 0x805E +#define GL_TEXTURE_ALPHA_SIZE 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE 0x8061 +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_TEXTURE_PRIORITY 0x8066 +#define GL_TEXTURE_RESIDENT 0x8067 +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_BINDING_2D 0x8069 +#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_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_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 +#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 0x000fffff +#define GL_CLIENT_ALL_ATTRIB_BITS 0xffffffff + +GLAPI void GLAPIENTRY glAccum (GLenum op, GLfloat value); +GLAPI void GLAPIENTRY glAlphaFunc (GLenum func, GLclampf ref); +GLAPI GLboolean GLAPIENTRY glAreTexturesResident (GLsizei n, const GLuint *textures, GLboolean *residences); +GLAPI void GLAPIENTRY glArrayElement (GLint i); +GLAPI void GLAPIENTRY glBegin (GLenum mode); +GLAPI void GLAPIENTRY glBindTexture (GLenum target, GLuint texture); +GLAPI void GLAPIENTRY glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap); +GLAPI void GLAPIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); +GLAPI void GLAPIENTRY glCallList (GLuint list); +GLAPI void GLAPIENTRY glCallLists (GLsizei n, GLenum type, const void *lists); +GLAPI void GLAPIENTRY glClear (GLbitfield mask); +GLAPI void GLAPIENTRY glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI void GLAPIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +GLAPI void GLAPIENTRY glClearDepth (GLclampd depth); +GLAPI void GLAPIENTRY glClearIndex (GLfloat c); +GLAPI void GLAPIENTRY glClearStencil (GLint s); +GLAPI void GLAPIENTRY glClipPlane (GLenum plane, const GLdouble *equation); +GLAPI void GLAPIENTRY glColor3b (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void GLAPIENTRY glColor3bv (const GLbyte *v); +GLAPI void GLAPIENTRY glColor3d (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void GLAPIENTRY glColor3dv (const GLdouble *v); +GLAPI void GLAPIENTRY glColor3f (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void GLAPIENTRY glColor3fv (const GLfloat *v); +GLAPI void GLAPIENTRY glColor3i (GLint red, GLint green, GLint blue); +GLAPI void GLAPIENTRY glColor3iv (const GLint *v); +GLAPI void GLAPIENTRY glColor3s (GLshort red, GLshort green, GLshort blue); +GLAPI void GLAPIENTRY glColor3sv (const GLshort *v); +GLAPI void GLAPIENTRY glColor3ub (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void GLAPIENTRY glColor3ubv (const GLubyte *v); +GLAPI void GLAPIENTRY glColor3ui (GLuint red, GLuint green, GLuint blue); +GLAPI void GLAPIENTRY glColor3uiv (const GLuint *v); +GLAPI void GLAPIENTRY glColor3us (GLushort red, GLushort green, GLushort blue); +GLAPI void GLAPIENTRY glColor3usv (const GLushort *v); +GLAPI void GLAPIENTRY glColor4b (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); +GLAPI void GLAPIENTRY glColor4bv (const GLbyte *v); +GLAPI void GLAPIENTRY glColor4d (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); +GLAPI void GLAPIENTRY glColor4dv (const GLdouble *v); +GLAPI void GLAPIENTRY glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI void GLAPIENTRY glColor4fv (const GLfloat *v); +GLAPI void GLAPIENTRY glColor4i (GLint red, GLint green, GLint blue, GLint alpha); +GLAPI void GLAPIENTRY glColor4iv (const GLint *v); +GLAPI void GLAPIENTRY glColor4s (GLshort red, GLshort green, GLshort blue, GLshort alpha); +GLAPI void GLAPIENTRY glColor4sv (const GLshort *v); +GLAPI void GLAPIENTRY glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); +GLAPI void GLAPIENTRY glColor4ubv (const GLubyte *v); +GLAPI void GLAPIENTRY glColor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha); +GLAPI void GLAPIENTRY glColor4uiv (const GLuint *v); +GLAPI void GLAPIENTRY glColor4us (GLushort red, GLushort green, GLushort blue, GLushort alpha); +GLAPI void GLAPIENTRY glColor4usv (const GLushort *v); +GLAPI void GLAPIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +GLAPI void GLAPIENTRY glColorMaterial (GLenum face, GLenum mode); +GLAPI void GLAPIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void GLAPIENTRY glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); +GLAPI void GLAPIENTRY glCopyTexImage1D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void GLAPIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void GLAPIENTRY glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void GLAPIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void GLAPIENTRY glCullFace (GLenum mode); +GLAPI void GLAPIENTRY glDeleteLists (GLuint list, GLsizei range); +GLAPI void GLAPIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); +GLAPI void GLAPIENTRY glDepthFunc (GLenum func); +GLAPI void GLAPIENTRY glDepthMask (GLboolean flag); +GLAPI void GLAPIENTRY glDepthRange (GLclampd zNear, GLclampd zFar); +GLAPI void GLAPIENTRY glDisable (GLenum cap); +GLAPI void GLAPIENTRY glDisableClientState (GLenum array); +GLAPI void GLAPIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); +GLAPI void GLAPIENTRY glDrawBuffer (GLenum mode); +GLAPI void GLAPIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const void *indices); +GLAPI void GLAPIENTRY glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void GLAPIENTRY glEdgeFlag (GLboolean flag); +GLAPI void GLAPIENTRY glEdgeFlagPointer (GLsizei stride, const void *pointer); +GLAPI void GLAPIENTRY glEdgeFlagv (const GLboolean *flag); +GLAPI void GLAPIENTRY glEnable (GLenum cap); +GLAPI void GLAPIENTRY glEnableClientState (GLenum array); +GLAPI void GLAPIENTRY glEnd (void); +GLAPI void GLAPIENTRY glEndList (void); +GLAPI void GLAPIENTRY glEvalCoord1d (GLdouble u); +GLAPI void GLAPIENTRY glEvalCoord1dv (const GLdouble *u); +GLAPI void GLAPIENTRY glEvalCoord1f (GLfloat u); +GLAPI void GLAPIENTRY glEvalCoord1fv (const GLfloat *u); +GLAPI void GLAPIENTRY glEvalCoord2d (GLdouble u, GLdouble v); +GLAPI void GLAPIENTRY glEvalCoord2dv (const GLdouble *u); +GLAPI void GLAPIENTRY glEvalCoord2f (GLfloat u, GLfloat v); +GLAPI void GLAPIENTRY glEvalCoord2fv (const GLfloat *u); +GLAPI void GLAPIENTRY glEvalMesh1 (GLenum mode, GLint i1, GLint i2); +GLAPI void GLAPIENTRY glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); +GLAPI void GLAPIENTRY glEvalPoint1 (GLint i); +GLAPI void GLAPIENTRY glEvalPoint2 (GLint i, GLint j); +GLAPI void GLAPIENTRY glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer); +GLAPI void GLAPIENTRY glFinish (void); +GLAPI void GLAPIENTRY glFlush (void); +GLAPI void GLAPIENTRY glFogf (GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glFogfv (GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glFogi (GLenum pname, GLint param); +GLAPI void GLAPIENTRY glFogiv (GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glFrontFace (GLenum mode); +GLAPI void GLAPIENTRY glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI GLuint GLAPIENTRY glGenLists (GLsizei range); +GLAPI void GLAPIENTRY glGenTextures (GLsizei n, GLuint *textures); +GLAPI void GLAPIENTRY glGetBooleanv (GLenum pname, GLboolean *params); +GLAPI void GLAPIENTRY glGetClipPlane (GLenum plane, GLdouble *equation); +GLAPI void GLAPIENTRY glGetDoublev (GLenum pname, GLdouble *params); +GLAPI GLenum GLAPIENTRY glGetError (void); +GLAPI void GLAPIENTRY glGetFloatv (GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetIntegerv (GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetLightfv (GLenum light, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetLightiv (GLenum light, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetMapdv (GLenum target, GLenum query, GLdouble *v); +GLAPI void GLAPIENTRY glGetMapfv (GLenum target, GLenum query, GLfloat *v); +GLAPI void GLAPIENTRY glGetMapiv (GLenum target, GLenum query, GLint *v); +GLAPI void GLAPIENTRY glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetMaterialiv (GLenum face, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetPixelMapfv (GLenum map, GLfloat *values); +GLAPI void GLAPIENTRY glGetPixelMapuiv (GLenum map, GLuint *values); +GLAPI void GLAPIENTRY glGetPixelMapusv (GLenum map, GLushort *values); +GLAPI void GLAPIENTRY glGetPointerv (GLenum pname, void* *params); +GLAPI void GLAPIENTRY glGetPolygonStipple (GLubyte *mask); +GLAPI const GLubyte * GLAPIENTRY glGetString (GLenum name); +GLAPI void GLAPIENTRY glGetTexEnvfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetTexEnviv (GLenum target, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params); +GLAPI void GLAPIENTRY glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetTexGeniv (GLenum coord, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +GLAPI void GLAPIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glHint (GLenum target, GLenum mode); +GLAPI void GLAPIENTRY glIndexMask (GLuint mask); +GLAPI void GLAPIENTRY glIndexPointer (GLenum type, GLsizei stride, const void *pointer); +GLAPI void GLAPIENTRY glIndexd (GLdouble c); +GLAPI void GLAPIENTRY glIndexdv (const GLdouble *c); +GLAPI void GLAPIENTRY glIndexf (GLfloat c); +GLAPI void GLAPIENTRY glIndexfv (const GLfloat *c); +GLAPI void GLAPIENTRY glIndexi (GLint c); +GLAPI void GLAPIENTRY glIndexiv (const GLint *c); +GLAPI void GLAPIENTRY glIndexs (GLshort c); +GLAPI void GLAPIENTRY glIndexsv (const GLshort *c); +GLAPI void GLAPIENTRY glIndexub (GLubyte c); +GLAPI void GLAPIENTRY glIndexubv (const GLubyte *c); +GLAPI void GLAPIENTRY glInitNames (void); +GLAPI void GLAPIENTRY glInterleavedArrays (GLenum format, GLsizei stride, const void *pointer); +GLAPI GLboolean GLAPIENTRY glIsEnabled (GLenum cap); +GLAPI GLboolean GLAPIENTRY glIsList (GLuint list); +GLAPI GLboolean GLAPIENTRY glIsTexture (GLuint texture); +GLAPI void GLAPIENTRY glLightModelf (GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glLightModelfv (GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glLightModeli (GLenum pname, GLint param); +GLAPI void GLAPIENTRY glLightModeliv (GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glLightf (GLenum light, GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glLightfv (GLenum light, GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glLighti (GLenum light, GLenum pname, GLint param); +GLAPI void GLAPIENTRY glLightiv (GLenum light, GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glLineStipple (GLint factor, GLushort pattern); +GLAPI void GLAPIENTRY glLineWidth (GLfloat width); +GLAPI void GLAPIENTRY glListBase (GLuint base); +GLAPI void GLAPIENTRY glLoadIdentity (void); +GLAPI void GLAPIENTRY glLoadMatrixd (const GLdouble *m); +GLAPI void GLAPIENTRY glLoadMatrixf (const GLfloat *m); +GLAPI void GLAPIENTRY glLoadName (GLuint name); +GLAPI void GLAPIENTRY glLogicOp (GLenum opcode); +GLAPI void GLAPIENTRY glMap1d (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +GLAPI void GLAPIENTRY glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +GLAPI void GLAPIENTRY glMap2d (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +GLAPI void GLAPIENTRY glMap2f (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +GLAPI void GLAPIENTRY glMapGrid1d (GLint un, GLdouble u1, GLdouble u2); +GLAPI void GLAPIENTRY glMapGrid1f (GLint un, GLfloat u1, GLfloat u2); +GLAPI void GLAPIENTRY glMapGrid2d (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); +GLAPI void GLAPIENTRY glMapGrid2f (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); +GLAPI void GLAPIENTRY glMaterialf (GLenum face, GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glMaterialfv (GLenum face, GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glMateriali (GLenum face, GLenum pname, GLint param); +GLAPI void GLAPIENTRY glMaterialiv (GLenum face, GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glMatrixMode (GLenum mode); +GLAPI void GLAPIENTRY glMultMatrixd (const GLdouble *m); +GLAPI void GLAPIENTRY glMultMatrixf (const GLfloat *m); +GLAPI void GLAPIENTRY glNewList (GLuint list, GLenum mode); +GLAPI void GLAPIENTRY glNormal3b (GLbyte nx, GLbyte ny, GLbyte nz); +GLAPI void GLAPIENTRY glNormal3bv (const GLbyte *v); +GLAPI void GLAPIENTRY glNormal3d (GLdouble nx, GLdouble ny, GLdouble nz); +GLAPI void GLAPIENTRY glNormal3dv (const GLdouble *v); +GLAPI void GLAPIENTRY glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz); +GLAPI void GLAPIENTRY glNormal3fv (const GLfloat *v); +GLAPI void GLAPIENTRY glNormal3i (GLint nx, GLint ny, GLint nz); +GLAPI void GLAPIENTRY glNormal3iv (const GLint *v); +GLAPI void GLAPIENTRY glNormal3s (GLshort nx, GLshort ny, GLshort nz); +GLAPI void GLAPIENTRY glNormal3sv (const GLshort *v); +GLAPI void GLAPIENTRY glNormalPointer (GLenum type, GLsizei stride, const void *pointer); +GLAPI void GLAPIENTRY glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void GLAPIENTRY glPassThrough (GLfloat token); +GLAPI void GLAPIENTRY glPixelMapfv (GLenum map, GLsizei mapsize, const GLfloat *values); +GLAPI void GLAPIENTRY glPixelMapuiv (GLenum map, GLsizei mapsize, const GLuint *values); +GLAPI void GLAPIENTRY glPixelMapusv (GLenum map, GLsizei mapsize, const GLushort *values); +GLAPI void GLAPIENTRY glPixelStoref (GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glPixelStorei (GLenum pname, GLint param); +GLAPI void GLAPIENTRY glPixelTransferf (GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glPixelTransferi (GLenum pname, GLint param); +GLAPI void GLAPIENTRY glPixelZoom (GLfloat xfactor, GLfloat yfactor); +GLAPI void GLAPIENTRY glPointSize (GLfloat size); +GLAPI void GLAPIENTRY glPolygonMode (GLenum face, GLenum mode); +GLAPI void GLAPIENTRY glPolygonOffset (GLfloat factor, GLfloat units); +GLAPI void GLAPIENTRY glPolygonStipple (const GLubyte *mask); +GLAPI void GLAPIENTRY glPopAttrib (void); +GLAPI void GLAPIENTRY glPopClientAttrib (void); +GLAPI void GLAPIENTRY glPopMatrix (void); +GLAPI void GLAPIENTRY glPopName (void); +GLAPI void GLAPIENTRY glPrioritizeTextures (GLsizei n, const GLuint *textures, const GLclampf *priorities); +GLAPI void GLAPIENTRY glPushAttrib (GLbitfield mask); +GLAPI void GLAPIENTRY glPushClientAttrib (GLbitfield mask); +GLAPI void GLAPIENTRY glPushMatrix (void); +GLAPI void GLAPIENTRY glPushName (GLuint name); +GLAPI void GLAPIENTRY glRasterPos2d (GLdouble x, GLdouble y); +GLAPI void GLAPIENTRY glRasterPos2dv (const GLdouble *v); +GLAPI void GLAPIENTRY glRasterPos2f (GLfloat x, GLfloat y); +GLAPI void GLAPIENTRY glRasterPos2fv (const GLfloat *v); +GLAPI void GLAPIENTRY glRasterPos2i (GLint x, GLint y); +GLAPI void GLAPIENTRY glRasterPos2iv (const GLint *v); +GLAPI void GLAPIENTRY glRasterPos2s (GLshort x, GLshort y); +GLAPI void GLAPIENTRY glRasterPos2sv (const GLshort *v); +GLAPI void GLAPIENTRY glRasterPos3d (GLdouble x, GLdouble y, GLdouble z); +GLAPI void GLAPIENTRY glRasterPos3dv (const GLdouble *v); +GLAPI void GLAPIENTRY glRasterPos3f (GLfloat x, GLfloat y, GLfloat z); +GLAPI void GLAPIENTRY glRasterPos3fv (const GLfloat *v); +GLAPI void GLAPIENTRY glRasterPos3i (GLint x, GLint y, GLint z); +GLAPI void GLAPIENTRY glRasterPos3iv (const GLint *v); +GLAPI void GLAPIENTRY glRasterPos3s (GLshort x, GLshort y, GLshort z); +GLAPI void GLAPIENTRY glRasterPos3sv (const GLshort *v); +GLAPI void GLAPIENTRY glRasterPos4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void GLAPIENTRY glRasterPos4dv (const GLdouble *v); +GLAPI void GLAPIENTRY glRasterPos4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void GLAPIENTRY glRasterPos4fv (const GLfloat *v); +GLAPI void GLAPIENTRY glRasterPos4i (GLint x, GLint y, GLint z, GLint w); +GLAPI void GLAPIENTRY glRasterPos4iv (const GLint *v); +GLAPI void GLAPIENTRY glRasterPos4s (GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void GLAPIENTRY glRasterPos4sv (const GLshort *v); +GLAPI void GLAPIENTRY glReadBuffer (GLenum mode); +GLAPI void GLAPIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); +GLAPI void GLAPIENTRY glRectd (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); +GLAPI void GLAPIENTRY glRectdv (const GLdouble *v1, const GLdouble *v2); +GLAPI void GLAPIENTRY glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); +GLAPI void GLAPIENTRY glRectfv (const GLfloat *v1, const GLfloat *v2); +GLAPI void GLAPIENTRY glRecti (GLint x1, GLint y1, GLint x2, GLint y2); +GLAPI void GLAPIENTRY glRectiv (const GLint *v1, const GLint *v2); +GLAPI void GLAPIENTRY glRects (GLshort x1, GLshort y1, GLshort x2, GLshort y2); +GLAPI void GLAPIENTRY glRectsv (const GLshort *v1, const GLshort *v2); +GLAPI GLint GLAPIENTRY glRenderMode (GLenum mode); +GLAPI void GLAPIENTRY glRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +GLAPI void GLAPIENTRY glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +GLAPI void GLAPIENTRY glScaled (GLdouble x, GLdouble y, GLdouble z); +GLAPI void GLAPIENTRY glScalef (GLfloat x, GLfloat y, GLfloat z); +GLAPI void GLAPIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void GLAPIENTRY glSelectBuffer (GLsizei size, GLuint *buffer); +GLAPI void GLAPIENTRY glShadeModel (GLenum mode); +GLAPI void GLAPIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); +GLAPI void GLAPIENTRY glStencilMask (GLuint mask); +GLAPI void GLAPIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); +GLAPI void GLAPIENTRY glTexCoord1d (GLdouble s); +GLAPI void GLAPIENTRY glTexCoord1dv (const GLdouble *v); +GLAPI void GLAPIENTRY glTexCoord1f (GLfloat s); +GLAPI void GLAPIENTRY glTexCoord1fv (const GLfloat *v); +GLAPI void GLAPIENTRY glTexCoord1i (GLint s); +GLAPI void GLAPIENTRY glTexCoord1iv (const GLint *v); +GLAPI void GLAPIENTRY glTexCoord1s (GLshort s); +GLAPI void GLAPIENTRY glTexCoord1sv (const GLshort *v); +GLAPI void GLAPIENTRY glTexCoord2d (GLdouble s, GLdouble t); +GLAPI void GLAPIENTRY glTexCoord2dv (const GLdouble *v); +GLAPI void GLAPIENTRY glTexCoord2f (GLfloat s, GLfloat t); +GLAPI void GLAPIENTRY glTexCoord2fv (const GLfloat *v); +GLAPI void GLAPIENTRY glTexCoord2i (GLint s, GLint t); +GLAPI void GLAPIENTRY glTexCoord2iv (const GLint *v); +GLAPI void GLAPIENTRY glTexCoord2s (GLshort s, GLshort t); +GLAPI void GLAPIENTRY glTexCoord2sv (const GLshort *v); +GLAPI void GLAPIENTRY glTexCoord3d (GLdouble s, GLdouble t, GLdouble r); +GLAPI void GLAPIENTRY glTexCoord3dv (const GLdouble *v); +GLAPI void GLAPIENTRY glTexCoord3f (GLfloat s, GLfloat t, GLfloat r); +GLAPI void GLAPIENTRY glTexCoord3fv (const GLfloat *v); +GLAPI void GLAPIENTRY glTexCoord3i (GLint s, GLint t, GLint r); +GLAPI void GLAPIENTRY glTexCoord3iv (const GLint *v); +GLAPI void GLAPIENTRY glTexCoord3s (GLshort s, GLshort t, GLshort r); +GLAPI void GLAPIENTRY glTexCoord3sv (const GLshort *v); +GLAPI void GLAPIENTRY glTexCoord4d (GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void GLAPIENTRY glTexCoord4dv (const GLdouble *v); +GLAPI void GLAPIENTRY glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void GLAPIENTRY glTexCoord4fv (const GLfloat *v); +GLAPI void GLAPIENTRY glTexCoord4i (GLint s, GLint t, GLint r, GLint q); +GLAPI void GLAPIENTRY glTexCoord4iv (const GLint *v); +GLAPI void GLAPIENTRY glTexCoord4s (GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void GLAPIENTRY glTexCoord4sv (const GLshort *v); +GLAPI void GLAPIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void GLAPIENTRY glTexEnvf (GLenum target, GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glTexEnvi (GLenum target, GLenum pname, GLint param); +GLAPI void GLAPIENTRY glTexEnviv (GLenum target, GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glTexGend (GLenum coord, GLenum pname, GLdouble param); +GLAPI void GLAPIENTRY glTexGendv (GLenum coord, GLenum pname, const GLdouble *params); +GLAPI void GLAPIENTRY glTexGenf (GLenum coord, GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glTexGenfv (GLenum coord, GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glTexGeni (GLenum coord, GLenum pname, GLint param); +GLAPI void GLAPIENTRY glTexGeniv (GLenum coord, GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void GLAPIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void GLAPIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); +GLAPI void GLAPIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void GLAPIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void GLAPIENTRY glTranslated (GLdouble x, GLdouble y, GLdouble z); +GLAPI void GLAPIENTRY glTranslatef (GLfloat x, GLfloat y, GLfloat z); +GLAPI void GLAPIENTRY glVertex2d (GLdouble x, GLdouble y); +GLAPI void GLAPIENTRY glVertex2dv (const GLdouble *v); +GLAPI void GLAPIENTRY glVertex2f (GLfloat x, GLfloat y); +GLAPI void GLAPIENTRY glVertex2fv (const GLfloat *v); +GLAPI void GLAPIENTRY glVertex2i (GLint x, GLint y); +GLAPI void GLAPIENTRY glVertex2iv (const GLint *v); +GLAPI void GLAPIENTRY glVertex2s (GLshort x, GLshort y); +GLAPI void GLAPIENTRY glVertex2sv (const GLshort *v); +GLAPI void GLAPIENTRY glVertex3d (GLdouble x, GLdouble y, GLdouble z); +GLAPI void GLAPIENTRY glVertex3dv (const GLdouble *v); +GLAPI void GLAPIENTRY glVertex3f (GLfloat x, GLfloat y, GLfloat z); +GLAPI void GLAPIENTRY glVertex3fv (const GLfloat *v); +GLAPI void GLAPIENTRY glVertex3i (GLint x, GLint y, GLint z); +GLAPI void GLAPIENTRY glVertex3iv (const GLint *v); +GLAPI void GLAPIENTRY glVertex3s (GLshort x, GLshort y, GLshort z); +GLAPI void GLAPIENTRY glVertex3sv (const GLshort *v); +GLAPI void GLAPIENTRY glVertex4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void GLAPIENTRY glVertex4dv (const GLdouble *v); +GLAPI void GLAPIENTRY glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void GLAPIENTRY glVertex4fv (const GLfloat *v); +GLAPI void GLAPIENTRY glVertex4i (GLint x, GLint y, GLint z, GLint w); +GLAPI void GLAPIENTRY glVertex4iv (const GLint *v); +GLAPI void GLAPIENTRY glVertex4s (GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void GLAPIENTRY glVertex4sv (const GLshort *v); +GLAPI void GLAPIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void GLAPIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); + +#define GLEW_VERSION_1_1 GLEW_GET_VAR(__GLEW_VERSION_1_1) + +#endif /* GL_VERSION_1_1 */ + +/* ---------------------------------- GLU ---------------------------------- */ + +#ifndef GLEW_NO_GLU +# ifdef __APPLE__ +# include +# if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +# define GLEW_NO_GLU +# endif +# endif +#endif + +#ifndef GLEW_NO_GLU +/* this is where we can safely include GLU */ +# if defined(__APPLE__) && defined(__MACH__) +# include +# else +# include +# endif +#endif + diff --git a/vendor/glew-cmake-2.2.0/auto/src/glew_init_egl.c b/vendor/glew-cmake-2.2.0/auto/src/glew_init_egl.c new file mode 100644 index 0000000..1502ef6 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glew_init_egl.c @@ -0,0 +1,45 @@ + /* ------------------------------------------------------------------------ */ + +GLboolean eglewGetExtension (const char* name) +{ + const GLubyte* start; + const GLubyte* end; + + start = (const GLubyte*) eglQueryString(eglGetCurrentDisplay(), EGL_EXTENSIONS); + if (0 == start) return GL_FALSE; + end = start + _glewStrLen(start); + return _glewSearchExtension(name, start, end); +} + +GLenum eglewInit (EGLDisplay display) +{ + EGLint major, minor; + const GLubyte* extStart; + const GLubyte* extEnd; + PFNEGLINITIALIZEPROC initialize = NULL; + PFNEGLQUERYSTRINGPROC queryString = NULL; + + /* Load necessary entry points */ + initialize = (PFNEGLINITIALIZEPROC) glewGetProcAddress("eglInitialize"); + queryString = (PFNEGLQUERYSTRINGPROC) glewGetProcAddress("eglQueryString"); + if (!initialize || !queryString) + return 1; + + /* query EGL version */ + if (initialize(display, &major, &minor) != EGL_TRUE) + return 1; + + EGLEW_VERSION_1_5 = ( major > 1 ) || ( major == 1 && minor >= 5 ) ? GL_TRUE : GL_FALSE; + EGLEW_VERSION_1_4 = EGLEW_VERSION_1_5 == GL_TRUE || ( major == 1 && minor >= 4 ) ? GL_TRUE : GL_FALSE; + EGLEW_VERSION_1_3 = EGLEW_VERSION_1_4 == GL_TRUE || ( major == 1 && minor >= 3 ) ? GL_TRUE : GL_FALSE; + EGLEW_VERSION_1_2 = EGLEW_VERSION_1_3 == GL_TRUE || ( major == 1 && minor >= 2 ) ? GL_TRUE : GL_FALSE; + EGLEW_VERSION_1_1 = EGLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE; + EGLEW_VERSION_1_0 = EGLEW_VERSION_1_1 == GL_TRUE || ( major == 1 && minor >= 0 ) ? GL_TRUE : GL_FALSE; + + /* query EGL extension string */ + extStart = (const GLubyte*) queryString(display, EGL_EXTENSIONS); + if (extStart == 0) + extStart = (const GLubyte *)""; + extEnd = extStart + _glewStrLen(extStart); + + /* initialize extensions */ diff --git a/vendor/glew-cmake-2.2.0/auto/src/glew_init_gl.c b/vendor/glew-cmake-2.2.0/auto/src/glew_init_gl.c new file mode 100644 index 0000000..53a5885 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glew_init_gl.c @@ -0,0 +1,209 @@ +/* ------------------------------------------------------------------------- */ + +static int _glewExtensionCompare(const char *s1, const char *s2) +{ + /* http://www.chanduthedev.com/2012/07/strcmp-implementation-in-c.html */ + while (*s1 || *s2) + { + if (*s1 > *s2) + return 1; + if (*s1 < *s2) + return -1; + s1++; + s2++; + } + return 0; +} + +static ptrdiff_t _glewBsearchExtension(const char* name) +{ + ptrdiff_t lo = 0, hi = sizeof(_glewExtensionLookup) / sizeof(char*) - 2; + + while (lo <= hi) + { + ptrdiff_t mid = (lo + hi) / 2; + const int cmp = _glewExtensionCompare(name, _glewExtensionLookup[mid]); + if (cmp < 0) hi = mid - 1; + else if (cmp > 0) lo = mid + 1; + else return mid; + } + return -1; +} + +static GLboolean *_glewGetExtensionString(const char *name) +{ + ptrdiff_t n = _glewBsearchExtension(name); + if (n >= 0) return &_glewExtensionString[n]; + return NULL; +} + +static GLboolean *_glewGetExtensionEnable(const char *name) +{ + ptrdiff_t n = _glewBsearchExtension(name); + if (n >= 0) return _glewExtensionEnabled[n]; + return NULL; +} + +static const char *_glewNextSpace(const char *i) +{ + const char *j = i; + if (j) + while (*j!=' ' && *j) ++j; + return j; +} + +static const char *_glewNextNonSpace(const char *i) +{ + const char *j = i; + if (j) + while (*j==' ') ++j; + return j; +} + +GLboolean GLEWAPIENTRY glewGetExtension (const char* name) +{ + GLboolean *enable = _glewGetExtensionString(name); + if (enable) + return *enable; + return GL_FALSE; +} + +/* ------------------------------------------------------------------------- */ + +typedef const GLubyte* (GLAPIENTRY * PFNGLGETSTRINGPROC) (GLenum name); +typedef void (GLAPIENTRY * PFNGLGETINTEGERVPROC) (GLenum pname, GLint *params); + +GLenum GLEWAPIENTRY glewContextInit (void) +{ + PFNGLGETSTRINGPROC getString; + const GLubyte* s; + GLuint dot; + GLint major, minor; + + #ifdef _WIN32 + getString = glGetString; + #else + getString = (PFNGLGETSTRINGPROC) glewGetProcAddress((const GLubyte*)"glGetString"); + if (!getString) + return GLEW_ERROR_NO_GL_VERSION; + #endif + + /* query opengl version */ + s = getString(GL_VERSION); + dot = _glewStrCLen(s, '.'); + if (dot == 0) + return GLEW_ERROR_NO_GL_VERSION; + + major = s[dot-1]-'0'; + minor = s[dot+1]-'0'; + + if (minor < 0 || minor > 9) + minor = 0; + if (major<0 || major>9) + return GLEW_ERROR_NO_GL_VERSION; + + if (major == 1 && minor == 0) + { + return GLEW_ERROR_GL_VERSION_10_ONLY; + } + else + { + GLEW_VERSION_4_6 = ( major > 4 ) || ( major == 4 && minor >= 6 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_4_5 = GLEW_VERSION_4_6 == GL_TRUE || ( major == 4 && minor >= 5 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_4_4 = GLEW_VERSION_4_5 == GL_TRUE || ( major == 4 && minor >= 4 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_4_3 = GLEW_VERSION_4_4 == GL_TRUE || ( major == 4 && minor >= 3 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_4_2 = GLEW_VERSION_4_3 == GL_TRUE || ( major == 4 && minor >= 2 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_4_1 = GLEW_VERSION_4_2 == GL_TRUE || ( major == 4 && minor >= 1 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_4_0 = GLEW_VERSION_4_1 == GL_TRUE || ( major == 4 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_3_3 = GLEW_VERSION_4_0 == GL_TRUE || ( major == 3 && minor >= 3 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_3_2 = GLEW_VERSION_3_3 == GL_TRUE || ( major == 3 && minor >= 2 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_3_1 = GLEW_VERSION_3_2 == GL_TRUE || ( major == 3 && minor >= 1 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_3_0 = GLEW_VERSION_3_1 == GL_TRUE || ( major == 3 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_2_1 = GLEW_VERSION_3_0 == GL_TRUE || ( major == 2 && minor >= 1 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_2_0 = GLEW_VERSION_2_1 == GL_TRUE || ( major == 2 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_1_5 = GLEW_VERSION_2_0 == GL_TRUE || ( major == 1 && minor >= 5 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_1_4 = GLEW_VERSION_1_5 == GL_TRUE || ( major == 1 && minor >= 4 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_1_3 = GLEW_VERSION_1_4 == GL_TRUE || ( major == 1 && minor >= 3 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_1_2_1 = GLEW_VERSION_1_3 == GL_TRUE ? GL_TRUE : GL_FALSE; + GLEW_VERSION_1_2 = GLEW_VERSION_1_2_1 == GL_TRUE || ( major == 1 && minor >= 2 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_1_1 = GLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE; + } + + { + size_t i; + for (i = 0; i < sizeof(_glewExtensionString) / sizeof(_glewExtensionString[0]); ++i) + _glewExtensionString[i] = GL_FALSE; + } + + if (GLEW_VERSION_3_0) + { + GLint n = 0; + GLint i; + PFNGLGETINTEGERVPROC getIntegerv; + PFNGLGETSTRINGIPROC getStringi; + const char *ext; + GLboolean *enable; + + #ifdef _WIN32 + getIntegerv = glGetIntegerv; + #else + getIntegerv = (PFNGLGETINTEGERVPROC) glewGetProcAddress((const GLubyte*)"glGetIntegerv"); + #endif + + if (getIntegerv) + getIntegerv(GL_NUM_EXTENSIONS, &n); + + /* glGetStringi is OpenGL 3.0 */ + getStringi = (PFNGLGETSTRINGIPROC) glewGetProcAddress((const GLubyte*)"glGetStringi"); + if (getStringi) + for (i = 0; i= (ptrdiff_t) sizeof(ext)) + continue; + _glewStrCopy(ext, i, ' '); + + /* Based on extension string(s), glewGetExtension purposes */ + enable = _glewGetExtensionString(ext); + if (enable) + *enable = GL_TRUE; + + /* Based on extension string(s), experimental mode, glewIsSupported purposes */ + enable = _glewGetExtensionEnable(ext); + if (enable) + *enable = GL_TRUE; + } + } + } diff --git a/vendor/glew-cmake-2.2.0/auto/src/glew_init_glx.c b/vendor/glew-cmake-2.2.0/auto/src/glew_init_glx.c new file mode 100644 index 0000000..8397827 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glew_init_glx.c @@ -0,0 +1,57 @@ +/* ------------------------------------------------------------------------ */ + +GLboolean glxewGetExtension (const char* name) +{ + const GLubyte* start; + const GLubyte* end; + + if (glXGetCurrentDisplay == NULL) return GL_FALSE; + start = (const GLubyte*)glXGetClientString(glXGetCurrentDisplay(), GLX_EXTENSIONS); + if (0 == start) return GL_FALSE; + end = start + _glewStrLen(start); + return _glewSearchExtension(name, start, end); +} + +GLenum glxewInit () +{ + Display* display; + int major, minor; + const GLubyte* extStart; + const GLubyte* extEnd; + /* initialize core GLX 1.2 */ + if (_glewInit_GLX_VERSION_1_2()) return GLEW_ERROR_GLX_VERSION_11_ONLY; + /* check for a display */ + display = glXGetCurrentDisplay(); + if (display == NULL) return GLEW_ERROR_NO_GLX_DISPLAY; + /* initialize flags */ + GLXEW_VERSION_1_0 = GL_TRUE; + GLXEW_VERSION_1_1 = GL_TRUE; + GLXEW_VERSION_1_2 = GL_TRUE; + GLXEW_VERSION_1_3 = GL_TRUE; + GLXEW_VERSION_1_4 = GL_TRUE; + /* query GLX version */ + glXQueryVersion(display, &major, &minor); + if (major == 1 && minor <= 3) + { + switch (minor) + { + case 3: + GLXEW_VERSION_1_4 = GL_FALSE; + break; + case 2: + GLXEW_VERSION_1_4 = GL_FALSE; + GLXEW_VERSION_1_3 = GL_FALSE; + break; + default: + return GLEW_ERROR_GLX_VERSION_11_ONLY; + break; + } + } + /* query GLX extension string */ + extStart = 0; + if (glXGetCurrentDisplay != NULL) + extStart = (const GLubyte*)glXGetClientString(display, GLX_EXTENSIONS); + if (extStart == 0) + extStart = (const GLubyte *)""; + extEnd = extStart + _glewStrLen(extStart); + /* initialize extensions */ diff --git a/vendor/glew-cmake-2.2.0/auto/src/glew_init_tail.c b/vendor/glew-cmake-2.2.0/auto/src/glew_init_tail.c new file mode 100644 index 0000000..94af367 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glew_init_tail.c @@ -0,0 +1,68 @@ +/* ------------------------------------------------------------------------ */ + +const GLubyte * GLEWAPIENTRY glewGetErrorString (GLenum error) +{ + static const GLubyte* _glewErrorString[] = + { + (const GLubyte*)"No error", + (const GLubyte*)"Missing GL version", + (const GLubyte*)"GL 1.1 and up are not supported", + (const GLubyte*)"GLX 1.2 and up are not supported", + (const GLubyte*)"No GLX display", + (const GLubyte*)"Unknown error" + }; + const size_t max_error = sizeof(_glewErrorString)/sizeof(*_glewErrorString) - 1; + return _glewErrorString[(size_t)error > max_error ? max_error : (size_t)error]; +} + +const GLubyte * GLEWAPIENTRY glewGetString (GLenum name) +{ + static const GLubyte* _glewString[] = + { + (const GLubyte*)NULL, + (const GLubyte*)"GLEW_VERSION_STRING", + (const GLubyte*)"GLEW_VERSION_MAJOR_STRING", + (const GLubyte*)"GLEW_VERSION_MINOR_STRING", + (const GLubyte*)"GLEW_VERSION_MICRO_STRING" + }; + const size_t max_string = sizeof(_glewString)/sizeof(*_glewString) - 1; + return _glewString[(size_t)name > max_string ? 0 : (size_t)name]; +} + +/* ------------------------------------------------------------------------ */ + +GLboolean glewExperimental = GL_FALSE; + +GLenum GLEWAPIENTRY glewInit (void) +{ + GLenum r; +#if defined(GLEW_EGL) + PFNEGLGETCURRENTDISPLAYPROC getCurrentDisplay = NULL; +#endif + r = glewContextInit(); + if ( r != 0 ) return r; +#if defined(GLEW_EGL) + getCurrentDisplay = (PFNEGLGETCURRENTDISPLAYPROC) glewGetProcAddress("eglGetCurrentDisplay"); + return eglewInit(getCurrentDisplay()); +#elif defined(GLEW_OSMESA) || defined(__ANDROID__) || defined(__native_client__) || defined(__HAIKU__) + return r; +#elif defined(_WIN32) + return wglewInit(); +#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) /* _UNIX */ + return glxewInit(); +#else + return r; +#endif /* _WIN32 */ +} + +#if defined(_WIN32) && defined(GLEW_BUILD) && defined(__GNUC__) +/* GCC requires a DLL entry point even without any standard library included. */ +/* Types extracted from windows.h to avoid polluting the rest of the file. */ +int __stdcall DllMainCRTStartup(void* instance, unsigned reason, void* reserved) +{ + (void) instance; + (void) reason; + (void) reserved; + return 1; +} +#endif diff --git a/vendor/glew-cmake-2.2.0/auto/src/glew_init_wgl.c b/vendor/glew-cmake-2.2.0/auto/src/glew_init_wgl.c new file mode 100644 index 0000000..978cf3c --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glew_init_wgl.c @@ -0,0 +1,41 @@ +/* ------------------------------------------------------------------------- */ + +static PFNWGLGETEXTENSIONSSTRINGARBPROC _wglewGetExtensionsStringARB = NULL; +static PFNWGLGETEXTENSIONSSTRINGEXTPROC _wglewGetExtensionsStringEXT = NULL; + +GLboolean GLEWAPIENTRY wglewGetExtension (const char* name) +{ + const GLubyte* start; + const GLubyte* end; + if (_wglewGetExtensionsStringARB == NULL) + if (_wglewGetExtensionsStringEXT == NULL) + return GL_FALSE; + else + start = (const GLubyte*)_wglewGetExtensionsStringEXT(); + else + start = (const GLubyte*)_wglewGetExtensionsStringARB(wglGetCurrentDC()); + if (start == 0) + return GL_FALSE; + end = start + _glewStrLen(start); + return _glewSearchExtension(name, start, end); +} + +GLenum GLEWAPIENTRY wglewInit () +{ + GLboolean crippled; + const GLubyte* extStart; + const GLubyte* extEnd; + /* find wgl extension string query functions */ + _wglewGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringARB"); + _wglewGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringEXT"); + /* query wgl extension string */ + if (_wglewGetExtensionsStringARB == NULL) + if (_wglewGetExtensionsStringEXT == NULL) + extStart = (const GLubyte*)""; + else + extStart = (const GLubyte*)_wglewGetExtensionsStringEXT(); + else + extStart = (const GLubyte*)_wglewGetExtensionsStringARB(wglGetCurrentDC()); + extEnd = extStart + _glewStrLen(extStart); + /* initialize extensions */ + crippled = _wglewGetExtensionsStringARB == NULL && _wglewGetExtensionsStringEXT == NULL; diff --git a/vendor/glew-cmake-2.2.0/auto/src/glew_license.h b/vendor/glew-cmake-2.2.0/auto/src/glew_license.h new file mode 100644 index 0000000..353640e --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glew_license.h @@ -0,0 +1,32 @@ +/* +** The OpenGL Extension Wrangler Library +** Copyright (C) 2008-2019, Nigel Stewart +** Copyright (C) 2002-2008, Milan Ikits +** Copyright (C) 2002-2008, Marcelo E. Magallon +** Copyright (C) 2002, Lev Povalahev +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are met: +** +** * Redistributions of source code must retain the above copyright notice, +** this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright notice, +** this list of conditions and the following disclaimer in the documentation +** and/or other materials provided with the distribution. +** * The name of the author may be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +** THE POSSIBILITY OF SUCH DAMAGE. +*/ + diff --git a/vendor/glew-cmake-2.2.0/auto/src/glew_str_egl.c b/vendor/glew-cmake-2.2.0/auto/src/glew_str_egl.c new file mode 100644 index 0000000..f0c52f9 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glew_str_egl.c @@ -0,0 +1,17 @@ + } + ret = (len == 0); + } + return ret; +} + +#elif defined(GLEW_EGL) + +GLboolean eglewIsSupported (const char* name) +{ + const GLubyte* pos = (const GLubyte*)name; + GLuint len = _glewStrLen(pos); + GLboolean ret = GL_TRUE; + while (ret && len > 0) + { + if(_glewStrSame1(&pos, &len, (const GLubyte*)"EGL_", 4)) + { diff --git a/vendor/glew-cmake-2.2.0/auto/src/glew_str_glx.c b/vendor/glew-cmake-2.2.0/auto/src/glew_str_glx.c new file mode 100644 index 0000000..893d741 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glew_str_glx.c @@ -0,0 +1,17 @@ + } + ret = (len == 0); + } + return ret; +} + +#elif !defined(GLEW_OSMESA) && !defined(GLEW_EGL) && !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) + +GLboolean glxewIsSupported (const char* name) +{ + const GLubyte* pos = (const GLubyte*)name; + GLuint len = _glewStrLen(pos); + GLboolean ret = GL_TRUE; + while (ret && len > 0) + { + if(_glewStrSame1(&pos, &len, (const GLubyte*)"GLX_", 4)) + { diff --git a/vendor/glew-cmake-2.2.0/auto/src/glew_str_head.c b/vendor/glew-cmake-2.2.0/auto/src/glew_str_head.c new file mode 100644 index 0000000..fed3a0f --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glew_str_head.c @@ -0,0 +1,9 @@ +GLboolean GLEWAPIENTRY glewIsSupported (const char* name) +{ + const GLubyte* pos = (const GLubyte*)name; + GLuint len = _glewStrLen(pos); + GLboolean ret = GL_TRUE; + while (ret && len > 0) + { + if (_glewStrSame1(&pos, &len, (const GLubyte*)"GL_", 3)) + { diff --git a/vendor/glew-cmake-2.2.0/auto/src/glew_str_tail.c b/vendor/glew-cmake-2.2.0/auto/src/glew_str_tail.c new file mode 100644 index 0000000..caa9572 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glew_str_tail.c @@ -0,0 +1,7 @@ + } + ret = (len == 0); + } + return ret; +} + +#endif /* _WIN32 */ diff --git a/vendor/glew-cmake-2.2.0/auto/src/glew_str_wgl.c b/vendor/glew-cmake-2.2.0/auto/src/glew_str_wgl.c new file mode 100644 index 0000000..db67b51 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glew_str_wgl.c @@ -0,0 +1,17 @@ + } + ret = (len == 0); + } + return ret; +} + +#if defined(_WIN32) && !defined(GLEW_EGL) && !defined(GLEW_OSMESA) + +GLboolean GLEWAPIENTRY wglewIsSupported (const char* name) +{ + const GLubyte* pos = (const GLubyte*)name; + GLuint len = _glewStrLen(pos); + GLboolean ret = GL_TRUE; + while (ret && len > 0) + { + if (_glewStrSame1(&pos, &len, (const GLubyte*)"WGL_", 4)) + { diff --git a/vendor/glew-cmake-2.2.0/auto/src/glew_tail.h b/vendor/glew-cmake-2.2.0/auto/src/glew_tail.h new file mode 100644 index 0000000..65c449a --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glew_tail.h @@ -0,0 +1,69 @@ +/* ------------------------------------------------------------------------- */ + +/* error codes */ +#define GLEW_OK 0 +#define GLEW_NO_ERROR 0 +#define GLEW_ERROR_NO_GL_VERSION 1 /* missing GL version */ +#define GLEW_ERROR_GL_VERSION_10_ONLY 2 /* Need at least OpenGL 1.1 */ +#define GLEW_ERROR_GLX_VERSION_11_ONLY 3 /* Need at least GLX 1.2 */ +#define GLEW_ERROR_NO_GLX_DISPLAY 4 /* Need GLX display for GLX support */ + +/* string codes */ +#define GLEW_VERSION 1 +#define GLEW_VERSION_MAJOR 2 +#define GLEW_VERSION_MINOR 3 +#define GLEW_VERSION_MICRO 4 + +/* ------------------------------------------------------------------------- */ + +/* GLEW version info */ + +/* +VERSION GLEW_VERSION_STRING +VERSION_MAJOR GLEW_VERSION_MAJOR_STRING +VERSION_MINOR GLEW_VERSION_MINOR_STRING +VERSION_MICRO GLEW_VERSION_MICRO_STRING +*/ + +/* API */ +GLEWAPI GLenum GLEWAPIENTRY glewInit (void); +GLEWAPI GLenum GLEWAPIENTRY glewContextInit (void); +GLEWAPI GLboolean GLEWAPIENTRY glewIsSupported (const char *name); +#define glewIsExtensionSupported(x) glewIsSupported(x) + +#ifndef GLEW_GET_VAR +#define GLEW_GET_VAR(x) (*(const GLboolean*)&x) +#endif + +#ifndef GLEW_GET_FUN +#define GLEW_GET_FUN(x) x +#endif + +GLEWAPI GLboolean glewExperimental; +GLEWAPI GLboolean GLEWAPIENTRY glewGetExtension (const char *name); +GLEWAPI const GLubyte * GLEWAPIENTRY glewGetErrorString (GLenum error); +GLEWAPI const GLubyte * GLEWAPIENTRY glewGetString (GLenum name); + +#ifdef __cplusplus +} +#endif + +#ifdef GLEW_APIENTRY_DEFINED +#undef GLEW_APIENTRY_DEFINED +#undef APIENTRY +#endif + +#ifdef GLEW_CALLBACK_DEFINED +#undef GLEW_CALLBACK_DEFINED +#undef CALLBACK +#endif + +#ifdef GLEW_WINGDIAPI_DEFINED +#undef GLEW_WINGDIAPI_DEFINED +#undef WINGDIAPI +#endif + +#undef GLAPI +/* #undef GLEWAPI */ + +#endif /* __glew_h__ */ diff --git a/vendor/glew-cmake-2.2.0/auto/src/glewinfo.rc b/vendor/glew-cmake-2.2.0/auto/src/glewinfo.rc new file mode 100644 index 0000000..88aa4a3 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glewinfo.rc @@ -0,0 +1,124 @@ + +#include + +#ifdef _DEBUG +# define FILENAME "glewinfod.exe" +#else +# define FILENAME "glewinfo.exe" +#endif + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// +VS_VERSION_INFO VERSIONINFO +FILEVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 +PRODUCTVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 +FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG +FILEFLAGS VS_FF_DEBUG +#else +FILEFLAGS 0x0L +#endif +FILEOS VOS__WINDOWS32 +FILETYPE VFT_APP +FILESUBTYPE VFT2_UNKNOWN +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", + "The OpenGL Extension Wrangler Library\r\n" + "Copyright (C) 2008-2019, Nigel Stewart \r\n" + "Copyright (C) 2002-2008, Milan Ikits \r\n" + "Copyright (C) 2002-2008, Marcelo E. Magallon \r\n" + "Copyright (C) 2002, Lev Povalahev\r\n" + "All rights reserved.\r\n" + "\r\n" + "Redistribution and use in source and binary forms, with or without \r\n" + "modification, are permitted provided that the following conditions are met:\r\n" + "\r\n" + "* Redistributions of source code must retain the above copyright notice, \r\n" + " this list of conditions and the following disclaimer.\r\n" + "* Redistributions in binary form must reproduce the above copyright notice, \r\n" + " this list of conditions and the following disclaimer in the documentation \r\n" + " and/or other materials provided with the distribution.\r\n" + "* The name of the author may be used to endorse or promote products \r\n" + " derived from this software without specific prior written permission.\r\n" + "\r\n" + "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' \r\n" + "AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \r\n" + "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n" + "ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE \r\n" + "LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR \r\n" + "CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF \r\n" + "SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n" + "INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n" + "CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n" + "ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\r\n" + "THE POSSIBILITY OF SUCH DAMAGE.\r\n" + "\r\n" + "\r\n" + "Mesa 3-D graphics library\r\n" + "\r\n" + "Version: 7.0\r\n" + "\r\n" + "Copyright (C) 1999-2007 Brian Paul All Rights Reserved.\r\n" + "\r\n" + "Permission is hereby granted, free of charge, to any person obtaining a\r\n" + "copy of this software and associated documentation files (the ''Software''),\r\n" + "to deal in the Software without restriction, including without limitation\r\n" + "the rights to use, copy, modify, merge, publish, distribute, sublicense,\r\n" + "and/or sell copies of the Software, and to permit persons to whom the\r\n" + "Software is furnished to do so, subject to the following conditions:\r\n" + "\r\n" + "The above copyright notice and this permission notice shall be included\r\n" + "in all copies or substantial portions of the Software.\r\n" + "\r\n" + "THE SOFTWARE IS PROVIDED ''AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n" + "OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n" + "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r\n" + "BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\r\n" + "AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n" + "CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n" + "\r\n" + "\r\n" + "Copyright (c) 2007 The Khronos Group Inc.\r\n" + "\r\n" + "Permission is hereby granted, free of charge, to any person obtaining a\r\n" + "copy of this software and/or associated documentation files (the\r\n" + "''Materials''), to deal in the Materials without restriction, including\r\n" + "without limitation the rights to use, copy, modify, merge, publish,\r\n" + "distribute, sublicense, and/or sell copies of the Materials, and to\r\n" + "permit persons to whom the Materials are furnished to do so, subject to\r\n" + "the following conditions:\r\n" + "\r\n" + "The above copyright notice and this permission notice shall be included\r\n" + "in all copies or substantial portions of the Materials.\r\n" + "\r\n" + "THE MATERIALS ARE PROVIDED ''AS IS'', WITHOUT WARRANTY OF ANY KIND,\r\n" + "EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n" + "MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n" + "IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n" + "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n" + "TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n" + "MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.\0" + VALUE "CompanyName", "\0" + VALUE "FileDescription", "Utility for verifying extension entry points\0" + VALUE "FileVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" + VALUE "InternalName", "glewinfo\0" + VALUE "LegalCopyright", "(C) 2002-2019 Nigel Stewart & Milan Ikits & Marcelo Magallon\0" + VALUE "LegalTrademarks", "\0" + VALUE "OriginalFilename", FILENAME "\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "The OpenGL Extension Wrangler Library\0" + VALUE "ProductVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END diff --git a/vendor/glew-cmake-2.2.0/auto/src/glewinfo_egl.c b/vendor/glew-cmake-2.2.0/auto/src/glewinfo_egl.c new file mode 100644 index 0000000..877e722 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glewinfo_egl.c @@ -0,0 +1,6 @@ +} + +#elif defined(GLEW_EGL) + +static void eglewInfo () +{ diff --git a/vendor/glew-cmake-2.2.0/auto/src/glewinfo_gl.c b/vendor/glew-cmake-2.2.0/auto/src/glewinfo_gl.c new file mode 100644 index 0000000..9d7835d --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glewinfo_gl.c @@ -0,0 +1,7 @@ +/* ------------------------------------------------------------------------ */ + +static void glewInfo (void) +{ +#ifdef GL_VERSION_1_1 + _glewInfo_GL_VERSION_1_1(); +#endif /* GL_VERSION_1_1 */ diff --git a/vendor/glew-cmake-2.2.0/auto/src/glewinfo_glx.c b/vendor/glew-cmake-2.2.0/auto/src/glewinfo_glx.c new file mode 100644 index 0000000..e60b549 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glewinfo_glx.c @@ -0,0 +1,6 @@ +} + +#elif !defined(GLEW_EGL) && !defined(GLEW_OSMESA) /* _UNIX */ + +static void glxewInfo () +{ diff --git a/vendor/glew-cmake-2.2.0/auto/src/glewinfo_head.c b/vendor/glew-cmake-2.2.0/auto/src/glewinfo_head.c new file mode 100644 index 0000000..79ed785 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glewinfo_head.c @@ -0,0 +1,96 @@ +#include +#include +#include +#include +#if defined(GLEW_EGL) +#include +#elif defined(GLEW_OSMESA) +#define GLAPI extern +#include +#elif defined(_WIN32) +#include +#elif !defined(__APPLE__) && !defined(__HAIKU__) || defined(GLEW_APPLE_GLX) +#include +#endif + +#if defined(__APPLE__) +#include +#endif + +#ifdef GLEW_REGAL +#include +#endif + +static FILE* f; + +/* Command-line parameters for GL context creation */ + +struct createParams +{ +#if defined(GLEW_OSMESA) +#elif defined(GLEW_EGL) +#elif defined(_WIN32) + int pixelformat; +#elif !defined(__APPLE__) && !defined(__HAIKU__) || defined(GLEW_APPLE_GLX) + const char* display; + int visual; +#endif + int major, minor; /* GL context version number */ + + /* https://www.opengl.org/registry/specs/ARB/glx_create_context.txt */ + int profile; /* core = 1, compatibility = 2 */ + int flags; /* debug = 1, forward compatible = 2 */ + + /* GLEW experimental mode */ + int experimental; +}; + +GLboolean glewCreateContext (struct createParams *params); + +GLboolean glewParseArgs (int argc, char** argv, struct createParams *); + +void glewDestroyContext (); + +/* ------------------------------------------------------------------------- */ + +static GLboolean glewPrintExt (const char* name, GLboolean def1, GLboolean def2, GLboolean def3) +{ + unsigned int i; + fprintf(f, "\n%s:", name); + for (i=0; i<62-strlen(name); i++) fprintf(f, " "); + fprintf(f, "%s ", def1 ? "OK" : "MISSING"); + if (def1 != def2) + fprintf(f, "[%s] ", def2 ? "OK" : "MISSING"); + if (def1 != def3) + fprintf(f, "[%s]\n", def3 ? "OK" : "MISSING"); + else + fprintf(f, "\n"); + for (i=0; i] " +#elif !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) + "[-display ] " + "[-visual ] " +#endif + "[-version ] " + "[-profile core|compatibility] " + "[-flag debug|forward] " + "[-experimental]" + "\n"); + return 1; + } + + if (GL_TRUE == glewCreateContext(¶ms)) + { + fprintf(stderr, "Error: glewCreateContext failed\n"); + glewDestroyContext(); + return 1; + } + glewExperimental = params.experimental ? GL_TRUE : GL_FALSE; + err = glewInit(); + if (GLEW_OK != err) + { + fprintf(stderr, "Error [main]: glewInit failed: %s\n", glewGetErrorString(err)); + glewDestroyContext(); + return 1; + } + +#if defined(GLEW_EGL) + getString = (PFNGLGETSTRINGPROC) eglGetProcAddress("glGetString"); + if (!getString) + { + fprintf(stderr, "Error: eglGetProcAddress failed to fetch glGetString\n"); + glewDestroyContext(); + return 1; + } +#endif + +#if defined(_WIN32) +#if defined(_MSC_VER) && (_MSC_VER >= 1400) + if (fopen_s(&f, "glewinfo.txt", "w") != 0) + f = stdout; +#else + f = fopen("glewinfo.txt", "w"); +#endif + if (f == NULL) f = stdout; +#else + f = stdout; +#endif + fprintf(f, "---------------------------\n"); + fprintf(f, " GLEW Extension Info\n"); + fprintf(f, "---------------------------\n\n"); + fprintf(f, "GLEW version %s\n", glewGetString(GLEW_VERSION)); +#if defined(GLEW_OSMESA) +#elif defined(GLEW_EGL) +#elif defined(_WIN32) + fprintf(f, "Reporting capabilities of pixelformat %d\n", params.pixelformat); +#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) + fprintf(f, "Reporting capabilities of display %s, visual 0x%x\n", + params.display == NULL ? getenv("DISPLAY") : params.display, params.visual); +#endif +#if defined(GLEW_EGL) + fprintf(f, "Running on a %s from %s\n", + getString(GL_RENDERER), getString(GL_VENDOR)); + fprintf(f, "OpenGL version %s is supported\n", getString(GL_VERSION)); +#else + fprintf(f, "Running on a %s from %s\n", + glGetString(GL_RENDERER), glGetString(GL_VENDOR)); + fprintf(f, "OpenGL version %s is supported\n", glGetString(GL_VERSION)); +#endif + glewInfo(); +#if defined(GLEW_OSMESA) +#elif defined(GLEW_EGL) + eglewInfo(); +#elif defined(_WIN32) + wglewInfo(); +#else + glxewInfo(); +#endif + if (f != stdout) fclose(f); + glewDestroyContext(); + return 0; +} + +/* ------------------------------------------------------------------------ */ + +GLboolean glewParseArgs (int argc, char** argv, struct createParams *params) +{ + int p = 0; + while (p < argc) + { + if (!strcmp(argv[p], "-version")) + { + if (++p >= argc) return GL_TRUE; +#if defined(__STDC_LIB_EXT1__) || (defined(_MSC_VER) && (_MSC_VER >= 1400)) + if (sscanf_s(argv[p++], "%d.%d", ¶ms->major, ¶ms->minor) != 2) return GL_TRUE; +#else + if (sscanf(argv[p++], "%d.%d", ¶ms->major, ¶ms->minor) != 2) return GL_TRUE; +#endif + } + else if (!strcmp(argv[p], "-profile")) + { + if (++p >= argc) return GL_TRUE; + if (strcmp("core", argv[p]) == 0) params->profile |= 1; + else if (strcmp("compatibility",argv[p]) == 0) params->profile |= 2; + else return GL_TRUE; + ++p; + } + else if (!strcmp(argv[p], "-flag")) + { + if (++p >= argc) return GL_TRUE; + if (strcmp("debug", argv[p]) == 0) params->flags |= 1; + else if (strcmp("forward",argv[p]) == 0) params->flags |= 2; + else return GL_TRUE; + ++p; + } +#if defined(GLEW_OSMESA) +#elif defined(GLEW_EGL) +#elif defined(_WIN32) + else if (!strcmp(argv[p], "-pf") || !strcmp(argv[p], "-pixelformat")) + { + if (++p >= argc) return GL_TRUE; + params->pixelformat = strtol(argv[p++], NULL, 0); + } +#elif !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) + else if (!strcmp(argv[p], "-display")) + { + if (++p >= argc) return GL_TRUE; + params->display = argv[p++]; + } + else if (!strcmp(argv[p], "-visual")) + { + if (++p >= argc) return GL_TRUE; + params->visual = (int)strtol(argv[p++], NULL, 0); + } +#endif + else if (!strcmp(argv[p], "-experimental")) + { + params->experimental = 1; + ++p; + } + else + return GL_TRUE; + } + return GL_FALSE; +} + +/* ------------------------------------------------------------------------ */ + +#if defined(GLEW_EGL) +EGLDisplay display; +EGLContext ctx; + +/* See: http://stackoverflow.com/questions/12662227/opengl-es2-0-offscreen-context-for-fbo-rendering */ + +GLboolean glewCreateContext (struct createParams *params) +{ + EGLDeviceEXT devices[1]; + EGLint numDevices; + EGLSurface surface; + EGLint majorVersion, minorVersion; + EGLint configAttribs[] = { + EGL_SURFACE_TYPE, EGL_WINDOW_BIT, + EGL_RED_SIZE, 1, + EGL_GREEN_SIZE, 1, + EGL_BLUE_SIZE, 1, + EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT, + EGL_NONE + }; + static const EGLint contextAttribs[] = { + EGL_CONTEXT_CLIENT_VERSION, 2, + EGL_NONE + }; + static const EGLint pBufferAttribs[] = { + EGL_WIDTH, 128, + EGL_HEIGHT, 128, + EGL_NONE + }; + EGLConfig config; + EGLint numConfig; + EGLBoolean pBuffer; + + PFNEGLQUERYDEVICESEXTPROC queryDevices = NULL; + PFNEGLGETPLATFORMDISPLAYEXTPROC getPlatformDisplay = NULL; + PFNEGLGETERRORPROC getError = NULL; + PFNEGLGETDISPLAYPROC getDisplay = NULL; + PFNEGLINITIALIZEPROC initialize = NULL; + PFNEGLBINDAPIPROC bindAPI = NULL; + PFNEGLCHOOSECONFIGPROC chooseConfig = NULL; + PFNEGLCREATEWINDOWSURFACEPROC createWindowSurface = NULL; + PFNEGLCREATECONTEXTPROC createContext = NULL; + PFNEGLMAKECURRENTPROC makeCurrent = NULL; + PFNEGLCREATEPBUFFERSURFACEPROC createPbufferSurface = NULL; + + /* Load necessary entry points */ + queryDevices = (PFNEGLQUERYDEVICESEXTPROC) eglGetProcAddress("eglQueryDevicesEXT"); + getPlatformDisplay = (PFNEGLGETPLATFORMDISPLAYEXTPROC) eglGetProcAddress("eglGetPlatformDisplayEXT"); + getError = (PFNEGLGETERRORPROC) eglGetProcAddress("eglGetError"); + getDisplay = (PFNEGLGETDISPLAYPROC) eglGetProcAddress("eglGetDisplay"); + initialize = (PFNEGLINITIALIZEPROC) eglGetProcAddress("eglInitialize"); + bindAPI = (PFNEGLBINDAPIPROC) eglGetProcAddress("eglBindAPI"); + chooseConfig = (PFNEGLCHOOSECONFIGPROC) eglGetProcAddress("eglChooseConfig"); + createWindowSurface = (PFNEGLCREATEWINDOWSURFACEPROC) eglGetProcAddress("eglCreateWindowSurface"); + createPbufferSurface = (PFNEGLCREATEPBUFFERSURFACEPROC) eglGetProcAddress("eglCreatePbufferSurface"); + createContext = (PFNEGLCREATECONTEXTPROC) eglGetProcAddress("eglCreateContext"); + makeCurrent = (PFNEGLMAKECURRENTPROC) eglGetProcAddress("eglMakeCurrent"); + if (!getError || !getDisplay || !initialize || !bindAPI || !chooseConfig || !createWindowSurface || !createContext || !makeCurrent) + return GL_TRUE; + + pBuffer = 0; + display = EGL_NO_DISPLAY; + if (queryDevices && getPlatformDisplay) + { + queryDevices(1, devices, &numDevices); + if (numDevices==1) + { + /* Nvidia EGL doesn't need X11 for p-buffer surface */ + display = getPlatformDisplay(EGL_PLATFORM_DEVICE_EXT, devices[0], 0); + configAttribs[1] = EGL_PBUFFER_BIT; + pBuffer = 1; + } + } + if (display==EGL_NO_DISPLAY) + { + /* Fall-back to X11 surface, works on Mesa */ + display = getDisplay(EGL_DEFAULT_DISPLAY); + } + if (display == EGL_NO_DISPLAY) + return GL_TRUE; + + eglewInit(display); + + if (bindAPI(EGL_OPENGL_API) != EGL_TRUE) + return GL_TRUE; + + if (chooseConfig(display, configAttribs, &config, 1, &numConfig) != EGL_TRUE || (numConfig != 1)) + return GL_TRUE; + + ctx = createContext(display, config, EGL_NO_CONTEXT, pBuffer ? contextAttribs : NULL); + if (NULL == ctx) + return GL_TRUE; + + surface = EGL_NO_SURFACE; + /* Create a p-buffer surface if possible */ + if (pBuffer && createPbufferSurface) + { + surface = createPbufferSurface(display, config, pBufferAttribs); + } + /* Create a generic surface without a native window, if necessary */ + if (surface==EGL_NO_SURFACE) + { + surface = createWindowSurface(display, config, (EGLNativeWindowType) NULL, NULL); + } +#if 0 + if (surface == EGL_NO_SURFACE) + return GL_TRUE; +#endif + + if (makeCurrent(display, surface, surface, ctx) != EGL_TRUE) + return GL_TRUE; + + return GL_FALSE; +} + +void glewDestroyContext () +{ + if (NULL != ctx) eglDestroyContext(display, ctx); +} + +#elif defined(GLEW_OSMESA) +OSMesaContext ctx; + +static const GLint osmFormat = GL_UNSIGNED_BYTE; +static const GLint osmWidth = 640; +static const GLint osmHeight = 480; +static GLubyte *osmPixels = NULL; + +GLboolean glewCreateContext (struct createParams *params) +{ + ctx = OSMesaCreateContext(OSMESA_RGBA, NULL); + if (NULL == ctx) return GL_TRUE; + if (NULL == osmPixels) + { + osmPixels = (GLubyte *) calloc(osmWidth*osmHeight*4, 1); + } + if (!OSMesaMakeCurrent(ctx, osmPixels, GL_UNSIGNED_BYTE, osmWidth, osmHeight)) + { + return GL_TRUE; + } + return GL_FALSE; +} + +void glewDestroyContext () +{ + if (NULL != ctx) OSMesaDestroyContext(ctx); +} + +#elif defined(_WIN32) + +HWND wnd = NULL; +HDC dc = NULL; +HGLRC rc = NULL; + +GLboolean glewCreateContext (struct createParams* params) +{ + WNDCLASS wc; + PIXELFORMATDESCRIPTOR pfd; + /* register window class */ + ZeroMemory(&wc, sizeof(WNDCLASS)); + wc.hInstance = GetModuleHandle(NULL); + wc.lpfnWndProc = DefWindowProc; + wc.lpszClassName = "GLEW"; + if (0 == RegisterClass(&wc)) return GL_TRUE; + /* create window */ + wnd = CreateWindow("GLEW", "GLEW", 0, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, + CW_USEDEFAULT, NULL, NULL, GetModuleHandle(NULL), NULL); + if (NULL == wnd) return GL_TRUE; + /* get the device context */ + dc = GetDC(wnd); + if (NULL == dc) return GL_TRUE; + /* find pixel format */ + ZeroMemory(&pfd, sizeof(PIXELFORMATDESCRIPTOR)); + if (params->pixelformat == -1) /* find default */ + { + pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); + pfd.nVersion = 1; + pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL; + params->pixelformat = ChoosePixelFormat(dc, &pfd); + if (params->pixelformat == 0) return GL_TRUE; + } + /* set the pixel format for the dc */ + if (FALSE == SetPixelFormat(dc, params->pixelformat, &pfd)) return GL_TRUE; + /* create rendering context */ + rc = wglCreateContext(dc); + if (NULL == rc) return GL_TRUE; + if (FALSE == wglMakeCurrent(dc, rc)) return GL_TRUE; + if (params->major || params->profile || params->flags) + { + HGLRC oldRC = rc; + int contextAttrs[20]; + int i; + + wglewInit(); + + /* Intel HD 3000 has WGL_ARB_create_context, but not WGL_ARB_create_context_profile */ + if (!wglewGetExtension("WGL_ARB_create_context")) + return GL_TRUE; + + i = 0; + if (params->major) + { + contextAttrs[i++] = WGL_CONTEXT_MAJOR_VERSION_ARB; + contextAttrs[i++] = params->major; + contextAttrs[i++] = WGL_CONTEXT_MINOR_VERSION_ARB; + contextAttrs[i++] = params->minor; + } + if (params->profile) + { + contextAttrs[i++] = WGL_CONTEXT_PROFILE_MASK_ARB; + contextAttrs[i++] = params->profile; + } + if (params->flags) + { + contextAttrs[i++] = WGL_CONTEXT_FLAGS_ARB; + contextAttrs[i++] = params->flags; + } + contextAttrs[i++] = 0; + rc = wglCreateContextAttribsARB(dc, 0, contextAttrs); + + if (NULL == rc) return GL_TRUE; + if (!wglMakeCurrent(dc, rc)) return GL_TRUE; + + wglDeleteContext(oldRC); + } + return GL_FALSE; +} + +void glewDestroyContext () +{ + if (NULL != rc) wglMakeCurrent(NULL, NULL); + if (NULL != rc) wglDeleteContext(rc); + if (NULL != wnd && NULL != dc) ReleaseDC(wnd, dc); + if (NULL != wnd) DestroyWindow(wnd); + UnregisterClass("GLEW", GetModuleHandle(NULL)); +} + +/* ------------------------------------------------------------------------ */ + +#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) + +#include +#include + +CGLContextObj ctx, octx; + +GLboolean glewCreateContext (struct createParams *params) +{ + CGLPixelFormatAttribute contextAttrs[20]; + int i; + CGLPixelFormatObj pf; + GLint npix; + CGLError error; + + i = 0; + contextAttrs[i++] = kCGLPFAAccelerated; /* No software rendering */ + + /* MAC_OS_X_VERSION_10_7 == 1070 */ + #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1070 + if (params->profile & GL_CONTEXT_CORE_PROFILE_BIT) + { + if ((params->major==3 && params->minor>=2) || params->major>3) + { + contextAttrs[i++] = kCGLPFAOpenGLProfile; /* OSX 10.7 Lion onwards */ + contextAttrs[i++] = (CGLPixelFormatAttribute) kCGLOGLPVersion_3_2_Core; /* 3.2 Core Context */ + } + } + #endif + + contextAttrs[i++] = 0; + + error = CGLChoosePixelFormat(contextAttrs, &pf, &npix); + if (error) return GL_TRUE; + error = CGLCreateContext(pf, NULL, &ctx); + if (error) return GL_TRUE; + CGLReleasePixelFormat(pf); + octx = CGLGetCurrentContext(); + error = CGLSetCurrentContext(ctx); + if (error) return GL_TRUE; + /* Needed for Regal on the Mac */ + #if defined(GLEW_REGAL) && defined(__APPLE__) + RegalMakeCurrent(ctx); + #endif + return GL_FALSE; +} + +void glewDestroyContext () +{ + CGLSetCurrentContext(octx); + CGLReleaseContext(ctx); +} + +/* ------------------------------------------------------------------------ */ + +#elif defined(__HAIKU__) + +GLboolean glewCreateContext (struct createParams *params) +{ + /* TODO: Haiku: We need to call C++ code here */ + return GL_FALSE; +} + +void glewDestroyContext () +{ + /* TODO: Haiku: We need to call C++ code here */ +} + +/* ------------------------------------------------------------------------ */ + +#else /* __UNIX || (__APPLE__ && GLEW_APPLE_GLX) */ + +Display* dpy = NULL; +XVisualInfo* vi = NULL; +XVisualInfo* vis = NULL; +GLXContext ctx = NULL; +Window wnd = 0; +Colormap cmap = 0; + +GLboolean glewCreateContext (struct createParams *params) +{ + int attrib[] = { GLX_RGBA, GLX_DOUBLEBUFFER, None }; + int erb, evb; + XSetWindowAttributes swa; + /* open display */ + dpy = XOpenDisplay(params->display); + if (NULL == dpy) return GL_TRUE; + /* query for glx */ + if (!glXQueryExtension(dpy, &erb, &evb)) return GL_TRUE; + /* choose visual */ + if (params->visual == -1) + { + vi = glXChooseVisual(dpy, DefaultScreen(dpy), attrib); + if (NULL == vi) return GL_TRUE; + params->visual = (int)XVisualIDFromVisual(vi->visual); + } + else + { + int n_vis, i; + vis = XGetVisualInfo(dpy, 0, NULL, &n_vis); + for (i=0; ivisual) + vi = &vis[i]; + } + if (vi == NULL) return GL_TRUE; + } + /* create context */ + ctx = glXCreateContext(dpy, vi, None, True); + if (NULL == ctx) return GL_TRUE; + /* create window */ + /*wnd = XCreateSimpleWindow(dpy, RootWindow(dpy, vi->screen), 0, 0, 1, 1, 1, 0, 0);*/ + cmap = XCreateColormap(dpy, RootWindow(dpy, vi->screen), vi->visual, AllocNone); + swa.border_pixel = 0; + swa.colormap = cmap; + wnd = XCreateWindow(dpy, RootWindow(dpy, vi->screen), + 0, 0, 1, 1, 0, vi->depth, InputOutput, vi->visual, + CWBorderPixel | CWColormap, &swa); + /* make context current */ + if (!glXMakeCurrent(dpy, wnd, ctx)) return GL_TRUE; + if (params->major || params->profile || params->flags) + { + GLXContext oldCtx = ctx; + GLXFBConfig *FBConfigs; + int FBConfigAttrs[] = { GLX_FBCONFIG_ID, 0, None }; + int contextAttrs[20]; + int nelems, i; + + glxewInit(); + + if (!glxewGetExtension("GLX_ARB_create_context")) + return GL_TRUE; + + if (glXQueryContext(dpy, oldCtx, GLX_FBCONFIG_ID, &FBConfigAttrs[1])) + return GL_TRUE; + FBConfigs = glXChooseFBConfig(dpy, vi->screen, FBConfigAttrs, &nelems); + + if (nelems < 1) + return GL_TRUE; + + i = 0; + if (params->major) + { + contextAttrs[i++] = GLX_CONTEXT_MAJOR_VERSION_ARB; + contextAttrs[i++] = params->major; + contextAttrs[i++] = GLX_CONTEXT_MINOR_VERSION_ARB; + contextAttrs[i++] = params->minor; + } + if (params->profile) + { + contextAttrs[i++] = GLX_CONTEXT_PROFILE_MASK_ARB; + contextAttrs[i++] = params->profile; + } + if (params->flags) + { + contextAttrs[i++] = GLX_CONTEXT_FLAGS_ARB; + contextAttrs[i++] = params->flags; + } + contextAttrs[i++] = None; + ctx = glXCreateContextAttribsARB(dpy, *FBConfigs, NULL, True, contextAttrs); + + if (NULL == ctx) return GL_TRUE; + if (!glXMakeCurrent(dpy, wnd, ctx)) return GL_TRUE; + + glXDestroyContext(dpy, oldCtx); + + XFree(FBConfigs); + } + return GL_FALSE; +} + +void glewDestroyContext () +{ + if (NULL != dpy && NULL != ctx) glXDestroyContext(dpy, ctx); + if (NULL != dpy && 0 != wnd) XDestroyWindow(dpy, wnd); + if (NULL != dpy && 0 != cmap) XFreeColormap(dpy, cmap); + if (NULL != vis) + XFree(vis); + else if (NULL != vi) + XFree(vi); + if (NULL != dpy) XCloseDisplay(dpy); +} + +#endif /* __UNIX || (__APPLE__ && GLEW_APPLE_GLX) */ diff --git a/vendor/glew-cmake-2.2.0/auto/src/glewinfo_wgl.c b/vendor/glew-cmake-2.2.0/auto/src/glewinfo_wgl.c new file mode 100644 index 0000000..9405667 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glewinfo_wgl.c @@ -0,0 +1,8 @@ +} + +/* ------------------------------------------------------------------------ */ + +#if defined(_WIN32) && !defined(GLEW_EGL) && !defined(GLEW_OSMESA) + +static void wglewInfo () +{ diff --git a/vendor/glew-cmake-2.2.0/auto/src/glxew_head.h b/vendor/glew-cmake-2.2.0/auto/src/glxew_head.h new file mode 100644 index 0000000..414dc1b --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glxew_head.h @@ -0,0 +1,111 @@ +#ifndef __glxew_h__ +#define __glxew_h__ +#define __GLXEW_H__ + +#ifdef __glxext_h_ +#error glxext.h included before glxew.h +#endif + +#if defined(GLX_H) || defined(__GLX_glx_h__) || defined(__glx_h__) +#error glx.h included before glxew.h +#endif + +#define __glxext_h_ + +#define GLX_H +#define __GLX_glx_h__ +#define __glx_h__ + +#include +#include +#include + +#ifndef GLEW_INCLUDE +# include +#else +# include GLEW_INCLUDE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* ---------------------------- GLX_VERSION_1_0 --------------------------- */ + +#ifndef GLX_VERSION_1_0 +#define GLX_VERSION_1_0 1 + +#define GLX_USE_GL 1 +#define GLX_BUFFER_SIZE 2 +#define GLX_LEVEL 3 +#define GLX_RGBA 4 +#define GLX_DOUBLEBUFFER 5 +#define GLX_STEREO 6 +#define GLX_AUX_BUFFERS 7 +#define GLX_RED_SIZE 8 +#define GLX_GREEN_SIZE 9 +#define GLX_BLUE_SIZE 10 +#define GLX_ALPHA_SIZE 11 +#define GLX_DEPTH_SIZE 12 +#define GLX_STENCIL_SIZE 13 +#define GLX_ACCUM_RED_SIZE 14 +#define GLX_ACCUM_GREEN_SIZE 15 +#define GLX_ACCUM_BLUE_SIZE 16 +#define GLX_ACCUM_ALPHA_SIZE 17 +#define GLX_BAD_SCREEN 1 +#define GLX_BAD_ATTRIBUTE 2 +#define GLX_NO_EXTENSION 3 +#define GLX_BAD_VISUAL 4 +#define GLX_BAD_CONTEXT 5 +#define GLX_BAD_VALUE 6 +#define GLX_BAD_ENUM 7 + +typedef XID GLXDrawable; +typedef XID GLXPixmap; +#ifdef __sun +typedef struct __glXContextRec *GLXContext; +#else +typedef struct __GLXcontextRec *GLXContext; +#endif + +typedef unsigned int GLXVideoDeviceNV; + +extern Bool glXQueryExtension (Display *dpy, int *errorBase, int *eventBase); +extern Bool glXQueryVersion (Display *dpy, int *major, int *minor); +extern int glXGetConfig (Display *dpy, XVisualInfo *vis, int attrib, int *value); +extern XVisualInfo* glXChooseVisual (Display *dpy, int screen, int *attribList); +extern GLXPixmap glXCreateGLXPixmap (Display *dpy, XVisualInfo *vis, Pixmap pixmap); +extern void glXDestroyGLXPixmap (Display *dpy, GLXPixmap pix); +extern GLXContext glXCreateContext (Display *dpy, XVisualInfo *vis, GLXContext shareList, Bool direct); +extern void glXDestroyContext (Display *dpy, GLXContext ctx); +extern Bool glXIsDirect (Display *dpy, GLXContext ctx); +extern void glXCopyContext (Display *dpy, GLXContext src, GLXContext dst, GLulong mask); +extern Bool glXMakeCurrent (Display *dpy, GLXDrawable drawable, GLXContext ctx); +extern GLXContext glXGetCurrentContext (void); +extern GLXDrawable glXGetCurrentDrawable (void); +extern void glXWaitGL (void); +extern void glXWaitX (void); +extern void glXSwapBuffers (Display *dpy, GLXDrawable drawable); +extern void glXUseXFont (Font font, int first, int count, int listBase); + +#define GLXEW_VERSION_1_0 GLXEW_GET_VAR(__GLXEW_VERSION_1_0) + +#endif /* GLX_VERSION_1_0 */ + +/* ---------------------------- GLX_VERSION_1_1 --------------------------- */ + +#ifndef GLX_VERSION_1_1 +#define GLX_VERSION_1_1 + +#define GLX_VENDOR 0x1 +#define GLX_VERSION 0x2 +#define GLX_EXTENSIONS 0x3 + +extern const char* glXQueryExtensionsString (Display *dpy, int screen); +extern const char* glXGetClientString (Display *dpy, int name); +extern const char* glXQueryServerString (Display *dpy, int screen, int name); + +#define GLXEW_VERSION_1_1 GLXEW_GET_VAR(__GLXEW_VERSION_1_1) + +#endif /* GLX_VERSION_1_1 */ + diff --git a/vendor/glew-cmake-2.2.0/auto/src/glxew_mid.h b/vendor/glew-cmake-2.2.0/auto/src/glxew_mid.h new file mode 100644 index 0000000..7fcf5d6 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glxew_mid.h @@ -0,0 +1,4 @@ +/* ------------------------------------------------------------------------- */ + +#define GLXEW_FUN_EXPORT GLEW_FUN_EXPORT +#define GLXEW_VAR_EXPORT GLEW_VAR_EXPORT diff --git a/vendor/glew-cmake-2.2.0/auto/src/glxew_tail.h b/vendor/glew-cmake-2.2.0/auto/src/glxew_tail.h new file mode 100644 index 0000000..05ff1b1 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/glxew_tail.h @@ -0,0 +1,20 @@ +/* ------------------------------------------------------------------------ */ + +GLEWAPI GLenum GLEWAPIENTRY glxewInit (); +GLEWAPI GLboolean GLEWAPIENTRY glxewIsSupported (const char *name); + +#ifndef GLXEW_GET_VAR +#define GLXEW_GET_VAR(x) (*(const GLboolean*)&x) +#endif + +#ifndef GLXEW_GET_FUN +#define GLXEW_GET_FUN(x) x +#endif + +GLEWAPI GLboolean GLEWAPIENTRY glxewGetExtension (const char *name); + +#ifdef __cplusplus +} +#endif + +#endif /* __glxew_h__ */ diff --git a/vendor/glew-cmake-2.2.0/auto/src/header.html b/vendor/glew-cmake-2.2.0/auto/src/header.html new file mode 100644 index 0000000..3af7255 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/header.html @@ -0,0 +1,96 @@ + + + + + +GLEW: The OpenGL Extension Wrangler Library + + + + + + + + +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 UQ0hRb1Emg>I#B9BXY0WK4>RWDjQ{`u literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/test/soundboard.bmp b/vendor/sdl-3.0.0/test/soundboard.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1a3e93f07be4d4d5e3fe59122e74b447f0df2842 GIT binary patch literal 65674 zcmeHQ2Y407wZ2JS-g|Dif^o+N47TaL_YM+5AR!?k2?`#tbS;D3Qffv13Hffs-(KsDeEpf*q+Xbdz5S^@2V4nSw1E6^S22{-}0 zfj)pM&==?jxB>3P=#SFF0G{(V-otzO44-8k&H(G~1hfH~0S$mUz?;BpKqcTIW8dMN z-&Fy438)9Ky{yX<@CSl{NFWwS0FsKqV_u5@0)c@5+tCqd1XKr}G`{PXK1ThI0Q^4o z2iuqiT0$c;G10Ml5fscVtfLp+A;8WmEF+N90d;xrE zz*jid_!`H=S7^`I27H6#Z-MXXJksHN;4e7-Gw!p+cetkUZSk?b=X;!M`~}Bm_$#gx ze=ElSp)^8Y=RJI$b@M%JGrx=9`dKk}o%ivb{GEMu09XU$0eyl0c@W;f{cizdfCKpc zEA=aM`Udzb==MXMN80}#*M0!X1mfl_pK@IdMQuxCGlb4G5 z`B*wJH+W2+IyAM7J({8Tq-%o5<3V-`%E2qNo4hprYd_S!2cDs>SVA|} z!Fu@)^?tmM?=*sKvqi(lOW&jKx4n<&N?uTAnBuOix!WhD<;wl~-L_B4b8hT|-@z|CSOyYJg2cN?uy{8P!ZEHl3kAY(j}<;B2jbemW+CF$G)M;EevigO#iP+s zac?+S+#3uQxB3Cnub#iS)*U3Sb^OGowy*TAAB(C$uE`bo!E`bqnjT@~8B)JNLB;393F?=7t=J4wrDdr9+3J*}wN zLz+F)Lz+I*U79@IO+k+{jya+f4=Y}^&V_31X&FFyU^5PF`rMWV|L*f6XkSC%cU_(w z;@$P>!9TRF;34%N=^`Cp?kjnIqh<5x4YF&(7TGjvy==^1Cq>2Bn72-dqC8yB1#*ZD z3L8eQm-X3Jtjk&_8*qK|sLir{>~`5PVW;exv|Dyh*&}gvk#vudl1B8;mJ#mRGTbdwhWE1~xo?Ifxu#2E zpEQL8mk|=@oC*wAi0zduM0C$2g{ba{LPT^+kch7F65b_V!n(vsSm!ti?L16EI>t&c z(IG|x+eb@ayJ$5I)mUs3p~mB2lpLRfT81g;@u;(^^6vaYzZgy~JR;|oAD4@3Ps`O! z@5@KqFUu#pugRVLAIay3K9(aXG%=kosnRx5l9vd*l#!^Pmyn(}Ts> z4_+nsyT0!LcvwUKzJJP2**9fJ3HE@ucTe0}f?X4~Vw@3MWG8rCV+Z)1(AV`j%k3Bk z+cd@&$u?js#s$ah=7J4s%yQfo0X*M|@j_n4eEws@N4g8>E?u4+JO#9W0`LQbaD6F4 zW`@qcFWryLJt&8#@5OiTks~wMXZz*o%;J*Az}v+oufH?rfE=G^<)_n&-t;Sa(nNGpv?`?@MG`;=md}_zBqCVd~sVr^9IZE@pwd`p$j7{g)gU|H`_K&pRmHUh@8_!xO%s^$^l~9PkX#%;kk} zMgLxvf+f4}1VziT+IDd29+?y{ONMpGku2BoGIroJ$@7>fxgHZ_wD%Ml>oZ*@44NsU zJf}!{??Raswm|WVvCb0<4`b{dE0zi8l}xy{`J!yd+bo4cXUM|j<+2*{$%?EsvNC&( ztjbv{t8>@Mx`K_eB73#WOwj(zvBMw8JEze#lTQJu2yu)(O49r0o z(>pQmY{ocRk+~dgSSyDy{*CRmcg(T3Bz3W@%0PRwSIDB&`7$SIrp!;7Bg-?E$QH~~ z9E)r4Zk7)sTPZ{M49EIz%!L}1A$tk5nI+{3uf08czuh)(8?#B=t493DaSnV36aW>0 zm!jKbEBbePDo_F&4wvntx7e+R{lGDw=`v0|gXg91E8*huQm8mTA0oY92*GifxV;)F zm{-(20d{-|e+G&t;01luwXVOkfPNU(H9_`5 zmUGVH++~mUyiVPrD|FAE&`0~$^%dt@1Ekkm9^zEX6ZQFsPm5sGKU6wHH|6|JT9#Fx z{_UN)2V`8}1aW@DTg~Ov5wxDblDY$Rh|o^Ml>VLSo~7mr{k(0tIDVP9Rf+nE^a4o# z5y0cX(;UOyp0dsXp4DSzS<=e;wsA?qa_RG8xb&zPB>s(u$&eOt;@2=n!M{nY3~nAL z18PPq`g_-mlMUG$?pr7OdU5;;H4iyG8zO@nCW%koSn;YAEd$<)67Sm4>fG(MC{=H0 zvrIX^=Dl*!e|1KY^mulNbbQK32Gov}el>%|rTP$YuIevN)doqQnuDeFGySB|BRyqs zs~CBE!4bK!;{&-;^q!ipPAxiW+J5SSw3DeYV59w}i?Q4-ueLWXt;l?dl(NpMeA zwsbA%+(FRiDW{Fk+dHOSN&A7c?^DM|BAjBxzeBM2wF{Df4j~fOJw_tB$1Ax)e-Z5u z>Y?`Pn>=K;xV{*!$NzQE+L=B8^1#Z})yGI9(%-pqsEomUPMytOUA(?;@-7K%k}OWo z1

HbVYCSfDz;e-+Hm)`f`LUh+SG{efnLy$8U$+PY~}nV-*V>5I@qsgvG@-~RP;UY19TlE~I1D}hrm`Kr1f9OJ zV@DpD{Wj{v7-|?NT0R-u%HtHzH0k?lxTN+PC+`=}D@MCR*_yC1Kizj-%?+2=pOr%2 z8Pc<2utauAQ9NZ^=eU?rlJ7N9&1uxFkH8)>`)=E7o1y0pY8D}Fo^_GoKB=btKt6MC zI7r&R*hi*DOo#qwUiaY{dzBte{hl-i_5n2w^#23S<9b#K{(-;y)k>6AscXt?C+)cc zpGk`M2Q`jWW6Ad0d7kK;iEj^wT`^wijke!udrlrn=$xlybs}UM`P{Z%%9Vk2qose< zXxWs%4YtDvYHU(goB9(V6HY8TAp>3?CSGsFNKTM-ezL8Xa?G_#n8bC;lXI)imX;$1 z8+$Qn(CasS{&tCyLS2WQ7_c(Wk&PBaI@#@sTxnPb2hxz@K213Ag3+^3&q;W`gv8J<@JlDR26| z3i@}m{djd-!DjKU6$^VWL{bNs>j0U4SxT21R69}DmQx3u2;Tx_Rd|OK$qOEN z5B>S=L2cue4md4%zPvO0fSg|Pwwwnae6aC7HAmC0a~pD+K0wNZb1TnCK)n?7XGDp< zs%fOlG@lIVSJg`YQ%g?SrN8D2^1-Ab3#2>dz=$qMrFc}=NgX4y!w98&a1PWoxnH?7 zafS4&0^J$&9OqG8pDtN%B6QcjRl+5v?MT@Zgt3kKn0AI+wQz}TpC>04pDY*sCj`t>^pEUjhyI{lbO-3GRiet} zTV?-JMz9Zhzkqld<~gJ8tJ_NY4?~~#fv;smuQ5WOoRK!h<8jbYoGM%GJB;xwpmBRm zcU|HdZNVhcpZpx$c!a<%uv@3DfAY}T(0_s?xLty2pHkNv(kxEt02BOYD!;IP)?P_D zK^t&TgE(dX>2EfcalOI&xF^SbGW_^w1a(gi=5@vljBPVJ z-Z6Hol2_i))zW>cM&_<-?=F#~5Q`p5K4F|9KWV4d3+}74Z^|nYuNsi=)gtZAt1-P&)Lfm^HUGYLCHaA|Bg&ut)uQa` z74+S>y%s4EEi+_4V#=4+ol!a<`GE07mW(y>I_HD8p(Dh$8wr0!2>d-GOlg%pn0959 z(64xO&O27W65~yp2WH)`4#%aKDzN@Ca1&^?CBp&3V%F2Z=%M`#~; zl=GGC7@!TzF-`i@t}xc8k8`0H1-3{O56r6zhb^<~ui2cxNvL~~rttCp4P^>YqWc-> zPaW`OU;&`~!J$pl;pf>SDlUc?sck!XzIWnI32%`BoiRlD({%fcC3Qo0@JCqlblHOT znAKx@jW!^CeDu#5>(a-R;qFxOYT;Hc@VlyUvqn!x{B9Z z(Gt`+O%6;yT*|Mc;*L7@h?3`@9sC$^uW4$m#5$SNKPw4 zCbU!NW2PU$7<;6Qr2gFl^tU&!P%jE-kRU#9#0zZ&d%l&G!&eLa@1!ZlH2wbf=zazs zsDR(2c`w2E%l5ImphsO)ZR9wz0i@K=A?km@;9c+a&n8gJoE6)M@Z1YMxTC--Hf12_!Rzzk#1Ae_@^$W>oJyWC+8F5z18QGEYbBC{Rp&It`xm5 z=g`N8r|*O89i{Z@xIX5*nlUI7{x8H`liSsHRwAuJ+b5dZKUt8~UbUiR0Q}bEapSW*w(>!7d>L&f9~An|Qnn4}YBRqQ z>CYIGKjM|!Fjv#>uYC#3P59C#Pv!Rh8{qxPR{DddjC9w>w9z^CDFZ$zx>U-h(0o82 zGxHtjv$%zRKDXi|d=RgU1d0BD&!w!?>59@Y`zS851h>oh>(ZUR7g({ZIM>~DjICH-m{Wr|P;Mi33 ze=h7e$|^>B+aBZhhk>1}(wI&H1;?+vUQW9kE- z{ll0ueao{W7Al+BwhrSt`CwYme8tn@osvxb)yl7od5ZHT(YG-McU zzYLc`**9sYX zd;odKzL*?7TN*#!L+U=v^&iL=f4r;8t!-MISIby6^KE(F=<#k+|KTpu=9#`SDQLP~ zec2)Fm>If2(JHuYg7PctdUVOS0DTVL zHRIv?SX&b7)%lCGC8$d(KlAQu(2Fi1R#XT-4aQ+#b3HZQHB~&S$4GX+$tpL|lnt_)K}*K|vTW&Xdyac(2Q+ng zKKxUZu(6|MP3Gnj-G@A2V66$_?7j#=3Y+`VVfLsOY~wdlP)g+Mi^N`BR2a zPrtC{l$smPuQ@Bp-9|$WM+nEcZGAkaUPwR1r~%Vezm zXwxL|dOZ#~?pu|-r`~AwCqd^m_0O; z;P2ECC~v7N1-6b?=Kth+OJRhG%Zl5gs2XZ7K|qRu%e7%g5ZL#bf;x zT2^qwbx-{6qjaLp`JlfYzY^)C;ui2LMRtY0W}>g_crE=(_ls4rzI7Svlr8K7osznq zE&a(8gBr#vxw>NbI_0aSe}?M?$Oj+qD&_$t&Q8JI5#=8%<^qt@%=L#HZzOy#P;`R`M`K@ zdBHqG+Sv4cDZi3Qp6%@Lg?IHelNhLq*Fi@PsFy57Ire=ZS_beQ<{~hk)GS|twyPiL z?*@6zn5i+2$Ugm~gb%JNU&!gD$0Ztb6!Q?6J9H2I5&NM3mOARJ@Fi-UgSH*0KO6h< z4s5CwSi4l3zIWGTmUW$LrI`0b+mSgBw9npKbz03$qz8O+)ctZudn1fAw>`%FFXOp2 ze4erR^xos;(uVg{?vq}hp?DZFVe6RPi0@kS2k+V%Rv$9Y^)=RI#G?4sDqlnUl~jHu z;`o|g%tL114T8MZeg$J6lZGB|M2J_-VM2RRKWDF`@0oFM&ze!DaYfFtd{^IBB2>OC z>!I#XJ|Lgc=V9an#*|~)<*HnFGaZ#Ss)~Ifjyo%2iQ*Z`5ZX;DHv#?x)t9iR=u4cN zys%`f>oI@7vemQBvJbYjmL;SK`QX@sV-nUPQ}s7&xgQYI4Fm0eUyKqyu%){`2c7;G zQ1M{WFSJ>@?3uX7YX4v?Fc*?*cF1oRkb_Gd0XBn*+cOs6{(88|3!)9nn7SKE*D9gX zqmp$^0LTA=xK*J4hiV;;(XT{1i@y9#xkW0+%kxe1oE_@xjE{4z0d+fjbl2B+jM=Jk z+uW1B4jd;AU=TtB5a2jpJ*vp(7e^eN4O zPsywfonJyeIEA=#RGX2C{>&Y+r9b&;Xv;XYCWgKT*2g?0=BqJRLCX{R7jNviB4gp7 zwkIn|12fRCd|_SbH87-qQQmgUb;Hy%ZdIahx;!7z47C3v@Lxtgu%$cC@w<`_;F%im z0Uzai=|f~*xc0Le`$6T|&^HE|kkxl0{L;~;^kV;TKBQlJTGU)6vy{Ao%u?(9iv3Dl z14v!w8vH99U#^hH^mp6#FZCgEeF!s+gsDl=M}U87&| z+LjMW`IV_-E=gL4n5@RB?fSjeaz<`j~gg zH3&H#VY!BSqBjaSys`I^5k9CmlTf<3;X&w=q5#~&X}K5H*umpLlyveqg;jPq*&k~KI}^21P9 zaJB;1e`MmCe{<+3(1mtGcjBDMHRoqQYg<0xdp2Zmgr9IK;&l;N|1wOXyQfGT#tVH& z^mXz$qH~JMx1nE_xo6C4w#`qXJjg&?igbhD@9)l)!*kxAc(nrP`Uvn4p!wjBM*8D= z3GH!A`S3@#S7KWuC+JVC%cEM1EKeyre$QCEE7pTDZetd=<2+8CaA2)ruu;z4Lwh4H zkPp^nZ-MVBLP9$rwrt`9U@lLemqU?bn+E!u=RcE7e`U+FKd zwf&?|EnjhY%UAl=!JZ?v{G`(h9@64*S8;mPA391Qe3bXbR!FPyL6gO)hL5za>>^E` z>@F^Kyy2JelYR|-#SQ4+WDt)1u=hwGY5sIC31}59OVXCB93{&8i_meo{#o;ZmNCqy zqmMGERZ@veVGbQZ`IP3J3413Fc4v-S)1dO(F=p6rnh)5ok*!B6`uBMu;(PZh!=gaT z$AQNH`T!mV$Ok3+gW_1*1RVQ{_WV7i^W>L$KNqIf2C-etHPd6ttmIk)zdG?s*EiF# z8P8%|gX?S#Oh0swA4GqL<^%ddnL9kBMLfpWy*_*DmwjIglcCL$(C|FhI4NYt3O8jW$s_5V6Etf&}->WVho9E z7U;J%@&V@^=HD|$W%j*XQ_22F=`jXt6i%po0i{DDE~ou-%w45#m}3^P{4f39O!WXQ zp9G!&$Oq&BB@2xD9MQh7*MFp|@F_)C{3jGSynW_8jM(&c<{V@J-BzBnC8nmnkJPl|*pe%UAK>vGakKZ5Lop-k4 zfNBZBSdYWpK?!P!5#|_2{}@EZiUjbeQ$Oq2@S{86V(E1*I1Jnsi(H`e7>?=6`x>xnYLe|N( zVch$rto$vm9S><{we!r@TIB>H&$3RGuz$%brhS4r{NlQEu$%U&+$rjwoHw{egK~he zKk@_pE?gr+A5fA@HgrJ5K4BBx!aiThr&OG;M4d?cL(4-i-ordFV{Wl-C)ZRYcFEUc zOxfeK%av_T``iHiF6hvRDcz;NuFF;)FrR>X8|XbXjQS4alhmF4Y9-i>cQM8l)HqeO z4R+*rf%UVaLBrR8R{_ljlm(gxDEBq(sTWe_lP@SIc;73R7k^njtVv!dY)Pd9gfvYP z<`(I1ur0|OX-;F6@50P)!?;KQ*YCnk=PA>u3vC~_O?(?iNy{f)rP<>y((XAo z=~2x~x>p?_-Cpx7Dce5V7dD-Jyv@jVGT6LC1Xdv$Vnx9>P3r3%?LGK znEye3DJw>)_yGREfcnYMbS|Af9>{$AF8t+_>q}EtYYX!S!UZmJfAXjj*9h!+F8HC+&%j3 z#{12HXTC2+bPVSL!*KfB6d!G3=4=pGC zi|uyg9C$i-yB;~>W=?7FF`qqy&%>iW|Utj2w`JPkZm%pHNYL%a0vQCTZ zZb%O^`g5+<>$B6G$CTMuy8oENLYc_D4b0-*%y*-&Ys|oz)-^fBHZFAu)O2(BGe^+&hK!n!;A zd)d$rp0wDv<2i+e|fwiu!I64HHOEa_*7>yf77pE~Z@#3Uxl7-`c-drPxN z`v`N42G)s{L$i*SjDI5!Y#F~*(TrbkJ9_{ zK?eNj`^NB@SC)R=5cK0XHqy7e$K-*xfZ9Oa;a#Sd!~&=rm6dbB{XwJKAvX#%Hq+bb z+v56-p$$`HJL2+2y6a=|bDsO82hJ_>KrYJm!re;$v-*|p=2~%|;r@vKbDpO!%C?Ug zpHO?ibj^YNcvJZ&X+to^O*@jlCB|;wgWb9U>yBuba=y2%hxDfn&)8pv>)89sett9U zYU&fzbIt5#uCeESE6ZTtGbfQepnQq2o#|6PI{T1NH!GIW{}<9IHxG1c0K5d0m*%$j z(HtikYXZ3r zR?D0RDW?T5QvNW~&X{v|dihBiR4)NKRutw~>po!Q13liXdq9OrbjM8WEqbFwhFEi} ztb4|CjTZMD+Jqco=86V3Pm*!N3KS2J?rQB5N}Zq1HBZJEq~>qik}+rI{c>)!TIJTwhgPhZ6*mzI=d!2o1 zrmWI*7*sn+xW>fxJ9y6TRXQN}q$lz{=%b@POmOV^V4V$pBCLyf1!i^d8uNPi9{tYy zmGq5spPxyC=PLPFl4pgn%$&Q68_t*HMMbv9Iwj|9wRc;1r)0ISpdWO2z9XVdCdSrv z6<0ORACxELC(4GM6kSexO9mBy=hX;5?Qhu$9Rq7jSb8V~Lt zY;Uh2+LBz~$aQSomyGdt>eE~w$^D0!lfZiDtE1h^JRABS4o%;$@{}kS^&T+XZ~W|v z(`wBQ^Ur*1B`M!B_XYBSP3`qYtlIyNYXoDEcXDm(-Mk7T4=_%_eTSE)tXH{_?2mp} zhe+Bm*O$Iej$`hN!rw?&qYa_^%UCj(fHoreg>wM+q2k=>0)3D3k?YIWHJn__&pc-R z?CB-eHLh2R&cna7yd*aOtG4=!)KAXheBL>|p$wf=(ZFX?w?ZnMtM*QMqI$^pjNPoS>L zMHiqKT!w6UU(R6d?y&_&1BegaKrU8>l6ag1GGQ*#0D zg*;ID0giR(?PPTJW&_?PG>`jxm2;VwO*&R$sX8OQ$5o%iqIm(Mo+$UKsc zOQUxWMQou&4lriPedy>HAfK{L9H+Dc)!1aIk1-~gi%W1kmjH5}>pls}d?VC#-dlW~ z&*(ZRL-hF9@8Wyu3nz@Sg83YWXY5z|0i9X)E@*Q`<+WeMc>i$Q2PzMf>v}(d-A5Tu z8DPc_ng@&}`GI=`kdMeujAbz=lJ+Cx(aiC(M{ka0f_egF9l<$K0dkaU<_XGFg7Sj0 zl=(Q!Y1Opv`%?6|h2cBAL8Hg+6#aM){c!zfT?73s0ON<9pbz>)w;VGca}DcL484kV5tc6R@^vqFTGl zeLiyBry?Jbf9qfx{6o`K$#tDPW?6E*_&4S*=JFX}B-a0OJx-c)p>RJgf-xk5YqZmx zh_NcJ$Q%o<>!vNwHE^`ExE~D17UgVS|HzA|_LYCa z4>5mFY4(__%Fl0zedHTH(gXP>-BrnR=JeA~)g1S5T^!fQbwK_B^AUbdf59gIWN@8~ z_2=f??gN_8Z~IT9y{@}h4lqxsJDV>}?+t5PaA{cE(HG;|jlCG(zVHHYF`>h_%ZVMw zT_KV>j=!4RdBU}%P7^*vc^%~qls8d+oYZOjCn!Hj>^R{@Li_Q+gpXjK+=y#C?xSIC z3U9==9(yCY)tH;eU$`0BqTpskv;2<{$ND6san2_pjYi%IY>;&;uzuEU@_h(%z4f?D{<)L?ABi{ji?;wZM zh)cllV)WvQS+Pk??J%IAMN{rMhS++6b)%hhGySS~OA!g7B89m|U@ zPR_b+IWgly%kk+~E$>YIz;a~rCCj0S7c2+Hzi-)Bc-FFK%xTNcf|Hi*`Nu8W@{d`z zCn*dw*IK5BuCh!GUSXLWxXdzf=n~8L z!HX>80v1}v`p>tF88pu_+HbC9l<#ayzRxU6{=iw5Jnxy7eD7J7asCS}3sBddF=tBA z;P!_9Q|EU!{k_z6TRJ(;@8w*DYQYe;fY8>ff{oAj#?;JEYr|GYiUXFJCbLqwL zYV6}*`}j4s^*{Cav(2y_6-v|QU-`Y1=bvu;LCN`l#e2zjw>JDuf!|)9cYa#*gSwyX z{CDYcjGUkMZ?`(4Y5Gr}=o@Uo6*Fd}H}=<)7}+Z|v2_ z>qa=}^^ei(*VJ$JX#HzyqoXaqeLi#0@E@n4mbnkshyOlbIAMY2(dmMe|-~k5@ zIC#Lp0}dW=@PLB{96aFQ0S6B_c)-B}4jypufP)7dJmBB~2M;)Sz`+9!9&qr0g9jWu z;NSrV4>)+h!2=E+aPWYG2OK=$-~k5@IC#Lp0}dW=@PLB{96aFQ0S6B_c)-B}4jypu zfP)7dJmBB~2M;)Sz`+9!9&qr0g9jWu;NSrV4>)+h!2=E+aPWYG2OK=$-~k5@IC#Lp z0}dW=@PLB{96aFQ0S6B_c)-B}4jypufP)7dJmBB~2M;)S;NQXnucF^IUc<3QRUB(n z!!c347_XzOQH+`>-zdhLDBl8V0sLE}L>-_mP!FgNGyoa`jey2L6QF4^nxW+1tZxCd z1X=;Dfi}fxi?SWSzd1{E06G?ffA73=F}k26x*E_8$3}F=d08;t%VT3*x_*_6_@peZ@Xw-?0yMf3k1c#{~OZ_kB$q z6Phk8Nhe!q8tSqN?$PvTsp-#B)1Rf02Xvi$hkh^Hq3Lhr0VDnI#{-)FKZge%ln+ST zvT#4T+oQdv|38EF?B}v*ujykfHN9<1(*HqtKtHeR);ys3Q1bx!RLcP)4;W>DnH134ZkV;KRhHK A;Q#;t literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/test/soundboard_levels.bmp b/vendor/sdl-3.0.0/test/soundboard_levels.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ce4cd5ba77342a16d7feaf17ed34f93d77294ed9 GIT binary patch literal 2698 zcmc)IYfO_@7zc2+eOt0kx49{(pcN>zMJUXu2pCG~{cQm)n4xU}l|r0mMnOO)^8z$Z zL0!~MsM9E3K)j%A0~Ds*qzDDU3CN|i)CuLXWSd~%**R}psHmH|4{Q4C|JxADJMUh&g=8H z4{hhp|NOqtMb;s3mOT_=F7ggC$uXYG9*WQ!;i~8)s8L-3_Mro7{SvkQvqIXA#GW>k zWK_X~^s4ca^r|tl$}zlNN~(lX6`of-i4RN~-4vYK8sr$!SgNXkp1eoT%SUVZMw0%b z5%d>(L0@1XWvo63$swvXwqr!ojeWPwdwAcfVDhZ~k{%4$=a)1*y_~k8u6X z{pIF;>p3zlXK@WWkM&;dM!KN4unRI|nUJ=6|6gSNfimd5(mipGJd5VG=X(n~!FUbp z0OR$CppqYey^-JizI2AD=hz0d;b!Iyn5r!629#x$LfJvA1j-H-LpgT17&daYLIRO$ z^qv+x~p>@9~46~`~bi(NwNNVZi08W+Hq#22uEy+s@BB-U1{^TAZ1`Dc}A zzp@qvEDpq_LV`F&!*^@BbPzJ;G<*zJj<2Kk9wxuq>!B=;3=N^6Sc{N~nCY(Uy zmrGcwfXzgF%hH)%gDfY%Rw0#rPr~4~O6Z&i5<0gvgu!bI_29LKEfjRD@Dy}Py@k4P zACX?l6zZf*k&d&#e@MxSsq=TB{l=c}^B~MCpf!%qd#dE~MwNX2sFF7YS1=mO<&UiA z2u74V;nOhYvhh^8Vwg?w`ZYHrp{L&U%=t4=lh|;1HWoH2#Nm9bMiOQz}Dzi@e(>@sKId5?RC8D#HhvwG) zIP>9X@_Lexx=_@8$;7nk`AN2XOP@y z8PMF?7pJ8!?s;rSG$cu7x7n0=omY=Cjl5VM7I5!}&weej!E6 z9cP-jE(=;j?(Q0lpwa6v5l*_tU4rIuS4{J)$0T&G1__-1{hYCZ9GGB2W0Tsf{{&?3 z2?r&Mcb1^dscyNw1I7oBzX0kvXo31q_EJO6-j%36IG3Q$slH#a9ma>ge*x5UXlh^F zCmV9oRzNH(=nPq3nF8a(-%at7ewKTx)50J&Fz__T<)ii=PsPA})Z<^Fd*ZudyW{*o z;kP(Hi1L0v-|f>T5p8xAzKfNZF}KFd@s5}=N#fyDi*a3N=+-Rtxy)YhK`)Q`Nh7Ye zvi86^*$4NV?89~axO?>yW&y4(%G(7k+EcG(*CqmFzKbph+-Ftb+A*koE$YlThzVGB z;{U9V_V-o)m+z1AUy>8-JiYZzf4|7ZUb!sFdwu9xYVkd632F9~R@UcgP5fNZ|E_D* IBF2Tk0c-))uK)l5 literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/test/speaker.bmp b/vendor/sdl-3.0.0/test/speaker.bmp new file mode 100644 index 0000000000000000000000000000000000000000..56f3dc1ae6699c9fc89daa9b8925c2ebacfab52b GIT binary patch literal 65674 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 LgGw8Pr@{XNkWPDZ literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/test/template.test.in b/vendor/sdl-3.0.0/test/template.test.in new file mode 100644 index 0000000..c182bbc --- /dev/null +++ b/vendor/sdl-3.0.0/test/template.test.in @@ -0,0 +1,3 @@ +[Test] +Type=session +Exec=@installedtestsdir@/@exe@ @noninteractive_arguments@ diff --git a/vendor/sdl-3.0.0/test/testatomic.c b/vendor/sdl-3.0.0/test/testatomic.c new file mode 100644 index 0000000..b28ef9b --- /dev/null +++ b/vendor/sdl-3.0.0/test/testatomic.c @@ -0,0 +1,731 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +#include +#include +#include + +/* + Absolutely basic tests just to see if we get the expected value + after calling each function. +*/ + +static const char * +tf(SDL_bool _tf) +{ + static const char *t = "TRUE"; + static const char *f = "FALSE"; + + if (_tf) { + return t; + } + + return f; +} + +static void RunBasicTest(void) +{ + int value; + SDL_SpinLock lock = 0; + + SDL_AtomicInt v; + SDL_bool tfret = SDL_FALSE; + + SDL_Log("\nspin lock---------------------------------------\n\n"); + + SDL_AtomicLock(&lock); + SDL_Log("AtomicLock lock=%d\n", lock); + SDL_AtomicUnlock(&lock); + SDL_Log("AtomicUnlock lock=%d\n", lock); + + SDL_Log("\natomic -----------------------------------------\n\n"); + + SDL_AtomicSet(&v, 0); + tfret = SDL_AtomicSet(&v, 10) == 0 ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicSet(10) tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + tfret = SDL_AtomicAdd(&v, 10) == 10 ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicAdd(10) tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + + SDL_AtomicSet(&v, 0); + SDL_AtomicIncRef(&v); + tfret = (SDL_AtomicGet(&v) == 1) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicIncRef() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + SDL_AtomicIncRef(&v); + tfret = (SDL_AtomicGet(&v) == 2) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicIncRef() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + tfret = (SDL_AtomicDecRef(&v) == SDL_FALSE) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicDecRef() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + tfret = (SDL_AtomicDecRef(&v) == SDL_TRUE) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicDecRef() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + + SDL_AtomicSet(&v, 10); + tfret = (SDL_AtomicCAS(&v, 0, 20) == SDL_FALSE) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicCAS() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + value = SDL_AtomicGet(&v); + tfret = (SDL_AtomicCAS(&v, value, 20) == SDL_TRUE) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicCAS() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); +} + +/**************************************************************************/ +/* Atomic operation test + * Adapted with permission from code by Michael Davidsaver at: + * http://bazaar.launchpad.net/~mdavidsaver/epics-base/atomic/revision/12105#src/libCom/test/epicsAtomicTest.c + * Original copyright 2010 Brookhaven Science Associates as operator of Brookhaven National Lab + * http://www.aps.anl.gov/epics/license/open.php + */ + +/* Tests semantics of atomic operations. Also a stress test + * to see if they are really atomic. + * + * Several threads adding to the same variable. + * at the end the value is compared with the expected + * and with a non-atomic counter. + */ + +/* Number of concurrent incrementers */ +#define NThreads 2 +#define CountInc 100 +#define VALBITS (sizeof(atomicValue) * 8) + +#define atomicValue int +#define CountTo ((atomicValue)((unsigned int)(1 << (VALBITS - 1)) - 1)) +#define NInter (CountTo / CountInc / NThreads) +#define Expect (CountTo - NInter * CountInc * NThreads) + +enum +{ + CountTo_GreaterThanZero = CountTo > 0, +}; +SDL_COMPILE_TIME_ASSERT(size, CountTo_GreaterThanZero); /* check for rollover */ + +static SDL_AtomicInt good = { 42 }; +static atomicValue bad = 42; +static SDL_AtomicInt threadsRunning; +static SDL_Semaphore *threadDone; + +static int SDLCALL adder(void *junk) +{ + unsigned long N = NInter; + SDL_Log("Thread subtracting %d %lu times\n", CountInc, N); + while (N--) { + SDL_AtomicAdd(&good, -CountInc); + bad -= CountInc; + } + SDL_AtomicAdd(&threadsRunning, -1); + SDL_PostSemaphore(threadDone); + return 0; +} + +static void runAdder(void) +{ + Uint64 start, end; + int T = NThreads; + + start = SDL_GetTicksNS(); + + threadDone = SDL_CreateSemaphore(0); + + SDL_AtomicSet(&threadsRunning, NThreads); + + while (T--) { + SDL_CreateThread(adder, "Adder", NULL); + } + + while (SDL_AtomicGet(&threadsRunning) > 0) { + SDL_WaitSemaphore(threadDone); + } + + SDL_DestroySemaphore(threadDone); + + end = SDL_GetTicksNS(); + + SDL_Log("Finished in %f sec\n", (end - start) / 1000000000.0); +} + +static void RunEpicTest(void) +{ + int b; + atomicValue v; + + SDL_Log("\nepic test---------------------------------------\n\n"); + + SDL_Log("Size asserted to be >= 32-bit\n"); + SDL_assert(sizeof(atomicValue) >= 4); + + SDL_Log("Check static initializer\n"); + v = SDL_AtomicGet(&good); + SDL_assert(v == 42); + + SDL_assert(bad == 42); + + SDL_Log("Test negative values\n"); + SDL_AtomicSet(&good, -5); + v = SDL_AtomicGet(&good); + SDL_assert(v == -5); + + SDL_Log("Verify maximum value\n"); + SDL_AtomicSet(&good, CountTo); + v = SDL_AtomicGet(&good); + SDL_assert(v == CountTo); + + SDL_Log("Test compare and exchange\n"); + + b = SDL_AtomicCAS(&good, 500, 43); + SDL_assert(!b); /* no swap since CountTo!=500 */ + v = SDL_AtomicGet(&good); + SDL_assert(v == CountTo); /* ensure no swap */ + + b = SDL_AtomicCAS(&good, CountTo, 44); + SDL_assert(!!b); /* will swap */ + v = SDL_AtomicGet(&good); + SDL_assert(v == 44); + + SDL_Log("Test Add\n"); + + v = SDL_AtomicAdd(&good, 1); + SDL_assert(v == 44); + v = SDL_AtomicGet(&good); + SDL_assert(v == 45); + + v = SDL_AtomicAdd(&good, 10); + SDL_assert(v == 45); + v = SDL_AtomicGet(&good); + SDL_assert(v == 55); + + SDL_Log("Test Add (Negative values)\n"); + + v = SDL_AtomicAdd(&good, -20); + SDL_assert(v == 55); + v = SDL_AtomicGet(&good); + SDL_assert(v == 35); + + v = SDL_AtomicAdd(&good, -50); /* crossing zero down */ + SDL_assert(v == 35); + v = SDL_AtomicGet(&good); + SDL_assert(v == -15); + + v = SDL_AtomicAdd(&good, 30); /* crossing zero up */ + SDL_assert(v == -15); + v = SDL_AtomicGet(&good); + SDL_assert(v == 15); + + SDL_Log("Reset before count down test\n"); + SDL_AtomicSet(&good, CountTo); + v = SDL_AtomicGet(&good); + SDL_assert(v == CountTo); + + bad = CountTo; + SDL_assert(bad == CountTo); + + SDL_Log("Counting down from %d, Expect %d remaining\n", CountTo, Expect); + runAdder(); + + v = SDL_AtomicGet(&good); + SDL_Log("Atomic %d Non-Atomic %d\n", v, bad); + SDL_assert(v == Expect); + /* We can't guarantee that bad != Expect, this would happen on a single core system, for example. */ + /*SDL_assert(bad != Expect);*/ +} + +/* End atomic operation test */ +/**************************************************************************/ + +/**************************************************************************/ +/* Lock-free FIFO test */ + +/* This is useful to test the impact of another thread locking the queue + entirely for heavy-weight manipulation. + */ +#define TEST_SPINLOCK_FIFO + +#define NUM_READERS 4 +#define NUM_WRITERS 4 +#define EVENTS_PER_WRITER 1000000 + +/* The number of entries must be a power of 2 */ +#define MAX_ENTRIES 256 +#define WRAP_MASK (MAX_ENTRIES - 1) + +typedef struct +{ + SDL_AtomicInt sequence; + SDL_Event event; +} SDL_EventQueueEntry; + +typedef struct +{ + SDL_EventQueueEntry entries[MAX_ENTRIES]; + + char cache_pad1[SDL_CACHELINE_SIZE - ((sizeof(SDL_EventQueueEntry) * MAX_ENTRIES) % SDL_CACHELINE_SIZE)]; + + SDL_AtomicInt enqueue_pos; + + char cache_pad2[SDL_CACHELINE_SIZE - sizeof(SDL_AtomicInt)]; + + SDL_AtomicInt dequeue_pos; + + char cache_pad3[SDL_CACHELINE_SIZE - sizeof(SDL_AtomicInt)]; + +#ifdef TEST_SPINLOCK_FIFO + SDL_SpinLock lock; + SDL_AtomicInt rwcount; + SDL_AtomicInt watcher; + + char cache_pad4[SDL_CACHELINE_SIZE - sizeof(SDL_SpinLock) - 2 * sizeof(SDL_AtomicInt)]; +#endif + + SDL_AtomicInt active; + + /* Only needed for the mutex test */ + SDL_Mutex *mutex; + +} SDL_EventQueue; + +static void InitEventQueue(SDL_EventQueue *queue) +{ + int i; + + for (i = 0; i < MAX_ENTRIES; ++i) { + SDL_AtomicSet(&queue->entries[i].sequence, i); + } + SDL_AtomicSet(&queue->enqueue_pos, 0); + SDL_AtomicSet(&queue->dequeue_pos, 0); +#ifdef TEST_SPINLOCK_FIFO + queue->lock = 0; + SDL_AtomicSet(&queue->rwcount, 0); + SDL_AtomicSet(&queue->watcher, 0); +#endif + SDL_AtomicSet(&queue->active, 1); +} + +static SDL_bool EnqueueEvent_LockFree(SDL_EventQueue *queue, const SDL_Event *event) +{ + SDL_EventQueueEntry *entry; + unsigned queue_pos; + unsigned entry_seq; + int delta; + SDL_bool status; + +#ifdef TEST_SPINLOCK_FIFO + /* This is a gate so an external thread can lock the queue */ + SDL_AtomicLock(&queue->lock); + SDL_assert(SDL_AtomicGet(&queue->watcher) == 0); + SDL_AtomicIncRef(&queue->rwcount); + SDL_AtomicUnlock(&queue->lock); +#endif + + queue_pos = (unsigned)SDL_AtomicGet(&queue->enqueue_pos); + for (;;) { + entry = &queue->entries[queue_pos & WRAP_MASK]; + entry_seq = (unsigned)SDL_AtomicGet(&entry->sequence); + + delta = (int)(entry_seq - queue_pos); + if (delta == 0) { + /* The entry and the queue position match, try to increment the queue position */ + if (SDL_AtomicCAS(&queue->enqueue_pos, (int)queue_pos, (int)(queue_pos + 1))) { + /* We own the object, fill it! */ + entry->event = *event; + SDL_AtomicSet(&entry->sequence, (int)(queue_pos + 1)); + status = SDL_TRUE; + break; + } + } else if (delta < 0) { + /* We ran into an old queue entry, which means it still needs to be dequeued */ + status = SDL_FALSE; + break; + } else { + /* We ran into a new queue entry, get the new queue position */ + queue_pos = (unsigned)SDL_AtomicGet(&queue->enqueue_pos); + } + } + +#ifdef TEST_SPINLOCK_FIFO + (void)SDL_AtomicDecRef(&queue->rwcount); +#endif + return status; +} + +static SDL_bool DequeueEvent_LockFree(SDL_EventQueue *queue, SDL_Event *event) +{ + SDL_EventQueueEntry *entry; + unsigned queue_pos; + unsigned entry_seq; + int delta; + SDL_bool status; + +#ifdef TEST_SPINLOCK_FIFO + /* This is a gate so an external thread can lock the queue */ + SDL_AtomicLock(&queue->lock); + SDL_assert(SDL_AtomicGet(&queue->watcher) == 0); + SDL_AtomicIncRef(&queue->rwcount); + SDL_AtomicUnlock(&queue->lock); +#endif + + queue_pos = (unsigned)SDL_AtomicGet(&queue->dequeue_pos); + for (;;) { + entry = &queue->entries[queue_pos & WRAP_MASK]; + entry_seq = (unsigned)SDL_AtomicGet(&entry->sequence); + + delta = (int)(entry_seq - (queue_pos + 1)); + if (delta == 0) { + /* The entry and the queue position match, try to increment the queue position */ + if (SDL_AtomicCAS(&queue->dequeue_pos, (int)queue_pos, (int)(queue_pos + 1))) { + /* We own the object, fill it! */ + *event = entry->event; + SDL_AtomicSet(&entry->sequence, (int)(queue_pos + MAX_ENTRIES)); + status = SDL_TRUE; + break; + } + } else if (delta < 0) { + /* We ran into an old queue entry, which means we've hit empty */ + status = SDL_FALSE; + break; + } else { + /* We ran into a new queue entry, get the new queue position */ + queue_pos = (unsigned)SDL_AtomicGet(&queue->dequeue_pos); + } + } + +#ifdef TEST_SPINLOCK_FIFO + (void)SDL_AtomicDecRef(&queue->rwcount); +#endif + return status; +} + +static SDL_bool EnqueueEvent_Mutex(SDL_EventQueue *queue, const SDL_Event *event) +{ + SDL_EventQueueEntry *entry; + unsigned queue_pos; + unsigned entry_seq; + int delta; + SDL_bool status = SDL_FALSE; + + SDL_LockMutex(queue->mutex); + + queue_pos = (unsigned)queue->enqueue_pos.value; + entry = &queue->entries[queue_pos & WRAP_MASK]; + entry_seq = (unsigned)entry->sequence.value; + + delta = (int)(entry_seq - queue_pos); + if (delta == 0) { + ++queue->enqueue_pos.value; + + /* We own the object, fill it! */ + entry->event = *event; + entry->sequence.value = (int)(queue_pos + 1); + status = SDL_TRUE; + } else if (delta < 0) { + /* We ran into an old queue entry, which means it still needs to be dequeued */ + } else { + SDL_Log("ERROR: mutex failed!\n"); + } + + SDL_UnlockMutex(queue->mutex); + + return status; +} + +static SDL_bool DequeueEvent_Mutex(SDL_EventQueue *queue, SDL_Event *event) +{ + SDL_EventQueueEntry *entry; + unsigned queue_pos; + unsigned entry_seq; + int delta; + SDL_bool status = SDL_FALSE; + + SDL_LockMutex(queue->mutex); + + queue_pos = (unsigned)queue->dequeue_pos.value; + entry = &queue->entries[queue_pos & WRAP_MASK]; + entry_seq = (unsigned)entry->sequence.value; + + delta = (int)(entry_seq - (queue_pos + 1)); + if (delta == 0) { + ++queue->dequeue_pos.value; + + /* We own the object, fill it! */ + *event = entry->event; + entry->sequence.value = (int)(queue_pos + MAX_ENTRIES); + status = SDL_TRUE; + } else if (delta < 0) { + /* We ran into an old queue entry, which means we've hit empty */ + } else { + SDL_Log("ERROR: mutex failed!\n"); + } + + SDL_UnlockMutex(queue->mutex); + + return status; +} + +typedef struct +{ + SDL_EventQueue *queue; + int index; + char padding1[SDL_CACHELINE_SIZE - (sizeof(SDL_EventQueue *) + sizeof(int)) % SDL_CACHELINE_SIZE]; + int waits; + SDL_bool lock_free; + char padding2[SDL_CACHELINE_SIZE - sizeof(int) - sizeof(SDL_bool)]; + SDL_Thread *thread; +} WriterData; + +typedef struct +{ + SDL_EventQueue *queue; + int counters[NUM_WRITERS]; + int waits; + SDL_bool lock_free; + char padding[SDL_CACHELINE_SIZE - (sizeof(SDL_EventQueue *) + sizeof(int) * NUM_WRITERS + sizeof(int) + sizeof(SDL_bool)) % SDL_CACHELINE_SIZE]; + SDL_Thread *thread; +} ReaderData; + +static int SDLCALL FIFO_Writer(void *_data) +{ + WriterData *data = (WriterData *)_data; + SDL_EventQueue *queue = data->queue; + int i; + SDL_Event event; + + event.type = SDL_EVENT_USER; + event.user.windowID = 0; + event.user.code = 0; + event.user.data1 = data; + event.user.data2 = NULL; + + if (data->lock_free) { + for (i = 0; i < EVENTS_PER_WRITER; ++i) { + event.user.code = i; + while (!EnqueueEvent_LockFree(queue, &event)) { + ++data->waits; + SDL_Delay(0); + } + } + } else { + for (i = 0; i < EVENTS_PER_WRITER; ++i) { + event.user.code = i; + while (!EnqueueEvent_Mutex(queue, &event)) { + ++data->waits; + SDL_Delay(0); + } + } + } + return 0; +} + +static int SDLCALL FIFO_Reader(void *_data) +{ + ReaderData *data = (ReaderData *)_data; + SDL_EventQueue *queue = data->queue; + SDL_Event event; + + if (data->lock_free) { + for (;;) { + if (DequeueEvent_LockFree(queue, &event)) { + WriterData *writer = (WriterData *)event.user.data1; + ++data->counters[writer->index]; + } else if (SDL_AtomicGet(&queue->active)) { + ++data->waits; + SDL_Delay(0); + } else { + /* We drained the queue, we're done! */ + break; + } + } + } else { + for (;;) { + if (DequeueEvent_Mutex(queue, &event)) { + WriterData *writer = (WriterData *)event.user.data1; + ++data->counters[writer->index]; + } else if (SDL_AtomicGet(&queue->active)) { + ++data->waits; + SDL_Delay(0); + } else { + /* We drained the queue, we're done! */ + break; + } + } + } + return 0; +} + +#ifdef TEST_SPINLOCK_FIFO +/* This thread periodically locks the queue for no particular reason */ +static int SDLCALL FIFO_Watcher(void *_data) +{ + SDL_EventQueue *queue = (SDL_EventQueue *)_data; + + while (SDL_AtomicGet(&queue->active)) { + SDL_AtomicLock(&queue->lock); + SDL_AtomicIncRef(&queue->watcher); + while (SDL_AtomicGet(&queue->rwcount) > 0) { + SDL_Delay(0); + } + /* Do queue manipulation here... */ + (void)SDL_AtomicDecRef(&queue->watcher); + SDL_AtomicUnlock(&queue->lock); + + /* Wait a bit... */ + SDL_Delay(1); + } + return 0; +} +#endif /* TEST_SPINLOCK_FIFO */ + +static void RunFIFOTest(SDL_bool lock_free) +{ + SDL_EventQueue queue; + SDL_Thread *fifo_thread = NULL; + WriterData writerData[NUM_WRITERS]; + ReaderData readerData[NUM_READERS]; + Uint64 start, end; + int i, j; + int grand_total; + char textBuffer[1024]; + size_t len; + + SDL_Log("\nFIFO test---------------------------------------\n\n"); + SDL_Log("Mode: %s\n", lock_free ? "LockFree" : "Mutex"); + + SDL_memset(&queue, 0xff, sizeof(queue)); + + InitEventQueue(&queue); + if (!lock_free) { + queue.mutex = SDL_CreateMutex(); + } + + start = SDL_GetTicksNS(); + +#ifdef TEST_SPINLOCK_FIFO + /* Start a monitoring thread */ + if (lock_free) { + fifo_thread = SDL_CreateThread(FIFO_Watcher, "FIFOWatcher", &queue); + } +#endif + + /* Start the readers first */ + SDL_Log("Starting %d readers\n", NUM_READERS); + SDL_zeroa(readerData); + for (i = 0; i < NUM_READERS; ++i) { + char name[64]; + (void)SDL_snprintf(name, sizeof(name), "FIFOReader%d", i); + readerData[i].queue = &queue; + readerData[i].lock_free = lock_free; + readerData[i].thread = SDL_CreateThread(FIFO_Reader, name, &readerData[i]); + } + + /* Start up the writers */ + SDL_Log("Starting %d writers\n", NUM_WRITERS); + SDL_zeroa(writerData); + for (i = 0; i < NUM_WRITERS; ++i) { + char name[64]; + (void)SDL_snprintf(name, sizeof(name), "FIFOWriter%d", i); + writerData[i].queue = &queue; + writerData[i].index = i; + writerData[i].lock_free = lock_free; + writerData[i].thread = SDL_CreateThread(FIFO_Writer, name, &writerData[i]); + } + + /* Wait for the writers */ + for (i = 0; i < NUM_WRITERS; ++i) { + SDL_WaitThread(writerData[i].thread, NULL); + } + + /* Shut down the queue so readers exit */ + SDL_AtomicSet(&queue.active, 0); + + /* Wait for the readers */ + for (i = 0; i < NUM_READERS; ++i) { + SDL_WaitThread(readerData[i].thread, NULL); + } + + end = SDL_GetTicksNS(); + + /* Wait for the FIFO thread */ + if (fifo_thread) { + SDL_WaitThread(fifo_thread, NULL); + } + + if (!lock_free) { + SDL_DestroyMutex(queue.mutex); + } + + SDL_Log("Finished in %f sec\n", (end - start) / 1000000000.0); + + SDL_Log("\n"); + for (i = 0; i < NUM_WRITERS; ++i) { + SDL_Log("Writer %d wrote %d events, had %d waits\n", i, EVENTS_PER_WRITER, writerData[i].waits); + } + SDL_Log("Writers wrote %d total events\n", NUM_WRITERS * EVENTS_PER_WRITER); + + /* Print a breakdown of which readers read messages from which writer */ + SDL_Log("\n"); + grand_total = 0; + for (i = 0; i < NUM_READERS; ++i) { + int total = 0; + for (j = 0; j < NUM_WRITERS; ++j) { + total += readerData[i].counters[j]; + } + grand_total += total; + SDL_Log("Reader %d read %d events, had %d waits\n", i, total, readerData[i].waits); + (void)SDL_snprintf(textBuffer, sizeof(textBuffer), " { "); + for (j = 0; j < NUM_WRITERS; ++j) { + if (j > 0) { + len = SDL_strlen(textBuffer); + (void)SDL_snprintf(textBuffer + len, sizeof(textBuffer) - len, ", "); + } + len = SDL_strlen(textBuffer); + (void)SDL_snprintf(textBuffer + len, sizeof(textBuffer) - len, "%d", readerData[i].counters[j]); + } + len = SDL_strlen(textBuffer); + (void)SDL_snprintf(textBuffer + len, sizeof(textBuffer) - len, " }\n"); + SDL_Log("%s", textBuffer); + } + SDL_Log("Readers read %d total events\n", grand_total); +} + +/* End FIFO test */ +/**************************************************************************/ + +int main(int argc, char *argv[]) +{ + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + RunBasicTest(); + + if (SDL_getenv("SDL_TESTS_QUICK") != NULL) { + SDL_Log("Not running slower tests"); + return 0; + } + + RunEpicTest(); +/* This test is really slow, so don't run it by default */ +#if 0 + RunFIFOTest(SDL_FALSE); +#endif + RunFIFOTest(SDL_TRUE); + SDLTest_CommonDestroyState(state); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testaudio-art.txt b/vendor/sdl-3.0.0/test/testaudio-art.txt new file mode 100644 index 0000000..f30a3d2 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testaudio-art.txt @@ -0,0 +1,8 @@ +The .bmp files used by testaudio.c were made by AlDraw: + +https://linktr.ee/AlexDraw + +They may be distributed as public domain files! + + + diff --git a/vendor/sdl-3.0.0/test/testaudio.c b/vendor/sdl-3.0.0/test/testaudio.c new file mode 100644 index 0000000..a1bafa0 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testaudio.c @@ -0,0 +1,1276 @@ +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include +#include +#include "testutils.h" + +#define POOF_LIFETIME 250 +#define VISUALIZER_WIDTH 100 +#define VISUALIZER_HEIGHT 50 + +typedef struct Texture +{ + SDL_Texture *texture; + float w; + float h; +} Texture; + +typedef enum ThingType +{ + THING_NULL, + THING_PHYSDEV, + THING_PHYSDEV_CAPTURE, + THING_LOGDEV, + THING_LOGDEV_CAPTURE, + THING_TRASHCAN, + THING_STREAM, + THING_POOF, + THING_WAV +} ThingType; + + +typedef struct Thing Thing; + +struct Thing +{ + ThingType what; + + union { + struct { + SDL_AudioDeviceID devid; + SDL_bool iscapture; + SDL_AudioSpec spec; + char *name; + } physdev; + struct { + SDL_AudioDeviceID devid; + SDL_bool iscapture; + SDL_AudioSpec spec; + Thing *physdev; + SDL_bool visualizer_enabled; + SDL_bool visualizer_updated; + SDL_Texture *visualizer; + SDL_Mutex *postmix_lock; + float *postmix_buffer; + int postmix_buflen; + int postmix_allocated; + SDL_AudioSpec postmix_spec; + SDL_AtomicInt postmix_updated; + } logdev; + struct { + SDL_AudioSpec spec; + Uint8 *buf; + Uint32 buflen; + } wav; + struct { + float startw; + float starth; + float centerx; + float centery; + } poof; + struct { + SDL_AudioStream *stream; + int total_bytes; + Uint64 next_level_update; + Uint8 levels[5]; + } stream; + } data; + + Thing *line_connected_to; + char *titlebar; + SDL_FRect rect; + float z; + Uint8 r, g, b, a; + float progress; + float scale; + Uint64 createticks; + Texture *texture; + const ThingType *can_be_dropped_onto; + + void (*ontick)(Thing *thing, Uint64 now); + void (*ondrag)(Thing *thing, int button, float x, float y); + void (*ondrop)(Thing *thing, int button, float x, float y); + void (*ondraw)(Thing *thing, SDL_Renderer *renderer); + + Thing *prev; + Thing *next; +}; + + +static Uint64 app_ready_ticks = 0; +static int done = 0; +static SDLTest_CommonState *state = NULL; + +static Thing *things = NULL; +static char *current_titlebar = NULL; + +static Thing *mouseover_thing = NULL; +static Thing *droppable_highlighted_thing = NULL; +static Thing *dragging_thing = NULL; +static int dragging_button = -1; +static int dragging_button_real = -1; +static SDL_bool ctrl_held = SDL_FALSE; +static SDL_bool alt_held = SDL_FALSE; + +static Texture *physdev_texture = NULL; +static Texture *logdev_texture = NULL; +static Texture *audio_texture = NULL; +static Texture *trashcan_texture = NULL; +static Texture *soundboard_texture = NULL; +static Texture *soundboard_levels_texture = NULL; + +static void DestroyTexture(Texture *tex); +static void DestroyThing(Thing *thing); + + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void Quit(int rc) +{ + while (things != NULL) { + DestroyThing(things); /* make sure all the audio devices are closed, etc. */ + } + + DestroyTexture(physdev_texture); + DestroyTexture(logdev_texture); + DestroyTexture(audio_texture); + DestroyTexture(trashcan_texture); + DestroyTexture(soundboard_texture); + DestroyTexture(soundboard_levels_texture); + SDLTest_CommonQuit(state); + + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static char *xstrdup(const char *str) +{ + char *ptr = SDL_strdup(str); + if (!ptr) { + SDL_Log("Out of memory!"); + Quit(1); + } + return ptr; +} + +static void *xalloc(const size_t len) +{ + void *ptr = SDL_calloc(1, len); + if (!ptr) { + SDL_Log("Out of memory!"); + Quit(1); + } + return ptr; +} + + +static void SetTitleBar(const char *fmt, ...) +{ + char *newstr = NULL; + va_list ap; + va_start(ap, fmt); + SDL_vasprintf(&newstr, fmt, ap); + va_end(ap); + + if (newstr && (!current_titlebar || (SDL_strcmp(current_titlebar, newstr) != 0))) { + SDL_SetWindowTitle(state->windows[0], newstr); + SDL_free(current_titlebar); + current_titlebar = newstr; + } else { + SDL_free(newstr); + } +} + +static void SetDefaultTitleBar(void) +{ + SetTitleBar("testaudio: %s", SDL_GetCurrentAudioDriver()); +} + +static Thing *FindThingAtPoint(const float x, const float y) +{ + const SDL_FPoint pt = { x, y }; + Thing *retval = NULL; + Thing *i; + for (i = things; i != NULL; i = i->next) { + if ((i != dragging_thing) && SDL_PointInRectFloat(&pt, &i->rect)) { + retval = i; /* keep going, though, because things drawn on top are later in the list. */ + } + } + return retval; +} + +static Thing *UpdateMouseOver(const float x, const float y) +{ + Thing *thing; + + if (dragging_thing) { + thing = dragging_thing; + } else { + thing = FindThingAtPoint(x, y); + } + + mouseover_thing = thing; + + if (!thing) { + SetDefaultTitleBar(); + } else if (thing->titlebar) { + SetTitleBar("%s", thing->titlebar); + } + + return thing; +} + +static Thing *CreateThing(ThingType what, float x, float y, float z, float w, float h, Texture *texture, const char *titlebar) +{ + Thing *last = NULL; + Thing *i; + Thing *thing; + + thing = (Thing *) xalloc(sizeof (Thing)); + if ((w < 0) || (h < 0)) { + SDL_assert(texture != NULL); + if (w < 0) { + w = texture->w; + } + if (h < 0) { + h = texture->h; + } + } + + thing->what = what; + thing->rect.x = x; + thing->rect.y = y; + thing->rect.w = w; + thing->rect.h = h; + thing->z = z; + thing->r = 255; + thing->g = 255; + thing->b = 255; + thing->a = 255; + thing->scale = 1.0f; + thing->createticks = SDL_GetTicks(); + thing->texture = texture; + thing->titlebar = titlebar ? xstrdup(titlebar) : NULL; + + /* insert in list by Z order (furthest from the "camera" first, so they get drawn over; negative Z is not drawn at all). */ + if (things == NULL) { + things = thing; + return thing; + } + + for (i = things; i != NULL; i = i->next) { + if (z > i->z) { /* insert here. */ + thing->next = i; + thing->prev = i->prev; + + SDL_assert(i->prev == last); + + if (i->prev) { + i->prev->next = thing; + } else { + SDL_assert(i == things); + things = thing; + } + i->prev = thing; + return thing; + } + last = i; + } + + if (last) { + last->next = thing; + thing->prev = last; + } + return thing; +} + +static void DestroyThing(Thing *thing) +{ + if (!thing) { + return; + } + + if (mouseover_thing == thing) { + mouseover_thing = NULL; + } + + if (droppable_highlighted_thing == thing) { + droppable_highlighted_thing = NULL; + } + + if (dragging_thing == thing) { + dragging_thing = NULL; + } + + switch (thing->what) { + case THING_POOF: break; + case THING_NULL: break; + case THING_TRASHCAN: break; + + case THING_LOGDEV: + case THING_LOGDEV_CAPTURE: + SDL_CloseAudioDevice(thing->data.logdev.devid); + if (state->renderers[0] != NULL) { + SDL_DestroyTexture(thing->data.logdev.visualizer); + } + SDL_DestroyMutex(thing->data.logdev.postmix_lock); + SDL_free(thing->data.logdev.postmix_buffer); + break; + + case THING_PHYSDEV: + case THING_PHYSDEV_CAPTURE: + SDL_free(thing->data.physdev.name); + break; + + case THING_WAV: + SDL_free(thing->data.wav.buf); + break; + + case THING_STREAM: + SDL_DestroyAudioStream(thing->data.stream.stream); + break; + } + + if (thing->prev) { + thing->prev->next = thing->next; + } else { + SDL_assert(thing == things); + things = thing->next; + } + + if (thing->next) { + thing->next->prev = thing->prev; + } + + SDL_free(thing->titlebar); + SDL_free(thing); +} + +static void DrawOneThing(SDL_Renderer *renderer, Thing *thing) +{ + SDL_FRect dst; + SDL_memcpy(&dst, &thing->rect, sizeof (SDL_FRect)); + if (thing->scale != 1.0f) { + const float centerx = thing->rect.x + (thing->rect.w / 2); + const float centery = thing->rect.y + (thing->rect.h / 2); + const int w = thing->texture ? thing->texture->w : 128; + const int h = thing->texture ? thing->texture->h : 128; + dst.w = w * thing->scale; + dst.h = h * thing->scale; + dst.x = centerx - (dst.w / 2); + dst.y = centery - (dst.h / 2); + } + + if (thing->texture) { + if (droppable_highlighted_thing == thing) { + SDL_SetRenderDrawColor(renderer, 255, 0, 255, 100); + SDL_RenderFillRect(renderer, &dst); + } + SDL_SetRenderDrawColor(renderer, thing->r, thing->g, thing->b, thing->a); + SDL_RenderTexture(renderer, thing->texture->texture, NULL, &dst); + } else { + SDL_SetRenderDrawColor(renderer, thing->r, thing->g, thing->b, thing->a); + SDL_RenderFillRect(renderer, &dst); + } + + if (thing->ondraw) { + thing->ondraw(thing, renderer); + } + + if (thing->progress > 0.0f) { + SDL_FRect r = { thing->rect.x, thing->rect.y + (thing->rect.h + 2.0f), 0.0f, 10.0f }; + r.w = thing->rect.w * ((thing->progress > 1.0f) ? 1.0f : thing->progress); + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 128); + SDL_RenderFillRect(renderer, &r); + } +} + +static void DrawThings(SDL_Renderer *renderer) +{ + Thing *i; + + /* draw connecting lines first, so they're behind everything else. */ + for (i = things; i && (i->z >= 0.0f); i = i->next) { + Thing *dst = i->line_connected_to; + if (dst) { + SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); + SDL_RenderLine(renderer, i->rect.x + (i->rect.w / 2), i->rect.y + (i->rect.h / 2), dst->rect.x + (dst->rect.w / 2), dst->rect.y + (dst->rect.h / 2)); + } + } + + /* Draw the actual things. */ + for (i = things; i && (i->z >= 0.0f); i = i->next) { + if (i != dragging_thing) { + DrawOneThing(renderer, i); + } + } + + if (dragging_thing) { + DrawOneThing(renderer, dragging_thing); /* draw last so it's always on top. */ + } +} + +static void Draw(void) +{ + SDL_Renderer *renderer = state->renderers[0]; + if (renderer) { /* might be NULL if we're shutting down. */ + SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND); + SDL_SetRenderDrawColor(renderer, 64, 0, 64, 255); + SDL_RenderClear(renderer); + DrawThings(renderer); + SDL_RenderPresent(renderer); + } +} + +static void RepositionRowOfThings(const ThingType what, const float y) +{ + int total_things = 0; + float texw = 0.0f; + float texh = 0.0f; + Thing *i; + + for (i = things; i != NULL; i = i->next) { + if (i->what == what) { + texw = i->rect.w; + texh = i->rect.h; + total_things++; + } + } + + if (total_things > 0) { + int w, h; + SDL_GetWindowSize(state->windows[0], &w, &h); + const float spacing = w / ((float) total_things); + float x = (spacing - texw) / 2.0f; + for (i = things; i != NULL; i = i->next) { + if (i->what == what) { + i->rect.x = x; + i->rect.y = (y >= 0.0f) ? y : ((h + y) - texh); + x += spacing; + } + } + } +} + +static const char *AudioFmtToString(const SDL_AudioFormat fmt) +{ + switch (fmt) { + #define FMTCASE(x) case SDL_AUDIO_##x: return #x + FMTCASE(U8); + FMTCASE(S8); + FMTCASE(S16LE); + FMTCASE(S16BE); + FMTCASE(S32LE); + FMTCASE(S32BE); + FMTCASE(F32LE); + FMTCASE(F32BE); + #undef FMTCASE + } + return "?"; +} + +static const char *AudioChansToStr(const int channels) +{ + switch (channels) { + case 1: return "mono"; + case 2: return "stereo"; + case 3: return "2.1"; + case 4: return "quad"; + case 5: return "4.1"; + case 6: return "5.1"; + case 7: return "6.1"; + case 8: return "7.1"; + default: break; + } + return "?"; +} + +static void PoofThing_ondrag(Thing *thing, int button, float x, float y) +{ + dragging_thing = NULL; /* refuse to be dragged. */ +} + +static void PoofThing_ontick(Thing *thing, Uint64 now) +{ + const int lifetime = POOF_LIFETIME; + const int elasped = (int) (now - thing->createticks); + if (elasped > lifetime) { + DestroyThing(thing); + } else { + const float pct = ((float) elasped) / ((float) lifetime); + thing->a = (Uint8) (int) (255.0f - (pct * 255.0f)); + thing->scale = 1.0f - pct; /* shrink to nothing! */ + } +} + +static Thing *CreatePoofThing(Thing *poofing_thing) +{ + const float centerx = poofing_thing->rect.x + (poofing_thing->rect.w / 2); + const float centery = poofing_thing->rect.y + (poofing_thing->rect.h / 2); + const float z = poofing_thing->z; + Thing *thing = CreateThing(THING_POOF, poofing_thing->rect.x, poofing_thing->rect.y, z, poofing_thing->rect.w, poofing_thing->rect.h, poofing_thing->texture, NULL); + thing->data.poof.startw = poofing_thing->rect.w; + thing->data.poof.starth = poofing_thing->rect.h; + thing->data.poof.centerx = centerx; + thing->data.poof.centery = centery; + thing->ontick = PoofThing_ontick; + thing->ondrag = PoofThing_ondrag; + return thing; +} + +static void DestroyThingInPoof(Thing *thing) +{ + if (thing) { + if (thing->what != THING_POOF) { + CreatePoofThing(thing); + } + DestroyThing(thing); + } +} + +/* this poofs a thing and additionally poofs all things connected to the thing. */ +static void TrashThing(Thing *thing) +{ + Thing *i, *next; + for (i = things; i != NULL; i = next) { + next = i->next; + if (i->line_connected_to == thing) { + TrashThing(i); + next = things; /* start over in case this blew up the list. */ + } + } + DestroyThingInPoof(thing); +} + +static void StreamThing_ontick(Thing *thing, Uint64 now) +{ + if (!thing->line_connected_to) { + return; + } + + /* are we playing? See if we're done, or update state. */ + if (thing->line_connected_to->what == THING_LOGDEV) { + const int available = SDL_GetAudioStreamAvailable(thing->data.stream.stream); + if (!available) { + DestroyThingInPoof(thing); + return; + } else { + thing->progress = 1.0f - (thing->data.stream.total_bytes ? (((float) (available)) / ((float) thing->data.stream.total_bytes)) : 0.0f); + } + } + + if (thing->data.stream.next_level_update <= now) { + Uint64 perf = SDL_GetPerformanceCounter(); + int i; + for (i = 0; i < SDL_arraysize(thing->data.stream.levels); i++) { + thing->data.stream.levels[i] = (Uint8) (perf % 6); + perf >>= 3; + } + thing->data.stream.next_level_update += 150; + } +} + +static void StreamThing_ondrag(Thing *thing, int button, float x, float y) +{ + if (button == SDL_BUTTON_RIGHT) { /* this is kinda hacky, but use this to disconnect from a playing source. */ + if (thing->line_connected_to) { + SDL_UnbindAudioStream(thing->data.stream.stream); /* unbind from current device */ + if (thing->line_connected_to->what == THING_LOGDEV_CAPTURE) { + SDL_FlushAudioStream(thing->data.stream.stream); + } + thing->line_connected_to = NULL; + } + } +} + +static void StreamThing_ondrop(Thing *thing, int button, float x, float y) +{ + if (droppable_highlighted_thing) { + if (droppable_highlighted_thing->what == THING_TRASHCAN) { + TrashThing(thing); + } else if (((droppable_highlighted_thing->what == THING_LOGDEV) || (droppable_highlighted_thing->what == THING_LOGDEV_CAPTURE)) && (droppable_highlighted_thing != thing->line_connected_to)) { + /* connect to a logical device! */ + SDL_Log("Binding audio stream ('%s') to logical device %u", thing->titlebar, (unsigned int) droppable_highlighted_thing->data.logdev.devid); + if (thing->line_connected_to) { + SDL_UnbindAudioStream(thing->data.stream.stream); /* unbind from current device */ + if (thing->line_connected_to->what == THING_LOGDEV_CAPTURE) { + SDL_FlushAudioStream(thing->data.stream.stream); + } + } + + SDL_BindAudioStream(droppable_highlighted_thing->data.logdev.devid, thing->data.stream.stream); /* bind to new device! */ + thing->data.stream.total_bytes = SDL_GetAudioStreamAvailable(thing->data.stream.stream); + thing->progress = 0.0f; /* ontick will adjust this if we're on an output device.*/ + thing->data.stream.next_level_update = SDL_GetTicks() + 100; + thing->line_connected_to = droppable_highlighted_thing; + } + } +} + +static void StreamThing_ondraw(Thing *thing, SDL_Renderer *renderer) +{ + if (thing->line_connected_to) { /* are we playing? Update progress bar, and bounce the levels a little. */ + static const float xlocs[5] = { 18, 39, 59, 79, 99 }; + static const float ylocs[5] = { 49, 39, 29, 19, 10 }; + const float blockw = soundboard_levels_texture->w; + const float blockh = soundboard_levels_texture->h / 5.0f; + int i, j; + SDL_SetRenderDrawColor(renderer, thing->r, thing->g, thing->b, thing->a); + for (i = 0; i < SDL_arraysize(thing->data.stream.levels); i++) { + const int level = (int) thing->data.stream.levels[i]; + const float x = xlocs[i]; + for (j = 0; j < level; j++) { + const SDL_FRect src = { 0, soundboard_levels_texture->h - ((j+1) * blockh), blockw, blockh }; + const SDL_FRect dst = { thing->rect.x + x, thing->rect.y + ylocs[j], blockw, blockh }; + SDL_RenderTexture(renderer, soundboard_levels_texture->texture, &src, &dst); + } + } + } +} + +static Thing *CreateStreamThing(const SDL_AudioSpec *spec, const Uint8 *buf, const Uint32 buflen, const char *fname, const float x, const float y) +{ + static const ThingType can_be_dropped_onto[] = { THING_TRASHCAN, THING_LOGDEV, THING_LOGDEV_CAPTURE, THING_NULL }; + Thing *thing = CreateThing(THING_STREAM, x, y, 0, -1, -1, soundboard_texture, fname); + SDL_Log("Adding audio stream for %s", fname ? fname : "(null)"); + thing->data.stream.stream = SDL_CreateAudioStream(spec, spec); + if (buf && buflen) { + SDL_PutAudioStreamData(thing->data.stream.stream, buf, (int) buflen); + SDL_FlushAudioStream(thing->data.stream.stream); + thing->data.stream.total_bytes = SDL_GetAudioStreamAvailable(thing->data.stream.stream); + } + thing->ontick = StreamThing_ontick; + thing->ondrag = StreamThing_ondrag; + thing->ondrop = StreamThing_ondrop; + thing->ondraw = StreamThing_ondraw; + thing->can_be_dropped_onto = can_be_dropped_onto; + return thing; +} + +static void WavThing_ondrag(Thing *thing, int button, float x, float y) +{ + if (button == SDL_BUTTON_RIGHT) { /* drag out a new audio stream. */ + dragging_thing = CreateStreamThing(&thing->data.wav.spec, thing->data.wav.buf, thing->data.wav.buflen, thing->titlebar, x - (thing->rect.w / 2), y - (thing->rect.h / 2)); + } +} + +static void WavThing_ondrop(Thing *thing, int button, float x, float y) +{ + if (droppable_highlighted_thing) { + if (droppable_highlighted_thing->what == THING_TRASHCAN) { + TrashThing(thing); + } + } +} + +static Thing *LoadWavThing(const char *fname, float x, float y) +{ + Thing *thing = NULL; + char *path; + SDL_AudioSpec spec; + Uint8 *buf = NULL; + Uint32 buflen = 0; + + path = GetNearbyFilename(fname); + if (path) { + fname = path; + } + + if (SDL_LoadWAV(fname, &spec, &buf, &buflen) == 0) { + static const ThingType can_be_dropped_onto[] = { THING_TRASHCAN, THING_NULL }; + char *titlebar = NULL; + const char *nodirs = SDL_strrchr(fname, '/'); + #ifdef __WINDOWS__ + const char *nodirs2 = SDL_strrchr(nodirs ? nodirs : fname, '\\'); + if (nodirs2) { + nodirs = nodirs2; + } + #endif + + SDL_Log("Adding WAV file '%s'", fname); + + if (nodirs) { + nodirs++; + } else { + nodirs = fname; + } + + SDL_asprintf(&titlebar, "WAV file (\"%s\", %s, %s, %uHz)", nodirs, AudioFmtToString(spec.format), AudioChansToStr(spec.channels), (unsigned int) spec.freq); + thing = CreateThing(THING_WAV, x - (audio_texture->w / 2), y - (audio_texture->h / 2), 5, -1, -1, audio_texture, titlebar); + SDL_free(titlebar); + SDL_memcpy(&thing->data.wav.spec, &spec, sizeof (SDL_AudioSpec)); + thing->data.wav.buf = buf; + thing->data.wav.buflen = buflen; + thing->can_be_dropped_onto = can_be_dropped_onto; + thing->ondrag = WavThing_ondrag; + thing->ondrop = WavThing_ondrop; + } + + SDL_free(path); + + return thing; +} + +static Thing *LoadStockWavThing(const char *fname) +{ + char *path = GetNearbyFilename(fname); + Thing *thing = LoadWavThing(path ? path : fname, 0.0f, 0.0f); /* will reposition in a moment. */ + SDL_free(path); + return thing; +} + +static void LoadStockWavThings(void) +{ + LoadStockWavThing("sample.wav"); + RepositionRowOfThings(THING_WAV, -10.0f); +} + +static void DestroyTexture(Texture *tex) +{ + if (tex) { + if (state->renderers[0] != NULL) { /* if the renderer went away, this pointer is already bogus. */ + SDL_DestroyTexture(tex->texture); + } + SDL_free(tex); + } +} + +static Texture *CreateTexture(const char *fname) +{ + Texture *tex = (Texture *) xalloc(sizeof (Texture)); + int texw, texh; + tex->texture = LoadTexture(state->renderers[0], fname, SDL_TRUE, &texw, &texh); + if (!tex->texture) { + SDL_Log("Failed to load '%s': %s", fname, SDL_GetError()); + SDL_free(tex); + Quit(1); + } + SDL_SetTextureBlendMode(tex->texture, SDL_BLENDMODE_BLEND); + tex->w = (float) texw; + tex->h = (float) texh; + return tex; +} + +static Thing *CreateLogicalDeviceThing(Thing *parent, const SDL_AudioDeviceID which, const float x, const float y); + +static void DeviceThing_ondrag(Thing *thing, int button, float x, float y) +{ + if ((button == SDL_BUTTON_MIDDLE) && (thing->what == THING_LOGDEV_CAPTURE)) { /* drag out a new stream. This is a UX mess. :/ */ + dragging_thing = CreateStreamThing(&thing->data.logdev.spec, NULL, 0, NULL, x, y); + dragging_thing->data.stream.next_level_update = SDL_GetTicks() + 100; + SDL_BindAudioStream(thing->data.logdev.devid, dragging_thing->data.stream.stream); /* bind to new device! */ + dragging_thing->line_connected_to = thing; + } else if (button == SDL_BUTTON_RIGHT) { /* drag out a new logical device. */ + const SDL_AudioDeviceID which = ((thing->what == THING_LOGDEV) || (thing->what == THING_LOGDEV_CAPTURE)) ? thing->data.logdev.devid : thing->data.physdev.devid; + const SDL_AudioDeviceID devid = SDL_OpenAudioDevice(which, NULL); + dragging_thing = devid ? CreateLogicalDeviceThing(thing, devid, x - (thing->rect.w / 2), y - (thing->rect.h / 2)) : NULL; + } +} + +static void SetLogicalDeviceTitlebar(Thing *thing) +{ + SDL_AudioSpec *spec = &thing->data.logdev.spec; + int frames = 0; + SDL_GetAudioDeviceFormat(thing->data.logdev.devid, spec, &frames); + SDL_free(thing->titlebar); + SDL_asprintf(&thing->titlebar, "Logical device #%u (%s, %s, %s, %uHz, %d frames)", (unsigned int) thing->data.logdev.devid, thing->data.logdev.iscapture ? "CAPTURE" : "OUTPUT", AudioFmtToString(spec->format), AudioChansToStr(spec->channels), (unsigned int) spec->freq, frames); +} + +static void LogicalDeviceThing_ondrop(Thing *thing, int button, float x, float y) +{ + if (droppable_highlighted_thing) { + if (droppable_highlighted_thing->what == THING_TRASHCAN) { + TrashThing(thing); + } + } +} + +static void SDLCALL PostmixCallback(void *userdata, const SDL_AudioSpec *spec, float *buffer, int buflen) +{ + Thing *thing = (Thing *) userdata; + + SDL_LockMutex(thing->data.logdev.postmix_lock); + + if (thing->data.logdev.postmix_allocated < buflen) { + void *ptr = SDL_realloc(thing->data.logdev.postmix_buffer, buflen); + if (!ptr) { + SDL_UnlockMutex(thing->data.logdev.postmix_lock); + return; /* oh well. */ + } + thing->data.logdev.postmix_buffer = (float *) ptr; + thing->data.logdev.postmix_allocated = buflen; + } + + SDL_copyp(&thing->data.logdev.postmix_spec, spec); + SDL_memcpy(thing->data.logdev.postmix_buffer, buffer, buflen); + thing->data.logdev.postmix_buflen = buflen; + SDL_AtomicSet(&thing->data.logdev.postmix_updated, 1); + + SDL_UnlockMutex(thing->data.logdev.postmix_lock); +} + +static void UpdateVisualizer(SDL_Renderer *renderer, SDL_Texture *visualizer, const int channels, const float *buffer, const int buflen) +{ + static const SDL_Color channel_colors[8] = { + { 255, 255, 255, 255 }, + { 255, 0, 0, 255 }, + { 0, 255, 0, 255 }, + { 0, 0, 255, 255 }, + { 255, 255, 0, 255 }, + { 0, 255, 255, 255 }, + { 255, 0, 255, 255 }, + { 127, 127, 127, 255 } + }; + + SDL_SetRenderTarget(renderer, visualizer); + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); + SDL_RenderClear(renderer); + + if (buffer && buflen) { + const int frames = (buflen / sizeof (float)) / channels; + const int skip = frames / (VISUALIZER_WIDTH * 2); + int i, j; + + for (i = channels - 1; i >= 0; i--) { + const SDL_Color *color = &channel_colors[i % SDL_arraysize(channel_colors)]; + SDL_FPoint points[VISUALIZER_WIDTH + 2]; + float prevx = 0.0f; + int pointidx = 1; + + points[0].x = 0.0f; + points[0].y = VISUALIZER_HEIGHT * 0.5f; + + for (j = 0; j < (SDL_arraysize(points)-1); j++) { + const float val = buffer[((j * skip) * channels) + i]; + const float x = prevx + 2; + const float y = (VISUALIZER_HEIGHT * 0.5f) - (VISUALIZER_HEIGHT * (val * 0.5f)); + SDL_assert(pointidx < SDL_arraysize(points)); + points[pointidx].x = x; + points[pointidx].y = y; + pointidx++; + prevx = x; + } + + SDL_SetRenderDrawColor(renderer, color->r, color->g, color->b, 255); + SDL_RenderLines(renderer, points, pointidx); + } + } + + SDL_SetRenderTarget(renderer, NULL); +} + +static void LogicalDeviceThing_ontick(Thing *thing, Uint64 now) +{ + const SDL_bool ismousedover = (thing == mouseover_thing) ? SDL_TRUE : SDL_FALSE; + + if (!thing->data.logdev.visualizer || !thing->data.logdev.postmix_lock) { /* need these to work, skip if they failed. */ + return; + } + + if (thing->data.logdev.visualizer_enabled != ismousedover) { + thing->data.logdev.visualizer_enabled = ismousedover; + if (!ismousedover) { + SDL_SetAudioPostmixCallback(thing->data.logdev.devid, NULL, NULL); + } else { + if (thing->data.logdev.postmix_buffer) { + SDL_memset(thing->data.logdev.postmix_buffer, '\0', thing->data.logdev.postmix_buflen); + } + SDL_AtomicSet(&thing->data.logdev.postmix_updated, 1); /* so this will at least clear the texture later. */ + SDL_SetAudioPostmixCallback(thing->data.logdev.devid, PostmixCallback, thing); + } + } +} + +static void LogicalDeviceThing_ondraw(Thing *thing, SDL_Renderer *renderer) +{ + if (thing->data.logdev.visualizer_enabled) { + SDL_FRect dst; + dst.w = thing->rect.w; + dst.h = thing->rect.h; + dst.x = thing->rect.x + ((thing->rect.w - dst.w) / 2); + dst.y = thing->rect.y + ((thing->rect.h - dst.h) / 2); + + if (SDL_AtomicGet(&thing->data.logdev.postmix_updated)) { + float *buffer; + int channels; + int buflen; + + SDL_LockMutex(thing->data.logdev.postmix_lock); + channels = thing->data.logdev.postmix_spec.channels; + buflen = thing->data.logdev.postmix_buflen; + buffer = (float *) SDL_malloc(thing->data.logdev.postmix_buflen); + if (buffer) { + SDL_memcpy(buffer, thing->data.logdev.postmix_buffer, thing->data.logdev.postmix_buflen); + SDL_AtomicSet(&thing->data.logdev.postmix_updated, 0); + } + SDL_UnlockMutex(thing->data.logdev.postmix_lock); + + UpdateVisualizer(renderer, thing->data.logdev.visualizer, channels, buffer, buflen); + SDL_free(buffer); + } + + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 30); + SDL_RenderTexture(renderer, thing->data.logdev.visualizer, NULL, &dst); + } +} + +static Thing *CreateLogicalDeviceThing(Thing *parent, const SDL_AudioDeviceID which, const float x, const float y) +{ + static const ThingType can_be_dropped_onto[] = { THING_TRASHCAN, THING_NULL }; + Thing *physthing = ((parent->what == THING_LOGDEV) || (parent->what == THING_LOGDEV_CAPTURE)) ? parent->data.logdev.physdev : parent; + const SDL_bool iscapture = physthing->data.physdev.iscapture; + Thing *thing; + + SDL_Log("Adding logical audio device %u", (unsigned int) which); + thing = CreateThing(iscapture ? THING_LOGDEV_CAPTURE : THING_LOGDEV, x, y, 5, -1, -1, logdev_texture, NULL); + thing->data.logdev.devid = which; + thing->data.logdev.iscapture = iscapture; + thing->data.logdev.physdev = physthing; + thing->data.logdev.visualizer = SDL_CreateTexture(state->renderers[0], SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, VISUALIZER_WIDTH, VISUALIZER_HEIGHT); + thing->data.logdev.postmix_lock = SDL_CreateMutex(); + if (thing->data.logdev.visualizer) { + SDL_SetTextureBlendMode(thing->data.logdev.visualizer, SDL_BLENDMODE_BLEND); + } + thing->line_connected_to = physthing; + thing->ontick = LogicalDeviceThing_ontick; + thing->ondrag = DeviceThing_ondrag; + thing->ondrop = LogicalDeviceThing_ondrop; + thing->ondraw = LogicalDeviceThing_ondraw; + thing->can_be_dropped_onto = can_be_dropped_onto; + + SetLogicalDeviceTitlebar(thing); + return thing; +} + +static void SetPhysicalDeviceTitlebar(Thing *thing) +{ + int frames = 0; + SDL_AudioSpec *spec = &thing->data.physdev.spec; + SDL_GetAudioDeviceFormat(thing->data.physdev.devid, spec, &frames); + SDL_free(thing->titlebar); + if (thing->data.physdev.devid == SDL_AUDIO_DEVICE_DEFAULT_CAPTURE) { + SDL_asprintf(&thing->titlebar, "Default system device (CAPTURE, %s, %s, %uHz, %d frames)", AudioFmtToString(spec->format), AudioChansToStr(spec->channels), (unsigned int) spec->freq, frames); + } else if (thing->data.physdev.devid == SDL_AUDIO_DEVICE_DEFAULT_OUTPUT) { + SDL_asprintf(&thing->titlebar, "Default system device (OUTPUT, %s, %s, %uHz, %d frames)", AudioFmtToString(spec->format), AudioChansToStr(spec->channels), (unsigned int) spec->freq, frames); + } else { + SDL_asprintf(&thing->titlebar, "Physical device #%u (%s, \"%s\", %s, %s, %uHz, %d frames)", (unsigned int) thing->data.physdev.devid, thing->data.physdev.iscapture ? "CAPTURE" : "OUTPUT", thing->data.physdev.name, AudioFmtToString(spec->format), AudioChansToStr(spec->channels), (unsigned int) spec->freq, frames); + } +} + +static void PhysicalDeviceThing_ondrop(Thing *thing, int button, float x, float y) +{ + if (droppable_highlighted_thing) { + if (droppable_highlighted_thing->what == THING_TRASHCAN) { + TrashThing(thing); + } + } +} + +static void PhysicalDeviceThing_ontick(Thing *thing, Uint64 now) +{ + const int lifetime = POOF_LIFETIME; + const int elasped = (int) (now - thing->createticks); + if (elasped > lifetime) { + thing->scale = 1.0f; + thing->a = 255; + thing->ontick = NULL; /* no more ticking. */ + } else { + const float pct = ((float) elasped) / ((float) lifetime); + thing->a = (Uint8) (int) (pct * 255.0f); + thing->scale = pct; /* grow to normal size */ + } +} + + +static Thing *CreatePhysicalDeviceThing(const SDL_AudioDeviceID which, const SDL_bool iscapture) +{ + static const ThingType can_be_dropped_onto[] = { THING_TRASHCAN, THING_NULL }; + static float next_physdev_x = 0; + Thing *thing; + int winw, winh; + + SDL_GetWindowSize(state->windows[0], &winw, &winh); + if (next_physdev_x > (winw-physdev_texture->w)) { + next_physdev_x = 0; + } + + SDL_Log("Adding physical audio device %u", (unsigned int) which); + thing = CreateThing(iscapture ? THING_PHYSDEV_CAPTURE : THING_PHYSDEV, next_physdev_x, 170, 5, -1, -1, physdev_texture, NULL); + thing->data.physdev.devid = which; + thing->data.physdev.iscapture = iscapture; + thing->data.physdev.name = SDL_GetAudioDeviceName(which); + thing->ondrag = DeviceThing_ondrag; + thing->ondrop = PhysicalDeviceThing_ondrop; + thing->ontick = PhysicalDeviceThing_ontick; + thing->can_be_dropped_onto = can_be_dropped_onto; + + SetPhysicalDeviceTitlebar(thing); + if (SDL_GetTicks() <= (app_ready_ticks + 2000)) { /* assume this is the initial batch if it happens in the first two seconds. */ + RepositionRowOfThings(THING_PHYSDEV, 10.0f); /* don't rearrange them after the initial add. */ + RepositionRowOfThings(THING_PHYSDEV_CAPTURE, 170.0f); /* don't rearrange them after the initial add. */ + next_physdev_x = 0.0f; + } else { + next_physdev_x += physdev_texture->w * 1.5f; + } + + return thing; +} + +static Thing *CreateTrashcanThing(void) +{ + int winw, winh; + SDL_GetWindowSize(state->windows[0], &winw, &winh); + return CreateThing(THING_TRASHCAN, winw - trashcan_texture->w, winh - trashcan_texture->h, 10, -1, -1, trashcan_texture, "Drag things here to remove them."); +} + +static Thing *CreateDefaultPhysicalDevice(const SDL_bool iscapture) +{ + return CreatePhysicalDeviceThing(iscapture ? SDL_AUDIO_DEVICE_DEFAULT_CAPTURE : SDL_AUDIO_DEVICE_DEFAULT_OUTPUT, iscapture); +} + +static void TickThings(void) +{ + Thing *i; + Thing *next; + const Uint64 now = SDL_GetTicks(); + for (i = things; i != NULL; i = next) { + next = i->next; /* in case this deletes itself. */ + if (i->ontick) { + i->ontick(i, now); + } + } +} + +static void WindowResized(const int newwinw, const int newwinh) +{ + Thing *i; + const float neww = (float) newwinw; + const float newh = (float) newwinh; + const float oldw = (float) state->window_w; + const float oldh = (float) state->window_h; + for (i = things; i != NULL; i = i->next) { + const float halfw = i->rect.w / 2.0f; + const float halfh = i->rect.h / 2.0f; + const float x = (i->rect.x + halfw) / oldw; + const float y = (i->rect.y + halfh) / oldh; + i->rect.x = (x * neww) - halfw; + i->rect.y = (y * newh) - halfh; + } + state->window_w = newwinw; + state->window_h = newwinh; +} + + +static void Loop(void) +{ + SDL_Event event; + SDL_bool saw_event = SDL_FALSE; + + if (app_ready_ticks == 0) { + app_ready_ticks = SDL_GetTicks(); + } + + while (SDL_PollEvent(&event)) { + Thing *thing = NULL; + + saw_event = SDL_TRUE; + + switch (event.type) { + case SDL_EVENT_MOUSE_MOTION: + thing = UpdateMouseOver(event.motion.x, event.motion.y); + if ((dragging_button == -1) && event.motion.state) { + if (event.motion.state & SDL_BUTTON_LMASK) { + /* for people that don't have all three buttons... */ + if (ctrl_held) { + dragging_button = SDL_BUTTON_RIGHT; + } else if (alt_held) { + dragging_button = SDL_BUTTON_MIDDLE; + } else { + dragging_button = SDL_BUTTON_LEFT; + } + dragging_button_real = SDL_BUTTON_LEFT; + } else if (event.motion.state & SDL_BUTTON_RMASK) { + dragging_button = SDL_BUTTON_RIGHT; + dragging_button_real = SDL_BUTTON_RIGHT; + } else if (event.motion.state & SDL_BUTTON_MMASK) { + dragging_button = SDL_BUTTON_MIDDLE; + dragging_button_real = SDL_BUTTON_MIDDLE; + } + + + if (dragging_button != -1) { + dragging_thing = thing; + if (thing && thing->ondrag) { + thing->ondrag(thing, dragging_button, event.motion.x, event.motion.y); + } + } + } + + droppable_highlighted_thing = NULL; + if (dragging_thing) { + dragging_thing->rect.x = event.motion.x - (dragging_thing->rect.w / 2); + dragging_thing->rect.y = event.motion.y - (dragging_thing->rect.h / 2); + if (dragging_thing->can_be_dropped_onto) { + thing = FindThingAtPoint(event.motion.x, event.motion.y); + if (thing) { + int i; + for (i = 0; dragging_thing->can_be_dropped_onto[i]; i++) { + if (dragging_thing->can_be_dropped_onto[i] == thing->what) { + droppable_highlighted_thing = thing; + break; + } + } + } + } + } + break; + + case SDL_EVENT_MOUSE_BUTTON_DOWN: + thing = UpdateMouseOver(event.button.x, event.button.y); + break; + + case SDL_EVENT_MOUSE_BUTTON_UP: + if (dragging_button_real == event.button.button) { + Thing *dropped_thing = dragging_thing; + dragging_thing = NULL; + dragging_button = -1; + dragging_button_real = -1; + if (dropped_thing && dropped_thing->ondrop) { + dropped_thing->ondrop(dropped_thing, event.button.button, event.button.x, event.button.y); + } + droppable_highlighted_thing = NULL; + } + thing = UpdateMouseOver(event.button.x, event.button.y); + break; + + case SDL_EVENT_MOUSE_WHEEL: + UpdateMouseOver(event.wheel.mouseX, event.wheel.mouseY); + break; + + case SDL_EVENT_KEY_DOWN: + case SDL_EVENT_KEY_UP: + ctrl_held = ((event.key.keysym.mod & SDL_KMOD_CTRL) != 0) ? SDL_TRUE : SDL_FALSE; + alt_held = ((event.key.keysym.mod & SDL_KMOD_ALT) != 0) ? SDL_TRUE : SDL_FALSE; + break; + + case SDL_EVENT_DROP_FILE: + SDL_Log("Drop file! '%s'", event.drop.file); + LoadWavThing(event.drop.file, event.drop.x, event.drop.y); + /* SDLTest_CommonEvent will free the string, below. */ + break; + + case SDL_EVENT_WINDOW_RESIZED: + WindowResized(event.window.data1, event.window.data2); + break; + + case SDL_EVENT_AUDIO_DEVICE_ADDED: + CreatePhysicalDeviceThing(event.adevice.which, event.adevice.iscapture); + break; + + case SDL_EVENT_AUDIO_DEVICE_REMOVED: { + const SDL_AudioDeviceID which = event.adevice.which; + Thing *i, *next; + SDL_Log("Removing audio device %u", (unsigned int) which); + for (i = things; i != NULL; i = next) { + next = i->next; + if (((i->what == THING_PHYSDEV) || (i->what == THING_PHYSDEV_CAPTURE)) && (i->data.physdev.devid == which)) { + TrashThing(i); + next = things; /* in case we mangled the list. */ + } else if (((i->what == THING_LOGDEV) || (i->what == THING_LOGDEV_CAPTURE)) && (i->data.logdev.devid == which)) { + TrashThing(i); + next = things; /* in case we mangled the list. */ + } + } + break; + } + + default: break; + } + + SDLTest_CommonEvent(state, &event, &done); + } + + TickThings(); + Draw(); + + if (!saw_event) { + SDL_Delay(10); + } + + #ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } + #endif +} + +int main(int argc, char *argv[]) +{ + int i; + + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO | SDL_INIT_AUDIO); + if (state == NULL) { + Quit(1); + } + + state->window_flags |= SDL_WINDOW_RESIZABLE; + + for (i = 1; i < argc;) { + int consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + /* add our own command lines here. */ + } + if (consumed < 0) { + static const char *options[] = { + /* add our own command lines here. */ + /*"[--blend none|blend|add|mod|mul|sub]",*/ + NULL + }; + SDLTest_CommonLogUsage(state, argv[0], options); + Quit(1); + } + i += consumed; + } + + if (!SDLTest_CommonInit(state)) { + Quit(2); + } + + if (state->audio_id) { + SDL_CloseAudioDevice(state->audio_id); + state->audio_id = 0; + } + + SetDefaultTitleBar(); + + physdev_texture = CreateTexture("physaudiodev.bmp"); + logdev_texture = CreateTexture("logaudiodev.bmp"); + audio_texture = CreateTexture("audiofile.bmp"); + trashcan_texture = CreateTexture("trashcan.bmp"); + soundboard_texture = CreateTexture("soundboard.bmp"); + soundboard_levels_texture = CreateTexture("soundboard_levels.bmp"); + + LoadStockWavThings(); + CreateTrashcanThing(); + CreateDefaultPhysicalDevice(SDL_FALSE); + CreateDefaultPhysicalDevice(SDL_TRUE); + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(Loop, 0, 1); +#else + while (!done) { + Loop(); + } +#endif + + Quit(0); + return 0; +} + diff --git a/vendor/sdl-3.0.0/test/testaudiocapture.c b/vendor/sdl-3.0.0/test/testaudiocapture.c new file mode 100644 index 0000000..efc4be1 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testaudiocapture.c @@ -0,0 +1,236 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +#include + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +static SDL_Window *window = NULL; +static SDL_Renderer *renderer = NULL; +static SDL_AudioStream *stream_in = NULL; +static SDL_AudioStream *stream_out = NULL; +static int done = 0; + +static void loop(void) +{ + const SDL_AudioDeviceID devid_in = SDL_GetAudioStreamDevice(stream_in); + const SDL_AudioDeviceID devid_out = SDL_GetAudioStreamDevice(stream_out); + SDL_bool please_quit = SDL_FALSE; + SDL_Event e; + + while (SDL_PollEvent(&e)) { + if (e.type == SDL_EVENT_QUIT) { + please_quit = SDL_TRUE; + } else if (e.type == SDL_EVENT_KEY_DOWN) { + if (e.key.keysym.sym == SDLK_ESCAPE) { + please_quit = SDL_TRUE; + } + } else if (e.type == SDL_EVENT_MOUSE_BUTTON_DOWN) { + if (e.button.button == 1) { + SDL_PauseAudioDevice(devid_out); + SDL_ResumeAudioDevice(devid_in); + } + } else if (e.type == SDL_EVENT_MOUSE_BUTTON_UP) { + if (e.button.button == 1) { + SDL_PauseAudioDevice(devid_in); + SDL_FlushAudioStream(stream_in); /* so no samples are held back for resampling purposes. */ + SDL_ResumeAudioDevice(devid_out); + } + } + } + + if (!SDL_AudioDevicePaused(devid_in)) { + SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255); + } else { + SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); + } + SDL_RenderClear(renderer); + SDL_RenderPresent(renderer); + + /* Feed any new data we captured to the output stream. It'll play when we unpause the device. */ + while (!please_quit && (SDL_GetAudioStreamAvailable(stream_in) > 0)) { + Uint8 buf[1024]; + const int br = SDL_GetAudioStreamData(stream_in, buf, sizeof(buf)); + if (br < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to read from input audio stream: %s\n", SDL_GetError()); + please_quit = 1; + } else if (SDL_PutAudioStreamData(stream_out, buf, br) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to write to output audio stream: %s\n", SDL_GetError()); + please_quit = 1; + } + } + + if (please_quit) { + /* stop playing back, quit. */ + SDL_Log("Shutting down.\n"); + SDL_CloseAudioDevice(devid_in); + SDL_CloseAudioDevice(devid_out); + SDL_DestroyAudioStream(stream_in); + SDL_DestroyAudioStream(stream_out); + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + SDL_Quit(); +#ifdef __EMSCRIPTEN__ + emscripten_cancel_main_loop(); +#endif + /* Let 'main()' return normally */ + done = 1; + return; + } +} + +int main(int argc, char **argv) +{ + SDL_AudioDeviceID *devices; + SDLTest_CommonState *state; + SDL_AudioSpec outspec; + SDL_AudioSpec inspec; + SDL_AudioDeviceID device; + SDL_AudioDeviceID want_device = SDL_AUDIO_DEVICE_DEFAULT_CAPTURE; + const char *devname = NULL; + int i; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (!devname) { + devname = argv[i]; + consumed = 1; + } + } + if (consumed <= 0) { + static const char *options[] = { "[device_name]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + exit(1); + } + + i += consumed; + } + + /* Load the SDL library */ + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + if (SDL_CreateWindowAndRenderer(320, 240, 0, &window, &renderer) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create SDL window and renderer: %s\n", SDL_GetError()); + return 1; + } + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + SDL_RenderClear(renderer); + SDL_RenderPresent(renderer); + + SDL_Log("Using audio driver: %s\n", SDL_GetCurrentAudioDriver()); + + devices = SDL_GetAudioCaptureDevices(NULL); + for (i = 0; devices[i] != 0; i++) { + char *name = SDL_GetAudioDeviceName(devices[i]); + SDL_Log(" Capture device #%d: '%s'\n", i, name); + if (devname && (SDL_strcmp(devname, name) == 0)) { + want_device = devices[i]; + } + SDL_free(name); + } + + if (devname && (want_device == SDL_AUDIO_DEVICE_DEFAULT_CAPTURE)) { + SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION, "Didn't see a capture device named '%s', using the system default instead.\n", devname); + devname = NULL; + } + + /* DirectSound can fail in some instances if you open the same hardware + for both capture and output and didn't open the output end first, + according to the docs, so if you're doing something like this, always + open your capture devices second in case you land in those bizarre + circumstances. */ + + SDL_Log("Opening default playback device...\n"); + device = SDL_OpenAudioDevice(SDL_AUDIO_DEVICE_DEFAULT_OUTPUT, NULL); + if (!device) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open an audio device for playback: %s!\n", SDL_GetError()); + SDL_Quit(); + exit(1); + } + SDL_PauseAudioDevice(device); + SDL_GetAudioDeviceFormat(device, &outspec, NULL); + stream_out = SDL_CreateAudioStream(&outspec, &outspec); + if (!stream_out) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create an audio stream for playback: %s!\n", SDL_GetError()); + SDL_Quit(); + exit(1); + } else if (SDL_BindAudioStream(device, stream_out) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't bind an audio stream for playback: %s!\n", SDL_GetError()); + SDL_Quit(); + exit(1); + } + + SDL_Log("Opening capture device %s%s%s...\n", + devname ? "'" : "", + devname ? devname : "[[default]]", + devname ? "'" : ""); + + device = SDL_OpenAudioDevice(want_device, NULL); + if (!device) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open an audio device for capture: %s!\n", SDL_GetError()); + SDL_Quit(); + exit(1); + } + SDL_PauseAudioDevice(device); + SDL_GetAudioDeviceFormat(device, &inspec, NULL); + stream_in = SDL_CreateAudioStream(&inspec, &inspec); + if (!stream_in) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create an audio stream for capture: %s!\n", SDL_GetError()); + SDL_Quit(); + exit(1); + } else if (SDL_BindAudioStream(device, stream_in) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't bind an audio stream for capture: %s!\n", SDL_GetError()); + SDL_Quit(); + exit(1); + } + + SDL_SetAudioStreamFormat(stream_in, NULL, &outspec); /* make sure we output at the playback format. */ + + SDL_Log("Ready! Hold down mouse or finger to record!\n"); + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + if (!done) { + SDL_Delay(16); + } + } +#endif + + SDLTest_CommonDestroyState(state); + + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testaudiohotplug.c b/vendor/sdl-3.0.0/test/testaudiohotplug.c new file mode 100644 index 0000000..6f31984 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testaudiohotplug.c @@ -0,0 +1,213 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Program to test hotplugging of audio devices */ + +#include + +#ifdef HAVE_SIGNAL_H +#include +#endif + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include +#include +#include "testutils.h" + +static SDL_AudioSpec spec; +static Uint8 *sound = NULL; /* Pointer to wave data */ +static Uint32 soundlen = 0; /* Length of wave data */ + +static SDLTest_CommonState *state; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + SDLTest_CommonDestroyState(state); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static int done = 0; + +static void poked(int sig) +{ + done = 1; +} + +static const char *devtypestr(int iscapture) +{ + return iscapture ? "capture" : "output"; +} + +static void iteration(void) +{ + SDL_Event e; + SDL_AudioDeviceID dev; + while (SDL_PollEvent(&e)) { + if (e.type == SDL_EVENT_QUIT) { + done = 1; + } else if (e.type == SDL_EVENT_KEY_UP) { + if (e.key.keysym.sym == SDLK_ESCAPE) { + done = 1; + } + } else if (e.type == SDL_EVENT_AUDIO_DEVICE_ADDED) { + const SDL_AudioDeviceID which = (SDL_AudioDeviceID) e.adevice.which; + const SDL_bool iscapture = e.adevice.iscapture ? SDL_TRUE : SDL_FALSE; + char *name = SDL_GetAudioDeviceName(which); + if (name != NULL) { + SDL_Log("New %s audio device at id %u: %s", devtypestr(iscapture), (unsigned int)which, name); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Got new %s device, id %u, but failed to get the name: %s", + devtypestr(iscapture), (unsigned int)which, SDL_GetError()); + continue; + } + if (!iscapture) { + SDL_AudioStream *stream = SDL_OpenAudioDeviceStream(which, &spec, NULL, NULL); + if (!stream) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to create/bind an audio stream to %u ('%s'): %s", (unsigned int) which, name, SDL_GetError()); + } else { + SDL_Log("Opened '%s' as %u\n", name, (unsigned int) which); + /* !!! FIXME: laziness, this used to loop the audio, but we'll just play it once for now on each connect. */ + SDL_PutAudioStreamData(stream, sound, soundlen); + SDL_FlushAudioStream(stream); + SDL_ResumeAudioDevice(SDL_GetAudioStreamDevice(stream)); + /* !!! FIXME: this is leaking the stream for now. We'll wire it up to a dictionary or whatever later. */ + } + } + SDL_free(name); + } else if (e.type == SDL_EVENT_AUDIO_DEVICE_REMOVED) { + dev = (SDL_AudioDeviceID)e.adevice.which; + SDL_Log("%s device %u removed.\n", devtypestr(e.adevice.iscapture), (unsigned int)dev); + /* !!! FIXME: we need to keep track of our streams and destroy them here. */ + } + } +} + +#ifdef __EMSCRIPTEN__ +static void loop(void) +{ + if (done) + emscripten_cancel_main_loop(); + else + iteration(); +} +#endif + +int main(int argc, char *argv[]) +{ + int i; + char *filename = NULL; + SDL_Window *window; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (!filename) { + filename = argv[i]; + consumed = 1; + } + } + if (consumed <= 0) { + static const char *options[] = { "[sample.wav]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + exit(1); + } + + i += consumed; + } + + /* Load the SDL library */ + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + /* Some targets (Mac CoreAudio) need an event queue for audio hotplug, so make and immediately hide a window. */ + window = SDL_CreateWindow("testaudiohotplug", 640, 480, 0); + if (window == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_CreateWindow failed: %s\n", SDL_GetError()); + quit(1); + } + SDL_MinimizeWindow(window); + + filename = GetResourceFilename(filename, "sample.wav"); + + if (filename == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s\n", SDL_GetError()); + quit(1); + } + + /* Load the wave file into memory */ + if (SDL_LoadWAV(filename, &spec, &sound, &soundlen) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", filename, SDL_GetError()); + quit(1); + } + +#ifdef HAVE_SIGNAL_H + /* Set the signals */ +#ifdef SIGHUP + (void)signal(SIGHUP, poked); +#endif + (void)signal(SIGINT, poked); +#ifdef SIGQUIT + (void)signal(SIGQUIT, poked); +#endif + (void)signal(SIGTERM, poked); +#endif /* HAVE_SIGNAL_H */ + + /* Show the list of available drivers */ + SDL_Log("Available audio drivers:"); + for (i = 0; i < SDL_GetNumAudioDrivers(); ++i) { + SDL_Log("%i: %s", i, SDL_GetAudioDriver(i)); + } + + SDL_Log("Select a driver with the SDL_AUDIO_DRIVER environment variable.\n"); + SDL_Log("Using audio driver: %s\n", SDL_GetCurrentAudioDriver()); + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + SDL_Delay(100); + iteration(); + } +#endif + + /* Clean up on signal */ + /* Quit audio first, then free WAV. This prevents access violations in the audio threads. */ + SDL_QuitSubSystem(SDL_INIT_AUDIO); + SDL_free(sound); + SDL_free(filename); + quit(0); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testaudioinfo.c b/vendor/sdl-3.0.0/test/testaudioinfo.c new file mode 100644 index 0000000..8034f56 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testaudioinfo.c @@ -0,0 +1,122 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +#include +#include +#include + +static void +print_devices(SDL_bool iscapture) +{ + SDL_AudioSpec spec; + const char *typestr = ((iscapture) ? "capture" : "output"); + int n = 0; + int frames; + SDL_AudioDeviceID *devices = iscapture ? SDL_GetAudioCaptureDevices(&n) : SDL_GetAudioOutputDevices(&n); + + if (devices == NULL) { + SDL_Log(" Driver failed to report %s devices: %s\n\n", typestr, SDL_GetError()); + } else if (n == 0) { + SDL_Log(" No %s devices found.\n\n", typestr); + } else { + int i; + SDL_Log("Found %d %s device%s:\n", n, typestr, n != 1 ? "s" : ""); + for (i = 0; i < n; i++) { + char *name = SDL_GetAudioDeviceName(devices[i]); + if (name != NULL) { + SDL_Log(" %d: %s\n", i, name); + SDL_free(name); + } else { + SDL_Log(" %d Error: %s\n", i, SDL_GetError()); + } + + if (SDL_GetAudioDeviceFormat(devices[i], &spec, &frames) == 0) { + SDL_Log(" Sample Rate: %d\n", spec.freq); + SDL_Log(" Channels: %d\n", spec.channels); + SDL_Log(" SDL_AudioFormat: %X\n", spec.format); + SDL_Log(" Buffer Size: %d frames\n", frames); + } + } + SDL_Log("\n"); + } + SDL_free(devices); +} + +int main(int argc, char **argv) +{ + SDL_AudioSpec spec; + int i; + int n; + int frames; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + /* Load the SDL library */ + if (SDL_Init(SDL_INIT_AUDIO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + /* Print available audio drivers */ + n = SDL_GetNumAudioDrivers(); + if (n == 0) { + SDL_Log("No built-in audio drivers\n\n"); + } else { + SDL_Log("Built-in audio drivers:\n"); + for (i = 0; i < n; ++i) { + SDL_Log(" %d: %s\n", i, SDL_GetAudioDriver(i)); + } + SDL_Log("Select a driver with the SDL_AUDIO_DRIVER environment variable.\n"); + } + + SDL_Log("Using audio driver: %s\n\n", SDL_GetCurrentAudioDriver()); + + print_devices(SDL_FALSE); + print_devices(SDL_TRUE); + + if (SDL_GetAudioDeviceFormat(SDL_AUDIO_DEVICE_DEFAULT_OUTPUT, &spec, &frames) < 0) { + SDL_Log("Error when calling SDL_GetAudioDeviceFormat(default output): %s\n", SDL_GetError()); + } else { + SDL_Log("Default Output Device:\n"); + SDL_Log("Sample Rate: %d\n", spec.freq); + SDL_Log("Channels: %d\n", spec.channels); + SDL_Log("SDL_AudioFormat: %X\n", spec.format); + SDL_Log("Buffer Size: %d frames\n", frames); + } + + if (SDL_GetAudioDeviceFormat(SDL_AUDIO_DEVICE_DEFAULT_CAPTURE, &spec, &frames) < 0) { + SDL_Log("Error when calling SDL_GetAudioDeviceFormat(default capture): %s\n", SDL_GetError()); + } else { + SDL_Log("Default Capture Device:\n"); + SDL_Log("Sample Rate: %d\n", spec.freq); + SDL_Log("Channels: %d\n", spec.channels); + SDL_Log("SDL_AudioFormat: %X\n", spec.format); + SDL_Log("Buffer Size: %d frames\n", frames); + } + + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return 0; +} + diff --git a/vendor/sdl-3.0.0/test/testaudiostreamdynamicresample.c b/vendor/sdl-3.0.0/test/testaudiostreamdynamicresample.c new file mode 100644 index 0000000..9dacc87 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testaudiostreamdynamicresample.c @@ -0,0 +1,449 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* !!! FIXME: this code is not up to standards for SDL3 test apps. Someone should improve this. */ + +#include +#include +#include +#include "testutils.h" + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include + +#define SLIDER_WIDTH_PERC 500.f / 600.f +#define SLIDER_HEIGHT_PERC 70.f / 480.f + +static int done; +static SDLTest_CommonState *state; + +static SDL_AudioSpec spec; +static SDL_AudioStream *stream; +static Uint8 *audio_buf = NULL; +static Uint32 audio_len = 0; + +static SDL_bool auto_loop = SDL_TRUE; +static SDL_bool auto_flush = SDL_FALSE; + +static Uint64 last_get_callback = 0; +static int last_get_amount_additional = 0; +static int last_get_amount_total = 0; + +typedef struct Slider +{ + SDL_FRect area; + SDL_bool changed; + char fmtlabel[64]; + float pos; + int flags; + float min; + float mid; + float max; + float value; +} Slider; + +#define NUM_SLIDERS 3 +Slider sliders[NUM_SLIDERS]; +static int active_slider = -1; + +static void init_slider(int index, const char* fmtlabel, int flags, float value, float min, float max) +{ + Slider* slider = &sliders[index]; + + slider->area.x = state->window_w * (1.f - SLIDER_WIDTH_PERC) / 2; + slider->area.y = state->window_h * (0.2f + (index * SLIDER_HEIGHT_PERC * 1.4f)); + slider->area.w = SLIDER_WIDTH_PERC * state->window_w; + slider->area.h = SLIDER_HEIGHT_PERC * state->window_h; + slider->changed = SDL_TRUE; + SDL_strlcpy(slider->fmtlabel, fmtlabel, SDL_arraysize(slider->fmtlabel)); + slider->flags = flags; + slider->min = min; + slider->max = max; + slider->value = value; + + if (slider->flags & 1) { + slider->pos = (value - slider->min + 0.5f) / (slider->max - slider->min + 1.0f); + } else { + slider->pos = 0.5f; + slider->mid = value; + } +} + +static float lerp(float v0, float v1, float t) +{ + return (1 - t) * v0 + t * v1; +} + +static void draw_text(SDL_Renderer* renderer, int x, int y, const char* text) +{ + SDL_SetRenderDrawColor(renderer, 0xFD, 0xF6, 0xE3, 0xFF); + SDLTest_DrawString(renderer, (float) x, (float) y, text); +} + +static void draw_textf(SDL_Renderer* renderer, int x, int y, const char* fmt, ...) +{ + char text[256]; + va_list ap; + + va_start(ap, fmt); + SDL_vsnprintf(text, SDL_arraysize(text), fmt, ap); + va_end(ap); + + draw_text(renderer, x, y, text); +} + +static void queue_audio() +{ + Uint8* new_data = NULL; + int new_len = 0; + int retval = 0; + SDL_AudioSpec new_spec; + + new_spec.format = spec.format; + new_spec.channels = (int) sliders[2].value; + new_spec.freq = (int) sliders[1].value; + + SDL_Log("Converting audio from %i to %i", spec.freq, new_spec.freq); + + retval = retval ? retval : SDL_ConvertAudioSamples(&spec, audio_buf, audio_len, &new_spec, &new_data, &new_len); + retval = retval ? retval : SDL_SetAudioStreamFormat(stream, &new_spec, NULL); + retval = retval ? retval : SDL_PutAudioStreamData(stream, new_data, new_len); + + if (auto_flush) { + retval = retval ? retval : SDL_FlushAudioStream(stream); + } + + SDL_free(new_data); + + if (retval) { + SDL_Log("Failed to queue audio: %s", SDL_GetError()); + } else { + SDL_Log("Queued audio"); + } +} + +static void skip_audio(float amount) +{ + float speed; + SDL_AudioSpec dst_spec, new_spec; + int num_frames; + int retval = 0; + void* buf = NULL; + + SDL_LockAudioStream(stream); + + speed = SDL_GetAudioStreamFrequencyRatio(stream); + SDL_GetAudioStreamFormat(stream, NULL, &dst_spec); + + /* Gimme that crunchy audio */ + new_spec.format = SDL_AUDIO_S8; + new_spec.channels = 1; + new_spec.freq = 4000; + + SDL_SetAudioStreamFrequencyRatio(stream, 100.0f); + SDL_SetAudioStreamFormat(stream, NULL, &new_spec); + + num_frames = (int)(new_spec.freq * ((speed * amount) / 100.0f)); + buf = SDL_malloc(num_frames); + + if (buf != NULL) { + retval = SDL_GetAudioStreamData(stream, buf, num_frames); + SDL_free(buf); + } + + SDL_SetAudioStreamFormat(stream, NULL, &dst_spec); + SDL_SetAudioStreamFrequencyRatio(stream, speed); + + SDL_UnlockAudioStream(stream); + + if (retval >= 0) { + SDL_Log("Skipped %.2f seconds", amount); + } else { + SDL_Log("Failed to skip: %s", SDL_GetError()); + } +} + +static const char *AudioFmtToString(const SDL_AudioFormat fmt) +{ + switch (fmt) { + #define FMTCASE(x) case SDL_AUDIO_##x: return #x + FMTCASE(U8); + FMTCASE(S8); + FMTCASE(S16LE); + FMTCASE(S16BE); + FMTCASE(S32LE); + FMTCASE(S32BE); + FMTCASE(F32LE); + FMTCASE(F32BE); + #undef FMTCASE + } + return "?"; +} + +static const char *AudioChansToStr(const int channels) +{ + switch (channels) { + case 1: return "Mono"; + case 2: return "Stereo"; + case 3: return "2.1"; + case 4: return "Quad"; + case 5: return "4.1"; + case 6: return "5.1"; + case 7: return "6.1"; + case 8: return "7.1"; + default: break; + } + return "?"; +} + +static void loop(void) +{ + int i, j; + SDL_Event e; + SDL_FPoint p; + SDL_AudioSpec src_spec, dst_spec; + int available_bytes = 0; + float available_seconds = 0; + + while (SDL_PollEvent(&e)) { + SDLTest_CommonEvent(state, &e, &done); +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif + if (e.type == SDL_EVENT_KEY_DOWN) { + SDL_Keycode sym = e.key.keysym.sym; + if (sym == SDLK_q) { + if (SDL_AudioDevicePaused(state->audio_id)) { + SDL_ResumeAudioDevice(state->audio_id); + } else { + SDL_PauseAudioDevice(state->audio_id); + } + } else if (sym == SDLK_w) { + auto_loop = auto_loop ? SDL_FALSE : SDL_TRUE; + } else if (sym == SDLK_e) { + auto_flush = auto_flush ? SDL_FALSE : SDL_TRUE; + } else if (sym == SDLK_a) { + SDL_ClearAudioStream(stream); + SDL_Log("Cleared audio stream"); + } else if (sym == SDLK_s) { + queue_audio(); + } else if (sym == SDLK_d) { + float amount = 1.0f; + amount *= (e.key.keysym.mod & SDL_KMOD_CTRL) ? 10.0f : 1.0f; + amount *= (e.key.keysym.mod & SDL_KMOD_SHIFT) ? 10.0f : 1.0f; + skip_audio(amount); + } + } + } + + if (SDL_GetMouseState(&p.x, &p.y) & SDL_BUTTON_LMASK) { + if (active_slider == -1) { + for (i = 0; i < NUM_SLIDERS; ++i) { + if (SDL_PointInRectFloat(&p, &sliders[i].area)) { + active_slider = i; + break; + } + } + } + } else { + active_slider = -1; + } + + if (active_slider != -1) { + Slider* slider = &sliders[active_slider]; + + float value = (p.x - slider->area.x) / slider->area.w; + value = SDL_clamp(value, 0.0f, 1.0f); + slider->pos = value; + + if (slider->flags & 1) { + value = slider->min + (value * (slider->max - slider->min + 1.0f)); + value = SDL_clamp(value, slider->min, slider->max); + } else { + value = (value * 2.0f) - 1.0f; + value = (value >= 0) + ? lerp(slider->mid, slider->max, value) + : lerp(slider->mid, slider->min, -value); + } + + if (value != slider->value) { + slider->value = value; + slider->changed = SDL_TRUE; + } + } + + if (sliders[0].changed) { + sliders[0].changed = SDL_FALSE; + SDL_SetAudioStreamFrequencyRatio(stream, sliders[0].value); + } + + if (SDL_GetAudioStreamFormat(stream, &src_spec, &dst_spec) == 0) { + available_bytes = SDL_GetAudioStreamAvailable(stream); + available_seconds = (float)available_bytes / (float)(SDL_AUDIO_FRAMESIZE(dst_spec) * dst_spec.freq); + + /* keep it looping. */ + if (auto_loop && (available_seconds < 10.0f)) { + queue_audio(); + } + } + + for (i = 0; i < state->num_windows; i++) { + int draw_y = 0; + SDL_Renderer* rend = state->renderers[i]; + + SDL_SetRenderDrawColor(rend, 0x00, 0x2B, 0x36, 0xFF); + SDL_RenderClear(rend); + + for (j = 0; j < NUM_SLIDERS; ++j) { + Slider* slider = &sliders[j]; + SDL_FRect area; + + SDL_copyp(&area, &slider->area); + + SDL_SetRenderDrawColor(rend, 0x07, 0x36, 0x42, 0xFF); + SDL_RenderFillRect(rend, &area); + + area.w *= slider->pos; + + SDL_SetRenderDrawColor(rend, 0x58, 0x6E, 0x75, 0xFF); + SDL_RenderFillRect(rend, &area); + + draw_textf(rend, (int)slider->area.x, (int)slider->area.y, slider->fmtlabel, + (slider->flags & 2) ? ((float)(int)slider->value) : slider->value); + } + + draw_textf(rend, 0, draw_y, "%7s, Loop: %3s, Flush: %3s", + SDL_AudioDevicePaused(state->audio_id) ? "Paused" : "Playing", auto_loop ? "On" : "Off", auto_flush ? "On" : "Off"); + draw_y += FONT_LINE_HEIGHT; + + draw_textf(rend, 0, draw_y, "Available: %4.2f (%i bytes)", available_seconds, available_bytes); + draw_y += FONT_LINE_HEIGHT; + + SDL_LockAudioStream(stream); + + draw_textf(rend, 0, draw_y, "Get Callback: %i/%i bytes, %2i ms ago", + last_get_amount_additional, last_get_amount_total, (int)(SDL_GetTicks() - last_get_callback)); + draw_y += FONT_LINE_HEIGHT; + + SDL_UnlockAudioStream(stream); + + draw_y = state->window_h - FONT_LINE_HEIGHT * 3; + + draw_textf(rend, 0, draw_y, "Wav: %6s/%6s/%i", + AudioFmtToString(spec.format), AudioChansToStr(spec.channels), spec.freq); + draw_y += FONT_LINE_HEIGHT; + + draw_textf(rend, 0, draw_y, "Src: %6s/%6s/%i", + AudioFmtToString(src_spec.format), AudioChansToStr(src_spec.channels), src_spec.freq); + draw_y += FONT_LINE_HEIGHT; + + draw_textf(rend, 0, draw_y, "Dst: %6s/%6s/%i", + AudioFmtToString(dst_spec.format), AudioChansToStr(dst_spec.channels), dst_spec.freq); + draw_y += FONT_LINE_HEIGHT; + + SDL_RenderPresent(rend); + } +} + +static void SDLCALL our_get_callback(void *userdata, SDL_AudioStream *strm, int additional_amount, int total_amount) +{ + last_get_callback = SDL_GetTicks(); + last_get_amount_additional = additional_amount; + last_get_amount_total = total_amount; +} + +int main(int argc, char *argv[]) +{ + char *filename = NULL; + int i; + int rc; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_AUDIO | SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (!filename) { + filename = argv[i]; + consumed = 1; + } + } + if (consumed <= 0) { + static const char *options[] = { "[sample.wav]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + exit(1); + } + + i += consumed; + } + + /* Load the SDL library */ + if (!SDLTest_CommonInit(state)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + FONT_CHARACTER_SIZE = 16; + + filename = GetResourceFilename(filename, "sample.wav"); + rc = SDL_LoadWAV(filename, &spec, &audio_buf, &audio_len); + SDL_free(filename); + + if (rc < 0) { + SDL_Log("Failed to load '%s': %s", filename, SDL_GetError()); + SDL_Quit(); + return 1; + } + + init_slider(0, "Speed: %3.2fx", 0x0, 1.0f, 0.2f, 5.0f); + init_slider(1, "Freq: %g", 0x2, (float)spec.freq, 4000.0f, 192000.0f); + init_slider(2, "Channels: %g", 0x3, (float)spec.channels, 1.0f, 8.0f); + + for (i = 0; i < state->num_windows; i++) { + SDL_SetWindowTitle(state->windows[i], "Resampler Test"); + } + + stream = SDL_CreateAudioStream(&spec, &spec); + SDL_SetAudioStreamGetCallback(stream, our_get_callback, NULL); + + SDL_BindAudioStream(state->audio_id, stream); + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + + SDLTest_CleanupTextDrawing(); + SDL_DestroyAudioStream(stream); + SDL_free(audio_buf); + SDLTest_CommonQuit(state); + return 0; +} + diff --git a/vendor/sdl-3.0.0/test/testautomation.c b/vendor/sdl-3.0.0/test/testautomation.c new file mode 100644 index 0000000..8e5f002 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation.c @@ -0,0 +1,172 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +#include + +#include +#include +#include + +#include "testautomation_suites.h" + +static SDLTest_CommonState *state; + +/* All test suites */ +static SDLTest_TestSuiteReference *testSuites[] = { + &audioTestSuite, + &clipboardTestSuite, + &eventsTestSuite, + &guidTestSuite, + &hintsTestSuite, + &intrinsicsTestSuite, + &joystickTestSuite, + &keyboardTestSuite, + &mainTestSuite, + &mathTestSuite, + &mouseTestSuite, + &pixelsTestSuite, + &platformTestSuite, + &propertiesTestSuite, + &rectTestSuite, + &renderTestSuite, + &rwopsTestSuite, + &sdltestTestSuite, + &stdlibTestSuite, + &surfaceTestSuite, + &syswmTestSuite, + &timerTestSuite, + &videoTestSuite, + NULL +}; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +int main(int argc, char *argv[]) +{ + int result; + int testIterations = 1; + Uint64 userExecKey = 0; + char *userRunSeed = NULL; + char *filter = NULL; + int i, done; + SDL_Event event; + int list = 0; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO | SDL_INIT_AUDIO); + if (state == NULL) { + return 1; + } + + /* No need of windows (or update testautomation_mouse.c:mouse_getMouseFocus() */ + state->num_windows = 0; + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--iterations") == 0) { + if (argv[i + 1]) { + testIterations = SDL_atoi(argv[i + 1]); + if (testIterations < 1) { + testIterations = 1; + } + consumed = 2; + } + } else if (SDL_strcasecmp(argv[i], "--execKey") == 0) { + if (argv[i + 1]) { + (void)SDL_sscanf(argv[i + 1], "%" SDL_PRIu64, &userExecKey); + consumed = 2; + } + } else if (SDL_strcasecmp(argv[i], "--seed") == 0) { + if (argv[i + 1]) { + userRunSeed = SDL_strdup(argv[i + 1]); + consumed = 2; + } + } else if (SDL_strcasecmp(argv[i], "--filter") == 0) { + if (argv[i + 1]) { + filter = SDL_strdup(argv[i + 1]); + consumed = 2; + } + } else if (SDL_strcasecmp(argv[i], "--list") == 0) { + consumed = 1; + list = 1; + } + } + if (consumed < 0) { + static const char *options[] = { "[--iterations #]", "[--execKey #]", "[--seed string]", "[--filter suite_name|test_name]", "[--list]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + quit(1); + } + + i += consumed; + } + + /* List all suites. */ + if (list) { + int suiteCounter; + for (suiteCounter = 0; testSuites[suiteCounter]; ++suiteCounter) { + int testCounter; + SDLTest_TestSuiteReference *testSuite = testSuites[suiteCounter]; + SDL_Log("Test suite: %s", testSuite->name); + for (testCounter = 0; testSuite->testCases[testCounter]; ++testCounter) { + const SDLTest_TestCaseReference *testCase = testSuite->testCases[testCounter]; + SDL_Log(" test: %s", testCase->name); + } + } + return 0; + } + + /* Initialize common state */ + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + /* Create the windows, initialize the renderers */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); + SDL_RenderClear(renderer); + } + + /* Call Harness */ + result = SDLTest_RunSuites(testSuites, userRunSeed, userExecKey, filter, testIterations); + + /* Empty event queue */ + done = 0; + for (i = 0; i < 100; i++) { + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + SDL_Delay(10); + } + + /* Clean up */ + SDL_free(userRunSeed); + SDL_free(filter); + + /* Shutdown everything */ + quit(0); + return result; +} diff --git a/vendor/sdl-3.0.0/test/testautomation_audio.c b/vendor/sdl-3.0.0/test/testautomation_audio.c new file mode 100644 index 0000000..7ae0226 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_audio.c @@ -0,0 +1,1343 @@ +/** + * Original code: automated SDL audio test written by Edgar Simo "bobbens" + * New/updated tests: aschiffler at ferzkopp dot net + */ + +/* quiet windows compiler warnings */ +#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include +#include + +#include +#include +#include "testautomation_suites.h" + +/* ================= Test Case Implementation ================== */ + +/* Fixture */ + +static void audioSetUp(void *arg) +{ + /* Start SDL audio subsystem */ + int ret = SDL_InitSubSystem(SDL_INIT_AUDIO); + SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_AUDIO)"); + SDLTest_AssertCheck(ret == 0, "Check result from SDL_InitSubSystem(SDL_INIT_AUDIO)"); + if (ret != 0) { + SDLTest_LogError("%s", SDL_GetError()); + } +} + +static void audioTearDown(void *arg) +{ + /* Remove a possibly created file from SDL disk writer audio driver; ignore errors */ + (void)remove("sdlaudio.raw"); + + SDLTest_AssertPass("Cleanup of test files completed"); +} + +#if 0 /* !!! FIXME: maybe update this? */ +/* Global counter for callback invocation */ +static int g_audio_testCallbackCounter; + +/* Global accumulator for total callback length */ +static int g_audio_testCallbackLength; + +/* Test callback function */ +static void SDLCALL audio_testCallback(void *userdata, Uint8 *stream, int len) +{ + /* track that callback was called */ + g_audio_testCallbackCounter++; + g_audio_testCallbackLength += len; +} +#endif + +static SDL_AudioDeviceID g_audio_id = -1; + +/* Test case functions */ + +/** + * \brief Stop and restart audio subsystem + * + * \sa SDL_QuitSubSystem + * \sa SDL_InitSubSystem + */ +static int audio_quitInitAudioSubSystem(void *arg) +{ + /* Stop SDL audio subsystem */ + SDL_QuitSubSystem(SDL_INIT_AUDIO); + SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); + + /* Restart audio again */ + audioSetUp(NULL); + + return TEST_COMPLETED; +} + +/** + * \brief Start and stop audio directly + * + * \sa SDL_InitAudio + * \sa SDL_QuitAudio + */ +static int audio_initQuitAudio(void *arg) +{ + int result; + int i, iMax; + const char *audioDriver; + + /* Stop SDL audio subsystem */ + SDL_QuitSubSystem(SDL_INIT_AUDIO); + SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); + + /* Loop over all available audio drivers */ + iMax = SDL_GetNumAudioDrivers(); + SDLTest_AssertPass("Call to SDL_GetNumAudioDrivers()"); + SDLTest_AssertCheck(iMax > 0, "Validate number of audio drivers; expected: >0 got: %d", iMax); + for (i = 0; i < iMax; i++) { + audioDriver = SDL_GetAudioDriver(i); + SDLTest_AssertPass("Call to SDL_GetAudioDriver(%d)", i); + SDLTest_Assert(audioDriver != NULL, "Audio driver name is not NULL"); + SDLTest_AssertCheck(audioDriver[0] != '\0', "Audio driver name is not empty; got: %s", audioDriver); /* NOLINT(clang-analyzer-core.NullDereference): Checked for NULL above */ + + /* Call Init */ + SDL_SetHint("SDL_AUDIO_DRIVER", audioDriver); + result = SDL_InitSubSystem(SDL_INIT_AUDIO); + SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_AUDIO) with driver='%s'", audioDriver); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0 got: %d", result); + + /* Call Quit */ + SDL_QuitSubSystem(SDL_INIT_AUDIO); + SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); + } + + /* NULL driver specification */ + audioDriver = NULL; + + /* Call Init */ + SDL_SetHint("SDL_AUDIO_DRIVER", audioDriver); + result = SDL_InitSubSystem(SDL_INIT_AUDIO); + SDLTest_AssertPass("Call to SDL_AudioInit(NULL)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0 got: %d", result); + + /* Call Quit */ + SDL_QuitSubSystem(SDL_INIT_AUDIO); + SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); + + /* Restart audio again */ + audioSetUp(NULL); + + return TEST_COMPLETED; +} + +/** + * \brief Start, open, close and stop audio + * + * \sa SDL_InitAudio + * \sa SDL_OpenAudioDevice + * \sa SDL_CloseAudioDevice + * \sa SDL_QuitAudio + */ +static int audio_initOpenCloseQuitAudio(void *arg) +{ + int result; + int i, iMax, j, k; + const char *audioDriver; + SDL_AudioSpec desired; + + /* Stop SDL audio subsystem */ + SDL_QuitSubSystem(SDL_INIT_AUDIO); + SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); + + /* Loop over all available audio drivers */ + iMax = SDL_GetNumAudioDrivers(); + SDLTest_AssertPass("Call to SDL_GetNumAudioDrivers()"); + SDLTest_AssertCheck(iMax > 0, "Validate number of audio drivers; expected: >0 got: %d", iMax); + for (i = 0; i < iMax; i++) { + audioDriver = SDL_GetAudioDriver(i); + SDLTest_AssertPass("Call to SDL_GetAudioDriver(%d)", i); + SDLTest_Assert(audioDriver != NULL, "Audio driver name is not NULL"); + SDLTest_AssertCheck(audioDriver[0] != '\0', "Audio driver name is not empty; got: %s", audioDriver); /* NOLINT(clang-analyzer-core.NullDereference): Checked for NULL above */ + + /* Change specs */ + for (j = 0; j < 2; j++) { + + /* Call Init */ + SDL_SetHint("SDL_AUDIO_DRIVER", audioDriver); + result = SDL_InitSubSystem(SDL_INIT_AUDIO); + SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_AUDIO) with driver='%s'", audioDriver); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0 got: %d", result); + + /* Set spec */ + SDL_memset(&desired, 0, sizeof(desired)); + switch (j) { + case 0: + /* Set standard desired spec */ + desired.freq = 22050; + desired.format = SDL_AUDIO_S16; + desired.channels = 2; + + case 1: + /* Set custom desired spec */ + desired.freq = 48000; + desired.format = SDL_AUDIO_F32; + desired.channels = 2; + break; + } + + /* Call Open (maybe multiple times) */ + for (k = 0; k <= j; k++) { + result = SDL_OpenAudioDevice(SDL_AUDIO_DEVICE_DEFAULT_OUTPUT, &desired); + if (k == 0) { + g_audio_id = result; + } + SDLTest_AssertPass("Call to SDL_OpenAudioDevice(SDL_AUDIO_DEVICE_DEFAULT_OUTPUT, desired_spec_%d), call %d", j, k + 1); + SDLTest_AssertCheck(result > 0, "Verify return value; expected: > 0, got: %d", result); + } + + /* Call Close (maybe multiple times) */ + for (k = 0; k <= j; k++) { + SDL_CloseAudioDevice(g_audio_id); + SDLTest_AssertPass("Call to SDL_CloseAudioDevice(), call %d", k + 1); + } + + /* Call Quit (maybe multiple times) */ + for (k = 0; k <= j; k++) { + SDL_QuitSubSystem(SDL_INIT_AUDIO); + SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO), call %d", k + 1); + } + + } /* spec loop */ + } /* driver loop */ + + /* Restart audio again */ + audioSetUp(NULL); + + return TEST_COMPLETED; +} + +/** + * \brief Pause and unpause audio + * + * \sa SDL_PauseAudioDevice + * \sa SDL_PlayAudioDevice + */ +static int audio_pauseUnpauseAudio(void *arg) +{ + int iMax; + int i, j /*, k, l*/; + int result; + const char *audioDriver; + SDL_AudioSpec desired; + + /* Stop SDL audio subsystem */ + SDL_QuitSubSystem(SDL_INIT_AUDIO); + SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); + + /* Loop over all available audio drivers */ + iMax = SDL_GetNumAudioDrivers(); + SDLTest_AssertPass("Call to SDL_GetNumAudioDrivers()"); + SDLTest_AssertCheck(iMax > 0, "Validate number of audio drivers; expected: >0 got: %d", iMax); + for (i = 0; i < iMax; i++) { + audioDriver = SDL_GetAudioDriver(i); + SDLTest_AssertPass("Call to SDL_GetAudioDriver(%d)", i); + SDLTest_Assert(audioDriver != NULL, "Audio driver name is not NULL"); + SDLTest_AssertCheck(audioDriver[0] != '\0', "Audio driver name is not empty; got: %s", audioDriver); /* NOLINT(clang-analyzer-core.NullDereference): Checked for NULL above */ + + /* Change specs */ + for (j = 0; j < 2; j++) { + + /* Call Init */ + SDL_SetHint("SDL_AUDIO_DRIVER", audioDriver); + result = SDL_InitSubSystem(SDL_INIT_AUDIO); + SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_AUDIO) with driver='%s'", audioDriver); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0 got: %d", result); + + /* Set spec */ + SDL_memset(&desired, 0, sizeof(desired)); + switch (j) { + case 0: + /* Set standard desired spec */ + desired.freq = 22050; + desired.format = SDL_AUDIO_S16; + desired.channels = 2; + break; + + case 1: + /* Set custom desired spec */ + desired.freq = 48000; + desired.format = SDL_AUDIO_F32; + desired.channels = 2; + break; + } + + /* Call Open */ + g_audio_id = SDL_OpenAudioDevice(SDL_AUDIO_DEVICE_DEFAULT_OUTPUT, &desired); + result = g_audio_id; + SDLTest_AssertPass("Call to SDL_OpenAudioDevice(SDL_AUDIO_DEVICE_DEFAULT_OUTPUT, desired_spec_%d)", j); + SDLTest_AssertCheck(result > 0, "Verify return value; expected > 0 got: %d", result); + +#if 0 /* !!! FIXME: maybe update this? */ + /* Start and stop audio multiple times */ + for (l = 0; l < 3; l++) { + SDLTest_Log("Pause/Unpause iteration: %d", l + 1); + + /* Reset callback counters */ + g_audio_testCallbackCounter = 0; + g_audio_testCallbackLength = 0; + + /* Un-pause audio to start playing (maybe multiple times) */ + for (k = 0; k <= j; k++) { + SDL_PlayAudioDevice(g_audio_id); + SDLTest_AssertPass("Call to SDL_PlayAudioDevice(g_audio_id), call %d", k + 1); + } + + /* Wait for callback */ + int totalDelay = 0; + do { + SDL_Delay(10); + totalDelay += 10; + } while (g_audio_testCallbackCounter == 0 && totalDelay < 1000); + SDLTest_AssertCheck(g_audio_testCallbackCounter > 0, "Verify callback counter; expected: >0 got: %d", g_audio_testCallbackCounter); + SDLTest_AssertCheck(g_audio_testCallbackLength > 0, "Verify callback length; expected: >0 got: %d", g_audio_testCallbackLength); + + /* Pause audio to stop playing (maybe multiple times) */ + for (k = 0; k <= j; k++) { + const int pause_on = (k == 0) ? 1 : SDLTest_RandomIntegerInRange(99, 9999); + if (pause_on) { + SDL_PauseAudioDevice(g_audio_id); + SDLTest_AssertPass("Call to SDL_PauseAudioDevice(g_audio_id), call %d", k + 1); + } else { + SDL_PlayAudioDevice(g_audio_id); + SDLTest_AssertPass("Call to SDL_PlayAudioDevice(g_audio_id), call %d", k + 1); + } + } + + /* Ensure callback is not called again */ + const int originalCounter = g_audio_testCallbackCounter; + SDL_Delay(totalDelay + 10); + SDLTest_AssertCheck(originalCounter == g_audio_testCallbackCounter, "Verify callback counter; expected: %d, got: %d", originalCounter, g_audio_testCallbackCounter); + } +#endif + + /* Call Close */ + SDL_CloseAudioDevice(g_audio_id); + SDLTest_AssertPass("Call to SDL_CloseAudioDevice()"); + + /* Call Quit */ + SDL_QuitSubSystem(SDL_INIT_AUDIO); + SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); + + } /* spec loop */ + } /* driver loop */ + + /* Restart audio again */ + audioSetUp(NULL); + + return TEST_COMPLETED; +} + +/** + * \brief Enumerate and name available audio devices (output and capture). + * + * \sa SDL_GetNumAudioDevices + * \sa SDL_GetAudioDeviceName + */ +static int audio_enumerateAndNameAudioDevices(void *arg) +{ + int t; + int i, n; + char *name; + SDL_AudioDeviceID *devices = NULL; + + /* Iterate over types: t=0 output device, t=1 input/capture device */ + for (t = 0; t < 2; t++) { + /* Get number of devices. */ + devices = (t) ? SDL_GetAudioCaptureDevices(&n) : SDL_GetAudioOutputDevices(&n); + SDLTest_AssertPass("Call to SDL_GetAudio%sDevices(%i)", (t) ? "Capture" : "Output", t); + SDLTest_Log("Number of %s devices < 0, reported as %i", (t) ? "capture" : "output", n); + SDLTest_AssertCheck(n >= 0, "Validate result is >= 0, got: %i", n); + + /* List devices. */ + if (n > 0) { + SDLTest_AssertCheck(devices != NULL, "Validate devices is not NULL if n > 0"); + for (i = 0; i < n; i++) { + name = SDL_GetAudioDeviceName(devices[i]); + SDLTest_AssertPass("Call to SDL_GetAudioDeviceName(%i)", i); + SDLTest_AssertCheck(name != NULL, "Verify result from SDL_GetAudioDeviceName(%i) is not NULL", i); + if (name != NULL) { + SDLTest_AssertCheck(name[0] != '\0', "verify result from SDL_GetAudioDeviceName(%i) is not empty, got: '%s'", i, name); + SDL_free(name); + } + } + } + + SDL_free(devices); + } + + return TEST_COMPLETED; +} + +/** + * \brief Negative tests around enumeration and naming of audio devices. + * + * \sa SDL_GetNumAudioDevices + * \sa SDL_GetAudioDeviceName + */ +static int audio_enumerateAndNameAudioDevicesNegativeTests(void *arg) +{ + return TEST_COMPLETED; /* nothing in here atm since these interfaces changed in SDL3. */ +} + +/** + * \brief Checks available audio driver names. + * + * \sa SDL_GetNumAudioDrivers + * \sa SDL_GetAudioDriver + */ +static int audio_printAudioDrivers(void *arg) +{ + int i, n; + const char *name; + + /* Get number of drivers */ + n = SDL_GetNumAudioDrivers(); + SDLTest_AssertPass("Call to SDL_GetNumAudioDrivers()"); + SDLTest_AssertCheck(n >= 0, "Verify number of audio drivers >= 0, got: %i", n); + + /* List drivers. */ + if (n > 0) { + for (i = 0; i < n; i++) { + name = SDL_GetAudioDriver(i); + SDLTest_AssertPass("Call to SDL_GetAudioDriver(%i)", i); + SDLTest_AssertCheck(name != NULL, "Verify returned name is not NULL"); + if (name != NULL) { + SDLTest_AssertCheck(name[0] != '\0', "Verify returned name is not empty, got: '%s'", name); + } + } + } + + return TEST_COMPLETED; +} + +/** + * \brief Checks current audio driver name with initialized audio. + * + * \sa SDL_GetCurrentAudioDriver + */ +static int audio_printCurrentAudioDriver(void *arg) +{ + /* Check current audio driver */ + const char *name = SDL_GetCurrentAudioDriver(); + SDLTest_AssertPass("Call to SDL_GetCurrentAudioDriver()"); + SDLTest_AssertCheck(name != NULL, "Verify returned name is not NULL"); + if (name != NULL) { + SDLTest_AssertCheck(name[0] != '\0', "Verify returned name is not empty, got: '%s'", name); + } + + return TEST_COMPLETED; +} + +/* Definition of all formats, channels, and frequencies used to test audio conversions */ +static SDL_AudioFormat g_audioFormats[] = { + SDL_AUDIO_S8, SDL_AUDIO_U8, + SDL_AUDIO_S16LE, SDL_AUDIO_S16BE, + SDL_AUDIO_S32LE, SDL_AUDIO_S32BE, + SDL_AUDIO_F32LE, SDL_AUDIO_F32BE +}; +static const char *g_audioFormatsVerbose[] = { + "SDL_AUDIO_S8", "SDL_AUDIO_U8", + "SDL_AUDIO_S16LE", "SDL_AUDIO_S16BE", + "SDL_AUDIO_S32LE", "SDL_AUDIO_S32BE", + "SDL_AUDIO_F32LE", "SDL_AUDIO_F32BE" +}; +static const int g_numAudioFormats = SDL_arraysize(g_audioFormats); +static Uint8 g_audioChannels[] = { 1, 2, 4, 6 }; +static const int g_numAudioChannels = SDL_arraysize(g_audioChannels); +static int g_audioFrequencies[] = { 11025, 22050, 44100, 48000 }; +static const int g_numAudioFrequencies = SDL_arraysize(g_audioFrequencies); + +/* Verify the audio formats are laid out as expected */ +SDL_COMPILE_TIME_ASSERT(SDL_AUDIO_U8_FORMAT, SDL_AUDIO_U8 == SDL_AUDIO_BITSIZE(8)); +SDL_COMPILE_TIME_ASSERT(SDL_AUDIO_S8_FORMAT, SDL_AUDIO_S8 == (SDL_AUDIO_BITSIZE(8) | SDL_AUDIO_MASK_SIGNED)); +SDL_COMPILE_TIME_ASSERT(SDL_AUDIO_S16LE_FORMAT, SDL_AUDIO_S16LE == (SDL_AUDIO_BITSIZE(16) | SDL_AUDIO_MASK_SIGNED)); +SDL_COMPILE_TIME_ASSERT(SDL_AUDIO_S16BE_FORMAT, SDL_AUDIO_S16BE == (SDL_AUDIO_S16LE | SDL_AUDIO_MASK_BIG_ENDIAN)); +SDL_COMPILE_TIME_ASSERT(SDL_AUDIO_S32LE_FORMAT, SDL_AUDIO_S32LE == (SDL_AUDIO_BITSIZE(32) | SDL_AUDIO_MASK_SIGNED)); +SDL_COMPILE_TIME_ASSERT(SDL_AUDIO_S32BE_FORMAT, SDL_AUDIO_S32BE == (SDL_AUDIO_S32LE | SDL_AUDIO_MASK_BIG_ENDIAN)); +SDL_COMPILE_TIME_ASSERT(SDL_AUDIO_F32LE_FORMAT, SDL_AUDIO_F32LE == (SDL_AUDIO_BITSIZE(32) | SDL_AUDIO_MASK_FLOAT | SDL_AUDIO_MASK_SIGNED)); +SDL_COMPILE_TIME_ASSERT(SDL_AUDIO_F32BE_FORMAT, SDL_AUDIO_F32BE == (SDL_AUDIO_F32LE | SDL_AUDIO_MASK_BIG_ENDIAN)); + +/** + * \brief Builds various audio conversion structures + * + * \sa SDL_CreateAudioStream + */ +static int audio_buildAudioStream(void *arg) +{ + SDL_AudioStream *stream; + SDL_AudioSpec spec1; + SDL_AudioSpec spec2; + int i, ii, j, jj, k, kk; + + /* Call Quit */ + SDL_QuitSubSystem(SDL_INIT_AUDIO); + SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); + + /* No conversion needed */ + spec1.format = SDL_AUDIO_S16LE; + spec1.channels = 2; + spec1.freq = 22050; + stream = SDL_CreateAudioStream(&spec1, &spec1); + SDLTest_AssertPass("Call to SDL_CreateAudioStream(spec1 ==> spec1)"); + SDLTest_AssertCheck(stream != NULL, "Verify stream value; expected: != NULL, got: %p", (void *)stream); + SDL_DestroyAudioStream(stream); + + /* Typical conversion */ + spec1.format = SDL_AUDIO_S8; + spec1.channels = 1; + spec1.freq = 22050; + spec2.format = SDL_AUDIO_S16LE; + spec2.channels = 2; + spec2.freq = 44100; + stream = SDL_CreateAudioStream(&spec1, &spec2); + SDLTest_AssertPass("Call to SDL_CreateAudioStream(spec1 ==> spec2)"); + SDLTest_AssertCheck(stream != NULL, "Verify stream value; expected: != NULL, got: %p", (void *)stream); + SDL_DestroyAudioStream(stream); + + /* All source conversions with random conversion targets, allow 'null' conversions */ + for (i = 0; i < g_numAudioFormats; i++) { + for (j = 0; j < g_numAudioChannels; j++) { + for (k = 0; k < g_numAudioFrequencies; k++) { + spec1.format = g_audioFormats[i]; + spec1.channels = g_audioChannels[j]; + spec1.freq = g_audioFrequencies[k]; + ii = SDLTest_RandomIntegerInRange(0, g_numAudioFormats - 1); + jj = SDLTest_RandomIntegerInRange(0, g_numAudioChannels - 1); + kk = SDLTest_RandomIntegerInRange(0, g_numAudioFrequencies - 1); + spec2.format = g_audioFormats[ii]; + spec2.channels = g_audioChannels[jj]; + spec2.freq = g_audioFrequencies[kk]; + stream = SDL_CreateAudioStream(&spec1, &spec2); + + SDLTest_AssertPass("Call to SDL_CreateAudioStream(format[%i]=%s(%i),channels[%i]=%i,freq[%i]=%i ==> format[%i]=%s(%i),channels[%i]=%i,freq[%i]=%i)", + i, g_audioFormatsVerbose[i], spec1.format, j, spec1.channels, k, spec1.freq, ii, g_audioFormatsVerbose[ii], spec2.format, jj, spec2.channels, kk, spec2.freq); + SDLTest_AssertCheck(stream != NULL, "Verify stream value; expected: != NULL, got: %p", (void *)stream); + if (stream == NULL) { + SDLTest_LogError("%s", SDL_GetError()); + } + SDL_DestroyAudioStream(stream); + } + } + } + + /* Restart audio again */ + audioSetUp(NULL); + + return TEST_COMPLETED; +} + +/** + * \brief Checks calls with invalid input to SDL_CreateAudioStream + * + * \sa SDL_CreateAudioStream + */ +static int audio_buildAudioStreamNegative(void *arg) +{ + const char *error; + SDL_AudioStream *stream; + SDL_AudioSpec spec1; + SDL_AudioSpec spec2; + int i; + char message[256]; + + /* Valid format */ + spec1.format = SDL_AUDIO_S8; + spec1.channels = 1; + spec1.freq = 22050; + spec2.format = SDL_AUDIO_S16LE; + spec2.channels = 2; + spec2.freq = 44100; + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Invalid conversions */ + for (i = 1; i < 64; i++) { + /* Valid format to start with */ + spec1.format = SDL_AUDIO_S8; + spec1.channels = 1; + spec1.freq = 22050; + spec2.format = SDL_AUDIO_S16LE; + spec2.channels = 2; + spec2.freq = 44100; + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Set various invalid format inputs */ + SDL_strlcpy(message, "Invalid: ", 256); + if (i & 1) { + SDL_strlcat(message, " spec1.format", 256); + spec1.format = 0; + } + if (i & 2) { + SDL_strlcat(message, " spec1.channels", 256); + spec1.channels = 0; + } + if (i & 4) { + SDL_strlcat(message, " spec1.freq", 256); + spec1.freq = 0; + } + if (i & 8) { + SDL_strlcat(message, " spec2.format", 256); + spec2.format = 0; + } + if (i & 16) { + SDL_strlcat(message, " spec2.channels", 256); + spec2.channels = 0; + } + if (i & 32) { + SDL_strlcat(message, " spec2.freq", 256); + spec2.freq = 0; + } + SDLTest_Log("%s", message); + stream = SDL_CreateAudioStream(&spec1, &spec2); + SDLTest_AssertPass("Call to SDL_CreateAudioStream(spec1 ==> spec2)"); + SDLTest_AssertCheck(stream == NULL, "Verify stream value; expected: NULL, got: %p", (void *)stream); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL && error[0] != '\0', "Validate that error message was not NULL or empty"); + SDL_DestroyAudioStream(stream); + } + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * \brief Checks current audio status. + * + * \sa SDL_GetAudioDeviceStatus + */ +static int audio_getAudioStatus(void *arg) +{ + return TEST_COMPLETED; /* no longer a thing in SDL3. */ +} + +/** + * \brief Opens, checks current audio status, and closes a device. + * + * \sa SDL_GetAudioStatus + */ +static int audio_openCloseAndGetAudioStatus(void *arg) +{ + return TEST_COMPLETED; /* not a thing in SDL3. */ +} + +/** + * \brief Locks and unlocks open audio device. + * + * \sa SDL_LockAudioDevice + * \sa SDL_UnlockAudioDevice + */ +static int audio_lockUnlockOpenAudioDevice(void *arg) +{ + return TEST_COMPLETED; /* not a thing in SDL3 */ +} + +/** + * \brief Convert audio using various conversion structures + * + * \sa SDL_CreateAudioStream + */ +static int audio_convertAudio(void *arg) +{ + SDL_AudioStream *stream; + SDL_AudioSpec spec1; + SDL_AudioSpec spec2; + int c; + char message[128]; + int i, ii, j, jj, k, kk; + + /* Iterate over bitmask that determines which parameters are modified in the conversion */ + for (c = 1; c < 8; c++) { + SDL_strlcpy(message, "Changing:", 128); + if (c & 1) { + SDL_strlcat(message, " Format", 128); + } + if (c & 2) { + SDL_strlcat(message, " Channels", 128); + } + if (c & 4) { + SDL_strlcat(message, " Frequencies", 128); + } + SDLTest_Log("%s", message); + /* All source conversions with random conversion targets */ + for (i = 0; i < g_numAudioFormats; i++) { + for (j = 0; j < g_numAudioChannels; j++) { + for (k = 0; k < g_numAudioFrequencies; k++) { + spec1.format = g_audioFormats[i]; + spec1.channels = g_audioChannels[j]; + spec1.freq = g_audioFrequencies[k]; + + /* Ensure we have a different target format */ + do { + if (c & 1) { + ii = SDLTest_RandomIntegerInRange(0, g_numAudioFormats - 1); + } else { + ii = 1; + } + if (c & 2) { + jj = SDLTest_RandomIntegerInRange(0, g_numAudioChannels - 1); + } else { + jj = j; + } + if (c & 4) { + kk = SDLTest_RandomIntegerInRange(0, g_numAudioFrequencies - 1); + } else { + kk = k; + } + } while ((i == ii) && (j == jj) && (k == kk)); + spec2.format = g_audioFormats[ii]; + spec2.channels = g_audioChannels[jj]; + spec2.freq = g_audioFrequencies[kk]; + + stream = SDL_CreateAudioStream(&spec1, &spec2); + SDLTest_AssertPass("Call to SDL_CreateAudioStream(format[%i]=%s(%i),channels[%i]=%i,freq[%i]=%i ==> format[%i]=%s(%i),channels[%i]=%i,freq[%i]=%i)", + i, g_audioFormatsVerbose[i], spec1.format, j, spec1.channels, k, spec1.freq, ii, g_audioFormatsVerbose[ii], spec2.format, jj, spec2.channels, kk, spec2.freq); + SDLTest_AssertCheck(stream != NULL, "Verify stream value; expected: != NULL, got: %p", (void *)stream); + if (stream == NULL) { + SDLTest_LogError("%s", SDL_GetError()); + } else { + Uint8 *dst_buf = NULL, *src_buf = NULL; + int dst_len = 0, src_len = 0, real_dst_len = 0; + int l = 64, m; + int src_framesize, dst_framesize; + int src_silence, dst_silence; + + src_framesize = SDL_AUDIO_FRAMESIZE(spec1); + dst_framesize = SDL_AUDIO_FRAMESIZE(spec2); + + src_len = l * src_framesize; + SDLTest_Log("Creating dummy sample buffer of %i length (%i bytes)", l, src_len); + src_buf = (Uint8 *)SDL_malloc(src_len); + SDLTest_AssertCheck(src_buf != NULL, "Check src data buffer to convert is not NULL"); + if (src_buf == NULL) { + return TEST_ABORTED; + } + + src_silence = SDL_GetSilenceValueForFormat(spec1.format); + SDL_memset(src_buf, src_silence, src_len); + + dst_len = ((int)((((Sint64)l * spec2.freq) - 1) / spec1.freq) + 1) * dst_framesize; + dst_buf = (Uint8 *)SDL_malloc(dst_len); + SDLTest_AssertCheck(dst_buf != NULL, "Check dst data buffer to convert is not NULL"); + if (dst_buf == NULL) { + return TEST_ABORTED; + } + + real_dst_len = SDL_GetAudioStreamAvailable(stream); + SDLTest_AssertCheck(0 == real_dst_len, "Verify available (pre-put); expected: %i; got: %i", 0, real_dst_len); + + /* Run the audio converter */ + if (SDL_PutAudioStreamData(stream, src_buf, src_len) < 0 || + SDL_FlushAudioStream(stream) < 0) { + return TEST_ABORTED; + } + + real_dst_len = SDL_GetAudioStreamAvailable(stream); + SDLTest_AssertCheck(dst_len == real_dst_len, "Verify available (post-put); expected: %i; got: %i", dst_len, real_dst_len); + + real_dst_len = SDL_GetAudioStreamData(stream, dst_buf, dst_len); + SDLTest_AssertCheck(dst_len == real_dst_len, "Verify result value; expected: %i; got: %i", dst_len, real_dst_len); + if (dst_len != real_dst_len) { + return TEST_ABORTED; + } + + real_dst_len = SDL_GetAudioStreamAvailable(stream); + SDLTest_AssertCheck(0 == real_dst_len, "Verify available (post-get); expected: %i; got: %i", 0, real_dst_len); + + dst_silence = SDL_GetSilenceValueForFormat(spec2.format); + + for (m = 0; m < dst_len; ++m) { + if (dst_buf[m] != dst_silence) { + SDLTest_LogError("Output buffer is not silent"); + return TEST_ABORTED; + } + } + + SDL_DestroyAudioStream(stream); + /* Free converted buffer */ + SDL_free(src_buf); + SDL_free(dst_buf); + } + } + } + } + } + + return TEST_COMPLETED; +} + +/** + * \brief Opens, checks current connected status, and closes a device. + * + * \sa SDL_AudioDeviceConnected + */ +static int audio_openCloseAudioDeviceConnected(void *arg) +{ + return TEST_COMPLETED; /* not a thing in SDL3. */ +} + +static double sine_wave_sample(const Sint64 idx, const Sint64 rate, const Sint64 freq, const double phase) +{ + /* Using integer modulo to avoid precision loss caused by large floating + * point numbers. Sint64 is needed for the large integer multiplication. + * The integers are assumed to be non-negative so that modulo is always + * non-negative. + * sin(i / rate * freq * 2 * PI + phase) + * = sin(mod(i / rate * freq, 1) * 2 * PI + phase) + * = sin(mod(i * freq, rate) / rate * 2 * PI + phase) */ + return SDL_sin(((double)(idx * freq % rate)) / ((double)rate) * (SDL_PI_D * 2) + phase); +} + +/** + * \brief Check signal-to-noise ratio and maximum error of audio resampling. + * + * \sa https://wiki.libsdl.org/SDL_CreateAudioStream + * \sa https://wiki.libsdl.org/SDL_DestroyAudioStream + * \sa https://wiki.libsdl.org/SDL_PutAudioStreamData + * \sa https://wiki.libsdl.org/SDL_FlushAudioStream + * \sa https://wiki.libsdl.org/SDL_GetAudioStreamData + */ +static int audio_resampleLoss(void *arg) +{ + /* Note: always test long input time (>= 5s from experience) in some test + * cases because an improper implementation may suffer from low resampling + * precision with long input due to e.g. doing subtraction with large floats. */ + struct test_spec_t { + int time; + int freq; + double phase; + int rate_in; + int rate_out; + double signal_to_noise; + double max_error; + } test_specs[] = { + { 50, 440, 0, 44100, 48000, 80, 0.0009 }, + { 50, 5000, SDL_PI_D / 2, 20000, 10000, 999, 0.0001 }, + { 50, 440, 0, 22050, 96000, 79, 0.0120 }, + { 50, 440, 0, 96000, 22050, 80, 0.0002 }, + { 0 } + }; + + int spec_idx = 0; + int min_channels = 1; + int max_channels = 1 /*8*/; + int num_channels = min_channels; + + for (spec_idx = 0; test_specs[spec_idx].time > 0;) { + const struct test_spec_t *spec = &test_specs[spec_idx]; + const int frames_in = spec->time * spec->rate_in; + const int frames_target = spec->time * spec->rate_out; + const int len_in = (frames_in * num_channels) * (int)sizeof(float); + const int len_target = (frames_target * num_channels) * (int)sizeof(float); + + SDL_AudioSpec tmpspec1, tmpspec2; + Uint64 tick_beg = 0; + Uint64 tick_end = 0; + int i = 0; + int j = 0; + int ret = 0; + SDL_AudioStream *stream = NULL; + float *buf_in = NULL; + float *buf_out = NULL; + int len_out = 0; + double max_error = 0; + double sum_squared_error = 0; + double sum_squared_value = 0; + double signal_to_noise = 0; + + SDLTest_AssertPass("Test resampling of %i s %i Hz %f phase sine wave from sampling rate of %i Hz to %i Hz", + spec->time, spec->freq, spec->phase, spec->rate_in, spec->rate_out); + + tmpspec1.format = SDL_AUDIO_F32; + tmpspec1.channels = num_channels; + tmpspec1.freq = spec->rate_in; + tmpspec2.format = SDL_AUDIO_F32; + tmpspec2.channels = num_channels; + tmpspec2.freq = spec->rate_out; + stream = SDL_CreateAudioStream(&tmpspec1, &tmpspec2); + SDLTest_AssertPass("Call to SDL_CreateAudioStream(SDL_AUDIO_F32, 1, %i, SDL_AUDIO_F32, 1, %i)", spec->rate_in, spec->rate_out); + SDLTest_AssertCheck(stream != NULL, "Expected SDL_CreateAudioStream to succeed."); + if (stream == NULL) { + return TEST_ABORTED; + } + + buf_in = (float *)SDL_malloc(len_in); + SDLTest_AssertCheck(buf_in != NULL, "Expected input buffer to be created."); + if (buf_in == NULL) { + SDL_DestroyAudioStream(stream); + return TEST_ABORTED; + } + + for (i = 0; i < frames_in; ++i) { + float f = (float)sine_wave_sample(i, spec->rate_in, spec->freq, spec->phase); + for (j = 0; j < num_channels; ++j) { + *(buf_in + (i * num_channels) + j) = f; + } + } + + tick_beg = SDL_GetPerformanceCounter(); + + ret = SDL_PutAudioStreamData(stream, buf_in, len_in); + SDLTest_AssertPass("Call to SDL_PutAudioStreamData(stream, buf_in, %i)", len_in); + SDLTest_AssertCheck(ret == 0, "Expected SDL_PutAudioStreamData to succeed."); + SDL_free(buf_in); + if (ret != 0) { + SDL_DestroyAudioStream(stream); + return TEST_ABORTED; + } + + ret = SDL_FlushAudioStream(stream); + SDLTest_AssertPass("Call to SDL_FlushAudioStream(stream)"); + SDLTest_AssertCheck(ret == 0, "Expected SDL_FlushAudioStream to succeed"); + if (ret != 0) { + SDL_DestroyAudioStream(stream); + return TEST_ABORTED; + } + + buf_out = (float *)SDL_malloc(len_target); + SDLTest_AssertCheck(buf_out != NULL, "Expected output buffer to be created."); + if (buf_out == NULL) { + SDL_DestroyAudioStream(stream); + return TEST_ABORTED; + } + + len_out = SDL_GetAudioStreamData(stream, buf_out, len_target); + SDLTest_AssertPass("Call to SDL_GetAudioStreamData(stream, buf_out, %i)", len_target); + SDLTest_AssertCheck(len_out == len_target, "Expected output length to be no larger than %i, got %i.", + len_target, len_out); + SDL_DestroyAudioStream(stream); + if (len_out > len_target) { + SDL_free(buf_out); + return TEST_ABORTED; + } + + tick_end = SDL_GetPerformanceCounter(); + SDLTest_Log("Resampling used %f seconds.", ((double)(tick_end - tick_beg)) / SDL_GetPerformanceFrequency()); + + for (i = 0; i < frames_target; ++i) { + const double target = sine_wave_sample(i, spec->rate_out, spec->freq, spec->phase); + for (j = 0; j < num_channels; ++j) { + const float output = *(buf_out + (i * num_channels) + j); + const double error = SDL_fabs(target - output); + max_error = SDL_max(max_error, error); + sum_squared_error += error * error; + sum_squared_value += target * target; + } + } + SDL_free(buf_out); + signal_to_noise = 10 * SDL_log10(sum_squared_value / sum_squared_error); /* decibel */ + SDLTest_AssertCheck(isfinite(sum_squared_value), "Sum of squared target should be finite."); + SDLTest_AssertCheck(isfinite(sum_squared_error), "Sum of squared error should be finite."); + /* Infinity is theoretically possible when there is very little to no noise */ + SDLTest_AssertCheck(!isnan(signal_to_noise), "Signal-to-noise ratio should not be NaN."); + SDLTest_AssertCheck(isfinite(max_error), "Maximum conversion error should be finite."); + SDLTest_AssertCheck(signal_to_noise >= spec->signal_to_noise, "Conversion signal-to-noise ratio %f dB should be no less than %f dB.", + signal_to_noise, spec->signal_to_noise); + SDLTest_AssertCheck(max_error <= spec->max_error, "Maximum conversion error %f should be no more than %f.", + max_error, spec->max_error); + + if (++num_channels > max_channels) { + num_channels = min_channels; + ++spec_idx; + } + } + + return TEST_COMPLETED; +} + +/** + * \brief Check accuracy converting between audio formats. + * + * \sa SDL_ConvertAudioSamples + */ +static int audio_convertAccuracy(void *arg) +{ + static SDL_AudioFormat formats[] = { SDL_AUDIO_S8, SDL_AUDIO_U8, SDL_AUDIO_S16, SDL_AUDIO_S32 }; + static const char* format_names[] = { "S8", "U8", "S16", "S32" }; + + int src_num = 65537 + 2048 + 48 + 256 + 100000; + int src_len = src_num * sizeof(float); + float* src_data = SDL_malloc(src_len); + int i, j; + + SDLTest_AssertCheck(src_data != NULL, "Expected source buffer to be created."); + if (src_data == NULL) { + return TEST_ABORTED; + } + + j = 0; + + /* Generate a uniform range of floats between [-1.0, 1.0] */ + for (i = 0; i < 65537; ++i) { + src_data[j++] = ((float)i - 32768.0f) / 32768.0f; + } + + /* Generate floats close to 1.0 */ + const float max_val = 16777216.0f; + + for (i = 0; i < 1024; ++i) { + float f = (max_val + (float)(512 - i)) / max_val; + src_data[j++] = f; + src_data[j++] = -f; + } + + for (i = 0; i < 24; ++i) { + float f = (max_val + (float)(3u << i)) / max_val; + src_data[j++] = f; + src_data[j++] = -f; + } + + /* Generate floats far outside the [-1.0, 1.0] range */ + for (i = 0; i < 128; ++i) { + float f = 2.0f + (float) i; + src_data[j++] = f; + src_data[j++] = -f; + } + + /* Fill the rest with random floats between [-1.0, 1.0] */ + for (i = 0; i < 100000; ++i) { + src_data[j++] = SDLTest_RandomSint32() / 2147483648.0f; + } + + /* Shuffle the data for good measure */ + for (i = src_num - 1; i > 0; --i) { + float f = src_data[i]; + j = SDLTest_RandomIntegerInRange(0, i); + src_data[i] = src_data[j]; + src_data[j] = f; + } + + for (i = 0; i < SDL_arraysize(formats); ++i) { + SDL_AudioSpec src_spec, tmp_spec; + Uint64 convert_begin, convert_end; + Uint8 *tmp_data, *dst_data; + int tmp_len, dst_len; + int ret; + + SDL_AudioFormat format = formats[i]; + const char* format_name = format_names[i]; + + /* Formats with > 23 bits can represent every value exactly */ + float min_delta = 1.0f; + float max_delta = -1.0f; + + /* Subtract 1 bit to account for sign */ + int bits = SDL_AUDIO_BITSIZE(format) - 1; + float target_max_delta = (bits > 23) ? 0.0f : (1.0f / (float)(1 << bits)); + float target_min_delta = -target_max_delta; + + src_spec.format = SDL_AUDIO_F32; + src_spec.channels = 1; + src_spec.freq = 44100; + + tmp_spec.format = format; + tmp_spec.channels = 1; + tmp_spec.freq = 44100; + + convert_begin = SDL_GetPerformanceCounter(); + + tmp_data = NULL; + tmp_len = 0; + ret = SDL_ConvertAudioSamples(&src_spec, (const Uint8*) src_data, src_len, &tmp_spec, &tmp_data, &tmp_len); + SDLTest_AssertCheck(ret == 0, "Expected SDL_ConvertAudioSamples(F32->%s) to succeed", format_name); + if (ret != 0) { + SDL_free(src_data); + return TEST_ABORTED; + } + + dst_data = NULL; + dst_len = 0; + ret = SDL_ConvertAudioSamples(&tmp_spec, tmp_data, tmp_len, &src_spec, &dst_data, &dst_len); + SDLTest_AssertCheck(ret == 0, "Expected SDL_ConvertAudioSamples(%s->F32) to succeed", format_name); + if (ret != 0) { + SDL_free(tmp_data); + SDL_free(src_data); + return TEST_ABORTED; + } + + convert_end = SDL_GetPerformanceCounter(); + SDLTest_Log("Conversion via %s took %f seconds.", format_name, ((double)(convert_end - convert_begin)) / SDL_GetPerformanceFrequency()); + + SDL_free(tmp_data); + + for (j = 0; j < src_num; ++j) { + float x = src_data[j]; + float y = ((float*)dst_data)[j]; + float d = SDL_clamp(x, -1.0f, 1.0f) - y; + + min_delta = SDL_min(min_delta, d); + max_delta = SDL_max(max_delta, d); + } + + SDLTest_AssertCheck(min_delta >= target_min_delta, "%s has min delta of %+f, should be >= %+f", format_name, min_delta, target_min_delta); + SDLTest_AssertCheck(max_delta <= target_max_delta, "%s has max delta of %+f, should be <= %+f", format_name, max_delta, target_max_delta); + + SDL_free(dst_data); + } + + SDL_free(src_data); + + return TEST_COMPLETED; +} + +/** + * \brief Check accuracy when switching between formats + * + * \sa SDL_SetAudioStreamFormat + */ +static int audio_formatChange(void *arg) +{ + int i; + SDL_AudioSpec spec1, spec2, spec3; + int frames_1, frames_2, frames_3; + int length_1, length_2, length_3; + int retval = 0; + int status = TEST_ABORTED; + float* buffer_1 = NULL; + float* buffer_2 = NULL; + float* buffer_3 = NULL; + SDL_AudioStream* stream = NULL; + double max_error = 0; + double sum_squared_error = 0; + double sum_squared_value = 0; + double signal_to_noise = 0; + double target_max_error = 0.02; + double target_signal_to_noise = 75.0; + int sine_freq = 500; + + spec1.format = SDL_AUDIO_F32; + spec1.channels = 1; + spec1.freq = 20000; + + spec2.format = SDL_AUDIO_F32; + spec2.channels = 1; + spec2.freq = 40000; + + spec3.format = SDL_AUDIO_F32; + spec3.channels = 1; + spec3.freq = 80000; + + frames_1 = spec1.freq; + frames_2 = spec2.freq; + frames_3 = spec3.freq * 2; + + length_1 = (int)(frames_1 * sizeof(*buffer_1)); + buffer_1 = (float*) SDL_malloc(length_1); + if (!SDLTest_AssertCheck(buffer_1 != NULL, "Expected buffer_1 to be created.")) { + goto cleanup; + } + + length_2 = (int)(frames_2 * sizeof(*buffer_2)); + buffer_2 = (float*) SDL_malloc(length_2); + if (!SDLTest_AssertCheck(buffer_2 != NULL, "Expected buffer_2 to be created.")) { + goto cleanup; + } + + length_3 = (int)(frames_3 * sizeof(*buffer_3)); + buffer_3 = (float*) SDL_malloc(length_3); + if (!SDLTest_AssertCheck(buffer_3 != NULL, "Expected buffer_3 to be created.")) { + goto cleanup; + } + + for (i = 0; i < frames_1; ++i) { + buffer_1[i] = (float) sine_wave_sample(i, spec1.freq, sine_freq, 0.0f); + } + + for (i = 0; i < frames_2; ++i) { + buffer_2[i] = (float) sine_wave_sample(i, spec2.freq, sine_freq, 0.0f); + } + + stream = SDL_CreateAudioStream(NULL, NULL); + if (!SDLTest_AssertCheck(stream != NULL, "Expected SDL_CreateAudioStream to succeed")) { + goto cleanup; + } + + retval = SDL_SetAudioStreamFormat(stream, &spec1, &spec3); + if (!SDLTest_AssertCheck(retval == 0, "Expected SDL_SetAudioStreamFormat(spec1, spec3) to succeed")) { + goto cleanup; + } + + retval = SDL_GetAudioStreamAvailable(stream); + if (!SDLTest_AssertCheck(retval == 0, "Expected SDL_GetAudioStreamAvailable return 0")) { + goto cleanup; + } + + retval = SDL_PutAudioStreamData(stream, buffer_1, length_1); + if (!SDLTest_AssertCheck(retval == 0, "Expected SDL_PutAudioStreamData(buffer_1) to succeed")) { + goto cleanup; + } + + retval = SDL_FlushAudioStream(stream); + if (!SDLTest_AssertCheck(retval == 0, "Expected SDL_FlushAudioStream to succeed")) { + goto cleanup; + } + + retval = SDL_SetAudioStreamFormat(stream, &spec2, &spec3); + if (!SDLTest_AssertCheck(retval == 0, "Expected SDL_SetAudioStreamFormat(spec2, spec3) to succeed")) { + goto cleanup; + } + + retval = SDL_PutAudioStreamData(stream, buffer_2, length_2); + if (!SDLTest_AssertCheck(retval == 0, "Expected SDL_PutAudioStreamData(buffer_1) to succeed")) { + goto cleanup; + } + + retval = SDL_FlushAudioStream(stream); + if (!SDLTest_AssertCheck(retval == 0, "Expected SDL_FlushAudioStream to succeed")) { + goto cleanup; + } + + retval = SDL_GetAudioStreamAvailable(stream); + if (!SDLTest_AssertCheck(retval == length_3, "Expected SDL_GetAudioStreamAvailable to return %i, got %i", length_3, retval)) { + goto cleanup; + } + + retval = SDL_GetAudioStreamData(stream, buffer_3, length_3); + if (!SDLTest_AssertCheck(retval == length_3, "Expected SDL_GetAudioStreamData to return %i, got %i", length_3, retval)) { + goto cleanup; + } + + retval = SDL_GetAudioStreamAvailable(stream); + if (!SDLTest_AssertCheck(retval == 0, "Expected SDL_GetAudioStreamAvailable to return 0")) { + goto cleanup; + } + + for (i = 0; i < frames_3; ++i) { + const float output = buffer_3[i]; + const float target = (float) sine_wave_sample(i, spec3.freq, sine_freq, 0.0f); + const double error = SDL_fabs(target - output); + max_error = SDL_max(max_error, error); + sum_squared_error += error * error; + sum_squared_value += target * target; + } + + signal_to_noise = 10 * SDL_log10(sum_squared_value / sum_squared_error); /* decibel */ + SDLTest_AssertCheck(isfinite(sum_squared_value), "Sum of squared target should be finite."); + SDLTest_AssertCheck(isfinite(sum_squared_error), "Sum of squared error should be finite."); + /* Infinity is theoretically possible when there is very little to no noise */ + SDLTest_AssertCheck(!isnan(signal_to_noise), "Signal-to-noise ratio should not be NaN."); + SDLTest_AssertCheck(isfinite(max_error), "Maximum conversion error should be finite."); + SDLTest_AssertCheck(signal_to_noise >= target_signal_to_noise, "Conversion signal-to-noise ratio %f dB should be no less than %f dB.", + signal_to_noise, target_signal_to_noise); + SDLTest_AssertCheck(max_error <= target_max_error, "Maximum conversion error %f should be no more than %f.", + max_error, target_max_error); + + status = TEST_COMPLETED; + +cleanup: + SDL_free(buffer_1); + SDL_free(buffer_2); + SDL_free(buffer_3); + SDL_DestroyAudioStream(stream); + + return status; +} +/* ================= Test Case References ================== */ + +/* Audio test cases */ +static const SDLTest_TestCaseReference audioTest1 = { + audio_enumerateAndNameAudioDevices, "audio_enumerateAndNameAudioDevices", "Enumerate and name available audio devices (output and capture)", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference audioTest2 = { + audio_enumerateAndNameAudioDevicesNegativeTests, "audio_enumerateAndNameAudioDevicesNegativeTests", "Negative tests around enumeration and naming of audio devices.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference audioTest3 = { + audio_printAudioDrivers, "audio_printAudioDrivers", "Checks available audio driver names.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference audioTest4 = { + audio_printCurrentAudioDriver, "audio_printCurrentAudioDriver", "Checks current audio driver name with initialized audio.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference audioTest5 = { + audio_buildAudioStream, "audio_buildAudioStream", "Builds various audio conversion structures.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference audioTest6 = { + audio_buildAudioStreamNegative, "audio_buildAudioStreamNegative", "Checks calls with invalid input to SDL_CreateAudioStream", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference audioTest7 = { + audio_getAudioStatus, "audio_getAudioStatus", "Checks current audio status.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference audioTest8 = { + audio_openCloseAndGetAudioStatus, "audio_openCloseAndGetAudioStatus", "Opens and closes audio device and get audio status.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference audioTest9 = { + audio_lockUnlockOpenAudioDevice, "audio_lockUnlockOpenAudioDevice", "Locks and unlocks an open audio device.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference audioTest10 = { + audio_convertAudio, "audio_convertAudio", "Convert audio using available formats.", TEST_ENABLED +}; + +/* TODO: enable test when SDL_AudioDeviceConnected has been implemented. */ + +static const SDLTest_TestCaseReference audioTest11 = { + audio_openCloseAudioDeviceConnected, "audio_openCloseAudioDeviceConnected", "Opens and closes audio device and get connected status.", TEST_DISABLED +}; + +static const SDLTest_TestCaseReference audioTest12 = { + audio_quitInitAudioSubSystem, "audio_quitInitAudioSubSystem", "Quit and re-init audio subsystem.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference audioTest13 = { + audio_initQuitAudio, "audio_initQuitAudio", "Init and quit audio drivers directly.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference audioTest14 = { + audio_initOpenCloseQuitAudio, "audio_initOpenCloseQuitAudio", "Cycle through init, open, close and quit with various audio specs.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference audioTest15 = { + audio_pauseUnpauseAudio, "audio_pauseUnpauseAudio", "Pause and Unpause audio for various audio specs while testing callback.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference audioTest16 = { + audio_resampleLoss, "audio_resampleLoss", "Check signal-to-noise ratio and maximum error of audio resampling.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference audioTest17 = { + audio_convertAccuracy, "audio_convertAccuracy", "Check accuracy converting between audio formats.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference audioTest18 = { + audio_formatChange, "audio_formatChange", "Check handling of format changes.", TEST_ENABLED +}; + +/* Sequence of Audio test cases */ +static const SDLTest_TestCaseReference *audioTests[] = { + &audioTest1, &audioTest2, &audioTest3, &audioTest4, &audioTest5, &audioTest6, + &audioTest7, &audioTest8, &audioTest9, &audioTest10, &audioTest11, + &audioTest12, &audioTest13, &audioTest14, &audioTest15, &audioTest16, + &audioTest17, &audioTest18, NULL +}; + +/* Audio test suite (global) */ +SDLTest_TestSuiteReference audioTestSuite = { + "Audio", + audioSetUp, + audioTests, + audioTearDown +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_clipboard.c b/vendor/sdl-3.0.0/test/testautomation_clipboard.c new file mode 100644 index 0000000..c0be196 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_clipboard.c @@ -0,0 +1,567 @@ +/** + * New/updated tests: aschiffler at ferzkopp dot net + */ +#include +#include +#include "testautomation_suites.h" + +/* ================= Test Case Implementation ================== */ + +static int clipboard_update_count; + +static int ClipboardEventWatch(void *userdata, SDL_Event *event) +{ + if (event->type == SDL_EVENT_CLIPBOARD_UPDATE) { + ++clipboard_update_count; + } + return 0; +} + +enum +{ + TEST_MIME_TYPE_TEXT, + TEST_MIME_TYPE_CUSTOM_TEXT, + TEST_MIME_TYPE_DATA, + NUM_TEST_MIME_TYPES +}; +static const char *test_mime_types[] = { + "text/plain;charset=utf-8", + "test/text", + "test/data" +}; +SDL_COMPILE_TIME_ASSERT(test_mime_types, SDL_arraysize(test_mime_types) == NUM_TEST_MIME_TYPES); + +typedef struct +{ + const void *data; + size_t data_size; +} TestClipboardData; + +static int clipboard_callback_count; + +static const void *ClipboardDataCallback(void *userdata, const char *mime_type, size_t *length) +{ + TestClipboardData *test_data = (TestClipboardData *)userdata; + + ++clipboard_callback_count; + + if (SDL_strcmp(mime_type, test_mime_types[TEST_MIME_TYPE_TEXT]) == 0) { + /* We're returning the string "TEST", with no termination */ + static const char *test_text = "XXX TEST XXX"; + *length = 4; + return test_text + 4; + } + if (SDL_strcmp(mime_type, test_mime_types[TEST_MIME_TYPE_CUSTOM_TEXT]) == 0) { + /* We're returning the string "CUSTOM", with no termination */ + static const char *custom_text = "XXX CUSTOM XXX"; + *length = 6; + return custom_text + 4; + } + if (SDL_strcmp(mime_type, test_mime_types[TEST_MIME_TYPE_DATA]) == 0) { + *length = test_data->data_size; + return test_data->data; + } + return NULL; +} + +static int clipboard_cleanup_count; + +static void ClipboardCleanupCallback(void *userdata) +{ + ++clipboard_cleanup_count; +} + +/* Test case functions */ + +/** + * \brief End-to-end test of SDL_xyzClipboardData functions + * \sa SDL_HasClipboardData + * \sa SDL_GetClipboardData + * \sa SDL_SetClipboardData + */ +static int clipboard_testClipboardDataFunctions(void *arg) +{ + int result = -1; + SDL_bool boolResult; + int last_clipboard_update_count; + int last_clipboard_callback_count; + int last_clipboard_cleanup_count; + void *data; + size_t size; + char *text; + const char *expected_text; + + TestClipboardData test_data1 = { + &test_data1, + sizeof(test_data1) + }; + TestClipboardData test_data2 = { + &last_clipboard_callback_count, + sizeof(last_clipboard_callback_count) + }; + + SDL_AddEventWatch(ClipboardEventWatch, NULL); + + /* Test clearing clipboard data */ + result = SDL_ClearClipboardData(); + SDLTest_AssertCheck( + result == 0, + "Validate SDL_ClearClipboardData result, expected 0, got %i", + result); + + /* Test clearing clipboard data when it's already clear */ + last_clipboard_update_count = clipboard_update_count; + result = SDL_ClearClipboardData(); + SDLTest_AssertCheck( + result == 0, + "Validate SDL_ClearClipboardData result, expected 0, got %i", + result); + SDLTest_AssertCheck( + clipboard_update_count == last_clipboard_update_count, + "Verify clipboard update unchanged, got %d", + clipboard_update_count - last_clipboard_update_count); + + /* Validate error handling */ + last_clipboard_update_count = clipboard_update_count; + result = SDL_SetClipboardData(NULL, NULL, NULL, test_mime_types, SDL_arraysize(test_mime_types)); + SDLTest_AssertCheck( + result == -1, + "Validate SDL_SetClipboardData(invalid) result, expected -1, got %i", + result); + SDLTest_AssertCheck( + clipboard_update_count == last_clipboard_update_count, + "Verify clipboard update count unchanged, got %d", + clipboard_update_count - last_clipboard_update_count); + + last_clipboard_update_count = clipboard_update_count; + result = SDL_SetClipboardData(ClipboardDataCallback, ClipboardCleanupCallback, NULL, NULL, 0); + SDLTest_AssertCheck( + result == -1, + "Validate SDL_SetClipboardData(invalid) result, expected -1, got %i", + result); + SDLTest_AssertCheck( + clipboard_update_count == last_clipboard_update_count, + "Verify clipboard update count unchanged, got %d", + clipboard_update_count - last_clipboard_update_count); + + /* Test setting and getting clipboard data */ + last_clipboard_update_count = clipboard_update_count; + last_clipboard_callback_count = clipboard_callback_count; + last_clipboard_cleanup_count = clipboard_cleanup_count; + result = SDL_SetClipboardData(ClipboardDataCallback, ClipboardCleanupCallback, &test_data1, test_mime_types, SDL_arraysize(test_mime_types)); + SDLTest_AssertCheck( + result == 0, + "Validate SDL_SetClipboardData(test_data1) result, expected 0, got %i", + result); + SDLTest_AssertCheck( + clipboard_update_count == last_clipboard_update_count + 1, + "Verify clipboard update count incremented by 1, got %d", + clipboard_update_count - last_clipboard_update_count); + SDLTest_AssertCheck( + clipboard_cleanup_count == last_clipboard_cleanup_count, + "Verify clipboard cleanup count unchanged, got %d", + clipboard_cleanup_count - last_clipboard_cleanup_count); + + expected_text = "TEST"; + text = SDL_GetClipboardText(); + SDLTest_AssertCheck( + text && SDL_strcmp(text, expected_text) == 0, + "Verify clipboard text, expected \"%s\", got \"%s\"", + expected_text, text); + + boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_TEXT]); + SDLTest_AssertCheck( + boolResult, + "Verify has test text data, expected SDL_TRUE, got SDL_FALSE"); + text = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_TEXT], &size); + SDLTest_AssertCheck( + text && text[size] == '\0', + "Verify test text data, expected null termination, got %c", + text[size]); + SDLTest_AssertCheck( + text && SDL_strcmp(text, expected_text) == 0, + "Verify test text data, expected \"%s\", got \"%s\"", + expected_text, text); + SDLTest_AssertCheck( + size == SDL_strlen(expected_text), + "Verify test text size, expected %d, got %d", + (int)SDL_strlen(expected_text), (int)size); + SDL_free(text); + + expected_text = "CUSTOM"; + boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_CUSTOM_TEXT]); + SDLTest_AssertCheck( + boolResult, + "Verify has test text data, expected SDL_TRUE, got SDL_FALSE"); + text = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_CUSTOM_TEXT], &size); + SDLTest_AssertCheck( + text && text[size] == '\0', + "Verify test text data, expected null termination, got %c", + text[size]); + SDLTest_AssertCheck( + text && SDL_strcmp(text, expected_text) == 0, + "Verify test text data, expected \"%s\", got \"%s\"", + expected_text, text); + SDLTest_AssertCheck( + size == SDL_strlen(expected_text), + "Verify test text size, expected %d, got %d", + (int)SDL_strlen(expected_text), (int)size); + SDL_free(text); + + boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_DATA]); + SDLTest_AssertCheck( + boolResult, + "Verify has test text data, expected SDL_TRUE, got SDL_FALSE"); + data = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_DATA], &size); + SDLTest_AssertCheck( + SDL_memcmp(data, test_data1.data, test_data1.data_size) == 0, + "Verify test data"); + SDLTest_AssertCheck( + size == test_data1.data_size, + "Verify test data size, expected %d, got %d", + (int)test_data1.data_size, (int)size); + SDL_free(data); + + boolResult = SDL_HasClipboardData("test/invalid"); + SDLTest_AssertCheck( + !boolResult, + "Verify has test text data, expected SDL_FALSE, got SDL_TRUE"); + data = SDL_GetClipboardData("test/invalid", &size); + SDLTest_AssertCheck( + data == NULL, + "Verify invalid data, expected NULL, got %p", + data); + SDLTest_AssertCheck( + size == 0, + "Verify invalid data size, expected 0, got %d", + (int)size); + SDL_free(data); + +#if 0 /* There's no guarantee how or when the callback is called */ + SDLTest_AssertCheck( + (clipboard_callback_count == last_clipboard_callback_count + 3) || + (clipboard_callback_count == last_clipboard_callback_count + 4), + "Verify clipboard callback count incremented by 3 or 4, got %d", + clipboard_callback_count - last_clipboard_callback_count); +#endif + + /* Test setting and getting clipboard data again */ + last_clipboard_update_count = clipboard_update_count; + last_clipboard_callback_count = clipboard_callback_count; + last_clipboard_cleanup_count = clipboard_cleanup_count; + result = SDL_SetClipboardData(ClipboardDataCallback, ClipboardCleanupCallback, &test_data2, test_mime_types, SDL_arraysize(test_mime_types)); + SDLTest_AssertCheck( + result == 0, + "Validate SDL_SetClipboardData(test_data2) result, expected 0, got %i", + result); + SDLTest_AssertCheck( + clipboard_update_count == last_clipboard_update_count + 1, + "Verify clipboard update count incremented by 1, got %d", + clipboard_update_count - last_clipboard_update_count); + SDLTest_AssertCheck( + clipboard_cleanup_count == last_clipboard_cleanup_count + 1, + "Verify clipboard cleanup count incremented by 1, got %d", + clipboard_cleanup_count - last_clipboard_cleanup_count); + + expected_text = "TEST"; + text = SDL_GetClipboardText(); + SDLTest_AssertCheck( + text && SDL_strcmp(text, expected_text) == 0, + "Verify clipboard text, expected \"%s\", got \"%s\"", + expected_text, text); + + boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_TEXT]); + SDLTest_AssertCheck( + boolResult, + "Verify has test text data, expected SDL_TRUE, got SDL_FALSE"); + text = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_TEXT], &size); + SDLTest_AssertCheck( + text && text[size] == '\0', + "Verify test text data, expected null termination, got %c", + text[size]); + SDLTest_AssertCheck( + text && SDL_strcmp(text, expected_text) == 0, + "Verify test text data, expected \"%s\", got \"%s\"", + expected_text, text); + SDLTest_AssertCheck( + size == SDL_strlen(expected_text), + "Verify test text size, expected %d, got %d", + (int)SDL_strlen(expected_text), (int)size); + SDL_free(text); + + expected_text = "CUSTOM"; + boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_CUSTOM_TEXT]); + SDLTest_AssertCheck( + boolResult, + "Verify has test text data, expected SDL_TRUE, got SDL_FALSE"); + text = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_CUSTOM_TEXT], &size); + SDLTest_AssertCheck( + text && text[size] == '\0', + "Verify test text data, expected null termination, got %c", + text[size]); + SDLTest_AssertCheck( + text && SDL_strcmp(text, expected_text) == 0, + "Verify test text data, expected \"%s\", got \"%s\"", + expected_text, text); + SDLTest_AssertCheck( + size == SDL_strlen(expected_text), + "Verify test text size, expected %d, got %d", + (int)SDL_strlen(expected_text), (int)size); + SDL_free(text); + + data = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_DATA], &size); + SDLTest_AssertCheck( + SDL_memcmp(data, test_data2.data, test_data2.data_size) == 0, + "Verify test data"); + SDLTest_AssertCheck( + size == test_data2.data_size, + "Verify test data size, expected %d, got %d", + (int)test_data2.data_size, (int)size); + SDL_free(data); + + data = SDL_GetClipboardData("test/invalid", &size); + SDLTest_AssertCheck( + data == NULL, + "Verify invalid data, expected NULL, got %p", + data); + SDLTest_AssertCheck( + size == 0, + "Verify invalid data size, expected 0, got %d", + (int)size); + SDL_free(data); + +#if 0 /* There's no guarantee how or when the callback is called */ + SDLTest_AssertCheck( + (clipboard_callback_count == last_clipboard_callback_count + 3) || + (clipboard_callback_count == last_clipboard_callback_count + 4), + "Verify clipboard callback count incremented by 3 or 4, got %d", + clipboard_callback_count - last_clipboard_callback_count); +#endif + + /* Test clearing clipboard data when has data */ + last_clipboard_update_count = clipboard_update_count; + last_clipboard_cleanup_count = clipboard_cleanup_count; + result = SDL_ClearClipboardData(); + SDLTest_AssertCheck( + result == 0, + "Validate SDL_ClearClipboardData result, expected 0, got %i", + result); + SDLTest_AssertCheck( + clipboard_update_count == last_clipboard_update_count + 1, + "Verify clipboard update count incremented by 1, got %d", + clipboard_update_count - last_clipboard_update_count); + SDLTest_AssertCheck( + clipboard_cleanup_count == last_clipboard_cleanup_count + 1, + "Verify clipboard cleanup count incremented by 1, got %d", + clipboard_cleanup_count - last_clipboard_cleanup_count); + boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_TEXT]); + SDLTest_AssertCheck( + !boolResult, + "Verify has test text data, expected SDL_FALSE, got SDL_TRUE"); + boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_DATA]); + SDLTest_AssertCheck( + !boolResult, + "Verify has test text data, expected SDL_FALSE, got SDL_TRUE"); + boolResult = SDL_HasClipboardData("test/invalid"); + SDLTest_AssertCheck( + !boolResult, + "Verify has test text data, expected SDL_FALSE, got SDL_TRUE"); + + SDL_DelEventWatch(ClipboardEventWatch, NULL); + + return TEST_COMPLETED; +} + +/** + * \brief End-to-end test of SDL_xyzClipboardText functions + * \sa SDL_HasClipboardText + * \sa SDL_GetClipboardText + * \sa SDL_SetClipboardText + */ +static int clipboard_testClipboardTextFunctions(void *arg) +{ + char *textRef = SDLTest_RandomAsciiString(); + char *text = SDL_strdup(textRef); + SDL_bool boolResult; + int intResult; + char *charResult; + int last_clipboard_update_count; + + SDL_AddEventWatch(ClipboardEventWatch, NULL); + + /* Empty clipboard text */ + last_clipboard_update_count = clipboard_update_count; + intResult = SDL_SetClipboardText(NULL); + SDLTest_AssertCheck( + intResult == 0, + "Verify result from SDL_SetClipboardText(NULL), expected 0, got %i", + intResult); + charResult = SDL_GetClipboardText(); + SDLTest_AssertCheck( + charResult && SDL_strcmp(charResult, "") == 0, + "Verify SDL_GetClipboardText returned \"\", got %s", + charResult); + SDL_free(charResult); + boolResult = SDL_HasClipboardText(); + SDLTest_AssertCheck( + boolResult == SDL_FALSE, + "Verify SDL_HasClipboardText returned SDL_FALSE, got %s", + (boolResult) ? "SDL_TRUE" : "SDL_FALSE"); + SDLTest_AssertCheck( + clipboard_update_count == last_clipboard_update_count, + "Verify clipboard update unchanged, got %d", + clipboard_update_count - last_clipboard_update_count); + + + /* Set clipboard text */ + last_clipboard_update_count = clipboard_update_count; + intResult = SDL_SetClipboardText(text); + SDLTest_AssertCheck( + intResult == 0, + "Verify result from SDL_SetClipboardText(%s), expected 0, got %i", text, + intResult); + SDLTest_AssertCheck( + SDL_strcmp(textRef, text) == 0, + "Verify SDL_SetClipboardText did not modify input string, expected '%s', got '%s'", + textRef, text); + boolResult = SDL_HasClipboardText(); + SDLTest_AssertCheck( + boolResult == SDL_TRUE, + "Verify SDL_HasClipboardText returned SDL_TRUE, got %s", + (boolResult) ? "SDL_TRUE" : "SDL_FALSE"); + charResult = SDL_GetClipboardText(); + SDLTest_AssertCheck( + charResult && SDL_strcmp(textRef, charResult) == 0, + "Verify SDL_GetClipboardText returned correct string, expected '%s', got '%s'", + textRef, charResult); + SDL_free(charResult); + SDLTest_AssertCheck( + clipboard_update_count == last_clipboard_update_count + 1, + "Verify clipboard update count incremented by 1, got %d", + clipboard_update_count - last_clipboard_update_count); + + /* Reset clipboard text */ + intResult = SDL_SetClipboardText(NULL); + SDLTest_AssertCheck( + intResult == 0, + "Verify result from SDL_SetClipboardText(NULL), expected 0, got %i", + intResult); + + /* Cleanup */ + SDL_free(textRef); + SDL_free(text); + + SDL_DelEventWatch(ClipboardEventWatch, NULL); + + return TEST_COMPLETED; +} + +/** + * \brief End-to-end test of SDL_xyzPrimarySelectionText functions + * \sa SDL_HasPrimarySelectionText + * \sa SDL_GetPrimarySelectionText + * \sa SDL_SetPrimarySelectionText + */ +static int clipboard_testPrimarySelectionTextFunctions(void *arg) +{ + char *textRef = SDLTest_RandomAsciiString(); + char *text = SDL_strdup(textRef); + SDL_bool boolResult; + int intResult; + char *charResult; + int last_clipboard_update_count; + + SDL_AddEventWatch(ClipboardEventWatch, NULL); + + /* Empty primary selection */ + last_clipboard_update_count = clipboard_update_count; + intResult = SDL_SetPrimarySelectionText(NULL); + SDLTest_AssertCheck( + intResult == 0, + "Verify result from SDL_SetPrimarySelectionText(NULL), expected 0, got %i", + intResult); + charResult = SDL_GetPrimarySelectionText(); + SDLTest_AssertCheck( + charResult && SDL_strcmp(charResult, "") == 0, + "Verify SDL_GetPrimarySelectionText returned \"\", got %s", + charResult); + SDL_free(charResult); + boolResult = SDL_HasPrimarySelectionText(); + SDLTest_AssertCheck( + boolResult == SDL_FALSE, + "Verify SDL_HasPrimarySelectionText returned SDL_FALSE, got %s", + (boolResult) ? "SDL_TRUE" : "SDL_FALSE"); + SDLTest_AssertCheck( + clipboard_update_count == last_clipboard_update_count + 1, + "Verify clipboard update count incremented by 1, got %d", + clipboard_update_count - last_clipboard_update_count); + + /* Set primary selection */ + last_clipboard_update_count = clipboard_update_count; + intResult = SDL_SetPrimarySelectionText(text); + SDLTest_AssertCheck( + intResult == 0, + "Verify result from SDL_SetPrimarySelectionText(%s), expected 0, got %i", text, + intResult); + SDLTest_AssertCheck( + SDL_strcmp(textRef, text) == 0, + "Verify SDL_SetPrimarySelectionText did not modify input string, expected '%s', got '%s'", + textRef, text); + boolResult = SDL_HasPrimarySelectionText(); + SDLTest_AssertCheck( + boolResult == SDL_TRUE, + "Verify SDL_HasPrimarySelectionText returned SDL_TRUE, got %s", + (boolResult) ? "SDL_TRUE" : "SDL_FALSE"); + charResult = SDL_GetPrimarySelectionText(); + SDLTest_AssertCheck( + charResult && SDL_strcmp(textRef, charResult) == 0, + "Verify SDL_GetPrimarySelectionText returned correct string, expected '%s', got '%s'", + textRef, charResult); + SDL_free(charResult); + SDLTest_AssertCheck( + clipboard_update_count == last_clipboard_update_count + 1, + "Verify clipboard update count incremented by 1, got %d", + clipboard_update_count - last_clipboard_update_count); + + /* Reset primary selection */ + intResult = SDL_SetPrimarySelectionText(NULL); + SDLTest_AssertCheck( + intResult == 0, + "Verify result from SDL_SetPrimarySelectionText(NULL), expected 0, got %i", + intResult); + + /* Cleanup */ + SDL_free(textRef); + SDL_free(text); + + SDL_DelEventWatch(ClipboardEventWatch, NULL); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +static const SDLTest_TestCaseReference clipboardTest1 = { + (SDLTest_TestCaseFp)clipboard_testClipboardDataFunctions, "clipboard_testClipboardDataFunctions", "End-to-end test of SDL_xyzClipboardData functions", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference clipboardTest2 = { + (SDLTest_TestCaseFp)clipboard_testClipboardTextFunctions, "clipboard_testClipboardTextFunctions", "End-to-end test of SDL_xyzClipboardText functions", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference clipboardTest3 = { + (SDLTest_TestCaseFp)clipboard_testPrimarySelectionTextFunctions, "clipboard_testPrimarySelectionTextFunctions", "End-to-end test of SDL_xyzPrimarySelectionText functions", TEST_ENABLED +}; + +/* Sequence of Clipboard test cases */ +static const SDLTest_TestCaseReference *clipboardTests[] = { + &clipboardTest1, &clipboardTest2, &clipboardTest3, NULL +}; + +/* Clipboard test suite (global) */ +SDLTest_TestSuiteReference clipboardTestSuite = { + "Clipboard", + NULL, + clipboardTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_events.c b/vendor/sdl-3.0.0/test/testautomation_events.c new file mode 100644 index 0000000..faa27b6 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_events.c @@ -0,0 +1,204 @@ +/** + * Events test suite + */ +#include +#include +#include "testautomation_suites.h" + +/* ================= Test Case Implementation ================== */ + +/* Test case functions */ + +/* Flag indicating if the userdata should be checked */ +static int g_userdataCheck = 0; + +/* Userdata value to check */ +static int g_userdataValue = 0; + +/* Flag indicating that the filter was called */ +static int g_eventFilterCalled = 0; + +/* Userdata values for event */ +static int g_userdataValue1 = 1; +static int g_userdataValue2 = 2; + +/* Event filter that sets some flags and optionally checks userdata */ +static int SDLCALL events_sampleNullEventFilter(void *userdata, SDL_Event *event) +{ + g_eventFilterCalled = 1; + + if (g_userdataCheck != 0) { + SDLTest_AssertCheck(userdata != NULL, "Check userdata pointer, expected: non-NULL, got: %s", (userdata != NULL) ? "non-NULL" : "NULL"); + if (userdata != NULL) { + SDLTest_AssertCheck(*(int *)userdata == g_userdataValue, "Check userdata value, expected: %i, got: %i", g_userdataValue, *(int *)userdata); + } + } + + return 0; +} + +/** + * \brief Test pumping and peeking events. + * + * \sa SDL_PumpEvents + * \sa SDL_PollEvent + */ +static int events_pushPumpAndPollUserevent(void *arg) +{ + SDL_Event event1; + SDL_Event event2; + int result; + + /* Create user event */ + event1.type = SDL_EVENT_USER; + event1.common.timestamp = 0; + event1.user.code = SDLTest_RandomSint32(); + event1.user.data1 = (void *)&g_userdataValue1; + event1.user.data2 = (void *)&g_userdataValue2; + + /* Push a user event onto the queue and force queue update */ + SDL_PushEvent(&event1); + SDLTest_AssertPass("Call to SDL_PushEvent()"); + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + + /* Poll for user event */ + result = SDL_PollEvent(&event2); + SDLTest_AssertPass("Call to SDL_PollEvent()"); + SDLTest_AssertCheck(result == 1, "Check result from SDL_PollEvent, expected: 1, got: %d", result); + + /* Need to finish getting all events and sentinel, otherwise other tests that rely on event are in bad state */ + while (SDL_PollEvent(&event2)) { + } + + return TEST_COMPLETED; +} + +/** + * \brief Adds and deletes an event watch function with NULL userdata + * + * \sa SDL_AddEventWatch + * \sa SDL_DelEventWatch + * + */ +static int events_addDelEventWatch(void *arg) +{ + SDL_Event event; + + /* Create user event */ + event.type = SDL_EVENT_USER; + event.common.timestamp = 0; + event.user.code = SDLTest_RandomSint32(); + event.user.data1 = (void *)&g_userdataValue1; + event.user.data2 = (void *)&g_userdataValue2; + + /* Disable userdata check */ + g_userdataCheck = 0; + + /* Reset event filter call tracker */ + g_eventFilterCalled = 0; + + /* Add watch */ + SDL_AddEventWatch(events_sampleNullEventFilter, NULL); + SDLTest_AssertPass("Call to SDL_AddEventWatch()"); + + /* Push a user event onto the queue and force queue update */ + SDL_PushEvent(&event); + SDLTest_AssertPass("Call to SDL_PushEvent()"); + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + SDLTest_AssertCheck(g_eventFilterCalled == 1, "Check that event filter was called"); + + /* Delete watch */ + SDL_DelEventWatch(events_sampleNullEventFilter, NULL); + SDLTest_AssertPass("Call to SDL_DelEventWatch()"); + + /* Push a user event onto the queue and force queue update */ + g_eventFilterCalled = 0; + SDL_PushEvent(&event); + SDLTest_AssertPass("Call to SDL_PushEvent()"); + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + SDLTest_AssertCheck(g_eventFilterCalled == 0, "Check that event filter was NOT called"); + + return TEST_COMPLETED; +} + +/** + * \brief Adds and deletes an event watch function with userdata + * + * \sa SDL_AddEventWatch + * \sa SDL_DelEventWatch + * + */ +static int events_addDelEventWatchWithUserdata(void *arg) +{ + SDL_Event event; + + /* Create user event */ + event.type = SDL_EVENT_USER; + event.common.timestamp = 0; + event.user.code = SDLTest_RandomSint32(); + event.user.data1 = (void *)&g_userdataValue1; + event.user.data2 = (void *)&g_userdataValue2; + + /* Enable userdata check and set a value to check */ + g_userdataCheck = 1; + g_userdataValue = SDLTest_RandomIntegerInRange(-1024, 1024); + + /* Reset event filter call tracker */ + g_eventFilterCalled = 0; + + /* Add watch */ + SDL_AddEventWatch(events_sampleNullEventFilter, (void *)&g_userdataValue); + SDLTest_AssertPass("Call to SDL_AddEventWatch()"); + + /* Push a user event onto the queue and force queue update */ + SDL_PushEvent(&event); + SDLTest_AssertPass("Call to SDL_PushEvent()"); + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + SDLTest_AssertCheck(g_eventFilterCalled == 1, "Check that event filter was called"); + + /* Delete watch */ + SDL_DelEventWatch(events_sampleNullEventFilter, (void *)&g_userdataValue); + SDLTest_AssertPass("Call to SDL_DelEventWatch()"); + + /* Push a user event onto the queue and force queue update */ + g_eventFilterCalled = 0; + SDL_PushEvent(&event); + SDLTest_AssertPass("Call to SDL_PushEvent()"); + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + SDLTest_AssertCheck(g_eventFilterCalled == 0, "Check that event filter was NOT called"); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Events test cases */ +static const SDLTest_TestCaseReference eventsTest1 = { + (SDLTest_TestCaseFp)events_pushPumpAndPollUserevent, "events_pushPumpAndPollUserevent", "Pushes, pumps and polls a user event", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference eventsTest2 = { + (SDLTest_TestCaseFp)events_addDelEventWatch, "events_addDelEventWatch", "Adds and deletes an event watch function with NULL userdata", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference eventsTest3 = { + (SDLTest_TestCaseFp)events_addDelEventWatchWithUserdata, "events_addDelEventWatchWithUserdata", "Adds and deletes an event watch function with userdata", TEST_ENABLED +}; + +/* Sequence of Events test cases */ +static const SDLTest_TestCaseReference *eventsTests[] = { + &eventsTest1, &eventsTest2, &eventsTest3, NULL +}; + +/* Events test suite (global) */ +SDLTest_TestSuiteReference eventsTestSuite = { + "Events", + NULL, + eventsTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_guid.c b/vendor/sdl-3.0.0/test/testautomation_guid.c new file mode 100644 index 0000000..1de1756 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_guid.c @@ -0,0 +1,172 @@ +/** + * GUID test suite + */ + +#include +#include +#include "testautomation_suites.h" + +#ifdef HAVE_STDINT_H +#include +#endif + +/* ================= Test Case Implementation ================== */ + +/* Helper functions */ + +#define NUM_TEST_GUIDS 5 + +#ifndef UINT64_C +#ifdef _MSC_VER +#define UINT64_C(x) x##ui64 +#elif defined(_LP64) +#define UINT64_C(x) x##UL +#else +#define UINT64_C(x) x##ULL +#endif +#endif + +static struct +{ + char *str; + Uint64 upper, lower; +} test_guids[NUM_TEST_GUIDS] = { + { "0000000000000000" + "ffffffffffffffff", + UINT64_C(0x0000000000000000), UINT64_C(0xffffffffffffffff) }, + { "0011223344556677" + "8091a2b3c4d5e6f0", + UINT64_C(0x0011223344556677), UINT64_C(0x8091a2b3c4d5e6f0) }, + { "a011223344556677" + "8091a2b3c4d5e6f0", + UINT64_C(0xa011223344556677), UINT64_C(0x8091a2b3c4d5e6f0) }, + { "a011223344556677" + "8091a2b3c4d5e6f1", + UINT64_C(0xa011223344556677), UINT64_C(0x8091a2b3c4d5e6f1) }, + { "a011223344556677" + "8191a2b3c4d5e6f0", + UINT64_C(0xa011223344556677), UINT64_C(0x8191a2b3c4d5e6f0) }, +}; + +static void +upper_lower_to_bytestring(Uint8 *out, Uint64 upper, Uint64 lower) +{ + Uint64 values[2]; + int i, k; + + values[0] = upper; + values[1] = lower; + + for (i = 0; i < 2; ++i) { + Uint64 v = values[i]; + + for (k = 0; k < 8; ++k) { + *out++ = v >> 56; + v <<= 8; + } + } +} + +/* Test case functions */ + +/** + * \brief Check String-to-GUID conversion + * + * \sa SDL_GUIDFromString + */ +static int +TestGuidFromString(void *arg) +{ + int i; + + SDLTest_AssertPass("Call to SDL_GUIDFromString"); + for (i = 0; i < NUM_TEST_GUIDS; ++i) { + Uint8 expected[16]; + SDL_GUID guid; + + upper_lower_to_bytestring(expected, + test_guids[i].upper, test_guids[i].lower); + + guid = SDL_GUIDFromString(test_guids[i].str); + SDLTest_AssertCheck(SDL_memcmp(expected, guid.data, 16) == 0, "GUID from string, GUID was: '%s'", test_guids[i].str); + } + + return TEST_COMPLETED; +} + +/** + * \brief Check GUID-to-String conversion + * + * \sa SDL_GUIDToString + */ +static int +TestGuidToString(void *arg) +{ + int i; + + SDLTest_AssertPass("Call to SDL_GUIDToString"); + for (i = 0; i < NUM_TEST_GUIDS; ++i) { + const int guid_str_offset = 4; + char guid_str_buf[64]; + char *guid_str = guid_str_buf + guid_str_offset; + SDL_GUID guid; + int size; + + upper_lower_to_bytestring(guid.data, + test_guids[i].upper, test_guids[i].lower); + + /* Serialise to limited-length buffers */ + for (size = 0; size <= 36; ++size) { + const Uint8 fill_char = size + 0xa0; + Uint32 expected_prefix; + Uint32 actual_prefix; + int written_size; + + SDL_memset(guid_str_buf, fill_char, sizeof(guid_str_buf)); + SDL_GUIDToString(guid, guid_str, size); + + /* Check bytes before guid_str_buf */ + expected_prefix = fill_char | (fill_char << 8) | (fill_char << 16) | (fill_char << 24); + SDL_memcpy(&actual_prefix, guid_str_buf, 4); + SDLTest_AssertCheck(expected_prefix == actual_prefix, "String buffer memory before output untouched, expected: %" SDL_PRIu32 ", got: %" SDL_PRIu32 ", at size=%d", expected_prefix, actual_prefix, size); + + /* Check that we did not overwrite too much */ + written_size = 0; + while ((guid_str[written_size] & 0xff) != fill_char && written_size < 256) { + ++written_size; + } + SDLTest_AssertCheck(written_size <= size, "Output length is within expected bounds, with length %d: wrote %d of %d permitted bytes", size, written_size, size); + if (size >= 33) { + SDLTest_AssertCheck(SDL_strcmp(guid_str, test_guids[i].str) == 0, "GUID string equality, from string: %s", test_guids[i].str); + } + } + } + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* GUID routine test cases */ +static const SDLTest_TestCaseReference guidTest1 = { + (SDLTest_TestCaseFp)TestGuidFromString, "TestGuidFromString", "Call to SDL_GUIDFromString", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference guidTest2 = { + (SDLTest_TestCaseFp)TestGuidToString, "TestGuidToString", "Call to SDL_GUIDToString", TEST_ENABLED +}; + +/* Sequence of GUID routine test cases */ +static const SDLTest_TestCaseReference *guidTests[] = { + &guidTest1, + &guidTest2, + NULL +}; + +/* GUID routine test suite (global) */ +SDLTest_TestSuiteReference guidTestSuite = { + "GUID", + NULL, + guidTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_hints.c b/vendor/sdl-3.0.0/test/testautomation_hints.c new file mode 100644 index 0000000..c1244b8 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_hints.c @@ -0,0 +1,262 @@ +/** + * Hints test suite + */ + +#include +#include +#include "testautomation_suites.h" + +static const char *HintsEnum[] = { + SDL_HINT_ACCELEROMETER_AS_JOYSTICK, + SDL_HINT_FRAMEBUFFER_ACCELERATION, + SDL_HINT_GAMECONTROLLERCONFIG, + SDL_HINT_GRAB_KEYBOARD, + SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, + SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK, + SDL_HINT_MOUSE_RELATIVE_MODE_WARP, + SDL_HINT_ORIENTATIONS, + SDL_HINT_RENDER_DIRECT3D_THREADSAFE, + SDL_HINT_RENDER_DRIVER, + SDL_HINT_RENDER_OPENGL_SHADERS, + SDL_HINT_RENDER_SCALE_QUALITY, + SDL_HINT_RENDER_VSYNC, + SDL_HINT_TIMER_RESOLUTION, + SDL_HINT_VIDEO_ALLOW_SCREENSAVER, + SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES, + SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, + SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT, + SDL_HINT_VIDEO_WIN_D3DCOMPILER, + SDL_HINT_VIDEO_X11_XRANDR, + SDL_HINT_XINPUT_ENABLED, +}; +static const char *HintsVerbose[] = { + "SDL_ACCELEROMETER_AS_JOYSTICK", + "SDL_FRAMEBUFFER_ACCELERATION", + "SDL_GAMECONTROLLERCONFIG", + "SDL_GRAB_KEYBOARD", + "SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS", + "SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK", + "SDL_MOUSE_RELATIVE_MODE_WARP", + "SDL_ORIENTATIONS", + "SDL_RENDER_DIRECT3D_THREADSAFE", + "SDL_RENDER_DRIVER", + "SDL_RENDER_OPENGL_SHADERS", + "SDL_RENDER_SCALE_QUALITY", + "SDL_RENDER_VSYNC", + "SDL_TIMER_RESOLUTION", + "SDL_VIDEO_ALLOW_SCREENSAVER", + "SDL_VIDEO_MAC_FULLSCREEN_SPACES", + "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS", + "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT", + "SDL_VIDEO_WIN_D3DCOMPILER", + "SDL_VIDEO_X11_XRANDR", + "SDL_XINPUT_ENABLED" +}; + +SDL_COMPILE_TIME_ASSERT(HintsEnum, SDL_arraysize(HintsEnum) == SDL_arraysize(HintsVerbose)); + +static const int numHintsEnum = SDL_arraysize(HintsEnum); + +/* Test case functions */ + +/** + * \brief Call to SDL_GetHint + */ +static int hints_getHint(void *arg) +{ + const char *result1; + const char *result2; + int i; + + for (i = 0; i < numHintsEnum; i++) { + result1 = SDL_GetHint(HintsEnum[i]); + SDLTest_AssertPass("Call to SDL_GetHint(%s) - using define definition", (char *)HintsEnum[i]); + result2 = SDL_GetHint(HintsVerbose[i]); + SDLTest_AssertPass("Call to SDL_GetHint(%s) - using string definition", (char *)HintsVerbose[i]); + SDLTest_AssertCheck( + (result1 == NULL && result2 == NULL) || (SDL_strcmp(result1, result2) == 0), + "Verify returned values are equal; got: result1='%s' result2='%s", + (result1 == NULL) ? "null" : result1, + (result2 == NULL) ? "null" : result2); + } + + return TEST_COMPLETED; +} + +static void SDLCALL hints_testHintChanged(void *userdata, const char *name, const char *oldValue, const char *hint) +{ + *(char **)userdata = hint ? SDL_strdup(hint) : NULL; +} + +/** + * \brief Call to SDL_SetHint + */ +static int hints_setHint(void *arg) +{ + const char *testHint = "SDL_AUTOMATED_TEST_HINT"; + const char *originalValue; + char *value; + const char *testValue; + char *callbackValue; + SDL_bool result; + int i, j; + + /* Create random values to set */ + value = SDLTest_RandomAsciiStringOfSize(10); + + for (i = 0; i < numHintsEnum; i++) { + /* Capture current value */ + originalValue = SDL_GetHint(HintsEnum[i]); + SDLTest_AssertPass("Call to SDL_GetHint(%s)", HintsEnum[i]); + + /* Copy the original value, since it will be freed when we set it again */ + originalValue = originalValue ? SDL_strdup(originalValue) : NULL; + + /* Set value (twice) */ + for (j = 1; j <= 2; j++) { + result = SDL_SetHint(HintsEnum[i], value); + SDLTest_AssertPass("Call to SDL_SetHint(%s, %s) (iteration %i)", HintsEnum[i], value, j); + SDLTest_AssertCheck( + result == SDL_TRUE || result == SDL_FALSE, + "Verify valid result was returned, got: %i", + (int)result); + testValue = SDL_GetHint(HintsEnum[i]); + SDLTest_AssertPass("Call to SDL_GetHint(%s) - using string definition", HintsVerbose[i]); + SDLTest_AssertCheck( + (SDL_strcmp(value, testValue) == 0), + "Verify returned value equals set value; got: testValue='%s' value='%s", + (testValue == NULL) ? "null" : testValue, + value); + } + + /* Reset original value */ + result = SDL_SetHint(HintsEnum[i], originalValue); + SDLTest_AssertPass("Call to SDL_SetHint(%s, originalValue)", HintsEnum[i]); + SDLTest_AssertCheck( + result == SDL_TRUE || result == SDL_FALSE, + "Verify valid result was returned, got: %i", + (int)result); + SDL_free((void *)originalValue); + } + + SDL_free(value); + + /* Set default value in environment */ + SDL_setenv(testHint, "original", 1); + + SDLTest_AssertPass("Call to SDL_GetHint() after saving and restoring hint"); + originalValue = SDL_GetHint(testHint); + value = (originalValue == NULL) ? NULL : SDL_strdup(originalValue); + SDL_SetHint(testHint, "temp"); + SDL_SetHint(testHint, value); + SDL_free(value); + testValue = SDL_GetHint(testHint); + SDLTest_AssertCheck( + testValue && SDL_strcmp(testValue, "original") == 0, + "testValue = %s, expected \"original\"", + testValue); + + SDLTest_AssertPass("Call to SDL_SetHintWithPriority(NULL, SDL_HINT_DEFAULT)"); + SDL_SetHintWithPriority(testHint, NULL, SDL_HINT_DEFAULT); + testValue = SDL_GetHint(testHint); + SDLTest_AssertCheck( + testValue && SDL_strcmp(testValue, "original") == 0, + "testValue = %s, expected \"original\"", + testValue); + + SDLTest_AssertPass("Call to SDL_SetHintWithPriority(\"temp\", SDL_HINT_OVERRIDE)"); + SDL_SetHintWithPriority(testHint, "temp", SDL_HINT_OVERRIDE); + testValue = SDL_GetHint(testHint); + SDLTest_AssertCheck( + testValue && SDL_strcmp(testValue, "temp") == 0, + "testValue = %s, expected \"temp\"", + testValue); + + SDLTest_AssertPass("Call to SDL_SetHintWithPriority(NULL, SDL_HINT_OVERRIDE)"); + SDL_SetHintWithPriority(testHint, NULL, SDL_HINT_OVERRIDE); + testValue = SDL_GetHint(testHint); + SDLTest_AssertCheck( + testValue == NULL, + "testValue = %s, expected NULL", + testValue); + + SDLTest_AssertPass("Call to SDL_ResetHint()"); + SDL_ResetHint(testHint); + testValue = SDL_GetHint(testHint); + SDLTest_AssertCheck( + testValue && SDL_strcmp(testValue, "original") == 0, + "testValue = %s, expected \"original\"", + testValue); + + /* Make sure callback functionality works past a reset */ + SDLTest_AssertPass("Call to SDL_AddHintCallback()"); + callbackValue = NULL; + SDL_AddHintCallback(testHint, hints_testHintChanged, &callbackValue); + SDLTest_AssertCheck( + callbackValue && SDL_strcmp(callbackValue, "original") == 0, + "callbackValue = %s, expected \"original\"", + callbackValue); + SDL_free(callbackValue); + + SDLTest_AssertPass("Call to SDL_SetHintWithPriority(\"temp\", SDL_HINT_OVERRIDE), using callback"); + callbackValue = NULL; + SDL_SetHintWithPriority(testHint, "temp", SDL_HINT_OVERRIDE); + SDLTest_AssertCheck( + callbackValue && SDL_strcmp(callbackValue, "temp") == 0, + "callbackValue = %s, expected \"temp\"", + callbackValue); + SDL_free(callbackValue); + + SDLTest_AssertPass("Call to SDL_ResetHint(), using callback"); + callbackValue = NULL; + SDL_ResetHint(testHint); + SDLTest_AssertCheck( + callbackValue && SDL_strcmp(callbackValue, "original") == 0, + "callbackValue = %s, expected \"original\"", + callbackValue); + SDL_free(callbackValue); + + SDLTest_AssertPass("Call to SDL_SetHintWithPriority(\"temp\", SDL_HINT_OVERRIDE), using callback after reset"); + callbackValue = NULL; + SDL_SetHintWithPriority(testHint, "temp", SDL_HINT_OVERRIDE); + SDLTest_AssertCheck( + callbackValue && SDL_strcmp(callbackValue, "temp") == 0, + "callbackValue = %s, expected \"temp\"", + callbackValue); + SDL_free(callbackValue); + + SDLTest_AssertPass("Call to SDL_ResetHint(), after clearing callback"); + callbackValue = NULL; + SDL_DelHintCallback(testHint, hints_testHintChanged, &callbackValue); + SDL_ResetHint(testHint); + SDLTest_AssertCheck( + callbackValue == NULL, + "callbackValue = %s, expected \"(null)\"", + callbackValue); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Hints test cases */ +static const SDLTest_TestCaseReference hintsTest1 = { + (SDLTest_TestCaseFp)hints_getHint, "hints_getHint", "Call to SDL_GetHint", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference hintsTest2 = { + (SDLTest_TestCaseFp)hints_setHint, "hints_setHint", "Call to SDL_SetHint", TEST_ENABLED +}; + +/* Sequence of Hints test cases */ +static const SDLTest_TestCaseReference *hintsTests[] = { + &hintsTest1, &hintsTest2, NULL +}; + +/* Hints test suite (global) */ +SDLTest_TestSuiteReference hintsTestSuite = { + "Hints", + NULL, + hintsTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_images.c b/vendor/sdl-3.0.0/test/testautomation_images.c new file mode 100644 index 0000000..389d701 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_images.c @@ -0,0 +1,5929 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +#include +#include "testautomation_images.h" + +/* GIMP RGB C-Source image dump (blit.c) */ + +static const SDLTest_SurfaceImage_t SDLTest_imageBlit = { + 80, + 60, + 3, + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0" + "\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377" + "\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377" + "\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0" + "\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0" + "\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0" + "\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0" + "\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0" + "\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0" + "\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0" + "\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377" + "\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377" + "\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377" + "\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377" + "\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377" + "\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0" + "\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0" + "\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377" + "\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0" + "\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0" + "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0" + "\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0" + "\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377" + "\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0" + "\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0" + "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0" + "\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0" + "\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377" + "\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0" + "\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0" + "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0" + "\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0" + "\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377" + "\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0" + "\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0" + "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0" + "\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0" + "\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377" + "\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0" + "\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0" + "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0" + "\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0" + "\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377" + "\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0" + "\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0" + "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0" + "\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0" + "\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377" + "\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0" + "\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0" + "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377" + "\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377" + "\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377" + "\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377" + "\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377" + "\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377" + "\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377" + "\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" + "\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377" + "\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377" + "\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377" + "\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377" + "\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377" + "\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377" + "\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377" + "\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377" + "\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377" + "\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377" + "\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377" + "\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0" + "\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0" + "\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0" + "\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0" + "\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0" + "\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0" + "\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0" + "\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0" + "\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0" + "\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0" + "\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0" + "\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0" + "\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377" + "\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0" + "\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377" + "\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0" + "\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377" + "\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377" + "\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0" + "\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0" + "\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377" + "\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0" + "\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377" + "\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377" + "\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0" + "\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0" + "\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0" + "\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0" + "\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0" + "\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\0\377\377\0" + "\377\377\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377" + "\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0" + "\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0" + "\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377" + "\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0", +}; + +/** + * \brief Returns the Blit test image as SDL_Surface. + */ +SDL_Surface *SDLTest_ImageBlit(void) +{ + SDL_Surface *surface = SDL_CreateSurfaceFrom( + (void *)SDLTest_imageBlit.pixel_data, + SDLTest_imageBlit.width, + SDLTest_imageBlit.height, + SDLTest_imageBlit.width * SDLTest_imageBlit.bytes_per_pixel, SDL_PIXELFORMAT_RGB24); + return surface; +} + +static const SDLTest_SurfaceImage_t SDLTest_imageBlitColor = { + 80, + 60, + 3, + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\0\0\24\0\0\0\0\0\0" + "\0\0(\0\0(\0\0\0\0\0\0\0\0<\0\0<\0\0\0\0\0\0\0\0P\0\0P\0\0\0\0\0\0\0\0d\0" + "\0d\0\0\0\0\0\0\0\0x\0\0x\0\0\0\0\0\0\0\0\214\0\0\214\0\0\0\0\0\0\0\0\240" + "\0\0\240\0\0\0\0\0\0\0\0\264\0\0\264\0\0\0\0\0\0\0\0\310\0\0\310\0\0\0\0" + "\0\0\0\0\334\0\0\334\0\0\0\0\0\0\0\0\360\0\0\360\0\0\360\0\0\360\0\0\360" + "\0\0\360\0\0\360\0\0\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\0\0\24\0\0\24\0\0\0\0\0(\0\0" + "(\0\0(\0\0\0\0\0<\0\0<\0\0<\0\0\0\0\0P\0\0P\0\0P\0\0\0\0\0d\0\0d\0\0d\0\0" + "\0\0\0x\0\0x\0\0x\0\0\0\0\0\214\0\0\214\0\0\214\0\0\0\0\0\240\0\0\240\0\0" + "\240\0\0\0\0\0\264\0\0\264\0\0\264\0\0\0\0\0\310\0\0\310\0\0\310\0\0\0\0" + "\0\334\0\0\334\0\0\334\0\0\0\0\0\360\0\0\360\0\0\360\0\0\360\0\0\360\0\0" + "\360\0\0\360\0\0\360\0\0\360\0\0\360\0\0\360\0\0\360\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\0\0\24\0\0\24\0\0\0" + "\0\0(\0\0(\0\0(\0\0\0\0\0<\0\0<\0\0<\0\0\0\0\0P\0\0P\0\0P\0\0\0\0\0d\0\0" + "d\0\0d\0\0\0\0\0x\0\0x\0\0x\0\0\0\0\0\214\0\0\214\0\0\214\0\0\0\0\0\240\0" + "\0\240\0\0\240\0\0\0\0\0\264\0\0\264\0\0\264\0\0\0\0\0\310\0\0\310\0\0\310" + "\0\0\0\0\0\334\0\0\334\0\0\334\0\0\0\0\0\360\0\0\360\0\0\360\0\0\360\0\0" + "\360\0\0\360\0\0\360\0\0\360\0\0\360\0\0\360\0\0\360\0\0\360\0\0\360\0\0" + "\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\0\0\360\0\0\360\0\0\360\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$\0\0$\0\0\0\0\0\0\0\0$\24\0" + "$\24\0\0\0\0\0\0\0$(\0$(\0\0\0\0\0\0\0$<\0$<\0\0\0\0\0\0\0$P\0$P\0\0\0\0" + "\0\0\0$d\0$d\0\0\0\0\0\0\0$x\0$x\0\0\0\0\0\0\0$\214\0$\214\0\0\0\0\0\0\0" + "$\240\0$\240\0\0\0\0\0\0\0$\264\0$\264\0\0\0\0\0\0\0$\310\0$\310\0\0\0\0" + "\0\0\0$\334\0$\334\0\0\0\0\0\0\0$\360\0$\360\0$\360\0$\360\0$\360\0$\360" + "\0$\360\0$\360\0\0\0\0\0\0\0\0\360\0\0\360\0\0\360\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0$\0\0$\0\0$\0\0\0\0\0$\24\0$\24\0$\24\0\0\0\0$(\0$(\0$(\0\0\0\0" + "$<\0$<\0$<\0\0\0\0$P\0$P\0$P\0\0\0\0$d\0$d\0$d\0\0\0\0$x\0$x\0$x\0\0\0\0" + "$\214\0$\214\0$\214\0\0\0\0$\240\0$\240\0$\240\0\0\0\0$\264\0$\264\0$\264" + "\0\0\0\0$\310\0$\310\0$\310\0\0\0\0$\334\0$\334\0$\334\0\0\0\0$\360\0$\360" + "\0$\360\0$\360\0$\360\0$\360\0$\360\0$\360\0$\360\0$\360\0$\360\0$\360\0" + "\0\0\0\0\360\0\0\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$\0\0$\0\0$\0\0\0\0\0$\24\0" + "$\24\0$\24\0\0\0\0$(\0$(\0$(\0\0\0\0$<\0$<\0$<\0\0\0\0$P\0$P\0$P\0\0\0\0" + "$d\0$d\0$d\0\0\0\0$x\0$x\0$x\0\0\0\0$\214\0$\214\0$\214\0\0\0\0$\240\0$\240" + "\0$\240\0\0\0\0$\264\0$\264\0$\264\0\0\0\0$\310\0$\310\0$\310\0\0\0\0$\334" + "\0$\334\0$\334\0\0\0\0$\360\0$\360\0$\360\0$\360\0$\360\0$\360\0$\360\0$" + "\360\0$\360\0$\360\0$\360\0$\360\0$\360\0$\360\0\0\0\0\0\360\0\0\360\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0$\0\0$\0\0$\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0$\360\0$\360\0$\360\0$\360\0\0\0\0\0\360\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$\0\0$\0\0$\0\0\0\0" + "\0\0\0\0H\0\0H\0\0\0\0\0\0\0\0H\24\0H\24\0\0\0\0\0\0\0H(\0H(\0\0\0\0\0\0" + "\0H<\0H<\0\0\0\0\0\0\0HP\0HP\0\0\0\0\0\0\0Hd\0Hd\0\0\0\0\0\0\0Hx\0Hx\0\0" + "\0\0\0\0\0H\214\0H\214\0\0\0\0\0\0\0H\240\0H\240\0\0\0\0\0\0\0H\264\0H\264" + "\0\0\0\0\0\0\0H\310\0H\310\0\0\0\0\0\0\0H\334\0H\334\0\0\0\0\0\0\0H\360\0" + "H\360\0H\360\0H\360\0H\360\0H\360\0H\360\0H\360\0\0\0\0\0\0\0$\360\0$\360" + "\0$\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0$\0\0$\0\0\0\0\0H\0\0H\0\0H\0\0\0\0\0H\24\0H\24\0H\24" + "\0\0\0\0H(\0H(\0H(\0\0\0\0H<\0H<\0H<\0\0\0\0HP\0HP\0HP\0\0\0\0Hd\0Hd\0Hd" + "\0\0\0\0Hx\0Hx\0Hx\0\0\0\0H\214\0H\214\0H\214\0\0\0\0H\240\0H\240\0H\240" + "\0\0\0\0H\264\0H\264\0H\264\0\0\0\0H\310\0H\310\0H\310\0\0\0\0H\334\0H\334" + "\0H\334\0\0\0\0H\360\0H\360\0H\360\0H\360\0H\360\0H\360\0H\360\0H\360\0H" + "\360\0H\360\0H\360\0H\360\0\0\0\0$\360\0$\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$\0\0$\0\0\0\0\0H\0\0" + "H\0\0H\0\0\0\0\0H\24\0H\24\0H\24\0\0\0\0H(\0H(\0H(\0\0\0\0H<\0H<\0H<\0\0" + "\0\0HP\0HP\0HP\0\0\0\0Hd\0Hd\0Hd\0\0\0\0Hx\0Hx\0Hx\0\0\0\0H\214\0H\214\0" + "H\214\0\0\0\0H\240\0H\240\0H\240\0\0\0\0H\264\0H\264\0H\264\0\0\0\0H\310" + "\0H\310\0H\310\0\0\0\0H\334\0H\334\0H\334\0\0\0\0H\360\0H\360\0H\360\0H\360" + "\0H\360\0H\360\0H\360\0H\360\0H\360\0H\360\0H\360\0H\360\0H\360\0H\360\0" + "\0\0\0$\360\0$\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0$\0\0\0\0\0H\0\0H\0\0H\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0H\360\0H\360\0H\360\0H\360\0\0\0\0$\360\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0H\0\0H\0\0H\0\0\0\0\0\0\0\0l\0\0l\0\0\0\0\0\0\0\0l\24\0l\24\0\0\0\0\0\0" + "\0l(\0l(\0\0\0\0\0\0\0l<\0l<\0\0\0\0\0\0\0lP\0lP\0\0\0\0\0\0\0ld\0ld\0\0" + "\0\0\0\0\0lx\0lx\0\0\0\0\0\0\0l\214\0l\214\0\0\0\0\0\0\0l\240\0l\240\0\0" + "\0\0\0\0\0l\264\0l\264\0\0\0\0\0\0\0l\310\0l\310\0\0\0\0\0\0\0l\334\0l\334" + "\0\0\0\0\0\0\0l\360\0l\360\0l\360\0l\360\0l\360\0l\360\0l\360\0l\360\0\0" + "\0\0\0\0\0H\360\0H\360\0H\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0H\0\0H\0\0\0\0\0l\0\0l\0\0l\0\0" + "\0\0\0l\24\0l\24\0l\24\0\0\0\0l(\0l(\0l(\0\0\0\0l<\0l<\0l<\0\0\0\0lP\0lP" + "\0lP\0\0\0\0ld\0ld\0ld\0\0\0\0lx\0lx\0lx\0\0\0\0l\214\0l\214\0l\214\0\0\0" + "\0l\240\0l\240\0l\240\0\0\0\0l\264\0l\264\0l\264\0\0\0\0l\310\0l\310\0l\310" + "\0\0\0\0l\334\0l\334\0l\334\0\0\0\0l\360\0l\360\0l\360\0l\360\0l\360\0l\360" + "\0l\360\0l\360\0l\360\0l\360\0l\360\0l\360\0\0\0\0H\360\0H\360\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0H\0" + "\0H\0\0\0\0\0l\0\0l\0\0l\0\0\0\0\0l\24\0l\24\0l\24\0\0\0\0l(\0l(\0l(\0\0" + "\0\0l<\0l<\0l<\0\0\0\0lP\0lP\0lP\0\0\0\0ld\0ld\0ld\0\0\0\0lx\0lx\0lx\0\0" + "\0\0l\214\0l\214\0l\214\0\0\0\0l\240\0l\240\0l\240\0\0\0\0l\264\0l\264\0" + "l\264\0\0\0\0l\310\0l\310\0l\310\0\0\0\0l\334\0l\334\0l\334\0\0\0\0l\360" + "\0l\360\0l\360\0l\360\0l\360\0l\360\0l\360\0l\360\0l\360\0l\360\0l\360\0" + "l\360\0l\360\0l\360\0\0\0\0H\360\0H\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0H\0\0\0\0\0l\0\0l\0\0l\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0l\360\0l\360\0l\360\0l\360" + "\0\0\0\0H\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0l\0\0l\0\0l\0\0\0\0\0\0\0\0\220\0\0\220\0\0\0\0\0\0\0" + "\0\220\24\0\220\24\0\0\0\0\0\0\0\220(\0\220(\0\0\0\0\0\0\0\220<\0\220<\0" + "\0\0\0\0\0\0\220P\0\220P\0\0\0\0\0\0\0\220d\0\220d\0\0\0\0\0\0\0\220x\0\220" + "x\0\0\0\0\0\0\0\220\214\0\220\214\0\0\0\0\0\0\0\220\240\0\220\240\0\0\0\0" + "\0\0\0\220\264\0\220\264\0\0\0\0\0\0\0\220\310\0\220\310\0\0\0\0\0\0\0\220" + "\334\0\220\334\0\0\0\0\0\0\0\220\360\0\220\360\0\220\360\0\220\360\0\220" + "\360\0\220\360\0\220\360\0\220\360\0\0\0\0\0\0\0l\360\0l\360\0l\360\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0l\0\0l\0\0\0\0\0\220\0\0\220\0\0\220\0\0\0\0\0\220\24\0\220\24\0" + "\220\24\0\0\0\0\220(\0\220(\0\220(\0\0\0\0\220<\0\220<\0\220<\0\0\0\0\220" + "P\0\220P\0\220P\0\0\0\0\220d\0\220d\0\220d\0\0\0\0\220x\0\220x\0\220x\0\0" + "\0\0\220\214\0\220\214\0\220\214\0\0\0\0\220\240\0\220\240\0\220\240\0\0" + "\0\0\220\264\0\220\264\0\220\264\0\0\0\0\220\310\0\220\310\0\220\310\0\0" + "\0\0\220\334\0\220\334\0\220\334\0\0\0\0\220\360\0\220\360\0\220\360\0\220" + "\360\0\220\360\0\220\360\0\220\360\0\220\360\0\220\360\0\220\360\0\220\360" + "\0\220\360\0\0\0\0l\360\0l\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0l\0\0l\0\0\0\0\0\220\0\0\220\0\0\220" + "\0\0\0\0\0\220\24\0\220\24\0\220\24\0\0\0\0\220(\0\220(\0\220(\0\0\0\0\220" + "<\0\220<\0\220<\0\0\0\0\220P\0\220P\0\220P\0\0\0\0\220d\0\220d\0\220d\0\0" + "\0\0\220x\0\220x\0\220x\0\0\0\0\220\214\0\220\214\0\220\214\0\0\0\0\220\240" + "\0\220\240\0\220\240\0\0\0\0\220\264\0\220\264\0\220\264\0\0\0\0\220\310" + "\0\220\310\0\220\310\0\0\0\0\220\334\0\220\334\0\220\334\0\0\0\0\220\360" + "\0\220\360\0\220\360\0\220\360\0\220\360\0\220\360\0\220\360\0\220\360\0" + "\220\360\0\220\360\0\220\360\0\220\360\0\220\360\0\220\360\0\0\0\0l\360\0" + "l\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0l\0\0\0\0\0\220\0\0\220\0\0\220\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\220\360\0\220\360\0\220\360\0\220\360\0\0\0\0l\360" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\220\0\0\220\0\0\220\0\0\0\0\0\0\0\0\264\0\0\264\0\0\0\0\0\0\0\0" + "\264\24\0\264\24\0\0\0\0\0\0\0\264(\0\264(\0\0\0\0\0\0\0\264<\0\264<\0\0" + "\0\0\0\0\0\264P\0\264P\0\0\0\0\0\0\0\264d\0\264d\0\0\0\0\0\0\0\264x\0\264" + "x\0\0\0\0\0\0\0\264\214\0\264\214\0\0\0\0\0\0\0\264\240\0\264\240\0\0\0\0" + "\0\0\0\264\264\0\264\264\0\0\0\0\0\0\0\264\310\0\264\310\0\0\0\0\0\0\0\264" + "\334\0\264\334\0\0\0\0\0\0\0\264\360\0\264\360\0\264\360\0\264\360\0\264" + "\360\0\264\360\0\264\360\0\264\360\0\0\0\0\0\0\0\220\360\0\220\360\0\220" + "\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\220\0\0\220\0\0\0\0\0\264\0\0\264\0\0\264\0\0\0\0\0\264" + "\24\0\264\24\0\264\24\0\0\0\0\264(\0\264(\0\264(\0\0\0\0\264<\0\264<\0\264" + "<\0\0\0\0\264P\0\264P\0\264P\0\0\0\0\264d\0\264d\0\264d\0\0\0\0\264x\0\264" + "x\0\264x\0\0\0\0\264\214\0\264\214\0\264\214\0\0\0\0\264\240\0\264\240\0" + "\264\240\0\0\0\0\264\264\0\264\264\0\264\264\0\0\0\0\264\310\0\264\310\0" + "\264\310\0\0\0\0\264\334\0\264\334\0\264\334\0\0\0\0\264\360\0\264\360\0" + "\264\360\0\264\360\0\264\360\0\264\360\0\264\360\0\264\360\0\264\360\0\264" + "\360\0\264\360\0\264\360\0\0\0\0\220\360\0\220\360\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\220\0\0\220\0" + "\0\0\0\0\264\0\0\264\0\0\264\0\0\0\0\0\264\24\0\264\24\0\264\24\0\0\0\0\264" + "(\0\264(\0\264(\0\0\0\0\264<\0\264<\0\264<\0\0\0\0\264P\0\264P\0\264P\0\0" + "\0\0\264d\0\264d\0\264d\0\0\0\0\264x\0\264x\0\264x\0\0\0\0\264\214\0\264" + "\214\0\264\214\0\0\0\0\264\240\0\264\240\0\264\240\0\0\0\0\264\264\0\264" + "\264\0\264\264\0\0\0\0\264\310\0\264\310\0\264\310\0\0\0\0\264\334\0\264" + "\334\0\264\334\0\0\0\0\264\360\0\264\360\0\264\360\0\264\360\0\264\360\0" + "\264\360\0\264\360\0\264\360\0\264\360\0\264\360\0\264\360\0\264\360\0\264" + "\360\0\264\360\0\0\0\0\220\360\0\220\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\220\0\0\0\0\0\264\0\0\264\0\0" + "\264\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\264\360\0" + "\264\360\0\264\360\0\264\360\0\0\0\0\220\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\264\0\0\264\0\0\264" + "\0\0\0\0\0\0\0\0\330\0\0\330\0\0\0\0\0\0\0\0\330\24\0\330\24\0\0\0\0\0\0" + "\0\330(\0\330(\0\0\0\0\0\0\0\330<\0\330<\0\0\0\0\0\0\0\330P\0\330P\0\0\0" + "\0\0\0\0\330d\0\330d\0\0\0\0\0\0\0\330x\0\330x\0\0\0\0\0\0\0\330\214\0\330" + "\214\0\0\0\0\0\0\0\330\240\0\330\240\0\0\0\0\0\0\0\330\264\0\330\264\0\0" + "\0\0\0\0\0\330\310\0\330\310\0\0\0\0\0\0\0\330\334\0\330\334\0\0\0\0\0\0" + "\0\330\360\0\330\360\0\330\360\0\330\360\0\330\360\0\330\360\0\330\360\0" + "\330\360\0\0\0\0\0\0\0\264\360\0\264\360\0\264\360\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\264\0\0" + "\264\0\0\0\0\0\330\0\0\330\0\0\330\0\0\0\0\0\330\24\0\330\24\0\330\24\0\0" + "\0\0\330(\0\330(\0\330(\0\0\0\0\330<\0\330<\0\330<\0\0\0\0\330P\0\330P\0" + "\330P\0\0\0\0\330d\0\330d\0\330d\0\0\0\0\330x\0\330x\0\330x\0\0\0\0\330\214" + "\0\330\214\0\330\214\0\0\0\0\330\240\0\330\240\0\330\240\0\0\0\0\330\264" + "\0\330\264\0\330\264\0\0\0\0\330\310\0\330\310\0\330\310\0\0\0\0\330\334" + "\0\330\334\0\330\334\0\0\0\0\330\360\0\330\360\0\330\360\0\330\360\0\330" + "\360\0\330\360\0\330\360\0\330\360\0\330\360\0\330\360\0\330\360\0\330\360" + "\0\0\0\0\264\360\0\264\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\264\0\0\264\0\0\0\0\0\330\0\0\330\0\0" + "\330\0\0\0\0\0\330\24\0\330\24\0\330\24\0\0\0\0\330(\0\330(\0\330(\0\0\0" + "\0\330<\0\330<\0\330<\0\0\0\0\330P\0\330P\0\330P\0\0\0\0\330d\0\330d\0\330" + "d\0\0\0\0\330x\0\330x\0\330x\0\0\0\0\330\214\0\330\214\0\330\214\0\0\0\0" + "\330\240\0\330\240\0\330\240\0\0\0\0\330\264\0\330\264\0\330\264\0\0\0\0" + "\330\310\0\330\310\0\330\310\0\0\0\0\330\334\0\330\334\0\330\334\0\0\0\0" + "\330\360\0\330\360\0\330\360\0\330\360\0\330\360\0\330\360\0\330\360\0\330" + "\360\0\330\360\0\330\360\0\330\360\0\330\360\0\330\360\0\330\360\0\0\0\0" + "\264\360\0\264\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\264\0\0\0\0\0\330\0\0\330\0\0\330\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\330\360\0\330\360\0\330\360\0\330" + "\360\0\0\0\0\264\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\330\0\0\330\0\0\330\0\0\0\0\0\0\0\0\374\0\0" + "\374\0\0\0\0\0\0\0\0\374\24\0\374\24\0\0\0\0\0\0\0\374(\0\374(\0\0\0\0\0" + "\0\0\374<\0\374<\0\0\0\0\0\0\0\374P\0\374P\0\0\0\0\0\0\0\374d\0\374d\0\0" + "\0\0\0\0\0\374x\0\374x\0\0\0\0\0\0\0\374\214\0\374\214\0\0\0\0\0\0\0\374" + "\240\0\374\240\0\0\0\0\0\0\0\374\264\0\374\264\0\0\0\0\0\0\0\374\310\0\374" + "\310\0\0\0\0\0\0\0\374\334\0\374\334\0\0\0\0\0\0\0\374\360\0\374\360\0\374" + "\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\330" + "\360\0\330\360\0\330\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\330\0\0\330\0\0\0\0\0\374\0\0\374" + "\0\0\374\0\0\0\0\0\374\24\0\374\24\0\374\24\0\0\0\0\374(\0\374(\0\374(\0" + "\0\0\0\374<\0\374<\0\374<\0\0\0\0\374P\0\374P\0\374P\0\0\0\0\374d\0\374d" + "\0\374d\0\0\0\0\374x\0\374x\0\374x\0\0\0\0\374\214\0\374\214\0\374\214\0" + "\0\0\0\374\240\0\374\240\0\374\240\0\0\0\0\374\264\0\374\264\0\374\264\0" + "\0\0\0\374\310\0\374\310\0\374\310\0\0\0\0\374\334\0\374\334\0\374\334\0" + "\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360" + "\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\330\360\0\330" + "\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\330\0\0\330\0\0\0\0\0\374\0\0\374\0\0\374\0\0\0\0\0\374\24\0" + "\374\24\0\374\24\0\0\0\0\374(\0\374(\0\374(\0\0\0\0\374<\0\374<\0\374<\0" + "\0\0\0\374P\0\374P\0\374P\0\0\0\0\374d\0\374d\0\374d\0\0\0\0\374x\0\374x" + "\0\374x\0\0\0\0\374\214\0\374\214\0\374\214\0\0\0\0\374\240\0\374\240\0\374" + "\240\0\0\0\0\374\264\0\374\264\0\374\264\0\0\0\0\374\310\0\374\310\0\374" + "\310\0\0\0\0\374\334\0\374\334\0\374\334\0\0\0\0\374\360\0\374\360\0\374" + "\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360" + "\0\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\330\360\0\330\360\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\330" + "\0\0\0\0\0\374\0\0\374\0\0\374\0\0\0\0\0\374\24\0\374\24\0\374\24\0\0\0\0" + "\374(\0\374(\0\374(\0\0\0\0\374<\0\374<\0\374<\0\0\0\0\374P\0\374P\0\374" + "P\0\0\0\0\374d\0\374d\0\374d\0\0\0\0\374x\0\374x\0\374x\0\0\0\0\374\214\0" + "\374\214\0\374\214\0\0\0\0\374\240\0\374\240\0\374\240\0\0\0\0\374\264\0" + "\374\264\0\374\264\0\0\0\0\374\310\0\374\310\0\374\310\0\0\0\0\374\334\0" + "\374\334\0\374\334\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360" + "\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\330\360\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\0\0\374" + "\0\0\374\0\0\0\0\0\374\24\0\374\24\0\374\24\0\0\0\0\374(\0\374(\0\374(\0" + "\0\0\0\374<\0\374<\0\374<\0\0\0\0\374P\0\374P\0\374P\0\0\0\0\374d\0\374d" + "\0\374d\0\0\0\0\374x\0\374x\0\374x\0\0\0\0\374\214\0\374\214\0\374\214\0" + "\0\0\0\374\240\0\374\240\0\374\240\0\0\0\0\374\264\0\374\264\0\374\264\0" + "\0\0\0\374\310\0\374\310\0\374\310\0\0\0\0\374\334\0\374\334\0\374\334\0" + "\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360" + "\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\0\0\374\0\0\374" + "\0\0\0\0\0\374\24\0\374\24\0\374\24\0\0\0\0\374(\0\374(\0\374(\0\0\0\0\374" + "<\0\374<\0\374<\0\0\0\0\374P\0\374P\0\374P\0\0\0\0\374d\0\374d\0\374d\0\0" + "\0\0\374x\0\374x\0\374x\0\0\0\0\374\214\0\374\214\0\374\214\0\0\0\0\374\240" + "\0\374\240\0\374\240\0\0\0\0\374\264\0\374\264\0\374\264\0\0\0\0\374\310" + "\0\374\310\0\374\310\0\0\0\0\374\334\0\374\334\0\374\334\0\0\0\0\374\360" + "\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\374\360\0\374\360\0\374\360" + "\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\374\360\0\374\360\0\374\360\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\374\0\0\374\0\0\374\0\0\0\0\0\374\24\0\374\24\0\374\24\0\0\0\0\374(\0\374" + "(\0\374(\0\0\0\0\374<\0\374<\0\374<\0\0\0\0\374P\0\374P\0\374P\0\0\0\0\374" + "d\0\374d\0\374d\0\0\0\0\374x\0\374x\0\374x\0\0\0\0\374\214\0\374\214\0\374" + "\214\0\0\0\0\374\240\0\374\240\0\374\240\0\0\0\0\374\264\0\374\264\0\374" + "\264\0\0\0\0\374\310\0\374\310\0\374\310\0\0\0\0\374\334\0\374\334\0\374" + "\334\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\374\334" + "\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\374\334\0\0" + "\0\0\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\0\0\374\0\0\374\0\0\0\0" + "\0\374\24\0\374\24\0\374\24\0\0\0\0\374(\0\374(\0\374(\0\0\0\0\374<\0\374" + "<\0\374<\0\0\0\0\374P\0\374P\0\374P\0\0\0\0\374d\0\374d\0\374d\0\0\0\0\374" + "x\0\374x\0\374x\0\0\0\0\374\214\0\374\214\0\374\214\0\0\0\0\374\240\0\374" + "\240\0\374\240\0\0\0\0\374\264\0\374\264\0\374\264\0\0\0\0\374\310\0\374" + "\310\0\374\310\0\0\0\0\374\334\0\374\334\0\374\334\0\0\0\0\374\360\0\374" + "\360\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\374\360\0\374\360\0\374" + "\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\374\360\0\374\360\0\374\360\0\374" + "\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\374\0\0\374\0\0\374\0\0\0\0\0\374\24\0\374\24\0\374\24\0\0\0\0\374" + "(\0\374(\0\374(\0\0\0\0\374<\0\374<\0\374<\0\0\0\0\374P\0\374P\0\374P\0\0" + "\0\0\374d\0\374d\0\374d\0\0\0\0\374x\0\374x\0\374x\0\0\0\0\374\214\0\374" + "\214\0\374\214\0\0\0\0\374\240\0\374\240\0\374\240\0\0\0\0\374\264\0\374" + "\264\0\374\264\0\0\0\0\374\310\0\374\310\0\374\310\0\0\0\0\374\334\0\374" + "\334\0\374\334\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374" + "\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\374\0\0\374\0\0\374\0\0\0\0\0\374\24\0\374\24\0\374\24\0\0\0\0\374(\0" + "\374(\0\374(\0\0\0\0\374<\0\374<\0\374<\0\0\0\0\374P\0\374P\0\374P\0\0\0" + "\0\374d\0\374d\0\374d\0\0\0\0\374x\0\374x\0\374x\0\0\0\0\374\214\0\374\214" + "\0\374\214\0\0\0\0\374\240\0\374\240\0\374\240\0\0\0\0\374\264\0\374\264" + "\0\374\264\0\0\0\0\374\310\0\374\310\0\374\310\0\0\0\0\374\334\0\374\334" + "\0\374\334\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374" + "\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360" + "\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\374\0\0\374\0\0\374\0\0\0\0\0\374\24\0\374\24\0\374\24\0\0\0\0\374(\0\374" + "(\0\374(\0\0\0\0\374<\0\374<\0\374<\0\0\0\0\374P\0\374P\0\374P\0\0\0\0\374" + "d\0\374d\0\374d\0\0\0\0\374x\0\374x\0\374x\0\0\0\0\374\214\0\374\214\0\374" + "\214\0\0\0\0\374\240\0\374\240\0\374\240\0\0\0\0\374\264\0\374\264\0\374" + "\264\0\0\0\0\374\310\0\374\310\0\374\310\0\0\0\0\374\334\0\374\334\0\374" + "\334\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\0\0\374" + "\0\0\374\0\0\0\0\0\374\24\0\374\24\0\374\24\0\0\0\0\374(\0\374(\0\374(\0" + "\0\0\0\374<\0\374<\0\374<\0\0\0\0\374P\0\374P\0\374P\0\0\0\0\374d\0\374d" + "\0\374d\0\0\0\0\374x\0\374x\0\374x\0\0\0\0\374\214\0\374\214\0\374\214\0" + "\0\0\0\374\240\0\374\240\0\374\240\0\0\0\0\374\264\0\374\264\0\374\264\0" + "\0\0\0\374\310\0\374\310\0\374\310\0\0\0\0\374\334\0\374\334\0\374\334\0" + "\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360" + "\0\374\360\0\374\360\0\0\0\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360" + "\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\0\0\374\0\0\374" + "\0\0\0\0\0\374\24\0\374\24\0\374\24\0\0\0\0\374(\0\374(\0\374(\0\0\0\0\374" + "<\0\374<\0\374<\0\0\0\0\374P\0\374P\0\374P\0\0\0\0\374d\0\374d\0\374d\0\0" + "\0\0\374x\0\374x\0\374x\0\0\0\0\374\214\0\374\214\0\374\214\0\0\0\0\374\240" + "\0\374\240\0\374\240\0\0\0\0\374\264\0\374\264\0\374\264\0\0\0\0\374\310" + "\0\374\310\0\374\310\0\0\0\0\374\334\0\374\334\0\374\334\0\0\0\0\374\360" + "\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374" + "\360\0\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\0\0\374\0\0\374" + "\0\0\0\0\0\374\24\0\374\24\0\374\24\0\0\0\0\374(\0\374(\0\374(\0\0\0\0\374" + "<\0\374<\0\374<\0\0\0\0\374P\0\374P\0\374P\0\0\0\0\374d\0\374d\0\374d\0\0" + "\0\0\374x\0\374x\0\374x\0\0\0\0\374\214\0\374\214\0\374\214\0\0\0\0\374\240" + "\0\374\240\0\374\240\0\0\0\0\374\264\0\374\264\0\374\264\0\0\0\0\374\310" + "\0\374\310\0\374\310\0\0\0\0\374\334\0\374\334\0\374\334\0\0\0\0\374\360" + "\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374" + "\360\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\0\0\374\0\0\0\0\0\0\0\0\374\24" + "\0\374\24\0\0\0\0\0\0\0\374(\0\374(\0\0\0\0\0\0\0\374<\0\374<\0\0\0\0\0\0" + "\0\374P\0\374P\0\0\0\0\0\0\0\374d\0\374d\0\0\0\0\0\0\0\374x\0\374x\0\0\0" + "\0\0\0\0\374\214\0\374\214\0\0\0\0\0\0\0\374\240\0\374\240\0\0\0\0\0\0\0" + "\374\264\0\374\264\0\0\0\0\0\0\0\374\310\0\374\310\0\0\0\0\0\0\0\374\334" + "\0\374\334\0\0\0\0\0\0\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\374\360\0" + "\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\0" + "\0\0\0\0\0\0\0\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\0\0\374\0\0\0" + "\0\0\0\0\0\374\24\0\374\24\0\0\0\0\0\0\0\374(\0\374(\0\0\0\0\0\0\0\374<\0" + "\374<\0\0\0\0\0\0\0\374P\0\374P\0\0\0\0\0\0\0\374d\0\374d\0\0\0\0\0\0\0\374" + "x\0\374x\0\0\0\0\0\0\0\374\214\0\374\214\0\0\0\0\0\0\0\374\240\0\374\240" + "\0\0\0\0\0\0\0\374\264\0\374\264\0\0\0\0\0\0\0\374\310\0\374\310\0\0\0\0" + "\0\0\0\374\334\0\374\334\0\0\0\0\0\0\0\374\360\0\374\360\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\360\0\374" + "\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\0\0\374\0\0\0\0\0\0\0\0\374\24\0" + "\374\24\0\0\0\0\0\0\0\374(\0\374(\0\0\0\0\0\0\0\374<\0\374<\0\0\0\0\0\0\0" + "\374P\0\374P\0\0\0\0\0\0\0\374d\0\374d\0\0\0\0\0\0\0\374x\0\374x\0\0\0\0" + "\0\0\0\374\214\0\374\214\0\0\0\0\0\0\0\374\240\0\374\240\0\0\0\0\0\0\0\374" + "\264\0\374\264\0\0\0\0\0\0\0\374\310\0\374\310\0\0\0\0\0\0\0\374\334\0\374" + "\334\0\0\0\0\0\0\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\374\0\0\374\0\0\374\0\0\0\0\0\374\24\0\374\24\0\374\24\0" + "\0\0\0\374(\0\374(\0\374(\0\0\0\0\374<\0\374<\0\374<\0\0\0\0\374P\0\374P" + "\0\374P\0\0\0\0\374d\0\374d\0\374d\0\0\0\0\374x\0\374x\0\374x\0\0\0\0\374" + "\214\0\374\214\0\374\214\0\0\0\0\374\240\0\374\240\0\374\240\0\0\0\0\374" + "\264\0\374\264\0\374\264\0\0\0\0\374\310\0\374\310\0\374\310\0\0\0\0\374" + "\334\0\374\334\0\374\334\0\0\0\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\0\0\374\0\0\0\0\0\0\0\0" + "\374\24\0\374\24\0\0\0\0\0\0\0\374(\0\374(\0\0\0\0\0\0\0\374<\0\374<\0\0" + "\0\0\0\0\0\374P\0\374P\0\0\0\0\0\0\0\374d\0\374d\0\0\0\0\0\0\0\374x\0\374" + "x\0\0\0\0\0\0\0\374\214\0\374\214\0\0\0\0\0\0\0\374\240\0\374\240\0\0\0\0" + "\0\0\0\374\264\0\374\264\0\0\0\0\0\0\0\374\310\0\374\310\0\0\0\0\0\0\0\374" + "\334\0\374\334\0\0\0\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\374" + "\360\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", +}; + +/** + * \brief Returns the BlitColor test image as SDL_Surface. + */ +SDL_Surface *SDLTest_ImageBlitColor(void) +{ + SDL_Surface *surface = SDL_CreateSurfaceFrom( + (void *)SDLTest_imageBlitColor.pixel_data, + SDLTest_imageBlitColor.width, + SDLTest_imageBlitColor.height, + SDLTest_imageBlitColor.width * SDLTest_imageBlitColor.bytes_per_pixel, SDL_PIXELFORMAT_RGB24); + return surface; +} + +static const SDLTest_SurfaceImage_t SDLTest_imageBlitAlpha = { + 80, + 60, + 3, + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\24\0\24\24\0\20\20\0" + "\20\20\0" + "88\0" + "88\0**\0**\0ZZ\0ZZ\0==\0==\0yy\0yy\0II\0II\0\224\224\0\224" + "\224\0NN\0NN\0\254\254\0\254\254\0MM\0MM\0\302\302\0\302\302\0HH\0HH\0\324" + "\324\0\324\324\0>>\0>>\0\343\343\0\343\343\0" + "00\0" + "00\0\356\356\0\356\356" + "\0\40\40\0\40\40\0\367\367\0\367\367\0\16\16\0\16\16\0\374\374\0\374\374" + "\0\374\374\0\374\374\0\360\360\0\360\360\0\360\360\0\360\360\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\24\24\0\24\24\0\24\24\0\20\20\0" + "88\0" + "88\0" + "88\0**\0ff\0ff\0ff\0FF\0" + "\215\215\0\215\215\0\215\215\0UU\0\255\255\0\255\255\0\255\255\0[[\0\306" + "\306\0\306\306\0\306\306\0YY\0\331\331\0\331\331\0\331\331\0PP\0\350\350" + "\0\350\350\0\350\350\0DD\0\362\362\0\362\362\0\362\362\0" + "44\0\370\370\0" + "\370\370\0\370\370\0\"\"\0\374\374\0\374\374\0\374\374\0\16\16\0\376\376" + "\0\376\376\0\376\376\0\376\376\0\374\374\0\374\374\0\374\374\0\374\374\0" + "\360\360\0\360\360\0\360\360\0\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\24\0\24\24\0\24\24\0\20\20\0" + "88\0" + "" + "88\0" + "88\0**\0ff\0ff\0ff\0FF\0\226\226\0\226\226\0\215\215\0UU\0\271\271" + "\0\271\271\0\255\255\0[[\0\323\323\0\323\323\0\306\306\0YY\0\345\345\0\345" + "\345\0\331\331\0PP\0\360\360\0\360\360\0\350\350\0DD\0\370\370\0\370\370" + "\0\362\362\0" + "44\0\374\374\0\374\374\0\370\370\0\"\"\0\376\376\0\376\376" + "\0\374\374\0\16\16\0\376\376\0\376\376\0\376\376\0\376\376\0\376\376\0\376" + "\376\0\374\374\0\374\374\0\374\374\0\374\374\0\360\360\0\360\360\0\360\360" + "\0\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\24" + "\0\24\24\0\24\24\0\20\20\0" + "33\0" + "33\0" + "33\0&&\0OO\0OO\0OO\0" + "55\0``\0``" + "\0``\0::\0``\0``\0``\0" + "22\0WW\0WW\0WW\0''\0II\0II\0II\0\33\33\0" + "99\0" + "9" + "9\0" + "99\0\20\20\0))\0))\0))\0\10\10\0\33\33\0\33\33\0\33\33\0\3\3\0\17\17" + "\0\17\17\0\17\17\0\0\0\0\7\7\0\7\7\0\7\7\0\7\7\0\2\2\0\2\2\0\2\2\0\2\2\0" + "\16\16\0\16\16\0\16\16\0\16\16\0\360\360\0\360\360\0\360\360\0\360\360\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\24\0\24\24\0\24\24\0\16\16" + "\0" + "33\0GG\0GG\0" + "00\0``\0\210\210\0\210\210\0TT\0\204\204\0\263\263\0\263" + "\263\0ee\0\222\222\0\315\315\0\312\312\0gg\0\216\216\0\331\331\0\327\327" + "\0cc\0\202\202\0\340\340\0\337\337\0YY\0qq\0\345\345\0\344\344\0NN\0^^\0" + "\352\352\0\352\352\0@@\0JJ\0\357\357\0\357\357\0" + "11\0" + "66\0\364\364\0\364" + "\364\0\40\40\0\"\"\0\371\371\0\371\371\0\16\16\0\16\16\0\375\375\0\375\375" + "\0\376\376\0\376\376\0\362\362\0\362\362\0\376\376\0\376\376\0\16\16\0\16" + "\16\0\360\360\0\360\360\0\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24" + "\24\0\24\24\0\22\22\0\24\24\0" + "88\0" + "88\0//\0BB\0pp\0pp\0UU\0ss\0\242\242" + "\0\242\242\0oo\0\230\230\0\306\306\0\306\306\0ww\0\265\265\0\335\335\0\335" + "\335\0ss\0\313\313\0\353\353\0\353\353\0ii\0\333\333\0\364\364\0\364\364" + "\0ZZ\0\351\351\0\371\371\0\371\371\0II\0\362\362\0\374\374\0\374\374\0" + "6" + "6\0\370\370\0\376\376\0\376\376\0\"\"\0\374\374\0\376\376\0\376\376\0\16" + "\16\0\376\376\0\376\376\0\376\376\0\376\376\0\375\375\0\376\376\0\376\376" + "\0\376\376\0\360\360\0\360\360\0\360\360\0\360\360\0\16\16\0\360\360\0\360" + "\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\24\0\24\24\0\22\22\0\"\"\0" + "88\0" + "" + "88\0//\0OO\0pp\0pp\0WW\0\203\203\0\242\242\0\242\242\0qq\0\256\256\0\312" + "\312\0\301\301\0||\0\313\313\0\342\342\0\325\325\0yy\0\336\336\0\360\360" + "\0\342\342\0mm\0\353\353\0\367\367\0\354\354\0\\\\\0\363\363\0\373\373\0" + "\362\362\0JJ\0\371\371\0\375\375\0\367\367\0" + "66\0\374\374\0\376\376\0\373" + "\373\0\"\"\0\376\376\0\376\376\0\375\375\0\16\16\0\376\376\0\376\376\0\376" + "\376\0\376\376\0\376\376\0\376\376\0\375\375\0\376\376\0\376\376\0\375\375" + "\0\360\360\0\374\374\0\360\360\0\376\376\0\16\16\0\360\360\0\360\360\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\24\24\0\22\22\0&&\0\"\"\0" + "88\0//\0PP\0HH\0gg\0NN" + "\0pp\0ee\0}}\0VV\0{{\0oo\0\202\202\0NN\0qq\0jj\0vv\0>>\0``\0\\\\\0cc\0,," + "\0MM\0KK\0OO\0\35\35\0::\0" + "99\0;;\0\21\21\0**\0))\0**\0\10\10\0\33\33\0" + "\33\33\0\33\33\0\3\3\0\17\17\0\17\17\0\17\17\0\0\0\0\7\7\0\7\7\0\7\7\0\7" + "\7\0\2\2\0\2\2\0\2\2\0\2\2\0\16\16\0\16\16\0\16\16\0\16\16\0\360\360\0\360" + "\360\0\376\376\0\376\376\0\16\16\0\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\22\22" + "\0&&\0&&\0\"\"\0" + "66\0[[\0oo\0ee\0``\0\220\220\0\270\270\0\250\250\0xx\0" + "\250\250\0\327\327\0\311\311\0zz\0\246\246\0\341\341\0\325\325\0rr\0\230" + "\230\0\343\343\0\334\334\0gg\0\205\205\0\344\344\0\340\340\0[[\0rr\0\346" + "\346\0\344\344\0NN\0^^\0\352\352\0\352\352\0AA\0JJ\0\357\357\0\357\357\0" + "" + "11\0" + "66\0\364\364\0\364\364\0\40\40\0\"\"\0\371\371\0\371\371\0\16\16" + "\0\16\16\0\375\375\0\375\375\0\376\376\0\376\376\0\362\362\0\362\362\0\376" + "\376\0\376\376\0\16\16\0\16\16\0\376\376\0\376\376\0\376\376\0\16\16\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\22\22\0&&\0&&\0\37\37\0;;\0``\0``\0HH\0qq\0\237\237" + "\0\237\237\0nn\0\227\227\0\306\306\0\306\306\0}}\0\254\254\0\334\334\0\334" + "\334\0}}\0\275\275\0\347\347\0\347\347\0vv\0\316\316\0\357\357\0\357\357" + "\0ii\0\334\334\0\365\365\0\365\365\0ZZ\0\351\351\0\371\371\0\371\371\0II" + "\0\362\362\0\374\374\0\374\374\0" + "66\0\370\370\0\376\376\0\376\376\0\"\"" + "\0\374\374\0\376\376\0\376\376\0\16\16\0\376\376\0\376\376\0\376\376\0\376" + "\376\0\375\375\0\376\376\0\376\376\0\376\376\0\360\360\0\360\360\0\360\360" + "\0\360\360\0\16\16\0\376\376\0\376\376\0\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "&&\0&&\0##\0--\0``\0``\0TT\0cc\0\237\237\0\231\231\0||\0\223\223\0\306\306" + "\0\301\301\0\217\217\0\267\267\0\336\336\0\322\322\0\220\220\0\317\317\0" + "\352\352\0\334\334\0\202\202\0\337\337\0\362\362\0\345\345\0qq\0\353\353" + "\0\370\370\0\354\354\0^^\0\363\363\0\373\373\0\362\362\0JJ\0\371\371\0\375" + "\375\0\367\367\0" + "66\0\374\374\0\376\376\0\373\373\0\"\"\0\376\376\0\376" + "\376\0\375\375\0\16\16\0\376\376\0\376\376\0\376\376\0\376\376\0\376\376" + "\0\376\376\0\375\375\0\376\376\0\376\376\0\375\375\0\360\360\0\376\376\0" + "\360\360\0\376\376\0\16\16\0\376\376\0\376\376\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "&&\0##\0" + "77\0--\0``\0PP\0nn\0[[\0\222\222\0kk\0\211\211\0qq\0\231\231\0" + "ff\0\210\210\0uu\0\217\217\0UU\0vv\0ll\0zz\0@@\0aa\0]]\0dd\0,,\0MM\0KK\0" + "OO\0\35\35\0::\0" + "99\0;;\0\21\21\0**\0))\0**\0\10\10\0\33\33\0\33\33\0\33" + "\33\0\3\3\0\17\17\0\17\17\0\17\17\0\0\0\0\7\7\0\7\7\0\7\7\0\7\7\0\2\2\0\2" + "\2\0\2\2\0\2\2\0\16\16\0\16\16\0\16\16\0\16\16\0\360\360\0\360\360\0\376" + "\376\0\376\376\0\16\16\0\376\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0##\0" + "77\0" + "77" + "\0--\0UU\0zz\0\216\216\0ww\0}}\0\254\254\0\324\324\0\264\264\0\207\207\0" + "\266\266\0\345\345\0\316\316\0\177\177\0\254\254\0\346\346\0\326\326\0rr" + "\0\231\231\0\344\344\0\334\334\0gg\0\206\206\0\344\344\0\340\340\0[[\0rr" + "\0\346\346\0\344\344\0NN\0^^\0\352\352\0\352\352\0AA\0JJ\0\357\357\0\357" + "\357\0" + "11\0" + "66\0\364\364\0\364\364\0\40\40\0\"\"\0\371\371\0\371\371\0" + "\16\16\0\16\16\0\375\375\0\375\375\0\376\376\0\376\376\0\362\362\0\362\362" + "\0\376\376\0\376\376\0\16\16\0\16\16\0\376\376\0\376\376\0\376\376\0\16\16" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\22\22\0" + "77\0" + "77\0--\0CC\0~~\0~~\0\\\\\0||\0" + "\274\274\0\274\274\0||\0\235\235\0\325\325\0\325\325\0\204\204\0\256\256" + "\0\340\340\0\340\340\0\177\177\0\275\275\0\351\351\0\351\351\0vv\0\316\316" + "\0\360\360\0\360\360\0ii\0\334\334\0\365\365\0\365\365\0ZZ\0\351\351\0\371" + "\371\0\371\371\0II\0\362\362\0\374\374\0\374\374\0" + "66\0\370\370\0\376\376" + "\0\376\376\0\"\"\0\374\374\0\376\376\0\376\376\0\16\16\0\376\376\0\376\376" + "\0\376\376\0\376\376\0\375\375\0\376\376\0\376\376\0\376\376\0\360\360\0" + "\360\360\0\360\360\0\360\360\0\16\16\0\376\376\0\376\376\0\16\16\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0&&\0" + "77\0" + "22\0--\0``\0vv\0pp\0gg\0\243\243\0\255\255" + "\0\225\225\0\231\231\0\311\311\0\314\314\0\235\235\0\271\271\0\337\337\0" + "\326\326\0\224\224\0\320\320\0\352\352\0\336\336\0\204\204\0\337\337\0\362" + "\362\0\345\345\0qq\0\353\353\0\370\370\0\354\354\0^^\0\363\363\0\373\373" + "\0\362\362\0JJ\0\371\371\0\375\375\0\367\367\0" + "66\0\374\374\0\376\376\0" + "\373\373\0\"\"\0\376\376\0\376\376\0\375\375\0\16\16\0\376\376\0\376\376" + "\0\376\376\0\376\376\0\376\376\0\376\376\0\375\375\0\376\376\0\376\376\0" + "\375\375\0\360\360\0\376\376\0\360\360\0\376\376\0\16\16\0\376\376\0\376" + "\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&&\0##\0FF\0" + "99\0``\0PP\0\200\200\0dd\0\222" + "\222\0kk\0\222\222\0vv\0\231\231\0ff\0\213\213\0ww\0\217\217\0UU\0xx\0mm" + "\0zz\0@@\0bb\0]]\0dd\0,,\0MM\0KK\0OO\0\35\35\0::\0" + "99\0;;\0\21\21\0**\0" + "))\0**\0\10\10\0\33\33\0\33\33\0\33\33\0\3\3\0\17\17\0\17\17\0\17\17\0\0" + "\0\0\7\7\0\7\7\0\7\7\0\7\7\0\2\2\0\2\2\0\2\2\0\2\2\0\16\16\0\16\16\0\16\16" + "\0\16\16\0\360\360\0\360\360\0\376\376\0\376\376\0\16\16\0\376\376\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0##\0" + "77\0" + "77\0" + "99\0^^\0zz\0\216\216\0\201\201\0\203" + "\203\0\254\254\0\324\324\0\271\271\0\211\211\0\266\266\0\345\345\0\317\317" + "\0\200\200\0\254\254\0\346\346\0\326\326\0ss\0\231\231\0\344\344\0\334\334" + "\0gg\0\206\206\0\344\344\0\340\340\0[[\0rr\0\346\346\0\344\344\0NN\0^^\0" + "\352\352\0\352\352\0AA\0JJ\0\357\357\0\357\357\0" + "11\0" + "66\0\364\364\0\364" + "\364\0\40\40\0\"\"\0\371\371\0\371\371\0\16\16\0\16\16\0\375\375\0\375\375" + "\0\376\376\0\376\376\0\362\362\0\362\362\0\376\376\0\376\376\0\16\16\0\16" + "\16\0\376\376\0\376\376\0\376\376\0\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\22\22" + "\0" + "77\0" + "77\0--\0MM\0\210\210\0\210\210\0\\\\\0\202\202\0\302\302\0\302" + "\302\0||\0\240\240\0\330\330\0\330\330\0\204\204\0\257\257\0\341\341\0\341" + "\341\0\177\177\0\275\275\0\351\351\0\351\351\0vv\0\316\316\0\360\360\0\360" + "\360\0ii\0\334\334\0\365\365\0\365\365\0ZZ\0\351\351\0\371\371\0\371\371" + "\0II\0\362\362\0\374\374\0\374\374\0" + "66\0\370\370\0\376\376\0\376\376\0" + "\"\"\0\374\374\0\376\376\0\376\376\0\16\16\0\376\376\0\376\376\0\376\376" + "\0\376\376\0\375\375\0\376\376\0\376\376\0\376\376\0\360\360\0\360\360\0" + "\360\360\0\360\360\0\16\16\0\376\376\0\376\376\0\16\16\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0&&\0" + "77\0" + "22\0--\0``\0vv\0xx\0kk\0\245\245\0\257\257\0\235\235" + "\0\234\234\0\312\312\0\315\315\0\241\241\0\272\272\0\337\337\0\326\326\0" + "\225\225\0\320\320\0\352\352\0\336\336\0\204\204\0\337\337\0\362\362\0\345" + "\345\0qq\0\353\353\0\370\370\0\354\354\0^^\0\363\363\0\373\373\0\362\362" + "\0JJ\0\371\371\0\375\375\0\367\367\0" + "66\0\374\374\0\376\376\0\373\373\0" + "\"\"\0\376\376\0\376\376\0\375\375\0\16\16\0\376\376\0\376\376\0\376\376" + "\0\376\376\0\376\376\0\376\376\0\375\375\0\376\376\0\376\376\0\375\375\0" + "\360\360\0\376\376\0\360\360\0\376\376\0\16\16\0\376\376\0\376\376\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0&&\0##\0FF\0" + "99\0``\0PP\0\200\200\0dd\0\222\222\0kk" + "\0\222\222\0vv\0\231\231\0ff\0\213\213\0ww\0\217\217\0UU\0xx\0mm\0zz\0@@" + "\0bb\0]]\0dd\0,,\0MM\0KK\0OO\0\35\35\0::\0" + "99\0;;\0\21\21\0**\0))\0**\0" + "\10\10\0\33\33\0\33\33\0\33\33\0\3\3\0\17\17\0\17\17\0\17\17\0\0\0\0\7\7" + "\0\7\7\0\7\7\0\7\7\0\2\2\0\2\2\0\2\2\0\2\2\0\16\16\0\16\16\0\16\16\0\16\16" + "\0\360\360\0\360\360\0\376\376\0\376\376\0\16\16\0\376\376\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0##\0" + "77\0" + "77\0" + "99\0^^\0zz\0\216\216\0\201\201\0\203\203\0" + "\254\254\0\324\324\0\271\271\0\211\211\0\266\266\0\345\345\0\317\317\0\200" + "\200\0\254\254\0\346\346\0\326\326\0ss\0\231\231\0\344\344\0\334\334\0gg" + "\0\206\206\0\344\344\0\340\340\0[[\0rr\0\346\346\0\344\344\0NN\0^^\0\352" + "\352\0\352\352\0AA\0JJ\0\357\357\0\357\357\0" + "11\0" + "66\0\364\364\0\364\364" + "\0\40\40\0\"\"\0\371\371\0\371\371\0\16\16\0\16\16\0\375\375\0\375\375\0" + "\376\376\0\376\376\0\362\362\0\362\362\0\376\376\0\376\376\0\16\16\0\16\16" + "\0\376\376\0\376\376\0\376\376\0\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\22\22\0" + "" + "77\0" + "77\0--\0MM\0\210\210\0\210\210\0\\\\\0\202\202\0\302\302\0\302\302" + "\0||\0\240\240\0\330\330\0\330\330\0\204\204\0\257\257\0\341\341\0\341\341" + "\0\177\177\0\275\275\0\351\351\0\351\351\0vv\0\316\316\0\360\360\0\360\360" + "\0ii\0\334\334\0\365\365\0\365\365\0ZZ\0\351\351\0\371\371\0\371\371\0II" + "\0\362\362\0\374\374\0\374\374\0" + "66\0\370\370\0\376\376\0\376\376\0\"\"" + "\0\374\374\0\376\376\0\376\376\0\16\16\0\376\376\0\376\376\0\376\376\0\376" + "\376\0\375\375\0\376\376\0\376\376\0\376\376\0\360\360\0\360\360\0\360\360" + "\0\360\360\0\16\16\0\376\376\0\376\376\0\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "&&\0" + "77\0" + "22\0--\0``\0vv\0xx\0kk\0\245\245\0\257\257\0\235\235\0\234\234" + "\0\312\312\0\315\315\0\241\241\0\272\272\0\337\337\0\326\326\0\225\225\0" + "\320\320\0\352\352\0\336\336\0\204\204\0\337\337\0\362\362\0\345\345\0qq" + "\0\353\353\0\370\370\0\354\354\0^^\0\363\363\0\373\373\0\362\362\0JJ\0\371" + "\371\0\375\375\0\367\367\0" + "66\0\374\374\0\376\376\0\373\373\0\"\"\0\376" + "\376\0\376\376\0\375\375\0\16\16\0\376\376\0\376\376\0\376\376\0\376\376" + "\0\376\376\0\376\376\0\375\375\0\376\376\0\376\376\0\375\375\0\360\360\0" + "\376\376\0\360\360\0\376\376\0\16\16\0\376\376\0\376\376\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0&&\0##\0FF\0" + "99\0``\0PP\0\200\200\0dd\0\222\222\0kk\0\222\222" + "\0vv\0\231\231\0ff\0\213\213\0ww\0\217\217\0UU\0xx\0mm\0zz\0@@\0bb\0]]\0" + "dd\0,,\0MM\0KK\0OO\0\35\35\0::\0" + "99\0;;\0\21\21\0**\0))\0**\0\10\10\0\33" + "\33\0\33\33\0\33\33\0\3\3\0\17\17\0\17\17\0\17\17\0\0\0\0\7\7\0\7\7\0\7\7" + "\0\7\7\0\2\2\0\2\2\0\2\2\0\2\2\0\16\16\0\16\16\0\16\16\0\16\16\0\360\360" + "\0\360\360\0\376\376\0\376\376\0\16\16\0\376\376\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0##\0" + "77\0" + "77\0" + "99\0^^\0zz\0\216\216\0\201\201\0\203\203\0\254\254\0" + "\324\324\0\271\271\0\211\211\0\266\266\0\345\345\0\317\317\0\200\200\0\254" + "\254\0\346\346\0\326\326\0ss\0\231\231\0\344\344\0\334\334\0gg\0\206\206" + "\0\344\344\0\340\340\0[[\0rr\0\346\346\0\344\344\0NN\0^^\0\352\352\0\352" + "\352\0AA\0JJ\0\357\357\0\357\357\0" + "11\0" + "66\0\364\364\0\364\364\0\40\40" + "\0\"\"\0\371\371\0\371\371\0\16\16\0\16\16\0\375\375\0\375\375\0\376\376" + "\0\376\376\0\362\362\0\362\362\0\376\376\0\376\376\0\16\16\0\16\16\0\376" + "\376\0\376\376\0\376\376\0\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\22\22\0" + "77\0" + "" + "77\0--\0MM\0\210\210\0\210\210\0\\\\\0\202\202\0\302\302\0\302\302\0||" + "\0\240\240\0\330\330\0\330\330\0\204\204\0\257\257\0\341\341\0\341\341\0" + "\177\177\0\275\275\0\351\351\0\351\351\0vv\0\316\316\0\360\360\0\360\360" + "\0ii\0\334\334\0\365\365\0\365\365\0ZZ\0\351\351\0\371\371\0\371\371\0II" + "\0\362\362\0\374\374\0\374\374\0" + "66\0\370\370\0\376\376\0\376\376\0\"\"" + "\0\374\374\0\376\376\0\376\376\0\16\16\0\376\376\0\376\376\0\376\376\0\376" + "\376\0\375\375\0\376\376\0\376\376\0\376\376\0\360\360\0\360\360\0\360\360" + "\0\360\360\0\16\16\0\376\376\0\376\376\0\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "&&\0" + "77\0" + "22\0--\0``\0vv\0xx\0kk\0\245\245\0\257\257\0\235\235\0\234\234" + "\0\312\312\0\315\315\0\241\241\0\272\272\0\337\337\0\326\326\0\225\225\0" + "\320\320\0\352\352\0\336\336\0\204\204\0\337\337\0\362\362\0\345\345\0qq" + "\0\353\353\0\370\370\0\354\354\0^^\0\363\363\0\373\373\0\362\362\0JJ\0\371" + "\371\0\375\375\0\367\367\0" + "66\0\374\374\0\376\376\0\373\373\0\"\"\0\376" + "\376\0\376\376\0\375\375\0\16\16\0\376\376\0\376\376\0\376\376\0\376\376" + "\0\376\376\0\376\376\0\375\375\0\376\376\0\376\376\0\375\375\0\360\360\0" + "\376\376\0\360\360\0\376\376\0\16\16\0\376\376\0\376\376\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0&&\0##\0FF\0" + "99\0``\0PP\0\200\200\0dd\0\222\222\0kk\0\222\222" + "\0vv\0\231\231\0ff\0\213\213\0ww\0\217\217\0UU\0xx\0mm\0zz\0@@\0bb\0]]\0" + "dd\0,,\0MM\0KK\0OO\0\35\35\0::\0" + "99\0;;\0\21\21\0**\0))\0**\0\10\10\0\33" + "\33\0\33\33\0\33\33\0\3\3\0\17\17\0\17\17\0\17\17\0\0\0\0\7\7\0\7\7\0\7\7" + "\0\7\7\0\2\2\0\2\2\0\2\2\0\2\2\0\16\16\0\16\16\0\16\16\0\16\16\0\360\360" + "\0\360\360\0\376\376\0\376\376\0\16\16\0\376\376\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0##\0" + "77\0" + "77\0" + "99\0^^\0zz\0\216\216\0\201\201\0\203\203\0\254\254\0" + "\324\324\0\271\271\0\211\211\0\266\266\0\345\345\0\317\317\0\200\200\0\254" + "\254\0\346\346\0\326\326\0ss\0\231\231\0\344\344\0\334\334\0gg\0\206\206" + "\0\344\344\0\340\340\0[[\0rr\0\346\346\0\344\344\0NN\0^^\0\352\352\0\352" + "\352\0AA\0JJ\0\357\357\0\357\357\0" + "11\0" + "66\0\364\364\0\364\364\0\40\40" + "\0\"\"\0\371\371\0\371\371\0\16\16\0\16\16\0\375\375\0\375\375\0\376\376" + "\0\376\376\0\362\362\0\362\362\0\376\376\0\376\376\0\16\16\0\16\16\0\376" + "\376\0\376\376\0\376\376\0\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\22\22\0" + "77\0" + "" + "77\0--\0MM\0\210\210\0\210\210\0\\\\\0\202\202\0\302\302\0\302\302\0||" + "\0\240\240\0\330\330\0\330\330\0\204\204\0\257\257\0\341\341\0\341\341\0" + "\177\177\0\275\275\0\351\351\0\351\351\0vv\0\316\316\0\360\360\0\360\360" + "\0ii\0\334\334\0\365\365\0\365\365\0ZZ\0\351\351\0\371\371\0\371\371\0II" + "\0\362\362\0\374\374\0\374\374\0" + "66\0\370\370\0\376\376\0\376\376\0\"\"" + "\0\374\374\0\376\376\0\376\376\0\16\16\0\376\376\0\376\376\0\376\376\0\376" + "\376\0\375\375\0\376\376\0\376\376\0\376\376\0\360\360\0\360\360\0\360\360" + "\0\360\360\0\16\16\0\376\376\0\376\376\0\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "&&\0" + "77\0" + "22\0--\0``\0vv\0xx\0kk\0\245\245\0\257\257\0\235\235\0\234\234" + "\0\312\312\0\315\315\0\241\241\0\272\272\0\337\337\0\326\326\0\225\225\0" + "\320\320\0\352\352\0\336\336\0\204\204\0\337\337\0\362\362\0\345\345\0qq" + "\0\353\353\0\370\370\0\354\354\0^^\0\363\363\0\373\373\0\362\362\0JJ\0\371" + "\371\0\375\375\0\367\367\0" + "66\0\374\374\0\376\376\0\373\373\0\"\"\0\376" + "\376\0\376\376\0\375\375\0\16\16\0\376\376\0\376\376\0\376\376\0\376\376" + "\0\376\376\0\376\376\0\375\375\0\376\376\0\376\376\0\375\375\0\360\360\0" + "\376\376\0\360\360\0\376\376\0\16\16\0\376\376\0\376\376\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0&&\0##\0FF\0" + "99\0``\0PP\0\213\213\0mm\0\237\237\0uu\0\275\275" + "\0\232\232\0\306\306\0\204\204\0\331\331\0\272\272\0\336\336\0\205\205\0" + "\345\345\0\320\320\0\352\352\0{{\0\355\355\0\337\337\0\362\362\0mm\0\363" + "\363\0\353\353\0\370\370\0\\\\\0\367\367\0\363\363\0\373\373\0II\0\373\373" + "\0\371\371\0\375\375\0" + "66\0\375\375\0\374\374\0\376\376\0\"\"\0\376\376" + "\0\376\376\0\376\376\0\16\16\0\376\376\0\376\376\0\376\376\0\376\376\0\376" + "\376\0\376\376\0\376\376\0\376\376\0\375\375\0\376\376\0\375\375\0\375\375" + "\0\360\360\0\360\360\0\376\376\0\376\376\0\16\16\0\376\376\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0##\0" + "77\0" + "77\0" + "99\0gg\0\205\205\0\205\205\0ww\0\224\224\0" + "\310\310\0\310\310\0\247\247\0\240\240\0\354\354\0\354\354\0\306\306\0\227" + "\227\0\372\372\0\372\372\0\325\325\0\205\205\0\375\375\0\375\375\0\342\342" + "\0rr\0\376\376\0\376\376\0\354\354\0^^\0\376\376\0\376\376\0\363\363\0JJ" + "\0\376\376\0\376\376\0\370\370\0" + "66\0\376\376\0\376\376\0\374\374\0\"\"" + "\0\376\376\0\376\376\0\376\376\0\16\16\0\376\376\0\376\376\0\376\376\0\376" + "\376\0\376\376\0\376\376\0\376\376\0\376\376\0\376\376\0\376\376\0\375\375" + "\0\376\376\0\376\376\0\376\376\0\362\362\0\376\376\0\376\376\0\376\376\0" + "\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\22\22\0" + "77\0" + "77\0" + "11\0>>\0~~\0~~\0bb" + "\0__\0\261\261\0\261\261\0\212\212\0``\0\277\277\0\277\277\0\230\230\0SS" + "\0\275\275\0\275\275\0\233\233\0@@\0\273\273\0\273\273\0\240\240\0//\0\274" + "\274\0\274\274\0\252\252\0!!\0\301\301\0\301\301\0\266\266\0\25\25\0\311" + "\311\0\311\311\0\303\303\0\14\14\0\324\324\0\324\324\0\322\322\0\6\6\0\342" + "\342\0\342\342\0\341\341\0\1\1\0\361\361\0\361\361\0\361\361\0\15\15\0\15" + "\15\0\15\15\0\15\15\0\362\362\0\362\362\0\362\362\0\360\360\0\16\16\0\16" + "\16\0\16\16\0\2\2\0\376\376\0\376\376\0\376\376\0\16\16\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0&&\0" + "77\0" + "77\0\34\34\0SS\0kk\0\206\206\0BB\0\214\214\0\232\232" + "\0\302\302\0YY\0\250\250\0\255\255\0\340\340\0XX\0\264\264\0\264\264\0\355" + "\355\0SS\0\265\265\0\266\266\0\364\364\0JJ\0\270\270\0\272\272\0\371\371" + "\0AA\0\277\277\0\300\300\0\374\374\0" + "66\0\310\310\0\311\311\0\375\375\0" + "**\0\324\324\0\324\324\0\376\376\0\34\34\0\341\341\0\342\342\0\376\376\0" + "\15\15\0\361\361\0\361\361\0\376\376\0\361\361\0\15\15\0\15\15\0\376\376" + "\0\15\15\0\361\361\0\361\361\0\373\373\0\362\362\0\15\15\0\16\16\0\376\376" + "\0\16\16\0\361\361\0\376\376\0\376\376\0\376\376\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0&&\0&&\0" + "77\0))\0SS\0SS\0kk\0DD\0\205\205\0}}\0\222\222\0WW\0\241\241" + "\0\230\230\0\245\245\0XX\0\261\261\0\252\252\0\261\261\0SS\0\264\264\0\263" + "\263\0\265\265\0JJ\0\270\270\0\271\271\0\272\272\0AA\0\276\276\0\300\300" + "\0\300\300\0" + "66\0\310\310\0\311\311\0\311\311\0**\0\324\324\0\324\324\0" + "\324\324\0\34\34\0\341\341\0\342\342\0\342\342\0\15\15\0\361\361\0\361\361" + "\0\361\361\0\361\361\0\15\15\0\15\15\0\15\15\0\15\15\0\361\361\0\361\361" + "\0\361\361\0\362\362\0\15\15\0\16\16\0\16\16\0\16\16\0\361\361\0\376\376" + "\0\376\376\0\376\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&&\0&&\0&&\0))\0pp\0cc\0cc" + "\0QQ\0\261\261\0\244\244\0\244\244\0ll\0\335\335\0\323\323\0\323\323\0ww" + "\0\364\364\0\356\356\0\356\356\0ss\0\370\370\0\371\371\0\371\371\0ii\0\372" + "\372\0\375\375\0\375\375\0YY\0\374\374\0\376\376\0\376\376\0HH\0\375\375" + "\0\376\376\0\376\376\0" + "66\0\376\376\0\376\376\0\376\376\0\"\"\0\376\376" + "\0\376\376\0\376\376\0\16\16\0\376\376\0\376\376\0\376\376\0\376\376\0\376" + "\376\0\376\376\0\376\376\0\376\376\0\376\376\0\376\376\0\376\376\0\376\376" + "\0\375\375\0\376\376\0\376\376\0\376\376\0\361\361\0\376\376\0\376\376\0" + "\376\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\24\0&&\0&&\0\40\40\0QQ\0pp\0pp\0KK" + "\0\215\215\0\261\261\0\261\261\0pp\0\274\274\0\337\337\0\337\337\0\200\200" + "\0\332\332\0\364\364\0\364\364\0}}\0\350\350\0\373\373\0\373\373\0oo\0\361" + "\361\0\375\375\0\375\375\0]]\0\367\367\0\376\376\0\376\376\0JJ\0\373\373" + "\0\376\376\0\376\376\0" + "66\0\375\375\0\376\376\0\376\376\0\"\"\0\376\376" + "\0\376\376\0\376\376\0\16\16\0\376\376\0\376\376\0\376\376\0\376\376\0\376" + "\376\0\376\376\0\376\376\0\376\376\0\376\376\0\376\376\0\376\376\0\376\376" + "\0\375\375\0\376\376\0\376\376\0\376\376\0\361\361\0\376\376\0\376\376\0" + "\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\24\0&&\0&&\0\20\20\0" + "88\0WW\0pp\0" + "==\0ss\0\212\212\0\252\252\0dd\0\250\250\0\264\264\0\312\312\0rr\0\313\313" + "\0\315\315\0\331\331\0rr\0\340\340\0\331\331\0\340\340\0hh\0\355\355\0\341" + "\341\0\345\345\0YY\0\366\366\0\350\350\0\352\352\0HH\0\372\372\0\356\356" + "\0\357\357\0" + "66\0\375\375\0\364\364\0\364\364\0\"\"\0\376\376\0\371\371" + "\0\371\371\0\16\16\0\376\376\0\375\375\0\375\375\0\376\376\0\376\376\0\361" + "\361\0\362\362\0\376\376\0\376\376\0\16\16\0\16\16\0\376\376\0\375\375\0" + "\376\376\0\375\375\0\374\374\0\360\360\0\376\376\0\376\376\0\360\360\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\24\24\0\24\24\0&&\0\40\40\0" + "88\0" + "88\0WW\0BB\0ff" + "\0ZZ\0}}\0^^\0\226\226\0\201\201\0\241\241\0nn\0\301\301\0\246\246\0\277" + "\277\0rr\0\333\333\0\301\301\0\321\321\0ii\0\353\353\0\323\323\0\335\335" + "\0[[\0\365\365\0\341\341\0\346\346\0II\0\372\372\0\353\353\0\356\356\0" + "6" + "6\0\375\375\0\363\363\0\364\364\0\"\"\0\376\376\0\371\371\0\371\371\0\16" + "\16\0\376\376\0\375\375\0\375\375\0\376\376\0\376\376\0\361\361\0\361\361" + "\0\376\376\0\376\376\0\16\16\0\16\16\0\376\376\0\374\374\0\375\375\0\374" + "\374\0\374\374\0\361\361\0\376\376\0\360\360\0\360\360\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\24\24\0\24\24\0\24\24\0\40\40\0HH\0" + "88\0" + "88\0BB\0~~\0ff\0ff\0" + "^^\0\256\256\0\226\226\0\226\226\0qq\0\325\325\0\277\277\0\277\277\0ss\0" + "\350\350\0\331\331\0\331\331\0jj\0\363\363\0\353\353\0\353\353\0[[\0\371" + "\371\0\365\365\0\365\365\0II\0\374\374\0\372\372\0\372\372\0" + "66\0\375\375" + "\0\375\375\0\375\375\0\"\"\0\376\376\0\376\376\0\376\376\0\16\16\0\376\376" + "\0\376\376\0\376\376\0\376\376\0\376\376\0\376\376\0\376\376\0\376\376\0" + "\376\376\0\376\376\0\376\376\0\376\376\0\374\374\0\374\374\0\374\374\0\376" + "\376\0\361\361\0\360\360\0\360\360\0\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\24\24\0\24\24\0\24\24\0\40\40\0HH\0HH\0" + "88\0BB\0~~\0~~\0ff\0^^\0\263" + "\263\0\263\263\0\231\231\0nn\0\330\330\0\330\330\0\274\274\0pp\0\353\353" + "\0\353\353\0\324\324\0hh\0\365\365\0\365\365\0\345\345\0ZZ\0\373\373\0\373" + "\373\0\361\361\0II\0\375\375\0\375\375\0\370\370\0" + "66\0\376\376\0\376\376" + "\0\374\374\0\"\"\0\376\376\0\376\376\0\376\376\0\16\16\0\376\376\0\376\376" + "\0\376\376\0\376\376\0\376\376\0\376\376\0\376\376\0\376\376\0\376\376\0" + "\376\376\0\374\374\0\374\374\0\376\376\0\376\376\0\361\361\0\360\360\0\360" + "\360\0\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\24\0\24\24\0\0\0" + "\0\0\0\0((\0HH\0\40\40\0\25\25\0QQ\0\207\207\0KK\0--\0}}\0\262\262\0bb\0" + "" + "44\0\235\235\0\320\320\0ff\0" + "00\0\257\257\0\341\341\0cc\0))\0\272\272" + "\0\354\354\0ZZ\0\37\37\0\303\303\0\363\363\0OO\0\26\26\0\314\314\0\370\370" + "\0AA\0\15\15\0\326\326\0\373\373\0" + "22\0\6\6\0\343\343\0\375\375\0!!\0\1" + "\1\0\362\362\0\376\376\0\16\16\0\16\16\0\16\16\0\375\375\0\375\375\0\375" + "\375\0\376\376\0\362\362\0\360\360\0\361\361\0\376\376\0\14\14\0\0\0\0\0" + "\0\0\360\360\0\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\24" + "\0\24\24\0\0\0\0\0\0\0((\0((\0\0\0\0\0\0\0<<\0<<\0\0\0\0\0\0\0PP\0PP\0\10" + "\10\0\4\4\0dd\0dd\0\14\14\0\6\6\0xx\0xx\0\14\14\0\5\5\0\214\214\0\214\214" + "\0\13\13\0\4\4\0\240\240\0\240\240\0\10\10\0\2\2\0\264\264\0\264\264\0\5" + "\5\0\1\1\0\310\310\0\310\310\0\3\3\0\0\0\0\334\334\0\334\334\0\1\1\0\0\0" + "\0\360\360\0\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\1\1\0\0\0\0\0\0\0\14" + "\14\0\14\14\0\0\0\0\0\0\0\360\360\0\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\24\24\0\24\24\0\0\0\0\0\0\0((\0((\0\0\0\0\0\0" + "\0<<\0<<\0\0\0\0\0\0\0XX\0XX\0\0\0\0\0\0\0pp\0pp\0\0\0\0\0\0\0\204\204\0" + "\204\204\0\0\0\0\0\0\0\227\227\0\227\227\0\0\0\0\0\0\0\250\250\0\250\250" + "\0\0\0\0\0\0\0\271\271\0\271\271\0\0\0\0\0\0\0\313\313\0\313\313\0\0\0\0" + "\0\0\0\335\335\0\335\335\0\0\0\0\0\0\0\360\360\0\360\360\0\0\0\0\0\0\0\1" + "\1\0\1\1\0\0\0\0\0\0\0\14\14\0\14\14\0\0\0\0\0\0\0\360\360\0\360\360\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\24\0" + "\24\24\0\24\24\0\0\0\0((\0((\0((\0\0\0\0<<\0HH\0HH\0\10\10\0PP\0dd\0dd\0" + "\14\14\0dd\0||\0||\0\14\14\0xx\0\221\221\0\221\221\0\13\13\0\214\214\0\243" + "\243\0\243\243\0\10\10\0\240\240\0\264\264\0\264\264\0\5\5\0\264\264\0\303" + "\303\0\303\303\0\3\3\0\310\310\0\322\322\0\322\322\0\1\1\0\334\334\0\341" + "\341\0\341\341\0\0\0\0\360\360\0\361\361\0\361\361\0\1\1\0\0\0\0\14\14\0" + "\14\14\0\14\14\0\0\0\0\360\360\0\360\360\0\360\360\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\24\0" + "\24\24\0\20\20\0\20\20\0" + "88\0" + "88\0**\0**\0ZZ\0ZZ\0==\0==\0yy\0yy\0II\0" + "II\0\224\224\0\224\224\0NN\0NN\0\254\254\0\254\254\0MM\0MM\0\302\302\0\302" + "\302\0HH\0HH\0\324\324\0\324\324\0>>\0>>\0\343\343\0\343\343\0" + "00\0" + "00" + "\0\356\356\0\356\356\0\40\40\0\40\40\0\367\367\0\367\367\0\16\16\0\16\16" + "\0\374\374\0\374\374\0\374\374\0\374\374\0\360\360\0\360\360\0\360\360\0" + "\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", +}; + +/** + * \brief Returns the BlitAlpha test image as SDL_Surface. + */ +SDL_Surface *SDLTest_ImageBlitAlpha(void) +{ + SDL_Surface *surface = SDL_CreateSurfaceFrom( + (void *)SDLTest_imageBlitAlpha.pixel_data, + SDLTest_imageBlitAlpha.width, + SDLTest_imageBlitAlpha.height, + SDLTest_imageBlitAlpha.width * SDLTest_imageBlitAlpha.bytes_per_pixel, SDL_PIXELFORMAT_RGB24); + return surface; +} + +/* GIMP RGB C-Source image dump (alpha.c) */ + +static const SDLTest_SurfaceImage_t SDLTest_imageBlitBlendAdd = { + 80, + 60, + 3, + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0dd\0dd\0\310\310\0\310\310\0\310\310\0\310" + "\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310" + "\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0" + "\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310" + "\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310" + "\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0" + "\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310" + "\310\0dd\0dd\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0dd\0dd\0dd\0dd\0\310\310\0\310\310\0\310\310\0\310\310\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310\310" + "\0\310\310\0\310\310\0\310\310\0dd\0dd\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0dd\0dd\0dd\0dd\0\310\310\0\310\310\0\310\310\0\310\310" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\310\310\0\310\310\0\310\310\0\310\310\0dd\0dd\0dd" + "\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0dd\0dd\0\310\310\0\310\310\0" + "\310\310\0\310\310\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310\310\0\310" + "\310\0\310\310\0\310\310\0dd\0dd\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0dd\0" + "dd\0\310\310\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310\310\0" + "dd\0dd\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0dd\0dd\0\310\310\0\310\310\0\310\310" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\310\310\0\310\310\0\310\310\0dd\0dd\0dd\0dd\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0dd" + "\0\310\310\0\310\310\0\310\310\0\310\310\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310" + "\310\0\310\310\0\310\310\0\310\310\0dd\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0\310\310\0\310\310" + "\0\310\310\0\310\310\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310" + "\310\0\310\310\0\310\310\0\310\310\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0\310\310\0\310\310\0\310" + "\310\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\310\310\0\310\310\0\310\310\0dd\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0\310\310\0\310" + "\310\0\310\310\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\310\310\0\310\310\0\310\310\0dd\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\310" + "\0\310\310\0\310\310\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310\310\0\310\310" + "\0\310\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\310\310\0\310\310\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\310\310\0\310\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\310\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\310\310\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0dd\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\310\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310" + "\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\310\310\0\310\310\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\310\310\0\310\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\310\310\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\310\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0dd\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\310\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310\310" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\310\310\0\310\310\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\310\310\0\310\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\310\310\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\310\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0dd\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\310\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310\310\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310" + "\310\0\310\310\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310" + "\310\0\310\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\310\310\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\310\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\310\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310\310\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\310" + "\0\310\310\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310\310" + "\0\310\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\310\310\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\310\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\310\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310\310\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\310\0\310" + "\310\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310\310\0\310" + "\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\310\310\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\310\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\310\0\377\377\0\377\377\0\310\310" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\310\310\0\377\377\0\377\377\0\310\310\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\310\0\310\310" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310\310\0\310\310" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\310\310\0\310\310\0\310\310\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310\310" + "\0\310\310\0\310\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0dd\0\310\310\0\310\310\0\310\310\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310" + "\310\0\310\310\0\310\310\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0\310\310\0\310\310\0dd\0\310\310\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\310\310\0" + "dd\0\310\310\0\310\310\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0\310\310\0\310\310\0\310\310\0\310\310" + "\0\377\377\0\377\377\0\377\377\0\310\310\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\310\310\0\377\377\0\377\377\0\377\377\0\310\310\0\310\310\0\310" + "\310\0\310\310\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0dd\0\310\310\0\377\377\0\310\310\0\310\310" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\310\310\0\310\310\0\377\377\0\310\310\0dd" + "\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0dd\0dd\0dd\0\310\310\0\377\377\0\377\377\0\310\310\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\310\310\0\377\377\0\377\377\0\310\310\0dd\0dd\0dd\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd" + "\0\0\0\0\0\0\0dd\0\377\377\0\310\310\0\310\310\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\310\310\0\310\310\0\377\377\0dd\0\0" + "\0\0\0\0\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0\0\0\0\0\0\0dd\0dd\0\0\0\0\0" + "\0\0dd\0dd\0\0\0\0\0\0\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0" + "dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0" + "dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0dd\0\0\0\0\0\0\0dd\0dd\0\0\0\0\0\0\0" + "dd\0dd\0\0\0\0\0\0\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0\0\0\0" + "\0\0\0dd\0dd\0\0\0\0\0\0\0dd\0dd\0\0\0\0\0\0\0\310\310\0\310\310\0\0\0\0" + "\0\0\0\310\310\0\310\310\0\0\0\0\0\0\0\310\310\0\310\310\0\0\0\0\0\0\0\310" + "\310\0\310\310\0\0\0\0\0\0\0\310\310\0\310\310\0\0\0\0\0\0\0\310\310\0\310" + "\310\0\0\0\0\0\0\0\310\310\0\310\310\0\0\0\0\0\0\0\310\310\0\310\310\0\0" + "\0\0\0\0\0\310\310\0\310\310\0\0\0\0\0\0\0\310\310\0\310\310\0\0\0\0\0\0" + "\0dd\0dd\0\0\0\0\0\0\0dd\0dd\0\0\0\0\0\0\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0dd\0dd\0dd\0\0\0\0dd\0dd\0dd\0\0\0\0dd\0\310\310\0\310" + "\310\0dd\0dd\0\310\310\0\310\310\0dd\0dd\0\310\310\0\310\310\0dd\0dd\0\310" + "\310\0\310\310\0dd\0dd\0\310\310\0\310\310\0dd\0dd\0\310\310\0\310\310\0" + "dd\0dd\0\310\310\0\310\310\0dd\0dd\0\310\310\0\310\310\0dd\0dd\0\310\310" + "\0\310\310\0dd\0dd\0\310\310\0\310\310\0dd\0dd\0\310\310\0\310\310\0dd\0" + "\0\0\0dd\0dd\0dd\0\0\0\0dd\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0dd\0dd\0\310\310\0\310\310\0\310\310\0\310" + "\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310" + "\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0" + "\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310" + "\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310" + "\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0" + "\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310\310\0\310" + "\310\0dd\0dd\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", +}; + +/** + * \brief Returns the BlitBlendAdd test image as SDL_Surface. + */ +SDL_Surface *SDLTest_ImageBlitBlendAdd(void) +{ + SDL_Surface *surface = SDL_CreateSurfaceFrom( + (void *)SDLTest_imageBlitBlendAdd.pixel_data, + SDLTest_imageBlitBlendAdd.width, + SDLTest_imageBlitBlendAdd.height, + SDLTest_imageBlitBlendAdd.width * SDLTest_imageBlitBlendAdd.bytes_per_pixel, SDL_PIXELFORMAT_RGB24); + return surface; +} + +static const SDLTest_SurfaceImage_t SDLTest_imageBlitBlend = { + 80, + 60, + 3, + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0<<\0<<\0\240\240\0\240\240\0aa\0aa\0\240" + "\240\0\240\240\0aa\0aa\0\240\240\0\240\240\0aa\0aa\0\240\240\0\240\240\0" + "aa\0aa\0\240\240\0\240\240\0aa\0aa\0\240\240\0\240\240\0aa\0aa\0\240\240" + "\0\240\240\0aa\0aa\0\240\240\0\240\240\0aa\0aa\0\240\240\0\240\240\0aa\0" + "aa\0\240\240\0\240\240\0aa\0aa\0\240\240\0\240\240\0aa\0aa\0\240\240\0\240" + "\240\0\240\240\0\240\240\0dd\0dd\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0dd\0<<\0\240\240\0\240\240\0\240\240" + "\0aa\0\305\305\0\305\305\0\305\305\0ww\0\305\305\0\305\305\0\305\305\0ww" + "\0\305\305\0\305\305\0\305\305\0ww\0\305\305\0\305\305\0\305\305\0ww\0\305" + "\305\0\305\305\0\305\305\0ww\0\305\305\0\305\305\0\305\305\0ww\0\305\305" + "\0\305\305\0\305\305\0ww\0\305\305\0\305\305\0\305\305\0ww\0\305\305\0\305" + "\305\0\305\305\0ww\0\305\305\0\305\305\0\305\305\0ww\0\305\305\0\305\305" + "\0\305\305\0\305\305\0\240\240\0\240\240\0\240\240\0\240\240\0dd\0dd\0dd" + "\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0dd\0<<\0\240\240" + "\0\240\240\0\240\240\0aa\0\305\305\0\305\305\0\305\305\0ww\0\333\333\0\333" + "\333\0\305\305\0ww\0\333\333\0\333\333\0\305\305\0ww\0\333\333\0\333\333" + "\0\305\305\0ww\0\333\333\0\333\333\0\305\305\0ww\0\333\333\0\333\333\0\305" + "\305\0ww\0\333\333\0\333\333\0\305\305\0ww\0\333\333\0\333\333\0\305\305" + "\0ww\0\333\333\0\333\333\0\305\305\0ww\0\333\333\0\333\333\0\305\305\0ww" + "\0\333\333\0\333\333\0\305\305\0\305\305\0\305\305\0\305\305\0\240\240\0" + "\240\240\0\240\240\0\240\240\0dd\0dd\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0dd\0dd\0dd\0<<\0aa\0aa\0aa\0::\0HH\0HH\0HH\0++\0PP\0PP\0PP\0" + "00\0PP" + "\0PP\0PP\0" + "00\0PP\0PP\0PP\0" + "00\0PP\0PP\0PP\0" + "00\0PP\0PP\0PP\0" + "00\0PP" + "\0PP\0PP\0" + "00\0PP\0PP\0PP\0" + "00\0PP\0PP\0PP\0" + "00\0PP\0PP\0PP\0" + "00\0PP" + "\0PP\0PP\0PP\0HH\0HH\0HH\0HH\0aa\0aa\0aa\0aa\0dd\0dd\0dd\0dd\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0dd\0dd\0dd\0$$\0aa\0\305\305\0\305\305\0``\0\205\205\0\351\351\0" + "\351\351\0||\0\222\222\0\321\321\0\321\321\0\177\177\0\225\225\0\324\324" + "\0\321\321\0\177\177\0\225\225\0\324\324\0\321\321\0\177\177\0\225\225\0" + "\324\324\0\321\321\0\177\177\0\225\225\0\324\324\0\321\321\0\177\177\0\225" + "\225\0\324\324\0\321\321\0\177\177\0\225\225\0\324\324\0\321\321\0\177\177" + "\0\225\225\0\324\324\0\321\321\0\177\177\0\225\225\0\324\324\0\321\321\0" + "\177\177\0\225\225\0\324\324\0\321\321\0\222\222\0\222\222\0\321\321\0\314" + "\314\0\351\351\0\351\351\0\254\254\0\236\236\0\305\305\0\305\305\0aa\0<<" + "\0dd\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0<<\0dd\0\240\240\0\240\240\0aa\0\255\255" + "\0\322\322\0\322\322\0\177\177\0\315\315\0\343\343\0\343\343\0\211\211\0" + "\313\313\0\346\346\0\346\346\0\211\211\0\313\313\0\346\346\0\346\346\0\211" + "\211\0\313\313\0\346\346\0\346\346\0\211\211\0\313\313\0\346\346\0\346\346" + "\0\211\211\0\313\313\0\346\346\0\346\346\0\211\211\0\313\313\0\346\346\0" + "\346\346\0\211\211\0\313\313\0\346\346\0\346\346\0\211\211\0\313\313\0\346" + "\346\0\346\346\0\211\211\0\313\313\0\346\346\0\346\346\0\211\211\0\320\320" + "\0\327\327\0\327\327\0\322\322\0\276\276\0\322\322\0\322\322\0\305\305\0" + "yy\0\210\210\0\210\210\0dd\0<<\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0<<\0\210\210\0\240" + "\240\0\240\240\0aa\0\266\266\0\322\322\0\322\322\0\205\205\0\327\327\0\343" + "\343\0\343\343\0\215\215\0\346\346\0\357\357\0\331\331\0\222\222\0\347\347" + "\0\357\357\0\331\331\0\222\222\0\347\347\0\357\357\0\331\331\0\222\222\0" + "\347\347\0\357\357\0\331\331\0\222\222\0\347\347\0\357\357\0\331\331\0\222" + "\222\0\347\347\0\357\357\0\331\331\0\222\222\0\347\347\0\357\357\0\331\331" + "\0\222\222\0\347\347\0\357\357\0\331\331\0\222\222\0\347\347\0\357\357\0" + "\331\331\0\222\222\0\357\357\0\346\346\0\320\320\0\351\351\0\327\327\0\343" + "\343\0\276\276\0\333\333\0\322\322\0\266\266\0yy\0\240\240\0\210\210\0\240" + "\240\0<<\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0dd\0<<\0\240\240\0\210\210\0\240\240\0aa\0ww\0nn\0\177" + "\177\0MM\0SS\0OO\0SS\0" + "22\0WW\0TT\0XX\0" + "55\0UU\0UU\0XX\0" + "55\0UU\0UU\0" + "XX\0" + "55\0UU\0UU\0XX\0" + "55\0UU\0UU\0XX\0" + "55\0UU\0UU\0XX\0" + "55\0UU\0UU\0" + "XX\0" + "55\0UU\0UU\0XX\0" + "55\0UU\0UU\0XX\0" + "55\0UU\0XX\0TT\0TT\0LL\0OO\0SS" + "\0SS\0ss\0\177\177\0nn\0nn\0yy\0\210\210\0\240\240\0\240\240\0<<\0dd\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<<" + "\0\240\240\0\240\240\0\210\210\0HH\0\205\205\0\351\351\0\333\333\0pp\0\225" + "\225\0\371\371\0\363\363\0\202\202\0\231\231\0\330\330\0\325\325\0\203\203" + "\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0\324\324\0" + "\203\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0\324" + "\324\0\203\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331" + "\0\324\324\0\203\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0" + "\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0\325\325\0\231\231\0\231" + "\231\0\330\330\0\323\323\0\371\371\0\371\371\0\274\274\0\257\257\0\351\351" + "\0\351\351\0\205\205\0``\0\240\240\0\240\240\0\240\240\0<<\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<<\0\240\240" + "\0\240\240\0RR\0\207\207\0\304\304\0\304\304\0nn\0\275\275\0\343\343\0\343" + "\343\0\205\205\0\324\324\0\352\352\0\352\352\0\214\214\0\316\316\0\352\352" + "\0\352\352\0\213\213\0\316\316\0\352\352\0\352\352\0\213\213\0\316\316\0" + "\352\352\0\352\352\0\213\213\0\316\316\0\352\352\0\352\352\0\213\213\0\316" + "\316\0\352\352\0\352\352\0\213\213\0\316\316\0\352\352\0\352\352\0\213\213" + "\0\316\316\0\352\352\0\352\352\0\213\213\0\316\316\0\352\352\0\352\352\0" + "\213\213\0\316\316\0\352\352\0\352\352\0\214\214\0\324\324\0\336\336\0\336" + "\336\0\331\331\0\310\310\0\343\343\0\343\343\0\325\325\0\217\217\0\254\254" + "\0\254\254\0\207\207\0aa\0\240\240\0\240\240\0<<\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\240\0\240\240\0aa" + "\0\225\225\0\304\304\0\304\304\0\205\205\0\276\276\0\343\343\0\340\340\0" + "\222\222\0\333\333\0\352\352\0\351\351\0\226\226\0\347\347\0\362\362\0\333" + "\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351\351\0\361\361" + "\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351\351\0" + "\361\361\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351" + "\351\0\361\361\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230" + "\0\351\351\0\361\361\0\333\333\0\230\230\0\362\362\0\351\351\0\323\323\0" + "\366\366\0\336\336\0\351\351\0\304\304\0\351\351\0\343\343\0\304\304\0\217" + "\217\0\333\333\0\254\254\0\266\266\0aa\0\240\240\0\240\240\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\240\0aa" + "\0\305\305\0\225\225\0\304\304\0ww\0\205\205\0ss\0\211\211\0RR\0VV\0PP\0" + "VV\0" + "33\0XX\0UU\0YY\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0" + "XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0" + "XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0YY\0UU\0UU\0MM\0QQ\0UU\0UU\0ww\0\211\211" + "\0ww\0||\0\217\217\0\254\254\0\266\266\0\305\305\0aa\0\240\240\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0aa\0\305" + "\305\0\305\305\0\225\225\0UU\0\222\222\0\366\366\0\340\340\0tt\0\231\231" + "\0\375\375\0\364\364\0\203\203\0\231\231\0\331\331\0\326\326\0\203\203\0" + "\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0\324\324\0\203" + "\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0\324\324" + "\0\203\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0" + "\324\324\0\203\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331" + "\331\0\324\324\0\203\203\0\231\231\0\331\331\0\326\326\0\231\231\0\231\231" + "\0\331\331\0\324\324\0\373\373\0\375\375\0\300\300\0\263\263\0\361\361\0" + "\366\366\0\222\222\0mm\0\266\266\0\305\305\0\305\305\0aa\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<<\0\305\305\0" + "\305\305\0``\0\214\214\0\321\321\0\321\321\0rr\0\277\277\0\346\346\0\346" + "\346\0\206\206\0\324\324\0\353\353\0\353\353\0\215\215\0\316\316\0\353\353" + "\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0\213\213\0\316\316\0" + "\353\353\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0\213\213\0\316" + "\316\0\353\353\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0\213\213" + "\0\316\316\0\353\353\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0" + "\213\213\0\316\316\0\353\353\0\353\353\0\215\215\0\324\324\0\337\337\0\337" + "\337\0\331\331\0\312\312\0\346\346\0\346\346\0\330\330\0\224\224\0\271\271" + "\0\271\271\0\217\217\0nn\0\305\305\0\305\305\0<<\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\240\0\305\305\0ww" + "\0\225\225\0\304\304\0\314\314\0\222\222\0\277\277\0\343\343\0\342\342\0" + "\226\226\0\333\333\0\352\352\0\351\351\0\227\227\0\350\350\0\362\362\0\333" + "\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351\351\0\361\361" + "\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351\351\0" + "\361\361\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351" + "\351\0\361\361\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230" + "\0\351\351\0\361\361\0\333\333\0\230\230\0\362\362\0\351\351\0\323\323\0" + "\370\370\0\336\336\0\352\352\0\306\306\0\354\354\0\344\344\0\305\305\0\227" + "\227\0\343\343\0\254\254\0\266\266\0ww\0\305\305\0\240\240\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\240\0aa" + "\0\333\333\0\236\236\0\304\304\0ww\0\210\210\0tt\0\211\211\0RR\0VV\0PP\0" + "VV\0" + "33\0XX\0UU\0YY\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0" + "XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0" + "XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0YY\0UU\0UU\0MM\0QQ\0UU\0UU\0ww\0\211\211" + "\0ww\0}}\0\217\217\0\254\254\0\276\276\0\333\333\0aa\0\240\240\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0aa\0\305" + "\305\0\305\305\0\236\236\0XX\0\222\222\0\366\366\0\341\341\0tt\0\231\231" + "\0\375\375\0\364\364\0\203\203\0\231\231\0\331\331\0\326\326\0\203\203\0" + "\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0\324\324\0\203" + "\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0\324\324" + "\0\203\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0" + "\324\324\0\203\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331" + "\331\0\324\324\0\203\203\0\231\231\0\331\331\0\326\326\0\231\231\0\231\231" + "\0\331\331\0\324\324\0\373\373\0\375\375\0\300\300\0\263\263\0\361\361\0" + "\366\366\0\222\222\0pp\0\276\276\0\305\305\0\305\305\0aa\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<<\0\305\305\0" + "\305\305\0``\0\217\217\0\324\324\0\324\324\0rr\0\300\300\0\347\347\0\347" + "\347\0\206\206\0\324\324\0\353\353\0\353\353\0\215\215\0\316\316\0\353\353" + "\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0\213\213\0\316\316\0" + "\353\353\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0\213\213\0\316" + "\316\0\353\353\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0\213\213" + "\0\316\316\0\353\353\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0" + "\213\213\0\316\316\0\353\353\0\353\353\0\215\215\0\324\324\0\337\337\0\337" + "\337\0\332\332\0\312\312\0\347\347\0\347\347\0\330\330\0\224\224\0\274\274" + "\0\274\274\0\222\222\0nn\0\305\305\0\305\305\0<<\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\240\0\305\305\0ww" + "\0\225\225\0\304\304\0\314\314\0\225\225\0\300\300\0\344\344\0\342\342\0" + "\226\226\0\333\333\0\352\352\0\351\351\0\227\227\0\350\350\0\362\362\0\333" + "\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351\351\0\361\361" + "\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351\351\0" + "\361\361\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351" + "\351\0\361\361\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230" + "\0\351\351\0\361\361\0\333\333\0\230\230\0\362\362\0\351\351\0\323\323\0" + "\370\370\0\337\337\0\352\352\0\306\306\0\355\355\0\345\345\0\306\306\0\231" + "\231\0\343\343\0\254\254\0\266\266\0ww\0\305\305\0\240\240\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\240\0aa" + "\0\333\333\0\236\236\0\304\304\0ww\0\210\210\0tt\0\211\211\0RR\0VV\0PP\0" + "VV\0" + "33\0XX\0UU\0YY\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0" + "XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0" + "XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0YY\0UU\0UU\0MM\0QQ\0UU\0UU\0ww\0\211\211" + "\0ww\0}}\0\217\217\0\254\254\0\276\276\0\333\333\0aa\0\240\240\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0aa\0\305" + "\305\0\305\305\0\236\236\0XX\0\222\222\0\366\366\0\341\341\0tt\0\231\231" + "\0\375\375\0\364\364\0\203\203\0\231\231\0\331\331\0\326\326\0\203\203\0" + "\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0\324\324\0\203" + "\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0\324\324" + "\0\203\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0" + "\324\324\0\203\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331" + "\331\0\324\324\0\203\203\0\231\231\0\331\331\0\326\326\0\231\231\0\231\231" + "\0\331\331\0\324\324\0\373\373\0\375\375\0\300\300\0\263\263\0\361\361\0" + "\366\366\0\222\222\0pp\0\276\276\0\305\305\0\305\305\0aa\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<<\0\305\305\0" + "\305\305\0``\0\217\217\0\324\324\0\324\324\0rr\0\300\300\0\347\347\0\347" + "\347\0\206\206\0\324\324\0\353\353\0\353\353\0\215\215\0\316\316\0\353\353" + "\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0\213\213\0\316\316\0" + "\353\353\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0\213\213\0\316" + "\316\0\353\353\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0\213\213" + "\0\316\316\0\353\353\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0" + "\213\213\0\316\316\0\353\353\0\353\353\0\215\215\0\324\324\0\337\337\0\337" + "\337\0\332\332\0\312\312\0\347\347\0\347\347\0\330\330\0\224\224\0\274\274" + "\0\274\274\0\222\222\0nn\0\305\305\0\305\305\0<<\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\240\0\305\305\0ww" + "\0\225\225\0\304\304\0\314\314\0\225\225\0\300\300\0\344\344\0\342\342\0" + "\226\226\0\333\333\0\352\352\0\351\351\0\227\227\0\350\350\0\362\362\0\333" + "\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351\351\0\361\361" + "\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351\351\0" + "\361\361\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351" + "\351\0\361\361\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230" + "\0\351\351\0\361\361\0\333\333\0\230\230\0\362\362\0\351\351\0\323\323\0" + "\370\370\0\337\337\0\352\352\0\306\306\0\355\355\0\345\345\0\306\306\0\231" + "\231\0\343\343\0\254\254\0\266\266\0ww\0\305\305\0\240\240\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\240\0aa" + "\0\333\333\0\236\236\0\304\304\0ww\0\210\210\0tt\0\211\211\0RR\0VV\0PP\0" + "VV\0" + "33\0XX\0UU\0YY\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0" + "XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0" + "XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0YY\0UU\0UU\0MM\0QQ\0UU\0UU\0ww\0\211\211" + "\0ww\0}}\0\217\217\0\254\254\0\276\276\0\333\333\0aa\0\240\240\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0aa\0\305" + "\305\0\305\305\0\236\236\0XX\0\222\222\0\366\366\0\341\341\0tt\0\231\231" + "\0\375\375\0\364\364\0\203\203\0\231\231\0\331\331\0\326\326\0\203\203\0" + "\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0\324\324\0\203" + "\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0\324\324" + "\0\203\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0" + "\324\324\0\203\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331" + "\331\0\324\324\0\203\203\0\231\231\0\331\331\0\326\326\0\231\231\0\231\231" + "\0\331\331\0\324\324\0\373\373\0\375\375\0\300\300\0\263\263\0\361\361\0" + "\366\366\0\222\222\0pp\0\276\276\0\305\305\0\305\305\0aa\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<<\0\305\305\0" + "\305\305\0``\0\217\217\0\324\324\0\324\324\0rr\0\300\300\0\347\347\0\347" + "\347\0\206\206\0\324\324\0\353\353\0\353\353\0\215\215\0\316\316\0\353\353" + "\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0\213\213\0\316\316\0" + "\353\353\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0\213\213\0\316" + "\316\0\353\353\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0\213\213" + "\0\316\316\0\353\353\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0" + "\213\213\0\316\316\0\353\353\0\353\353\0\215\215\0\324\324\0\337\337\0\337" + "\337\0\332\332\0\312\312\0\347\347\0\347\347\0\330\330\0\224\224\0\274\274" + "\0\274\274\0\222\222\0nn\0\305\305\0\305\305\0<<\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\240\0\305\305\0ww" + "\0\225\225\0\304\304\0\314\314\0\225\225\0\300\300\0\344\344\0\342\342\0" + "\226\226\0\333\333\0\352\352\0\351\351\0\227\227\0\350\350\0\362\362\0\333" + "\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351\351\0\361\361" + "\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351\351\0" + "\361\361\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351" + "\351\0\361\361\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230" + "\0\351\351\0\361\361\0\333\333\0\230\230\0\362\362\0\351\351\0\323\323\0" + "\370\370\0\337\337\0\352\352\0\306\306\0\355\355\0\345\345\0\306\306\0\231" + "\231\0\343\343\0\254\254\0\266\266\0ww\0\305\305\0\240\240\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\240\0aa" + "\0\333\333\0\236\236\0\304\304\0ww\0\210\210\0tt\0\211\211\0RR\0VV\0PP\0" + "VV\0" + "33\0XX\0UU\0YY\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0" + "XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0UU\0" + "XX\0" + "66\0UU\0UU\0XX\0" + "66\0UU\0YY\0UU\0UU\0MM\0QQ\0UU\0UU\0ww\0\211\211" + "\0ww\0}}\0\217\217\0\254\254\0\276\276\0\333\333\0aa\0\240\240\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0aa\0\305" + "\305\0\305\305\0\236\236\0XX\0\222\222\0\366\366\0\341\341\0tt\0\231\231" + "\0\375\375\0\364\364\0\203\203\0\231\231\0\331\331\0\326\326\0\203\203\0" + "\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0\324\324\0\203" + "\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0\324\324" + "\0\203\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331\331\0" + "\324\324\0\203\203\0\231\231\0\331\331\0\324\324\0\203\203\0\231\231\0\331" + "\331\0\324\324\0\203\203\0\231\231\0\331\331\0\326\326\0\231\231\0\231\231" + "\0\331\331\0\324\324\0\373\373\0\375\375\0\300\300\0\263\263\0\361\361\0" + "\366\366\0\222\222\0pp\0\276\276\0\305\305\0\305\305\0aa\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<<\0\305\305\0" + "\305\305\0``\0\217\217\0\324\324\0\324\324\0rr\0\300\300\0\347\347\0\347" + "\347\0\206\206\0\324\324\0\353\353\0\353\353\0\215\215\0\316\316\0\353\353" + "\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0\213\213\0\316\316\0" + "\353\353\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0\213\213\0\316" + "\316\0\353\353\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0\213\213" + "\0\316\316\0\353\353\0\353\353\0\213\213\0\316\316\0\353\353\0\353\353\0" + "\213\213\0\316\316\0\353\353\0\353\353\0\215\215\0\324\324\0\337\337\0\337" + "\337\0\332\332\0\312\312\0\347\347\0\347\347\0\330\330\0\224\224\0\274\274" + "\0\274\274\0\222\222\0nn\0\305\305\0\305\305\0<<\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\240\0\305\305\0ww" + "\0\225\225\0\304\304\0\314\314\0\225\225\0\300\300\0\344\344\0\342\342\0" + "\226\226\0\333\333\0\352\352\0\351\351\0\227\227\0\350\350\0\362\362\0\333" + "\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351\351\0\361\361" + "\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351\351\0" + "\361\361\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230\0\351" + "\351\0\361\361\0\333\333\0\230\230\0\351\351\0\361\361\0\333\333\0\230\230" + "\0\351\351\0\361\361\0\333\333\0\230\230\0\362\362\0\351\351\0\323\323\0" + "\370\370\0\337\337\0\352\352\0\306\306\0\355\355\0\345\345\0\306\306\0\231" + "\231\0\343\343\0\254\254\0\266\266\0ww\0\305\305\0\240\240\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\240\0aa" + "\0\333\333\0\236\236\0\304\304\0ww\0\340\340\0\300\300\0\343\343\0\210\210" + "\0\354\354\0\333\333\0\352\352\0\215\215\0\361\361\0\350\350\0\362\362\0" + "\223\223\0\351\351\0\351\351\0\361\361\0\223\223\0\351\351\0\351\351\0\361" + "\361\0\223\223\0\351\351\0\351\351\0\361\361\0\223\223\0\351\351\0\351\351" + "\0\361\361\0\223\223\0\351\351\0\351\351\0\361\361\0\223\223\0\351\351\0" + "\351\351\0\361\361\0\223\223\0\351\351\0\351\351\0\361\361\0\223\223\0\351" + "\351\0\351\351\0\361\361\0\223\223\0\351\351\0\362\362\0\351\351\0\351\351" + "\0\323\323\0\336\336\0\351\351\0\351\351\0\304\304\0\343\343\0\305\305\0" + "\317\317\0\217\217\0\254\254\0\276\276\0\333\333\0aa\0\240\240\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0aa\0\305" + "\305\0\305\305\0\236\236\0\222\222\0\361\361\0\361\361\0\316\316\0\230\230" + "\0\373\373\0\373\373\0\344\344\0\231\231\0\375\375\0\375\375\0\357\357\0" + "\231\231\0\375\375\0\375\375\0\347\347\0\231\231\0\375\375\0\375\375\0\347" + "\347\0\231\231\0\375\375\0\375\375\0\347\347\0\231\231\0\375\375\0\375\375" + "\0\347\347\0\231\231\0\375\375\0\375\375\0\347\347\0\231\231\0\375\375\0" + "\375\375\0\347\347\0\231\231\0\375\375\0\375\375\0\347\347\0\231\231\0\375" + "\375\0\375\375\0\347\347\0\231\231\0\375\375\0\375\375\0\360\360\0\373\373" + "\0\375\375\0\375\375\0\347\347\0\367\367\0\373\373\0\373\373\0\326\326\0" + "\351\351\0\361\361\0\361\361\0\271\271\0\276\276\0\305\305\0\305\305\0aa" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0<<\0\305\305\0\305\305\0\236\236\0HH\0\271\271\0\271\271\0\224\224\0VV" + "\0\277\277\0\277\277\0\251\251\0DD\0\252\252\0\252\252\0\235\235\0FF\0\253" + "\253\0\253\253\0\224\224\0EE\0\253\253\0\253\253\0\224\224\0EE\0\253\253" + "\0\253\253\0\224\224\0EE\0\253\253\0\253\253\0\224\224\0EE\0\253\253\0\253" + "\253\0\224\224\0EE\0\253\253\0\253\253\0\224\224\0EE\0\253\253\0\253\253" + "\0\224\224\0EE\0\253\253\0\253\253\0\224\224\0EE\0\253\253\0\253\253\0\235" + "\235\0rr\0uu\0uu\0^^\0\272\272\0\277\277\0\277\277\0\230\230\0\205\205\0" + "\222\222\0\222\222\0MM\0\266\266\0\305\305\0\305\305\0<<\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\240\0\305" + "\305\0\305\305\0RR\0\236\236\0\254\254\0\361\361\0VV\0\267\267\0\263\263" + "\0\356\356\0ee\0\247\247\0\244\244\0\356\356\0^^\0\251\251\0\247\247\0\365" + "\365\0bb\0\242\242\0\247\247\0\365\365\0bb\0\242\242\0\247\247\0\365\365" + "\0bb\0\242\242\0\247\247\0\365\365\0bb\0\242\242\0\247\247\0\365\365\0bb" + "\0\242\242\0\247\247\0\365\365\0bb\0\242\242\0\247\247\0\365\365\0bb\0\242" + "\242\0\247\247\0\365\365\0bb\0\242\242\0\247\247\0\365\365\0\252\252\0ee" + "\0jj\0\345\345\0tt\0\246\246\0\251\251\0\321\321\0\272\272\0ff\0\222\222" + "\0\322\322\0ww\0\210\210\0\305\305\0\305\305\0\240\240\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\240\0\240\240" + "\0\305\305\0``\0\236\236\0\236\236\0\254\254\0VV\0\264\264\0\254\254\0\261" + "\261\0dd\0\246\246\0\240\240\0\243\243\0^^\0\251\251\0\246\246\0\246\246" + "\0bb\0\242\242\0\246\246\0\246\246\0bb\0\242\242\0\246\246\0\246\246\0bb" + "\0\242\242\0\246\246\0\246\246\0bb\0\242\242\0\246\246\0\246\246\0bb\0\242" + "\242\0\246\246\0\246\246\0bb\0\242\242\0\246\246\0\246\246\0bb\0\242\242" + "\0\246\246\0\246\246\0bb\0\242\242\0\246\246\0\246\246\0\251\251\0dd\0hh" + "\0hh\0pp\0\243\243\0\240\240\0\236\236\0\264\264\0cc\0\177\177\0ww\0ww\0" + "\225\225\0\305\305\0\240\240\0\240\240\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\240\0\240\240\0\240\240\0``" + "\0\351\351\0\333\333\0\333\333\0||\0\366\366\0\361\361\0\361\361\0\211\211" + "\0\373\373\0\371\371\0\371\371\0\221\221\0\375\375\0\374\374\0\374\374\0" + "\224\224\0\365\365\0\374\374\0\374\374\0\224\224\0\365\365\0\374\374\0\374" + "\374\0\224\224\0\365\365\0\374\374\0\374\374\0\224\224\0\365\365\0\374\374" + "\0\374\374\0\224\224\0\365\365\0\374\374\0\374\374\0\224\224\0\365\365\0" + "\374\374\0\374\374\0\224\224\0\365\365\0\374\374\0\374\374\0\224\224\0\365" + "\365\0\374\374\0\374\374\0\375\375\0\356\356\0\371\371\0\371\371\0\372\372" + "\0\340\340\0\361\361\0\361\361\0\364\364\0\307\307\0\333\333\0\333\333\0" + "\351\351\0\225\225\0\240\240\0\240\240\0\240\240\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0\240\240\0\240\240" + "\0aa\0\304\304\0\351\351\0\351\351\0\205\205\0\340\340\0\366\366\0\366\366" + "\0\222\222\0\355\355\0\373\373\0\373\373\0\227\227\0\364\364\0\375\375\0" + "\375\375\0\230\230\0\360\360\0\375\375\0\375\375\0\230\230\0\360\360\0\375" + "\375\0\375\375\0\230\230\0\360\360\0\375\375\0\375\375\0\230\230\0\360\360" + "\0\375\375\0\375\375\0\230\230\0\360\360\0\375\375\0\375\375\0\230\230\0" + "\360\360\0\375\375\0\375\375\0\230\230\0\360\360\0\375\375\0\375\375\0\230" + "\230\0\360\360\0\375\375\0\375\375\0\373\373\0\356\356\0\373\373\0\373\373" + "\0\367\367\0\340\340\0\364\364\0\364\364\0\354\354\0\304\304\0\351\351\0" + "\351\351\0\322\322\0\210\210\0\240\240\0\240\240\0dd\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0\240\240\0\240" + "\240\0<<\0\240\240\0\305\305\0\351\351\0ww\0\320\320\0\301\301\0\324\324" + "\0\211\211\0\345\345\0\316\316\0\324\324\0\217\217\0\356\356\0\323\323\0" + "\326\326\0\223\223\0\354\354\0\323\323\0\326\326\0\223\223\0\354\354\0\323" + "\323\0\326\326\0\223\223\0\354\354\0\323\323\0\326\326\0\223\223\0\354\354" + "\0\323\323\0\326\326\0\223\223\0\354\354\0\323\323\0\326\326\0\223\223\0" + "\354\354\0\323\323\0\326\326\0\223\223\0\354\354\0\323\323\0\326\326\0\223" + "\223\0\354\354\0\323\323\0\326\326\0\362\362\0\344\344\0\261\261\0\272\272" + "\0\364\364\0\340\340\0\225\225\0\205\205\0\340\340\0\276\276\0\351\351\0" + "\266\266\0\240\240\0dd\0\240\240\0\240\240\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0\240\240\0aa\0\240" + "\240\0\240\240\0\305\305\0ww\0\305\305\0\240\240\0\266\266\0\205\205\0\333" + "\333\0\266\266\0\304\304\0\215\215\0\352\352\0\305\305\0\314\314\0\222\222" + "\0\352\352\0\305\305\0\314\314\0\222\222\0\352\352\0\305\305\0\314\314\0" + "\222\222\0\352\352\0\305\305\0\314\314\0\222\222\0\352\352\0\305\305\0\314" + "\314\0\222\222\0\352\352\0\305\305\0\314\314\0\222\222\0\352\352\0\305\305" + "\0\314\314\0\222\222\0\352\352\0\305\305\0\314\314\0\222\222\0\352\352\0" + "\305\305\0\314\314\0\361\361\0\335\335\0\242\242\0\236\236\0\333\333\0\312" + "\312\0ii\0aa\0\305\305\0\255\255\0\266\266\0\240\240\0\240\240\0\210\210" + "\0\240\240\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0dd\0dd\0dd\0aa\0\305\305\0\240\240\0\240\240\0ww\0\333" + "\333\0\305\305\0\305\305\0\205\205\0\351\351\0\333\333\0\333\333\0\217\217" + "\0\363\363\0\351\351\0\351\351\0\223\223\0\357\357\0\351\351\0\351\351\0" + "\223\223\0\357\357\0\351\351\0\351\351\0\223\223\0\357\357\0\351\351\0\351" + "\351\0\223\223\0\357\357\0\351\351\0\351\351\0\223\223\0\357\357\0\351\351" + "\0\351\351\0\223\223\0\357\357\0\351\351\0\351\351\0\223\223\0\357\357\0" + "\351\351\0\351\351\0\223\223\0\357\357\0\351\351\0\351\351\0\363\363\0\345" + "\345\0\333\333\0\333\333\0\340\340\0\312\312\0\305\305\0\305\305\0\322\322" + "\0\255\255\0\240\240\0\240\240\0\305\305\0\210\210\0dd\0dd\0dd\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd" + "\0dd\0dd\0aa\0\305\305\0\305\305\0\240\240\0ww\0\333\333\0\333\333\0\305" + "\305\0\205\205\0\355\355\0\355\355\0\336\336\0\215\215\0\364\364\0\364\364" + "\0\335\335\0\215\215\0\364\364\0\364\364\0\335\335\0\215\215\0\364\364\0" + "\364\364\0\335\335\0\215\215\0\364\364\0\364\364\0\335\335\0\215\215\0\364" + "\364\0\364\364\0\335\335\0\215\215\0\364\364\0\364\364\0\335\335\0\215\215" + "\0\364\364\0\364\364\0\335\335\0\215\215\0\364\364\0\364\364\0\335\335\0" + "\215\215\0\364\364\0\364\364\0\335\335\0\351\351\0\355\355\0\355\355\0\312" + "\312\0\305\305\0\322\322\0\322\322\0\255\255\0\240\240\0\305\305\0\305\305" + "\0\210\210\0dd\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0\0\0\0\0\0\0dd\0\305\305\0aa" + "\0" + "11\0\225\225\0\351\351\0\205\205\0HH\0\254\254\0\333\333\0ww\0BB\0\264" + "\264\0\340\340\0nn\0BB\0\264\264\0\340\340\0nn\0BB\0\264\264\0\340\340\0" + "nn\0BB\0\264\264\0\340\340\0nn\0BB\0\264\264\0\340\340\0nn\0BB\0\264\264" + "\0\340\340\0nn\0BB\0\264\264\0\340\340\0nn\0BB\0\264\264\0\340\340\0nn\0" + "BB\0\264\264\0\340\340\0nn\0nn\0\205\205\0\314\314\0\266\266\0\304\304\0" + "\351\351\0\236\236\0yy\0\210\210\0\305\305\0<<\0\0\0\0\0\0\0dd\0dd\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0dd\0dd\0\0\0\0\0\0\0dd\0dd\0\0\0\0\0\0\0dd\0dd\0\0\0\0\0\0" + "\0dd\0dd\0\25\25\0\14\14\0dd\0dd\0\25\25\0\14\14\0dd\0dd\0\25\25\0\14\14" + "\0dd\0dd\0\25\25\0\14\14\0dd\0dd\0\25\25\0\14\14\0dd\0dd\0\25\25\0\14\14" + "\0dd\0dd\0\25\25\0\14\14\0dd\0dd\0\25\25\0\14\14\0dd\0dd\0\25\25\0\14\14" + "\0dd\0dd\0\25\25\0\25\25\0\0\0\0\0\0\0$$\0$$\0\0\0\0\0\0\0<<\0<<\0\0\0\0" + "\0\0\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0\0\0\0\0\0\0dd\0dd\0" + "\0\0\0\0\0\0dd\0dd\0\0\0\0\0\0\0yy\0yy\0\0\0\0\0\0\0yy\0yy\0\0\0\0\0\0\0" + "yy\0yy\0\0\0\0\0\0\0yy\0yy\0\0\0\0\0\0\0yy\0yy\0\0\0\0\0\0\0yy\0yy\0\0\0" + "\0\0\0\0yy\0yy\0\0\0\0\0\0\0yy\0yy\0\0\0\0\0\0\0yy\0yy\0\0\0\0\0\0\0yy\0" + "yy\0\0\0\0\0\0\0$$\0$$\0\0\0\0\0\0\0<<\0<<\0\0\0\0\0\0\0dd\0dd\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0dd\0dd\0dd\0\0\0\0dd\0dd\0dd\0\0\0\0dd" + "\0\210\210\0\210\210\0\25\25\0dd\0\210\210\0\210\210\0\25\25\0dd\0\210\210" + "\0\210\210\0\25\25\0dd\0\210\210\0\210\210\0\25\25\0dd\0\210\210\0\210\210" + "\0\25\25\0dd\0\210\210\0\210\210\0\25\25\0dd\0\210\210\0\210\210\0\25\25" + "\0dd\0\210\210\0\210\210\0\25\25\0dd\0\210\210\0\210\210\0\25\25\0dd\0\210" + "\210\0\210\210\0\25\25\0dd\0\210\210\0\210\210\0$$\0\0\0\0<<\0<<\0<<\0\0" + "\0\0dd\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0dd\0dd\0<<\0<<\0\240\240\0\240\240\0aa\0aa\0\240\240\0\240\240\0aa\0" + "aa\0\240\240\0\240\240\0aa\0aa\0\240\240\0\240\240\0aa\0aa\0\240\240\0\240" + "\240\0aa\0aa\0\240\240\0\240\240\0aa\0aa\0\240\240\0\240\240\0aa\0aa\0\240" + "\240\0\240\240\0aa\0aa\0\240\240\0\240\240\0aa\0aa\0\240\240\0\240\240\0" + "aa\0aa\0\240\240\0\240\240\0aa\0aa\0\240\240\0\240\240\0\240\240\0\240\240" + "\0dd\0dd\0dd\0dd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", +}; + +/** + * \brief Returns the BlitBlend test image as SDL_Surface. + */ +SDL_Surface *SDLTest_ImageBlitBlend(void) +{ + SDL_Surface *surface = SDL_CreateSurfaceFrom( + (void *)SDLTest_imageBlitBlend.pixel_data, + SDLTest_imageBlitBlend.width, + SDLTest_imageBlitBlend.height, + SDLTest_imageBlitBlend.width * SDLTest_imageBlitBlend.bytes_per_pixel, SDL_PIXELFORMAT_RGB24); + return surface; +} + +static const SDLTest_SurfaceImage_t SDLTest_imageBlitBlendMod = { + 80, + 60, + 3, + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", +}; + +/** + * \brief Returns the BlitBlendMod test image as SDL_Surface. + */ +SDL_Surface *SDLTest_ImageBlitBlendMod(void) +{ + SDL_Surface *surface = SDL_CreateSurfaceFrom( + (void *)SDLTest_imageBlitBlendMod.pixel_data, + SDLTest_imageBlitBlendMod.width, + SDLTest_imageBlitBlendMod.height, + SDLTest_imageBlitBlendMod.width * SDLTest_imageBlitBlendMod.bytes_per_pixel, SDL_PIXELFORMAT_RGB24); + return surface; +} + +static const SDLTest_SurfaceImage_t SDLTest_imageBlitBlendNone = { + 80, + 60, + 3, + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377" + "\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\0" + "\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\0\0\0\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\0\0\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0" + "\377\377\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377" + "\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377\377\0\377\377" + "\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\0\0\0\377\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0\0\0\0\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377\377\0\377" + "\377\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\377\377\0" + "\377\377\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\0\377\377\0\377\377\0\377" + "\377\0\377\377\0\377\377\0\377\377\0\377\377\0\0\0\0\0\0\0\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377", +}; + +/** + * \brief Returns the BlitBlendNone test image as SDL_Surface. + */ +SDL_Surface *SDLTest_ImageBlitBlendNone(void) +{ + SDL_Surface *surface = SDL_CreateSurfaceFrom( + (void *)SDLTest_imageBlitBlendNone.pixel_data, + SDLTest_imageBlitBlendNone.width, + SDLTest_imageBlitBlendNone.height, + SDLTest_imageBlitBlendNone.width * SDLTest_imageBlitBlendNone.bytes_per_pixel, SDL_PIXELFORMAT_RGB24); + return surface; +} + +static const SDLTest_SurfaceImage_t SDLTest_imageBlitBlendAll = { + 80, + 60, + 3, + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\4\0\0\0\0\0\0\0" + "\0\11\0\0\11\0\0\0\0\0\0\0\0\16\0\0\16\0\0\0\0\0\0\0\0\11\0\0\11\0\0\0\0" + "\0\0\0\0\14\0\0\14\0\0\0\0\0\0\0\0\17\0\0\17\0\0\0\0\0\0\0\0\21\0\0\21\0" + "\0\0\0\0\0\0\0K\0\0K\0\0\0\0\0\0\0\0T\0\0T\0\0\0\0\0\0\0\0^\0\0^\0\0\0\0" + "\0\0\0\0g\0\0g\0\0\0\0\0\0\0\0\317\0\0\317\0\0\317\0\0\317\0\0\317\0\0\317" + "\0\0\317\0\0\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\4\0\0\4\0\0\0\0\0\11\0\0\11\0\0\11" + "\0\0\0\0\0\16\0\0\16\0\0\16\0\0\0\0\0\22\0\0\22\0\0\11\0\0\0\0\0\14\0\0\14" + "\0\0\14\0\0\0\0\0\17\0\0\17\0\0\17\0\0\0\0\0\21\0\0\21\0\0\21\0\0\0\0\0\24" + "\0\0\24\0\0K\0\0\0\0\0T\0\0T\0\0T\0\0\0\0\0^\0\0^\0\0^\0\0\0\0\0g\0\0g\0" + "\0g\0\0\0\0\0q\0\0q\0\0\317\0\0\317\0\0\317\0\0\317\0\0\317\0\0\317\0\0\317" + "\0\0\317\0\0\317\0\0\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\4\0\0\4\0\0\4\0\0\0\0\0\11\0\0\11\0\0\11\0\0\0\0\0" + "\16\0\0\16\0\0\16\0\0\0\0\0\22\0\0\22\0\0\22\0\0\0\0\0\14\0\0\14\0\0\14\0" + "\0\0\0\0\17\0\0\17\0\0\17\0\0\0\0\0\21\0\0\21\0\0\21\0\0\0\0\0\24\0\0\24" + "\0\0\24\0\0\0\0\0T\0\0T\0\0T\0\0\0\0\0^\0\0^\0\0^\0\0\0\0\0g\0\0g\0\0g\0" + "\0\0\0\0q\0\0q\0\0q\0\0\317\0\0\317\0\0\317\0\0\317\0\0\317\0\0\317\0\0\317" + "\0\0\317\0\0\317\0\0\317\0\0\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\4\0\0\4\0\0\4\0\0\0\0\0\10\0\0\10\0\0\10\0\0\0\0\0\15" + "\0\0\15\0\0\15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\16\0\0\16\0\0\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0J\0\0J\0\0J\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\317" + "\0\0\317\0\0\317\0\0\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\1\0\0\0\0\0\0\0\0\1\0\0\1\0\0\1\0\0\1" + "\0\0\4\0\0\4\0\0\0\0\0\0\0\0\7\0\0\7\0\0\0\0\0\0\0\0&\0\0&\0\0\32\0\0\32" + "\0\0&\0\0&\0\0&\0\0&\0\0C\0\0C\0\0\0\0\0\0\0\0^\0\0^\0\0\0\0\0\0\0\17\251" + "\0\17\251\0\17\251\0\17\251\0\17\251\0\17\251\0\17\251\0\17\251\0\0\0\0\0" + "\0\0\0\317\0\0\317\0\0\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\6\2\0\6\2\0\0\1\0\0\0\0\0\1\0\0\1\0\0\1\0\0\1\0\0\1\0\0\1\0\0" + "\17\0\0\0\0\0\4\0\0\11\0\0\11\0\0\0\0\6+\0\6+\0\0&\0\0\32\0\0&\0\0&\0\0&" + "\0\0&\0\0" + "5\0\0" + "5\0\2\210\0\0\0\0\0C\0\0|\0\0|\0\0\0\0\17\251\0\17\251" + "\0\17\251\0\17\251\0\17\251\0\17\251\0\17\251\0\17\251\0\17\251\0\17\251" + "\0$\360\0$\360\0\0\0\0\0\317\0\0\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" + "\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\1\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\6\2\0\6\2\0\6\2\0\0\0\0\0\1\0\0\1\0\0\1\0\0\1\0\0\1\0\0\1" + "\0\0\1\0\0\0\0\0\17\0\0\17\0\0\4\0\0\0\0\6+\0\6+\0\6+\0\0\32\0\0&\0\0&\0" + "\0&\0\0&\0\0" + "5\0\0" + "5\0\0" + "5\0\0\0\0\2\210\0\2\210\0\0C\0\0\0\0\17\251\0" + "\17\251\0\17\251\0\17\251\0\17\251\0\17\251\0\17\251\0\17\251\0\17\251\0" + "\17\251\0\17\251\0$\360\0$\360\0$\360\0\0\0\0\0\317\0\0\317\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\1\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "$\360\0$\360\0$\360\0$\360\0\0\0\0\0\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0" + "\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\1\0\14\1\0\14\1" + "\0\14\1\0\15\1\0\15\1\0\0\0\0\0\0\0\14\2\0\14\2\0\14\2\0\14\2\0\16\2\0\16" + "\2\0\0\0\0\0\0\0\14!\0\14!\0\14!\0\14!\0\17(\0\17(\0\0\0\0\0\0\0\14+\0\14" + "+\0\14+\0\14+\0\20" + "9\0\20" + "9\0\0\0\0\0\0\0\36\215\0\36\215\0\36\215\0\36" + "\215\0(\264\0(\264\0\0\0\0\0\0\0\36\251\0\36\251\0\36\251\0\36\251\0\36\251" + "\0\36\251\0\36\251\0\36\251\0\0\0\0\0\0\0$\360\0$\360\0$\360\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\1\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\3" + "\0\36\3\0\14\1\0\14\1\0\15\1\0\15\1\0\15\1\0\0\0\0\14\2\0\14\2\0\14\2\0\14" + "\2\0\16\2\0\16\2\0\16\2\0\0\0\0\14\3\0\14\3\0\14!\0\14!\0\17(\0\17(\0\17" + "(\0\0\0\0\14+\0\14+\0\14+\0\14+\0\20" + "9\0\20" + "9\0\20" + "9\0\0\0\0\14" + "7\0\14" + "" + "7\0\36\215\0\36\215\0(\264\0(\264\0(\264\0\0\0\0\36\251\0\36\251\0\36\251" + "\0\36\251\0\36\251\0\36\251\0\36\251\0\36\251\0\36\251\0\36\251\0H\360\0" + "H\360\0\0\0\0$\360\0$\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\1\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\36\3\0\36\3\0\36\3\0\14\1\0\15\1\0\15\1\0\15\1" + "\0\0\0\0\14\2\0\14\2\0\14\2\0\14\2\0\16\2\0\16\2\0\16\2\0\0\0\0\14\3\0\14" + "\3\0\14\3\0\14!\0\17(\0\17(\0\17(\0\0\0\0\14+\0\14+\0\14+\0\14+\0\20" + "9\0" + "\20" + "9\0\20" + "9\0\0\0\0\14" + "7\0\14" + "7\0\14" + "7\0\36\215\0(\264\0(\264\0(\264" + "\0\0\0\0\36\251\0\36\251\0\36\251\0\36\251\0\36\251\0\36\251\0\36\251\0\36" + "\251\0\36\251\0\36\251\0\36\251\0H\360\0H\360\0H\360\0\0\0\0$\360\0$\360" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\13\1\0\13\1\0\13\1\0\13\1\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\11!\0" + "\11!\0\11!\0\11!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\23n\0\23n\0\23n\0\23n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0H\360\0H\360\0H\360\0H\360\0\0\0\0$\360\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\1\0\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\25\0\0\25\0\0\25\0\0\27\0" + "\0\13\0\0\13\0\0\1\0\0\11\0\0\4\0\0\4\0\0\0\0\0\0\0\0\25\3\0\25\3\0\0\0\0" + "\0\0\0\25\3\0\25\3\0\25\3\0\25\3\0\3\1\0\3\1\0\2\1\0\7\5\0\7\3\0\7\3\0\0" + "\0\0\0\0\0\25" + "4\0\25" + "4\0\0\0\0\0\0\0\25" + "4\0\25" + "4\0\25" + "4\0\25" + "4\0\20" + "\35\0\20\35\0\11\22\0\23F\0\34" + "6\0\34" + "6\0\0\0\0\0\0\0L\317\0L\317\0L\317" + "\0L\317\0L\317\0L\317\0L\317\0L\317\0\0\0\0\0\0\0" + "2\317\0" + "2\317\0" + "2\317" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0\25\0\0\25" + "\0\0\25\0\0\4\0\0\5\0\0\2\0\0\1\0\0\4\0\0\14\0\0\14\0\0\0\0\0\37\7\0\37\7" + "\0\25\3\0\0\0\0\25\3\0\25\3\0\25\3\0\25\3\0\37\6\0\37\6\0\15\4\0\11\3\0\7" + "\3\0\14\10\0\14\10\0\0\0\0\25\16\0\25\16\0\25" + "4\0\0\0\0\25" + "4\0\25" + "4\0" + "\25" + "4\0\25" + "4\0&Q\0&Q\0&Q\0\31" + "5\0\34" + "6\0&j\0&j\0\0\0\0" + "5q\0" + "5q\0L\317" + "\0L\317\0L\317\0L\317\0L\317\0L\317\0L\317\0L\317\0L\317\0L\317\0\0\0\0" + "2" + "\317\0" + "2\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\1\1\0\0\0\0\0\0\0\25\0" + "\0\25\0\0\25\0\0\31\1\0\5\0\0\5\0\0\2\0\0\4\0\0\14\0\0\14\0\0\0\0\0\37\7" + "\0\37\7\0\37\7\0\0\0\0\25\3\0\25\3\0\25\3\0\25\3\0\37\6\0\37\6\0\37\6\0\11" + "\3\0\16\6\0\16\6\0\7\3\0\0\0\0\25\16\0\25\16\0\25\16\0\0\0\0\25" + "4\0\25" + "4" + "\0\25" + "4\0\25" + "4\0&Q\0&Q\0&Q\0\31" + "5\0+X\0+X\0\34" + "6\0\0\0\0" + "5q\0" + "5q\0" + "" + "5q\0L\317\0L\317\0L\317\0L\317\0L\317\0L\317\0L\317\0L\317\0L\317\0L\317" + "\0L\317\0\0\0\0" + "2\317\0" + "2\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0" + "\0\0\0\0\25\0\0\25\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0L\317\0L\317\0L\317\0L\317" + "\0\0\0\0" + "2\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0e\4\0e\4\0\0\0\0\0\0\0e\11\0e\11\0\0\0\0\0\0\0e\16\0e\16\0\0\0\0\0\0" + "\0G\11\0G\11\0\0\0\0\0\0\0G\14\0G\14\0\0\0\0\0\0\0G\17\0G\17\0\0\0\0\0\0" + "\0G\21\0G\21\0\0\0\0\0\0\0GK\0GK\0\0\0\0\0\0\0GT\0GT\0\0\0\0\0\0\0G^\0G^" + "\0\0\0\0\0\0\0Gg\0Gg\0\0\0\0\0\0\0e\317\0e\317\0e\317\0e\317\0e\317\0e\317" + "\0e\317\0e\317\0\0\0\0\0\0\0L\317\0L\317\0L\317\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0e\4\0e\4\0e\4\0\0\0\0e\11\0e\11\0e\11\0\0\0" + "\0e\16\0e\16\0e\16\0\0\0\0e\22\0e\22\0G\11\0\0\0\0G\14\0G\14\0G\14\0\0\0" + "\0G\17\0G\17\0G\17\0\0\0\0G\21\0G\21\0G\21\0\0\0\0G\24\0G\24\0GK\0\0\0\0" + "GT\0GT\0GT\0\0\0\0G^\0G^\0G^\0\0\0\0Gg\0Gg\0Gg\0\0\0\0Gq\0Gq\0e\317\0e\317" + "\0e\317\0e\317\0e\317\0e\317\0e\317\0e\317\0e\317\0e\317\0\0\0\0L\317\0L" + "\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0e\4\0e\4\0e\4\0\0\0" + "\0e\11\0e\11\0e\11\0\0\0\0e\16\0e\16\0e\16\0\0\0\0e\22\0e\22\0e\22\0\0\0" + "\0G\14\0G\14\0G\14\0\0\0\0G\17\0G\17\0G\17\0\0\0\0G\21\0G\21\0G\21\0\0\0" + "\0G\24\0G\24\0G\24\0\0\0\0GT\0GT\0GT\0\0\0\0G^\0G^\0G^\0\0\0\0Gg\0Gg\0Gg" + "\0\0\0\0Gq\0Gq\0Gq\0e\317\0e\317\0e\317\0e\317\0e\317\0e\317\0e\317\0e\317" + "\0e\317\0e\317\0e\317\0\0\0\0L\317\0L\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0e\4\0e\4\0e\4\0\0\0\0b\10\0b\10\0b\10\0\0\0\0b\15\0b\15\0b\15\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0<\16\0<\16\0<\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0" + "2J\0" + "2J\0" + "2J\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0e\317\0e\317\0e\317\0e" + "\317\0\0\0\0L\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\216\1\0c\0\0c\0\0\0\0\0" + "`\0\0c\0\0c\0\0\2\0\0c\1\0i\0\0i\0\0\0\0\0\0\0\0e\0\0e\0\0\0\0\0\0\0\0{\1" + "\0{\1\0f\0\0f\0\0z\1\0z\1\0z\1\0z\1\0)\4\0)\4\0\0\0\0\0\0\0Q\7\0Q\7\0\0\0" + "\0\0\0\0{&\0{&\0W\32\0W\32\0z&\0z&\0z&\0z&\0IC\0IC\0\0\0\0\0\0\0X^\0X^\0" + "\0\0\0\0\0\0\261\251\0\261\251\0\261\251\0\261\251\0\261\251\0\261\251\0" + "\261\251\0\261\251\0\0\0\0\0\0\0e\317\0e\317\0e\317\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\216\1\0c\0\0`\0\0\2\0\0c\0\0c\0\0c\0\0\12\0\0k\1\0i\0\0" + "\0\0\0\11\0\0i\0\0i\0\0\0\0\0\256\2\0\256\2\0{\1\0f\0\0z\1\0z\1\0z\1\0z\1" + "\0\221\1\0\221\1\0\221\17\0\0\0\0)\4\0c\11\0c\11\0\0\0\0\256+\0\256+\0{&" + "\0W\32\0z&\0z&\0z&\0z&\0\2415\0\2415\0\243\210\0\0\0\0IC\0{|\0{|\0\0\0\0" + "\261\251\0\261\251\0\261\251\0\261\251\0\261\251\0\261\251\0\261\251\0\261" + "\251\0\261\251\0\261\251\0\264\360\0\264\360\0\0\0\0e\317\0e\317\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\216\1\0\216\1\0`\0\0\2\0\0c\0\0c\0\0c\0\0\12\0\0" + "k\1\0k\1\0\0\0\0\11\0\0i\0\0i\0\0\0\0\0\256\2\0\256\2\0\256\2\0f\0\0z\1\0" + "z\1\0z\1\0z\1\0\221\1\0\221\1\0\221\1\0\0\0\0\221\17\0\221\17\0)\4\0\0\0" + "\0\256+\0\256+\0\256+\0W\32\0z&\0z&\0z&\0z&\0\2415\0\2415\0\2415\0\0\0\0" + "\243\210\0\243\210\0IC\0\0\0\0\261\251\0\261\251\0\261\251\0\261\251\0\261" + "\251\0\261\251\0\261\251\0\261\251\0\261\251\0\261\251\0\261\251\0\264\360" + "\0\264\360\0\264\360\0\0\0\0e\317\0e\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\216\1" + "\0\211\1\0c\0\0\2\0\0c\0\0c\0\0k\0\0\12\0\0k\1\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\264\360\0\264\360" + "\0\264\360\0\264\360\0\0\0\0e\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\211\1\0\216\1" + "\0c\0\0\2\0\0c\0\0k\0\0q\0\0\20\0\0\0\0\0\0\0\0\322\1\0\322\1\0\322\1\0\322" + "\1\0\346\1\0\346\1\0\0\0\0\0\0\0\322\2\0\322\2\0\322\2\0\322\2\0\363\2\0" + "\363\2\0\0\0\0\0\0\0\322!\0\322!\0\322!\0\322!\0\371(\0\371(\0\0\0\0\0\0" + "\0\322+\0\322+\0\322+\0\322+\0\3719\0\3719\0\0\0\0\0\0\0\325\215\0\325\215" + "\0\325\215\0\325\215\0\374\264\0\374\264\0\0\0\0\0\0\0\325\251\0\325\251" + "\0\325\251\0\325\251\0\325\251\0\325\251\0\325\251\0\325\251\0\0\0\0\0\0" + "\0\264\360\0\264\360\0\264\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\211\1\0\216" + "\1\0c\0\0\2\0\0f\0\0m\0\0m\0\0\0\0\0\325\3\0\325\3\0\322\1\0\322\1\0\346" + "\1\0\346\1\0\346\1\0\0\0\0\322\2\0\322\2\0\322\2\0\322\2\0\363\2\0\363\2" + "\0\363\2\0\0\0\0\322\3\0\322\3\0\322!\0\322!\0\371(\0\371(\0\371(\0\0\0\0" + "\322+\0\322+\0\322+\0\322+\0\3719\0\3719\0\3719\0\0\0\0\3227\0\3227\0\325" + "\215\0\325\215\0\374\264\0\374\264\0\374\264\0\0\0\0\325\251\0\325\251\0" + "\325\251\0\325\251\0\325\251\0\325\251\0\325\251\0\325\251\0\325\251\0\325" + "\251\0\330\360\0\330\360\0\0\0\0\264\360\0\264\360\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\216\1\0\216\1\0c\0\0\10\0\0m\0\0m\0\0\0\0\0\325\3\0\325\3\0\325" + "\3\0\322\1\0\346\1\0\346\1\0\346\1\0\0\0\0\322\2\0\322\2\0\322\2\0\322\2" + "\0\363\2\0\363\2\0\363\2\0\0\0\0\322\3\0\322\3\0\322\3\0\322!\0\371(\0\371" + "(\0\371(\0\0\0\0\322+\0\322+\0\322+\0\322+\0\3719\0\3719\0\3719\0\0\0\0\322" + "7\0\3227\0\3227\0\325\215\0\374\264\0\374\264\0\374\264\0\0\0\0\325\251\0" + "\325\251\0\325\251\0\325\251\0\325\251\0\325\251\0\325\251\0\325\251\0\325" + "\251\0\325\251\0\325\251\0\330\360\0\330\360\0\330\360\0\0\0\0\264\360\0" + "\264\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\216\1\0\216\1\0i\0\0\10\0\0m\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\275\1\0\275\1\0\275\1\0" + "\275\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\244!\0\244!\0\244!\0\244!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\213n\0\213n\0\213n\0\213n\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\330\360\0\330\360\0\330\360\0\330" + "\360\0\0\0\0\264\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\216\1\0\224\1\0i\0\0\10\0" + "\0\0\0\0\0\0\0\325\3\0\325\3\0\325\3\0\351\3\0\365\1\0\365\1\0\14\0\0\313" + "\2\0#\2\0#\2\0\0\0\0\0\0\0\371\37\0\371\37\0\0\0\0\0\0\0\371\37\0\371\37" + "\0\371\37\0\371\37\0.\17\0.\17\0#\14\0\304-\0Y!\0Y!\0\0\0\0\0\0\0\371p\0" + "\371p\0\0\0\0\0\0\0\371p\0\371p\0\371p\0\371p\0O>\0O>\0" + "3(\0\247\227\0\211" + "s\0\211s\0\0\0\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\330\360\0\330\360\0\330\360\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\224\1\0i\0\0\0\0\0\0\0\0\325\3\0\325" + "\3\0\325\3\0\17\2\0\"\2\0!\0\0\35\0\0#\2\0\342\4\0\342\4\0\0\0\0\371\37\0" + "\371\37\0\371\37\0\0\0\0\371\37\0\371\37\0\371\37\0\371\37\0\3775\0\3775" + "\0\374%\0\304\34\0Y!\0\373C\0\373C\0\0\0\0\371p\0\371p\0\371p\0\0\0\0\371" + "p\0\371p\0\371p\0\371p\0\377\256\0\377\256\0\377\256\0\247q\0\211s\0\375" + "\342\0\375\342\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\0" + "\0\0\330\360\0\330\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\12\0\0\224\1\0\0\0" + "\0\0\0\0\325\3\0\325\3\0\325\3\0\344\5\0\"\2\0\"\2\0\200\0\0#\2\0\342\4\0" + "\342\4\0\0\0\0\371\37\0\371\37\0\371\37\0\0\0\0\371\37\0\371\37\0\371\37" + "\0\371\37\0\3775\0\3775\0\3775\0\304\34\0\3732\0\3732\0Y!\0\0\0\0\371p\0" + "\371p\0\371p\0\0\0\0\371p\0\371p\0\371p\0\371p\0\377\256\0\377\256\0\377" + "\256\0\247q\0\375\274\0\375\274\0\211s\0\0\0\0\374\360\0\374\360\0\374\360" + "\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\330\360\0\330\360\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\12\0\0\0\0\0i\0\0\0\0\0\325\3\0\325\3\0\344\5\0\344\5" + "\0\"\2\0\36\1\0" + "4\2\0#\2\0\342\4\0\0\0\0\371\37\0\371\37\0\371\37\0\0\0" + "\0\371\37\0\371\37\0\371\37\0\371\37\0\3775\0\3775\0\3775\0\307)\0\3732\0" + "\3732\0\3732\0\0\0\0\371p\0\371p\0\371p\0\0\0\0\371p\0\371p\0\371p\0\371" + "p\0\377\256\0\377\256\0\377\256\0\247q\0\375\274\0\375\274\0\375\274\0\0" + "\0\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360" + "\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\374\360\0\0\0\0\330\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\12\0\0" + "\10\0\0\0\0\0\325\3\0\344\5\0\344\5\0\344\5\0\340\4\0\367\11\0\364\3\0#\2" + "\0\0\0\0\371\37\0\371\37\0\371\37\0\0\0\0\371\37\0\371\37\0\371\37\0\371" + "\37\0\3775\0\3775\0\3775\0\307)\0\376G\0\3732\0\3732\0\0\0\0\371p\0\371p" + "\0\371p\0\0\0\0\371p\0\371p\0\371p\0\371p\0\377\256\0\377\256\0\377\256\0" + "\247q\0\375\274\0\375\274\0\375\274\0\0\0\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374" + "\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\12\0\0\10\0\0\0\0\0\0\0\0\17\2\0\17" + "\2\0\17\2\0\323\2\0\352\7\0\347\2\0\26\1\0\0\0\0\371\37\0\371\37\0\371\37" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0/\26\0/\26\0/\26\0\0\0\0" + "7\36\0" + "6\25\0" + "" + "6\25\0\0\0\0\371p\0\371p\0\371p\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O>\0O>\0" + "O>\0\0\0\0VK\0VK\0VK\0\0\0\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\12\0" + "\0\10\0\0\0\0\0\17\2\0\17\2\0\344\5\0\15\1\0\352\7\0\352\7\0\347\2\0\0\0" + "\0\371\37\0\371\37\0\371\37\0\0\0\0\0\0\0\0\0\0\362\4\0\0\0\0/\26\0/\26\0" + "\3775\0$\21\0" + "7\36\0" + "7\36\0\3672\0\0\0\0\371p\0\371p\0\371p\0\0\0\0\0\0" + "\0\0\0\0\370A\0\0\0\0O>\0O>\0\377\256\0" + "3(\0VK\0VK\0\372\264\0\0\0\0\374" + "\360\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\341\271\0\0\0\0\374\360" + "\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\343\350\0\0\0\0\374\360\0\374" + "\360\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\5\0\0\10\0\0\0\0" + "\0\17\2\0\17\2\0\17\2\0\15\1\0\352\7\0\352\7\0\347\2\0\0\0\0\371\37\0\371" + "\37\0\371\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0/\26\0/\26\0/\26\0$\21\0" + "7\36" + "\0" + "7\36\0" + "6\25\0\0\0\0\371p\0\371p\0\371p\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0O>\0O>\0O>\0" + "3(\0VK\0VK\0VK\0\0\0\0\374\360\0\374\360\0\374\360\0\374" + "\360\0\0\0\0\0\0\0\0\0\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\5\0\0\5\0\0\5\0\0\0\0\0\344\5\0\344\5\0\344\5\0\316\4\0\367" + "\11\0\367\11\0\364\3\0\0\0\0\371\37\0\371\37\0\371\37\0\0\0\0\371\37\0\371" + "\37\0\371\37\0\371\37\0\3775\0\3775\0\3775\0\307)\0\376G\0\376G\0\3732\0" + "\0\0\0\371p\0\371p\0\371p\0\0\0\0\371p\0\371p\0\371p\0\371p\0\377\256\0\377" + "\256\0\377\256\0\247q\0\375\274\0\375\274\0\375\274\0\0\0\0\374\360\0\374" + "\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360" + "\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5" + "\0\0\5\0\0\5\0\0\17\2\0\344\5\0\344\5\0\316\4\0\345\11\0\367\11\0\364\3\0" + "\0\0\0\371\37\0\371\37\0\371\37\0\0\0\0\371\37\0\371\37\0\371\37\0\371\37" + "\0\3775\0\3775\0\3775\0\307)\0\376G\0\376G\0\3732\0\0\0\0\371p\0\371p\0\371" + "p\0\0\0\0\371p\0\371p\0\371p\0\371p\0\377\256\0\377\256\0\377\256\0\247q" + "\0\375\274\0\375\274\0\375\274\0\0\0\0\374\360\0\374\360\0\374\360\0\374" + "\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360" + "\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\5\0\0\0\0\0\17\2" + "\0\344\5\0\344\5\0\15\1\0$\6\0$\6\0#\2\0\0\0\0\371\37\0\371\37\0\371\37\0" + "\0\0\0\371\37\0\371\37\0\371\37\0\371\37\0\3775\0/\26\0/\26\0\307)\0\376" + "G\0[/\0Y!\0\0\0\0\371p\0\371p\0\371p\0\0\0\0\371p\0\371p\0\371p\0\371p\0" + "\377\256\0O>\0O>\0\247q\0\375\274\0\211s\0\211s\0\0\0\0\374\360\0\374\360" + "\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\0\0\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0" + "\5\0\0\17\2\0\17\2\0\344\5\0\316\4\0$\6\0$\6\0#\2\0\0\0\0\371\37\0\371\37" + "\0\371\37\0\0\0\0\371\37\0\371\37\0\371\37\0\371\37\0\3775\0/\26\0/\26\0" + "\307)\0\376G\0[/\0Y!\0\0\0\0\371p\0\371p\0\371p\0\0\0\0\371p\0\371p\0\371" + "p\0\371p\0\377\256\0O>\0O>\0\247q\0\375\274\0\211s\0\211s\0\0\0\0\374\360" + "\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\0\0\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\5\0\0\24\2\0\17\2\0\17\2\0\316\4\0\345\11\0$\6\0#\2\0\0\0\0\371" + "\37\0\371\37\0\371\37\0\0\0\0\371\37\0\371\37\0\371\37\0\371\37\0\3775\0" + "\3775\0\3775\0\307)\0\376G\0\376G\0\3732\0\0\0\0\371p\0\371p\0\371p\0\0\0" + "\0\371p\0\371p\0\371p\0\371p\0\377\256\0\377\256\0\377\256\0\247q\0\375\274" + "\0\375\274\0\375\274\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\374" + "\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360" + "\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0" + "\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\24\2\0\24" + "\2\0\17\2\0\316\4\0\345\11\0\342\3\0#\2\0\0\0\0\371\37\0\371\37\0\371\37" + "\0\0\0\0\371\37\0\371\37\0\371\37\0\371\37\0\3775\0\3775\0\3775\0\307)\0" + "\376G\0\3732\0\3732\0\0\0\0\371p\0\371p\0\371p\0\0\0\0\371p\0\371p\0\371" + "p\0\371p\0\377\256\0\377\256\0\377\256\0\247q\0\375\274\0\375\274\0\375\274" + "\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374" + "\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360" + "\0\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\2\0\24\2\0\5\0\0\0\0\0\27\5\0\342\3\0\313" + "\1\0\0\0\0\371\37\0\371\37\0\0\0\0\0\0\0\0\0\0\371\37\0\0\0\0\0\0\0/\26\0" + "\3775\0\371\37\0\302\30\0\3716\0Y!\0#\14\0\0\0\0\371p\0\371p\0\0\0\0\0\0" + "\0\0\0\0\371p\0\0\0\0\0\0\0O>\0\377\256\0\371p\0\243I\0\371\224\0\211s\0" + "" + "3(\0\0\0\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\374\360\0\374\360\0\374" + "\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0" + "\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\17\2\0\17\2\0\0\0\0\0\0\0\26\1\0\26\1\0\0\0\0\0\0\0\371" + "\37\0\371\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0/\26\0/\26\0\0\0\0\0\0" + "\0" + "6\25\0" + "6\25\0\0\0\0\0\0\0\371p\0\371p\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0O>\0O>\0\0\0\0\0\0\0VK\0VK\0\0\0\0\0\0\0\374\360\0\374\360\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374" + "\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\17\2\0\17\2\0\0\0\0\0\0\0\26\1\0\26\1\0\0\0\0\0\0" + "\0\371\37\0\371\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0/\26\0/\26\0\0\0" + "\0\0\0\0" + "6\25\0" + "6\25\0\0\0\0\0\0\0\371p\0\371p\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0O>\0O>\0\0\0\0\0\0\0VK\0VK\0\0\0\0\0\0\0\374\360\0\374\360" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\360\0" + "\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\2\0\17\2\0\16\0\0\0\0\0\26\1\0\26\1\0\26" + "\1\0\0\0\0\371\37\0\371\37\0\371\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0/\26\0" + "/\26\0.\17\0\0\0\0" + "6\25\0" + "6\25\0" + "6\25\0\0\0\0\371p\0\371p\0\371p\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0O>\0O>\0O>\0\0\0\0VK\0VK\0VK\0\0\0\0\374\360\0" + "\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\360\0\374\360" + "\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\0\0\16\0\0\14\0\0\14" + "\0\0#\2\0#\2\0\0\0\0\0\0\0\371\37\0\371\37\0\0\0\0\0\0\0\371\37\0\371\37" + "\0\371\37\0\371\37\0.\17\0.\17\0#\14\0#\14\0Y!\0Y!\0\0\0\0\0\0\0\371p\0\371" + "p\0\0\0\0\0\0\0\371p\0\371p\0\371p\0\371p\0O>\0O>\0" + "3(\0" + "3(\0\211s\0\211" + "s\0\0\0\0\0\0\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360\0\374\360" + "\0\374\360\0\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", +}; + +/** + * \brief Returns the BlitBlendAll test image as SDL_Surface. + */ +SDL_Surface *SDLTest_ImageBlitBlendAll(void) +{ + SDL_Surface *surface = SDL_CreateSurfaceFrom( + (void *)SDLTest_imageBlitBlendAll.pixel_data, + SDLTest_imageBlitBlendAll.width, + SDLTest_imageBlitBlendAll.height, + SDLTest_imageBlitBlendAll.width * SDLTest_imageBlitBlendAll.bytes_per_pixel, SDL_PIXELFORMAT_RGB24); + return surface; +} + +/* GIMP RGBA C-Source image dump (face.c) */ + +static const SDLTest_SurfaceImage_t SDLTest_imageFace = { + 32, + 32, + 4, + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\0\0\0\377\0\0\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\0\0\0\377\0\0\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\0\0\0\377\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0\377\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0\377\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\0\0\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0\377\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0\377\0\0\0\377" + "\377\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\0\0\0\377\0\0\0\377\377\377\377\0\0\0\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\0\0\0\377\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\0\0\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\0\0\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\0\0\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\0\0\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\0\0\0\377\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\0\0\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0" + "\377\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0" + "\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0" + "\0\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0\377\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\377\377\0\377\377\377\0\377\0\0\0\377\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\0\0\0\377\377\377\0\377\377\377\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\377\377\0\377\377\377\0\377\0\0\0\377\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0\377\377\377\0\377\377" + "\377\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\377\377\0\377\377\377\0\377\0\0\0" + "\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\0\0\0\377\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\0\0\0\377\0\0\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\0\0\0\377\0\0\0\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377" + "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377" + "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0" + "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377" + "\377\377\0\377\377\377\0", +}; + +/** + * \brief Returns the Face test image as SDL_Surface. + */ +SDL_Surface *SDLTest_ImageFace(void) +{ + SDL_Surface *surface = SDL_CreateSurfaceFrom( + (void *)SDLTest_imageFace.pixel_data, + SDLTest_imageFace.width, + SDLTest_imageFace.height, + SDLTest_imageFace.width * SDLTest_imageFace.bytes_per_pixel, + SDL_PIXELFORMAT_RGBA32); + return surface; +} + +/* GIMP RGB C-Source image dump (primitives.c) */ + +static const SDLTest_SurfaceImage_t SDLTest_imagePrimitives = { + 80, + 60, + 3, + "\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15" + "I\310\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310" + "\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0" + "\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0\0\0\15I\310\0\0" + "\0\5ii\0\0\0\5ii\0\0\0\3\1\1\0\0\0\5\2\1\0\0\0\7\3\2\0\0\0\11\4\3\0\0\0\13" + "\5\3\0\0\0\15\6\4\0\0\0\17\7\5\0\0\0\21\10\5\0\0\0\23\11\6\0\0\0\25\12\7" + "\0\0\0\27\13\7\0\0\0\31\14\10\0\0\0\33\15\11\0\0\0\35\16\11\0\0\0\37\17\12" + "\0\0\0!\20\13\0\0\0#\21\13\0\0\0%\22\14\0\0\0'\23\15\15I\310)\24\15\15I\310" + "+\25\16\15I\310-\26\17\15I\310/\27\17\15I\3101\30\20\15I\3103\31\21\15I\310" + "5\32\21\15I\3107\33\22\15I\3109\34\23\15I\310;\35\23\15I\310=\36\24\15I\310" + "?\37\25\15I\310A\40\25\15I\310C!\26\15I\310E\"\27\15I\310G#\27\15I\310I$" + "\30\15I\310K%\31\15I\310M&\31\5iiO'\32\0\0\0\0\0\0\5ii\0\0\0\10\4\2\0\0\0" + "\14\6\4\0\0\0\20\10\5\0\0\0\24\12\6\0\0\0\30\14\10\0\0\0\34\16\11\0\0\0\40" + "\20\12\0\0\0$\22\14\0\0\0(\24\15\0\0\0,\26\16\0\0\0" + "0\30\20\0\0\0" + "4\32" + "\21\0\0\0" + "8\34\22\0\0\0<\36\24\0\0\0@\40\25\0\0\0D\"\26\0\0\0H$\30\0\0\0" + "L&\31\0\0\0P(\32\15I\310T*\34\15I\310X,\35\15I\310\\.\36\15I\310`0\40\15" + "I\310d2!\15I\310h4\"\15I\310l6$\15I\310p8%\15I\310t:&\15I\310x<(\15I\310" + "|>)\15I\310\200@*\15I\310\204B,\15I\310\210D-\15I\310\214F.\15I\310\220H" + "0\15I\310\224J1\15I\310\230L2\5ii\234N4\15I\310\0\0\0\0\0\0\0\0\0\5ii\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\5ii" + "\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\5ii\15I\310\15I\310\15I\310\15I\310" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\5ii\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\5ii\15I\310\15I\310\15I\310" + "\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\5ii\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\5ii\15I\310\15I\310" + "\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\5ii\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310" + "\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d" + "\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\5ii\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\5ii\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d" + "\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310" + "\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\5ii\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310" + "\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310" + "\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310" + "\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d" + "\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310" + "\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d" + "\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310" + "\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310" + "\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310" + "\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5" + "ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d" + "\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310" + "\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d" + "\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310" + "\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310" + "\15I\310\15I\310\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0" + "\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0" + "\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0" + "\0\377\0\0\377\0\0\377\0\0\377\0\5ii\0\377\0\0\377\0\0\377\0\0\377\0\0\377" + "\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0" + "77\5\0\377\0\0\377\0\0\377\0" + "\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\5ii\0\377\0\0\377\0\0\377" + "\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377" + "\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377" + "\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\377\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5" + "ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d" + "\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310" + "\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310" + "\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310" + "\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310" + "\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310" + "\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5i" + "i\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310" + "\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310" + "\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310" + "\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\15I\310\15I\310\15I\310\15I\310" + "\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\310\0d\310\0d\5ii\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310" + "\0d\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310" + "\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\310\0d\310\0d\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d77\5\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\5ii\310\0d\310\0d\15I\310\15I\310\15I\310" + "\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\0d\5ii\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d77\5\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\5ii\310\0d\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15" + "I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\5ii\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d7" + "7\5\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0" + "d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310" + "\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\310\0d\5ii\15I\310\15I\310" + "\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0" + "77\5\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\5ii\15I\310\15I\310\15I\310\15I\310" + "\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "77\5\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\5ii\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310" + "\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "77\5\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\5ii\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0" + "77\5\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\5ii\15I\310" + "\15I\310\15I\310\15I\310\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5" + "ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "77\5\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\5ii\15I\310\15I\310\15I\310" + "\15I\310\15I\310\0\0\0\0\0\0\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "77\5\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\5ii\15I\310\15I\310\15I\310\15I\310\0\0\0\0" + "\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0" + "77\5\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\5ii\15I\310\15I\310\15I\310\0\0\0\0\0\0\5ii\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "77\5\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\5ii" + "\15I\310\15I\310\0\0\0\5ii\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "77\5\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\5ii\15I\310\5ii\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0" + "77\5\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I\310\15I" + "\310\15I\310\15I\310\15I\310\15I\310\5ii", +}; + +/** + * \brief Returns the Primitives test image as SDL_Surface. + */ +SDL_Surface *SDLTest_ImagePrimitives(void) +{ + SDL_Surface *surface = SDL_CreateSurfaceFrom( + (void *)SDLTest_imagePrimitives.pixel_data, + SDLTest_imagePrimitives.width, + SDLTest_imagePrimitives.height, + SDLTest_imagePrimitives.width * SDLTest_imagePrimitives.bytes_per_pixel, SDL_PIXELFORMAT_RGB24); + return surface; +} + +/* GIMP RGB C-Source image dump (alpha.c) */ + +static const SDLTest_SurfaceImage_t SDLTest_imagePrimitivesBlend = { + 80, + 60, + 3, + "\260e\15\222\356/\37\313\15\36\330\17K\3745D\3471\0\20\0D\3502D\3502<\321" + ",\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0-\0\377\377" + "\377\377\377\377\311\324\311\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\0H\0\377\377\377\377\377\377\256\307\256\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\0c\0\377\377\377\377\377\377" + "\223\300\223\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\0~\0\377\377\377\377\377\377x\277x\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\0\231\0\377\377\377\377\377\377]\303]\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\0\264\0\377\377\377\377\377" + "\377B\316B\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0" + "\317\0\377\377\377\377\377\377'\335'\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\0\352\0\377\377\377#\262\6\260d\15\260e\15\224\357" + "/&\262\6\34\300\5.\314\22\40\315\12[\3747M\332/\27\331\12\27\331\12K\374" + "5K\3745K\3745D\3471D\3471D\3471D\3471D\3471D\3502D\3502D\3502D\3502D\350" + "2D\3502D\3502D\3502D\3502D\3502\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377,\372\27\273\3465\327" + "Q.\260d\15\213\213\40\241\3601\200\366*=\265\13?\301\25s\375\265\14\177\252+\201\210\16\245\204" + "*\377\314U\312\\,\224'\11\260i\17\244\210\40\232\2211\331\353J\215\2351\377" + "\377\276\200\2521\200\2542\375\377\310u\2661t\2702t\2702\367\377\324\325" + "\355\305h\3021h\3042h\3042\377\377\377\377\377\377\364\377\336\335\364\323" + "\335\364\323\335\364\323\\\3202\\\3202\\\3202\\\3202\\\3202\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\346\371\342\346\371\342\346" + "\371\342\346\371\342\346\371\342\346\371\342\346\371\342\377\377\377\377" + "\377\377P\3342P\3342P\3342P\3342P\3342P\3342P\3342P\3342\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\27\331\12Y\316-h\3021\243\370Cg\230\15\230\224\"\245" + "\204*\377\314U\310J\21\327Q.\260b\21\245\2041\370\343N\230\2242\331\353J" + "\214\2402\377\377\276\200\2521\200\2542\375\377\310\317\344\266u\2661t\270" + "2\377\377\377\367\377\324\325\355\305h\3021h\3042h\3042h\3042\377\377\377" + "\377\377\377\364\377\336\335\364\323\335\364\323\335\364\323\335\364\323" + "\\\3202\\\3202\\\3202\\\3202\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\346\371\342\346\371" + "\342\346\371\342\346\371\342\346\371\342\346\371\342\377\377\377\377\377" + "\377\377\377\377\377\377\377P\3342P\3342P\3342P\3342P\3342P\3342P\3342P\334" + "2\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377K\3745!\315\13d\304,p\270)\177\252+\23\13\6\232\2211\245\204" + "1\347\270O\377\277Y\324<\22\265V\24\377\330Q\244\210\40#(\13\230\224\"\331" + "\353Ju\211.\377\377\276\200\2521\210\273:\200\2542\375\377\310\20" + "3\6u\266" + "1t\2702\271\307\271\367\377\324\325\355\305\341\377\321h\3021h\3042\16L\7" + "h\3042\377\377\377\242\300\242\377\377\377\335\364\323\355\377\343\335\364" + "\323\335\364\323\14f\7\\\3202\\\3202>\250*\\\3202\377\377\377\377\377\377" + "\377\377\377\377\377\377$\231$\377\377\377\377\377\377s\303s\377\377\377" + "\346\371\342\376\377\372\346\371\342\346\371\342\40\257\37\346\371\342\346" + "\371\342\\\316\\\377\377\377\377\377\377\377\377\377\377\377\377P\3342\13" + "\262\7P\3342P\3342*\327%P\3342P\3342o\377Q\377\377\377\377\377\377$\352$" + "\377\377\377\377\377\377K\3745]\3749s\375<\212\373@\243\370C\274\363G\331" + "\353J\370\343N\377\330Q\377\314U\377\277Y\377\260\\\224(\11\260|\36\245\204" + "1\377\377\250\232\2211\230\224\"\215\2351\214\2402\377\377\276\312\332\250" + "\200\2521\200\2542\377\377\377\317\344\266u\2661t\2702t\2702\377\377\377" + "\377\377\377\325\355\305\325\355\305\325\355\305h\3042h\3042h\3042\377\377" + "\377\377\377\377\377\377\377\377\377\377\335\364\323\335\364\323\335\364" + "\323\335\364\323\335\364\323\\\3202\\\3202\\\3202\\\3202\\\3202\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\346\371\342\346\371\342" + "\346\371\342\346\371\342\346\371\342\346\371\342\346\371\342\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377P\3342P\3342" + "P\3342P\3342\377\377\377K\3745O\3321\\\3161h\3021t\2702~\254'\214\240%\377" + "\377\262\370\343N\377\330Q\262x1\277l1\312`1\327R.\260X\23\377\330Q\244\210" + "2\377\377\250\230\2242\377\377\262\215\2351\214\2402\377\377\377\312\332" + "\250\200\2521\200\2542\377\377\377\375\377\310\317\344\266u\2661t\2702t\270" + "2\377\377\377\377\377\377\325\355\305\325\355\305\325\355\305h\3042h\304" + "2h\3042h\3042\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\335\364\323\335\364\323\335\364\323\335\364\323\377\377\377\\\3202\\\320" + "2\\\3202\\\3202\\\3202\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\346\371\342\346\371\342\346\371\342\346" + "\371\342\346\371\342\346\371\342\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377D\3471O\3321\21\7\11c\304+\367\377\324o\2520\200\252" + "1\214\2402\235\226'\377\377\250\377\330Q!\20\11\277l1\310d2\266?\33\224(" + "\11\260|\36\257\217;\377\377\250\232\2211\34$\11\377\377\262\215\2351q\206" + "0\377\377\377\312\332\250\217\303@\200\2542\200\25420Z0\317\344\266\317\344" + "\266X\2260t\2702t\2702\377\377\377\377\377\377\325\355\305(l%\325\355\305" + "\325\355\305K\2410h\3042h\3042\377\377\377\377\377\377\377\377\3770\2200" + "\377\377\377\377\377\377t\274p\335\364\323\335\364\323\373\377\361\377\377" + "\377\377\377\377\21\213\11\\\3202\\\3202<\274/\\\3202\377\377\377\377\377" + "\377\377\377\377\377\377\3770\3060\377\377\377\377\377\377V\330V\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\3770\3410\346\371\342\346" + "\371\342>\352>\346\371\342\377\377\377D\3471P\3342\364\377\352s\375\3369\\\3202\377\377\377\377\377\377\377\377\377\377\377\377D\3502\371\377" + "\364O\3321\\\3202\364\377\336h\3042\367\377\324u\2661\200\2542\377\377\276" + "\215\2351\230\2242\307\300\213\244\2102\377\377\234\262x1\274p2\377\337\207" + "\312`1\324E\30\327T1\260|2\377\377\234\245\2041\244\2102\377\377\250\232" + "\2211\230\2242\377\377\377\310\316\231\215\2351\214\2402\377\377\377\377" + "\377\377\312\332\250\312\332\250\200\2542\200\2542\377\377\377\377\377\377" + "\317\344\266\317\344\266\317\344\266t\2702t\2702t\2702\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\325\355\305\325\355\305\325\355" + "\305\377\377\377h\3042h\3042h\3042h\3042\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\335\364\323\335\364\323\335\364\323\335\364\323\377\377\377\377\377" + "\377\377\377\377\377\377\377\\\3202\\\3202\\\3202\377\377\377D\3502\371\377" + "\364O\3321\377\377\377\\\3161h\3042\367\377\324t\2702\375\377\310\200\252" + "1\377\377\377\215\2351\230\2242\377\377\250\244\2102\377\377\234\262x1\274" + "p2\316\214_\310d2\377\310|\327T1\227/\14\377\377\377\307\260|\244\2102\377" + "\377\377\307\300\213\230\2242\230\2242\377\377\377\310\316\231\214\2402\214" + "\2402\377\377\377\377\377\377\312\332\250\312\332\250\200\2542\200\2542\377" + "\377\377\377\377\377\377\377\377\317\344\266\317\344\266\317\344\266t\270" + "2t\2702t\2702\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\325\355\305\325\355\305\325\355\305\377\377\377\377\377\377h\3042h\3042" + "h\3042\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\335\364\323\335\364" + "\323\335\364\323\335\364\323\377\377\377\377\377\377\377\377\377\377\377" + "\377D\3502\371\377\364R\3344\364\377\352\\\3161H\22Hh\3021\377\377\377o\244" + "2\200\2542\312\332\250\226\245<\377\377\262\230\2242H-/\245\2041\377\377" + "\377\233i5\274p2\277l1\331sC\377\310|\324X2*\15\3\260|2\377\377\234\206s" + "7\244\2102\377\377\250\340\337\244\230\2242\377\377\377Hc2\310\316\231\214" + "\2402n\211:\377\377\377\377\377\377\353\377\311\312\332\250\200\2542$T\16" + "\377\377\377\377\377\377\236\277\236\377\377\377\317\344\266\367\377\336" + "\377\377\377t\2702\40n\16t\2702\377\377\377\212\303\212\377\377\377\377\377" + "\377\377\377\377\325\355\305\325\355\305<\2477\377\377\377\377\377\377O\276" + "Ah\3042h\3042\237\377i\377\377\377\377\377\377H\317H\377\377\377\377\377" + "\377c\335c\377\377\377\377\377\377\377\377\377\377\377\377\335\364\323>\337" + ";\335\364\323\377\377\377D\3502\362\375\360P\3342\346\371\342\\\3202\364" + "\377\336h\3042\367\377\324t\2702\375\377\310\200\2542\377\377\276\214\240" + "2\377\377\262\232\2211\377\377\377\245\2041\377\377\377\262x1\377\377\377" + "\277l1\310d2\312`1\324X2\327T1\260|2\377\377\377\307\260|\244\2102\377\377" + "\377\307\300\213\232\2211\230\2242\377\377\377\377\377\262\310\316\231\214" + "\2402\214\2402\377\377\377\377\377\377\312\332\250\312\332\250\200\2542\200" + "\2542\200\2542\377\377\377\377\377\377\377\377\377\317\344\266\317\344\266" + "\317\344\266\377\377\377t\2702t\2702t\2702\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\325\355\305\325\355\305\325\355\305\325\355" + "\305\377\377\377\377\377\377h\3042h\3042h\3042h\3042\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377D\3502\362\375\360P\3342\346\371\342\\\3202\335" + "\364\323h\3042\325\355\305t\2702\317\344\266\377\377\377\200\2521\377\377" + "\377\215\2351\377\377\377\232\2211\377\377\377\245\2041\377\377\377\262x" + "1\377\377\377\277l1\377\377\377\312`1\377\310|\327T1\227/\14\377\377\377" + "\307\260|\244\2102\244\2102\377\377\377\307\300\213\230\2242\230\2242\377" + "\377\377\310\316\231\310\316\231\214\2402\214\2402\377\377\377\377\377\377" + "\312\332\250\312\332\250\377\377\377\200\2542\200\2542\377\377\377\377\377" + "\377\377\377\377\377\377\377\317\344\266\317\344\266\377\377\377\377\377" + "\377t\2702t\2702\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\325\355\305\325\355\305\325\355\305\377\377" + "\377\377\377\377\377\377\377h\3042h\3042h\3042\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377D\3502\362\375\360" + "T\11TO\3321\377\377\377Z\3002\377\377\377h\3042\377\377\334t\2702\375\377" + "\310*\30\20\312\332\250\214\2402\262\260\214\230\2242\307\300\213\377\377" + "\377\245\2041\377\377\377:\35\20\377\377\377\277l1\316\264w\310d2\377\310" + "|\356qL\227/\14\260|2TZ3\307\260|\244\2102\274\302\274\307\300\213\307\300" + "\213\273\301U\377\377\377\377\377\377A^2\310\316\231\214\2402o\216B\377\377" + "\377\377\377\377\366\377\324\312\332\250\312\332\250*a\20\200\2542\377\377" + "\377\230\301\230\377\377\377\377\377\377\377\377\353\317\344\266\317\344" + "\266T\253Tt\2702t\2702]\265I\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377T\306T\377\377\377\325\355\305l\324i\325\355\305\377\377" + "\377\377\377\377\377\377\377h\3042\"\254\20h\3042h\3042b\353b\377\377\377" + "\377\377\377D\3502\362\375\360\377\377\377O\3321\377\377\377\\\3202\364\377" + "\336h\3042\325\355\305t\2702\317\344\266\377\377\377\200\2521\377\377\377" + "\214\2402\377\377\262\230\2242\307\300\213\244\2102\307\260|\377\377\377" + "\262x1\377\377\377\274p2\377\337\207\310d2\377\310|\324X2\333bB\260|2\377" + "\377\377\307\260|\244\2102\244\2102\377\377\377\307\300\213\232\2211\230" + "\2242\377\377\377\377\377\377\310\316\231\310\316\231\214\2402\214\2402\377" + "\377\377\377\377\377\377\377\377\312\332\250\312\332\250\200\2542\200\254" + "2\200\2542\377\377\377\377\377\377\377\377\377\377\377\377\317\344\266\317" + "\344\266\317\344\266\377\377\377t\2702t\2702t\2702\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\325\355\305" + "\325\355\305\325\355\305\325\355\305\377\377\377\377\377\377\377\377\377" + "h\3042h\3042\377\377\377\377\377\377D\3471\377\377\377P\3342\364\377\352" + "\\\3202\335\364\323\377\377\377h\3021\377\377\377t\2702\375\377\310\200\254" + "2\312\332\250\377\377\377\215\2351\377\377\377\230\2242\377\377\250\244\210" + "2\307\260|\377\377\377\262x1\377\377\377\274p2\377\337\207\310d2\323xQ\324" + "X2\327T1\227/\14\260|2\377\377\234\307\260|\244\2102\377\377\377\377\377" + "\377\307\300\213\230\2242\230\2242\377\377\377\377\377\377\310\316\231\310" + "\316\231\214\2402\214\2402\377\377\377\377\377\377\377\377\377\312\332\250" + "\312\332\250\377\377\377\200\2542\200\2542\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\317\344\266\317\344\266\377\377\377\377\377" + "\377t\2702t\2702t\2702\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\325\355\305\325\355\305\325" + "\355\305\377\377\377\377\377\377`\0`\377\377\377D\3471\371\366\371P\3342" + "\346\371\342\377\377\377\\\3161\377\377\377'\24\22\325\355\305t\2702\276" + "\310\251\377\377\377\200\2542\377\377\316\214\2402\310\316\231`6`\230\224" + "2\377\377\250\222u<\307\260|\377\377\377\315\214L\377\377\377\274p2M,#\310" + "d2\312`1\306\304\306\324X2\333bB\325\242W\377\377\377\307\260|=9\22\244\210" + "2\377\377\377\227\234w\307\300\213\230\2242\307\322a\377\377\377\377\377" + "\377Km9\310\316\231\214\2402r\226K\377\377\377\377\377\377\377\377\377\312" + "\332\250\312\332\250`\242`\200\2542\200\2542\224\306\224\377\377\377\377" + "\377\377\377\377\377\377\377\377\317\344\266M\250D\317\344\266\377\377\377" + "\203\322\203t\2702t\2702\301\377\177\377\377\377\377\377\377`\330`\377\377" + "\377\377\377\377r\344r\377\377\377\377\377\377\377\377\377\325\355\305\377" + "\377\377\377\377\377D\3502\371\377\364P\3342\346\371\342\377\377\377\\\320" + "2\364\377\336h\3042\325\355\305\377\377\377t\2702\317\344\266\200\2542\312" + "\332\250\377\377\377\214\2402\310\316\231\230\2242\307\300\213\377\377\377" + "\244\2102\307\260|\377\377\377\200U0\220^\377\7\4/\227U[\246]\377\255Q1\377" + "\242y\10\3/\306M@\6\4/{^\377mVvmVv\6\5/h\\\377h\\\377\\U\204\12\12\360\5" + "\5/VX\377VX\377\12\12\360LR\221\12\12\360\5\6/\214\2402\377\377\377\377\377" + "\377\377\377\377\312\332\250\312\332\250\377\377\377\200\2542\200\2542\200" + "\2542\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\317\344" + "\266\317\344\266\317\344\266\377\377\377\377\377\377t\2702t\2702\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377D\3502\362\375\360P\3342\346\371" + "\342\377\377\377\\\3202\335\364\323\377\377\377h\3042\367\377\324t\2702\317" + "\344\266\377\377\377\200\2542\312\332\250\377\377\377\214\2402\377\377\262" + "\230\2242\307\300\213\377\377\377\244\2102\307\260|{^\377\200U0\220^\377" + "\7\4/\227U[\246]\377\7\3/\377\242y\236\37" + "2\306M0\210%\14T-2{^\377mVv\6" + "\5/\6\5/h\\\377\\U\204\\U\204\5\5/\5\5/VX\377VX\377LR\221LR\221\377\377\377" + "\214\2402\214\2402\377\377\377\377\377\377\377\377\377\312\332\250\312\332" + "\250\312\332\250\377\377\377\200\2542\200\2542\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\317\344\266\317\344\266\377" + "\377\377\377\377\377t\2702t\2702t\2702\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377D\3502\365\375\363\377\377" + "\377O\3321l\22l\\\3202\335\364\323\357\346\357h\3042\325\355\305\377\377" + "\377t\2702\317\344\266l-l\200\2521\377\377\377\204\211=\310\316\231\377\377" + "\377\262\243L\307\300\213\377\377\377E&\25mVv{^\377ySB\220^\377\7\4/\275" + "t\201\246]\377\7\3/I\37!\277Z\377\10\3/\237YQ\6\4/{^\377\236\213\247mVv\6" + "\5/,-lh\\\377\\U\204dow\5\5/\5\5/\222\251\377VX\377\310\316\231T{@\377\377" + "\377\214\2402w\240V\377\377\377\377\377\377\377\377\377\377\377\377\312\332" + "\250U\231G\377\377\377\200\2542q\270\\\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377l\317l\317\344\266\317\344\266z\330v\377\377\377" + "\377\377\377\323\377\221t\2702t\2702l\352l\377\377\377\377\377\377\377\377" + "\377D\3502\362\375\360\377\377\377P\3342\346\371\342\377\377\377\\\3202\364" + "\377\336h\3042\325\355\305\377\377\377t\2702\317\344\266\377\377\377\200" + "\2542\312\332\250\377\377\377\214\2402\310\316\231\377\377\377\230\2242\307" + "\300\213\377\377\377\6\5/mVv{^\377\200U0\220^\377\7\4/\227U[\246]\377\7\3" + "/\255RN\277Z\377\10\3/\306M@\6\4/{^\377{^\377mVv\6\5/\6\5/h\\\377h\\\377" + "\\U\204\12\12\360\5\5/\12\12\360\377\377\377\377\377\377\310\316\231\310" + "\316\231\377\377\377\214\2402\214\2402\377\377\377\377\377\377\377\377\377" + "\377\377\377\312\332\250\312\332\250\377\377\377\200\2542\200\2542\200\254" + "2\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\317\344\266\317\344\266\317\344\266\377\377\377\377\377\377t\2702t\2702" + "\377\377\377\377\377\377D\3502\362\375\360\377\377\377P\3342\346\371\342" + "\377\377\377\\\3202\335\364\323\377\377\377h\3042\325\355\305\377\377\377" + "t\2702\317\344\266\377\377\377\200\2542\312\332\250\377\377\377\214\2402" + "\310\316\231\377\377\377\230\2242\307\300\213h\\\377\6\5/mVv{^\377\200U0" + "\220^\377\7\4/\227U[\246]\377\7\3/\255RN\277Z\377\10\3/\306M@\6\4/\6\4/{" + "^\377mVvmVv\6\5/\12\12\360h\\\377\\U\204\\U\204\5\5/\230\2242\377\377\377" + "\377\377\377\377\377\377\310\316\231\310\316\231\377\377\377\214\2402\214" + "\2402\377\377\377\377\377\377\377\377\377\377\377\377\312\332\250\312\332" + "\250\377\377\377\377\377\377\200\2542\200\2542\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\317\344\266\317" + "\344\266\377\377\377\377\377\377\377\377\377\377\377\377D\3502q\10p\377\377" + "\377P\3342\335\350\332\377\377\377\\\3202\351\366\337\377\377\377h\3042d" + "!\\\377\377\377t\2702\277\302\252\377\377\377\200\2542\343\345\301\377\377" + "\377\214\2402^2H\377\377\377\230\2242\257\235\204h\\\377\6\5/\223o\234{^" + "\377\6\4/<\36" + "1\377\252\215j)2\211XK\377\250\203\202$2\337~c\377\242y\236" + "\37" + "2]#\26\306M@\6\4/ym\274{^\377mVvELn\6\5/h\\\37703x\\U\204\307\300\213" + "\204\226\\\230\2242\377\377\377\377\377\377\377\377\377\310\316\231^\212" + "H\377\377\377\214\2402}\256b\377\377\377\377\377\377\377\377\377\377\377" + "\377\312\332\250_\251O\377\377\377\377\377\377y\310j\200\2542\377\377\377" + "\377\377\377\377\377\377\377\377\377x\341x\377\377\377\377\377\377\177\350" + "|\317\344\266\377\377\377\377\377\377D\3502\362\375\360\377\377\377P\334" + "2\346\371\342\377\377\377\\\3202\335\364\323\377\377\377\377\377\377h\304" + "2\325\355\305\377\377\377t\2702\317\344\266\377\377\377\200\2542\312\332" + "\250\377\377\377\214\2402\310\316\231\377\377\377\230\2242\\U\204h\\\377" + "\6\5/mVv{^\377\6\4/\12\12\360\201Vi\220^\377\7\4/\227U[\246]\377\7\3/\255" + "RN\277Z\377\10\3/\306M@\6\4/\12\12\360{^\377mVvmVv\6\5/\12\12\360h\\\377" + "\377\377\377\307\300\213\377\377\377\230\2242\230\2242\377\377\377\377\377" + "\377\377\377\377\310\316\231\310\316\231\377\377\377\214\2402\214\2402\377" + "\377\377\377\377\377\377\377\377\377\377\377\312\332\250\312\332\250\312" + "\332\250\377\377\377\200\2542\200\2542\200\2542\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377D\350" + "2\362\375\360\377\377\377P\3342\377\377\377\346\371\342\377\377\377\\\320" + "2\335\364\323\377\377\377h\3042\325\355\305\377\377\377t\2702\317\344\266" + "\377\377\377\200\2542\377\377\377\312\332\250\377\377\377\214\2402\310\316" + "\231\377\377\377\5\5/\\U\204h\\\377\6\5/mVv{^\377\6\4/\12\12\360\201Vi\220" + "^\377\7\4/\227U[\246]\377\7\3/\255RN\277Z\377\10\3/\306M@\6\4/\6\4/{^\377" + "\12\12\360mVv\6\5/\6\5/\377\377\377\377\377\377\307\300\213\307\300\213\377" + "\377\377\230\2242\377\377\377\377\377\377\377\377\377\377\377\377\310\316" + "\231\310\316\231\377\377\377\214\2402\214\2402\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\312\332\250\312\332\250\377\377\377\377" + "\377\377\200\2542\200\2542\377\377\377\377\377\377\377\377\377\377\377\377" + "\204\0\204\377\377\377D\3502\355\364\353\377\377\377\377\377\377Y\335;\346" + "\371\342\377\377\377/\26\31\335\364\323\377\377\377k\255<\325\355\305\377" + "\377\377\377\377\377t\2702\317\344\266\2046\204\200\2542\312\332\250\340" + "\317\340\214\2402\310\316\231\377\377\377VX\377\5\5//\33Dh\\\377\6\5/tVz" + "{^\377\6\4/=0\377\201Vi\220^\377\3\1\30\227U[\246]\377?6U\255RN\277Z\377" + "\337]s\306M0\306M@\3\2\30{^\377{^\377yv}mVv\244\2102\377\377\377\377\377" + "\377\377\377\377gyG\307\300\213\230\2242\212\242h\377\377\377\377\377\377" + "\377\377\377\377\377\377\310\316\231g\230O\377\377\377\214\2402\205\274q" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377h\270V\312\332" + "\250\377\377\377\222\344\222\200\2542\200\2542\377\377\377\377\377\377\377" + "\377\377\377\377\377D\3502\362\375\360\377\377\377\377\377\377P\3342\346" + "\371\342\377\377\377\\\3202\335\364\323\377\377\377\377\377\377h\3042\325" + "\355\305\377\377\377t\2702\317\344\266\377\377\377\377\377\377\200\2542\312" + "\332\250\377\377\377\214\2402\310\316\231VX\377\12\12\360\5\5/\\U\204h\\" + "\377\6\5/mVv{^\377\6\4/\12\12\360\201Vi\220^\377\7\4/\227U[\246]\377\7\3" + "/\255RN\255RN\277Z\377\10\3/\306M@\6\4/\12\12\360{^\377\12\12\360\307\260" + "|\244\2102\244\2102\377\377\377\377\377\377\377\377\377\307\300\213\377\377" + "\377\230\2242\230\2242\377\377\377\377\377\377\377\377\377\377\377\377\310" + "\316\231\377\377\377\377\377\377\214\2402\214\2402\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\312\332\250\312\332\250\377\377\377" + "\377\377\377\200\2542\200\2542\377\377\377\377\377\377D\3502\377\377\377" + "\362\375\360\377\377\377P\3342\346\371\342\377\377\377\\\3202\377\377\377" + "\335\364\323\377\377\377h\3042\325\355\305\377\377\377\377\377\377t\2702" + "\317\344\266\377\377\377\200\2542\312\332\250\377\377\377\377\377\377\214" + "\2402LR\221VX\377\5\5/\\U\204\12\12\360h\\\377\6\5/mVv{^\377\6\4/\12\12\360" + "\201Vi\220^\377\7\4/\227U[\246]\377\7\3/\7\3/\255RN\277Z\377\10\3/\306M@" + "\6\4/\6\4/{^\377\377\377\377\307\260|\377\377\377\244\2102\377\377\377\377" + "\377\377\377\377\377\307\300\213\307\300\213\377\377\377\230\2242\377\377" + "\377\377\377\377\377\377\377\377\377\377\310\316\231\310\316\231\377\377" + "\377\377\377\377\214\2402\214\2402\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\312\332\250\312\332\250\377\377\377\377\377\377\377" + "\377\377\377\377\377D\3502\377\377\377\362\375\360\377\377\377-\17\34\346" + "\371\342\377\377\377\363\346\363\\\3202\335\364\323\377\377\377h\3042\377" + "\377\377x)o\377\377\377t\2702\301\276\255\377\377\377\377\377\377\243\273" + "U\312\332\250\377\377\377O-\34\12\12\360LR\221gU\333\5\5/\\U\204<)\377h\\" + "\377\6\5/=!B{^\377\6\4/A2\306\201Vi\220^\377I9q\227U[\246]\377]-\220\7\3" + "/\255RN\245q\304\10\3/\306M0\377\236\221\6\4/\377\377\377\220\231\220\307" + "\260|\307\260|\226\227m\244\2102\377\377\377\377\377\377\377\377\377\307" + "\300\213p\207N\230\2242\230\2242\254\316\254\377\377\377\377\377\377\377" + "\377\377\310\316\231\310\316\231\220\317\220\377\377\377\214\2402\216\316" + "\200\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377r\310^\312" + "\332\250\377\377\377\377\377\377\377\377\377D\3502\362\375\360\377\377\377" + "P\3342\377\377\377\346\371\342\377\377\377\\\3202\335\364\323\377\377\377" + "\377\377\377h\3042\325\355\305\377\377\377\377\377\377t\2702\317\344\266" + "\377\377\377\200\2542\377\377\377\312\332\250\377\377\377\5\6/LR\221\12\12" + "\360VX\377\5\5/\\U\204h\\\377\12\12\360\6\5/mVv{^\377\6\4/\12\12\360\201" + "Vi\220^\377\7\4/\227U[\12\12\360\246]\377\7\3/\255RN\277Z\377\277Z\377\10" + "\3/\306M@\260|2\260|2\377\377\377\377\377\377\307\260|\377\377\377\244\210" + "2\377\377\377\377\377\377\377\377\377\377\377\377\307\300\213\377\377\377" + "\230\2242\230\2242\377\377\377\377\377\377\377\377\377\377\377\377\310\316" + "\231\310\316\231\377\377\377\377\377\377\214\2402\214\2402\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377D\3502\362\375\360\377\377\377P\3342\377\377\377\346\371\342\377" + "\377\377\\\3202\377\377\377\335\364\323\377\377\377h\3042\325\355\305\377" + "\377\377\377\377\377t\2702\317\344\266\377\377\377\377\377\377\200\2542\312" + "\332\250\377\377\377\12\12\360\5\6/LR\221VX\377\12\12\360\5\5/\\U\204h\\" + "\377\6\5/\12\12\360mVv{^\377\6\4/\12\12\360\201Vi\220^\377\7\4/\227U[\227" + "U[\246]\377\7\3/\255RN\12\12\360\277Z\377\10\3/\333bB\377\377\377\260|2\377" + "\377\377\377\377\377\307\260|\307\260|\244\2102\244\2102\377\377\377\377" + "\377\377\377\377\377\307\300\213\307\300\213\377\377\377\230\2242\230\224" + "2\377\377\377\377\377\377\377\377\377\377\377\377\310\316\231\310\316\231" + "\377\377\377\377\377\377\214\2402\214\2402\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377)\10\36\362\375\360\377\377\377\370" + "\356\370P\3342\346\371\342\377\377\377\377\377\377\\\3202\207\"\201\377\377" + "\377\377\377\377p\250D\325\355\305\377\377\377\377\377\377t\2702\317\344" + "\266\234?\234\200\2542\377\377\377\274\260\244FS\377\5\6/;#\377LR\221VX\377" + "\3\1\34\12\12\360\\U\204{^\330\6\5/\12\12\360\257\203\270{^\377\6\4/\6\4" + "\222\201Vi\220^\377P@d\12\12\360\227U[\370\244\377\7\3/\255RNi./\277Z\377" + "\324X2\264\202w\333bB\260|2\377\377\377\377\377\377\377\377\377yvK\377\377" + "\377\244\2102\236\247|\377\377\377\377\377\377\377\377\377\307\300\213\307" + "\300\213\234\306\234\230\2242\377\377\377\256\330\256\377\377\377\377\377" + "\377\377\377\377\310\316\231\310\316\231\234\341\234\377\377\377\214\240" + "2\232\343\223\377\377\377\377\377\377\377\377\377\377\377\377D\3502\362\375" + "\360\377\377\377\377\377\377P\3342\346\371\342\377\377\377\377\377\377\\" + "\3202\335\364\323\377\377\377\377\377\377h\3042\325\355\305\377\377\377\377" + "\377\377t\2702\317\344\266\377\377\377\377\377\377\200\2542\312\332\250\12" + "\12\360FS\377\5\6/LR\221\12\12\360RW\255\3\5\35\6\11\224ZT\\d[\261\3\4\35" + "\6\11\224lVTw]\264\4\4\35\6\11\224\200VN\214]\270\4\3\35\6\11\224\226UG\242" + "\\\274\4\3\35\4\3\35\254R@\377\377\311\203U\36\203U\36\323a:my\36my\36\377" + "\377\276\377\377\276\243\255X\243\255X\236\371\236e\204\36\236\371\236\374" + "\377\273\236\371\236\236\371\236\234\275`\236\371\236^\220\36^\220\36\236" + "\371\236\352\377\267\352\377\267\236\371\236\236\371\236\310\316\231\310" + "\316\231\377\377\377\377\377\377\214\2402\377\377\377\377\377\377\377\377" + "\377D\3502\362\375\360\377\377\377\377\377\377P\3342\346\371\342\377\377" + "\377\377\377\377\\\3202\377\377\377\335\364\323\377\377\377h\3042\377\377" + "\377\325\355\305\377\377\377t\2702\377\377\377\317\344\266\377\377\377\377" + "\377\377\200\2542\346\3\4\35lVT\4\4hw]\264\4\4\35aK\244\200VN\214]\270kZ\371\4\3\35" + "\270\212Io\225o\377\377\306{a\36\253\300\253\304wB\377\377\311\377\377\377" + "\203U\36\323a:\224D(my\36\236\371\236\307\316\266\377\377\276\236\371\236" + "\377\377\343\236\371\236e\204\36Gk\25\236\371\236\374\377\273\260\334\260" + "\236\371\236\234\275`\377\377\377\377\377\377\230\2242k\207#\377\377\377" + "\377\377\377\377\377\377\377\377\377D\3502\377\377\377\362\375\360\377\377" + "\377\377\377\377P\3342\346\371\342\377\377\377\377\377\377\\\3202\377\377" + "\377\335\364\323\377\377\377\377\377\377h\3042\377\377\377\325\355\305\377" + "\377\377\377\377\377t\2702\317\344\266\377\377\3778L\377\12\12\360\5\6/<" + "L\237\12\12\360BR\252\3\5\35\6\11\224JQbRW\255\6\11\224\3\5\35ZT\\\6\11\224" + "d[\261\6\11\224\3\4\35lVT\6\11\224w]\264\4\4\35\6\11\224\200VN\214]\270\6" + "\11\224tm\36\270\212I\270\212I\377\377\306{a\36{a\36\304wB\236\371\236\377" + "\377\311\203U\36\236\371\236\323a:my\36my\36\236\371\236\377\377\276\236" + "\371\236\243\255X\243\255X\236\371\236e\204\36\236\371\236\374\377\273\374" + "\377\273\236\371\236\307\300\213\307\300\213\377\377\377\377\377\377\230" + "\2242\377\377\377\377\377\377\377\377\377D\3502\377\377\377\362\375\360\377" + "\377\377\377\377\377P\3342\377\377\377\346\371\342\377\377\377\377\377\377" + "\\\3202\335\364\323\377\377\377\377\377\377\377\377\377h\3042\325\355\305" + "\377\377\377\377\377\377t\2702\377\377\377\317\344\2668L\377\12\12\360\5" + "\6/\12\12\360 + + 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. +*/ + +/* Defines some images for tests */ + +/** + * Type for test images. + */ +typedef struct SDLTest_SurfaceImage_s { + int width; + int height; + unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */ + char *pixel_data; +} SDLTest_SurfaceImage_t; + +/* Test images */ +SDL_Surface *SDLTest_ImageBlit(void); +SDL_Surface *SDLTest_ImageBlitColor(void); +SDL_Surface *SDLTest_ImageBlitAlpha(void); +SDL_Surface *SDLTest_ImageBlitBlendAdd(void); +SDL_Surface *SDLTest_ImageBlitBlend(void); +SDL_Surface *SDLTest_ImageBlitBlendMod(void); +SDL_Surface *SDLTest_ImageBlitBlendNone(void); +SDL_Surface *SDLTest_ImageBlitBlendAll(void); +SDL_Surface *SDLTest_ImageFace(void); +SDL_Surface *SDLTest_ImagePrimitives(void); +SDL_Surface *SDLTest_ImagePrimitivesBlend(void); diff --git a/vendor/sdl-3.0.0/test/testautomation_intrinsics.c b/vendor/sdl-3.0.0/test/testautomation_intrinsics.c new file mode 100644 index 0000000..da4617b --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_intrinsics.c @@ -0,0 +1,688 @@ +/** + * Intrinsics test suite + */ + +/* Disable intrinsics that are unsupported by the current compiler */ +#include + +#include +#include +#include +#include "testautomation_suites.h" + +// FIXME: missing tests for loongarch lsx/lasx +// FIXME: missing tests for powerpc altivec + +/* ================= Test Case Implementation ================== */ + +/* Helper functions */ + +static int allocate_random_int_arrays(Sint32 **dest, Sint32 **a, Sint32 **b, size_t *size) { + size_t i; + + *size = (size_t)SDLTest_RandomIntegerInRange(127, 999); + *dest = SDL_malloc(sizeof(Sint32) * *size); + *a = SDL_malloc(sizeof(Sint32) * *size); + *b = SDL_malloc(sizeof(Sint32) * *size); + + if (!*dest || !*a || !*b) { + SDLTest_AssertCheck(SDL_FALSE, "SDL_malloc failed"); + return -1; + } + + for (i = 0; i < *size; ++i) { + (*a)[i] = SDLTest_RandomSint32(); + (*b)[i] = SDLTest_RandomSint32(); + } + return 0; +} + +static int allocate_random_float_arrays(float **dest, float **a, float **b, size_t *size) { + size_t i; + + *size = (size_t)SDLTest_RandomIntegerInRange(127, 999); + *dest = SDL_malloc(sizeof(float) * *size); + *a = SDL_malloc(sizeof(float) * *size); + *b = SDL_malloc(sizeof(float) * *size); + + if (!*dest || !*a || !*b) { + SDLTest_AssertCheck(SDL_FALSE, "SDL_malloc failed"); + return -1; + } + + for (i = 0; i < *size; ++i) { + (*a)[i] = SDLTest_RandomUnitFloat(); + (*b)[i] = SDLTest_RandomUnitFloat(); + } + + return 0; +} + +static int allocate_random_double_arrays(double **dest, double **a, double **b, size_t *size) { + size_t i; + + *size = (size_t)SDLTest_RandomIntegerInRange(127, 999); + *dest = SDL_malloc(sizeof(double) * *size); + *a = SDL_malloc(sizeof(double) * *size); + *b = SDL_malloc(sizeof(double) * *size); + + if (!*dest || !*a || !*b) { + SDLTest_AssertCheck(SDL_FALSE, "SDL_malloc failed"); + return -1; + } + + for (i = 0; i < *size; ++i) { + (*a)[i] = SDLTest_RandomUnitDouble(); + (*b)[i] = SDLTest_RandomUnitDouble(); + } + + return 0; +} + +static void free_arrays(void *dest, void *a, void *b) { + SDL_free(dest); + SDL_free(a); + SDL_free(b); +} + +/** + * \brief Verify element-wise addition of 2 int arrays. + */ +static void verify_ints_addition(const Sint32 *dest, const Sint32 *a, const Sint32 *b, size_t size, const char *desc) { + size_t i; + int all_good = 1; + + for (i = 0; i < size; ++i) { + Sint32 expected = a[i] + b[i]; + if (dest[i] != expected) { + SDLTest_AssertCheck(SDL_FALSE, "%"SDL_PRIs32" + %"SDL_PRIs32" = %"SDL_PRIs32", expected %"SDL_PRIs32" ([%"SDL_PRIu32"/%"SDL_PRIu32"] %s)", + a[i], b[i], dest[i], expected, (Uint32)i, (Uint32)size, desc); + all_good = 0; + } + } + if (all_good) { + SDLTest_AssertCheck(SDL_TRUE, "All int additions were correct (%s)", desc); + } +} + +/** + * \brief Verify element-wise multiplication of 2 int arrays. + */ +static void verify_ints_multiplication(const Sint32 *dest, const Sint32 *a, const Sint32 *b, size_t size, const char *desc) { + size_t i; + int all_good = 1; + + for (i = 0; i < size; ++i) { + Sint32 expected = a[i] * b[i]; + if (dest[i] != expected) { + SDLTest_AssertCheck(SDL_FALSE, "%"SDL_PRIs32" * %"SDL_PRIs32" = %"SDL_PRIs32", expected %"SDL_PRIs32" ([%"SDL_PRIu32"/%"SDL_PRIu32"] %s)", + a[i], b[i], dest[i], expected, (Uint32)i, (Uint32)size, desc); + all_good = 0; + } + } + if (all_good) { + SDLTest_AssertCheck(SDL_TRUE, "All int multiplication were correct (%s)", desc); + } +} + +/** + * \brief Verify element-wise addition of 2 float arrays. + */ +static void verify_floats_addition(const float *dest, const float *a, const float *b, size_t size, const char *desc) { + size_t i; + int all_good = 1; + + for (i = 0; i < size; ++i) { + float expected = a[i] + b[i]; + float abs_error = SDL_fabsf(dest[i] - expected); + if (abs_error > 1.0e-5f) { + SDLTest_AssertCheck(SDL_FALSE, "%g + %g = %g, expected %g (error = %g) ([%"SDL_PRIu32"/%"SDL_PRIu32"] %s)", + a[i], b[i], dest[i], expected, abs_error, (Uint32) i, (Uint32) size, desc); + all_good = 0; + } + } + if (all_good) { + SDLTest_AssertCheck(SDL_TRUE, "All float additions were correct (%s)", desc); + } +} + +/** + * \brief Verify element-wise addition of 2 double arrays. + */ +static void verify_doubles_addition(const double *dest, const double *a, const double *b, size_t size, const char *desc) { + size_t i; + int all_good = 1; + + for (i = 0; i < size; ++i) { + double expected = a[i] + b[i]; + double abs_error = SDL_fabs(dest[i] - expected); + if (abs_error > 1.0e-5) { + SDLTest_AssertCheck(abs_error < 1.0e-5f, "%g + %g = %g, expected %g (error = %g) ([%"SDL_PRIu32"/%"SDL_PRIu32"] %s)", + a[i], b[i], dest[i], expected, abs_error, (Uint32) i, (Uint32) size, desc); + all_good = SDL_FALSE; + } + } + if (all_good) { + SDLTest_AssertCheck(SDL_TRUE, "All double additions were correct (%s)", desc); + } +} + +/* Intrinsic kernels */ + +static void kernel_ints_add_cpu(Sint32 *dest, const Sint32 *a, const Sint32 *b, size_t size) { + for (; size; --size, ++dest, ++a, ++b) { + *dest = *a + *b; + } +} + +static void kernel_ints_mul_cpu(Sint32 *dest, const Sint32 *a, const Sint32 *b, size_t size) { + for (; size; --size, ++dest, ++a, ++b) { + *dest = *a * *b; + } +} + +static void kernel_floats_add_cpu(float *dest, const float *a, const float *b, size_t size) { + for (; size; --size, ++dest, ++a, ++b) { + *dest = *a + *b; + } +} + +static void kernel_doubles_add_cpu(double *dest, const double *a, const double *b, size_t size) { + for (; size; --size, ++dest, ++a, ++b) { + *dest = *a + *b; + } +} + +#ifdef SDL_MMX_INTRINSICS +SDL_TARGETING("mmx") static void kernel_ints_add_mmx(Sint32 *dest, const Sint32 *a, const Sint32 *b, size_t size) { + for (; size >= 2; size -= 2, dest += 2, a += 2, b += 2) { + *(__m64*)dest = _mm_add_pi32(*(__m64*)a, *(__m64*)b); + } + if (size) { + *dest = *a + *b; + } + _mm_empty(); +} +#endif + +#ifdef SDL_SSE_INTRINSICS +SDL_TARGETING("sse") static void kernel_floats_add_sse(float *dest, const float *a, const float *b, size_t size) { + for (; size >= 4; size -= 4, dest += 4, a += 4, b += 4) { + _mm_storeu_ps(dest, _mm_add_ps(_mm_loadu_ps(a), _mm_loadu_ps (b))); + } + for (; size; size--, ++dest, ++a, ++b) { + *dest = *a + *b; + } +} +#endif + +#ifdef SDL_SSE2_INTRINSICS +SDL_TARGETING("sse2") static void kernel_doubles_add_sse2(double *dest, const double *a, const double *b, size_t size) { + for (; size >= 2; size -= 2, dest += 2, a += 2, b += 2) { + _mm_storeu_pd(dest, _mm_add_pd(_mm_loadu_pd(a), _mm_loadu_pd(b))); + } + if (size) { + *dest = *a + *b; + } +} +#endif + +#ifdef SDL_SSE3_INTRINSICS +SDL_TARGETING("sse3") static void kernel_ints_add_sse3(Sint32 *dest, const Sint32 *a, const Sint32 *b, size_t size) { + for (; size >= 4; size -= 4, dest += 4, a += 4, b += 4) { + _mm_storeu_si128((__m128i*)dest, _mm_add_epi32(_mm_lddqu_si128((__m128i*)a), _mm_lddqu_si128((__m128i*)b))); + } + for (;size; --size, ++dest, ++a, ++b) { + *dest = *a + *b; + } +} +#endif + +#ifdef SDL_SSE4_1_INTRINSICS +SDL_TARGETING("sse4.1") static void kernel_ints_mul_sse4_1(Sint32 *dest, const Sint32 *a, const Sint32 *b, size_t size) { + for (; size >= 4; size -= 4, dest += 4, a += 4, b += 4) { + _mm_storeu_si128((__m128i*)dest, _mm_mullo_epi32(_mm_lddqu_si128((__m128i*)a), _mm_lddqu_si128((__m128i*)b))); + } + for (;size; --size, ++dest, ++a, ++b) { + *dest = *a * *b; + } +} +#endif + +#ifdef SDL_SSE4_2_INTRINSICS +SDL_TARGETING("sse4.2") static Uint32 calculate_crc32c_sse4_2(const char *text) { + Uint32 crc32c = ~0; + size_t len = SDL_strlen(text); + +#if defined(__x86_64__) || defined(_M_X64) + for (; len >= 8; len -= 8, text += 8) { + crc32c = (Uint32)_mm_crc32_u64(crc32c, *(Sint64*)text); + } + if (len >= 4) { + crc32c = (Uint32)_mm_crc32_u32(crc32c, *(Sint32*)text); + len -= 4; + text += 4; + } +#else + for (; len >= 4; len -= 4, text += 4) { + crc32c = (Uint32)_mm_crc32_u32(crc32c, *(Sint32*)text); + } +#endif + if (len >= 2) { + crc32c = (Uint32)_mm_crc32_u16(crc32c, *(Sint16*)text); + len -= 2; + text += 2; + } + if (len) { + crc32c = (Uint32)_mm_crc32_u8(crc32c, *text); + } + return ~crc32c; +} +#endif + +#ifdef SDL_AVX_INTRINSICS +SDL_TARGETING("avx") static void kernel_floats_add_avx(float *dest, const float *a, const float *b, size_t size) { + for (; size >= 8; size -= 8, dest += 8, a += 8, b += 8) { + _mm256_storeu_ps(dest, _mm256_add_ps(_mm256_loadu_ps(a), _mm256_loadu_ps(b))); + } + for (; size; size--, ++dest, ++a, ++b) { + *dest = *a + *b; + } +} +#endif + +#ifdef SDL_AVX2_INTRINSICS +SDL_TARGETING("avx2") static void kernel_ints_add_avx2(Sint32 *dest, const Sint32 *a, const Sint32 *b, size_t size) { + for (; size >= 8; size -= 8, dest += 8, a += 8, b += 8) { + _mm256_storeu_si256((__m256i*)dest, _mm256_add_epi32(_mm256_loadu_si256((__m256i*)a), _mm256_loadu_si256((__m256i*)b))); + } + for (; size; size--, ++dest, ++a, ++b) { + *dest = *a + *b; + } +} +#endif + +#ifdef SDL_AVX512F_INTRINSICS +SDL_TARGETING("avx512f") static void kernel_floats_add_avx512f(float *dest, const float *a, const float *b, size_t size) { + for (; size >= 16; size -= 16, dest += 16, a += 16, b += 16) { + _mm512_storeu_ps(dest, _mm512_add_ps(_mm512_loadu_ps(a), _mm512_loadu_ps(b))); + } + for (; size; --size) { + *dest++ = *a++ + *b++; + } +} +#endif + +/* Test case functions */ + +static int intrinsics_selftest(void *arg) +{ + { + size_t size; + Sint32 *dest, *a, *b; + if (allocate_random_int_arrays(&dest, &a, &b, &size) < 0) { + return TEST_ABORTED; + } + kernel_ints_mul_cpu(dest, a, b, size); + verify_ints_multiplication(dest, a, b, size, "CPU"); + free_arrays(dest, a, b); + } + { + size_t size; + Sint32 *dest, *a, *b; + if (allocate_random_int_arrays(&dest, &a, &b, &size) < 0) { + return TEST_ABORTED; + } + kernel_ints_add_cpu(dest, a, b, size); + verify_ints_addition(dest, a, b, size, "CPU"); + free_arrays(dest, a, b); + } + { + size_t size; + float *dest, *a, *b; + if (allocate_random_float_arrays(&dest, &a, &b, &size) < 0) { + return TEST_ABORTED; + } + kernel_floats_add_cpu(dest, a, b, size); + verify_floats_addition(dest, a, b, size, "CPU"); + free_arrays(dest, a, b); + } + { + size_t size; + double *dest, *a, *b; + if (allocate_random_double_arrays(&dest, &a, &b, &size) < 0) { + return TEST_ABORTED; + } + kernel_doubles_add_cpu(dest, a, b, size); + verify_doubles_addition(dest, a, b, size, "CPU"); + free_arrays(dest, a, b); + } + return TEST_COMPLETED; +} + +static int intrinsics_testMMX(void *arg) +{ + if (SDL_HasMMX()) { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has MMX support."); +#ifdef SDL_MMX_INTRINSICS + { + size_t size; + Sint32 *dest, *a, *b; + + SDLTest_AssertCheck(SDL_TRUE, "Test executable uses MMX intrinsics."); + if (allocate_random_int_arrays(&dest, &a, &b, &size) < 0) { + return TEST_ABORTED; + } + kernel_ints_add_mmx(dest, a, b, size); + verify_ints_addition(dest, a, b, size, "MMX"); + free_arrays(dest, a, b); + + return TEST_COMPLETED; + } +#else + SDLTest_AssertCheck(SDL_TRUE, "Test executable does NOT use MMX intrinsics."); +#endif + } else { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has NO MMX support."); + } + return TEST_SKIPPED; +} + +static int intrinsics_testSSE(void *arg) +{ + if (SDL_HasSSE()) { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has SSE support."); +#ifdef SDL_SSE_INTRINSICS + { + size_t size; + float *dest, *a, *b; + + SDLTest_AssertCheck(SDL_TRUE, "Test executable uses SSE intrinsics."); + if (allocate_random_float_arrays(&dest, &a, &b, &size) < 0) { + return TEST_ABORTED; + } + kernel_floats_add_sse(dest, a, b, size); + verify_floats_addition(dest, a, b, size, "SSE"); + free_arrays(dest, a, b); + + return TEST_COMPLETED; + } +#else + SDLTest_AssertCheck(SDL_TRUE, "Test executable does NOT use SSE intrinsics."); +#endif + } else { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has NO SSE support."); + } + return TEST_SKIPPED; +} + +static int intrinsics_testSSE2(void *arg) +{ + if (SDL_HasSSE2()) { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has SSE2 support."); +#ifdef SDL_SSE2_INTRINSICS + { + size_t size; + double *dest, *a, *b; + + SDLTest_AssertCheck(SDL_TRUE, "Test executable uses SSE2 intrinsics."); + if (allocate_random_double_arrays(&dest, &a, &b, &size) < 0) { + return TEST_ABORTED; + } + kernel_doubles_add_sse2(dest, a, b, size); + verify_doubles_addition(dest, a, b, size, "SSE2"); + free_arrays(dest, a, b); + + return TEST_COMPLETED; + } +#else + SDLTest_AssertCheck(SDL_TRUE, "Test executable does NOT use SSE2 intrinsics."); +#endif + } else { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has NO SSE2 support."); + } + return TEST_SKIPPED; +} + +static int intrinsics_testSSE3(void *arg) +{ + if (SDL_HasSSE3()) { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has SSE3 support."); +#ifdef SDL_SSE3_INTRINSICS + { + size_t size; + Sint32 *dest, *a, *b; + + SDLTest_AssertCheck(SDL_TRUE, "Test executable uses SSE3 intrinsics."); + if (allocate_random_int_arrays(&dest, &a, &b, &size) < 0) { + return TEST_ABORTED; + } + kernel_ints_add_sse3(dest, a, b, size); + verify_ints_addition(dest, a, b, size, "SSE3"); + free_arrays(dest, a, b); + + return TEST_COMPLETED; + } +#else + SDLTest_AssertCheck(SDL_TRUE, "Test executable does NOT use SSE3 intrinsics."); +#endif + } else { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has NO SSE3 support."); + } + return TEST_SKIPPED; +} + +static int intrinsics_testSSE4_1(void *arg) +{ + if (SDL_HasSSE41()) { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has SSE4.1 support."); +#ifdef SDL_SSE4_1_INTRINSICS + { + size_t size; + Sint32 *dest, *a, *b; + + SDLTest_AssertCheck(SDL_TRUE, "Test executable uses SSE4.1 intrinsics."); + if (allocate_random_int_arrays(&dest, &a, &b, &size) < 0) { + return TEST_ABORTED; + } + kernel_ints_mul_sse4_1(dest, a, b, size); + verify_ints_multiplication(dest, a, b, size, "SSE4.1"); + free_arrays(dest, a, b); + + return TEST_COMPLETED; + } +#else + SDLTest_AssertCheck(SDL_TRUE, "Test executable does NOT use SSE4.1 intrinsics."); +#endif + } else { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has NO SSE4.1 support."); + } + return TEST_SKIPPED; +} + +static int intrinsics_testSSE4_2(void *arg) +{ + if (SDL_HasSSE42()) { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has SSE4.2 support."); +#ifdef SDL_SSE4_2_INTRINSICS + { + struct { + const char *input; + Uint32 crc32c; + } references[] = { + {"", 0x00000000}, + {"Hello world", 0x72b51f78}, + {"Simple DirectMedia Layer", 0x56f85341, }, + }; + size_t i; + + SDLTest_AssertCheck(SDL_TRUE, "Test executable uses SSE4.2 intrinsics."); + + for (i = 0; i < SDL_arraysize(references); ++i) { + Uint32 actual = calculate_crc32c_sse4_2(references[i].input); + SDLTest_AssertCheck(actual == references[i].crc32c, "CRC32-C(\"%s\")=0x%08x, got 0x%08x", + references[i].input, references[i].crc32c, actual); + } + + return TEST_COMPLETED; + } +#else + SDLTest_AssertCheck(SDL_TRUE, "Test executable does NOT use SSE4.2 intrinsics."); +#endif + } else { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has NO SSE4.2 support."); + } + return TEST_SKIPPED; +} + +static int intrinsics_testAVX(void *arg) +{ + if (SDL_HasAVX()) { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has AVX support."); +#ifdef SDL_AVX_INTRINSICS + { + size_t size; + float *dest, *a, *b; + + SDLTest_AssertCheck(SDL_TRUE, "Test executable uses AVX intrinsics."); + if (allocate_random_float_arrays(&dest, &a, &b, &size) < 0) { + return TEST_ABORTED; + } + kernel_floats_add_avx(dest, a, b, size); + verify_floats_addition(dest, a, b, size, "AVX"); + free_arrays(dest, a, b); + + return TEST_COMPLETED; + } +#else + SDLTest_AssertCheck(SDL_TRUE, "Test executable does NOT use AVX intrinsics."); +#endif + } else { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has NO AVX support."); + } + return TEST_SKIPPED; +} + +static int intrinsics_testAVX2(void *arg) +{ + if (SDL_HasAVX2()) { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has AVX2 support."); +#ifdef SDL_AVX2_INTRINSICS + { + size_t size; + Sint32 *dest, *a, *b; + + SDLTest_AssertCheck(SDL_TRUE, "Test executable uses AVX2 intrinsics."); + if (allocate_random_int_arrays(&dest, &a, &b, &size) < 0) { + return TEST_ABORTED; + } + kernel_ints_add_avx2(dest, a, b, size); + verify_ints_addition(dest, a, b, size, "AVX2"); + free_arrays(dest, a, b); + + return TEST_COMPLETED; + } +#else + SDLTest_AssertCheck(SDL_TRUE, "Test executable does NOT use AVX2 intrinsics."); +#endif + } else { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has NO AVX2 support."); + } + return TEST_SKIPPED; +} + +static int intrinsics_testAVX512F(void *arg) +{ + if (SDL_HasAVX512F()) { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has AVX512F support."); +#ifdef SDL_AVX512F_INTRINSICS + { + size_t size; + float *dest, *a, *b; + + SDLTest_AssertCheck(SDL_TRUE, "Test executable uses AVX512F intrinsics."); + if (allocate_random_float_arrays(&dest, &a, &b, &size) < 0) { + return TEST_ABORTED; + } + kernel_floats_add_avx512f(dest, a, b, size); + verify_floats_addition(dest, a, b, size, "AVX512F"); + free_arrays(dest, a, b); + + return TEST_COMPLETED; + } +#else + SDLTest_AssertCheck(SDL_TRUE, "Test executable does NOT use AVX512F intrinsics."); +#endif + } else { + SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has NO AVX512F support."); + } + + return TEST_SKIPPED; +} + +/* ================= Test References ================== */ + +/* Intrinsics test cases */ + +static const SDLTest_TestCaseReference intrinsicsTest1 = { + (SDLTest_TestCaseFp)intrinsics_selftest, "intrinsics_selftest", "Intrinsics testautomation selftest", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference intrinsicsTest2 = { + (SDLTest_TestCaseFp)intrinsics_testMMX, "intrinsics_testMMX", "Tests MMX intrinsics", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference intrinsicsTest3 = { + (SDLTest_TestCaseFp)intrinsics_testSSE, "intrinsics_testSSE", "Tests SSE intrinsics", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference intrinsicsTest4 = { + (SDLTest_TestCaseFp)intrinsics_testSSE2, "intrinsics_testSSE2", "Tests SSE2 intrinsics", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference intrinsicsTest5 = { + (SDLTest_TestCaseFp)intrinsics_testSSE3, "intrinsics_testSSE3", "Tests SSE3 intrinsics", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference intrinsicsTest6 = { + (SDLTest_TestCaseFp)intrinsics_testSSE4_1, "intrinsics_testSSE4.1", "Tests SSE4.1 intrinsics", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference intrinsicsTest7 = { + (SDLTest_TestCaseFp)intrinsics_testSSE4_2, "intrinsics_testSSE4.2", "Tests SSE4.2 intrinsics", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference intrinsicsTest8 = { + (SDLTest_TestCaseFp)intrinsics_testAVX, "intrinsics_testAVX", "Tests AVX intrinsics", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference intrinsicsTest9 = { + (SDLTest_TestCaseFp)intrinsics_testAVX2, "intrinsics_testAVX2", "Tests AVX2 intrinsics", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference intrinsicsTest10 = { + (SDLTest_TestCaseFp)intrinsics_testAVX512F, "intrinsics_testAVX512F", "Tests AVX512F intrinsics", TEST_ENABLED +}; + +/* Sequence of Platform test cases */ +static const SDLTest_TestCaseReference *platformTests[] = { + &intrinsicsTest1, + &intrinsicsTest2, + &intrinsicsTest3, + &intrinsicsTest4, + &intrinsicsTest5, + &intrinsicsTest6, + &intrinsicsTest7, + &intrinsicsTest8, + &intrinsicsTest9, + &intrinsicsTest10, + NULL +}; + +/* Platform test suite (global) */ +SDLTest_TestSuiteReference intrinsicsTestSuite = { + "Intrinsics", + NULL, + platformTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_joystick.c b/vendor/sdl-3.0.0/test/testautomation_joystick.c new file mode 100644 index 0000000..54b9b3e --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_joystick.c @@ -0,0 +1,95 @@ +/** + * Joystick test suite + */ + +#include +#include +#include "../src/joystick/usb_ids.h" +#include "testautomation_suites.h" + +/* ================= Test Case Implementation ================== */ + +/* Test case functions */ + +/** + * \brief Check virtual joystick creation + * + * \sa SDL_AttachVirtualJoystickEx + */ +static int TestVirtualJoystick(void *arg) +{ + SDL_VirtualJoystickDesc desc; + SDL_Joystick *joystick = NULL; + SDL_JoystickID device_id; + + SDLTest_AssertCheck(SDL_InitSubSystem(SDL_INIT_GAMEPAD) == 0, "SDL_InitSubSystem(SDL_INIT_GAMEPAD)"); + + SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1"); + + SDL_zero(desc); + desc.version = SDL_VIRTUAL_JOYSTICK_DESC_VERSION; + desc.type = SDL_JOYSTICK_TYPE_GAMEPAD; + desc.naxes = SDL_GAMEPAD_AXIS_MAX; + desc.nbuttons = SDL_GAMEPAD_BUTTON_MAX; + desc.vendor_id = USB_VENDOR_NVIDIA; + desc.product_id = USB_PRODUCT_NVIDIA_SHIELD_CONTROLLER_V104; + desc.name = "Virtual NVIDIA SHIELD Controller"; + device_id = SDL_AttachVirtualJoystickEx(&desc); + SDLTest_AssertCheck(device_id > 0, "SDL_AttachVirtualJoystickEx()"); + SDLTest_AssertCheck(SDL_IsJoystickVirtual(device_id), "SDL_IsJoystickVirtual()"); + if (device_id > 0) { + joystick = SDL_OpenJoystick(device_id); + SDLTest_AssertCheck(joystick != NULL, "SDL_OpenJoystick()"); + if (joystick) { + SDLTest_AssertCheck(SDL_strcmp(SDL_GetJoystickName(joystick), desc.name) == 0, "SDL_GetJoystickName()"); + SDLTest_AssertCheck(SDL_GetJoystickVendor(joystick) == desc.vendor_id, "SDL_GetJoystickVendor()"); + SDLTest_AssertCheck(SDL_GetJoystickProduct(joystick) == desc.product_id, "SDL_GetJoystickProduct()"); + SDLTest_AssertCheck(SDL_GetJoystickProductVersion(joystick) == 0, "SDL_GetJoystickProductVersion()"); + SDLTest_AssertCheck(SDL_GetJoystickFirmwareVersion(joystick) == 0, "SDL_GetJoystickFirmwareVersion()"); + SDLTest_AssertCheck(SDL_GetJoystickSerial(joystick) == NULL, "SDL_GetJoystickSerial()"); + SDLTest_AssertCheck(SDL_GetJoystickType(joystick) == desc.type, "SDL_GetJoystickType()"); + SDLTest_AssertCheck(SDL_GetNumJoystickAxes(joystick) == desc.naxes, "SDL_GetNumJoystickAxes()"); + SDLTest_AssertCheck(SDL_GetNumJoystickHats(joystick) == desc.nhats, "SDL_GetNumJoystickHats()"); + SDLTest_AssertCheck(SDL_GetNumJoystickButtons(joystick) == desc.nbuttons, "SDL_GetNumJoystickButtons()"); + + SDLTest_AssertCheck(SDL_SetJoystickVirtualButton(joystick, SDL_GAMEPAD_BUTTON_A, SDL_PRESSED) == 0, "SDL_SetJoystickVirtualButton(SDL_GAMEPAD_BUTTON_A, SDL_PRESSED)"); + SDL_UpdateJoysticks(); + SDLTest_AssertCheck(SDL_GetJoystickButton(joystick, SDL_GAMEPAD_BUTTON_A) == SDL_PRESSED, "SDL_GetJoystickButton(SDL_GAMEPAD_BUTTON_A) == SDL_PRESSED"); + SDLTest_AssertCheck(SDL_SetJoystickVirtualButton(joystick, SDL_GAMEPAD_BUTTON_A, SDL_RELEASED) == 0, "SDL_SetJoystickVirtualButton(SDL_GAMEPAD_BUTTON_A, SDL_RELEASED)"); + + SDL_UpdateJoysticks(); + SDLTest_AssertCheck(SDL_GetJoystickButton(joystick, SDL_GAMEPAD_BUTTON_A) == SDL_RELEASED, "SDL_GetJoystickButton(SDL_GAMEPAD_BUTTON_A) == SDL_RELEASED"); + + SDL_CloseJoystick(joystick); + } + SDLTest_AssertCheck(SDL_DetachVirtualJoystick(device_id) == 0, "SDL_DetachVirtualJoystick()"); + } + SDLTest_AssertCheck(!SDL_IsJoystickVirtual(device_id), "!SDL_IsJoystickVirtual()"); + + SDL_ResetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS); + + SDL_QuitSubSystem(SDL_INIT_GAMEPAD); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Joystick routine test cases */ +static const SDLTest_TestCaseReference joystickTest1 = { + (SDLTest_TestCaseFp)TestVirtualJoystick, "TestVirtualJoystick", "Test virtual joystick functionality", TEST_ENABLED +}; + +/* Sequence of Joystick routine test cases */ +static const SDLTest_TestCaseReference *joystickTests[] = { + &joystickTest1, + NULL +}; + +/* Joystick routine test suite (global) */ +SDLTest_TestSuiteReference joystickTestSuite = { + "Joystick", + NULL, + joystickTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_keyboard.c b/vendor/sdl-3.0.0/test/testautomation_keyboard.c new file mode 100644 index 0000000..5a3d0e9 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_keyboard.c @@ -0,0 +1,703 @@ +/** + * Keyboard test suite + */ + +#include +#include +#include "testautomation_suites.h" + +/* ================= Test Case Implementation ================== */ + +/* Test case functions */ + +/** + * \brief Check call to SDL_GetKeyboardState with and without numkeys reference. + * + * \sa SDL_GetKeyboardState + */ +static int keyboard_getKeyboardState(void *arg) +{ + int numkeys; + const Uint8 *state; + + /* Case where numkeys pointer is NULL */ + state = SDL_GetKeyboardState(NULL); + SDLTest_AssertPass("Call to SDL_GetKeyboardState(NULL)"); + SDLTest_AssertCheck(state != NULL, "Validate that return value from SDL_GetKeyboardState is not NULL"); + + /* Case where numkeys pointer is not NULL */ + numkeys = -1; + state = SDL_GetKeyboardState(&numkeys); + SDLTest_AssertPass("Call to SDL_GetKeyboardState(&numkeys)"); + SDLTest_AssertCheck(state != NULL, "Validate that return value from SDL_GetKeyboardState is not NULL"); + SDLTest_AssertCheck(numkeys >= 0, "Validate that value of numkeys is >= 0, got: %i", numkeys); + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_GetKeyboardFocus + * + * \sa SDL_GetKeyboardFocus + */ +static int keyboard_getKeyboardFocus(void *arg) +{ + /* Call, but ignore return value */ + SDL_GetKeyboardFocus(); + SDLTest_AssertPass("Call to SDL_GetKeyboardFocus()"); + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_GetKeyFromName for known, unknown and invalid name. + * + * \sa SDL_GetKeyFromName + */ +static int keyboard_getKeyFromName(void *arg) +{ + SDL_Keycode result; + + /* Case where Key is known, 1 character input */ + result = SDL_GetKeyFromName("A"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/single)"); + SDLTest_AssertCheck(result == SDLK_a, "Verify result from call, expected: %i, got: %" SDL_PRIs32, SDLK_a, result); + + /* Case where Key is known, 2 character input */ + result = SDL_GetKeyFromName("F1"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/double)"); + SDLTest_AssertCheck(result == SDLK_F1, "Verify result from call, expected: %i, got: %" SDL_PRIs32, SDLK_F1, result); + + /* Case where Key is known, 3 character input */ + result = SDL_GetKeyFromName("End"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/triple)"); + SDLTest_AssertCheck(result == SDLK_END, "Verify result from call, expected: %i, got: %" SDL_PRIs32, SDLK_END, result); + + /* Case where Key is known, 4 character input */ + result = SDL_GetKeyFromName("Find"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/quad)"); + SDLTest_AssertCheck(result == SDLK_FIND, "Verify result from call, expected: %i, got: %" SDL_PRIs32, SDLK_FIND, result); + + /* Case where Key is known, multiple character input */ + result = SDL_GetKeyFromName("AudioStop"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/multi)"); + SDLTest_AssertCheck(result == SDLK_AUDIOSTOP, "Verify result from call, expected: %i, got: %" SDL_PRIs32, SDLK_AUDIOSTOP, result); + + /* Case where Key is unknown */ + result = SDL_GetKeyFromName("NotThere"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(unknown)"); + SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %i, got: %" SDL_PRIs32, SDLK_UNKNOWN, result); + + /* Case where input is NULL/invalid */ + result = SDL_GetKeyFromName(NULL); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(NULL)"); + SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %i, got: %" SDL_PRIs32, SDLK_UNKNOWN, result); + + return TEST_COMPLETED; +} + +/* + * Local helper to check for the invalid scancode error message + */ +static void checkInvalidScancodeError(void) +{ + const char *expectedError = "Parameter 'scancode' is invalid"; + const char *error; + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError, error); + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + } +} + +/** + * \brief Check call to SDL_GetKeyFromScancode + * + * \sa SDL_GetKeyFromScancode + */ +static int keyboard_getKeyFromScancode(void *arg) +{ + SDL_Keycode result; + + /* Case where input is valid */ + result = SDL_GetKeyFromScancode(SDL_SCANCODE_A); + SDLTest_AssertPass("Call to SDL_GetKeyFromScancode(valid)"); + SDLTest_AssertCheck(result == SDLK_a, "Verify result from call, expected: %i, got: %" SDL_PRIs32, SDLK_a, result); + + /* Case where input is zero */ + result = SDL_GetKeyFromScancode(0); + SDLTest_AssertPass("Call to SDL_GetKeyFromScancode(0)"); + SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %i, got: %" SDL_PRIs32, SDLK_UNKNOWN, result); + + /* Clear error message */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Case where input is invalid (too small) */ + result = SDL_GetKeyFromScancode(-999); + SDLTest_AssertPass("Call to SDL_GetKeyFromScancode(-999)"); + SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %i, got: %" SDL_PRIs32, SDLK_UNKNOWN, result); + checkInvalidScancodeError(); + + /* Case where input is invalid (too big) */ + result = SDL_GetKeyFromScancode(999); + SDLTest_AssertPass("Call to SDL_GetKeyFromScancode(999)"); + SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %i, got: %" SDL_PRIs32, SDLK_UNKNOWN, result); + checkInvalidScancodeError(); + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_GetKeyName + * + * \sa SDL_GetKeyName + */ +static int keyboard_getKeyName(void *arg) +{ + const char *result; + const char *expected; + + /* Case where key has a 1 character name */ + expected = "3"; + result = SDL_GetKeyName(SDLK_3); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + /* Case where key has a 2 character name */ + expected = "F1"; + result = SDL_GetKeyName(SDLK_F1); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + /* Case where key has a 3 character name */ + expected = "Cut"; + result = SDL_GetKeyName(SDLK_CUT); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + /* Case where key has a 4 character name */ + expected = "Down"; + result = SDL_GetKeyName(SDLK_DOWN); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + /* Case where key has a N character name */ + expected = "BrightnessUp"; + result = SDL_GetKeyName(SDLK_BRIGHTNESSUP); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + /* Case where key has a N character name with space */ + expected = "Keypad MemStore"; + result = SDL_GetKeyName(SDLK_KP_MEMSTORE); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + return TEST_COMPLETED; +} + +/** + * \brief SDL_GetScancodeName negative cases + * + * \sa SDL_GetScancodeName + */ +static int keyboard_getScancodeNameNegative(void *arg) +{ + SDL_Scancode scancode; + const char *result; + const char *expected = ""; + + /* Clear error message */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Out-of-bounds scancode */ + scancode = (SDL_Scancode)SDL_NUM_SCANCODES; + result = SDL_GetScancodeName(scancode); + SDLTest_AssertPass("Call to SDL_GetScancodeName(%d/large)", scancode); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: '%s', got: '%s'", expected, result); + checkInvalidScancodeError(); + + return TEST_COMPLETED; +} + +/** + * \brief SDL_GetKeyName negative cases + * + * \sa SDL_GetKeyName + */ +static int keyboard_getKeyNameNegative(void *arg) +{ + SDL_Keycode keycode; + const char *result; + const char *expected = ""; + + /* Unknown keycode */ + keycode = SDLK_UNKNOWN; + result = SDL_GetKeyName(keycode); + SDLTest_AssertPass("Call to SDL_GetKeyName(%" SDL_PRIs32 "/unknown)", keycode); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: '%s', got: '%s'", expected, result); + + /* Clear error message */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Negative keycode */ + keycode = (SDL_Keycode)SDLTest_RandomIntegerInRange(-255, -1); + result = SDL_GetKeyName(keycode); + SDLTest_AssertPass("Call to SDL_GetKeyName(%" SDL_PRIs32 "/negative)", keycode); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: '%s', got: '%s'", expected, result); + checkInvalidScancodeError(); + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_GetModState and SDL_SetModState + * + * \sa SDL_GetModState + * \sa SDL_SetModState + */ +static int keyboard_getSetModState(void *arg) +{ + SDL_Keymod result; + SDL_Keymod currentState; + SDL_Keymod newState; + SDL_Keymod allStates = + SDL_KMOD_NONE | + SDL_KMOD_LSHIFT | + SDL_KMOD_RSHIFT | + SDL_KMOD_LCTRL | + SDL_KMOD_RCTRL | + SDL_KMOD_LALT | + SDL_KMOD_RALT | + SDL_KMOD_LGUI | + SDL_KMOD_RGUI | + SDL_KMOD_NUM | + SDL_KMOD_CAPS | + SDL_KMOD_MODE | + SDL_KMOD_SCROLL; + + /* Get state, cache for later reset */ + result = SDL_GetModState(); + SDLTest_AssertPass("Call to SDL_GetModState()"); + SDLTest_AssertCheck(/*result >= 0 &&*/ result <= allStates, "Verify result from call is valid, expected: 0 <= result <= %i, got: %i", allStates, result); + currentState = result; + + /* Set random state */ + newState = SDLTest_RandomIntegerInRange(0, allStates); + SDL_SetModState(newState); + SDLTest_AssertPass("Call to SDL_SetModState(%i)", newState); + result = SDL_GetModState(); + SDLTest_AssertPass("Call to SDL_GetModState()"); + SDLTest_AssertCheck(result == newState, "Verify result from call is valid, expected: %i, got: %i", newState, result); + + /* Set zero state */ + SDL_SetModState(0); + SDLTest_AssertPass("Call to SDL_SetModState(0)"); + result = SDL_GetModState(); + SDLTest_AssertPass("Call to SDL_GetModState()"); + SDLTest_AssertCheck(result == 0, "Verify result from call is valid, expected: 0, got: %i", result); + + /* Revert back to cached current state if needed */ + if (currentState != 0) { + SDL_SetModState(currentState); + SDLTest_AssertPass("Call to SDL_SetModState(%i)", currentState); + result = SDL_GetModState(); + SDLTest_AssertPass("Call to SDL_GetModState()"); + SDLTest_AssertCheck(result == currentState, "Verify result from call is valid, expected: %i, got: %i", currentState, result); + } + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_StartTextInput and SDL_StopTextInput + * + * \sa SDL_StartTextInput + * \sa SDL_StopTextInput + */ +static int keyboard_startStopTextInput(void *arg) +{ + /* Start-Stop */ + SDL_StartTextInput(); + SDLTest_AssertPass("Call to SDL_StartTextInput()"); + SDL_StopTextInput(); + SDLTest_AssertPass("Call to SDL_StopTextInput()"); + + /* Stop-Start */ + SDL_StartTextInput(); + SDLTest_AssertPass("Call to SDL_StartTextInput()"); + + /* Start-Start */ + SDL_StartTextInput(); + SDLTest_AssertPass("Call to SDL_StartTextInput()"); + + /* Stop-Stop */ + SDL_StopTextInput(); + SDLTest_AssertPass("Call to SDL_StopTextInput()"); + SDL_StopTextInput(); + SDLTest_AssertPass("Call to SDL_StopTextInput()"); + + return TEST_COMPLETED; +} + +/* Internal function to test SDL_SetTextInputRect */ +static void testSetTextInputRect(SDL_Rect refRect) +{ + SDL_Rect testRect; + + testRect = refRect; + SDL_SetTextInputRect(&testRect); + SDLTest_AssertPass("Call to SDL_SetTextInputRect with refRect(x:%i,y:%i,w:%i,h:%i)", refRect.x, refRect.y, refRect.w, refRect.h); + SDLTest_AssertCheck( + (refRect.x == testRect.x) && (refRect.y == testRect.y) && (refRect.w == testRect.w) && (refRect.h == testRect.h), + "Check that input data was not modified, expected: x:%i,y:%i,w:%i,h:%i, got: x:%i,y:%i,w:%i,h:%i", + refRect.x, refRect.y, refRect.w, refRect.h, + testRect.x, testRect.y, testRect.w, testRect.h); +} + +/** + * \brief Check call to SDL_SetTextInputRect + * + * \sa SDL_SetTextInputRect + */ +static int keyboard_setTextInputRect(void *arg) +{ + SDL_Rect refRect; + + /* Normal visible refRect, origin inside */ + refRect.x = SDLTest_RandomIntegerInRange(1, 50); + refRect.y = SDLTest_RandomIntegerInRange(1, 50); + refRect.w = SDLTest_RandomIntegerInRange(10, 50); + refRect.h = SDLTest_RandomIntegerInRange(10, 50); + testSetTextInputRect(refRect); + + /* Normal visible refRect, origin 0,0 */ + refRect.x = 0; + refRect.y = 0; + refRect.w = SDLTest_RandomIntegerInRange(10, 50); + refRect.h = SDLTest_RandomIntegerInRange(10, 50); + testSetTextInputRect(refRect); + + /* 1Pixel refRect */ + refRect.x = SDLTest_RandomIntegerInRange(10, 50); + refRect.y = SDLTest_RandomIntegerInRange(10, 50); + refRect.w = 1; + refRect.h = 1; + testSetTextInputRect(refRect); + + /* 0pixel refRect */ + refRect.x = 1; + refRect.y = 1; + refRect.w = 1; + refRect.h = 0; + testSetTextInputRect(refRect); + + /* 0pixel refRect */ + refRect.x = 1; + refRect.y = 1; + refRect.w = 0; + refRect.h = 1; + testSetTextInputRect(refRect); + + /* 0pixel refRect */ + refRect.x = 1; + refRect.y = 1; + refRect.w = 0; + refRect.h = 0; + testSetTextInputRect(refRect); + + /* 0pixel refRect */ + refRect.x = 0; + refRect.y = 0; + refRect.w = 0; + refRect.h = 0; + testSetTextInputRect(refRect); + + /* negative refRect */ + refRect.x = SDLTest_RandomIntegerInRange(-200, -100); + refRect.y = SDLTest_RandomIntegerInRange(-200, -100); + refRect.w = 50; + refRect.h = 50; + testSetTextInputRect(refRect); + + /* oversized refRect */ + refRect.x = SDLTest_RandomIntegerInRange(1, 50); + refRect.y = SDLTest_RandomIntegerInRange(1, 50); + refRect.w = 5000; + refRect.h = 5000; + testSetTextInputRect(refRect); + + /* NULL refRect */ + SDL_SetTextInputRect(NULL); + SDLTest_AssertPass("Call to SDL_SetTextInputRect(NULL)"); + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_SetTextInputRect with invalid data + * + * \sa SDL_SetTextInputRect + */ +static int keyboard_setTextInputRectNegative(void *arg) +{ + /* Some platforms set also an error message; prepare for checking it */ +#if defined(SDL_VIDEO_DRIVER_WINDOWS) || defined(SDL_VIDEO_DRIVER_ANDROID) || defined(SDL_VIDEO_DRIVER_COCOA) + const char *expectedError = "Parameter 'rect' is invalid"; + const char *error; + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); +#endif + + /* NULL refRect */ + SDL_SetTextInputRect(NULL); + SDLTest_AssertPass("Call to SDL_SetTextInputRect(NULL)"); + + /* Some platforms set also an error message; so check it */ +#if defined(SDL_VIDEO_DRIVER_WINDOWS) || defined(SDL_VIDEO_DRIVER_ANDROID) || defined(SDL_VIDEO_DRIVER_COCOA) + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError, error); + } + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); +#endif + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_GetScancodeFromKey + * + * \sa SDL_GetScancodeFromKey + * \sa SDL_Keycode + */ +static int keyboard_getScancodeFromKey(void *arg) +{ + SDL_Scancode scancode; + + /* Regular key */ + scancode = SDL_GetScancodeFromKey(SDLK_4); + SDLTest_AssertPass("Call to SDL_GetScancodeFromKey(SDLK_4)"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_4, "Validate return value from SDL_GetScancodeFromKey, expected: %i, got: %i", SDL_SCANCODE_4, scancode); + + /* Virtual key */ + scancode = SDL_GetScancodeFromKey(SDLK_PLUS); + SDLTest_AssertPass("Call to SDL_GetScancodeFromKey(SDLK_PLUS)"); + SDLTest_AssertCheck(scancode == 0, "Validate return value from SDL_GetScancodeFromKey, expected: 0, got: %i", scancode); + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_GetScancodeFromName + * + * \sa SDL_GetScancodeFromName + * \sa SDL_Keycode + */ +static int keyboard_getScancodeFromName(void *arg) +{ + SDL_Scancode scancode; + + /* Regular key, 1 character, first name in list */ + scancode = SDL_GetScancodeFromName("A"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('A')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_A, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_A, scancode); + + /* Regular key, 1 character */ + scancode = SDL_GetScancodeFromName("4"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('4')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_4, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_4, scancode); + + /* Regular key, 2 characters */ + scancode = SDL_GetScancodeFromName("F1"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('F1')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_F1, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_F1, scancode); + + /* Regular key, 3 characters */ + scancode = SDL_GetScancodeFromName("End"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('End')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_END, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_END, scancode); + + /* Regular key, 4 characters */ + scancode = SDL_GetScancodeFromName("Find"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('Find')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_FIND, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_FIND, scancode); + + /* Regular key, several characters */ + scancode = SDL_GetScancodeFromName("Backspace"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('Backspace')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_BACKSPACE, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_BACKSPACE, scancode); + + /* Regular key, several characters with space */ + scancode = SDL_GetScancodeFromName("Keypad Enter"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('Keypad Enter')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_KP_ENTER, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_KP_ENTER, scancode); + + /* Regular key, last name in list */ + scancode = SDL_GetScancodeFromName("Sleep"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('Sleep')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_SLEEP, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_SLEEP, scancode); + + return TEST_COMPLETED; +} + +/* + * Local helper to check for the invalid scancode error message + */ +static void checkInvalidNameError(void) +{ + const char *expectedError = "Parameter 'name' is invalid"; + const char *error; + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError, error); + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + } +} + +/** + * \brief Check call to SDL_GetScancodeFromName with invalid data + * + * \sa SDL_GetScancodeFromName + * \sa SDL_Keycode + */ +static int keyboard_getScancodeFromNameNegative(void *arg) +{ + char *name; + SDL_Scancode scancode; + + /* Clear error message */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Random string input */ + name = SDLTest_RandomAsciiStringOfSize(32); + SDLTest_Assert(name != NULL, "Check that random name is not NULL"); + if (name == NULL) { + return TEST_ABORTED; + } + scancode = SDL_GetScancodeFromName(name); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('%s')", name); + SDL_free(name); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_UNKNOWN, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_UNKNOWN, scancode); + checkInvalidNameError(); + + /* Zero length string input */ + name = ""; + scancode = SDL_GetScancodeFromName(name); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName(NULL)"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_UNKNOWN, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_UNKNOWN, scancode); + checkInvalidNameError(); + + /* NULL input */ + name = NULL; + scancode = SDL_GetScancodeFromName(name); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName(NULL)"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_UNKNOWN, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_UNKNOWN, scancode); + checkInvalidNameError(); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Keyboard test cases */ +static const SDLTest_TestCaseReference keyboardTest1 = { + (SDLTest_TestCaseFp)keyboard_getKeyboardState, "keyboard_getKeyboardState", "Check call to SDL_GetKeyboardState with and without numkeys reference", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference keyboardTest2 = { + (SDLTest_TestCaseFp)keyboard_getKeyboardFocus, "keyboard_getKeyboardFocus", "Check call to SDL_GetKeyboardFocus", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference keyboardTest3 = { + (SDLTest_TestCaseFp)keyboard_getKeyFromName, "keyboard_getKeyFromName", "Check call to SDL_GetKeyFromName for known, unknown and invalid name", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference keyboardTest4 = { + (SDLTest_TestCaseFp)keyboard_getKeyFromScancode, "keyboard_getKeyFromScancode", "Check call to SDL_GetKeyFromScancode", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference keyboardTest5 = { + (SDLTest_TestCaseFp)keyboard_getKeyName, "keyboard_getKeyName", "Check call to SDL_GetKeyName", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference keyboardTest6 = { + (SDLTest_TestCaseFp)keyboard_getSetModState, "keyboard_getSetModState", "Check call to SDL_GetModState and SDL_SetModState", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference keyboardTest7 = { + (SDLTest_TestCaseFp)keyboard_startStopTextInput, "keyboard_startStopTextInput", "Check call to SDL_StartTextInput and SDL_StopTextInput", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference keyboardTest8 = { + (SDLTest_TestCaseFp)keyboard_setTextInputRect, "keyboard_setTextInputRect", "Check call to SDL_SetTextInputRect", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference keyboardTest9 = { + (SDLTest_TestCaseFp)keyboard_setTextInputRectNegative, "keyboard_setTextInputRectNegative", "Check call to SDL_SetTextInputRect with invalid data", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference keyboardTest10 = { + (SDLTest_TestCaseFp)keyboard_getScancodeFromKey, "keyboard_getScancodeFromKey", "Check call to SDL_GetScancodeFromKey", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference keyboardTest11 = { + (SDLTest_TestCaseFp)keyboard_getScancodeFromName, "keyboard_getScancodeFromName", "Check call to SDL_GetScancodeFromName", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference keyboardTest12 = { + (SDLTest_TestCaseFp)keyboard_getScancodeFromNameNegative, "keyboard_getScancodeFromNameNegative", "Check call to SDL_GetScancodeFromName with invalid data", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference keyboardTest13 = { + (SDLTest_TestCaseFp)keyboard_getKeyNameNegative, "keyboard_getKeyNameNegative", "Check call to SDL_GetKeyName with invalid data", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference keyboardTest14 = { + (SDLTest_TestCaseFp)keyboard_getScancodeNameNegative, "keyboard_getScancodeNameNegative", "Check call to SDL_GetScancodeName with invalid data", TEST_ENABLED +}; + +/* Sequence of Keyboard test cases */ +static const SDLTest_TestCaseReference *keyboardTests[] = { + &keyboardTest1, &keyboardTest2, &keyboardTest3, &keyboardTest4, &keyboardTest5, &keyboardTest6, + &keyboardTest7, &keyboardTest8, &keyboardTest9, &keyboardTest10, &keyboardTest11, &keyboardTest12, + &keyboardTest13, &keyboardTest14, NULL +}; + +/* Keyboard test suite (global) */ +SDLTest_TestSuiteReference keyboardTestSuite = { + "Keyboard", + NULL, + keyboardTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_main.c b/vendor/sdl-3.0.0/test/testautomation_main.c new file mode 100644 index 0000000..7c350ed --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_main.c @@ -0,0 +1,147 @@ +/** + * Automated SDL subsystems management test. + * + * Written by J�rgen Tjern� "jorgenpt" + * + * Released under Public Domain. + */ + +#include +#include +#include "testautomation_suites.h" + +/** + * \brief Tests SDL_InitSubSystem() and SDL_QuitSubSystem() + * \sa SDL_Init + * \sa SDL_Quit + */ +static int main_testInitQuitSubSystem(void *arg) +{ + int i; + int subsystems[] = { SDL_INIT_JOYSTICK, SDL_INIT_HAPTIC, SDL_INIT_GAMEPAD }; + + for (i = 0; i < SDL_arraysize(subsystems); ++i) { + int initialized_system; + int subsystem = subsystems[i]; + + SDLTest_AssertCheck((SDL_WasInit(subsystem) & subsystem) == 0, "SDL_WasInit(%x) before init should be false", subsystem); + SDLTest_AssertCheck(SDL_InitSubSystem(subsystem) == 0, "SDL_InitSubSystem(%x)", subsystem); + + initialized_system = SDL_WasInit(subsystem); + SDLTest_AssertCheck((initialized_system & subsystem) != 0, "SDL_WasInit(%x) should be true (%x)", subsystem, initialized_system); + + SDL_QuitSubSystem(subsystem); + + SDLTest_AssertCheck((SDL_WasInit(subsystem) & subsystem) == 0, "SDL_WasInit(%x) after shutdown should be false", subsystem); + } + + return TEST_COMPLETED; +} + +static const int joy_and_controller = SDL_INIT_JOYSTICK | SDL_INIT_GAMEPAD; +static int main_testImpliedJoystickInit(void *arg) +{ + int initialized_system; + + /* First initialize the controller */ + SDLTest_AssertCheck((SDL_WasInit(joy_and_controller) & joy_and_controller) == 0, "SDL_WasInit() before init should be false for joystick & controller"); + SDLTest_AssertCheck(SDL_InitSubSystem(SDL_INIT_GAMEPAD) == 0, "SDL_InitSubSystem(SDL_INIT_GAMEPAD)"); + + /* Then make sure this implicitly initialized the joystick subsystem */ + initialized_system = SDL_WasInit(joy_and_controller); + SDLTest_AssertCheck((initialized_system & joy_and_controller) == joy_and_controller, "SDL_WasInit() should be true for joystick & controller (%x)", initialized_system); + + /* Then quit the controller, and make sure that implicitly also quits the */ + /* joystick subsystem */ + SDL_QuitSubSystem(SDL_INIT_GAMEPAD); + initialized_system = SDL_WasInit(joy_and_controller); + SDLTest_AssertCheck((initialized_system & joy_and_controller) == 0, "SDL_WasInit() should be false for joystick & controller (%x)", initialized_system); + + return TEST_COMPLETED; +} + +static int main_testImpliedJoystickQuit(void *arg) +{ + int initialized_system; + + /* First initialize the controller and the joystick (explicitly) */ + SDLTest_AssertCheck((SDL_WasInit(joy_and_controller) & joy_and_controller) == 0, "SDL_WasInit() before init should be false for joystick & controller"); + SDLTest_AssertCheck(SDL_InitSubSystem(SDL_INIT_JOYSTICK) == 0, "SDL_InitSubSystem(SDL_INIT_JOYSTICK)"); + SDLTest_AssertCheck(SDL_InitSubSystem(SDL_INIT_GAMEPAD) == 0, "SDL_InitSubSystem(SDL_INIT_GAMEPAD)"); + + /* Then make sure they're both initialized properly */ + initialized_system = SDL_WasInit(joy_and_controller); + SDLTest_AssertCheck((initialized_system & joy_and_controller) == joy_and_controller, "SDL_WasInit() should be true for joystick & controller (%x)", initialized_system); + + /* Then quit the controller, and make sure that it does NOT quit the */ + /* explicitly initialized joystick subsystem. */ + SDL_QuitSubSystem(SDL_INIT_GAMEPAD); + initialized_system = SDL_WasInit(joy_and_controller); + SDLTest_AssertCheck((initialized_system & joy_and_controller) == SDL_INIT_JOYSTICK, "SDL_WasInit() should be false for joystick & controller (%x)", initialized_system); + + SDL_QuitSubSystem(SDL_INIT_JOYSTICK); + + return TEST_COMPLETED; +} + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-zero-length" +#endif + +static int +main_testSetError(void *arg) +{ + size_t i; + char error[1024]; + + error[0] = '\0'; + SDL_SetError(""); + SDLTest_AssertCheck(SDL_strcmp(error, SDL_GetError()) == 0, "SDL_SetError(\"\")"); + + for (i = 0; i < (sizeof(error) - 1); ++i) { + error[i] = 'a' + (i % 26); + } + error[i] = '\0'; + SDL_SetError("%s", error); + SDLTest_AssertCheck(SDL_strcmp(error, SDL_GetError()) == 0, "SDL_SetError(\"abc...1023\")"); + + return TEST_COMPLETED; +} + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif + +static const SDLTest_TestCaseReference mainTest1 = { + (SDLTest_TestCaseFp)main_testInitQuitSubSystem, "main_testInitQuitSubSystem", "Tests SDL_InitSubSystem/QuitSubSystem", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference mainTest2 = { + (SDLTest_TestCaseFp)main_testImpliedJoystickInit, "main_testImpliedJoystickInit", "Tests that init for gamecontroller properly implies joystick", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference mainTest3 = { + (SDLTest_TestCaseFp)main_testImpliedJoystickQuit, "main_testImpliedJoystickQuit", "Tests that quit for gamecontroller doesn't quit joystick if you inited it explicitly", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference mainTest4 = { + (SDLTest_TestCaseFp)main_testSetError, "main_testSetError", "Tests that SDL_SetError() handles arbitrarily large strings", TEST_ENABLED +}; + +/* Sequence of Main test cases */ +static const SDLTest_TestCaseReference *mainTests[] = { + &mainTest1, + &mainTest2, + &mainTest3, + &mainTest4, + NULL +}; + +/* Main test suite (global) */ +SDLTest_TestSuiteReference mainTestSuite = { + "Main", + NULL, + mainTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_math.c b/vendor/sdl-3.0.0/test/testautomation_math.c new file mode 100644 index 0000000..1e92226 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_math.c @@ -0,0 +1,3387 @@ +/** + * Math test suite + */ + +#include +#include + +#include +#include +#include "testautomation_suites.h" + +/* ================= Test Constants ================== */ + +/* Range tests parameters */ +#define RANGE_TEST_ITERATIONS 10000000 +#define RANGE_TEST_STEP ((Uint32)(SDL_MAX_UINT32 / RANGE_TEST_ITERATIONS)) + +/* Margin of error for imprecise tests */ +#define EPSILON 1.0E-10 + +/* Euler constant (used in exp/log) */ +#ifndef M_E +#define EULER 2.7182818284590450907955982984276488423347473144531250 +#else +#define EULER M_E +#endif + +#define IS_INFINITY(V) fpclassify(V) == FP_INFINITE + +/* Square root of 3 (used in atan2) */ +#define SQRT3 1.7320508075688771931766041234368458390235900878906250 + +/* ================= Test Structs ================== */ + +/** + * Stores a single input and the expected result + */ +typedef struct +{ + double input; + double expected; +} d_to_d; + +/** + * Stores a pair of inputs and the expected result + */ +typedef struct +{ + double x_input, y_input; + double expected; +} dd_to_d; + +/* + NB: You cannot create an array of these structures containing INFINITY or NAN. + On platforms such as OS/2, they are defined as 'extern const double' making them + not compile-time constant. +*/ + +/* ================= Test Helpers ================== */ + +typedef double(SDLCALL *d_to_d_func)(double); +typedef double(SDLCALL *dd_to_d_func)(double, double); + +/** + * \brief Runs all the cases on a given function with a signature double -> double. + * The result is expected to be exact. + * + * \param func_name a printable name for the tested function. + * \param func the function to call. + * \param cases an array of all the cases. + * \param cases_size the size of the cases array. + */ +static int +helper_dtod(const char *func_name, d_to_d_func func, + const d_to_d *cases, const size_t cases_size) +{ + Uint32 i; + for (i = 0; i < cases_size; i++) { + const double result = func(cases[i].input); + SDLTest_AssertCheck((result - cases[i].expected) < FLT_EPSILON, + "%s(%f), expected %f, got %f", + func_name, + cases[i].input, + cases[i].expected, result); + } + + return TEST_COMPLETED; +} + +/** + * \brief Runs all the cases on a given function with a signature double -> double. + * Checks if the result between expected +/- EPSILON. + * + * \param func_name a printable name for the tested function. + * \param func the function to call. + * \param cases an array of all the cases. + * \param cases_size the size of the cases array. + */ +static int +helper_dtod_inexact(const char *func_name, d_to_d_func func, + const d_to_d *cases, const size_t cases_size) +{ + Uint32 i; + for (i = 0; i < cases_size; i++) { + const double result = func(cases[i].input); + SDLTest_AssertCheck(result >= cases[i].expected - EPSILON && + result <= cases[i].expected + EPSILON, + "%s(%f), expected [%f,%f], got %f", + func_name, + cases[i].input, + cases[i].expected - EPSILON, + cases[i].expected + EPSILON, + result); + } + + return TEST_COMPLETED; +} + +/** + * \brief Runs all the cases on a given function with a signature + * (double, double) -> double. The result is expected to be exact. + * + * \param func_name a printable name for the tested function. + * \param func the function to call. + * \param cases an array of all the cases. + * \param cases_size the size of the cases array. + */ +static int +helper_ddtod(const char *func_name, dd_to_d_func func, + const dd_to_d *cases, const size_t cases_size) +{ + Uint32 i; + for (i = 0; i < cases_size; i++) { + const double result = func(cases[i].x_input, cases[i].y_input); + SDLTest_AssertCheck(result == cases[i].expected, + "%s(%f,%f), expected %f, got %f", + func_name, + cases[i].x_input, cases[i].y_input, + cases[i].expected, result); + } + + return TEST_COMPLETED; +} + +/** + * \brief Runs all the cases on a given function with a signature + * (double, double) -> double. Checks if the result between expected +/- EPSILON. + * + * \param func_name a printable name for the tested function. + * \param func the function to call. + * \param cases an array of all the cases. + * \param cases_size the size of the cases array. + */ +static int +helper_ddtod_inexact(const char *func_name, dd_to_d_func func, + const dd_to_d *cases, const size_t cases_size) +{ + Uint32 i; + for (i = 0; i < cases_size; i++) { + const double result = func(cases[i].x_input, cases[i].y_input); + SDLTest_AssertCheck(result >= cases[i].expected - EPSILON && + result <= cases[i].expected + EPSILON, + "%s(%f,%f), expected [%f,%f], got %f", + func_name, + cases[i].x_input, cases[i].y_input, + cases[i].expected - EPSILON, + cases[i].expected + EPSILON, + result); + } + + return TEST_COMPLETED; +} + +/** + * \brief Runs a range of values on a given function with a signature double -> double + * + * This function is only meant to test functions that returns the input value if it is + * integral: f(x) -> x for x in N. + * + * \param func_name a printable name for the tested function. + * \param func the function to call. + */ +static int +helper_range(const char *func_name, d_to_d_func func) +{ + Uint32 i; + double test_value = 0.0; + + SDLTest_AssertPass("%s: Testing a range of %u values with steps of %" SDL_PRIu32, + func_name, + RANGE_TEST_ITERATIONS, + RANGE_TEST_STEP); + + for (i = 0; i < RANGE_TEST_ITERATIONS; i++, test_value += RANGE_TEST_STEP) { + double result; + /* These are tested elsewhere */ + if (isnan(test_value) || isinf(test_value)) { + continue; + } + + result = func(test_value); + if (result != test_value) { /* Only log failures to save performances */ + SDLTest_AssertCheck(SDL_FALSE, + "%s(%.1f), expected %.1f, got %.1f", + func_name, test_value, + test_value, result); + return TEST_ABORTED; + } + } + + return TEST_COMPLETED; +} + +/* ================= Test Case Implementation ================== */ + +/* SDL_floor tests functions */ + +/** + * Inputs: +/-Infinity. + * Expected: Infinity is returned as-is. + */ +static int +floor_infCases(void *args) +{ + double result; + + result = SDL_floor(INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Floor(%f), expected %f, got %f", + INFINITY, INFINITY, result); + + result = SDL_floor(-INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result < 0, + "Floor(%f), expected %f, got %f", + -INFINITY, -INFINITY, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: +/-0.0. + * Expected: Zero is returned as-is. + */ +static int +floor_zeroCases(void *args) +{ + const d_to_d zero_cases[] = { + { 0.0, 0.0 }, + { -0.0, -0.0 } + }; + return helper_dtod("Floor", SDL_floor, zero_cases, SDL_arraysize(zero_cases)); +} + +/** + * Input: NAN. + * Expected: NAN is returned. + */ +static int +floor_nanCase(void *args) +{ + const double result = SDL_floor(NAN); + SDLTest_AssertCheck(isnan(result), + "Floor(nan), expected nan, got %f", + result); + return TEST_COMPLETED; +} + +/** + * Inputs: integral values. + * Expected: the input value is returned as-is. + */ +static int +floor_roundNumbersCases(void *args) +{ + const d_to_d round_cases[] = { + { 1.0, 1.0 }, + { -1.0, -1.0 }, + { 15.0, 15.0 }, + { -15.0, -15.0 }, + { 125.0, 125.0 }, + { -125.0, -125.0 }, + { 1024.0, 1024.0 }, + { -1024.0, -1024.0 } + }; + return helper_dtod("Floor", SDL_floor, round_cases, SDL_arraysize(round_cases)); +} + +/** + * Inputs: fractional values. + * Expected: the lower integral value is returned. + */ +static int +floor_fractionCases(void *args) +{ + const d_to_d frac_cases[] = { + { 1.0 / 2.0, 0.0 }, + { -1.0 / 2.0, -1.0 }, + { 4.0 / 3.0, 1.0 }, + { -4.0 / 3.0, -2.0 }, + { 76.0 / 7.0, 10.0 }, + { -76.0 / 7.0, -11.0 }, + { 535.0 / 8.0, 66.0 }, + { -535.0 / 8.0, -67.0 }, + { 19357.0 / 53.0, 365.0 }, + { -19357.0 / 53.0, -366.0 } + }; + return helper_dtod("Floor", SDL_floor, frac_cases, SDL_arraysize(frac_cases)); +} + +/** + * Inputs: values in the range [0, UINT32_MAX]. + * Expected: the input value is returned as-is. + */ +static int +floor_rangeTest(void *args) +{ + return helper_range("Floor", SDL_floor); +} + +/* SDL_ceil tests functions */ + +/** + * Inputs: +/-Infinity. + * Expected: Infinity is returned as-is. + */ +static int +ceil_infCases(void *args) +{ + double result; + + result = SDL_ceil(INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Ceil(%f), expected %f, got %f", + INFINITY, INFINITY, result); + + result = SDL_ceil(-INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result < 0, + "Ceil(%f), expected %f, got %f", + -INFINITY, -INFINITY, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: +/-0.0. + * Expected: Zero is returned as-is. + */ +static int +ceil_zeroCases(void *args) +{ + const d_to_d zero_cases[] = { + { 0.0, 0.0 }, + { -0.0, -0.0 } + }; + return helper_dtod("Ceil", SDL_ceil, zero_cases, SDL_arraysize(zero_cases)); +} + +/** + * Input: NAN. + * Expected: NAN is returned. + */ +static int +ceil_nanCase(void *args) +{ + const double result = SDL_ceil(NAN); + SDLTest_AssertCheck(isnan(result), + "Ceil(nan), expected nan, got %f", + result); + return TEST_COMPLETED; +} + +/** + * Inputs: integral values. + * Expected: the input value is returned as-is. + */ +static int +ceil_roundNumbersCases(void *args) +{ + const d_to_d round_cases[] = { + { 1.0, 1.0 }, + { -1.0, -1.0 }, + { 15.0, 15.0 }, + { -15.0, -15.0 }, + { 125.0, 125.0 }, + { -125.0, -125.0 }, + { 1024.0, 1024.0 }, + { -1024.0, -1024.0 } + }; + return helper_dtod("Ceil", SDL_ceil, round_cases, SDL_arraysize(round_cases)); +} + +/** + * Inputs: fractional values. + * Expected: the higher integral value is returned. + */ +static int +ceil_fractionCases(void *args) +{ + const d_to_d frac_cases[] = { + { 1.0 / 2.0, 1.0 }, + { -1.0 / 2.0, -0.0 }, + { 4.0 / 3.0, 2.0 }, + { -4.0 / 3.0, -1.0 }, + { 76.0 / 7.0, 11.0 }, + { -76.0 / 7.0, -10.0 }, + { 535.0 / 8.0, 67.0 }, + { -535.0 / 8.0, -66.0 }, + { 19357.0 / 53.0, 366.0 }, + { -19357.0 / 53.0, -365.0 } + }; + return helper_dtod("Ceil", SDL_ceil, frac_cases, SDL_arraysize(frac_cases)); +} + +/** + * Inputs: values in the range [0, UINT32_MAX]. + * Expected: the input value is returned as-is. + */ +static int +ceil_rangeTest(void *args) +{ + return helper_range("Ceil", SDL_ceil); +} + +/* SDL_trunc tests functions */ + +/** + * Inputs: +/-Infinity. + * Expected: Infinity is returned as-is. + */ +static int +trunc_infCases(void *args) +{ + double result; + + result = SDL_trunc(INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Trunc(%f), expected %f, got %f", + INFINITY, INFINITY, result); + + result = SDL_trunc(-INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result < 0, + "Trunc(%f), expected %f, got %f", + -INFINITY, -INFINITY, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: +/-0.0. + * Expected: Zero is returned as-is. + */ +static int +trunc_zeroCases(void *args) +{ + const d_to_d zero_cases[] = { + { 0.0, 0.0 }, + { -0.0, -0.0 } + }; + return helper_dtod("Trunc", SDL_trunc, zero_cases, SDL_arraysize(zero_cases)); +} + +/** + * Input: NAN. + * Expected: NAN is returned. + */ +static int +trunc_nanCase(void *args) +{ + const double result = SDL_trunc(NAN); + SDLTest_AssertCheck(isnan(result), + "Trunc(nan), expected nan, got %f", + result); + return TEST_COMPLETED; +} + +/** + * Inputs: integral values. + * Expected: the input value is returned as-is. + */ +static int +trunc_roundNumbersCases(void *args) +{ + const d_to_d round_cases[] = { + { 1.0, 1.0 }, + { -1.0, -1.0 }, + { 15.0, 15.0 }, + { -15.0, -15.0 }, + { 125.0, 125.0 }, + { -125.0, -125.0 }, + { 1024.0, 1024.0 }, + { -1024.0, -1024.0 } + }; + return helper_dtod("Trunc", SDL_trunc, round_cases, SDL_arraysize(round_cases)); +} + +/** + * Inputs: fractional values. + * Expected: the integral part is returned. + */ +static int +trunc_fractionCases(void *args) +{ + const d_to_d frac_cases[] = { + { 1.0 / 2.0, 0.0 }, + { -1.0 / 2.0, -0.0 }, + { 4.0 / 3.0, 1.0 }, + { -4.0 / 3.0, -1.0 }, + { 76.0 / 7.0, 10.0 }, + { -76.0 / 7.0, -10.0 }, + { 535.0 / 8.0, 66.0 }, + { -535.0 / 8.0, -66.0 }, + { 19357.0 / 53.0, 365.0 }, + { -19357.0 / 53.0, -365.0 } + }; + return helper_dtod("Trunc", SDL_trunc, frac_cases, SDL_arraysize(frac_cases)); +} + +/** + * Inputs: values in the range [0, UINT32_MAX]. + * Expected: the input value is returned as-is. + */ +static int +trunc_rangeTest(void *args) +{ + return helper_range("Trunc", SDL_trunc); +} + +/* SDL_round tests functions */ + +/** + * Inputs: +/-Infinity. + * Expected: Infinity is returned as-is. + */ +static int +round_infCases(void *args) +{ + double result; + + result = SDL_round(INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Round(%f), expected %f, got %f", + INFINITY, INFINITY, result); + + result = SDL_round(-INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result < 0, + "Round(%f), expected %f, got %f", + -INFINITY, -INFINITY, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: +/-0.0. + * Expected: Zero is returned as-is. + */ +static int +round_zeroCases(void *args) +{ + const d_to_d zero_cases[] = { + { 0.0, 0.0 }, + { -0.0, -0.0 } + }; + return helper_dtod("Round", SDL_round, zero_cases, SDL_arraysize(zero_cases)); +} + +/** + * Input: NAN. + * Expected: NAN is returned. + */ +static int +round_nanCase(void *args) +{ + const double result = SDL_round(NAN); + SDLTest_AssertCheck(isnan(result), + "Round(nan), expected nan, got %f", + result); + return TEST_COMPLETED; +} + +/** + * Inputs: integral values. + * Expected: the input value is returned as-is. + */ +static int +round_roundNumbersCases(void *args) +{ + const d_to_d round_cases[] = { + { 1.0, 1.0 }, + { -1.0, -1.0 }, + { 15.0, 15.0 }, + { -15.0, -15.0 }, + { 125.0, 125.0 }, + { -125.0, -125.0 }, + { 1024.0, 1024.0 }, + { -1024.0, -1024.0 } + }; + return helper_dtod("Round", SDL_round, round_cases, SDL_arraysize(round_cases)); +} + +/** + * Inputs: fractional values. + * Expected: the nearest integral value is returned. + */ +static int +round_fractionCases(void *args) +{ + const d_to_d frac_cases[] = { + { 1.0 / 2.0, 1.0 }, + { -1.0 / 2.0, -1.0 }, + { 4.0 / 3.0, 1.0 }, + { -4.0 / 3.0, -1.0 }, + { 76.0 / 7.0, 11.0 }, + { -76.0 / 7.0, -11.0 }, + { 535.0 / 8.0, 67.0 }, + { -535.0 / 8.0, -67.0 }, + { 19357.0 / 53.0, 365.0 }, + { -19357.0 / 53.0, -365.0 } + }; + return helper_dtod("Round", SDL_round, frac_cases, SDL_arraysize(frac_cases)); +} + +/** + * Inputs: values in the range [0, UINT32_MAX]. + * Expected: the input value is returned as-is. + */ +static int +round_rangeTest(void *args) +{ + return helper_range("Round", SDL_round); +} + +/* SDL_fabs tests functions */ + +/** + * Inputs: +/-Infinity. + * Expected: Positive Infinity is returned. + */ +static int +fabs_infCases(void *args) +{ + double result; + + result = SDL_fabs(INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Fabs(%f), expected %f, got %f", + INFINITY, INFINITY, result); + + result = SDL_fabs(-INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Fabs(%f), expected %f, got %f", + -INFINITY, INFINITY, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: +/-0.0. + * Expected: Positive zero is returned. + */ +static int +fabs_zeroCases(void *args) +{ + const d_to_d zero_cases[] = { + { 0.0, 0.0 }, + { -0.0, 0.0 } + }; + return helper_dtod("Fabs", SDL_fabs, zero_cases, SDL_arraysize(zero_cases)); +} + +/** + * Input: NAN. + * Expected: NAN is returned. + */ +static int +fabs_nanCase(void *args) +{ + const double result = SDL_fabs(NAN); + SDLTest_AssertCheck(isnan(result), + "Fabs(nan), expected nan, got %f", + result); + return TEST_COMPLETED; +} + +/** + * Inputs: values in the range [0, UINT32_MAX]. + * Expected: the input value is returned as-is. + */ +static int +fabs_rangeTest(void *args) +{ + return helper_range("Fabs", SDL_fabs); +} + +/* SDL_copysign tests functions */ + +/** + * Inputs: (+/-Infinity, +/-1.0). + * Expected: Infinity with the sign of 1.0 is returned. + */ +static int +copysign_infCases(void *args) +{ + double result; + + result = SDL_copysign(INFINITY, -1.0); + SDLTest_AssertCheck(IS_INFINITY(result) && result < 0, + "Copysign(%f,%.1f), expected %f, got %f", + INFINITY, -1.0, -INFINITY, result); + + result = SDL_copysign(INFINITY, 1.0); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Copysign(%f,%.1f), expected %f, got %f", + INFINITY, 1.0, INFINITY, result); + + result = SDL_copysign(-INFINITY, -1.0); + SDLTest_AssertCheck(IS_INFINITY(result) && result < 0, + "Copysign(%f,%.1f), expected %f, got %f", + -INFINITY, -1.0, -INFINITY, result); + + result = SDL_copysign(-INFINITY, 1.0); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Copysign(%f,%.1f), expected %f, got %f", + -INFINITY, 1.0, INFINITY, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: (+/-0.0, +/-1.0). + * Expected: 0.0 with the sign of 1.0 is returned. + */ +static int +copysign_zeroCases(void *args) +{ + const dd_to_d zero_cases[] = { + { 0.0, 1.0, 0.0 }, + { 0.0, -1.0, -0.0 }, + { -0.0, 1.0, 0.0 }, + { -0.0, -1.0, -0.0 } + }; + return helper_ddtod("Copysign", SDL_copysign, zero_cases, SDL_arraysize(zero_cases)); +} + +/** + * Inputs: (NAN, +/-1.0). + * Expected: NAN with the sign of 1.0 is returned. + * NOTE: On some platforms signed NAN is not supported, so we only check if the result is still NAN. + */ +static int +copysign_nanCases(void *args) +{ + double result; + + result = SDL_copysign(NAN, 1.0); + SDLTest_AssertCheck(isnan(result), + "Copysign(nan,1.0), expected nan, got %f", + result); + + result = SDL_copysign(NAN, -1.0); + SDLTest_AssertCheck(isnan(result), + "Copysign(nan,-1.0), expected nan, got %f", + result); + return TEST_COMPLETED; +} + +/** + * Inputs: values in the range [0, UINT32_MAX], +/-1.0. + * Expected: the input value with the sign of 1.0 is returned. + */ +static int +copysign_rangeTest(void *args) +{ + Uint32 i; + double test_value = 0.0; + + SDLTest_AssertPass("Copysign: Testing a range of %u values with steps of %" SDL_PRIu32, + RANGE_TEST_ITERATIONS, + RANGE_TEST_STEP); + + for (i = 0; i < RANGE_TEST_ITERATIONS; i++, test_value += RANGE_TEST_STEP) { + double result; + /* These are tested elsewhere */ + if (isnan(test_value) || isinf(test_value)) { + continue; + } + + /* Only log failures to save performances */ + result = SDL_copysign(test_value, 1.0); + if (result != test_value) { + SDLTest_AssertCheck(SDL_FALSE, + "Copysign(%.1f,%.1f), expected %.1f, got %.1f", + test_value, 1.0, test_value, result); + return TEST_ABORTED; + } + + result = SDL_copysign(test_value, -1.0); + if (result != -test_value) { + SDLTest_AssertCheck(SDL_FALSE, + "Copysign(%.1f,%.1f), expected %.1f, got %.1f", + test_value, -1.0, -test_value, result); + return TEST_ABORTED; + } + } + return TEST_COMPLETED; +} + +/* SDL_fmod tests functions */ + +/** + * Inputs: (+/-Infinity, +/-1.0). + * Expected: NAN is returned. + */ +static int +fmod_divOfInfCases(void *args) +{ + double result; + + result = SDL_fmod(INFINITY, -1.0); + SDLTest_AssertCheck(isnan(result), + "Fmod(%f,%.1f), expected %f, got %f", + INFINITY, -1.0, NAN, result); + + result = SDL_fmod(INFINITY, 1.0); + SDLTest_AssertCheck(isnan(result), + "Fmod(%f,%.1f), expected %f, got %f", + INFINITY, 1.0, NAN, result); + + result = SDL_fmod(-INFINITY, -1.0); + SDLTest_AssertCheck(isnan(result), + "Fmod(%f,%.1f), expected %f, got %f", + -INFINITY, -1.0, NAN, result); + + result = SDL_fmod(-INFINITY, 1.0); + SDLTest_AssertCheck(isnan(result), + "Fmod(%f,%.1f), expected %f, got %f", + -INFINITY, 1.0, NAN, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: (+/-1.0, +/-Infinity). + * Expected: 1.0 is returned as-is. + */ +static int +fmod_divByInfCases(void *args) +{ + double result; + + result = SDL_fmod(1.0, INFINITY); + SDLTest_AssertCheck(1.0 == result, + "Fmod(%.1f,%f), expected %f, got %f", + 1.0, INFINITY, 1.0, result); + + result = SDL_fmod(-1.0, INFINITY); + SDLTest_AssertCheck(-1.0 == result, + "Fmod(%.1f,%f), expected %f, got %f", + -1.0, INFINITY, -1.0, result); + + result = SDL_fmod(1.0, -INFINITY); + SDLTest_AssertCheck(1.0 == result, + "Fmod(%.1f,%f), expected %f, got %f", + 1.0, -INFINITY, 1.0, result); + + result = SDL_fmod(-1.0, -INFINITY); + SDLTest_AssertCheck(-1.0 == result, + "Fmod(%.1f,%f), expected %f, got %f", + -1.0, -INFINITY, -1.0, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: (+/-0.0, +/-1.0). + * Expected: Zero is returned as-is. + */ +static int +fmod_divOfZeroCases(void *args) +{ + const dd_to_d zero_cases[] = { + { 0.0, 1.0, 0.0 }, + { 0.0, -1.0, 0.0 }, + { -0.0, 1.0, -0.0 }, + { -0.0, -1.0, -0.0 } + }; + return helper_ddtod("Fmod", SDL_fmod, zero_cases, SDL_arraysize(zero_cases)); +} + +/** + * Inputs: (+/-1.0, +/-0.0). + * Expected: NAN is returned. + */ +static int +fmod_divByZeroCases(void *args) +{ + double result; + + result = SDL_fmod(1.0, 0.0); + SDLTest_AssertCheck(isnan(result), + "Fmod(1.0,0.0), expected nan, got %f", + result); + + result = SDL_fmod(-1.0, 0.0); + SDLTest_AssertCheck(isnan(result), + "Fmod(-1.0,0.0), expected nan, got %f", + result); + + result = SDL_fmod(1.0, -0.0); + SDLTest_AssertCheck(isnan(result), + "Fmod(1.0,-0.0), expected nan, got %f", + result); + + result = SDL_fmod(-1.0, -0.0); + SDLTest_AssertCheck(isnan(result), + "Fmod(-1.0,-0.0), expected nan, got %f", + result); + + return TEST_COMPLETED; +} + +/** + * Inputs: all permutation of NAN and +/-1.0. + * Expected: NAN is returned. + */ +static int +fmod_nanCases(void *args) +{ + double result; + + result = SDL_fmod(NAN, 1.0); + SDLTest_AssertCheck(isnan(result), + "Fmod(nan,1.0), expected nan, got %f", + result); + + result = SDL_fmod(NAN, -1.0); + SDLTest_AssertCheck(isnan(result), + "Fmod(nan,-1.0), expected nan, got %f", + result); + + result = SDL_fmod(1.0, NAN); + SDLTest_AssertCheck(isnan(result), + "Fmod(1.0,nan), expected nan, got %f", + result); + + result = SDL_fmod(-1.0, NAN); + SDLTest_AssertCheck(isnan(result), + "Fmod(-1.0,nan), expected nan, got %f", + result); + + return TEST_COMPLETED; +} + +/** + * Inputs: values within the domain of the function. + * Expected: the correct result is returned. + */ +static int +fmod_regularCases(void *args) +{ + const dd_to_d regular_cases[] = { + { 3.5, 2.0, 1.5 }, + { -6.25, 3.0, -0.25 }, + { 7.5, 2.5, 0.0 }, + { 2.0 / 3.0, -1.0 / 3.0, 0.0 } + }; + return helper_ddtod("Fmod", SDL_fmod, regular_cases, SDL_arraysize(regular_cases)); +} + +/** + * Inputs: values in the range [0, UINT32_MAX] divided by 1.0. + * Expected: Positive zero is always returned. + */ +static int +fmod_rangeTest(void *args) +{ + Uint32 i; + double test_value = 0.0; + + SDLTest_AssertPass("Fmod: Testing a range of %u values with steps of %" SDL_PRIu32, + RANGE_TEST_ITERATIONS, + RANGE_TEST_STEP); + + for (i = 0; i < RANGE_TEST_ITERATIONS; i++, test_value += RANGE_TEST_STEP) { + double result; + /* These are tested elsewhere */ + if (isnan(test_value) || isinf(test_value)) { + continue; + } + + /* Only log failures to save performances */ + result = SDL_fmod(test_value, 1.0); + if (0.0 != result) { + SDLTest_AssertCheck(SDL_FALSE, + "Fmod(%.1f,%.1f), expected %.1f, got %.1f", + test_value, 1.0, 0.0, result); + return TEST_ABORTED; + } + } + return TEST_COMPLETED; +} + +/* SDL_exp tests functions */ + +/** + * Inputs: +/-Infinity. + * Expected: Infinity is returned as-is. + */ +static int +exp_infCases(void *args) +{ + double result; + + result = SDL_exp(INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Exp(%f), expected %f, got %f", + INFINITY, INFINITY, result); + + result = SDL_exp(-INFINITY); + SDLTest_AssertCheck(0.0 == result, + "Exp(%f), expected %f, got %f", + -INFINITY, 0.0, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: +/-0.0. + * Expected: 1.0 is returned. + */ +static int +exp_zeroCases(void *args) +{ + const d_to_d zero_cases[] = { + { 0.0, 1.0 }, + { -0.0, 1.0 } + }; + return helper_dtod("Exp", SDL_exp, zero_cases, SDL_arraysize(zero_cases)); +} + +/** + * Input: 710.0 (overflows for 64bits double). + * Expected: Infinity is returned. + * NOTE: This test is skipped for double types larger than 64 bits. + */ +static int +exp_overflowCase(void *args) +{ + double result; + + if (sizeof(double) > 8) { + return TEST_SKIPPED; + } + + result = SDL_exp(710.0); + SDLTest_AssertCheck(isinf(result), + "Exp(%f), expected %f, got %f", + 710.0, INFINITY, result); + return TEST_COMPLETED; +} + +/** + * Input: 1.0 + * Expected: The euler constant. + */ +static int +exp_baseCase(void *args) +{ + const double result = SDL_exp(1.0); + SDLTest_AssertCheck(result >= EULER - EPSILON && + result <= EULER + EPSILON, + "Exp(%f), expected [%f,%f], got %f", + 1.0, EULER - EPSILON, EULER + EPSILON, result); + return TEST_COMPLETED; +} + +/** + * Inputs: values within the domain of the function. + * Expected: the correct result is returned. + */ +static int +exp_regularCases(void *args) +{ + /* Hexadecimal floating constants are not supported on C89 compilers */ + const d_to_d regular_cases[] = { + { -101.0, 1.36853947117385291381565719268793547578002532127613087E-44 }, + { -15.73, 0.00000014741707833928422931856502906683425990763681 }, + { -1.0, 0.36787944117144233402427744294982403516769409179688 }, + { -0.5, 0.60653065971263342426311737654032185673713684082031 }, + { 0.5, 1.64872127070012819416433558217249810695648193359375 }, + { 2.25, 9.48773583635852624240669683786109089851379394531250 }, + { 34.125, 661148770968660.375 }, + { 112.89, 10653788283588960962604279261058893737879589093376.0 }, + { 539.483, 1970107755334319939701129934673541628417235942656909222826926175622435588279443011110464355295725187195188154768877850257012251677751742837992843520967922303961718983154427294786640886286983037548604937796221048661733679844353544028160.0 }, + }; + return helper_dtod("Exp", SDL_exp, regular_cases, SDL_arraysize(regular_cases)); +} + +/* SDL_log tests functions */ + +/** + * Inputs: Positive Infinity and +/-0.0. + * Expected: Positive and negative Infinity respectively. + */ +static int +log_limitCases(void *args) +{ + double result; + + result = SDL_log(INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Log(%f), expected %f, got %f", + INFINITY, INFINITY, result); + + result = SDL_log(0.0); + SDLTest_AssertCheck(IS_INFINITY(result) && result < 0, + "Log(%f), expected %f, got %f", + 0.0, -INFINITY, result); + + result = SDL_log(-0.0); + SDLTest_AssertCheck(IS_INFINITY(result) && result < 0, + "Log(%f), expected %f, got %f", + -0.0, -INFINITY, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: 1.0 and the Euler constant. + * Expected: 0.0 and 1.0 respectively. + */ +static int +log_baseCases(void *args) +{ + double result; + + result = SDL_log(1.0); + SDLTest_AssertCheck(0.0 == result, + "Log(%f), expected %f, got %f", + 1.0, 0.0, result); + + result = SDL_log(EULER); + SDLTest_AssertCheck((result - 1.) < FLT_EPSILON, + "Log(%f), expected %f, got %f", + EULER, 1.0, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: NAN and a negative value. + * Expected: NAN is returned. + */ +static int +log_nanCases(void *args) +{ + double result; + + result = SDL_log(NAN); + SDLTest_AssertCheck(isnan(result), + "Log(%f), expected %f, got %f", + NAN, NAN, result); + + result = SDL_log(-1234.5678); + SDLTest_AssertCheck(isnan(result), + "Log(%f), expected %f, got %f", + -1234.5678, NAN, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: values within the domain of the function. + * Expected: the correct result is returned. + */ +static int +log_regularCases(void *args) +{ + const d_to_d regular_cases[] = { + { 5.0, 1.60943791243410028179994242236716672778129577636718750 }, + { 10.0, 2.302585092994045901093613792909309267997741699218750 }, + { 56.32, 4.031049711849786554296315443934872746467590332031250 }, + { 789.123, 6.670922202231861497523368598194792866706848144531250 }, + { 2734.876324, 7.91384149408957959792587644187733530998229980468750 } + }; + return helper_dtod("Log", SDL_log, regular_cases, SDL_arraysize(regular_cases)); +} + +/* SDL_log10 tests functions */ + +/** + * Inputs: Positive Infinity and +/-0.0. + * Expected: Positive and negative Infinity respectively. + */ +static int +log10_limitCases(void *args) +{ + double result; + + result = SDL_log10(INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Log10(%f), expected %f, got %f", + INFINITY, INFINITY, result); + + result = SDL_log10(0.0); + SDLTest_AssertCheck(IS_INFINITY(result) && result < 0, + "Log10(%f), expected %f, got %f", + 0.0, -INFINITY, result); + + result = SDL_log10(-0.0); + SDLTest_AssertCheck(IS_INFINITY(result) && result < 0, + "Log10(%f), expected %f, got %f", + -0.0, -INFINITY, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: Powers of ten from 0 to 9. + * Expected: the exact power of ten is returned. + */ +static int +log10_baseCases(void *args) +{ + const d_to_d base_cases[] = { + { 1.0, 0.0 }, + { 10.0, 1.0 }, + { 100.0, 2.0 }, + { 1000.0, 3.0 }, + { 10000.0, 4.0 }, + { 100000.0, 5.0 }, + { 1000000.0, 6.0 }, + { 10000000.0, 7.0 }, + { 100000000.0, 8.0 }, + { 1000000000.0, 9.0 }, + }; + return helper_dtod("Log10", SDL_log10, base_cases, SDL_arraysize(base_cases)); +} + +/** + * Inputs: NAN and a negative value. + * Expected: NAN is returned. + */ +static int +log10_nanCases(void *args) +{ + double result; + + result = SDL_log10(NAN); + SDLTest_AssertCheck(isnan(result), + "Log10(%f), expected %f, got %f", + NAN, NAN, result); + + result = SDL_log10(-1234.5678); + SDLTest_AssertCheck(isnan(result), + "Log10(%f), expected %f, got %f", + -1234.5678, NAN, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: values within the domain of the function. + * Expected: the correct result is returned. + */ +static int +log10_regularCases(void *args) +{ + const d_to_d regular_cases[] = { + { 5.0, 0.698970004336018857493684208748163655400276184082031250 }, + { 12.5, 1.09691001300805646145875016372883692383766174316406250 }, + { 56.32, 1.750662646134055755453573510749265551567077636718750 }, + { 789.123, 2.8971447016351858927407647570362314581871032714843750 }, + { 2734.876324, 3.436937691540090433761633903486654162406921386718750 } + }; + return helper_dtod_inexact("Log10", SDL_log10, regular_cases, SDL_arraysize(regular_cases)); +} + +/* SDL_modf tests functions */ + +static int +modf_baseCases(void *args) +{ + double fractional, integral; + + fractional = SDL_modf(1.25, &integral); + SDLTest_AssertCheck(integral == 1.0, + "modf(%f), expected integral %f, got %f", + 1.25, 1.0, integral); + SDLTest_AssertCheck(fractional == 0.25, + "modf(%f), expected fractional %f, got %f", + 1.25, 0.25, fractional); + + return TEST_COMPLETED; +} + +/* SDL_pow tests functions */ + +/* Tests with positive and negative infinities as exponents */ + +/** + * Inputs: (-1.0, +/-Infinity). + * Expected: 1.0 is returned. + */ +static int +pow_baseNOneExpInfCases(void *args) +{ + double result; + + result = SDL_pow(-1.0, INFINITY); + SDLTest_AssertCheck(1.0 == result, + "Pow(%f,%f), expected %f, got %f", + -1.0, INFINITY, 1.0, result); + + result = SDL_pow(-1.0, -INFINITY); + SDLTest_AssertCheck(1.0 == result, + "Pow(%f,%f), expected %f, got %f", + -1.0, -INFINITY, 1.0, result); + + return TEST_COMPLETED; +} +/** + * Inputs: (+/-0.0, -Infinity). + * Expected: Infinity is returned. + */ +static int +pow_baseZeroExpNInfCases(void *args) +{ + double result; + + result = SDL_pow(0.0, -INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Pow(%f,%f), expected %f, got %f", + 0.0, -INFINITY, INFINITY, result); + + result = SDL_pow(-0.0, -INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Pow(%f,%f), expected %f, got %f", + -0.0, -INFINITY, INFINITY, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: (x, +/-Infinity) where x is not +/-0.0. + * Expected: 0.0 when x < 1, Infinity when x > 1. + */ +static int +pow_expInfCases(void *args) +{ + double result; + + result = SDL_pow(0.5, INFINITY); + SDLTest_AssertCheck(0.0 == result, + "Pow(%f,%f), expected %f, got %f", + 0.5, INFINITY, 0.0, result); + + result = SDL_pow(1.5, INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Pow(%f,%f), expected %f, got %f", + 1.5, INFINITY, INFINITY, result); + + result = SDL_pow(0.5, -INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Pow(%f,%f), expected %f, got %f", + 0.5, INFINITY, INFINITY, result); + + result = SDL_pow(1.5, -INFINITY); + SDLTest_AssertCheck(0.0 == result, + "Pow(%f,%f), expected %f, got %f", + 1.5, -INFINITY, 0.0, result); + + return TEST_COMPLETED; +} + +/* Tests with positive and negative infinities as base */ + +/** + * Inputs: (Positive Infinity, x) where x is not +/-0.0. + * Expected: 0.0 when x is < 0, positive Infinity when x > 0. + */ +static int +pow_basePInfCases(void *args) +{ + double result; + + result = SDL_pow(INFINITY, -3.0); + SDLTest_AssertCheck(0.0 == result, + "Pow(%f,%f), expected %f, got %f", + INFINITY, -3.0, 0.0, result); + + result = SDL_pow(INFINITY, 2.0); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Pow(%f,%f), expected %f, got %f", + INFINITY, 2.0, INFINITY, result); + + result = SDL_pow(INFINITY, -2.12345); + SDLTest_AssertCheck(0.0 == result, + "Pow(%f,%f), expected %f, got %f", + INFINITY, -2.12345, 0.0, result); + + result = SDL_pow(INFINITY, 3.1345); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Pow(%f,%f), expected %f, got %f", + INFINITY, 3.12345, INFINITY, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: (Negative Infinity, x) where x is not +/-0.0. + * Expected: + * - -0.0 when x is a negative odd integer, + * - 0.0 when x is a negative even integer or negative non-integer, + * - Negative Infinity when x is a positive odd integer, + * - Positive Infinity when x is a positive even integer or positive non-integer. + */ +static int +pow_baseNInfCases(void *args) +{ + double result; + + result = SDL_pow(-INFINITY, -3.0); + SDLTest_AssertCheck(-0.0 == result, + "Pow(%f,%f), expected %f, got %f", + -INFINITY, -3.0, -0.0, result); + + result = SDL_pow(-INFINITY, -2.0); + SDLTest_AssertCheck(0.0 == result, + "Pow(%f,%f), expected %f, got %f", + -INFINITY, -2.0, 0.0, result); + + result = SDL_pow(-INFINITY, -5.5); + SDLTest_AssertCheck(0.0 == result, + "Pow(%f,%f), expected %f, got %f", + -INFINITY, -5.5, 0.0, result); + + result = SDL_pow(-INFINITY, 3.0); + SDLTest_AssertCheck(IS_INFINITY(result) && result < 0, + "Pow(%f,%f), expected %f, got %f", + -INFINITY, 3.0, -INFINITY, result); + + result = SDL_pow(-INFINITY, 2.0); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Pow(%f,%f), expected %f, got %f", + -INFINITY, 2.0, INFINITY, result); + + result = SDL_pow(-INFINITY, 5.5); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Pow(%f,%f), expected %f, got %f", + -INFINITY, 5.5, INFINITY, result); + + return TEST_COMPLETED; +} + +/* Tests related to NAN */ + +/** + * Inputs: + * - finite and negative base, + * - finite and non-integer exponent. + * Expected: NAN is returned. + */ +static int +pow_badOperationCase(void *args) +{ + const double result = SDL_pow(-2.0, 4.2); + SDLTest_AssertCheck(isnan(result), + "Pow(%f,%f), expected %f, got %f", + -2.0, 4.2, NAN, result); + return TEST_COMPLETED; +} + +/** + * Inputs: (1.0, NAN) + * Expected: 1.0 is returned. + */ +static int +pow_base1ExpNanCase(void *args) +{ + const double result = SDL_pow(1.0, NAN); + SDLTest_AssertCheck(1.0 == result, + "Pow(%f,%f), expected %f, got %f", + 1.0, NAN, 1.0, result); + return TEST_COMPLETED; +} + +/** + * Inputs: (NAN, +/-0.0) + * Expected: 1.0 is returned. + */ +static int +pow_baseNanExp0Cases(void *args) +{ + double result; + + result = SDL_pow(NAN, 0.0); + SDLTest_AssertCheck(1.0 == result, + "Pow(%f,%f), expected %f, got %f", + NAN, 0.0, 1.0, result); + + result = SDL_pow(NAN, -0.0); + SDLTest_AssertCheck(1.0 == result, + "Pow(%f,%f), expected %f, got %f", + NAN, -0.0, 1.0, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: NAN as base, exponent or both. + * Expected: NAN is returned. + */ +static int +pow_nanArgsCases(void *args) +{ + double result; + + result = SDL_pow(7.8, NAN); + SDLTest_AssertCheck(isnan(result), + "Pow(%f,%f), expected %f, got %f", + 7.8, NAN, NAN, result); + + result = SDL_pow(NAN, 10.0); + SDLTest_AssertCheck(isnan(result), + "Pow(%f,%f), expected %f, got %f", + NAN, 10.0, NAN, result); + + result = SDL_pow(NAN, NAN); + SDLTest_AssertCheck(isnan(result), + "Pow(%f,%f), expected %f, got %f", + NAN, NAN, NAN, result); + + return TEST_COMPLETED; +} + +/* Tests with positive and negative zeros as base */ + +/** + * Inputs: (-0.0, x) where x is an odd integer. + * Expected: + * - Negative Infinity with a negative exponent, + * - -0.0 with a positive exponent. + */ +static int +pow_baseNZeroExpOddCases(void *args) +{ + double result; + + result = SDL_pow(-0.0, -3.0); + SDLTest_AssertCheck(IS_INFINITY(result) && result < 0, + "Pow(%f,%f), expected %f, got %f", + -0.0, -3.0, -INFINITY, result); + + result = SDL_pow(-0.0, 3.0); + SDLTest_AssertCheck(-0.0 == result, + "Pow(%f,%f), expected %f, got %f", + -0.0, 3.0, -0.0, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: (0.0, x) where x is an odd integer. + * Expected: + * - 0.0 with a positive exponent, + * - Positive Infinity with a negative exponent. + */ +static int +pow_basePZeroExpOddCases(void *args) +{ + double result; + + result = SDL_pow(0.0, -5.0); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Pow(%f,%f), expected %f, got %f", + 0.0, -5.0, INFINITY, result); + + result = SDL_pow(0.0, 5.0); + SDLTest_AssertCheck(0.0 == result, + "Pow(%f,%f), expected %f, got %f", + 0.0, 5.0, 0.0, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: (-0.0, x), with x either: + * - finite and even, + * - finite and non-integer. + * Expected: + * - Positive Infinity if the exponent is negative, + * - 0.0 if the exponent is positive. + */ +static int +pow_baseNZeroCases(void *args) +{ + double result; + + result = SDL_pow(-0.0, -3.5); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Pow(%f,%f), expected %f, got %f", + -0.0, -3.5, INFINITY, result); + + result = SDL_pow(-0.0, -4.0); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Pow(%f,%f), expected %f, got %f", + -0.0, -4.0, INFINITY, result); + + result = SDL_pow(-0.0, 3.5); + SDLTest_AssertCheck(0.0 == result, + "Pow(%f,%f), expected %f, got %f", + -0.0, 3.5, 0.0, result); + + result = SDL_pow(-0.0, 4.0); + SDLTest_AssertCheck(0.0 == result, + "Pow(%f,%f), expected %f, got %f", + -0.0, 4.0, 0.0, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: (0.0, x), with x either: + * - finite and even, + * - finite and non-integer. + * Expected: + * - Positive Infinity if the exponent is negative, + * - 0.0 if the exponent is positive. + */ +static int +pow_basePZeroCases(void *args) +{ + double result; + + result = SDL_pow(0.0, -3.5); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Pow(%f,%f), expected %f, got %f", + 0.0, -3.5, INFINITY, result); + + result = SDL_pow(0.0, -4.0); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Pow(%f,%f), expected %f, got %f", + 0.0, -4.0, INFINITY, result); + + result = SDL_pow(0.0, 3.5); + SDLTest_AssertCheck(0.0 == result, + "Pow(%f,%f), expected %f, got %f", + 0.0, 3.5, 0.0, result); + + result = SDL_pow(0.0, 4.0); + SDLTest_AssertCheck(0.0 == result, + "Pow(%f,%f), expected %f, got %f", + 0.0, 4.0, 0.0, result); + + return TEST_COMPLETED; +} + +/* Remaining tests */ + +/** + * Inputs: values within the domain of the function. + * Expected: the correct result is returned. + */ +static int +pow_regularCases(void *args) +{ + const dd_to_d regular_cases[] = { + { -391.25, -2.0, 0.00000653267870448815438463212659780943170062528224661946296691894531250 }, + { -72.3, 12.0, 20401381050275984310272.0 }, + { -5.0, 3.0, -125.0 }, + { 3.0, 2.5, 15.58845726811989607085706666111946105957031250 }, + { 39.23, -1.5, 0.0040697950366865498147972424192175822099670767784118652343750 }, + { 478.972, 12.125, 315326359630449587856007411793920.0 } + }; + return helper_ddtod("Pow", SDL_pow, regular_cases, SDL_arraysize(regular_cases)); +} + +/** + * Inputs: (2.0, x), with x in range [0, 8]. + * Expected: the correct result is returned. + */ +static int +pow_powerOfTwo(void *args) +{ + const dd_to_d power_of_two_cases[] = { + { 2.0, 1.0, 2.0 }, + { 2.0, 2.0, 4.0 }, + { 2.0, 3.0, 8.0 }, + { 2.0, 4.0, 16.0 }, + { 2.0, 5.0, 32.0 }, + { 2.0, 6.0, 64.0 }, + { 2.0, 7.0, 128.0 }, + { 2.0, 8.0, 256.0 }, + }; + return helper_ddtod("Pow", SDL_pow, power_of_two_cases, SDL_arraysize(power_of_two_cases)); +} + +/** + * Inputs: values in the range [0, UINT32_MAX] to the power of +/-0.0. + * Expected: 1.0 is always returned. + */ +static int +pow_rangeTest(void *args) +{ + Uint32 i; + double test_value = 0.0; + + SDLTest_AssertPass("Pow: Testing a range of %u values with steps of %" SDL_PRIu32, + RANGE_TEST_ITERATIONS, + RANGE_TEST_STEP); + + for (i = 0; i < RANGE_TEST_ITERATIONS; i++, test_value += RANGE_TEST_STEP) { + double result; + /* These are tested elsewhere */ + if (isnan(test_value) || isinf(test_value)) { + continue; + } + + /* Only log failures to save performances */ + result = SDL_pow(test_value, 0.0); + if (result != 1.0) { + SDLTest_AssertCheck(SDL_FALSE, + "Pow(%.1f,%.1f), expected %.1f, got %.1f", + test_value, 1.0, 1.0, result); + return TEST_ABORTED; + } + + result = SDL_pow(test_value, -0.0); + if (result != 1.0) { + SDLTest_AssertCheck(SDL_FALSE, + "Pow(%.1f,%.1f), expected %.1f, got %.1f", + test_value, -0.0, 1.0, result); + return TEST_ABORTED; + } + } + return TEST_COMPLETED; +} + +/* SDL_sqrt tests functions */ + +/** + * Input: Positive Infinity. + * Expected: Positive Infinity is returned. + */ +static int +sqrt_infCase(void *args) +{ + const double result = SDL_sqrt(INFINITY); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Sqrt(%f), expected %f, got %f", + INFINITY, INFINITY, result); + return TEST_COMPLETED; +} + +/** + * Input: NAN. + * Expected: NAN is returned. + */ +static int +sqrt_nanCase(void *args) +{ + const double result = SDL_sqrt(NAN); + SDLTest_AssertCheck(isnan(result), + "Sqrt(%f), expected %f, got %f", + NAN, NAN, result); + return TEST_COMPLETED; +} + +/** + * Inputs: values outside the domain of the function. + * Expected: NAN is returned. + */ +static int +sqrt_outOfDomainCases(void *args) +{ + double result; + + result = SDL_sqrt(-1.0); + SDLTest_AssertCheck(isnan(result), + "Sqrt(%f), expected %f, got %f", + -1.0, NAN, result); + + result = SDL_sqrt(-12345.6789); + SDLTest_AssertCheck(isnan(result), + "Sqrt(%f), expected %f, got %f", + -12345.6789, NAN, result); + + result = SDL_sqrt(-INFINITY); + SDLTest_AssertCheck(isnan(result), + "Sqrt(%f), expected %f, got %f", + -INFINITY, NAN, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: +/-0.0 and 1.0. + * Expected: the input value is returned as-is. + */ +static int +sqrt_baseCases(void *args) +{ + const d_to_d base_cases[] = { + { -0.0, -0.0 }, + { 0.0, 0.0 }, + { 1.0, 1.0 } + }; + return helper_dtod("Sqrt", SDL_sqrt, base_cases, SDL_arraysize(base_cases)); +} + +/** + * Inputs: values within the domain of the function. + * Expected: the correct result is returned. + */ +static int +sqrt_regularCases(void *args) +{ + const d_to_d regular_cases[] = { + { 4.0, 2.0 }, + { 9.0, 3.0 }, + { 27.2, 5.21536192416211896727418206864967942237854003906250 }, + { 240.250, 15.5 }, + { 1337.0, 36.565010597564445049556525191292166709899902343750 }, + { 2887.12782400000014604302123188972473144531250, 53.732 }, + { 65600.0156250, 256.125 } + }; + return helper_dtod_inexact("Sqrt", SDL_sqrt, regular_cases, SDL_arraysize(regular_cases)); +} + +/* SDL_scalbn tests functions */ + +/** + * Input: (+/-Infinity, 1). + * Expected: Infinity is returned as-is. + */ +static int +scalbn_infCases(void *args) +{ + double result; + + result = SDL_scalbn(INFINITY, 1); + SDLTest_AssertCheck(IS_INFINITY(result) && result > 0, + "Scalbn(%f,%d), expected %f, got %f", + INFINITY, 1, INFINITY, result); + + result = SDL_scalbn(-INFINITY, 1); + SDLTest_AssertCheck(IS_INFINITY(result) && result < 0, + "Scalbn(%f,%d), expected %f, got %f", + -INFINITY, 1, -INFINITY, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: (+/-0.0, 1). + * Expected: Zero is returned as-is. + */ +static int +scalbn_baseZeroCases(void *args) +{ + double result; + + result = SDL_scalbn(0.0, 1); + SDLTest_AssertCheck(0.0 == result, + "Scalbn(%f,%d), expected %f, got %f", + 0.0, 1, 0.0, result); + + result = SDL_scalbn(-0.0, 1); + SDLTest_AssertCheck(-0.0 == result, + "Scalbn(%f,%d), expected %f, got %f", + -0.0, 1, -0.0, result); + + return TEST_COMPLETED; +} + +/** + * Input: (x, 0) + * Expected: x is returned as-is. + */ +static int +scalbn_expZeroCase(void *args) +{ + const double result = SDL_scalbn(42.0, 0); + SDLTest_AssertCheck(42.0 == result, + "Scalbn(%f,%d), expected %f, got %f", + 42.0, 0, 42.0, result); + return TEST_COMPLETED; +} + +/** + * Input: (NAN, x). + * Expected: NAN is returned. + */ +static int +scalbn_nanCase(void *args) +{ + const double result = SDL_scalbn(NAN, 2); + SDLTest_AssertCheck(isnan(result), + "Scalbn(%f,%d), expected %f, got %f", + NAN, 2, NAN, result); + return TEST_COMPLETED; +} + +/** + * Inputs: values inside the domain of the function. + * Expected: the correct result is returned. + * NOTE: This test depends on SDL_pow and FLT_RADIX. + */ +static int +scalbn_regularCases(void *args) +{ + double result, expected; + + result = SDL_scalbn(2.0, 2); + expected = 2.0 * SDL_pow(FLT_RADIX, 2); + SDLTest_AssertCheck(result == expected, + "Scalbn(%f,%d), expected %f, got %f", + 2.0, 2, expected, result); + + result = SDL_scalbn(1.0, 13); + expected = 1.0 * SDL_pow(FLT_RADIX, 13); + SDLTest_AssertCheck(result == expected, + "Scalbn(%f,%d), expected %f, got %f", + 1.0, 13, expected, result); + + result = SDL_scalbn(2.0, -5); + expected = 2.0 * SDL_pow(FLT_RADIX, -5); + SDLTest_AssertCheck(result == expected, + "Scalbn(%f,%d), expected %f, got %f", + 2.0, -5, expected, result); + + result = SDL_scalbn(-1.0, -13); + expected = -1.0 * SDL_pow(FLT_RADIX, -13); + SDLTest_AssertCheck(result == expected, + "Scalbn(%f,%d), expected %f, got %f", + -1.0, -13, expected, result); + + return TEST_COMPLETED; +} + +/* SDL_cos tests functions */ + +/** + * Inputs: +/-Infinity. + * Expected: NAN is returned. + */ +static int +cos_infCases(void *args) +{ + double result; + + result = SDL_cos(INFINITY); + SDLTest_AssertCheck(isnan(result), + "Cos(%f), expected %f, got %f", + INFINITY, NAN, result); + + result = SDL_cos(-INFINITY); + SDLTest_AssertCheck(isnan(result), + "Cos(%f), expected %f, got %f", + -INFINITY, NAN, result); + + return TEST_COMPLETED; +} + +/** + * Input: NAN. + * Expected: NAN is returned. + */ +static int +cos_nanCase(void *args) +{ + const double result = SDL_cos(NAN); + SDLTest_AssertCheck(isnan(result), + "Cos(%f), expected %f, got %f", + NAN, NAN, result); + return TEST_COMPLETED; +} + +/** + * Inputs: +/-0.0 and +/-Pi. + * Expected: +1.0 and -1.0 respectively. + */ +static int +cos_regularCases(void *args) +{ + const d_to_d regular_cases[] = { + { -SDL_PI_D, -1.0 }, + { -0.0, 1.0 }, + { 0.0, 1.0 }, + { SDL_PI_D, -1.0 } + }; + return helper_dtod("Cos", SDL_cos, regular_cases, SDL_arraysize(regular_cases)); +} + +/** + * Inputs: Angles between 1/10 and 9/10 of Pi (positive and negative). + * Expected: The correct result is returned (+/-EPSILON). + */ +static int +cos_precisionTest(void *args) +{ + const d_to_d precision_cases[] = { + { SDL_PI_D * 1.0 / 10.0, 0.9510565162 }, + { SDL_PI_D * 2.0 / 10.0, 0.8090169943 }, + { SDL_PI_D * 3.0 / 10.0, 0.5877852522 }, + { SDL_PI_D * 4.0 / 10.0, 0.3090169943 }, + { SDL_PI_D * 5.0 / 10.0, 0.0 }, + { SDL_PI_D * 6.0 / 10.0, -0.3090169943 }, + { SDL_PI_D * 7.0 / 10.0, -0.5877852522 }, + { SDL_PI_D * 8.0 / 10.0, -0.8090169943 }, + { SDL_PI_D * 9.0 / 10.0, -0.9510565162 }, + { SDL_PI_D * -1.0 / 10.0, 0.9510565162 }, + { SDL_PI_D * -2.0 / 10.0, 0.8090169943 }, + { SDL_PI_D * -3.0 / 10.0, 0.5877852522 }, + { SDL_PI_D * -4.0 / 10.0, 0.3090169943 }, + { SDL_PI_D * -5.0 / 10.0, 0.0 }, + { SDL_PI_D * -6.0 / 10.0, -0.3090169943 }, + { SDL_PI_D * -7.0 / 10.0, -0.5877852522 }, + { SDL_PI_D * -8.0 / 10.0, -0.8090169943 }, + { SDL_PI_D * -9.0 / 10.0, -0.9510565162 } + }; + return helper_dtod_inexact("Cos", SDL_cos, precision_cases, SDL_arraysize(precision_cases)); +} + +/** + * Inputs: Values in the range [0, UINT32_MAX]. + * Expected: A value between 0 and 1 is returned. + */ +static int +cos_rangeTest(void *args) +{ + Uint32 i; + double test_value = 0.0; + + SDLTest_AssertPass("Cos: Testing a range of %u values with steps of %" SDL_PRIu32, + RANGE_TEST_ITERATIONS, + RANGE_TEST_STEP); + + for (i = 0; i < RANGE_TEST_ITERATIONS; i++, test_value += RANGE_TEST_STEP) { + double result; + /* These are tested elsewhere */ + if (isnan(test_value) || isinf(test_value)) { + continue; + } + + /* Only log failures to save performances */ + result = SDL_cos(test_value); + if (result < -1.0 || result > 1.0) { + SDLTest_AssertCheck(SDL_FALSE, + "Cos(%.1f), expected [%.1f,%.1f], got %.1f", + test_value, -1.0, 1.0, result); + return TEST_ABORTED; + } + } + return TEST_COMPLETED; +} + +/* SDL_sin tests functions */ + +/** + * Inputs: +/-Infinity. + * Expected: NAN is returned. + */ +static int +sin_infCases(void *args) +{ + double result; + + result = SDL_sin(INFINITY); + SDLTest_AssertCheck(isnan(result), + "Sin(%f), expected %f, got %f", + INFINITY, NAN, result); + + result = SDL_sin(-INFINITY); + SDLTest_AssertCheck(isnan(result), + "Sin(%f), expected %f, got %f", + -INFINITY, NAN, result); + + return TEST_COMPLETED; +} + +/** + * Input: NAN. + * Expected: NAN is returned. + */ +static int +sin_nanCase(void *args) +{ + const double result = SDL_sin(NAN); + SDLTest_AssertCheck(isnan(result), + "Sin(%f), expected %f, got %f", + NAN, NAN, result); + return TEST_COMPLETED; +} + +/** + * Inputs: +/-0.0 and +/-Pi/2. + * Expected: +/-0.0 and +/-1.0 respectively. + */ +static int +sin_regularCases(void *args) +{ + const d_to_d regular_cases[] = { + { -SDL_PI_D / 2, -1.0 }, + { -0.0, -0.0 }, + { 0.0, 0.0 }, + { SDL_PI_D / 2, 1.0 } + }; + return helper_dtod("Sin", SDL_sin, regular_cases, SDL_arraysize(regular_cases)); +} + +/** + * Inputs: Angles between 1/10 and 10/10 of Pi (positive and negative). + * Expected: The correct result is returned (+/-EPSILON). + * NOTE: +/-Pi/2 is tested in the regular cases. + */ +static int +sin_precisionTest(void *args) +{ + const d_to_d precision_cases[] = { + { SDL_PI_D * 1.0 / 10.0, 0.3090169943 }, + { SDL_PI_D * 2.0 / 10.0, 0.5877852522 }, + { SDL_PI_D * 3.0 / 10.0, 0.8090169943 }, + { SDL_PI_D * 4.0 / 10.0, 0.9510565162 }, + { SDL_PI_D * 6.0 / 10.0, 0.9510565162 }, + { SDL_PI_D * 7.0 / 10.0, 0.8090169943 }, + { SDL_PI_D * 8.0 / 10.0, 0.5877852522 }, + { SDL_PI_D * 9.0 / 10.0, 0.3090169943 }, + { SDL_PI_D, 0.0 }, + { SDL_PI_D * -1.0 / 10.0, -0.3090169943 }, + { SDL_PI_D * -2.0 / 10.0, -0.5877852522 }, + { SDL_PI_D * -3.0 / 10.0, -0.8090169943 }, + { SDL_PI_D * -4.0 / 10.0, -0.9510565162 }, + { SDL_PI_D * -6.0 / 10.0, -0.9510565162 }, + { SDL_PI_D * -7.0 / 10.0, -0.8090169943 }, + { SDL_PI_D * -8.0 / 10.0, -0.5877852522 }, + { SDL_PI_D * -9.0 / 10.0, -0.3090169943 }, + { -SDL_PI_D, 0.0 }, + }; + return helper_dtod_inexact("Sin", SDL_sin, precision_cases, SDL_arraysize(precision_cases)); +} + +/** + * Inputs: Values in the range [0, UINT32_MAX]. + * Expected: A value between 0 and 1 is returned. + */ +static int +sin_rangeTest(void *args) +{ + Uint32 i; + double test_value = 0.0; + + SDLTest_AssertPass("Sin: Testing a range of %u values with steps of %" SDL_PRIu32, + RANGE_TEST_ITERATIONS, + RANGE_TEST_STEP); + + for (i = 0; i < RANGE_TEST_ITERATIONS; i++, test_value += RANGE_TEST_STEP) { + double result; + /* These are tested elsewhere */ + if (isnan(test_value) || isinf(test_value)) { + continue; + } + + /* Only log failures to save performances */ + result = SDL_sin(test_value); + if (result < -1.0 || result > 1.0) { + SDLTest_AssertCheck(SDL_FALSE, + "Sin(%.1f), expected [%.1f,%.1f], got %.1f", + test_value, -1.0, 1.0, result); + return TEST_ABORTED; + } + } + return TEST_COMPLETED; +} + +/* SDL_tan tests functions */ + +/** + * Inputs: +/-Infinity. + * Expected: NAN is returned. + */ +static int +tan_infCases(void *args) +{ + double result; + + result = SDL_tan(INFINITY); + SDLTest_AssertCheck(isnan(result), + "Tan(%f), expected %f, got %f", + INFINITY, NAN, result); + + result = SDL_tan(-INFINITY); + SDLTest_AssertCheck(isnan(result), + "Tan(%f), expected %f, got %f", + -INFINITY, NAN, result); + + return TEST_COMPLETED; +} + +/** + * Input: NAN. + * Expected: NAN is returned. + */ +static int +tan_nanCase(void *args) +{ + const double result = SDL_tan(NAN); + SDLTest_AssertCheck(isnan(result), + "Tan(%f), expected %f, got %f", + NAN, NAN, result); + return TEST_COMPLETED; +} + +/** + * Inputs: +/-0.0. + * Expected: Zero is returned as-is. + */ +static int +tan_zeroCases(void *args) +{ + const d_to_d regular_cases[] = { + { -0.0, -0.0 }, + { 0.0, 0.0 } + }; + return helper_dtod("Tan", SDL_tan, regular_cases, SDL_arraysize(regular_cases)); +} + +/** + * Inputs: Angles between 1/11 and 10/11 of Pi (positive and negative). + * Expected: The correct result is returned (+/-EPSILON). + * NOTE: +/-Pi/2 is intentionally avoided as it returns garbage values. + */ +static int +tan_precisionTest(void *args) +{ + const d_to_d precision_cases[] = { + { SDL_PI_D * 1.0 / 11.0, 0.2936264929 }, + { SDL_PI_D * 2.0 / 11.0, 0.6426609771 }, + { SDL_PI_D * 3.0 / 11.0, 1.1540615205 }, + { SDL_PI_D * 4.0 / 11.0, 2.1896945629 }, + { SDL_PI_D * 5.0 / 11.0, 6.9551527717 }, + { SDL_PI_D * 6.0 / 11.0, -6.9551527717 }, + { SDL_PI_D * 7.0 / 11.0, -2.1896945629 }, + { SDL_PI_D * 8.0 / 11.0, -1.1540615205 }, + { SDL_PI_D * 9.0 / 11.0, -0.6426609771 }, + { SDL_PI_D * 10.0 / 11.0, -0.2936264929 }, + { SDL_PI_D * -1.0 / 11.0, -0.2936264929 }, + { SDL_PI_D * -2.0 / 11.0, -0.6426609771 }, + { SDL_PI_D * -3.0 / 11.0, -1.1540615205 }, + { SDL_PI_D * -4.0 / 11.0, -2.1896945629 }, + { SDL_PI_D * -5.0 / 11.0, -6.9551527717 }, + { SDL_PI_D * -6.0 / 11.0, 6.9551527717 }, + { SDL_PI_D * -7.0 / 11.0, 2.1896945629 }, + { SDL_PI_D * -8.0 / 11.0, 1.1540615205 }, + { SDL_PI_D * -9.0 / 11.0, 0.6426609771 }, + { SDL_PI_D * -10.0 / 11.0, 0.2936264929 } + }; + return helper_dtod_inexact("Tan", SDL_tan, precision_cases, SDL_arraysize(precision_cases)); +} + +/* SDL_acos tests functions */ + +/** + * Inputs: +/-1.0. + * Expected: 0.0 and Pi respectively. + */ +static int +acos_limitCases(void *args) +{ + double result; + + result = SDL_acos(1.0); + SDLTest_AssertCheck(0.0 == result, + "Acos(%f), expected %f, got %f", + 1.0, 0.0, result); + + result = SDL_acos(-1.0); + SDLTest_AssertCheck(SDL_fabs(SDL_PI_D - result) <= EPSILON, + "Acos(%f), expected %f, got %f", + -1.0, SDL_PI_D, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: Values outside the domain of [-1, 1]. + * Expected: NAN is returned. + */ +static int +acos_outOfDomainCases(void *args) +{ + double result; + + result = SDL_acos(1.1); + SDLTest_AssertCheck(isnan(result), + "Acos(%f), expected %f, got %f", + 1.1, NAN, result); + + result = SDL_acos(-1.1); + SDLTest_AssertCheck(isnan(result), + "Acos(%f), expected %f, got %f", + -1.1, NAN, result); + + return TEST_COMPLETED; +} + +/** + * Input: NAN. + * Expected: NAN is returned. + */ +static int +acos_nanCase(void *args) +{ + const double result = SDL_acos(NAN); + SDLTest_AssertCheck(isnan(result), + "Acos(%f), expected %f, got %f", + NAN, NAN, result); + return TEST_COMPLETED; +} + +/** + * Inputs: Values between -0.9 and 0.9 with steps of 0.1. + * Expected: The correct result is returned (+/-EPSILON). + */ +static int +acos_precisionTest(void *args) +{ + const d_to_d precision_cases[] = { + { 0.9, 0.4510268117 }, + { 0.8, 0.6435011087 }, + { 0.7, 0.7953988301 }, + { 0.6, 0.9272952180 }, + { 0.5, 1.0471975511 }, + { 0.4, 1.1592794807 }, + { 0.3, 1.2661036727 }, + { 0.2, 1.3694384060 }, + { 0.1, 1.4706289056 }, + { 0.0, 1.5707963267 }, + { -0.0, 1.5707963267 }, + { -0.1, 1.6709637479 }, + { -0.2, 1.7721542475 }, + { -0.3, 1.8754889808 }, + { -0.4, 1.9823131728 }, + { -0.5, 2.0943951023 }, + { -0.6, 2.2142974355 }, + { -0.7, 2.3461938234 }, + { -0.8, 2.4980915447 }, + { -0.9, 2.6905658417 }, + }; + return helper_dtod_inexact("Acos", SDL_acos, precision_cases, SDL_arraysize(precision_cases)); +} + +/* SDL_asin tests functions */ + +/** + * Inputs: +/-1.0. + * Expected: +/-Pi/2 is returned. + */ +static int +asin_limitCases(void *args) +{ + double result; + + result = SDL_asin(1.0); + SDLTest_AssertCheck(SDL_fabs(SDL_PI_D / 2.0 - result) <= EPSILON, + "Asin(%f), expected %f, got %f", + 1.0, SDL_PI_D / 2.0, result); + + result = SDL_asin(-1.0); + SDLTest_AssertCheck(SDL_fabs(-SDL_PI_D / 2.0 - result) <= EPSILON, + "Asin(%f), expected %f, got %f", + -1.0, -SDL_PI_D / 2.0, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: Values outside the domain of [-1, 1]. + * Expected: NAN is returned. + */ +static int +asin_outOfDomainCases(void *args) +{ + double result; + + result = SDL_asin(1.1); + SDLTest_AssertCheck(isnan(result), + "Asin(%f), expected %f, got %f", + 1.1, NAN, result); + + result = SDL_asin(-1.1); + SDLTest_AssertCheck(isnan(result), + "Asin(%f), expected %f, got %f", + -1.1, NAN, result); + + return TEST_COMPLETED; +} + +/** + * Input: NAN. + * Expected: NAN is returned. + */ +static int +asin_nanCase(void *args) +{ + const double result = SDL_asin(NAN); + SDLTest_AssertCheck(isnan(result), + "Asin(%f), expected %f, got %f", + NAN, NAN, result); + return TEST_COMPLETED; +} + +/** + * Inputs: Values between -0.9 and 0.9 with steps of 0.1. + * Expected: The correct result is returned (+/-EPSILON). + */ +static int +asin_precisionTest(void *args) +{ + const d_to_d precision_cases[] = { + { 0.9, 1.1197695149 }, + { 0.8, 0.9272952180 }, + { 0.7, 0.7753974966 }, + { 0.6, 0.6435011087 }, + { 0.5, 0.5235987755 }, + { 0.4, 0.4115168460 }, + { 0.3, 0.3046926540 }, + { 0.2, 0.2013579207 }, + { 0.1, 0.1001674211 }, + { 0.0, 0.0 }, + { -0.0, -0.0 }, + { -0.1, -0.1001674211 }, + { -0.2, -0.2013579207 }, + { -0.3, -0.3046926540 }, + { -0.4, -0.4115168460 }, + { -0.5, -0.5235987755 }, + { -0.6, -0.6435011087 }, + { -0.7, -0.7753974966 }, + { -0.8, -0.9272952180 }, + { -0.9, -1.1197695149 } + }; + return helper_dtod_inexact("Asin", SDL_asin, precision_cases, SDL_arraysize(precision_cases)); +} + +/* SDL_atan tests functions */ + +/** + * Inputs: +/-Infinity. + * Expected: +/-Pi/2 is returned. + */ +static int +atan_limitCases(void *args) +{ + double result; + + result = SDL_atan(INFINITY); + SDLTest_AssertCheck((SDL_PI_D / 2.0) - EPSILON <= result && + result <= (SDL_PI_D / 2.0) + EPSILON, + "Atan(%f), expected %f, got %f", + INFINITY, SDL_PI_D / 2.0, result); + + result = SDL_atan(-INFINITY); + SDLTest_AssertCheck((-SDL_PI_D / 2.0) - EPSILON <= result && + result <= (-SDL_PI_D / 2.0) + EPSILON, + "Atan(%f), expected %f, got %f", + -INFINITY, -SDL_PI_D / 2.0, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: +/-0.0. + * Expected: Zero is returned as-is. + */ +static int +atan_zeroCases(void *args) +{ + double result; + + result = SDL_atan(0.0); + SDLTest_AssertCheck(0.0 == result, + "Atan(%f), expected %f, got %f", + 0.0, 0.0, result); + + result = SDL_atan(-0.0); + SDLTest_AssertCheck(-0.0 == result, + "Atan(%f), expected %f, got %f", + -0.0, -0.0, result); + + return TEST_COMPLETED; +} + +/** + * Input: NAN. + * Expected: NAN is returned. + */ +static int +atan_nanCase(void *args) +{ + const double result = SDL_atan(NAN); + SDLTest_AssertCheck(isnan(result), + "Atan(%f), expected %f, got %f", + NAN, NAN, result); + return TEST_COMPLETED; +} + +/** + * Inputs: Values corresponding to angles between 9Pi/20 and -9Pi/20 with steps of Pi/20. + * Expected: The correct result is returned (+/-EPSILON). + */ +static int +atan_precisionTest(void *args) +{ + const d_to_d precision_cases[] = { + { 6.313751514675041, 1.4137166941 }, + { 3.0776835371752527, 1.2566370614 }, + { 1.9626105055051504, 1.0995574287 }, + { 1.3763819204711734, 0.9424777960 }, + { 1.0, 0.7853981633 }, + { 0.7265425280053609, 0.6283185307 }, + { 0.5095254494944288, 0.4712388980 }, + { 0.3249196962329063, 0.3141592653 }, + { 0.15838444032453627, 0.1570796326 }, + { -0.15838444032453627, -0.1570796326 }, + { -0.3249196962329063, -0.3141592653 }, + { -0.5095254494944288, -0.4712388980 }, + { -0.7265425280053609, -0.6283185307 }, + { -1.0, -0.7853981633 }, + { -1.3763819204711734, -0.9424777960 }, + { -1.9626105055051504, -1.0995574287 }, + { -3.0776835371752527, -1.2566370614 }, + { -6.313751514675041, -1.4137166941 }, + }; + return helper_dtod_inexact("Atan", SDL_atan, precision_cases, SDL_arraysize(precision_cases)); +} + +/* SDL_atan2 tests functions */ + +/* Zero cases */ + +/** + * Inputs: (+/-0.0, +/-0.0). + * Expected: + * - Zero if the second argument is positive zero. + * - Pi if the second argument is negative zero. + * - The sign is inherited from the first argument. + */ +static int +atan2_bothZeroCases(void *args) +{ + const dd_to_d cases[] = { + { 0.0, 0.0, 0.0 }, + { -0.0, 0.0, -0.0 }, + { 0.0, -0.0, SDL_PI_D }, + { -0.0, -0.0, -SDL_PI_D }, + }; + return helper_ddtod_inexact("SDL_atan2", SDL_atan2, cases, SDL_arraysize(cases)); +} + +/** + * Inputs: (+/-0.0, +/-1.0). + * Expected: + * - Zero if the second argument is positive. + * - Pi if the second argument is negative. + * - The sign is inherited from the first argument. + */ +static int +atan2_yZeroCases(void *args) +{ + const dd_to_d cases[] = { + { 0.0, 1.0, 0.0 }, + { 0.0, -1.0, SDL_PI_D }, + { -0.0, 1.0, -0.0 }, + { -0.0, -1.0, -SDL_PI_D } + }; + return helper_ddtod_inexact("SDL_atan2", SDL_atan2, cases, SDL_arraysize(cases)); +} + +/** + * Inputs: (+/-1.0, +/-0.0). + * Expected: Pi/2 with the sign of the first argument. + */ +static int +atan2_xZeroCases(void *args) +{ + const dd_to_d cases[] = { + { 1.0, 0.0, SDL_PI_D / 2.0 }, + { -1.0, 0.0, -SDL_PI_D / 2.0 }, + { 1.0, -0.0, SDL_PI_D / 2.0 }, + { -1.0, -0.0, -SDL_PI_D / 2.0 } + }; + return helper_ddtod_inexact("SDL_atan2", SDL_atan2, cases, SDL_arraysize(cases)); +} + +/* Infinity cases */ + +/** + * Inputs: (+/-Infinity, +/-Infinity). + * Expected: + * - (+int, +inf) -> Pi/4, + * - (+int, -inf) -> 3Pi/4, + * - (-int, +inf) -> -Pi/4, + * - (-int, -inf) -> Pi. + */ +static int +atan2_bothInfCases(void *args) +{ + double result; + + result = SDL_atan2(INFINITY, INFINITY); + SDLTest_AssertCheck(SDL_fabs(SDL_PI_D / 4.0 - result) <= EPSILON, + "Atan2(%f,%f), expected %f, got %f", + INFINITY, INFINITY, SDL_PI_D / 4.0, result); + + result = SDL_atan2(INFINITY, -INFINITY); + SDLTest_AssertCheck(SDL_fabs(3.0 * SDL_PI_D / 4.0 - result) <= EPSILON, + "Atan2(%f,%f), expected %f, got %f", + INFINITY, -INFINITY, 3.0 * SDL_PI_D / 4.0, result); + + result = SDL_atan2(-INFINITY, INFINITY); + SDLTest_AssertCheck(SDL_fabs(-SDL_PI_D / 4.0 - result) <= EPSILON, + "Atan2(%f,%f), expected %f, got %f", + -INFINITY, INFINITY, -SDL_PI_D / 4.0, result); + + result = SDL_atan2(-INFINITY, -INFINITY); + SDLTest_AssertCheck(SDL_fabs(-3.0 * SDL_PI_D / 4.0 - result) <= EPSILON, + "Atan2(%f,%f), expected %f, got %f", + -INFINITY, -INFINITY, -3.0 * SDL_PI_D / 4.0, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: (+/-Infinity, +/-1.0). + * Expected: Pi/2 with the sign of the first argument. + */ +static int +atan2_yInfCases(void *args) +{ + double result; + + result = SDL_atan2(INFINITY, 1.0); + SDLTest_AssertCheck(SDL_fabs(SDL_PI_D / 2.0 - result) <= EPSILON, + "Atan2(%f,%f), expected %f, got %f", + INFINITY, 1.0, SDL_PI_D / 2.0, result); + + result = SDL_atan2(INFINITY, -1.0); + SDLTest_AssertCheck(SDL_fabs(SDL_PI_D / 2.0 - result) <= EPSILON, + "Atan2(%f,%f), expected %f, got %f", + INFINITY, -1.0, SDL_PI_D / 2.0, result); + + result = SDL_atan2(-INFINITY, 1.0); + SDLTest_AssertCheck(SDL_fabs(-SDL_PI_D / 2.0 - result) <= EPSILON, + "Atan2(%f,%f), expected %f, got %f", + -INFINITY, 1.0, -SDL_PI_D / 2.0, result); + + result = SDL_atan2(-INFINITY, -1.0); + SDLTest_AssertCheck(SDL_fabs(-SDL_PI_D / 2.0 - result) <= EPSILON, + "Atan2(%f,%f), expected %f, got %f", + -INFINITY, -1.0, -SDL_PI_D / 2.0, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: (+/-1.0, +/-Infinity). + * Expected: + * - (+/-1.0, +inf) -> +/-0.0 + * - (+/-1.0, -inf) -> +/-Pi. + */ +static int +atan2_xInfCases(void *args) +{ + double result; + + result = SDL_atan2(1.0, INFINITY); + SDLTest_AssertCheck(0.0 == result, + "Atan2(%f,%f), expected %f, got %f", + 1.0, INFINITY, 0.0, result); + + result = SDL_atan2(-1.0, INFINITY); + SDLTest_AssertCheck(-0.0 == result, + "Atan2(%f,%f), expected %f, got %f", + -1.0, INFINITY, -0.0, result); + + result = SDL_atan2(1.0, -INFINITY); + SDLTest_AssertCheck(SDL_fabs(SDL_PI_D - result) <= EPSILON, + "Atan2(%f,%f), expected %f, got %f", + 1.0, -INFINITY, SDL_PI_D, result); + + result = SDL_atan2(-1.0, -INFINITY); + SDLTest_AssertCheck(SDL_fabs(-SDL_PI_D - result) <= EPSILON, + "Atan2(%f,%f), expected %f, got %f", + -1.0, -INFINITY, -SDL_PI_D, result); + + return TEST_COMPLETED; +} + +/* Miscelanious cases */ + +/** + * Inputs: NAN as either or both of the arguments. + * Expected: NAN is returned. + */ +static int +atan2_nanCases(void *args) +{ + double result; + + result = SDL_atan2(NAN, NAN); + SDLTest_AssertCheck(isnan(result), + "Atan2(%f,%f), expected %f, got %f", + NAN, NAN, NAN, result); + + result = SDL_atan2(NAN, 1.0); + SDLTest_AssertCheck(isnan(result), + "Atan2(%f,%f), expected %f, got %f", + NAN, 1.0, NAN, result); + + result = SDL_atan2(1.0, NAN); + SDLTest_AssertCheck(isnan(result), + "Atan2(%f,%f), expected %f, got %f", + 1.0, NAN, NAN, result); + + return TEST_COMPLETED; +} + +/** + * Inputs: (y, x) with x and y positive. + * Expected: Angle in the top right quadrant. + */ +static int +atan2_topRightQuadrantTest(void *args) +{ + const dd_to_d top_right_cases[] = { + { 1.0, 1.0, SDL_PI_D / 4.0 }, + { SQRT3, 3.0, SDL_PI_D / 6.0 }, + { SQRT3, 1.0, SDL_PI_D / 3.0 } + }; + return helper_ddtod_inexact("SDL_atan2", SDL_atan2, top_right_cases, SDL_arraysize(top_right_cases)); +} + +/** + * Inputs: (y, x) with x negative and y positive. + * Expected: Angle in the top left quadrant. + */ +static int +atan2_topLeftQuadrantTest(void *args) +{ + const dd_to_d top_left_cases[] = { + { 1.0, -1.0, 3.0 * SDL_PI_D / 4.0 }, + { SQRT3, -3.0, 5.0 * SDL_PI_D / 6.0 }, + { SQRT3, -1.0, 2.0 * SDL_PI_D / 3.0 } + }; + return helper_ddtod_inexact("SDL_atan2", SDL_atan2, top_left_cases, SDL_arraysize(top_left_cases)); +} + +/** + * Inputs: (y, x) with x positive and y negative. + * Expected: Angle in the bottom right quadrant. + */ +static int +atan2_bottomRightQuadrantTest(void *args) +{ + const dd_to_d bottom_right_cases[] = { + { -1.0, 1.0, -SDL_PI_D / 4 }, + { -SQRT3, 3.0, -SDL_PI_D / 6.0 }, + { -SQRT3, 1.0, -SDL_PI_D / 3.0 } + }; + return helper_ddtod_inexact("SDL_atan2", SDL_atan2, bottom_right_cases, SDL_arraysize(bottom_right_cases)); +} + +/** + * Inputs: (y, x) with x and y negative. + * Expected: Angle in the bottom left quadrant. + */ +static int +atan2_bottomLeftQuadrantTest(void *args) +{ + const dd_to_d bottom_left_cases[] = { + { -1.0, -1.0, -3.0 * SDL_PI_D / 4.0 }, + { -SQRT3, -3.0, -5.0 * SDL_PI_D / 6.0 }, + { -SQRT3, -1.0, -4.0 * SDL_PI_D / 6.0 } + }; + return helper_ddtod_inexact("SDL_atan2", SDL_atan2, bottom_left_cases, SDL_arraysize(bottom_left_cases)); +} + +/* ================= Test References ================== */ + +/* SDL_floor test cases */ + +static const SDLTest_TestCaseReference floorTestInf = { + (SDLTest_TestCaseFp)floor_infCases, "floor_infCases", + "Checks positive and negative infinity", TEST_ENABLED +}; +static const SDLTest_TestCaseReference floorTestZero = { + (SDLTest_TestCaseFp)floor_zeroCases, "floor_zeroCases", + "Checks positive and negative zero", TEST_ENABLED +}; +static const SDLTest_TestCaseReference floorTestNan = { + (SDLTest_TestCaseFp)floor_nanCase, "floor_nanCase", + "Checks NAN", TEST_ENABLED +}; +static const SDLTest_TestCaseReference floorTestRound = { + (SDLTest_TestCaseFp)floor_roundNumbersCases, "floor_roundNumberCases", + "Checks a set of integral values", TEST_ENABLED +}; +static const SDLTest_TestCaseReference floorTestFraction = { + (SDLTest_TestCaseFp)floor_fractionCases, "floor_fractionCases", + "Checks a set of fractions", TEST_ENABLED +}; +static const SDLTest_TestCaseReference floorTestRange = { + (SDLTest_TestCaseFp)floor_rangeTest, "floor_rangeTest", + "Checks a range of positive integer", TEST_ENABLED +}; + +/* SDL_ceil test cases */ + +static const SDLTest_TestCaseReference ceilTestInf = { + (SDLTest_TestCaseFp)ceil_infCases, "ceil_infCases", + "Checks positive and negative infinity", TEST_ENABLED +}; +static const SDLTest_TestCaseReference ceilTestZero = { + (SDLTest_TestCaseFp)ceil_zeroCases, "ceil_zeroCases", + "Checks positive and negative zero", TEST_ENABLED +}; +static const SDLTest_TestCaseReference ceilTestNan = { + (SDLTest_TestCaseFp)ceil_nanCase, "ceil_nanCase", + "Checks NAN", TEST_ENABLED +}; +static const SDLTest_TestCaseReference ceilTestRound = { + (SDLTest_TestCaseFp)ceil_roundNumbersCases, "ceil_roundNumberCases", + "Checks a set of integral values", TEST_ENABLED +}; +static const SDLTest_TestCaseReference ceilTestFraction = { + (SDLTest_TestCaseFp)ceil_fractionCases, "ceil_fractionCases", + "Checks a set of fractions", TEST_ENABLED +}; +static const SDLTest_TestCaseReference ceilTestRange = { + (SDLTest_TestCaseFp)ceil_rangeTest, "ceil_rangeTest", + "Checks a range of positive integer", TEST_ENABLED +}; + +/* SDL_trunc test cases */ + +static const SDLTest_TestCaseReference truncTestInf = { + (SDLTest_TestCaseFp)trunc_infCases, "trunc_infCases", + "Checks positive and negative infinity", TEST_ENABLED +}; +static const SDLTest_TestCaseReference truncTestZero = { + (SDLTest_TestCaseFp)trunc_zeroCases, "trunc_zeroCases", + "Checks positive and negative zero", TEST_ENABLED +}; +static const SDLTest_TestCaseReference truncTestNan = { + (SDLTest_TestCaseFp)trunc_nanCase, "trunc_nanCase", + "Checks NAN", TEST_ENABLED +}; +static const SDLTest_TestCaseReference truncTestRound = { + (SDLTest_TestCaseFp)trunc_roundNumbersCases, "trunc_roundNumberCases", + "Checks a set of integral values", TEST_ENABLED +}; +static const SDLTest_TestCaseReference truncTestFraction = { + (SDLTest_TestCaseFp)trunc_fractionCases, "trunc_fractionCases", + "Checks a set of fractions", TEST_ENABLED +}; +static const SDLTest_TestCaseReference truncTestRange = { + (SDLTest_TestCaseFp)trunc_rangeTest, "trunc_rangeTest", + "Checks a range of positive integer", TEST_ENABLED +}; + +/* SDL_round test cases */ + +static const SDLTest_TestCaseReference roundTestInf = { + (SDLTest_TestCaseFp)round_infCases, "round_infCases", + "Checks positive and negative infinity", TEST_ENABLED +}; +static const SDLTest_TestCaseReference roundTestZero = { + (SDLTest_TestCaseFp)round_zeroCases, "round_zeroCases", + "Checks positive and negative zero", TEST_ENABLED +}; +static const SDLTest_TestCaseReference roundTestNan = { + (SDLTest_TestCaseFp)round_nanCase, "round_nanCase", + "Checks NAN", TEST_ENABLED +}; +static const SDLTest_TestCaseReference roundTestRound = { + (SDLTest_TestCaseFp)round_roundNumbersCases, "round_roundNumberCases", + "Checks a set of integral values", TEST_ENABLED +}; +static const SDLTest_TestCaseReference roundTestFraction = { + (SDLTest_TestCaseFp)round_fractionCases, "round_fractionCases", + "Checks a set of fractions", TEST_ENABLED +}; +static const SDLTest_TestCaseReference roundTestRange = { + (SDLTest_TestCaseFp)round_rangeTest, "round_rangeTest", + "Checks a range of positive integer", TEST_ENABLED +}; + +/* SDL_fabs test cases */ + +static const SDLTest_TestCaseReference fabsTestInf = { + (SDLTest_TestCaseFp)fabs_infCases, "fabs_infCases", + "Checks positive and negative infinity", TEST_ENABLED +}; +static const SDLTest_TestCaseReference fabsTestZero = { + (SDLTest_TestCaseFp)fabs_zeroCases, "fabs_zeroCases", + "Checks positive and negative zero", TEST_ENABLED +}; +static const SDLTest_TestCaseReference fabsTestNan = { + (SDLTest_TestCaseFp)fabs_nanCase, "fabs_nanCase", + "Checks NAN", TEST_ENABLED +}; +static const SDLTest_TestCaseReference fabsTestRange = { + (SDLTest_TestCaseFp)fabs_rangeTest, "fabs_rangeTest", + "Checks a range of positive integer", TEST_ENABLED +}; + +/* SDL_copysign test cases */ + +static const SDLTest_TestCaseReference copysignTestInf = { + (SDLTest_TestCaseFp)copysign_infCases, "copysign_infCases", + "Checks positive and negative infinity", TEST_ENABLED +}; +static const SDLTest_TestCaseReference copysignTestZero = { + (SDLTest_TestCaseFp)copysign_zeroCases, "copysign_zeroCases", + "Checks positive and negative zero", TEST_ENABLED +}; +static const SDLTest_TestCaseReference copysignTestNan = { + (SDLTest_TestCaseFp)copysign_nanCases, "copysign_nanCases", + "Checks NANs", TEST_ENABLED +}; +static const SDLTest_TestCaseReference copysignTestRange = { + (SDLTest_TestCaseFp)copysign_rangeTest, "copysign_rangeTest", + "Checks a range of positive integer", TEST_ENABLED +}; + +/* SDL_fmod test cases */ + +static const SDLTest_TestCaseReference fmodTestDivOfInf = { + (SDLTest_TestCaseFp)fmod_divOfInfCases, "fmod_divOfInfCases", + "Checks division of positive and negative infinity", TEST_ENABLED +}; +static const SDLTest_TestCaseReference fmodTestDivByInf = { + (SDLTest_TestCaseFp)fmod_divByInfCases, "fmod_divByInfCases", + "Checks division by positive and negative infinity", TEST_ENABLED +}; +static const SDLTest_TestCaseReference fmodTestDivOfZero = { + (SDLTest_TestCaseFp)fmod_divOfZeroCases, "fmod_divOfZeroCases", + "Checks division of positive and negative zero", TEST_ENABLED +}; +static const SDLTest_TestCaseReference fmodTestDivByZero = { + (SDLTest_TestCaseFp)fmod_divByZeroCases, "fmod_divByZeroCases", + "Checks division by positive and negative zero", TEST_ENABLED +}; +static const SDLTest_TestCaseReference fmodTestNan = { + (SDLTest_TestCaseFp)fmod_nanCases, "fmod_nanCases", + "Checks NANs", TEST_ENABLED +}; +static const SDLTest_TestCaseReference fmodTestRegular = { + (SDLTest_TestCaseFp)fmod_regularCases, "fmod_regularCases", + "Checks a set of regular values", TEST_ENABLED +}; +static const SDLTest_TestCaseReference fmodTestRange = { + (SDLTest_TestCaseFp)fmod_rangeTest, "fmod_rangeTest", + "Checks a range of positive integer", TEST_ENABLED +}; + +/* SDL_exp test cases */ + +static const SDLTest_TestCaseReference expTestInf = { + (SDLTest_TestCaseFp)exp_infCases, "exp_infCases", + "Checks positive and negative infinity", TEST_ENABLED +}; +static const SDLTest_TestCaseReference expTestZero = { + (SDLTest_TestCaseFp)exp_zeroCases, "exp_zeroCases", + "Checks for positive and negative zero", TEST_ENABLED +}; +static const SDLTest_TestCaseReference expTestOverflow = { + (SDLTest_TestCaseFp)exp_overflowCase, "exp_overflowCase", + "Checks for overflow", TEST_ENABLED +}; +static const SDLTest_TestCaseReference expTestBase = { + (SDLTest_TestCaseFp)exp_baseCase, "exp_baseCase", + "Checks the base case", TEST_ENABLED +}; +static const SDLTest_TestCaseReference expTestRegular = { + (SDLTest_TestCaseFp)exp_regularCases, "exp_regularCases", + "Checks a set of regular values", TEST_ENABLED +}; + +/* SDL_log test cases */ + +static const SDLTest_TestCaseReference logTestLimit = { + (SDLTest_TestCaseFp)log_limitCases, "log_limitCases", + "Checks the domain limits", TEST_ENABLED +}; +static const SDLTest_TestCaseReference logTestNan = { + (SDLTest_TestCaseFp)log_nanCases, "log_nanCases", + "Checks NAN and negative values", TEST_ENABLED +}; +static const SDLTest_TestCaseReference logTestBase = { + (SDLTest_TestCaseFp)log_baseCases, "log_baseCases", + "Checks the base cases", TEST_ENABLED +}; +static const SDLTest_TestCaseReference logTestRegular = { + (SDLTest_TestCaseFp)log_regularCases, "log_regularCases", + "Checks a set of regular values", TEST_ENABLED +}; + +/* SDL_log10 test cases */ + +static const SDLTest_TestCaseReference log10TestLimit = { + (SDLTest_TestCaseFp)log10_limitCases, "log10_limitCases", + "Checks the domain limits", TEST_ENABLED +}; +static const SDLTest_TestCaseReference log10TestNan = { + (SDLTest_TestCaseFp)log10_nanCases, "log10_nanCases", + "Checks NAN and negative values", TEST_ENABLED +}; +static const SDLTest_TestCaseReference log10TestBase = { + (SDLTest_TestCaseFp)log10_baseCases, "log10_baseCases", + "Checks the base cases", TEST_ENABLED +}; +static const SDLTest_TestCaseReference log10TestRegular = { + (SDLTest_TestCaseFp)log10_regularCases, "log10_regularCases", + "Checks a set of regular values", TEST_ENABLED +}; + +/* SDL_modf test cases */ + +static const SDLTest_TestCaseReference modfTestBase = { + (SDLTest_TestCaseFp)modf_baseCases, "modf_baseCases", + "Checks the base cases", TEST_ENABLED +}; + +/* SDL_pow test cases */ + +static const SDLTest_TestCaseReference powTestExpInf1 = { + (SDLTest_TestCaseFp)pow_baseNOneExpInfCases, "pow_baseNOneExpInfCases", + "Checks for pow(-1, +/-inf)", TEST_ENABLED +}; +static const SDLTest_TestCaseReference powTestExpInf2 = { + (SDLTest_TestCaseFp)pow_baseZeroExpNInfCases, "pow_baseZeroExpNInfCases", + "Checks for pow(+/-0, -inf)", TEST_ENABLED +}; +static const SDLTest_TestCaseReference powTestExpInf3 = { + (SDLTest_TestCaseFp)pow_expInfCases, "pow_expInfCases", + "Checks for pow(x, +/-inf)", TEST_ENABLED +}; +static const SDLTest_TestCaseReference powTestBaseInf1 = { + (SDLTest_TestCaseFp)pow_basePInfCases, "pow_basePInfCases", + "Checks for pow(inf, x)", TEST_ENABLED +}; +static const SDLTest_TestCaseReference powTestBaseInf2 = { + (SDLTest_TestCaseFp)pow_baseNInfCases, "pow_baseNInfCases", + "Checks for pow(-inf, x)", TEST_ENABLED +}; +static const SDLTest_TestCaseReference powTestNan1 = { + (SDLTest_TestCaseFp)pow_badOperationCase, "pow_badOperationCase", + "Checks for negative finite base and non-integer finite exponent", TEST_ENABLED +}; +static const SDLTest_TestCaseReference powTestNan2 = { + (SDLTest_TestCaseFp)pow_base1ExpNanCase, "pow_base1ExpNanCase", + "Checks for pow(1.0, NAN)", TEST_ENABLED +}; +static const SDLTest_TestCaseReference powTestNan3 = { + (SDLTest_TestCaseFp)pow_baseNanExp0Cases, "pow_baseNanExp0Cases", + "Checks for pow(NAN, +/-0)", TEST_ENABLED +}; +static const SDLTest_TestCaseReference powTestNan4 = { + (SDLTest_TestCaseFp)pow_nanArgsCases, "pow_nanArgsCases", + "Checks for pow(x, y) with either x or y being NAN", TEST_ENABLED +}; +static const SDLTest_TestCaseReference powTestZero1 = { + (SDLTest_TestCaseFp)pow_baseNZeroExpOddCases, "pow_baseNZeroExpOddCases", + "Checks for pow(-0.0, y), with y an odd integer.", TEST_ENABLED +}; +static const SDLTest_TestCaseReference powTestZero2 = { + (SDLTest_TestCaseFp)pow_basePZeroExpOddCases, "pow_basePZeroExpOddCases", + "Checks for pow(0.0, y), with y an odd integer.", TEST_ENABLED +}; +static const SDLTest_TestCaseReference powTestZero3 = { + (SDLTest_TestCaseFp)pow_baseNZeroCases, "pow_baseNZeroCases", + "Checks for pow(-0.0, y), with y finite and even or non-integer number", TEST_ENABLED +}; +static const SDLTest_TestCaseReference powTestZero4 = { + (SDLTest_TestCaseFp)pow_basePZeroCases, "pow_basePZeroCases", + "Checks for pow(0.0, y), with y finite and even or non-integer number", TEST_ENABLED +}; +static const SDLTest_TestCaseReference powTestRegular = { + (SDLTest_TestCaseFp)pow_regularCases, "pow_regularCases", + "Checks a set of regular values", TEST_ENABLED +}; +static const SDLTest_TestCaseReference powTestPowOf2 = { + (SDLTest_TestCaseFp)pow_powerOfTwo, "pow_powerOfTwo", + "Checks the powers of two from 1 to 8", TEST_ENABLED +}; +static const SDLTest_TestCaseReference powTestRange = { + (SDLTest_TestCaseFp)pow_rangeTest, "pow_rangeTest", + "Checks a range of positive integer to the power of 0", TEST_ENABLED +}; + +/* SDL_sqrt test cases */ + +static const SDLTest_TestCaseReference sqrtTestInf = { + (SDLTest_TestCaseFp)sqrt_infCase, "sqrt_infCase", + "Checks positive infinity", TEST_ENABLED +}; +static const SDLTest_TestCaseReference sqrtTestNan = { + (SDLTest_TestCaseFp)sqrt_nanCase, "sqrt_nanCase", + "Checks NAN", TEST_ENABLED +}; +static const SDLTest_TestCaseReference sqrtTestDomain = { + (SDLTest_TestCaseFp)sqrt_outOfDomainCases, "sqrt_outOfDomainCases", + "Checks for values out of the domain", TEST_ENABLED +}; +static const SDLTest_TestCaseReference sqrtTestBase = { + (SDLTest_TestCaseFp)sqrt_baseCases, "sqrt_baseCases", + "Checks the base cases", TEST_ENABLED +}; +static const SDLTest_TestCaseReference sqrtTestRegular = { + (SDLTest_TestCaseFp)sqrt_regularCases, "sqrt_regularCases", + "Checks a set of regular values", TEST_ENABLED +}; + +/* SDL_scalbn test cases */ + +static const SDLTest_TestCaseReference scalbnTestInf = { + (SDLTest_TestCaseFp)scalbn_infCases, "scalbn_infCases", + "Checks positive and negative infinity arg", TEST_ENABLED +}; +static const SDLTest_TestCaseReference scalbnTestBaseZero = { + (SDLTest_TestCaseFp)scalbn_baseZeroCases, "scalbn_baseZeroCases", + "Checks for positive and negative zero arg", TEST_ENABLED +}; +static const SDLTest_TestCaseReference scalbnTestExpZero = { + (SDLTest_TestCaseFp)scalbn_expZeroCase, "scalbn_expZeroCase", + "Checks for zero exp", TEST_ENABLED +}; +static const SDLTest_TestCaseReference scalbnTestNan = { + (SDLTest_TestCaseFp)scalbn_nanCase, "scalbn_nanCase", + "Checks NAN", TEST_ENABLED +}; +static const SDLTest_TestCaseReference scalbnTestRegular = { + (SDLTest_TestCaseFp)scalbn_regularCases, "scalbn_regularCases", + "Checks a set of regular cases", TEST_ENABLED +}; + +/* SDL_cos test cases */ + +static const SDLTest_TestCaseReference cosTestInf = { + (SDLTest_TestCaseFp)cos_infCases, "cos_infCases", + "Checks for positive and negative infinity", TEST_ENABLED +}; +static const SDLTest_TestCaseReference cosTestNan = { + (SDLTest_TestCaseFp)cos_nanCase, "cos_nanCase", + "Checks NAN", TEST_ENABLED +}; +static const SDLTest_TestCaseReference cosTestRegular = { + (SDLTest_TestCaseFp)cos_regularCases, "cos_regularCases", + "Checks a set of regular cases", TEST_ENABLED +}; +static const SDLTest_TestCaseReference cosTestPrecision = { + (SDLTest_TestCaseFp)cos_precisionTest, "cos_precisionTest", + "Checks cosine precision", TEST_ENABLED +}; +static const SDLTest_TestCaseReference cosTestRange = { + (SDLTest_TestCaseFp)cos_rangeTest, "cos_rangeTest", + "Checks a range of positive integer", TEST_ENABLED +}; + +/* SDL_sin test cases */ + +static const SDLTest_TestCaseReference sinTestInf = { + (SDLTest_TestCaseFp)sin_infCases, "sin_infCases", + "Checks for positive and negative infinity", TEST_ENABLED +}; +static const SDLTest_TestCaseReference sinTestNan = { + (SDLTest_TestCaseFp)sin_nanCase, "sin_nanCase", + "Checks NAN", TEST_ENABLED +}; +static const SDLTest_TestCaseReference sinTestRegular = { + (SDLTest_TestCaseFp)sin_regularCases, "sin_regularCases", + "Checks a set of regular cases", TEST_ENABLED +}; +static const SDLTest_TestCaseReference sinTestPrecision = { + (SDLTest_TestCaseFp)sin_precisionTest, "sin_precisionTest", + "Checks sine precision", TEST_ENABLED +}; +static const SDLTest_TestCaseReference sinTestRange = { + (SDLTest_TestCaseFp)sin_rangeTest, "sin_rangeTest", + "Checks a range of positive integer", TEST_ENABLED +}; + +/* SDL_tan test cases */ + +static const SDLTest_TestCaseReference tanTestInf = { + (SDLTest_TestCaseFp)tan_infCases, "tan_infCases", + "Checks for positive and negative infinity", TEST_ENABLED +}; +static const SDLTest_TestCaseReference tanTestNan = { + (SDLTest_TestCaseFp)tan_nanCase, "tan_nanCase", + "Checks NAN", TEST_ENABLED +}; +static const SDLTest_TestCaseReference tanTestZero = { + (SDLTest_TestCaseFp)tan_zeroCases, "tan_zeroCases", + "Checks a set of regular cases", TEST_ENABLED +}; +static const SDLTest_TestCaseReference tanTestPrecision = { + (SDLTest_TestCaseFp)tan_precisionTest, "tan_precisionTest", + "Checks tangent precision", TEST_ENABLED +}; + +/* SDL_acos test cases */ + +static const SDLTest_TestCaseReference acosTestLimit = { + (SDLTest_TestCaseFp)acos_limitCases, "acos_limitCases", + "Checks the edge of the domain (+/-1)", TEST_ENABLED +}; +static const SDLTest_TestCaseReference acosTestOutOfDomain = { + (SDLTest_TestCaseFp)acos_outOfDomainCases, "acos_outOfDomainCases", + "Checks values outside the domain", TEST_ENABLED +}; +static const SDLTest_TestCaseReference acosTestNan = { + (SDLTest_TestCaseFp)acos_nanCase, "acos_nanCase", + "Checks NAN", TEST_ENABLED +}; +static const SDLTest_TestCaseReference acosTestPrecision = { + (SDLTest_TestCaseFp)acos_precisionTest, "acos_precisionTest", + "Checks acos precision", TEST_ENABLED +}; + +/* SDL_asin test cases */ + +static const SDLTest_TestCaseReference asinTestLimit = { + (SDLTest_TestCaseFp)asin_limitCases, "asin_limitCases", + "Checks the edge of the domain (+/-1)", TEST_ENABLED +}; +static const SDLTest_TestCaseReference asinTestOutOfDomain = { + (SDLTest_TestCaseFp)asin_outOfDomainCases, "asin_outOfDomainCases", + "Checks values outside the domain", TEST_ENABLED +}; +static const SDLTest_TestCaseReference asinTestNan = { + (SDLTest_TestCaseFp)asin_nanCase, "asin_nanCase", + "Checks NAN", TEST_ENABLED +}; +static const SDLTest_TestCaseReference asinTestPrecision = { + (SDLTest_TestCaseFp)asin_precisionTest, "asin_precisionTest", + "Checks asin precision", TEST_ENABLED +}; + +/* SDL_atan test cases */ + +static const SDLTest_TestCaseReference atanTestLimit = { + (SDLTest_TestCaseFp)atan_limitCases, "atan_limitCases", + "Checks the edge of the domain (+/-Infinity)", TEST_ENABLED +}; +static const SDLTest_TestCaseReference atanTestZero = { + (SDLTest_TestCaseFp)atan_zeroCases, "atan_zeroCases", + "Checks for positive and negative zero", TEST_ENABLED +}; +static const SDLTest_TestCaseReference atanTestNan = { + (SDLTest_TestCaseFp)atan_nanCase, "atan_nanCase", + "Checks NAN", TEST_ENABLED +}; +static const SDLTest_TestCaseReference atanTestPrecision = { + (SDLTest_TestCaseFp)atan_precisionTest, "atan_precisionTest", + "Checks atan precision", TEST_ENABLED +}; + +/* SDL_atan2 test cases */ + +static const SDLTest_TestCaseReference atan2TestZero1 = { + (SDLTest_TestCaseFp)atan2_bothZeroCases, "atan2_bothZeroCases", + "Checks for both arguments being zero", TEST_ENABLED +}; +static const SDLTest_TestCaseReference atan2TestZero2 = { + (SDLTest_TestCaseFp)atan2_yZeroCases, "atan2_yZeroCases", + "Checks for y=0", TEST_ENABLED +}; +static const SDLTest_TestCaseReference atan2TestZero3 = { + (SDLTest_TestCaseFp)atan2_xZeroCases, "atan2_xZeroCases", + "Checks for x=0", TEST_ENABLED +}; +static const SDLTest_TestCaseReference atan2TestInf1 = { + (SDLTest_TestCaseFp)atan2_bothInfCases, "atan2_bothInfCases", + "Checks for both arguments being infinity", TEST_ENABLED +}; +static const SDLTest_TestCaseReference atan2TestInf2 = { + (SDLTest_TestCaseFp)atan2_yInfCases, "atan2_yInfCases", + "Checks for y=0", TEST_ENABLED +}; +static const SDLTest_TestCaseReference atan2TestInf3 = { + (SDLTest_TestCaseFp)atan2_xInfCases, "atan2_xInfCases", + "Checks for x=0", TEST_ENABLED +}; +static const SDLTest_TestCaseReference atan2TestNan = { + (SDLTest_TestCaseFp)atan2_nanCases, "atan2_nanCases", + "Checks NANs", TEST_ENABLED +}; +static const SDLTest_TestCaseReference atan2TestQuadrantTopRight = { + (SDLTest_TestCaseFp)atan2_topRightQuadrantTest, "atan2_topRightQuadrantTest", + "Checks values in the top right quadrant", TEST_ENABLED +}; +static const SDLTest_TestCaseReference atan2TestQuadrantTopLeft = { + (SDLTest_TestCaseFp)atan2_topLeftQuadrantTest, "atan2_topLeftQuadrantTest", + "Checks values in the top left quadrant", TEST_ENABLED +}; +static const SDLTest_TestCaseReference atan2TestQuadrantBottomRight = { + (SDLTest_TestCaseFp)atan2_bottomRightQuadrantTest, "atan2_bottomRightQuadrantTest", + "Checks values in the bottom right quadrant", TEST_ENABLED +}; +static const SDLTest_TestCaseReference atan2TestQuadrantBottomLeft = { + (SDLTest_TestCaseFp)atan2_bottomLeftQuadrantTest, "atan2_bottomLeftQuadrantTest", + "Checks values in the bottom left quadrant", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference *mathTests[] = { + &floorTestInf, &floorTestZero, &floorTestNan, + &floorTestRound, &floorTestFraction, &floorTestRange, + + &ceilTestInf, &ceilTestZero, &ceilTestNan, + &ceilTestRound, &ceilTestFraction, &ceilTestRange, + + &truncTestInf, &truncTestZero, &truncTestNan, + &truncTestRound, &truncTestFraction, &truncTestRange, + + &roundTestInf, &roundTestZero, &roundTestNan, + &roundTestRound, &roundTestFraction, &roundTestRange, + + &fabsTestInf, &fabsTestZero, &fabsTestNan, &fabsTestRange, + + ©signTestInf, ©signTestZero, ©signTestNan, ©signTestRange, + + &fmodTestDivOfInf, &fmodTestDivByInf, &fmodTestDivOfZero, &fmodTestDivByZero, + &fmodTestNan, &fmodTestRegular, &fmodTestRange, + + &expTestInf, &expTestZero, &expTestOverflow, + &expTestBase, &expTestRegular, + + &logTestLimit, &logTestNan, + &logTestBase, &logTestRegular, + + &log10TestLimit, &log10TestNan, + &log10TestBase, &log10TestRegular, + + &modfTestBase, + + &powTestExpInf1, &powTestExpInf2, &powTestExpInf3, + &powTestBaseInf1, &powTestBaseInf2, + &powTestNan1, &powTestNan2, &powTestNan3, &powTestNan4, + &powTestZero1, &powTestZero2, &powTestZero3, &powTestZero4, + &powTestRegular, &powTestPowOf2, &powTestRange, + + &sqrtTestInf, &sqrtTestNan, &sqrtTestDomain, + &sqrtTestBase, &sqrtTestRegular, + + &scalbnTestInf, &scalbnTestBaseZero, &scalbnTestExpZero, + &scalbnTestNan, &scalbnTestRegular, + + &cosTestInf, &cosTestNan, &cosTestRegular, + &cosTestPrecision, &cosTestRange, + + &sinTestInf, &sinTestNan, &sinTestRegular, + &sinTestPrecision, &sinTestRange, + + &tanTestInf, &tanTestNan, &tanTestZero, &tanTestPrecision, + + &acosTestLimit, &acosTestOutOfDomain, &acosTestNan, &acosTestPrecision, + + &asinTestLimit, &asinTestOutOfDomain, &asinTestNan, &asinTestPrecision, + + &atanTestLimit, &atanTestZero, &atanTestNan, &atanTestPrecision, + + &atan2TestZero1, &atan2TestZero2, &atan2TestZero3, + &atan2TestInf1, &atan2TestInf2, &atan2TestInf3, + &atan2TestNan, &atan2TestQuadrantTopRight, &atan2TestQuadrantTopLeft, + &atan2TestQuadrantBottomRight, &atan2TestQuadrantBottomLeft, + + NULL +}; + +SDLTest_TestSuiteReference mathTestSuite = { + "Math", + NULL, + mathTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_mouse.c b/vendor/sdl-3.0.0/test/testautomation_mouse.c new file mode 100644 index 0000000..783f1f2 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_mouse.c @@ -0,0 +1,661 @@ +/** + * Mouse test suite + */ +#include +#include + +#include +#include +#include "testautomation_suites.h" +#include "testautomation_images.h" + +/* ================= Test Case Implementation ================== */ + +/* Test case functions */ + +/* Helper to evaluate state returned from SDL_GetMouseState */ +static int mouseStateCheck(Uint32 state) +{ + return (state == 0) || + (state == SDL_BUTTON(SDL_BUTTON_LEFT)) || + (state == SDL_BUTTON(SDL_BUTTON_MIDDLE)) || + (state == SDL_BUTTON(SDL_BUTTON_RIGHT)) || + (state == SDL_BUTTON(SDL_BUTTON_X1)) || + (state == SDL_BUTTON(SDL_BUTTON_X2)); +} + +/** + * \brief Check call to SDL_GetMouseState + * + */ +static int mouse_getMouseState(void *arg) +{ + float x; + float y; + Uint32 state; + + /* Pump some events to update mouse state */ + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + + /* Case where x, y pointer is NULL */ + state = SDL_GetMouseState(NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetMouseState(NULL, NULL)"); + SDLTest_AssertCheck(mouseStateCheck(state), "Validate state returned from function, got: %" SDL_PRIu32, state); + + /* Case where x pointer is not NULL */ + x = -FLT_MAX; + state = SDL_GetMouseState(&x, NULL); + SDLTest_AssertPass("Call to SDL_GetMouseState(&x, NULL)"); + SDLTest_AssertCheck(x > -FLT_MAX, "Validate that value of x is > -FLT_MAX, got: %g", x); + SDLTest_AssertCheck(mouseStateCheck(state), "Validate state returned from function, got: %" SDL_PRIu32, state); + + /* Case where y pointer is not NULL */ + y = -FLT_MAX; + state = SDL_GetMouseState(NULL, &y); + SDLTest_AssertPass("Call to SDL_GetMouseState(NULL, &y)"); + SDLTest_AssertCheck(y > -FLT_MAX, "Validate that value of y is > -FLT_MAX, got: %g", y); + SDLTest_AssertCheck(mouseStateCheck(state), "Validate state returned from function, got: %" SDL_PRIu32, state); + + /* Case where x and y pointer is not NULL */ + x = -FLT_MAX; + y = -FLT_MAX; + state = SDL_GetMouseState(&x, &y); + SDLTest_AssertPass("Call to SDL_GetMouseState(&x, &y)"); + SDLTest_AssertCheck(x > -FLT_MAX, "Validate that value of x is > -FLT_MAX, got: %g", x); + SDLTest_AssertCheck(y > -FLT_MAX, "Validate that value of y is > -FLT_MAX, got: %g", y); + SDLTest_AssertCheck(mouseStateCheck(state), "Validate state returned from function, got: %" SDL_PRIu32, state); + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_GetRelativeMouseState + * + */ +static int mouse_getRelativeMouseState(void *arg) +{ + float x; + float y; + Uint32 state; + + /* Pump some events to update mouse state */ + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + + /* Case where x, y pointer is NULL */ + state = SDL_GetRelativeMouseState(NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseState(NULL, NULL)"); + SDLTest_AssertCheck(mouseStateCheck(state), "Validate state returned from function, got: %" SDL_PRIu32, state); + + /* Case where x pointer is not NULL */ + x = -FLT_MAX; + state = SDL_GetRelativeMouseState(&x, NULL); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseState(&x, NULL)"); + SDLTest_AssertCheck(x > -FLT_MAX, "Validate that value of x is > -FLT_MAX, got: %g", x); + SDLTest_AssertCheck(mouseStateCheck(state), "Validate state returned from function, got: %" SDL_PRIu32, state); + + /* Case where y pointer is not NULL */ + y = -FLT_MAX; + state = SDL_GetRelativeMouseState(NULL, &y); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseState(NULL, &y)"); + SDLTest_AssertCheck(y > -FLT_MAX, "Validate that value of y is > -FLT_MAX, got: %g", y); + SDLTest_AssertCheck(mouseStateCheck(state), "Validate state returned from function, got: %" SDL_PRIu32, state); + + /* Case where x and y pointer is not NULL */ + x = -FLT_MAX; + y = -FLT_MAX; + state = SDL_GetRelativeMouseState(&x, &y); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseState(&x, &y)"); + SDLTest_AssertCheck(x > -FLT_MAX, "Validate that value of x is > -FLT_MAX, got: %g", x); + SDLTest_AssertCheck(y > -FLT_MAX, "Validate that value of y is > -FLT_MAX, got: %g", y); + SDLTest_AssertCheck(mouseStateCheck(state), "Validate state returned from function, got: %" SDL_PRIu32, state); + + return TEST_COMPLETED; +} + +/* XPM definition of mouse Cursor */ +static const char *g_mouseArrowData[] = { + /* pixels */ + "X ", + "XX ", + "X.X ", + "X..X ", + "X...X ", + "X....X ", + "X.....X ", + "X......X ", + "X.......X ", + "X........X ", + "X.....XXXXX ", + "X..X..X ", + "X.X X..X ", + "XX X..X ", + "X X..X ", + " X..X ", + " X..X ", + " X..X ", + " XX ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " +}; + +/* Helper that creates a new mouse cursor from an XPM */ +static SDL_Cursor *initArrowCursor(const char *image[]) +{ + SDL_Cursor *cursor; + int i, row, col; + Uint8 data[4 * 32]; + Uint8 mask[4 * 32]; + + i = -1; + for (row = 0; row < 32; ++row) { + for (col = 0; col < 32; ++col) { + if (col % 8) { + data[i] <<= 1; + mask[i] <<= 1; + } else { + ++i; + data[i] = mask[i] = 0; + } + switch (image[row][col]) { + case 'X': + data[i] |= 0x01; + mask[i] |= 0x01; + break; + case '.': + mask[i] |= 0x01; + break; + case ' ': + break; + } + } + } + + cursor = SDL_CreateCursor(data, mask, 32, 32, 0, 0); + return cursor; +} + +/** + * \brief Check call to SDL_CreateCursor and SDL_DestroyCursor + * + * \sa SDL_CreateCursor + * \sa SDL_DestroyCursor + */ +static int mouse_createFreeCursor(void *arg) +{ + SDL_Cursor *cursor; + + /* Create a cursor */ + cursor = initArrowCursor(g_mouseArrowData); + SDLTest_AssertPass("Call to SDL_CreateCursor()"); + SDLTest_AssertCheck(cursor != NULL, "Validate result from SDL_CreateCursor() is not NULL"); + if (cursor == NULL) { + return TEST_ABORTED; + } + + /* Free cursor again */ + SDL_DestroyCursor(cursor); + SDLTest_AssertPass("Call to SDL_DestroyCursor()"); + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_CreateColorCursor and SDL_DestroyCursor + * + * \sa SDL_CreateColorCursor + * \sa SDL_DestroyCursor + */ +static int mouse_createFreeColorCursor(void *arg) +{ + SDL_Surface *face; + SDL_Cursor *cursor; + + /* Get sample surface */ + face = SDLTest_ImageFace(); + SDLTest_AssertCheck(face != NULL, "Validate sample input image is not NULL"); + if (face == NULL) { + return TEST_ABORTED; + } + + /* Create a color cursor from surface */ + cursor = SDL_CreateColorCursor(face, 0, 0); + SDLTest_AssertPass("Call to SDL_CreateColorCursor()"); + SDLTest_AssertCheck(cursor != NULL, "Validate result from SDL_CreateColorCursor() is not NULL"); + if (cursor == NULL) { + SDL_DestroySurface(face); + return TEST_ABORTED; + } + + /* Free cursor again */ + SDL_DestroyCursor(cursor); + SDLTest_AssertPass("Call to SDL_DestroyCursor()"); + + /* Clean up */ + SDL_DestroySurface(face); + + return TEST_COMPLETED; +} + +/* Helper that changes cursor visibility */ +static void changeCursorVisibility(SDL_bool state) +{ + SDL_bool newState; + + if (state) { + SDL_ShowCursor(); + } else { + SDL_HideCursor(); + } + SDLTest_AssertPass("Call to %s", state ? "SDL_ShowCursor()" : "SDL_HideCursor()"); + + newState = SDL_CursorVisible(); + SDLTest_AssertPass("Call to SDL_CursorVisible()"); + SDLTest_AssertCheck(state == newState, "Validate new state, expected: %s, got: %s", + state ? "SDL_TRUE" : "SDL_FALSE", + newState ? "SDL_TRUE" : "SDL_FALSE"); +} + +/** + * \brief Check call to SDL_ShowCursor + * + * \sa SDL_ShowCursor + */ +static int mouse_showCursor(void *arg) +{ + SDL_bool currentState; + + /* Get current state */ + currentState = SDL_CursorVisible(); + SDLTest_AssertPass("Call to SDL_CursorVisible()"); + if (currentState) { + /* Hide the cursor, then show it again */ + changeCursorVisibility(SDL_FALSE); + changeCursorVisibility(SDL_TRUE); + } else { + /* Show the cursor, then hide it again */ + changeCursorVisibility(SDL_TRUE); + changeCursorVisibility(SDL_FALSE); + } + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_SetCursor + * + * \sa SDL_SetCursor + */ +static int mouse_setCursor(void *arg) +{ + SDL_Cursor *cursor; + + /* Create a cursor */ + cursor = initArrowCursor(g_mouseArrowData); + SDLTest_AssertPass("Call to SDL_CreateCursor()"); + SDLTest_AssertCheck(cursor != NULL, "Validate result from SDL_CreateCursor() is not NULL"); + if (cursor == NULL) { + return TEST_ABORTED; + } + + /* Set the arrow cursor */ + SDL_SetCursor(cursor); + SDLTest_AssertPass("Call to SDL_SetCursor(cursor)"); + + /* Force redraw */ + SDL_SetCursor(NULL); + SDLTest_AssertPass("Call to SDL_SetCursor(NULL)"); + + /* Free cursor again */ + SDL_DestroyCursor(cursor); + SDLTest_AssertPass("Call to SDL_DestroyCursor()"); + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_GetCursor + * + * \sa SDL_GetCursor + */ +static int mouse_getCursor(void *arg) +{ + SDL_Cursor *cursor; + + /* Get current cursor */ + cursor = SDL_GetCursor(); + SDLTest_AssertPass("Call to SDL_GetCursor()"); + SDLTest_AssertCheck(cursor != NULL, "Validate result from SDL_GetCursor() is not NULL"); + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_GetRelativeMouseMode and SDL_SetRelativeMouseMode + * + * \sa SDL_GetRelativeMouseMode + * \sa SDL_SetRelativeMouseMode + */ +static int mouse_getSetRelativeMouseMode(void *arg) +{ + int result; + int i; + SDL_bool initialState; + SDL_bool currentState; + + /* Capture original state so we can revert back to it later */ + initialState = SDL_GetRelativeMouseMode(); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseMode()"); + + /* Repeat twice to check D->D transition */ + for (i = 0; i < 2; i++) { + /* Disable - should always be supported */ + result = SDL_SetRelativeMouseMode(SDL_FALSE); + SDLTest_AssertPass("Call to SDL_SetRelativeMouseMode(FALSE)"); + SDLTest_AssertCheck(result == 0, "Validate result value from SDL_SetRelativeMouseMode, expected: 0, got: %i", result); + currentState = SDL_GetRelativeMouseMode(); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseMode()"); + SDLTest_AssertCheck(currentState == SDL_FALSE, "Validate current state is FALSE, got: %i", currentState); + } + + /* Repeat twice to check D->E->E transition */ + for (i = 0; i < 2; i++) { + /* Enable - may not be supported */ + result = SDL_SetRelativeMouseMode(SDL_TRUE); + SDLTest_AssertPass("Call to SDL_SetRelativeMouseMode(TRUE)"); + if (result != -1) { + SDLTest_AssertCheck(result == 0, "Validate result value from SDL_SetRelativeMouseMode, expected: 0, got: %i", result); + currentState = SDL_GetRelativeMouseMode(); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseMode()"); + SDLTest_AssertCheck(currentState == SDL_TRUE, "Validate current state is TRUE, got: %i", currentState); + } + } + + /* Disable to check E->D transition */ + result = SDL_SetRelativeMouseMode(SDL_FALSE); + SDLTest_AssertPass("Call to SDL_SetRelativeMouseMode(FALSE)"); + SDLTest_AssertCheck(result == 0, "Validate result value from SDL_SetRelativeMouseMode, expected: 0, got: %i", result); + currentState = SDL_GetRelativeMouseMode(); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseMode()"); + SDLTest_AssertCheck(currentState == SDL_FALSE, "Validate current state is FALSE, got: %i", currentState); + + /* Revert to original state - ignore result */ + result = SDL_SetRelativeMouseMode(initialState); + + return TEST_COMPLETED; +} + +#define MOUSE_TESTWINDOW_WIDTH 320 +#define MOUSE_TESTWINDOW_HEIGHT 200 + +/** + * Creates a test window + */ +static SDL_Window *createMouseSuiteTestWindow(void) +{ + int width = MOUSE_TESTWINDOW_WIDTH, height = MOUSE_TESTWINDOW_HEIGHT; + SDL_Window *window; + window = SDL_CreateWindow("mousecreateMouseSuiteTestWindow", width, height, 0); + SDLTest_AssertPass("SDL_CreateWindow()"); + SDLTest_AssertCheck(window != NULL, "Check SDL_CreateWindow result"); + return window; +} + +/** + * Destroy test window + */ +static void destroyMouseSuiteTestWindow(SDL_Window *window) +{ + if (window != NULL) { + SDL_DestroyWindow(window); + window = NULL; + SDLTest_AssertPass("SDL_DestroyWindow()"); + } +} + +/** + * \brief Check call to SDL_WarpMouseInWindow + * + * \sa SDL_WarpMouseInWindow + */ +static int mouse_warpMouseInWindow(void *arg) +{ + const int w = MOUSE_TESTWINDOW_WIDTH, h = MOUSE_TESTWINDOW_HEIGHT; + int numPositions = 6; + float xPositions[6]; + float yPositions[6]; + float x, y; + int i, j; + SDL_Window *window; + + xPositions[0] = -1; + xPositions[1] = 0; + xPositions[2] = 1; + xPositions[3] = (float)w - 1; + xPositions[4] = (float)w; + xPositions[5] = (float)w + 1; + yPositions[0] = -1; + yPositions[1] = 0; + yPositions[2] = 1; + yPositions[3] = (float)h - 1; + yPositions[4] = (float)h; + yPositions[5] = (float)h + 1; + /* Create test window */ + window = createMouseSuiteTestWindow(); + if (window == NULL) { + return TEST_ABORTED; + } + + /* Mouse to random position inside window */ + x = (float)SDLTest_RandomIntegerInRange(1, w - 1); + y = (float)SDLTest_RandomIntegerInRange(1, h - 1); + SDL_WarpMouseInWindow(window, x, y); + SDLTest_AssertPass("SDL_WarpMouseInWindow(...,%.f,%.f)", x, y); + + /* Same position again */ + SDL_WarpMouseInWindow(window, x, y); + SDLTest_AssertPass("SDL_WarpMouseInWindow(...,%.f,%.f)", x, y); + + /* Mouse to various boundary positions */ + for (i = 0; i < numPositions; i++) { + for (j = 0; j < numPositions; j++) { + x = xPositions[i]; + y = yPositions[j]; + SDL_WarpMouseInWindow(window, x, y); + SDLTest_AssertPass("SDL_WarpMouseInWindow(...,%.f,%.f)", x, y); + + /* TODO: add tracking of events and check that each call generates a mouse motion event */ + SDL_PumpEvents(); + SDLTest_AssertPass("SDL_PumpEvents()"); + } + } + + /* Clean up test window */ + destroyMouseSuiteTestWindow(window); + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_GetMouseFocus + * + * \sa SDL_GetMouseFocus + */ +static int mouse_getMouseFocus(void *arg) +{ + const int w = MOUSE_TESTWINDOW_WIDTH, h = MOUSE_TESTWINDOW_HEIGHT; + float x, y; + SDL_Window *window; + SDL_Window *focusWindow; + const SDL_bool video_driver_is_wayland = !SDL_strcmp(SDL_GetCurrentVideoDriver(), "wayland"); + + /* Get focus - focus non-deterministic */ + focusWindow = SDL_GetMouseFocus(); + SDLTest_AssertPass("SDL_GetMouseFocus()"); + + /* Create test window */ + window = createMouseSuiteTestWindow(); + if (window == NULL) { + return TEST_ABORTED; + } + + /* Wayland explicitly disallows warping the mouse pointer, so this test must be skipped. */ + if (!video_driver_is_wayland) { + /* Mouse to random position inside window */ + x = (float)SDLTest_RandomIntegerInRange(1, w - 1); + y = (float)SDLTest_RandomIntegerInRange(1, h - 1); + SDL_WarpMouseInWindow(window, x, y); + SDLTest_AssertPass("SDL_WarpMouseInWindow(...,%.f,%.f)", x, y); + + /* Pump events to update focus state */ + SDL_Delay(100); + SDL_PumpEvents(); + SDLTest_AssertPass("SDL_PumpEvents()"); + + /* Get focus with explicit window setup - focus deterministic */ + focusWindow = SDL_GetMouseFocus(); + SDLTest_AssertPass("SDL_GetMouseFocus()"); + SDLTest_AssertCheck(focusWindow != NULL, "Check returned window value is not NULL"); + SDLTest_AssertCheck(focusWindow == window, "Check returned window value is test window"); + + /* Mouse to random position outside window */ + x = (float)SDLTest_RandomIntegerInRange(-9, -1); + y = (float)SDLTest_RandomIntegerInRange(-9, -1); + SDL_WarpMouseInWindow(window, x, y); + SDLTest_AssertPass("SDL_WarpMouseInWindow(...,%.f,%.f)", x, y); + } else { + SDLTest_Log("Skipping mouse warp focus tests: Wayland does not support warping the mouse pointer"); + } + + /* Clean up test window */ + destroyMouseSuiteTestWindow(window); + + /* Pump events to update focus state */ + SDL_PumpEvents(); + SDLTest_AssertPass("SDL_PumpEvents()"); + + /* Get focus for non-existing window */ + focusWindow = SDL_GetMouseFocus(); + SDLTest_AssertPass("SDL_GetMouseFocus()"); + SDLTest_AssertCheck(focusWindow == NULL, "Check returned window value is NULL"); + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_GetDefaultCursor + * + * \sa SDL_GetDefaultCursor + */ +static int mouse_getDefaultCursor(void *arg) +{ + SDL_Cursor *cursor; + + /* Get current cursor */ + cursor = SDL_GetDefaultCursor(); + SDLTest_AssertPass("Call to SDL_GetDefaultCursor()"); + SDLTest_AssertCheck(cursor != NULL, "Validate result from SDL_GetDefaultCursor() is not NULL"); + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_GetGlobalMouseState + * + * \sa SDL_GetGlobalMouseState + */ +static int mouse_getGlobalMouseState(void *arg) +{ + float x; + float y; + Uint32 state; + + x = -FLT_MAX; + y = -FLT_MAX; + + /* Get current cursor */ + state = SDL_GetGlobalMouseState(&x, &y); + SDLTest_AssertPass("Call to SDL_GetGlobalMouseState()"); + SDLTest_AssertCheck(x > -FLT_MAX, "Validate that value of x is > -FLT_MAX, got: %.f", x); + SDLTest_AssertCheck(y > -FLT_MAX, "Validate that value of y is > -FLT_MAX, got: %.f", y); + SDLTest_AssertCheck(mouseStateCheck(state), "Validate state returned from function, got: %" SDL_PRIu32, state); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Mouse test cases */ +static const SDLTest_TestCaseReference mouseTest1 = { + (SDLTest_TestCaseFp)mouse_getMouseState, "mouse_getMouseState", "Check call to SDL_GetMouseState", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference mouseTest2 = { + (SDLTest_TestCaseFp)mouse_getRelativeMouseState, "mouse_getRelativeMouseState", "Check call to SDL_GetRelativeMouseState", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference mouseTest3 = { + (SDLTest_TestCaseFp)mouse_createFreeCursor, "mouse_createFreeCursor", "Check call to SDL_CreateCursor and SDL_DestroyCursor", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference mouseTest4 = { + (SDLTest_TestCaseFp)mouse_showCursor, "mouse_showCursor", "Check call to SDL_ShowCursor", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference mouseTest5 = { + (SDLTest_TestCaseFp)mouse_setCursor, "mouse_setCursor", "Check call to SDL_SetCursor", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference mouseTest6 = { + (SDLTest_TestCaseFp)mouse_getCursor, "mouse_getCursor", "Check call to SDL_GetCursor", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference mouseTest7 = { + (SDLTest_TestCaseFp)mouse_warpMouseInWindow, "mouse_warpMouseInWindow", "Check call to SDL_WarpMouseInWindow", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference mouseTest8 = { + (SDLTest_TestCaseFp)mouse_getMouseFocus, "mouse_getMouseFocus", "Check call to SDL_getMouseFocus", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference mouseTest9 = { + (SDLTest_TestCaseFp)mouse_createFreeColorCursor, "mouse_createFreeColorCursor", "Check call to SDL_CreateColorCursor and SDL_DestroyCursor", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference mouseTest10 = { + (SDLTest_TestCaseFp)mouse_getSetRelativeMouseMode, "mouse_getSetRelativeMouseMode", "Check call to SDL_GetRelativeMouseMode and SDL_SetRelativeMouseMode", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference mouseTest11 = { + (SDLTest_TestCaseFp)mouse_getDefaultCursor, "mouse_getDefaultCursor", "Check call to mouse_getDefaultCursor", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference mouseTest12 = { + (SDLTest_TestCaseFp)mouse_getGlobalMouseState, "mouse_getGlobalMouseState", "Check call to mouse_getGlobalMouseState", TEST_ENABLED +}; + +/* Sequence of Mouse test cases */ +static const SDLTest_TestCaseReference *mouseTests[] = { + &mouseTest1, &mouseTest2, &mouseTest3, &mouseTest4, &mouseTest5, &mouseTest6, + &mouseTest7, &mouseTest8, &mouseTest9, &mouseTest10, &mouseTest11, &mouseTest12, NULL +}; + +/* Mouse test suite (global) */ +SDLTest_TestSuiteReference mouseTestSuite = { + "Mouse", + NULL, + mouseTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_pixels.c b/vendor/sdl-3.0.0/test/testautomation_pixels.c new file mode 100644 index 0000000..9980b56 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_pixels.c @@ -0,0 +1,378 @@ +/** + * Pixels test suite + */ +#include +#include +#include "testautomation_suites.h" + +/* Test case functions */ + +/* Definition of all RGB formats used to test pixel conversions */ +static const Uint32 g_AllFormats[] = { + SDL_PIXELFORMAT_INDEX1LSB, + SDL_PIXELFORMAT_INDEX1MSB, + SDL_PIXELFORMAT_INDEX4LSB, + SDL_PIXELFORMAT_INDEX4MSB, + SDL_PIXELFORMAT_INDEX8, + SDL_PIXELFORMAT_RGB332, + SDL_PIXELFORMAT_RGB444, + SDL_PIXELFORMAT_BGR444, + SDL_PIXELFORMAT_RGB555, + SDL_PIXELFORMAT_BGR555, + SDL_PIXELFORMAT_ARGB4444, + SDL_PIXELFORMAT_RGBA4444, + SDL_PIXELFORMAT_ABGR4444, + SDL_PIXELFORMAT_BGRA4444, + SDL_PIXELFORMAT_ARGB1555, + SDL_PIXELFORMAT_RGBA5551, + SDL_PIXELFORMAT_ABGR1555, + SDL_PIXELFORMAT_BGRA5551, + SDL_PIXELFORMAT_RGB565, + SDL_PIXELFORMAT_BGR565, + SDL_PIXELFORMAT_RGB24, + SDL_PIXELFORMAT_BGR24, + SDL_PIXELFORMAT_XRGB8888, + SDL_PIXELFORMAT_RGBX8888, + SDL_PIXELFORMAT_XBGR8888, + SDL_PIXELFORMAT_BGRX8888, + SDL_PIXELFORMAT_ARGB8888, + SDL_PIXELFORMAT_RGBA8888, + SDL_PIXELFORMAT_ABGR8888, + SDL_PIXELFORMAT_BGRA8888, + SDL_PIXELFORMAT_ARGB2101010, + SDL_PIXELFORMAT_YV12, + SDL_PIXELFORMAT_IYUV, + SDL_PIXELFORMAT_YUY2, + SDL_PIXELFORMAT_UYVY, + SDL_PIXELFORMAT_YVYU, + SDL_PIXELFORMAT_NV12, + SDL_PIXELFORMAT_NV21 +}; +static const int g_numAllFormats = SDL_arraysize(g_AllFormats); + +static const char *g_AllFormatsVerbose[] = { + "SDL_PIXELFORMAT_INDEX1LSB", + "SDL_PIXELFORMAT_INDEX1MSB", + "SDL_PIXELFORMAT_INDEX4LSB", + "SDL_PIXELFORMAT_INDEX4MSB", + "SDL_PIXELFORMAT_INDEX8", + "SDL_PIXELFORMAT_RGB332", + "SDL_PIXELFORMAT_RGB444", + "SDL_PIXELFORMAT_BGR444", + "SDL_PIXELFORMAT_RGB555", + "SDL_PIXELFORMAT_BGR555", + "SDL_PIXELFORMAT_ARGB4444", + "SDL_PIXELFORMAT_RGBA4444", + "SDL_PIXELFORMAT_ABGR4444", + "SDL_PIXELFORMAT_BGRA4444", + "SDL_PIXELFORMAT_ARGB1555", + "SDL_PIXELFORMAT_RGBA5551", + "SDL_PIXELFORMAT_ABGR1555", + "SDL_PIXELFORMAT_BGRA5551", + "SDL_PIXELFORMAT_RGB565", + "SDL_PIXELFORMAT_BGR565", + "SDL_PIXELFORMAT_RGB24", + "SDL_PIXELFORMAT_BGR24", + "SDL_PIXELFORMAT_XRGB8888", + "SDL_PIXELFORMAT_RGBX8888", + "SDL_PIXELFORMAT_XBGR8888", + "SDL_PIXELFORMAT_BGRX8888", + "SDL_PIXELFORMAT_ARGB8888", + "SDL_PIXELFORMAT_RGBA8888", + "SDL_PIXELFORMAT_ABGR8888", + "SDL_PIXELFORMAT_BGRA8888", + "SDL_PIXELFORMAT_ARGB2101010", + "SDL_PIXELFORMAT_YV12", + "SDL_PIXELFORMAT_IYUV", + "SDL_PIXELFORMAT_YUY2", + "SDL_PIXELFORMAT_UYVY", + "SDL_PIXELFORMAT_YVYU", + "SDL_PIXELFORMAT_NV12", + "SDL_PIXELFORMAT_NV21" +}; + +/* Definition of some invalid formats for negative tests */ +static Uint32 g_invalidPixelFormats[] = { + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_1010102 + 1, 32, 4), + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, SDL_PACKEDLAYOUT_1010102 + 2, 32, 4) +}; +static const int g_numInvalidPixelFormats = SDL_arraysize(g_invalidPixelFormats); +static const char *g_invalidPixelFormatsVerbose[] = { + "SDL_PIXELFORMAT_UNKNOWN", + "SDL_PIXELFORMAT_UNKNOWN" +}; + +/* Test case functions */ + +/** + * \brief Call to SDL_CreatePixelFormat and SDL_DestroyPixelFormat + * + * \sa SDL_CreatePixelFormat + * \sa SDL_DestroyPixelFormat + */ +static int pixels_allocFreeFormat(void *arg) +{ + const char *unknownFormat = "SDL_PIXELFORMAT_UNKNOWN"; + const char *expectedError = "Unknown pixel format"; + const char *error; + int i; + Uint32 format; + Uint32 masks; + SDL_PixelFormat *result; + + /* Blank/unknown format */ + format = 0; + SDLTest_Log("Pixel Format: %s (%" SDL_PRIu32 ")", unknownFormat, format); + + /* Allocate format */ + result = SDL_CreatePixelFormat(format); + SDLTest_AssertPass("Call to SDL_CreatePixelFormat()"); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result->format == format, "Verify value of result.format; expected: %" SDL_PRIu32 ", got %" SDL_PRIu32, format, result->format); + SDLTest_AssertCheck(result->BitsPerPixel == 0, "Verify value of result.BitsPerPixel; expected: 0, got %u", result->BitsPerPixel); + SDLTest_AssertCheck(result->BytesPerPixel == 0, "Verify value of result.BytesPerPixel; expected: 0, got %u", result->BytesPerPixel); + masks = result->Rmask | result->Gmask | result->Bmask | result->Amask; + SDLTest_AssertCheck(masks == 0, "Verify value of result.[RGBA]mask combined; expected: 0, got %" SDL_PRIu32, masks); + + /* Deallocate again */ + SDL_DestroyPixelFormat(result); + SDLTest_AssertPass("Call to SDL_DestroyPixelFormat()"); + } + + /* RGB formats */ + for (i = 0; i < g_numAllFormats; i++) { + format = g_AllFormats[i]; + SDLTest_Log("Pixel Format: %s (%" SDL_PRIu32 ")", g_AllFormatsVerbose[i], format); + + /* Allocate format */ + result = SDL_CreatePixelFormat(format); + SDLTest_AssertPass("Call to SDL_CreatePixelFormat()"); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result->format == format, "Verify value of result.format; expected: %" SDL_PRIu32 ", got %" SDL_PRIu32, format, result->format); + if (!SDL_ISPIXELFORMAT_FOURCC(format)) { + SDLTest_AssertCheck(result->BitsPerPixel > 0, "Verify value of result.BitsPerPixel; expected: >0, got %u", result->BitsPerPixel); + SDLTest_AssertCheck(result->BytesPerPixel > 0, "Verify value of result.BytesPerPixel; expected: >0, got %u", result->BytesPerPixel); + if (!SDL_ISPIXELFORMAT_INDEXED(format)) { + masks = result->Rmask | result->Gmask | result->Bmask | result->Amask; + SDLTest_AssertCheck(masks > 0, "Verify value of result.[RGBA]mask combined; expected: >0, got %" SDL_PRIu32, masks); + } + } + + /* Deallocate again */ + SDL_DestroyPixelFormat(result); + SDLTest_AssertPass("Call to SDL_DestroyPixelFormat()"); + } + } + + /* Negative cases */ + + /* Invalid Formats */ + for (i = 0; i < g_numInvalidPixelFormats; i++) { + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + format = g_invalidPixelFormats[i]; + result = SDL_CreatePixelFormat(format); + SDLTest_AssertPass("Call to SDL_CreatePixelFormat(%" SDL_PRIu32 ")", format); + SDLTest_AssertCheck(result == NULL, "Verify result is NULL"); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError, error); + } + } + + /* Invalid free pointer */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_DestroyPixelFormat(NULL); + SDLTest_AssertPass("Call to SDL_DestroyPixelFormat(NULL)"); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error == NULL || error[0] == '\0', "Validate that error message is empty"); + + return TEST_COMPLETED; +} + +/** + * \brief Call to SDL_GetPixelFormatName + * + * \sa SDL_GetPixelFormatName + */ +static int pixels_getPixelFormatName(void *arg) +{ + const char *unknownFormat = "SDL_PIXELFORMAT_UNKNOWN"; + const char *error; + int i; + Uint32 format; + const char *result; + + /* Blank/undefined format */ + format = 0; + SDLTest_Log("RGB Format: %s (%" SDL_PRIu32 ")", unknownFormat, format); + + /* Get name of format */ + result = SDL_GetPixelFormatName(format); + SDLTest_AssertPass("Call to SDL_GetPixelFormatName()"); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result[0] != '\0', "Verify result is non-empty"); + SDLTest_AssertCheck(SDL_strcmp(result, unknownFormat) == 0, + "Verify result text; expected: %s, got %s", unknownFormat, result); + } + + /* RGB formats */ + for (i = 0; i < g_numAllFormats; i++) { + format = g_AllFormats[i]; + SDLTest_Log("RGB Format: %s (%" SDL_PRIu32 ")", g_AllFormatsVerbose[i], format); + + /* Get name of format */ + result = SDL_GetPixelFormatName(format); + SDLTest_AssertPass("Call to SDL_GetPixelFormatName()"); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result[0] != '\0', "Verify result is non-empty"); + SDLTest_AssertCheck(SDL_strcmp(result, g_AllFormatsVerbose[i]) == 0, + "Verify result text; expected: %s, got %s", g_AllFormatsVerbose[i], result); + } + } + + /* Negative cases */ + + /* Invalid Formats */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + for (i = 0; i < g_numInvalidPixelFormats; i++) { + format = g_invalidPixelFormats[i]; + result = SDL_GetPixelFormatName(format); + SDLTest_AssertPass("Call to SDL_GetPixelFormatName(%" SDL_PRIu32 ")", format); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result[0] != '\0', + "Verify result is non-empty; got: %s", result); + SDLTest_AssertCheck(SDL_strcmp(result, g_invalidPixelFormatsVerbose[i]) == 0, + "Validate name is UNKNOWN, expected: '%s', got: '%s'", g_invalidPixelFormatsVerbose[i], result); + } + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error == NULL || error[0] == '\0', "Validate that error message is empty"); + } + + return TEST_COMPLETED; +} + +/** + * \brief Call to SDL_CreatePalette and SDL_DestroyPalette + * + * \sa SDL_CreatePalette + * \sa SDL_DestroyPalette + */ +static int pixels_allocFreePalette(void *arg) +{ + const char *expectedError = "Parameter 'ncolors' is invalid"; + const char *error; + int variation; + int i; + int ncolors; + SDL_Palette *result; + + /* Allocate palette */ + for (variation = 1; variation <= 3; variation++) { + switch (variation) { + /* Just one color */ + default: + case 1: + ncolors = 1; + break; + /* Two colors */ + case 2: + ncolors = 2; + break; + /* More than two colors */ + case 3: + ncolors = SDLTest_RandomIntegerInRange(8, 16); + break; + } + + result = SDL_CreatePalette(ncolors); + SDLTest_AssertPass("Call to SDL_CreatePalette(%d)", ncolors); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result->ncolors == ncolors, "Verify value of result.ncolors; expected: %u, got %u", ncolors, result->ncolors); + if (result->ncolors > 0) { + SDLTest_AssertCheck(result->colors != NULL, "Verify value of result.colors is not NULL"); + if (result->colors != NULL) { + for (i = 0; i < result->ncolors; i++) { + SDLTest_AssertCheck(result->colors[i].r == 255, "Verify value of result.colors[%d].r; expected: 255, got %u", i, result->colors[i].r); + SDLTest_AssertCheck(result->colors[i].g == 255, "Verify value of result.colors[%d].g; expected: 255, got %u", i, result->colors[i].g); + SDLTest_AssertCheck(result->colors[i].b == 255, "Verify value of result.colors[%d].b; expected: 255, got %u", i, result->colors[i].b); + } + } + } + + /* Deallocate again */ + SDL_DestroyPalette(result); + SDLTest_AssertPass("Call to SDL_DestroyPalette()"); + } + } + + /* Negative cases */ + + /* Invalid number of colors */ + for (ncolors = 0; ncolors > -3; ncolors--) { + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + result = SDL_CreatePalette(ncolors); + SDLTest_AssertPass("Call to SDL_CreatePalette(%d)", ncolors); + SDLTest_AssertCheck(result == NULL, "Verify result is NULL"); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError, error); + } + } + + /* Invalid free pointer */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_DestroyPalette(NULL); + SDLTest_AssertPass("Call to SDL_DestroyPalette(NULL)"); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error == NULL || error[0] == '\0', "Validate that error message is empty"); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Pixels test cases */ +static const SDLTest_TestCaseReference pixelsTest1 = { + (SDLTest_TestCaseFp)pixels_allocFreeFormat, "pixels_allocFreeFormat", "Call to SDL_CreatePixelFormat and SDL_DestroyPixelFormat", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference pixelsTest2 = { + (SDLTest_TestCaseFp)pixels_allocFreePalette, "pixels_allocFreePalette", "Call to SDL_CreatePalette and SDL_DestroyPalette", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference pixelsTest3 = { + (SDLTest_TestCaseFp)pixels_getPixelFormatName, "pixels_getPixelFormatName", "Call to SDL_GetPixelFormatName", TEST_ENABLED +}; + +/* Sequence of Pixels test cases */ +static const SDLTest_TestCaseReference *pixelsTests[] = { + &pixelsTest1, &pixelsTest2, &pixelsTest3, NULL +}; + +/* Pixels test suite (global) */ +SDLTest_TestSuiteReference pixelsTestSuite = { + "Pixels", + NULL, + pixelsTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_platform.c b/vendor/sdl-3.0.0/test/testautomation_platform.c new file mode 100644 index 0000000..516c186 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_platform.c @@ -0,0 +1,592 @@ +/** + * Original code: automated SDL platform test written by Edgar Simo "bobbens" + * Extended and updated by aschiffler at ferzkopp dot net + */ +#include +#include +#include "testautomation_suites.h" + +/* ================= Test Case Implementation ================== */ + +/* Helper functions */ + +/** + * \brief Compare sizes of types. + * + * @note Watcom C flags these as Warning 201: "Unreachable code" if you just + * compare them directly, so we push it through a function to keep the + * compiler quiet. --ryan. + */ +static int compareSizeOfType(size_t sizeoftype, size_t hardcodetype) +{ + return sizeoftype != hardcodetype; +} + +/* Test case functions */ + +/** + * \brief Tests type sizes. + */ +static int platform_testTypes(void *arg) +{ + int ret; + + ret = compareSizeOfType(sizeof(Uint8), 1); + SDLTest_AssertCheck(ret == 0, "sizeof(Uint8) = %u, expected 1", (unsigned int)sizeof(Uint8)); + + ret = compareSizeOfType(sizeof(Uint16), 2); + SDLTest_AssertCheck(ret == 0, "sizeof(Uint16) = %u, expected 2", (unsigned int)sizeof(Uint16)); + + ret = compareSizeOfType(sizeof(Uint32), 4); + SDLTest_AssertCheck(ret == 0, "sizeof(Uint32) = %u, expected 4", (unsigned int)sizeof(Uint32)); + + ret = compareSizeOfType(sizeof(Uint64), 8); + SDLTest_AssertCheck(ret == 0, "sizeof(Uint64) = %u, expected 8", (unsigned int)sizeof(Uint64)); + + return TEST_COMPLETED; +} + +/** + * \brief Tests platform endianness and SDL_SwapXY functions. + */ +static int platform_testEndianessAndSwap(void *arg) +{ + int real_byteorder; + int real_floatwordorder = 0; + Uint16 value = 0x1234; + Uint16 value16 = 0xCDAB; + Uint16 swapped16 = 0xABCD; + Uint32 value32 = 0xEFBEADDE; + Uint32 swapped32 = 0xDEADBEEF; + + union + { + double d; + Uint32 ui32[2]; + } value_double; + + Uint64 value64, swapped64; + value64 = 0xEFBEADDE; + value64 <<= 32; + value64 |= 0xCDAB3412; + swapped64 = 0x1234ABCD; + swapped64 <<= 32; + swapped64 |= 0xDEADBEEF; + value_double.d = 3.141593; + + if ((*((char *)&value) >> 4) == 0x1) { + real_byteorder = SDL_BIG_ENDIAN; + } else { + real_byteorder = SDL_LIL_ENDIAN; + } + + /* Test endianness. */ + SDLTest_AssertCheck(real_byteorder == SDL_BYTEORDER, + "Machine detected as %s endian, appears to be %s endian.", + (SDL_BYTEORDER == SDL_LIL_ENDIAN) ? "little" : "big", + (real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big"); + + if (value_double.ui32[0] == 0x82c2bd7f && value_double.ui32[1] == 0x400921fb) { + real_floatwordorder = SDL_LIL_ENDIAN; + } else if (value_double.ui32[0] == 0x400921fb && value_double.ui32[1] == 0x82c2bd7f) { + real_floatwordorder = SDL_BIG_ENDIAN; + } + + /* Test endianness. */ + SDLTest_AssertCheck(real_floatwordorder == SDL_FLOATWORDORDER, + "Machine detected as having %s endian float word order, appears to be %s endian.", + (SDL_FLOATWORDORDER == SDL_LIL_ENDIAN) ? "little" : "big", + (real_floatwordorder == SDL_LIL_ENDIAN) ? "little" : (real_floatwordorder == SDL_BIG_ENDIAN) ? "big" + : "unknown"); + + /* Test 16 swap. */ + SDLTest_AssertCheck(SDL_Swap16(value16) == swapped16, + "SDL_Swap16(): 16 bit swapped: 0x%X => 0x%X", + value16, SDL_Swap16(value16)); + + /* Test 32 swap. */ + SDLTest_AssertCheck(SDL_Swap32(value32) == swapped32, + "SDL_Swap32(): 32 bit swapped: 0x%" SDL_PRIX32 " => 0x%" SDL_PRIX32, + value32, SDL_Swap32(value32)); + + /* Test 64 swap. */ + SDLTest_AssertCheck(SDL_Swap64(value64) == swapped64, + "SDL_Swap64(): 64 bit swapped: 0x%" SDL_PRIX64 " => 0x%" SDL_PRIX64, + value64, SDL_Swap64(value64)); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_GetXYZ() functions + * \sa SDL_GetPlatform + * \sa SDL_GetCPUCount + * \sa SDL_GetRevision + * \sa SDL_GetCPUCacheLineSize + */ +static int platform_testGetFunctions(void *arg) +{ + const char *platform; + const char *revision; + int ret; + size_t len; + + platform = SDL_GetPlatform(); + SDLTest_AssertPass("SDL_GetPlatform()"); + SDLTest_AssertCheck(platform != NULL, "SDL_GetPlatform() != NULL"); + if (platform != NULL) { + len = SDL_strlen(platform); + SDLTest_AssertCheck(len > 0, + "SDL_GetPlatform(): expected non-empty platform, was platform: '%s', len: %i", + platform, + (int)len); + } + + ret = SDL_GetCPUCount(); + SDLTest_AssertPass("SDL_GetCPUCount()"); + SDLTest_AssertCheck(ret > 0, + "SDL_GetCPUCount(): expected count > 0, was: %i", + ret); + + ret = SDL_GetCPUCacheLineSize(); + SDLTest_AssertPass("SDL_GetCPUCacheLineSize()"); + SDLTest_AssertCheck(ret >= 0, + "SDL_GetCPUCacheLineSize(): expected size >= 0, was: %i", + ret); + + revision = SDL_GetRevision(); + SDLTest_AssertPass("SDL_GetRevision()"); + SDLTest_AssertCheck(revision != NULL, "SDL_GetRevision() != NULL"); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_HasXYZ() functions + * \sa SDL_HasAltiVec + * \sa SDL_HasMMX + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + * \sa SDL_HasAVX + */ +static int platform_testHasFunctions(void *arg) +{ + /* TODO: independently determine and compare values as well */ + + SDL_HasAltiVec(); + SDLTest_AssertPass("SDL_HasAltiVec()"); + + SDL_HasMMX(); + SDLTest_AssertPass("SDL_HasMMX()"); + + SDL_HasSSE(); + SDLTest_AssertPass("SDL_HasSSE()"); + + SDL_HasSSE2(); + SDLTest_AssertPass("SDL_HasSSE2()"); + + SDL_HasSSE3(); + SDLTest_AssertPass("SDL_HasSSE3()"); + + SDL_HasSSE41(); + SDLTest_AssertPass("SDL_HasSSE41()"); + + SDL_HasSSE42(); + SDLTest_AssertPass("SDL_HasSSE42()"); + + SDL_HasAVX(); + SDLTest_AssertPass("SDL_HasAVX()"); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_GetVersion + * \sa SDL_GetVersion + */ +static int platform_testGetVersion(void *arg) +{ + SDL_version linked; + int major = SDL_MAJOR_VERSION; + int minor = SDL_MINOR_VERSION; + + SDL_GetVersion(&linked); + SDLTest_AssertCheck(linked.major >= major, + "SDL_GetVersion(): returned major %i (>= %i)", + linked.major, + major); + SDLTest_AssertCheck(linked.minor >= minor, + "SDL_GetVersion(): returned minor %i (>= %i)", + linked.minor, + minor); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_VERSION macro + */ +static int platform_testSDLVersion(void *arg) +{ + SDL_version compiled; + int major = SDL_MAJOR_VERSION; + int minor = SDL_MINOR_VERSION; + + SDL_VERSION(&compiled); + SDLTest_AssertCheck(compiled.major >= major, + "SDL_VERSION() returned major %i (>= %i)", + compiled.major, + major); + SDLTest_AssertCheck(compiled.minor >= minor, + "SDL_VERSION() returned minor %i (>= %i)", + compiled.minor, + minor); + + return TEST_COMPLETED; +} + +/** + * \brief Tests default SDL_Init + */ +static int platform_testDefaultInit(void *arg) +{ + int ret; + int subsystem; + + subsystem = SDL_WasInit(SDL_INIT_EVERYTHING); + SDLTest_AssertCheck(subsystem != 0, + "SDL_WasInit(0): returned %i, expected != 0", + subsystem); + + ret = SDL_Init(SDL_WasInit(SDL_INIT_EVERYTHING)); + SDLTest_AssertCheck(ret == 0, + "SDL_Init(0): returned %i, expected 0, error: %s", + ret, + SDL_GetError()); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_Get/Set/ClearError + * \sa SDL_GetError + * \sa SDL_SetError + * \sa SDL_ClearError + */ +static int platform_testGetSetClearError(void *arg) +{ + int result; + const char *testError = "Testing"; + const char *lastError; + size_t len; + + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == 0, + "SDL_GetError(): no message expected, len: %i", (int)len); + } + + result = SDL_SetError("%s", testError); + SDLTest_AssertPass("SDL_SetError()"); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + lastError = SDL_GetError(); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == SDL_strlen(testError), + "SDL_GetError(): expected message len %i, was len: %i", + (int)SDL_strlen(testError), + (int)len); + SDLTest_AssertCheck(SDL_strcmp(lastError, testError) == 0, + "SDL_GetError(): expected message %s, was message: %s", + testError, + lastError); + } + + /* Clean up */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_SetError with empty input + * \sa SDL_SetError + */ +static int platform_testSetErrorEmptyInput(void *arg) +{ + int result; + const char *testError = ""; + const char *lastError; + size_t len; + + result = SDL_SetError("%s", testError); + SDLTest_AssertPass("SDL_SetError()"); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + lastError = SDL_GetError(); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == SDL_strlen(testError), + "SDL_GetError(): expected message len %i, was len: %i", + (int)SDL_strlen(testError), + (int)len); + SDLTest_AssertCheck(SDL_strcmp(lastError, testError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + testError, + lastError); + } + + /* Clean up */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +#ifdef HAVE_WFORMAT_OVERFLOW +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-overflow" +#endif + +/** + * \brief Tests SDL_SetError with invalid input + * \sa SDL_SetError + */ +static int platform_testSetErrorInvalidInput(void *arg) +{ + int result; + const char *invalidError = NULL; + const char *probeError = "Testing"; + const char *lastError; + size_t len; + + /* Reset */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* Check for no-op */ + result = SDL_SetError("%s", invalidError); + SDLTest_AssertPass("SDL_SetError()"); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + lastError = SDL_GetError(); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == 0 || SDL_strcmp(lastError, "(null)") == 0, + "SDL_GetError(): expected message len 0, was len: %i", + (int)len); + } + + /* Set */ + result = SDL_SetError("%s", probeError); + SDLTest_AssertPass("SDL_SetError('%s')", probeError); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + + /* Check for no-op */ + result = SDL_SetError("%s", invalidError); + SDLTest_AssertPass("SDL_SetError(NULL)"); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + lastError = SDL_GetError(); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == 0 || SDL_strcmp(lastError, "(null)") == 0, + "SDL_GetError(): expected message len 0, was len: %i", + (int)len); + } + + /* Reset */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* Set and check */ + result = SDL_SetError("%s", probeError); + SDLTest_AssertPass("SDL_SetError()"); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + lastError = SDL_GetError(); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == SDL_strlen(probeError), + "SDL_GetError(): expected message len %i, was len: %i", + (int)SDL_strlen(probeError), + (int)len); + SDLTest_AssertCheck(SDL_strcmp(lastError, probeError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + probeError, + lastError); + } + + /* Clean up */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +#ifdef HAVE_WFORMAT_OVERFLOW +#pragma GCC diagnostic pop +#endif + +/** + * \brief Tests SDL_GetPowerInfo + * \sa SDL_GetPowerInfo + */ +static int platform_testGetPowerInfo(void *arg) +{ + SDL_PowerState state; + SDL_PowerState stateAgain; + int secs; + int secsAgain; + int pct; + int pctAgain; + + state = SDL_GetPowerInfo(&secs, &pct); + SDLTest_AssertPass("SDL_GetPowerInfo()"); + SDLTest_AssertCheck( + state == SDL_POWERSTATE_UNKNOWN || + state == SDL_POWERSTATE_ON_BATTERY || + state == SDL_POWERSTATE_NO_BATTERY || + state == SDL_POWERSTATE_CHARGING || + state == SDL_POWERSTATE_CHARGED, + "SDL_GetPowerInfo(): state %i is one of the expected values", + (int)state); + + if (state == SDL_POWERSTATE_ON_BATTERY) { + SDLTest_AssertCheck( + secs >= 0, + "SDL_GetPowerInfo(): on battery, secs >= 0, was: %i", + secs); + SDLTest_AssertCheck( + (pct >= 0) && (pct <= 100), + "SDL_GetPowerInfo(): on battery, pct=[0,100], was: %i", + pct); + } + + if (state == SDL_POWERSTATE_UNKNOWN || + state == SDL_POWERSTATE_NO_BATTERY) { + SDLTest_AssertCheck( + secs == -1, + "SDL_GetPowerInfo(): no battery, secs == -1, was: %i", + secs); + SDLTest_AssertCheck( + pct == -1, + "SDL_GetPowerInfo(): no battery, pct == -1, was: %i", + pct); + } + + /* Partial return value variations */ + stateAgain = SDL_GetPowerInfo(&secsAgain, NULL); + SDLTest_AssertCheck( + state == stateAgain, + "State %i returned when only 'secs' requested", + stateAgain); + SDLTest_AssertCheck( + secs == secsAgain, + "Value %i matches when only 'secs' requested", + secsAgain); + stateAgain = SDL_GetPowerInfo(NULL, &pctAgain); + SDLTest_AssertCheck( + state == stateAgain, + "State %i returned when only 'pct' requested", + stateAgain); + SDLTest_AssertCheck( + pct == pctAgain, + "Value %i matches when only 'pct' requested", + pctAgain); + stateAgain = SDL_GetPowerInfo(NULL, NULL); + SDLTest_AssertCheck( + state == stateAgain, + "State %i returned when no value requested", + stateAgain); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Platform test cases */ +static const SDLTest_TestCaseReference platformTest1 = { + (SDLTest_TestCaseFp)platform_testTypes, "platform_testTypes", "Tests predefined types", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference platformTest2 = { + (SDLTest_TestCaseFp)platform_testEndianessAndSwap, "platform_testEndianessAndSwap", "Tests endianness and swap functions", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference platformTest3 = { + (SDLTest_TestCaseFp)platform_testGetFunctions, "platform_testGetFunctions", "Tests various SDL_GetXYZ functions", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference platformTest4 = { + (SDLTest_TestCaseFp)platform_testHasFunctions, "platform_testHasFunctions", "Tests various SDL_HasXYZ functions", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference platformTest5 = { + (SDLTest_TestCaseFp)platform_testGetVersion, "platform_testGetVersion", "Tests SDL_GetVersion function", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference platformTest6 = { + (SDLTest_TestCaseFp)platform_testSDLVersion, "platform_testSDLVersion", "Tests SDL_VERSION macro", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference platformTest7 = { + (SDLTest_TestCaseFp)platform_testDefaultInit, "platform_testDefaultInit", "Tests default SDL_Init", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference platformTest8 = { + (SDLTest_TestCaseFp)platform_testGetSetClearError, "platform_testGetSetClearError", "Tests SDL_Get/Set/ClearError", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference platformTest9 = { + (SDLTest_TestCaseFp)platform_testSetErrorEmptyInput, "platform_testSetErrorEmptyInput", "Tests SDL_SetError with empty input", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference platformTest10 = { + (SDLTest_TestCaseFp)platform_testSetErrorInvalidInput, "platform_testSetErrorInvalidInput", "Tests SDL_SetError with invalid input", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference platformTest11 = { + (SDLTest_TestCaseFp)platform_testGetPowerInfo, "platform_testGetPowerInfo", "Tests SDL_GetPowerInfo function", TEST_ENABLED +}; + +/* Sequence of Platform test cases */ +static const SDLTest_TestCaseReference *platformTests[] = { + &platformTest1, + &platformTest2, + &platformTest3, + &platformTest4, + &platformTest5, + &platformTest6, + &platformTest7, + &platformTest8, + &platformTest9, + &platformTest10, + &platformTest11, + NULL +}; + +/* Platform test suite (global) */ +SDLTest_TestSuiteReference platformTestSuite = { + "Platform", + NULL, + platformTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_properties.c b/vendor/sdl-3.0.0/test/testautomation_properties.c new file mode 100644 index 0000000..a02edff --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_properties.c @@ -0,0 +1,190 @@ +/** + * Properties test suite + */ + +#include +#include +#include "testautomation_suites.h" + +/* Test case functions */ + +/** + * \brief Test basic functionality + */ +static int properties_testBasic(void *arg) +{ + SDL_PropertiesID props; + char key[2], expected_value[2]; + void *value; + int i, result; + + props = SDL_CreateProperties(); + SDLTest_AssertPass("Call to SDL_CreateProperties()"); + SDLTest_AssertCheck(props != 0, + "Verify props were created, got: %" SDL_PRIu32 "", props); + + for (i = 0; i < 10; ++i) { + SDL_snprintf(key, SDL_arraysize(key), "%c", 'a' + i); + SDL_snprintf(expected_value, SDL_arraysize(expected_value), "%c", 'a' + i); + result = SDL_SetProperty(props, key, expected_value, NULL, NULL); + SDLTest_AssertPass("Call to SDL_SetProperty()"); + SDLTest_AssertCheck(result == 0, + "Verify property value was set, got: %d", result); + value = SDL_GetProperty(props, key); + SDLTest_AssertPass("Call to SDL_GetProperty()"); + SDLTest_AssertCheck(value && SDL_strcmp((const char *)value, expected_value) == 0, + "Verify property value was set, got %s, expected %s", value ? (const char *)value : "NULL", expected_value); + } + + for (i = 0; i < 10; ++i) { + SDL_snprintf(key, SDL_arraysize(key), "%c", 'a' + i); + result = SDL_SetProperty(props, key, NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_SetProperty(NULL)"); + SDLTest_AssertCheck(result == 0, + "Verify property value was set, got: %d", result); + value = SDL_GetProperty(props, key); + SDLTest_AssertPass("Call to SDL_GetProperty()"); + SDLTest_AssertCheck(value == NULL, + "Verify property value was set, got %s, expected NULL", (const char *)value); + } + + SDL_DestroyProperties(props); + + return TEST_COMPLETED; +} + +/** + * \brief Test cleanup functionality + */ +static void SDLCALL cleanup(void *userdata, void *value) +{ + int *count = (int *)userdata; + ++(*count); +} +static int properties_testCleanup(void *arg) +{ + SDL_PropertiesID props; + char key[2], expected_value[2]; + int i, count; + + props = SDL_CreateProperties(); + + SDLTest_AssertPass("Call to SDL_SetProperty(cleanup)"); + count = 0; + SDL_SetProperty(props, "a", "0", cleanup, &count); + SDL_SetProperty(props, "a", NULL, cleanup, &count); + SDLTest_AssertCheck(count == 1, + "Verify cleanup for deleting property, got %d, expected 1", count); + + SDLTest_AssertPass("Call to SDL_DestroyProperties()"); + count = 0; + for (i = 0; i < 10; ++i) { + SDL_snprintf(key, SDL_arraysize(key), "%c", 'a' + i); + SDL_snprintf(expected_value, SDL_arraysize(expected_value), "%c", 'a' + i); + SDL_SetProperty(props, key, expected_value, cleanup, &count); + } + SDL_DestroyProperties(props); + SDLTest_AssertCheck(count == 10, + "Verify cleanup for destroying properties, got %d, expected 10", count); + + return TEST_COMPLETED; +} + +/** + * \brief Test locking functionality + */ +struct properties_thread_data +{ + SDL_bool done; + SDL_PropertiesID props; +}; +static int properties_thread(void *arg) +{ + struct properties_thread_data *data = (struct properties_thread_data *)arg; + + while (!data->done) { + SDL_LockProperties(data->props); + SDL_SetProperty(data->props, "a", "thread_loop", NULL, NULL); + SDL_UnlockProperties(data->props); + } + SDL_LockProperties(data->props); + SDL_SetProperty(data->props, "a", "thread_done", NULL, NULL); + SDL_UnlockProperties(data->props); + return 0; +} +static int properties_testLocking(void *arg) +{ + struct properties_thread_data data; + SDL_Thread *thread; + void *value; + + SDLTest_AssertPass("Testing property locking"); + data.done = SDL_FALSE; + data.props = SDL_CreateProperties(); + SDLTest_AssertPass("Setting property to 'init'"); + SDL_SetProperty(data.props, "a", "init", NULL, NULL); + thread = SDL_CreateThread(properties_thread, "properties_thread", &data); + if (thread) { + SDLTest_AssertPass("Waiting for property to change to 'thread_loop'"); + for ( ; ; ) + { + SDL_Delay(10); + SDL_LockProperties(data.props); + value = SDL_GetProperty(data.props, "a"); + SDL_UnlockProperties(data.props); + + if (!value || SDL_strcmp((const char *)value, "thread_loop") == 0) { + break; + } + } + SDLTest_AssertCheck(value && SDL_strcmp((const char *)value, "thread_loop") == 0, + "After thread loop, property is %s, expected 'thread_loop'", value ? (const char *)value : "NULL"); + + SDLTest_AssertPass("Setting property to 'main'"); + SDL_LockProperties(data.props); + SDL_SetProperty(data.props, "a", "main", NULL, NULL); + SDL_Delay(100); + value = SDL_GetProperty(data.props, "a"); + SDLTest_AssertCheck(value && SDL_strcmp((const char *)value, "main") == 0, + "After 100ms sleep, property is %s, expected 'main'", value ? (const char *)value : "NULL"); + SDL_UnlockProperties(data.props); + + data.done = SDL_TRUE; + SDL_WaitThread(thread, NULL); + + value = SDL_GetProperty(data.props, "a"); + SDLTest_AssertCheck(value && SDL_strcmp((const char *)value, "thread_done") == 0, + "After thread complete, property is %s, expected 'thread_done'", value ? (const char *)value : "NULL"); + } + SDL_DestroyProperties(data.props); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Properties test cases */ +static const SDLTest_TestCaseReference propertiesTest1 = { + (SDLTest_TestCaseFp)properties_testBasic, "properties_testBasic", "Test basic property functionality", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference propertiesTest2 = { + (SDLTest_TestCaseFp)properties_testCleanup, "properties_testCleanup", "Test property cleanup functionality", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference propertiesTest3 = { + (SDLTest_TestCaseFp)properties_testLocking, "properties_testLocking", "Test property locking functionality", TEST_ENABLED +}; + +/* Sequence of Properties test cases */ +static const SDLTest_TestCaseReference *propertiesTests[] = { + &propertiesTest1, &propertiesTest2, &propertiesTest3, NULL +}; + +/* Properties test suite (global) */ +SDLTest_TestSuiteReference propertiesTestSuite = { + "Properties", + NULL, + propertiesTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_rect.c b/vendor/sdl-3.0.0/test/testautomation_rect.c new file mode 100644 index 0000000..ba6ac47 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_rect.c @@ -0,0 +1,1821 @@ +/** + * Original code: automated SDL rect test written by Edgar Simo "bobbens" + * New/updated tests: aschiffler at ferzkopp dot net + */ +#include +#include +#include "testautomation_suites.h" + +/* ================= Test Case Implementation ================== */ + +/* Helper functions */ + +/** + * \brief Private helper to check SDL_GetRectAndLineIntersection results + */ +static void validateIntersectRectAndLineResults( + SDL_bool intersection, SDL_bool expectedIntersection, + SDL_Rect *rect, SDL_Rect *refRect, + int x1, int y1, int x2, int y2, + int x1Ref, int y1Ref, int x2Ref, int y2Ref) +{ + SDLTest_AssertCheck(intersection == expectedIntersection, + "Check for correct intersection result: expected %s, got %s intersecting rect (%d,%d,%d,%d) with line (%d,%d - %d,%d)", + (expectedIntersection == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (intersection == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + refRect->x, refRect->y, refRect->w, refRect->h, + x1Ref, y1Ref, x2Ref, y2Ref); + SDLTest_AssertCheck(rect->x == refRect->x && rect->y == refRect->y && rect->w == refRect->w && rect->h == refRect->h, + "Check that source rectangle was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rect->x, rect->y, rect->w, rect->h, + refRect->x, refRect->y, refRect->w, refRect->h); + SDLTest_AssertCheck(x1 == x1Ref && y1 == y1Ref && x2 == x2Ref && y2 == y2Ref, + "Check if line was incorrectly clipped or modified: got (%d,%d - %d,%d) expected (%d,%d - %d,%d)", + x1, y1, x2, y2, + x1Ref, y1Ref, x2Ref, y2Ref); +} + +/* Test case functions */ + +/** + * \brief Tests SDL_GetRectAndLineIntersection() clipping cases + * + * \sa SDL_GetRectAndLineIntersection + */ +static int rect_testIntersectRectAndLine(void *arg) +{ + SDL_Rect refRect = { 0, 0, 32, 32 }; + SDL_Rect rect; + int x1, y1; + int x2, y2; + SDL_bool intersected; + + int xLeft = -SDLTest_RandomIntegerInRange(1, refRect.w); + int xRight = refRect.w + SDLTest_RandomIntegerInRange(1, refRect.w); + int yTop = -SDLTest_RandomIntegerInRange(1, refRect.h); + int yBottom = refRect.h + SDLTest_RandomIntegerInRange(1, refRect.h); + + x1 = xLeft; + y1 = 15; + x2 = xRight; + y2 = 15; + rect = refRect; + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, &y2); + validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 0, 15, 31, 15); + + x1 = 15; + y1 = yTop; + x2 = 15; + y2 = yBottom; + rect = refRect; + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, &y2); + validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 15, 0, 15, 31); + + x1 = -refRect.w; + y1 = -refRect.h; + x2 = 2 * refRect.w; + y2 = 2 * refRect.h; + rect = refRect; + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, &y2); + validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 0, 0, 31, 31); + + x1 = 2 * refRect.w; + y1 = 2 * refRect.h; + x2 = -refRect.w; + y2 = -refRect.h; + rect = refRect; + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, &y2); + validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 31, 31, 0, 0); + + x1 = -1; + y1 = 32; + x2 = 32; + y2 = -1; + rect = refRect; + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, &y2); + validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 0, 31, 31, 0); + + x1 = 32; + y1 = -1; + x2 = -1; + y2 = 32; + rect = refRect; + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, &y2); + validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 31, 0, 0, 31); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_GetRectAndLineIntersection() non-clipping case line inside + * + * \sa SDL_GetRectAndLineIntersection + */ +static int rect_testIntersectRectAndLineInside(void *arg) +{ + SDL_Rect refRect = { 0, 0, 32, 32 }; + SDL_Rect rect; + int x1, y1; + int x2, y2; + SDL_bool intersected; + + int xmin = refRect.x; + int xmax = refRect.x + refRect.w - 1; + int ymin = refRect.y; + int ymax = refRect.y + refRect.h - 1; + int x1Ref = SDLTest_RandomIntegerInRange(xmin + 1, xmax - 1); + int y1Ref = SDLTest_RandomIntegerInRange(ymin + 1, ymax - 1); + int x2Ref = SDLTest_RandomIntegerInRange(xmin + 1, xmax - 1); + int y2Ref = SDLTest_RandomIntegerInRange(ymin + 1, ymax - 1); + + x1 = x1Ref; + y1 = y1Ref; + x2 = x2Ref; + y2 = y2Ref; + rect = refRect; + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, &y2); + validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, x1Ref, y1Ref, x2Ref, y2Ref); + + x1 = x1Ref; + y1 = y1Ref; + x2 = xmax; + y2 = ymax; + rect = refRect; + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, &y2); + validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, x1Ref, y1Ref, xmax, ymax); + + x1 = xmin; + y1 = ymin; + x2 = x2Ref; + y2 = y2Ref; + rect = refRect; + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, &y2); + validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, xmin, ymin, x2Ref, y2Ref); + + x1 = xmin; + y1 = ymin; + x2 = xmax; + y2 = ymax; + rect = refRect; + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, &y2); + validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, xmin, ymin, xmax, ymax); + + x1 = xmin; + y1 = ymax; + x2 = xmax; + y2 = ymin; + rect = refRect; + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, &y2); + validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, xmin, ymax, xmax, ymin); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_GetRectAndLineIntersection() non-clipping cases outside + * + * \sa SDL_GetRectAndLineIntersection + */ +static int rect_testIntersectRectAndLineOutside(void *arg) +{ + SDL_Rect refRect = { 0, 0, 32, 32 }; + SDL_Rect rect; + int x1, y1; + int x2, y2; + SDL_bool intersected; + + int xLeft = -SDLTest_RandomIntegerInRange(1, refRect.w); + int xRight = refRect.w + SDLTest_RandomIntegerInRange(1, refRect.w); + int yTop = -SDLTest_RandomIntegerInRange(1, refRect.h); + int yBottom = refRect.h + SDLTest_RandomIntegerInRange(1, refRect.h); + + x1 = xLeft; + y1 = 0; + x2 = xLeft; + y2 = 31; + rect = refRect; + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, &y2); + validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, xLeft, 0, xLeft, 31); + + x1 = xRight; + y1 = 0; + x2 = xRight; + y2 = 31; + rect = refRect; + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, &y2); + validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, xRight, 0, xRight, 31); + + x1 = 0; + y1 = yTop; + x2 = 31; + y2 = yTop; + rect = refRect; + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, &y2); + validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, 0, yTop, 31, yTop); + + x1 = 0; + y1 = yBottom; + x2 = 31; + y2 = yBottom; + rect = refRect; + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, &y2); + validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, 0, yBottom, 31, yBottom); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_GetRectAndLineIntersection() with empty rectangle + * + * \sa SDL_GetRectAndLineIntersection + */ +static int rect_testIntersectRectAndLineEmpty(void *arg) +{ + SDL_Rect refRect; + SDL_Rect rect; + int x1, y1, x1Ref, y1Ref; + int x2, y2, x2Ref, y2Ref; + SDL_bool intersected; + + refRect.x = SDLTest_RandomIntegerInRange(1, 1024); + refRect.y = SDLTest_RandomIntegerInRange(1, 1024); + refRect.w = 0; + refRect.h = 0; + x1Ref = refRect.x; + y1Ref = refRect.y; + x2Ref = SDLTest_RandomIntegerInRange(1, 1024); + y2Ref = SDLTest_RandomIntegerInRange(1, 1024); + + x1 = x1Ref; + y1 = y1Ref; + x2 = x2Ref; + y2 = y2Ref; + rect = refRect; + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, &y2); + validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, x1Ref, y1Ref, x2Ref, y2Ref); + + return TEST_COMPLETED; +} + +/** + * \brief Negative tests against SDL_GetRectAndLineIntersection() with invalid parameters + * + * \sa SDL_GetRectAndLineIntersection + */ +static int rect_testIntersectRectAndLineParam(void *arg) +{ + SDL_Rect rect = { 0, 0, 32, 32 }; + int x1 = rect.w / 2; + int y1 = rect.h / 2; + int x2 = x1; + int y2 = 2 * rect.h; + SDL_bool intersected; + + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, &y2); + SDLTest_AssertCheck(intersected == SDL_TRUE, "Check that intersection result was SDL_TRUE"); + + intersected = SDL_GetRectAndLineIntersection((SDL_Rect *)NULL, &x1, &y1, &x2, &y2); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 1st parameter is NULL"); + intersected = SDL_GetRectAndLineIntersection(&rect, (int *)NULL, &y1, &x2, &y2); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 2nd parameter is NULL"); + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, (int *)NULL, &x2, &y2); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 3rd parameter is NULL"); + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, (int *)NULL, &y2); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 4th parameter is NULL"); + intersected = SDL_GetRectAndLineIntersection(&rect, &x1, &y1, &x2, (int *)NULL); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 5th parameter is NULL"); + intersected = SDL_GetRectAndLineIntersection((SDL_Rect *)NULL, (int *)NULL, (int *)NULL, (int *)NULL, (int *)NULL); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when all parameters are NULL"); + + return TEST_COMPLETED; +} + +/** + * \brief Private helper to check SDL_HasRectIntersection results + */ +static void validateHasIntersectionResults( + SDL_bool intersection, SDL_bool expectedIntersection, + SDL_Rect *rectA, SDL_Rect *rectB, SDL_Rect *refRectA, SDL_Rect *refRectB) +{ + SDLTest_AssertCheck(intersection == expectedIntersection, + "Check intersection result: expected %s, got %s intersecting A (%d,%d,%d,%d) with B (%d,%d,%d,%d)", + (expectedIntersection == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (intersection == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + rectA->x, rectA->y, rectA->w, rectA->h, + rectB->x, rectB->y, rectB->w, rectB->h); + SDLTest_AssertCheck(rectA->x == refRectA->x && rectA->y == refRectA->y && rectA->w == refRectA->w && rectA->h == refRectA->h, + "Check that source rectangle A was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectA->x, rectA->y, rectA->w, rectA->h, + refRectA->x, refRectA->y, refRectA->w, refRectA->h); + SDLTest_AssertCheck(rectB->x == refRectB->x && rectB->y == refRectB->y && rectB->w == refRectB->w && rectB->h == refRectB->h, + "Check that source rectangle B was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectB->x, rectB->y, rectB->w, rectB->h, + refRectB->x, refRectB->y, refRectB->w, refRectB->h); +} + +/** + * \brief Private helper to check SDL_GetRectIntersection results + */ +static void validateIntersectRectResults( + SDL_bool intersection, SDL_bool expectedIntersection, + SDL_Rect *rectA, SDL_Rect *rectB, SDL_Rect *refRectA, SDL_Rect *refRectB, + SDL_Rect *result, SDL_Rect *expectedResult) +{ + validateHasIntersectionResults(intersection, expectedIntersection, rectA, rectB, refRectA, refRectB); + if (result && expectedResult) { + SDLTest_AssertCheck(result->x == expectedResult->x && result->y == expectedResult->y && result->w == expectedResult->w && result->h == expectedResult->h, + "Check that intersection of rectangles A (%d,%d,%d,%d) and B (%d,%d,%d,%d) was correctly calculated, got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectA->x, rectA->y, rectA->w, rectA->h, + rectB->x, rectB->y, rectB->w, rectB->h, + result->x, result->y, result->w, result->h, + expectedResult->x, expectedResult->y, expectedResult->w, expectedResult->h); + } +} + +/** + * \brief Private helper to check SDL_GetRectUnion results + */ +static void validateUnionRectResults( + SDL_Rect *rectA, SDL_Rect *rectB, SDL_Rect *refRectA, SDL_Rect *refRectB, + SDL_Rect *result, SDL_Rect *expectedResult) +{ + SDLTest_AssertCheck(rectA->x == refRectA->x && rectA->y == refRectA->y && rectA->w == refRectA->w && rectA->h == refRectA->h, + "Check that source rectangle A was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectA->x, rectA->y, rectA->w, rectA->h, + refRectA->x, refRectA->y, refRectA->w, refRectA->h); + SDLTest_AssertCheck(rectB->x == refRectB->x && rectB->y == refRectB->y && rectB->w == refRectB->w && rectB->h == refRectB->h, + "Check that source rectangle B was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectB->x, rectB->y, rectB->w, rectB->h, + refRectB->x, refRectB->y, refRectB->w, refRectB->h); + SDLTest_AssertCheck(result->x == expectedResult->x && result->y == expectedResult->y && result->w == expectedResult->w && result->h == expectedResult->h, + "Check that union of rectangles A (%d,%d,%d,%d) and B (%d,%d,%d,%d) was correctly calculated, got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectA->x, rectA->y, rectA->w, rectA->h, + rectB->x, rectB->y, rectB->w, rectB->h, + result->x, result->y, result->w, result->h, + expectedResult->x, expectedResult->y, expectedResult->w, expectedResult->h); +} + +/** + * \brief Private helper to check SDL_RectEmpty results + */ +static void validateRectEmptyResults( + SDL_bool empty, SDL_bool expectedEmpty, + SDL_Rect *rect, SDL_Rect *refRect) +{ + SDLTest_AssertCheck(empty == expectedEmpty, + "Check for correct empty result: expected %s, got %s testing (%d,%d,%d,%d)", + (expectedEmpty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (empty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + rect->x, rect->y, rect->w, rect->h); + SDLTest_AssertCheck(rect->x == refRect->x && rect->y == refRect->y && rect->w == refRect->w && rect->h == refRect->h, + "Check that source rectangle was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rect->x, rect->y, rect->w, rect->h, + refRect->x, refRect->y, refRect->w, refRect->h); +} + +/** + * \brief Private helper to check SDL_RectsEqual results + */ +static void validateRectEqualsResults( + SDL_bool equals, SDL_bool expectedEquals, + SDL_Rect *rectA, SDL_Rect *rectB, SDL_Rect *refRectA, SDL_Rect *refRectB) +{ + SDLTest_AssertCheck(equals == expectedEquals, + "Check for correct equals result: expected %s, got %s testing (%d,%d,%d,%d) and (%d,%d,%d,%d)", + (expectedEquals == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (equals == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + rectA->x, rectA->y, rectA->w, rectA->h, + rectB->x, rectB->y, rectB->w, rectB->h); + SDLTest_AssertCheck(rectA->x == refRectA->x && rectA->y == refRectA->y && rectA->w == refRectA->w && rectA->h == refRectA->h, + "Check that source rectangle A was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectA->x, rectA->y, rectA->w, rectA->h, + refRectA->x, refRectA->y, refRectA->w, refRectA->h); + SDLTest_AssertCheck(rectB->x == refRectB->x && rectB->y == refRectB->y && rectB->w == refRectB->w && rectB->h == refRectB->h, + "Check that source rectangle B was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectB->x, rectB->y, rectB->w, rectB->h, + refRectB->x, refRectB->y, refRectB->w, refRectB->h); +} + +/** + * \brief Private helper to check SDL_RectsEqualFloat results + */ +static void validateFRectEqualsResults( + SDL_bool equals, SDL_bool expectedEquals, + SDL_FRect *rectA, SDL_FRect *rectB, SDL_FRect *refRectA, SDL_FRect *refRectB) +{ + int cmpRes; + SDLTest_AssertCheck(equals == expectedEquals, + "Check for correct equals result: expected %s, got %s testing (%f,%f,%f,%f) and (%f,%f,%f,%f)", + (expectedEquals == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (equals == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + rectA->x, rectA->y, rectA->w, rectA->h, + rectB->x, rectB->y, rectB->w, rectB->h); + cmpRes = SDL_memcmp(rectA, refRectA, sizeof(*rectA)); + SDLTest_AssertCheck(cmpRes == 0, + "Check that source rectangle A was not modified: got (%f,%f,%f,%f) expected (%f,%f,%f,%f)", + rectA->x, rectA->y, rectA->w, rectA->h, + refRectA->x, refRectA->y, refRectA->w, refRectA->h); + cmpRes = SDL_memcmp(rectB, refRectB, sizeof(*rectB)); + SDLTest_AssertCheck(cmpRes == 0, + "Check that source rectangle B was not modified: got (%f,%f,%f,%f) expected (%f,%f,%f,%f)", + rectB->x, rectB->y, rectB->w, rectB->h, + refRectB->x, refRectB->y, refRectB->w, refRectB->h); +} + +/** + * \brief Tests SDL_GetRectIntersection() with B fully inside A + * + * \sa SDL_GetRectIntersection + */ +static int rect_testIntersectRectInside(void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_Rect result; + SDL_bool intersection; + + /* rectB fully contained in rectA */ + refRectB.x = 0; + refRectB.y = 0; + refRectB.w = SDLTest_RandomIntegerInRange(refRectA.x + 1, refRectA.x + refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(refRectA.y + 1, refRectA.y + refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + intersection = SDL_GetRectIntersection(&rectA, &rectB, &result); + validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &refRectB); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_GetRectIntersection() with B fully outside A + * + * \sa SDL_GetRectIntersection + */ +static int rect_testIntersectRectOutside(void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_Rect result; + SDL_bool intersection; + + /* rectB fully outside of rectA */ + refRectB.x = refRectA.x + refRectA.w + SDLTest_RandomIntegerInRange(1, 10); + refRectB.y = refRectA.y + refRectA.h + SDLTest_RandomIntegerInRange(1, 10); + refRectB.w = refRectA.w; + refRectB.h = refRectA.h; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_GetRectIntersection(&rectA, &rectB, &result); + validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_GetRectIntersection() with B partially intersecting A + * + * \sa SDL_GetRectIntersection + */ +static int rect_testIntersectRectPartial(void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_Rect result; + SDL_Rect expectedResult; + SDL_bool intersection; + + /* rectB partially contained in rectA */ + refRectB.x = SDLTest_RandomIntegerInRange(refRectA.x + 1, refRectA.x + refRectA.w - 1); + refRectB.y = SDLTest_RandomIntegerInRange(refRectA.y + 1, refRectA.y + refRectA.h - 1); + refRectB.w = refRectA.w; + refRectB.h = refRectA.h; + rectA = refRectA; + rectB = refRectB; + expectedResult.x = refRectB.x; + expectedResult.y = refRectB.y; + expectedResult.w = refRectA.w - refRectB.x; + expectedResult.h = refRectA.h - refRectB.y; + intersection = SDL_GetRectIntersection(&rectA, &rectB, &result); + validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* rectB right edge */ + refRectB.x = rectA.w - 1; + refRectB.y = rectA.y; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + expectedResult.x = refRectB.x; + expectedResult.y = refRectB.y; + expectedResult.w = 1; + expectedResult.h = refRectB.h; + intersection = SDL_GetRectIntersection(&rectA, &rectB, &result); + validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* rectB left edge */ + refRectB.x = 1 - rectA.w; + refRectB.y = rectA.y; + refRectB.w = refRectA.w; + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + expectedResult.x = 0; + expectedResult.y = refRectB.y; + expectedResult.w = 1; + expectedResult.h = refRectB.h; + intersection = SDL_GetRectIntersection(&rectA, &rectB, &result); + validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* rectB bottom edge */ + refRectB.x = rectA.x; + refRectB.y = rectA.h - 1; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + expectedResult.x = refRectB.x; + expectedResult.y = refRectB.y; + expectedResult.w = refRectB.w; + expectedResult.h = 1; + intersection = SDL_GetRectIntersection(&rectA, &rectB, &result); + validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* rectB top edge */ + refRectB.x = rectA.x; + refRectB.y = 1 - rectA.h; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = rectA.h; + rectA = refRectA; + rectB = refRectB; + expectedResult.x = refRectB.x; + expectedResult.y = 0; + expectedResult.w = refRectB.w; + expectedResult.h = 1; + intersection = SDL_GetRectIntersection(&rectA, &rectB, &result); + validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_GetRectIntersection() with 1x1 pixel sized rectangles + * + * \sa SDL_GetRectIntersection + */ +static int rect_testIntersectRectPoint(void *arg) +{ + SDL_Rect refRectA = { 0, 0, 1, 1 }; + SDL_Rect refRectB = { 0, 0, 1, 1 }; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_Rect result; + SDL_bool intersection; + int offsetX, offsetY; + + /* intersecting pixels */ + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectB.x = refRectA.x; + refRectB.y = refRectA.y; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_GetRectIntersection(&rectA, &rectB, &result); + validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &refRectA); + + /* non-intersecting pixels cases */ + for (offsetX = -1; offsetX <= 1; offsetX++) { + for (offsetY = -1; offsetY <= 1; offsetY++) { + if (offsetX != 0 || offsetY != 0) { + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectB.x = refRectA.x; + refRectB.y = refRectA.y; + refRectB.x += offsetX; + refRectB.y += offsetY; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_GetRectIntersection(&rectA, &rectB, &result); + validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + } + } + } + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_GetRectIntersection() with empty rectangles + * + * \sa SDL_GetRectIntersection + */ +static int rect_testIntersectRectEmpty(void *arg) +{ + SDL_Rect refRectA; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_Rect result; + SDL_bool intersection; + SDL_bool empty; + + /* Rect A empty */ + result.w = SDLTest_RandomIntegerInRange(1, 100); + result.h = SDLTest_RandomIntegerInRange(1, 100); + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectA.w = 0; + refRectA.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_GetRectIntersection(&rectA, &rectB, &result); + validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + empty = SDL_RectEmpty(&result); + SDLTest_AssertCheck(empty == SDL_TRUE, "Validate result is empty Rect; got: %s", (empty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + + /* Rect B empty */ + result.w = SDLTest_RandomIntegerInRange(1, 100); + result.h = SDLTest_RandomIntegerInRange(1, 100); + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectB.w = 0; + refRectB.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_GetRectIntersection(&rectA, &rectB, &result); + validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + empty = SDL_RectEmpty(&result); + SDLTest_AssertCheck(empty == SDL_TRUE, "Validate result is empty Rect; got: %s", (empty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + + /* Rect A and B empty */ + result.w = SDLTest_RandomIntegerInRange(1, 100); + result.h = SDLTest_RandomIntegerInRange(1, 100); + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectA.w = 0; + refRectA.h = 0; + refRectB.w = 0; + refRectB.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_GetRectIntersection(&rectA, &rectB, &result); + validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + empty = SDL_RectEmpty(&result); + SDLTest_AssertCheck(empty == SDL_TRUE, "Validate result is empty Rect; got: %s", (empty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + + return TEST_COMPLETED; +} + +/** + * \brief Negative tests against SDL_GetRectIntersection() with invalid parameters + * + * \sa SDL_GetRectIntersection + */ +static int rect_testIntersectRectParam(void *arg) +{ + SDL_Rect rectA; + SDL_Rect rectB = { 0 }; + SDL_Rect result; + SDL_bool intersection; + + /* invalid parameter combinations */ + intersection = SDL_GetRectIntersection((SDL_Rect *)NULL, &rectB, &result); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 1st parameter is NULL"); + intersection = SDL_GetRectIntersection(&rectA, (SDL_Rect *)NULL, &result); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 2nd parameter is NULL"); + intersection = SDL_GetRectIntersection(&rectA, &rectB, (SDL_Rect *)NULL); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 3rd parameter is NULL"); + intersection = SDL_GetRectIntersection((SDL_Rect *)NULL, (SDL_Rect *)NULL, &result); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 1st and 2nd parameters are NULL"); + intersection = SDL_GetRectIntersection((SDL_Rect *)NULL, &rectB, (SDL_Rect *)NULL); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 1st and 3rd parameters are NULL "); + intersection = SDL_GetRectIntersection((SDL_Rect *)NULL, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when all parameters are NULL"); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_HasRectIntersection() with B fully inside A + * + * \sa SDL_HasRectIntersection + */ +static int rect_testHasIntersectionInside(void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool intersection; + + /* rectB fully contained in rectA */ + refRectB.x = 0; + refRectB.y = 0; + refRectB.w = SDLTest_RandomIntegerInRange(refRectA.x + 1, refRectA.x + refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(refRectA.y + 1, refRectA.y + refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasRectIntersection(&rectA, &rectB); + validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_HasRectIntersection() with B fully outside A + * + * \sa SDL_HasRectIntersection + */ +static int rect_testHasIntersectionOutside(void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool intersection; + + /* rectB fully outside of rectA */ + refRectB.x = refRectA.x + refRectA.w + SDLTest_RandomIntegerInRange(1, 10); + refRectB.y = refRectA.y + refRectA.h + SDLTest_RandomIntegerInRange(1, 10); + refRectB.w = refRectA.w; + refRectB.h = refRectA.h; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasRectIntersection(&rectA, &rectB); + validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_HasRectIntersection() with B partially intersecting A + * + * \sa SDL_HasRectIntersection + */ +static int rect_testHasIntersectionPartial(void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool intersection; + + /* rectB partially contained in rectA */ + refRectB.x = SDLTest_RandomIntegerInRange(refRectA.x + 1, refRectA.x + refRectA.w - 1); + refRectB.y = SDLTest_RandomIntegerInRange(refRectA.y + 1, refRectA.y + refRectA.h - 1); + refRectB.w = refRectA.w; + refRectB.h = refRectA.h; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasRectIntersection(&rectA, &rectB); + validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + /* rectB right edge */ + refRectB.x = rectA.w - 1; + refRectB.y = rectA.y; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasRectIntersection(&rectA, &rectB); + validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + /* rectB left edge */ + refRectB.x = 1 - rectA.w; + refRectB.y = rectA.y; + refRectB.w = refRectA.w; + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasRectIntersection(&rectA, &rectB); + validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + /* rectB bottom edge */ + refRectB.x = rectA.x; + refRectB.y = rectA.h - 1; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasRectIntersection(&rectA, &rectB); + validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + /* rectB top edge */ + refRectB.x = rectA.x; + refRectB.y = 1 - rectA.h; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = rectA.h; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasRectIntersection(&rectA, &rectB); + validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_HasRectIntersection() with 1x1 pixel sized rectangles + * + * \sa SDL_HasRectIntersection + */ +static int rect_testHasIntersectionPoint(void *arg) +{ + SDL_Rect refRectA = { 0, 0, 1, 1 }; + SDL_Rect refRectB = { 0, 0, 1, 1 }; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool intersection; + int offsetX, offsetY; + + /* intersecting pixels */ + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectB.x = refRectA.x; + refRectB.y = refRectA.y; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasRectIntersection(&rectA, &rectB); + validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + /* non-intersecting pixels cases */ + for (offsetX = -1; offsetX <= 1; offsetX++) { + for (offsetY = -1; offsetY <= 1; offsetY++) { + if (offsetX != 0 || offsetY != 0) { + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectB.x = refRectA.x; + refRectB.y = refRectA.y; + refRectB.x += offsetX; + refRectB.y += offsetY; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasRectIntersection(&rectA, &rectB); + validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); + } + } + } + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_HasRectIntersection() with empty rectangles + * + * \sa SDL_HasRectIntersection + */ +static int rect_testHasIntersectionEmpty(void *arg) +{ + SDL_Rect refRectA; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool intersection; + + /* Rect A empty */ + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectA.w = 0; + refRectA.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasRectIntersection(&rectA, &rectB); + validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); + + /* Rect B empty */ + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectB.w = 0; + refRectB.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasRectIntersection(&rectA, &rectB); + validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); + + /* Rect A and B empty */ + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectA.w = 0; + refRectA.h = 0; + refRectB.w = 0; + refRectB.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasRectIntersection(&rectA, &rectB); + validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); + + return TEST_COMPLETED; +} + +/** + * \brief Negative tests against SDL_HasRectIntersection() with invalid parameters + * + * \sa SDL_HasRectIntersection + */ +static int rect_testHasIntersectionParam(void *arg) +{ + SDL_Rect rectA; + SDL_Rect rectB = { 0 }; + SDL_bool intersection; + + /* invalid parameter combinations */ + intersection = SDL_HasRectIntersection((SDL_Rect *)NULL, &rectB); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 1st parameter is NULL"); + intersection = SDL_HasRectIntersection(&rectA, (SDL_Rect *)NULL); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 2nd parameter is NULL"); + intersection = SDL_HasRectIntersection((SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when all parameters are NULL"); + + return TEST_COMPLETED; +} + +/** + * \brief Test SDL_GetRectEnclosingPoints() without clipping + * + * \sa SDL_GetRectEnclosingPoints + */ +static int rect_testEnclosePoints(void *arg) +{ + const int numPoints = 16; + SDL_Point refPoints[16]; + SDL_Point points[16]; + SDL_Rect result; + SDL_bool anyEnclosed; + SDL_bool anyEnclosedNoResult; + SDL_bool expectedEnclosed = SDL_TRUE; + int newx, newy; + int minx = 0, maxx = 0, miny = 0, maxy = 0; + int i; + + /* Create input data, tracking result */ + for (i = 0; i < numPoints; i++) { + newx = SDLTest_RandomIntegerInRange(-1024, 1024); + newy = SDLTest_RandomIntegerInRange(-1024, 1024); + refPoints[i].x = newx; + refPoints[i].y = newy; + points[i].x = newx; + points[i].y = newy; + if (i == 0) { + minx = newx; + maxx = newx; + miny = newy; + maxy = newy; + } else { + if (newx < minx) { + minx = newx; + } + if (newx > maxx) { + maxx = newx; + } + if (newy < miny) { + miny = newy; + } + if (newy > maxy) { + maxy = newy; + } + } + } + + /* Call function and validate - special case: no result requested */ + anyEnclosedNoResult = SDL_GetRectEnclosingPoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertCheck(expectedEnclosed == anyEnclosedNoResult, + "Check expected return value %s, got %s", + (expectedEnclosed == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (anyEnclosedNoResult == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + for (i = 0; i < numPoints; i++) { + SDLTest_AssertCheck(refPoints[i].x == points[i].x && refPoints[i].y == points[i].y, + "Check that source point %i was not modified: expected (%i,%i) actual (%i,%i)", + i, refPoints[i].x, refPoints[i].y, points[i].x, points[i].y); + } + + /* Call function and validate */ + anyEnclosed = SDL_GetRectEnclosingPoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)NULL, &result); + SDLTest_AssertCheck(expectedEnclosed == anyEnclosed, + "Check return value %s, got %s", + (expectedEnclosed == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (anyEnclosed == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + for (i = 0; i < numPoints; i++) { + SDLTest_AssertCheck(refPoints[i].x == points[i].x && refPoints[i].y == points[i].y, + "Check that source point %i was not modified: expected (%i,%i) actual (%i,%i)", + i, refPoints[i].x, refPoints[i].y, points[i].x, points[i].y); + } + SDLTest_AssertCheck(result.x == minx && result.y == miny && result.w == (maxx - minx + 1) && result.h == (maxy - miny + 1), + "Resulting enclosing rectangle incorrect: expected (%i,%i - %i,%i), actual (%i,%i - %i,%i)", + minx, miny, maxx, maxy, result.x, result.y, result.x + result.w - 1, result.y + result.h - 1); + + return TEST_COMPLETED; +} + +/** + * \brief Test SDL_GetRectEnclosingPoints() with repeated input points + * + * \sa SDL_GetRectEnclosingPoints + */ +static int rect_testEnclosePointsRepeatedInput(void *arg) +{ + const int numPoints = 8; + const int halfPoints = 4; + SDL_Point refPoints[8]; + SDL_Point points[8]; + SDL_Rect result; + SDL_bool anyEnclosed; + SDL_bool anyEnclosedNoResult; + SDL_bool expectedEnclosed = SDL_TRUE; + int newx, newy; + int minx = 0, maxx = 0, miny = 0, maxy = 0; + int i; + + /* Create input data, tracking result */ + for (i = 0; i < numPoints; i++) { + if (i < halfPoints) { + newx = SDLTest_RandomIntegerInRange(-1024, 1024); + newy = SDLTest_RandomIntegerInRange(-1024, 1024); + } else { + newx = refPoints[i - halfPoints].x; + newy = refPoints[i - halfPoints].y; + } + refPoints[i].x = newx; + refPoints[i].y = newy; + points[i].x = newx; + points[i].y = newy; + if (i == 0) { + minx = newx; + maxx = newx; + miny = newy; + maxy = newy; + } else { + if (newx < minx) { + minx = newx; + } + if (newx > maxx) { + maxx = newx; + } + if (newy < miny) { + miny = newy; + } + if (newy > maxy) { + maxy = newy; + } + } + } + + /* Call function and validate - special case: no result requested */ + anyEnclosedNoResult = SDL_GetRectEnclosingPoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertCheck(expectedEnclosed == anyEnclosedNoResult, + "Check return value %s, got %s", + (expectedEnclosed == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (anyEnclosedNoResult == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + for (i = 0; i < numPoints; i++) { + SDLTest_AssertCheck(refPoints[i].x == points[i].x && refPoints[i].y == points[i].y, + "Check that source point %i was not modified: expected (%i,%i) actual (%i,%i)", + i, refPoints[i].x, refPoints[i].y, points[i].x, points[i].y); + } + + /* Call function and validate */ + anyEnclosed = SDL_GetRectEnclosingPoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)NULL, &result); + SDLTest_AssertCheck(expectedEnclosed == anyEnclosed, + "Check return value %s, got %s", + (expectedEnclosed == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (anyEnclosed == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + for (i = 0; i < numPoints; i++) { + SDLTest_AssertCheck(refPoints[i].x == points[i].x && refPoints[i].y == points[i].y, + "Check that source point %i was not modified: expected (%i,%i) actual (%i,%i)", + i, refPoints[i].x, refPoints[i].y, points[i].x, points[i].y); + } + SDLTest_AssertCheck(result.x == minx && result.y == miny && result.w == (maxx - minx + 1) && result.h == (maxy - miny + 1), + "Check resulting enclosing rectangle: expected (%i,%i - %i,%i), actual (%i,%i - %i,%i)", + minx, miny, maxx, maxy, result.x, result.y, result.x + result.w - 1, result.y + result.h - 1); + + return TEST_COMPLETED; +} + +/** + * \brief Test SDL_GetRectEnclosingPoints() with clipping + * + * \sa SDL_GetRectEnclosingPoints + */ +static int rect_testEnclosePointsWithClipping(void *arg) +{ + const int numPoints = 16; + SDL_Point refPoints[16]; + SDL_Point points[16]; + SDL_Rect refClip; + SDL_Rect clip; + SDL_Rect result; + SDL_bool anyEnclosed; + SDL_bool anyEnclosedNoResult; + SDL_bool expectedEnclosed = SDL_FALSE; + int newx, newy; + int minx = 0, maxx = 0, miny = 0, maxy = 0; + int i; + + /* Setup clipping rectangle */ + refClip.x = SDLTest_RandomIntegerInRange(-1024, 1024); + refClip.y = SDLTest_RandomIntegerInRange(-1024, 1024); + refClip.w = SDLTest_RandomIntegerInRange(1, 1024); + refClip.h = SDLTest_RandomIntegerInRange(1, 1024); + + /* Create input data, tracking result */ + for (i = 0; i < numPoints; i++) { + newx = SDLTest_RandomIntegerInRange(-1024, 1024); + newy = SDLTest_RandomIntegerInRange(-1024, 1024); + refPoints[i].x = newx; + refPoints[i].y = newy; + points[i].x = newx; + points[i].y = newy; + if ((newx >= refClip.x) && (newx < (refClip.x + refClip.w)) && + (newy >= refClip.y) && (newy < (refClip.y + refClip.h))) { + if (expectedEnclosed == SDL_FALSE) { + minx = newx; + maxx = newx; + miny = newy; + maxy = newy; + } else { + if (newx < minx) { + minx = newx; + } + if (newx > maxx) { + maxx = newx; + } + if (newy < miny) { + miny = newy; + } + if (newy > maxy) { + maxy = newy; + } + } + expectedEnclosed = SDL_TRUE; + } + } + + /* Call function and validate - special case: no result requested */ + clip = refClip; + anyEnclosedNoResult = SDL_GetRectEnclosingPoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)&clip, (SDL_Rect *)NULL); + SDLTest_AssertCheck(expectedEnclosed == anyEnclosedNoResult, + "Expected return value %s, got %s", + (expectedEnclosed == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (anyEnclosedNoResult == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + for (i = 0; i < numPoints; i++) { + SDLTest_AssertCheck(refPoints[i].x == points[i].x && refPoints[i].y == points[i].y, + "Check that source point %i was not modified: expected (%i,%i) actual (%i,%i)", + i, refPoints[i].x, refPoints[i].y, points[i].x, points[i].y); + } + SDLTest_AssertCheck(refClip.x == clip.x && refClip.y == clip.y && refClip.w == clip.w && refClip.h == clip.h, + "Check that source clipping rectangle was not modified"); + + /* Call function and validate */ + anyEnclosed = SDL_GetRectEnclosingPoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)&clip, &result); + SDLTest_AssertCheck(expectedEnclosed == anyEnclosed, + "Check return value %s, got %s", + (expectedEnclosed == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (anyEnclosed == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + for (i = 0; i < numPoints; i++) { + SDLTest_AssertCheck(refPoints[i].x == points[i].x && refPoints[i].y == points[i].y, + "Check that source point %i was not modified: expected (%i,%i) actual (%i,%i)", + i, refPoints[i].x, refPoints[i].y, points[i].x, points[i].y); + } + SDLTest_AssertCheck(refClip.x == clip.x && refClip.y == clip.y && refClip.w == clip.w && refClip.h == clip.h, + "Check that source clipping rectangle was not modified"); + if (expectedEnclosed == SDL_TRUE) { + SDLTest_AssertCheck(result.x == minx && result.y == miny && result.w == (maxx - minx + 1) && result.h == (maxy - miny + 1), + "Check resulting enclosing rectangle: expected (%i,%i - %i,%i), actual (%i,%i - %i,%i)", + minx, miny, maxx, maxy, result.x, result.y, result.x + result.w - 1, result.y + result.h - 1); + } + + /* Empty clipping rectangle */ + clip.w = 0; + clip.h = 0; + expectedEnclosed = SDL_FALSE; + anyEnclosed = SDL_GetRectEnclosingPoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)&clip, &result); + SDLTest_AssertCheck(expectedEnclosed == anyEnclosed, + "Check return value %s, got %s", + (expectedEnclosed == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (anyEnclosed == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + + return TEST_COMPLETED; +} + +/** + * \brief Negative tests against SDL_GetRectEnclosingPoints() with invalid parameters + * + * \sa SDL_GetRectEnclosingPoints + */ +static int rect_testEnclosePointsParam(void *arg) +{ + SDL_Point points[1]; + int count; + SDL_Rect clip = { 0 }; + SDL_Rect result; + SDL_bool anyEnclosed; + + /* invalid parameter combinations */ + anyEnclosed = SDL_GetRectEnclosingPoints((SDL_Point *)NULL, 1, (const SDL_Rect *)&clip, &result); + SDLTest_AssertCheck(anyEnclosed == SDL_FALSE, "Check that functions returns SDL_FALSE when 1st parameter is NULL"); + anyEnclosed = SDL_GetRectEnclosingPoints((const SDL_Point *)points, 0, (const SDL_Rect *)&clip, &result); + SDLTest_AssertCheck(anyEnclosed == SDL_FALSE, "Check that functions returns SDL_FALSE when 2nd parameter is 0"); + count = SDLTest_RandomIntegerInRange(-100, -1); + anyEnclosed = SDL_GetRectEnclosingPoints((const SDL_Point *)points, count, (const SDL_Rect *)&clip, &result); + SDLTest_AssertCheck(anyEnclosed == SDL_FALSE, "Check that functions returns SDL_FALSE when 2nd parameter is %i (negative)", count); + anyEnclosed = SDL_GetRectEnclosingPoints((SDL_Point *)NULL, 0, (const SDL_Rect *)&clip, &result); + SDLTest_AssertCheck(anyEnclosed == SDL_FALSE, "Check that functions returns SDL_FALSE when 1st parameter is NULL and 2nd parameter was 0"); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_GetRectUnion() where rect B is outside rect A + * + * \sa SDL_GetRectUnion + */ +static int rect_testUnionRectOutside(void *arg) +{ + SDL_Rect refRectA, refRectB; + SDL_Rect rectA, rectB; + SDL_Rect expectedResult; + SDL_Rect result; + int minx, maxx, miny, maxy; + int dx, dy; + + /* Union 1x1 outside */ + for (dx = -1; dx < 2; dx++) { + for (dy = -1; dy < 2; dy++) { + if ((dx != 0) || (dy != 0)) { + refRectA.x = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w = 1; + refRectA.h = 1; + refRectB.x = SDLTest_RandomIntegerInRange(-1024, 1024) + dx * 2048; + refRectB.y = SDLTest_RandomIntegerInRange(-1024, 1024) + dx * 2048; + refRectB.w = 1; + refRectB.h = 1; + minx = (refRectA.x < refRectB.x) ? refRectA.x : refRectB.x; + maxx = (refRectA.x > refRectB.x) ? refRectA.x : refRectB.x; + miny = (refRectA.y < refRectB.y) ? refRectA.y : refRectB.y; + maxy = (refRectA.y > refRectB.y) ? refRectA.y : refRectB.y; + expectedResult.x = minx; + expectedResult.y = miny; + expectedResult.w = maxx - minx + 1; + expectedResult.h = maxy - miny + 1; + rectA = refRectA; + rectB = refRectB; + SDL_GetRectUnion(&rectA, &rectB, &result); + validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + } + } + } + + /* Union outside overlap */ + for (dx = -1; dx < 2; dx++) { + for (dy = -1; dy < 2; dy++) { + if ((dx != 0) || (dy != 0)) { + refRectA.x = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w = SDLTest_RandomIntegerInRange(256, 512); + refRectA.h = SDLTest_RandomIntegerInRange(256, 512); + refRectB.x = refRectA.x + 1 + dx * 2; + refRectB.y = refRectA.y + 1 + dy * 2; + refRectB.w = refRectA.w - 2; + refRectB.h = refRectA.h - 2; + expectedResult = refRectA; + if (dx == -1) { + expectedResult.x--; + } + if (dy == -1) { + expectedResult.y--; + } + if ((dx == 1) || (dx == -1)) { + expectedResult.w++; + } + if ((dy == 1) || (dy == -1)) { + expectedResult.h++; + } + rectA = refRectA; + rectB = refRectB; + SDL_GetRectUnion(&rectA, &rectB, &result); + validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + } + } + } + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_GetRectUnion() where rect A or rect B are empty + * + * \sa SDL_GetRectUnion + */ +static int rect_testUnionRectEmpty(void *arg) +{ + SDL_Rect refRectA, refRectB; + SDL_Rect rectA, rectB; + SDL_Rect expectedResult; + SDL_Rect result; + + /* A empty */ + refRectA.x = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w = 0; + refRectA.h = 0; + refRectB.x = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.y = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.w = SDLTest_RandomIntegerInRange(1, 1024); + refRectB.h = SDLTest_RandomIntegerInRange(1, 1024); + expectedResult = refRectB; + rectA = refRectA; + rectB = refRectB; + SDL_GetRectUnion(&rectA, &rectB, &result); + validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* B empty */ + refRectA.x = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w = SDLTest_RandomIntegerInRange(1, 1024); + refRectA.h = SDLTest_RandomIntegerInRange(1, 1024); + refRectB.x = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.y = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.w = 0; + refRectB.h = 0; + expectedResult = refRectA; + rectA = refRectA; + rectB = refRectB; + SDL_GetRectUnion(&rectA, &rectB, &result); + validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* A and B empty */ + refRectA.x = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w = 0; + refRectA.h = 0; + refRectB.x = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.y = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.w = 0; + refRectB.h = 0; + result.x = 0; + result.y = 0; + result.w = 0; + result.h = 0; + expectedResult = result; + rectA = refRectA; + rectB = refRectB; + SDL_GetRectUnion(&rectA, &rectB, &result); + validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_GetRectUnion() where rect B is inside rect A + * + * \sa SDL_GetRectUnion + */ +static int rect_testUnionRectInside(void *arg) +{ + SDL_Rect refRectA, refRectB; + SDL_Rect rectA, rectB; + SDL_Rect expectedResult; + SDL_Rect result; + int dx, dy; + + /* Union 1x1 with itself */ + refRectA.x = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w = 1; + refRectA.h = 1; + expectedResult = refRectA; + rectA = refRectA; + SDL_GetRectUnion(&rectA, &rectA, &result); + validateUnionRectResults(&rectA, &rectA, &refRectA, &refRectA, &result, &expectedResult); + + /* Union 1x1 somewhere inside */ + refRectA.x = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w = SDLTest_RandomIntegerInRange(256, 1024); + refRectA.h = SDLTest_RandomIntegerInRange(256, 1024); + refRectB.x = refRectA.x + 1 + SDLTest_RandomIntegerInRange(1, refRectA.w - 2); + refRectB.y = refRectA.y + 1 + SDLTest_RandomIntegerInRange(1, refRectA.h - 2); + refRectB.w = 1; + refRectB.h = 1; + expectedResult = refRectA; + rectA = refRectA; + rectB = refRectB; + SDL_GetRectUnion(&rectA, &rectB, &result); + validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* Union inside with edges modified */ + for (dx = -1; dx < 2; dx++) { + for (dy = -1; dy < 2; dy++) { + if ((dx != 0) || (dy != 0)) { + refRectA.x = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w = SDLTest_RandomIntegerInRange(256, 1024); + refRectA.h = SDLTest_RandomIntegerInRange(256, 1024); + refRectB = refRectA; + if (dx == -1) { + refRectB.x++; + } + if ((dx == 1) || (dx == -1)) { + refRectB.w--; + } + if (dy == -1) { + refRectB.y++; + } + if ((dy == 1) || (dy == -1)) { + refRectB.h--; + } + expectedResult = refRectA; + rectA = refRectA; + rectB = refRectB; + SDL_GetRectUnion(&rectA, &rectB, &result); + validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + } + } + } + + return TEST_COMPLETED; +} + +/** + * \brief Negative tests against SDL_GetRectUnion() with invalid parameters + * + * \sa SDL_GetRectUnion + */ +static int rect_testUnionRectParam(void *arg) +{ + SDL_Rect rectA, rectB = { 0 }; + SDL_Rect result; + + /* invalid parameter combinations */ + SDL_GetRectUnion((SDL_Rect *)NULL, &rectB, &result); + SDLTest_AssertPass("Check that function returns when 1st parameter is NULL"); + SDL_GetRectUnion(&rectA, (SDL_Rect *)NULL, &result); + SDLTest_AssertPass("Check that function returns when 2nd parameter is NULL"); + SDL_GetRectUnion(&rectA, &rectB, (SDL_Rect *)NULL); + SDLTest_AssertPass("Check that function returns when 3rd parameter is NULL"); + SDL_GetRectUnion((SDL_Rect *)NULL, &rectB, (SDL_Rect *)NULL); + SDLTest_AssertPass("Check that function returns when 1st and 3rd parameter are NULL"); + SDL_GetRectUnion(&rectA, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertPass("Check that function returns when 2nd and 3rd parameter are NULL"); + SDL_GetRectUnion((SDL_Rect *)NULL, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertPass("Check that function returns when all parameters are NULL"); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_RectEmpty() with various inputs + * + * \sa SDL_RectEmpty + */ +static int rect_testRectEmpty(void *arg) +{ + SDL_Rect refRect; + SDL_Rect rect; + SDL_bool expectedResult; + SDL_bool result; + int w, h; + + /* Non-empty case */ + refRect.x = SDLTest_RandomIntegerInRange(-1024, 1024); + refRect.y = SDLTest_RandomIntegerInRange(-1024, 1024); + refRect.w = SDLTest_RandomIntegerInRange(256, 1024); + refRect.h = SDLTest_RandomIntegerInRange(256, 1024); + expectedResult = SDL_FALSE; + rect = refRect; + result = SDL_RectEmpty(&rect); + validateRectEmptyResults(result, expectedResult, &rect, &refRect); + + /* Empty case */ + for (w = -1; w < 2; w++) { + for (h = -1; h < 2; h++) { + if ((w != 1) || (h != 1)) { + refRect.x = SDLTest_RandomIntegerInRange(-1024, 1024); + refRect.y = SDLTest_RandomIntegerInRange(-1024, 1024); + refRect.w = w; + refRect.h = h; + expectedResult = SDL_TRUE; + rect = refRect; + result = SDL_RectEmpty(&rect); + validateRectEmptyResults(result, expectedResult, &rect, &refRect); + } + } + } + + return TEST_COMPLETED; +} + +/** + * \brief Negative tests against SDL_RectEmpty() with invalid parameters + * + * \sa SDL_RectEmpty + */ +static int rect_testRectEmptyParam(void *arg) +{ + SDL_bool result; + + /* invalid parameter combinations */ + result = SDL_RectEmpty(NULL); + SDLTest_AssertCheck(result == SDL_TRUE, "Check that function returns TRUE when 1st parameter is NULL"); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_RectsEqual() with various inputs + * + * \sa SDL_RectsEqual + */ +static int rect_testRectEquals(void *arg) +{ + SDL_Rect refRectA; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool expectedResult; + SDL_bool result; + + /* Equals */ + refRectA.x = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y = SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w = SDLTest_RandomIntegerInRange(1, 1024); + refRectA.h = SDLTest_RandomIntegerInRange(1, 1024); + refRectB = refRectA; + expectedResult = SDL_TRUE; + rectA = refRectA; + rectB = refRectB; + result = SDL_RectsEqual(&rectA, &rectB); + validateRectEqualsResults(result, expectedResult, &rectA, &rectB, &refRectA, &refRectB); + + return TEST_COMPLETED; +} + +/** + * \brief Negative tests against SDL_RectsEqual() with invalid parameters + * + * \sa SDL_RectsEqual + */ +static int rect_testRectEqualsParam(void *arg) +{ + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool result; + + /* data setup */ + rectA.x = SDLTest_RandomIntegerInRange(-1024, 1024); + rectA.y = SDLTest_RandomIntegerInRange(-1024, 1024); + rectA.w = SDLTest_RandomIntegerInRange(1, 1024); + rectA.h = SDLTest_RandomIntegerInRange(1, 1024); + rectB.x = SDLTest_RandomIntegerInRange(-1024, 1024); + rectB.y = SDLTest_RandomIntegerInRange(-1024, 1024); + rectB.w = SDLTest_RandomIntegerInRange(1, 1024); + rectB.h = SDLTest_RandomIntegerInRange(1, 1024); + + /* invalid parameter combinations */ + result = SDL_RectsEqual(NULL, &rectB); + SDLTest_AssertCheck(result == SDL_FALSE, "Check that function returns SDL_FALSE when 1st parameter is NULL"); + result = SDL_RectsEqual(&rectA, NULL); + SDLTest_AssertCheck(result == SDL_FALSE, "Check that function returns SDL_FALSE when 2nd parameter is NULL"); + result = SDL_RectsEqual(NULL, NULL); + SDLTest_AssertCheck(result == SDL_FALSE, "Check that function returns SDL_FALSE when 1st and 2nd parameter are NULL"); + + return TEST_COMPLETED; +} + +/** + * \brief Tests SDL_RectsEqualFloat() with various inputs + * + * \sa SDL_RectsEqualFloat + */ +static int rect_testFRectEquals(void *arg) +{ + SDL_FRect refRectA; + SDL_FRect refRectB; + SDL_FRect rectA; + SDL_FRect rectB; + SDL_bool expectedResult; + SDL_bool result; + + /* Equals */ + refRectA.x = (float)SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y = (float)SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w = (float)SDLTest_RandomIntegerInRange(1, 1024); + refRectA.h = (float)SDLTest_RandomIntegerInRange(1, 1024); + refRectB = refRectA; + expectedResult = SDL_TRUE; + rectA = refRectA; + rectB = refRectB; + result = SDL_RectsEqualFloat(&rectA, &rectB); + validateFRectEqualsResults(result, expectedResult, &rectA, &rectB, &refRectA, &refRectB); + + return TEST_COMPLETED; +} + +/** + * \brief Negative tests against SDL_RectsEqualFloat() with invalid parameters + * + * \sa SDL_RectsEqualFloat + */ +static int rect_testFRectEqualsParam(void *arg) +{ + SDL_FRect rectA; + SDL_FRect rectB; + SDL_bool result; + + /* data setup -- For the purpose of this test, the values don't matter. */ + rectA.x = SDLTest_RandomFloat(); + rectA.y = SDLTest_RandomFloat(); + rectA.w = SDLTest_RandomFloat(); + rectA.h = SDLTest_RandomFloat(); + rectB.x = SDLTest_RandomFloat(); + rectB.y = SDLTest_RandomFloat(); + rectB.w = SDLTest_RandomFloat(); + rectB.h = SDLTest_RandomFloat(); + + /* invalid parameter combinations */ + result = SDL_RectsEqualFloat(NULL, &rectB); + SDLTest_AssertCheck(result == SDL_FALSE, "Check that function returns SDL_FALSE when 1st parameter is NULL"); + result = SDL_RectsEqualFloat(&rectA, NULL); + SDLTest_AssertCheck(result == SDL_FALSE, "Check that function returns SDL_FALSE when 2nd parameter is NULL"); + result = SDL_RectsEqualFloat(NULL, NULL); + SDLTest_AssertCheck(result == SDL_FALSE, "Check that function returns SDL_FALSE when 1st and 2nd parameter are NULL"); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Rect test cases */ + +/* SDL_GetRectAndLineIntersection */ +static const SDLTest_TestCaseReference rectTest1 = { + (SDLTest_TestCaseFp)rect_testIntersectRectAndLine, "rect_testIntersectRectAndLine", "Tests SDL_GetRectAndLineIntersection clipping cases", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest2 = { + (SDLTest_TestCaseFp)rect_testIntersectRectAndLineInside, "rect_testIntersectRectAndLineInside", "Tests SDL_GetRectAndLineIntersection with line fully contained in rect", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest3 = { + (SDLTest_TestCaseFp)rect_testIntersectRectAndLineOutside, "rect_testIntersectRectAndLineOutside", "Tests SDL_GetRectAndLineIntersection with line fully outside of rect", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest4 = { + (SDLTest_TestCaseFp)rect_testIntersectRectAndLineEmpty, "rect_testIntersectRectAndLineEmpty", "Tests SDL_GetRectAndLineIntersection with empty rectangle ", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest5 = { + (SDLTest_TestCaseFp)rect_testIntersectRectAndLineParam, "rect_testIntersectRectAndLineParam", "Negative tests against SDL_GetRectAndLineIntersection with invalid parameters", TEST_ENABLED +}; + +/* SDL_GetRectIntersection */ +static const SDLTest_TestCaseReference rectTest6 = { + (SDLTest_TestCaseFp)rect_testIntersectRectInside, "rect_testIntersectRectInside", "Tests SDL_GetRectIntersection with B fully contained in A", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest7 = { + (SDLTest_TestCaseFp)rect_testIntersectRectOutside, "rect_testIntersectRectOutside", "Tests SDL_GetRectIntersection with B fully outside of A", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest8 = { + (SDLTest_TestCaseFp)rect_testIntersectRectPartial, "rect_testIntersectRectPartial", "Tests SDL_GetRectIntersection with B partially intersecting A", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest9 = { + (SDLTest_TestCaseFp)rect_testIntersectRectPoint, "rect_testIntersectRectPoint", "Tests SDL_GetRectIntersection with 1x1 sized rectangles", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest10 = { + (SDLTest_TestCaseFp)rect_testIntersectRectEmpty, "rect_testIntersectRectEmpty", "Tests SDL_GetRectIntersection with empty rectangles", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest11 = { + (SDLTest_TestCaseFp)rect_testIntersectRectParam, "rect_testIntersectRectParam", "Negative tests against SDL_GetRectIntersection with invalid parameters", TEST_ENABLED +}; + +/* SDL_HasRectIntersection */ +static const SDLTest_TestCaseReference rectTest12 = { + (SDLTest_TestCaseFp)rect_testHasIntersectionInside, "rect_testHasIntersectionInside", "Tests SDL_HasRectIntersection with B fully contained in A", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest13 = { + (SDLTest_TestCaseFp)rect_testHasIntersectionOutside, "rect_testHasIntersectionOutside", "Tests SDL_HasRectIntersection with B fully outside of A", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest14 = { + (SDLTest_TestCaseFp)rect_testHasIntersectionPartial, "rect_testHasIntersectionPartial", "Tests SDL_HasRectIntersection with B partially intersecting A", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest15 = { + (SDLTest_TestCaseFp)rect_testHasIntersectionPoint, "rect_testHasIntersectionPoint", "Tests SDL_HasRectIntersection with 1x1 sized rectangles", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest16 = { + (SDLTest_TestCaseFp)rect_testHasIntersectionEmpty, "rect_testHasIntersectionEmpty", "Tests SDL_HasRectIntersection with empty rectangles", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest17 = { + (SDLTest_TestCaseFp)rect_testHasIntersectionParam, "rect_testHasIntersectionParam", "Negative tests against SDL_HasRectIntersection with invalid parameters", TEST_ENABLED +}; + +/* SDL_GetRectEnclosingPoints */ +static const SDLTest_TestCaseReference rectTest18 = { + (SDLTest_TestCaseFp)rect_testEnclosePoints, "rect_testEnclosePoints", "Tests SDL_GetRectEnclosingPoints without clipping", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest19 = { + (SDLTest_TestCaseFp)rect_testEnclosePointsWithClipping, "rect_testEnclosePointsWithClipping", "Tests SDL_GetRectEnclosingPoints with clipping", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest20 = { + (SDLTest_TestCaseFp)rect_testEnclosePointsRepeatedInput, "rect_testEnclosePointsRepeatedInput", "Tests SDL_GetRectEnclosingPoints with repeated input", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest21 = { + (SDLTest_TestCaseFp)rect_testEnclosePointsParam, "rect_testEnclosePointsParam", "Negative tests against SDL_GetRectEnclosingPoints with invalid parameters", TEST_ENABLED +}; + +/* SDL_GetRectUnion */ +static const SDLTest_TestCaseReference rectTest22 = { + (SDLTest_TestCaseFp)rect_testUnionRectInside, "rect_testUnionRectInside", "Tests SDL_GetRectUnion where rect B is inside rect A", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest23 = { + (SDLTest_TestCaseFp)rect_testUnionRectOutside, "rect_testUnionRectOutside", "Tests SDL_GetRectUnion where rect B is outside rect A", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest24 = { + (SDLTest_TestCaseFp)rect_testUnionRectEmpty, "rect_testUnionRectEmpty", "Tests SDL_GetRectUnion where rect A or rect B are empty", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest25 = { + (SDLTest_TestCaseFp)rect_testUnionRectParam, "rect_testUnionRectParam", "Negative tests against SDL_GetRectUnion with invalid parameters", TEST_ENABLED +}; + +/* SDL_RectEmpty */ +static const SDLTest_TestCaseReference rectTest26 = { + (SDLTest_TestCaseFp)rect_testRectEmpty, "rect_testRectEmpty", "Tests SDL_RectEmpty with various inputs", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest27 = { + (SDLTest_TestCaseFp)rect_testRectEmptyParam, "rect_testRectEmptyParam", "Negative tests against SDL_RectEmpty with invalid parameters", TEST_ENABLED +}; + +/* SDL_RectsEqual */ + +static const SDLTest_TestCaseReference rectTest28 = { + (SDLTest_TestCaseFp)rect_testRectEquals, "rect_testRectEquals", "Tests SDL_RectsEqual with various inputs", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest29 = { + (SDLTest_TestCaseFp)rect_testRectEqualsParam, "rect_testRectEqualsParam", "Negative tests against SDL_RectsEqual with invalid parameters", TEST_ENABLED +}; + +/* SDL_RectsEqualFloat */ + +static const SDLTest_TestCaseReference rectTest30 = { + (SDLTest_TestCaseFp)rect_testFRectEquals, "rect_testFRectEquals", "Tests SDL_RectsEqualFloat with various inputs", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rectTest31 = { + (SDLTest_TestCaseFp)rect_testFRectEqualsParam, "rect_testFRectEqualsParam", "Negative tests against SDL_RectsEqualFloat with invalid parameters", TEST_ENABLED +}; + +/** + * \brief Sequence of Rect test cases; functions that handle simple rectangles including overlaps and merges. + */ +static const SDLTest_TestCaseReference *rectTests[] = { + &rectTest1, &rectTest2, &rectTest3, &rectTest4, &rectTest5, &rectTest6, &rectTest7, &rectTest8, &rectTest9, &rectTest10, &rectTest11, &rectTest12, &rectTest13, &rectTest14, + &rectTest15, &rectTest16, &rectTest17, &rectTest18, &rectTest19, &rectTest20, &rectTest21, &rectTest22, &rectTest23, &rectTest24, &rectTest25, &rectTest26, &rectTest27, + &rectTest28, &rectTest29, &rectTest30, &rectTest31, NULL +}; + +/* Rect test suite (global) */ +SDLTest_TestSuiteReference rectTestSuite = { + "Rect", + NULL, + rectTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_render.c b/vendor/sdl-3.0.0/test/testautomation_render.c new file mode 100644 index 0000000..e775ea6 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_render.c @@ -0,0 +1,1291 @@ +/** + * Original code: automated SDL platform test written by Edgar Simo "bobbens" + * Extended and extensively updated by aschiffler at ferzkopp dot net + */ +#include +#include +#include "testautomation_images.h" +#include "testautomation_suites.h" + +/* ================= Test Case Implementation ================== */ + +#define TESTRENDER_SCREEN_W 80 +#define TESTRENDER_SCREEN_H 60 + + +#define RENDER_COMPARE_FORMAT SDL_PIXELFORMAT_ARGB8888 +#define RENDER_COLOR_CLEAR 0xFF000000 +#define RENDER_COLOR_GREEN 0xFF00FF00 + +#define ALLOWABLE_ERROR_OPAQUE 0 +#define ALLOWABLE_ERROR_BLENDED 64 + +#define CHECK_FUNC(FUNC, PARAMS) \ +{ \ + int result = FUNC PARAMS; \ + if (result != 0) { \ + SDLTest_AssertCheck(result == 0, "Validate result from %s, expected: 0, got: %i, %s", #FUNC, result, SDL_GetError()); \ + } \ +} + +/* Test window and renderer */ +static SDL_Window *window = NULL; +static SDL_Renderer *renderer = NULL; + +/* Prototypes for helper functions */ + +static int clearScreen(void); +static void compare(SDL_Surface *reference, int allowable_error); +static int hasTexAlpha(void); +static int hasTexColor(void); +static SDL_Texture *loadTestFace(void); +static int hasBlendModes(void); +static int hasDrawColor(void); +static int isSupported(int code); + +/** + * Create software renderer for tests + */ +static void InitCreateRenderer(void *arg) +{ + int width = 320, height = 240; + int renderer_flags = SDL_RENDERER_ACCELERATED; + renderer = NULL; + window = SDL_CreateWindow("render_testCreateRenderer", width, height, 0); + SDLTest_AssertPass("SDL_CreateWindow()"); + SDLTest_AssertCheck(window != NULL, "Check SDL_CreateWindow result"); + if (window == NULL) { + return; + } + + if (SDL_strcmp(SDL_GetCurrentVideoDriver(), "dummy") == 0) { + renderer_flags = 0; + } + + renderer = SDL_CreateRenderer(window, NULL, renderer_flags); + SDLTest_AssertPass("SDL_CreateRenderer()"); + SDLTest_AssertCheck(renderer != NULL, "Check SDL_CreateRenderer result"); + if (renderer == NULL) { + SDL_DestroyWindow(window); + return; + } +} + +/** + * Destroy renderer for tests + */ +static void CleanupDestroyRenderer(void *arg) +{ + if (renderer != NULL) { + SDL_DestroyRenderer(renderer); + renderer = NULL; + SDLTest_AssertPass("SDL_DestroyRenderer()"); + } + + if (window != NULL) { + SDL_DestroyWindow(window); + window = NULL; + SDLTest_AssertPass("SDL_DestroyWindow"); + } +} + +/** + * \brief Tests call to SDL_GetNumRenderDrivers + * + * \sa SDL_GetNumRenderDrivers + */ +static int render_testGetNumRenderDrivers(void *arg) +{ + int n; + n = SDL_GetNumRenderDrivers(); + SDLTest_AssertCheck(n >= 1, "Number of renderers >= 1, reported as %i", n); + return TEST_COMPLETED; +} + +/** + * \brief Tests the SDL primitives for rendering. + * + * \sa SDL_SetRenderDrawColor + * \sa SDL_RenderFillRect + * \sa SDL_RenderLine + * + */ +static int render_testPrimitives(void *arg) +{ + int ret; + int x, y; + SDL_FRect rect; + SDL_Surface *referenceSurface = NULL; + int checkFailCount1; + int checkFailCount2; + + /* Clear surface. */ + clearScreen(); + + /* Need drawcolor or just skip test. */ + SDLTest_AssertCheck(hasDrawColor(), "_hasDrawColor"); + + /* Draw a rectangle. */ + rect.x = 40.0f; + rect.y = 0.0f; + rect.w = 40.0f; + rect.h = 80.0f; + + CHECK_FUNC(SDL_SetRenderDrawColor, (renderer, 13, 73, 200, SDL_ALPHA_OPAQUE)) + CHECK_FUNC(SDL_RenderFillRect, (renderer, &rect)) + + /* Draw a rectangle. */ + rect.x = 10.0f; + rect.y = 10.0f; + rect.w = 60.0f; + rect.h = 40.0f; + CHECK_FUNC(SDL_SetRenderDrawColor, (renderer, 200, 0, 100, SDL_ALPHA_OPAQUE)) + CHECK_FUNC(SDL_RenderFillRect, (renderer, &rect)) + + /* Draw some points like so: + * X.X.X.X.. + * .X.X.X.X. + * X.X.X.X.. */ + checkFailCount1 = 0; + checkFailCount2 = 0; + for (y = 0; y < 3; y++) { + for (x = y % 2; x < TESTRENDER_SCREEN_W; x += 2) { + ret = SDL_SetRenderDrawColor(renderer, x * y, x * y / 2, x * y / 3, SDL_ALPHA_OPAQUE); + if (ret != 0) { + checkFailCount1++; + } + + ret = SDL_RenderPoint(renderer, (float)x, (float)y); + if (ret != 0) { + checkFailCount2++; + } + } + } + SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_SetRenderDrawColor, expected: 0, got: %i", checkFailCount1); + SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_RenderPoint, expected: 0, got: %i", checkFailCount2); + + /* Draw some lines. */ + CHECK_FUNC(SDL_SetRenderDrawColor, (renderer, 0, 255, 0, SDL_ALPHA_OPAQUE)) + CHECK_FUNC(SDL_RenderLine, (renderer, 0.0f, 30.0f, (float)TESTRENDER_SCREEN_W, 30.0f)) + CHECK_FUNC(SDL_SetRenderDrawColor, (renderer, 55, 55, 5, SDL_ALPHA_OPAQUE)) + CHECK_FUNC(SDL_RenderLine, (renderer, 40.0f, 30.0f, 40.0f, 60.0f)) + CHECK_FUNC(SDL_SetRenderDrawColor, (renderer, 5, 105, 105, SDL_ALPHA_OPAQUE)) + CHECK_FUNC(SDL_RenderLine, (renderer, 0.0f, 0.0f, 29.0f, 29.0f)) + CHECK_FUNC(SDL_RenderLine, (renderer, 29.0f, 30.0f, 0.0f, 59.0f)) + CHECK_FUNC(SDL_RenderLine, (renderer, 79.0f, 0.0f, 50.0f, 29.0f)) + CHECK_FUNC(SDL_RenderLine, (renderer, 79.0f, 59.0f, 50.0f, 30.0f)) + + /* See if it's the same. */ + referenceSurface = SDLTest_ImagePrimitives(); + compare(referenceSurface, ALLOWABLE_ERROR_OPAQUE); + + /* Make current */ + SDL_RenderPresent(renderer); + + /* Clean up. */ + SDL_DestroySurface(referenceSurface); + referenceSurface = NULL; + + return TEST_COMPLETED; +} + +/** + * \brief Tests the SDL primitives with alpha for rendering. + * + * \sa SDL_SetRenderDrawColor + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_RenderFillRect + */ +static int render_testPrimitivesBlend(void *arg) +{ + int ret; + int i, j; + SDL_FRect rect; + SDL_Surface *referenceSurface = NULL; + int checkFailCount1; + int checkFailCount2; + int checkFailCount3; + + /* Clear surface. */ + clearScreen(); + + /* Need drawcolor and blendmode or just skip test. */ + SDLTest_AssertCheck(hasDrawColor(), "_hasDrawColor"); + SDLTest_AssertCheck(hasBlendModes(), "_hasBlendModes"); + + /* Create some rectangles for each blend mode. */ + CHECK_FUNC(SDL_SetRenderDrawColor, (renderer, 255, 255, 255, 0)) + CHECK_FUNC(SDL_SetRenderDrawBlendMode, (renderer, SDL_BLENDMODE_NONE)) + CHECK_FUNC(SDL_RenderFillRect, (renderer, NULL)) + + rect.x = 10.0f; + rect.y = 25.0f; + rect.w = 40.0f; + rect.h = 25.0f; + CHECK_FUNC(SDL_SetRenderDrawColor, (renderer, 240, 10, 10, 75)) + CHECK_FUNC(SDL_SetRenderDrawBlendMode, (renderer, SDL_BLENDMODE_ADD)) + CHECK_FUNC(SDL_RenderFillRect, (renderer, &rect)) + + rect.x = 30.0f; + rect.y = 40.0f; + rect.w = 45.0f; + rect.h = 15.0f; + CHECK_FUNC(SDL_SetRenderDrawColor, (renderer, 10, 240, 10, 100)) + CHECK_FUNC(SDL_SetRenderDrawBlendMode, (renderer, SDL_BLENDMODE_BLEND)) + CHECK_FUNC(SDL_RenderFillRect, (renderer, &rect)) + + rect.x = 25.0f; + rect.y = 25.0f; + rect.w = 25.0f; + rect.h = 25.0f; + CHECK_FUNC(SDL_SetRenderDrawColor, (renderer, 10, 10, 240, 125)) + CHECK_FUNC(SDL_SetRenderDrawBlendMode, (renderer, SDL_BLENDMODE_NONE)) + CHECK_FUNC(SDL_RenderFillRect, (renderer, &rect)) + + /* Draw blended lines, lines for everyone. */ + checkFailCount1 = 0; + checkFailCount2 = 0; + checkFailCount3 = 0; + for (i = 0; i < TESTRENDER_SCREEN_W; i += 2) { + ret = SDL_SetRenderDrawColor(renderer, 60 + 2 * i, 240 - 2 * i, 50, 3 * i); + if (ret != 0) { + checkFailCount1++; + } + + ret = SDL_SetRenderDrawBlendMode(renderer, (((i / 2) % 3) == 0) ? SDL_BLENDMODE_BLEND : (((i / 2) % 3) == 1) ? SDL_BLENDMODE_ADD + : SDL_BLENDMODE_NONE); + if (ret != 0) { + checkFailCount2++; + } + + ret = SDL_RenderLine(renderer, 0.0f, 0.0f, (float)i, 59.0f); + if (ret != 0) { + checkFailCount3++; + } + } + SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_SetRenderDrawColor, expected: 0, got: %i", checkFailCount1); + SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_SetRenderDrawBlendMode, expected: 0, got: %i", checkFailCount2); + SDLTest_AssertCheck(checkFailCount3 == 0, "Validate results from calls to SDL_RenderLine, expected: 0, got: %i", checkFailCount3); + + checkFailCount1 = 0; + checkFailCount2 = 0; + checkFailCount3 = 0; + for (i = 0; i < TESTRENDER_SCREEN_H; i += 2) { + ret = SDL_SetRenderDrawColor(renderer, 60 + 2 * i, 240 - 2 * i, 50, 3 * i); + if (ret != 0) { + checkFailCount1++; + } + + ret = SDL_SetRenderDrawBlendMode(renderer, (((i / 2) % 3) == 0) ? SDL_BLENDMODE_BLEND : (((i / 2) % 3) == 1) ? SDL_BLENDMODE_ADD + : SDL_BLENDMODE_NONE); + if (ret != 0) { + checkFailCount2++; + } + + ret = SDL_RenderLine(renderer, 0.0f, 0.0f, 79.0f, (float)i); + if (ret != 0) { + checkFailCount3++; + } + } + SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_SetRenderDrawColor, expected: 0, got: %i", checkFailCount1); + SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_SetRenderDrawBlendMode, expected: 0, got: %i", checkFailCount2); + SDLTest_AssertCheck(checkFailCount3 == 0, "Validate results from calls to SDL_RenderLine, expected: 0, got: %i", checkFailCount3); + + /* Draw points. */ + checkFailCount1 = 0; + checkFailCount2 = 0; + checkFailCount3 = 0; + for (j = 0; j < TESTRENDER_SCREEN_H; j += 3) { + for (i = 0; i < TESTRENDER_SCREEN_W; i += 3) { + ret = SDL_SetRenderDrawColor(renderer, j * 4, i * 3, j * 4, i * 3); + if (ret != 0) { + checkFailCount1++; + } + + ret = SDL_SetRenderDrawBlendMode(renderer, ((((i + j) / 3) % 3) == 0) ? SDL_BLENDMODE_BLEND : ((((i + j) / 3) % 3) == 1) ? SDL_BLENDMODE_ADD + : SDL_BLENDMODE_NONE); + if (ret != 0) { + checkFailCount2++; + } + + ret = SDL_RenderPoint(renderer, (float)i, (float)j); + if (ret != 0) { + checkFailCount3++; + } + } + } + SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_SetRenderDrawColor, expected: 0, got: %i", checkFailCount1); + SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_SetRenderDrawBlendMode, expected: 0, got: %i", checkFailCount2); + SDLTest_AssertCheck(checkFailCount3 == 0, "Validate results from calls to SDL_RenderPoint, expected: 0, got: %i", checkFailCount3); + + /* See if it's the same. */ + referenceSurface = SDLTest_ImagePrimitivesBlend(); + compare(referenceSurface, ALLOWABLE_ERROR_BLENDED); + + /* Make current */ + SDL_RenderPresent(renderer); + + /* Clean up. */ + SDL_DestroySurface(referenceSurface); + referenceSurface = NULL; + + return TEST_COMPLETED; +} + +/** + * \brief Tests some blitting routines. + * + * \sa SDL_RenderTexture + * \sa SDL_DestroyTexture + */ +static int render_testBlit(void *arg) +{ + int ret; + SDL_FRect rect; + SDL_Texture *tface; + SDL_Surface *referenceSurface = NULL; + Uint32 tformat; + int taccess, tw, th; + int i, j, ni, nj; + int checkFailCount1; + + /* Clear surface. */ + clearScreen(); + + /* Need drawcolor or just skip test. */ + SDLTest_AssertCheck(hasDrawColor(), "_hasDrawColor)"); + + /* Create face surface. */ + tface = loadTestFace(); + SDLTest_AssertCheck(tface != NULL, "Verify loadTestFace() result"); + if (tface == NULL) { + return TEST_ABORTED; + } + + /* Constant values. */ + CHECK_FUNC(SDL_QueryTexture, (tface, &tformat, &taccess, &tw, &th)) + rect.w = (float)tw; + rect.h = (float)th; + ni = TESTRENDER_SCREEN_W - tw; + nj = TESTRENDER_SCREEN_H - th; + + /* Loop blit. */ + checkFailCount1 = 0; + for (j = 0; j <= nj; j += 4) { + for (i = 0; i <= ni; i += 4) { + /* Blitting. */ + rect.x = (float)i; + rect.y = (float)j; + ret = SDL_RenderTexture(renderer, tface, NULL, &rect); + if (ret != 0) { + checkFailCount1++; + } + } + } + SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_RenderTexture, expected: 0, got: %i", checkFailCount1); + + /* See if it's the same */ + referenceSurface = SDLTest_ImageBlit(); + compare(referenceSurface, ALLOWABLE_ERROR_OPAQUE); + + /* Make current */ + SDL_RenderPresent(renderer); + + /* Clean up. */ + SDL_DestroyTexture(tface); + SDL_DestroySurface(referenceSurface); + referenceSurface = NULL; + + return TEST_COMPLETED; +} + +/** + * \brief Blits doing color tests. + * + * \sa SDL_SetTextureColorMod + * \sa SDL_RenderTexture + * \sa SDL_DestroyTexture + */ +static int render_testBlitColor(void *arg) +{ + int ret; + SDL_FRect rect; + SDL_Texture *tface; + SDL_Surface *referenceSurface = NULL; + Uint32 tformat; + int taccess, tw, th; + int i, j, ni, nj; + int checkFailCount1; + int checkFailCount2; + + /* Clear surface. */ + clearScreen(); + + /* Create face surface. */ + tface = loadTestFace(); + SDLTest_AssertCheck(tface != NULL, "Verify loadTestFace() result"); + if (tface == NULL) { + return TEST_ABORTED; + } + + /* Constant values. */ + CHECK_FUNC(SDL_QueryTexture, (tface, &tformat, &taccess, &tw, &th)) + rect.w = (float)tw; + rect.h = (float)th; + ni = TESTRENDER_SCREEN_W - tw; + nj = TESTRENDER_SCREEN_H - th; + + /* Test blitting with color mod. */ + checkFailCount1 = 0; + checkFailCount2 = 0; + for (j = 0; j <= nj; j += 4) { + for (i = 0; i <= ni; i += 4) { + /* Set color mod. */ + ret = SDL_SetTextureColorMod(tface, (255 / nj) * j, (255 / ni) * i, (255 / nj) * j); + if (ret != 0) { + checkFailCount1++; + } + + /* Blitting. */ + rect.x = (float)i; + rect.y = (float)j; + ret = SDL_RenderTexture(renderer, tface, NULL, &rect); + if (ret != 0) { + checkFailCount2++; + } + } + } + SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_SetTextureColorMod, expected: 0, got: %i", checkFailCount1); + SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_RenderTexture, expected: 0, got: %i", checkFailCount2); + + /* See if it's the same. */ + referenceSurface = SDLTest_ImageBlitColor(); + compare(referenceSurface, ALLOWABLE_ERROR_OPAQUE); + + /* Make current */ + SDL_RenderPresent(renderer); + + /* Clean up. */ + SDL_DestroyTexture(tface); + SDL_DestroySurface(referenceSurface); + referenceSurface = NULL; + + return TEST_COMPLETED; +} + +/** + * \brief Tests blitting with alpha. + * + * \sa SDL_SetTextureAlphaMod + * \sa SDL_RenderTexture + * \sa SDL_DestroyTexture + */ +static int render_testBlitAlpha(void *arg) +{ + int ret; + SDL_FRect rect; + SDL_Texture *tface; + SDL_Surface *referenceSurface = NULL; + Uint32 tformat; + int taccess, tw, th; + int i, j, ni, nj; + int checkFailCount1; + int checkFailCount2; + + /* Clear surface. */ + clearScreen(); + + /* Need alpha or just skip test. */ + SDLTest_AssertCheck(hasTexAlpha(), "_hasTexAlpha"); + + /* Create face surface. */ + tface = loadTestFace(); + SDLTest_AssertCheck(tface != NULL, "Verify loadTestFace() result"); + if (tface == NULL) { + return TEST_ABORTED; + } + + /* Constant values. */ + CHECK_FUNC(SDL_QueryTexture, (tface, &tformat, &taccess, &tw, &th)) + rect.w = (float)tw; + rect.h = (float)th; + ni = TESTRENDER_SCREEN_W - tw; + nj = TESTRENDER_SCREEN_H - th; + + /* Test blitting with alpha mod. */ + checkFailCount1 = 0; + checkFailCount2 = 0; + for (j = 0; j <= nj; j += 4) { + for (i = 0; i <= ni; i += 4) { + /* Set alpha mod. */ + ret = SDL_SetTextureAlphaMod(tface, (255 / ni) * i); + if (ret != 0) { + checkFailCount1++; + } + + /* Blitting. */ + rect.x = (float)i; + rect.y = (float)j; + ret = SDL_RenderTexture(renderer, tface, NULL, &rect); + if (ret != 0) { + checkFailCount2++; + } + } + } + SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_SetTextureAlphaMod, expected: 0, got: %i", checkFailCount1); + SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_RenderTexture, expected: 0, got: %i", checkFailCount2); + + /* See if it's the same. */ + referenceSurface = SDLTest_ImageBlitAlpha(); + compare(referenceSurface, ALLOWABLE_ERROR_BLENDED); + + /* Make current */ + SDL_RenderPresent(renderer); + + /* Clean up. */ + SDL_DestroyTexture(tface); + SDL_DestroySurface(referenceSurface); + referenceSurface = NULL; + + return TEST_COMPLETED; +} + +/** + * \brief Tests a blend mode. + * + * \sa SDL_SetTextureBlendMode + * \sa SDL_RenderTexture + */ +static void +testBlitBlendMode(SDL_Texture *tface, int mode) +{ + int ret; + Uint32 tformat; + int taccess, tw, th; + int i, j, ni, nj; + SDL_FRect rect; + int checkFailCount1; + int checkFailCount2; + + /* Clear surface. */ + clearScreen(); + + /* Constant values. */ + CHECK_FUNC(SDL_QueryTexture, (tface, &tformat, &taccess, &tw, &th)) + rect.w = (float)tw; + rect.h = (float)th; + ni = TESTRENDER_SCREEN_W - tw; + nj = TESTRENDER_SCREEN_H - th; + + /* Test blend mode. */ + checkFailCount1 = 0; + checkFailCount2 = 0; + for (j = 0; j <= nj; j += 4) { + for (i = 0; i <= ni; i += 4) { + /* Set blend mode. */ + ret = SDL_SetTextureBlendMode(tface, (SDL_BlendMode)mode); + if (ret != 0) { + checkFailCount1++; + } + + /* Blitting. */ + rect.x = (float)i; + rect.y = (float)j; + ret = SDL_RenderTexture(renderer, tface, NULL, &rect); + if (ret != 0) { + checkFailCount2++; + } + } + } + SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_SetTextureBlendMode, expected: 0, got: %i", checkFailCount1); + SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_RenderTexture, expected: 0, got: %i", checkFailCount2); +} + +/** + * \brief Tests some more blitting routines. + * + * \sa SDL_SetTextureColorMod + * \sa SDL_SetTextureAlphaMod + * \sa SDL_SetTextureBlendMode + * \sa SDL_DestroyTexture + */ +static int render_testBlitBlend(void *arg) +{ + int ret; + SDL_FRect rect; + SDL_Texture *tface; + SDL_Surface *referenceSurface = NULL; + Uint32 tformat; + int taccess, tw, th; + int i, j, ni, nj; + int mode; + int checkFailCount1; + int checkFailCount2; + int checkFailCount3; + int checkFailCount4; + + SDLTest_AssertCheck(hasBlendModes(), "_hasBlendModes"); + SDLTest_AssertCheck(hasTexColor(), "_hasTexColor"); + SDLTest_AssertCheck(hasTexAlpha(), "_hasTexAlpha"); + + /* Create face surface. */ + tface = loadTestFace(); + SDLTest_AssertCheck(tface != NULL, "Verify loadTestFace() result"); + if (tface == NULL) { + return TEST_ABORTED; + } + + /* Constant values. */ + CHECK_FUNC(SDL_QueryTexture, (tface, &tformat, &taccess, &tw, &th)) + rect.w = (float)tw; + rect.h = (float)th; + ni = TESTRENDER_SCREEN_W - tw; + nj = TESTRENDER_SCREEN_H - th; + + /* Set alpha mod. */ + CHECK_FUNC(SDL_SetTextureAlphaMod, (tface, 100)) + + /* Test None. */ + testBlitBlendMode(tface, SDL_BLENDMODE_NONE); + referenceSurface = SDLTest_ImageBlitBlendNone(); + + /* Compare, then Present */ + compare(referenceSurface, ALLOWABLE_ERROR_OPAQUE); + SDL_RenderPresent(renderer); + + SDL_DestroySurface(referenceSurface); + referenceSurface = NULL; + + /* Test Blend. */ + testBlitBlendMode(tface, SDL_BLENDMODE_BLEND); + referenceSurface = SDLTest_ImageBlitBlend(); + + /* Compare, then Present */ + compare(referenceSurface, ALLOWABLE_ERROR_BLENDED); + SDL_RenderPresent(renderer); + + SDL_DestroySurface(referenceSurface); + referenceSurface = NULL; + + /* Test Add. */ + testBlitBlendMode(tface, SDL_BLENDMODE_ADD); + referenceSurface = SDLTest_ImageBlitBlendAdd(); + + /* Compare, then Present */ + compare(referenceSurface, ALLOWABLE_ERROR_BLENDED); + SDL_RenderPresent(renderer); + + SDL_DestroySurface(referenceSurface); + referenceSurface = NULL; + + /* Test Mod. */ + testBlitBlendMode(tface, SDL_BLENDMODE_MOD); + referenceSurface = SDLTest_ImageBlitBlendMod(); + + /* Compare, then Present */ + compare(referenceSurface, ALLOWABLE_ERROR_BLENDED); + SDL_RenderPresent(renderer); + + SDL_DestroySurface(referenceSurface); + referenceSurface = NULL; + + /* Clear surface. */ + clearScreen(); + + /* Loop blit. */ + checkFailCount1 = 0; + checkFailCount2 = 0; + checkFailCount3 = 0; + checkFailCount4 = 0; + for (j = 0; j <= nj; j += 4) { + for (i = 0; i <= ni; i += 4) { + + /* Set color mod. */ + ret = SDL_SetTextureColorMod(tface, (255 / nj) * j, (255 / ni) * i, (255 / nj) * j); + if (ret != 0) { + checkFailCount1++; + } + + /* Set alpha mod. */ + ret = SDL_SetTextureAlphaMod(tface, (100 / ni) * i); + if (ret != 0) { + checkFailCount2++; + } + + /* Crazy blending mode magic. */ + mode = (i / 4 * j / 4) % 4; + if (mode == 0) { + mode = SDL_BLENDMODE_NONE; + } else if (mode == 1) { + mode = SDL_BLENDMODE_BLEND; + } else if (mode == 2) { + mode = SDL_BLENDMODE_ADD; + } else if (mode == 3) { + mode = SDL_BLENDMODE_MOD; + } + ret = SDL_SetTextureBlendMode(tface, (SDL_BlendMode)mode); + if (ret != 0) { + checkFailCount3++; + } + + /* Blitting. */ + rect.x = (float)i; + rect.y = (float)j; + ret = SDL_RenderTexture(renderer, tface, NULL, &rect); + if (ret != 0) { + checkFailCount4++; + } + } + } + SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_SetTextureColorMod, expected: 0, got: %i", checkFailCount1); + SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_SetTextureAlphaMod, expected: 0, got: %i", checkFailCount2); + SDLTest_AssertCheck(checkFailCount3 == 0, "Validate results from calls to SDL_SetTextureBlendMode, expected: 0, got: %i", checkFailCount3); + SDLTest_AssertCheck(checkFailCount4 == 0, "Validate results from calls to SDL_RenderTexture, expected: 0, got: %i", checkFailCount4); + + /* Clean up. */ + SDL_DestroyTexture(tface); + + /* Check to see if final image matches. */ + referenceSurface = SDLTest_ImageBlitBlendAll(); + compare(referenceSurface, ALLOWABLE_ERROR_BLENDED); + + /* Make current */ + SDL_RenderPresent(renderer); + + SDL_DestroySurface(referenceSurface); + referenceSurface = NULL; + + return TEST_COMPLETED; +} + +/** + * \brief Test viewport + */ +static int render_testViewport(void *arg) +{ + SDL_Surface *referenceSurface; + SDL_Rect viewport; + + viewport.x = TESTRENDER_SCREEN_W / 3; + viewport.y = TESTRENDER_SCREEN_H / 3; + viewport.w = TESTRENDER_SCREEN_W / 2; + viewport.h = TESTRENDER_SCREEN_H / 2; + + /* Create expected result */ + referenceSurface = SDL_CreateSurface(TESTRENDER_SCREEN_W, TESTRENDER_SCREEN_H, RENDER_COMPARE_FORMAT); + CHECK_FUNC(SDL_FillSurfaceRect, (referenceSurface, NULL, RENDER_COLOR_CLEAR)) + CHECK_FUNC(SDL_FillSurfaceRect, (referenceSurface, &viewport, RENDER_COLOR_GREEN)) + + /* Clear surface. */ + clearScreen(); + + /* Set the viewport and do a fill operation */ + CHECK_FUNC(SDL_SetRenderViewport, (renderer, &viewport)) + CHECK_FUNC(SDL_SetRenderDrawColor, (renderer, 0, 255, 0, SDL_ALPHA_OPAQUE)) + CHECK_FUNC(SDL_RenderFillRect, (renderer, NULL)) + CHECK_FUNC(SDL_SetRenderViewport, (renderer, NULL)) + + /* Check to see if final image matches. */ + compare(referenceSurface, ALLOWABLE_ERROR_OPAQUE); + + /* + * Verify that clear ignores the viewport + */ + + /* Create expected result */ + CHECK_FUNC(SDL_FillSurfaceRect, (referenceSurface, NULL, RENDER_COLOR_GREEN)) + + /* Clear surface. */ + clearScreen(); + + /* Set the viewport and do a clear operation */ + CHECK_FUNC(SDL_SetRenderViewport, (renderer, &viewport)) + CHECK_FUNC(SDL_SetRenderDrawColor, (renderer, 0, 255, 0, SDL_ALPHA_OPAQUE)) + CHECK_FUNC(SDL_RenderClear, (renderer)) + CHECK_FUNC(SDL_SetRenderViewport, (renderer, NULL)) + + /* Check to see if final image matches. */ + compare(referenceSurface, ALLOWABLE_ERROR_OPAQUE); + + /* Make current */ + SDL_RenderPresent(renderer); + + SDL_DestroySurface(referenceSurface); + + return TEST_COMPLETED; +} + +/** + * \brief Test logical size + */ +static int render_testLogicalSize(void *arg) +{ + SDL_Surface *referenceSurface; + SDL_Rect viewport; + SDL_FRect rect; + int w, h; + const int factor = 2; + + viewport.x = ((TESTRENDER_SCREEN_W / 4) / factor) * factor; + viewport.y = ((TESTRENDER_SCREEN_H / 4) / factor) * factor; + viewport.w = ((TESTRENDER_SCREEN_W / 2) / factor) * factor; + viewport.h = ((TESTRENDER_SCREEN_H / 2) / factor) * factor; + + /* Create expected result */ + referenceSurface = SDL_CreateSurface(TESTRENDER_SCREEN_W, TESTRENDER_SCREEN_H, RENDER_COMPARE_FORMAT); + CHECK_FUNC(SDL_FillSurfaceRect, (referenceSurface, NULL, RENDER_COLOR_CLEAR)) + CHECK_FUNC(SDL_FillSurfaceRect, (referenceSurface, &viewport, RENDER_COLOR_GREEN)) + + /* Clear surface. */ + clearScreen(); + + /* Set the logical size and do a fill operation */ + CHECK_FUNC(SDL_GetCurrentRenderOutputSize, (renderer, &w, &h)) + CHECK_FUNC(SDL_SetRenderLogicalPresentation, (renderer, w / factor, h / factor, + SDL_LOGICAL_PRESENTATION_LETTERBOX, + SDL_SCALEMODE_NEAREST)) + CHECK_FUNC(SDL_SetRenderDrawColor, (renderer, 0, 255, 0, SDL_ALPHA_OPAQUE)) + rect.x = (float)viewport.x / factor; + rect.y = (float)viewport.y / factor; + rect.w = (float)viewport.w / factor; + rect.h = (float)viewport.h / factor; + CHECK_FUNC(SDL_RenderFillRect, (renderer, &rect)) + CHECK_FUNC(SDL_SetRenderLogicalPresentation, (renderer, 0, 0, + SDL_LOGICAL_PRESENTATION_DISABLED, + SDL_SCALEMODE_NEAREST)) + + /* Check to see if final image matches. */ + compare(referenceSurface, ALLOWABLE_ERROR_OPAQUE); + + /* Clear surface. */ + clearScreen(); + + /* Set the logical size and viewport and do a fill operation */ + CHECK_FUNC(SDL_GetCurrentRenderOutputSize, (renderer, &w, &h)) + CHECK_FUNC(SDL_SetRenderLogicalPresentation, (renderer, w / factor, h / factor, + SDL_LOGICAL_PRESENTATION_LETTERBOX, + SDL_SCALEMODE_NEAREST)) + viewport.x = (TESTRENDER_SCREEN_W / 4) / factor; + viewport.y = (TESTRENDER_SCREEN_H / 4) / factor; + viewport.w = (TESTRENDER_SCREEN_W / 2) / factor; + viewport.h = (TESTRENDER_SCREEN_H / 2) / factor; + CHECK_FUNC(SDL_SetRenderViewport, (renderer, &viewport)) + CHECK_FUNC(SDL_SetRenderDrawColor, (renderer, 0, 255, 0, SDL_ALPHA_OPAQUE)) + CHECK_FUNC(SDL_RenderFillRect, (renderer, NULL)) + CHECK_FUNC(SDL_SetRenderViewport, (renderer, NULL)) + CHECK_FUNC(SDL_SetRenderLogicalPresentation, (renderer, 0, 0, + SDL_LOGICAL_PRESENTATION_DISABLED, + SDL_SCALEMODE_NEAREST)) + + /* Check to see if final image matches. */ + compare(referenceSurface, ALLOWABLE_ERROR_OPAQUE); + + /* + * Test a logical size that isn't the same aspect ratio as the window + */ + + viewport.x = (TESTRENDER_SCREEN_W / 4); + viewport.y = 0; + viewport.w = TESTRENDER_SCREEN_W; + viewport.h = TESTRENDER_SCREEN_H; + + /* Create expected result */ + CHECK_FUNC(SDL_FillSurfaceRect, (referenceSurface, NULL, RENDER_COLOR_CLEAR)) + CHECK_FUNC(SDL_FillSurfaceRect, (referenceSurface, &viewport, RENDER_COLOR_GREEN)) + + /* Clear surface. */ + clearScreen(); + + /* Set the logical size and do a fill operation */ + CHECK_FUNC(SDL_GetCurrentRenderOutputSize, (renderer, &w, &h)) + CHECK_FUNC(SDL_SetRenderLogicalPresentation, (renderer, + w - 2 * (TESTRENDER_SCREEN_W / 4), + h, + SDL_LOGICAL_PRESENTATION_LETTERBOX, + SDL_SCALEMODE_LINEAR)) + CHECK_FUNC(SDL_SetRenderDrawColor, (renderer, 0, 255, 0, SDL_ALPHA_OPAQUE)) + CHECK_FUNC(SDL_RenderFillRect, (renderer, NULL)) + CHECK_FUNC(SDL_SetRenderLogicalPresentation, (renderer, 0, 0, + SDL_LOGICAL_PRESENTATION_DISABLED, + SDL_SCALEMODE_NEAREST)) + + /* Check to see if final image matches. */ + compare(referenceSurface, ALLOWABLE_ERROR_OPAQUE); + + /* Clear surface. */ + clearScreen(); + + /* Make current */ + SDL_RenderPresent(renderer); + + SDL_DestroySurface(referenceSurface); + + return TEST_COMPLETED; +} + +/* Helper functions */ + +/** + * \brief Checks to see if functionality is supported. Helper function. + */ +static int +isSupported(int code) +{ + return code == 0; +} + +/** + * \brief Test to see if we can vary the draw color. Helper function. + * + * \sa SDL_SetRenderDrawColor + * \sa SDL_GetRenderDrawColor + */ +static int +hasDrawColor(void) +{ + int ret, fail; + Uint8 r, g, b, a; + + fail = 0; + + /* Set color. */ + ret = SDL_SetRenderDrawColor(renderer, 100, 100, 100, 100); + if (!isSupported(ret)) { + fail = 1; + } + ret = SDL_GetRenderDrawColor(renderer, &r, &g, &b, &a); + if (!isSupported(ret)) { + fail = 1; + } + + /* Restore natural. */ + ret = SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE); + if (!isSupported(ret)) { + fail = 1; + } + + /* Something failed, consider not available. */ + if (fail) { + return 0; + } + /* Not set properly, consider failed. */ + else if ((r != 100) || (g != 100) || (b != 100) || (a != 100)) { + return 0; + } + return 1; +} + +/** + * \brief Test to see if we can vary the blend mode. Helper function. + * + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_GetRenderDrawBlendMode + */ +static int +hasBlendModes(void) +{ + int fail; + int ret; + SDL_BlendMode mode; + + fail = 0; + + ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND); + if (!isSupported(ret)) { + fail = 1; + } + ret = SDL_GetRenderDrawBlendMode(renderer, &mode); + if (!isSupported(ret)) { + fail = 1; + } + ret = (mode != SDL_BLENDMODE_BLEND); + if (!isSupported(ret)) { + fail = 1; + } + ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_ADD); + if (!isSupported(ret)) { + fail = 1; + } + ret = SDL_GetRenderDrawBlendMode(renderer, &mode); + if (!isSupported(ret)) { + fail = 1; + } + ret = (mode != SDL_BLENDMODE_ADD); + if (!isSupported(ret)) { + fail = 1; + } + ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_MOD); + if (!isSupported(ret)) { + fail = 1; + } + ret = SDL_GetRenderDrawBlendMode(renderer, &mode); + if (!isSupported(ret)) { + fail = 1; + } + ret = (mode != SDL_BLENDMODE_MOD); + if (!isSupported(ret)) { + fail = 1; + } + ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE); + if (!isSupported(ret)) { + fail = 1; + } + ret = SDL_GetRenderDrawBlendMode(renderer, &mode); + if (!isSupported(ret)) { + fail = 1; + } + ret = (mode != SDL_BLENDMODE_NONE); + if (!isSupported(ret)) { + fail = 1; + } + + return !fail; +} + +/** + * \brief Loads the test image 'Face' as texture. Helper function. + * + * \sa SDL_CreateTextureFromSurface + */ +static SDL_Texture * +loadTestFace(void) +{ + SDL_Surface *face; + SDL_Texture *tface; + + face = SDLTest_ImageFace(); + if (face == NULL) { + return NULL; + } + + tface = SDL_CreateTextureFromSurface(renderer, face); + if (tface == NULL) { + SDLTest_LogError("SDL_CreateTextureFromSurface() failed with error: %s", SDL_GetError()); + } + + SDL_DestroySurface(face); + + return tface; +} + +/** + * \brief Test to see if can set texture color mode. Helper function. + * + * \sa SDL_SetTextureColorMod + * \sa SDL_GetTextureColorMod + * \sa SDL_DestroyTexture + */ +static int +hasTexColor(void) +{ + int fail; + int ret; + SDL_Texture *tface; + Uint8 r, g, b; + + /* Get test face. */ + tface = loadTestFace(); + if (tface == NULL) { + return 0; + } + + /* See if supported. */ + fail = 0; + ret = SDL_SetTextureColorMod(tface, 100, 100, 100); + if (!isSupported(ret)) { + fail = 1; + } + ret = SDL_GetTextureColorMod(tface, &r, &g, &b); + if (!isSupported(ret)) { + fail = 1; + } + + /* Clean up. */ + SDL_DestroyTexture(tface); + + if (fail) { + return 0; + } else if ((r != 100) || (g != 100) || (b != 100)) { + return 0; + } + return 1; +} + +/** + * \brief Test to see if we can vary the alpha of the texture. Helper function. + * + * \sa SDL_SetTextureAlphaMod + * \sa SDL_GetTextureAlphaMod + * \sa SDL_DestroyTexture + */ +static int +hasTexAlpha(void) +{ + int fail; + int ret; + SDL_Texture *tface; + Uint8 a; + + /* Get test face. */ + tface = loadTestFace(); + if (tface == NULL) { + return 0; + } + + /* See if supported. */ + fail = 0; + ret = SDL_SetTextureAlphaMod(tface, 100); + if (!isSupported(ret)) { + fail = 1; + } + ret = SDL_GetTextureAlphaMod(tface, &a); + if (!isSupported(ret)) { + fail = 1; + } + + /* Clean up. */ + SDL_DestroyTexture(tface); + + if (fail) { + return 0; + } else if (a != 100) { + return 0; + } + return 1; +} + +/** + * \brief Compares screen pixels with image pixels. Helper function. + * + * \param referenceSurface Image to compare against. + * \param allowable_error allowed difference from the reference image + * + * \sa SDL_RenderReadPixels + * \sa SDL_CreateSurfaceFrom + * \sa SDL_DestroySurface + */ +static void +compare(SDL_Surface *referenceSurface, int allowable_error) +{ + int ret; + SDL_Rect rect; + Uint8 *pixels; + SDL_Surface *testSurface; + + /* Read pixels. */ + pixels = (Uint8 *)SDL_malloc(4*TESTRENDER_SCREEN_W*TESTRENDER_SCREEN_H); + SDLTest_AssertCheck(pixels != NULL, "Validate allocated temp pixel buffer"); + if (pixels == NULL) { + return; + } + + /* Explicitly specify the rect in case the window isn't the expected size... */ + rect.x = 0; + rect.y = 0; + rect.w = TESTRENDER_SCREEN_W; + rect.h = TESTRENDER_SCREEN_H; + CHECK_FUNC(SDL_RenderReadPixels, (renderer, &rect, RENDER_COMPARE_FORMAT, pixels, 80*4 )) + + /* Create surface. */ + testSurface = SDL_CreateSurfaceFrom(pixels, TESTRENDER_SCREEN_W, TESTRENDER_SCREEN_H, TESTRENDER_SCREEN_W*4, RENDER_COMPARE_FORMAT); + SDLTest_AssertCheck(testSurface != NULL, "Verify result from SDL_CreateSurfaceFrom is not NULL"); + + /* Compare surface. */ + ret = SDLTest_CompareSurfaces( testSurface, referenceSurface, allowable_error ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_free(pixels); + SDL_DestroySurface(testSurface); +} + +/** + * \brief Clears the screen. Helper function. + * + * \sa SDL_SetRenderDrawColor + * \sa SDL_RenderClear + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + */ +static int +clearScreen(void) +{ + int ret; + + /* Make current */ + SDL_RenderPresent(renderer); + + /* Set color. */ + ret = SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret); + + /* Clear screen. */ + ret = SDL_RenderClear(renderer); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderClear, expected: 0, got: %i", ret); + + /* Set defaults. */ + ret = SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawBlendMode, expected: 0, got: %i", ret); + + ret = SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret); + + return 0; +} + +/* ================= Test References ================== */ + +/* Render test cases */ +static const SDLTest_TestCaseReference renderTest1 = { + (SDLTest_TestCaseFp)render_testGetNumRenderDrivers, "render_testGetNumRenderDrivers", "Tests call to SDL_GetNumRenderDrivers", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference renderTest2 = { + (SDLTest_TestCaseFp)render_testPrimitives, "render_testPrimitives", "Tests rendering primitives", TEST_ENABLED +}; + +/* TODO: rewrite test case, define new test data and re-enable; current implementation fails */ +static const SDLTest_TestCaseReference renderTest3 = { + (SDLTest_TestCaseFp)render_testPrimitivesBlend, "render_testPrimitivesBlend", "Tests rendering primitives with blending", TEST_DISABLED +}; + +static const SDLTest_TestCaseReference renderTest4 = { + (SDLTest_TestCaseFp)render_testBlit, "render_testBlit", "Tests blitting", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference renderTest5 = { + (SDLTest_TestCaseFp)render_testBlitColor, "render_testBlitColor", "Tests blitting with color", TEST_ENABLED +}; + +/* TODO: rewrite test case, define new test data and re-enable; current implementation fails */ +static const SDLTest_TestCaseReference renderTest6 = { + (SDLTest_TestCaseFp)render_testBlitAlpha, "render_testBlitAlpha", "Tests blitting with alpha", TEST_DISABLED +}; + +/* TODO: rewrite test case, define new test data and re-enable; current implementation fails */ +static const SDLTest_TestCaseReference renderTest7 = { + (SDLTest_TestCaseFp)render_testBlitBlend, "render_testBlitBlend", "Tests blitting with blending", TEST_DISABLED +}; + +static const SDLTest_TestCaseReference renderTest8 = { + (SDLTest_TestCaseFp)render_testViewport, "render_testViewport", "Tests viewport", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference renderTest9 = { + (SDLTest_TestCaseFp)render_testLogicalSize, "render_testLogicalSize", "Tests logical size", TEST_ENABLED +}; + +/* Sequence of Render test cases */ +static const SDLTest_TestCaseReference *renderTests[] = { + &renderTest1, &renderTest2, &renderTest3, &renderTest4, + &renderTest5, &renderTest6, &renderTest7, &renderTest8, + &renderTest9, NULL +}; + +/* Render test suite (global) */ +SDLTest_TestSuiteReference renderTestSuite = { + "Render", + InitCreateRenderer, + renderTests, + CleanupDestroyRenderer +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_rwops.c b/vendor/sdl-3.0.0/test/testautomation_rwops.c new file mode 100644 index 0000000..a8cdb90 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_rwops.c @@ -0,0 +1,654 @@ + +/** + * Automated SDL_RWops test. + * + * Original code written by Edgar Simo "bobbens" + * Ported by Markus Kauppila (markus.kauppila@gmail.com) + * Updated and extended for SDL_test by aschiffler at ferzkopp dot net + * + * Released under Public Domain. + */ + +/* quiet windows compiler warnings */ +#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include + +#include +#include +#include "testautomation_suites.h" + +/* ================= Test Case Implementation ================== */ + +static const char *RWopsReadTestFilename = "rwops_read"; +static const char *RWopsWriteTestFilename = "rwops_write"; +static const char *RWopsAlphabetFilename = "rwops_alphabet"; + +static const char RWopsHelloWorldTestString[] = "Hello World!"; +static const char RWopsHelloWorldCompString[] = "Hello World!"; +static const char RWopsAlphabetString[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + +/* Fixture */ + +static void RWopsSetUp(void *arg) +{ + size_t fileLen; + FILE *handle; + size_t writtenLen; + int result; + + /* Clean up from previous runs (if any); ignore errors */ + (void)remove(RWopsReadTestFilename); + (void)remove(RWopsWriteTestFilename); + (void)remove(RWopsAlphabetFilename); + + /* Create a test file */ + handle = fopen(RWopsReadTestFilename, "w"); + SDLTest_AssertCheck(handle != NULL, "Verify creation of file '%s' returned non NULL handle", RWopsReadTestFilename); + if (handle == NULL) { + return; + } + + /* Write some known text into it */ + fileLen = SDL_strlen(RWopsHelloWorldTestString); + writtenLen = fwrite(RWopsHelloWorldTestString, 1, fileLen, handle); + SDLTest_AssertCheck(fileLen == writtenLen, "Verify number of written bytes, expected %i, got %i", (int)fileLen, (int)writtenLen); + result = fclose(handle); + SDLTest_AssertCheck(result == 0, "Verify result from fclose, expected 0, got %i", result); + + /* Create a second test file */ + handle = fopen(RWopsAlphabetFilename, "w"); + SDLTest_AssertCheck(handle != NULL, "Verify creation of file '%s' returned non NULL handle", RWopsAlphabetFilename); + if (handle == NULL) { + return; + } + + /* Write alphabet text into it */ + fileLen = SDL_strlen(RWopsAlphabetString); + writtenLen = fwrite(RWopsAlphabetString, 1, fileLen, handle); + SDLTest_AssertCheck(fileLen == writtenLen, "Verify number of written bytes, expected %i, got %i", (int)fileLen, (int)writtenLen); + result = fclose(handle); + SDLTest_AssertCheck(result == 0, "Verify result from fclose, expected 0, got %i", result); + + SDLTest_AssertPass("Creation of test file completed"); +} + +static void RWopsTearDown(void *arg) +{ + int result; + + /* Remove the created files to clean up; ignore errors for write filename */ + result = remove(RWopsReadTestFilename); + SDLTest_AssertCheck(result == 0, "Verify result from remove(%s), expected 0, got %i", RWopsReadTestFilename, result); + (void)remove(RWopsWriteTestFilename); + result = remove(RWopsAlphabetFilename); + SDLTest_AssertCheck(result == 0, "Verify result from remove(%s), expected 0, got %i", RWopsAlphabetFilename, result); + + SDLTest_AssertPass("Cleanup of test files completed"); +} + +/** + * \brief Makes sure parameters work properly. Local helper function. + * + * \sa SDL_RWseek + * \sa SDL_RWread + */ +static void testGenericRWopsValidations(SDL_RWops *rw, SDL_bool write) +{ + char buf[sizeof(RWopsHelloWorldTestString)]; + Sint64 i; + size_t s; + int seekPos = SDLTest_RandomIntegerInRange(4, 8); + + /* Clear buffer */ + SDL_zeroa(buf); + + /* Set to start. */ + i = SDL_RWseek(rw, 0, SDL_RW_SEEK_SET); + SDLTest_AssertPass("Call to SDL_RWseek succeeded"); + SDLTest_AssertCheck(i == (Sint64)0, "Verify seek to 0 with SDL_RWseek (SDL_RW_SEEK_SET), expected 0, got %" SDL_PRIs64, i); + + /* Test write. */ + s = SDL_RWwrite(rw, RWopsHelloWorldTestString, sizeof(RWopsHelloWorldTestString) - 1); + SDLTest_AssertPass("Call to SDL_RWwrite succeeded"); + if (write) { + SDLTest_AssertCheck(s == sizeof(RWopsHelloWorldTestString) - 1, "Verify result of writing one byte with SDL_RWwrite, expected 1, got %i", (int)s); + } else { + SDLTest_AssertCheck(s == 0, "Verify result of writing with SDL_RWwrite, expected: 0, got %i", (int)s); + } + + /* Test seek to random position */ + i = SDL_RWseek(rw, seekPos, SDL_RW_SEEK_SET); + SDLTest_AssertPass("Call to SDL_RWseek succeeded"); + SDLTest_AssertCheck(i == (Sint64)seekPos, "Verify seek to %i with SDL_RWseek (SDL_RW_SEEK_SET), expected %i, got %" SDL_PRIs64, seekPos, seekPos, i); + + /* Test seek back to start */ + i = SDL_RWseek(rw, 0, SDL_RW_SEEK_SET); + SDLTest_AssertPass("Call to SDL_RWseek succeeded"); + SDLTest_AssertCheck(i == (Sint64)0, "Verify seek to 0 with SDL_RWseek (SDL_RW_SEEK_SET), expected 0, got %" SDL_PRIs64, i); + + /* Test read */ + s = SDL_RWread(rw, buf, sizeof(RWopsHelloWorldTestString) - 1); + SDLTest_AssertPass("Call to SDL_RWread succeeded"); + SDLTest_AssertCheck( + s == (sizeof(RWopsHelloWorldTestString) - 1), + "Verify result from SDL_RWread, expected %i, got %i", + (int)(sizeof(RWopsHelloWorldTestString) - 1), + (int)s); + SDLTest_AssertCheck( + SDL_memcmp(buf, RWopsHelloWorldTestString, sizeof(RWopsHelloWorldTestString) - 1) == 0, + "Verify read bytes match expected string, expected '%s', got '%s'", RWopsHelloWorldTestString, buf); + + /* More seek tests. */ + i = SDL_RWseek(rw, -4, SDL_RW_SEEK_CUR); + SDLTest_AssertPass("Call to SDL_RWseek(...,-4,SDL_RW_SEEK_CUR) succeeded"); + SDLTest_AssertCheck( + i == (Sint64)(sizeof(RWopsHelloWorldTestString) - 5), + "Verify seek to -4 with SDL_RWseek (SDL_RW_SEEK_CUR), expected %i, got %i", + (int)(sizeof(RWopsHelloWorldTestString) - 5), + (int)i); + + i = SDL_RWseek(rw, -1, SDL_RW_SEEK_END); + SDLTest_AssertPass("Call to SDL_RWseek(...,-1,SDL_RW_SEEK_END) succeeded"); + SDLTest_AssertCheck( + i == (Sint64)(sizeof(RWopsHelloWorldTestString) - 2), + "Verify seek to -1 with SDL_RWseek (SDL_RW_SEEK_END), expected %i, got %i", + (int)(sizeof(RWopsHelloWorldTestString) - 2), + (int)i); + + /* Invalid whence seek */ + i = SDL_RWseek(rw, 0, 999); + SDLTest_AssertPass("Call to SDL_RWseek(...,0,invalid_whence) succeeded"); + SDLTest_AssertCheck( + i == (Sint64)(-1), + "Verify seek with SDL_RWseek (invalid_whence); expected: -1, got %i", + (int)i); +} + +/** + * Negative test for SDL_RWFromFile parameters + * + * \sa SDL_RWFromFile + * + */ +static int rwops_testParamNegative(void *arg) +{ + SDL_RWops *rwops; + + /* These should all fail. */ + rwops = SDL_RWFromFile(NULL, NULL); + SDLTest_AssertPass("Call to SDL_RWFromFile(NULL, NULL) succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(NULL, NULL) returns NULL"); + + rwops = SDL_RWFromFile(NULL, "ab+"); + SDLTest_AssertPass("Call to SDL_RWFromFile(NULL, \"ab+\") succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(NULL, \"ab+\") returns NULL"); + + rwops = SDL_RWFromFile(NULL, "sldfkjsldkfj"); + SDLTest_AssertPass("Call to SDL_RWFromFile(NULL, \"sldfkjsldkfj\") succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(NULL, \"sldfkjsldkfj\") returns NULL"); + + rwops = SDL_RWFromFile("something", ""); + SDLTest_AssertPass("Call to SDL_RWFromFile(\"something\", \"\") succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(\"something\", \"\") returns NULL"); + + rwops = SDL_RWFromFile("something", NULL); + SDLTest_AssertPass("Call to SDL_RWFromFile(\"something\", NULL) succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(\"something\", NULL) returns NULL"); + + rwops = SDL_RWFromMem(NULL, 10); + SDLTest_AssertPass("Call to SDL_RWFromMem(NULL, 10) succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromMem(NULL, 10) returns NULL"); + + rwops = SDL_RWFromMem((void *)RWopsAlphabetString, 0); + SDLTest_AssertPass("Call to SDL_RWFromMem(data, 0) succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromMem(data, 0) returns NULL"); + + rwops = SDL_RWFromConstMem((const void *)RWopsAlphabetString, 0); + SDLTest_AssertPass("Call to SDL_RWFromConstMem(data, 0) succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromConstMem(data, 0) returns NULL"); + + return TEST_COMPLETED; +} + +/** + * \brief Tests opening from memory. + * + * \sa SDL_RWFromMem + * \sa SDL_RWClose + */ +static int rwops_testMem(void *arg) +{ + char mem[sizeof(RWopsHelloWorldTestString)]; + SDL_RWops *rw; + int result; + + /* Clear buffer */ + SDL_zeroa(mem); + + /* Open */ + rw = SDL_RWFromMem(mem, sizeof(RWopsHelloWorldTestString) - 1); + SDLTest_AssertPass("Call to SDL_RWFromMem() succeeded"); + SDLTest_AssertCheck(rw != NULL, "Verify opening memory with SDL_RWFromMem does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) { + return TEST_ABORTED; + } + + /* Check type */ + SDLTest_AssertCheck(rw->type == SDL_RWOPS_MEMORY, "Verify RWops type is SDL_RWOPS_MEMORY; expected: %d, got: %" SDL_PRIu32, SDL_RWOPS_MEMORY, rw->type); + + /* Run generic tests */ + testGenericRWopsValidations(rw, SDL_TRUE); + + /* Close */ + result = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + return TEST_COMPLETED; +} + +/** + * \brief Tests opening from memory. + * + * \sa SDL_RWFromConstMem + * \sa SDL_RWClose + */ +static int rwops_testConstMem(void *arg) +{ + SDL_RWops *rw; + int result; + + /* Open handle */ + rw = SDL_RWFromConstMem(RWopsHelloWorldCompString, sizeof(RWopsHelloWorldCompString) - 1); + SDLTest_AssertPass("Call to SDL_RWFromConstMem() succeeded"); + SDLTest_AssertCheck(rw != NULL, "Verify opening memory with SDL_RWFromConstMem does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) { + return TEST_ABORTED; + } + + /* Check type */ + SDLTest_AssertCheck(rw->type == SDL_RWOPS_MEMORY_RO, "Verify RWops type is SDL_RWOPS_MEMORY_RO; expected: %d, got: %" SDL_PRIu32, SDL_RWOPS_MEMORY_RO, rw->type); + + /* Run generic tests */ + testGenericRWopsValidations(rw, SDL_FALSE); + + /* Close handle */ + result = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + return TEST_COMPLETED; +} + +/** + * \brief Tests reading from file. + * + * \sa SDL_RWFromFile + * \sa SDL_RWClose + */ +static int rwops_testFileRead(void *arg) +{ + SDL_RWops *rw; + int result; + + /* Read test. */ + rw = SDL_RWFromFile(RWopsReadTestFilename, "r"); + SDLTest_AssertPass("Call to SDL_RWFromFile(..,\"r\") succeeded"); + SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFile in read mode does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) { + return TEST_ABORTED; + } + + /* Check type */ +#ifdef __ANDROID__ + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_STDFILE || rw->type == SDL_RWOPS_JNIFILE, + "Verify RWops type is SDL_RWOPS_STDFILE or SDL_RWOPS_JNIFILE; expected: %d|%d, got: %d", SDL_RWOPS_STDFILE, SDL_RWOPS_JNIFILE, rw->type); +#elif defined(__WIN32__) + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_WINFILE, + "Verify RWops type is SDL_RWOPS_WINFILE; expected: %d, got: %d", SDL_RWOPS_WINFILE, rw->type); +#else + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_STDFILE, + "Verify RWops type is SDL_RWOPS_STDFILE; expected: %d, got: %" SDL_PRIu32, SDL_RWOPS_STDFILE, rw->type); +#endif + + /* Run generic tests */ + testGenericRWopsValidations(rw, SDL_FALSE); + + /* Close handle */ + result = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + return TEST_COMPLETED; +} + +/** + * \brief Tests writing from file. + * + * \sa SDL_RWFromFile + * \sa SDL_RWClose + */ +static int rwops_testFileWrite(void *arg) +{ + SDL_RWops *rw; + int result; + + /* Write test. */ + rw = SDL_RWFromFile(RWopsWriteTestFilename, "w+"); + SDLTest_AssertPass("Call to SDL_RWFromFile(..,\"w+\") succeeded"); + SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFile in write mode does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) { + return TEST_ABORTED; + } + + /* Check type */ +#ifdef __ANDROID__ + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_STDFILE || rw->type == SDL_RWOPS_JNIFILE, + "Verify RWops type is SDL_RWOPS_STDFILE or SDL_RWOPS_JNIFILE; expected: %d|%d, got: %d", SDL_RWOPS_STDFILE, SDL_RWOPS_JNIFILE, rw->type); +#elif defined(__WIN32__) + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_WINFILE, + "Verify RWops type is SDL_RWOPS_WINFILE; expected: %d, got: %d", SDL_RWOPS_WINFILE, rw->type); +#else + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_STDFILE, + "Verify RWops type is SDL_RWOPS_STDFILE; expected: %d, got: %" SDL_PRIu32, SDL_RWOPS_STDFILE, rw->type); +#endif + + /* Run generic tests */ + testGenericRWopsValidations(rw, SDL_TRUE); + + /* Close handle */ + result = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + return TEST_COMPLETED; +} + +/** + * \brief Tests alloc and free RW context. + * + * \sa SDL_CreateRW + * \sa SDL_DestroyRW + */ +static int rwops_testAllocFree(void *arg) +{ + /* Allocate context */ + SDL_RWops *rw = SDL_CreateRW(); + SDLTest_AssertPass("Call to SDL_CreateRW() succeeded"); + SDLTest_AssertCheck(rw != NULL, "Validate result from SDL_CreateRW() is not NULL"); + if (rw == NULL) { + return TEST_ABORTED; + } + + /* Check type */ + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_UNKNOWN, + "Verify RWops type is SDL_RWOPS_UNKNOWN; expected: %d, got: %" SDL_PRIu32, SDL_RWOPS_UNKNOWN, rw->type); + + /* Free context again */ + SDL_DestroyRW(rw); + SDLTest_AssertPass("Call to SDL_DestroyRW() succeeded"); + + return TEST_COMPLETED; +} + +/** + * \brief Compare memory and file reads + * + * \sa SDL_RWFromMem + * \sa SDL_RWFromFile + */ +static int rwops_testCompareRWFromMemWithRWFromFile(void *arg) +{ + int slen = 26; + char buffer_file[27]; + char buffer_mem[27]; + size_t rv_file; + size_t rv_mem; + Uint64 sv_file; + Uint64 sv_mem; + SDL_RWops *rwops_file; + SDL_RWops *rwops_mem; + int size; + int result; + + for (size = 5; size < 10; size++) { + /* Terminate buffer */ + buffer_file[slen] = 0; + buffer_mem[slen] = 0; + + /* Read/seek from memory */ + rwops_mem = SDL_RWFromMem((void *)RWopsAlphabetString, slen); + SDLTest_AssertPass("Call to SDL_RWFromMem()"); + rv_mem = SDL_RWread(rwops_mem, buffer_mem, size * 6); + SDLTest_AssertPass("Call to SDL_RWread(mem, size=%d)", size * 6); + sv_mem = SDL_RWseek(rwops_mem, 0, SEEK_END); + SDLTest_AssertPass("Call to SDL_RWseek(mem,SEEK_END)"); + result = SDL_RWclose(rwops_mem); + SDLTest_AssertPass("Call to SDL_RWclose(mem)"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + /* Read/see from file */ + rwops_file = SDL_RWFromFile(RWopsAlphabetFilename, "r"); + SDLTest_AssertPass("Call to SDL_RWFromFile()"); + rv_file = SDL_RWread(rwops_file, buffer_file, size * 6); + SDLTest_AssertPass("Call to SDL_RWread(file, size=%d)", size * 6); + sv_file = SDL_RWseek(rwops_file, 0, SEEK_END); + SDLTest_AssertPass("Call to SDL_RWseek(file,SEEK_END)"); + result = SDL_RWclose(rwops_file); + SDLTest_AssertPass("Call to SDL_RWclose(file)"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + /* Compare */ + SDLTest_AssertCheck(rv_mem == rv_file, "Verify returned read blocks matches for mem and file reads; got: rv_mem=%d rv_file=%d", (int)rv_mem, (int)rv_file); + SDLTest_AssertCheck(sv_mem == sv_file, "Verify SEEK_END position matches for mem and file seeks; got: sv_mem=%d sv_file=%d", (int)sv_mem, (int)sv_file); + SDLTest_AssertCheck(buffer_mem[slen] == 0, "Verify mem buffer termination; expected: 0, got: %d", buffer_mem[slen]); + SDLTest_AssertCheck(buffer_file[slen] == 0, "Verify file buffer termination; expected: 0, got: %d", buffer_file[slen]); + SDLTest_AssertCheck( + SDL_strncmp(buffer_mem, RWopsAlphabetString, slen) == 0, + "Verify mem buffer contain alphabet string; expected: %s, got: %s", RWopsAlphabetString, buffer_mem); + SDLTest_AssertCheck( + SDL_strncmp(buffer_file, RWopsAlphabetString, slen) == 0, + "Verify file buffer contain alphabet string; expected: %s, got: %s", RWopsAlphabetString, buffer_file); + } + + return TEST_COMPLETED; +} + +/** + * \brief Tests writing and reading from file using endian aware functions. + * + * \sa SDL_RWFromFile + * \sa SDL_RWClose + * \sa SDL_ReadU16BE + * \sa SDL_WriteU16BE + */ +static int rwops_testFileWriteReadEndian(void *arg) +{ + SDL_RWops *rw; + Sint64 result; + int mode; + Uint16 BE16value; + Uint32 BE32value; + Uint64 BE64value; + Uint16 LE16value; + Uint32 LE32value; + Uint64 LE64value; + Uint16 BE16test; + Uint32 BE32test; + Uint64 BE64test; + Uint16 LE16test; + Uint32 LE32test; + Uint64 LE64test; + SDL_bool bresult; + int cresult; + + for (mode = 0; mode < 3; mode++) { + + /* Create test data */ + switch (mode) { + default: + case 0: + SDLTest_Log("All 0 values"); + BE16value = 0; + BE32value = 0; + BE64value = 0; + LE16value = 0; + LE32value = 0; + LE64value = 0; + break; + case 1: + SDLTest_Log("All 1 values"); + BE16value = 1; + BE32value = 1; + BE64value = 1; + LE16value = 1; + LE32value = 1; + LE64value = 1; + break; + case 2: + SDLTest_Log("Random values"); + BE16value = SDLTest_RandomUint16(); + BE32value = SDLTest_RandomUint32(); + BE64value = SDLTest_RandomUint64(); + LE16value = SDLTest_RandomUint16(); + LE32value = SDLTest_RandomUint32(); + LE64value = SDLTest_RandomUint64(); + break; + } + + /* Write test. */ + rw = SDL_RWFromFile(RWopsWriteTestFilename, "w+"); + SDLTest_AssertPass("Call to SDL_RWFromFile(..,\"w+\")"); + SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFile in write mode does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) { + return TEST_ABORTED; + } + + /* Write test data */ + bresult = SDL_WriteU16BE(rw, BE16value); + SDLTest_AssertPass("Call to SDL_WriteU16BE()"); + SDLTest_AssertCheck(bresult == SDL_TRUE, "Validate object written, expected: SDL_TRUE, got: SDL_FALSE"); + bresult = SDL_WriteU32BE(rw, BE32value); + SDLTest_AssertPass("Call to SDL_WriteU32BE()"); + SDLTest_AssertCheck(bresult == SDL_TRUE, "Validate object written, expected: SDL_TRUE, got: SDL_FALSE"); + bresult = SDL_WriteU64BE(rw, BE64value); + SDLTest_AssertPass("Call to SDL_WriteU64BE()"); + SDLTest_AssertCheck(bresult == SDL_TRUE, "Validate object written, expected: SDL_TRUE, got: SDL_FALSE"); + bresult = SDL_WriteU16LE(rw, LE16value); + SDLTest_AssertPass("Call to SDL_WriteU16LE()"); + SDLTest_AssertCheck(bresult == SDL_TRUE, "Validate object written, expected: SDL_TRUE, got: SDL_FALSE"); + bresult = SDL_WriteU32LE(rw, LE32value); + SDLTest_AssertPass("Call to SDL_WriteU32LE()"); + SDLTest_AssertCheck(bresult == SDL_TRUE, "Validate object written, expected: SDL_TRUE, got: SDL_FALSE"); + bresult = SDL_WriteU64LE(rw, LE64value); + SDLTest_AssertPass("Call to SDL_WriteU64LE()"); + SDLTest_AssertCheck(bresult == SDL_TRUE, "Validate object written, expected: SDL_TRUE, got: SDL_FALSE"); + + /* Test seek to start */ + result = SDL_RWseek(rw, 0, SDL_RW_SEEK_SET); + SDLTest_AssertPass("Call to SDL_RWseek succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result from position 0 with SDL_RWseek, expected 0, got %i", (int)result); + + /* Read test data */ + bresult = SDL_ReadU16BE(rw, &BE16test); + SDLTest_AssertPass("Call to SDL_ReadU16BE()"); + SDLTest_AssertCheck(bresult == SDL_TRUE, "Validate object read, expected: SDL_TRUE, got: SDL_FALSE"); + SDLTest_AssertCheck(BE16test == BE16value, "Validate object read from SDL_ReadU16BE, expected: %hu, got: %hu", BE16value, BE16test); + bresult = SDL_ReadU32BE(rw, &BE32test); + SDLTest_AssertPass("Call to SDL_ReadU32BE()"); + SDLTest_AssertCheck(bresult == SDL_TRUE, "Validate object read, expected: SDL_TRUE, got: SDL_FALSE"); + SDLTest_AssertCheck(BE32test == BE32value, "Validate object read from SDL_ReadU32BE, expected: %" SDL_PRIu32 ", got: %" SDL_PRIu32, BE32value, BE32test); + bresult = SDL_ReadU64BE(rw, &BE64test); + SDLTest_AssertPass("Call to SDL_ReadU64BE()"); + SDLTest_AssertCheck(bresult == SDL_TRUE, "Validate object read, expected: SDL_TRUE, got: SDL_FALSE"); + SDLTest_AssertCheck(BE64test == BE64value, "Validate object read from SDL_ReadU64BE, expected: %" SDL_PRIu64 ", got: %" SDL_PRIu64, BE64value, BE64test); + bresult = SDL_ReadU16LE(rw, &LE16test); + SDLTest_AssertPass("Call to SDL_ReadU16LE()"); + SDLTest_AssertCheck(bresult == SDL_TRUE, "Validate object read, expected: SDL_TRUE, got: SDL_FALSE"); + SDLTest_AssertCheck(LE16test == LE16value, "Validate object read from SDL_ReadU16LE, expected: %hu, got: %hu", LE16value, LE16test); + bresult = SDL_ReadU32LE(rw, &LE32test); + SDLTest_AssertPass("Call to SDL_ReadU32LE()"); + SDLTest_AssertCheck(bresult == SDL_TRUE, "Validate object read, expected: SDL_TRUE, got: SDL_FALSE"); + SDLTest_AssertCheck(LE32test == LE32value, "Validate object read from SDL_ReadU32LE, expected: %" SDL_PRIu32 ", got: %" SDL_PRIu32, LE32value, LE32test); + bresult = SDL_ReadU64LE(rw, &LE64test); + SDLTest_AssertPass("Call to SDL_ReadU64LE()"); + SDLTest_AssertCheck(bresult == SDL_TRUE, "Validate object read, expected: SDL_TRUE, got: SDL_FALSE"); + SDLTest_AssertCheck(LE64test == LE64value, "Validate object read from SDL_ReadU64LE, expected: %" SDL_PRIu64 ", got: %" SDL_PRIu64, LE64value, LE64test); + + /* Close handle */ + cresult = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(cresult == 0, "Verify result value is 0; got: %d", cresult); + } + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* RWops test cases */ +static const SDLTest_TestCaseReference rwopsTest1 = { + (SDLTest_TestCaseFp)rwops_testParamNegative, "rwops_testParamNegative", "Negative test for SDL_RWFromFile parameters", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rwopsTest2 = { + (SDLTest_TestCaseFp)rwops_testMem, "rwops_testMem", "Tests opening from memory", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rwopsTest3 = { + (SDLTest_TestCaseFp)rwops_testConstMem, "rwops_testConstMem", "Tests opening from (const) memory", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rwopsTest4 = { + (SDLTest_TestCaseFp)rwops_testFileRead, "rwops_testFileRead", "Tests reading from a file", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rwopsTest5 = { + (SDLTest_TestCaseFp)rwops_testFileWrite, "rwops_testFileWrite", "Test writing to a file", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rwopsTest6 = { + (SDLTest_TestCaseFp)rwops_testAllocFree, "rwops_testAllocFree", "Test alloc and free of RW context", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rwopsTest7 = { + (SDLTest_TestCaseFp)rwops_testFileWriteReadEndian, "rwops_testFileWriteReadEndian", "Test writing and reading via the Endian aware functions", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference rwopsTest8 = { + (SDLTest_TestCaseFp)rwops_testCompareRWFromMemWithRWFromFile, "rwops_testCompareRWFromMemWithRWFromFile", "Compare RWFromMem and RWFromFile RWops for read and seek", TEST_ENABLED +}; + +/* Sequence of RWops test cases */ +static const SDLTest_TestCaseReference *rwopsTests[] = { + &rwopsTest1, &rwopsTest2, &rwopsTest3, &rwopsTest4, &rwopsTest5, &rwopsTest6, + &rwopsTest7, &rwopsTest8, NULL +}; + +/* RWops test suite (global) */ +SDLTest_TestSuiteReference rwopsTestSuite = { + "RWops", + RWopsSetUp, + rwopsTests, + RWopsTearDown +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_sdltest.c b/vendor/sdl-3.0.0/test/testautomation_sdltest.c new file mode 100644 index 0000000..e046450 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_sdltest.c @@ -0,0 +1,1299 @@ +/** + * SDL_test test suite + */ + +#include +#include + +#include +#include +#include "testautomation_suites.h" + +/* Test case functions */ + +/** + * \brief Calls to SDLTest_GenerateRunSeed() + */ +static int sdltest_generateRunSeed(void *arg) +{ + char *result; + size_t i, l; + int j; + + for (i = 1; i <= 10; i += 3) { + result = SDLTest_GenerateRunSeed((int)i); + SDLTest_AssertPass("Call to SDLTest_GenerateRunSeed()"); + SDLTest_AssertCheck(result != NULL, "Verify returned value is not NULL"); + if (result != NULL) { + l = SDL_strlen(result); + SDLTest_AssertCheck(l == i, "Verify length of returned value is %d, got: %d", (int)i, (int)l); + SDL_free(result); + } + } + + /* Negative cases */ + for (j = -2; j <= 0; j++) { + result = SDLTest_GenerateRunSeed(j); + SDLTest_AssertPass("Call to SDLTest_GenerateRunSeed()"); + SDLTest_AssertCheck(result == NULL, "Verify returned value is not NULL"); + } + + return TEST_COMPLETED; +} + +/** + * \brief Calls to SDLTest_GetFuzzerInvocationCount() + */ +static int sdltest_getFuzzerInvocationCount(void *arg) +{ + Uint8 result; + int fuzzerCount1, fuzzerCount2; + + fuzzerCount1 = SDLTest_GetFuzzerInvocationCount(); + SDLTest_AssertPass("Call to SDLTest_GetFuzzerInvocationCount()"); + SDLTest_AssertCheck(fuzzerCount1 >= 0, "Verify returned value, expected: >=0, got: %d", fuzzerCount1); + + result = SDLTest_RandomUint8(); + SDLTest_AssertPass("Call to SDLTest_RandomUint8(), returned %d", result); + + fuzzerCount2 = SDLTest_GetFuzzerInvocationCount(); + SDLTest_AssertPass("Call to SDLTest_GetFuzzerInvocationCount()"); + SDLTest_AssertCheck(fuzzerCount2 > fuzzerCount1, "Verify returned value, expected: >%d, got: %d", fuzzerCount1, fuzzerCount2); + + return TEST_COMPLETED; +} + +/** + * \brief Calls to random number generators + */ +static int sdltest_randomNumber(void *arg) +{ + Sint64 result; + double dresult; + Uint64 umax; + Sint64 min, max; + + result = (Sint64)SDLTest_RandomUint8(); + umax = (1 << 8) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomUint8"); + SDLTest_AssertCheck(result >= 0 && result <= (Sint64)umax, "Verify result value, expected: [0,%" SDL_PRIu64 "], got: %" SDL_PRIs64, umax, result); + + result = (Sint64)SDLTest_RandomSint8(); + min = 0 - (1 << 7); + max = (1 << 7) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomSint8"); + SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%" SDL_PRIs64 ",%" SDL_PRIs64 "], got: %" SDL_PRIs64, min, max, result); + + result = (Sint64)SDLTest_RandomUint16(); + umax = (1 << 16) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomUint16"); + SDLTest_AssertCheck(result >= 0 && result <= (Sint64)umax, "Verify result value, expected: [0,%" SDL_PRIu64 "], got: %" SDL_PRIs64, umax, result); + + result = (Sint64)SDLTest_RandomSint16(); + min = 0 - (1 << 15); + max = (1 << 15) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomSint16"); + SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%" SDL_PRIs64 ",%" SDL_PRIs64 "], got: %" SDL_PRIs64, min, max, result); + + result = (Sint64)SDLTest_RandomUint32(); + umax = ((Uint64)1 << 32) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomUint32"); + SDLTest_AssertCheck(result >= 0 && result <= (Sint64)umax, "Verify result value, expected: [0,%" SDL_PRIu64 "], got: %" SDL_PRIs64, umax, result); + + result = (Sint64)SDLTest_RandomSint32(); + min = 0 - ((Sint64)1 << 31); + max = ((Sint64)1 << 31) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomSint32"); + SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%" SDL_PRIs64 ",%" SDL_PRIs64 "], got: %" SDL_PRIs64, min, max, result); + + SDLTest_RandomUint64(); + SDLTest_AssertPass("Call to SDLTest_RandomUint64"); + + result = SDLTest_RandomSint64(); + SDLTest_AssertPass("Call to SDLTest_RandomSint64"); + + dresult = (double)SDLTest_RandomUnitFloat(); + SDLTest_AssertPass("Call to SDLTest_RandomUnitFloat"); + SDLTest_AssertCheck(dresult >= 0.0 && dresult < 1.0, "Verify result value, expected: [0.0,1.0[, got: %e", dresult); + + dresult = (double)SDLTest_RandomFloat(); + SDLTest_AssertPass("Call to SDLTest_RandomFloat"); + SDLTest_AssertCheck(dresult >= (double)(-FLT_MAX) && dresult <= (double)FLT_MAX, "Verify result value, expected: [%e,%e], got: %e", (double)(-FLT_MAX), (double)FLT_MAX, dresult); + + dresult = SDLTest_RandomUnitDouble(); + SDLTest_AssertPass("Call to SDLTest_RandomUnitDouble"); + SDLTest_AssertCheck(dresult >= 0.0 && dresult < 1.0, "Verify result value, expected: [0.0,1.0[, got: %e", dresult); + + dresult = SDLTest_RandomDouble(); + SDLTest_AssertPass("Call to SDLTest_RandomDouble"); + + return TEST_COMPLETED; +} + +/** + * \brief Calls to random boundary number generators for Uint8 + */ +static int sdltest_randomBoundaryNumberUint8(void *arg) +{ + const char *expectedError = "That operation is not supported"; + const char *lastError; + Uint64 uresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomUintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12 || uresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0 || uresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(0, 99, SDL_FALSE) returns 100 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(0, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 100, + "Validate result value for parameters (0,99,SDL_FALSE); expected: 100, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 0xff, SDL_FALSE) returns 0 (no error) */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(1, 255, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters (1,255,SDL_FALSE); expected: 0, got: %" SDL_PRIs64, uresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xfe, SDL_FALSE) returns 0xff (no error) */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(0, 254, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0xff, + "Validate result value for parameters (0,254,SDL_FALSE); expected: 0xff, got: %" SDL_PRIs64, uresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xff, SDL_FALSE) returns 0 (sets error) */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(0, 255, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters(0,255,SDL_FALSE); expected: 0, got: %" SDL_PRIs64, uresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * \brief Calls to random boundary number generators for Uint16 + */ +static int sdltest_randomBoundaryNumberUint16(void *arg) +{ + const char *expectedError = "That operation is not supported"; + const char *lastError; + Uint64 uresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomUintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12 || uresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0 || uresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(0, 99, SDL_FALSE) returns 100 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(0, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 100, + "Validate result value for parameters (0,99,SDL_FALSE); expected: 100, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 0xffff, SDL_FALSE) returns 0 (no error) */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(1, 0xffff, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters (1,0xffff,SDL_FALSE); expected: 0, got: %" SDL_PRIs64, uresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xfffe, SDL_FALSE) returns 0xffff (no error) */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(0, 0xfffe, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0xffff, + "Validate result value for parameters (0,0xfffe,SDL_FALSE); expected: 0xffff, got: %" SDL_PRIs64, uresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xffff, SDL_FALSE) returns 0 (sets error) */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(0, 0xffff, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters(0,0xffff,SDL_FALSE); expected: 0, got: %" SDL_PRIs64, uresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * \brief Calls to random boundary number generators for Uint32 + */ +static int sdltest_randomBoundaryNumberUint32(void *arg) +{ + const char *expectedError = "That operation is not supported"; + const char *lastError; + Uint64 uresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomUintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12 || uresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0 || uresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(0, 99, SDL_FALSE) returns 100 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(0, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 100, + "Validate result value for parameters (0,99,SDL_FALSE); expected: 100, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 0xffffffff, SDL_FALSE) returns 0 (no error) */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(1, 0xffffffff, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters (1,0xffffffff,SDL_FALSE); expected: 0, got: %" SDL_PRIs64, uresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xfffffffe, SDL_FALSE) returns 0xffffffff (no error) */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(0, 0xfffffffe, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0xffffffff, + "Validate result value for parameters (0,0xfffffffe,SDL_FALSE); expected: 0xffffffff, got: %" SDL_PRIs64, uresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xffffffff, SDL_FALSE) returns 0 (sets error) */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(0, 0xffffffff, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters(0,0xffffffff,SDL_FALSE); expected: 0, got: %" SDL_PRIs64, uresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * \brief Calls to random boundary number generators for Uint64 + */ +static int sdltest_randomBoundaryNumberUint64(void *arg) +{ + const char *expectedError = "That operation is not supported"; + const char *lastError; + Uint64 uresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomUintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + uresult = SDLTest_RandomUint64BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + uresult = SDLTest_RandomUint64BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + uresult = SDLTest_RandomUint64BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + uresult = SDLTest_RandomUint64BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12 || uresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = SDLTest_RandomUint64BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = SDLTest_RandomUint64BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + uresult = SDLTest_RandomUint64BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0 || uresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(0, 99, SDL_FALSE) returns 100 */ + uresult = SDLTest_RandomUint64BoundaryValue(0, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 100, + "Validate result value for parameters (0,99,SDL_FALSE); expected: 100, got: %" SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 0xffffffffffffffff, SDL_FALSE) returns 0 (no error) */ + uresult = SDLTest_RandomUint64BoundaryValue(1, 0xffffffffffffffffULL, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters (1,0xffffffffffffffff,SDL_FALSE); expected: 0, got: %" SDL_PRIs64, uresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xfffffffffffffffe, SDL_FALSE) returns 0xffffffffffffffff (no error) */ + uresult = SDLTest_RandomUint64BoundaryValue(0, 0xfffffffffffffffeULL, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0xffffffffffffffffULL, + "Validate result value for parameters (0,0xfffffffffffffffe,SDL_FALSE); expected: 0xffffffffffffffff, got: %" SDL_PRIs64, uresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xffffffffffffffff, SDL_FALSE) returns 0 (sets error) */ + uresult = SDLTest_RandomUint64BoundaryValue(0, 0xffffffffffffffffULL, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters(0,0xffffffffffffffff,SDL_FALSE); expected: 0, got: %" SDL_PRIs64, uresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * \brief Calls to random boundary number generators for Sint8 + */ +static int sdltest_randomBoundaryNumberSint8(void *arg) +{ + const char *expectedError = "That operation is not supported"; + const char *lastError; + Sint64 sresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomSintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12 || sresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 0 || sresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(SCHAR_MIN, 99, SDL_FALSE) returns 100 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(SCHAR_MIN, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 100, + "Validate result value for parameters (SCHAR_MIN,99,SDL_FALSE); expected: 100, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(SCHAR_MIN + 1, SCHAR_MAX, SDL_FALSE) returns SCHAR_MIN (no error) */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(SCHAR_MIN + 1, SCHAR_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == SCHAR_MIN, + "Validate result value for parameters (SCHAR_MIN + 1,SCHAR_MAX,SDL_FALSE); expected: %d, got: %" SDL_PRIs64, SCHAR_MIN, sresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(SCHAR_MIN, SCHAR_MAX - 1, SDL_FALSE) returns SCHAR_MAX (no error) */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(SCHAR_MIN, SCHAR_MAX - 1, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == SCHAR_MAX, + "Validate result value for parameters (SCHAR_MIN,SCHAR_MAX - 1,SDL_FALSE); expected: %d, got: %" SDL_PRIs64, SCHAR_MAX, sresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(SCHAR_MIN, SCHAR_MAX, SDL_FALSE) returns SCHAR_MIN (sets error) */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(SCHAR_MIN, SCHAR_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == SCHAR_MIN, + "Validate result value for parameters(SCHAR_MIN,SCHAR_MAX,SDL_FALSE); expected: %d, got: %" SDL_PRIs64, SCHAR_MIN, sresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * \brief Calls to random boundary number generators for Sint16 + */ +static int sdltest_randomBoundaryNumberSint16(void *arg) +{ + const char *expectedError = "That operation is not supported"; + const char *lastError; + Sint64 sresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomSintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12 || sresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 0 || sresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(SHRT_MIN, 99, SDL_FALSE) returns 100 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(SHRT_MIN, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 100, + "Validate result value for parameters (SHRT_MIN,99,SDL_FALSE); expected: 100, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(SHRT_MIN + 1, SHRT_MAX, SDL_FALSE) returns SHRT_MIN (no error) */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(SHRT_MIN + 1, SHRT_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == SHRT_MIN, + "Validate result value for parameters (SHRT_MIN+1,SHRT_MAX,SDL_FALSE); expected: %d, got: %" SDL_PRIs64, SHRT_MIN, sresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(SHRT_MIN, SHRT_MAX - 1, SDL_FALSE) returns SHRT_MAX (no error) */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(SHRT_MIN, SHRT_MAX - 1, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == SHRT_MAX, + "Validate result value for parameters (SHRT_MIN,SHRT_MAX - 1,SDL_FALSE); expected: %d, got: %" SDL_PRIs64, SHRT_MAX, sresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(SHRT_MIN, SHRT_MAX, SDL_FALSE) returns 0 (sets error) */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(SHRT_MIN, SHRT_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == SHRT_MIN, + "Validate result value for parameters(SHRT_MIN,SHRT_MAX,SDL_FALSE); expected: %d, got: %" SDL_PRIs64, SHRT_MIN, sresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * \brief Calls to random boundary number generators for Sint32 + */ +static int sdltest_randomBoundaryNumberSint32(void *arg) +{ + const char *expectedError = "That operation is not supported"; + const char *lastError; + Sint64 sresult; +#if ((ULONG_MAX) == (UINT_MAX)) + Sint32 long_min = LONG_MIN; + Sint32 long_max = LONG_MAX; +#else + Sint32 long_min = INT_MIN; + Sint32 long_max = INT_MAX; +#endif + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomSintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12 || sresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 0 || sresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(LONG_MIN, 99, SDL_FALSE) returns 100 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(long_min, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 100, + "Validate result value for parameters (LONG_MIN,99,SDL_FALSE); expected: 100, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(LONG_MIN + 1, LONG_MAX, SDL_FALSE) returns LONG_MIN (no error) */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(long_min + 1, long_max, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == long_min, + "Validate result value for parameters (LONG_MIN+1,LONG_MAX,SDL_FALSE); expected: %" SDL_PRIs32 ", got: %" SDL_PRIs64, long_min, sresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(LONG_MIN, LONG_MAX - 1, SDL_FALSE) returns LONG_MAX (no error) */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(long_min, long_max - 1, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == long_max, + "Validate result value for parameters (LONG_MIN,LONG_MAX - 1,SDL_FALSE); expected: %" SDL_PRIs32 ", got: %" SDL_PRIs64, long_max, sresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(LONG_MIN, LONG_MAX, SDL_FALSE) returns 0 (sets error) */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(long_min, long_max, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == long_min, + "Validate result value for parameters(LONG_MIN,LONG_MAX,SDL_FALSE); expected: %" SDL_PRIs32 ", got: %" SDL_PRIs64, long_min, sresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * \brief Calls to random boundary number generators for Sint64 + */ +static int sdltest_randomBoundaryNumberSint64(void *arg) +{ + const char *expectedError = "That operation is not supported"; + const char *lastError; + Sint64 sresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomSintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + sresult = SDLTest_RandomSint64BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + sresult = SDLTest_RandomSint64BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + sresult = SDLTest_RandomSint64BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + sresult = SDLTest_RandomSint64BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12 || sresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = SDLTest_RandomSint64BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = SDLTest_RandomSint64BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + sresult = SDLTest_RandomSint64BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 0 || sresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(LLONG_MIN, 99, SDL_FALSE) returns 100 */ + sresult = SDLTest_RandomSint64BoundaryValue(INT64_MIN, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 100, + "Validate result value for parameters (LLONG_MIN,99,SDL_FALSE); expected: 100, got: %" SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(LLONG_MIN + 1, LLONG_MAX, SDL_FALSE) returns LLONG_MIN (no error) */ + sresult = SDLTest_RandomSint64BoundaryValue(INT64_MIN + 1, INT64_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == INT64_MIN, + "Validate result value for parameters (LLONG_MIN+1,LLONG_MAX,SDL_FALSE); expected: %" SDL_PRIs64 ", got: %" SDL_PRIs64, INT64_MIN, sresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(LLONG_MIN, LLONG_MAX - 1, SDL_FALSE) returns LLONG_MAX (no error) */ + sresult = SDLTest_RandomSint64BoundaryValue(INT64_MIN, INT64_MAX - 1, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == INT64_MAX, + "Validate result value for parameters (LLONG_MIN,LLONG_MAX - 1,SDL_FALSE); expected: %" SDL_PRIs64 ", got: %" SDL_PRIs64, INT64_MAX, sresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(LLONG_MIN, LLONG_MAX, SDL_FALSE) returns 0 (sets error) */ + sresult = SDLTest_RandomSint64BoundaryValue(INT64_MIN, INT64_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == INT64_MIN, + "Validate result value for parameters(LLONG_MIN,LLONG_MAX,SDL_FALSE); expected: %" SDL_PRIs64 ", got: %" SDL_PRIs64, INT64_MIN, sresult); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * \brief Calls to SDLTest_RandomIntegerInRange + */ +static int sdltest_randomIntegerInRange(void *arg) +{ + Sint32 min, max; + Sint32 result; +#if ((ULONG_MAX) == (UINT_MAX)) + Sint32 long_min = LONG_MIN; + Sint32 long_max = LONG_MAX; +#else + Sint32 long_min = INT_MIN; + Sint32 long_max = INT_MAX; +#endif + + /* Standard range */ + min = (Sint32)SDLTest_RandomSint16(); + max = min + (Sint32)SDLTest_RandomUint8() + 2; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(min,max)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%" SDL_PRIs32 ",%" SDL_PRIs32 "], got: %" SDL_PRIs32, min, max, result); + + /* One Range */ + min = (Sint32)SDLTest_RandomSint16(); + max = min + 1; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(min,min+1)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%" SDL_PRIs32 ",%" SDL_PRIs32 "], got: %" SDL_PRIs32, min, max, result); + + /* Zero range */ + min = (Sint32)SDLTest_RandomSint16(); + max = min; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(min,min)"); + SDLTest_AssertCheck(min == result, "Validated returned value; expected: %" SDL_PRIs32 ", got: %" SDL_PRIs32, min, result); + + /* Zero range at zero */ + min = 0; + max = 0; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(0,0)"); + SDLTest_AssertCheck(result == 0, "Validated returned value; expected: 0, got: %" SDL_PRIs32, result); + + /* Swapped min-max */ + min = (Sint32)SDLTest_RandomSint16(); + max = min + (Sint32)SDLTest_RandomUint8() + 2; + result = SDLTest_RandomIntegerInRange(max, min); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(max,min)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%" SDL_PRIs32 ",%" SDL_PRIs32 "], got: %" SDL_PRIs32, min, max, result); + + /* Range with min at integer limit */ + min = long_min; + max = long_max + (Sint32)SDLTest_RandomSint16(); + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(SINT32_MIN,...)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%" SDL_PRIs32 ",%" SDL_PRIs32 "], got: %" SDL_PRIs32, min, max, result); + + /* Range with max at integer limit */ + min = long_min - (Sint32)SDLTest_RandomSint16(); + max = long_max; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(...,SINT32_MAX)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%" SDL_PRIs32 ",%" SDL_PRIs32 "], got: %" SDL_PRIs32, min, max, result); + + /* Full integer range */ + min = long_min; + max = long_max; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(SINT32_MIN,SINT32_MAX)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%" SDL_PRIs32 ",%" SDL_PRIs32 "], got: %" SDL_PRIs32, min, max, result); + + return TEST_COMPLETED; +} + +/** + * \brief Calls to SDLTest_RandomAsciiString + */ +static int sdltest_randomAsciiString(void *arg) +{ + char *result; + size_t len; + int nonAsciiCharacters; + size_t i; + + result = SDLTest_RandomAsciiString(); + SDLTest_AssertPass("Call to SDLTest_RandomAsciiString()"); + SDLTest_AssertCheck(result != NULL, "Validate that result is not NULL"); + if (result != NULL) { + len = SDL_strlen(result); + SDLTest_AssertCheck(len >= 1 && len <= 255, "Validate that result length; expected: len=[1,255], got: %d", (int)len); + nonAsciiCharacters = 0; + for (i = 0; i < len; i++) { + if (SDL_iscntrl(result[i])) { + nonAsciiCharacters++; + } + } + SDLTest_AssertCheck(nonAsciiCharacters == 0, "Validate that result does not contain non-Ascii characters, got: %d", nonAsciiCharacters); + if (nonAsciiCharacters) { + SDLTest_LogError("Invalid result from generator: '%s'", result); + } + SDL_free(result); + } + + return TEST_COMPLETED; +} + +/** + * \brief Calls to SDLTest_RandomAsciiStringWithMaximumLength + */ +static int sdltest_randomAsciiStringWithMaximumLength(void *arg) +{ + const char *expectedError = "Parameter 'maxLength' is invalid"; + const char *lastError; + char *result; + size_t targetLen; + size_t len; + int nonAsciiCharacters; + size_t i; + + targetLen = 16 + SDLTest_RandomUint8(); + result = SDLTest_RandomAsciiStringWithMaximumLength((int)targetLen); + SDLTest_AssertPass("Call to SDLTest_RandomAsciiStringWithMaximumLength(%d)", (int)targetLen); + SDLTest_AssertCheck(result != NULL, "Validate that result is not NULL"); + if (result != NULL) { + len = SDL_strlen(result); + SDLTest_AssertCheck(len >= 1 && len <= targetLen, "Validate that result length; expected: len=[1,%d], got: %d", (int)targetLen, (int)len); + nonAsciiCharacters = 0; + for (i = 0; i < len; i++) { + if (SDL_iscntrl(result[i])) { + nonAsciiCharacters++; + } + } + SDLTest_AssertCheck(nonAsciiCharacters == 0, "Validate that result does not contain non-Ascii characters, got: %d", nonAsciiCharacters); + if (nonAsciiCharacters) { + SDLTest_LogError("Invalid result from generator: '%s'", result); + } + SDL_free(result); + } + + /* Negative test */ + targetLen = 0; + result = SDLTest_RandomAsciiStringWithMaximumLength((int)targetLen); + SDLTest_AssertPass("Call to SDLTest_RandomAsciiStringWithMaximumLength(%d)", (int)targetLen); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * \brief Calls to SDLTest_RandomAsciiStringOfSize + */ +static int sdltest_randomAsciiStringOfSize(void *arg) +{ + const char *expectedError = "Parameter 'size' is invalid"; + const char *lastError; + char *result; + size_t targetLen; + size_t len; + int nonAsciiCharacters; + size_t i; + + /* Positive test */ + targetLen = 16 + SDLTest_RandomUint8(); + result = SDLTest_RandomAsciiStringOfSize((int)targetLen); + SDLTest_AssertPass("Call to SDLTest_RandomAsciiStringOfSize(%d)", (int)targetLen); + SDLTest_AssertCheck(result != NULL, "Validate that result is not NULL"); + if (result != NULL) { + len = SDL_strlen(result); + SDLTest_AssertCheck(len == targetLen, "Validate that result length; expected: len=%d, got: %d", (int)targetLen, (int)len); + nonAsciiCharacters = 0; + for (i = 0; i < len; i++) { + if (SDL_iscntrl(result[i])) { + nonAsciiCharacters++; + } + } + SDLTest_AssertCheck(nonAsciiCharacters == 0, "Validate that result does not contain non-ASCII characters, got: %d", nonAsciiCharacters); + if (nonAsciiCharacters) { + SDLTest_LogError("Invalid result from generator: '%s'", result); + } + SDL_free(result); + } + + /* Negative test */ + targetLen = 0; + result = SDLTest_RandomAsciiStringOfSize((int)targetLen); + SDLTest_AssertPass("Call to SDLTest_RandomAsciiStringOfSize(%d)", (int)targetLen); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* SDL_test test cases */ +static const SDLTest_TestCaseReference sdltestTest1 = { + (SDLTest_TestCaseFp)sdltest_getFuzzerInvocationCount, "sdltest_getFuzzerInvocationCount", "Call to sdltest_GetFuzzerInvocationCount", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference sdltestTest2 = { + (SDLTest_TestCaseFp)sdltest_randomNumber, "sdltest_randomNumber", "Calls to random number generators", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference sdltestTest3 = { + (SDLTest_TestCaseFp)sdltest_randomBoundaryNumberUint8, "sdltest_randomBoundaryNumberUint8", "Calls to random boundary number generators for Uint8", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference sdltestTest4 = { + (SDLTest_TestCaseFp)sdltest_randomBoundaryNumberUint16, "sdltest_randomBoundaryNumberUint16", "Calls to random boundary number generators for Uint16", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference sdltestTest5 = { + (SDLTest_TestCaseFp)sdltest_randomBoundaryNumberUint32, "sdltest_randomBoundaryNumberUint32", "Calls to random boundary number generators for Uint32", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference sdltestTest6 = { + (SDLTest_TestCaseFp)sdltest_randomBoundaryNumberUint64, "sdltest_randomBoundaryNumberUint64", "Calls to random boundary number generators for Uint64", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference sdltestTest7 = { + (SDLTest_TestCaseFp)sdltest_randomBoundaryNumberSint8, "sdltest_randomBoundaryNumberSint8", "Calls to random boundary number generators for Sint8", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference sdltestTest8 = { + (SDLTest_TestCaseFp)sdltest_randomBoundaryNumberSint16, "sdltest_randomBoundaryNumberSint16", "Calls to random boundary number generators for Sint16", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference sdltestTest9 = { + (SDLTest_TestCaseFp)sdltest_randomBoundaryNumberSint32, "sdltest_randomBoundaryNumberSint32", "Calls to random boundary number generators for Sint32", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference sdltestTest10 = { + (SDLTest_TestCaseFp)sdltest_randomBoundaryNumberSint64, "sdltest_randomBoundaryNumberSint64", "Calls to random boundary number generators for Sint64", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference sdltestTest11 = { + (SDLTest_TestCaseFp)sdltest_randomIntegerInRange, "sdltest_randomIntegerInRange", "Calls to ranged random number generator", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference sdltestTest12 = { + (SDLTest_TestCaseFp)sdltest_randomAsciiString, "sdltest_randomAsciiString", "Calls to default ASCII string generator", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference sdltestTest13 = { + (SDLTest_TestCaseFp)sdltest_randomAsciiStringWithMaximumLength, "sdltest_randomAsciiStringWithMaximumLength", "Calls to random maximum length ASCII string generator", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference sdltestTest14 = { + (SDLTest_TestCaseFp)sdltest_randomAsciiStringOfSize, "sdltest_randomAsciiStringOfSize", "Calls to fixed size ASCII string generator", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference sdltestTest15 = { + (SDLTest_TestCaseFp)sdltest_generateRunSeed, "sdltest_generateRunSeed", "Checks internal harness function SDLTest_GenerateRunSeed", TEST_ENABLED +}; + +/* Sequence of SDL_test test cases */ +static const SDLTest_TestCaseReference *sdltestTests[] = { + &sdltestTest1, &sdltestTest2, &sdltestTest3, &sdltestTest4, &sdltestTest5, &sdltestTest6, + &sdltestTest7, &sdltestTest8, &sdltestTest9, &sdltestTest10, &sdltestTest11, &sdltestTest12, + &sdltestTest13, &sdltestTest14, &sdltestTest15, NULL +}; + +/* SDL_test test suite (global) */ +SDLTest_TestSuiteReference sdltestTestSuite = { + "SDLtest", + NULL, + sdltestTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_stdlib.c b/vendor/sdl-3.0.0/test/testautomation_stdlib.c new file mode 100644 index 0000000..ce24939 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_stdlib.c @@ -0,0 +1,975 @@ +/** + * Standard C library routine test suite + */ +#include +#include +#include "testautomation_suites.h" + +/* Test case functions */ + +/** + * \brief Call to SDL_strnlen + */ +#undef SDL_strnlen +static int stdlib_strnlen(void *arg) +{ + size_t result; + char *text_result; + const char *text = "food"; + const char *expected; + + result = SDL_strnlen(text, 6); + SDLTest_AssertPass("Call to SDL_strndup(\"food\", 6)"); + SDLTest_AssertCheck(result == 4, "Check result value, expected: 4, got: %d", (int)result); + + result = SDL_strnlen(text, 3); + SDLTest_AssertPass("Call to SDL_strndup(\"food\", 3)"); + SDLTest_AssertCheck(result == 3, "Check result value, expected: 3, got: %d", (int)result); + + text_result = SDL_strndup(text, 3); + expected = "foo"; + SDLTest_AssertPass("Call to SDL_strndup(\"food\", 3)"); + SDLTest_AssertCheck(SDL_strcmp(text_result, expected) == 0, "Check text, expected: %s, got: %s", expected, text_result); + SDL_free(text_result); + + return TEST_COMPLETED; +} + +/** + * \brief Call to SDL_strlcpy + */ +#undef SDL_strlcpy +static int stdlib_strlcpy(void *arg) +{ + size_t result; + char text[1024]; + const char *expected; + + result = SDL_strlcpy(text, "foo", sizeof(text)); + expected = "foo"; + SDLTest_AssertPass("Call to SDL_strlcpy(\"foo\")"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int)SDL_strlen(text), (int)result); + + result = SDL_strlcpy(text, "foo", 2); + expected = "f"; + SDLTest_AssertPass("Call to SDL_strlcpy(\"foo\") with buffer size 2"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == 3, "Check result value, expected: 3, got: %d", (int)result); + + return TEST_COMPLETED; +} + +#if defined(HAVE_WFORMAT) || defined(HAVE_WFORMAT_EXTRA_ARGS) +#pragma GCC diagnostic push +#ifdef HAVE_WFORMAT +#pragma GCC diagnostic ignored "-Wformat" +#endif +#ifdef HAVE_WFORMAT_EXTRA_ARGS +#pragma GCC diagnostic ignored "-Wformat-extra-args" +#endif +#endif + +/** + * \brief Call to SDL_snprintf + */ +#undef SDL_snprintf +static int stdlib_snprintf(void *arg) +{ + int result; + int predicted; + char text[1024]; + const char *expected; + size_t size; + + result = SDL_snprintf(text, sizeof(text), "%s", "foo"); + expected = "foo"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%s\", \"foo\")"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int)SDL_strlen(text), result); + + result = SDL_snprintf(text, sizeof(text), "%S", L"foo"); + expected = "foo"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%S\", \"foo\")"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int)SDL_strlen(text), result); + + result = SDL_snprintf(text, sizeof(text), "%ls", L"foo"); + expected = "foo"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%ls\", \"foo\")"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int)SDL_strlen(text), result); + + result = SDL_snprintf(text, 2, "%s", "foo"); + expected = "f"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%s\", \"foo\") with buffer size 2"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == 3, "Check result value, expected: 3, got: %d", result); + + result = SDL_snprintf(NULL, 0, "%s", "foo"); + SDLTest_AssertPass("Call to SDL_snprintf(NULL, 0, \"%%s\", \"foo\")"); + SDLTest_AssertCheck(result == 3, "Check result value, expected: 3, got: %d", result); + + result = SDL_snprintf(text, 2, "%s\n", "foo"); + expected = "f"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%s\\n\", \"foo\") with buffer size 2"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == 4, "Check result value, expected: 4, got: %d", result); + + result = SDL_snprintf(text, sizeof(text), "%f", 0.0); + predicted = SDL_snprintf(NULL, 0, "%f", 0.0); + expected = "0.000000"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%f\", 0.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int)SDL_strlen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_snprintf(text, sizeof(text), "%f", 1.0); + predicted = SDL_snprintf(NULL, 0, "%f", 1.0); + expected = "1.000000"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%f\", 1.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int)SDL_strlen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_snprintf(text, sizeof(text), "%.f", 1.0); + predicted = SDL_snprintf(NULL, 0, "%.f", 1.0); + expected = "1"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%.f\", 1.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int)SDL_strlen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_snprintf(text, sizeof(text), "%#.f", 1.0); + predicted = SDL_snprintf(NULL, 0, "%#.f", 1.0); + expected = "1."; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%#.f\", 1.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int)SDL_strlen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_snprintf(text, sizeof(text), "%f", 1.0 + 1.0 / 3.0); + predicted = SDL_snprintf(NULL, 0, "%f", 1.0 + 1.0 / 3.0); + expected = "1.333333"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int)SDL_strlen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_snprintf(text, sizeof(text), "%+f", 1.0 + 1.0 / 3.0); + predicted = SDL_snprintf(NULL, 0, "%+f", 1.0 + 1.0 / 3.0); + expected = "+1.333333"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%+f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int)SDL_strlen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_snprintf(text, sizeof(text), "%.2f", 1.0 + 1.0 / 3.0); + predicted = SDL_snprintf(NULL, 0, "%.2f", 1.0 + 1.0 / 3.0); + expected = "1.33"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%.2f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int)SDL_strlen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_snprintf(text, sizeof(text), "%6.2f", 1.0 + 1.0 / 3.0); + predicted = SDL_snprintf(NULL, 0, "%6.2f", 1.0 + 1.0 / 3.0); + expected = " 1.33"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%6.2f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int)SDL_strlen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_snprintf(text, sizeof(text), "%06.2f", 1.0 + 1.0 / 3.0); + predicted = SDL_snprintf(NULL, 0, "%06.2f", 1.0 + 1.0 / 3.0); + expected = "001.33"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%06.2f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int)SDL_strlen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_snprintf(text, 5, "%06.2f", 1.0 + 1.0 / 3.0); + expected = "001."; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%06.2f\", 1.0 + 1.0 / 3.0) with buffer size 5"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == 6, "Check result value, expected: 6, got: %d", result); + + { + static struct + { + int precision; + float value; + const char *expected_f; + const char *expected_g; + } f_and_g_test_cases[] = { + { 6, 100.0f, "100.000000", "100" }, + { 6, -100.0f, "-100.000000", "-100" }, + { 6, 100.75f, "100.750000", "100.75" }, + { 6, -100.75f, "-100.750000", "-100.75" }, + { 6, ((100 * 60 * 1000) / 1001) / 100.0f, "59.939999", "59.94" }, + { 6, -((100 * 60 * 1000) / 1001) / 100.0f, "-59.939999", "-59.94" }, + { 6, ((100 * 120 * 1000) / 1001) / 100.0f, "119.879997", "119.88" }, + { 6, -((100 * 120 * 1000) / 1001) / 100.0f, "-119.879997", "-119.88" }, + { 6, 0.9999999f, "1.000000", "1" }, + { 6, -0.9999999f, "-1.000000", "-1" }, + { 5, 9.999999f, "10.00000", "10" }, + { 5, -9.999999f, "-10.00000", "-10" }, + }; + int i; + + for (i = 0; i < SDL_arraysize(f_and_g_test_cases); ++i) { + float value = f_and_g_test_cases[i].value; + int prec = f_and_g_test_cases[i].precision; + + result = SDL_snprintf(text, sizeof(text), "%.*f", prec, value); + predicted = SDL_snprintf(NULL, 0, "%.*f", prec, value); + expected = f_and_g_test_cases[i].expected_f; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%.5f\", %g)", value); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(expected), "Check result value, expected: %d, got: %d", (int)SDL_strlen(expected), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_snprintf(text, sizeof(text), "%g", value); + predicted = SDL_snprintf(NULL, 0, "%g", value); + expected = f_and_g_test_cases[i].expected_g; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%g\", %g)", value); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(expected), "Check result value, expected: %d, got: %d", (int)SDL_strlen(expected), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + } + } + + size = 64; + result = SDL_snprintf(text, sizeof(text), "%zu %s", size, "test"); + expected = "64 test"; + SDLTest_AssertPass("Call to SDL_snprintf(text, sizeof(text), \"%%zu %%s\", size, \"test\")"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == 7, "Check result value, expected: 7, got: %d", result); + + result = SDL_snprintf(text, sizeof(text), "%p", (void *)0x1234abcd); + expected = "0x1234abcd"; + SDLTest_AssertPass("Call to SDL_snprintf(text, sizeof(text), \"%%p\", 0x1234abcd)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(expected), "Check result value, expected: %d, got: %d", (int)SDL_strlen(expected), result); + + result = SDL_snprintf(text, sizeof(text), "A %p B", (void *)0x1234abcd); + expected = "A 0x1234abcd B"; + SDLTest_AssertPass("Call to SDL_snprintf(text, sizeof(text), \"A %%p B\", 0x1234abcd)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(expected), "Check result value, expected: %d, got: %d", (int)SDL_strlen(expected), result); + + return TEST_COMPLETED; +} + +/** + * \brief Call to SDL_swprintf + */ +#undef SDL_swprintf +static int stdlib_swprintf(void *arg) +{ + int result; + int predicted; + wchar_t text[1024]; + const wchar_t *expected; + size_t size; + + result = SDL_swprintf(text, sizeof(text), L"%s", "foo"); + expected = L"foo"; + SDLTest_AssertPass("Call to SDL_swprintf(\"%%s\", \"foo\")"); + SDLTest_AssertCheck(SDL_wcscmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_wcslen(text), "Check result value, expected: %d, got: %d", (int)SDL_wcslen(text), result); + + result = SDL_swprintf(text, 2, L"%s", "foo"); + expected = L"f"; + SDLTest_AssertPass("Call to SDL_swprintf(\"%%s\", \"foo\") with buffer size 2"); + SDLTest_AssertCheck(SDL_wcscmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == 3, "Check result value, expected: 3, got: %d", result); + + result = SDL_swprintf(NULL, 0, L"%s", "foo"); + SDLTest_AssertPass("Call to SDL_swprintf(NULL, 0, \"%%s\", \"foo\")"); + SDLTest_AssertCheck(result == 3, "Check result value, expected: 3, got: %d", result); + + result = SDL_swprintf(text, 2, L"%s\n", "foo"); + expected = L"f"; + SDLTest_AssertPass("Call to SDL_swprintf(\"%%s\\n\", \"foo\") with buffer size 2"); + SDLTest_AssertCheck(SDL_wcscmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == 4, "Check result value, expected: 4, got: %d", result); + + result = SDL_swprintf(text, sizeof(text), L"%f", 0.0); + predicted = SDL_swprintf(NULL, 0, L"%f", 0.0); + expected = L"0.000000"; + SDLTest_AssertPass("Call to SDL_swprintf(\"%%f\", 0.0)"); + SDLTest_AssertCheck(SDL_wcscmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_wcslen(text), "Check result value, expected: %d, got: %d", (int)SDL_wcslen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_swprintf(text, sizeof(text), L"%f", 1.0); + predicted = SDL_swprintf(NULL, 0, L"%f", 1.0); + expected = L"1.000000"; + SDLTest_AssertPass("Call to SDL_swprintf(\"%%f\", 1.0)"); + SDLTest_AssertCheck(SDL_wcscmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_wcslen(text), "Check result value, expected: %d, got: %d", (int)SDL_wcslen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_swprintf(text, sizeof(text), L"%.f", 1.0); + predicted = SDL_swprintf(NULL, 0, L"%.f", 1.0); + expected = L"1"; + SDLTest_AssertPass("Call to SDL_swprintf(\"%%.f\", 1.0)"); + SDLTest_AssertCheck(SDL_wcscmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_wcslen(text), "Check result value, expected: %d, got: %d", (int)SDL_wcslen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_swprintf(text, sizeof(text), L"%#.f", 1.0); + predicted = SDL_swprintf(NULL, 0, L"%#.f", 1.0); + expected = L"1."; + SDLTest_AssertPass("Call to SDL_swprintf(\"%%#.f\", 1.0)"); + SDLTest_AssertCheck(SDL_wcscmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_wcslen(text), "Check result value, expected: %d, got: %d", (int)SDL_wcslen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_swprintf(text, sizeof(text), L"%f", 1.0 + 1.0 / 3.0); + predicted = SDL_swprintf(NULL, 0, L"%f", 1.0 + 1.0 / 3.0); + expected = L"1.333333"; + SDLTest_AssertPass("Call to SDL_swprintf(\"%%f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_wcscmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_wcslen(text), "Check result value, expected: %d, got: %d", (int)SDL_wcslen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_swprintf(text, sizeof(text), L"%+f", 1.0 + 1.0 / 3.0); + predicted = SDL_swprintf(NULL, 0, L"%+f", 1.0 + 1.0 / 3.0); + expected = L"+1.333333"; + SDLTest_AssertPass("Call to SDL_swprintf(\"%%+f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_wcscmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_wcslen(text), "Check result value, expected: %d, got: %d", (int)SDL_wcslen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_swprintf(text, sizeof(text), L"%.2f", 1.0 + 1.0 / 3.0); + predicted = SDL_swprintf(NULL, 0, L"%.2f", 1.0 + 1.0 / 3.0); + expected = L"1.33"; + SDLTest_AssertPass("Call to SDL_swprintf(\"%%.2f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_wcscmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_wcslen(text), "Check result value, expected: %d, got: %d", (int)SDL_wcslen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_swprintf(text, sizeof(text), L"%6.2f", 1.0 + 1.0 / 3.0); + predicted = SDL_swprintf(NULL, 0, L"%6.2f", 1.0 + 1.0 / 3.0); + expected = L" 1.33"; + SDLTest_AssertPass("Call to SDL_swprintf(\"%%6.2f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_wcscmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == SDL_wcslen(text), "Check result value, expected: %d, got: %d", (int)SDL_wcslen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_swprintf(text, sizeof(text), L"%06.2f", 1.0 + 1.0 / 3.0); + predicted = SDL_swprintf(NULL, 0, L"%06.2f", 1.0 + 1.0 / 3.0); + expected = L"001.33"; + SDLTest_AssertPass("Call to SDL_swprintf(\"%%06.2f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_wcscmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == SDL_wcslen(text), "Check result value, expected: %d, got: %d", (int)SDL_wcslen(text), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_swprintf(text, 5, L"%06.2f", 1.0 + 1.0 / 3.0); + expected = L"001."; + SDLTest_AssertPass("Call to SDL_swprintf(\"%%06.2f\", 1.0 + 1.0 / 3.0) with buffer size 5"); + SDLTest_AssertCheck(SDL_wcscmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == 6, "Check result value, expected: 6, got: %d", result); + + { + static struct + { + float value; + const wchar_t *expected_f; + const wchar_t *expected_g; + } f_and_g_test_cases[] = { + { 100.0f, L"100.000000", L"100" }, + { -100.0f, L"-100.000000", L"-100" }, + { 100.75f, L"100.750000", L"100.75" }, + { -100.75f, L"-100.750000", L"-100.75" }, + { ((100 * 60 * 1000) / 1001) / 100.0f, L"59.939999", L"59.94" }, + { -((100 * 60 * 1000) / 1001) / 100.0f, L"-59.939999", L"-59.94" }, + { ((100 * 120 * 1000) / 1001) / 100.0f, L"119.879997", L"119.88" }, + { -((100 * 120 * 1000) / 1001) / 100.0f, L"-119.879997", L"-119.88" }, + { 9.9999999f, L"10.000000", L"10" }, + { -9.9999999f, L"-10.000000", L"-10" }, + }; + int i; + + for (i = 0; i < SDL_arraysize(f_and_g_test_cases); ++i) { + float value = f_and_g_test_cases[i].value; + + result = SDL_swprintf(text, sizeof(text), L"%f", value); + predicted = SDL_swprintf(NULL, 0, L"%f", value); + expected = f_and_g_test_cases[i].expected_f; + SDLTest_AssertPass("Call to SDL_swprintf(\"%%f\", %g)", value); + SDLTest_AssertCheck(SDL_wcscmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == SDL_wcslen(expected), "Check result value, expected: %d, got: %d", (int)SDL_wcslen(expected), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + + result = SDL_swprintf(text, sizeof(text), L"%g", value); + predicted = SDL_swprintf(NULL, 0, L"%g", value); + expected = f_and_g_test_cases[i].expected_g; + SDLTest_AssertPass("Call to SDL_swprintf(\"%%g\", %g)", value); + SDLTest_AssertCheck(SDL_wcscmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == SDL_wcslen(expected), "Check result value, expected: %d, got: %d", (int)SDL_wcslen(expected), result); + SDLTest_AssertCheck(predicted == result, "Check predicted value, expected: %d, got: %d", result, predicted); + } + } + + size = 64; + result = SDL_swprintf(text, sizeof(text), L"%zu %s", size, "test"); + expected = L"64 test"; + SDLTest_AssertPass("Call to SDL_swprintf(text, sizeof(text), \"%%zu %%s\", size, \"test\")"); + SDLTest_AssertCheck(SDL_wcscmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == 7, "Check result value, expected: 7, got: %d", result); + + return TEST_COMPLETED; +} + +#if defined(HAVE_WFORMAT) || defined(HAVE_WFORMAT_EXTRA_ARGS) +#pragma GCC diagnostic pop +#endif + +/** + * \brief Call to SDL_getenv and SDL_setenv + */ +static int stdlib_getsetenv(void *arg) +{ + const int nameLen = 16; + char name[17]; + int counter; + int result; + char *value1; + char *value2; + char *expected; + int overwrite; + char *text; + + /* Create a random name. This tests SDL_getenv, since we need to */ + /* make sure the variable is not set yet (it shouldn't). */ + do { + for (counter = 0; counter < nameLen; counter++) { + name[counter] = (char)SDLTest_RandomIntegerInRange(65, 90); + } + name[nameLen] = '\0'; + + text = SDL_getenv(name); + SDLTest_AssertPass("Call to SDL_getenv('%s')", name); + if (text != NULL) { + SDLTest_Log("Expected: NULL, Got: '%s' (%i)", text, (int)SDL_strlen(text)); + } + } while (text != NULL); + + /* Create random values to set */ + value1 = SDLTest_RandomAsciiStringOfSize(10); + value2 = SDLTest_RandomAsciiStringOfSize(10); + + /* Set value 1 without overwrite */ + overwrite = 0; + expected = value1; + result = SDL_setenv(name, value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('%s','%s', %i)", name, value1, overwrite); + SDLTest_AssertCheck(result == 0, "Check result, expected: 0, got: %i", result); + + /* Check value */ + text = SDL_getenv(name); + SDLTest_AssertPass("Call to SDL_getenv('%s')", name); + SDLTest_AssertCheck(text != NULL, "Verify returned text is not NULL"); + if (text != NULL) { + SDLTest_AssertCheck( + SDL_strcmp(text, expected) == 0, + "Verify returned text, expected: %s, got: %s", + expected, + text); + } + + /* Set value 2 with overwrite */ + overwrite = 1; + expected = value2; + result = SDL_setenv(name, value2, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('%s','%s', %i)", name, value2, overwrite); + SDLTest_AssertCheck(result == 0, "Check result, expected: 0, got: %i", result); + + /* Check value */ + text = SDL_getenv(name); + SDLTest_AssertPass("Call to SDL_getenv('%s')", name); + SDLTest_AssertCheck(text != NULL, "Verify returned text is not NULL"); + if (text != NULL) { + SDLTest_AssertCheck( + SDL_strcmp(text, expected) == 0, + "Verify returned text, expected: %s, got: %s", + expected, + text); + } + + /* Set value 1 without overwrite */ + overwrite = 0; + expected = value2; + result = SDL_setenv(name, value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('%s','%s', %i)", name, value1, overwrite); + SDLTest_AssertCheck(result == 0, "Check result, expected: 0, got: %i", result); + + /* Check value */ + text = SDL_getenv(name); + SDLTest_AssertPass("Call to SDL_getenv('%s')", name); + SDLTest_AssertCheck(text != NULL, "Verify returned text is not NULL"); + if (text != NULL) { + SDLTest_AssertCheck( + SDL_strcmp(text, expected) == 0, + "Verify returned text, expected: %s, got: %s", + expected, + text); + } + + /* Set value 1 without overwrite */ + overwrite = 1; + expected = value1; + result = SDL_setenv(name, value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('%s','%s', %i)", name, value1, overwrite); + SDLTest_AssertCheck(result == 0, "Check result, expected: 0, got: %i", result); + + /* Check value */ + text = SDL_getenv(name); + SDLTest_AssertPass("Call to SDL_getenv('%s')", name); + SDLTest_AssertCheck(text != NULL, "Verify returned text is not NULL"); + if (text != NULL) { + SDLTest_AssertCheck( + SDL_strcmp(text, expected) == 0, + "Verify returned text, expected: %s, got: %s", + expected, + text); + } + + /* Negative cases */ + for (overwrite = 0; overwrite <= 1; overwrite++) { + result = SDL_setenv(NULL, value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv(NULL,'%s', %i)", value1, overwrite); + SDLTest_AssertCheck(result == -1, "Check result, expected: -1, got: %i", result); + result = SDL_setenv("", value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('','%s', %i)", value1, overwrite); + SDLTest_AssertCheck(result == -1, "Check result, expected: -1, got: %i", result); + result = SDL_setenv("=", value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('=','%s', %i)", value1, overwrite); + SDLTest_AssertCheck(result == -1, "Check result, expected: -1, got: %i", result); + result = SDL_setenv(name, NULL, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('%s', NULL, %i)", name, overwrite); + SDLTest_AssertCheck(result == -1, "Check result, expected: -1, got: %i", result); + } + + /* Clean up */ + SDL_free(value1); + SDL_free(value2); + + return TEST_COMPLETED; +} + +#if defined(HAVE_WFORMAT) || defined(HAVE_WFORMAT_EXTRA_ARGS) +#pragma GCC diagnostic push +#ifdef HAVE_WFORMAT +#pragma GCC diagnostic ignored "-Wformat" +#endif +#ifdef HAVE_WFORMAT_EXTRA_ARGS +#pragma GCC diagnostic ignored "-Wformat-extra-args" +#endif +#endif + +/** + * \brief Call to SDL_sscanf + */ +#undef SDL_sscanf +static int stdlib_sscanf(void *arg) +{ + int output; + int result; + int expected_output; + int expected_result; + short short_output, expected_short_output; + long long_output, expected_long_output; + long long long_long_output, expected_long_long_output; + size_t size_output, expected_size_output; + char text[128], text2[128]; + + expected_output = output = 123; + expected_result = -1; + result = SDL_sscanf("", "%i", &output); + SDLTest_AssertPass("Call to SDL_sscanf(\"\", \"%%i\", &output)"); + SDLTest_AssertCheck(expected_output == output, "Check output, expected: %i, got: %i", expected_output, output); + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + + expected_output = output = 123; + expected_result = 0; + result = SDL_sscanf("a", "%i", &output); + SDLTest_AssertPass("Call to SDL_sscanf(\"a\", \"%%i\", &output)"); + SDLTest_AssertCheck(expected_output == output, "Check output, expected: %i, got: %i", expected_output, output); + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + + output = 123; + expected_output = 2; + expected_result = 1; + result = SDL_sscanf("2", "%i", &output); + SDLTest_AssertPass("Call to SDL_sscanf(\"2\", \"%%i\", &output)"); + SDLTest_AssertCheck(expected_output == output, "Check output, expected: %i, got: %i", expected_output, output); + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + + output = 123; + expected_output = 0xa; + expected_result = 1; + result = SDL_sscanf("aa", "%1x", &output); + SDLTest_AssertPass("Call to SDL_sscanf(\"aa\", \"%%1x\", &output)"); + SDLTest_AssertCheck(expected_output == output, "Check output, expected: %i, got: %i", expected_output, output); + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + +#define SIZED_TEST_CASE(type, var, format_specifier) \ + var##_output = 123; \ + expected_##var##_output = (type)(((unsigned type)(~0)) >> 1); \ + expected_result = 1; \ + result = SDL_snprintf(text, sizeof(text), format_specifier, expected_##var##_output); \ + result = SDL_sscanf(text, format_specifier, &var##_output); \ + SDLTest_AssertPass("Call to SDL_sscanf(\"%s\", \"%s\", &output)", text, #format_specifier); \ + SDLTest_AssertCheck(expected_##var##_output == var##_output, "Check output, expected: " format_specifier ", got: " format_specifier, expected_##var##_output, var##_output); \ + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); \ + \ + var##_output = 123; \ + expected_##var##_output = ~(type)(((unsigned type)(~0)) >> 1); \ + expected_result = 1; \ + result = SDL_snprintf(text, sizeof(text), format_specifier, expected_##var##_output); \ + result = SDL_sscanf(text, format_specifier, &var##_output); \ + SDLTest_AssertPass("Call to SDL_sscanf(\"%s\", \"%s\", &output)", text, #format_specifier); \ + SDLTest_AssertCheck(expected_##var##_output == var##_output, "Check output, expected: " format_specifier ", got: " format_specifier, expected_##var##_output, var##_output); \ + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + + SIZED_TEST_CASE(short, short, "%hd") + SIZED_TEST_CASE(long, long, "%ld") + SIZED_TEST_CASE(long long, long_long, "%lld") + + size_output = 123; + expected_size_output = ~((size_t)0); + expected_result = 1; + result = SDL_snprintf(text, sizeof(text), "%zu", expected_size_output); + result = SDL_sscanf(text, "%zu", &size_output); + SDLTest_AssertPass("Call to SDL_sscanf(\"%s\", \"%%zu\", &output)", text); + SDLTest_AssertCheck(expected_size_output == size_output, "Check output, expected: %zu, got: %zu", expected_size_output, size_output); + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + + expected_result = 1; + text[0] = '\0'; + result = SDL_sscanf("abc def", "%s", text); + SDLTest_AssertPass("Call to SDL_sscanf(\"abc def\", \"%%s\", text)"); + SDLTest_AssertCheck(SDL_strcmp(text, "abc") == 0, "Check output, expected: \"abc\", got: \"%s\"", text); + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + + expected_result = 1; + text[0] = '\0'; + result = SDL_sscanf("abc,def", "%s", text); + SDLTest_AssertPass("Call to SDL_sscanf(\"abc,def\", \"%%s\", text)"); + SDLTest_AssertCheck(SDL_strcmp(text, "abc,def") == 0, "Check output, expected: \"abc\", got: \"%s\"", text); + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + + expected_result = 1; + text[0] = '\0'; + result = SDL_sscanf("abc,def", "%[cba]", text); + SDLTest_AssertPass("Call to SDL_sscanf(\"abc,def\", \"%%[cba]\", text)"); + SDLTest_AssertCheck(SDL_strcmp(text, "abc") == 0, "Check output, expected: \"abc\", got: \"%s\"", text); + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + + expected_result = 1; + text[0] = '\0'; + result = SDL_sscanf("abc,def", "%[a-z]", text); + SDLTest_AssertPass("Call to SDL_sscanf(\"abc,def\", \"%%[z-a]\", text)"); + SDLTest_AssertCheck(SDL_strcmp(text, "abc") == 0, "Check output, expected: \"abc\", got: \"%s\"", text); + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + + expected_result = 1; + text[0] = '\0'; + result = SDL_sscanf("abc,def", "%[^,]", text); + SDLTest_AssertPass("Call to SDL_sscanf(\"abc,def\", \"%%[^,]\", text)"); + SDLTest_AssertCheck(SDL_strcmp(text, "abc") == 0, "Check output, expected: \"abc\", got: \"%s\"", text); + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + + expected_result = 0; + text[0] = '\0'; + result = SDL_sscanf("abc,def", "%[A-Z]", text); + SDLTest_AssertPass("Call to SDL_sscanf(\"abc,def\", \"%%[A-Z]\", text)"); + SDLTest_AssertCheck(SDL_strcmp(text, "") == 0, "Check output, expected: \"\", got: \"%s\"", text); + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + + expected_result = 2; + text[0] = '\0'; + text2[0] = '\0'; + result = SDL_sscanf("abc,def", "%[abc],%[def]", text, text2); + SDLTest_AssertPass("Call to SDL_sscanf(\"abc,def\", \"%%[abc],%%[def]\", text)"); + SDLTest_AssertCheck(SDL_strcmp(text, "abc") == 0, "Check output, expected: \"abc\", got: \"%s\"", text); + SDLTest_AssertCheck(SDL_strcmp(text2, "def") == 0, "Check output, expected: \"def\", got: \"%s\"", text2); + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + + expected_result = 2; + text[0] = '\0'; + text2[0] = '\0'; + result = SDL_sscanf("abc,def", "%[abc]%*[,]%[def]", text, text2); + SDLTest_AssertPass("Call to SDL_sscanf(\"abc,def\", \"%%[abc]%%*[,]%%[def]\", text)"); + SDLTest_AssertCheck(SDL_strcmp(text, "abc") == 0, "Check output, expected: \"abc\", got: \"%s\"", text); + SDLTest_AssertCheck(SDL_strcmp(text2, "def") == 0, "Check output, expected: \"def\", got: \"%s\"", text2); + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + + expected_result = 2; + text[0] = '\0'; + text2[0] = '\0'; + result = SDL_sscanf("abc def", "%[abc] %[def]", text, text2); + SDLTest_AssertPass("Call to SDL_sscanf(\"abc def\", \"%%[abc] %%[def]\", text)"); + SDLTest_AssertCheck(SDL_strcmp(text, "abc") == 0, "Check output, expected: \"abc\", got: \"%s\"", text); + SDLTest_AssertCheck(SDL_strcmp(text2, "def") == 0, "Check output, expected: \"def\", got: \"%s\"", text2); + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + + expected_result = 1; + text[0] = '\0'; + result = SDL_sscanf("abc123XYZ", "%[a-zA-Z0-9]", text); + SDLTest_AssertPass("Call to SDL_sscanf(\"abc123XYZ\", \"%%[a-zA-Z0-9]\", text)"); + SDLTest_AssertCheck(SDL_strcmp(text, "abc123XYZ") == 0, "Check output, expected: \"abc123XYZ\", got: \"%s\"", text); + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + + return TEST_COMPLETED; +} + +#if defined(HAVE_WFORMAT) || defined(HAVE_WFORMAT_EXTRA_ARGS) +#pragma GCC diagnostic pop +#endif + +#ifdef _WIN64 +#define SIZE_FORMAT "I64u" +#elif defined(__WIN32__) +#define SIZE_FORMAT "I32u" +#else +#define SIZE_FORMAT "zu" +#endif + +/** + * \brief Call to SDL_aligned_alloc + */ +static int stdlib_aligned_alloc(void *arg) +{ + size_t i, alignment; + void *ptr; + + for (i = 0; i < 2*sizeof(void *); ++i) { + SDLTest_AssertPass("Call to SDL_aligned_alloc(%"SIZE_FORMAT")", i); + ptr = SDL_aligned_alloc(i, 1); + if (i < sizeof(void *)) { + alignment = sizeof(void *); + } else { + alignment = i; + } + SDLTest_AssertCheck(ptr != NULL, "Check output, expected non-NULL, got: %p", ptr); + SDLTest_AssertCheck((((size_t)ptr) % alignment) == 0, "Check output, expected aligned pointer, actual offset: %"SIZE_FORMAT, (((size_t)ptr) % alignment)); + SDLTest_AssertPass("Filling memory to alignment value"); + SDL_memset(ptr, 0xAA, alignment); + SDL_aligned_free(ptr); + } + + return TEST_COMPLETED; +} + +typedef struct +{ + size_t a; + size_t b; + size_t result; + int status; +} overflow_test; + +static const overflow_test multiplications[] = { + { 1, 1, 1, 0 }, + { 0, 0, 0, 0 }, + { SDL_SIZE_MAX, 0, 0, 0 }, + { SDL_SIZE_MAX, 1, SDL_SIZE_MAX, 0 }, + { SDL_SIZE_MAX / 2, 2, SDL_SIZE_MAX - (SDL_SIZE_MAX % 2), 0 }, + { SDL_SIZE_MAX / 23, 23, SDL_SIZE_MAX - (SDL_SIZE_MAX % 23), 0 }, + + { (SDL_SIZE_MAX / 2) + 1, 2, 0, -1 }, + { (SDL_SIZE_MAX / 23) + 42, 23, 0, -1 }, + { SDL_SIZE_MAX, SDL_SIZE_MAX, 0, -1 }, +}; + +static const overflow_test additions[] = { + { 1, 1, 2, 0 }, + { 0, 0, 0, 0 }, + { SDL_SIZE_MAX, 0, SDL_SIZE_MAX, 0 }, + { SDL_SIZE_MAX - 1, 1, SDL_SIZE_MAX, 0 }, + { SDL_SIZE_MAX - 42, 23, SDL_SIZE_MAX - (42 - 23), 0 }, + + { SDL_SIZE_MAX, 1, 0, -1 }, + { SDL_SIZE_MAX, 23, 0, -1 }, + { SDL_SIZE_MAX, SDL_SIZE_MAX, 0, -1 }, +}; + +static int +stdlib_overflow(void *arg) +{ + size_t i; + size_t useBuiltin; + + for (useBuiltin = 0; useBuiltin < 2; useBuiltin++) { + if (useBuiltin) { + SDLTest_Log("Using gcc/clang builtins if possible"); + } else { + SDLTest_Log("Not using gcc/clang builtins"); + } + + for (i = 0; i < SDL_arraysize(multiplications); i++) { + const overflow_test *t = &multiplications[i]; + int status; + size_t result = ~t->result; + + if (useBuiltin) { + status = SDL_size_mul_overflow(t->a, t->b, &result); + } else { + /* This disables the macro that tries to use a gcc/clang + * builtin, so we test the fallback implementation instead. */ + status = (SDL_size_mul_overflow)(t->a, t->b, &result); + } + + if (t->status == 0) { + SDLTest_AssertCheck(status == 0, + "(%" SIZE_FORMAT " * %" SIZE_FORMAT ") should succeed", + t->a, t->b); + SDLTest_AssertCheck(result == t->result, + "(%" SIZE_FORMAT " * %" SIZE_FORMAT "): expected %" SIZE_FORMAT ", got %" SIZE_FORMAT, + t->a, t->b, t->result, result); + } else { + SDLTest_AssertCheck(status == -1, + "(%" SIZE_FORMAT " * %" SIZE_FORMAT ") should fail", + t->a, t->b); + } + + if (t->a == t->b) { + continue; + } + + result = ~t->result; + + if (useBuiltin) { + status = SDL_size_mul_overflow(t->b, t->a, &result); + } else { + status = (SDL_size_mul_overflow)(t->b, t->a, &result); + } + + if (t->status == 0) { + SDLTest_AssertCheck(status == 0, + "(%" SIZE_FORMAT " * %" SIZE_FORMAT ") should succeed", + t->b, t->a); + SDLTest_AssertCheck(result == t->result, + "(%" SIZE_FORMAT " * %" SIZE_FORMAT "): expected %" SIZE_FORMAT ", got %" SIZE_FORMAT, + t->b, t->a, t->result, result); + } else { + SDLTest_AssertCheck(status == -1, + "(%" SIZE_FORMAT " * %" SIZE_FORMAT ") should fail", + t->b, t->a); + } + } + + for (i = 0; i < SDL_arraysize(additions); i++) { + const overflow_test *t = &additions[i]; + int status; + size_t result = ~t->result; + + if (useBuiltin) { + status = SDL_size_add_overflow(t->a, t->b, &result); + } else { + status = (SDL_size_add_overflow)(t->a, t->b, &result); + } + + if (t->status == 0) { + SDLTest_AssertCheck(status == 0, + "(%" SIZE_FORMAT " + %" SIZE_FORMAT ") should succeed", + t->a, t->b); + SDLTest_AssertCheck(result == t->result, + "(%" SIZE_FORMAT " + %" SIZE_FORMAT "): expected %" SIZE_FORMAT ", got %" SIZE_FORMAT, + t->a, t->b, t->result, result); + } else { + SDLTest_AssertCheck(status == -1, + "(%" SIZE_FORMAT " + %" SIZE_FORMAT ") should fail", + t->a, t->b); + } + + if (t->a == t->b) { + continue; + } + + result = ~t->result; + + if (useBuiltin) { + status = SDL_size_add_overflow(t->b, t->a, &result); + } else { + status = (SDL_size_add_overflow)(t->b, t->a, &result); + } + + if (t->status == 0) { + SDLTest_AssertCheck(status == 0, + "(%" SIZE_FORMAT " + %" SIZE_FORMAT ") should succeed", + t->b, t->a); + SDLTest_AssertCheck(result == t->result, + "(%" SIZE_FORMAT " + %" SIZE_FORMAT "): expected %" SIZE_FORMAT ", got %" SIZE_FORMAT, + t->b, t->a, t->result, result); + } else { + SDLTest_AssertCheck(status == -1, + "(%" SIZE_FORMAT " + %" SIZE_FORMAT ") should fail", + t->b, t->a); + } + } + } + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Standard C routine test cases */ +static const SDLTest_TestCaseReference stdlibTest1 = { + stdlib_strnlen, "stdlib_strnlen", "Call to SDL_strnlen", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference stdlibTest2 = { + stdlib_strlcpy, "stdlib_strlcpy", "Call to SDL_strlcpy", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference stdlibTest3 = { + stdlib_snprintf, "stdlib_snprintf", "Call to SDL_snprintf", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference stdlibTest4 = { + stdlib_swprintf, "stdlib_swprintf", "Call to SDL_swprintf", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference stdlibTest5 = { + stdlib_getsetenv, "stdlib_getsetenv", "Call to SDL_getenv and SDL_setenv", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference stdlibTest6 = { + stdlib_sscanf, "stdlib_sscanf", "Call to SDL_sscanf", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference stdlibTest7 = { + stdlib_aligned_alloc, "stdlib_aligned_alloc", "Call to SDL_aligned_alloc", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference stdlibTestOverflow = { + stdlib_overflow, "stdlib_overflow", "Overflow detection", TEST_ENABLED +}; + +/* Sequence of Standard C routine test cases */ +static const SDLTest_TestCaseReference *stdlibTests[] = { + &stdlibTest1, + &stdlibTest2, + &stdlibTest3, + &stdlibTest4, + &stdlibTest5, + &stdlibTest6, + &stdlibTest7, + &stdlibTestOverflow, + NULL +}; + +/* Standard C routine test suite (global) */ +SDLTest_TestSuiteReference stdlibTestSuite = { + "Stdlib", + NULL, + stdlibTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_suites.h b/vendor/sdl-3.0.0/test/testautomation_suites.h new file mode 100644 index 0000000..e1a29e0 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_suites.h @@ -0,0 +1,36 @@ +/** + * Reference to all test suites. + * + */ + +#ifndef _testsuites_h +#define _testsuites_h + +#include + +/* Test collections */ +extern SDLTest_TestSuiteReference audioTestSuite; +extern SDLTest_TestSuiteReference clipboardTestSuite; +extern SDLTest_TestSuiteReference eventsTestSuite; +extern SDLTest_TestSuiteReference guidTestSuite; +extern SDLTest_TestSuiteReference hintsTestSuite; +extern SDLTest_TestSuiteReference intrinsicsTestSuite; +extern SDLTest_TestSuiteReference joystickTestSuite; +extern SDLTest_TestSuiteReference keyboardTestSuite; +extern SDLTest_TestSuiteReference mainTestSuite; +extern SDLTest_TestSuiteReference mathTestSuite; +extern SDLTest_TestSuiteReference mouseTestSuite; +extern SDLTest_TestSuiteReference pixelsTestSuite; +extern SDLTest_TestSuiteReference platformTestSuite; +extern SDLTest_TestSuiteReference propertiesTestSuite; +extern SDLTest_TestSuiteReference rectTestSuite; +extern SDLTest_TestSuiteReference renderTestSuite; +extern SDLTest_TestSuiteReference rwopsTestSuite; +extern SDLTest_TestSuiteReference sdltestTestSuite; +extern SDLTest_TestSuiteReference stdlibTestSuite; +extern SDLTest_TestSuiteReference surfaceTestSuite; +extern SDLTest_TestSuiteReference syswmTestSuite; +extern SDLTest_TestSuiteReference timerTestSuite; +extern SDLTest_TestSuiteReference videoTestSuite; + +#endif diff --git a/vendor/sdl-3.0.0/test/testautomation_surface.c b/vendor/sdl-3.0.0/test/testautomation_surface.c new file mode 100644 index 0000000..acde639 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_surface.c @@ -0,0 +1,825 @@ +/** + * Original code: automated SDL surface test written by Edgar Simo "bobbens" + * Adapted/rewritten for test lib by Andreas Schiffler + */ + +/* Suppress C4996 VS compiler warnings for unlink() */ +#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) +#define _CRT_SECURE_NO_DEPRECATE +#endif +#if defined(_MSC_VER) && !defined(_CRT_NONSTDC_NO_DEPRECATE) +#define _CRT_NONSTDC_NO_DEPRECATE +#endif + +#include +#ifndef _MSC_VER +#include +#endif +#include + +#include +#include +#include "testautomation_suites.h" +#include "testautomation_images.h" + +/* ================= Test Case Implementation ================== */ + +/* Shared test surface */ + +static SDL_Surface *referenceSurface = NULL; +static SDL_Surface *testSurface = NULL; + +/* Fixture */ + +/* Create a 32-bit writable surface for blitting tests */ +static void surfaceSetUp(void *arg) +{ + int result; + SDL_BlendMode blendMode = SDL_BLENDMODE_NONE; + SDL_BlendMode currentBlendMode; + + referenceSurface = SDLTest_ImageBlit(); /* For size info */ + testSurface = SDL_CreateSurface(referenceSurface->w, referenceSurface->h, SDL_PIXELFORMAT_RGBA32); + SDLTest_AssertCheck(testSurface != NULL, "Check that testSurface is not NULL"); + if (testSurface != NULL) { + /* Disable blend mode for target surface */ + result = SDL_SetSurfaceBlendMode(testSurface, blendMode); + SDLTest_AssertCheck(result == 0, "Validate result from SDL_SetSurfaceBlendMode, expected: 0, got: %i", result); + result = SDL_GetSurfaceBlendMode(testSurface, ¤tBlendMode); + SDLTest_AssertCheck(result == 0, "Validate result from SDL_GetSurfaceBlendMode, expected: 0, got: %i", result); + SDLTest_AssertCheck(currentBlendMode == blendMode, "Validate blendMode, expected: %i, got: %i", blendMode, currentBlendMode); + } +} + +static void surfaceTearDown(void *arg) +{ + SDL_DestroySurface(referenceSurface); + referenceSurface = NULL; + SDL_DestroySurface(testSurface); + testSurface = NULL; +} + +/** + * Helper that clears the test surface + */ +static void clearTestSurface(void) +{ + int ret; + Uint32 color; + + /* Clear surface. */ + color = SDL_MapRGBA(testSurface->format, 0, 0, 0, 0); + SDLTest_AssertPass("Call to SDL_MapRGBA()"); + ret = SDL_FillSurfaceRect(testSurface, NULL, color); + SDLTest_AssertPass("Call to SDL_FillSurfaceRect()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_FillSurfaceRect, expected: 0, got: %i", ret); +} + +/** + * Helper that blits in a specific blend mode, -1 for basic blitting, -2 for color mod, -3 for alpha mod, -4 for mixed blend modes. + */ +static void testBlitBlendMode(int mode) +{ + int ret; + int i, j, ni, nj; + SDL_Surface *face; + SDL_Rect rect; + int nmode; + SDL_BlendMode bmode; + int checkFailCount1; + int checkFailCount2; + int checkFailCount3; + int checkFailCount4; + + /* Check test surface */ + SDLTest_AssertCheck(testSurface != NULL, "Verify testSurface is not NULL"); + if (testSurface == NULL) { + return; + } + + /* Create sample surface */ + face = SDLTest_ImageFace(); + SDLTest_AssertCheck(face != NULL, "Verify face surface is not NULL"); + if (face == NULL) { + return; + } + + /* Reset alpha modulation */ + ret = SDL_SetSurfaceAlphaMod(face, 255); + SDLTest_AssertPass("Call to SDL_SetSurfaceAlphaMod()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetSurfaceAlphaMod(), expected: 0, got: %i", ret); + + /* Reset color modulation */ + ret = SDL_SetSurfaceColorMod(face, 255, 255, 255); + SDLTest_AssertPass("Call to SDL_SetSurfaceColorMod()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetSurfaceColorMod(), expected: 0, got: %i", ret); + + /* Reset color key */ + ret = SDL_SetSurfaceColorKey(face, SDL_FALSE, 0); + SDLTest_AssertPass("Call to SDL_SetSurfaceColorKey()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetSurfaceColorKey(), expected: 0, got: %i", ret); + + /* Clear the test surface */ + clearTestSurface(); + + /* Target rect size */ + rect.w = face->w; + rect.h = face->h; + + /* Steps to take */ + ni = testSurface->w - face->w; + nj = testSurface->h - face->h; + + /* Optionally set blend mode. */ + if (mode >= 0) { + ret = SDL_SetSurfaceBlendMode(face, (SDL_BlendMode)mode); + SDLTest_AssertPass("Call to SDL_SetSurfaceBlendMode()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetSurfaceBlendMode(..., %i), expected: 0, got: %i", mode, ret); + } + + /* Test blend mode. */ + checkFailCount1 = 0; + checkFailCount2 = 0; + checkFailCount3 = 0; + checkFailCount4 = 0; + for (j = 0; j <= nj; j += 4) { + for (i = 0; i <= ni; i += 4) { + if (mode == -2) { + /* Set color mod. */ + ret = SDL_SetSurfaceColorMod(face, (255 / nj) * j, (255 / ni) * i, (255 / nj) * j); + if (ret != 0) { + checkFailCount2++; + } + } else if (mode == -3) { + /* Set alpha mod. */ + ret = SDL_SetSurfaceAlphaMod(face, (255 / ni) * i); + if (ret != 0) { + checkFailCount3++; + } + } else if (mode == -4) { + /* Crazy blending mode magic. */ + nmode = (i / 4 * j / 4) % 4; + if (nmode == 0) { + bmode = SDL_BLENDMODE_NONE; + } else if (nmode == 1) { + bmode = SDL_BLENDMODE_BLEND; + } else if (nmode == 2) { + bmode = SDL_BLENDMODE_ADD; + } else if (nmode == 3) { + bmode = SDL_BLENDMODE_MOD; + } else { + /* Should be impossible, but some static checkers are too imprecise and will complain */ + SDLTest_LogError("Invalid: nmode=%d", nmode); + return; + } + ret = SDL_SetSurfaceBlendMode(face, bmode); + if (ret != 0) { + checkFailCount4++; + } + } + + /* Blitting. */ + rect.x = i; + rect.y = j; + ret = SDL_BlitSurface(face, NULL, testSurface, &rect); + if (ret != 0) { + checkFailCount1++; + } + } + } + SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_BlitSurface, expected: 0, got: %i", checkFailCount1); + SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_SetSurfaceColorMod, expected: 0, got: %i", checkFailCount2); + SDLTest_AssertCheck(checkFailCount3 == 0, "Validate results from calls to SDL_SetSurfaceAlphaMod, expected: 0, got: %i", checkFailCount3); + SDLTest_AssertCheck(checkFailCount4 == 0, "Validate results from calls to SDL_SetSurfaceBlendMode, expected: 0, got: %i", checkFailCount4); + + /* Clean up */ + SDL_DestroySurface(face); + face = NULL; +} + +/* Helper to check that a file exists */ +static void AssertFileExist(const char *filename) +{ + struct stat st; + int ret = stat(filename, &st); + + SDLTest_AssertCheck(ret == 0, "Verify file '%s' exists", filename); +} + +/* Test case functions */ + +/** + * \brief Tests sprite saving and loading + */ +static int surface_testSaveLoadBitmap(void *arg) +{ + int ret; + const char *sampleFilename = "testSaveLoadBitmap.bmp"; + SDL_Surface *face; + SDL_Surface *rface; + + /* Create sample surface */ + face = SDLTest_ImageFace(); + SDLTest_AssertCheck(face != NULL, "Verify face surface is not NULL"); + if (face == NULL) { + return TEST_ABORTED; + } + + /* Delete test file; ignore errors */ + unlink(sampleFilename); + + /* Save a surface */ + ret = SDL_SaveBMP(face, sampleFilename); + SDLTest_AssertPass("Call to SDL_SaveBMP()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SaveBMP, expected: 0, got: %i", ret); + AssertFileExist(sampleFilename); + + /* Load a surface */ + rface = SDL_LoadBMP(sampleFilename); + SDLTest_AssertPass("Call to SDL_LoadBMP()"); + SDLTest_AssertCheck(rface != NULL, "Verify result from SDL_LoadBMP is not NULL"); + if (rface != NULL) { + SDLTest_AssertCheck(face->w == rface->w, "Verify width of loaded surface, expected: %i, got: %i", face->w, rface->w); + SDLTest_AssertCheck(face->h == rface->h, "Verify height of loaded surface, expected: %i, got: %i", face->h, rface->h); + } + + /* Delete test file; ignore errors */ + unlink(sampleFilename); + + /* Clean up */ + SDL_DestroySurface(face); + face = NULL; + SDL_DestroySurface(rface); + rface = NULL; + + return TEST_COMPLETED; +} + +/** + * Tests surface conversion. + */ +static int surface_testSurfaceConversion(void *arg) +{ + SDL_Surface *rface = NULL, *face = NULL; + int ret = 0; + + /* Create sample surface */ + face = SDLTest_ImageFace(); + SDLTest_AssertCheck(face != NULL, "Verify face surface is not NULL"); + if (face == NULL) { + return TEST_ABORTED; + } + + /* Set transparent pixel as the pixel at (0,0) */ + if (face->format->palette) { + ret = SDL_SetSurfaceColorKey(face, SDL_RLEACCEL, *(Uint8 *)face->pixels); + SDLTest_AssertPass("Call to SDL_SetSurfaceColorKey()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetSurfaceColorKey, expected: 0, got: %i", ret); + } + + /* Convert to 32 bit to compare. */ + rface = SDL_ConvertSurface(face, testSurface->format); + SDLTest_AssertPass("Call to SDL_ConvertSurface()"); + SDLTest_AssertCheck(rface != NULL, "Verify result from SDL_ConvertSurface is not NULL"); + + /* Compare surface. */ + ret = SDLTest_CompareSurfaces(rface, face, 0); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_DestroySurface(face); + face = NULL; + SDL_DestroySurface(rface); + rface = NULL; + + return TEST_COMPLETED; +} + +/** + * Tests surface conversion across all pixel formats. + */ +static int surface_testCompleteSurfaceConversion(void *arg) +{ + Uint32 pixel_formats[] = { + SDL_PIXELFORMAT_INDEX8, + SDL_PIXELFORMAT_RGB332, + SDL_PIXELFORMAT_RGB444, + SDL_PIXELFORMAT_BGR444, + SDL_PIXELFORMAT_RGB555, + SDL_PIXELFORMAT_BGR555, + SDL_PIXELFORMAT_ARGB4444, + SDL_PIXELFORMAT_RGBA4444, + SDL_PIXELFORMAT_ABGR4444, + SDL_PIXELFORMAT_BGRA4444, + SDL_PIXELFORMAT_ARGB1555, + SDL_PIXELFORMAT_RGBA5551, + SDL_PIXELFORMAT_ABGR1555, + SDL_PIXELFORMAT_BGRA5551, + SDL_PIXELFORMAT_RGB565, + SDL_PIXELFORMAT_BGR565, + SDL_PIXELFORMAT_RGB24, + SDL_PIXELFORMAT_BGR24, + SDL_PIXELFORMAT_XRGB8888, + SDL_PIXELFORMAT_RGBX8888, + SDL_PIXELFORMAT_XBGR8888, + SDL_PIXELFORMAT_BGRX8888, + SDL_PIXELFORMAT_ARGB8888, + SDL_PIXELFORMAT_RGBA8888, + SDL_PIXELFORMAT_ABGR8888, + SDL_PIXELFORMAT_BGRA8888, + SDL_PIXELFORMAT_ARGB2101010, + }; + SDL_Surface *face = NULL, *cvt1, *cvt2, *final; + SDL_PixelFormat *fmt1, *fmt2; + int i, j, ret = 0; + + /* Create sample surface */ + face = SDLTest_ImageFace(); + SDLTest_AssertCheck(face != NULL, "Verify face surface is not NULL"); + if (face == NULL) { + return TEST_ABORTED; + } + + /* Set transparent pixel as the pixel at (0,0) */ + if (face->format->palette) { + ret = SDL_SetSurfaceColorKey(face, SDL_RLEACCEL, *(Uint8 *)face->pixels); + SDLTest_AssertPass("Call to SDL_SetSurfaceColorKey()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetSurfaceColorKey, expected: 0, got: %i", ret); + } + + for (i = 0; i < SDL_arraysize(pixel_formats); ++i) { + for (j = 0; j < SDL_arraysize(pixel_formats); ++j) { + fmt1 = SDL_CreatePixelFormat(pixel_formats[i]); + SDL_assert(fmt1 != NULL); + cvt1 = SDL_ConvertSurface(face, fmt1); + SDL_assert(cvt1 != NULL); + + fmt2 = SDL_CreatePixelFormat(pixel_formats[j]); + SDL_assert(fmt1 != NULL); + cvt2 = SDL_ConvertSurface(cvt1, fmt2); + SDL_assert(cvt2 != NULL); + + if (fmt1->BytesPerPixel == face->format->BytesPerPixel && + fmt2->BytesPerPixel == face->format->BytesPerPixel && + (fmt1->Amask != 0) == (face->format->Amask != 0) && + (fmt2->Amask != 0) == (face->format->Amask != 0)) { + final = SDL_ConvertSurface(cvt2, face->format); + SDL_assert(final != NULL); + + /* Compare surface. */ + ret = SDLTest_CompareSurfaces(face, final, 0); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + SDL_DestroySurface(final); + } + + SDL_DestroySurface(cvt1); + SDL_DestroyPixelFormat(fmt1); + SDL_DestroySurface(cvt2); + SDL_DestroyPixelFormat(fmt2); + } + } + + /* Clean up. */ + SDL_DestroySurface(face); + + return TEST_COMPLETED; +} + +/** + * \brief Tests sprite loading. A failure case. + */ +static int surface_testLoadFailure(void *arg) +{ + SDL_Surface *face = SDL_LoadBMP("nonexistant.bmp"); + SDLTest_AssertCheck(face == NULL, "SDL_CreateLoadBmp"); + + return TEST_COMPLETED; +} + +/** + * \brief Tests some blitting routines. + */ +static int surface_testBlit(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Basic blitting */ + testBlitBlendMode(-1); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlit(); + ret = SDLTest_CompareSurfaces(testSurface, compareSurface, 0); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_DestroySurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * \brief Tests some blitting routines with color mod + */ +static int surface_testBlitColorMod(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Basic blitting with color mod */ + testBlitBlendMode(-2); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitColor(); + ret = SDLTest_CompareSurfaces(testSurface, compareSurface, 0); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_DestroySurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * \brief Tests some blitting routines with alpha mod + */ +static int surface_testBlitAlphaMod(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Basic blitting with alpha mod */ + testBlitBlendMode(-3); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitAlpha(); + ret = SDLTest_CompareSurfaces(testSurface, compareSurface, 0); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_DestroySurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * \brief Tests some more blitting routines. + */ +static int surface_testBlitBlendNone(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Basic blitting */ + testBlitBlendMode(SDL_BLENDMODE_NONE); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitBlendNone(); + ret = SDLTest_CompareSurfaces(testSurface, compareSurface, 0); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_DestroySurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * \brief Tests some more blitting routines. + */ +static int surface_testBlitBlendBlend(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Blend blitting */ + testBlitBlendMode(SDL_BLENDMODE_BLEND); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitBlend(); + ret = SDLTest_CompareSurfaces(testSurface, compareSurface, 0); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_DestroySurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * \brief Tests some more blitting routines. + */ +static int surface_testBlitBlendAdd(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Add blitting */ + testBlitBlendMode(SDL_BLENDMODE_ADD); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitBlendAdd(); + ret = SDLTest_CompareSurfaces(testSurface, compareSurface, 0); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_DestroySurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * \brief Tests some more blitting routines. + */ +static int surface_testBlitBlendMod(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Mod blitting */ + testBlitBlendMode(SDL_BLENDMODE_MOD); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitBlendMod(); + ret = SDLTest_CompareSurfaces(testSurface, compareSurface, 0); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_DestroySurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * \brief Tests some more blitting routines with loop + */ +static int surface_testBlitBlendLoop(void *arg) +{ + + int ret; + SDL_Surface *compareSurface; + + /* All blitting modes */ + testBlitBlendMode(-4); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitBlendAll(); + ret = SDLTest_CompareSurfaces(testSurface, compareSurface, 0); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_DestroySurface(compareSurface); + + return TEST_COMPLETED; +} + +static int surface_testOverflow(void *arg) +{ + char buf[1024]; + const char *expectedError; + SDL_Surface *surface; + + SDL_memset(buf, '\0', sizeof(buf)); + + expectedError = "Parameter 'width' is invalid"; + surface = SDL_CreateSurface(-3, 100, SDL_PIXELFORMAT_INDEX8); + SDLTest_AssertCheck(surface == NULL, "Should detect negative width"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + surface = SDL_CreateSurfaceFrom(buf, -1, 1, 4, SDL_PIXELFORMAT_INDEX8); + SDLTest_AssertCheck(surface == NULL, "Should detect negative width"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + surface = SDL_CreateSurfaceFrom(buf, -1, 1, 4, SDL_PIXELFORMAT_RGBA8888); + SDLTest_AssertCheck(surface == NULL, "Should detect negative width"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + + expectedError = "Parameter 'height' is invalid"; + surface = SDL_CreateSurface(100, -3, SDL_PIXELFORMAT_INDEX8); + SDLTest_AssertCheck(surface == NULL, "Should detect negative height"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + surface = SDL_CreateSurfaceFrom(buf, 1, -1, 4, SDL_PIXELFORMAT_INDEX8); + SDLTest_AssertCheck(surface == NULL, "Should detect negative height"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + surface = SDL_CreateSurfaceFrom(buf, 1, -1, 4, SDL_PIXELFORMAT_RGBA8888); + SDLTest_AssertCheck(surface == NULL, "Should detect negative height"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + + expectedError = "Parameter 'pitch' is invalid"; + surface = SDL_CreateSurfaceFrom(buf, 4, 1, -1, SDL_PIXELFORMAT_INDEX8); + SDLTest_AssertCheck(surface == NULL, "Should detect negative pitch"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + surface = SDL_CreateSurfaceFrom(buf, 1, 1, -1, SDL_PIXELFORMAT_RGBA8888); + SDLTest_AssertCheck(surface == NULL, "Should detect negative pitch"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + surface = SDL_CreateSurfaceFrom(buf, 1, 1, 0, SDL_PIXELFORMAT_RGBA8888); + SDLTest_AssertCheck(surface == NULL, "Should detect zero pitch"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + surface = SDL_CreateSurfaceFrom(NULL, 1, 1, 0, SDL_PIXELFORMAT_RGBA8888); + SDLTest_AssertCheck(surface != NULL, "Allow zero pitch for partially set up surfaces: %s", + surface != NULL ? "(success)" : SDL_GetError()); + SDL_DestroySurface(surface); + + /* Less than 1 byte per pixel: the pitch can legitimately be less than + * the width, but it must be enough to hold the appropriate number of + * bits per pixel. SDL_PIXELFORMAT_INDEX4LSB* needs 1 byte per 2 pixels. */ + surface = SDL_CreateSurfaceFrom(buf, 6, 1, 3, SDL_PIXELFORMAT_INDEX4LSB); + SDLTest_AssertCheck(surface != NULL, "6px * 4 bits per px fits in 3 bytes: %s", + surface != NULL ? "(success)" : SDL_GetError()); + SDL_DestroySurface(surface); + surface = SDL_CreateSurfaceFrom(buf, 6, 1, 3, SDL_PIXELFORMAT_INDEX4LSB); + SDLTest_AssertCheck(surface != NULL, "6px * 4 bits per px fits in 3 bytes: %s", + surface != NULL ? "(success)" : SDL_GetError()); + SDL_DestroySurface(surface); + + surface = SDL_CreateSurfaceFrom(buf, 7, 1, 3, SDL_PIXELFORMAT_INDEX4LSB); + SDLTest_AssertCheck(surface == NULL, "Should detect pitch < width * bpp"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + surface = SDL_CreateSurfaceFrom(buf, 7, 1, 3, SDL_PIXELFORMAT_INDEX4LSB); + SDLTest_AssertCheck(surface == NULL, "Should detect pitch < width * bpp"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + + surface = SDL_CreateSurfaceFrom(buf, 7, 1, 4, SDL_PIXELFORMAT_INDEX4LSB); + SDLTest_AssertCheck(surface != NULL, "7px * 4 bits per px fits in 4 bytes: %s", + surface != NULL ? "(success)" : SDL_GetError()); + SDL_DestroySurface(surface); + surface = SDL_CreateSurfaceFrom(buf, 7, 1, 4, SDL_PIXELFORMAT_INDEX4LSB); + SDLTest_AssertCheck(surface != NULL, "7px * 4 bits per px fits in 4 bytes: %s", + surface != NULL ? "(success)" : SDL_GetError()); + SDL_DestroySurface(surface); + + /* SDL_PIXELFORMAT_INDEX1* needs 1 byte per 8 pixels. */ + surface = SDL_CreateSurfaceFrom(buf, 16, 1, 2, SDL_PIXELFORMAT_INDEX1LSB); + SDLTest_AssertCheck(surface != NULL, "16px * 1 bit per px fits in 2 bytes: %s", + surface != NULL ? "(success)" : SDL_GetError()); + SDL_DestroySurface(surface); + surface = SDL_CreateSurfaceFrom(buf, 16, 1, 2, SDL_PIXELFORMAT_INDEX1LSB); + SDLTest_AssertCheck(surface != NULL, "16px * 1 bit per px fits in 2 bytes: %s", + surface != NULL ? "(success)" : SDL_GetError()); + SDL_DestroySurface(surface); + + surface = SDL_CreateSurfaceFrom(buf, 17, 1, 2, SDL_PIXELFORMAT_INDEX1LSB); + SDLTest_AssertCheck(surface == NULL, "Should detect pitch < width * bpp"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + surface = SDL_CreateSurfaceFrom(buf, 17, 1, 2, SDL_PIXELFORMAT_INDEX1LSB); + SDLTest_AssertCheck(surface == NULL, "Should detect pitch < width * bpp"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + + surface = SDL_CreateSurfaceFrom(buf, 17, 1, 3, SDL_PIXELFORMAT_INDEX1LSB); + SDLTest_AssertCheck(surface != NULL, "17px * 1 bit per px fits in 3 bytes: %s", + surface != NULL ? "(success)" : SDL_GetError()); + SDL_DestroySurface(surface); + surface = SDL_CreateSurfaceFrom(buf, 17, 1, 3, SDL_PIXELFORMAT_INDEX1LSB); + SDLTest_AssertCheck(surface != NULL, "17px * 1 bit per px fits in 3 bytes: %s", + surface != NULL ? "(success)" : SDL_GetError()); + SDL_DestroySurface(surface); + + /* SDL_PIXELFORMAT_INDEX8 and SDL_PIXELFORMAT_RGB332 require 1 byte per pixel. */ + surface = SDL_CreateSurfaceFrom(buf, 5, 1, 5, SDL_PIXELFORMAT_RGB332); + SDLTest_AssertCheck(surface != NULL, "5px * 8 bits per px fits in 5 bytes: %s", + surface != NULL ? "(success)" : SDL_GetError()); + SDL_DestroySurface(surface); + surface = SDL_CreateSurfaceFrom(buf, 5, 1, 5, SDL_PIXELFORMAT_INDEX8); + SDLTest_AssertCheck(surface != NULL, "5px * 8 bits per px fits in 5 bytes: %s", + surface != NULL ? "(success)" : SDL_GetError()); + SDL_DestroySurface(surface); + + surface = SDL_CreateSurfaceFrom(buf, 6, 1, 5, SDL_PIXELFORMAT_RGB332); + SDLTest_AssertCheck(surface == NULL, "Should detect pitch < width * bpp"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + surface = SDL_CreateSurfaceFrom(buf, 6, 1, 5, SDL_PIXELFORMAT_INDEX8); + SDLTest_AssertCheck(surface == NULL, "Should detect pitch < width * bpp"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + + /* Everything else requires more than 1 byte per pixel, and rounds up + * each pixel to an integer number of bytes (e.g. RGB555 is really + * XRGB1555, with 1 bit per pixel wasted). */ + surface = SDL_CreateSurfaceFrom(buf, 3, 1, 6, SDL_PIXELFORMAT_RGB555); + SDLTest_AssertCheck(surface != NULL, "3px * 15 (really 16) bits per px fits in 6 bytes: %s", + surface != NULL ? "(success)" : SDL_GetError()); + SDL_DestroySurface(surface); + surface = SDL_CreateSurfaceFrom(buf, 3, 1, 6, SDL_PIXELFORMAT_RGB555); + SDLTest_AssertCheck(surface != NULL, "5px * 15 (really 16) bits per px fits in 6 bytes: %s", + surface != NULL ? "(success)" : SDL_GetError()); + SDL_DestroySurface(surface); + + surface = SDL_CreateSurfaceFrom(buf, 4, 1, 6, SDL_PIXELFORMAT_RGB555); + SDLTest_AssertCheck(surface == NULL, "4px * 15 (really 16) bits per px doesn't fit in 6 bytes"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + surface = SDL_CreateSurfaceFrom(buf, 4, 1, 6, SDL_PIXELFORMAT_XRGB1555); + SDLTest_AssertCheck(surface == NULL, "4px * 15 (really 16) bits per px doesn't fit in 6 bytes"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + + if (sizeof(size_t) == 4 && sizeof(int) >= 4) { + expectedError = "Out of memory"; + surface = SDL_CreateSurface(SDL_MAX_SINT32, 1, SDL_PIXELFORMAT_INDEX8); + SDLTest_AssertCheck(surface == NULL, "Should detect overflow in width + alignment"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + surface = SDL_CreateSurface(SDL_MAX_SINT32 / 2, 1, SDL_PIXELFORMAT_ARGB8888); + SDLTest_AssertCheck(surface == NULL, "Should detect overflow in width * bytes per pixel"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + surface = SDL_CreateSurface((1 << 29) - 1, (1 << 29) - 1, SDL_PIXELFORMAT_INDEX8); + SDLTest_AssertCheck(surface == NULL, "Should detect overflow in width * height"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + surface = SDL_CreateSurface((1 << 15) + 1, (1 << 15) + 1, SDL_PIXELFORMAT_ARGB8888); + SDLTest_AssertCheck(surface == NULL, "Should detect overflow in width * height * bytes per pixel"); + SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0, + "Expected \"%s\", got \"%s\"", expectedError, SDL_GetError()); + } else { + SDLTest_Log("Can't easily overflow size_t on this platform"); + } + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Surface test cases */ +static const SDLTest_TestCaseReference surfaceTest1 = { + (SDLTest_TestCaseFp)surface_testSaveLoadBitmap, "surface_testSaveLoadBitmap", "Tests sprite saving and loading.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference surfaceTest2 = { + (SDLTest_TestCaseFp)surface_testBlit, "surface_testBlit", "Tests basic blitting.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference surfaceTest3 = { + (SDLTest_TestCaseFp)surface_testBlitBlendNone, "surface_testBlitBlendNone", "Tests blitting routines with none blending mode.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference surfaceTest4 = { + (SDLTest_TestCaseFp)surface_testLoadFailure, "surface_testLoadFailure", "Tests sprite loading. A failure case.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference surfaceTest5 = { + (SDLTest_TestCaseFp)surface_testSurfaceConversion, "surface_testSurfaceConversion", "Tests surface conversion.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference surfaceTest6 = { + (SDLTest_TestCaseFp)surface_testCompleteSurfaceConversion, "surface_testCompleteSurfaceConversion", "Tests surface conversion across all pixel formats", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference surfaceTest7 = { + (SDLTest_TestCaseFp)surface_testBlitColorMod, "surface_testBlitColorMod", "Tests some blitting routines with color mod.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference surfaceTest8 = { + (SDLTest_TestCaseFp)surface_testBlitAlphaMod, "surface_testBlitAlphaMod", "Tests some blitting routines with alpha mod.", TEST_ENABLED +}; + +/* TODO: rewrite test case, define new test data and re-enable; current implementation fails */ +static const SDLTest_TestCaseReference surfaceTest9 = { + (SDLTest_TestCaseFp)surface_testBlitBlendLoop, "surface_testBlitBlendLoop", "Test blitting routines with various blending modes", TEST_DISABLED +}; + +/* TODO: rewrite test case, define new test data and re-enable; current implementation fails */ +static const SDLTest_TestCaseReference surfaceTest10 = { + (SDLTest_TestCaseFp)surface_testBlitBlendBlend, "surface_testBlitBlendBlend", "Tests blitting routines with blend blending mode.", TEST_DISABLED +}; + +/* TODO: rewrite test case, define new test data and re-enable; current implementation fails */ +static const SDLTest_TestCaseReference surfaceTest11 = { + (SDLTest_TestCaseFp)surface_testBlitBlendAdd, "surface_testBlitBlendAdd", "Tests blitting routines with add blending mode.", TEST_DISABLED +}; + +static const SDLTest_TestCaseReference surfaceTest12 = { + (SDLTest_TestCaseFp)surface_testBlitBlendMod, "surface_testBlitBlendMod", "Tests blitting routines with mod blending mode.", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference surfaceTestOverflow = { + surface_testOverflow, "surface_testOverflow", "Test overflow detection.", TEST_ENABLED +}; + +/* Sequence of Surface test cases */ +static const SDLTest_TestCaseReference *surfaceTests[] = { + &surfaceTest1, &surfaceTest2, &surfaceTest3, &surfaceTest4, &surfaceTest5, + &surfaceTest6, &surfaceTest7, &surfaceTest8, &surfaceTest9, &surfaceTest10, + &surfaceTest11, &surfaceTest12, &surfaceTestOverflow, NULL +}; + +/* Surface test suite (global) */ +SDLTest_TestSuiteReference surfaceTestSuite = { + "Surface", + surfaceSetUp, + surfaceTests, + surfaceTearDown + +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_syswm.c b/vendor/sdl-3.0.0/test/testautomation_syswm.c new file mode 100644 index 0000000..069c4b1 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_syswm.c @@ -0,0 +1,60 @@ +/** + * SysWM test suite + */ + +/* Avoid inclusion of e.g. X11 headers when these are not installed */ +#include + +#include +#include +#include +#include "testautomation_suites.h" + +/* Test case functions */ + +/** + * \brief Call to SDL_GetWindowWMInfo + */ +static int syswm_getWindowWMInfo(void *arg) +{ + int result; + SDL_Window *window; + SDL_SysWMinfo info; + + window = SDL_CreateWindow("", 0, 0, SDL_WINDOW_HIDDEN); + SDLTest_AssertPass("Call to SDL_CreateWindow()"); + SDLTest_AssertCheck(window != NULL, "Check that value returned from SDL_CreateWindow is not NULL"); + if (window == NULL) { + return TEST_ABORTED; + } + + /* Make call */ + result = SDL_GetWindowWMInfo(window, &info, SDL_SYSWM_CURRENT_VERSION); + SDLTest_AssertPass("Call to SDL_GetWindowWMInfo()"); + SDLTest_Log((result == 0) ? "Got window information" : "Couldn't get window information"); + + SDL_DestroyWindow(window); + SDLTest_AssertPass("Call to SDL_DestroyWindow()"); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* SysWM test cases */ +static const SDLTest_TestCaseReference syswmTest1 = { + (SDLTest_TestCaseFp)syswm_getWindowWMInfo, "syswm_getWindowWMInfo", "Call to SDL_GetWindowWMInfo", TEST_ENABLED +}; + +/* Sequence of SysWM test cases */ +static const SDLTest_TestCaseReference *syswmTests[] = { + &syswmTest1, NULL +}; + +/* SysWM test suite (global) */ +SDLTest_TestSuiteReference syswmTestSuite = { + "SysWM", + NULL, + syswmTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_timer.c b/vendor/sdl-3.0.0/test/testautomation_timer.c new file mode 100644 index 0000000..f2b3203 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_timer.c @@ -0,0 +1,201 @@ +/** + * Timer test suite + */ +#include +#include +#include "testautomation_suites.h" + +/* Flag indicating if the param should be checked */ +static int g_paramCheck = 0; + +/* Userdata value to check */ +static int g_paramValue = 0; + +/* Flag indicating that the callback was called */ +static int g_timerCallbackCalled = 0; + +/* Fixture */ + +static void timerSetUp(void *arg) +{ + /* Start SDL timer subsystem */ + int ret = SDL_InitSubSystem(SDL_INIT_TIMER); + SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_TIMER)"); + SDLTest_AssertCheck(ret == 0, "Check result from SDL_InitSubSystem(SDL_INIT_TIMER)"); + if (ret != 0) { + SDLTest_LogError("%s", SDL_GetError()); + } +} + +/* Test case functions */ + +/** + * \brief Call to SDL_GetPerformanceCounter + */ +static int timer_getPerformanceCounter(void *arg) +{ + Uint64 result; + + result = SDL_GetPerformanceCounter(); + SDLTest_AssertPass("Call to SDL_GetPerformanceCounter()"); + SDLTest_AssertCheck(result > 0, "Check result value, expected: >0, got: %" SDL_PRIu64, result); + + return TEST_COMPLETED; +} + +/** + * \brief Call to SDL_GetPerformanceFrequency + */ +static int timer_getPerformanceFrequency(void *arg) +{ + Uint64 result; + + result = SDL_GetPerformanceFrequency(); + SDLTest_AssertPass("Call to SDL_GetPerformanceFrequency()"); + SDLTest_AssertCheck(result > 0, "Check result value, expected: >0, got: %" SDL_PRIu64, result); + + return TEST_COMPLETED; +} + +/** + * \brief Call to SDL_Delay and SDL_GetTicks + */ +static int timer_delayAndGetTicks(void *arg) +{ + const int testDelay = 100; + const int marginOfError = 25; + Uint64 result; + Uint64 result2; + Sint64 difference; + + /* Zero delay */ + SDL_Delay(0); + SDLTest_AssertPass("Call to SDL_Delay(0)"); + + /* Non-zero delay */ + SDL_Delay(1); + SDLTest_AssertPass("Call to SDL_Delay(1)"); + + SDL_Delay(SDLTest_RandomIntegerInRange(5, 15)); + SDLTest_AssertPass("Call to SDL_Delay()"); + + /* Get ticks count - should be non-zero by now */ + result = SDL_GetTicks(); + SDLTest_AssertPass("Call to SDL_GetTicks()"); + SDLTest_AssertCheck(result > 0, "Check result value, expected: >0, got: %" SDL_PRIu64, result); + + /* Delay a bit longer and measure ticks and verify difference */ + SDL_Delay(testDelay); + SDLTest_AssertPass("Call to SDL_Delay(%d)", testDelay); + result2 = SDL_GetTicks(); + SDLTest_AssertPass("Call to SDL_GetTicks()"); + SDLTest_AssertCheck(result2 > 0, "Check result value, expected: >0, got: %" SDL_PRIu64, result2); + difference = result2 - result; + SDLTest_AssertCheck(difference > (testDelay - marginOfError), "Check difference, expected: >%d, got: %" SDL_PRIu64, testDelay - marginOfError, difference); +#if 0 + /* Disabled because this might fail on non-interactive systems. Moved to testtimer. */ + SDLTest_AssertCheck(difference < (testDelay + marginOfError), "Check difference, expected: <%d, got: %" SDL_PRIu64, testDelay + marginOfError, difference); +#endif + + return TEST_COMPLETED; +} + +/* Test callback */ +static Uint32 SDLCALL timerTestCallback(Uint32 interval, void *param) +{ + g_timerCallbackCalled = 1; + + if (g_paramCheck != 0) { + SDLTest_AssertCheck(param != NULL, "Check param pointer, expected: non-NULL, got: %s", (param != NULL) ? "non-NULL" : "NULL"); + if (param != NULL) { + SDLTest_AssertCheck(*(int *)param == g_paramValue, "Check param value, expected: %i, got: %i", g_paramValue, *(int *)param); + } + } + + return 0; +} + +/** + * \brief Call to SDL_AddTimer and SDL_RemoveTimer + */ +static int timer_addRemoveTimer(void *arg) +{ + SDL_TimerID id; + SDL_bool result; + int param; + + /* Reset state */ + g_paramCheck = 0; + g_timerCallbackCalled = 0; + + /* Set timer with a long delay */ + id = SDL_AddTimer(10000, timerTestCallback, NULL); + SDLTest_AssertPass("Call to SDL_AddTimer(10000,...)"); + SDLTest_AssertCheck(id > 0, "Check result value, expected: >0, got: %d", id); + + /* Remove timer again and check that callback was not called */ + result = SDL_RemoveTimer(id); + SDLTest_AssertPass("Call to SDL_RemoveTimer()"); + SDLTest_AssertCheck(result == SDL_TRUE, "Check result value, expected: %i, got: %i", SDL_TRUE, result); + SDLTest_AssertCheck(g_timerCallbackCalled == 0, "Check callback WAS NOT called, expected: 0, got: %i", g_timerCallbackCalled); + + /* Try to remove timer again (should be a NOOP) */ + result = SDL_RemoveTimer(id); + SDLTest_AssertPass("Call to SDL_RemoveTimer()"); + SDLTest_AssertCheck(result == SDL_FALSE, "Check result value, expected: %i, got: %i", SDL_FALSE, result); + + /* Reset state */ + param = SDLTest_RandomIntegerInRange(-1024, 1024); + g_paramCheck = 1; + g_paramValue = param; + g_timerCallbackCalled = 0; + + /* Set timer with a short delay */ + id = SDL_AddTimer(10, timerTestCallback, (void *)¶m); + SDLTest_AssertPass("Call to SDL_AddTimer(10, param)"); + SDLTest_AssertCheck(id > 0, "Check result value, expected: >0, got: %d", id); + + /* Wait to let timer trigger callback */ + SDL_Delay(100); + SDLTest_AssertPass("Call to SDL_Delay(100)"); + + /* Remove timer again and check that callback was called */ + result = SDL_RemoveTimer(id); + SDLTest_AssertPass("Call to SDL_RemoveTimer()"); + SDLTest_AssertCheck(result == SDL_FALSE, "Check result value, expected: %i, got: %i", SDL_FALSE, result); + SDLTest_AssertCheck(g_timerCallbackCalled == 1, "Check callback WAS called, expected: 1, got: %i", g_timerCallbackCalled); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Timer test cases */ +static const SDLTest_TestCaseReference timerTest1 = { + (SDLTest_TestCaseFp)timer_getPerformanceCounter, "timer_getPerformanceCounter", "Call to SDL_GetPerformanceCounter", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference timerTest2 = { + (SDLTest_TestCaseFp)timer_getPerformanceFrequency, "timer_getPerformanceFrequency", "Call to SDL_GetPerformanceFrequency", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference timerTest3 = { + (SDLTest_TestCaseFp)timer_delayAndGetTicks, "timer_delayAndGetTicks", "Call to SDL_Delay and SDL_GetTicks", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference timerTest4 = { + (SDLTest_TestCaseFp)timer_addRemoveTimer, "timer_addRemoveTimer", "Call to SDL_AddTimer and SDL_RemoveTimer", TEST_ENABLED +}; + +/* Sequence of Timer test cases */ +static const SDLTest_TestCaseReference *timerTests[] = { + &timerTest1, &timerTest2, &timerTest3, &timerTest4, NULL +}; + +/* Timer test suite (global) */ +SDLTest_TestSuiteReference timerTestSuite = { + "Timer", + timerSetUp, + timerTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testautomation_video.c b/vendor/sdl-3.0.0/test/testautomation_video.c new file mode 100644 index 0000000..5d0523f --- /dev/null +++ b/vendor/sdl-3.0.0/test/testautomation_video.c @@ -0,0 +1,1907 @@ +/** + * Video test suite + */ +#include +#include +#include "testautomation_suites.h" + +/* Private helpers */ + +/** + * Create a test window + */ +static SDL_Window *createVideoSuiteTestWindow(const char *title) +{ + SDL_Window *window; + int w, h; + SDL_WindowFlags flags; + SDL_bool needs_renderer = SDL_FALSE; + + /* Standard window */ + w = SDLTest_RandomIntegerInRange(320, 1024); + h = SDLTest_RandomIntegerInRange(320, 768); + flags = SDL_WINDOW_RESIZABLE | SDL_WINDOW_BORDERLESS; + + window = SDL_CreateWindow(title, w, h, flags); + SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d)", w, h, flags); + SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL"); + + /* Wayland and XWayland windows require that a frame be presented before they are fully mapped and visible onscreen. + * This is required for the mouse/keyboard grab tests to pass. + */ + if (SDL_strcmp(SDL_GetCurrentVideoDriver(), "wayland") == 0) { + needs_renderer = SDL_TRUE; + } else if (SDL_strcmp(SDL_GetCurrentVideoDriver(), "x11") == 0) { + /* Try to detect if the x11 driver is running under XWayland */ + const char *session_type = SDL_getenv("XDG_SESSION_TYPE"); + if (session_type && SDL_strcasecmp(session_type, "wayland") == 0) { + needs_renderer = SDL_TRUE; + } + } + + if (needs_renderer) { + SDL_Renderer *renderer = SDL_CreateRenderer(window, NULL, 0); + if (renderer) { + SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF); + SDL_RenderClear(renderer); + SDL_RenderPresent(renderer); + + /* Some desktops don't display the window immediately after presentation, + * so delay to give the window time to actually appear on the desktop. + */ + SDL_Delay(100); + } else { + SDLTest_Log("Unable to create a renderer, some tests may fail on Wayland/XWayland"); + } + } + + return window; +} + +/** + * Destroy test window + */ +static void destroyVideoSuiteTestWindow(SDL_Window *window) +{ + if (window != NULL) { + SDL_DestroyWindow(window); + window = NULL; + SDLTest_AssertPass("Call to SDL_DestroyWindow()"); + } +} + +/* Test case functions */ + +/** + * \brief Enable and disable screensaver while checking state + */ +static int video_enableDisableScreensaver(void *arg) +{ + SDL_bool initialResult; + SDL_bool result; + + /* Get current state and proceed according to current state */ + initialResult = SDL_ScreenSaverEnabled(); + SDLTest_AssertPass("Call to SDL_ScreenSaverEnabled()"); + if (initialResult == SDL_TRUE) { + + /* Currently enabled: disable first, then enable again */ + + /* Disable screensaver and check */ + SDL_DisableScreenSaver(); + SDLTest_AssertPass("Call to SDL_DisableScreenSaver()"); + result = SDL_ScreenSaverEnabled(); + SDLTest_AssertPass("Call to SDL_ScreenSaverEnabled()"); + SDLTest_AssertCheck(result == SDL_FALSE, "Verify result from SDL_ScreenSaverEnabled, expected: %i, got: %i", SDL_FALSE, result); + + /* Enable screensaver and check */ + SDL_EnableScreenSaver(); + SDLTest_AssertPass("Call to SDL_EnableScreenSaver()"); + result = SDL_ScreenSaverEnabled(); + SDLTest_AssertPass("Call to SDL_ScreenSaverEnabled()"); + SDLTest_AssertCheck(result == SDL_TRUE, "Verify result from SDL_ScreenSaverEnabled, expected: %i, got: %i", SDL_TRUE, result); + + } else { + + /* Currently disabled: enable first, then disable again */ + + /* Enable screensaver and check */ + SDL_EnableScreenSaver(); + SDLTest_AssertPass("Call to SDL_EnableScreenSaver()"); + result = SDL_ScreenSaverEnabled(); + SDLTest_AssertPass("Call to SDL_ScreenSaverEnabled()"); + SDLTest_AssertCheck(result == SDL_TRUE, "Verify result from SDL_ScreenSaverEnabled, expected: %i, got: %i", SDL_TRUE, result); + + /* Disable screensaver and check */ + SDL_DisableScreenSaver(); + SDLTest_AssertPass("Call to SDL_DisableScreenSaver()"); + result = SDL_ScreenSaverEnabled(); + SDLTest_AssertPass("Call to SDL_ScreenSaverEnabled()"); + SDLTest_AssertCheck(result == SDL_FALSE, "Verify result from SDL_ScreenSaverEnabled, expected: %i, got: %i", SDL_FALSE, result); + } + + return TEST_COMPLETED; +} + +/** + * \brief Tests the functionality of the SDL_CreateWindow function using different sizes + */ +static int video_createWindowVariousSizes(void *arg) +{ + SDL_Window *window; + const char *title = "video_createWindowVariousSizes Test Window"; + int w = 0, h = 0; + int wVariation, hVariation; + + for (wVariation = 0; wVariation < 3; wVariation++) { + for (hVariation = 0; hVariation < 3; hVariation++) { + switch (wVariation) { + case 0: + /* Width of 1 */ + w = 1; + break; + case 1: + /* Random "normal" width */ + w = SDLTest_RandomIntegerInRange(320, 1920); + break; + case 2: + /* Random "large" width */ + w = SDLTest_RandomIntegerInRange(2048, 4095); + break; + } + + switch (hVariation) { + case 0: + /* Height of 1 */ + h = 1; + break; + case 1: + /* Random "normal" height */ + h = SDLTest_RandomIntegerInRange(320, 1080); + break; + case 2: + /* Random "large" height */ + h = SDLTest_RandomIntegerInRange(2048, 4095); + break; + } + + window = SDL_CreateWindow(title, w, h, 0); + SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,SHOWN)", w, h); + SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL"); + + /* Clean up */ + destroyVideoSuiteTestWindow(window); + } + } + + return TEST_COMPLETED; +} + +/** + * \brief Tests the functionality of the SDL_CreateWindow function using different flags + */ +static int video_createWindowVariousFlags(void *arg) +{ + SDL_Window *window; + const char *title = "video_createWindowVariousFlags Test Window"; + int w, h; + int fVariation; + SDL_WindowFlags flags; + + /* Standard window */ + w = SDLTest_RandomIntegerInRange(320, 1024); + h = SDLTest_RandomIntegerInRange(320, 768); + + for (fVariation = 1; fVariation < 14; fVariation++) { + switch (fVariation) { + default: + case 1: + flags = SDL_WINDOW_FULLSCREEN; + /* Skip - blanks screen; comment out next line to run test */ + continue; + break; + case 2: + flags = SDL_WINDOW_OPENGL; + /* Skip - not every video driver supports OpenGL; comment out next line to run test */ + continue; + break; + case 3: + flags = 0; + break; + case 4: + flags = SDL_WINDOW_HIDDEN; + break; + case 5: + flags = SDL_WINDOW_BORDERLESS; + break; + case 6: + flags = SDL_WINDOW_RESIZABLE; + break; + case 7: + flags = SDL_WINDOW_MINIMIZED; + break; + case 8: + flags = SDL_WINDOW_MAXIMIZED; + break; + case 9: + flags = SDL_WINDOW_MOUSE_GRABBED; + break; + case 10: + flags = SDL_WINDOW_INPUT_FOCUS; + break; + case 11: + flags = SDL_WINDOW_MOUSE_FOCUS; + break; + case 12: + flags = SDL_WINDOW_FOREIGN; + break; + case 13: + flags = SDL_WINDOW_KEYBOARD_GRABBED; + break; + } + + window = SDL_CreateWindow(title, w, h, flags); + SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d)", w, h, flags); + SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL"); + + /* Clean up */ + destroyVideoSuiteTestWindow(window); + } + + return TEST_COMPLETED; +} + +/** + * \brief Tests the functionality of the SDL_GetWindowFlags function + */ +static int video_getWindowFlags(void *arg) +{ + SDL_Window *window; + const char *title = "video_getWindowFlags Test Window"; + SDL_WindowFlags flags; + Uint32 actualFlags; + + /* Reliable flag set always set in test window */ + flags = 0; + + /* Call against new test window */ + window = createVideoSuiteTestWindow(title); + if (window != NULL) { + actualFlags = SDL_GetWindowFlags(window); + SDLTest_AssertPass("Call to SDL_GetWindowFlags()"); + SDLTest_AssertCheck((flags & actualFlags) == flags, "Verify returned value has flags %d set, got: %" SDL_PRIu32, flags, actualFlags); + } + + /* Clean up */ + destroyVideoSuiteTestWindow(window); + + return TEST_COMPLETED; +} + +/** + * \brief Tests the functionality of the SDL_GetFullscreenDisplayModes function + */ +static int video_getFullscreenDisplayModes(void *arg) +{ + SDL_DisplayID *displays; + const SDL_DisplayMode **modes; + int count; + int i; + + /* Get number of displays */ + displays = SDL_GetDisplays(NULL); + if (displays) { + SDLTest_AssertPass("Call to SDL_GetDisplays()"); + + /* Make call for each display */ + for (i = 0; displays[i]; ++i) { + modes = SDL_GetFullscreenDisplayModes(displays[i], &count); + SDLTest_AssertPass("Call to SDL_GetFullscreenDisplayModes(%" SDL_PRIu32 ")", displays[i]); + SDLTest_AssertCheck(modes != NULL, "Validate returned value from function; expected != NULL; got: %p", modes); + SDLTest_AssertCheck(count >= 0, "Validate number of modes; expected: >= 0; got: %d", count); + SDL_free((void *)modes); + } + SDL_free(displays); + } + + return TEST_COMPLETED; +} + +/** + * \brief Tests the functionality of the SDL_GetClosestFullscreenDisplayMode function against current resolution + */ +static int video_getClosestDisplayModeCurrentResolution(void *arg) +{ + SDL_DisplayID *displays; + const SDL_DisplayMode **modes; + SDL_DisplayMode current; + const SDL_DisplayMode *closest; + int i, num_modes; + + /* Get number of displays */ + displays = SDL_GetDisplays(NULL); + if (displays) { + SDLTest_AssertPass("Call to SDL_GetDisplays()"); + + /* Make calls for each display */ + for (i = 0; displays[i]; ++i) { + SDLTest_Log("Testing against display: %" SDL_PRIu32 "", displays[i]); + + /* Get first display mode to get a sane resolution; this should always work */ + modes = SDL_GetFullscreenDisplayModes(displays[i], &num_modes); + SDLTest_AssertPass("Call to SDL_GetDisplayModes()"); + SDLTest_Assert(modes != NULL, "Verify returned value is not NULL"); + if (num_modes > 0) { + SDL_memcpy(¤t, modes[0], sizeof(current)); + + /* Make call */ + closest = SDL_GetClosestFullscreenDisplayMode(displays[i], current.w, current.h, current.refresh_rate, SDL_FALSE); + SDLTest_AssertPass("Call to SDL_GetClosestFullscreenDisplayMode(target=current)"); + SDLTest_Assert(closest != NULL, "Verify returned value is not NULL"); + + /* Check that one gets the current resolution back again */ + if (closest) { + SDLTest_AssertCheck(closest->w == current.w, + "Verify returned width matches current width; expected: %d, got: %d", + current.w, closest->w); + SDLTest_AssertCheck(closest->h == current.h, + "Verify returned height matches current height; expected: %d, got: %d", + current.h, closest->h); + } + } + SDL_free((void *)modes); + } + SDL_free(displays); + } + + return TEST_COMPLETED; +} + +/** + * \brief Tests the functionality of the SDL_GetClosestFullscreenDisplayMode function against random resolution + */ +static int video_getClosestDisplayModeRandomResolution(void *arg) +{ + SDL_DisplayID *displays; + SDL_DisplayMode target; + int i; + int variation; + + /* Get number of displays */ + displays = SDL_GetDisplays(NULL); + if (displays) { + SDLTest_AssertPass("Call to SDL_GetDisplays()"); + + /* Make calls for each display */ + for (i = 0; displays[i]; ++i) { + SDLTest_Log("Testing against display: %" SDL_PRIu32 "", displays[i]); + + for (variation = 0; variation < 16; variation++) { + + /* Set random constraints */ + SDL_zero(target); + target.w = (variation & 1) ? SDLTest_RandomIntegerInRange(1, 4096) : 0; + target.h = (variation & 2) ? SDLTest_RandomIntegerInRange(1, 4096) : 0; + target.refresh_rate = (variation & 8) ? (float)SDLTest_RandomIntegerInRange(25, 120) : 0.0f; + + /* Make call; may or may not find anything, so don't validate any further */ + SDL_GetClosestFullscreenDisplayMode(displays[i], target.w, target.h, target.refresh_rate, SDL_FALSE); + SDLTest_AssertPass("Call to SDL_GetClosestFullscreenDisplayMode(target=random/variation%d)", variation); + } + } + SDL_free(displays); + } + + return TEST_COMPLETED; +} + +/** + * \brief Tests call to SDL_GetWindowFullscreenMode + * + * \sa SDL_GetWindowFullscreenMode + */ +static int video_getWindowDisplayMode(void *arg) +{ + SDL_Window *window; + const char *title = "video_getWindowDisplayMode Test Window"; + const SDL_DisplayMode *mode; + + /* Call against new test window */ + window = createVideoSuiteTestWindow(title); + if (window != NULL) { + mode = SDL_GetWindowFullscreenMode(window); + SDLTest_AssertPass("Call to SDL_GetWindowFullscreenMode()"); + SDLTest_AssertCheck(mode == NULL, "Validate result value; expected: NULL, got: %p", mode); + } + + /* Clean up */ + destroyVideoSuiteTestWindow(window); + + return TEST_COMPLETED; +} + +/* Helper function that checks for an 'Invalid window' error */ +static void checkInvalidWindowError(void) +{ + const char *invalidWindowError = "Invalid window"; + const char *lastError; + + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL, "Verify error message is not NULL"); + if (lastError != NULL) { + SDLTest_AssertCheck(SDL_strcmp(lastError, invalidWindowError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + invalidWindowError, + lastError); + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + } +} + +/** + * \brief Tests call to SDL_GetWindowFullscreenMode with invalid input + * + * \sa SDL_GetWindowFullscreenMode + */ +static int video_getWindowDisplayModeNegative(void *arg) +{ + const SDL_DisplayMode *mode; + + /* Call against invalid window */ + mode = SDL_GetWindowFullscreenMode(NULL); + SDLTest_AssertPass("Call to SDL_GetWindowFullscreenMode(window=NULL)"); + SDLTest_AssertCheck(mode == NULL, "Validate result value; expected: NULL, got: %p", mode); + checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/* Helper for setting and checking the window mouse grab state */ +static void setAndCheckWindowMouseGrabState(SDL_Window *window, SDL_bool desiredState) +{ + SDL_bool currentState; + + /* Set state */ + SDL_SetWindowMouseGrab(window, desiredState); + SDLTest_AssertPass("Call to SDL_SetWindowMouseGrab(%s)", (desiredState == SDL_FALSE) ? "SDL_FALSE" : "SDL_TRUE"); + + /* Get and check state */ + currentState = SDL_GetWindowMouseGrab(window); + SDLTest_AssertPass("Call to SDL_GetWindowMouseGrab()"); + SDLTest_AssertCheck( + currentState == desiredState, + "Validate returned state; expected: %s, got: %s", + (desiredState == SDL_FALSE) ? "SDL_FALSE" : "SDL_TRUE", + (currentState == SDL_FALSE) ? "SDL_FALSE" : "SDL_TRUE"); + + if (desiredState) { + SDLTest_AssertCheck( + SDL_GetGrabbedWindow() == window, + "Grabbed window should be to our window"); + SDLTest_AssertCheck( + SDL_GetWindowGrab(window), + "SDL_GetWindowGrab() should return SDL_TRUE"); + SDLTest_AssertCheck( + SDL_GetWindowFlags(window) & SDL_WINDOW_MOUSE_GRABBED, + "SDL_WINDOW_MOUSE_GRABBED should be set"); + } else { + SDLTest_AssertCheck( + !(SDL_GetWindowFlags(window) & SDL_WINDOW_MOUSE_GRABBED), + "SDL_WINDOW_MOUSE_GRABBED should be unset"); + } +} + +/* Helper for setting and checking the window keyboard grab state */ +static void setAndCheckWindowKeyboardGrabState(SDL_Window *window, SDL_bool desiredState) +{ + SDL_bool currentState; + + /* Set state */ + SDL_SetWindowKeyboardGrab(window, desiredState); + SDLTest_AssertPass("Call to SDL_SetWindowKeyboardGrab(%s)", (desiredState == SDL_FALSE) ? "SDL_FALSE" : "SDL_TRUE"); + + /* Get and check state */ + currentState = SDL_GetWindowKeyboardGrab(window); + SDLTest_AssertPass("Call to SDL_GetWindowKeyboardGrab()"); + SDLTest_AssertCheck( + currentState == desiredState, + "Validate returned state; expected: %s, got: %s", + (desiredState == SDL_FALSE) ? "SDL_FALSE" : "SDL_TRUE", + (currentState == SDL_FALSE) ? "SDL_FALSE" : "SDL_TRUE"); + + if (desiredState) { + SDLTest_AssertCheck( + SDL_GetGrabbedWindow() == window, + "Grabbed window should be set to our window"); + SDLTest_AssertCheck( + SDL_GetWindowGrab(window), + "SDL_GetWindowGrab() should return SDL_TRUE"); + SDLTest_AssertCheck( + SDL_GetWindowFlags(window) & SDL_WINDOW_KEYBOARD_GRABBED, + "SDL_WINDOW_KEYBOARD_GRABBED should be set"); + } else { + SDLTest_AssertCheck( + !(SDL_GetWindowFlags(window) & SDL_WINDOW_KEYBOARD_GRABBED), + "SDL_WINDOW_KEYBOARD_GRABBED should be unset"); + } +} + +/** + * \brief Tests keyboard and mouse grab support + * + * \sa SDL_GetWindowGrab + * \sa SDL_SetWindowGrab + */ +static int video_getSetWindowGrab(void *arg) +{ + const char *title = "video_getSetWindowGrab Test Window"; + SDL_Window *window; + SDL_bool originalMouseState, originalKeyboardState; + SDL_bool hasFocusGained = SDL_FALSE; + + /* Call against new test window */ + window = createVideoSuiteTestWindow(title); + if (window == NULL) { + return TEST_ABORTED; + } + + /* Need to raise the window to have and SDL_EVENT_WINDOW_FOCUS_GAINED, + * so that the window gets the flags SDL_WINDOW_INPUT_FOCUS, + * so that it can be "grabbed" */ + SDL_RaiseWindow(window); + + { + SDL_Event evt; + SDL_zero(evt); + while (SDL_PollEvent(&evt)) { + if (evt.type == SDL_EVENT_WINDOW_FOCUS_GAINED) { + hasFocusGained = SDL_TRUE; + } + } + } + + SDLTest_AssertCheck(hasFocusGained == SDL_TRUE, "Expectded window with focus"); + + /* Get state */ + originalMouseState = SDL_GetWindowMouseGrab(window); + SDLTest_AssertPass("Call to SDL_GetWindowMouseGrab()"); + originalKeyboardState = SDL_GetWindowKeyboardGrab(window); + SDLTest_AssertPass("Call to SDL_GetWindowKeyboardGrab()"); + + /* F */ + setAndCheckWindowKeyboardGrabState(window, SDL_FALSE); + setAndCheckWindowMouseGrabState(window, SDL_FALSE); + SDLTest_AssertCheck(!SDL_GetWindowGrab(window), + "SDL_GetWindowGrab should return SDL_FALSE"); + SDLTest_AssertCheck(SDL_GetGrabbedWindow() == NULL, + "Expected NULL grabbed window"); + + /* F --> F */ + setAndCheckWindowMouseGrabState(window, SDL_FALSE); + setAndCheckWindowKeyboardGrabState(window, SDL_FALSE); + SDLTest_AssertCheck(SDL_GetGrabbedWindow() == NULL, + "Expected NULL grabbed window"); + + /* F --> T */ + setAndCheckWindowMouseGrabState(window, SDL_TRUE); + setAndCheckWindowKeyboardGrabState(window, SDL_TRUE); + SDLTest_AssertCheck(SDL_GetWindowGrab(window), + "SDL_GetWindowGrab() should return SDL_TRUE"); + + /* T --> T */ + setAndCheckWindowKeyboardGrabState(window, SDL_TRUE); + setAndCheckWindowMouseGrabState(window, SDL_TRUE); + SDLTest_AssertCheck(SDL_GetWindowGrab(window), + "SDL_GetWindowGrab() should return SDL_TRUE"); + + /* M: T --> F */ + /* K: T --> T */ + setAndCheckWindowKeyboardGrabState(window, SDL_TRUE); + setAndCheckWindowMouseGrabState(window, SDL_FALSE); + SDLTest_AssertCheck(SDL_GetWindowGrab(window), + "SDL_GetWindowGrab() should return SDL_TRUE"); + + /* M: F --> T */ + /* K: T --> F */ + setAndCheckWindowMouseGrabState(window, SDL_TRUE); + setAndCheckWindowKeyboardGrabState(window, SDL_FALSE); + SDLTest_AssertCheck(SDL_GetWindowGrab(window), + "SDL_GetWindowGrab() should return SDL_TRUE"); + + /* M: T --> F */ + /* K: F --> F */ + setAndCheckWindowMouseGrabState(window, SDL_FALSE); + setAndCheckWindowKeyboardGrabState(window, SDL_FALSE); + SDLTest_AssertCheck(!SDL_GetWindowGrab(window), + "SDL_GetWindowGrab() should return SDL_FALSE"); + SDLTest_AssertCheck(SDL_GetGrabbedWindow() == NULL, + "Expected NULL grabbed window"); + + /* Using the older SDL_SetWindowGrab API should only grab mouse by default */ + SDL_SetWindowGrab(window, SDL_TRUE); + SDLTest_AssertPass("Call to SDL_SetWindowGrab(SDL_TRUE)"); + SDLTest_AssertCheck(SDL_GetWindowGrab(window), + "SDL_GetWindowGrab() should return SDL_TRUE"); + SDLTest_AssertCheck(SDL_GetWindowMouseGrab(window), + "SDL_GetWindowMouseGrab() should return SDL_TRUE"); + SDLTest_AssertCheck(!SDL_GetWindowKeyboardGrab(window), + "SDL_GetWindowKeyboardGrab() should return SDL_FALSE"); + SDL_SetWindowGrab(window, SDL_FALSE); + SDLTest_AssertCheck(!SDL_GetWindowGrab(window), + "SDL_GetWindowGrab() should return SDL_FALSE"); + SDLTest_AssertCheck(!SDL_GetWindowMouseGrab(window), + "SDL_GetWindowMouseGrab() should return SDL_FALSE"); + SDLTest_AssertCheck(!SDL_GetWindowKeyboardGrab(window), + "SDL_GetWindowKeyboardGrab() should return SDL_FALSE"); + + /* Now test with SDL_HINT_GRAB_KEYBOARD set. We should get keyboard grab now. */ + SDL_SetHint(SDL_HINT_GRAB_KEYBOARD, "1"); + SDL_SetWindowGrab(window, SDL_TRUE); + SDLTest_AssertPass("Call to SDL_SetWindowGrab(SDL_TRUE)"); + SDLTest_AssertCheck(SDL_GetWindowGrab(window), + "SDL_GetWindowGrab() should return SDL_TRUE"); + SDLTest_AssertCheck(SDL_GetWindowMouseGrab(window), + "SDL_GetWindowMouseGrab() should return SDL_TRUE"); + SDLTest_AssertCheck(SDL_GetWindowKeyboardGrab(window), + "SDL_GetWindowKeyboardGrab() should return SDL_TRUE"); + SDL_SetWindowGrab(window, SDL_FALSE); + SDLTest_AssertCheck(!SDL_GetWindowGrab(window), + "SDL_GetWindowGrab() should return SDL_FALSE"); + SDLTest_AssertCheck(!SDL_GetWindowMouseGrab(window), + "SDL_GetWindowMouseGrab() should return SDL_FALSE"); + SDLTest_AssertCheck(!SDL_GetWindowKeyboardGrab(window), + "SDL_GetWindowKeyboardGrab() should return SDL_FALSE"); + + /* Negative tests */ + SDL_GetWindowGrab(NULL); + SDLTest_AssertPass("Call to SDL_GetWindowGrab(window=NULL)"); + checkInvalidWindowError(); + + SDL_GetWindowKeyboardGrab(NULL); + SDLTest_AssertPass("Call to SDL_GetWindowKeyboardGrab(window=NULL)"); + checkInvalidWindowError(); + + SDL_SetWindowGrab(NULL, SDL_FALSE); + SDLTest_AssertPass("Call to SDL_SetWindowGrab(window=NULL,SDL_FALSE)"); + checkInvalidWindowError(); + + SDL_SetWindowKeyboardGrab(NULL, SDL_FALSE); + SDLTest_AssertPass("Call to SDL_SetWindowKeyboardGrab(window=NULL,SDL_FALSE)"); + checkInvalidWindowError(); + + SDL_SetWindowGrab(NULL, SDL_TRUE); + SDLTest_AssertPass("Call to SDL_SetWindowGrab(window=NULL,SDL_TRUE)"); + checkInvalidWindowError(); + + SDL_SetWindowKeyboardGrab(NULL, SDL_TRUE); + SDLTest_AssertPass("Call to SDL_SetWindowKeyboardGrab(window=NULL,SDL_TRUE)"); + checkInvalidWindowError(); + + /* Restore state */ + setAndCheckWindowMouseGrabState(window, originalMouseState); + setAndCheckWindowKeyboardGrabState(window, originalKeyboardState); + + /* Clean up */ + destroyVideoSuiteTestWindow(window); + + return TEST_COMPLETED; +} + +/** + * \brief Tests call to SDL_GetWindowID and SDL_GetWindowFromID + * + * \sa SDL_GetWindowID + * \sa SDL_SetWindowFromID + */ +static int video_getWindowId(void *arg) +{ + const char *title = "video_getWindowId Test Window"; + SDL_Window *window; + SDL_Window *result; + Uint32 id, randomId; + + /* Call against new test window */ + window = createVideoSuiteTestWindow(title); + if (window == NULL) { + return TEST_ABORTED; + } + + /* Get ID */ + id = SDL_GetWindowID(window); + SDLTest_AssertPass("Call to SDL_GetWindowID()"); + + /* Get window from ID */ + result = SDL_GetWindowFromID(id); + SDLTest_AssertPass("Call to SDL_GetWindowID(%" SDL_PRIu32 ")", id); + SDLTest_AssertCheck(result == window, "Verify result matches window pointer"); + + /* Get window from random large ID, no result check */ + randomId = SDLTest_RandomIntegerInRange(UINT8_MAX, UINT16_MAX); + result = SDL_GetWindowFromID(randomId); + SDLTest_AssertPass("Call to SDL_GetWindowID(%" SDL_PRIu32 "/random_large)", randomId); + + /* Get window from 0 and Uint32 max ID, no result check */ + result = SDL_GetWindowFromID(0); + SDLTest_AssertPass("Call to SDL_GetWindowID(0)"); + result = SDL_GetWindowFromID(UINT32_MAX); + SDLTest_AssertPass("Call to SDL_GetWindowID(UINT32_MAX)"); + + /* Clean up */ + destroyVideoSuiteTestWindow(window); + + /* Get window from ID for closed window */ + result = SDL_GetWindowFromID(id); + SDLTest_AssertPass("Call to SDL_GetWindowID(%" SDL_PRIu32 "/closed_window)", id); + SDLTest_AssertCheck(result == NULL, "Verify result is NULL"); + + /* Negative test */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + id = SDL_GetWindowID(NULL); + SDLTest_AssertPass("Call to SDL_GetWindowID(window=NULL)"); + checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/** + * \brief Tests call to SDL_GetWindowPixelFormat + * + * \sa SDL_GetWindowPixelFormat + */ +static int video_getWindowPixelFormat(void *arg) +{ + const char *title = "video_getWindowPixelFormat Test Window"; + SDL_Window *window; + Uint32 format; + + /* Call against new test window */ + window = createVideoSuiteTestWindow(title); + if (window == NULL) { + return TEST_ABORTED; + } + + /* Get format */ + format = SDL_GetWindowPixelFormat(window); + SDLTest_AssertPass("Call to SDL_GetWindowPixelFormat()"); + SDLTest_AssertCheck(format != SDL_PIXELFORMAT_UNKNOWN, "Verify that returned format is valid; expected: != %d, got: %" SDL_PRIu32, SDL_PIXELFORMAT_UNKNOWN, format); + + /* Clean up */ + destroyVideoSuiteTestWindow(window); + + /* Negative test */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + format = SDL_GetWindowPixelFormat(NULL); + SDLTest_AssertPass("Call to SDL_GetWindowPixelFormat(window=NULL)"); + checkInvalidWindowError(); + + return TEST_COMPLETED; +} + + +static SDL_bool getPositionFromEvent(int *x, int *y) +{ + SDL_bool ret = SDL_FALSE; + SDL_Event evt; + SDL_zero(evt); + while (SDL_PollEvent(&evt)) { + if (evt.type == SDL_EVENT_WINDOW_MOVED) { + *x = evt.window.data1; + *y = evt.window.data2; + ret = SDL_TRUE; + } + } + return ret; +} + +static SDL_bool getSizeFromEvent(int *w, int *h) +{ + SDL_bool ret = SDL_FALSE; + SDL_Event evt; + SDL_zero(evt); + while (SDL_PollEvent(&evt)) { + if (evt.type == SDL_EVENT_WINDOW_RESIZED) { + *w = evt.window.data1; + *h = evt.window.data2; + ret = SDL_TRUE; + } + } + return ret; +} + +/** + * \brief Tests call to SDL_GetWindowPosition and SDL_SetWindowPosition + * + * \sa SDL_GetWindowPosition + * \sa SDL_SetWindowPosition + */ +static int video_getSetWindowPosition(void *arg) +{ + const char *title = "video_getSetWindowPosition Test Window"; + SDL_Window *window; + int xVariation, yVariation; + int referenceX, referenceY; + int currentX, currentY; + int desiredX, desiredY; + + /* Call against new test window */ + window = createVideoSuiteTestWindow(title); + if (window == NULL) { + return TEST_ABORTED; + } + + for (xVariation = 0; xVariation < 4; xVariation++) { + for (yVariation = 0; yVariation < 4; yVariation++) { + switch (xVariation) { + default: + case 0: + /* Zero X Position */ + desiredX = 0; + break; + case 1: + /* Random X position inside screen */ + desiredX = SDLTest_RandomIntegerInRange(1, 100); + break; + case 2: + /* Random X position outside screen (positive) */ + desiredX = SDLTest_RandomIntegerInRange(10000, 11000); + break; + case 3: + /* Random X position outside screen (negative) */ + desiredX = SDLTest_RandomIntegerInRange(-1000, -100); + break; + } + + switch (yVariation) { + default: + case 0: + /* Zero X Position */ + desiredY = 0; + break; + case 1: + /* Random X position inside screen */ + desiredY = SDLTest_RandomIntegerInRange(1, 100); + break; + case 2: + /* Random X position outside screen (positive) */ + desiredY = SDLTest_RandomIntegerInRange(10000, 11000); + break; + case 3: + /* Random Y position outside screen (negative) */ + desiredY = SDLTest_RandomIntegerInRange(-1000, -100); + break; + } + + /* Set position */ + SDL_SetWindowPosition(window, desiredX, desiredY); + SDLTest_AssertPass("Call to SDL_SetWindowPosition(...,%d,%d)", desiredX, desiredY); + + /* Get position */ + currentX = desiredX + 1; + currentY = desiredY + 1; + SDL_GetWindowPosition(window, ¤tX, ¤tY); + SDLTest_AssertPass("Call to SDL_GetWindowPosition()"); + + if (desiredX == currentX && desiredY == currentY) { + SDLTest_AssertCheck(desiredX == currentX, "Verify returned X position; expected: %d, got: %d", desiredX, currentX); + SDLTest_AssertCheck(desiredY == currentY, "Verify returned Y position; expected: %d, got: %d", desiredY, currentY); + } else { + SDL_bool hasEvent; + /* SDL_SetWindowPosition() and SDL_SetWindowSize() will make requests of the window manager and set the internal position and size, + * and then we get events signaling what actually happened, and they get passed on to the application if they're not what we expect. */ + desiredX = currentX + 1; + desiredY = currentY + 1; + hasEvent = getPositionFromEvent(&desiredX, &desiredY); + SDLTest_AssertCheck(hasEvent == SDL_TRUE, "Changing position was not honored by WM, checking present of SDL_EVENT_WINDOW_MOVED"); + if (hasEvent) { + SDLTest_AssertCheck(desiredX == currentX, "Verify returned X position is the position from SDL event; expected: %d, got: %d", desiredX, currentX); + SDLTest_AssertCheck(desiredY == currentY, "Verify returned Y position is the position from SDL event; expected: %d, got: %d", desiredY, currentY); + } + } + + /* Get position X */ + currentX = desiredX + 1; + SDL_GetWindowPosition(window, ¤tX, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowPosition(&y=NULL)"); + SDLTest_AssertCheck(desiredX == currentX, "Verify returned X position; expected: %d, got: %d", desiredX, currentX); + + /* Get position Y */ + currentY = desiredY + 1; + SDL_GetWindowPosition(window, NULL, ¤tY); + SDLTest_AssertPass("Call to SDL_GetWindowPosition(&x=NULL)"); + SDLTest_AssertCheck(desiredY == currentY, "Verify returned Y position; expected: %d, got: %d", desiredY, currentY); + } + } + + /* Dummy call with both pointers NULL */ + SDL_GetWindowPosition(window, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowPosition(&x=NULL,&y=NULL)"); + + /* Clean up */ + destroyVideoSuiteTestWindow(window); + + /* Set some 'magic' value for later check that nothing was changed */ + referenceX = SDLTest_RandomSint32(); + referenceY = SDLTest_RandomSint32(); + currentX = referenceX; + currentY = referenceY; + desiredX = SDLTest_RandomSint32(); + desiredY = SDLTest_RandomSint32(); + + /* Negative tests */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_GetWindowPosition(NULL, ¤tX, ¤tY); + SDLTest_AssertPass("Call to SDL_GetWindowPosition(window=NULL)"); + SDLTest_AssertCheck( + currentX == referenceX && currentY == referenceY, + "Verify that content of X and Y pointers has not been modified; expected: %d,%d; got: %d,%d", + referenceX, referenceY, + currentX, currentY); + checkInvalidWindowError(); + + SDL_GetWindowPosition(NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowPosition(NULL, NULL, NULL)"); + checkInvalidWindowError(); + + SDL_SetWindowPosition(NULL, desiredX, desiredY); + SDLTest_AssertPass("Call to SDL_SetWindowPosition(window=NULL)"); + checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/* Helper function that checks for an 'Invalid parameter' error */ +static void checkInvalidParameterError(void) +{ + const char *invalidParameterError = "Parameter"; + const char *lastError; + + lastError = SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL, "Verify error message is not NULL"); + if (lastError != NULL) { + SDLTest_AssertCheck(SDL_strncmp(lastError, invalidParameterError, SDL_strlen(invalidParameterError)) == 0, + "SDL_GetError(): expected message starts with '%s', was message: '%s'", + invalidParameterError, + lastError); + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + } +} + +/** + * \brief Tests call to SDL_GetWindowSize and SDL_SetWindowSize + * + * \sa SDL_GetWindowSize + * \sa SDL_SetWindowSize + */ +static int video_getSetWindowSize(void *arg) +{ + const char *title = "video_getSetWindowSize Test Window"; + SDL_Window *window; + int result; + SDL_Rect display; + int maxwVariation, maxhVariation; + int wVariation, hVariation; + int referenceW, referenceH; + int currentW, currentH; + int desiredW, desiredH; + + /* Get display bounds for size range */ + result = SDL_GetDisplayBounds(SDL_GetPrimaryDisplay(), &display); + SDLTest_AssertPass("SDL_GetDisplayBounds()"); + SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0, got: %d", result); + if (result != 0) { + return TEST_ABORTED; + } + + /* Call against new test window */ + window = createVideoSuiteTestWindow(title); + if (window == NULL) { + return TEST_ABORTED; + } + +#ifdef __WIN32__ + /* Platform clips window size to screen size */ + maxwVariation = 4; + maxhVariation = 4; +#else + /* Platform allows window size >= screen size */ + maxwVariation = 5; + maxhVariation = 5; +#endif + + for (wVariation = 0; wVariation < maxwVariation; wVariation++) { + for (hVariation = 0; hVariation < maxhVariation; hVariation++) { + switch (wVariation) { + default: + case 0: + /* 1 Pixel Wide */ + desiredW = 1; + break; + case 1: + /* Random width inside screen */ + desiredW = SDLTest_RandomIntegerInRange(1, 100); + break; + case 2: + /* Width 1 pixel smaller than screen */ + desiredW = display.w - 1; + break; + case 3: + /* Width at screen size */ + desiredW = display.w; + break; + case 4: + /* Width 1 pixel larger than screen */ + desiredW = display.w + 1; + break; + } + + switch (hVariation) { + default: + case 0: + /* 1 Pixel High */ + desiredH = 1; + break; + case 1: + /* Random height inside screen */ + desiredH = SDLTest_RandomIntegerInRange(1, 100); + break; + case 2: + /* Height 1 pixel smaller than screen */ + desiredH = display.h - 1; + break; + case 3: + /* Height at screen size */ + desiredH = display.h; + break; + case 4: + /* Height 1 pixel larger than screen */ + desiredH = display.h + 1; + break; + } + + /* Set size */ + SDL_SetWindowSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowSize(...,%d,%d)", desiredW, desiredH); + + /* Get size */ + currentW = desiredW + 1; + currentH = desiredH + 1; + SDL_GetWindowSize(window, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowSize()"); + + if (desiredW == currentW && desiredH == currentH) { + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentW); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredH, currentH); + } else { + SDL_bool hasEvent; + /* SDL_SetWindowPosition() and SDL_SetWindowSize() will make requests of the window manager and set the internal position and size, + * and then we get events signaling what actually happened, and they get passed on to the application if they're not what we expect. */ + desiredW = currentW + 1; + desiredH = currentH + 1; + hasEvent = getSizeFromEvent(&desiredW, &desiredH); + SDLTest_AssertCheck(hasEvent == SDL_TRUE, "Changing size was not honored by WM, checking presence of SDL_EVENT_WINDOW_RESIZED"); + if (hasEvent) { + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width is the one from SDL event; expected: %d, got: %d", desiredW, currentW); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height is the one from SDL event; expected: %d, got: %d", desiredH, currentH); + } + } + + + /* Get just width */ + currentW = desiredW + 1; + SDL_GetWindowSize(window, ¤tW, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowSize(&h=NULL)"); + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentW); + + /* Get just height */ + currentH = desiredH + 1; + SDL_GetWindowSize(window, NULL, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowSize(&w=NULL)"); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredH, currentH); + } + } + + /* Dummy call with both pointers NULL */ + SDL_GetWindowSize(window, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowSize(&w=NULL,&h=NULL)"); + + /* Negative tests for parameter input */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + for (desiredH = -2; desiredH < 2; desiredH++) { + for (desiredW = -2; desiredW < 2; desiredW++) { + if (desiredW <= 0 || desiredH <= 0) { + SDL_SetWindowSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowSize(...,%d,%d)", desiredW, desiredH); + checkInvalidParameterError(); + } + } + } + + /* Clean up */ + destroyVideoSuiteTestWindow(window); + + /* Set some 'magic' value for later check that nothing was changed */ + referenceW = SDLTest_RandomSint32(); + referenceH = SDLTest_RandomSint32(); + currentW = referenceW; + currentH = referenceH; + desiredW = SDLTest_RandomSint32(); + desiredH = SDLTest_RandomSint32(); + + /* Negative tests for window input */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_GetWindowSize(NULL, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowSize(window=NULL)"); + SDLTest_AssertCheck( + currentW == referenceW && currentH == referenceH, + "Verify that content of W and H pointers has not been modified; expected: %d,%d; got: %d,%d", + referenceW, referenceH, + currentW, currentH); + checkInvalidWindowError(); + + SDL_GetWindowSize(NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowSize(NULL, NULL, NULL)"); + checkInvalidWindowError(); + + SDL_SetWindowSize(NULL, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowSize(window=NULL)"); + checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/** + * \brief Tests call to SDL_GetWindowMinimumSize and SDL_SetWindowMinimumSize + * + */ +static int video_getSetWindowMinimumSize(void *arg) +{ + const char *title = "video_getSetWindowMinimumSize Test Window"; + SDL_Window *window; + int result; + SDL_Rect display; + int wVariation, hVariation; + int referenceW, referenceH; + int currentW, currentH; + int desiredW = 1; + int desiredH = 1; + + /* Get display bounds for size range */ + result = SDL_GetDisplayBounds(SDL_GetPrimaryDisplay(), &display); + SDLTest_AssertPass("SDL_GetDisplayBounds()"); + SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0, got: %d", result); + if (result != 0) { + return TEST_ABORTED; + } + + /* Call against new test window */ + window = createVideoSuiteTestWindow(title); + if (window == NULL) { + return TEST_ABORTED; + } + + for (wVariation = 0; wVariation < 5; wVariation++) { + for (hVariation = 0; hVariation < 5; hVariation++) { + switch (wVariation) { + case 0: + /* 1 Pixel Wide */ + desiredW = 1; + break; + case 1: + /* Random width inside screen */ + desiredW = SDLTest_RandomIntegerInRange(2, display.w - 1); + break; + case 2: + /* Width at screen size */ + desiredW = display.w; + break; + } + + switch (hVariation) { + case 0: + /* 1 Pixel High */ + desiredH = 1; + break; + case 1: + /* Random height inside screen */ + desiredH = SDLTest_RandomIntegerInRange(2, display.h - 1); + break; + case 2: + /* Height at screen size */ + desiredH = display.h; + break; + case 4: + /* Height 1 pixel larger than screen */ + desiredH = display.h + 1; + break; + } + + /* Set size */ + SDL_SetWindowMinimumSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMinimumSize(...,%d,%d)", desiredW, desiredH); + + /* Get size */ + currentW = desiredW + 1; + currentH = desiredH + 1; + SDL_GetWindowMinimumSize(window, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize()"); + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentW); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredH, currentH); + + /* Get just width */ + currentW = desiredW + 1; + SDL_GetWindowMinimumSize(window, ¤tW, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize(&h=NULL)"); + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentH); + + /* Get just height */ + currentH = desiredH + 1; + SDL_GetWindowMinimumSize(window, NULL, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize(&w=NULL)"); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredW, currentH); + } + } + + /* Dummy call with both pointers NULL */ + SDL_GetWindowMinimumSize(window, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize(&w=NULL,&h=NULL)"); + + /* Negative tests for parameter input */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + for (desiredH = -2; desiredH < 2; desiredH++) { + for (desiredW = -2; desiredW < 2; desiredW++) { + if (desiredW < 0 || desiredH < 0) { + SDL_SetWindowMinimumSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMinimumSize(...,%d,%d)", desiredW, desiredH); + checkInvalidParameterError(); + } + } + } + + /* Clean up */ + destroyVideoSuiteTestWindow(window); + + /* Set some 'magic' value for later check that nothing was changed */ + referenceW = SDLTest_RandomSint32(); + referenceH = SDLTest_RandomSint32(); + currentW = referenceW; + currentH = referenceH; + desiredW = SDLTest_RandomSint32(); + desiredH = SDLTest_RandomSint32(); + + /* Negative tests for window input */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_GetWindowMinimumSize(NULL, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize(window=NULL)"); + SDLTest_AssertCheck( + currentW == referenceW && currentH == referenceH, + "Verify that content of W and H pointers has not been modified; expected: %d,%d; got: %d,%d", + referenceW, referenceH, + currentW, currentH); + checkInvalidWindowError(); + + SDL_GetWindowMinimumSize(NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize(NULL, NULL, NULL)"); + checkInvalidWindowError(); + + SDL_SetWindowMinimumSize(NULL, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMinimumSize(window=NULL)"); + checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/** + * \brief Tests call to SDL_GetWindowMaximumSize and SDL_SetWindowMaximumSize + * + */ +static int video_getSetWindowMaximumSize(void *arg) +{ + const char *title = "video_getSetWindowMaximumSize Test Window"; + SDL_Window *window; + int result; + SDL_Rect display; + int wVariation, hVariation; + int referenceW, referenceH; + int currentW, currentH; + int desiredW = 0, desiredH = 0; + + /* Get display bounds for size range */ + result = SDL_GetDisplayBounds(SDL_GetPrimaryDisplay(), &display); + SDLTest_AssertPass("SDL_GetDisplayBounds()"); + SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0, got: %d", result); + if (result != 0) { + return TEST_ABORTED; + } + + /* Call against new test window */ + window = createVideoSuiteTestWindow(title); + if (window == NULL) { + return TEST_ABORTED; + } + + for (wVariation = 0; wVariation < 3; wVariation++) { + for (hVariation = 0; hVariation < 3; hVariation++) { + switch (wVariation) { + case 0: + /* 1 Pixel Wide */ + desiredW = 1; + break; + case 1: + /* Random width inside screen */ + desiredW = SDLTest_RandomIntegerInRange(2, display.w - 1); + break; + case 2: + /* Width at screen size */ + desiredW = display.w; + break; + } + + switch (hVariation) { + case 0: + /* 1 Pixel High */ + desiredH = 1; + break; + case 1: + /* Random height inside screen */ + desiredH = SDLTest_RandomIntegerInRange(2, display.h - 1); + break; + case 2: + /* Height at screen size */ + desiredH = display.h; + break; + } + + /* Set size */ + SDL_SetWindowMaximumSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMaximumSize(...,%d,%d)", desiredW, desiredH); + + /* Get size */ + currentW = desiredW + 1; + currentH = desiredH + 1; + SDL_GetWindowMaximumSize(window, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize()"); + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentW); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredH, currentH); + + /* Get just width */ + currentW = desiredW + 1; + SDL_GetWindowMaximumSize(window, ¤tW, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize(&h=NULL)"); + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentH); + + /* Get just height */ + currentH = desiredH + 1; + SDL_GetWindowMaximumSize(window, NULL, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize(&w=NULL)"); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredW, currentH); + } + } + + /* Dummy call with both pointers NULL */ + SDL_GetWindowMaximumSize(window, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize(&w=NULL,&h=NULL)"); + + /* Negative tests for parameter input */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + for (desiredH = -2; desiredH < 2; desiredH++) { + for (desiredW = -2; desiredW < 2; desiredW++) { + if (desiredW < 0 || desiredH < 0) { + SDL_SetWindowMaximumSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMaximumSize(...,%d,%d)", desiredW, desiredH); + checkInvalidParameterError(); + } + } + } + + /* Clean up */ + destroyVideoSuiteTestWindow(window); + + /* Set some 'magic' value for later check that nothing was changed */ + referenceW = SDLTest_RandomSint32(); + referenceH = SDLTest_RandomSint32(); + currentW = referenceW; + currentH = referenceH; + desiredW = SDLTest_RandomSint32(); + desiredH = SDLTest_RandomSint32(); + + /* Negative tests */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_GetWindowMaximumSize(NULL, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize(window=NULL)"); + SDLTest_AssertCheck( + currentW == referenceW && currentH == referenceH, + "Verify that content of W and H pointers has not been modified; expected: %d,%d; got: %d,%d", + referenceW, referenceH, + currentW, currentH); + checkInvalidWindowError(); + + SDL_GetWindowMaximumSize(NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize(NULL, NULL, NULL)"); + checkInvalidWindowError(); + + SDL_SetWindowMaximumSize(NULL, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMaximumSize(window=NULL)"); + checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/** + * \brief Tests call to SDL_SetWindowData and SDL_GetWindowData + * + * \sa SDL_SetWindowData + * \sa SDL_GetWindowData + */ +static int video_getSetWindowData(void *arg) +{ + int returnValue = TEST_COMPLETED; + const char *title = "video_setGetWindowData Test Window"; + SDL_Window *window; + const char *referenceName = "TestName"; + const char *name = "TestName"; + const char *referenceName2 = "TestName2"; + const char *name2 = "TestName2"; + int datasize; + char *referenceUserdata = NULL; + char *userdata = NULL; + char *referenceUserdata2 = NULL; + char *userdata2 = NULL; + char *result; + int iteration; + + /* Call against new test window */ + window = createVideoSuiteTestWindow(title); + if (window == NULL) { + return TEST_ABORTED; + } + + /* Create testdata */ + datasize = SDLTest_RandomIntegerInRange(1, 32); + referenceUserdata = SDLTest_RandomAsciiStringOfSize(datasize); + if (referenceUserdata == NULL) { + returnValue = TEST_ABORTED; + goto cleanup; + } + userdata = SDL_strdup(referenceUserdata); + if (userdata == NULL) { + returnValue = TEST_ABORTED; + goto cleanup; + } + datasize = SDLTest_RandomIntegerInRange(1, 32); + referenceUserdata2 = SDLTest_RandomAsciiStringOfSize(datasize); + if (referenceUserdata2 == NULL) { + returnValue = TEST_ABORTED; + goto cleanup; + } + userdata2 = SDL_strdup(referenceUserdata2); + if (userdata2 == NULL) { + returnValue = TEST_ABORTED; + goto cleanup; + } + + /* Get non-existent data */ + result = (char *)SDL_GetProperty(SDL_GetWindowProperties(window), name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s)", name); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + + /* Set data */ + SDL_SetProperty(SDL_GetWindowProperties(window), name, userdata, NULL, NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,%s)", name, userdata); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + + /* Get data (twice) */ + for (iteration = 1; iteration <= 2; iteration++) { + result = (char *)SDL_GetProperty(SDL_GetWindowProperties(window), + name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s) [iteration %d]", name, iteration); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + } + + /* Set data again twice */ + for (iteration = 1; iteration <= 2; iteration++) { + SDL_SetProperty(SDL_GetWindowProperties(window), name, userdata, NULL, NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,%s) [iteration %d]", name, userdata, iteration); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + } + + /* Get data again */ + result = (char *)SDL_GetProperty(SDL_GetWindowProperties(window), name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s) [again]", name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + + /* Set data with new data */ + SDL_SetProperty(SDL_GetWindowProperties(window), name, userdata2, NULL, NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,%s) [new userdata]", name, userdata2); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, userdata2) == 0, "Validate that userdata2 was not changed, expected: %s, got: %s", referenceUserdata2, userdata2); + + /* Set data with new data again */ + SDL_SetProperty(SDL_GetWindowProperties(window), name, userdata2, NULL, NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,%s) [new userdata again]", name, userdata2); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, userdata2) == 0, "Validate that userdata2 was not changed, expected: %s, got: %s", referenceUserdata2, userdata2); + + /* Get new data */ + result = (char *)SDL_GetProperty(SDL_GetWindowProperties(window), name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s)", name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata2, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + + /* Set data with NULL to clear */ + SDL_SetProperty(SDL_GetWindowProperties(window), name, NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,NULL)", name); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, userdata2) == 0, "Validate that userdata2 was not changed, expected: %s, got: %s", referenceUserdata2, userdata2); + + /* Set data with NULL to clear again */ + SDL_SetProperty(SDL_GetWindowProperties(window), name, NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,NULL) [again]", name); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, userdata2) == 0, "Validate that userdata2 was not changed, expected: %s, got: %s", referenceUserdata2, userdata2); + + /* Get non-existent data */ + result = (char *)SDL_GetProperty(SDL_GetWindowProperties(window), name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s)", name); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + + /* Get non-existent data new name */ + result = (char *)SDL_GetProperty(SDL_GetWindowProperties(window), name2); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s)", name2); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + SDLTest_AssertCheck(SDL_strcmp(referenceName2, name2) == 0, "Validate that name2 was not changed, expected: %s, got: %s", referenceName2, name2); + + /* Set data (again) */ + SDL_SetProperty(SDL_GetWindowProperties(window), name, userdata, NULL, NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,%s) [again, after clear]", name, userdata); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + + /* Get data (again) */ + result = (char *)SDL_GetProperty(SDL_GetWindowProperties(window), name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s) [again, after clear]", name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + + /* Set data with NULL name, valid userdata */ + SDL_SetProperty(SDL_GetWindowProperties(window), NULL, userdata, NULL, NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(name=NULL)"); + checkInvalidParameterError(); + + /* Set data with empty name, valid userdata */ + SDL_SetProperty(SDL_GetWindowProperties(window), "", userdata, NULL, NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(name='')"); + checkInvalidParameterError(); + + /* Set data with NULL name, NULL userdata */ + SDL_SetProperty(SDL_GetWindowProperties(window), NULL, NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(name=NULL,userdata=NULL)"); + checkInvalidParameterError(); + + /* Set data with empty name, NULL userdata */ + SDL_SetProperty(SDL_GetWindowProperties(window), "", NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(name='',userdata=NULL)"); + checkInvalidParameterError(); + + /* Get data with NULL name */ + result = (char *)SDL_GetProperty(SDL_GetWindowProperties(window), NULL); + SDLTest_AssertPass("Call to SDL_GetWindowData(name=NULL)"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + checkInvalidParameterError(); + + /* Get data with empty name */ + result = (char *)SDL_GetProperty(SDL_GetWindowProperties(window), ""); + SDLTest_AssertPass("Call to SDL_GetWindowData(name='')"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + checkInvalidParameterError(); + + /* Clean up */ + destroyVideoSuiteTestWindow(window); + +cleanup: + SDL_free(referenceUserdata); + SDL_free(referenceUserdata2); + SDL_free(userdata); + SDL_free(userdata2); + + return returnValue; +} + +/** + * \brief Tests the functionality of the SDL_WINDOWPOS_CENTERED_DISPLAY along with SDL_WINDOW_FULLSCREEN. + * + * Especially useful when run on a multi-monitor system with different DPI scales per monitor, + * to test that the window size is maintained when moving between monitors. + * + * As the Wayland windowing protocol does not allow application windows to control their position in the + * desktop space, coupled with the general asynchronous nature of Wayland compositors, the positioning + * tests don't work in windowed mode and are unreliable in fullscreen mode, thus are disabled when using + * the Wayland video driver. All that can be done is check that the windows are the expected size. + */ +static int video_setWindowCenteredOnDisplay(void *arg) +{ + SDL_DisplayID *displays; + SDL_Window *window; + const char *title = "video_setWindowCenteredOnDisplay Test Window"; + int x, y, w, h; + int xVariation, yVariation; + int displayNum; + int result; + SDL_Rect display0, display1; + SDL_bool video_driver_is_wayland = SDL_strcmp(SDL_GetCurrentVideoDriver(), "wayland") == 0; + + displays = SDL_GetDisplays(&displayNum); + if (displays) { + + /* Get display bounds */ + result = SDL_GetDisplayBounds(displays[0 % displayNum], &display0); + SDLTest_AssertPass("SDL_GetDisplayBounds()"); + SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0, got: %d", result); + if (result != 0) { + return TEST_ABORTED; + } + + result = SDL_GetDisplayBounds(displays[1 % displayNum], &display1); + SDLTest_AssertPass("SDL_GetDisplayBounds()"); + SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0, got: %d", result); + if (result != 0) { + return TEST_ABORTED; + } + + for (xVariation = 0; xVariation < 2; xVariation++) { + for (yVariation = 0; yVariation < 2; yVariation++) { + int currentX = 0, currentY = 0; + int currentW = 0, currentH = 0; + int expectedX = 0, expectedY = 0; + int currentDisplay; + int expectedDisplay; + SDL_Rect expectedDisplayRect; + + /* xVariation is the display we start on */ + expectedDisplay = displays[xVariation % displayNum]; + x = SDL_WINDOWPOS_CENTERED_DISPLAY(expectedDisplay); + y = SDL_WINDOWPOS_CENTERED_DISPLAY(expectedDisplay); + w = SDLTest_RandomIntegerInRange(640, 800); + h = SDLTest_RandomIntegerInRange(400, 600); + expectedDisplayRect = (xVariation == 0) ? display0 : display1; + expectedX = (expectedDisplayRect.x + ((expectedDisplayRect.w - w) / 2)); + expectedY = (expectedDisplayRect.y + ((expectedDisplayRect.h - h) / 2)); + + window = SDL_CreateWindowWithPosition(title, x, y, w, h, 0); + SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d,%d,SHOWN)", x, y, w, h); + SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL"); + + /* Wayland windows require that a frame be presented before they are fully mapped and visible onscreen. */ + if (video_driver_is_wayland) { + SDL_Renderer *renderer = SDL_CreateRenderer(window, NULL, 0); + + if (renderer) { + SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF); + SDL_RenderClear(renderer); + SDL_RenderPresent(renderer); + + /* Some desktops don't display the window immediately after presentation, + * so delay to give the window time to actually appear on the desktop. + */ + SDL_Delay(100); + } else { + SDLTest_Log("Unable to create a renderer, tests may fail under Wayland"); + } + } + + /* Check the window is centered on the requested display */ + currentDisplay = SDL_GetDisplayForWindow(window); + SDL_GetWindowSize(window, ¤tW, ¤tH); + SDL_GetWindowPosition(window, ¤tX, ¤tY); + + if (!video_driver_is_wayland) { + SDLTest_AssertCheck(currentDisplay == expectedDisplay, "Validate display ID (current: %d, expected: %d)", currentDisplay, expectedDisplay); + } else { + SDLTest_Log("Skipping display ID validation: Wayland driver does not support window positioning"); + } + SDLTest_AssertCheck(currentW == w, "Validate width (current: %d, expected: %d)", currentW, w); + SDLTest_AssertCheck(currentH == h, "Validate height (current: %d, expected: %d)", currentH, h); + if (!video_driver_is_wayland) { + SDLTest_AssertCheck(currentX == expectedX, "Validate x (current: %d, expected: %d)", currentX, expectedX); + SDLTest_AssertCheck(currentY == expectedY, "Validate y (current: %d, expected: %d)", currentY, expectedY); + } else { + SDLTest_Log("Skipping window position validation: Wayland driver does not support window positioning"); + } + + /* Enter fullscreen desktop */ + SDL_SetWindowPosition(window, x, y); + result = SDL_SetWindowFullscreen(window, SDL_TRUE); + SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0, got: %d", result); + + /* Check we are filling the full display */ + currentDisplay = SDL_GetDisplayForWindow(window); + SDL_GetWindowSize(window, ¤tW, ¤tH); + SDL_GetWindowPosition(window, ¤tX, ¤tY); + + if (!video_driver_is_wayland) { + SDLTest_AssertCheck(currentDisplay == expectedDisplay, "Validate display ID (current: %d, expected: %d)", currentDisplay, expectedDisplay); + } else { + SDLTest_Log("Skipping display ID validation: Wayland driver does not support window positioning"); + } + SDLTest_AssertCheck(currentW == expectedDisplayRect.w, "Validate width (current: %d, expected: %d)", currentW, expectedDisplayRect.w); + SDLTest_AssertCheck(currentH == expectedDisplayRect.h, "Validate height (current: %d, expected: %d)", currentH, expectedDisplayRect.h); + if (!video_driver_is_wayland) { + SDLTest_AssertCheck(currentX == expectedDisplayRect.x, "Validate x (current: %d, expected: %d)", currentX, expectedDisplayRect.x); + SDLTest_AssertCheck(currentY == expectedDisplayRect.y, "Validate y (current: %d, expected: %d)", currentY, expectedDisplayRect.y); + } else { + SDLTest_Log("Skipping window position validation: Wayland driver does not support window positioning"); + } + + /* Leave fullscreen desktop */ + result = SDL_SetWindowFullscreen(window, SDL_FALSE); + SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0, got: %d", result); + + /* Check window was restored correctly */ + currentDisplay = SDL_GetDisplayForWindow(window); + SDL_GetWindowSize(window, ¤tW, ¤tH); + SDL_GetWindowPosition(window, ¤tX, ¤tY); + + if (!video_driver_is_wayland) { + SDLTest_AssertCheck(currentDisplay == expectedDisplay, "Validate display index (current: %d, expected: %d)", currentDisplay, expectedDisplay); + } else { + SDLTest_Log("Skipping display ID validation: Wayland driver does not support window positioning"); + } + SDLTest_AssertCheck(currentW == w, "Validate width (current: %d, expected: %d)", currentW, w); + SDLTest_AssertCheck(currentH == h, "Validate height (current: %d, expected: %d)", currentH, h); + if (!video_driver_is_wayland) { + SDLTest_AssertCheck(currentX == expectedX, "Validate x (current: %d, expected: %d)", currentX, expectedX); + SDLTest_AssertCheck(currentY == expectedY, "Validate y (current: %d, expected: %d)", currentY, expectedY); + } else { + SDLTest_Log("Skipping window position validation: Wayland driver does not support window positioning"); + } + + /* Center on display yVariation, and check window properties */ + + expectedDisplay = displays[yVariation % displayNum]; + x = SDL_WINDOWPOS_CENTERED_DISPLAY(expectedDisplay); + y = SDL_WINDOWPOS_CENTERED_DISPLAY(expectedDisplay); + expectedDisplayRect = (yVariation == 0) ? display0 : display1; + expectedX = (expectedDisplayRect.x + ((expectedDisplayRect.w - w) / 2)); + expectedY = (expectedDisplayRect.y + ((expectedDisplayRect.h - h) / 2)); + SDL_SetWindowPosition(window, x, y); + + currentDisplay = SDL_GetDisplayForWindow(window); + SDL_GetWindowSize(window, ¤tW, ¤tH); + SDL_GetWindowPosition(window, ¤tX, ¤tY); + + if (!video_driver_is_wayland) { + SDLTest_AssertCheck(currentDisplay == expectedDisplay, "Validate display ID (current: %d, expected: %d)", currentDisplay, expectedDisplay); + } else { + SDLTest_Log("Skipping display ID validation: Wayland driver does not support window positioning"); + } + SDLTest_AssertCheck(currentW == w, "Validate width (current: %d, expected: %d)", currentW, w); + SDLTest_AssertCheck(currentH == h, "Validate height (current: %d, expected: %d)", currentH, h); + if (!video_driver_is_wayland) { + SDLTest_AssertCheck(currentX == expectedX, "Validate x (current: %d, expected: %d)", currentX, expectedX); + SDLTest_AssertCheck(currentY == expectedY, "Validate y (current: %d, expected: %d)", currentY, expectedY); + } else { + SDLTest_Log("Skipping window position validation: Wayland driver does not support window positioning"); + } + + /* Clean up */ + destroyVideoSuiteTestWindow(window); + } + } + + SDL_free(displays); + } + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Video test cases */ +static const SDLTest_TestCaseReference videoTest1 = { + (SDLTest_TestCaseFp)video_enableDisableScreensaver, "video_enableDisableScreensaver", "Enable and disable screenaver while checking state", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference videoTest2 = { + (SDLTest_TestCaseFp)video_createWindowVariousSizes, "video_createWindowVariousSizes", "Create windows with various sizes", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference videoTest3 = { + (SDLTest_TestCaseFp)video_createWindowVariousFlags, "video_createWindowVariousFlags", "Create windows using various flags", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference videoTest4 = { + (SDLTest_TestCaseFp)video_getWindowFlags, "video_getWindowFlags", "Get window flags set during SDL_CreateWindow", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference videoTest5 = { + (SDLTest_TestCaseFp)video_getFullscreenDisplayModes, "video_getFullscreenDisplayModes", "Use SDL_GetFullscreenDisplayModes function to get number of display modes", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference videoTest6 = { + (SDLTest_TestCaseFp)video_getClosestDisplayModeCurrentResolution, "video_getClosestDisplayModeCurrentResolution", "Use function to get closes match to requested display mode for current resolution", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference videoTest7 = { + (SDLTest_TestCaseFp)video_getClosestDisplayModeRandomResolution, "video_getClosestDisplayModeRandomResolution", "Use function to get closes match to requested display mode for random resolution", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference videoTest8 = { + (SDLTest_TestCaseFp)video_getWindowDisplayMode, "video_getWindowDisplayMode", "Get window display mode", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference videoTest9 = { + (SDLTest_TestCaseFp)video_getWindowDisplayModeNegative, "video_getWindowDisplayModeNegative", "Get window display mode with invalid input", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference videoTest10 = { + (SDLTest_TestCaseFp)video_getSetWindowGrab, "video_getSetWindowGrab", "Checks SDL_GetWindowGrab and SDL_SetWindowGrab positive and negative cases", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference videoTest11 = { + (SDLTest_TestCaseFp)video_getWindowId, "video_getWindowId", "Checks SDL_GetWindowID and SDL_GetWindowFromID", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference videoTest12 = { + (SDLTest_TestCaseFp)video_getWindowPixelFormat, "video_getWindowPixelFormat", "Checks SDL_GetWindowPixelFormat", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference videoTest13 = { + (SDLTest_TestCaseFp)video_getSetWindowPosition, "video_getSetWindowPosition", "Checks SDL_GetWindowPosition and SDL_SetWindowPosition positive and negative cases", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference videoTest14 = { + (SDLTest_TestCaseFp)video_getSetWindowSize, "video_getSetWindowSize", "Checks SDL_GetWindowSize and SDL_SetWindowSize positive and negative cases", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference videoTest15 = { + (SDLTest_TestCaseFp)video_getSetWindowMinimumSize, "video_getSetWindowMinimumSize", "Checks SDL_GetWindowMinimumSize and SDL_SetWindowMinimumSize positive and negative cases", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference videoTest16 = { + (SDLTest_TestCaseFp)video_getSetWindowMaximumSize, "video_getSetWindowMaximumSize", "Checks SDL_GetWindowMaximumSize and SDL_SetWindowMaximumSize positive and negative cases", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference videoTest17 = { + (SDLTest_TestCaseFp)video_getSetWindowData, "video_getSetWindowData", "Checks SDL_SetWindowData and SDL_GetWindowData positive and negative cases", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference videoTest18 = { + (SDLTest_TestCaseFp)video_setWindowCenteredOnDisplay, "video_setWindowCenteredOnDisplay", "Checks using SDL_WINDOWPOS_CENTERED_DISPLAY centers the window on a display", TEST_ENABLED +}; + +/* Sequence of Video test cases */ +static const SDLTest_TestCaseReference *videoTests[] = { + &videoTest1, &videoTest2, &videoTest3, &videoTest4, &videoTest5, &videoTest6, + &videoTest7, &videoTest8, &videoTest9, &videoTest10, &videoTest11, &videoTest12, + &videoTest13, &videoTest14, &videoTest15, &videoTest16, &videoTest17, + &videoTest18, NULL +}; + +/* Video test suite (global) */ +SDLTest_TestSuiteReference videoTestSuite = { + "Video", + NULL, + videoTests, + NULL +}; diff --git a/vendor/sdl-3.0.0/test/testbounds.c b/vendor/sdl-3.0.0/test/testbounds.c new file mode 100644 index 0000000..b16a54f --- /dev/null +++ b/vendor/sdl-3.0.0/test/testbounds.c @@ -0,0 +1,56 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +#include +#include +#include + +int main(int argc, char **argv) +{ + SDL_DisplayID *displays; + int i; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_Log("SDL_Init(SDL_INIT_VIDEO) failed: %s", SDL_GetError()); + return 1; + } + + displays = SDL_GetDisplays(NULL); + if (displays) { + for (i = 0; displays[i]; i++) { + SDL_Rect bounds = { -1, -1, -1, -1 }, usable = { -1, -1, -1, -1 }; + SDL_GetDisplayBounds(displays[i], &bounds); + SDL_GetDisplayUsableBounds(displays[i], &usable); + SDL_Log("Display #%d ('%s'): bounds={(%d,%d),%dx%d}, usable={(%d,%d),%dx%d}", + i, SDL_GetDisplayName(displays[i]), + bounds.x, bounds.y, bounds.w, bounds.h, + usable.x, usable.y, usable.w, usable.h); + } + SDL_free(displays); + } + + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testcontroller.c b/vendor/sdl-3.0.0/test/testcontroller.c new file mode 100644 index 0000000..dd4b981 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testcontroller.c @@ -0,0 +1,2029 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Simple program to test the SDL controller routines */ + +#include +#include +#include +#include + +#include "gamepadutils.h" +#include "testutils.h" + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#if 0 +#define DEBUG_AXIS_MAPPING +#endif + +#define TITLE_HEIGHT 48 +#define PANEL_SPACING 25 +#define PANEL_WIDTH 250 +#define MINIMUM_BUTTON_WIDTH 96 +#define BUTTON_MARGIN 16 +#define BUTTON_PADDING 12 +#define GAMEPAD_WIDTH 512 +#define GAMEPAD_HEIGHT 480 + +#define SCREEN_WIDTH (PANEL_WIDTH + PANEL_SPACING + GAMEPAD_WIDTH + PANEL_SPACING + PANEL_WIDTH) +#define SCREEN_HEIGHT (TITLE_HEIGHT + GAMEPAD_HEIGHT) + +typedef struct +{ + SDL_bool m_bMoving; + int m_nLastValue; + int m_nStartingValue; + int m_nFarthestValue; +} AxisState; + +typedef struct +{ + SDL_JoystickID id; + + SDL_Joystick *joystick; + int num_axes; + AxisState *axis_state; + + SDL_Gamepad *gamepad; + char *mapping; + SDL_bool has_bindings; + + int trigger_effect; +} Controller; + +static SDL_Window *window = NULL; +static SDL_Renderer *screen = NULL; +static ControllerDisplayMode display_mode = CONTROLLER_MODE_TESTING; +static GamepadImage *image = NULL; +static GamepadDisplay *gamepad_elements = NULL; +static GamepadTypeDisplay *gamepad_type = NULL; +static JoystickDisplay *joystick_elements = NULL; +static GamepadButton *setup_mapping_button = NULL; +static GamepadButton *done_mapping_button = NULL; +static GamepadButton *cancel_button = NULL; +static GamepadButton *clear_button = NULL; +static GamepadButton *copy_button = NULL; +static GamepadButton *paste_button = NULL; +static char *backup_mapping = NULL; +static SDL_bool done = SDL_FALSE; +static SDL_bool set_LED = SDL_FALSE; +static int num_controllers = 0; +static Controller *controllers; +static Controller *controller; +static SDL_JoystickID mapping_controller = 0; +static int binding_element = SDL_GAMEPAD_ELEMENT_INVALID; +static int last_binding_element = SDL_GAMEPAD_ELEMENT_INVALID; +static SDL_bool binding_flow = SDL_FALSE; +static Uint64 binding_advance_time = 0; +static SDL_FRect title_area; +static SDL_bool title_highlighted; +static SDL_bool title_pressed; +static SDL_FRect type_area; +static SDL_bool type_highlighted; +static SDL_bool type_pressed; +static char *controller_name; +static SDL_Joystick *virtual_joystick = NULL; +static SDL_GamepadAxis virtual_axis_active = SDL_GAMEPAD_AXIS_INVALID; +static float virtual_axis_start_x; +static float virtual_axis_start_y; +static SDL_GamepadButton virtual_button_active = SDL_GAMEPAD_BUTTON_INVALID; + +static int s_arrBindingOrder[] = { + /* Standard sequence */ + SDL_GAMEPAD_BUTTON_A, + SDL_GAMEPAD_BUTTON_B, + SDL_GAMEPAD_BUTTON_X, + SDL_GAMEPAD_BUTTON_Y, + SDL_GAMEPAD_BUTTON_DPAD_LEFT, + SDL_GAMEPAD_BUTTON_DPAD_RIGHT, + SDL_GAMEPAD_BUTTON_DPAD_UP, + SDL_GAMEPAD_BUTTON_DPAD_DOWN, + SDL_GAMEPAD_ELEMENT_AXIS_LEFTX_NEGATIVE, + SDL_GAMEPAD_ELEMENT_AXIS_LEFTX_POSITIVE, + SDL_GAMEPAD_ELEMENT_AXIS_LEFTY_NEGATIVE, + SDL_GAMEPAD_ELEMENT_AXIS_LEFTY_POSITIVE, + SDL_GAMEPAD_BUTTON_LEFT_STICK, + SDL_GAMEPAD_ELEMENT_AXIS_RIGHTX_NEGATIVE, + SDL_GAMEPAD_ELEMENT_AXIS_RIGHTX_POSITIVE, + SDL_GAMEPAD_ELEMENT_AXIS_RIGHTY_NEGATIVE, + SDL_GAMEPAD_ELEMENT_AXIS_RIGHTY_POSITIVE, + SDL_GAMEPAD_BUTTON_RIGHT_STICK, + SDL_GAMEPAD_BUTTON_LEFT_SHOULDER, + SDL_GAMEPAD_ELEMENT_AXIS_LEFT_TRIGGER, + SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER, + SDL_GAMEPAD_ELEMENT_AXIS_RIGHT_TRIGGER, + SDL_GAMEPAD_BUTTON_BACK, + SDL_GAMEPAD_BUTTON_START, + SDL_GAMEPAD_BUTTON_GUIDE, + SDL_GAMEPAD_BUTTON_MISC1, + SDL_GAMEPAD_ELEMENT_INVALID, + + /* Paddle sequence */ + SDL_GAMEPAD_BUTTON_RIGHT_PADDLE1, + SDL_GAMEPAD_BUTTON_LEFT_PADDLE1, + SDL_GAMEPAD_BUTTON_RIGHT_PADDLE2, + SDL_GAMEPAD_BUTTON_LEFT_PADDLE2, + SDL_GAMEPAD_ELEMENT_INVALID, +}; + + +static const char *GetSensorName(SDL_SensorType sensor) +{ + switch (sensor) { + case SDL_SENSOR_ACCEL: + return "accelerometer"; + case SDL_SENSOR_GYRO: + return "gyro"; + case SDL_SENSOR_ACCEL_L: + return "accelerometer (L)"; + case SDL_SENSOR_GYRO_L: + return "gyro (L)"; + case SDL_SENSOR_ACCEL_R: + return "accelerometer (R)"; + case SDL_SENSOR_GYRO_R: + return "gyro (R)"; + default: + return "UNKNOWN"; + } +} + +/* PS5 trigger effect documentation: + https://controllers.fandom.com/wiki/Sony_DualSense#FFB_Trigger_Modes +*/ +typedef struct +{ + Uint8 ucEnableBits1; /* 0 */ + Uint8 ucEnableBits2; /* 1 */ + Uint8 ucRumbleRight; /* 2 */ + Uint8 ucRumbleLeft; /* 3 */ + Uint8 ucHeadphoneVolume; /* 4 */ + Uint8 ucSpeakerVolume; /* 5 */ + Uint8 ucMicrophoneVolume; /* 6 */ + Uint8 ucAudioEnableBits; /* 7 */ + Uint8 ucMicLightMode; /* 8 */ + Uint8 ucAudioMuteBits; /* 9 */ + Uint8 rgucRightTriggerEffect[11]; /* 10 */ + Uint8 rgucLeftTriggerEffect[11]; /* 21 */ + Uint8 rgucUnknown1[6]; /* 32 */ + Uint8 ucLedFlags; /* 38 */ + Uint8 rgucUnknown2[2]; /* 39 */ + Uint8 ucLedAnim; /* 41 */ + Uint8 ucLedBrightness; /* 42 */ + Uint8 ucPadLights; /* 43 */ + Uint8 ucLedRed; /* 44 */ + Uint8 ucLedGreen; /* 45 */ + Uint8 ucLedBlue; /* 46 */ +} DS5EffectsState_t; + +static void CyclePS5TriggerEffect(Controller *device) +{ + DS5EffectsState_t state; + + Uint8 effects[3][11] = { + /* Clear trigger effect */ + { 0x05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + /* Constant resistance across entire trigger pull */ + { 0x01, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0 }, + /* Resistance and vibration when trigger is pulled */ + { 0x06, 15, 63, 128, 0, 0, 0, 0, 0, 0, 0 }, + }; + + device->trigger_effect = (device->trigger_effect + 1) % SDL_arraysize(effects); + + SDL_zero(state); + state.ucEnableBits1 |= (0x04 | 0x08); /* Modify right and left trigger effect respectively */ + SDL_memcpy(state.rgucRightTriggerEffect, effects[device->trigger_effect], sizeof(effects[0])); + SDL_memcpy(state.rgucLeftTriggerEffect, effects[device->trigger_effect], sizeof(effects[0])); + SDL_SendGamepadEffect(device->gamepad, &state, sizeof(state)); +} + +static void ClearButtonHighlights(void) +{ + title_highlighted = SDL_FALSE; + title_pressed = SDL_FALSE; + + type_highlighted = SDL_FALSE; + type_pressed = SDL_FALSE; + + ClearGamepadImage(image); + SetGamepadDisplayHighlight(gamepad_elements, SDL_GAMEPAD_ELEMENT_INVALID, SDL_FALSE); + SetGamepadTypeDisplayHighlight(gamepad_type, SDL_GAMEPAD_TYPE_UNSELECTED, SDL_FALSE); + SetGamepadButtonHighlight(setup_mapping_button, SDL_FALSE, SDL_FALSE); + SetGamepadButtonHighlight(done_mapping_button, SDL_FALSE, SDL_FALSE); + SetGamepadButtonHighlight(cancel_button, SDL_FALSE, SDL_FALSE); + SetGamepadButtonHighlight(clear_button, SDL_FALSE, SDL_FALSE); + SetGamepadButtonHighlight(copy_button, SDL_FALSE, SDL_FALSE); + SetGamepadButtonHighlight(paste_button, SDL_FALSE, SDL_FALSE); +} + +static void UpdateButtonHighlights(float x, float y, SDL_bool button_down) +{ + ClearButtonHighlights(); + + if (display_mode == CONTROLLER_MODE_TESTING) { + SetGamepadButtonHighlight(setup_mapping_button, GamepadButtonContains(setup_mapping_button, x, y), button_down); + } else if (display_mode == CONTROLLER_MODE_BINDING) { + SDL_FPoint point; + int gamepad_highlight_element = SDL_GAMEPAD_ELEMENT_INVALID; + char *joystick_highlight_element; + + point.x = x; + point.y = y; + if (SDL_PointInRectFloat(&point, &title_area)) { + title_highlighted = SDL_TRUE; + title_pressed = button_down; + } else { + title_highlighted = SDL_FALSE; + title_pressed = SDL_FALSE; + } + + if (SDL_PointInRectFloat(&point, &type_area)) { + type_highlighted = SDL_TRUE; + type_pressed = button_down; + } else { + type_highlighted = SDL_FALSE; + type_pressed = SDL_FALSE; + } + + if (controller->joystick != virtual_joystick) { + gamepad_highlight_element = GetGamepadImageElementAt(image, x, y); + } + if (gamepad_highlight_element == SDL_GAMEPAD_ELEMENT_INVALID) { + gamepad_highlight_element = GetGamepadDisplayElementAt(gamepad_elements, controller->gamepad, x, y); + } + SetGamepadDisplayHighlight(gamepad_elements, gamepad_highlight_element, button_down); + + if (binding_element == SDL_GAMEPAD_ELEMENT_TYPE) { + int gamepad_highlight_type = GetGamepadTypeDisplayAt(gamepad_type, x, y); + SetGamepadTypeDisplayHighlight(gamepad_type, gamepad_highlight_type, button_down); + } + + joystick_highlight_element = GetJoystickDisplayElementAt(joystick_elements, controller->joystick, x, y); + SetJoystickDisplayHighlight(joystick_elements, joystick_highlight_element, button_down); + SDL_free(joystick_highlight_element); + + SetGamepadButtonHighlight(done_mapping_button, GamepadButtonContains(done_mapping_button, x, y), button_down); + SetGamepadButtonHighlight(cancel_button, GamepadButtonContains(cancel_button, x, y), button_down); + SetGamepadButtonHighlight(clear_button, GamepadButtonContains(clear_button, x, y), button_down); + SetGamepadButtonHighlight(copy_button, GamepadButtonContains(copy_button, x, y), button_down); + SetGamepadButtonHighlight(paste_button, GamepadButtonContains(paste_button, x, y), button_down); + } +} + +static int StandardizeAxisValue(int nValue) +{ + if (nValue > SDL_JOYSTICK_AXIS_MAX / 2) { + return SDL_JOYSTICK_AXIS_MAX; + } else if (nValue < SDL_JOYSTICK_AXIS_MIN / 2) { + return SDL_JOYSTICK_AXIS_MIN; + } else { + return 0; + } +} + +static void RefreshControllerName(void) +{ + const char *name = NULL; + + SDL_free(controller_name); + controller_name = NULL; + + if (controller) { + if (controller->gamepad) { + name = SDL_GetGamepadName(controller->gamepad); + } else { + name = SDL_GetJoystickName(controller->joystick); + } + } + + SDL_free(controller_name); + if (name) { + controller_name = SDL_strdup(name); + } else { + controller_name = SDL_strdup(""); + } +} + +static void SetAndFreeGamepadMapping(char *mapping) +{ + SDL_SetGamepadMapping(controller->id, mapping); + SDL_free(mapping); +} + +static void SetCurrentBindingElement(int element, SDL_bool flow) +{ + int i; + + if (binding_element == SDL_GAMEPAD_ELEMENT_NAME) { + RefreshControllerName(); + } + + if (element == SDL_GAMEPAD_ELEMENT_INVALID) { + last_binding_element = SDL_GAMEPAD_ELEMENT_INVALID; + } else { + last_binding_element = binding_element; + } + binding_element = element; + binding_flow = flow || (element == SDL_GAMEPAD_BUTTON_A); + binding_advance_time = 0; + + for (i = 0; i < controller->num_axes; ++i) { + controller->axis_state[i].m_nFarthestValue = controller->axis_state[i].m_nStartingValue; + } + + SetGamepadDisplaySelected(gamepad_elements, element); +} + +static void SetNextBindingElement(void) +{ + int i; + + if (binding_element == SDL_GAMEPAD_ELEMENT_INVALID) { + return; + } + + for (i = 0; i < SDL_arraysize(s_arrBindingOrder); ++i) { + if (binding_element == s_arrBindingOrder[i]) { + SetCurrentBindingElement(s_arrBindingOrder[i + 1], SDL_TRUE); + return; + } + } + SetCurrentBindingElement(SDL_GAMEPAD_ELEMENT_INVALID, SDL_FALSE); +} + +static void SetPrevBindingElement(void) +{ + int i; + + if (binding_element == SDL_GAMEPAD_ELEMENT_INVALID) { + return; + } + + for (i = 1; i < SDL_arraysize(s_arrBindingOrder); ++i) { + if (binding_element == s_arrBindingOrder[i]) { + SetCurrentBindingElement(s_arrBindingOrder[i - 1], SDL_TRUE); + return; + } + } + SetCurrentBindingElement(SDL_GAMEPAD_ELEMENT_INVALID, SDL_FALSE); +} + +static void StopBinding(void) +{ + SetCurrentBindingElement(SDL_GAMEPAD_ELEMENT_INVALID, SDL_FALSE); +} + +typedef struct +{ + int axis; + int direction; +} AxisInfo; + +static SDL_bool ParseAxisInfo(const char *description, AxisInfo *info) +{ + if (!description) { + return SDL_FALSE; + } + + if (*description == '-') { + info->direction = -1; + ++description; + } else if (*description == '+') { + info->direction = 1; + ++description; + } else { + info->direction = 0; + } + + if (description[0] == 'a' && SDL_isdigit(description[1])) { + ++description; + info->axis = SDL_atoi(description); + return SDL_TRUE; + } + return SDL_FALSE; +} + +static void CommitBindingElement(const char *binding, SDL_bool force) +{ + char *mapping; + int direction = 1; + SDL_bool ignore_binding = SDL_FALSE; + + if (binding_element == SDL_GAMEPAD_ELEMENT_INVALID) { + return; + } + + if (controller->mapping) { + mapping = SDL_strdup(controller->mapping); + } else { + mapping = NULL; + } + + /* If the controller generates multiple events for a single element, pick the best one */ + if (!force && binding_advance_time) { + char *current = GetElementBinding(mapping, binding_element); + SDL_bool native_button = (binding_element < SDL_GAMEPAD_BUTTON_MAX); + SDL_bool native_axis = (binding_element >= SDL_GAMEPAD_BUTTON_MAX && + binding_element <= SDL_GAMEPAD_ELEMENT_AXIS_MAX); + SDL_bool native_trigger = (binding_element == SDL_GAMEPAD_ELEMENT_AXIS_LEFT_TRIGGER || + binding_element == SDL_GAMEPAD_ELEMENT_AXIS_RIGHT_TRIGGER); + SDL_bool native_dpad = (binding_element == SDL_GAMEPAD_BUTTON_DPAD_UP || + binding_element == SDL_GAMEPAD_BUTTON_DPAD_DOWN || + binding_element == SDL_GAMEPAD_BUTTON_DPAD_LEFT || + binding_element == SDL_GAMEPAD_BUTTON_DPAD_RIGHT); + + if (native_button) { + SDL_bool current_button = (current && *current == 'b'); + SDL_bool proposed_button = (binding && *binding == 'b'); + if (current_button && !proposed_button) { + ignore_binding = SDL_TRUE; + } + /* Use the lower index button (we map from lower to higher button index) */ + if (current_button && proposed_button && current[1] < binding[1]) { + ignore_binding = SDL_TRUE; + } + } + if (native_axis) { + AxisInfo current_axis_info; + AxisInfo proposed_axis_info; + SDL_bool current_axis = ParseAxisInfo(current, ¤t_axis_info); + SDL_bool proposed_axis = ParseAxisInfo(binding, &proposed_axis_info); + + if (current_axis) { + /* Ignore this unless the proposed binding extends the existing axis */ + ignore_binding = SDL_TRUE; + + if (native_trigger && + ((*current == '-' && *binding == '+' && + SDL_strcmp(current + 1, binding + 1) == 0) || + (*current == '+' && *binding == '-' && + SDL_strcmp(current + 1, binding + 1) == 0))) { + /* Merge two half axes into a whole axis for a trigger */ + ++binding; + ignore_binding = SDL_FALSE; + } + + /* Use the lower index axis (we map from lower to higher axis index) */ + if (proposed_axis && proposed_axis_info.axis < current_axis_info.axis) { + ignore_binding = SDL_FALSE; + } + } + } + if (native_dpad) { + SDL_bool current_hat = (current && *current == 'h'); + SDL_bool proposed_hat = (binding && *binding == 'h'); + if (current_hat && !proposed_hat) { + ignore_binding = SDL_TRUE; + } + /* Use the lower index hat (we map from lower to higher hat index) */ + if (current_hat && proposed_hat && current[1] < binding[1]) { + ignore_binding = SDL_TRUE; + } + } + SDL_free(current); + } + + if (!ignore_binding && binding_flow && !force) { + int existing = GetElementForBinding(mapping, binding); + if (existing != SDL_GAMEPAD_ELEMENT_INVALID) { + if (existing == SDL_GAMEPAD_BUTTON_A) { + if (binding_element == SDL_GAMEPAD_BUTTON_A) { + /* Just move on to the next one */ + ignore_binding = SDL_TRUE; + SetNextBindingElement(); + } else { + /* Clear the current binding and move to the next one */ + binding = NULL; + direction = 1; + force = SDL_TRUE; + } + } else if (existing == SDL_GAMEPAD_BUTTON_B) { + if (binding_element != SDL_GAMEPAD_BUTTON_A && + last_binding_element != SDL_GAMEPAD_BUTTON_A) { + /* Clear the current binding and move to the previous one */ + binding = NULL; + direction = -1; + force = SDL_TRUE; + } + } else if (existing == binding_element) { + /* We're rebinding the same thing, just move to the next one */ + ignore_binding = SDL_TRUE; + SetNextBindingElement(); + } else if (binding_element != SDL_GAMEPAD_BUTTON_A && + binding_element != SDL_GAMEPAD_BUTTON_B) { + ignore_binding = SDL_TRUE; + } + } + } + + if (ignore_binding) { + SDL_free(mapping); + return; + } + + mapping = ClearMappingBinding(mapping, binding); + mapping = SetElementBinding(mapping, binding_element, binding); + SetAndFreeGamepadMapping(mapping); + + if (force) { + if (binding_flow) { + if (direction > 0) { + SetNextBindingElement(); + } else if (direction < 0) { + SetPrevBindingElement(); + } + } else { + StopBinding(); + } + } else { + /* Wait to see if any more bindings come in */ + binding_advance_time = SDL_GetTicks() + 30; + } +} + +static void ClearBinding(void) +{ + CommitBindingElement(NULL, SDL_TRUE); +} + +static void SetDisplayMode(ControllerDisplayMode mode) +{ + float x, y; + Uint32 button_state; + + if (mode == CONTROLLER_MODE_BINDING) { + /* Make a backup of the current mapping */ + if (controller->mapping) { + backup_mapping = SDL_strdup(controller->mapping); + } + mapping_controller = controller->id; + if (MappingHasBindings(backup_mapping)) { + SetCurrentBindingElement(SDL_GAMEPAD_ELEMENT_INVALID, SDL_FALSE); + } else { + SetCurrentBindingElement(SDL_GAMEPAD_BUTTON_A, SDL_TRUE); + } + } else { + if (backup_mapping) { + SDL_free(backup_mapping); + backup_mapping = NULL; + } + mapping_controller = 0; + StopBinding(); + } + + display_mode = mode; + SetGamepadImageDisplayMode(image, mode); + SetGamepadDisplayDisplayMode(gamepad_elements, mode); + + button_state = SDL_GetMouseState(&x, &y); + SDL_RenderCoordinatesFromWindow(screen, x, y, &x, &y); + UpdateButtonHighlights(x, y, button_state ? SDL_TRUE : SDL_FALSE); +} + +static void CancelMapping(void) +{ + SetAndFreeGamepadMapping(backup_mapping); + backup_mapping = NULL; + + SetDisplayMode(CONTROLLER_MODE_TESTING); +} + +static void ClearMapping(void) +{ + SetAndFreeGamepadMapping(NULL); + SetCurrentBindingElement(SDL_GAMEPAD_ELEMENT_INVALID, SDL_FALSE); +} + +static void CopyMapping(void) +{ + if (controller && controller->mapping) { + SDL_SetClipboardText(controller->mapping); + } +} + +static void PasteMapping(void) +{ + if (controller) { + char *mapping = SDL_GetClipboardText(); + if (MappingHasBindings(mapping)) { + StopBinding(); + SetAndFreeGamepadMapping(mapping); + RefreshControllerName(); + } else { + /* Not a valid mapping, ignore it */ + SDL_free(mapping); + } + } +} + +static void CommitControllerName(void) +{ + char *mapping = NULL; + + if (controller->mapping) { + mapping = SDL_strdup(controller->mapping); + } else { + mapping = NULL; + } + mapping = SetMappingName(mapping, controller_name); + SetAndFreeGamepadMapping(mapping); +} + +static void AddControllerNameText(const char *text) +{ + size_t current_length = (controller_name ? SDL_strlen(controller_name) : 0); + size_t text_length = SDL_strlen(text); + size_t size = current_length + text_length + 1; + char *name = (char *)SDL_realloc(controller_name, size); + if (name) { + SDL_memcpy(&name[current_length], text, text_length + 1); + controller_name = name; + } + CommitControllerName(); +} + +static void BackspaceControllerName(void) +{ + size_t length = (controller_name ? SDL_strlen(controller_name) : 0); + if (length > 0) { + controller_name[length - 1] = '\0'; + } + CommitControllerName(); +} + +static void ClearControllerName(void) +{ + if (controller_name) { + *controller_name = '\0'; + } + CommitControllerName(); +} + +static void CopyControllerName(void) +{ + SDL_SetClipboardText(controller_name); +} + +static void PasteControllerName(void) +{ + SDL_free(controller_name); + controller_name = SDL_GetClipboardText(); + CommitControllerName(); +} + +static void CommitGamepadType(SDL_GamepadType type) +{ + char *mapping = NULL; + + if (controller->mapping) { + mapping = SDL_strdup(controller->mapping); + } else { + mapping = NULL; + } + mapping = SetMappingType(mapping, type); + SetAndFreeGamepadMapping(mapping); +} + +static const char *GetBindingInstruction(void) +{ + switch (binding_element) { + case SDL_GAMEPAD_ELEMENT_INVALID: + return "Select an element to bind from the list on the left"; + case SDL_GAMEPAD_BUTTON_A: + if (GetGamepadImageFaceStyle(image) == GAMEPAD_IMAGE_FACE_SONY) { + return "Press the Cross (X) button"; + } else { + return "Press the A button"; + } + case SDL_GAMEPAD_BUTTON_B: + if (GetGamepadImageFaceStyle(image) == GAMEPAD_IMAGE_FACE_SONY) { + return "Press the Circle button"; + } else { + return "Press the B button"; + } + case SDL_GAMEPAD_BUTTON_X: + if (GetGamepadImageFaceStyle(image) == GAMEPAD_IMAGE_FACE_SONY) { + return "Press the Square button"; + } else { + return "Press the X button"; + } + case SDL_GAMEPAD_BUTTON_Y: + if (GetGamepadImageFaceStyle(image) == GAMEPAD_IMAGE_FACE_SONY) { + return "Press the Triangle button"; + } else { + return "Press the Y button"; + } + case SDL_GAMEPAD_BUTTON_BACK: + return "Press the left center button (Back/View/Share)"; + case SDL_GAMEPAD_BUTTON_GUIDE: + return "Press the center button (Home/Guide)"; + case SDL_GAMEPAD_BUTTON_START: + return "Press the right center button (Start/Menu/Options)"; + case SDL_GAMEPAD_BUTTON_LEFT_STICK: + return "Press the left thumbstick button (LSB/L3)"; + case SDL_GAMEPAD_BUTTON_RIGHT_STICK: + return "Press the right thumbstick button (RSB/R3)"; + case SDL_GAMEPAD_BUTTON_LEFT_SHOULDER: + return "Press the left shoulder button (LB/L1)"; + case SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER: + return "Press the right shoulder button (RB/R1)"; + case SDL_GAMEPAD_BUTTON_DPAD_UP: + return "Press the D-Pad up"; + case SDL_GAMEPAD_BUTTON_DPAD_DOWN: + return "Press the D-Pad down"; + case SDL_GAMEPAD_BUTTON_DPAD_LEFT: + return "Press the D-Pad left"; + case SDL_GAMEPAD_BUTTON_DPAD_RIGHT: + return "Press the D-Pad right"; + case SDL_GAMEPAD_BUTTON_MISC1: + return "Press the bottom center button (Share/Capture)"; + case SDL_GAMEPAD_BUTTON_RIGHT_PADDLE1: + return "Press the upper paddle under your right hand"; + case SDL_GAMEPAD_BUTTON_LEFT_PADDLE1: + return "Press the upper paddle under your left hand"; + case SDL_GAMEPAD_BUTTON_RIGHT_PADDLE2: + return "Press the lower paddle under your right hand"; + case SDL_GAMEPAD_BUTTON_LEFT_PADDLE2: + return "Press the lower paddle under your left hand"; + case SDL_GAMEPAD_BUTTON_TOUCHPAD: + return "Press down on the touchpad"; + case SDL_GAMEPAD_ELEMENT_AXIS_LEFTX_NEGATIVE: + return "Move the left thumbstick to the left"; + case SDL_GAMEPAD_ELEMENT_AXIS_LEFTX_POSITIVE: + return "Move the left thumbstick to the right"; + case SDL_GAMEPAD_ELEMENT_AXIS_LEFTY_NEGATIVE: + return "Move the left thumbstick up"; + case SDL_GAMEPAD_ELEMENT_AXIS_LEFTY_POSITIVE: + return "Move the left thumbstick down"; + case SDL_GAMEPAD_ELEMENT_AXIS_RIGHTX_NEGATIVE: + return "Move the right thumbstick to the left"; + case SDL_GAMEPAD_ELEMENT_AXIS_RIGHTX_POSITIVE: + return "Move the right thumbstick to the right"; + case SDL_GAMEPAD_ELEMENT_AXIS_RIGHTY_NEGATIVE: + return "Move the right thumbstick up"; + case SDL_GAMEPAD_ELEMENT_AXIS_RIGHTY_POSITIVE: + return "Move the right thumbstick down"; + case SDL_GAMEPAD_ELEMENT_AXIS_LEFT_TRIGGER: + return "Pull the left trigger (LT/L2)"; + case SDL_GAMEPAD_ELEMENT_AXIS_RIGHT_TRIGGER: + return "Pull the right trigger (RT/R2)"; + case SDL_GAMEPAD_ELEMENT_NAME: + return "Type the name of your controller"; + case SDL_GAMEPAD_ELEMENT_TYPE: + return "Select the type of your controller"; + default: + return ""; + } +} + +static int FindController(SDL_JoystickID id) +{ + int i; + + for (i = 0; i < num_controllers; ++i) { + if (id == controllers[i].id) { + return i; + } + } + return -1; +} + +static void SetController(SDL_JoystickID id) +{ + int i = FindController(id); + + if (i < 0 && num_controllers > 0) { + i = 0; + } + + if (i >= 0) { + controller = &controllers[i]; + } else { + controller = NULL; + } + + RefreshControllerName(); +} + +static void AddController(SDL_JoystickID id, SDL_bool verbose) +{ + Controller *new_controllers; + Controller *new_controller; + SDL_Joystick *joystick; + + if (FindController(id) >= 0) { + /* We already have this controller */ + return; + } + + new_controllers = (Controller *)SDL_realloc(controllers, (num_controllers + 1) * sizeof(*controllers)); + if (new_controllers == NULL) { + return; + } + + controller = NULL; + controllers = new_controllers; + new_controller = &new_controllers[num_controllers++]; + SDL_zerop(new_controller); + new_controller->id = id; + + new_controller->joystick = SDL_OpenJoystick(id); + new_controller->num_axes = SDL_GetNumJoystickAxes(new_controller->joystick); + new_controller->axis_state = (AxisState *)SDL_calloc(new_controller->num_axes, sizeof(*new_controller->axis_state)); + + joystick = new_controller->joystick; + if (joystick) { + if (verbose && !SDL_IsGamepad(id)) { + const char *name = SDL_GetJoystickName(new_controller->joystick); + const char *path = SDL_GetJoystickPath(new_controller->joystick); + SDL_Log("Opened joystick %s%s%s\n", name, path ? ", " : "", path ? path : ""); + } + } else { + SDL_Log("Couldn't open joystick: %s", SDL_GetError()); + } + + if (mapping_controller) { + SetController(mapping_controller); + } else { + SetController(id); + } +} + +static void DelController(SDL_JoystickID id) +{ + int i = FindController(id); + + if (i < 0) { + return; + } + + if (display_mode == CONTROLLER_MODE_BINDING && id == controller->id) { + SetDisplayMode(CONTROLLER_MODE_TESTING); + } + + /* Reset trigger state */ + if (controllers[i].trigger_effect != 0) { + controllers[i].trigger_effect = -1; + CyclePS5TriggerEffect(&controllers[i]); + } + SDL_assert(controllers[i].gamepad == NULL); + if (controllers[i].axis_state) { + SDL_free(controllers[i].axis_state); + } + if (controllers[i].joystick) { + SDL_CloseJoystick(controllers[i].joystick); + } + + --num_controllers; + if (i < num_controllers) { + SDL_memcpy(&controllers[i], &controllers[i + 1], (num_controllers - i) * sizeof(*controllers)); + } + + if (mapping_controller) { + SetController(mapping_controller); + } else { + SetController(id); + } +} + +static void HandleGamepadRemapped(SDL_JoystickID id) +{ + char *mapping; + int i = FindController(id); + + SDL_assert(i >= 0); + if (i < 0) { + return; + } + + if (!controllers[i].gamepad) { + /* Failed to open this controller */ + return; + } + + /* Get the current mapping */ + mapping = SDL_GetGamepadMapping(controllers[i].gamepad); + + /* Make sure the mapping has a valid name */ + if (mapping && !MappingHasName(mapping)) { + mapping = SetMappingName(mapping, SDL_GetJoystickName(controllers[i].joystick)); + } + + SDL_free(controllers[i].mapping); + controllers[i].mapping = mapping; + controllers[i].has_bindings = MappingHasBindings(mapping); +} + +static void HandleGamepadAdded(SDL_JoystickID id, SDL_bool verbose) +{ + SDL_Gamepad *gamepad; + Uint16 firmware_version; + SDL_SensorType sensors[] = { + SDL_SENSOR_ACCEL, + SDL_SENSOR_GYRO, + SDL_SENSOR_ACCEL_L, + SDL_SENSOR_GYRO_L, + SDL_SENSOR_ACCEL_R, + SDL_SENSOR_GYRO_R + }; + int i; + + i = FindController(id); + + SDL_assert(i >= 0); + if (i < 0) { + return; + } + + SDL_assert(!controllers[i].gamepad); + controllers[i].gamepad = SDL_OpenGamepad(id); + + gamepad = controllers[i].gamepad; + if (gamepad) { + if (verbose) { + const char *name = SDL_GetGamepadName(gamepad); + const char *path = SDL_GetGamepadPath(gamepad); + SDL_Log("Opened gamepad %s%s%s\n", name, path ? ", " : "", path ? path : ""); + + firmware_version = SDL_GetGamepadFirmwareVersion(gamepad); + if (firmware_version) { + SDL_Log("Firmware version: 0x%x (%d)\n", firmware_version, firmware_version); + } + + if (SDL_GamepadHasRumble(gamepad)) { + SDL_Log("Rumble supported"); + } + + if (SDL_GamepadHasRumbleTriggers(gamepad)) { + SDL_Log("Trigger rumble supported"); + } + } + + for (i = 0; i < SDL_arraysize(sensors); ++i) { + SDL_SensorType sensor = sensors[i]; + + if (SDL_GamepadHasSensor(gamepad, sensor)) { + if (verbose) { + SDL_Log("Enabling %s at %.2f Hz\n", GetSensorName(sensor), SDL_GetGamepadSensorDataRate(gamepad, sensor)); + } + SDL_SetGamepadSensorEnabled(gamepad, sensor, SDL_TRUE); + } + } + } else { + SDL_Log("Couldn't open gamepad: %s", SDL_GetError()); + } + + HandleGamepadRemapped(id); +} + +static void HandleGamepadRemoved(SDL_JoystickID id) +{ + int i = FindController(id); + + SDL_assert(i >= 0); + if (i < 0) { + return; + } + + if (controllers[i].mapping) { + SDL_free(controllers[i].mapping); + controllers[i].mapping = NULL; + } + if (controllers[i].gamepad) { + SDL_CloseGamepad(controllers[i].gamepad); + controllers[i].gamepad = NULL; + } +} + +static Uint16 ConvertAxisToRumble(Sint16 axisval) +{ + /* Only start rumbling if the axis is past the halfway point */ + const Sint16 half_axis = (Sint16)SDL_ceil(SDL_JOYSTICK_AXIS_MAX / 2.0f); + if (axisval > half_axis) { + return (Uint16)(axisval - half_axis) * 4; + } else { + return 0; + } +} + +static SDL_bool ShowingFront(void) +{ + SDL_bool showing_front = SDL_TRUE; + int i; + + /* Show the back of the gamepad if the paddles are being held or bound */ + for (i = SDL_GAMEPAD_BUTTON_RIGHT_PADDLE1; i <= SDL_GAMEPAD_BUTTON_LEFT_PADDLE2; ++i) { + if (SDL_GetGamepadButton(controller->gamepad, (SDL_GamepadButton)i) == SDL_PRESSED || + binding_element == i) { + showing_front = SDL_FALSE; + break; + } + } + if ((SDL_GetModState() & SDL_KMOD_SHIFT) && binding_element != SDL_GAMEPAD_ELEMENT_NAME) { + showing_front = SDL_FALSE; + } + return showing_front; +} + +static void SDLCALL VirtualGamepadSetPlayerIndex(void *userdata, int player_index) +{ + SDL_Log("Virtual Gamepad: player index set to %d\n", player_index); +} + +static int SDLCALL VirtualGamepadRumble(void *userdata, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble) +{ + SDL_Log("Virtual Gamepad: rumble set to %d/%d\n", low_frequency_rumble, high_frequency_rumble); + return 0; +} + +static int SDLCALL VirtualGamepadRumbleTriggers(void *userdata, Uint16 left_rumble, Uint16 right_rumble) +{ + SDL_Log("Virtual Gamepad: trigger rumble set to %d/%d\n", left_rumble, right_rumble); + return 0; +} + +static int SDLCALL VirtualGamepadSetLED(void *userdata, Uint8 red, Uint8 green, Uint8 blue) +{ + SDL_Log("Virtual Gamepad: LED set to RGB %d,%d,%d\n", red, green, blue); + return 0; +} + +static void OpenVirtualGamepad(void) +{ + SDL_VirtualJoystickDesc desc; + SDL_JoystickID virtual_id; + + if (virtual_joystick) { + return; + } + + SDL_zero(desc); + desc.version = SDL_VIRTUAL_JOYSTICK_DESC_VERSION; + desc.type = SDL_JOYSTICK_TYPE_GAMEPAD; + desc.naxes = SDL_GAMEPAD_AXIS_MAX; + desc.nbuttons = SDL_GAMEPAD_BUTTON_MAX; + desc.SetPlayerIndex = VirtualGamepadSetPlayerIndex; + desc.Rumble = VirtualGamepadRumble; + desc.RumbleTriggers = VirtualGamepadRumbleTriggers; + desc.SetLED = VirtualGamepadSetLED; + + virtual_id = SDL_AttachVirtualJoystickEx(&desc); + if (virtual_id == 0) { + SDL_Log("Couldn't attach virtual device: %s\n", SDL_GetError()); + } else { + virtual_joystick = SDL_OpenJoystick(virtual_id); + if (virtual_joystick == NULL) { + SDL_Log("Couldn't open virtual device: %s\n", SDL_GetError()); + } + } +} + +static void CloseVirtualGamepad(void) +{ + int i; + SDL_JoystickID *joysticks = SDL_GetJoysticks(NULL); + if (joysticks) { + for (i = 0; joysticks[i]; ++i) { + SDL_JoystickID instance_id = joysticks[i]; + if (SDL_IsJoystickVirtual(instance_id)) { + SDL_DetachVirtualJoystick(instance_id); + } + } + SDL_free(joysticks); + } + + if (virtual_joystick) { + SDL_CloseJoystick(virtual_joystick); + virtual_joystick = NULL; + } +} + +static void VirtualGamepadMouseMotion(float x, float y) +{ + if (virtual_button_active != SDL_GAMEPAD_BUTTON_INVALID) { + if (virtual_axis_active != SDL_GAMEPAD_AXIS_INVALID) { + const float MOVING_DISTANCE = 2.0f; + if (SDL_fabs(x - virtual_axis_start_x) >= MOVING_DISTANCE || + SDL_fabs(y - virtual_axis_start_y) >= MOVING_DISTANCE) { + SDL_SetJoystickVirtualButton(virtual_joystick, virtual_button_active, SDL_RELEASED); + virtual_button_active = SDL_GAMEPAD_BUTTON_INVALID; + } + } + } + + if (virtual_axis_active != SDL_GAMEPAD_AXIS_INVALID) { + if (virtual_axis_active == SDL_GAMEPAD_AXIS_LEFT_TRIGGER || + virtual_axis_active == SDL_GAMEPAD_AXIS_RIGHT_TRIGGER) { + int range = (SDL_JOYSTICK_AXIS_MAX - SDL_JOYSTICK_AXIS_MIN); + float distance = SDL_clamp((y - virtual_axis_start_y) / GetGamepadImageAxisHeight(image), 0.0f, 1.0f); + Sint16 value = (Sint16)(SDL_JOYSTICK_AXIS_MIN + (distance * range)); + SDL_SetJoystickVirtualAxis(virtual_joystick, virtual_axis_active, value); + } else { + float distanceX = SDL_clamp((x - virtual_axis_start_x) / GetGamepadImageAxisWidth(image), -1.0f, 1.0f); + float distanceY = SDL_clamp((y - virtual_axis_start_y) / GetGamepadImageAxisHeight(image), -1.0f, 1.0f); + Sint16 valueX, valueY; + + if (distanceX >= 0) { + valueX = (Sint16)(distanceX * SDL_JOYSTICK_AXIS_MAX); + } else { + valueX = (Sint16)(distanceX * -SDL_JOYSTICK_AXIS_MIN); + } + if (distanceY >= 0) { + valueY = (Sint16)(distanceY * SDL_JOYSTICK_AXIS_MAX); + } else { + valueY = (Sint16)(distanceY * -SDL_JOYSTICK_AXIS_MIN); + } + SDL_SetJoystickVirtualAxis(virtual_joystick, virtual_axis_active, valueX); + SDL_SetJoystickVirtualAxis(virtual_joystick, virtual_axis_active + 1, valueY); + } + } +} + +static void VirtualGamepadMouseDown(float x, float y) +{ + int element = GetGamepadImageElementAt(image, x, y); + + if (element == SDL_GAMEPAD_ELEMENT_INVALID) { + return; + } + + if (element < SDL_GAMEPAD_BUTTON_MAX) { + virtual_button_active = (SDL_GamepadButton)element; + SDL_SetJoystickVirtualButton(virtual_joystick, virtual_button_active, SDL_PRESSED); + } else { + switch (element) { + case SDL_GAMEPAD_ELEMENT_AXIS_LEFTX_NEGATIVE: + case SDL_GAMEPAD_ELEMENT_AXIS_LEFTX_POSITIVE: + case SDL_GAMEPAD_ELEMENT_AXIS_LEFTY_NEGATIVE: + case SDL_GAMEPAD_ELEMENT_AXIS_LEFTY_POSITIVE: + virtual_axis_active = SDL_GAMEPAD_AXIS_LEFTX; + break; + case SDL_GAMEPAD_ELEMENT_AXIS_RIGHTX_NEGATIVE: + case SDL_GAMEPAD_ELEMENT_AXIS_RIGHTX_POSITIVE: + case SDL_GAMEPAD_ELEMENT_AXIS_RIGHTY_NEGATIVE: + case SDL_GAMEPAD_ELEMENT_AXIS_RIGHTY_POSITIVE: + virtual_axis_active = SDL_GAMEPAD_AXIS_RIGHTX; + break; + case SDL_GAMEPAD_ELEMENT_AXIS_LEFT_TRIGGER: + virtual_axis_active = SDL_GAMEPAD_AXIS_LEFT_TRIGGER; + break; + case SDL_GAMEPAD_ELEMENT_AXIS_RIGHT_TRIGGER: + virtual_axis_active = SDL_GAMEPAD_AXIS_RIGHT_TRIGGER; + break; + } + virtual_axis_start_x = x; + virtual_axis_start_y = y; + } +} + +static void VirtualGamepadMouseUp(float x, float y) +{ + if (virtual_button_active != SDL_GAMEPAD_BUTTON_INVALID) { + SDL_SetJoystickVirtualButton(virtual_joystick, virtual_button_active, SDL_RELEASED); + virtual_button_active = SDL_GAMEPAD_BUTTON_INVALID; + } + + if (virtual_axis_active != SDL_GAMEPAD_AXIS_INVALID) { + if (virtual_axis_active == SDL_GAMEPAD_AXIS_LEFT_TRIGGER || + virtual_axis_active == SDL_GAMEPAD_AXIS_RIGHT_TRIGGER) { + SDL_SetJoystickVirtualAxis(virtual_joystick, virtual_axis_active, SDL_JOYSTICK_AXIS_MIN); + } else { + SDL_SetJoystickVirtualAxis(virtual_joystick, virtual_axis_active, 0); + SDL_SetJoystickVirtualAxis(virtual_joystick, virtual_axis_active + 1, 0); + } + virtual_axis_active = SDL_GAMEPAD_AXIS_INVALID; + } +} + +static void DrawGamepadWaiting(SDL_Renderer *renderer) +{ + const char *text = "Waiting for gamepad, press A to add a virtual controller"; + float x, y; + + x = (float)SCREEN_WIDTH / 2 - (FONT_CHARACTER_SIZE * SDL_strlen(text)) / 2; + y = (float)TITLE_HEIGHT / 2 - FONT_CHARACTER_SIZE / 2; + SDLTest_DrawString(renderer, x, y, text); +} + +static void DrawGamepadInfo(SDL_Renderer *renderer) +{ + const char *type; + const char *serial; + char text[128]; + float x, y; + + if (title_highlighted) { + Uint8 r, g, b, a; + + SDL_GetRenderDrawColor(renderer, &r, &g, &b, &a); + + if (title_pressed) { + SDL_SetRenderDrawColor(renderer, PRESSED_COLOR); + } else { + SDL_SetRenderDrawColor(renderer, HIGHLIGHT_COLOR); + } + SDL_RenderFillRect(renderer, &title_area); + + SDL_SetRenderDrawColor(renderer, r, g, b, a); + } + + if (type_highlighted) { + Uint8 r, g, b, a; + + SDL_GetRenderDrawColor(renderer, &r, &g, &b, &a); + + if (type_pressed) { + SDL_SetRenderDrawColor(renderer, PRESSED_COLOR); + } else { + SDL_SetRenderDrawColor(renderer, HIGHLIGHT_COLOR); + } + SDL_RenderFillRect(renderer, &type_area); + + SDL_SetRenderDrawColor(renderer, r, g, b, a); + } + + if (controller_name && *controller_name) { + x = title_area.x + title_area.w / 2 - (FONT_CHARACTER_SIZE * SDL_strlen(controller_name)) / 2; + y = title_area.y + title_area.h / 2 - FONT_CHARACTER_SIZE / 2; + SDLTest_DrawString(renderer, x, y, controller_name); + } + + if (SDL_IsJoystickVirtual(controller->id)) { + SDL_strlcpy(text, "Click on the gamepad image below to generate input", sizeof(text)); + x = (float)SCREEN_WIDTH / 2 - (FONT_CHARACTER_SIZE * SDL_strlen(text)) / 2; + y = (float)TITLE_HEIGHT / 2 - FONT_CHARACTER_SIZE / 2 + FONT_LINE_HEIGHT + 2.0f; + SDLTest_DrawString(renderer, x, y, text); + } + + type = GetGamepadTypeString(SDL_GetGamepadType(controller->gamepad)); + x = type_area.x + type_area.w / 2 - (FONT_CHARACTER_SIZE * SDL_strlen(type)) / 2; + y = type_area.y + type_area.h / 2 - FONT_CHARACTER_SIZE / 2; + SDLTest_DrawString(renderer, x, y, type); + + if (display_mode == CONTROLLER_MODE_TESTING) { + SDL_snprintf(text, SDL_arraysize(text), "VID: 0x%.4x PID: 0x%.4x", + SDL_GetJoystickVendor(controller->joystick), + SDL_GetJoystickProduct(controller->joystick)); + y = (float)SCREEN_HEIGHT - 8.0f - FONT_LINE_HEIGHT; + x = (float)SCREEN_WIDTH - 8.0f - (FONT_CHARACTER_SIZE * SDL_strlen(text)); + SDLTest_DrawString(renderer, x, y, text); + + serial = SDL_GetJoystickSerial(controller->joystick); + if (serial && *serial) { + SDL_snprintf(text, SDL_arraysize(text), "Serial: %s", serial); + x = (float)SCREEN_WIDTH / 2 - (FONT_CHARACTER_SIZE * SDL_strlen(text)) / 2; + y = (float)SCREEN_HEIGHT - 8.0f - FONT_LINE_HEIGHT; + SDLTest_DrawString(renderer, x, y, text); + } + } +} + +static void DrawBindingTips(SDL_Renderer *renderer) +{ + const char *text; + SDL_Rect image_area, button_area; + int x, y; + + GetGamepadImageArea(image, &image_area); + GetGamepadButtonArea(done_mapping_button, &button_area); + x = image_area.x + image_area.w / 2; + y = image_area.y + image_area.h; + y += (button_area.y - y - FONT_CHARACTER_SIZE) / 2; + + text = GetBindingInstruction(); + + if (binding_element == SDL_GAMEPAD_ELEMENT_INVALID) { + SDLTest_DrawString(renderer, (float)x - (FONT_CHARACTER_SIZE * SDL_strlen(text)) / 2, (float)y, text); + } else { + Uint8 r, g, b, a; + SDL_FRect rect; + SDL_bool bound_A, bound_B; + + y -= (FONT_CHARACTER_SIZE + BUTTON_MARGIN) / 2; + + rect.w = 2.0f + (FONT_CHARACTER_SIZE * SDL_strlen(text)) + 2.0f; + rect.h = 2.0f + FONT_CHARACTER_SIZE + 2.0f; + rect.x = (float)x - rect.w / 2; + rect.y = (float)y - 2.0f; + + SDL_GetRenderDrawColor(renderer, &r, &g, &b, &a); + SDL_SetRenderDrawColor(renderer, SELECTED_COLOR); + SDL_RenderFillRect(renderer, &rect); + SDL_SetRenderDrawColor(renderer, r, g, b, a); + SDLTest_DrawString(renderer, (float)x - (FONT_CHARACTER_SIZE * SDL_strlen(text)) / 2, (float)y, text); + + y += (FONT_CHARACTER_SIZE + BUTTON_MARGIN); + + if (binding_element == SDL_GAMEPAD_ELEMENT_NAME) { + text = "(press RETURN to complete)"; + } else if (binding_element == SDL_GAMEPAD_ELEMENT_TYPE) { + text = "(press ESC to cancel)"; + } else { + bound_A = MappingHasElement(controller->mapping, SDL_GAMEPAD_BUTTON_A); + bound_B = MappingHasElement(controller->mapping, SDL_GAMEPAD_BUTTON_B); + if (binding_flow && bound_A && bound_B) { + text = "(press A to skip, B to go back, and ESC to cancel)"; + } else { + text = "(press SPACE to clear binding and ESC to cancel)"; + } + } + SDLTest_DrawString(renderer, (float)x - (FONT_CHARACTER_SIZE * SDL_strlen(text)) / 2, (float)y, text); + } +} + +static void UpdateGamepadEffects(void) +{ + if (display_mode != CONTROLLER_MODE_TESTING || !controller->gamepad) { + return; + } + + /* Update LED based on left thumbstick position */ + { + Sint16 x = SDL_GetGamepadAxis(controller->gamepad, SDL_GAMEPAD_AXIS_LEFTX); + Sint16 y = SDL_GetGamepadAxis(controller->gamepad, SDL_GAMEPAD_AXIS_LEFTY); + + if (!set_LED) { + set_LED = (x < -8000 || x > 8000 || y > 8000); + } + if (set_LED) { + Uint8 r, g, b; + + if (x < 0) { + r = (Uint8)(((~x) * 255) / 32767); + b = 0; + } else { + r = 0; + b = (Uint8)(((int)(x)*255) / 32767); + } + if (y > 0) { + g = (Uint8)(((int)(y)*255) / 32767); + } else { + g = 0; + } + + SDL_SetGamepadLED(controller->gamepad, r, g, b); + } + } + + if (controller->trigger_effect == 0) { + /* Update rumble based on trigger state */ + { + Sint16 left = SDL_GetGamepadAxis(controller->gamepad, SDL_GAMEPAD_AXIS_LEFT_TRIGGER); + Sint16 right = SDL_GetGamepadAxis(controller->gamepad, SDL_GAMEPAD_AXIS_RIGHT_TRIGGER); + Uint16 low_frequency_rumble = ConvertAxisToRumble(left); + Uint16 high_frequency_rumble = ConvertAxisToRumble(right); + SDL_RumbleGamepad(controller->gamepad, low_frequency_rumble, high_frequency_rumble, 250); + } + + /* Update trigger rumble based on thumbstick state */ + { + Sint16 left = SDL_GetGamepadAxis(controller->gamepad, SDL_GAMEPAD_AXIS_LEFTY); + Sint16 right = SDL_GetGamepadAxis(controller->gamepad, SDL_GAMEPAD_AXIS_RIGHTY); + Uint16 left_rumble = ConvertAxisToRumble(~left); + Uint16 right_rumble = ConvertAxisToRumble(~right); + + SDL_RumbleGamepadTriggers(controller->gamepad, left_rumble, right_rumble, 250); + } + } +} + +static void loop(void *arg) +{ + SDL_Event event; + + /* Update to get the current event state */ + SDL_PumpEvents(); + + /* Process all currently pending events */ + while (SDL_PeepEvents(&event, 1, SDL_GETEVENT, SDL_EVENT_FIRST, SDL_EVENT_LAST) == 1) { + SDL_ConvertEventToRenderCoordinates(screen, &event); + + switch (event.type) { + case SDL_EVENT_JOYSTICK_ADDED: + AddController(event.jdevice.which, SDL_TRUE); + break; + + case SDL_EVENT_JOYSTICK_REMOVED: + DelController(event.jdevice.which); + break; + + case SDL_EVENT_JOYSTICK_AXIS_MOTION: + if (display_mode == CONTROLLER_MODE_TESTING) { + if (event.jaxis.value <= (-SDL_JOYSTICK_AXIS_MAX / 2) || event.jaxis.value >= (SDL_JOYSTICK_AXIS_MAX / 2)) { + SetController(event.jaxis.which); + } + } else if (display_mode == CONTROLLER_MODE_BINDING && + event.jaxis.which == controller->id && + event.jaxis.axis < controller->num_axes && + binding_element != SDL_GAMEPAD_ELEMENT_INVALID) { + const int MAX_ALLOWED_JITTER = SDL_JOYSTICK_AXIS_MAX / 80; /* ShanWan PS3 gamepad needed 96 */ + AxisState *pAxisState = &controller->axis_state[event.jaxis.axis]; + int nValue = event.jaxis.value; + int nCurrentDistance, nFarthestDistance; + if (!pAxisState->m_bMoving) { + Sint16 nInitialValue; + pAxisState->m_bMoving = SDL_GetJoystickAxisInitialState(controller->joystick, event.jaxis.axis, &nInitialValue); + pAxisState->m_nLastValue = nValue; + pAxisState->m_nStartingValue = nInitialValue; + pAxisState->m_nFarthestValue = nInitialValue; + } else if (SDL_abs(nValue - pAxisState->m_nLastValue) <= MAX_ALLOWED_JITTER) { + break; + } else { + pAxisState->m_nLastValue = nValue; + } + nCurrentDistance = SDL_abs(nValue - pAxisState->m_nStartingValue); + nFarthestDistance = SDL_abs(pAxisState->m_nFarthestValue - pAxisState->m_nStartingValue); + if (nCurrentDistance > nFarthestDistance) { + pAxisState->m_nFarthestValue = nValue; + nFarthestDistance = SDL_abs(pAxisState->m_nFarthestValue - pAxisState->m_nStartingValue); + } + +#ifdef DEBUG_AXIS_MAPPING + SDL_Log("AXIS %d nValue %d nCurrentDistance %d nFarthestDistance %d\n", event.jaxis.axis, nValue, nCurrentDistance, nFarthestDistance); +#endif + /* If we've gone out far enough and started to come back, let's bind this axis */ + if (nFarthestDistance >= 16000 && nCurrentDistance <= 10000) { + char binding[12]; + int axis_min = StandardizeAxisValue(pAxisState->m_nStartingValue); + int axis_max = StandardizeAxisValue(pAxisState->m_nFarthestValue); + + if (axis_min == 0 && axis_max == SDL_JOYSTICK_AXIS_MIN) { + /* The negative half axis */ + (void)SDL_snprintf(binding, sizeof(binding), "-a%d", event.jaxis.axis); + } else if (axis_min == 0 && axis_max == SDL_JOYSTICK_AXIS_MAX) { + /* The positive half axis */ + (void)SDL_snprintf(binding, sizeof(binding), "+a%d", event.jaxis.axis); + } else { + (void)SDL_snprintf(binding, sizeof(binding), "a%d", event.jaxis.axis); + if (axis_min > axis_max) { + /* Invert the axis */ + SDL_strlcat(binding, "~", SDL_arraysize(binding)); + } + } +#ifdef DEBUG_AXIS_MAPPING + SDL_Log("AXIS %d axis_min = %d, axis_max = %d, binding = %s\n", event.jaxis.axis, axis_min, axis_max, binding); +#endif + CommitBindingElement(binding, SDL_FALSE); + } + } + break; + + case SDL_EVENT_JOYSTICK_BUTTON_DOWN: + if (display_mode == CONTROLLER_MODE_TESTING) { + SetController(event.jbutton.which); + } + break; + + case SDL_EVENT_JOYSTICK_BUTTON_UP: + if (display_mode == CONTROLLER_MODE_BINDING && + event.jbutton.which == controller->id && + binding_element != SDL_GAMEPAD_ELEMENT_INVALID) { + char binding[12]; + + SDL_snprintf(binding, sizeof(binding), "b%d", event.jbutton.button); + CommitBindingElement(binding, SDL_FALSE); + } + break; + + case SDL_EVENT_JOYSTICK_HAT_MOTION: + if (display_mode == CONTROLLER_MODE_BINDING && + event.jhat.which == controller->id && + event.jhat.value != SDL_HAT_CENTERED && + binding_element != SDL_GAMEPAD_ELEMENT_INVALID) { + char binding[12]; + + SDL_snprintf(binding, sizeof(binding), "h%d.%d", event.jhat.hat, event.jhat.value); + CommitBindingElement(binding, SDL_FALSE); + } + break; + + case SDL_EVENT_GAMEPAD_ADDED: + HandleGamepadAdded(event.gdevice.which, SDL_TRUE); + break; + + case SDL_EVENT_GAMEPAD_REMOVED: + HandleGamepadRemoved(event.gdevice.which); + break; + + case SDL_EVENT_GAMEPAD_REMAPPED: + HandleGamepadRemapped(event.gdevice.which); + break; + +#ifdef VERBOSE_TOUCHPAD + case SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN: + case SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION: + case SDL_EVENT_GAMEPAD_TOUCHPAD_UP: + SDL_Log("Gamepad %" SDL_PRIu32 " touchpad %" SDL_PRIs32 " finger %" SDL_PRIs32 " %s %.2f, %.2f, %.2f\n", + event.gtouchpad.which, + event.gtouchpad.touchpad, + event.gtouchpad.finger, + (event.type == SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN ? "pressed at" : (event.type == SDL_EVENT_GAMEPAD_TOUCHPAD_UP ? "released at" : "moved to")), + event.gtouchpad.x, + event.gtouchpad.y, + event.gtouchpad.pressure); + break; +#endif /* VERBOSE_TOUCHPAD */ + +#ifdef VERBOSE_SENSORS + case SDL_EVENT_GAMEPAD_SENSOR_UPDATE: + SDL_Log("Gamepad %" SDL_PRIu32 " sensor %s: %.2f, %.2f, %.2f (%" SDL_PRIu64 ")\n", + event.gsensor.which, + GetSensorName((SDL_SensorType) event.gsensor.sensor), + event.gsensor.data[0], + event.gsensor.data[1], + event.gsensor.data[2], + event.gsensor.sensor_timestamp); + break; +#endif /* VERBOSE_SENSORS */ + +#ifdef VERBOSE_AXES + case SDL_EVENT_GAMEPAD_AXIS_MOTION: + if (display_mode == CONTROLLER_MODE_TESTING) { + if (event.gaxis.value <= (-SDL_JOYSTICK_AXIS_MAX / 2) || event.gaxis.value >= (SDL_JOYSTICK_AXIS_MAX / 2)) { + SetController(event.gaxis.which); + } + } + SDL_Log("Gamepad %" SDL_PRIu32 " axis %s changed to %d\n", + event.gaxis.which, + SDL_GetGamepadStringForAxis((SDL_GamepadAxis) event.gaxis.axis), + event.gaxis.value); + break; +#endif /* VERBOSE_AXES */ + + case SDL_EVENT_GAMEPAD_BUTTON_DOWN: + case SDL_EVENT_GAMEPAD_BUTTON_UP: + if (display_mode == CONTROLLER_MODE_TESTING) { + if (event.type == SDL_EVENT_GAMEPAD_BUTTON_DOWN) { + SetController(event.gbutton.which); + } + } +#ifdef VERBOSE_BUTTONS + SDL_Log("Gamepad %" SDL_PRIu32 " button %s %s\n", + event.gbutton.which, + SDL_GetGamepadStringForButton((SDL_GamepadButton) event.gbutton.button), + event.gbutton.state ? "pressed" : "released"); +#endif /* VERBOSE_BUTTONS */ + + if (display_mode == CONTROLLER_MODE_TESTING) { + /* Cycle PS5 trigger effects when the microphone button is pressed */ + if (event.type == SDL_EVENT_GAMEPAD_BUTTON_DOWN && + controller && SDL_GetGamepadType(controller->gamepad) == SDL_GAMEPAD_TYPE_PS5 && + event.gbutton.button == SDL_GAMEPAD_BUTTON_MISC1) { + CyclePS5TriggerEffect(controller); + } + } + break; + + case SDL_EVENT_MOUSE_BUTTON_DOWN: + if (virtual_joystick && controller && controller->joystick == virtual_joystick) { + VirtualGamepadMouseDown(event.button.x, event.button.y); + } + UpdateButtonHighlights(event.button.x, event.button.y, event.button.state ? SDL_TRUE : SDL_FALSE); + break; + + case SDL_EVENT_MOUSE_BUTTON_UP: + if (virtual_joystick && controller && controller->joystick == virtual_joystick) { + VirtualGamepadMouseUp(event.button.x, event.button.y); + } + + if (display_mode == CONTROLLER_MODE_TESTING) { + if (GamepadButtonContains(setup_mapping_button, event.button.x, event.button.y)) { + SetDisplayMode(CONTROLLER_MODE_BINDING); + } + } else if (display_mode == CONTROLLER_MODE_BINDING) { + if (GamepadButtonContains(done_mapping_button, event.button.x, event.button.y)) { + if (controller->mapping) { + SDL_Log("Mapping complete:\n"); + SDL_Log("%s\n", controller->mapping); + } + SetDisplayMode(CONTROLLER_MODE_TESTING); + } else if (GamepadButtonContains(cancel_button, event.button.x, event.button.y)) { + CancelMapping(); + } else if (GamepadButtonContains(clear_button, event.button.x, event.button.y)) { + ClearMapping(); + } else if (controller->has_bindings && + GamepadButtonContains(copy_button, event.button.x, event.button.y)) { + CopyMapping(); + } else if (GamepadButtonContains(paste_button, event.button.x, event.button.y)) { + PasteMapping(); + } else if (title_pressed) { + SetCurrentBindingElement(SDL_GAMEPAD_ELEMENT_NAME, SDL_FALSE); + } else if (type_pressed) { + SetCurrentBindingElement(SDL_GAMEPAD_ELEMENT_TYPE, SDL_FALSE); + } else if (binding_element == SDL_GAMEPAD_ELEMENT_TYPE) { + int type = GetGamepadTypeDisplayAt(gamepad_type, event.button.x, event.button.y); + if (type != SDL_GAMEPAD_TYPE_UNSELECTED) { + CommitGamepadType((SDL_GamepadType)type); + StopBinding(); + } + } else { + int gamepad_element = SDL_GAMEPAD_ELEMENT_INVALID; + char *joystick_element; + + if (controller->joystick != virtual_joystick) { + gamepad_element = GetGamepadImageElementAt(image, event.button.x, event.button.y); + } + if (gamepad_element == SDL_GAMEPAD_ELEMENT_INVALID) { + gamepad_element = GetGamepadDisplayElementAt(gamepad_elements, controller->gamepad, event.button.x, event.button.y); + } + if (gamepad_element != SDL_GAMEPAD_ELEMENT_INVALID) { + /* Set this to SDL_FALSE if you don't want to start the binding flow at this point */ + const SDL_bool should_start_flow = SDL_TRUE; + SetCurrentBindingElement(gamepad_element, should_start_flow); + } + + joystick_element = GetJoystickDisplayElementAt(joystick_elements, controller->joystick, event.button.x, event.button.y); + if (joystick_element) { + CommitBindingElement(joystick_element, SDL_TRUE); + SDL_free(joystick_element); + } + } + } + UpdateButtonHighlights(event.button.x, event.button.y, event.button.state ? SDL_TRUE : SDL_FALSE); + break; + + case SDL_EVENT_MOUSE_MOTION: + if (virtual_joystick && controller && controller->joystick == virtual_joystick) { + VirtualGamepadMouseMotion(event.motion.x, event.motion.y); + } + UpdateButtonHighlights(event.motion.x, event.motion.y, event.motion.state ? SDL_TRUE : SDL_FALSE); + break; + + case SDL_EVENT_KEY_DOWN: + if (display_mode == CONTROLLER_MODE_TESTING) { + if (event.key.keysym.sym >= SDLK_0 && event.key.keysym.sym <= SDLK_9) { + if (controller && controller->gamepad) { + int player_index = (event.key.keysym.sym - SDLK_0); + + SDL_SetGamepadPlayerIndex(controller->gamepad, player_index); + } + break; + } else if (event.key.keysym.sym == SDLK_a) { + OpenVirtualGamepad(); + } else if (event.key.keysym.sym == SDLK_d) { + CloseVirtualGamepad(); + } else if (event.key.keysym.sym == SDLK_r && (event.key.keysym.mod & SDL_KMOD_CTRL)) { + SDL_ReloadGamepadMappings(); + } else if (event.key.keysym.sym == SDLK_ESCAPE) { + done = SDL_TRUE; + } + } else if (display_mode == CONTROLLER_MODE_BINDING) { + if (event.key.keysym.sym == SDLK_c && (event.key.keysym.mod & SDL_KMOD_CTRL)) { + if (binding_element == SDL_GAMEPAD_ELEMENT_NAME) { + CopyControllerName(); + } else { + CopyMapping(); + } + } else if (event.key.keysym.sym == SDLK_v && (event.key.keysym.mod & SDL_KMOD_CTRL)) { + if (binding_element == SDL_GAMEPAD_ELEMENT_NAME) { + ClearControllerName(); + PasteControllerName(); + } else { + PasteMapping(); + } + } else if (event.key.keysym.sym == SDLK_x && (event.key.keysym.mod & SDL_KMOD_CTRL)) { + if (binding_element == SDL_GAMEPAD_ELEMENT_NAME) { + CopyControllerName(); + ClearControllerName(); + } else { + CopyMapping(); + ClearMapping(); + } + } else if (event.key.keysym.sym == SDLK_SPACE) { + if (binding_element != SDL_GAMEPAD_ELEMENT_NAME) { + ClearBinding(); + } + } else if (event.key.keysym.sym == SDLK_BACKSPACE) { + if (binding_element == SDL_GAMEPAD_ELEMENT_NAME) { + BackspaceControllerName(); + } + } else if (event.key.keysym.sym == SDLK_RETURN) { + if (binding_element == SDL_GAMEPAD_ELEMENT_NAME) { + StopBinding(); + } + } else if (event.key.keysym.sym == SDLK_ESCAPE) { + if (binding_element != SDL_GAMEPAD_ELEMENT_INVALID) { + StopBinding(); + } else { + CancelMapping(); + } + } + } + break; + case SDL_EVENT_TEXT_INPUT: + if (display_mode == CONTROLLER_MODE_BINDING) { + if (binding_element == SDL_GAMEPAD_ELEMENT_NAME) { + AddControllerNameText(event.text.text); + } + } + break; + case SDL_EVENT_QUIT: + done = SDL_TRUE; + break; + default: + break; + } + } + + /* Wait 30 ms for joystick events to stop coming in, + in case a gamepad sends multiple events for a single control (e.g. axis and button for trigger) + */ + if (binding_advance_time && SDL_GetTicks() > (binding_advance_time + 30)) { + if (binding_flow) { + SetNextBindingElement(); + } else { + StopBinding(); + } + } + + /* blank screen, set up for drawing this frame. */ + SDL_SetRenderDrawColor(screen, 0xFF, 0xFF, 0xFF, SDL_ALPHA_OPAQUE); + SDL_RenderClear(screen); + SDL_SetRenderDrawColor(screen, 0x10, 0x10, 0x10, SDL_ALPHA_OPAQUE); + + if (controller) { + SetGamepadImageShowingFront(image, ShowingFront()); + UpdateGamepadImageFromGamepad(image, controller->gamepad); + if (display_mode == CONTROLLER_MODE_BINDING && + binding_element != SDL_GAMEPAD_ELEMENT_INVALID) { + SetGamepadImageElement(image, binding_element, SDL_TRUE); + } + RenderGamepadImage(image); + + if (binding_element == SDL_GAMEPAD_ELEMENT_TYPE) { + SetGamepadTypeDisplayRealType(gamepad_type, SDL_GetRealGamepadType(controller->gamepad)); + RenderGamepadTypeDisplay(gamepad_type); + } else { + RenderGamepadDisplay(gamepad_elements, controller->gamepad); + } + RenderJoystickDisplay(joystick_elements, controller->joystick); + + if (display_mode == CONTROLLER_MODE_TESTING) { + RenderGamepadButton(setup_mapping_button); + } else if (display_mode == CONTROLLER_MODE_BINDING) { + DrawBindingTips(screen); + RenderGamepadButton(done_mapping_button); + RenderGamepadButton(cancel_button); + RenderGamepadButton(clear_button); + if (controller->has_bindings) { + RenderGamepadButton(copy_button); + } + RenderGamepadButton(paste_button); + } + + DrawGamepadInfo(screen); + + UpdateGamepadEffects(); + } else { + DrawGamepadWaiting(screen); + } + SDL_Delay(16); + SDL_RenderPresent(screen); + +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int main(int argc, char *argv[]) +{ + int i; + float content_scale; + int screen_width, screen_height; + SDL_Rect area; + int gamepad_index = -1; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + SDL_SetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, "0"); + SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE, "1"); + SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE, "1"); + SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_STEAM, "1"); + SDL_SetHint(SDL_HINT_JOYSTICK_ROG_CHAKRAM, "1"); + SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1"); + SDL_SetHint(SDL_HINT_LINUX_JOYSTICK_DEADZONES, "1"); + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (SDL_strcmp(argv[i], "--mappings") == 0) { + int map_i; + SDL_Log("Supported mappings:\n"); + for (map_i = 0; map_i < SDL_GetNumGamepadMappings(); ++map_i) { + char *mapping = SDL_GetGamepadMappingForIndex(map_i); + if (mapping) { + SDL_Log("\t%s\n", mapping); + SDL_free(mapping); + } + } + SDL_Log("\n"); + consumed = 1; + } else if (SDL_strcmp(argv[i], "--virtual") == 0) { + OpenVirtualGamepad(); + consumed = 1; + } else if (gamepad_index < 0) { + char *endptr = NULL; + gamepad_index = (int)SDL_strtol(argv[i], &endptr, 0); + if (endptr != argv[i] && *endptr == '\0' && gamepad_index >= 0) { + consumed = 1; + } + } + } + if (consumed <= 0) { + static const char *options[] = { "[--mappings]", "[--virtual]", "[index]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + return 1; + } + + i += consumed; + } + if (gamepad_index < 0) { + gamepad_index = 0; + } + + /* Initialize SDL (Note: video is required to start event loop) */ + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_GAMEPAD) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + SDL_AddGamepadMappingsFromFile("gamecontrollerdb.txt"); + + /* Create a window to display gamepad state */ + content_scale = SDL_GetDisplayContentScale(SDL_GetPrimaryDisplay()); + if (content_scale == 0.0f) { + content_scale = 1.0f; + } + screen_width = (int)SDL_ceilf(SCREEN_WIDTH * content_scale); + screen_height = (int)SDL_ceilf(SCREEN_HEIGHT * content_scale); + window = SDL_CreateWindow("SDL Controller Test", screen_width, screen_height, 0); + if (window == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create window: %s\n", SDL_GetError()); + return 2; + } + + screen = SDL_CreateRenderer(window, NULL, 0); + if (screen == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create renderer: %s\n", SDL_GetError()); + SDL_DestroyWindow(window); + return 2; + } + + SDL_SetRenderDrawColor(screen, 0x00, 0x00, 0x00, SDL_ALPHA_OPAQUE); + SDL_RenderClear(screen); + SDL_RenderPresent(screen); + + /* scale for platforms that don't give you the window size you asked for. */ + SDL_SetRenderLogicalPresentation(screen, SCREEN_WIDTH, SCREEN_HEIGHT, + SDL_LOGICAL_PRESENTATION_LETTERBOX, + SDL_SCALEMODE_LINEAR); + + + title_area.w = (float)GAMEPAD_WIDTH; + title_area.h = (float)FONT_CHARACTER_SIZE + 2 * BUTTON_MARGIN; + title_area.x = (float)PANEL_WIDTH + PANEL_SPACING; + title_area.y = (float)TITLE_HEIGHT / 2 - title_area.h / 2; + + type_area.w = (float)PANEL_WIDTH - 2 * BUTTON_MARGIN; + type_area.h = (float)FONT_CHARACTER_SIZE + 2 * BUTTON_MARGIN; + type_area.x = (float)BUTTON_MARGIN; + type_area.y = (float)TITLE_HEIGHT / 2 - type_area.h / 2; + + image = CreateGamepadImage(screen); + if (image == NULL) { + SDL_DestroyRenderer(screen); + SDL_DestroyWindow(window); + return 2; + } + SetGamepadImagePosition(image, PANEL_WIDTH + PANEL_SPACING, TITLE_HEIGHT); + + gamepad_elements = CreateGamepadDisplay(screen); + area.x = 0; + area.y = TITLE_HEIGHT; + area.w = PANEL_WIDTH; + area.h = GAMEPAD_HEIGHT; + SetGamepadDisplayArea(gamepad_elements, &area); + + gamepad_type = CreateGamepadTypeDisplay(screen); + area.x = 0; + area.y = TITLE_HEIGHT; + area.w = PANEL_WIDTH; + area.h = GAMEPAD_HEIGHT; + SetGamepadTypeDisplayArea(gamepad_type, &area); + + joystick_elements = CreateJoystickDisplay(screen); + area.x = PANEL_WIDTH + PANEL_SPACING + GAMEPAD_WIDTH + PANEL_SPACING; + area.y = TITLE_HEIGHT; + area.w = PANEL_WIDTH; + area.h = GAMEPAD_HEIGHT; + SetJoystickDisplayArea(joystick_elements, &area); + + setup_mapping_button = CreateGamepadButton(screen, "Setup Mapping"); + area.w = SDL_max(MINIMUM_BUTTON_WIDTH, GetGamepadButtonLabelWidth(setup_mapping_button) + 2 * BUTTON_PADDING); + area.h = GetGamepadButtonLabelHeight(setup_mapping_button) + 2 * BUTTON_PADDING; + area.x = BUTTON_MARGIN; + area.y = SCREEN_HEIGHT - BUTTON_MARGIN - area.h; + SetGamepadButtonArea(setup_mapping_button, &area); + + cancel_button = CreateGamepadButton(screen, "Cancel"); + area.w = SDL_max(MINIMUM_BUTTON_WIDTH, GetGamepadButtonLabelWidth(cancel_button) + 2 * BUTTON_PADDING); + area.h = GetGamepadButtonLabelHeight(cancel_button) + 2 * BUTTON_PADDING; + area.x = BUTTON_MARGIN; + area.y = SCREEN_HEIGHT - BUTTON_MARGIN - area.h; + SetGamepadButtonArea(cancel_button, &area); + + clear_button = CreateGamepadButton(screen, "Clear"); + area.x += area.w + BUTTON_PADDING; + area.w = SDL_max(MINIMUM_BUTTON_WIDTH, GetGamepadButtonLabelWidth(clear_button) + 2 * BUTTON_PADDING); + area.h = GetGamepadButtonLabelHeight(clear_button) + 2 * BUTTON_PADDING; + area.y = SCREEN_HEIGHT - BUTTON_MARGIN - area.h; + SetGamepadButtonArea(clear_button, &area); + + copy_button = CreateGamepadButton(screen, "Copy"); + area.x += area.w + BUTTON_PADDING; + area.w = SDL_max(MINIMUM_BUTTON_WIDTH, GetGamepadButtonLabelWidth(copy_button) + 2 * BUTTON_PADDING); + area.h = GetGamepadButtonLabelHeight(copy_button) + 2 * BUTTON_PADDING; + area.y = SCREEN_HEIGHT - BUTTON_MARGIN - area.h; + SetGamepadButtonArea(copy_button, &area); + + paste_button = CreateGamepadButton(screen, "Paste"); + area.x += area.w + BUTTON_PADDING; + area.w = SDL_max(MINIMUM_BUTTON_WIDTH, GetGamepadButtonLabelWidth(paste_button) + 2 * BUTTON_PADDING); + area.h = GetGamepadButtonLabelHeight(paste_button) + 2 * BUTTON_PADDING; + area.y = SCREEN_HEIGHT - BUTTON_MARGIN - area.h; + SetGamepadButtonArea(paste_button, &area); + + done_mapping_button = CreateGamepadButton(screen, "Done"); + area.w = SDL_max(MINIMUM_BUTTON_WIDTH, GetGamepadButtonLabelWidth(done_mapping_button) + 2 * BUTTON_PADDING); + area.h = GetGamepadButtonLabelHeight(done_mapping_button) + 2 * BUTTON_PADDING; + area.x = SCREEN_WIDTH / 2 - area.w / 2; + area.y = SCREEN_HEIGHT - BUTTON_MARGIN - area.h; + SetGamepadButtonArea(done_mapping_button, &area); + + /* Process the initial gamepad list */ + loop(NULL); + + if (gamepad_index < num_controllers) { + SetController(controllers[gamepad_index].id); + } else if (num_controllers > 0) { + SetController(controllers[0].id); + } + + /* Loop, getting gamepad events! */ +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop_arg(loop, NULL, 0, 1); +#else + while (!done) { + loop(NULL); + } +#endif + + CloseVirtualGamepad(); + while (num_controllers > 0) { + HandleGamepadRemoved(controllers[0].id); + DelController(controllers[0].id); + } + SDL_free(controllers); + SDL_free(controller_name); + DestroyGamepadImage(image); + DestroyGamepadDisplay(gamepad_elements); + DestroyGamepadTypeDisplay(gamepad_type); + DestroyJoystickDisplay(joystick_elements); + DestroyGamepadButton(setup_mapping_button); + DestroyGamepadButton(done_mapping_button); + DestroyGamepadButton(cancel_button); + DestroyGamepadButton(clear_button); + DestroyGamepadButton(copy_button); + DestroyGamepadButton(paste_button); + SDLTest_CleanupTextDrawing(); + SDL_DestroyRenderer(screen); + SDL_DestroyWindow(window); + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testcustomcursor.c b/vendor/sdl-3.0.0/test/testcustomcursor.c new file mode 100644 index 0000000..12d5420 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testcustomcursor.c @@ -0,0 +1,329 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include + +/* Stolen from the mailing list */ +/* Creates a new mouse cursor from an XPM */ + +/* XPM */ +static const char *arrow[] = { + /* width height num_colors chars_per_pixel */ + " 32 32 3 1", + /* colors */ + "X c #000000", + ". c #ffffff", + " c None", + /* pixels */ + "X ", + "XX ", + "X.X ", + "X..X ", + "X...X ", + "X....X ", + "X.....X ", + "X......X ", + "X.......X ", + "X........X ", + "X.....XXXXX ", + "X..X..X ", + "X.X X..X ", + "XX X..X ", + "X X..X ", + " X..X ", + " X..X ", + " X..X ", + " XX ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "0,0" +}; + +static SDL_Cursor * +init_color_cursor(const char *file) +{ + SDL_Cursor *cursor = NULL; + SDL_Surface *surface = SDL_LoadBMP(file); + if (surface) { + if (surface->format->palette) { + SDL_SetSurfaceColorKey(surface, 1, *(Uint8 *)surface->pixels); + } else { + switch (surface->format->BitsPerPixel) { + case 15: + SDL_SetSurfaceColorKey(surface, 1, (*(Uint16 *)surface->pixels) & 0x00007FFF); + break; + case 16: + SDL_SetSurfaceColorKey(surface, 1, *(Uint16 *)surface->pixels); + break; + case 24: + SDL_SetSurfaceColorKey(surface, 1, (*(Uint32 *)surface->pixels) & 0x00FFFFFF); + break; + case 32: + SDL_SetSurfaceColorKey(surface, 1, *(Uint32 *)surface->pixels); + break; + } + } + cursor = SDL_CreateColorCursor(surface, 0, 0); + SDL_DestroySurface(surface); + } + return cursor; +} + +static SDL_Cursor * +init_system_cursor(const char *image[]) +{ + int i, row, col; + Uint8 data[4 * 32]; + Uint8 mask[4 * 32]; + int hot_x = 0; + int hot_y = 0; + + i = -1; + for (row = 0; row < 32; ++row) { + for (col = 0; col < 32; ++col) { + if (col % 8) { + data[i] <<= 1; + mask[i] <<= 1; + } else { + ++i; + data[i] = mask[i] = 0; + } + switch (image[4 + row][col]) { + case 'X': + data[i] |= 0x01; + mask[i] |= 0x01; + break; + case '.': + mask[i] |= 0x01; + break; + case ' ': + break; + } + } + } + (void)SDL_sscanf(image[4 + row], "%d,%d", &hot_x, &hot_y); + return SDL_CreateCursor(data, mask, 32, 32, hot_x, hot_y); +} + +static SDLTest_CommonState *state; +static int done; +static SDL_Cursor *cursors[1 + SDL_NUM_SYSTEM_CURSORS]; +static SDL_SystemCursor cursor_types[1 + SDL_NUM_SYSTEM_CURSORS]; +static int num_cursors; +static int current_cursor; +static SDL_bool show_cursor; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static void loop(void) +{ + int i; + SDL_Event event; + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + if (event.type == SDL_EVENT_MOUSE_BUTTON_DOWN) { + if (event.button.button == SDL_BUTTON_LEFT) { + if (num_cursors == 0) { + continue; + } + + ++current_cursor; + if (current_cursor == num_cursors) { + current_cursor = 0; + } + + SDL_SetCursor(cursors[current_cursor]); + + switch ((int)cursor_types[current_cursor]) { + case (SDL_SystemCursor)-1: + SDL_Log("Custom cursor"); + break; + case SDL_SYSTEM_CURSOR_ARROW: + SDL_Log("Arrow"); + break; + case SDL_SYSTEM_CURSOR_IBEAM: + SDL_Log("I-beam"); + break; + case SDL_SYSTEM_CURSOR_WAIT: + SDL_Log("Wait"); + break; + case SDL_SYSTEM_CURSOR_CROSSHAIR: + SDL_Log("Crosshair"); + break; + case SDL_SYSTEM_CURSOR_WAITARROW: + SDL_Log("Small wait cursor (or Wait if not available)"); + break; + case SDL_SYSTEM_CURSOR_SIZENWSE: + SDL_Log("Double arrow pointing northwest and southeast"); + break; + case SDL_SYSTEM_CURSOR_SIZENESW: + SDL_Log("Double arrow pointing northeast and southwest"); + break; + case SDL_SYSTEM_CURSOR_SIZEWE: + SDL_Log("Double arrow pointing west and east"); + break; + case SDL_SYSTEM_CURSOR_SIZENS: + SDL_Log("Double arrow pointing north and south"); + break; + case SDL_SYSTEM_CURSOR_SIZEALL: + SDL_Log("Four pointed arrow pointing north, south, east, and west"); + break; + case SDL_SYSTEM_CURSOR_NO: + SDL_Log("Slashed circle or crossbones"); + break; + case SDL_SYSTEM_CURSOR_HAND: + SDL_Log("Hand"); + break; + default: + SDL_Log("UNKNOWN CURSOR TYPE, FIX THIS PROGRAM."); + break; + } + + } else { + show_cursor = !show_cursor; + if (show_cursor) { + SDL_ShowCursor(); + } else { + SDL_HideCursor(); + } + } + } + } + + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_RenderClear(renderer); + SDL_RenderPresent(renderer); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int main(int argc, char *argv[]) +{ + int i; + const char *color_cursor = NULL; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + color_cursor = argv[i]; + break; + } + if (consumed < 0) { + SDLTest_CommonLogUsage(state, argv[0], NULL); + quit(1); + } + i += consumed; + } + + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + + num_cursors = 0; + + if (color_cursor) { + SDL_Cursor *cursor = init_color_cursor(color_cursor); + if (cursor) { + cursors[num_cursors] = cursor; + cursor_types[num_cursors] = (SDL_SystemCursor)-1; + num_cursors++; + } + } else { + SDL_Cursor *cursor = init_system_cursor(arrow); + if (cursor) { + cursors[num_cursors] = cursor; + cursor_types[num_cursors] = (SDL_SystemCursor)-1; + num_cursors++; + } + } + + for (i = 0; i < SDL_NUM_SYSTEM_CURSORS; ++i) { + SDL_Cursor *cursor = SDL_CreateSystemCursor((SDL_SystemCursor)i); + if (cursor) { + cursors[num_cursors] = cursor; + cursor_types[num_cursors] = i; + num_cursors++; + } + } + + if (num_cursors > 0) { + SDL_SetCursor(cursors[0]); + } + + show_cursor = SDL_CursorVisible(); + + /* Main render loop */ + done = 0; +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + + for (i = 0; i < num_cursors; ++i) { + SDL_DestroyCursor(cursors[i]); + } + quit(0); + + /* keep the compiler happy ... */ + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testdisplayinfo.c b/vendor/sdl-3.0.0/test/testdisplayinfo.c new file mode 100644 index 0000000..009e45c --- /dev/null +++ b/vendor/sdl-3.0.0/test/testdisplayinfo.c @@ -0,0 +1,104 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Program to test querying of display info */ + +#include + +#include +#include +#include + +static void +print_mode(const char *prefix, const SDL_DisplayMode *mode) +{ + if (mode == NULL) { + return; + } + + SDL_Log("%s: %dx%d@%gx, %gHz, fmt=%s\n", + prefix, + mode->w, mode->h, mode->pixel_density, mode->refresh_rate, + SDL_GetPixelFormatName(mode->format)); +} + +int main(int argc, char *argv[]) +{ + SDL_DisplayID *displays; + const SDL_DisplayMode **modes; + const SDL_DisplayMode *mode; + int num_displays, i; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + /* Load the SDL library */ + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + SDL_Log("Using video target '%s'.\n", SDL_GetCurrentVideoDriver()); + displays = SDL_GetDisplays(&num_displays); + + SDL_Log("See %d displays.\n", num_displays); + + for (i = 0; i < num_displays; i++) { + SDL_DisplayID dpy = displays[i]; + SDL_Rect rect = { 0, 0, 0, 0 }; + int m, num_modes = 0; + + SDL_GetDisplayBounds(dpy, &rect); + modes = SDL_GetFullscreenDisplayModes(dpy, &num_modes); + SDL_Log("%" SDL_PRIu32 ": \"%s\" (%dx%d at %d,%d), content scale %.1f, %d fullscreen modes.\n", dpy, SDL_GetDisplayName(dpy), rect.w, rect.h, rect.x, rect.y, SDL_GetDisplayContentScale(dpy), num_modes); + + mode = SDL_GetCurrentDisplayMode(dpy); + if (mode) { + print_mode("CURRENT", mode); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, " CURRENT: failed to query (%s)\n", SDL_GetError()); + } + + mode = SDL_GetDesktopDisplayMode(dpy); + if (mode) { + print_mode("DESKTOP", mode); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, " DESKTOP: failed to query (%s)\n", SDL_GetError()); + } + + for (m = 0; m < num_modes; m++) { + char prefix[64]; + (void)SDL_snprintf(prefix, sizeof(prefix), " MODE %d", m); + print_mode(prefix, modes[m]); + } + SDL_free((void*)modes); + + SDL_Log("\n"); + } + SDL_free(displays); + + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testdraw.c b/vendor/sdl-3.0.0/test/testdraw.c new file mode 100644 index 0000000..d0c102c --- /dev/null +++ b/vendor/sdl-3.0.0/test/testdraw.c @@ -0,0 +1,314 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Simple program: draw as many random objects on the screen as possible */ + +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include +#include + +#define NUM_OBJECTS 100 + +static SDLTest_CommonState *state; +static int num_objects; +static SDL_bool cycle_color; +static SDL_bool cycle_alpha; +static int cycle_direction = 1; +static int current_alpha = 255; +static int current_color = 255; +static SDL_BlendMode blendMode = SDL_BLENDMODE_NONE; +static Uint64 next_fps_check; +static Uint32 frames; +static const int fps_check_delay = 5000; + +static int done; + +static void DrawPoints(SDL_Renderer *renderer) +{ + int i; + float x, y; + SDL_Rect viewport; + + /* Query the sizes */ + SDL_GetRenderViewport(renderer, &viewport); + + for (i = 0; i < num_objects * 4; ++i) { + /* Cycle the color and alpha, if desired */ + if (cycle_color) { + current_color += cycle_direction; + if (current_color < 0) { + current_color = 0; + cycle_direction = -cycle_direction; + } + if (current_color > 255) { + current_color = 255; + cycle_direction = -cycle_direction; + } + } + if (cycle_alpha) { + current_alpha += cycle_direction; + if (current_alpha < 0) { + current_alpha = 0; + cycle_direction = -cycle_direction; + } + if (current_alpha > 255) { + current_alpha = 255; + cycle_direction = -cycle_direction; + } + } + SDL_SetRenderDrawColor(renderer, 255, (Uint8)current_color, + (Uint8)current_color, (Uint8)current_alpha); + + x = (float)(rand() % viewport.w); + y = (float)(rand() % viewport.h); + SDL_RenderPoint(renderer, x, y); + } +} + +static void DrawLines(SDL_Renderer *renderer) +{ + int i; + float x1, y1, x2, y2; + SDL_Rect viewport; + + /* Query the sizes */ + SDL_GetRenderViewport(renderer, &viewport); + + for (i = 0; i < num_objects; ++i) { + /* Cycle the color and alpha, if desired */ + if (cycle_color) { + current_color += cycle_direction; + if (current_color < 0) { + current_color = 0; + cycle_direction = -cycle_direction; + } + if (current_color > 255) { + current_color = 255; + cycle_direction = -cycle_direction; + } + } + if (cycle_alpha) { + current_alpha += cycle_direction; + if (current_alpha < 0) { + current_alpha = 0; + cycle_direction = -cycle_direction; + } + if (current_alpha > 255) { + current_alpha = 255; + cycle_direction = -cycle_direction; + } + } + SDL_SetRenderDrawColor(renderer, 255, (Uint8)current_color, + (Uint8)current_color, (Uint8)current_alpha); + + if (i == 0) { + SDL_RenderLine(renderer, 0.0f, 0.0f, (float)(viewport.w - 1), (float)(viewport.h - 1)); + SDL_RenderLine(renderer, 0.0f, (float)(viewport.h - 1), (float)(viewport.w - 1), 0.0f); + SDL_RenderLine(renderer, 0.0f, (float)(viewport.h / 2), (float)(viewport.w - 1), (float)(viewport.h / 2)); + SDL_RenderLine(renderer, (float)(viewport.w / 2), 0.0f, (float)(viewport.w / 2), (float)(viewport.h - 1)); + } else { + x1 = (float)((rand() % (viewport.w * 2)) - viewport.w); + x2 = (float)((rand() % (viewport.w * 2)) - viewport.w); + y1 = (float)((rand() % (viewport.h * 2)) - viewport.h); + y2 = (float)((rand() % (viewport.h * 2)) - viewport.h); + SDL_RenderLine(renderer, x1, y1, x2, y2); + } + } +} + +static void DrawRects(SDL_Renderer *renderer) +{ + int i; + SDL_FRect rect; + SDL_Rect viewport; + + /* Query the sizes */ + SDL_GetRenderViewport(renderer, &viewport); + + for (i = 0; i < num_objects / 4; ++i) { + /* Cycle the color and alpha, if desired */ + if (cycle_color) { + current_color += cycle_direction; + if (current_color < 0) { + current_color = 0; + cycle_direction = -cycle_direction; + } + if (current_color > 255) { + current_color = 255; + cycle_direction = -cycle_direction; + } + } + if (cycle_alpha) { + current_alpha += cycle_direction; + if (current_alpha < 0) { + current_alpha = 0; + cycle_direction = -cycle_direction; + } + if (current_alpha > 255) { + current_alpha = 255; + cycle_direction = -cycle_direction; + } + } + SDL_SetRenderDrawColor(renderer, 255, (Uint8)current_color, + (Uint8)current_color, (Uint8)current_alpha); + + rect.w = (float)(rand() % (viewport.h / 2)); + rect.h = (float)(rand() % (viewport.h / 2)); + rect.x = (float)((rand() % (viewport.w * 2) - viewport.w) - (rect.w / 2)); + rect.y = (float)((rand() % (viewport.h * 2) - viewport.h) - (rect.h / 2)); + SDL_RenderFillRect(renderer, &rect); + } +} + +static void loop(void) +{ + Uint64 now; + int i; + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + if (state->windows[i] == NULL) { + continue; + } + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + DrawRects(renderer); + DrawLines(renderer); + DrawPoints(renderer); + + SDL_RenderPresent(renderer); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif + frames++; + now = SDL_GetTicks(); + if (now >= next_fps_check) { + /* Print out some timing information */ + const Uint64 then = next_fps_check - fps_check_delay; + const double fps = ((double)frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + next_fps_check = now + fps_check_delay; + frames = 0; + } +} + +int main(int argc, char *argv[]) +{ + int i; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize parameters */ + num_objects = NUM_OBJECTS; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--blend") == 0) { + if (argv[i + 1]) { + if (SDL_strcasecmp(argv[i + 1], "none") == 0) { + blendMode = SDL_BLENDMODE_NONE; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "blend") == 0) { + blendMode = SDL_BLENDMODE_BLEND; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "add") == 0) { + blendMode = SDL_BLENDMODE_ADD; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "mod") == 0) { + blendMode = SDL_BLENDMODE_MOD; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "mul") == 0) { + blendMode = SDL_BLENDMODE_MUL; + consumed = 2; + } + } + } else if (SDL_strcasecmp(argv[i], "--cyclecolor") == 0) { + cycle_color = SDL_TRUE; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--cyclealpha") == 0) { + cycle_alpha = SDL_TRUE; + consumed = 1; + } else if (SDL_isdigit(*argv[i])) { + num_objects = SDL_atoi(argv[i]); + consumed = 1; + } + } + if (consumed < 0) { + static const char *options[] = { + "[--blend none|blend|add|mod|mul]", + "[--cyclecolor]", + "[--cyclealpha]", + "[num_objects]", + NULL + }; + SDLTest_CommonLogUsage(state, argv[0], options); + return 1; + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + return 2; + } + + /* Create the windows and initialize the renderers */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawBlendMode(renderer, blendMode); + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + + srand((unsigned int)time(NULL)); + + /* Main render loop */ + frames = 0; + next_fps_check = SDL_GetTicks() + fps_check_delay; + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + + SDLTest_CommonQuit(state); + + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testdrawchessboard.c b/vendor/sdl-3.0.0/test/testdrawchessboard.c new file mode 100644 index 0000000..3754105 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testdrawchessboard.c @@ -0,0 +1,160 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. + + This file is created by : Nitin Jain (nitin.j4\samsung.com) +*/ + +/* Sample program: Draw a Chess Board by using SDL_CreateSoftwareRenderer API */ + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include +#include + +static SDL_Window *window; +static SDL_Renderer *renderer; +static SDL_Surface *surface; +static int done; + + +static void DrawChessBoard(void) +{ + int row = 0, column = 0, x = 0; + SDL_FRect rect; + SDL_Rect darea; + + /* Get the Size of drawing surface */ + SDL_GetRenderViewport(renderer, &darea); + + for (; row < 8; row++) { + column = row % 2; + x = column; + for (; column < 4 + (row % 2); column++) { + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0xFF); + + rect.w = (float)(darea.w / 8); + rect.h = (float)(darea.h / 8); + rect.x = (float)(x * rect.w); + rect.y = (float)(row * rect.h); + x = x + 2; + SDL_RenderFillRect(renderer, &rect); + + /* Draw a red diagonal line through the upper left rectangle */ + if (column == 0 && row == 0) { + SDL_SetRenderDrawColor(renderer, 0xFF, 0, 0, 0xFF); + SDL_RenderLine(renderer, 0, 0, rect.w, rect.h); + } + } + } +} + +static void loop(void) +{ + SDL_Event e; + while (SDL_PollEvent(&e)) { + + /* Re-create when window surface has been resized */ + if (e.type == SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED) { + + SDL_DestroyRenderer(renderer); + + surface = SDL_GetWindowSurface(window); + renderer = SDL_CreateSoftwareRenderer(surface); + /* Clear the rendering surface with the specified color */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); + SDL_RenderClear(renderer); + } + + if (e.type == SDL_EVENT_QUIT) { + done = 1; +#ifdef __EMSCRIPTEN__ + emscripten_cancel_main_loop(); +#endif + return; + } + + if ((e.type == SDL_EVENT_KEY_DOWN) && (e.key.keysym.sym == SDLK_ESCAPE)) { + done = 1; +#ifdef __EMSCRIPTEN__ + emscripten_cancel_main_loop(); +#endif + return; + } + } + + DrawChessBoard(); + + /* Got everything on rendering surface, + now Update the drawing image on window screen */ + SDL_UpdateWindowSurface(window); +} + +int main(int argc, char *argv[]) +{ + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + /* Initialize SDL */ + if (SDL_Init(SDL_INIT_VIDEO) != 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init fail : %s\n", SDL_GetError()); + return 1; + } + + /* Create window and renderer for given surface */ + window = SDL_CreateWindow("Chess Board", 640, 480, SDL_WINDOW_RESIZABLE); + if (window == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Window creation fail : %s\n", SDL_GetError()); + return 1; + } + surface = SDL_GetWindowSurface(window); + renderer = SDL_CreateSoftwareRenderer(surface); + if (renderer == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Render creation for surface fail : %s\n", SDL_GetError()); + return 1; + } + + /* Clear the rendering surface with the specified color */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); + SDL_RenderClear(renderer); + + /* Draw the Image on rendering surface */ + done = 0; +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testdropfile.c b/vendor/sdl-3.0.0/test/testdropfile.c new file mode 100644 index 0000000..2e4efed --- /dev/null +++ b/vendor/sdl-3.0.0/test/testdropfile.c @@ -0,0 +1,111 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +#include +#include + +static SDLTest_CommonState *state; + +int main(int argc, char *argv[]) +{ + int i, done; + SDL_Event event; + SDL_bool is_hover = SDL_FALSE; + float x = 0.0f, y = 0.0f; + unsigned int windowID = 0; + int return_code = -1; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + /* needed voodoo to allow app to launch via macOS Finder */ + if (SDL_strncmp(argv[i], "-psn", 4) == 0) { + consumed = 1; + } + if (consumed == 0) { + consumed = -1; + } + if (consumed < 0) { + SDLTest_CommonLogUsage(state, argv[0], NULL); + return_code = 1; + goto quit; + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + return_code = 1; + goto quit; + } + + + SDL_SetEventEnabled(SDL_EVENT_DROP_FILE, SDL_TRUE); + + /* Main render loop */ + done = 0; + while (!done) { + /* Check for events */ + while (SDL_PollEvent(&event)) { + if (event.type == SDL_EVENT_DROP_BEGIN) { + SDL_Log("Drop beginning on window %u at (%f, %f)", (unsigned int)event.drop.windowID, event.drop.x, event.drop.y); + } else if (event.type == SDL_EVENT_DROP_COMPLETE) { + is_hover = SDL_FALSE; + SDL_Log("Drop complete on window %u at (%f, %f)", (unsigned int)event.drop.windowID, event.drop.x, event.drop.y); + } else if ((event.type == SDL_EVENT_DROP_FILE) || (event.type == SDL_EVENT_DROP_TEXT)) { + const char *typestr = (event.type == SDL_EVENT_DROP_FILE) ? "File" : "Text"; + char *dropped_filedir = event.drop.file; + SDL_Log("%s dropped on window %u: %s at (%f, %f)", typestr, (unsigned int)event.drop.windowID, dropped_filedir, event.drop.x, event.drop.y); + /* Normally you'd have to do this, but this is freed in SDLTest_CommonEvent() */ + /*SDL_free(dropped_filedir);*/ + } else if (event.type == SDL_EVENT_DROP_POSITION) { + is_hover = SDL_TRUE; + x = event.drop.x; + y = event.drop.y; + windowID = event.drop.windowID; + SDL_Log("Drop position on window %u at (%f, %f) file = %s", (unsigned int)event.drop.windowID, event.drop.x, event.drop.y, event.drop.file); + } + + SDLTest_CommonEvent(state, &event, &done); + } + + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + if (is_hover) { + if (windowID == SDL_GetWindowID(SDL_GetRenderWindow(renderer))) { + int len = 2000; + SDL_SetRenderDrawColor(renderer, 0x0A, 0x0A, 0x0A, 0xFF); + SDL_RenderLine(renderer, x, y - len, x, y + len); + SDL_RenderLine(renderer, x - len, y, x + len, y); + } + } + SDL_RenderPresent(renderer); + } + + SDL_Delay(16); + } + + return_code = 0; +quit: + SDLTest_CommonQuit(state); + return return_code; +} diff --git a/vendor/sdl-3.0.0/test/testerror.c b/vendor/sdl-3.0.0/test/testerror.c new file mode 100644 index 0000000..b52c206 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testerror.c @@ -0,0 +1,98 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Simple test of the SDL threading code and error handling */ + +#include + +#include +#include +#include + +static int alive = 0; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static int SDLCALL +ThreadFunc(void *data) +{ + /* Set the child thread error string */ + SDL_SetError("Thread %s (%lu) had a problem: %s", + (char *)data, SDL_ThreadID(), "nevermind"); + while (alive) { + SDL_Log("Thread '%s' is alive!\n", (char *)data); + SDL_Delay(1 * 1000); + } + SDL_Log("Child thread error string: %s\n", SDL_GetError()); + return 0; +} + +int main(int argc, char *argv[]) +{ + SDL_Thread *thread; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + /* Load the SDL library */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + /* Set the error value for the main thread */ + SDL_SetError("No worries"); + + if (SDL_getenv("SDL_TESTS_QUICK") != NULL) { + SDL_Log("Not running slower tests"); + SDL_Quit(); + return 0; + } + + alive = 1; + thread = SDL_CreateThread(ThreadFunc, NULL, "#1"); + if (thread == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n", SDL_GetError()); + quit(1); + } + SDL_Delay(5 * 1000); + SDL_Log("Waiting for thread #1\n"); + alive = 0; + SDL_WaitThread(thread, NULL); + + SDL_Log("Main thread error string: %s\n", SDL_GetError()); + + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testevdev.c b/vendor/sdl-3.0.0/test/testevdev.c new file mode 100644 index 0000000..9758bbe --- /dev/null +++ b/vendor/sdl-3.0.0/test/testevdev.c @@ -0,0 +1,1956 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + Copyright (C) 2020-2022 Collabora Ltd. + + 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. +*/ + +#include +#include +#include + +/* Hack to avoid dynapi renaming */ +#include "../src/dynapi/SDL_dynapi.h" +#ifdef SDL_DYNAMIC_API +#undef SDL_DYNAMIC_API +#endif +#define SDL_DYNAMIC_API 0 + +#include "../src/SDL_internal.h" + +#include +#include + +static int run_test(void); + +/* FIXME: Need CMake tests for this */ +#if (defined(HAVE_LIBUDEV_H) || defined(SDL_JOYSTICK_LINUX)) && defined(HAVE_LINUX_INPUT_H) + +#include + +#include "../src/core/linux/SDL_evdev_capabilities.h" +#include "../src/core/linux/SDL_evdev_capabilities.c" + +static const struct +{ + int code; + const char *name; +} device_classes[] = { +#define CLS(x) \ + { \ + SDL_UDEV_DEVICE_##x, #x \ + } + CLS(MOUSE), + CLS(KEYBOARD), + CLS(HAS_KEYS), + CLS(JOYSTICK), + CLS(SOUND), + CLS(TOUCHSCREEN), + CLS(ACCELEROMETER), + CLS(TOUCHPAD), +#undef CLS + { 0, NULL } +}; + +typedef struct +{ + const char *name; + const char *eviocgname; + const char *usb_vendor_name; + const char *usb_product_name; + uint16_t bus_type; + uint16_t vendor_id; + uint16_t product_id; + uint16_t version; + uint8_t ev[(EV_MAX + 1) / 8]; + uint8_t keys[(KEY_MAX + 1) / 8]; + uint8_t abs[(ABS_MAX + 1) / 8]; + uint8_t rel[(REL_MAX + 1) / 8]; + uint8_t ff[(FF_MAX + 1) / 8]; + uint8_t props[(INPUT_PROP_MAX + 1) / 8]; + int expected; + const char *todo; + size_t hid_report_descriptor_length; + const unsigned char *hid_report_descriptor; +} GuessTest; + +/* + * Test-cases for guessing a device type from its capabilities. + * + * The bytes in ev, etc. are in little-endian byte order + * Trailing zeroes can be omitted. + * + * The evemu-describe tool is a convenient way to add a test-case for + * a physically available device. To contribute new test-cases, see: + * https://github.com/libsdl-org/SDL/issues/7801#issuecomment-1589114910 + */ +#define ZEROx4 0, 0, 0, 0 +#define ZEROx8 ZEROx4, ZEROx4 +#define FFx4 0xff, 0xff, 0xff, 0xff +#define FFx8 FFx4, FFx4 + +static unsigned char xbox_one_elite_2_hid_report_descriptor[] = +{ + /* Generic Desktop / Game Pad, Generic Desktop / Keyboard */ + 0x05, 0x01, 0x09, 0x05, 0xa1, 0x01, 0x85, 0x01, + 0x09, 0x01, 0xa1, 0x00, 0x09, 0x30, 0x09, 0x31, + 0x15, 0x00, 0x27, 0xff, 0xff, 0x00, 0x00, 0x95, + 0x02, 0x75, 0x10, 0x81, 0x02, 0xc0, 0x09, 0x01, + 0xa1, 0x00, 0x09, 0x32, 0x09, 0x35, 0x15, 0x00, + 0x27, 0xff, 0xff, 0x00, 0x00, 0x95, 0x02, 0x75, + 0x10, 0x81, 0x02, 0xc0, 0x05, 0x02, 0x09, 0xc5, + 0x15, 0x00, 0x26, 0xff, 0x03, 0x95, 0x01, 0x75, + 0x0a, 0x81, 0x02, 0x15, 0x00, 0x25, 0x00, 0x75, + 0x06, 0x95, 0x01, 0x81, 0x03, 0x05, 0x02, 0x09, + 0xc4, 0x15, 0x00, 0x26, 0xff, 0x03, 0x95, 0x01, + 0x75, 0x0a, 0x81, 0x02, 0x15, 0x00, 0x25, 0x00, + 0x75, 0x06, 0x95, 0x01, 0x81, 0x03, 0x05, 0x01, + 0x09, 0x39, 0x15, 0x01, 0x25, 0x08, 0x35, 0x00, + 0x46, 0x3b, 0x01, 0x66, 0x14, 0x00, 0x75, 0x04, + 0x95, 0x01, 0x81, 0x42, 0x75, 0x04, 0x95, 0x01, + 0x15, 0x00, 0x25, 0x00, 0x35, 0x00, 0x45, 0x00, + 0x65, 0x00, 0x81, 0x03, 0x05, 0x09, 0x19, 0x01, + 0x29, 0x0f, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, + 0x95, 0x0f, 0x81, 0x02, 0x15, 0x00, 0x25, 0x00, + 0x75, 0x01, 0x95, 0x01, 0x81, 0x03, 0x05, 0x0c, + 0x0a, 0xb2, 0x00, 0x15, 0x00, 0x25, 0x01, 0x95, + 0x01, 0x75, 0x01, 0x81, 0x02, 0x15, 0x00, 0x25, + 0x00, 0x75, 0x07, 0x95, 0x01, 0x81, 0x03, 0x05, + 0x0c, 0x09, 0x01, 0xa1, 0x01, 0x0a, 0x85, 0x00, + 0x15, 0x00, 0x26, 0xff, 0x00, 0x95, 0x01, 0x75, + 0x08, 0x81, 0x02, 0x0a, 0x99, 0x00, 0x15, 0x00, + 0x26, 0xff, 0x00, 0x95, 0x01, 0x75, 0x04, 0x81, + 0x02, 0x15, 0x00, 0x25, 0x00, 0x95, 0x01, 0x75, + 0x04, 0x81, 0x03, 0x0a, 0x81, 0x00, 0x15, 0x00, + 0x26, 0xff, 0x00, 0x95, 0x01, 0x75, 0x04, 0x81, + 0x02, 0x15, 0x00, 0x25, 0x00, 0x95, 0x01, 0x75, + 0x04, 0x81, 0x03, 0xc0, 0x05, 0x0f, 0x09, 0x21, + 0x85, 0x03, 0xa1, 0x02, 0x09, 0x97, 0x15, 0x00, + 0x25, 0x01, 0x75, 0x04, 0x95, 0x01, 0x91, 0x02, + 0x15, 0x00, 0x25, 0x00, 0x75, 0x04, 0x95, 0x01, + 0x91, 0x03, 0x09, 0x70, 0x15, 0x00, 0x25, 0x64, + 0x75, 0x08, 0x95, 0x04, 0x91, 0x02, 0x09, 0x50, + 0x66, 0x01, 0x10, 0x55, 0x0e, 0x15, 0x00, 0x26, + 0xff, 0x00, 0x75, 0x08, 0x95, 0x01, 0x91, 0x02, + 0x09, 0xa7, 0x15, 0x00, 0x26, 0xff, 0x00, 0x75, + 0x08, 0x95, 0x01, 0x91, 0x02, 0x65, 0x00, 0x55, + 0x00, 0x09, 0x7c, 0x15, 0x00, 0x26, 0xff, 0x00, + 0x75, 0x08, 0x95, 0x01, 0x91, 0x02, 0xc0, 0x05, + 0x0c, 0x09, 0x01, 0x85, 0x0c, 0xa1, 0x01, 0x0a, + 0x9e, 0x00, 0x15, 0x00, 0x26, 0xff, 0x00, 0x95, + 0x01, 0x75, 0x08, 0x81, 0x02, 0x0a, 0xa1, 0x00, + 0x15, 0x00, 0x26, 0xff, 0x00, 0x95, 0x01, 0x75, + 0x08, 0x81, 0x02, 0x0a, 0xa2, 0x00, 0x15, 0x00, + 0x26, 0xff, 0x00, 0x95, 0x01, 0x75, 0x08, 0x81, + 0x02, 0x0a, 0xa3, 0x00, 0x15, 0x00, 0x26, 0xff, + 0x00, 0x95, 0x01, 0x75, 0x08, 0x81, 0x02, 0xc0, + 0xc0, 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x85, + 0x05, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, + 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x08, 0x81, + 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x03, 0x95, + 0x06, 0x75, 0x08, 0x15, 0x00, 0x25, 0x65, 0x05, + 0x07, 0x19, 0x00, 0x29, 0x65, 0x81, 0x00, 0xc0, +}; +SDL_COMPILE_TIME_ASSERT (xbox_one_elite_2, sizeof (xbox_one_elite_2_hid_report_descriptor) == 0720); + +static unsigned char ps3_hid_report_descriptor[] = +{ + /* Generic Desktop / Joystick */ + 0x05, 0x01, 0x09, 0x04, 0xa1, 0x01, 0xa1, 0x02, + 0x85, 0x01, 0x75, 0x08, 0x95, 0x01, 0x15, 0x00, + 0x26, 0xff, 0x00, 0x81, 0x03, 0x75, 0x01, 0x95, + 0x13, 0x15, 0x00, 0x25, 0x01, 0x35, 0x00, 0x45, + 0x01, 0x05, 0x09, 0x19, 0x01, 0x29, 0x13, 0x81, + 0x02, 0x75, 0x01, 0x95, 0x0d, 0x06, 0x00, 0xff, + 0x81, 0x03, 0x15, 0x00, 0x26, 0xff, 0x00, 0x05, + 0x01, 0x09, 0x01, 0xa1, 0x00, 0x75, 0x08, 0x95, + 0x04, 0x35, 0x00, 0x46, 0xff, 0x00, 0x09, 0x30, + 0x09, 0x31, 0x09, 0x32, 0x09, 0x35, 0x81, 0x02, + 0xc0, 0x05, 0x01, 0x75, 0x08, 0x95, 0x27, 0x09, + 0x01, 0x81, 0x02, 0x75, 0x08, 0x95, 0x30, 0x09, + 0x01, 0x91, 0x02, 0x75, 0x08, 0x95, 0x30, 0x09, + 0x01, 0xb1, 0x02, 0xc0, 0xa1, 0x02, 0x85, 0x02, + 0x75, 0x08, 0x95, 0x30, 0x09, 0x01, 0xb1, 0x02, + 0xc0, 0xa1, 0x02, 0x85, 0xee, 0x75, 0x08, 0x95, + 0x30, 0x09, 0x01, 0xb1, 0x02, 0xc0, 0xa1, 0x02, + 0x85, 0xef, 0x75, 0x08, 0x95, 0x30, 0x09, 0x01, + 0xb1, 0x02, 0xc0, 0xc0, 0x00, +}; +SDL_COMPILE_TIME_ASSERT (ps3, sizeof (ps3_hid_report_descriptor) == 149); + +#if 0 /* unused for now */ +static unsigned char vrs_pedals_hid_report_descriptor[] = +{ + /* Generic Desktop / Joystick */ + 0x05, 0x01, 0x09, 0x04, 0xa1, 0x01, 0x05, 0x01, + 0xa1, 0x02, 0x85, 0x01, 0x09, 0x30, 0x09, 0x31, + 0x09, 0x32, 0x15, 0x00, 0x27, 0xff, 0xff, 0x00, + 0x00, 0x35, 0x00, 0x47, 0xff, 0xff, 0x00, 0x00, + 0x75, 0x10, 0x95, 0x03, 0x81, 0x02, 0x06, 0x00, + 0xff, 0x09, 0x01, 0x95, 0x39, 0x75, 0x08, 0x26, + 0xff, 0x00, 0x15, 0x00, 0x81, 0x02, 0xc0, 0x06, + 0x00, 0xff, 0x09, 0x01, 0xa1, 0x01, 0x85, 0x64, + 0x95, 0x3f, 0x75, 0x08, 0x26, 0xff, 0x00, 0x15, + 0x00, 0x09, 0x01, 0x91, 0x02, 0x85, 0x65, 0x95, + 0x3f, 0x75, 0x08, 0x26, 0xff, 0x00, 0x15, 0x00, + 0x09, 0x01, 0x81, 0x02, 0xc0, 0xc0, +}; +SDL_COMPILE_TIME_ASSERT (vrs_pedals, sizeof (vrs_pedals_hid_report_descriptor) == 0136); +#endif + +static unsigned char thinkpad_usb_keyboard_hid_report_descriptor[] = +{ + /* Generic Desktop / Keyboard */ + 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x05, 0x07, + 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, + 0x95, 0x08, 0x75, 0x01, 0x81, 0x02, 0x95, 0x08, + 0x75, 0x01, 0x81, 0x01, 0x05, 0x08, 0x19, 0x01, + 0x29, 0x03, 0x95, 0x03, 0x75, 0x01, 0x91, 0x02, + 0x95, 0x01, 0x75, 0x05, 0x91, 0x01, 0x05, 0x07, + 0x19, 0x00, 0x2a, 0xff, 0x00, 0x15, 0x00, 0x26, + 0xff, 0x00, 0x95, 0x06, 0x75, 0x08, 0x81, 0x00, + 0xc0, +}; +SDL_COMPILE_TIME_ASSERT (thinkpad_usb_keyboard, sizeof (thinkpad_usb_keyboard_hid_report_descriptor) == 65); + +static unsigned char thinkpad_usb_trackpoint_hid_report_descriptor[] = +{ + /* Generic Desktop / Mouse, Generic Desktop / System Control, + * Consumer Devices / Consumer Control */ + 0x05, 0x01, 0x09, 0x02, 0xa1, 0x01, 0x85, 0x01, + 0x09, 0x01, 0xa1, 0x00, 0x05, 0x09, 0x19, 0x01, + 0x29, 0x03, 0x15, 0x00, 0x25, 0x01, 0x95, 0x03, + 0x75, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x05, + 0x81, 0x01, 0x05, 0x01, 0x09, 0x30, 0x09, 0x31, + 0x15, 0x81, 0x25, 0x7f, 0x95, 0x02, 0x75, 0x08, + 0x81, 0x06, 0xc0, 0xc0, 0x05, 0x01, 0x09, 0x80, + 0xa1, 0x01, 0x85, 0x02, 0x05, 0x01, 0x15, 0x00, + 0x25, 0x01, 0x95, 0x08, 0x75, 0x01, 0x19, 0x81, + 0x29, 0x88, 0x81, 0x02, 0xc0, 0x05, 0x0c, 0x09, + 0x01, 0xa1, 0x01, 0x85, 0x03, 0x95, 0x08, 0x75, + 0x01, 0x15, 0x00, 0x25, 0x01, 0x09, 0xe9, 0x09, + 0xea, 0x09, 0xe2, 0x09, 0xb7, 0x09, 0xcd, 0x09, + 0xb5, 0x09, 0xb6, 0x0a, 0x94, 0x01, 0x81, 0x02, + 0x09, 0x03, 0xa1, 0x02, 0x05, 0x09, 0x19, 0x10, + 0x29, 0x17, 0x81, 0x02, 0x05, 0x09, 0x19, 0x18, + 0x29, 0x1f, 0x81, 0x02, 0xc0, 0x05, 0x08, 0x95, + 0x02, 0x09, 0x09, 0x09, 0x21, 0x91, 0x02, 0x95, + 0x01, 0x75, 0x06, 0x91, 0x03, 0xc0, 0x06, 0x01, + 0xff, 0x09, 0x01, 0xa1, 0x01, 0x85, 0x04, 0x95, + 0x01, 0x75, 0x08, 0x15, 0x00, 0x26, 0xff, 0x00, + 0x09, 0x20, 0xb1, 0x03, 0x09, 0x21, 0xb1, 0x03, + 0x09, 0x22, 0xb1, 0x03, 0x09, 0x23, 0xb1, 0x03, + 0xc0, +}; +SDL_COMPILE_TIME_ASSERT (thinkpad_usb_trackpoint, sizeof (thinkpad_usb_trackpoint_hid_report_descriptor) == 185); + +#if 0 /* unused for now */ +static unsigned char heusinkveld_pedals_hid_report_descriptor[] = +{ + /* Generic Desktop / Joystick */ + 0x05, 0x01, 0x09, 0x04, 0xa1, 0x01, 0x09, 0x33, + 0x09, 0x34, 0x09, 0x35, 0x15, 0x00, 0x26, 0xff, + 0x0f, 0x85, 0x01, 0x75, 0x10, 0x95, 0x03, 0x81, + 0x02, 0x09, 0x00, 0x75, 0x10, 0x95, 0x06, 0x82, + 0x01, 0x01, 0x85, 0x02, 0x75, 0x10, 0x95, 0x03, + 0x09, 0x00, 0x09, 0x00, 0xb1, 0x02, 0x85, 0x03, + 0x75, 0x08, 0x95, 0x03, 0x09, 0x00, 0x82, 0x01, + 0x01, 0xc0, +}; +SDL_COMPILE_TIME_ASSERT (heusinkveld_pedals, sizeof (heusinkveld_pedals_hid_report_descriptor) == 072); +#endif + +static unsigned char fanatec_handbrake_hid_report_descriptor[] = +{ + /* Generic Desktop / Joystick */ + 0x05, 0x01, 0x09, 0x04, 0xa1, 0x01, 0x15, 0x00, + 0x26, 0xff, 0x00, 0x95, 0x01, 0x75, 0x08, 0x09, + 0x30, 0x81, 0x02, 0x06, 0x00, 0xff, 0x09, 0x01, + 0x95, 0x03, 0x81, 0x02, 0x06, 0x00, 0xff, 0x09, + 0x01, 0x95, 0x02, 0x91, 0x02, 0xc0, +}; +SDL_COMPILE_TIME_ASSERT (fanatec_handbrake, sizeof (fanatec_handbrake_hid_report_descriptor) == 046); + +/* Test-cases derived from real devices or from Linux kernel source */ +/* *INDENT-OFF* */ /* clang-format off */ +static const GuessTest guess_tests[] = +{ + { + .name = "Xbox 360 wired USB controller", + .eviocgname = "Microsoft X-Box 360 pad", + .usb_vendor_name = "©Microsoft Corporation", + .usb_product_name = "Controller", + /* 8BitDo N30 Pro 2 v0114 via USB-C (with the xpad driver) is + * reported as 0003:045e:028e v0114, and is functionally equivalent */ + .bus_type = 0x0003, + .vendor_id = 0x045e, + .product_id = 0x028e, + .version = 0x0114, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS, FF */ + .ev = { 0x0b, 0x00, 0x20 }, + /* X, Y, Z, RX, RY, RZ, HAT0X, HAT0Y */ + .abs = { 0x3f, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* A, B, X, Y, TL, TR, SELECT, START, MODE, THUMBL, THUMBR */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xdb, 0x7c, + }, + }, + { + .name = "X-Box One Elite", + .bus_type = 0x0003, + .vendor_id = 0x045e, + .product_id = 0x02e3, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, Z, RX, RY, RZ, HAT0X, HAT0Y */ + .abs = { 0x3f, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* A, B, X, Y, TL, TR, SELECT, START, MODE, THUMBL, THUMBR */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xdb, 0x7c, + }, + }, + { /* Reference: https://github.com/libsdl-org/SDL/issues/7814 */ + .name = "X-Box One Elite 2 via USB", + /* The same physical device via Bluetooth, 0005:045e:0b22 v0517, + * is reported differently (below). */ + /* Version 0407 is functionally equivalent. */ + .bus_type = 0x0003, + .vendor_id = 0x045e, + .product_id = 0x0b00, + .version = 0x0511, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS, FF */ + .ev = { 0x0b, 0x00, 0x20 }, + /* XY (left stick), RX/RY (right stick), Z/RZ (triggers), HAT0 (dpad) */ + .abs = { 0x3f, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* A, B, X, Y, TL, TR, SELECT, START, MODE, THUMBL, THUMBR */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xdb, 0x7c, + /* 0x140 */ ZEROx8, + /* 0x180 */ ZEROx8, + /* 0x1c0 */ ZEROx8, + /* 0x200 */ ZEROx8, + /* 0x240 */ ZEROx8, + /* 0x280 */ ZEROx8, + /* BTN_TRIGGER_HAPPY5 up to BTN_TRIGGER_HAPPY8 inclusive are the + * back buttons (paddles) */ + /* 0x2c0 */ 0xf0, + }, + }, + { /* Reference: https://github.com/libsdl-org/SDL/issues/7814 */ + .name = "X-Box One Elite 2 via Bluetooth", + /* The same physical device via USB, 0003:045e:0b00 v0511, + * is reported differently (above). */ + .bus_type = 0x0003, + .vendor_id = 0x045e, + .product_id = 0x0b22, + .version = 0x0517, + .expected = SDL_UDEV_DEVICE_JOYSTICK | SDL_UDEV_DEVICE_HAS_KEYS, + /* SYN, KEY, ABS, FF */ + .ev = { 0x0b, 0x00, 0x20 }, + /* Android-style mapping: + * XY (left stick), Z/RZ (right stick), GAS/BRAKE (triggers), HAT0 (dpad) */ + .abs = { 0x27, 0x06, 0x03 }, + .keys = { + /* 0x00 */ ZEROx8, + /* 0x40 */ ZEROx8, + /* KEY_RECORD is advertised but isn't generated in practice */ + /* 0x80 */ ZEROx4, 0x80, 0x00, 0x00, 0x00, + /* KEY_UNKNOWN (240) is reported for the profile selector and all + * four back buttons (paddles) */ + /* 0xc0 */ ZEROx4, 0x00, 0x00, 0x01, 0x00, + /* ABXY, TL, TR, TL2, TR2, SELECT, START, MODE, THUMBL, + * THUMBR have their obvious meanings; C and Z are also + * advertised, but are not generated in practice. */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xff, 0x7f, + }, + .hid_report_descriptor_length = sizeof (xbox_one_elite_2_hid_report_descriptor), + .hid_report_descriptor = &xbox_one_elite_2_hid_report_descriptor[0], + }, + { + .name = "X-Box One S via Bluetooth", + .bus_type = 0x0005, + .vendor_id = 0x045e, + .product_id = 0x02e0, + .version = 0x1130, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, Z, RX, RY, RZ, HAT0X, HAT0Y */ + .abs = { 0x3f, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* A, B, X, Y, TL, TR, SELECT, START, MODE, THUMBL, THUMBR */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xdb, 0x7c, + }, + }, + { + .name = "X-Box One S wired", + .bus_type = 0x0003, + .vendor_id = 0x045e, + .product_id = 0x02ea, + .version = 0x0301, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, Z, RX, RY, RZ, HAT0X, HAT0Y */ + .abs = { 0x3f, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* A, B, X, Y, TL, TR, SELECT, START, MODE, THUMBL, THUMBR */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xdb, 0x7c, + }, + }, + { + .name = "DualSense (PS5) - gamepad", + .bus_type = 0x0003, + .vendor_id = 0x054c, + .product_id = 0x0ce6, + .version = 0x111, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, Z, RX, RY, RZ, HAT0X, HAT0Y */ + .abs = { 0x3f, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* ABC, XYZ, TL, TR, TL2, TR2, select, start, mode, thumbl, + * thumbr; note that C and Z don't physically exist */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xff, 0x7f, + }, + }, + { + .name = "DualSense (PS5) v8111 - gamepad", + .eviocgname = "Sony Interactive Entertainment Wireless Controller", + .usb_vendor_name = "Sony Interactive Entertainment", + .usb_product_name = "Wireless Controller", + /* Same physical device via Bluetooth is 0005:054c:0ce6 v8100 + * and EVIOCGNAME is just "Wireless Controller", otherwise equivalent */ + .bus_type = 0x0003, + .vendor_id = 0x054c, + .product_id = 0x0ce6, + .version = 0x8111, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, Z, RX, RY, RZ, HAT0X, HAT0Y */ + .abs = { 0x3f, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* A, B, X, Y, TL, TR, TL2, TR2, SELECT, START, MODE, + * THUMBL, THUMBR */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xdb, 0x7f, + }, + }, + { + .name = "DualShock 4 - gamepad", + /* EVIOCGNAME is just "Wireless Controller" when seen via Bluetooth */ + .eviocgname = "Sony Interactive Entertainment Wireless Controller", + .usb_vendor_name = "Sony Interactive Entertainment", + .usb_product_name = "Wireless Controller", + /* Same physical device via Bluetooth is 0005:054c:09cc v8100, + * but otherwise equivalent */ + .bus_type = 0x0003, + .vendor_id = 0x054c, + .product_id = 0x09cc, + .version = 0x8111, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS, MSC, FF */ + /* Some versions only have 0x0b, SYN, KEY, ABS, like the + * Bluetooth example below */ + .ev = { 0x1b, 0x00, 0x20 }, + /* X, Y, Z, RX, RY, RZ, HAT0X, HAT0Y */ + .abs = { 0x3f, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* A, B, X, Y, TL, TR, TL2, TR2, SELECT, START, MODE, + * THUMBL, THUMBR */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xdb, 0x7f, + }, + }, + { + .name = "DualShock 4 - gamepad via Bluetooth (unknown version)", + .bus_type = 0x0005, + .vendor_id = 0x054c, + .product_id = 0x09cc, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, Z, RX, RY, RZ, HAT0X, HAT0Y */ + .abs = { 0x3f, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* A, B, X, Y, TL, TR, TL2, TR2, SELECT, START, MODE, + * THUMBL, THUMBR */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xdb, 0x7f, + }, + }, + { + .name = "DualShock 4 - touchpad", + /* EVIOCGNAME is just "Wireless Controller Touchpad" when seen via Bluetooth */ + .eviocgname = "Sony Interactive Entertainment Wireless Controller Touchpad", + .usb_vendor_name = "Sony Interactive Entertainment", + .usb_product_name = "Wireless Controller", + /* Same physical device via Bluetooth is 0005:054c:09cc v8100 and is + * functionally equivalent. */ + /* DualSense (PS5), 0003:054c:0ce6 v8111, is functionally equivalent. + * Same physical device via Bluetooth is 0005:054c:0ce6 v8100 and also + * functionally equivalent. */ + .bus_type = 0x0003, + .vendor_id = 0x054c, + .product_id = 0x09cc, + .version = 0x8111, + .expected = SDL_UDEV_DEVICE_TOUCHPAD, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, multitouch */ + .abs = { 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x02 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* Left mouse button */ + /* 0x100 */ 0x00, 0x00, 0x01, 0x00, ZEROx4, + /* BTN_TOOL_FINGER and some multitouch stuff */ + /* 0x140 */ 0x20, 0x24, 0x00, 0x00 + }, + /* POINTER, BUTTONPAD */ + .props = { 0x05 }, + }, + { + .name = "DualShock 4 - accelerometer", + /* EVIOCGNAME is just "Wireless Controller Motion Sensors" when seen via Bluetooth */ + .eviocgname = "Sony Interactive Entertainment Wireless Controller Motion Sensors", + .usb_vendor_name = "Sony Interactive Entertainment", + .usb_product_name = "Wireless Controller", + /* Same physical device via Bluetooth is 0005:054c:09cc v8100 and is + * functionally equivalent. */ + /* DualSense (PS5), 0003:054c:0ce6 v8111, is functionally equivalent. + * Same physical device via Bluetooth is 0005:054c:0ce6 v8100 and also + * functionally equivalent. */ + .bus_type = 0x0003, + .vendor_id = 0x054c, + .product_id = 0x09cc, + .version = 0x8111, + .expected = SDL_UDEV_DEVICE_ACCELEROMETER, + /* SYN, ABS, MSC */ + .ev = { 0x19 }, + /* X, Y, Z, RX, RY, RZ */ + .abs = { 0x3f }, + /* ACCELEROMETER */ + .props = { 0x40 }, + }, + { + .name = "DualShock 4 via USB dongle", + .bus_type = 0x0003, + .vendor_id = 0x054c, + .product_id = 0x0ba0, + .version = 0x8111, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, ABS, KEY */ + .ev = { 0x0b }, + /* X, Y, Z, RX, RY, RZ, HAT0X, HAT0Y */ + .abs = { 0x3f, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* A, B, X, Y, TL, TR, TL2, TR2, SELECT, START, MODE, + * THUMBL, THUMBR */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xdb, 0x7f, + }, + }, + { + .name = "DualShock 3 - gamepad", + .eviocgname = "Sony PLAYSTATION(R)3 Controller", + .usb_vendor_name = "Sony", + .usb_product_name = "PLAYSTATION(R)3 Controller", + .bus_type = 0x0003, + .vendor_id = 0x054c, + .product_id = 0x0268, + .version = 0x8111, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS, MSC, FF */ + .ev = { 0x1b, 0x00, 0x20 }, + /* X, Y, Z, RX, RY, RZ */ + .abs = { 0x3f }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* A, B, X, Y, TL, TR, TL2, TR2, SELECT, START, MODE, + * THUMBL, THUMBR */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xdb, 0x7f, + /* 0x140 */ ZEROx8, + /* 0x180 */ ZEROx8, + /* 0x1c0 */ ZEROx8, + /* Digital dpad */ + /* 0x200 */ ZEROx4, 0x0f, 0x00, 0x00, 0x00, + }, + .hid_report_descriptor_length = sizeof (ps3_hid_report_descriptor), + .hid_report_descriptor = &ps3_hid_report_descriptor[0], + }, + { + .name = "DualShock 3 - accelerometer", + .eviocgname = "Sony PLAYSTATION(R)3 Controller Motion Sensors", + .usb_vendor_name = "Sony", + .usb_product_name = "PLAYSTATION(R)3 Controller", + .bus_type = 0x0003, + .vendor_id = 0x054c, + .product_id = 0x0268, + .expected = SDL_UDEV_DEVICE_ACCELEROMETER, + /* SYN, ABS */ + .ev = { 0x09 }, + /* X, Y, Z */ + .abs = { 0x07 }, + /* ACCELEROMETER */ + .props = { 0x40 }, + .hid_report_descriptor_length = sizeof (ps3_hid_report_descriptor), + .hid_report_descriptor = &ps3_hid_report_descriptor[0], + }, + { + .name = "Steam Controller - gamepad", + .bus_type = 0x0003, + .vendor_id = 0x28de, + .product_id = 0x1142, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, RX, RY, HAT0X, HAT0Y, HAT2X, HAT2Y */ + .abs = { 0x1b, 0x00, 0x33 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* A, B, X, Y, TL, TR, TL2, TR2, SELECT, START, MODE, + * THUMBL, THUMBR, joystick THUMB, joystick THUMB2 */ + /* 0x100 */ ZEROx4, 0x06, 0x00, 0xdb, 0x7f, + /* GEAR_DOWN, GEAR_UP */ + /* 0x140 */ 0x00, 0x00, 0x03, 0x00, ZEROx4, + /* 0x180 */ ZEROx8, + /* 0x1c0 */ ZEROx8, + /* Digital dpad */ + /* 0x200 */ ZEROx4, 0x0f, 0x00, 0x00, 0x00, + }, + }, + { + /* Present to support lizard mode, even if no Steam Controller + * is connected */ + .name = "Steam Controller - dongle", + .bus_type = 0x0003, + .vendor_id = 0x28de, + .product_id = 0x1142, + .expected = (SDL_UDEV_DEVICE_HAS_KEYS + | SDL_UDEV_DEVICE_KEYBOARD + | SDL_UDEV_DEVICE_MOUSE), + /* SYN, KEY, REL, MSC, LED, REP */ + .ev = { 0x17, 0x00, 0x12 }, + /* X, Y, mouse wheel, high-res mouse wheel */ + .rel = { 0x03, 0x09 }, + .keys = { + /* 0x00 */ 0xfe, 0xff, 0xff, 0xff, FFx4, + /* 0x40 */ 0xff, 0xff, 0xcf, 0x01, 0xdf, 0xff, 0x80, 0xe0, + /* 0x80 */ ZEROx8, + /* 0xc0 */ ZEROx8, + /* 0x100 */ 0x00, 0x00, 0x1f, 0x00, ZEROx4, + }, + }, + { + .name = "Guitar Hero for PS3", + /* SWITCH CO.,LTD. Controller (Dinput) off-brand N64-style USB controller + * 0003:2563:0575 v0111 is functionally equivalent. + * https://linux-hardware.org/?id=usb:2563-0575 reports the same IDs as + * ShenZhen ShanWan Technology ZD-V+ Wired Gaming Controller */ + .bus_type = 0x0003, + .vendor_id = 0x12ba, + .product_id = 0x0100, + .version = 0x0110, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, Z, RZ, HAT0X, HAT0Y */ + .abs = { 0x27, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* ABC, XYZ, TL, TR, TL2, TR2, SELECT, START, MODE */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xff, 0x1f, + }, + }, + { + .name = "G27 Racing Wheel, 0003:046d:c29b v0111", + .bus_type = 0x0003, + .vendor_id = 0x046d, + .product_id = 0xc29b, + .version = 0x0111, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, Z, RZ, HAT0X, HAT0Y */ + .abs = { 0x27, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* 16 buttons: TRIGGER, THUMB, THUMB2, TOP, TOP2, PINKIE, BASE, + * BASE2..BASE6, unregistered event codes 0x12c-0x12e, DEAD */ + /* 0x100 */ ZEROx4, 0xff, 0xff, 0x00, 0x00, + /* 0x140 */ ZEROx8, + /* 0x180 */ ZEROx8, + /* 0x1c0 */ ZEROx8, + /* 0x200 */ ZEROx8, + /* 0x240 */ ZEROx8, + /* 0x280 */ ZEROx8, + /* TRIGGER_HAPPY1..TRIGGER_HAPPY7 */ + /* 0x2c0 */ 0x7f, + }, + }, + { + .name = "Logitech Driving Force, 0003:046d:c294 v0100", + .bus_type = 0x0003, + .vendor_id = 0x046d, + .product_id = 0xc294, + .version = 0x0100, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, RZ, HAT0X, HAT0Y */ + .abs = { 0x23, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* 12 buttons: TRIGGER, THUMB, THUMB2, TOP, TOP2, PINKIE, BASE, + * BASE2..BASE6 */ + /* 0x100 */ ZEROx4, 0xff, 0x0f, 0x00, 0x00, + }, + }, + { + .name = "Logitech Dual Action", + .bus_type = 0x0003, + .vendor_id = 0x046d, + .product_id = 0xc216, + .version = 0x0110, + /* Logitech RumblePad 2 USB, 0003:046d:c218 v0110, is the same + * except for having force feedback, which we don't use in our + * heuristic */ + /* Jess Tech GGE909 PC Recoil Pad, 0003:0f30:010b v0110, is the same */ + /* 8BitDo SNES30 via USB, 0003:2dc8:ab20 v0110, is the same; + * see below for the same physical device via Bluetooth, + * 0005:2dc8:2840 v0100 */ + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, Z, RZ, HAT0X, HAT0Y */ + .abs = { 0x27, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* 12 buttons: TRIGGER, THUMB, THUMB2, TOP, TOP2, PINKIE, BASE, + * BASE2..BASE6 */ + /* 0x100 */ ZEROx4, 0xff, 0x0f, 0x00, 0x00, + }, + }, + { + .name = "8BitDo SNES30 v0100 via Bluetooth", + .eviocgname = "8Bitdo SNES30 GamePad", + /* The same physical device via USB, 0003:2dc8:ab20 v0110, + * is reported differently (above). */ + /* 8BitDo NES30 Pro (aka N30 Pro) via Bluetooth, 0005:2dc8:3820 v0100, + * is functionally equivalent; but the same physical device via USB, + * 0003:2dc8:9001 v0111, matches N30 Pro 2 v0111. */ + .bus_type = 0x0005, + .vendor_id = 0x2dc8, + .product_id = 0x2840, + .version = 0x0100, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS, MSC */ + .ev = { 0x1b }, + /* XYZ, RZ, GAS, BRAKE, HAT0X, HAT0Y */ + .abs = { 0x27, 0x06, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* ABC, XYZ, TL, TR, TL2, TR2, SELECT, START, MODE, THUMBL, THUMBR, + * and an unassigned button code */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xff, 0xff, + }, + }, + { + .name = "Saitek ST290 Pro flight stick", + .bus_type = 0x0003, + .vendor_id = 0x06a3, + .product_id = 0x0160, /* 0x0460 seems to be the same */ + .version = 0x0100, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS, MSC */ + .ev = { 0x1b }, + /* X, Y, Z, RZ, HAT0X, HAT0Y */ + .abs = { 0x27, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* TRIGGER, THUMB, THUMB2, TOP, TOP2, PINKIE */ + /* 0x100 */ ZEROx4, 0x3f, 0x00, 0x00, 0x00, + }, + }, + { + .name = "Saitek X52 Pro Flight Control System", + .bus_type = 0x0003, + .vendor_id = 0x06a3, + .product_id = 0x0762, + .version = 0x0111, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + .ev = { 0x0b }, + /* XYZ, RXYZ, throttle, hat0, MISC, unregistered event code 0x29 */ + .abs = { 0x7f, 0x00, 0x03, 0x00, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* 16 buttons: TRIGGER, THUMB, THUMB2, TOP, TOP2, PINKIE, BASE, + * BASE2..BASE6, unregistered event codes 0x12c-0x12e, DEAD */ + /* 0x100 */ ZEROx4, 0xff, 0xff, 0x00, 0x00, + /* 0x140 */ ZEROx8, + /* 0x180 */ ZEROx8, + /* 0x1c0 */ ZEROx8, + /* 0x200 */ ZEROx8, + /* 0x240 */ ZEROx8, + /* 0x280 */ ZEROx8, + /* TRIGGER_HAPPY1..TRIGGER_HAPPY23 */ + /* 0x2c0 */ 0xff, 0xff, 0x7f, + }, + }, + { + .name = "Logitech Extreme 3D", + .bus_type = 0x0003, + .vendor_id = 0x046d, + .product_id = 0xc215, + .version = 0x0110, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS, MSC */ + .ev = { 0x0b }, + /* X, Y, RZ, throttle, hat 0 */ + .abs = { 0x63, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* 12 buttons: TRIGGER, THUMB, THUMB2, TOP, TOP2, PINKIE, BASE, + * BASE2..BASE6 */ + /* 0x100 */ ZEROx4, 0xff, 0x0f, 0x00, 0x00, + }, + }, + { + .name = "Hori Real Arcade Pro VX-SA", + .bus_type = 0x0003, + .vendor_id = 0x24c6, + .product_id = 0x5501, + .version = 0x0533, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, Z, RX, RY, RZ, hat 0 */ + .abs = { 0x3f, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* A, B, X, Y, TL, TR, SELECT, START, MODE, THUMBL, THUMBR */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xdb, 0x7c, + }, + }, + { + /* https://github.com/ValveSoftware/steam-devices/pull/42 + * PS4 mode is functionally equivalent, but with product ID 0x011c + * and version 0x1101. */ + .name = "Hori Fighting Stick Alpha - PS5 mode", + .bus_type = 0x0003, /* USB */ + .vendor_id = 0x0f0d, /* Hori Co., Ltd. */ + .product_id = 0x0184, /* HORI FIGHTING STICK α (PS5 mode) */ + .version = 0x0111, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS, MSC */ + .ev = { 0x1b }, + /* X, Y, Z, RX, RY, RZ, HAT0X, HAT0Y */ + .abs = { 0x3f, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* ABC, XYZ, TL, TR, TL2, TR2, SELECT, START, MODE, + * THUMBL */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xff, 0x3f, + }, + }, + { /* https://github.com/ValveSoftware/steam-devices/pull/42 */ + .name = "Hori Fighting Stick Alpha - PC mode", + .bus_type = 0x0003, /* USB */ + .vendor_id = 0x0f0d, /* Hori Co., Ltd. */ + .product_id = 0x011e, /* HORI FIGHTING STICK α (PC mode) */ + .version = 0x0116, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS, FF */ + .ev = { 0x0b, 0x00, 0x20 }, + /* X, Y, Z, RX, RY, RZ, HAT0X, HAT0Y */ + .abs = { 0x3f, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* A, B, X, Y, TL, TR, SELECT, START, MODE, THUMBL, THUMBR */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xdb, 0x7c, + }, + }, + { /* https://github.com/ValveSoftware/steam-devices/issues/29 */ + .name = "HORIPAD S for Nintendo", + .bus_type = 0x0003, /* USB */ + .vendor_id = 0x0f0d, /* Hori Co., Ltd. */ + .product_id = 0x00dc, /* HORIPAD S */ + .version = 0x0112, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS, FF */ + .ev = { 0x0b, 0x00, 0x20 }, + /* X, Y, Z, RX, RY, RZ, HAT0X, HAT0Y */ + .abs = { 0x3f, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* A, B, X, Y, TL, TR, SELECT, START, MODE, THUMBL, THUMBR */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xdb, 0x7c, + }, + }, + { + .name = "Switch Pro Controller via Bluetooth", + .bus_type = 0x0005, + .vendor_id = 0x057e, + .product_id = 0x2009, + .version = 0x0001, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, RX, RY, hat 0 */ + .abs = { 0x1b, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* 16 buttons: TRIGGER, THUMB, THUMB2, TOP, TOP2, PINKIE, BASE, + * BASE2..BASE6, unregistered event codes 0x12c-0x12e, DEAD */ + /* 0x100 */ ZEROx4, 0xff, 0xff, 0x00, 0x00, + /* 0x140 */ ZEROx8, + /* 0x180 */ ZEROx8, + /* 0x1c0 */ ZEROx8, + /* 0x200 */ ZEROx8, + /* 0x240 */ ZEROx8, + /* 0x280 */ ZEROx8, + /* TRIGGER_HAPPY1..TRIGGER_HAPPY2 */ + /* 0x2c0 */ 0x03, + }, + }, + { + .name = "Switch Pro Controller via Bluetooth (Linux 6.2.11)", + .eviocgname = "Pro Controller", + .bus_type = 0x0005, + .vendor_id = 0x057e, + .product_id = 0x2009, + .version = 0x0001, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, RX, RY, hat 0 */ + .abs = { 0x1b, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* ABC, XYZ, TL, TR, TL2, TR2, SELECT, START, MODE, THUMBL, THUMBR, + * and an unassigned button code */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xff, 0xff, + }, + }, + { + .name = "Switch Pro Controller via USB", + .eviocgname = "Nintendo Co., Ltd. Pro Controller", + .usb_vendor_name = "Nintendo Co., Ltd.", + .usb_product_name = "Pro Controller", + .bus_type = 0x0003, + .vendor_id = 0x057e, + .product_id = 0x2009, + .version = 0x0111, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, Z, RZ, HAT0X, HAT0Y */ + .abs = { 0x27, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* 16 buttons: TRIGGER, THUMB, THUMB2, TOP, TOP2, PINKIE, BASE, + * BASE2..BASE6, unregistered event codes 0x12c-0x12e, DEAD */ + /* 0x100 */ ZEROx4, 0xff, 0xff, 0x00, 0x00, + /* 0x140 */ ZEROx8, + /* 0x180 */ ZEROx8, + /* 0x1c0 */ ZEROx8, + /* 0x200 */ ZEROx8, + /* 0x240 */ ZEROx8, + /* 0x280 */ ZEROx8, + /* TRIGGER_HAPPY1..TRIGGER_HAPPY2 */ + /* 0x2c0 */ 0x03, + }, + }, + { /* https://github.com/ValveSoftware/steam-devices/pull/40 */ + .name = "PDP wired Pro Controller for Switch", + /* 0003:0e6f:0184 "Performance Designed Products" / + * "Faceoff Deluxe+ Audio Wired Controller for Nintendo Switch" appears + * to be functionally equivalent */ + .eviocgname = "PDP CO.,LTD. Faceoff Wired Pro Controller for Nintendo Switch", + .usb_vendor_name = "PDP CO.,LTD.", + .usb_product_name = "Faceoff Wired Pro Controller for Nintendo Switch", + .bus_type = 0x0003, + .vendor_id = 0x0e6f, + .product_id = 0x0180, + .version = 0x0111, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS, MSC */ + .ev = { 0x1b }, + /* X, Y, Z, RZ, HAT0X, HAT0Y */ + .abs = { 0x27, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* ABC, XYZ, TL, TR, TL2, TR2, SELECT, START, MODE, + * THUMBL */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xff, 0x3f, + }, + }, + { + .name = "NES Controller (R) NES-style Joycon from Nintendo Online", + .eviocgname = "NES Controller (R)", + /* Joy-Con (L), 0005:057e:2006 v0001, is functionally equivalent. + * Ordinary Joy-Con (R) and NES-style Joy-Con (L) are assumed to be + * functionally equivalent as well. */ + .bus_type = 0x0005, /* Bluetooth-only */ + .vendor_id = 0x057e, + .product_id = 0x2007, + .version = 0x0001, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, RX, RY, hat 0 */ + .abs = { 0x1b, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* ABC, XYZ, TL, TR, TL2, TR2, SELECT, START, MODE, THUMBL, THUMBR, + * and an unassigned button code */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xff, 0xff, + }, + }, + { + .name = "Thrustmaster Racing Wheel FFB", + /* Several devices intended for PS4 are functionally equivalent to this: + * https://github.com/ValveSoftware/steam-devices/pull/34 + * Mad Catz FightStick TE S+ PS4, 0003:0738:8384:0111 v0111 + * (aka Street Fighter V Arcade FightStick TES+) + * Mad Catz FightStick TE2+ PS4, 0003:0738:8481 v0100 + * (aka Street Fighter V Arcade FightStick TE2+) + * Bigben Interactive DAIJA Arcade Stick, 0003:146b:0d09 v0111 + * (aka Nacon Daija PS4 Arcade Stick) + * Razer Razer Raiju Ultimate Wired, 0003:1532:1009 v0000 + * Razer Razer Raiju Ultimate (Bluetooth), 0005:1532:1009 v0001 + */ + .bus_type = 0x0003, + .vendor_id = 0x044f, + .product_id = 0xb66d, + .version = 0x0110, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + .ev = { 0x0b }, + /* XYZ, RXYZ, hat 0 */ + .abs = { 0x3f, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* ABC, XYZ, TL, TR, TL2, TR2, SELECT, START, MODE, + * THUMBL */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xff, 0x3f, + }, + }, + { + .name = "Thrustmaster T.Flight Hotas X", + .bus_type = 0x0003, + .vendor_id = 0x044f, + .product_id = 0xb108, + .version = 0x0100, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + .ev = { 0x0b }, + /* XYZ, RZ, throttle, hat 0 */ + .abs = { 0x67, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* trigger, thumb, thumb2, top, top2, pinkie, base, + * base2..base6 */ + /* 0x100 */ ZEROx4, 0xff, 0x0f + }, + }, + { + .name = "8BitDo N30 Pro via Bluetooth", + /* This device has also been seen reported with an additional + * unassigned button code, the same as the SNES30 v0100 via Bluetooth */ + .bus_type = 0x0005, + .vendor_id = 0x2dc8, + .product_id = 0x3820, + .version = 0x0100, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS, MSC */ + .ev = { 0x1b }, + /* XYZ, RZ, gas, brake, hat0 */ + .abs = { 0x27, 0x06, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* ABC, XYZ, TL, TR, TL2, TR2, select, start, mode, thumbl, + * thumbr */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xff, 0x7f, + }, + }, + { + .name = "8BitDo N30 Pro 2 v0111", + .bus_type = 0x0003, + .vendor_id = 0x2dc8, + .product_id = 0x9015, + .version = 0x0111, + /* 8BitDo NES30 Pro via USB, 0003:2dc8:9001 v0111, is the same; + * but the same physical device via Bluetooth, 0005:2dc8:3820 v0100, + * matches 8BitDo SNES30 v0100 via Bluetooth instead (see above). */ + .expected = SDL_UDEV_DEVICE_JOYSTICK, + .ev = { 0x0b }, + /* XYZ, RZ, gas, brake, hat0 */ + .abs = { 0x27, 0x06, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* ABC, XYZ, TL, TR, TL2, TR2, select, start, mode, thumbl, + * thumbr */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xff, 0x7f, + }, + }, + { + .name = "8BitDo N30 Pro 2 via Bluetooth", + /* Physically the same device as the one that mimics an Xbox 360 + * USB controller when wired */ + .bus_type = 0x0005, + .vendor_id = 0x045e, + .product_id = 0x02e0, + .version = 0x0903, + .expected = SDL_UDEV_DEVICE_JOYSTICK | SDL_UDEV_DEVICE_HAS_KEYS, + /* SYN, KEY, ABS, MSC, FF */ + .ev = { 0x1b, 0x00, 0x20 }, + /* X, Y, Z, RX, RY, RZ, HAT0X, HAT0Y */ + .abs = { 0x3f, 0x00, 0x03 }, + .keys = { + /* 0x00 */ ZEROx8, + /* 0x40 */ ZEROx8, + /* KEY_MENU */ + /* 0x80 */ 0x00, 0x08, 0x00, 0x00, ZEROx4, + /* 0xc0 */ ZEROx8, + /* ABC, XYZ, TL, TR, TL2, TR2 */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xff, 0x03, + }, + }, + { + .name = "Retro Power SNES-style controller, 0003:0079:0011 v0110", + .bus_type = 0x0003, + .vendor_id = 0x0079, + .product_id = 0x0011, + .version = 0x0110, + .expected = SDL_UDEV_DEVICE_JOYSTICK, + .ev = { 0x0b }, + /* X, Y */ + .abs = { 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* trigger, thumb, thumb2, top, top2, pinkie, base, + * base2..base4 */ + /* 0x100 */ ZEROx4, 0xff, 0x03, 0x00, 0x00, + }, + }, + { + .name = "Google Stadia Controller rev.A", + .eviocgname = "Google LLC Stadia Controller rev. A", + .usb_vendor_name = "Google LLC", + .usb_product_name = "Stadia Controller rev. A", + /* This data is with USB-C, but the same physical device via Bluetooth, + * 0005:18d1:9400 v0000, is functionally equivalent other than having + * EVIOCGNAME = StadiaXXXX-YYYY where XXXX is the last 4 digits of + * the serial number and YYYY is some other mystery number */ + .bus_type = 0x0003, + .vendor_id = 0x18d1, + .product_id = 0x9400, + .version = 0x0100, + .expected = SDL_UDEV_DEVICE_JOYSTICK | SDL_UDEV_DEVICE_HAS_KEYS, + .ev = { 0x0b }, + /* XYZ, RZ, gas, brake, hat0 */ + .abs = { 0x27, 0x06, 0x03 }, + .keys = { + /* 0x00 */ ZEROx8, + /* Volume up/down */ + /* 0x40 */ ZEROx4, 0x00, 0x00, 0x0c, 0x00, + /* Media play/pause */ + /* 0x80 */ ZEROx4, 0x10, 0x00, 0x00, 0x00, + /* 0xc0 */ ZEROx8, + /* ABXY, TL, TR, SELECT, START, MODE, THUMBL, THUMBR */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xdb, 0x7c, + /* 0x140 */ ZEROx8, + /* 0x180 */ ZEROx8, + /* 0x1c0 */ ZEROx8, + /* 0x200 */ ZEROx8, + /* 0x240 */ ZEROx8, + /* 0x280 */ ZEROx8, + /* TRIGGER_HAPPY 1-4 */ + /* 0x2c0 */ 0x0f, 0x00, 0x00, 0x00, ZEROx4, + }, + }, + { + .name = "Microsoft Xbox Series S|X Controller (model 1914) via USB", + .eviocgname = "Microsoft Xbox Series S|X Controller", + .usb_vendor_name = "Microsoft", + .usb_product_name = "Controller", + /* Physically the same device as 0003:045e:0b13 v0515 below, + * but some functionality is mapped differently */ + .bus_type = 0x0003, + .vendor_id = 0x045e, + .product_id = 0x0b12, + .version = 0x050f, + .expected = SDL_UDEV_DEVICE_JOYSTICK | SDL_UDEV_DEVICE_HAS_KEYS, + .ev = { 0x0b }, + /* X, Y, Z, RX, RY, RZ, hat 0 */ + .abs = { 0x3f, 0x00, 0x03 }, + .keys = { + /* 0x00 */ ZEROx8, + /* 0x40 */ ZEROx8, + /* Record */ + /* 0x80 */ ZEROx4, 0x80, 0x00, 0x00, 0x00, + /* 0xc0 */ ZEROx8, + /* ABXY, TL, TR, SELECT, START, MODE, THUMBL, THUMBR */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xdb, 0x7c, + }, + }, + { + .name = "Microsoft Xbox Series S|X Controller (model 1914) via Bluetooth", + .eviocgname = "Xbox Wireless Controller", + /* Physically the same device as 0003:045e:0b12 v050f above, + * but some functionality is mapped differently */ + .bus_type = 0x0005, + .vendor_id = 0x045e, + .product_id = 0x0b13, + .version = 0x0515, + .expected = SDL_UDEV_DEVICE_JOYSTICK | SDL_UDEV_DEVICE_HAS_KEYS, + .ev = { 0x0b }, + /* XYZ, RZ, gas, brake, hat0 */ + .abs = { 0x27, 0x06, 0x03 }, + .keys = { + /* 0x00 */ ZEROx8, + /* 0x40 */ ZEROx8, + /* Record */ + /* 0x80 */ ZEROx4, 0x80, 0x00, 0x00, 0x00, + /* 0xc0 */ ZEROx8, + /* ABC, XYZ, TL, TR, TL2, TR2, select, start, mode, thumbl, + * thumbr */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xff, 0x7f, + }, + }, + { + .name = "Wiimote - buttons", + .eviocgname = "Nintendo Wii Remote", + .bus_type = 0x0005, + .vendor_id = 0x057e, + .product_id = 0x0306, + .version = 0x0600, + /* This one is a bit weird because some of the buttons are mapped + * to the arrow, page up and page down keys, so it's a joystick + * with a subset of a keyboard attached. */ + /* TODO: Should this be JOYSTICK, or even JOYSTICK|HAS_KEYS? */ + .expected = SDL_UDEV_DEVICE_HAS_KEYS, + /* SYN, KEY, FF */ + .ev = { 0x03, 0x00, 0x20 }, + .keys = { + /* 0x00 */ ZEROx8, + /* left, right, up down */ + /* 0x40 */ ZEROx4, 0x80, 0x16, 0x00, 0x00, + /* 0x80 */ ZEROx8, + /* 0xc0 */ ZEROx8, + /* BTN_1, BTN_2, BTN_A, BTN_B, BTN_MODE */ + /* 0x100 */ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x10, + /* 0x140 */ ZEROx8, + /* next (keyboard page down), previous (keyboard page up) */ + /* 0x180 */ 0x00, 0x00, 0x80, 0x10, ZEROx4, + }, + }, + { + .name = "Wiimote - accelerometer", + .eviocgname = "Nintendo Wii Remote Accelerometer", + .bus_type = 0x0005, + .vendor_id = 0x057e, + .product_id = 0x0306, + .version = 0x0600, + .expected = SDL_UDEV_DEVICE_ACCELEROMETER, + /* SYN, ABS */ + .ev = { 0x09 }, + /* RX, RY, RZ - even though it would more conventionally be X, Y, Z */ + .abs = { 0x38 }, + }, + { + .name = "Wiimote - Motion Plus gyroscope", + .eviocgname = "Nintendo Wii Remote Motion Plus", + /* Note that if we only look at the bus type, vendor, product, version + * and axes, this is indistinguishable from the accelerometer */ + .bus_type = 0x0005, + .vendor_id = 0x057e, + .product_id = 0x0306, + .version = 0x0600, + .expected = SDL_UDEV_DEVICE_ACCELEROMETER, + /* SYN, ABS */ + .ev = { 0x09 }, + /* RX, RY, RZ */ + .abs = { 0x38 }, + }, + { + .name = "Wiimote - IR positioning", + .eviocgname = "Nintendo Wii Remote IR", + .bus_type = 0x0005, + .vendor_id = 0x057e, + .product_id = 0x0306, + .version = 0x0600, + .expected = SDL_UDEV_DEVICE_UNKNOWN, + /* SYN, ABS */ + .ev = { 0x09 }, + /* HAT0X, Y to HAT3X, Y */ + .abs = { 0x00, 0x00, 0xff }, + }, + { + .name = "Wiimote - Nunchuck", + .eviocgname = "Nintendo Wii Remote Nunchuk", + .bus_type = 0x0005, + .vendor_id = 0x057e, + .product_id = 0x0306, + .version = 0x0600, + /* TODO: Should this be JOYSTICK? It has one stick and two buttons */ + .expected = SDL_UDEV_DEVICE_UNKNOWN, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* RX, RY, RZ, hat 0 - even though this is an accelerometer, which + * would more conventionally be X, Y, Z, and a left joystick, which + * would more conventionally be X, Y */ + .abs = { 0x38, 0x00, 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* C and Z buttons */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0x24, 0x00, + }, + }, + { + .name = "Wiimote - Classic Controller", + .eviocgname = "Nintendo Wii Remote Classic Controller", + /* TODO: Should this be JOYSTICK, or maybe JOYSTICK|HAS_KEYS? + * It's unusual in the same ways as the Wiimote */ + .expected = SDL_UDEV_DEVICE_HAS_KEYS, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* Hat 1-3 X and Y */ + .abs = { 0x00, 0x00, 0xfc }, + .keys = { + /* 0x00 */ ZEROx8, + /* left, right, up down */ + /* 0x40 */ ZEROx4, 0x80, 0x16, 0x00, 0x00, + /* 0x80 */ ZEROx8, + /* 0xc0 */ ZEROx8, + /* A, B, X, Y, MODE, TL, TL2, TR, TR2 */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xdb, 0x13, + /* 0x140 */ ZEROx8, + /* next (keyboard page down), previous (keyboard page up) */ + /* 0x180 */ 0x00, 0x00, 0x80, 0x10, ZEROx4, + }, + }, + { + /* Flags guessed from kernel source code, not confirmed with real + * hardware */ + .name = "Wiimote - Balance Board", + /* TODO: Should this be JOYSTICK? */ + .expected = SDL_UDEV_DEVICE_UNKNOWN, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* Hat 0-1 */ + .abs = { 0x00, 0x00, 0x0f }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* BTN_A */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0x01, 0x00, + }, + }, + { + /* Flags guessed from kernel source code, not confirmed with real + * hardware */ + .name = "Wiimote - Wii U Pro Controller", + .expected = SDL_UDEV_DEVICE_JOYSTICK, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, RX, RY */ + .abs = { 0x1b }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* A, B, X, Y, TL, TR, TL2, TR2, SELECT, START, MODE, + * THUMBL, THUMBR */ + /* 0x100 */ ZEROx4, 0x00, 0x00, 0xdb, 0x7f, + /* 0x140 */ ZEROx8, + /* 0x180 */ ZEROx8, + /* 0x1c0 */ ZEROx8, + /* Digital dpad */ + /* 0x200 */ ZEROx4, 0x0f, 0x00, 0x00, 0x00, + }, + }, + { + .name = "Synaptics TM3381-002 (Thinkpad X280 trackpad)", + .eviocgname = "Synaptics TM3381-002", + .bus_type = 0x001d, /* BUS_RMI */ + .vendor_id = 0x06cb, + .product_id = 0x0000, + .version = 0x0000, + .expected = SDL_UDEV_DEVICE_TOUCHPAD, + /* SYN, KEY, ABS */ + .ev = { 0x0b }, + /* X, Y, pressure, multitouch */ + .abs = { 0x03, 0x00, 0x00, 0x01, 0x00, 0x80, 0xf3, 0x06 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* Left mouse button */ + /* 0x100 */ 0x00, 0x00, 0x01, 0x00, ZEROx4, + /* BTN_TOOL_FINGER and some multitouch gestures */ + /* 0x140 */ 0x20, 0xe5 + }, + /* POINTER, BUTTONPAD */ + .props = { 0x05 }, + }, + { + .name = "DELL08AF:00 (Dell XPS laptop touchpad)", + .bus_type = 0x18, + .vendor_id = 0x6cb, + .product_id = 0x76af, + .version = 0x100, + .ev = { 0x0b }, + .expected = SDL_UDEV_DEVICE_TOUCHPAD, + /* X, Y, multitouch */ + .abs = { 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0x02 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* Left mouse button */ + /* 0x100 */ 0x00, 0x00, 0x01, 0x00, ZEROx4, + /* BTN_TOOL_FINGER and some multitouch gestures */ + /* 0x140 */ 0x20, 0xe5 + }, + /* POINTER, BUTTONPAD */ + .props = { 0x05 }, + }, + { + .name = "TPPS/2 Elan TrackPoint (Thinkpad X280)", + .eviocgname = "TPPS/2 Elan TrackPoint", + .bus_type = 0x0011, /* BUS_I8042 */ + .vendor_id = 0x0002, + .product_id = 0x000a, + .version = 0x0000, + .expected = SDL_UDEV_DEVICE_MOUSE, + /* SYN, KEY, REL */ + .ev = { 0x07 }, + /* X, Y */ + .rel = { 0x03 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* Left, middle, right mouse buttons */ + /* 0x100 */ 0x00, 0x00, 0x07, + }, + /* POINTER, POINTING_STICK */ + .props = { 0x21 }, + }, + { + .name = "Thinkpad ACPI buttons", + .eviocgname = "ThinkPad Extra Buttons", + .bus_type = 0x0019, + .vendor_id = 0x17aa, + .product_id = 0x5054, + .version = 0x4101, + .expected = SDL_UDEV_DEVICE_HAS_KEYS, + /* SYN, KEY, MSC, SW */ + .ev = { 0x33 }, + .keys = { + /* 0x00 */ ZEROx8, + /* 0x40 */ ZEROx4, 0x00, 0x00, 0x0e, 0x01, + /* 0x80 */ 0x00, 0x50, 0x11, 0x51, 0x00, 0x28, 0x00, 0xc0, + /* 0xc0 */ 0x04, 0x20, 0x10, 0x02, 0x1b, 0x70, 0x01, 0x00, + /* 0x100 */ ZEROx8, + /* 0x140 */ ZEROx4, 0x00, 0x00, 0x50, 0x00, + /* 0x180 */ ZEROx8, + /* 0x1c0 */ 0x00, 0x00, 0x04, 0x18, ZEROx4, + /* 0x200 */ ZEROx8, + /* 0x240 */ 0x40, 0x00, 0x01, 0x00, ZEROx4, + }, + }, + { + .name = "Thinkpad ACPI buttons (Linux 6.1)", + .eviocgname = "ThinkPad Extra Buttons", + .bus_type = 0x0019, + .vendor_id = 0x17aa, + .product_id = 0x5054, + .version = 0x4101, + .expected = SDL_UDEV_DEVICE_HAS_KEYS, + /* SYN, KEY, MSC, SW */ + .ev = { 0x33 }, + .keys = { + /* 0x00 */ ZEROx8, + /* 0x40 */ ZEROx4, 0x00, 0x00, 0x0e, 0x01, + /* 0x80 */ 0x00, 0x50, 0x11, 0x51, 0x00, 0x28, 0x00, 0xc0, + /* 0xc0 */ 0x04, 0x20, 0x10, 0x02, 0x1b, 0x70, 0x01, 0x00, + /* 0x100 */ ZEROx8, + /* 0x140 */ ZEROx4, 0x00, 0x00, 0x50, 0x00, + /* 0x180 */ ZEROx4, 0x00, 0x00, 0x00, 0x70, + /* 0x1c0 */ 0x00, 0x00, 0x04, 0x18, 0x20, 0x00, 0x00, 0x00, + /* 0x200 */ ZEROx8, + /* 0x240 */ ZEROx8, + }, + }, + { + .name = "PC speaker", + .eviocgname = "PC Speaker", + .bus_type = 0x0010, /* BUS_ISA */ + .vendor_id = 0x001f, + .product_id = 0x0001, + .version = 0x0100, + .expected = SDL_UDEV_DEVICE_UNKNOWN, + /* SYN, SND */ + .ev = { 0x01, 0x00, 0x04 }, + }, + { + .name = "HDA Digital PCBeep", + .eviocgname = "HDA Digital PCBeep", + .bus_type = 0x0001, + .vendor_id = 0x10ec, + .product_id = 0x0257, + .version = 0x0001, + .expected = SDL_UDEV_DEVICE_UNKNOWN, + /* SYN, SND */ + .ev = { 0x01, 0x00, 0x04 }, + }, + { + .name = "ALSA headphone detection, etc.", + .eviocgname = "HDA Intel PCH Mic", + /* HDA Intel PCH Headphone is functionally equivalent */ + /* HDA Intel PCH HDMI/DP,pcm=3 is functionally equivalent */ + /* HDA Intel PCH HDMI/DP,pcm=7 is functionally equivalent */ + /* HDA Intel PCH HDMI/DP,pcm=8 is functionally equivalent */ + .bus_type = 0x0000, + .vendor_id = 0x0000, + .product_id = 0x0000, + .version = 0x0000, + .expected = SDL_UDEV_DEVICE_UNKNOWN, + /* SYN, SW */ + .ev = { 0x21 }, + }, + { + /* Assumed to be a reasonably typical i8042 (PC AT) keyboard */ + .name = "Thinkpad T520 and X280 keyboards", + .eviocgname = "AT Translated Set 2 keyboard", + .bus_type = 0x0011, /* BUS_I8042 */ + .vendor_id = 0x0001, + .product_id = 0x0001, + .version = 0xab54, + .expected = SDL_UDEV_DEVICE_HAS_KEYS | SDL_UDEV_DEVICE_KEYBOARD, + /* SYN, KEY, MSC, LED, REP */ + .ev = { 0x13, 0x00, 0x12 }, + .keys = { + /* 0x00 */ 0xfe, 0xff, 0xff, 0xff, FFx4, + /* 0x40 */ 0xff, 0xff, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xfe, + /* 0x80 */ 0x01, 0xd0, 0x00, 0xf8, 0x78, 0x30, 0x80, 0x03, + /* 0xc0 */ 0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, + }, + }, + { + .name = "Thinkpad X280 sleep button", + .eviocgname = "Sleep Button", + .bus_type = 0x0019, /* BUS_HOST */ + .vendor_id = 0x0000, + .product_id = 0x0003, + .version = 0x0000, + .expected = SDL_UDEV_DEVICE_HAS_KEYS, + /* SYN, KEY */ + .ev = { 0x03 }, + .keys = { + /* 0x00 */ ZEROx8, + /* 0x40 */ ZEROx8, + /* KEY_SLEEP */ + /* 0x80 */ 0x00, 0x40, + }, + }, + { + .name = "Thinkpad X280 lid switch", + .eviocgname = "Lid Switch", + .bus_type = 0x0019, /* BUS_HOST */ + .vendor_id = 0x0000, + .product_id = 0x0005, + .version = 0x0000, + .expected = SDL_UDEV_DEVICE_UNKNOWN, + /* SYN, SW */ + .ev = { 0x21 }, + }, + { + .name = "Thinkpad X280 power button", + .eviocgname = "Power Button", + .bus_type = 0x0019, /* BUS_HOST */ + .vendor_id = 0x0000, + .product_id = 0x0001, + .version = 0x0000, + .expected = SDL_UDEV_DEVICE_HAS_KEYS, + /* SYN, KEY */ + .ev = { 0x03 }, + .keys = { + /* 0x00 */ ZEROx8, + /* KEY_POWER */ + /* 0x40 */ ZEROx4, 0x00, 0x00, 0x10, 0x00, + }, + }, + { + .name = "Thinkpad X280 video bus", + .eviocgname = "Video Bus", + .bus_type = 0x0019, /* BUS_HOST */ + .vendor_id = 0x0000, + .product_id = 0x0006, + .version = 0x0000, + .expected = SDL_UDEV_DEVICE_HAS_KEYS, + /* SYN, KEY */ + .ev = { 0x03 }, + .keys = { + /* 0x00 */ ZEROx8, + /* 0x40 */ ZEROx8, + /* 0x80 */ ZEROx8, + /* brightness control, video mode, display off */ + /* 0xc0 */ ZEROx4, 0x0b, 0x00, 0x3e, 0x00, + }, + }, + { + .name = "Thinkpad X280 webcam", + .eviocgname = "Integrated Camera: Integrated C", + .usb_vendor_name = "Chicony Electronics Co.,Ltd.", + .usb_product_name = "Integrated Camera", + .bus_type = 0x0003, + .vendor_id = 0x04f2, + .product_id = 0xb604, + .version = 0x0027, + .expected = SDL_UDEV_DEVICE_HAS_KEYS, + /* SYN, KEY */ + .ev = { 0x03 }, + .keys = { + /* 0x00 */ ZEROx8, + /* 0x40 */ ZEROx8, + /* 0x80 */ ZEROx8, + /* KEY_CAMERA */ + /* 0xc0 */ 0x00, 0x00, 0x10, 0x00, ZEROx4, + }, + }, + { + .name = "Thinkpad X280 extra buttons", + .bus_type = 0x0019, /* BUS_HOST */ + .vendor_id = 0x17aa, + .product_id = 0x5054, + .version = 0x4101, + .expected = SDL_UDEV_DEVICE_HAS_KEYS, + /* SYN, KEY */ + .ev = { 0x03 }, + .keys = { + /* 0x00 */ ZEROx8, + /* 0x40 */ ZEROx4, 0x00, 0x00, 0x0e, 0x01, + /* 0x80 */ 0x00, 0x50, 0x11, 0x51, 0x00, 0x28, 0x00, 0xc0, + /* 0xc0 */ 0x04, 0x20, 0x10, 0x02, 0x1b, 0x70, 0x01, 0x00, + /* 0x100 */ ZEROx8, + /* 0x140 */ ZEROx4, 0x00, 0x00, 0x50, 0x00, + /* 0x180 */ ZEROx8, + /* 0x1c0 */ 0x00, 0x00, 0x04, 0x18, ZEROx4, + /* 0x200 */ ZEROx8, + /* 0x240 */ 0x40, 0x00, 0x01, 0x00, ZEROx4, + }, + }, + { + .name = "Thinkpad USB keyboard with Trackpoint - keyboard", + .eviocgname = "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint", + .usb_vendor_name = "Lite-On Technology Corp.", + .usb_product_name = "ThinkPad USB Keyboard with TrackPoint", + .bus_type = 0x0003, + .vendor_id = 0x17ef, + .product_id = 0x6009, + .expected = SDL_UDEV_DEVICE_HAS_KEYS | SDL_UDEV_DEVICE_KEYBOARD, + /* SYN, KEY, MSC, LED, REP */ + .ev = { 0x13, 0x00, 0x12 }, + .keys = { + /* 0x00 */ 0xfe, 0xff, 0xff, 0xff, FFx4, + /* 0x40 */ 0xff, 0xff, 0xef, 0xff, 0xdf, 0xff, 0xbe, 0xfe, + /* 0x80 */ 0xff, 0x57, 0x40, 0xc1, 0x7a, 0x20, 0x9f, 0xff, + /* 0xc0 */ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + }, + .hid_report_descriptor_length = sizeof (thinkpad_usb_keyboard_hid_report_descriptor), + .hid_report_descriptor = &thinkpad_usb_keyboard_hid_report_descriptor[0], + }, + { + .name = "Thinkpad USB keyboard with Trackpoint - Trackpoint", + .eviocgname = "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint", + .usb_vendor_name = "Lite-On Technology Corp.", + .usb_product_name = "ThinkPad USB Keyboard with TrackPoint", + .bus_type = 0x0003, + .vendor_id = 0x17ef, + .product_id = 0x6009, + .version = 0x0110, + /* For some reason the special keys like mute and wlan toggle + * show up here instead of, or in addition to, as part of + * the keyboard - so both udev and SDL report this as having keys too. */ + .expected = SDL_UDEV_DEVICE_MOUSE | SDL_UDEV_DEVICE_HAS_KEYS, + /* SYN, KEY, REL, MSC, LED */ + .ev = { 0x17, 0x00, 0x02 }, + /* X, Y */ + .rel = { 0x03 }, + .keys = { + /* 0x00 */ ZEROx8, + /* 0x40 */ ZEROx4, 0x00, 0x00, 0x1e, 0x00, + /* 0x80 */ 0x00, 0xcc, 0x11, 0x01, 0x78, 0x40, 0x00, 0xc0, + /* 0xc0 */ 0x00, 0x20, 0x10, 0x00, 0x0b, 0x50, 0x00, 0x00, + /* Mouse buttons: left, right, middle, "task" */ + /* 0x100 */ 0x00, 0x00, 0x87, 0x68, ZEROx4, + /* 0x140 */ ZEROx4, 0x00, 0x00, 0x10, 0x00, + /* 0x180 */ ZEROx4, 0x00, 0x00, 0x40, 0x00, + }, + .hid_report_descriptor_length = sizeof (thinkpad_usb_trackpoint_hid_report_descriptor), + .hid_report_descriptor = &thinkpad_usb_trackpoint_hid_report_descriptor[0], + }, + { /* https://github.com/ValveSoftware/Proton/issues/5126 */ + .name = "Smarty Co. VRS DirectForce Pro Pedals", + .bus_type = 0x0003, + .vendor_id = 0x0483, /* STMicroelectronics */ + .product_id = 0xa3be, /* VRS DirectForce Pro Pedals */ + .version = 0x0111, + /* TODO: Ideally we would identify this as a joystick, but there + * isn't currently enough information to do that without a table + * of known devices. */ + .expected = SDL_UDEV_DEVICE_JOYSTICK, + .todo = "https://github.com/ValveSoftware/Proton/issues/5126", + /* SYN, ABS */ + .ev = { 0x09 }, + /* X, Y, Z */ + .abs = { 0x07 }, + }, + { /* https://github.com/ValveSoftware/Proton/issues/5126 */ + .name = "Heusinkveld Heusinkveld Sim Pedals Ultimate", + .bus_type = 0x0003, + .vendor_id = 0x30b7, /* Heusinkveld Engineering */ + .product_id = 0x1003, /* Heusinkveld Sim Pedals Ultimate */ + .version = 0x0000, + /* TODO: Ideally we would identify this as a joystick, but there + * isn't currently enough information to do that without a table + * of known devices. */ + .expected = SDL_UDEV_DEVICE_JOYSTICK, + .todo = "https://github.com/ValveSoftware/Proton/issues/5126", + /* SYN, ABS */ + .ev = { 0x09 }, + /* RX, RY, RZ */ + .abs = { 0x38 }, + }, + { /* https://github.com/ValveSoftware/Proton/issues/5126 */ + .name = "Vitaly [mega_mozg] Naidentsev ODDOR-handbrake", + .bus_type = 0x0003, + .vendor_id = 0x0000, + .product_id = 0x0000, + .version = 0x0001, + /* TODO: Ideally we would identify this as a joystick by it having + * the joystick-specific THROTTLE axis and TRIGGER/THUMB buttons */ + .expected = SDL_UDEV_DEVICE_JOYSTICK, + .todo = "https://github.com/ValveSoftware/Proton/issues/5126", + /* SYN, KEY, ABS, MSC */ + .ev = { 0x1b }, + /* THROTTLE only */ + .abs = { 0x40 }, + .keys = { + /* 0x00-0xff */ ZEROx8, ZEROx8, ZEROx8, ZEROx8, + /* TRIGGER = 0x120, THUMB = 0x121 */ + /* 0x100 */ ZEROx4, 0x03, 0x00, 0x00, 0x00, + }, + }, + { /* https://github.com/ValveSoftware/Proton/issues/5126 */ + .name = "Leo Bodnar Logitech® G25 Pedals", + .bus_type = 0x0003, + .vendor_id = 0x1dd2, /* Leo Bodnar Electronics Ltd */ + .product_id = 0x100c, + .version = 0x0110, + /* TODO: Ideally we would identify this as a joystick, but there + * isn't currently enough information to do that without a table + * of known devices. */ + .expected = SDL_UDEV_DEVICE_JOYSTICK, + .todo = "https://github.com/ValveSoftware/Proton/issues/5126", + /* SYN, ABS */ + .ev = { 0x09 }, + /* RX, RY, RZ */ + .abs = { 0x38 }, + }, + { /* https://github.com/ValveSoftware/Proton/issues/5126 */ + .name = "FANATEC ClubSport USB Handbrake", + .bus_type = 0x0003, + .vendor_id = 0x0eb7, + .product_id = 0x1a93, + .version = 0x0111, + /* TODO: Ideally we would identify this as a joystick, but there + * isn't currently enough information to do that without a table + * of known devices. */ + .expected = SDL_UDEV_DEVICE_JOYSTICK, + .todo = "https://github.com/ValveSoftware/Proton/issues/5126", + /* SYN, ABS */ + .ev = { 0x09 }, + /* X only */ + .abs = { 0x01 }, + .hid_report_descriptor_length = sizeof (fanatec_handbrake_hid_report_descriptor), + .hid_report_descriptor = &fanatec_handbrake_hid_report_descriptor[0], + }, + { /* Artificial test data, not a real device */ + .name = "Fake accelerometer with fewer than usual axes reported", + .expected = SDL_UDEV_DEVICE_ACCELEROMETER, + /* SYN, ABS */ + .ev = { 0x09 }, + /* X only */ + .abs = { 0x01 }, + /* ACCELEROMETER */ + .props = { 0x40 }, + }, + { /* Artificial test data, not a real device */ + .name = "Fake pointing stick with no buttons", + .expected = SDL_UDEV_DEVICE_MOUSE, + /* SYN, REL */ + .ev = { 0x05 }, + /* X,Y */ + .rel = { 0x03 }, + /* POINTER, POINTING_STICK */ + .props = { 0x21 }, + }, + { /* Artificial test data, not a real device */ + .name = "Fake buttonpad", + .expected = SDL_UDEV_DEVICE_TOUCHPAD, + /* SYN, ABS */ + .ev = { 0x09 }, + /* X,Y */ + .abs = { 0x03 }, + /* POINTER, BUTTONPAD */ + .props = { 0x05 }, + }, + { + .name = "No information", + .expected = SDL_UDEV_DEVICE_UNKNOWN, + } +}; +/* *INDENT-ON* */ /* clang-format on */ + +/* The Linux kernel provides capability info in EVIOCGBIT and in /sys + * as an array of unsigned long in native byte order, rather than an array + * of bytes, an array of native-endian 32-bit words or an array of + * native-endian 64-bit words like you might have reasonably expected. + * The order of words in the array is always lowest-valued first: for + * instance, the first unsigned long in abs[] contains the bit representing + * absolute axis 0 (ABS_X). + * + * The constant arrays above provide test data in little-endian, because + * that's the easiest representation for hard-coding into a test like this. + * On a big-endian platform we need to byteswap it, one unsigned long at a + * time, to match what the kernel would produce. This requires us to choose + * an appropriate byteswapping function for the architecture's word size. */ +SDL_COMPILE_TIME_ASSERT(sizeof_long, sizeof(unsigned long) == 4 || sizeof(unsigned long) == 8); +#define SwapLongLE(X) \ + ((sizeof(unsigned long) == 4) ? SDL_SwapLE32(X) : SDL_SwapLE64(X)) + +static int +run_test(void) +{ + int success = 1; + size_t i; + + for (i = 0; i < SDL_arraysize(guess_tests); i++) { + const GuessTest *t = &guess_tests[i]; + size_t j; + int actual; + struct + { + unsigned long props[NBITS(INPUT_PROP_MAX)]; + unsigned long ev[NBITS(EV_MAX)]; + unsigned long abs[NBITS(ABS_MAX)]; + unsigned long keys[NBITS(KEY_MAX)]; + unsigned long rel[NBITS(REL_MAX)]; + } caps; + + printf("%s...\n", t->name); + + SDL_memset(&caps, '\0', sizeof(caps)); + SDL_memcpy(caps.props, t->props, sizeof(t->props)); + SDL_memcpy(caps.ev, t->ev, sizeof(t->ev)); + SDL_memcpy(caps.keys, t->keys, sizeof(t->keys)); + SDL_memcpy(caps.abs, t->abs, sizeof(t->abs)); + SDL_memcpy(caps.rel, t->rel, sizeof(t->rel)); + + for (j = 0; j < SDL_arraysize(caps.props); j++) { + caps.props[j] = SwapLongLE(caps.props[j]); + } + + for (j = 0; j < SDL_arraysize(caps.ev); j++) { + caps.ev[j] = SwapLongLE(caps.ev[j]); + } + + for (j = 0; j < SDL_arraysize(caps.keys); j++) { + caps.keys[j] = SwapLongLE(caps.keys[j]); + } + + for (j = 0; j < SDL_arraysize(caps.abs); j++) { + caps.abs[j] = SwapLongLE(caps.abs[j]); + } + + for (j = 0; j < SDL_arraysize(caps.rel); j++) { + caps.rel[j] = SwapLongLE(caps.rel[j]); + } + + actual = SDL_EVDEV_GuessDeviceClass(caps.props, caps.ev, caps.abs, + caps.keys, caps.rel); + + if (actual == t->expected) { + printf("\tOK\n"); + } else { + printf("\tExpected 0x%08x\n", t->expected); + + for (j = 0; device_classes[j].code != 0; j++) { + if (t->expected & device_classes[j].code) { + printf("\t\t%s\n", device_classes[j].name); + } + } + + printf("\tGot 0x%08x\n", actual); + + for (j = 0; device_classes[j].code != 0; j++) { + if (actual & device_classes[j].code) { + printf("\t\t%s\n", device_classes[j].name); + } + } + + if (t->todo) { + printf("\tKnown issue, ignoring: %s\n", t->todo); + } else { + printf("\tFailed\n"); + success = 0; + } + } + } + + return success; +} + +#else /* !(HAVE_LIBUDEV_H || defined(SDL_JOYSTICK_LINUX)) */ + +static int +run_test(void) +{ + printf("SDL compiled without evdev capability check.\n"); + return 1; +} + +#endif + +int main(int argc, char *argv[]) +{ + int result; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + result = run_test() ? 0 : 1; + + SDLTest_CommonDestroyState(state); + return result; +} diff --git a/vendor/sdl-3.0.0/test/testffmpeg.c b/vendor/sdl-3.0.0/test/testffmpeg.c new file mode 100644 index 0000000..cc75a5f --- /dev/null +++ b/vendor/sdl-3.0.0/test/testffmpeg.c @@ -0,0 +1,1143 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +/* Simple program: Display a video with a sprite bouncing around over it + * + * For a more complete video example, see ffplay.c in the ffmpeg sources. + */ + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +#ifdef HAVE_EGL +#include +#include +#include + +#include + +#ifndef fourcc_code +#define fourcc_code(a, b, c, d) ((uint32_t)(a) | ((uint32_t)(b) << 8) | ((uint32_t)(c) << 16) | ((uint32_t)(d) << 24)) +#endif +#ifndef DRM_FORMAT_R8 +#define DRM_FORMAT_R8 fourcc_code('R', '8', ' ', ' ') +#endif +#ifndef DRM_FORMAT_GR88 +#define DRM_FORMAT_GR88 fourcc_code('G', 'R', '8', '8') +#endif +#endif + +#ifdef __APPLE__ +#include "testffmpeg_videotoolbox.h" +#endif + +#ifdef __WIN32__ +#define COBJMACROS +#include +#endif /* __WIN32__ */ + +#include "icon.h" + +static SDL_Texture *sprite; +static SDL_FRect *positions; +static SDL_FRect *velocities; +static int sprite_w, sprite_h; +static int num_sprites = 0; + +static SDL_Window *window; +static SDL_Renderer *renderer; +static SDL_AudioStream *audio; +static SDL_Texture *video_texture; +static Uint64 video_start; +static SDL_bool software_only; +static SDL_bool has_eglCreateImage; +#ifdef HAVE_EGL +static SDL_bool has_EGL_EXT_image_dma_buf_import; +static PFNGLACTIVETEXTUREARBPROC glActiveTextureARBFunc; +static PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glEGLImageTargetTexture2DOESFunc; +#endif +#ifdef __APPLE__ +static SDL_bool has_videotoolbox_output; +#endif +#ifdef __WIN32__ +static ID3D11Device *d3d11_device; +static ID3D11DeviceContext *d3d11_context; +static const GUID SDL_IID_ID3D11Resource = { 0xdc8e63f3, 0xd12b, 0x4952, { 0xb4, 0x7b, 0x5e, 0x45, 0x02, 0x6a, 0x86, 0x2d } }; +#endif +struct SwsContextContainer +{ + struct SwsContext *context; +}; +static const char *SWS_CONTEXT_CONTAINER_PROPERTY = "SWS_CONTEXT_CONTAINER"; +static int done; + +static SDL_bool CreateWindowAndRenderer(Uint32 window_flags, const char *driver) +{ + SDL_RendererInfo info; + SDL_bool useEGL = (driver && SDL_strcmp(driver, "opengles2") == 0); + + SDL_SetHint(SDL_HINT_RENDER_DRIVER, driver); + if (useEGL) { + SDL_SetHint(SDL_HINT_VIDEO_FORCE_EGL, "1"); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); + } else { + SDL_SetHint(SDL_HINT_VIDEO_FORCE_EGL, "0"); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, 0); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); + } + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); + + /* The window will be resized to the video size when it's loaded, in OpenVideoStream() */ + if (SDL_CreateWindowAndRenderer(320, 200, window_flags, &window, &renderer) < 0) { + return SDL_FALSE; + } + + if (SDL_GetRendererInfo(renderer, &info) == 0) { + SDL_Log("Created renderer %s\n", info.name); + } + +#ifdef HAVE_EGL + if (useEGL) { + const char *extensions = eglQueryString(eglGetCurrentDisplay(), EGL_EXTENSIONS); + if (SDL_strstr(extensions, "EGL_EXT_image_dma_buf_import") != NULL) { + has_EGL_EXT_image_dma_buf_import = SDL_TRUE; + } + + if (SDL_GL_ExtensionSupported("GL_OES_EGL_image")) { + glEGLImageTargetTexture2DOESFunc = (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC)eglGetProcAddress("glEGLImageTargetTexture2DOES"); + } + + glActiveTextureARBFunc = (PFNGLACTIVETEXTUREARBPROC)SDL_GL_GetProcAddress("glActiveTextureARB"); + + if (has_EGL_EXT_image_dma_buf_import && + glEGLImageTargetTexture2DOESFunc && + glActiveTextureARBFunc) { + has_eglCreateImage = SDL_TRUE; + } + } +#endif /* HAVE_EGL */ + +#ifdef __APPLE__ + has_videotoolbox_output = SetupVideoToolboxOutput(renderer); +#endif + +#ifdef __WIN32__ + d3d11_device = SDL_GetRenderD3D11Device(renderer); + if (d3d11_device) { + ID3D11Device_GetImmediateContext(d3d11_device, &d3d11_context); + } +#endif + + return SDL_TRUE; +} + +static SDL_Texture *CreateTexture(SDL_Renderer *r, unsigned char *data, unsigned int len, int *w, int *h) { + SDL_Texture *texture = NULL; + SDL_Surface *surface; + SDL_RWops *src = SDL_RWFromConstMem(data, len); + if (src) { + surface = SDL_LoadBMP_RW(src, SDL_TRUE); + if (surface) { + /* Treat white as transparent */ + SDL_SetSurfaceColorKey(surface, SDL_TRUE, SDL_MapRGB(surface->format, 255, 255, 255)); + + texture = SDL_CreateTextureFromSurface(r, surface); + *w = surface->w; + *h = surface->h; + SDL_DestroySurface(surface); + } + } + return texture; +} + +static void MoveSprite(void) +{ + SDL_Rect viewport; + SDL_FRect *position, *velocity; + int i; + + SDL_GetRenderViewport(renderer, &viewport); + + for (i = 0; i < num_sprites; ++i) { + position = &positions[i]; + velocity = &velocities[i]; + position->x += velocity->x; + if ((position->x < 0) || (position->x >= (viewport.w - sprite_w))) { + velocity->x = -velocity->x; + position->x += velocity->x; + } + position->y += velocity->y; + if ((position->y < 0) || (position->y >= (viewport.h - sprite_h))) { + velocity->y = -velocity->y; + position->y += velocity->y; + } + } + + /* Blit the sprite onto the screen */ + for (i = 0; i < num_sprites; ++i) { + position = &positions[i]; + + /* Blit the sprite onto the screen */ + SDL_RenderTexture(renderer, sprite, NULL, position); + } +} + +static Uint32 GetTextureFormat(enum AVPixelFormat format) +{ + switch (format) { + case AV_PIX_FMT_RGB8: + return SDL_PIXELFORMAT_RGB332; + case AV_PIX_FMT_RGB444: + return SDL_PIXELFORMAT_RGB444; + case AV_PIX_FMT_RGB555: + return SDL_PIXELFORMAT_RGB555; + case AV_PIX_FMT_BGR555: + return SDL_PIXELFORMAT_BGR555; + case AV_PIX_FMT_RGB565: + return SDL_PIXELFORMAT_RGB565; + case AV_PIX_FMT_BGR565: + return SDL_PIXELFORMAT_BGR565; + case AV_PIX_FMT_RGB24: + return SDL_PIXELFORMAT_RGB24; + case AV_PIX_FMT_BGR24: + return SDL_PIXELFORMAT_BGR24; + case AV_PIX_FMT_0RGB32: + return SDL_PIXELFORMAT_XRGB8888; + case AV_PIX_FMT_0BGR32: + return SDL_PIXELFORMAT_XBGR8888; + case AV_PIX_FMT_NE(RGB0, 0BGR): + return SDL_PIXELFORMAT_RGBX8888; + case AV_PIX_FMT_NE(BGR0, 0RGB): + return SDL_PIXELFORMAT_BGRX8888; + case AV_PIX_FMT_RGB32: + return SDL_PIXELFORMAT_ARGB8888; + case AV_PIX_FMT_RGB32_1: + return SDL_PIXELFORMAT_RGBA8888; + case AV_PIX_FMT_BGR32: + return SDL_PIXELFORMAT_ABGR8888; + case AV_PIX_FMT_BGR32_1: + return SDL_PIXELFORMAT_BGRA8888; + case AV_PIX_FMT_YUV420P: + return SDL_PIXELFORMAT_IYUV; + case AV_PIX_FMT_YUYV422: + return SDL_PIXELFORMAT_YUY2; + case AV_PIX_FMT_UYVY422: + return SDL_PIXELFORMAT_UYVY; + default: + return SDL_PIXELFORMAT_UNKNOWN; + } +} + +static SDL_bool SupportedPixelFormat(enum AVPixelFormat format) +{ + if (!software_only) { + if (has_eglCreateImage && + (format == AV_PIX_FMT_VAAPI || format == AV_PIX_FMT_DRM_PRIME)) { + return SDL_TRUE; + } +#ifdef __APPLE__ + if (has_videotoolbox_output && format == AV_PIX_FMT_VIDEOTOOLBOX) { + return SDL_TRUE; + } +#endif +#ifdef __WIN32__ + if (d3d11_device && format == AV_PIX_FMT_D3D11) { + return SDL_TRUE; + } +#endif + } + + if (GetTextureFormat(format) != SDL_PIXELFORMAT_UNKNOWN) { + return SDL_TRUE; + } + return SDL_FALSE; +} + +static enum AVPixelFormat GetSupportedPixelFormat(AVCodecContext *s, const enum AVPixelFormat *pix_fmts) +{ + const enum AVPixelFormat *p; + + for (p = pix_fmts; *p != AV_PIX_FMT_NONE; p++) { + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(*p); + + if (!(desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) { + /* We support all memory formats using swscale */ + break; + } + + if (SupportedPixelFormat(*p)) { + /* We support this format */ + break; + } + } + + if (*p == AV_PIX_FMT_NONE) { + SDL_Log("Couldn't find a supported pixel format:\n"); + for (p = pix_fmts; *p != AV_PIX_FMT_NONE; p++) { + SDL_Log(" %s\n", av_get_pix_fmt_name(*p)); + } + } + + return *p; +} + +static AVCodecContext *OpenVideoStream(AVFormatContext *ic, int stream, const AVCodec *codec) +{ + AVStream *st = ic->streams[stream]; + AVCodecParameters *codecpar = st->codecpar; + AVCodecContext *context; + const AVCodecHWConfig *config; + enum AVHWDeviceType type; + int i; + int result; + + SDL_Log("Video stream: %s %dx%d\n", avcodec_get_name(codec->id), codecpar->width, codecpar->height); + + context = avcodec_alloc_context3(NULL); + if (!context) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "avcodec_alloc_context3 failed"); + return NULL; + } + + result = avcodec_parameters_to_context(context, ic->streams[stream]->codecpar); + if (result < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "avcodec_parameters_to_context failed: %s\n", av_err2str(result)); + avcodec_free_context(&context); + return NULL; + } + context->pkt_timebase = ic->streams[stream]->time_base; + + /* Look for supported hardware accelerated configurations */ + i = 0; + while (!context->hw_device_ctx && + (config = avcodec_get_hw_config(codec, i++)) != NULL) { +#if 0 + SDL_Log("Found %s hardware acceleration with pixel format %s\n", av_hwdevice_get_type_name(config->device_type), av_get_pix_fmt_name(config->pix_fmt)); +#endif + + if (!(config->methods & AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX) || + !SupportedPixelFormat(config->pix_fmt)) { + continue; + } + + type = AV_HWDEVICE_TYPE_NONE; + while (!context->hw_device_ctx && + (type = av_hwdevice_iterate_types(type)) != AV_HWDEVICE_TYPE_NONE) { + if (type != config->device_type) { + continue; + } + +#ifdef __WIN32__ + if (d3d11_device && type == AV_HWDEVICE_TYPE_D3D11VA) { + AVD3D11VADeviceContext *device_context; + + context->hw_device_ctx = av_hwdevice_ctx_alloc(type); + + device_context = (AVD3D11VADeviceContext *)((AVHWDeviceContext *)context->hw_device_ctx->data)->hwctx; + device_context->device = d3d11_device; + ID3D11Device_AddRef(device_context->device); + device_context->device_context = d3d11_context; + ID3D11DeviceContext_AddRef(device_context->device_context); + + result = av_hwdevice_ctx_init(context->hw_device_ctx); + if (result < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create hardware device context: %s", av_err2str(result)); + } else { + SDL_Log("Using %s hardware acceleration with pixel format %s\n", av_hwdevice_get_type_name(config->device_type), av_get_pix_fmt_name(config->pix_fmt)); + } + } else +#endif + { + result = av_hwdevice_ctx_create(&context->hw_device_ctx, type, NULL, NULL, 0); + if (result < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create hardware device context: %s", av_err2str(result)); + } else { + SDL_Log("Using %s hardware acceleration with pixel format %s\n", av_hwdevice_get_type_name(config->device_type), av_get_pix_fmt_name(config->pix_fmt)); + } + } + } + } + + /* Allow supported hardware accelerated pixel formats */ + context->get_format = GetSupportedPixelFormat; + + result = avcodec_open2(context, codec, NULL); + if (result < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open codec %s: %s", avcodec_get_name(context->codec_id), av_err2str(result)); + avcodec_free_context(&context); + return NULL; + } + + SDL_SetWindowSize(window, codecpar->width, codecpar->height); + + return context; +} + +static void SetYUVConversionMode(AVFrame *frame) +{ + SDL_YUV_CONVERSION_MODE mode = SDL_YUV_CONVERSION_AUTOMATIC; + if (frame && (frame->format == AV_PIX_FMT_YUV420P || frame->format == AV_PIX_FMT_YUYV422 || frame->format == AV_PIX_FMT_UYVY422)) { + if (frame->color_range == AVCOL_RANGE_JPEG) + mode = SDL_YUV_CONVERSION_JPEG; + else if (frame->colorspace == AVCOL_SPC_BT709) + mode = SDL_YUV_CONVERSION_BT709; + else if (frame->colorspace == AVCOL_SPC_BT470BG || frame->colorspace == AVCOL_SPC_SMPTE170M) + mode = SDL_YUV_CONVERSION_BT601; + } + SDL_SetYUVConversionMode(mode); /* FIXME: no support for linear transfer */ +} + +static void SDLCALL FreeSwsContextContainer(void *userdata, void *value) +{ + struct SwsContextContainer *sws_container = (struct SwsContextContainer *)value; + if (sws_container->context) { + sws_freeContext(sws_container->context); + } + SDL_free(sws_container); +} + +static SDL_bool GetTextureForMemoryFrame(AVFrame *frame, SDL_Texture **texture) +{ + int texture_width = 0, texture_height = 0; + Uint32 texture_format = SDL_PIXELFORMAT_UNKNOWN; + Uint32 frame_format = GetTextureFormat(frame->format); + + if (*texture) { + SDL_QueryTexture(*texture, &texture_format, NULL, &texture_width, &texture_height); + } + if (!*texture || texture_width != frame->width || texture_height != frame->height || + (frame_format != SDL_PIXELFORMAT_UNKNOWN && texture_format != frame_format) || + (frame_format == SDL_PIXELFORMAT_UNKNOWN && texture_format != SDL_PIXELFORMAT_ARGB8888)) { + if (*texture) { + SDL_DestroyTexture(*texture); + } + + if (frame_format == SDL_PIXELFORMAT_UNKNOWN) { + *texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, frame->width, frame->height); + } else { + *texture = SDL_CreateTexture(renderer, frame_format, SDL_TEXTUREACCESS_STREAMING, frame->width, frame->height); + } + if (!*texture) { + return SDL_FALSE; + } + + if (frame_format == SDL_PIXELFORMAT_UNKNOWN || SDL_ISPIXELFORMAT_ALPHA(frame_format)) { + SDL_SetTextureBlendMode(*texture, SDL_BLENDMODE_BLEND); + } else { + SDL_SetTextureBlendMode(*texture, SDL_BLENDMODE_NONE); + } + SDL_SetTextureScaleMode(*texture, SDL_SCALEMODE_LINEAR); + } + + switch (frame_format) { + case SDL_PIXELFORMAT_UNKNOWN: + { + SDL_PropertiesID props = SDL_GetTextureProperties(*texture); + struct SwsContextContainer *sws_container = (struct SwsContextContainer *)SDL_GetProperty(props, SWS_CONTEXT_CONTAINER_PROPERTY); + if (!sws_container) { + sws_container = (struct SwsContextContainer *)SDL_calloc(1, sizeof(*sws_container)); + if (!sws_container) { + SDL_OutOfMemory(); + return SDL_FALSE; + } + SDL_SetProperty(props, SWS_CONTEXT_CONTAINER_PROPERTY, sws_container, FreeSwsContextContainer, NULL); + } + sws_container->context = sws_getCachedContext(sws_container->context, frame->width, frame->height, frame->format, frame->width, frame->height, AV_PIX_FMT_BGRA, SWS_POINT, NULL, NULL, NULL); + if (sws_container->context) { + uint8_t *pixels[4]; + int pitch[4]; + if (SDL_LockTexture(*texture, NULL, (void **)&pixels[0], &pitch[0]) == 0) { + sws_scale(sws_container->context, (const uint8_t * const *)frame->data, frame->linesize, 0, frame->height, pixels, pitch); + SDL_UnlockTexture(*texture); + } + } else { + SDL_SetError("Can't initialize the conversion context"); + return SDL_FALSE; + } + break; + } + case SDL_PIXELFORMAT_IYUV: + if (frame->linesize[0] > 0 && frame->linesize[1] > 0 && frame->linesize[2] > 0) { + SDL_UpdateYUVTexture(*texture, NULL, frame->data[0], frame->linesize[0], + frame->data[1], frame->linesize[1], + frame->data[2], frame->linesize[2]); + } else if (frame->linesize[0] < 0 && frame->linesize[1] < 0 && frame->linesize[2] < 0) { + SDL_UpdateYUVTexture(*texture, NULL, frame->data[0] + frame->linesize[0] * (frame->height - 1), -frame->linesize[0], + frame->data[1] + frame->linesize[1] * (AV_CEIL_RSHIFT(frame->height, 1) - 1), -frame->linesize[1], + frame->data[2] + frame->linesize[2] * (AV_CEIL_RSHIFT(frame->height, 1) - 1), -frame->linesize[2]); + } + SetYUVConversionMode(frame); + break; + default: + if (frame->linesize[0] < 0) { + SDL_UpdateTexture(*texture, NULL, frame->data[0] + frame->linesize[0] * (frame->height - 1), -frame->linesize[0]); + } else { + SDL_UpdateTexture(*texture, NULL, frame->data[0], frame->linesize[0]); + } + break; + } + return SDL_TRUE; +} + +static SDL_bool GetTextureForDRMFrame(AVFrame *frame, SDL_Texture **texture) +{ +#ifdef HAVE_EGL + const AVDRMFrameDescriptor *desc = (const AVDRMFrameDescriptor *)frame->data[0]; + int i, j, image_index, num_planes; + EGLDisplay display = eglGetCurrentDisplay(); + + /* FIXME: Assuming NV12 data format */ + num_planes = 0; + for (i = 0; i < desc->nb_layers; ++i) { + num_planes += desc->layers[i].nb_planes; + } + if (num_planes != 2) { + SDL_SetError("Expected NV12 frames with 2 planes, instead got %d planes", num_planes); + return SDL_FALSE; + } + + if (*texture) { + /* Free the previous texture now that we're about to render a new one */ + SDL_DestroyTexture(*texture); + } else { + /* First time set up for NV12 textures */ + SDL_SetHint("SDL_RENDER_OPENGL_NV12_RG_SHADER", "1"); + + SetYUVConversionMode(frame); + } + + *texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_NV12, SDL_TEXTUREACCESS_STATIC, frame->width, frame->height); + if (!*texture) { + return SDL_FALSE; + } + SDL_SetTextureBlendMode(*texture, SDL_BLENDMODE_NONE); + SDL_SetTextureScaleMode(*texture, SDL_SCALEMODE_LINEAR); + + /* Bind the texture for importing */ + SDL_GL_BindTexture(*texture, NULL, NULL); + + /* import the frame into OpenGL */ + image_index = 0; + for (i = 0; i < desc->nb_layers; ++i) { + const AVDRMLayerDescriptor *layer = &desc->layers[i]; + for (j = 0; j < layer->nb_planes; ++j) { + static const uint32_t formats[ 2 ] = { DRM_FORMAT_R8, DRM_FORMAT_GR88 }; + const AVDRMPlaneDescriptor *plane = &layer->planes[j]; + const AVDRMObjectDescriptor *object = &desc->objects[plane->object_index]; + EGLAttrib img_attr[] = { + EGL_LINUX_DRM_FOURCC_EXT, formats[i], + EGL_WIDTH, frame->width / ( image_index + 1 ), /* half size for chroma */ + EGL_HEIGHT, frame->height / ( image_index + 1 ), + EGL_DMA_BUF_PLANE0_FD_EXT, object->fd, + EGL_DMA_BUF_PLANE0_OFFSET_EXT, plane->offset, + EGL_DMA_BUF_PLANE0_PITCH_EXT, plane->pitch, + EGL_NONE + }; + EGLImage pImage = eglCreateImage(display, EGL_NO_CONTEXT, EGL_LINUX_DMA_BUF_EXT, NULL, img_attr); + + glActiveTextureARBFunc(GL_TEXTURE0_ARB + image_index); + glEGLImageTargetTexture2DOESFunc(GL_TEXTURE_2D, pImage); + ++image_index; + } + } + + SDL_GL_UnbindTexture(*texture); + + return SDL_TRUE; +#else + return SDL_FALSE; +#endif +} + +static SDL_bool GetTextureForVAAPIFrame(AVFrame *frame, SDL_Texture **texture) +{ + AVFrame *drm_frame; + SDL_bool result = SDL_FALSE; + + drm_frame = av_frame_alloc(); + if (drm_frame) { + drm_frame->format = AV_PIX_FMT_DRM_PRIME; + if (av_hwframe_map(drm_frame, frame, 0) == 0) { + result = GetTextureForDRMFrame(drm_frame, texture); + } else { + SDL_SetError("Couldn't map hardware frame"); + } + av_frame_free(&drm_frame); + } else { + SDL_OutOfMemory(); + } + return result; +} + +static SDL_bool GetTextureForD3D11Frame(AVFrame *frame, SDL_Texture **texture) +{ +#ifdef __WIN32__ + int texture_width = 0, texture_height = 0; + ID3D11Texture2D *pTexture = (ID3D11Texture2D *)frame->data[0]; + UINT iSliceIndex = (UINT)(uintptr_t)frame->data[1]; + + D3D11_TEXTURE2D_DESC desc; + SDL_zero(desc); + ID3D11Texture2D_GetDesc(pTexture, &desc); + if (desc.Format != DXGI_FORMAT_NV12) { + SDL_SetError("Unsupported texture format, expected DXGI_FORMAT_NV12, got %d", desc.Format); + return SDL_FALSE; + } + + if (*texture) { + SDL_QueryTexture(*texture, NULL, NULL, &texture_width, &texture_height); + } + if (!*texture || (UINT)texture_width != desc.Width || (UINT)texture_height != desc.Height) { + if (*texture) { + SDL_DestroyTexture(*texture); + } else { + /* First time set up for NV12 textures */ + SetYUVConversionMode(frame); + } + + *texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_NV12, SDL_TEXTUREACCESS_STATIC, desc.Width, desc.Height); + if (!*texture) { + return SDL_FALSE; + } + } + + IDXGIResource *dxgi_resource = SDL_GetTextureDXGIResource(*texture); + if (!dxgi_resource) { + return SDL_FALSE; + } + + ID3D11Resource *dx11_resource = NULL; + HRESULT result = IDXGIResource_QueryInterface(dxgi_resource, &SDL_IID_ID3D11Resource, (void **)&dx11_resource); + IDXGIResource_Release(dxgi_resource); + if (FAILED(result)) { + SDL_SetError("Couldn't get texture ID3D11Resource interface: 0x%x", result); + return SDL_FALSE; + } + ID3D11DeviceContext_CopySubresourceRegion(d3d11_context, dx11_resource, 0, 0, 0, 0, (ID3D11Resource *)pTexture, iSliceIndex, NULL); + ID3D11Resource_Release(dx11_resource); + + return SDL_TRUE; +#else + return SDL_FALSE; +#endif +} + +static SDL_bool GetTextureForFrame(AVFrame *frame, SDL_Texture **texture) +{ + switch (frame->format) { + case AV_PIX_FMT_VAAPI: + return GetTextureForVAAPIFrame(frame, texture); + case AV_PIX_FMT_DRM_PRIME: + return GetTextureForDRMFrame(frame, texture); + case AV_PIX_FMT_D3D11: + return GetTextureForD3D11Frame(frame, texture); + default: + return GetTextureForMemoryFrame(frame, texture); + } +} + +static void DisplayVideoTexture(AVFrame *frame) +{ + /* Update the video texture */ + if (!GetTextureForFrame(frame, &video_texture)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't get texture for frame: %s\n", SDL_GetError()); + return; + } + + if (frame->linesize[0] < 0) { + SDL_RenderTextureRotated(renderer, video_texture, NULL, NULL, 0.0, NULL, SDL_FLIP_VERTICAL); + } else { + SDL_RenderTexture(renderer, video_texture, NULL, NULL); + } +} + +static void DisplayVideoToolbox(AVFrame *frame) +{ +#ifdef __APPLE__ + SDL_Rect viewport; + SDL_GetRenderViewport(renderer, &viewport); + DisplayVideoToolboxFrame(renderer, frame->data[3], 0, 0, frame->width, frame->height, viewport.x, viewport.y, viewport.w, viewport.h); +#endif +} + +static void DisplayVideoFrame(AVFrame *frame) +{ + switch (frame->format) { + case AV_PIX_FMT_VIDEOTOOLBOX: + DisplayVideoToolbox(frame); + break; + default: + DisplayVideoTexture(frame); + break; + } +} + +static void HandleVideoFrame(AVFrame *frame, double pts) +{ + /* Quick and dirty PTS handling */ + if (!video_start) { + video_start = SDL_GetTicks(); + } + double now = (double)(SDL_GetTicks() - video_start) / 1000.0; + while (now < pts - 0.001) { + SDL_Delay(1); + now = (double)(SDL_GetTicks() - video_start) / 1000.0; + } + + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + SDL_RenderClear(renderer); + + DisplayVideoFrame(frame); + + /* Render any bouncing balls */ + MoveSprite(); + + SDL_RenderPresent(renderer); +} + +static AVCodecContext *OpenAudioStream(AVFormatContext *ic, int stream, const AVCodec *codec) +{ + AVStream *st = ic->streams[stream]; + AVCodecParameters *codecpar = st->codecpar; + AVCodecContext *context; + int result; + + SDL_Log("Audio stream: %s %d channels, %d Hz\n", avcodec_get_name(codec->id), codecpar->ch_layout.nb_channels, codecpar->sample_rate); + + context = avcodec_alloc_context3(NULL); + if (!context) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "avcodec_alloc_context3 failed\n"); + return NULL; + } + + result = avcodec_parameters_to_context(context, ic->streams[stream]->codecpar); + if (result < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "avcodec_parameters_to_context failed: %s\n", av_err2str(result)); + avcodec_free_context(&context); + return NULL; + } + context->pkt_timebase = ic->streams[stream]->time_base; + + result = avcodec_open2(context, codec, NULL); + if (result < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open codec %s: %s", avcodec_get_name(context->codec_id), av_err2str(result)); + avcodec_free_context(&context); + return NULL; + } + + SDL_AudioSpec spec = { SDL_AUDIO_F32, codecpar->ch_layout.nb_channels, codecpar->sample_rate }; + audio = SDL_OpenAudioDeviceStream(SDL_AUDIO_DEVICE_DEFAULT_OUTPUT, &spec, NULL, NULL); + if (audio) { + SDL_ResumeAudioDevice(SDL_GetAudioStreamDevice(audio)); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open audio: %s", SDL_GetError()); + } + return context; +} + +static SDL_AudioFormat GetAudioFormat(enum AVSampleFormat format) +{ + switch (format) { + case AV_SAMPLE_FMT_U8: + case AV_SAMPLE_FMT_U8P: + return SDL_AUDIO_U8; + case AV_SAMPLE_FMT_S16: + case AV_SAMPLE_FMT_S16P: + return SDL_AUDIO_S16; + case AV_SAMPLE_FMT_S32: + case AV_SAMPLE_FMT_S32P: + return SDL_AUDIO_S32; + case AV_SAMPLE_FMT_FLT: + case AV_SAMPLE_FMT_FLTP: + return SDL_AUDIO_F32; + default: + /* Unsupported */ + return 0; + } +} + +static SDL_bool IsPlanarAudioFormat(enum AVSampleFormat format) +{ + switch (format) { + case AV_SAMPLE_FMT_U8P: + case AV_SAMPLE_FMT_S16P: + case AV_SAMPLE_FMT_S32P: + case AV_SAMPLE_FMT_FLTP: + case AV_SAMPLE_FMT_DBLP: + case AV_SAMPLE_FMT_S64P: + return SDL_TRUE; + default: + return SDL_FALSE; + } +} + +static void InterleaveAudio(AVFrame *frame, const SDL_AudioSpec *spec) +{ + int c, n; + int samplesize = SDL_AUDIO_BYTESIZE(spec->format); + int framesize = SDL_AUDIO_FRAMESIZE(*spec); + Uint8 *data = (Uint8 *)SDL_malloc(frame->nb_samples * framesize); + if (!data) { + return; + } + + /* This could be optimized with SIMD and not allocating memory each time */ + for (c = 0; c < spec->channels; ++c) { + const Uint8 *src = frame->data[c]; + Uint8 *dst = data + c * samplesize; + for (n = frame->nb_samples; n--; ) { + SDL_memcpy(dst, src, samplesize); + src += samplesize; + dst += framesize; + } + } + SDL_PutAudioStreamData(audio, data, frame->nb_samples * framesize); + SDL_free(data); +} + +static void HandleAudioFrame(AVFrame *frame) +{ + if (audio) { + SDL_AudioSpec spec = { GetAudioFormat(frame->format), frame->ch_layout.nb_channels, frame->sample_rate }; + SDL_SetAudioStreamFormat(audio, &spec, NULL); + + if (frame->ch_layout.nb_channels > 1 && IsPlanarAudioFormat(frame->format)) { + InterleaveAudio(frame, &spec); + } else { + SDL_PutAudioStreamData(audio, frame->data[0], frame->nb_samples * SDL_AUDIO_FRAMESIZE(spec)); + } + } +} + +static void print_usage(SDLTest_CommonState *state, const char *argv0) { + static const char *options[] = { "[--sprites N]", "[--audio-codec codec]", "[--video-codec codec]", "[--software]", "video_file", NULL }; + SDLTest_CommonLogUsage(state, argv0, options); +} + +int main(int argc, char *argv[]) +{ + const char *file = NULL; + AVFormatContext *ic = NULL; + int audio_stream = -1; + int video_stream = -1; + const char *audio_codec_name = NULL; + const char *video_codec_name = NULL; + const AVCodec *audio_codec = NULL; + const AVCodec *video_codec = NULL; + AVCodecContext *audio_context = NULL; + AVCodecContext *video_context = NULL; + AVPacket *pkt = NULL; + AVFrame *frame = NULL; + double first_pts = -1.0; + int i; + int result; + int return_code = -1; + Uint32 window_flags; + SDL_bool flushing = SDL_FALSE; + SDL_bool decoded = SDL_FALSE; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (SDL_strcmp(argv[i], "--sprites") == 0 && argv[i+1]) { + num_sprites = SDL_atoi(argv[i+1]); + consumed = 2; + } else if (SDL_strcmp(argv[i], "--audio-codec") == 0 && argv[i+1]) { + audio_codec_name = argv[i+1]; + consumed = 2; + } else if (SDL_strcmp(argv[i], "--video-codec") == 0 && argv[i+1]) { + video_codec_name = argv[i+1]; + consumed = 2; + } else if (SDL_strcmp(argv[i], "--software") == 0) { + software_only = SDL_TRUE; + consumed = 1; + } else if (!file) { + /* We'll try to open this as a media file */ + file = argv[i]; + consumed = 1; + } + } + if (consumed <= 0) { + print_usage(state, argv[0]); + return_code = 1; + goto quit; + } + + i += consumed; + } + + if (!file) { + print_usage(state, argv[0]); + return_code = 1; + goto quit; + } + + if (SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0) { + return_code = 2; + goto quit; + } + + window_flags = SDL_WINDOW_HIDDEN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_HIGH_PIXEL_DENSITY; +#ifdef __APPLE__ + window_flags |= SDL_WINDOW_METAL; +#elif !defined(__WIN32__) + window_flags |= SDL_WINDOW_OPENGL; +#endif +#ifdef HAVE_EGL + /* Try to create an EGL compatible window for DRM hardware frame support */ + if (!window) { + CreateWindowAndRenderer(window_flags, "opengles2"); + } +#endif +#ifdef __APPLE__ + if (!window) { + CreateWindowAndRenderer(window_flags, "metal"); + } +#endif +#ifdef __WIN32__ + if (!window) { + CreateWindowAndRenderer(window_flags, "direct3d11"); + } +#endif + if (!window) { + if (!CreateWindowAndRenderer(window_flags, NULL)) { + return_code = 2; + goto quit; + } + } + + if (SDL_SetWindowTitle(window, file) < 0) { + SDL_Log("SDL_SetWindowTitle: %s", SDL_GetError()); + } + + /* Open the media file */ + result = avformat_open_input(&ic, file, NULL, NULL); + if (result < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open %s: %d", argv[1], result); + return_code = 4; + goto quit; + } + video_stream = av_find_best_stream(ic, AVMEDIA_TYPE_VIDEO, -1, -1, &video_codec, 0); + if (video_stream >= 0) { + if (video_codec_name) { + video_codec = avcodec_find_decoder_by_name(video_codec_name); + if (!video_codec) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't find codec '%s'", video_codec_name); + return_code = 4; + goto quit; + } + } + video_context = OpenVideoStream(ic, video_stream, video_codec); + if (!video_context) { + return_code = 4; + goto quit; + } + } + audio_stream = av_find_best_stream(ic, AVMEDIA_TYPE_AUDIO, -1, video_stream, &audio_codec, 0); + if (audio_stream >= 0) { + if (audio_codec_name) { + audio_codec = avcodec_find_decoder_by_name(audio_codec_name); + if (!audio_codec) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't find codec '%s'", audio_codec_name); + return_code = 4; + goto quit; + } + } + audio_context = OpenAudioStream(ic, audio_stream, audio_codec); + if (!audio_context) { + return_code = 4; + goto quit; + } + } + pkt = av_packet_alloc(); + if (!pkt) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "av_packet_alloc failed"); + return_code = 4; + goto quit; + } + frame = av_frame_alloc(); + if (!frame) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "av_frame_alloc failed"); + return_code = 4; + goto quit; + } + + /* Create the sprite */ + sprite = CreateTexture(renderer, icon_bmp, icon_bmp_len, &sprite_w, &sprite_h); + + if (sprite == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture (%s)", SDL_GetError()); + return_code = 3; + goto quit; + } + + /* Allocate memory for the sprite info */ + positions = (SDL_FRect *)SDL_malloc(num_sprites * sizeof(*positions)); + velocities = (SDL_FRect *)SDL_malloc(num_sprites * sizeof(*velocities)); + if (positions == NULL || velocities == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!\n"); + return_code = 3; + goto quit; + } + + /* Position sprites and set their velocities */ + SDL_Rect viewport; + SDL_GetRenderViewport(renderer, &viewport); + srand((unsigned int)time(NULL)); + for (i = 0; i < num_sprites; ++i) { + positions[i].x = (float)(rand() % (viewport.w - sprite_w)); + positions[i].y = (float)(rand() % (viewport.h - sprite_h)); + positions[i].w = (float)sprite_w; + positions[i].h = (float)sprite_h; + velocities[i].x = 0.0f; + velocities[i].y = 0.0f; + while (!velocities[i].x || !velocities[i].y) { + velocities[i].x = (float)((rand() % (2 + 1)) - 1); + velocities[i].y = (float)((rand() % (2 + 1)) - 1); + } + } + + /* We're ready to go! */ + SDL_ShowWindow(window); + + /* Main render loop */ + done = 0; + + while (!done) { + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + if (event.type == SDL_EVENT_QUIT || event.type == SDL_EVENT_KEY_DOWN) { + done = 1; + } + } + + if (!flushing) { + result = av_read_frame(ic, pkt); + if (result < 0) { + SDL_Log("End of stream, finishing decode\n"); + if (audio_context) { + avcodec_flush_buffers(audio_context); + } + if (video_context) { + avcodec_flush_buffers(video_context); + } + flushing = SDL_TRUE; + } else { + if (pkt->stream_index == audio_stream) { + result = avcodec_send_packet(audio_context, pkt); + if (result < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "avcodec_send_packet(audio_context) failed: %s", av_err2str(result)); + } + } else if (pkt->stream_index == video_stream) { + result = avcodec_send_packet(video_context, pkt); + if (result < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "avcodec_send_packet(video_context) failed: %s", av_err2str(result)); + } + } + av_packet_unref(pkt); + } + } + + decoded = SDL_FALSE; + if (audio_context) { + while (avcodec_receive_frame(audio_context, frame) >= 0) { + HandleAudioFrame(frame); + decoded = SDL_TRUE; + } + if (flushing) { + /* Let SDL know we're done sending audio */ + SDL_FlushAudioStream(audio); + } + } + if (video_context) { + while (avcodec_receive_frame(video_context, frame) >= 0) { + double pts = ((double)frame->pts * video_context->pkt_timebase.num) / video_context->pkt_timebase.den; + if (first_pts < 0.0) { + first_pts = pts; + } + pts -= first_pts; + + HandleVideoFrame(frame, pts); + decoded = SDL_TRUE; + } + } else { + /* Update video rendering */ + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + MoveSprite(); + SDL_RenderPresent(renderer); + } + + if (flushing && !decoded) { + if (SDL_GetAudioStreamQueued(audio) > 0) { + /* Wait a little bit for the audio to finish */ + SDL_Delay(10); + } else { + done = 1; + } + } + } + return_code = 0; +quit: +#ifdef __APPLE__ + CleanupVideoToolboxOutput(); +#endif +#ifdef __WIN32__ + if (d3d11_context) { + ID3D11DeviceContext_Release(d3d11_device); + d3d11_context = NULL; + } + if (d3d11_device) { + ID3D11Device_Release(d3d11_device); + d3d11_device = NULL; + } +#endif + SDL_free(positions); + SDL_free(velocities); + av_frame_free(&frame); + av_packet_free(&pkt); + avcodec_free_context(&audio_context); + avcodec_free_context(&video_context); + avformat_close_input(&ic); + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return return_code; +} diff --git a/vendor/sdl-3.0.0/test/testffmpeg_videotoolbox.h b/vendor/sdl-3.0.0/test/testffmpeg_videotoolbox.h new file mode 100644 index 0000000..2124295 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testffmpeg_videotoolbox.h @@ -0,0 +1,15 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +extern SDL_bool SetupVideoToolboxOutput(SDL_Renderer *renderer); +extern SDL_bool DisplayVideoToolboxFrame(SDL_Renderer *renderer, void *buffer, int srcX, int srcY, int srcW, int srcH, int dstX, int dstY, int dstW, int dstH ); +extern void CleanupVideoToolboxOutput(); diff --git a/vendor/sdl-3.0.0/test/testffmpeg_videotoolbox.m b/vendor/sdl-3.0.0/test/testffmpeg_videotoolbox.m new file mode 100644 index 0000000..e7d580c --- /dev/null +++ b/vendor/sdl-3.0.0/test/testffmpeg_videotoolbox.m @@ -0,0 +1,147 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +#include + +#include "testffmpeg_videotoolbox.h" + +#include +#include +#include +#include + + +// Metal BT.601 to RGB conversion shader +static NSString *drawMetalShaderSource = +@" using namespace metal;\n" +"\n" +" struct Vertex\n" +" {\n" +" float4 position [[position]];\n" +" float2 texCoords;\n" +" };\n" +"\n" +" constexpr sampler s(coord::normalized, address::clamp_to_edge, filter::linear);\n" +"\n" +" vertex Vertex draw_vs(constant Vertex *vertices [[ buffer(0) ]], uint vid [[ vertex_id ]])\n" +" {\n" +" return vertices[ vid ];\n" +" }\n" +"\n" +" fragment float4 draw_ps_bt601(Vertex in [[ stage_in ]],\n" +" texture2d textureY [[ texture(0) ]],\n" +" texture2d textureUV [[ texture(1) ]])\n" +" {\n" +" float3 yuv = float3(textureY.sample(s, in.texCoords).r, textureUV.sample(s, in.texCoords).rg);\n" +" float3 rgb;\n" +" yuv += float3(-0.0627451017, -0.501960814, -0.501960814);\n" +" rgb.r = dot(yuv, float3(1.1644, 0.000, 1.596));\n" +" rgb.g = dot(yuv, float3(1.1644, -0.3918, -0.813));\n" +" rgb.b = dot(yuv, float3(1.1644, 2.0172, 0.000));\n" +" return float4(rgb, 1.0);\n" +" }\n" +; + +// keep this structure aligned with the proceeding drawMetalShaderSource's struct Vertex +typedef struct Vertex +{ + vector_float4 position; + vector_float2 texCoord; +} Vertex; + +static void SetVertex(Vertex *vertex, float x, float y, float s, float t) +{ + vertex->position[ 0 ] = x; + vertex->position[ 1 ] = y; + vertex->position[ 2 ] = 0.0f; + vertex->position[ 3 ] = 1.0f; + vertex->texCoord[ 0 ] = s; + vertex->texCoord[ 1 ] = t; +} + +static CAMetalLayer *metal_layer; +static id library; +static id video_pipeline; + +SDL_bool SetupVideoToolboxOutput(SDL_Renderer *renderer) +{ @autoreleasepool { + NSError *error; + + // Create the metal view + metal_layer = (CAMetalLayer *)SDL_GetRenderMetalLayer(renderer); + if (!metal_layer) { + return SDL_FALSE; + } + + // FIXME: Handle other colorspaces besides BT.601 + library = [metal_layer.device newLibraryWithSource:drawMetalShaderSource options:nil error:&error]; + + MTLRenderPipelineDescriptor *videoPipelineDescriptor = [[MTLRenderPipelineDescriptor new] autorelease]; + videoPipelineDescriptor.vertexFunction = [library newFunctionWithName:@"draw_vs"]; + videoPipelineDescriptor.fragmentFunction = [library newFunctionWithName:@"draw_ps_bt601"]; + videoPipelineDescriptor.colorAttachments[ 0 ].pixelFormat = metal_layer.pixelFormat; + + video_pipeline = [metal_layer.device newRenderPipelineStateWithDescriptor:videoPipelineDescriptor error:nil]; + if (!video_pipeline) { + SDL_SetError("Couldn't create video pipeline"); + return SDL_FALSE; + } + + return true; +}} + +SDL_bool DisplayVideoToolboxFrame(SDL_Renderer *renderer, void *buffer, int srcX, int srcY, int srcW, int srcH, int dstX, int dstY, int dstW, int dstH ) +{ @autoreleasepool { + CVPixelBufferRef pPixelBuffer = (CVPixelBufferRef)buffer; + size_t nPixelBufferWidth = CVPixelBufferGetWidthOfPlane(pPixelBuffer, 0); + size_t nPixelBufferHeight = CVPixelBufferGetHeightOfPlane(pPixelBuffer, 0); + id videoFrameTextureY = nil; + id videoFrameTextureUV = nil; + + IOSurfaceRef pSurface = CVPixelBufferGetIOSurface(pPixelBuffer); + + MTLTextureDescriptor *textureDescriptorY = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat:MTLPixelFormatR8Unorm width:nPixelBufferWidth height:nPixelBufferHeight mipmapped:NO]; + MTLTextureDescriptor *textureDescriptorUV = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat:MTLPixelFormatRG8Unorm width:CVPixelBufferGetWidthOfPlane(pPixelBuffer, 1) height:CVPixelBufferGetHeightOfPlane(pPixelBuffer, 1) mipmapped:NO]; + + videoFrameTextureY = [[metal_layer.device newTextureWithDescriptor:textureDescriptorY iosurface:pSurface plane:0] autorelease]; + videoFrameTextureUV = [[metal_layer.device newTextureWithDescriptor:textureDescriptorUV iosurface:pSurface plane:1] autorelease]; + + float flMinSrcX = ( srcX + 0.5f ) / nPixelBufferWidth; + float flMaxSrcX = ( srcX + srcW + 0.5f ) / nPixelBufferWidth; + float flMinSrcY = ( srcY + 0.5f ) / nPixelBufferHeight; + float flMaxSrcY = ( srcY + srcH + 0.5f ) / nPixelBufferHeight; + + int nOutputWidth, nOutputHeight; + nOutputWidth = metal_layer.drawableSize.width; + nOutputHeight = metal_layer.drawableSize.height; + float flMinDstX = 2.0f * ( ( dstX + 0.5f ) / nOutputWidth ) - 1.0f; + float flMaxDstX = 2.0f * ( ( dstX + dstW + 0.5f ) / nOutputWidth ) - 1.0f; + float flMinDstY = 2.0f * ( ( nOutputHeight - dstY - 0.5f ) / nOutputHeight ) - 1.0f; + float flMaxDstY = 2.0f * ( ( nOutputHeight - ( dstY + dstH ) - 0.5f ) / nOutputHeight ) - 1.0f; + + Vertex arrVerts[4]; + SetVertex(&arrVerts[0], flMinDstX, flMaxDstY, flMinSrcX, flMaxSrcY); + SetVertex(&arrVerts[1], flMinDstX, flMinDstY, flMinSrcX, flMinSrcY); + SetVertex(&arrVerts[2], flMaxDstX, flMaxDstY, flMaxSrcX, flMaxSrcY); + SetVertex(&arrVerts[3], flMaxDstX, flMinDstY, flMaxSrcX, flMinSrcY); + + id renderEncoder = (id)SDL_GetRenderMetalCommandEncoder(renderer); + [renderEncoder setRenderPipelineState:video_pipeline]; + [renderEncoder setFragmentTexture:videoFrameTextureY atIndex:0]; + [renderEncoder setFragmentTexture:videoFrameTextureUV atIndex:1]; + [renderEncoder setVertexBytes:arrVerts length:sizeof(arrVerts) atIndex:0]; + [renderEncoder drawPrimitives:MTLPrimitiveTypeTriangleStrip vertexStart:0 vertexCount:SDL_arraysize(arrVerts)]; + return SDL_TRUE; +}} + +void CleanupVideoToolboxOutput() +{ +} diff --git a/vendor/sdl-3.0.0/test/testfile.c b/vendor/sdl-3.0.0/test/testfile.c new file mode 100644 index 0000000..1561f17 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testfile.c @@ -0,0 +1,375 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* sanity tests on SDL_rwops.c (useful for alternative implementations of stdio rwops) */ + +/* quiet windows compiler warnings */ +#if defined(_MSC_VER) && !defined(_CRT_NONSTDC_NO_WARNINGS) +#define _CRT_NONSTDC_NO_WARNINGS +#endif + +#include +#include +#ifndef _MSC_VER +#include +#endif + +#include +#include +#include + +/* WARNING ! those 2 files will be destroyed by this test program */ + +#ifdef __IOS__ +#define FBASENAME1 "../Documents/sdldata1" /* this file will be created during tests */ +#define FBASENAME2 "../Documents/sdldata2" /* this file should not exist before starting test */ +#else +#define FBASENAME1 "sdldata1" /* this file will be created during tests */ +#define FBASENAME2 "sdldata2" /* this file should not exist before starting test */ +#endif + +#ifndef NULL +#define NULL ((void *)0) +#endif + +static SDLTest_CommonState *state; + +static void +cleanup(void) +{ + unlink(FBASENAME1); + unlink(FBASENAME2); +} + +static void +rwops_error_quit(unsigned line, SDL_RWops *rwops) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "testfile.c(%d): failed\n", line); + if (rwops) { + SDL_RWclose(rwops); /* This calls SDL_DestroyRW(rwops); */ + } + cleanup(); + SDLTest_CommonDestroyState(state); + exit(1); /* quit with rwops error (test failed) */ +} + +#define RWOP_ERR_QUIT(x) rwops_error_quit(__LINE__, (x)) + +int main(int argc, char *argv[]) +{ + SDL_RWops *rwops = NULL; + char test_buf[30]; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + cleanup(); + + /* test 1 : basic argument test: all those calls to SDL_RWFromFile should fail */ + + rwops = SDL_RWFromFile(NULL, NULL); + if (rwops) { + RWOP_ERR_QUIT(rwops); + } + rwops = SDL_RWFromFile(NULL, "ab+"); + if (rwops) { + RWOP_ERR_QUIT(rwops); + } + rwops = SDL_RWFromFile(NULL, "sldfkjsldkfj"); + if (rwops) { + RWOP_ERR_QUIT(rwops); + } + rwops = SDL_RWFromFile("something", ""); + if (rwops) { + RWOP_ERR_QUIT(rwops); + } + rwops = SDL_RWFromFile("something", NULL); + if (rwops) { + RWOP_ERR_QUIT(rwops); + } + SDL_Log("test1 OK\n"); + + /* test 2 : check that inexistent file is not successfully opened/created when required */ + /* modes : r, r+ imply that file MUST exist + modes : a, a+, w, w+ checks that it succeeds (file may not exists) + + */ + rwops = SDL_RWFromFile(FBASENAME2, "rb"); /* this file doesn't exist that call must fail */ + if (rwops) { + RWOP_ERR_QUIT(rwops); + } + rwops = SDL_RWFromFile(FBASENAME2, "rb+"); /* this file doesn't exist that call must fail */ + if (rwops) { + RWOP_ERR_QUIT(rwops); + } + rwops = SDL_RWFromFile(FBASENAME2, "wb"); + if (rwops == NULL) { + RWOP_ERR_QUIT(rwops); + } + SDL_RWclose(rwops); + unlink(FBASENAME2); + rwops = SDL_RWFromFile(FBASENAME2, "wb+"); + if (rwops == NULL) { + RWOP_ERR_QUIT(rwops); + } + SDL_RWclose(rwops); + unlink(FBASENAME2); + rwops = SDL_RWFromFile(FBASENAME2, "ab"); + if (rwops == NULL) { + RWOP_ERR_QUIT(rwops); + } + SDL_RWclose(rwops); + unlink(FBASENAME2); + rwops = SDL_RWFromFile(FBASENAME2, "ab+"); + if (rwops == NULL) { + RWOP_ERR_QUIT(rwops); + } + SDL_RWclose(rwops); + unlink(FBASENAME2); + SDL_Log("test2 OK\n"); + + /* test 3 : creation, writing , reading, seeking, + test : w mode, r mode, w+ mode + */ + rwops = SDL_RWFromFile(FBASENAME1, "wb"); /* write only */ + if (rwops == NULL) { + RWOP_ERR_QUIT(rwops); + } + if (10 != SDL_RWwrite(rwops, "1234567890", 10)) { + RWOP_ERR_QUIT(rwops); + } + if (10 != SDL_RWwrite(rwops, "1234567890", 10)) { + RWOP_ERR_QUIT(rwops); + } + if (7 != SDL_RWwrite(rwops, "1234567", 7)) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWseek(rwops, 0L, SDL_RW_SEEK_SET)) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWread(rwops, test_buf, 1)) { + RWOP_ERR_QUIT(rwops); /* we are in write only mode */ + } + + SDL_RWclose(rwops); + + rwops = SDL_RWFromFile(FBASENAME1, "rb"); /* read mode, file must exist */ + if (rwops == NULL) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWseek(rwops, 0L, SDL_RW_SEEK_SET)) { + RWOP_ERR_QUIT(rwops); + } + if (20 != SDL_RWseek(rwops, -7, SDL_RW_SEEK_END)) { + RWOP_ERR_QUIT(rwops); + } + if (7 != SDL_RWread(rwops, test_buf, 7)) { + RWOP_ERR_QUIT(rwops); + } + if (SDL_memcmp(test_buf, "1234567", 7) != 0) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWread(rwops, test_buf, 1)) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWread(rwops, test_buf, 1000)) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWseek(rwops, -27, SDL_RW_SEEK_CUR)) { + RWOP_ERR_QUIT(rwops); + } + if (27 != SDL_RWread(rwops, test_buf, 30)) { + RWOP_ERR_QUIT(rwops); + } + if (SDL_memcmp(test_buf, "12345678901234567890", 20) != 0) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWwrite(rwops, test_buf, 1)) { + RWOP_ERR_QUIT(rwops); /* readonly mode */ + } + + SDL_RWclose(rwops); + + /* test 3: same with w+ mode */ + rwops = SDL_RWFromFile(FBASENAME1, "wb+"); /* write + read + truncation */ + if (rwops == NULL) { + RWOP_ERR_QUIT(rwops); + } + if (10 != SDL_RWwrite(rwops, "1234567890", 10)) { + RWOP_ERR_QUIT(rwops); + } + if (10 != SDL_RWwrite(rwops, "1234567890", 10)) { + RWOP_ERR_QUIT(rwops); + } + if (7 != SDL_RWwrite(rwops, "1234567", 7)) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWseek(rwops, 0L, SDL_RW_SEEK_SET)) { + RWOP_ERR_QUIT(rwops); + } + if (1 != SDL_RWread(rwops, test_buf, 1)) { + RWOP_ERR_QUIT(rwops); /* we are in read/write mode */ + } + + if (0 != SDL_RWseek(rwops, 0L, SDL_RW_SEEK_SET)) { + RWOP_ERR_QUIT(rwops); + } + if (20 != SDL_RWseek(rwops, -7, SDL_RW_SEEK_END)) { + RWOP_ERR_QUIT(rwops); + } + if (7 != SDL_RWread(rwops, test_buf, 7)) { + RWOP_ERR_QUIT(rwops); + } + if (SDL_memcmp(test_buf, "1234567", 7) != 0) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWread(rwops, test_buf, 1)) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWread(rwops, test_buf, 1000)) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWseek(rwops, -27, SDL_RW_SEEK_CUR)) { + RWOP_ERR_QUIT(rwops); + } + if (27 != SDL_RWread(rwops, test_buf, 30)) { + RWOP_ERR_QUIT(rwops); + } + if (SDL_memcmp(test_buf, "12345678901234567890", 20) != 0) { + RWOP_ERR_QUIT(rwops); + } + SDL_RWclose(rwops); + SDL_Log("test3 OK\n"); + + /* test 4: same in r+ mode */ + rwops = SDL_RWFromFile(FBASENAME1, "rb+"); /* write + read + file must exists, no truncation */ + if (rwops == NULL) { + RWOP_ERR_QUIT(rwops); + } + if (10 != SDL_RWwrite(rwops, "1234567890", 10)) { + RWOP_ERR_QUIT(rwops); + } + if (10 != SDL_RWwrite(rwops, "1234567890", 10)) { + RWOP_ERR_QUIT(rwops); + } + if (7 != SDL_RWwrite(rwops, "1234567", 7)) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWseek(rwops, 0L, SDL_RW_SEEK_SET)) { + RWOP_ERR_QUIT(rwops); + } + if (1 != SDL_RWread(rwops, test_buf, 1)) { + RWOP_ERR_QUIT(rwops); /* we are in read/write mode */ + } + + if (0 != SDL_RWseek(rwops, 0L, SDL_RW_SEEK_SET)) { + RWOP_ERR_QUIT(rwops); + } + if (20 != SDL_RWseek(rwops, -7, SDL_RW_SEEK_END)) { + RWOP_ERR_QUIT(rwops); + } + if (7 != SDL_RWread(rwops, test_buf, 7)) { + RWOP_ERR_QUIT(rwops); + } + if (SDL_memcmp(test_buf, "1234567", 7) != 0) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWread(rwops, test_buf, 1)) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWread(rwops, test_buf, 1000)) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWseek(rwops, -27, SDL_RW_SEEK_CUR)) { + RWOP_ERR_QUIT(rwops); + } + if (27 != SDL_RWread(rwops, test_buf, 30)) { + RWOP_ERR_QUIT(rwops); + } + if (SDL_memcmp(test_buf, "12345678901234567890", 20) != 0) { + RWOP_ERR_QUIT(rwops); + } + SDL_RWclose(rwops); + SDL_Log("test4 OK\n"); + + /* test5 : append mode */ + rwops = SDL_RWFromFile(FBASENAME1, "ab+"); /* write + read + append */ + if (rwops == NULL) { + RWOP_ERR_QUIT(rwops); + } + if (10 != SDL_RWwrite(rwops, "1234567890", 10)) { + RWOP_ERR_QUIT(rwops); + } + if (10 != SDL_RWwrite(rwops, "1234567890", 10)) { + RWOP_ERR_QUIT(rwops); + } + if (7 != SDL_RWwrite(rwops, "1234567", 7)) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWseek(rwops, 0L, SDL_RW_SEEK_SET)) { + RWOP_ERR_QUIT(rwops); + } + + if (1 != SDL_RWread(rwops, test_buf, 1)) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWseek(rwops, 0L, SDL_RW_SEEK_SET)) { + RWOP_ERR_QUIT(rwops); + } + + if (20 + 27 != SDL_RWseek(rwops, -7, SDL_RW_SEEK_END)) { + RWOP_ERR_QUIT(rwops); + } + if (7 != SDL_RWread(rwops, test_buf, 7)) { + RWOP_ERR_QUIT(rwops); + } + if (SDL_memcmp(test_buf, "1234567", 7) != 0) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWread(rwops, test_buf, 1)) { + RWOP_ERR_QUIT(rwops); + } + if (0 != SDL_RWread(rwops, test_buf, 1000)) { + RWOP_ERR_QUIT(rwops); + } + + if (27 != SDL_RWseek(rwops, -27, SDL_RW_SEEK_CUR)) { + RWOP_ERR_QUIT(rwops); + } + + if (0 != SDL_RWseek(rwops, 0L, SDL_RW_SEEK_SET)) { + RWOP_ERR_QUIT(rwops); + } + if (30 != SDL_RWread(rwops, test_buf, 30)) { + RWOP_ERR_QUIT(rwops); + } + if (SDL_memcmp(test_buf, "123456789012345678901234567123", 30) != 0) { + RWOP_ERR_QUIT(rwops); + } + SDL_RWclose(rwops); + SDL_Log("test5 OK\n"); + cleanup(); + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return 0; /* all ok */ +} diff --git a/vendor/sdl-3.0.0/test/testfilesystem.c b/vendor/sdl-3.0.0/test/testfilesystem.c new file mode 100644 index 0000000..bea7c0c --- /dev/null +++ b/vendor/sdl-3.0.0/test/testfilesystem.c @@ -0,0 +1,73 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +/* Simple test of filesystem functions. */ + +#include +#include +#include + +int main(int argc, char *argv[]) +{ + SDLTest_CommonState *state; + char *base_path; + char *pref_path; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (SDL_Init(0) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init() failed: %s\n", SDL_GetError()); + return 1; + } + + base_path = SDL_GetBasePath(); + if (base_path == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't find base path: %s\n", + SDL_GetError()); + } else { + SDL_Log("base path: '%s'\n", base_path); + SDL_free(base_path); + } + + pref_path = SDL_GetPrefPath("libsdl", "test_filesystem"); + if (pref_path == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't find pref path: %s\n", + SDL_GetError()); + } else { + SDL_Log("pref path: '%s'\n", pref_path); + SDL_free(pref_path); + } + + pref_path = SDL_GetPrefPath(NULL, "test_filesystem"); + if (pref_path == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't find pref path without organization: %s\n", + SDL_GetError()); + } else { + SDL_Log("pref path: '%s'\n", pref_path); + SDL_free(pref_path); + } + + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testgeometry.c b/vendor/sdl-3.0.0/test/testgeometry.c new file mode 100644 index 0000000..d494d95 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testgeometry.c @@ -0,0 +1,271 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Simple program: draw a RGB triangle, with texture */ + +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include +#include "testutils.h" + +static SDLTest_CommonState *state; +static SDL_bool use_texture = SDL_FALSE; +static SDL_Texture **sprites; +static SDL_BlendMode blendMode = SDL_BLENDMODE_NONE; +static float angle = 0.0f; +static int sprite_w, sprite_h; + +static int done; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_free(sprites); + SDLTest_CommonQuit(state); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static int LoadSprite(const char *file) +{ + int i; + + for (i = 0; i < state->num_windows; ++i) { + /* This does the SDL_LoadBMP step repeatedly, but that's OK for test code. */ + sprites[i] = LoadTexture(state->renderers[i], file, SDL_TRUE, &sprite_w, &sprite_h); + if (!sprites[i]) { + return -1; + } + if (SDL_SetTextureBlendMode(sprites[i], blendMode) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set blend mode: %s\n", SDL_GetError()); + SDL_DestroyTexture(sprites[i]); + return -1; + } + } + + /* We're ready to roll. :) */ + return 0; +} + +static void loop(void) +{ + int i; + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + + if (event.type == SDL_EVENT_MOUSE_MOTION) { + if (event.motion.state) { + float xrel, yrel; + int window_w, window_h; + SDL_Window *window = SDL_GetWindowFromID(event.motion.windowID); + SDL_GetWindowSize(window, &window_w, &window_h); + xrel = event.motion.xrel; + yrel = event.motion.yrel; + if (event.motion.y < (float)window_h / 2.0f) { + angle += xrel; + } else { + angle -= xrel; + } + if (event.motion.x < (float)window_w / 2.0f) { + angle -= yrel; + } else { + angle += yrel; + } + } + } else { + SDLTest_CommonEvent(state, &event, &done); + } + } + + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + if (state->windows[i] == NULL) { + continue; + } + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + { + SDL_Rect viewport; + SDL_Vertex verts[3]; + float a; + float d; + int cx, cy; + + /* Query the sizes */ + SDL_GetRenderViewport(renderer, &viewport); + SDL_zeroa(verts); + cx = viewport.x + viewport.w / 2; + cy = viewport.y + viewport.h / 2; + d = (viewport.w + viewport.h) / 5.f; + + a = (angle * 3.1415f) / 180.0f; + verts[0].position.x = cx + d * SDL_cosf(a); + verts[0].position.y = cy + d * SDL_sinf(a); + verts[0].color.r = 0xFF; + verts[0].color.g = 0; + verts[0].color.b = 0; + verts[0].color.a = 0xFF; + + a = ((angle + 120) * 3.1415f) / 180.0f; + verts[1].position.x = cx + d * SDL_cosf(a); + verts[1].position.y = cy + d * SDL_sinf(a); + verts[1].color.r = 0; + verts[1].color.g = 0xFF; + verts[1].color.b = 0; + verts[1].color.a = 0xFF; + + a = ((angle + 240) * 3.1415f) / 180.0f; + verts[2].position.x = cx + d * SDL_cosf(a); + verts[2].position.y = cy + d * SDL_sinf(a); + verts[2].color.r = 0; + verts[2].color.g = 0; + verts[2].color.b = 0xFF; + verts[2].color.a = 0xFF; + + if (use_texture) { + verts[0].tex_coord.x = 0.5f; + verts[0].tex_coord.y = 0.0f; + verts[1].tex_coord.x = 1.0f; + verts[1].tex_coord.y = 1.0f; + verts[2].tex_coord.x = 0.0f; + verts[2].tex_coord.y = 1.0f; + } + + SDL_RenderGeometry(renderer, sprites[i], verts, 3, NULL, 0); + } + + SDL_RenderPresent(renderer); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int main(int argc, char *argv[]) +{ + int i; + const char *icon = "icon.bmp"; + Uint64 then, now; + Uint32 frames; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--blend") == 0) { + if (argv[i + 1]) { + if (SDL_strcasecmp(argv[i + 1], "none") == 0) { + blendMode = SDL_BLENDMODE_NONE; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "blend") == 0) { + blendMode = SDL_BLENDMODE_BLEND; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "add") == 0) { + blendMode = SDL_BLENDMODE_ADD; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "mod") == 0) { + blendMode = SDL_BLENDMODE_MOD; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "mul") == 0) { + blendMode = SDL_BLENDMODE_MUL; + consumed = 2; + } + } + } else if (SDL_strcasecmp(argv[i], "--use-texture") == 0) { + use_texture = SDL_TRUE; + consumed = 1; + } + } + if (consumed < 0) { + static const char *options[] = { "[--blend none|blend|add|mod|mul]", "[--use-texture]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + return 1; + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + return 2; + } + + /* Create the windows, initialize the renderers, and load the textures */ + sprites = + (SDL_Texture **)SDL_malloc(state->num_windows * sizeof(*sprites)); + if (sprites == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!\n"); + quit(2); + } + /* Create the windows and initialize the renderers */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawBlendMode(renderer, blendMode); + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + sprites[i] = NULL; + } + if (use_texture) { + if (LoadSprite(icon) < 0) { + quit(2); + } + } + + srand((unsigned int)time(NULL)); + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + } +#endif + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double)frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + + quit(0); + + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testgl.c b/vendor/sdl-3.0.0/test/testgl.c new file mode 100644 index 0000000..0f59281 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testgl.c @@ -0,0 +1,455 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +#include +#include + +#ifdef HAVE_OPENGL + +#include + +#include + +typedef struct GL_Context +{ +#define SDL_PROC(ret, func, params) ret (APIENTRY *func) params; +#include "../src/render/opengl/SDL_glfuncs.h" +#undef SDL_PROC +} GL_Context; + +/* Undefine this if you want a flat cube instead of a rainbow cube */ +#define SHADED_CUBE + +static SDLTest_CommonState *state; +static SDL_GLContext context; +static GL_Context ctx; +static SDL_bool suspend_when_occluded; + +static int LoadContext(GL_Context *data) +{ +#ifdef SDL_VIDEO_DRIVER_UIKIT +#define __SDL_NOGETPROCADDR__ +#elif defined(SDL_VIDEO_DRIVER_ANDROID) +#define __SDL_NOGETPROCADDR__ +#endif + +#if defined __SDL_NOGETPROCADDR__ +#define SDL_PROC(ret, func, params) data->func = func; +#else +#define SDL_PROC(ret, func, params) \ + do { \ + data->func = (ret (APIENTRY *) params)SDL_GL_GetProcAddress(#func); \ + if (!data->func) { \ + return SDL_SetError("Couldn't load GL function %s: %s", #func, SDL_GetError()); \ + } \ + } while (0); +#endif /* __SDL_NOGETPROCADDR__ */ + +#include "../src/render/opengl/SDL_glfuncs.h" +#undef SDL_PROC + return 0; +} + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void quit(int rc) +{ + if (context) { + /* SDL_GL_MakeCurrent(0, NULL); */ /* doesn't do anything */ + SDL_GL_DeleteContext(context); + } + SDLTest_CommonQuit(state); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static void Render(void) +{ + static float color[8][3] = { + { 1.0, 1.0, 0.0 }, + { 1.0, 0.0, 0.0 }, + { 0.0, 0.0, 0.0 }, + { 0.0, 1.0, 0.0 }, + { 0.0, 1.0, 1.0 }, + { 1.0, 1.0, 1.0 }, + { 1.0, 0.0, 1.0 }, + { 0.0, 0.0, 1.0 } + }; + static float cube[8][3] = { + { 0.5, 0.5, -0.5 }, + { 0.5, -0.5, -0.5 }, + { -0.5, -0.5, -0.5 }, + { -0.5, 0.5, -0.5 }, + { -0.5, 0.5, 0.5 }, + { 0.5, 0.5, 0.5 }, + { 0.5, -0.5, 0.5 }, + { -0.5, -0.5, 0.5 } + }; + + /* Do our drawing, too. */ + ctx.glClearColor(0.0, 0.0, 0.0, 0.0 /* used with --transparent */); + ctx.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + ctx.glBegin(GL_QUADS); + +#ifdef SHADED_CUBE + ctx.glColor3fv(color[0]); + ctx.glVertex3fv(cube[0]); + ctx.glColor3fv(color[1]); + ctx.glVertex3fv(cube[1]); + ctx.glColor3fv(color[2]); + ctx.glVertex3fv(cube[2]); + ctx.glColor3fv(color[3]); + ctx.glVertex3fv(cube[3]); + + ctx.glColor3fv(color[3]); + ctx.glVertex3fv(cube[3]); + ctx.glColor3fv(color[4]); + ctx.glVertex3fv(cube[4]); + ctx.glColor3fv(color[7]); + ctx.glVertex3fv(cube[7]); + ctx.glColor3fv(color[2]); + ctx.glVertex3fv(cube[2]); + + ctx.glColor3fv(color[0]); + ctx.glVertex3fv(cube[0]); + ctx.glColor3fv(color[5]); + ctx.glVertex3fv(cube[5]); + ctx.glColor3fv(color[6]); + ctx.glVertex3fv(cube[6]); + ctx.glColor3fv(color[1]); + ctx.glVertex3fv(cube[1]); + + ctx.glColor3fv(color[5]); + ctx.glVertex3fv(cube[5]); + ctx.glColor3fv(color[4]); + ctx.glVertex3fv(cube[4]); + ctx.glColor3fv(color[7]); + ctx.glVertex3fv(cube[7]); + ctx.glColor3fv(color[6]); + ctx.glVertex3fv(cube[6]); + + ctx.glColor3fv(color[5]); + ctx.glVertex3fv(cube[5]); + ctx.glColor3fv(color[0]); + ctx.glVertex3fv(cube[0]); + ctx.glColor3fv(color[3]); + ctx.glVertex3fv(cube[3]); + ctx.glColor3fv(color[4]); + ctx.glVertex3fv(cube[4]); + + ctx.glColor3fv(color[6]); + ctx.glVertex3fv(cube[6]); + ctx.glColor3fv(color[1]); + ctx.glVertex3fv(cube[1]); + ctx.glColor3fv(color[2]); + ctx.glVertex3fv(cube[2]); + ctx.glColor3fv(color[7]); + ctx.glVertex3fv(cube[7]); +#else /* flat cube */ + ctx.glColor3f(1.0, 0.0, 0.0); + ctx.glVertex3fv(cube[0]); + ctx.glVertex3fv(cube[1]); + ctx.glVertex3fv(cube[2]); + ctx.glVertex3fv(cube[3]); + + ctx.glColor3f(0.0, 1.0, 0.0); + ctx.glVertex3fv(cube[3]); + ctx.glVertex3fv(cube[4]); + ctx.glVertex3fv(cube[7]); + ctx.glVertex3fv(cube[2]); + + ctx.glColor3f(0.0, 0.0, 1.0); + ctx.glVertex3fv(cube[0]); + ctx.glVertex3fv(cube[5]); + ctx.glVertex3fv(cube[6]); + ctx.glVertex3fv(cube[1]); + + ctx.glColor3f(0.0, 1.0, 1.0); + ctx.glVertex3fv(cube[5]); + ctx.glVertex3fv(cube[4]); + ctx.glVertex3fv(cube[7]); + ctx.glVertex3fv(cube[6]); + + ctx.glColor3f(1.0, 1.0, 0.0); + ctx.glVertex3fv(cube[5]); + ctx.glVertex3fv(cube[0]); + ctx.glVertex3fv(cube[3]); + ctx.glVertex3fv(cube[4]); + + ctx.glColor3f(1.0, 0.0, 1.0); + ctx.glVertex3fv(cube[6]); + ctx.glVertex3fv(cube[1]); + ctx.glVertex3fv(cube[2]); + ctx.glVertex3fv(cube[7]); +#endif /* SHADED_CUBE */ + + ctx.glEnd(); + + ctx.glMatrixMode(GL_MODELVIEW); + ctx.glRotatef(5.0, 1.0, 1.0, 1.0); +} + +int main(int argc, char *argv[]) +{ + int fsaa, accel; + int value; + int i, done; + const SDL_DisplayMode *mode; + SDL_Event event; + Uint64 then, now; + Uint32 frames; + int status; + int dw, dh; + int swap_interval = 0; + int interval = 0; + int ret_interval = 0; + + /* Initialize parameters */ + fsaa = 0; + accel = -1; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + if (SDL_strcasecmp(argv[i], "--fsaa") == 0 && i + 1 < argc) { + fsaa = SDL_atoi(argv[i + 1]); + consumed = 2; + } else if (SDL_strcasecmp(argv[i], "--accel") == 0 && i + 1 < argc) { + accel = SDL_atoi(argv[i + 1]); + consumed = 2; + } else if(SDL_strcasecmp(argv[i], "--suspend-when-occluded") == 0) { + suspend_when_occluded = SDL_TRUE; + consumed = 1; + } else { + consumed = -1; + } + } + if (consumed < 0) { + static const char *options[] = { "[--fsaa n]", "[--accel n]", "[--suspend-when-occluded]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + quit(1); + } + i += consumed; + } + + /* Set OpenGL parameters */ + state->window_flags |= SDL_WINDOW_OPENGL; + state->gl_red_size = 5; + state->gl_green_size = 5; + state->gl_blue_size = 5; + state->gl_depth_size = 16; + state->gl_double_buffer = 1; + if (fsaa) { + state->gl_multisamplebuffers = 1; + state->gl_multisamplesamples = fsaa; + } + if (accel >= 0) { + state->gl_accelerated = accel; + } + + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + /* Create OpenGL context */ + context = SDL_GL_CreateContext(state->windows[0]); + if (!context) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_GL_CreateContext(): %s\n", SDL_GetError()); + quit(2); + } + + /* Important: call this *after* creating the context */ + if (LoadContext(&ctx) < 0) { + SDL_Log("Could not load GL functions\n"); + quit(2); + return 0; + } + + if (state->render_flags & SDL_RENDERER_PRESENTVSYNC) { + /* try late-swap-tearing first. If not supported, try normal vsync. */ + if (SDL_GL_SetSwapInterval(-1) == 0) { + swap_interval = -1; + } else { + SDL_GL_SetSwapInterval(1); + swap_interval = 1; + } + } else { + SDL_GL_SetSwapInterval(0); /* disable vsync. */ + swap_interval = 0; + } + + mode = SDL_GetCurrentDisplayMode(SDL_GetPrimaryDisplay()); + if (mode) { + SDL_Log("Screen BPP : %" SDL_PRIu32 "\n", SDL_BITSPERPIXEL(mode->format)); + } + + ret_interval = SDL_GL_GetSwapInterval(&interval); + if (ret_interval < 0) { + SDL_Log("Swap Interval : %d error: %s\n", interval, SDL_GetError()); + } else { + SDL_Log("Swap Interval : %d\n", interval); + } + + SDL_GetWindowSize(state->windows[0], &dw, &dh); + SDL_Log("Window Size : %d,%d\n", dw, dh); + SDL_GetWindowSizeInPixels(state->windows[0], &dw, &dh); + SDL_Log("Draw Size : %d,%d\n", dw, dh); + SDL_Log("\n"); + SDL_Log("Vendor : %s\n", ctx.glGetString(GL_VENDOR)); + SDL_Log("Renderer : %s\n", ctx.glGetString(GL_RENDERER)); + SDL_Log("Version : %s\n", ctx.glGetString(GL_VERSION)); + SDL_Log("Extensions : %s\n", ctx.glGetString(GL_EXTENSIONS)); + SDL_Log("\n"); + + status = SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_RED_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_RED_SIZE: %s\n", SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_GREEN_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_GREEN_SIZE: %s\n", SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_BLUE_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_BLUE_SIZE: %s\n", SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_DEPTH_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_DEPTH_SIZE: requested %d, got %d\n", 16, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_DEPTH_SIZE: %s\n", SDL_GetError()); + } + if (fsaa) { + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLEBUFFERS, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLEBUFFERS: requested 1, got %d\n", value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_MULTISAMPLEBUFFERS: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLESAMPLES: requested %d, got %d\n", fsaa, + value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_MULTISAMPLESAMPLES: %s\n", + SDL_GetError()); + } + } + if (accel >= 0) { + status = SDL_GL_GetAttribute(SDL_GL_ACCELERATED_VISUAL, &value); + if (!status) { + SDL_Log("SDL_GL_ACCELERATED_VISUAL: requested %d, got %d\n", accel, + value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_ACCELERATED_VISUAL: %s\n", + SDL_GetError()); + } + } + + /* Set rendering settings */ + ctx.glMatrixMode(GL_PROJECTION); + ctx.glLoadIdentity(); + ctx.glOrtho(-2.0, 2.0, -2.0, 2.0, -20.0, 20.0); + ctx.glMatrixMode(GL_MODELVIEW); + ctx.glLoadIdentity(); + ctx.glEnable(GL_DEPTH_TEST); + ctx.glDepthFunc(GL_LESS); + ctx.glShadeModel(GL_SMOOTH); + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + while (!done) { + SDL_bool update_swap_interval = SDL_FALSE; + int active_windows = 0; + + /* Check for events */ + ++frames; + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + if (event.type == SDL_EVENT_KEY_DOWN) { + if (event.key.keysym.sym == SDLK_o) { + swap_interval--; + update_swap_interval = SDL_TRUE; + } else if (event.key.keysym.sym == SDLK_p) { + swap_interval++; + update_swap_interval = SDL_TRUE; + } + } + } + + if (update_swap_interval) { + SDL_Log("Swap interval to be set to %d\n", swap_interval); + } + + for (i = 0; i < state->num_windows; ++i) { + int w, h; + if (state->windows[i] == NULL || + (suspend_when_occluded && (SDL_GetWindowFlags(state->windows[i]) & SDL_WINDOW_OCCLUDED))) { + continue; + } + ++active_windows; + SDL_GL_MakeCurrent(state->windows[i], context); + if (update_swap_interval) { + SDL_GL_SetSwapInterval(swap_interval); + } + SDL_GetWindowSizeInPixels(state->windows[i], &w, &h); + ctx.glViewport(0, 0, w, h); + Render(); + SDL_GL_SwapWindow(state->windows[i]); + } + + /* If all windows are occluded, throttle event polling to 15hz. */ + if (!active_windows) { + SDL_DelayNS(SDL_NS_PER_SECOND / 15); + } + } + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + SDL_Log("%2.2f frames per second\n", + ((double)frames * 1000) / (now - then)); + } + quit(0); + return 0; +} + +#else /* HAVE_OPENGL */ + +int main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No OpenGL support on this system\n"); + return 1; +} + +#endif /* HAVE_OPENGL */ diff --git a/vendor/sdl-3.0.0/test/testgles.c b/vendor/sdl-3.0.0/test/testgles.c new file mode 100644 index 0000000..0afae54 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testgles.c @@ -0,0 +1,352 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +#include + +#include +#include + +#if defined(__IOS__) || defined(__ANDROID__) +#define HAVE_OPENGLES +#endif + +#ifdef HAVE_OPENGLES + +#include + +static SDLTest_CommonState *state; +static SDL_GLContext *context = NULL; +static int depth = 16; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + int i; + + if (context != NULL) { + for (i = 0; i < state->num_windows; i++) { + if (context[i]) { + SDL_GL_DeleteContext(context[i]); + } + } + + SDL_free(context); + } + + SDLTest_CommonQuit(state); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static void +Render() +{ + static GLubyte color[8][4] = { { 255, 0, 0, 0 }, + { 255, 0, 0, 255 }, + { 0, 255, 0, 255 }, + { 0, 255, 0, 255 }, + { 0, 255, 0, 255 }, + { 255, 255, 255, 255 }, + { 255, 0, 255, 255 }, + { 0, 0, 255, 255 } }; + static GLfloat cube[8][3] = { { 0.5, 0.5, -0.5 }, + { 0.5f, -0.5f, -0.5f }, + { -0.5f, -0.5f, -0.5f }, + { -0.5f, 0.5f, -0.5f }, + { -0.5f, 0.5f, 0.5f }, + { 0.5f, 0.5f, 0.5f }, + { 0.5f, -0.5f, 0.5f }, + { -0.5f, -0.5f, 0.5f } }; + static GLubyte indices[36] = { 0, 3, 4, + 4, 5, 0, + 0, 5, 6, + 6, 1, 0, + 6, 7, 2, + 2, 1, 6, + 7, 4, 3, + 3, 2, 7, + 5, 4, 7, + 7, 6, 5, + 2, 3, 1, + 3, 0, 1 }; + + /* Do our drawing, too. */ + glClearColor(0.0, 0.0, 0.0, 1.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + /* Draw the cube */ + glColorPointer(4, GL_UNSIGNED_BYTE, 0, color); + glEnableClientState(GL_COLOR_ARRAY); + glVertexPointer(3, GL_FLOAT, 0, cube); + glEnableClientState(GL_VERTEX_ARRAY); + glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_BYTE, indices); + + glMatrixMode(GL_MODELVIEW); + glRotatef(5.0, 1.0, 1.0, 1.0); +} + +int main(int argc, char *argv[]) +{ + int fsaa, accel; + int value; + int i, done; + const SDL_DisplayMode *mode; + SDL_Event event; + Uint32 then, now, frames; + int status; + + /* Initialize parameters */ + fsaa = 0; + accel = 0; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + if (SDL_strcasecmp(argv[i], "--fsaa") == 0) { + ++fsaa; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--accel") == 0) { + ++accel; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--zdepth") == 0) { + i++; + if (!argv[i]) { + consumed = -1; + } else { + char *endptr = NULL; + depth = (int)SDL_strtol(argv[i], &endptr, 0); + if (endptr != argv[i] && *endptr == '\0') { + consumed = 1; + } else { + consumed = -1; + } + } + } else { + consumed = -1; + } + } + if (consumed < 0) { + static const char *options[] = { "[--fsaa]", "[--accel]", "[--zdepth %d]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + quit(1); + } + i += consumed; + } + + /* Set OpenGL parameters */ + state->window_flags |= SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_BORDERLESS; + state->gl_red_size = 5; + state->gl_green_size = 5; + state->gl_blue_size = 5; + state->gl_depth_size = depth; + state->gl_major_version = 1; + state->gl_minor_version = 1; + state->gl_profile_mask = SDL_GL_CONTEXT_PROFILE_ES; + if (fsaa) { + state->gl_multisamplebuffers = 1; + state->gl_multisamplesamples = fsaa; + } + if (accel) { + state->gl_accelerated = 1; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + context = (SDL_GLContext *)SDL_calloc(state->num_windows, sizeof(*context)); + if (context == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!\n"); + quit(2); + } + + /* Create OpenGL ES contexts */ + for (i = 0; i < state->num_windows; i++) { + context[i] = SDL_GL_CreateContext(state->windows[i]); + if (!context[i]) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_GL_CreateContext(): %s\n", SDL_GetError()); + quit(2); + } + } + + if (state->render_flags & SDL_RENDERER_PRESENTVSYNC) { + SDL_GL_SetSwapInterval(1); + } else { + SDL_GL_SetSwapInterval(0); + } + + mode = SDL_GetCurrentDisplayMode(SDL_GetPrimaryDisplay()); + if (mode) { + SDL_Log("Screen bpp: %d\n", SDL_BITSPERPIXEL(mode->format)); + SDL_Log("\n"); + } + SDL_Log("Vendor : %s\n", glGetString(GL_VENDOR)); + SDL_Log("Renderer : %s\n", glGetString(GL_RENDERER)); + SDL_Log("Version : %s\n", glGetString(GL_VERSION)); + SDL_Log("Extensions : %s\n", glGetString(GL_EXTENSIONS)); + SDL_Log("\n"); + + status = SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_RED_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_RED_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_GREEN_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_GREEN_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_BLUE_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_BLUE_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_DEPTH_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_DEPTH_SIZE: requested %d, got %d\n", depth, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_DEPTH_SIZE: %s\n", + SDL_GetError()); + } + if (fsaa) { + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLEBUFFERS, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLEBUFFERS: requested 1, got %d\n", value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_MULTISAMPLEBUFFERS: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLESAMPLES: requested %d, got %d\n", fsaa, + value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_MULTISAMPLESAMPLES: %s\n", + SDL_GetError()); + } + } + if (accel) { + status = SDL_GL_GetAttribute(SDL_GL_ACCELERATED_VISUAL, &value); + if (!status) { + SDL_Log("SDL_GL_ACCELERATED_VISUAL: requested 1, got %d\n", value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_ACCELERATED_VISUAL: %s\n", + SDL_GetError()); + } + } + + /* Set rendering settings for each context */ + for (i = 0; i < state->num_windows; ++i) { + float aspectAdjust; + + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + + /* Continue for next window */ + continue; + } + + aspectAdjust = (4.0f / 3.0f) / ((float)state->window_w / state->window_h); + glViewport(0, 0, state->window_w, state->window_h); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrthof(-2.0, 2.0, -2.0 * aspectAdjust, 2.0 * aspectAdjust, -20.0, 20.0); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LESS); + glShadeModel(GL_SMOOTH); + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + while (!done) { + /* Check for events */ + ++frames; + while (SDL_PollEvent(&event)) { + if (event.type == SDL_EVENT_WINDOW_RESIZED) { + for (i = 0; i < state->num_windows; ++i) { + if (event.window.windowID == SDL_GetWindowID(state->windows[i])) { + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + break; + } + /* Change view port to the new window dimensions */ + glViewport(0, 0, event.window.data1, event.window.data2); + /* Update window content */ + Render(); + SDL_GL_SwapWindow(state->windows[i]); + break; + } + } + } + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) { + continue; + } + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + + /* Continue for next window */ + continue; + } + Render(); + SDL_GL_SwapWindow(state->windows[i]); + } + } + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + SDL_Log("%2.2f frames per second\n", + ((double)frames * 1000) / (now - then)); + } +#ifndef __ANDROID__ + quit(0); +#endif + return 0; +} + +#else /* HAVE_OPENGLES */ + +int main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No OpenGL ES support on this system\n"); + return 1; +} + +#endif /* HAVE_OPENGLES */ diff --git a/vendor/sdl-3.0.0/test/testgles2.c b/vendor/sdl-3.0.0/test/testgles2.c new file mode 100644 index 0000000..6975adb --- /dev/null +++ b/vendor/sdl-3.0.0/test/testgles2.c @@ -0,0 +1,967 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include + +#if defined(__IOS__) || defined(__ANDROID__) || defined(__EMSCRIPTEN__) || defined(__WINDOWS__) || defined(__LINUX__) +#define HAVE_OPENGLES2 +#endif + +#ifdef HAVE_OPENGLES2 + +#include + +typedef struct GLES2_Context +{ +#define SDL_PROC(ret, func, params) ret (APIENTRY *func) params; +#include "../src/render/opengles2/SDL_gles2funcs.h" +#undef SDL_PROC +} GLES2_Context; + +typedef struct shader_data +{ + GLuint shader_program, shader_frag, shader_vert; + + GLint attr_position; + GLint attr_color, attr_mvp; + + int angle_x, angle_y, angle_z; + + GLuint position_buffer; + GLuint color_buffer; +} shader_data; + +typedef enum wait_state +{ + WAIT_STATE_GO = 0, + WAIT_STATE_ENTER_SEM, + WAIT_STATE_WAITING_ON_SEM, +} wait_state; + +typedef struct thread_data +{ + SDL_Thread *thread; + SDL_Semaphore *suspend_sem; + SDL_AtomicInt suspended; + int done; + int index; +} thread_data; + +static SDLTest_CommonState *state; +static SDL_GLContext *context = NULL; +static int depth = 16; +static SDL_bool suspend_when_occluded; +static GLES2_Context ctx; + +static int LoadContext(GLES2_Context *data) +{ +#ifdef SDL_VIDEO_DRIVER_UIKIT +#define __SDL_NOGETPROCADDR__ +#elif defined(SDL_VIDEO_DRIVER_ANDROID) +#define __SDL_NOGETPROCADDR__ +#endif + +#if defined __SDL_NOGETPROCADDR__ +#define SDL_PROC(ret, func, params) data->func = func; +#else +#define SDL_PROC(ret, func, params) \ + do { \ + data->func = (ret (APIENTRY *) params)SDL_GL_GetProcAddress(#func); \ + if (!data->func) { \ + return SDL_SetError("Couldn't load GLES2 function %s: %s", #func, SDL_GetError()); \ + } \ + } while (0); +#endif /* __SDL_NOGETPROCADDR__ */ + +#include "../src/render/opengles2/SDL_gles2funcs.h" +#undef SDL_PROC + return 0; +} + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + int i; + + if (context != NULL) { + for (i = 0; i < state->num_windows; i++) { + if (context[i]) { + SDL_GL_DeleteContext(context[i]); + } + } + + SDL_free(context); + } + + SDLTest_CommonQuit(state); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +#define GL_CHECK(x) \ + x; \ + { \ + GLenum glError = ctx.glGetError(); \ + if (glError != GL_NO_ERROR) { \ + SDL_Log("glGetError() = %i (0x%.8x) at line %i\n", glError, glError, __LINE__); \ + quit(1); \ + } \ + } + +/** + * Simulates desktop's glRotatef. The matrix is returned in column-major + * order. + */ +static void +rotate_matrix(float angle, float x, float y, float z, float *r) +{ + float radians, c, s, c1, u[3], length; + int i, j; + + radians = (angle * SDL_PI_F) / 180.0f; + + c = SDL_cosf(radians); + s = SDL_sinf(radians); + + c1 = 1.0f - SDL_cosf(radians); + + length = (float)SDL_sqrt(x * x + y * y + z * z); + + u[0] = x / length; + u[1] = y / length; + u[2] = z / length; + + for (i = 0; i < 16; i++) { + r[i] = 0.0; + } + + r[15] = 1.0; + + for (i = 0; i < 3; i++) { + r[i * 4 + (i + 1) % 3] = u[(i + 2) % 3] * s; + r[i * 4 + (i + 2) % 3] = -u[(i + 1) % 3] * s; + } + + for (i = 0; i < 3; i++) { + for (j = 0; j < 3; j++) { + r[i * 4 + j] += c1 * u[i] * u[j] + (i == j ? c : 0.0f); + } + } +} + +/** + * Simulates gluPerspectiveMatrix + */ +static void +perspective_matrix(float fovy, float aspect, float znear, float zfar, float *r) +{ + int i; + float f; + + f = 1.0f / SDL_tanf(fovy * 0.5f); + + for (i = 0; i < 16; i++) { + r[i] = 0.0; + } + + r[0] = f / aspect; + r[5] = f; + r[10] = (znear + zfar) / (znear - zfar); + r[11] = -1.0f; + r[14] = (2.0f * znear * zfar) / (znear - zfar); + r[15] = 0.0f; +} + +/** + * Multiplies lhs by rhs and writes out to r. All matrices are 4x4 and column + * major. In-place multiplication is supported. + */ +static void +multiply_matrix(const float *lhs, const float *rhs, float *r) +{ + int i, j, k; + float tmp[16]; + + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + tmp[j * 4 + i] = 0.0; + + for (k = 0; k < 4; k++) { + tmp[j * 4 + i] += lhs[k * 4 + i] * rhs[j * 4 + k]; + } + } + } + + for (i = 0; i < 16; i++) { + r[i] = tmp[i]; + } +} + +/** + * Create shader, load in source, compile, dump debug as necessary. + * + * shader: Pointer to return created shader ID. + * source: Passed-in shader source code. + * shader_type: Passed to GL, e.g. GL_VERTEX_SHADER. + */ +static void +process_shader(GLuint *shader, const char *source, GLint shader_type) +{ + GLint status = GL_FALSE; + const char *shaders[1] = { NULL }; + char buffer[1024]; + GLsizei length = 0; + + /* Create shader and load into GL. */ + *shader = GL_CHECK(ctx.glCreateShader(shader_type)); + + shaders[0] = source; + + GL_CHECK(ctx.glShaderSource(*shader, 1, shaders, NULL)); + + /* Clean up shader source. */ + shaders[0] = NULL; + + /* Try compiling the shader. */ + GL_CHECK(ctx.glCompileShader(*shader)); + GL_CHECK(ctx.glGetShaderiv(*shader, GL_COMPILE_STATUS, &status)); + + /* Dump debug info (source and log) if compilation failed. */ + if (status != GL_TRUE) { + ctx.glGetShaderInfoLog(*shader, sizeof(buffer), &length, &buffer[0]); + buffer[length] = '\0'; + SDL_Log("Shader compilation failed: %s", buffer); + quit(-1); + } +} + +static void +link_program(struct shader_data *data) +{ + GLint status = GL_FALSE; + char buffer[1024]; + GLsizei length = 0; + + GL_CHECK(ctx.glAttachShader(data->shader_program, data->shader_vert)); + GL_CHECK(ctx.glAttachShader(data->shader_program, data->shader_frag)); + GL_CHECK(ctx.glLinkProgram(data->shader_program)); + GL_CHECK(ctx.glGetProgramiv(data->shader_program, GL_LINK_STATUS, &status)); + + if (status != GL_TRUE) { + ctx.glGetProgramInfoLog(data->shader_program, sizeof(buffer), &length, &buffer[0]); + buffer[length] = '\0'; + SDL_Log("Program linking failed: %s", buffer); + quit(-1); + } +} + +/* 3D data. Vertex range -0.5..0.5 in all axes. + * Z -0.5 is near, 0.5 is far. */ +static const float g_vertices[] = { + /* Front face. */ + /* Bottom left */ + -0.5, + 0.5, + -0.5, + 0.5, + -0.5, + -0.5, + -0.5, + -0.5, + -0.5, + /* Top right */ + -0.5, + 0.5, + -0.5, + 0.5, + 0.5, + -0.5, + 0.5, + -0.5, + -0.5, + /* Left face */ + /* Bottom left */ + -0.5, + 0.5, + 0.5, + -0.5, + -0.5, + -0.5, + -0.5, + -0.5, + 0.5, + /* Top right */ + -0.5, + 0.5, + 0.5, + -0.5, + 0.5, + -0.5, + -0.5, + -0.5, + -0.5, + /* Top face */ + /* Bottom left */ + -0.5, + 0.5, + 0.5, + 0.5, + 0.5, + -0.5, + -0.5, + 0.5, + -0.5, + /* Top right */ + -0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + -0.5, + /* Right face */ + /* Bottom left */ + 0.5, + 0.5, + -0.5, + 0.5, + -0.5, + 0.5, + 0.5, + -0.5, + -0.5, + /* Top right */ + 0.5, + 0.5, + -0.5, + 0.5, + 0.5, + 0.5, + 0.5, + -0.5, + 0.5, + /* Back face */ + /* Bottom left */ + 0.5, + 0.5, + 0.5, + -0.5, + -0.5, + 0.5, + 0.5, + -0.5, + 0.5, + /* Top right */ + 0.5, + 0.5, + 0.5, + -0.5, + 0.5, + 0.5, + -0.5, + -0.5, + 0.5, + /* Bottom face */ + /* Bottom left */ + -0.5, + -0.5, + -0.5, + 0.5, + -0.5, + 0.5, + -0.5, + -0.5, + 0.5, + /* Top right */ + -0.5, + -0.5, + -0.5, + 0.5, + -0.5, + -0.5, + 0.5, + -0.5, + 0.5, +}; + +static const float g_colors[] = { + /* Front face */ + /* Bottom left */ + 1.0, 0.0, 0.0, /* red */ + 0.0, 0.0, 1.0, /* blue */ + 0.0, 1.0, 0.0, /* green */ + /* Top right */ + 1.0, 0.0, 0.0, /* red */ + 1.0, 1.0, 0.0, /* yellow */ + 0.0, 0.0, 1.0, /* blue */ + /* Left face */ + /* Bottom left */ + 1.0, 1.0, 1.0, /* white */ + 0.0, 1.0, 0.0, /* green */ + 0.0, 1.0, 1.0, /* cyan */ + /* Top right */ + 1.0, 1.0, 1.0, /* white */ + 1.0, 0.0, 0.0, /* red */ + 0.0, 1.0, 0.0, /* green */ + /* Top face */ + /* Bottom left */ + 1.0, 1.0, 1.0, /* white */ + 1.0, 1.0, 0.0, /* yellow */ + 1.0, 0.0, 0.0, /* red */ + /* Top right */ + 1.0, 1.0, 1.0, /* white */ + 0.0, 0.0, 0.0, /* black */ + 1.0, 1.0, 0.0, /* yellow */ + /* Right face */ + /* Bottom left */ + 1.0, 1.0, 0.0, /* yellow */ + 1.0, 0.0, 1.0, /* magenta */ + 0.0, 0.0, 1.0, /* blue */ + /* Top right */ + 1.0, 1.0, 0.0, /* yellow */ + 0.0, 0.0, 0.0, /* black */ + 1.0, 0.0, 1.0, /* magenta */ + /* Back face */ + /* Bottom left */ + 0.0, 0.0, 0.0, /* black */ + 0.0, 1.0, 1.0, /* cyan */ + 1.0, 0.0, 1.0, /* magenta */ + /* Top right */ + 0.0, 0.0, 0.0, /* black */ + 1.0, 1.0, 1.0, /* white */ + 0.0, 1.0, 1.0, /* cyan */ + /* Bottom face */ + /* Bottom left */ + 0.0, 1.0, 0.0, /* green */ + 1.0, 0.0, 1.0, /* magenta */ + 0.0, 1.0, 1.0, /* cyan */ + /* Top right */ + 0.0, 1.0, 0.0, /* green */ + 0.0, 0.0, 1.0, /* blue */ + 1.0, 0.0, 1.0, /* magenta */ +}; + +static const char *g_shader_vert_src = + " attribute vec4 av4position; " + " attribute vec3 av3color; " + " uniform mat4 mvp; " + " varying vec3 vv3color; " + " void main() { " + " vv3color = av3color; " + " gl_Position = mvp * av4position; " + " } "; + +static const char *g_shader_frag_src = + " precision lowp float; " + " varying vec3 vv3color; " + " void main() { " + " gl_FragColor = vec4(vv3color, 1.0); " + " } "; + +static void +Render(unsigned int width, unsigned int height, shader_data *data) +{ + float matrix_rotate[16], matrix_modelview[16], matrix_perspective[16], matrix_mvp[16]; + + /* + * Do some rotation with Euler angles. It is not a fixed axis as + * quaterions would be, but the effect is cool. + */ + rotate_matrix((float)data->angle_x, 1.0f, 0.0f, 0.0f, matrix_modelview); + rotate_matrix((float)data->angle_y, 0.0f, 1.0f, 0.0f, matrix_rotate); + + multiply_matrix(matrix_rotate, matrix_modelview, matrix_modelview); + + rotate_matrix((float)data->angle_z, 0.0f, 1.0f, 0.0f, matrix_rotate); + + multiply_matrix(matrix_rotate, matrix_modelview, matrix_modelview); + + /* Pull the camera back from the cube */ + matrix_modelview[14] -= 2.5; + + perspective_matrix(45.0f, (float)width / height, 0.01f, 100.0f, matrix_perspective); + multiply_matrix(matrix_perspective, matrix_modelview, matrix_mvp); + + GL_CHECK(ctx.glUniformMatrix4fv(data->attr_mvp, 1, GL_FALSE, matrix_mvp)); + + data->angle_x += 3; + data->angle_y += 2; + data->angle_z += 1; + + if (data->angle_x >= 360) { + data->angle_x -= 360; + } + if (data->angle_x < 0) { + data->angle_x += 360; + } + if (data->angle_y >= 360) { + data->angle_y -= 360; + } + if (data->angle_y < 0) { + data->angle_y += 360; + } + if (data->angle_z >= 360) { + data->angle_z -= 360; + } + if (data->angle_z < 0) { + data->angle_z += 360; + } + + GL_CHECK(ctx.glViewport(0, 0, width, height)); + GL_CHECK(ctx.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)); + GL_CHECK(ctx.glDrawArrays(GL_TRIANGLES, 0, 36)); +} + +static int done; +static Uint32 frames; +static shader_data *datas; +#ifndef __EMSCRIPTEN__ +static thread_data *threads; +#endif + +static void +render_window(int index) +{ + int w, h, status; + + if (!state->windows[index]) { + return; + } + + status = SDL_GL_MakeCurrent(state->windows[index], context[index]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + return; + } + + SDL_GetWindowSizeInPixels(state->windows[index], &w, &h); + Render(w, h, &datas[index]); + SDL_GL_SwapWindow(state->windows[index]); + ++frames; +} + +#ifndef __EMSCRIPTEN__ +static int SDLCALL +render_thread_fn(void *render_ctx) +{ + thread_data *thread = render_ctx; + + while (!done && !thread->done && state->windows[thread->index]) { + if (SDL_AtomicCAS(&thread->suspended, WAIT_STATE_ENTER_SEM, WAIT_STATE_WAITING_ON_SEM)) { + SDL_WaitSemaphore(thread->suspend_sem); + } + render_window(thread->index); + } + + SDL_GL_MakeCurrent(state->windows[thread->index], NULL); + return 0; +} + +static thread_data *GetThreadDataForWindow(SDL_WindowID id) +{ + int i; + SDL_Window *window = SDL_GetWindowFromID(id); + if (window) { + for (i = 0; i < state->num_windows; ++i) { + if (window == state->windows[i]) { + return &threads[i]; + } + } + } + return NULL; +} + +static void +loop_threaded(void) +{ + SDL_Event event; + thread_data *tdata; + + /* Wait for events */ + while (SDL_WaitEvent(&event) && !done) { + if (suspend_when_occluded && event.type == SDL_EVENT_WINDOW_OCCLUDED) { + tdata = GetThreadDataForWindow(event.window.windowID); + if (tdata) { + SDL_AtomicCAS(&tdata->suspended, WAIT_STATE_GO, WAIT_STATE_ENTER_SEM); + } + } else if (suspend_when_occluded && event.type == SDL_EVENT_WINDOW_EXPOSED) { + tdata = GetThreadDataForWindow(event.window.windowID); + if (tdata) { + if (SDL_AtomicSet(&tdata->suspended, WAIT_STATE_GO) == WAIT_STATE_WAITING_ON_SEM) { + SDL_PostSemaphore(tdata->suspend_sem); + } + } + } else if (event.type == SDL_EVENT_WINDOW_CLOSE_REQUESTED) { + tdata = GetThreadDataForWindow(event.window.windowID); + if (tdata) { + /* Stop the render thread when the window is closed */ + tdata->done = 1; + if (tdata->thread) { + SDL_AtomicSet(&tdata->suspended, WAIT_STATE_GO); + SDL_PostSemaphore(tdata->suspend_sem); + SDL_WaitThread(tdata->thread, NULL); + tdata->thread = NULL; + SDL_DestroySemaphore(tdata->suspend_sem); + } + break; + } + } + SDLTest_CommonEvent(state, &event, &done); + } +} +#endif + +static void +loop(void) +{ + SDL_Event event; + int i; + int active_windows = 0; + + /* Check for events */ + while (SDL_PollEvent(&event) && !done) { + SDLTest_CommonEvent(state, &event, &done); + } + if (!done) { + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL || + (suspend_when_occluded && (SDL_GetWindowFlags(state->windows[i]) & SDL_WINDOW_OCCLUDED))) { + continue; + } + ++active_windows; + render_window(i); + } + } +#ifdef __EMSCRIPTEN__ + else { + emscripten_cancel_main_loop(); + } +#endif + + /* If all windows are occluded, throttle event polling to 15hz. */ + if (!done && !active_windows) { + SDL_DelayNS(SDL_NS_PER_SECOND / 15); + } +} + +int main(int argc, char *argv[]) +{ + int fsaa, accel, threaded; + int value; + int i; + const SDL_DisplayMode *mode; + Uint64 then, now; + int status; + shader_data *data; + + /* Initialize parameters */ + fsaa = 0; + accel = 0; + threaded = 0; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + if (SDL_strcasecmp(argv[i], "--fsaa") == 0) { + ++fsaa; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--accel") == 0) { + ++accel; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--threaded") == 0) { + ++threaded; + consumed = 1; + } else if(SDL_strcasecmp(argv[i], "--suspend-when-occluded") == 0) { + suspend_when_occluded = SDL_TRUE; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--zdepth") == 0) { + i++; + if (!argv[i]) { + consumed = -1; + } else { + char *endptr = NULL; + depth = (int)SDL_strtol(argv[i], &endptr, 0); + if (endptr != argv[i] && *endptr == '\0') { + consumed = 1; + } else { + consumed = -1; + } + } + } else { + consumed = -1; + } + } + if (consumed < 0) { + static const char *options[] = { "[--fsaa]", "[--accel]", "[--zdepth %d]", "[--threaded]", "[--suspend-when-occluded]",NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + quit(1); + } + i += consumed; + } + + /* Set OpenGL parameters */ + state->window_flags |= SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE; + state->gl_red_size = 5; + state->gl_green_size = 5; + state->gl_blue_size = 5; + state->gl_depth_size = depth; + state->gl_major_version = 2; + state->gl_minor_version = 0; + state->gl_profile_mask = SDL_GL_CONTEXT_PROFILE_ES; + + if (fsaa) { + state->gl_multisamplebuffers = 1; + state->gl_multisamplesamples = fsaa; + } + if (accel) { + state->gl_accelerated = 1; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + return 0; + } + + context = (SDL_GLContext *)SDL_calloc(state->num_windows, sizeof(*context)); + if (context == NULL) { + SDL_Log("Out of memory!\n"); + quit(2); + } + + /* Create OpenGL ES contexts */ + for (i = 0; i < state->num_windows; i++) { + context[i] = SDL_GL_CreateContext(state->windows[i]); + if (!context[i]) { + SDL_Log("SDL_GL_CreateContext(): %s\n", SDL_GetError()); + quit(2); + } + } + + /* Important: call this *after* creating the context */ + if (LoadContext(&ctx) < 0) { + SDL_Log("Could not load GLES2 functions\n"); + quit(2); + return 0; + } + + if (state->render_flags & SDL_RENDERER_PRESENTVSYNC) { + SDL_GL_SetSwapInterval(1); + } else { + SDL_GL_SetSwapInterval(0); + } + + mode = SDL_GetCurrentDisplayMode(SDL_GetPrimaryDisplay()); + SDL_Log("Threaded : %s\n", threaded ? "yes" : "no"); + if (mode) { + SDL_Log("Screen bpp: %d\n", SDL_BITSPERPIXEL(mode->format)); + SDL_Log("\n"); + } + SDL_Log("Vendor : %s\n", ctx.glGetString(GL_VENDOR)); + SDL_Log("Renderer : %s\n", ctx.glGetString(GL_RENDERER)); + SDL_Log("Version : %s\n", ctx.glGetString(GL_VERSION)); + SDL_Log("Extensions : %s\n", ctx.glGetString(GL_EXTENSIONS)); + SDL_Log("\n"); + + status = SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_RED_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_Log("Failed to get SDL_GL_RED_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_GREEN_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_Log("Failed to get SDL_GL_GREEN_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_BLUE_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_Log("Failed to get SDL_GL_BLUE_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_DEPTH_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_DEPTH_SIZE: requested %d, got %d\n", depth, value); + } else { + SDL_Log("Failed to get SDL_GL_DEPTH_SIZE: %s\n", + SDL_GetError()); + } + if (fsaa) { + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLEBUFFERS, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLEBUFFERS: requested 1, got %d\n", value); + } else { + SDL_Log("Failed to get SDL_GL_MULTISAMPLEBUFFERS: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLESAMPLES: requested %d, got %d\n", fsaa, + value); + } else { + SDL_Log("Failed to get SDL_GL_MULTISAMPLESAMPLES: %s\n", + SDL_GetError()); + } + } + if (accel) { + status = SDL_GL_GetAttribute(SDL_GL_ACCELERATED_VISUAL, &value); + if (!status) { + SDL_Log("SDL_GL_ACCELERATED_VISUAL: requested 1, got %d\n", value); + } else { + SDL_Log("Failed to get SDL_GL_ACCELERATED_VISUAL: %s\n", + SDL_GetError()); + } + } + + datas = (shader_data *)SDL_calloc(state->num_windows, sizeof(shader_data)); + + /* Set rendering settings for each context */ + for (i = 0; i < state->num_windows; ++i) { + + int w, h; + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + + /* Continue for next window */ + continue; + } + SDL_GetWindowSizeInPixels(state->windows[i], &w, &h); + ctx.glViewport(0, 0, w, h); + + data = &datas[i]; + data->angle_x = 0; + data->angle_y = 0; + data->angle_z = 0; + + /* Shader Initialization */ + process_shader(&data->shader_vert, g_shader_vert_src, GL_VERTEX_SHADER); + process_shader(&data->shader_frag, g_shader_frag_src, GL_FRAGMENT_SHADER); + + /* Create shader_program (ready to attach shaders) */ + data->shader_program = GL_CHECK(ctx.glCreateProgram()); + + /* Attach shaders and link shader_program */ + link_program(data); + + /* Get attribute locations of non-fixed attributes like color and texture coordinates. */ + data->attr_position = GL_CHECK(ctx.glGetAttribLocation(data->shader_program, "av4position")); + data->attr_color = GL_CHECK(ctx.glGetAttribLocation(data->shader_program, "av3color")); + + /* Get uniform locations */ + data->attr_mvp = GL_CHECK(ctx.glGetUniformLocation(data->shader_program, "mvp")); + + GL_CHECK(ctx.glUseProgram(data->shader_program)); + + /* Enable attributes for position, color and texture coordinates etc. */ + GL_CHECK(ctx.glEnableVertexAttribArray(data->attr_position)); + GL_CHECK(ctx.glEnableVertexAttribArray(data->attr_color)); + + /* Populate attributes for position, color and texture coordinates etc. */ + + GL_CHECK(ctx.glGenBuffers(1, &data->position_buffer)); + GL_CHECK(ctx.glBindBuffer(GL_ARRAY_BUFFER, data->position_buffer)); + GL_CHECK(ctx.glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertices), g_vertices, GL_STATIC_DRAW)); + GL_CHECK(ctx.glVertexAttribPointer(data->attr_position, 3, GL_FLOAT, GL_FALSE, 0, 0)); + GL_CHECK(ctx.glBindBuffer(GL_ARRAY_BUFFER, 0)); + + GL_CHECK(ctx.glGenBuffers(1, &data->color_buffer)); + GL_CHECK(ctx.glBindBuffer(GL_ARRAY_BUFFER, data->color_buffer)); + GL_CHECK(ctx.glBufferData(GL_ARRAY_BUFFER, sizeof(g_colors), g_colors, GL_STATIC_DRAW)); + GL_CHECK(ctx.glVertexAttribPointer(data->attr_color, 3, GL_FLOAT, GL_FALSE, 0, 0)); + GL_CHECK(ctx.glBindBuffer(GL_ARRAY_BUFFER, 0)); + + GL_CHECK(ctx.glEnable(GL_CULL_FACE)); + GL_CHECK(ctx.glEnable(GL_DEPTH_TEST)); + + SDL_GL_MakeCurrent(state->windows[i], NULL); + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + if (threaded) { + threads = (thread_data *)SDL_calloc(state->num_windows, sizeof(thread_data)); + + /* Start a render thread for each window */ + for (i = 0; i < state->num_windows; ++i) { + threads[i].index = i; + SDL_AtomicSet(&threads[i].suspended, 0); + threads[i].suspend_sem = SDL_CreateSemaphore(0); + threads[i].thread = SDL_CreateThread(render_thread_fn, "RenderThread", &threads[i]); + } + + while (!done) { + loop_threaded(); + } + + /* Join the remaining render threads (if any) */ + for (i = 0; i < state->num_windows; ++i) { + threads[i].done = 1; + if (threads[i].thread) { + SDL_WaitThread(threads[i].thread, NULL); + } + } + } else { + while (!done) { + loop(); + } + } +#endif + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + SDL_Log("%2.2f frames per second\n", + ((double)frames * 1000) / (now - then)); + } +#ifndef __ANDROID__ + quit(0); +#endif + return 0; +} + +#else /* HAVE_OPENGLES2 */ + +int main(int argc, char *argv[]) +{ + SDL_Log("No OpenGL ES support on this system\n"); + return 1; +} + +#endif /* HAVE_OPENGLES2 */ diff --git a/vendor/sdl-3.0.0/test/testgles2_sdf.c b/vendor/sdl-3.0.0/test/testgles2_sdf.c new file mode 100644 index 0000000..aadb031 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testgles2_sdf.c @@ -0,0 +1,800 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include +#include "testutils.h" + +#if defined(__IOS__) || defined(__ANDROID__) || defined(__EMSCRIPTEN__) || defined(__WINDOWS__) || defined(__LINUX__) +#define HAVE_OPENGLES2 +#endif + +#ifdef HAVE_OPENGLES2 + +#include + +typedef struct GLES2_Context +{ +#define SDL_PROC(ret, func, params) ret (APIENTRY *func) params; +#include "../src/render/opengles2/SDL_gles2funcs.h" +#undef SDL_PROC +} GLES2_Context; + +static SDL_Surface *g_surf_sdf = NULL; +static GLenum g_texture; +static GLenum g_texture_type = GL_TEXTURE_2D; +static GLfloat g_verts[24]; +typedef enum +{ + GLES2_ATTRIBUTE_POSITION = 0, + GLES2_ATTRIBUTE_TEXCOORD = 1, + GLES2_ATTRIBUTE_ANGLE = 2, + GLES2_ATTRIBUTE_CENTER = 3, +} GLES2_Attribute; + +typedef enum +{ + GLES2_UNIFORM_PROJECTION, + GLES2_UNIFORM_TEXTURE, + GLES2_UNIFORM_COLOR, +} GLES2_Uniform; + +static GLint g_uniform_locations[16]; + +static SDLTest_CommonState *state; +static SDL_GLContext *context = NULL; +static int depth = 16; +static GLES2_Context ctx; + +static int LoadContext(GLES2_Context *data) +{ +#ifdef SDL_VIDEO_DRIVER_UIKIT +#define __SDL_NOGETPROCADDR__ +#elif defined(SDL_VIDEO_DRIVER_ANDROID) +#define __SDL_NOGETPROCADDR__ +#endif + +#if defined __SDL_NOGETPROCADDR__ +#define SDL_PROC(ret, func, params) data->func = func; +#else +#define SDL_PROC(ret, func, params) \ + do { \ + data->func = (ret (APIENTRY *) params)SDL_GL_GetProcAddress(#func); \ + if (!data->func) { \ + return SDL_SetError("Couldn't load GLES2 function %s: %s", #func, SDL_GetError()); \ + } \ + } while (0); +#endif /* __SDL_NOGETPROCADDR__ */ + +#include "../src/render/opengles2/SDL_gles2funcs.h" +#undef SDL_PROC + return 0; +} + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + int i; + + if (context != NULL) { + for (i = 0; i < state->num_windows; i++) { + if (context[i]) { + SDL_GL_DeleteContext(context[i]); + } + } + + SDL_free(context); + } + + SDLTest_CommonQuit(state); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +#define GL_CHECK(x) \ + x; \ + { \ + GLenum glError = ctx.glGetError(); \ + if (glError != GL_NO_ERROR) { \ + SDL_Log("glGetError() = %i (0x%.8x) at line %i\n", glError, glError, __LINE__); \ + quit(1); \ + } \ + } + +/** + * Create shader, load in source, compile, dump debug as necessary. + * + * shader: Pointer to return created shader ID. + * source: Passed-in shader source code. + * shader_type: Passed to GL, e.g. GL_VERTEX_SHADER. + */ +static void process_shader(GLenum *shader, const char *source, GLenum shader_type) +{ + GLint status = GL_FALSE; + const char *shaders[1] = { NULL }; + char buffer[1024]; + GLsizei length; + + /* Create shader and load into GL. */ + *shader = GL_CHECK(ctx.glCreateShader(shader_type)); + + shaders[0] = source; + + GL_CHECK(ctx.glShaderSource(*shader, 1, shaders, NULL)); + + /* Clean up shader source. */ + shaders[0] = NULL; + + /* Try compiling the shader. */ + GL_CHECK(ctx.glCompileShader(*shader)); + GL_CHECK(ctx.glGetShaderiv(*shader, GL_COMPILE_STATUS, &status)); + + /* Dump debug info (source and log) if compilation failed. */ + if (status != GL_TRUE) { + ctx.glGetShaderInfoLog(*shader, sizeof(buffer), &length, &buffer[0]); + buffer[length] = '\0'; + SDL_Log("Shader compilation failed: %s", buffer); + quit(-1); + } +} + +/* Notes on a_angle: + * It is a vector containing sine and cosine for rotation matrix + * To get correct rotation for most cases when a_angle is disabled cosine + * value is decremented by 1.0 to get proper output with 0.0 which is default value + */ +static const char GLES2_VertexSrc_Default_[] = " \ + uniform mat4 u_projection; \ + attribute vec2 a_position; \ + attribute vec2 a_texCoord; \ + attribute vec2 a_angle; \ + attribute vec2 a_center; \ + varying vec2 v_texCoord; \ + \ + void main() \ + { \ + float s = a_angle[0]; \ + float c = a_angle[1] + 1.0; \ + mat2 rotationMatrix = mat2(c, -s, s, c); \ + vec2 position = rotationMatrix * (a_position - a_center) + a_center; \ + v_texCoord = a_texCoord; \ + gl_Position = u_projection * vec4(position, 0.0, 1.0);\ + gl_PointSize = 1.0; \ + } \ +"; + +static const char GLES2_FragmentSrc_TextureABGRSrc_[] = " \ + precision mediump float; \ + uniform sampler2D u_texture; \ + uniform vec4 u_color; \ + varying vec2 v_texCoord; \ + \ + void main() \ + { \ + gl_FragColor = texture2D(u_texture, v_texCoord); \ + gl_FragColor *= u_color; \ + } \ +"; + +/* RGB to ABGR conversion */ +static const char GLES2_FragmentSrc_TextureABGRSrc_SDF[] = " \ + #extension GL_OES_standard_derivatives : enable\n\ + \ + precision mediump float; \ + uniform sampler2D u_texture; \ + uniform vec4 u_color; \ + varying vec2 v_texCoord; \ + \ + void main() \ + { \ + vec4 abgr = texture2D(u_texture, v_texCoord); \ +\ + float sigDist = abgr.a; \ + \ + float w = fwidth( sigDist );\ + float alpha = clamp(smoothstep(0.5 - w, 0.5 + w, sigDist), 0.0, 1.0); \ +\ + gl_FragColor = vec4(abgr.rgb, abgr.a * alpha); \ + gl_FragColor.rgb *= gl_FragColor.a; \ + gl_FragColor *= u_color; \ + } \ +"; + +/* RGB to ABGR conversion DEBUG */ +static const char *GLES2_FragmentSrc_TextureABGRSrc_SDF_dbg = " \ + #extension GL_OES_standard_derivatives : enable\n\ + \ + precision mediump float; \ + uniform sampler2D u_texture; \ + uniform vec4 u_color; \ + varying vec2 v_texCoord; \ + \ + void main() \ + { \ + vec4 abgr = texture2D(u_texture, v_texCoord); \ +\ + float a = abgr.a; \ + gl_FragColor = vec4(a, a, a, 1.0); \ + } \ +"; + +static float g_val = 1.0f; +static int g_use_SDF = 1; +static int g_use_SDF_debug = 0; +static float g_angle = 0.0f; +static float matrix_mvp[4][4]; + +typedef struct shader_data +{ + GLint shader_program; + GLenum shader_frag, shader_vert; + + GLint attr_position; + GLint attr_color, attr_mvp; + +} shader_data; + +static void +Render(int width, int height, shader_data *data) +{ + float *verts = g_verts; + ctx.glViewport(0, 0, 640, 480); + + GL_CHECK(ctx.glClear(GL_COLOR_BUFFER_BIT)); + + GL_CHECK(ctx.glUniformMatrix4fv(g_uniform_locations[GLES2_UNIFORM_PROJECTION], 1, GL_FALSE, (const float *)matrix_mvp)); + GL_CHECK(ctx.glUniform4f(g_uniform_locations[GLES2_UNIFORM_COLOR], 1.0f, 1.0f, 1.0f, 1.0f)); + + GL_CHECK(ctx.glVertexAttribPointer(GLES2_ATTRIBUTE_ANGLE, 2, GL_FLOAT, GL_FALSE, 0, (const GLvoid *)(verts + 16))); + GL_CHECK(ctx.glVertexAttribPointer(GLES2_ATTRIBUTE_TEXCOORD, 2, GL_FLOAT, GL_FALSE, 0, (const GLvoid *)(verts + 8))); + GL_CHECK(ctx.glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, 0, (const GLvoid *)verts)); + + GL_CHECK(ctx.glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)); +} + +static void renderCopy_angle(float degree_angle) +{ + const float radian_angle = (float)(3.141592 * degree_angle) / 180.0f; + const GLfloat s = (GLfloat)SDL_sin(radian_angle); + const GLfloat c = (GLfloat)SDL_cos(radian_angle) - 1.0f; + GLfloat *verts = g_verts + 16; + *(verts++) = s; + *(verts++) = c; + *(verts++) = s; + *(verts++) = c; + *(verts++) = s; + *(verts++) = c; + *(verts++) = s; + *(verts++) = c; +} + +static void renderCopy_position(SDL_Rect *srcrect, SDL_Rect *dstrect) +{ + GLfloat minx, miny, maxx, maxy; + GLfloat minu, maxu, minv, maxv; + GLfloat *verts = g_verts; + + minx = (GLfloat)dstrect->x; + miny = (GLfloat)dstrect->y; + maxx = (GLfloat)(dstrect->x + dstrect->w); + maxy = (GLfloat)(dstrect->y + dstrect->h); + + minu = (GLfloat)srcrect->x / (GLfloat)g_surf_sdf->w; + maxu = (GLfloat)(srcrect->x + srcrect->w) / (GLfloat)g_surf_sdf->w; + minv = (GLfloat)srcrect->y / (GLfloat)g_surf_sdf->h; + maxv = (GLfloat)(srcrect->y + srcrect->h) / (GLfloat)g_surf_sdf->h; + + *(verts++) = minx; + *(verts++) = miny; + *(verts++) = maxx; + *(verts++) = miny; + *(verts++) = minx; + *(verts++) = maxy; + *(verts++) = maxx; + *(verts++) = maxy; + + *(verts++) = minu; + *(verts++) = minv; + *(verts++) = maxu; + *(verts++) = minv; + *(verts++) = minu; + *(verts++) = maxv; + *(verts++) = maxu; + *(verts++) = maxv; +} + +static int done; +static Uint32 frames; +static shader_data *datas; + +static void loop(void) +{ + SDL_Event event; + int i; + int status; + + /* Check for events */ + ++frames; + while (SDL_PollEvent(&event) && !done) { + switch (event.type) { + case SDL_EVENT_KEY_DOWN: + { + const int sym = event.key.keysym.sym; + + if (sym == SDLK_TAB) { + SDL_Log("Tab"); + } + + if (sym == SDLK_LEFT) { + g_val -= 0.05f; + } + if (sym == SDLK_RIGHT) { + g_val += 0.05f; + } + if (sym == SDLK_UP) { + g_angle -= 1.0f; + } + if (sym == SDLK_DOWN) { + g_angle += 1.0f; + } + + break; + } + + case SDL_EVENT_WINDOW_RESIZED: + for (i = 0; i < state->num_windows; ++i) { + if (event.window.windowID == SDL_GetWindowID(state->windows[i])) { + int w, h; + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + break; + } + /* Change view port to the new window dimensions */ + SDL_GetWindowSizeInPixels(state->windows[i], &w, &h); + ctx.glViewport(0, 0, w, h); + state->window_w = event.window.data1; + state->window_h = event.window.data2; + /* Update window content */ + Render(event.window.data1, event.window.data2, &datas[i]); + SDL_GL_SwapWindow(state->windows[i]); + break; + } + } + break; + + default: + break; + } + SDLTest_CommonEvent(state, &event, &done); + } + + matrix_mvp[3][0] = -1.0f; + matrix_mvp[3][3] = 1.0f; + + matrix_mvp[0][0] = 2.0f / 640.0f; + matrix_mvp[1][1] = -2.0f / 480.0f; + matrix_mvp[3][1] = 1.0f; + + renderCopy_angle(g_angle); + + { + int w, h; + SDL_Rect rs, rd; + + SDL_GetWindowSizeInPixels(state->windows[0], &w, &h); + + rs.x = 0; + rs.y = 0; + rs.w = g_surf_sdf->w; + rs.h = g_surf_sdf->h; + rd.w = (int)((float)g_surf_sdf->w * g_val); + rd.h = (int)((float)g_surf_sdf->h * g_val); + rd.x = (w - rd.w) / 2; + rd.y = (h - rd.h) / 2; + renderCopy_position(&rs, &rd); + } + + if (!done) { + for (i = 0; i < state->num_windows; ++i) { + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + + /* Continue for next window */ + continue; + } + Render(state->window_w, state->window_h, &datas[i]); + SDL_GL_SwapWindow(state->windows[i]); + } + } +#ifdef __EMSCRIPTEN__ + else { + emscripten_cancel_main_loop(); + } +#endif +} + +int main(int argc, char *argv[]) +{ + int fsaa, accel; + int value; + int i; + const SDL_DisplayMode *mode; + Uint64 then, now; + int status; + shader_data *data; + char *path = NULL; + + /* Initialize parameters */ + fsaa = 0; + accel = 0; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + if (SDL_strcasecmp(argv[i], "--fsaa") == 0) { + ++fsaa; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--accel") == 0) { + ++accel; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--zdepth") == 0) { + i++; + if (!argv[i]) { + consumed = -1; + } else { + char *endptr = NULL; + depth = (int)SDL_strtol(argv[i], &endptr, 0); + if (endptr != argv[i] && *endptr == '\0') { + consumed = 1; + } else { + consumed = -1; + } + } + } else { + consumed = -1; + } + } + if (consumed < 0) { + static const char *options[] = { "[--fsaa]", "[--accel]", "[--zdepth %d]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + quit(1); + } + i += consumed; + } + + /* Set OpenGL parameters */ + state->window_flags |= SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE; + state->gl_red_size = 5; + state->gl_green_size = 5; + state->gl_blue_size = 5; + state->gl_depth_size = depth; + state->gl_major_version = 2; + state->gl_minor_version = 0; + state->gl_profile_mask = SDL_GL_CONTEXT_PROFILE_ES; + + if (fsaa) { + state->gl_multisamplebuffers = 1; + state->gl_multisamplesamples = fsaa; + } + if (accel) { + state->gl_accelerated = 1; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + return 0; + } + + context = (SDL_GLContext *)SDL_calloc(state->num_windows, sizeof(*context)); + if (context == NULL) { + SDL_Log("Out of memory!\n"); + quit(2); + } + + /* Create OpenGL ES contexts */ + for (i = 0; i < state->num_windows; i++) { + context[i] = SDL_GL_CreateContext(state->windows[i]); + if (!context[i]) { + SDL_Log("SDL_GL_CreateContext(): %s\n", SDL_GetError()); + quit(2); + } + } + + /* Important: call this *after* creating the context */ + if (LoadContext(&ctx) < 0) { + SDL_Log("Could not load GLES2 functions\n"); + quit(2); + return 0; + } + + SDL_memset(matrix_mvp, 0, sizeof(matrix_mvp)); + + { + SDL_Surface *tmp; + char *f; + g_use_SDF = 1; + g_use_SDF_debug = 0; + + if (g_use_SDF) { + f = "testgles2_sdf_img_sdf.bmp"; + } else { + f = "testgles2_sdf_img_normal.bmp"; + } + + SDL_Log("SDF is %s", g_use_SDF ? "enabled" : "disabled"); + + /* Load SDF BMP image */ +#if 1 + path = GetNearbyFilename(f); + + if (path == NULL) { + path = SDL_strdup(f); + } + + if (path == NULL) { + SDL_Log("out of memory\n"); + exit(-1); + } + + tmp = SDL_LoadBMP(path); + if (tmp == NULL) { + SDL_Log("missing image file: %s", path); + exit(-1); + } else { + SDL_Log("Load image file: %s", path); + } + + SDL_free(path); +#else + /* Generate SDF image using SDL_ttf */ + +#include "SDL_ttf.h" + char *font_file = "./font/DroidSansFallback.ttf"; + char *str = "Abcde"; + SDL_Color color = { 0, 0, 0, 255 }; + + TTF_Init(); + TTF_Font *font = TTF_OpenFont(font_file, 72); + + if (font == NULL) { + SDL_Log("Cannot open font %s", font_file); + } + + TTF_SetFontSDF(font, g_use_SDF); + SDL_Surface *tmp = TTF_RenderUTF8_Blended(font, str, color); + + SDL_Log("err: %s", SDL_GetError()); + if (tmp == NULL) { + SDL_Log("can't render text"); + return -1; + } + + SDL_SaveBMP(tmp, f); + + TTF_CloseFont(font); + TTF_Quit(); +#endif + g_surf_sdf = SDL_ConvertSurfaceFormat(tmp, SDL_PIXELFORMAT_ABGR8888); + + SDL_SetSurfaceBlendMode(g_surf_sdf, SDL_BLENDMODE_BLEND); + } + + if (state->render_flags & SDL_RENDERER_PRESENTVSYNC) { + SDL_GL_SetSwapInterval(1); + } else { + SDL_GL_SetSwapInterval(0); + } + + mode = SDL_GetCurrentDisplayMode(SDL_GetPrimaryDisplay()); + if (mode) { + SDL_Log("Screen bpp: %d\n", SDL_BITSPERPIXEL(mode->format)); + SDL_Log("\n"); + } + SDL_Log("Vendor : %s\n", ctx.glGetString(GL_VENDOR)); + SDL_Log("Renderer : %s\n", ctx.glGetString(GL_RENDERER)); + SDL_Log("Version : %s\n", ctx.glGetString(GL_VERSION)); + SDL_Log("Extensions : %s\n", ctx.glGetString(GL_EXTENSIONS)); + SDL_Log("\n"); + + status = SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_RED_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_Log("Failed to get SDL_GL_RED_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_GREEN_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_Log("Failed to get SDL_GL_GREEN_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_BLUE_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_Log("Failed to get SDL_GL_BLUE_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_DEPTH_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_DEPTH_SIZE: requested %d, got %d\n", depth, value); + } else { + SDL_Log("Failed to get SDL_GL_DEPTH_SIZE: %s\n", + SDL_GetError()); + } + if (fsaa) { + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLEBUFFERS, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLEBUFFERS: requested 1, got %d\n", value); + } else { + SDL_Log("Failed to get SDL_GL_MULTISAMPLEBUFFERS: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLESAMPLES: requested %d, got %d\n", fsaa, + value); + } else { + SDL_Log("Failed to get SDL_GL_MULTISAMPLESAMPLES: %s\n", + SDL_GetError()); + } + } + if (accel) { + status = SDL_GL_GetAttribute(SDL_GL_ACCELERATED_VISUAL, &value); + if (!status) { + SDL_Log("SDL_GL_ACCELERATED_VISUAL: requested 1, got %d\n", value); + } else { + SDL_Log("Failed to get SDL_GL_ACCELERATED_VISUAL: %s\n", + SDL_GetError()); + } + } + + datas = (shader_data *)SDL_calloc(state->num_windows, sizeof(shader_data)); + + /* Set rendering settings for each context */ + for (i = 0; i < state->num_windows; ++i) { + + int w, h; + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + + /* Continue for next window */ + continue; + } + + { + int format = GL_RGBA; + int type = GL_UNSIGNED_BYTE; + + GL_CHECK(ctx.glGenTextures(1, &g_texture)); + + ctx.glActiveTexture(GL_TEXTURE0); + ctx.glPixelStorei(GL_PACK_ALIGNMENT, 1); + ctx.glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + + ctx.glBindTexture(g_texture_type, g_texture); + + ctx.glTexParameteri(g_texture_type, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + ctx.glTexParameteri(g_texture_type, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + ctx.glTexParameteri(g_texture_type, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + ctx.glTexParameteri(g_texture_type, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + GL_CHECK(ctx.glTexImage2D(g_texture_type, 0, format, g_surf_sdf->w, g_surf_sdf->h, 0, format, type, NULL)); + GL_CHECK(ctx.glTexSubImage2D(g_texture_type, 0, 0 /* xoffset */, 0 /* yoffset */, g_surf_sdf->w, g_surf_sdf->h, format, type, g_surf_sdf->pixels)); + } + + SDL_GetWindowSizeInPixels(state->windows[i], &w, &h); + ctx.glViewport(0, 0, w, h); + + data = &datas[i]; + + /* Shader Initialization */ + process_shader(&data->shader_vert, GLES2_VertexSrc_Default_, GL_VERTEX_SHADER); + + if (g_use_SDF) { + if (g_use_SDF_debug == 0) { + process_shader(&data->shader_frag, GLES2_FragmentSrc_TextureABGRSrc_SDF, GL_FRAGMENT_SHADER); + } else { + process_shader(&data->shader_frag, GLES2_FragmentSrc_TextureABGRSrc_SDF_dbg, GL_FRAGMENT_SHADER); + } + } else { + process_shader(&data->shader_frag, GLES2_FragmentSrc_TextureABGRSrc_, GL_FRAGMENT_SHADER); + } + + /* Create shader_program (ready to attach shaders) */ + data->shader_program = GL_CHECK(ctx.glCreateProgram()); + + /* Attach shaders and link shader_program */ + GL_CHECK(ctx.glAttachShader(data->shader_program, data->shader_vert)); + GL_CHECK(ctx.glAttachShader(data->shader_program, data->shader_frag)); + GL_CHECK(ctx.glLinkProgram(data->shader_program)); + + ctx.glBindAttribLocation(data->shader_program, GLES2_ATTRIBUTE_POSITION, "a_position"); + ctx.glBindAttribLocation(data->shader_program, GLES2_ATTRIBUTE_TEXCOORD, "a_texCoord"); + ctx.glBindAttribLocation(data->shader_program, GLES2_ATTRIBUTE_ANGLE, "a_angle"); + ctx.glBindAttribLocation(data->shader_program, GLES2_ATTRIBUTE_CENTER, "a_center"); + + /* Predetermine locations of uniform variables */ + g_uniform_locations[GLES2_UNIFORM_PROJECTION] = ctx.glGetUniformLocation(data->shader_program, "u_projection"); + g_uniform_locations[GLES2_UNIFORM_TEXTURE] = ctx.glGetUniformLocation(data->shader_program, "u_texture"); + g_uniform_locations[GLES2_UNIFORM_COLOR] = ctx.glGetUniformLocation(data->shader_program, "u_color"); + + GL_CHECK(ctx.glUseProgram(data->shader_program)); + + ctx.glEnableVertexAttribArray((GLenum)GLES2_ATTRIBUTE_ANGLE); + ctx.glDisableVertexAttribArray((GLenum)GLES2_ATTRIBUTE_CENTER); + ctx.glEnableVertexAttribArray(GLES2_ATTRIBUTE_POSITION); + ctx.glEnableVertexAttribArray((GLenum)GLES2_ATTRIBUTE_TEXCOORD); + + ctx.glUniform1i(g_uniform_locations[GLES2_UNIFORM_TEXTURE], 0); /* always texture unit 0. */ + ctx.glActiveTexture(GL_TEXTURE0); + ctx.glBindTexture(g_texture_type, g_texture); + GL_CHECK(ctx.glClearColor(1, 1, 1, 1)); + + /* SDL_BLENDMODE_BLEND */ + GL_CHECK(ctx.glEnable(GL_BLEND)); + ctx.glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA); + ctx.glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD); + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + SDL_Log("%2.2f frames per second\n", + ((double)frames * 1000) / (now - then)); + } +#ifndef __ANDROID__ + quit(0); +#endif + return 0; +} + +#else /* HAVE_OPENGLES2 */ + +int main(int argc, char *argv[]) +{ + SDL_Log("No OpenGL ES support on this system\n"); + return 1; +} + +#endif /* HAVE_OPENGLES2 */ diff --git a/vendor/sdl-3.0.0/test/testgles2_sdf_img_normal.bmp b/vendor/sdl-3.0.0/test/testgles2_sdf_img_normal.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1209e1b1df7105dad9e3e401b9dd9a0d255e4162 GIT binary patch literal 68122 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 nfH7bU7z4(DF<=ZB1IBX8(fH7bUkb(aJ?X9&q literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/test/testgles2_sdf_img_sdf.bmp b/vendor/sdl-3.0.0/test/testgles2_sdf_img_sdf.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f983d2d211509e9e91e4e65e173d78c1a9d64cb GIT binary patch literal 72202 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 literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/test/testhaptic.c b/vendor/sdl-3.0.0/test/testhaptic.c new file mode 100644 index 0000000..6a6d686 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testhaptic.c @@ -0,0 +1,384 @@ +/* +Copyright (c) 2008, Edgar Simo Serra +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of the Simple Directmedia Layer (SDL) nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#include +#include + +#include + +static SDL_Haptic *haptic; +static SDLTest_CommonState *state; + +/* + * prototypes + */ +static void abort_execution(void); +static void HapticPrintSupported(SDL_Haptic *); + +/** + * \brief The entry point of this force feedback demo. + * \param[in] argc Number of arguments. + * \param[in] argv Array of argc arguments. + */ +int main(int argc, char **argv) +{ + int i; + char *name = NULL; + int index = -1; + SDL_HapticEffect efx[9]; + int id[9]; + int nefx; + unsigned int supported; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (!name && index < 0) { + size_t len; + name = argv[i]; + len = SDL_strlen(name); + if (len < 3 && SDL_isdigit(name[0]) && (len == 1 || SDL_isdigit(name[1]))) { + index = SDL_atoi(name); + name = NULL; + } + consumed = 1; + } + } + if (consumed <= 0) { + static const char *options[] = { "[device]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + SDL_Log("\n"); + SDL_Log("If device is a two-digit number it'll use it as an index, otherwise\n" + "it'll use it as if it were part of the device's name.\n"); + return 1; + } + + i += consumed; + } + + /* Initialize the force feedbackness */ + SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_JOYSTICK | + SDL_INIT_HAPTIC); + SDL_Log("%d Haptic devices detected:\n", SDL_NumHaptics()); + for (i = 0; i < SDL_NumHaptics(); ++i) { + SDL_Log(" %s\n", SDL_HapticName(i)); + } + if (SDL_NumHaptics() > 0) { + /* We'll just use index or the first force feedback device found */ + if (name == NULL) { + i = (index != -1) ? index : 0; + } + /* Try to find matching device */ + else { + for (i = 0; i < SDL_NumHaptics(); i++) { + if (SDL_strstr(SDL_HapticName(i), name) != NULL) { + break; + } + } + + if (i >= SDL_NumHaptics()) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to find device matching '%s', aborting.\n", + name); + return 1; + } + } + + haptic = SDL_HapticOpen(i); + if (haptic == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to create the haptic device: %s\n", + SDL_GetError()); + return 1; + } + SDL_Log("Device: %s\n", SDL_HapticName(i)); + HapticPrintSupported(haptic); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No Haptic devices found!\n"); + return 1; + } + + /* We only want force feedback errors. */ + SDL_ClearError(); + + /* Create effects. */ + SDL_memset(efx, 0, sizeof(efx)); + nefx = 0; + supported = SDL_HapticQuery(haptic); + + SDL_Log("\nUploading effects\n"); + /* First we'll try a SINE effect. */ + if (supported & SDL_HAPTIC_SINE) { + SDL_Log(" effect %d: Sine Wave\n", nefx); + efx[nefx].type = SDL_HAPTIC_SINE; + efx[nefx].periodic.period = 1000; + efx[nefx].periodic.magnitude = -0x2000; /* Negative magnitude and ... */ + efx[nefx].periodic.phase = 18000; /* ... 180 degrees phase shift => cancel eachother */ + efx[nefx].periodic.length = 5000; + efx[nefx].periodic.attack_length = 1000; + efx[nefx].periodic.fade_length = 1000; + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + /* Now we'll try a SAWTOOTHUP */ + if (supported & SDL_HAPTIC_SAWTOOTHUP) { + SDL_Log(" effect %d: Sawtooth Up\n", nefx); + efx[nefx].type = SDL_HAPTIC_SAWTOOTHUP; + efx[nefx].periodic.period = 500; + efx[nefx].periodic.magnitude = 0x5000; + efx[nefx].periodic.length = 5000; + efx[nefx].periodic.attack_length = 1000; + efx[nefx].periodic.fade_length = 1000; + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + + /* Now the classical constant effect. */ + if (supported & SDL_HAPTIC_CONSTANT) { + SDL_Log(" effect %d: Constant Force\n", nefx); + efx[nefx].type = SDL_HAPTIC_CONSTANT; + efx[nefx].constant.direction.type = SDL_HAPTIC_POLAR; + efx[nefx].constant.direction.dir[0] = 20000; /* Force comes from the south-west. */ + efx[nefx].constant.length = 5000; + efx[nefx].constant.level = 0x6000; + efx[nefx].constant.attack_length = 1000; + efx[nefx].constant.fade_length = 1000; + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + + /* The cute spring effect. */ + if (supported & SDL_HAPTIC_SPRING) { + SDL_Log(" effect %d: Condition Spring\n", nefx); + efx[nefx].type = SDL_HAPTIC_SPRING; + efx[nefx].condition.length = 5000; + for (i = 0; i < SDL_HapticNumAxes(haptic); i++) { + efx[nefx].condition.right_sat[i] = 0xFFFF; + efx[nefx].condition.left_sat[i] = 0xFFFF; + efx[nefx].condition.right_coeff[i] = 0x2000; + efx[nefx].condition.left_coeff[i] = 0x2000; + efx[nefx].condition.center[i] = 0x1000; /* Displace the center for it to move. */ + } + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + /* The interesting damper effect. */ + if (supported & SDL_HAPTIC_DAMPER) { + SDL_Log(" effect %d: Condition Damper\n", nefx); + efx[nefx].type = SDL_HAPTIC_DAMPER; + efx[nefx].condition.length = 5000; + for (i = 0; i < SDL_HapticNumAxes(haptic); i++) { + efx[nefx].condition.right_sat[i] = 0xFFFF; + efx[nefx].condition.left_sat[i] = 0xFFFF; + efx[nefx].condition.right_coeff[i] = 0x2000; + efx[nefx].condition.left_coeff[i] = 0x2000; + } + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + /* The pretty awesome inertia effect. */ + if (supported & SDL_HAPTIC_INERTIA) { + SDL_Log(" effect %d: Condition Inertia\n", nefx); + efx[nefx].type = SDL_HAPTIC_INERTIA; + efx[nefx].condition.length = 5000; + for (i = 0; i < SDL_HapticNumAxes(haptic); i++) { + efx[nefx].condition.right_sat[i] = 0xFFFF; + efx[nefx].condition.left_sat[i] = 0xFFFF; + efx[nefx].condition.right_coeff[i] = 0x2000; + efx[nefx].condition.left_coeff[i] = 0x2000; + efx[nefx].condition.deadband[i] = 0x1000; /* 1/16th of axis-range around the center is 'dead'. */ + } + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + /* The hot friction effect. */ + if (supported & SDL_HAPTIC_FRICTION) { + SDL_Log(" effect %d: Condition Friction\n", nefx); + efx[nefx].type = SDL_HAPTIC_FRICTION; + efx[nefx].condition.length = 5000; + for (i = 0; i < SDL_HapticNumAxes(haptic); i++) { + efx[nefx].condition.right_sat[i] = 0xFFFF; + efx[nefx].condition.left_sat[i] = 0xFFFF; + efx[nefx].condition.right_coeff[i] = 0x2000; + efx[nefx].condition.left_coeff[i] = 0x2000; + } + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + + /* Now we'll try a ramp effect */ + if (supported & SDL_HAPTIC_RAMP) { + SDL_Log(" effect %d: Ramp\n", nefx); + efx[nefx].type = SDL_HAPTIC_RAMP; + efx[nefx].ramp.direction.type = SDL_HAPTIC_CARTESIAN; + efx[nefx].ramp.direction.dir[0] = 1; /* Force comes from */ + efx[nefx].ramp.direction.dir[1] = -1; /* the north-east. */ + efx[nefx].ramp.length = 5000; + efx[nefx].ramp.start = 0x4000; + efx[nefx].ramp.end = -0x4000; + efx[nefx].ramp.attack_length = 1000; + efx[nefx].ramp.fade_length = 1000; + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + + /* Finally we'll try a left/right effect. */ + if (supported & SDL_HAPTIC_LEFTRIGHT) { + SDL_Log(" effect %d: Left/Right\n", nefx); + efx[nefx].type = SDL_HAPTIC_LEFTRIGHT; + efx[nefx].leftright.length = 5000; + efx[nefx].leftright.large_magnitude = 0x3000; + efx[nefx].leftright.small_magnitude = 0xFFFF; + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + + SDL_Log("\nNow playing effects for 5 seconds each with 1 second delay between\n"); + for (i = 0; i < nefx; i++) { + SDL_Log(" Playing effect %d\n", i); + SDL_HapticRunEffect(haptic, id[i], 1); + SDL_Delay(6000); /* Effects only have length 5000 */ + } + + /* Quit */ + if (haptic != NULL) { + SDL_HapticClose(haptic); + } + SDL_Quit(); + SDLTest_CommonDestroyState(state); + + return 0; +} + +/** + * Cleans up a bit. + */ +static void +abort_execution(void) +{ + SDL_Log("\nAborting program execution.\n"); + + SDL_HapticClose(haptic); + SDL_Quit(); + SDLTest_CommonDestroyState(state); + + exit(1); +} + +/** + * Displays information about the haptic device. + */ +static void +HapticPrintSupported(SDL_Haptic *ptr) +{ + unsigned int supported; + + supported = SDL_HapticQuery(ptr); + SDL_Log(" Supported effects [%d effects, %d playing]:\n", + SDL_HapticNumEffects(ptr), SDL_HapticNumEffectsPlaying(ptr)); + if (supported & SDL_HAPTIC_CONSTANT) { + SDL_Log(" constant\n"); + } + if (supported & SDL_HAPTIC_SINE) { + SDL_Log(" sine\n"); + } + /* !!! FIXME: put this back when we have more bits in 2.1 */ + /* if (supported & SDL_HAPTIC_SQUARE) + SDL_Log(" square\n"); */ + if (supported & SDL_HAPTIC_TRIANGLE) { + SDL_Log(" triangle\n"); + } + if (supported & SDL_HAPTIC_SAWTOOTHUP) { + SDL_Log(" sawtoothup\n"); + } + if (supported & SDL_HAPTIC_SAWTOOTHDOWN) { + SDL_Log(" sawtoothdown\n"); + } + if (supported & SDL_HAPTIC_RAMP) { + SDL_Log(" ramp\n"); + } + if (supported & SDL_HAPTIC_FRICTION) { + SDL_Log(" friction\n"); + } + if (supported & SDL_HAPTIC_SPRING) { + SDL_Log(" spring\n"); + } + if (supported & SDL_HAPTIC_DAMPER) { + SDL_Log(" damper\n"); + } + if (supported & SDL_HAPTIC_INERTIA) { + SDL_Log(" inertia\n"); + } + if (supported & SDL_HAPTIC_CUSTOM) { + SDL_Log(" custom\n"); + } + if (supported & SDL_HAPTIC_LEFTRIGHT) { + SDL_Log(" left/right\n"); + } + SDL_Log(" Supported capabilities:\n"); + if (supported & SDL_HAPTIC_GAIN) { + SDL_Log(" gain\n"); + } + if (supported & SDL_HAPTIC_AUTOCENTER) { + SDL_Log(" autocenter\n"); + } + if (supported & SDL_HAPTIC_STATUS) { + SDL_Log(" status\n"); + } +} diff --git a/vendor/sdl-3.0.0/test/testhittesting.c b/vendor/sdl-3.0.0/test/testhittesting.c new file mode 100644 index 0000000..955bef0 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testhittesting.c @@ -0,0 +1,166 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +#include +#include +#include + +#define RESIZE_BORDER 20 + +static const SDL_Rect drag_areas[] = { + { 20, 20, 100, 100 }, + { 200, 70, 100, 100 }, + { 400, 90, 100, 100 } +}; +static const SDL_FRect render_areas[] = { + { 20.0f, 20.0f, 100.0f, 100.0f }, + { 200.0f, 70.0f, 100.0f, 100.0f }, + { 400.0f, 90.0f, 100.0f, 100.0f } +}; + +static const SDL_Rect *areas = drag_areas; +static int numareas = SDL_arraysize(drag_areas); + +static SDL_HitTestResult SDLCALL +hitTest(SDL_Window *window, const SDL_Point *pt, void *data) +{ + int i; + int w, h; + + for (i = 0; i < numareas; i++) { + if (SDL_PointInRect(pt, &areas[i])) { + SDL_Log("HIT-TEST: DRAGGABLE\n"); + return SDL_HITTEST_DRAGGABLE; + } + } + + SDL_GetWindowSize(window, &w, &h); + +#define REPORT_RESIZE_HIT(name) \ + { \ + SDL_Log("HIT-TEST: RESIZE_" #name "\n"); \ + return SDL_HITTEST_RESIZE_##name; \ + } + + if (pt->x < RESIZE_BORDER && pt->y < RESIZE_BORDER) { + REPORT_RESIZE_HIT(TOPLEFT); + } else if (pt->x > RESIZE_BORDER && pt->x < w - RESIZE_BORDER && pt->y < RESIZE_BORDER) { + REPORT_RESIZE_HIT(TOP); + } else if (pt->x > w - RESIZE_BORDER && pt->y < RESIZE_BORDER) { + REPORT_RESIZE_HIT(TOPRIGHT); + } else if (pt->x > w - RESIZE_BORDER && pt->y > RESIZE_BORDER && pt->y < h - RESIZE_BORDER) { + REPORT_RESIZE_HIT(RIGHT); + } else if (pt->x > w - RESIZE_BORDER && pt->y > h - RESIZE_BORDER) { + REPORT_RESIZE_HIT(BOTTOMRIGHT); + } else if (pt->x < w - RESIZE_BORDER && pt->x > RESIZE_BORDER && pt->y > h - RESIZE_BORDER) { + REPORT_RESIZE_HIT(BOTTOM); + } else if (pt->x < RESIZE_BORDER && pt->y > h - RESIZE_BORDER) { + REPORT_RESIZE_HIT(BOTTOMLEFT); + } else if (pt->x < RESIZE_BORDER && pt->y < h - RESIZE_BORDER && pt->y > RESIZE_BORDER) { + REPORT_RESIZE_HIT(LEFT); + } + + SDL_Log("HIT-TEST: NORMAL\n"); + return SDL_HITTEST_NORMAL; +} + +int main(int argc, char **argv) +{ + int i; + int done = 0; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + state->window_flags = SDL_WINDOW_BORDERLESS | SDL_WINDOW_RESIZABLE; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (!SDLTest_CommonInit(state)) { + return 2; + } + + for (i = 0; i < state->num_windows; i++) { + if (SDL_SetWindowHitTest(state->windows[i], hitTest, NULL) == -1) { + SDL_Log("Enabling hit-testing failed for window %d: %s", i, SDL_GetError()); + SDL_Quit(); + return 1; + } + } + + while (!done) { + SDL_Event e; + int nothing_to_do = 1; + + for (i = 0; i < state->num_windows; ++i) { + SDL_SetRenderDrawColor(state->renderers[i], 0, 0, 127, 255); + SDL_RenderClear(state->renderers[i]); + SDL_SetRenderDrawColor(state->renderers[i], 255, 0, 0, 255); + SDLTest_DrawString(state->renderers[i], (float)state->window_w / 2 - 80.0f, 10.0f, "Drag the red boxes"); + SDL_RenderFillRects(state->renderers[i], render_areas, SDL_arraysize(render_areas)); + SDL_RenderPresent(state->renderers[i]); + } + + while (SDL_PollEvent(&e)) { + SDLTest_CommonEvent(state, &e, &done); + nothing_to_do = 0; + + switch (e.type) { + case SDL_EVENT_MOUSE_BUTTON_DOWN: + SDL_Log("button down!\n"); + break; + + case SDL_EVENT_MOUSE_BUTTON_UP: + SDL_Log("button up!\n"); + break; + + case SDL_EVENT_WINDOW_MOVED: + SDL_Log("Window event moved to (%d, %d)!\n", (int)e.window.data1, (int)e.window.data2); + break; + + case SDL_EVENT_KEY_DOWN: + if (e.key.keysym.sym == SDLK_ESCAPE) { + done = 1; + } else if (e.key.keysym.sym == SDLK_x) { + if (areas == NULL) { + areas = drag_areas; + numareas = SDL_arraysize(drag_areas); + } else { + areas = NULL; + numareas = 0; + } + } + break; + + case SDL_EVENT_QUIT: + done = 1; + break; + } + } + + if (nothing_to_do) { + SDL_Delay(50); + } + } + + SDLTest_CommonQuit(state); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testhotplug.c b/vendor/sdl-3.0.0/test/testhotplug.c new file mode 100644 index 0000000..24ec6f4 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testhotplug.c @@ -0,0 +1,163 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Simple program to test the SDL joystick hotplugging */ + +#include + +#include +#include +#include + +int main(int argc, char *argv[]) +{ + int num_joysticks = 0; + SDL_Joystick *joystick = NULL; + SDL_Haptic *haptic = NULL; + SDL_JoystickID instance = 0; + SDL_bool keepGoing = SDL_TRUE; + int i; + SDL_bool enable_haptic = SDL_TRUE; + Uint32 init_subsystems = SDL_INIT_VIDEO | SDL_INIT_JOYSTICK; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (SDL_strcasecmp(argv[i], "--nohaptic") == 0) { + enable_haptic = SDL_FALSE; + consumed = 1; + } + } + if (consumed <= 0) { + static const char *options[] = { "[--nohaptic]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + exit(1); + } + + i += consumed; + } + + if (enable_haptic) { + init_subsystems |= SDL_INIT_HAPTIC; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1"); + + /* Initialize SDL (Note: video is required to start event loop) */ + if (SDL_Init(init_subsystems) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + exit(1); + } + + /* + //SDL_CreateWindow("Dummy", 128, 128, 0); + */ + + SDL_free(SDL_GetJoysticks(&num_joysticks)); + SDL_Log("There are %d joysticks at startup\n", num_joysticks); + if (enable_haptic) { + SDL_Log("There are %d haptic devices at startup\n", SDL_NumHaptics()); + } + + while (keepGoing) { + SDL_Event event; + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_EVENT_QUIT: + keepGoing = SDL_FALSE; + break; + case SDL_EVENT_JOYSTICK_ADDED: + if (joystick != NULL) { + SDL_Log("Only one joystick supported by this test\n"); + } else { + joystick = SDL_OpenJoystick(event.jdevice.which); + instance = event.jdevice.which; + SDL_Log("Joy Added : %" SDL_PRIu32 " : %s\n", event.jdevice.which, SDL_GetJoystickName(joystick)); + if (enable_haptic) { + if (SDL_JoystickIsHaptic(joystick)) { + haptic = SDL_HapticOpenFromJoystick(joystick); + if (haptic) { + SDL_Log("Joy Haptic Opened\n"); + if (SDL_HapticRumbleInit(haptic) != 0) { + SDL_Log("Could not init Rumble!: %s\n", SDL_GetError()); + SDL_HapticClose(haptic); + haptic = NULL; + } + } else { + SDL_Log("Joy haptic open FAILED!: %s\n", SDL_GetError()); + } + } else { + SDL_Log("No haptic found\n"); + } + } + } + break; + case SDL_EVENT_JOYSTICK_REMOVED: + if (instance == event.jdevice.which) { + SDL_Log("Joy Removed: %" SDL_PRIs32 "\n", event.jdevice.which); + instance = 0; + if (enable_haptic && haptic) { + SDL_HapticClose(haptic); + haptic = NULL; + } + SDL_CloseJoystick(joystick); + joystick = NULL; + } else { + SDL_Log("Unknown joystick disconnected\n"); + } + break; + case SDL_EVENT_JOYSTICK_AXIS_MOTION: + /* + // SDL_Log("Axis Move: %d\n", event.jaxis.axis); + */ + if (enable_haptic) { + SDL_HapticRumblePlay(haptic, 0.25, 250); + } + break; + case SDL_EVENT_JOYSTICK_BUTTON_DOWN: + SDL_Log("Button Press: %d\n", event.jbutton.button); + if (enable_haptic && haptic) { + SDL_HapticRumblePlay(haptic, 0.25, 250); + } + if (event.jbutton.button == 0) { + SDL_Log("Exiting due to button press of button 0\n"); + keepGoing = SDL_FALSE; + } + break; + case SDL_EVENT_JOYSTICK_BUTTON_UP: + SDL_Log("Button Release: %d\n", event.jbutton.button); + break; + } + } + } + + SDL_Quit(); + SDLTest_CommonDestroyState(state); + + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testiconv.c b/vendor/sdl-3.0.0/test/testiconv.c new file mode 100644 index 0000000..daabe27 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testiconv.c @@ -0,0 +1,126 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* quiet windows compiler warnings */ +#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include + +#include +#include +#include +#include "testutils.h" + +static size_t +widelen(char *data) +{ + size_t len = 0; + Uint32 *p = (Uint32 *)data; + while (*p++) { + ++len; + } + return len; +} + +int main(int argc, char *argv[]) +{ + const char *formats[] = { + "UTF8", + "UTF-8", + "UTF16BE", + "UTF-16BE", + "UTF16LE", + "UTF-16LE", + "UTF32BE", + "UTF-32BE", + "UTF32LE", + "UTF-32LE", + "UCS4", + "UCS-4", + }; + + char *fname = NULL; + char buffer[BUFSIZ]; + char *ucs4; + char *test[2]; + int i; + FILE *file; + int errors = 0; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (!fname) { + fname = argv[i]; + consumed = 1; + } + } + if (consumed <= 0) { + static const char *options[] = { "[utf8.txt]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + return 1; + } + + i += consumed; + } + + fname = GetResourceFilename(fname, "utf8.txt"); + file = fopen(fname, "rb"); + if (file == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to open %s\n", fname); + return 1; + } + SDL_free(fname); + + while (fgets(buffer, sizeof(buffer), file)) { + /* Convert to UCS-4 */ + size_t len; + ucs4 = + SDL_iconv_string("UCS-4", "UTF-8", buffer, + SDL_strlen(buffer) + 1); + len = (widelen(ucs4) + 1) * 4; + for (i = 0; i < SDL_arraysize(formats); ++i) { + test[0] = SDL_iconv_string(formats[i], "UCS-4", ucs4, len); + test[1] = SDL_iconv_string("UCS-4", formats[i], test[0], len); + if (!test[1] || SDL_memcmp(test[1], ucs4, len) != 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "FAIL: %s\n", formats[i]); + ++errors; + } + SDL_free(test[0]); + SDL_free(test[1]); + } + test[0] = SDL_iconv_string("UTF-8", "UCS-4", ucs4, len); + SDL_free(ucs4); + (void)fputs(test[0], stdout); + SDL_free(test[0]); + } + (void)fclose(file); + + SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Total errors: %d\n", errors); + SDLTest_CommonDestroyState(state); + return errors ? errors + 1 : 0; +} diff --git a/vendor/sdl-3.0.0/test/testime.c b/vendor/sdl-3.0.0/test/testime.c new file mode 100644 index 0000000..84d3aec --- /dev/null +++ b/vendor/sdl-3.0.0/test/testime.c @@ -0,0 +1,790 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +/* A simple program to test the Input Method support in the SDL library (2.0+) + If you build without SDL_ttf, you can use the GNU Unifont hex file instead. + Download at http://unifoundry.com/unifont.html */ + +#include +#include +#ifdef HAVE_SDL_TTF +#include "SDL_ttf.h" +#endif + +#include +#include "testutils.h" + +#ifdef HAVE_SDL_TTF +#define DEFAULT_PTSIZE 30 +#endif + +#ifdef HAVE_SDL_TTF +#ifdef __MACOS__ +#define DEFAULT_FONT "/System/Library/Fonts/华文细黑.ttf" +#elif defined(__WIN32__) +/* Some japanese font present on at least Windows 8.1. */ +#define DEFAULT_FONT "C:\\Windows\\Fonts\\yugothic.ttf" +#else +#define DEFAULT_FONT "NoDefaultFont.ttf" +#endif +#else +#define DEFAULT_FONT "unifont-13.0.06.hex" +#endif +#define MAX_TEXT_LENGTH 256 + +static SDLTest_CommonState *state; +static SDL_FRect textRect, markedRect; +static SDL_Color lineColor = { 0, 0, 0, 255 }; +static SDL_Color backColor = { 255, 255, 255, 255 }; +static SDL_Color textColor = { 0, 0, 0, 255 }; +static char text[MAX_TEXT_LENGTH], markedText[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; +static int cursor = 0; +#ifdef HAVE_SDL_TTF +static TTF_Font *font; +#else +#define UNIFONT_MAX_CODEPOINT 0x1ffff +#define UNIFONT_NUM_GLYPHS 0x20000 +/* Using 512x512 textures that are supported everywhere. */ +#define UNIFONT_TEXTURE_WIDTH 512 +#define UNIFONT_GLYPHS_IN_ROW (UNIFONT_TEXTURE_WIDTH / 16) +#define UNIFONT_GLYPHS_IN_TEXTURE (UNIFONT_GLYPHS_IN_ROW * UNIFONT_GLYPHS_IN_ROW) +#define UNIFONT_NUM_TEXTURES ((UNIFONT_NUM_GLYPHS + UNIFONT_GLYPHS_IN_TEXTURE - 1) / UNIFONT_GLYPHS_IN_TEXTURE) +#define UNIFONT_TEXTURE_SIZE (UNIFONT_TEXTURE_WIDTH * UNIFONT_TEXTURE_WIDTH * 4) +#define UNIFONT_TEXTURE_PITCH (UNIFONT_TEXTURE_WIDTH * 4) +#define UNIFONT_DRAW_SCALE 2 +static struct UnifontGlyph +{ + Uint8 width; + Uint8 data[32]; +} * unifontGlyph; +static SDL_Texture **unifontTexture; +static Uint8 unifontTextureLoaded[UNIFONT_NUM_TEXTURES] = { 0 }; + +/* Unifont loading code start */ + +static Uint8 dehex(char c) +{ + if (c >= '0' && c <= '9') { + return c - '0'; + } else if (c >= 'a' && c <= 'f') { + return c - 'a' + 10; + } else if (c >= 'A' && c <= 'F') { + return c - 'A' + 10; + } + return 255; +} + +static Uint8 dehex2(char c1, char c2) +{ + return (dehex(c1) << 4) | dehex(c2); +} + +static Uint8 validate_hex(const char *cp, size_t len, Uint32 *np) +{ + Uint32 n = 0; + for (; len > 0; cp++, len--) { + Uint8 c = dehex(*cp); + if (c == 255) { + return 0; + } + n = (n << 4) | c; + } + if (np != NULL) { + *np = n; + } + return 1; +} + +static int unifont_init(const char *fontname) +{ + Uint8 hexBuffer[65]; + Uint32 numGlyphs = 0; + int lineNumber = 1; + size_t bytesRead; + SDL_RWops *hexFile; + const size_t unifontGlyphSize = UNIFONT_NUM_GLYPHS * sizeof(struct UnifontGlyph); + const size_t unifontTextureSize = UNIFONT_NUM_TEXTURES * state->num_windows * sizeof(void *); + char *filename; + + /* Allocate memory for the glyph data so the file can be closed after initialization. */ + unifontGlyph = (struct UnifontGlyph *)SDL_malloc(unifontGlyphSize); + if (unifontGlyph == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "unifont: Failed to allocate %d KiB for glyph data.\n", (int)(unifontGlyphSize + 1023) / 1024); + return -1; + } + SDL_memset(unifontGlyph, 0, unifontGlyphSize); + + /* Allocate memory for texture pointers for all renderers. */ + unifontTexture = (SDL_Texture **)SDL_malloc(unifontTextureSize); + if (unifontTexture == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "unifont: Failed to allocate %d KiB for texture pointer data.\n", (int)(unifontTextureSize + 1023) / 1024); + return -1; + } + SDL_memset(unifontTexture, 0, unifontTextureSize); + + filename = GetResourceFilename(NULL, fontname); + if (filename == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory\n"); + return -1; + } + hexFile = SDL_RWFromFile(filename, "rb"); + SDL_free(filename); + if (hexFile == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "unifont: Failed to open font file: %s\n", fontname); + return -1; + } + + /* Read all the glyph data into memory to make it accessible later when textures are created. */ + do { + int i, codepointHexSize; + size_t bytesOverread; + Uint8 glyphWidth; + Uint32 codepoint; + + bytesRead = SDL_RWread(hexFile, hexBuffer, 9); + if (numGlyphs > 0 && bytesRead == 0) { + break; /* EOF */ + } + if ((numGlyphs == 0 && bytesRead == 0) || (numGlyphs > 0 && bytesRead < 9)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "unifont: Unexpected end of hex file.\n"); + return -1; + } + + /* Looking for the colon that separates the codepoint and glyph data at position 2, 4, 6 and 8. */ + if (hexBuffer[2] == ':') { + codepointHexSize = 2; + } else if (hexBuffer[4] == ':') { + codepointHexSize = 4; + } else if (hexBuffer[6] == ':') { + codepointHexSize = 6; + } else if (hexBuffer[8] == ':') { + codepointHexSize = 8; + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "unifont: Could not find codepoint and glyph data separator symbol in hex file on line %d.\n", lineNumber); + return -1; + } + + if (!validate_hex((const char *)hexBuffer, codepointHexSize, &codepoint)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "unifont: Malformed hexadecimal number in hex file on line %d.\n", lineNumber); + return -1; + } + if (codepoint > UNIFONT_MAX_CODEPOINT) { + SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION, "unifont: Codepoint on line %d exceeded limit of 0x%x.\n", lineNumber, UNIFONT_MAX_CODEPOINT); + } + + /* If there was glyph data read in the last file read, move it to the front of the buffer. */ + bytesOverread = 8 - codepointHexSize; + if (codepointHexSize < 8) { + SDL_memmove(hexBuffer, hexBuffer + codepointHexSize + 1, bytesOverread); + } + bytesRead = SDL_RWread(hexFile, hexBuffer + bytesOverread, 33 - bytesOverread); + if (bytesRead < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "error SDL_RWread\n"); + return -1; + } + + if (bytesRead < (33 - bytesOverread)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "unifont: Unexpected end of hex file.\n"); + return -1; + } + if (hexBuffer[32] == '\n') { + glyphWidth = 8; + } else { + glyphWidth = 16; + bytesRead = SDL_RWread(hexFile, hexBuffer + 33, 32); + if (bytesRead < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "error SDL_RWread\n"); + return -1; + } + + if (bytesRead < 32) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "unifont: Unexpected end of hex file.\n"); + return -1; + } + } + + if (!validate_hex((const char *)hexBuffer, glyphWidth * 4, NULL)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "unifont: Malformed hexadecimal glyph data in hex file on line %d.\n", lineNumber); + return -1; + } + + if (codepoint <= UNIFONT_MAX_CODEPOINT) { + if (unifontGlyph[codepoint].width > 0) { + SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION, "unifont: Ignoring duplicate codepoint 0x%08" SDL_PRIx32 " in hex file on line %d.\n", codepoint, lineNumber); + } else { + unifontGlyph[codepoint].width = glyphWidth; + /* Pack the hex data into a more compact form. */ + for (i = 0; i < glyphWidth * 2; i++) { + unifontGlyph[codepoint].data[i] = dehex2(hexBuffer[i * 2], hexBuffer[i * 2 + 1]); + } + numGlyphs++; + } + } + + lineNumber++; + } while (bytesRead > 0); + + SDL_RWclose(hexFile); + SDL_Log("unifont: Loaded %" SDL_PRIu32 " glyphs.\n", numGlyphs); + return 0; +} + +static void +unifont_make_rgba(const Uint8 *src, Uint8 *dst, Uint8 width) +{ + int i, j; + Uint8 *row = dst; + + for (i = 0; i < width * 2; i++) { + Uint8 data = src[i]; + for (j = 0; j < 8; j++) { + if (data & 0x80) { + row[0] = textColor.r; + row[1] = textColor.g; + row[2] = textColor.b; + row[3] = textColor.a; + } else { + row[0] = 0; + row[1] = 0; + row[2] = 0; + row[3] = 0; + } + data <<= 1; + row += 4; + } + + if (width == 8 || (width == 16 && i % 2 == 1)) { + dst += UNIFONT_TEXTURE_PITCH; + row = dst; + } + } +} + +static int unifont_load_texture(Uint32 textureID) +{ + int i; + Uint8 *textureRGBA; + + if (textureID >= UNIFONT_NUM_TEXTURES) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "unifont: Tried to load out of range texture %" SDL_PRIu32 "\n", textureID); + return -1; + } + + textureRGBA = (Uint8 *)SDL_malloc(UNIFONT_TEXTURE_SIZE); + if (textureRGBA == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "unifont: Failed to allocate %d MiB for a texture.\n", UNIFONT_TEXTURE_SIZE / 1024 / 1024); + return -1; + } + SDL_memset(textureRGBA, 0, UNIFONT_TEXTURE_SIZE); + + /* Copy the glyphs into memory in RGBA format. */ + for (i = 0; i < UNIFONT_GLYPHS_IN_TEXTURE; i++) { + Uint32 codepoint = UNIFONT_GLYPHS_IN_TEXTURE * textureID + i; + if (unifontGlyph[codepoint].width > 0) { + const Uint32 cInTex = codepoint % UNIFONT_GLYPHS_IN_TEXTURE; + const size_t offset = ((size_t)cInTex / UNIFONT_GLYPHS_IN_ROW) * UNIFONT_TEXTURE_PITCH * 16 + (cInTex % UNIFONT_GLYPHS_IN_ROW) * 16 * 4; + unifont_make_rgba(unifontGlyph[codepoint].data, textureRGBA + offset, unifontGlyph[codepoint].width); + } + } + + /* Create textures and upload the RGBA data from above. */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_Texture *tex = unifontTexture[UNIFONT_NUM_TEXTURES * i + textureID]; + if (state->windows[i] == NULL || renderer == NULL || tex != NULL) { + continue; + } + tex = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, UNIFONT_TEXTURE_WIDTH, UNIFONT_TEXTURE_WIDTH); + if (tex == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "unifont: Failed to create texture %" SDL_PRIu32 " for renderer %d.\n", textureID, i); + return -1; + } + unifontTexture[UNIFONT_NUM_TEXTURES * i + textureID] = tex; + SDL_SetTextureBlendMode(tex, SDL_BLENDMODE_BLEND); + if (SDL_UpdateTexture(tex, NULL, textureRGBA, UNIFONT_TEXTURE_PITCH) != 0) { + SDL_Log("unifont error: Failed to update texture %" SDL_PRIu32 " data for renderer %d.\n", textureID, i); + } + } + + SDL_free(textureRGBA); + unifontTextureLoaded[textureID] = 1; + return 0; +} + +static Sint32 unifont_draw_glyph(Uint32 codepoint, int rendererID, SDL_FRect *dst) +{ + SDL_Texture *texture; + const Uint32 textureID = codepoint / UNIFONT_GLYPHS_IN_TEXTURE; + SDL_FRect srcrect; + srcrect.w = srcrect.h = 16.0f; + if (codepoint > UNIFONT_MAX_CODEPOINT) { + return 0; + } + if (!unifontTextureLoaded[textureID]) { + if (unifont_load_texture(textureID) < 0) { + return 0; + } + } + texture = unifontTexture[UNIFONT_NUM_TEXTURES * rendererID + textureID]; + if (texture != NULL) { + const Uint32 cInTex = codepoint % UNIFONT_GLYPHS_IN_TEXTURE; + srcrect.x = (float)(cInTex % UNIFONT_GLYPHS_IN_ROW * 16); + srcrect.y = (float)(cInTex / UNIFONT_GLYPHS_IN_ROW * 16); + SDL_RenderTexture(state->renderers[rendererID], texture, &srcrect, dst); + } + return unifontGlyph[codepoint].width; +} + +static void unifont_cleanup(void) +{ + int i, j; + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + if (state->windows[i] == NULL || renderer == NULL) { + continue; + } + for (j = 0; j < UNIFONT_NUM_TEXTURES; j++) { + SDL_Texture *tex = unifontTexture[UNIFONT_NUM_TEXTURES * i + j]; + if (tex != NULL) { + SDL_DestroyTexture(tex); + } + } + } + + for (j = 0; j < UNIFONT_NUM_TEXTURES; j++) { + unifontTextureLoaded[j] = 0; + } + + SDL_free(unifontTexture); + SDL_free(unifontGlyph); +} + +/* Unifont code end */ +#endif + +static size_t utf8_length(unsigned char c) +{ + c = (unsigned char)(0xff & c); + if (c < 0x80) { + return 1; + } else if ((c >> 5) == 0x6) { + return 2; + } else if ((c >> 4) == 0xe) { + return 3; + } else if ((c >> 3) == 0x1e) { + return 4; + } + return 0; +} + +#ifdef HAVE_SDL_TTF +static char *utf8_next(char *p) +{ + size_t len = utf8_length(*p); + size_t i = 0; + if (!len) { + return 0; + } + + for (; i < len; ++i) { + ++p; + if (!*p) { + return 0; + } + } + return p; +} + + +static char *utf8_advance(char *p, size_t distance) +{ + size_t i = 0; + for (; i < distance && p; ++i) { + p = utf8_next(p); + } + return p; +} +#endif + +static Uint32 utf8_decode(char *p, size_t len) +{ + Uint32 codepoint = 0; + size_t i = 0; + if (!len) { + return 0; + } + + for (; i < len; ++i) { + if (i == 0) { + codepoint = (0xff >> len) & *p; + } else { + codepoint <<= 6; + codepoint |= 0x3f & *p; + } + if (!*p) { + return 0; + } + p++; + } + + return codepoint; +} + +static void InitInput(void) +{ + /* Prepare a rect for text input */ + textRect.x = textRect.y = 100.0f; + textRect.w = DEFAULT_WINDOW_WIDTH - 2 * textRect.x; + textRect.h = 50.0f; + + text[0] = 0; + markedRect = textRect; + markedText[0] = 0; + + SDL_StartTextInput(); +} + +static void CleanupVideo(void) +{ + SDL_StopTextInput(); +#ifdef HAVE_SDL_TTF + TTF_CloseFont(font); + TTF_Quit(); +#else + unifont_cleanup(); +#endif +} + +static void _Redraw(int rendererID) +{ + SDL_Renderer *renderer = state->renderers[rendererID]; + SDL_FRect drawnTextRect, cursorRect, underlineRect; + drawnTextRect.x = textRect.x; + drawnTextRect.w = 0; + + SDL_SetRenderDrawColor(renderer, backColor.r, backColor.g, backColor.b, backColor.a); + SDL_RenderFillRect(renderer, &textRect); + + if (*text) { +#ifdef HAVE_SDL_TTF + SDL_Surface *textSur = TTF_RenderUTF8_Blended(font, text, textColor); + SDL_Texture *texture; + + /* Vertically center text */ + drawnTextRect.y = textRect.y + (textRect.h - textSur->h) / 2; + drawnTextRect.w = textSur->w; + drawnTextRect.h = textSur->h; + + texture = SDL_CreateTextureFromSurface(renderer, textSur); + SDL_DestroySurface(textSur); + + SDL_RenderTexture(renderer, texture, NULL, &drawnTextRect); + SDL_DestroyTexture(texture); +#else + char *utext = text; + Uint32 codepoint; + size_t len; + SDL_FRect dstrect; + + dstrect.x = textRect.x; + dstrect.y = textRect.y + (textRect.h - 16 * UNIFONT_DRAW_SCALE) / 2; + dstrect.w = 16 * UNIFONT_DRAW_SCALE; + dstrect.h = 16 * UNIFONT_DRAW_SCALE; + drawnTextRect.y = dstrect.y; + drawnTextRect.h = dstrect.h; + + while ((codepoint = utf8_decode(utext, len = utf8_length(*utext)))) { + Sint32 advance = unifont_draw_glyph(codepoint, rendererID, &dstrect) * UNIFONT_DRAW_SCALE; + dstrect.x += advance; + drawnTextRect.w += advance; + utext += len; + } +#endif + } + + markedRect.x = textRect.x + drawnTextRect.w; + markedRect.w = textRect.w - drawnTextRect.w; + if (markedRect.w < 0) { + /* Stop text input because we cannot hold any more characters */ + SDL_StopTextInput(); + return; + } else { + SDL_StartTextInput(); + } + + cursorRect = drawnTextRect; + cursorRect.x += cursorRect.w; + cursorRect.w = 2; + cursorRect.h = drawnTextRect.h; + + drawnTextRect.x += drawnTextRect.w; + drawnTextRect.w = 0; + + SDL_SetRenderDrawColor(renderer, backColor.r, backColor.g, backColor.b, backColor.a); + SDL_RenderFillRect(renderer, &markedRect); + + if (markedText[0]) { +#ifdef HAVE_SDL_TTF + SDL_Surface *textSur; + SDL_Texture *texture; + if (cursor) { + char *p = utf8_advance(markedText, cursor); + char c = 0; + if (p == NULL) { + p = &markedText[SDL_strlen(markedText)]; + } + + c = *p; + *p = 0; + TTF_SizeUTF8(font, markedText, &drawnTextRect.w, NULL); + cursorRect.x += drawnTextRect.w; + *p = c; + } + textSur = TTF_RenderUTF8_Blended(font, markedText, textColor); + /* Vertically center text */ + drawnTextRect.y = textRect.y + (textRect.h - textSur->h) / 2; + drawnTextRect.w = textSur->w; + drawnTextRect.h = textSur->h; + + texture = SDL_CreateTextureFromSurface(renderer, textSur); + SDL_DestroySurface(textSur); + + SDL_RenderTexture(renderer, texture, NULL, &drawnTextRect); + SDL_DestroyTexture(texture); +#else + int i = 0; + char *utext = markedText; + Uint32 codepoint; + size_t len; + SDL_FRect dstrect; + + dstrect.x = drawnTextRect.x; + dstrect.y = textRect.y + (textRect.h - 16 * UNIFONT_DRAW_SCALE) / 2; + dstrect.w = 16 * UNIFONT_DRAW_SCALE; + dstrect.h = 16 * UNIFONT_DRAW_SCALE; + drawnTextRect.y = dstrect.y; + drawnTextRect.h = dstrect.h; + + while ((codepoint = utf8_decode(utext, len = utf8_length(*utext)))) { + Sint32 advance = unifont_draw_glyph(codepoint, rendererID, &dstrect) * UNIFONT_DRAW_SCALE; + dstrect.x += advance; + drawnTextRect.w += advance; + if (i < cursor) { + cursorRect.x += advance; + } + i++; + utext += len; + } +#endif + + if (cursor > 0) { + cursorRect.y = drawnTextRect.y; + cursorRect.h = drawnTextRect.h; + } + + underlineRect = markedRect; + underlineRect.y = drawnTextRect.y + drawnTextRect.h - 2; + underlineRect.h = 2; + underlineRect.w = drawnTextRect.w; + + SDL_SetRenderDrawColor(renderer, lineColor.r, lineColor.g, lineColor.b, lineColor.a); + SDL_RenderFillRect(renderer, &underlineRect); + } + + SDL_SetRenderDrawColor(renderer, lineColor.r, lineColor.g, lineColor.b, lineColor.a); + SDL_RenderFillRect(renderer, &cursorRect); + + { + SDL_Rect inputrect; + + inputrect.x = (int)markedRect.x; + inputrect.y = (int)markedRect.y; + inputrect.w = (int)markedRect.w; + inputrect.h = (int)markedRect.h; + SDL_SetTextInputRect(&inputrect); + } +} + +static void Redraw(void) +{ + int i; + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + if (state->windows[i] == NULL) { + continue; + } + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); + SDL_RenderClear(renderer); + + /* Sending in the window id to let the font renderers know which one we're working with. */ + _Redraw(i); + + SDL_RenderPresent(renderer); + } +} + +int main(int argc, char *argv[]) +{ + int i, done; + SDL_Event event; + char *fontname = NULL; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (SDL_strcmp(argv[i], "--font") == 0) { + if (*argv[i+1]) { + fontname = argv[i+1]; + consumed = 2; + } + } + if (consumed <= 0) { + static const char *options[] = { "[--font fontfile]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + return 1; + } + + i += consumed; + } + + if (!SDLTest_CommonInit(state)) { + return 2; + } + + fontname = GetResourceFilename(fontname, DEFAULT_FONT); + +#ifdef HAVE_SDL_TTF + /* Initialize fonts */ + TTF_Init(); + + font = TTF_OpenFont(fontname, DEFAULT_PTSIZE); + if (font == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to find font: %s\n", TTF_GetError()); + return -1; + } +#else + if (unifont_init(fontname) < 0) { + return -1; + } +#endif + + SDL_Log("Using font: %s\n", fontname); + + InitInput(); + /* Create the windows and initialize the renderers */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE); + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + Redraw(); + /* Main render loop */ + done = 0; + while (!done) { + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + switch (event.type) { + case SDL_EVENT_KEY_DOWN: + switch (event.key.keysym.sym) { + case SDLK_RETURN: + text[0] = 0x00; + Redraw(); + break; + case SDLK_BACKSPACE: + /* Only delete text if not in editing mode. */ + if (!markedText[0]) { + size_t textlen = SDL_strlen(text); + + do { + if (textlen == 0) { + break; + } + if (!(text[textlen - 1] & 0x80)) { + /* One byte */ + text[textlen - 1] = 0x00; + break; + } + if ((text[textlen - 1] & 0xC0) == 0x80) { + /* Byte from the multibyte sequence */ + text[textlen - 1] = 0x00; + textlen--; + } + if ((text[textlen - 1] & 0xC0) == 0xC0) { + /* First byte of multibyte sequence */ + text[textlen - 1] = 0x00; + break; + } + } while (1); + + Redraw(); + } + break; + } + + if (done) { + break; + } + + SDL_Log("Keyboard: scancode 0x%08X = %s, keycode 0x%08" SDL_PRIX32 " = %s\n", + event.key.keysym.scancode, + SDL_GetScancodeName(event.key.keysym.scancode), + SDL_static_cast(Uint32, event.key.keysym.sym), + SDL_GetKeyName(event.key.keysym.sym)); + break; + + case SDL_EVENT_TEXT_INPUT: + if (event.text.text[0] == '\0' || event.text.text[0] == '\n' || markedRect.w < 0) { + break; + } + + SDL_Log("Keyboard: text input \"%s\"\n", event.text.text); + + if (SDL_strlen(text) + SDL_strlen(event.text.text) < sizeof(text)) { + SDL_strlcat(text, event.text.text, sizeof(text)); + } + + SDL_Log("text inputted: %s\n", text); + + /* After text inputted, we can clear up markedText because it */ + /* is committed */ + markedText[0] = 0; + Redraw(); + break; + + case SDL_EVENT_TEXT_EDITING: + SDL_Log("text editing \"%s\", selected range (%" SDL_PRIs32 ", %" SDL_PRIs32 ")\n", + event.edit.text, event.edit.start, event.edit.length); + + SDL_strlcpy(markedText, event.edit.text, SDL_TEXTEDITINGEVENT_TEXT_SIZE); + cursor = event.edit.start; + Redraw(); + break; + } + } + } + SDL_free(fontname); + CleanupVideo(); + SDLTest_CommonQuit(state); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testintersections.c b/vendor/sdl-3.0.0/test/testintersections.c new file mode 100644 index 0000000..41b20ec --- /dev/null +++ b/vendor/sdl-3.0.0/test/testintersections.c @@ -0,0 +1,390 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Simple program: draw as many random objects on the screen as possible */ + +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include + +#define SWAP(typ, a, b) \ + do { \ + typ t = a; \ + a = b; \ + b = t; \ + } while (0) +#define NUM_OBJECTS 100 + +static SDLTest_CommonState *state; +static int num_objects; +static SDL_bool cycle_color; +static SDL_bool cycle_alpha; +static int cycle_direction = 1; +static int current_alpha = 255; +static int current_color = 255; +static SDL_BlendMode blendMode = SDL_BLENDMODE_NONE; + +static float mouse_begin_x = -1.0f, mouse_begin_y = -1.0f; + +static void DrawPoints(SDL_Renderer *renderer) +{ + int i; + float x, y; + SDL_Rect viewport; + + /* Query the sizes */ + SDL_GetRenderViewport(renderer, &viewport); + + for (i = 0; i < num_objects * 4; ++i) { + /* Cycle the color and alpha, if desired */ + if (cycle_color) { + current_color += cycle_direction; + if (current_color < 0) { + current_color = 0; + cycle_direction = -cycle_direction; + } + if (current_color > 255) { + current_color = 255; + cycle_direction = -cycle_direction; + } + } + if (cycle_alpha) { + current_alpha += cycle_direction; + if (current_alpha < 0) { + current_alpha = 0; + cycle_direction = -cycle_direction; + } + if (current_alpha > 255) { + current_alpha = 255; + cycle_direction = -cycle_direction; + } + } + SDL_SetRenderDrawColor(renderer, 255, (Uint8)current_color, + (Uint8)current_color, (Uint8)current_alpha); + + x = (float)(rand() % viewport.w); + y = (float)(rand() % viewport.h); + SDL_RenderPoint(renderer, x, y); + } +} + +#define MAX_LINES 16 +static int num_lines = 0; +static SDL_FRect lines[MAX_LINES]; +static int add_line(float x1, float y1, float x2, float y2) +{ + if (num_lines >= MAX_LINES) { + return 0; + } + if ((x1 == x2) && (y1 == y2)) { + return 0; + } + + SDL_Log("adding line (%g, %g), (%g, %g)\n", x1, y1, x2, y2); + lines[num_lines].x = x1; + lines[num_lines].y = y1; + lines[num_lines].w = x2; + lines[num_lines].h = y2; + + return ++num_lines; +} + +static void DrawLines(SDL_Renderer *renderer) +{ + int i; + SDL_Rect viewport; + + /* Query the sizes */ + SDL_GetRenderViewport(renderer, &viewport); + + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + + for (i = 0; i < num_lines; ++i) { + if (i == -1) { + SDL_RenderLine(renderer, 0.0f, 0.0f, (float)(viewport.w - 1), (float)(viewport.h - 1)); + SDL_RenderLine(renderer, 0.0f, (float)(viewport.h - 1), (float)(viewport.w - 1), 0.0f); + SDL_RenderLine(renderer, 0.0f, (float)(viewport.h / 2), (float)(viewport.w - 1), (float)(viewport.h / 2)); + SDL_RenderLine(renderer, (float)(viewport.w / 2), 0.0f, (float)(viewport.w / 2), (float)(viewport.h - 1)); + } else { + SDL_RenderLine(renderer, lines[i].x, lines[i].y, lines[i].w, lines[i].h); + } + } +} + +#define MAX_RECTS 16 +static int num_rects = 0; +static SDL_FRect rects[MAX_RECTS]; +static int add_rect(float x1, float y1, float x2, float y2) +{ + if (num_rects >= MAX_RECTS) { + return 0; + } + if ((x1 == x2) || (y1 == y2)) { + return 0; + } + + if (x1 > x2) { + SWAP(float, x1, x2); + } + if (y1 > y2) { + SWAP(float, y1, y2); + } + + SDL_Log("adding rect (%g, %g), (%g, %g) [%gx%g]\n", x1, y1, x2, y2, + x2 - x1, y2 - y1); + + rects[num_rects].x = x1; + rects[num_rects].y = y1; + rects[num_rects].w = x2 - x1; + rects[num_rects].h = y2 - y1; + + return ++num_rects; +} + +static void +DrawRects(SDL_Renderer *renderer) +{ + SDL_SetRenderDrawColor(renderer, 255, 127, 0, 255); + SDL_RenderFillRects(renderer, rects, num_rects); +} + +static void +DrawRectLineIntersections(SDL_Renderer *renderer) +{ + int i, j; + + SDL_SetRenderDrawColor(renderer, 0, 255, 55, 255); + + for (i = 0; i < num_rects; i++) { + for (j = 0; j < num_lines; j++) { + float x1, y1, x2, y2; + SDL_FRect r; + + r = rects[i]; + x1 = lines[j].x; + y1 = lines[j].y; + x2 = lines[j].w; + y2 = lines[j].h; + + if (SDL_GetRectAndLineIntersectionFloat(&r, &x1, &y1, &x2, &y2)) { + SDL_RenderLine(renderer, x1, y1, x2, y2); + } + } + } +} + +static void +DrawRectRectIntersections(SDL_Renderer *renderer) +{ + int i, j; + + SDL_SetRenderDrawColor(renderer, 255, 200, 0, 255); + + for (i = 0; i < num_rects; i++) { + for (j = i + 1; j < num_rects; j++) { + SDL_FRect r; + if (SDL_GetRectIntersectionFloat(&rects[i], &rects[j], &r)) { + SDL_RenderFillRect(renderer, &r); + } + } + } +} + +static void loop(void *arg) +{ + int i; + SDL_Event event; + int *done = (int*)arg; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, done); + switch (event.type) { + case SDL_EVENT_MOUSE_BUTTON_DOWN: + mouse_begin_x = event.button.x; + mouse_begin_y = event.button.y; + break; + case SDL_EVENT_MOUSE_BUTTON_UP: + if (event.button.button == 3) { + add_line(mouse_begin_x, mouse_begin_y, event.button.x, event.button.y); + } + if (event.button.button == 1) { + add_rect(mouse_begin_x, mouse_begin_y, event.button.x, event.button.y); + } + break; + case SDL_EVENT_KEY_DOWN: + switch (event.key.keysym.sym) { + case 'l': + if (event.key.keysym.mod & SDL_KMOD_SHIFT) { + num_lines = 0; + } else { + add_line( + (float)(rand() % 640), + (float)(rand() % 480), + (float)(rand() % 640), + (float)(rand() % 480)); + } + break; + case 'r': + if (event.key.keysym.mod & SDL_KMOD_SHIFT) { + num_rects = 0; + } else { + add_rect( + (float)(rand() % 640), + (float)(rand() % 480), + (float)(rand() % 640), + (float)(rand() % 480)); + } + break; + } + break; + default: + break; + } + } + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + if (state->windows[i] == NULL) { + continue; + } + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + DrawRects(renderer); + DrawPoints(renderer); + DrawRectRectIntersections(renderer); + DrawLines(renderer); + DrawRectLineIntersections(renderer); + + SDL_RenderPresent(renderer); + } +#ifdef __EMSCRIPTEN__ + if (*done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int main(int argc, char *argv[]) +{ + int i; + Uint64 then, now; + Uint32 frames; + int done; + + /* Initialize parameters */ + num_objects = -1; /* -1 means not initialized */ + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--blend") == 0) { + if (argv[i + 1]) { + if (SDL_strcasecmp(argv[i + 1], "none") == 0) { + blendMode = SDL_BLENDMODE_NONE; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "blend") == 0) { + blendMode = SDL_BLENDMODE_BLEND; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "add") == 0) { + blendMode = SDL_BLENDMODE_ADD; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "mod") == 0) { + blendMode = SDL_BLENDMODE_MOD; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "mul") == 0) { + blendMode = SDL_BLENDMODE_MUL; + consumed = 2; + } + } + } else if (SDL_strcasecmp(argv[i], "--cyclecolor") == 0) { + cycle_color = SDL_TRUE; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--cyclealpha") == 0) { + cycle_alpha = SDL_TRUE; + consumed = 1; + } else if (num_objects < 0 && SDL_isdigit(*argv[i])) { + char *endptr = NULL; + num_objects = (int)SDL_strtol(argv[i], &endptr, 0); + if (endptr != argv[i] && *endptr == '\0' && num_objects >= 0) { + consumed = 1; + } + } + } + if (consumed < 0) { + static const char *options[] = { "[--blend none|blend|add|mod|mul]", "[--cyclecolor]", "[--cyclealpha]", "[count]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + return 1; + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + return 2; + } + + if (num_objects < 0) { + num_objects = NUM_OBJECTS; + } + + /* Create the windows and initialize the renderers */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawBlendMode(renderer, blendMode); + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + + srand((unsigned int)time(NULL)); + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop_arg(loop, &done, 0, 1); +#else + while (!done) { + ++frames; + loop(&done); + } +#endif + + /* Print out some timing information */ + now = SDL_GetTicks(); + + SDLTest_CommonQuit(state); + + if (now > then) { + double fps = ((double)frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testkeys.c b/vendor/sdl-3.0.0/test/testkeys.c new file mode 100644 index 0000000..0db5a4b --- /dev/null +++ b/vendor/sdl-3.0.0/test/testkeys.c @@ -0,0 +1,51 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Print out all the scancodes we have, just to verify them */ + +#include + +#include +#include +#include + +int main(int argc, char *argv[]) +{ + SDL_Scancode scancode; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + exit(1); + } + for (scancode = 0; scancode < SDL_NUM_SCANCODES; ++scancode) { + SDL_Log("Scancode #%d, \"%s\"\n", scancode, + SDL_GetScancodeName(scancode)); + } + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testloadso.c b/vendor/sdl-3.0.0/test/testloadso.c new file mode 100644 index 0000000..c938d94 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testloadso.c @@ -0,0 +1,115 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Test program to test dynamic loading with the loadso subsystem. + */ + +#include + +#include +#include +#include + +typedef int (*fntype)(const char *); + +static void log_usage(char *progname, SDLTest_CommonState *state) { + static const char *options[] = { "library", "functionname|--hello", NULL }; + SDLTest_CommonLogUsage(state, progname, options); + SDL_Log("USAGE: %s \n", progname); + SDL_Log(" %s --hello\n", progname); +} + +int main(int argc, char *argv[]) +{ + int i; + int retval = 0; + int hello = 0; + const char *libname = NULL; + const char *symname = NULL; + void *lib = NULL; + fntype fn = NULL; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (SDL_strcmp(argv[i], "--hello") == 0) { + if (!symname || SDL_strcmp(symname, "puts") == 0) { + symname = "puts"; + consumed = 1; + hello = 1; + } + } else if (!libname) { + libname = argv[i]; + consumed = 1; + } else if (!symname) { + symname = argv[i]; + consumed = 1; + } + } + if (consumed <= 0) { + log_usage(argv[0], state); + return 1; + } + + i += consumed; + } + + if (!libname || !symname) { + log_usage(argv[0], state); + return 1; + } + + /* Initialize SDL */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 2; + } + + lib = SDL_LoadObject(libname); + if (lib == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_LoadObject('%s') failed: %s\n", + libname, SDL_GetError()); + retval = 3; + } else { + fn = (fntype)SDL_LoadFunction(lib, symname); + if (fn == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_LoadFunction('%s') failed: %s\n", + symname, SDL_GetError()); + retval = 4; + } else { + SDL_Log("Found %s in %s at %p\n", symname, libname, fn); + if (hello) { + SDL_Log("Calling function...\n"); + fn(" HELLO, WORLD!\n"); + SDL_Log("...apparently, we survived. :)\n"); + SDL_Log("Unloading library...\n"); + } + } + SDL_UnloadObject(lib); + } + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return retval; +} diff --git a/vendor/sdl-3.0.0/test/testlocale.c b/vendor/sdl-3.0.0/test/testlocale.c new file mode 100644 index 0000000..d0c3239 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testlocale.c @@ -0,0 +1,103 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +#include +#include +#include + +static void log_locales(void) +{ + SDL_Locale *locales = SDL_GetPreferredLocales(); + if (locales == NULL) { + SDL_Log("Couldn't determine locales: %s", SDL_GetError()); + } else { + SDL_Locale *l; + unsigned int total = 0; + SDL_Log("Locales, in order of preference:"); + for (l = locales; l->language; l++) { + const char *c = l->country; + SDL_Log(" - %s%s%s", l->language, c ? "_" : "", c ? c : ""); + total++; + } + SDL_Log("%u locales seen.", total); + SDL_free(locales); + } +} + +int main(int argc, char **argv) +{ + int i; + int listen = 0; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (SDL_strcmp(argv[1], "--listen") == 0) { + listen = 1; + consumed = 1; + state->flags |= SDL_INIT_VIDEO; + } + } + if (consumed <= 0) { + static const char *options[] = { "[--listen]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + return 1; + } + + i += consumed; + } + + /* Print locales and languages */ + if (SDLTest_CommonInit(state) == SDL_FALSE) { + return 1; + } + + log_locales(); + + if (listen) { + int done = 0; + while (!done) { + SDL_Event e; + SDLTest_CommonEvent(state, &e, &done); + while (SDL_PollEvent(&e)) { + if (e.type == SDL_EVENT_QUIT) { + done = 1; + } else if (e.type == SDL_EVENT_LOCALE_CHANGED) { + SDL_Log("Saw SDL_EVENT_LOCALE_CHANGED event!"); + log_locales(); + } + } + + for (i = 0; i < state->num_windows; i++) { + SDL_RenderPresent(state->renderers[i]); + } + + SDL_Delay(10); + } + } + + SDLTest_CommonQuit(state); + + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testlock.c b/vendor/sdl-3.0.0/test/testlock.c new file mode 100644 index 0000000..edf259a --- /dev/null +++ b/vendor/sdl-3.0.0/test/testlock.c @@ -0,0 +1,212 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Test the thread and mutex locking functions + Also exercises the system's signal/thread interaction +*/ + +#include +#include /* for atexit() */ + +#include +#include +#include + +static SDL_Mutex *mutex = NULL; +static SDL_threadID mainthread; +static SDL_AtomicInt doterminate; +static int nb_threads = 6; +static SDL_Thread **threads; +static int worktime = 1000; +static SDLTest_CommonState *state; + +/** + * SDL_Quit() shouldn't be used with atexit() directly because + * calling conventions may differ... + */ +static void +SDL_Quit_Wrapper(void) +{ + SDL_Quit(); + SDLTest_CommonDestroyState(state); +} + +static void printid(void) +{ + SDL_Log("Thread %lu: exiting\n", SDL_ThreadID()); +} + +static void terminate(int sig) +{ + (void)signal(SIGINT, terminate); + SDL_AtomicSet(&doterminate, 1); +} + +static void closemutex(int sig) +{ + SDL_threadID id = SDL_ThreadID(); + int i; + SDL_Log("Thread %lu: Cleaning up...\n", id == mainthread ? 0 : id); + SDL_AtomicSet(&doterminate, 1); + if (threads) { + for (i = 0; i < nb_threads; ++i) { + SDL_WaitThread(threads[i], NULL); + } + SDL_free(threads); + threads = NULL; + } + SDL_DestroyMutex(mutex); + /* Let 'main()' return normally */ + if (sig != 0) { + exit(sig); + } +} + +static int SDLCALL +Run(void *data) +{ + if (SDL_ThreadID() == mainthread) { + (void)signal(SIGTERM, closemutex); + } + SDL_Log("Thread %lu: starting up", SDL_ThreadID()); + while (!SDL_AtomicGet(&doterminate)) { + SDL_Log("Thread %lu: ready to work\n", SDL_ThreadID()); + SDL_LockMutex(mutex); + SDL_Log("Thread %lu: start work!\n", SDL_ThreadID()); + SDL_Delay(1 * worktime); + SDL_Log("Thread %lu: work done!\n", SDL_ThreadID()); + SDL_UnlockMutex(mutex); + + /* If this sleep isn't done, then threads may starve */ + SDL_Delay(10); + } + if (SDL_ThreadID() == mainthread && SDL_AtomicGet(&doterminate)) { + SDL_Log("Thread %lu: raising SIGTERM\n", SDL_ThreadID()); + (void)raise(SIGTERM); + } + SDL_Log("Thread %lu: exiting!\n", SDL_ThreadID()); + return 0; +} + +#ifndef _WIN32 +static Uint32 hit_timeout(Uint32 interval, void *param) { + SDL_Log("Hit timeout! Sending SIGINT!"); + kill(0, SIGINT); + return 0; +} +#endif + +int main(int argc, char *argv[]) +{ + int i; +#ifndef _WIN32 + int timeout = 0; +#endif + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (SDL_strcmp(argv[i], "--nbthreads") == 0) { + if (argv[i + 1]) { + char *endptr; + nb_threads = SDL_strtol(argv[i + 1], &endptr, 0); + if (endptr != argv[i + 1] && *endptr == '\0' && nb_threads > 0) { + consumed = 2; + } + } + } else if (SDL_strcmp(argv[i], "--worktime") == 0) { + if (argv[i + 1]) { + char *endptr; + nb_threads = SDL_strtol(argv[i + 1], &endptr, 0); + if (endptr != argv[i + 1] && *endptr == '\0' && nb_threads > 0) { + consumed = 2; + } + } +#ifndef _WIN32 + } else if (SDL_strcmp(argv[i], "--timeout") == 0) { + if (argv[i + 1]) { + char *endptr; + timeout = SDL_strtol(argv[i + 1], &endptr, 0); + if (endptr != argv[i + 1] && *endptr == '\0' && timeout > 0) { + consumed = 2; + } + } +#endif + } + } + if (consumed <= 0) { + static const char *options[] = { + "[--nbthreads NB]", + "[--worktime ms]", +#ifndef _WIN32 + "[--timeout ms]", +#endif + NULL, + }; + SDLTest_CommonLogUsage(state, argv[0], options); + exit(1); + } + + i += consumed; + } + + threads = SDL_malloc(nb_threads * sizeof(SDL_Thread*)); + + /* Load the SDL library */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s\n", SDL_GetError()); + exit(1); + } + (void)atexit(SDL_Quit_Wrapper); + + SDL_AtomicSet(&doterminate, 0); + + mutex = SDL_CreateMutex(); + if (mutex == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create mutex: %s\n", SDL_GetError()); + exit(1); + } + + mainthread = SDL_ThreadID(); + SDL_Log("Main thread: %lu\n", mainthread); + (void)atexit(printid); + for (i = 0; i < nb_threads; ++i) { + char name[64]; + (void)SDL_snprintf(name, sizeof(name), "Worker%d", i); + threads[i] = SDL_CreateThread(Run, name, NULL); + if (threads[i] == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread!\n"); + } + } + +#ifndef _WIN32 + if (timeout) { + SDL_AddTimer(timeout, hit_timeout, NULL); + } +#endif + + (void)signal(SIGINT, terminate); + Run(NULL); + + return 0; /* Never reached */ +} diff --git a/vendor/sdl-3.0.0/test/testmessage.c b/vendor/sdl-3.0.0/test/testmessage.c new file mode 100644 index 0000000..c490787 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testmessage.c @@ -0,0 +1,229 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Simple test of the SDL MessageBox API */ + +#include + +#include +#include +#include + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static int SDLCALL +button_messagebox(void *eventNumber) +{ + const SDL_MessageBoxButtonData buttons[] = { + { SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, + 0, + "OK" }, + { SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, + 1, + "Cancel" }, + }; + + SDL_MessageBoxData data = { + SDL_MESSAGEBOX_INFORMATION, + NULL, /* no parent window */ + "Custom MessageBox", + "This is a custom messagebox", + 2, + NULL, /* buttons */ + NULL /* Default color scheme */ + }; + + int button = -1; + int success = 0; + data.buttons = buttons; + if (eventNumber) { + data.message = "This is a custom messagebox from a background thread."; + } + + success = SDL_ShowMessageBox(&data, &button); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + if (eventNumber) { + SDL_Event event; + event.type = (Uint32)(intptr_t)eventNumber; + SDL_PushEvent(&event); + return 1; + } else { + quit(2); + } + } + SDL_Log("Pressed button: %d, %s\n", button, button == -1 ? "[closed]" : button == 1 ? "Cancel" + : "OK"); + + if (eventNumber) { + SDL_Event event; + event.type = (Uint32)(intptr_t)eventNumber; + SDL_PushEvent(&event); + } + + return 0; +} + +int main(int argc, char *argv[]) +{ + int success; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "Simple MessageBox", + "This is a simple error MessageBox", + NULL); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "Simple MessageBox", + "This is a simple MessageBox with a newline:\r\nHello world!", + NULL); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + NULL, + "NULL Title", + NULL); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "NULL Message", + NULL, + NULL); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + /* Google says this is Traditional Chinese for "beef with broccoli" */ + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "UTF-8 Simple MessageBox", + "Unicode text: '牛肉西蘭花' ...", + NULL); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + /* Google says this is Traditional Chinese for "beef with broccoli" */ + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "UTF-8 Simple MessageBox", + "Unicode text and newline:\r\n'牛肉西蘭花'\n'牛肉西蘭花'", + NULL); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + /* Google says this is Traditional Chinese for "beef with broccoli" */ + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "牛肉西蘭花", + "Unicode text in the title.", + NULL); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + button_messagebox(NULL); + + /* Test showing a message box from a background thread. + + On macOS, the video subsystem needs to be initialized for this + to work, since the message box events are dispatched by the Cocoa + subsystem on the main thread. + */ + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL video subsystem: %s\n", SDL_GetError()); + return 1; + } + { + int status = 0; + SDL_Event event; + intptr_t eventNumber = SDL_RegisterEvents(1); + SDL_Thread *thread = SDL_CreateThread(&button_messagebox, "MessageBox", (void *)eventNumber); + + while (SDL_WaitEvent(&event)) { + if (event.type == eventNumber) { + break; + } + } + + SDL_WaitThread(thread, &status); + + SDL_Log("Message box thread return %i\n", status); + } + + /* Test showing a message box with a parent window */ + { + SDL_Event event; + SDL_Window *window = SDL_CreateWindow("Test", 640, 480, 0); + + /* On wayland, no window will actually show until something has + actually been displayed. + */ + SDL_Renderer *renderer = SDL_CreateRenderer(window, NULL, 0); + SDL_RenderPresent(renderer); + + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "Simple MessageBox", + "This is a simple error MessageBox with a parent window. Press a key or close the window after dismissing this messagebox.", + window); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + while (SDL_WaitEvent(&event)) { + if (event.type == SDL_EVENT_QUIT || event.type == SDL_EVENT_KEY_UP) { + break; + } + } + } + + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testmouse.c b/vendor/sdl-3.0.0/test/testmouse.c new file mode 100644 index 0000000..5f5ef10 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testmouse.c @@ -0,0 +1,312 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include /* exit() */ + +#ifdef __IOS__ +#define SCREEN_WIDTH 320 +#define SCREEN_HEIGHT 480 +#else +#define SCREEN_WIDTH 640 +#define SCREEN_HEIGHT 480 +#endif + +static SDL_Window *window; + +typedef struct _Object +{ + struct _Object *next; + + float x1, y1, x2, y2; + Uint8 r, g, b; + + SDL_bool isRect; +} Object; + +static Object *active = NULL; +static Object *objects = NULL; +static int buttons = 0; +static SDL_bool isRect = SDL_FALSE; + +static SDL_bool wheel_x_active = SDL_FALSE; +static SDL_bool wheel_y_active = SDL_FALSE; +static float wheel_x = SCREEN_WIDTH * 0.5f; +static float wheel_y = SCREEN_HEIGHT * 0.5f; + +struct mouse_loop_data { + SDL_bool done; + SDL_Renderer *renderer; +}; + +static void DrawObject(SDL_Renderer *renderer, Object *object) +{ + SDL_SetRenderDrawColor(renderer, object->r, object->g, object->b, 255); + + if (object->isRect) { + SDL_FRect rect; + + if (object->x1 > object->x2) { + rect.x = object->x2; + rect.w = object->x1 - object->x2; + } else { + rect.x = object->x1; + rect.w = object->x2 - object->x1; + } + + if (object->y1 > object->y2) { + rect.y = object->y2; + rect.h = object->y1 - object->y2; + } else { + rect.y = object->y1; + rect.h = object->y2 - object->y1; + } + + SDL_RenderFillRect(renderer, &rect); + } else { + SDL_RenderLine(renderer, object->x1, object->y1, object->x2, object->y2); + } +} + +static void DrawObjects(SDL_Renderer *renderer) +{ + Object *next = objects; + while (next != NULL) { + DrawObject(renderer, next); + next = next->next; + } +} + +static void AppendObject(Object *object) +{ + if (objects) { + Object *next = objects; + while (next->next != NULL) { + next = next->next; + } + next->next = object; + } else { + objects = object; + } +} + +static void loop(void *arg) +{ + struct mouse_loop_data *loop_data = (struct mouse_loop_data *)arg; + SDL_Event event; + SDL_Renderer *renderer = loop_data->renderer; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_EVENT_MOUSE_WHEEL: + if (event.wheel.direction == SDL_MOUSEWHEEL_FLIPPED) { + event.wheel.x *= -1; + event.wheel.y *= -1; + } + if (event.wheel.x != 0.0f) { + wheel_x_active = SDL_TRUE; + /* "positive to the right and negative to the left" */ + wheel_x += event.wheel.x * 10.0f; + } + if (event.wheel.x != 0.0f) { + wheel_y_active = SDL_TRUE; + /* "positive away from the user and negative towards the user" */ + wheel_y -= event.wheel.x * 10.0f; + } + break; + + case SDL_EVENT_MOUSE_MOTION: + if (active == NULL) { + break; + } + + active->x2 = event.motion.x; + active->y2 = event.motion.y; + break; + + case SDL_EVENT_MOUSE_BUTTON_DOWN: + if (active == NULL) { + active = SDL_calloc(1, sizeof(*active)); + active->x1 = active->x2 = event.button.x; + active->y1 = active->y2 = event.button.y; + active->isRect = isRect; + } + + switch (event.button.button) { + case SDL_BUTTON_LEFT: + active->r = 255; + buttons |= SDL_BUTTON_LMASK; + break; + case SDL_BUTTON_MIDDLE: + active->g = 255; + buttons |= SDL_BUTTON_MMASK; + break; + case SDL_BUTTON_RIGHT: + active->b = 255; + buttons |= SDL_BUTTON_RMASK; + break; + case SDL_BUTTON_X1: + active->r = 255; + active->b = 255; + buttons |= SDL_BUTTON_X1MASK; + break; + case SDL_BUTTON_X2: + active->g = 255; + active->b = 255; + buttons |= SDL_BUTTON_X2MASK; + break; + } + break; + + case SDL_EVENT_MOUSE_BUTTON_UP: + if (active == NULL) { + break; + } + + switch (event.button.button) { + case SDL_BUTTON_LEFT: + buttons &= ~SDL_BUTTON_LMASK; + break; + case SDL_BUTTON_MIDDLE: + buttons &= ~SDL_BUTTON_MMASK; + break; + case SDL_BUTTON_RIGHT: + buttons &= ~SDL_BUTTON_RMASK; + break; + case SDL_BUTTON_X1: + buttons &= ~SDL_BUTTON_X1MASK; + break; + case SDL_BUTTON_X2: + buttons &= ~SDL_BUTTON_X2MASK; + break; + } + + if (buttons == 0) { + AppendObject(active); + active = NULL; + } + break; + + case SDL_EVENT_KEY_DOWN: + case SDL_EVENT_KEY_UP: + switch (event.key.keysym.sym) { + case SDLK_LSHIFT: + isRect = (event.key.state == SDL_PRESSED); + if (active) { + active->isRect = isRect; + } + break; + } + break; + + case SDL_EVENT_QUIT: + loop_data->done = SDL_TRUE; + break; + + default: + break; + } + } + + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + SDL_RenderClear(renderer); + + /* Mouse wheel */ + SDL_SetRenderDrawColor(renderer, 0, 255, 128, 255); + if (wheel_x_active) { + SDL_RenderLine(renderer, wheel_x, 0.0f, wheel_x, (float)SCREEN_HEIGHT); + } + if (wheel_y_active) { + SDL_RenderLine(renderer, 0.0f, wheel_y, (float)SCREEN_WIDTH, wheel_y); + } + + /* Objects from mouse clicks */ + DrawObjects(renderer); + if (active) { + DrawObject(renderer, active); + } + + SDL_RenderPresent(renderer); + +#ifdef __EMSCRIPTEN__ + if (loop_data->done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int main(int argc, char *argv[]) +{ + struct mouse_loop_data loop_data; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + /* Initialize SDL (Note: video is required to start event loop) */ + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + exit(1); + } + + /* Create a window to display joystick axis position */ + window = SDL_CreateWindow("Mouse Test", SCREEN_WIDTH, SCREEN_HEIGHT, 0); + if (!window) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create window: %s\n", SDL_GetError()); + return 0; + } + + loop_data.done = SDL_FALSE; + + loop_data.renderer = SDL_CreateRenderer(window, NULL, 0); + if (!loop_data.renderer) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create renderer: %s\n", SDL_GetError()); + SDL_DestroyWindow(window); + return 0; + } + + /* Main render loop */ +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop_arg(loop, &loop_data, 0, 1); +#else + while (loop_data.done == SDL_FALSE) { + loop(&loop_data); + } +#endif + + SDL_DestroyRenderer(loop_data.renderer); + SDL_DestroyWindow(window); + + SDL_Quit(); + SDLTest_CommonDestroyState(state); + + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testmultiaudio.c b/vendor/sdl-3.0.0/test/testmultiaudio.c new file mode 100644 index 0000000..ecf0316 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testmultiaudio.c @@ -0,0 +1,208 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +#include +#include +#include + +#include "testutils.h" + +#include /* for fflush() and stdout */ + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "testutils.h" + +static SDL_AudioSpec spec; +static Uint8 *sound = NULL; /* Pointer to wave data */ +static Uint32 soundlen = 0; /* Length of wave data */ + +/* these have to be in globals so the Emscripten port can see them in the mainloop. :/ */ +static SDL_AudioStream *stream = NULL; + + +#ifdef __EMSCRIPTEN__ +static void loop(void) +{ + if (SDL_GetAudioStreamAvailable(stream) == 0) { + SDL_Log("done."); + SDL_DestroyAudioStream(stream); + SDL_free(sound); + SDL_Quit(); + emscripten_cancel_main_loop(); + } +} +#endif + +static void +test_multi_audio(SDL_AudioDeviceID *devices, int devcount) +{ + int keep_going = 1; + SDL_AudioStream **streams = NULL; + int i; + +#ifdef __ANDROID__ /* !!! FIXME: maybe always create a window, in the SDLTest layer, so these #ifdefs don't have to be here? */ + SDL_Event event; + + /* Create a Window to get fully initialized event processing for testing pause on Android. */ + SDL_CreateWindow("testmultiaudio", 320, 240, 0); +#endif + + for (i = 0; i < devcount; i++) { + char *devname = SDL_GetAudioDeviceName(devices[i]); + + SDL_Log("Playing on device #%d of %d: id=%u, name='%s'...", i, devcount, (unsigned int) devices[i], devname); + + if ((stream = SDL_OpenAudioDeviceStream(devices[i], &spec, NULL, NULL)) == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Audio stream creation failed: %s", SDL_GetError()); + } else { + SDL_ResumeAudioDevice(SDL_GetAudioStreamDevice(stream)); + SDL_PutAudioStreamData(stream, sound, soundlen); + SDL_FlushAudioStream(stream); +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (SDL_GetAudioStreamAvailable(stream) > 0) { +#ifdef __ANDROID__ + /* Empty queue, some application events would prevent pause. */ + while (SDL_PollEvent(&event)) { + } +#endif + SDL_Delay(100); + } +#endif + SDL_Log("done."); + SDL_DestroyAudioStream(stream); + } + SDL_free(devname); + stream = NULL; + } + + /* note that Emscripten currently doesn't run this part (but maybe only has a single audio device anyhow?) */ + SDL_Log("Playing on all devices...\n"); + streams = (SDL_AudioStream **) SDL_calloc(devcount, sizeof (SDL_AudioStream *)); + if (!streams) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!"); + } else { + for (i = 0; i < devcount; i++) { + streams[i] = SDL_OpenAudioDeviceStream(devices[i], &spec, NULL, NULL); + if (streams[i] == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Audio stream creation failed for device %d of %d: %s", i, devcount, SDL_GetError()); + } else { + SDL_PutAudioStreamData(streams[i], sound, soundlen); + SDL_FlushAudioStream(streams[i]); + } + } + + /* try to start all the devices about the same time. SDL does not guarantee sync across physical devices. */ + for (i = 0; i < devcount; i++) { + if (streams[i]) { + SDL_ResumeAudioDevice(SDL_GetAudioStreamDevice(streams[i])); + } + } + + while (keep_going) { + keep_going = 0; + for (i = 0; i < devcount; i++) { + if (streams[i] && (SDL_GetAudioStreamAvailable(streams[i]) > 0)) { + keep_going = 1; + } + } +#ifdef __ANDROID__ + /* Empty queue, some application events would prevent pause. */ + while (SDL_PollEvent(&event)) {} +#endif + + SDL_Delay(100); + } + + for (i = 0; i < devcount; i++) { + SDL_DestroyAudioStream(streams[i]); + } + + SDL_free(streams); + } + + SDL_Log("All done!\n"); +} + +int main(int argc, char **argv) +{ + SDL_AudioDeviceID *devices = NULL; + int devcount = 0; + int i; + char *filename = NULL; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (!filename) { + filename = argv[i]; + consumed = 1; + } + } + if (consumed <= 0) { + static const char *options[] = { "[sample.wav]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + return 1; + } + + i += consumed; + } + + /* Load the SDL library */ + if (SDL_Init(SDL_INIT_AUDIO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + SDL_Log("Using audio driver: %s\n", SDL_GetCurrentAudioDriver()); + + filename = GetResourceFilename(filename, "sample.wav"); + + devices = SDL_GetAudioOutputDevices(&devcount); + if (devices == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Don't see any specific audio devices!"); + } else { + /* Load the wave file into memory */ + if (SDL_LoadWAV(filename, &spec, &sound, &soundlen) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", filename, + SDL_GetError()); + } else { + test_multi_audio(devices, devcount); + SDL_free(sound); + } + } + + SDL_free(devices); + SDL_free(filename); + + SDL_Quit(); + SDLTest_CommonDestroyState(state); + + return 0; +} + diff --git a/vendor/sdl-3.0.0/test/testnative.c b/vendor/sdl-3.0.0/test/testnative.c new file mode 100644 index 0000000..166e5d8 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testnative.c @@ -0,0 +1,224 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +/* Simple program: Create a native window and attach an SDL renderer */ + +#include +#include +#include + +#include "testnative.h" +#include "testutils.h" + +#include /* for srand() */ +#include /* for time() */ + +#define WINDOW_W 640 +#define WINDOW_H 480 +#define NUM_SPRITES 100 +#define MAX_SPEED 1 + +static NativeWindowFactory *factories[] = { +#ifdef TEST_NATIVE_WINDOWS + &WindowsWindowFactory, +#endif +#ifdef TEST_NATIVE_X11 + &X11WindowFactory, +#endif +#ifdef TEST_NATIVE_COCOA + &CocoaWindowFactory, +#endif + NULL +}; +static NativeWindowFactory *factory = NULL; +static void *native_window; +static SDL_FRect *positions, *velocities; +static SDLTest_CommonState *state; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + if (native_window != NULL && factory != NULL) { + factory->DestroyNativeWindow(native_window); + } + SDLTest_CommonDestroyState(state); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static void MoveSprites(SDL_Renderer *renderer, SDL_Texture *sprite) +{ + int sprite_w, sprite_h; + int i; + SDL_Rect viewport; + SDL_FRect *position, *velocity; + + /* Query the sizes */ + SDL_GetRenderViewport(renderer, &viewport); + SDL_QueryTexture(sprite, NULL, NULL, &sprite_w, &sprite_h); + + /* Draw a gray background */ + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + /* Move the sprite, bounce at the wall, and draw */ + for (i = 0; i < NUM_SPRITES; ++i) { + position = &positions[i]; + velocity = &velocities[i]; + position->x += velocity->x; + if ((position->x < 0) || (position->x >= (viewport.w - sprite_w))) { + velocity->x = -velocity->x; + position->x += velocity->x; + } + position->y += velocity->y; + if ((position->y < 0) || (position->y >= (viewport.h - sprite_h))) { + velocity->y = -velocity->y; + position->y += velocity->y; + } + + /* Blit the sprite onto the screen */ + SDL_RenderTexture(renderer, sprite, NULL, position); + } + + /* Update the screen! */ + SDL_RenderPresent(renderer); +} + +int main(int argc, char *argv[]) +{ + int i, done; + const char *driver; + SDL_Window *window; + SDL_Renderer *renderer; + SDL_Texture *sprite; + int window_w, window_h; + int sprite_w, sprite_h; + SDL_Event event; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL video: %s\n", + SDL_GetError()); + exit(1); + } + driver = SDL_GetCurrentVideoDriver(); + + /* Find a native window driver and create a native window */ + for (i = 0; factories[i]; ++i) { + if (SDL_strcmp(driver, factories[i]->tag) == 0) { + factory = factories[i]; + break; + } + } + if (factory == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't find native window code for %s driver\n", + driver); + quit(2); + } + SDL_Log("Creating native window for %s driver\n", driver); + native_window = factory->CreateNativeWindow(WINDOW_W, WINDOW_H); + if (native_window == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create native window\n"); + quit(3); + } + window = SDL_CreateWindowFrom(native_window); + if (window == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create SDL window: %s\n", SDL_GetError()); + quit(4); + } + SDL_SetWindowTitle(window, "SDL Native Window Test"); + + /* Create the renderer */ + renderer = SDL_CreateRenderer(window, NULL, 0); + if (renderer == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create renderer: %s\n", SDL_GetError()); + quit(5); + } + + /* Clear the window, load the sprite and go! */ + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + sprite = LoadTexture(renderer, "icon.bmp", SDL_TRUE, NULL, NULL); + if (sprite == NULL) { + quit(6); + } + + /* Allocate memory for the sprite info */ + SDL_GetWindowSize(window, &window_w, &window_h); + SDL_QueryTexture(sprite, NULL, NULL, &sprite_w, &sprite_h); + positions = (SDL_FRect *)SDL_malloc(NUM_SPRITES * sizeof(*positions)); + velocities = (SDL_FRect *)SDL_malloc(NUM_SPRITES * sizeof(*velocities)); + if (positions == NULL || velocities == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!\n"); + quit(2); + } + srand((unsigned int)time(NULL)); + for (i = 0; i < NUM_SPRITES; ++i) { + positions[i].x = (float)(rand() % (window_w - sprite_w)); + positions[i].y = (float)(rand() % (window_h - sprite_h)); + positions[i].w = (float)sprite_w; + positions[i].h = (float)sprite_h; + velocities[i].x = 0.0f; + velocities[i].y = 0.0f; + while (!velocities[i].x && !velocities[i].y) { + velocities[i].x = (float)((rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED); + velocities[i].y = (float)((rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED); + } + } + + /* Main render loop */ + done = 0; + while (!done) { + /* Check for events */ + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_EVENT_WINDOW_EXPOSED: + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + break; + case SDL_EVENT_QUIT: + done = 1; + break; + default: + break; + } + } + MoveSprites(renderer, sprite); + } + + SDL_DestroyTexture(sprite); + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + SDL_free(positions); + SDL_free(velocities); + + quit(0); + + return 0; /* to prevent compiler warning */ +} diff --git a/vendor/sdl-3.0.0/test/testnative.h b/vendor/sdl-3.0.0/test/testnative.h new file mode 100644 index 0000000..41ed6ef --- /dev/null +++ b/vendor/sdl-3.0.0/test/testnative.h @@ -0,0 +1,47 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Definitions for platform dependent windowing functions to test SDL + integration with native windows +*/ +#include + +/* Hack to avoid dynapi renaming */ +#include "../src/dynapi/SDL_dynapi.h" +#ifdef SDL_DYNAMIC_API +#undef SDL_DYNAMIC_API +#endif +#define SDL_DYNAMIC_API 0 + +#include "../src/SDL_internal.h" + +typedef struct +{ + const char *tag; + void *(*CreateNativeWindow)(int w, int h); + void (*DestroyNativeWindow)(void *window); +} NativeWindowFactory; + +#ifdef SDL_VIDEO_DRIVER_WINDOWS +#define TEST_NATIVE_WINDOWS +extern NativeWindowFactory WindowsWindowFactory; +#endif + +#ifdef SDL_VIDEO_DRIVER_X11 +#define TEST_NATIVE_X11 +extern NativeWindowFactory X11WindowFactory; +#endif + +#ifdef SDL_VIDEO_DRIVER_COCOA +#define TEST_NATIVE_COCOA +extern NativeWindowFactory CocoaWindowFactory; +#endif diff --git a/vendor/sdl-3.0.0/test/testnativecocoa.m b/vendor/sdl-3.0.0/test/testnativecocoa.m new file mode 100644 index 0000000..e895072 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testnativecocoa.m @@ -0,0 +1,58 @@ + +#include "testnative.h" + +#ifdef TEST_NATIVE_COCOA + +#include +#include + +#ifndef MAC_OS_X_VERSION_10_12 +static const unsigned int NSWindowStyleMaskTitled = NSTitledWindowMask; +static const unsigned int NSWindowStyleMaskMiniaturizable = NSMiniaturizableWindowMask; +static const unsigned int NSWindowStyleMaskClosable = NSClosableWindowMask; +#endif + +static void *CreateWindowCocoa(int w, int h); +static void DestroyWindowCocoa(void *window); + +NativeWindowFactory CocoaWindowFactory = { + "cocoa", + CreateWindowCocoa, + DestroyWindowCocoa +}; + +static void *CreateWindowCocoa(int w, int h) +{ + NSAutoreleasePool *pool; + NSWindow *nswindow; + NSRect rect; + unsigned int style; + + pool = [[NSAutoreleasePool alloc] init]; + + rect.origin.x = 0; + rect.origin.y = 0; + rect.size.width = w; + rect.size.height = h; + rect.origin.y = CGDisplayPixelsHigh(kCGDirectMainDisplay) - rect.origin.y - rect.size.height; + + style = (NSWindowStyleMaskTitled|NSWindowStyleMaskClosable|NSWindowStyleMaskMiniaturizable); + + nswindow = [[NSWindow alloc] initWithContentRect:rect styleMask:style backing:NSBackingStoreBuffered defer:FALSE]; + [nswindow makeKeyAndOrderFront:nil]; + + [pool release]; + + return nswindow; +} + +static void DestroyWindowCocoa(void *window) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSWindow *nswindow = (NSWindow *)window; + + [nswindow close]; + [pool release]; +} + +#endif diff --git a/vendor/sdl-3.0.0/test/testnativew32.c b/vendor/sdl-3.0.0/test/testnativew32.c new file mode 100644 index 0000000..13603b6 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testnativew32.c @@ -0,0 +1,88 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +#include "testnative.h" + +#ifdef TEST_NATIVE_WINDOWS + +#include + +static void *CreateWindowNative(int w, int h); +static void DestroyWindowNative(void *window); + +NativeWindowFactory WindowsWindowFactory = { + "windows", + CreateWindowNative, + DestroyWindowNative +}; + +LRESULT CALLBACK +WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) { + case WM_CLOSE: + DestroyWindow(hwnd); + break; + case WM_DESTROY: + PostQuitMessage(0); + break; + default: + return DefWindowProc(hwnd, msg, wParam, lParam); + } + return 0; +} + +static void * +CreateWindowNative(int w, int h) +{ + HWND hwnd; + WNDCLASS wc; + + wc.style = 0; + wc.lpfnWndProc = WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = GetModuleHandle(NULL); + wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + wc.lpszMenuName = NULL; + wc.lpszClassName = "SDL Test"; + + if (!RegisterClass(&wc)) { + MessageBox(NULL, "Window Registration Failed!", "Error!", + MB_ICONEXCLAMATION | MB_OK); + return 0; + } + + hwnd = + CreateWindow("SDL Test", "", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, + CW_USEDEFAULT, w, h, NULL, NULL, GetModuleHandle(NULL), + NULL); + if (hwnd == NULL) { + MessageBox(NULL, "Window Creation Failed!", "Error!", + MB_ICONEXCLAMATION | MB_OK); + return 0; + } + + ShowWindow(hwnd, SW_SHOW); + + return hwnd; +} + +static void +DestroyWindowNative(void *window) +{ + DestroyWindow((HWND)window); +} + +#endif diff --git a/vendor/sdl-3.0.0/test/testnativex11.c b/vendor/sdl-3.0.0/test/testnativex11.c new file mode 100644 index 0000000..b33a60b --- /dev/null +++ b/vendor/sdl-3.0.0/test/testnativex11.c @@ -0,0 +1,55 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +#include "testnative.h" + +#ifdef TEST_NATIVE_X11 + +#include + +static void *CreateWindowX11(int w, int h); +static void DestroyWindowX11(void *window); + +NativeWindowFactory X11WindowFactory = { + "x11", + CreateWindowX11, + DestroyWindowX11 +}; + +static Display *dpy; + +static void * +CreateWindowX11(int w, int h) +{ + Window window = 0; + + dpy = XOpenDisplay(NULL); + if (dpy) { + window = + XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0, w, h, 0, 0, + 0); + XMapRaised(dpy, window); + XSync(dpy, False); + } + return (void *)window; +} + +static void +DestroyWindowX11(void *window) +{ + if (dpy) { + XDestroyWindow(dpy, (Window)window); + XCloseDisplay(dpy); + } +} + +#endif diff --git a/vendor/sdl-3.0.0/test/testoffscreen.c b/vendor/sdl-3.0.0/test/testoffscreen.c new file mode 100644 index 0000000..7985203 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testoffscreen.c @@ -0,0 +1,178 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Simple program: picks the offscreen backend and renders each frame to a bmp */ + +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include +#include +#include + +static SDL_Renderer *renderer = NULL; +static SDL_Window *window = NULL; +static int done = SDL_FALSE; +static int frame_number = 0; +static int width = 640; +static int height = 480; +static unsigned int max_frames = 200; + +static void draw(void) +{ + SDL_FRect rect; + + SDL_SetRenderDrawColor(renderer, 0x10, 0x9A, 0xCE, 0xFF); + SDL_RenderClear(renderer); + + /* Grow based on the frame just to show a difference per frame of the region */ + rect.x = 0.0f; + rect.y = 0.0f; + rect.w = (float)((frame_number * 2) % width); + rect.h = (float)((frame_number * 2) % height); + SDL_SetRenderDrawColor(renderer, 0xFF, 0x10, 0x21, 0xFF); + SDL_RenderFillRect(renderer, &rect); + + SDL_RenderPresent(renderer); +} + +static void save_surface_to_bmp(void) +{ + SDL_Surface* surface; + Uint32 pixel_format; + char file[128]; + + pixel_format = SDL_GetWindowPixelFormat(window); + + surface = SDL_CreateSurface(width, height, pixel_format); + + SDL_RenderReadPixels(renderer, NULL, pixel_format, surface->pixels, surface->pitch); + + (void)SDL_snprintf(file, sizeof(file), "SDL_window%" SDL_PRIs32 "-%8.8d.bmp", + SDL_GetWindowID(window), ++frame_number); + + SDL_SaveBMP(surface, file); + SDL_DestroySurface(surface); +} + +static void loop(void) +{ + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_EVENT_QUIT: + done = SDL_TRUE; + break; + } + } + + draw(); + save_surface_to_bmp(); + +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int main(int argc, char *argv[]) +{ +#ifndef __EMSCRIPTEN__ + Uint64 then, now; + Uint32 frames; +#endif + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + /* Force the offscreen renderer, if it cannot be created then fail out */ + SDL_SetHint("SDL_VIDEO_DRIVER", "offscreen"); + if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) { + SDL_Log("Couldn't initialize the offscreen video driver: %s\n", + SDL_GetError()); + return SDL_FALSE; + } + + /* If OPENGL fails to init it will fallback to using a framebuffer for rendering */ + window = SDL_CreateWindow("Offscreen Test", width, height, 0); + + if (window == NULL) { + SDL_Log("Couldn't create window: %s\n", SDL_GetError()); + return SDL_FALSE; + } + + renderer = SDL_CreateRenderer(window, NULL, 0); + + if (renderer == NULL) { + SDL_Log("Couldn't create renderer: %s\n", + SDL_GetError()); + return SDL_FALSE; + } + + SDL_RenderClear(renderer); + + srand((unsigned int)time(NULL)); + +#ifndef __EMSCRIPTEN__ + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; +#endif + + SDL_Log("Rendering %u frames offscreen\n", max_frames); + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done && frames < max_frames) { + ++frames; + loop(); + + /* Print out some timing information, along with remaining frames */ + if (frames % (max_frames / 10) == 0) { + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double)frames * 1000) / (now - then); + SDL_Log("Frames remaining: %" SDL_PRIu32 " rendering at %2.2f frames per second\n", max_frames - frames, fps); + } + } + } +#endif + + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + SDL_Quit(); + SDLTest_CommonDestroyState(state); + + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testoverlay.c b/vendor/sdl-3.0.0/test/testoverlay.c new file mode 100644 index 0000000..5d42efc --- /dev/null +++ b/vendor/sdl-3.0.0/test/testoverlay.c @@ -0,0 +1,542 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +/******************************************************************************** + * * + * Test of the overlay used for moved pictures, test more closed to real life. * + * Running trojan moose :) Coded by Mike Gorchak. * + * * + ********************************************************************************/ + +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include +#include +#include "testutils.h" + +#define MOOSEPIC_W 64 +#define MOOSEPIC_H 88 + +#define MOOSEFRAME_SIZE (MOOSEPIC_W * MOOSEPIC_H) +#define MOOSEFRAMES_COUNT 10 + +/* *INDENT-OFF* */ /* clang-format off */ +static SDL_Color MooseColors[84] = { + {49, 49, 49, SDL_ALPHA_OPAQUE} + , {66, 24, 0, SDL_ALPHA_OPAQUE} + , {66, 33, 0, SDL_ALPHA_OPAQUE} + , {66, 66, 66, SDL_ALPHA_OPAQUE} + , + {66, 115, 49, SDL_ALPHA_OPAQUE} + , {74, 33, 0, SDL_ALPHA_OPAQUE} + , {74, 41, 16, SDL_ALPHA_OPAQUE} + , {82, 33, 8, SDL_ALPHA_OPAQUE} + , + {82, 41, 8, SDL_ALPHA_OPAQUE} + , {82, 49, 16, SDL_ALPHA_OPAQUE} + , {82, 82, 82, SDL_ALPHA_OPAQUE} + , {90, 41, 8, SDL_ALPHA_OPAQUE} + , + {90, 41, 16, SDL_ALPHA_OPAQUE} + , {90, 57, 24, SDL_ALPHA_OPAQUE} + , {99, 49, 16, SDL_ALPHA_OPAQUE} + , {99, 66, 24, SDL_ALPHA_OPAQUE} + , + {99, 66, 33, SDL_ALPHA_OPAQUE} + , {99, 74, 33, SDL_ALPHA_OPAQUE} + , {107, 57, 24, SDL_ALPHA_OPAQUE} + , {107, 82, 41, SDL_ALPHA_OPAQUE} + , + {115, 57, 33, SDL_ALPHA_OPAQUE} + , {115, 66, 33, SDL_ALPHA_OPAQUE} + , {115, 66, 41, SDL_ALPHA_OPAQUE} + , {115, 74, 0, SDL_ALPHA_OPAQUE} + , + {115, 90, 49, SDL_ALPHA_OPAQUE} + , {115, 115, 115, SDL_ALPHA_OPAQUE} + , {123, 82, 0, SDL_ALPHA_OPAQUE} + , {123, 99, 57, SDL_ALPHA_OPAQUE} + , + {132, 66, 41, SDL_ALPHA_OPAQUE} + , {132, 74, 41, SDL_ALPHA_OPAQUE} + , {132, 90, 8, SDL_ALPHA_OPAQUE} + , {132, 99, 33, SDL_ALPHA_OPAQUE} + , + {132, 99, 66, SDL_ALPHA_OPAQUE} + , {132, 107, 66, SDL_ALPHA_OPAQUE} + , {140, 74, 49, SDL_ALPHA_OPAQUE} + , {140, 99, 16, SDL_ALPHA_OPAQUE} + , + {140, 107, 74, SDL_ALPHA_OPAQUE} + , {140, 115, 74, SDL_ALPHA_OPAQUE} + , {148, 107, 24, SDL_ALPHA_OPAQUE} + , {148, 115, 82, SDL_ALPHA_OPAQUE} + , + {148, 123, 74, SDL_ALPHA_OPAQUE} + , {148, 123, 90, SDL_ALPHA_OPAQUE} + , {156, 115, 33, SDL_ALPHA_OPAQUE} + , {156, 115, 90, SDL_ALPHA_OPAQUE} + , + {156, 123, 82, SDL_ALPHA_OPAQUE} + , {156, 132, 82, SDL_ALPHA_OPAQUE} + , {156, 132, 99, SDL_ALPHA_OPAQUE} + , {156, 156, 156, SDL_ALPHA_OPAQUE} + , + {165, 123, 49, SDL_ALPHA_OPAQUE} + , {165, 123, 90, SDL_ALPHA_OPAQUE} + , {165, 132, 82, SDL_ALPHA_OPAQUE} + , {165, 132, 90, SDL_ALPHA_OPAQUE} + , + {165, 132, 99, SDL_ALPHA_OPAQUE} + , {165, 140, 90, SDL_ALPHA_OPAQUE} + , {173, 132, 57, SDL_ALPHA_OPAQUE} + , {173, 132, 99, SDL_ALPHA_OPAQUE} + , + {173, 140, 107, SDL_ALPHA_OPAQUE} + , {173, 140, 115, SDL_ALPHA_OPAQUE} + , {173, 148, 99, SDL_ALPHA_OPAQUE} + , {173, 173, 173, SDL_ALPHA_OPAQUE} + , + {181, 140, 74, SDL_ALPHA_OPAQUE} + , {181, 148, 115, SDL_ALPHA_OPAQUE} + , {181, 148, 123, SDL_ALPHA_OPAQUE} + , {181, 156, 107, SDL_ALPHA_OPAQUE} + , + {189, 148, 123, SDL_ALPHA_OPAQUE} + , {189, 156, 82, SDL_ALPHA_OPAQUE} + , {189, 156, 123, SDL_ALPHA_OPAQUE} + , {189, 156, 132, SDL_ALPHA_OPAQUE} + , + {189, 189, 189, SDL_ALPHA_OPAQUE} + , {198, 156, 123, SDL_ALPHA_OPAQUE} + , {198, 165, 132, SDL_ALPHA_OPAQUE} + , {206, 165, 99, SDL_ALPHA_OPAQUE} + , + {206, 165, 132, SDL_ALPHA_OPAQUE} + , {206, 173, 140, SDL_ALPHA_OPAQUE} + , {206, 206, 206, SDL_ALPHA_OPAQUE} + , {214, 173, 115, SDL_ALPHA_OPAQUE} + , + {214, 173, 140, SDL_ALPHA_OPAQUE} + , {222, 181, 148, SDL_ALPHA_OPAQUE} + , {222, 189, 132, SDL_ALPHA_OPAQUE} + , {222, 189, 156, SDL_ALPHA_OPAQUE} + , + {222, 222, 222, SDL_ALPHA_OPAQUE} + , {231, 198, 165, SDL_ALPHA_OPAQUE} + , {231, 231, 231, SDL_ALPHA_OPAQUE} + , {239, 206, 173, SDL_ALPHA_OPAQUE} +}; +/* *INDENT-ON* */ /* clang-format on */ + +static SDLTest_CommonState *state; +static Uint64 next_fps_check; +static Uint32 frames; +static const Uint32 fps_check_delay = 5000; + +static Uint32 yuv_format = SDL_PIXELFORMAT_YV12; +static SDL_Surface *MooseYUVSurfaces[MOOSEFRAMES_COUNT]; +static SDL_Texture *MooseTexture = NULL; +static SDL_FRect displayrect; +static int window_w; +static int window_h; +static int paused = 0; +static int done = 0; +static int fpsdelay; +static SDL_bool streaming = SDL_TRUE; +static Uint8 *RawMooseData = NULL; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + int i; + + /* If rc is 0, just let main return normally rather than calling exit. + * This allows testing of platforms where SDL_main is required and does meaningful cleanup. + */ + + SDL_free(RawMooseData); + + for (i = 0; i < MOOSEFRAMES_COUNT; i++) { + SDL_DestroySurface(MooseYUVSurfaces[i]); + } + + SDLTest_CommonQuit(state); + + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static void MoveSprites(SDL_Renderer *renderer) +{ + static int i = 0; + + if (streaming) { + if (!paused) { + i = (i + 1) % MOOSEFRAMES_COUNT; + /* Test both upload paths for NV12/NV21 formats */ + if ((yuv_format == SDL_PIXELFORMAT_NV12 || yuv_format == SDL_PIXELFORMAT_NV21) && + (i % 2) == 0) { +#ifdef TEST_RECT_UPDATE + SDL_Rect rect; + + if (i == 0) { + rect.x = 0; + rect.y = 0; + rect.w = MOOSEPIC_W; + rect.h = MOOSEPIC_H; + } else { + rect.x = MOOSEPIC_W / 4; + rect.y = MOOSEPIC_H / 4; + rect.w = MOOSEPIC_W / 2; + rect.h = MOOSEPIC_H / 2; + } + SDL_UpdateNVTexture(MooseTexture, &rect, + (Uint8 *)MooseYUVSurfaces[i]->pixels + rect.y * MooseYUVSurfaces[i]->pitch + rect.x, MooseYUVSurfaces[i]->pitch, + (Uint8 *)MooseYUVSurfaces[i]->pixels + MOOSEFRAME_SIZE + (rect.y + 1) / 2 * MooseYUVSurfaces[i]->pitch + (rect.x + 1) / 2, MooseYUVSurfaces[i]->pitch); +#else + SDL_UpdateNVTexture(MooseTexture, NULL, + MooseYUVSurfaces[i]->pixels, MooseYUVSurfaces[i]->pitch, + (Uint8 *)MooseYUVSurfaces[i]->pixels + MOOSEFRAME_SIZE, MooseYUVSurfaces[i]->pitch); +#endif + } else { + SDL_UpdateTexture(MooseTexture, NULL, MooseYUVSurfaces[i]->pixels, MooseYUVSurfaces[i]->pitch); + } + } + SDL_RenderClear(renderer); + SDL_RenderTexture(renderer, MooseTexture, NULL, &displayrect); + SDL_RenderPresent(renderer); + } else { + SDL_Texture *tmp; + + /* Test SDL_CreateTextureFromSurface */ + if (!paused) { + i = (i + 1) % MOOSEFRAMES_COUNT; + } + + tmp = SDL_CreateTextureFromSurface(renderer, MooseYUVSurfaces[i]); + if (tmp == NULL) { + SDL_Log("Error %s", SDL_GetError()); + quit(7); + } + + SDL_RenderClear(renderer); + SDL_RenderTexture(renderer, tmp, NULL, &displayrect); + SDL_RenderPresent(renderer); + SDL_DestroyTexture(tmp); + } +} + + +static void loop(void) +{ + Uint64 now; + int i; + SDL_Event event; + + SDL_Renderer *renderer = state->renderers[0]; /* only 1 window */ + + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + + switch (event.type) { + case SDL_EVENT_WINDOW_RESIZED: + SDL_SetRenderViewport(renderer, NULL); + window_w = event.window.data1; + window_h = event.window.data2; + displayrect.w = (float)window_w; + displayrect.h = (float)window_h; + break; + case SDL_EVENT_MOUSE_BUTTON_DOWN: + displayrect.x = event.button.x - window_w / 2; + displayrect.y = event.button.y - window_h / 2; + break; + case SDL_EVENT_MOUSE_MOTION: + if (event.motion.state) { + displayrect.x = event.motion.x - window_w / 2; + displayrect.y = event.motion.y - window_h / 2; + } + break; + case SDL_EVENT_KEY_DOWN: + if (event.key.keysym.sym == SDLK_SPACE) { + paused = !paused; + break; + } + if (event.key.keysym.sym != SDLK_ESCAPE) { + break; + } + } + } + +#ifndef __EMSCRIPTEN__ + SDL_Delay(fpsdelay); +#endif + + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) { + continue; + } + MoveSprites(state->renderers[i]); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif + + frames++; + now = SDL_GetTicks(); + if (now >= next_fps_check) { + /* Print out some timing information */ + const Uint64 then = next_fps_check - fps_check_delay; + const double fps = ((double)frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + next_fps_check = now + fps_check_delay; + frames = 0; + } +} + + +int main(int argc, char **argv) +{ + SDL_RWops *handle; + int i; + int j; + int fps = 12; + int nodelay = 0; + int scale = 5; + char *filename = NULL; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + SDL_zeroa(MooseYUVSurfaces); + + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcmp(argv[i], "--fps") == 0) { + if (argv[i + 1]) { + consumed = 2; + fps = SDL_atoi(argv[i + 1]); + if (fps == 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "The --fps option requires an argument [from 1 to 1000], default is 12.\n"); + quit(10); + } + if ((fps < 0) || (fps > 1000)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "The --fps option must be in range from 1 to 1000, default is 12.\n"); + quit(10); + } + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "The --fps option requires an argument [from 1 to 1000], default is 12.\n"); + quit(10); + } + } else if (SDL_strcmp(argv[i], "--nodelay") == 0) { + consumed = 1; + nodelay = 1; + } else if (SDL_strcmp(argv[i], "--nostreaming") == 0) { + consumed = 1; + streaming = SDL_FALSE; + } else if (SDL_strcmp(argv[i], "--scale") == 0) { + consumed = 2; + if (argv[i + 1]) { + scale = SDL_atoi(argv[i + 1]); + if (scale == 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "The --scale option requires an argument [from 1 to 50], default is 5.\n"); + quit(10); + } + if ((scale < 0) || (scale > 50)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "The --scale option must be in range from 1 to 50, default is 5.\n"); + quit(10); + } + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "The --fps option requires an argument [from 1 to 1000], default is 12.\n"); + quit(10); + } + } else if (SDL_strcmp(argv[i], "--yuvformat") == 0) { + consumed = 2; + if (argv[i + 1]) { + char *fmt = argv[i + 1]; + + if (SDL_strcmp(fmt, "YV12") == 0) { + yuv_format = SDL_PIXELFORMAT_YV12; + } else if (SDL_strcmp(fmt, "IYUV") == 0) { + yuv_format = SDL_PIXELFORMAT_IYUV; + } else if (SDL_strcmp(fmt, "YUY2") == 0) { + yuv_format = SDL_PIXELFORMAT_YUY2; + } else if (SDL_strcmp(fmt, "UYVY") == 0) { + yuv_format = SDL_PIXELFORMAT_UYVY; + } else if (SDL_strcmp(fmt, "YVYU") == 0) { + yuv_format = SDL_PIXELFORMAT_YVYU; + } else if (SDL_strcmp(fmt, "NV12") == 0) { + yuv_format = SDL_PIXELFORMAT_NV12; + } else if (SDL_strcmp(fmt, "NV21") == 0) { + yuv_format = SDL_PIXELFORMAT_NV21; + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "The --yuvformat option requires one of the: YV12 (default), IYUV, YUY2, UYVY, YVYU, NV12, NV21)\n"); + quit(10); + } + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "The --yuvformat option requires one of the: YV12 (default), IYUV, YUY2, UYVY, YVYU, NV12, NV21)\n"); + quit(10); + } + } + + } + if (consumed < 0) { + static const char *options[] = { + "[--fps ]", + "[--nodelay]", + "[--yuvformat ] (one of the: YV12 (default), IYUV, YUY2, UYVY, YVYU, NV12, NV21)", + "[--scale ] (initial scale of the overlay)", + "[--nostreaming] path that use SDL_CreateTextureFromSurface() not STREAMING texture", + NULL + }; + SDLTest_CommonLogUsage(state, argv[0], options); + quit(1); + } + i += consumed; + } + + /* Force window size */ + state->window_w = MOOSEPIC_W * scale; + state->window_h = MOOSEPIC_H * scale; + + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + RawMooseData = (Uint8 *)SDL_malloc(MOOSEFRAME_SIZE * MOOSEFRAMES_COUNT); + if (RawMooseData == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Can't allocate memory for movie !\n"); + quit(1); + } + + /* load the trojan moose images */ + filename = GetResourceFilename(NULL, "moose.dat"); + if (filename == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory\n"); + quit(2); + } + handle = SDL_RWFromFile(filename, "rb"); + SDL_free(filename); + if (handle == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Can't find the file moose.dat !\n"); + quit(2); + } + + SDL_RWread(handle, RawMooseData, MOOSEFRAME_SIZE * MOOSEFRAMES_COUNT); + + SDL_RWclose(handle); + + /* Create the window and renderer */ + window_w = MOOSEPIC_W * scale; + window_h = MOOSEPIC_H * scale; + + if (state->num_windows != 1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Only one window allowed\n"); + quit(1); + } + + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + + if (streaming) { + MooseTexture = SDL_CreateTexture(renderer, yuv_format, SDL_TEXTUREACCESS_STREAMING, MOOSEPIC_W, MOOSEPIC_H); + if (MooseTexture == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create texture: %s\n", SDL_GetError()); + quit(5); + } + } + } + + /* Uncomment this to check vertex color with a YUV texture */ + /* SDL_SetTextureColorMod(MooseTexture, 0xff, 0x80, 0x80); */ + + for (i = 0; i < MOOSEFRAMES_COUNT; i++) { + /* Create RGB SDL_Surface */ + SDL_Surface *mooseRGBSurface = SDL_CreateSurface(MOOSEPIC_W, MOOSEPIC_H, SDL_PIXELFORMAT_RGB24); + if (mooseRGBSurface == NULL) { + quit(6); + } + + /* Load Moose into a RGB SDL_Surface */ + { + Uint8 *rgb = mooseRGBSurface->pixels; + Uint8 *frame = RawMooseData + i * MOOSEFRAME_SIZE; + for (j = 0; j < MOOSEFRAME_SIZE; ++j) { + rgb[0] = MooseColors[frame[j]].r; + rgb[1] = MooseColors[frame[j]].g; + rgb[2] = MooseColors[frame[j]].b; + rgb += 3; + } + } + + /* Convert to YUV SDL_Surface */ + MooseYUVSurfaces[i] = SDL_ConvertSurfaceFormat(mooseRGBSurface, yuv_format); + if (MooseYUVSurfaces[i] == NULL) { + quit(7); + } + + SDL_DestroySurface(mooseRGBSurface); + } + + SDL_free(RawMooseData); + RawMooseData = NULL; + + /* set the start frame */ + i = 0; + if (nodelay) { + fpsdelay = 0; + } else { + fpsdelay = 1000 / fps; + } + + displayrect.x = 0; + displayrect.y = 0; + displayrect.w = (float)window_w; + displayrect.h = (float)window_h; + + /* Ignore key up events, they don't even get filtered */ + SDL_SetEventEnabled(SDL_EVENT_KEY_UP, SDL_FALSE); + + /* Main render loop */ + frames = 0; + next_fps_check = SDL_GetTicks() + fps_check_delay; + done = 0; + + /* Loop, waiting for QUIT or RESIZE */ +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, nodelay ? 0 : fps, 1); +#else + while (!done) { + loop(); + } +#endif + + quit(0); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testplatform.c b/vendor/sdl-3.0.0/test/testplatform.c new file mode 100644 index 0000000..d310fca --- /dev/null +++ b/vendor/sdl-3.0.0/test/testplatform.c @@ -0,0 +1,490 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +#include +#include +#include + +/* + * Watcom C flags these as Warning 201: "Unreachable code" if you just + * compare them directly, so we push it through a function to keep the + * compiler quiet. --ryan. + */ +static int +badsize(size_t sizeoftype, size_t hardcodetype) +{ + return sizeoftype != hardcodetype; +} + +SDL_COMPILE_TIME_ASSERT(SDL_MAX_SINT8, SDL_MAX_SINT8 == 127); +SDL_COMPILE_TIME_ASSERT(SDL_MIN_SINT8, SDL_MIN_SINT8 == -128); +SDL_COMPILE_TIME_ASSERT(SDL_MAX_UINT8, SDL_MAX_UINT8 == 255); +SDL_COMPILE_TIME_ASSERT(SDL_MIN_UINT8, SDL_MIN_UINT8 == 0); + +SDL_COMPILE_TIME_ASSERT(SDL_MAX_SINT16, SDL_MAX_SINT16 == 32767); +SDL_COMPILE_TIME_ASSERT(SDL_MIN_SINT16, SDL_MIN_SINT16 == -32768); +SDL_COMPILE_TIME_ASSERT(SDL_MAX_UINT16, SDL_MAX_UINT16 == 65535); +SDL_COMPILE_TIME_ASSERT(SDL_MIN_UINT16, SDL_MIN_UINT16 == 0); + +SDL_COMPILE_TIME_ASSERT(SDL_MAX_SINT32, SDL_MAX_SINT32 == 2147483647); +SDL_COMPILE_TIME_ASSERT(SDL_MIN_SINT32, SDL_MIN_SINT32 == ~0x7fffffff); /* Instead of -2147483648, which is treated as unsigned by some compilers */ +SDL_COMPILE_TIME_ASSERT(SDL_MAX_UINT32, SDL_MAX_UINT32 == 4294967295u); +SDL_COMPILE_TIME_ASSERT(SDL_MIN_UINT32, SDL_MIN_UINT32 == 0); + +SDL_COMPILE_TIME_ASSERT(SDL_MAX_SINT64, SDL_MAX_SINT64 == 9223372036854775807ll); +SDL_COMPILE_TIME_ASSERT(SDL_MIN_SINT64, SDL_MIN_SINT64 == ~0x7fffffffffffffffll); /* Instead of -9223372036854775808, which is treated as unsigned by compilers */ +SDL_COMPILE_TIME_ASSERT(SDL_MAX_UINT64, SDL_MAX_UINT64 == 18446744073709551615ull); +SDL_COMPILE_TIME_ASSERT(SDL_MIN_UINT64, SDL_MIN_UINT64 == 0); + +static int TestTypes(SDL_bool verbose) +{ + int error = 0; + + if (badsize(sizeof(Uint8), 1)) { + if (verbose) { + SDL_Log("sizeof(Uint8) != 1, instead = %u\n", (unsigned int)sizeof(Uint8)); + } + ++error; + } + if (badsize(sizeof(Uint16), 2)) { + if (verbose) { + SDL_Log("sizeof(Uint16) != 2, instead = %u\n", (unsigned int)sizeof(Uint16)); + } + ++error; + } + if (badsize(sizeof(Uint32), 4)) { + if (verbose) { + SDL_Log("sizeof(Uint32) != 4, instead = %u\n", (unsigned int)sizeof(Uint32)); + } + ++error; + } + if (badsize(sizeof(Uint64), 8)) { + if (verbose) { + SDL_Log("sizeof(Uint64) != 8, instead = %u\n", (unsigned int)sizeof(Uint64)); + } + ++error; + } + if (verbose && !error) { + SDL_Log("All data types are the expected size.\n"); + } + + return error ? 1 : 0; +} + +static int TestEndian(SDL_bool verbose) +{ + int error = 0; + Uint16 value = 0x1234; + int real_byteorder; + int real_floatwordorder = 0; + Uint16 value16 = 0xCDAB; + Uint16 swapped16 = 0xABCD; + Uint32 value32 = 0xEFBEADDE; + Uint32 swapped32 = 0xDEADBEEF; + Uint64 value64, swapped64; + + union + { + double d; + Uint32 ui32[2]; + } value_double; + + value64 = 0xEFBEADDE; + value64 <<= 32; + value64 |= 0xCDAB3412; + swapped64 = 0x1234ABCD; + swapped64 <<= 32; + swapped64 |= 0xDEADBEEF; + value_double.d = 3.141593; + + if (verbose) { + SDL_Log("Detected a %s endian machine.\n", + (SDL_BYTEORDER == SDL_LIL_ENDIAN) ? "little" : "big"); + } + if ((*((char *)&value) >> 4) == 0x1) { + real_byteorder = SDL_BIG_ENDIAN; + } else { + real_byteorder = SDL_LIL_ENDIAN; + } + if (real_byteorder != SDL_BYTEORDER) { + if (verbose) { + SDL_Log("Actually a %s endian machine!\n", + (real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big"); + } + ++error; + } + if (verbose) { + SDL_Log("Detected a %s endian float word order machine.\n", + (SDL_FLOATWORDORDER == SDL_LIL_ENDIAN) ? "little" : "big"); + } + if (value_double.ui32[0] == 0x82c2bd7f && value_double.ui32[1] == 0x400921fb) { + real_floatwordorder = SDL_LIL_ENDIAN; + } else if (value_double.ui32[0] == 0x400921fb && value_double.ui32[1] == 0x82c2bd7f) { + real_floatwordorder = SDL_BIG_ENDIAN; + } + if (real_floatwordorder != SDL_FLOATWORDORDER) { + if (verbose) { + SDL_Log("Actually a %s endian float word order machine!\n", + (real_floatwordorder == SDL_LIL_ENDIAN) ? "little" : (real_floatwordorder == SDL_BIG_ENDIAN) ? "big" + : "unknown"); + } + ++error; + } + if (verbose) { + SDL_Log("Value 16 = 0x%X, swapped = 0x%X\n", value16, + SDL_Swap16(value16)); + } + if (SDL_Swap16(value16) != swapped16) { + if (verbose) { + SDL_Log("16 bit value swapped incorrectly!\n"); + } + ++error; + } + if (verbose) { + SDL_Log("Value 32 = 0x%" SDL_PRIX32 ", swapped = 0x%" SDL_PRIX32 "\n", + value32, + SDL_Swap32(value32)); + } + if (SDL_Swap32(value32) != swapped32) { + if (verbose) { + SDL_Log("32 bit value swapped incorrectly!\n"); + } + ++error; + } + if (verbose) { + SDL_Log("Value 64 = 0x%" SDL_PRIX64 ", swapped = 0x%" SDL_PRIX64 "\n", value64, + SDL_Swap64(value64)); + } + if (SDL_Swap64(value64) != swapped64) { + if (verbose) { + SDL_Log("64 bit value swapped incorrectly!\n"); + } + ++error; + } + return error ? 1 : 0; +} + +static int TST_allmul(void *a, void *b, int arg, void *result, void *expected) +{ + (*(long long *)result) = ((*(long long *)a) * (*(long long *)b)); + return (*(long long *)result) == (*(long long *)expected); +} + +static int TST_alldiv(void *a, void *b, int arg, void *result, void *expected) +{ + (*(long long *)result) = ((*(long long *)a) / (*(long long *)b)); + return (*(long long *)result) == (*(long long *)expected); +} + +static int TST_allrem(void *a, void *b, int arg, void *result, void *expected) +{ + (*(long long *)result) = ((*(long long *)a) % (*(long long *)b)); + return (*(long long *)result) == (*(long long *)expected); +} + +static int TST_ualldiv(void *a, void *b, int arg, void *result, void *expected) +{ + (*(unsigned long long *)result) = ((*(unsigned long long *)a) / (*(unsigned long long *)b)); + return (*(unsigned long long *)result) == (*(unsigned long long *)expected); +} + +static int TST_uallrem(void *a, void *b, int arg, void *result, void *expected) +{ + (*(unsigned long long *)result) = ((*(unsigned long long *)a) % (*(unsigned long long *)b)); + return (*(unsigned long long *)result) == (*(unsigned long long *)expected); +} + +static int TST_allshl(void *a, void *b, int arg, void *result, void *expected) +{ + (*(long long *)result) = (*(long long *)a) << arg; + return (*(long long *)result) == (*(long long *)expected); +} + +static int TST_aullshl(void *a, void *b, int arg, void *result, void *expected) +{ + (*(unsigned long long *)result) = (*(unsigned long long *)a) << arg; + return (*(unsigned long long *)result) == (*(unsigned long long *)expected); +} + +static int TST_allshr(void *a, void *b, int arg, void *result, void *expected) +{ + (*(long long *)result) = (*(long long *)a) >> arg; + return (*(long long *)result) == (*(long long *)expected); +} + +static int TST_aullshr(void *a, void *b, int arg, void *result, void *expected) +{ + (*(unsigned long long *)result) = (*(unsigned long long *)a) >> arg; + return (*(unsigned long long *)result) == (*(unsigned long long *)expected); +} + +typedef int (*LL_Intrinsic)(void *a, void *b, int arg, void *result, void *expected); + +typedef struct +{ + const char *operation; + LL_Intrinsic routine; + unsigned long long a, b; + int arg; + unsigned long long expected_result; +} LL_Test; + +static LL_Test LL_Tests[] = { + /* UNDEFINED {"_allshl", &TST_allshl, 0xFFFFFFFFFFFFFFFFll, 0ll, 65, 0x0000000000000000ll}, */ + { "_allshl", &TST_allshl, 0xFFFFFFFFFFFFFFFFll, 0ll, 1, 0xFFFFFFFFFFFFFFFEll }, + { "_allshl", &TST_allshl, 0xFFFFFFFFFFFFFFFFll, 0ll, 32, 0xFFFFFFFF00000000ll }, + { "_allshl", &TST_allshl, 0xFFFFFFFFFFFFFFFFll, 0ll, 33, 0xFFFFFFFE00000000ll }, + { "_allshl", &TST_allshl, 0xFFFFFFFFFFFFFFFFll, 0ll, 0, 0xFFFFFFFFFFFFFFFFll }, + + { "_allshr", &TST_allshr, 0xAAAAAAAA55555555ll, 0ll, 63, 0xFFFFFFFFFFFFFFFFll }, + /* UNDEFINED {"_allshr", &TST_allshr, 0xFFFFFFFFFFFFFFFFll, 0ll, 65, 0xFFFFFFFFFFFFFFFFll}, */ + { "_allshr", &TST_allshr, 0xFFFFFFFFFFFFFFFFll, 0ll, 1, 0xFFFFFFFFFFFFFFFFll }, + { "_allshr", &TST_allshr, 0xFFFFFFFFFFFFFFFFll, 0ll, 32, 0xFFFFFFFFFFFFFFFFll }, + { "_allshr", &TST_allshr, 0xFFFFFFFFFFFFFFFFll, 0ll, 33, 0xFFFFFFFFFFFFFFFFll }, + { "_allshr", &TST_allshr, 0xFFFFFFFFFFFFFFFFll, 0ll, 0, 0xFFFFFFFFFFFFFFFFll }, + /* UNDEFINED {"_allshr", &TST_allshr, 0x5F5F5F5F5F5F5F5Fll, 0ll, 65, 0x0000000000000000ll}, */ + { "_allshr", &TST_allshr, 0x5F5F5F5F5F5F5F5Fll, 0ll, 1, 0x2FAFAFAFAFAFAFAFll }, + { "_allshr", &TST_allshr, 0x5F5F5F5F5F5F5F5Fll, 0ll, 32, 0x000000005F5F5F5Fll }, + { "_allshr", &TST_allshr, 0x5F5F5F5F5F5F5F5Fll, 0ll, 33, 0x000000002FAFAFAFll }, + + /* UNDEFINED {"_aullshl", &TST_aullshl, 0xFFFFFFFFFFFFFFFFll, 0ll, 65, 0x0000000000000000ll}, */ + { "_aullshl", &TST_aullshl, 0xFFFFFFFFFFFFFFFFll, 0ll, 1, 0xFFFFFFFFFFFFFFFEll }, + { "_aullshl", &TST_aullshl, 0xFFFFFFFFFFFFFFFFll, 0ll, 32, 0xFFFFFFFF00000000ll }, + { "_aullshl", &TST_aullshl, 0xFFFFFFFFFFFFFFFFll, 0ll, 33, 0xFFFFFFFE00000000ll }, + { "_aullshl", &TST_aullshl, 0xFFFFFFFFFFFFFFFFll, 0ll, 0, 0xFFFFFFFFFFFFFFFFll }, + + /* UNDEFINED {"_aullshr", &TST_aullshr, 0xFFFFFFFFFFFFFFFFll, 0ll, 65, 0x0000000000000000ll}, */ + { "_aullshr", &TST_aullshr, 0xFFFFFFFFFFFFFFFFll, 0ll, 1, 0x7FFFFFFFFFFFFFFFll }, + { "_aullshr", &TST_aullshr, 0xFFFFFFFFFFFFFFFFll, 0ll, 32, 0x00000000FFFFFFFFll }, + { "_aullshr", &TST_aullshr, 0xFFFFFFFFFFFFFFFFll, 0ll, 33, 0x000000007FFFFFFFll }, + { "_aullshr", &TST_aullshr, 0xFFFFFFFFFFFFFFFFll, 0ll, 0, 0xFFFFFFFFFFFFFFFFll }, + + { "_allmul", &TST_allmul, 0xFFFFFFFFFFFFFFFFll, 0x0000000000000000ll, 0, 0x0000000000000000ll }, + { "_allmul", &TST_allmul, 0x0000000000000000ll, 0xFFFFFFFFFFFFFFFFll, 0, 0x0000000000000000ll }, + { "_allmul", &TST_allmul, 0x000000000FFFFFFFll, 0x0000000000000001ll, 0, 0x000000000FFFFFFFll }, + { "_allmul", &TST_allmul, 0x0000000000000001ll, 0x000000000FFFFFFFll, 0, 0x000000000FFFFFFFll }, + { "_allmul", &TST_allmul, 0x000000000FFFFFFFll, 0x0000000000000010ll, 0, 0x00000000FFFFFFF0ll }, + { "_allmul", &TST_allmul, 0x0000000000000010ll, 0x000000000FFFFFFFll, 0, 0x00000000FFFFFFF0ll }, + { "_allmul", &TST_allmul, 0x000000000FFFFFFFll, 0x0000000000000100ll, 0, 0x0000000FFFFFFF00ll }, + { "_allmul", &TST_allmul, 0x0000000000000100ll, 0x000000000FFFFFFFll, 0, 0x0000000FFFFFFF00ll }, + { "_allmul", &TST_allmul, 0x000000000FFFFFFFll, 0x0000000010000000ll, 0, 0x00FFFFFFF0000000ll }, + { "_allmul", &TST_allmul, 0x0000000010000000ll, 0x000000000FFFFFFFll, 0, 0x00FFFFFFF0000000ll }, + { "_allmul", &TST_allmul, 0x000000000FFFFFFFll, 0x0000000080000000ll, 0, 0x07FFFFFF80000000ll }, + { "_allmul", &TST_allmul, 0x0000000080000000ll, 0x000000000FFFFFFFll, 0, 0x07FFFFFF80000000ll }, + { "_allmul", &TST_allmul, 0xFFFFFFFFFFFFFFFEll, 0x0000000080000000ll, 0, 0xFFFFFFFF00000000ll }, + { "_allmul", &TST_allmul, 0x0000000080000000ll, 0xFFFFFFFFFFFFFFFEll, 0, 0xFFFFFFFF00000000ll }, + { "_allmul", &TST_allmul, 0xFFFFFFFFFFFFFFFEll, 0x0000000080000008ll, 0, 0xFFFFFFFEFFFFFFF0ll }, + { "_allmul", &TST_allmul, 0x0000000080000008ll, 0xFFFFFFFFFFFFFFFEll, 0, 0xFFFFFFFEFFFFFFF0ll }, + { "_allmul", &TST_allmul, 0x00000000FFFFFFFFll, 0x00000000FFFFFFFFll, 0, 0xFFFFFFFE00000001ll }, + + { "_alldiv", &TST_alldiv, 0x0000000000000000ll, 0x0000000000000001ll, 0, 0x0000000000000000ll }, + { "_alldiv", &TST_alldiv, 0x0000000000000000ll, 0xFFFFFFFFFFFFFFFFll, 0, 0x0000000000000000ll }, + { "_alldiv", &TST_alldiv, 0x0000000000000001ll, 0xFFFFFFFFFFFFFFFFll, 0, 0xFFFFFFFFFFFFFFFFll }, + { "_alldiv", &TST_alldiv, 0xFFFFFFFFFFFFFFFFll, 0x0000000000000001ll, 0, 0xFFFFFFFFFFFFFFFFll }, + { "_alldiv", &TST_alldiv, 0x0000000000000001ll, 0xFFFFFFFFFFFFFFFFll, 0, 0xFFFFFFFFFFFFFFFFll }, + { "_alldiv", &TST_alldiv, 0x0000000000000001ll, 0x0000000000000001ll, 0, 0x0000000000000001ll }, + { "_alldiv", &TST_alldiv, 0xFFFFFFFFFFFFFFFFll, 0xFFFFFFFFFFFFFFFFll, 0, 0x0000000000000001ll }, + { "_alldiv", &TST_alldiv, 0x000000000FFFFFFFll, 0x0000000000000001ll, 0, 0x000000000FFFFFFFll }, + { "_alldiv", &TST_alldiv, 0x0000000FFFFFFFFFll, 0x0000000000000010ll, 0, 0x00000000FFFFFFFFll }, + { "_alldiv", &TST_alldiv, 0x0000000000000100ll, 0x000000000FFFFFFFll, 0, 0x0000000000000000ll }, + { "_alldiv", &TST_alldiv, 0x00FFFFFFF0000000ll, 0x0000000010000000ll, 0, 0x000000000FFFFFFFll }, + { "_alldiv", &TST_alldiv, 0x07FFFFFF80000000ll, 0x0000000080000000ll, 0, 0x000000000FFFFFFFll }, + { "_alldiv", &TST_alldiv, 0xFFFFFFFFFFFFFFFEll, 0x0000000080000000ll, 0, 0x0000000000000000ll }, + { "_alldiv", &TST_alldiv, 0xFFFFFFFEFFFFFFF0ll, 0xFFFFFFFFFFFFFFFEll, 0, 0x0000000080000008ll }, + { "_alldiv", &TST_alldiv, 0x7FFFFFFEFFFFFFF0ll, 0xFFFFFFFFFFFFFFFEll, 0, 0xC000000080000008ll }, + { "_alldiv", &TST_alldiv, 0x7FFFFFFEFFFFFFF0ll, 0x0000FFFFFFFFFFFEll, 0, 0x0000000000007FFFll }, + { "_alldiv", &TST_alldiv, 0x7FFFFFFEFFFFFFF0ll, 0x7FFFFFFEFFFFFFF0ll, 0, 0x0000000000000001ll }, + + { "_allrem", &TST_allrem, 0x0000000000000000ll, 0x0000000000000001ll, 0, 0x0000000000000000ll }, + { "_allrem", &TST_allrem, 0x0000000000000000ll, 0xFFFFFFFFFFFFFFFFll, 0, 0x0000000000000000ll }, + { "_allrem", &TST_allrem, 0x0000000000000001ll, 0xFFFFFFFFFFFFFFFFll, 0, 0x0000000000000000ll }, + { "_allrem", &TST_allrem, 0xFFFFFFFFFFFFFFFFll, 0x0000000000000001ll, 0, 0x0000000000000000ll }, + { "_allrem", &TST_allrem, 0x0000000000000001ll, 0xFFFFFFFFFFFFFFFFll, 0, 0x0000000000000000ll }, + { "_allrem", &TST_allrem, 0x0000000000000001ll, 0x0000000000000001ll, 0, 0x0000000000000000ll }, + { "_allrem", &TST_allrem, 0xFFFFFFFFFFFFFFFFll, 0xFFFFFFFFFFFFFFFFll, 0, 0x0000000000000000ll }, + { "_allrem", &TST_allrem, 0x000000000FFFFFFFll, 0x0000000000000001ll, 0, 0x0000000000000000ll }, + { "_allrem", &TST_allrem, 0x0000000FFFFFFFFFll, 0x0000000000000010ll, 0, 0x000000000000000Fll }, + { "_allrem", &TST_allrem, 0x0000000000000100ll, 0x000000000FFFFFFFll, 0, 0x0000000000000100ll }, + { "_allrem", &TST_allrem, 0x00FFFFFFF0000000ll, 0x0000000010000000ll, 0, 0x0000000000000000ll }, + { "_allrem", &TST_allrem, 0x07FFFFFF80000000ll, 0x0000000080000000ll, 0, 0x0000000000000000ll }, + { "_allrem", &TST_allrem, 0xFFFFFFFFFFFFFFFEll, 0x0000000080000000ll, 0, 0xFFFFFFFFFFFFFFFEll }, + { "_allrem", &TST_allrem, 0xFFFFFFFEFFFFFFF0ll, 0xFFFFFFFFFFFFFFFEll, 0, 0x0000000000000000ll }, + { "_allrem", &TST_allrem, 0x7FFFFFFEFFFFFFF0ll, 0xFFFFFFFFFFFFFFFEll, 0, 0x0000000000000000ll }, + { "_allrem", &TST_allrem, 0x7FFFFFFEFFFFFFF0ll, 0x0000FFFFFFFFFFFEll, 0, 0x0000FFFF0000FFEEll }, + { "_allrem", &TST_allrem, 0x7FFFFFFEFFFFFFF0ll, 0x7FFFFFFEFFFFFFF0ll, 0, 0x0000000000000000ll }, + + { "_ualldiv", &TST_ualldiv, 0x0000000000000000ll, 0x0000000000000001ll, 0, 0x0000000000000000ll }, + { "_ualldiv", &TST_ualldiv, 0x0000000000000000ll, 0xFFFFFFFFFFFFFFFFll, 0, 0x0000000000000000ll }, + { "_ualldiv", &TST_ualldiv, 0x0000000000000001ll, 0xFFFFFFFFFFFFFFFFll, 0, 0x0000000000000000ll }, + { "_ualldiv", &TST_ualldiv, 0xFFFFFFFFFFFFFFFFll, 0x0000000000000001ll, 0, 0xFFFFFFFFFFFFFFFFll }, + { "_ualldiv", &TST_ualldiv, 0x0000000000000001ll, 0xFFFFFFFFFFFFFFFFll, 0, 0x0000000000000000ll }, + { "_ualldiv", &TST_ualldiv, 0x0000000000000001ll, 0x0000000000000001ll, 0, 0x0000000000000001ll }, + { "_ualldiv", &TST_ualldiv, 0xFFFFFFFFFFFFFFFFll, 0xFFFFFFFFFFFFFFFFll, 0, 0x0000000000000001ll }, + { "_ualldiv", &TST_ualldiv, 0x000000000FFFFFFFll, 0x0000000000000001ll, 0, 0x000000000FFFFFFFll }, + { "_ualldiv", &TST_ualldiv, 0x0000000FFFFFFFFFll, 0x0000000000000010ll, 0, 0x00000000FFFFFFFFll }, + { "_ualldiv", &TST_ualldiv, 0x0000000000000100ll, 0x000000000FFFFFFFll, 0, 0x0000000000000000ll }, + { "_ualldiv", &TST_ualldiv, 0x00FFFFFFF0000000ll, 0x0000000010000000ll, 0, 0x000000000FFFFFFFll }, + { "_ualldiv", &TST_ualldiv, 0x07FFFFFF80000000ll, 0x0000000080000000ll, 0, 0x000000000FFFFFFFll }, + { "_ualldiv", &TST_ualldiv, 0xFFFFFFFFFFFFFFFEll, 0x0000000080000000ll, 0, 0x00000001FFFFFFFFll }, + { "_ualldiv", &TST_ualldiv, 0xFFFFFFFEFFFFFFF0ll, 0xFFFFFFFFFFFFFFFEll, 0, 0x0000000000000000ll }, + { "_ualldiv", &TST_ualldiv, 0x7FFFFFFEFFFFFFF0ll, 0xFFFFFFFFFFFFFFFEll, 0, 0x0000000000000000ll }, + { "_ualldiv", &TST_ualldiv, 0x7FFFFFFEFFFFFFF0ll, 0x0000FFFFFFFFFFFEll, 0, 0x0000000000007FFFll }, + { "_ualldiv", &TST_ualldiv, 0x7FFFFFFEFFFFFFF0ll, 0x7FFFFFFEFFFFFFF0ll, 0, 0x0000000000000001ll }, + + { "_uallrem", &TST_uallrem, 0x0000000000000000ll, 0x0000000000000001ll, 0, 0x0000000000000000ll }, + { "_uallrem", &TST_uallrem, 0x0000000000000000ll, 0xFFFFFFFFFFFFFFFFll, 0, 0x0000000000000000ll }, + { "_uallrem", &TST_uallrem, 0x0000000000000001ll, 0xFFFFFFFFFFFFFFFFll, 0, 0x0000000000000001ll }, + { "_uallrem", &TST_uallrem, 0xFFFFFFFFFFFFFFFFll, 0x0000000000000001ll, 0, 0x0000000000000000ll }, + { "_uallrem", &TST_uallrem, 0x0000000000000001ll, 0xFFFFFFFFFFFFFFFFll, 0, 0x0000000000000001ll }, + { "_uallrem", &TST_uallrem, 0x0000000000000001ll, 0x0000000000000001ll, 0, 0x0000000000000000ll }, + { "_uallrem", &TST_uallrem, 0xFFFFFFFFFFFFFFFFll, 0xFFFFFFFFFFFFFFFFll, 0, 0x0000000000000000ll }, + { "_uallrem", &TST_uallrem, 0x000000000FFFFFFFll, 0x0000000000000001ll, 0, 0x0000000000000000ll }, + { "_uallrem", &TST_uallrem, 0x0000000FFFFFFFFFll, 0x0000000000000010ll, 0, 0x000000000000000Fll }, + { "_uallrem", &TST_uallrem, 0x0000000000000100ll, 0x000000000FFFFFFFll, 0, 0x0000000000000100ll }, + { "_uallrem", &TST_uallrem, 0x00FFFFFFF0000000ll, 0x0000000010000000ll, 0, 0x0000000000000000ll }, + { "_uallrem", &TST_uallrem, 0x07FFFFFF80000000ll, 0x0000000080000000ll, 0, 0x0000000000000000ll }, + { "_uallrem", &TST_uallrem, 0xFFFFFFFFFFFFFFFEll, 0x0000000080000000ll, 0, 0x000000007FFFFFFEll }, + { "_uallrem", &TST_uallrem, 0xFFFFFFFEFFFFFFF0ll, 0xFFFFFFFFFFFFFFFEll, 0, 0xFFFFFFFEFFFFFFF0ll }, + { "_uallrem", &TST_uallrem, 0x7FFFFFFEFFFFFFF0ll, 0xFFFFFFFFFFFFFFFEll, 0, 0x7FFFFFFEFFFFFFF0ll }, + { "_uallrem", &TST_uallrem, 0x7FFFFFFEFFFFFFF0ll, 0x0000FFFFFFFFFFFEll, 0, 0x0000FFFF0000FFEEll }, + { "_uallrem", &TST_uallrem, 0x7FFFFFFEFFFFFFF0ll, 0x7FFFFFFEFFFFFFF0ll, 0, 0x0000000000000000ll }, + + { NULL, NULL, 0, 0, 0, 0 } +}; + +static int Test64Bit(SDL_bool verbose) +{ + LL_Test *t; + int failed = 0; + + for (t = LL_Tests; t->routine != NULL; t++) { + unsigned long long result = 0; + unsigned int *al = (unsigned int *)&t->a; + unsigned int *bl = (unsigned int *)&t->b; + unsigned int *el = (unsigned int *)&t->expected_result; + unsigned int *rl = (unsigned int *)&result; + + if (!t->routine(&t->a, &t->b, t->arg, &result, &t->expected_result)) { + if (verbose) { + SDL_Log("%s(0x%08X%08X, 0x%08X%08X, %3d, produced: 0x%08X%08X, expected: 0x%08X%08X\n", t->operation, al[1], al[0], bl[1], bl[0], + t->arg, rl[1], rl[0], el[1], el[0]); + } + ++failed; + } + } + if (verbose && (failed == 0)) { + SDL_Log("All 64bit intrinsic tests passed\n"); + } + return failed ? 1 : 0; +} + +static int TestCPUInfo(SDL_bool verbose) +{ + if (verbose) { + SDL_Log("CPU count: %d\n", SDL_GetCPUCount()); + SDL_Log("CPU cache line size: %d\n", SDL_GetCPUCacheLineSize()); + SDL_Log("AltiVec %s\n", SDL_HasAltiVec() ? "detected" : "not detected"); + SDL_Log("MMX %s\n", SDL_HasMMX() ? "detected" : "not detected"); + SDL_Log("SSE %s\n", SDL_HasSSE() ? "detected" : "not detected"); + SDL_Log("SSE2 %s\n", SDL_HasSSE2() ? "detected" : "not detected"); + SDL_Log("SSE3 %s\n", SDL_HasSSE3() ? "detected" : "not detected"); + SDL_Log("SSE4.1 %s\n", SDL_HasSSE41() ? "detected" : "not detected"); + SDL_Log("SSE4.2 %s\n", SDL_HasSSE42() ? "detected" : "not detected"); + SDL_Log("AVX %s\n", SDL_HasAVX() ? "detected" : "not detected"); + SDL_Log("AVX2 %s\n", SDL_HasAVX2() ? "detected" : "not detected"); + SDL_Log("AVX-512F %s\n", SDL_HasAVX512F() ? "detected" : "not detected"); + SDL_Log("ARM SIMD %s\n", SDL_HasARMSIMD() ? "detected" : "not detected"); + SDL_Log("NEON %s\n", SDL_HasNEON() ? "detected" : "not detected"); + SDL_Log("LSX %s\n", SDL_HasLSX() ? "detected" : "not detected"); + SDL_Log("LASX %s\n", SDL_HasLASX() ? "detected" : "not detected"); + SDL_Log("System RAM %d MB\n", SDL_GetSystemRAM()); + } + return 0; +} + +static int TestAssertions(SDL_bool verbose) +{ + SDL_assert(1); + SDL_assert_release(1); + SDL_assert_paranoid(1); + SDL_assert(0 || 1); + SDL_assert_release(0 || 1); + SDL_assert_paranoid(0 || 1); + +#if 0 /* enable this to test assertion failures. */ + SDL_assert_release(1 == 2); + SDL_assert_release(5 < 4); + SDL_assert_release(0 && "This is a test"); +#endif + + { + const SDL_AssertData *item = SDL_GetAssertionReport(); + while (item) { + SDL_Log("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\n", + item->condition, item->function, item->filename, + item->linenum, item->trigger_count, + item->always_ignore ? "yes" : "no"); + item = item->next; + } + } + return 0; +} + +int main(int argc, char *argv[]) +{ + int i; + SDL_bool verbose = SDL_TRUE; + int status = 0; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (SDL_strcmp(argv[i], "-q") == 0) { + verbose = SDL_FALSE; + consumed = 1; + } + } + if (consumed <= 0) { + static const char *options[] = { "[-q]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + return 1; + } + + i += consumed; + } + + if (verbose) { + SDL_Log("This system is running %s\n", SDL_GetPlatform()); + } + + status += TestTypes(verbose); + status += TestEndian(verbose); + status += Test64Bit(verbose); + status += TestCPUInfo(verbose); + status += TestAssertions(verbose); + + SDLTest_CommonDestroyState(state); + + return status; +} diff --git a/vendor/sdl-3.0.0/test/testpopup.c b/vendor/sdl-3.0.0/test/testpopup.c new file mode 100644 index 0000000..a8ecabe --- /dev/null +++ b/vendor/sdl-3.0.0/test/testpopup.c @@ -0,0 +1,278 @@ +/* +Copyright (C) 1997-2023 Sam Lantinga + +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. +*/ +/* Simple program: Move N sprites around on the screen as fast as possible */ + +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include +#include + +#define MENU_WIDTH 120 +#define MENU_HEIGHT 300 + +#define TOOLTIP_DELAY 500 +#define TOOLTIP_WIDTH 175 +#define TOOLTIP_HEIGHT 32 + +static SDLTest_CommonState *state; +static int num_menus; +static Uint64 tooltip_timer; +static int done; +static const SDL_Color colors[] = { + { 0x7F, 0x00, 0x00, 0xFF }, + { 0x00, 0x7F, 0x00, 0xFF }, + { 0x00, 0x00, 0x7F, 0xFF } +}; + +struct PopupWindow +{ + SDL_Window *win; + SDL_Window *parent; + SDL_Renderer *renderer; + int idx; +}; + +static struct PopupWindow *menus; +static struct PopupWindow tooltip; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void quit(int rc) +{ + SDL_free(menus); + menus = NULL; + + SDLTest_CommonQuit(state); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static int get_menu_index_by_window(SDL_Window *window) +{ + int i; + for (i = 0; i < num_menus; ++i) { + if (menus[i].win == window) { + return i; + } + } + + return -1; +} + +static SDL_bool window_is_root(SDL_Window *window) +{ + int i; + for (i = 0; i < state->num_windows; ++i) { + if (window == state->windows[i]) { + return SDL_TRUE; + } + } + + return SDL_FALSE; +} + +static SDL_bool create_popup(struct PopupWindow *new_popup, SDL_bool is_menu) +{ + SDL_Window *focus; + SDL_Window *new_win; + SDL_Renderer *new_renderer; + const int w = is_menu ? MENU_WIDTH : TOOLTIP_WIDTH; + const int h = is_menu ? MENU_HEIGHT : TOOLTIP_HEIGHT; + const int v_off = is_menu ? 0 : 32; + const Uint32 flags = is_menu ? SDL_WINDOW_POPUP_MENU : SDL_WINDOW_TOOLTIP; + float x, y; + + focus = SDL_GetMouseFocus(); + + SDL_GetMouseState(&x, &y); + new_win = SDL_CreatePopupWindow(focus, + (int)x, (int)y + v_off, w, h, flags); + + if (new_win) { + new_renderer = SDL_CreateRenderer(new_win, state->renderdriver, state->render_flags); + + new_popup->win = new_win; + new_popup->renderer = new_renderer; + new_popup->parent = focus; + + return SDL_TRUE; + } + + SDL_zerop(new_popup); + return SDL_FALSE; +} + +static void close_popups(void) +{ + int i; + + for (i = 0; i < num_menus; ++i) { + /* Destroying the lowest level window recursively destroys the child windows */ + if (window_is_root(menus[i].parent)) { + SDL_DestroyWindow(menus[i].win); + } + } + SDL_free(menus); + menus = NULL; + num_menus = 0; + + /* If the tooltip was a child of a popup, it was recursively destroyed with the popup */ + if (!window_is_root(tooltip.parent)) { + SDL_zero(tooltip); + } +} + +static void loop(void) +{ + int i; + char fmt_str[128]; + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + if (event.type == SDL_EVENT_MOUSE_MOTION) { + /* Hide the tooltip and restart the timer if the mouse is moved */ + if (tooltip.win) { + SDL_DestroyWindow(tooltip.win); + SDL_zero(tooltip); + } + tooltip_timer = SDL_GetTicks() + TOOLTIP_DELAY; + + if (num_menus > 0 && event.motion.windowID == SDL_GetWindowID(menus[0].parent)) { + int x = (int)event.motion.x; + int y = (int)event.motion.y; + + SDL_SetWindowPosition(menus[0].win, x, y); + } + } else if (event.type == SDL_EVENT_MOUSE_BUTTON_DOWN) { + /* Left click closes the popup menus */ + if (event.button.button == SDL_BUTTON_LEFT) { + close_popups(); + } else if (event.button.button == SDL_BUTTON_RIGHT) { + /* Create a new popup menu */ + menus = SDL_realloc(menus, sizeof(struct PopupWindow) * (num_menus + 1)); + if (create_popup(&menus[num_menus], SDL_TRUE)) { + ++num_menus; + } + } + } else if (event.type == SDL_EVENT_KEY_DOWN) { + if (event.key.keysym.sym == SDLK_SPACE) { + for (i = 0; i < num_menus; ++i) { + if (SDL_GetWindowFlags(menus[i].win) & SDL_WINDOW_HIDDEN) { + SDL_ShowWindow(menus[i].win); + } else { + SDL_HideWindow(menus[i].win); + } + } + /* Don't process this event in SDLTest_CommonEvent() */ + continue; + } + } + + SDLTest_CommonEvent(state, &event, &done); + } + + /* Show the tooltip if the delay period has elapsed */ + if (SDL_GetTicks() > tooltip_timer) { + if (tooltip.win == NULL) { + create_popup(&tooltip, SDL_FALSE); + } + } + + /* Draw the window */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_RenderClear(renderer); + SDL_RenderPresent(renderer); + } + + /* Draw the menus in alternating colors */ + for (i = 0; i < num_menus; ++i) { + const SDL_Color *c = &colors[i % SDL_arraysize(colors)]; + SDL_Renderer *renderer = menus[i].renderer; + + SDL_SetRenderDrawColor(renderer, c->r, c->g, c->b, c->a); + SDL_RenderClear(renderer); + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); + SDL_snprintf(fmt_str, sizeof(fmt_str), "Popup Menu %i", i); + SDLTest_DrawString(renderer, 10.0f, 10.0f, fmt_str); + SDL_RenderPresent(renderer); + } + + /* Draw the tooltip */ + if (tooltip.win) { + int menu_idx; + + SDL_SetRenderDrawColor(tooltip.renderer, 0x00, 0x00, 0x00, 0xFF); + SDL_RenderClear(tooltip.renderer); + SDL_SetRenderDrawColor(tooltip.renderer, 0xFF, 0xFF, 0xFF, 0xFF); + + menu_idx = get_menu_index_by_window(tooltip.parent); + if (menu_idx >= 0) { + SDL_snprintf(fmt_str, sizeof(fmt_str), "Tooltip for popup %i", menu_idx); + } else { + SDL_snprintf(fmt_str, sizeof(fmt_str), "Toplevel tooltip"); + } + SDLTest_DrawString(tooltip.renderer, 10.0f, TOOLTIP_HEIGHT / 2, fmt_str); + SDL_RenderPresent(tooltip.renderer); + } +} + +int main(int argc, char *argv[]) +{ + int i; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (!SDLTest_CommonInit(state)) { + SDLTest_CommonQuit(state); + quit(2); + } + + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + + /* Main render loop */ + done = 0; +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + quit(0); + /* keep the compiler happy ... */ + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testpower.c b/vendor/sdl-3.0.0/test/testpower.c new file mode 100644 index 0000000..f9baefb --- /dev/null +++ b/vendor/sdl-3.0.0/test/testpower.c @@ -0,0 +1,93 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +/* Simple test of power subsystem. */ + +#include +#include +#include + +static void +report_power(void) +{ + int seconds, percent; + const SDL_PowerState state = SDL_GetPowerInfo(&seconds, &percent); + const char *statestr = NULL; + + SDL_Log("SDL-reported power info...\n"); + switch (state) { + case SDL_POWERSTATE_UNKNOWN: + statestr = "Unknown"; + break; + case SDL_POWERSTATE_ON_BATTERY: + statestr = "On battery"; + break; + case SDL_POWERSTATE_NO_BATTERY: + statestr = "No battery"; + break; + case SDL_POWERSTATE_CHARGING: + statestr = "Charging"; + break; + case SDL_POWERSTATE_CHARGED: + statestr = "Charged"; + break; + default: + statestr = "!!API ERROR!!"; + break; + } + + SDL_Log("State: %s\n", statestr); + + if (percent == -1) { + SDL_Log("Percent left: unknown\n"); + } else { + SDL_Log("Percent left: %d%%\n", percent); + } + + if (seconds == -1) { + SDL_Log("Time left: unknown\n"); + } else { + SDL_Log("Time left: %d minutes, %d seconds\n", seconds / 60, seconds % 60); + } +} + +int main(int argc, char *argv[]) +{ + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init() failed: %s\n", SDL_GetError()); + return 1; + } + + report_power(); + + SDL_Quit(); + SDLTest_CommonDestroyState(state); + + return 0; +} + +/* end of testpower.c ... */ diff --git a/vendor/sdl-3.0.0/test/testqsort.c b/vendor/sdl-3.0.0/test/testqsort.c new file mode 100644 index 0000000..b4a17c2 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testqsort.c @@ -0,0 +1,129 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +#include +#include +#include + +static int SDLCALL +num_compare(const void *_a, const void *_b) +{ + const int a = *((const int *)_a); + const int b = *((const int *)_b); + return (a < b) ? -1 : ((a > b) ? 1 : 0); +} + +static void +test_sort(const char *desc, int *nums, const int arraylen) +{ + int i; + int prev; + + SDL_Log("test: %s arraylen=%d", desc, arraylen); + + SDL_qsort(nums, arraylen, sizeof(nums[0]), num_compare); + + prev = nums[0]; + for (i = 1; i < arraylen; i++) { + const int val = nums[i]; + if (val < prev) { + SDL_Log("sort is broken!"); + return; + } + prev = val; + } +} + +int main(int argc, char *argv[]) +{ + static int nums[1024 * 100]; + static const int itervals[] = { SDL_arraysize(nums), 12 }; + int i; + int iteration; + SDLTest_RandomContext rndctx; + SDLTest_CommonState *state; + int seed_seen = 0; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (!seed_seen) { + Uint64 seed = 0; + char *endptr = NULL; + + seed = SDL_strtoull(argv[i], &endptr, 0); + if (endptr != argv[i] && *endptr == '\0') { + seed_seen = 1; + consumed = 1; + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Invalid seed. Use a decimal or hexadecimal number.\n"); + return 1; + } + if (seed <= ((Uint64)0xffffffff)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Seed must be equal or greater than 0x100000000.\n"); + return 1; + } + SDLTest_RandomInit(&rndctx, (unsigned int)(seed >> 32), (unsigned int)(seed & 0xffffffff)); + } + } + if (consumed <= 0) { + static const char *options[] = { "[seed]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + return 1; + } + + i += consumed; + } + + if (!seed_seen) { + SDLTest_RandomInitTime(&rndctx); + } + SDL_Log("Using random seed 0x%08x%08x\n", rndctx.x, rndctx.c); + + for (iteration = 0; iteration < SDL_arraysize(itervals); iteration++) { + const int arraylen = itervals[iteration]; + + for (i = 0; i < arraylen; i++) { + nums[i] = i; + } + test_sort("already sorted", nums, arraylen); + + for (i = 0; i < arraylen; i++) { + nums[i] = i; + } + nums[arraylen - 1] = -1; + test_sort("already sorted except last element", nums, arraylen); + + for (i = 0; i < arraylen; i++) { + nums[i] = (arraylen - 1) - i; + } + test_sort("reverse sorted", nums, arraylen); + + for (i = 0; i < arraylen; i++) { + nums[i] = SDLTest_RandomInt(&rndctx); + } + test_sort("random sorted", nums, arraylen); + } + + SDLTest_CommonDestroyState(state); + + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testrelative.c b/vendor/sdl-3.0.0/test/testrelative.c new file mode 100644 index 0000000..c02518e --- /dev/null +++ b/vendor/sdl-3.0.0/test/testrelative.c @@ -0,0 +1,136 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Simple program: Test relative mouse motion */ + +#include +#include + +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +static SDLTest_CommonState *state; +static int i, done; +static float mouseX, mouseY; +static SDL_FRect rect; +static SDL_Event event; + +static void DrawRects(SDL_Renderer *renderer) +{ + SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); + rect.x = mouseX; + rect.y = mouseY; + SDL_RenderFillRect(renderer, &rect); +} + +static void loop(void) +{ + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + switch (event.type) { + case SDL_EVENT_MOUSE_MOTION: + { + mouseX += event.motion.xrel; + mouseY += event.motion.yrel; + } break; + } + } + for (i = 0; i < state->num_windows; ++i) { + SDL_Rect viewport; + SDL_Renderer *renderer = state->renderers[i]; + if (state->windows[i] == NULL) { + continue; + } + SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF); + SDL_RenderClear(renderer); + + /* Wrap the cursor rectangle at the screen edges to keep it visible */ + SDL_GetRenderViewport(renderer, &viewport); + if (rect.x < viewport.x) { + rect.x += viewport.w; + } + if (rect.y < viewport.y) { + rect.y += viewport.h; + } + if (rect.x > viewport.x + viewport.w) { + rect.x -= viewport.w; + } + if (rect.y > viewport.y + viewport.h) { + rect.y -= viewport.h; + } + + DrawRects(renderer); + + SDL_RenderPresent(renderer); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int main(int argc, char *argv[]) +{ + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (!SDLTest_CommonInit(state)) { + return 2; + } + + /* Create the windows and initialize the renderers */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE); + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + + srand((unsigned int)time(NULL)); + if (SDL_SetRelativeMouseMode(SDL_TRUE) < 0) { + return 3; + } + + rect.x = DEFAULT_WINDOW_WIDTH / 2; + rect.y = DEFAULT_WINDOW_HEIGHT / 2; + rect.w = 10; + rect.h = 10; + /* Main render loop */ + done = 0; +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + SDLTest_CommonQuit(state); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testrendercopyex.c b/vendor/sdl-3.0.0/test/testrendercopyex.c new file mode 100644 index 0000000..ffb5229 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testrendercopyex.c @@ -0,0 +1,177 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +/* Simple program: Move N sprites around on the screen as fast as possible */ + +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include +#include "testutils.h" + +static SDLTest_CommonState *state; + +typedef struct +{ + SDL_Window *window; + SDL_Renderer *renderer; + SDL_Texture *background; + SDL_Texture *sprite; + SDL_FRect sprite_rect; + int scale_direction; +} DrawState; + +static DrawState *drawstates; +static int done; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static void Draw(DrawState *s) +{ + SDL_Rect viewport; + SDL_Texture *target; + SDL_FPoint *center = NULL; + SDL_FPoint origin = { 0.0f, 0.0f }; + + SDL_GetRenderViewport(s->renderer, &viewport); + + target = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, viewport.w, viewport.h); + SDL_SetRenderTarget(s->renderer, target); + + /* Draw the background */ + SDL_RenderTexture(s->renderer, s->background, NULL, NULL); + + /* Scale and draw the sprite */ + s->sprite_rect.w += s->scale_direction; + s->sprite_rect.h += s->scale_direction; + if (s->scale_direction > 0) { + center = &origin; + if (s->sprite_rect.w >= viewport.w || s->sprite_rect.h >= viewport.h) { + s->scale_direction = -1; + } + } else { + if (s->sprite_rect.w <= 1 || s->sprite_rect.h <= 1) { + s->scale_direction = 1; + } + } + s->sprite_rect.x = (float)((viewport.w - s->sprite_rect.w) / 2); + s->sprite_rect.y = (float)((viewport.h - s->sprite_rect.h) / 2); + + SDL_RenderTextureRotated(s->renderer, s->sprite, NULL, &s->sprite_rect, (double)s->sprite_rect.w, center, (SDL_RendererFlip)s->scale_direction); + + SDL_SetRenderTarget(s->renderer, NULL); + SDL_RenderTexture(s->renderer, target, NULL, NULL); + SDL_DestroyTexture(target); + + /* Update the screen! */ + SDL_RenderPresent(s->renderer); + /* SDL_Delay(10); */ +} + +static void loop(void) +{ + int i; + SDL_Event event; + + /* Check for events */ + + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) { + continue; + } + Draw(&drawstates[i]); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int main(int argc, char *argv[]) +{ + int i; + int frames; + Uint64 then, now; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (!SDLTest_CommonDefaultArgs(state, argc, argv) || !SDLTest_CommonInit(state)) { + SDLTest_CommonQuit(state); + return 1; + } + + drawstates = SDL_stack_alloc(DrawState, state->num_windows); + for (i = 0; i < state->num_windows; ++i) { + DrawState *drawstate = &drawstates[i]; + int w, h; + + drawstate->window = state->windows[i]; + drawstate->renderer = state->renderers[i]; + drawstate->sprite = LoadTexture(drawstate->renderer, "icon.bmp", SDL_TRUE, NULL, NULL); + drawstate->background = LoadTexture(drawstate->renderer, "sample.bmp", SDL_FALSE, NULL, NULL); + if (!drawstate->sprite || !drawstate->background) { + quit(2); + } + SDL_QueryTexture(drawstate->sprite, NULL, NULL, &w, &h); + drawstate->sprite_rect.w = (float)w; + drawstate->sprite_rect.h = (float)h; + drawstate->scale_direction = 1; + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + } +#endif + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double)frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + + SDL_stack_free(drawstates); + + quit(0); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testrendertarget.c b/vendor/sdl-3.0.0/test/testrendertarget.c new file mode 100644 index 0000000..abaf09c --- /dev/null +++ b/vendor/sdl-3.0.0/test/testrendertarget.c @@ -0,0 +1,292 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +/* Simple program: Move N sprites around on the screen as fast as possible */ + +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include +#include "testutils.h" + +static SDLTest_CommonState *state; + +typedef struct +{ + SDL_Window *window; + SDL_Renderer *renderer; + SDL_Texture *background; + SDL_Texture *sprite; + SDL_FRect sprite_rect; + int scale_direction; +} DrawState; + +static DrawState *drawstates; +static int done; +static SDL_bool test_composite = SDL_FALSE; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static SDL_bool +DrawComposite(DrawState *s) +{ + SDL_Rect viewport; + SDL_FRect R; + SDL_Texture *target; + + static SDL_bool blend_tested = SDL_FALSE; + if (!blend_tested) { + SDL_Texture *A, *B; + Uint32 P; + + A = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, 1, 1); + SDL_SetTextureBlendMode(A, SDL_BLENDMODE_BLEND); + + B = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, 1, 1); + SDL_SetTextureBlendMode(B, SDL_BLENDMODE_BLEND); + + SDL_SetRenderTarget(s->renderer, A); + SDL_SetRenderDrawColor(s->renderer, 0x00, 0x00, 0x00, 0x80); + SDL_RenderFillRect(s->renderer, NULL); + + SDL_SetRenderTarget(s->renderer, B); + SDL_SetRenderDrawColor(s->renderer, 0x00, 0x00, 0x00, 0x00); + SDL_RenderFillRect(s->renderer, NULL); + SDL_RenderTexture(s->renderer, A, NULL, NULL); + SDL_RenderReadPixels(s->renderer, NULL, SDL_PIXELFORMAT_ARGB8888, &P, sizeof(P)); + + SDL_Log("Blended pixel: 0x%8.8" SDL_PRIX32 "\n", P); + + SDL_DestroyTexture(A); + SDL_DestroyTexture(B); + blend_tested = SDL_TRUE; + } + + SDL_GetRenderViewport(s->renderer, &viewport); + + target = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, viewport.w, viewport.h); + SDL_SetTextureBlendMode(target, SDL_BLENDMODE_BLEND); + SDL_SetRenderTarget(s->renderer, target); + + /* Draw the background. + This is solid black so when the sprite is copied to it, any per-pixel alpha will be blended through. + */ + SDL_SetRenderDrawColor(s->renderer, 0x00, 0x00, 0x00, 0x00); + SDL_RenderFillRect(s->renderer, NULL); + + /* Scale and draw the sprite */ + s->sprite_rect.w += s->scale_direction; + s->sprite_rect.h += s->scale_direction; + if (s->scale_direction > 0) { + if (s->sprite_rect.w >= viewport.w || s->sprite_rect.h >= viewport.h) { + s->scale_direction = -1; + } + } else { + if (s->sprite_rect.w <= 1 || s->sprite_rect.h <= 1) { + s->scale_direction = 1; + } + } + s->sprite_rect.x = (float)((viewport.w - s->sprite_rect.w) / 2); + s->sprite_rect.y = (float)((viewport.h - s->sprite_rect.h) / 2); + + SDL_RenderTexture(s->renderer, s->sprite, NULL, &s->sprite_rect); + + SDL_SetRenderTarget(s->renderer, NULL); + SDL_RenderTexture(s->renderer, s->background, NULL, NULL); + + SDL_SetRenderDrawBlendMode(s->renderer, SDL_BLENDMODE_BLEND); + SDL_SetRenderDrawColor(s->renderer, 0xff, 0x00, 0x00, 0x80); + R.x = 0.0f; + R.y = 0.0f; + R.w = 100.0f; + R.h = 100.0f; + SDL_RenderFillRect(s->renderer, &R); + SDL_SetRenderDrawBlendMode(s->renderer, SDL_BLENDMODE_NONE); + + SDL_RenderTexture(s->renderer, target, NULL, NULL); + SDL_DestroyTexture(target); + + /* Update the screen! */ + SDL_RenderPresent(s->renderer); + return SDL_TRUE; +} + +static SDL_bool +Draw(DrawState *s) +{ + SDL_Rect viewport; + SDL_Texture *target; + + SDL_GetRenderViewport(s->renderer, &viewport); + + target = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, viewport.w, viewport.h); + if (target == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create render target texture: %s\n", SDL_GetError()); + return SDL_FALSE; + } + SDL_SetRenderTarget(s->renderer, target); + + /* Draw the background */ + SDL_RenderTexture(s->renderer, s->background, NULL, NULL); + + /* Scale and draw the sprite */ + s->sprite_rect.w += s->scale_direction; + s->sprite_rect.h += s->scale_direction; + if (s->scale_direction > 0) { + if (s->sprite_rect.w >= viewport.w || s->sprite_rect.h >= viewport.h) { + s->scale_direction = -1; + } + } else { + if (s->sprite_rect.w <= 1 || s->sprite_rect.h <= 1) { + s->scale_direction = 1; + } + } + s->sprite_rect.x = (float)((viewport.w - s->sprite_rect.w) / 2); + s->sprite_rect.y = (float)((viewport.h - s->sprite_rect.h) / 2); + + SDL_RenderTexture(s->renderer, s->sprite, NULL, &s->sprite_rect); + + SDL_SetRenderTarget(s->renderer, NULL); + SDL_RenderTexture(s->renderer, target, NULL, NULL); + SDL_DestroyTexture(target); + + /* Update the screen! */ + SDL_RenderPresent(s->renderer); + return SDL_TRUE; +} + +static void loop(void) +{ + int i; + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) { + continue; + } + if (test_composite) { + if (!DrawComposite(&drawstates[i])) { + done = 1; + } + } else { + if (!Draw(&drawstates[i])) { + done = 1; + } + } + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int main(int argc, char *argv[]) +{ + int i; + int frames; + Uint64 then, now; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--composite") == 0) { + test_composite = SDL_TRUE; + consumed = 1; + } + } + if (consumed < 0) { + static const char *options[] = { "[--composite]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + quit(1); + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + drawstates = SDL_stack_alloc(DrawState, state->num_windows); + for (i = 0; i < state->num_windows; ++i) { + DrawState *drawstate = &drawstates[i]; + int w, h; + + drawstate->window = state->windows[i]; + drawstate->renderer = state->renderers[i]; + if (test_composite) { + drawstate->sprite = LoadTexture(drawstate->renderer, "icon-alpha.bmp", SDL_TRUE, NULL, NULL); + } else { + drawstate->sprite = LoadTexture(drawstate->renderer, "icon.bmp", SDL_TRUE, NULL, NULL); + } + drawstate->background = LoadTexture(drawstate->renderer, "sample.bmp", SDL_FALSE, NULL, NULL); + if (!drawstate->sprite || !drawstate->background) { + quit(2); + } + SDL_QueryTexture(drawstate->sprite, NULL, NULL, &w, &h); + drawstate->sprite_rect.w = (float)w; + drawstate->sprite_rect.h = (float)h; + drawstate->scale_direction = 1; + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + } +#endif + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double)frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + + SDL_stack_free(drawstates); + + quit(0); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testresample.c b/vendor/sdl-3.0.0/test/testresample.c new file mode 100644 index 0000000..83661d3 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testresample.c @@ -0,0 +1,157 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +#include +#include +#include + +static void log_usage(char *progname, SDLTest_CommonState *state) { + static const char *options[] = { "in.wav", "out.wav", "newfreq", "newchan", NULL }; + SDLTest_CommonLogUsage(state, progname, options); +} + +int main(int argc, char **argv) +{ + SDL_AudioSpec spec; + SDL_AudioSpec cvtspec; + SDL_AudioStream *stream = NULL; + Uint8 *dst_buf = NULL; + Uint32 len = 0; + Uint8 *data = NULL; + int bitsize = 0; + int blockalign = 0; + int avgbytes = 0; + SDL_RWops *io = NULL; + int dst_len; + int ret = 0; + int argpos = 0; + int i; + SDLTest_CommonState *state; + char *file_in = NULL; + char *file_out = NULL; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + SDL_zero(cvtspec); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (argpos == 0) { + file_in = argv[i]; + argpos++; + consumed = 1; + } else if (argpos == 1) { + file_out = argv[i]; + argpos++; + consumed = 1; + } else if (argpos == 2) { + char *endp; + cvtspec.freq = (int)SDL_strtoul(argv[i], &endp, 0); + if (endp != argv[i] && *endp == '\0') { + argpos++; + consumed = 1; + } + } else if (argpos == 3) { + char *endp; + cvtspec.channels = (int)SDL_strtoul(argv[i], &endp, 0); + if (endp != argv[i] && *endp == '\0') { + argpos++; + consumed = 1; + } + } + } + if (consumed <= 0) { + log_usage(argv[0], state); + ret = 1; + goto end; + } + + i += consumed; + } + + if (argpos != 4) { + log_usage(argv[0], state); + ret = 1; + goto end; + } + + if (SDL_Init(SDL_INIT_AUDIO) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init() failed: %s\n", SDL_GetError()); + ret = 2; + goto end; + } + + if (SDL_LoadWAV(file_in, &spec, &data, &len) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "failed to load %s: %s\n", file_in, SDL_GetError()); + ret = 3; + goto end; + } + + cvtspec.format = spec.format; + if (SDL_ConvertAudioSamples(&spec, data, len, &cvtspec, &dst_buf, &dst_len) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "failed to convert samples: %s\n", SDL_GetError()); + ret = 4; + goto end; + } + + /* write out a WAV header... */ + io = SDL_RWFromFile(file_out, "wb"); + if (io == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "fopen('%s') failed: %s\n", file_out, SDL_GetError()); + ret = 5; + goto end; + } + + bitsize = SDL_AUDIO_BITSIZE(spec.format); + blockalign = (bitsize / 8) * cvtspec.channels; + avgbytes = cvtspec.freq * blockalign; + + SDL_WriteU32LE(io, 0x46464952); /* RIFF */ + SDL_WriteU32LE(io, dst_len + 36); + SDL_WriteU32LE(io, 0x45564157); /* WAVE */ + SDL_WriteU32LE(io, 0x20746D66); /* fmt */ + SDL_WriteU32LE(io, 16); /* chunk size */ + SDL_WriteU16LE(io, SDL_AUDIO_ISFLOAT(spec.format) ? 3 : 1); /* uncompressed */ + SDL_WriteU16LE(io, cvtspec.channels); /* channels */ + SDL_WriteU32LE(io, cvtspec.freq); /* sample rate */ + SDL_WriteU32LE(io, avgbytes); /* average bytes per second */ + SDL_WriteU16LE(io, blockalign); /* block align */ + SDL_WriteU16LE(io, bitsize); /* significant bits per sample */ + SDL_WriteU32LE(io, 0x61746164); /* data */ + SDL_WriteU32LE(io, dst_len); /* size */ + SDL_RWwrite(io, dst_buf, dst_len); + + if (SDL_RWclose(io) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "fclose('%s') failed: %s\n", file_out, SDL_GetError()); + ret = 6; + goto end; + } + +end: + SDL_free(dst_buf); + SDL_free(data); + SDL_DestroyAudioStream(stream); + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return ret; +} diff --git a/vendor/sdl-3.0.0/test/testrumble.c b/vendor/sdl-3.0.0/test/testrumble.c new file mode 100644 index 0000000..a3c6dee --- /dev/null +++ b/vendor/sdl-3.0.0/test/testrumble.c @@ -0,0 +1,157 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +/* +Copyright (c) 2011, Edgar Simo Serra +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of the Simple Directmedia Layer (SDL) nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#include +#include + +static SDL_Haptic *haptic; + +/** + * \brief The entry point of this force feedback demo. + * \param[in] argc Number of arguments. + * \param[in] argv Array of argc arguments. + */ +int main(int argc, char **argv) +{ + int i; + char *name = NULL; + int index; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + name = NULL; + index = -1; + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (!name && index < 0) { + size_t l; + + l = SDL_strlen(argv[i]); + if ((l < 3) && SDL_isdigit(argv[i][0]) && ((l == 1) || SDL_isdigit(argv[i][1]))) { + index = SDL_atoi(argv[i]); + } else { + name = argv[i]; + } + consumed = 1; + } + } + if (consumed <= 0) { + static const char *options[] = { "[device]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + SDL_Log("\n"); + SDL_Log("If device is a two-digit number it'll use it as an index, otherwise\n" + "it'll use it as if it were part of the device's name.\n"); + return 1; + } + + i += consumed; + } + + /* Initialize the force feedbackness */ + SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_JOYSTICK | + SDL_INIT_HAPTIC); + SDL_Log("%d Haptic devices detected.\n", SDL_NumHaptics()); + if (SDL_NumHaptics() > 0) { + /* We'll just use index or the first force feedback device found */ + if (name == NULL) { + i = (index != -1) ? index : 0; + } + /* Try to find matching device */ + else { + for (i = 0; i < SDL_NumHaptics(); i++) { + if (SDL_strstr(SDL_HapticName(i), name) != NULL) { + break; + } + } + + if (i >= SDL_NumHaptics()) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to find device matching '%s', aborting.\n", + name); + return 1; + } + } + + haptic = SDL_HapticOpen(i); + if (haptic == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to create the haptic device: %s\n", + SDL_GetError()); + return 1; + } + SDL_Log("Device: %s\n", SDL_HapticName(i)); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No Haptic devices found!\n"); + return 1; + } + + /* We only want force feedback errors. */ + SDL_ClearError(); + + if (SDL_HapticRumbleSupported(haptic) == SDL_FALSE) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Rumble not supported!\n"); + return 1; + } + if (SDL_HapticRumbleInit(haptic) != 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to initialize rumble: %s\n", SDL_GetError()); + return 1; + } + SDL_Log("Playing 2 second rumble at 0.5 magnitude.\n"); + if (SDL_HapticRumblePlay(haptic, 0.5, 5000) != 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to play rumble: %s\n", SDL_GetError()); + return 1; + } + SDL_Delay(2000); + SDL_Log("Stopping rumble.\n"); + SDL_HapticRumbleStop(haptic); + SDL_Delay(2000); + SDL_Log("Playing 2 second rumble at 0.3 magnitude.\n"); + if (SDL_HapticRumblePlay(haptic, 0.3f, 5000) != 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to play rumble: %s\n", SDL_GetError()); + return 1; + } + SDL_Delay(2000); + + /* Quit */ + if (haptic != NULL) { + SDL_HapticClose(haptic); + } + + SDL_Quit(); + SDLTest_CommonDestroyState(state); + + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testrwlock.c b/vendor/sdl-3.0.0/test/testrwlock.c new file mode 100644 index 0000000..7952a2e --- /dev/null +++ b/vendor/sdl-3.0.0/test/testrwlock.c @@ -0,0 +1,178 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Test the thread and rwlock locking functions + Also exercises the system's signal/thread interaction +*/ + +#include +#include +#include + +static SDL_RWLock *rwlock = NULL; +static SDL_threadID mainthread; +static SDL_AtomicInt doterminate; +static int nb_threads = 6; +static SDL_Thread **threads; +static int worktime = 1000; +static int writerworktime = 100; +static int timeout = 10000; +static SDLTest_CommonState *state; + +static void DoWork(const int workticks) /* "Work" */ +{ + const SDL_threadID tid = SDL_ThreadID(); + const SDL_bool is_reader = tid != mainthread; + const char *typestr = is_reader ? "Reader" : "Writer"; + + SDL_Log("%s Thread %lu: ready to work\n", typestr, (unsigned long) tid); + if (is_reader) { + SDL_LockRWLockForReading(rwlock); + } else { + SDL_LockRWLockForWriting(rwlock); + } + + SDL_Log("%s Thread %lu: start work!\n", typestr, (unsigned long) tid); + SDL_Delay(workticks); + SDL_Log("%s Thread %lu: work done!\n", typestr, (unsigned long) tid); + SDL_UnlockRWLock(rwlock); + + /* If this sleep isn't done, then threads may starve */ + SDL_Delay(10); +} + +static int SDLCALL +ReaderRun(void *data) +{ + SDL_Log("Reader Thread %lu: starting up", SDL_ThreadID()); + while (!SDL_AtomicGet(&doterminate)) { + DoWork(worktime); + } + SDL_Log("Reader Thread %lu: exiting!\n", SDL_ThreadID()); + return 0; +} + +int main(int argc, char *argv[]) +{ + int i; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + SDL_AtomicSet(&doterminate, 0); + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (SDL_strcmp(argv[i], "--nbthreads") == 0) { + if (argv[i + 1]) { + char *endptr; + nb_threads = SDL_strtol(argv[i + 1], &endptr, 0); + if (endptr != argv[i + 1] && *endptr == '\0' && nb_threads > 0) { + consumed = 2; + } + } + } else if (SDL_strcmp(argv[i], "--worktime") == 0) { + if (argv[i + 1]) { + char *endptr; + worktime = SDL_strtol(argv[i + 1], &endptr, 0); + if (endptr != argv[i + 1] && *endptr == '\0' && worktime > 0) { + consumed = 2; + } + } + } else if (SDL_strcmp(argv[i], "--writerworktime") == 0) { + if (argv[i + 1]) { + char *endptr; + writerworktime = SDL_strtol(argv[i + 1], &endptr, 0); + if (endptr != argv[i + 1] && *endptr == '\0' && writerworktime > 0) { + consumed = 2; + } + } + } else if (SDL_strcmp(argv[i], "--timeout") == 0) { + if (argv[i + 1]) { + char *endptr; + timeout = (Uint64) SDL_strtol(argv[i + 1], &endptr, 0); + if (endptr != argv[i + 1] && *endptr == '\0' && timeout > 0) { + consumed = 2; + } + } + } + } + if (consumed <= 0) { + static const char *options[] = { + "[--nbthreads NB]", + "[--worktime ms]", + "[--writerworktime ms]", + "[--timeout ms]", + NULL, + }; + SDLTest_CommonLogUsage(state, argv[0], options); + return 1; + } + + i += consumed; + } + + threads = SDL_malloc(nb_threads * sizeof(SDL_Thread*)); + + /* Load the SDL library */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s\n", SDL_GetError()); + return 1; + } + + SDL_AtomicSet(&doterminate, 0); + + rwlock = SDL_CreateRWLock(); + if (rwlock == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create rwlock: %s\n", SDL_GetError()); + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return 1; + } + + mainthread = SDL_ThreadID(); + SDL_Log("Writer thread: %lu\n", mainthread); + for (i = 0; i < nb_threads; ++i) { + char name[64]; + (void)SDL_snprintf(name, sizeof(name), "Reader%d", i); + threads[i] = SDL_CreateThread(ReaderRun, name, NULL); + if (threads[i] == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create reader thread! %s\n", SDL_GetError()); + } + } + + while (!SDL_AtomicGet(&doterminate) && (SDL_GetTicks() < ((Uint64) timeout))) { + DoWork(writerworktime); + } + + SDL_AtomicSet(&doterminate, 1); + SDL_Log("Waiting on reader threads to terminate..."); + for (i = 0; i < nb_threads; ++i) { + SDL_WaitThread(threads[i], NULL); + } + + SDL_Log("Reader threads have terminated, quitting!"); + SDL_DestroyRWLock(rwlock); + SDLTest_CommonDestroyState(state); + SDL_Quit(); + + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testscale.c b/vendor/sdl-3.0.0/test/testscale.c new file mode 100644 index 0000000..16acb3f --- /dev/null +++ b/vendor/sdl-3.0.0/test/testscale.c @@ -0,0 +1,169 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +/* Simple program: Move N sprites around on the screen as fast as possible */ + +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include +#include "testutils.h" + +static SDLTest_CommonState *state; + +typedef struct +{ + SDL_Window *window; + SDL_Renderer *renderer; + SDL_Texture *background; + SDL_Texture *sprite; + SDL_FRect sprite_rect; + int scale_direction; +} DrawState; + +static DrawState *drawstates; +static int done; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static void Draw(DrawState *s) +{ + SDL_Rect viewport; + + SDL_GetRenderViewport(s->renderer, &viewport); + + /* Draw the background */ + SDL_RenderTexture(s->renderer, s->background, NULL, NULL); + + /* Scale and draw the sprite */ + s->sprite_rect.w += s->scale_direction; + s->sprite_rect.h += s->scale_direction; + if (s->scale_direction > 0) { + if (s->sprite_rect.w >= viewport.w || s->sprite_rect.h >= viewport.h) { + s->scale_direction = -1; + } + } else { + if (s->sprite_rect.w <= 1 || s->sprite_rect.h <= 1) { + s->scale_direction = 1; + } + } + s->sprite_rect.x = (float)((viewport.w - s->sprite_rect.w) / 2); + s->sprite_rect.y = (float)((viewport.h - s->sprite_rect.h) / 2); + + SDL_RenderTexture(s->renderer, s->sprite, NULL, &s->sprite_rect); + + /* Update the screen! */ + SDL_RenderPresent(s->renderer); +} + +static void loop(void) +{ + int i; + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) { + continue; + } + Draw(&drawstates[i]); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int main(int argc, char *argv[]) +{ + int i; + int frames; + Uint64 then, now; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (!SDLTest_CommonInit(state)) { + quit(1); + } + + drawstates = SDL_stack_alloc(DrawState, state->num_windows); + for (i = 0; i < state->num_windows; ++i) { + DrawState *drawstate = &drawstates[i]; + int w, h; + + drawstate->window = state->windows[i]; + drawstate->renderer = state->renderers[i]; + drawstate->sprite = LoadTexture(drawstate->renderer, "icon.bmp", SDL_TRUE, NULL, NULL); + drawstate->background = LoadTexture(drawstate->renderer, "sample.bmp", SDL_FALSE, NULL, NULL); + if (!drawstate->sprite || !drawstate->background) { + quit(2); + } + SDL_QueryTexture(drawstate->sprite, NULL, NULL, &w, &h); + drawstate->sprite_rect.w = (float)w; + drawstate->sprite_rect.h = (float)h; + drawstate->scale_direction = 1; + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + } +#endif + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double)frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + + SDL_stack_free(drawstates); + + quit(0); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testsem.c b/vendor/sdl-3.0.0/test/testsem.c new file mode 100644 index 0000000..8da5861 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testsem.c @@ -0,0 +1,321 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Simple test of the SDL semaphore code */ + +#include + +#include +#include +#include + +#define NUM_THREADS 10 +/* This value should be smaller than the maximum count of the */ +/* semaphore implementation: */ +#define NUM_OVERHEAD_OPS 10000 +#define NUM_OVERHEAD_OPS_MULT 10 + +static SDL_Semaphore *sem; +static int alive; + +typedef struct Thread_State +{ + SDL_Thread *thread; + int number; + SDL_bool flag; + int loop_count; + int content_count; +} Thread_State; + +static void log_usage(char *progname, SDLTest_CommonState *state) { + static const char *options[] = { "init_value", NULL }; + SDLTest_CommonLogUsage(state, progname, options); +} + +static void +killed(int sig) +{ + alive = 0; +} + +static int SDLCALL +ThreadFuncRealWorld(void *data) +{ + Thread_State *state = (Thread_State *)data; + while (alive) { + SDL_WaitSemaphore(sem); + SDL_Log("Thread number %d has got the semaphore (value = %" SDL_PRIu32 ")!\n", + state->number, SDL_GetSemaphoreValue(sem)); + SDL_Delay(200); + SDL_PostSemaphore(sem); + SDL_Log("Thread number %d has released the semaphore (value = %" SDL_PRIu32 ")!\n", + state->number, SDL_GetSemaphoreValue(sem)); + ++state->loop_count; + SDL_Delay(1); /* For the scheduler */ + } + SDL_Log("Thread number %d exiting.\n", state->number); + return 0; +} + +static void +TestRealWorld(int init_sem) +{ + Thread_State thread_states[NUM_THREADS] = { { 0 } }; + int i; + int loop_count; + + sem = SDL_CreateSemaphore(init_sem); + + SDL_Log("Running %d threads, semaphore value = %d\n", NUM_THREADS, + init_sem); + alive = 1; + /* Create all the threads */ + for (i = 0; i < NUM_THREADS; ++i) { + char name[64]; + (void)SDL_snprintf(name, sizeof(name), "Thread%u", (unsigned int)i); + thread_states[i].number = i; + thread_states[i].thread = SDL_CreateThread(ThreadFuncRealWorld, name, (void *)&thread_states[i]); + } + + /* Wait 10 seconds */ + SDL_Delay(10 * 1000); + + /* Wait for all threads to finish */ + SDL_Log("Waiting for threads to finish\n"); + alive = 0; + loop_count = 0; + for (i = 0; i < NUM_THREADS; ++i) { + SDL_WaitThread(thread_states[i].thread, NULL); + loop_count += thread_states[i].loop_count; + } + SDL_Log("Finished waiting for threads, ran %d loops in total\n\n", loop_count); + + SDL_DestroySemaphore(sem); +} + +static void +TestWaitTimeout(void) +{ + Uint64 start_ticks; + Uint64 end_ticks; + Uint64 duration; + int retval; + + sem = SDL_CreateSemaphore(0); + SDL_Log("Waiting 2 seconds on semaphore\n"); + + start_ticks = SDL_GetTicks(); + retval = SDL_WaitSemaphoreTimeout(sem, 2000); + end_ticks = SDL_GetTicks(); + + duration = end_ticks - start_ticks; + + /* Accept a little offset in the effective wait */ + SDL_assert(duration > 1900 && duration < 2050); + SDL_Log("Wait took %" SDL_PRIu64 " milliseconds\n\n", duration); + + /* Check to make sure the return value indicates timed out */ + if (retval != SDL_MUTEX_TIMEDOUT) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_WaitSemaphoreTimeout returned: %d; expected: %d\n\n", retval, SDL_MUTEX_TIMEDOUT); + } + + SDL_DestroySemaphore(sem); +} + +static void +TestOverheadUncontended(void) +{ + Uint64 start_ticks; + Uint64 end_ticks; + Uint64 duration; + int i, j; + + sem = SDL_CreateSemaphore(0); + SDL_Log("Doing %d uncontended Post/Wait operations on semaphore\n", NUM_OVERHEAD_OPS * NUM_OVERHEAD_OPS_MULT); + + start_ticks = SDL_GetTicks(); + for (i = 0; i < NUM_OVERHEAD_OPS_MULT; i++) { + for (j = 0; j < NUM_OVERHEAD_OPS; j++) { + SDL_PostSemaphore(sem); + } + for (j = 0; j < NUM_OVERHEAD_OPS; j++) { + SDL_WaitSemaphore(sem); + } + } + end_ticks = SDL_GetTicks(); + + duration = end_ticks - start_ticks; + SDL_Log("Took %" SDL_PRIu64 " milliseconds\n\n", duration); + + SDL_DestroySemaphore(sem); +} + +static int SDLCALL +ThreadFuncOverheadContended(void *data) +{ + Thread_State *state = (Thread_State *)data; + + if (state->flag) { + while (alive) { + if (SDL_TryWaitSemaphore(sem) == SDL_MUTEX_TIMEDOUT) { + ++state->content_count; + } + ++state->loop_count; + } + } else { + while (alive) { + /* Timeout needed to allow check on alive flag */ + if (SDL_WaitSemaphoreTimeout(sem, 50) == SDL_MUTEX_TIMEDOUT) { + ++state->content_count; + } + ++state->loop_count; + } + } + return 0; +} + +static void +TestOverheadContended(SDL_bool try_wait) +{ + Uint64 start_ticks; + Uint64 end_ticks; + Uint64 duration; + Thread_State thread_states[NUM_THREADS] = { { 0 } }; + char textBuffer[1024]; + int loop_count; + int content_count; + int i, j; + size_t len; + + sem = SDL_CreateSemaphore(0); + SDL_Log("Doing %d contended %s operations on semaphore using %d threads\n", + NUM_OVERHEAD_OPS * NUM_OVERHEAD_OPS_MULT, try_wait ? "Post/TryWait" : "Post/WaitTimeout", NUM_THREADS); + alive = 1; + /* Create multiple threads to starve the semaphore and cause contention */ + for (i = 0; i < NUM_THREADS; ++i) { + char name[64]; + (void)SDL_snprintf(name, sizeof(name), "Thread%u", (unsigned int)i); + thread_states[i].flag = try_wait; + thread_states[i].thread = SDL_CreateThread(ThreadFuncOverheadContended, name, (void *)&thread_states[i]); + } + + start_ticks = SDL_GetTicks(); + for (i = 0; i < NUM_OVERHEAD_OPS_MULT; i++) { + for (j = 0; j < NUM_OVERHEAD_OPS; j++) { + SDL_PostSemaphore(sem); + } + /* Make sure threads consumed everything */ + while (SDL_GetSemaphoreValue(sem)) { + /* Friendlier with cooperative threading models */ + SDL_DelayNS(1); + } + } + end_ticks = SDL_GetTicks(); + + alive = 0; + loop_count = 0; + content_count = 0; + for (i = 0; i < NUM_THREADS; ++i) { + SDL_WaitThread(thread_states[i].thread, NULL); + loop_count += thread_states[i].loop_count; + content_count += thread_states[i].content_count; + } + SDL_assert_release((loop_count - content_count) == NUM_OVERHEAD_OPS * NUM_OVERHEAD_OPS_MULT); + + duration = end_ticks - start_ticks; + SDL_Log("Took %" SDL_PRIu64 " milliseconds, threads %s %d out of %d times in total (%.2f%%)\n", + duration, try_wait ? "where contended" : "timed out", content_count, + loop_count, ((float)content_count * 100) / loop_count); + /* Print how many semaphores where consumed per thread */ + (void)SDL_snprintf(textBuffer, sizeof(textBuffer), "{ "); + for (i = 0; i < NUM_THREADS; ++i) { + if (i > 0) { + len = SDL_strlen(textBuffer); + (void)SDL_snprintf(textBuffer + len, sizeof(textBuffer) - len, ", "); + } + len = SDL_strlen(textBuffer); + (void)SDL_snprintf(textBuffer + len, sizeof(textBuffer) - len, "%d", thread_states[i].loop_count - thread_states[i].content_count); + } + len = SDL_strlen(textBuffer); + (void)SDL_snprintf(textBuffer + len, sizeof(textBuffer) - len, " }\n"); + SDL_Log("%s\n", textBuffer); + + SDL_DestroySemaphore(sem); +} + +int main(int argc, char **argv) +{ + int arg_count = 0; + int i; + int init_sem = 0; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (arg_count == 0) { + char *endptr; + init_sem = SDL_strtol(argv[i], &endptr, 0); + if (endptr != argv[i] && *endptr == '\0') { + arg_count++; + consumed = 1; + } + } + if (consumed <= 0) { + log_usage(argv[0], state); + return 1; + } + + i += consumed; + } + + if (arg_count != 1) { + log_usage(argv[0], state); + return 1; + } + + /* Load the SDL library */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + (void)signal(SIGTERM, killed); + (void)signal(SIGINT, killed); + + if (init_sem > 0) { + TestRealWorld(init_sem); + } + + TestWaitTimeout(); + + TestOverheadUncontended(); + + TestOverheadContended(SDL_FALSE); + + TestOverheadContended(SDL_TRUE); + + SDL_Quit(); + SDLTest_CommonDestroyState(state); + + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testsensor.c b/vendor/sdl-3.0.0/test/testsensor.c new file mode 100644 index 0000000..be200fd --- /dev/null +++ b/vendor/sdl-3.0.0/test/testsensor.c @@ -0,0 +1,141 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Simple test of the SDL sensor code */ + +#include +#include +#include + +static const char *GetSensorTypeString(SDL_SensorType type) +{ + static char unknown_type[64]; + + switch (type) { + case SDL_SENSOR_INVALID: + return "SDL_SENSOR_INVALID"; + case SDL_SENSOR_UNKNOWN: + return "SDL_SENSOR_UNKNOWN"; + case SDL_SENSOR_ACCEL: + return "SDL_SENSOR_ACCEL"; + case SDL_SENSOR_GYRO: + return "SDL_SENSOR_GYRO"; + default: + (void)SDL_snprintf(unknown_type, sizeof(unknown_type), "UNKNOWN (%d)", type); + return unknown_type; + } +} + +static void HandleSensorEvent(SDL_SensorEvent *event) +{ + SDL_Sensor *sensor = SDL_GetSensorFromInstanceID(event->which); + if (sensor == NULL) { + SDL_Log("Couldn't get sensor for sensor event\n"); + return; + } + + switch (SDL_GetSensorType(sensor)) { + case SDL_SENSOR_ACCEL: + SDL_Log("Accelerometer update: %.2f, %.2f, %.2f\n", event->data[0], event->data[1], event->data[2]); + break; + case SDL_SENSOR_GYRO: + SDL_Log("Gyro update: %.2f, %.2f, %.2f\n", event->data[0], event->data[1], event->data[2]); + break; + default: + SDL_Log("Sensor update for sensor type %s\n", GetSensorTypeString(SDL_GetSensorType(sensor))); + break; + } +} + +int main(int argc, char **argv) +{ + SDL_SensorID *sensors; + int i, num_sensors, num_opened; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + SDLTest_CommonDestroyState(state); + return 1; + } + + /* Load the SDL library */ + if (SDL_Init(SDL_INIT_SENSOR) < 0) { + SDL_Log("Couldn't initialize SDL: %s\n", SDL_GetError()); + SDLTest_CommonDestroyState(state); + return 1; + } + + sensors = SDL_GetSensors(&num_sensors); + num_opened = 0; + + SDL_Log("There are %d sensors available\n", num_sensors); + if (sensors) { + for (i = 0; i < num_sensors; ++i) { + SDL_Log("Sensor %" SDL_PRIu32 ": %s, type %s, platform type %d\n", + sensors[i], + SDL_GetSensorInstanceName(sensors[i]), + GetSensorTypeString(SDL_GetSensorInstanceType(sensors[i])), + SDL_GetSensorInstanceNonPortableType(sensors[i])); + + if (SDL_GetSensorInstanceType(sensors[i]) != SDL_SENSOR_UNKNOWN) { + SDL_Sensor *sensor = SDL_OpenSensor(sensors[i]); + if (sensor == NULL) { + SDL_Log("Couldn't open sensor %" SDL_PRIu32 ": %s\n", sensors[i], SDL_GetError()); + } else { + ++num_opened; + } + } + } + SDL_free(sensors); + } + SDL_Log("Opened %d sensors\n", num_opened); + + if (num_opened > 0) { + SDL_bool done = SDL_FALSE; + SDL_Event event; + + SDL_CreateWindow("Sensor Test", 0, 0, SDL_WINDOW_FULLSCREEN); + while (!done) { + /* Update to get the current event state */ + SDL_PumpEvents(); + + /* Process all currently pending events */ + while (SDL_PeepEvents(&event, 1, SDL_GETEVENT, SDL_EVENT_FIRST, SDL_EVENT_LAST) == 1) { + switch (event.type) { + case SDL_EVENT_SENSOR_UPDATE: + HandleSensorEvent(&event.sensor); + break; + case SDL_EVENT_MOUSE_BUTTON_UP: + case SDL_EVENT_KEY_UP: + case SDL_EVENT_QUIT: + done = SDL_TRUE; + break; + default: + break; + } + } + } + } + + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testshader.c b/vendor/sdl-3.0.0/test/testshader.c new file mode 100644 index 0000000..7d896f2 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testshader.c @@ -0,0 +1,559 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +/* This is a simple example of using GLSL shaders with SDL */ + +#include +#include +#include + +#include "testutils.h" + +#include + +#ifdef HAVE_OPENGL + +#include + +static SDL_bool shaders_supported; +static int current_shader = 0; + +enum +{ + SHADER_COLOR, + SHADER_TEXTURE, + SHADER_TEXCOORDS, + NUM_SHADERS +}; + +typedef struct +{ + GLhandleARB program; + GLhandleARB vert_shader; + GLhandleARB frag_shader; + const char *vert_source; + const char *frag_source; +} ShaderData; + +static ShaderData shaders[NUM_SHADERS] = { + + /* SHADER_COLOR */ + { 0, 0, 0, + /* vertex shader */ + "varying vec4 v_color;\n" + "\n" + "void main()\n" + "{\n" + " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" + " v_color = gl_Color;\n" + "}", + /* fragment shader */ + "varying vec4 v_color;\n" + "\n" + "void main()\n" + "{\n" + " gl_FragColor = v_color;\n" + "}" }, + + /* SHADER_TEXTURE */ + { 0, 0, 0, + /* vertex shader */ + "varying vec4 v_color;\n" + "varying vec2 v_texCoord;\n" + "\n" + "void main()\n" + "{\n" + " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" + " v_color = gl_Color;\n" + " v_texCoord = vec2(gl_MultiTexCoord0);\n" + "}", + /* fragment shader */ + "varying vec4 v_color;\n" + "varying vec2 v_texCoord;\n" + "uniform sampler2D tex0;\n" + "\n" + "void main()\n" + "{\n" + " gl_FragColor = texture2D(tex0, v_texCoord) * v_color;\n" + "}" }, + + /* SHADER_TEXCOORDS */ + { 0, 0, 0, + /* vertex shader */ + "varying vec2 v_texCoord;\n" + "\n" + "void main()\n" + "{\n" + " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" + " v_texCoord = vec2(gl_MultiTexCoord0);\n" + "}", + /* fragment shader */ + "varying vec2 v_texCoord;\n" + "\n" + "void main()\n" + "{\n" + " vec4 color;\n" + " vec2 delta;\n" + " float dist;\n" + "\n" + " delta = vec2(0.5, 0.5) - v_texCoord;\n" + " dist = dot(delta, delta);\n" + "\n" + " color.r = v_texCoord.x;\n" + " color.g = v_texCoord.x * v_texCoord.y;\n" + " color.b = v_texCoord.y;\n" + " color.a = 1.0 - (dist * 4.0);\n" + " gl_FragColor = color;\n" + "}" }, +}; + +static PFNGLATTACHOBJECTARBPROC glAttachObjectARB; +static PFNGLCOMPILESHADERARBPROC glCompileShaderARB; +static PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB; +static PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB; +static PFNGLDELETEOBJECTARBPROC glDeleteObjectARB; +static PFNGLGETINFOLOGARBPROC glGetInfoLogARB; +static PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB; +static PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB; +static PFNGLLINKPROGRAMARBPROC glLinkProgramARB; +static PFNGLSHADERSOURCEARBPROC glShaderSourceARB; +static PFNGLUNIFORM1IARBPROC glUniform1iARB; +static PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB; + +static SDL_bool CompileShader(GLhandleARB shader, const char *source) +{ + GLint status = 0; + + glShaderSourceARB(shader, 1, &source, NULL); + glCompileShaderARB(shader); + glGetObjectParameterivARB(shader, GL_OBJECT_COMPILE_STATUS_ARB, &status); + if (status == 0) { + GLint length = 0; + char *info; + + glGetObjectParameterivARB(shader, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length); + info = (char *)SDL_malloc((size_t)length + 1); + if (info == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!"); + } else { + glGetInfoLogARB(shader, length, NULL, info); + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to compile shader:\n%s\n%s", source, info); + SDL_free(info); + } + return SDL_FALSE; + } else { + return SDL_TRUE; + } +} + +static SDL_bool LinkProgram(ShaderData *data) +{ + GLint status = 0; + + glAttachObjectARB(data->program, data->vert_shader); + glAttachObjectARB(data->program, data->frag_shader); + glLinkProgramARB(data->program); + + glGetObjectParameterivARB(data->program, GL_OBJECT_LINK_STATUS_ARB, &status); + if (status == 0) { + GLint length = 0; + char *info; + + glGetObjectParameterivARB(data->program, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length); + info = (char *)SDL_malloc((size_t)length + 1); + if (info == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!"); + } else { + glGetInfoLogARB(data->program, length, NULL, info); + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to link program:\n%s", info); + SDL_free(info); + } + return SDL_FALSE; + } else { + return SDL_TRUE; + } +} + +static SDL_bool CompileShaderProgram(ShaderData *data) +{ + const int num_tmus_bound = 4; + int i; + GLint location; + + glGetError(); + + /* Create one program object to rule them all */ + data->program = glCreateProgramObjectARB(); + + /* Create the vertex shader */ + data->vert_shader = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB); + if (!CompileShader(data->vert_shader, data->vert_source)) { + return SDL_FALSE; + } + + /* Create the fragment shader */ + data->frag_shader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB); + if (!CompileShader(data->frag_shader, data->frag_source)) { + return SDL_FALSE; + } + + /* ... and in the darkness bind them */ + if (!LinkProgram(data)) { + return SDL_FALSE; + } + + /* Set up some uniform variables */ + glUseProgramObjectARB(data->program); + for (i = 0; i < num_tmus_bound; ++i) { + char tex_name[5]; + (void)SDL_snprintf(tex_name, SDL_arraysize(tex_name), "tex%d", i); + location = glGetUniformLocationARB(data->program, tex_name); + if (location >= 0) { + glUniform1iARB(location, i); + } + } + glUseProgramObjectARB(0); + + return (glGetError() == GL_NO_ERROR) ? SDL_TRUE : SDL_FALSE; +} + +static void DestroyShaderProgram(ShaderData *data) +{ + if (shaders_supported) { + glDeleteObjectARB(data->vert_shader); + glDeleteObjectARB(data->frag_shader); + glDeleteObjectARB(data->program); + } +} + +static SDL_bool InitShaders(void) +{ + int i; + + /* Check for shader support */ + shaders_supported = SDL_FALSE; + if (SDL_GL_ExtensionSupported("GL_ARB_shader_objects") && + SDL_GL_ExtensionSupported("GL_ARB_shading_language_100") && + SDL_GL_ExtensionSupported("GL_ARB_vertex_shader") && + SDL_GL_ExtensionSupported("GL_ARB_fragment_shader")) { + glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)SDL_GL_GetProcAddress("glAttachObjectARB"); + glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)SDL_GL_GetProcAddress("glCompileShaderARB"); + glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)SDL_GL_GetProcAddress("glCreateProgramObjectARB"); + glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)SDL_GL_GetProcAddress("glCreateShaderObjectARB"); + glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC)SDL_GL_GetProcAddress("glDeleteObjectARB"); + glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC)SDL_GL_GetProcAddress("glGetInfoLogARB"); + glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC)SDL_GL_GetProcAddress("glGetObjectParameterivARB"); + glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)SDL_GL_GetProcAddress("glGetUniformLocationARB"); + glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)SDL_GL_GetProcAddress("glLinkProgramARB"); + glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)SDL_GL_GetProcAddress("glShaderSourceARB"); + glUniform1iARB = (PFNGLUNIFORM1IARBPROC)SDL_GL_GetProcAddress("glUniform1iARB"); + glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)SDL_GL_GetProcAddress("glUseProgramObjectARB"); + if (glAttachObjectARB && + glCompileShaderARB && + glCreateProgramObjectARB && + glCreateShaderObjectARB && + glDeleteObjectARB && + glGetInfoLogARB && + glGetObjectParameterivARB && + glGetUniformLocationARB && + glLinkProgramARB && + glShaderSourceARB && + glUniform1iARB && + glUseProgramObjectARB) { + shaders_supported = SDL_TRUE; + } + } + + if (!shaders_supported) { + return SDL_FALSE; + } + + /* Compile all the shaders */ + for (i = 0; i < NUM_SHADERS; ++i) { + if (!CompileShaderProgram(&shaders[i])) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to compile shader!\n"); + return SDL_FALSE; + } + } + + /* We're done! */ + return SDL_TRUE; +} + +static void QuitShaders(void) +{ + int i; + + for (i = 0; i < NUM_SHADERS; ++i) { + DestroyShaderProgram(&shaders[i]); + } +} + +/* Quick utility function for texture creation */ +static int +power_of_two(int input) +{ + int value = 1; + + while (value < input) { + value <<= 1; + } + return value; +} + +static GLuint +SDL_GL_LoadTexture(SDL_Surface *surface, GLfloat *texcoord) +{ + GLuint texture; + int w, h; + SDL_Surface *image; + SDL_Rect area; + SDL_BlendMode saved_mode; + + /* Use the surface width and height expanded to powers of 2 */ + w = power_of_two(surface->w); + h = power_of_two(surface->h); + texcoord[0] = 0.0f; /* Min X */ + texcoord[1] = 0.0f; /* Min Y */ + texcoord[2] = (GLfloat)surface->w / w; /* Max X */ + texcoord[3] = (GLfloat)surface->h / h; /* Max Y */ + + image = SDL_CreateSurface(w, h, SDL_PIXELFORMAT_RGBA32); + if (image == NULL) { + return 0; + } + + /* Save the alpha blending attributes */ + SDL_GetSurfaceBlendMode(surface, &saved_mode); + SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_NONE); + + /* Copy the surface into the GL texture image */ + area.x = 0; + area.y = 0; + area.w = surface->w; + area.h = surface->h; + SDL_BlitSurface(surface, &area, image, &area); + + /* Restore the alpha blending attributes */ + SDL_SetSurfaceBlendMode(surface, saved_mode); + + /* Create an OpenGL texture for the image */ + glGenTextures(1, &texture); + glBindTexture(GL_TEXTURE_2D, texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexImage2D(GL_TEXTURE_2D, + 0, + GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->pixels); + SDL_DestroySurface(image); /* No longer needed */ + + return texture; +} + +/* A general OpenGL initialization function. Sets all of the initial parameters. */ +static void InitGL(int Width, int Height) /* We call this right after our OpenGL window is created. */ +{ + GLdouble aspect; + + glViewport(0, 0, Width, Height); + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); /* This Will Clear The Background Color To Black */ + glClearDepth(1.0); /* Enables Clearing Of The Depth Buffer */ + glDepthFunc(GL_LESS); /* The Type Of Depth Test To Do */ + glEnable(GL_DEPTH_TEST); /* Enables Depth Testing */ + glShadeModel(GL_SMOOTH); /* Enables Smooth Color Shading */ + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); /* Reset The Projection Matrix */ + + aspect = (GLdouble)Width / Height; + glOrtho(-3.0, 3.0, -3.0 / aspect, 3.0 / aspect, 0.0, 1.0); + + glMatrixMode(GL_MODELVIEW); +} + +/* The main drawing function. */ +static void DrawGLScene(SDL_Window *window, GLuint texture, GLfloat *texcoord) +{ + /* Texture coordinate lookup, to make it simple */ + enum + { + MINX, + MINY, + MAXX, + MAXY + }; + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* Clear The Screen And The Depth Buffer */ + glLoadIdentity(); /* Reset The View */ + + glTranslatef(-1.5f, 0.0f, 0.0f); /* Move Left 1.5 Units */ + + /* draw a triangle (in smooth coloring mode) */ + glBegin(GL_POLYGON); /* start drawing a polygon */ + glColor3f(1.0f, 0.0f, 0.0f); /* Set The Color To Red */ + glVertex3f(0.0f, 1.0f, 0.0f); /* Top */ + glColor3f(0.0f, 1.0f, 0.0f); /* Set The Color To Green */ + glVertex3f(1.0f, -1.0f, 0.0f); /* Bottom Right */ + glColor3f(0.0f, 0.0f, 1.0f); /* Set The Color To Blue */ + glVertex3f(-1.0f, -1.0f, 0.0f); /* Bottom Left */ + glEnd(); /* we're done with the polygon (smooth color interpolation) */ + + glTranslatef(3.0f, 0.0f, 0.0f); /* Move Right 3 Units */ + + /* Enable blending */ + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + /* draw a textured square (quadrilateral) */ + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, texture); + glColor3f(1.0f, 1.0f, 1.0f); + if (shaders_supported) { + glUseProgramObjectARB(shaders[current_shader].program); + } + + glBegin(GL_QUADS); /* start drawing a polygon (4 sided) */ + glTexCoord2f(texcoord[MINX], texcoord[MINY]); + glVertex3f(-1.0f, 1.0f, 0.0f); /* Top Left */ + glTexCoord2f(texcoord[MAXX], texcoord[MINY]); + glVertex3f(1.0f, 1.0f, 0.0f); /* Top Right */ + glTexCoord2f(texcoord[MAXX], texcoord[MAXY]); + glVertex3f(1.0f, -1.0f, 0.0f); /* Bottom Right */ + glTexCoord2f(texcoord[MINX], texcoord[MAXY]); + glVertex3f(-1.0f, -1.0f, 0.0f); /* Bottom Left */ + glEnd(); /* done with the polygon */ + + if (shaders_supported) { + glUseProgramObjectARB(0); + } + glDisable(GL_TEXTURE_2D); + + /* swap buffers to display, since we're double buffered. */ + SDL_GL_SwapWindow(window); +} + +int main(int argc, char **argv) +{ + int i; + int done; + SDL_Window *window; + char *filename = NULL; + SDL_Surface *surface; + GLuint texture; + GLfloat texcoords[4]; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (!filename) { + filename = argv[i]; + consumed = 1; + } + } + if (consumed <= 0) { + static const char *options[] = { "[icon.bmp]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + exit(1); + } + + i += consumed; + } + + /* Initialize SDL for video output */ + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to initialize SDL: %s\n", SDL_GetError()); + exit(1); + } + + /* Create a 640x480 OpenGL screen */ + window = SDL_CreateWindow("Shader Demo", 640, 480, SDL_WINDOW_OPENGL); + if (window == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to create OpenGL window: %s\n", SDL_GetError()); + SDL_Quit(); + exit(2); + } + + if (!SDL_GL_CreateContext(window)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to create OpenGL context: %s\n", SDL_GetError()); + SDL_Quit(); + exit(2); + } + + filename = GetResourceFilename(NULL, "icon.bmp"); + surface = SDL_LoadBMP(filename); + SDL_free(filename); + + if (surface == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to load icon.bmp: %s\n", SDL_GetError()); + SDL_Quit(); + exit(3); + } + texture = SDL_GL_LoadTexture(surface, texcoords); + SDL_DestroySurface(surface); + + /* Loop, drawing and checking events */ + InitGL(640, 480); + if (InitShaders()) { + SDL_Log("Shaders supported, press SPACE to cycle them.\n"); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Shaders not supported!\n"); + } + done = 0; + while (!done) { + DrawGLScene(window, texture, texcoords); + + /* This could go in a separate function */ + { + SDL_Event event; + while (SDL_PollEvent(&event)) { + if (event.type == SDL_EVENT_QUIT) { + done = 1; + } + if (event.type == SDL_EVENT_KEY_DOWN) { + if (event.key.keysym.sym == SDLK_SPACE) { + current_shader = (current_shader + 1) % NUM_SHADERS; + } + if (event.key.keysym.sym == SDLK_ESCAPE) { + done = 1; + } + } + } + } + } + QuitShaders(); + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return 1; +} + +#else /* HAVE_OPENGL */ + +int main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No OpenGL support on this system\n"); + return 1; +} + +#endif /* HAVE_OPENGL */ diff --git a/vendor/sdl-3.0.0/test/testshape.c b/vendor/sdl-3.0.0/test/testshape.c new file mode 100644 index 0000000..6965b3a --- /dev/null +++ b/vendor/sdl-3.0.0/test/testshape.c @@ -0,0 +1,390 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +#include + +#include +#include +#include + +#define SHAPED_WINDOW_DIMENSION 640 + +typedef struct LoadedPicture +{ + SDL_Surface *surface; + SDL_Texture *texture; + SDL_WindowShapeMode mode; + const char *name; + struct LoadedPicture *next; +} LoadedPicture; + +static Uint8 *g_bitmap = NULL; +static int g_bitmap_w = 0, g_bitmap_h = 0; +static SDL_Surface *g_shape_surface = NULL; +static SDL_Texture *g_shape_texture = NULL; + +static void log_usage(SDLTest_CommonState *state, char *progname) { + static const char *options[] = { "sample1.bmp [sample2.bmp [sample3.bmp ...]]", NULL }; + SDLTest_CommonLogUsage(state, progname, options); +} + +/* REQUIRES that bitmap point to a w-by-h bitmap with ppb pixels-per-byte. */ +static void SDL_CalculateShapeBitmap(SDL_WindowShapeMode mode, SDL_Surface *shape, Uint8 *bitmap, Uint8 ppb) +{ + int x = 0; + int y = 0; + Uint8 r = 0, g = 0, b = 0, alpha = 0; + Uint32 mask_value = 0; + size_t bytes_per_scanline = (size_t)(shape->w + (ppb - 1)) / ppb; + Uint8 *bitmap_scanline; + SDL_Color key; + + if (SDL_MUSTLOCK(shape)) { + SDL_LockSurface(shape); + } + + SDL_memset(bitmap, 0, shape->h * bytes_per_scanline); + + for (y = 0; y < shape->h; y++) { + bitmap_scanline = bitmap + y * bytes_per_scanline; + for (x = 0; x < shape->w; x++) { + alpha = 0; + if (SDLTest_ReadSurfacePixel(shape, x, y, &r, &g, &b, &alpha) != 0) { + continue; + } + + switch (mode.mode) { + case (ShapeModeDefault): + mask_value = (alpha >= 1 ? 1 : 0); + break; + case (ShapeModeBinarizeAlpha): + mask_value = (alpha >= mode.parameters.binarizationCutoff ? 1 : 0); + break; + case (ShapeModeReverseBinarizeAlpha): + mask_value = (alpha <= mode.parameters.binarizationCutoff ? 1 : 0); + break; + case (ShapeModeColorKey): + key = mode.parameters.colorKey; + mask_value = ((key.r != r || key.g != g || key.b != b) ? 1 : 0); + break; + } + bitmap_scanline[x / ppb] |= mask_value << (x % ppb); + } + } + + if (SDL_MUSTLOCK(shape)) { + SDL_UnlockSurface(shape); + } +} + +static int SDL3_SetWindowShape(SDL_Window *window, SDL_Surface *shape, SDL_WindowShapeMode *shape_mode) +{ + if (g_bitmap) { + SDL_free(g_bitmap); + g_bitmap = NULL; + } + + if (g_shape_texture) { + SDL_DestroyTexture(g_shape_texture); + g_shape_texture = NULL; + } + + if (g_shape_surface) { + SDL_DestroySurface(g_shape_surface); + g_shape_surface = NULL; + } + + if (shape == NULL) { + return SDL_SetError("shape"); + } + + if (shape_mode == NULL) { + return SDL_SetError("shape_mode"); + } + + g_bitmap_w = shape->w; + g_bitmap_h = shape->h; + g_bitmap = (Uint8*) SDL_malloc(shape->w * shape->h); + if (g_bitmap == NULL) { + return SDL_OutOfMemory(); + } + + SDL_CalculateShapeBitmap(*shape_mode, shape, g_bitmap, 1); + + g_shape_surface = SDL_CreateSurface(g_bitmap_w, g_bitmap_h, SDL_PIXELFORMAT_ABGR8888); + if (g_shape_surface) { + int x, y, i = 0; + Uint32 *ptr = g_shape_surface->pixels; + for (y = 0; y < g_bitmap_h; y++) { + for (x = 0; x < g_bitmap_w; x++) { + Uint8 val = g_bitmap[i++]; + if (val == 0) { + ptr[x] = 0; + } else { + ptr[x] = 0xffffffff; + } + } + ptr = (Uint32 *)((Uint8 *)ptr + g_shape_surface->pitch); + } + } + + return 0; +} + +static void render(SDL_Renderer *renderer, SDL_Texture *texture) +{ + /* Clear render-target to blue. */ + SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0xff, 0xff); + SDL_RenderClear(renderer); + + /* Render the texture. */ + SDL_RenderTexture(renderer, texture, NULL, NULL); + + /* Apply the shape */ + if (g_shape_surface) { + SDL_RendererInfo info; + SDL_GetRendererInfo(renderer, &info); + + if (info.flags & SDL_RENDERER_SOFTWARE) { + if (g_bitmap) { + int x, y, i = 0; + Uint8 r, g, b, a; + SDL_GetRenderDrawColor(renderer, &r, &g, &b, &a); + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); + for (y = 0; y < g_bitmap_h; y++) { + for (x = 0; x < g_bitmap_w; x++) { + Uint8 val = g_bitmap[i++]; + if (val == 0) { + SDL_RenderPoint(renderer, (float)x, (float)y); + } + } + } + SDL_SetRenderDrawColor(renderer, r, g, b, a); + } + } else { + if (g_shape_texture == NULL) { + SDL_BlendMode bm; + + g_shape_texture = SDL_CreateTextureFromSurface(renderer, g_shape_surface); + + /* if Alpha is 0, set all to 0, else leave unchanged. */ + bm = SDL_ComposeCustomBlendMode( + SDL_BLENDFACTOR_ZERO, SDL_BLENDFACTOR_SRC_ALPHA, SDL_BLENDOPERATION_ADD, + SDL_BLENDFACTOR_ZERO, SDL_BLENDFACTOR_SRC_ALPHA, SDL_BLENDOPERATION_ADD); + + SDL_SetTextureBlendMode(g_shape_texture, bm); + } + SDL_RenderTexture(renderer, g_shape_texture, NULL, NULL); + } + } + + SDL_RenderPresent(renderer); +} + +int main(int argc, char **argv) +{ + int num_pictures = 0; + LoadedPicture *pic_i = NULL; + LoadedPicture *picture_linked_list = NULL; + LoadedPicture **pictures = NULL; + int i; + const SDL_DisplayMode *mode; + SDL_PixelFormat *format = NULL; + SDL_Window *window = NULL; + SDL_Renderer *renderer = NULL; + SDL_Color black = { 0, 0, 0, 0xff }; + SDL_Event event; + int should_exit = 0; + int current_picture; + int button_down; + Uint32 pixelFormat = 0; + int w, h, access = 0; + SDLTest_CommonState *state; + int rc; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + rc = 0; + + /* SDL_SetHint(SDL_HINT_RENDER_DRIVER, "software"); */ + /* SDL_SetHint(SDL_HINT_VIDEO_FORCE_EGL, "0"); */ + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + LoadedPicture *new_picture; + + new_picture = SDL_malloc(sizeof(LoadedPicture)); + new_picture->name = argv[i]; + new_picture->next = picture_linked_list; + picture_linked_list = new_picture; + num_pictures++; + consumed = 1; + } + if (consumed <= 0) { + log_usage(state, argv[0]); + exit(-1); + } + + i += consumed; + } + if (!num_pictures) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Shape requires at least one bitmap file as argument."); + log_usage(state, argv[0]); + exit(-1); + } + + if (SDL_Init(SDL_INIT_VIDEO) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Could not initialize SDL video."); + exit(-2); + } + + mode = SDL_GetDesktopDisplayMode(SDL_GetPrimaryDisplay()); + if (!mode) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't get desktop display mode: %s", SDL_GetError()); + rc = -2; + goto ret; + } + + /* Allocate an array of LoadedPicture pointers for convenience accesses. */ + pictures = (LoadedPicture **)SDL_malloc(sizeof(LoadedPicture*) * num_pictures); + if (!pictures) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Could not allocate memory."); + rc = 1; + goto ret; + } + for (i = 0, pic_i = picture_linked_list; i < num_pictures; i++, pic_i = pic_i->next) { + pictures[i] = pic_i; + pictures[i]->surface = NULL; + } + for (i = 0; i < num_pictures; i++) { + pictures[i]->surface = SDL_LoadBMP(pictures[i]->name); + if (pictures[i]->surface == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Could not load surface from named bitmap file: %s", pictures[i]->name); + rc = -3; + goto ret; + } + + format = pictures[i]->surface->format; + if (SDL_ISPIXELFORMAT_ALPHA(format->format)) { + pictures[i]->mode.mode = ShapeModeBinarizeAlpha; + pictures[i]->mode.parameters.binarizationCutoff = 255; + } else { + pictures[i]->mode.mode = ShapeModeColorKey; + pictures[i]->mode.parameters.colorKey = black; + } + } + + window = SDL_CreateWindow("SDL_Shape test", SHAPED_WINDOW_DIMENSION, SHAPED_WINDOW_DIMENSION, SDL_WINDOW_TRANSPARENT); + if (window == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Could not create shaped window for SDL_Shape."); + rc = -4; + goto ret; + } + renderer = SDL_CreateRenderer(window, NULL, 0); + if (renderer == NULL) { + SDL_DestroyWindow(window); + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Could not create rendering context for SDL_Shape window."); + rc = -4; + goto ret; + } + + for (i = 0; i < num_pictures; i++) { + pictures[i]->texture = NULL; + } + for (i = 0; i < num_pictures; i++) { + pictures[i]->texture = SDL_CreateTextureFromSurface(renderer, pictures[i]->surface); + if (pictures[i]->texture == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Could not create texture for SDL_shape."); + rc = -6; + goto ret; + } + } + + should_exit = 0; + current_picture = 0; + button_down = 0; + SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Changing to shaped bmp: %s", pictures[current_picture]->name); + SDL_QueryTexture(pictures[current_picture]->texture, &pixelFormat, &access, &w, &h); + /* We want to set the window size in pixels */ + SDL_SetWindowSize(window, (int)SDL_ceilf(w / mode->pixel_density), (int)SDL_ceilf(h / mode->pixel_density)); + SDL3_SetWindowShape(window, pictures[current_picture]->surface, &pictures[current_picture]->mode); + while (should_exit == 0) { + while (SDL_PollEvent(&event)) { + if (event.type == SDL_EVENT_KEY_DOWN) { + button_down = 1; + if (event.key.keysym.sym == SDLK_ESCAPE) { + should_exit = 1; + break; + } + } + if (button_down && event.type == SDL_EVENT_KEY_UP) { + button_down = 0; + current_picture += 1; + if (current_picture >= num_pictures) { + current_picture = 0; + } + SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Changing to shaped bmp: %s", pictures[current_picture]->name); + SDL_QueryTexture(pictures[current_picture]->texture, &pixelFormat, &access, &w, &h); + SDL_SetWindowSize(window, (int)SDL_ceilf(w / mode->pixel_density), (int)SDL_ceilf(h / mode->pixel_density)); + SDL3_SetWindowShape(window, pictures[current_picture]->surface, &pictures[current_picture]->mode); + } + if (event.type == SDL_EVENT_QUIT) { + should_exit = 1; + break; + } + } + render(renderer, pictures[current_picture]->texture); + SDL_Delay(10); + } + +ret: + /* Free the textures + original surfaces backing the textures. */ + for (pic_i = picture_linked_list; pic_i; ) { + LoadedPicture *next = pic_i->next; + if (pic_i->texture) { + SDL_DestroyTexture(pic_i->texture); + } + SDL_DestroySurface(pic_i->surface); + SDL_free(pic_i); + pic_i = next; + } + SDL_free(pictures); + + /* Destroy the renderer. */ + SDL_DestroyRenderer(renderer); + /* Destroy the window. */ + SDL_DestroyWindow(window); + + if (g_bitmap) { + SDL_free(g_bitmap); + g_bitmap = NULL; + } + if (g_shape_surface) { + SDL_DestroySurface(g_shape_surface); + g_shape_surface = NULL; + } + + SDL_Quit(); + SDLTest_CommonDestroyState(state); + + return rc; +} diff --git a/vendor/sdl-3.0.0/test/testsprite.c b/vendor/sdl-3.0.0/test/testsprite.c new file mode 100644 index 0000000..9afa6f0 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testsprite.c @@ -0,0 +1,604 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +/* Simple program: Move N sprites around on the screen as fast as possible */ + +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include +#include +#include "testutils.h" + +#define NUM_SPRITES 100 +#define MAX_SPEED 1 + +static SDLTest_CommonState *state; +static int num_sprites; +static SDL_Texture **sprites; +static SDL_bool cycle_color; +static SDL_bool cycle_alpha; +static int cycle_direction = 1; +static int current_alpha = 0; +static int current_color = 0; +static SDL_FRect *positions; +static SDL_FRect *velocities; +static float sprite_w, sprite_h; +static SDL_BlendMode blendMode = SDL_BLENDMODE_BLEND; +static Uint64 next_fps_check; +static Uint32 frames; +static const int fps_check_delay = 5000; +static int use_rendergeometry = 0; +static SDL_bool suspend_when_occluded; + +/* Number of iterations to move sprites - used for visual tests. */ +/* -1: infinite random moves (default); >=0: enables N deterministic moves */ +static int iterations = -1; + +static int done; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_free(sprites); + SDL_free(positions); + SDL_free(velocities); + SDLTest_CommonQuit(state); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static int LoadSprite(const char *file) +{ + int i, w, h; + + for (i = 0; i < state->num_windows; ++i) { + /* This does the SDL_LoadBMP step repeatedly, but that's OK for test code. */ + sprites[i] = LoadTexture(state->renderers[i], file, SDL_TRUE, &w, &h); + sprite_w = (float)w; + sprite_h = (float)h; + if (!sprites[i]) { + return -1; + } + if (SDL_SetTextureBlendMode(sprites[i], blendMode) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set blend mode: %s\n", SDL_GetError()); + SDL_DestroyTexture(sprites[i]); + return -1; + } + } + + /* We're ready to roll. :) */ + return 0; +} + +static void MoveSprites(SDL_Renderer *renderer, SDL_Texture *sprite) +{ + int i; + SDL_Rect viewport; + SDL_FRect temp; + SDL_FRect *position, *velocity; + + /* Query the sizes */ + SDL_GetRenderViewport(renderer, &viewport); + + /* Cycle the color and alpha, if desired */ + if (cycle_color) { + current_color += cycle_direction; + if (current_color < 0) { + current_color = 0; + cycle_direction = -cycle_direction; + } + if (current_color > 255) { + current_color = 255; + cycle_direction = -cycle_direction; + } + SDL_SetTextureColorMod(sprite, 255, (Uint8)current_color, + (Uint8)current_color); + } + if (cycle_alpha) { + current_alpha += cycle_direction; + if (current_alpha < 0) { + current_alpha = 0; + cycle_direction = -cycle_direction; + } + if (current_alpha > 255) { + current_alpha = 255; + cycle_direction = -cycle_direction; + } + SDL_SetTextureAlphaMod(sprite, (Uint8)current_alpha); + } + + /* Draw a gray background */ + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0x00 /* used with --transparent */); + SDL_RenderClear(renderer); + + /* Test points */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0x00, 0x00, 0xFF); + SDL_RenderPoint(renderer, 0.0f, 0.0f); + SDL_RenderPoint(renderer, (float)(viewport.w - 1), 0.0f); + SDL_RenderPoint(renderer, 0.0f, (float)(viewport.h - 1)); + SDL_RenderPoint(renderer, (float)(viewport.w - 1), (float)(viewport.h - 1)); + + /* Test horizontal and vertical lines */ + SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF); + SDL_RenderLine(renderer, 1.0f, 0.0f, (float)(viewport.w - 2), 0.0f); + SDL_RenderLine(renderer, 1.0f, (float)(viewport.h - 1), (float)(viewport.w - 2), (float)(viewport.h - 1)); + SDL_RenderLine(renderer, 0.0f, 1.0f, 0.0f, (float)(viewport.h - 2)); + SDL_RenderLine(renderer, (float)(viewport.w - 1), 1.0f, (float)(viewport.w - 1), (float)(viewport.h - 2)); + + /* Test fill and copy */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); + temp.x = 1.0f; + temp.y = 1.0f; + temp.w = sprite_w; + temp.h = sprite_h; + if (use_rendergeometry == 0) { + SDL_RenderFillRect(renderer, &temp); + } else { + /* Draw two triangles, filled, uniform */ + SDL_Color color; + SDL_Vertex verts[3]; + SDL_zeroa(verts); + color.r = 0xFF; + color.g = 0xFF; + color.b = 0xFF; + color.a = 0xFF; + + verts[0].position.x = temp.x; + verts[0].position.y = temp.y; + verts[0].color = color; + + verts[1].position.x = temp.x + temp.w; + verts[1].position.y = temp.y; + verts[1].color = color; + + verts[2].position.x = temp.x + temp.w; + verts[2].position.y = temp.y + temp.h; + verts[2].color = color; + + SDL_RenderGeometry(renderer, NULL, verts, 3, NULL, 0); + + verts[1].position.x = temp.x; + verts[1].position.y = temp.y + temp.h; + verts[1].color = color; + + SDL_RenderGeometry(renderer, NULL, verts, 3, NULL, 0); + } + SDL_RenderTexture(renderer, sprite, NULL, &temp); + temp.x = viewport.w - sprite_w - 1; + temp.y = 1.0f; + temp.w = sprite_w; + temp.h = sprite_h; + SDL_RenderFillRect(renderer, &temp); + SDL_RenderTexture(renderer, sprite, NULL, &temp); + temp.x = 1.0f; + temp.y = viewport.h - sprite_h - 1; + temp.w = sprite_w; + temp.h = sprite_h; + SDL_RenderFillRect(renderer, &temp); + SDL_RenderTexture(renderer, sprite, NULL, &temp); + temp.x = viewport.w - sprite_w - 1; + temp.y = viewport.h - sprite_h - 1; + temp.w = sprite_w; + temp.h = sprite_h; + SDL_RenderFillRect(renderer, &temp); + SDL_RenderTexture(renderer, sprite, NULL, &temp); + + /* Test diagonal lines */ + SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF); + SDL_RenderLine(renderer, sprite_w, sprite_h, + viewport.w - sprite_w - 2, viewport.h - sprite_h - 2); + SDL_RenderLine(renderer, viewport.w - sprite_w - 2, sprite_h, + sprite_w, viewport.h - sprite_h - 2); + + /* Conditionally move the sprites, bounce at the wall */ + if (iterations == -1 || iterations > 0) { + for (i = 0; i < num_sprites; ++i) { + position = &positions[i]; + velocity = &velocities[i]; + position->x += velocity->x; + if ((position->x < 0) || (position->x >= (viewport.w - sprite_w))) { + velocity->x = -velocity->x; + position->x += velocity->x; + } + position->y += velocity->y; + if ((position->y < 0) || (position->y >= (viewport.h - sprite_h))) { + velocity->y = -velocity->y; + position->y += velocity->y; + } + } + + /* Countdown sprite-move iterations and disable color changes at iteration end - used for visual tests. */ + if (iterations > 0) { + iterations--; + if (iterations == 0) { + cycle_alpha = SDL_FALSE; + cycle_color = SDL_FALSE; + } + } + } + + /* Draw sprites */ + if (use_rendergeometry == 0) { + for (i = 0; i < num_sprites; ++i) { + position = &positions[i]; + + /* Blit the sprite onto the screen */ + SDL_RenderTexture(renderer, sprite, NULL, position); + } + } else if (use_rendergeometry == 1) { + /* + * 0--1 + * | /| + * |/ | + * 3--2 + * + * Draw sprite2 as triangles that can be recombined as rect by software renderer + */ + SDL_Vertex *verts = (SDL_Vertex *)SDL_malloc(num_sprites * sizeof(SDL_Vertex) * 6); + SDL_Vertex *verts2 = verts; + if (verts) { + SDL_Color color; + SDL_GetTextureColorMod(sprite, &color.r, &color.g, &color.b); + SDL_GetTextureAlphaMod(sprite, &color.a); + for (i = 0; i < num_sprites; ++i) { + position = &positions[i]; + /* 0 */ + verts->position.x = position->x; + verts->position.y = position->y; + verts->color = color; + verts->tex_coord.x = 0.0f; + verts->tex_coord.y = 0.0f; + verts++; + /* 1 */ + verts->position.x = position->x + position->w; + verts->position.y = position->y; + verts->color = color; + verts->tex_coord.x = 1.0f; + verts->tex_coord.y = 0.0f; + verts++; + /* 2 */ + verts->position.x = position->x + position->w; + verts->position.y = position->y + position->h; + verts->color = color; + verts->tex_coord.x = 1.0f; + verts->tex_coord.y = 1.0f; + verts++; + /* 0 */ + verts->position.x = position->x; + verts->position.y = position->y; + verts->color = color; + verts->tex_coord.x = 0.0f; + verts->tex_coord.y = 0.0f; + verts++; + /* 2 */ + verts->position.x = position->x + position->w; + verts->position.y = position->y + position->h; + verts->color = color; + verts->tex_coord.x = 1.0f; + verts->tex_coord.y = 1.0f; + verts++; + /* 3 */ + verts->position.x = position->x; + verts->position.y = position->y + position->h; + verts->color = color; + verts->tex_coord.x = 0.0f; + verts->tex_coord.y = 1.0f; + verts++; + } + + /* Blit sprites as triangles onto the screen */ + SDL_RenderGeometry(renderer, sprite, verts2, num_sprites * 6, NULL, 0); + SDL_free(verts2); + } + } else if (use_rendergeometry == 2) { + /* 0-----1 + * |\ A /| + * | \ / | + * |D 2 B| + * | / \ | + * |/ C \| + * 3-----4 + * + * Draw sprite2 as triangles that can *not* be recombined as rect by software renderer + * Use an 'indices' array + */ + SDL_Vertex *verts = (SDL_Vertex *)SDL_malloc(num_sprites * sizeof(SDL_Vertex) * 5); + SDL_Vertex *verts2 = verts; + int *indices = (int *)SDL_malloc(num_sprites * sizeof(int) * 4 * 3); + int *indices2 = indices; + if (verts && indices) { + int pos = 0; + SDL_Color color; + SDL_GetTextureColorMod(sprite, &color.r, &color.g, &color.b); + SDL_GetTextureAlphaMod(sprite, &color.a); + for (i = 0; i < num_sprites; ++i) { + position = &positions[i]; + /* 0 */ + verts->position.x = position->x; + verts->position.y = position->y; + verts->color = color; + verts->tex_coord.x = 0.0f; + verts->tex_coord.y = 0.0f; + verts++; + /* 1 */ + verts->position.x = position->x + position->w; + verts->position.y = position->y; + verts->color = color; + verts->tex_coord.x = 1.0f; + verts->tex_coord.y = 0.0f; + verts++; + /* 2 */ + verts->position.x = position->x + position->w / 2.0f; + verts->position.y = position->y + position->h / 2.0f; + verts->color = color; + verts->tex_coord.x = 0.5f; + verts->tex_coord.y = 0.5f; + verts++; + /* 3 */ + verts->position.x = position->x; + verts->position.y = position->y + position->h; + verts->color = color; + verts->tex_coord.x = 0.0f; + verts->tex_coord.y = 1.0f; + verts++; + /* 4 */ + verts->position.x = position->x + position->w; + verts->position.y = position->y + position->h; + verts->color = color; + verts->tex_coord.x = 1.0f; + verts->tex_coord.y = 1.0f; + verts++; + /* A */ + *indices++ = pos + 0; + *indices++ = pos + 1; + *indices++ = pos + 2; + /* B */ + *indices++ = pos + 1; + *indices++ = pos + 2; + *indices++ = pos + 4; + /* C */ + *indices++ = pos + 3; + *indices++ = pos + 2; + *indices++ = pos + 4; + /* D */ + *indices++ = pos + 3; + *indices++ = pos + 2; + *indices++ = pos + 0; + pos += 5; + } + } + + /* Blit sprites as triangles onto the screen */ + SDL_RenderGeometry(renderer, sprite, verts2, num_sprites * 5, indices2, num_sprites * 4 * 3); + SDL_free(verts2); + SDL_free(indices2); + } + + /* Update the screen! */ + SDL_RenderPresent(renderer); +} + +static void loop(void) +{ + Uint64 now; + int i; + int active_windows = 0; + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL || + (suspend_when_occluded && (SDL_GetWindowFlags(state->windows[i]) & SDL_WINDOW_OCCLUDED))) { + continue; + } + ++active_windows; + MoveSprites(state->renderers[i], sprites[i]); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif + + /* If all windows are occluded, throttle the event polling to 15hz. */ + if (!done && !active_windows) { + SDL_DelayNS(SDL_NS_PER_SECOND / 15); + } + + frames++; + now = SDL_GetTicks(); + if (now >= next_fps_check) { + /* Print out some timing information */ + const Uint64 then = next_fps_check - fps_check_delay; + const double fps = ((double)frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + next_fps_check = now + fps_check_delay; + frames = 0; + } +} + +int main(int argc, char *argv[]) +{ + int i; + Uint64 seed; + const char *icon = "icon.bmp"; + + /* Initialize parameters */ + num_sprites = NUM_SPRITES; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--blend") == 0) { + if (argv[i + 1]) { + if (SDL_strcasecmp(argv[i + 1], "none") == 0) { + blendMode = SDL_BLENDMODE_NONE; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "blend") == 0) { + blendMode = SDL_BLENDMODE_BLEND; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "add") == 0) { + blendMode = SDL_BLENDMODE_ADD; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "mod") == 0) { + blendMode = SDL_BLENDMODE_MOD; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "mul") == 0) { + blendMode = SDL_BLENDMODE_MUL; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "sub") == 0) { + blendMode = SDL_ComposeCustomBlendMode(SDL_BLENDFACTOR_SRC_ALPHA, SDL_BLENDFACTOR_ONE, SDL_BLENDOPERATION_SUBTRACT, SDL_BLENDFACTOR_ZERO, SDL_BLENDFACTOR_ONE, SDL_BLENDOPERATION_SUBTRACT); + consumed = 2; + } + } + } else if (SDL_strcasecmp(argv[i], "--iterations") == 0) { + if (argv[i + 1]) { + iterations = SDL_atoi(argv[i + 1]); + if (iterations < -1) { + iterations = -1; + } + consumed = 2; + } + } else if (SDL_strcasecmp(argv[i], "--cyclecolor") == 0) { + cycle_color = SDL_TRUE; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--cyclealpha") == 0) { + cycle_alpha = SDL_TRUE; + consumed = 1; + } else if(SDL_strcasecmp(argv[i], "--suspend-when-occluded") == 0) { + suspend_when_occluded = SDL_TRUE; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--use-rendergeometry") == 0) { + if (argv[i + 1]) { + if (SDL_strcasecmp(argv[i + 1], "mode1") == 0) { + /* Draw sprite2 as triangles that can be recombined as rect by software renderer */ + use_rendergeometry = 1; + } else if (SDL_strcasecmp(argv[i + 1], "mode2") == 0) { + /* Draw sprite2 as triangles that can *not* be recombined as rect by software renderer + * Use an 'indices' array */ + use_rendergeometry = 2; + } else { + return -1; + } + } + consumed = 2; + } else if (SDL_isdigit(*argv[i])) { + num_sprites = SDL_atoi(argv[i]); + consumed = 1; + } else if (argv[i][0] != '-') { + icon = argv[i]; + consumed = 1; + } + } + if (consumed < 0) { + static const char *options[] = { + "[--blend none|blend|add|mod|mul|sub]", + "[--cyclecolor]", + "[--cyclealpha]", + "[--suspend-when-occluded]", + "[--iterations N]", + "[--use-rendergeometry mode1|mode2]", + "[num_sprites]", + "[icon.bmp]", + NULL + }; + SDLTest_CommonLogUsage(state, argv[0], options); + quit(1); + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + /* Create the windows, initialize the renderers, and load the textures */ + sprites = + (SDL_Texture **)SDL_malloc(state->num_windows * sizeof(*sprites)); + if (sprites == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!\n"); + quit(2); + } + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + if (LoadSprite(icon) < 0) { + quit(2); + } + + /* Allocate memory for the sprite info */ + positions = (SDL_FRect *)SDL_malloc(num_sprites * sizeof(*positions)); + velocities = (SDL_FRect *)SDL_malloc(num_sprites * sizeof(*velocities)); + if (positions == NULL || velocities == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!\n"); + quit(2); + } + + /* Position sprites and set their velocities using the fuzzer */ + if (iterations >= 0) { + /* Deterministic seed - used for visual tests */ + seed = (Uint64)iterations; + } else { + /* Pseudo-random seed generated from the time */ + seed = (Uint64)time(NULL); + } + SDLTest_FuzzerInit(seed); + for (i = 0; i < num_sprites; ++i) { + positions[i].x = (float)SDLTest_RandomIntegerInRange(0, (int)(state->window_w - sprite_w)); + positions[i].y = (float)SDLTest_RandomIntegerInRange(0, (int)(state->window_h - sprite_h)); + positions[i].w = sprite_w; + positions[i].h = sprite_h; + velocities[i].x = 0; + velocities[i].y = 0; + while (!velocities[i].x && !velocities[i].y) { + velocities[i].x = (float)SDLTest_RandomIntegerInRange(-MAX_SPEED, MAX_SPEED); + velocities[i].y = (float)SDLTest_RandomIntegerInRange(-MAX_SPEED, MAX_SPEED); + } + } + + /* Main render loop */ + frames = 0; + next_fps_check = SDL_GetTicks() + fps_check_delay; + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + + quit(0); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testspriteminimal.c b/vendor/sdl-3.0.0/test/testspriteminimal.c new file mode 100644 index 0000000..0d89c5e --- /dev/null +++ b/vendor/sdl-3.0.0/test/testspriteminimal.c @@ -0,0 +1,173 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +/* Simple program: Move N sprites around on the screen as fast as possible */ + +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include + +#include "icon.h" + +#define WINDOW_WIDTH 640 +#define WINDOW_HEIGHT 480 +#define NUM_SPRITES 100 +#define MAX_SPEED 1 + +static SDL_Texture *sprite; +static SDL_FRect positions[NUM_SPRITES]; +static SDL_FRect velocities[NUM_SPRITES]; +static int sprite_w, sprite_h; + +static SDL_Renderer *renderer; +static int done; + +static SDL_Texture *CreateTexture(SDL_Renderer *r, unsigned char *data, unsigned int len, int *w, int *h) { + SDL_Texture *texture = NULL; + SDL_Surface *surface; + SDL_RWops *src = SDL_RWFromConstMem(data, len); + if (src) { + surface = SDL_LoadBMP_RW(src, SDL_TRUE); + if (surface) { + /* Treat white as transparent */ + SDL_SetSurfaceColorKey(surface, SDL_TRUE, SDL_MapRGB(surface->format, 255, 255, 255)); + + texture = SDL_CreateTextureFromSurface(r, surface); + *w = surface->w; + *h = surface->h; + SDL_DestroySurface(surface); + } + } + return texture; +} + +static void MoveSprites(void) +{ + int i; + int window_w = WINDOW_WIDTH; + int window_h = WINDOW_HEIGHT; + SDL_FRect *position, *velocity; + + /* Draw a gray background */ + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + /* Move the sprite, bounce at the wall, and draw */ + for (i = 0; i < NUM_SPRITES; ++i) { + position = &positions[i]; + velocity = &velocities[i]; + position->x += velocity->x; + if ((position->x < 0) || (position->x >= (window_w - sprite_w))) { + velocity->x = -velocity->x; + position->x += velocity->x; + } + position->y += velocity->y; + if ((position->y < 0) || (position->y >= (window_h - sprite_h))) { + velocity->y = -velocity->y; + position->y += velocity->y; + } + + /* Blit the sprite onto the screen */ + SDL_RenderTexture(renderer, sprite, NULL, position); + } + + /* Update the screen! */ + SDL_RenderPresent(renderer); +} + +static void loop(void) +{ + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + if (event.type == SDL_EVENT_QUIT || event.type == SDL_EVENT_KEY_DOWN) { + done = 1; + } + } + MoveSprites(); +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int main(int argc, char *argv[]) +{ + SDL_Window *window = NULL; + int return_code = -1; + int i; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (argc > 1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "USAGE: %s\n", argv[0]); + return_code = 1; + goto quit; + } + + if (SDL_CreateWindowAndRenderer(WINDOW_WIDTH, WINDOW_HEIGHT, 0, &window, &renderer) < 0) { + return_code = 2; + goto quit; + } + + if (SDL_SetWindowTitle(window, argv[0]) < 0) { + SDL_Log("SDL_SetWindowTitle: %s", SDL_GetError()); + } + + sprite = CreateTexture(renderer, icon_bmp, icon_bmp_len, &sprite_w, &sprite_h); + + if (sprite == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture (%s)", SDL_GetError()); + return_code = 3; + goto quit; + } + + /* Initialize the sprite positions */ + srand((unsigned int)time(NULL)); + for (i = 0; i < NUM_SPRITES; ++i) { + positions[i].x = (float)(rand() % (WINDOW_WIDTH - sprite_w)); + positions[i].y = (float)(rand() % (WINDOW_HEIGHT - sprite_h)); + positions[i].w = (float)sprite_w; + positions[i].h = (float)sprite_h; + velocities[i].x = 0.0f; + velocities[i].y = 0.0f; + while (!velocities[i].x && !velocities[i].y) { + velocities[i].x = (float)((rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED); + velocities[i].y = (float)((rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED); + } + } + + /* Main render loop */ + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + return_code = 0; +quit: + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + SDL_Quit(); + return return_code; +} diff --git a/vendor/sdl-3.0.0/test/teststreaming.c b/vendor/sdl-3.0.0/test/teststreaming.c new file mode 100644 index 0000000..dcd5b44 --- /dev/null +++ b/vendor/sdl-3.0.0/test/teststreaming.c @@ -0,0 +1,208 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +/******************************************************************************** + * * + * Running moose :) Coded by Mike Gorchak. * + * * + ********************************************************************************/ + +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include +#include +#include "testutils.h" + +#define MOOSEPIC_W 64 +#define MOOSEPIC_H 88 + +#define MOOSEFRAME_SIZE (MOOSEPIC_W * MOOSEPIC_H) +#define MOOSEFRAMES_COUNT 10 + +/* *INDENT-OFF* */ /* clang-format off */ +static SDL_Color MooseColors[84] = { + {49, 49, 49, 255}, {66, 24, 0, 255}, {66, 33, 0, 255}, {66, 66, 66, 255}, + {66, 115, 49, 255}, {74, 33, 0, 255}, {74, 41, 16, 255}, {82, 33, 8, 255}, + {82, 41, 8, 255}, {82, 49, 16, 255}, {82, 82, 82, 255}, {90, 41, 8, 255}, + {90, 41, 16, 255}, {90, 57, 24, 255}, {99, 49, 16, 255}, {99, 66, 24, 255}, + {99, 66, 33, 255}, {99, 74, 33, 255}, {107, 57, 24, 255}, {107, 82, 41, 255}, + {115, 57, 33, 255}, {115, 66, 33, 255}, {115, 66, 41, 255}, {115, 74, 0, 255}, + {115, 90, 49, 255}, {115, 115, 115, 255}, {123, 82, 0, 255}, {123, 99, 57, 255}, + {132, 66, 41, 255}, {132, 74, 41, 255}, {132, 90, 8, 255}, {132, 99, 33, 255}, + {132, 99, 66, 255}, {132, 107, 66, 255}, {140, 74, 49, 255}, {140, 99, 16, 255}, + {140, 107, 74, 255}, {140, 115, 74, 255}, {148, 107, 24, 255}, {148, 115, 82, 255}, + {148, 123, 74, 255}, {148, 123, 90, 255}, {156, 115, 33, 255}, {156, 115, 90, 255}, + {156, 123, 82, 255}, {156, 132, 82, 255}, {156, 132, 99, 255}, {156, 156, 156, 255}, + {165, 123, 49, 255}, {165, 123, 90, 255}, {165, 132, 82, 255}, {165, 132, 90, 255}, + {165, 132, 99, 255}, {165, 140, 90, 255}, {173, 132, 57, 255}, {173, 132, 99, 255}, + {173, 140, 107, 255}, {173, 140, 115, 255}, {173, 148, 99, 255}, {173, 173, 173, 255}, + {181, 140, 74, 255}, {181, 148, 115, 255}, {181, 148, 123, 255}, {181, 156, 107, 255}, + {189, 148, 123, 255}, {189, 156, 82, 255}, {189, 156, 123, 255}, {189, 156, 132, 255}, + {189, 189, 189, 255}, {198, 156, 123, 255}, {198, 165, 132, 255}, {206, 165, 99, 255}, + {206, 165, 132, 255}, {206, 173, 140, 255}, {206, 206, 206, 255}, {214, 173, 115, 255}, + {214, 173, 140, 255}, {222, 181, 148, 255}, {222, 189, 132, 255}, {222, 189, 156, 255}, + {222, 222, 222, 255}, {231, 198, 165, 255}, {231, 231, 231, 255}, {239, 206, 173, 255} +}; +/* *INDENT-ON* */ /* clang-format on */ + +static Uint8 MooseFrames[MOOSEFRAMES_COUNT][MOOSEFRAME_SIZE]; + +static SDL_Renderer *renderer; +static int frame; +static SDL_Texture *MooseTexture; +static SDL_bool done = SDL_FALSE; +static SDLTest_CommonState *state; + +static void quit(int rc) +{ + SDL_Quit(); + SDLTest_CommonDestroyState(state); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static void UpdateTexture(SDL_Texture *texture) +{ + SDL_Color *color; + Uint8 *src; + Uint32 *dst; + int row, col; + void *pixels; + int pitch; + + if (SDL_LockTexture(texture, NULL, &pixels, &pitch) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't lock texture: %s\n", SDL_GetError()); + quit(5); + } + src = MooseFrames[frame]; + for (row = 0; row < MOOSEPIC_H; ++row) { + dst = (Uint32 *)((Uint8 *)pixels + row * pitch); + for (col = 0; col < MOOSEPIC_W; ++col) { + color = &MooseColors[*src++]; + *dst++ = (0xFF000000 | (color->r << 16) | (color->g << 8) | color->b); + } + } + SDL_UnlockTexture(texture); +} + +static void loop(void) +{ + SDL_Event event; + + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_EVENT_KEY_DOWN: + if (event.key.keysym.sym == SDLK_ESCAPE) { + done = SDL_TRUE; + } + break; + case SDL_EVENT_QUIT: + done = SDL_TRUE; + break; + } + } + + frame = (frame + 1) % MOOSEFRAMES_COUNT; + UpdateTexture(MooseTexture); + + SDL_RenderClear(renderer); + SDL_RenderTexture(renderer, MooseTexture, NULL, NULL); + SDL_RenderPresent(renderer); + +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int main(int argc, char **argv) +{ + SDL_Window *window; + SDL_RWops *handle; + char *filename = NULL; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + SDLTest_CommonDestroyState(state); + return 1; + } + + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + /* load the moose images */ + filename = GetResourceFilename(NULL, "moose.dat"); + if (filename == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory\n"); + return -1; + } + handle = SDL_RWFromFile(filename, "rb"); + SDL_free(filename); + if (handle == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Can't find the file moose.dat !\n"); + quit(2); + } + SDL_RWread(handle, MooseFrames, MOOSEFRAME_SIZE * MOOSEFRAMES_COUNT); + SDL_RWclose(handle); + + /* Create the window and renderer */ + window = SDL_CreateWindow("Happy Moose", MOOSEPIC_W * 4, MOOSEPIC_H * 4, SDL_WINDOW_RESIZABLE); + if (window == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create window: %s\n", SDL_GetError()); + quit(3); + } + + renderer = SDL_CreateRenderer(window, NULL, 0); + if (renderer == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create renderer: %s\n", SDL_GetError()); + quit(4); + } + + MooseTexture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, MOOSEPIC_W, MOOSEPIC_H); + if (MooseTexture == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create texture: %s\n", SDL_GetError()); + quit(5); + } + + /* Loop, waiting for QUIT or the escape key */ + frame = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + + SDL_DestroyRenderer(renderer); + + quit(0); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testsurround.c b/vendor/sdl-3.0.0/test/testsurround.c new file mode 100644 index 0000000..1edd1fa --- /dev/null +++ b/vendor/sdl-3.0.0/test/testsurround.c @@ -0,0 +1,241 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Program to test surround sound audio channels */ +#include +#include +#include + +static int total_channels; +static int active_channel; + +#define SAMPLE_RATE_HZ 48000 +#define QUICK_TEST_TIME_MSEC 100 +#define CHANNEL_TEST_TIME_SEC 5 +#define MAX_AMPLITUDE SDL_MAX_SINT16 + +#define SINE_FREQ_HZ 500 +#define LFE_SINE_FREQ_HZ 50 + +/* The channel layout is defined in SDL_audio.h */ +static const char * +get_channel_name(int channel_index, int channel_count) +{ + switch (channel_index) { + case 0: + return "Front Left"; + case 1: + return "Front Right"; + case 2: + switch (channel_count) { + case 3: + case 5: + return "Low Frequency Effects"; + case 4: + return "Back Left"; + default: + return "Front Center"; + } + case 3: + switch (channel_count) { + case 4: + return "Back Right"; + case 5: + return "Back Left"; + default: + return "Low Frequency Effects"; + } + case 4: + switch (channel_count) { + case 5: + return "Back Right"; + case 6: + return "Side Left"; + case 7: + return "Back Center"; + case 8: + return "Back Left"; + } + SDL_assert(0); + case 5: + switch (channel_count) { + case 6: + return "Side Right"; + case 7: + return "Side Left"; + case 8: + return "Back Right"; + } + SDL_assert(0); + case 6: + switch (channel_count) { + case 7: + return "Side Right"; + case 8: + return "Side Left"; + } + SDL_assert(0); + case 7: + return "Side Right"; + } + + return NULL; +} + +static SDL_bool is_lfe_channel(int channel_index, int channel_count) +{ + return (channel_count == 3 && channel_index == 2) || (channel_count >= 6 && channel_index == 3); +} + +static void SDLCALL fill_buffer(void *userdata, SDL_AudioStream *stream, int len, int totallen) +{ + const int samples = len / sizeof(Sint16); + Sint16 *buffer = NULL; + static int total_samples = 0; + int i; + + /* This can happen for a short time when switching devices */ + if (active_channel == total_channels) { + return; + } + + buffer = (Sint16 *) SDL_calloc(samples, sizeof(Sint16)); + if (!buffer) { + return; /* oh well. */ + } + + /* Play a sine wave on the active channel only */ + for (i = active_channel; i < samples; i += total_channels) { + float time = (float)total_samples++ / SAMPLE_RATE_HZ; + int sine_freq = is_lfe_channel(active_channel, total_channels) ? LFE_SINE_FREQ_HZ : SINE_FREQ_HZ; + int amplitude; + + /* Gradually ramp up and down to avoid audible pops when switching between channels */ + if (total_samples < SAMPLE_RATE_HZ) { + amplitude = total_samples * MAX_AMPLITUDE / SAMPLE_RATE_HZ; + } else if (total_samples > (CHANNEL_TEST_TIME_SEC - 1) * SAMPLE_RATE_HZ) { + amplitude = (CHANNEL_TEST_TIME_SEC * SAMPLE_RATE_HZ - total_samples) * MAX_AMPLITUDE / SAMPLE_RATE_HZ; + } else { + amplitude = MAX_AMPLITUDE; + } + + buffer[i] = (Sint16)(SDL_sin(6.283185f * sine_freq * time) * amplitude); + + /* Reset our state for next callback if this channel test is finished */ + if (total_samples == CHANNEL_TEST_TIME_SEC * SAMPLE_RATE_HZ) { + total_samples = 0; + active_channel++; + break; + } + } + + SDL_PutAudioStreamData(stream, buffer, samples * sizeof (Sint16)); + + SDL_free(buffer); +} + +int main(int argc, char *argv[]) +{ + SDL_AudioDeviceID *devices = NULL; + SDLTest_CommonState *state; + int devcount = 0; + int i; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + SDLTest_CommonQuit(state); + return 1; + } + + if (SDL_Init(SDL_INIT_AUDIO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + /* Show the list of available drivers */ + SDL_Log("Available audio drivers:"); + for (i = 0; i < SDL_GetNumAudioDrivers(); ++i) { + SDL_Log("%i: %s", i, SDL_GetAudioDriver(i)); + } + + SDL_Log("Using audio driver: %s\n", SDL_GetCurrentAudioDriver()); + + devices = SDL_GetAudioOutputDevices(&devcount); + if (!devices) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_GetAudioOutputDevices() failed: %s\n", SDL_GetError()); + devcount = 0; + } + + SDL_Log("Available audio devices:"); + for (i = 0; i < devcount; i++) { + SDL_Log("%s", SDL_GetAudioDeviceName(devices[i])); + } + + for (i = 0; i < devcount; i++) { + SDL_AudioStream *stream = NULL; + char *devname = SDL_GetAudioDeviceName(devices[i]); + int j; + SDL_AudioSpec spec; + + SDL_Log("Testing audio device: %s\n", devname); + SDL_free(devname); + + if (SDL_GetAudioDeviceFormat(devices[i], &spec, NULL) != 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_GetAudioDeviceFormat() failed: %s\n", SDL_GetError()); + continue; + } + + SDL_Log(" (%d channels)\n", spec.channels); + + spec.freq = SAMPLE_RATE_HZ; + spec.format = SDL_AUDIO_S16; + + /* These are used by the fill_buffer callback */ + total_channels = spec.channels; + active_channel = 0; + + stream = SDL_OpenAudioDeviceStream(devices[i], &spec, fill_buffer, NULL); + if (stream == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_OpenAudioDeviceStream() failed: %s\n", SDL_GetError()); + continue; + } + SDL_ResumeAudioDevice(SDL_GetAudioStreamDevice(stream)); + + for (j = 0; j < total_channels; j++) { + const int sine_freq = is_lfe_channel(j, total_channels) ? LFE_SINE_FREQ_HZ : SINE_FREQ_HZ; + + SDL_Log("Playing %d Hz test tone on channel: %s\n", sine_freq, get_channel_name(j, total_channels)); + + /* fill_buffer() will increment the active channel */ + if (SDL_getenv("SDL_TESTS_QUICK") != NULL) { + SDL_Delay(QUICK_TEST_TIME_MSEC); + } else { + SDL_Delay(CHANNEL_TEST_TIME_SEC * 1000); + } + } + + SDL_DestroyAudioStream(stream); + } + + SDL_free(devices); + + SDL_Quit(); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testthread.c b/vendor/sdl-3.0.0/test/testthread.c new file mode 100644 index 0000000..8bcbf4b --- /dev/null +++ b/vendor/sdl-3.0.0/test/testthread.c @@ -0,0 +1,164 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Simple test of the SDL threading code */ + +#include +#include + +#include +#include +#include + +static SDL_TLSID tls; +static int alive = 0; +static int testprio = 0; +static SDLTest_CommonState *state; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonDestroyState(state); + SDL_Quit(); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static const char * +getprioritystr(SDL_ThreadPriority priority) +{ + switch (priority) { + case SDL_THREAD_PRIORITY_LOW: + return "SDL_THREAD_PRIORITY_LOW"; + case SDL_THREAD_PRIORITY_NORMAL: + return "SDL_THREAD_PRIORITY_NORMAL"; + case SDL_THREAD_PRIORITY_HIGH: + return "SDL_THREAD_PRIORITY_HIGH"; + case SDL_THREAD_PRIORITY_TIME_CRITICAL: + return "SDL_THREAD_PRIORITY_TIME_CRITICAL"; + } + + return "???"; +} + +static int SDLCALL +ThreadFunc(void *data) +{ + SDL_ThreadPriority prio = SDL_THREAD_PRIORITY_NORMAL; + + SDL_SetTLS(tls, "baby thread", NULL); + SDL_Log("Started thread %s: My thread id is %lu, thread data = %s\n", + (char *)data, SDL_ThreadID(), (const char *)SDL_GetTLS(tls)); + while (alive) { + SDL_Log("Thread '%s' is alive!\n", (char *)data); + + if (testprio) { + SDL_Log("SDL_SetThreadPriority(%s):%d\n", getprioritystr(prio), SDL_SetThreadPriority(prio)); + if (++prio > SDL_THREAD_PRIORITY_TIME_CRITICAL) { + prio = SDL_THREAD_PRIORITY_LOW; + } + } + + SDL_Delay(1 * 1000); + } + SDL_Log("Thread '%s' exiting!\n", (char *)data); + return 0; +} + +static void +killed(int sig) +{ + SDL_Log("Killed with SIGTERM, waiting 5 seconds to exit\n"); + SDL_Delay(5 * 1000); + alive = 0; + quit(0); +} + +int main(int argc, char *argv[]) +{ + int i; + SDL_Thread *thread; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (SDL_strcmp("--prio", argv[i]) == 0) { + testprio = 1; + consumed = 1; + } + } + if (consumed <= 0) { + static const char *options[] = { "[--prio]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + exit(1); + } + + i += consumed; + } + + /* Load the SDL library */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + if (SDL_getenv("SDL_TESTS_QUICK") != NULL) { + SDL_Log("Not running slower tests"); + SDL_Quit(); + return 0; + } + + tls = SDL_CreateTLS(); + SDL_assert(tls); + SDL_SetTLS(tls, "main thread", NULL); + SDL_Log("Main thread data initially: %s\n", (const char *)SDL_GetTLS(tls)); + + alive = 1; + thread = SDL_CreateThread(ThreadFunc, "One", "#1"); + if (thread == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n", SDL_GetError()); + quit(1); + } + SDL_Delay(5 * 1000); + SDL_Log("Waiting for thread #1\n"); + alive = 0; + SDL_WaitThread(thread, NULL); + + SDL_Log("Main thread data finally: %s\n", (const char *)SDL_GetTLS(tls)); + + alive = 1; + (void)signal(SIGTERM, killed); + thread = SDL_CreateThread(ThreadFunc, "Two", "#2"); + if (thread == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n", SDL_GetError()); + quit(1); + } + (void)raise(SIGTERM); + + SDL_Quit(); /* Never reached */ + return 0; /* Never reached */ +} diff --git a/vendor/sdl-3.0.0/test/testtimer.c b/vendor/sdl-3.0.0/test/testtimer.c new file mode 100644 index 0000000..76c806b --- /dev/null +++ b/vendor/sdl-3.0.0/test/testtimer.c @@ -0,0 +1,205 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Test program to check the resolution of the SDL timer on the current + platform +*/ +#include +#include +#include + +#define DEFAULT_RESOLUTION 1 + +static int test_sdl_delay_within_bounds(void) { + const int testDelay = 100; + const int marginOfError = 25; + Uint64 result; + Uint64 result2; + Sint64 difference; + + SDLTest_ResetAssertSummary(); + + /* Get ticks count - should be non-zero by now */ + result = SDL_GetTicks(); + SDLTest_AssertPass("Call to SDL_GetTicks()"); + SDLTest_AssertCheck(result > 0, "Check result value, expected: >0, got: %" SDL_PRIu64, result); + + /* Delay a bit longer and measure ticks and verify difference */ + SDL_Delay(testDelay); + SDLTest_AssertPass("Call to SDL_Delay(%d)", testDelay); + result2 = SDL_GetTicks(); + SDLTest_AssertPass("Call to SDL_GetTicks()"); + SDLTest_AssertCheck(result2 > 0, "Check result value, expected: >0, got: %" SDL_PRIu64, result2); + difference = result2 - result; + SDLTest_AssertCheck(difference > (testDelay - marginOfError), "Check difference, expected: >%d, got: %" SDL_PRIu64, testDelay - marginOfError, difference); + /* Disabled because this might fail on non-interactive systems. */ + SDLTest_AssertCheck(difference < (testDelay + marginOfError), "Check difference, expected: <%d, got: %" SDL_PRIu64, testDelay + marginOfError, difference); + + return SDLTest_AssertSummaryToTestResult() == TEST_RESULT_PASSED ? 0 : 1; +} + +static int ticks = 0; + +static Uint32 SDLCALL +ticktock(Uint32 interval, void *param) +{ + ++ticks; + return interval; +} + +static Uint32 SDLCALL +callback(Uint32 interval, void *param) +{ + SDL_Log("Timer %" SDL_PRIu32 " : param = %d\n", interval, (int)(uintptr_t)param); + return interval; +} + +int main(int argc, char *argv[]) +{ + int i; + int desired = -1; + SDL_TimerID t1, t2, t3; + Uint64 start, now; + Uint64 start_perf, now_perf; + SDLTest_CommonState *state; + SDL_bool run_interactive_tests = SDL_TRUE; + int return_code = 0; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (SDL_strcmp(argv[i], "--no-interactive") == 0) { + run_interactive_tests = SDL_FALSE; + consumed = 1; + } else if (desired < 0) { + char *endptr; + + desired = SDL_strtoul(argv[i], &endptr, 0); + if (desired != 0 && endptr != argv[i] && *endptr == '\0') { + consumed = 1; + } + } + } + if (consumed <= 0) { + static const char *options[] = { "[--no-interactive]", "[interval]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + return 1; + } + + i += consumed; + } + + if (SDL_Init(SDL_INIT_TIMER) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + if (SDL_getenv("SDL_TESTS_QUICK") != NULL) { + SDL_Log("Not running slower tests"); + SDL_Quit(); + return 0; + } + + /* Verify SDL_GetTicks* acts monotonically increasing, and not erratic. */ + SDL_Log("Sanity-checking GetTicks\n"); + for (i = 0; i < 1000; ++i) { + start = SDL_GetTicks(); + SDL_Delay(1); + now = SDL_GetTicks() - start; + if (now > 100) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "testtimer.c: Delta time erratic at iter %d. Delay 1ms = %d ms in ticks\n", i, (int)now); + SDL_Quit(); + return 1; + } + } + + /* Start the timer */ + if (desired < 0) { + desired = DEFAULT_RESOLUTION; + } + t1 = SDL_AddTimer(desired, ticktock, NULL); + + /* Wait 10 seconds */ + SDL_Log("Waiting 10 seconds\n"); + SDL_Delay(10 * 1000); + + /* Stop the timer */ + SDL_RemoveTimer(t1); + + /* Print the results */ + if (ticks) { + SDL_Log("Timer resolution: desired = %d ms, actual = %f ms\n", + desired, (double)(10 * 1000) / ticks); + } + + /* Test multiple timers */ + SDL_Log("Testing multiple timers...\n"); + t1 = SDL_AddTimer(100, callback, (void *)1); + if (!t1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Could not create timer 1: %s\n", SDL_GetError()); + } + t2 = SDL_AddTimer(50, callback, (void *)2); + if (!t2) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Could not create timer 2: %s\n", SDL_GetError()); + } + t3 = SDL_AddTimer(233, callback, (void *)3); + if (!t3) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Could not create timer 3: %s\n", SDL_GetError()); + } + + /* Wait 10 seconds */ + SDL_Log("Waiting 10 seconds\n"); + SDL_Delay(10 * 1000); + + SDL_Log("Removing timer 1 and waiting 5 more seconds\n"); + SDL_RemoveTimer(t1); + + SDL_Delay(5 * 1000); + + SDL_RemoveTimer(t2); + SDL_RemoveTimer(t3); + + start_perf = SDL_GetPerformanceCounter(); + for (i = 0; i < 1000000; ++i) { + ticktock(0, NULL); + } + now_perf = SDL_GetPerformanceCounter(); + SDL_Log("1 million iterations of ticktock took %f ms\n", (double)((now_perf - start_perf) * 1000) / SDL_GetPerformanceFrequency()); + + SDL_Log("Performance counter frequency: %" SDL_PRIu64 "\n", SDL_GetPerformanceFrequency()); + start = SDL_GetTicks(); + start_perf = SDL_GetPerformanceCounter(); + SDL_Delay(1000); + now_perf = SDL_GetPerformanceCounter(); + now = SDL_GetTicks(); + SDL_Log("Delay 1 second = %d ms in ticks, %f ms according to performance counter\n", (int)(now - start), (double)((now_perf - start_perf) * 1000) / SDL_GetPerformanceFrequency()); + + if (run_interactive_tests) { + return_code = test_sdl_delay_within_bounds(); + } + + SDLTest_CommonDestroyState(state); + SDL_Quit(); + return return_code; +} diff --git a/vendor/sdl-3.0.0/test/testurl.c b/vendor/sdl-3.0.0/test/testurl.c new file mode 100644 index 0000000..e39674b --- /dev/null +++ b/vendor/sdl-3.0.0/test/testurl.c @@ -0,0 +1,43 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +#include +#include + +static void tryOpenURL(const char *url) +{ + SDL_Log("Opening '%s' ...", url); + if (SDL_OpenURL(url) == 0) { + SDL_Log(" success!"); + } else { + SDL_Log(" failed! %s", SDL_GetError()); + } +} + +int main(int argc, char **argv) +{ + int i; + if (SDL_Init(SDL_INIT_VIDEO) == -1) { + SDL_Log("SDL_Init failed: %s\n", SDL_GetError()); + return 1; + } + + if (argc > 1) { + for (i = 1; i < argc; i++) { + tryOpenURL(argv[i]); + } + } else { + tryOpenURL("https://libsdl.org/"); + } + + SDL_Quit(); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testutils.c b/vendor/sdl-3.0.0/test/testutils.c new file mode 100644 index 0000000..f49b38e --- /dev/null +++ b/vendor/sdl-3.0.0/test/testutils.c @@ -0,0 +1,158 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + Copyright 2022 Collabora Ltd. + + 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. +*/ + +#include "testutils.h" + +/** + * Return the absolute path to def in the SDL_GetBasePath() if possible, or + * the relative path to def on platforms that don't have a working + * SDL_GetBasePath(). Free the result with SDL_free. + * + * Fails and returns NULL if out of memory. + */ +char * +GetNearbyFilename(const char *file) +{ + char *base; + char *path; + + base = SDL_GetBasePath(); + + if (base != NULL) { + SDL_RWops *rw; + size_t len = SDL_strlen(base) + SDL_strlen(file) + 1; + + path = SDL_malloc(len); + + if (path == NULL) { + SDL_free(base); + SDL_OutOfMemory(); + return NULL; + } + + (void)SDL_snprintf(path, len, "%s%s", base, file); + SDL_free(base); + + rw = SDL_RWFromFile(path, "rb"); + if (rw) { + SDL_RWclose(rw); + return path; + } + + /* Couldn't find the file in the base path */ + SDL_free(path); + } + + path = SDL_strdup(file); + if (path == NULL) { + SDL_OutOfMemory(); + } + return path; +} + +/** + * If user_specified is non-NULL, return a copy of it. Free with SDL_free. + * + * Otherwise, return the absolute path to def in the SDL_GetBasePath() if + * possible, or the relative path to def on platforms that don't have a + * working SDL_GetBasePath(). Free the result with SDL_free. + * + * Fails and returns NULL if out of memory. + */ +char * +GetResourceFilename(const char *user_specified, const char *def) +{ + if (user_specified != NULL) { + char *ret = SDL_strdup(user_specified); + + if (ret == NULL) { + SDL_OutOfMemory(); + } + + return ret; + } else { + return GetNearbyFilename(def); + } +} + +/** + * Load the .bmp file whose name is file, from the SDL_GetBasePath() if + * possible or the current working directory if not. + * + * If transparent is true, set the transparent colour from the top left pixel. + * + * If width_out is non-NULL, set it to the texture width. + * + * If height_out is non-NULL, set it to the texture height. + */ +SDL_Texture * +LoadTexture(SDL_Renderer *renderer, const char *file, SDL_bool transparent, + int *width_out, int *height_out) +{ + SDL_Surface *temp = NULL; + SDL_Texture *texture = NULL; + char *path; + + path = GetNearbyFilename(file); + + if (path != NULL) { + file = path; + } + + temp = SDL_LoadBMP(file); + if (temp == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s", file, SDL_GetError()); + } else { + /* Set transparent pixel as the pixel at (0,0) */ + if (transparent) { + if (temp->format->palette) { + SDL_SetSurfaceColorKey(temp, SDL_TRUE, *(Uint8 *)temp->pixels); + } else { + switch (temp->format->BitsPerPixel) { + case 15: + SDL_SetSurfaceColorKey(temp, SDL_TRUE, + (*(Uint16 *)temp->pixels) & 0x00007FFF); + break; + case 16: + SDL_SetSurfaceColorKey(temp, SDL_TRUE, *(Uint16 *)temp->pixels); + break; + case 24: + SDL_SetSurfaceColorKey(temp, SDL_TRUE, + (*(Uint32 *)temp->pixels) & 0x00FFFFFF); + break; + case 32: + SDL_SetSurfaceColorKey(temp, SDL_TRUE, *(Uint32 *)temp->pixels); + break; + } + } + } + + if (width_out != NULL) { + *width_out = temp->w; + } + + if (height_out != NULL) { + *height_out = temp->h; + } + + texture = SDL_CreateTextureFromSurface(renderer, temp); + if (texture == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError()); + } + } + SDL_DestroySurface(temp); + if (path) { + SDL_free(path); + } + return texture; +} diff --git a/vendor/sdl-3.0.0/test/testutils.h b/vendor/sdl-3.0.0/test/testutils.h new file mode 100644 index 0000000..614d6b5 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testutils.h @@ -0,0 +1,24 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + Copyright 2022 Collabora Ltd. + + 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. +*/ + +#ifndef TESTUTILS_H +#define TESTUTILS_H + +#include + +SDL_Texture *LoadTexture(SDL_Renderer *renderer, const char *file, SDL_bool transparent, + int *width_out, int *height_out); +char *GetNearbyFilename(const char *file); +char *GetResourceFilename(const char *user_specified, const char *def); + +#endif diff --git a/vendor/sdl-3.0.0/test/testver.c b/vendor/sdl-3.0.0/test/testver.c new file mode 100644 index 0000000..313ea8c --- /dev/null +++ b/vendor/sdl-3.0.0/test/testver.c @@ -0,0 +1,48 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Test program to compare the compile-time version of SDL with the linked + version of SDL +*/ +#include +#include +#include + +int main(int argc, char *argv[]) +{ + SDL_version compiled; + SDL_version linked; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (argc > 1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "USAGE: %s", argv[0]); + return 1; + } + +#if SDL_VERSION_ATLEAST(3, 0, 0) + SDL_Log("Compiled with SDL 3.0 or newer\n"); +#else + SDL_Log("Compiled with SDL older than 3.0\n"); +#endif + SDL_VERSION(&compiled); + SDL_Log("Compiled version: %d.%d.%d (%s)\n", + compiled.major, compiled.minor, compiled.patch, + SDL_REVISION); + SDL_GetVersion(&linked); + SDL_Log("Linked version: %d.%d.%d (%s)\n", + linked.major, linked.minor, linked.patch, + SDL_GetRevision()); + SDL_Quit(); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testviewport.c b/vendor/sdl-3.0.0/test/testviewport.c new file mode 100644 index 0000000..006d3c2 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testviewport.c @@ -0,0 +1,239 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +/* Simple program: Check viewports */ + +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include +#include +#include "testutils.h" + +static SDLTest_CommonState *state; + +static SDL_Rect viewport; +static int done, j; +static SDL_bool use_target = SDL_FALSE; +#ifdef __EMSCRIPTEN__ +static Uint32 wait_start; +#endif +static SDL_Texture *sprite; +static int sprite_w, sprite_h; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static void DrawOnViewport(SDL_Renderer *renderer) +{ + SDL_FRect rect; + SDL_Rect cliprect; + int w, h; + + /* Set the viewport */ + SDL_SetRenderViewport(renderer, &viewport); + + /* Draw a gray background */ + SDL_SetRenderDrawColor(renderer, 0x80, 0x80, 0x80, 0xFF); + SDL_RenderClear(renderer); + + /* Test inside points */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0x00, 0xFF); + SDL_RenderPoint(renderer, (float)(viewport.h / 2 + 20), (float)(viewport.w / 2)); + SDL_RenderPoint(renderer, (float)(viewport.h / 2 - 20), (float)(viewport.w / 2)); + SDL_RenderPoint(renderer, (float)(viewport.h / 2), (float)(viewport.w / 2 - 20)); + SDL_RenderPoint(renderer, (float)(viewport.h / 2), (float)(viewport.w / 2 + 20)); + + /* Test horizontal and vertical lines */ + SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF); + SDL_RenderLine(renderer, 1.0f, 0.0f, (float)(viewport.w - 2), 0.0f); + SDL_RenderLine(renderer, 1.0f, (float)(viewport.h - 1), (float)(viewport.w - 2), (float)(viewport.h - 1)); + SDL_RenderLine(renderer, 0.0f, 1.0f, 0.0f, (float)(viewport.h - 2)); + SDL_RenderLine(renderer, (float)(viewport.w - 1), 1.0f, (float)(viewport.w - 1), (float)(viewport.h - 2)); + + /* Test diagonal lines */ + SDL_SetRenderDrawColor(renderer, 0x00, 0xff, 0xFF, 0xFF); + SDL_RenderLine(renderer, 0.0f, 0.0f, (float)(viewport.w - 1), (float)(viewport.h - 1)); + SDL_RenderLine(renderer, (float)(viewport.w - 1), 0.0f, 0.0f, (float)(viewport.h - 1)); + + /* Test outside points */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0x00, 0xFF); + SDL_RenderPoint(renderer, (float)(viewport.h / 2 + viewport.h), (float)(viewport.w / 2)); + SDL_RenderPoint(renderer, (float)(viewport.h / 2 - viewport.h), (float)(viewport.w / 2)); + SDL_RenderPoint(renderer, (float)(viewport.h / 2), (float)(viewport.w / 2 - viewport.w)); + SDL_RenderPoint(renderer, (float)(viewport.h / 2), (float)(viewport.w / 2 + viewport.w)); + + /* Add a box at the top */ + rect.w = 8.0f; + rect.h = 8.0f; + rect.x = (float)((viewport.w - rect.w) / 2); + rect.y = 0.0f; + SDL_RenderFillRect(renderer, &rect); + + /* Add a clip rect and fill it with the sprite */ + SDL_QueryTexture(sprite, NULL, NULL, &w, &h); + cliprect.x = (viewport.w - w) / 2; + cliprect.y = (viewport.h - h) / 2; + cliprect.w = w; + cliprect.h = h; + rect.x = (float)cliprect.x; + rect.y = (float)cliprect.y; + rect.w = (float)cliprect.w; + rect.h = (float)cliprect.h; + SDL_SetRenderClipRect(renderer, &cliprect); + SDL_RenderTexture(renderer, sprite, NULL, &rect); + SDL_SetRenderClipRect(renderer, NULL); +} + +static void loop(void) +{ + SDL_Event event; + int i; +#ifdef __EMSCRIPTEN__ + /* Avoid using delays */ + if (SDL_GetTicks() - wait_start < 1000) { + return; + } + wait_start = SDL_GetTicks(); +#endif + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + + /* Move a viewport box in steps around the screen */ + viewport.x = j * 100; + viewport.y = viewport.x; + viewport.w = 100 + j * 50; + viewport.h = 100 + j * 50; + j = (j + 1) % 4; + SDL_Log("Current Viewport x=%i y=%i w=%i h=%i", viewport.x, viewport.y, viewport.w, viewport.h); + + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) { + continue; + } + + /* Draw using viewport */ + DrawOnViewport(state->renderers[i]); + + /* Update the screen! */ + if (use_target) { + SDL_SetRenderTarget(state->renderers[i], NULL); + SDL_RenderTexture(state->renderers[i], state->targets[i], NULL, NULL); + SDL_RenderPresent(state->renderers[i]); + SDL_SetRenderTarget(state->renderers[i], state->targets[i]); + } else { + SDL_RenderPresent(state->renderers[i]); + } + } + +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int main(int argc, char *argv[]) +{ + int i; + Uint64 then, now; + Uint32 frames; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--target") == 0) { + use_target = SDL_TRUE; + consumed = 1; + } + } + if (consumed < 0) { + static const char *options[] = { "[--target]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + quit(1); + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + sprite = LoadTexture(state->renderers[0], "icon.bmp", SDL_TRUE, &sprite_w, &sprite_h); + + if (sprite == NULL) { + quit(2); + } + + if (use_target) { + int w, h; + + for (i = 0; i < state->num_windows; ++i) { + SDL_GetWindowSize(state->windows[i], &w, &h); + state->targets[i] = SDL_CreateTexture(state->renderers[i], SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, w, h); + SDL_SetRenderTarget(state->renderers[i], state->targets[i]); + } + } + + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + j = 0; + +#ifdef __EMSCRIPTEN__ + wait_start = SDL_GetTicks(); + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + SDL_Delay(1000); + } +#endif + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double)frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + quit(0); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testvulkan.c b/vendor/sdl-3.0.0/test/testvulkan.c new file mode 100644 index 0000000..c20e4bc --- /dev/null +++ b/vendor/sdl-3.0.0/test/testvulkan.c @@ -0,0 +1,1169 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +#include + +#include +#include + +#if defined(__ANDROID__) && defined(__ARM_EABI__) && !defined(__ARM_ARCH_7A__) + +int main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No Vulkan support on this system\n"); + return 1; +} + +#else + +#define VK_NO_PROTOTYPES +#ifdef HAVE_VULKAN_H +#include +#else +/* SDL includes a copy for building on systems without the Vulkan SDK */ +#include "../src/video/khronos/vulkan/vulkan.h" +#endif +#include + +#ifndef UINT64_MAX /* VS2008 */ +#define UINT64_MAX 18446744073709551615 +#endif + +#define VULKAN_FUNCTIONS() \ + VULKAN_DEVICE_FUNCTION(vkAcquireNextImageKHR) \ + VULKAN_DEVICE_FUNCTION(vkAllocateCommandBuffers) \ + VULKAN_DEVICE_FUNCTION(vkBeginCommandBuffer) \ + VULKAN_DEVICE_FUNCTION(vkCmdClearColorImage) \ + VULKAN_DEVICE_FUNCTION(vkCmdPipelineBarrier) \ + VULKAN_DEVICE_FUNCTION(vkCreateCommandPool) \ + VULKAN_DEVICE_FUNCTION(vkCreateFence) \ + VULKAN_DEVICE_FUNCTION(vkCreateImageView) \ + VULKAN_DEVICE_FUNCTION(vkCreateSemaphore) \ + VULKAN_DEVICE_FUNCTION(vkCreateSwapchainKHR) \ + VULKAN_DEVICE_FUNCTION(vkDestroyCommandPool) \ + VULKAN_DEVICE_FUNCTION(vkDestroyDevice) \ + VULKAN_DEVICE_FUNCTION(vkDestroyFence) \ + VULKAN_DEVICE_FUNCTION(vkDestroyImageView) \ + VULKAN_DEVICE_FUNCTION(vkDestroySemaphore) \ + VULKAN_DEVICE_FUNCTION(vkDestroySwapchainKHR) \ + VULKAN_DEVICE_FUNCTION(vkDeviceWaitIdle) \ + VULKAN_DEVICE_FUNCTION(vkEndCommandBuffer) \ + VULKAN_DEVICE_FUNCTION(vkFreeCommandBuffers) \ + VULKAN_DEVICE_FUNCTION(vkGetDeviceQueue) \ + VULKAN_DEVICE_FUNCTION(vkGetFenceStatus) \ + VULKAN_DEVICE_FUNCTION(vkGetSwapchainImagesKHR) \ + VULKAN_DEVICE_FUNCTION(vkQueuePresentKHR) \ + VULKAN_DEVICE_FUNCTION(vkQueueSubmit) \ + VULKAN_DEVICE_FUNCTION(vkResetCommandBuffer) \ + VULKAN_DEVICE_FUNCTION(vkResetFences) \ + VULKAN_DEVICE_FUNCTION(vkWaitForFences) \ + VULKAN_GLOBAL_FUNCTION(vkCreateInstance) \ + VULKAN_GLOBAL_FUNCTION(vkEnumerateInstanceExtensionProperties) \ + VULKAN_GLOBAL_FUNCTION(vkEnumerateInstanceLayerProperties) \ + VULKAN_INSTANCE_FUNCTION(vkCreateDevice) \ + VULKAN_INSTANCE_FUNCTION(vkDestroyInstance) \ + VULKAN_INSTANCE_FUNCTION(vkDestroySurfaceKHR) \ + VULKAN_INSTANCE_FUNCTION(vkEnumerateDeviceExtensionProperties) \ + VULKAN_INSTANCE_FUNCTION(vkEnumeratePhysicalDevices) \ + VULKAN_INSTANCE_FUNCTION(vkGetDeviceProcAddr) \ + VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceFeatures) \ + VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceProperties) \ + VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceQueueFamilyProperties) \ + VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfaceCapabilitiesKHR) \ + VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfaceFormatsKHR) \ + VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfacePresentModesKHR) \ + VULKAN_INSTANCE_FUNCTION(vkGetPhysicalDeviceSurfaceSupportKHR) + +#define VULKAN_DEVICE_FUNCTION(name) static PFN_##name name = NULL; +#define VULKAN_GLOBAL_FUNCTION(name) static PFN_##name name = NULL; +#define VULKAN_INSTANCE_FUNCTION(name) static PFN_##name name = NULL; +VULKAN_FUNCTIONS() +#undef VULKAN_DEVICE_FUNCTION +#undef VULKAN_GLOBAL_FUNCTION +#undef VULKAN_INSTANCE_FUNCTION +static PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = NULL; + +/* Based on the headers found in + * https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers + */ +#if VK_HEADER_VERSION < 22 +enum +{ + VK_ERROR_FRAGMENTED_POOL = -12, +}; +#endif +#if VK_HEADER_VERSION < 38 +enum +{ + VK_ERROR_OUT_OF_POOL_MEMORY_KHR = -1000069000 +}; +#endif + +static const char *getVulkanResultString(VkResult result) +{ + switch ((int)result) { +#define RESULT_CASE(x) \ + case x: \ + return #x + RESULT_CASE(VK_SUCCESS); + RESULT_CASE(VK_NOT_READY); + RESULT_CASE(VK_TIMEOUT); + RESULT_CASE(VK_EVENT_SET); + RESULT_CASE(VK_EVENT_RESET); + RESULT_CASE(VK_INCOMPLETE); + RESULT_CASE(VK_ERROR_OUT_OF_HOST_MEMORY); + RESULT_CASE(VK_ERROR_OUT_OF_DEVICE_MEMORY); + RESULT_CASE(VK_ERROR_INITIALIZATION_FAILED); + RESULT_CASE(VK_ERROR_DEVICE_LOST); + RESULT_CASE(VK_ERROR_MEMORY_MAP_FAILED); + RESULT_CASE(VK_ERROR_LAYER_NOT_PRESENT); + RESULT_CASE(VK_ERROR_EXTENSION_NOT_PRESENT); + RESULT_CASE(VK_ERROR_FEATURE_NOT_PRESENT); + RESULT_CASE(VK_ERROR_INCOMPATIBLE_DRIVER); + RESULT_CASE(VK_ERROR_TOO_MANY_OBJECTS); + RESULT_CASE(VK_ERROR_FORMAT_NOT_SUPPORTED); + RESULT_CASE(VK_ERROR_FRAGMENTED_POOL); + RESULT_CASE(VK_ERROR_SURFACE_LOST_KHR); + RESULT_CASE(VK_ERROR_NATIVE_WINDOW_IN_USE_KHR); + RESULT_CASE(VK_SUBOPTIMAL_KHR); + RESULT_CASE(VK_ERROR_OUT_OF_DATE_KHR); + RESULT_CASE(VK_ERROR_INCOMPATIBLE_DISPLAY_KHR); + RESULT_CASE(VK_ERROR_VALIDATION_FAILED_EXT); + RESULT_CASE(VK_ERROR_OUT_OF_POOL_MEMORY_KHR); + RESULT_CASE(VK_ERROR_INVALID_SHADER_NV); +#undef RESULT_CASE + default: + break; + } + return (result < 0) ? "VK_ERROR_" : "VK_"; +} + +typedef struct VulkanContext +{ + SDL_Window *window; + VkInstance instance; + VkDevice device; + VkSurfaceKHR surface; + VkSwapchainKHR swapchain; + VkPhysicalDeviceProperties physicalDeviceProperties; + VkPhysicalDeviceFeatures physicalDeviceFeatures; + uint32_t graphicsQueueFamilyIndex; + uint32_t presentQueueFamilyIndex; + VkPhysicalDevice physicalDevice; + VkQueue graphicsQueue; + VkQueue presentQueue; + VkSemaphore imageAvailableSemaphore; + VkSemaphore renderingFinishedSemaphore; + VkSurfaceCapabilitiesKHR surfaceCapabilities; + VkSurfaceFormatKHR *surfaceFormats; + uint32_t surfaceFormatsAllocatedCount; + uint32_t surfaceFormatsCount; + uint32_t swapchainDesiredImageCount; + VkSurfaceFormatKHR surfaceFormat; + VkExtent2D swapchainSize; + VkCommandPool commandPool; + uint32_t swapchainImageCount; + VkImage *swapchainImages; + VkCommandBuffer *commandBuffers; + VkFence *fences; +} VulkanContext; + +static SDLTest_CommonState *state; +static VulkanContext *vulkanContexts = NULL; /* an array of state->num_windows items */ +static VulkanContext *vulkanContext = NULL; /* for the currently-rendering window */ + +static void shutdownVulkan(SDL_bool doDestroySwapchain); + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void quit(int rc) +{ + shutdownVulkan(SDL_TRUE); + SDLTest_CommonQuit(state); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static void loadGlobalFunctions(void) +{ + vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)SDL_Vulkan_GetVkGetInstanceProcAddr(); + if (!vkGetInstanceProcAddr) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "SDL_Vulkan_GetVkGetInstanceProcAddr(): %s\n", + SDL_GetError()); + quit(2); + } + +#define VULKAN_DEVICE_FUNCTION(name) +#define VULKAN_GLOBAL_FUNCTION(name) \ + name = (PFN_##name)vkGetInstanceProcAddr(VK_NULL_HANDLE, #name); \ + if (!name) { \ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, \ + "vkGetInstanceProcAddr(VK_NULL_HANDLE, \"" #name "\") failed\n"); \ + quit(2); \ + } +#define VULKAN_INSTANCE_FUNCTION(name) + VULKAN_FUNCTIONS() +#undef VULKAN_DEVICE_FUNCTION +#undef VULKAN_GLOBAL_FUNCTION +#undef VULKAN_INSTANCE_FUNCTION +} + +static void createInstance(void) +{ + VkApplicationInfo appInfo = { 0 }; + VkInstanceCreateInfo instanceCreateInfo = { 0 }; + const char **extensions = NULL; + unsigned extensionCount = 0; + VkResult result; + + appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; + appInfo.apiVersion = VK_API_VERSION_1_0; + instanceCreateInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + instanceCreateInfo.pApplicationInfo = &appInfo; + if (!SDL_Vulkan_GetInstanceExtensions(&extensionCount, NULL)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "SDL_Vulkan_GetInstanceExtensions(): %s\n", + SDL_GetError()); + quit(2); + } + extensions = (const char **)SDL_malloc(sizeof(const char *) * extensionCount); + if (extensions == NULL) { + SDL_OutOfMemory(); + quit(2); + } + if (!SDL_Vulkan_GetInstanceExtensions(&extensionCount, extensions)) { + SDL_free((void *)extensions); + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "SDL_Vulkan_GetInstanceExtensions(): %s\n", + SDL_GetError()); + quit(2); + } + instanceCreateInfo.enabledExtensionCount = extensionCount; + instanceCreateInfo.ppEnabledExtensionNames = extensions; + result = vkCreateInstance(&instanceCreateInfo, NULL, &vulkanContext->instance); + SDL_free((void *)extensions); + if (result != VK_SUCCESS) { + vulkanContext->instance = VK_NULL_HANDLE; + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkCreateInstance(): %s\n", + getVulkanResultString(result)); + quit(2); + } +} + +static void loadInstanceFunctions(void) +{ +#define VULKAN_DEVICE_FUNCTION(name) +#define VULKAN_GLOBAL_FUNCTION(name) +#define VULKAN_INSTANCE_FUNCTION(name) \ + name = (PFN_##name)vkGetInstanceProcAddr(vulkanContext->instance, #name); \ + if (!name) { \ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, \ + "vkGetInstanceProcAddr(instance, \"" #name "\") failed\n"); \ + quit(2); \ + } + VULKAN_FUNCTIONS() +#undef VULKAN_DEVICE_FUNCTION +#undef VULKAN_GLOBAL_FUNCTION +#undef VULKAN_INSTANCE_FUNCTION +} + +static void createSurface(void) +{ + if (!SDL_Vulkan_CreateSurface(vulkanContext->window, + vulkanContext->instance, + &vulkanContext->surface)) { + vulkanContext->surface = VK_NULL_HANDLE; + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Vulkan_CreateSurface(): %s\n", SDL_GetError()); + quit(2); + } +} + +static void findPhysicalDevice(void) +{ + uint32_t physicalDeviceCount = 0; + VkPhysicalDevice *physicalDevices; + VkQueueFamilyProperties *queueFamiliesProperties = NULL; + uint32_t queueFamiliesPropertiesAllocatedSize = 0; + VkExtensionProperties *deviceExtensions = NULL; + uint32_t deviceExtensionsAllocatedSize = 0; + uint32_t physicalDeviceIndex; + VkResult result; + + result = vkEnumeratePhysicalDevices(vulkanContext->instance, &physicalDeviceCount, NULL); + if (result != VK_SUCCESS) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkEnumeratePhysicalDevices(): %s\n", + getVulkanResultString(result)); + quit(2); + } + if (physicalDeviceCount == 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkEnumeratePhysicalDevices(): no physical devices\n"); + quit(2); + } + physicalDevices = (VkPhysicalDevice *)SDL_malloc(sizeof(VkPhysicalDevice) * physicalDeviceCount); + if (physicalDevices == NULL) { + SDL_OutOfMemory(); + quit(2); + } + result = vkEnumeratePhysicalDevices(vulkanContext->instance, &physicalDeviceCount, physicalDevices); + if (result != VK_SUCCESS) { + SDL_free(physicalDevices); + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkEnumeratePhysicalDevices(): %s\n", + getVulkanResultString(result)); + quit(2); + } + vulkanContext->physicalDevice = NULL; + for (physicalDeviceIndex = 0; physicalDeviceIndex < physicalDeviceCount; physicalDeviceIndex++) { + uint32_t queueFamiliesCount = 0; + uint32_t queueFamilyIndex; + uint32_t deviceExtensionCount = 0; + SDL_bool hasSwapchainExtension = SDL_FALSE; + uint32_t i; + + VkPhysicalDevice physicalDevice = physicalDevices[physicalDeviceIndex]; + vkGetPhysicalDeviceProperties(physicalDevice, &vulkanContext->physicalDeviceProperties); + if (VK_VERSION_MAJOR(vulkanContext->physicalDeviceProperties.apiVersion) < 1) { + continue; + } + vkGetPhysicalDeviceFeatures(physicalDevice, &vulkanContext->physicalDeviceFeatures); + vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamiliesCount, NULL); + if (queueFamiliesCount == 0) { + continue; + } + if (queueFamiliesPropertiesAllocatedSize < queueFamiliesCount) { + SDL_free(queueFamiliesProperties); + queueFamiliesPropertiesAllocatedSize = queueFamiliesCount; + queueFamiliesProperties = (VkQueueFamilyProperties *)SDL_malloc(sizeof(VkQueueFamilyProperties) * queueFamiliesPropertiesAllocatedSize); + if (queueFamiliesProperties == NULL) { + SDL_free(physicalDevices); + SDL_free(deviceExtensions); + SDL_OutOfMemory(); + quit(2); + } + } + vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamiliesCount, queueFamiliesProperties); + vulkanContext->graphicsQueueFamilyIndex = queueFamiliesCount; + vulkanContext->presentQueueFamilyIndex = queueFamiliesCount; + for (queueFamilyIndex = 0; queueFamilyIndex < queueFamiliesCount; queueFamilyIndex++) { + VkBool32 supported = 0; + + if (queueFamiliesProperties[queueFamilyIndex].queueCount == 0) { + continue; + } + + if (queueFamiliesProperties[queueFamilyIndex].queueFlags & VK_QUEUE_GRAPHICS_BIT) { + vulkanContext->graphicsQueueFamilyIndex = queueFamilyIndex; + } + + result = vkGetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, vulkanContext->surface, &supported); + if (result != VK_SUCCESS) { + SDL_free(physicalDevices); + SDL_free(queueFamiliesProperties); + SDL_free(deviceExtensions); + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkGetPhysicalDeviceSurfaceSupportKHR(): %s\n", + getVulkanResultString(result)); + quit(2); + } + if (supported) { + vulkanContext->presentQueueFamilyIndex = queueFamilyIndex; + if (queueFamiliesProperties[queueFamilyIndex].queueFlags & VK_QUEUE_GRAPHICS_BIT) { + break; // use this queue because it can present and do graphics + } + } + } + + if (vulkanContext->graphicsQueueFamilyIndex == queueFamiliesCount) { // no good queues found + continue; + } + if (vulkanContext->presentQueueFamilyIndex == queueFamiliesCount) { // no good queues found + continue; + } + result = vkEnumerateDeviceExtensionProperties(physicalDevice, NULL, &deviceExtensionCount, NULL); + if (result != VK_SUCCESS) { + SDL_free(physicalDevices); + SDL_free(queueFamiliesProperties); + SDL_free(deviceExtensions); + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkEnumerateDeviceExtensionProperties(): %s\n", + getVulkanResultString(result)); + quit(2); + } + if (deviceExtensionCount == 0) { + continue; + } + if (deviceExtensionsAllocatedSize < deviceExtensionCount) { + SDL_free(deviceExtensions); + deviceExtensionsAllocatedSize = deviceExtensionCount; + deviceExtensions = SDL_malloc(sizeof(VkExtensionProperties) * deviceExtensionsAllocatedSize); + if (deviceExtensions == NULL) { + SDL_free(physicalDevices); + SDL_free(queueFamiliesProperties); + SDL_OutOfMemory(); + quit(2); + } + } + result = vkEnumerateDeviceExtensionProperties(physicalDevice, NULL, &deviceExtensionCount, deviceExtensions); + if (result != VK_SUCCESS) { + SDL_free(physicalDevices); + SDL_free(queueFamiliesProperties); + SDL_free(deviceExtensions); + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkEnumerateDeviceExtensionProperties(): %s\n", + getVulkanResultString(result)); + quit(2); + } + for (i = 0; i < deviceExtensionCount; i++) { + if (SDL_strcmp(deviceExtensions[i].extensionName, VK_KHR_SWAPCHAIN_EXTENSION_NAME) == 0) { + hasSwapchainExtension = SDL_TRUE; + break; + } + } + if (!hasSwapchainExtension) { + continue; + } + vulkanContext->physicalDevice = physicalDevice; + break; + } + SDL_free(physicalDevices); + SDL_free(queueFamiliesProperties); + SDL_free(deviceExtensions); + if (!vulkanContext->physicalDevice) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Vulkan: no viable physical devices found"); + quit(2); + } +} + +static void createDevice(void) +{ + VkDeviceQueueCreateInfo deviceQueueCreateInfo[1] = { { 0 } }; + static const float queuePriority[] = { 1.0f }; + VkDeviceCreateInfo deviceCreateInfo = { 0 }; + static const char *const deviceExtensionNames[] = { + VK_KHR_SWAPCHAIN_EXTENSION_NAME, + }; + VkResult result; + + deviceQueueCreateInfo->sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; + deviceQueueCreateInfo->queueFamilyIndex = vulkanContext->graphicsQueueFamilyIndex; + deviceQueueCreateInfo->queueCount = 1; + deviceQueueCreateInfo->pQueuePriorities = &queuePriority[0]; + + deviceCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; + deviceCreateInfo.queueCreateInfoCount = 1; + deviceCreateInfo.pQueueCreateInfos = deviceQueueCreateInfo; + deviceCreateInfo.pEnabledFeatures = NULL; + deviceCreateInfo.enabledExtensionCount = SDL_arraysize(deviceExtensionNames); + deviceCreateInfo.ppEnabledExtensionNames = deviceExtensionNames; + result = vkCreateDevice(vulkanContext->physicalDevice, &deviceCreateInfo, NULL, &vulkanContext->device); + if (result != VK_SUCCESS) { + vulkanContext->device = VK_NULL_HANDLE; + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "vkCreateDevice(): %s\n", getVulkanResultString(result)); + quit(2); + } +} + +static void loadDeviceFunctions(void) +{ +#define VULKAN_DEVICE_FUNCTION(name) \ + name = (PFN_##name)vkGetDeviceProcAddr(vulkanContext->device, #name); \ + if (!name) { \ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, \ + "vkGetDeviceProcAddr(device, \"" #name "\") failed\n"); \ + quit(2); \ + } +#define VULKAN_GLOBAL_FUNCTION(name) +#define VULKAN_INSTANCE_FUNCTION(name) + VULKAN_FUNCTIONS() +#undef VULKAN_DEVICE_FUNCTION +#undef VULKAN_GLOBAL_FUNCTION +#undef VULKAN_INSTANCE_FUNCTION +} + +#undef VULKAN_FUNCTIONS + +static void getQueues(void) +{ + vkGetDeviceQueue(vulkanContext->device, + vulkanContext->graphicsQueueFamilyIndex, + 0, + &vulkanContext->graphicsQueue); + if (vulkanContext->graphicsQueueFamilyIndex != vulkanContext->presentQueueFamilyIndex) { + vkGetDeviceQueue(vulkanContext->device, + vulkanContext->presentQueueFamilyIndex, + 0, + &vulkanContext->presentQueue); + } else { + vulkanContext->presentQueue = vulkanContext->graphicsQueue; + } +} + +static void createSemaphore(VkSemaphore *semaphore) +{ + VkResult result; + + VkSemaphoreCreateInfo createInfo = { 0 }; + createInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; + result = vkCreateSemaphore(vulkanContext->device, &createInfo, NULL, semaphore); + if (result != VK_SUCCESS) { + *semaphore = VK_NULL_HANDLE; + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkCreateSemaphore(): %s\n", + getVulkanResultString(result)); + quit(2); + } +} + +static void createSemaphores(void) +{ + createSemaphore(&vulkanContext->imageAvailableSemaphore); + createSemaphore(&vulkanContext->renderingFinishedSemaphore); +} + +static void getSurfaceCaps(void) +{ + VkResult result = vkGetPhysicalDeviceSurfaceCapabilitiesKHR(vulkanContext->physicalDevice, vulkanContext->surface, &vulkanContext->surfaceCapabilities); + if (result != VK_SUCCESS) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkGetPhysicalDeviceSurfaceCapabilitiesKHR(): %s\n", + getVulkanResultString(result)); + quit(2); + } + + // check surface usage + if (!(vulkanContext->surfaceCapabilities.supportedUsageFlags & VK_IMAGE_USAGE_TRANSFER_DST_BIT)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "Vulkan surface doesn't support VK_IMAGE_USAGE_TRANSFER_DST_BIT\n"); + quit(2); + } +} + +static void getSurfaceFormats(void) +{ + VkResult result = vkGetPhysicalDeviceSurfaceFormatsKHR(vulkanContext->physicalDevice, + vulkanContext->surface, + &vulkanContext->surfaceFormatsCount, + NULL); + if (result != VK_SUCCESS) { + vulkanContext->surfaceFormatsCount = 0; + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkGetPhysicalDeviceSurfaceFormatsKHR(): %s\n", + getVulkanResultString(result)); + quit(2); + } + if (vulkanContext->surfaceFormatsCount > vulkanContext->surfaceFormatsAllocatedCount) { + vulkanContext->surfaceFormatsAllocatedCount = vulkanContext->surfaceFormatsCount; + SDL_free(vulkanContext->surfaceFormats); + vulkanContext->surfaceFormats = (VkSurfaceFormatKHR *)SDL_malloc(sizeof(VkSurfaceFormatKHR) * vulkanContext->surfaceFormatsAllocatedCount); + if (!vulkanContext->surfaceFormats) { + vulkanContext->surfaceFormatsCount = 0; + SDL_OutOfMemory(); + quit(2); + } + } + result = vkGetPhysicalDeviceSurfaceFormatsKHR(vulkanContext->physicalDevice, + vulkanContext->surface, + &vulkanContext->surfaceFormatsCount, + vulkanContext->surfaceFormats); + if (result != VK_SUCCESS) { + vulkanContext->surfaceFormatsCount = 0; + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkGetPhysicalDeviceSurfaceFormatsKHR(): %s\n", + getVulkanResultString(result)); + quit(2); + } +} + +static void getSwapchainImages(void) +{ + VkResult result; + + SDL_free(vulkanContext->swapchainImages); + vulkanContext->swapchainImages = NULL; + result = vkGetSwapchainImagesKHR(vulkanContext->device, vulkanContext->swapchain, &vulkanContext->swapchainImageCount, NULL); + if (result != VK_SUCCESS) { + vulkanContext->swapchainImageCount = 0; + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkGetSwapchainImagesKHR(): %s\n", + getVulkanResultString(result)); + quit(2); + } + vulkanContext->swapchainImages = SDL_malloc(sizeof(VkImage) * vulkanContext->swapchainImageCount); + if (!vulkanContext->swapchainImages) { + SDL_OutOfMemory(); + quit(2); + } + result = vkGetSwapchainImagesKHR(vulkanContext->device, + vulkanContext->swapchain, + &vulkanContext->swapchainImageCount, + vulkanContext->swapchainImages); + if (result != VK_SUCCESS) { + SDL_free(vulkanContext->swapchainImages); + vulkanContext->swapchainImages = NULL; + vulkanContext->swapchainImageCount = 0; + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkGetSwapchainImagesKHR(): %s\n", + getVulkanResultString(result)); + quit(2); + } +} + +static SDL_bool createSwapchain(void) +{ + uint32_t i; + int w, h; + VkSwapchainCreateInfoKHR createInfo = { 0 }; + VkResult result; + Uint32 flags; + + // pick an image count + vulkanContext->swapchainDesiredImageCount = vulkanContext->surfaceCapabilities.minImageCount + 1; + if ((vulkanContext->swapchainDesiredImageCount > vulkanContext->surfaceCapabilities.maxImageCount) && + (vulkanContext->surfaceCapabilities.maxImageCount > 0)) { + vulkanContext->swapchainDesiredImageCount = vulkanContext->surfaceCapabilities.maxImageCount; + } + + // pick a format + if ((vulkanContext->surfaceFormatsCount == 1) && + (vulkanContext->surfaceFormats[0].format == VK_FORMAT_UNDEFINED)) { + // aren't any preferred formats, so we pick + vulkanContext->surfaceFormat.colorSpace = VK_COLORSPACE_SRGB_NONLINEAR_KHR; + vulkanContext->surfaceFormat.format = VK_FORMAT_R8G8B8A8_UNORM; + } else { + vulkanContext->surfaceFormat = vulkanContext->surfaceFormats[0]; + for (i = 0; i < vulkanContext->surfaceFormatsCount; i++) { + if (vulkanContext->surfaceFormats[i].format == VK_FORMAT_R8G8B8A8_UNORM) { + vulkanContext->surfaceFormat = vulkanContext->surfaceFormats[i]; + break; + } + } + } + + // get size + SDL_GetWindowSizeInPixels(vulkanContext->window, &w, &h); + + // get flags + flags = SDL_GetWindowFlags(vulkanContext->window); + + // Clamp the size to the allowable image extent. + // SDL_GetWindowSizeInPixels()'s result it not always in this range (bug #3287) + vulkanContext->swapchainSize.width = SDL_clamp((uint32_t)w, + vulkanContext->surfaceCapabilities.minImageExtent.width, + vulkanContext->surfaceCapabilities.maxImageExtent.width); + + vulkanContext->swapchainSize.height = SDL_clamp((uint32_t)h, + vulkanContext->surfaceCapabilities.minImageExtent.height, + vulkanContext->surfaceCapabilities.maxImageExtent.height); + + if (w == 0 || h == 0) { + return SDL_FALSE; + } + + getSurfaceCaps(); + + createInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; + createInfo.surface = vulkanContext->surface; + createInfo.minImageCount = vulkanContext->swapchainDesiredImageCount; + createInfo.imageFormat = vulkanContext->surfaceFormat.format; + createInfo.imageColorSpace = vulkanContext->surfaceFormat.colorSpace; + createInfo.imageExtent = vulkanContext->swapchainSize; + createInfo.imageArrayLayers = 1; + createInfo.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; + createInfo.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE; + createInfo.preTransform = vulkanContext->surfaceCapabilities.currentTransform; + if (flags & SDL_WINDOW_TRANSPARENT) { + createInfo.compositeAlpha = VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR; + } else { + createInfo.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; + } + createInfo.presentMode = VK_PRESENT_MODE_FIFO_KHR; + createInfo.clipped = VK_TRUE; + createInfo.oldSwapchain = vulkanContext->swapchain; + result = vkCreateSwapchainKHR(vulkanContext->device, &createInfo, NULL, &vulkanContext->swapchain); + + if (createInfo.oldSwapchain) { + vkDestroySwapchainKHR(vulkanContext->device, createInfo.oldSwapchain, NULL); + } + + if (result != VK_SUCCESS) { + vulkanContext->swapchain = VK_NULL_HANDLE; + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkCreateSwapchainKHR(): %s\n", + getVulkanResultString(result)); + quit(2); + } + + getSwapchainImages(); + return SDL_TRUE; +} + +static void destroySwapchain(void) +{ + if (vulkanContext->swapchain) { + vkDestroySwapchainKHR(vulkanContext->device, vulkanContext->swapchain, NULL); + vulkanContext->swapchain = VK_NULL_HANDLE; + } + SDL_free(vulkanContext->swapchainImages); + vulkanContext->swapchainImages = NULL; +} + +static void destroyCommandBuffers(void) +{ + if (vulkanContext->commandBuffers) { + vkFreeCommandBuffers(vulkanContext->device, + vulkanContext->commandPool, + vulkanContext->swapchainImageCount, + vulkanContext->commandBuffers); + SDL_free(vulkanContext->commandBuffers); + vulkanContext->commandBuffers = NULL; + } +} + +static void destroyCommandPool(void) +{ + if (vulkanContext->commandPool) { + vkDestroyCommandPool(vulkanContext->device, vulkanContext->commandPool, NULL); + } + vulkanContext->commandPool = VK_NULL_HANDLE; +} + +static void createCommandPool(void) +{ + VkResult result; + VkCommandPoolCreateInfo createInfo = { 0 }; + createInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; + createInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT | VK_COMMAND_POOL_CREATE_TRANSIENT_BIT; + createInfo.queueFamilyIndex = vulkanContext->graphicsQueueFamilyIndex; + result = vkCreateCommandPool(vulkanContext->device, &createInfo, NULL, &vulkanContext->commandPool); + if (result != VK_SUCCESS) { + vulkanContext->commandPool = VK_NULL_HANDLE; + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkCreateCommandPool(): %s\n", + getVulkanResultString(result)); + quit(2); + } +} + +static void createCommandBuffers(void) +{ + VkResult result; + VkCommandBufferAllocateInfo allocateInfo = { 0 }; + allocateInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; + allocateInfo.commandPool = vulkanContext->commandPool; + allocateInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; + allocateInfo.commandBufferCount = vulkanContext->swapchainImageCount; + vulkanContext->commandBuffers = (VkCommandBuffer *)SDL_malloc(sizeof(VkCommandBuffer) * vulkanContext->swapchainImageCount); + result = vkAllocateCommandBuffers(vulkanContext->device, &allocateInfo, vulkanContext->commandBuffers); + if (result != VK_SUCCESS) { + SDL_free(vulkanContext->commandBuffers); + vulkanContext->commandBuffers = NULL; + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkAllocateCommandBuffers(): %s\n", + getVulkanResultString(result)); + quit(2); + } +} + +static void createFences(void) +{ + uint32_t i; + + vulkanContext->fences = SDL_malloc(sizeof(VkFence) * vulkanContext->swapchainImageCount); + if (!vulkanContext->fences) { + SDL_OutOfMemory(); + quit(2); + } + for (i = 0; i < vulkanContext->swapchainImageCount; i++) { + VkResult result; + VkFenceCreateInfo createInfo = { 0 }; + createInfo.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; + createInfo.flags = VK_FENCE_CREATE_SIGNALED_BIT; + result = vkCreateFence(vulkanContext->device, &createInfo, NULL, &vulkanContext->fences[i]); + if (result != VK_SUCCESS) { + for (; i > 0; i--) { + vkDestroyFence(vulkanContext->device, vulkanContext->fences[i - 1], NULL); + } + SDL_free(vulkanContext->fences); + vulkanContext->fences = NULL; + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkCreateFence(): %s\n", + getVulkanResultString(result)); + quit(2); + } + } +} + +static void destroyFences(void) +{ + uint32_t i; + + if (!vulkanContext->fences) { + return; + } + + for (i = 0; i < vulkanContext->swapchainImageCount; i++) { + vkDestroyFence(vulkanContext->device, vulkanContext->fences[i], NULL); + } + SDL_free(vulkanContext->fences); + vulkanContext->fences = NULL; +} + +static void recordPipelineImageBarrier(VkCommandBuffer commandBuffer, + VkAccessFlags sourceAccessMask, + VkAccessFlags destAccessMask, + VkImageLayout sourceLayout, + VkImageLayout destLayout, + VkImage image) +{ + VkImageMemoryBarrier barrier = { 0 }; + barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + barrier.srcAccessMask = sourceAccessMask; + barrier.dstAccessMask = destAccessMask; + barrier.oldLayout = sourceLayout; + barrier.newLayout = destLayout; + barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + barrier.image = image; + barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + barrier.subresourceRange.baseMipLevel = 0; + barrier.subresourceRange.levelCount = 1; + barrier.subresourceRange.baseArrayLayer = 0; + barrier.subresourceRange.layerCount = 1; + vkCmdPipelineBarrier(commandBuffer, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + 0, + 0, + NULL, + 0, + NULL, + 1, + &barrier); +} + +static void rerecordCommandBuffer(uint32_t frameIndex, const VkClearColorValue *clearColor) +{ + VkCommandBuffer commandBuffer = vulkanContext->commandBuffers[frameIndex]; + VkImage image = vulkanContext->swapchainImages[frameIndex]; + VkCommandBufferBeginInfo beginInfo = { 0 }; + VkImageSubresourceRange clearRange = { 0 }; + + VkResult result = vkResetCommandBuffer(commandBuffer, 0); + if (result != VK_SUCCESS) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkResetCommandBuffer(): %s\n", + getVulkanResultString(result)); + quit(2); + } + beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; + beginInfo.flags = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT; + result = vkBeginCommandBuffer(commandBuffer, &beginInfo); + if (result != VK_SUCCESS) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkBeginCommandBuffer(): %s\n", + getVulkanResultString(result)); + quit(2); + } + recordPipelineImageBarrier(commandBuffer, + 0, + VK_ACCESS_TRANSFER_WRITE_BIT, + VK_IMAGE_LAYOUT_UNDEFINED, + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + image); + clearRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + clearRange.baseMipLevel = 0; + clearRange.levelCount = 1; + clearRange.baseArrayLayer = 0; + clearRange.layerCount = 1; + vkCmdClearColorImage(commandBuffer, image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, clearColor, 1, &clearRange); + recordPipelineImageBarrier(commandBuffer, + VK_ACCESS_TRANSFER_WRITE_BIT, + VK_ACCESS_MEMORY_READ_BIT, + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, + image); + result = vkEndCommandBuffer(commandBuffer); + if (result != VK_SUCCESS) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkEndCommandBuffer(): %s\n", + getVulkanResultString(result)); + quit(2); + } +} + +static void destroySwapchainAndSwapchainSpecificStuff(SDL_bool doDestroySwapchain) +{ + if (vkDeviceWaitIdle != NULL) { + vkDeviceWaitIdle(vulkanContext->device); + } + destroyFences(); + destroyCommandBuffers(); + destroyCommandPool(); + if (doDestroySwapchain) { + destroySwapchain(); + } +} + +static SDL_bool createNewSwapchainAndSwapchainSpecificStuff(void) +{ + destroySwapchainAndSwapchainSpecificStuff(SDL_FALSE); + getSurfaceCaps(); + getSurfaceFormats(); + if (!createSwapchain()) { + return SDL_FALSE; + } + createCommandPool(); + createCommandBuffers(); + createFences(); + return SDL_TRUE; +} + +static void initVulkan(void) +{ + int i; + + SDL_Vulkan_LoadLibrary(NULL); + + vulkanContexts = (VulkanContext *)SDL_calloc(state->num_windows, sizeof(VulkanContext)); + if (vulkanContexts == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!"); + quit(2); + } + + for (i = 0; i < state->num_windows; ++i) { + vulkanContext = &vulkanContexts[i]; + vulkanContext->window = state->windows[i]; + loadGlobalFunctions(); + createInstance(); + loadInstanceFunctions(); + createSurface(); + findPhysicalDevice(); + createDevice(); + loadDeviceFunctions(); + getQueues(); + createSemaphores(); + createNewSwapchainAndSwapchainSpecificStuff(); + } +} + +static void shutdownVulkan(SDL_bool doDestroySwapchain) +{ + if (vulkanContexts) { + int i; + for (i = 0; i < state->num_windows; ++i) { + vulkanContext = &vulkanContexts[i]; + if (vulkanContext->device && vkDeviceWaitIdle) { + vkDeviceWaitIdle(vulkanContext->device); + } + + destroySwapchainAndSwapchainSpecificStuff(doDestroySwapchain); + + if (vulkanContext->imageAvailableSemaphore && vkDestroySemaphore) { + vkDestroySemaphore(vulkanContext->device, vulkanContext->imageAvailableSemaphore, NULL); + } + + if (vulkanContext->renderingFinishedSemaphore && vkDestroySemaphore) { + vkDestroySemaphore(vulkanContext->device, vulkanContext->renderingFinishedSemaphore, NULL); + } + + if (vulkanContext->device && vkDestroyDevice) { + vkDestroyDevice(vulkanContext->device, NULL); + } + + if (vulkanContext->surface && vkDestroySurfaceKHR) { + vkDestroySurfaceKHR(vulkanContext->instance, vulkanContext->surface, NULL); + } + + if (vulkanContext->instance && vkDestroyInstance) { + vkDestroyInstance(vulkanContext->instance, NULL); + } + + SDL_free(vulkanContext->surfaceFormats); + } + SDL_free(vulkanContexts); + vulkanContexts = NULL; + } + + SDL_Vulkan_UnloadLibrary(); +} + +static SDL_bool render(void) +{ + uint32_t frameIndex; + VkResult result; + double currentTime; + VkClearColorValue clearColor = { { 0 } }; + VkPipelineStageFlags waitDestStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT; + VkSubmitInfo submitInfo = { 0 }; + VkPresentInfoKHR presentInfo = { 0 }; + int w, h; + + if (!vulkanContext->swapchain) { + SDL_bool retval = createNewSwapchainAndSwapchainSpecificStuff(); + if (!retval) { + SDL_Delay(100); + } + return retval; + } + result = vkAcquireNextImageKHR(vulkanContext->device, + vulkanContext->swapchain, + UINT64_MAX, + vulkanContext->imageAvailableSemaphore, + VK_NULL_HANDLE, + &frameIndex); + if (result == VK_ERROR_OUT_OF_DATE_KHR) { + return createNewSwapchainAndSwapchainSpecificStuff(); + } + + if ((result != VK_SUBOPTIMAL_KHR) && (result != VK_SUCCESS)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkAcquireNextImageKHR(): %s\n", + getVulkanResultString(result)); + quit(2); + } + result = vkWaitForFences(vulkanContext->device, 1, &vulkanContext->fences[frameIndex], VK_FALSE, UINT64_MAX); + if (result != VK_SUCCESS) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "vkWaitForFences(): %s\n", getVulkanResultString(result)); + quit(2); + } + result = vkResetFences(vulkanContext->device, 1, &vulkanContext->fences[frameIndex]); + if (result != VK_SUCCESS) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "vkResetFences(): %s\n", getVulkanResultString(result)); + quit(2); + } + currentTime = (double)SDL_GetPerformanceCounter() / SDL_GetPerformanceFrequency(); + clearColor.float32[0] = (float)(0.5 + 0.5 * SDL_sin(currentTime)); + clearColor.float32[1] = (float)(0.5 + 0.5 * SDL_sin(currentTime + SDL_PI_D * 2 / 3)); + clearColor.float32[2] = (float)(0.5 + 0.5 * SDL_sin(currentTime + SDL_PI_D * 4 / 3)); + clearColor.float32[3] = 0.5; // for SDL_WINDOW_TRANSPARENT, ignored with VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR + rerecordCommandBuffer(frameIndex, &clearColor); + submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + submitInfo.waitSemaphoreCount = 1; + submitInfo.pWaitSemaphores = &vulkanContext->imageAvailableSemaphore; + submitInfo.pWaitDstStageMask = &waitDestStageMask; + submitInfo.commandBufferCount = 1; + submitInfo.pCommandBuffers = &vulkanContext->commandBuffers[frameIndex]; + submitInfo.signalSemaphoreCount = 1; + submitInfo.pSignalSemaphores = &vulkanContext->renderingFinishedSemaphore; + result = vkQueueSubmit(vulkanContext->graphicsQueue, 1, &submitInfo, vulkanContext->fences[frameIndex]); + + if (result != VK_SUCCESS) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "vkQueueSubmit(): %s\n", getVulkanResultString(result)); + quit(2); + } + presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; + presentInfo.waitSemaphoreCount = 1; + presentInfo.pWaitSemaphores = &vulkanContext->renderingFinishedSemaphore; + presentInfo.swapchainCount = 1; + presentInfo.pSwapchains = &vulkanContext->swapchain; + presentInfo.pImageIndices = &frameIndex; + result = vkQueuePresentKHR(vulkanContext->presentQueue, &presentInfo); + if ((result == VK_ERROR_OUT_OF_DATE_KHR) || (result == VK_SUBOPTIMAL_KHR)) { + return createNewSwapchainAndSwapchainSpecificStuff(); + } + + if (result != VK_SUCCESS) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "vkQueuePresentKHR(): %s\n", + getVulkanResultString(result)); + quit(2); + } + SDL_GetWindowSizeInPixels(vulkanContext->window, &w, &h); + if (w != (int)vulkanContext->swapchainSize.width || h != (int)vulkanContext->swapchainSize.height) { + return createNewSwapchainAndSwapchainSpecificStuff(); + } + return SDL_TRUE; +} + +int main(int argc, char **argv) +{ + int done; + const SDL_DisplayMode *mode; + SDL_Event event; + Uint64 then, now; + Uint32 frames; + int dw, dh; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Set Vulkan parameters */ + state->window_flags |= SDL_WINDOW_VULKAN; + state->skip_renderer = 1; + + if (!SDLTest_CommonDefaultArgs(state, argc, argv) || !SDLTest_CommonInit(state)) { + SDLTest_CommonQuit(state); + return 1; + } + + mode = SDL_GetCurrentDisplayMode(SDL_GetPrimaryDisplay()); + if (mode) { + SDL_Log("Screen BPP : %" SDL_PRIu32 "\n", SDL_BITSPERPIXEL(mode->format)); + } + SDL_GetWindowSize(state->windows[0], &dw, &dh); + SDL_Log("Window Size : %d,%d\n", dw, dh); + SDL_GetWindowSizeInPixels(state->windows[0], &dw, &dh); + SDL_Log("Draw Size : %d,%d\n", dw, dh); + SDL_Log("\n"); + + initVulkan(); + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + while (!done) { + /* Check for events */ + frames++; + while (SDL_PollEvent(&event)) { + /* Need to destroy the swapchain before the window created + * by SDL. + */ + if (event.type == SDL_EVENT_WINDOW_CLOSE_REQUESTED) { + destroySwapchainAndSwapchainSpecificStuff(SDL_TRUE); + } + SDLTest_CommonEvent(state, &event, &done); + } + + if (!done) { + int i; + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i]) { + vulkanContext = &vulkanContexts[i]; + render(); + } + } + } + } + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + SDL_Log("%2.2f frames per second\n", ((double)frames * 1000) / (now - then)); + } + + shutdownVulkan(SDL_TRUE); + SDLTest_CommonQuit(state); + return 0; +} + +#endif diff --git a/vendor/sdl-3.0.0/test/testwm.c b/vendor/sdl-3.0.0/test/testwm.c new file mode 100644 index 0000000..9116700 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testwm.c @@ -0,0 +1,291 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include +#include +#include + +static SDLTest_CommonState *state; +static int done; + +static const char *cursorNames[] = { + "arrow", + "ibeam", + "wait", + "crosshair", + "waitarrow", + "sizeNWSE", + "sizeNESW", + "sizeWE", + "sizeNS", + "sizeALL", + "NO", + "hand", +}; +static int system_cursor = -1; +static SDL_Cursor *cursor = NULL; +static SDL_bool relative_mode = SDL_FALSE; +static const SDL_DisplayMode *highlighted_mode = NULL; + +/* Draws the modes menu, and stores the mode index under the mouse in highlighted_mode */ +static void +draw_modes_menu(SDL_Window *window, SDL_Renderer *renderer, SDL_FRect viewport) +{ + const SDL_DisplayMode **modes; + char text[1024]; + const int lineHeight = 10; + int i, j; + int column_chars = 0; + int text_length; + float x, y; + float table_top; + SDL_FPoint mouse_pos = { -1.0f, -1.0f }; + SDL_DisplayID *display_ids; + + /* Get mouse position */ + if (SDL_GetMouseFocus() == window) { + float window_x, window_y; + float logical_x, logical_y; + + SDL_GetMouseState(&window_x, &window_y); + SDL_RenderCoordinatesFromWindow(renderer, window_x, window_y, &logical_x, &logical_y); + + mouse_pos.x = logical_x; + mouse_pos.y = logical_y; + } + + x = 0.0f; + y = viewport.y; + + y += lineHeight; + + SDL_strlcpy(text, "Click on a mode to set it with SDL_SetWindowFullscreenMode", sizeof(text)); + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + SDLTest_DrawString(renderer, x, y, text); + y += lineHeight; + + SDL_strlcpy(text, "Press Ctrl+Enter to toggle SDL_WINDOW_FULLSCREEN", sizeof(text)); + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + SDLTest_DrawString(renderer, x, y, text); + y += lineHeight; + + table_top = y; + + /* Clear the cached mode under the mouse */ + if (window == SDL_GetMouseFocus()) { + highlighted_mode = NULL; + } + + display_ids = SDL_GetDisplays(NULL); + + if (display_ids) { + for (i = 0; display_ids[i]; ++i) { + const SDL_DisplayID display_id = display_ids[i]; + modes = SDL_GetFullscreenDisplayModes(display_id, NULL); + for (j = 0; modes[j]; ++j) { + SDL_FRect cell_rect; + const SDL_DisplayMode *mode = modes[j]; + + (void)SDL_snprintf(text, sizeof(text), "%s mode %d: %dx%d@%gx %gHz", + SDL_GetDisplayName(display_id), + j, mode->w, mode->h, mode->pixel_density, mode->refresh_rate); + + /* Update column width */ + text_length = (int)SDL_strlen(text); + column_chars = SDL_max(column_chars, text_length); + + /* Check if under mouse */ + cell_rect.x = x; + cell_rect.y = y; + cell_rect.w = (float)(text_length * FONT_CHARACTER_SIZE); + cell_rect.h = (float)lineHeight; + + if (SDL_PointInRectFloat(&mouse_pos, &cell_rect)) { + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + + /* Update cached mode under the mouse */ + if (window == SDL_GetMouseFocus()) { + highlighted_mode = mode; + } + } else { + SDL_SetRenderDrawColor(renderer, 170, 170, 170, 255); + } + + SDLTest_DrawString(renderer, x, y, text); + y += lineHeight; + + if ((y + lineHeight) > (viewport.y + viewport.h)) { + /* Advance to next column */ + x += (column_chars + 1) * FONT_CHARACTER_SIZE; + y = table_top; + column_chars = 0; + } + } + SDL_free((void *)modes); + } + SDL_free(display_ids); + } +} + +static void loop(void) +{ + int i; + SDL_Event event; + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + + if (event.type == SDL_EVENT_WINDOW_RESIZED) { + SDL_Window *window = SDL_GetWindowFromID(event.window.windowID); + if (window) { + SDL_Log("Window %" SDL_PRIu32 " resized to %" SDL_PRIs32 "x%" SDL_PRIs32 "\n", + event.window.windowID, + event.window.data1, + event.window.data2); + } + } + if (event.type == SDL_EVENT_WINDOW_MOVED) { + SDL_Window *window = SDL_GetWindowFromID(event.window.windowID); + if (window) { + SDL_Log("Window %" SDL_PRIu32 " moved to %" SDL_PRIs32 ",%" SDL_PRIs32 " (display %s)\n", + event.window.windowID, + event.window.data1, + event.window.data2, + SDL_GetDisplayName(SDL_GetDisplayForWindow(window))); + } + } + if (event.type == SDL_EVENT_WINDOW_FOCUS_LOST) { + relative_mode = SDL_GetRelativeMouseMode(); + if (relative_mode) { + SDL_SetRelativeMouseMode(SDL_FALSE); + } + } + if (event.type == SDL_EVENT_WINDOW_FOCUS_GAINED) { + if (relative_mode) { + SDL_SetRelativeMouseMode(SDL_TRUE); + } + } + if (event.type == SDL_EVENT_KEY_UP) { + SDL_bool updateCursor = SDL_FALSE; + + if (event.key.keysym.sym == SDLK_a) { + SDL_assert(!"Keyboard generated assert"); + } else if (event.key.keysym.sym == SDLK_LEFT) { + --system_cursor; + if (system_cursor < 0) { + system_cursor = SDL_NUM_SYSTEM_CURSORS - 1; + } + updateCursor = SDL_TRUE; + } else if (event.key.keysym.sym == SDLK_RIGHT) { + ++system_cursor; + if (system_cursor >= SDL_NUM_SYSTEM_CURSORS) { + system_cursor = 0; + } + updateCursor = SDL_TRUE; + } + if (updateCursor) { + SDL_Log("Changing cursor to \"%s\"", cursorNames[system_cursor]); + SDL_DestroyCursor(cursor); + cursor = SDL_CreateSystemCursor((SDL_SystemCursor)system_cursor); + SDL_SetCursor(cursor); + } + } + if (event.type == SDL_EVENT_MOUSE_BUTTON_UP) { + SDL_Window *window = SDL_GetMouseFocus(); + if (highlighted_mode != NULL && window != NULL) { + SDL_memcpy(&state->fullscreen_mode, highlighted_mode, sizeof(state->fullscreen_mode)); + SDL_SetWindowFullscreenMode(window, highlighted_mode); + } + } + } + + for (i = 0; i < state->num_windows; ++i) { + SDL_Window *window = state->windows[i]; + SDL_Renderer *renderer = state->renderers[i]; + if (window != NULL && renderer != NULL) { + float y = 0.0f; + SDL_Rect viewport; + SDL_FRect menurect; + + SDL_GetRenderViewport(renderer, &viewport); + + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + SDL_RenderClear(renderer); + + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + SDLTest_CommonDrawWindowInfo(renderer, state->windows[i], &y); + + menurect.x = 0.0f; + menurect.y = y; + menurect.w = (float)viewport.w; + menurect.h = (float)viewport.h - y; + draw_modes_menu(window, renderer, menurect); + + SDL_Delay(16); + SDL_RenderPresent(renderer); + } + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int main(int argc, char *argv[]) +{ + int i; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + SDL_assert(SDL_arraysize(cursorNames) == SDL_NUM_SYSTEM_CURSORS); + + if (!SDLTest_CommonDefaultArgs(state, argc, argv) || !SDLTest_CommonInit(state)) { + SDLTest_CommonQuit(state); + return 1; + } + + SDL_SetEventEnabled(SDL_EVENT_DROP_FILE, SDL_TRUE); + SDL_SetEventEnabled(SDL_EVENT_DROP_TEXT, SDL_TRUE); + + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + + /* Main render loop */ + done = 0; +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + SDL_DestroyCursor(cursor); + + SDLTest_CleanupTextDrawing(); + SDLTest_CommonQuit(state); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testyuv.bmp b/vendor/sdl-3.0.0/test/testyuv.bmp new file mode 100644 index 0000000000000000000000000000000000000000..af32034b6b5b858be470f9ef3bb023bc199bf96e GIT binary patch literal 739398 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ŽAD149Wj?1|X01)I4BQdAPsJ(8D&;wq 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

{o>^o9lF%RQ; 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 z�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 literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/test/testyuv.c b/vendor/sdl-3.0.0/test/testyuv.c new file mode 100644 index 0000000..afe3cac --- /dev/null +++ b/vendor/sdl-3.0.0/test/testyuv.c @@ -0,0 +1,497 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +#include +#include +#include +#include "testyuv_cvt.h" +#include "testutils.h" + +/* 422 (YUY2, etc) formats are the largest */ +#define MAX_YUV_SURFACE_SIZE(W, H, P) (H * 4 * (W + P + 1) / 2) + +/* Return true if the YUV format is packed pixels */ +static SDL_bool is_packed_yuv_format(Uint32 format) +{ + return format == SDL_PIXELFORMAT_YUY2 || format == SDL_PIXELFORMAT_UYVY || format == SDL_PIXELFORMAT_YVYU; +} + +/* Create a surface with a good pattern for verifying YUV conversion */ +static SDL_Surface *generate_test_pattern(int pattern_size) +{ + SDL_Surface *pattern = SDL_CreateSurface(pattern_size, pattern_size, SDL_PIXELFORMAT_RGB24); + + if (pattern) { + int i, x, y; + Uint8 *p, c; + const int thickness = 2; /* Important so 2x2 blocks of color are the same, to avoid Cr/Cb interpolation over pixels */ + + /* R, G, B in alternating horizontal bands */ + for (y = 0; y < pattern->h - (thickness - 1); y += thickness) { + for (i = 0; i < thickness; ++i) { + p = (Uint8 *)pattern->pixels + (y + i) * pattern->pitch + ((y / thickness) % 3); + for (x = 0; x < pattern->w; ++x) { + *p = 0xFF; + p += 3; + } + } + } + + /* Black and white in alternating vertical bands */ + c = 0xFF; + for (x = 1 * thickness; x < pattern->w; x += 2 * thickness) { + for (i = 0; i < thickness; ++i) { + p = (Uint8 *)pattern->pixels + (x + i) * 3; + for (y = 0; y < pattern->h; ++y) { + SDL_memset(p, c, 3); + p += pattern->pitch; + } + } + if (c) { + c = 0x00; + } else { + c = 0xFF; + } + } + } + return pattern; +} + +static SDL_bool verify_yuv_data(Uint32 format, const Uint8 *yuv, int yuv_pitch, SDL_Surface *surface) +{ + const int tolerance = 20; + const int size = (surface->h * surface->pitch); + Uint8 *rgb; + SDL_bool result = SDL_FALSE; + + rgb = (Uint8 *)SDL_malloc(size); + if (rgb == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory"); + return SDL_FALSE; + } + + if (SDL_ConvertPixels(surface->w, surface->h, format, yuv, yuv_pitch, surface->format->format, rgb, surface->pitch) == 0) { + int x, y; + result = SDL_TRUE; + for (y = 0; y < surface->h; ++y) { + const Uint8 *actual = rgb + y * surface->pitch; + const Uint8 *expected = (const Uint8 *)surface->pixels + y * surface->pitch; + for (x = 0; x < surface->w; ++x) { + int deltaR = (int)actual[0] - expected[0]; + int deltaG = (int)actual[1] - expected[1]; + int deltaB = (int)actual[2] - expected[2]; + int distance = (deltaR * deltaR + deltaG * deltaG + deltaB * deltaB); + if (distance > tolerance) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Pixel at %d,%d was 0x%.2x,0x%.2x,0x%.2x, expected 0x%.2x,0x%.2x,0x%.2x, distance = %d\n", x, y, actual[0], actual[1], actual[2], expected[0], expected[1], expected[2], distance); + result = SDL_FALSE; + } + actual += 3; + expected += 3; + } + } + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't convert %s to %s: %s\n", SDL_GetPixelFormatName(format), SDL_GetPixelFormatName(surface->format->format), SDL_GetError()); + } + SDL_free(rgb); + + return result; +} + +static int run_automated_tests(int pattern_size, int extra_pitch) +{ + const Uint32 formats[] = { + SDL_PIXELFORMAT_YV12, + SDL_PIXELFORMAT_IYUV, + SDL_PIXELFORMAT_NV12, + SDL_PIXELFORMAT_NV21, + SDL_PIXELFORMAT_YUY2, + SDL_PIXELFORMAT_UYVY, + SDL_PIXELFORMAT_YVYU + }; + int i, j; + SDL_Surface *pattern = generate_test_pattern(pattern_size); + const int yuv_len = MAX_YUV_SURFACE_SIZE(pattern->w, pattern->h, extra_pitch); + Uint8 *yuv1 = (Uint8 *)SDL_malloc(yuv_len); + Uint8 *yuv2 = (Uint8 *)SDL_malloc(yuv_len); + int yuv1_pitch, yuv2_pitch; + int result = -1; + + if (pattern == NULL || yuv1 == NULL || yuv2 == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't allocate test surfaces"); + goto done; + } + + /* Verify conversion from YUV formats */ + for (i = 0; i < SDL_arraysize(formats); ++i) { + if (!ConvertRGBtoYUV(formats[i], pattern->pixels, pattern->pitch, yuv1, pattern->w, pattern->h, SDL_GetYUVConversionModeForResolution(pattern->w, pattern->h), 0, 100)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "ConvertRGBtoYUV() doesn't support converting to %s\n", SDL_GetPixelFormatName(formats[i])); + goto done; + } + yuv1_pitch = CalculateYUVPitch(formats[i], pattern->w); + if (!verify_yuv_data(formats[i], yuv1, yuv1_pitch, pattern)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed conversion from %s to RGB\n", SDL_GetPixelFormatName(formats[i])); + goto done; + } + } + + /* Verify conversion to YUV formats */ + for (i = 0; i < SDL_arraysize(formats); ++i) { + yuv1_pitch = CalculateYUVPitch(formats[i], pattern->w) + extra_pitch; + if (SDL_ConvertPixels(pattern->w, pattern->h, pattern->format->format, pattern->pixels, pattern->pitch, formats[i], yuv1, yuv1_pitch) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't convert %s to %s: %s\n", SDL_GetPixelFormatName(pattern->format->format), SDL_GetPixelFormatName(formats[i]), SDL_GetError()); + goto done; + } + if (!verify_yuv_data(formats[i], yuv1, yuv1_pitch, pattern)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed conversion from RGB to %s\n", SDL_GetPixelFormatName(formats[i])); + goto done; + } + } + + /* Verify conversion between YUV formats */ + for (i = 0; i < SDL_arraysize(formats); ++i) { + for (j = 0; j < SDL_arraysize(formats); ++j) { + yuv1_pitch = CalculateYUVPitch(formats[i], pattern->w) + extra_pitch; + yuv2_pitch = CalculateYUVPitch(formats[j], pattern->w) + extra_pitch; + if (SDL_ConvertPixels(pattern->w, pattern->h, pattern->format->format, pattern->pixels, pattern->pitch, formats[i], yuv1, yuv1_pitch) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't convert %s to %s: %s\n", SDL_GetPixelFormatName(pattern->format->format), SDL_GetPixelFormatName(formats[i]), SDL_GetError()); + goto done; + } + if (SDL_ConvertPixels(pattern->w, pattern->h, formats[i], yuv1, yuv1_pitch, formats[j], yuv2, yuv2_pitch) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't convert %s to %s: %s\n", SDL_GetPixelFormatName(formats[i]), SDL_GetPixelFormatName(formats[j]), SDL_GetError()); + goto done; + } + if (!verify_yuv_data(formats[j], yuv2, yuv2_pitch, pattern)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed conversion from %s to %s\n", SDL_GetPixelFormatName(formats[i]), SDL_GetPixelFormatName(formats[j])); + goto done; + } + } + } + + /* Verify conversion between YUV formats in-place */ + for (i = 0; i < SDL_arraysize(formats); ++i) { + for (j = 0; j < SDL_arraysize(formats); ++j) { + if (is_packed_yuv_format(formats[i]) != is_packed_yuv_format(formats[j])) { + /* Can't change plane vs packed pixel layout in-place */ + continue; + } + + yuv1_pitch = CalculateYUVPitch(formats[i], pattern->w) + extra_pitch; + yuv2_pitch = CalculateYUVPitch(formats[j], pattern->w) + extra_pitch; + if (SDL_ConvertPixels(pattern->w, pattern->h, pattern->format->format, pattern->pixels, pattern->pitch, formats[i], yuv1, yuv1_pitch) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't convert %s to %s: %s\n", SDL_GetPixelFormatName(pattern->format->format), SDL_GetPixelFormatName(formats[i]), SDL_GetError()); + goto done; + } + if (SDL_ConvertPixels(pattern->w, pattern->h, formats[i], yuv1, yuv1_pitch, formats[j], yuv1, yuv2_pitch) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't convert %s to %s: %s\n", SDL_GetPixelFormatName(formats[i]), SDL_GetPixelFormatName(formats[j]), SDL_GetError()); + goto done; + } + if (!verify_yuv_data(formats[j], yuv1, yuv2_pitch, pattern)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed conversion from %s to %s\n", SDL_GetPixelFormatName(formats[i]), SDL_GetPixelFormatName(formats[j])); + goto done; + } + } + } + + result = 0; + +done: + SDL_free(yuv1); + SDL_free(yuv2); + SDL_DestroySurface(pattern); + return result; +} + +int main(int argc, char **argv) +{ + struct + { + SDL_bool enable_intrinsics; + int pattern_size; + int extra_pitch; + } automated_test_params[] = { + /* Test: even width and height */ + { SDL_FALSE, 2, 0 }, + { SDL_FALSE, 4, 0 }, + /* Test: odd width and height */ + { SDL_FALSE, 1, 0 }, + { SDL_FALSE, 3, 0 }, + /* Test: even width and height, extra pitch */ + { SDL_FALSE, 2, 3 }, + { SDL_FALSE, 4, 3 }, + /* Test: odd width and height, extra pitch */ + { SDL_FALSE, 1, 3 }, + { SDL_FALSE, 3, 3 }, + /* Test: even width and height with intrinsics */ + { SDL_TRUE, 32, 0 }, + /* Test: odd width and height with intrinsics */ + { SDL_TRUE, 33, 0 }, + { SDL_TRUE, 37, 0 }, + /* Test: even width and height with intrinsics, extra pitch */ + { SDL_TRUE, 32, 3 }, + /* Test: odd width and height with intrinsics, extra pitch */ + { SDL_TRUE, 33, 3 }, + { SDL_TRUE, 37, 3 }, + }; + char *filename = NULL; + SDL_Surface *original; + SDL_Surface *converted; + SDL_Surface *bmp; + SDL_Window *window; + SDL_Renderer *renderer; + SDL_Texture *output[3]; + const char *titles[3] = { "ORIGINAL", "SOFTWARE", "HARDWARE" }; + char title[128]; + const char *yuv_name; + const char *yuv_mode; + Uint32 rgb_format = SDL_PIXELFORMAT_RGBX8888; + Uint32 yuv_format = SDL_PIXELFORMAT_YV12; + int current = 0; + int pitch; + Uint8 *raw_yuv; + Uint64 then, now; + int i, iterations = 100; + SDL_bool should_run_automated_tests = SDL_FALSE; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (SDL_strcmp(argv[i], "--jpeg") == 0) { + SDL_SetYUVConversionMode(SDL_YUV_CONVERSION_JPEG); + consumed = 1; + } else if (SDL_strcmp(argv[i], "--bt601") == 0) { + SDL_SetYUVConversionMode(SDL_YUV_CONVERSION_BT601); + consumed = 1; + } else if (SDL_strcmp(argv[i], "--bt709") == 0) { + SDL_SetYUVConversionMode(SDL_YUV_CONVERSION_BT709); + consumed = 1; + } else if (SDL_strcmp(argv[i], "--auto") == 0) { + SDL_SetYUVConversionMode(SDL_YUV_CONVERSION_AUTOMATIC); + consumed = 1; + } else if (SDL_strcmp(argv[i], "--yv12") == 0) { + yuv_format = SDL_PIXELFORMAT_YV12; + consumed = 1; + } else if (SDL_strcmp(argv[i], "--iyuv") == 0) { + yuv_format = SDL_PIXELFORMAT_IYUV; + consumed = 1; + } else if (SDL_strcmp(argv[i], "--yuy2") == 0) { + yuv_format = SDL_PIXELFORMAT_YUY2; + consumed = 1; + } else if (SDL_strcmp(argv[i], "--uyvy") == 0) { + yuv_format = SDL_PIXELFORMAT_UYVY; + consumed = 1; + } else if (SDL_strcmp(argv[i], "--yvyu") == 0) { + yuv_format = SDL_PIXELFORMAT_YVYU; + consumed = 1; + } else if (SDL_strcmp(argv[i], "--nv12") == 0) { + yuv_format = SDL_PIXELFORMAT_NV12; + consumed = 1; + } else if (SDL_strcmp(argv[i], "--nv21") == 0) { + yuv_format = SDL_PIXELFORMAT_NV21; + consumed = 1; + } else if (SDL_strcmp(argv[i], "--rgb555") == 0) { + rgb_format = SDL_PIXELFORMAT_RGB555; + consumed = 1; + } else if (SDL_strcmp(argv[i], "--rgb565") == 0) { + rgb_format = SDL_PIXELFORMAT_RGB565; + consumed = 1; + } else if (SDL_strcmp(argv[i], "--rgb24") == 0) { + rgb_format = SDL_PIXELFORMAT_RGB24; + consumed = 1; + } else if (SDL_strcmp(argv[i], "--argb") == 0) { + rgb_format = SDL_PIXELFORMAT_ARGB8888; + consumed = 1; + } else if (SDL_strcmp(argv[i], "--abgr") == 0) { + rgb_format = SDL_PIXELFORMAT_ABGR8888; + consumed = 1; + } else if (SDL_strcmp(argv[i], "--rgba") == 0) { + rgb_format = SDL_PIXELFORMAT_RGBA8888; + consumed = 1; + } else if (SDL_strcmp(argv[i], "--bgra") == 0) { + rgb_format = SDL_PIXELFORMAT_BGRA8888; + consumed = 1; + } else if (SDL_strcmp(argv[i], "--automated") == 0) { + should_run_automated_tests = SDL_TRUE; + consumed = 1; + } else if (!filename) { + filename = argv[i]; + consumed = 1; + } + } + if (consumed <= 0) { + static const char *options[] = { + "[--jpeg|--bt601|-bt709|--auto]", + "[--yv12|--iyuv|--yuy2|--uyvy|--yvyu|--nv12|--nv21]", + "[--rgb555|--rgb565|--rgb24|--argb|--abgr|--rgba|--bgra]", + "[--automated]", + "[sample.bmp]", + NULL, + }; + SDLTest_CommonLogUsage(state, argv[0], options); + SDLTest_CommonDestroyState(state); + return 1; + } + i += consumed; + } + + /* Run automated tests */ + if (should_run_automated_tests) { + for (i = 0; i < (int)SDL_arraysize(automated_test_params); ++i) { + SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Running automated test, pattern size %d, extra pitch %d, intrinsics %s\n", + automated_test_params[i].pattern_size, + automated_test_params[i].extra_pitch, + automated_test_params[i].enable_intrinsics ? "enabled" : "disabled"); + if (run_automated_tests(automated_test_params[i].pattern_size, automated_test_params[i].extra_pitch) < 0) { + return 2; + } + } + return 0; + } + + filename = GetResourceFilename(filename, "testyuv.bmp"); + bmp = SDL_LoadBMP(filename); + original = SDL_ConvertSurfaceFormat(bmp, SDL_PIXELFORMAT_RGB24); + SDL_DestroySurface(bmp); + if (original == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", filename, SDL_GetError()); + return 3; + } + + raw_yuv = SDL_calloc(1, MAX_YUV_SURFACE_SIZE(original->w, original->h, 0)); + ConvertRGBtoYUV(yuv_format, original->pixels, original->pitch, raw_yuv, original->w, original->h, + SDL_GetYUVConversionModeForResolution(original->w, original->h), + 0, 100); + pitch = CalculateYUVPitch(yuv_format, original->w); + + converted = SDL_CreateSurface(original->w, original->h, rgb_format); + if (converted == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create converted surface: %s\n", SDL_GetError()); + return 3; + } + + then = SDL_GetTicks(); + for (i = 0; i < iterations; ++i) { + SDL_ConvertPixels(original->w, original->h, yuv_format, raw_yuv, pitch, rgb_format, converted->pixels, converted->pitch); + } + now = SDL_GetTicks(); + SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "%d iterations in %" SDL_PRIu64 " ms, %.2fms each\n", iterations, (now - then), (float)(now - then) / iterations); + + window = SDL_CreateWindow("YUV test", original->w, original->h, 0); + if (window == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create window: %s\n", SDL_GetError()); + return 4; + } + + renderer = SDL_CreateRenderer(window, NULL, 0); + if (renderer == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create renderer: %s\n", SDL_GetError()); + return 4; + } + + output[0] = SDL_CreateTextureFromSurface(renderer, original); + output[1] = SDL_CreateTextureFromSurface(renderer, converted); + output[2] = SDL_CreateTexture(renderer, yuv_format, SDL_TEXTUREACCESS_STREAMING, original->w, original->h); + if (!output[0] || !output[1] || !output[2]) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create texture: %s\n", SDL_GetError()); + return 5; + } + SDL_UpdateTexture(output[2], NULL, raw_yuv, pitch); + + yuv_name = SDL_GetPixelFormatName(yuv_format); + if (SDL_strncmp(yuv_name, "SDL_PIXELFORMAT_", 16) == 0) { + yuv_name += 16; + } + + switch (SDL_GetYUVConversionModeForResolution(original->w, original->h)) { + case SDL_YUV_CONVERSION_JPEG: + yuv_mode = "JPEG"; + break; + case SDL_YUV_CONVERSION_BT601: + yuv_mode = "BT.601"; + break; + case SDL_YUV_CONVERSION_BT709: + yuv_mode = "BT.709"; + break; + default: + yuv_mode = "UNKNOWN"; + break; + } + + { + int done = 0; + while (!done) { + SDL_Event event; + while (SDL_PollEvent(&event) > 0) { + if (event.type == SDL_EVENT_QUIT) { + done = 1; + } + if (event.type == SDL_EVENT_KEY_DOWN) { + if (event.key.keysym.sym == SDLK_ESCAPE) { + done = 1; + } else if (event.key.keysym.sym == SDLK_LEFT) { + --current; + } else if (event.key.keysym.sym == SDLK_RIGHT) { + ++current; + } + } + if (event.type == SDL_EVENT_MOUSE_BUTTON_DOWN) { + if (event.button.x < (original->w / 2)) { + --current; + } else { + ++current; + } + } + } + + /* Handle wrapping */ + if (current < 0) { + current += SDL_arraysize(output); + } + if (current >= SDL_arraysize(output)) { + current -= SDL_arraysize(output); + } + + SDL_RenderClear(renderer); + SDL_RenderTexture(renderer, output[current], NULL, NULL); + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); + if (current == 0) { + SDLTest_DrawString(renderer, 4, 4, titles[current]); + } else { + (void)SDL_snprintf(title, sizeof(title), "%s %s %s", titles[current], yuv_name, yuv_mode); + SDLTest_DrawString(renderer, 4, 4, title); + } + SDL_RenderPresent(renderer); + SDL_Delay(10); + } + } + SDL_free(raw_yuv); + SDL_free(filename); + SDL_DestroySurface(original); + SDL_DestroySurface(converted); + SDLTest_CleanupTextDrawing(); + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/testyuv_cvt.c b/vendor/sdl-3.0.0/test/testyuv_cvt.c new file mode 100644 index 0000000..3bed561 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testyuv_cvt.c @@ -0,0 +1,298 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +#include + +#include "testyuv_cvt.h" + +static float clip3(float x, float y, float z) +{ + return (z < x) ? x : ((z > y) ? y : z); +} + +static void RGBtoYUV(const Uint8 *rgb, int *yuv, SDL_YUV_CONVERSION_MODE mode, int monochrome, int luminance) +{ + if (mode == SDL_YUV_CONVERSION_JPEG) { + /* Full range YUV */ + yuv[0] = (int)(0.299 * rgb[0] + 0.587 * rgb[1] + 0.114 * rgb[2]); + yuv[1] = (int)((rgb[2] - yuv[0]) * 0.565 + 128); + yuv[2] = (int)((rgb[0] - yuv[0]) * 0.713 + 128); + } else { + /** + * This formula is from Microsoft's documentation: + * https://msdn.microsoft.com/en-us/library/windows/desktop/dd206750(v=vs.85).aspx + * L = Kr * R + Kb * B + (1 - Kr - Kb) * G + * Y = SDL_floor(2^(M-8) * (219*(L-Z)/S + 16) + 0.5); + * U = clip3(0, (2^M)-1, SDL_floor(2^(M-8) * (112*(B-L) / ((1-Kb)*S) + 128) + 0.5)); + * V = clip3(0, (2^M)-1, SDL_floor(2^(M-8) * (112*(R-L) / ((1-Kr)*S) + 128) + 0.5)); + */ + float S, Z, R, G, B, L, Kr, Kb, Y, U, V; + + if (mode == SDL_YUV_CONVERSION_BT709) { + /* BT.709 */ + Kr = 0.2126f; + Kb = 0.0722f; + } else { + /* BT.601 */ + Kr = 0.299f; + Kb = 0.114f; + } + + S = 255.0f; + Z = 0.0f; + R = rgb[0]; + G = rgb[1]; + B = rgb[2]; + L = Kr * R + Kb * B + (1 - Kr - Kb) * G; + Y = (Uint8)SDL_floorf((219 * (L - Z) / S + 16) + 0.5f); + U = (Uint8)clip3(0, 255, SDL_floorf((112.0f * (B - L) / ((1.0f - Kb) * S) + 128) + 0.5f)); + V = (Uint8)clip3(0, 255, SDL_floorf((112.0f * (R - L) / ((1.0f - Kr) * S) + 128) + 0.5f)); + + yuv[0] = (Uint8)Y; + yuv[1] = (Uint8)U; + yuv[2] = (Uint8)V; + } + + if (monochrome) { + yuv[1] = 128; + yuv[2] = 128; + } + + if (luminance != 100) { + yuv[0] = yuv[0] * luminance / 100; + if (yuv[0] > 255) { + yuv[0] = 255; + } + } +} + +static void ConvertRGBtoPlanar2x2(Uint32 format, Uint8 *src, int pitch, Uint8 *out, int w, int h, SDL_YUV_CONVERSION_MODE mode, int monochrome, int luminance) +{ + int x, y; + int yuv[4][3]; + Uint8 *Y1, *Y2, *U, *V; + Uint8 *rgb1, *rgb2; + int rgb_row_advance = (pitch - w * 3) + pitch; + int UV_advance; + + rgb1 = src; + rgb2 = src + pitch; + + Y1 = out; + Y2 = Y1 + w; + switch (format) { + case SDL_PIXELFORMAT_YV12: + V = (Y1 + h * w); + U = V + ((h + 1) / 2) * ((w + 1) / 2); + UV_advance = 1; + break; + case SDL_PIXELFORMAT_IYUV: + U = (Y1 + h * w); + V = U + ((h + 1) / 2) * ((w + 1) / 2); + UV_advance = 1; + break; + case SDL_PIXELFORMAT_NV12: + U = (Y1 + h * w); + V = U + 1; + UV_advance = 2; + break; + case SDL_PIXELFORMAT_NV21: + V = (Y1 + h * w); + U = V + 1; + UV_advance = 2; + break; + default: + SDL_assert(!"Unsupported planar YUV format"); + return; + } + + for (y = 0; y < (h - 1); y += 2) { + for (x = 0; x < (w - 1); x += 2) { + RGBtoYUV(rgb1, yuv[0], mode, monochrome, luminance); + rgb1 += 3; + *Y1++ = (Uint8)yuv[0][0]; + + RGBtoYUV(rgb1, yuv[1], mode, monochrome, luminance); + rgb1 += 3; + *Y1++ = (Uint8)yuv[1][0]; + + RGBtoYUV(rgb2, yuv[2], mode, monochrome, luminance); + rgb2 += 3; + *Y2++ = (Uint8)yuv[2][0]; + + RGBtoYUV(rgb2, yuv[3], mode, monochrome, luminance); + rgb2 += 3; + *Y2++ = (Uint8)yuv[3][0]; + + *U = (Uint8)SDL_floorf((yuv[0][1] + yuv[1][1] + yuv[2][1] + yuv[3][1]) / 4.0f + 0.5f); + U += UV_advance; + + *V = (Uint8)SDL_floorf((yuv[0][2] + yuv[1][2] + yuv[2][2] + yuv[3][2]) / 4.0f + 0.5f); + V += UV_advance; + } + /* Last column */ + if (x == (w - 1)) { + RGBtoYUV(rgb1, yuv[0], mode, monochrome, luminance); + rgb1 += 3; + *Y1++ = (Uint8)yuv[0][0]; + + RGBtoYUV(rgb2, yuv[2], mode, monochrome, luminance); + rgb2 += 3; + *Y2++ = (Uint8)yuv[2][0]; + + *U = (Uint8)SDL_floorf((yuv[0][1] + yuv[2][1]) / 2.0f + 0.5f); + U += UV_advance; + + *V = (Uint8)SDL_floorf((yuv[0][2] + yuv[2][2]) / 2.0f + 0.5f); + V += UV_advance; + } + Y1 += w; + Y2 += w; + rgb1 += rgb_row_advance; + rgb2 += rgb_row_advance; + } + /* Last row */ + if (y == (h - 1)) { + for (x = 0; x < (w - 1); x += 2) { + RGBtoYUV(rgb1, yuv[0], mode, monochrome, luminance); + rgb1 += 3; + *Y1++ = (Uint8)yuv[0][0]; + + RGBtoYUV(rgb1, yuv[1], mode, monochrome, luminance); + rgb1 += 3; + *Y1++ = (Uint8)yuv[1][0]; + + *U = (Uint8)SDL_floorf((yuv[0][1] + yuv[1][1]) / 2.0f + 0.5f); + U += UV_advance; + + *V = (Uint8)SDL_floorf((yuv[0][2] + yuv[1][2]) / 2.0f + 0.5f); + V += UV_advance; + } + /* Last column */ + if (x == (w - 1)) { + RGBtoYUV(rgb1, yuv[0], mode, monochrome, luminance); + *Y1++ = (Uint8)yuv[0][0]; + + *U = (Uint8)yuv[0][1]; + U += UV_advance; + + *V = (Uint8)yuv[0][2]; + V += UV_advance; + } + } +} + +static void ConvertRGBtoPacked4(Uint32 format, Uint8 *src, int pitch, Uint8 *out, int w, int h, SDL_YUV_CONVERSION_MODE mode, int monochrome, int luminance) +{ + int x, y; + int yuv[2][3]; + Uint8 *Y1, *Y2, *U, *V; + Uint8 *rgb; + int rgb_row_advance = (pitch - w * 3); + + rgb = src; + + switch (format) { + case SDL_PIXELFORMAT_YUY2: + Y1 = out; + U = out + 1; + Y2 = out + 2; + V = out + 3; + break; + case SDL_PIXELFORMAT_UYVY: + U = out; + Y1 = out + 1; + V = out + 2; + Y2 = out + 3; + break; + case SDL_PIXELFORMAT_YVYU: + Y1 = out; + V = out + 1; + Y2 = out + 2; + U = out + 3; + break; + default: + SDL_assert(!"Unsupported packed YUV format"); + return; + } + + for (y = 0; y < h; ++y) { + for (x = 0; x < (w - 1); x += 2) { + RGBtoYUV(rgb, yuv[0], mode, monochrome, luminance); + rgb += 3; + *Y1 = (Uint8)yuv[0][0]; + Y1 += 4; + + RGBtoYUV(rgb, yuv[1], mode, monochrome, luminance); + rgb += 3; + *Y2 = (Uint8)yuv[1][0]; + Y2 += 4; + + *U = (Uint8)SDL_floorf((yuv[0][1] + yuv[1][1]) / 2.0f + 0.5f); + U += 4; + + *V = (Uint8)SDL_floorf((yuv[0][2] + yuv[1][2]) / 2.0f + 0.5f); + V += 4; + } + /* Last column */ + if (x == (w - 1)) { + RGBtoYUV(rgb, yuv[0], mode, monochrome, luminance); + rgb += 3; + *Y2 = *Y1 = (Uint8)yuv[0][0]; + Y1 += 4; + Y2 += 4; + + *U = (Uint8)yuv[0][1]; + U += 4; + + *V = (Uint8)yuv[0][2]; + V += 4; + } + rgb += rgb_row_advance; + } +} + +SDL_bool ConvertRGBtoYUV(Uint32 format, Uint8 *src, int pitch, Uint8 *out, int w, int h, SDL_YUV_CONVERSION_MODE mode, int monochrome, int luminance) +{ + switch (format) { + case SDL_PIXELFORMAT_YV12: + case SDL_PIXELFORMAT_IYUV: + case SDL_PIXELFORMAT_NV12: + case SDL_PIXELFORMAT_NV21: + ConvertRGBtoPlanar2x2(format, src, pitch, out, w, h, mode, monochrome, luminance); + return SDL_TRUE; + case SDL_PIXELFORMAT_YUY2: + case SDL_PIXELFORMAT_UYVY: + case SDL_PIXELFORMAT_YVYU: + ConvertRGBtoPacked4(format, src, pitch, out, w, h, mode, monochrome, luminance); + return SDL_TRUE; + default: + return SDL_FALSE; + } +} + +int CalculateYUVPitch(Uint32 format, int width) +{ + switch (format) { + case SDL_PIXELFORMAT_YV12: + case SDL_PIXELFORMAT_IYUV: + case SDL_PIXELFORMAT_NV12: + case SDL_PIXELFORMAT_NV21: + return width; + case SDL_PIXELFORMAT_YUY2: + case SDL_PIXELFORMAT_UYVY: + case SDL_PIXELFORMAT_YVYU: + return 4 * ((width + 1) / 2); + default: + return 0; + } +} diff --git a/vendor/sdl-3.0.0/test/testyuv_cvt.h b/vendor/sdl-3.0.0/test/testyuv_cvt.h new file mode 100644 index 0000000..781b632 --- /dev/null +++ b/vendor/sdl-3.0.0/test/testyuv_cvt.h @@ -0,0 +1,16 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* These functions are designed for testing correctness, not for speed */ + +extern SDL_bool ConvertRGBtoYUV(Uint32 format, Uint8 *src, int pitch, Uint8 *out, int w, int h, SDL_YUV_CONVERSION_MODE mode, int monochrome, int luminance); +extern int CalculateYUVPitch(Uint32 format, int width); diff --git a/vendor/sdl-3.0.0/test/torturethread.c b/vendor/sdl-3.0.0/test/torturethread.c new file mode 100644 index 0000000..c2a0dd1 --- /dev/null +++ b/vendor/sdl-3.0.0/test/torturethread.c @@ -0,0 +1,128 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ + +/* Simple test of the SDL threading code */ + +#include +#include + +#include +#include +#include + +#define NUMTHREADS 10 + +static SDL_AtomicInt time_for_threads_to_die[NUMTHREADS]; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + /* Let 'main()' return normally */ + if (rc != 0) { + exit(rc); + } +} + +static int SDLCALL +SubThreadFunc(void *data) +{ + while (!*(int volatile *)data) { + SDL_Delay(10); + } + return 0; +} + +static int SDLCALL +ThreadFunc(void *data) +{ + SDL_Thread *sub_threads[NUMTHREADS]; + int flags[NUMTHREADS]; + int i; + int tid = (int)(uintptr_t)data; + + SDL_Log("Creating Thread %d\n", tid); + + for (i = 0; i < NUMTHREADS; i++) { + char name[64]; + (void)SDL_snprintf(name, sizeof(name), "Child%d_%d", tid, i); + flags[i] = 0; + sub_threads[i] = SDL_CreateThread(SubThreadFunc, name, &flags[i]); + } + + SDL_Log("Thread '%d' waiting for signal\n", tid); + while (SDL_AtomicGet(&time_for_threads_to_die[tid]) != 1) { + ; /* do nothing */ + } + + SDL_Log("Thread '%d' sending signals to subthreads\n", tid); + for (i = 0; i < NUMTHREADS; i++) { + flags[i] = 1; + SDL_WaitThread(sub_threads[i], NULL); + } + + SDL_Log("Thread '%d' exiting!\n", tid); + + return 0; +} + +int main(int argc, char *argv[]) +{ + SDL_Thread *threads[NUMTHREADS]; + int i; + SDLTest_CommonState *state; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (state == NULL) { + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + SDLTest_CommonDestroyState(state); + return 1; + } + + (void)signal(SIGSEGV, SIG_DFL); + for (i = 0; i < NUMTHREADS; i++) { + char name[64]; + (void)SDL_snprintf(name, sizeof(name), "Parent%d", i); + SDL_AtomicSet(&time_for_threads_to_die[i], 0); + threads[i] = SDL_CreateThread(ThreadFunc, name, (void *)(uintptr_t)i); + + if (threads[i] == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n", SDL_GetError()); + quit(1); + } + } + + for (i = 0; i < NUMTHREADS; i++) { + SDL_AtomicSet(&time_for_threads_to_die[i], 1); + } + + for (i = 0; i < NUMTHREADS; i++) { + SDL_WaitThread(threads[i], NULL); + } + SDL_Quit(); + SDLTest_CommonDestroyState(state); + return 0; +} diff --git a/vendor/sdl-3.0.0/test/trashcan.bmp b/vendor/sdl-3.0.0/test/trashcan.bmp new file mode 100644 index 0000000000000000000000000000000000000000..64a60b22ebcc0da79d0922fe468fe920cfd15cf6 GIT binary patch literal 65674 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 F{x=oGqjCTM literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/test/unifont-13.0.06-license.txt b/vendor/sdl-3.0.0/test/unifont-13.0.06-license.txt new file mode 100644 index 0000000..94339e0 --- /dev/null +++ b/vendor/sdl-3.0.0/test/unifont-13.0.06-license.txt @@ -0,0 +1,90 @@ +The SIL Open Font License version 1.1 is copied below, and is also +available with a FAQ at http://scripts.sil.org/OFL. + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/vendor/sdl-3.0.0/test/unifont-13.0.06.hex b/vendor/sdl-3.0.0/test/unifont-13.0.06.hex new file mode 100644 index 0000000..320686a --- /dev/null +++ b/vendor/sdl-3.0.0/test/unifont-13.0.06.hex @@ -0,0 +1,57086 @@ +0000:AAAA00018000000180004A51EA505A51C99E0001800000018000000180005555 +0001:AAAA00018000000180003993C252325F8A527193800000018000000180005555 +0002:AAAA00018000000180003BA5C124311989247125800000018000000180005555 +0003:AAAA00018000000180007BA5C1247919C1247925800000018000000180005555 +0004:AAAA000180000001800079BFC2487A49C2487989800000018000000180005555 +0005:AAAA00018000000180007A4DC2527B53C2D67A4F800000018000000180005555 +0006:AAAA000180000001800031A5CA287A31CA2849A5800000018000000180005555 +0007:AAAA000180000001800073D1CA1073D1CA1073DF800000018000000180005555 +0008:AAAA00018000000180001E3991401E3191081E71800000018000000180005555 +0009:AAAA000180000001800022F9A2203E21A2202221800000018000000180005555 +000A:AAAA000180000001800020F9A08020F9A0803E81800000018000000180005555 +000B:AAAA000180000001800022F9A220222194200821800000018000000180005555 +000C:AAAA00018000000180003EF9A0803EF9A0802081800000018000000180005555 +000D:AAAA00018000000180001EF1A08820F1A0901E89800000018000000180005555 +000E:AAAA00018000000180001E71A0881C8982883C71800000018000000180005555 +000F:AAAA00018000000180001EF9A0201C2182203CF9800000018000000180005555 +0010:AAAA0001800000018000391DA510251DA51039DD800000018000000180005555 +0011:AAAA00018000000180007189CA184A09CA08719D800000018000000180005555 +0012:AAAA00018000000180007199CA044A09CA10719D800000018000000180005555 +0013:AAAA00018000000180007199CA044A19CA047199800000018000000180005555 +0014:AAAA00018000000180007185CA0C4A15CA1C7185800000018000000180005555 +0015:AAAA00018000000180004993EA546A59DBD44A53800000018000000180005555 +0016:AAAA00018000000180003453C29A311789127113800000018000000180005555 +0017:AAAA00018000000180007BB9C1247939C1247939800000018000000180005555 +0018:AAAA00018000000180003325C4B447ADC4A434A5800000018000000180005555 +0019:AAAA00018000000180003E89A0D83EA9A0883E89800000018000000180005555 +001A:AAAA00018000000180003A5DC252325D8A52719D800000018000000180005555 +001B:AAAA000180000001800079CFC2107991C0507B8F800000018000000180005555 +001C:AAAA00018000000180001E7190801E61901010E1800000018000000180005555 +001D:AAAA00018000000180000E719080166192100EE1800000018000000180005555 +001E:AAAA00018000000180001C7192801C61941012E1800000018000000180005555 +001F:AAAA000180000001800012719280126192100CE1800000018000000180005555 +0020:00000000000000000000000000000000 +0021:00000000080808080808080008080000 +0022:00002222222200000000000000000000 +0023:000000001212127E24247E4848480000 +0024:00000000083E4948380E09493E080000 +0025:00000000314A4A340808162929460000 +0026:000000001C2222141829454246390000 +0027:00000808080800000000000000000000 +0028:00000004080810101010101008080400 +0029:00000020101008080808080810102000 +002A:00000000000008492A1C2A4908000000 +002B:0000000000000808087F080808000000 +002C:00000000000000000000000018080810 +002D:0000000000000000003C000000000000 +002E:00000000000000000000000018180000 +002F:00000000020204080810102040400000 +0030:00000000182442464A52624224180000 +0031:000000000818280808080808083E0000 +0032:000000003C4242020C102040407E0000 +0033:000000003C4242021C020242423C0000 +0034:00000000040C142444447E0404040000 +0035:000000007E4040407C020202423C0000 +0036:000000001C2040407C424242423C0000 +0037:000000007E0202040404080808080000 +0038:000000003C4242423C424242423C0000 +0039:000000003C4242423E02020204380000 +003A:00000000000018180000001818000000 +003B:00000000000018180000001808081000 +003C:00000000000204081020100804020000 +003D:000000000000007E0000007E00000000 +003E:00000000004020100804081020400000 +003F:000000003C4242020408080008080000 +0040:000000001C224A565252524E201E0000 +0041:0000000018242442427E424242420000 +0042:000000007C4242427C424242427C0000 +0043:000000003C42424040404042423C0000 +0044:00000000784442424242424244780000 +0045:000000007E4040407C404040407E0000 +0046:000000007E4040407C40404040400000 +0047:000000003C424240404E4242463A0000 +0048:00000000424242427E42424242420000 +0049:000000003E08080808080808083E0000 +004A:000000001F0404040404044444380000 +004B:00000000424448506060504844420000 +004C:000000004040404040404040407E0000 +004D:00000000424266665A5A424242420000 +004E:0000000042626252524A4A4646420000 +004F:000000003C42424242424242423C0000 +0050:000000007C4242427C40404040400000 +0051:000000003C4242424242425A663C0300 +0052:000000007C4242427C48444442420000 +0053:000000003C424240300C0242423C0000 +0054:000000007F0808080808080808080000 +0055:000000004242424242424242423C0000 +0056:00000000414141222222141408080000 +0057:00000000424242425A5A666642420000 +0058:00000000424224241818242442420000 +0059:00000000414122221408080808080000 +005A:000000007E02020408102040407E0000 +005B:0000000E080808080808080808080E00 +005C:00000000404020101008080402020000 +005D:00000070101010101010101010107000 +005E:00001824420000000000000000000000 +005F:00000000000000000000000000007F00 +0060:00201008000000000000000000000000 +0061:0000000000003C42023E4242463A0000 +0062:0000004040405C6242424242625C0000 +0063:0000000000003C4240404040423C0000 +0064:0000000202023A4642424242463A0000 +0065:0000000000003C42427E4040423C0000 +0066:0000000C1010107C1010101010100000 +0067:0000000000023A44444438203C42423C +0068:0000004040405C624242424242420000 +0069:000000080800180808080808083E0000 +006A:0000000404000C040404040404044830 +006B:00000040404044485060504844420000 +006C:000000180808080808080808083E0000 +006D:00000000000076494949494949490000 +006E:0000000000005C624242424242420000 +006F:0000000000003C4242424242423C0000 +0070:0000000000005C6242424242625C4040 +0071:0000000000003A4642424242463A0202 +0072:0000000000005C624240404040400000 +0073:0000000000003C4240300C02423C0000 +0074:000000001010107C10101010100C0000 +0075:000000000000424242424242463A0000 +0076:00000000000042424224242418180000 +0077:00000000000041494949494949360000 +0078:00000000000042422418182442420000 +0079:0000000000004242424242261A02023C +007A:0000000000007E0204081020407E0000 +007B:0000000C10100808102010080810100C +007C:00000808080808080808080808080808 +007D:00000030080810100804081010080830 +007E:00000031494600000000000000000000 +007F:AAAA000180000001800073D1CA104BD1CA1073DF800000018000000180005555 +0080:AAAA0001800000018000719DCA5273D3C252425D800000018000000180005555 +0081:AAAA0001800000018000499DCA527A5DCA504991800000018000000180005555 +0082:AAAA00018000000180007393CA52739FCA127213800000018000000180005555 +0083:AAAA00018000000180004B93EA525B9FCA524B93800000018000000180005555 +0084:AAAA000180000001800074B9A6A425A5A4A474B9800000018000000180005555 +0085:AAAA00018000000180004BD1EA105BD1CA104BDF800000018000000180005555 +0086:AAAA000180000001800039CDC212319F88527393800000018000000180005555 +0087:AAAA000180000001800079CDC212799FC0527B93800000018000000180005555 +0088:AAAA00018000000180004B9DC9207919C9044939800000018000000180005555 +0089:AAAA000180000001800025DDA4843C85A4842499800000018000000180005555 +008A:AAAA000180000001800045CDC4904489A8841099800000018000000180005555 +008B:AAAA0001800000018000721DCA127213C21243DD800000018000000180005555 +008C:AAAA00018000000180007213CA127213C21243CD800000018000000180005555 +008D:AAAA00018000000180000E2189200E218A200921800000018000000180005555 +008E:AAAA000180000001800039DDC202318D8850739F800000018000000180005555 +008F:AAAA000180000001800039DDC202318D8842739D800000018000000180005555 +0090:AAAA000180000001800071CFCA104A0DCA0271DD800000018000000180005555 +0091:AAAA00018000000180007245CA4C7245C244418F800000018000000180005555 +0092:AAAA0001800000018000725DCA42724DC250419F800000018000000180005555 +0093:AAAA00018000000180003B9DC120311989047139800000018000000180005555 +0094:AAAA000180000001800039D3C212421FC21239D3800000018000000180005555 +0095:AAAA00018000000180002289B6882AA9A2D82289800000018000000180005555 +0096:AAAA00018000000180003B8DC252339F8A127213800000018000000180005555 +0097:AAAA00018000000180007B8DC2527B9FC2127A13800000018000000180005555 +0098:AAAA0001800000018000398FC250324D8A42719D800000018000000180005555 +0099:AAAA0001800000018000339BC42225A394A2639B800000018000000180005555 +009A:AAAA000180000001800039DDC20832098A0871DD800000018000000180005555 +009B:AAAA000180000001800039DDC2084189C0483B9D800000018000000180005555 +009C:AAAA00018000000180000EF990200C2182201C21800000018000000180005555 +009D:AAAA000180000001800031CFCA104991C850338F800000018000000180005555 +009E:AAAA00018000000180001C8992D81CA990881089800000018000000180005555 +009F:AAAA0001800000018000338FCA507B91CA104A0F800000018000000180005555 +00A0:00000000000000000000000000000000 +00A1:00000000080800080808080808080000 +00A2:0000000008083E494848493E08080000 +00A3:000000000E1010107C1010103E610000 +00A4:0000000000423C244242243C42000000 +00A5:00000000412214087F087F0808080000 +00A6:00000000080808080000080808080000 +00A7:000000003C42403C42423C02423C0000 +00A8:24240000000000000000000000000000 +00A9:000000003C4299A5A1A1A599423C0000 +00AA:00001C021E221E003E00000000000000 +00AB:00000000001212242448242412120000 +00AC:000000000000000000007E0202020000 +00AD:AAAA000180003A63C25433C98A48724980000001800003C18000000180005555 +00AE:000000003C42B9A5A5B9A9A5423C0000 +00AF:00007E00000000000000000000000000 +00B0:00000000182424180000000000000000 +00B1:000000000808087F080808007F000000 +00B2:0000003844041820407C000000000000 +00B3:00000038440438044438000000000000 +00B4:00040810000000000000000000000000 +00B5:00000000000042424242424266594080 +00B6:000000003F7A7A7A3A0A0A0A0A0A0A00 +00B7:00000000000000001818000000000000 +00B8:00000000000000000000000000000830 +00B9:0000001030501010107C000000000000 +00BA:00001C2222221C003E00000000000000 +00BB:00000000004848242412242448480000 +00BC:00000000226224282812162A4E420000 +00BD:000000002262242828141A22444E0000 +00BE:00000000621224186812162A4E420000 +00BF:000000001010001010204042423C0000 +00C0:300C000018242442427E424242420000 +00C1:0C30000018242442427E424242420000 +00C2:1824000018242442427E424242420000 +00C3:324C000018242442427E424242420000 +00C4:2424000018242442427E424242420000 +00C5:1824180018242442427E424242420000 +00C6:000000001F2848487F484848484F0000 +00C7:000000003C42424040404042423C0830 +00C8:300C00007E4040407C404040407E0000 +00C9:0C3000007E4040407C404040407E0000 +00CA:182400007E4040407C404040407E0000 +00CB:242400007E4040407C404040407E0000 +00CC:180600003E08080808080808083E0000 +00CD:0C3000003E08080808080808083E0000 +00CE:182400003E08080808080808083E0000 +00CF:242400003E08080808080808083E0000 +00D0:0000000078444242F242424244780000 +00D1:324C000042626252524A4A4646420000 +00D2:300C00003C42424242424242423C0000 +00D3:0C3000003C42424242424242423C0000 +00D4:182400003C42424242424242423C0000 +00D5:324C00003C42424242424242423C0000 +00D6:242400003C42424242424242423C0000 +00D7:00000000000000422418244200000000 +00D8:000000023A44464A4A525262225C4000 +00D9:300C00004242424242424242423C0000 +00DA:0C3000004242424242424242423C0000 +00DB:182400004242424242424242423C0000 +00DC:242400004242424242424242423C0000 +00DD:0C300000414122221408080808080000 +00DE:00000040407844424244784040400000 +00DF:000000003844444858444242524C0000 +00E0:0000300C00003C42023E4242463A0000 +00E1:00000C3000003C42023E4242463A0000 +00E2:0000182400003C42023E4242463A0000 +00E3:0000324C00003C42023E4242463A0000 +00E4:0000242400003C42023E4242463A0000 +00E5:0018241800003C42023E4242463A0000 +00E6:0000000000003E49093F4848493E0000 +00E7:0000000000003C4240404040423C0830 +00E8:0000300C00003C42427E4040423C0000 +00E9:00000C3000003C42427E4040423C0000 +00EA:0000182400003C42427E4040423C0000 +00EB:0000242400003C42427E4040423C0000 +00EC:0000300C0000180808080808083E0000 +00ED:00000C300000180808080808083E0000 +00EE:000018240000180808080808083E0000 +00EF:000024240000180808080808083E0000 +00F0:0000320C1422023E42424242423C0000 +00F1:0000324C00005C624242424242420000 +00F2:0000300C00003C4242424242423C0000 +00F3:00000C3000003C4242424242423C0000 +00F4:0000182400003C4242424242423C0000 +00F5:0000324C00003C4242424242423C0000 +00F6:0000242400003C4242424242423C0000 +00F7:0000000000001800007E000018000000 +00F8:0000000000023C464A4A5252623C4000 +00F9:0000300C0000424242424242463A0000 +00FA:00000C300000424242424242463A0000 +00FB:000018240000424242424242463A0000 +00FC:000024240000424242424242463A0000 +00FD:00000C3000004242424242261A02023C +00FE:0000004040405C6242424242625C4040 +00FF:0000242400004242424242261A02023C +0100:003C000018242442427E424242420000 +0101:0000003C00003C42023E4242463A0000 +0102:42423C0018242442427E424242420000 +0103:0042423C00003C42023E4242463A0000 +0104:0000000018242442427E424242420403 +0105:0000000000003C42023E4242463A0403 +0106:0C3000003C42424040404042423C0000 +0107:00000C3000003C4240404040423C0000 +0108:182400003C42424040404042423C0000 +0109:0000182400003C4240404040423C0000 +010A:101000003C42424040404042423C0000 +010B:0000101000003C4240404040423C0000 +010C:241800003C42424040404042423C0000 +010D:0000241800003C4240404040423C0000 +010E:48300000784442424242424244780000 +010F:2418000202023A4642424242463A0000 +0110:0000000078444242F242424244780000 +0111:000000020F023A4642424242463A0000 +0112:003C00007E4040407C404040407E0000 +0113:0000003C00003C42427E4040423C0000 +0114:42423C007E4040407C404040407E0000 +0115:000042423C003C42427E4040423C0000 +0116:101000007E4040407C404040407E0000 +0117:0000101000003C42427E4040423C0000 +0118:000000007E4040407C404040407E0806 +0119:0000000000003C42427E4040423C100C +011A:241800007E4040407C404040407E0000 +011B:0000241800003C42427E4040423C0000 +011C:182400003C424240404E4242463A0000 +011D:0000182400023A44444438203C42423C +011E:42423C003C424240404E4242463A0000 +011F:0042423C00023A44444438203C42423C +0120:101000003C424240404E4242463A0000 +0121:0000101000023A44444438203C42423C +0122:000000003C424240404E4242463A0830 +0123:00000C1000023A44444438203C42423C +0124:18240000424242427E42424242420000 +0125:3048004040405C624242424242420000 +0126:000000004242FF42427E424242420000 +0127:00000040F0405C624242424242420000 +0128:324C00003E08080808080808083E0000 +0129:0000324C0000180808080808083E0000 +012A:003C00003E08080808080808083E0000 +012B:0000003C0000180808080808083E0000 +012C:42423C003E08080808080808083E0000 +012D:000042423C00180808080808083E0000 +012E:000000003E08080808080808083E0806 +012F:000000080800180808080808083E0806 +0130:080800003E08080808080808083E0000 +0131:000000000000180808080808083E0000 +0132:000000004242424242420202423C0000 +0133:0000222200002222222222221A02221C +0134:0C1200001F0404040404044444380000 +0135:00000C1200000C040404040404044830 +0136:000000004244485060605048444220C0 +0137:000000404040444850605048444220C0 +0138:00000000000042444870704844420000 +0139:186000004040404040404040407E0000 +013A:0C3000180808080808080808083E0000 +013B:000000004040404040404040407E0830 +013C:000000180808080808080808083E0830 +013D:241800004040404040404040407E0000 +013E:241800180808080808080808083E0000 +013F:000000004040404044444040407E0000 +0140:000000301010101014141010107C0000 +0141:000000004040485060C04040407E0000 +0142:0000001808080A0C18280808083E0000 +0143:0C30000042626252524A4A4646420000 +0144:00000C3000005C624242424242420000 +0145:0000000042626252524A4A46464220C0 +0146:0000000000005C6242424242424220C0 +0147:2418000042626252524A4A4646420000 +0148:0000241800005C624242424242420000 +0149:0060202040005C624242424242420000 +014A:000000005C62424242424242424C0000 +014B:0000000000005C62424242424242020C +014C:003C00003C42424242424242423C0000 +014D:0000003C00003C4242424242423C0000 +014E:42423C003C42424242424242423C0000 +014F:000042423C003C4242424242423C0000 +0150:334400003C42424242424242423C0000 +0151:0000334400003C4242424242423C0000 +0152:00000000374848484E48484848370000 +0153:0000000000003649494F484849360000 +0154:0C3000007C4242427C48444442420000 +0155:00000C3000005C624240404040400000 +0156:000000007C4242427C484444424220C0 +0157:0000000000005C6242404040404020C0 +0158:241800007C4242427C48444442420000 +0159:0000241800005C624240404040400000 +015A:0C3000003C424240300C0242423C0000 +015B:00000C3000003C4240300C42423C0000 +015C:182400003C424240300C0242423C0000 +015D:0000182400003C4240300C02423C0000 +015E:000000003C424240300C0242423C0830 +015F:0000000000003C4240300C02423C0830 +0160:241800003C424240300C0242423C0000 +0161:0000241800003C4240300C02423C0000 +0162:000000007F0808080808080808080830 +0163:000000001010107C10101010100C0830 +0164:241800007F0808080808080808080000 +0165:241800001010107C10101010100C0000 +0166:000000007F0808083E08080808080000 +0167:000000001010107C10107C10100C0000 +0168:324C00004242424242424242423C0000 +0169:0000324C0000424242424242463A0000 +016A:003C00004242424242424242423C0000 +016B:0000003C0000424242424242463A0000 +016C:42423C004242424242424242423C0000 +016D:0042423C0000424242424242463A0000 +016E:182418004242424242424242423C0000 +016F:000018241800424242424242463A0000 +0170:334400004242424242424242423C0000 +0171:000033440000424242424242463A0000 +0172:000000004242424242424242423C100C +0173:000000000000424242424242463A0403 +0174:18240000424242425A5A666642420000 +0175:00001824000041494949494949360000 +0176:18240000414122221408080808080000 +0177:0000182400004242424242261A02023C +0178:24240000414122221408080808080000 +0179:0C3000007E02020408102040407E0000 +017A:00000C3000007E0204081020407E0000 +017B:101000007E02020408102040407E0000 +017C:0000101000007E0204081020407E0000 +017D:241800007E02020408102040407E0000 +017E:0000241800007E0204081020407E0000 +017F:0000000C101010301010101010100000 +0180:00000040F0405C6242424242625C0000 +0181:000000007CA2A2223C222222223C0000 +0182:000000007E4040407C424242427C0000 +0183:0000007C40405C6242424242625C0000 +0184:00000000602020203C222222223C0000 +0185:000000000000602020203C22223C0000 +0186:000000003C42420202020242423C0000 +0187:000003043C4444404040404444380000 +0188:0000000003043C444040404044380000 +0189:0000000078444242F242424244780000 +018A:0000000078A4A2222222222224380000 +018B:000000007E0202023E424242423E0000 +018C:0000003E02023A4642424242463A0000 +018D:0000000000003C424242422418040438 +018E:000000007E0202023E020202027E0000 +018F:0000000018244202027E424224180000 +0190:000000003C42424038404042423C0000 +0191:000000001F1010101E10101010106000 +0192:0000000C1010107C1010101010106000 +0193:000000033C444440405C44444C340000 +0194:00000000424242242418182424180000 +0195:00000040404040724A4A4A4A4A440000 +0196:00000000380808080808080808060000 +0197:000000003E0808083E080808083E0000 +0198:00000000464A50506060504844420000 +0199:00000030484044485060504844420000 +019A:000000180808083E08080808083E0000 +019B:00000000242810304818242442420000 +019C:00000000494949494949494949370000 +019D:00000000222232322A2A26262222C000 +019E:0000000000005C624242424242420202 +019F:000000003C4242427E424242423C0000 +01A0:000000023A4444444444444444380000 +01A1:0000000000023A444444444444380000 +01A2:00000000364A4A4A4A4A4A4A4A320202 +01A3:000000000000364A4A4A4A4A4A320202 +01A4:000000003E5151111E10101010100000 +01A5:0000000000035C644444444464584040 +01A6:0000000070203C22223C282422210000 +01A7:000000003C4242020C304042423C0000 +01A8:0000000000003C42020C3040423C0000 +01A9:000000007E40201008081020407E0000 +01AA:00000020505030101010101010100C00 +01AB:000000001010107C10101010100C0418 +01AC:000000003F4848080808080808080000 +01AD:0000000C1010107C10101010100C0000 +01AE:000000007F0808080808080808080600 +01AF:00000101464444444444444444380000 +01B0:0000000001014644444444444C340000 +01B1:00000000422424424242424224180000 +01B2:000000004C4242424242424448300000 +01B3:00000000464544282810101010100000 +01B4:0000000000034444444444241C040438 +01B5:000000007E0204083C102040407E0000 +01B6:0000000000007E04083C1020407E0000 +01B7:000000007E0408101C020202463C0000 +01B8:000000007E20100838404040623C0000 +01B9:0000000000007C20100838404040423C +01BA:0000000000003E04081C02023C40423C +01BB:000000003C424204087E2040407E0000 +01BC:000000007E2020203C020202423C0000 +01BD:0000000000007E20203C0202423C0000 +01BE:0000000010107C101018040444380000 +01BF:0000000000005C624242444850604040 +01C0:00000010101010101010101010100000 +01C1:00000028282828282828282828280000 +01C2:000000101010107C107C101010100000 +01C3:00000000080808080808080008080000 +01C4:05020000675151515252545454670000 +01C5:00000502605057515152525454670000 +01C6:00000512101037515152525454370000 +01C7:00000000474141414141414949760000 +01C8:0000000141404341414141414179020C +01C9:00000061212023212121212121F9020C +01CA:000000004B4949696959594D4D4A0000 +01CB:0000000149486B69695959594949120C +01CC:0000000101005369494949494949120C +01CD:2418000018242442427E424242420000 +01CE:0000241800003C42023E4242463A0000 +01CF:241800003E08080808080808083E0000 +01D0:000024180000180808080808083E0000 +01D1:241800003C42424242424242423C0000 +01D2:0000241800003C4242424242423C0000 +01D3:241800004242424242424242423C0000 +01D4:000024180000424242424242463A0000 +01D5:3C0024004242424242424242423C0000 +01D6:003C00242400424242424242463A0000 +01D7:0C3000240042424242424242423C0000 +01D8:0C3000242400424242424242463A0000 +01D9:241800240042424242424242423C0000 +01DA:241800242400424242424242463A0000 +01DB:300C00240042424242424242423C0000 +01DC:300C00242400424242424242463A0000 +01DD:0000000000003C4202027E42423C0000 +01DE:3C00240018242442427E424242420000 +01DF:003C002424003C42023E4242463A0000 +01E0:3C00180018242442427E424242420000 +01E1:003C001010003C42023E4242463A0000 +01E2:003C00001F2848487F484848484F0000 +01E3:0000003C00003E49093F4848493E0000 +01E4:000000003C424240404E424F423E0000 +01E5:0000000000023A44444438203C4F423C +01E6:241800003C424240404E4242463A0000 +01E7:0000241800023A44444438203C42423C +01E8:24180000424448506060504844420000 +01E9:24180040404044485060504844420000 +01EA:000000003C42424242424242423C100C +01EB:0000000000003C4242424242423C100C +01EC:003C00003C42424242424242423C100C +01ED:0000003C00003C4242424242423C100C +01EE:241800007E0408101C020202463C0000 +01EF:0000241800003E0408101C020202423C +01F0:0000120C00000C040404040404044830 +01F1:00000000675151515252545454670000 +01F2:00000000605057515152525454670000 +01F3:00000010101037515152525454370000 +01F4:0C3000003C424240404E4242463A0000 +01F5:00000C3000023A44444438203C42423C +01F6:000000004848484A7A4A4A4A4A440000 +01F7:000000005C6242424448506040404000 +01F8:00300C0042626252524A4A4646420000 +01F9:000000300C005C624242424242420000 +01FA:0C30182418182424427E424242420000 +01FB:0C3000182418003C42023E42463A0000 +01FC:061800001F2848487F484848484F0000 +01FD:0000061800003E49093F4848493E0000 +01FE:0C3000023A44464A4A525262225C4000 +01FF:00000C3000023C464A4A5252623C4000 +0200:CC22000018242442427E424242420000 +0201:0000CC2200003C42023E4242463A0000 +0202:3C42420018242442427E424242420000 +0203:00003C4242003C42023E4242463A0000 +0204:CC2200007E4040407C404040407E0000 +0205:0000CC2200003C42427E4040423C0000 +0206:3C4242007E4040407C404040407E0000 +0207:00003C4242003C42427E4040423C0000 +0208:CC2200003E08080808080808083E0000 +0209:0000CC220000180808080808083E0000 +020A:3C4242003E08080808080808083E0000 +020B:00003C424200180808080808083E0000 +020C:CC2200003C42424242424242423C0000 +020D:0000CC2200003C4242424242423C0000 +020E:3C4242003C42424242424242423C0000 +020F:00003C4242003C4242424242423C0000 +0210:CC2200007C4242427C48444442420000 +0211:0000CC2200005C624240404040400000 +0212:3C4242007C4242427C48444442420000 +0213:00003C4242005C624240404040400000 +0214:CC2200004242424242424242423C0000 +0215:0000CC220000424242424242463A0000 +0216:3C4242004242424242424242423C0000 +0217:00003C424200424242424242463A0000 +0218:000000003C424240300C0242423C0810 +0219:0000000000003C4240300C02423C0810 +021A:000000007F0808080808080808080204 +021B:000000001010107C10101010100C2040 +021C:000000003C4242020C340202020C3000 +021D:0000000000003C4202020C3202020C30 +021E:00241800424242427E42424242420000 +021F:002418004040405C6242424242420000 +0220:000000005C6242424242424242420202 +0221:0000000202023A4642424242473B0204 +0222:0000000008244242243C4242423C0000 +0223:000000000000122224182422221C0000 +0224:000000007E02020408102040407E0204 +0225:0000000000007E0204081020407E0204 +0226:0000080018242442427E424242420000 +0227:0000000008003C42023E4242463A0000 +0228:000000007E4040407C404040407E0830 +0229:0000000000003C42427E4040423C0830 +022A:3C0024003C42424242424242423C0000 +022B:00003C0024003C4242424242423C0000 +022C:3C00324C003C424242424242423C0000 +022D:003C00324C003C4242424242423C0000 +022E:000008003C42424242424242423C0000 +022F:0000000008003C4242424242423C0000 +0230:3C0008003C42424242424242423C0000 +0231:00003C0008003C4242424242423C0000 +0232:00003E00414122221408080808080000 +0233:000000003C004242424242261A02023C +0234:0000001808080808080808080C0C1020 +0235:0000000000005C624242424243430204 +0236:000000001010107C10101010160E0810 +0237:0000000000000C040404040404044830 +0238:00000010101054BA92929292BA540000 +0239:00000000000054BA92929292BA541010 +023A:000000021A242C4A527E624242C20000 +023B:000000023C464A4850506062427C8000 +023C:0000000002043C4A50506060427C8000 +023D:000000002020202078202020203E0000 +023E:000001027F0C0C080818182828480000 +023F:0000000000003C4240300C02423C0906 +0240:0000000000007E02040810204060100E +0241:000000003C4242020408080808080000 +0242:0000000000003C424202040808080000 +0243:000000003C2222223C227A22223C0000 +0244:000000004444444444FE444444380000 +0245:00000000181818242424244242420000 +0246:000004047E4848507C505060607E4040 +0247:0000000000023C464A7E5060427C8000 +0248:000000001F040404041F044444380000 +0249:0000000404000C04041F040404044830 +024A:0000000038444444444444444C340403 +024B:000000000000344C444444444C340403 +024C:000000003C2222227C28242422220000 +024D:0000000000002C322270202020200000 +024E:000000004141227F1408080808080000 +024F:0000000000002222227F22120E02021C +0250:0000000000005C6242427C40423C0000 +0251:0000000000003A46424242464A320000 +0252:0000000000004C5262424242625C0000 +0253:0000003840405C6242424242625C0000 +0254:0000000000003C4202020202423C0000 +0255:0000000000003C424040404C523C4000 +0256:000000040404344C444444444C340300 +0257:000000030404344C444444444C340000 +0258:0000000000003C42427E0202423C0000 +0259:0000000000003C4202027E42423C0000 +025A:000000000000344D1A28484848300000 +025B:0000000000003C42403C4040423C0000 +025C:0000000000003C42023C0202423C0000 +025D:000000000000344D0A30080848300000 +025E:0000000000003C42425C4242423C0000 +025F:0000000000000C0404041F0404044830 +0260:000000000003344C4444444C34044438 +0261:0000000000003A46424242463A02423C +0262:0000000000003C4240404E42423E0000 +0263:00000000000042424224241818242418 +0264:00000000000042422424181824180000 +0265:0000000000424242424242463A020202 +0266:0000003840405C624242424242420000 +0267:0000003840405C62424242424242020C +0268:0000000808001808083E0808083E0000 +0269:000000000000701010101010100C0000 +026A:0000000000003E0808080808083E0000 +026B:000000180808083A4C080808083E0000 +026C:00000018080838483E080808083E0000 +026D:00000018080808080808080808080600 +026E:0000003010101F1112141611117D0906 +026F:00000000000049494949494949370000 +0270:00000000000049494949494949370101 +0271:00000000000076494949494949410600 +0272:00000000000016191111111111116000 +0273:00000000000058644444444444440300 +0274:000000000000424262524A4642420000 +0275:0000000000003C42427E4242423C0000 +0276:0000000000003748484E484848370000 +0277:0000000000003E414149494949360000 +0278:0000000808083E4949494949493E0808 +0279:000000000000020202020242463A0000 +027A:000000000202020202020242463A0000 +027B:0000000000000404040404444C340300 +027C:0000000000005C624240404040404040 +027D:0000000000005C624240404040403000 +027E:0000000000003C424240404040400000 +027F:0000000000003C424202020202020202 +0280:0000000000007C42427C484442420000 +0281:000000000000424244487C42427C0000 +0282:0000000000003C4240300C02427C4030 +0283:0000000C101010101010101010106000 +0284:0000000C1010101010107C1010106000 +0285:00000000000060101010101010100C00 +0286:000000060808080808080808384E3000 +0287:00000000601010101010107C10100000 +0288:000000001010107C1010101010100E00 +0289:0000000000002222227F2222261A0000 +028A:00000000000042244242424224180000 +028B:000000000000CC424242424448300000 +028C:00000000000018182424244242420000 +028D:00000000000036494949494949410000 +028E:000000003C4040586442424242420000 +028F:00000000000041412214080808080000 +0290:0000000000007C0808101020207C0403 +0291:0000000000007E0204081026497E1000 +0292:0000000000003E0408101C020202423C +0293:0000000000003E0408101C0202324A3C +0294:000000003C4242020408080808080000 +0295:000000003C4242402010101010100000 +0296:000000000808080808040242423C0000 +0297:0000000000003C42404040404040423C +0298:000000003C4242425A5A4242423C0000 +0299:0000000000007C42427C4242427C0000 +029A:0000000000003C42423A4242423C0000 +029B:0000000000003B4440404C44443C0000 +029C:0000000000002222223E222222220000 +029D:0000000404000C0404040404043E4830 +029E:00000000004222120A060A1222020202 +029F:000000000000404040404040407E0000 +02A0:000000000003344C444444444C340404 +02A1:000000003C4242020408083E08080000 +02A2:000000003C4242402010107C10100000 +02A3:0000001010103F5152525454583F0000 +02A4:0000001010103F515254565151310906 +02A5:0000001010103F5152545852553E0400 +02A6:00000000404046F948444241413E0000 +02A7:000000032424247C24242424241C0418 +02A8:00000000404046F94848484A4D3E0400 +02A9:000000003048406E515151515151020C +02AA:000000602020262928242221217E0000 +02AB:0000006020203E2224242828307E0000 +02AC:00000049495536220049495536220000 +02AD:000000007E42424200007E4242420000 +02AE:0000000000006424242424242C140404 +02AF:0000000000006424242424242C140403 +02B0:00000040405864444444000000000000 +02B1:00000038444058644444000000000000 +02B2:00000004000404040424180000000000 +02B3:00000000005864444040000000000000 +02B4:00000000000404444C34000000000000 +02B5:00000000000404444C34030000000000 +02B6:00000044444878444478000000000000 +02B7:00000000004949553622000000000000 +02B8:000000000044444C3404380000000000 +02B9:00000000081020000000000000000000 +02BA:00000000122448000000000000000000 +02BB:00000000081010180000000000000000 +02BC:00000000180808100000000000000000 +02BD:00000000181010080000000000000000 +02BE:00000030080404083000000000000000 +02BF:0000000C102020100C00000000000000 +02C0:0000003C4202021C1010000000000000 +02C1:0000003C424040380808000000000000 +02C2:00000004081020100804000000000000 +02C3:00000020100804081020000000000000 +02C4:00000000081422410000000000000000 +02C5:00000000412214080000000000000000 +02C6:00000000182400000000000000000000 +02C7:00000000241800000000000000000000 +02C8:00000000080808000000000000000000 +02C9:000000003C0000000000000000000000 +02CA:000000000C3000000000000000000000 +02CB:00000000300C00000000000000000000 +02CC:00000000000000000000080808080000 +02CD:000000000000000000000000003C0000 +02CE:00000000000000000000000000300C00 +02CF:000000000000000000000000000C3000 +02D0:00000000000000381000001038000000 +02D1:00000000000000381000000000000000 +02D2:00000000000030080404083000000000 +02D3:0000000000000C102020100C00000000 +02D4:00000000000000101010107C00000000 +02D5:000000000000007C1010101000000000 +02D6:0000000000000010107C101000000000 +02D7:0000000000000000007C000000000000 +02D8:000042423C0000000000000000000000 +02D9:00001818000000000000000000000000 +02DA:00001824180000000000000000000000 +02DB:00000000000000000000000000000806 +02DC:0000324C000000000000000000000000 +02DD:00003344000000000000000000000000 +02DE:000000000000002060A21C0000000000 +02DF:00000000422418244200000000000000 +02E0:00000000004242241824241800000000 +02E1:00000030101010101038000000000000 +02E2:00000000003E403C027C000000000000 +02E3:00000000004224182442000000000000 +02E4:00003C40403808000000000000000000 +02E5:0000007C040404040404040404040000 +02E6:00000004047C04040404040404040000 +02E7:00000004040404047C04040404040000 +02E8:00000004040404040404047C04040000 +02E9:000000040404040404040404047C0000 +02EA:000000000000404040404C7000000000 +02EB:000000000040404C7040404000000000 +02EC:00000000000000000000004428100000 +02ED:00007E007E0000000000000000000000 +02EE:00000000662222440000000000000000 +02EF:00000000000000000000000044281000 +02F0:00000000000000000000000010284400 +02F1:00000000000000000000040810080400 +02F2:00000000000000000000100804081000 +02F3:00000000000000000000000018241800 +02F4:00000000000000300C00000000000000 +02F5:00000000000000CC2200000000000000 +02F6:00000000000000334400000000000000 +02F7:0000000000000000000000000000324C +02F8:00000018180000001818000000000000 +02F9:00000038202020000000000000000000 +02FA:00000038080808000000000000000000 +02FB:00000000000000000000202020380000 +02FC:00000000000000000000080808380000 +02FD:0000000000000000000000000042427E +02FE:0000000000000000000000000040407E +02FF:000000000000000000000010207E2010 +0300:300C0000000000000000000000000000 +0301:0C300000000000000000000000000000 +0302:18240000000000000000000000000000 +0303:00324C00000000000000000000000000 +0304:00007E00000000000000000000000000 +0305:0000FF00000000000000000000000000 +0306:0042423C000000000000000000000000 +0307:00181800000000000000000000000000 +0308:00666600000000000000000000000000 +0309:18240408080000000000000000000000 +030A:18242418000000000000000000000000 +030B:33440000000000000000000000000000 +030C:00422418000000000000000000000000 +030D:00080808000000000000000000000000 +030E:00242424000000000000000000000000 +030F:CC220000000000000000000000000000 +0310:185A423C000000000000000000000000 +0311:003C4242000000000000000000000000 +0312:00081018000000000000000000000000 +0313:00180810000000000000000000000000 +0314:00181008000000000000000000000000 +0315:00030102000000000000000000000000 +0316:00000000000000000000000000100804 +0317:00000000000000000000000000081020 +0318:00000000000000000000000000083808 +0319:00000000000000000000000000101C10 +031A:001E0202000000000000000000000000 +031B:0000040A020408000000000000000000 +031C:00000000000000000000000000182018 +031D:00000000000000000000000000101038 +031E:00000000000000000000000000381010 +031F:00000000000000000000000000107C10 +0320:0000000000000000000000000000003C +0321:0000000000000000000000000202120C +0322:00000000000000000000000008080906 +0323:00000000000000000000000000001818 +0324:00000000000000000000000000006666 +0325:00000000000000000000000000182418 +0326:00000000000000000000000000180810 +0327:00000000000000000000000010180438 +0328:00000000000000000000000000080806 +0329:00000000000000000000000000101010 +032A:00000000000000000000000000007E42 +032B:00000000000000000000000000494936 +032C:00000000000000000000000000422418 +032D:00000000000000000000000000182442 +032E:0000000000000000000000000042423C +032F:000000000000000000000000003C4242 +0330:0000000000000000000000000000324C +0331:0000000000000000000000000000007E +0332:000000000000000000000000000000FF +0333:00000000000000000000000000FF00FF +0334:0000000000000000324C000000000000 +0335:00000000000000003C00000000000000 +0336:0000000000000000FF00000000000000 +0337:00000000000004081020400000000000 +0338:00000202040408081010202040400000 +0339:00000000000000000000000018040418 +033A:0000000000000000000000000000427E +033B:000000000000000000000000003C243C +033C:000000000000000000000000006C9210 +033D:66186600000000000000000000000000 +033E:08101008100000000000000000000000 +033F:FF00FF00000000000000000000000000 +0340:00402010000000000000000000000000 +0341:00020408000000000000000000000000 +0342:00344800000000000000000000000000 +0343:00180810000000000000000000000000 +0344:10105444000000000000000000000000 +0345:0000000000000000000000001010100C +0346:007E4200000000000000000000000000 +0347:000000000000000000000000007E007E +0348:00000000000000000000000000002424 +0349:00000000000000000000000000001808 +034A:083A5C10000000000000000000000000 +034B:04718E20000000000000000000000000 +034C:324C324C000000000000000000000000 +034D:00000000000000000000000000227F22 +034E:00000000000000000000000000081C08 +034F:AAAA000180000001B9C24203C2E2422BB9C40001824000018420000182405555 +0350:08040204080000000000000000000000 +0351:18202018000000000000000000000000 +0352:3C425A18000000000000000000000000 +0353:00000000000000000000000000241824 +0354:00000000000000000000000810201008 +0355:00000000000000000000001008040810 +0356:00000000000000000000008040244A91 +0357:18040418000000000000000000000000 +0358:00030300000000000000000000000000 +0359:00000000000000000000000054387C38 +035A:000000000000000000000000006C926C +035B:08103E04080000000000000000000000 +035C:00000000000000000000000000000000000000000000000000004002300C0FF0 +035D:00004002300C0FF0000000000000000000000000000000000000000000000000 +035E:000000001FF80000000000000000000000000000000000000000000000000000 +035F:0000000000000000000000000000000000000000000000000000000000001FF8 +0360:00001E0221844078000000000000000000000000000000000000000000000000 +0361:00000FF0300C4002000000000000000000000000000000000000000000000000 +0362:000000000000000000000000000000000000000000000008000C7FFE000C0008 +0363:3C44444C340000000000000000000000 +0364:384478403C0000000000000000000000 +0365:10003010380000000000000000000000 +0366:38444444380000000000000000000000 +0367:444444443C0000000000000000000000 +0368:1C2020201C0000000000000000000000 +0369:04043C243C0000000000000000000000 +036A:20203824240000000000000000000000 +036B:0000EC92920000000000000000000000 +036C:00382420200000000000000000000000 +036D:20782020180000000000000000000000 +036E:00444428100000000000000000000000 +036F:44281028440000000000000000000000 +0370:00000000404040407C40404040400000 +0371:0000000000002050501E101010100000 +0372:00000000FE9292921010101010100000 +0373:000000007C5454541010101010100000 +0374:000000000C1810200000000000000000 +0375:00000000000000000000000004081830 +0376:000000004246464A4A52526262420000 +0377:000000000000889898A8A8CACA840000 +0378:00007FFE738E6DF66DC66DF6738E7FFE7FFE61CE7DB67BCE77B677CE7FFE0000 +0379:00007FFE738E6DF66DC66DF6738E7FFE7FFE61CE7DB67BC677F677CE7FFE0000 +037A:00000000000000000000000020202018 +037B:0000000000003C4202020202423C0000 +037C:0000000000003C4240585840423C0000 +037D:0000000000003C42021A1A02423C0000 +037E:00000000000018180000001808081000 +037F:000000001F0404040404044444380000 +0380:00007FFE738E6DF66DC66DF6738E7FFE7FFE73CE6DB673B66DB673CE7FFE0000 +0381:00007FFE738E6DF66DC66DF6738E7FFE7FFE73EE6DCE73EE6DEE73C67FFE0000 +0382:00007FFE738E6DF66DC66DF6738E7FFE7FFE73866DF673866DBE73867FFE0000 +0383:00007FFE738E6DF66DC66DF6738E7FFE7FFE738E6DF673C66DF6738E7FFE0000 +0384:00040810000000000000000000000000 +0385:04085444000000000000000000000000 +0386:1020400018242442427E424242420000 +0387:00000000000000001818000000000000 +0388:102040007E4040407C404040407E0000 +0389:10204000424242427E42424242420000 +038A:102040003E08080808080808083E0000 +038B:00007FFE738E6DF66DC66DF6738E7FFE7FFE738E6DB6738E6DB6738E7FFE0000 +038C:102040003C42424242424242423C0000 +038D:00007FFE738E6DF66DC66DF6738E7FFE7FFE738E6DB673B66DB6738E7FFE0000 +038E:10204000414122221408080808080000 +038F:102040003E4141414141412214147700 +0390:040810444400301010101010100C0000 +0391:0000000018242442427E424242420000 +0392:000000007C4242427C424242427C0000 +0393:000000007E4240404040404040400000 +0394:000000000808141422222241417F0000 +0395:000000007E4040407C404040407E0000 +0396:000000007E02020408102040407E0000 +0397:00000000424242427E42424242420000 +0398:000000003C4242425A5A4242423C0000 +0399:000000003E08080808080808083E0000 +039A:00000000424448506060504844420000 +039B:00000000080814142222224141410000 +039C:00000000424266665A5A424242420000 +039D:0000000042626252524A4A4646420000 +039E:000000007E0000003C000000007E0000 +039F:000000003C42424242424242423C0000 +03A0:000000007F2222222222222222220000 +03A1:000000007C4242427C40404040400000 +03A2:00007FFE738E6DF66DC66DF6738E7FFE7FFE61866DF661866DBE6D867FFE0000 +03A3:000000007E40201008081020407E0000 +03A4:000000007F0808080808080808080000 +03A5:00000000414122221408080808080000 +03A6:000000007F083E494949493E087F0000 +03A7:00000000424224241818242442420000 +03A8:0000000049494949493E080808080000 +03A9:000000003E4141414141221414770000 +03AA:242400003E08080808080808083E0000 +03AB:24240000414122221408080808080000 +03AC:000408100000324A444444444A320000 +03AD:0004081000003E40403C4040403E0000 +03AE:0004081000005C624242424242420202 +03AF:000408100000301010101010100C0000 +03B0:040810444400424242424242423C0000 +03B1:000000000000324A444444444A320000 +03B2:00000000384444447C424242625C4040 +03B3:00000000000031490A04080810100000 +03B4:000000001C20202018244242423C0000 +03B5:0000000000003C42403C4040423C0000 +03B6:0000000020201C0810202020201C021C +03B7:0000000000005C624242424242420202 +03B8:00000000182424427E42422424180000 +03B9:000000000000301010101010100C0000 +03BA:00000000000022242830302824220000 +03BB:00000000202010100818242442420000 +03BC:0000000000004242424266665A424040 +03BD:00000000000042424244444850600000 +03BE:0000000040403C40403C40403C02023C +03BF:0000000000003C4242424242423C0000 +03C0:0000000000007E242424242424240000 +03C1:0000000000003C4242424242625C4040 +03C2:0000000000001E20404040201C02021C +03C3:0000000000003F484444444444380000 +03C4:0000000000007E1010101010100C0000 +03C5:000000000000424242424242423C0000 +03C6:000000000000264949494949493E0808 +03C7:0000000000C121221214182848448483 +03C8:000000000000494949494949493E0808 +03C9:00000000000022414149494949360000 +03CA:000024240000301010101010100C0000 +03CB:000024240000424242424242423C0000 +03CC:0004081000003C4242424242423C0000 +03CD:000408100000424242424242423C0000 +03CE:00040810000022414149494949360000 +03CF:00000000424448506060504844420408 +03D0:000000001C2242447844424244380000 +03D1:000000000C1212120F226222221C0000 +03D2:000000003655141408080808081C0000 +03D3:102040003655141408080808081C0000 +03D4:003636003655141408080808081C0000 +03D5:0000000008083E4949494949493E0808 +03D6:0000000000007F224141494949360000 +03D7:00000000000082442C2C34342241011E +03D8:000000003C42424242424242423C183C +03D9:0000000000003C4242424242423C1818 +03DA:000000003844404040404038081C0000 +03DB:000000000000003E4040201C021C0000 +03DC:000000007E4240407840404040400000 +03DD:000000000000003C2220203820202020 +03DE:0000000060202020203E040408080000 +03DF:000000000000201010223C4408080400 +03E0:000000001C22060A12060A12020C0000 +03E1:00000000000000601018284C14240408 +03E2:0000000044929292929292926E027C80 +03E3:0000000000004492929292926E027C80 +03E4:0000000032424242463A020202020000 +03E5:000000000000122222221E0202020000 +03E6:000000004040405C624141410101621C +03E7:0000000000083C5252220202324C0000 +03E8:000000003C42420204081020423C0000 +03E9:0000000000003C4242040830423C0000 +03EA:00000000C3A5241818242442427E8100 +03EB:000000000000245A18181824427E0000 +03EC:000000023C40405C62424242423C0000 +03ED:0000000000023C405C624242423C0000 +03EE:000000001010FE921010101010101000 +03EF:0000000000001010FE92101010101000 +03F0:00000000000082442C2C343422410000 +03F1:0000000000003C4242427C40403C0200 +03F2:0000000000003C4240404040423C0000 +03F3:0000000404000C040404040404044830 +03F4:000000003C4242427E424242423C0000 +03F5:0000000000001C2040784040201C0000 +03F6:0000000000007008043C040408700000 +03F7:00000000E040784442424242447840E0 +03F8:0000000040405C6242424242625C4040 +03F9:000000003C42424040404042423C0000 +03FA:00000000424266665A5A424242420000 +03FB:0000000000446C6C5454444445424040 +03FC:0000000000003C42424242625C40F840 +03FD:000000003C42420202020242423C0000 +03FE:000000003C42424058584042423C0000 +03FF:000000003C4242021A1A0242423C0000 +0400:00300C007E4040407C404040407E0000 +0401:242400007E4040407C404040407E0000 +0402:000000007E1010101E11111111160000 +0403:0C3000007E4040404040404040400000 +0404:000000001C2240407C404040221C0000 +0405:000000003C424240300C0242423C0000 +0406:000000003E08080808080808083E0000 +0407:242400003E08080808080808083E0000 +0408:000000000E0404040404044444380000 +0409:00000000784848484E494949498E0000 +040A:00000000484848487E494949494E0000 +040B:000000007E1010101E11111111110000 +040C:0C300000464848505060504844420000 +040D:00300C004246464A4A52526262420000 +040E:42423C00414122221414080810300000 +040F:000000004141414141414141417F0808 +0410:0000000018242442427E424242420000 +0411:000000007C4040407C424242427C0000 +0412:000000007C4242427C424242427C0000 +0413:000000007E4040404040404040400000 +0414:000000000E1212122222224242FF8181 +0415:000000007E4040407C404040407E0000 +0416:0000000049492A2A1C1C2A2A49490000 +0417:000000003C4202023C040202423C0000 +0418:000000004246464A4A52526262420000 +0419:002418004246464A4A52526262420000 +041A:00000000464848505060504844420000 +041B:000000001E1212121212122222420000 +041C:00000000424266665A5A424242420000 +041D:00000000424242427E42424242420000 +041E:000000003C42424242424242423C0000 +041F:000000007E4242424242424242420000 +0420:000000007C4242427C40404040400000 +0421:000000003C42424040404042423C0000 +0422:000000007F0808080808080808080000 +0423:00000000414122221414080810300000 +0424:000000083E49494949493E0808080000 +0425:00000000424224241818242442420000 +0426:000000004242424242424242427F0101 +0427:000000004242424242463A0202020000 +0428:000000004949494949494949497F0000 +0429:00000000929292929292929292FF0101 +042A:00000000701010101E111111111E0000 +042B:0000000042424242724A4A4A4A720000 +042C:00000000404040407C424242427C0000 +042D:00000000384402023E02020244380000 +042E:000000004C52525272525252524C0000 +042F:000000003E4242423E12222242420000 +0430:0000000000003C42023E4242463A0000 +0431:0000021C20407C4242424242423C0000 +0432:0000000000007C42427C4242427C0000 +0433:0000000000007E404040404040400000 +0434:0000000000001E1222224242427F4100 +0435:0000000000003C42427E4040423C0000 +0436:00000000000049492A1C1C2A49490000 +0437:0000000000003C42023C0402423C0000 +0438:00000000000046464A4A525262620000 +0439:00002418000046464A4A525262620000 +043A:00000000000046485060504844420000 +043B:0000000000001E121212122222420000 +043C:0000000000004266665A5A4242420000 +043D:0000000000004242427E424242420000 +043E:0000000000003C4242424242423C0000 +043F:0000000000007E424242424242420000 +0440:0000000000005C6242424242625C4040 +0441:0000000000003C4240404040423C0000 +0442:0000000000007F080808080808080000 +0443:00000000000042422424181810102060 +0444:0000000808083E4949494949493E0808 +0445:00000000000042422418182442420000 +0446:000000000000424242424242427F0101 +0447:00000000000042424242463A02020000 +0448:000000000000494949494949497F0000 +0449:00000000000092929292929292FF0101 +044A:0000000000007010101E1111111E0000 +044B:000000000000424242724A4A4A720000 +044C:0000000000004040407C4242427C0000 +044D:0000000000003844023E020244380000 +044E:0000000000004C5252725252524C0000 +044F:0000000000003E4242423E1222420000 +0450:0000300C00003C42427E4040423C0000 +0451:0000242400003C42427E4040423C0000 +0452:00000040F0405C62424242424242020C +0453:00000C3000007E404040404040400000 +0454:0000000000001C22407C4040221C0000 +0455:0000000000003C4240300C02423C0000 +0456:000000080800180808080808083E0000 +0457:000000242400180808080808083E0000 +0458:0000000404000C040404040404044830 +0459:0000000000007848484E4949498E0000 +045A:0000000000004848487E4949494E0000 +045B:00000040F0405C624242424242420000 +045C:00000C30000046485060504844420000 +045D:0000300C000046464A4A525262620000 +045E:0042423C000042422424181810102060 +045F:000000000000222222222222223E0808 +0460:0000000049494949494949495A240000 +0461:0000000000000049494949495A240000 +0462:00000000107C10101E111111111E0000 +0463:0000000020207820203C2222223C0000 +0464:00000000464950507E50505049460000 +0465:0000000000004649507E505049460000 +0466:000000000808141422362A4949490000 +0467:00000000000008141422364949490000 +0468:000000004848545452766A4949490000 +0469:00000000000048545452764949490000 +046A:000000003E222214081C2A4949490000 +046B:0000000000003E2214083E4949490000 +046C:000000005F51514A744E555555550000 +046D:0000000000005F514A744E5555550000 +046E:000024183C4202023C040202023C4040 +046F:0000002418003C42023C0402023C4040 +0470:0000000049494949493E080808080000 +0471:000000000000000049494949493E0808 +0472:000000003C4242427E424242423C0000 +0473:0000000000003C42427E4242423C0000 +0474:00000000434444442828281010100000 +0475:00000000000046484828282810100000 +0476:66110000434444442828281010100000 +0477:00006611000046484828282810100000 +0478:00000000205059595955565454240808 +0479:00000000000029595955565454240808 +047A:000000083E49414141414141493E0800 +047B:0000000000083E4941414141493E0800 +047C:3C431804080036414149494949360000 +047D:0000003C431804080036414949360000 +047E:007F080049494949494949495A240000 +047F:000000007F080049494949495A240000 +0480:000000003C424240404040403C040404 +0481:0000000000003C42424040403C040404 +0482:000000000000120C442A111824000000 +0483:00087840000000000000000000000000 +0484:02050910000000000000000000000000 +0485:00384030000000000000000000000000 +0486:00380418000000000000000000000000 +0487:00304C83000000000000000000000000 +0488:000000000100028010102828000000004008A014000000000000101029280280 +0489:000000000080108409880C30000000000008700E1000000000000CD808881084 +048A:002418004246464A4A52526262430204 +048B:00002418000046464A4A525262630204 +048C:0000000020702020203C2222263C0000 +048D:000000000000002070203C22223C0000 +048E:000000007C424A447A40404040400000 +048F:0000000000005C624242424A645A4040 +0490:000002027E4040404040404040400000 +0491:0000000002027E404040404040400000 +0492:000000001F101010107C101010100000 +0493:0000000000001F1010107C1010100000 +0494:000000007E404040407C424242420C00 +0495:0000000000007E4040407C4242420C00 +0496:0000000049492A2A1C1C2A2A49490101 +0497:00000000000049492A1C1C2A49490101 +0498:000000003C4202023C040202423C0830 +0499:0000000000003C42023C0402423C0830 +049A:00000000464848505060504844420202 +049B:00000000000046485060504844420202 +049C:00000000434454547854545442410000 +049D:00000000000043545478545442410000 +049E:00000000237424282830282422210000 +049F:00000000000023742830282422210000 +04A0:00000000E32424282830282422210000 +04A1:000000000000E3242830282422210000 +04A2:00000000424242427E42424242430101 +04A3:0000000000004242427E424242430101 +04A4:00000000474444447C44444444440000 +04A5:0000000000004744447C444444440000 +04A6:0000000078484848484E494949490106 +04A7:000000000000784848484E4949490106 +04A8:000000204C525252525252522C180600 +04A9:000000000000204C525252522C180600 +04AA:000000003C42424040404042423C0830 +04AB:0000000000003C4242404042423C0830 +04AC:000000007F08080808080808080C0404 +04AD:0000000000007F0808080808080C0404 +04AE:00000000414122221408080808080000 +04AF:00000000000022222214140808080808 +04B0:00000000414122221408083E08080000 +04B1:0000000000002222221414083E080808 +04B2:00000000424224241818242442430101 +04B3:00000000000042422418182442430101 +04B4:00000000FA22222222222222223F0101 +04B5:000000000000FA2222222222223F0101 +04B6:000000004242424242463A0202030101 +04B7:00000000000042424242463A02030101 +04B8:000000004242424252563A1212020000 +04B9:00000000000042424252563A12020000 +04BA:000000004040405C6242424242420000 +04BB:00000000000040405C62424242420000 +04BC:000000004C5252523E101012120C0000 +04BD:0000000000004C52523E1010120C0000 +04BE:000000004C5252523E101012120C0808 +04BF:0000000000004C52523E1010120C0808 +04C0:000000003E08080808080808083E0000 +04C1:41413E0049492A2A1C1C2A2A49490000 +04C2:0022221C000049492A1C1C2A49490000 +04C3:0000000046484850607C42424242020C +04C4:000000000000464850607C424242020C +04C5:000000001E1212121212122222430204 +04C6:0000000000001E121212122222430204 +04C7:00000000424242427E4242424242020C +04C8:0000000000004242427E42424242020C +04C9:00000000424242427E42424242430204 +04CA:0000000000004242427E424242430204 +04CB:000000004242424242463A0202060404 +04CC:00000000000042424242463A02060404 +04CD:00000000424266665A5A424242430204 +04CE:0000000000004266665A5A4242430204 +04CF:000000001C08080808080808081C0000 +04D0:42423C0018242442427E424242420000 +04D1:0042423C00003C42023E4242463A0000 +04D2:2424000018242442427E424242420000 +04D3:0000242400003C42023E4242463A0000 +04D4:000000001F2848487F484848484F0000 +04D5:0000000000003E49093F4848493E0000 +04D6:42423C007E4040407C404040407E0000 +04D7:000042423C003C42427E4040423C0000 +04D8:0000000018244202027E424224180000 +04D9:0000000000003C4202027E42423C0000 +04DA:2424000018244202027E424224180000 +04DB:0000242400003C4202027E42423C0000 +04DC:2424000049492A2A1C1C2A2A49490000 +04DD:00002424000049492A1C1C2A49490000 +04DE:242400003C4202023C040202423C0000 +04DF:0000242400003C42023C0402423C0000 +04E0:000000007E0408101C020202463C0000 +04E1:0000000000003E0408101C020202423C +04E2:003C00004246464A4A52526262420000 +04E3:0000003C000046464A4A525262620000 +04E4:242400004246464A4A52526262420000 +04E5:00002424000046464A4A525262620000 +04E6:242400003C42424242424242423C0000 +04E7:0000242400003C4242424242423C0000 +04E8:000000003C4242427E424242423C0000 +04E9:0000000000003C42427E4242423C0000 +04EA:242400003C4242427E424242423C0000 +04EB:0000242400003C42427E4242423C0000 +04EC:000024003C4202023E020202423C0000 +04ED:0000000024003C42021E0202423C0000 +04EE:003E0000414122221414080810300000 +04EF:0000003C000042422424181810102060 +04F0:24240000414122221414080810300000 +04F1:00002424000042422424181810102060 +04F2:33440000414122221414080810300000 +04F3:00003344000042422424181810102060 +04F4:242400004242424242463A0202020000 +04F5:00002424000042424242463A02020000 +04F6:000000007E4040404040404040602020 +04F7:0000000000007E404040404040602020 +04F8:2424000042424242724A4A4A4A720000 +04F9:000024240000424242724A4A4A720000 +04FA:000000001F101010107C101010180818 +04FB:0000000000001F10107C101010180818 +04FC:00000000424224241818242442420204 +04FD:00000000000042422418182442420204 +04FE:0000000042422424187E242442420000 +04FF:000000000000424224187E2442420000 +0500:0000000202023E4242424242463A0000 +0501:000000020202023A46424242463A0000 +0502:0000000404043C44444545454D360000 +0503:00000004040404344C4444454D360000 +0504:00000000384444041805050505020000 +0505:00000000000038444404180505020000 +0506:00000000384444041804040404030101 +0507:00000000000038444404180404030101 +0508:000000003C2424242425254545820000 +0509:0000000000003C242424244545820000 +050A:00000000444444447C45454545460000 +050B:0000000000004444447C444545460000 +050C:000000003C424240404E424244380000 +050D:0000000000003C4240404E42423C0000 +050E:000000007F08080808090909090E0000 +050F:0000000000007F0808080909090E0000 +0510:000000003C4240403C204040423C0000 +0511:0000000000003C42403C2040423C0000 +0512:000000001E1212121212122222420A0C +0513:0000000000001E121212122222420A0C +0514:0000000071514A4A44444A4A51910000 +0515:00000000000071514A44444A51910000 +0516:00000000E192949890F0888482810000 +0517:00000000000001E294989894E2818080 +0518:000000007F8888887F284848888F0000 +0519:0000000000007E89897F282849460000 +051A:000000003C4242424242425A663C0300 +051B:0000000000003A4642424242463A0202 +051C:00000000424242425A5A666642420000 +051D:00000000000041494949494949360000 +051E:000000004A444A506060504844420000 +051F:00000000000054485460504844420000 +0520:00000000705050505E51519191910502 +0521:0000000000007050505E515191910502 +0522:0000000090909090FE91919191910502 +0523:000000000000909090FE919191910502 +0524:000000007C4444444444444444460202 +0525:0000000000007C444444444444460202 +0526:000000004040405C6242424242430101 +0527:00000000000040405C62424242430101 +0528:00000000111111111F11111111115020 +0529:0000000000001111111F111111115020 +052A:00000000000000000C4614481448145027E02460245044484444FE4282008200 +052B:0000000000000000000000001C461448245027E04450444844447E4242000000 +052C:000000004C4C5454547C2424447E4242 +052D:0000000000004C5454547C2424247E42 +052E:000000001E1212121212122222430101 +052F:0000000000001E121212122222430101 +0530:00007FFE73866DBE6D866DF673867FFE7FFE63CE7DB671B67DB663CE7FFE0000 +0531:00000000444444444444444745380000 +0532:000000003C4242407C42404040400000 +0533:0000000038444444443E050404040000 +0534:00000000384444040406050404040000 +0535:0000000040407C4240404042423C0000 +0536:000000001C222222221C0408107E0200 +0537:000000004040407C42404040407C0200 +0538:000000003C42424040404040407C0200 +0539:000000003844444F5454484040400000 +053A:00000000040404043F44444444380000 +053B:0000000040405C624240404040400000 +053C:000000004040404040404040407E0200 +053D:00000000404040794949494949460000 +053E:000000007E1824424242424224180000 +053F:00000000404042424242423E02020000 +0540:00000000081010081020406018060000 +0541:000000001C222222221C245848360000 +0542:00000000384444040404040404070100 +0543:000000000464182424424242427E0000 +0544:00000000474544444444444444380000 +0545:000000001C2202427C420202221C0000 +0546:00000000403010101010101011110E00 +0547:000000403C20404042424242423C0000 +0548:000000003C4242424242424242420000 +0549:000000001C222222221C040870180600 +054A:000000003E4949494909090101010000 +054B:000000001C2222120A0C0C08107E0200 +054C:00000000384444474544444444440000 +054D:000000004242424242424242423C0000 +054E:00000000040444444444443C04070100 +054F:000000003C424240300C0242423C0000 +0550:000000003C4242404040404040400000 +0551:000000003C4242423C420202423C0000 +0552:00000000404058644444434040400000 +0553:00000000103854545454545438100000 +0554:000000000C1212121C507C1410100000 +0555:000000003C42424242424242423C0000 +0556:00000000384848380E090909493E0000 +0557:00007FFE73866DBE6D866DF673867FFE7FFE61866FF661EE7DDE61DE7FFE0000 +0558:00007FFE73866DBE6D866DF673867FFE7FFE61CE6FB661CE7DB661CE7FFE0000 +0559:10202010000000000000000000000000 +055A:20101020000000000000000000000000 +055B:08183000000000000000000000000000 +055C:0C300000000000000000000000000000 +055D:20100800000000000000000000000000 +055E:38445418000000000000000000000000 +055F:3050403C000000000000000000000000 +0560:00000000000076494949494949490000 +0561:00000000000049494949494949370000 +0562:000000000000001C224242407E404040 +0563:0000000000003844444444443F040404 +0564:00000000000058644444444444470404 +0565:00000000004040407E404242221C0000 +0566:000000000000344C444444443C040407 +0567:0000000040407C404040404040380400 +0568:0000000000005C62424242424242407E +0569:0000000000005864444F545448404040 +056A:000000000404043F4444444444380000 +056B:0000000040405C624242424242424040 +056C:0000000000004040404040404040407C +056D:00000000404040794949494946404040 +056E:000000007008043F4444444444380000 +056F:000000002020222222222222221E0202 +0570:000000004040405C6242424242420000 +0571:000000000810083E42424242423E0000 +0572:00000000000058644444444444440407 +0573:000000000E11107F11111111130D0000 +0574:0000000002050444444444444C340000 +0575:0000000000000C040404040404044830 +0576:000000003C42404242424242463A0000 +0577:000000003844040808101020203F0000 +0578:0000000000005C624242424242420000 +0579:000000001020100808101020203F0000 +057A:00000000000049494949494949370101 +057B:000000003844442414181820203F0000 +057C:00000000000058644444444444470000 +057D:000000000000424242424242463A0000 +057E:0000000004040444444444444C340407 +057F:0000000000004A4D4949494959290000 +0580:0000000000005C624242424242424040 +0581:0000000000003A46424242463A02423C +0582:000000000000180808080808080E0000 +0583:0000000008084A4D4949494959290808 +0584:0000000000000C1212121C103C101018 +0585:0000000000003C4242424242423C0000 +0586:00000000384848380E090909493E0808 +0587:000000004040404444444444443B0000 +0588:0000000000000C040404041E04044830 +0589:00000000000018180000001818000000 +058A:0000000000000000000000623C000000 +058B:00007FFE73866DBE6D866DF673867FFE7FFE738E6DB6738E6DB6738E7FFE0000 +058C:00007FFE73866DBE6D866DF673867FFE7FFE73C66DBE73BE6DBE73C67FFE0000 +058D:0000000000000DC012301248298827B027C81BC8232824901890076000000000 +058E:00000000000007601890249023281BC827C827B02988124812300DC000000000 +058F:00000000384444041F041F0404040000 +0590:00007FFE73866DBE6D866DF673867FFE7FFE73CE6DB671B67DB673CE7FFE0000 +0591:00000000000000000000000000207088 +0592:00180066000000000000000000000000 +0593:0C300C300C3000000000000000000000 +0594:00180018000000000000000000000000 +0595:002C202C000000000000000000000000 +0596:00000000000000000000000000808060 +0597:081C3E1C080000000000000000000000 +0598:0024524A240000000000000000000000 +0599:00C02020000000000000000000000000 +059A:00000000000000000000000000010201 +059B:000000000000000000000000D0D010E0 +059C:000C1010000000000000000000000000 +059D:00030404000000000000000000000000 +059E:00364848000000000000000000000000 +059F:0042A542240000000000000000000000 +05A0:00020502040000000000000000000000 +05A1:00506080000000000000000000000000 +05A2:00000000000000000000000000887020 +05A3:000000000000000000000000002020E0 +05A4:00000000000000000000000000408040 +05A5:000000000000000000000000002020C0 +05A6:000000000000000000000000002424D8 +05A7:00000000000000000000006080601060 +05A8:00C02020000000000000000000000000 +05A9:0040A040200000000000000000000000 +05AA:00000000000000000000000000009060 +05AB:00102010000000000000000000000000 +05AC:0004041C000000000000000000000000 +05AD:00000000000000000000000000040403 +05AE:0048A8A8900000000000000000000000 +05AF:00182424180000000000000000000000 +05B0:00000000000000000000000000180018 +05B1:000000000000000000000000002A0012 +05B2:000000000000000000000000003A0002 +05B3:000000000000000000000000003A1012 +05B4:00000000000000000000000000001818 +05B5:00000000000000000000000000006666 +05B6:00000000000000000000000000660018 +05B7:00000000000000000000000000003C00 +05B8:000000000000000000000000003E0808 +05B9:00003030000000000000000000000000 +05BA:00006060000000000000000000000000 +05BB:00000000000000000000000000200802 +05BC:00000000000000001800000000000000 +05BD:00000000000000000000000000080808 +05BE:0000007E000000000000000000000000 +05BF:0000003C000000000000000000000000 +05C0:00000000000808080808080808080000 +05C1:00000606000000000000000000000000 +05C2:00006060000000000000000000000000 +05C3:000000000000081C080000081C080000 +05C4:18180000000000000000000000000000 +05C5:00000000000000000000000000001818 +05C6:000000000038202020202020203C0000 +05C7:000000000000000000000000003E0808 +05C8:00007FFE73866DBE6D866DF673867FFE7FFE71CE6FB66FCE6FB671CE7FFE0000 +05C9:00007FFE73866DBE6D866DF673867FFE7FFE71CE6FB66FC66FF671CE7FFE0000 +05CA:00007FFE73866DBE6D866DF673867FFE7FFE71866FB66F866FB671B67FFE0000 +05CB:00007FFE73866DBE6D866DF673867FFE7FFE718E6FB66F8E6FB6718E7FFE0000 +05CC:00007FFE73866DBE6D866DF673867FFE7FFE71C66FBE6FBE6FBE71C67FFE0000 +05CD:00007FFE73866DBE6D866DF673867FFE7FFE718E6FB66FB66FB6718E7FFE0000 +05CE:00007FFE73866DBE6D866DF673867FFE7FFE71866FBE6F8E6FBE71867FFE0000 +05CF:00007FFE73866DBE6D866DF673867FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +05D0:0000000000424222122C484442420000 +05D1:00000000007C040404040404047F0000 +05D2:000000000030080808040C1422420000 +05D3:00000000007E04040404040404040000 +05D4:00000000007E02022222222222220000 +05D5:00000000003808080808080808080000 +05D6:0000000000300C0A0808080808080000 +05D7:00000000007E22222222222222220000 +05D8:0000000000464A4242424242427E0000 +05D9:00000000003808080800000000000000 +05DA:00000000007E02020202020202020202 +05DB:00000000007E020202020202027C0000 +05DC:00000020203E02020202040408300000 +05DD:0000000000FE222222222222223E0000 +05DE:00000000004E31214141414141470000 +05DF:00000000003808080808080808080808 +05E0:00000000001C040404040404043C0000 +05E1:00000000007E42424242424244780000 +05E2:00000000001212121212121212FE0000 +05E3:00000000007E42424272020202020202 +05E4:00000000007E424242720202027E0000 +05E5:00000000002222242830202020202020 +05E6:000000000042422418080402027E0000 +05E7:00000000007E22222424282020202020 +05E8:00000000007E02020202020202020000 +05E9:000000000049494949494949497F0000 +05EA:00000000003E22222222222222620000 +05EB:00007FFE73866DBE6D866DF673867FFE7FFE618E6FB6638E6FB6618E7FFE0000 +05EC:00007FFE73866DBE6D866DF673867FFE7FFE61C66FBE63BE6FBE61C67FFE0000 +05ED:00007FFE73866DBE6D866DF673867FFE7FFE618E6FB663B66FB6618E7FFE0000 +05EE:00007FFE73866DBE6D866DF673867FFE7FFE61866FBE638E6FBE61867FFE0000 +05EF:00000000003808087711111100000000 +05F0:00000000007711111111111111110000 +05F1:00000000007711111101010101010000 +05F2:00000000007711111100000000000000 +05F3:00000204080000000000000000000000 +05F4:00001224480000000000000000000000 +05F5:00007FFE73866DBE6D866DF673867FFE7FFE61866FBE63866FF66F867FFE0000 +05F6:00007FFE73866DBE6D866DF673867FFE7FFE61CE6FBE638E6FB66FCE7FFE0000 +05F7:00007FFE73866DBE6D866DF673867FFE7FFE61866FF663EE6FDE6FDE7FFE0000 +05F8:00007FFE73866DBE6D866DF673867FFE7FFE61CE6FB663CE6FB66FCE7FFE0000 +05F9:00007FFE73866DBE6D866DF673867FFE7FFE61CE6FB663C66FF66FCE7FFE0000 +05FA:00007FFE73866DBE6D866DF673867FFE7FFE61866FB663866FB66FB67FFE0000 +05FB:00007FFE73866DBE6D866DF673867FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +05FC:00007FFE73866DBE6D866DF673867FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +05FD:00007FFE73866DBE6D866DF673867FFE7FFE618E6FB663B66FB66F8E7FFE0000 +05FE:00007FFE73866DBE6D866DF673867FFE7FFE61866FBE638E6FBE6F867FFE0000 +05FF:00007FFE73866DBE6D866DF673867FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +0600:5555800000018000000180000001800000018004000980083FFD80000001AAAA +0601:55558000000180000001800000018000000180042A0DAA0C35F580000001AAAA +0602:5555800000018000000180000001800000018E000E1987E0000180000001AAAA +0603:555580000001800000018000001980240045814401499EF0000180000001AAAA +0604:55558000000180000001800000018000000180000195827C0201BF000001AAAA +0605:55558000000188041619A1E0000180000001800000018000000180000001AAAA +0606:000000A870A810D0088008800480040002700240014001800180010001000000 +0607:00200040708010A0084008900460040002700240014001800180010001000000 +0608:000000000000000000640E9832B004500410082007C000000000000000000000 +0609:00000004042808101020204450000000 +060A:00000004042808101020214450000000 +060B:000000000600060000C0012000E0002001C01E10000800080000000000000000 +060C:00000000000000081018180000000000 +060D:00000000000000000C18204000000000 +060E:0000000000000000000000000000000000000E00110011060FF8000000000000 +060F:0000000000000600080008000600080013001480188009001600200000000000 +0610:00060939160000000000000000000000 +0611:0000003000400278038004000800000000000000000000000000000000000000 +0612:00001F880208041008E008000000000000000000000000000000000000000000 +0613:0000060809083910166000000000000000000000000000000000000000000000 +0614:0000000000081FC8002800100000000000000000000000000000000000000000 +0615:0000040005C006200FC000000000000000000000000000000000000000000000 +0616:0500050005000D0010000FE00000000000000000000000000000000000000000 +0617:0000008000000080008003000000000000000000000000000000000000000000 +0618:00001800000000000000000000000000 +0619:181C1020000000000000000000000000 +061A:00000000000000000000000000001800 +061B:00000000000000081018001800000000 +061C:AAAA000180000001B2224A37FA2A4A23CBA20001800000018000000180005555 +061D:00007FFE73CE6DBE6D8E6DB673CE7FFE7FFE7B8E73B67BB67BB6718E7FFE0000 +061E:0000000000000000000000000000000000000000000000800000014000000000 +061F:0000003E414020100808000800000000 +0620:000000000000000C5248443810281000 +0621:000000000000001C203C102000000000 +0622:00013E40080808080808080000000000 +0623:18201820080808080808080000000000 +0624:00000C100C10000C12121E0204483000 +0625:0000000008080808080808000C100C10 +0626:00000000182018200046484846423C00 +0627:00000008080808080808080000000000 +0628:000000000000000422423C0000080000 +0629:000000002400101824243C0000000000 +062A:000000001400000422423C0000000000 +062B:000010002800000422423C0000000000 +062C:00000000000000007E1020404840221C +062D:00000000000000007E1020404040221C +062E:00000000001000007E1020404040221C +062F:000000000000080402427C0000000000 +0630:000000002000080402427C0000000000 +0631:00000000000000000402020204483000 +0632:00000000001000000402020204483000 +0633:00000000000000000115155E48483000 +0634:00000008001200000115155E48483000 +0635:000000000000000006194E4848300000 +0636:000000000004000006194E4848300000 +0637:000000202020202C32227C0000000000 +0638:000000202420202C32227C0000000000 +0639:000000000000001824201C204040423C +063A:000000000800001824201C204040423C +063B:00005004081020403C827E0000000000 +063C:00000004081020403C827E0028001000 +063D:0000000010284400044A484442423C00 +063E:0000000000005000044A484442423C00 +063F:0000000000200050044A484442423C00 +0640:00000000000000000000FF0000000000 +0641:0000000800060A0642423C0000000000 +0642:000000002400001C120A264244380000 +0643:000000020A120A2242423C0000000000 +0644:000000020202020202224242443C0000 +0645:00000000000000001C061E2020202020 +0646:00000000001000000422424244380000 +0647:000000000000101824243C0000000000 +0648:000000000000000C12121E0204483000 +0649:0000000000000000044A484442423C00 +064A:0000000000000000044A4844423C0028 +064B:0C300C30000000000000000000000000 +064C:0C0C6428700000000000000000000000 +064D:0000000000000000000008300C300000 +064E:00000C30000000000000000000000000 +064F:0C0E0810200000000000000000000000 +0650:00000000000000000000000000000C30 +0651:00000004145860000000000000000000 +0652:18242418000000000000000000000000 +0653:00013E40000000000000000000000000 +0654:18201820000000000000000000000000 +0655:00000000000000000000000018201820 +0656:0000000000000000000000000000000000000000000000000000004000200020 +0657:04081070300000000000000000000000 +0658:24241800000000000000000000000000 +0659:0000003C000000000000000000000000 +065A:00442810100000000000000000000000 +065B:00101028440000000000000000000000 +065C:00000000000000000000000018180000 +065D:30701008040000000000000000000000 +065E:24081024000000000000000000000000 +065F:00000000000000000000000006082658 +0660:00000000000010381000000000000000 +0661:00000020201010080804040400000000 +0662:00000022241810080804040400000000 +0663:00000049523C20101008080800000000 +0664:00000004081020182040423C00000000 +0665:00000018242442424242241800000000 +0666:000000403C0404020202010100000000 +0667:00000041412222141408080800000000 +0668:00000008080814142222414100000000 +0669:0000001824444C340202010100000000 +066A:00000404484810102424404000000000 +066B:00000000000000000004040438000000 +066C:00000018180810000000000000000000 +066D:000000000008087F1C36220000000000 +066E:000000000000000422423C0000000000 +066F:000000000000001C120A264244380000 +0670:10101000000000000000000000000000 +0671:040A1E20080808080808080000000000 +0672:06082658000808080808080000000000 +0673:00000000080808080808080006082658 +0674:18201820000000000000000000000000 +0675:06080608202020202020200000000000 +0676:000003040304000C12121E0204483000 +0677:000033341324400C12121E0204483000 +0678:00000000030403040046484846423C00 +0679:000020203838000422423C0000000000 +067A:000010001000000422423C0000000000 +067B:000000000000000422423C0008000800 +067C:000000001400000422423C0814080000 +067D:000028001000000422423C0000000000 +067E:000000000000000422423C0014000800 +067F:000028002800000422423C0000000000 +0680:000000000000000422423C0014001400 +0681:00000018201820007E1020404040221C +0682:00000010001000007E1020404040221C +0683:00000000000000007E1020405440221C +0684:00000000000000007E1020484048221C +0685:00000010002400007E1020404040221C +0686:00000000000000007E2040544048221C +0687:00000000000000007E2040544054221C +0688:002020383800080402427C0000000000 +0689:000000000000080402427C0814080000 +068A:000000000000080402427C0008000000 +068B:002020383800080402427C0008000000 +068C:000000280000080402427C0000000000 +068D:000000000000080402427C0028000000 +068E:000010002800080402427C0000000000 +068F:000028001000080402427C0000000000 +0690:000028002800080402427C0000000000 +0691:000008080E0E00000402020204483000 +0692:00000000442810000402020204483000 +0693:000000000000000004020202044C3A04 +0694:00000000000000000402020204483200 +0695:00000000000000000804040408483502 +0696:00000000000000000402021204483200 +0697:00000000001200000402020204483000 +0698:00000008001400000402020204483000 +0699:00000012001200000402020204483000 +069A:000000000400000115155E484A300000 +069B:000000000000000115155E5055200200 +069C:000008001200000115155E5055200200 +069D:000000000000000006194E5055200000 +069E:000000080012000006194E4848300000 +069F:00000024202A202C32227C0000000000 +06A0:000010002400001824201C204040423C +06A1:0000000000060A0642423C0000000000 +06A2:0000000000060A0642423C0008000000 +06A3:0000040000060A0642423C0008000000 +06A4:0008001200060A0642423C0000000000 +06A5:0000000000060A0642423C0024001000 +06A6:000A000A00060A0642423C0000000000 +06A7:000000000400001C120A264244380000 +06A8:000010002400001C120A264244380000 +06A9:00000004081020403C827E0000000000 +06AA:0000000000000018006001800600080007FC40023FFC00000000000000000000 +06AB:000000040C1A24403C827E0000000000 +06AC:000800020A120A2242423C0000000000 +06AD:100028020A120A2242423C0000000000 +06AE:000000020A120A2242423C0014000800 +06AF:00081024481020403C827E0000000000 +06B0:000810244C1A24403C827E0000000000 +06B1:00500618620C30403C827E0000000000 +06B2:00081024481020403C827E0028000000 +06B3:00081024481020403C827E0010001000 +06B4:4000A618620C30403C827E0000000000 +06B5:00110A040002020202224242443C0000 +06B6:000200020202020202224242443C0000 +06B7:040009000202020202224242443C0000 +06B8:00000002020202020222423C00140008 +06B9:00000000000800000422424244380008 +06BA:00000000000000000422424244380000 +06BB:000010101C1C00000422424244380000 +06BC:000000000008000004224242443C0A04 +06BD:00000010002400000422424244380000 +06BE:000000000000102C2A1A244000000000 +06BF:00000000001000007E2040544048221C +06C0:001820182000101824243C0000000000 +06C1:000000000000000000102F4000000000 +06C2:000000001820182000102F4000000000 +06C3:000000000000280000102F4000000000 +06C4:000000000000000C12120E2252247800 +06C5:000000000000000C12121E021C483000 +06C6:000000221408000C12121E0204483000 +06C7:000018180810200C12121E0204483000 +06C8:000000080404000C12121E0204483000 +06C9:000000081422000C12121E0204483000 +06CA:000000001400000C12121E0204483000 +06CB:000008001200000C12121E0204483000 +06CC:0000000000000000044A484442423C00 +06CD:0000000000000000042A68A422221C00 +06CE:0000000044281000044A484442423C00 +06CF:000000000800000C12121E0204483000 +06D0:000000000000000C5248443800100010 +06D1:000000000000000C5248443800280010 +06D2:00000000000000000008141020407F00 +06D3:00000000003040304008141020407F00 +06D4:000000000000000000003C0000000000 +06D5:000000000000101824243C0000000000 +06D6:0208025C0FFC10001FC000000000000000000000000000000000000000000000 +06D7:024802200FE010001FC000000000000000000000000000000000000000000000 +06D8:0000004000A001E0060000000000000000000000000000000000000000000000 +06D9:0880048003000100030000000000000000000000000000000000000000000000 +06DA:1F8004000900042003C000000000000000000000000000000000000000000000 +06DB:4000A000000000000000000000000000 +06DC:0000012809F80900060000000000000000000000000000000000000000000000 +06DD:0000000001C006300BE80C181004100410040C180BE8063001C0000000000000 +06DE:0000008001401FFC1414180C11C432265225322611C4180C14141FFC01400080 +06DF:18242418000000000000000000000000 +06E0:18242424180000000000000000000000 +06E1:7E0C3000000000000000000000000000 +06E2:0180038002000200010000000000000000000000000000000000000000000000 +06E3:000000000000000000000000000000000000000000000000012809F809000600 +06E4:7C000000000000000000000000000000 +06E5:0000000000000000040A0E021C000000 +06E6:00000000000000001020407F00000000 +06E7:001020407F0000000000000000000000 +06E8:000000800420042003E000000000000000000000000000000000000000000000 +06E9:00000080014002A005500AA815542A2A15541554155415D4141417F430067FFF +06EA:0100028004400280010000000000000000000000000000000000000000000000 +06EB:0000000000000000000000000000000000000000000001000280044002800100 +06EC:0000018001800000000000000000000000000000000000000000000000000000 +06ED:0000000000000000000000000000000000000000000000000180010001000080 +06EE:000008142200080402427C0000000000 +06EF:00000000040A11000402020204483000 +06F0:00000000000010381000000000000000 +06F1:00000020201010080804040400000000 +06F2:00000022241810080804040400000000 +06F3:00000049523C20101008080800000000 +06F4:000000182460722C2010101000000000 +06F5:00000000080814142222495563000000 +06F6:000000001C2220201806186000000000 +06F7:00000041412222141408080800000000 +06F8:00000008080814142222414100000000 +06F9:0000001824444C340202010100000000 +06FA:000008001200000115155E484A300000 +06FB:000000000004000006194E484A300000 +06FC:000000000800001824201C204840423C +06FD:0000000000001C203C10200014141414 +06FE:00000000000000001C063E404A4A4A4A +06FF:000000102844102C2A1A244000000000 +0700:000000000000000001000380010008201C700820010003800100000000000000 +0701:0000000000001800180000000000000000000000000000000000000000000000 +0702:0000000000000000000000000000000000001800180000000000000000000000 +0703:0000000000001800180000000000000000001800180000000000000000000000 +0704:0000000000000000000000000000000018001800000000000000000018001800 +0705:0000000000000000000000006600660000000000000000000000000000000000 +0706:0000000000000000000000006000600000000000060006000000000000000000 +0707:0000000000000000000000000600060000000000000060006000000000000000 +0708:0000000060006000000000000600060000000000000000000000000000000000 +0709:0000000000000000000000000000000000000000600060000000000006000600 +070A:0000240024007E00000000000000000018001800000000000000000018001800 +070B:00000000000000007FFE00000000018001800000000000000000000000000000 +070C:00004000200010000800040002000100008000400024001C001C003C00000000 +070D:00000180018019981998018001807FFE7FFE0180018019981998018001800000 +070E:00007FFE73866DF66DEE6DDE73DE7FFE7FFE73866DBE6D8E6DBE73867FFE0000 +070F:AAAA0001B18C3FFDB18C000180000001B32244B7A7AA14A3E4A2000180005555 +0710:0000000000070007000E003C7FF8FFC0C600C300C1C0C0F04070000000000000 +0711:02000C00780050000C0000000000000000000000000000000000000000000000 +0712:000000000000000000000C000FF007F80008600860087FF83FF0000000000000 +0713:00000600070003000180018070C07C600F3003F000F8001C0006000000000000 +0714:00000600070003000180018073C07E600F3003F000F8001C0006000000000000 +0715:0000000000003F003E000E000600060006000600260006000200000000000000 +0716:0000000000003F003E000E000600060006000600060006000200000000000000 +0717:000000000000000000001F783FFC60844082408241026106320C000000000000 +0718:0000000000000000000007800CC0186010201030101019980F98000000000000 +0719:0000000000000C000E000E000600060006000600060006000200000000000000 +071A:00000000000000000000030C030C010601020082408260843FFC1F7800000000 +071B:00000C000E00060003000100018060807FF83FFC004200420042002400180000 +071C:00000C000E00060003000100018060807FF83FFC0042005A005A002400180000 +071D:000000000000000000000000000000000000300018000C000C000C0018003000 +071E:000002000000050000001DC03FE062204224422244126412240C008000000000 +071F:00000000000000001800186018701C9804980788030C00040004000200020001 +0720:000000000E000E0006000300018000C00060303030303FF01FF0000000000000 +0721:00000000000070007E001FF803FC03040304030403FC06F80C00180010000000 +0722:00000000000000000000000000001C003E003F8007C000F00018000400020000 +0723:000000000000000000003C00667843CC4184618431881FF00FE0000000000000 +0724:000000000000000000003C00667843CC4184618431881FF00FE0018001800000 +0725:00000000000000000000000003000300018060C060607FFE3FFE000000000000 +0726:000000000000000001E002300210021801E8600C60047FFE3FFE000000000000 +0727:00000000000000000F001880108030802F00600C400CFFFCFFF8000000000000 +0728:0000000000000000001000380FFC1FFC10000C0003C0003000180038FFF00000 +0729:00000000000000000000000001F003F802080204020413FC17FC0C0000000000 +072A:0200000000003F003E000E000600060006000600060006000200000000000000 +072B:0000000000000000000006600FF00FF007E003C061867FFE3FFE000000000000 +072C:000060007000300008C005E0061006100A081108208C3F8C1F0C000000000000 +072D:000000000020006000C0018003FC03FE0002000260027FFE3FFC000000000000 +072E:00000300018019801F000C000200010060807C403FE007F8001C000600020000 +072F:0000000000003F003E000E000600060006000600460006001200000000000000 +0730:3E00240028003000200000000000000000000000000000000000000000000000 +0731:0000000000000000000000000000000000000000000004000C00140024007C00 +0732:0000000004000000000000000000000000000000000000000000000020000000 +0733:1800240024001800100020000000000000000000000000000000000000000000 +0734:0000000000000000000000000000000000000000040008001800240024001800 +0735:0000080000002000000000000000000000000000000000000000000000000000 +0736:180004000A001200000000000000000000000000000000000000000000000000 +0737:0000000000000000000000000000000000000000000000002400280010000C00 +0738:0000000000000000000000000000000000000000000000000000000000002400 +0739:0000000000000000000000000000000000000000000000000000000008002000 +073A:7C0010007C000000000000000000000000000000000000000000000000000000 +073B:00000000000000000000000000000000000000000000000000003E0008003E00 +073C:0000000000000000000000000000000000000000000000000000000000001000 +073D:0100020005000880124005200210000000000000000000000000000000000000 +073E:0000000000000000000000000000000000001080094004900220014000800100 +073F:0000000000000800000000000000000000000000000000000000000000000000 +0740:0000000000002000000000000000000000000000000000000000000000000000 +0741:0000000000001000000000000000000000000000000000000000000000000000 +0742:0000000000000000000000000000000000000000000000000000000010000000 +0743:0000100000001000000000000000000000000000000000000000000000000000 +0744:0000000000000000000000000000000000000000000000000000100000001000 +0745:0000100000002800000000000000000000000000000000000000000000000000 +0746:0000000000000000000000000000000000000000000000000000280000001000 +0747:0000000008001000200000000000000000000000000000000000000000000000 +0748:0000000000000000000000000000000000000000000000000000200010000800 +0749:012000D000E8017400BA005C002C001200000000000000000000000000000000 +074A:540010007C001000540000000000000000000000000000000000000000000000 +074B:00007FFE73866DF66DEE6DDE73DE7FFE7FFE6D8E6DB6618E7DB67D8E7FFE0000 +074C:00007FFE73866DF66DEE6DDE73DE7FFE7FFE6DC66DBE61BE7DBE7DC67FFE0000 +074D:00001818181818180C300C30042004600660066002C002C003C0018001800000 +074E:00000000000C000600E600FC003000100008000860047FFE3FFE000000000000 +074F:00000180018000C0002C00320012001C0008000860047FFE3FFE000000000000 +0750:000000000000000422423C00002A0000 +0751:000000100028000422423C0000080000 +0752:000000000000000422423C0008001400 +0753:000000000820000422423C0008001400 +0754:000000000010000422423C0000140000 +0755:000000000000000422423C0008142200 +0756:000000442810000422423C0000000000 +0757:00000000000028007E1020404040221C +0758:00000000000000007E1024404A40221C +0759:202028347800080402427C0010001000 +075A:000000000000080402427C0008142200 +075B:00000000000000000402021F04483000 +075C:00000000001400140115155E48483000 +075D:000000000028001824201C204040423C +075E:000000280010001824201C204040423C +075F:000000100010001824201C204040423C +0760:0000000000060A0642423C000A000000 +0761:0000000000060A0642423C0004000A00 +0762:00000004881020403C827E0000000000 +0763:004000A4081020403C827E0000000000 +0764:00000004081020403C827E0008001400 +0765:00000000000800001C061E2020202020 +0766:00000000000000001C061E2028202020 +0767:00000000000020000422424244380014 +0768:20202834780020000422424244380000 +0769:00004428100020000422424244380000 +076A:000000040404041E0424444444380000 +076B:00000000100010000402020204483000 +076C:00000018201820000402020204483000 +076D:00000000040004000115155E48483000 +076E:00000000000000007E10284C4A5C221C +076F:00000000007E10284C4A5C405440221C +0770:00202028347800140115155E48483000 +0771:20202834780010400402020204483000 +0772:00001010141A3C007E1020404040221C +0773:28283020282808080808080000000000 +0774:2A2A3420282808080808080000000000 +0775:00000014141810101046484846423C00 +0776:00000015151A10101046484846423C00 +0777:0000000046484846423C000816101010 +0778:000050506040404C12121E0204483000 +0779:000054546840404C12121E0204483000 +077A:00000000005050604048541020407F00 +077B:00000000005454684048541020407F00 +077C:00000000000000007E10244B4848221C +077D:00000008161010100115155E48483000 +077E:00000000081422000115155E48483000 +077F:000028020A120A2242423C0000000000 +0780:00000000000004081060000000000000 +0781:000000000000121C1020C00000000000 +0782:0000000000002A342040800000000000 +0783:00000000000014081420C00000000000 +0784:00000000000028545438000000000000 +0785:0000000000001024381020C000000000 +0786:00000000000044485060000000000000 +0787:000000000000060A1222C20000000000 +0788:00000000000008141408106000000000 +0789:0000000000001C240810600000000000 +078A:00000000000408040804081060000000 +078B:0000000000000204021C20C000000000 +078C:0000000000000C122C4020C000000000 +078D:00000000000008103C08106000000000 +078E:00000000000000040810087000000000 +078F:0000000000002A342040403800000000 +0790:0000000000000000000000000000000030043FF8400000000000000000000000 +0791:00000000000018601860180600000000 +0792:00000000000028102840403800000000 +0793:00000000000028545438403800000000 +0794:00000000000000161A22C00000000000 +0795:00000000000408040804081260000000 +0796:00000000000004080438403800000000 +0797:0000000102040C122C4020C000000000 +0798:000000000004110C122C4020C0000000 +0799:00000000000004081064000000000000 +079A:00000000001004081060000000000000 +079B:0000000000080204021C20C000000000 +079C:0000000000080014081420C000000000 +079D:0000000000000000000000000080022030043FF8400000000000000000000000 +079E:0000000000000000000000000000000030043FF8400000800000000000000000 +079F:0000000000000000000000000000008030043FF8400000000000000000000000 +07A0:0000000000000C122C4028C000000000 +07A1:000000000004000C122C4020C0000000 +07A2:000000000000060A1222C20800000000 +07A3:00000000000400060A32C20000000000 +07A4:00000000000014000C10087000000000 +07A5:00000000000800081414081060000000 +07A6:00081020000000000000000000000000 +07A7:00122448000000000000000000000000 +07A8:00000000000000000000000000102040 +07A9:00000000000000000000000000122448 +07AA:00300810200000000000000000000000 +07AB:00661122440000000000000000000000 +07AC:00081020180000000000000000000000 +07AD:00224488660000000000000000000000 +07AE:00621428460000000000000000000000 +07AF:1C244840300000000000000000000000 +07B0:00182418000000000000000000000000 +07B1:00000000000010282810204038000000 +07B2:00007FFE73866DF66DEE6DDE73DE7FFE7FFE63866DF663866DBE63867FFE0000 +07B3:00007FFE73866DF66DEE6DDE73DE7FFE7FFE638E6DF663C66DF6638E7FFE0000 +07B4:00007FFE73866DF66DEE6DDE73DE7FFE7FFE63B66DB663866DF663F67FFE0000 +07B5:00007FFE73866DF66DEE6DDE73DE7FFE7FFE63866DBE63866DF663867FFE0000 +07B6:00007FFE73866DF66DEE6DDE73DE7FFE7FFE63CE6DBE638E6DB663CE7FFE0000 +07B7:00007FFE73866DF66DEE6DDE73DE7FFE7FFE63866DF663EE6DDE63DE7FFE0000 +07B8:00007FFE73866DF66DEE6DDE73DE7FFE7FFE63CE6DB663CE6DB663CE7FFE0000 +07B9:00007FFE73866DF66DEE6DDE73DE7FFE7FFE63CE6DB663C66DF663CE7FFE0000 +07BA:00007FFE73866DF66DEE6DDE73DE7FFE7FFE63866DB663866DB663B67FFE0000 +07BB:00007FFE73866DF66DEE6DDE73DE7FFE7FFE638E6DB6638E6DB6638E7FFE0000 +07BC:00007FFE73866DF66DEE6DDE73DE7FFE7FFE63C66DBE63BE6DBE63C67FFE0000 +07BD:00007FFE73866DF66DEE6DDE73DE7FFE7FFE638E6DB663B66DB6638E7FFE0000 +07BE:00007FFE73866DF66DEE6DDE73DE7FFE7FFE63866DBE638E6DBE63867FFE0000 +07BF:00007FFE73866DF66DEE6DDE73DE7FFE7FFE63866DBE638E6DBE63BE7FFE0000 +07C0:00000000182424424242422424180000 +07C1:000000001814121010101010107E0000 +07C2:000000002222223E2020202020200000 +07C3:000000000404040404043C04043C0000 +07C4:0000000004040404043C2020203C0000 +07C5:00000000202020203820202020200000 +07C6:00000000404040407C04040404040000 +07C7:00000000404040404244485060600000 +07C8:00000000404040407E44485060600000 +07C9:00000000384444443810101010100000 +07CA:00000000101010101010101010100000 +07CB:00000000000000001824424224180000 +07CC:00000000824428281010101010100000 +07CD:00000000000000000010282844440000 +07CE:000000000000000044444444447C0000 +07CF:00000000000000007C040404047C0000 +07D0:000000003844444438101010107C0000 +07D1:000000000010202018000000007E0000 +07D2:000000001028281E0A12020202020000 +07D3:000000003C20203C2020202020200000 +07D4:000000003C04043C0404040404040000 +07D5:00000000404040407844444444780000 +07D6:000000003E2020101008080404040000 +07D7:00000000182848080808080808080000 +07D8:00000000000000002C525252527E0000 +07D9:00000000080808083E08080808080000 +07DA:00000000242424247E242424243C0000 +07DB:00000000000000007E424242427E0000 +07DC:00000000000000007C44442828100000 +07DD:00000000040A0A0A0C78484848780000 +07DE:000000000424243C2424040404040000 +07DF:00000000304848483E08080808080000 +07E0:000000007C1010101010101010100000 +07E1:000000000000000010282844447C0000 +07E2:00000000701010384444381010100000 +07E3:000000003E2222020202020202020000 +07E4:0000000020203C242404040404040000 +07E5:000000003C0404043C242424243C0000 +07E6:00000000101010384444381010100000 +07E7:000000007C1010384444381010100000 +07E8:0000000000000000000000001070121C +07E9:00000000000000000000000010741A1C +07EA:000000000000000000000008083E0808 +07EB:00003C00000000000000000000000000 +07EC:122C4000000000000000000000000000 +07ED:00100000000000000000000000000000 +07EE:10284400000000000000000000000000 +07EF:08047E00000000000000000000000000 +07F0:48340200000000000000000000000000 +07F1:10207E00000000000000000000000000 +07F2:00000000000000000000000000000010 +07F3:00002400000000000000000000000000 +07F4:00000000003008081000000000000000 +07F5:00000000001020201800000000000000 +07F6:000000001C2222221E040810203E0000 +07F7:000000001C222A224155412A1C000000 +07F8:000000000000181800000000003C0000 +07F9:0000000000003C000018180018180000 +07FA:00000000000000000000000000FF0000 +07FB:00007FFE73866DF66DEE6DDE73DE7FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +07FC:00007FFE73866DF66DEE6DDE73DE7FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +07FD:00000000000000000000000000007E42 +07FE:00000000000000002C5252527E107C10 +07FF:0000000040F040407844444444780000 +0800:000000000000000000000008011002A0044008240828103010200C4000000000 +0801:0000000000000000000000000380044008200FE00010001000083FF800000000 +0802:000000000000000000000000003007C00440084000200010002000C000000000 +0803:00000000000000000000000003F8042008100FF0000800080010002000000000 +0804:000000000000000000000000003007C004C00940026004900520004000000000 +0805:000000000000000000000000004007A004900900030004E00010002000000000 +0806:000000000000000000000000038004401C6013901010101010201CC000000000 +0807:000000000000000000000000002007C004C0094032600C900510022000000000 +0808:000000000000000000000200040009F0111008A004A002400140008000000000 +0809:000000000000000000000000000000F003900490049009200920092000000000 +080A:0000000000000000000008080C081FF0001000100010021007900FF000000000 +080B:00000000000000000000008000800080030004000800081018301FF000000000 +080C:00000000000000000000000008881DD81FF82008000808101E103FF000000000 +080D:00000000040004000400080008000FF0001000100010021007900FF000000000 +080E:0000000000000000060009000A0019C00078009008A01F600100020007800000 +080F:00000000000000000000000000001FE008400440028001800080000000000000 +0810:00000000000000000000000000000FF0001000100010021007900FF000000000 +0811:000000000000000000000000000003F014901C90149005201920092000000000 +0812:000000000000000000000000080007E00610091000A000400180020001800000 +0813:00000000000000000000000003C0042008100FF0000800080010002000000000 +0814:00000000000000000000000008881DD81FF82004000000000000000000000000 +0815:00000000000000000000000001000280044008240828103010200C4000000000 +0816:00000010002000280012000C0000000000000000000000000000000000000000 +0817:000000100010001200140016000C000000000000000000000000000000000000 +0818:00000FFC00000000000000000000000000000000000000000000000000000000 +0819:0080004000200040008000000000000000000000000000000000000000000000 +081A:0000071008E00000000000000000000000000000000000000000000000000000 +081B:0000071008E00000000000000000000000000000000000000000000000000000 +081C:0000440044002800280010001000000000000000000000000000000000000000 +081D:0000440028001000000000000000000000000000000000000000000000000000 +081E:0000100010001000100010001000100010000000000000000000000000000000 +081F:0000100010001000100010000000000000000000000000000000000000000000 +0820:0000100010001000000000000000000000000000000000000000000000000000 +0821:00007F8000000000000000000000000000000000000000000000000000000000 +0822:00001F0000000000000000000000000000000000000000000000000000000000 +0823:00000E0000000000000000000000000000000000000000000000000000000000 +0824:0000008000800100010002000200000000000000000000000000000000000000 +0825:0000080008001000100020002000000000000000000000000000000000000000 +0826:0000100010002800280044004400000000000000000000000000000000000000 +0827:0000100028004400000000000000000000000000000000000000000000000000 +0828:0000008001000200010000800000000000000000000000000000000000000000 +0829:000003000C0030000C0003000000000000000000000000000000000000000000 +082A:0000020004000800040002000000000000000000000000000000000000000000 +082B:0000100010002800280044007C00000000000000000000000000000000000000 +082C:000000C00120012000C000000000000000000000000000000000000000000000 +082D:0000018001800000000000000000000000000000000000000000000000000000 +082E:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE61867DBE618E6FBE61867FFE0000 +082F:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE61867DBE618E6FBE61BE7FFE0000 +0830:0000000000000000000000000180018000000000000000000000000000000000 +0831:0000000000000000018001800000000000000000018001800000000000000000 +0832:0000000000000000000000000C600C6000000000000000000000000000000000 +0833:000000000000000000003F183018100008000400020002000400000000000000 +0834:000000000000000000003F183018100008000400021802180400000000000000 +0835:000000000000000000000240000003C004000400030000C00000000000000000 +0836:00000000003000300000008000400040008001000200060007E0000000000000 +0837:00000000000000000000007E006000207F900008000400040008000000000000 +0838:000000000000000000000000000000067FE60000000000000000000000000000 +0839:000000000000000000000006000600007FE00000000600060000000000000000 +083A:0000000000000000000000067FE600000000000000067FE60000000000000000 +083B:0000000000000000000004600460040004000400046004600000000000000000 +083C:0000000000000010002000400080010002000400080010002000000000000000 +083D:0000000000000010002000400080011802180400080011982198000000000000 +083E:0000000000000000000000000180024002400180000000000000000000000000 +083F:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE63867DBE718E7DBE63BE7FFE0000 +0840:0000000000000000000000000000038004400820082004400380000000000000 +0841:0000000000000000000000840104020403F8004000203FFE0000000000000000 +0842:000000000000000000600090016001000080004000303FFC0000000000000000 +0843:00000000000000000000001400240044007C000400043FF80000000000000000 +0844:000000000000000000000000000000000000005400543FF80000000000000000 +0845:0000000000000000000000100008000403FC0000000000000000000000000000 +0846:0000000000000000008000800080008000800080008000800000000000000000 +0847:0000000000000000000000000000000003E00410040803FC0000000000000000 +0848:00000000000000E001200140014000A03FF00000000000000000000000000000 +0849:0000000000000000000000800100020003F00000000000000000000000000000 +084A:0000000000000000004010800900090004E004200440048009000E0000000000 +084B:0000000000000000000400040004000400040004000401F80000000000000000 +084C:0000000000000000000000840104020403FC004400243FC40000000000000000 +084D:00000000000000000000104008200820042004400440048009000E0000000000 +084E:000000000000000000000000000000000018008400443FF80000000000000000 +084F:0000000000000000000000400080010001F8000400043FF80000000000000000 +0850:000000000000000000C01120096008A0042004400440048009000E0000000000 +0851:0000000000000000002A102A083E0820042004400440048009000E0000000000 +0852:0000000000000000000000840104020403FC004400243FF80000000000000000 +0853:0000000000000000000000840104020403FC000400043FF80000000000000000 +0854:000000000000000000000C18122412240D580140014000800080000000000000 +0855:000000000000000000000084007C002400240FC4000000000000000000000000 +0856:000000000000000000000210042008400FF00000000000000000000000000000 +0857:00000000000000000008111020A020A01F9C008400880090012001C000000000 +0858:0000000000000000008001000200020001C002000200020001C0000000000000 +0859:0000000000000000000000000000000000000000000000000000024002400000 +085A:000000000000000000000000000000000000000000000000000003E000000000 +085B:0000000000000000000000000000000000000000000000000000008000800000 +085C:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE61C66FBE61BE7DBE61C67FFE0000 +085D:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE618E6FB661B67DB6618E7FFE0000 +085E:0000000000000180066008100990124812480990081006600180000000000000 +085F:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE61866FBE618E7DBE61BE7FFE0000 +0860:000000000000000003C004200A100610001000E00020201010100FF000000000 +0861:00000000000000001EF029082908100800081F082088407040003FF800240018 +0862:0000000000000000180026002984106A001201AC024021A010100FF000000000 +0863:0000000000000000400020001000080004000200010E00840044003800000000 +0864:000000000000000003C004200A10061000D0012000E0201010100FF000000000 +0865:000000000000000007C0082008100410001000E00020201010100FF000000000 +0866:000000000000000007F01808200803F00400040003F00008080807F000000000 +0867:0000000000000000000001000080004000400040008001000600180000000000 +0868:00000000000000000C00120022002400280030002018212421241EF800000000 +0869:00000000000000002000100008000800080008000830084808480FF800400180 +086A:0000000000000000003004480848105010201050109009080A0807F000000000 +086B:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE738E6FB6638E6DB6738E7FFE0000 +086C:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73C66FBE63BE6DBE73C67FFE0000 +086D:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE738E6FB663B66DB6738E7FFE0000 +086E:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73866FBE638E6DBE73867FFE0000 +086F:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73866FBE638E6DBE73BE7FFE0000 +0870:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE61CE7DB67BB677B677CE7FFE0000 +0871:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE61EE7DCE7BEE77EE77C67FFE0000 +0872:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE61867DF67B8677BE77867FFE0000 +0873:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE618E7DF67BC677F6778E7FFE0000 +0874:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE61B67DB67B8677F677F67FFE0000 +0875:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE61867DBE7B8677F677867FFE0000 +0876:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE61CE7DBE7B8E77B677CE7FFE0000 +0877:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE61867DF67BEE77DE77DE7FFE0000 +0878:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE61CE7DB67BCE77B677CE7FFE0000 +0879:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE61CE7DB67BC677F677CE7FFE0000 +087A:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE61867DB67B8677B677B67FFE0000 +087B:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE618E7DB67B8E77B6778E7FFE0000 +087C:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE61C67DBE7BBE77BE77C67FFE0000 +087D:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE618E7DB67BB677B6778E7FFE0000 +087E:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE61867DBE7B8E77BE77867FFE0000 +087F:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE61867DBE7B8E77BE77BE7FFE0000 +0880:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73CE6DB673B66DB673CE7FFE0000 +0881:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73EE6DCE73EE6DEE73C67FFE0000 +0882:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73866DF673866DBE73867FFE0000 +0883:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE738E6DF673C66DF6738E7FFE0000 +0884:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73B66DB673866DF673F67FFE0000 +0885:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73866DBE73866DF673867FFE0000 +0886:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73CE6DBE738E6DB673CE7FFE0000 +0887:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73866DF673EE6DDE73DE7FFE0000 +0888:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73CE6DB673CE6DB673CE7FFE0000 +0889:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73CE6DB673C66DF673CE7FFE0000 +088A:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73866DB673866DB673B67FFE0000 +088B:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE738E6DB6738E6DB6738E7FFE0000 +088C:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73C66DBE73BE6DBE73C67FFE0000 +088D:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE738E6DB673B66DB6738E7FFE0000 +088E:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73866DBE738E6DBE73867FFE0000 +088F:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73866DBE738E6DBE73BE7FFE0000 +0890:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73CE6DB671B67DB673CE7FFE0000 +0891:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73EE6DCE71EE7DEE73C67FFE0000 +0892:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73866DF671867DBE73867FFE0000 +0893:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE738E6DF671C67DF6738E7FFE0000 +0894:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73B66DB671867DF673F67FFE0000 +0895:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73866DBE71867DF673867FFE0000 +0896:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73CE6DBE718E7DB673CE7FFE0000 +0897:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73866DF671EE7DDE73DE7FFE0000 +0898:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73CE6DB671CE7DB673CE7FFE0000 +0899:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73CE6DB671C67DF673CE7FFE0000 +089A:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73866DB671867DB673B67FFE0000 +089B:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE738E6DB6718E7DB6738E7FFE0000 +089C:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73C66DBE71BE7DBE73C67FFE0000 +089D:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE738E6DB671B67DB6738E7FFE0000 +089E:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73866DBE718E7DBE73867FFE0000 +089F:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE73866DBE718E7DBE73BE7FFE0000 +08A0:000000000000000422423C0022140800 +08A1:00000C100C10000422423C0010000000 +08A2:00000000000820007E1020404840221C +08A3:000000202228202C32227C0000000000 +08A4:0010002800060A0642423C0010000000 +08A5:000000002400001C120A264244380010 +08A6:00000004041F041F0424444448380000 +08A7:00000000080014001C061E2020202020 +08A8:0000000018201820044A4844423C0028 +08A9:0000000000001000044A4844423C0028 +08AA:00000000000000000402020234483402 +08AB:000000000000000C12120E2204483000 +08AC:000000000000000000000814146E404A +08AD:00000000000000000000080808080800 +08AE:000000000000080402427C0028001000 +08AF:000000000000000006194E4830042008 +08B0:00000810244850403C827E0000000000 +08B1:000000000000000814141E0404040400 +08B2:00001028440010000402020204483000 +08B3:0000000000001824201C20544048423C +08B4:000000020A120A2242423C0000080000 +08B5:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE63866DBE63866DF663867FFE0000 +08B6:000018041C10100422423C0000080000 +08B7:000018041C10100422423C0024000800 +08B8:00000000140000229D413E0000000000 +08B9:00200008044448300402020204483000 +08BA:0020000804444830044A4844423C0028 +08BB:0000000000060A06423C000000000000 +08BC:0000000000060A0642423C0000000000 +08BD:00000000000000000422424244380000 +08BE:000000442810000422423C0014000800 +08BF:004428100014000422423C0000000000 +08C0:221448405068F00422423C0000000000 +08C1:00000000442810007E2040544048221C +08C2:00885024081020403C827E0000000000 +08C3:001000240008001824201C204040423C +08C4:000010002400001C120A264244380000 +08C5:00000010002400007E1020404840221C +08C6:000000000000007E204840544048221C +08C7:4040506AF202020202224242443C0000 +08C8:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE71CE6FB66FCE6FB671CE7FFE0000 +08C9:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE71CE6FB66FC66FF671CE7FFE0000 +08CA:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE71866FB66F866FB671B67FFE0000 +08CB:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE718E6FB66F8E6FB6718E7FFE0000 +08CC:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE71C66FBE6FBE6FBE71C67FFE0000 +08CD:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE718E6FB66FB66FB6718E7FFE0000 +08CE:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE71866FBE6F8E6FBE71867FFE0000 +08CF:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +08D0:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE63CE6DB66DB66DB663CE7FFE0000 +08D1:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE63EE6DCE6DEE6DEE63C67FFE0000 +08D2:00007FFE73CE6DB66DCE6DB673CE7FFE7FFE63866DF66D866DBE63867FFE0000 +08D3:0000000000000000000000040A0E021C +08D4:216B87A7839364000000000000000000 +08D5:0000000006194E502000000000000000 +08D6:00102820182044380000000000000000 +08D7:0024000C0A4638000000000000000000 +08D8:00200008244832040000000000000000 +08D9:00000000000000000000002008244932 +08DA:020A0B2A6D6A010A154A2EB24000000000000000000000000000000000000000 +08DB:A80508054A05A955566901800000000000000000000000000000000000000000 +08DC:0005481514C58B5575E900000000000000000000000000000000000000000000 +08DD:00C0030094004A00010249AAB6D4000000000000000000000000000000000000 +08DE:0010004000100228009811480FB0000000000000000000000000000000000000 +08DF:00400100284042A4056A22265DC2001C00000000000000000000000000000000 +08E0:0020523C000000000000000000000000 +08E1:00020515EE0000000000000000000000 +08E2:08142222414936000000000000000000 +08E3:0000000000000000000000034C304830 +08E4:0004020C100800000000000000000000 +08E5:0C0E4830000000000000000000000000 +08E6:000000000000000000000004020C1008 +08E7:00221166884400000000000000000000 +08E8:1C22225522221C000000000000000000 +08E9:00000000000000000000002211668844 +08EA:00001000000000000000000000000000 +08EB:00000420000000000000000000000000 +08EC:001A241A000000000000000000000000 +08ED:00000000000000000000000000000010 +08EE:00000000000000000000000000001040 +08EF:00000000000000000000000000344834 +08F0:06180018600000000000000000000000 +08F1:66772244880000000000000000000000 +08F2:00000000000000000000000618001860 +08F3:00040A0E021C00000000000000000000 +08F4:00344854245800000000000000000000 +08F5:200C3000000000000000000000000000 +08F6:000000000000000000000000000C3004 +08F7:20402000000000000000000000000000 +08F8:10081000000000000000000000000000 +08F9:00000000000000000000000000102010 +08FA:00000000000000000000000000100810 +08FB:48244800000000000000000000000000 +08FC:24922400000000000000000000000000 +08FD:08240800000000000000000000000000 +08FE:0C2E0810200000000000000000000000 +08FF:001C0202041800000000000000000000 +0900:01C0022004800000000000000000000000000000000000000000000000000000 +0901:0480022001C00000000000000000000000000000000000000000000000000000 +0902:0180018000000000000000000000000000000000000000000000000000000000 +0903:0000000000000000000000000003000300000000000000030003000000000000 +0904:010000FC000201CF02220012001200620412041E0212022201C2000000000000 +0905:00000000000001CF02220012001200620412041E0212022201C2000000000000 +0906:0000000000000E7F1114009400940314209420F4109411140E14000000000000 +0907:0000000000003FFF004003C00400040003C000200010019001E0004000200010 +0908:00E0011000803FFF004003C00400040003C000200010019001E0004000200010 +0909:0000000000001FFF0010000804080430020802080108011000E0000000000000 +090A:0000000000003FFF00400020102010CC08320822042204420384000000000000 +090B:0000000000007FFF00801E9821F806901888009000A000A40098000000000000 +090C:000000000000FFFF002000201C70228821082010102008200018000000000000 +090D:011000E000001FFF021002100210021002100100008000400020002000000000 +090E:040003E000101FFF021002100210021002100100008000400020002000000000 +090F:0000000000001FFF021002100210021002100100008000400020002000000000 +0910:07C0002000101FFF021002100210021002100100008000400020002000000000 +0911:011000E000000E7F1114009400940314209420F4109411140E14000000000000 +0912:080007F800040E7F1114009400940314209420F4109411140E14000000000000 +0913:07F0000800040E7F1114009400940314209420F4109411140E14000000000000 +0914:01F8000400FC0E3F1114009400940314209420F4109411140E14000000000000 +0915:000000000000FFFF008000800EB011C811880E88009000800080000000000000 +0916:000000000000FFFF0810081009D01A301A3011D00810043003D0000000000000 +0917:000000000000FFFF0210021002100A1006100210001000100010000000000000 +0918:000000000000FFFF08080608018802080408041803E800080008000000000000 +0919:000000000000FFFF008003800400041813981040084008400780000000000000 +091A:000000000000FFFF000800080FF8021802680188000800080008000000000000 +091B:000000000000FFFF004006600890085006200830084804480388001000000000 +091C:000000000000FFFF000800080878084804480388000800080008000000000000 +091D:000000000000FFFF010807080808080807F8010801080E080C08020001000000 +091E:000000000000FFFF0008000803C8132810280838082804480388000000000000 +091F:000000000000FFFF0080008003800400080008000808041003E0000000000000 +0920:000000000000FFFF0080008003E00410080808080808041003E0000000000000 +0921:000000000000FFFF002000E00100010004E004100210021001E0000000000000 +0922:000000000000FFFF0080008003800400086008900890045003E0000000000000 +0923:000000000000FFFF049004900490049003100010001000100010000000000000 +0924:000000000000FFFF0010001003F0041008100810081004100210000000000000 +0925:0000000000000C3F120811080908010802080C18082804480388000000000000 +0926:000000000000FFFF0080008003800400080008000830043003E0001000080000 +0927:0000000000000CFF1208140808080C0807080808081807E80008000000000000 +0928:000000000000FFFF0008000803F8060806080008000800080008000000000000 +0929:000000000000FFFF0008000803F80608060800080008000800C800C000000000 +092A:000000000000FFFF081008100810083004500390001000100010000000000000 +092B:000000000000FFFF104010401040107008C80748004800480050000000000000 +092C:000000000000FFFF0010001007D00C300A300950079000100010000000000000 +092D:0000000000000C7F12080E080208020807F80608000800080008000000000000 +092E:000000000000FFFF04100410041004100FF00C10001000100010000000000000 +092F:000000000000FFFF0210021002100C100810083007D000100010000000000000 +0930:000000000000FFFF020002000200060006000100008000400000000000000000 +0931:000000000000FFFF020002000200060006000100008000400600060000000000 +0932:000000000000FFFF000800080638094808880808040803080008000000000000 +0933:000000000000FFFF002000200C70128810881108128812480C30000000000000 +0934:000000000000FFFF002000200C70128810881108128812480C30018001800000 +0935:000000000000FFFF0010001007D0083008300850079000100010000000000000 +0936:000000000000FFFF0610091009100710011001100E100D100090000000000000 +0937:000000000000FFFF0C100A10091008B004500390001000100010000000000000 +0938:000000000000FFFF04100410041004100FF00C10041002100110000000000000 +0939:0000000000003FFF004003C00400040003800440044002000100008000000000 +093A:0080008000000000000000000000000000000000000000000000000000000000 +093B:000000020002000F000200020002000200020002000200020002000000000000 +093C:0000000000000000000000000000000000000000000000000000000001800180 +093D:00000000000003F004000400030000C00020002010200C400380000000000000 +093E:000000000000000F000200020002000200020002000200020002000000000000 +093F:3FC040204000F000400040004000400040004000400040004000000000000000 +0940:03FC04020002000F000200020002000200020002000200020002000000000000 +0941:00000000000000000000000000000000000000000000000000000410021001E0 +0942:000000000000000000000000000000000000000000000000000001E002100410 +0943:0000000000000000000000000000000000000000000000000000007000800070 +0944:0000000000000000000000000000000000000000000000C00100017000800078 +0945:0400022001C00000000000000000000000000000000000000000000000000000 +0946:10000F0000800080000000000000000000000000000000000000000000000000 +0947:1E00010000800000000000000000000000000000000000000000000000000000 +0948:07801F4000C00000000000000000000000000000000000000000000000000000 +0949:001100090006000F000200020002000200020002000200020002000000000000 +094A:010000FC0002000F000200020002000200020002000200020002000000000000 +094B:01F800040002000F000200020002000200020002000200020002000000000000 +094C:007C01FA0006000F000200020002000200020002000200020002000000000000 +094D:0000000000000000000000000000000000000000000000000000006000100008 +094E:000000000000F000800080008000800080008000800080008000000000000000 +094F:027C01FA0006000F000200020002000200020002000200020002000000000000 +0950:0000001800181C42223C01000100060C41124192216C22001C00000000000000 +0951:0180018000800000000000000000000000000000000000000000000000000000 +0952:0000000000000000000000000000000000000000000000000000000007E00000 +0953:0200010000800000000000000000000000000000000000000000000000000000 +0954:0040008001000000000000000000000000000000000000000000000000000000 +0955:0240018003C00000000000000000000000000000000000000000000000000000 +0956:00000000000000000000000000000000000000000000000000000810042003C0 +0957:00000000000000000000000000000000000000000000000000001248099007E0 +0958:000000000000FFFF008000800EB011C811880E8800900C800C80000000000000 +0959:000000000000FFFF0810081009D01A301A3011D00810043003D0000003000300 +095A:000000000000FFFF0210021002100A1006100210001000100190018000000000 +095B:000000000000FFFF000800080878084804480388000800080188018000000000 +095C:000000000000FFFF002000E00100010004E004100210021001E0000000C000C0 +095D:000000000000FFFF0080008003800400086008900890045003E0000001800180 +095E:000000000000FFFF104010401040107008C80748004806480650000000000000 +095F:000000000000FFFF0210021002100C100810083007D000100310030000000000 +0960:0000000000007FFF00801E8C21FC0688189800A0009800A2009C000000000000 +0961:000000000000FFFF002000201C70228821082030104008300044003800000000 +0962:00000000000000000000000000000000000000000000000000000EE011200818 +0963:0000000000000000000000000000000000000000000000080C7012941118080E +0964:0000000000000000008000800080008000800080008000800080000000000000 +0965:0000000000000000024002400240024002400240024002400240000000000000 +0966:000000000000000003C0042008100810081008100810042003C0000000000000 +0967:000000000000000001C002200220014000800100020001000080004000000000 +0968:000000000000000003C00420001000100010032003C001000080004000200000 +0969:000000000000000003C004200020002001C000200020062007C0010000800000 +096A:0000000000000000101008200440028001000280044004400380000000000000 +096B:00000000000000000800080008C008C007800040004000200020001000100000 +096C:000000000000000003C0042004000400038004000400046003E0008001000000 +096D:000000000000000000E001100910093008D004100410022001C0000000000000 +096E:00000000000000000040008001000200040008000810042003C0000000000000 +096F:0000000000000000018002400240038001000080004000200010000000000000 +0970:000000000000000001C00220022001C000000000000000000000000000000000 +0971:0000000000000180018000000000000000000000000000000000000000000000 +0972:00420022001C01CF02220012001200620412041E0212022201C2000000000000 +0973:00000002000201CF02220012001200620412041E0212022201C2000000000000 +0974:000000020002073F088A004A004A018A104A107A084A088A070A000000000000 +0975:0120009C0072070F088A004A004A018A104A107A084A088A070A000000000000 +0976:00000000000001CF02220012001200620412041E0212022201C2000000840078 +0977:00000000000001CF02220012001200620412041E0212022201C20090026401F8 +0978:000000000000FFFF0400040004000FC00C200020002000400080000000000000 +0979:000000000000FFFF000800080878084804480388000818681868030003000000 +097A:000000000000FFFF0210021003100C900850083007D000100010000000000000 +097B:000000000000FFFF0210021002100A1006100210001000100FF0000000000000 +097C:000000000000FFFF000800080878084804480388000800080FF8000000000000 +097D:00000000000003E00410080800080008001000E0008000800080000000000000 +097E:000000000000FFFF002000E00100010004E00410021001E007F8000000000000 +097F:000000000000FFFF0010001007D00C300A300950079000100FF0000000000000 +0980:0000000000000380044008200920062000200020002000200020002400180000 +0981:0080022001C00000000000000000000000000000000000000000000000000000 +0982:0000000000000000000000020005000500020000000400020001000100000000 +0983:0000000000000000000000020005000500020000000200050005000200000000 +0984:00007FFE73CE6DB66DC66DF673CE7FFE7FFE73B66DB673866DF673F67FFE0000 +0985:0000000000003FFF000811881248122810280828082804580388000000000000 +0986:0000000000003FFF000A118A124A122A102A082A082A045A038A000000000000 +0987:020001F000083FFF000003C004200410001000600780030000C0003000000000 +0988:020001F000083FFF00000618092008E0014002400C4000200018000000000000 +0989:020001F000083FFF0040004008580868080804080408021001E0000000000000 +098A:020001F000083FFF004000400A580A680A080908050804F003E0000000000000 +098B:000000000000002F102824281A6801A80E6830380E2801A80068000000000000 +098C:00000000000003000400020001C0002007100890085004500060008000000000 +098D:00007FFE73CE6DB66DC66DF673CE7FFE7FFE738E6DB673B66DB6738E7FFE0000 +098E:00007FFE73CE6DB66DC66DF673CE7FFE7FFE73866DBE738E6DBE73867FFE0000 +098F:00000000000000E001100210121011101010101010D009300610000000000000 +0990:020001F0000800E401140214121811101010101010D009300610000000000000 +0991:00007FFE73CE6DB66DC66DF673CE7FFE7FFE73EE6DCE71EE7DEE73C67FFE0000 +0992:00007FFE73CE6DB66DC66DF673CE7FFE7FFE73866DF671867DBE73867FFE0000 +0993:00000000000000600090040804080430020802080108011000E0000000000000 +0994:000001E00010018802481028102810C808300820042004400380000000000000 +0995:000000000000FFFF00E0015002480C4810480C500240014000C0000000000000 +0996:000000000000088F074800480048018806080F0800C800280018000000000000 +0997:00000000000003CF042808180F08008800880108060800080008000000000000 +0998:000000000000FFFF0408080808080608010806080C0803E80018000000000000 +0999:00000000000004600490029001E01100113008E80808041003E0000000000000 +099A:000000000000FFFF08000C000C000B0008E00810082008C00F00000000000000 +099B:000000000000FFFF08000E0009C00920062000400F80060001C0003000000000 +099C:000000000000FFFF018011401120111808C80850085004500388000000000000 +099D:000000000000FFEF006800A80128062818280628012800B80068000000000000 +099E:0000000000000300048008B008C804880090108810C809B00680000000000000 +099F:020001F00008FFFF040004000400040004300430042004C00700000000000000 +09A0:018002000100FFFF00C000A001100910161010101010082007C0000000000000 +09A1:000000000000FFFF0040004008580868080804080408021001E0000000000000 +09A2:000000000000FFFF040004000400040004300430042004C00700000000000000 +09A3:000000000000000F03C8042808180E0806080008000800080008000000000000 +09A4:000000000000FFFF000008E009100908080804080408021001E0000000000000 +09A5:000000000000078F084808480048018806080F0800C800280018000000000000 +09A6:000000000000FFFF08000800083008D00B100C20002000200010000000000000 +09A7:000000000000020F041804680388060818080608018800680018000000000000 +09A8:000000000000FFFF00080008000803C8042808180E0806080008000000000000 +09A9:00007FFE73CE6DB66DC66DF673CE7FFE7FFE61CE6DB661C66DF66DCE7FFE0000 +09AA:00000000000007CF082818180418026807880008000800080008000000000000 +09AB:000000000000FFFF080004100228012802200C20182007A00060000000000000 +09AC:000000000000FFFF001800680188060818080608018800680018000000000000 +09AD:000000000000FFFF000001800B900A2809C804080408021001E0000000000000 +09AE:000000000000FFFF00080C080208010801080308058802680018000000000000 +09AF:000000000000FFFF080804080208010802080C08038800680018000000000000 +09B0:000000000000FFFF001800680188060818080608018800680318030000000000 +09B1:00007FFE73CE6DB66DC66DF673CE7FFE7FFE63EE6DCE63EE6DEE63C67FFE0000 +09B2:000000000000FFFF000800080638094808880808080806080008000000000000 +09B3:00007FFE73CE6DB66DC66DF673CE7FFE7FFE638E6DF663C66DF6638E7FFE0000 +09B4:00007FFE73CE6DB66DC66DF673CE7FFE7FFE63B66DB663866DF663F67FFE0000 +09B5:00007FFE73CE6DB66DC66DF673CE7FFE7FFE63866DBE63866DF663867FFE0000 +09B6:000000000000F06F0A9805080D880D8800080008000800080008000000000000 +09B7:000000000000FFFF080804080208018802680C18038800680018000000000000 +09B8:000000000000FFFF06080908008800B800480888070800080008000000000000 +09B9:000000000000FFFF000007C00E200610001000600780030000C0003000000000 +09BA:00007FFE73CE6DB66DC66DF673CE7FFE7FFE63866DB663866DB663B67FFE0000 +09BB:00007FFE73CE6DB66DC66DF673CE7FFE7FFE638E6DB6638E6DB6638E7FFE0000 +09BC:0000000000000000000000000000000000000000000000000000018001800000 +09BD:0000000000000C0003C0032003100010001000600780030000C0003000000000 +09BE:000000000000000B000600020002000200020002000200020002000000000000 +09BF:3FF040084000E000400040004000400040004000400040004000000000000000 +09C0:0FFC10020FFA0007000200020002000200020002000200020002000000000000 +09C1:000000000000000000000000000000000000000000000000000800E8011000E8 +09C2:00000000000000000000000000000000000000000000000000000060008C0073 +09C3:0000000000000000000000000000000000000000000000000004000800100008 +09C4:0000000000000000000000000000000100020004000200010004000800100008 +09C5:00007FFE73CE6DB66DC66DF673CE7FFE7FFE71866FBE6F866FF671867FFE0000 +09C6:00007FFE73CE6DB66DC66DF673CE7FFE7FFE71CE6FBE6F8E6FB671CE7FFE0000 +09C7:000000000000F0002000400040008000800080008000E0006000000000000000 +09C8:800060001000F0002000400040008000800080008000E0006000000000000000 +09C9:00007FFE73CE6DB66DC66DF673CE7FFE7FFE71CE6FB66FC66FF671CE7FFE0000 +09CA:00007FFE73CE6DB66DC66DF673CE7FFE7FFE71866FB66F866FB671B67FFE0000 +09CB:000000000000F00B2006400240028002800280028002E0026002000000000000 +09CC:010000FC0002F00B2006400240028002800280028002E0026002000000000000 +09CD:0000000000000000000000000000000000000000000000000000006000100008 +09CE:000000000000000000000380044005800400030000E000100010000000000000 +09CF:00007FFE73CE6DB66DC66DF673CE7FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +09D0:00007FFE73CE6DB66DC66DF673CE7FFE7FFE63CE6DB66DB66DB663CE7FFE0000 +09D1:00007FFE73CE6DB66DC66DF673CE7FFE7FFE63EE6DCE6DEE6DEE63C67FFE0000 +09D2:00007FFE73CE6DB66DC66DF673CE7FFE7FFE63866DF66D866DBE63867FFE0000 +09D3:00007FFE73CE6DB66DC66DF673CE7FFE7FFE638E6DF66DC66DF6638E7FFE0000 +09D4:00007FFE73CE6DB66DC66DF673CE7FFE7FFE63B66DB66D866DF663F67FFE0000 +09D5:00007FFE73CE6DB66DC66DF673CE7FFE7FFE63866DBE6D866DF663867FFE0000 +09D6:00007FFE73CE6DB66DC66DF673CE7FFE7FFE63CE6DBE6D8E6DB663CE7FFE0000 +09D7:010000FC0002000B000600020002000200020002000200020002000000000000 +09D8:00007FFE73CE6DB66DC66DF673CE7FFE7FFE63CE6DB66DCE6DB663CE7FFE0000 +09D9:00007FFE73CE6DB66DC66DF673CE7FFE7FFE63CE6DB66DC66DF663CE7FFE0000 +09DA:00007FFE73CE6DB66DC66DF673CE7FFE7FFE63866DB66D866DB663B67FFE0000 +09DB:00007FFE73CE6DB66DC66DF673CE7FFE7FFE638E6DB66D8E6DB6638E7FFE0000 +09DC:000000000000FFFF0040004008580868080804080408021001E0000000C000C0 +09DD:000000000000FFFF040004000400040004300430042004C00700006000600000 +09DE:00007FFE73CE6DB66DC66DF673CE7FFE7FFE63866DBE6D8E6DBE63867FFE0000 +09DF:000000000000FFFF080804080208010802080C08038800680318030000000000 +09E0:000000000000002F102824281A6801A806681838062801A80268040002000100 +09E1:00000000000003000400020001C0002007100890085004600090000800680098 +09E2:000000000000000000000000000000000000000000000000000800040034004C +09E3:000000000000000000000000000000060001000300050000000800040034004C +09E4:00007FFE73CE6DB66DC66DF673CE7FFE7FFE61B66FB663866FF661F67FFE0000 +09E5:00007FFE73CE6DB66DC66DF673CE7FFE7FFE61866FBE63866FF661867FFE0000 +09E6:000000000000000003C0042008100810081008100810042003C0000000000000 +09E7:0000000000000000080006000180006000100008000806700780000000000000 +09E8:0000000000000000030000C000200010001000600780030000C0002000100000 +09E9:000000000000000000E01110120812C811C808080808041003E0000000000000 +09EA:000000000000000003C004200420042003C0042008100810042003C000000000 +09EB:00000000000000000300048008400880088008800850042003C0000000000000 +09EC:00000000000000000040004008400858086804080408021001E0000000000000 +09ED:000000000000000007C008200820086007A00020002000200020000000000000 +09EE:00000000000000000800080008100BE00C800880088009000600000000000000 +09EF:000000000000020004000400020001C000200710089008500460000000000000 +09F0:000000000000FFFF00180068018806C818280618018800680018000000000000 +09F1:000000000000FFFF00180068018806081808060801880C680218010000000000 +09F2:0000000000000000000000000600018000400020001000000000000000000000 +09F3:00000000000006000900010003F00100016001500110012000C0000000000000 +09F4:0000000000000000000000000000001000200040018006000000000000000000 +09F5:00000000000000000000000000000000070808900CA001400380000000000000 +09F6:000000000000000800080F080C880090009001100E2008400780000000000000 +09F7:0000000000000000008000800080008000800080008000800080000000000000 +09F8:00000000000008000800081008300850089009100A100C100810001000080000 +09F9:00000000000000000000000001C00220041004100410022001C0000000000000 +09FA:0000000000000000000000080008000809900990042003C00000000000000000 +09FB:0000000000000000000000000180020002000100008000400020000000000000 +09FC:0000000000000000000000000010019001A00820044003800020001000080000 +09FD:0000000000000000000000000180024002400180000000000000000000000000 +09FE:0300008003C00020000000000000000000000000000000000000000000000000 +09FF:00007FFE73CE6DB66DC66DF673CE7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +0A00:00007FFE73866DB66D866DB673B67FFE7FFE73CE6DB66DB66DB673CE7FFE0000 +0A01:02A0022001C00000000000000000000000000000000000000000000000000000 +0A02:0180018000000000000000000000000000000000000000000000000000000000 +0A03:0000000000000000000000000002000500020000000200050002000000000000 +0A04:00007FFE73866DB66D866DB673B67FFE7FFE73B66DB66D866DF673F67FFE0000 +0A05:0000000000000000C00720041304149C386430C420C400840004000000000000 +0A06:0000000000000000C03F20241024166439A03320232002200020000000000000 +0A07:3C00420042004000FFFF44044404420441FC42004400420441F8000000000000 +0A08:0078008400840004FFFE4044404420441FC42004400420441F84000000000000 +0A09:07C0082010102008FFFF2008200820103FE010100810042003C00000081007E0 +0A0A:07C0082010102008FFFF200820103FE010100810042003C0081007E0081007E0 +0A0B:00007FFE73866DB66D866DB673B67FFE7FFE738E6DB66D8E6DB6738E7FFE0000 +0A0C:00007FFE73866DB66D866DB673B67FFE7FFE73C66DBE6DBE6DBE73C67FFE0000 +0A0D:00007FFE73866DB66D866DB673B67FFE7FFE738E6DB66DB66DB6738E7FFE0000 +0A0E:00007FFE73866DB66D866DB673B67FFE7FFE73866DBE6D8E6DBE73867FFE0000 +0A0F:00C0002000100010FFFF10101010081007F008001000080007F0000000000000 +0A10:00F0000800F4000CC01F20041304149C386430C420C400840004000400000000 +0A11:00007FFE73866DB66D866DB673B67FFE7FFE7BEE73CE7BEE7BEE71C67FFE0000 +0A12:00007FFE73866DB66D866DB673B67FFE7FFE7B8673F67B867BBE71867FFE0000 +0A13:07F0080010002000FFFF2008200820103FE010100810042003C0000000000000 +0A14:020001F000480048C01F20041304149C386430C420C400840004000400000000 +0A15:0000000000000000FFFF001000100F1010A020602060209011100E1000000000 +0A16:0000000000000000F01F101008100FF01010201010300FD00010001000000000 +0A17:0000000000000000FFFF0090009000901F902090209010900910061000000000 +0A18:0000000000000000F11F1110091009101110211011300ED00010000000000000 +0A19:0000000000000000FFFF100010001FC0002003A0044004A00310000000000000 +0A1A:0000000000000000FFFF0020002018201FE008200820042003C0000000000000 +0A1B:0000000000000000FFFF001000101FF020001FF0210821081FF0000000000000 +0A1C:0000000000000000FFFF0010001018101FF00810081008100810000000000000 +0A1D:0000000000000000FFFF0C3002400FE01010260807F001000080004000000000 +0A1E:0000000000000000FFFF201020101FF0200020001FF0040003F0000000000000 +0A1F:0000000000000000FFFF0040004001C0020004000800041003E0000000000000 +0A20:0000000000000000FFFF0100010002800440082010101010082007C000000000 +0A21:0000000000000000FFFF0008000803F0001000101F08208810700FC000000000 +0A22:0000000000000000FFFF0010001018101FF00800080009E00A10042003C00000 +0A23:0000000000000000FFFF010000C000600F5010C020001010082007C000000000 +0A24:0000000000000000FFFF0010001007A007E00030201030100C2003C000000000 +0A25:0000000000000000FFFF101008100FF0101030100C3003D00010001000000000 +0A26:0000000000000000FFFF0020002030203FE0100010000800041003E000000000 +0A27:0000000000000000FFFF08100410041008101010081006700190001000000000 +0A28:0000000000000000FFFF01000100028004400820101010100820000000000000 +0A29:00007FFE73866DB66D866DB673B67FFE7FFE61CE7DB661C66FF661CE7FFE0000 +0A2A:0000000000000000F81F08100410041008101010081006700190001000000000 +0A2B:0000000000000000FFFF001000101FF02000200021E012100C2003C000000000 +0A2C:0000000000000000FFFF0810041007F008101010081006700190001000000000 +0A2D:0000000000000000FFFF0010001003D0043003C800081010082007C000000000 +0A2E:0000000000000000F01F0810081008100FF01810181000100190019000000000 +0A2F:0000000000000000FFFF08100410041008F01090089004900390001000000000 +0A30:0000000000000000FFFF0010001007F00810081008100410021001E000000000 +0A31:00007FFE73866DB66D866DB673B67FFE7FFE63EE7DCE71EE7DEE63C67FFE0000 +0A32:0000000000000000FFFF0820082004400AA01110101008200440000000000000 +0A33:0000000000000000FFFF0820082004400AA0111010100820044C000C00000000 +0A34:00007FFE73866DB66D866DB673B67FFE7FFE63B67DB671867DF663F67FFE0000 +0A35:0000000000000000FFFF001000101FF0200030000FF0040003E0000000000000 +0A36:0000000000000000FFFF0810081008100FF01810181000100190019000000000 +0A37:00007FFE73866DB66D866DB673B67FFE7FFE63867DF671EE7DDE63DE7FFE0000 +0A38:0000000000000000FFFF0810081008100FF01810181000100010001000000000 +0A39:0000000000000000FFFF0010001007100810081008100410021001E000000000 +0A3A:00007FFE73866DB66D866DB673B67FFE7FFE63867DB671867DB663B67FFE0000 +0A3B:00007FFE73866DB66D866DB673B67FFE7FFE638E7DB6718E7DB6638E7FFE0000 +0A3C:0000000000000000000000000000000000000000000000000000000001800180 +0A3D:00007FFE73866DB66D866DB673B67FFE7FFE638E7DB671B67DB6638E7FFE0000 +0A3E:0000000000000000001F00040004000400040004000000000000000000000000 +0A3F:7800840084008400E00080008000800080008000800080008000800080000000 +0A40:0078008400840084001F00040004000400040004000400040004000400040000 +0A41:0000000000000000000000000000000000000000000000000000082007C00000 +0A42:000000000000000000000000000000000000000000000000082007C0082007C0 +0A43:00007FFE73866DB66D866DB673B67FFE7FFE6D8E6DF661C67DF67D8E7FFE0000 +0A44:00007FFE73866DB66D866DB673B67FFE7FFE6DB66DB661867DF67DF67FFE0000 +0A45:00007FFE73866DB66D866DB673B67FFE7FFE6D866DBE61867DF67D867FFE0000 +0A46:00007FFE73866DB66D866DB673B67FFE7FFE6DCE6DBE618E7DB67DCE7FFE0000 +0A47:000000E000100008000000000000000000000000000000000000000000000000 +0A48:01E0001000F80008000000000000000000000000000000000000000000000000 +0A49:00007FFE73866DB66D866DB673B67FFE7FFE6DCE6DB661C67DF67DCE7FFE0000 +0A4A:00007FFE73866DB66D866DB673B67FFE7FFE6D866DB661867DB67DB67FFE0000 +0A4B:020001F000080008000000000000000000000000000000000000000000000000 +0A4C:020001F000480048000000000000000000000000000000000000000000000000 +0A4D:0000000000000000000000000000000000000000000000000000001800040002 +0A4E:00007FFE73866DB66D866DB673B67FFE7FFE6D866DBE618E7DBE7D867FFE0000 +0A4F:00007FFE73866DB66D866DB673B67FFE7FFE6D866DBE618E7DBE7DBE7FFE0000 +0A50:00007FFE73866DB66D866DB673B67FFE7FFE61CE6FB661B67DB661CE7FFE0000 +0A51:0000000000000000000000000000000000000000000000000000080006000180 +0A52:00007FFE73866DB66D866DB673B67FFE7FFE61866FF661867DBE61867FFE0000 +0A53:00007FFE73866DB66D866DB673B67FFE7FFE618E6FF661C67DF6618E7FFE0000 +0A54:00007FFE73866DB66D866DB673B67FFE7FFE61B66FB661867DF661F67FFE0000 +0A55:00007FFE73866DB66D866DB673B67FFE7FFE61866FBE61867DF661867FFE0000 +0A56:00007FFE73866DB66D866DB673B67FFE7FFE61CE6FBE618E7DB661CE7FFE0000 +0A57:00007FFE73866DB66D866DB673B67FFE7FFE61866FF661EE7DDE61DE7FFE0000 +0A58:00007FFE73866DB66D866DB673B67FFE7FFE61CE6FB661CE7DB661CE7FFE0000 +0A59:0000000000000000F81F0810041007F008101010081006700190181018000000 +0A5A:0000000000000000FFFF009000900F9010901090109008900490031018001800 +0A5B:0000000000000000FFFF0010001018101FF00810081008100810099001800000 +0A5C:0000000000000000FFFF00200020002007E0001000101020084007C004200210 +0A5D:00007FFE73866DB66D866DB673B67FFE7FFE618E6FB661B67DB6618E7FFE0000 +0A5E:0000000000000000FFFF001000101FF02000200021E012100C2063C060000000 +0A5F:00007FFE73866DB66D866DB673B67FFE7FFE61866FBE618E7DBE61BE7FFE0000 +0A60:00007FFE73866DB66D866DB673B67FFE7FFE73CE6FB663B66DB673CE7FFE0000 +0A61:00007FFE73866DB66D866DB673B67FFE7FFE73EE6FCE63EE6DEE73C67FFE0000 +0A62:00007FFE73866DB66D866DB673B67FFE7FFE73866FF663866DBE73867FFE0000 +0A63:00007FFE73866DB66D866DB673B67FFE7FFE738E6FF663C66DF6738E7FFE0000 +0A64:00007FFE73866DB66D866DB673B67FFE7FFE73B66FB663866DF673F67FFE0000 +0A65:00007FFE73866DB66D866DB673B67FFE7FFE73866FBE63866DF673867FFE0000 +0A66:0000000000000000078008401020201020102010102008400780000000000000 +0A67:000000000000000007000880084008C007400040004000400040003000000000 +0A68:000000000000000007C000200010001000200FC0004000200010000000000000 +0A69:00000000000000000F800040002000401F800040002030403F80080004000200 +0A6A:0000000000000000044008200820044003800440082008200440038000000000 +0A6B:0000000000000000103C1020082008201020202010200CE00320002000000000 +0A6C:00E00100010000C003F004300800040003F004000800040803F0000000000000 +0A6D:000000000000000003C004200810081006100020004000800300040000000000 +0A6E:00000000000030003FF0100010001000100010000800040003F0000000000000 +0A6F:00600080008030603FF0103010001000100010000800040003F0000000000000 +0A70:03C0042002400000000000000000000000000000000000000000000000000000 +0A71:0420042003C00000000000000000000000000000000000000000000000000000 +0A72:0000000000000000FFFF10101010081007F0080010000810042003C000000000 +0A73:07E0081010082008FFFF2008200820103FE010100810042003C0000000000000 +0A74:00000000180424F8250C1D920B421482280C280228022404120809F000000000 +0A75:0000000000000000000000000000000000000000000000000200020002400180 +0A76:0000000000000000000000000100038007C00380010000000000000000000000 +0A77:00007FFE73866DB66D866DB673B67FFE7FFE61867DF67BEE77DE77DE7FFE0000 +0A78:00007FFE73866DB66D866DB673B67FFE7FFE61CE7DB67BCE77B677CE7FFE0000 +0A79:00007FFE73866DB66D866DB673B67FFE7FFE61CE7DB67BC677F677CE7FFE0000 +0A7A:00007FFE73866DB66D866DB673B67FFE7FFE61867DB67B8677B677B67FFE0000 +0A7B:00007FFE73866DB66D866DB673B67FFE7FFE618E7DB67B8E77B6778E7FFE0000 +0A7C:00007FFE73866DB66D866DB673B67FFE7FFE61C67DBE7BBE77BE77C67FFE0000 +0A7D:00007FFE73866DB66D866DB673B67FFE7FFE618E7DB67BB677B6778E7FFE0000 +0A7E:00007FFE73866DB66D866DB673B67FFE7FFE61867DBE7B8E77BE77867FFE0000 +0A7F:00007FFE73866DB66D866DB673B67FFE7FFE61867DBE7B8E77BE77BE7FFE0000 +0A80:00007FFE73866DB66D866DB673B67FFE7FFE73CE6DB673B66DB673CE7FFE0000 +0A81:02A0022001C00000000000000000000000000000000000000000000000000000 +0A82:0180018000000000000000000000000000000000000000000000000000000000 +0A83:0000000000000000000000000003000300000000000300030000000000000000 +0A84:00007FFE73866DB66D866DB673B67FFE7FFE73B66DB673866DF673F67FFE0000 +0A85:000000000000000078080408048838F810480888070A00040000000000000000 +0A86:0000000000000000F0220822092271E220A211220E2A00110000000000000000 +0A87:000000180020002003A004200420042003200420044003800000000000000000 +0A88:0000003000480048074008400840084006400840088007000000000000000000 +0A89:000003C00420081009C008200820082008C00420022001C00000000000000000 +0A8A:00000F0010802040272020902090209023101090089407080000000000000000 +0A8B:0000000000000000391005280328011803E40502094210840000000000000000 +0A8C:000000000000000000200F7010882084201810200C20001C0000000000000000 +0A8D:004000200018000078080408048838F810480888070A00040000000000000000 +0A8E:00007FFE73866DB66D866DB673B67FFE7FFE73866DBE738E6DBE73867FFE0000 +0A8F:000000600010000878080408048838F810480888070A00040000000000000000 +0A90:00E0001800F8000878080408048838F810480888070A00040000000000000000 +0A91:0010000800060000F0220822092271E220A211220E2A00110000000000000000 +0A92:00007FFE73866DB66D866DB673B67FFE7FFE73866DF671867DBE73867FFE0000 +0A93:0000001800040002F0220822092271E220A211220E2A00110000000000000000 +0A94:00380006003E0002F0220822092271E220A211220E2A00110000000000000000 +0A95:0000000000000000018002000240018001800240084007800000000000000000 +0A96:000000000000000020405040124013C00C400040005000200000000000000000 +0A97:00000000000000000C2012200120012012200C20002800100000000000000000 +0A98:0000000000000000039004100410041003100430045403880000000000000000 +0A99:000000000000000001000100026004600200210011000E000000000000000000 +0A9A:00000000000000003C10021002101C1008300450039400080000000000000000 +0A9B:00000000000000001CC021202120212018A0204020801F000000000000000000 +0A9C:00000000000000000E10112028C0488049403120012000C00000000000000000 +0A9D:00000000000000000C401240014001E012100C10001000600000000000000000 +0A9E:00000000000000000C201220012001E012200C20002800100000000000000000 +0A9F:0000000000000000380004000400180020004000440038000000000000000000 +0AA0:0000000000000000018002000200010007000880088007000000000000000000 +0AA1:000000000000000001000100020004000200210011000E000000000000000000 +0AA2:00000000000000001C0002000C0010C02120212010C00F800000000000000000 +0AA3:00000000000000004C4052404140414052404C40405040202000100008001000 +0AA4:00000000000000000040004003C0044008400840045002200000000000000000 +0AA5:00000000000000000C4012400A40044008C00740005000200000000000000000 +0AA6:0000000000000000038004000400040003000400044003800000000000000000 +0AA7:00000600080008000640084008C0074000400040005000200000000000000000 +0AA8:00000000000000000080008000801F801880008000A000400000000000000000 +0AA9:00007FFE73866DB66D866DB673B67FFE7FFE61CE6DB661C66DF66DCE7FFE0000 +0AAA:000000000000000010402840084008C007400040005000200000000000000000 +0AAB:000000000000000001800200024001800180024018401F800400020001800000 +0AAC:000000000000000008081008208820F811080E08000A00040000000000000000 +0AAD:000000000000000007080888108810F810080808040A00040000000000000000 +0AAE:00000000000000000C200220022003E000200020002800100000000000000000 +0AAF:00000000000000000C20022004200820046003A0002800100000000000000000 +0AB0:00000000000000001E00010001000E000400020001C000000000000000000000 +0AB1:00007FFE73866DB66D866DB673B67FFE7FFE63EE6DCE63EE6DEE63C67FFE0000 +0AB2:00000000000000000C80108020802780208010800CA000400000000000000000 +0AB3:0000000000000000000021802240224022401C40004000500020000000000000 +0AB4:00007FFE73866DB66D866DB673B67FFE7FFE63B66DB663866DF663F67FFE0000 +0AB5:00000000000000000000074008C0084008C00740004000500020000000000000 +0AB6:00000000000000000C20122012200C2004201820082807100000000000000000 +0AB7:00000000000000000C400A40094008C007400040005000200000000000000000 +0AB8:00000000000000003C20022003E01C2008200420032800100000000000000000 +0AB9:000000000000000021002200210020802480232010200FC00000000000000000 +0ABA:00007FFE73866DB66D866DB673B67FFE7FFE63866DB663866DB663B67FFE0000 +0ABB:00007FFE73866DB66D866DB673B67FFE7FFE638E6DB6638E6DB6638E7FFE0000 +0ABC:0000000000000000000000000000000000000000000000000000000001800180 +0ABD:0000000000000000380040004000300008000400440038000000000000000000 +0ABE:0000000000000000000400040004000400040004000500020000000000000000 +0ABF:6000900088008000800080008000800080008000A00040000000000000000000 +0AC0:0018002400240004000400040004000400040004000500020000000000000000 +0AC1:00000000000000000000000000000000000000000000000000000260011000E0 +0AC2:000000000000000000000000000000000000000000000000000001C002200190 +0AC3:000000000000000000000000000000000000000000000000000001C0020001C0 +0AC4:00000000000000000000000000000000000000000000018002000180020001C0 +0AC5:0010000800060000000000000000000000000000000000000000000000000000 +0AC6:00007FFE73866DB66D866DB673B67FFE7FFE71CE6FBE6F8E6FB671CE7FFE0000 +0AC7:0000001800040002000000000000000000000000000000000000000000000000 +0AC8:00380006003E0002000000000000000000000000000000000000000000000000 +0AC9:00200010000C0000000400040004000400040004000500020000000000000000 +0ACA:00007FFE73866DB66D866DB673B67FFE7FFE71866FB66F866FB671B67FFE0000 +0ACB:0030000800040004000400040004000400040004000500020000000000000000 +0ACC:003800040034000C000400040004000400040004000500020000000000000000 +0ACD:000000000000000000000000000000000000000000000000000001C000200010 +0ACE:00007FFE73866DB66D866DB673B67FFE7FFE71866FBE6F8E6FBE71867FFE0000 +0ACF:00007FFE73866DB66D866DB673B67FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +0AD0:00300030000000843C780200020C0C121832044C438042003C00000000000000 +0AD1:00007FFE73866DB66D866DB673B67FFE7FFE63EE6DCE6DEE6DEE63C67FFE0000 +0AD2:00007FFE73866DB66D866DB673B67FFE7FFE63866DF66D866DBE63867FFE0000 +0AD3:00007FFE73866DB66D866DB673B67FFE7FFE638E6DF66DC66DF6638E7FFE0000 +0AD4:00007FFE73866DB66D866DB673B67FFE7FFE63B66DB66D866DF663F67FFE0000 +0AD5:00007FFE73866DB66D866DB673B67FFE7FFE63866DBE6D866DF663867FFE0000 +0AD6:00007FFE73866DB66D866DB673B67FFE7FFE63CE6DBE6D8E6DB663CE7FFE0000 +0AD7:00007FFE73866DB66D866DB673B67FFE7FFE63866DF66DEE6DDE63DE7FFE0000 +0AD8:00007FFE73866DB66D866DB673B67FFE7FFE63CE6DB66DCE6DB663CE7FFE0000 +0AD9:00007FFE73866DB66D866DB673B67FFE7FFE63CE6DB66DC66DF663CE7FFE0000 +0ADA:00007FFE73866DB66D866DB673B67FFE7FFE63866DB66D866DB663B67FFE0000 +0ADB:00007FFE73866DB66D866DB673B67FFE7FFE638E6DB66D8E6DB6638E7FFE0000 +0ADC:00007FFE73866DB66D866DB673B67FFE7FFE63C66DBE6DBE6DBE63C67FFE0000 +0ADD:00007FFE73866DB66D866DB673B67FFE7FFE638E6DB66DB66DB6638E7FFE0000 +0ADE:00007FFE73866DB66D866DB673B67FFE7FFE63866DBE6D8E6DBE63867FFE0000 +0ADF:00007FFE73866DB66D866DB673B67FFE7FFE63866DBE6D8E6DBE63BE7FFE0000 +0AE0:000000000000000072200A500650023007DC0A101292210C0000000000000000 +0AE1:000000000000000000200F7010882084201810200C20001C00200020001C0000 +0AE2:0000000000000000000000000000000000000000000000000360049004200018 +0AE3:00000000000000000000000000000000000000000000036004900424001A000C +0AE4:00007FFE73866DB66D866DB673B67FFE7FFE61B66FB663866FF661F67FFE0000 +0AE5:00007FFE73866DB66D866DB673B67FFE7FFE61866FBE63866FF661867FFE0000 +0AE6:0000000000000000078008401020201020102010102008400780000000000000 +0AE7:000000000000000007000880084008C007400040004000400040003000000000 +0AE8:000000000000000007C00020001000100C200FC00200010000C0000000000000 +0AE9:000000000000000001C000200010002003C010200810042003C0000000000000 +0AEA:00000000000000001C080210012000C000C0012002200220022001C000000000 +0AEB:000000000000000010402840084008C007400040005000200000000000000000 +0AEC:0000000000000000070008001000080007E004000800040003F0000800080070 +0AED:000000000000000003C0046008900910061020102010202010400F8000000000 +0AEE:0000000000000080010002000400080010001000100008400780000000000000 +0AEF:000000000000000008001040208021002200200010000F800000000000000000 +0AF0:0000000000000000000000000000000018002400240018000000000000000000 +0AF1:00000000000000000C000200010002001C1C0222012232223C1C080004000300 +0AF2:00007FFE73866DB66D866DB673B67FFE7FFE61866FF663866FBE6F867FFE0000 +0AF3:00007FFE73866DB66D866DB673B67FFE7FFE618E6FF663C66FF66F8E7FFE0000 +0AF4:00007FFE73866DB66D866DB673B67FFE7FFE61B66FB663866FF66FF67FFE0000 +0AF5:00007FFE73866DB66D866DB673B67FFE7FFE61866FBE63866FF66F867FFE0000 +0AF6:00007FFE73866DB66D866DB673B67FFE7FFE61CE6FBE638E6FB66FCE7FFE0000 +0AF7:00007FFE73866DB66D866DB673B67FFE7FFE61866FF663EE6FDE6FDE7FFE0000 +0AF8:00007FFE73866DB66D866DB673B67FFE7FFE61CE6FB663CE6FB66FCE7FFE0000 +0AF9:00000000000000001F82284424282430185000900510112004C0000000000000 +0AFA:00C0002000200040000000000000000000000000000000000000000000000000 +0AFB:0888088807700000000000000000000000000000000000000000000000000000 +0AFC:000C013001C00700000000000000000000000000000000000000000000000000 +0AFD:018001800C300C30000000000000000000000000000000000000000000000000 +0AFE:0180024002400180000000000000000000000000000000000000000000000000 +0AFF:0630094809480630000000000000000000000000000000000000000000000000 +0B00:00007FFE738E6DB66D8E6DB6738E7FFE7FFE73CE6DB66DB66DB673CE7FFE0000 +0B01:02A0022001C00000000000000000000000000000000000000000000000000000 +0B02:0002000500020000000000000000000000000000000000000000000000000000 +0B03:0000000000000000000000020005000500020005000500020000000000000000 +0B04:00007FFE738E6DB66D8E6DB6738E7FFE7FFE73B66DB66D866DF673F67FFE0000 +0B05:0000000000000000361049104910221004100810083007D00000000000000000 +0B06:0000000000000000361449144914221404140414023401D40000000000000000 +0B07:00000000000000000F803040402040204A20354015400A200000000000000000 +0B08:0000000000000000038004403E2040204A20354015400A200000000000000000 +0B09:00000000000000000F803040402041205220264022401C200000000000000000 +0B0A:00000000000000000F803040404041405220261022201C100000000000000000 +0B0B:000000000000000007001880208020802C40122012400C200000000000000000 +0B0C:00000000000000000000038004400180020004C0052003C00000000000000000 +0B0D:00007FFE738E6DB66D8E6DB6738E7FFE7FFE738E6DB66DB66DB6738E7FFE0000 +0B0E:00007FFE738E6DB66D8E6DB6738E7FFE7FFE73866DBE6D8E6DBE73867FFE0000 +0B0F:0000000000000000020006000A004200220012000A0006000000000000000000 +0B10:000001E00210001001200320052021E011200920052003200000000000000000 +0B11:00007FFE738E6DB66D8E6DB6738E7FFE7FFE7BEE73CE7BEE7BEE71C67FFE0000 +0B12:00007FFE738E6DB66D8E6DB6738E7FFE7FFE7B8673F67B867BBE71867FFE0000 +0B13:000000000000000004C009200820082008C00420022001C00000000000000000 +0B14:000000F00108000813102490209020F023101090089007100000000000000000 +0B15:00000000000000000FC03020401040104980364016400A400000000000000000 +0B16:000000000000000003900510093008D008100710049003100000000000000000 +0B17:0000000000000000039004500830081008100710049003100000000000000000 +0B18:00000000000000000390045008300A100C10111011300ED00000000000000000 +0B19:00000000000000000F003080407041485230260022001C000000000000000000 +0B1A:000000000000000003C004200810081008100720048003000000000000000000 +0B1B:000000000000000003C0042008100B10048017000A8005000000000000000000 +0B1C:000000000000000003C00420081008000A6004A004A003200000000000000000 +0B1D:000000000000000003A00490091010E016000900098006400000000000000000 +0B1E:00000000000000001360249020101FE01360249020101FE00000000000000000 +0B1F:0000000000000000039004500830081008000700048003000000000000000000 +0B20:0000000000000000000007000880104010401040088007000000000000000000 +0B21:000000000000000003C00C2010101050149009A0088007000000000000000000 +0B22:000000000000000003C00C2010101010141009200A8007000200010000000000 +0B23:0000000000000000039004500A3011101C10021002100C100000000000000000 +0B24:00000000000000000F803040402040205340230023001C000000000000000000 +0B25:00000000000000000610091001100E1010101010083007D00000000000000000 +0B26:00000000000000000F803040402041205300230023001D000000000000000000 +0B27:0000000000000000001004100210031004900410043003D00000000000000000 +0B28:00000000000000000F80104020202020272019400D000D000000000000000000 +0B29:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61CE7DB661C66FF661CE7FFE0000 +0B2A:000000000000000007900850103012100C100810083007D00000000000000000 +0B2B:00000000000000001CB022C841C848B03080208021801E800000000000000000 +0B2C:00000000000000000780184020202E203120110011800E800000000000000000 +0B2D:00000000000000000F803040402045205520234021401E200000000000000000 +0B2E:000000000000000007900850103012100C101010601060100010000000000000 +0B2F:000000000000000007900850103012100C101810683067D00000000000000000 +0B30:000000000000000003C00420081008100810072004A003100000000000000000 +0B31:00007FFE738E6DB66D8E6DB6738E7FFE7FFE63EE7DCE71EE7DEE63C67FFE0000 +0B32:00000000000000001FC02020401040105B1024A024A024900000000000000000 +0B33:00000000000000001FC02020401040105B202480248024800000000000000000 +0B34:00007FFE738E6DB66D8E6DB6738E7FFE7FFE63B67DB671867DF663F67FFE0000 +0B35:00000000000000000780184020202E203120150011800E800000000000000000 +0B36:0000000000000000079008500C30121010100E10091006100000000000000000 +0B37:000000000000000007900C50123013100C900850083007D00000000000000000 +0B38:00000000000000000F9010502030211026101E10019000700000000000000000 +0B39:00000000000000000F803040402041205300230023001D000800060001800000 +0B3A:00007FFE738E6DB66D8E6DB6738E7FFE7FFE63867DB671867DB663B67FFE0000 +0B3B:00007FFE738E6DB66D8E6DB6738E7FFE7FFE638E7DB6718E7DB6638E7FFE0000 +0B3C:0000000000000000000000000000000000000000000000000000000001800180 +0B3D:00000000000000000C003000400030000C003000400030000C00000000000000 +0B3E:0000000000000000000800080008000800080008000800080008000000000000 +0B3F:07F0080808080000000000000000000000000000000000000000000000000000 +0B40:0000000000000000000800180028000800080008000800080008000000000000 +0B41:000000000000000000000000000000000000000000000000002007A008C007B0 +0B42:00000000000000000000000000000000000000000000000003000400044003B0 +0B43:000000000000000000000000000000000000000000000000024004A0042003C0 +0B44:000000000000000000000000000000000000000000000400084006A0082007C0 +0B45:00007FFE738E6DB66D8E6DB6738E7FFE7FFE6D866DBE61867DF67D867FFE0000 +0B46:00007FFE738E6DB66D8E6DB6738E7FFE7FFE6DCE6DBE618E7DB67DCE7FFE0000 +0B47:00000000000000006000800080008000E0009000900090006000000000000000 +0B48:010000F8000400046000800080008000E0009000900090006000000000000000 +0B49:00007FFE738E6DB66D8E6DB6738E7FFE7FFE6DCE6DB661C67DF67DCE7FFE0000 +0B4A:00007FFE738E6DB66D8E6DB6738E7FFE7FFE6D866DB661867DB67DB67FFE0000 +0B4B:00000000000000006008800880088008E0089008900890086008000000000000 +0B4C:00000078008400046008800880088008E0089008900890086008000000000000 +0B4D:0000000000000000000000000000000000000000000000000000008000400020 +0B4E:00007FFE738E6DB66D8E6DB6738E7FFE7FFE6D866DBE618E7DBE7D867FFE0000 +0B4F:00007FFE738E6DB66D8E6DB6738E7FFE7FFE6D866DBE618E7DBE7DBE7FFE0000 +0B50:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61CE6FB661B67DB661CE7FFE0000 +0B51:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61EE6FCE61EE7DEE61C67FFE0000 +0B52:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61866FF661867DBE61867FFE0000 +0B53:00007FFE738E6DB66D8E6DB6738E7FFE7FFE618E6FF661C67DF6618E7FFE0000 +0B54:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61B66FB661867DF661F67FFE0000 +0B55:00000FF000000000000000000000000000000000000000000000000000000000 +0B56:010000F800040004000000000000000000000000000000000000000000000000 +0B57:0000007800840004000800080008000800080008000800080008000000000000 +0B58:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61CE6FB661CE7DB661CE7FFE0000 +0B59:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61CE6FB661C67DF661CE7FFE0000 +0B5A:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61866FB661867DB661B67FFE0000 +0B5B:00007FFE738E6DB66D8E6DB6738E7FFE7FFE618E6FB6618E7DB6618E7FFE0000 +0B5C:000000000000000003C00C2010101050149009A0088007000000030003000000 +0B5D:000000000000000003C00C2010101010141009200A800700020001000C000C00 +0B5E:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61866FBE618E7DBE61867FFE0000 +0B5F:000000000000000007900850103012100C1018306848679C0000000000000000 +0B60:00000000000000000780184020C020202CC0122012C00C200010000000000000 +0B61:00000000000000000000038004400180020004C0052003C00080004000200000 +0B62:00000000000000000000000000000000000000000080014001400098012400F8 +0B63:000000000000000000000000000000000000000000800140015800A4013800D0 +0B64:00007FFE738E6DB66D8E6DB6738E7FFE7FFE73B66FB663866DF673F67FFE0000 +0B65:00007FFE738E6DB66D8E6DB6738E7FFE7FFE73866FBE63866DF673867FFE0000 +0B66:0000000000000000000000000380044010101010101004400380000000000000 +0B67:000000000000000003C004200A100A1009E004000200010000C0002000000000 +0B68:000000000000000003C004200850085007900020004000800300040000000000 +0B69:00000000000000000EE011102110291025101910011001100000000000000000 +0B6A:000000000000000004080210012000C000C0012002200220022001C000000000 +0B6B:000000000000000001C012200A20064001800260045004480380000000000000 +0B6C:000000000000000003C004200310009008900720004000800300040000000000 +0B6D:000000000000000003C0042009100A900A900720004000800300040000000000 +0B6E:0000000000000FE0080008000800080008000800080008000800000000000000 +0B6F:0000000000000000072008A00860080008000800040003000000000000000000 +0B70:0000000000000000001000200C400C8041002200140008000000000000000000 +0B71:000000000000000009E0121010E0081007F00810083007D00000000000000000 +0B72:0000000000000000008000800080008000800080008000800000000000000000 +0B73:0000000000000000088008800880098006800080008000800000000000000000 +0B74:0000000000000000222022202220266019A00020002000200000000000000000 +0B75:0000000000000000002000400080010002000400080010000000000000000000 +0B76:000000000000000000201C402A802B0012000400080010000000000000000000 +0B77:0000000000000000000200040008001036204940498049000000000000000000 +0B78:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61CE7DB67BCE77B677CE7FFE0000 +0B79:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61CE7DB67BC677F677CE7FFE0000 +0B7A:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61867DB67B8677B677B67FFE0000 +0B7B:00007FFE738E6DB66D8E6DB6738E7FFE7FFE618E7DB67B8E77B6778E7FFE0000 +0B7C:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61C67DBE7BBE77BE77C67FFE0000 +0B7D:00007FFE738E6DB66D8E6DB6738E7FFE7FFE618E7DB67BB677B6778E7FFE0000 +0B7E:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61867DBE7B8E77BE77867FFE0000 +0B7F:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61867DBE7B8E77BE77BE7FFE0000 +0B80:00007FFE738E6DB66D8E6DB6738E7FFE7FFE73CE6DB673B66DB673CE7FFE0000 +0B81:00007FFE738E6DB66D8E6DB6738E7FFE7FFE73EE6DCE73EE6DEE73C67FFE0000 +0B82:0100028001000000000000000000000000000000000000000000000000000000 +0B83:0000000000000000018002400240018018182424242418180000000000000000 +0B84:00007FFE738E6DB66D8E6DB6738E7FFE7FFE73B66DB673866DF673F67FFE0000 +0B85:0000000000000000061009100990069000901FF020901F100000000000000000 +0B86:00000000000000001840244026401A4002407FE082507C500150021001E00000 +0B87:000000000F801040232024902490135008401F8022401D800000000000000000 +0B88:00000000000000001FF81080108016B016B01080108010800000000000000000 +0B89:00000000000000003C004A004900310002003C0040003FF00000000000000000 +0B8A:00000000000000007000980099F86AD00950705080007FF80000000000000000 +0B8B:00007FFE738E6DB66D8E6DB6738E7FFE7FFE738E6DB6738E6DB6738E7FFE0000 +0B8C:00007FFE738E6DB66D8E6DB6738E7FFE7FFE73C66DBE73BE6DBE73C67FFE0000 +0B8D:00007FFE738E6DB66D8E6DB6738E7FFE7FFE738E6DB673B66DB6738E7FFE0000 +0B8E:000000000000000007FC081010101C102210221022101C100000000000000000 +0B8F:000000000000000007FC081010101C102210221022101C100020004000800000 +0B90:00000000000000003EE0711049104910311000103FE040004000421042103DE0 +0B91:00007FFE738E6DB66D8E6DB6738E7FFE7FFE73EE6DCE71EE7DEE73C67FFE0000 +0B92:00000000000000001FC020204010401071D04A504A903260020011E010400F80 +0B93:00000000000000001FC020204010401071D04A504A903260020031E048403F80 +0B94:00000000000000003C0042008100817CCDA8B568B928560010008F0082007C00 +0B95:00000000000000000FE00880088008803FE0409040903F200000000000000000 +0B96:00007FFE738E6DB66D8E6DB6738E7FFE7FFE73CE6DBE718E7DB673CE7FFE0000 +0B97:00007FFE738E6DB66D8E6DB6738E7FFE7FFE73866DF671EE7DDE73DE7FFE0000 +0B98:00007FFE738E6DB66D8E6DB6738E7FFE7FFE73CE6DB671CE7DB673CE7FFE0000 +0B99:00000000000000007E1048104F1048904890411042104FF00000000000000000 +0B9A:00000000000000000FE00880088008803FE0408040803F000000000000000000 +0B9B:00007FFE738E6DB66D8E6DB6738E7FFE7FFE738E6DB6718E7DB6738E7FFE0000 +0B9C:00000000000000003EE0711049104910311000103FE0400040E0411042103C60 +0B9D:00007FFE738E6DB66D8E6DB6738E7FFE7FFE738E6DB671B67DB6738E7FFE0000 +0B9E:000000000000000027E0488090809CA0A2D0A290A2909C90801040203FC00000 +0B9F:000000000000000010001000100010001000100010001FF80000000000000000 +0BA0:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61CE6DB661B66DB66DCE7FFE0000 +0BA1:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61EE6DCE61EE6DEE6DC67FFE0000 +0BA2:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61866DF661866DBE6D867FFE0000 +0BA3:00000000000000003BBF44488AA8CAA8AAA8AAA8444800080000000000000000 +0BA4:00000000000000000FE00880088008803FE0409040903F10001000203FC04000 +0BA5:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61866DBE61866DF66D867FFE0000 +0BA6:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61CE6DBE618E6DB66DCE7FFE0000 +0BA7:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61866DF661EE6DDE6DDE7FFE0000 +0BA8:00000000000000000FE0088008800880088008E008900890001000203FC04000 +0BA9:00000000000000001EFC2110429072904A904A90311000100000000000000000 +0BAA:000000000000000010201020102010201020102010201FE00000000000000000 +0BAB:00007FFE738E6DB66D8E6DB6738E7FFE7FFE618E6DB6618E6DB66D8E7FFE0000 +0BAC:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61C66DBE61BE6DBE6DC67FFE0000 +0BAD:00007FFE738E6DB66D8E6DB6738E7FFE7FFE618E6DB661B66DB66D8E7FFE0000 +0BAE:000000000000000021C02220222022202220222022203FC00000000000000000 +0BAF:000000000000000012101210121012101210121016101BF00000000000000000 +0BB0:00000000000000000FF008400840084008400840084008400040008001000200 +0BB1:000000000000000007700888088808880888088808880888001000100FE01000 +0BB2:00000000000000001C2022104110411071104910491030E00000000000000000 +0BB3:00000000000000001CFC23104110411071104910491031100000000000000000 +0BB4:000000000000000021C02220222022202220222022203FC0020023C020801F00 +0BB5:00000000000000001C1023104090409070904890491033F00000000000000000 +0BB6:000000000000000047FC44444444444444444444444438380000000000000000 +0BB7:00000000000000001C10222841284128711049284A4833F00080010000000000 +0BB8:00000000000000001D9022484248424872484A484A4832300000000000000000 +0BB9:0000000000000000386C449282928292E292929294926792000400043FF84000 +0BBA:00007FFE738E6DB66D8E6DB6738E7FFE7FFE63866DB663866DB663B67FFE0000 +0BBB:00007FFE738E6DB66D8E6DB6738E7FFE7FFE638E6DB6638E6DB6638E7FFE0000 +0BBC:00007FFE738E6DB66D8E6DB6738E7FFE7FFE63C66DBE63BE6DBE63C67FFE0000 +0BBD:00007FFE738E6DB66D8E6DB6738E7FFE7FFE638E6DB663B66DB6638E7FFE0000 +0BBE:0000000000000000001F00120012001200120012001200120000000000000000 +0BBF:001C002200220012000200020002000200020002000200020000000000000000 +0BC0:01C0022002C00100008000000000000000000000000000000000000000000000 +0BC1:0000000000000000001E00050002000000000000000000000000000000000000 +0BC2:0000000000060009001D000B0005000100020000000000000000000000000000 +0BC3:00007FFE738E6DB66D8E6DB6738E7FFE7FFE718E6FF66FC66FF6718E7FFE0000 +0BC4:00007FFE738E6DB66D8E6DB6738E7FFE7FFE71B66FB66F866FF671F67FFE0000 +0BC5:00007FFE738E6DB66D8E6DB6738E7FFE7FFE71866FBE6F866FF671867FFE0000 +0BC6:00000000000000003000480084008400E4009400940064000000000000000000 +0BC7:000000000000000030004800B00080008000B000480030000000000000000000 +0BC8:00000000000000003D80424087408540E5409540924060000000000000000000 +0BC9:00007FFE738E6DB66D8E6DB6738E7FFE7FFE71CE6FB66FC66FF671CE7FFE0000 +0BCA:0000000000000000301F481284128412E4129412941264120000000000000000 +0BCB:0000000000000000301F4812B01280128012B012481230120000000000000000 +0BCC:0000000000000000301F482A844A84CAE4AA94AA94AA644A0000000000000000 +0BCD:0300030000000000000000000000000000000000000000000000000000000000 +0BCE:00007FFE738E6DB66D8E6DB6738E7FFE7FFE71866FBE6F8E6FBE71867FFE0000 +0BCF:00007FFE738E6DB66D8E6DB6738E7FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +0BD0:0000000000000FF0300C400280018001E01D9025942961261AA0279E20041FF8 +0BD1:00007FFE738E6DB66D8E6DB6738E7FFE7FFE63EE6DCE6DEE6DEE63C67FFE0000 +0BD2:00007FFE738E6DB66D8E6DB6738E7FFE7FFE63866DF66D866DBE63867FFE0000 +0BD3:00007FFE738E6DB66D8E6DB6738E7FFE7FFE638E6DF66DC66DF6638E7FFE0000 +0BD4:00007FFE738E6DB66D8E6DB6738E7FFE7FFE63B66DB66D866DF663F67FFE0000 +0BD5:00007FFE738E6DB66D8E6DB6738E7FFE7FFE63866DBE6D866DF663867FFE0000 +0BD6:00007FFE738E6DB66D8E6DB6738E7FFE7FFE63CE6DBE6D8E6DB663CE7FFE0000 +0BD7:0000000000000000001F002A004A00CA00AA00AA00AA004A0000000000000000 +0BD8:00007FFE738E6DB66D8E6DB6738E7FFE7FFE63CE6DB66DCE6DB663CE7FFE0000 +0BD9:00007FFE738E6DB66D8E6DB6738E7FFE7FFE63CE6DB66DC66DF663CE7FFE0000 +0BDA:00007FFE738E6DB66D8E6DB6738E7FFE7FFE63866DB66D866DB663B67FFE0000 +0BDB:00007FFE738E6DB66D8E6DB6738E7FFE7FFE638E6DB66D8E6DB6638E7FFE0000 +0BDC:00007FFE738E6DB66D8E6DB6738E7FFE7FFE63C66DBE6DBE6DBE63C67FFE0000 +0BDD:00007FFE738E6DB66D8E6DB6738E7FFE7FFE638E6DB66DB66DB6638E7FFE0000 +0BDE:00007FFE738E6DB66D8E6DB6738E7FFE7FFE63866DBE6D8E6DBE63867FFE0000 +0BDF:00007FFE738E6DB66D8E6DB6738E7FFE7FFE63866DBE6D8E6DBE63BE7FFE0000 +0BE0:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61CE6FB663B66FB661CE7FFE0000 +0BE1:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61EE6FCE63EE6FEE61C67FFE0000 +0BE2:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61866FF663866FBE61867FFE0000 +0BE3:00007FFE738E6DB66D8E6DB6738E7FFE7FFE618E6FF663C66FF6618E7FFE0000 +0BE4:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61B66FB663866FF661F67FFE0000 +0BE5:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61866FBE63866FF661867FFE0000 +0BE6:0000000000000000018002400420042004200420024001800000000000000000 +0BE7:00000000000000000FE00880088008803FE0409040903F200000000000000000 +0BE8:00000000000000001C0022004100410022003C0040003FF00000000000000000 +0BE9:00000000000000003F802200220022C023202220204023FC0000000000000000 +0BEA:00000000000000000FE40884088408843FFC408040803F000000000000000000 +0BEB:000000000000000013F82220422042204220423842244224400420081FF00000 +0BEC:00000000000000000FE00880088008803FFE40A440A43F240000000000000000 +0BED:000000000000000007FC081010101C102210221022101C100000000000000000 +0BEE:0000000000000E0011101090085006503FF0405020901F100000000000000000 +0BEF:00000000000000000FC009000900091C3FE24132412A3E120000000000000000 +0BF0:000003800040002022202220222022202220222022201DC00000000000000000 +0BF1:00000000000000001BF826202220222022202220222022200000000000000000 +0BF2:00000000000000000FE00880088008803FFC409040903F780054003400040078 +0BF3:00000000000000001C0023004080408070804880490033F00000000000000000 +0BF4:007000C800AE00C021C02220222022202220222022203FC00000000000000000 +0BF5:000000003FFC40029C3AA252A154A155B152A958AA5493D4800440083FF00000 +0BF6:000000000000000010241024102410241024102410241FE4002407FC082007C0 +0BF7:00000000000000000F801200220032604A904BC84AA8324E0000000000000000 +0BF8:00000000000000003E024105808583C5E4A2949594A5633E0008001000000000 +0BF9:0E0011003C8052F04C0047E0484048404840487048484848400820101FE00000 +0BFA:0038004400F2014B01300F8011001100110011C011201120002000401F802000 +0BFB:00007FFE738E6DB66D8E6DB6738E7FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +0BFC:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +0BFD:00007FFE738E6DB66D8E6DB6738E7FFE7FFE618E6FB663B66FB66F8E7FFE0000 +0BFE:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61866FBE638E6FBE6F867FFE0000 +0BFF:00007FFE738E6DB66D8E6DB6738E7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +0C00:000001800990042003C000000000000000000000000000000000000000000000 +0C01:0000000000000000000000010002000400040004000200010000000000000000 +0C02:0000000000000000000000000006000900090006000000000000000000000000 +0C03:0000000000000000000200050005000200000002000500050002000000000000 +0C04:0000018002400180000000000000000000000000000000000000000000000000 +0C05:00000000000000000C60129032482CC82008200810100FE00000000000000000 +0C06:00000000000000000C10122832282CF02010201010200FC00000000000000000 +0C07:00000000000000003B804440444000401E8021001E8000400040004000000000 +0C08:00000000000000004200240018603C9042207FE042903C600000000000000000 +0C09:00000000010001000FE0101020007FF84000406022901DE00000000000000000 +0C0A:00000000050005001F8820444008FFF88014808845403B800000000000000000 +0C0B:000000000000000064909248124822484248824892486DB00000000000000000 +0C0C:00000000000000001B0024802480011002100210022001C00000000000000000 +0C0D:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE738E6DB66DB66DB6738E7FFE0000 +0C0E:0000000000000000002000100008000800080E0813100CE00000000000000000 +0C0F:000000000000020004E008100808000800080E0813100CE00000000000000000 +0C10:00000000000000000EE011101108000800080E0813100CE00000000000000000 +0C11:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE7BEE73CE7BEE7BEE71C67FFE0000 +0C12:00000000000000000C001200120004000800100011100EE00000000000000000 +0C13:00000600090004000C001200120004000800100011100EE00000000000000000 +0C14:00003FE001503E200C001200120004000800100011100EE00000000000000000 +0C15:0000002002400180018002400200018000400020082007C00000000000000000 +0C16:00000000000000003000480034800440042034204C4037800400000000000000 +0C17:0000000000000000088005000200050005000880088008800000000000000000 +0C18:00000000000000000000040049303088004830484C9037600400000000000000 +0C19:00000000000000000C40124013F004000800100011100EE00000000000000000 +0C1A:000000000010002001C001A0001000087808090813900C600000000000000000 +0C1B:000000000010002001C001A0001000087808090813900D600100000000000000 +0C1C:00000000000000000C40132012C004000800100011100EE00000000000000000 +0C1D:00000080210012000C901248124812481248124812E80D500040000000000000 +0C1E:00000000000000001B00248024A000F000801D0022001D000100010000000000 +0C1F:000000001000100018C02420582040104010401022101DE00000000000000000 +0C20:000000000000000010400880070008801040124010400F800000000000000000 +0C21:00000020084004800F001200210040804000406022901DE00000000000000000 +0C22:00000020084004800F001200210040804000406022901FE00200000000000000 +0C23:00000000000000000C601290210820081808203822481C300000000000000000 +0C24:0008011000A000400C6012902C6820082008200810100FE00000000000000000 +0C25:000000000000000010400880070008801240104012400F800200000000000000 +0C26:000000000000000010400880070008801040104012400D800000000000000000 +0C27:000000000000000010400880070008801040104012400F800200000000000000 +0C28:008001001A001C00038000400020001018102410222011C00000000000000000 +0C29:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61CE7DB661C66FF661CE7FFE0000 +0C2A:004000800900060000E000100008000800080E0813100CE00000000000000000 +0C2B:004000800900060000E000100008000800080E0813100DE00100000000000000 +0C2C:000000000000000030C04820081010082008210812900C600000000000000000 +0C2D:00000004000800D030E04820081010082008210812900C600100000000000000 +0C2E:00400080010006000730008800480048004838484CC833300000000000000000 +0C2F:004000800D0002000130008830484848484848484CC833300000000000000000 +0C30:000000000000000010400880070008801040104010400F800000000000000000 +0C31:00000000000000000C60129032882FC82008200810100FE00000000000000000 +0C32:000000000000000018C02420641058104010402020401F800000000000000000 +0C33:0008001001A001C00040182024102C1010200FC0090006000000000000000000 +0C34:000000000000000018C02520653058D04010421022201DC00000000000000000 +0C35:000000100020004001E001900008000800080E0813100CE00000000000000000 +0C36:00000040008001000780064000200E2011401380048003000000000000000000 +0C37:004000800900060000E000100008000800080E0813100CE00010000800040000 +0C38:004000800500020000E000100008000800080E08131010E00000000000000000 +0C39:040008005000200007F8022801100080008038804C8033000000000000000000 +0C3A:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE63867DB671867DB663B67FFE0000 +0C3B:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE638E7DB6718E7DB6638E7FFE0000 +0C3C:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE63C67DBE71BE7DBE63C67FFE0000 +0C3D:0000000000000000000007000080008003000400040003F80000000000000000 +0C3E:000000000000000000FF00050002000000000000000000000000000000000000 +0C3F:0180024001C00780000000000000000000000000000000000000000000000000 +0C40:04000980064001C0078000000000000000000000000000000000000000000000 +0C41:0000000000000000000000060001000100010001000900060000000000000000 +0C42:000000000000000000FF002500120008000400020012000C0000000000000000 +0C43:0000000000000000000000060001000100010005000B00060000000000000000 +0C44:0000000000000000001F0011000800040002000A0016000C0000000000000000 +0C45:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE6D866DBE61867DF67D867FFE0000 +0C46:0FC00020002000C0000000000000000000000000000000000000000000000000 +0C47:006000800FC0002000C000000000000000000000000000000000000000000000 +0C48:0FC00020002000C000000000000000000000000000000000000004000A000FF0 +0C49:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE6DCE6DB661C67DF67DCE7FFE0000 +0C4A:000037E008900060000000000000000000000000000000000000000000000000 +0C4B:0030004837E04850002000000000000000000000000000000000000000000000 +0C4C:00003FE004903860000000000000000000000000000000000000000000000000 +0C4D:0F0010000C0010000C0000000000000000000000000000000000000000000000 +0C4E:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE6D866DBE618E7DBE7D867FFE0000 +0C4F:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE6D866DBE618E7DBE7DBE7FFE0000 +0C50:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61CE6FB661B67DB661CE7FFE0000 +0C51:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61EE6FCE61EE7DEE61C67FFE0000 +0C52:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61866FF661867DBE61867FFE0000 +0C53:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE618E6FF661C67DF6618E7FFE0000 +0C54:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61B66FB661867DF661F67FFE0000 +0C55:0060009000480000000000000000000000000000000000000000000000000000 +0C56:000000000000000000000000000000000000000000000000000004000A000FF0 +0C57:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61866FF661EE7DDE61DE7FFE0000 +0C58:010002807F90002001C001A0001000087808090813900C600000000000000000 +0C59:004000A01FE000000C40132012C004000800100011100EE00000000000000000 +0C5A:00000000000007C00820101010101FF01110111011100EE00000000000000000 +0C5B:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE618E6FB6618E7DB6618E7FFE0000 +0C5C:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61C66FBE61BE7DBE61C67FFE0000 +0C5D:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE618E6FB661B67DB6618E7FFE0000 +0C5E:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61866FBE618E7DBE61867FFE0000 +0C5F:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61866FBE618E7DBE61BE7FFE0000 +0C60:0000000000000000493EA4952492249044908490A4905B600000000000000000 +0C61:00000000000000001B3E24A524A2011002100210022001C00000000000000000 +0C62:00000000000000000000000000000000000000000000000006C0092800280010 +0C63:0000000000000000000000000000000000000000000000001B3824B400A80040 +0C64:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE73B66FB663866DF673F67FFE0000 +0C65:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE73866FBE63866DF673867FFE0000 +0C66:0000000000000000018002400420042004200420024001800000000000000000 +0C67:000000000000000003C004200810081008100810042002400000000000000000 +0C68:0000000000000000000000E0011001480088000800103FE00000000000000000 +0C69:000000000000000001E00210021000E000100210021001E00000000000000000 +0C6A:0000000000000000042008100810042003C00420042003C00000000000000000 +0C6B:00000000000000000004030400C8003000300048008807100000000000000000 +0C6C:00000000000000003800400040003F004000400020001FF80000000000000000 +0C6D:000000000000000001C002200420004003880408041003E00000000000000000 +0C6E:000000000000000010FC2080404040404040404020801F000000000000000000 +0C6F:00000000000000001FF82000400040003F004000400038000000000000000000 +0C70:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61CE7DB67BB677B677CE7FFE0000 +0C71:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61EE7DCE7BEE77EE77C67FFE0000 +0C72:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61867DF67B8677BE77867FFE0000 +0C73:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE618E7DF67BC677F6778E7FFE0000 +0C74:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61B67DB67B8677F677F67FFE0000 +0C75:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61867DBE7B8677F677867FFE0000 +0C76:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61CE7DBE7B8E77B677CE7FFE0000 +0C77:000000000000000001E0021024C82528142812480990042003C0000000000000 +0C78:000000000000000003C0042004200420042003C0002000100060018000000000 +0C79:0000000000000000008000800080008000800080008000800000000000000000 +0C7A:0000000000000000022002200220022001E00020002000200000000000000000 +0C7B:0000000000000000092009200920092006E00020002000200000000000000000 +0C7C:000000000000000000000000000000000000000000001FF80000000000000000 +0C7D:000000000000000007C00020002001C002000400040003F80000000000000000 +0C7E:0000000000000700008003000400030000800300040003F80000000000000000 +0C7F:0000000000000000060009001608100810101010082007C00000000000000000 +0C80:0000000000000000000000000990042003C00000000000000000000000000000 +0C81:0990042003C00000000000000000000000000000000000000000000000000000 +0C82:0000000000000000000000000006000900090006000000000000000000000000 +0C83:0000000000000000000200050005000200000002000500050002000000000000 +0C84:0000000000000000000003F0040808C8492448242444238810100FE000000000 +0C85:00000000000000000C60129032482CE82008200810100FE00000000000000000 +0C86:00000000000000000C30124832282CF02008200810100FE00000000000000000 +0C87:00000000000000003B804440444000401E8021001E8000400040004000000000 +0C88:000000000000000002000200FE603C9042607FE042203C400000000000000000 +0C89:00000000000000004620A910A910C91089108910492030C00000000000000000 +0C8A:0000000000000000461CA922A922C9228926892A492A30C40000000000000000 +0C8B:000000000080008067909088684408440844684494A463180000000000000000 +0C8C:00000000000000001B0024802480008001000110011000E00000000000000000 +0C8D:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE738E6DB673B66DB6738E7FFE0000 +0C8E:00000000000000003E000180004000202010510842883C700000000000000000 +0C8F:000000000000200010000980064000202010510842883C700000000000000000 +0C90:00000000000000001C602290410800082008510842883C700000000000000000 +0C91:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE73EE6DCE71EE7DEE73C67FFE0000 +0C92:000000000000000030004800480010202010410842883C700000000000000000 +0C93:000000001800200030004800480010202010410842883C700000000000000000 +0C94:7FE0021002107C90312048C0480010202010410842883C700000000000000000 +0C95:0000000000C000201FC0020002001FC00880104010400F800000000000000000 +0C96:00000000000000000E2011102088208401040F0412840C780000000000000000 +0C97:000000E0001000103FE004400820082008200820082008200000000000000000 +0C98:0000000007000080FF200010020860289030622027201AC00200000000000000 +0C99:000000000000000033F04C08483011002010410842883C700000000000000000 +0C9A:000000000030000860F09080904020E0404084408A4071800000000000000000 +0C9B:000000000030000860F090809040E040804084408E4075800400000000000000 +0C9C:0000000000000000318048404F80100020404220452038C00000000000000000 +0C9D:00000E0001003E001C902248224822482248224822E81D500040000000000000 +0C9E:00000000000000001B6024902490008000801D0022001D000100010000000000 +0C9F:0000000000000000102018C0242058104010401022101DE00000000000000000 +0CA0:000000000000038000401F80070008801040124010400F800000000000000000 +0CA1:000000000000038000407FC0212040E040104210251018E00000000000000000 +0CA2:000000000000038000407FC0212040E04010421027101AE00200000000000000 +0CA3:000000000000000018E025104208400820884148415030E00000000000000000 +0CA4:0000000001C000200FC00020001010D0112008D0041003E00000000000000000 +0CA5:000000000000038000401F80070008801240104012400F800200000000000000 +0CA6:000000000000038000401F80070008801040104012400D800000000000000000 +0CA7:000000000000038000401F80070008801040104012400F800200000000000000 +0CA8:0000000000E0001007E000400020001018102410222011C00000000000000000 +0CA9:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61CE6DB661C66DF66DCE7FFE0000 +0CAA:0000000000E000101FE00000202051105008610842883C700000000000000000 +0CAB:0000000000E000101FE00000202051105008610842883D700100000000000000 +0CAC:000000000000000030C04820081010082008210812900C600000000000000000 +0CAD:000000000070000831F04840082010102008210812900D600100000000000000 +0CAE:00000000038000403F8000004090A048A048C4488A4871B00000000000000000 +0CAF:00000000000000C0002033C048908448844884488A4871B00000000000000000 +0CB0:000000000000038000401F80070008801040104010400F800000000000000000 +0CB1:00000000000000000C60129032983FF82008210812900C600000000000000000 +0CB2:000000000000000001003080484070204020402020401F800000000000000000 +0CB3:000000000060001001E03080484070204020402020401F800900060000000000 +0CB4:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE63B66DB663866DF663F67FFE0000 +0CB5:0000000000000030000803F0202050105008610842883C700000000000000000 +0CB6:0000000001C000207FC030804840442024200420044003800000000000000000 +0CB7:0000000000C000200FC00000202051105008612842983C740000000000000000 +0CB8:00000000018000400F800000042000100E101110209020600000000000000000 +0CB9:0000000000E0001007E0008002A005D008880888049003600000000000000000 +0CBA:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE63866DB663866DB663B67FFE0000 +0CBB:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE638E6DB6638E6DB6638E7FFE0000 +0CBC:0000000000000000000000000000000000000000000000000000000002400000 +0CBD:000000000000000003800400080004000300008010800F000000000000000000 +0CBE:000000000000001C000200010001000500090009000600000000000000000000 +0CBF:00180024001C0008003000000000000000000000000000000000000000000000 +0CC0:00180024001C0008003200050005000600040004000400040002000000000000 +0CC1:0000000000000000000000040002000100010001000900060000000000000000 +0CC2:00000000000000000000000600090009000B000B000B00080008003000000000 +0CC3:000000000000000000000000000000000000000C000200010001000D000D0006 +0CC4:00000000000000000000007E0021001500160010000C00020001000D000D0006 +0CC5:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE71866FBE6F866FF671867FFE0000 +0CC6:0018002400040FF8000000000000000000000000000000000000000000000000 +0CC7:0018002400040FF8000200050005000600040004000400040002000000000000 +0CC8:0018002400040FF8000000000000000000040002000400020001000D000D0006 +0CC9:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE71CE6FB66FC66FF671CE7FFE0000 +0CCA:0018002400040FF80000000600090009000B000B000B00080008003000000000 +0CCB:0063009300120FE20001000700090009000B000B000B00080008003000000000 +0CCC:00FC001200E20001000100010001000500090009000600000000000000000000 +0CCD:00000003000400FE000500020000000000000000000000000000000000000000 +0CCE:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE71866FBE6F8E6FBE71867FFE0000 +0CCF:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +0CD0:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE63CE6DB66DB66DB663CE7FFE0000 +0CD1:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE63EE6DCE6DEE6DEE63C67FFE0000 +0CD2:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE63866DF66D866DBE63867FFE0000 +0CD3:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE638E6DF66DC66DF6638E7FFE0000 +0CD4:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE63B66DB66D866DF663F67FFE0000 +0CD5:0000000000000000000200050005000600040004000400040002000000000000 +0CD6:0000000000000000000000000000000000040002000400020001000D000D0006 +0CD7:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE63866DF66DEE6DDE63DE7FFE0000 +0CD8:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE63CE6DB66DCE6DB663CE7FFE0000 +0CD9:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE63CE6DB66DC66DF663CE7FFE0000 +0CDA:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE63866DB66D866DB663B67FFE0000 +0CDB:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE638E6DB66D8E6DB6638E7FFE0000 +0CDC:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE63C66DBE6DBE6DBE63C67FFE0000 +0CDD:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE638E6DB66DB66DB6638E7FFE0000 +0CDE:00000000000000000C60129032982C682008200811100EE00000000000000000 +0CDF:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE63866DBE6D8E6DBE63BE7FFE0000 +0CE0:00000000004000400F80620E9111711111137115999566620000000000000000 +0CE1:00000000000000001B0024802480010001400088009000600000000000000000 +0CE2:00000000000000000000000000000000000000000000000006C0092008200418 +0CE3:0000000000000000000000000000000000000000000000000D80124C1050083C +0CE4:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61B66FB663866FF661F67FFE0000 +0CE5:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61866FBE63866FF661867FFE0000 +0CE6:0000000000000000018002400420042004200420024001800000000000000000 +0CE7:000000000000000003C004200810081008100810042002400000000000000000 +0CE8:000000000000000000E00110013000D000100010001007E00000000000000000 +0CE9:00000000000000000F00128012400C400E40114810900F600000000000000000 +0CEA:0000000000000000062009100E10042003C00420042003C00000000000000000 +0CEB:000000000000000000181C24232410F807E0191022101C600000000000000000 +0CEC:000000000000100008003E00490049004600400020001FF80000000000000000 +0CED:0000000000000000018002400140008007000800080007F00000000000000000 +0CEE:00000000000000000610092011201E1010101010082007C00000000000000000 +0CEF:000000000000000007FE0800100010000FC0100010000E000000000000000000 +0CF0:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61CE6FB663B66FB66FCE7FFE0000 +0CF1:AAAA000180001FF188200441828001018280044188201FF18000000180005555 +0CF2:AAAA000180000001800000019C702289A28822899C7000018000000180005555 +0CF3:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE618E6FF663C66FF66F8E7FFE0000 +0CF4:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61B66FB663866FF66FF67FFE0000 +0CF5:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61866FBE63866FF66F867FFE0000 +0CF6:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61CE6FBE638E6FB66FCE7FFE0000 +0CF7:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61866FF663EE6FDE6FDE7FFE0000 +0CF8:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61CE6FB663CE6FB66FCE7FFE0000 +0CF9:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61CE6FB663C66FF66FCE7FFE0000 +0CFA:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61866FB663866FB66FB67FFE0000 +0CFB:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +0CFC:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +0CFD:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE618E6FB663B66FB66F8E7FFE0000 +0CFE:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61866FBE638E6FBE6F867FFE0000 +0CFF:00007FFE73C66DBE6DBE6DBE73C67FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +0D00:0180024002400180000000000000000000000000000000000000000000000000 +0D01:000001800990042003C000000000000000000000000000000000000000000000 +0D02:0000000000000000000000000006000900090006000000000000000000000000 +0D03:0000000000000000000200050005000200000002000500050002000000000000 +0D04:0000000000000000010009201110111011101010082007C00000000000000000 +0D05:00000000000000001E3021487C84A284BC9CA2A4A2A41C980000000000000000 +0D06:00000000000000001E32214D7C8DA295BCA5A2A5A2A51C990001003E00000000 +0D07:000000000000000018C025204210421072104A104A10321000103FE040003FE0 +0D08:000000000000000074508AA88AA88AA8CA08AA48AA30420002007C0080007C00 +0D09:00000000000000000F00128012400C4000400F8010001FC00000000000000000 +0D0A:00000000000000001C502AA82AA812A802081C4820303E000000000000000000 +0D0B:00000000000000000C6012901C701010082007C0082007C00000000000000000 +0D0C:00000000000000000C6012902128214839482548254819300000000000000000 +0D0D:00007FFE738E6DB66DB66DB6738E7FFE7FFE738E6DB66DB66DB6738E7FFE0000 +0D0E:0000000000F001087128892889285FE801280128012800C00000000000000000 +0D0F:0000000001E0021072888A888A885F9002880288028801300000000000000000 +0D10:00000000000E00117395AC55AC554AFD08150015001500080000000000000000 +0D11:00007FFE738E6DB66DB66DB6738E7FFE7FFE7BEE73CE7BEE7BEE71C67FFE0000 +0D12:0000000000000000078008401020201020103C2022101C600000000000000000 +0D13:00000000000000000E181124210420842084310428A413180000000000000000 +0D14:00000000000000001C2822544254415441046224511826000000000000000000 +0D15:00000000000000000380044004401FF02448244824481B900000000000000000 +0D16:00000000000000001E0421044084404470444844488431FC0000000000000000 +0D17:000000000000000000000000187020884104410422081C700000000000000000 +0D18:00000000000000000072008A388A448A448A2FFA008200FE0000000000000000 +0D19:000000000000000018E025104208420872704A084A0832700000000000000000 +0D1A:000000000000000000080008000806080908010802083FF80000000000000000 +0D1B:00000000000000000030004800840C84128C029404543FC80000000000000000 +0D1C:00000000000000003EE041107110491030203FF040C83F300000000000000000 +0D1D:00000000000000003C245E22A522A52299228122412400D80000000000000000 +0D1E:000000000000000018C025384254429472944A944A9432600000000000000000 +0D1F:0000000000000000000007C00800080007C00020002007C00000000000000000 +0D20:000000000000000007C008201010101010101010082007C00000000000000000 +0D21:000000000000000000000C4812442244224422441244024801B0000000000000 +0D22:00000000000000000000189024A824A824A824A8049804900360000000000000 +0D23:000000000000000019B0264842484248424872484A4832500000000000000000 +0D24:00000000000000000CF013082284244424242424224411880000000000000000 +0D25:000000000000000040F04108410841084108410841087FF80000000000000000 +0D26:000000000000000007C00820102011C010201020122009C00000000000000000 +0D27:000000000000000009201110210821082108210811100EE00000000000000000 +0D28:00000000000000000EE011102108210821082108111009200000000000000000 +0D29:00000000000000000CE013102108390825082508251019200000000000000000 +0D2A:000000000000000000080008000800083808440844082FF80000000000000000 +0D2B:000000000000000000700088008800883888448844882FF80000000000000000 +0D2C:00000000000000001988264842484248424872484A4832780000000000000000 +0D2D:000000000000000007C00820102011C0120011C010200BC00000000000000000 +0D2E:000000000000000007E0091010881088110812081C081FF80000000000000000 +0D2F:000000000000000011882A44242424242444228413080CF00000000000000000 +0D30:00000000000000000F0010C020A0211021082108209010600000000000000000 +0D31:000000000000000007C008201010101010101010101008200000000000000000 +0D32:00000000000000000C081208210821083F08200820083FF80000000000000000 +0D33:00000000000000000FC01020202038C02420182000200FC010000FF000000000 +0D34:000000000000000010E011101110092007C0010011000E000000000000000000 +0D35:00000000000000001E0821084088408840884088410823F80000000000000000 +0D36:00000000000000000870108821042104211C212412240C180000000000000000 +0D37:0000000000000000031804A804C803883888448844882FF80000000000000000 +0D38:0000000000000000361049088888888888888888889048E00000000000000000 +0D39:000000000000000000E001100208020872088A0889105F200000000000000000 +0D3A:000000000000000010001000100010001000100010001FF80100010000000000 +0D3B:0080008000800080008000000000000000000000000000000000000000000000 +0D3C:000C00120012000C000000000000000000000000000000000000000000000000 +0D3D:0000001000280028004000400040004000400040004002800280010000000000 +0D3E:0000000000000000000600090001000100010001000900060000000000000000 +0D3F:0000000600090009000100010001000100010001000100010000000000000000 +0D40:0006000900070001000100010001000100010001000100010000000000000000 +0D41:00000000000000000000000600090001000200040004000A0004000000000000 +0D42:00000000000000000000000600090001000200040004000A00150011000E0000 +0D43:0000000000000000000100020004000400040002000100010001001F0021001E +0D44:000000000000000000010002000400040004000200010001000100DD012500FE +0D45:00007FFE738E6DB66DB66DB6738E7FFE7FFE6D866DBE61867DF67D867FFE0000 +0D46:00000000000000007000880088008800C800A800A80048001000000000000000 +0D47:000000000000000060009000E00080008000E000900060000000000000000000 +0D48:0000000000000000D800B400B400B40090009000D800D8000000000000000000 +0D49:00007FFE738E6DB66DB66DB6738E7FFE7FFE6DCE6DB661C67DF67DCE7FFE0000 +0D4A:00000000000000007006880988018801C801A801A80948061000000000000000 +0D4B:000000000000000060069009E00180018001E001900960060000000000000000 +0D4C:0000000000000000700A881588158801C802A804A80048001000000000000000 +0D4D:001200210021001E000000000000000000000000000000000000000000000000 +0D4E:0000000000000180018000000000000000000000000000000000000000000000 +0D4F:00000000000000002660499050885C885288528852884C8820101FE000000000 +0D50:00007FFE738E6DB66DB66DB6738E7FFE7FFE61CE6FB661B67DB661CE7FFE0000 +0D51:00007FFE738E6DB66DB66DB6738E7FFE7FFE61EE6FCE61EE7DEE61C67FFE0000 +0D52:00007FFE738E6DB66DB66DB6738E7FFE7FFE61866FF661867DBE61867FFE0000 +0D53:00007FFE738E6DB66DB66DB6738E7FFE7FFE618E6FF661C67DF6618E7FFE0000 +0D54:00000000000010001600090014801280110012C01C301FF80000000000000000 +0D55:00000000001011282AA024A024A024A022A013200CC000000000000000000000 +0D56:000000001800240004E04510491039200FC0110011000E000000000000000000 +0D57:0000000000000000000A00150015000100020004000000000000000000000000 +0D58:0000000000E000100A481248224822482248224812500DA00000000000000000 +0D59:00000000000000001C0022304148414847F04900490026000000000000000000 +0D5A:00000000000000000DF01248222822282228222812480AF80000000000000000 +0D5B:00000000000000007F1042084408440844084408421041E00000000000000000 +0D5C:000000000000004011202AA02AA02AA02AA02AA02AA024401000000000000000 +0D5D:000000000000001004482AA82AA82AA82AA82AA82AA851100000000000000000 +0D5E:0000000000000000180024C042A842A84F10520052004C002000000000000000 +0D5F:00000000000000000300048009404A24AA2AAA2A492404C00000000000000000 +0D60:0000000000000000186024905868400820101FE02010249020101FE000000000 +0D61:000000000000000018C025384254429472944A944A9432640004004800300000 +0D62:0000000000000000000000000000000000000000000000001EF0393825481930 +0D63:000000000000000000000000000000000000000000001EF039382548183800F0 +0D64:00007FFE738E6DB66DB66DB6738E7FFE7FFE73B66FB663866DF673F67FFE0000 +0D65:00007FFE738E6DB66DB66DB6738E7FFE7FFE73866FBE63866DF673867FFE0000 +0D66:00000000000000000000000003C004200420042003C000000000000000000000 +0D67:000000000000000000F00108010801080108010801081FF820001F0000000000 +0D68:00000000000000001E0021004080408040804080410023F80000000000000000 +0D69:00000000000000001B00248044404440444044404440247C0000000000000000 +0D6A:000000000000000006000100010007C009201120112010C00000000000000000 +0D6B:000000000000000007E008101188124812881248124808500780000000000000 +0D6C:00000000000000001B1824A44442444244424442444224420004000800100000 +0D6D:000000000000000003C004200810100810081E0811080E080010002001C00000 +0D6E:00000000000000001E0821084088408840884088410823F80008000800700000 +0D6F:00000000000000000380008000801BE024904490449024600000000000000000 +0D70:00000000000000000000024802440244024402440244024803B002003C000000 +0D71:00000000000000000EE0111021082108210811080010022001C0000000000000 +0D72:00000000000000001B84244A442A44FE4520452044A024400000000000000000 +0D73:00000000000000000000000000000FF810001C0012000C000000000000000000 +0D74:000001C0002000100FD010202050209038902490249018600000000000000000 +0D75:000000E0001000080C6812902128214839482548254819300000000000000000 +0D76:000000000000000000F001480228022872288A488B885FF80000000000000000 +0D77:0000000000000000033004CA048A049C64A894A894A89E904000000000000000 +0D78:000000000000000008BE554955455545554555455549A25F0000000000000000 +0D79:00000000000000001B802440442044FE4520452044A024400000000000000000 +0D7A:00000030004800041B742488449844A864A854A854A824900000000000000000 +0D7B:000000E0001000080C6812902128214821482148114809300000000000000000 +0D7C:000000C00020001007D008201050109010901090089004600000000000000000 +0D7D:000000E0001000081CE823104528494849484948494826300000000000000000 +0D7E:000000E00010000800681090212821482148214812480C300000000000000000 +0D7F:0000038004400020072008A008A03FF848A448A4489837000000000000000000 +0D80:00007FFE738E6DB66DB66DB6738E7FFE7FFE73CE6DB673B66DB673CE7FFE0000 +0D81:09900990042003C0000000000000000000000000000000000000000000000000 +0D82:0000000000000000000000000006000900090006000000000000000000000000 +0D83:0000000000000000000600090009000600000006000900090006000000000000 +0D84:00007FFE738E6DB66DB66DB6738E7FFE7FFE73B66DB673866DF673F67FFE0000 +0D85:0000000000000000031804A800680FF010201020082007E00020002000200020 +0D86:000000000000000018D8256403427F828102810241243F180100010001000100 +0D87:00000000000000000C4012A001BE3FC24084408420841F840084008400840083 +0D88:00000000000000000C4012A001BE3FC44088409E20821F840084008400840083 +0D89:000000000000000007C008201110129011100E60001000E00000000000000000 +0D8A:0800150009200250042007000880104010401040088007000000000000000000 +0D8B:00000000000000000180024000200FE01000101010200FC00000000000000000 +0D8C:0000000000000000062C092A00923F824012404C40803F000000000000000000 +0D8D:0000000000000000618092400A267BE9802184278A4971868001000000000000 +0D8E:00000000000000004200A500149277AD8089889B952D62120000000000000000 +0D8F:00000000000000001C382A5442424E72500A481227E410080FF0000000000000 +0D90:000000000000000071C0AAA08A36BBB5A0A9A0A19F2940463F80000000000000 +0D91:03800480038000800C8002403E2010202020202010400F800000000000000000 +0D92:03B804A403B800A00CA002603E2010202020202010400F800000000000000000 +0D93:001C0024001C00040064701289F18481B301B9018882707C0000000000000000 +0D94:0000000000003FE0401001C861A450244FC4400421081EF00000000000000000 +0D95:00007FC020203FF0401001C861A450244FC4400421081EF00000000000000000 +0D96:0000000000007F0080800E400D6CC16ABE5280428892770C0007000000000000 +0D97:00007FFE738E6DB66DB66DB6738E7FFE7FFE73866DF671EE7DDE73DE7FFE0000 +0D98:00007FFE738E6DB66DB66DB6738E7FFE7FFE73CE6DB671CE7DB673CE7FFE0000 +0D99:00007FFE738E6DB66DB66DB6738E7FFE7FFE73CE6DB671C67DF673CE7FFE0000 +0D9A:0000000000000000600093E08C100FC8102820284448BB900000000000000000 +0D9B:00000000000000001FE020100F081088204820482C901CE00100000000000000 +0D9C:000000000000000000000000278048408E208220444038800000000000000000 +0D9D:00000000000000003080494005407D8010402020272018C00000000000000000 +0D9E:000000003F8040401C201A1002103E104010401022201DC00000000000000000 +0D9F:00000000000000001C382A4442424E725012482227C41F880000000000000000 +0DA0:000000001F0020800C4002203E2010202020202010400F800000000000000000 +0DA1:00000020004000800CB002C83E78104C2032200210040FF80000000000000000 +0DA2:00000008001000200C2002703EA810A82070202010400F800000000000000000 +0DA3:0000000000000070E088900427C2782286428182C992B66C0000000000000000 +0DA4:000000000000000039F056288404987CA680C180C944B638000800100010000C +0DA5:000000000000000038385454848299BEA1E0C240C44C38340004000800080006 +0DA6:00000004000800101D902A3842544C545038601060201FC00000000000000000 +0DA7:00000000000000001F80204000201C202020202010400F800000000000000000 +0DA8:01C0024001C0004000400020001020104010401022201DC00000000000000000 +0DA9:000000001FC020200C1002083E0810082008200811100EE00000000000000000 +0DAA:01C0024001C00040184004207C1020104010401022201DC00000000000000000 +0DAB:0000000000F801001E002600390C355239B24152820CFC000000000000000000 +0DAC:000000001FC0202007100A88108813081408180811100EE00000000000000000 +0DAD:0000000000000000600093E08C100FC8102820284048BF900000000000000000 +0DAE:01C0024001C0004010402020401040104010401020201FC00000000000000000 +0DAF:0000000000000000000000C00120002007E00400043003D00010002000200018 +0DB0:000000000FC01020201000080C0810082008200811100EE00000000000000000 +0DB1:00000000000000E0611092088C040F04108420844124BE180000000000000000 +0DB2:00007FFE738E6DB66DB66DB6738E7FFE7FFE63866DF663866DBE63867FFE0000 +0DB3:00000000000000000380054008200BE00C000C00022001C00040008000800060 +0DB4:000000000000000000000610012803680C1810040C1803E00000000000000000 +0DB5:000000E0012000E000200620011003080C0810040C1803E00000000000000000 +0DB6:00000000000000001FE020100F081088204820482C901C600000000000000000 +0DB7:00000000000000003070488805047DC41044208421081E100000000000000000 +0DB8:0000000000001FE0201001C81A281AA8162813C8081007E00000000000000000 +0DB9:0000000000001FE0201001C81B281BE817E81008099006600000000000000000 +0DBA:000000000000000000000080014001C01040202022201DC00000000000000000 +0DBB:0000010001000200040007000880104010401040088007000000000000000000 +0DBC:00007FFE738E6DB66DB66DB6738E7FFE7FFE63C66DBE63BE6DBE63C67FFE0000 +0DBD:00000000000000000F801040272022482188201010200FC00000000000000000 +0DBE:00007FFE738E6DB66DB66DB6738E7FFE7FFE63866DBE638E6DBE63867FFE0000 +0DBF:00007FFE738E6DB66DB66DB6738E7FFE7FFE63866DBE638E6DBE63BE7FFE0000 +0DC0:00000000000000001FC02020461041100F101010082007C00000000000000000 +0DC1:00000000000000000000000027C048208E10825044A038400000000000000000 +0DC2:0000000000000C4002A00EE0102023502490231010200FC00000000000000000 +0DC3:00000000000000003080494005407D801040202022201DC00000000000000000 +0DC4:00000000000000003070488805041DC41044208421081E100000000000000000 +0DC5:000000000000000006C0092008201FE0180A17F210040FF80000000000000000 +0DC6:0000000000000000000000000EE011102008200810100C600000000000000000 +0DC7:00007FFE738E6DB66DB66DB6738E7FFE7FFE71866FF66FEE6FDE71DE7FFE0000 +0DC8:00007FFE738E6DB66DB66DB6738E7FFE7FFE71CE6FB66FCE6FB671CE7FFE0000 +0DC9:00007FFE738E6DB66DB66DB6738E7FFE7FFE71CE6FB66FC66FF671CE7FFE0000 +0DCA:000E0009000E0008000800080008000000000000000000000000000000000000 +0DCB:00007FFE738E6DB66DB66DB6738E7FFE7FFE718E6FB66F8E6FB6718E7FFE0000 +0DCC:00007FFE738E6DB66DB66DB6738E7FFE7FFE71C66FBE6FBE6FBE71C67FFE0000 +0DCD:00007FFE738E6DB66DB66DB6738E7FFE7FFE718E6FB66FB66FB6718E7FFE0000 +0DCE:00007FFE738E6DB66DB66DB6738E7FFE7FFE71866FBE6F8E6FBE71867FFE0000 +0DCF:0000000000000000000000000006000900010001000900060000000000000000 +0DD0:0000000000000000003E00020004000400040004000400040004000300000000 +0DD1:000000000000000000000000000E000200040002000400040004000300000000 +0DD2:07F0080808080410000000000000000000000000000000000000000000000000 +0DD3:07F0084808480430000000000000000000000000000000000000000000000000 +0DD4:00000000000000000000000000000000000000000000000000000C1010100FF0 +0DD5:00007FFE738E6DB66DB66DB6738E7FFE7FFE63866DBE6D866DF663867FFE0000 +0DD6:00000000000000000000000000000000000000000000000000000C1010D00F30 +0DD7:00007FFE738E6DB66DB66DB6738E7FFE7FFE63866DF66DEE6DDE63DE7FFE0000 +0DD8:0000000000000000000000000006000900010007000900060001000000000000 +0DD9:00000000000000004000A000900090008000E000E000E0000000000000000000 +0DDA:000E0009000E00084008A008900890008000E000E000E0000000000000000000 +0DDB:00000000000000004800B400900090009000FC00FC00FC000000000000000000 +0DDC:00000000000000004000A000900690098001E001E009E0060000000000000000 +0DDD:000E0009000E00084008A008900E90098001E001E009E0060000000000000000 +0DDE:00000000000000004004A008900A900D8001E001E009E0060000000000000000 +0DDF:000000000000000000040008000A000D00010001000900060000000000000000 +0DE0:00007FFE738E6DB66DB66DB6738E7FFE7FFE61CE6FB663B66FB661CE7FFE0000 +0DE1:00007FFE738E6DB66DB66DB6738E7FFE7FFE61EE6FCE63EE6FEE61C67FFE0000 +0DE2:00007FFE738E6DB66DB66DB6738E7FFE7FFE61866FF663866FBE61867FFE0000 +0DE3:00007FFE738E6DB66DB66DB6738E7FFE7FFE618E6FF663C66FF6618E7FFE0000 +0DE4:00007FFE738E6DB66DB66DB6738E7FFE7FFE61B66FB663866FF661F67FFE0000 +0DE5:00007FFE738E6DB66DB66DB6738E7FFE7FFE61866FBE63866FF661867FFE0000 +0DE6:0000000007000880108010800FE00090009001E0008000800080008000800080 +0DE7:00000000000000001FC02020479049504950465020901F100000000000000000 +0DE8:00000000000000001F8C20524F2252A252A24CA221241E280000000000000000 +0DE9:00000000000000003E2C41529C92AA92AA92929244A238AC0000000000000000 +0DEA:0008001008201C702AA83298044018302008200810100FE00000000000000000 +0DEB:0000010003800540064000800300040004100260018000800080007000000000 +0DEC:0000000000000000000000000EE011102C7C228A12920C600000000000000000 +0DED:00000000000000000FE0102012400C4000400080008000840084007800000000 +0DEE:0000004000800100020004C00920121010101010082007C00000000000000000 +0DEF:07E00890086004001F8C20524F2252A252A24CA221241E280000000000000000 +0DF0:00007FFE738E6DB66DB66DB6738E7FFE7FFE61CE6FB663B66FB66FCE7FFE0000 +0DF1:00007FFE738E6DB66DB66DB6738E7FFE7FFE61EE6FCE63EE6FEE6FC67FFE0000 +0DF2:0000000000000000000000000012002D0009001B002D00120000000000000000 +0DF3:000000000000000000040008000A000D00010005000B00060000000000000000 +0DF4:0000000000000000000000000AA04AA4555425485014C0060000000000000000 +0DF5:00007FFE738E6DB66DB66DB6738E7FFE7FFE61866FBE63866FF66F867FFE0000 +0DF6:00007FFE738E6DB66DB66DB6738E7FFE7FFE61CE6FBE638E6FB66FCE7FFE0000 +0DF7:00007FFE738E6DB66DB66DB6738E7FFE7FFE61866FF663EE6FDE6FDE7FFE0000 +0DF8:00007FFE738E6DB66DB66DB6738E7FFE7FFE61CE6FB663CE6FB66FCE7FFE0000 +0DF9:00007FFE738E6DB66DB66DB6738E7FFE7FFE61CE6FB663C66FF66FCE7FFE0000 +0DFA:00007FFE738E6DB66DB66DB6738E7FFE7FFE61866FB663866FB66FB67FFE0000 +0DFB:00007FFE738E6DB66DB66DB6738E7FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +0DFC:00007FFE738E6DB66DB66DB6738E7FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +0DFD:00007FFE738E6DB66DB66DB6738E7FFE7FFE618E6FB663B66FB66F8E7FFE0000 +0DFE:00007FFE738E6DB66DB66DB6738E7FFE7FFE61866FBE638E6FBE6F867FFE0000 +0DFF:00007FFE738E6DB66DB66DB6738E7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +0E00:00007FFE73866DBE6D8E6DBE73867FFE7FFE73CE6DB66DB66DB673CE7FFE0000 +0E01:0000000000003C426222222222220000 +0E02:00000000000064642444444444380000 +0E03:000000000000527212222222221C0000 +0E04:0000000000003C42425A7A6242420000 +0E05:000000000000344A425A7A6242420000 +0E06:000000000000527212222222726C0000 +0E07:0000000000000C0C04044424140C0000 +0E08:0000000000003C42021A1A0A0A0C0000 +0E09:0000000000003844046464242E360000 +0E0A:000000000002323412222222221C0000 +0E0B:000000000002527412222222221C0000 +0E0C:0000000000003945254545456F6D0000 +0E0D:000000000000324A2A4A4A4A6E620E00 +0E0E:0000000000003C4262222222667A1600 +0E0F:0000000000003C42622222226A6E1A00 +0E10:0000000000001E201C021A1A06022A16 +0E11:000000000000547A1222222222220000 +0E12:0000000000002955457575556F4D0000 +0E13:000000000000324A2A4A4A4A6F6B0000 +0E14:0000000000003C42425A5A4A72420000 +0E15:000000000000344A425A5A4A72420000 +0E16:0000000000003C426222222232320000 +0E17:000000000000646A3222222222220000 +0E18:0000000000003C407824242424180000 +0E19:0000000000006464244444444E360000 +0E1A:000000000000323212222222221C0000 +0E1B:000000000002023232122222221C0000 +0E1C:00000000000069694949494949360000 +0E1D:00000000000101696949494949360000 +0E1E:00000000000069692949494949360000 +0E1F:00000000000101696929494949360000 +0E20:0000000000003C426222222262620000 +0E21:000000000000626222222222726C0000 +0E22:000000000000626242324242423C0000 +0E23:0000000000003C40780404040C0C0000 +0E24:0000000000003C426222222232320200 +0E25:0000000000003C42021A262232320000 +0E26:0000000000003C426222222262620200 +0E27:0000000000003844040404040C0C0000 +0E28:000000000002023C425A7A6242420000 +0E29:0000000000006262222A2F22221C0000 +0E2A:0000000000033C42021A262232320000 +0E2B:0000000000006666242A322222220000 +0E2C:000000000001016A6929494949360000 +0E2D:0000000000003C4202626242427E0000 +0E2E:0000000000033C7A02626242427E0000 +0E2F:0000000000006C740404040404040000 +0E30:00000000000000343800343800000000 +0E31:000000313E0000000000000000000000 +0E32:00000000000038440404040404040000 +0E33:0000006060001C220202020202020000 +0E34:0000003C420000000000000000000000 +0E35:0000003A460000000000000000000000 +0E36:0000003E460000000000000000000000 +0E37:0000003A4E0000000000000000000000 +0E38:00000000000000000000000000000602 +0E39:00000000000000000000000000001A0E +0E3A:00000000000000000000000000000C0C +0E3B:00007FFE73866DBE6D8E6DBE73867FFE7FFE638E7DB6718E7DB6638E7FFE0000 +0E3C:00007FFE73866DBE6D8E6DBE73867FFE7FFE63C67DBE71BE7DBE63C67FFE0000 +0E3D:00007FFE73866DBE6D8E6DBE73867FFE7FFE638E7DB671B67DB6638E7FFE0000 +0E3E:00007FFE73866DBE6D8E6DBE73867FFE7FFE63867DBE718E7DBE63867FFE0000 +0E3F:00000000087C2A2A2A3C2A2A2A7C0800 +0E40:00000000000010101010101018180000 +0E41:00000000000024242424242436360000 +0E42:0000003E417C04040404040406060000 +0E43:00000038445434040404040406060000 +0E44:0000006C140404040404040406060000 +0E45:00000000000038440404040404040404 +0E46:0000000000006C720202020202020408 +0E47:023C40546C0000000000000000000000 +0E48:04040400000000000000000000000000 +0E49:18091E00000000000000000000000000 +0E4A:28556600000000000000000000000000 +0E4B:040E0400000000000000000000000000 +0E4C:010E0C00000000000000000000000000 +0E4D:00060600000000000000000000000000 +0E4E:030406080C0000000000000000000000 +0E4F:00000000000000003C425A5A423C0000 +0E50:000000000000003C42424242423C0000 +0E51:000000000000003C42425A3A023C0000 +0E52:000000000040404A56525A5A423C0000 +0E53:00000000000000344A4A4A4272720000 +0E54:000000000002023C40404C4C483E0000 +0E55:00000000001A163C40404C4C483E0000 +0E56:000000000000402C12020232323C0000 +0E57:000000000002022A5A4A4A4A6A6C0000 +0E58:000000000000033C40404656526E0000 +0E59:000000000002021A3450484864640000 +0E5A:0000000000006D750505050505050000 +0E5B:0000000000000000000000001800240040004000400242A22552180C00000000 +0E5C:00007FFE73866DBE6D8E6DBE73867FFE7FFE61C66FBE61BE7DBE61C67FFE0000 +0E5D:00007FFE73866DBE6D8E6DBE73867FFE7FFE618E6FB661B67DB6618E7FFE0000 +0E5E:00007FFE73866DBE6D8E6DBE73867FFE7FFE61866FBE618E7DBE61867FFE0000 +0E5F:00007FFE73866DBE6D8E6DBE73867FFE7FFE61866FBE618E7DBE61BE7FFE0000 +0E60:00007FFE73866DBE6D8E6DBE73867FFE7FFE73CE6FB663B66DB673CE7FFE0000 +0E61:00007FFE73866DBE6D8E6DBE73867FFE7FFE73EE6FCE63EE6DEE73C67FFE0000 +0E62:00007FFE73866DBE6D8E6DBE73867FFE7FFE73866FF663866DBE73867FFE0000 +0E63:00007FFE73866DBE6D8E6DBE73867FFE7FFE738E6FF663C66DF6738E7FFE0000 +0E64:00007FFE73866DBE6D8E6DBE73867FFE7FFE73B66FB663866DF673F67FFE0000 +0E65:00007FFE73866DBE6D8E6DBE73867FFE7FFE73866FBE63866DF673867FFE0000 +0E66:00007FFE73866DBE6D8E6DBE73867FFE7FFE73CE6FBE638E6DB673CE7FFE0000 +0E67:00007FFE73866DBE6D8E6DBE73867FFE7FFE73866FF663EE6DDE73DE7FFE0000 +0E68:00007FFE73866DBE6D8E6DBE73867FFE7FFE73CE6FB663CE6DB673CE7FFE0000 +0E69:00007FFE73866DBE6D8E6DBE73867FFE7FFE73CE6FB663C66DF673CE7FFE0000 +0E6A:00007FFE73866DBE6D8E6DBE73867FFE7FFE73866FB663866DB673B67FFE0000 +0E6B:00007FFE73866DBE6D8E6DBE73867FFE7FFE738E6FB6638E6DB6738E7FFE0000 +0E6C:00007FFE73866DBE6D8E6DBE73867FFE7FFE73C66FBE63BE6DBE73C67FFE0000 +0E6D:00007FFE73866DBE6D8E6DBE73867FFE7FFE738E6FB663B66DB6738E7FFE0000 +0E6E:00007FFE73866DBE6D8E6DBE73867FFE7FFE73866FBE638E6DBE73867FFE0000 +0E6F:00007FFE73866DBE6D8E6DBE73867FFE7FFE73866FBE638E6DBE73BE7FFE0000 +0E70:00007FFE73866DBE6D8E6DBE73867FFE7FFE61CE7DB67BB677B677CE7FFE0000 +0E71:00007FFE73866DBE6D8E6DBE73867FFE7FFE61EE7DCE7BEE77EE77C67FFE0000 +0E72:00007FFE73866DBE6D8E6DBE73867FFE7FFE61867DF67B8677BE77867FFE0000 +0E73:00007FFE73866DBE6D8E6DBE73867FFE7FFE618E7DF67BC677F6778E7FFE0000 +0E74:00007FFE73866DBE6D8E6DBE73867FFE7FFE61B67DB67B8677F677F67FFE0000 +0E75:00007FFE73866DBE6D8E6DBE73867FFE7FFE61867DBE7B8677F677867FFE0000 +0E76:00007FFE73866DBE6D8E6DBE73867FFE7FFE61CE7DBE7B8E77B677CE7FFE0000 +0E77:00007FFE73866DBE6D8E6DBE73867FFE7FFE61867DF67BEE77DE77DE7FFE0000 +0E78:00007FFE73866DBE6D8E6DBE73867FFE7FFE61CE7DB67BCE77B677CE7FFE0000 +0E79:00007FFE73866DBE6D8E6DBE73867FFE7FFE61CE7DB67BC677F677CE7FFE0000 +0E7A:00007FFE73866DBE6D8E6DBE73867FFE7FFE61867DB67B8677B677B67FFE0000 +0E7B:00007FFE73866DBE6D8E6DBE73867FFE7FFE618E7DB67B8E77B6778E7FFE0000 +0E7C:00007FFE73866DBE6D8E6DBE73867FFE7FFE61C67DBE7BBE77BE77C67FFE0000 +0E7D:00007FFE73866DBE6D8E6DBE73867FFE7FFE618E7DB67BB677B6778E7FFE0000 +0E7E:00007FFE73866DBE6D8E6DBE73867FFE7FFE61867DBE7B8E77BE77867FFE0000 +0E7F:00007FFE73866DBE6D8E6DBE73867FFE7FFE61867DBE7B8E77BE77BE7FFE0000 +0E80:00007FFE73866DBE6D8E6DBE73867FFE7FFE73CE6DB673B66DB673CE7FFE0000 +0E81:0000000000005C222222222222620000 +0E82:0000000000003C420418204C52220000 +0E83:00007FFE73866DBE6D8E6DBE73867FFE7FFE738E6DF673C66DF6738E7FFE0000 +0E84:0000000000003C424232424242320000 +0E85:00007FFE73866DBE6D8E6DBE73867FFE7FFE73866DBE73866DF673867FFE0000 +0E86:00000000000052AA8A12224A4A340000 +0E87:000000000000182C1404040404040438 +0E88:0000000000003C42021A260202020000 +0E89:0000000000003C4202622222225C0000 +0E8A:0000000000003C42640810204C720202 +0E8B:00007FFE73866DBE6D8E6DBE73867FFE7FFE738E6DB6738E6DB6738E7FFE0000 +0E8C:000000000000344A620418204C720202 +0E8D:000000000000324242324242423C0000 +0E8E:000000000000629292529292925C0000 +0E8F:0000000000003242423242425A240000 +0E90:0000000000003C424242422252220202 +0E91:000000000000A4EAAA2A4A4A4A320000 +0E92:00000000000052AAAA8A8A8A8A540000 +0E93:000000000000344A4A4A4A4A4A2A0000 +0E94:0000000000003C424242424252220000 +0E95:000000000000245A4242424242220000 +0E96:0000000000005C222222222222320202 +0E97:0000000000008C525252525252220000 +0E98:0000000000003E407C0262425A240000 +0E99:000000000000225222222222225C0000 +0E9A:000000000000225222424242423C0000 +0E9B:000002020202225222424242423C0000 +0E9C:000000000001668682828292926C0000 +0E9D:000002020202628282828292926C0000 +0E9E:00000000000042A242828292926C0000 +0E9F:00000202020242A242828292926C0000 +0EA0:0000000000006C925212121212320000 +0EA1:000000000000222222222222225C0000 +0EA2:000002020202324242224242423C0000 +0EA3:0000000000003C42403C0262423C0000 +0EA4:00007FFE73866DBE6D8E6DBE73867FFE7FFE61B66DB661866DF66DF67FFE0000 +0EA5:0000000000003C42020202324A240000 +0EA6:00007FFE73866DBE6D8E6DBE73867FFE7FFE61CE6DBE618E6DB66DCE7FFE0000 +0EA7:0000000000003C4202020242423C0000 +0EA8:00000000000038555E44344444340000 +0EA9:00000000000024542444555E44380000 +0EAA:0000000000003A44467A02324A440000 +0EAB:00000000000096494949494949310000 +0EAC:000000000000324C403C424252340000 +0EAD:0000000000003C4242463A0244380000 +0EAE:000000000000324C403C0262423C0000 +0EAF:00000000000022261A02040408081010 +0EB0:00000000000022523C0022523C000000 +0EB1:000000627C0000000000000000000000 +0EB2:00000000000018241404040404040000 +0EB3:000040A040000C120A02020202020000 +0EB4:00000038440000000000000000000000 +0EB5:0000003C460000000000000000000000 +0EB6:00000038540000000000000000000000 +0EB7:0000003C560000000000000000000000 +0EB8:00000000000000000000000000001808 +0EB9:00000000000000000000000000001A0C +0EBA:00000000000000000000000000000010 +0EBB:0000007C620000000000000000000000 +0EBC:0000000000000000000000000000324C +0EBD:0000000000003A241804040404644438 +0EBE:00007FFE73866DBE6D8E6DBE73867FFE7FFE63866DBE638E6DBE63867FFE0000 +0EBF:00007FFE73866DBE6D8E6DBE73867FFE7FFE63866DBE638E6DBE63BE7FFE0000 +0EC0:0000000000000C101010101018180000 +0EC1:000000000000668888888888CCCC0000 +0EC2:0000304C221804040404040406060000 +0EC3:00003844543404040404040406060000 +0EC4:0000804C340404040404040406060000 +0EC5:00007FFE73866DBE6D8E6DBE73867FFE7FFE71866FBE6F866FF671867FFE0000 +0EC6:0000000000006C525222020202020408 +0EC7:00007FFE73866DBE6D8E6DBE73867FFE7FFE71866FF66FEE6FDE71DE7FFE0000 +0EC8:10101000000000000000000000000000 +0EC9:32143800000000000000000000000000 +0ECA:29560000000000000000000000000000 +0ECB:081C0800000000000000000000000000 +0ECC:021C1800000000000000000000000000 +0ECD:00000814080000000000000000000000 +0ECE:00007FFE73866DBE6D8E6DBE73867FFE7FFE71866FBE6F8E6FBE71867FFE0000 +0ECF:00007FFE73866DBE6D8E6DBE73867FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +0ED0:0000000000003C4242424242423C0000 +0ED1:0000000000003C42425A3A0204380000 +0ED2:000004040408102040404046423C0000 +0ED3:00001028140A442222222222225C0000 +0ED4:000002020408102040404C4C483E0000 +0ED5:0000020A1408102040404C4C483E0000 +0ED6:00001028140A244242425252522C0000 +0ED7:0000000000005C222222222222620202 +0ED8:0000000000002C52524242260A142C30 +0ED9:000000000000324A4A4A4A4A4A240000 +0EDA:00007FFE73866DBE6D8E6DBE73867FFE7FFE63866DB66D866DB663B67FFE0000 +0EDB:00007FFE73866DBE6D8E6DBE73867FFE7FFE638E6DB66D8E6DB6638E7FFE0000 +0EDC:00000000000099555555555555260000 +0EDD:0000000000009955555555555D2E0000 +0EDE:000000000000B8444444555E44C40000 +0EDF:00000000000064848464959E84780000 +0EE0:00007FFE73866DBE6D8E6DBE73867FFE7FFE61CE6FB663B66FB661CE7FFE0000 +0EE1:00007FFE73866DBE6D8E6DBE73867FFE7FFE61EE6FCE63EE6FEE61C67FFE0000 +0EE2:00007FFE73866DBE6D8E6DBE73867FFE7FFE61866FF663866FBE61867FFE0000 +0EE3:00007FFE73866DBE6D8E6DBE73867FFE7FFE618E6FF663C66FF6618E7FFE0000 +0EE4:00007FFE73866DBE6D8E6DBE73867FFE7FFE61B66FB663866FF661F67FFE0000 +0EE5:00007FFE73866DBE6D8E6DBE73867FFE7FFE61866FBE63866FF661867FFE0000 +0EE6:00007FFE73866DBE6D8E6DBE73867FFE7FFE61CE6FBE638E6FB661CE7FFE0000 +0EE7:00007FFE73866DBE6D8E6DBE73867FFE7FFE61866FF663EE6FDE61DE7FFE0000 +0EE8:00007FFE73866DBE6D8E6DBE73867FFE7FFE61CE6FB663CE6FB661CE7FFE0000 +0EE9:00007FFE73866DBE6D8E6DBE73867FFE7FFE61CE6FB663C66FF661CE7FFE0000 +0EEA:00007FFE73866DBE6D8E6DBE73867FFE7FFE61866FB663866FB661B67FFE0000 +0EEB:00007FFE73866DBE6D8E6DBE73867FFE7FFE618E6FB6638E6FB6618E7FFE0000 +0EEC:00007FFE73866DBE6D8E6DBE73867FFE7FFE61C66FBE63BE6FBE61C67FFE0000 +0EED:00007FFE73866DBE6D8E6DBE73867FFE7FFE618E6FB663B66FB6618E7FFE0000 +0EEE:00007FFE73866DBE6D8E6DBE73867FFE7FFE61866FBE638E6FBE61867FFE0000 +0EEF:00007FFE73866DBE6D8E6DBE73867FFE7FFE61866FBE638E6FBE61BE7FFE0000 +0EF0:00007FFE73866DBE6D8E6DBE73867FFE7FFE61CE6FB663B66FB66FCE7FFE0000 +0EF1:00007FFE73866DBE6D8E6DBE73867FFE7FFE61EE6FCE63EE6FEE6FC67FFE0000 +0EF2:00007FFE73866DBE6D8E6DBE73867FFE7FFE61866FF663866FBE6F867FFE0000 +0EF3:00007FFE73866DBE6D8E6DBE73867FFE7FFE618E6FF663C66FF66F8E7FFE0000 +0EF4:00007FFE73866DBE6D8E6DBE73867FFE7FFE61B66FB663866FF66FF67FFE0000 +0EF5:00007FFE73866DBE6D8E6DBE73867FFE7FFE61866FBE63866FF66F867FFE0000 +0EF6:00007FFE73866DBE6D8E6DBE73867FFE7FFE61CE6FBE638E6FB66FCE7FFE0000 +0EF7:00007FFE73866DBE6D8E6DBE73867FFE7FFE61866FF663EE6FDE6FDE7FFE0000 +0EF8:00007FFE73866DBE6D8E6DBE73867FFE7FFE61CE6FB663CE6FB66FCE7FFE0000 +0EF9:00007FFE73866DBE6D8E6DBE73867FFE7FFE61CE6FB663C66FF66FCE7FFE0000 +0EFA:00007FFE73866DBE6D8E6DBE73867FFE7FFE61866FB663866FB66FB67FFE0000 +0EFB:00007FFE73866DBE6D8E6DBE73867FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +0EFC:00007FFE73866DBE6D8E6DBE73867FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +0EFD:00007FFE73866DBE6D8E6DBE73867FFE7FFE618E6FB663B66FB66F8E7FFE0000 +0EFE:00007FFE73866DBE6D8E6DBE73867FFE7FFE61866FBE638E6FBE6F867FFE0000 +0EFF:00007FFE73866DBE6D8E6DBE73867FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +0F00:18671C5D4955534B3901000000000000 +0F01:0000005C4854524A3901000000000000 +0F02:1000100018004430BA487C487830840088309C48224802300600610012000C00 +0F03:1000100018004430BA487C487830840088789C00223002480648613012000C00 +0F04:0000000006C1314E310E000000000000 +0F05:000000000C02621C621C000000000000 +0F06:0000000006C1314E310E000C04040404 +0F07:000000000815C4390000000000000000 +0F08:0000324C006C10381010101010100000 +0F09:0000001E2101020E110E110100000000 +0F0A:000F304E5141424E514E5140310F0000 +0F0B:00000018180000000000000000000000 +0F0C:00000018180000000000000000000000 +0F0D:00000018180808080808080808080000 +0F0E:00000036361212121212121212120000 +0F0F:00000018180018080808080808080000 +0F10:00000018001800180808080808080000 +0F11:00000066001800180808080808080000 +0F12:0814493E0077001A2C08080808080800 +0F13:00000000180018A5A518001800000000 +0F14:00000018242418003C00182424180000 +0F15:00FFE781A581FFB18DE3130905030301 +0F16:00027F827F8260027FFE7FFE01827F827F8200027FFE00827FFE40027FFE0002 +0F17:001100890449224A1252129413FC57145814582457C4500837F0180010000000 +0F18:0000000000000000000200010019002500260018019002600240018009000600 +0F19:00000000000000000018080808080800 +0F1A:00000000000018242418000000000000 +0F1B:00000000000022555522000000000000 +0F1C:00000000081414082255552200000000 +0F1D:00000000000000140814000000000000 +0F1E:00000000000000552255000000000000 +0F1F:00000000000000255225000000000000 +0F20:0000000E112121221C00000000000000 +0F21:000000060B1101020408000000000000 +0F22:0000001E2101020E1101000000000000 +0F23:0000001E21020E01021E210000000000 +0F24:00000000122C40417E00000000000000 +0F25:0000002244443C040201000000000000 +0F26:0000004044282711110E000000000000 +0F27:0000000101314A123C00000000000000 +0F28:00000008102070080402010100000000 +0F29:0000001C2224494E4040000000000000 +0F2A:0000000C16220F740810000000000000 +0F2B:0000003C420F741C2202000000000000 +0F2C:0000003C42041F72043C420000000000 +0F2D:00000000122C46497E20400000000000 +0F2E:000000224E553C440201000000000000 +0F2F:00000040452A2719112E400000000000 +0F30:0000000101314F723C00000000000000 +0F31:000000081020720D3442010100000000 +0F32:0000031D2A34694E4040000000000000 +0F33:0000001D22464A543840000000000000 +0F34:00000000181800101C04101C04000000 +0F35:00000000000000000000000010552A1C +0F36:00000000181800666600181800000000 +0F37:00000000000000000000000018242418 +0F38:334A525C000000000000000000000000 +0F39:07040200000000000000000000000000 +0F3A:000000000000008009401490C428389001400080000000000000000000000000 +0F3B:0000000000000200052012502846123805000200000000000000000000000000 +0F3C:00000202040808182020202020204000 +0F3D:000020201008080C0202020202020100 +0F3E:00000000000000000C02020202020201 +0F3F:00000000000000003040404040404080 +0F40:0000003F156505010101000000000000 +0F41:0000003F494D4B414100000000000000 +0F42:0000003F496959090101000000000000 +0F43:0000003F496959091F204E3111010000 +0F44:0000001E204078440201000000000000 +0F45:0000003E08084E31110E000000000000 +0F46:0000003E08083E494936000000000000 +0F47:0000001E203C407C4201000000000000 +0F48:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE6DCE6DB661CE7DB67DCE7FFE0000 +0F49:00000038444E11110101020000000000 +0F4A:0000007F013D43414040000000000000 +0F4B:0000003F213A2C222F30200000000000 +0F4C:0000003C02011F214040400000000000 +0F4D:0000003C02011F205E604E3111010000 +0F4E:0000003F081C12322C20200000000000 +0F4F:0000007F405E61410101000000000000 +0F50:0000003F21170D113D03010000000000 +0F51:0000001E20407C420101010000000000 +0F52:0000001E20407C421F204E3111010000 +0F53:0000003F040E12130D01010000000000 +0F54:0000003321417D430101000000000000 +0F55:0000003323457D430101000000000000 +0F56:0000001F21417D430101000000000000 +0F57:0000001F21417D431F204E3111010000 +0F58:0000007D09314D4B3101000000000000 +0F59:0001013E08084E31110E000000000000 +0F5A:0001013E08083E494936000000000000 +0F5B:0001011E2038407C4201000000000000 +0F5C:0001011E2038407C421F204E31110100 +0F5D:00000031494F09111D13010000000000 +0F5E:0000001C224C52534D21010000000000 +0F5F:0000003F011F013D0301000000000000 +0F60:000000384444481C0201000000000000 +0F61:0000006B494949350301000000000000 +0F62:0000003E081C02010100000000000000 +0F63:0000003945490D030100000000000000 +0F64:0000000F11114F311101010000000000 +0F65:0000003C22223D232220200000000000 +0F66:0000007B112965030100000000000000 +0F67:0000001E204E31110101000000000000 +0F68:0000005D4955534B3101000000000000 +0F69:0000003F156505013925243D22242000 +0F6A:0000007C083844020202000000000000 +0F6B:0000007E545350404040000000000000 +0F6C:0000001F080E11202020000000000000 +0F6D:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE738E6FB663B66DB6738E7FFE0000 +0F6E:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE73866FBE638E6DBE73867FFE0000 +0F6F:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE73866FBE638E6DBE73BE7FFE0000 +0F70:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61CE7DB67BB677B677CE7FFE0000 +0F71:00000000000000000000182804000000 +0F72:70480400000000000000000000000000 +0F73:7048040000000000003F4242041C2202 +0F74:0000000000000000000000000040241C +0F75:00000000000000003E4242040C42221C +0F76:704804000000000000720A0602000000 +0F77:70480400000000027A063F42041C2200 +0F78:70480400000000000000000022525E02 +0F79:70480400000000325E023F42041C2200 +0F7A:E0180400000000000000000000000000 +0F7B:CC220000000000000000000000000000 +0F7C:CF281000000000000000000000000000 +0F7D:45EE1000000000000000000000000000 +0F7E:10281000000000000000000000000000 +0F7F:00000018242418001824241800000000 +0F80:1C244000000000000000000000000000 +0F81:1C24400000000000003F4242041C2202 +0F82:08080C225D3F00000000000000000000 +0F83:0814493E000000000000000000000000 +0F84:00000000000000000004060203010101 +0F85:0000000000384444081C12120A020201 +0F86:10101024180000000000000000000000 +0F87:10101010101000000000000000000000 +0F88:00003F800A0004000A003F800000000000000000000000000000000000000000 +0F89:00364900000000000000000000000000 +0F8A:0000000000000000EEAAAAAABA000000 +0F8B:000000000000000001023A4A4A2E0000 +0F8C:00493600000000000000000000000000 +0F8D:0000000000000000007F22140814227F +0F8E:00000000000000000000000000364900 +0F8F:00000000000000000000000000493600 +0F90:000000000000003F1525010000000000 +0F91:00000000000000003F494D4B41000000 +0F92:000000000000003F4979090000000000 +0F93:000000000000003F4979011E204E3111 +0F94:00000000000000001E207C4201000000 +0F95:00000000000000003E084E310E000000 +0F96:00000000000000003E083E4936000000 +0F97:00000000000000001E2038407E410000 +0F98:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE73CE6DB671CE7DB673CE7FFE0000 +0F99:000000000000000038440E1101020000 +0F9A:00000000000000007F013D4341400000 +0F9B:00000000000000007E4478447E400000 +0F9C:00000000000000003C021F2140400000 +0F9D:00000000000000003C021F207E510100 +0F9E:0000000000001E081C324C4000000000 +0F9F:00000000000000007F405E6141010000 +0FA0:00000000000000003F110F113F010000 +0FA1:00000000000000001E207C4201010000 +0FA2:00000000000000001E207C421F204E31 +0FA3:0000000000003C081C26190100000000 +0FA4:0000000000000033217D030100000000 +0FA5:0000000000000027497D030100000000 +0FA6:000000000000001F217D030100000000 +0FA7:000000000000001F217D031F204E3111 +0FA8:0000000000000079314D330100000000 +0FA9:00000000003C0A094C32120C00000000 +0FAA:00000000000000003E093E4949360000 +0FAB:00000000001C2239417C420000000000 +0FAC:00000000001C2239417C421E204E3111 +0FAD:00000000000000000000000001030503 +0FAE:00000000000000001C224C534D210100 +0FAF:00000000000000003F011F013F010000 +0FB0:00000000000000003844481C02010000 +0FB1:0000000000000000010101121C090600 +0FB2:00000000000000000101013945030100 +0FB3:00000000000000003945491D03010000 +0FB4:000000000000000007092F1109010100 +0FB5:000000000000000038243D2224202000 +0FB6:00000000000000007B29456301000000 +0FB7:00000000000000001E204E3111010000 +0FB8:00000000000000005D49555331010000 +0FB9:000000000000003F15650539243D2220 +0FBA:000000000000000031494F091D030100 +0FBB:00000000000000006B49493503010000 +0FBC:00000000000000003E081C0201010000 +0FBD:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE638E6DB663B66DB6638E7FFE0000 +0FBE:00000000004122140814224100000000 +0FBF:00000000004922144914224900000000 +0FC0:00000000001C224141221C0000000000 +0FC1:000000000000001C22221C0000000000 +0FC2:000000001C021A242458403800000000 +0FC3:000000001C224955492A1C0000000000 +0FC4:0000006B14081C2222223E417F000000 +0FC5:0D600280010003800C601930145022882108155011100D600380010002800D60 +0FC6:00000000000000000000000000000000000045442AA82AA812900FE015502548 +0FC7:0D600280010003808C6299325454A28AA10A555491128D620380010002800D60 +0FC8:00000D60028001003FF824481290129009200920044004400280028001000000 +0FC9:0000000003800440092014501390282827C8200820081010183007C000000000 +0FCA:000007C008203018200840049E06A126C106C90AC0F2400420083018082007C0 +0FCB:000007C0082030183C0C424C810A911281E281028202424422083218092007C0 +0FCC:000007C00820303821287C2482428182892283028482487C29083818082007C0 +0FCD:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE718E6FB66FB66FB6718E7FFE0000 +0FCE:00000000000000522552000000000000 +0FCF:00000000001408140055225500000000 +0FD0:000000001F00208040440F381080008001000700088000000000000000000000 +0FD1:003C4202041C221C2218240408040200 +0FD2:000000007C38100000007C3810000000 +0FD3:0000000006C1310E0000000000000000 +0FD4:000000000C02621C0000000000000000 +0FD5:0000000041FC410041004100410041007FFC010401040104010401047F040000 +0FD6:000000007F04010401040104010401047FFC4100410041004100410041FC0000 +0FD7:0000000041FC410041004920410041007FFC010401040924010401047F040000 +0FD8:000000007F04010401040924010401047FFC4100410049204100410041FC0000 +0FD9:0000000000004000600040000000100218061002000002100738000000000000 +0FDA:0000000000000002000600020000400860184008000008401CE0000000000000 +0FDB:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE638E6DB66D8E6DB6638E7FFE0000 +0FDC:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE63C66DBE6DBE6DBE63C67FFE0000 +0FDD:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE638E6DB66DB66DB6638E7FFE0000 +0FDE:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE63866DBE6D8E6DBE63867FFE0000 +0FDF:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE63866DBE6D8E6DBE63BE7FFE0000 +0FE0:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61CE6FB663B66FB661CE7FFE0000 +0FE1:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61EE6FCE63EE6FEE61C67FFE0000 +0FE2:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61866FF663866FBE61867FFE0000 +0FE3:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE618E6FF663C66FF6618E7FFE0000 +0FE4:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61B66FB663866FF661F67FFE0000 +0FE5:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61866FBE63866FF661867FFE0000 +0FE6:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61CE6FBE638E6FB661CE7FFE0000 +0FE7:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61866FF663EE6FDE61DE7FFE0000 +0FE8:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61CE6FB663CE6FB661CE7FFE0000 +0FE9:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61CE6FB663C66FF661CE7FFE0000 +0FEA:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61866FB663866FB661B67FFE0000 +0FEB:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE618E6FB6638E6FB6618E7FFE0000 +0FEC:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61C66FBE63BE6FBE61C67FFE0000 +0FED:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE618E6FB663B66FB6618E7FFE0000 +0FEE:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61866FBE638E6FBE61867FFE0000 +0FEF:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61866FBE638E6FBE61BE7FFE0000 +0FF0:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61CE6FB663B66FB66FCE7FFE0000 +0FF1:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61EE6FCE63EE6FEE6FC67FFE0000 +0FF2:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61866FF663866FBE6F867FFE0000 +0FF3:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE618E6FF663C66FF66F8E7FFE0000 +0FF4:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61B66FB663866FF66FF67FFE0000 +0FF5:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61866FBE63866FF66F867FFE0000 +0FF6:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61CE6FBE638E6FB66FCE7FFE0000 +0FF7:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61866FF663EE6FDE6FDE7FFE0000 +0FF8:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61CE6FB663CE6FB66FCE7FFE0000 +0FF9:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61CE6FB663C66FF66FCE7FFE0000 +0FFA:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61866FB663866FB66FB67FFE0000 +0FFB:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +0FFC:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +0FFD:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE618E6FB663B66FB66F8E7FFE0000 +0FFE:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61866FBE638E6FBE6F867FFE0000 +0FFF:00007FFE73866DBE6D8E6DBE73BE7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +1000:00000000000000000000018C02520421042104210242000C0000000000000000 +1001:0000000000000000000000780084000201F2010A008400780000000000000000 +1002:0000000000000000000000780084010201020102008400480000000000000000 +1003:00000000000000000000060C01420221042104210252018C0000000000000000 +1004:0000000000000000000000780084010001000100008400780000000000000000 +1005:0000000000000000000000780084014201420142008400780000000000000000 +1006:00000000000000000000018C02520021002103A10252018C0000000000000000 +1007:0000000000000000000000F001080214020A0200010800F00000000000000000 +1008:0000000000000000000000710089014501450145008900790009000900050002 +1009:0000000000000000000000E00110000800080008011001E001000101010100FE +100A:00000000000000000000018C02420021002100210252038C02000201020101FE +100B:0000000000000000000000780084010001000084007C000400F800800078000E +100C:00000000000000000000007800840100010001000084007C000400C4010400F8 +100D:000000000000000000000078008400020002008400F80080007C000400040006 +100E:0000000000000000000001880044008201020102008400780000000000000000 +100F:0000000000000000000003760489045104510451028A00F80000000000000000 +1010:00000000000000000000018C02520421042104210242018C0000000000000000 +1011:00000000000000000000018C02520421042104210252018C0000000000000000 +1012:0000000000000000000000F00108000800300008010800F00000000000000000 +1013:000000000000000000000078008401020102017A008400780000000000000000 +1014:00000000000000000000001C00200020001C00C2012200FC0020002000000000 +1015:0000000000000000000000480084010201020102008400780000000000000000 +1016:000000000000000000000058009401120112010A008400780000000000000000 +1017:0000000000000000000000000084017A01020102008400780000000000000000 +1018:00000000000000000000018C02520021002100210242018C0000000000000000 +1019:000000000000000000000048008401020102017A008400780000000000000000 +101A:00000000000000000000000C02420421042104210252018C0000000000000000 +101B:0000000000000000000000F00108020403C40224011400F40004000400040007 +101C:00000000000000000000018C02420421042104210212018C0000000000000000 +101D:0000000000000000000000780084010201020102008400780000000000000000 +101E:00000000000000000000018C02420021002100210252018C0000000000000000 +101F:00000000000000000000000C02520421042104210242018C0000000000000000 +1020:0000000000000000000000780084010001000084007C000400F8008000840078 +1021:00000000000000000000019C0262004300850049024A018C0000000000000000 +1022:00000000000000000000018C02520421042102210142060C0000000000000000 +1023:00000000000000000000018C02520421042104210202000001DC022202240107 +1024:000600090008000400020199026504250425042502450005000507E5080507F9 +1025:0000000000000000000000F00108000400040004010801F001000100010400F8 +1026:0070008800A800D80070000000F8010800040004010801F001000100010400F8 +1027:0000000000000000000000780084017801000178008400780000000000000000 +1028:0000000000000000007800840132014A010A0112010C01000102010200840078 +1029:3FFE4001400140004000471C488240414041404148A3471D4001400140013FFE +102A:07C608290828080408000B36288948898889B889D89A6B6808080808080807F0 +102B:0F00108010800080008000800080008000800080008000800000000000000000 +102C:0000000000000000000003E00410000800080008001001E00000000000000000 +102D:0030004800480030000000000000000000000000000000000000000000000000 +102E:0070008800A80088007000000000000000000000000000000000000000000000 +102F:0000000000000000000002000200020002000200020002000200020002000380 +1030:00000000000000000000050005000500050005000500050005000500050005C0 +1031:0000000000000000000000003000400040007000500030000000000000000000 +1032:0100008000400020000000000000000000000000000000000000000000000000 +1033:007000A800D800A8007000000000000000000000000000000000000000000000 +1034:0008001000200040000000000000000000000000000000000000000000000000 +1035:0070008000B800C8007000000000000000000000000000000000000000000000 +1036:0000000200050002000000000000000000000000000000000000000000000000 +1037:0000000000000000000000000000000000000000000000000000001000280010 +1038:0000000000000000000001000280010000000100028001000000000000000000 +1039:0000000000000000000000000000000000000000000000000000002000700020 +103A:000C001200100008000000000000000000000000000000000000000000000000 +103B:0000000000000000000004000400040004000400040084008400840064001C00 +103C:07FC0802080208000800080008000800080008000800080008000800080407F8 +103D:000000000000000000000000000000000000000000000000000800140022001C +103E:0000000000000000000000000000000000000000000000200020002000600000 +103F:000000000000000000000124029200490049004902DA01240000000000000000 +1040:0000000000000000000003600410080808080808041003600000000000000000 +1041:0000000000000000000003C00420001000100010042003C00000000000000000 +1042:0000000000000000000000200020002000200020002000200020002008400780 +1043:0000000000000000000003C00420001000100010042003C00100008000400020 +1044:0000000000000000000003C00420080008000800042003C00080010002000400 +1045:0000000000000000000007C00A200A10041000100010001000100010042003C0 +1046:000001E002100400040004600480048004700410021001E00000000000000000 +1047:0000000000000000000007800840002000200020004000800100020002000180 +1048:0000000000000000000003C004200A1009100910052003000000000000000000 +1049:0000000000000000000001E002100410047004800480046004000400021001E0 +104A:0000000000000000000000800080008000800080008000800000000000000000 +104B:0000000000000000000002400240024002400240024002400000000000000000 +104C:0180024002000100000003C0042000100010042007C0040003E00020042003C0 +104D:000000180024002000100788084810281E28112808A807A800280628080807F0 +104E:00000000000000000000007800840100010001000084007C0004000400040004 +104F:001800240020001000080F6410942F1420142F1410940F140000000000000000 +1050:0000000000000000000000780084010201320102008400480000000000000000 +1051:0000000000000000000000480084010201320102008400780000000000000000 +1052:0000000000000000000000060088010401020102008400780000000000000000 +1053:0000000000000000000001860048008401020102008400780000000000000000 +1054:00000000000000000000007800840142013E0100008400780000000000000000 +1055:00000000000000000000007800840142013E01000092006C0000000000000000 +1056:0000000000000000000000600080004000200020084007800000000000000000 +1057:0000000000000000000000300040002000100010092006C00000000000000000 +1058:0000000000000000000000000000000000000000000000000030005000640038 +1059:000000000000000000000000000000000000000000000000006000A000CA0074 +105A:0000000000000000000000780084010001000084007800200050001000200010 +105B:0000000000000000000000E20112022A02160202011200F200120012000A0004 +105C:00000000000000000000007800840132014A0132008400780000000000000000 +105D:000000000000000000000048008401020102017A0086007A000200C2010200FC +105E:0000000000000000000000000000000000000000000000000010003800540030 +105F:0000000000000000000000000000000000000000000000000010003000440038 +1060:0000000000000000000000000000000000000000000000000010002000400078 +1061:0000000000000000000000780084010201E20112008A007A0002000A000A001A +1062:0000000000000000000003800080008000800080008000800000000000000000 +1063:0000000000000000000003800440002000200020044007800400040004000400 +1064:0000000000000000000007000100010001000100010001C00000000000000000 +1065:0000000000000000000000780084000200020002008400780000000000000000 +1066:0000000000000000000000480084010201020102008400780000001000100030 +1067:0000000000000000000000800080008001800280028001000000000000000000 +1068:0000010002800100000000800080008000800080008003800000000000000000 +1069:0000000000000000000001800240004001800200024001800000000000000000 +106A:0000000000000000000000800080008000800080028001000000000000000000 +106B:0000000000000000000001000280008000800080008000800000000000000000 +106C:0000000000000000000001000100010001000100014000800000000000000000 +106D:0000000000000000000001800240020001800040024001800000000000000000 +106E:0000000000000000000001B60249022902290249015200000000000000000000 +106F:00000000000000000000000C02520421042104210242018C0000000800080018 +1070:00000000000000000000060C01420221042104210252018C0000000800080018 +1071:0000008801540088000000000000000000000000000000000000000000000000 +1072:0030004800400030000000000000000000000000000000000000000000000000 +1073:0020005000880104000000000000000000000000000000000000000000000000 +1074:0000004800480030000000000000000000000000000000000000000000000000 +1075:0000000000000000000000780084010201020082004401880000000000000000 +1076:00000000000000000000013801440082000200FA008400780000000000000000 +1077:0000000000000000000000780084010A010A008A004401800000000000000000 +1078:00000000000000000000018C02520421042104210212018C0000000000000000 +1079:00000000000000000000018C02520621052104A10292018C0000000000000000 +107A:00000000000000000000018C0242042104210421023201AC0020002000200038 +107B:00000000000000000000018C0252042304250429024A018C0000000000000000 +107C:00000000000000000000018C02520020002001FC0252018C0000000000000000 +107D:00000000000000000000060C015202200420042E0252018C0000000000000000 +107E:00000000000000000000060C015202200420042E0252018C0000000800080018 +107F:00000000000000000000006800A4012201220142008400780000000000000000 +1080:00000000000000000000018C02420021002103A10252018C0000000000000000 +1081:000000000000000000000078008401020102012200A4006000200020002000E0 +1082:0000000000000000000000000000000000000000000000000020004000480030 +1083:00000000000000000000070001000100010001000100010001000100010001C0 +1084:0000000000000000000030004800400030004000480030000000000000000000 +1085:0070008800400088007000000000000000000000000000000000000000000000 +1086:0020005000300010002000000000000000000000000000000000000000000000 +1087:0000000000000000000000000000000000000100028001800080010000000000 +1088:0000000000000000000001000280010000000100028001800080010000000000 +1089:0000000000000000000000000000000000000100028001000000000000000000 +108A:0000000000000000000002000540038000000200054003800000000000000000 +108B:0000000000000000000000000000010002800100000000000000000000000000 +108C:0000000000000000000000000000022005500220000000000000000000000000 +108D:000000000000000000000000000000000000000000000000000001FE00000000 +108E:0000000000000000000000780084017A01020102008400780000000000000000 +108F:0000000000000000000001000280010000000100028003000200010000000000 +1090:0000000000000000000003C00420042004200420042003C00000000000000000 +1091:0000000000000000000003000500010001000100014001800000000000000000 +1092:0000000000000000000005C00620002000400080010001000000000000000000 +1093:0000000000000000008000800100010002000380044004400000000000000000 +1094:000000000000000000800080018001800280028004A004C00000000000000000 +1095:0000000000000000000000400040004007E00840084007800000000000000000 +1096:0000000000000000000007800840084007E00040004000400000000000000000 +1097:0000000000000000000007C00040008001000200040007C00000000000000000 +1098:0000000000000000000004200420024003C00420042003C00000000000000000 +1099:0000000000000000000003C00420042003C00240042004200000000000000000 +109A:0000000000000000000001000280010000000000000000000000000000000000 +109B:0000010002800180008001000000000000000000000000000000000000000000 +109C:0000000000000000000003800540020000000380054002000000000000000000 +109D:0000001C00220002000200020000000000000000000000000000000000000000 +109E:00000100028001000000070001000100010001000100010001000100010001C0 +109F:001800240020001000080F041084204420442044104400440044004400440038 +10A0:00000080FE22408080808082463A0000 +10A1:000000006888888898680808080E0200 +10A2:00000000F888880808080808080E0200 +10A3:0000000080FE12103844828244380000 +10A4:000000007C4444040404040404040000 +10A5:00000000F88888080E0A080808080000 +10A6:0000000080E02020202C322222221C00 +10A7:00000000305090909E92909050300000 +10A8:000000407C0404040404040404040000 +10A9:000000004040586444444C3404040000 +10AA:0000000000E0A020202C322222221C00 +10AB:00000080F80808087E8A8A8888700000 +10AC:000000047C4040407C44444444440000 +10AD:00000000708888888888888A8A740000 +10AE:00000080E222222222222222221C0000 +10AF:000000407A122222261A020202020000 +10B0:000000001010141A1292909090600000 +10B1:00000000404040404844444444380000 +10B2:000000007C4242427C404040407E0200 +10B3:00000000708888888888888C8A720000 +10B4:000000007C9292927C10101010100000 +10B5:00000000101010507C14101010100000 +10B6:000000003C4242424242424242420000 +10B7:000000002444444444444C3404040000 +10B8:00000000344444444C34044444380000 +10B9:00000000404040407C44444444440000 +10BA:000000001C22424040404042221C0408 +10BB:00000000080808083E4A4A4848300000 +10BC:000000007C4242427C40407844484040 +10BD:0000000000003844442010080442423C +10BE:0000000044444444447C4040407C0400 +10BF:00000080FE2222141408141422224080 +10C0:00000000F090901010101212120C0000 +10C1:00000000404078444640404040400000 +10C2:00000040784402020202024244380000 +10C3:00000000344444444C34040404040000 +10C4:00000000828282824428101010100000 +10C5:000000001C12121C107C949690600000 +10C6:00007FFE7BCE73B67BB67BB671CE7FFE7FFE71CE6FBE6F8E6FB671CE7FFE0000 +10C7:0000000000001C22220408102042423C +10C8:00007FFE7BCE73B67BB67BB671CE7FFE7FFE71CE6FB66FCE6FB671CE7FFE0000 +10C9:00007FFE7BCE73B67BB67BB671CE7FFE7FFE71CE6FB66FC66FF671CE7FFE0000 +10CA:00007FFE7BCE73B67BB67BB671CE7FFE7FFE71866FB66F866FB671B67FFE0000 +10CB:00007FFE7BCE73B67BB67BB671CE7FFE7FFE718E6FB66F8E6FB6718E7FFE0000 +10CC:00007FFE7BCE73B67BB67BB671CE7FFE7FFE71C66FBE6FBE6FBE71C67FFE0000 +10CD:000000007C04040810102020407C0000 +10CE:00007FFE7BCE73B67BB67BB671CE7FFE7FFE71866FBE6F8E6FBE71867FFE0000 +10CF:00007FFE7BCE73B67BB67BB671CE7FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +10D0:0000000000000010100C0202423C0000 +10D1:00000000203010103C424242423C0000 +10D2:000000000030484808083C424242423C +10D3:000000000000002C525252524C201C02 +10D4:000000003C424202020202020242423C +10D5:0000000000003C4242021C020242423C +10D6:0000000020505054381C1212120C0000 +10D7:00000000000000344A4A4A4A4A320000 +10D8:000000000000003C4242424242240000 +10D9:0000000000000C0202021C020242423C +10DA:000000000000002A5555554142403E01 +10DB:000000003C424202023E4242423C0000 +10DC:00000000023C4040407C4242423C0000 +10DD:00000000000000285454545444240000 +10DE:0000000020180402021C0242423C0000 +10DF:00000000000000060A5252220222221C +10E0:00000000043840685454545444240000 +10E1:00000000404040485048444444380000 +10E2:000000001824243C66665A424242423C +10E3:000000000000006C121202020222221C +10E4:00000000000000344A4A4A4A3402021C +10E5:00000000040C0404041C240404044438 +10E6:00000000000000285454544448403804 +10E7:0000000000000022424242261A42423C +10E8:0000000028545404041C242424180000 +10E9:00000000384478405C62424242420000 +10EA:0000000000004C4242425C424242423C +10EB:0000000004020202023E4242423C0000 +10EC:0000000028545440407C444428281010 +10ED:00000000081828080819261D04044438 +10EE:00000000404040485078444444380000 +10EF:00000000000000004224181824422040 +10F0:0000100C02120C02120C0242423C0000 +10F1:0000504C42524C42524C4242423C0000 +10F2:0000000000003C4242424224187E0000 +10F3:0000000000003E0204081C020242423C +10F4:0000000008100C0202021C020242423C +10F5:00000000003844443E043E4444380000 +10F6:00000000201010103854543810101008 +10F7:0000000000003C42420408102042423C +10F8:0000000000000044424242645842423C +10F9:00000000003C424242423C101012120C +10FA:0000000000003C4242300C1C22400000 +10FB:00000000000060600006060060600000 +10FC:0000021C20203C22221C000000000000 +10FD:0000000000003C42422010080442423C +10FE:00000000000000C0221C2222221C0000 +10FF:0000000000000000001C2222221C0000 +1100:000000007F800080008000800080010001000200040018006000000000000000 +1101:0000000000007B80088008800880088011001100220044000800000000000000 +1102:000020002000200020003F800000000000000000000000000000000000000000 +1103:00003F802000200020003F800000000000000000000000000000000000000000 +1104:00003B802200220022003B800000000000000000000000000000000000000000 +1105:000000003F8000803F8020003F80000000000000000000000000000000000000 +1106:00003F802080208020803F800000000000000000000000000000000000000000 +1107:0000208020803F8020803F800000000000000000000000000000000000000000 +1108:00002A802A803B802A803B800000000000000000000000000000000000000000 +1109:00000400040004000A0011000000000000000000000000000000000000000000 +110A:00001100110011002A8044400000000000000000000000000000000000000000 +110B:00000E001100110011000E000000000000000000000000000000000000000000 +110C:00003F80010002000D0030800000000000000000000000000000000000000000 +110D:000000003BC00880150022800440000000000000000000000000000000000000 +110E:0E0000003F8002000D0030800000000000000000000000000000000000000000 +110F:00003F8000803F80008000800000000000000000000000000000000000000000 +1110:00003F8020003F8020003F800000000000000000000000000000000000000000 +1111:00007F801200120012007F800000000000000000000000000000000000000000 +1112:00000E0000003F8000001F002080208020801F00000000000000000000000000 +1113:000021FC2004200420043F840000000000000000000000000000000000000000 +1114:000020402040204020403E7C0000000000000000000000000000000000000000 +1115:0000207C2040204020403E7C0000000000000000000000000000000000000000 +1116:000020442044207C20443E7C0000000000000000000000000000000000000000 +1117:00003E7C2004200420043E040000000000000000000000000000000000000000 +1118:000000003E4002403E4020403E7C000000000000000000000000000000000000 +1119:000000003E7C02043E7C20403E7C000000000000000000000000000000000000 +111A:000000003E3002FC3E3020483E30000000000000000000000000000000000000 +111B:000000001FF800081FF810001FF803C00420042003C000000000000000000000 +111C:00003E442244227C22443E7C0000000000000000000000000000000000000000 +111D:00001FFC1004100410041FFC00000000000003E004100410041003E000000000 +111E:0000227C22043E0422043E040000000000000000000000000000000000000000 +111F:0000224022403E4022403E7C0000000000000000000000000000000000000000 +1120:0000227C22403E4022403E7C0000000000000000000000000000000000000000 +1121:0000221022103E1022283E440000000000000000000000000000000000000000 +1122:0000489E4882788249427A220000000000000000000000000000000000000000 +1123:0000488E4888788849487A2E0000000000000000000000000000000000000000 +1124:000049244924793C4AA47C7C0000000000000000000000000000000000000000 +1125:000048884888788849547A220000000000000000000000000000000000000000 +1126:0000493E490479084A947C620000000000000000000000000000000000000000 +1127:0000227C22083E1022283E440000000000000000000000000000000000000000 +1128:00382200227C3E1022283E440000000000000000000000000000000000000000 +1129:0000227C22403E7C22403E7C0000000000000000000000000000000000000000 +112A:0000227C22283E2822283E7C0000000000000000000000000000000000000000 +112B:000008080FF808080FF801C0022001C000000000000000000000000000000000 +112C:000022443E7C22443E7C03C0042003C000000000000000000000000000000000 +112D:0000047C040404040A0411040000000000000000000000000000000000000000 +112E:00000440044004400A40117C0000000000000000000000000000000000000000 +112F:0000047C044004400A40117C0000000000000000000000000000000000000000 +1130:0000047C0404047C0A40117C0000000000000000000000000000000000000000 +1131:0000047C044404440A44117C0000000000000000000000000000000000000000 +1132:000004440444047C0A44117C0000000000000000000000000000000000000000 +1133:0000112E112211E2292245E20000000000000000000000000000000000000000 +1134:0000088808880888155422220000000000000000000000000000000000000000 +1135:00000438044404440A4411380000000000000000000000000000000000000000 +1136:0000047C040804100A2811440000000000000000000000000000000000000000 +1137:00380400047C04100A2811440000000000000000000000000000000000000000 +1138:0000047C0404047C0A0411040000000000000000000000000000000000000000 +1139:0000047C0440047C0A40117C0000000000000000000000000000000000000000 +113A:0000047C042804280A28117C0000000000000000000000000000000000000000 +113B:0000043004FC04300A4811300000000000000000000000000000000000000000 +113C:0000004000400180068018400000000000000000000000000000000000000000 +113D:00000120012002A0045019880000000000000000000000000000000000000000 +113E:0000008000800100068018400000000000000000000000000000000000000000 +113F:00000480048005400A30118C0000000000000000000000000000000000000000 +1140:000002000500088010403FE00000000000000000000000000000000000000000 +1141:00000E7C1104110411040E040000000000000000000000000000000000000000 +1142:00000E3C1120112011200E3C0000000000000000000000000000000000000000 +1143:00000E3E1122112211220E3E0000000000000000000000000000000000000000 +1144:00000E241124113C11240E3C0000000000000000000000000000000000000000 +1145:00000E081108110811140E220000000000000000000000000000000000000000 +1146:0000382044504488450439FC0000000000000000000000000000000000000000 +1147:00000E381144114411440E380000000000000000000000000000000000000000 +1148:00000E7C1108111011280E440000000000000000000000000000000000000000 +1149:00380E00117C111011280E440000000000000000000000000000000000000000 +114A:00000E3C1120113C11200E3C0000000000000000000000000000000000000000 +114B:00000E7C1128112811280E7C0000000000000000000000000000000000000000 +114C:00000E001100110011000E000000000000000000000000000000000000000000 +114D:00003E3804440844144422380000000000000000000000000000000000000000 +114E:00003FE000C003800C4030200000000000000000000000000000000000000000 +114F:000000001FF0012002A00C503188000000000000000000000000000000000000 +1150:00001FF0006001C0062018100000000000000000000000000000000000000000 +1151:000000003FE0084014A02310018C000000000000000000000000000000000000 +1152:1C00007C3E04087C140422040000000000000000000000000000000000000000 +1153:180000303EFC0830144822300000000000000000000000000000000000000000 +1154:078000001FC00180064038200000000000000000000000000000000000000000 +1155:0E0000003F0002000D8030700000000000000000000000000000000000000000 +1156:00003E441444147C14443E7C0000000000000000000000000000000000000000 +1157:00001FF804201FF803C0042003C0000000000000000000000000000000000000 +1158:000018307EFC1C70228822881C70000000000000000000000000000000000000 +1159:1FF0010007C00820082007C00000000000000000000000000000000000000000 +115A:00003E7C024002400240027C0000000000000000000000000000000000000000 +115B:000010101010101010281F440000000000000000000000000000000000000000 +115C:0000107C1008101010281F440000000000000000000000000000000000000000 +115D:0000107011FC107010881E700000000000000000000000000000000000000000 +115E:000000003E7C2004207C20403E7C000000000000000000000000000000000000 +115F:AAAA000180002239A2403E41A2402239800003E1820003818200020180005555 +1160:AAAA000180002279A2103E11A2502221800003E1820003818200020180005555 +1161:0000001000100010001E00100010001000000000000000000000000000000000 +1162:0000001200120012001E00120012001200000000000000000000000000000000 +1163:0000001000100010001E0010001E001000000000000000000000000000000000 +1164:0000001200120012001E0012001E001200000000000000000000000000000000 +1165:0000001000100010007000100010001000000000000000000000000000000000 +1166:0000001200120012007200120012001200000000000000000000000000000000 +1167:0000001000100010007000100070001000000000000000000000000000000000 +1168:0000001200120012007200120072001200000000000000000000000000000000 +1169:000000000000000000000000000000000000008000803FFE0000000000000000 +116A:0000001000100010001E041004103FF000000000000000000000000000000000 +116B:0000001200120012001E041204123FF200000000000000000000000000000000 +116C:00000010001000100010041004103FF000000000000000000000000000000000 +116D:00000000000000000000024002403FFE00000000000000000000000000000000 +116E:00000000000000000000000000003FFE00800080000000000000000000000000 +116F:00000010001000100010001000103F90041004F0041000000000000000000000 +1170:00000012001200120012001200123F92041204F2041200000000000000000000 +1171:00000010001000100010001000103FF004100410041000000000000000000000 +1172:00000000000000000000000000003FFE02200220000000000000000000000000 +1173:00000000000000000000000000003FFE00000000000000000000000000000000 +1174:000000100010001000100010001000100010001000103FF00010001000000000 +1175:0000001000100010001000100010001000000000000000000000000000000000 +1176:00000000000000000000002000200020003800A000A03FF80000000000000000 +1177:0000001000100010001C001000103FFE00800080000000000000000000000000 +1178:000000000000000000080008000E0008000E008800883FFE0000000000000000 +1179:00080008000E0008000E024802483FFE00000000000000000000000000000000 +117A:000000000000000800080008003800080008008800883FFE0000000000000000 +117B:00000000000400040004001C0004000400043FFE008000800000000000000000 +117C:00200020002000E000200020002000203FF00000000000000000000000000000 +117D:000000000000000000080008003800080038008800883FFE0000000000000000 +117E:00080008000800380008003800083FFE00800080000000000000000000000000 +117F:00000000000200020002000200023FFE0082008E000200000000000000000000 +1180:000000000000001200120012007200120012011201123FF20012000000000000 +1181:000000000000001200120012007200120012017201123FF20012000000000000 +1182:000000000000000000000000000000803FFE00803FFE00000000000000000000 +1183:000000000000000000000000008000803FFE00003FFE00800080000000000000 +1184:0000000000100010001E091009103FFE00100000000000000000000000000000 +1185:000000A400A400A404BC04A404FC3FA400000000000000000000000000000000 +1186:00020002000E0002000E048204823FFE00020000000000000000000000000000 +1187:0000000000000000000002203FFE00803FFE0000000000000000000000000000 +1188:00000000000200020002024202423FFE00020000000000000000000000000000 +1189:00000000000000000008000800083FFE02080208000800000000000000000000 +118A:00000000000000000012001200123FFE02120212001200000000000000000000 +118B:000000080008000800081FC80208027802083FFE000000000000000000000000 +118C:0000000A000A000A000A000A000A3FEA020A023A000A003A000A000000000000 +118D:00000000000000000000000000003FFE00803FFE008000000000000000000000 +118E:00000008000800080008000800083FFE02480248000800000000000000000000 +118F:00000001000100010001000100013FFF0221022F000100000000000000000000 +1190:00000000000A000A000A000A000A3FFA048A04BA000A00000000000000000000 +1191:00000000000200020002000200023FFE0242024E0002000E0002000000000000 +1192:00000000000A000A000A000A000A3FFA048A04BA000A003A000A000000000000 +1193:00000000000000000000000000003FFE02203FFE008000000000000000000000 +1194:00000000000100010001000100013FFF02210221000100000000000000000000 +1195:00000000000000000000000000003FFE00003FFE008000000000000000000000 +1196:00000000000000000000000000003FFE00003FFE000000000000000000000000 +1197:00040004000400040004000400040FFC00043FFE008000000000000000000000 +1198:0000004800480048004E00480048004800000000000000000000000000000000 +1199:000000480048004E0048004E0048004800000000000000000000000000000000 +119A:000000000000000400040004000400040004008400843FFE0000000000000000 +119B:00040004000400040004000400043FFE00800080000000000000000000000000 +119C:00000004000400040004000400043FFE00000000000000000000000000000000 +119D:00000020002000200020002000200020000000C0002000100000000000000000 +119E:00000000000000000000000000000000000000C0002000100000000000000000 +119F:000000100010001000700C100210011000000000000000000000000000000000 +11A0:000000000000000000000060001000083FFE0080008000000000000000000000 +11A1:0000001000100010001018100410021000000000000000000000000000000000 +11A2:0000000000000000000018600410020800000000000000000000000000000000 +11A3:000000000000000000000020002000200038002000203FF80000000000000000 +11A4:000000000000000000080008000E0008000E000800083FFE0080008000000000 +11A5:000000000000000000280028002E00E8002800EE002800280028000000000000 +11A6:0000000000100010001E011001103FFE00100000000000000000000000000000 +11A7:0000002400240024003C042404FC3F2400000000000000000000000000000000 +11A8:00000000000000000000000000000000000007F0001000100010001000000000 +11A9:0000000000000000000000000000000000000F78010801080108010800000000 +11AA:0000000000000000000000000000000000000F10011001100128014400000000 +11AB:000000000000000000000000000000000000040004000400040007F000000000 +11AC:00000000000000000000000000000000000008F80820082008500F8800000000 +11AD:000000000000000000000000000000000000083008FC083008480F3000000000 +11AE:00000000000000000000000000000000000007F004000400040007F000000000 +11AF:00000000000000000000000000000000000007F0001007F0040007F000000000 +11B0:0000000000000000000000000000000000000F7801080F0808080F0800000000 +11B1:0000000000000000000000000000000000001EF002901E9010901EF000000000 +11B2:0000000000000000000000000000000000001E9002901EF010901EF000000000 +11B3:0000000000000000000000000000000000001E2002201E2010501E8800000000 +11B4:0000000000000000000000000000000000001EF002801EF010801EF000000000 +11B5:0000000000000000000000000000000000001EF802501E5010501EF800000000 +11B6:0000000000000000000000000000000000001E6003F81E6010901E6000000000 +11B7:00000000000000000000000000000000000007F004100410041007F000000000 +11B8:0000000000000000000000000000000000000410041007F0041007F000000000 +11B9:000000000000000000000000000000000000122012201E2012501E8800000000 +11BA:0000000000000000000000000000000000000040004000C003201C1000000000 +11BB:0000000000000000000000000000000000000120012003A00C50318800000000 +11BC:00000000000000000000000000000000000001C002200220022001C000000000 +11BD:00000000000000000000000000000000000007F0008000800140022000000000 +11BE:00000000000000000000000000000000000001E0000007F8004003A00C180000 +11BF:00000000000000000000000000000000000007F0001007F00010001000000000 +11C0:00000000000000000000000000000000000007F0040007F0040007F000000000 +11C1:0000000000000000000000000000000000000FF00240024002400FF000000000 +11C2:000000000000000000000000000001C0000007F0000001C0022001C000000000 +11C3:0000000000000000000000000000000000007E7C0204027C0240027C00000000 +11C4:00000000000000000000000000000000789E0882088209420A22000000000000 +11C5:00000000000000000000000000000000000021FC2004200420043F8400000000 +11C6:000000000000000000000000000000000000207C2040204020403E7C00000000 +11C7:00000000000000000000000000000000000020202020202020503E8800000000 +11C8:00000000000000000000000000000000000040104028404440827CFE00000000 +11C9:000000000000000000000000000000000000207C2040207C20403E7C00000000 +11CA:0000000000000000000000000000000000003E7C2004200420043E0400000000 +11CB:0000000000000000000000000000000000003E7C2004207C20403E7C00000000 +11CC:0000000000000000000000000000000000007BC408447844404A785100000000 +11CD:0000000000000000000000000000000000003E4002403E4020403E7C00000000 +11CE:0000000000000000000000000000000000003E7C02403E4020403E7C00000000 +11CF:000000000000000000000000000000000000F78C143FF40C8412F78C00000000 +11D0:0000000000000000000000000000000000003E7C02043E7C20403E7C00000000 +11D1:0000000000000000000000000000000000007BDE0A427A4242427BC200000000 +11D2:0000000000000000000000000000000000007BC40A447A44424A7BD100000000 +11D3:0000000000000000000000000000000000007A440A447BC4424A7BD100000000 +11D4:000000000000000000000000000000000000F48C14BFF78C8492F78C00000000 +11D5:0000000000000000000000000000004800783E4802783E3020483E3000000000 +11D6:00000000000000000000000000000000000078880888788841547A2200000000 +11D7:0000000000000000000000000000000000003C2004503C8821043DFC00000000 +11D8:0000000000000000000000000000000000003E7C02043E7C20043E0400000000 +11D9:0000000000000000000000000000000000003E3802FE3E3820443E3800000000 +11DA:0000000000000000000000000000000000003E7C2204220422043E0400000000 +11DB:0000000000000000000000000000000000003E7C2204227C22403E7C00000000 +11DC:0000000000000000000000000000000000003E442244227C22443E7C00000000 +11DD:0000000000000000000000000000000000001F101110111011281F4400000000 +11DE:0000000000000000000000000000000000007C444444444444AA7D1100000000 +11DF:0000000000000000000000000000000000003E102228224422823EFE00000000 +11E0:0000000000000000000000000000000000383E0022FE220822343EC200000000 +11E1:0000000000000000000000000000000000003E3822FE223822443E3800000000 +11E2:00000000000000000000000000000FE008200FE0000003800440038000000000 +11E3:000000000000000000000000000000000000227C22043E7C22403E7C00000000 +11E4:000000000000000000000000000000000000227C22283E2822283E7C00000000 +11E5:000000000000000000000000000000000000223822FE3E3822443E3800000000 +11E6:0000000000000000000000000000041007F0041007F001C0022001C000000000 +11E7:00000000000000000000000000000000000004F8040804080A08110800000000 +11E8:000000000000000000000000000000000000047C044004400A40117C00000000 +11E9:00000000000000000000000000000000000008F8080808F8148022F800000000 +11EA:00000000000000000000000000000000000004440444047C0A44117C00000000 +11EB:00000000000000000000000000000000000001000280044008201FF000000000 +11EC:0000000000000000000000000000000000000E7C1104110411040E0400000000 +11ED:00000000000000000000000000000000000039DC444444444444384400000000 +11EE:0000000000000000000000000000000000001C382244224422441C3800000000 +11EF:0000000000000000000000000000000000001C7C2204227C22041C0400000000 +11F0:0000000000000000000000000000010001000380044004400440038000000000 +11F1:0000000000000000000000000000000000001C202220222022501C8800000000 +11F2:000000000000000000000000000000000000382044504488450439FC00000000 +11F3:0000000000000000000000000000000000003E441444147C14443E7C00000000 +11F4:000000000000000000000000000000000FF002400FF003C0042003C000000000 +11F5:0000000000000000000000000000000000001C407F401C4022401C7C00000000 +11F6:0000000000000000000000000000000000001C7C7F041C7C22401C7C00000000 +11F7:0000000000000000000000000000000000001C7C7F441C4422441C7C00000000 +11F8:0000000000000000000000000000000000001C447F441C7C22441C7C00000000 +11F9:00000000000000000000000000000000000003800FE003800440038000000000 +11FA:0000000000000000000000000000000000003E40024002400240027C00000000 +11FB:0000000000000000000000000000000000003E440244027C0244027C00000000 +11FC:0000000000000000000000000000000000383E0002FE0208023402C200000000 +11FD:0000000000000000000000000000000000003E7C0204027C0204020400000000 +11FE:0000000000000000000000000000000000003E3802FE02380244023800000000 +11FF:00000000000000000000000000000000000020402040204020403E7C00000000 +1200:00000000000001C030C030C030C030C030C030C0318031801F000E0000000000 +1201:00000000000001C030C030C030C030FC30CC30C0318031801F000E0000000000 +1202:0000000006600C600C600C600C6007C003C000C001800300033003F000000000 +1203:0000000006600C600C600C600C6007C003C000C0018003000300030000000000 +1204:0000000006600C600C600C600C6007C003C000C001C00340032003E000000000 +1205:000000000000187018301C300E3006300C300C300C300C6007E003C000000000 +1206:00000000000000F030C830D830E030C030C030C0318031801F000E0000000000 +1207:000000000000003C0C320C360C386C307C306C300C600C6007C0038000000000 +1208:00000000030003000300078007C00CE00C600C600C600C600C600C6000000000 +1209:000000000C000C000C001E001F0033803180318031F831983180318000000000 +120A:000000000C000C000C001E001F0033803180318031803180319831F800000000 +120B:00000000030003000300078007C00CE00C600C600C6000600060006000000000 +120C:000000000C000C000C001E001F00338031803180318031F0319831F000000000 +120D:00000000030003000300078007C00CE00C60186018601E601B601E6000000000 +120E:000000000C000C000C001E001F003380318031F831AC31B83180318000000000 +120F:00000000030003000300078007C00CE00C600C600C6000600060006003FC070E +1210:000000000180018001800180018007E00DB00DB0199819981998199800000000 +1211:00000000060006000600060006001F8036C036C0667E66666660666000000000 +1212:00000000060006000600060006001F8036C036C0666066606666667E00000000 +1213:000000000180018001800180018007E00DB00DB0199800180018001800000000 +1214:00000000060006000600060006001F8036C036C066406678664C667800000000 +1215:000000000600060006000780018007E00DB00DB0199819981998199800000000 +1216:000000000180018001800180018007E00DB00DB0199818001800180000000000 +1217:0000030003000300030003000FC01B601B60333000300030003001FE03870000 +1218:000000000000000000000FFC1FFC112431642344264C3C783C70000000000000 +1219:000000000000000000003FF07FF04490C59E8D129932F1E0F1C0000000000000 +121A:000000001FF83FF86288428845087DF838F80010001000200026003E00000000 +121B:000000000FFC1FFC3144214422843EFC1C7C0008000800100010001000000000 +121C:000000001FF83FF86288428845087DF838F800100010003C0026003C00000000 +121D:000000001FF01FF832882288228822F83E701E00020006000C00180000000000 +121E:000000001FF01FF832882288228822F83E701E00020002000200030000000000 +121F:000000001FF83FF86288428845087DF838F80010001000300020002001F8030C +1220:00000000000000000998199819981998199819B019F00D800780000000000000 +1221:000000000000000026C066C066FC66CC66C066C067C036001E00000000000000 +1222:000000006640666066606660666076E03FE00060006000600066007E00000000 +1223:00000000199019981998199819981DB80FF80018001800180018001800000000 +1224:00000000332033303330333033303B701FF00030003000380064007800000000 +1225:00000000199019981998199819981DB81FF01C00180018001800180000000000 +1226:00000000199819981998199819981DB80FF00380030007000E000C0000000000 +1227:00006640666066606660666076E03FE00060006000600060006003FC070E0000 +1228:00000000018001800180030007000E001C00180018001C600FE007E000000000 +1229:000000000300030007000E001C001800300038001FF00FF00180018000000000 +122A:00000000018001800180030007000E001C00186018701C300FE007C000000000 +122B:0000000003000300030006000E001C003800307830F839981F800F0000000000 +122C:00000000018001800180030007000E001C00180018001CF00F9807F000000000 +122D:00000000000007E00FE018601800180018001800180018601FE00FC000000000 +122E:00000000000007F00F9818F01800180018001800180018601FE00FC000000000 +122F:0000000030301CE00300030006000E001C003800307830F839981F800F000000 +1230:0000000001000100038007C00C600C600C600C600C600C600C600C6000000000 +1231:00000000040004000E001F0031803180318031F8319831803180318000000000 +1232:00000000040004000E001F00318031803180318031803180319831F800000000 +1233:0000000001000100038007C00C600C600C600C600C6000600060006000000000 +1234:000000000200020007000F8018C018C018C018C018E018D018C818F800000000 +1235:0000000000000300018001C003E0063006300630063006300630063000000000 +1236:0000000001000100038007C00C600C600C600C600C600C000C000C0000000000 +1237:0000000001000100038007C00C600C600C600C600C6000600060006001F8030C +1238:0000000030601FC0020007000F8018C018C018C018C018C018C018C000000000 +1239:0000000030601FC0020007000F8018C018C018FC18CC18CC18C018C000000000 +123A:0000000030601FC0020007000F8018C018C018C018C018C018CC18FC00000000 +123B:0000000018300FE00100038007C00C600C600C600C6000600060006000000000 +123C:0000000030601FC0020007000F8018C018C018C018C018F818CC18F800000000 +123D:0000000018600FC0018001C003E0033006300630063006300630063000000000 +123E:0000000018300FE00100038007C00C600C600C600C600C000C000C0000000000 +123F:0000000030601FC0020007000F8018C018C018C018C018C000C000C003F00618 +1240:0000000001800180018003F00D98199819B00FC0018001800180018000000000 +1241:0000000003000300030007E01B30333033601F80030003F00330030000000000 +1242:0000000003000300030007E01B30333033601F8003000300033003F000000000 +1243:0000000001800180018003F00D98199819B00FC00180030006000C0000000000 +1244:0000000003000300030007E01B30333033601F80030003E0033003E000000000 +1245:00000000060006000780018003F00D98199819B00FC001800180018000000000 +1246:0000000001C0026002C0030007E01B30333033601F8003000300030000000000 +1247:0000000001C0026002C0030007E01B30333033601F80030033003F0030000000 +1248:0000000001800180018003F00D98199819B00FC001F801AC01B8018000000000 +1249:00007FFE7B8673F67B867BBE71867FFE7FFE6DCE6DB661C67DF67DCE7FFE0000 +124A:000000000600060006000FC0366C666C66FC3F07060306000600060000000000 +124B:0000000001800180018003F00D98199819B00FC0018001800180018007E00C30 +124C:0000000001800180018003F00D98199819B00FC00180018001F0019807F00C00 +124D:000000000600061806180FFE3666666066C03F00060006000600060000000000 +124E:00007FFE7B8673F67B867BBE71867FFE7FFE6D866DBE618E7DBE7D867FFE0000 +124F:00007FFE7B8673F67B867BBE71867FFE7FFE6D866DBE618E7DBE7DBE7FFE0000 +1250:000000000C3007E00180018003F00D98199819B00FC001800180018000000000 +1251:0000000018600FC00300030007E01B30333033601F80030003F0033000000000 +1252:0000000018600FC00300030007E01B30333033601F800300033003F000000000 +1253:000000000C3007E00180018003F00D98199819B00FC001800300060000000000 +1254:0000000018600FC0030007E01B30333033601F80030003E0033003E000000000 +1255:0000000030C01F8006000780018003F00D98199819B00FC00180018000000000 +1256:000000000C1807F001200160018003F00D98199819B00FC00180018000000000 +1257:00007FFE7B8673F67B867BBE71867FFE7FFE61866FF661EE7DDE61DE7FFE0000 +1258:0000000018600FC0030007E01B30333033601F8003F003580370030000000000 +1259:00007FFE7B8673F67B867BBE71867FFE7FFE61CE6FB661C67DF661CE7FFE0000 +125A:0000000030C01F80060006000FC0366C666C66FC3F0706030600060000000000 +125B:000000000C3007E00180018003F00D98199819B00FC001800180018007E00C30 +125C:000000000C3007E00180018003F00D98199819B00FC0018001F0019807F00C00 +125D:0000000030C01F80061806180FFE3666666066C03F0006000600060000000000 +125E:00007FFE7B8673F67B867BBE71867FFE7FFE61866FBE618E7DBE61867FFE0000 +125F:00007FFE7B8673F67B867BBE71867FFE7FFE61866FBE618E7DBE61BE7FFE0000 +1260:000000000000038007C00C600C600C600C600C600C600C600C600C6000000000 +1261:0000000000000E001F0031803180318031F83198319831803180318000000000 +1262:0000000000000E001F003180318031803180318031803180319831F800000000 +1263:000000000000038007C00C600C600C600C600C60006000600060006000000000 +1264:00000000000007000F8018C018C018C018C018C018C018F818CC18F800000000 +1265:00000000000000E001F00318031803183F183318331803180318031800000000 +1266:000000000000038007C00C600C600C600C600C600C000C000C000C0000000000 +1267:000000000000038007C00C600C600C600C600C60006000600060006001F8030C +1268:0000000030601FC0000007000F8018C018C018C018C018C018C018C000000000 +1269:0000000030601FC0000007000F8018C018C018FC18CC18CC18C018C000000000 +126A:0000000030601FC0000007000F8018C018C018C018C018C018CC18FC00000000 +126B:0000000030601FC0000007000F8018C018C018C018C018C000C000C000000000 +126C:0000000060C03F8000000E001F00318031803180318031F0319831F000000000 +126D:000000000C1807F0000001C003E0063006307E30663066300630063000000000 +126E:0000000030601FC0000007000F8018C018C018C018C018C01800180000000000 +126F:0000000030601FC0000007000F8018C018C018C018C018C000C000C003F00618 +1270:0000000007000300030003003FF07FF863180300030003000300030000000000 +1271:0000000007000300030003003FF07FF86318030003F003300300030000000000 +1272:0000000007000300030003003FF07FF86318030003000300033003F000000000 +1273:0000000007000300030003003FF07FF863180300030007000E001C0000000000 +1274:0000000007000300030003003FF07FF863180300030003E0033003E000000000 +1275:00000000060007000380018001801FF83FFC318C018001800180018000000000 +1276:0000000003E00320016001801FF83FFC318C0180018001800180018000000000 +1277:0000000003800180018001801FF83FFC318C0180018001800180018007E00C30 +1278:0000000018181FF83FFC318C01801FF83FFC318C018001800180018000000000 +1279:0000000018181FF83FFC318C01801FF83FFC318C018001F80198018000000000 +127A:0000000018181FF83FFC318C01801FF83FFC318C01800180019801F800000000 +127B:0000000030303FF07FF8631803003FF07FF86318030007000E001C0000000000 +127C:0000000030303FF07FF8631803003FF07FF86318030003E0033003E000000000 +127D:0000000030C03FC07FE06660070001801FF83FFC318C01800180018000000000 +127E:000000000C301FF81A58024001801FF83FFC318C018001800180018000000000 +127F:0000000018181FF83FFC318C01801FF83FFC318C018001800180018007E00C30 +1280:000000000180018001801F8019E0006000600060006000600060006000000000 +1281:000000000300030003003F0033C000C000C000FC00CC00C000C000C000000000 +1282:000000000300030003003F0033C000C000C000C000C000C000CC00FC00000000 +1283:0000000000C000C000C00FC00CF000300030003000E001800300030000000000 +1284:000000000300030003003F0033C000C000C000C000C000F800CC00F800000000 +1285:0000000000C000C000C003C006F00C300C300030003000300030003000000000 +1286:0000000001F803E406383E003600060007E003E0006000600060006000000000 +1287:0000000001F803E406383E003600060007E003E000600060066007E006000000 +1288:000000000600060006007E006780018001F801AC01B801800180018000000000 +1289:00007FFE7B8673F67B867BBE71867FFE7FFE73CE6DB673C66DF673CE7FFE0000 +128A:000000000600060006007E0067800198019801F8018E01860180018000000000 +128B:000000000180018001801F8019E0006000600060006000600060006001F8030C +128C:000000000300030003003F0033C000C000C000C000C000C000F800CC03F80600 +128D:000000000600060006007E3067B001FC018C0180018001800180018000000000 +128E:00007FFE7B8673F67B867BBE71867FFE7FFE73866DBE738E6DBE73867FFE0000 +128F:00007FFE7B8673F67B867BBE71867FFE7FFE73866DBE738E6DBE73BE7FFE0000 +1290:00000000060006000600078001C0018001800180030003000300030000000000 +1291:00000000060006000600078001C00180018001F0033003000300030000000000 +1292:000000000C000C000C000F00038003000300030006000600066007E000000000 +1293:0000000007C00FE01860300038001F0003800180010003000300030000000000 +1294:00000000060006000600078001C001800180018003C00320036003C000000000 +1295:000000003FC03F803180030007C000C0018003000300060006000C0000000000 +1296:0000000007F00FC81858303038001F0003800180010003000300030000000000 +1297:00000000000007C00FE01860300038001F00038001800100030003000FC01860 +1298:000000000C301FF81188018001E000700060006000C000C000C000C000000000 +1299:0000000018603FF02310030003C000E000C000F8019801800180018000000000 +129A:0000000018603FF02310030003C000E000C000C001800180019801F800000000 +129B:00000C301FF8118807C00FE01860300038001F00038001800300030000000000 +129C:0000000018603FF02310030003C000E000C000C001E0019001B001E000000000 +129D:000030C07FE046201FC03F803180030007C000C0018003000300030000000000 +129E:00000C601FF0111007F00FC81858303038001F00038001800300030000000000 +129F:00000C301FF8118807C00FE01860300038001F0003800180030003000FC01860 +12A0:0000000006000600060007800180038003C006E00E600C600C600C6000000000 +12A1:000000001800180018001E0006000E000F001B8039F831983180318000000000 +12A2:000000001800180018001E0006000E000F001B8039803180319831F800000000 +12A3:000000000600060006000780018003C006E00C600C600C600060006000000000 +12A4:000000001800180018001E0006000E000F001B80398031F0319831F000000000 +12A5:000000000C000C000E0006000300038007C00EE00C600C600C600C6000000000 +12A6:000000000600060006000780018003C006E00C600C600C600C000C0000000000 +12A7:000018C01FC03660060007800180038003C006E00E600C600C600C6000000000 +12A8:000000000000180019C01FE01E30063006300630063006300630063000000000 +12A9:000000000000600067007F8078C018C018C018FC18CC18C018C018C000000000 +12AA:000000000000600067007F8078C018C018C018C018C018C018CC18FC00000000 +12AB:000000000000180019C01FE01E30063006300630063000300030003000000000 +12AC:000000000000600067007F8078C018C018C018C018C018F818CC18F800000000 +12AD:000000000000180019C01BE01E300C300E300630063006300630063000000000 +12AE:000000000000180019C01FE01E30063006300630063006000600060000000000 +12AF:0000000000000C000CE00FF00F18031833183F18331803000300030000000000 +12B0:000000000000600066007F007980198019F819AC19B819801980198000000000 +12B1:00007FFE7B8673F67B867BBE71867FFE7FFE63EE6DCE63EE6DEE63C67FFE0000 +12B2:000000000000600066007F0079801998199819F8198E19861980198000000000 +12B3:000000000000180019C01FE01E30063006300630063000300030003000FC0186 +12B4:000000000000600067007F8078C018C018C018C018C000C000F800CC03F80600 +12B5:000000000000600066307F3079FC198C19801980198019801980198000000000 +12B6:00007FFE7B8673F67B867BBE71867FFE7FFE63CE6DBE638E6DB663CE7FFE0000 +12B7:00007FFE7B8673F67B867BBE71867FFE7FFE63866DF663EE6DDE63DE7FFE0000 +12B8:0000000061803F000C000DC00FE0063006300630063006300630063000000000 +12B9:00000000C3007E0018001B801FC00C600C600C7E0C660C600C600C6000000000 +12BA:00000000C3007E0018001B801FC00C600C600C600C600C600C660C7E00000000 +12BB:0000000061803F000C000DC00FE0063006300630063000300030003000000000 +12BC:0000000061803F000C000DC00FE00630063006300630063E0633063E00000000 +12BD:0000000061803F000C000EE00FF0031803980198019801980198019800000000 +12BE:0000000061803F000C000DC00FE0063006300630063006000600060000000000 +12BF:00007FFE7B8673F67B867BBE71867FFE7FFE63866DBE638E6DBE63BE7FFE0000 +12C0:00000000C3007E0018001B801FC00C600C7E0C6B0C6E0C600C600C6000000000 +12C1:00007FFE7B8673F67B867BBE71867FFE7FFE71EE6FCE6FEE6FEE71C67FFE0000 +12C2:00000000C3007E0018001B001F800CCC0CCC0CFC0CC70CC30CC00CC000000000 +12C3:0000000061803F000C000DC00FE0067006300630063000300030003000FC0186 +12C4:0000000061803F000C000DC00FE006700630063006300030003E003300FE0180 +12C5:00000000C3007E00180C1B8C1FFF0C630C600C600C600C600C600C6000000000 +12C6:00007FFE7B8673F67B867BBE71867FFE7FFE71CE6FBE6F8E6FB671CE7FFE0000 +12C7:00007FFE7B8673F67B867BBE71867FFE7FFE71866FF66FEE6FDE71DE7FFE0000 +12C8:000000000000000000000FF01DB831983198331833303B701FC0000000000000 +12C9:000000000000000000003FC076E0C660C660CC60CCE0EDC67FFC000C00000000 +12CA:000000000FF01DB83198319833183BB01FE0030003000700066007E000000000 +12CB:000000000FF01DB83198319833183BB01FE00300030003000300070000000000 +12CC:000000000FF01DB83198319833183BB01FE0030003000780066007C000000000 +12CD:000000000000000000003FC076E0C660C67ECC66CCC2EDC07F00000000000000 +12CE:000000000FF01DB83198319833183BB01FE0030006000C001800180000000000 +12CF:0000000003FC076E6C667C666CC60EEC07F800C0018003000600060000000000 +12D0:00000000000001E006300C300C300C300C300C300C300C3007F0060000000000 +12D1:000000000000078018C030C030C030C030C030FC30CC30C01FC0180000000000 +12D2:0000000000001F0031806180618061803FC000C000C00180019801F800000000 +12D3:00000000000007C00C601860186018600FF00030003000300060006000000000 +12D4:0000000000001F0031806180618061803FC000C000C001F0019801F000000000 +12D5:000001800180018007E00E300C300C300C300C300C300C3007F0060000000000 +12D6:0000000003C006600C300C300C300E7007E003C007000C000C000C0000000000 +12D7:00007FFE7B8673F67B867BBE71867FFE7FFE63866DF66DEE6DDE63DE7FFE0000 +12D8:000000000C600C600C600C600C600FE00FE00C600C600C600C600C6000000000 +12D9:00000000318031803180318031803F803F8031F8319831983180318000000000 +12DA:00000000318031803180318031803F803F80318031803180319831F800000000 +12DB:000000000C600C600C600C600FE00FE00C600C600C6000600060006000000000 +12DC:0000000018C018C018C018C018C01FC01FC018C018C018F818CC18F800000000 +12DD:000000001C30363036300630063007F007F00630063006300630063000000000 +12DE:000000000C600C600C600C600FE00FE00C600C600C600C000C000C0000000000 +12DF:000000000C600C600C600C600FE00FE00C600C600C6000600060006001F8030C +12E0:000000001C38366C366C0660066007E007E00660066006600660066000000000 +12E1:0000000038706CD86CD80CC00CC00FC00FC00CFC0CCC0CCC0CC00CC000000000 +12E2:0000000038706CD86CD80CC00CC00FC00FC00CC00CC00CC00CCC0CFC00000000 +12E3:000000001C38366C366C066007E007E006600660066000600060006000000000 +12E4:0000000038706CD86CD80CC00CC00FC00FC00CC00CC00CF80CCC0CF800000000 +12E5:000061803F000C001C38366C366C066007E007E0066006600660066000000000 +12E6:000000001C38366C366C066007E007E006600660066006000600060000000000 +12E7:000000001C38366C366C066007E007E006600660066000600060006001F8030C +12E8:00000000038006C00C600C600C600C600EC00780030003000300030000000000 +12E9:00000000038006C00C600C600C600C600EC00780030003F00330030000000000 +12EA:0000000007000D8018C018C018C018C01D800F00066007F80618060000000000 +12EB:0000000001C00360063006300630066007C0038001C0006001C0038000000000 +12EC:0000000007000D8018C018C018C018C01D800F0006F0079806F0060000000000 +12ED:00000000000007800CC018C018C018C00D800F30073003E03E00700060000000 +12EE:000000000E001B00318031F8319831803B001E000C000C000C000C0000000000 +12EF:00000000038006C00C600C7E0C660C606EC07F80630003000300030000000000 +12F0:00000000038007C00C400C400CC00F8006000300030001801FF8181800000000 +12F1:0000000007000F80188019801F000C0006001FC030C030FC018C018000000000 +12F2:0000000007000F80188019801F000C0006001FC030C030C0019801F800000000 +12F3:0000000001C003E00620066007C0030001800FF00C300C300030003000000000 +12F4:0000000007000F801880188019801F000C000600060003F03F9830F000000000 +12F5:0000000007000F8018F8189819801F000C000600060003003FF0303000000000 +12F6:0000000001C003E00620066007C0038007F00C30180018001800180000000000 +12F7:0000000001C003E00620066007C0030001800FF00C300C300030003000FC0186 +12F8:0000000001000100038007C00C400CC00F800600030001800FF00C3000000000 +12F9:000000000200020007000F80188019801F000C001FC030FC318C018000000000 +12FA:000000000200020007000F80188019801F000C001FC030C0319801F800000000 +12FB:0000000001000100038007C00C400CC00F8006001FE018600060006000000000 +12FC:00000000040004000E001F00310033003E0018000C0006F03F9830F000000000 +12FD:000000000200020007000F8018F819981F000C00060003001FE0186000000000 +12FE:0000000001000100038007C00C400CC00F8007F00C3018001800180000000000 +12FF:0080008001C003E00620066007C0030001800FF00C300C300030003000FC0186 +1300:000030301FE0030007800CC00C400CC007800600070003001FE0186000000000 +1301:000060603FC006000F00198019800F0006001FC030C030FC018C018000000000 +1302:000060603FC006000F00198019800F0006001FC030C030C0019801F800000000 +1303:000030301FE0030007800CC00CC0078003001FE0186018600060006000000000 +1304:000060603FC006000F001980188019800F000C000E0007F03F9830F000000000 +1305:000030301FE0030007800CC00C7C0CCC07800600070003001FE0186000000000 +1306:000030301FE0030007800CC00CC0078007F00C30180018001800180000000000 +1307:000030301FE0030007800CC00CC0078003001FE0186018600060006003FC070E +1308:0000000000000F8018C018C000C000C000C00180018001800180018000000000 +1309:0000000000001F003180318001800180018003F8031803000300030000000000 +130A:0000000000000F8018C018C000C000C000C0018001800180019801F800000000 +130B:00000000000007800FE00C6000600060006000C001C007800E000C0000000000 +130C:0000000000000F8018C018C000C000C000C00180018001F0019801F000000000 +130D:0000000000000FE019B00F300030003000600060006000600060006000000000 +130E:0000000001000100010007C00C600C600060004000C000C000C000C000000000 +130F:0000000001000100010007C00C600C600060004000C000C00CC00FC00C000000 +1310:0000000000001F00318031800180018001F803AC033803000300030000000000 +1311:00007FFE7B8E73F67BC67BF6718E7FFE7FFE7BEE73CE7BEE7BEE71C67FFE0000 +1312:0000000000001F0031803180018001B001B003F0031C030C0300030000000000 +1313:00000000000007800CC00CC000C007E006600060006000600060006000000000 +1314:0000000000000F8018C018C000C000C000C001800180018001F0019807F00C00 +1315:0000000000001F0031B031B001FC018C01800380030003000300030000000000 +1316:00007FFE7B8E73F67BC67BF6718E7FFE7FFE7BCE73BE7B8E7BB671CE7FFE0000 +1317:00007FFE7B8E73F67BC67BF6718E7FFE7FFE7B8673F67BEE7BDE71DE7FFE0000 +1318:000000000C3007E0000007C00C600C600060004000C000C000C000C000000000 +1319:0000000030C01F8000001F00318031800180018003F803180300030000000000 +131A:0000000018600FC000000F8018C018C000C0008001800180019801F800000000 +131B:000000000C3007E0000003C007F004300030003000E003C007000E0000000000 +131C:0000000018600FC000000F8018C018C000C00080018001F0019801F000000000 +131D:0000000018600FC000000FE019B00F3000300020006000600060006000000000 +131E:000000000C6007C0010007C00C600C600060004000C000C000C000C000000000 +131F:0000000018600FC002000F8018C018C000C000800180018001800FF00C300000 +1320:000000000000000007C00D600D60193019301930193019301930193000000000 +1321:00000000000000001F003580358064C064C064FC64CC64C064C064C000000000 +1322:00000000000000001F003580358064C064C064C064C064C064CC64FC00000000 +1323:00000000000007C00D600D601930193019301930003000300030003000000000 +1324:0000000000001F003580358064C064C064C064C064C064F864CC64F800000000 +1325:0000000000000FE01FF013303318339831980180018001800180018000000000 +1326:00000000000007C00D600D601930193019301930180018001800180000000000 +1327:00000000000007C00D600D601930193019301930003000300030003000FC0186 +1328:00000000000000001F803FC06260C230C230C230F338DAB6CAB2FBBE00000000 +1329:00000000000000001F803FC06260C230C23FC233F338DAB4CAB2FBBE00000000 +132A:00000000000000001F803FC06260C230C230C230F330DAB0CAB3FBBF00000000 +132B:000000000FE01FF0311861187198695865587DD8001800340032003E00000000 +132C:00000000000000001F803FC06260C23FC239C237F330DABCCAB2FBBE00000000 +132D:0000000000001FC07FE0C630E6389724F33C030003800340032003E000000000 +132E:000000000FE01FF01A183218231862946252639C7000680064007C0000000000 +132F:0000000000000FE01FF0311861187198695865587DD800180030003000FC0186 +1330:0000000001800180018003C00660066003C007E00E700C300C300C3000000000 +1331:000000000600060006000F00198019800F001F8039C030FC30CC30C000000000 +1332:000000000600060006000F00198019800F001F8039C030C030CC30FC00000000 +1333:0000000001800180018003C0066003C007E00E700C700C300030003000000000 +1334:000000000600060006000F00198019800F001F8039C030F830CC30F800000000 +1335:000000000600060006000F0019F819980F001F8039C030C030C030C000000000 +1336:0000000001800180018003C0066003C007E00E700C300C300C000C0000000000 +1337:0000000003000300030007800CC007800FC01CC018E018600060006001F8030C +1338:0000000000000000018003C00660066003C007E00E700C300C300C3000000000 +1339:000000000000000006000F00198019800F001F8039C030FC30CC30C000000000 +133A:000000000000000006000F00198019800F001F8039C030C030CC30FC00000000 +133B:000000000000030007800CC00CC007800FC01CC018E018600060006000000000 +133C:000000000000000006000F00198019800F001F8039C030F030D830F000000000 +133D:000000000000000006000F0019F819980F001F8039C030C030C030C000000000 +133E:000000000000030007800CC00CC007800FC01CE0186018601800180000000000 +133F:000000000000030007800CC00CC007800FC01CC018E018600060006001F8030C +1340:00000000000001E006300C300C300C300FF00C300C300C3007F0060000000000 +1341:000000000000078018C030C030C030C03FC030FC30CC30C01FC0180000000000 +1342:000000007E00C300C300FF00C300C3007F00030003000300033003F000000000 +1343:00007EC3C3FFC3C37F03030303030000 +1344:000000007E00C300C300FF00C300C3007F000300030003E0033003E000000000 +1345:000001800180018007E00E300C300C300FF00C300C300C3007F0060000000000 +1346:0000000003C006600C300FF00C300E7007E003C007000C000C000C0000000000 +1347:0000000001E0033036183FF83618073803F001E0038006000600060000000000 +1348:00000000000000C0004000C00180030006000F00198018880FF803E800000000 +1349:000000000000000000800180030006000C001F00191019F01FC0030006000600 +134A:000000000000018000800180030006000C001E30331031301FE00F8000000000 +134B:000000000000000002000300060004000C001C00360033201FF0031003000300 +134C:00000000018000800180030006000C001E00330031301FE807C8007000000000 +134D:00000000000000000F8019C010C0300030003E0033C037401B00030003000300 +134E:00000000000007E00F9018F03000300030003C003A0031301B600FE000000000 +134F:00000000000002000300060004000C001C00360033201FF0031003000FC01860 +1350:000000000C300FF01FF819980180018001800180018001800180018000000000 +1351:000000000C300FF01FF8199801800180018001F8019801800180018000000000 +1352:000000000C300FF01FF81998018001800180018001800180019801F800000000 +1353:000000000C300FF01FF819980180018001800180030006000C00080000000000 +1354:000000000C300FF01FF819980180018001800180018001F0019801F000000000 +1355:000000000C300FF01FF81998018001E000600060006000600060006000000000 +1356:000000000C300FF01FF819980180018003000300060006000600060000000000 +1357:000000000C300FF01FF81998018001800180018001800180018001800FF01C38 +1358:000018180FF0018001800180030007000E001C00186018701C300FE007C00000 +1359:1C1C07F001C00FFC1FFC3144214422843EFC1C7C000800080010001000100000 +135A:000018180FF0018000800180030006000C001E30331031301FE00F8000000000 +135B:00007FFE7B8E73F67BC67BF6718E7FFE7FFE618E6FB6618E7DB6618E7FFE0000 +135C:00007FFE7B8E73F67BC67BF6718E7FFE7FFE61C66FBE61BE7DBE61C67FFE0000 +135D:1998199800000000000000000000000000000000000000000000000000000000 +135E:0180018000000000000000000000000000000000000000000000000000000000 +135F:0C300C3000000000000000000000000000000000000000000000000000000000 +1360:0000000000000180099004200240199819980240042009900180000000000000 +1361:00000000000303000003030000000000 +1362:0000000000000000000006600660000000000660066000000000000000000000 +1363:000000000000000007E000000180018000000180018000000000000000000000 +1364:000000000000000007E0000001800180000001800180000007E0000000000000 +1365:00000000000000000600060000001F8000000600060000000000000000000000 +1366:000000000000000006000600000003C000000600060000000000000000000000 +1367:0000000000000180018000000000018001800000000001800180000000000000 +1368:000000000000018001800C300C30018001800C300C3001800180000000000000 +1369:0000000018300FE0000001800180030007C00C600C6007C000000FE018300000 +136A:000000000C1807F0000001C00360066007C0060007C0036001C007F00C180000 +136B:0000000000000C3007E0000007E006600600060006000600000007E00C300000 +136C:0000000000000C3007E0000003C0066006600660066003C0000007E00C300000 +136D:0000000018300FE000000300030007E00E600C000C6007E000000FE018300000 +136E:000018300FE0000007800FC00CC000C0018001C0036003C000000FE018300000 +136F:000018300FE0000007800FC00CC000C001800100032003E000000FE018300000 +1370:0000000018180FF000000FF00DB00180018001800FF00C3000000FF018180000 +1371:000000000C3007E0000000000660066007E0066006400380000007E00C300000 +1372:0000000000000C3007E00000018001800180018001800180000007E00C300000 +1373:00000000000018180FF0000007E005A0018003C00660066000000FF018180000 +1374:00000000000018180FF0000005E00DB00DB00DB00DB0073000000FF018180000 +1375:0000000018180FF000000DB00DB00DB007F000300030003000000FF018180000 +1376:000000000C3007E0000003E0066003E0006000C000C000C0000007E00C300000 +1377:0000000018180FF000000FF00DB0018001C000C00FF00C3000000FF018180000 +1378:0000000000000C3007E0000003E006B006E00600066003E0000007E00C300000 +1379:00000000000030181FF000001FF016D006C006C006C006C000001FF030180000 +137A:000018300FE0000007C006C0018001C000C001800180018000000FE018300000 +137B:000000000C3007E0000003C0066007C00600030003000300000007E00C300000 +137C:00000000300C1FF800001E7833CC3EF830C018601860186000001FF8300C0000 +137D:00007FFE7B8E73F67BC67BF6718E7FFE7FFE618E7DB67BB677B6778E7FFE0000 +137E:00007FFE7B8E73F67BC67BF6718E7FFE7FFE61867DBE7B8E77BE77867FFE0000 +137F:00007FFE7B8E73F67BC67BF6718E7FFE7FFE61867DBE7B8E77BE77BE7FFE0000 +1380:000000000000000000003FF07FF04490C59F8D159937F1E0F1C0000000000000 +1381:000000003FE07FE0C52C853C8A2FFBE371E0004000400080009800F800000000 +1382:000000001FF83FF86288428845087DF838F800100010003C002403FC03000000 +1383:000000003FE07FE0C53E852A8A2EFBE071E01000100030002000200000000000 +1384:00000000000000000E001F003180318031F831A831B831803180318000000000 +1385:00000000000000000E001F0031B031B031FC318C318031803180318000000000 +1386:00000000000000000E001F003180318031803180318031E031A031E006000600 +1387:0000000000000000038007C00C600C607C7E6C6A0C6E0C600C600C6000000000 +1388:00000000000000C0004000FC0194031C06000F0019B018F00F30000000000000 +1389:000000000000018000B001F0033C060C0C001E00336031E01E60000000000000 +138A:00000000000003000100030006000C001E0011F813A80F3806000C0008000C00 +138B:00000000000000000F8019C010C0300037F03350337033001FE0036003000300 +138C:000000000C300FF01FF819980180018001F801AC01B801800180018000000000 +138D:0000000018601FE03FF0333003000300036003E0031803180300030000000000 +138E:000000000C300FF01FF819980180018001800180018001F001980FF00C000C00 +138F:0000000018601FE03FF033300300030001F801AC01B801800180018000000000 +1390:00000000000000000000000018180000 +1391:000000000000000000000024243C0000 +1392:00001818000000181800000018180000 +1393:00000000000000181800000018180000 +1394:00000000000000000000003C24240000 +1395:00000000000000000000000000000000001800180018003807F0780000000000 +1396:00000000000000000606060E1C600000 +1397:00000000000000000000000000000000000000000000000000007FFE00000000 +1398:00000000000000000000000000000000000000000000480048007FFE00000000 +1399:0000000000606060667E666060600000 +139A:00007FFE7B8E73F67BC67BF6718E7FFE7FFE73866DB671867DB673B67FFE0000 +139B:00007FFE7B8E73F67BC67BF6718E7FFE7FFE738E6DB6718E7DB6738E7FFE0000 +139C:00007FFE7B8E73F67BC67BF6718E7FFE7FFE73C66DBE71BE7DBE73C67FFE0000 +139D:00007FFE7B8E73F67BC67BF6718E7FFE7FFE738E6DB671B67DB6738E7FFE0000 +139E:00007FFE7B8E73F67BC67BF6718E7FFE7FFE73866DBE718E7DBE73867FFE0000 +139F:00007FFE7B8E73F67BC67BF6718E7FFE7FFE73866DBE718E7DBE73BE7FFE0000 +13A0:00000000784442424242424244780000 +13A1:00000000784442424478504844430000 +13A2:000000007F0808080808080808080000 +13A3:000000001C0814122151515155260000 +13A4:000000003048484B494E484848300000 +13A5:00000000080800080808080808080000 +13A6:000000003C424240207F0442423C0000 +13A7:000000001C02225252526242423C0000 +13A8:0000000040404C547640404040400000 +13A9:000000004242424242261A02023C0000 +13AA:0000000018242442427E424242420000 +13AB:00000000040404040404044444380000 +13AC:000000007E4040407C404040407E0000 +13AD:0000000008080848A8BB490A0A0C0000 +13AE:000000003C420202427C404040400000 +13AF:000000001C222222223E2222AACC0000 +13B0:00000000202020203E20202020200000 +13B1:000000007E4240404040404040400000 +13B2:00000000304848484830B7B2B4480000 +13B3:00000000424242425A5A666642420000 +13B4:00000000060909083844444444380000 +13B5:000000003C4242524C40404040400000 +13B6:000000001E204040484C4A4244380000 +13B7:00000000424266665A5A424242420000 +13B8:000000003844020202721E0202020000 +13B9:00000000180A15203C525212120C0000 +13BA:00000000324A4A4A4E4A4A4A4A320000 +13BB:00000000424242427E42424242420000 +13BC:000000003810384402020242423C0000 +13BD:000000004742424242261A02E2443800 +13BE:000000003C424242427E4242423C0000 +13BF:000000004040F0404040404E443C0418 +13C0:0000000078848480809E848484780000 +13C1:000000000C121212122222A2A2420000 +13C2:00000000404040405C62424242420000 +13C3:000000007E02020408102040407E0000 +13C4:000000003844E404E4443C0404040000 +13C5:00000000304848484A4D494848300000 +13C6:00000000FE1010101010101010FE0000 +13C7:000000000C1202424A4A4A4A4A340000 +13C8:00000000661919292A48484848300000 +13C9:00000000F1A122222224242428100000 +13CA:000000001C2222029AA2A2A2A25C0000 +13CB:000000003C4240403C404442423C0000 +13CC:0000000042424242427E4242423C0000 +13CD:000000001C22222202021AD2B26C0000 +13CE:00000000040C142444447E0404040000 +13CF:0000000040404040407C4242427C0000 +13D0:00000000080808080B5D680808080000 +13D1:00000000649AE2448098848484780000 +13D2:00000000784442424458484442420000 +13D3:000000002020202020202022221C0000 +13D4:00000000AAAAAA92B2B2CACA86820000 +13D5:000000003C424740201F0442423C0000 +13D6:00000000F090101010101211110E0000 +13D7:000000000202020202060A1222420000 +13D8:000000007E02020202060A1222420000 +13D9:00000000828282444444282810100000 +13DA:000000003C424240300C0242423C0000 +13DB:00000000364942605048484848300000 +13DC:00000000182424182422555555220000 +13DD:000000001C22424040404040407E0000 +13DE:000000004040404040404040407E0000 +13DF:000000003C42424040404042423C0000 +13E0:000000000444A4A47E24242424180000 +13E1:000000006699999A2844444444380000 +13E2:000000007C4242427C40404040400000 +13E3:000000003C42474040424242423C0000 +13E4:00000000F19112121414141818100000 +13E5:00000040404040434D74444444440000 +13E6:00000000424448506060504844420000 +13E7:00000000020202021E224242221C0000 +13E8:0000000030484A454040454A48300000 +13E9:000000003844444440404E44443B0000 +13EA:00000000225555535131199995620000 +13EB:000000003C424272525E4242423C0000 +13EC:000000003249494971414141221C0000 +13ED:000000000C1212120A06024244380000 +13EE:000000003C424040407C4242423C0000 +13EF:000000001E210101015D494949360000 +13F0:000000001C2222223C222262322C4000 +13F1:000000000E040E1111212129A9660000 +13F2:000000003C424240405C624242420000 +13F3:0000000030484A4540404E44443C0000 +13F4:000000007C4242427C424242427C0000 +13F5:000000000810102020404E4444380000 +13F6:00007FFE7B8E73F67BC67BF6718E7FFE7FFE61CE6FBE638E6FB66FCE7FFE0000 +13F7:00007FFE7B8E73F67BC67BF6718E7FFE7FFE61866FF663EE6FDE6FDE7FFE0000 +13F8:0000000000001C22223C2262322C4000 +13F9:0000000000000E040E111121A9660000 +13FA:0000000000003C4240405C6242420000 +13FB:000000000000304A4540404E443C0000 +13FC:0000000000007C42427C4242427C0000 +13FD:000000000000102020404E4444380000 +13FE:00007FFE7B8E73F67BC67BF6718E7FFE7FFE61866FBE638E6FBE6F867FFE0000 +13FF:00007FFE7B8E73F67BC67BF6718E7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +1400:000000000000007E0000007E00000000 +1401:0000000000000000000000007FFE400220041008081004200240018000000000 +1402:00000180024002400180000001800240042008101008200440027FFE00000000 +1403:00000000000000000000000001800240042008101008200440027FFE00000000 +1404:00000000000001800180000001800240042008101008200440027FFE00000000 +1405:0000000000000C000A00090008800840082008200840088009000A000C000000 +1406:0C000C0000000C000A00090008800840082008200840088009000A000C000000 +1407:0CC00CC000000C000A00090008800840082008200840088009000A000C000000 +1408:0000000000000C000A00090008800A400A200A200A40088009000A000C000000 +1409:0000000000000C000A000900088008400B200B200840088009000A000C000000 +140A:000000000000006000A00120022004200820082004200220012000A000600000 +140B:006000600000006000A00120022004200820082004200220012000A000600000 +140C:0000000000000000000000007FFE400220041008081064206240018000000000 +140D:0000000000000000000000007FFE400220041008081004260246018000000000 +140E:00000000000000000000000001806240642008101008200440027FFE00000000 +140F:00000000000000000000000001800246042608101008200440027FFE00000000 +1410:00000000000001800180000001806240642008101008200440027FFE00000000 +1411:00000000000001800180000001800246042608101008200440027FFE00000000 +1412:0000000000000C000A00090008800840682068200840088009000A000C000000 +1413:0000000000000C000A00090008800840082C082C0840088009000A000C000000 +1414:0C000C0000000C000A00090008800840682068200840088009000A000C000000 +1415:0C000C0000000C000A00090008800840082C082C0840088009000A000C000000 +1416:0000018001800C000A30093008800840082008200840088009000A000C000000 +1417:000000000000006000A00120022004206820682004200220012000A000600000 +1418:000000000000006000A0012002200420082C082C04200220012000A000600000 +1419:006000600000006000A00120022004206820682004200220012000A000600000 +141A:006000600000006000A0012002200420082C082C04200220012000A000600000 +141B:000003000300006018A01920022004200820082004200220012000A000600000 +141C:000000000000000011101110111011100EE00000000000000000000000000000 +141D:0000003000480048003006000900090006000000000000000000000000000000 +141E:00000010102828447C00000000000000 +141F:00000000040810204000000000000000 +1420:00000000402010080400000000000000 +1421:00000000444444443800000000000000 +1422:00000000384444444400000000000000 +1423:00000000780404047800000000000000 +1424:00000000384444443800000000000000 +1425:00000000091224489000000000000000 +1426:00000000242424240000000000000000 +1427:00000000000000001818000000000000 +1428:0000000000007C000000000000000000 +1429:0000000010107C101000000000000000 +142A:000000007C1010101000000000000000 +142B:0000000000000000000800080004FFF480124022204010800900060000000000 +142C:00000000000000000010001000080308048408441020201040087FF800000000 +142D:0000000000001820142012101110108810481040108011001200140018000000 +142E:00000000000001A002A004900890108820882080108008800480028001800000 +142F:0000000000000000000000000000400220041008081004200240018000000000 +1430:0000018002400240018000000180024004200810100820044002000000000000 +1431:0000000000000000000000000180024004200810100820044002000000000000 +1432:0000000000000180018000000180024004200810100820044002000000000000 +1433:00000040201008040202040810204000 +1434:60600040201008040202040810204000 +1435:66660040201008040202040810204000 +1436:00000040201008242222240810204000 +1437:00000040201008043232040810204000 +1438:00000002040810204040201008040200 +1439:06060002040810204040201008040200 +143A:0000000000000000000000000000400220041008081064206240018000000000 +143B:0000000000000000000000000000400220041008081004260246018000000000 +143C:0000000000000000000000000000018062406420081010082004400200000000 +143D:0000000000000000000000000000018002460426081010082004400200000000 +143E:0000000000000000018001800000018062406420081010082004400200000000 +143F:0000000000000000018001800000018002460426081010082004400200000000 +1440:000000000000010000800040002000100C080C08001000200040008001000000 +1441:00000000000004000200010000800040002C002C004000800100020004000000 +1442:018001800000010000800040002000100C080C08001000200040008001000000 +1443:06000600000004000200010000800040002C002C004000800100020004000000 +1444:000000000000001000200040008001001A001A00010000800040002000100000 +1445:00000000000000200040008001000200040C040C020001000080004000200000 +1446:003000300000001000200040008001001A001A00010000800040002000100000 +1447:00600060000000200040008001000200040C040C020001000080004000200000 +1448:00000180018000200C400C800100020004000400020001000080004000200000 +1449:00000000040810201008040000000000 +144A:00000000101010101000000000000000 +144B:00000000202038242400000000000000 +144C:000000000000000000001008100810081008100810081008081007E000000000 +144D:0180024002400180000007E00810100810081008100810081008100800000000 +144E:0000000000000000000007E00810100810081008100810081008100800000000 +144F:0000000001800180000007E00810100810081008100810081008100800000000 +1450:00000000000000000FE0001000080008000800080008000800100FE000000000 +1451:00000300030000000FE0001000080008000800080008000800100FE000000000 +1452:00000CC00CC000000FE0001000080008000800080008000800100FE000000000 +1453:00000000000000000FE0001000080088008800880088000800100FE000000000 +1454:00000000000000000FE0001000080008018801880008000800100FE000000000 +1455:000000000000000003F80400080008000800080008000800040003F800000000 +1456:000000600060000003F80400080008000800080008000800040003F800000000 +1457:000000000000000000000804080408046804680408040804040803F000000000 +1458:00000000000000000000402040204020402C402C4020402020401F8000000000 +1459:0000000000000000000003F00408080408046804680408040804080400000000 +145A:000000000000000000001F80204040204020402C402C40204020402000000000 +145B:0000000000C000C0000003F00408080408046804680408040804080400000000 +145C:000000000600060000001F80204040204020402C402C40204020402000000000 +145D:0000000000000000000007F00008000400046004600400040004000807F00000 +145E:000000000000000000003F80004000200020002C002C0020002000403F800000 +145F:0000000001800180000007F00008000400043004300400040004000807F00000 +1460:000000000C000C0000003F80004000200020002C002C0020002000403F800000 +1461:0000000000000000000001FC0200040004003400340004000400020001FC0000 +1462:000000000000000000000FE0100020002000201820182000200010000FE00000 +1463:0000000000600060000003F80400080008006800680008000800040003F80000 +1464:000000000300030000001FC0200040004000401840184000400020001FC00000 +1465:0000000000000000000003F80400680068000800080068006800040003F80000 +1466:000000003C4040403C00000000000000 +1467:00000000000000000000201420142014201420102010201010200FC000000000 +1468:000000000000000000000FC41024201420142010201020102010201000000000 +1469:00000000000000003F88004800280028002000200020002000403F8000000000 +146A:00000000000000000FE8100820082008200020002000200010000FE000000000 +146B:0000000000384444443C040404040000 +146C:18242418003844444478404040400000 +146D:00000000003844444478404040400000 +146E:00003030003844444478404040400000 +146F:0000000000040404043C444444380000 +1470:00000C0C00040404043C444444380000 +1471:0000363600040404043C444444380000 +1472:00000000004040404078444444380000 +1473:00006060004040404078444444380000 +1474:00000000001C2222221E026262020000 +1475:000000000070888888780B0B08080000 +1476:00000000000E1111111ED0D010100000 +1477:000000000070888888F0868680800000 +1478:00000C0C000E1111111ED0D010100000 +1479:000060600070888888F0868680800000 +147A:0000000000010161610F1111110E0000 +147B:000000000008080B0B78888888700000 +147C:0000030300010161610F1111110E0000 +147D:000018180008080B0B78888888700000 +147E:0000000000101010D0DE1111110E0000 +147F:000000000080808686F0888888700000 +1480:0000181800101010D0DE1111110E0000 +1481:0000C0C00080808686F0888888700000 +1482:00000000001010D0D01ED1D1110E0000 +1483:00000000202020382424180000000000 +1484:000000000404041C2424180000000000 +1485:0000000000728A8A8A78080808080000 +1486:0000000000728A8A8AF0808080800000 +1487:00000000000A0A0A0A78888888700000 +1488:00000000004242424278444444380000 +1489:00000000003844444404040404040000 +148A:30484830003844444440404040400000 +148B:00000000003844444440404040400000 +148C:00003030003844444440404040400000 +148D:00000000000404040404444444380000 +148E:00000C0C000404040404444444380000 +148F:00003636000404040404444444380000 +1490:00000000004040404040444444380000 +1491:00006060004040404040444444380000 +1492:00000000001C22222202C2C202020000 +1493:00000000007088888B0B080808080000 +1494:00000000000E1111D1D0101010100000 +1495:00000000007088888880868680800000 +1496:00000C0C000E1111D1D0101010100000 +1497:000060600070888888808C8C80800000 +1498:00000000000202C2C2022222221C0000 +1499:00000000000808080B0B888888700000 +149A:00000606000202C2C2022222221C0000 +149B:000018180008080B0B08888888700000 +149C:0000000000101010D0D01111110E0000 +149D:00000080808080868680888888700000 +149E:0000181800101010D0D01111110E0000 +149F:0000C0C0008080868680888888700000 +14A0:0000000000101010D0D011D1D10E0000 +14A1:00000000202020202424180000000000 +14A2:00000000040404042424180000000000 +14A3:00000000007C04040404040404040000 +14A4:30484830007C40404040404040400000 +14A5:00000000007C40404040404040400000 +14A6:00003030007C40404040404040400000 +14A7:000000000004040404040404047C0000 +14A8:00000C0C0004040404040404047C0000 +14A9:000036360004040404040404047C0000 +14AA:000000000040404040404040407C0000 +14AB:000060600040404040404040407C0000 +14AC:00000000001F01016161010101010000 +14AD:0000000000F808080B0B080808080000 +14AE:00000000001F1010D0D0101010100000 +14AF:0000000000F880808686808080800000 +14B0:00000C0C001F1010D0D0101010100000 +14B1:00003030007C40404646404040400000 +14B2:000000000001010161610101011F0000 +14B3:00000000000808080B0B080808F80000 +14B4:0000060600020202C2C20202023E0000 +14B5:00001818000808080B0B080808F80000 +14B6:0000000000101010D0D01010101F0000 +14B7:00000000008080808686808080F80000 +14B8:0000181800101010D0D01010101F0000 +14B9:000060600040404046464040407C0000 +14BA:00000000001010D0D010D0D0101F0000 +14BB:0000000020202020203C000000000000 +14BC:000000001C20201C0000000000000000 +14BD:0000000004040404043C000000000000 +14BE:00000000182408103C00000000000000 +14BF:000000003C42020204081020407E0000 +14C0:0000000000000000000000000000000000001FE001100110011000E000000000 +14C1:0000000000000000030004800480030000000FF01100110011000E0000000000 +14C2:0000000000000000000000000000000000000FF01100110011000E0000000000 +14C3:0000000000000000000000000300030000000FF01100110011000E0000000000 +14C4:00000000000000000000000000000000000000E00110011001101FE000000000 +14C5:00000000000000000000000000C000C0000000E00110011001101FE000000000 +14C6:00000000000000000000000006600660000000E00110011001101FE000000000 +14C7:0000000000000000000000000000000000000E001100110011000FF000000000 +14C8:000000000000000000000000030003000000070008800880088007F800000000 +14C9:00000000000000000000000000000000000007F8304430440044003800000000 +14CA:0000000000000000000000000000000000003FC0022C022C022001C000000000 +14CB:000000000000000000000000000000000000038004403440344003FC00000000 +14CC:0000000000000000000000000000000000000E301130110011000FF000000000 +14CD:000000000000000000000000030003000000038004403440344003FC00000000 +14CE:0000000000000000000000000C000C0000000E301130110011000FF000000000 +14CF:0000000000000000000000001980198000000E001100110011000FF000000000 +14D0:000000003048483F0000000000000000 +14D1:000000002222221C0000000000000000 +14D2:000000000609097E0000000000000000 +14D3:0000000000000000000000000000000000001FE000100010001000E000000000 +14D4:0000000000000000060009000900060000000FF01000100010000E0000000000 +14D5:0000000000000000000000000000000000000FF01000100010000E0000000000 +14D6:0000000000000000000000000600060000000FF01000100010000E0000000000 +14D7:00000000000000000000000000000000000000E00010001000101FE000000000 +14D8:00000000000000000000000000C000C0000000E00010001000101FE000000000 +14D9:00000000000000000000000003300330000000E00010001000101FE000000000 +14DA:0000000000000000000000000000000000000E001000100010000FF000000000 +14DB:000000000000000000000000030003000000070008000800080007F800000000 +14DC:00000000000000000000000000000000000007F8300430040004003800000000 +14DD:0000000000000000000000000000000000003FC0002C002C002001C000000000 +14DE:00000000000000000000000000000000000003FC340034000400038000000000 +14DF:0000000000000000000000000000000000001FE0200C200C20001C0000000000 +14E0:00000000000000000000000001800180000003FC340034000400038000000000 +14E1:0000000000000000000000000C000C0000001FE0200C200C20001C0000000000 +14E2:00000000000000000000000000000000000018E01810001000101FE000000000 +14E3:00000000000000000000000000000000000001C0002C002C00203FC000000000 +14E4:00000000000000000000000000600060000018E01810001000101FE000000000 +14E5:00000000000000000000000000C000C0000001C0002C002C00203FC000000000 +14E6:000000000000000000000000000000000000038034003400040003FC00000000 +14E7:000000000000000000000000000000000000071808180800080007F800000000 +14E8:000000000000000000000000030003000000038034003400040003FC00000000 +14E9:0000000000000000000000000C000C0000000E301030100010000FF000000000 +14EA:000000006080807E0000000000000000 +14EB:000000000C300C300C00000000000000 +14EC:000000061860300C020C306018060000 +14ED:0000000040404040201C040404040000 +14EE:0C12120C000404040870404040400000 +14EF:00000000040404040870404040400000 +14F0:000C0C00040404040408704040400000 +14F1:000000000404041C2040404040400000 +14F2:000C0C000404041C2040404040400000 +14F3:006666000404041C2040404040400000 +14F4:00000000404040700804040404040000 +14F5:00606000404040700804040404040000 +14F6:00000000202020202010CEC202020000 +14F7:00000000808080868640380808080000 +14F8:00000000020202C2C204382020200000 +14F9:00000000080808080810E68680800000 +14FA:00060600020202C2C204382020200000 +14FB:00181800080808080810E68680800000 +14FC:000000000262620E1020202020200000 +14FD:000000000404041C2046464040400000 +14FE:000606000262620E1020202020200000 +14FF:000C0C000404041C2046464040400000 +1500:000000004040407008C4C40404040000 +1501:00000000808086E61008080808080000 +1502:006060004040407008C4C40404040000 +1503:00C0C000808086E61008080808080000 +1504:0000000010D0D01C02C1C10101010000 +1505:00000000202030080808000000000000 +1506:00000000182010083000000000000000 +1507:00000000080818202020000000000000 +1508:000000002020201C0000000000000000 +1509:00000000202038041C24180000000000 +150A:0000000004041C203824180000000000 +150B:00303000202030080808001818000000 +150C:000018001800000410081010182004400480048000400C200C10000800040000 +150D:000060006000000040FE4100620012001200120002003200310000FE00000000 +150E:00000000180018000000108010801880048004F0048800880C880C7000000000 +150F:0000000018001800000010801080188004800480048800880C880C7000000000 +1510:000000000000000000000E00110011001100010001100110011000E000000000 +1511:0000000000000000000000E001100110011001001100110011000E0000000000 +1512:0000000000C000C0000000E001100110011001001100110011000E0000000000 +1513:0000000000000000000000000000000000000C601210111010900C6000000000 +1514:0000000000000000000001800180000000000C601210111010900C6000000000 +1515:0000000000000000000000000000000000000C601090111012100C6000000000 +1516:0000000000000000000001800180000000000C601090111012100C6000000000 +1517:0000000000000000000007000880088008800080308830880088007000000000 +1518:000000000000000000001C00220022182218020002200220022001C000000000 +1519:0000000000000000000000700088308830880080088008800880070000000000 +151A:0000000000000000000001C002200220022002002218221822001C0000000000 +151B:0000000000600060000000700088308830880080088008800880070000000000 +151C:0000000001800180000001C002200220022002002218221822001C0000000000 +151D:0000000000000000000000000000000000003318348404440424031800000000 +151E:00000000000000000000000000000000000018CC242C2220212018C000000000 +151F:0000000000000000000000C000C0000000003318348404440424031800000000 +1520:00000000000000000000030003000000000018CC242C2220212018C000000000 +1521:0000000000000000000000000000000000003318348404440424031800000000 +1522:00000000000000000000000000000000000018CC212C2220242018C000000000 +1523:0000000000000000000000C000C0000000003318342404440484031800000000 +1524:0000000000000000000003000300000000000C661096111012100C6000000000 +1525:00000000485424000000000000000000 +1526:00000000040810207C04040404040000 +1527:18242418402010087C40404040400000 +1528:00000000402010087C40404040400000 +1529:00606000402010087C40404040400000 +152A:0000000004040404047C201008040000 +152B:000C0C0004040404047C201008040000 +152C:0066660004040404047C201008040000 +152D:0000000040404040407C081020400000 +152E:0060600040404040407C081020400000 +152F:000000000204C8D03E02020202020000 +1530:0000000008102343F808080808080000 +1531:00000000100804C2DF10101010100000 +1532:0000000080402616F880808080800000 +1533:00181800100804C2DF10101010100000 +1534:00C0C00080402616F880808080800000 +1535:0000000002020202023ED0C804020000 +1536:000000000808080808FB432010080000 +1537:0006060002020202023ED0C804020000 +1538:001818000808080808FB432010080000 +1539:000000001010101010DFC20408100000 +153A:000000008080808080F8162640800000 +153B:001818001010101010DFC20408100000 +153C:00C0C0008080808080F8162640800000 +153D:000000001010D0D0101FC2C408100000 +153E:0000000020203C081020000000000000 +153F:00000000282854540000000000000000 +1540:0000000010107C101000000000000000 +1541:00000000000044281028440000000000 +1542:0000000000000000000000000000000010F010801080108010800F0000000000 +1543:000000000000000000000000000000001E10021002100210021001E000000000 +1544:0000000000000000000000000000000001E002100210021002101E1000000000 +1545:000000000000060009000900060000000F00108010801080108010F000000000 +1546:000000000000000000000000000000000F00108010801080108010F000000000 +1547:000000000000000000000600060000000F00108010801080108010F000000000 +1548:00000000007C020202027C4040400000 +1549:00003030007C020202027C4040400000 +154A:00000000004040407C020202027C0000 +154B:00000000003E404040403E0202020000 +154C:00001818003E404040403E0202020000 +154D:00000000000202023E404040403E0000 +154E:00000C0C001F202020201FC1C1010000 +154F:00003030007C808083837C0404040000 +1550:00000000182020180808000000000000 +1551:00000000300C300C3000000000000000 +1552:0000006018060C3040300C0618600000 +1553:0000000000000000000000001800240224041808081004200240018000000000 +1554:0000000001800240024001800000018002400420081018082404240218000000 +1555:0000000000000000000000000000018002400420081018082404240218000000 +1556:0000000000000000018001800000018002400420081018082404240218000000 +1557:0000000000000000060009000980064000200010001000200040008001000200 +1558:0000060006000000060009000980064000200010001000200040008001000200 +1559:0000000000000000006000900190026004000800080004000200010000800040 +155A:0000006000600000006000900190026004000800080004000200010000800040 +155B:0000001800180000001800240064009801003200320001000080004000200010 +155C:0000018001800000018002400640098010002018201810000800040002000100 +155D:0000000C122C40201008000000000000 +155E:000000000000000000000C08120812081C08100810081008081007E000000000 +155F:000000000000000000001030104810481038100810081008081007E000000000 +1560:0000000000000000000007E008101008100810081C08120812080C0800000000 +1561:0000000000000000000007E00810100810081008103810481048103000000000 +1562:0000000001800180000007E008101008100810081C08120812080C0800000000 +1563:0000000001800180000007E00810100810081008103810481048103000000000 +1564:000000000000000007E0091009080608000800080008000800100FE000000000 +1565:000001800180000007E0091009080608000800080008000800100FE000000000 +1566:000000000000000003F00448084808300800080008000800040003F800000000 +1567:000000C000C0000003F00448084808300800080008000800040003F800000000 +1568:000000600060000001F80224042404183400340004000400020001FC00000000 +1569:00000300030000000FC01120212020C0200C200C2000200010000FE000000000 +156A:000000001C2A2A24201E000000000000 +156B:000000000000000000001110111011101110111010101010082007C000000000 +156C:0000000000000000000007C00820101010101110111011101110111000000000 +156D:000000000000000000001FC00020001000101F100010001000201FC000000000 +156E:0000000000000000000003F804000800080008F808000800040003F800000000 +156F:000000000000000008102A541C3808101C382A54081000000000000000000000 +1570:000000000000000000001450145014501450139010101010082007C000000000 +1571:0000000000000000000007C00820101010101390145014501450145000000000 +1572:000000000000000000001FC000201E100110011001101E1000201FC000000000 +1573:0000000000000000000003F8040008780880088008800878040003F800000000 +1574:000000000000000000000E001100110011000F00012001400180010000000000 +1575:0000000000000000000001C002200220022003C012000A000600020000000000 +1576:0000000001800180000001C002200220022003C012000A000600020000000000 +1577:0000000000000000000001000180014001200F001100110011000E0000000000 +1578:0000000003000300000001000180014001200F001100110011000E0000000000 +1579:00000000000000000000020006000A00120003C002200220022001C000000000 +157A:00000000030003000000020006000A00120003C002200220022001C000000000 +157B:000000001030501C12120C0000000000 +157C:0000000000424242427E424242420000 +157D:00000000442810284400000000000000 +157E:003000480048003000001C70208820881C8804F0048000800080008000000000 +157F:000000000000000000001C70208820881C8804F0048000800080008000000000 +1580:000000000060006000001C70208820881C8804F0048000800080008000000000 +1581:000000000000000000001C08200820081C080478048800880088007000000000 +1582:000000000018001800001C08200820081C080478048800880088007000000000 +1583:000000000000000000001C80208020801C8004F0048800880088007000000000 +1584:0000000000C000C000001C80208020801C8004F0048800880088007000000000 +1585:0000000000000000000006400840087006480248023000000000000000000000 +1586:00000000000E1111110F050509090000 +1587:00000000000E1111111E141412120000 +1588:0000000000090905050F1111110E0000 +1589:0000000000121214141E1111110E0000 +158A:000000000000000000000E001100110011000100012001400180010000000000 +158B:0000000000000000000001C0022002200220020012000A000600020000000000 +158C:00000000000000000000010001800140012001001100110011000E0000000000 +158D:00000000000000000000020006000A001200020002200220022001C000000000 +158E:000C00120012000C0000301C482248223C2204A004A003200020002000000000 +158F:00000000000000000000301C482248223C2204A004A003200020002000000000 +1590:00000000001800180000301C482248223C2204A004A003200020002000000000 +1591:000000000000000000003002480248023C02048204A203220022001C00000000 +1592:000000000006000600003002480248023C02048204A203220022001C00000000 +1593:000000000000000000003020482048203C2004A004A203220022001C00000000 +1594:000000000030003000003020482048203C2004A004A203220022001C00000000 +1595:0000000000000000000006000900090007800090009000600000000000000000 +1596:0000000000000000000031804A404A403FE00024002400180000000000000000 +1597:00000000003C424A4A32020202020000 +1598:00000000003C4252524C404040400000 +1599:000000000002020202324A4A423C0000 +159A:0000000000404040404C5252423C0000 +159B:00000000000000000000000000001FE000001FE001100110011000E000000000 +159C:00000000000000000000000000000FF000000FF01100110011000E0000000000 +159D:00000000000000000000000000001FE0000000E00110011001101FE000000000 +159E:00000000000000000000000000001FE000000E001100110011000FF000000000 +159F:0000003F003048483F00000000000000 +15A0:0000000000000000000000000080004000200FF01000100010000E0000000000 +15A1:0000000000000180018000000080004000200FF01000100010000E0000000000 +15A2:00000000000000000000000000E00010001000101FE008000400020000000000 +15A3:00000000000000C000C0000000E00010001000101FE008000400020000000000 +15A4:0000000000000000000000000E001000100010000FF000200040008000000000 +15A5:0000000000000600060000000E001000100010000FF000200040008000000000 +15A6:000000003040403C0810000000000000 +15A7:00000000040810207C043E0404040000 +15A8:00000000201008043E207C2020200000 +15A9:00606000201008043E207C2020200000 +15AA:000000000404043E047C201008040000 +15AB:000C0C000404043E047C201008040000 +15AC:000000002020207C203E040810200000 +15AD:003030002020207C203E040810200000 +15AE:000000002078203C0810200000000000 +15AF:0000000000808080BCC28282C2BC0000 +15B0:0000000000BCFEFEFEFEBC8080800000 +15B1:00000000000202027AFEFEFEFE7A0000 +15B2:0000000000808080BCFEFEFEFEBC0000 +15B3:00000000007AFEFEFEFE7A0202020000 +15B4:00000000007C4040407C404040400000 +15B5:0000000000040404047C0404047C0000 +15B6:0000000000404040407C4040407C0000 +15B7:00000000007C0404047C040404040000 +15B8:000000000000000000000E100A100A1009E00800080008000800080000000000 +15B9:0000000000000000000000100010001000100010079008500850087000000000 +15BA:000000000000000000000800080008000800080009E00A100A100E1000000000 +15BB:0000000000000000000008700850085007900010001000100010001000000000 +15BC:000000000000000000000C100A20094008800800080008000800080000000000 +15BD:0000000000000000000000100010001000100010011002900450083000000000 +15BE:0000000000000000000008000800080008000800088009400A200C1000000000 +15BF:0000000000000000000008300450029001100010001000100010001000000000 +15C0:0000000000000000000000100010001007100890089000500050003000000000 +15C1:0000000000000000000008000800080008E0091009100A000A000C0000000000 +15C2:0000000000000000000000300050005008900890071000100010001000000000 +15C3:000000000000000000000C000A000A000910091008E008000800080000000000 +15C4:00000000000000000000000000004002200410080FF004200240018000000000 +15C5:00000000000000000000000000000180024004200FF010082004400200000000 +15C6:0000000008000400020001000180014001200120014001800100020004000800 +15C7:0000000008000400020001000180054005200520054001800100020004000800 +15C8:000000000800040002000100018001400D200D20014001800100020004000800 +15C9:00000000004000800100020006000A00120012000A0006000200010000800040 +15CA:000000000000000000000000000040023FFC1008081004200240018000000000 +15CB:0000000000000000000000000000018002400420081010083FFC400200000000 +15CC:0000000008000400060005000480044004200420044004800500060004000800 +15CD:0000000008000400060005000480054005200520054004800500060004000800 +15CE:0000000008000400060005000480044005A005A0044004800500060004000800 +15CF:0000000000400080018002800480088010801080088004800280018000800040 +15D0:0000000000000000000000000000410421081110092005400380010000000000 +15D1:0000000000000000000000000000010003800540092011102108410400000000 +15D2:0000000004000200010000800040002007F00020004000800100020004000000 +15D3:000000000400020001000080044004200FF00420044000800100020004000000 +15D4:000000000400020001000080004006200FF00620004000800100020004000000 +15D5:000000000020004000800100020004000FE00400020001000080004000200000 +15D6:0000000000000000000000000000410421081FF0092005400380010000000000 +15D7:000000000000000000000000000001000380054009201FF02108410400000000 +15D8:0000000004000200010001800140012007F00120014001800100020004000000 +15D9:000000000400020001000180054005200FF00520054001800100020004000000 +15DA:00000000040002000100018001400D201FF00D20014001800100020004000000 +15DB:0000000000100020004000C00140024007F00240014000C00040002000100000 +15DC:000000000000000000001FF8100810081008100810081008081007E000000000 +15DD:0000000000000000000007E008101008100810081008100810081FF800000000 +15DE:00000000000000001FC0102010101010101010101010101010201FC000000000 +15DF:00000000000000001FC0102010101110111011101110101010201FC000000000 +15E0:00000000000000001FC0102010101010131013101010101010201FC000000000 +15E1:000000000000000007F00810101010101010101010101010081007F000000000 +15E2:000000000000000000001818142812481188100810081008081007E000000000 +15E3:0000000000000000000007E00810100810081008118812481428181800000000 +15E4:00000000000000001FE0101008080408020802080408080810101FE000000000 +15E5:00000000000000001FE0101008080448024802480448080810101FE000000000 +15E6:00000000000000001FE010100808040802C802C80408080810101FE000000000 +15E7:000000000000000007F80808101010201040104010201010080807F800000000 +15E8:0000000000000000000010081008100810081FF810081008081007E000000000 +15E9:0000000000000000000007E00810100810081FF8100810081008100800000000 +15EA:00000000000000001FC0042004100410041004100410041004201FC000000000 +15EB:00000000000000001FC0042004100490049004900490041004201FC000000000 +15EC:00000000000000001FC0042004100410059005900410041004201FC000000000 +15ED:000000000000000007F00840104010401040104010401040084007F000000000 +15EE:00000000101010107C00000000000000 +15EF:00000000000000000000410441044104410441044104410422881C7000000000 +15F0:000000000000000000001C702288410441044104410441044104410400000000 +15F1:000000000000000000000FE00010001000100FE00010001000100FE000000000 +15F2:000000000000000000000FE00010001002100FE00210001000100FE000000000 +15F3:000000000000000000000FE00010001006100FE00610001000100FE000000000 +15F4:0000000000000000000007F008000800080007F008000800080007F000000000 +15F5:000000000000000000007FFC41044104410441044104410422881C7000000000 +15F6:000000000000000000001C7022884104410441044104410441047FFC00000000 +15F7:000000000000000000000FE00810081008100FE00810081008100FE000000000 +15F8:000000000000000000000FE00810081008900FE00890081008100FE000000000 +15F9:000000000000000000000FE00810081009900FE00990081008100FE000000000 +15FA:0000000000000000000007F008100810081007F008100810081007F000000000 +15FB:00000000000000000000610C593447C4410441044104410422881C7000000000 +15FC:000000000000000000001C702288410441044104410447C45934610C00000000 +15FD:000000000000000000000FE00810041002100FE00210041008100FE000000000 +15FE:000000000000000000000FE00810041002500FE00250041008100FE000000000 +15FF:000000000000000000000FE00810041002D00FE002D0041008100FE000000000 +1600:0000000000000000000007F008100820084007F008400820081007F000000000 +1601:00000000442810000000000000000000 +1602:00000000004040404040444444380000 +1603:00000000003844444404040404040000 +1604:0000000000000000000000000000000000000FF0000800080008007000000000 +1605:0000000000000000000000000000000000000FF0000800480048000800700000 +1606:0000000000000000000000000000000000000FF0000800680068000800700000 +1607:000000000000000000000000000000000000070008000800080007F800000000 +1608:00000000000000000000400040004100410041044104410422881C7000000000 +1609:000000000000000000001C702288410441044104010401040004000400000000 +160A:000000000000000000001FE000100010001007E000100010001001E000000000 +160B:000000000000000000001FE000100410041007E004100410001001E000000000 +160C:000000000000000000001FE000100010031007E003100010001001E000000000 +160D:000000000000000000000F001000100010000FC01000100010000FF000000000 +160E:000000000000000000001070108810881088104810081008081007E000000000 +160F:0000000000000000000007E008101008100812081108110811080E0800000000 +1610:00000000000000000FE00010000800080008070808880808081007E000000000 +1611:00000000000000000FE00010000800080088078808880808081007E000000000 +1612:00000000000000000FE0001000080008018807C809880808081007E000000000 +1613:000000000000000003F00408080808880870080008000800040003F800000000 +1614:000000000000000007F8003000C00100020004E005100410022001C000000000 +1615:00000000000000000FF00600018000400020039004500410022001C000000000 +1616:000000000000000001C0022004100450039000200040018006000FF000000000 +1617:00000000000000000000000010E0111012481488148818901860100000000000 +1618:00000000000000000000000021E02210244828C829483108311020E000000000 +1619:00000000000000000000000021F02208246428F429643104310820F000000000 +161A:000000000000000000000000100018601890148814881248111010E000000000 +161B:0000000000000000000000000008061809181128112812480888070800000000 +161C:000000000000100008780580020002000400047004880408020801F000000000 +161D:00000000000000000F801040102011200E2000200040004001A01E1000080000 +161E:000000000000200011F00A08040404C40904090808F010001000100000000000 +161F:000000000000200011F00A08044404C40944090808F010001000100000000000 +1620:000000000000200011F00A08046404E40964090808F010001000100000000000 +1621:000000000000000000000E081108110811081210101008600790000800040000 +1622:000000000000000000000000000000003C04040404040404020801F000000000 +1623:000000000000000000000000000000000F801040202020202020203C00000000 +1624:0000000000000400040004000780004000200020002000200040078000000000 +1625:0000000000000400040004000780004001200120012001200040078000000000 +1626:0000000000000400040004000780004000200320032000200040078000000000 +1627:00000000000000200020002001E002000400040004000400020001E000000000 +1628:000000000000000000000000000020003C04240404040404020801F000000000 +1629:000000000000000000000000000000000F801040202020202024203C00040000 +162A:0000000000000E00040004000780004000200020002000200040078000000000 +162B:0000000000000E00040004000780004001200120012001200040078000000000 +162C:0000000000000E00040004000780004000200320032000200040078000000000 +162D:00000000000000E00040004003C004000800080008000800040003C000000000 +162E:000000000000000000001E78042008101008100810081008081007E000000000 +162F:0000000000000000000007E008101008100810081008081004201E7800000000 +1630:000000000000080008000FE00010000800080008000800100FE0080008000000 +1631:000000000000080008000FE00010008800880088008800100FE0080008000000 +1632:000000000000080008000FE00010000801880188000800100FE0080008000000 +1633:0000000000000008000803F804000800080008000800040003F8000800080000 +1634:00000000000000000000000000000002701E101210101010082007C000000000 +1635:0000000000000000000000000000000003E00410080808084808780E40000000 +1636:000000001C00080008000FE00010000800080008000800100FE0080008000000 +1637:000000001C00080008000FE00010008800880088008800100FE0080008000000 +1638:000000001C00080008000FE00010000801880188000800100FE0080008000000 +1639:0000000000380010001007F008001000100010001000080007F0001000100000 +163A:000000000000000000000002610E210A210821082108210821081EF000000000 +163B:0000000000000000000000000F78108410841084108410845084708640000000 +163C:0000000000001C0008000FE00010001000100FE00010001000100FE008000000 +163D:0000000000001C0008000FE00010001008100FE00810001000100FE008000000 +163E:0000000000001C0008000FE0001000100C100FE00C10001000100FE008000000 +163F:000000000000007000200FE01000100010000FE01000100010000FE000200000 +1640:000000000000000000001818042004200810100810081008081007E000000000 +1641:0000000000000000000007E00810100810081008081004200420181800000000 +1642:000000000000000023E02410180800080008000800081808241023E000000000 +1643:000000000000000023E02410180800880088008800881808241023E000000000 +1644:000000000000000023E02410180800080188018800081808241023E000000000 +1645:00000000000000000F88104820302000200020002000203010480F8800000000 +1646:000000007C0810207C00000000000000 +1647:000010107C0810207C10100000000000 +1648:00000000000000000000339809200920101020082008200810100FE000000000 +1649:000000000000000000000FE01010200820082008101009200920339800000000 +164A:00000000000023E024101808000820083808200800081808241023E000000000 +164B:00000000000023E024101808008820883888208800881808241023E000000000 +164C:00000000000023E024101808000820C839E820C800081808241023E000000000 +164D:0000000000000F881048203020002008203820082000203010480F8800000000 +164E:00000000000000000000000021081110111021082108210821081EF000000000 +164F:0000000000000000000000001EF0210821082108210811101110210800000000 +1650:00000000000009E006100010001000100FE0001000100010061009E000000000 +1651:00000000000009E006100010001002100FE0021000100010061009E000000000 +1652:00000000000009E006100010001003100FE0031000100010061009E000000000 +1653:0000000000000790086008000800080007F00800080008000860079000000000 +1654:000000000000000000000000210811101FF021082108210821081EF000000000 +1655:0000000000000000000000001EF021082108210821081FF01110210800000000 +1656:00000000000013E00C100408040804081FF00408040804080C1013E000000000 +1657:00000000000013E00C100408048804881FF00488048804080C1013E000000000 +1658:00000000000013E00C100408040804C81FF004C8040804080C1013E000000000 +1659:00000000000007C808301020102010200FF8102010201020083007C800000000 +165A:000010103C4038047810100000000000 +165B:000000000000000000000000238811101FF021082108210821081EF000000000 +165C:0000000000000000000000001EF021082108210821081FF01110238800000000 +165D:00000000000013E00C100408040814081FF01408040804080C1013E000000000 +165E:00000000000013E00C100408048814881FF01488048804080C1013E000000000 +165F:00000000000013E00C100408040814C81FF014C8040804080C1013E000000000 +1660:00000000000013E00C100408040814081FF01408040804080C1013E000000000 +1661:00000000000000000000000023881110111021082108210821081EF000000000 +1662:0000000000000000000000001EF0210821082108210811101110238800000000 +1663:00000000000009E006100010001008100FE0081000100010061009E000000000 +1664:00000000000009E00610001000100A100FE00A1000100010061009E000000000 +1665:00000000000009E00610001000100B100FE00B1000100010061009E000000000 +1666:0000000000000790086008000800081007F00810080008000860079000000000 +1667:00000000000000000000000023881110193025482388210821081EF000000000 +1668:0000000000000000000000001EF0210821082388254819301110238800000000 +1669:00000000000027E018100808040822083FF0220804080808181027E000000000 +166A:00000000000027E018100808044822483FF0224804480808181027E000000000 +166B:00000000000027E018100808040822683FF0226804080808181027E000000000 +166C:0000000000000FC810302020204020881FF820882040202010300FC800000000 +166D:00000000424224241818242442420000 +166E:00000000000000000044281028440000 +166F:000000000000000000001C70208820881C880478040800080008000800000000 +1670:00000000000000000000301C482248223C220482048203020002000200000000 +1671:00000000000000000000281C542254223E2202A002A001200020002000000000 +1672:00000000001800180000281C542254223E2202A002A001200020002000000000 +1673:000000000000000000002802540254023E02028202A201220022001C00000000 +1674:000000000006000600002802540254023E02028202A201220022001C00000000 +1675:000000000000000000002820542054203E2002A002A201220022001C00000000 +1676:000000000030003000002820542054203E2002A002A201220022001C00000000 +1677:0000000008102646F8087C0808080000 +1678:00000000402313087C40F84040400000 +1679:00606000402313087C40F84040400000 +167A:000000000808087C08F8462610080000 +167B:001818000808087C08F8462610080000 +167C:00000000404040F8407C0B1320400000 +167D:00606000404040F8407C0B1320400000 +167E:000000107C107C100000000000000000 +167F:000000007C007C000000000000000000 +1680:0000000000000000000000000000FFFF00000000000000000000000000000000 +1681:0000000000000000000000000000FFFF01000100010001000100010000000000 +1682:0000000000000000000000000000FFFF02800280028002800280028000000000 +1683:0000000000000000000000000000FFFF05400540054005400540054000000000 +1684:0000000000000000000000000000FFFF0AA00AA00AA00AA00AA00AA000000000 +1685:0000000000000000000000000000FFFF15501550155015501550155000000000 +1686:0000010001000100010001000100FFFF00000000000000000000000000000000 +1687:0000028002800280028002800280FFFF00000000000000000000000000000000 +1688:0000054005400540054005400540FFFF00000000000000000000000000000000 +1689:00000AA00AA00AA00AA00AA00AA0FFFF00000000000000000000000000000000 +168A:0000155015501550155015501550FFFF00000000000000000000000000000000 +168B:0000000000400040008000800100FFFF01000200020004000400000000000000 +168C:0000000000A000A0014001400280FFFF0280050005000A000A00000000000000 +168D:000000000150015002A002A00540FFFF05400A800A8015001500000000000000 +168E:0000000002A802A8055005500AA0FFFF0AA0154015402A802A80000000000000 +168F:00000000055405540AA80AA81550FFFF15502AA02AA055405540000000000000 +1690:0000000000000000000001000100FFFF01000100000000000000000000000000 +1691:0000000000000000000002800280FFFF02800280000000000000000000000000 +1692:0000000000000000000005400540FFFF05400540000000000000000000000000 +1693:000000000000000000000AA00AA0FFFF0AA00AA0000000000000000000000000 +1694:0000000000000000000015501550FFFF15501550000000000000000000000000 +1695:0000000004400440028002800100FFFF01000280028004400440000000000000 +1696:0000010001000280028004400440FFFF04400440028002800100010000000000 +1697:0000000000000000000000000000FFFF0800080009C0084008400FC000000000 +1698:0000000000000000000000000000FFFF1290092006C006C00920129024480000 +1699:05500FF805500FF805500FF80550FFFF00000000000000000000000000000000 +169A:0000000000000000000000000000FFFF00000FF0000000000000000000000000 +169B:000000002000100008000400020001FF02000400080010002000000000000000 +169C:0000000000040008001000200040FF8000400020001000080004000000000000 +169D:00007FFE7BCE73BE7B8E7BB671CE7FFE7FFE738E6DB671B67DB6738E7FFE0000 +169E:00007FFE7BCE73BE7B8E7BB671CE7FFE7FFE73866DBE718E7DBE73867FFE0000 +169F:00007FFE7BCE73BE7B8E7BB671CE7FFE7FFE73866DBE718E7DBE73BE7FFE0000 +16A0:0092A4C890A0C0808080808080808000 +16A1:00AA94A8D0A0C0808080808080808000 +16A2:0080C0A0908884848484848484848400 +16A3:0080C0A0908884829292929292929200 +16A4:0080C0A090888484B4B4848484848400 +16A5:0080C0A0908884C2A292929292929200 +16A6:00808080C0A090888890A0C080808000 +16A7:00808080C0A090A8A890A0C080808000 +16A8:0080C0A090C8A0908880808080808000 +16A9:0080C2A498C2A4988080808080808000 +16AA:0080C2A498C0A0908080808080808000 +16AB:0080C0A090C8A0908880808080808000 +16AC:00101090503090583412181412101000 +16AD:00101010101018141218141210101000 +16AE:00080808080818284818284808080808 +16AF:00101012141812345890305090101000 +16B0:00101012141810305090305090101000 +16B1:0080C0A09088848890A0A09088848200 +16B2:00000004081020402010080400000000 +16B3:008080808080808080C0A09088848200 +16B4:0082848890A0C0808080808080808000 +16B5:00B2B48890A0C0808080808080808000 +16B6:0042444850E0E0E04040404040404000 +16B7:00828244442828101028284444828200 +16B8:00828244442828545428284444828200 +16B9:0080C0A0908890A0C080808080808000 +16BA:008282828282E2928E82828282828200 +16BB:0082828282E2928EE2928E8282828200 +16BC:00101010925438103854921010101000 +16BD:00101010101038383810101010101000 +16BE:00101010905030101814121010101000 +16BF:00202020202030282422202020202000 +16C0:00101010905038383814121010101000 +16C1:00101010101010101010101010101000 +16C2:00101010101038383810101010101000 +16C3:00000010204088442204081000000000 +16C4:00101010103854929254381010101000 +16C5:00101010121418103050901010101000 +16C6:00080808080808182848880808080800 +16C7:00101814121010101010109050301000 +16C8:0082C4A89080808080808090A8C48200 +16C9:00929254543838101010101010101000 +16CA:00081020402010081020402010080000 +16CB:0040404040444C546444040404040400 +16CC:00101010101010100000000000000000 +16CD:00101010101038383800000000000000 +16CE:00101010109254381000000000000000 +16CF:00103854921010101010101010101000 +16D0:00081828488808080808080808080800 +16D1:000818284888081C1C1C080808080800 +16D2:00605048444850606050484448506000 +16D3:00404044485064485060404040404000 +16D4:00C0A090A890A0C0C0A090A890A0C000 +16D5:0082848890A0C08080C0A09088848200 +16D6:0082C6C6AAAA92928282828282828200 +16D7:0082C6AA92AAC6828282828282828200 +16D8:00929254543838101010101010101000 +16D9:00383838101010101010101010101000 +16DA:00406050484442404040404040404000 +16DB:00406050484442E0E0E0404040404000 +16DC:00000000102844828244281000000000 +16DD:00824428102844828244281028448200 +16DE:0082C6C6AAAA92929292AAAAC6C68200 +16DF:00001028448282442810284482000000 +16E0:0000820847102AA0124002000200020002000200020002000200020002000000 +16E1:00101010925438103854921010101000 +16E2:00000208031002A0024002000200020002000200020012002A00460082000000 +16E3:00101010101010101038385454929200 +16E4:00929254543838545438385454929200 +16E5:0082C6AA92AAC68282C6AA92AAC68200 +16E6:00101010101010101038385454929200 +16E7:00000000000000001010101010101000 +16E8:00103854921010101010109254381000 +16E9:00040C14244424140C04040404040400 +16EA:004040E040444C546444040E04040400 +16EB:00000000000038383800000000000000 +16EC:00007070700000000000707070000000 +16ED:000000383810D6FED610383800000000 +16EE:00101814121010305090101010101000 +16EF:00925454383810101010383854549200 +16F0:00101010385492929292925438101000 +16F1:00404040404040404854644442424200 +16F2:000808080888C8A89888808080808000 +16F3:00081C2A492A1C080808080808080800 +16F4:0040404044464C5464C4440404040400 +16F5:00081020100810201008102010080000 +16F6:00808040402224181028488404020200 +16F7:00404040407048444242424242424200 +16F8:00080808080808080808142222414100 +16F9:00007FFE7BCE73BE7B8E7BB671CE7FFE7FFE61CE6FB663C66FF66FCE7FFE0000 +16FA:00007FFE7BCE73BE7B8E7BB671CE7FFE7FFE61866FB663866FB66FB67FFE0000 +16FB:00007FFE7BCE73BE7B8E7BB671CE7FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +16FC:00007FFE7BCE73BE7B8E7BB671CE7FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +16FD:00007FFE7BCE73BE7B8E7BB671CE7FFE7FFE618E6FB663B66FB66F8E7FFE0000 +16FE:00007FFE7BCE73BE7B8E7BB671CE7FFE7FFE61866FBE638E6FBE6F867FFE0000 +16FF:00007FFE7BCE73BE7B8E7BB671CE7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +1700:00000000000000006004100A7808081008100820084008800700000000000000 +1701:0000000000000000400030000FFC04020A8073400222001C0000000000000000 +1702:000000000000000003E0041000100020005000100010082007C0000000000000 +1703:0000000000000000400020021FFC0100010043FC3C0200020004000000000000 +1704:00000000000000001F6020900090011002900090009001103E0C000000000000 +1705:0000000000000000000000004E0C511221E201023E0C40000000000000000000 +1706:0000000000000000401C4022404220801F000800100010000000000000000000 +1707:000000000000000040FC43022C02303010480F80000000000000000000000000 +1708:000000000000000007C009201110121001000080010002000100000000000000 +1709:0000000000000000780C08120812101010182024204010800F00000000000000 +170A:00000000000000000FC010202010400840084008410822901C60000000000000 +170B:00000000000000000006000870080BD00C300820084008800700000000000000 +170C:00000000000000000004000A300A481C08100820084008800700000000000000 +170D:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE738E6DB66DB66DB6738E7FFE0000 +170E:0000000000000000407C43823C82010000800100010000800300000000000000 +170F:000000000000000001C00220041000080008010803080C900060000000000000 +1710:0000000000000000000C001238220824084A0442048202840318000000000000 +1711:0000000000000000001C106221822602180C0000000000000000000000000000 +1712:0000000C000C0000000000000000000000000000000000000000000000000000 +1713:0000000000000000000000000000000000000000000000000000001800180000 +1714:0000000000000000000000000000000000000000000000000000010003800100 +1715:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE7B8673BE7B867BF671867FFE0000 +1716:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE7BCE73BE7B8E7BB671CE7FFE0000 +1717:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE7B8673F67BEE7BDE71DE7FFE0000 +1718:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE7BCE73B67BCE7BB671CE7FFE0000 +1719:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE7BCE73B67BC67BF671CE7FFE0000 +171A:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE7B8673B67B867BB671B67FFE0000 +171B:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE7B8E73B67B8E7BB6718E7FFE0000 +171C:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE7BC673BE7BBE7BBE71C67FFE0000 +171D:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE7B8E73B67BB67BB6718E7FFE0000 +171E:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE7B8673BE7B8E7BBE71867FFE0000 +171F:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE7B8673BE7B8E7BBE71BE7FFE0000 +1720:000000000000000000040008181068200840088009000A000C00000000000000 +1721:000000000000000000040008181068200848089009200A000C00000000000000 +1722:000000000000000007E000400080010007F00020004000800100000000000000 +1723:000000000000000010E011100A10062005C00800080008000000000000000000 +1724:0000000000000000101010301050109011101210141018101010000000000000 +1725:0000000000000000101010201040108011401220140018001000000000000000 +1726:00000000000000001080118811881290129014A014A018C01080000000000000 +1727:00000000000000000808081008200040388009000A000C000800000000000000 +1728:000000000000000047183AE80208020802080208020802080208000000000000 +1729:0000000000000000000478080808081008180824084008800700000000000000 +172A:00000000000000003FC000400080008001000100020002000200000000000000 +172B:00000000000000000C0436080508089008500820085008880F00000000000000 +172C:00000000000000001008281848280848088809080A080C080808000000000000 +172D:000000000000000000000000000000001FF80000000000000000000000000000 +172E:0000000000000000210023002300250025002960299031102020000000000000 +172F:0000000000000000304048C208A4091811001200120014001800000000000000 +1730:000000000000000000200060186068A008A00924094C0A740C02000000000000 +1731:0000000000000000100808100820084008800900120014001800000000000000 +1732:00000000003C0000000000000000000000000000000000000000000000000000 +1733:0000000000000000000000000000000000000000000000000000000000780000 +1734:0000000000020002000200020002000200020002000200040004000800301FC0 +1735:0000000000000000004000800080010001000200020004000400000000000000 +1736:0000000000000000010802100210042004200840084010801080000000000000 +1737:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE63867DF671EE7DDE63DE7FFE0000 +1738:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE63CE7DB671CE7DB663CE7FFE0000 +1739:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE63CE7DB671C67DF663CE7FFE0000 +173A:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE63867DB671867DB663B67FFE0000 +173B:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE638E7DB6718E7DB6638E7FFE0000 +173C:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE63C67DBE71BE7DBE63C67FFE0000 +173D:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE638E7DB671B67DB6638E7FFE0000 +173E:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE63867DBE718E7DBE63867FFE0000 +173F:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE63867DBE718E7DBE63BE7FFE0000 +1740:000000080008001038103820082008400FC00F80000000000000000000000000 +1741:000000080008001038103820082008400FC00F8000001F001F00000000000000 +1742:00000000000000000F800F80008000F001E00040004000800080000000000000 +1743:000000000000000003F003F0000000000000000000001F801F80000000000000 +1744:000000000000000002000200040007F007F00010002000200040000000000000 +1745:000000000000000007F007F000200020007C007C00801F801F80000000000000 +1746:000000000000000011E211E2112222442244224444887CF87CF8000000000000 +1747:00000000000000000108010801083E103E100210042007E007E0000000000000 +1748:000000000000000007F807F80040008000800080010001000100000000000000 +1749:00000000000000003C3C3C3C042008400840084010801F801F80000000000000 +174A:000000000000000000000FE00FE000200020004000400FC00FC0000000000000 +174B:00000000000800080010041007F007F00820082008201FE01FC0000000000000 +174C:00000000000000003E7C3E7C024404880488048809100F100F10000000000000 +174D:00000000000000000000000000001FF81FF80000000000000000000000000000 +174E:000000000000000001F001F00110221022203FE03FE004000400080008000000 +174F:000000000400040008F808F80888110810101FF01FF000000000000000000000 +1750:000000003E003E000200040007C007C00040008000F800F80008001000100020 +1751:000000000000000002000200020004000400040008000FE00FE0000000000000 +1752:0000007C007C0000000000000000000000000000000000000000000000000000 +1753:000000000000000000000000000000000000000000000000000000F800F80000 +1754:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61B66FB661867DF661F67FFE0000 +1755:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61866FBE61867DF661867FFE0000 +1756:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61CE6FBE618E7DB661CE7FFE0000 +1757:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61866FF661EE7DDE61DE7FFE0000 +1758:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61CE6FB661CE7DB661CE7FFE0000 +1759:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61CE6FB661C67DF661CE7FFE0000 +175A:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61866FB661867DB661B67FFE0000 +175B:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE618E6FB6618E7DB6618E7FFE0000 +175C:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61C66FBE61BE7DBE61C67FFE0000 +175D:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE618E6FB661B67DB6618E7FFE0000 +175E:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61866FBE618E7DBE61867FFE0000 +175F:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61866FBE618E7DBE61BE7FFE0000 +1760:00000000000000000004000A3008481008100820084008801700200020001000 +1761:0000000000000010002600483008481008100820084008800700000000000000 +1762:00000000100810201008102010081000 +1763:0000000000000000301808200440028001000280044008201018000000000000 +1764:0000000000000FE0311840840100020001000080010002000100008001000000 +1765:000000000000000000000000401C20221FC22004400000000000000000000000 +1766:0000000000000000400020004000803840443F84400880004000200040000000 +1767:0000000000E00100020604083408481008100820084008800700000000000000 +1768:0000000000000FE0311841040100010001000100010001000100010001000000 +1769:0000000000000000000600083008481008100828084408820700000000000000 +176A:00000000000007F0080810042004200420042004200810100FE0000000000000 +176B:00000000000000000006000833C84C3008100820084008800700000000000000 +176C:0000000000000000000C00123012482408200840084008800700000000000000 +176D:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE738E6FB663B66DB6738E7FFE0000 +176E:0000000000000000000E00103010482008200854085A08AC0716000800000000 +176F:000000000000000003C00C20102020004000400041FC46023802000000000000 +1770:0000000000000000002000503050489008A009180910090C0608000000000000 +1771:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61EE7DCE7BEE77EE77C67FFE0000 +1772:0000000800040008000000000000000000000000000000000000000000000000 +1773:0000000000000000000000000000000000000000000000000010000800100000 +1774:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61B67DB67B8677F677F67FFE0000 +1775:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61867DBE7B8677F677867FFE0000 +1776:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61CE7DBE7B8E77B677CE7FFE0000 +1777:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61867DF67BEE77DE77DE7FFE0000 +1778:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61CE7DB67BCE77B677CE7FFE0000 +1779:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61CE7DB67BC677F677CE7FFE0000 +177A:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61867DB67B8677B677B67FFE0000 +177B:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE618E7DB67B8E77B6778E7FFE0000 +177C:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61C67DBE7BBE77BE77C67FFE0000 +177D:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE618E7DB67BB677B6778E7FFE0000 +177E:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61867DBE7B8E77BE77867FFE0000 +177F:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61867DBE7B8E77BE77BE7FFE0000 +1780:00000000000000000760089004000FF008100810081008100810000000000000 +1781:0000000000000000038004400420022000400380042004400380000000000000 +1782:00000000000000000760089004000FF00810081009900A900C10000000000000 +1783:000000000000000019982A202B300910091009100910091006E0000000000000 +1784:0000000004000200028003400180004006200A200AA003600220000000000000 +1785:00000000000000000EC011201000183008500850083008100FF0000000000000 +1786:0000000000000000076008901000087008901E702910291010E0000000000000 +1787:00000000000000200310049008600C0004400440054006C00440000000000000 +1788:00000000000000001C66228822CC2244224432442A442A4431B8000000000000 +1789:00000000000000000DB8124410441044104418441444144418440010070808F0 +178A:00000000038000400320042003C000000220022002A003600220000000000000 +178B:00000010002800080C18142014300410041004100410041003E0000000000000 +178C:00000000000000000EE011101010082000C003100C3010300FD0000000000000 +178D:00000000000000001B062488208C2084208431C42AA42AA43198000000000000 +178E:00000000000000001C38224422642224222432242AA42B643224000000000000 +178F:00000000000000000760089004000FE008200C200A200A200C20000000000000 +1790:0000000000200010031004E008000C6004A004A00460042007E0000000000000 +1791:000000000000000003F8040408080860049003E0008008800F80000000000000 +1792:00000000000000000EC01120100018300850085009300A900C70000000000000 +1793:000000000000000001C002200440040003C00040054006C00440000000000000 +1794:0000000000000000061808200C300410041004100410041003E0000000000000 +1795:000000000020031004900860080008300850085009300A900C70000000000000 +1796:0000000000000000077008880808080808080C080A080A080C08000000000000 +1797:0000000000000000076008900400000003F002100A1012100E10000000000000 +1798:00000000000000000C3010401860082008200FE00820082007C0000000000000 +1799:000000000000000008CC15101598188810881088108810881F70000000000000 +179A:000000000000000000C001000180008000800080028004800300000000000000 +179B:00000000000000000F0C10901098108810881888148814881870000000000000 +179C:0000004000A0002000E001200180008000800080028004800300000000000000 +179D:00000000000000000760089004000FE0082008A80A700D200C20000000000000 +179E:00000000000000000C3010401860082008A808700820082007C0000000000000 +179F:00000000000000000C18102018300F10111019101510151018E0000000000000 +17A0:00000000000000000C78108418C4084408440844084408440784000000000000 +17A1:00000000000000001FC62028404C430424841F0444047C0401C40254016C0044 +17A2:0000000000000000061808200C30041007F00410145024901C70000000000000 +17A3:0000000000000000061808200C30041007F00410145024901C70000000000000 +17A4:00000000000000000C78108418C408440FC4084429444A4439C4000000000000 +17A5:000000000020031004900260000007F004100610051005100610000000000000 +17A6:00000004000A0002000E00121F9810881C8812881C8800081F881888148818F8 +17A7:0000000000000000038004400420022000400390043004500390000000000000 +17A8:000000000000000007600890040003C0042000400390043003D0000000000000 +17A9:00000000000000000E0011001080089001100E5010D011500E50000000000000 +17AA:010000800040074008C00640010003C0042000400390043003D0000000000000 +17AB:0000000000000000061808200C300410041004100410041003E00030070808F0 +17AC:0000000000000000061808200C300410041004100410041003E00030070808F6 +17AD:0000000000000000077008880808080808080C080A080A080C080060071008E0 +17AE:0000000000000000077008880808080808080C080A080A080C080060071008EC +17AF:0000000000000000030001000170019000100710095005B00110000000000000 +17B0:000000000000000007700888080808080C080A080A080C08000003F804900360 +17B1:000000000000038004400620010003C0042000400390043003D0000000000000 +17B2:000000000000001007E0080008E00910091008200810081007E0000000000000 +17B3:000000000000038804500620010003C0042000400390043003D0000000000000 +17B4:AAAA0001A5442945B1282929A510000180000871948822A9BE98227980045555 +17B5:AAAA0001A5442945B1282929A51000018000081194282245BE7C224580005555 +17B6:000000000000001E002200020002000200020002000200020002000000000000 +17B7:00000380044003F8000000000000000000000000000000000000000000000000 +17B8:00000390045003F0000000000000000000000000000000000000000000000000 +17B9:00000390046803F8000000000000000000000000000000000000000000000000 +17BA:005003D0047003F8000000000000000000000000000000000000000000000000 +17BB:00000000000000000000000000010101 +17BC:00000000000000000000000000000000000000000000000000000240024003C0 +17BD:0000000000000000000000000000000000000000000000000000022002A00360 +17BE:00000390045003F0C000A000800080008000C000A000A000C000000000000000 +17BF:005003D0047003FEC001A001800180018001C001A001A001C0011007080107FE +17C0:001800080010003EC001A001800180018001C001A001A001C0011007080107FE +17C1:0000000000000000C000A000800080008000C000A000A000C000000000000000 +17C2:1800880070000000C000A000800080008000C000A000A000C000000000000000 +17C3:9800640044001800C000A000800080008000C000A000A000C000000000000000 +17C4:000000000000001EC022A002800280028002C002A002A002C002000000000000 +17C5:000400020002001EC022A002800280028002C002A002A002C002000000000000 +17C6:0180024001800000000000000000000000000000000000000000000000000000 +17C7:0000000000000000000200050005000200000002000500050002000000000000 +17C8:0000000000000000000000000000000200000002000000000000000000000000 +17C9:0000014001400140000000000000000000000000000000000000000000000000 +17CA:0760089004000000000000000000000000000000000000000000000000000000 +17CB:00010101000000000000000000000000 +17CC:0388045002200400000000000000000000000000000000000000000000000000 +17CD:03880450022001A0000000000000000000000000000000000000000000000000 +17CE:008003E000800080000000000000000000000000000000000000000000000000 +17CF:01E6021C02A00360000000000000000000000000000000000000000000000000 +17D0:000C004400380000000000000000000000000000000000000000000000000000 +17D1:00000FF000000000000000000000000000000000000000000000000000000000 +17D2:0000000000000000000000000000000000000000000000000100038001000000 +17D3:0380044003800000000000000000000000000000000000000000000000000000 +17D4:00000000000000000180098012800C8000800080008000800080000000000000 +17D5:0000000000000000068026804A80328002800280028002800280000000000000 +17D6:00000000304830007800304830000000 +17D7:00000000000000001EF0210838082408380800080008200820081FF000000000 +17D8:0000000000000000331BB4AB54A5149114911651155115511631000000000000 +17D9:00000000000000000380044009200AA00AA00AA0092004400380000000000000 +17DA:00000000000000000000000071008A88AA959252445038200000000000000000 +17DB:000000000000000000C001000180008003E00080028004800300000000000000 +17DC:00000000001C22201C02122418000000 +17DD:000003C004200810000000000000000000000000000000000000000000000000 +17DE:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE63866DBE6D8E6DBE63867FFE0000 +17DF:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE63866DBE6D8E6DBE63BE7FFE0000 +17E0:000000000000000007C0082008200820082008200820082007C0000000000000 +17E1:000000000000000007C00820091006100010001000100E1011E0000000000000 +17E2:0000200020002000277028882C082A082A082C08200820081FF0000000000000 +17E3:00000000000000001EF021082108210821083108290829083108000000000000 +17E4:0000000000000004000803E8041808C0092008800840082007E0000000000000 +17E5:00000600091009200A2007E0040008C0092008800840082007E0000000000000 +17E6:0000000000000000180008000BE00C10001006100910082007C0000000000000 +17E7:00000002000400041DC422242024202420243024282428243018000000000000 +17E8:00000008001007D0083010001030105010901050101013D00C30000000000000 +17E9:000000000000000000080F1010D0103008001F00208024401830000000000000 +17EA:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61866FB663866FB661B67FFE0000 +17EB:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE618E6FB6638E6FB6618E7FFE0000 +17EC:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61C66FBE63BE6FBE61C67FFE0000 +17ED:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE618E6FB663B66FB6618E7FFE0000 +17EE:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61866FBE638E6FBE61867FFE0000 +17EF:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61866FBE638E6FBE61BE7FFE0000 +17F0:00000000000000003048484830000000 +17F1:00000000000000001028284444000000 +17F2:00000000000000002020202020000000 +17F3:00000000000000000000245A89000000 +17F4:00000000000000004444282810000000 +17F5:00000000000000442810282810000000 +17F6:00000000000000002010100808000000 +17F7:00000000000000000000225488000000 +17F8:00000000000000000810102020000000 +17F9:00000000000000182040780418000000 +17FA:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61866FB663866FB66FB67FFE0000 +17FB:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +17FC:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +17FD:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE618E6FB663B66FB66F8E7FFE0000 +17FE:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61866FBE638E6FBE6F867FFE0000 +17FF:00007FFE7B8673F67BEE7BDE71DE7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +1800:0000000003800440042004200420032000200040008001000200020002000000 +1801:0000000000000000000000000000666666660000000000000000000000000000 +1802:000000000000000000000080008001C003E001C0008000800000000000000000 +1803:00000000000000000000081008101C383E7C1C38081008100000000000000000 +1804:0000000000000000018001800000000000000000018001800000000000000000 +1805:00000080008001C003E011C81088389C7C3E389C108811C803E001C000800080 +1806:000000000000000000000000000007E007E00000000000000000000000000000 +1807:000000000000000000000000000007E007E00180018000800000000000000000 +1808:0000000000000400020001000180018001800180010002000400000000000000 +1809:0000000000001040082004100618061806180618041008201040000000000000 +180A:0000000000000000000000000000038003800000000000000000000000000000 +180B:AAAA0001BC442045B8282029A010000180001C11A03018118410387D80005555 +180C:AAAA0001BC442045B8282029A010000180001C79A00418398440387D80005555 +180D:AAAA0001BC442045B8282029A010000180001C79A00418398404387980005555 +180E:AAAA0001A2443645AA282229A2100001800001E1820001C1802003C180005555 +180F:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE73866DBE6D8E6DBE73BE7FFE0000 +1810:0000000003C0042004200810081008100810081008100420042003C000000000 +1811:0000000003C0042004200810081008100410041000100820042003C000000000 +1812:0000000003C00420042008100810081008100812081204240438020000000000 +1813:00000000034004A004A008900890089008900812081204240438020000000000 +1814:0000000003C0042000200210041004100810081008100420042003C000000000 +1815:0000000000000020002000500050004808480844084404420482030000000000 +1816:0000000003C0040004000880088008E00890089008100420042003C000000000 +1817:0000000007E00810031004880488088808880888088804900490006000000000 +1818:000000000000004000400080008001000100021002100420042007C000000000 +1819:0000000003C0042004200820084008400860080008000420042003C000000000 +181A:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE7B8673B67B867BB671B67FFE0000 +181B:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE7B8E73B67B8E7BB6718E7FFE0000 +181C:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE7BC673BE7BBE7BBE71C67FFE0000 +181D:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE7B8E73B67BB67BB6718E7FFE0000 +181E:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE7B8673BE7B8E7BBE71867FFE0000 +181F:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE7B8673BE7B8E7BBE71BE7FFE0000 +1820:00000000000030205010101010101E201E2012201240114000C0000000000000 +1821:00000000000030005000100010001F801FC01040104010400040018001000000 +1822:00000000000031C05220122012201E001E001200120011000080004000000000 +1823:00000000000030005000100010001FE01FE011201120112000C0000000000000 +1824:00000000000030005000100010001FF81FF811201120112000C0000000000000 +1825:00000000000030005000100010001FFC1FFE11261122112200C0000000000000 +1826:00000000000030005000100010001FFE1FFE11281124112200C0000000000000 +1827:00000000000030005000100010001FFC1FFE11061102112200C0000000000000 +1828:00000000000030005000100010001C001C001000100010000000100010000000 +1829:00000000007000880108010801081F001F001900110010800040000000000000 +182A:0000000000000F801040104010401E401E401200120012000C00000000000000 +182B:0000000000000F801040104010401E401E400240020002001E001C0000000000 +182C:00000000000003800440044004401FF01FF00440024006400040000000000000 +182D:00000000000003800440044004401FF01FF00440024006400040060000000600 +182E:00000400040018001000300050001C001C001000100010000000000000000000 +182F:00004000400030001000300050001C001C001000100010000000000000000000 +1830:0000000000000C00140014005400270007000400040004000000000000000000 +1831:00001B001B0000000C0014001400570027000400040004000000000000000000 +1832:0000000000000000100028004400878047802E00140004000000000000000000 +1833:00000000000000001000100010001FC01FC01000120015000900060000000000 +1834:00000000000000000000000000001FF01FF00040004003C007C0040000000000 +1835:00000000000000000000000000001F001F001000100008000800040004000000 +1836:00000000000000000000000000001F001F001000100008000400080000000000 +1837:00000000000000000000000000001F001F001000100008000800140024000000 +1838:00000000000000000000000000001F001F001000100012000C00000000000000 +1839:0000000000000F801040104010401E401E401200120012000C00100010000000 +183A:0000000000000F00108010801080108010801000100018001400140000000000 +183B:0000000000000F001080108010801C801C801000100018001400140000000000 +183C:00000000000000000000000000001FF01FF00100010001C007200EC000000000 +183D:00000000000000000000000000001FF01FF001000100010007200EC000000000 +183E:00000000000030005000100010001E781E781240124012200140008000000000 +183F:000000001800240044004C005400470047004400440050004800300000000000 +1840:00000000400030001000300050001E781E781240124012200140008000000000 +1841:000000000000000000000000000013C013C01200120011000A00040000000000 +1842:00000000000000000000000000001FFC1FFC1290129012900C60000000000000 +1843:00000000000000001000100010001C001C000000000000000000000000000000 +1844:00000000000030005000100010001FC01FC01200120012001180000000000000 +1845:00000000030032805240124012201E201E201220124012400000000000000000 +1846:00000000000030005000100010001FC01FC012401240124011C0000000000000 +1847:00000000000031E05210120812081FC81FC81240124012401180008000600000 +1848:00000000000030005100108010801FC01FC012401240124011C0000000000000 +1849:00000000000031E05210120812081FC81FC81240124012401180000000000000 +184A:00000000000000000000000000001FF81FFC1A04120412040188003000200000 +184B:00000000000000000000000000001FC01FE01220122012200C40018001000000 +184C:00000000000011801240142014207C207C201400140012001E00000000000000 +184D:00000000000030005000100010001FC01FC01B00120012000000120012000000 +184E:00000000000030005000100010001FC01FC01B00120000000C0012000C000000 +184F:0000000001800880148013001100310031000900050003000000000000000000 +1850:00000000000000000C00120012001380138012000A0006000000000000000000 +1851:00000000000000000000000000001F001F00140012000A000C00000000000000 +1852:00000000000000000000000000001FC01FC00100010001000E0012000C000000 +1853:00000000000000000000000000001FC01FC00100010001000600080007000000 +1854:00000000000000000000000000001FC01FC00100010001000600080000000000 +1855:00000000000000000000000000001E001E001000100008000800000000000000 +1856:00000000000000000000000000001F801F80100010000E000900060000000000 +1857:0000070008800840084008400800080008000800040002000600000000000000 +1858:000007000880084008400840080018001800080004000A000000000000000000 +1859:00000000000000000000000000001E781E7C1A4C124412240140008000000000 +185A:00000000070008801040104010401E701E701240124012400C80010003C00000 +185B:00000000000002001E00120012001F801F8010001000100012000C0000000000 +185C:00000000000000000000000000001FC01FC001000F000F000900030004000000 +185D:000000800040108011000100020012001200120012000A000A00060000000000 +185E:00000000000000000000000000001FC01FC01A00120011000100008000000000 +185F:00000000000000002200140008003F803F801800100010000000000000000000 +1860:00000000008031005100100010001FC01FC01240124012401180000000000000 +1861:00000000000000000000000000001FF01FF01280124012200C00000000000000 +1862:00000000000000000000000000001FF01FF01B10121012100020004000400000 +1863:000001000080010001000200020012001200120012400A800600004000800000 +1864:00000000031004A0048008400840387038700840084004801C80000000000000 +1865:00000060039004E0048008400840387838780840084004801C80000000000000 +1866:0000000000000D801240124010401E401E401200120012000C00000000000000 +1867:000000000000030005001500090001C001C00100110009000500000000000000 +1868:0000000001C002200420022001200FF80FF80020002000200000000000000000 +1869:0000000000000100120028004400878047802E00140004000000000000000000 +186A:00000000000000000000000000003F003F001000080004000400040018000000 +186B:000000000C00120002000100010001F801F80100010000800090006000000000 +186C:00000100020000000E0011001080108010801000180014001400000000000000 +186D:000006000900060000000E001100108010801000180014001400000000000000 +186E:0000040004001F0004000C001400178057802400040004000000000000000000 +186F:000000001F00040004000C001400178057802400040004000000000000000000 +1870:00000000000010001000100010001C001C001000100010001000000000000000 +1871:00000000000006000900060000001FC01FC00100010001000600080000000000 +1872:0000000000000C0012000C0000003F003F001000080004000400040018000000 +1873:00000000000000000000000000001FE01FE01100110008800880044004400000 +1874:00000008000400080010001000201F201F201920112010A000A0006001080210 +1875:00000000000000000000000000001F001F801180108008801400140000000000 +1876:000000000C0012000200010001003FF83FF80100010000800090006000000000 +1877:00000000000006000900060000001F801F801000100008000800000000000000 +1878:0000000000000D800D80000000001FC01FC00100010001000600080000000000 +1879:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE61CE7DB67BC677F677CE7FFE0000 +187A:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE61867DB67B8677B677B67FFE0000 +187B:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE618E7DB67B8E77B6778E7FFE0000 +187C:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE61C67DBE7BBE77BE77C67FFE0000 +187D:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE618E7DB67BB677B6778E7FFE0000 +187E:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE61867DBE7B8E77BE77867FFE0000 +187F:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE61867DBE7B8E77BE77BE7FFE0000 +1880:000000000000020001000C8012C012C012C012C00C8001000200000000000000 +1881:0000000000000000000000000CC0132013200CC0000000000000000000000000 +1882:0000000000000000104018C0154012401240154018C010400000000000000000 +1883:0000000000000E0011000100010002001C0002000100010011000E0000000000 +1884:0000000000000E001100100010000800070008001000100011000E0000000000 +1885:000000000000000000000C62129421082108252818C800000000000000000000 +1886:000000040EE811101550089000040EE811101550089000040EE8111015500890 +1887:00000000000030005000100010001FF81FFC1004100810101000000000000000 +1888:0000000000C031205220140014001C001C001400140012401180000000000000 +1889:000000000600090008801080108010F010F01000100008000800040000000000 +188A:00000000000030005180124012201E201E001200120012000100100020000000 +188B:00000000000000000000000000001FF01FF00100010007C00820082000C00000 +188C:00000000000000000000000000003F003F000800040012000A00060000000000 +188D:00000000000000000000000000001FFC1FFC131012A012400C00000000000000 +188E:00000000000000000000000000001FF01FF01000118009400940060000000000 +188F:00000000000000000000000000001FF01FF01000100008000E00060000000000 +1890:00000000000000000000000000001FC01FC01400120009000900060000000000 +1891:00000000000000000000000000001F801F801000120009000A00040000000000 +1892:00000000060009000880104010401F401F000100010009000600000000000000 +1893:00000000060009000880104010401F401F00010001000E00100012000C000000 +1894:0000070008800840084008401040107010701040104008000000028002800000 +1895:0000070008800840084008400840087008700840084008000880070000000000 +1896:000000000000000000000000000007C007C00040004003800040018000000000 +1897:0000000000000700088008400840084008000800088008800700000000000000 +1898:00000000000000000000000000001FC01FC0140012000B800C00000000000000 +1899:00000000000000000F001080108013E017E01480148013000800078000000000 +189A:000000480054064809000880088078FE78FE0880088008003800000000000000 +189B:00000000000030005000100010001FC01FC01000130014801300000000000000 +189C:00000E0011000E001F000C000C00178017805400240004000000000000000000 +189D:00000000000000601E900C600C0017F817F85400240004000000000000000000 +189E:00000000100011800A400980040007F807F80400020002000100010000000000 +189F:00000000000004400AA0044000001FF81FF81000080008000400040000000000 +18A0:00000000000001000200020000001F801F801400120009000A00040000000000 +18A1:00000000024002A012402800440087F047F02E00140004000000000000000000 +18A2:000000000000030005001500090001C001C00100010000000000050005000000 +18A3:000000001000100008000800040007F807F80400020002000100010000000000 +18A4:000003000480030000000300050015C009C00100110009000500000000000000 +18A5:000003000480030000000300050015C009C00100010001000100000000000000 +18A6:00000000000000000000000000001F001F0011000A0004000000000000000000 +18A7:00000000000000000000000000001780178012000A000900050005000E000000 +18A8:0000000000300E481130108010801EFC1EFC1200120012000C00000000000000 +18A9:0000000000000000000000000000000000000000000000000000600010000800 +18AA:00004000400033001480330050001FC01FC01000100010001000000000000000 +18AB:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE618E6DB6618E6DB66D8E7FFE0000 +18AC:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE61C66DBE61BE6DBE6DC67FFE0000 +18AD:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE618E6DB661B66DB66D8E7FFE0000 +18AE:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE61866DBE618E6DBE6D867FFE0000 +18AF:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE61866DBE618E6DBE6DBE7FFE0000 +18B0:0300048004801B00140012001100108010401040108011001200140018000000 +18B1:06000900090006C0014002400440084010401040084004400240014000C00000 +18B2:18C024C0240018C0014002400440084010401040084004400240014000C00000 +18B3:01800240024001B0005000900110021064106410021001100090005000300000 +18B4:18242458201008040202040810204000 +18B5:1824241A040810204040201008040200 +18B6:18242458201008046262040810204000 +18B7:024002400180000007F00800100010001000100010001000080007F000000000 +18B8:30484830004040404078444444380000 +18B9:0C12120C00101010D0DE1111110E0000 +18BA:304848300040404040404040407C0000 +18BB:000000000000000000C00120012000C0000000E00110011001101FE000000000 +18BC:0000000000000000060009000900060000000E001100110011000FF000000000 +18BD:0000000000000000060009000900060000000E001000100010000FF000000000 +18BE:18242418000404041C20404040400000 +18BF:30484830004040407008040404040000 +18C0:0000000000000180024002400180000000000C601210111010900C6000000000 +18C1:0000000000000180024002400180000000000C601090111012100C6000000000 +18C2:0000000000000060009000900060000000000318348434440424031800000000 +18C3:182424180008080808F8402010080000 +18C4:6090906000404040407C081020400000 +18C5:18242418003E404040403E0202020000 +18C6:00000000000000000000000000000000000003FC344034400440038000000000 +18C7:0000000000000000000000000000000000001FE0220C220C22001C0000000000 +18C8:00000000000000000000000001800180000003FC344034400440038000000000 +18C9:0000000000000000000000000C000C0000001FE0220C220C22001C0000000000 +18CA:000000000000000000000000000000000000003830443044004407F800000000 +18CB:00000000000000000000000000000000000001C0022C022C02203FC000000000 +18CC:000000000000000000000000003000300000003830443044004407F800000000 +18CD:00000000000000000000000001800180000001C0022C022C02203FC000000000 +18CE:000000000000000000000000000000001E04020462046204010800F000000000 +18CF:0000000000000000000000000000000003C00420681068100810081E00000000 +18D0:0000000000000000000001800180000003C00420681068100810081E00000000 +18D1:000000000000000003C00020001000101810182003C002000200020000000000 +18D2:000001800180000003C00020001000101810182003C002000200020000000000 +18D3:000000000000000000F00100020002001A00190000F000100010001000000000 +18D4:00000010102828444400000000000000 +18D5:00000000384444444400000000000000 +18D6:00000000304848704040000000000000 +18D7:00000000304848404040000000000000 +18D8:00000000784040404040000000000000 +18D9:000000003E4848300000000000000000 +18DA:00000000080808106040400000000000 +18DB:0000000062928C000000000000000000 +18DC:00000008C8D414223E00000000000000 +18DD:0000002026565088F800000000000000 +18DE:18242418000000000000000000000000 +18DF:00181800000000000000000000000000 +18E0:000000000000000000000000000000007816081608100810042003C000000000 +18E1:0000060006000000040004000400078000400020002000200040078000000000 +18E2:000000600060000000200020002001E00200040004000400020001E000000000 +18E3:000000000000000000000E201120112C112C1220102010200840078000000000 +18E4:0000000000000000000000000FC01020202C222C21C0200010000FE000000000 +18E5:0000000000000000000022202220222C222C22202020202010400F8000000000 +18E6:000000000600060000001FC00020001000101F100010001000201FC000000000 +18E7:0000000000C000C0000007F008001000100011F010001000080007F000000000 +18E8:000000000000000000000E001100110011000F30053005000900090000000000 +18E9:0000060600090905050F1111110E0000 +18EA:000000000000000000000F001080128012800C98009800800080008000000000 +18EB:000006060002020202324A4A423C0000 +18EC:0000000000300030000000300050005008900890071000100010001000000000 +18ED:00000000000000000000000042104210421642164210421042103DE000000000 +18EE:000000000300030000000FE00010001000100FE00010001000100FE000000000 +18EF:0000000000C000C0000007F008000800080007F008000800080007F000000000 +18F0:000000000000000000001FC020002000200C1FCC2000200020001FC000000000 +18F1:00000180018000000FF00600018000400020039004500410022001C000000000 +18F2:00000000000000000000000000201860246C44AC44A0492022201C2000000000 +18F3:00000030101010103800000000000000 +18F4:00000000586440404000000000000000 +18F5:000000003C4038047800000000000000 +18F6:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE61CE6FBE638E6FB66FCE7FFE0000 +18F7:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE61866FF663EE6FDE6FDE7FFE0000 +18F8:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE61CE6FB663CE6FB66FCE7FFE0000 +18F9:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE61CE6FB663C66FF66FCE7FFE0000 +18FA:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE61866FB663866FB66FB67FFE0000 +18FB:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +18FC:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +18FD:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE618E6FB663B66FB66F8E7FFE0000 +18FE:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE61866FBE638E6FBE6F867FFE0000 +18FF:00007FFE7BCE73B67BCE7BB671CE7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +1900:000000000000FF801080208040807C800880108020804E807180000000000000 +1901:0000000000003E00020002000400040008000800100010001F00000000000000 +1902:0000000000003F8042008400840084008400840084004A403180000000000000 +1903:0000000000007880090012002400780014002200220022001C00000000000000 +1904:000000000000FF80208020802080208011800E80008000800080000000000000 +1905:0000000000005E004480494050805C0042004100210022001C00000000000000 +1906:0000000000007080088004800280028002802280528054803880000000000000 +1907:0000000000007F8008001000200078004E004000408021001E00000000000000 +1908:0000000000007F80008078800480048078800080008000800080000000000000 +1909:0000000000001F002000200020001F0020002000200020001F00020004000800 +190A:0000000000007F800400040034004C0046004940308001400240000000000000 +190B:0000000000001F00208040800100060001000080408020801F00000000000000 +190C:0000000000007C0004000400040004003F804440444044403880000000000000 +190D:00000000000060C01F0004000400070000800040404020801F00000000000000 +190E:0000000000007C80188020802080188020802080208011000E00000000000000 +190F:0000000000007C0004000400080008001E001000200020003E00000000000000 +1910:0000000000002200410041008080808080808080490049003600000000000000 +1911:0000000000000000770088800880088008800880888088807700000000000000 +1912:00000000000060C01F00040004001C0020004180424022801F00000000000000 +1913:0000000000003880448044804880508051802E80008000800080000000000000 +1914:0000000000007F80088008801080108020804080788006800180000000000000 +1915:0000000000007E00040008001C00020032004A003C0008000000000000000000 +1916:0000000000007C00040004000800080018001800240022004100000000000000 +1917:00000000000031802E80208010800E8000800080008000800080000000000000 +1918:0000000000001080308050809080108009800680008000800080000000000000 +1919:00000000000043C0420042004200420042004200420042003C00000000000000 +191A:0000000000001D002300210021002100210023001D0001000100000000000000 +191B:0000000000003F80448044804480448044803880008000800080000000000000 +191C:0000000000001F002100420044004F0040804000200010800F00000000000000 +191D:0000000000007F80100010001E00110011000100010001000100000000000000 +191E:0000000000007F80100010001F00010001001100290025001E00010000000000 +191F:00007FFE7BCE73B67BC67BF671CE7FFE7FFE7B8673BE7B8E7BBE71BE7FFE0000 +1920:300048003F800000000000000000000000000000000000000000000000000000 +1921:0000003C00420004000700000000000000000000000000000000000000000000 +1922:000000000000000000000000000000000000000000000000000030804B003C00 +1923:000000000000000800140014000C000400040008000800100010000000000000 +1924:0000000000000012002D002D001B000900090012001200240024000000000000 +1925:300048003F80000800140014000C000400040008000800100010000000000000 +1926:300048003F800012002D002D001B000900090012001200240024000000000000 +1927:6000180006000000000000000000000000000000000000000000000000000000 +1928:008031000A000400000000000000000000000000000000000000000000000000 +1929:0000000000000000000000000000000000000000000100220052000C00000000 +192A:0000000000000000000000000000000000000000000000000000004000A00110 +192B:00000000000000000000000000000072000A00320046003A0002000000000000 +192C:00007FFE7BCE73B67BC67BF671CE7FFE7FFE61C67DBE61BE6FBE61C67FFE0000 +192D:00007FFE7BCE73B67BC67BF671CE7FFE7FFE618E7DB661B66FB6618E7FFE0000 +192E:00007FFE7BCE73B67BC67BF671CE7FFE7FFE61867DBE618E6FBE61867FFE0000 +192F:00007FFE7BCE73B67BC67BF671CE7FFE7FFE61867DBE618E6FBE61BE7FFE0000 +1930:000000000000003E001000200022001C00000000000000000000000000000000 +1931:000000000000000000000000000000000000000C00120012000C000000000000 +1932:00000000000000000000000000000000000000000000000000000C0012000C00 +1933:0000000000000000000000000000000000000000000000000000003800440000 +1934:0000000000000080004000400044002A002A001C000000000000000000000000 +1935:0000000000000042002200220026001A00020000000000000000000000000000 +1936:0000000000000044002A002A001C000800080008000800080008000000000000 +1937:0000000000000000000000000000000000000000000000000020001000080000 +1938:0000000000000024002400240018000000000000000000000000000000000000 +1939:0000000000000000000000000000000000000000000000000010002000400000 +193A:0280000000000000000000000000000000000000000000000000000000000000 +193B:000000000000000000000000000000000000000000000000000000007F800000 +193C:00007FFE7BCE73B67BC67BF671CE7FFE7FFE63C67DBE71BE7DBE63C67FFE0000 +193D:00007FFE7BCE73B67BC67BF671CE7FFE7FFE638E7DB671B67DB6638E7FFE0000 +193E:00007FFE7BCE73B67BC67BF671CE7FFE7FFE63867DBE718E7DBE63867FFE0000 +193F:00007FFE7BCE73B67BC67BF671CE7FFE7FFE63867DBE718E7DBE63BE7FFE0000 +1940:00000000000002000400080008000830084808480428021001E0000000000000 +1941:00007FFE7BCE73B67BC67BF671CE7FFE7FFE6DEE6DCE61EE7DEE7DC67FFE0000 +1942:00007FFE7BCE73B67BC67BF671CE7FFE7FFE6D866DF661867DBE7D867FFE0000 +1943:00007FFE7BCE73B67BC67BF671CE7FFE7FFE6D8E6DF661C67DF67D8E7FFE0000 +1944:0000000000000180024002400140004000400040004000000040000000000000 +1945:0000000000000460029001200100010001000100010000000100000000000000 +1946:0000000000000380044008200820082008200820082004400380000000000000 +1947:00000000000008000800080008000860089008900850042003C0000000000000 +1948:0000000000000100028002800440044008200820101010101010000000000000 +1949:00000000000007800840080004000380004000200020042003C0000000000000 +194A:0000000000001830044002800280010002800280044008203018000000000000 +194B:00000000000003C004A008A0084008000800084008A004A003C0000000000000 +194C:000000000000038004400820080008000800084008A004A003C0008000400020 +194D:0000000000000C4010A011000900060003000480044004400380000000000000 +194E:0000000000001010101010100820082004400440028002800100000000000000 +194F:0000000000001FE012200A200640024000800080010002000400000000000000 +1950:00000000000048542404040404000000 +1951:000000000000485424041C241C000000 +1952:00000000000058644444444444000000 +1953:000000000000A0561A1212161A000000 +1954:000000000000A052121212161A000000 +1955:0000000000004242424242562A000000 +1956:000000000000B6DA929292B2D2000000 +1957:000000000000B6DA929292B6DA000000 +1958:0000000000000202020242562A000000 +1959:00000000000044444444444C34000000 +195A:000000000000969A929292B6DA000000 +195B:00000000000044447C44444C34000000 +195C:000000000000969A929292B6DA020408 +195D:00000000000058644444444C34000000 +195E:000000000000B6DA929292B2D2102040 +195F:000000000000B65A1212121212102040 +1960:000000000000485424041C241C040810 +1961:000000000000A052121212161A020408 +1962:000000000000464A4A52526242000000 +1963:00000010101010101010101010000000 +1964:0000003C2424243C242424342C000000 +1965:0000003C242424242424242424000000 +1966:0000003C24242424242424242404041C +1967:0000002020202020202020203C003C00 +1968:0000002020202020202020203C000000 +1969:0000002424242424242424243C000000 +196A:0000003C2424243C242424342C202038 +196B:0000003C242424242424242424202038 +196C:0000003C202020202020202020000000 +196D:000000000000A052121212161A102040 +196E:00007FFE7BCE73B67BC67BF671CE7FFE7FFE73866FBE638E6DBE73867FFE0000 +196F:00007FFE7BCE73B67BC67BF671CE7FFE7FFE73866FBE638E6DBE73BE7FFE0000 +1970:000000000000F8484848484A84000000 +1971:0000000000001824447C404438000000 +1972:0000000000001C244444444C34000000 +1973:00000000000040242A2A26221C000000 +1974:00000000000018244040404438000000 +1975:00007FFE7BCE73B67BC67BF671CE7FFE7FFE61867DBE7B8677F677867FFE0000 +1976:00007FFE7BCE73B67BC67BF671CE7FFE7FFE61CE7DBE7B8E77B677CE7FFE0000 +1977:00007FFE7BCE73B67BC67BF671CE7FFE7FFE61867DF67BEE77DE77DE7FFE0000 +1978:00007FFE7BCE73B67BC67BF671CE7FFE7FFE61CE7DB67BCE77B677CE7FFE0000 +1979:00007FFE7BCE73B67BC67BF671CE7FFE7FFE61CE7DB67BC677F677CE7FFE0000 +197A:00007FFE7BCE73B67BC67BF671CE7FFE7FFE61867DB67B8677B677B67FFE0000 +197B:00007FFE7BCE73B67BC67BF671CE7FFE7FFE618E7DB67B8E77B6778E7FFE0000 +197C:00007FFE7BCE73B67BC67BF671CE7FFE7FFE61C67DBE7BBE77BE77C67FFE0000 +197D:00007FFE7BCE73B67BC67BF671CE7FFE7FFE618E7DB67BB677B6778E7FFE0000 +197E:00007FFE7BCE73B67BC67BF671CE7FFE7FFE61867DBE7B8E77BE77867FFE0000 +197F:00007FFE7BCE73B67BC67BF671CE7FFE7FFE61867DBE7B8E77BE77BE7FFE0000 +1980:00000000000000001C70228801040104010422081C3000080004008400780000 +1981:00000180024000001C70228801040104010422081C3000080004008400780000 +1982:00000000000000000E38114420822002200210040E3800000000000000000000 +1983:00000000384402021A241A0202423C00 +1984:00000000000000000E3810442082208211040E38000000F8010400E4021401F8 +1985:000000000000000003C004200810081008100420024000000000000000000000 +1986:03C00420081008000BC00C200810081008100420024000000000000000000000 +1987:000000000000000003C004200810081008100B100C9000100010042003C00000 +1988:000000000000000007C00820081006100810082007C000000000000000000000 +1989:00000000000000001C70220801040104010422881C7000000000000000000000 +198A:00300048004000400E40114010400C40104010800F0000000000000000000000 +198B:000000000000000003C004200810081008100420024000200010041003E00000 +198C:03C00420081008000BC00C200810081008100420024000200010041003E00000 +198D:00000000000000000E38100420022002208211440E3800000000000000000000 +198E:00000000000000000E38114420822082208211040E3800000000000000000000 +198F:000000003C4241314145390101221C00 +1990:00000000000000000E38104420822082208211040E38002000300208010800F0 +1991:1E2140404E51414641211E0000000000 +1992:000000000000000007F008081004100410840888077000000000000000000000 +1993:000000000000000007C00820080008000800080007C000200010082007C00000 +1994:0018002400200020062008201020102010200840078000000000000000000000 +1995:00000000000000001C70228820881850202020521F8C00000000000000000000 +1996:00000000000000000E38104420822082208211040E38002001E00204020801F0 +1997:00000000000000000E3811442082200210060E3A000203E2041205E2040403F8 +1998:00000000000000001C70228801040104010422081C7000000000000000000000 +1999:000000000000000002400420081008100BD0042003D000100010041003E00000 +199A:3E403F013945413141423C0000000000 +199B:00000000000000000E38104420822082208211040E38000003E00410041003E0 +199C:00000000000000000E38104420822082208211040E3800080308048804480230 +199D:0F001080204020002E38314420822002200210040E3800000000000000000000 +199E:000000001C22414141221C0000000000 +199F:00000000000000000E38110420822082208210440E3800000000000000000000 +19A0:00000000000000000E38104420822082208211040E3800000000000000000000 +19A1:00000000384402020204180402423C00 +19A2:000000000000000002400420081008100810042003C000000000000000000000 +19A3:00000000384442221151210202040000 +19A4:00182400384402020204180402423C00 +19A5:000001800240000002400420081008100810042003C000000000000000000000 +19A6:00000000000000000E38114420822002200210040E38000003E00410041003E0 +19A7:00000000384402023A443A003C42423C +19A8:000000000000000003C0042008100810081004200240000003C00420042003C0 +19A9:03C00420081008000BC00C2008100810081004200240000003C00420042003C0 +19AA:00000000000000001C70220801040104010422881C70000007C00820082007C0 +19AB:03C00420081008000BC00C200810081008100420024000200390046004400380 +19AC:00007FFE7BCE73B67BC67BF671CE7FFE7FFE61C66DBE61BE6DBE6DC67FFE0000 +19AD:00007FFE7BCE73B67BC67BF671CE7FFE7FFE618E6DB661B66DB66D8E7FFE0000 +19AE:00007FFE7BCE73B67BC67BF671CE7FFE7FFE61866DBE618E6DBE6D867FFE0000 +19AF:00007FFE7BCE73B67BC67BF671CE7FFE7FFE61866DBE618E6DBE6DBE7FFE0000 +19B0:00000000304926003049260000000000 +19B1:00000000384402020244380000000000 +19B2:1C224141415D634141221C0000000000 +19B3:00000000384402020244784040423C00 +19B4:00000000000000001040104010401040104008C0074000400040004800300000 +19B5:000000000000000003C004200810081008100420023000000000000000000000 +19B6:00000000000000001C1C22224141414141412222131300000000000000000000 +19B7:384440201820404040221C0000000000 +19B8:000000001C2222140814630000000000 +19B9:1C2A4949495D634141221C0000000000 +19BA:3C4202021E22404040221C0000000000 +19BB:00000000000000000F08108800480048004810C80F4800480048004800300000 +19BC:07000880104010401048174818C81048104808C8074800480048004800300000 +19BD:000000000000000007840844102410241024086407A400240024002400180000 +19BE:00180024002000201C2022202220142008201440638000000000000000000000 +19BF:07000A80124012401248174818C81048104808C8074800480048004800300000 +19C0:07000880104010401048174818C81048104808C8074800480048004800300000 +19C1:000000001C22414141231D010D120C00 +19C2:000000000000000003C004200810081008100B100C90001000D0012000C00000 +19C3:000000000000000007C00820080008000800080007C000200610092007C00000 +19C4:000000000000000002400420081008100BD0042003D000100310049003E00000 +19C5:00000000000000000E38114420822002200210060E3A0002001A002400180000 +19C6:000000003844020202041804324A3C00 +19C7:000000000000000002400420081008100810043003D0001000D0012000C00000 +19C8:000000001C20405C62221C0000000000 +19C9:000000001C22625C40201C0000000000 +19CA:00007FFE7BCE73B67BC67BF671CE7FFE7FFE71866FB66F866FB671B67FFE0000 +19CB:00007FFE7BCE73B67BC67BF671CE7FFE7FFE718E6FB66F8E6FB6718E7FFE0000 +19CC:00007FFE7BCE73B67BC67BF671CE7FFE7FFE71C66FBE6FBE6FBE71C67FFE0000 +19CD:00007FFE7BCE73B67BC67BF671CE7FFE7FFE718E6FB66FB66FB6718E7FFE0000 +19CE:00007FFE7BCE73B67BC67BF671CE7FFE7FFE71866FBE6F8E6FBE71867FFE0000 +19CF:00007FFE7BCE73B67BC67BF671CE7FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +19D0:000000001C22414141221C0000000000 +19D1:00000000384402020244380000000000 +19D2:000000000E0202020202020202443800 +19D3:000000003C42010101423C1008040200 +19D4:000000001E21404040211E0408102000 +19D5:00000000000000000E38114420842004200410040C0400040024002400180000 +19D6:003C4240444A484442221C0000000000 +19D7:00000000000000001C7022884108400840082008180800080009000900060000 +19D8:00000000182424244242810000000000 +19D9:000000001C2241414946404040423C00 +19DA:000000000008000803D00420080008000800042003C000000000000000000000 +19DB:00007FFE7BCE73B67BC67BF671CE7FFE7FFE638E6DB66D8E6DB6638E7FFE0000 +19DC:00007FFE7BCE73B67BC67BF671CE7FFE7FFE63C66DBE6DBE6DBE63C67FFE0000 +19DD:00007FFE7BCE73B67BC67BF671CE7FFE7FFE638E6DB66DB66DB6638E7FFE0000 +19DE:0000000C001200100C10121021102110211010900C6000000000000000000000 +19DF:0000000C001200100C10121021102110211010900C60000007C00820082007C0 +19E0:0000000001C0022002200220022001C0000803F8040008E0092008A00A200DE0 +19E1:000003800440054002400040044003800000024004C003400040004000400000 +19E2:00001000136014901410131010100FE00000024004C003400040004000400000 +19E3:000000000EE0111011101910151019100000024004C003400040004000400000 +19E4:00000200040009000A800A00090007800000024004C003400040004000400000 +19E5:04800B80040009000A800A00090007800000024004C003400040004000400000 +19E6:040005800640004002400540044003800000024004C003400040004000400000 +19E7:0000001006C8092808280C280A280C100000024004C003400040004000400000 +19E8:002003E0040008E0092008A00A200DC00000024004C003400040004000400000 +19E9:00000040004003C004000300044003800000024004C003400040004000400000 +19EA:00001C3822442A441244024422441C380000024004C003400040004000400000 +19EB:00001C3822442A541224020422441C380000024004C003400040004000400000 +19EC:00003900452C555225420522450238FC0000024004C003400040004000400000 +19ED:000038EC4512551225120592455239920000024004C003400040004000400000 +19EE:00001C1022202A481254025022481C3C0000024004C003400040004000400000 +19EF:00241C5C22202A481254025022481C3C0000024004C003400040004000400000 +19F0:002003E0040008E0092008A00A200DC0002003E0040008E0092008A00A200DC0 +19F1:0000048009800680008000800080000003800440054002400040044003800000 +19F2:000004800980068000800080008000001000136014901410131010100FE00000 +19F3:0000048009800680008000800080000000000EE0111011101910151019100000 +19F4:000004800980068000800080008000000200040009000A800A00090007800000 +19F5:000004800980068000800080008004200BE0040009000A800A00090007800000 +19F6:0000048009800680008000800080040005800640004002400540044003800000 +19F7:00000480098006800080008000800000001006C8092808280C280A280C100000 +19F8:0000048009800680008000800080002003E0040008E0092008A00A200DC00000 +19F9:000004800980068000800080008000000040004003C004000300044003800000 +19FA:000004800980068000800080008000001C3822442A441244024422441C380000 +19FB:000004800980068000800080008000001C3822442A541224020422441C380000 +19FC:000004800980068000800080008000003900452C555225420522450238FC0000 +19FD:0000048009800680008000800080000038EC4512551225120592455239920000 +19FE:000004800980068000800080008000001C1022202A481254025022481C3C0000 +19FF:000004800980068000800080008000241C5C22202A481254025022481C3C0000 +1A00:0000000000000000000000000000000000800110022004400880010000000000 +1A01:0000000000000000000000000000000001200120029002900460056000000000 +1A02:0000000000000000000000000000000002000100008000C00120021000000000 +1A03:00000000000000000000000000000000004000A0011002880440082000000000 +1A04:0000000000000000000000000000000001200120029002900460046000000000 +1A05:0000000000000000000000000100028004400220010001800240042000000000 +1A06:0000000000000000000000000000000004400440028002800100010000000000 +1A07:00000000000000000000000000000000084004200210031004A0084000000000 +1A08:0000000000000000000000000000000000800080014001400220022000000000 +1A09:0000000000000000000000000000000005400440028002800100010000000000 +1A0A:000000000000000000000000000000000080008001400140022002A000000000 +1A0B:0000000000000000000000000000002001100290028804480450092002800000 +1A0C:00000000000000000000000000000000012001200290021004A0044000000000 +1A0D:00000000000000000000000000000000004000A00110031004A0084000000000 +1A0E:0000000000000000000000000000000002200220055004900808094800800000 +1A0F:0000000000000000000000000000000002200220055004900948094800000000 +1A10:00000000000000000000000000000000042004200A500A50118815A800000000 +1A11:0000000000000000000000000000000001800240042001800240042000000000 +1A12:00000000000000000000000000000000042004200A500A101148118800000000 +1A13:00000000000000000000000000000000042004200A500A501188118800000000 +1A14:000000000000000000000000000000000180066008100408033000C000000000 +1A15:00000000000000000000000000000000042004200A500A50118811A800000000 +1A16:0000000000000000000000000000000004200A50118811880A50042000000000 +1A17:0000000000000000000008000000000000000000000000000000000000000000 +1A18:0000000000000000000000000000000000000000000000000000000000000010 +1A19:0000000000000000000000000000000000004000800080004000200000000000 +1A1A:0000000000000000000000000000000000000006000200020001000100000000 +1A1B:0000000010000800040008000000000000000000000000000000000000000000 +1A1C:00007FFE7B8673B67B867BB671B67FFE7FFE7BC673BE7BBE7BBE71C67FFE0000 +1A1D:00007FFE7B8673B67B867BB671B67FFE7FFE7B8E73B67BB67BB6718E7FFE0000 +1A1E:0000000000000000000030003000000000000180018000000000000C000C0000 +1A1F:0000000000000000000000000000100010003800440000004400380010001000 +1A20:0000000000000000000003700488084408440844048800300000000000000000 +1A21:0000000000000000000003C00420001003D00430043003C80000000000000000 +1A22:03E0040004000400040005C00620001003D00430043003C80000000000000000 +1A23:0000000000000000000001E00210040804080408021001200000000000000000 +1A24:03C0040004000400040005E00610040804080408021001200000000000000000 +1A25:0000000000000000000005000AA800A40124022402A401580000000000000000 +1A26:0000000000000000000001E0021004080208040804C803280000000000000000 +1A27:0000000000000000000001C00220011000900110022001C00000000000000000 +1A28:0000000000800080004003300488004400440044048803700000000000000000 +1A29:0000000000000000000000F00108020802100208010800C80000000000000000 +1A2A:03E0040004000400040005E00610041004200410021001900000000000000000 +1A2B:0000000000800080004003300488044402440444048803700000000000000000 +1A2C:00000000000000000000033004880044004400440488077004000404040403F8 +1A2D:0000000000000000000002200510040802080408049003600000000000000000 +1A2E:0000000000000000000002200510040802080408041803E8000803C8041003E0 +1A2F:0000000000000000000001C0022000100010002000C001300008000000000000 +1A30:0000000000000000000002800550004800880108015000A00000000000000000 +1A31:00000000000000000000011002A804A404A404A4024801100000000000000000 +1A32:0000000000000000000003700488084408440844048803300000000000000000 +1A33:0000000000000000000003E0041002080148022804A803480000000000000000 +1A34:0000000000000000000002700488041004200410020801F00000000000000000 +1A35:0000000000000000000001E0021004080408040802D001200000000000000000 +1A36:0000000000000000000001C0022004000400040002E001100008000000000000 +1A37:0000000000000000000001200210040804080408021001E00000000000000000 +1A38:0000000600080010001000100210041004100410022001C00000000000000000 +1A39:0000000000000000000002100528042802280428049003680000000000000000 +1A3A:03F004080400040003F800080208040802080408029001600000000000000000 +1A3B:00000000000000000000012002D0040804080408021001200000000000000000 +1A3C:03E00400040004000400052006D0040804080408021001200000000000000000 +1A3D:0000000000000000000003700488004400440044048803300000000000000000 +1A3E:00000000000000000000012002100408040804E8021001E80004000000000000 +1A3F:0000000000000000000000300488084408440844048803700000000000000000 +1A40:0006000800080008000803880408040803080408041003E00000000000000000 +1A41:0000000000000000000003800440022001100490044803880000000000000000 +1A42:0000000000000000000002200550048802080008000803E80418048803F40020 +1A43:0000000000000000000003300488088408840844044803300000000000000000 +1A44:0000000000000000000003C004200010001003E0001003D00430049003E80020 +1A45:0000000000000000000001E00210040804080408021001E00000000000000000 +1A46:0000000000000000000401E8021004E804080408021001200000000000000000 +1A47:0000000000000000000003300488004400440054048803740000000000000000 +1A48:0000000000000000000003300488004400440044048803700000000000000000 +1A49:0000000000000000000003300448084408840884048803300000000000000000 +1A4A:0000000000000000000001E0021004080208040804C8032802000270020801F0 +1A4B:0000000000000000000003700488004400440044048803300008000400000000 +1A4C:00000000000000000000033004480844088408840488033000100190021001E0 +1A4D:00000000000000000000033004C8040804080210000003E0041004C805480208 +1A4E:00FC0102010000FE0002033204CA040A040A0212000203E2041204CA054A020C +1A4F:0000000000000000000001E00210000800080408061005E004000400021001E0 +1A50:03C0040004000400040005E00610000800080408061005E004000400021001E0 +1A51:0000000000000000000001E00210040804080408041004E004000400021001E0 +1A52:0800100010001000100013701488104410441044148813301008100410000800 +1A53:0006000800080008000803080488088808880848044803300000000000000000 +1A54:000000000000000000000248052400920092009205B402480000000000000000 +1A55:0800100010001000100010001000100010001000100010001000100010000800 +1A56:00000000000000000000000000000000000000000000000000000C8012400980 +1A57:000000000000000600010001000100010001000100010001000100650092004D +1A58:000C0010000C0010000C00000000000000000000000000000000000000000000 +1A59:01E0021002D00150000000000000000000000000000000000000000000000000 +1A5A:00A00150011000A0000000000000000000000000000000000000000000000000 +1A5B:00000000000000000000000000000000000000000000000000400F4010400F80 +1A5C:0000000000000000000000000000000000000000000000000000094008C007A0 +1A5D:0000000000000000000000000000000000000000000000000000084008400780 +1A5E:00000000000000000000000000000000000000000000000000000C8002400D80 +1A5F:00007FFE7B8673B67B867BB671B67FFE7FFE61866FBE618E7DBE61BE7FFE0000 +1A60:00000000000000000000000000000000000000000000000000000008001C0008 +1A61:0000000000000000000000000003000000000000000300000000000000000000 +1A62:0000001000200040000000000000000000000000000000000000000000000000 +1A63:0000000000000000000000020001000100010001000100020000000000000000 +1A64:00000000000E0011001100010001000100010001000100010000000000000000 +1A65:01E0021002100120000000000000000000000000000000000000000000000000 +1A66:01E0021002200110000000000000000000000000000000000000000000000000 +1A67:01F0020802480110000000000000000000000000000000000000000000000000 +1A68:03B0044804480290000000000000000000000000000000000000000000000000 +1A69:0000000000000000000000000000000000000000000000000010001000180000 +1A6A:00000000000000000000000000000000000000000000000000280028002C0000 +1A6B:0000000000780064000200000000000000000000000000000000000000000000 +1A6C:0000000000000000000000000000000000000000000000000000002000480036 +1A6D:0000000100010001000100010001000100010001000100010005000900090006 +1A6E:0000000000000000000040008000800080008000800040000000000000000000 +1A6F:000000000000000000005000A000A000A000A000A00050000000000000000000 +1A70:0000400080008000800040008000800080008000800040000000000000000000 +1A71:0000000080004000200060008000800080008000800040000000000000000000 +1A72:00004000A0002000200060008000800080008000800040000000000000000000 +1A73:0040004000A00318000000000000000000000000000000000000000000000000 +1A74:0200050002000000000000000000000000000000000000000000000000000000 +1A75:0000080008000800000000000000000000000000000000000000000000000000 +1A76:0000020014000800000000000000000000000000000000000000000000000000 +1A77:0000001000280044000000000000000000000000000000000000000000000000 +1A78:0002000200020012000C00000000000000000000000000000000000000000000 +1A79:0018000400180010000C00000000000000000000000000000000000000000000 +1A7A:00700048012400E4000000000000000000000000000000000000000000000000 +1A7B:000C001600140014000000000000000000000000000000000000000000000000 +1A7C:00340048012000C0000000000000000000000000000000000000000000000000 +1A7D:00007FFE7B8673B67B867BB671B67FFE7FFE618E7DB67BB677B6778E7FFE0000 +1A7E:00007FFE7B8673B67B867BB671B67FFE7FFE61867DBE7B8E77BE77867FFE0000 +1A7F:0000000000000000000000000000000000000000000000000600090009000600 +1A80:0000000000000000000001C00220041004100410022001C00000000000000000 +1A81:0000000000000000000003800440002000200020044003800000000000000000 +1A82:00000000000000000000001000100010001000100010001004100410022001C0 +1A83:0000000000000000038004400020002000200440038002000100010000800040 +1A84:000000000000000001C00220040004000400022001C000400080008001000200 +1A85:0000000000000000000001C002200410071004900310001004100410022001C0 +1A86:01C00220041004000460049004E0048004700410022001C00000000000000000 +1A87:0000000000000000000003800440044004400440044002400040004000400030 +1A88:0000000000000000000001C00220041004100510029001200000000000000000 +1A89:000000000000000001C0022004100470048004E00490046004000410022001C0 +1A8A:00007FFE7B8673B67B867BB671B67FFE7FFE73866DB673866DB673B67FFE0000 +1A8B:00007FFE7B8673B67B867BB671B67FFE7FFE738E6DB6738E6DB6738E7FFE0000 +1A8C:00007FFE7B8673B67B867BB671B67FFE7FFE73C66DBE73BE6DBE73C67FFE0000 +1A8D:00007FFE7B8673B67B867BB671B67FFE7FFE738E6DB673B66DB6738E7FFE0000 +1A8E:00007FFE7B8673B67B867BB671B67FFE7FFE73866DBE738E6DBE73867FFE0000 +1A8F:00007FFE7B8673B67B867BB671B67FFE7FFE73866DBE738E6DBE73BE7FFE0000 +1A90:0000000000000000000001C00220041004100410022001C00000000000000000 +1A91:0000000000000000002001A00260040004000500028001000000000000000000 +1A92:01C0022004100410041004000400040004000600050002000000000000000000 +1A93:000000000100010000801C70220801040104010422881C700000000000000000 +1A94:0000000000000000000002600490042004400420021003E0020002E0021001E0 +1A95:0020002000400180020004600490042004400420021003E00000000000000000 +1A96:0010002000200020002002200520042002200420052002C00000000000000000 +1A97:0000000000000000000002400520041002100410052002C00000000000000000 +1A98:0000000000000000000018C02520421040102060004003F8044409F20A490431 +1A99:000000000000000000000E181104208220822882144408380000000000000000 +1A9A:00007FFE7B8673B67B867BB671B67FFE7FFE73866DB671867DB673B67FFE0000 +1A9B:00007FFE7B8673B67B867BB671B67FFE7FFE738E6DB6718E7DB6738E7FFE0000 +1A9C:00007FFE7B8673B67B867BB671B67FFE7FFE73C66DBE71BE7DBE73C67FFE0000 +1A9D:00007FFE7B8673B67B867BB671B67FFE7FFE738E6DB671B67DB6738E7FFE0000 +1A9E:00007FFE7B8673B67B867BB671B67FFE7FFE73866DBE718E7DBE73867FFE0000 +1A9F:00007FFE7B8673B67B867BB671B67FFE7FFE73866DBE718E7DBE73BE7FFE0000 +1AA0:0000000003E004900888108410841FFC108410840888049003E0000000000000 +1AA1:00000000038004800880108010801FFC108410840888049003E0000000000000 +1AA2:0012004C003800D000201CC0222001100110011022201DC00000000000000000 +1AA3:000000000080014001C002200C9815540C98022001C001400080000000000000 +1AA4:0000000000000FE0101027C8282829C8281027E0100C0FF00000000000000000 +1AA5:000003E00220094815540AA865535A2D44115A2D65530AA815540948022003E0 +1AA6:000001C00220041004100190026002000260019004100410022001C000000000 +1AA7:000000000000000003B004480A48040800080010006001800200040004000400 +1AA8:0000000000000000000002000200020002000200020002000000000000000000 +1AA9:0000000000000000000009000900090009000900090009000000000000000000 +1AAA:0000000000000000000004000800090007000100010001000000000000000000 +1AAB:000000000000000000000880108012800E800280028002800000000000000000 +1AAC:000000380004000401C4022800300E201140018011000E000000000000000000 +1AAD:00000000000000000000010002800500044002200410041004100410022001C0 +1AAE:00007FFE7B8673B67B867BB671B67FFE7FFE61866DBE618E6DBE6D867FFE0000 +1AAF:00007FFE7B8673B67B867BB671B67FFE7FFE61866DBE618E6DBE6DBE7FFE0000 +1AB0:00142A49000000000000000000000000 +1AB1:00081455080000000000000000000000 +1AB2:00364936000000000000000000000000 +1AB3:00082A1C080000000000000000000000 +1AB4:00000822000000000000000000000000 +1AB5:00000000000000000000000000552255 +1AB6:00000000000000000000000000002A55 +1AB7:00000000000000000000000000080804 +1AB8:00000000000000000000000000242412 +1AB9:00000000000000000000000000204080 +1ABA:0000000000000000000000000020C0C0 +1ABB:00004281814200000000000000000000 +1ABC:0024C3C3C3C324000000000000000000 +1ABD:00000000000000000000000042818142 +1ABE:00000000000000000000428181420000 +1ABF:00000000000000000000000000005428 +1AC0:00000000000000000000000000002854 +1AC1:00007FFE7B8673B67B867BB671B67FFE7FFE71EE6FCE6FEE6FEE71C67FFE0000 +1AC2:00007FFE7B8673B67B867BB671B67FFE7FFE71866FF66F866FBE71867FFE0000 +1AC3:00007FFE7B8673B67B867BB671B67FFE7FFE718E6FF66FC66FF6718E7FFE0000 +1AC4:00007FFE7B8673B67B867BB671B67FFE7FFE71B66FB66F866FF671F67FFE0000 +1AC5:00007FFE7B8673B67B867BB671B67FFE7FFE71866FBE6F866FF671867FFE0000 +1AC6:00007FFE7B8673B67B867BB671B67FFE7FFE71CE6FBE6F8E6FB671CE7FFE0000 +1AC7:00007FFE7B8673B67B867BB671B67FFE7FFE71866FF66FEE6FDE71DE7FFE0000 +1AC8:00007FFE7B8673B67B867BB671B67FFE7FFE71CE6FB66FCE6FB671CE7FFE0000 +1AC9:00007FFE7B8673B67B867BB671B67FFE7FFE71CE6FB66FC66FF671CE7FFE0000 +1ACA:00007FFE7B8673B67B867BB671B67FFE7FFE71866FB66F866FB671B67FFE0000 +1ACB:00007FFE7B8673B67B867BB671B67FFE7FFE718E6FB66F8E6FB6718E7FFE0000 +1ACC:00007FFE7B8673B67B867BB671B67FFE7FFE71C66FBE6FBE6FBE71C67FFE0000 +1ACD:00007FFE7B8673B67B867BB671B67FFE7FFE718E6FB66FB66FB6718E7FFE0000 +1ACE:00007FFE7B8673B67B867BB671B67FFE7FFE71866FBE6F8E6FBE71867FFE0000 +1ACF:00007FFE7B8673B67B867BB671B67FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +1AD0:00007FFE7B8673B67B867BB671B67FFE7FFE63CE6DB66DB66DB663CE7FFE0000 +1AD1:00007FFE7B8673B67B867BB671B67FFE7FFE63EE6DCE6DEE6DEE63C67FFE0000 +1AD2:00007FFE7B8673B67B867BB671B67FFE7FFE63866DF66D866DBE63867FFE0000 +1AD3:00007FFE7B8673B67B867BB671B67FFE7FFE638E6DF66DC66DF6638E7FFE0000 +1AD4:00007FFE7B8673B67B867BB671B67FFE7FFE63B66DB66D866DF663F67FFE0000 +1AD5:00007FFE7B8673B67B867BB671B67FFE7FFE63866DBE6D866DF663867FFE0000 +1AD6:00007FFE7B8673B67B867BB671B67FFE7FFE63CE6DBE6D8E6DB663CE7FFE0000 +1AD7:00007FFE7B8673B67B867BB671B67FFE7FFE63866DF66DEE6DDE63DE7FFE0000 +1AD8:00007FFE7B8673B67B867BB671B67FFE7FFE63CE6DB66DCE6DB663CE7FFE0000 +1AD9:00007FFE7B8673B67B867BB671B67FFE7FFE63CE6DB66DC66DF663CE7FFE0000 +1ADA:00007FFE7B8673B67B867BB671B67FFE7FFE63866DB66D866DB663B67FFE0000 +1ADB:00007FFE7B8673B67B867BB671B67FFE7FFE638E6DB66D8E6DB6638E7FFE0000 +1ADC:00007FFE7B8673B67B867BB671B67FFE7FFE63C66DBE6DBE6DBE63C67FFE0000 +1ADD:00007FFE7B8673B67B867BB671B67FFE7FFE638E6DB66DB66DB6638E7FFE0000 +1ADE:00007FFE7B8673B67B867BB671B67FFE7FFE63866DBE6D8E6DBE63867FFE0000 +1ADF:00007FFE7B8673B67B867BB671B67FFE7FFE63866DBE6D8E6DBE63BE7FFE0000 +1AE0:00007FFE7B8673B67B867BB671B67FFE7FFE61CE6FB663B66FB661CE7FFE0000 +1AE1:00007FFE7B8673B67B867BB671B67FFE7FFE61EE6FCE63EE6FEE61C67FFE0000 +1AE2:00007FFE7B8673B67B867BB671B67FFE7FFE61866FF663866FBE61867FFE0000 +1AE3:00007FFE7B8673B67B867BB671B67FFE7FFE618E6FF663C66FF6618E7FFE0000 +1AE4:00007FFE7B8673B67B867BB671B67FFE7FFE61B66FB663866FF661F67FFE0000 +1AE5:00007FFE7B8673B67B867BB671B67FFE7FFE61866FBE63866FF661867FFE0000 +1AE6:00007FFE7B8673B67B867BB671B67FFE7FFE61CE6FBE638E6FB661CE7FFE0000 +1AE7:00007FFE7B8673B67B867BB671B67FFE7FFE61866FF663EE6FDE61DE7FFE0000 +1AE8:00007FFE7B8673B67B867BB671B67FFE7FFE61CE6FB663CE6FB661CE7FFE0000 +1AE9:00007FFE7B8673B67B867BB671B67FFE7FFE61CE6FB663C66FF661CE7FFE0000 +1AEA:00007FFE7B8673B67B867BB671B67FFE7FFE61866FB663866FB661B67FFE0000 +1AEB:00007FFE7B8673B67B867BB671B67FFE7FFE618E6FB6638E6FB6618E7FFE0000 +1AEC:00007FFE7B8673B67B867BB671B67FFE7FFE61C66FBE63BE6FBE61C67FFE0000 +1AED:00007FFE7B8673B67B867BB671B67FFE7FFE618E6FB663B66FB6618E7FFE0000 +1AEE:00007FFE7B8673B67B867BB671B67FFE7FFE61866FBE638E6FBE61867FFE0000 +1AEF:00007FFE7B8673B67B867BB671B67FFE7FFE61866FBE638E6FBE61BE7FFE0000 +1AF0:00007FFE7B8673B67B867BB671B67FFE7FFE61CE6FB663B66FB66FCE7FFE0000 +1AF1:00007FFE7B8673B67B867BB671B67FFE7FFE61EE6FCE63EE6FEE6FC67FFE0000 +1AF2:00007FFE7B8673B67B867BB671B67FFE7FFE61866FF663866FBE6F867FFE0000 +1AF3:00007FFE7B8673B67B867BB671B67FFE7FFE618E6FF663C66FF66F8E7FFE0000 +1AF4:00007FFE7B8673B67B867BB671B67FFE7FFE61B66FB663866FF66FF67FFE0000 +1AF5:00007FFE7B8673B67B867BB671B67FFE7FFE61866FBE63866FF66F867FFE0000 +1AF6:00007FFE7B8673B67B867BB671B67FFE7FFE61CE6FBE638E6FB66FCE7FFE0000 +1AF7:00007FFE7B8673B67B867BB671B67FFE7FFE61866FF663EE6FDE6FDE7FFE0000 +1AF8:00007FFE7B8673B67B867BB671B67FFE7FFE61CE6FB663CE6FB66FCE7FFE0000 +1AF9:00007FFE7B8673B67B867BB671B67FFE7FFE61CE6FB663C66FF66FCE7FFE0000 +1AFA:00007FFE7B8673B67B867BB671B67FFE7FFE61866FB663866FB66FB67FFE0000 +1AFB:00007FFE7B8673B67B867BB671B67FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +1AFC:00007FFE7B8673B67B867BB671B67FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +1AFD:00007FFE7B8673B67B867BB671B67FFE7FFE618E6FB663B66FB66F8E7FFE0000 +1AFE:00007FFE7B8673B67B867BB671B67FFE7FFE61866FBE638E6FBE6F867FFE0000 +1AFF:00007FFE7B8673B67B867BB671B67FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +1B00:0FE0111012900920000000000000000000000000000000000000000000000000 +1B01:01000AA00AA007C0000000000000000000000000000000000000000000000000 +1B02:0100028000400020000000000000000000000000000000000000000000000000 +1B03:00000200010000F0000000000000000000000000000000000000000000000000 +1B04:0000000000000000000200050001000200010001000100010001000000000000 +1B05:000000000000000000000E70112824A42A2422FC24A412240CC4000000000000 +1B06:00000000000000000000380044389244A8828882928249443628000000000000 +1B07:000000000000000011B02A480A080A0804C8010000C0022001C0000000000000 +1B08:000000000000000046CCA9222821282113260400030008800700000000000000 +1B09:00000000000000000B800440004000800300040009C00A200410000000000000 +1B0A:0000000000000000173008880084010406180800138014400820000000000000 +1B0B:000000000000000008101428042803C801800200018004400380000000000000 +1B0C:00000000000000004098A14421421E420C0C10000C0022001C00000000000000 +1B0D:000000000000000011B02A480A0A0A7C04880110009000600040000000000000 +1B0E:000000000000000046C0A920282E29F112210442024901890106000000000000 +1B0F:000000000000000003800C001000138014400C20000000000000000000000000 +1B10:000000000000000046C5A92B282E282210420782080210C20F3C000000000000 +1B11:000000000000000046C0A9202820282010400780080011C00E20000000000000 +1B12:000000000000000046CCA9222821282110460780080011C00E20000000000000 +1B13:000000000000000023CC542A142A3F2A54AA2312000000000000000000000000 +1B14:000000000000000023C0542014203F2054A0231C000200000000000000000000 +1B15:0000000000000000239854541454145412940EE4000000000000000000000000 +1B16:00000000000000002338551415141514155408A4000000000000000000000000 +1B17:0000000000000000236054901410141014100C10000000000000000000000000 +1B18:00000000000000000870144804280E28152808C8000000000000000000000000 +1B19:00000000000000003C30422842284A284A2831C8000000000000000000000000 +1B1A:000000000000000011E02A100A100A600A100608000800000000000000000000 +1B1B:0000000C0012000F46C2A9222822282210420782080210C20F3C000000000000 +1B1C:000000000000000046C6A9292829282928291832000000000000000000000000 +1B1D:0000000000000000236054901010381054104800210022001C00000000000000 +1B1E:0000000000000000236054901010111011100E00000000000000000000000000 +1B1F:0000000000000000203050281028102813280CC8000000000000000000000000 +1B20:0000000000000000101028100810081009900660000000000000000000000000 +1B21:00000000000000009CE2A3154015001500150019000000000000000000000000 +1B22:000000000000000023CC542A172A10AA10AA0F12000000000000000000000000 +1B23:000000000000000011E0289008500A5009500790010000000000000000000000 +1B24:000000000000000008701488048809C812A80C48000000000000000000000000 +1B25:0000000000000000107828240814081409940664000000000000000000000000 +1B26:000000000000000008F0150805080FC8152808C8000000000000000000000000 +1B27:0000000000000000106028500850085008500790000000000000000000000000 +1B28:00000000000000001088295008E0084008400780000000000000000000000000 +1B29:000000000000000046CCA92A282A282A282A1832000000000000000000000000 +1B2A:000000000000000020F05108090803C8152808C8000000000000000000000000 +1B2B:00000000000000001FB024282428032804280448038800000000000000000000 +1B2C:0000000000000000200850141114111412940C64000000000000000000000000 +1B2D:000000000000000010E029100510051005100610000000000000000000000000 +1B2E:0000000000000000460CA90A290A290A290A10F2000000000000000000000000 +1B2F:000000000000000008F0144804280428042803C8000000000000000000000000 +1B30:000000000000000047E6A9152A95289524A51C39000000000000000000000000 +1B31:0000000000000000206050501250155011500FD0010000000000000000000000 +1B32:00000000000000001060285008501C502A501190000000000000000000000000 +1B33:000000000000000040CCA12A212A212A212A1E12000000000000000000000000 +1B34:0000010000000440000000000000000000000000000000000000000000000000 +1B35:0000000000000000000C00020001000100090006000000000000000000000000 +1B36:03C014200C200240000000000000000000000000000000000000000000000000 +1B37:03C015200EA00460000000000000000000000000000000000000000000000000 +1B38:000000000000000000000000000000010003000300030005000900110012000C +1B39:0000000000000000000000000000000100020004000400020001000100020004 +1B3A:000000000000000000000000000000000000002000100410099008A007C00080 +1B3B:0000000000000000000C0002000100010009002600100410099008A007C00080 +1B3C:00E0012012400A80000000000000000000000000000000002308548814880870 +1B3D:00E0012012400A80000C00020001000100090006000000002308548814880870 +1B3E:0000000000000000300048000800100010002000200020001000000000000000 +1B3F:38004000300008003000B000C800900010002000200020001000000000000000 +1B40:0000000000000000300C48020801100110092006200020001000000000000000 +1B41:3800400030000800300CB002C801900110092006200020001000000000000000 +1B42:00E0012012400A80000000000000000000000000000000000000000000000000 +1B43:00E0012012400A80000C00020001000100090006000000000000000000000000 +1B44:000E001100110001000200020002000200020002000200010001000000000000 +1B45:000000000000000023CC542A1C2A3F2A5CAA2B12080008800700000000000000 +1B46:00000000000000004716A8AD28AD7CADAAAD4444000000000000000000000000 +1B47:000000000000000023CC542A172A10AA14AA0F12040004400380000000000000 +1B48:00000000000000000830142804280528052803C80100011000E0000000000000 +1B49:000000000000000008F0144804280528052803C80100011000E0000000000000 +1B4A:00000000000000001060285008501D502B5011900100011000E0000000000000 +1B4B:00000000000000004302A2A522A572B5AAB544B5004D00000000000000000000 +1B4C:00007FFE7B8E73B67B8E7BB6718E7FFE7FFE6DC66DBE61BE7DBE7DC67FFE0000 +1B4D:00007FFE7B8E73B67B8E7BB6718E7FFE7FFE6D8E6DB661B67DB67D8E7FFE0000 +1B4E:00007FFE7B8E73B67B8E7BB6718E7FFE7FFE6D866DBE618E7DBE7D867FFE0000 +1B4F:00007FFE7B8E73B67B8E7BB6718E7FFE7FFE6D866DBE618E7DBE7DBE7FFE0000 +1B50:0000000000000000018002400240018000000000000000000000000000000000 +1B51:00000004000A0007236254921412141214140C38000000000000000000000000 +1B52:000000000000000011B02A480A0A0A7C04880110009000600040000000000000 +1B53:000000000000000046C0A9202820282010400780080011C00E20000000000000 +1B54:0000000000000000000000000B00088009000880048003000000000000000000 +1B55:0000000000000000078008400B2008A0092008A004A003200020002000100000 +1B56:000000000000000003800C001000138014400C20000000000000000000000000 +1B57:00000000000000004622A95429382910291018E0000000000000000000000000 +1B58:00000000000000001088295008E0084008400780000000000000000000000000 +1B59:0000000000000000202250541138111012900C60000000000000000000000000 +1B5A:00000000000000000C3012481248924892486189000900060000000000000000 +1B5B:000000000000000046CCA92A282A282A282A180A023F124A118A100A118A0E72 +1B5C:0000000000000000018002400240018000000000000000000000000000000000 +1B5D:0000000000000000031004A003C00000031004A003C000000000000000000000 +1B5E:0000000000000000020005000080008000400040002000200020000000000000 +1B5F:0000000000000000104028A00410041002080208010401040104000000000000 +1B60:0000000000000000018000400180044003800000000000000000000000000000 +1B61:0000000000000000000C00020001000100090006000000000000000000000000 +1B62:0000000000000000058006400440008000800100010001000080000000000000 +1B63:0000000000000000004000C000C000C001400240044004800300000000000000 +1B64:0000000000000000000002000500008000800040004000000000000000000000 +1B65:00000000000000000000000002000200010000F0000000000000000000000000 +1B66:00000000000000000000000003C014200C200240000000000000000000000000 +1B67:0000000000000000000000000070009009200540000000000000000000000000 +1B68:0000000000000000080010002000200010000800080010002000000000000000 +1B69:000000000000000046CCA92A282A282A104A078A080A118A0E72000000000000 +1B6A:0000000000000000080014000400080004000400040008000800080004000400 +1B6B:0080010000800000000000000000000000000000000000000000000000000000 +1B6C:0000000000000000000000000000000000000000000000000000008001000080 +1B6D:0300010007C00100010000000000000000000000000000000000000000000000 +1B6E:000003C000000000000000000000000000000000000000000000000000000000 +1B6F:0100028004400000000000000000000000000000000000000000000000000000 +1B70:070001000FE00380054000000000000000000000000000000000000000000000 +1B71:07F0014002200410000000000000000000000000000000000000000000000000 +1B72:0440028001000000000000000000000000000000000000000000000000000000 +1B73:0380044005400440038000000000000000000000000000000000000000000000 +1B74:0000000000000000000010002800280044004400000000000000000000000000 +1B75:0000000000000000000030004800480048003000000000000000000000000000 +1B76:0000000000000000000090006800280054004400000000000000000000000000 +1B77:00000000000000000000B8004400640054003800000000000000000000000000 +1B78:0000000000000000000000000000000078000000000000000000000000000000 +1B79:0000000000000000000010001000200020004000780000000000000000000000 +1B7A:0000000000000000000000004000200078001000080000000000000000000000 +1B7B:00000000000000000000900050002000300048007C0000000000000000000000 +1B7C:0000000000000000000000000000300030000000000000000000000000000000 +1B7D:00007FFE7B8E73B67B8E7BB6718E7FFE7FFE618E7DB67BB677B6778E7FFE0000 +1B7E:00007FFE7B8E73B67B8E7BB6718E7FFE7FFE61867DBE7B8E77BE77867FFE0000 +1B7F:00007FFE7B8E73B67B8E7BB6718E7FFE7FFE61867DBE7B8E77BE77BE7FFE0000 +1B80:0020005000200000000000000000000000000000000000000000000000000000 +1B81:0022005400080000000000000000000000000000000000000000000000000000 +1B82:0000000000000000000000000000000000040012000A00080000000000000000 +1B83:000000000000000005F00820084008E00810042003C000000000000000000000 +1B84:000000000000000000C00100010002000200042007E000000000000000000000 +1B85:000000000000000007000100010002300240042007E000000000000000000000 +1B86:00000000000000000BE0104010F011C810200840078000000000000000000000 +1B87:000000000000000007000500030002000220045007D000000000000000000000 +1B88:000000000000000000F00100010008F00810042003C000000000000000000000 +1B89:00000000000000500420080008F008200870041003E000000000000000000000 +1B8A:0000000000000000077001100110022002200440044000000000000000000000 +1B8B:000000000000000001F802480248049004900920092000000000000000000000 +1B8C:000000000000000007000100010002700210042007E000000000000000000000 +1B8D:000000000000000007000100010002400220041007F000000000000000000000 +1B8E:0000000000000000070401080108021006100B2004E000000000000000000000 +1B8F:00000000000000000180020002000400052009900F4800000000000000000000 +1B90:00000000000000000700010001000200024004A007A000000000000000000000 +1B91:00000000000000000E3E0242020204C404A409280F1800000000000000000000 +1B92:0000000000000000002000400C700490049009200F2000000000000000000000 +1B93:000000000000000001C002000200044004A008900F8800000000000000000000 +1B94:00000000000000000F000100010002000200040007E000000000000000000000 +1B95:000000000000000007700110011002200220044007C000000000000000000000 +1B96:000000000000000007080110011002200220044007C000000000000000000000 +1B97:000000000000000000880110011002200220044007C000000000000000000000 +1B98:0000000000000000019F022102010462045208940F8C00000000000000000000 +1B99:000000000000000007F000100E1002200220044007C000000000000000000000 +1B9A:0000000000000000002000400C4404A404A809280F1000000000000000000000 +1B9B:000000000000000003E0000007C0004003E00080008000000000000000000000 +1B9C:000000000000000001C20244024404880488091009F000000000000000000000 +1B9D:00000000000000000180020002000470041008200FE000000000000000000000 +1B9E:00000000000000000F780108010807BC02100420042000000000000000000000 +1B9F:000000000000000007F00110011007E002200440044000000000000000000000 +1BA0:0000000000000000003C00240E24024802480490079000000000000000000000 +1BA1:00000000000000000000000000000000000700050008000800100010041007E0 +1BA2:000000000000000000000000000000000000000000000000000004100A0801F0 +1BA3:0000000000000000000000000000000000000000000000000C00140016000000 +1BA4:0700010006000000000000000000000000000000000000000000000000000000 +1BA5:00000000000000000000000000000000000000000000000001C0004000800000 +1BA6:000000000000000000000000E000200070008000E00000000000000000000000 +1BA7:0000000000000000000000000000000700010002001C00070000000000000000 +1BA8:11000A0004000000000000000000000000000000000000000000000000000000 +1BA9:29001A0004000000000000000000000000000000000000000000000000000000 +1BAA:00000000000000000000001F0001000200040007000100020004000400040003 +1BAB:0000000000000000000000000000000000000000000000000100038001000000 +1BAC:0000000000000000000000000000000000000000000000001A0022001C000000 +1BAD:0000000000000000000000000000000000000000000000001B0009000D800000 +1BAE:00000000000000000FDF0251025104920492091409F400000000000000000000 +1BAF:00000000000000000FC8024802490FC904D50955097200000000000000000000 +1BB0:000000000000000003C00420081008100810042003C000000000000000000000 +1BB1:000000000000000007E00910010002700210042007E000000000000000000000 +1BB2:000000000000000007000900010002000390042007E000000000000000000000 +1BB3:000000000000000007000900010002300240042007E000000000000000000000 +1BB4:000000000000000001C00240005003E004800100010000000000000000000000 +1BB5:000000000000000006C00AA002800440044008200FE000000000000000000000 +1BB6:000000000000000000C00120010002300240042007E000000000000000000000 +1BB7:0000000000000000038C0490049009200920124033C000000000000000000000 +1BB8:00000000000000001C1824240420084018402C80138000000000000000000000 +1BB9:000000000000000003C00520010002300240042007E000000000000000000000 +1BBA:0000000000000000000007E00020002007C00040008000800100010002000200 +1BBB:000000000000000007700110011002200220044007C0000007C0000000000000 +1BBC:00000000000000000C0E100210022304228444887C49001100720092006C0000 +1BBD:00000000000000000F3E112219260240024002400FF800000000000000000000 +1BBE:00000000000000001F7C010419640A28124804101FFC00000000000000000000 +1BBF:00000000000000000FE000200F2000400E4000800C8000000000000000000000 +1BC0:000000000000000000000000000001C04220242018E000000000000000000000 +1BC1:000000000000000000000000000001C04220240018E000000000000000000000 +1BC2:0000000000000000000000003B80444008401080210000000000000000000000 +1BC3:000000000000000000000E0031804040000000000CC000000000000000000000 +1BC4:000000000000000000000E003180404008801100220000000000000000000000 +1BC5:000000000000000000000E003180404044404A40318000000000000000000000 +1BC6:000000000000000000001F8020404020402020401F8000000000000000000000 +1BC7:000000000000000000000000000000007FC00000000000000000000000000000 +1BC8:0000000000000000000000000000038044403800000000000000000000000000 +1BC9:00000000000000007E00000007C008201010082007C000000000000000000000 +1BCA:00000000000000007E0000001CE0030004800840078000000000000000000000 +1BCB:0000000000000000000000000E0031804040404071C000000000000000000000 +1BCC:0000000000000000000000000E0031804040000071C000000000000000000000 +1BCD:0000000000000000000000001F00100010000F00008000800000000000000000 +1BCE:0000000000000000000000000E00318040400080010000000000000000000000 +1BCF:0000000000000000000000000E0031804040000001C000000000000000000000 +1BD0:00000000000000000000000001800600180060E00C0003000000000000000000 +1BD1:00000000000000000000000001800600180060000C0003000000000000000000 +1BD2:000000000000000000000E00318040401F002080404000800000000000000000 +1BD3:0000000000000000000000007C0000007FC0000001C000000000000000000000 +1BD4:0000000000000000000000007CE01100120013000CC000000000000000000000 +1BD5:00000000000000000000380044C003000C003000060001800000000000000000 +1BD6:000000000000000000003FC0108009000600090030C000000000000000000000 +1BD7:000000000000000000000000000071802240244019C000000000000000000000 +1BD8:0000000000000000000000003BC0442008000C00030000000000000000000000 +1BD9:0000000000000000000000000E003180404000000E0000000000000000000000 +1BDA:0000000000000000000000000E00318048400400020000000000000000000000 +1BDB:0000000000000000000000000000718022402440180000000000000000000000 +1BDC:000000000000000000000000380044C0112012200C0000000000000000000000 +1BDD:0000000000000000000001800600180060001800060001800000000000000000 +1BDE:000000000000000000000000070018C020201000080000000000000000000000 +1BDF:0000000000000000000000000E00318040400000700000000000000000000000 +1BE0:000000000000000000000780184020004C006300180000000000000000000000 +1BE1:00000000000000000000000030004A004D2048C0300000000000000000000000 +1BE2:00000000000000000000000030000C00030000C0060018000000000000000000 +1BE3:000000000000000000001F8020404620462020401F8000000000000000000000 +1BE4:000000000000000000000E00318040400E00110000000E000000000000000000 +1BE5:000000000000000000000E00000011000E00404031800E000000000000000000 +1BE6:0700000007000000000000000000000000000000000000000000000000000000 +1BE7:0000000000000000000000000008000400020004000800000000000000000000 +1BE8:0040002000100020004000000000000000000000000000000000000000000000 +1BE9:0000000070000000000000000000000000000000000000000000000000000000 +1BEA:000000000000000000000000000C001200120012000C00000000000000000000 +1BEB:00000000000000000000000000000000000C0000000C00000000000000000000 +1BEC:0000000000000000000000000011000A0004000A001100000000000000000000 +1BED:0040002007100020004000000000000000000000000000000000000000000000 +1BEE:0000000000000000000000000000000000000000002000100008001000200000 +1BEF:0000000002000400080000000000000000000000000000000000000000000000 +1BF0:0000000000070000000000000000000000000000000000000000000000000000 +1BF1:0007000000070000000000000000000000000000000000000000000000000000 +1BF2:0000000000000000000000000000000000080004000200000000000000000000 +1BF3:00000000000000000000000000000000000E0000000000000000000000000000 +1BF4:00007FFE7B8E73B67B8E7BB6718E7FFE7FFE61B66FB663866FF66FF67FFE0000 +1BF5:00007FFE7B8E73B67B8E7BB6718E7FFE7FFE61866FBE63866FF66F867FFE0000 +1BF6:00007FFE7B8E73B67B8E7BB6718E7FFE7FFE61CE6FBE638E6FB66FCE7FFE0000 +1BF7:00007FFE7B8E73B67B8E7BB6718E7FFE7FFE61866FF663EE6FDE6FDE7FFE0000 +1BF8:00007FFE7B8E73B67B8E7BB6718E7FFE7FFE61CE6FB663CE6FB66FCE7FFE0000 +1BF9:00007FFE7B8E73B67B8E7BB6718E7FFE7FFE61CE6FB663C66FF66FCE7FFE0000 +1BFA:00007FFE7B8E73B67B8E7BB6718E7FFE7FFE61866FB663866FB66FB67FFE0000 +1BFB:00007FFE7B8E73B67B8E7BB6718E7FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +1BFC:0000101020082388145008201450228821082288145008201450238820081010 +1BFD:00000000000001000280028004401AB021081AB0044002800280010000000000 +1BFE:0000000000000000111022202220222011100888088808881110000000000000 +1BFF:00000000000000000E0001000080008000800080008001000E00000000000000 +1C00:00000000000000000000000003E0040004000FE00400040007C0000000000000 +1C01:0000000000000000000000000FC0040005800640084000800100000000000000 +1C02:00000000000000000000000002600480088008400820042003C0000000000000 +1C03:000000000000000000000000040008401240122011200B400480000000000000 +1C04:0000000000000000000000000400084012403FF011200B400480000000000000 +1C05:000000000000000000000000080007C000800080010001000100000000000000 +1C06:0000000000000000000000000180024002401C20024002400180000000000000 +1C07:0000000000000000000000000060008007800980024004200FE0000000000000 +1C08:0000000000000000000000000360048009400940088004000200000000000000 +1C09:000000000000000000000000082007C00200052008C004000200000000000000 +1C0A:0000000000000000000000000200010004800A40098004000200000000000000 +1C0B:0000000000000000000000000800080005C0022005C008000800000000000000 +1C0C:000000000000000000000000010012400F8002000F8012400100000000000000 +1C0D:00000000000000000000000001800240044008200920092008C0000000000000 +1C0E:0000000000000000000000000FC000800080004000400C401380000000000000 +1C0F:000000000000000000000000062009C0080004000FE000000000000000000000 +1C10:0000000000000000000000001FE008401040102008200E2011C0000000000000 +1C11:0000000000000000000000000FC0100010001FC010800C401380000000000000 +1C12:00000000000000000000000004200A5012501130111008A004C0000000000000 +1C13:0000000000000000000000000300048008400820082004400380000000000000 +1C14:000000000000000000000000024005A008900810081004200240000000000000 +1C15:0000000000000000000000001FC0018002000F80124002400180000000000000 +1C16:0000000000000000000000000FE00100008007E0088009000600000000000000 +1C17:0000000000000000000000000FF00420084008400820042003C0000000000000 +1C18:0000000000000000000000000400088011401540148013600C00000000000000 +1C19:0000000000000000000000000240048004E007801C8002400120000000000000 +1C1A:0000000000000000000000000300040008800700084008800700000000000000 +1C1B:00000000000000000000000010400F8008000400040008001000000000000000 +1C1C:00000000000000000000000004400A2012101110111008A004C0000000000000 +1C1D:0000000000000000000000000030084004400FE0044004400380000000000000 +1C1E:0000000000000000000000001040088005000200050008801040000000000000 +1C1F:0000000000000000000000000300048008400FE0082004400380000000000000 +1C20:0000000000000000000000000400084011401540148013000C00000000000000 +1C21:00000000000000000000000004000800094009400A80042003C0000000000000 +1C22:0000000000000000000000000DD0122015501550122008000400000000000000 +1C23:00000000000000000000000007C009200140038004A0044003A0000000000000 +1C24:0000000000000000000000000000000000000002000A000A0004000000000000 +1C25:0000000000000000000000000010000800080008000800080010000000000000 +1C26:0000000000000000000000000001000200020002000200020001000000000000 +1C27:000000004000A000800040004000400040004000400040004000C00000000000 +1C28:0000000000000000000000002000400040004000400040002000000000000000 +1C29:00000000000000003FC040004000400040004000400040002000000000000000 +1C2A:000000000000000000000000000200010001000100010001000100010012000C +1C2B:000000000000000000000006000100020001000100010001000100010012000C +1C2C:0000000000000000000000000000000000000000000000000000020004000F00 +1C2D:0000010002000300000000000000000000000000000000000000000000000000 +1C2E:0000000002800000000000000000000000000000000000000000000000000000 +1C2F:0000010004400000000000000000000000000000000000000000000000000000 +1C30:000003C0042000C0000000000000000000000000000000000000000000000000 +1C31:0000010002800100000000000000000000000000000000000000000000000000 +1C32:0000032004C00000000000000000000000000000000000000000000000000000 +1C33:0000000007C00000000000000000000000000000000000000000000000000000 +1C34:00000000000000000000000080004000A000A000A00040008000000000000000 +1C35:0000000000000000000000000000000040008000800040000000000000000000 +1C36:0FE0100000000000000000000000000000000000000000000000000000000000 +1C37:0000000000000000000000000000000000000000000000000000000000400000 +1C38:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE63CE7DB671CE7DB663CE7FFE0000 +1C39:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE63CE7DB671C67DF663CE7FFE0000 +1C3A:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE63867DB671867DB663B67FFE0000 +1C3B:0000000000000000000000000000008000800080008000800080000000000000 +1C3C:0000000000000000000000000000024002400240024002400240000000000000 +1C3D:0000000000000000000000000000000002200140008001400220000000000000 +1C3E:0000000000000000000000000000000002200140049001400220000000000000 +1C3F:0000000000000000000000001088091004A0042004A009101088000000000000 +1C40:0000000000000000000000000000038004400440044003800000000000000000 +1C41:0000000000000000000000000100028002C00140004000800100000000000000 +1C42:00000000000000000000000007C0082000C003000400030000C0000000000000 +1C43:0000000000000000000000000F80104007E00810002007C00020000000000000 +1C44:000000000000000000000000022005C004000800083007C00000000000000000 +1C45:00000000000000000000000008100420046004A0052006200810000000000000 +1C46:00000000000000000000000000200050008000400820061001E0000000000000 +1C47:0000000000000000000000000080044002400240014001800200000000000000 +1C48:0000000000000000000000000180024002000400040003800060000000000000 +1C49:0000000000000000000000000180024002800260020002000100000000000000 +1C4A:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE6D866DB661867DB67DB67FFE0000 +1C4B:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE6D8E6DB6618E7DB67D8E7FFE0000 +1C4C:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE6DC66DBE61BE7DBE7DC67FFE0000 +1C4D:0000000000000000000000001F80008003E00080008000800100000000000000 +1C4E:0000000000000000000000001F80008003E0008003E000800100000000000000 +1C4F:0000000000000000000000000D2013E00120012001200F201040000000000000 +1C50:00000038444444444444444444380000 +1C51:00000062524A464040404020100E0000 +1C52:00000018242414081020424224180000 +1C53:000000324A4A3E1020204040300C0000 +1C54:0000001E2040404060524E4224180000 +1C55:00000010204648505048464224180000 +1C56:0000005C22524C4040404020100C0000 +1C57:0000000C523204081020424224180000 +1C58:000000344A5A64404040404224180000 +1C59:0000001C204040404C52524A24180000 +1C5A:0000001C22660A1222424242221C0000 +1C5B:0000003C4242424242424242423C0000 +1C5C:0000001C2240404E50504E4224180000 +1C5D:0000001C2244481026104844221C0000 +1C5E:00000048546242424242625448400000 +1C5F:000000245ADA1232525292A2A4480000 +1C60:00000040485462424242422214080000 +1C61:00000048444242424242426254480000 +1C62:0000001222424242424242462A120000 +1C63:00000064928A0A0A12E2824224180000 +1C64:0000003844060A0A1212222242420000 +1C65:000000424244444848505060221C0000 +1C66:000000444482828282828292AA440000 +1C67:00000010284442424242462A12020000 +1C68:0000007804024222120A0622528C0000 +1C69:00000040485462420202422214080000 +1C6A:0000003844444444444444BA827C0000 +1C6B:00000010284482925410704044380000 +1C6C:00000044AA9282828282828244440000 +1C6D:000000304884848C90A0A0A2924C0000 +1C6E:000000384404080810102020423C0000 +1C6F:0000003C62A4A42424242525463C0000 +1C70:00000058949292929292929252340000 +1C71:0000003CC644444848505060221C0000 +1C72:0000003844060A0A12122222C37E0000 +1C73:0000001824420E1212120E4224180000 +1C74:00000048546242424242424244480000 +1C75:00000034529292929292929294580000 +1C76:000000629288080A12E2824224180000 +1C77:000000182422124E82828292AA440000 +1C78:00000000181800000000000000000000 +1C79:00000000000000000000001818000000 +1C7A:00000000181800000000001818000000 +1C7B:00000000000060920C00000000000000 +1C7C:00000000000000380000000000000000 +1C7D:000000304844241C0404044428100000 +1C7E:00000000001010101010101000000000 +1C7F:00000000002424242424242400000000 +1C80:00000000001C2A4A4440444A2A1C0000 +1C81:0000000000001E1222222222227F4141 +1C82:00000000000038444444444444380000 +1C83:0000000000001C2240404040221C0000 +1C84:00000000324E02020202020202020000 +1C85:0000000000007F494949494949490000 +1C86:000000007010101010101C12121C0000 +1C87:0000202078202020203C2222223C0000 +1C88:000000444A2A28103844444444380000 +1C89:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE73CE6DB673C66DF673CE7FFE0000 +1C8A:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE73866DB673866DB673B67FFE0000 +1C8B:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE738E6DB6738E6DB6738E7FFE0000 +1C8C:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE73C66DBE73BE6DBE73C67FFE0000 +1C8D:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE738E6DB673B66DB6738E7FFE0000 +1C8E:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE73866DBE738E6DBE73867FFE0000 +1C8F:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE73866DBE738E6DBE73BE7FFE0000 +1C90:000000002020101008040242423C0000 +1C91:000000002038080834424242423C0000 +1C92:000000304848080834424242423C0000 +1C93:000000002C525252524C40201C620000 +1C94:000000003C42420202022242423C0000 +1C95:000000003C4242021C020242423C0000 +1C96:0000000020505054381C1212120C0000 +1C97:00000000344A4A4A4A4A4A4A4A320000 +1C98:000000003C4242424242424242240000 +1C99:000000000C0202021C020242423C0000 +1C9A:000000002A555555414142201E610000 +1C9B:000000003C424202023E4242423C0000 +1C9C:00000000023C4040407C4242423C0000 +1C9D:00000000285454545444444444240000 +1C9E:0000000020180402021C0242423C0000 +1C9F:00000000060A525222021222221C0000 +1CA0:00000000043840685454545444240000 +1CA1:00000000404040485048444444380000 +1CA2:000000001824243C66665A42423C0000 +1CA3:000000006C12120202020222221C0000 +1CA4:00000000344A4A4A4A340212221C0000 +1CA5:00000000040C04041C24040444380000 +1CA6:000000002C525252424440201C620000 +1CA7:00000000224242261A022242423C0000 +1CA8:0000000028545404041C242424180000 +1CA9:00000000384478405C62424242420000 +1CAA:000000004C4242425C424242423C0000 +1CAB:0000000004020202023E4242423C0000 +1CAC:0000000028545454407C442828100000 +1CAD:000000000818280819261D0444380000 +1CAE:00000000404040485078444444380000 +1CAF:00000000CCA2A2241418304A2AC40000 +1CB0:0000100C02120C02120C0242423C0000 +1CB1:00000000C8A6A1A9A6C1928C44380000 +1CB2:000000003C4242424224241824420000 +1CB3:000000003E0204081C020242423C0000 +1CB4:0000000008100C02021C0242423C0000 +1CB5:000000003844443E043E444444380000 +1CB6:00000000101010385454381010100000 +1CB7:000000003C42420408102042423C0000 +1CB8:000000004442424264584044423C0000 +1CB9:000000003C424242423C1012120C0000 +1CBA:000000003C42424040300C1C22400000 +1CBB:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE638E6DB6638E6DB6638E7FFE0000 +1CBC:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE63C66DBE63BE6DBE63C67FFE0000 +1CBD:000000003C42422010080442423C0000 +1CBE:000000004224182424424242423C0000 +1CBF:000000003C42424242424242423C0000 +1CC0:00000000028001000380044029281AB029280440038001000280000000000000 +1CC1:000000000000000001C00220055004900550022001C000000000000000000000 +1CC2:000000000000000001C0022005D0041005D0022001C000000000000000000000 +1CC3:000000000000000001C00220041004100410022001C000000000000000000000 +1CC4:00000000000000001BBB200823CB481055969420F2AC002001C8024801B00000 +1CC5:00000000000000001CF8040004F0080009E0100013C000000000000000000000 +1CC6:00000000000000000EFF100010FE2200253C44807C5800000000000000000000 +1CC7:0000000000000000667D0884C8051188914B2250BE3600000000000000000000 +1CC8:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE71CE6FB66FCE6FB671CE7FFE0000 +1CC9:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE71CE6FB66FC66FF671CE7FFE0000 +1CCA:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE71866FB66F866FB671B67FFE0000 +1CCB:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE718E6FB66F8E6FB6718E7FFE0000 +1CCC:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE71C66FBE6FBE6FBE71C67FFE0000 +1CCD:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE718E6FB66FB66FB6718E7FFE0000 +1CCE:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE71866FBE6F8E6FBE71867FFE0000 +1CCF:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +1CD0:0080014002200000000000000000000000000000000000000000000000000000 +1CD1:008001C002A00000000000000000000000000000000000000000000000000000 +1CD2:000003E000000000000000000000000000000000000000000000000000000000 +1CD3:0000012002400480000000000000000000000000000000000000000000000000 +1CD4:0000000000000000000000000000003800000000000000000000000000000000 +1CD5:0000000000000000000000000000000000000000000000000000089004900360 +1CD6:00000000000000000000000000000000000000000000000000000000040007E0 +1CD7:00000000000000000000000000000000000000000000000000000300040003E0 +1CD8:00000000000000000000000000000000000000000000000000000420022001C0 +1CD9:0000000000000000000000000000000000000000000000000000008001400220 +1CDA:0140014001400000000000000000000000000000000000000000000000000000 +1CDB:02A002A002A00000000000000000000000000000000000000000000000000000 +1CDC:0000000000000000000000000000000000000000000000000000008000800080 +1CDD:0000000000000000000000000000000000000000000000000000000000800000 +1CDE:0000000000000000000000000000000000000000000000000000000001200000 +1CDF:0000000000000000000000000000000000000000000000000000000004900000 +1CE0:007C008000600000000000000000000000000000000000000000000000000000 +1CE1:000C0012001100100010001000100010001000100010001000100010001000F0 +1CE2:0000000000000000000000000240000007E00000024000000000000000000000 +1CE3:0000000000000000002000100008000800700000000000000000000000000000 +1CE4:000000000000000004000800100010000E000000000000000000000000000000 +1CE5:000000000000000000000000000000000E001000100008000400000000000000 +1CE6:0000000000000000000000000000000000700008000800100020000000000000 +1CE7:0000000000180024002000100008000800700000000000000000000000000000 +1CE8:000000000000000000000000000000000E001000100008000400240018000000 +1CE9:00000000000000000C6012902C682008200820081010082007C0000000000000 +1CEA:00000000000004400AA00AA004400820101010101010082007C0000000000000 +1CEB:00000000000004600A900A7004100810101010101010082007C0000000000000 +1CEC:00000000000004000A200A500450083010181014102408480780000000000000 +1CED:0000000000000000000000000000000000000000000000000100008000400020 +1CEE:0000000000000780080008000800072004000400044003800000000000000000 +1CEF:000000000000078008400900040003C004000500048003000000000000000000 +1CF0:0000018002400200011001800240042004200420024001800000000000000000 +1CF1:0000000000000000020004000840080007E00010021000200040000000000000 +1CF2:00000000000000000810042003C00000000003C0042008100000000000000000 +1CF3:0000000000000000081004200240024002400240042008100000000000000000 +1CF4:0000108008800700000000000000000000000000000000000000000000000000 +1CF5:AAAA000180000001901008218440028181000281844008219010000180005555 +1CF6:AAAA000180000001800000018000111191100EE1800000018000000180005555 +1CF7:0003000400080008000800080008000800080008000800080010001000100000 +1CF8:0000030004800480030000000000000000000000000000000000000000000000 +1CF9:0000183024482448183000000000000000000000000000000000000000000000 +1CFA:00000000000000000C6012901C700FE000000C6012901C700FE0000000000000 +1CFB:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +1CFC:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +1CFD:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE618E6FB663B66FB66F8E7FFE0000 +1CFE:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE61866FBE638E6FBE6F867FFE0000 +1CFF:00007FFE7BC673BE7BBE7BBE71C67FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +1D00:000000000000102844447C4444440000 +1D01:0000000000001E28487E4848484E0000 +1D02:0000000000003E4909097E48493E0000 +1D03:000000000000784448FE484444780000 +1D04:0000000000003C4240404040423C0000 +1D05:00000000000078444444444444780000 +1D06:000000000000784444E4444444780000 +1D07:0000000000007C4040784040407C0000 +1D08:0000000000003C4202021C02423C0000 +1D09:0000000000007C101010101018001010 +1D0A:0000000000001F040404040444380000 +1D0B:00000000000022242830302824220000 +1D0C:000000000000202028302060203E0000 +1D0D:000000000000222236362A2A22220000 +1D0E:000000000000444C4C54546464440000 +1D0F:0000000000003C4242424242423C0000 +1D10:0000000000003C4202020202423C0000 +1D11:00000000000000003E414141413E0000 +1D12:00000000000000003E41414141220000 +1D13:00000000000000203E514949453E0200 +1D14:00000000000036490909794949360000 +1D15:00000000000044444438444444380000 +1D16:0000000000003C424242000000000000 +1D17:000000000000000000004242423C0000 +1D18:0000000000007C42427C404040400000 +1D19:0000000000003E42423E122242420000 +1D1A:000000000000424222123E42423E0000 +1D1B:0000000000007F080808080808080000 +1D1C:000000000000424242424242423C0000 +1D1D:00000000000000007F020101017E0000 +1D1E:00000000000000001F420101411E0000 +1D1F:000000000000007F01017E01017E0000 +1D20:00000000000041412222141408080000 +1D21:00000000000042425A5A666642420000 +1D22:0000000000007E0204081020407E0000 +1D23:0000000000007E04081C0202423C0000 +1D24:000000003C4242021C384040423C0000 +1D25:0000000000387CFEFE7C3810926C0000 +1D26:0000000000007E404040404040400000 +1D27:00000000000008081414222241410000 +1D28:0000000000007F222222222222220000 +1D29:0000000000007C42427C404040400000 +1D2A:000000000000494949493E0808080000 +1D2B:0000000000001E121212121222620000 +1D2C:000000102844447C4444000000000000 +1D2D:0000001E28487E48484E000000000000 +1D2E:00000078444478444478000000000000 +1D2F:000000784448FE484478000000000000 +1D30:00000078444444444478000000000000 +1D31:0000007C40407840407C000000000000 +1D32:0000007C04043C04047C000000000000 +1D33:0000003C40404E42463A000000000000 +1D34:0000004242427E424242000000000000 +1D35:0000007C10101010107C000000000000 +1D36:0000001F040404044438000000000000 +1D37:00000022242830282422000000000000 +1D38:0000002020202020203E000000000000 +1D39:0000002236362A222222000000000000 +1D3A:000000446464544C4C44000000000000 +1D3B:000000444C4C54646444000000000000 +1D3C:0000003C42424242423C000000000000 +1D3D:00000044443844444438000000000000 +1D3E:0000007C42427C404040000000000000 +1D3F:0000007C42427C484442000000000000 +1D40:0000007F080808080808000000000000 +1D41:0000004242424242423C000000000000 +1D42:000000444444546C6C44000000000000 +1D43:000000000038043C443C000000000000 +1D44:00000000007844784038000000000000 +1D45:00000000003A4642463A000000000000 +1D46:00000000007C12FC907C000000000000 +1D47:00000040404078444478000000000000 +1D48:0000000404043C44443C000000000000 +1D49:000000000038447C4038000000000000 +1D4A:000000000038047C4438000000000000 +1D4B:00000000003C4038403C000000000000 +1D4C:00000000007804380478000000000000 +1D4D:00000000003A44443C04380000000000 +1D4E:00000000007C10101018001000000000 +1D4F:00000040404850605048000000000000 +1D50:00000000007649494949000000000000 +1D51:00000000005C6242424A040000000000 +1D52:00000000003844444438000000000000 +1D53:00000000003844044438000000000000 +1D54:00000000003844440000000000000000 +1D55:00000000000000444438000000000000 +1D56:00000000007844444478404000000000 +1D57:00000010107C1010100C000000000000 +1D58:00000000004444444C34000000000000 +1D59:00000000007C08040478000000000000 +1D5A:00000000004949494937000000000000 +1D5B:00000000004444282810000000000000 +1D5C:000000387CFEFE7C38926C0000000000 +1D5D:0000003844447C42625C400000000000 +1D5E:00000000002252140810200000000000 +1D5F:00000038404038444438000000000000 +1D60:0000000000264949493E080800000000 +1D61:00000000006112141830488600000000 +1D62:00000000000000001000301010107C00 +1D63:00000000000000000000586440404000 +1D64:000000000000000000004444444C3400 +1D65:00000000000000000000444428281000 +1D66:00000000000000003844447C42625C40 +1D67:0000000000000000000022520C102020 +1D68:00000000000000000000384478403008 +1D69:00000000000000000000264949493E08 +1D6A:00000000000000000000611214183048 +1D6B:0000000000008E89898F8888996E0000 +1D6C:000000202870AC3222222222322C0000 +1D6D:000000050E14344C444444444C340000 +1D6E:0000000C1010107C1010143850100000 +1D6F:0000000000007C4A4A4A7BCE4A4A0000 +1D70:0000000000002C322222336E22220000 +1D71:0000000000002C3222336E22322C2020 +1D72:0000000000002C3220203966A0200000 +1D73:0000000000000E111110395610100000 +1D74:0000000000003C424033CC02423C0000 +1D75:0000000010107C1010325C10100C0000 +1D76:0000000000007E04086A9C10207E0000 +1D77:00000000003C42423C041C2222225C40 +1D78:00004242427E42424242000000000000 +1D79:0000000000007E04081010083C42423C +1D7A:000000000000004810501060105C7CE2114212421442184210422C4200000000 +1D7B:0000000000007C10107C1010107C0000 +1D7C:0000000000007010107C1010100C0000 +1D7D:0000000000002C3222227F22322C2020 +1D7E:0000000000002222227F2222221C0000 +1D7F:0000000000004224FF42424224180000 +1D80:0000004040405C6242424242635D0106 +1D81:0000000202023A4642424242463B0106 +1D82:0000000C1010107C1010101018180830 +1D83:0000000000003A44444444473D05857A +1D84:0000004040404448506050484642020C +1D85:000000180808080808080808083E020C +1D86:000000000000744A4A4A4A4A4B4B0106 +1D87:0000000000005C624242424243430106 +1D88:000000000000586444444444665A424C +1D89:0000000000002C322220202030301060 +1D8A:0000000000003C4240300C02433D0106 +1D8B:0000000C101010101010101E1212620C +1D8C:0000000000004242422424261A1A020C +1D8D:0000000000004444281010284646020C +1D8E:0000000000007E0204081020407E020C +1D8F:0000000000003844043C44444E320203 +1D90:000000000000344C444444444C360203 +1D91:000003040404344C44444444443C0403 +1D92:0000000000003C42427E4040423C0403 +1D93:0000000000003C42403C4040423C0403 +1D94:0000000000003C42023C0202427C4030 +1D95:00000000000070880808FE8A8A720203 +1D96:000000080800180808080808083C0403 +1D97:0000000000003C4202020202427C4030 +1D98:0000000C101010101010101010604030 +1D99:0000000000004444444444444C360203 +1D9A:0000000000007E0408101C02023C2018 +1D9B:00000000005C6242625C000000000000 +1D9C:00000000003840404038000000000000 +1D9D:00000000003840586438400000000000 +1D9E:0000641828043C444438000000000000 +1D9F:00000000007804380478000000000000 +1DA0:0000000C10107C101010000000000000 +1DA1:000000080808083E0848300000000000 +1DA2:00000000003A4642463A023C00000000 +1DA3:0000004444444C340404000000000000 +1DA4:0000001000301038107C000000000000 +1DA5:0000000000301010100C000000000000 +1DA6:0000007C10101010107C000000000000 +1DA7:0000007C10107C10107C000000000000 +1DA8:000000080018080808384C3200000000 +1DA9:00000070101010101010100C00000000 +1DAA:00000070101010101818083000000000 +1DAB:0000002020202020203E000000000000 +1DAC:00000000007649494949010600000000 +1DAD:00000000004949494937010100000000 +1DAE:00000000002C32222222204000000000 +1DAF:00000000005864444444040200000000 +1DB0:0000002232322A262622000000000000 +1DB1:000000000038447C4438000000000000 +1DB2:00000000103854545438100000000000 +1DB3:00000000003840380478403000000000 +1DB4:0000000C101010101010600000000000 +1DB5:00000010107C1010100E020C00000000 +1DB6:000000000022227F261A000000000000 +1DB7:00000042244242422418000000000000 +1DB8:0000002222222222221C000000000000 +1DB9:0000000000CC44444830000000000000 +1DBA:00000010282828444444000000000000 +1DBB:00000000007C0810207C000000000000 +1DBC:0000007C04081020447C040300000000 +1DBD:0000007E02041826497E080800000000 +1DBE:00000000007E0408103C027C00000000 +1DBF:0000001824427E422418000000000000 +1DC0:24100824000000000000000000000000 +1DC1:24081024000000000000000000000000 +1DC2:00000000000000000000000070381C0E +1DC3:00022418000000000000000000000000 +1DC4:00020478000000000000000000000000 +1DC5:0040201E000000000000000000000000 +1DC6:00780402000000000000000000000000 +1DC7:003C4080000000000000000000000000 +1DC8:00885422000000000000000000000000 +1DC9:00225488000000000000000000000000 +1DCA:0000000000000000000000002C302020 +1DCB:008E7000000000000000000000000000 +1DCC:00E21C00000000000000000000000000 +1DCD:0000018006600810000000000000000000000000000000000000000000000000 +1DCE:00300808100000000000000000000000 +1DCF:00000000000000000000001020380810 +1DD0:0000000000000000000000000000113F +1DD1:0064924C000000000000000000000000 +1DD2:00182414040810000000000000000000 +1DD3:00926C00000000000000000000000000 +1DD4:EC127C906E0000000000000000000000 +1DD5:EC1272926C0000000000000000000000 +1DD6:E1117A9A640000000000000000000000 +1DD7:1C2020201C0810000000000000000000 +1DD8:30081C24180000000000000000000000 +1DD9:2810281C241800000000000000000000 +1DDA:1C241C04380000000000000000000000 +1DDB:1C202C24180000000000000000000000 +1DDC:20242834240000000000000000000000 +1DDD:180808081C0000000000000000000000 +1DDE:202020203C0000000000000000000000 +1DDF:446C5444440000000000000000000000 +1DE0:58644444000000000000000000000000 +1DE1:4464544C440000000000000000000000 +1DE2:38243828240000000000000000000000 +1DE3:18240408040200000000000000000000 +1DE4:1C201804380000000000000000000000 +1DE5:18242060202000000000000000000000 +1DE6:3C0418203C0000000000000000000000 +1DE7:001C24241C0000000000000000000000 +1DE8:101C121C000000000000000000000000 +1DE9:18242824380000000000000000000000 +1DEA:38043C24180000000000000000000000 +1DEB:0C103810100000000000000000000000 +1DEC:10381038100000000000000000000000 +1DED:00182424588000000000000000000000 +1DEE:38243820000000000000000000000000 +1DEF:0C101010600000000000000000000000 +1DF0:0024245C800000000000000000000000 +1DF1:00925428000000000000000000000000 +1DF2:14001C241C0000000000000000000000 +1DF3:28001824180000000000000000000000 +1DF4:28002828380000000000000000000000 +1DF5:0010107C000000000000000000000000 +1DF6:0012120C000000000000000000000000 +1DF7:00484830000000000000000000000000 +1DF8:00303000000000000000000000000000 +1DF9:0000000000000000000000000000827C +1DFA:00007FFE7B8E73B67BB67BB6718E7FFE7FFE61866FB663866FB66FB67FFE0000 +1DFB:49499292000000000000000000000000 +1DFC:000000000000000000000000000000000000000000000000000007E018182004 +1DFD:0000000000000000000000324C00324C +1DFE:08102010080000000000000000000000 +1DFF:000000000000000000000000004A2440 +1E00:0000000018242442427E424242182418 +1E01:0000000000003C42023E42463A182418 +1E02:001000007C4242427C424242427C0000 +1E03:0000004840405C6242424242625C0000 +1E04:000000007C4242427C424242427C0010 +1E05:0000004040405C6242424242625C0008 +1E06:000000007C4242427C424242427C003C +1E07:0000004040405C6242424242625C003C +1E08:081020003C42424040404042423C0830 +1E09:0000081020003C4240404040423C0830 +1E0A:00100000784442424242424244780000 +1E0B:0000001202023A4642424242463A0000 +1E0C:00000000784442424242424244780010 +1E0D:0000000202023A4642424242463A0010 +1E0E:0000000078444242424242424478003C +1E0F:0000000202023A4642424242463A003C +1E10:00000000784442424242424244781020 +1E11:0000000202023A4642424242463A0810 +1E12:00000000784442424242424244783048 +1E13:0000000202023A4642424242463A1824 +1E14:10083C007E4040407C404040407E0000 +1E15:201008003C003C42427E4040423C0000 +1E16:08103C007E4040407C404040407E0000 +1E17:081020003C003C42427E4040423C0000 +1E18:000000007E4040407C404040407E1824 +1E19:0000000000003C42427E4040423C1824 +1E1A:000000007E4040407C404040407E324C +1E1B:0000000000003C42427E4040423C324C +1E1C:00221C007E4040407C404040407E0418 +1E1D:0000221C00003C42427E4040423C0830 +1E1E:001000007E4040407C40404040400000 +1E1F:0800000C1010107C1010101010100000 +1E20:00003C003C424240404E4242463A0000 +1E21:0000000078023A44444438203C42423C +1E22:00001000444444447C44444444440000 +1E23:0000004840405C624242424242420000 +1E24:00000000444444447C44444444440010 +1E25:0000004040405C624242424242420008 +1E26:00240000424242427E42424242420000 +1E27:2400004040405C624242424242420000 +1E28:00000000424242427E42424262621060 +1E29:0000004040405C624242424262621060 +1E2A:0000000082828282FE82828282822838 +1E2B:0000004040404E51614141414141141C +1E2C:000000003E08080808080808083E324C +1E2D:000000080800180808080808083E324C +1E2E:04082A003E08080808080808083E0000 +1E2F:000204082200180808080808083E0000 +1E30:00040810424448506060504844420000 +1E31:00020448404044485060504844420000 +1E32:00000000424448506060504844420010 +1E33:00000040404044485060504844420010 +1E34:0000000042444850606050484442003C +1E35:0000004040404448506050484442003C +1E36:000000004040404040404040407E0010 +1E37:000000180808080808080808083E0008 +1E38:00003C004040404040404040407E0010 +1E39:003C00180808080808080808083E0008 +1E3A:000000004040404040404040407E003C +1E3B:000000180808080808080808083E001C +1E3C:000000004040404040404040407E1824 +1E3D:000000180808080808080808083E1824 +1E3E:00040810424266665A5A424242420000 +1E3F:00000408100076494949494949490000 +1E40:00001000424266665A5A424242420000 +1E41:00000008000076494949494949490000 +1E42:00000000424266665A5A424242420008 +1E43:00000000000076494949494949490008 +1E44:0000080042626252524A4A4646420000 +1E45:0000000800005C624242424242420000 +1E46:0000000042626252524A4A4646420008 +1E47:0000000000005C624242424242420008 +1E48:0000000042626252524A4A464642003C +1E49:0000000000005C62424242424242003C +1E4A:0000000042626252524A4A4646421824 +1E4B:0000000000005C624242424242421824 +1E4C:0408324C3C42424242424242423C0000 +1E4D:020408324C003C4242424242423C0000 +1E4E:2400324C3C42424242424242423C0000 +1E4F:002400324C003C4242424242423C0000 +1E50:10083C003C42424242424242423C0000 +1E51:201008003C003C4242424242423C0000 +1E52:08103C003C42424242424242423C0000 +1E53:081020003C003C4242424242423C0000 +1E54:000408107C4242427C40404040400000 +1E55:0000040810005C6242424242625C4040 +1E56:001000007C4242427C40404040400000 +1E57:0000000800005C6242424242625C4040 +1E58:001000007C4242427C48444442420000 +1E59:0000001000005C624240404040400000 +1E5A:000000007C4242427C48444442420008 +1E5B:0000000000005C624240404040400800 +1E5C:00003C007C4242427C48444442420008 +1E5D:000000003C005C624240404040400800 +1E5E:000000007C4242427C4844444242003C +1E5F:0000000000005C62424040404040003C +1E60:001000003C424240300C0242423C0000 +1E61:0000001000003C4240300C02423C0000 +1E62:000000003C424240300C0242423C0008 +1E63:0000000000003C4240300C02423C0008 +1E64:240810003C424240300C0242423C0000 +1E65:0020081020003C4240300C02423C0000 +1E66:082214083C424240300C0242423C0000 +1E67:0008002214083C4240300C02423C0000 +1E68:000800003C424240300C0242423C0008 +1E69:0000000800003C4240300C02423C0008 +1E6A:000800007F0808080808080808080000 +1E6B:001000001010107C10101010100C0000 +1E6C:000000007F0808080808080808080008 +1E6D:000000001010107C10101010100C0010 +1E6E:000000007F080808080808080808003E +1E6F:000000001010107C10101010100C003C +1E70:000000007F0808080808080800081422 +1E71:000000001010107C10101010120C1422 +1E72:000000004242424242424242423C0024 +1E73:000000000000424242424242463A0028 +1E74:000000004242424242424242423C324C +1E75:000000000000424242424242463A324C +1E76:000000004242424242424242423C1422 +1E77:000000000000424242424242463A1422 +1E78:0408324C0042424242424242423C0000 +1E79:020408324C00424242424242463A0000 +1E7A:24003C004242424242424242423C0000 +1E7B:000024003C00424242424242463A0000 +1E7C:0000324C004141222222141408080000 +1E7D:0000324C000042424224242418180000 +1E7E:00000000414141222222141408080008 +1E7F:00000000000044444428282810100010 +1E80:00201008424242425A5A666642420000 +1E81:00001008040041494949494949360000 +1E82:00040810424242425A5A666642420000 +1E83:00000408100041494949494949360000 +1E84:00240000424242425A5A666642420000 +1E85:00000022000041494949494949360000 +1E86:001000004444444454546C6C44440000 +1E87:00000008000041494949494949360000 +1E88:000000004444444454546C6C44440010 +1E89:00000000000041494949494949360008 +1E8A:00100000444428281010282844440000 +1E8B:00000010000044442810102844440000 +1E8C:00240000424224241818242442420000 +1E8D:00000024000042422418182442420000 +1E8E:00080000414122221408080808080000 +1E8F:0000000800004242424242261A02023C +1E90:182400007E02020408102040407E0000 +1E91:0000182400007E0204081020407E0000 +1E92:000000007E02020408102040407E0008 +1E93:0000000000007E0204081020407E0008 +1E94:000000007E02020408102040407E003C +1E95:0000000000007E0204081020407E003C +1E96:0000004040405C62424242424242003C +1E97:000044001010107C10101010100C0000 +1E98:00081408000041494949494949360000 +1E99:0008140800004242424242261A02023C +1E9A:0002010102003C42023E4242463A0000 +1E9B:0010000C101010301010101010100000 +1E9C:0000000C101010341830501010100000 +1E9D:0000000C107C10301010101010100000 +1E9E:0000003E424444484C424242524C0000 +1E9F:000000001C20202018244242423C0000 +1EA0:0000000010282844447C444444440010 +1EA1:0000000000003C42023E4242463A0010 +1EA2:4020204018242442427E424242420000 +1EA3:0008040408003C42023E4242463A0000 +1EA4:0214284410282844447C444444440000 +1EA5:0002142844003C42023E4242463A0000 +1EA6:4028142208141422223E222222220000 +1EA7:0040281422003C42023E4242463A0000 +1EA8:0402142854282844447C444444440000 +1EA9:02010A1422003C42023E4242463A0000 +1EAA:192608142208141422223E2222220000 +1EAB:1926081422003C42023E4242463A0000 +1EAC:0008142208141422223E222222220008 +1EAD:0000182400003C42023E4242463A0008 +1EAE:0810443810282844447C444444440000 +1EAF:0408104438003C42023E4242463A0000 +1EB0:2010443810282844447C444444440000 +1EB1:201008221C003C42023E4242463A0000 +1EB2:1008B27C10282844447C444444440000 +1EB3:0808104438003C42023E4242463A0000 +1EB4:324C827C10282844447C444444440000 +1EB5:324C00423C003C42023E4242463A0000 +1EB6:0000443810282844447C444444440010 +1EB7:0000002418003C42023E4242463A0010 +1EB8:000000007E4040407C404040407E0010 +1EB9:0000000000003C42427E4040423C0010 +1EBA:100808107E4040407C404040407E0000 +1EBB:1008081000003C42427E4040423C0000 +1EBC:00324C007E4040407C404040407E0000 +1EBD:000000324C003C42427E4040423C0000 +1EBE:021428447E4040407C404040407E0000 +1EBF:0002142844003C42427E4040423C0000 +1EC0:402814227E4040407C404040407E0000 +1EC1:0040281422003C42427E4040423C0000 +1EC2:04122A447E4040407C404040407E0000 +1EC3:0402122C44003C42427E4040423C0000 +1EC4:324C1028447E40407C404040407E0000 +1EC5:324C102844003C42427E4040423C0000 +1EC6:001824007E4040407C404040407E0008 +1EC7:0000182400003C42427E4040423C0008 +1EC8:080404083E08080808080808083E0000 +1EC9:001008081000180808080808083E0000 +1ECA:000000003E08080808080808083E0008 +1ECB:000000080800180808080808083E0008 +1ECC:000000003C42424242424242423C0008 +1ECD:0000000000003C4242424242423C0008 +1ECE:100808103C42424242424242423C0000 +1ECF:0010080810003C4242424242423C0000 +1ED0:021428443C42424242424242423C0000 +1ED1:0002142844003C4242424242423C0000 +1ED2:402814223C42424242424242423C0000 +1ED3:0040281422003C4242424242423C0000 +1ED4:04122A443C42424242424242423C0000 +1ED5:0402122C44003C4242424242423C0000 +1ED6:324C1028443C424242424242423C0000 +1ED7:324C102844003C4242424242423C0000 +1ED8:001824003C42424242424242423C0008 +1ED9:0000182400003C4242424242423C0008 +1EDA:08102201394644444444444444380000 +1EDB:00000810220139464444444444380000 +1EDC:20100A01394644444444444444380000 +1EDD:000020100A0139464444444444380000 +1EDE:10080A11394644444444444444380000 +1EDF:00100808120139464444444444380000 +1EE0:00324C02394546444444444444380000 +1EE1:00324C00020139464444444444380000 +1EE2:00000201394644444444444444380010 +1EE3:00000000020139464444444444380010 +1EE4:000000004242424242424242423C0008 +1EE5:000000000000424242424242463A0008 +1EE6:100808104242424242424242423C0000 +1EE7:001008081000424242424242463A0000 +1EE8:04081201454644444444444444380000 +1EE9:0000040812014546444444444C340000 +1EEA:40201201454644444444444444380000 +1EEB:0000402012014546444444444C340000 +1EEC:10080A11454644444444444444380000 +1EED:0010080812014546444444444C340000 +1EEE:324C0201454644444444444444380000 +1EEF:00324C0002014546444444444C340000 +1EF0:00000201454644444444444444380010 +1EF1:0000000002014546444444444C340010 +1EF2:20100800414122221408080808080000 +1EF3:0020100800004242424242261A02023C +1EF4:00000000414122221408080808080008 +1EF5:0000000000004242424242261A023C08 +1EF6:08040408414122221408080808080000 +1EF7:0010080810004242424242261A02023C +1EF8:00324C00414122221408080808080000 +1EF9:0000324C00004242424242261A02023C +1EFA:000000F0505050505050505050FE0000 +1EFB:0000006C2424247E2424242424FF0000 +1EFC:000000000408101020244242423C0000 +1EFD:00000000000008102020484444380000 +1EFE:00000000424222141408080808384830 +1EFF:00000000000042422214140808384830 +1F00:000030102000324A444444444A320000 +1F01:000030201000324A444444444A320000 +1F02:000068284400324A444444444A320000 +1F03:000068482400324A444444444A320000 +1F04:000064284800324A444444444A320000 +1F05:000064482800324A444444444A320000 +1F06:64980030102000324A4444444A320000 +1F07:64980030201000324A4444444A320000 +1F08:C040800018242442427E424242420000 +1F09:C080400018242442427E424242420000 +1F0A:D050880018242442427E424242420000 +1F0B:D090480018242442427E424242420000 +1F0C:C850900018242442427E424242420000 +1F0D:C890500018242442427E424242420000 +1F0E:6498602040182424427E424242420000 +1F0F:6498604020182424427E424242420000 +1F10:0000180810003C42403C4040423C0000 +1F11:0000181008003C42403C4040423C0000 +1F12:0000341422003C42403C4040423C0000 +1F13:0000342412003C42403C4040423C0000 +1F14:0000321424003C42403C4040423C0000 +1F15:0000322414003C42403C4040423C0000 +1F16:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE7BCE73BE7B8E7BB671CE7FFE0000 +1F17:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE7B8673F67BEE7BDE71DE7FFE0000 +1F18:C04080007E4040407C404040407E0000 +1F19:C08040007E4040407C404040407E0000 +1F1A:D05088007E4040407C404040407E0000 +1F1B:D09048007E4040407C404040407E0000 +1F1C:C85090007E4040407C404040407E0000 +1F1D:C89050007E4040407C404040407E0000 +1F1E:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE7B8673BE7B8E7BBE71867FFE0000 +1F1F:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE7B8673BE7B8E7BBE71BE7FFE0000 +1F20:0000180810005C624242424242420202 +1F21:0000181008005C624242424242420202 +1F22:0000341422005C624242424242420202 +1F23:0000342412005C624242424242420202 +1F24:0000321424005C624242424242420202 +1F25:0000322414005C624242424242420202 +1F26:324C00180810005C6242424242420202 +1F27:324C00181008005C6242424242420202 +1F28:C0408000424242427E42424242420000 +1F29:C0804000424242427E42424242420000 +1F2A:D0508800424242427E42424242420000 +1F2B:D0904800424242427E42424242420000 +1F2C:C8509000424242427E42424242420000 +1F2D:C8905000424242427E42424242420000 +1F2E:64986020404242427E42424242420000 +1F2F:64986040204242427E42424242420000 +1F30:000018081000301010101010100C0000 +1F31:000018100800301010101010100C0000 +1F32:000068284400301010101010100C0000 +1F33:000068482400301010101010100C0000 +1F34:000064284800301010101010100C0000 +1F35:000064482800301010101010100C0000 +1F36:324C00180810003010101010100C0000 +1F37:324C00181008003010101010100C0000 +1F38:C04080003E08080808080808083E0000 +1F39:C08060003E08080808080808083E0000 +1F3A:D05088003E08080808080808083E0000 +1F3B:D09048003E08080808080808083E0000 +1F3C:C85090003E08080808080808083E0000 +1F3D:C89050003E08080808080808083E0000 +1F3E:64986020403E080808080808083E0000 +1F3F:64986040203E080808080808083E0000 +1F40:0000180810003C4242424242423C0000 +1F41:0000181008003C4242424242423C0000 +1F42:0000341422003C4242424242423C0000 +1F43:0000342412003C4242424242423C0000 +1F44:0000321424003C4242424242423C0000 +1F45:0000322414003C4242424242423C0000 +1F46:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE6DCE6DBE618E7DB67DCE7FFE0000 +1F47:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE6D866DF661EE7DDE7DDE7FFE0000 +1F48:C04080003C42424242424242423C0000 +1F49:C08040003C42424242424242423C0000 +1F4A:D05088003C42424242424242423C0000 +1F4B:D09048003C42424242424242423C0000 +1F4C:C85090003C42424242424242423C0000 +1F4D:C89050003C42424242424242423C0000 +1F4E:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE6D866DBE618E7DBE7D867FFE0000 +1F4F:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE6D866DBE618E7DBE7DBE7FFE0000 +1F50:000018081000424242424242423C0000 +1F51:000018100800424242424242423C0000 +1F52:000034142200424242424242423C0000 +1F53:000034241200424242424242423C0000 +1F54:000032142400424242424242423C0000 +1F55:000032241400424242424242423C0000 +1F56:324C00180810424242424242423C0000 +1F57:324C00181008424242424242423C0000 +1F58:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE61CE6FB661CE7DB661CE7FFE0000 +1F59:C0804000414122221408080808080000 +1F5A:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE61866FB661867DB661B67FFE0000 +1F5B:D0904800414122221408080808080000 +1F5C:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE61C66FBE61BE7DBE61C67FFE0000 +1F5D:C8905000414122221408080808080000 +1F5E:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE61866FBE618E7DBE61867FFE0000 +1F5F:64986040204122221408080808080000 +1F60:00000C04080022414149494949360000 +1F61:00000C08040022414149494949360000 +1F62:00003414220022414149494949360000 +1F63:00003424120022414149494949360000 +1F64:00003214240022414149494949360000 +1F65:00003224140022414149494949360000 +1F66:324C0018081000224149494949360000 +1F67:324C0018100800224149494949360000 +1F68:C04080003E4141414141221414770000 +1F69:C08040003E4141414141221414770000 +1F6A:D05088003E4141414141221414770000 +1F6B:D09048003E4141414141221414770000 +1F6C:C85090003E4141414141221414770000 +1F6D:C89050003E4141414141221414770000 +1F6E:324C1808101C22414141221414770000 +1F6F:324C1810081C23414141221414770000 +1F70:000020201000324A444444444A320000 +1F71:000010202000324A444444444A320000 +1F72:0000101008003C42403C4040423C0000 +1F73:0000081010003C42403C4040423C0000 +1F74:0000101008005C624242424242420202 +1F75:0000081010005C624242424242420202 +1F76:000010100800301010101010100C0000 +1F77:000008101000301010101010100C0000 +1F78:0000101008003C4242424242423C0000 +1F79:0000081010003C4242424242423C0000 +1F7A:000010100800424242424242423C0000 +1F7B:000008101000424242424242423C0000 +1F7C:00001010080022414149494949360000 +1F7D:00000408080022414149494949360000 +1F7E:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE61867DBE7B8E77BE77867FFE0000 +1F7F:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE61867DBE7B8E77BE77BE7FFE0000 +1F80:000030102000324A444444444A322030 +1F81:000030201000324A444444444A322030 +1F82:000068284400324A444444444A322030 +1F83:000068482400324A444444444A322030 +1F84:000064284800324A444444444A322030 +1F85:000064482800324A444444444A322030 +1F86:324C0030102000324A4444444A322030 +1F87:324C0030201000324A4444444A322030 +1F88:C040800018242442427E42424242100C +1F89:C080400018242442427E42424242100C +1F8A:D050880018242442427E42424242100C +1F8B:D090480018242442427E42424242100C +1F8C:C850900018242442427E42424242100C +1F8D:C890500018242442427E42424242100C +1F8E:6498602040182424427E42424242100C +1F8F:6498604020182424427E42424242100C +1F90:0000180810005C624242424242422232 +1F91:0000181008005C624242424242422232 +1F92:0000341422005C624242424242422232 +1F93:0000342412005C624242424242422232 +1F94:0000321424005C624242424242422232 +1F95:0000322414005C624242424242422232 +1F96:324C00180810005C6242424242422232 +1F97:324C00181008005C6242424242422232 +1F98:C0408000424242427E42424242422018 +1F99:C0804000424242427E42424242422018 +1F9A:D0508800424242427E42424242422018 +1F9B:D0904800424242427E42424242422018 +1F9C:C8509000424242427E42424242422018 +1F9D:C8905000424242427E42424242422018 +1F9E:64986020404242427E42424242422018 +1F9F:64986040204242427E42424242422018 +1FA0:0000180810002241414949494936080C +1FA1:0000181008002241414949494936080C +1FA2:0000341422002241414949494936080C +1FA3:0000342412002241414949494936080C +1FA4:0000321424002241414949494936080C +1FA5:0000322414002241414949494936080C +1FA6:324C001808100022414949494936080C +1FA7:324C001810080022414949494936080C +1FA8:C04080003E4141414141221414770806 +1FA9:C08040003E4141414141221414770806 +1FAA:D05088003E4141414141221414770806 +1FAB:D09048003E4141414141221414770806 +1FAC:C85090003E4141414141221414770806 +1FAD:C89050003E4141414141221414770806 +1FAE:64986020401C22414141221414770806 +1FAF:64986040201C22414141221414770806 +1FB0:000044443800324A444444444A320000 +1FB1:000000007C00324A444444444A320000 +1FB2:000020201000324A444444444A322030 +1FB3:000000000000324A444444444A322030 +1FB4:000010202000324A444444444A322030 +1FB5:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE63866DBE63866DF663867FFE0000 +1FB6:000000324C00324A444444444A320000 +1FB7:000000324C00324A444444444A322030 +1FB8:42423C0018242442427E424242420000 +1FB9:003C000018242442427E424242420000 +1FBA:8080400018242442427E424242420000 +1FBB:4080800018242442427E424242420000 +1FBC:0000000018242442427E42424242100C +1FBD:00000000180810000000000000000000 +1FBE:00000000000000000000202020180000 +1FBF:18081000000000000000000000000000 +1FC0:324C0000000000000000000000000000 +1FC1:324C0066000000000000000000000000 +1FC2:0000101008005C624242424242422232 +1FC3:0000000000005C624242424242422232 +1FC4:0000081010005C624242424242422232 +1FC5:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE71866FBE6F866FF671867FFE0000 +1FC6:000000324C005C624242424242420202 +1FC7:000000324C005C624242424242422232 +1FC8:808040007E4040407C404040407E0000 +1FC9:408080007E4040407C404040407E0000 +1FCA:80804000424242427E42424242420000 +1FCB:40808000424242427E42424242420000 +1FCC:00000000424242427E4242424242100C +1FCD:68284400000000000000000000000000 +1FCE:64284800000000000000000000000000 +1FCF:324C0018081000000000000000000000 +1FD0:000044443800301010101010100C0000 +1FD1:000000003C00301010101010100C0000 +1FD2:101008006600301010101010100C0000 +1FD3:081010006600301010101010100C0000 +1FD4:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE63B66DB66D866DF663F67FFE0000 +1FD5:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE63866DBE6D866DF663867FFE0000 +1FD6:000000324C00301010101010100C0000 +1FD7:00324C006600301010101010100C0000 +1FD8:22221C003E08080808080808083E0000 +1FD9:003E00003E08080808080808083E0000 +1FDA:808040003E08080808080808083E0000 +1FDB:408080003E08080808080808083E0000 +1FDC:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE63C66DBE6DBE6DBE63C67FFE0000 +1FDD:68482400000000000000000000000000 +1FDE:64482800000000000000000000000000 +1FDF:324C0018100800000000000000000000 +1FE0:000042423C00424242424242423C0000 +1FE1:0000003C0000424242424242423C0000 +1FE2:101008006600424242424242423C0000 +1FE3:081010006600424242424242423C0000 +1FE4:0000180810003C4242424242625C4040 +1FE5:0000181008003C4242424242625C4040 +1FE6:000000324C00424242424242423C0000 +1FE7:00324C006600424242424242423C0000 +1FE8:22221C00414122221408080808080000 +1FE9:00003E00414122221408080808080000 +1FEA:80804000414122221408080808080000 +1FEB:40808000414122221408080808080000 +1FEC:C08040007C4242427C40404040400000 +1FED:10100800660000000000000000000000 +1FEE:08101000660000000000000000000000 +1FEF:10100800000000000000000000000000 +1FF0:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE61CE6FB663B66FB66FCE7FFE0000 +1FF1:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE61EE6FCE63EE6FEE6FC67FFE0000 +1FF2:0000101008002241414949494936080C +1FF3:0000000000002241414949494936080C +1FF4:0000040808002241414949494936080C +1FF5:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE61866FBE63866FF66F867FFE0000 +1FF6:000000324C0022414149494949360000 +1FF7:000000324C002241414949494936080C +1FF8:808040003C42424242424242423C0000 +1FF9:408080003C42424242424242423C0000 +1FFA:808040003E4141414141221414770000 +1FFB:408080003E4141414141221414770000 +1FFC:000000003E4141414141221414770806 +1FFD:08101000000000000000000000000000 +1FFE:18100800000000000000000000000000 +1FFF:00007FFE7B8673BE7B8E7BBE71BE7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +2000:00000000000000000000000000000000 +2001:00000000000000000000000000000000 +2002:00000000000000000000000000000000 +2003:00000000000000000000000000000000 +2004:00000000000000000000000000000000 +2005:00000000000000000000000000000000 +2006:00000000000000000000000000000000 +2007:00000000000000000000000000000000 +2008:00000000000000000000000000000000 +2009:00000000000000000000000000000000 +200A:00000000000000000000000000000000 +200B:AAAA00019E44024584540855906C1E4580000E3990240C3982201C2180005555 +200C:AAAA00019E44024584540855906C1E45800012099A0816499248123180005555 +200D:AAAA00019E44024584540855906C1E4580000041804002418240018180005555 +200E:AAAA000180000001C72244B7C72A4523F4A20001800000018000000180005555 +200F:AAAA000180000001F2224A37F22A5223CBA20001800000018000000180005555 +2010:0000000000000000003C000000000000 +2011:0000000000000000003C000000000000 +2012:0000000000000000007E000000000000 +2013:0000000000000000007E000000000000 +2014:000000000000000000FF000000000000 +2015:000000000000000000FF000000000000 +2016:00000014141414141414141414141400 +2017:00000000000000000000000000FF00FF +2018:00000810101800000000000000000000 +2019:00001808081000000000000000000000 +201A:00000000000000000000000018080810 +201B:00001810100800000000000000000000 +201C:00002244446600000000000000000000 +201D:00006622224400000000000000000000 +201E:00000000000000000000000066222244 +201F:00006644442200000000000000000000 +2020:0000081C082A7F2A081C080808080000 +2021:00081C082A7F2A08082A7F2A081C0800 +2022:00000000000000387C7C7C3800000000 +2023:0000000000002030383C383020000000 +2024:00000000000000000000000018180000 +2025:00000000000000000000000036360000 +2026:00000000000000000000000049490000 +2027:00000000000000000018180000000000 +2028:AAAA00018000020182000201820003C180003BDDC21233DD8A1073D180005555 +2029:AAAA000180000381824003818200020180003BDDC21233DD8A1073D180005555 +202A:AAAA000180000001C39E4251C39E4291FA5E0001800000018000000180005555 +202B:AAAA000180000001F21E4A11F21E5211CBDE0001800000018000000180005555 +202C:AAAA000180000001F39E4A51F25E4251C3900001800000018000000180005555 +202D:AAAA000180000001C38C4253C3924293FA4C0001800000018000000180005555 +202E:AAAA000180000001F20C4A13F2125213CBCC0001800000018000000180005555 +202F:00000000000000000000000000000000 +2030:0000000042A4A44810102A55558A0000 +2031:0000000040A0A04C30C02A55552A0000 +2032:000000000C1810200000000000000000 +2033:00000000336644880000000000000000 +2034:000000003F7E54A80000000000000000 +2035:00000000301808040000000000000000 +2036:00000000CC6622110000000000000000 +2037:00000000FC7E2A150000000000000000 +2038:00000000000000000000000000102844 +2039:00000000000404080810080804040000 +203A:00000000202010100808101020200000 +203B:00000000004922144914224900000000 +203C:00000000242424242424240024240000 +203D:000000003C4A4A0A0C08080008080000 +203E:7E000000000000000000000000000000 +203F:0000000000000000000000000000423C +2040:3C420000000000000000000000000000 +2041:00000000000000000000020408102844 +2042:000000000000081C0800227722000000 +2043:00000000000000003C3C000000000000 +2044:00000000020204080810102040400000 +2045:0000000E080808080E08080808080E00 +2046:00000070101010107010101010107000 +2047:000000EE111122CC8888880000880000 +2048:000000720A0A12624242420000420000 +2049:0000005C424244585050500000500000 +204A:0000000000007E020202020404040404 +204B:00000000FC5E5E5E5C50505050505000 +204C:000000001E3A3A3A1E00000000000000 +204D:00000000785C5C5C7800000000000000 +204E:0000000000000008492A1C2A49080000 +204F:00000000000018180000001810100800 +2050:0000003C424200000042423C00000000 +2051:0008492A1C2A49080008492A1C2A4908 +2052:00000000626204080810102046460000 +2053:000000000000000000718E0000000000 +2054:00000000000000000000000000003C42 +2055:00000000925438FE3854920000000000 +2056:00000000000006060060600006060000 +2057:0000000000000000333366664444888800000000000000000000000000000000 +2058:00000000000018180066660018180000 +2059:00000000000066660018180066660000 +205A:00000000181800000000000018180000 +205B:00000018180000006666000000181800 +205C:00000000000054107C10540000000000 +205D:00000000181800001818000018180000 +205E:00000000100000100000100000100000 +205F:00000000000000000000000000000000 +2060:AAAA00018000000180000001A2082209AA083689A27000018000000180005555 +2061:AAAA00018C001001908810899104110591047D05910411059088608980005555 +2062:AAAA000180000001800000018000042182400181824004218000000180005555 +2063:AAAA000180000001800000018000000180000001800018018800080190005555 +2064:AAAA00018000000180000101810001018FE00101810001018100000180005555 +2065:00007FFE61CE7DB661B66FB661CE7FFE7FFE73866FBE63866DF673867FFE0000 +2066:AAAA000180000001A39C2249A3882289BA5C0001800000018000000180005555 +2067:AAAA000180000001B91C2509B9082909A5DC0001800000018000000180005555 +2068:AAAA000180000001B9DC2209B9882049A39C0001800000018000000180005555 +2069:AAAA000180000001F39C4A49F2484249C39C0001800000018000000180005555 +206A:AAAA0001800007C181000101810007C180001E79A0801C7182083CF180005555 +206B:AAAA000180000381844007C18440044180001E79A0801C7182083CF180005555 +206C:AAAA0001800003E180800081808003E1800039F6C5087DE7C501450F80005555 +206D:AAAA0001800001C1822003E182200221800039F6C5087DE7C501450F80005555 +206E:AAAA000180002271B2882AF9A688228980003C79A2802271A2083CF180005555 +206F:AAAA000180002271B2882A89A688227180003C79A2802271A2083CF180005555 +2070:00000018244242422418000000000000 +2071:0000001000301010107C000000000000 +2072:00007FFE61CE7DB661B66FB661CE7FFE7FFE61867DF67B8677BE77867FFE0000 +2073:00007FFE61CE7DB661B66FB661CE7FFE7FFE618E7DF67BC677F6778E7FFE0000 +2074:0000000C1424447E0404000000000000 +2075:0000007C404078040478000000000000 +2076:00000018204078444438000000000000 +2077:0000007C040808101010000000000000 +2078:00000038444438444438000000000000 +2079:0000003844443C040830000000000000 +207A:0000000010107C101000000000000000 +207B:0000000000007C000000000000000000 +207C:00000000007C00007C00000000000000 +207D:00000408101010101008040000000000 +207E:00002010080808080810200000000000 +207F:00000000005864444444000000000000 +2080:00000000000000001824424242241800 +2081:00000000000000001030501010107C00 +2082:00000000000000003844041820407C00 +2083:00000000000000003844043804443800 +2084:00000000000000000C1424447E040400 +2085:00000000000000007C40407804047800 +2086:00000000000000001820407844443800 +2087:00000000000000007C04080810101000 +2088:00000000000000003844443844443800 +2089:00000000000000003844443C04083000 +208A:0000000000000000000010107C101000 +208B:0000000000000000000000007C000000 +208C:00000000000000000000007C00007C00 +208D:00000000000000040810101010100804 +208E:00000000000000201008080808081020 +208F:00007FFE61CE7DB661B66FB661CE7FFE7FFE73866DBE738E6DBE73BE7FFE0000 +2090:0000000000000000000038043C443C00 +2091:0000000000000000000038447C403C00 +2092:00000000000000000000384444443800 +2093:00000000000000000000442810284400 +2094:0000000000000000000078047C443800 +2095:00000000000000004040586444444400 +2096:00000000000000002020242830282400 +2097:00000000000000003010101010107C00 +2098:00000000000000000000764949494900 +2099:00000000000000000000586444444400 +209A:00000000000000000000586464584040 +209B:000000000000000000003C4038047800 +209C:000000000000000010107C1010100C00 +209D:00007FFE61CE7DB661B66FB661CE7FFE7FFE738E6DB671B67DB6738E7FFE0000 +209E:00007FFE61CE7DB661B66FB661CE7FFE7FFE73866DBE718E7DBE73867FFE0000 +209F:00007FFE61CE7DB661B66FB661CE7FFE7FFE73866DBE718E7DBE73BE7FFE0000 +20A0:000000003C40405E50503C10101E0000 +20A1:000000000A3E4A54546868725C100000 +20A2:000000001C22424056585050321C0000 +20A3:000000003F2020203E2020FC20200000 +20A4:000000000E10107E107E10103E610000 +20A5:000000000101764D4D49495969690000 +20A6:000000002222327F2A7F262622220000 +20A7:0000000068585F5C6C4A4949494E0000 +20A8:0000000070484B4C74545249494E0000 +20A9:0000002222227F2A7F36362222000000 +20AA:000000000000F28AAAAAAAAAA2BC0000 +20AB:000000020F023A4642424242463A007E +20AC:000000000C12207C207C2020120C0000 +20AD:000000004244485060FE504844420000 +20AE:000000007F08080E380E380808080000 +20AF:0000000070484848484E4D4D4E740404 +20B0:00000000384444442818546462420408 +20B1:00007C42FF42FF427C40404040400000 +20B2:000010103C52525050565252563A1010 +20B3:00000000182424FF42FF424242420000 +20B4:000000003C420202FF30FF40423C0000 +20B5:000010103C52525050505052523C1010 +20B6:000000002828287E2828282829260000 +20B7:000000003C424220180452AAAAFCA8A8 +20B8:000000000000FE00FE10101010100000 +20B9:0000000000000FF0018000400FF0004000800F00040002000100008000400000 +20BA:0000002020283060A83062A224380000 +20BB:0000000040A0FC224254E84044380000 +20BC:00000000000000101038545454540000 +20BD:000000003C2222227C207C2020200000 +20BE:0000287CAAAAAA808080804020FE0000 +20BF:00002828FC4242427C42424242FC2828 +20C0:00007FFE61CE7DB661B66FB661CE7FFE7FFE71CE6FB66FB66FB671CE7FFE0000 +20C1:00007FFE61CE7DB661B66FB661CE7FFE7FFE71EE6FCE6FEE6FEE71C67FFE0000 +20C2:00007FFE61CE7DB661B66FB661CE7FFE7FFE71866FF66F866FBE71867FFE0000 +20C3:00007FFE61CE7DB661B66FB661CE7FFE7FFE718E6FF66FC66FF6718E7FFE0000 +20C4:00007FFE61CE7DB661B66FB661CE7FFE7FFE71B66FB66F866FF671F67FFE0000 +20C5:00007FFE61CE7DB661B66FB661CE7FFE7FFE71866FBE6F866FF671867FFE0000 +20C6:00007FFE61CE7DB661B66FB661CE7FFE7FFE71CE6FBE6F8E6FB671CE7FFE0000 +20C7:00007FFE61CE7DB661B66FB661CE7FFE7FFE71866FF66FEE6FDE71DE7FFE0000 +20C8:00007FFE61CE7DB661B66FB661CE7FFE7FFE71CE6FB66FCE6FB671CE7FFE0000 +20C9:00007FFE61CE7DB661B66FB661CE7FFE7FFE71CE6FB66FC66FF671CE7FFE0000 +20CA:00007FFE61CE7DB661B66FB661CE7FFE7FFE71866FB66F866FB671B67FFE0000 +20CB:00007FFE61CE7DB661B66FB661CE7FFE7FFE718E6FB66F8E6FB6718E7FFE0000 +20CC:00007FFE61CE7DB661B66FB661CE7FFE7FFE71C66FBE6FBE6FBE71C67FFE0000 +20CD:00007FFE61CE7DB661B66FB661CE7FFE7FFE718E6FB66FB66FB6718E7FFE0000 +20CE:00007FFE61CE7DB661B66FB661CE7FFE7FFE71866FBE6F8E6FBE71867FFE0000 +20CF:00007FFE61CE7DB661B66FB661CE7FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +20D0:0010207E000000000000000000000000 +20D1:0008047E000000000000000000000000 +20D2:00000000101010101010101010100000 +20D3:00000000001010101010101000000000 +20D4:004C5260780000000000000000000000 +20D5:00324A061E0000000000000000000000 +20D6:10207E20100000000000000000000000 +20D7:08047E04080000000000000000000000 +20D8:00000000000000182424180000000000 +20D9:00000000000000383424180000000000 +20DA:000000000000001C2C24180000000000 +20DB:00002A2A000000000000000000000000 +20DC:00005555000000000000000000000000 +20DD:000003800C60301820084004400480028002800240044004200830180C600380 +20DE:00007FFE4002400240024002400240024002400240024002400240027FFE0000 +20DF:0000010002800440082010102008400480024004200810100820044002800100 +20E0:000003800C603018300858044C0486028302818240C44064203830180C600380 +20E1:2442FF42240000000000000000000000 +20E2:0000000000003FFC4002400240024002400240024002400240023FFC7FFE0000 +20E3:00003FFC60065FFA500A500A500A500A500A500A500A500A5FFA60063FFC0000 +20E4:008001C00140036002200410041008080808180C10041004200220023FFE0000 +20E5:00002020201010101010080808080000 +20E6:00002828282828282828282828280000 +20E7:00001FFF00010001000100010001000100010001000100010001000100010000 +20E8:00000000000000000000000000000054 +20E9:00FF8100000000000000000000000000 +20EA:000000000000000000000000040008001FFC0800040000000000000000000000 +20EB:00000A0A0A1414141414282828280000 +20EC:000000000000000000000000007E0408 +20ED:000000000000000000000000007E2010 +20EE:000000000000000000000010207E2010 +20EF:000000000000000000000008047E0408 +20F0:24187E18240000000000000000000000 +20F1:00007FFE61CE7DB661B66FB661CE7FFE7FFE61EE6FCE63EE6FEE6FC67FFE0000 +20F2:00007FFE61CE7DB661B66FB661CE7FFE7FFE61866FF663866FBE6F867FFE0000 +20F3:00007FFE61CE7DB661B66FB661CE7FFE7FFE618E6FF663C66FF66F8E7FFE0000 +20F4:00007FFE61CE7DB661B66FB661CE7FFE7FFE61B66FB663866FF66FF67FFE0000 +20F5:00007FFE61CE7DB661B66FB661CE7FFE7FFE61866FBE63866FF66F867FFE0000 +20F6:00007FFE61CE7DB661B66FB661CE7FFE7FFE61CE6FBE638E6FB66FCE7FFE0000 +20F7:00007FFE61CE7DB661B66FB661CE7FFE7FFE61866FF663EE6FDE6FDE7FFE0000 +20F8:00007FFE61CE7DB661B66FB661CE7FFE7FFE61CE6FB663CE6FB66FCE7FFE0000 +20F9:00007FFE61CE7DB661B66FB661CE7FFE7FFE61CE6FB663C66FF66FCE7FFE0000 +20FA:00007FFE61CE7DB661B66FB661CE7FFE7FFE61866FB663866FB66FB67FFE0000 +20FB:00007FFE61CE7DB661B66FB661CE7FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +20FC:00007FFE61CE7DB661B66FB661CE7FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +20FD:00007FFE61CE7DB661B66FB661CE7FFE7FFE618E6FB663B66FB66F8E7FFE0000 +20FE:00007FFE61CE7DB661B66FB661CE7FFE7FFE61866FBE638E6FBE6F867FFE0000 +20FF:00007FFE61CE7DB661B66FB661CE7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +2100:00000000003051523408132444030000 +2101:0000000000305152340B142241060000 +2102:000000001E31505050505050311E0000 +2103:40A0A0403C42424040404042423C0000 +2104:0000000010103C505050503C101E0000 +2105:00000000003041423408162949060000 +2106:00000000003041423408102949060000 +2107:000000003E42404038404042423C0000 +2108:000000007C4202121E120202423C0000 +2109:40A0A0407E4040407C40404040400000 +210A:0000000000003A4642423E023F423C00 +210B:00000000127596141C34549494630000 +210C:000018B66068743666666666E6063408 +210D:00000000715151515F51515151710000 +210E:00000000000000400080008000F0018801080108021002100210042000000000 +210F:000000000000005000E0038004F0018801080108021002100210042000000000 +2110:000000000C14240404060C1424283000 +2111:00000000397FC68066086CA6663C0000 +2112:0000000C12123C101010107099660000 +2113:000000182424242830602020221C0000 +2114:000000004848FE484A4D494949360000 +2115:00000000715159595555535351710000 +2116:00000000929595D2D0B7B09090900000 +2117:000000003C42B9A5A5B9A1A1423C0000 +2118:000000000000204C5222222A54505020 +2119:000000007C525252525C505050700000 +211A:000000001C32515151515151361E0100 +211B:000000402E113151515E545252210000 +211C:00000000446EB233363C3636A2C30000 +211D:000000007E515151515E585452710000 +211E:000000007C4242427C504A444A500000 +211F:000038087C4A4A4A7C6858484C4A0800 +2120:00000000719B5531D100000000000000 +2121:00000000FE525A525F00000000000000 +2122:00000000F15B55515100000000000000 +2123:0000300C85894A525424287850800000 +2124:000000007E0A0A1214242848507E0000 +2125:000000003C08103E0408180402423C00 +2126:000000003E4141414141221414770000 +2127:000000007714142241414141413E0000 +2128:000000003C464606081E020666A6663C +2129:000000000000300808080808080C0000 +212A:00000000424448506060504844420000 +212B:1824180018242442427E424242420000 +212C:000000002E5151515E515151512E0000 +212D:000000001624686866666468221C0000 +212E:0000000000000000000007E00810181818181FF818001800081007E000000000 +212F:00000000000000182448704044380000 +2130:000000000E1220201C204044423C0000 +2131:000000003C42020404083E1020200000 +2132:0000000002020202023E0202027E0000 +2133:0000000063362A2A2A2A2A6AAA490000 +2134:0000000000001824534E424224180000 +2135:00000000000044462214286472620000 +2136:0000000000103E02020202023F7E0000 +2137:0000000000403C1E0202020E32320000 +2138:0000000000403E1F0202020203020000 +2139:0000000018180038181818187E000000 +213A:000000000000000000000000000000081FE820302050205020301FE000000000 +213B:00000000000000007C004000400040007222451448884F88489448A200000000 +213C:0000000000000000000000001FF80A500A500A500A500A480A240E1C00000000 +213D:0000000000000000000000000C040A08091004A0024002400480090012001C00 +213E:000000007F5553515050505050700000 +213F:00000000000000003FF8145014501450145014501450145014501C7000000000 +2140:00000000000000001FF81228091804880240024004800908121814281FF80000 +2141:000000005C62424272020202423C0000 +2142:000000007E0202020202020202020000 +2143:000000000202020202020202027E0000 +2144:00000000080808080814222241410000 +2145:000000000000000007E00530052809280A280A481250145014601FC000000000 +2146:0000000000000000003800280028004807D00A50129014A014A00FE000000000 +2147:00000000000000000000000003E00510091013F01400140014200FC000000000 +2148:00000000000000200040000000E00140014001400280028002800FE000000000 +2149:000000000000000800100000003800500050005000A000A000A000A008C00700 +214A:000010107C525252525C1010101E0000 +214B:000000004E3121514A0C1422221C0000 +214C:000000000000000034C04D20252005201FF825241FC405080500020000000000 +214D:0000000042A2E4A80813142241460000 +214E:000000000000000404043C04047C0000 +214F:0000000000000000000000000000000011102AA82AA82AA811106EEC00000000 +2150:0000000022622428281E122244440400 +2151:0000000022622428281E1A2E424C0000 +2152:0000000042C24448502255B595120000 +2153:0000000022622428281C1224424C0000 +2154:0000000062122448781C1224424C0000 +2155:0000000022622428281E182C424C0000 +2156:0000000062122448781E182C424C0000 +2157:0000000062122418681E182C424C0000 +2158:000000002262F428281E182C424C0000 +2159:00000000226224282816182E4A4E0000 +215A:00000000724264186816182E4A4E0000 +215B:000000002262242828141A244A4E0000 +215C:000000006212241868141A244A4E0000 +215D:000000007242641868141A244A4E0000 +215E:000000007212244848141A244A4E0000 +215F:00000000226224282810102040400000 +2160:000000001C08080808080808081C0000 +2161:000000007E24242424242424247E0000 +2162:000000007F2A2A2A2A2A2A2A2A7F0000 +2163:000000007F29292929292626267F0000 +2164:000000007F22222214141408083E0000 +2165:00000000FF4A4A4A4A4A3232327F0000 +2166:00000000FF55555555252525257F0000 +2167:00000000FFB5B5B5B555555555FF0000 +2168:000000007F2A2A2A24242A2A2A7F0000 +2169:000000007F22221408081422227F0000 +216A:000000007F2A2A2A12122A2A2A7F0000 +216B:000000007F55555525255555557F0000 +216C:000000007020202020202020227E0000 +216D:000000001A26404040404040221C0000 +216E:00000000782422222222222224780000 +216F:0000000063223636362A2A2A2A7F0000 +2170:000000000808000818080808081C0000 +2171:00000000242400246C242424247E0000 +2172:000000002A2A002A7E2A2A2A2A7F0000 +2173:000000002020003B69292926267F0000 +2174:000000000000007722222214083E0000 +2175:000000000202005A4E4A4A32327F0000 +2176:00000000050500555F555525257F0000 +2177:00000000151500B5BFB5555555FF0000 +2178:000000002020002A6A24242A2A7F0000 +2179:00000000000000772214081422770000 +217A:000000000202002A2E12122A2A7F0000 +217B:00000000050500555F252555557F0000 +217C:000000000818080808080808081C0000 +217D:000000000000001A26404040221C0000 +217E:000000000206021A26424242261B0000 +217F:000000000000742A2A2A2A2A2A7F0000 +2180:000000003E49494949494949493E0000 +2181:000000007824322A2A2A2A3224780000 +2182:000000000000000007C00920139015501550155015501390092007C000000000 +2183:000000003C42420202020242423C0000 +2184:0000000000003C4202020202423C0000 +2185:000000003A46808080808080463A0202 +2186:00000000101010101010925438100000 +2187:000000F8467149655565497146F80000 +2188:0000000000000FE0311847C44924539455545394492447C431180FE000000000 +2189:0000000022525458281C1224424C0000 +218A:000000007E02020408304042423C0000 +218B:000000003C42424040384042423C0000 +218C:00007FFE61EE7DCE61EE6FEE61C67FFE7FFE73C66DBE73BE6DBE73C67FFE0000 +218D:00007FFE61EE7DCE61EE6FEE61C67FFE7FFE738E6DB673B66DB6738E7FFE0000 +218E:00007FFE61EE7DCE61EE6FEE61C67FFE7FFE73866DBE738E6DBE73867FFE0000 +218F:00007FFE61EE7DCE61EE6FEE61C67FFE7FFE73866DBE738E6DBE73BE7FFE0000 +2190:0000000000000010207F201000000000 +2191:0000081C2A0808080808080808080808 +2192:000000000000000804FE040800000000 +2193:08080808080808080808082A1C080000 +2194:000000000000002442FF422400000000 +2195:0000081C2A0808080808082A1C080000 +2196:00000000007860504804020000000000 +2197:00000000001E060A1220400000000000 +2198:00000000004020120A061E0000000000 +2199:00000000000002044850607800000000 +219A:0000000000040414247F241404040000 +219B:000000000020202824FE242820200000 +219C:0000000000000000000000003800301C28220441038000000000000000000000 +219D:000000000000000000000000001C380C4414822001C000000000000000000000 +219E:000000000000002448FF482400000000 +219F:0000081C2A081C2A0808080808080808 +21A0:000000000000002412FF122400000000 +21A1:0808080808080808082A1C082A1C0800 +21A2:0000000000000011227C221100000000 +21A3:0000000000000088443E448800000000 +21A4:0000000000000012227E221200000000 +21A5:0000081C2A08080808080808083E0000 +21A6:0000000000000048447E444800000000 +21A7:00003E08080808080808082A1C080000 +21A8:0000081C2A08080808082A1C083E0000 +21A9:0000000000000211217E201000000000 +21AA:0000000000002044423F020400000000 +21AB:0000000000000215257E241400000000 +21AC:0000000000002054523F121400000000 +21AD:00000000000000245AE7422400000000 +21AE:000000000008082C4AFF4A2C08080000 +21AF:00004040404858684808082A1C080000 +21B0:00000000000000102078241404040404 +21B1:0000000000000008041E242820202020 +21B2:04040404040404142478201000000000 +21B3:2020202020202028241E040800000000 +21B4:000000000000000000FC04150E040000 +21B5:0404040404040414247C201000000000 +21B6:0000000000001E21A971200000000000 +21B7:0000000000007884958E040000000000 +21B8:0000007E007860504804020000000000 +21B9:00000050607E6050000A067E060A0000 +21BA:000000000000002E4C4A42423C000000 +21BB:0000000000000074325242423C000000 +21BC:0000000000000010207F000000000000 +21BD:0000000000000000007F201000000000 +21BE:0000080C0A0808080808080808080808 +21BF:00000818280808080808080808080808 +21C0:000000000000000804FE000000000000 +21C1:000000000000000000FE040800000000 +21C2:08080808080808080808080A0C080000 +21C3:08080808080808080808082818080000 +21C4:00000008047E04080010207E20100000 +21C5:00002474AC242424242424352E240000 +21C6:00000010207E20100008047E04080000 +21C7:00000010207E20100010207E20100000 +21C8:0000247EA52424242424242424240000 +21C9:00000008047E04080008047E04080000 +21CA:0000242424242424242424A57E240000 +21CB:00000000000010207E007E0408000000 +21CC:00000000000008047E007E2010000000 +21CD:00000000000808287E887E2808080000 +21CE:000000000008082C7E897E2C08080000 +21CF:00000000001010147E117E1410100000 +21D0:00000000000000103E403E1000000000 +21D1:00000814361414141414141414140000 +21D2:00000000000000087C027C0800000000 +21D3:00001414141414141414143614080000 +21D4:00000000000000247E817E2400000000 +21D5:00000814361414141414143614080000 +21D6:0000000000785068540A040000000000 +21D7:00000000001E0A162A50200000000000 +21D8:000000000020502A160A1E0000000000 +21D9:0000000000040A546850780000000000 +21DA:000000000000103E40FE403E10000000 +21DB:000000000000087C027F027C08000000 +21DC:000000000000002042F5482000000000 +21DD:000000000000000442AF120400000000 +21DE:0000081C2A0808083E083E0808080808 +21DF:08080808083E083E0808082A1C080000 +21E0:00000000000000102077201000000000 +21E1:0000081C2A0808000808080800080808 +21E2:000000000000000402EF020400000000 +21E3:08080800080808080008082A1C080000 +21E4:0000000000000050607F605000000000 +21E5:000000000000000A06FE060A00000000 +21E6:00000000000010305F815F3010000000 +21E7:000008142277141414141414141C0000 +21E8:000000000000080CFA81FA0C08000000 +21E9:00001C14141414141414772214080000 +21EA:0000081422771414141C001C141C0000 +21EB:000008142263222222222263417F0000 +21EC:000008143E63222222222263417F0000 +21ED:0000081C2A6B2A2A2A2A2A6B497F0000 +21EE:0008142A7722632222222222223E0000 +21EF:0008142A7722632222222263417F0000 +21F0:000000000000086C7A417A6C08000000 +21F1:00000000007F405C5854424140400000 +21F2:000000000001014121150D1D017F0000 +21F3:00000814361414141414143614080000 +21F4:000000000000000000000000000007080884FFFE088407080000000000000000 +21F5:0000242E35242424242424AC74240000 +21F6:0000000402FF020402FF020402FF0204 +21F7:000000000000002444FF442400000000 +21F8:000000000000002422FF222400000000 +21F9:0000000000000000000000000000092011103FF8111009200000000000000000 +21FA:0000000000000000000000000000114021407FFF214011400000000000000000 +21FB:000000000000000000000000000002880284FFFE028402880000000000000000 +21FC:0000000000000000000000000000129022887FFC228812900000000000000000 +21FD:000000000000002060BF602000000000 +21FE:000000000000000406FD060400000000 +21FF:0000000000000000000000000000081018182FF4181808100000000000000000 +2200:0000000041413E222214141408080000 +2201:00000000182424202020202424180000 +2202:000000001C2202021E22424444380000 +2203:000000007E0202027E020202027E0000 +2204:000004047E0A0A127E122222227E4040 +2205:000000000000001D22454951225C0000 +2206:000000000808141414222222417F0000 +2207:000000007F4122222214141408080000 +2208:000000000000003E40407E40403E0000 +2209:000000000004043E48487E50503E2020 +220A:0000000000000000003E407E403E0000 +220B:000000000000007C02027E02027C0000 +220C:000000000004047C0A0A7E12127C2020 +220D:0000000000000000007C027E027C0000 +220E:000000007E7E7E7E7E7E7E7E7E7E0000 +220F:000000007F2222222222222222227700 +2210:00000000772222222222222222227F00 +2211:000000007E4220100804081020427E00 +2212:0000000000000000007E000000000000 +2213:000000007F000808087F080808000000 +2214:0000081C08000808087F080808000000 +2215:00000000020404080810102020400000 +2216:00000000402020101008080404020000 +2217:000000000000082A1C081C2A08000000 +2218:00000000000000001824241800000000 +2219:0000000000000000183C3C1800000000 +221A:00000704040404047414140C0C040400 +221B:00006714641464047414140C0C040400 +221C:00005754741414047414140C0C040400 +221D:00000000000000364848360000000000 +221E:00000000000000364949360000000000 +221F:000000000000004040404040407E0000 +2220:000000000000000002040810207E0000 +2221:000000000000000002140814247E0400 +2222:000000000000000A0C1464140C0A0000 +2223:00000000181818181818181818180000 +2224:0000000018181A1C1818385818180000 +2225:00000000242424242424242424240000 +2226:00000000242426242C34246424240000 +2227:00000000000008081414222241410000 +2228:00000000000041412222141408080000 +2229:0000000000003C424242424242420000 +222A:000000000000424242424242423C0000 +222B:00060A08080808080808080808283000 +222C:000A1514141414141414141414546800 +222D:00152A2A2A2A2A2A2A2A2A2A2AAAD400 +222E:00060A0808081C2A2A1C080808283000 +222F:000A151414143E55553E141414546800 +2230:00152A2A2A7EABABAB7E2A2A2AAAD400 +2231:00060A0808081D2B2F08080808283000 +2232:00060A0808081D2B2F2A1C0808283000 +2233:00060A0808085C6A7A2A1C0808283000 +2234:00000000000018180000006666000000 +2235:00000000000066660000001818000000 +2236:00000000000018180000001818000000 +2237:00000000000066660000006666000000 +2238:0000000000001818007E000000000000 +2239:00000000000006060078000606000000 +223A:0000000000006666007E006666000000 +223B:0000000000181800324C001818000000 +223C:0000000000000000324C000000000000 +223D:00000000000000004C32000000000000 +223E:00000000000000003249260000000000 +223F:00000000000000304849090600000000 +2240:00000000001008080810101008000000 +2241:0000000000000404083A541020200000 +2242:00000000000000007E0000324C000000 +2243:00000000000000324C00007E00000000 +2244:000000040408083A5410107E20204040 +2245:00000000324C00007E00007E00000000 +2246:00000000324C02047E08107E20400000 +2247:000004043A4C08107E10207E20404000 +2248:00000000000000324C00324C00000000 +2249:000000000004043A4C103A5420200000 +224A:0000000000324C00324C007E00000000 +224B:0000000000324C00324C00324C000000 +224C:000000004C3200007E00007E00000000 +224D:000000000000423C00003C4200000000 +224E:00000000000018660000661800000000 +224F:00000000000000186600007E00000000 +2250:00000000181800007E00007E00000000 +2251:0000001818007E00007E001818000000 +2252:0000006060007E00007E000606000000 +2253:0000000606007E00007E006060000000 +2254:000000000000005E00005E0000000000 +2255:000000000000007A00007A0000000000 +2256:000000000000007E24247E0000000000 +2257:00000018242418007E00007E00000000 +2258:000000003C4200007E00007E00000000 +2259:00000018244200007E00007E00000000 +225A:00000042241800007E00007E00000000 +225B:0000083E1C1400007E00007E00000000 +225C:00000814223E00007E00007E00000000 +225D:0000121476547400007E00007E000000 +225E:00000068545454007E00007E00000000 +225F:0030480810100010007E00007E000000 +2260:00000000000002047E08107E20400000 +2261:000000000000007E007E007E00000000 +2262:000000000002047E087E107E20400000 +2263:0000000000007E007E007E007E000000 +2264:0000000000000618601806007E000000 +2265:0000000000006018061860007E000000 +2266:0000000618601806007E00007E000000 +2267:0000006018061860007E00007E000000 +2268:0000000618601806047E08107E204000 +2269:0000006018061862047E08107E204000 +226A:00000000000912244890482412090000 +226B:00000000009048241209122448900000 +226C:00000000241818242424241818240000 +226D:000000020204857E08107EA120404000 +226E:00000008080C18103050303018242000 +226F:00000000084828101814181020602020 +2270:0000000002020E1468181E107E202000 +2271:0000000008087018162870207E404000 +2272:000000000000061860180600324C0000 +2273:000000000000601806186000324C0000 +2274:0000000004040E1868181E103A642020 +2275:000000000808781816187010326C2020 +2276:00000000061860180660180618600000 +2277:00000000601806186006186018060000 +2278:000002020E1468181E70282E50608080 +2279:00000404681816187016386038264040 +227A:00000000000202041860180402020000 +227B:00000000004040201806182040400000 +227C:0000000000020204186018641A040200 +227D:00000000004040201806182658204000 +227E:000000000002020418601804669A0000 +227F:00000000004040201806182059660000 +2280:0000000004060A0C0870181422220000 +2281:0000000004444828180E183050602000 +2282:0000000000003E404040403E00000000 +2283:0000000000007C020202027C00000000 +2284:0000000004043E485050603E40400000 +2285:0000000002027C0A0A12127C20200000 +2286:0000000000003E404040403E007E0000 +2287:0000000000007C020202027C007E0000 +2288:0000000004043E484850503E207E4000 +2289:0000000002027C0A0A12127C207E4000 +228A:0000000000003E404040403E047E1000 +228B:0000000000007C020202027C087E2000 +228C:000000004242424A527E524A423C0000 +228D:0000000042424242425A5A42423C0000 +228E:0000000042424252527A5252423C0000 +228F:0000000000007E404040407E00000000 +2290:0000000000007E020202027E00000000 +2291:0000000000007E404040407E007E0000 +2292:0000000000007E020202027E007E0000 +2293:0000000000007E424242424200000000 +2294:00000000000042424242427E00000000 +2295:0000000000001C2A497F492A1C000000 +2296:0000000000001C22417F41221C000000 +2297:0000000000001C22554955221C000000 +2298:0000000000001C22454951221C000000 +2299:0000000000001C22414941221C000000 +229A:0000000000001C22495549221C000000 +229B:0000000000001C22495D49221C000000 +229C:0000000000001C225D415D221C000000 +229D:0000000000001C22415D41221C000000 +229E:0000000000007F49497F49497F000000 +229F:0000000000007F41417F41417F000000 +22A0:0000000000007F63554955637F000000 +22A1:0000000000007F41414941417F000000 +22A2:0000000000004040407E404040000000 +22A3:0000000000000202027E020202000000 +22A4:0000000000007F080808080808000000 +22A5:0000000000000808080808087F000000 +22A6:0000000000202020203C202020200000 +22A7:00000000002020203C203C2020200000 +22A8:00000000004040407E407E4040400000 +22A9:0000000000505050505E505050500000 +22AA:00000000005454545457545454540000 +22AB:00000000005050505E505E5050500000 +22AC:0000000000404048487E484840400000 +22AD:00000000004048487E487E4848400000 +22AE:0000000000505054545E545450500000 +22AF:00000000005054545E545E5454500000 +22B0:00000000000C020418601804020C0000 +22B1:00000000003040201806182040300000 +22B2:00000000000000061A621A0600000000 +22B3:00000000000000605846586000000000 +22B4:00000000000000061A621A06007E0000 +22B5:000000000000006058465860007E0000 +22B6:0000000000000000000000000000300C481E4FFE481E300C0000000000000000 +22B7:0000000000000000000000000000300C78127FF27812300C0000000000000000 +22B8:0000000000000000000000000000003800443FC4004400380000000000000000 +22B9:00000000000008080063000808000000 +22BA:000000003E0808080808080808080000 +22BB:000000000000002222141408003E0000 +22BC:0000000000003E000814142222000000 +22BD:0000000000003E002222141408000000 +22BE:000000000000004040407848487E0000 +22BF:000000000000000002060A12227E0000 +22C0:00000000081414142222224141410000 +22C1:00000000414141222222141414080000 +22C2:000000003C4242424242424242420000 +22C3:000000004242424242424242423C0000 +22C4:00000000000000081422140800000000 +22C5:00000000000000001818000000000000 +22C6:00000000000000083E1C140000000000 +22C7:0000000000001842247E244218000000 +22C8:00000000000041635549556341000000 +22C9:00000000000041625448546241000000 +22CA:00000000000041231509152341000000 +22CB:00000000000000201008142200000000 +22CC:00000000000000020408142200000000 +22CD:00000000000000004C3200007E000000 +22CE:00000000000041222214141408000000 +22CF:00000000000008141414222241000000 +22D0:0000000000003E404E50504E403E0000 +22D1:0000000000007C02720A0A72027C0000 +22D2:0000000000003E414955555555550000 +22D3:000000000000555555555549413E0000 +22D4:000000000808081C2A2A2A2A2A2A0000 +22D5:00000000242424247E24247E24240000 +22D6:00000000000204081022100804020000 +22D7:00000000004020100844081020400000 +22D8:0000000000000000000002220444088811102220111008880444022200000000 +22D9:0000000000000000000044402220111008880444088811102220444000000000 +22DA:00000618601806007E00601806186000 +22DB:00006018061860007E00061860180600 +22DC:0000000000007E000618601806000000 +22DD:0000000000007E006018061860000000 +22DE:0000000002041A641860180402020000 +22DF:00000000402058261806182040400000 +22E0:0000000414162ACC1868181412222020 +22E1:000000020A4A442B1816183060602020 +22E2:0000000202047E484850507E207E4000 +22E3:0000000202047E0A0A12127E207E4000 +22E4:0000000000007E404040407E087E2000 +22E5:0000000000007E020202027E087E2000 +22E6:00000000000618601806043A5C204000 +22E7:00000000006018061862043A5C204000 +22E8:00000002020418601804063A5C204000 +22E9:00004040201806182042443A5C204000 +22EA:000000000002020E166A1A1E10202000 +22EB:00000000000404685C56687020404000 +22EC:000000000002020E166A1A1E107E2000 +22ED:00000000000404685C566870207E4000 +22EE:00000000181800001818000018180000 +22EF:0000000000000000DBDB000000000000 +22F0:000000000303000018180000C0C00000 +22F1:00000000C0C000001818000003030000 +22F2:0000000000000000000007F00800100010007FF010001000080007F000000000 +22F3:0000000000000000000007F00800100010101FF010101000080007F000000000 +22F4:0000000000003E40427E42403E000000 +22F5:0000000001800180000007F00800100010001FF010001000080007F000000000 +22F6:0000000000001FF0000007F00800100010001FF010001000080007F000000000 +22F7:000000007E003E40407E40403E000000 +22F8:0000000000003E40407E40403E007E00 +22F9:000000000000000000001FC0200040007FC040007FC0400020001FC000000000 +22FA:000000000000000000003F800040002000203FF80020002000403F8000000000 +22FB:000000000000000000003F800040002020203FE02020002000403F8000000000 +22FC:0000000000007C02427E42027C000000 +22FD:0000000000003FE000003F800040002000203FE00020002000403F8000000000 +22FE:000000007E007C02027E02027C000000 +22FF:000000000000000000001FF81000100010001FF81000100010001FF800000000 +2300:0000000000000000000807D0082010501090111012101410082017C020000000 +2301:00000000000000009058341200000000 +2302:000000000000182442424242427E0000 +2303:00000000081422000000000000000000 +2304:00000000000000000000002214080000 +2305:000000003E0008142200000000000000 +2306:000000003E003E000814220000000000 +2307:00000010080408100804081008040000 +2308:00001E10101010101010101010100000 +2309:00007808080808080808080808080000 +230A:000010101010101010101010101E0000 +230B:00000808080808080808080808780000 +230C:00000000000000000007080808000000 +230D:00000000000000000070080808000000 +230E:00000000000008080807000000000000 +230F:00000000000008080870000000000000 +2310:000000000000000000007E4040400000 +2311:000000000000413E2222223E41000000 +2312:000000000000000000001C2241410000 +2313:000000000000000000001C22417F0000 +2314:00000000000000001C22412214080000 +2315:000000000000001C22414141225C8000 +2316:00000080008003E004900888108410047E3F100410840888049003E000800080 +2317:00000000002424FF2424FF2424000000 +2318:00000000000022553E143E5522000000 +2319:0000000000004040407E000000000000 +231A:0000282828283854929B824438282828 +231B:000000007E242424181824243C7E0000 +231C:00784040400000000000000000000000 +231D:001E0202020000000000000000000000 +231E:00000000000000000000004040407800 +231F:00000000000000000000000202021E00 +2320:00000000060A08080808080808080808 +2321:08080808080808080808283000000000 +2322:0000000000000000003C420000000000 +2323:0000000000000000423C000000000000 +2324:00000000000000007708142200000000 +2325:00000000000000006710080700000000 +2326:00000000000000FCAA91AAFC00000000 +2327:000000000000007F5549557F00000000 +2328:000000000000007E7E7E003C00000000 +2329:0000000800080010001000200020004000800040002000200010001000080008 +232A:0000200020001000100008000800040002000400080008001000100020002000 +232B:000000000000003F5589553F00000000 +232C:00000000008001400220049008480A280A080A28084804900220014000800000 +232D:00000000000000000081010201C40224041804100C10122011C0204040800000 +232E:000000000000000003C004200810100810FE110812080A1004202BC030003800 +232F:0000000000000000000000000FF0000000007FFE000000000FF0000000000000 +2330:000004020C061E0F080410081008201020104020402080408040FFC000000000 +2331:0000000000001F00248044408420842487FF84248420444024801F0000000000 +2332:000000000000000000003C0023802070200C7FFE200C207023803C0000000000 +2333:0000000000000000000000000000000060005C0043804070400C7FFE00000000 +2334:00000000000000000000000040024002400240024002400240027FFE00000000 +2335:0000000000000000000000004001200210040808041002200140008000000000 +2336:000000007F08080808080808087F0000 +2337:000000003E22222222222222223E0000 +2338:0000007F4141417F41417F41417F0000 +2339:0000007F414949417F414949417F0000 +233A:0000007F4149556341635549417F0000 +233B:0000007F4141414955554941417F0000 +233C:0000007F41415D634141635D417F0000 +233D:00000008081C2A4949492A1C08080000 +233E:00000000001C22495549221C00000000 +233F:000000000204040808FF102020400000 +2340:000000004020201010FF080404020000 +2341:0000007F4143454549515161417F0000 +2342:0000007F4161515149454543417F0000 +2343:0000007F4141475961594741417F0000 +2344:0000007F4141714D434D7141417F0000 +2345:00000008080808287F28080808080000 +2346:000000080808080A7F0A080808080000 +2347:0000007F414149517F514941417F0000 +2348:0000007F414149457F454941417F0000 +2349:000000000000005C22514945221D0000 +234A:00000000080808080808087F007F0000 +234B:000000000808081C1C2A2A3E08080000 +234C:00007F414141416363555549417F0000 +234D:00007F41414949555563637F417F0000 +234E:000000000808081C2A2A1C08087F0000 +234F:00000000081C2A087F08080808080000 +2350:00007F495D6B494949494949497F0000 +2351:000000003E003E080808080808080000 +2352:0000000008083E2A2A1C1C0808080000 +2353:00007F414955556363414141417F0000 +2354:00007F41417F636355554949417F0000 +2355:000000007F08081C2A2A1C0808080000 +2356:0000000808080808087F082A1C080000 +2357:00007F494949494949496B5D497F0000 +2358:000000000808080000000000003E0000 +2359:00000000000808141422223E003E0000 +235A:000000000008142241221408003E0000 +235B:000000000000001824241800003E0000 +235C:00000000001C22414141221C007F0000 +235D:000000001C2249554941414141410000 +235E:00007F414949494141414141417F0000 +235F:000000001C22497F5D55221C00000000 +2360:00007F414149494141494941417F0000 +2361:002424007F0808080808080808080000 +2362:00242400003E22221414080800000000 +2363:0024240000083E1C1400000000000000 +2364:00242400000000182424180000000000 +2365:002424000000001C22414141221C0000 +2366:00000000494949494949492A1C080000 +2367:00000008081F28484848281F08080000 +2368:00242400000000324C00000000000000 +2369:00242400402010080402040810204000 +236A:000000003C0000180808100000000000 +236B:00000000003E22221414394E00000000 +236C:000000001C222222336E2222221C0000 +236D:0000000008080808083A4C0808080000 +236E:000000001818000018080810003E0000 +236F:00007F4143457F497F516141417F0000 +2370:00007F414955554549494149417F0000 +2371:00000000324C00222214140800000000 +2372:0000000000324C000814142222000000 +2373:00000000000000180808080808060000 +2374:0000000000003C4242424242625C4040 +2375:00000000000014224949494949360000 +2376:0000000000324A4444444A32007E0000 +2377:00000000003E40407C40403E007E0000 +2378:000000000018080808080806001E0000 +2379:000000000022414949494936007F0000 +237A:000000000000324A444444444A320000 +237B:000000000000000200040008001001FC00400080410022001400080000000000 +237C:000000000A000C00080018002800180008000C000A000C004FFE500060007800 +237D:0000000000000000000000000000000000000000783C082008200FE000000000 +237E:000000000000000003C004200810100810081FF80420042004201C3800000000 +237F:000008080808081C3E1C080808080000 +2380:00000038043C44443A00824428100000 +2381:000000000000000000000000380004003C00440044003A5400007FFC00000000 +2382:000000000000000000000000387004083C78448844883A7400007EFC00000000 +2383:0000000000000000400420081390004073DC0440145023A84004000000000000 +2384:0000000000000000000000003FF02108220422042204220421083FF000000000 +2385:0000000000000000010001001D701110111011101110111011101D7001000100 +2386:00000100028004400820121003087E8440427E84030812100820044002800100 +2387:00000000000000000000000000000020003000E801300220040078FE00000000 +2388:00000100010023881D701930155023882388155019301D702388010001000000 +2389:000000000F8030604010401080088008F078888888884510451032600F800000 +238A:000000000F80306040107FF0A02890489048888888884510451032600F800000 +238B:0000000001807C6048105010680844080208810880884050401030600F800000 +238C:000000000000000007E0081010087C0828081008381C44224422381C00000000 +238D:000000000000000007E0042004200420042004200420042004203C3C00000000 +238E:000000000000000001FC021004200420042004200420042008403F8000000000 +238F:000000000000000000001FF00280044008201010082004400280010000000000 +2390:00000000000000000000010002800440082010100820044002801FF000000000 +2391:000000000000000000001FF00280044008201FF0082004400280010000000000 +2392:0000000000000000000001000280044008201FF00820044002801FF000000000 +2393:000000000000000000000000000000007FFC0000739C00000000000000000000 +2394:0000000000000000000007E0081010082004400220041008081007E000000000 +2395:00007F414141414141414141417F0000 +2396:0000000000007C7C7878707060604000 +2397:00006DB040104FFC48044A044E044BE450244BE44E047A0408040FFC00000000 +2398:00007FF040104EDC4804490449845F4050245F444980790408040CDC00000000 +2399:000001E0032005200F20082038384824882288228FE2800240043FF800000000 +239A:000000000000000000001FF020284244449449245244448428081FF000000000 +239B:000E1830303030303030303030303030 +239C:30303030303030303030303030303030 +239D:3030303030303030303030303030180E +239E:0070180C0C0C0C0C0C0C0C0C0C0C0C0C +239F:0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C +23A0:0C0C0C0C0C0C0C0C0C0C0C0C0C0C1870 +23A1:003E3030303030303030303030303030 +23A2:30303030303030303030303030303030 +23A3:3030303030303030303030303030303E +23A4:007C0C0C0C0C0C0C0C0C0C0C0C0C0C0C +23A5:0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C +23A6:0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C7C +23A7:00060C18181818181818181818181818 +23A8:18181818181810204020101818181818 +23A9:18181818181818181818181818180C06 +23AA:18181818181818181818181818181818 +23AB:00603018181818181818181818181818 +23AC:18181818181808040204081818181818 +23AD:18181818181818181818181818183060 +23AE:08080808080808080808080808080808 +23AF:000000000000000000FF000000000000 +23B0:060C1818181818181818181818183060 +23B1:60301818181818181818181818180C06 +23B2:00000000000000007FFE300E3006180218000C000C0006000600030003000180 +23B3:018003000300060006000C000C00180018023006300E7FFE0000000000000000 +23B4:00000000000000007FFE40024002000000000000000000000000000000000000 +23B5:0000000000000000000000000000000000000000000000000000400240027FFE +23B6:000000000000000000000000400240027FFE00007FFE40024002000000000000 +23B7:08080808080808086828281818080800 +23B8:80808080808080808080808080808080 +23B9:01010101010101010101010101010101 +23BA:FF000000000000000000000000000000 +23BB:00000000FF0000000000000000000000 +23BC:0000000000000000000000FF00000000 +23BD:000000000000000000000000000000FF +23BE:003F2020202020202020202020202000 +23BF:00202020202020202020202020203F00 +23C0:00000100010003800D601110111021082108111011100D600380010001000000 +23C1:0000FFFF010003800D601110111021082108111011100D600380010001000000 +23C2:00000100010003800D601110111021082108111011100D6003800100FFFF0000 +23C3:0000010001000380038005400540092009201110111021083FF8010001000000 +23C4:0000FFFF01000380038005400540092009201110111021083FF8010001000000 +23C5:0000010001000380038005400540092009201110111021083FF80100FFFF0000 +23C6:0000010001000100010001001D00230001880170010001000100010001000000 +23C7:0000FFFF01000100010001001D00230001880170010001000100010001000000 +23C8:0000010001000100010001001D002300018801700100010001000100FFFF0000 +23C9:0000FFFF01000100010001000100010001000100010001000100010001000000 +23CA:00000100010001000100010001000100010001000100010001000100FFFF0000 +23CB:00FC0404040404040404040404040400 +23CC:0004040404040404040404040404FC00 +23CD:00000080793C42044404400440044004400440044004400440047FFC00000000 +23CE:00000000003E00220022002204220C42178220024004200817F00C0004000000 +23CF:00000000000010387CFE00FEFEFE0000 +23D0:08080808080808080808080808080808 +23D1:00000000000000008244380000000000 +23D2:000000000000FE008244380000000000 +23D3:000000000000000082443800FE000000 +23D4:000000000000000000000000FFFE000082824444383800000000000000000000 +23D5:000000000000000000000000000000008282444438380000FFFE000000000000 +23D6:00000000000000000000000000000000418222441C3800000000000000000000 +23D7:0000000000000000000200020002000200027FFE000000000000000000000000 +23D8:0000000000000000400240024002400240027FFE000000000000000000000000 +23D9:0000000000000000410241024102410241027FFE000000000000000000000000 +23DA:08080808080808080808087F001C0008 +23DB:0000000000000000000000001FF810081008FFFF100810081FF8000000000000 +23DC:000000000000000000000000000000000000000007E0381C4002800100000000 +23DD:0000000080014002381C07E00000000000000000000000000000000000000000 +23DE:000000000000000000000000000000000000010002803C784004800200000000 +23DF:00000000800240043C7802800100000000000000000000000000000000000000 +23E0:00000000000000000000000000000000000000000FF010082004400200000000 +23E1:000000004002200410080FF00000000000000000000000000000000000000000 +23E2:000000000000000000007FC040204020401040104008400840047FFC00000000 +23E3:00000000008001400220041009C80A280A280A2809C804100220014000800000 +23E4:0000000000000000000000000000000000007FFE000000000000000000000000 +23E5:000000000000000000000000000000000FFC10081008201020107FE000000000 +23E6:0000000000000000000000001800240042007FFC008400480030000000000000 +23E7:000000002400240022002206A91871A021C003E001C002A00410080810040000 +23E8:0000000000000000246A2A2A2A240000 +23E9:00000000000000000000208030C038E03CF03EF83CF038E030C0208000000000 +23EA:00000000000000000000020806180E381E783EF81E780E380618020800000000 +23EB:00000000000000000100038007C00FE01FF000000100038007C00FE01FF00000 +23EC:00000000000000001FF00FE007C00380010000001FF00FE007C0038001000000 +23ED:000000000000000000004104618471C479E47DF479E471C46184410400000000 +23EE:000000000000000000004104430C471C4F3C5F7C4F3C471C430C410400000000 +23EF:00000000000000000000104818481C481E481F481E481C481848104800000000 +23F0:00000100193037D82828111021082108210822082408101008200FE01C700000 +23F1:00000300030007D808381110210821082108200820081010082007C000000000 +23F2:00000000000007C008201010240822082108200820081010082007C000000000 +23F3:000000007FFC1010101012900D6006C0028006C0082011101AB015507FFC0000 +23F4:0000000000000000004000C001C003C007C00FC007C003C001C000C000400000 +23F5:000000000000000008000C000E000F000F800FC00F800F000E000C0008000000 +23F6:0000000000000000000000000100038007C00FE01FF03FF80000000000000000 +23F7:0000000000000000000000003FF81FF00FE007C0038001000000000000000000 +23F8:0000000000000660066006600660066006600660066006600660066000000000 +23F9:00000000000000001FF81FF81FF81FF81FF81FF81FF81FF81FF81FF800000000 +23FA:000000000000000007E00FF01FF81FF81FF81FF81FF81FF80FF007E000000000 +23FB:01800180018001801998399C318C718E61866186700E300C381C1FF80FF003C0 +23FC:000007E01FF83C3C781E718E61866186618661866186718E381C1FF80FF003C0 +23FD:018003C003C003C003C003C003C003C003C003C003C003C003C003C003C00180 +23FE:0400080018003800380078007800780078007C003C003E001F000F8007E001F0 +23FF:000000000000001C007801940624182260221822062401940078001C00000000 +2400:000000000000000000004A506A505A50499E0000000000000000000000000000 +2401:0000000000000000000039924252325E0A527192000000000000000000000000 +2402:000000000000000000003BA44124311809247124000000000000000000000000 +2403:000000000000000000007BA44124791841247924000000000000000000000000 +2404:0000000000000000000079BE42487A4842487988000000000000000000000000 +2405:000000000000000000007A4C42527B5242D67A4E000000000000000000000000 +2406:0000000000000000000031A44A287A304A2849A4000000000000000000000000 +2407:0000000000000000000073D04A1073D04A1073DE000000000000000000000000 +2408:000000000000000000001E3811401E3011081E70000000000000000000000000 +2409:0000000000000000000022F822203E2022202220000000000000000000000000 +240A:0000000000000000000020F8208020F820803E80000000000000000000000000 +240B:0000000000000000000022F82220222014200820000000000000000000000000 +240C:000000000000000000003EF820803EF820802080000000000000000000000000 +240D:000000000000000000001EF0208820F020901E88000000000000000000000000 +240E:000000000000000000001E7020881C8802883C70000000000000000000000000 +240F:000000000000000000001EF820201C2002203CF8000000000000000000000000 +2410:00000000000000000000391C2510251C251039DC000000000000000000000000 +2411:0000000000000000000071884A184A084A08719C000000000000000000000000 +2412:0000000000000000000071984A044A084A10719C000000000000000000000000 +2413:0000000000000000000071984A044A184A047198000000000000000000000000 +2414:0000000000000000000071844A0C4A144A1C7184000000000000000000000000 +2415:0000000000000000000049926A546A585BD44A52000000000000000000000000 +2416:000000000000000000003452429A311609127112000000000000000000000000 +2417:000000000000000000007BB84124793841247938000000000000000000000000 +2418:00000000000000000000332444B447AC44A434A4000000000000000000000000 +2419:000000000000000000003E8820D83EA820883E88000000000000000000000000 +241A:000000000000000000003A5C4252325C0A52719C000000000000000000000000 +241B:0000000000000000000079CE4210799040507B8E000000000000000000000000 +241C:000000000000000000001E7010801E60101010E0000000000000000000000000 +241D:000000000000000000000E701080166012100EE0000000000000000000000000 +241E:000000000000000000001C7012801C60141012E0000000000000000000000000 +241F:0000000000000000000012701280126012100CE0000000000000000000000000 +2420:000000000000000000003B80424033800A007200000000000000000000000000 +2421:0000000000000000000073D04A104BD04A1073DE000000000000000000000000 +2422:00000000141810305C121212121C0000 +2423:000000000000000000000000427E0000 +2424:0000000048685848001010101E000000 +2425:0000000000010A152A54284000000000 +2426:000000003C4242402010100010100000 +2427:00007FFE61B67DB661866FF661F67FFE7FFE61867DF661EE6FDE61DE7FFE0000 +2428:00007FFE61B67DB661866FF661F67FFE7FFE61CE7DB661CE6FB661CE7FFE0000 +2429:00007FFE61B67DB661866FF661F67FFE7FFE61CE7DB661C66FF661CE7FFE0000 +242A:00007FFE61B67DB661866FF661F67FFE7FFE61867DB661866FB661B67FFE0000 +242B:00007FFE61B67DB661866FF661F67FFE7FFE618E7DB6618E6FB6618E7FFE0000 +242C:00007FFE61B67DB661866FF661F67FFE7FFE61C67DBE61BE6FBE61C67FFE0000 +242D:00007FFE61B67DB661866FF661F67FFE7FFE618E7DB661B66FB6618E7FFE0000 +242E:00007FFE61B67DB661866FF661F67FFE7FFE61867DBE618E6FBE61867FFE0000 +242F:00007FFE61B67DB661866FF661F67FFE7FFE61867DBE618E6FBE61BE7FFE0000 +2430:00007FFE61B67DB661866FF661F67FFE7FFE63CE7DB671B67DB663CE7FFE0000 +2431:00007FFE61B67DB661866FF661F67FFE7FFE63EE7DCE71EE7DEE63C67FFE0000 +2432:00007FFE61B67DB661866FF661F67FFE7FFE63867DF671867DBE63867FFE0000 +2433:00007FFE61B67DB661866FF661F67FFE7FFE638E7DF671C67DF6638E7FFE0000 +2434:00007FFE61B67DB661866FF661F67FFE7FFE63B67DB671867DF663F67FFE0000 +2435:00007FFE61B67DB661866FF661F67FFE7FFE63867DBE71867DF663867FFE0000 +2436:00007FFE61B67DB661866FF661F67FFE7FFE63CE7DBE718E7DB663CE7FFE0000 +2437:00007FFE61B67DB661866FF661F67FFE7FFE63867DF671EE7DDE63DE7FFE0000 +2438:00007FFE61B67DB661866FF661F67FFE7FFE63CE7DB671CE7DB663CE7FFE0000 +2439:00007FFE61B67DB661866FF661F67FFE7FFE63CE7DB671C67DF663CE7FFE0000 +243A:00007FFE61B67DB661866FF661F67FFE7FFE63867DB671867DB663B67FFE0000 +243B:00007FFE61B67DB661866FF661F67FFE7FFE638E7DB6718E7DB6638E7FFE0000 +243C:00007FFE61B67DB661866FF661F67FFE7FFE63C67DBE71BE7DBE63C67FFE0000 +243D:00007FFE61B67DB661866FF661F67FFE7FFE638E7DB671B67DB6638E7FFE0000 +243E:00007FFE61B67DB661866FF661F67FFE7FFE63867DBE718E7DBE63867FFE0000 +243F:00007FFE61B67DB661866FF661F67FFE7FFE63867DBE718E7DBE63BE7FFE0000 +2440:000000000E0A0A0A0808282828380000 +2441:0000000002020202023E222222220000 +2442:0000000022222222223E080808080000 +2443:0000000008080808083E222222220000 +2444:000000003E2A2A2A08082A2A2A3E0000 +2445:0000000022362A362200000000000000 +2446:00000000000E6E6E60606E6E0E000000 +2447:000000000303031B1818D8C0C0C00000 +2448:00000000075757505050505050500000 +2449:00000000006D6D6D6D6D6D6D6D6D0000 +244A:00000000A0A050282814140A05050000 +244B:00007FFE61B67DB661866FF661F67FFE7FFE6D8E6DB6618E7DB67D8E7FFE0000 +244C:00007FFE61B67DB661866FF661F67FFE7FFE6DC66DBE61BE7DBE7DC67FFE0000 +244D:00007FFE61B67DB661866FF661F67FFE7FFE6D8E6DB661B67DB67D8E7FFE0000 +244E:00007FFE61B67DB661866FF661F67FFE7FFE6D866DBE618E7DBE7D867FFE0000 +244F:00007FFE61B67DB661866FF661F67FFE7FFE6D866DBE618E7DBE7DBE7FFE0000 +2450:00007FFE61B67DB661866FF661F67FFE7FFE61CE6FB661B67DB661CE7FFE0000 +2451:00007FFE61B67DB661866FF661F67FFE7FFE61EE6FCE61EE7DEE61C67FFE0000 +2452:00007FFE61B67DB661866FF661F67FFE7FFE61866FF661867DBE61867FFE0000 +2453:00007FFE61B67DB661866FF661F67FFE7FFE618E6FF661C67DF6618E7FFE0000 +2454:00007FFE61B67DB661866FF661F67FFE7FFE61B66FB661867DF661F67FFE0000 +2455:00007FFE61B67DB661866FF661F67FFE7FFE61866FBE61867DF661867FFE0000 +2456:00007FFE61B67DB661866FF661F67FFE7FFE61CE6FBE618E7DB661CE7FFE0000 +2457:00007FFE61B67DB661866FF661F67FFE7FFE61866FF661EE7DDE61DE7FFE0000 +2458:00007FFE61B67DB661866FF661F67FFE7FFE61CE6FB661CE7DB661CE7FFE0000 +2459:00007FFE61B67DB661866FF661F67FFE7FFE61CE6FB661C67DF661CE7FFE0000 +245A:00007FFE61B67DB661866FF661F67FFE7FFE61866FB661867DB661B67FFE0000 +245B:00007FFE61B67DB661866FF661F67FFE7FFE618E6FB6618E7DB6618E7FFE0000 +245C:00007FFE61B67DB661866FF661F67FFE7FFE61C66FBE61BE7DBE61C67FFE0000 +245D:00007FFE61B67DB661866FF661F67FFE7FFE618E6FB661B67DB6618E7FFE0000 +245E:00007FFE61B67DB661866FF661F67FFE7FFE61866FBE618E7DBE61867FFE0000 +245F:00007FFE61B67DB661866FF661F67FFE7FFE61866FBE618E7DBE61BE7FFE0000 +2460:07C0183020084104430485028102810281028102410447C42008183007C00000 +2461:07C0183020084384444484428042808281028202440447C42008183007C00000 +2462:07C0183020084384444484428042818280428442444443842008183007C00000 +2463:07C018302008408441848282848288828FC28082408440842008183007C00000 +2464:07C01830200847C4440484028402878280428042444443842008183007C00000 +2465:07C0183020084184420484028402878284428442444443842008183007C00000 +2466:07C01830200847C4404480428082808280828102410441042008183007C00000 +2467:07C0183020084384444484428442838284428442444443842008183007C00000 +2468:07C018302008438444448442844283C280428042408443042008183007C00000 +2469:07C018302008400444648C9294928492849284925F6440042008183007C00000 +246A:07C018302008400444448CC295428442844284425FF440042008183007C00000 +246B:07C018302008400444648C9294128422844284825FF440042008183007C00000 +246C:07C018302008400444648C9294128422841284925F6440042008183007C00000 +246D:07C018302008400444148C329452849284FA84125F1440042008183007C00000 +246E:07C018302008400444F48C82948284E2841284925F6440042008183007C00000 +246F:07C018302008400444748C82948284E2849284925F6440042008183007C00000 +2470:07C018302008400444F48C1294128422842284425F4440042008183007C00000 +2471:07C018302008400444648C9294928462849284925F6440042008183007C00000 +2472:07C018302008400444648C9294928472841284125F6440042008183007C00000 +2473:07C01830200840044C64929282928492889290925E6440042008183007C00000 +2474:00000000100820842184428240824082408240824082208423E4100800000000 +2475:00000000100823C424244422402240C2410242024402240427E4100800000000 +2476:00000000100823C424244422402241C2402240224422242423C4100800000000 +2477:000000001008204420C4414242424442444247E2404220442044100800000000 +2478:00000000100827E424044402440247C2402240224022242423C4100800000000 +2479:00000000100821C422044402440247C2442244224422242423C4100800000000 +247A:00000000100827E4202440224042404240424082408220842084100800000000 +247B:00000000100823C424244422442243C2442244224422242423C4100800000000 +247C:00000000100823C424244422442243E240224022402220442384100800000000 +247D:00000000400288319849A885888588858885888588858849BE31400200000000 +247E:00000000400288119831A851881188118811881188118811BE7D400200000000 +247F:00000000400288799885A885880588198821884188818881BEFD400200000000 +2480:00000000400288799885A885880588398805880588858885BE79400200000000 +2481:00000000400288099819A82988498889888988FD88098809BE09400200000000 +2482:00000000400288FD9881A881888188F98805880588058885BE79400200000000 +2483:00000000400288399841A881888188F98885888588858885BE79400200000000 +2484:00000000400289F99809A809881188118811882188218821BE21400200000000 +2485:00000000400288799885A885888588798885888588858885BE79400200000000 +2486:00000000400288799885A8858885887D8805880588058809BE71400200000000 +2487:0000000040029C31A249A2858285848588859085A085A049BE31400200000000 +2488:000000000000000001000300050001000100010001000100010007D000000000 +2489:00000000000000000780084008400040018002000400080008000FD000000000 +248A:0000000000000000078008400840004003800040004008400840079000000000 +248B:00000000000000000080018002800480088008800FC000800080009000000000 +248C:00000000000000000FC00800080008000F800040004000400840079000000000 +248D:000000000000000003800400080008000F800840084008400840079000000000 +248E:00000000000000000FC000400040008000800080010001000100011000000000 +248F:0000000000000000078008400840084007800840084008400840079000000000 +2490:0000000000000000078008400840084007C00040004000400080071000000000 +2491:00000000000000001060309051081108110811081108110810907C6200000000 +2492:00000000000000001020306050A01020102010201020102010207CFA00000000 +2493:000000000000000010F0310851081008103010401080110011007DFA00000000 +2494:000000000000000010F0310851081008107010081008110811087CF200000000 +2495:000000000000000010103030505010901110111011F8101010107C1200000000 +2496:000000000000000011F831005100110011F010081008100811087CF200000000 +2497:0000000000000000107030805100110011F011081108110811087CF200000000 +2498:000000000000000011F8300850081010101010101020102010207C2200000000 +2499:000000000000000010F031085108110810F011081108110811087CF200000000 +249A:000000000000000010F031085108110810F810081008100810107CE200000000 +249B:00000000000000003C304248428402840C8410842084408440487E3100000000 +249C:00000000000010082004200443C24422402243E244224422246423A410080000 +249D:00000000000014082404240445C246224422442244224422262425C410080000 +249E:00000000000010082004200443C244224402440244024402242423C410080000 +249F:00000000000010282024202443A244624422442244224422246423A410080000 +24A0:00000000000010082004200443C24422442247E244024402242423C410080000 +24A1:00000000000010C821042104410247C241024102410241022104210410080000 +24A2:00000000000010082004202443A24442444244424382420223C42424142803C0 +24A3:00000000000014082404240445C2462244224422442244222424242410080000 +24A4:000000000000111021082008430441044104410441044104210827C810100000 +24A5:00000000000010502048200840C4404440444044404440442048204814900300 +24A6:0000000000001408240424044442448245024602450244822444242410080000 +24A7:000000000000131021082108410441044104410441044104210827C810100000 +24A8:0000000000001004200220024761449144914491449144912492249210040000 +24A9:00000000000010082004200445C2462244224422442244222424242410080000 +24AA:00000000000010082004200443C244224422442244224422242423C410080000 +24AB:00000000000010082004200445C246224422442244224422262425C414080400 +24AC:00000000000010082004200443A244624422442244224422246423A410280020 +24AD:00000000000010082004200445C2462244224402440244022404240410080000 +24AE:00000000000010082004200443C244224402430240C24022242423C410080000 +24AF:00000000000010082104210447C241024102410241024102210420C410080000 +24B0:000000000000100820042004442244224422442244224422246423A410080000 +24B1:0000000000001008200420044422442244224242424242422184218410080000 +24B2:0000000000001004200220024411449144914491449144912492236210040000 +24B3:0000000000001008200420044422442242424182418242422424242410080000 +24B4:00000000000010082004200444224422442244224422426221A42024102803C0 +24B5:00000000000010082004200447E240224042408241024202240427E410080000 +24B6:07C0183020084104428482828442844287C28442444444442008183007C00000 +24B7:07C0183020084784444484428442878284428442444447842008183007C00000 +24B8:07C0183020084384444484428402840284028442444443842008183007C00000 +24B9:07C0183020084704448484428442844284428442448447042008183007C00000 +24BA:07C01830200847C4440484028402878284028402440447C42008183007C00000 +24BB:07C01830200847C4440484028402878284028402440444042008183007C00000 +24BC:07C018302008438444448442840285C28442844244C443442008183007C00000 +24BD:07C018302008444444448442844287C284428442444444442008183007C00000 +24BE:07C01830200847C4410481028102810281028102410447C42008183007C00000 +24BF:07C01830200843E4408480828082808280828482448443042008183007C00000 +24C0:07C0183020084444444484828502860285028482444444442008183007C00000 +24C1:07C0183020084404440484028402840284028402440447C42008183007C00000 +24C2:07C0183020084444444486C286C2854285428442444444442008183007C00000 +24C3:07C01830200840044444864286428542854284C244C444442008183007C00000 +24C4:07C0183020084384444484428442844284428442444443842008183007C00000 +24C5:07C0183020084784444484428442878284028402440444042008183007C00000 +24C6:07C018302008438444448442844284428442854246C443842068183007C00000 +24C7:07C0183020084784444484428442878285028482448444442008183007C00000 +24C8:07C0183020084384444484428402838280428442444443842008183007C00000 +24C9:07C0183020084FE4410481028102810281028102410441042008183007C00000 +24CA:07C0183020084444444484428442844284428442444443842008183007C00000 +24CB:07C0183020084824482484428442844282828282410441042008183007C00000 +24CC:07C0183020084444444484428542854286C286C2444444442008183007C00000 +24CD:07C0183020084444444482828282810282828282444444442008183007C00000 +24CE:07C0183020084824482484428442828281028102410441042008183007C00000 +24CF:07C01830200847C4404480428082810282028402440447C42008183007C00000 +24D0:07C018302008400443848442804283C2844284C2434440042008183007C00000 +24D1:07C0183024084404440485828642844284428442464445842008183007C00000 +24D2:07C0183020084004438484428402840284028442438440042008183007C00000 +24D3:07C01830204840444044834284C284428442844244C443442008183007C00000 +24D4:07C018302008400443848442844287C284028442438440042008183007C00000 +24D5:07C01830200840C441048102810287C281028102410441042108183007C00000 +24D6:07C0183020084044434484828482830282028382444444442388183007C00000 +24D7:07C0183024084404440485828642844284428442444444442008183007C00000 +24D8:07C0183021084104400483028102810281028102410447C42008183007C00000 +24D9:07C0183020484044400480C28042804280428042404444842308183007C00000 +24DA:07C0183020084404440484828502860286028502448444442008183007C00000 +24DB:07C0183020084304410481028102810281028102410447C42008183007C00000 +24DC:07C01830200840044EC489228922892289228922492440042008183007C00000 +24DD:07C0183020084004458486428442844284428442444440042008183007C00000 +24DE:07C0183020084004438484428442844284428442438440042008183007C00000 +24DF:07C0183020084004458486428442844284428642458444042408183007C00000 +24E0:07C0183020084004434484C2844284428442844244C443442048183007C00000 +24E1:07C0183020084004458486428442840284028402440440042008183007C00000 +24E2:07C0183020084004438484428402838280428442438440042008183007C00000 +24E3:07C0183020084104410487C28102810281028102410440C42008183007C00000 +24E4:07C01830200840044444844284428442844284C2434440042008183007C00000 +24E5:07C0183020084004444484428282828282828102410440042008183007C00000 +24E6:07C018302008400448248922892289228922892246C440042008183007C00000 +24E7:07C0183020084004444484428282810282828442444440042008183007C00000 +24E8:07C0183020084004444484428442844282C28142404440442388183007C00000 +24E9:07C018302008400447C48042808281028202840247C440042008183007C00000 +24EA:07C0183020084104428484428442844284428442428441042008183007C00000 +24EB:07C01FF03FF87FFC7BBCF33EEABEFBBEFBBEFBBE600C7FFC3FF81FF007C00000 +24EC:07C01FF03FF87FFC7B9CF36EEBEEFBDEFBBEFB7E600C7FFC3FF81FF007C00000 +24ED:07C01FF03FF87FFC7B9CF36EEBEEFBDEFBEEFB6E609C7FFC3FF81FF007C00000 +24EE:07C01FF03FF87FFC7BECF3CEEBAEFB6EFB06FBEE60EC7FFC3FF81FF007C00000 +24EF:07C01FF03FF87FFC7B0CF37EEB7EFB1EFBEEFB6E609C7FFC3FF81FF007C00000 +24F0:000007C01FF03FF83B88737C6B7C7B1C7B6C7B6C20983FF81FF007C000000000 +24F1:000007C01FF03FF83B0873EC6BEC7BDC7BDC7BBC20B83FF81FF007C000000000 +24F2:000007C01FF03FF83B98736C6B6C7B9C7B6C7B6C20983FF81FF007C000000000 +24F3:07C01FF03FF87FFC7B9CF36EEB6EFB8EFBEEFBEE609C7FFC3FF81FF007C00000 +24F4:07C01FF03FF87FFC739CED6EFD6EFB6EF76EEF6E619C7FFC3FF81FF007C00000 +24F5:07E0181823C44C32500A9089A185A085A08591C9500A4C3223C4181807E00000 +24F6:07E0181823C44C32500A9189A045A085A10591C9500A4C3223C4181807E00000 +24F7:07E0181823C44C32500A9189A045A185A0459189500A4C3223C4181807E00000 +24F8:07E0181823C44C32500A9289A285A3C5A0859089500A4C3223C4181807E00000 +24F9:07E0181823C44C32500A91C9A105A185A0459189500A4C3223C4181807E00000 +24FA:07E0181823C44C32500A9189A205A385A2459189500A4C3223C4181807E00000 +24FB:07E0181823C44C32500A91C9A045A045A0859089500A4C3223C4181807E00000 +24FC:07E0181823C44C32500A9189A245A185A2459189500A4C3223C4181807E00000 +24FD:07E0181823C44C32500A9189A245A1C5A0459189500A4C3223C4181807E00000 +24FE:07E0181823C44C32500A9269A695A295A2959769500A4C3223C4181807E00000 +24FF:07C01FF03FF87EFC7D7CFBBEFBBEFBBEFBBEFBBE7D7C7EFC3FF81FF007C00000 +2500:00000000000000FF0000000000000000 +2501:00000000000000FFFF00000000000000 +2502:08080808080808080808080808080808 +2503:18181818181818181818181818181818 +2504:00000000000000DB0000000000000000 +2505:00000000000000DBDB00000000000000 +2506:08080808000008080808000008080808 +2507:18181818000018181818000018181818 +2508:00000000000000AA0000000000000000 +2509:00000000000000AAAA00000000000000 +250A:08080800080808000808080008080800 +250B:18181800181818001818180018181800 +250C:000000000000000F0808080808080808 +250D:000000000000000F0F08080808080808 +250E:000000000000001F1818181818181818 +250F:000000000000001F1F18181818181818 +2510:00000000000000F80808080808080808 +2511:00000000000000F8F808080808080808 +2512:00000000000000F81818181818181818 +2513:00000000000000F8F818181818181818 +2514:080808080808080F0000000000000000 +2515:080808080808080F0F00000000000000 +2516:181818181818181F0000000000000000 +2517:181818181818181F1F00000000000000 +2518:08080808080808F80000000000000000 +2519:08080808080808F8F800000000000000 +251A:18181818181818F80000000000000000 +251B:18181818181818F8F800000000000000 +251C:080808080808080F0808080808080808 +251D:080808080808080F0F08080808080808 +251E:181818181818181F0808080808080808 +251F:080808080808081F1818181818181818 +2520:181818181818181F1818181818181818 +2521:181818181818181F1F08080808080808 +2522:080808080808081F1F18181818181818 +2523:181818181818181F1F18181818181818 +2524:08080808080808F80808080808080808 +2525:08080808080808F8F808080808080808 +2526:18181818181818F80808080808080808 +2527:08080808080808F81818181818181818 +2528:18181818181818F81818181818181818 +2529:18181818181818F8F808080808080808 +252A:08080808080808F8F818181818181818 +252B:18181818181818F8F818181818181818 +252C:00000000000000FF0808080808080808 +252D:00000000000000FFF808080808080808 +252E:00000000000000FF0F08080808080808 +252F:00000000000000FFFF08080808080808 +2530:00000000000000FF1818181818181818 +2531:00000000000000FFF818181818181818 +2532:00000000000000FF1F18181818181818 +2533:00000000000000FFFF18181818181818 +2534:08080808080808FF0000000000000000 +2535:08080808080808FFF800000000000000 +2536:08080808080808FF0F00000000000000 +2537:08080808080808FFFF00000000000000 +2538:18181818181818FF0000000000000000 +2539:18181818181818FFF800000000000000 +253A:18181818181818FF1F00000000000000 +253B:18181818181818FFFF00000000000000 +253C:08080808080808FF0808080808080808 +253D:08080808080808FFF808080808080808 +253E:08080808080808FF0F08080808080808 +253F:08080808080808FFFF08080808080808 +2540:18181818181818FF0808080808080808 +2541:08080808080808FF1818181818181818 +2542:18181818181818FF1818181818181818 +2543:18181818181818FFF808080808080808 +2544:18181818181818FF1F08080808080808 +2545:08080808080808FFF818181818181818 +2546:08080808080808FF1F18181818181818 +2547:18181818181818FFFF08080808080808 +2548:08080808080808FFFF18181818181818 +2549:18181818181818FFF818181818181818 +254A:18181818181818FF1F18181818181818 +254B:18181818181818FFFF18181818181818 +254C:00000000000000EE0000000000000000 +254D:00000000000000EEEE00000000000000 +254E:08080808080800000808080808080000 +254F:18181818181800001818181818180000 +2550:000000000000FF00FF00000000000000 +2551:14141414141414141414141414141414 +2552:0000000000000F080F08080808080808 +2553:000000000000001F1414141414141414 +2554:0000000000001F101714141414141414 +2555:000000000000F808F808080808080808 +2556:00000000000000FC1414141414141414 +2557:000000000000FC04F414141414141414 +2558:0808080808080F080F00000000000000 +2559:141414141414141F0000000000000000 +255A:14141414141417101F00000000000000 +255B:080808080808F808F800000000000000 +255C:14141414141414FC0000000000000000 +255D:141414141414F404FC00000000000000 +255E:0808080808080F080F08080808080808 +255F:14141414141414171414141414141414 +2560:14141414141417101714141414141414 +2561:080808080808F808F808080808080808 +2562:14141414141414F41414141414141414 +2563:141414141414F404F414141414141414 +2564:000000000000FF00FF08080808080808 +2565:00000000000000FF1414141414141414 +2566:000000000000FF00F714141414141414 +2567:080808080808FF00FF00000000000000 +2568:14141414141414FF0000000000000000 +2569:141414141414F700FF00000000000000 +256A:080808080808FF08FF08080808080808 +256B:14141414141414FF1414141414141414 +256C:141414141414F700F714141414141414 +256D:00000000000000030408080808080808 +256E:00000000000000E01008080808080808 +256F:08080808080810E00000000000000000 +2570:08080808080804030000000000000000 +2571:01010202040408081010202040408080 +2572:80804040202010100808040402020101 +2573:81814242242418181818242442428181 +2574:00000000000000F00000000000000000 +2575:08080808080808080000000000000000 +2576:000000000000000F0000000000000000 +2577:00000000000000000808080808080808 +2578:00000000000000F0F000000000000000 +2579:18181818181818180000000000000000 +257A:000000000000000F0F00000000000000 +257B:00000000000000001818181818181818 +257C:00000000000000FF0F00000000000000 +257D:08080808080808081818181818181818 +257E:00000000000000FFF000000000000000 +257F:18181818181818180808080808080808 +2580:FFFFFFFFFFFFFFFF0000000000000000 +2581:0000000000000000000000000000FFFF +2582:000000000000000000000000FFFFFFFF +2583:00000000000000000000FFFFFFFFFFFF +2584:0000000000000000FFFFFFFFFFFFFFFF +2585:000000000000FFFFFFFFFFFFFFFFFFFF +2586:00000000FFFFFFFFFFFFFFFFFFFFFFFF +2587:0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF +2588:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +2589:FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +258A:FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +258B:F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8 +258C:F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 +258D:E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0 +258E:C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 +258F:80808080808080808080808080808080 +2590:0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F +2591:88228822882288228822882288228822 +2592:AA55AA55AA55AA55AA55AA55AA55AA55 +2593:EEBBEEBBEEBBEEBBEEBBEEBBEEBBEEBB +2594:FFFF0000000000000000000000000000 +2595:01010101010101010101010101010101 +2596:0000000000000000F0F0F0F0F0F0F0F0 +2597:00000000000000000F0F0F0F0F0F0F0F +2598:F0F0F0F0F0F0F0F00000000000000000 +2599:F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFF +259A:F0F0F0F0F0F0F0F00F0F0F0F0F0F0F0F +259B:FFFFFFFFFFFFFFFFF0F0F0F0F0F0F0F0 +259C:FFFFFFFFFFFFFFFF0F0F0F0F0F0F0F0F +259D:0F0F0F0F0F0F0F0F0000000000000000 +259E:0F0F0F0F0F0F0F0FF0F0F0F0F0F0F0F0 +259F:0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFF +25A0:000000000000007F7F7F7F7F7F7F0000 +25A1:0000000000007F41414141417F000000 +25A2:0000000000003E41414141413E000000 +25A3:0000000000007F415D5D5D417F000000 +25A4:0000000000007F417F417F417F000000 +25A5:0000000000007F55555555557F000000 +25A6:0000000000007F557F557F557F000000 +25A7:0000000000007F53496553497F000000 +25A8:0000000000007F65495365497F000000 +25A9:0000000000007F556B556B557F000000 +25AA:00000000000000003C3C3C3C00000000 +25AB:0000000000003C24243C000000000000 +25AC:0000000000007F7F7F7F000000000000 +25AD:0000000000007F41417F000000000000 +25AE:00000000003C3C3C3C3C3C3C00000000 +25AF:00000000003C24242424243C00000000 +25B0:000000000000003F7EFC000000000000 +25B1:000000000000003F42FC000000000000 +25B2:000000000018183C3C7E7E0000000000 +25B3:000000000018182424427E0000000000 +25B4:0000000000000000183C7E0000000000 +25B5:000000000000000018247E0000000000 +25B6:00000000000060787E7E786000000000 +25B7:00000000000060584646586000000000 +25B8:00000000000000303C3C300000000000 +25B9:00000000000000302C2C300000000000 +25BA:0000000000000060787E786000000000 +25BB:00000000000000605846586000000000 +25BC:00000000007E7E3C3C18180000000000 +25BD:00000000007E42242418180000000000 +25BE:00000000000000007E3C180000000000 +25BF:00000000000000007E24180000000000 +25C0:000000000000061E7E7E1E0600000000 +25C1:000000000000061A62621A0600000000 +25C2:000000000000000C3C3C0C0000000000 +25C3:000000000000000C34340C0000000000 +25C4:00000000000000061E7E1E0600000000 +25C5:00000000000000061A621A0600000000 +25C6:0000000000081C3E7F3E1C0800000000 +25C7:00000000000814224122140800000000 +25C8:000000000008142A5D2A140800000000 +25C9:00000000001C22595D4D221C00000000 +25CA:00000018182424424224241818000000 +25CB:00000000001C22414141221C00000000 +25CC:00000000001400410041001400000000 +25CD:00000000001C36555555361C00000000 +25CE:00000000001C22495549221C00000000 +25CF:00000000001C3E7F7F7F3E1C00000000 +25D0:00000000001C32717171321C00000000 +25D1:00000000001C26474747261C00000000 +25D2:00000000001C2241417F3E1C00000000 +25D3:00000000001C3E7F4141221C00000000 +25D4:00000000001C2E4F4F41221C00000000 +25D5:00000000001C2647477F3E1C00000000 +25D6:00000000001838787878381800000000 +25D7:00000000000C0E0F0F0F0E0C00000000 +25D8:FFFFFFFFFFFFE7C3C3E7FFFFFFFFFFFF +25D9:FFFFFFFFFFE7DBBDBDDBE7FFFFFFFFFF +25DA:FFFFFFFFFFE7DBBD0000000000000000 +25DB:0000000000000000BDDBE7FFFFFFFFFF +25DC:00000000001820404000000000000000 +25DD:00000000000C02010100000000000000 +25DE:00000000000000000101020C00000000 +25DF:00000000000000004040201800000000 +25E0:00000000001C22414100000000000000 +25E1:00000000000000004141221C00000000 +25E2:0101030307070F0F1F1F3F3F7F7FFFFF +25E3:8080C0C0E0E0F0F0F8F8FCFCFEFEFFFF +25E4:FFFFFEFEFCFCF8F8F0F0E0E0C0C08080 +25E5:FFFF7F7F3F3F1F1F0F0F070703030101 +25E6:00000000000000384444443800000000 +25E7:00000000007E727272727E0000000000 +25E8:00000000007E4E4E4E4E7E0000000000 +25E9:00000000007E7A7262427E0000000000 +25EA:00000000007E42464E5E7E0000000000 +25EB:00000000007F494949497F0000000000 +25EC:0000000000081414222A417F00000000 +25ED:00000000000018183434727E00000000 +25EE:000000000018182C2C4E4E7E00000000 +25EF:0000000001C00630080810041004200220022002100410040808063001C00000 +25F0:00000000000000007E527242427E0000 +25F1:00000000000000007E424272527E0000 +25F2:00000000000000007E42424E4A7E0000 +25F3:00000000000000007E4A4E42427E0000 +25F4:0000000000003C5291F18181423C0000 +25F5:0000000000003C428181F191523C0000 +25F6:0000000000003C4281818F894A3C0000 +25F7:0000000000003C4A898F8181423C0000 +25F8:00007E44485060400000000000000000 +25F9:00007E22120A06020000000000000000 +25FA:00000000000000000040605048447E00 +25FB:0000000000000000007E424242427E00 +25FC:00000000000000007E7E7E7E7E7E0000 +25FD:000000000000000000003C24243C0000 +25FE:00000000000000007C7C7C7C7C000000 +25FF:00000000000000000002060A12227E00 +2600:0000084922001C3E3E1C002249080000 +2601:000000002076FF7E0000000000000000 +2602:000000001C3E7F080808081000000000 +2603:8BC803C02FF104248A5028120A504994042147E008101088781E1088081007E0 +2604:00000022222424282902304848300000 +2605:000000000008087F1C36220000000000 +2606:00000000080877222A36220000000000 +2607:00000000000204081020100A060E0000 +2608:0000000000007E424448504A464E0000 +2609:0000000000003C4281999981423C0000 +260A:00000000000018242466A54200000000 +260B:00000000000042A56624241800000000 +260C:00000000000004083048483000000000 +260D:00000000000609090608304848300000 +260E:000000000000003E63002A637F000000 +260F:0000000000003E415D3E49417F000000 +2610:000000003FF820082008200820082008200820082008200820083FF800000000 +2611:000000003FF8200820082038286828C829882B082E082C0820083FF800000000 +2612:000000003FFC200420042C34266423C4218423C426642C3420043FFC00000000 +2613:00000000222214140808141422220000 +2614:055004411C3E7F080808081000000000 +2615:000009201240124009200920124000001FC83FF42FD4201420381FC000000000 +2616:00000100028004400820101020082008200820082008200820083FF800000000 +2617:00000100038007C00FE01FF03FF83FF83FF83FF83FF83FF83FF83FF800000000 +2618:00000000028007C007C03398793C3FF8793C3118020002000200040008000000 +2619:00000000000401C823E847E84FE87FD83FDC0FE407E403E401C4000800000000 +261A:00000000000000007E1F1F0E00000000 +261B:00000000000000003F7C7C3800000000 +261C:00000000000000007E11190E00000000 +261D:000000000004041C3424241800000000 +261E:00000000000000003F444C3800000000 +261F:00000000000000182424341C04040000 +2620:0000E7A57E81A5A5815A5A42BDE70000 +2621:000000003804040808101020201C0000 +2622:07E0181824245C3A5C3ABE7DBE7DBE7D8181818183C143C247E223C4181807E0 +2623:00000000044008201010101013900C603EF84444854283820280044018300000 +2624:0000030001007FFC23881FF001000D6011100FE0092007C00540038005400100 +2625:0000000000001C2214083E0808080000 +2626:0000000000103810FE1010701C100000 +2627:000000001C12121C1054381038540000 +2628:0000000000103810FE10101010100000 +2629:000000000000001C08497F49081C0000 +262A:000000001E2140C2C7C240211E000000 +262B:000000000000054006C0000015502928292829282548139007C0010000000000 +262C:000000000000008002A0049009C81AAC1AAC19CC1C9C1BEC11C402A000800000 +262D:0000000000000C0239790D3E63C10000 +262E:0000000000003E4949495D6B493E0000 +262F:07E018182004400240029C31BE31FF03E783E7C7FFFF7FFE7FFE3FFC1FF807E0 +2630:00000000000000007FFC7FFC000000007FFC7FFC000000007FFC7FFC00000000 +2631:00000000000000007C7C7C7C000000007FFC7FFC000000007FFC7FFC00000000 +2632:00000000000000007FFC7FFC000000007C7C7C7C000000007FFC7FFC00000000 +2633:00000000000000007C7C7C7C000000007C7C7C7C000000007FFC7FFC00000000 +2634:00000000000000007FFC7FFC000000007FFC7FFC000000007C7C7C7C00000000 +2635:00000000000000007C7C7C7C000000007FFC7FFC000000007C7C7C7C00000000 +2636:00000000000000007FFC7FFC000000007C7C7C7C000000007C7C7C7C00000000 +2637:00000000000000007C7C7C7C000000007C7C7C7C000000007C7C7C7C00000000 +2638:00000000000000493E3E773E3E490000 +2639:0000003C4281A58199A581423C000000 +263A:000000003C4281A581A599423C000000 +263B:000000003C7EFFDBFFDBE77E3C000000 +263C:0000000000492A1C771C2A4900000000 +263D:00000000380C0605050505060C380000 +263E:000000000E18305050505030180E0000 +263F:00000022221C2222221C083E08080000 +2640:00000000001C2222221C083E08080000 +2641:00000008083E08081C2222221C000000 +2642:00000000000703053844444438000000 +2643:000000000202023A46060A7E02020000 +2644:00000000202070202C32222424240000 +2645:00000000006B2A3E2A6B081C141C0000 +2646:000000000859CB4949493E083E080800 +2647:000000007C4242427C404040407E0000 +2648:00000000225514140808080808080000 +2649:0000000000000041221C2222221C0000 +264A:00000000413E1414141414143E410000 +264B:0000000000003E4948300609493E0000 +264C:00000000001C22221274949465020000 +264D:00000000547C555755555555067C0000 +264E:000000000000001C222277007F000000 +264F:00000000547C54545454545455030000 +2650:000000000000000F0345291028440000 +2651:00000000314E8408103C62A2A21C0000 +2652:0000000000002A5400002A5400000000 +2653:0000000000424224247E242442420000 +2654:000000081C08775D49492A7F417F0000 +2655:000000000808492A2A5D2A3E223E0000 +2656:0000000000557F4141222241417F0000 +2657:000000000814222222221477417F0000 +2658:000000021E2242423A122242427E0000 +2659:000000000000182424182424427E0000 +265A:000000081C08775D49492A7F7F7F0000 +265B:000000000808492A2A5D2A3E3E3E0000 +265C:0000000000557F7F7F3E3E7F7F7F0000 +265D:00000000081C3622363E1C7F7F7F0000 +265E:000000021E367E7E3E1E3E7E7E7E0000 +265F:000000000000183C3C183C3C7E7E0000 +2660:0000000008081C3E7F7F7F3E081C0000 +2661:00000000003649414141221408080000 +2662:00000000080814142222141408080000 +2663:000000001C1C1C087F7F6B08081C0000 +2664:00000000080814224141413E081C0000 +2665:0000000000367F7F7F7F3E1C08080000 +2666:0000000008081C1C3E3E1C1C08080000 +2667:000000001C141C08775D6B08081C0000 +2668:000000085192929249494952817E0000 +2669:00000000080808080808083878700000 +266A:00000000080C0A0A0808083878700000 +266B:0000001C171111111171F1E70F0E0000 +266C:0000001C17111D171171F1E70F0E0000 +266D:000040404040405C6646444850600000 +266E:00000040404E7E72424E7E7202020000 +266F:00000424263E7C6424263E7C64242000 +2670:00000000140808493E49080808140000 +2671:000000001C14086B5D6B080814080000 +2672:03C005200A9812480AD004303004480A8C115009A005AE26525852861E5C0020 +2673:0380044004400820002839181B382900210843844004802280427EFC00400020 +2674:038004400440082000283B1818B82900220843844004802280427EFC00400020 +2675:038004400440082000283B1818B82B00208843044004802280427EFC00400020 +2676:038004400440082000283A981AB82B80208840844004802280427EFC00400020 +2677:038004400440082000283B981A382B00208843044004802280427EFC00400020 +2678:0380044004400820002839981A382B80224841844004802280427EFC00400020 +2679:038004400440082000283B9818B82900210841044004802280427EFC00400020 +267A:03800440044008200028381818382800200840044004802280427EFC00400020 +267B:03C005E00EF81E780EF004303004780EFC1F700FE007EE265E785EFE1E7C0020 +267C:07E01FF83E7C7DBE7BDEFF8FF7DFE7FFF3EFF7EFEFF76FB6710E3FBC1FF807E0 +267D:07E018182184424244228071882198018C1188119009504A4EF22044181807E0 +267E:00000000000003800C601010200826C84924492426C8200810100C6003800000 +267F:0000000000000600060004000780040017E0202020102050108C0F0000000000 +2680:00000000000000001FF010101010101011101010101010101FF0000000000000 +2681:00000000000000001FF010101010141010101050101010101FF0000000000000 +2682:00000000000000001FF010101410101011101010105010101FF0000000000000 +2683:00000000000000001FF010101450101010101010145010101FF0000000000000 +2684:00000000000000001FF010101450101011101010145010101FF0000000000000 +2685:00000000000000001FF010101450101014501010145010101FF0000000000000 +2686:00000000000003C0042008101008200420642064200410080810042003C00000 +2687:00000000000003C0042008101008200426642664200410080810042003C00000 +2688:00000000000003C007E00FF01FF83FFC3F9C3F9C3FFC1FF80FF007E003C00000 +2689:00000000000003C007E00FF01FF83FFC399C399C3FFC1FF80FF007E003C00000 +268A:000000000000000000000000000000007FFC7FFC000000000000000000000000 +268B:000000000000000000000000000000007C7C7C7C000000000000000000000000 +268C:0000000000000000000000007FFC7FFC000000007FFC7FFC0000000000000000 +268D:0000000000000000000000007C7C7C7C000000007FFC7FFC0000000000000000 +268E:0000000000000000000000007FFC7FFC000000007C7C7C7C0000000000000000 +268F:0000000000000000000000007C7C7C7C000000007C7C7C7C0000000000000000 +2690:000000704E4242724E40404040400000 +2691:000000707E7E7E7E4E40404040400000 +2692:000008325C7C3E7E7C1FF8277443228101000280044008201010200840040000 +2693:000000000380044004400380010007C001002108711C210811100FE000000000 +2694:0000400420081010082004400280010002800440282810102828400400000000 +2695:0000010001000FF0113011000FC00120012007C0090007800140038001000000 +2696:000000000000010011107FFC39385454545492929292FEFE7C7C383800000000 +2697:000000000000000003E007F00BF80BF811F010E0100001F00248044400000000 +2698:0000000003800440044004400380010039383D781D700D600380010001000000 +2699:000000000100210817D0082010101010711C10101010082017D0210801000000 +269A:00000100028039387FFCFD7E0540038001000100010001000100010000000000 +269B:018002400240742E8E7185A14E7235AC35AC4E7285A18E71742E024002400180 +269C:01000280044034584C648442B29ACAA61AB010101BB00AA03AB826C819300100 +269D:010002800440044008006BFC8802882260241810065000882108264818300000 +269E:30000C00030000C00030000C00003FFC0000000C003000C003000C0030000000 +269F:000C003000C003000C00300000003FFC000030000C00030000C00030000C0000 +26A0:000001000280028004400440092009201110111021082008410440047FFC0000 +26A1:0000000002040810207E040810204000 +26A2:000000000000000000000EE011102288228811100EE004400EE0044000000000 +26A3:00000000000001C000C001400E38111823A825401A200C200440038000000000 +26A4:000000380018002801C0022007100A90116010C0088007000200070002000000 +26A5:0000000000000000007000300050038004400820082004400380010003800100 +26A6:00000000000000000038001800A800400EA011002080208011000E0000000000 +26A7:000000000000E00EC006A80A10102BA004400820082004400380010003800100 +26A8:00001038541038103844828244380000 +26A9:000000000000000000000000000000001C002208414441FE414422081C000000 +26AA:00000000000000003844828282443800 +26AB:0000000000000000387CFEFEFE7C3800 +26AC:0000000000000000001C2222221C0000 +26AD:000000000000000000000000000000000EE011102288228811100EE000000000 +26AE:0000000000000000000000000000000000800EB811C411C411C40EB800800000 +26AF:0000000000000000000000000000000000003838444447C44444383800000000 +26B0:000000000C0013C0203E4002400240024002603E53C22E3E1BC00C0000000000 +26B1:000007C002800FE010102008200810101010101008200820082007C000000000 +26B2:00000000001C2222221C080808080000 +26B3:0000000000384402020418107C100000 +26B4:0000000010284482442810107C100000 +26B5:00000000925438FE385492107C100000 +26B6:0000000000000100010001000100393804400280793C04400280010000000000 +26B7:00000012141814121038444444380000 +26B8:000000001C38707070381C083E080000 +26B9:000000000000422418FF182442000000 +26BA:00000000000044444428282810FE0000 +26BB:000000000000FE102828284444440000 +26BC:0000000000007E4242424A7E207E0000 +26BD:0000000001C007300F38173C100421C223E239CE1C1C180C09C807F001C00000 +26BE:0000000001C006300C1812241004214220022142100412240C18063001C00000 +26BF:000000007FFC4004438444444444438441044104410441C4410440047FFC0000 +26C0:0000000000000000000007E0181821842184381C2FF42A541A5807E000000000 +26C1:0000000007E0181821842184381C2FF42A543A5C2FF42A541A5807E000000000 +26C2:00000000000000000FF0381C67E65E7A5E7A47E2500A55AA65A6381C0FF00000 +26C3:00000FF0381C67E65E7A5E7A47E2500A55AA45A2500A55AA65A6381C0FF00000 +26C4:03C003C00FF004200A5008100A500990042007E008101088781E1088081007E0 +26C5:00000000000001200148001000C0072C09A010602010201010600F8000000000 +26C6:0000222244440088100022224444008810002222444400801012222444480000 +26C7:8BC803C02FF107E48DB02FF20DB04E7407E147E00FF01F787FFE1F780FF007E0 +26C8:0000072008CC10B22102208211040A1807E02000444000801010222044400000 +26C9:00003FF820082008200820082008200820081010082004400280010000000000 +26CA:00003FF83FF83FF83FF83FF83FF83FF83FF83FF81FF00FE00380010000000000 +26CB:0000000000007FF04510489050506030401060305050489045107FF000000000 +26CC:0000000000000000202010400880040002000100088010402020000000000000 +26CD:00003C00420042008100FF00FF00FF0042004200004000A00110020804040FFE +26CE:000000000000000000000440044004501E48254824F014400440066000000000 +26CF:000040C027001C001C003E003300218040C0406000300018000C000600000000 +26D0:000000E0031005C803F804E8003000401C00218022001AC002203C2000000000 +26D1:0000000007001DC038E07DF0FFF84010401040102020202018C0070000000000 +26D2:00000000070018C020205050489081088208840848905050202018C007000000 +26D3:000022102A381C5408441C442A54223822102A381C5408441C442A5422380010 +26D4:00000000000007001FC03FE07FF07FF0C018C0187FF07FF03FE01FC007000000 +26D5:000000000C301E302D300C3008E00BC00A000BC008E00C300CB40C780C300000 +26D6:00000000018003C007E00BD011D82ADC7BDE3B541B880FD007E003C001800000 +26D7:0000018002400420081014282E245522842144AA247410280810042002400180 +26D8:0000000007FC07FC07FC0FFC1FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC00000000 +26D9:00000000180619061906190630066106C106C106C006C106C106C10600000000 +26DA:00000000781E781E700E600600000000000000006006700E781E781E00000000 +26DB:00000000000000001FF018300C600C6006C007C0038003800100010000000000 +26DC:00000000180318431843184330036043C043C043C403C443C443C44300000000 +26DD:0000000000003FF83018282824482288210822882448282830183FF800000000 +26DE:00000000FDF8F8F8E038D018C818840802008108C098C058E038F8F8FDF80000 +26DF:000000007FF07FF07FFC7FF27FF27FFE7FFE7FFE6FF657EA381C100800000000 +26E0:00007FFE3E021C42084200020042004200020042004200020042004200020000 +26E1:0000400060007000780070006000400040804040422046104E085E047FFE0000 +26E2:00000010387C10107C82BABA827C0000 +26E3:00000100193019300100010003800C60082010101010101008200C6003800000 +26E4:0000010001000280028002807FFC244814500C600AA0092016D0183020080000 +26E5:0000010001000280028000807F5C2048141008600A00092014D0183020080000 +26E6:00000100010002800280020075FC240810500C2000A009201650183020080000 +26E7:00002008183016D009200AA00C60145024487FFC028002800280010001000000 +26E8:0000000000003FF02010231023102FD02FD023102310201030300CC003000000 +26E9:00000000FFFE1010101010101FF0101010101010101010101010101000000000 +26EA:0100010007C001000100038007C01FF07C7C3838339837D837D837D800000000 +26EB:0000000000000F80088078F04010401040104010401040104010401000000000 +26EC:000000000000000000000180018000000000000000000C300C30000000000000 +26ED:000000000000010011100BA0044008203838082004400BA01110010000000000 +26EE:000000000000010011100BA004440824783C482044400BA01110010000000000 +26EF:000000000000010011100BA004400BA03BB80BA004400BA01110010000000000 +26F0:00000000000000000100028004600410081813F83FFC3FFC7FFE7FFE00000000 +26F1:000007E01818282447E2791E41020200020002000400040004007FFE7FFE0000 +26F2:00001450228842844004438447C407C000007FFC3FF80FE00FE01FF03FF80000 +26F3:0000018001E001F8010001000100010001003D787D7CFC7E7EFC3FF807C00000 +26F4:0000000003000300030007E00A5012482248FFFC3FF81FF80FF0000000000000 +26F5:000001000180014005400D20152025104510FDF80100FFFC3FF81FF80FF00000 +26F6:0000381C400240024002000000000000000000000000400240024002381C0000 +26F7:0000000038003800380006000E207FF01C201C0C0E300FC003001C0000000000 +26F8:0000000000000000000000F000F000F000F01FF03FF03FE008403FF800000000 +26F9:0000038003800380000003FC07800B80138C238C038006C006C00C600C60783C +26FA:0000060005000E800E400E201F101F081F043F823F84318871C871D071E00000 +26FB:0000000007C01830200830180820044004400440082030182008183007C00000 +26FC:00000000010001000100010007C00000000010101010101010107C7C00000000 +26FD:000000000F801FD8104410421FF21FCA1FCA1FCA1FCA1FC41FC07FF000000000 +26FE:00007FFE7FFE7006701A701A701A7006780E7C1E4FF247E26006781E7FFE0000 +26FF:000000007FFC400440047FFC7FFC400440047FFC400040004000400040000000 +2700:0000000038047C1E6C3C7F783FF003E03FF07F786C3C7C1E3804000000000000 +2701:000038007C006C007C003C000E007FFCFFFED9C0F8E070000000000000000000 +2702:0000000038067C1C6C387F703FE003C03FE07F706C387C1C3806000000000000 +2703:00000000000000007000F8E0D9C0FFFE7FFC0E003C007C006C007C0038000000 +2704:00000000700C8832AE4481887910062078508188AE448832700C000000000000 +2705:00000000000000000004000A001200242048509051202A40248011000E000000 +2706:07C01830200841C447E48FF28F729E629C029F024F0446042008183007C00000 +2707:07C01930238843844104838287C287C287C28BA25C7458342008183007C00000 +2708:000008000F00060007C0C380E3C07FFE7FFEE3C0C38007C006000F0008000000 +2709:00000000000000007FFE6006500A499247E247E24992500A60067FFE00000000 +270A:000000000000000003600C90149035F8550454E454C43704280810100FE00000 +270B:00000A801540154035405540554C5552402240044008201010100FE000000000 +270C:18302448228812901110092008207CFC92829272922292427C0420081FF00000 +270D:00000008001C003803F70CF511CD238547056FE512052FFD7005600700000000 +270E:000000001800260055004A80714028A014500A28052802C8011800F800000000 +270F:00000000000000003FF050288FF4A8168FF450283FF000000000000000000000 +2710:0000000000F8011802C805280A28145028A071404A8055002600180000000000 +2711:000000000000000000F07908866C80FE866C790800F000000000000000000000 +2712:000000000000000000E079F0FF38FF0EFF3879F000E000000000000000000000 +2713:0000000000000000000000040008001040204040208021001200140008000000 +2714:00000000000000000004000E401CE038E07070E071C03B803F001E000C000000 +2715:00000000101038381C700EE007C0038007C00EE01C7038381010000000000000 +2716:101038387C7CFEFE7FFC3FF81FF00FE01FF03FF87FFCFEFE7C7C383810100000 +2717:00006018306031C01B000E000E001B00198030C0306060306018200000000000 +2718:00006018707031E03B801F000E001F001B8039C030E070706038601020000000 +2719:07C00440054005400540FD7E8102BFFA8102FD7E054005400540044007C00000 +271A:07C007C007C007C007C0FFFEFFFEFFFEFFFEFFFE07C007C007C007C007C00000 +271B:038003800380038003800380FC7EFC7EFC7E0380038003800380038003800000 +271C:07C007C007C007C007C0F83EF83EF83EF83EF83E07C007C007C007C007C00000 +271D:000000000380038003801FF01FF01FF003800380038003800380000000000000 +271E:078004C004C004C07CF8400C400C7CFC3CFC04C004C004C004C007C003C00000 +271F:00000FE008207BBC43845FF45FF45FF443847BBC0BA00BA00BA008200FE00000 +2720:00000FF803E021C221C231C63FFE3FFE3FFE31C621C221C203E00FF800000000 +2721:000000000100028004407FFC244818300820183024487FFC0440028001000000 +2722:038007C007C003800380610CF93EFFFEF93E610C0380038007C007C003800000 +2723:038007C007C007C00380711CF93EFFFEF93E711C038007C007C007C003800000 +2724:07C00FE00FE007C0638CF39EFFFEFFFEFFFEF39E638C07C00FE00FE007C00000 +2725:0100038007C007C00100310C710EFFFF710E310C010007C007C0038001000000 +2726:01000380038007C007C01FF07FFCFFFE7FFC1FF007C007C00380038001000000 +2727:010002800280044004401830600C8002600C1830044004400280028001000000 +2728:0000040004000A00110060C011100A10042804C6002800100110028001000000 +2729:0000010002800280FC7E4004383808201010111026C828283018000000000000 +272A:07C01FF03EF87EFC7C7CC006F01EF83EF01EF11E67CC6FEC3FF81FF007C00000 +272B:0000010003800380FFFE7C7C383808201C701FF03EF838383018000000000000 +272C:0000010002800280FC7E438427C817D01390101027C828283018000000000000 +272D:0000010002801C70E10E4FE4238817D01450111022882C683018000000000000 +272E:0000010002801D70E38E5FF42FE817D016D0155022882C683018000000000000 +272F:00000100038005C0F9FE5D8C27B813F00FD01D9019D032E82C78301800000000 +2730:00000100028002C0FC7E4007383E083C1010111827C82F2C3C1C180C00000000 +2731:00000380038003804384F39E3FFC0FF03FFCF39E438403800380038000000000 +2732:00000380038003804384F39E3C7C08303C7CF39E438403800380038000000000 +2733:01000100210811100D600FE007C0FFFE07C00FE00D6011102108010001000000 +2734:0100010021081BB01FF00FE01FE0FFFE1FF00FE01FF01BB02108010001000000 +2735:010002803CF82CC8269832B87D4C83864D7C3A9832C826683E78028001000000 +2736:000001000100010043843BB81FF00FE01FF03BB8438401000100010000000000 +2737:082008200C6006C0E6CE3BB81FF007C01FF03BB8E6CE06C00C60082008200000 +2738:08200C600EE00FE0FFFE7FFC3FF81FF03FF87FFCFFFE0FE00EE00C6008200000 +2739:010019300FE04FE47FFC3FF83FF8FFFE3FF83FF87FFC4FE40FE0193001000000 +273A:0920492425481550CBA637D80FE0FFFE0FE037D8CBA615502548492409200000 +273B:0100038003800380E10E711C0D6003800D60711CE10E03800380038001000000 +273C:038007C007C0638CF11EF39E3C7808203C78F39EF11E638C07C007C003800000 +273D:038007C007C0638CF39EF11E3D7807C03D78F11EF39E638C07C007C003800000 +273E:038004400440745CFC7EFEFE7FFC2108438487C28FE277DC07C007C003800000 +273F:038007C00FE077DCFFFEFC7EF01E701C18303EF87FFC7EFC7EFC3C7800000000 +2740:038004400920793C8542B39A8FE26FEC17D027C84924529442843C7800000000 +2741:03803C78454451144D646FEC86C2BC7A86C26FEC4D64511445443C7803800000 +2742:07C01EF03EF85C7467CCFC7EE82E8822E82EFC7E67CC5C743EF81EF007C00000 +2743:038004C004C074DCBCE69F9E4F3C3FF87264E672CE7A765C0640064003800000 +2744:0000010005400380C92631184D6403804D643118C92603800540010000000000 +2745:0000010005400BA0C92631184D6483824D643118C9260BA00540010000000000 +2746:09200D6007C01390C9263118ED6E0380ED6E3118C926111007C00D6009200000 +2747:000003C023C413C8099005A0700E7DBE7DBE700E05A0099013C823C403C00000 +2748:07C047C427C813900BA0E00EFBBEFBBEFBBEE00E0BA0139027C847C407C00000 +2749:038007C007C077DCFBBEF93E7D7C07C07D7CF93EFBBE77DC07C007C003800000 +274A:010003803398311809200540638CFFFE638C0540092031183398038001000000 +274B:0100038033983BB8193007C077DCFFFE77DC07C019303BB83398038001000000 +274C:0000000018303C781EF00FE007C007C00FE01EF03C7838381010000000000000 +274D:0000000003C00C301008100C2004200620062006100E100C0C3C03F801E00000 +274E:00007FFC6FEC47C4638C711C783C7C7C783C711C638C47C46FEC7FFC00000000 +274F:00001FF81008100E100E100E100E100E100E100E1FFE07FE07FE000000000000 +2750:000007FE07FE1FFE100E100E100E100E100E100E100E10081FF8000000000000 +2751:00001FF8100C100E100E100E100E100E100E100E1FFE0FFE07FE000000000000 +2752:000007FE0FFE1FFE100E100E100E100E100E100E100E100C1FF8000000000000 +2753:000003800FE01E70183018F001E0038003000300030000000300078007800300 +2754:07C0082013901450085000900120024002800280038000000380044004400380 +2755:038006C00C6008200C60044006C0028002800380000003800440044003800000 +2756:00000100038007C00380111038387C7C38381110038007C00380010000000000 +2757:018003C003C003C003C003C003C0018001800180018000000180018000000000 +2758:0180018001800180018001800180018001800180018001800180018001800000 +2759:03C003C003C003C003C003C003C003C003C003C003C003C003C003C003C00000 +275A:0FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000 +275B:01C007000C000F800FC00FE00FE00FE007C00380000000000000000000000000 +275C:038007C00FE00FE00FE007E003E0006001C00700000000000000000000000000 +275D:1C1C7070C0C0F8F8FCFCFEFEFEFEFEFE7C7C3838000000000000000000000000 +275E:38387C7CFEFEFEFEFEFE7E7E3E3E06061C1C7070000000000000000000000000 +275F:000000000000000007000F801FC01FC01FC00FC007C000C003800E0000000000 +2760:000000000000000038387C7CFEFEFEFEFEFE7E7E3E3E06061C1C707000000000 +2761:0000001000100FFE3FF87E107E103F100FF0001030307820786031C01F000000 +2762:03800FE01FF01FF01FF00FE00380010001000000038007C007C007C003800000 +2763:00000EE01FF01FF01FF00FE0038001000000038007C007C007C0038000000000 +2764:000000003C787EFCFFFEFFFEFFFE7FFC7FFC3FF81FF00FE007C0038001000000 +2765:1C003F007F807FC07FE07FF03FF81FFC3FF87FF07FE07FC07F803F001C000000 +2766:000000001F0421F801800E701FF81FF81FF80FF007E003C00180019000E00000 +2767:000000002000138017C417E217F21BFE3BFC27F027E027C02380100000000000 +2768:00000002040C1818181818180C040200 +2769:0000002010180C0C0C0C0C0C18102000 +276A:000000060C1C3838383838381C0C0600 +276B:00000030181C0E0E0E0E0E0E1C183000 +276C:000000060C0C1818303018180C0C0600 +276D:0000003018180C0C06060C0C18183000 +276E:000000070E0E1C1C38381C1C0E0E0700 +276F:0000007038381C1C0E0E1C1C38387000 +2770:0000000F1E1E3C3C78783C3C1E1E0F00 +2771:000000F078783C3C1E1E3C3C7878F000 +2772:00000004081010101010101010080400 +2773:00000020100808080808080808102000 +2774:0000001E38303018187018183030381E +2775:000000781C0C0C18180E18180C0C1C78 +2776:07C01FF03FF87EFC7CFCFAFEFEFEFEFEFEFEFEFE7EFC783C3FF81FF007C00000 +2777:07C01FF03FF87C7C7BBCFBBEFFBEFF7EFEFEFDFE7BFC783C3FF81FF007C00000 +2778:07C01FF03FF87C7C7BBCFBBEFFBEFE7EFFBEFBBE7BBC7C7C3FF81FF007C00000 +2779:07C01FF03FF87F7C7E7CFD7EFB7EF77EF03EFF7E7F7C7F7C3FF81FF007C00000 +277A:07C01FF03FF8783C7BFCFBFEFBFEF87EFFBEFFBE7BBC7C7C3FF81FF007C00000 +277B:07C01FF03FF87E7C7DFCFBFEFBFEF87EFBBEFBBE7BBC7C7C3FF81FF007C00000 +277C:07C01FF03FF8783C7FBCFFBEFF7EFF7EFF7EFEFE7EFC7EFC3FF81FF007C00000 +277D:07C01FF03FF87C7C7BBCFBBEFBBEFC7EFBBEFBBE7BBC7C7C3FF81FF007C00000 +277E:07C01FF03FF87C7C7BBCFBBEFBBEFC3EFFBEFFBE7F7C7CFC3FF81FF007C00000 +277F:07C01FF03FF87FFC7B9CF36EEB6EFB6EFB6EFB6E609C7FFC3FF81FF007C00000 +2780:07C0183020084084418483828182818281828182418441842008183007C00000 +2781:07C01830200847C44FE48C62806281C287028C024FE44FE42008183007C00000 +2782:07C01830200847C44FE48C62806281C280628C624FE447C42008183007C00000 +2783:07C01830200840E441E4836286628C629FF29FF2406440642008183007C00000 +2784:07C0183020084FE44FE48C028FC28FE280628C624FE447C42008183007C00000 +2785:07C01830200847C44FE48C028FC28FE28C628C624FE447C42008183007C00000 +2786:07C0183020084FE44FE48062806280C283828602460446042008183007C00000 +2787:07C01830200847C44FE48C628C6287C28C628C624FE447C42008183007C00000 +2788:07C01830200847C44FE48C628C628FE287E280624FE447C42008183007C00000 +2789:07C01830200844E44DF49DB28DB28DB28DB28DB24DF44CE42008183007C00000 +278A:07C01FF03FF87F7C7E7CFC7EFE7EFE7EFE7EFE7E7E7C7E7C3FF81FF007C00000 +278B:07C01FF03FF8783C701CF39EFF9EFE3EF8FEF3FE701C701C3FF81FF007C00000 +278C:07C01FF03FF8783C701CF39EFF9EFE3EFF9EF39E701C783C3FF81FF007C00000 +278D:07C01FF03FF87F1C7E1CFC9EF99EF39EE00EE00E7F9C7F9C3FF81FF007C00000 +278E:07C01FF03FF8701C701CF3FEF03EF01EFF9EF39E701C783C3FF81FF007C00000 +278F:07C01FF03FF8783C701CF3FEF03EF01EF39EF39E701C783C3FF81FF007C00000 +2790:07C01FF03FF8701C701CFF9EFF9EFF3EFC7EF9FE79FC79FC3FF81FF007C00000 +2791:07C01FF03FF8783C701CF39EF39EF83EF39EF39E701C783C3FF81FF007C00000 +2792:07C01FF03FF8783C701CF39EF39EF01EF81EFF9E701C783C3FF81FF007C00000 +2793:07C01FF03FF87B1C720CE24EF24EF24EF24EF24E720C731C3FF81FF007C00000 +2794:00001F800FC007E003F0FFF8FFFCFFFEFFFCFFF803F007E00FC01F8000000000 +2795:0000000003800380038003803FF83FF83FF80380038003800380000000000000 +2796:0000000000000000000000007FFC7FFC7FFC0000000000000000000000000000 +2797:0000000003800380038000007FFC7FFC7FFC0000038003800380000000000000 +2798:0000000008001C003E001E000F20032000E000F003F000700008000000000000 +2799:00000000000001000180E0C0FCF0FFFEFCF0E0C0018001000000000000000000 +279A:0000000000000008007003F000F000E003200F201E003E001C00080000000000 +279B:0000000000000200010001C000F0FFFE00F001C0010002000000000000000000 +279C:000000C001E001F000F87FFCFFFEFFFEFFFE7FFC00F801F001E000C000000000 +279D:000000000010001000180018FFFCFFFEFFFC0018001800100010000000000000 +279E:00000010001000180018FFFCFFFCFFFEFFFCFFFC001800180010001000000000 +279F:000000000000002000300038AAFCAAFEAAFC0038003000200000000000000000 +27A0:00000000000000200030AAF8AAFCAAFEAAFCAAF8003000200000000000000000 +27A1:000000000000002000300038FFFCFFFEFFFC0038003000200000000000000000 +27A2:400070002C00230010C01030080C07FE0FFC1FF01FC03F003C00700040000000 +27A3:400070003C003F001FC01FF00FFC07FE080C103010C023002C00700040000000 +27A4:400070003C003F001FC01FF00FFC07FE0FFC1FF01FC03F003C00700040000000 +27A5:00000000000080008010C0187FFC7FFE3FFC0018001000000000000000000000 +27A6:0000000000000000001000183FFC7FFE7FFCC018801080000000000000000000 +27A7:00000080008000C007C007E007E007F007E007E007C000C00080008000000000 +27A8:00000000000000400040FFE0FFF0FFFEFFF0FFE0004000400000000000000000 +27A9:000000000000006000707FD8400C4006400C7FD8007000600000000000000000 +27AA:000000000000006000707FE86004600260047FE8007000600000000000000000 +27AB:0000000000080018002400443F8240028006FF1EFE7C05F00FC00F000C000000 +27AC:00000C000F000FC005F0FE7CFF1E800640023F82004400240018000800000000 +27AD:00000000008000C0FFA0801080088004800E801CFFB87FF000E0004000000000 +27AE:0000004000E07FF0FFB8801C800E800480088010FFA000C00080000000000000 +27AF:00000000004000600050FFC8400440024007FFCE7FDC00780070002000000000 +27B0:0000000000631C2222221C0000000000 +27B1:00000020007000787FDCFFCE400740024004FFC8005000600040000000000000 +27B2:07C01FF03F787F3C7F1C000E000600020006000E7F1C7F3C3F781FF007C00000 +27B3:0000000000000000FE004908248C1FFE248C4908FE0000000000000000000000 +27B4:000000000400060007003F001F000F08008800580038007801F8000000000000 +27B5:000000000000000000007C083E0C1FFE3E0C7C08000000000000000000000000 +27B6:00000000000001F800780038005800880F081F003F0007000600040000000000 +27B7:0000000002000300038003803F881F880FD800F8007800F803F8000000000000 +27B8:0000000000000020FC107E183FFC1FFE3FFC7E18FC1000200000000000000000 +27B9:00000000000003F800F8007800F80FD81F883F88038003800300020000000000 +27BA:00000000006000F000F07838FF0CFFFEFF0C783800F000F00060000000000000 +27BB:000000000000004060E078F0FC78FFFEFC7878F060E000400000000000000000 +27BC:0000000000000000F8107C183E1C1FFE3E1C7C18F81000000000000000000000 +27BD:000000000000F860FC707E787FFC3FFE7FFC7E78FC70F8600000000000000000 +27BE:000000000000022001100088FFC40002FFC40088011002200000000000000000 +27BF:00000000000000000000E3C71C382244224422441C3800000000000000000000 +27C0:000000000000000040444850607E0000 +27C1:000000000100028002800440044009200AA01290145027C820083FF800000000 +27C2:000000000000000010101010107C0000 +27C3:0000000000000000000007F808001030104810481030080007F8000000000000 +27C4:000000000000000000001FE000100C08120812080C0800101FE0000000000000 +27C5:000000001C22220404080810100E0000 +27C6:000000001C2222101008080404380000 +27C7:00000000000041412A22141408080000 +27C8:0000000000000000000040FE41002200220012001200090008FE000000000000 +27C9:000000000000000000007F020082004400440048004800907F10000000000000 +27CA:00000000101010103810101010100000 +27CB:0000000000000000000000100020004000800100020004000800000000000000 +27CC:000000003FFC2000100010000800080008000800080008001000100020002000 +27CD:0000000000000000000008000400020001000080004000200010000000000000 +27CE:0000000000001FFC1004108410841144114412241224141414141FFC00000000 +27CF:0000000000001FFC1414141412241224114411441084108410041FFC00000000 +27D0:0000000000000000000000800140022004100888041002200140008000000000 +27D1:00000000000008081414222A41410000 +27D2:000000000000000011101110111011101110111011101110092007C000000000 +27D3:000000000000000002021202027E0000 +27D4:00000000000000007E40404840400000 +27D5:000000000000000038040C0C0A14092408C408C409240A140C0C380400000000 +27D6:0000000000000000201C30302850249023102310249028503030201C00000000 +27D7:0000000000000000700E18181428124811881188124814281818700E00000000 +27D8:00000000010001000100010001000100010001000100010001001FF000000000 +27D9:000000001FF00100010001000100010001000100010001000100010000000000 +27DA:00000000000000000000028002807EFC02807EFC028002800000000000000000 +27DB:000000000000000000000280028002807EFC0280028002800000000000000000 +27DC:00000000000000000000000000001C00220023FC22001C000000000000000000 +27DD:0000000000000000000000004000400040007FFE400040004000000000000000 +27DE:0000000000000000000000000002000200027FFE000200020002000000000000 +27DF:000000003844443810101010107C0000 +27E0:0000001028284444FE44442828100000 +27E1:0000010002800280044008203018400430180820044002800280010000000000 +27E2:000000800140014002200410180CE002180C0410022001400140008000000000 +27E3:0000010002800280044008203018400730180820044002800280010000000000 +27E4:00001FFE10021002100210021002F002100210021002100210021FFE00000000 +27E5:00007FF840084008400840084008400F400840084008400840087FF800000000 +27E6:003E28282828282828282828283E0000 +27E7:007C14141414141414141414147C0000 +27E8:00000408081010202010100808040000 +27E9:00002010100808040408081010200000 +27EA:00000A141428285050282814140A0000 +27EB:000050282814140A0A14142828500000 +27EC:00000002040C1414141414140C040200 +27ED:00000040203028282828282830204000 +27EE:00000002040808080808080808040200 +27EF:00000040201010101010101010204000 +27F0:000000000100028006C00AA01AB02AA80AA00AA00AA00AA00AA00AA000000000 +27F1:000000000AA00AA00AA00AA00AA00AA02AA81AB00AA006C00280010000000000 +27F2:000000000000000001E00210040808042A041C0408040008021001E000000000 +27F3:0000000000000000078008401020201020542038201010000840078000000000 +27F4:0000000000000000038005480924FFFE09240548038000000000000000000000 +27F5:00000000000000000000100020007FFF20001000000000000000000000000000 +27F6:0000000000000000000000080004FFFE00040008000000000000000000000000 +27F7:00000000000000000000100820047FFE20041008000000000000000000000000 +27F8:0000000000000000100020007FFE80007FFE2000100000000000000000000000 +27F9:000000000000000000100008FFFC0002FFFC0008001000000000000000000000 +27FA:0000000000000000081010083FFC40023FFC1008081000000000000000000000 +27FB:00000000000000000000100220027FFE20021002000000000000000000000000 +27FC:00000000000000000000400840047FFE40044008000000000000000000000000 +27FD:0000000000000000080210023FFE40023FFE1002080200000000000000000000 +27FE:0000000000000000401040087FFC40027FFC4008401000000000000000000000 +27FF:0000000000000000000000082224D55E08840008000000000000000000000000 +2800:00000022000022000022000022000000 +2801:00000032300022000022000022000000 +2802:00000022000032300022000022000000 +2803:00000032300032300022000022000000 +2804:00000022000022000032300022000000 +2805:00000032300022000032300022000000 +2806:00000022000032300032300022000000 +2807:00000032300032300032300022000000 +2808:00000026060022000022000022000000 +2809:00000036360022000022000022000000 +280A:00000026060032300022000022000000 +280B:00000036360032300022000022000000 +280C:00000026060022000032300022000000 +280D:00000036360022000032300022000000 +280E:00000026060032300032300022000000 +280F:00000036360032300032300022000000 +2810:00000022000026060022000022000000 +2811:00000032300026060022000022000000 +2812:00000022000036360022000022000000 +2813:00000032300036360022000022000000 +2814:00000022000026060032300022000000 +2815:00000032300026060032300022000000 +2816:00000022000036360032300022000000 +2817:00000032300036360032300022000000 +2818:00000026060026060022000022000000 +2819:00000036360026060022000022000000 +281A:00000026060036360022000022000000 +281B:00000036360036360022000022000000 +281C:00000026060026060032300022000000 +281D:00000036360026060032300022000000 +281E:00000026060036360032300022000000 +281F:00000036360036360032300022000000 +2820:00000022000022000026060022000000 +2821:00000032300022000026060022000000 +2822:00000022000032300026060022000000 +2823:00000032300032300026060022000000 +2824:00000022000022000036360022000000 +2825:00000032300022000036360022000000 +2826:00000022000032300036360022000000 +2827:00000032300032300036360022000000 +2828:00000026060022000026060022000000 +2829:00000036360022000026060022000000 +282A:00000026060032300026060022000000 +282B:00000036360032300026060022000000 +282C:00000026060022000036360022000000 +282D:00000036360022000036360022000000 +282E:00000026060032300036360022000000 +282F:00000036360032300036360022000000 +2830:00000022000026060026060022000000 +2831:00000032300026060026060022000000 +2832:00000022000036360026060022000000 +2833:00000032300036360026060022000000 +2834:00000022000026060036360022000000 +2835:00000032300026060036360022000000 +2836:00000022000036360036360022000000 +2837:00000032300036360036360022000000 +2838:00000026060026060026060022000000 +2839:00000036360026060026060022000000 +283A:00000026060036360026060022000000 +283B:00000036360036360026060022000000 +283C:00000026060026060036360022000000 +283D:00000036360026060036360022000000 +283E:00000026060036360036360022000000 +283F:00000036360036360036360022000000 +2840:00000022000022000022000032300000 +2841:00000032300022000022000032300000 +2842:00000022000032300022000032300000 +2843:00000032300032300022000032300000 +2844:00000022000022000032300032300000 +2845:00000032300022000032300032300000 +2846:00000022000032300032300032300000 +2847:00000032300032300032300032300000 +2848:00000026060022000022000032300000 +2849:00000036360022000022000032300000 +284A:00000026060032300022000032300000 +284B:00000036360032300022000032300000 +284C:00000026060022000032300032300000 +284D:00000036360022000032300032300000 +284E:00000026060032300032300032300000 +284F:00000036360032300032300032300000 +2850:00000022000026060022000032300000 +2851:00000032300026060022000032300000 +2852:00000022000036360022000032300000 +2853:00000032300036360022000032300000 +2854:00000022000026060032300032300000 +2855:00000032300026060032300032300000 +2856:00000022000036360032300032300000 +2857:00000032300036360032300032300000 +2858:00000026060026060022000032300000 +2859:00000036360026060022000032300000 +285A:00000026060036360022000032300000 +285B:00000036360036360022000032300000 +285C:00000026060026060032300032300000 +285D:00000036360026060032300032300000 +285E:00000026060036360032300032300000 +285F:00000036360036360032300032300000 +2860:00000022000022000026060032300000 +2861:00000032300022000026060032300000 +2862:00000022000032300026060032300000 +2863:00000032300032300026060032300000 +2864:00000022000022000036360032300000 +2865:00000032300022000036360032300000 +2866:00000022000032300036360032300000 +2867:00000032300032300036360032300000 +2868:00000026060022000026060032300000 +2869:00000036360022000026060032300000 +286A:00000026060032300026060032300000 +286B:00000036360032300026060032300000 +286C:00000026060022000036360032300000 +286D:00000036360022000036360032300000 +286E:00000026060032300036360032300000 +286F:00000036360032300036360032300000 +2870:00000022000026060026060032300000 +2871:00000032300026060026060032300000 +2872:00000022000036360026060032300000 +2873:00000032300036360026060032300000 +2874:00000022000026060036360032300000 +2875:00000032300026060036360032300000 +2876:00000022000036360036360032300000 +2877:00000032300036360036360032300000 +2878:00000026060026060026060032300000 +2879:00000036360026060026060032300000 +287A:00000026060036360026060032300000 +287B:00000036360036360026060032300000 +287C:00000026060026060036360032300000 +287D:00000036360026060036360032300000 +287E:00000026060036360036360032300000 +287F:00000036360036360036360032300000 +2880:00000022000022000022000026060000 +2881:00000032300022000022000026060000 +2882:00000022000032300022000026060000 +2883:00000032300032300022000026060000 +2884:00000022000022000032300026060000 +2885:00000032300022000032300026060000 +2886:00000022000032300032300026060000 +2887:00000032300032300032300026060000 +2888:00000026060022000022000026060000 +2889:00000036360022000022000026060000 +288A:00000026060032300022000026060000 +288B:00000036360032300022000026060000 +288C:00000026060022000032300026060000 +288D:00000036360022000032300026060000 +288E:00000026060032300032300026060000 +288F:00000036360032300032300026060000 +2890:00000022000026060022000026060000 +2891:00000032300026060022000026060000 +2892:00000022000036360022000026060000 +2893:00000032300036360022000026060000 +2894:00000022000026060032300026060000 +2895:00000032300026060032300026060000 +2896:00000022000036360032300026060000 +2897:00000032300036360032300026060000 +2898:00000026060026060022000026060000 +2899:00000036360026060022000026060000 +289A:00000026060036360022000026060000 +289B:00000036360036360022000026060000 +289C:00000026060026060032300026060000 +289D:00000036360026060032300026060000 +289E:00000026060036360032300026060000 +289F:00000036360036360032300026060000 +28A0:00000022000022000026060026060000 +28A1:00000032300022000026060026060000 +28A2:00000022000032300026060026060000 +28A3:00000032300032300026060026060000 +28A4:00000022000022000036360026060000 +28A5:00000032300022000036360026060000 +28A6:00000022000032300036360026060000 +28A7:00000032300032300036360026060000 +28A8:00000026060022000026060026060000 +28A9:00000036360022000026060026060000 +28AA:00000026060032300026060026060000 +28AB:00000036360032300026060026060000 +28AC:00000026060022000036360026060000 +28AD:00000036360022000036360026060000 +28AE:00000026060032300036360026060000 +28AF:00000036360032300036360026060000 +28B0:00000022000026060026060026060000 +28B1:00000032300026060026060026060000 +28B2:00000022000036360026060026060000 +28B3:00000032300036360026060026060000 +28B4:00000022000026060036360026060000 +28B5:00000032300026060036360026060000 +28B6:00000022000036360036360026060000 +28B7:00000032300036360036360026060000 +28B8:00000026060026060026060026060000 +28B9:00000036360026060026060026060000 +28BA:00000026060036360026060026060000 +28BB:00000036360036360026060026060000 +28BC:00000026060026060036360026060000 +28BD:00000036360026060036360026060000 +28BE:00000026060036360036360026060000 +28BF:00000036360036360036360026060000 +28C0:00000022000022000022000036360000 +28C1:00000032300022000022000036360000 +28C2:00000022000032300022000036360000 +28C3:00000032300032300022000036360000 +28C4:00000022000022000032300036360000 +28C5:00000032300022000032300036360000 +28C6:00000022000032300032300036360000 +28C7:00000032300032300032300036360000 +28C8:00000026060022000022000036360000 +28C9:00000036360022000022000036360000 +28CA:00000026060032300022000036360000 +28CB:00000036360032300022000036360000 +28CC:00000026060022000032300036360000 +28CD:00000036360022000032300036360000 +28CE:00000026060032300032300036360000 +28CF:00000036360032300032300036360000 +28D0:00000022000026060022000036360000 +28D1:00000032300026060022000036360000 +28D2:00000022000036360022000036360000 +28D3:00000032300036360022000036360000 +28D4:00000022000026060032300036360000 +28D5:00000032300026060032300036360000 +28D6:00000022000036360032300036360000 +28D7:00000032300036360032300036360000 +28D8:00000026060026060022000036360000 +28D9:00000036360026060022000036360000 +28DA:00000026060036360022000036360000 +28DB:00000036360036360022000036360000 +28DC:00000026060026060032300036360000 +28DD:00000036360026060032300036360000 +28DE:00000026060036360032300036360000 +28DF:00000036360036360032300036360000 +28E0:00000022000022000026060036360000 +28E1:00000032300022000026060036360000 +28E2:00000022000032300026060036360000 +28E3:00000032300032300026060036360000 +28E4:00000022000022000036360036360000 +28E5:00000032300022000036360036360000 +28E6:00000022000032300036360036360000 +28E7:00000032300032300036360036360000 +28E8:00000026060022000026060036360000 +28E9:00000036360022000026060036360000 +28EA:00000026060032300026060036360000 +28EB:00000036360032300026060036360000 +28EC:00000026060022000036360036360000 +28ED:00000036360022000036360036360000 +28EE:00000026060032300036360036360000 +28EF:00000036360032300036360036360000 +28F0:00000022000026060026060036360000 +28F1:00000032300026060026060036360000 +28F2:00000022000036360026060036360000 +28F3:00000032300036360026060036360000 +28F4:00000022000026060036360036360000 +28F5:00000032300026060036360036360000 +28F6:00000022000036360036360036360000 +28F7:00000032300036360036360036360000 +28F8:00000026060026060026060036360000 +28F9:00000036360026060026060036360000 +28FA:00000026060036360026060036360000 +28FB:00000036360036360026060036360000 +28FC:00000026060026060036360036360000 +28FD:00000036360026060036360036360000 +28FE:00000026060036360036360036360000 +28FF:00000036360036360036360036360000 +2900:0000000000000000000002280214FFFE02140228000000000000000000000000 +2901:0000000000000000000005280514FFFE05140528000000000000000000000000 +2902:0000000000000000088010803FFF40803FFF1080088000000000000000000000 +2903:000000000000000001100108FFFC0102FFFC0108011000000000000000000000 +2904:0000000000000000049008881FFC20821FFC0888049000000000000000000000 +2905:00000000000000000000402840147FFE40144028000000000000000000000000 +2906:0000000000000000080010023FFE40023FFE1002080000000000000000000000 +2907:0000000000000000001040087FFC40027FFC4008001000000000000000000000 +2908:080808080808083E0808082A1C080000 +2909:0000081C2A08083E0808080808080808 +290A:000000000100038005400D601550054005400540054005400540054000000000 +290B:00000000054005400540054005400540054015500D6005400380010000000000 +290C:00000000000000000000100020007F7F20001000000000000000000000000000 +290D:0000000000000000000000080004FEFE00040008000000000000000000000000 +290E:00000000000000000000100020007DEF20001000000000000000000000000000 +290F:0000000000000000000000080004F7BE00040008000000000000000000000000 +2910:00000000000000000000402820141B7E20144028000000000000000000000000 +2911:0000000000000000000000080004AAAE00040008000000000000000000000000 +2912:00007F1C2A0808080808080808080808 +2913:08080808080808080808082A1C7F0000 +2914:00000000000000000000410821041FFE21044108000000000000000000000000 +2915:00000000000000000000428822841FFE22844288000000000000000000000000 +2916:00000000000000000000402820141FFE20144028000000000000000000000000 +2917:00000000000000000000412821141FFE21144128000000000000000000000000 +2918:00000000000000000000452825141FFE25144528000000000000000000000000 +2919:00000000000000000000000200047FF800040002000000000000000000000000 +291A:00000000000000000000400020001FFE20004000000000000000000000000000 +291B:00000000000000000000001200247FF800240012000000000000000000000000 +291C:00000000000000000000480024001FFE24004800000000000000000000000000 +291D:0000000000000000000011003A007FFF3A001100000000000000000000000000 +291E:000000000000000000000044002E7FFF002E0044000000000000000000000000 +291F:0000000000000000000011023A027FFE3A021102000000000000000000000000 +2920:000000000000000000004088405C7FFE405C4088000000000000000000000000 +2921:00003C00300028002400020001000080004000200012000A0006001E00000000 +2922:0000001E0006000A0012002000400080010002002400280030003C0000000000 +2923:00003C0030002800240002000100008000400020001000080024001800000000 +2924:0000007800180028004800800100020004000800100020004800300000000000 +2925:0000300048002000100008000400020001000080004800280018007800000000 +2926:0000003000480010002000400080010002000400480050006000780000000000 +2927:0000781E6006500A481204200240018001800240042008101008200400000000 +2928:0000001E2006100A08120420024001800180024004200812100A2006001E0000 +2929:00002004100808100420024001800180024004204812500A6006781E00000000 +292A:0000780060045008481004200240018001800240042048105008600478000000 +292B:0000000020041008081004200040008001000200042008101008200400000000 +292C:0000000020041008081004200200010000800040042008101008200400000000 +292D:0000001E2006100A08120420020001000080004004200812100A2006001E0000 +292E:0000001E2006100A08120420004000800100020004200812100A2006001E0000 +292F:0000001E2006100A081204200200010000800040042008101008200400000000 +2930:00002004100808100420004000800100020004200812100A2006001E00000000 +2931:0000781E6006500A481204200040008001000200042008101008200400000000 +2932:0000781E6006500A481204200200010000800040042008101008200400000000 +2933:000000000000000000003C08420481FE00040008000000000000000000000000 +2934:0000001000380054001000100020FFC000000000000000000000000000000000 +2935:00000000FFC00020001000100010005400380010000000000000000000000000 +2936:00080008000800080008040808101FE008000400000000000000000000000000 +2937:100010001000100010001020081007F800100020000000000000000000000000 +2938:000020100808040404042828303C0000 +2939:0000040810102020202014140C3C0000 +293A:00000000000000000000000023C02C3030083C04000000000000000000000000 +293B:000000000000000000000000203C100C0C3403C4000000000000000000000000 +293C:00000000000000000000000003C40C34100C203C070000000000000000000000 +293D:00000000000000000000000023C02C3030083C4400E000400000000000000000 +293E:00000000000000100008000400043C0430082C3023C000000000000000000000 +293F:0000000000000800100020002000203C100C0C3403C400000000000000000000 +2940:000000000080010003800D601090101020082008101010100C60038000000000 +2941:000000000200010003800D601210101020082008101010100C60038000000000 +2942:000000000000000800047FFE00040008100020007E0020001000000000000000 +2943:000000000000100020007FFE2000100000080004007E00040008000000000000 +2944:00000000000000080004007E00040008100020007FFE20001000000000000000 +2945:0000000000000000000000080004FFFE00040008080008003E00080008000000 +2946:0000000000000000000020004000FFFF400020000020002000F8002000200000 +2947:0000000000000000001011080A04FFFE0A041108001000000000000000000000 +2948:0000000000000000101023884444FFFE44442388101000000000000000000000 +2949:00001038543854101010384444380000 +294A:00000000000000000000100020007FFE00040008000000000000000000000000 +294B:00000000000000000000000800047FFE20001000000000000000000000000000 +294C:00001018141010101010105030100000 +294D:00001030501010101010101418100000 +294E:00000000000000000000100820047FFE00000000000000000000000000000000 +294F:00002030282020202020202830200000 +2950:00000000000000000000000000007FFE20041008000000000000000000000000 +2951:00000818280808080808082818080000 +2952:00000000000000000000480050007FFF40004000000000000000000000000000 +2953:000000000000000000000012000AFFFE00020002000000000000000000000000 +2954:00003E080C0A08080808080808080808 +2955:000008080808080808080A0C083E0000 +2956:00000000000000000000400040007FFF50004800000000000000000000000000 +2957:0000000000000000000000020002FFFE000A0012000000000000000000000000 +2958:00003E08182808080808080808080808 +2959:000008080808080808082818083E0000 +295A:00000000000000000000080210023FFE00020002000000000000000000000000 +295B:00000000000000000000401040087FFC40004000000000000000000000000000 +295C:000010181410101010101010107C0000 +295D:00007C10101010101010101418100000 +295E:00000000000000000000000200023FFE10020802000000000000000000000000 +295F:00000000000000000000400040007FFC40084010000000000000000000000000 +2960:000010305010101010101010107C0000 +2961:00007C10101010101010105030100000 +2962:000000000000100020007FFE0000000000007FFE200010000000000000000000 +2963:00000000022006300A2802200220022002200220022002200220022000000000 +2964:000000000000000800047FFE0000000000007FFE000400080000000000000000 +2965:000000000220022002200220022002200220022002200A280630022000000000 +2966:000000000000100020007FFE0000000800047FFE000000000000000000000000 +2967:000000000000000000007FFE2000100000007FFE000400080000000000000000 +2968:000000000000000800047FFE0000100020007FFE000000000000000000000000 +2969:000000000000000000007FFE0004000800007FFE200010000000000000000000 +296A:0000000000000000100020007FFE00007FFE0000000000000000000000000000 +296B:0000000000000000000000007FFE00007FFE2000100000000000000000000000 +296C:0000000000000000000800047FFE00007FFE0000000000000000000000000000 +296D:0000000000000000000000007FFE00007FFE0004000800000000000000000000 +296E:00000000022006200A2002200220022002200220022002280230022000000000 +296F:000000000220023002280220022002200220022002200A200620022000000000 +2970:000000000000000000007FFC000200027FFC0000000000000000000000000000 +2971:0000000000001F8000001F880004FFFE00040008000000000000000000000000 +2972:0000000000003800444003880004FFFE00040008000000000000000000000000 +2973:00000000000000000000100020007FFF200011C00222001C0000000000000000 +2974:0000000000000000000000080004FFFE00043808444003800000000000000000 +2975:0000000000000000000000080004FFFE38044448038038004440038000000000 +2976:0000000000180060018006000800060001800060021804000FF8040002000000 +2977:00000000000000060018106021807FF021801060001800060000000000000000 +2978:000000000C00030000C000300008003000C003000C2000100FF8001000200000 +2979:0000000003F80400080008000800040003F80000002000100FF8001000200000 +297A:00000000000000000000000001FE120024007FFE2400120001FE000000000000 +297B:000000000FE0001000080008000800100FE00000020004000FF8040002000000 +297C:0000000000204040201F204040200000 +297D:0000000000020101027C020101020000 +297E:000000000000000000000C601290010001000100010001000100000000000000 +297F:00000000000000000000000001000100010001000100010012900C6000000000 +2980:0000002A2A2A2A2A2A2A2A2A2A2A2A00 +2981:000000000000183C7E7E3C1800000000 +2982:00000000182424180000182424180000 +2983:00001E24241414244424141424241E00 +2984:00007824242828242224282824247800 +2985:0000000C181828282828282818180C00 +2986:00000030181814141414141418183000 +2987:0000000C141424242424242414140C00 +2988:00000030282824242424242428283000 +2989:000000040C0C1414242414140C0C0400 +298A:00000020303028282424282830302000 +298B:0000000E0808080808080808080E000E +298C:00000070101010101010101010700070 +298D:0000001E181412101010101010101E00 +298E:00000078080808080808084828187800 +298F:0000001E101010101010101214181E00 +2990:00000078182848080808080808087800 +2991:00000004080810102626101008080400 +2992:00000020101008086464080810102000 +2993:0000000000000040008C00F0018003000D0011000D000300018000F0008C0040 +2994:00000000000001001880078000C00060005800440058006000C0078018800100 +2995:00000000000000A019400740038002E0029802840298026001C0074018A00000 +2996:0000000000000280014C017000E003A00CA010A00CA0032001C00170028C0000 +2997:0000000C183838383838383838180C00 +2998:00000030181C1C1C1C1C1C1C1C183000 +2999:00000000080000080000080000080000 +299A:00201008102010081020100810201008 +299B:000000000000000040281028247E2000 +299C:000000000000004040404070507E0000 +299D:000000000000404040784454447F0000 +299E:0000000000000000001000200040009C012002180404083810003FFE00000000 +299F:000000000000000000000618207E0000 +29A0:00000000000000503028262830500000 +29A1:0000000000000000413E631408080000 +29A2:00000000000000007E20100804020000 +29A3:000000000000000040201008047E0000 +29A4:000000000000000002040810207E007E +29A5:000000000000000040201008047E007E +29A6:000000000000000000000040201E0000 +29A7:00000000000000000000001E20400000 +29A8:00000000000000780018012800C800C0012002200410081010103FFE00100000 +29A9:0000000000000F000C000A4009800180024002200410040804043FFE04000000 +29AA:00000000000000103FFE1010081004100220012000C000C80128001800780000 +29AB:00000000000004003FFE04040408041002200240018009800A400C000F000000 +29AC:00000000000010001000103C3E0C119410641060109011001200140018001000 +29AD:000000000000000800083C08307C298826080608090800880048002800180008 +29AE:0000000000001000180014001200110010901060106411943E0C103C10001000 +29AF:000000000000000800180028004800880908060826082988307C3C0800080008 +29B0:0000000000000000000017C0082014101210111010901050082007D000000000 +29B1:00000000000007C0000007D0082010501090111012101410082017C000000000 +29B2:0000010002800100000007D0082010501090111012101410082017C000000000 +29B3:010000800FC00080010007D0082010501090111012101410082017C000000000 +29B4:020004000FC00400020007D0082010501090111012101410082017C000000000 +29B5:0000000000000000000007C00820101010103FF810101010082007C000000000 +29B6:0000000000000000000007C0092011101110111011101110092007C000000000 +29B7:0000000000000000000007C0082012901290129012901290082007C000000000 +29B8:0000000000000000000007C0082014101210111010901050082007C000000000 +29B9:0000000000000000000007C00820111011101110111017D0082007C000000000 +29BA:0000000000000000000007C00920111011101FF010101010082007C000000000 +29BB:0000000000000000000017D0082014501290111012901450082017D000000000 +29BC:00000000000003E004100808122410441084110412240808041003E000000000 +29BD:0000010003800540010007C0092011101110111011101110092007C001000000 +29BE:00000000000003E0041009C81224141414141414122409C8041003E000000000 +29BF:00000000000003E0041009C813E417F417F417F413E409C8041003E000000000 +29C0:00000000000003E00410080810C413041404130410C40808041003E000000000 +29C1:00000000000003E004100808118410641014106411840808041003E000000000 +29C2:000000000000000000001F0020804040404840544048404020801F0000000000 +29C3:000000000000000000000F8010402020203C2020203C202010400F8000000000 +29C4:0000000000001FFC100C101410241044108411041204140418041FFC00000000 +29C5:0000000000001FFC18041404120411041084104410241014100C1FFC00000000 +29C6:0000000000001FFC10041084149412A411C412A41494108410041FFC00000000 +29C7:0000000000001FFC1004100411C412241224122411C4100410041FFC00000000 +29C8:0000000000001FFC1004100413E412241224122413E4100410041FFC00000000 +29C9:000000003FC020402040204023FC224422443FC402040204020403FC00000000 +29CA:000001000000010002800280044004400820082010101010200820087FFC0000 +29CB:00000000010002800280044004400820082010101010200820087FFC00007FFC +29CC:0000008001400140022002200410041009C80A0811841044238220027FFF0000 +29CD:0000000001000280028004400440082008201010101020082008FFFE00000000 +29CE:1800160011801060101010601180163018D003100C1010100C10031000D00030 +29CF:00000000000000000000006801A80628182820281828062801A8006800000000 +29D0:000000000000000000002C002B0028C028302808283028C02B002C0000000000 +29D1:00000000000041637579756341000000 +29D2:0000000000004163574F576341000000 +29D3:0000000000004163777F776341000000 +29D4:00000000000041627478746241000000 +29D5:0000000000004123170F172341000000 +29D6:00000000000000FE4428102844FE0000 +29D7:00000000000000FE7C3810387CFE0000 +29D8:00002010081020100810201008102000 +29D9:00000810201008102010081020100800 +29DA:0000000004400220011002200440022001100220044002200110022004400000 +29DB:0000000001100220044002200110022004400220011002200440022001100000 +29DC:00000000000000304949360000000000 +29DD:00000000001C22364949360000000000 +29DE:000000000000082A5D5D2A0800000000 +29DF:0000000000000000000000000000300C48124FF24812300C0000000000000000 +29E0:000000003FF83FFC3004300430043004300430043004300430043FFC00000000 +29E1:0000000000000000061A627E007E0000 +29E2:00000000000000000000000000000000210821082108210821083FF800000000 +29E3:00000000000000120024004800907FFE02407FFE090012002400480000000000 +29E4:00000000064009920024004800907FFE02407FFE090012002400480000000000 +29E5:00000000000000000012002400487FFE01207FFE04807FFE1200240048000000 +29E6:0000000000000000400240027FFE400240027FFE400240020000000000000000 +29E7:0000000000000000010001001FF0010001001FF0010001000000000000000000 +29E8:0000000000007FFC3F083F081F101F100F200F20074007400380038001000000 +29E9:0000000000007FFC21F821F811F011F009E009E005C005C00380038001000000 +29EA:0000000000000100038007C00FE01FF00FE007C0038001000540038001000000 +29EB:00001038387C7CFE7C7C383810000000 +29EC:000000000000000001C00220041004100410022001C0008002A001C000800000 +29ED:000000000000000001C003E007F007F007F003E001C0008002A001C000800000 +29EE:0000007C10FE8282828282FE107C0000 +29EF:0000007C10FEFEFEFEFEFEFE107C0000 +29F0:0000007C1010284482442810107C0000 +29F1:0000007C1010387CFE7C3810107C0000 +29F2:0000007C1038448282824438107C0000 +29F3:0000007C10387CFEFEFE7C38107C0000 +29F4:00000000000000000000400800041FFE00044008000000000000000000000000 +29F5:00000000404020201010080804040000 +29F6:00007800040408081010202040400000 +29F7:000000404020207C1008080404000000 +29F8:01010202040408081010202040400000 +29F9:80804040202010100808040402020000 +29FA:00000000002828FE2828000000000000 +29FB:00000000005454FE5454000000000000 +29FC:00000202041860806018040202000000 +29FD:0000808040300C020C30408080000000 +29FE:00000000000007C007C00380610C793C7FFC793C610C0380038007C007C00000 +29FF:00000000000000000000600C783C7FFC783C600C000000000000000000000000 +2A00:00000000000003E004100808100410041084100410040808041003E000000000 +2A01:00000000000003E004900888108410841FFC108410840888049003E000000000 +2A02:00000000000003E004100C18122411441084114412240C18041003E000000000 +2A03:0000000000001020102010201020102013201320102010200840078000000000 +2A04:00000000000010101010101010101110111017D011101110082007C000000000 +2A05:0000000000001FF0101010101010101010101010101010101010101000000000 +2A06:00000000000010101010101010101010101010101010101010101FF000000000 +2A07:000000000000024005A005A00990099012481248242424244812481200000000 +2A08:0000000000004812481224242424124812480990099005A005A0024000000000 +2A09:0000000000002008101008200440028001000280044008201010200800000000 +2A0A:00000000000000001FF010100B0004800A400A4004800B0010101FF000000000 +2A0B:00060A087E4A28180818284A7E082830 +2A0C:0000092416DA12481248124812481248124812481248124812485B6824900000 +2A0D:00060A08080808083E08080808283000 +2A0E:00060A080808083E083E080808283000 +2A0F:00060A0808080A0C0818280808283000 +2A10:00060A0808081C2A281C080808283000 +2A11:00060A08080808082F2B1D0808283000 +2A12:00060A0808080E020A020E0808283000 +2A13:00060A0808080C020A020C0808283000 +2A14:000C141010101E1105111E1010506000 +2A15:00060A0808081C222A221C0808283000 +2A16:00060A0808083E2A2A2A3E0808283000 +2A17:00060A08082848FE492A080808283000 +2A18:00060A0808492A1C081C2A4908283000 +2A19:00060A0808081C2A2A2A2A0808283000 +2A1A:00060A0808082A2A2A2A1C0808283000 +2A1B:00060A0808080808080808082830003E +2A1C:3E00060A080808080808080808283000 +2A1D:0000000000000000100818181428124811881188124814281818100800000000 +2A1E:0000000002060A122222120A06020000 +2A1F:000000000018242418001824241C0418 +2A20:0000000000001100088004400220011000880110022004400880110000000000 +2A21:20302824202020202020202020200000 +2A22:0000081408000808087F080808000000 +2A23:0000081422000808087F080808000000 +2A24:000000324C000808087F080808000000 +2A25:0000000000000808087F080808000800 +2A26:0000000000000808087F08080800324C +2A27:000000000000101010FE101611020407 +2A28:0000000000000808087F081C3E080000 +2A29:0000000018080810007E000000000000 +2A2A:0000000000000000007E000800000000 +2A2B:0000000000000040007E000200000000 +2A2C:0000000000000002007E004000000000 +2A2D:00000000000000000180060008800880108017F0108008800880060001800000 +2A2E:0000000000000000018000600110011001080FE8010801100110006001800000 +2A2F:00000000000000221408142200000000 +2A30:00000000181800422418244200000000 +2A31:000000000000004224182442007E0000 +2A32:0000000000000042241824427E000000 +2A33:0000000000000000000002200140088805500220055008880140022000000000 +2A34:00000000000000000180060008000A10112010C011200A100800060001800000 +2A35:0000000000000000018000600010085004880308048808500010006001800000 +2A36:000001800240000003C00C3010081428224421842244142810080C3003C00000 +2A37:000007E0181823C44C32500A9429A245A185A2459429500A4C3223C4181807E0 +2A38:0000000000000000000003E00410088808080BE808080888041003E000000000 +2A39:00000100028002800440044008200920111017D02108210840047FFC00000000 +2A3A:00000100028002800440044008200820101017D02008200840047FFC00000000 +2A3B:00000100028002800440044008200C60129011102288244840047FFC00000000 +2A3C:000000000000000002027E0000000000 +2A3D:000000000000000040407E0000000000 +2A3E:000000000008141408000814140C0418 +2A3F:000000002222222222222222227F0000 +2A40:0000000000003C42425A5A4242420000 +2A41:0000000000004141415D4141413E0000 +2A42:000000007E00424242424242423C0000 +2A43:000000007E003C424242424242420000 +2A44:0000000000003E414141414955550000 +2A45:000000000000555549414141413E0000 +2A46:00000000002424241800182424240000 +2A47:00000000001824242400242424180000 +2A48:00000024242418003C00182424240000 +2A49:00000018242424003C00242424180000 +2A4A:000000000000000000009292926C0000 +2A4B:000000000000000000006C9292920000 +2A4C:0000000000FF424242424242423C0000 +2A4D:0000000000003C424242424242FF0000 +2A4E:0000000000001FF0101017D01450145014501450145014501450145000000000 +2A4F:0000000000001450145014501450145014501450145017D010101FF000000000 +2A50:00000000000000003FFE1004100411441084155412241554108C094807F00000 +2A51:0000000000000100000001000280028004400440082008201010101000000000 +2A52:0000000000000100000010101010082008200440044002800280010000000000 +2A53:0000000000000100028002800440044008200920129012902448244800000000 +2A54:0000000000002448244812901290092008200440044002800280010000000000 +2A55:00000000000000000000024005A005A009900990124812482424242400000000 +2A56:0000000000000000000024242424124812480990099005A005A0024000000000 +2A57:0000000000000000100810101020104010801100120014001800100000000000 +2A58:00000000000000000004000C0014002400440084010402040404080400000000 +2A59:000000000000000000004004200811100AA004400AA011102008400400000000 +2A5A:0000000000000100038003800540054009200920111011102108210800000000 +2A5B:0000000000002108210811101110092009200540054003800380010000000000 +2A5C:000000000000010002800280044004403FF80820101010102008200800000000 +2A5D:000000000000200820081010101008203FF80440044002800280010000000000 +2A5E:00001FF000001FF0000001000280028004400440082008201010101000000000 +2A5F:00000000000001000280028004400440082008201010101000001FF000000000 +2A60:00000000000001000280028004400440082008201010101000001FF000001FF0 +2A61:00000000000000000000000000000000000004400280010000001FF000000000 +2A62:0000000000001FF000001FF00000101010100820082004400440028002800100 +2A63:00000000000010101010082008200440044002800280010000001FF000001FF0 +2A64:000000000000001800680188060818083FF81808060801880068001800000000 +2A65:00000000000030002C00230020C020303FF8203020C023002C00300000000000 +2A66:000000000000007F007F000800000000 +2A67:000000000008007F007F007F00000000 +2A68:00000000000000000000028002803FF802803FF802803FF80280000000000000 +2A69:00000000000000000000054005403FF805403FF805403FF80540000000000000 +2A6A:00000000000020006498000000000000 +2A6B:00000000000008006498004000000000 +2A6C:00000000000000649800FC0064980000 +2A6D:000000001000324C007E007E00000000 +2A6E:000000002A1C081C2A007F007F000000 +2A6F:00000030488400649800649800000000 +2A70:00000000649800649800FC00FC000000 +2A71:00000000007C007C0010107C10100000 +2A72:000000000010107C1010007C007C0000 +2A73:000000000000007E007E00324C000000 +2A74:00000000000000000000000000002BF8000000002BF800000000000000000000 +2A75:00000000000000000000000000007E7E0000000000007E7E0000000000000000 +2A76:00000000000000000000000000007BDE000000007BDE00000000000000000000 +2A77:00000000000024007E00007E00240000 +2A78:00000000000000000000124800003FFC00003FFC00003FFC0000000000000000 +2A79:0000000000000000003000C003000C4010A00C40030000C00030000000000000 +2A7A:000000000000000018000600018004600A100460018006001800000000000000 +2A7B:1800240008000800003008C003000C0010000C00030000C00030000000000000 +2A7C:0030004800100010180006100180006000100060018006001800000000000000 +2A7D:0000000000000000000000600180060008000600018008600600018000600000 +2A7E:000000000000000000000C00030000C0002000C003000C2000C003000C000000 +2A7F:0000000000000000000000600180060008400600018008600600018000600000 +2A80:000000000000000000000C00030000C0082000C003000C2000C003000C000000 +2A81:0000000000000000040000600180060008000600018008600600018000600000 +2A82:000000000000000000400C00030000C0002000C003000C2000C003000C000000 +2A83:0000000000000020000000600180060008000600018008600600018000600000 +2A84:000000000000080000000C00030000C0002000C003000C2000C003000C000000 +2A85:000000000000006001800600080006000180006000000000071008E0071008E0 +2A86:0000000000000C00030000C0002000C003000C00000000000E2011C00E2011C0 +2A87:00000000000000000060018006000800060001800060004000800FE002000400 +2A88:00000000000000000C00030000C0002000C003000C00004000800FE002000400 +2A89:0000006001800600080006000180006000100020075008E007100AE004000800 +2A8A:00000C00030000C0002000C003000C00002000400EA011C00E2015C008001000 +2A8B:00186080601800FC00FC006018041860 +2A8C:00601804186000FC00FC001860806018 +2A8D:000000000000006001800600080006000180006000000000071008E000000FF0 +2A8E:0000000000000C00030000C0002000C003000C00000000000E2011C000001FE0 +2A8F:00061820180600324C00601804186000 +2A90:00601804186000324C00061820180600 +2A91:000C3040300C6018041860007C007C00 +2A92:0060180418600C3040300C007C007C00 +2A93:000C3040300C40300C60180418620C30 +2A94:00300C020C30020C300618201846300C +2A95:0000000000000000000000600180060008600180060008000600018000600000 +2A96:000000000000000000000C00030000C00C20030000C0002000C003000C000000 +2A97:0000000000000000000000600180060008600180060008400600018000600000 +2A98:000000000000000000000C00030000C00C20030000C0042000C003000C000000 +2A99:00000000000000000FE000000FE0000000600180060008000600018000600000 +2A9A:00000000000000000FE000000FE000000C00030000C0002000C003000C000000 +2A9B:0000000000600180060008600180060008600180060008000600018000600000 +2A9C:000000000C00030000C00C20030000C00C20030000C0002000C003000C000000 +2A9D:00000000000000000000071008E00000003000C003000400030000C000300000 +2A9E:0000000000000000071008E0000000000C00030000C0002000C003000C000000 +2A9F:00000000071008E00000003000C003000400030000C0003000000FF000000FF0 +2AA0:0000000008E0071000000C00030000C0002000C003000C0000000FF000000FF0 +2AA1:00000000000000000000003000C003300CC011000CC0033000C0003000000000 +2AA2:0000000000000000000018000600198006600110066019800600180000000000 +2AA3:0000000000000000018C063018C0210018C00630018C00003FFC000000000000 +2AA4:0000000000000000060C01B000E0011000E001B0060C00000000000000000000 +2AA5:0000000000000000400430180C6002800C603018400400000000000000000000 +2AA6:000000000000000000000000000000C003200C1010100C10032000C000000000 +2AA7:0000000000000000000000000000060009801060101010600980060000000000 +2AA8:0000000000000000000000C003200C1010100C10032010C00C00030000C00000 +2AA9:0000000000000000000006000980106010101060098006100060018006000000 +2AAA:00000000000000000000003000C003000C001FF00C00030000C0003000000000 +2AAB:0000000000000000000018000600018000601FF0006001800600180000000000 +2AAC:000000000000003000C003000C001FF00C00030000C0003000001FF000000000 +2AAD:00000000000018000600018000601FF0006001800600180000001FF000000000 +2AAE:000000000000000000000000038004403C7800003FF800003FF8000000000000 +2AAF:0000000000000010002000C003001C00030000C00020001000001FF000000000 +2AB0:00000000000008000400030000C0003800C003000400080000000FF800000000 +2AB1:0000000000000010002000C003001C00030000C00020005000801FF002000400 +2AB2:00000000000010000800060001800070018006000800108001001FF004000800 +2AB3:00000010002000C003001C00030000C00020001000001FF000001FF000000000 +2AB4:000010000800060001800070018006000800100000001FF000001FF000000000 +2AB5:00000010002000C003001C00030000C00020003000401FF001001FF004000800 +2AB6:000010000800060001800070018006000800104000801FF002001FF008001000 +2AB7:0010002000C003001C00030000C000200010000007900860071008E000000000 +2AB8:10000800060001800070018006000800100000000E2011C00E2011C000000000 +2AB9:0010002000C003001C00030000C0002000500040079008E0071009E002000200 +2ABA:10000800060001800070018006000800108000800F2011C00E2013C004000400 +2ABB:0000000000000042008403180C6073800C600318008400420000000000000000 +2ABC:0000000000004200210018C0063001CE063018C0210042000000000000000000 +2ABD:0000000000000000000000000FF81000200026002600200010000FF800000000 +2ABE:0000000000000000000000003FE00010000800C800C8000800103FE000000000 +2ABF:0000003E4040403E0008083E08080000 +2AC0:0000007C0202027C0010107C10100000 +2AC1:0000003E4040403E0022140814220000 +2AC2:0000007C0202027C0044281028440000 +2AC3:000000001818003E4040403E007E0000 +2AC4:000000003030007C0202027C007E0000 +2AC5:00000000003E4040403E007E007E0000 +2AC6:00000000007C0202027C007E007E0000 +2AC7:0000000000003E404040403E00324C00 +2AC8:0000000000007C020202027C00324C00 +2AC9:00000000003E4040403E00324C324C00 +2ACA:00000000007C0202027C00324C324C00 +2ACB:000000003E4040403E00047E087E1000 +2ACC:000000007C0202027C00047E087E1000 +2ACD:00000000000000007FFE400040004000400040004000400040007F0000000000 +2ACE:00000000000000007FFE0002000200020002000200020002000200FE00000000 +2ACF:00000000000000000000000007F008101010101010101010081007F000000000 +2AD0:0000000000000000000000001FC01020101010101010101010201FC000000000 +2AD1:000000000000000007F008101010101010101010081007F000001FF000000000 +2AD2:00000000000000001FC01020101010101010101010201FC000001FF000000000 +2AD3:0000003E4040403E007C0202027C0000 +2AD4:0000007C0202027C003E4040403E0000 +2AD5:0000003E4040403E003E4040403E0000 +2AD6:0000007C0202027C007C0202027C0000 +2AD7:00000000000000000000000000003E3E0140014001403E3E0000000000000000 +2AD8:00000000000000000000000000003E3E014007F001403E3E0000000000000000 +2AD9:000000000000000007C009201110111011101110111011101110111000000000 +2ADA:000000000FE0010007C009201110111011101110111011101110111000000000 +2ADB:000000000100010007C009201110111011101110111011101110111001000100 +2ADC:000000000000000001000110012001400180111013101510092017C000000000 +2ADD:000000000000000001000100010001000100111011101110092007C000000000 +2ADE:0000000000040404043C040404040000 +2ADF:000000000000000000000000000000001FF00100010001000000000000000000 +2AE0:000000000000000000000000000000000100010001001FF00000000000000000 +2AE1:000000000000010001000138014001300108017001003FF80000000000000000 +2AE2:00000000000000000000200020003FF020003FF020003FF02000200000000000 +2AE3:0000000000000000000000140014001400143FF4001400140014001400000000 +2AE4:000000000000000000000008000800081FF800081FF800080008000800000000 +2AE5:000000000000000000000014001400143FF400143FF400140014001400000000 +2AE6:0000000000000000000028002800280028003FFC280028002800280000000000 +2AE7:0000000000000000000000001FF000001FF00100010001000000000000000000 +2AE8:0000000000000000000000000100010001001FF000001FF00000000000000000 +2AE9:0000000000000100010001001FF000001FF00100010001000000000000000000 +2AEA:00000000000000001FF002800280028002800280028002800280028000000000 +2AEB:00000000000000000280028002800280028002800280028002801FF000000000 +2AEC:000000000000000000000000000000001FF800081FF800080008000000000000 +2AED:000000000000000000000000000000001FF810001FF810001000000000000000 +2AEE:000000001818583818181C1A18180000 +2AEF:00000000384444381010101010100000 +2AF0:00000000101010101010384444380000 +2AF1:000000007C1010101010384444380000 +2AF2:0000000014141414147F141414140000 +2AF3:00000000000000000240024002400240024007500AE002400240024000000000 +2AF4:0000000000000000092009200920092009200920092009200920092000000000 +2AF5:0000000000000000092009200920092009203FF8092009200920092000000000 +2AF6:00000000181800001818000018180000 +2AF7:0000000000000018006001980660199822201998066001980060001800000000 +2AF8:00000000000030000C0033000CC03330088833300CC033000C00300000000000 +2AF9:0000000000600180060008000600018008600600018008600600018000600000 +2AFA:000000000C00030000C0002000C003000C2000C003000C2000C003000C000000 +2AFB:0000000000000000024802480490049009200920124012402480248000000000 +2AFC:0000000000000000092009200920092009200920092009200920092009200000 +2AFD:0000000000000000009000900120012002400240048004800900090000000000 +2AFE:00000000003828282828282828380000 +2AFF:00000000382828282828282828283800 +2B00:00000000000001F8010800880108022804580880110022001400080000000000 +2B01:0000000000003F00210022002100288034400220011000880050002000000000 +2B02:000000000000080014002200110008800458022801080088010801F800000000 +2B03:00000000000000200050008801100220344028802100220021003F0000000000 +2B04:0000000000000000081018182FF440022FF41818081000000000000000000000 +2B05:0000000000000000080018003FFC7FFC3FFC1800080000000000000000000000 +2B06:000010387CFE38383838383838380000 +2B07:00003838383838383838FE7C38100000 +2B08:00000000000001F801F800F801F803F807D80F801F003E001C00080000000000 +2B09:0000000000003F003F003E003F003F8037C003E001F000F80070002000000000 +2B0A:00000000000008001C003E001F000F8007D803F801F800F801F801F800000000 +2B0B:0000000000000020007000F801F003E037C03F803F003E003F003F0000000000 +2B0C:0000000000000000081018183FFC7FFE3FFC1818081000000000000000000000 +2B0D:000010387CFE38383838FE7C38100000 +2B0E:0000000000000000000000000000FFF80008002A001C00080000000000000000 +2B0F:0000000000000008001C002A0008FFF800000000000000000000000000000000 +2B10:00000000000000000000000000001FFF10005400380010000000000000000000 +2B11:00000000000010003800540010001FFF00000000000000000000000000000000 +2B12:000000000000000000001FF81FF81FF81FF81FF810081008100810081FF80000 +2B13:000000000000000000001FF810081008100810081FF81FF81FF81FF81FF80000 +2B14:000000000000000000001FF81FF817F813F811F810F81078103810181FF80000 +2B15:000000000000000000001FF818081C081E081F081F881FC81FE81FF81FF80000 +2B16:000000000000000000000180034007200F101F081F080F100720034001800000 +2B17:00000000000000000000018002C004E008F010F810F808F004E002C001800000 +2B18:00000000000000000000018003C007E00FF01FF8100808100420024001800000 +2B19:00000000000000000000018002400420081010081FF80FF007E003C001800000 +2B1A:0000000000002AA80000200800002008000020080000200800002AA800000000 +2B1B:00007FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE0000 +2B1C:00007FFE4002400240024002400240024002400240024002400240027FFE0000 +2B1D:00000000000000003C3C3C3C00000000 +2B1E:00000000000000003C24243C00000000 +2B1F:000000000000018003C007E00FF01FF83FFC1FF81FF80FF00FF007E000000000 +2B20:000000000000018002400420081010082004100810080810081007E000000000 +2B21:0000000000000000010006C0183020082008200820082008183006C001000000 +2B22:0000000000000000010007C01FF03FF83FF83FF83FF83FF81FF007C001000000 +2B23:000000000000000007E00FF01FF83FFC7FFE7FFE3FFC1FF80FF007E000000000 +2B24:0000000001C007F00FF81FFC1FFC3FFE3FFE3FFE1FFC1FFC0FF807F001C00000 +2B25:0000000000000010387CFE7C38100000 +2B26:00000000000000102844824428100000 +2B27:0000001038387C7CFE7C7C3838100000 +2B28:00000010282844448244442828100000 +2B29:00000000000010387C38100000000000 +2B2A:000000000000001038387C3838100000 +2B2B:00000000000000102828442828100000 +2B2C:000000000000000000000000000000000FE07FFCFFFEFFFE7FFC0FE000000000 +2B2D:000000000000000000000000000000000FE0701C80028002701C0FE000000000 +2B2E:00183C3C3C7E7E7E7E7E3C3C3C180000 +2B2F:00182424244242424242242424180000 +2B30:0000000000000000000010E021107FFF211010E0000000000000000000000000 +2B31:2040FF40202040FF40202040FF402000 +2B32:000000000000000001C012A024907FFF249012A001C000000000000000000000 +2B33:00000000000000000000100024447AAB21101000000000000000000000000000 +2B34:00000000000000000000142028207FFF28201420000000000000000000000000 +2B35:00000000000000000000145028507FFF28501450000000000000000000000000 +2B36:00000000000000000000140228027FFE28021402000000000000000000000000 +2B37:00000000000000000000140228047ED828041402000000000000000000000000 +2B38:0000000000000000000010002000755520001000000000000000000000000000 +2B39:00000000000000000000104220447FF820441042000000000000000000000000 +2B3A:0000000000000000000010A220A47FF820A410A2000000000000000000000000 +2B3B:00000000000000000000140228047FF828041402000000000000000000000000 +2B3C:00000000000000000000144228447FF828441442000000000000000000000000 +2B3D:0000000000000000000014A228A47FF828A414A2000000000000000000000000 +2B3E:00000000000000000800108820507FFF20501088080000000000000000000000 +2B3F:00000000000000000000103C20427F8120001000000000000000000000000000 +2B40:00000000000001F8000011F820007FFF20001000000000000000000000000000 +2B41:000000000000001C022211C020007FFF20001000000000000000000000000000 +2B42:00000000000000000000100020007FFF201C122201C0001C022201C000000000 +2B43:00000000000060001800060801840FFE01840608180060000000000000000000 +2B44:000000000000000000007F80004800247FFE002400487F800000000000000000 +2B45:00000000020004000FFF10003FFF40003FFF10000FFF04000200000000000000 +2B46:0000000000400020FFF00008FFFC0002FFFC0008FFF000200040000000000000 +2B47:0000000000000380444038080004FFFE00040008000000000000000000000000 +2B48:0000000000000000000000080004FFFE03844448380003804440380000000000 +2B49:00000000000001C00222101C20007FFF20001000000000000000000000000000 +2B4A:00000000000000000000100020007FFF21C01222001C01C00222001C00000000 +2B4B:00000000000000000000100020007FFF2000101C022201C00000000000000000 +2B4C:0000000000000000000000080004FFFE00040388444038000000000000000000 +2B4D:00000000008001000200040008001FF800100020004002800300038000000000 +2B4E:000000000000001C0C14102020000000 +2B4F:00000000000000202010140C1C000000 +2B50:000001000100028002807C7C20081010082004400820111026C8383800000000 +2B51:0000000000000100038003803FF81FF00FE00FE01EF03C783018000000000000 +2B52:0000000000000100028002803C7810100820092012902C683018000000000000 +2B53:00000000008003C00FE01FF01FF81FFC1FFC1FF81FF00FE003C0008000000000 +2B54:00000000008003400C201010100810041004100810100C200340008000000000 +2B55:000007C00FE018303018600C600C600C600C600C301818300FE007C000000000 +2B56:0000000000000FE01FF0301867CC682C682C67CC30181FF00FE0000000000000 +2B57:000007C00FE018303018638C644C644C644C638C301818300FE007C000000000 +2B58:000000000000000003800FE00C601830183018300C600FE00380000000000000 +2B59:000007C00FE018303838644C628C610C628C644C383818300FE007C000000000 +2B5A:00000000000003C0042004200840095008E01040100010002000200000000000 +2B5B:0000000000000F00108010800840084000200020001000540038001000000000 +2B5C:0000000000000020007000A800200040004000400040008000800F8000000000 +2B5D:0000000000000F80008000800040004000400040002000A80070002000000000 +2B5E:0000000000000100010001000100020002000220021004780590062000000000 +2B5F:0000000000000000000000000000020002000220041004780590062000000000 +2B60:00000000000000000000100030007FFE30001000000000000000000000000000 +2B61:000000000100038007C001000100010001000100010001000100010001000100 +2B62:000000000000000000000008000C7FFE000C0008000000000000000000000000 +2B63:000000000100010001000100010001000100010001000100010007C003800100 +2B64:000000000000000000002008600CFFFE600C2008000000000000000000000000 +2B65:000000000100038007C00100010001000100010001000100010007C003800100 +2B66:00000000000000001E001C001C00120001000080004000200010000800000000 +2B67:0000000000000000007800380038004800800100020004000800100000000000 +2B68:0000000000000000100008000400020001000080004800380038007800000000 +2B69:000000000000000000080010002000400080010012001C001C001E0000000000 +2B6A:00000000000000000000100030007DB630001000000000000000000000000000 +2B6B:000000000100038007C001000100000001000100000001000100000001000100 +2B6C:000000000000000000000008000C6DBE000C0008000000000000000000000000 +2B6D:000000000100010000000100010000000100010000000100010007C003800100 +2B6E:00000000000000001C000C101408200420042004200420041008081007E00000 +2B6F:0000000000000000003808301028200420042004200420041008081007E00000 +2B70:0000000000000000000044004C005FFE4C004400000000000000000000000000 +2B71:0000000007C000000100038007C0010001000100010001000100010001000100 +2B72:00000000000000000000002200327FFA00320022000000000000000000000000 +2B73:0000000001000100010001000100010001000100010007C003800100000007C0 +2B74:00007FFE618E7DB6618E6FB6618E7FFE7FFE61B67DB67B8677F677F67FFE0000 +2B75:00007FFE618E7DB6618E6FB6618E7FFE7FFE61867DBE7B8677F677867FFE0000 +2B76:00000000000000000FC000000780070007000480004000200010000800000000 +2B77:000000000000000001F8000000F0007000700090010002000400080000000000 +2B78:0000000000000000080004000200010000900070007000F0000001F800000000 +2B79:00000000000000000008001000200040048007000700078000000FC000000000 +2B7A:00000000000000000140114031407FFE31401140014000000000000000000000 +2B7B:000000000100038007C001000100010001000FE001000FE00100010001000100 +2B7C:000000000000000002800288028C7FFE028C0288028000000000000000000000 +2B7D:0000000001000100010001000FE001000FE0010001000100010007C003800100 +2B7E:000000000000000044004C005FFE4C004400002200327FFA0032002200000000 +2B7F:0000000004F804000420047004F804200420042004201F200E20042000201F20 +2B80:000000000000100030007FFE300010000008000C7FFE000C0008000000000000 +2B81:0000000004200E201F200420042004200420042004200420042004F804700420 +2B82:0000000000000008000C7FFE000C0008100030007FFE30001000000000000000 +2B83:000000000420047004F8042004200420042004200420042004201F200E200420 +2B84:00000000100030007FFE300010000000100030007FFE30001000000000000000 +2B85:0000000008201C703EF808200820082008200820082008200820082008200820 +2B86:000000000008000C7FFE000C000800000008000C7FFE000C0008000000000000 +2B87:00000000082008200820082008200820082008200820082008203EF81C700820 +2B88:000003E007F00EF81CFC38FC30002000300038FC1CFC0EF807F003E000000000 +2B89:0000000003E007700E381C1C380E30063E3E3E3E3E3E1E3C0E38063000000000 +2B8A:000007C00FE01F703F383F1C000C0004000C3F1C3F381F700FE007C000000000 +2B8B:0000000006300E381E3C3E3E3E3E3E3E3006380E1C1C0E38077003E000000000 +2B8C:00000000080018003FF0180808040002000200020002000400080FF000000000 +2B8D:0000000000000008001C103E1008100810081008100810080810042003C00000 +2B8E:0000000007F80800100020002000200020001008080C07FE000C000800000000 +2B8F:00000000000000F0010802040402040204020402040204021F020E0004000000 +2B90:00000000000000000000001E00020004100430087FF830001000000000000000 +2B91:000000000000000000007800400020002008100C1FFE000C0008000000000000 +2B92:000000000000000000007F7E00020002020206026FFE06000200000000000000 +2B93:000000000000000000007EFE40004000404040607FF600600040000000000000 +2B94:00000000002000403EFC20442024A8007004200E0015240422043F7C02000400 +2B95:0000000000000000002000307FF87FFC7FF80030002000000000000000000000 +2B96:00007FFE618E7DB6618E6FB6618E7FFE7FFE73CE6DBE718E7DB673CE7FFE0000 +2B97:000000007FFC40044FE420082FE8111011100920092005400440028001000000 +2B98:00000004003800C803100C10302040403FE00FF003F000F80038000400000000 +2B99:00000000010002800280064006400E200E201E101F103E883C68301840040000 +2B9A:000040003800260011801060081804040FF81FE01F803E003800400000000000 +2B9B:00000000400430182C7822F811F010F008E008E004C004C00280028001000000 +2B9C:00000004003800F803F00FF03FE07FC03FE00FF003F000F80038000400000000 +2B9D:0000000001000380038007C007C00FE00FE01FF01FF03EF83C78301840040000 +2B9E:0000400038003E001F801FE00FF807FC0FF81FE01F803E003800400000000000 +2B9F:00000000400430183C783EF81FF01FF00FE00FE007C007C00380038001000000 +2BA0:00000002000200020002100230027FFE30001000000000000000000000000000 +2BA1:000040004000400040004008400C7FFE000C0008000000000000000000000000 +2BA2:00000000000000000000100030007FFE30021002000200020002000200000000 +2BA3:000000000000000000000008000C7FFE400C4008400040004000400000000000 +2BA4:0000000004000E001F0004000400040004000400040004000400040007F00000 +2BA5:00000000004000E001F00040004000400040004000400040004000401FC00000 +2BA6:0000000007F00400040004000400040004000400040004001F000E0004000000 +2BA7:000000001FC000400040004000400040004000400040004001F000E000400000 +2BA8:0000000000000002100230067FFCFFFC7FF83000100000000000000000000000 +2BA9:00000000000080008010C0187FFC7FFE3FFC0018001000000000000000000000 +2BAA:0000000000000000100030007FF8FFFC7FFC3006100200020000000000000000 +2BAB:0000000000000000001000183FFC7FFE7FFCC018801080000000000000000000 +2BAC:000000000000020007000F801FC0070007000700070007000700038000E00000 +2BAD:0000000000000100038007C00FE003800380038003800380038007001C000000 +2BAE:00000000000000E003800700070007000700070007001FC00F80070002000000 +2BAF:0000000000001C0007000380038003800380038003800FE007C0038001000000 +2BB0:000000220036002A0022002204220A2213FC20044008201013E00A0004000000 +2BB1:000044006C00540044004400442044503FC820041002080407C8005000200000 +2BB2:000004000A0013E020104008200413FC0A22042200220022002A003600220000 +2BB3:00000020005007C80804100220043FC8445044204400440054006C0044000000 +2BB4:000004000A00110020804040318011001100110011FE09040508030400FE0000 +2BB5:000000200050008801040202018C0088008800887F88209010A020C07F000000 +2BB6:000000FE03040508090411FE11001100110031804040208011000A0004000000 +2BB7:00007F0020C010A020907F88008800880088018C020201040088005000200000 +2BB8:00000100028004400FE010100C600440044007C0000007C0044007C000000000 +2BB9:0000000000007FFC4004410442844444482450144004400440047FFC00000000 +2BBA:0000000003FC0204020402043FC42244224423FC2040204020403FC000000000 +2BBB:0000000003FC03FC03FC03FC3FFC23FC23FC23FC2040204020403FC000000000 +2BBC:0000000003FC03FC03FC03FC3FFC3FFC3FFC3FFC3FC03FC03FC03FC000000000 +2BBD:000000003FFC20042004241422242144208421442224241420043FFC00000000 +2BBE:0000000007C00820101020082448428441044284244820081010082007C00000 +2BBF:0000000007C01FF038383018644C628C610C628C644C301838381FF007C00000 +2BC0:0000000000007FFC7FFC7FFC7FFC7FFC7FFC7FFC7FFC7FFC7FFC7FFC00000000 +2BC1:0000000000000100038007C00FE01FF03FF81FF00FE007C00380010000000000 +2BC2:00000000000007E00FF00FF01FF81FF83FFC3FFC1FF80FF007E003C001800000 +2BC3:0000000007C00FE01FF03FF87FFC7FFC7FFC7FFC7FFC3FF81FF00FE007C00000 +2BC4:0000038007C03FF83FF83FF87FFCFFFEFFFEFFFE7FFC3FF83FF83FF807C00380 +2BC5:0000000001000380038007C007C00FE00FE01FF01FF03FF83FF87FFC00000000 +2BC6:0000000000007FFC3FF83FF81FF01FF00FE00FE007C007C00380038001000000 +2BC7:00000008003800F803F80FF83FF87FF83FF80FF803F800F80038000800000000 +2BC8:0000400070007C007F007FC07FF07FF87FF07FC07F007C007000400000000000 +2BC9:0000404A4C58787E081C2222221C0000 +2BCA:0000000007C00FE01FF03FF83FF87FFC7FFC0000000000000000000000000000 +2BCB:000000000000000000000000000000007FFC7FFC3FF83FF81FF00FE007C00000 +2BCC:010001000380038007C00FE03FF8FFFE3FF80FE007C003800380010001000000 +2BCD:000000000000200810100C600FE007C007C007C00FE00C601010200800000000 +2BCE:0100010003800280044008203018E00E30180820044002800380010001000000 +2BCF:000000000000200810100C600BA00440044004400BA00C601010200800000000 +2BD0:00000000010001001FF01110111010107C7C1010111011101FF0010001000000 +2BD1:000000000100028004400BA01450204841842108101009200440028001000000 +2BD2:000000000000010001000FE0010001000FE0010001000FE00100010001000000 +2BD3:00000000000000000380044008202828282824481390082007C0010007C00100 +2BD4:000000001C702288210807C00100038004400820082008200440038000000000 +2BD5:00000000038004400820082008204444638C50144C6423881010082007C00000 +2BD6:00000000000007C008A0105020482028202820282048105008A007C000000000 +2BD7:0000000000000100038007C00100038004400BA0082008200440038000000000 +2BD8:00000000000000003C3C04200420042005A005A00420042004203C3C00000000 +2BD9:00000000000001800240027801C00040008000800100018002401E4001800000 +2BDA:000000001110210821082108193007C009201110092007C0092007C000000000 +2BDB:000000000000000001C00120012001C00100010007C00820082007C000000000 +2BDC:0000000000000000012001A0016001200100010007C00820082007C000000000 +2BDD:000000000000070002800140012000A000A00120014002800700010007C00100 +2BDE:0000000000000100038007C00FE01FF00FE007C003800100010007C001000100 +2BDF:0000000000000000000000000000200830182C681390082007C0010007C00100 +2BE0:000000000000380004000270028802880288047008203FF8002000F800200020 +2BE1:00000000000007C0082010102100210027C0210021001110092007C001000100 +2BE2:0000000000000100038007C0010001000100193007C0010006C0183000000000 +2BE3:00000000000007C0082010102108210827C80100010001000100010001000100 +2BE4:000000000000380004000200020002500250045008503FF80050005000500050 +2BE5:0000000000000000044004400380054007C00540038001000100010001000100 +2BE6:0000000000000100038007C00100010001000100010002800440082010103FF8 +2BE7:0000000000000000200820081110092007C00100010007C00920111020082008 +2BE8:00000040004000C000C001C01FC00FC007C003C001C003C00780060008000000 +2BE9:00000400040006000600070007F007E007C007800700078003C000C000200000 +2BEA:0000010001000380038007407F3C3F081F100F6007400F201ED0183020080000 +2BEB:0000010001000380038005C079FC21F811F00DE005C009E016F0183020080000 +2BEC:00000000020806180E381E783EF87FFE3EF81E780E3806180208000000000000 +2BED:00000100038007C00FE01FF03FF80100038007C00FE01FF03FF8010001000000 +2BEE:00000000104018601C701E781F7C7FFE1F7C1E781C7018601040000000000000 +2BEF:0000008000801FFC0FF807F003E001C000801FFC0FF807F003E001C000800000 +2BF0:0000000000003938054003800380010001000100038003800540393800000000 +2BF1:0000000000000380044008200820082004400380010007C00380010000000000 +2BF2:00000000000000001900250025001FC001000180004000200020002000000000 +2BF3:00000000000000003FF8200820082008200820083FF8010006C0183000000000 +2BF4:00000000000000007FFC410422881450082008201450228841047FFC00000000 +2BF5:0000000000000000410441042288145008200820145022884104410400000000 +2BF6:00000000000000003FF8200820082008200820083FF8010001001FF000000000 +2BF7:00000000000000001010082004400280010002800440082010103FF800000000 +2BF8:000000000000000001000100010001003FF80380054009201110210800000000 +2BF9:000000000000000000003FF800003FF800001C702288210822881C7000000000 +2BFA:00000000000000000000000000001C702288228822881C700000000000000000 +2BFB:0000000000000000000000000000701C88228AA28822701C0000000000000000 +2BFC:0000000000000380044004400440038000000380044004400440038000000000 +2BFD:0000000000000100038007C00100010001000380044004400440038000000000 +2BFE:00000000000000000000000000000020002000200020002000200FE000000000 +2BFF:000000007C7C10101C1C10107C7C0000 +2C00:00000000101010107C54541010100000 +2C01:0000000092929292FE80808080FE0000 +2C02:0000000044AA6C284444444444380000 +2C03:000000006090907020204C52928C0000 +2C04:00000000384444444444286CAA440000 +2C05:000000003844041C041C040444380000 +2C06:000000000000824428286C92926C0000 +2C07:000000003844824438FE926428100000 +2C08:000000000020508888FF8D8D55220000 +2C09:000000007C6C92927C10101010380000 +2C0A:000000007C6C92926C28444482FE0000 +2C0B:00000000FE8244285482828244380000 +2C0C:00000000626565669696969991000000 +2C0D:000000002020203C04043C2020200000 +2C0E:0000000038444444447CAAAAAA440000 +2C0F:00000000000000000FF812A412A40C98008003E0077009480948063000000000 +2C10:000000003C222222FCA0A02020200000 +2C11:000000001C221E020202021E221C0000 +2C12:000000003E2A2A2AE420202020200000 +2C13:00000000404040407C424242427C0000 +2C14:00000000384482828254284482FE0000 +2C15:00000000FEAAAAAAAAAAAAAAAA440000 +2C16:0000000048B46C242724246CB4480000 +2C17:00000000101038549292929254381010 +2C18:000000002020202020202C32528C0000 +2C19:000000007CAAAA92828292AAAA7C0000 +2C1A:000000001E1212127292929292720000 +2C1B:0000000092929292FE44828244380000 +2C1C:000000007191916A0A0A0A0404040000 +2C1D:0000000044447C92FE44828244380000 +2C1E:00000000929292929292929292FE0000 +2C1F:000000000000000003F8011000A000E01F10151008E000A0011003F800000000 +2C20:000000007E422418F898A424427E0000 +2C21:0000000010282844447C929292FE0000 +2C22:00002090786C4482828282446C3C1208 +2C23:000000007C4A4A4A4C50506060400000 +2C24:000000001C222060B8602020221C0000 +2C25:000000000C121030DCB01010120C0000 +2C26:0000000010284C92FE444444447C0000 +2C27:00000000000000001C38224402400EC003700EC00240024022441C3800000000 +2C28:0000000000000000387044883C80058006E0058004803C804488387000000000 +2C29:0000000000000000103828444C4092C0FF7038C0444082404444383800000000 +2C2A:0000000018242424FFA5242424180000 +2C2B:00000000F88850708E8A705088F80000 +2C2C:000000001C0404040404040408100000 +2C2D:0000000082C2B28AFE8AB2C282020000 +2C2E:00000000245456525252565A52520000 +2C2F:00007FFE61C67DBE61BE6FBE61C67FFE7FFE61867DBE618E6FBE61BE7FFE0000 +2C30:0000000000001010107C545410100000 +2C31:0000000000002A2A2A3E2020203E0000 +2C32:00000000000044AA6C28444444380000 +2C33:000000000000609090702C52928C0000 +2C34:00000000000038444444286CAA440000 +2C35:00000000000038441C041C0444380000 +2C36:0000000000000000C6286C92926C0000 +2C37:0000000000001C221C7F493214080000 +2C38:00000000000000205088FF8D55220000 +2C39:0000000000007C6C92927C1010380000 +2C3A:0000000000007C6C92926C4482FE0000 +2C3B:000000000000FE824428544444380000 +2C3C:000000000000444A4AACACB2A2000000 +2C3D:00000000000020203C04043C20200000 +2C3E:000000000000182424243C5A5A240000 +2C3F:0000000000000000000000001FF025481930010007C00EE012900C6000000000 +2C40:0000000000001C12127C505010100000 +2C41:0000000000001C221E02021E221C0000 +2C42:0000000000003E2A2A2A642020200000 +2C43:00000000000040404078444444780000 +2C44:00000000000038444454284482FE0000 +2C45:000000000000FEAAAAAAAAAAAA440000 +2C46:00000000000048B46C26246CB4480000 +2C47:00000000000010103854929254381010 +2C48:000000000000202020202C32528C0000 +2C49:0000000000007CAA92828292AA7C0000 +2C4A:0000000000000E0A0A3A4A4A4A3A0000 +2C4B:0000000000002A2A2A3E1422221C0000 +2C4C:00000000000062A2A274141408080000 +2C4D:000000000000447C92FE444444380000 +2C4E:000000000000545454545454547C0000 +2C4F:00000000000000000000000003F8011000E01F10151008E0011003F800000000 +2C50:0000000000003E2214784854223E0000 +2C51:000000000000001028447C9292FE0000 +2C52:000000002090786C448282446C3C1208 +2C53:00000000000078545458505060400000 +2C54:0000000000000C12305C3010120C0000 +2C55:000000000000040A186E58080A040000 +2C56:00000000000010284C92FE44447C0000 +2C57:0000000000000000000000001C3822440EC003700EC0024022441C3800000000 +2C58:0000000000000000000000001C3822441EC0037002C01E4022441C3800000000 +2C59:000000000000000000000000081C1422266049B87F601C2022221C1C00000000 +2C5A:000000000000102828FEAA2828100000 +2C5B:0000000000007848304E4A3048780000 +2C5C:0000000000001C040404040408100000 +2C5D:0000000000000262524A7E4A52620000 +2C5E:00000000000024545652565A52520000 +2C5F:00007FFE61C67DBE61BE6FBE61C67FFE7FFE61866FBE618E7DBE61BE7FFE0000 +2C60:000000002020207020702020203E0000 +2C61:000000180808081C081C0808083E0000 +2C62:000000001010101034581010101F0000 +2C63:000000003C2272223C20202020200000 +2C64:000000007C4242427C48444442425020 +2C65:0000000000003946043C54644CB40000 +2C66:000000001010117E14181030508C0000 +2C67:00000000444444447C44444444460202 +2C68:00000040404058644444444444460202 +2C69:00000000424448506060504844430101 +2C6A:00000040404044485060504844430101 +2C6B:000000007E02020408102040407E0202 +2C6C:0000000000007E0204081020407E0202 +2C6D:000000001A26424242424242261A0000 +2C6E:00000000424266665A5A424242420A04 +2C6F:00000000424242427E42422424180000 +2C70:000000004C52624242424242625C0000 +2C71:00000000000082858548484830300000 +2C72:00000000848A8A88A8A8D8D888880000 +2C73:00000000000042555554545454280000 +2C74:0000000020505262C224242418180000 +2C75:00000000202020203C20202020200000 +2C76:0000000000002020203C202020200000 +2C77:000000000000264949494949493E0808 +2C78:0000000000003844447C4045453A0000 +2C79:000000000C02020202020242463A0000 +2C7A:0000000000003E4141414955553E0000 +2C7B:0000000000003E0202021E02023E0000 +2C7C:000000000000000004000C0404041408 +2C7D:00000041412222141408000000000000 +2C7E:000000003C424040300C0202423C0906 +2C7F:000000007E020404081020204060100E +2C80:00000000C0201010384844444A310000 +2C81:000000000000C020103844444A310000 +2C82:000000007844444878444442427C0000 +2C83:00000000000070485070484444780000 +2C84:000000007E4040404040404040400000 +2C85:0000000000007C404040404040400000 +2C86:0000000010080C0C14121212A1FF0000 +2C87:000000000000201018181414A2FE0000 +2C88:000000003C664280FE808042663C0000 +2C89:0000000000003C4280FE8080423C0000 +2C8A:000000003A4440404020100804040800 +2C8B:0000000000003A444040201804040800 +2C8C:00000080FE0202040810204040FE0200 +2C8D:000000000080FE020408102040FE0200 +2C8E:00000000424242427E42424242420000 +2C8F:0000000000004242427E424242420000 +2C90:00000000182424A4FF25242424180000 +2C91:0000000000001824A4FF252424180000 +2C92:00000000301010101010101010080000 +2C93:00000000000030101010101010080000 +2C94:000000004C4448507048444242420000 +2C95:0000000000004C444850704844420000 +2C96:0000000060101808080C142442830000 +2C97:000000000000C0201010182844860000 +2C98:000000008282C6AA9282828282820000 +2C99:000000000000446C5444444444440000 +2C9A:000000008282C2A292928A8682820000 +2C9B:00000000000044646454544C4C440000 +2C9C:00000080FF020C30F80402020C7F0100 +2C9D:000000000080FC041860F008187E0200 +2C9E:00000000386C4482828282446C380000 +2C9F:000000000000386C448282446C380000 +2CA0:00000000FF4242424242424242420000 +2CA1:0000000000007E242424242424240000 +2CA2:000000007C4242427C40404040404040 +2CA3:0000000000007C4242427C4040404040 +2CA4:000000001C36224040404022361C0000 +2CA5:0000000000001C3622404022361C0000 +2CA6:00000000FE1010101010101010100000 +2CA7:000000000000FE101010101010100000 +2CA8:00000000838244281010101010100000 +2CA9:00000000000083442810101010100000 +2CAA:00001010387C5492929292547C381010 +2CAB:000000001010387C549292547C381010 +2CAC:00000000434224181818242442420000 +2CAD:00000000000043241818242442420000 +2CAE:00001010939254381010101010101000 +2CAF:00000000101093543810101010101000 +2CB0:000000004492929292929292926C0000 +2CB1:000000000000449292929292926C0000 +2CB2:0000000000101010FE00000000000000 +2CB3:000000000000000010107C0000000000 +2CB4:00000000040810204620100804000000 +2CB5:00000000000000081020442010080000 +2CB6:0000000002FE000002FE000002FE0000 +2CB7:000000000000027E00027E00027E0000 +2CB8:0000004040201008040810207C000000 +2CB9:000000000000202010080408103C0000 +2CBA:000000000000000002FE000000000000 +2CBB:000000000000000000027E0000000000 +2CBC:00000000929292929292929292920000 +2CBD:00000000000092929292929292920000 +2CBE:0000000092929292FF92929292920000 +2CBF:000000000000929292FF929292920000 +2CC0:000000003C2222223C20FEA020202020 +2CC1:0000000000003C2222223C20FEA02020 +2CC2:54107C1044929292929292926E027C80 +2CC3:000054107C104492929292926E027C80 +2CC4:000000407E020C307804020202047800 +2CC5:0000000000407C0408103C0202423C00 +2CC6:00000000040404080808081010102020 +2CC7:00000000000004040808081010102020 +2CC8:000000003C424202047E1020423C0000 +2CC9:0000000000003C4242047E30423C0000 +2CCA:000000003C424A320204081020400000 +2CCB:0000000000003C424A32040810200000 +2CCC:0000000078C4C202047C02020202827C +2CCD:00000000000078C4C2023C040202827C +2CCE:000000001E1111212220204040408080 +2CCF:0000000000001E112121224040408080 +2CD0:000000004040404040404040427E0000 +2CD1:000000000000404040404040447C0000 +2CD2:000000000204081020404C52423C0000 +2CD3:000000000000040810204C52423C0000 +2CD4:000C1020180808080808080808180000 +2CD5:0000000C102018080808080808180000 +2CD6:000000002020202020202020227EA040 +2CD7:000000000000101010101010123E5020 +2CD8:00000000424242424242424242FF0000 +2CD9:000000000000242424242424247E0000 +2CDA:0000000010080C0C54321A16A3FF0000 +2CDB:00000000000010080C2C1A0E537F0000 +2CDC:003C4040386C4482828282446C380000 +2CDD:0000003C4040386C448282446C380000 +2CDE:000000007E22202020202020223E0000 +2CDF:0000000000007E2220202020243C0000 +2CE0:00000000102649516224584080800000 +2CE1:00000000000010264972245880800000 +2CE2:00000000FC203C2222223C2020202020 +2CE3:000000000000FC203C2222223C202020 +2CE4:0000000000004C44485070484442021C +2CE5:00001E11111E1092D6BA929292921010 +2CE6:001E11111E10FE545454545454541010 +2CE7:01E00110011001E001007FFE391C6D3645228140814045226D36391C01000100 +2CE8:001E11111E107E101010101010101010 +2CE9:1E11111E101056545438383854541010 +2CEA:0000000000000000000000001FFC3636222241404140222236361C1C00000000 +2CEB:000000006C9292926C00FE0000000000 +2CEC:0000000000006C92926C00FE00000000 +2CED:00000000424242665A5A664242420000 +2CEE:0000000000004242665A5A6642420000 +2CEF:000000000C000FFC000C00000000000000000000000000000000000000000000 +2CF0:603E6000000000000000000000000000 +2CF1:067C0600000000000000000000000000 +2CF2:000810203C82424242424242423C0000 +2CF3:0000000810203C8242424242423C0000 +2CF4:00007FFE61C67DBE61BE6FBE61C67FFE7FFE61B66FB663866FF66FF67FFE0000 +2CF5:00007FFE61C67DBE61BE6FBE61C67FFE7FFE61866FBE63866FF66F867FFE0000 +2CF6:00007FFE61C67DBE61BE6FBE61C67FFE7FFE61CE6FBE638E6FB66FCE7FFE0000 +2CF7:00007FFE61C67DBE61BE6FBE61C67FFE7FFE61866FF663EE6FDE6FDE7FFE0000 +2CF8:00007FFE61C67DBE61BE6FBE61C67FFE7FFE61CE6FB663CE6FB66FCE7FFE0000 +2CF9:00000000D8D848242424241212120000 +2CFA:0000000018181020202020404C4C0000 +2CFB:00000000303010080808080464640000 +2CFC:00000000363624484848489090900000 +2CFD:00000000000000040810100804380000 +2CFE:000000000000181010D6101030000000 +2CFF:00300804000000000000000000000000 +2D00:00000000000000007E222020203E0200 +2D01:0000000000000000C444447C0402423C +2D02:0000000000000000FC4444444442023C +2D03:0000000000407C141038444444380000 +2D04:0000000000000000FC44444444460202 +2D05:000000000000000000000000000000003FF01110111011101110111001000080 +2D06:00000040701010101C121212121C0000 +2D07:000000000000000000000000000000001FF808880888088808880F8800000000 +2D08:00000000000000007E32220202020000 +2D09:0000000020202038242424241C040404 +2D0A:000000000000000000000000000000001FF8088808880888088808F800000000 +2D0B:000000203C0404041E24242424180000 +2D0C:000000007C4440407C44444444440000 +2D0D:00000000000000000000000000000000311011101110111011101FF800000000 +2D0E:0000000000000000B2D21212121F0000 +2D0F:0000000000000000B2D21212121F0202 +2D10:0000000000000000010001000100010011F011101110111011101F1000000000 +2D11:000000004040404048484848487C0400 +2D12:0000000000000000FC44447C4040403C +2D13:00000000000000000008000800080008188808880888088808880FF800080008 +2D14:000000000000000000000000000000001FF808880888088808880FF800800080 +2D15:0000000010101016BAD0101010100000 +2D16:0000000000000000FC44444444460000 +2D17:0000000000000000622222223E020202 +2D18:00000000000000622222223E0202423C +2D19:000000002020203C2424242020202020 +2D1A:0000000000000000FC44444444444038 +2D1B:000000000000000001000100010001001FF011101110111011101F1000000000 +2D1C:000000000000000000000000000000001FF80888088808880888089808000800 +2D1D:00000000000000007C24203804242418 +2D1E:000000000000000066222222223E2020 +2D1F:00000000000000C0FE22140C12214080 +2D20:000000000000000000000000000000003F10111011101110111011F800000000 +2D21:00000000404040784C40404040400000 +2D22:00000000000000004078040404780000 +2D23:00000000040404046424243C04040404 +2D24:000000000000000000006222223E0808 +2D25:000000000000000000F00110010001001FF011101110111011101F1000000000 +2D26:00007FFE618E7DB661B66FB6618E7FFE7FFE61CE7DBE618E6FB661CE7FFE0000 +2D27:00000000000000001824040830404438 +2D28:00007FFE618E7DB661B66FB6618E7FFE7FFE61CE7DB661CE6FB661CE7FFE0000 +2D29:00007FFE618E7DB661B66FB6618E7FFE7FFE61CE7DB661C66FF661CE7FFE0000 +2D2A:00007FFE618E7DB661B66FB6618E7FFE7FFE61867DB661866FB661B67FFE0000 +2D2B:00007FFE618E7DB661B66FB6618E7FFE7FFE618E7DB6618E6FB6618E7FFE0000 +2D2C:00007FFE618E7DB661B66FB6618E7FFE7FFE61C67DBE61BE6FBE61C67FFE0000 +2D2D:00000000000000003C040810203C0000 +2D2E:00007FFE618E7DB661B66FB6618E7FFE7FFE61867DBE618E6FBE61867FFE0000 +2D2F:00007FFE618E7DB661B66FB6618E7FFE7FFE61867DBE618E6FBE61BE7FFE0000 +2D30:00000000000000000000182424180000 +2D31:00000000000000384482FE8244380000 +2D32:00000000000000385492FE9254380000 +2D33:000000000000FE442810102844820000 +2D34:00000000000082442810102844FE0000 +2D35:000000000000FE442810102844FE0000 +2D36:000000000000D6D61010101010100000 +2D37:00000000000010282828284444440000 +2D38:00000000000044444428282828100000 +2D39:00000000007E404040784040407E0000 +2D3A:00000000007E0202027E0202027E0000 +2D3B:00000018242418007E00182424180000 +2D3C:000000000000EE28282838282828EE00 +2D3D:000000000000FE84889090A8C4820000 +2D3E:0000000000606000000C0C0000606000 +2D3F:00000000000082C4A890908884FE0000 +2D40:00000000000000385492929254380000 +2D41:000000000000003A448A92A244B80000 +2D42:00001818000018180000181800001818 +2D43:00000000000001020408182442810000 +2D44:0000000000001010107C444444440000 +2D45:00000000000092543810102844820000 +2D46:00000000000000006666000066660000 +2D47:000000000000FE84889090A0C0FE0000 +2D48:0000000000000000000000000000000000001998199800000000000000000000 +2D49:00000000000810201008102010080000 +2D4A:00000000007C101010101010107C0000 +2D4B:00000000000000C62810101028C60000 +2D4C:000000000000282828FE28FE28282800 +2D4D:0000000000002424242C342424242400 +2D4E:00000000007E404040404040407E0000 +2D4F:00000000000010101010101010101000 +2D50:000000000000101010FE10FE10101000 +2D51:00000000101010101010101010001010 +2D52:000000000000003C0408182424180000 +2D53:00000000182424180000182424180000 +2D54:00000000000000384482828244380000 +2D55:00000000000000384482928A443A0000 +2D56:000000000000444444447C1010100000 +2D57:00000000181800001818000018180000 +2D58:0000000000C3C3000018180000C3C300 +2D59:000000000000003844BABABA44380000 +2D5A:000000000000003A448A928244380000 +2D5B:00000000001E294640404046291E0000 +2D5C:000000000000101010107C1010101000 +2D5D:00000000000082442810102844820000 +2D5E:00000000001E294650785046291E0000 +2D5F:00000000007E4048487C4848407E0000 +2D60:000000000000102828282844447C0000 +2D61:000000000000444444444444447C0000 +2D62:00000000000000081020100810200000 +2D63:00000092925438101010385492920000 +2D64:00000000000030282420202020200000 +2D65:0000009292543810FE10385492920000 +2D66:00000000000408102040201008040000 +2D67:000000000000000000EE000000000000 +2D68:00007FFE618E7DB661B66FB6618E7FFE7FFE73CE6FB663CE6DB673CE7FFE0000 +2D69:00007FFE618E7DB661B66FB6618E7FFE7FFE73CE6FB663C66DF673CE7FFE0000 +2D6A:00007FFE618E7DB661B66FB6618E7FFE7FFE73866FB663866DB673B67FFE0000 +2D6B:00007FFE618E7DB661B66FB6618E7FFE7FFE738E6FB6638E6DB6738E7FFE0000 +2D6C:00007FFE618E7DB661B66FB6618E7FFE7FFE73C66FBE63BE6DBE73C67FFE0000 +2D6D:00007FFE618E7DB661B66FB6618E7FFE7FFE738E6FB663B66DB6738E7FFE0000 +2D6E:00007FFE618E7DB661B66FB6618E7FFE7FFE73866FBE638E6DBE73867FFE0000 +2D6F:002424243C0000000000000000000000 +2D70:00000000000002020202040408106000 +2D71:00007FFE618E7DB661B66FB6618E7FFE7FFE61EE7DCE7BEE77EE77C67FFE0000 +2D72:00007FFE618E7DB661B66FB6618E7FFE7FFE61867DF67B8677BE77867FFE0000 +2D73:00007FFE618E7DB661B66FB6618E7FFE7FFE618E7DF67BC677F6778E7FFE0000 +2D74:00007FFE618E7DB661B66FB6618E7FFE7FFE61B67DB67B8677F677F67FFE0000 +2D75:00007FFE618E7DB661B66FB6618E7FFE7FFE61867DBE7B8677F677867FFE0000 +2D76:00007FFE618E7DB661B66FB6618E7FFE7FFE61CE7DBE7B8E77B677CE7FFE0000 +2D77:00007FFE618E7DB661B66FB6618E7FFE7FFE61867DF67BEE77DE77DE7FFE0000 +2D78:00007FFE618E7DB661B66FB6618E7FFE7FFE61CE7DB67BCE77B677CE7FFE0000 +2D79:00007FFE618E7DB661B66FB6618E7FFE7FFE61CE7DB67BC677F677CE7FFE0000 +2D7A:00007FFE618E7DB661B66FB6618E7FFE7FFE61867DB67B8677B677B67FFE0000 +2D7B:00007FFE618E7DB661B66FB6618E7FFE7FFE618E7DB67B8E77B6778E7FFE0000 +2D7C:00007FFE618E7DB661B66FB6618E7FFE7FFE61C67DBE7BBE77BE77C67FFE0000 +2D7D:00007FFE618E7DB661B66FB6618E7FFE7FFE618E7DB67BB677B6778E7FFE0000 +2D7E:00007FFE618E7DB661B66FB6618E7FFE7FFE61867DBE7B8E77BE77867FFE0000 +2D7F:00000000000000000000000000041F04 +2D80:000000000600060006000F000F8019C0D8C0F8FCD8D618DC18C018C000000000 +2D81:0000000007FC0FFC18A610A611461F7C0E3C0200020036003C00340000000000 +2D82:00000000000001F803E4063C6C007C006C000C000C000C00043003F000300000 +2D83:000000000600060006000F000F8019C0D8C0F800D80018001800180000000000 +2D84:0000000060607FE006000F000F8019C0D8C0F800D80018001800180000000000 +2D85:000000000000000000000F000F8019C0D8C0F800D80018001800180000000000 +2D86:00000000038006C00C600C600C600C600EC007803FF0333003003F0030000000 +2D87:000018301FF006C00C600C600C600C600EC007803FF0333003003F0030000000 +2D88:0000000007F80FCC187818001C000C0007C000C000C00CC00FC00C0000000000 +2D89:18181FF8018007F80FCC187818000C0007C000C000C00CC00FC00C0000000000 +2D8A:0000000003000300030003C000C001C031E03F70373006300630060000000000 +2D8B:000000000000000001803180B180FF80B1803180300030003000300000000000 +2D8C:0000000001C003E036203E20364007F801980300030006000E00000000000000 +2D8D:0180018001C003E036203E20364007F801980300030006000E00000000000000 +2D8E:0C300FF0018001C033E03E20364007F801980300030006000E00000000000000 +2D8F:00000000000001F003580358364C3E4C364C064C060006000600060000000000 +2D90:00000000000001FC03CC06CC0CAA0CEE6C007F006E800C4006C0038000000000 +2D91:0000000001C003E00230033001F0006000C007F006187E186300030000000000 +2D92:000000000C300FF01FF819980180018031803F80330006000C00080000000000 +2D93:01C063C07E000C001C003300638061C060C000FC00D400DC00C000C007F80E1C +2D94:00000000C0C0FFC00C001E003E007300636003E0037C030C0300030000000000 +2D95:0000000060607FE006000F001F00398031800180018001F001900FF00C000000 +2D96:01C063C07E000C001C003300638061D860D800FE00C600C000C000C007F80E1C +2D97:00007FFE618E7DB661B66FB6618E7FFE7FFE73866DF671EE7DDE73DE7FFE0000 +2D98:00007FFE618E7DB661B66FB6618E7FFE7FFE73CE6DB671CE7DB673CE7FFE0000 +2D99:00007FFE618E7DB661B66FB6618E7FFE7FFE73CE6DB671C67DF673CE7FFE0000 +2D9A:00007FFE618E7DB661B66FB6618E7FFE7FFE73866DB671867DB673B67FFE0000 +2D9B:00007FFE618E7DB661B66FB6618E7FFE7FFE738E6DB6718E7DB6738E7FFE0000 +2D9C:00007FFE618E7DB661B66FB6618E7FFE7FFE73C66DBE71BE7DBE73C67FFE0000 +2D9D:00007FFE618E7DB661B66FB6618E7FFE7FFE738E6DB671B67DB6738E7FFE0000 +2D9E:00007FFE618E7DB661B66FB6618E7FFE7FFE73866DBE718E7DBE73867FFE0000 +2D9F:00007FFE618E7DB661B66FB6618E7FFE7FFE73866DBE718E7DBE73BE7FFE0000 +2DA0:000000001FF81998018003C003E0067036303E30363006300630063000000000 +2DA1:000000003FF033300300078007C00CE06C6C7C7C6C6C0C600C600C6000000000 +2DA2:000000003FF033300300078007C00CE06C607C606C600C600C6C0C7C000C0000 +2DA3:000000001FF81998018003C003E0067036303E30363000300030003000000000 +2DA4:000000003FF033300300078007C00CE06C607C606C600C7C0C640C7C00000000 +2DA5:000000007FE066600300078007C00CE06C607C606C600C600C600C6000000000 +2DA6:000000000FFC0CCC00C001E003E0073036303E30363006000600060000000000 +2DA7:00007FFE618E7DB661B66FB6618E7FFE7FFE61866DF661EE6DDE6DDE7FFE0000 +2DA8:000018181FF81998018001801FF81998018001801F8019800180000000000000 +2DA9:000018181FF81998018001801FF81998018001981FF819980180000000000000 +2DAA:000018181FF81998018001801FF81998018001801F80199801F8001800000000 +2DAB:000018181FF81998018001801FF81998018001801F8019800380070018001800 +2DAC:000018181FF81998018001801FF81998018001801FF0199001F0000000000000 +2DAD:000030303FF03330018001801FF81998018001801F8019800180000000000000 +2DAE:301830183BA006C00C600C600C600C600EC07FF8631803003F00330003000000 +2DAF:00007FFE618E7DB661B66FB6618E7FFE7FFE61866DBE618E6DBE6DBE7FFE0000 +2DB0:000000000000000000007C3E666606607FE06660066006600660000000000000 +2DB1:000000000000000000007C3E666606607FFE6666066006600660000000000000 +2DB2:000000000000000000007C3E666606607FE0666006600666067E000600000000 +2DB3:000000000000000000007C3E666606607FE06660066000600060000000000000 +2DB4:000000000000000000007C3E666606607FE06660067C0664067C000000000000 +2DB5:61807F800C000C007C3E666606607FE066600660066006600660000000000000 +2DB6:000000000000000000007C3E666606607FE06660066006000600000000000000 +2DB7:00007FFE618E7DB661B66FB6618E7FFE7FFE63866DF663EE6DDE63DE7FFE0000 +2DB8:000000000000000003E007F00C98188CF88CC88C1CCE1AAD1AAD1EEF00000000 +2DB9:000000000000000003E007F00C98188FF88BC8881CCC1AAA1AAA1EEE00000000 +2DBA:000000000000000003E007F00C98188CF88CC88C1CCC1AAC1AAC1EEF00030000 +2DBB:000000000000000003E007F00C981CCCFAACDAAC1EEC0018001C0032003E0000 +2DBC:000000000000000003F007F80C9B188EF88BC8881CCC1AAA1AAA1EEE00000000 +2DBD:000000000000000003F007F80CD81CCCFAEADA6A1E6E00500050007000000000 +2DBE:000000000000000003F007F80C9818CCF8AAC8AA1CEE1A001A001E0000000000 +2DBF:00007FFE618E7DB661B66FB6618E7FFE7FFE63866DBE638E6DBE63BE7FFE0000 +2DC0:00000C300E700180018003F00D98199819B00FC0018001800180018000000000 +2DC1:00000C300E700180018003F00D98199819B00FC0019801F80198018000000000 +2DC2:00000C300E700180018003F00D98199819B00FC001800180019801F800180000 +2DC3:000018601CE00300030007E01B30333033601F80030006000C00380038003800 +2DC4:00000C300E700180018003F00D98199819B00FC0018001F0019001F000000000 +2DC5:000030C039C00600018003F00D98199819B00FC0018001800180018000000000 +2DC6:00000C300E70018002400240018003F00D98199819B00FC00180018000000000 +2DC7:00007FFE618E7DB661B66FB6618E7FFE7FFE71866FF66FEE6FDE71DE7FFE0000 +2DC8:0000000000000D980DD80FF00E60066006600660066006600660066000000000 +2DC9:0000000000001B301BB01FE01CC00CC00CF80CD80CC00CC00CC00CC000000000 +2DCA:0000000000001B301BB01FE01CC00CC00CC00CC00CC00CC00CC00CF800180000 +2DCB:0000000000000D980DD80FF00E60066006600060006000600060006000000000 +2DCC:0000000000001B301BB01FE01CC00CC00CC00CC00CC00CF80CC80CF800000000 +2DCD:000000000000199819D81FF01860066006600660066006600660066000000000 +2DCE:0000000000000D980DD80FF00E60066006600660060006000600060000000000 +2DCF:00007FFE618E7DB661B66FB6618E7FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +2DD0:30C039C0C630FFF0C63001C003E0067006300630063006300630063000000000 +2DD1:30C039C0C630FFF0C63001C003E006700636063E063606300630063000000000 +2DD2:30C039C0C630FFF0C63001C003E0067036303E30363006300636063E00060000 +2DD3:30C039C0C630FFF0C63001C003E0067006300630003000300030003000000000 +2DD4:30C039C0C630FFF0C63001C003E00670063006300630063E0632063E00000000 +2DD5:30C039C0C630FFF0C63003C00FE0187006300630063006300630063000000000 +2DD6:30C039C0C630FFF0C63001C003E0067006300630060006000600060000000000 +2DD7:00007FFE618E7DB661B66FB6618E7FFE7FFE63866DF66DEE6DDE63DE7FFE0000 +2DD8:0000000018601CE00FC007803F8030C000C000C000C000C000C000C000000000 +2DD9:0000000030C039C01F800F007F00618001F001B0018001800180018000000000 +2DDA:0000000030C039C01F800F007F0061800180018001800180018001F000300000 +2DDB:0000000030C039C01F800F007F006180018001800180038007007C0060000000 +2DDC:0000000030C039C01F800F007F00618001800180018001F0019001F000000000 +2DDD:0000000030C039C01F800F003F0025803D800180018001800180018000000000 +2DDE:30C039C01F80060006000F007F00618001800180018001800180018000000000 +2DDF:00007FFE618E7DB661B66FB6618E7FFE7FFE63866DBE6D8E6DBE63BE7FFE0000 +2DE0:04182038241800000000000000000000 +2DE1:38243824380000000000000000000000 +2DE2:38202020200000000000000000000000 +2DE3:1C1414243E4200000000000000000000 +2DE4:54543854540000000000000000000000 +2DE5:18240824180000000000000000000000 +2DE6:24283028240000000000000000000000 +2DE7:1E121252220000000000000000000000 +2DE8:446C5444440000000000000000000000 +2DE9:24243C24240000000000000000000000 +2DEA:18242418000000000000000000000000 +2DEB:3C242424240000000000000000000000 +2DEC:38243820200000000000000000000000 +2DED:18202018000000000000000000000000 +2DEE:7C101010100000000000000000000000 +2DEF:44281028440000000000000000000000 +2DF0:242424243E0200000000000000000000 +2DF1:24241C04040000000000000000000000 +2DF2:545454547C0000000000000000000000 +2DF3:545454547E0200000000000000000000 +2DF4:18243C24180000000000000000000000 +2DF5:3F444434000000000000000000000000 +2DF6:18041C241C0000000000000000000000 +2DF7:18243C201C0000000000000000000000 +2DF8:081C081C222200000000000000000000 +2DF9:04281028281000000000000000000000 +2DFA:107C101C121C00000000000000000000 +2DFB:4C5272524C0000000000000000000000 +2DFC:4C427E524E0000000000000000000000 +2DFD:10283854540000000000000000000000 +2DFE:7C442838545400000000000000000000 +2DFF:5F514A7E555500000000000000000000 +2E00:0000003C202020202000000000000000 +2E01:0000003C202420202000000000000000 +2E02:00000004081020202020000000000000 +2E03:00000020100804040404000000000000 +2E04:00000004081020242020000000000000 +2E05:00000020100804240404000000000000 +2E06:0000007C101010101000000000000000 +2E07:0000007C101410101000000000000000 +2E08:00000038444024108848300000000000 +2E09:00000038444020108848300000000000 +2E0A:00000070880810204448300000000000 +2E0B:0000007C4444447C0000000000000000 +2E0C:00000040201008040000000000000000 +2E0D:00000004081020400000000000000000 +2E0E:000000800100038000000FE0010002807FFC028001000FE00000038001000200 +2E0F:0000000000000000000000000000000000000000000000000000000000007FFE +2E10:0000000000000000000000000000000000000000000000007FFE100020004000 +2E11:0000000000000000000000000000000000000000000000007FFF000800040002 +2E12:00000000000000000000000000100810 +2E13:0000000000000008001000200440008001000200044008001000200000000000 +2E14:00000000000000080010002000400080010022002400280010000E0000000000 +2E15:00000000000000E0001000280048008801000200040008001000200000000000 +2E16:00000000000820100804081020080000 +2E17:00000000000000000618600618600000 +2E18:000000001010001010305052523C0000 +2E19:0000000000000A2BACAFB07EE0DC0000 +2E1A:0000000000240000007E000000000000 +2E1B:00001824241800314946000000000000 +2E1C:00000000000000000000004020100804 +2E1D:00000000000000000000000408102040 +2E1E:00000018180000314946000000000000 +2E1F:0000000000000031494600000C0C0000 +2E20:00000010101010101C10101010100000 +2E21:00000008080808083808080808080000 +2E22:0000000E080808080800000000000000 +2E23:00000070101010101000000000000000 +2E24:00000000000000000008080808080E00 +2E25:00000000000000000010101010107000 +2E26:000000000000003E4040403E00000000 +2E27:000000000000007C0202027C00000000 +2E28:00000012242448484848484824241200 +2E29:00000090484824242424242448489000 +2E2A:00000000000066660000001818000000 +2E2B:00000000000018180000006666000000 +2E2C:00000000000066660000006666000000 +2E2D:000000000000181800DBDB0018180000 +2E2E:000000003C4242402010100010100000 +2E2F:08101008081000000000000000000000 +2E30:00000000000000182424180000000000 +2E31:00000000000000183C3C180000000000 +2E32:00000000000000000000081010180000 +2E33:00000000000000000000181800000000 +2E34:00000000000000000000180808100000 +2E35:00000000081010180000001818000000 +2E36:00000818082878280818080808080000 +2E37:0000080C080A0F0A080C080808080000 +2E38:0000080808081C082A7F2A081C080000 +2E39:000000003C42403C42423C0000000000 +2E3A:0000000000000000000000000000000000003FFC000000000000000000000000 +2E3B:0000000000000000000000000000000000007FFF000000000000000000000000 +2E3C:00000000000000000000001408140000 +2E3D:00000008000800080008000800080000 +2E3E:000C1008040810080408100804180000 +2E3F:000A7F8A8AFF8A7F0A0A0A0A0A0A0000 +2E40:0000000000000000003C003C00000000 +2E41:00000000000000000000000018101008 +2E42:00000000000000000000000066444422 +2E43:0000000000000000000000000000180018001FFE000000000000000000000000 +2E44:00000008102000000000000000081020 +2E45:00000000000000001824240000000000 +2E46:00000000242418001824240000000000 +2E47:00000000000000002424180000000000 +2E48:00000000000000005444380000000000 +2E49:00000000000018080810001808081000 +2E4A:00000000020204183C3C182040400000 +2E4B:00082A7F2A08082A7F2A08082A7F2A08 +2E4C:00000000000060101060000060600000 +2E4D:000000007E4448506040404040400000 +2E4E:00000000000000046870000060600000 +2E4F:00000000006264081224081026060000 +2E50:00003FE00F8007080708071807F807F807F80718070807080F803FE000000000 +2E51:00000FF803E021C021C031C03FC03FC03FC031C021C021C003E00FF800000000 +2E52:000000007E02020202020202221C0000 +2E53:00007FFE61867DBE618E6FBE61867FFE7FFE618E6FF661C67DF6618E7FFE0000 +2E54:00007FFE61867DBE618E6FBE61867FFE7FFE61B66FB661867DF661F67FFE0000 +2E55:00007FFE61867DBE618E6FBE61867FFE7FFE61866FBE61867DF661867FFE0000 +2E56:00007FFE61867DBE618E6FBE61867FFE7FFE61CE6FBE618E7DB661CE7FFE0000 +2E57:00007FFE61867DBE618E6FBE61867FFE7FFE61866FF661EE7DDE61DE7FFE0000 +2E58:00007FFE61867DBE618E6FBE61867FFE7FFE61CE6FB661CE7DB661CE7FFE0000 +2E59:00007FFE61867DBE618E6FBE61867FFE7FFE61CE6FB661C67DF661CE7FFE0000 +2E5A:00007FFE61867DBE618E6FBE61867FFE7FFE61866FB661867DB661B67FFE0000 +2E5B:00007FFE61867DBE618E6FBE61867FFE7FFE618E6FB6618E7DB6618E7FFE0000 +2E5C:00007FFE61867DBE618E6FBE61867FFE7FFE61C66FBE61BE7DBE61C67FFE0000 +2E5D:00007FFE61867DBE618E6FBE61867FFE7FFE618E6FB661B67DB6618E7FFE0000 +2E5E:00007FFE61867DBE618E6FBE61867FFE7FFE61866FBE618E7DBE61867FFE0000 +2E5F:00007FFE61867DBE618E6FBE61867FFE7FFE61866FBE618E7DBE61BE7FFE0000 +2E60:00007FFE61867DBE618E6FBE61867FFE7FFE73CE6FB663B66DB673CE7FFE0000 +2E61:00007FFE61867DBE618E6FBE61867FFE7FFE73EE6FCE63EE6DEE73C67FFE0000 +2E62:00007FFE61867DBE618E6FBE61867FFE7FFE73866FF663866DBE73867FFE0000 +2E63:00007FFE61867DBE618E6FBE61867FFE7FFE738E6FF663C66DF6738E7FFE0000 +2E64:00007FFE61867DBE618E6FBE61867FFE7FFE73B66FB663866DF673F67FFE0000 +2E65:00007FFE61867DBE618E6FBE61867FFE7FFE73866FBE63866DF673867FFE0000 +2E66:00007FFE61867DBE618E6FBE61867FFE7FFE73CE6FBE638E6DB673CE7FFE0000 +2E67:00007FFE61867DBE618E6FBE61867FFE7FFE73866FF663EE6DDE73DE7FFE0000 +2E68:00007FFE61867DBE618E6FBE61867FFE7FFE73CE6FB663CE6DB673CE7FFE0000 +2E69:00007FFE61867DBE618E6FBE61867FFE7FFE73CE6FB663C66DF673CE7FFE0000 +2E6A:00007FFE61867DBE618E6FBE61867FFE7FFE73866FB663866DB673B67FFE0000 +2E6B:00007FFE61867DBE618E6FBE61867FFE7FFE738E6FB6638E6DB6738E7FFE0000 +2E6C:00007FFE61867DBE618E6FBE61867FFE7FFE73C66FBE63BE6DBE73C67FFE0000 +2E6D:00007FFE61867DBE618E6FBE61867FFE7FFE738E6FB663B66DB6738E7FFE0000 +2E6E:00007FFE61867DBE618E6FBE61867FFE7FFE73866FBE638E6DBE73867FFE0000 +2E6F:00007FFE61867DBE618E6FBE61867FFE7FFE73866FBE638E6DBE73BE7FFE0000 +2E70:00007FFE61867DBE618E6FBE61867FFE7FFE61CE7DB67BB677B677CE7FFE0000 +2E71:00007FFE61867DBE618E6FBE61867FFE7FFE61EE7DCE7BEE77EE77C67FFE0000 +2E72:00007FFE61867DBE618E6FBE61867FFE7FFE61867DF67B8677BE77867FFE0000 +2E73:00007FFE61867DBE618E6FBE61867FFE7FFE618E7DF67BC677F6778E7FFE0000 +2E74:00007FFE61867DBE618E6FBE61867FFE7FFE61B67DB67B8677F677F67FFE0000 +2E75:00007FFE61867DBE618E6FBE61867FFE7FFE61867DBE7B8677F677867FFE0000 +2E76:00007FFE61867DBE618E6FBE61867FFE7FFE61CE7DBE7B8E77B677CE7FFE0000 +2E77:00007FFE61867DBE618E6FBE61867FFE7FFE61867DF67BEE77DE77DE7FFE0000 +2E78:00007FFE61867DBE618E6FBE61867FFE7FFE61CE7DB67BCE77B677CE7FFE0000 +2E79:00007FFE61867DBE618E6FBE61867FFE7FFE61CE7DB67BC677F677CE7FFE0000 +2E7A:00007FFE61867DBE618E6FBE61867FFE7FFE61867DB67B8677B677B67FFE0000 +2E7B:00007FFE61867DBE618E6FBE61867FFE7FFE618E7DB67B8E77B6778E7FFE0000 +2E7C:00007FFE61867DBE618E6FBE61867FFE7FFE61C67DBE7BBE77BE77C67FFE0000 +2E7D:00007FFE61867DBE618E6FBE61867FFE7FFE618E7DB67BB677B6778E7FFE0000 +2E7E:00007FFE61867DBE618E6FBE61867FFE7FFE61867DBE7B8E77BE77867FFE0000 +2E7F:00007FFE61867DBE618E6FBE61867FFE7FFE61867DBE7B8E77BE77BE7FFE0000 +2E80:00000000000000000E000180006000101C00030000C000200000000000000000 +2E81:0000007C1F801000100010001000100010001000100020002000200040008000 +2E82:000000000000000000003FF80008000800100010002000200000000000000000 +2E83:0000100010001000100010001000100010001000100010001010101010100FF0 +2E84:00000000FFE00020002000200020002000200020002000100012000A00060002 +2E85:0040004000800100010003000500090001000100010001000100010001000100 +2E86:00000FF008100810081008100810081008100810081010101010101020504020 +2E87:00001FF01010101010101010101010101010101010102008200A200A40068002 +2E88:0400040007F00820084010002000000000000000000000000000000000000000 +2E89:0004000400040044004400440044004400440044004400440004000400140008 +2E8A:040004000400040004000400040007F004000400040004000400040004000400 +2E8B:00000000000000000000000000003FF020102010201020502020200420041FFC +2E8C:0100111009200100000000000000000000000000000000000000000000000000 +2E8D:0208210810900820000000000000000000000000000000000000000000000000 +2E8E:000000000000FFFE0440044004400440044008400840104210422042403E8000 +2E8F:022002100408080410026422042004200420042004200420082208221022601E +2E90:01000100010001000100FFFE024002400240044004400840084210422042C03E +2E91:0220021004080804100267E2042004200420042004200420082208221022601E +2E92:000000003FF020102010201020103FF02000200020002004200420041FFC0000 +2E93:00000100010002100410082010401F80010002000420081010083FFC00040004 +2E94:000004000400040007F0042008200820082008401FC00040004000407FFC0000 +2E95:00000000000000003FF8000800083FF80008000800083FF80008000000000000 +2E96:08000800080008000C004A004A00880008000800080008000800080008000800 +2E97:000000000000000000000200020002200290124812242214221042000A000400 +2E98:0100010001001FC001000100010001C007001900010001000100010005000200 +2E99:0800080008000FFC18102410442082200140008001800240042008101008E006 +2E9A:00007FFE61867DBE618E6FBE61867FFE7FFE73866DB671867DB673B67FFE0000 +2E9B:3FF002000200420042007FFC0480048004800880088010842084407C80000000 +2E9C:3FF820082FE820082FE800000000000000000000000000000000000000000000 +2E9D:00001FF01010101010101FF01010101010101FF0101010101010101010501020 +2E9E:0080008000FE088008800FF8100814102210412001400080010002000C007000 +2E9F:00001FF01010121011101110FFFE20102210211021103FFC0010001000A00040 +2EA0:000000103FF82008200820083FF8200020883FFC2080204020202010380E3004 +2EA1:200010001000800040004800080010001000E000200020002000200000000000 +2EA2:01000100010021081110092001000140052009101108E1044104010005000200 +2EA3:0000000000000000000000000000000000000000248822444244800400000000 +2EA4:0010007C0780F808210818900890000000000000000000000000000000000000 +2EA5:007C1F9011101110210821044002000000000000000000000000000000000000 +2EA6:020002000200220012000A000200020006000A00120062002200020002000200 +2EA7:010011001FF821000100FFFE0000000000000000000000000000000000000000 +2EA8:4400280010002800480088000800180028004800880008000800500020000000 +2EA9:FE0010001000100010001000FE00100010001000100016003800C00000000000 +2EAA:00000000FC0008001000100010005C0050005000500050005C00F00040000000 +2EAB:3FF82448244824483FF800000000000000000000000000000000000000000000 +2EAC:00007E0000000000FE0010001000540052005200900010001000100050002000 +2EAD:200010001000F800080010001000380054009400100010001000100010001000 +2EAE:00001040104010403EFE289049108A1000000000000000000000000000000000 +2EAF:080008001000120022007C000800100024007E00020000005200490089000000 +2EB0:10001000200024004400F800100020004000FC00400000001C00E00040000000 +2EB1:3FF8200824482288210822882448200800000000000000000000000000000000 +2EB2:3FF82448244824483FF800000000000000000000000000000000000000000000 +2EB3:00003FFC20044008044008201010000000000000000000000000000000000000 +2EB4:00007FFE4444844804400440044004400440044008400842104210422042403E +2EB5:0000000000003FFC224422442244224422442244224422442244200400000000 +2EB6:101008203FF801001FF001000200FFFE040008001000E0000000000000000000 +2EB7:082004407FFC01001FF00100FFFE000000000000000000000000000000000000 +2EB8:0440044004407C7C044004400000FFFE010001003FF801000100010001000100 +2EB9:020002083FC802100220FFFE0080010002000C003000C0000000000000000000 +2EBA:010001003FF80108FFFE01083FF8010801000100010001000100010001000100 +2EBB:010001001FF80108FFFE01081FF80100FFFE0000000000000000000000000000 +2EBC:07F8040805080488044804680408041804280448058808880808100820284010 +2EBD:02000C00707C400440044004400440047CFC400440044004400440047CFC4004 +2EBE:08200820FFFE0820082000000000000000000000000000000000000000000000 +2EBF:08200820FEFE0820082000000000000000000000000000000000000000000000 +2EC0:0000082008200820082008200820F83E08200820082008200820082008200000 +2EC1:010001F801003FFC210421602F88210820F8200023E02220222044244824901C +2EC2:200010000000FC00080010001000340058009400140010001000100010001000 +2EC3:7FFC044004403FF8244824483FF8000000000000000000000000000000000000 +2EC4:00000000FFFE0480048004807FFC4484448444844484489448F4500440047FFC +2EC5:1FF01010101011101110111011101110129012900480048008823082C07E0000 +2EC6:080008001FE020204040BFF8210821083FF8210821083FF82108410841288010 +2EC7:0400040007F0082010403FF85108118812481528198812481428180810281010 +2EC8:20001000100000000000F0001000100010001000100014001800100000000000 +2EC9:1FF0101010101010111011101110111011101210028004400820101020080000 +2ECA:00007F004100410041007F004900080008004F004800480048004F00F0004000 +2ECB:0200020002007FFC04000900110021003FF801000100FFFE0100010001000100 +2ECC:20001000100000000000F000100010001000100010001000280047FE00000000 +2ECD:2000100008004000200010000000F000100010001000100010002800440083FE +2ECE:00002000100000000000F800080010002000780008000800100010002800C7FE +2ECF:0000003C00240028002800300028002400240024003400280020002000200020 +2ED0:100010001E00200020007C0090001000FE001000100012001400180010000000 +2ED1:0FF808000FF008000FF00800FFFE1200111010A0104012201418180610000000 +2ED2:0FF8080008000FF0080008000FF008000800FFFE0400082010103FF810080000 +2ED3:0800081008200840088009000800FFFE0A0009000880084009200A180C060800 +2ED4:200013FC10044004400440044004400440044004400440044004400440144008 +2ED5:020004001FF0101010101FF010001FF8100810081FF810001FF8100810081FF8 +2ED6:F800880090009000A000900090008800880088008800F0008000800080008000 +2ED7:7FFC0100FFFE91128D6201001D70610C00000000000000000000000000000000 +2ED8:020002007FF802003FF00200FFFC00001FE010201FE010201FE01020102010C0 +2ED9:010001000104FFFE010001103FF8010001047FFE010401040104012801100100 +2EDA:7FFC020004001FF0101011101110111011101110129002400420181060080000 +2EDB:3FF02010201028502450229022902110211022902292244A484A400680020000 +2EDC:FFC000400044004800500060005000480044002000200012000A000600020000 +2EDD:0100028004400A203118DFF610101FF010101FF0100811901060121014081804 +2EDE:080008001400120029007E00A2003E0022003E0020003E00200020003E002000 +2EDF:080008001400120029007E00A2003E0022003E002000280024002A0032002000 +2EE0:2000200020003E00440048008000100010001000100012001400180010000000 +2EE1:088808881110222011100888FFFE02001FF010101FF010101FF010101FF01010 +2EE2:7FE0002000201020102010201FFC000400040004FFE400040004002800100000 +2EE3:1FF010101F90109010907FFE40029FF410101FF010101FF01010101010501020 +2EE4:020004003FF8210821083FF8220822083FF8051009200948117C2102410280FE +2EE5:040004000FE0102020407FF8A10821083FF8210821083FF800000000FFFE0000 +2EE6:010002001FF01010121011101150102010001FFC000400047FE4000400280010 +2EE7:0100010001FE010001003FF8200828282448228821082288244828283FF82008 +2EE8:010001007FFC010001003FF801000100FFFE08001FF02820444003801C70E00E +2EE9:04403FF804400440FFFE01001FF0111011101FF0111011101FF0044008201010 +2EEA:1FF0101010101FF001003FF8210821083FF8210821083FF8210A0102010200FE +2EEB:020001007FFC0820044003801C70F01E10101FF0101010101FF0101020104010 +2EEC:020001007FFC0820044003800C603018C8260820082008200820102010202020 +2EED:0100010011F811001100FFFE00002928254823883FF823882548292821083FF8 +2EEE:0100010011F8110011001100FFFE00002108210822882448282820083FF80008 +2EEF:020001007FFC10100820FFFE01001FF011101FF0111011101FF01112010200FE +2EF0:0420041004100400FFFE048004880488049008A008C0108211822282447E8000 +2EF1:04003FF820083EF802807A800AFCFE940AD47AA402A47AD40A94FEFC0A8279FE +2EF2:04000FC010803FF0D1101FF011101FF001003FF821083FF821083FF8010200FE +2EF3:040004000FE0102020407FF8A10821083FF8210821083FF821080102010200FE +2EF4:00007FFE61867DBE618E6FBE61867FFE7FFE61B66FB663866FF66FF67FFE0000 +2EF5:00007FFE61867DBE618E6FBE61867FFE7FFE61866FBE63866FF66F867FFE0000 +2EF6:00007FFE61867DBE618E6FBE61867FFE7FFE61CE6FBE638E6FB66FCE7FFE0000 +2EF7:00007FFE61867DBE618E6FBE61867FFE7FFE61866FF663EE6FDE6FDE7FFE0000 +2EF8:00007FFE61867DBE618E6FBE61867FFE7FFE61CE6FB663CE6FB66FCE7FFE0000 +2EF9:00007FFE61867DBE618E6FBE61867FFE7FFE61CE6FB663C66FF66FCE7FFE0000 +2EFA:00007FFE61867DBE618E6FBE61867FFE7FFE61866FB663866FB66FB67FFE0000 +2EFB:00007FFE61867DBE618E6FBE61867FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +2EFC:00007FFE61867DBE618E6FBE61867FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +2EFD:00007FFE61867DBE618E6FBE61867FFE7FFE618E6FB663B66FB66F8E7FFE0000 +2EFE:00007FFE61867DBE618E6FBE61867FFE7FFE61866FBE638E6FBE6F867FFE0000 +2EFF:00007FFE61867DBE618E6FBE61867FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +2F00:000000000000000000047FFE0000000000000000000000000000000000000000 +2F01:0100018001000100010001000100010001000100010001000100010001000000 +2F02:0000000004000200010000800040004000000000000000000000000000000000 +2F03:0200020002000200020002000200020002000200040004000800100020000000 +2F04:00403FE000400080010002000400080010002004200420061FFC000000000000 +2F05:00400040004000400040004000400040004000400040004003C0004000000000 +2F06:00101FF80000000000000000000000000000000000047FFE0000000000000000 +2F07:000000000100008000847FFE0000000000000000000000000000000000000000 +2F08:0100010001000100010001000100010001000280044008201010200E40040000 +2F09:08400C60084008400840084008400840084008401040104420444046803C0000 +2F0A:1E000100010001000100028002800440044008201010200C4006800200000000 +2F0B:00C0004000400640044004400420082008200810101010082004400680020000 +2F0C:20043FFE20042004200420042004200420042004200420042024201C20080000 +2F0D:00000000000020023FFE20044008000000000000000000000000000000000000 +2F0E:0400030001000000004000800080010001000600020002000200020000000000 +2F0F:00200FF0082008200820082008200820082008200820082210222022401E0000 +2F10:2004300620042004200420042004200420042004200420043FFC200400000000 +2F11:00043FFE01040104010401040104010402040204040404040844103860100000 +2F12:01000100010001083FFC01080108010801080208020804080888107060200000 +2F13:1000100010041FFE100420044004000400040004000400040044003800100000 +2F14:08000C00080008100820084009800A000C003800C80008040804080607FC0000 +2F15:20083FFC20002000200020002000200020002000200020083FFC200000000000 +2F16:7FFC200020002000200020002000200020002000200020083FFC000000000000 +2F17:0100010001000100010001047FFE010001000100010001000100010001000000 +2F18:0200020002000200020003800240023002180208020002000200020002000000 +2F19:042007F0042004200420042004200420042004E0044004000400040004000000 +2F1A:20043FFE20002000200020002000200020002000200020004000400080000000 +2F1B:018001000100020002000400040008200810100811FCFE044004000000000000 +2F1C:00103FF80810081004200420024002400180018002400420181E600400000000 +2F1D:10081FFC1008100810081008100810081008100810081FF81008000000000000 +2F1E:20043FFE20042004200420042004200420042004200420043FFC200400000000 +2F1F:0100018001000100010001083FFC01000100010001000100010001047FFE0000 +2F20:0100018001000100010001047FFE01000100010001000100010001083FFC0000 +2F21:0400041007F80C101220214001800E70700E0000000000000000000000000000 +2F22:0200020012100BF8041004100A200A20114021404080014006201818E0060000 +2F23:02000200020803FC040804080C10121021204120004000800100060038000000 +2F24:010001800100010001047FFE0100010001000280044008201010200E40040000 +2F25:020003000200020002047FFE042004200820082010400E8001800670780E0000 +2F26:00083FFC0010002000C0008000847FFE00800080008000800480038001000000 +2F27:00000100008020843FFE20044008000000000000000000000000000000000000 +2F28:00200020002000247FFE0020002008200420042004200020012000E000400000 +2F29:008000800080008000800C900888108410862082408200800480038001000000 +2F2A:0200020002000208FFFC020002000280028004800484088410842086C07C0000 +2F2B:10081FFC1008100810081FF81008100010001000100020002000400080000000 +2F2C:010001000100210421042104210421043FFC21040100010002000C0070000000 +2F2D:01000100010001004104410441044104410441044104410441047FFC40040000 +2F2E:0444044408880888111011102220444022201110088808880444044404440000 +2F2F:00083FFC01000100010001000100010001000100010001047FFE000000000000 +2F30:00107FF800100010001000103FF020102000200020002004200420061FFC0000 +2F31:00800080008010841FFE10841084108410841084108410BC1088008000800000 +2F32:00083FFC010001000100010001047FFE01000100010001000100010001000000 +2F33:0300020004000430082010407F80210002000420081013E87C0C200400000000 +2F34:0100008000841FFE100010001000100010001000100020002000400080000000 +2F35:08007C0008000800100024003E00040084004400280010002800C40683FC0000 +2F36:0410041004100410041004107FFE041004100410041008100810101020100000 +2F37:0120011801080100011E01E07F003080008000800040004200220012000E0000 +2F38:00103FF80010001000101FF0100010083FFC000800080008010800F000200000 +2F39:00083FFC000800080008000800081FF8000800080008000800083FF800080000 +2F3A:00C0008001000200040000C00080010002000460004000800100020004000000 +2F3B:00C000800100020004C008800100030005000900110001000100010001000000 +2F3C:0100008000C00040040004002408240424062402440084100410041803F00000 +2F3D:0200024002200200021C02E07F000218021002200140018202440C24701E0000 +2F3E:001010381FC010081FFC1008100810081FF81008100020002000400080000000 +2F3F:001000787F80010001103FF8010001047FFE0100010001000900070002000000 +2F40:0080008000847FFE008000901FF80410041002200140008001400630380E0000 +2F41:01000100010401FE010001103FF80810042004200240018001800E70700E0000 +2F42:0100008000847FFE082008200820044004400240028001800660181860060000 +2F43:002008200420022002200820042002200224003E03E07C202020002000200000 +2F44:002010701F801000100010041FFE104010401040104020402040404080400000 +2F45:0100008000847FFE02000200020803FC02080208020804080888107060200000 +2F46:00081FFC01000100010001047FFE0240024002400240044208421042603E0000 +2F47:10101FF8101010101010101010101FF0101010101010101010101FF010100000 +2F48:20083FFC20082008200820083FF820082008200820083FF82008000000000000 +2F49:08100FF80810081008100FF00810081008100FF0081008101090207040200000 +2F4A:00800080008000847FFE0080028002A004A00490089008881086608400800000 +2F4B:0800080008040FFE100821104100010001000100018002400420181860060000 +2F4C:00800080008000800080088808FC08800880088008800880088008847FFE0000 +2F4D:00047FFE02000200021003F804100C1012202120414000800100060078000000 +2F4E:042007F00420042004200820101C20001FF808100420024001800E70700C0000 +2F4F:00081FFC10881088108810887FFE11081108210822087FFE041009F030200000 +2F50:0040104010401040104C12481F501060104010401040104413443C46103C0000 +2F51:001000383FC001000100011C3FE00100010E01F07F0001020102010200FE0000 +2F52:001010381FC01080108010881FFC1080108010801080124214227812200E0000 +2F53:080008080FFC10002FF04000BFF000100010001000100012000A000600020000 +2F54:010001000100011801107D2005400580094009201110210C4906870202000000 +2F55:0080008000800080088C0888089010A020C00080018002400420181860060000 +2F56:001010381FE01120112011201120112011101110111021082108410681020000 +2F57:044004200810100C2004402004200440024002800180018002400C30300E0000 +2F58:00181810062001C002300C0C30240420044002400280018002C00C30300E0000 +2F59:0010041004100410041007F0001000103FF00410041004100410081030100000 +2F5A:104010401040104010441FFE100010201FF01020102010201020202040200000 +2F5B:00047FFE00400840084010443FFE01400240044008401040224041C000800000 +2F5C:00800080108010881FFC10802080408000847FFE008000800080008000800000 +2F5D:010001A00110011001047FFE0100010001000280044008201010200E40040000 +2F5E:0100008000847FFE01000100023005E01E4008800100021005F81E0C08040000 +2F5F:00083FFC01000100010001101FF80100012001100110010001047FFE00000000 +2F60:0008103C1FE0112011201120112011201110111011501148214843A681220000 +2F61:00047FFE04000400042007F008200A20092009201020102213227C22201E0000 +2F62:0810081008147FFE08100810081008100FF008100810081008100FF008100000 +2F63:00801080108010881FFC10802080408000901FF800800080008000847FFE0000 +2F64:10041FFE1084108410841FFC1084108410841FFC1084208420A4409C80880000 +2F65:20043FFE20842084208420843FFC208420842084208420843FFC200400000000 +2F66:00047FFE0084008800801080108810FC10801080188014802280C18080FE0000 +2F67:008008440FFE4800280028000800180068004800080010001000200040000000 +2F68:00087F1002A22244142808101008200440020000000000000000000000000000 +2F69:0100010012081FFC10081008100810081FF810081008100810081FF810080000 +2F6A:0080008010841FFE1084108810801FF812101210112020C020C043309C0E0000 +2F6B:10081FFC12481248124812481248124812481248124812487FFE000000000000 +2F6C:10101FF81010101010101FF01010101010101FF01010101010101FF010100000 +2F6D:00101FF800200340008000847FFE018802900480088010802480438001000000 +2F6E:0800080008080FFC10802080008000847FFE0080014002200410180E60040000 +2F6F:00047FFE01000100020004080FFC1408240844080408040807F8040800000000 +2F70:00101FF800000000000000047FFE00800CA00890108820844484038001000000 +2F71:0100010021043FFE210422042244222424F43F14281420042004203C20080000 +2F72:0008003C1FC00080008000847FFE008001C002A0049008881086608200800000 +2F73:0100008020823FFE200440080440044004400420082008101008200C40060000 +2F74:02000100008000883FFC000008100810042004200240024000847FFE00000000 +2F75:10001060104012441F7E289049108A1008100810081008100890087008200000 +2F76:0080108C08880C9004A000C47FFE028002C004A0089010882086408200800000 +2F77:01800100023004201FC00880012002103FFC108400800C900888108620820000 +2F78:0800080008080FFC1080208000847FFE008010841084108410841FFC10040000 +2F79:20043FFE2004211421142A942464222425242954309421042024201C20080000 +2F7A:0830042002447FFE0100010001101FF8010001047FFE01000100010001000000 +2F7B:02047FFE02042244122412240204060C1A3462C40204020412240E1C04080000 +2F7C:01000100010C3FE8011001247FFE0080010006300CC017046404040603FC0000 +2F7D:00047FFE0080008021043FFE2244224422442244224422442244225C20080000 +2F7E:01000104FFFE010001103FF801000104FFFE054005200910110C2106C1020000 +2F7F:00047FFE082008200FE00820082008200FE00824083E0FE07820002000200000 +2F80:010001081FFC01087FFE01081FF8010801003FF801047FFE0100010001000000 +2F81:0100010021043FFE210421842244243429142104218422442424281C20080000 +2F82:20083FFC2100210021083FFC2008200820083FF82108210021043FFE20000000 +2F83:0180010002081FFC100810081FF81008100810081FF8100810081FF810080000 +2F84:00047FFE01000200042008107FF82104010001083FFC0100010001047FFE0000 +2F85:02002704387E20042004200420043E7C200420042004200420043FFC20040000 +2F86:001000783F80008000847FFE0080008008880FFC0808080808080FF808080000 +2F87:10101010101012141F7E1210225052500A900AFE041008101010201040100000 +2F88:010001000A100FF809100890089008147FFE091008900890081010F020200000 +2F89:10101FF8101010101FF0101010101FF01200110C113010C01660781820060000 +2F8A:0400042007F0084010883FFC5108110811081FF810081002100210020FFE0000 +2F8B:0810081008102A542A542A542A542A542A543E7C2A5408101010201040100000 +2F8C:010001FC010001003FFE200221042110213821C02F0021022102410280FE0000 +2F8D:00800080008010881FFC1088108810881FF810880080008800847FFE30020000 +2F8E:00C00080010012081FFC124812481248124812481248124812487FFE00000000 +2F8F:180811FC200040000C040BFE1010301050109010101010101090107010200000 +2F90:0100008000847FFE0180028C04880C50146024404420049005080E0604020000 +2F91:00047FFE0220022022243FFE222422242224222423E422242004200420040000 +2F92:00201FF0102010201FE0102010201FE0102010201FE014A408843086C07C0000 +2F93:042007F0042008441FFE288448840FFC088408840FFC10841084209C40880000 +2F94:02000104FFFE000000001FF000001FF0000010101FF8101010101FF010100000 +2F95:044004200810100C218402400420181860060FF00810081008100FF008100000 +2F96:00083FFC000008100FF80810081008100FF0081004600440024002847FFE0000 +2F97:00047FFE01000200040C1A08631004A019C062A00490188E6084048003000000 +2F98:006000C00188065C1A2001C003200C60109003301C50009003101D2000C00000 +2F99:08080FFC080808080FF8080808080FF8080808080FF8080803600C1830060000 +2F9A:0080008000881FFC008000847FFE02401248124422442442444209C030800000 +2F9B:0100010001101FF8010001047FFE01000900090809FC09001500230040FE0000 +2F9C:08100FF80810081008100FF008900080088808FC088014801280218640FC0000 +2F9D:008009100FF808100FF0081008160FF408187FF000500190061018F060200000 +2F9E:010001047FFE010011081FFC11081FF811081FF8110801047FFE010001000000 +2F9F:010000883FFC08200420024002447FFE010001083FFC01000100010001000000 +2FA0:10041FFE1000101017F8100010041FFE124012481250222022904F0884060000 +2FA1:006001801E3800C01F1800601F8000801080108818FC148022804180807E0000 +2FA2:1FF0101010101FF0101000003FF8210821083FF820082004200420061FFC0000 +2FA3:00047FFE024012441FFE124412441244143C180410041FFC10041FFC10040000 +2FA4:003000F83F0001101110092009447FFE0380054009201110210E410401000000 +2FA5:10081FFC110811081FF8110811081FF81108010001083FFC010001047FFE0000 +2FA6:0080018002400420081010086FF6010001083FFC01001118091009247FFE0000 +2FA7:08100FF808000FF008000FF0080008047FFE08880850082009900E0E38040000 +2FA8:7EFC428442847EFC428442847EFC400440044004400440044024401C40080000 +2FA9:010012101FF810101FF010001FF810081FF8108800847FFE0080008000800000 +2FAA:010001103FF801107FFE01103FF0011031880990076009207118270602000000 +2FAB:0480044004440FFE0840184028484FFC084008480FFC084008440FFE08000000 +2FAC:00047FFE010021043FFE21042944252425242104294425242524211C21080000 +2FAD:0104FFFE01003FF80104FFFE00003FF82108210821083FF82008207820100000 +2FAE:0240024002447E7E0240024002483E7C0240024002447E7E0240024002400000 +2FAF:00047FFE008021043FFE2244224423C42244224423C4224422443FFC20040000 +2FB0:08200824FFFE08200FE001003FF821083FF821080100FFFE0100010001000000 +2FB1:020002201FF004247FFE00000FF008100FF000803FFC10803FFC008000800000 +2FB2:02400240024002447E7E024002403E7C024002447E7E0240024002447FFE0000 +2FB3:030001087FFC102008200440FFFE000010101FF810101FF010101FF010100000 +2FB4:00047FFE008011081FFC10081FF810081FF810081FF8100803600C1830060000 +2FB5:20083FFC204821E82F0821082FE8292829282FE82928214A21EA4F2684020000 +2FB6:3FE0002400280D30392C092209127FEE092409280930112C1112210A41060000 +2FB7:008001800240052018986FF608100FF008100FF0080809900A603C1810060000 +2FB8:083004207FFE008011101FF8101010101FF010101FF0101010101FF010100000 +2FB9:002000703F8001047FFE054009203118C8160FF808100FF008100FF008100000 +2FBA:10081FFC110011101FF811001FF8110011041FFE002409142494248440380000 +2FBB:08100FF8081009F029123FFE20044FF408100FF008100FF00810087008200000 +2FBC:010000847FFE00000FF008100FF020043FFE200427E4242427E4243C20080000 +2FBD:22003F0C200820103F2620443F8820107F26104410082210FF20414001800000 +2FBE:8002BEFA8822BEFA8822BEFA8002800280028002800280028012800E80040000 +2FBF:02102924244432A42994224424A43FFC2004103010C01700180410040FFC0000 +2FC0:00047FFE00000FF008100FF000003FFC2004244422842FF42104211C21080000 +2FC1:010012081FFC110811081FF8110811081FF81088019002A804FE1882607E0000 +2FC2:042007F0042008401FF8288848880FF8088808880FF808082444222242220000 +2FC3:01000A100FF808100FF008100FF008080FFC08000FFC29242494449400180000 +2FC4:0100010401FE01003FFC22142924244432A429942244252428943FFC20040000 +2FC5:010020843FFE222022243FFE22243FFC280428202FA4283829A25E22883E0000 +2FC6:008000847FFE08880888149423E20490190863F604200B4030C001201E100000 +2FC7:010040847FFE441044107F7E4410555455545554555455546494A49684100000 +2FC8:04247FFE042007E000047FFE01001FF811081FF811081FF810080C30700E0000 +2FC9:00701F8001087FFE010007E0191862860D60711E0D6403800560191863060000 +2FCA:10081FFC1108192815481FF8110801003FF8010001007FFE2444222242220000 +2FCB:124812480A500A507FFE108820845FFE1084118412C414A41894109C10880000 +2FCC:3FFC224422443E7C224402403E7C22443E7C22443E7C22440242024201FE0000 +2FCD:07E0042027E4242427E4242427E424243E7C02407E7E12481248224842480000 +2FCE:08200820FF2408FE7E2000247FFE424442447E48422824101E30704E21840000 +2FCF:060838FC20083EF820083FF820080940252821082948252A210A294673820000 +2FD0:01000FF008100FF008100FF008101FF811081FF811087FFE0420042038200000 +2FD1:020001047FFE02483EB0152815282534592208100FF008100FF0101060100000 +2FD2:0080089008F80880FFFE044044444AA451147FFC44444AA451147FFC40040000 +2FD3:104008447F7E2240147C7F04007C3E40227C3E40227C3E40227E2E42243E0000 +2FD4:08400FE0084010807FFC11447F7C05447F6C05547D6C05447F7E05027CFC0000 +2FD5:01800660181863C600007BDE4A527BDE00003FFC22443FFC2244225C22480000 +2FD6:00007FFE61867DBE618E6FBE61BE7FFE7FFE63CE6DBE6D8E6DB663CE7FFE0000 +2FD7:00007FFE61867DBE618E6FBE61BE7FFE7FFE63866DF66DEE6DDE63DE7FFE0000 +2FD8:00007FFE61867DBE618E6FBE61BE7FFE7FFE63CE6DB66DCE6DB663CE7FFE0000 +2FD9:00007FFE61867DBE618E6FBE61BE7FFE7FFE63CE6DB66DC66DF663CE7FFE0000 +2FDA:00007FFE61867DBE618E6FBE61BE7FFE7FFE63866DB66D866DB663B67FFE0000 +2FDB:00007FFE61867DBE618E6FBE61BE7FFE7FFE638E6DB66D8E6DB6638E7FFE0000 +2FDC:00007FFE61867DBE618E6FBE61BE7FFE7FFE63C66DBE6DBE6DBE63C67FFE0000 +2FDD:00007FFE61867DBE618E6FBE61BE7FFE7FFE638E6DB66DB66DB6638E7FFE0000 +2FDE:00007FFE61867DBE618E6FBE61BE7FFE7FFE63866DBE6D8E6DBE63867FFE0000 +2FDF:00007FFE61867DBE618E6FBE61BE7FFE7FFE63866DBE6D8E6DBE63BE7FFE0000 +2FE0:00007FFE61867DBE618E6FBE61BE7FFE7FFE61CE6FB663B66FB661CE7FFE0000 +2FE1:00007FFE61867DBE618E6FBE61BE7FFE7FFE61EE6FCE63EE6FEE61C67FFE0000 +2FE2:00007FFE61867DBE618E6FBE61BE7FFE7FFE61866FF663866FBE61867FFE0000 +2FE3:00007FFE61867DBE618E6FBE61BE7FFE7FFE618E6FF663C66FF6618E7FFE0000 +2FE4:00007FFE61867DBE618E6FBE61BE7FFE7FFE61B66FB663866FF661F67FFE0000 +2FE5:00007FFE61867DBE618E6FBE61BE7FFE7FFE61866FBE63866FF661867FFE0000 +2FE6:00007FFE61867DBE618E6FBE61BE7FFE7FFE61CE6FBE638E6FB661CE7FFE0000 +2FE7:00007FFE61867DBE618E6FBE61BE7FFE7FFE61866FF663EE6FDE61DE7FFE0000 +2FE8:00007FFE61867DBE618E6FBE61BE7FFE7FFE61CE6FB663CE6FB661CE7FFE0000 +2FE9:00007FFE61867DBE618E6FBE61BE7FFE7FFE61CE6FB663C66FF661CE7FFE0000 +2FEA:00007FFE61867DBE618E6FBE61BE7FFE7FFE61866FB663866FB661B67FFE0000 +2FEB:00007FFE61867DBE618E6FBE61BE7FFE7FFE618E6FB6638E6FB6618E7FFE0000 +2FEC:00007FFE61867DBE618E6FBE61BE7FFE7FFE61C66FBE63BE6FBE61C67FFE0000 +2FED:00007FFE61867DBE618E6FBE61BE7FFE7FFE618E6FB663B66FB6618E7FFE0000 +2FEE:00007FFE61867DBE618E6FBE61BE7FFE7FFE61866FBE638E6FBE61867FFE0000 +2FEF:00007FFE61867DBE618E6FBE61BE7FFE7FFE61866FBE638E6FBE61BE7FFE0000 +2FF0:EDB600008102810200008102810200008102810200008102810201008002B6DA +2FF1:EDB6000080028002800200008002800236D8800280020000800280020000EDB6 +2FF2:EDB600008442844280020440844280020440844280020440844284420000EDB6 +2FF3:EDB600008002800280020000B6DA800200008002B6DA0000800280020000EDB6 +2FF4:AAAA00008002155080021010800210108002101090120000955280020000AAAA +2FF5:DBB60000800280020D608822800208208002882288220000882288220000DBB6 +2FF6:DBB600008822882200008822882200008822800288220D60800280020000DBB6 +2FF7:DB6D000180008001056D84008001040180008401056D8000800100018000B6DB +2FF8:DB6D0001800080010B6D8800800108018800800108018800800108018800B6DB +2FF9:DB6D00018000800136D18010800100118010800100118010800100118010B6DB +2FFA:DB6D08018800800108018800800108018800800108018B6C800100018000B6DB +2FFB:0000DB60802000009B6C902400009024902400009024DB64000010041B6C0000 +2FFC:00007FFE61867DBE618E6FBE61BE7FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +2FFD:00007FFE61867DBE618E6FBE61BE7FFE7FFE618E6FB663B66FB66F8E7FFE0000 +2FFE:00007FFE61867DBE618E6FBE61BE7FFE7FFE61866FBE638E6FBE6F867FFE0000 +2FFF:00007FFE61867DBE618E6FBE61BE7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +3000:0000000000000000000000000000000000000000000000000000000000000000 +3001:000000000000000000000000000010000C000600020000000000000000000000 +3002:000000000000000000000000000000000C00120012000C000000000000000000 +3003:0000000000000240024002400480048009000900000000000000000000000000 +3004:0000060018202030412841A881448D0493044908440824101860018000000000 +3005:00000000020001000100023003C8041008201240218000800040000000000000 +3006:0000000000100008001006200940088009401220141018003000200000000000 +3007:0000078018602010400840088004800480048004400840082010186007800000 +3008:0008000800100010002000200040008000400020002000100010000800080000 +3009:1000100008000800040004000200010002000400040008000800100010000000 +300A:0048004800900090012001200240048002400120012000900090004800480000 +300B:1200120009000900048004800240012002400480048009000900120012000000 +300C:00F8008000800080008000800080008000800080008000000000000000000000 +300D:000000000000000001000100010001000100010001000100010001001F000000 +300E:01F801080178014001400140014001400140014001C000000000000000000000 +300F:0000000000000000038002800280028002800280028002801E8010801F800000 +3010:00F800F000E000E000E000C000C000C000C000C000C000E000E000F000F80000 +3011:1F000F00070007000300030003000300030003000300070007000F001F000000 +3012:00007FFE000000007FFE01000100010001000100010001000100010000000000 +3013:3FFE3FFE3FFE3FFE3FFE0000000000003FFE3FFE3FFE3FFE3FFE000000000000 +3014:0008001000200040004000400040004000400040004000400020001000080000 +3015:1000080004000200020002000200020002000200020002000400080010000000 +3016:03F8021002200240024002800280028002800280024002400220021003F80000 +3017:1FC008400440024002400140014001400140014002400240044008401FC00000 +3018:0008003000500050005000500050005000500050005000500050003000080000 +3019:10000C000A000A000A000A000A000A000A000A000A000A000A000C0010000000 +301A:00F800A000A000A000A000A000A000A000A000A000A000A000A000A000F80000 +301B:1F0005000500050005000500050005000500050005000500050005001F000000 +301C:0000000000000000000000003E004182007C0000000000000000000000000000 +301D:0090004800240000000000000000000000000000000000000000000000000000 +301E:0900120024000000000000000000000000000000000000000000000000000000 +301F:0000000000000000000000000000000000000000000000000900120024000000 +3020:00003FFC3FFC00003FFC3FFC5596D9B9A5A5A5A5599A4182242413C8081007E0 +3021:0180010001000100010001000100010001000100010001000100010000000000 +3022:006000400C400840084008400840084008400840084000400040004000000000 +3023:0008200821082108210821082108210821082108210820082008000800000000 +3024:001000101020082004400240018000C001200210040808083000000000000000 +3025:00000420043008201CC003000480084008201020102010201040084007800000 +3026:00000100008000847FFE00000000000000000000000000000000000000000000 +3027:000001000100010001003FFC0000000000003FFC000000000000000000000000 +3028:0100010001007FFE0000000000003FFC00000000000000007FFE000000000000 +3029:0800080008000FFC10102810042002200140008000C0012002100C1030000000 +302A:0000000000000000000000000000000000000000000000006000900090006000 +302B:0000600090009000600000000000000000000000000000000000000000000000 +302C:0000000600090009000600000000000000000000000000000000000000000000 +302D:0000000000000000000000000000000000000000000000000006000900090006 +302E:00000000000000000000000000000000C000C000000000000000000000000000 +302F:000000000000000000000000C000C0000000C000C00000000000000000000000 +3030:000000000000000000000000618692490C300000000000000000000000000000 +3031:0100018001000200020004000800100010000800040002000100010000800080 +3032:0100018001100208024804200820100010000800040002000100010000800080 +3033:0400060004000800080008001000100010002000200020004000400080008000 +3034:0400060004400820088008401040100010002000200020004000400080008000 +3035:8000800040002000200010001000080008000400040002000200010001000000 +3036:07C0183020085FF45FF480029FF29FF2810281028102410441042108183007C0 +3037:8282828282824444444428282828101010102828282844444444828282828282 +3038:010001000100010001000100FFFE010001000100010001000100010001000000 +3039:082008200820082008200820FFFE082008200820082008200820082008200000 +303A:10881088108810881088FFFE1088108810881088108820882088408880080000 +303B:0000000002000100008000400080010000800040002000000000000000000000 +303C:0000000000003FF82018202820482088210822082408280830083FF800000000 +303D:0000000010002860449003100010001000100010001000100008000800040000 +303E:DB6D80010E00918980710000801180211FF8808181011FF8840188000001DB6D +303F:00FE82C6C6AAAA92AAAAC6C682FE0000 +3040:00007FFE63CE7DB671B67DB663CE7FFE7FFE6DCE6DB661B67DB67DCE7FFE0000 +3041:00000000000000000400020013800E00048007E00D10161026102A2010C00000 +3042:00000400020002C01F000480048007E00D101508220826082A10106000000000 +3043:000000000000000000000000000010401020101010300A000C00040000000000 +3044:0000000000000000400020602010200822082418140818000800000000000000 +3045:0000000000000000000002000180000013800C40004000400040008003000000 +3046:0000020001C00000000003C01C20002000200020002000400040008001000000 +3047:0000000000000000000002000180000001C00E80010002000700090010F00000 +3048:0000040003800000000011C00E800100020004000E001100210020F800000000 +3049:00000000000000000000104008300C2038000BC00C201820282018C008000000 +304A:00000000080004300508060C1C000460059006080C0834880C70040000000000 +304B:0000000008000400046047103C88089808800880108011002500220000000000 +304C:0000000808240410044047203C90088808980880108011002500220000000000 +304D:00000200010001600F80008000F01F400020002007F008100800060001C00000 +304E:00000408022402D01F00010001E03E80004000400FE0102010000C0003800000 +304F:0000008000400040008001000600080008000400020001000080004000400000 +3050:0000008000400040008801240610080008000400020001000080004000400000 +3051:00000080204010201020103C23E0202020202020202018201040104000800000 +3052:0000010840A420502040207847C0404040404040404030402080208001000000 +3053:00000000080007E00080010000000000000000002000200010100FE000000000 +3054:00000008080407F00088010000000000000000002000200010100FE000000000 +3055:000004000200013021C01E800040004007E00820100010000C0003C000000000 +3056:000004080204013021C81E800040004007E00820100010000C0003C000000000 +3057:0000000010000800080008000800080008000800080808100460038000000000 +3058:0000000010200890084008000800080008000800080808100460038000000000 +3059:00000100008040F83F800080038004C0044003C0004000800080010002000000 +305A:00000128009440F83F800080038004C0044003C0004000800080010002000000 +305B:0000000000801040084008784BC03C400840084008C00840040003E000000000 +305C:0000000800841050084808784BC03C400840084008C00840040003E000000000 +305D:0000000009C0064000800100023807C038800100020002000200010000E00000 +305E:0000000009C8066400900100023807C038800100020002000200010000E00000 +305F:000000000800048007003C0008F008180820100010001100210020F800000000 +3060:000000080824049007003C0008F008180820100010001100210020F800000000 +3061:00000800040004C047003C00080008C00B201C1010100010002000C007000000 +3062:00000800040804C447103C08080008C00B201C1010100010002000C007000000 +3063:000000000000000000000000000001C00620381000100010002000C007000000 +3064:000000000000000003E04C103008000800080008001000600380000000000000 +3065:000000080024001003E04C103008000800080008001000600380000000000000 +3066:00000000003843C03C800100010002000200020002000200010000E000000000 +3067:00000000003843C03C880124011002000200020002000200010000E000000000 +3068:000000000400020002000200027003800600080010001000080007F000000000 +3069:000000000408022402100200027003800600080010001000080007F000000000 +306A:00000400020002803F0004700818082010401040204003C00460045003800000 +306B:000000002000100010F01318202020002000200022002A0011F8100010000000 +306C:0000000001000080008013E01510190812082A084C084C685490206800000000 +306D:000010000800080008004CE03F100C1008101810181028F0591808E000000000 +306E:00000000000003C00D2011101108220822082408241028101060018000000000 +306F:0000004020201020143813E0202020202020202029E01230122811C000000000 +3070:0000008840442050287827C0404040404040404053C024602450238000000000 +3071:0000009840642064287827C0404040404040404053C024602450238000000000 +3072:00000000004004403C2008200830102810201020104010400880070000000000 +3073:00000008004404503C2808200830102810201020104010400880070000000000 +3074:00000030004804483C3008200830102810201020104010400880070000000000 +3075:00000000040003800080010002000200010002B04C88389C2480030000000000 +3076:000000000400038800A4011002000200010002B04C88389C2480030000000000 +3077:000000000400039800A4012402180200010002B04C88389C2480030000000000 +3078:0000000000000000000006000900108020400030000C00000000000000000000 +3079:0000000000000010004806200900108020400030000C00000000000000000000 +307A:0000000000300048004806300900108020400030000C00000000000000000000 +307B:00000000223011C01040103823E020202020202029E01230122811C000000000 +307C:00000000446823842090207847C040404040404053C024602450238000000000 +307D:00000018446423A42098207047C040404040404053C024602450238000000000 +307E:00000100008010F00F80008010E00F80008000800F8010E010900F0000000000 +307F:000000000880078001000100022002100FF03418442448203040008000000000 +3080:00000800040027001C3004081C0C240024002C2018100810081007E000000000 +3081:0000000001000080108013C01CA0111029082A08460844084A10306000000000 +3082:00000200010011000E000380120024201C200710041004100410022001C00000 +3083:000000000000000000000100088009E00E103C10046002000200010001000000 +3084:00000100008001C0180010F00B084C0834080270020001000100008000800000 +3085:000000000000000000000200010021E0271029103110232021C0010002000000 +3086:000000000300408021E022902488288830883488229021E00080010002000000 +3087:000000000000000002000100012001C00100010001000F0011C011200E000000 +3088:0000020001000100013001C001000100010001001F80216021101E0000000000 +3089:00000200010001C0060008000800080009E00E1008100810002000C003000000 +308A:0000100009800A400C200C200820082008200820004000400080010002000000 +308B:0000000008C0074000800100020007C00C201010201003900460044003800000 +308C:000000001000080009C00A201C206C2008201820182028204824181808000000 +308D:0000000011800E800100020004000FC00820101020100010002000C007000000 +308E:0000000000000000000008000400040006E01D1006100C100C10142004400000 +308F:000010000800080008004CE03F100C080808180818082810482018C008000000 +3090:00000000098006800100010003E00E1012082408240828C8193010E000000000 +3091:0000000009800700020007C008201020062009C0070008001CE0231040380000 +3092:00000400020012C00F00040004200F3818C02180028004800800080007E00000 +3093:000002000100010002000200040004000F000880108010882090206000000000 +3094:0000020001C80004001003C81C20002000200020002000400040008001000000 +3095:00000000000000000000040004603F1004880898108011002500220000000000 +3096:0000000000000080004008200820083811E01020102014201440084000800000 +3097:00007FFE63CE7DB671B67DB663CE7FFE7FFE73866DF671EE7DDE73DE7FFE0000 +3098:00007FFE63CE7DB671B67DB663CE7FFE7FFE73CE6DB671CE7DB673CE7FFE0000 +3099:0000000400120008000000000000000000000000000000000000000000000000 +309A:0000000600090009000600000000000000000000000000000000000000000000 +309B:0000100048002000000000000000000000000000000000000000000000000000 +309C:0000300048004800300000000000000000000000000000000000000000000000 +309D:000000000000000000000C000300008000C00100000000000000000000000000 +309E:000000000000002000900C400300008000C00100000000000000000000000000 +309F:000000000600018008000800080008000FC0102000100010002000C003000000 +30A0:000000000000000000000000000007E000000000000007E00000000000000000 +30A1:000000000000000000000000000021E01E200240018001000100020004000000 +30A2:00000000000021F01E1000200240018001000100010002000200040008000000 +30A3:0000000000000000000000200040008003801C80008000800080008000800000 +30A4:00000000002000200040008003000D0030800080008000800080008000800000 +30A5:000000000000000000000200010001E01E200820084000400080010002000000 +30A6:0000000002000100010001F03E10101010200820084000400080010002000000 +30A7:000000000000000000000000000000E00F0001000100010001E01E1000000000 +30A8:000000000000000000701F800200010001000100010003F03C08000000000000 +30A9:000000000000000000000100008010E00F800180028004800880118000800000 +30AA:0000000000800040004020781FC000C00140024004400840104000C000400000 +30AB:0000000002000100010021F01F1002100210042004200820114020C000800000 +30AC:0000000802240114011021F01F1002100210042004200820114020C000800000 +30AD:0000000004000200027003801D000100017803803C8000800040004000400000 +30AE:0000000804240214027003801D000100017803803C8000800040004000400000 +30AF:0000000004000270039002200420044008401080008001000200040008000000 +30B0:00000008082404D4075004400840088010802100010002000400080010000000 +30B1:0000000008000400040004380FC0090010802080008001000100020004000000 +30B2:0000000808240414041004380FC0090010802080008001000100020004000000 +30B3:000000000000000021F01E100010001000100020002003E01C20000000000000 +30B4:000000080024001443D03C400040004000400080008007803880000000000000 +30B5:00000000008008400440044024F81F4004400440044000800080010002000000 +30B6:0000000800A408540450044024F81F4004400440044000800080010002000000 +30B7:0000000000000C000200000018000408001000200040008013000C0000000000 +30B8:0000000000080C240214001018000408001000200040008013000C0000000000 +30B9:00000000000010E00F200040004000800080014002200C103010000000000000 +30BA:00000008002421D41E5000800080010001000280044018206020000000000000 +30BB:000000000800040004000478058826101C20044004000400020001F000000000 +30BC:000000080824041404100478058826101C20044004000400020001F800000000 +30BD:0000000000201010081004100420042000400040008000800100020004000000 +30BE:0000000800A42054105008400840084000800080010001000200040008000000 +30BF:000000000200010001F002100220052008C010400080010002000C0030000000 +30C0:000000080424021403F0042004200A4011402080010002000400180060000000 +30C1:00000000004001801E00010000F823801C800080008001000100020004000000 +30C2:00000008006401941E10010000F823801C800080008001000100020004000000 +30C3:0000000000000000000000000000044012200A20084000400080010002000000 +30C4:0000000000000410220811080910081000200020004000800100020000000000 +30C5:0000000800241094085044402440104010800080010002000400080000000000 +30C6:00000000000011E00E000000007823801C800080010001000200040008000000 +30C7:00000008002411D40E10000020F01F0000800080010001000200040008000000 +30C8:0000000008000400040004000400070004C00420040004000400040004000000 +30C9:00000020109008500840080008000E0009800840080008000800080008000000 +30CA:0000000001000080008020F81F80008000800080010001000200040008000000 +30CB:000000000000000000E01F00000000000000000001F03E080000000000000000 +30CC:00000000000010F00F10002000200E4001C000C0012002100C10300000000000 +30CD:000000000200010001E01E2000400080010003400D3031080100010001000000 +30CE:0000000000400020002000200040004000800080010002000400080010000000 +30CF:0000000000000000000008800440042008100810100820084008000000000000 +30D0:0000000000080024001408900440042008100810100820084008000000000000 +30D1:0000001800240024001808800440042008100810100820084008000000000000 +30D2:00000000000010000800080008E00F000800080008000800040003F000000000 +30D3:000000000010104808280820080008E00F00080008000800040003F000000000 +30D4:000000000030104808480830080008E00F00080008000800040003F000000000 +30D5:00000000000010F00F1000100020002000400040008001000200040000000000 +30D6:00000008002423D41C5000400080008001000100020004000800100000000000 +30D7:00000018002423E41C5800400080008001000100020004000800100000000000 +30D8:0000000000000000000002000500488030400030000C00000000000000000000 +30D9:0000000000200090005002400500488030400030000C00000000000000000000 +30DA:0000000000600090009002600500488030400030000C00000000000000000000 +30DB:0000000002000100010021F01F00010001400920091011102100030001000000 +30DC:0000000802240114011021F01F00010001400920091011102100030001000000 +30DD:0000001802240124011821F01F00010001400920091011102100030001000000 +30DE:000000000000000020F01F080010002000400C80030000800040000000000000 +30DF:000000000400030000C00020080006000180004010000C00030000C000200000 +30E0:0000000002000100010001000200020002400420043029C81E08000000000000 +30E1:000000000040002000200020062001C0004000A00090010002000C0030000000 +30E2:00000000000010E00F000200020023F81E0002000200020001F0000000000000 +30E3:0000000000000000000000000400027003901E20014001000080008000800000 +30E4:00000000080004000478038826101A2001400100010000800080008000000000 +30E5:000000000000000000000000000001C00E400040008001E01E10000000000000 +30E6:0000000000000000000011C00E4000400080008001F03E080000000000000000 +30E7:00000000000000000000000001E00E20002001E00E40004001C00E2000000000 +30E8:00000000000001F01E100010001001E00E2000200020002001E00E1000000000 +30E9:00000000000011C00E00007023901C100010002000200040008003000C000000 +30EA:0000000000400820042004200420042004200420004000400080010002000000 +30EB:0000000000000100088004800480048804880490089008A010C0208000000000 +30EC:0000000010000800080008000800080008100820084008800B000C0000000000 +30ED:000000000000000021F01E10101010100820082009E00E100800000000000000 +30EE:000000000000000000000000000010F00F100820042004400040008001000000 +30EF:00000000000021F01E1010100810082008200040004000800100020004000000 +30F0:0000000001000080008001F01E800880048005F03E8800800080008000800000 +30F1:000000000000000001E01E20024001800100010001F03E080000000000000000 +30F2:00000000000001F01E100010002001E00E200040004000800100060018000000 +30F3:00000000000000001800040802080010001000200040008013000C0000000000 +30F4:0000000804240214021043E03C20202010401040008000800100020004000000 +30F5:0000000000000000000000000200010011E00E2002200220042008C010400000 +30F6:0000000000000000000000000800040004600780088010800100020004000000 +30F7:00040012000821F01E1010100810082008200040004000800100020004000000 +30F8:0000000801040090008801F01E800880048005F03E8800800080008000800000 +30F9:000000080004001001E81E20024001800100010001F03E080000000000000000 +30FA:00040002000801F41E100010002001E00E200040004000800100060018000000 +30FB:0000000000000000000000000300078007800300000000000000000000000000 +30FC:000000000000000000000000000040F83F000000000000000000000000000000 +30FD:000000000000000000000C000300008000400020000000000000000000000000 +30FE:000000000000002000900C400300008000400020000000000000000000000000 +30FF:0000000021E01E10001000100010001000100010001000100010001000100000 +3100:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE73CE6DB66DB66DB673CE7FFE0000 +3101:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE73EE6DCE6DEE6DEE73C67FFE0000 +3102:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE73866DF66D866DBE73867FFE0000 +3103:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE738E6DF66DC66DF6738E7FFE0000 +3104:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE73B66DB66D866DF673F67FFE0000 +3105:0000000002000200040008001FF0001000100020004000400280010000000000 +3106:0000000001000100020007F00010001002200140008001400620380000000000 +3107:000000003FF81008100810081008100810081008100810080008000000000000 +3108:000000001FF810001000100010001000100010000FFC00000000000000000000 +3109:000002000200040008001FF8010801080208040808101010012000C000000000 +310A:0000000000400040008000807FFE010001000220021007F00008000800000000 +310B:000000000FE000200040008001F8000800100010002002200140008000000000 +310C:0000008000800480048008800FF80088010802100210041008A0104000000000 +310D:0000020802080410041008201040208010400820041004100208020800000000 +310E:000000003FFE01000200040007F8000800080010001002200140008000000000 +310F:000000000FFE0400040004000400080008000800100010002000000000000000 +3110:000000000020082008200820082008E00F200020002000200020002000000000 +3111:00000000001000200040008003000C0002000180004000300008000400000000 +3112:000000003FFE0080008000800080008000800080008000800080000000000000 +3113:0000010001002108210821082108210821083FF80100010001007FFC00000000 +3114:000000100060008001080610002000C003400440184000400040004000400000 +3115:000000000FFC00040004040407FC040004000400040008001000000000000000 +3116:0000000000003FF8200820082208210821082088208820083FF8000800000000 +3117:000000001FFC0104010401040108010801280110010001000100000000000000 +3118:000001000100010001003FFE01000100010001F8000800100020002000400000 +3119:000000000100010001000200020004000820101020083FFC0004000000000000 +311A:0000000020101020084004800300020002000200020002000200000000000000 +311B:000000003FFE00400040004007C00800100010001008081007E0000000000000 +311C:00000080008000803FFC0080008007800800100010001008081007E000000000 +311D:0000000004100410041004107FFE0410042004200440040003F0000000000000 +311E:000000001FFC0080088011001FF8010802080210041008201020004000000000 +311F:000000000180068038800080008000400040002000100010000C000000000000 +3120:00000000008001000200041008201FC000800100061018183FE4000400000000 +3121:000000000FF8000800100420024001C000C00130020804041804200000000000 +3122:000000001FF0041004200820084010803FF80008001000200040008000000000 +3123:0000100010001000100010001FFC000400080008001000100020000000000000 +3124:0000000000800080008001001FF8028002800480048008801080207E00000000 +3125:0000000000400040008001000100020004000400080010007FFC000000000000 +3126:000000000040044004400440044004400840084008401040203E000000000000 +3127:00000000000000000000000000003FFC00000000000000000000000000000000 +3128:00000008000804100220012000C000C001200210040808041004000000000000 +3129:000000001008100810081008100810081008100810081FF80008000000000000 +312A:000000007FFE020002000200020003F00410041004100810081010A020400000 +312B:000000007FFC04400440044004400440084008400840104010402040403C0000 +312C:00000100008000001FFE10001000100010001000100010002000200040000000 +312D:000000007FFC0100010001003FF8210821082108210821082108010001000000 +312E:00000180018000003FFC0080008007800800100010001008081007E000000000 +312F:000000001FE0004000800100020007F801080108010801080150012000000000 +3130:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE63CE7DB671B67DB663CE7FFE0000 +3131:00000000000020081FFC08080008000800080008000800080008000000000000 +3132:00000000000041083FFC11080108010801080108010801080000000000000000 +3133:00000000000082607F1022100210023002280248024402820301000000000000 +3134:0000000000000000000030000800080008000800080807FC0000000000000000 +3135:00000000000000000204C1FE20A02020205023881D0402020000000000000000 +3136:00000000000000400038C40223FF21002078208423841C840078000000000000 +3137:000000000000000070101FF8100010001000100010080FFC0000000000000000 +3138:000000000000000062883FFC208020802080208023841C7E0000000000000000 +3139:00000000000020101FF80810001030101FF81000100010100FF8000000000000 +313A:00000000000082047FFE22840204FF044004400443043C040000000000000000 +313B:00000000000041443FFE114401447FC42044204423C41C7E0040000000000000 +313C:00000000000042083F04028402847EFC2084208423841CFC0000000000000000 +313D:00000000000084607E1024100410FE3040284048468439020000000000000000 +313E:00000000000042C43F7E024002447F7E2040204023441C3E0000000000000000 +313F:00000000000085087EFC04000400FE8440484048464A3BFF0000000000000000 +3140:00000000000084407E38050204FFFE0040384044464438380000000000000000 +3141:00000000000038100FF80810081008100810081008100FF80800000000000000 +3142:00000000002000101010081008100FF00810081008100FF00810000000000000 +3143:00000000000802842144114411441F7C1144114411441F7C1144000000000000 +3144:00000000000004604210221022103E102228222822443E442282000000000000 +3145:0000000002000180008000800080014001400220041008083004000000000000 +3146:00000000000008400420042004200A200A5011482084C3020000000000000000 +3147:0000000000000200010007C008201010101010101010082007C0000000000000 +3148:00000000000020101FF809000100010002800440082010106008000000000000 +3149:000000000000000081047FFE242004200A50095010882104C602000000000000 +314A:00000000040003E0000020081FFC088001400220041008083004000000000000 +314B:00000000000010080FFC0408000800F83F081008000800080008000000000000 +314C:00000000000038200FF0080008200FF008000800081007F80000000000000000 +314D:00000000000020101FF80800000008100420022042483FFC1000000000000000 +314E:000000000000040003C040083FFC100003C0042008100810042003C000000000 +314F:004000300010001000100012001F001000100010001000100010001000100000 +3150:0020011800C80048004800480078004800480048004800480048004800080000 +3151:00400030001000100012001F00100012001F0010001000100010001000100000 +3152:0020011800C80048004800780048004800780048004800480048004800080000 +3153:004000300010001000100010001003F001100010001000100010001000100000 +3154:0010008C006400240024002403E4012400240024002400240024002400040000 +3155:0040003000100010001003F00110001003F00110001000100010001000100000 +3156:0010008C00640024002403E40124002403E40124002400240024002400040000 +3157:000000000000000000000000010000800080008040823FFF1000000000000000 +3158:00400030001000100010001008100412041F05F07E1020100010001000100000 +3159:0010008C00640024002408240424043C042407E47C2420240024002400040000 +315A:00200018000800080008040802080208020803F87E0820080008000800080000 +315B:000000000000000000000000004004200220022042223FFF1000000000000000 +315C:00000000000000000000000040023FFF10800080008000800080008000800000 +315D:00200018000800080008000801E87E08280809F8088808080808080800080000 +315E:002000980048004800480048004803C87C4828480BC808480848084800080000 +315F:002000180008000800080008000801E87E082408040804080408040800080000 +3160:00000000000000000000000040023FFF12200220022002200220022002200000 +3161:00000000000000000000000000000000000040023FFF10000000000000000000 +3162:0020001800080008000800080008000801F87E08200800080008000800080000 +3163:0040003000100010001000100010001000100010001000100010001000100000 +3164:AAAA00018000000180000001913C11219F381121912000018000000180005555 +3165:000000000000C1802040204020402040204023441C3E00000000000000000000 +3166:000000000000C0C4207E204020402040204023421C3F00000000000000000000 +3167:000000000000C0202010201020102010202823481C8401020000000000000000 +3168:000000000000C0102010202820282044204423821CFF00000000000000000000 +3169:00000000000088507FE808480848FC54405440623C4100000000000000000000 +316A:00000000000042C83F7C024002407F402040204023441C3E0000000000000000 +316B:00000000000088907C480A480A48FFD442544E6233C100000000000000000000 +316C:0000000084207E2004200450FC504088408847043BFE00000000000000000000 +316D:00000000000084007E00050404FEFE4040384044464438380000000000000000 +316E:000000000000000862843F442244227C2244224422443F7C2044000000000000 +316F:00000000000062203F10221022102210222822283E4422820000000000000000 +3170:00000000000062103F102228222822442244224422823FFF2000000000000000 +3171:000030081FFC1008100810081FFC1100008007E0081010081008081007E00000 +3172:00000000000004000282827F42227E024202420242027E024202000000000000 +3173:00000000040002C8827C424042407E404240424042447E3E4200000000000000 +3174:000000000000114288BF48824882798249424A427A224C120000000000000000 +3175:0000000000001132889F48904890799049504A507A524C2F0000000000000000 +3176:0000000000000800860445FE44A07C20442044507C8847060000000000000000 +3177:00000000040002C4827E424042447E7E4240424042447E3E4200000000000000 +3178:0010200810081FF8100810081FF81108008007E0081010081008081007E00000 +3179:0010248812481E78124812481E781248008007E0081010081008081007E00000 +317A:000000000000090404FE044404040A040A0411042104C0840000000000000000 +317B:00000000000008000580044006400A400A401140214440BE0000000000000000 +317C:00000000000010C4087E08400840144014402240414480BE0000000000000000 +317D:000000000004100208820842087E144214422242217E40C20000000000000000 +317E:000000000000120209FF08900810142814282244414281810000000000000000 +317F:000000000100010002800280044004400820082010103FF80000000000000000 +3180:00000000181808083C3C4242424242424242424242423C3C0000000000000000 +3181:0000030001000FE0101020082008200820082008200810100FE0000000000000 +3182:00003000120479FE84A08420842084508450848885047A020000000000000000 +3183:000030001020782084508450848884888488850485047BFE0000000000000000 +3184:000020101FF80000042042483FFC1100008007E0081010081008081007E00000 +3185:0000000020401C3881027FFF20001C382244224422441C380000000000000000 +3186:0000000040083FFC1200010007C0082008200820082007C00000000000000000 +3187:004000300010001000100912091F091009F27E1F201000100010001000100000 +3188:0020011800C800480048047802482248127813C87C4820480048004800080000 +3189:0020001800080008000802081108090809080BE87C0820080008000800080000 +318A:00200018000800080008000801E87F0829780908097809080908090800080000 +318B:0020011800C80048004800480348FC4855C8144815C814481448004800080000 +318C:002000180008000800080008000801E87F082908090809080908090800080000 +318D:0000000000000000000000000100038001000000000000000000000000000000 +318E:0020001800080008000800080008000802080708020800080008000800080000 +318F:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE73866DBE738E6DBE73BE7FFE0000 +3190:0000000000800080008000800080008000800000000000000000000000000000 +3191:0000000002000200020002200240028003000000000000000000000000000000 +3192:000000000000000000003FC00000000000000000000000000000000000000000 +3193:0000000000001F800000000000003FC000000000000000000000000000000000 +3194:000000001FE000000FC0000000003FF000000000000000000000000000000000 +3195:000000003FE02520252028E020203FE000000000000000000000000000000000 +3196:000000000400040007800400040004003FC00000000000000000000000000000 +3197:0000040004003FC0244024403FC0040004000400000000000000000000000000 +3198:000000003FC00400060005000400040004000000000000000000000000000000 +3199:000000003FC022403FC022403FC0224002000200000000000000000000000000 +319A:000000003F80030004000800104020401FC00000000000000000000000000000 +319B:000000003FE002003FE02220232024A028600000000000000000000000000000 +319C:000000003FE0020002000200020002000A000400000000000000000000000000 +319D:000000001FC0020002003FE00200050008E01040000000000000000000000000 +319E:0000084009503DF00B50095009280D0830F80000000000000000000000000000 +319F:000004000400040004000A000900108020400000000000000000000000000000 +31A0:00000800080010003FF800080008000800080008000800F00110012000C00000 +31A1:000000001FF8020802080208020802100290026002001E00220022001C000000 +31A2:0000002004200420042004200420086009A00E20002001E00220022001C00000 +31A3:0000000004400440088008801100110022001100110008B808C4044404380000 +31A4:000000000800080008007FFC080408080810080008000800080007F800000000 +31A5:000000000800080008007FFC080408080810080008180824082407F800080000 +31A6:000000007FFC0200020004000800100020002020104008800500020000000000 +31A7:000000007FFC0200020004000800100020C02120114008800560020000000000 +31A8:00000000101008200820044004400280028001FC028004401830600C00000000 +31A9:00000000201010200840048003000200020002000F801200220022001C000000 +31AA:00000000000000180024004400447FF800400040000000000000000000000000 +31AB:0000000010100820082004400440028002800100028C04521822605C00400000 +31AC:0000000020003FF8210821082108210821082108210821082108000000000000 +31AD:000000007FFC0920092009200920092009200920092009201120611E00000000 +31AE:000000007FFC01001100110021003FF801080108020832084C104A1032200000 +31AF:00000000008001000200041008201FC000800118062418243FF80010000C0000 +31B0:00001830044002807FFC41044104410441044104410441044104410441040000 +31B1:000000007FFC01007FFC41044704480450045044488445044204400440040000 +31B2:000000007FFC010001000100010001000100010001000100010001007FFC0000 +31B3:000000800080008000800080008000800080008003E004800880088007000000 +31B4:0000000000000000000000000100020007E00020002000200140008000000000 +31B5:0000000000000000000000000100020007E00120022004200940008000000000 +31B6:00000000000000000000000007E00100020007C0004000400140008000000000 +31B7:000000000000000000000000000007E002000200020002000400080000000000 +31B8:000000003FF80010002000400080010002000400080010003FF8000000000000 +31B9:0000000000002000200020002000200020003FF8000000000000000000000000 +31BA:00000000000001000100010001007FFC01000100010001000000000000000000 +31BB:0000000000000000000004400440088008801100088008800440044000000000 +31BC:000000000200043008300C4002C0018001800240046008301018201800000000 +31BD:00003FF80200043008300C4002C0018001800240046008301018201800000000 +31BE:000000001010101008200820082004403FF80440024002800280018001000000 +31BF:0000000000000440044004200420041004100810080808081008200800000000 +31C0:0000000000000000002000C003001C0008000000000000000000000000000000 +31C1:0400020002000100010001000100010001000100010001000100010005000200 +31C2:1000100010001000080008000800040004000200020001000090005000200000 +31C3:000000000000000000008000400020001804060201FC00000000000000000000 +31C4:00000800080008000800080008000800080008000800080008000FF000000000 +31C5:000000003F00010001000100010001000100010001000100010001F000000000 +31C6:0000000000003FF0001000100010001000100010001000100010005000200000 +31C7:000000001FF80008000800080008001000100020002000400040008001000200 +31C8:000000007F80008000800080008000800080008000800080008200820082007C +31C9:00002000200020002000200020003FF800080008000800080010001000A00040 +31CA:000000000F80008000800080008000800080009000A000C00080000000000000 +31CB:000000003FFC000800100020007C000400040004000800080010002000400080 +31CC:000003E000200040008000800040004000200020002000200140008000000000 +31CD:0000000000007F800080008000800080008000800040003E0000000000000000 +31CE:000000003F80008000800080008000F000100010001000100010001000100000 +31CF:0000080008000800080004000400020002000100010000800040002000140008 +31D0:00000000000000000000000000007FFE00000000000000000000000000000000 +31D1:0000010001000100010001000100010001000100010001000100010001000000 +31D2:0000000000200020004000400080010002000400000000000000000000000000 +31D3:0000004000400040004000400040004000800080010001000200040008000000 +31D4:0000000000000000040002000100008000400040000000000000000000000000 +31D5:0000000000001FF8000800080008000800080008000800080008000800000000 +31D6:0000000000007FFC000800100000000000000000000000000000000000000000 +31D7:00000000100010001000100010001000100010001000100010001FFC00000000 +31D8:0000001000100010001000100010001000100010001000103FF0001000000000 +31D9:0000040004000400040004000400040004200440048005000600040000000000 +31DA:0000008000800080008000800080008000800080008000800080028001000000 +31DB:0000004000400080008001000200040002000100008000400020000000000000 +31DC:00000040004000800080010001000200040008001FF800000000000000000000 +31DD:0000080008001400240002000200010001000080004000200010000A00040000 +31DE:00002000200020002000200020003FF800080008000800080008000800080000 +31DF:0000080008000800080008000800080008000800080008080808080807F80000 +31E0:00007FF00020004000800100020004000800100020004004400440063FFC0000 +31E1:000000003FF8001000100020007C000400040004000400040008002800100000 +31E2:0000000000100010002000200040004000800080010001002200240038000000 +31E3:0000000000001FF020084004400440044004400420081FF00000000000000000 +31E4:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE61B66FB663866FF661F67FFE0000 +31E5:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE61866FBE63866FF661867FFE0000 +31E6:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE61CE6FBE638E6FB661CE7FFE0000 +31E7:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE61866FF663EE6FDE61DE7FFE0000 +31E8:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE61CE6FB663CE6FB661CE7FFE0000 +31E9:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE61CE6FB663C66FF661CE7FFE0000 +31EA:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE61866FB663866FB661B67FFE0000 +31EB:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE618E6FB6638E6FB6618E7FFE0000 +31EC:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE61C66FBE63BE6FBE61C67FFE0000 +31ED:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE618E6FB663B66FB6618E7FFE0000 +31EE:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE61866FBE638E6FBE61867FFE0000 +31EF:00007FFE63EE7DCE71EE7DEE63C67FFE7FFE61866FBE638E6FBE61BE7FFE0000 +31F0:00000000000000000000000040002E0032002400440008001000200040000000 +31F1:0000000000000000000000000000600010000000610012000400480030000000 +31F2:00000000000000000000000000008E00720004000400080014002200C2000000 +31F3:0000000000000000000000002000200020003000280024002000200020000000 +31F4:00000000000000000000000000008E00720004003400080014002200C2000000 +31F5:0000000000000000000000000000048002400220042008101010000000000000 +31F6:0000000000000000000000004000400040004E0070004000400040003E000000 +31F7:00000000000000000000000000008E00720004000400080010002000C0000000 +31F8:0000000000000000000000000000000000000200050008C00030000000000000 +31F9:00000000000000000000200010001E00F0001000540092001000500030000000 +31FA:000000000000000000000000020001000100010001000200022014D00F080000 +31FB:0000000000000000000000008C00700000008E00720002000400080070000000 +31FC:0000000000000000000000000000880044004400440004000400080030000000 +31FD:0000000000000000000000000240012001200120012001240224042808300000 +31FE:0000000000000000000000000000800040004000400044004800500060000000 +31FF:00000000000000000000000000F01F10101010101020102011F01E0000000000 +3200:00001818200440024FF240124012401240124012401240124002200418180000 +3201:000018182004400244024402440244024402440247FA40024002200418180000 +3202:000018182004400240024FF2480248024802480248024FF24002200418180000 +3203:00001818200440024FF2401240124FF24802480248024FFA4002200418180000 +3204:000018182004400240024FF248124812481248124FF240024002200418180000 +3205:00001818200440024812481248124FF24812481248124FF24002200418180000 +3206:0000181820044082408240824142414242224412480A40024002200418180000 +3207:000018182004400243C244224812481248124812442243C24002200418180000 +3208:00001818200440025FF241024102428242824442482250124002200418180000 +3209:00001818200443E2400240024FFA4082414242224412480A4002200418180000 +320A:00001818200440024FF2401240125FF240124012401240124012200418180000 +320B:00001818200440024FF2480248024FF24802480248024FF24002200418180000 +320C:000018182004400240024FF2400244224422424242425FFA4002200418180000 +320D:000018182004400243C240025FFA400243C244224422442243C2200418180000 +320E:00001818202440225FA240A2413E422244224822502260224022202418180000 +320F:0000181820244022502250225022503E50225FE2402240224022202418180000 +3210:00001818202440225FA250225022503E50225FA2402240224022202418180000 +3211:00001818202440225FA240A240A25FBE502250225FA240224022202418180000 +3212:000018182024402240225F225122513E51225F22402240224022202418180000 +3213:0000181820244022512251225F22513E51225F22402240224022202418180000 +3214:0000181820244022442244224A224A3E512260A2402240224022202418180000 +3215:00001818202440224E2251225122513E512251224E2240224022202418180000 +3216:00001818202440225FE242224222453E452248A2506240224022202418180000 +3217:000018182024472240225FE24222423E452248A2506240224022202418180000 +3218:00001818202440225FA240A27F22423E44224822502260224022202418180000 +3219:00001818202440225FA250225FA2503E50225FA2402260224022202418180000 +321A:00001818202440225FA2402250A2493E49224BE27C2240224022202418180000 +321B:0000181820244F2240227FE240224F3E50A250A24F2260224022202418180000 +321C:0000301840049FF2810282828C62B01A8002BFFA810281028102410431180000 +321D:00003018400499EAA44AA4DAA52A992A800A88828882BEFA8002400430180000 +321E:30184004806299FAA462A492A4929862800288FA8822BE228022400430180000 +321F:00007FFE63867DF671867DBE63867FFE7FFE7B8673BE7B8E7BBE71BE7FFE0000 +3220:0000200840048002800280028012BFFA80028002800280028002400420080000 +3221:00002008400480229FF280028002800280028012BFFA80028002400420080000 +3222:0000200840249FF28002800280428FE2800280028012BFFA8002400420080000 +3223:0000200840048002BFFAA44AA44AA44AA44AA44ABFFA80028002400420080000 +3224:0000200840249FF28202820282229FF28422842284228422BFFA400420080000 +3225:000020084004820281028012BFFA800280028442842288129012400420080000 +3226:000020084204820282028212827A8382BE02820282028222822241E420080000 +3227:0000200840848482848284828482848288428822901AA0128002400420080000 +3228:000020084204820282429FE28242824282428442844A884A903A400420080000 +3229:000020084104810281028112BFFA810281028102810281028102400420080000 +322A:0000301847F48412841287F28412841287F28412841288529022400430180000 +322B:000030184104810289128922894291028282828284428822B01A400430180000 +322C:00003018410481028112BDA285428542892289229112A50A8202400430180000 +322D:00003018410481028102BFFA8102838285428922B11A81128102400430180000 +322E:000030184104828284428822B7DA81029FF2810289228542BFFA400430180000 +322F:0000301841048102810281029FF281028102810281028102BFFA400430180000 +3230:0000301840048FE28822882288228FE28822882288228FE28822400430180000 +3231:0000301848448942BDF28A429C429BFAA842A8E289528A4A8842400430180000 +3232:000030184204BFFA840287E28C2297E2A42287E2842284228462400430180000 +3233:0000301850448842BE42844289F28C429A42A842884288428BFA400430180000 +3234:00003018440487F284228A429182810287F2BC128412841287F2400430180000 +3235:000030184844A9F2BC42A842ABFA8C229BFAA92288A2882288E2400430180000 +3236:0000301840149E1293FA9E1292329E5292929F1280129252A122400430180000 +3237:0000301851F48912BF12831285F28CA29AA2AAA288AA892A8A1A400430180000 +3238:000030185214891289229FFA910AA1029FF28112821284129862400430180000 +3239:0000301844A48492888288FA9B82A88288828842884A882A881A400430180000 +323A:000030184034BBC2A84AAA4AA952AFFAB842A8428042804281C2400430180000 +323B:00003018491484A29FFA900A87E2804280829FFA808280828382400430180000 +323C:000030185F2494229F3A91429F52940A9F8280029FF29292BFFA400430180000 +323D:000030184104818282428422889AB08284E28482848284829FFA400430180000 +323E:0000301851048BFA844A9FE28C3A87E2842287E2842287E29C3A400430180000 +323F:00003018488489F28892BE92892289228FFA8AAA8AAA8CCA8912400430180000 +3240:0000301848FC8F9292A2AA4294228BD2900AAFF284A28A92B10A400430180000 +3241:000030184444844288428FFA9842A8E288E289528A4A8C428842400430180000 +3242:00003018420484028FE2882288228FE288228FE2882288228FE2400430180000 +3243:000030185FF48202844288229FF2810281028FE281028102BFF2400430180000 +3244:00003FF84004BEFAA28ABEFAA28ABEFAA00AA7CAA44AA44AA7CAA01A40043FF8 +3245:00003FF8400484428442884293FABE4A844A884A924ABD4A90AA811240043FF8 +3246:00003FF8400482028102BFFA84428442844282828282810286C2B83A40043FF8 +3247:00003FF840049EF2A5229FE289429FE28122BFFA81229FE28102830240043FF8 +3248:0000FC7EE00EC0068872988A088808880888888A888ABE72C006E00EFC7E0000 +3249:0000FC7EE00EC0069C72A28A028802881C88A08AA08ABE72C006E00EFC7E0000 +324A:0000FC7EE00EC0069C72A28A02880C880288828AA28A9C72C006E00EFC7E0000 +324B:0000FC7EE00EC006A472A48A24883E880488848A848A8472C006E00EFC7E0000 +324C:0000FC7EE00EC006BE72A08A20881C880288828AA28A9C72C006E00EFC7E0000 +324D:0000FC7EE00EC0069C72A28A20883C882288A28AA28A9C72C006E00EFC7E0000 +324E:0000FC7EE00EC006BE72A28A028804880488888A888A8872C006E00EFC7E0000 +324F:0000FC7EE00EC0069C72A28A22881C882288A28AA28A9C72C006E00EFC7E0000 +3250:000000000000000077DE491049104910711E4110411041104110411E00000000 +3251:00001FF0200840049C22A262822282229C22A022A022BEFA400420081FF00000 +3252:00001FF0200840049C72A28A820A820A9C72A082A082BEFA400420081FF00000 +3253:00001FF0200840049C72A28A820A82329C0AA00AA08ABE72400420081FF00000 +3254:00001FF0200840049C92A292829282FA9C12A012A012BE12400420081FF00000 +3255:00001FF0200840049CFAA282828282729C0AA00AA08ABE72400420081FF00000 +3256:00001FF0200840049C72A28A828282F29C8AA08AA08ABE72400420081FF00000 +3257:00001FF0200840049CFAA28A820A82129C12A022A022BE22400420081FF00000 +3258:00001FF0200840049C72A28A828A82729C8AA08AA08ABE72400420081FF00000 +3259:00001FF0200840049C72A28A828A828A9C7AA00AA08ABE72400420081FF00000 +325A:00001FF0200840049C72A28A828A8C8A828A828AA28A9C72400420081FF00000 +325B:00001FF0200840049C22A26282228C2282228222A2229CFA400420081FF00000 +325C:00001FF0200840049C72A28A820A8C0A82728282A2829CFA400420081FF00000 +325D:00001FF0200840049C72A28A820A8C32820A820AA28A9C72400420081FF00000 +325E:00001FF0200840049C92A29282928CFA82128212A2129C12400420081FF00000 +325F:00001FF0200840049CFAA28282828C72820A820AA28A9C72400420081FF00000 +3260:00000FF01008200440025FF2401240124012401240124012200410080FF00000 +3261:00000FF01008200440024802480248024802480248024FF2200410080FF00000 +3262:00000FF0100820044FF2480248024802480248024FF24002200410080FF00000 +3263:00000FF0100820044FF2401240124FF24802480248024FFA200410080FF00000 +3264:00000FF0100820044FF2481248124812481248124FF24002200410080FF00000 +3265:00000FF0100820044812481248124FF24812481248124FF2200410080FF00000 +3266:00000FF0100820844082408241424142422242224412480A200410080FF00000 +3267:00000FF01008200443C244224812481248124812442243C2200410080FF00000 +3268:00000FF01008200440024FFA40824082414242224412480A200410080FF00000 +3269:00000FF01008200443E240024FFA4082414242224412480A200410080FF00000 +326A:00000FF0100820044FF2401240125FF24012401240124012200410080FF00000 +326B:00000FF0100820044FE2480248024FE24802480248024FF2200410080FF00000 +326C:00000FF01008200440024FF2400244224222424242425FFA200410080FF00000 +326D:00000FF01008200447E240025FFA400243C24422442243C2200410080FF00000 +326E:00000FF0102820245FA240A2413E41224222442248225022202410280FF00000 +326F:00000FF010282024502250225022503E50225FE240224022202410280FF00000 +3270:00000FF0102820245FA250225022503E50225FA240224022202410280FF00000 +3271:00000FF0102820245FA240A240A25FBE502250225FA24022202410280FF00000 +3272:00000FF01028202440225F225122513E512251225F224022202410280FF00000 +3273:00000FF010282024512251225F22513E512251225F224022202410280FF00000 +3274:00000FF010282224422244224622493E50A2602240224022202410280FF00000 +3275:00000FF0102820244E2251225122513E512251224E224022202410280FF00000 +3276:00000FF0102820245FE242224222453E48A2506260224022202410280FF00000 +3277:00000FF0102827A440225FE24222453E48A2506260224022202410280FF00000 +3278:00000FF0102820245FA240A241225E3E4422482250226022202410280FF00000 +3279:00000FF0102820245FA250225FA2503E50225FA240226022202410280FF00000 +327A:00000FF0102820245FA2402250A2493E49224BE27C224022202410280FF00000 +327B:00000FF010282F2440227FE240224F3E50A250A24F224022202410280FF00000 +327C:00000FF010082E8440BA5E8A44EA4A8A51AA40AA5E2252223EFC10080FF00000 +327D:00000FF010083F6C429A449A4A9A516A400A7F8A440A44FA200C10080FF00000 +327E:00000FE010102388444444444444438440044FE441044104210810100FE00000 +327F:00001FF020085EF48C428C80ED0E0E020D028C828C425EF420081FF000000000 +3280:00001FF020084004800280028012BFFA8002800280028002400420081FF00000 +3281:00001FF0200840249FF280028002800280028012BFFA8002400420081FF00000 +3282:00001FF0200840249FF2800280428FE280028012BFFA8002400420081FF00000 +3283:00001FF020085FF4929292929292929294F2981290129FF2501420081FF00000 +3284:00001FF0200840049FF2810281028FE282228222822282227FFC20081FF00000 +3285:00001FF0220841048002BFFA8002844284228812900AA00A400420081FF00000 +3286:00000FF0100822044202423243C25E02420242024212421221F410080FF00000 +3287:00001FF0200840848482848284428442882288229012A00A400420081FF00000 +3288:00001FF02208420482029FC28242824282428442844A884A503C20081FF00000 +3289:00000FE010102108410441045FF441044104410441044104200810100FE00000 +328A:00001FF0200847F48412841287F28412841287F284128412485430281FF00000 +328B:00001FF02008410489128922894291028282828284428822701C20081FF00000 +328C:00001FF0210841048112BDA285428542892289229112A50A420420081FF00000 +328D:00001FF0210841048102BFFA8102838285428922B11A8112410420081FF00000 +328E:00001FF02108428484428822B7DA81029FF28102892285427FFC20081FF00000 +328F:00001FF021084104810281029FF2810281028102810281027FFC20081FF00000 +3290:000007F0080817F424122412241227F224122412241227F21414080807F00000 +3291:00001FF028484944BDF28A429C429BFAA842A8E289528A4A484420081FF00000 +3292:00001FF022087FFC840287E28C2297E2A42287E284228422446420081FF00000 +3293:00001FF030484844BE42844289F28C429A42A842884288424BFC20081FF00000 +3294:00001FF0240847F484228A429182810287F2BC128412841247F420081FF00000 +3295:00001FF0284869F4BC42A842ABFA8C229BFAA92288A2882248E420081FF00000 +3296:00001FF020185E1493FA9E1292329E5292929F1280129252612420081FF00000 +3297:00001FF0200851F48912BF12831285F28CA29AA2AAAA892A4A1C20081FF00000 +3298:00001FF03218491489229FFA910AA1029FF2811282128412586420081FF00000 +3299:00001FF0248878548892BE9288A28DA29AAAAACA889289924E7420081FF00000 +329A:00000FF010083FFC49124FF249124FF241025FFA410A420A244C18380FF00000 +329B:00001FF0220842048202BFFA8442844288428E82818282625C1420081FF00000 +329C:00001FF030484BFC88A283FABA4A8BFA8AAA8AEA8A1A940263FC20081FF00000 +329D:00001FF02BF8491489F289129BFAAC8A8B528DEA892288C24F3C20081FF00000 +329E:00000FF012083CFC508A508A5E8A508A508A528A5CB25082208410080FF00000 +329F:00001FF030884844A3FA94428442884289F2B0429042904253FC20081FF00000 +32A0:00001FF8200441FABE4189F9890989F989098FF9B10981F94092230C1FF80000 +32A1:00001FF02448444488428FFA9842A8E288E289528A4A8C42484420081FF00000 +32A2:00001FF020085FFC900AA41287E2840287F280129FD2801240A420481FF00000 +32A3:00001FF02008400480029FF28102810289E2890289029FF2400420081FF00000 +32A4:00001FF0210841048102810281F2810281028102810281027FFC20081FF00000 +32A5:000007F0088810842FFA288A288A288A2FFA288A208220821084080807F00000 +32A6:00001FF020087FFC81028102818281428122812281028102410420081FF00000 +32A7:00001FF022084204BFFA8202840287F2888288829082A0824FFC20081FF00000 +32A8:00001FF021084104BFFA8202840287E28C229422A42287E2442420081FF00000 +32A9:00000FF010083FFC520253F254825FFA50825142522254123FFC10080FF00000 +32AA:00001FF0200840849FFA900AA7E280029FFA808288A28892529421081FF00000 +32AB:00000FF0191824A45FFA500A47E2404240825FFA40824082238410080FF00000 +32AC:00001FF03E486844BE7AA282BEA2A812BF0280029FF292927FFC20081FF00000 +32AD:00001FF02108418482428422889AB08284E28482848284825FFC20081FF00000 +32AE:00000FF011082BFC444A5FE24C3A47E2442247E2442247E23C3C10080FF00000 +32AF:00000FF0188829F448927E92492249224FFA4AAA4AAA4CCA291410080FF00000 +32B0:00001FF021087FFC848284F289929A52AD2288A2884288A24B1C20081FF00000 +32B1:00001FF0200840049C72A28A82828CF2828A828AA28A9C72400420081FF00000 +32B2:00001FF0200840049CFAA28A820A8C1282128222A2229C22400420081FF00000 +32B3:00001FF0200840049C72A28A828A8C72828A828AA28A9C72400420081FF00000 +32B4:00001FF0200840049C72A28A828A8C8A827A820AA28A9C72400420081FF00000 +32B5:00001FF020084004A472A48AA48ABE8A848A848A848A8472400420081FF00000 +32B6:00001FF020084004A422A462A422BE2284228422842284FA400420081FF00000 +32B7:00001FF020084004A472A48AA40ABE0A84728482848284FA400420081FF00000 +32B8:00001FF020084004A472A48AA40ABE32840A840A848A8472400420081FF00000 +32B9:00001FF020084004A492A492A492BEFA8412841284128412400420081FF00000 +32BA:00001FF020084004A4FAA482A482BE72840A840A848A8472400420081FF00000 +32BB:00001FF020084004A472A48AA482BEF2848A848A848A8472400420081FF00000 +32BC:00001FF020084004A4FAA48AA40ABE128412842284228422400420081FF00000 +32BD:00001FF020084004A472A48AA48ABE72848A848A848A8472400420081FF00000 +32BE:00001FF020084004A472A48AA48ABE8A847A840A848A8472400420081FF00000 +32BF:00001FF020084004BE72A08AA08A9C8A828A828AA28A9C72400420081FF00000 +32C0:0000107C304410441044107C104410441044107C104410441044104410947C88 +32C1:0000007C184424442444047C044408440844087C104410441044204420943C88 +32C2:0000007C184424442444047C044404441844047C044404440444244424941888 +32C3:0000007C244424442444247C244424443C44047C044404440444044404940488 +32C4:0000007C3C4420442044207C204420443844047C044404440444244424941888 +32C5:0000007C184424442444207C204420443844247C244424442444244424941888 +32C6:0000007C3C4404440444047C084408440844107C104410441044104410941088 +32C7:0000007C184424442444247C244424441844247C244424442444244424941888 +32C8:0000007C184424442444247C244424441844047C044404440444244424941888 +32C9:0000003E232264A224A224BE24A224A224A224BE24A224A224A224A224CA7344 +32CA:0000003E222266222222223E222222222222223E2222222222222222224A7744 +32CB:0000003E232264A224A220BE20A221222122213E2222222222222422244A77C4 +32CC:000000000000000042004204427442887E884288427042404278428400840078 +32CD:000000000000000000000002651A96A494A4F42484188410941C64220022001C +32CE:0000000000000000008200823C82424442447E444028402842103C1000000000 +32CF:00000000000000004FB8422442224222422242224222422242247A3800000000 +32D0:000003800C60101020082FE840244144418441042208240810100C6003800000 +32D1:000003800C6010102048208841044304450449042108210810100C6003800000 +32D2:000003800C60111021082FE848244824402440442048208811100C6003800000 +32D3:000003800C6010102008200847C44104410441042FE8200810100C6003800000 +32D4:000003800C60101020882FE841844284448448842288218810100C6003800000 +32D5:000003800C60111021082FE841244224444448442288210810100C6003800000 +32D6:000003800C601010220823C84F04410441F44FC42048204810100C6003800000 +32D7:000003800C601010220823E842244424484440442088230810100C6003800000 +32D8:000003800C601010240827E844844884508440842108260810100C6003800000 +32D9:000003800C60101020082FE840244024404440442FE8200810100C6003800000 +32DA:000003800C601010224822484FF44244424442442088230810100C6003800000 +32DB:000003800C601010260821084C044224404440842908260810100C6003800000 +32DC:000003800C60101020082FC840444044408441842248244810100C6003800000 +32DD:000003800C60101022082FE84224424442844204220821E810100C6003800000 +32DE:000003800C6010102008282844244424404440842108260810100C6003800000 +32DF:000003800C601010220823E842244624454448C420A8230810100C6003800000 +32E0:000003800C60101020E82F8840F45F84408440842108260810100C6003800000 +32E1:000003800C6010102208292845244424404440842108260810100C6003800000 +32E2:000003800C60101027C820084FE44084408440842108260810100C6003800000 +32E3:000003800C6010102208220842044304428442442208220810100C6003800000 +32E4:000003800C60111020882FE840844084408440842108260810100C6003800000 +32E5:000003800C601010200821E84E04400440F44F042008200810100C6003800000 +32E6:000003800C60101020082FC840444644418441842248244810100C6003800000 +32E7:000003800C60101020082FC840444084410443442528210811100C6003800000 +32E8:000003800C6010102008202840244024404440842108260810100C6003800000 +32E9:000003800C6010102008228842444424582440042008200810100C6003800000 +32EA:000003800C6010102008280849844E0448044804280827C810100C6003800000 +32EB:000003800C60101020082FE840244024402440442048208811100C6003800000 +32EC:000003800C6010102008220845044884404440242008200810100C6003800000 +32ED:000003800C60111021082FE841044544492441242508230810100C6003800000 +32EE:000003800C60101020082FE840244344408440442048200810100C6003800000 +32EF:000003800C601010230820C8460441844004460421C8201810100C6003800000 +32F0:000003800C60111021082108420442044444442427E8282810100C6003800000 +32F1:000003800C6010102008202840244224414440C420A8230810100C6003800000 +32F2:000003800C6010102FC8220843C45E0442044204220821E810100C6003800000 +32F3:000003800C60121022082FE842244144410441042088208810900C6003800000 +32F4:000003800C6010102008200847E44024404440842FE8200810100C6003800000 +32F5:000003800C601010200827E8402447E44024402427E8200810100C6003800000 +32F6:000003800C60101027C820084FE44024402440442048208813100C6003800000 +32F7:000003800C6010102248224842444244424440442088230810100C6003800000 +32F8:000003800C6010102108250845044514452445442588290810100C6003800000 +32F9:000003800C6010102408240844044424444444842508260810100C6003800000 +32FA:000003800C601010200828E84F244824484449E42E08280810100C6003800000 +32FB:000003800C60101020082FE848244824402440442048208811100C6003800000 +32FC:000003800C60109020882FE8448444845FE440842088208810900C6003800000 +32FD:000003800C60101020082FE840244344408440443FF8200810100C6003800000 +32FE:000003800C60101020082FE8402447E4402440442088230810100C6003800000 +32FF:0000203050C0484E844ABBFA004AFCCA24EA255A254A244A2C4E204A20482040 +3300:7C04040A154A192411201220200000000040004000407C600050004000400000 +3301:3E0002100A500C50085408541058000000003E00027C02040218041018200000 +3302:3E0002400A200C040818086010000000013E2282528A090C0408000800100000 +3303:3E0002000A000C7C080008001000000000000800280028002A002A002C000000 +3304:02000438080018002800087C08000000010281E941240A203020C04001800000 +3305:020004400820180428180860080000000400380008003E000800080010000000 +3306:08003E002208227C021804280848000000002000100002000C00300000000000 +3307:00007CF810081010102010507C8800004022782948248BB00828102060200000 +3308:00003E000800087C080008003E00000010003E001200127C1200120024000000 +3309:04003E4004200C04141824600C00000000003E00020004000800140022000000 +330A:04003E0004000C7C140024000C000000080008001000200022003E0002000000 +330B:10043E0812101230125012102410000024002400240024000400080030000000 +330C:10383E00127C12041204120824300000002000202A202A300228042018200000 +330D:10003E7C124412441244127C24000000240024002400247C0400080030000000 +330E:4100FCBE4A2248224822483E9000000000004000200004001800600000000000 +330F:4080FA5049084802480C48309000000000007C00040004002800100008000000 +3310:20407D2010807C001000080008000000020407D2024802400240024004800000 +3311:4080FA5C2100F8002000103E100000000000000000007C000000000000000000 +3312:10003E0008003E380808047C04000000240024002400247C0400080030000000 +3313:4080FA442114F814201510151016000040807A404900A83E1800100060000000 +3314:10003E0008003E0008000400040000000000007C004400440044007C00000000 +3315:20007CF810887C88108808F80800000041327482527490141015202740410000 +3316:4002FBC22242FA54224813D410200000020002080228FB2802AA022A022C0000 +3317:10003E3E08223E220822043E040000000008F8088AA88AAC082A104861880000 +3318:408C7A40491E88020802100460080000100010002000400044007C0004000000 +3319:408C7A40491E8802080210046008000022002210420883028A8CFA300A000000 +331A:20003C2024A044A004A808A830B000004110FCAF4A4950C941494049384F0000 +331B:10001E7C124422440244047C180000000010007C00083E100038005400100000 +331C:10001E002400047C040004000800000000003E00020004000800140022000000 +331D:00003E1002500250025402543E580000080008003E0008000800100020000000 +331E:00003E000200027C020002003E00000008403EA008A02A402A00080018000000 +331F:14043E0814101430045008101010000010001E10125022500254045418580000 +3320:14003E401420140404180860100000001008E0082010FBA02022203E40020000 +3321:20901490449024900810702000C00000010281E941240A203020C04001800000 +3322:10003E4012201404101810600E0000000400380008003E000800080010000000 +3323:10003E4012201404101810600E00000010001000100018001400100010000000 +3324:40807A404900A83E180010006000000000007C00040008001000280044000000 +3325:1C2000903E400800080008001000000000200014004400240008007000000000 +3326:2100248022003000280020002000000000000010005000500054005400580000 +3327:1000100010001800140010001000000000000040002000040018006000000000 +3328:080008003E000800080010002000000000000008000800080008001000200000 +3329:040004000454045404040808103000000800080008000C000A00080008000000 +332A:0004000814101230125022100010000000002A002A0002000200040018000000 +332B:010002805280493E48008800000000004008FA084908502C40CA430838080000 +332C:010002805280493E480088000000000000005400540004000400080030000000 +332D:010004805200483E48008800000000000000402040A044A048A850A860B00000 +332E:813E9A82E28A810C80088008781000000200FA080A28132822AA522A8A2C0000 +332F:81109A9EE2928122800280047818000000001000500050005400540058000000 +3330:204026A038A02040200020001E0000000000007C0004000400040004007C0000 +3331:40404D2070804000400040003C00000000000010005000500054005400580000 +3332:00007C0004F804080430082030400000E0220029EAA42AB020A8412086200000 +3333:00003E000208021002300450181000000020002000203E300028002000200000 +3334:0100F480122A102A10022004C01800004000280488144FD41115E11507D60000 +3335:00383E00027C0204020404081830000000002000100002000C00300000000000 +3336:00402078504808880408001000600000400078044814ABD41815101560160000 +3337:0100228052800900040000000000000000000024001400140004000800300000 +3338:0100229C528009000400003E000000002000260038002000200020001E000000 +3339:0000101028500450025400540058000000002A002A0002000200040018000000 +333A:010022A052900902040C00300000000000003E00020004000800140022000000 +333B:010022805280093E040000000000000020401520448024000800700000000000 +333C:010024805200083E040000000000000010001E0012002A000600040018000000 +333D:10827D4411485498542810083008000000202020102002300C28302000200000 +333E:10407D2410945414541510153016000010001000100018001400100010000000 +333F:08003E0008002A002A0008001800000000000040002000040018006000000000 +3340:10807D5011485482540C10303000000010801240110018001400100010000000 +3341:08003E0008002A7C2A0008001800000000000800280028002A002A002C000000 +3342:08003E0008002A7C2A0008001800000000002000100002000C00300000000000 +3343:00043E0802100230145008100410000010001E7C124402440244047C18000000 +3344:00043E0802100230145008100410000000000800280028002A002A002C000000 +3345:00003E0002540254140408080430000000000000140012001200220000000000 +3346:00003E1002500250145408540458000010001E00120022000200040018000000 +3347:00007C8004400408283010C008000000000040202B9088824B8C10B0E3800000 +3348:1820043C30240844000430080C30000000003E402220220422183E6000000000 +3349:1800040030000800000030000C00000000480048004800480008001000600000 +334A:1848044830480848000830100C600000010004845214481449D5881500160000 +334B:04000400040028001000280040000000020407D2024802400240024004800000 +334C:09020BE90924512021205120824000002000208020403008283020C020000000 +334D:020002000200147C080014002000000010001010105018501454105410580000 +334E:100010003E00127C140010001000000021002480220030002800200020000000 +334F:100010003E00127C140010001000000000000800280028002A002A002C000000 +3350:007C1C040414041804103E100020000000002000100002000C00300000000000 +3351:2400240024542454040408083030000010001010105018501454105410580000 +3352:2400240024002400040008003000000000380000007C00040004000800300000 +3353:1102513551C551025500550058F000000000000000007C000000000000000000 +3354:000008002800287C2A002A002C0000000080FA44091408140815101560160000 +3355:0000200020002200240028003000000000100010002000400044007C00040000 +3356:0000408040404408483050C06000000088208E949442C400A401840688180000 +3357:00003E0022542254020404081830000010001000100018001400100010000000 +3358:001018102410241E24102410247C244424442444247C24442400245418AA00AA +3359:001010103010101E10101010107C104410441044107C1044100010547CAA00AA +335A:001018102410241E04100410087C084408441044107C1044200020543CAA00AA +335B:001018102410241E04100410047C184404440444047C04442400245418AA00AA +335C:001024102410241E24102410247C3C4404440444047C04440400045404AA00AA +335D:00103C102010201E20102010207C384404440444047C04442400245418AA00AA +335E:001018102410241E20102010207C384424442444247C24442400245418AA00AA +335F:00103C100410041E04100810087C084410441044107C10441000105410AA00AA +3360:001018102410241E24102410247C184424442444247C24442400245418AA00AA +3361:001018102410241E24102410247C184404440444047C04442400245418AA00AA +3362:001026106910291E29102910297C294429442944297C29442900295476AA00AA +3363:001022106610221E22102210227C224422442244227C22442200225477AA00AA +3364:001026106910291E21102110227C224422442444247C2444280028547FAA00AA +3365:001026106910291E21102110217C264421442144217C21442900295476AA00AA +3366:001029106910291E29102910297C2F4421442144217C21442100215471AA00AA +3367:00102F106810281E28102810287C2E4421442144217C21442900295476AA00AA +3368:001026106910291E28102810287C2E4429442944297C29442900295476AA00AA +3369:00102F106110211E21102210227C224424442444247C24442400245474AA00AA +336A:001026106910291E29102910297C264429442944297C29442900295476AA00AA +336B:001026106910291E29102910297C264421442144217C21442900295476AA00AA +336C:000863089488948F1488148824BE24A224A244A244BE44A2848084AAF3550055 +336D:000862089608920F12081208223E222222224222423E42228200822AF7550055 +336E:000863089488948F10881088213E212221224222423E42228400842AF7D50055 +336F:000863089488948F1088108820BE232220A240A240BE40A2848084AAF3550055 +3370:000864889488948F1488148824BE27A220A240A240BE40A2808080AAF0D50055 +3371:0000000043C042204220422053CC6A124A024A0E4A124A124A164A0A00000000 +3372:0000000002000200020002003A3C46424202423E4242424246463A3A00000000 +3373:000000000842144214421442224222423E422242414241424142413C00000000 +3374:00000000400040004000400071944A5A485249D04A504A504AD0715000000000 +3375:0000000000820082008200827882844484448444842884288410781000000000 +3376:0000000000000000000000005C3C6242424042404240424062425C3C40004000 +3377:0000000001000100010001001D682354415441544154415423541D5400000000 +3378:001E0002021E0210021E02003AD046A882A882A882A882A846A83AA800000000 +3379:001E0002020E0202021E02003AD046A882A882A882A882A846A83AA800000000 +337A:000000007C8410841084108410841084108410841084108410847C7800000000 +337B:0000000A0009FE091008927F524854481078FE551055109510D610B5110A0010 +337C:00001E300AEEEA4AAAFAAA4AEA4AB6CAA0EAAEDAEB4AAA4A0E4E0A4A00000000 +337D:0000000010FE10101010FE5010501050285E2850285044504450445082FE0000 +337E:000000010E81EA42AA02AA94EE55AA17AA21AA20EE6FAA290A29122F26290000 +337F:2A057F842A3F7702A23A27122AB90000104428F4441EBA2400D4FE4424447A5F +3380:0000000000100028002800285C446244427C4244428262825C82408240004000 +3381:00000000001000280028002858446444447C4444448244824482448200000000 +3382:00000000001000280028002811441144117C12442282228222823D8240004000 +3383:00000000001000280028002868445444547C5444548254825482548200000000 +3384:00000000801080288028802884448844907CA044D08288828482828200000000 +3385:00000000407C4042404240424242447C48425042684244424242417C00000000 +3386:00000000417C4142634263425542557C49424942414241424142417C00000000 +3387:000000003C7C42424242404240424E7C424242424242424246423A7C00000000 +3388:00000000000C00040004000471E48A14801481F4821482148A3471DE00000000 +3389:00000000800C80048004800493649494A414C474A49494948CB48F5E00000000 +338A:0000000000FE0080008000805C8062F842804280428062805C80408040004000 +338B:0000000000FE00800080008058F8648044804480448044804480448000000000 +338C:00000000007E004000400040227C2240224022404440444044407B4080008000 +338D:00000000000000000000000411341148114811482230222022383DC440444038 +338E:0000000000000000000000086868549054905490546054405470548800880070 +338F:0000000040004000400040044234444848485048683044204238414400440038 +3390:000041004100410041004100413E7F0241044108411041204140417E00000000 +3391:000084408440844084408440945E97C2A444C448A44894508C608C7E00000000 +3392:00008A408A40DA40DA40AA40AA5E8BC28A448A448A488A488A508A5E00000000 +3393:0000000072408A408A408240825E83C29E448A448A488A488A507A5E00000000 +3394:00000000FC8024802480248024BE2782248424882488249024A024BE00000000 +3395:00000000000800140014002411281148114822502252226222645DD840004000 +3396:000000000008001400140024762849484948495049524962496448D800000000 +3397:0000000002080214021402243A284648424842504252426246643BD800000000 +3398:000000004008401440144024422844484848505068524462426441D800000000 +3399:000000001C0022002000200078C8213421242124212421242124212400000000 +339A:00000000000000000000000059D8652445244524452445244524452400000000 +339B:00000000000000000000000022A422DA229242924492449244927B9280008000 +339C:00000000000000000000000034682A542A542A542A542A542A542A5400000000 +339D:0000000000000000000000001C682254405440544054405422541C5400000000 +339E:0000000040004000400040004268445448545054685444544254415400000000 +339F:001E0002001E0010001E000068D054A854A854A854A854A854A854A800000000 +33A0:001E0002001E0010001E000038D044A880A880A880A880A844A838A800000000 +33A1:003C0004003C0020003C00002CC0332022202220222022202220222000000000 +33A2:001E0002801E8010801E800084D088A890A8A0A8D0A888A884A882A800000000 +33A3:001E0002000E0002001E000068D054A854A854A854A854A854A854A800000000 +33A4:001E0002000E0002001E000038D044A880A880A880A880A844A838A800000000 +33A5:003C0004001C0004003C00002CC0332022202220222022202220222000000000 +33A6:001E0002800E8002801E800084D088A890A8A0A8D0A888A884A882A800000000 +33A7:0002D004A808A810A820A840A880A978AA840280047808041084207840008000 +33A8:0010D02EA822A84EA888A88EA900AA78AC840480087810041084207840008000 +33A9:000000003E0021002100210021783E842004207C20842084208C207400000000 +33AA:0000000081C0812081208120853C89C29102A11ED12289228526831A00000000 +33AB:0000000089C08920D920D920A93CA9C28902891E892289228926891A00000000 +33AC:0000000071C0892089208120813C81C29D02891E892289228926791A00000000 +33AD:0000000000020002000200025B1A64A640A247A248A248A249A646DA00000000 +33AE:008200840084B188CA889A90AA90AAA0AAAC9DD20090010C01020212040C0800 +33AF:0090009E0092B1AECAA89AAEAAC0AAC0AA989DA400A001180104022402180400 +33B0:0000000000000000000000005C786284428042704208420462845C7840004000 +33B1:0000000000000000000000005878648444804470440844044484447800000000 +33B2:000000000000000000000000113C1142114011382204220222423DBC40004000 +33B3:0000000000000000000000006878548454805470540854045484547800000000 +33B4:0000000000820082008200825C82624442444244422862285C10401040004000 +33B5:0000000001040104010401045888648844884450445044204420442000000000 +33B6:00000000008200820082008222822244224422444428442844107B1080008000 +33B7:00000000008200820082008234822A442A442A442A282A282A102A1000000000 +33B8:000000008104810481048104850488889088A088D05088508420822000000000 +33B9:0000000082828282C682C682AA82AA4492449244822882288210821000000000 +33BA:000000000222022202220122591465144494449444B464C85848404840004000 +33BB:000000000222022202220122591465144494449444B444C84448444800000000 +33BC:000000000222022202220122251425142494249448B448C84848764880008000 +33BD:000000000222022202220122691455145494549454B454C85448544800000000 +33BE:000000008222822282228122851489149094A094D0B488C88448834800000000 +33BF:0000000083228322C722C722AA94AA949294929482B482488248824800000000 +33C0:000000004070408841044104490449045104610451044888448847DE00000000 +33C1:00000000443844446C826C82548254824482448244824444444445EF00000000 +33C2:00000000000000000000000030D048A808A838A848A848A858A82AAA00000000 +33C3:000000003C0022002200220022343C4C224421442144214C22343C0400040004 +33C4:0000000000000000000000001C382244408040804080408022441C3800000000 +33C5:0000000400040004000400043C74428C4084408440844084428C3C7400000000 +33C6:001070208840808081008A0076010A4D125222924312828C0248024E0011000E +33C7:000000003C0042008100800080708088808880888088818842883C7200000000 +33C8:0000000004F804840484048474848CF884848482848284828C8474F800000000 +33C9:000000001E0021004100400040424042402243A44114411823081D1000100060 +33CA:0000000020002000200020002C7832842204227C22842284228C227400000000 +33CB:00000000427C42424242424242427E7C42404240424042404240424000000000 +33CC:00000000000010001000000030B810C4108410841084108410847C8400000000 +33CD:0000000041414242444448485050606060605050484844444242414100000000 +33CE:0000000045044504458C498C5154615451244924450445044504450400000000 +33CF:0000000040004020402040204278442048205020682044244224411800000000 +33D0:000000003000100010001000100010EC109210921092109210927C9200000000 +33D1:000000003000100010001000100010BC10C210821082108210827C8200000000 +33D2:000000006000200020002002271A28A428A428A428982890289CF7220022001C +33D3:00000000300010001000100011021084104810301030104810847D0200000000 +33D4:00000000008000800080008034B82AC42A842A842A842A842AC42AB800000000 +33D5:000000000018008800880008698854885488548854885488548857FE00000000 +33D6:00000000000C000400040004D1C4AA24AA24AA24AA24AA24AA24A9DF00000000 +33D7:000000007C4242424242424242427C7E40424042404240424042404200000000 +33D8:00000000000000000000000058D064A844A844A844A878A840A844AA40004000 +33D9:00000000E72294A294B694B694AAE72A84228422842284228422842200000000 +33DA:000000007C7C42424242424242427C7C40484048404440444042404200000000 +33DB:0000000000000000000000003C2C4232402038200420022042203C2000000000 +33DC:000000001E0021004000400030820C82034400C400A840A821101E1000000000 +33DD:0000000088A088A088A088A044BC45224D224D22552222222222223C00000000 +33DE:000000022204220822102220144014B4092A0A2A042A082A102A202A40000000 +33DF:00000802140422083E102220224022B4012A022A042A082A102A202A40000000 +33E0:0000107C30441044104410441044107C10441044104410441044107C7C440044 +33E1:0000187C24442444044404440844087C08441044104410442044207C3C440044 +33E2:0000187C24442444044404440444187C04440444044404442444247C18440044 +33E3:0000247C244424442444244424443C7C04440444044404440444047C04440044 +33E4:00003C7C20442044204420442044387C04440444044404442444247C18440044 +33E5:0000187C24442444204420442044387C24442444244424442444247C18440044 +33E6:00003C7C04440444044408440844087C10441044104410441044107C10440044 +33E7:0000187C24442444244424442444187C24442444244424442444247C18440044 +33E8:0000187C24442444244424442444187C04440444044404442444247C18440044 +33E9:0000267C69442944294429442944297C29442944294429442944297C76440044 +33EA:0000227C66442244224422442244227C22442244224422442244227C77440044 +33EB:0000267C69442944214421442244227C22442444244424442844287C7F440044 +33EC:0000267C69442944214421442144267C21442144214421442944297C76440044 +33ED:0000297C694429442944294429442F7C21442144214421442144217C71440044 +33EE:00002F7C684428442844284428442E7C21442144214421442944297C76440044 +33EF:0000267C694429442844284428442E7C29442944294429442944297C76440044 +33F0:00002F7C61442144214422442244227C24442444244424442444247C74440044 +33F1:0000267C69442944294429442944267C29442944294429442944297C76440044 +33F2:0000267C69442944294429442944267C21442144214421442944297C76440044 +33F3:0000319E4A524A520A520A521252125E12522252225222524252425E79920012 +33F4:0000311E4B124912091209121112111E11122112211221124112411E7B920012 +33F5:0000319E4A524A52085208521092109E10922112211221124212421E7BD20012 +33F6:0000319E4A524A52085208521052119E10522052205220524252425E79920012 +33F7:0000325E4A524A520A520A52125213DE10522052205220524052405E78520012 +33F8:000033DE4A124A120A120A121212139E10522052205220524252425E79920012 +33F9:0000319E4A524A520A120A121212139E12522252225222524252425E79920012 +33FA:000033DE48524852085208921092109E11122112211221124112411E79120012 +33FB:0000319E4A524A520A520A521252119E12522252225222524252425E79920012 +33FC:0000319E4A524A520A520A521252119E10522052205220524252425E79920012 +33FD:0000319E4A524A520A520A520A52325E0A520A520A520A524A524A5E31920012 +33FE:0000311E4B124912091209120912311E09120912091209124912491E33920012 +33FF:00000000000600020002040234E24912481248F231122112393244D744003800 +3400:0440044004400440044004407C7C0440044004400440044004400440FFFE0000 +3401:0000FFFE010001003FF82108210821082288224824282828200820083FF82008 +3402:0100010001F83F000104010400FC100010201020163CF8E010221122161E1800 +3403:0100028004400820101020084004FFFE01000100010001000100010001000100 +3404:01000100010001003FF801002100210041007FFE010001000100010001000100 +3405:0000001000102020102008400440028001000280044008201010200840000000 +3406:001000F81F0010001FF810081FF810081FF810001FFC10042004200440288010 +3407:020002003FE00420042008223022C01E00007FF0006001800600180420041FFC +3408:060001000280044008203018C0063FF80010006001800600180420041FFC0000 +3409:00007FFC01000100010001000100050002007FF0006001800600180420041FFC +340A:010001000100FFFE010001003FF8000000007FF0006001800600180420041FFC +340B:0100010001003FF801000100FFFE000000007FF0006001800600180420041FFC +340C:080008001FFC200041008100117013901D10F11011501122110210020FFE0000 +340D:00FC7F00020821081110102000003FF80010006001800600180420041FFC0000 +340E:020001007FFC0820044003801C70E00E00003FF80010006003801C0420041FFC +340F:00003FFC010001001FF0021004107FFE00007FF0006001800600180420041FFC +3410:10001000FEFC22844488285010202858C58600007FF0006003801C0420041FFC +3411:08001FF0282007C01830E18E0C40030000807FF0006001800600180420041FFC +3412:00007FF8040808503020DFF8100810081FF800007FF0006003801C0420041FFC +3413:0000FFFE00101F90109010901F90005000207FF0006001800600180420041FFC +3414:02000100FFFE00001FF0101010101FF000007FF0006001800600180420041FFC +3415:010001003FF8210821083FF8210821083FF800007FF0006003801C0420041FFC +3416:082008200820FFA0082008207F20002000207F204120412241227F22411E0000 +3417:02083FD00220FFFE02000C703F84C80407FC00007FF0006003801C0420041FFC +3418:010011100920FFFE054009203118C10600007FF0006001800600180420041FFC +3419:00007FFC00001FF010101FF008200440FFFE00007FF0006003801C0420041FFC +341A:7FFC02003FF00410FFFE00001FF010101FF000007FF0006003801C0420041FFC +341B:0840084017FC3080510093F81508110811F800007FF0006003801C0420041FFC +341C:1040144012401040FEF8104810489248544810483848548A928A110A52062400 +341D:11001100F9F8120819E83128D1E81008505020207FF0006003801C0420041FFC +341E:082008207FFC08200FE008200FE00820FFFE10102FE8404483820C0810080FF8 +341F:044004407C7C04403C7804407C7C044004407FF0006001800600180420041FFC +3420:07A0F82048A025207F20022007A2FC2244220C1E00003FF001C01E0420041FFC +3421:200027FC204023F8FAA82AA82AA82A1828402FFC28A029122A0A480247FE8000 +3422:203C17C08244492813F8E01027FE202020A000407FF0006003801C0420041FFC +3423:00803FFE20802FF8208027F0249027F024903FFC20802FF840604380840403FC +3424:204023F8204021F0F91029F0291029F0291029F029102BFA28A2491247FE8000 +3425:100829C8455EB94A11CA7D4A11CA55523D6AE38400003FF001C01E0420041FFC +3426:3BB822083BB82488FFFE10502788C1061FF0010003003FF001C01E0420041FFC +3427:0080108008800480048000807FFC01840288049008803080C080008002800100 +3428:00007CFC0404282810100808FEFE121214141010101010101010101050502020 +3429:24242424242424247E7E242424242424FEFE2424242424242424444444448484 +342A:020001000100FFFE0000010021082108210821083FF80288044008203018C006 +342B:020001000100FFFE00000820044022882108228824482828200820083FF80008 +342C:02000100FFFE0400082010103FF810080000111011101110211021124112800E +342D:02000100FFFE000000003FF82008200827C82448244827C8200820083FF82008 +342E:02000100FFFE1010244844441FF004401FF004407FFC04900C603518C6060400 +342F:01007FFC08201FF010101FF000001FE001007FFC09203FF8C8260FE008200FE0 +3430:080009FC0904110411043104310451049104110411041104110411FC11041000 +3431:0100010002800440082010502188C606382000C007003818006003807C000000 +3432:0840084008401040104037FE30405040904010A010A010901110110812041402 +3433:080008000BFC10901090309030905090909010901090109211121112120E1400 +3434:08800880088010FC110431043284544890281010101010201040108011001600 +3435:08000BFC08401040104030403FFE504090401040104010401040104011401080 +3436:080008000BFC120412043204320453FC92041200120012021202120211FE1000 +3437:08000FF00810101012103210321053FC90041004100417F41004100410281010 +3438:08800880088010FC1104310832405440904010A010A010901110110812041402 +3439:0900090009FC1200140031F83000500093F8100810081008100A100A10061002 +343A:1120112011202220222066206620AA2022202250225022502248228822842302 +343B:082008200820102013FE3222322252229252124A128A130212021202120A1204 +343C:080808680B88108810883088308853FE90881088108810881108110812081408 +343D:08000BF80A081208132832A832A85248924812A812A8132A140A140A18061002 +343E:080008000BF810001000300037FC5120912011201120112012221222141E1800 +343F:081008780BC01040104033F830405040904017FE104010401040104011401080 +3440:084008400840104017FE3040304050A090A010A0111011101288124814441802 +3441:084008400A4812481248324833F8504890401040144414441444144417FC1004 +3442:100017FC10402040204067FC6444A44424A42494251426042404240424142408 +3443:1220122012202420257C69246E24A2242424242429242F242144204420942108 +3444:080009F8090811481128312837FE520892481228122813FE1008100810501020 +3445:09000900090011FE1240324034405040907C1040104010401040104017FE1000 +3446:08000BFC0A0412041204320433FC5090909010901090111211121212140E1800 +3447:0880088008F811081210342033FC50049004100411FC10041004100413FC1004 +3448:08400840084017FE108031203120522093FC1020112811241222142210A01040 +3449:100017F81408240827F864886488A4E82528252826A8244A244A288A29063202 +344A:08400820082017FE109030903090529492921292149210901110111012501420 +344B:10A010A010A020A027FC64A464A4A4A424A427FC24A424A424A424A427FC2404 +344C:08000BFE0A00120013FC3220322052F892201220122013FC1200120013FE1000 +344D:1040104017FC2040204063F86040A04027FE20E0215021502248244428422040 +344E:1000124812482490249062486248A00020402444244424442444244427FC2004 +344F:084008200BFE120214143010301053FE90101110109010901010101010501020 +3450:084008400840107C1040304037FE500090401040125012481444184411401080 +3451:08400840088013FC12043204320453FC9204120413FC12041204120413FC1204 +3452:01000280044008203018CFE6010001001FF0111011101FF0028004401830E00E +3453:082008400888110413FE3042304057FE908010FC114411441228121014681186 +3454:08000BFE0820104011FC31043104512491241124112411441050108811041204 +3455:082008200A221222122233FE3040504090FC1104128414481050102010C01700 +3456:111011101110221022FE66926692AA92229222FE229222102210221022102210 +3457:088009000BF8120813F8320833FA520A920C17F810181028104811881E281010 +3458:1014101210102FFE201062906292A2922FD2229422942288228A249A24262842 +3459:10001FFE14802490249067906490A490249027902490249224D22F92208E2080 +345A:100017DE12522252225467D46258A25422522FD22252225A2254245025502890 +345B:084008400FFE1040104037FC3444544497FC104010E0115012481C4610401040 +345C:1208121C126022402FC06240627EA2C823482E4822482248224822482A882508 +345D:100017FC1040204023F860406040A7FC211021102FFE21102110221022102410 +345E:104010401244224424A861106208AC06211021102FFE21102110221022102410 +345F:0808081C09E01100110031FE311051109110111017FE10001090110812041402 +3460:08800AFC0AA412A412A8329032A850C69020102011FC10201020102013FE1000 +3461:100017BC14A424A424A467A464A4A4A424A427A42434252824A0256026202020 +3462:09000900091E139211123112311257D291121112121A129417D0125010101010 +3463:091009100910111017BC31103110533893B81554155419921110111011101110 +3464:111011101FFE21102110600067FCA4442444244427FC24442444244427FC2404 +3465:08000BF80A0813F8120833F83100510093FC1494189411241244148411281210 +3466:084008200BFC1204120433FC32005228922413FE122012501250148815041A02 +3467:103813C0104027FC20E061506248AC4623F02020204027FC2040204021402080 +3468:08000BF80A08120813F83100310053F8944010401FFE104010A0111012081C06 +3469:08000BFE0A521252125233FE3020504090FC1104128810501020104011801600 +346A:084008200FFE11081090306031985606910811F8110811F81108110812081408 +346B:0840084008A011101288344633F0501090A01040114815041514151418F01000 +346C:12101210121022102F7E65106510A510257C29442544224422442544257C2844 +346D:100017FC1444244427FC64446444A7FC200020002FFE22082208220824082808 +346E:08000BFE0A22102013FE302031FC512491FC112411FC102013FE102010201020 +346F:08000FFE0840108013FC3204320453FC920413FC1204120413FC100011081204 +3470:090009F80A0813F0101037FE30805144966810B01128166810A4112216A01040 +3471:08000BF80890106017FC30A4312852209460104017FC10E0115012481C461040 +3472:104010401FFE2040204067FC6514A4A425F42444244425F42444244424542408 +3473:090009000BFE1442125233F230825114960813FE14421A5213F2108211141608 +3474:0BF8080809F8100813F8300037FC544493F812481258104013F8111010E0171E +3475:0820081009FE110011203520333C51509190131015FE11101128122812441482 +3476:0900090009FC120015F8300033F8508892A811C817F8108A11CA16AA10861082 +3477:11101212145427D82010601267D2A44E244027D22454245827D024522552248E +3478:084008400FFC104013F8320833F850009FFE100813E8122813E8100810281010 +3479:0100028004400FE03118DFF611101FF011101FF000000FE008200FE008200FE0 +347A:08A0089009FE132015FC312031FC512091FE110013FC1088109E1102120A1404 +347B:1080104017FE2402289460506524A54A28FA2300204024442444244427FC2004 +347C:10101010103C2FA42AC46AA86A90AFA82AC62A802ABC2AA42FA428A4203C2024 +347D:1040144412482FFE280263F86208A20823F82040204027FC204020402FFE2000 +347E:084008FC09081650112030C033205FFE900013FC100013FC100013FC120413FC +347F:124814901248200023F8624863F8A24823F8204027FC20E0215022482C462040 +3480:1080104017FC211020A067FC6444A5F4244425F42514251425F4240424142408 +3481:100017FC1444244425F4644467FCA51424A425F4244427FC2444244427FC2404 +3482:090809080FFE1108104433F43048505097FE108011FC130415FC190411FC1104 +3483:08140BFE081013D0101033D0301053D0925013D0125013C8124A13CA11861242 +3484:0910091409D21250127E3550309052A89128114412441482100812A412521452 +3485:08200BFE084010F81348303033D0503C91C41048103013C410A8119016A810C6 +3486:084008A0091816E6100033F8320853F8900017BC108414A4129414A412941108 +3487:1100110013FC26A82AA862A867FCA2A822A822A82FFE200022A8225424542000 +3488:10081788108821102FDE649464A4A79424942794249424C827882C9420A420C2 +3489:08400A48095017FC140431F03110511091F0104017FC10E01150124814461040 +348A:100017BC129426B42AD464A465ACA8402108210825A8252C252825A82E7E2000 +348B:14801482149C2FD024906790649EA794249424942FD42014251428A430242044 +348C:1110155415B8291022A864446000A7FC240429E821202120212022222422281E +348D:088009100BF8121014A437BC3080511093E01040108817FC1044124815441080 +348E:08000BF8088017FC111032083CA650A097BC10A013B810A017BC10A010A010A0 +348F:084008200FFE149213FC309033FC509097FE1108120414621010118010601010 +3490:0910091009DE12A81444310031FC520495F4111411F4111411F4111410281010 +3491:100017FE14282624257E644864C8A47E2648257E24482448257E264027FE2000 +3492:10A014A412A820A027FC611060A0A7FC204023F8204027FC215022482C462040 +3493:10101410127C201020FE60446628A2FE2210227C221022FE2210221025FE2800 +3494:100017FC14A424A427FC620063FEA4422BFA224A23FA2052207A278A22142008 +3495:1040102017FE20282224627E64C8A748217E224824C82F7E21482248247E2840 +3496:1110111017FC211023F8624863F8A24823F8204027FC2444245425F42414240C +3497:111017FC111021F0211061F06110A7FE24022BFC211023F8204023F8204027FC +3498:100017BC15142794248867886514A7A22080204027FC2000220821102FFE2000 +3499:11081110123E22A224BE6F22613EA20824BE2FAA20AA202A2AAA2AAE28082008 +349A:103E17C01244212823F8604067FCA00023F8200823F8200823F82544252A28FA +349B:100017BC108424A4229464A46120A21027FC2A2023FC222023FC222023FE2200 +349C:09400A4C0A641244134C326432A453AC92A412A417FE10001110110812041404 +349D:09080FFE0908100013FC3294329453FC902813FE1220132412A81292142A18C6 +349E:08200A220BFE109011FE331035FE511091FE111011FE110013DE125212721206 +349F:104017FE100023FC224063F86240A3F8224023FC2004255420A823102D482186 +34A0:110011BC152427A824906AA86146A2A027BC20A023B820A027BC20A02FFE2000 +34A1:11821E3C10882A902522643C6788AA12223E2F8822082AAC2AAA2BCA2EA82090 +34A2:104010A0111022082DF660006EEEAAAA2EEE20002FFE29222FFE2922292A2804 +34A3:1040102017FE24A824FE6550677CA550257C2550257E254028A42A8A328A2478 +34A4:0BFC090809F8110811F8310E37F8500897FE1294139C1294139C12D617BC1084 +34A5:115013F8155427FC255467FC6554A7FC200027FC200023F8220823F821102FFE +34A6:17FC144417FC244427FC60006FBEAAAA2FBE2AAA2FBE2040204027FC20402FFE +34A7:141812141F90253E2AA86DE868BEAFA822282FBE2AA82AA82BA828BE2AA02920 +34A8:104015F6191229B22D5669B26912ADF620802FFE220825F4291221F0210420FC +34A9:11F0121013E0202027FC61886650A1A8266421A022482FBE2AAA2FBE228A2FBE +34AA:03800C603EF8E8A63EF822883EF828A03EF8100011FC5CA0515450B85D54E0B2 +34AB:00000FF8080008000FF008000800FFFE0440044004400440084408441044603C +34AC:00007DFC002000200020FCF8282028202820282029FC28002800480247FE8000 +34AD:00003E7C22442244224422443E7C1428142814281428144A254A268A44868100 +34AE:000001FE7820004000A20334FC5828942B34285228922B502822480247FE8000 +34AF:108813FE9088540059FC10A8FCA82BFE28A828A829FC28202BFE4C2048208020 +34B0:060001000280044008203018C00600001FF0010001000100010001007FFC0000 +34B1:060001000280044008203218C20607F00810141022200140008003001C00E000 +34B2:060001000280044008203018DFF61010101010101FF01010101010101FF01010 +34B3:00007FFC4104410441045144492449245554638C410441044104410441144108 +34B4:060001000280044008203118D116111011101FF001002108210821083FF80008 +34B5:040008003FF8200820083FF8200820083FF80000000004400820101020084004 +34B6:04400440082010102108C2061FF01010101010101FF01010101010101FF01010 +34B7:00001FF0101011101110111012901450101010107FFC00000440082010102008 +34B8:0820042004407FFC020006001908629004A018C061A002980C863080C2800100 +34B9:10101010FEFE10107C7C44447C7C44447C7C44447C7C4444FEFE282844448282 +34BA:00007FFC4004482444445FF440044884488449444A2448044FF4400440144008 +34BB:7FFC40045FF440045FF400001FF010101FF010101FF010101FF004421842E03E +34BC:08200820FFFE082008200FE001007FFC4104514449245554638C410441144108 +34BD:3FF820082FE820082FE8111009207FFC0400FFFE10102FE8C82608A0084807F8 +34BE:00003FF820082FE820082FE820401040FEFE21203CAC24F427A444AC54A2887E +34BF:3FF820082FE820082FE808007F281424497E55C87F7E08487F7E55485D7E4340 +34C0:00007FFE40028004020002000200020002800240022002100200020002000200 +34C1:000000007FFE4002844408201010000000000000000000000000000000000000 +34C2:00007FFE400280243E2001FE00447E4414C814281410146A2586240243FE8000 +34C3:00007FFE4002900408007F1C00E03E2000203E3E01E03E22222222223E1E2200 +34C4:101022107F10421094FEF79208923610C92830A8C428192862480C4A308AC106 +34C5:0000400023FE202000200820082010201020E020202020202020202020A00040 +34C6:0040404020A020A001100A080C0611101120E140218021002104210420FC0000 +34C7:0010407827C0204000400840084017FE1040E0A020A021102110220824040802 +34C8:0000400027FE204000400880088011F81308E508290821082108210821F80108 +34C9:0010407823C02040004007FE104010402040E3F8220822082208220823F80208 +34CA:000047FC2404240405F40404140415F42514E514251425F42404240424140408 +34CB:011041102110211007FC0110111011102110EFFE200021102108220824040804 +34CC:0040404020A021100208040613F810402040E04023F820402040204027FE0000 +34CD:00804040204027FE00800110120817FC2124E1202120212022222222241E0800 +34CE:000043F8200821F800080BF8080017FC1404E3F02110211020A0204021B0060E +34CF:000047FC240424A40514060C140415F42514E514251425F42514240424140408 +34D0:0040404023F82040004007FC111012082444E04023F820402040204027FC0000 +34D1:0040404027FC204000400FFE111010A027FCE04020402FFE2040204020400040 +34D2:2040104004780BC47044103C110012800C603118C10609901148214805000200 +34D3:004040402FFE2040004007FC151414A425F4E444244425F42444244424540408 +34D4:010842082788248807BE0488178814C824A8EFA8218822882488288822A80110 +34D5:00144012201027FE0410041017F214922492E5B426D42488254A293A2A261042 +34D6:000047FC244427FC044407FC124812482FFEE248224827FC20402FFE20400040 +34D7:010047BC21142394011407A4114C10802110E3E0204827FC2044224825440080 +34D8:00003FF820082FE8210823C824482A88210826083BE8210A2FEA414A41269FF2 +34D9:0200010001001FF040444844448442844104428444444824502440047FFC0004 +34DA:000400047F04082408240824082408240824082408240F24F004400400140008 +34DB:000001FC00447E440844084408440844084408440E84F0844104010402280410 +34DC:0800080010FC102422244224FC2404240824102424244224FE44424400940108 +34DD:22042204220422247F24222422242224FFA42224222422242204420442148208 +34DE:0800080008FC7F240824082408247F24082408240824FFA40844084408940908 +34DF:0404040404043FA424A4252424243FA420A42924252422242504488490940008 +34E0:08040804080408240FA40824082408247F24412441244124410441047F144108 +34E1:200420043F04482488240824FF24082408244924492449044F04790401140008 +34E2:100410041F042124612492240C2412242124C0A43F242124210421043F142108 +34E3:08040804140422244124BEA4002400243E2422242224222422043E0422140008 +34E4:080408040804FFA4082408247F24002400247F244124412441047F0441140008 +34E5:08044904290429242A240824FF240124012401247F24012401040104FF140108 +34E6:0004FFC40804082410247F244124412441247F2441244124410441047F144108 +34E7:0804080414042224512488A47E240224042408247F244124410441047F144108 +34E8:080408040804FFA408242A242A242A245D2488A4082414241204210441148008 +34E9:100410041F0421244224BFA424A424A43FA424A424A43FA42484448442948108 +34EA:100008007EFC422442247E24422442247E244024482444244A44524460944108 +34EB:08040804FFC41224212440A4BF241224122412247FA412241204220422144208 +34EC:080449042A047F2408241024FFA42224412480A47F241124110421044A148408 +34ED:00047F0441047F2441247F2420247FA488A448A454A440A47E84008405140208 +34EE:00043F84248424A42EA424A43FA420A42EA42AA42AA42EA42084408442948108 +34EF:2484248449049224492424A424A400247FA448A448A47FA4488448847F944088 +34F0:0004FF84080408243E24AAA4AAA4BEA4AAA4AAA4AAA4BEA480848F84F0940008 +34F1:0804140422044124BEA4002478A44AA44AA47AA44AA44AA47A8448844A945908 +34F2:080204023FC2204220523FD2201220123FD2355235525FD255425542944A10C4 +34F3:00083E0822483E4822483E480048FF48084808482F082828281058004FFE8000 +34F4:0004FF84080410247F2455245524552455244B240824FFA41404220441148088 +34F5:0004F784948494A4F7A400247F240024FFA4202440247F24010401040A140408 +34F6:20042F04F504252475242524F5242924232408240824FFA41404220441148088 +34F7:080410047F0441247F2441247F2441247F240824FFA41C242A04490488140808 +34F8:00047704550455247724142414247724412441247724142414041F04F0144008 +34F9:00047FC4440454A4652444244A24512460A4442454A4652444044A0491142088 +34FA:08040F8408047FA448A44F2478A447A4482444247FA441245A0444048A143108 +34FB:0004FF84948494A4FFA400240024FFA4082408244F24482448044F84F8140008 +34FC:08040804FF841C242B24C8A414242224492488A449242A244904888428141008 +34FD:0804490449047F2410240824FFA480A43F240024FFA408242A044904A8941008 +34FE:00027FC240427FC242124A9247124A9250524A124FD252124202BFE2820A0204 +34FF:070478040804FFA42A24492494A42224492488A449242A244904888428141008 +3500:00047F0441047F2441247F240824FFA400247F2441247F240804490488941808 +3501:050472041284512421245EA480A43F24212421243F2421241204078478142008 +3502:0404248415047FD4151424944454209420943BF44894AA8413E4208440948088 +3503:108010F825107BFC112425247DFC0102550294FE00007FF80408080810506020 +3504:00027FC20A027FC24A524A527FD2041224921512FFD20E1215022482444A0404 +3505:04023F8204827FC204923F920412555275D244527FD2445275C25542554A8444 +3506:0004F7842104A524F7A46324B5A421247FA440A440A47FA4408440847F944088 +3507:0904F6441284A12440A4F7641524152479A440248F24F1241504120455142908 +3508:22042204FF84222414241424F7A414241424772414241424F784140414141408 +3509:00027FC240427FCA400A5FCA420A5FCA524A5FCA420A7FEA62A26FA2A0AA2064 +350A:0402FFE200027FC240525F5251527FD200123F9220923F9220823F82000AFFE4 +350B:00047A0452047BA44A247B2454A478A400247F245524552455045784FC140008 +350C:FC044B8478844AA479244D24FAA40CA407A4F82428A44D241A042904C8940808 +350D:42047BC4A50410A47FA440A47FA440A47FA440A47FA42124FFC4210441148108 +350E:52107EFE28447E28A2FE3E1020103E7C22103E1000007FF80408080810506020 +350F:00027FC210023F8A508A108A1F8A000AFBEA208A79EA492ACB22492279EA4924 +3510:210221023DE2528288527FD20A127BD20A123B920A127BD20A020FC2F80A4004 +3511:0820FFFE28207DFC44887C5041FE7C2045FC7C2000007FF80408080810506020 +3512:44427FC212023FC26212BFD222123FD222123FD220127FD251426EC24A4A4EC4 +3513:04200E207820082008FC08240824FF2408240824082408440844088409280A10 +3514:100010007E7C1244124412442244227C4A4484001FF02008200820081FF00000 +3515:202020203F20402080FC7E24002400247C240424052405240344014400A80110 +3516:100010007E7C1244124412442244227C4A44840000003FF00010001000100010 +3517:1210121012107F9012FE12927F92521252127FD212521252235222A2422A8244 +3518:102010209220922092FC9224FE24102410249224922492449E44F28401280210 +3519:4220242000207E2024FC242424242424FF242424242424242444444444A88510 +351A:04200E203820082008FCFF24082408243E2422242224222422443E4422A80110 +351B:010001007FFC01001FF000001FF0101010101FF002007FF80408080810506020 +351C:02200F20F020012091FC4A240024FE24042408240F24F8444844088429281210 +351D:0010FF9008100810FF9088FE8892CC92AA92AA92DD929992889288A28AAA8144 +351E:02200F2078200820FF7C08242A242A24EBA42A242AA46B24AA44084408940908 +351F:082028203EF8482808A83E48084A0EAA7926020202007FF80408080810506020 +3520:00207E2042207E2042FC7E2420247F2489244924552441247D4401440AA80510 +3521:082010207F20552049FC552441247F2400244424772444245544664444A80110 +3522:108010F825107BFC112425247DFC0102550294FE02007FF80408080810506020 +3523:00083F8824883F8824BE3F8A000AFBEAAAAAAAAAFBEAAAAAAAB2FBF2002A0044 +3524:102008207F20412086FC782449242A24FF242A244124BE242A443E442AA83F10 +3525:0010FF10A510A510FF7E44129492F7120492F3929012F4929712F42294AAB3C4 +3526:2210FF9008107F10107EFF9222124912BE9222123E1222123E9225222A2A3144 +3527:08100F9008107F9048FE7E1248925F9255125F1255125F124012BFA22AAA7FC4 +3528:100010003FFC4524BDC405141CF464041FC410441FC410441FC4104411541088 +3529:100010003FFC22045FC482043FE4040408841FC400041FC4154415443FE80010 +352A:100010003FFC2204420483F402043FE42AA42524326425242AA43FE420280010 +352B:0400040004000400FFFE0480048004840488089008E0108210822082407E8000 +352C:203021C03E0820081FF800001FF010101FF010101FF00100FFFE010001000100 +352D:000043F84208420843F87A08420843F8400047FE40404A4052786240454008FE +352E:51105112FA5453D870102012FBD2AA4EFA4023D2FA542258FBD0225252528ACE +352F:00007FFC400047F044104410480C500047F044104410441047F040007FFE0000 +3530:00007FFC4220422043A044B044A844A44AA4512041204220442048207FFE0000 +3531:00007FFC400042804CB848884EB848884FF8414042204410580840007FFE0000 +3532:00007FFC422045204AA05F7869284F2849284F28482A4A2A4D4648807FFE0000 +3533:00007FFC420045384AA85F6869284F2849284F2A482A4A4A4D4648807FFE0000 +3534:00007FFC40004FF848884FF848884FF842204FF842205FFC441048087FFE0000 +3535:7FFE40005E7852485E7851444F3C42204FF8422042205FFC4220441048087FFE +3536:7FFE44207FBC4A647F9840665F7C51105FFE51445F7C44447FFC442844447FFE +3537:00007FFC40004FF8408040804FF8488849484A284C284808482848107FFE0000 +3538:7FFE4000403E4FC0487C48404BFE4A424A784AC44A3C520054F06494490C7FFE +3539:104010401040104011FC1044FE44104410441084108410841104110412281410 +353A:0100010001007FFC0100110011201020FFFE102010201022100210020FFE0000 +353B:00007FFC010003000560191861040100000001000100FFFE0100010001000100 +353C:10A01090FDFE13201DFC3120D1FC112051FE210000000100FFFE010001000100 +353D:0100010001FE010001003FF82008200827C82448244827C8200820083FF82008 +353E:00003FE02020202020202020202020202140208020002004200420041FFC0000 +353F:0000FFFE10101010101010101010101010101070119016101810001000100010 +3540:010001003FF821083FF821083FF800001FF0101010101052102210020FFE0000 +3541:010032000C7C124469440844FFC410442444244448448A5411483F4011400040 +3542:00003FFE208020802140222024102908308620802FF020102020402040408080 +3543:00003FFE2000200027FC21102110211021102FFE211021102210421044108810 +3544:00003FFE200020002FFC20802100221024202FC020802100221044084FFC8404 +3545:00003FFE2000200027FC2444244427FC2444244427FC24442040404040408040 +3546:00003FFE2000204020402FFE20402040204027FC240424042404440447FC8404 +3547:00003FFE20002080204020402FFC20002408220822102110212040005FFE8000 +3548:00003FFE2080204020003FFE20802100228426882A5032202210428843068200 +3549:00003FFE208020802140222024102BE83006200027F024102410441047F08410 +354A:00003FFE2000204820442FFE204027FC244427FC244427FC2444444444548408 +354B:00003FFE2080214022202410280837F6208020802FF82080249042A05FFE8000 +354C:00003FFE200027F8240827F8240827F820002FFC20103FFE2410421042508020 +354D:00003FFE22802240224027FC24402C4037F82440244027F82440444047FC8400 +354E:00003FFE208020802FFC20803FFE220024082FFC20002FFC292449247FFE8000 +354F:00003FFE20003F8820482F282908294829282F0E20782908260843885C088808 +3550:00003FFE2100263824082738240827F8220027FC280425542554480440288010 +3551:00003FFE220422043FC422042FBE20042FA428942F942884250443845C148808 +3552:3FFE240822103FFE20802FFC20803FFE20A02F2822243FFE42285F12822A06C6 +3553:00003FFE200027FC255424E427FC204027FC20402FFE24A4285247FC40408FFE +3554:3FFE20103F102AFE2E102AFE2EAA2AAA3EFE22003EFE2A205E144AA2BF280218 +3555:0100010002000420081010083FFC10040100010002000420081010083FFC1004 +3556:0400082010103FF80810102024487EFC02040100FFFE054009203118C1060100 +3557:41002210FF9008107F200820FFA0104010483E8442FC84040800140023FEC000 +3558:0400082010103FF80810102024487EFC010006C01830E10E0920111025080200 +3559:1080108020F04510FE2029FC4524A3243D2445FC4450A858109428924512820E +355A:00003FF01010121011200920082044402440228001000280044008203018C006 +355B:00003FF000201E40018006601818E0043FF010100820044003800C603018C006 +355C:010001003FF8210821083FF8010001003FF010100820044003800C603018C006 +355D:010001007FFC010001001FF0101010101FF000003FF00820044003801C70E00E +355E:00003F00217C21243F242424242424283F283528351055105528972804440482 +355F:080008000F0008FC08447F445544554455287F28551055105528512845444282 +3560:4140212003FE0A2017FCEA2023FC222023FE02003FF00820044003801C70E00E +3561:08000F00087CFFA480A47F2414242228492816282110FE10222822283E442282 +3562:10001E00107CFF4481447E4400447E2842287E2842107E1042287E2824444282 +3563:00400840082010201010200840049FF2101010101010101010101FF010100000 +3564:01000100790049004BF04910491049104910491079104A1202120412080E1000 +3565:004000407C404440444044404440444044A044A07CA045100110020804040802 +3566:00001FF01010101010101FF0010001000100FFFE02800440082010102008C006 +3567:000001FC790449044904490449FC490449004900790049000200020004000800 +3568:000001F0791049104910491049904950495049107910491202120212040E0800 +3569:0020002078204BFE48204820482049FC4820482078204BFE0020002000200020 +356A:0040004078404BFC4A444C484840484048A048A078A0492001220222041E0800 +356B:0080004078404FFE49004900490049F849084908790849080208020804500820 +356C:002001207920491049104A484A484C444882488079104908020807FC02040000 +356D:001000787BC048404840484048404FFE484048A078A048900110010802040402 +356E:0020011079084A044A044C104910491048A048A0784048A00110020804040802 +356F:0100010001007FFC410442844444482457D444444444444447C4444440144008 +3570:0008003C79E048204820483C49E048204820483E7BE04820002200220022001E +3571:00900088788848804FFE48A048A048A048A048A07920492201220222021E0400 +3572:00400040F040904097FE904090E090E091509150F24894440842004000400040 +3573:00000008790848884A524A524A224A224A524A927B0A4A0A020203FE00020000 +3574:000000007BFE4A024C04480049F04910491049107910491202120212040E0800 +3575:000003FE7820482048204820482049FC48204820482078204820002007FE0000 +3576:000003FC78404840484048404BF8488848884888788849080108010807FE0000 +3577:00200020784049FC490449044904490449FC4904490479044904010401FC0104 +3578:00800040784048004FFC480048084A084A08491079104910012000200FFE0000 +3579:00400048784448404BFE4880488048FC4944494479484A500220045008880306 +357A:00007CF84488448844887CF800000000FFFE080010001FF00010001000A00040 +357B:0200010000007FFC010003000D603118C10401001FF01010101010101FF01010 +357C:0100010079FE4A024A024C8A48524A224A524A8A7A024BFE0002000200140008 +357D:0008008878484A284A284A084A084A084A084A084A107A984B24022400420082 +357E:0100010009200910110821044104000000403E4422482270224022423E42223E +357F:00701F8001000100FFFE054009203118C0061FF010101010101010101FF01010 +3580:004000407BF848484FFE48484BF8484048404BF87840484007FC004000400040 +3581:00080190786048984B04484048404FFE48804890791049200248048409FC0084 +3582:004000407BF84A484A484BF84A484A484BF848407848483000640194060C0004 +3583:0008003C7BC04A004A004BFE4A004A004A004AFC7A844A840484048408FC0084 +3584:0104012479244924492449244BB44B6C4D244924792449240124022402040404 +3585:00280024782448204BFE4A204A244A244A244BA87A284A100212042A04460882 +3586:00500050785048504BFE4A524A524A524A524BFE7A524A520252025203FE0202 +3587:000003FE7820482048404BFE4A524A524A524A527A524A5202520242020A0204 +3588:02083FD00220FFFE02000C703F84C80407FC00001FF01010101010101FF01010 +3589:002000207850488849244A224C204920493C492079204920012007FE00000000 +358A:000003FC7804480449FC480448044BFC480848084FFE79084888008800280010 +358B:0100028004401830E44E0440044004400840104000007C8844B044C47C84447C +358C:0880088013F03090509090921112120E140000003E442258226022423E42223E +358D:0040044002401240084009FC7E400040004000003E442258226022423E42223E +358E:00807C8844B044C444847C7C0100028004401830E44E04400440044008401040 +358F:000001FC7904490449FC4904490449FC4820482079FC48200020002003FE0000 +3590:7CF8448844887CF800003FF002100210FFFE021004103FF0081010002000C000 +3591:0014001278104FFE48104A904A924A924FD24A947A944A88028A049A04260842 +3592:0108008878904BFC482448244BFC4A204A204BFE786248A2012A022404200020 +3593:010001F87B084C90486049984E4648404BF848407BF8484007FC004000400040 +3594:000001FC7820482048204BFE4850488849044AFA7C8848880088008800F80088 +3595:0040002079FC4800488848504BFE48204820482079FC48200020002000200020 +3596:020001003FF808200440FFFE010001003FF8010001003FF8200820083FF82008 +3597:004002487A484A484BF8484048A049104A884C4678404BF00010002000200040 +3598:000003FC7A004A004AF84A004A004BFC4AA04AA47AA84A900290048804A408C2 +3599:100010007E7C124412441244227C4A44840000003E442258226022423E42223E +359A:0810081017FE30105210911011101050102000003E442258226022423E42223E +359B:010001007FFC010001001FF0101010101FF000003E442258226022423E42223E +359C:02000100FFFE00001FF0101010101FF0000000003E442258226022423E42223E +359D:010001003FF801000100FFFE09203118C10600003E442258226022423E42223E +359E:000001FC79044904490449FC482048204BFE4A227A524A8A030A0202020A0204 +359F:001C03E0F08492449148911097FE9402900093F8F108911000A0004001B0060E +35A0:002000207BFE4850488849044AFA480048004BFE782049240122022200A00040 +35A1:00800040F7FE91209120923C9244966492949348F24892300220025002880306 +35A2:00800040EFFEA800A890A890AA90AA92AADCAA90EA90AA92129212D2270E0000 +35A3:0040002079FC48004908489048004BFE4800480079FC49040104010401FC0104 +35A4:000001FC780848104A224AAA4A724A224A724AAA7B264AA20242020203FE0002 +35A5:000007FCF404943495C49444944497FC944494E4F554964C0444044407FC0404 +35A6:00400040F7FC904093F8924893F8924893F89040F0E0915002480C4600400040 +35A7:001C03E07A204BFE4A204A924B0A4A0649FC4904790449FC0104010401FC0104 +35A8:000001F87808480849F8480848084BFE48204A22797448A80124022200A00040 +35A9:00000FC0F4BC94A494A497A494A494A897A894A8F49095D00EA800A800C40082 +35AA:0014001278104FFE481048104BD24A524A524A547BD4480800EA071A02260042 +35AB:0020002079FC482048204BFE488849444A4248F879884A500020005001880606 +35AC:0080031C7A044A044B9C4A044A044BFC480048007BF849080090006001980606 +35AD:000003FCF040904097FE90A09110920894469040F04892640252045201400080 +35AE:00400040F0A0911092089DF6900097FC94A494A4F7FC94A404A404A404140408 +35AF:3FF820082FE8200827C8244827C82028201000003E442258226022423E42223E +35B0:00807C8844B044C444847C7C00003FF820082FE8200827C8244827C820282010 +35B1:0100FFFE088010F83148D328149010601198160600003FF8200820083FF82008 +35B2:10001000FE7C2244444434440844147C2244C0003E442258226022423E42223E +35B3:1080088047FC21100A1011A070601090130800003E442258226022423E42223E +35B4:011001107BFE49104880488049FC49544A544C9478A449240244008401280210 +35B5:000001F87908490849F8490849F8490849F8490879084FFE0000011002080404 +35B6:000007FCF0A090A097FC94A494A494A497FC9040F04097FC004000400FFE0000 +35B7:000001FC7904490449FC4904490449FC48004BFE78204920013C012002A0047E +35B8:0040007C78404BFE4A424A784BC04A444A3C4A007AFC4A8003FE0480048008FC +35B9:0010011079084A044DFA488849084A284C104BF87AA84AA802A802A80FFE0000 +35BA:00400040F7FC904093F8908097FC9110920895F6F110911001F00110011001F0 +35BB:000003F8F090906097FC90A49128922094609040F7FC90E0015002480C460040 +35BC:008800887BFE4888488848F84888488848F848207BFE487000A8012402220020 +35BD:000003FE7820484049FC4904490449FC490449FC7904490401FC000000880104 +35BE:00007EFC428442847EFC10100820FFFE0100210821083FF8040808003000C000 +35BF:00000FDEF4929492949497949498949497929492F49295DA0E94009000900090 +35C0:00400040E148A148A94AAA52AAD6AB5AA94AAA52ED6AAF7A094A08420FFE0002 +35C1:000003DE7A524A524BDE480049FC48004BFE4880790049FC0004000400280010 +35C2:00200020792449224A2A483048C04F0049FC490479FC490401FC010401FC0104 +35C3:000003FC7A044BFC4A204BFE4A104A8A4B0648007BFC4A0403FC020403FC0204 +35C4:000003FC7A944A944A944BFC488048404FFE488078F848880108010802280410 +35C5:0100013C79244FE44924493C49244BA44AA44ABC7AA44AA403A4004400540088 +35C6:008800887BFE488848F8482049FC4924492449FC78204BFE0020002000200020 +35C7:000003DE7A424A424A424BDE4A004A3E4BD24A127A144BD40208021402240242 +35C8:000003FC788848504BFE4A224BFE4A224BFE4A2278404BFE0042008201140208 +35C9:08007F7C08243E2408447F54088804000FE0144003801C70EFEE08200FE00820 +35CA:00003EF822882288228822883EF8000000007EFC42844284428442847EFC4284 +35CB:0080008079FC4A044C084BFE4A004A804AFC4B207A204BFE0420045008881306 +35CC:0040002079FE49024A0449FC4840488849FC4824782049FC0020002003FE0000 +35CD:003803C0F040904097FC91509248944693F89208F20893F80208020803F80208 +35CE:02000200F7BC92A492A494A495BC9840904097FCF0E091500248044408420040 +35CF:000003FE78104820486848A44B22482048004BFE78204920013C0120012007FE +35D0:004000407BFC484048A049104A884C4648004BF87AA84AA802A802A80FFE0000 +35D1:010003BCEE10A210A23CAF90A210A23CA210AF90E27EA2100210021004100810 +35D2:00800040F7FE900093F892089208920893F890A4F12893100510094801860100 +35D3:00100420F2F89288908890F89E80928092FC9284F28492FC0284050008FE0000 +35D4:0040007C78404BFE4A424A784BC44A3C4A404A207BFE4A880250042004580986 +35D5:008800887BFE488849FC48884BFE482049FC492479FC492403FE010401140108 +35D6:003C03C078444A244928490048404B9C4A044A047B9C4A040204020403FC0204 +35D7:00407C8045FC452445247DFC212421447DFC2490251027FE4410441094100810 +35D8:002800247BFE482049FC492449FC492449FC492478084BFE0088004800480018 +35D9:0080008079FC4A44495449F4488449284A9049FC7A444D5401F4008401280210 +35DA:000007FCF0A090A097FC94A494A497FC90409040F7FC90E0015002480C460040 +35DB:02100210F3DE95289884903893C09040904097FCF04090A000A0011002080C06 +35DC:00800040F7FC9080910893F09060918497FE9002F7FC944407FC044407FC0404 +35DD:01040084788848004BFE4820482049FC482048207BFE480002A4025204520000 +35DE:000800087788527E524A544A57485D7C55545554755457540548008801140022 +35DF:2080104087FC4040104023F8E040204027FC200000007C8844B044C47C84447C +35E0:084008407E8413FE220214FC0884148462FC00003E442258226022423E42223E +35E1:0440FFFE0440100027F86110A13C21042214240800007C8844B044C47C84447C +35E2:01C8070871085FE8511E57CA554A57CA554A57CA710A57CA011201D20E2A0444 +35E3:02A802A877FC52A852AA54E6580057FC5444504073F852480248024802580040 +35E4:002800243FFE2220232422242FA822182A92522A464680820FF808080FF80808 +35E5:0200011E77D2501257D4545457D8501457D25092711251DA0714011005100210 +35E6:00101F20EACEAAAAAEAAAAAAAAAAAEAAAAAAAAAAEBEAAEAC1A28024802480288 +35E7:004000207BFE4A8A49044BFE4840488849FC4824782049FC0020002003FE0000 +35E8:00007F7848485F4C64805F7844484A4851307F4C00003FF8200820083FF82008 +35E9:000003DE78424A52494A4A524842482049FC4904790449FC0104010401FC0104 +35EA:009000927AD44A9A4AD24F4E488849F0482048447BFE48220128022404A20040 +35EB:010001107BDC4A544D544A8849084AF44C0248007BFC48400150024805440080 +35EC:111009207FFE40029FF410101FF002000FE034C00700388003F81D3001C03E00 +35ED:001C01E07820492448A84BFE487048A849244A227840482402A2028A04880078 +35EE:202020103DFE4510457CA9141914117E21147D14A57C251025283E2802440482 +35EF:01081FD001207FFC02000FF03810CFF008100FF000007C8844B044C47C84447C +35F0:01240124722454245954514A529256105A105250725C5250025002B0029E0300 +35F1:014001207BFE4E204BFC4A204BFC4A204BFE4A4078404FFE015002480C460040 +35F2:004003F878484FFE48484BF848404FFE48004BF87A484BF8024803F8000007FE +35F3:021002107BDE4A284D4448A049104A084DF6480078004BF80208020803F80208 +35F4:079E0492F79E9492979E940294F2949294F29492F4F294920492053204020406 +35F5:02100290EA90AB3EB222A544A890B210A290AB10EA28B228052808C410440082 +35F6:002403A878924D144A084C044BBA48A848C64B807A3C4B8400A8009002A80144 +35F7:002003FE7A5249FC485049FC48504BFE480049FC790449240124005800840302 +35F8:0280048EE8E0B140A040A24EA5F4AC44B444A554E554A5740594040404140408 +35F9:0140012073FE56205BFC522053FC5220522053FE724050240522050A08F80000 +35FA:000003F8708057FC511052085CA650A057BC50A073B850A007BC00A000A000A0 +35FB:000004F8728852E850A850A85DFC55045574555475745504051405080A0011FE +35FC:00A004A4F2A890A097FC911090A097FC904093F8F04097FC015002480C460040 +35FD:11002BDE4A5273D42A524BD27A1A12942350C24000003FF8200820083FF82008 +35FE:05100518EFA8A528A76AA2AAAFAAAAACAAACAFA8E238AFAA022A022A02260220 +35FF:0000079E7492579E5492579E540255FA541255D2755255D204120452042A0404 +3600:008003387A084BB84A084A084BF848404A4849504FFE78E0495002480C460040 +3601:000007FCF4A497FC904093F8904097FC911090A0F3F890400FFE004000400040 +3602:010800907BFE490849084A524B9C49084A524BDE784048A402AA028A04780000 +3603:008803FE788848204BFE484048F849884A8848F87840482402A2028A04880078 +3604:020002FEE2AAA2AAAFAAA2FEA620A710AAFEAA20F220A23C0224024402540288 +3605:02400240E4AEA890B300A2E0A45EAC44B5E4A444E554A4E4044404640584040C +3606:00400FFEE040A7FCA000A3F8A208AFFEA802A7FCE110A3F8004007FC00400FFE +3607:01100554F5B8991092A89444900097FC94449040F7FC90E0015002480C460040 +3608:0400057CF60494A89390907C941497949A5092509FDCF250955004B0089E0100 +3609:02100210F3DE95289084900097BC94A497A494A4F7A49434052806A004200020 +360A:07FC0040EFFEA842A358A040A358A080A040AFFEE000A7FC000007FC040407FC +360B:07DE051277D2545457C8551457E2500053FC520473FC520403FC020403FC0108 +360C:020203C2E202AFEAAA2AAB8AAE4AA9CAA80AAFEAEA0AAD4A0A820DC212AA2584 +360D:0108014CE52AA548A88EA138A288A7EABC8AA7ECE48CA7E8048A07FA04260442 +360E:040002FEE202A802AB92A892AFDEAAAAABCAAAAAEB92AAD20FAA08C608820806 +360F:211017FE108003F8F20813F8120813F8120813F8280047FE00903EE422843E7C +3610:001007C8753E57C0551457D25522550057D450547554554805480454005401A2 +3611:041004101F7CE414A414AEFEA014AE14A07CBF10E45404381654251214500820 +3612:0C3871E0102013FEFD2431FC392455FC502093FE10007C8844B044C47C84447C +3613:07BC04A4F7BC94A497BC944495F4944495F49554F5F4955405F404E40554044C +3614:004007FE749253FC509053FC509057FE510853FC750A51F8010801F800900108 +3615:009007FE78904BE84A884BCE4A504BD44AA24BE278004BFC0294029407FE0000 +3616:0200011EEFC4A448A29EAFD2A912AA1EAC92A91EEA12AC52089E0900120C0412 +3617:07BC04A4F7BC94A497BC94A497BC912093FE9220F7FC9A2003FC022003FE0200 +3618:210447C88812F3BC20084B92F83E0380AAAAABAA00003FF8200820083FF82008 +3619:07BC04A477BC500057FE54005590549E57D4556475D4555405D405680BC81054 +361A:0FBE08A2EFBEA8A2AFBEA802AB92A892AFDEAAAAEBCAAAAA0B920AD20FAA08C4 +361B:004000A073185DF6500053F8520853F8511057DC72844FFC045007DC045204CE +361C:51184B947C3ED3A87C7E53A87C3E53A87EBE43A000003FF8200820083FF82008 +361D:00007FFC400440044FC44044484444844284410442844444484440047FFC4004 +361E:00007FFC4204420442045FE4422442244224442444244824494450847FFC4004 +361F:00007FFC40044444444444445FF444444444444448444844504440047FFC4004 +3620:00007FFC4004420441444144448454A45514665444444BC4500440047FFC4004 +3621:00007FFC400440045FF4511451145FF4511451145FF45114410441047FFC4004 +3622:00007FFC41044924452445445FF442844284428444944894507440047FFC4004 +3623:7FFC400447C4444447C440044FE448244FE448244FE4482448A448447FFC4004 +3624:00007FFC4144655455544774641457F44414577465544554495450147FFC4004 +3625:FFFE8002861AF8E2AA42949290E2BE4AC8FABE2288AAAB26BE628002FFFE8002 +3626:104010401040104011FCFE44104410441044108416841884E104410402280410 +3627:100011F8100810501020FC1013FE10221024102010201C20E020402000A00040 +3628:202020202020202023FEFA22222222222252224A228A3B02E2024202020A0204 +3629:10101110111011121112FD1411D811101110111011101D12E1524192010E0000 +362A:1008103C11E010201020FC3C11E010201020103E13E01C20E02240220022001E +362B:108810881088108811FCFC881088108813FE108810881C88E088410801080208 +362C:21002100210021FCFA042484208421042144222427F43A14E004400400280010 +362D:20802080213E21022242FA4227C220822082210221423A22E7E24222000A0004 +362E:100011FC110411041104FD0411FC11241120112011101D10E208420804040802 +362F:10801080110011FE1200FC40104013FC1044104410841C84E104410402280410 +3630:10101110109010901010FD10109010901010101E13F01C10E010401000100010 +3631:10201020102011FC1124FD2411FC11241124112413FE1D04E104410401140108 +3632:200023FC2204220423FCFA402240224023F8224822483A48E488448A090A0206 +3633:044004447C48047004400C423442C43E010001003FF8010001000100FFFE0000 +3634:01000110791049104910492849247944010001003FF8010001000100FFFE0000 +3635:10401040104017FE1080FCA0112011FC1324152411241D24E134412800200020 +3636:081008101EFC221052900C9008FE10102010411001003FF801000100FFFE0000 +3637:1110111013FC11101110FC00120812081110111010A01C40E0A0411002080C06 +3638:0000FFFE104010443E484270A44018421042213EC1003FF801000100FFFE0000 +3639:0880088828902EA028C028842E84F07C010001003FF8010001000100FFFE0000 +363A:2120212821242224FA20263E2BE022242224222822283A10E212422A02460282 +363B:200023FE220222222222FA2223FE222222222252224A3A8AE302420203FE0202 +363C:1040104411F410481050FDFE1040108011FE124014801CFCE004400400280010 +363D:084008487F4408440840FFFE0040084408447F440828082A0F12F02A40460082 +363E:2040202023FE22022404F80021FC20202020202023FE3820E020402000A00040 +363F:100011FC1104110411FCFD04110411FC1020102011FC1C20E020402003FE0000 +3640:2080204027FC24042110FA082484208023F0209020903910E1124212040E0800 +3641:1080108010FE110012FCFC8410A4109413FE108411241D14E1FE400400280010 +3642:110410841088101011FCFD041104110411FC105010501C90E0924112020E0400 +3643:1010103811C011001100FDFC111011101110111013FE1C00E090410802040402 +3644:11101112111411D81110FD121152118E1120102011FC1C20E020402003FE0000 +3645:200023F8220822082208FBF82040204027FC20E021503A48E444484200400040 +3646:2040202023FE22022444F84023FE20402090209021103920E224424204FE0842 +3647:100013FE104010801144FE24106812B0113012A810681CA4E122422000A00040 +3648:20402040207C204023FCFA44227023C02244223C22003AF0E49044920912120E +3649:10501050105011FC1154FD54115411FC115411541D54E3FE4000008801040202 +364A:200021FC210021F82100F9F821002FFE2280224822503A20E210428803060200 +364B:1088108813FE10881088FCF81088108810F810881C88E3FE4000008801040202 +364C:1020102011FC102413FEFC2411FC10201124112411741DACE124412402240424 +364D:200027BC208422942108FA9424A42840200027BC20A43AA4E128429004A80846 +364E:2014201227FE2410F41027F02492249227D225543554E488454A0A1A08261042 +364F:1100110011FE120015FCFD0411FC110411FC108010FC1D08E290406001980606 +3650:102011241124112411FCFC0013FE1020104011FC11541D54E15441540154010C +3651:00F03F0001001FF011101FF001007FFC412441F45E14400801003FF80100FFFE +3652:00F87E084A504A207EFC4A244A287E2000A0014001003FF801000100FFFE0000 +3653:010001003FF80100FFFE08203EF808200E2078FC01003FF801000100FFFE0000 +3654:1040104011FC108413FEFC0011FC110411FC102013FE1C20E22043FE00200020 +3655:200023FE222223FE2222FBFE200021FC210421FC210439FCE104410401140108 +3656:1004101E13E0102011FCFD24112411FC102013FE12221E2AE2FA4202020A0204 +3657:200023F82248224823F8FA48224823F8200027FE22403A44E228429003080206 +3658:200023FE2050205023FEFA52225223FE2000204027FE3888E190406000D80304 +3659:2120111097FE4128493409281132E124223A2262259E01003FF801000100FFFE +365A:1088105013FE102011FCFC2013FE100010A010FC11201C20E3FE402000200020 +365B:1028102413FE102011FCFD2411FC112411FC11241C08E3FE4088004800480018 +365C:0100FFFE00001FF010101FF000007FFC40044FE448244FEC01003FF80100FFFE +365D:204021FC204420942108FBDE214A214A229421FC210439FCE10441FC0104010C +365E:1020104011FC110411FCFD0411FC110411FC102013FE1C70E0A8412402220020 +365F:2100209E23D222522252FBDE2252225223D2221E22923A52E2D24352022A0044 +3660:7F7848485F4C64805F7844484A4851307F4C000001003FF801000100FFFE0000 +3661:21242124222424242954F94A229226102A102250225C3A50E25042B0029E0300 +3662:2088208823FE20882088F8F8202023FE2222233222AA3B76E2224222022A0224 +3663:20002F3E2120213CF1202F3C282028FE28502F523154E148414801440A620440 +3664:2040207C204023FE2242FA7823C4223C220822F023243AA8E5FE442008A00040 +3665:2080204027FC2110FA482484212023F02010208821503B20E510494801860100 +3666:0808144822285C8888487F0E08F82A084908180801003FF801000100FFFE0000 +3667:200023FE205023DE2252FA5223DE205023FE222222223BFEE222422203FE0202 +3668:224822482554275C2248FD54275C22482FFE222022283A28E5144494042C0844 +3669:2040204027FC20A02514FA0827FC2A0A23F8220823F83840E248444409440080 +366A:202023FE202021FC2000FBFE220221FC200021FC210439FCE104408803FE0000 +366B:10A0109011FE132011FCFD2011FC112011FE11001C20E3FE407000A803260020 +366C:081408127F102AFE2A105D101C282A284944888201003FF801000100FFFE0000 +366D:20002FFE28002A28F9482BEE289228842AA02AA83BE8E8884894091409241242 +366E:2210221023DE22282544F8A02110220825F6200020003BF8E208420803F80208 +366F:08203E2008F87F282228496A3E2A08567E8200003FF80000FFFE082010103FF8 +3670:10001EFC22247F44A99C3F50297C3F9029FE29104510821001003FF80100FFFE +3671:00207C3C44207DFE0122FD3841E47D1C05702A54148C01003FF801000100FFFE +3672:2040202027FE20282224F27E24C82748217E224824C8377EE1484248047E0840 +3673:2014201227FE2410F5D0241425D4255825CA24163442E82442A2028A04780000 +3674:210021F8220827FE2288FB2423FE220022FC220022FC3A00E2FC448404FC0884 +3675:102013FE100010F81088FCF8100013FE120212FA128A1EFAE22641F8002003FE +3676:0100FFFE10101FF00000111009207FFE40029FF410101FF001003FF80100FFFE +3677:200023FE220223FE2202FBFE21082252239C210822523BDEE00042A402520452 +3678:212821AA216C2228FAFE264426282AFE2210227C22103AFEE210422802440282 +3679:2088208823FE208823FEFA5223FE200023FE224220F83908E290406000C00700 +367A:27FE242025FC252425FCFC2027FE250425FC250425FC3D04E5FC4488050407FE +367B:202027FE240025FC2524F5FC252425FC242025FC242037FEE5244AFA082013FE +367C:23F82248224823F82248FA4823F820002FBE2AAA2AAA3FBEEAAA4AAA0FBE08A2 +367D:2020202027FE202023AEF92423AE22AA23AE22AA23AE3850E050408801040602 +367E:22A0244C24A4260CF4A4264C24A42FFE280223F03020E04047FC004001400080 +367F:211027FC204023F82040F7FC200023D4211227FE23503534E78C42CA045608C2 +3680:210821EC210A27E8F52825DE272824EA240A27EA340CE7EC4A2A0BEA115607E2 +3681:101010107C7C1010FEFE4444EEEE44446464DEDE0000FEFE28282A284C4A8886 +3682:204027FC224823F8F0402FFE2AAA23B8211027FC3110EFFE412803100D480186 +3683:010001007FFC01001FF000007FFE400284442388244820083FF8082004407FFC +3684:01007FFC01001FF000007FFE51129FF411101FF000007FFC010411F0290047FE +3685:020007E00820144003801C70E00E1FF0010011001FF821005FF00100FFFE0000 +3686:02000100FFFE00001FF010101FF010101FF008000FF01420224041800E60701C +3687:044022882108228824483FF81210220847E4082014402280010006C01830E00E +3688:1010101010101E101210221022FE52108A100410041008100810101020104010 +3689:00003FF008100820083C120417E438544588068039F80610192000C003003C00 +368A:202020103C1045FE4820A824104428F84E12122224445588081010282044C182 +368B:200021FC3D2445244974A92411FC29044F74135425545574090412042214C408 +368C:200021FC3D24452449FCA924112429FC4E2013FE247054A8092412222020C020 +368D:202021FC3D2445FC4820ABFE100029FC4F0413FC250455FC090411FC2088C104 +368E:010001007FFC0280044008203018C0060000200820082008200820083FF80008 +368F:010001007FFC0280044008203018C006082008207FFC08200820102010202020 +3690:010001007FFC010002C004201810600801000100FFFE0280044008203018C006 +3691:00003FF8000800081FF8000800083FF801000100FFFE0280044008203018C006 +3692:0100010001007FFC01002120111011102928454402800280044008203018C006 +3693:010001007FFC028004400820311001007FFC0380054009203118C10601000100 +3694:020002007FFC044008203018C82604403FF801000100FFFE0100010001000100 +3695:020002007FFC044008203458C4467FF804483FF824403FFC0844105420484040 +3696:010002001FF0101010101FF0101010101FF0010001007FFC028004401830E00E +3697:020002007FFC044008203018DFF6101010101FF010101FF010101010FFFE0000 +3698:10201020102010207DFC102010201020FDFE1020105010502888248845048202 +3699:100010007E7C124412441244227C4A4485000100FFFE0280044008203018C006 +369A:020002007FFC044008203218C7E608203440028003001FF0E81008100FF00810 +369B:020002007FFC0440082038D8CF06081007F000001FF010101FF010101FF01010 +369C:020002007FFC044008203098C0A63FF800803E8022483E5000240E54718C0604 +369D:020002007FFC044008203018C806084013F8304057FC904013F8104017FC1000 +369E:020002007FFC044008203018C82608207EFC08201C702A6848A4892208200820 +369F:08001FC020807FF0A0103FF020883CF420843D7C01007FFC028004401830E00E +36A0:020002007FFC044008203458C2863FF801001FF001007FFC0000248822444244 +36A1:10101010FEFE101028284444FEFE040474745454545474745454040414140808 +36A2:10801080108020802FFE61086108A2082210261021A0204020A0211022082C04 +36A3:02000200FFFE08401C8003800470180862000200FFFE08201C4003800C707008 +36A4:1048104410441040FE4E23F02240224042402440142008221412220A42068002 +36A5:100011FC10201020FC202420242027FE24204820282010202820442084A00040 +36A6:100011FE10481048FC4824482448244824484848284810482888448885080208 +36A7:10201010101010FEFC8024802480248024804880288010802880450085000200 +36A8:100013F010901090FC902490249027F02490489028901092288A448A84860082 +36A9:100010FC10841084FC8425FE24842484248449FE288410842884448484940088 +36AA:1008103C11E01020FC20243C25E024202420483E2BE01020282244228422001E +36AB:200023FC20842088F8884890489C488489444944312811282A104A2884440182 +36AC:10401040108010FCFD0426042484244424444814282410442984440484280010 +36AD:1040105010481048FC4025FE24502450245048502890109028924512850E0200 +36AE:1000100011FE1102FD02240024782448244848482848104A284A448A84860100 +36AF:200023F822082208FB284AA84AA84A488A484AA832A8132A2C0A440A88061002 +36B0:100011FE10101010FC202420246824A425224A22282010202820440083FE0000 +36B1:1008101C10E01080FC802480248024FE24884888288810882888448885FE0000 +36B2:1020102010201020FC3E24202420242025FC4904290411042904450485FC0104 +36B3:210021002100211CFBD4495449544954895449543154115429544A5C83540480 +36B4:20402040204023FEF88048A0492049FC8B244D24312411242934492880200020 +36B5:10401040107C1084FD8826502420245024884B0628601010280844C084200010 +36B6:100011F811081108FD08250825F82500250049FC290411042904450485FC0104 +36B7:2020202020502050F88849044A22482048A890A4512421223222482048A08040 +36B8:100011FC10041004FDF42404240425F42514491429F411142804440484280010 +36B9:20002080231E2252FA524A524A524A524A5292D2535A22543090489049108210 +36BA:100011FC10441048FC8E2482257A2614242048202BFE10202820442084A00040 +36BB:00003FF8210821083FF8210821083FF804000400FFFE08201C4003800C703008 +36BC:1000100011FC1124FD2425242524252425FC4924292411242924452485FC0104 +36BD:00007DFE1040108011FC10041E04E00442280210FFFE08201C4003800C707008 +36BE:100011FC11041104FD04250425FC2450245048502850109228924512820E0400 +36BF:1040104010FC1084FD0426F42494249424F448842894108828824482847E0000 +36C0:1080108010F81108FE10242025FC24042404480429FC10042804440485FC0004 +36C1:100011FC10201020FD2424A424A8242027FE4820282010202820442084200020 +36C2:1008101C11E01100FD00257C2554255425544954297C1140294046428242043E +36C3:080008007F7C08243E2408247F4408540A880200FFFE08201C4003800C707008 +36C4:10401020102011FEFC40244024A024A225A44A982C901088288844A484C20080 +36C5:100013FE10881088FCF82488248824F824884888288E13F82808440884080008 +36C6:100011FC10441048FC5E2482248A252424204BFE2820107028A8452482220020 +36C7:10201010101011FEFD00251025102510257C4910291011102910461082FE0400 +36C8:1040104411F41048FC5025FE2440248025FE4A402C8010FC2804440484280010 +36C9:100013FE10501050FDFC25542554255425544954298C11042904450485FC0104 +36CA:100010F810881088FC8824882526262025FE4820287010A82924462284200020 +36CB:2040204020A020A0F9104A484C46484049449152524A244A3048484049408080 +36CC:2040204020902108FBFC48244920492049FC9220502027FE3020482048208020 +36CD:10201020102013FEFC2024202524252425244AAA282010502850448881040202 +36CE:100010FC10841084FC84248424FC2400240049FE290211022902450285FE0102 +36CF:1028102410241020FDFE2420252024B224B4486828A811242A22442084A00040 +36D0:100013FE10201020FDFC2524252425FC2524492429FC112028A0444080B0030E +36D1:08000F7C28443F44612892100C683186C0000400FFFE08201C4003800C707008 +36D2:100011FE10001000FCFC24842484248424FC4800288410442848440085FE0000 +36D3:21842068203020C8FB0448404BFE48A0492093FC552421243134492848208020 +36D4:1040104010FC1088FD50242024D8272624F8482028F810202BFE442080200020 +36D5:100010F810881088FCF8240025FC25242524492429FC110029004502850200FE +36D6:2040204020882104FBFE4802488849448A4248F8318812502820485081880606 +36D7:1020102010A810A8FCA8257426222420242049FC282010202820442083FE0000 +36D8:2020202023FE2020F8204BFE4A024C0449F89010502023FE3020482048A08040 +36D9:1040102011FC1000FC88245027FE24202420482029FC10202820442084200020 +36DA:100011F8100810D0FC2025FC2524252425FC4924292411FC292445248524010C +36DB:1040108011F81108FDF8250825FA250A250C4BF8281810282848458886280010 +36DC:1040104024FE6488A548245024202450228C0200FFFE08201C4003800C707008 +36DD:100011FC11041104FDFC2504250425FC2504490429FC10002888448481020202 +36DE:100013FE10201020FDFC2420242027FE248848882BFE10882888450881080208 +36DF:1080108010F81108FE1025FC25242524252449242BFE10502850448881040602 +36E0:210020BE22822202FA024AFA4A8A4A8A4AFA928A528A22FA32024A024A0A8204 +36E1:1040102013FE1202FC0425F82400240027FE48902890109029124512820E0400 +36E2:201C21E020202020FBFE48A849244A2289F84888309010BE2902490282140408 +36E3:100010F810881088FCF8240025FC250425244924292411242850444880840304 +36E4:200023FE20002000FBDE4A524A524A524B5A92D65252225232524A524A5282D6 +36E5:1020102213B410A8FCA8252426A2244025FC4904290411FC2904450485FC0104 +36E6:2110211021102110F7BC51105110533853B89554555429922110511051108110 +36E7:1020112411241124FDFC2400240027FE2440488028FC11842A84448484FC0084 +36E8:21082088209023FCF84048404BF8484088404FFE30A010A0292049228222041E +36E9:1040102013FE1080FD0427FE240225FC250449FC290411FC2904450485140108 +36EA:1020102013FE1050FC882524262225FC252449FC292411FC28224422841E0000 +36EB:100010FC10841084FCFC2484248424FC244048FE292A124A28924522844A0084 +36EC:2020202021FC2020F8204BFE488849044A22902051FC2020302048204BFE8000 +36ED:10881088108813FEFC88248827FE240025FC4904290411FC2904450485FC0104 +36EE:1040102013FE1222FCA4252824502488250448F8288810882850442080D80306 +36EF:22102210239024BCF91457D455545554555497D452A422AC22C25482547E8800 +36F0:100011FC110411FCFD1025FE2510254A2586480029FC110429FC450485FC0104 +36F1:100011FC11241124FDFC2524252425FC24004BFE292011222914454885840102 +36F2:100013FE10201040FDFC2504250425FC250449FC2904110429FC440084880104 +36F3:01007FFC082004407FFC41041FF01110115011200200FFFE08201C4003C03C38 +36F4:2092212422482124F892484048804BFE4A02928A5252222232524A8A4BFE8202 +36F5:101E13E010441124FC88242025FC2524252449FC292411242BFE450485140108 +36F6:1020112411241124FDFC2480248027FE24904910295212542AA8442888440082 +36F7:0C48704413FEFC50305058929492110E12000200FFFE08201C4003800C707008 +36F8:1020102013FE1020FC2025FC2400240025FC4904290411FC28004488845003FE +36F9:210021FE21102210FAFE4A924E924AFE4A92929252FE229032504A204A588286 +36FA:1040102013FE1000FD04248827FE240025FC4904290411FC2904450485FC0104 +36FB:2020202023FE2050F8884B2649FC4820482093FE5000202031FC4820482083FE +36FC:1008103C11E01020FC2027FE242024A0252C4924292411AC2924452485FC0104 +36FD:2040202023FE2202F820492448A848204BFE907050A820A831244A2248208020 +36FE:2008200C200A23FEFA084A084AE84A0A4A0A92EC52AC22A832EA4A1A4A268442 +36FF:20A820A823FE20A8F8A848004BFE4A22882049FC312411242934492880200020 +3700:21002100213C2124FBA44924493C4BA44B649524593C212431244924493C8124 +3701:1020102013FE1070FCA82524262225FC250449FC290411FC2904440083FE0000 +3702:08087E0808FEFE0808487E2808080F28F0100400FFFE08201C4003800C707008 +3703:2090208820FE2100F9004B3C4D004900493C91005100213C31244924493C8124 +3704:200027FC24042434F5C4544455F45554555495F45444245425F4549458069002 +3705:1040102013FE1040FC8825F02420244425FE480229FC112429FC452485FC0104 +3706:2010209224522254FA1048FE48104E388A544A92331012102A10450088FE0000 +3707:2020202021FC2020FBFE482049FC48208BFE4800304010242AA24A8A84880078 +3708:00207E7C14C40838FEC62A2048FCA844128C0200FFFE08201C4003800C707008 +3709:2124224822482124FBF84A084BF848004BF89248524823F832024A0249FE8000 +370A:200023FC22042204FBFC4A484A484AFC8A484A4833FE12A42AA8449084C80886 +370B:2104208420882000FBFE4800488849048A0249FC315411542954495487FE0000 +370C:10001078FE4810487C480086FE0082FC7C441044FC2824286810302848448582 +370D:1020101011FE1110FD7C251425FE2514257C4910297C114429444644827C0444 +370E:101E13E011221094FC40248825F0242024C449FE282210202BFE445084880306 +370F:100010FC10841084FCFC240025FE250225FE490229FE110229FE444884840102 +3710:1020112411241124FDFC240027FE240025FC4904290411FC2888445083FE0000 +3711:40482FFE004087FC544417FCE44427FC244420000200FFFE08201C4003C03C38 +3712:1040119C11041104FDDC2504250425FC248848882BFE10882888448885080208 +3713:1088108813FE1088FC2024502488250426FA4800280011FC2904450485FC0104 +3714:1080104013FC1108FC9027FE240025F82508490829F81090289045128212040E +3715:2010201022FE2110F97C4854487C4B54897C491031FE111029104A90847E0000 +3716:2090209027FE2090FBFC4A944BFC4A944BFC900051F8210831F8490849F88108 +3717:2040208821FC2108FA524BFE485049884E2690C0531020643388483048C08700 +3718:1020103C102011FEFD22253825E4251C2500497C2944117C2944457C854402FE +3719:2040202023FE2250FA504BFE4A524A528BFE4A00329212D42A98449284D2088E +371A:2040202027FE2402F90049FE4A104E204A7C92445244227C32444A444A7C8244 +371B:21082108210827C8F11E57D2556457C0554897C8510827C82114511451248142 +371C:21082108210827D0F11E579451245FD4521493D452542248224854D454248842 +371D:2020205020882124FAFA481048204BFE485091FC5154218C310449FC490481FC +371E:08047F7808407F40497E7F4849487F4808487F480A88FFFE08201C4003C03C38 +371F:2008238820882110F7DE529452A4539452949394529422C82388569450A480C2 +3720:1020122213FE1090FC8825FE2710251025FE4910291011FE2910451085FE0100 +3721:2124212422242424F954494A4A924E104A109250525C225032504AB04A9E8300 +3722:102011FC112413FEFD2425FC242025FC252449FC284013FE288845D08470038C +3723:2110211421D22250FA7E4D5048904AA8492891445244248230084AA44A528452 +3724:200023FE205023FEFA524BFE480049FC490491FC510421FC30204BFE48208020 +3725:200023FE22522252FBFE480049FC490449FC910451FC210431FC488849048202 +3726:200023FC200423FCF8044BFC48004BBC492497BC500823FE3108488848A88010 +3727:200027FE24002628F54857EE5492548456A096A857E824882494551459249242 +3728:200023FE220223FEFA104A544A384A548A824A50327C12902A1045FE84100810 +3729:2040208023FE2222FAAA4A224BFE4A724AAA9202502023FE3020485048888306 +372A:08047F782240FF40087E7F482A484948A8881400FFFE08201C4003800C707008 +372B:228822A826A82BF0F01E522455D45C14541495D4555425482568555456148422 +372C:210021F8220827FEFA884B244BFE4A008AFC4A0032FC12002AFC448484FC0884 +372D:1020112410A813FEFE0224F82488248824F8480029FC112429FC452485FC0104 +372E:200823E8228823EEFA284BF44A824BE2880049FC315411542954495487FE0000 +372F:200027DE24922492F5D2555E555055D05492949257CE20002000552454928892 +3730:21242174225822DAFBFE49544ADA4BFE88A2482033FE107028A8492482220020 +3731:2042239C221023DEFA944A944C204BFC4A0493FC520423FC32044BFC49088204 +3732:20402FFE240027FCF00057FC540457FC50809C9C57D43D54355C5C965556AE22 +3733:2080204027FC2000FBF84AA84BF848404A449118524420A831904A884CA680C0 +3734:210827FE210823FCFA944BFC48004FFE4C0291F8510821F8310849F8490881F8 +3735:204027FE200023FCFA404BF84A404BF84A4093FC5004255430A84B104D488186 +3736:21F0221027FC2204FBFC4A244BB84A2249FE921057FC224433FC48D0494A863E +3737:F7FC124817FCFC4686ECF55416EC155456EC24440200FFFE08201C4003C03C38 +3738:0820FFFE28207DFC44887C5041FE7C2045FC7C200200FFFE08201C4003C03C38 +3739:23DE225223DE2252FBDE4A524BDE489049FE911053FE251031FE491049FE8100 +373A:252827BE294827BEFB184DAA49464BFC4A0493FC520423FC32044BFC49088204 +373B:244424E42A0A2EEEF4045AEA5E0E50E05AAA9AEA504020242522550A590880F8 +373C:21FC212421FC2124FBFE4AAA4BFE4AAA4BFE900053FE228A30F84888488883FE +373D:0888111022201110088800001FE0004000800100FFFE01000100010005000200 +373E:0020FC200450085010881104160218883088D088108810881088110851082208 +373F:0000FDF8040808501020101015FE18223024D020102010201020102050A02040 +3740:00003E7C22042A08260822102210FF7E421052104A1042107F90021014500820 +3741:10001FF820085FC890481FC810481FE800103FE000800100FFFE010005000200 +3742:0104FD0E0530092017E01120153E196431A4D724112411241124112455442284 +3743:0080FC8004F80908121011FC152419243124D1FC10501050109010925112220E +3744:20201020FE2001FC7C2044A87CA800A87CA804A808F81E22F0221022501E2000 +3745:1000FE7810487C480048FE8682007CFC00447C4408281E28F010102850442182 +3746:0020FDFE042009FC100011FC150419FC3088D3FE100011FC1104110451FC2104 +3747:20201010FEFE00007C7C44447C7C00007C7C080810101EFEF010101050502020 +3748:210447C88812F3BC20084B92F83E0380AAAAABAA00007C7C0808FEFE10103030 +3749:0200010001007FFE400280040000000000000000000000007FFC000000000000 +374A:0200010001007FFE4002800400003FF01010082004400280010006C01830E00E +374B:0200010001007FFE400280041FE0004000800100010001000100010005000200 +374C:0200010001007FFE4202820407E004200840104000800180024004201810600C +374D:020001007FFE500290041FF8100020003FF800080008FFC80008000800500020 +374E:020001007FFE40028204010001007FF8003000C003000C003000480087FE0000 +374F:020001007FFE400281040280044008203458C446044004400840084010402040 +3750:0200010001007FFE40828484044008401020221042088406084010203FF01010 +3751:020001007FFE4002820401007FFC0400040007F0041008100810101020A04040 +3752:0200010001007FFE4002810401007FFC010001001FF01010101010101FF01010 +3753:020001007FFE4002810402800C603018CFE600001FF01010101010101FF01010 +3754:020001007FFE4002820401007FFC08201010244844440280010006C01830E00E +3755:020001007FFE4202810409002828282447E400003FF00820044003801C70E00E +3756:020001007FFE420287E41840648003200C4071F806081A10012000C007007800 +3757:020001007FFE420281041FF010101FF010101FF0110410881050122014181806 +3758:020001007FFE420281043FF800001FF000001FF000001FF0101010101FF01010 +3759:020001007FFE400280043FF801001FF001007FFC0000FFFE0000082010102008 +375A:020001007FFE4002801C7BE00840104022787A400A402BFC1000280047FE8000 +375B:020001007FFE400288040FFC1040304053F89248124812A81318120813F81208 +375C:020001007FFE444284443FF804400440FFFE00001FF010101FF010101FF01010 +375D:020001007FFE40028824082008207EFC08201C301A702A6848A4892208200820 +375E:020001007FFE400280047FFC044004403C78200820083C7804400440FFFE0000 +375F:020001007FFE4002BFFC00001FF010101FF010101FF010101FF004421842E03E +3760:020001007FFE40029FF410101FF010101FF012100100FFFE0000082010102008 +3761:020001007FFE400280047F0022FC3E4422443E44222822282F10F22842440282 +3762:020001007FFE400280F43F0001001FF011101FF001007FFC412441F45E144008 +3763:020001007FFE400288047F7C08243E2408447F5408880200FFFE04401830E00E +3764:01007FFE4822BFFC08203FF80820FFFE01003FF821083FF82108FFFE20082018 +3765:020001007FFE400284242420252424A83C2007FE0470FCA82524262224204420 +3766:01007FFE49029FFC31005FF091001FF011001FF810003FE0084008F810086030 +3767:01007FFE4402BFFC082007C0783811101110292845443FF801000100FFFE0000 +3768:020001007FFE41029FF401007FFC00001FF010101FF0048808503820CB180C06 +3769:01007FFE400281043FF820802FF820883FFE20882FF824C422A8449858868180 +376A:020001007FFE4002904410407C4011F8FE48444828C87C4810AAFEAA11061202 +376B:01007FFE4002810479F04A9050606198560649F04A406BF8544043F8404047FC +376C:20201020FE20822011FC7C2010207C2011FEFE2010507C50448844887D044602 +376D:01007FFE4002900413F812085BF8560853F8914013F8144011F0104017FC1000 +376E:01007FFE400288042A003E7C49447F4400443E2800287F1008102A2849441882 +376F:020001007FFE400280741F800200FFFE082037D8C4463FF8200827C8244827D8 +3770:01007FFE42029FF41490125011301FF00100FFFE92122FE8440407E008203060 +3771:01007FFE408A8BFC488849FC495479FC08000BFEFA4248784888495088600980 +3772:01007FFE411297FC511053F852A877FC141411F0F01057FC544453F892481258 +3773:0200020002000200FFFC0200020012901248122422242212421282000A000400 +3774:00087C08000801FE0008FE082488244824482408240824282412440243FE8000 +3775:00003FF820083FF820083FF800007FFC00200020FFFE08200420042000A00040 +3776:3FF8244824483FF80000044004420842303EC0000020FFFE0820042004A00040 +3777:3FF000101FF000103FF000407DF011501C94E14C0020FFFE0820042004A00040 +3778:010011102108450408003FF8200820083FF8200820083FF8044008421042603E +3779:01001110216843841C00E8001FE020204040BFF8210821083FF80492188AE07E +377A:22101410FF90141014147F521552FF9215107F1414043608551094A014401580 +377B:22102210FF9022103E5408527F5249907F1008147F0408087F0808100F20F0C0 +377C:200021FC20202020FC2028202BFE282028202820282028A02842480247FE8000 +377D:2020202020202024FDA828B028B0292829242A2428A028402802480247FE8000 +377E:20402040204023FCFC80288028F8292029202A20282029FC2802480247FE8000 +377F:2020202021FC2124FD28292029F82908295029202A502A882D0A480247FE8000 +3780:20402040204023FEFC802890291229542A902C28282428442982480247FE8000 +3781:200021F8210821F8FD0829F82800291829E02904290428FC2802480247FE8000 +3782:201C21E020442124FC88282028202BFE284828C8283028682986480247FE8000 +3783:2840244842449244104029FE445082507C5044504450445244527C92448E0100 +3784:2040204023FC20A0FD102A482DF4295029F0295029F42844283E480247FE8000 +3785:200021FC212421FCFD2429FC282029FE287028A829242A202822480247FE8000 +3786:2020202021FC2050FC882BFE280829E82928292829E829282808481A480287FE +3787:200021FC212421FCFD2429FC28002BFE29222914294829842902480247FE8000 +3788:2040202021FC2104FD0429FC290029FC2B542B542DFC29542954490E480287FE +3789:2088205023FE2020FDFC28402BFE288029FC2A202C202BFE2802480247FE8000 +378A:1040544054407C4092FC9250FE5000507C500050FE50105254929292510E2200 +378B:00003FFC200420043FFC200020002FF82408241022202140208041404630980E +378C:00003FFC200420043FFC200027F82010202020402FFE20402040404041408080 +378D:00003FFC200420043FFC210021002FE0212025202220232024A24422481E9000 +378E:00003FFC200420043FFC20002FF82888288828882FF8280028024802480287FE +378F:00003FFC200420043FFC200020782780208020402FF8201020604180460099FE +3790:00003FFC200420043FFC2000208020402FFC200024082210212040005FFE8000 +3791:00003FFC200420043FFC20002888249022A0208022A02492288A4082407E8000 +3792:00003FFC20043FFC210022002FF8280828082FF8280828084FF8480888080FF8 +3793:00003FFC20043FFC200028602F88280827F820002FF828084FF848088FF80808 +3794:00003FFC20043FFC210023F02C202240218022402CF821084690406081800E00 +3795:00003FFC20043FFC22202410280837F6241027F0241027F04410441084500420 +3796:00003FFC200420043FFC20803FFC20802FF8288828A829D022A04490588C8080 +3797:00003FFC200420043FFC209020882FFC2080288825D022A02490488C42808100 +3798:3FFC20043FFC20002FFC2100230824882D50226025E029504250444899440080 +3799:3FFC20043FFC200020F03F0021E02F0021F43F0420FC20884ED042A084981986 +379A:3FFC20043FFC2000203827C020402FFE20402140265C2444475C444487FC0404 +379B:00003FFC20043FFC2288249028E43284247C2C0034FC248444FC448484FC0484 +379C:3FFC20043FFC220C2470281030FE223824542C92342025FE444444C8843805C6 +379D:00243FFE222023A422243FA82B10529A462680421FF810081FF8100020004000 +379E:00003FFC20043FFC24482848305422A425002C103490249C44904550863E0400 +379F:3FFC20043FFC22202FF821402FF82A282DD828082FF820805FFC41408630180C +37A0:3FFC20043FFC20802FF821402A2827F02C1837F4241027F04080488892840100 +37A1:3FFC20043FFC2000273822102F7C20002738221023BC2EC8413043108D480186 +37A2:010001002108210821082108210821083FF801000100010001000100FFFE0000 +37A3:01002108210821083FF80100054008203018DFF6021002100210041008A01040 +37A4:010001002108210821083FF800000100010001000280044008203018C0060000 +37A5:01002108210821083FF80000060001000100028002800440082010102008C006 +37A6:100010F01090109054905490549054905490549054905C9264920112010E0200 +37A7:01002108210821083FF8000000003FF004100420087C08041004200440288010 +37A8:100011FC1004100854105420542057FE5420542054205C206420002000A00040 +37A9:0100210821083FF8000000000FE0082008200A200920092210221022201E4000 +37AA:00003FF0001000101FF000100010FFFE0100010021082108210821083FF80008 +37AB:01002108210821083FF80200010001007FF8003000C003000C003000480087FE +37AC:010001002108210821083FF8000000003FF801000100010001000100FFFE0000 +37AD:010001007FFC01000280044008203018C106010021082108210821083FF80008 +37AE:01002108210821083FF8080008001FF810082010402000400C80030000800040 +37AF:00003FF0001000103FF02000200420041FFC010001002108210821083FF80008 +37B0:10801080108011FC552056205420542057FE542054205C206420002000200020 +37B1:0100210821083FF8000000003FF82008200820083FF82008200820083FF82008 +37B2:102010201020102055FC552455245524552455FC55245C206420002000200020 +37B3:100810881048104854085488544854485408540E55F85C086408000800080008 +37B4:1004101E11F0111055105510551055FE5510551055105D08650A014A01860102 +37B5:01002108210821083FF8020001007FFC0820082004400280010006C01830E00E +37B6:10401020102013FE54885488548854885488545054505C206450008801040602 +37B7:01002108210821083FF80100010000007FFC010001003FF801000100FFFE0000 +37B8:01002108210821083FF8000000007FFC01000300056009103108C10401000100 +37B9:1000100013FE1008540855E8552855285528552855E85D286408000800280010 +37BA:01002108210821083FF8080008001FF0210001007FFC0280044008203018C006 +37BB:0100210821083FF800001FF010101FF00000FFFE10001FF00010001000A00040 +37BC:00003FF0002000C07D040588095011202118C50602000100210821083FF80008 +37BD:2028202420242020ABFEAA20AA24AA24AA24AA28AA28BA90CB12022A00460082 +37BE:100011FC11041104550455FC550055405544554855705D4065420242023E0400 +37BF:0100210821083FF8000001003FF801000100FFFE10100820044003801C70E00E +37C0:00701F8001000100FFFE054009203118C006010001002108210821083FF80008 +37C1:100011FE11001100557C551055105510551055FE55105D106510021002100410 +37C2:100010FC108410A454945484548457FE5504554455245D0465FE000400280010 +37C3:100011FC1004100455F45404540455F45514551455F45D146404000400280010 +37C4:108410441048100055FE5420542054FC5420542055FE5C206420002000200020 +37C5:10001088105011245554558C550455FC5400549054905C90651001120212040E +37C6:2090209421142118AB10AD32A952A90EA920A820ABFEB820C820002000200020 +37C7:10201020112411245524552456AA54725420542055FC5C206420002003FE0000 +37C8:102810241024102055FE5420552054B254B4546854A85D246222002000A00040 +37C9:2040202023FE2202AC24A920A9FCA920AA20A820ABFEB820C820002000200020 +37CA:1008103C11C01004554454A8540055F85410542057FE5C206420002000A00040 +37CB:110410841088101055FC55045504550455FC545054505C9064920112020E0400 +37CC:10901088108013FE54A054A854B054A454A854B055245D2A6532022202DE0400 +37CD:1040102011FC1104550455FC5504550455FC552055225D146508014401820100 +37CE:2008203C23C02044AA24A928A900A840ABFEA888A908BB90C860005001880604 +37CF:10201020105010885544562254F854085410542055FC5D046504010401FC0104 +37D0:1048104811FE104854485420541055FE5480548054805C806480008000FC0000 +37D1:2020202023FE2020A820ABFEAA02AC04A9F8A810A820BBFEC820002000A00040 +37D2:0100210821083FF800003FF80408FFFE04083FF808001FF8280848088FF80808 +37D3:21842068203020C8AB04A840ABFEA8A0A920ABFCAD24B924C934012800200020 +37D4:0100210821083FF8010002800C603118CFE6004000801FF0101010101FF01010 +37D5:0100210821083FF800000020792048A04A204920483C4BE07820482000200020 +37D6:0100210821083FF800003FF801001FF001007FFC00000820FFFE082010202020 +37D7:01000100410451445554638C41047DF455545554555465944D3441047FFC0004 +37D8:100011FC112411245574552455FC55045574555455545D746504020402140408 +37D9:10881088108813FE5488548857FE540055FC550455045DFC6504010401FC0104 +37DA:10201020FDFC1020302039F85488905010201050118C0100210821083FF80008 +37DB:0100210821083FF8000010881088FBFE108810881CF8F0881088108850F82088 +37DC:0100210821083FF800407C4004FC04847D28402040A87CA404A4052428A01040 +37DD:1040102011FC100055085490540057FE5400540055FC5D046504010401FC0104 +37DE:10481044105E11E054285412546A55965448545E55E05C2464280012006A0186 +37DF:0100210821083FF8000008207FFC0820FFFE10102FC848448FC20810081007F0 +37E0:200023FE2202228AAA52ABFEAA22AA22AAAAAAAAAAAABAFACA020202020A0204 +37E1:0100210821083FF80000111009207FFC0400FFFE10102FE8C82608A0084807F8 +37E2:0100210821083FF802003FF804800840FFFE00101F90109010901F9000500020 +37E3:2104211421142114ABD2A922A92AAB48AB88AD50AD10B914C922017E01220100 +37E4:0100210821083FF800003FF000101FF00010FFFE111009A005401930E50E0200 +37E5:0100210821083FF8040008201FF00210FFFE08A03318CC4603801C3001C03E00 +37E6:010041047FFC00007FFC41043FF801001FF011101FF011101FF00100FFFE0100 +37E7:010041047FFC00003EF822883EF800003FF80000FFFE08000FF0001000A00040 +37E8:102011241124112455FC540057FE5420544055FC55545D54655401540154010C +37E9:00207F20413E7F4448A47F24482845105328614600000100210821083FF80008 +37EA:100011FC1124112455FC5524552455FC540057FE55205D226514014801840102 +37EB:1040108011FC110455FC550455FC5420543257B454A85D286524022404A20040 +37EC:010041047FFC0500397821083D7821083FF801003FF00820044003801C70E00E +37ED:100011FC110411FC551055FE5510554A5586540055FC5D0465FC010401FC0104 +37EE:1040102013FE12025488550456225428542457FE54205C506450008801040202 +37EF:010041047FFC020001007FFE48029FF4282007C01830E00E1FF010101FF01010 +37F0:200023FE22022000A9FCA904A9FCA904A9FCA840A820BBFEC800008801040202 +37F1:2104208420882000ABFEA820A820A9FCA820A820ABFEB800CAA4025204520000 +37F2:100011FE11101120557C5544557C5544557C551055105D546552029202500420 +37F3:200023FE20502050ABFEAA52AA52ABFEA820A820ABFEB870C8A8012406220020 +37F4:2020204023FC2224AA24ABFCAA24AA44ABFCA840A8A8B8B4C93C01220222041E +37F5:0100210821083FF800003FF824483FF800007FFC010011F811001100FFFE0000 +37F6:010041047FFC00003FFC2080210027F0241027F0241027F0408044908A881104 +37F7:1088108813FE1088542054505488550456FA540054005DFC6504010401FC0104 +37F8:2020204021FC2104A9FCA904A9FCA840ABFEA888A924BA22CDFC002000200020 +37F9:20103F202ACE2AAAAEAAAAAAAAAAAEAAAAAAAAAAABEABEACDA28024802480288 +37FA:010041047FFC01003FF82108FFFE21083FF811101FF00400FFFE082007C07838 +37FB:08047F7808407F40497E7F4849487F4808487F4808880100210821083FF80008 +37FC:0100210821083FF8082008207F3E08443EA40824FF2810281E1022284A448482 +37FD:100013FE105011FC5554555455FC540055FC540057FE5C2064A8012402A20040 +37FE:101011FE1110117C551455FE5514557C5510557C55545D7C6554027C0254044C +37FF:2088208823FE2088A824ABFEA850A888A904AA8AA888BBFEC888008801080208 +3800:04001FF010101FF010101FF010001FFC10001FFC4924849C0100210821083FF8 +3801:2040208821FC2108AA52ABFEA850A988AE26A8C0AB10B864CB88003000C00700 +3802:21082108210827D0A91EAF94A924AFD4AA14ABD4AA54BA48CA4804D404240842 +3803:2040202023FE2088A850ABFEAA22AAFAAA22AAFAAA8ABA8ACAFA0202020A0204 +3804:0100210821083FF800007EFC22441A3462C404001FF010101FF010101FF01010 +3805:010041047FFC020013FC240043F88A0813F8320853F8910013F8151010E0171C +3806:200023DE22522252ABDEA800A9FCA924A9FCA924A9FCB820CBFE002000200020 +3807:0100210821083FF820501048FE4801FE7C5044507C501050545052929292310E +3808:200023DE225223DEAA52ABDEAA02AAFAAA22AA72AA22BA22CAFA0202020A0204 +3809:102011FC1088105055FE540055FC552455FC552455FC5C2065FC002003FE0000 +380A:2040207C204023FEAA42AA78ABC4AA3CAA00AA50AA54BB54C4D8045009FE0000 +380B:21083FF800001FF010107FFC44447C7C00003FF80000FFFE10001FF800080070 +380C:0100210821083FF800202220FFBE22423E9422103E102210FFA8242842448282 +380D:010041047FFC08801FFC30805FF890801FF810801FFC11007FFC05401930E10E +380E:20A0209021FE2320A9FCA920A9FCA920A9FEA900A820BBFEC87000A803260020 +380F:108813FE1088100055FC54A854A857FE54A854A855FC5C2063FE002000200020 +3810:010041047FFC000000701F800200FFFE082037D8C4463FF8200827C8244827D8 +3811:0100210821083FF800003FF824483FF802807EFC02803EF802807EFC02800280 +3812:20022FE222822FEAAAAAAAAAAFEAA80AABCAA80AAFEAB90AC5420522092A0304 +3813:208823FE208823FEAA02A9FCA800ABFEA840A8A2AB54B8B8CB54009203500020 +3814:0100210821083FF800403E2022FC22883E5021FE20203E2052FC52209E201220 +3815:010041047FFC004078804BF8524863F852484BF8484868B450BC41224222441E +3816:41047FFC08207FFC01003FF80100FFFE02403C500848FFFE08507E240854198C +3817:2040208023FE2222AAAAAA22ABFEAA72AAAAAA02A820BBFEC850008801040602 +3818:0100210821083FF80A0033B822083A38238820883AB82288FFFE082010102008 +3819:202023FE200021FCA904A9FCA800ABFEAA02A9FCA840BBA4C8D8033400D20330 +381A:2144214425542364A94EABE4A804AA2CA944ABE4A884BBE4C88400E407140008 +381B:108813FE10A8109055FE572055FC552055FC552055FE5D0063FC00880070038E +381C:220022BE23022254A9C8A83EAA0AABCAAD28A928AFEEB928CAA80258044E0080 +381D:108811DC108813DE54885554562255FC550455FC55045DFC650401FC00880104 +381E:22204AA08ABE1FC420A46F24A0282FA82210272822442F820100210821083FF8 +381F:10501190109E13EA548A55D2568A54A45450548857265CA8647000A801240060 +3820:2040207C204023FCAA44ABF0AA44AAFCAAA8AAF8AAA8BAF8CA0005FC05540BFE +3821:202023FE200023FCAA20ABF8AA20ABF8AA20ABFEA802BAAAC854018806A400C2 +3822:21083FF802001FF011101FF012101FF004A808BA3082C27E01007FFC0C48763E +3823:200023FE222222CCAA44ABEEAA44AAEEAB54AA44AA10BA90CA9E049004900BFE +3824:202023FE200021DCA954A9DCA888ABFEA888ABFEA888BBFEC894018802A400C2 +3825:27FC244427FC2444AFFCA800AFBEAAAAAFBEAAAAAFBEB840C84007FC00400FFE +3826:20A821FC22AA23FEAAAAABFEAAAAABFEA800ABFEA800B9FCC90401FC008803FE +3827:202023FE224823FEAA48AAECAB5AAA48AA50ABDEAA50BBDCCA5005DE04500850 +3828:2154212423DE2154ABAEAD54AFFEAC92AFFEAA44ABDEBA44CBD4020C0284034C +3829:0080008021402220241020003FFC0000092009200920112011222122411E8000 +382A:00007FFC0100010001000100010001F8010001000100010001000100FFFE0000 +382B:00007DF01110119011521D12E20E440001003FF80100FFFE028004401830600C +382C:00007CF81088108810881CF8E00041003FF801000100FFFE028004401830E00E +382D:00007C7C1010101010101010FEFE000000007C7C1010101010101E10F0FE4000 +382E:220014007F7C141055103610FF9000103E10221022103E10221022103EFE2200 +382F:00001FF01010101010101FF01000100010001FF81008100810081FF810080000 +3830:10007E7C124412441244227C4A4484001FF0001000101FF01000100410040FFC +3831:3FF000103FF020041FFC08207FFC08200FE008200FE00820FFFE082010102008 +3832:0840084008407F4249444948495049604940494049404B4208420842083E0800 +3833:060001000280044008203118C10601001FF01110111011101150112001000100 +3834:1000100011FC7C24542454A454A454A45524542454245C441044108411141208 +3835:02000100FFFE1000100010001FF8010001003FF8210821082128211001000100 +3836:1020102010407CF854885488548854885488548854885C8A108A110A11061200 +3837:100013FC10847C8854885490549C54845544554455285D281210122814441182 +3838:1020102010207C2055FC54205420542057FE542054505C501088108811041202 +3839:1020102010507C5054885504560254885488548854885C881088110811081208 +383A:1020102010207CA854A454A2552255205624542454285C081010102010C01300 +383B:020002083FD002200240FFFE010002800C801FF82888488888A8089000800080 +383C:1004100E10F07C805480548054FE54885488548854885C881088110811081208 +383D:10401040107C7C8455885650542054505488570654605C10100810C010201010 +383E:10001EF8228862A894920882307EC10001003FF8210821082128211001000100 +383F:0880088828902EA028C028842E84F17C01003FF8210821082128211001000100 +3840:0100210811080910092001007FFC410441044384454449244104410441144008 +3841:1020102013FE7C505488550456FA540057FE544054805DFC1004100410281010 +3842:00047FA410243F2451240A040C043114C1083FF8210821082128211001000100 +3843:1010111011107D285544550055FE540054A854A854A85CA810A810AA112A1206 +3844:1040104010807CFE5502560255F25512551255F255125D1211F2100210141008 +3845:10201020107C7C8455485430542054485590543E54425DA41018101010601180 +3846:1080104013FC7D005500550055F854005550555055505D50125012521452180E +3847:100013FE11207D28552855E855285528552855E855285D2A113A13EA10261020 +3848:1080108010F87D08561055FC55245524552455FC54505C50109010921112120E +3849:201023882088F8FEA890AB90AA24AA24AA38AB88A890B89020A420BE22822100 +384A:10401040107C7C8455085600542055CE5502550255CE5D021102110211FE1102 +384B:1020102013FE7C5054885524562255FC552455FC55245DFC10221022101E1000 +384C:100011FE11027D7A5502557A540054FC548454FC54845CFC1084108410941088 +384D:02001FF010101FF010101FF00200FFFE08203118DFF611101150112001000100 +384E:1040104810847DFE542057FE548855245642558854105C621184101810601380 +384F:204020A02110FA08ADF6A800ABC4AA54AA54ABD4AA54BA5423D42244225422C8 +3850:210820882090FBFEA800ABC4AA54AA54ABD4AA54AA54BBD422542244225422C8 +3851:0610381008527E5408901C282A284844088201003FF821082108212821100100 +3852:1008101C11F07D10551055FE5510557C5544557C55445D7C11441244127C1444 +3853:200023FE2222F820ABFEA820A9FCA924A9FCA924A9FCB82023FE202020202020 +3854:00407F40127E0C88FF4819482A504820A850118C01003FF82108212821100100 +3855:1088108813FE7C8854A8542055FC55245524552457FE5C201050108811041202 +3856:1008103C11E07C2057FE542055FC552455FC552455FC5C2011FC102013FE1000 +3857:2004201E23F0FA1EAA10AAFEAA92AA98AAF2AA8EAA80BAB822A824AA254A2A86 +3858:1088105010007DFE545055FC545457FE545455FC54505CD81154125210501050 +3859:1020104011FC7D04555455245554550455FC540055125DD4111811521192110E +385A:1088108813FE7C8855FC548857FE542055FC552455FC5D2413FE110411141108 +385B:1088108813FE7CA8541057FE5480548054FC540054A85CA810A810AA112A1206 +385C:2100211023DCFA54AD54AA88A908AAF4AC02A800ABFCB8402150224825442080 +385D:2020247C2284F948A830A8CEAE10AA7CAA10AA7CAA10BAFE2210221025FE2800 +385E:202021FC2124FBFEA924A9FCA820A9FCA924A9FCA840BBFE208821D02070238C +385F:2090209027FEF890ABFCAA94ABFCAA94ABFCA800A9F8B90821F8210821F82108 +3860:202027A420A8FA92A914AA08ADF4A802ABF8AA08AA08BBF8220821102FFE2000 +3861:200023FE2200FA04ABF4AA04AAEEAAA4AAA4AAECAA04BAA42244227425942008 +3862:21FC210421FCF904A9FCA800ABFEAA52ABFEA800ABFEB88020FC208421142208 +3863:102008207F3E0020223E1402FFBE88A0093E7F20493E49204D3E4A200822081E +3864:205022522154F850ABFEA888A850ABFEA820A9FCA820BBFE20A8212426222020 +3865:203E27C02244F928ABF8A840AFFCA800ABF8A808ABF8B80823F82544252A28FA +3866:1020101011FE7D0254FC54A8553054FC558454FC54845CFC108410FC10481084 +3867:2040202023FEFA8AA904A812ABD4A848AA8AA974AA02B9FC210421FC208823FE +3868:2148214C22AAF808AFFEA948AB68A94AAB6AA94CAB6CB948216A239A20262042 +3869:210447C88812F3BC20084B92F83E0380AAAAABAA01003FF82108212821100100 +386A:203E27C42128FBFEAA02ABFEAAA0AAEEAAAAAAEEABA8BA4622F82548243029CE +386B:100011FC210421FC450445FCF88009FE1222112229524502FDFA440200140008 +386C:1110212045447978111025247D7C05240110FFFE20803E88225222224A5A8586 +386D:441049245E7844104A285F7C40007FFE441049245E7844104A285F7C40007FFE +386E:49204920AABEEBA04940AABCEB802900FFB8240825082508228A528A45868882 +386F:010000803FFE2000201020F827802080208020FE3F802080408240828082007E +3870:010000803FFE2000200027F82080208020803FFE208020804080408082800100 +3871:010000803FFE21002100210023F0221024202820204020C0412042108C083006 +3872:010000803FFE20002090208820FE2F802080208820902060204241A24E1A8006 +3873:010000803FFE2000203C27C024402440244027FE242024202412450A46068402 +3874:010000803FFE2080204020402FFC20002408220822102110412040009FFE0000 +3875:010000803FFE20802140222024902848304627F0201020204340408080400020 +3876:010000803FFE2000200027F8240824082408240827F824084120421084080804 +3877:010000803FFE2000208020802FFC21C022A022A02490288857F4408080800080 +3878:010000803FFE2200220023FE2500290031F82100210021FC4100410081000100 +3879:010000803FFE2000200023F82208220823F82208220823F8420842088FFE0000 +387A:010000803FFE2000200027F82408240827F82408240827F8400040009FFE0000 +387B:010000803FFE20002180263C24A424A424A424A425A426B42528412042208420 +387C:010000803FFE208020802FF828882FF828882FF820842048203041D45E0C8004 +387D:010000803FFE2000204027F820483FFE204827F8204027FC40405FFE80400040 +387E:010000803FFE200027F8240827F8240827F82484248824502420451846068400 +387F:010000803FFE2208210821102FFE204024442444244427FC2084410046009800 +3880:010000803FFE204020402FFE204027FC2444245424E8215042484C4680400040 +3881:010000803FFE208021F022102D2020D023202C7C218426884050406081800E00 +3882:010000803FFE2040208027F82408240827F82400240027FC4404440487FC0404 +3883:010000803FFE2100208027F8240827F8240827F8248224442428451046088406 +3884:010000803FFE200020002FFC200023F822082208220823F82000420841109FFE +3885:010000803FFE200027FC204023F820402FFE211021102FFE2110421042108410 +3886:010000803FFE200027FC2444244427FC2444244427FC204027FC404040408FFE +3887:010000803FFE210020802FFC200027F8200027F8200027F82408440847F88408 +3888:010000803FFE2280224027FE24402C4037FC2440244027FC4440444087FE0400 +3889:010000803FFE2000218C2E70221022103F90261E27702A902A1252124212820E +388A:010000803FFE20802FF82140222024103FFE201027D0245047D0401080500020 +388B:010000803FFE22202278248825502C243448259E242224642598441044608580 +388C:010000803FFE20002EFC2A082AE82CA82AA82AA82AA82AE84EA8480888280810 +388D:010000803FFE200021102FFE2110204023F8224822482FFE20A0411046089806 +388E:010000803FFE2000203827C020402FFE20402140265C2444275C444447FC8404 +388F:010000803FFE204020A023182DF62000278424A427A424A427A4448444948588 +3890:010000803FFE200023F0221023D0225022502FFC280429E4292449E448148808 +3891:00803FFE2280224027FC24402FF8344027F8244027FC248040805FFE80800080 +3892:00803FFE2040207E20402FFE28422BF8284229FE290429FC490451FC910427FE +3893:00803FFE204027FC21102FFE200023F8220823F8220823F840404FFE80400040 +3894:010000803FFE220024482848305422A425002C103490249C44904550863E0400 +3895:010000803FFE22282224257E29482E4822FE254829482F7E42484448887E1040 +3896:010000803FFE200020782F80249022A03FFE2490280837F6449047F0849007F0 +3897:00803FFE203827C020802FFC211027F8391621F020002FFE480249F2891209F6 +3898:010000803FFE221021202FFC21202FF821283FFE21282FF820004A4849249124 +3899:00803FFE251025103FD0253C271422142F942A942F9422144FA4422483541C88 +389A:00803FFE208020F820802FFC28842BF028882BF82A482BF84A4857FC9084230C +389B:00803FFE204020A0211022082DF6200027BC24A424A427BC411042A884440882 +389C:00803FFE22083FFE220823F8200027FC244427FC244427FC40404524850A08FA +389D:010000803FFE24002706293832082F882ABE2F882A9C2FAA4008554895482008 +389E:00807FFE40007E7C52244A1452244FF848884FF848884FF842205FFC44108808 +389F:00000020F82008201020113C2120792009200920492031FC10002C0043FE8000 +38A0:000003FCFA040A0412F4129422947A940AF40A944A04321412082C0043FE8000 +38A1:0440247C24A83D5004287DFE24884448841808200820FFFE0820102020204020 +38A2:082049202A3E7F4841A85D2855105D28424608200820FFFE0820102020204020 +38A3:2420FF20247E7EC482287A104A287AC6040008200820FFFE0820102020204020 +38A4:084008487F4408440840FFFE104010401F401140112021222112410A4A068402 +38A5:00207F28412441245D20413E41E05D205520552055205D2441144114450C4204 +38A6:0020FF2802247A244A207A2E00F0FF2002207A204A204A107A12020A0A060402 +38A7:00007FF0001000103FF0200020003FF800080008FFE800080008000800500020 +38A8:00007DFC0420042004207C20402043FE40207C20042004200420042028201020 +38A9:00407C40048004FC05047E044004410440847C44044404040404040428281010 +38AA:0000F9FC0800080008007BFE40804080410079FC080408040804080450282010 +38AB:0020F8200820082009247924412441244124792409240924092409FC50042000 +38AC:0040F840084008400BFE7840408040904090792009200A480A440C8451FE2082 +38AD:00207C200420043E04207C20402041FC40847C88044804500420045029881606 +38AE:0080F88008FE09000A207920412C417443A47924093409280922090250FE2000 +38AF:0000FBFC0A040A040A047BFC4220422043FE7A200A200A100A120A8A53062202 +38B0:0010F810081009FE09127914411041FC414479440928092809100A2852442482 +38B1:0020F840088809040BFE780240204020412879240A240A220C22082050A02040 +38B2:00007CF804087CF840807CF804080408285010200000FFFE0000082010102008 +38B3:00807C8004FE050006007C1C41E0412041227D24052805100510054829841102 +38B4:00003FF8000800083FF8200020003FFC00043FE42AA424A42B2424A43FE80010 +38B5:0020F8200850088809047A0241FC4000400079FC090409040904090451FC2104 +38B6:0000FBFE08200820084079FC41044104410479FC090409040904090451FC2104 +38B7:00107C920492049204FE7C204020407E40827D42042404280410042028401180 +38B8:0020F7201120113E1144F744844484A48428F7281110111011281148AA844502 +38B9:00407C2005FC040004887C5043FE402040207C2005FC04200420042028201020 +38BA:0040F82009FC08000888785043FE404040407BFE088809880850083050C82304 +38BB:001CF9E0082008200BFE78A84124424240407BFE0888090808D0083050482184 +38BC:00207D2404A404A804207DFC4124412441747DAC052405240524050429141108 +38BD:0000F7EE124212421242F3CE8248824883C8F24E124212E217421042A0544048 +38BE:0000FBFE0850085009FC79544154415441FC7820082009FC0820082053FE2000 +38BF:0080F8BC0884090809FE7B204520417C4190791009FE09100928092851442182 +38C0:0020F8200BFE082009FC790441FC410441FC790409FC09040BFE088851042202 +38C1:0088F8880BFE088808887BFE408041FC43247DFC092409FC092409245124210C +38C2:0000FBFE080009FC0904790441FC400043FE7A8A0A520BFE0A220A22522A2204 +38C3:0200F11E17C212021482F7DE805087908490F79E1482178214821482A4944588 +38C4:0200F97E08400C7C0A4478FC4140467E422078200BFE087008A8092452222020 +38C5:0000FBDE08880AA80BFE798842DA44A641F87908090809F80908090851F82108 +38C6:07FCF24817FC1C4616ECF55486EC855486ECF454140817FC104013F8A0404FFE +38C7:08000FE010201FC000407FFC09003200CC803080CFF80888088808A808900080 +38C8:20203C3C444478780808FEFE5050A8A84848BEBE2A2A2A2A2A2A2E2E08080808 +38C9:000400047F08081008200844080408080810082208420F04F008401000600180 +38CA:040008001FF02820444003801C70E10E0600384001880610382000C007007800 +38CB:11001104110411087FD01122190215041108FFD0112211021104210821104160 +38CC:08000804080408080F900822080208047F08411041224102410441087F104160 +38CD:08000804100422084110FFA2008200047F08411041224102410441087F104160 +38CE:010002001FF010101FF010101FF001001150218846441990062018C007003800 +38CF:08000804FF84140822104122BE8222043E0822103E220802FF84080808100860 +38D0:080010047F0441087F1041227F0208040808E8902D222A024904888828101060 +38D1:02023FC222042F8822903FC222822F8422082F902A822F824A844F888A9009A0 +38D2:410022040004FF888890AAA29C828884FF8800107F2241027F0441087F104160 +38D3:08020DC228443D484490A9423242C404248815107FC20E0215042488C4500420 +38D4:0800080013FE2020482008201020302050209020102010201020102010A01040 +38D5:084008401040204048400FFE10403040504090A010A010901110110812041402 +38D6:08400840104020404BFE0840104030A050A090A0111011101288124814441802 +38D7:08400820102021FC49040904110431FC51049100110011001100120012001400 +38D8:08800880110021FC4A040C0411E431245124912411E411241004100410281010 +38D9:104010402040404097FC144424446444A44427FC244424442444244427FC2404 +38DA:08000BFC120422044AF40A04120432F452949294129412F41204120412141208 +38DB:0840084010A021104A080C0613F83000500093F8120812081208120813F81208 +38DC:100217E22242424A924A124A224A67EAA24A224A224A224A22422442244A2844 +38DD:08280824102420204BFE082011243124512493A8112811101212122A14461082 +38DE:08900890110821484A440C92110833FC509490901090109011121112120E1400 +38DF:08200820102023FE4820082011FC3000500091FC110411041104110411FC1104 +38E0:10401040207C40849588165024206450A488270624602410240820C020202010 +38E1:111011102110421092FE169226926A92A29222FE229222102210221022102210 +38E2:09080888109023FC4824082413FC3220522093FE106210A2112A122414201020 +38E3:10401040204047FE9040145022486248A55428A220A021102110220824042802 +38E4:08500848105E23E44828083210CA370650509048105E13E41028103210CA1706 +38E5:111011102110427C921016102AFE6208A20822FE220822482228220822282210 +38E6:08380BC0104020404FFC095012483486508097FC1110121011A0106010901308 +38E7:11001208244847889108124827C86008A7C8244827C8244827CA244A244A24C6 +38E8:12101210221042109F7E151025106510A57C29442544224422442544257C2844 +38E9:111011102110411097BC111021106338A3B82554255429922110211021102110 +38EA:083C0FC01244212848000BFC1080308057FE910011F812881250142018D81306 +38EB:0808083C11E020204BFE082011FC312451FC912411FC102011FC102013FE1000 +38EC:080009F81108210849F8080017FE310851F8910811F81108113E17C810081008 +38ED:08000888125222224A520A8A120233FE50889144127A10881150102010D81706 +38EE:0820082013FE202048200BFE128A325252FA9222122212FA12221222122A1204 +38EF:08000BFE120222024BFE0A101292325452FE928212FE128212FE1482148A1884 +38F0:081C09E01020212448A80BFE107030A8512492221040102412A2128A14881078 +38F1:08200BFE102021FC48200BFE100031FC510491FC110411FC110411FC10881104 +38F2:121012102A904A909FBE102420546F94A01420142F94288828882F9428942022 +38F3:1100110023FC46A89AA812A827FC62A8A2A822A82FFE200022A8225424542000 +38F4:1110111027FC411091101FFE204067FCA44427FC244427FC2000211022082404 +38F5:10101410227C401090FE1044262862FEA210227C221022FE2210221025FE2800 +38F6:10401FFE200047FC940415F4251467FCA00023F8220823F8220823F820002FFE +38F7:1080104027FC444492A8129424746000A3F822A82FFE200027FC204021402080 +38F8:150815482DA8453E9FA8124824486ABEA30825882988237E25402920251E2200 +38F9:1040102027FE44A894FE1550277C6550A57C2550257E254028A42A8A328A2478 +38FA:0400040004000400251024882444444404000400040004000400040004000400 +38FB:1010082004400280010002800C603018C0060100088848844812481287F00000 +38FC:1000100011FC1044184455445144514491441244104410841084110412281410 +38FD:02000200FFFE042008201C4003800C7070080100088848844812481287F00000 +38FE:100013FC11041144192454A85088508890501050102010201050108811041602 +38FF:10401040108018FC550452045004910410841044104410041004100410281010 +3900:030000802140222024102808300620003FFC0100088848844812481287F00000 +3901:00003FF801000100FFFE0280044008203018C106088848844812481287F00000 +3902:00003FE0082008400C780A081210112020C043308C0E02005104511290120FF0 +3903:10401020102013FE18805480508050FC90841084108410841104110412281410 +3904:10201020102013FE1820542051FC512491241124112411341128102010201020 +3905:7FF80200420042007FFC0480088010842084C07C010008844892481287F00000 +3906:1008101C11E01100190055FC5144514491441128112811101110122812441482 +3907:1010107813C0104018405440504057FE904010A010A010901110110812041402 +3908:1000104010201010189054805080528492821282128214881088108810781000 +3909:100013FC1010191055105110521093FE10301050109011101210141010501020 +390A:1004130810D01020185054885104500090041104108810501020105011881606 +390B:101010901090188855085104520495FA10881088108810881108110812281410 +390C:10881088108810881BFE548850885088908810F8108810881088108810F81088 +390D:00007DFE1040108011FC10041E04E00440280110088848844812481287F00000 +390E:100010007E7C1244124412442244227C4A448400010008844892481287F00000 +390F:1080108010F811081B1054A0504050A093181C0610C010201010118010601010 +3910:0100010001FE010001003FF8200820083FF82008010008844892481287F00000 +3911:10201020102010201BFE54405040508090FC1184128410841084108410FC1084 +3912:10201020102013FE18505450508851249222102011FC10201020102010201020 +3913:10401040104010401BFC544050E050E091501150124815F41842104010401040 +3914:1088108810881908557E53085508914811281128110811081108110811281110 +3915:10201020112411241924552451FC502090201124112411241124112411FC1004 +3916:10401020102013FE1A0254045000500093FE1020102010201020102010A01040 +3917:010001007FFC01003FF80200FFFE082012102208C2261290124822480A000400 +3918:1080108010F811081A10542053FC50049004100411FC10041004100413FC1004 +3919:3FF8200820083FC8204820483FC8200820083FF8010008844892481287F00000 +391A:10801080113C1A0054805080517E930815081108110811081108110811281110 +391B:10801088109C1970551053105510911011FE11101110111011101110117C1100 +391C:202820242024202033FEAA20A224A224A32422A8222822102212242A24462882 +391D:10401020102013FE18405488510453FE909210901090109011121112120E1400 +391E:1040102013FE1A025400503853C090401040107C17C0104010421042103E1000 +391F:044004403FF8244824483FF8244824483FF80100088848844812481287F00000 +3920:7F84082410243F2451240A24040408043014C008010008844892481287F00000 +3921:200420042FC422143214ABD4A254A454A6542554289420942104220424142808 +3922:1040104017FE1080190055FC5304550499FC1104110411FC1104110411141108 +3923:101008207FFC08200820FFFE0820102020204120088848844812481287F00000 +3924:1020102013FE12221A2257FE5222522293FE1020112010A0104010A011181606 +3925:10401020102017FE18405484510853F090221044118816101020105011881604 +3926:204020402FFE3040A840A7FCA444A44427FC2040224021402080214022302C0E +3927:1008101C11E01100190055FE51005100917C1144114411441144127C12441400 +3928:10881088108810881BFE548850885088908817FE100010881084110412021402 +3929:08000FF010202C4003801C70E00E1FF0101010101FF002005104511290120FF0 +392A:0000FFFE100010F83E884288A4A818941084207CC10008844892481287F00000 +392B:040004007FFC08001FF028104FF088100FF0081008500A205104511290120FF0 +392C:1020102011FC18205420502053FE90001020102011FC10201020102013FE1000 +392D:1010107813C01040184057FE50A0511092081516111011101110121012101410 +392E:2200140019FC24204C2014F82420442005FC2800110008844892481287F00000 +392F:100013FE120212521A8A5706520252FA928A128A128A12FA128A1202120A1204 +3930:0900090011FE1280348050FC9080108010FC1080108002005104511290120FF0 +3931:100013FC1000100019F855085108510891F81000110810881090100017FE1000 +3932:010001007FFC11101110292845440280044008203018C106088828A4282447E0 +3933:100013FE10101820546850A453229020100011FC110411041104110411FC1104 +3934:20002FFE248024903490AF90A490A490A49027902490249224D22F92208E2080 +3935:00407E40047E08880E881948E850082008502888130602005104511290120FF0 +3936:10901088108013FE18A054A850B050A490A810B01124112A1132122212DE1400 +3937:1040104010A011101A88544651F050109020104013F812081208120813F81208 +3938:1040104013FC18405440504057FE909012941292149219121110121014501820 +3939:105010481048184057FE504052449164116810D0115012481444104211401080 +393A:208020402FFE22003200AA00A3F8A000A2482248224822482248244A244A2806 +393B:0600387C224432642A5422442A54324804401840610008844892481287F00000 +393C:1110111011101390193C5514511457D4911411141214129417D4122410541088 +393D:1020102013FE182055FC504053FE9048108810FE110811481228140810281010 +393E:100013FE12021252188855045020502093FE1020107010A81124162210201020 +393F:1040108017FE11101A48544653F85248924813F81248124813F810421042103E +3940:1040104013FC1040184055F8510851F8910811F8110811F81108110817FE1000 +3941:010001007FFC01001FF01290129052905FF040007FFC02005104511290120FF0 +3942:100013F8120813F81A0857F8500053FC901017FE101012101110101010501020 +3943:100013DE125212521BDE5652525253DE920212021202120212021202120A1204 +3944:1020102011FC1820542053FE50889144124210F8118812501020105011881606 +3945:101C13E010841A445548511057FE9402100013F81108111010A0104011B0160E +3946:1040104013F81848544857FE5048904813F8144412E811501248144611401080 +3947:10501048105E13E41828543250CA570690501048105E13E41028103210CA1706 +3948:10201020FE3E9220922092FC9A84948410FC1100088848844812481287F00000 +3949:1040102011FC100019085490500053FE9000100011FC11041104110411FC1104 +394A:200027BC24A424A434A4AFBCA4A4A4A4A4A427BC24A424A424A424A42AA4314C +394B:0840082017FE104030A451A89290148810C41082010008844892481287F00000 +394C:1100110011FC1A045484549452A4908417FC108411C412A41494108410A81010 +394D:1108110817FE1108190855F85108510891F81108110817FE1000109011081204 +394E:0C80708011FCFD24322438445444508491041228111008844892481287F00000 +394F:10901090109013FC1A945694529453FC92941294129417FE1000109011081204 +3950:010002800C603018C7C600003EF8228822883EA8009002005104511290120FF0 +3951:00007FFC02001FF010101FF010101FF010107FFE410288844892481287F00000 +3952:1008103C13C010441A2455285100502093FE107010A810A81124122214201020 +3953:1040104013FC18A05510520857FE900813C812481248124813C8100810281010 +3954:1040102013FE1880550453FE500291FC110411FC110411FC1104110411141108 +3955:01000910092012C0043019086914091012A004401830600C01004884481287F2 +3956:00907890490849086A445C524888FDF84808484048244AA24A8A4C8888781800 +3957:11FC1104110411FC1904550451FC5040902013FE108810881050102010D81706 +3958:22002200227E27123212AA52A252AFD2A2522292241225122FA224A2204A2084 +3959:1020102011FC11241924552451FC50209040102010A41282128A128A14781000 +395A:20402140265C3444AC44A75CA444A44427FC244420A020A02110220824042802 +395B:100013FC10081810542053AE52A292AA12A412A413AA103210A0104017FE1000 +395C:100013FE12221BFE562253FE500091FC110411FC110411FC1104110411141108 +395D:2000277E21243124A93CA724A424A43C242427242126217C210421042A042404 +395E:11041088100013FE184054C25122525490981138125410941112161010501020 +395F:110011F8120813F0181057FE50805144966810B01128166810A4112216A01040 +3960:100013FE10221920553C512052FE940011FC110411FC110411FC110411141108 +3961:100013FC120413FC1A00569852E05284927C122013FE127014A815241A221020 +3962:11081088109017FE1890549053FC52949294130C120413FC1204120413FC1204 +3963:020002007FFC0440092037D8C1061FF001000FE001003FF801004884481287F2 +3964:00207E20145008887F442A2249F8880828101020010008844892481287F00000 +3965:11FC1124112411FC1924552451FC5020902013FE1222122A12FA120A12021206 +3966:3FFC20802FF82080249024902AA83144222024103FFE02005104511290120FF0 +3967:100013FE1020104019FC5504510451FC910411FC1104110411FC100010881104 +3968:102010F8FC20242025FC4800282010F82820442081FC02005104511290120FF0 +3969:1040104413F41848545057FE5040908011F81308150811F81108110811F81108 +396A:1020112410A810201BFE54A851245202904017FE108811081190106011981604 +396B:1040102017FE100019F8550851F8500093FC1204120413FC1204120413FC1204 +396C:2080204027FC3208A910A7FEA402A884204027FC210021F82108220822282410 +396D:1020102013FE102019FC544053FE508891241222112410A81124122210A01040 +396E:1080108011FC1244195455F450845128929011FC1244155411F4108411281210 +396F:007C7F80110808903FF80100FFFE00003FF800081FF800083FF8020851249FE4 +3970:10A0132E122212221BAE5622522253FE902013FE110410881050102010D81306 +3971:100013FE122812281AEE5628522852EE9228122812EE12281228122813FE1000 +3972:01007FFC01001FF010101FF010101FF01010FFFE1010200801004884481287F2 +3973:200027FE2420244035FCAD04A5FCA504A5FC2524242024A829242A2230A02040 +3974:2004203E27E0343EAC20A5FEA522A53825E2251E250029782A48324A248A2906 +3975:200027FE240225FA3442ACC2A52AA46AA4B2252A246A24AA2522244227FE2402 +3976:01007FFE44429FF404403FF80440FFFE082012102108C9062828282447E40000 +3977:010000803FFE20402FFE22482248255428A223182C0620804A444A4A920A01F8 +3978:0000FDFC85248524FDFC9124912491FCFD049000902090149552B542CE488438 +3979:1010545038881104FEFA10483848548891281210010008844892481287F00000 +397A:1020102011FC1820542053FE5080910413FE100213FC12941294129417FE1000 +397B:002800243FFE20A02F2422242FA822182B1252AA4A46848201004884481287F2 +397C:200027FC20403278AA40AFFEA100A1FC220023FC200425542554280420282010 +397D:102013FE102019FC542053FE500091FC110411FC110411FC110411FC10881104 +397E:100013FE124812481BFE5648522053FE924012FC13441244127C120013FE1000 +397F:08207F20087E7E4408A4FF2810101E2822444682810008844892481287F00000 +3980:2020247C22843148A830A0CEA610A27C2210227C221022FE2210221025FE2800 +3981:004027FC104013F8024873F8124813F8104017FC284047FE01004884481287F2 +3982:111009203FFC20044FE808200FE001003FF82108211802005104511290120FF0 +3983:1040102013FC18005508509053FE922012A012FC1320122012FC1420142019FE +3984:010000803FFE222022202F7C222027702AA83224208020484A444A1491F00000 +3985:22A822A827FC32A8AAAAA4E6A800A7FC2444204023F822482248224822582040 +3986:1040107C10401BFE5642527853C4923C120812F0132412A815FE142018A01040 +3987:1040102013FE12501A5057FE5252525293FE1200129212D41298149214D2188E +3988:22082110200027FC3040ABF8A040A7FCA00023F822A822A822A822A82FFE2000 +3989:102013FE102019FC540053FE520291FC100011FC110411FC1104108813FE1000 +398A:108813FE1088100019FC54A850A853FE90A810A811FC102013FE102010201020 +398B:2040204027FC3110AA48A446A3F8A05027FC208023F82D0821F8210821F82108 +398C:01F03E0003F03E0003FA7E0201FE0C20703C1DE2F0221C1E01004884481287F2 +398D:100013DE125212521BDE5488505053FE90201124112411FC1024104010801100 +398E:102011FC102413FE182455FC502053FE900011FC112411FC112411FC100013FE +398F:200027BC24A427BC3420ACA4A39CA000A11027FC211021102FFE211022082404 +3990:101417FE10101BD0541053D0501093D0125013D0125013C8124A13CA11861242 +3991:2008278820883110AFDEA494A4A4A79424942794249424C827882C9420A420C2 +3992:100013FE125212521BFE542053FE500091FC100011FC100011FC110411FC1104 +3993:1110111411D212501A7E5550509052A89128114412441482100812A412521452 +3994:3E1022143E1222103EFE00103E2822283E2822443E44228227004884481287F2 +3995:20202720253C254435A8AE10A528A546A53825102550267E2490247C241024FE +3996:2000279E2492279E3492AF9EA442A422A40A25462542255226322402240A2404 +3997:2110211027BC3110ABB8A554A912A00023F8200027FC20402248244429422080 +3998:10207E20423E7E4442A47E241028FF2820103E284244868201004884481287F2 +3999:11FC112411FC192455FC502053FE922A12FA120A1246102010A4128A128A1478 +399A:401020082108F8BE008050142208FA3E22082A487A3C2AA82AA8528841888008 +399B:0A0033B822083BB820883AB82288FFFE082012102108C9062828282447E40000 +399C:210827FE2148222037FEAA20A3FCA220A3FC222023FE220027F8211020E02F1E +399D:3C20D0404DFC3104C9FC150425FCCC5014502492D50E0A0001004884481287F2 +399E:01007FFC01003FF80000FFFE00023FF00100FFFE00107DFC44907D30489487F2 +399F:31FCCB242D2431FCC924152425FCCC2015FC2420D4200BFE01004884481287F2 +39A0:228422842AA426C4329EAFE4A004A454A28C2FE4210427C4210421C42E142008 +39A1:244424E428A83AAAAEEEA4A4AAAAAEEE224220402FFE20E0215022482C462040 +39A2:1108110811EE12941842540053DE525293D2125213D2121A1294135012101010 +39A3:2100479C828017C0203E6788A4882788210827C829082FE821104884481287F2 +39A4:1040FE40107C7C840028FE2082207C5000887D2644107C5445422F4AF2384000 +39A5:20402FFE284227FC3040ABF8A040A7FCA04027FC24A427FC20402524252A28FA +39A6:2000279E2492379EAC92A79EA482A532251225B2251225F224A2252A261A2404 +39A7:2108252827BE294837BEAB18A5AAA946A3F82208220823F82208220823F82208 +39A8:27BC24A427BC24A437BCAC44A5F4A444A5F4255425F4255425F424E42554244C +39A9:201C2EE02A542A283A7CAC10AAFEAA00AAFC2A042A7C2C0428FC2814294A2A38 +39AA:224822E8230836EAAA1CA2E8A208A2E825B428E2200023F8211020E023182C06 +39AB:252827BE294837BEAB18A5AAA946A3FC220423FC220423FC220423FC21082204 +39AC:200027FC24A424A437FCAA10A2A8A4BEAF68223C24A82FBC20282AA82ABE2020 +39AD:27FC20402FFE28423358A840A358A000AEEE2AAA2EEE20002FFE224825542FFE +39AE:0240022003F87E00020003F83E00020002FC7F100120014001840E447034000C +39AF:004800440040FFFE004008400844104422447F28012800120F32F04A40860302 +39B0:225022482248554088C00040FFFE00400040002400280012003200CA03060002 +39B1:004000487F4400440040FFFE0040084408447F440828082A0F12F02A40460082 +39B2:084008487F4408440840FFFE104010441F4411441128112A2112252A42468082 +39B3:084008487F4408440840FFFE0040084408447F440828082A0F12F02A40460082 +39B4:004800440040FFFE20403E404244B4440C443228C1287E124232424A7E864302 +39B5:0828482448247F20482E88F00820FFA418241C282A2829104912882A08460882 +39B6:004800440040FFFE00407F40104422447F4409283E2808120F32F04A00860302 +39B7:0028FC2404246820102EFEF092209224FE2492289228FE109212922A92468682 +39B8:082808240FA408207F2E41F07F2041247F2449280828FF900812082A08460882 +39B9:00207C2844247C2444207C3E01E0FE2440247E28AA282A104A32924A2A864502 +39BA:00287FA440245F20402E7FF055205224592450A842287F9052124A2A82460682 +39BB:0028EF242124A920652EA9F0212010247E24422842287E104212422A7E464282 +39BC:082808247F2410203E2E1070FFA02224412490A8262822103612222A3E462282 +39BD:20142012FC1023FE40107BD04A50CBD278124BD248147AAC4D4A4AAA48165822 +39BE:020001003FFC200420043FFC2080248024F027903C90249244B2440283FE0000 +39BF:020001003FFC200420043FFC208020802FF821C022A022A04490488890840080 +39C0:020001003FFC200420043FFC20002FF022102220233822884450442088D81306 +39C1:010000803FFC20043FFC208020802FFC208020803FFE2100421044088FFC0404 +39C2:020001003FFC200420043FFC200020002FFC288428842FFC488448848FFC0804 +39C3:1004100410841084FE841084108412841C8C30B4D0C410841004100450042004 +39C4:1000100011041104FD0411041104150419043104D1041104110411FC50042000 +39C5:1000100011FC1044FE441044104412441C443044D04410841084110452282410 +39C6:1020102010201020FDFC11241124152419243124D12411341128102050202020 +39C7:1000100011FC1104FD0411041104150419743104D10411041104110451142108 +39C8:100011FC10041004FC0410FC10801480190031FCD00410041004100450282010 +39C9:1100110011FC1200FC0011F8100014001BF83008D0081008100A100A50062002 +39CA:10201020102013FEFC20102011FC152419243124D12411341128102050202020 +39CB:1040104810441044FC4013FE10401440184030A0D0A010901110110852042402 +39CC:1008103C11E01020FC20103C11E014201820303ED3E01020102210225022201E +39CD:10401020102013FEFC801080108014FC18843084D08410841104110452282410 +39CE:100011FE10081088FC881088110815FE18183028D04810881108120850282010 +39CF:200023FC22042204FA94225422242A243254E2542294230422042204A2144208 +39D0:2000200027BC20A4F8A424A422A42AA83128E1282290229024A82828A0444082 +39D1:1020112010A010A0FC2013FE1022142218423052D04A108A1082110252142408 +39D2:20402020202023FEFA022404200028903090E0902088210821082104A2044402 +39D3:1008103C13D01290FE901290129016901A903288D28812C812A414D454922800 +39D4:2028202420242020FBFE222022242A243224E228222822102212242AA4464882 +39D5:20002080231E2252FA52225222522A523252E2D2235A225420902090A1104210 +39D6:1040102011FC1104FD0411FC11001500197C3108D110112011421282527E2400 +39D7:1090109010901290FE9212D4129816901A903290D290129212D21712520E2000 +39D8:088008882E9028E428842E7CF00000E01F0001003FF801007FFC010005000200 +39D9:1000104010201028FC08108814901A9432A2D2A214C210881188128854782000 +39DA:1000100013FC1100FD0011F01110151019903250D2501210121212925312220E +39DB:04402440247C248024902508040800E01F0001003FF801007FFC010005000200 +39DC:100013FE12101210FE1012FE129216921A923292D29A12941210121053FE2000 +39DD:100010007E7C124422442A7C440080E01F0001003FF801007FFC010005000200 +39DE:1008103C11E01020FC2011FE10401440187C30A4D0A811281110122854442082 +39DF:2200217E21402440FA402240204029403140E2402640224022402240A27E4000 +39E0:1020104010881104FBFE1002142018203128D124122412221422102050A02040 +39E1:10201010101013FEFC201042108415F818103022D0C413081010102850C42302 +39E2:200027FC24042444FC44244427FC2C443444E4A42494251426042404A7FC4404 +39E3:10201120112011FCFD201220102013FE187030A8D0A811241124122250202020 +39E4:10401020102013FEFC40108815041BFE3092D0901090109011121112520E2400 +39E5:10201120112011FCFD201220102013FE18903090D0901090111211125212240E +39E6:20802080210021FCFA04240423E42A243224E3E42224222423E42004A0284010 +39E7:1040102013FC1040FC90110813FC100419503150D1501150125012525452280E +39E8:1008101C11E01100FD0011FE11001500197C3144D14411441144127C52442400 +39E9:200027FC24042404F5F42444244425F43554E5542554255425742446A4464842 +39EA:1040104010FC1104FA0811FE1500197C3144D1441154114811421242523E2400 +39EB:100013FE10201020FC4011FC1154155419543154D15411541154114451142108 +39EC:00007DF0111011901D52F20E440000E01F0001003FF801007FFC010005000200 +39ED:7CFC1088109010881E84F094408800E01F0001003FF801007FFC010005000200 +39EE:10001040119C1104FD041104110415DC19043104D1041104110411FC51042000 +39EF:10401040104411F4FC48105013FE104018803184D29814E010821082507E2000 +39F0:1008103C13C01200FE201220122013FE18203020D12811241222142250A02040 +39F1:0808081C147022104110BEFC001000103E1022FE2210221022103E1022500020 +39F2:2080204027FC2404F848204020402BFC30E0E1502150224824442842A0404040 +39F3:1088FD0412FA1C48F0881128321000E01F0001003FF801007FFC010005000200 +39F4:101010D813941094FC9013FE10901494189430D8D398109010AA10CA52862102 +39F5:100013FE10101020FC6810A413221020180031FCD10411041104110451FC2104 +39F6:1040108011F81108FDF8110811FA150A190C33F8D01810281048118856282010 +39F7:100011FC10201020FC2013FE10501488190432FAD48810881088108850F82088 +39F8:1040102013FE1000FDF81108110815F8180033FCD00810301020102050A02040 +39F9:100011FC110411FCFD0411FC100015FE180833FED00811081088100850282010 +39FA:1020102213B410A8FCA8112412A2104019FC3104D10411FC1104110451FC2104 +39FB:100013FE10401080FD441224106812B0193032A8D06810A41122122050A02040 +39FC:1020102013FE1020FC2011FC102014201BFE3040D0A411A81290148850C62080 +39FD:100011FC11041124FD2411FC1124152419743154D15411741104110451FC2104 +39FE:1080108010FC1154FA5410A415241A443094D108104010A412AA128A54782000 +39FF:1088108810881088FD5412221442102018203120D13C112012A01260543E2800 +3A00:103C11E0102013FEFC2011FC14241BFE3024D1FC107010A81124162250202020 +3A01:1040104013FC1040FC4011F8110815F8190831F8D10811F81108110857FE2000 +3A02:1020102013FE1020FDFC112411FC152419FC3020D07010A81124162250202020 +3A03:1040102013FE1000FDFC110411FC140019FC3008D01013FE1020102050A02040 +3A04:200027FC24442444FDF4244424442FFC3404E5F42514251425F42404A4144808 +3A05:1088108813FE1088FCA8102011FC152419243154D14C11841104110451142108 +3A06:2110211021102110F7BC21102110233833B8E5542554299221102110A1104110 +3A07:102049FC212409F871481230144C00E01F0001003FF801007FFC010005000200 +3A08:1040102017FE1108F890106011981E063108D1F8110811F81108110852082408 +3A09:100013FC120413FCFE2013FE1210128A1B063000D3FC120413FC120453FC2204 +3A0A:1040104013FE1080FDFC122015FE100019FC3104D1FC110411FC110451142108 +3A0B:1040104413F41048F85017FE1040188031F8D308150811F81108110851F82108 +3A0C:08007F7808483E4800487F86410082FC3C4408447E2808287F10082828441182 +3A0D:08083EFE08087F4808283E0808287F1000201FC001003FF801007FFC01000300 +3A0E:100013FE10201040FDFC1154115415541954312CD02013FE1050108851042202 +3A0F:1020112411241124FDFC108014801BFE3090D1101152125412A8142858442082 +3A10:2100217C21442244F244267C2A10221032FEE2382254225422942312A2104210 +3A11:1000108812521222FE52128A120217FE18883144D27A10881150102050D82706 +3A12:1020102013FE1050FC88132611FC1420182033FED000102011FC1020502023FE +3A13:1040102013FE1202FC8811041222112019FC3220D02017FE1020102050202020 +3A14:20142012201027FEF410241025D024123412E5D42554254825DA242AA8465082 +3A15:100013F811081110F91C12E412A41A5434A8D10013FC12941294129457FE2000 +3A16:2008200827C82210FA1E24A427D429143114E7D42114210821C82E14A4144022 +3A17:10401040107E1040FBFC100415FC180433FCD0401240127C1240154054FE2800 +3A18:1020102010A410A2FD2A10101460198036FCD08410FC108410FC108450FC2084 +3A19:101E13E011221094FC40108811F0142018C431FED022102013FE105050882306 +3A1A:1090109013FE1090FD0011FC120411E4192431E4D12411E41124100450282010 +3A1B:100013DE125213DEFA5213DE12021A223222D2221252124A128A1202520A2204 +3A1C:1040107C104013FEFA42127813C41A3C3240D22013FE12881250142054582986 +3A1D:100013FE12021202FBFE121012921A5432FED28212FE128212FE1482548A2884 +3A1E:1020102013FE1020FDFC102013FE1440188831F0D02413FE1022112452A22040 +3A1F:1020112411241124FDFC100013FE140019FC3104D10411FC1088105053FE2000 +3A20:100013FE12021000FDFC110411FC150419FC3040D02013FE1000108851042202 +3A21:200027FE240225FAFC4224C2252A2C6A34B2E52A246A24AA25222442A7FE4402 +3A22:21102212245427D8F810201227D22C4E3440E7D22454245827D02452A552448E +3A23:2120211022082486F91023F82008280037BCE08424A4229424A42084A2944108 +3A24:200027FE24502488FDFE269024FC2C9034FCE490249024FE24802400A7FE4000 +3A25:2008210821082208F2BE24AA2F2A212A322AE4AA2FB620A220222AA2AAAA4824 +3A26:10A0109011FE1320FDFC112011FC152019FE3100D3F811081090106051982606 +3A27:10401048108411FEFC2013FE108815041BFE3524D12411FC1124112451FC2104 +3A28:104013BE12121292FE5212AA132410401BFE3222D22213FE1222122253FE2202 +3A29:1040102013FE1202FAEC122412441A4432EED22412A412A4124E1460549E2900 +3A2A:100011FC110411FCFD0411FC1020152418A83020D3FE1090109011125212240E +3A2B:20902290229C22A0FAD02288228828803000E3F822A822A822A822A8AFFE4000 +3A2C:2040204023F82040F7FE200023F822083208E3F820A4212823102D48A1864100 +3A2D:1040102013FC1204FBFC120012F81A8832F8D20013FC132415FC1502590220FE +3A2E:2020224024EC24A4F4A424E424A424A436E4E40C2110211021102112A212440E +3A2F:2200211E27D22012F7D4245427D8201437D2E092211221DA27142110A5104210 +3A30:1040102013FE1088FD241242109015F818083044D0A81190128814A450C22080 +3A31:204020FC21082650F92020C023202FFE3000E3FC200023FC200023FCA20443FC +3A32:2110211027FC2110F840202027FC2C043444E04027FC20E021502248AC464040 +3A33:1040102013FE1202FC2011FC105014881BFE3008D1E8112811E8100850282010 +3A34:2110211021102FDEF12027C0245C27C43448E7C821102FD021222122A11E4100 +3A35:1108109017FE1000FBC4125413D41A5433D4D24412CC100013FC108451142608 +3A36:1040108011FC1104FDFC110411FC150019FE3100D1FE100212AA12AA5202200C +3A37:1088108813FE1088FCF8102011FC152419FC3020D3FE102011FC102053FE2000 +3A38:1040102013FE1242FC28129412AA14CA18F83300D02011241124112451FC2004 +3A39:108813DE108811DCFC8813DE108814001BFC3004D00411FC1004100453FC2004 +3A3A:1088108813FE1088FC8810F814201BFE3222D33212AA137612221222522A2224 +3A3B:08047F7808403E402A7E3E482A48FF4808A81FC001003FF801007FFC01000300 +3A3C:00407CF8554854307DCE54F854887CF800201FC001003FF801007FFC01000300 +3A3D:200427C420042394FA94239420142FD43554E55427D42554254427C4A4544008 +3A3E:2208211027FC2040FBF8204027FC28403020E1C02044276821502248AD464080 +3A3F:2040207C204027FEF442247825C2243E3500E53825A826AA2AA62940B2FE4400 +3A40:2040207C204027FEF442247825C224BE3480E5FC255426D424B4292EAA24504C +3A41:1040102013FE1202FCA0109011FE15201B2031FCD12011FC1120112051FE2100 +3A42:220422042784F494290C27C425643554E7C42546257C27C425442544A44448C4 +3A43:2040202027FE2492FBFC209023FC289037FEE1082204246220102180A0604010 +3A44:10201124112411FCFC0011FC112415FC192431FCD040102412A2128A54782000 +3A45:100013FE105013DEFE52125213DE10501BFE3222D22213FE1222122253FE2202 +3A46:221421122FD22010F07E2790249024903790E12825A825682928214AA54A4286 +3A47:102011FC102413FEFC2411FC14201BFE3000D1FC112411FC112411FC500023FE +3A48:1040102013FE128AFD0411FC14441BFE3044D1FC108011FC1284148450FC2084 +3A49:204020A0211826E6F80023F822082BF83000E7BC208424A4229424A4A2944108 +3A4A:101C13E010441124FC8811FC1154155419FC3008D7FE11081088108850282010 +3A4B:204023F8204827FEF04823F820402554375CE44427FC2444275C2554A5544844 +3A4C:109017FC109413FCFA9013FE11121BFA350ED1F8110811F8110811F850902108 +3A4D:1210121013DE1528FCA4102013FE10201BFE3222D22A127410A8112456222020 +3A4E:20082788248C278AF48827BE200827883488E7882494279424942494A49445A2 +3A4F:100011FC112411ACFD74112411FC142019FC3020D3FE100012A4125254522000 +3A50:2210221023DE2528F8C4204023FC284037FCE0102FFE201022102110A0504020 +3A51:200023F8208027FCF11022082CA620A037BCE0A023B820A027BC20A0A0A040A0 +3A52:2110211027BC2110FBB825542912280033F8E00027FC204022482444A9424080 +3A53:2C7844486C4844867D7800487C301048FCA41FC001003FF801007FFC01000300 +3A54:40004FDC48544854EFD44A944AA64FC06A9CCA944FD44814528852486454C822 +3A55:100011FC102013FEFA2211AC142019AC3050D0C8132610F8100810D050202010 +3A56:100013FE100011FCFD2411FC15241BFE3000D1FC112411FC112411FC500023FE +3A57:244427FC212023FEF6202BFC222023FC3220E3FE220027FC2108211EA2024C1C +3A58:1104108813FE1020FDFC102013FE145419923090D3FE109010D4138A509621A2 +3A59:2080204027FE2512FBFC211027FC291037FEE110224825F428422040A7FC4000 +3A5A:211027FC211027FCF40423F8200027FC3080E14426A8217026A82126A6A04040 +3A5B:27FC244427FCF44425F4255425F43554E5F4244C27FC241427FC2514A4B447FC +3A5C:201027D0251027DEF45027E8250427C43000E3F822A822A822A822A8AFFE4000 +3A5D:204027FE200021F8F90821F820002FFE3402E3F82180264421B82668A1A64E60 +3A5E:2110255425B82910F2A82444200027FC3444E04027FC20E021502248AC464040 +3A5F:1040102013FE1252FDFC105011FC14501BFE3088D12412FA1020112452A22040 +3A60:2080204027FC24A0F7FC24A427FC24003524E5A8253025A4251C2800AAA45452 +3A61:200027FC2100F3F82508210821F83000EFBE2208279E24922CB22492A79E4492 +3A62:210827FE21082000FBFC229422942BFC3028E3FE2220232422A82292A42A48C6 +3A63:27BC24A42294F4A42FFE284227FC3040E3F8224823F8224823F82040A7FC4040 +3A64:214827C8210827D0F55E27E4255427D43554E11427D4220823C82254A55448A2 +3A65:2114211227D22110F1102FFE229026D23292E6D2229426D4228A22CAAF164022 +3A66:10A0109011FE1320FDFC112011FC152019FE3100D3FE1252128A137652522276 +3A67:11FC110411FC1104FDFC108811FC14881BFE3088D12412AA107010A851242060 +3A68:108813DE108811DCFC8813DE108817FC180431FCD00413FC104012A4528A247A +3A69:2400249E25042608F45E245223D2211E3112ED5E25522592295E2920B52C4212 +3A6A:2100213E22082290F4BE2F222122223E34A2EFBE20A220222ABE2A80A8144022 +3A6B:2042239C221023DEFA94229424202BFC3204E3FC220423FC220423FCA1084204 +3A6C:210821CC210A27E8F52E25D8274824CA340AE54C276C2548254A297AA7A64042 +3A6D:22A0244C24A4260CF4A4264C24A42FFE3802E3F02020204027FC2040A1404080 +3A6E:2140226C2244236CFAA423AC22A42FFE3108E2F4244223F8204027FCA04040C0 +3A6F:221023D0241E2FE4F5542FF4254827D431B2E22027C0208827FC2044A3504488 +3A70:211027FE211023F8FA0823F820002FBC34A4E7BC20402FFE21502248AC464040 +3A71:101E13E011221094FBFE125217FE180433C4D27E13C4125413CC128452D42348 +3A72:21102FFE211027BCFCA427BC2140292033FEE22027FC2A2023FC2220A3FE4200 +3A73:2108229423DE26B4FBDE229423DE2A9433DEE21027FC210820902060A1984606 +3A74:27BC24A427BC24A4F7BC24A427BC212033FEE22027FC2A2023FC2220A3FE4200 +3A75:210821EC210A2FEAF9282BC8293E2FE83948EBE82A282B682AA82BF4AAB452A2 +3A76:221023DE25282084F7FE224827FC2C4636ECE55426EC255426EC2444A4544408 +3A77:204027FE249223FCF89023FC20902FFE3108E3FC252221F8212021FEA0024556 +3A78:11FC112411FC1124FBFE12AA17FE1AAA33FED02013FE124210F81150502023FE +3A79:11FC112411FC1124FBFE12AA17FE1AAA33FED00013FE128A10F81088508823FE +3A7A:00100410441044FE4410441044FC774444444444442844285510662844440182 +3A7B:201020107E1042FE84107F1040FC5E44524452445A2854285010942898441182 +3A7C:101010103E1042FEA410181010FC2444C8441F442128D2280C1008283044C182 +3A7D:10101010FE1010FE1010FE1092FC9244FE441044382854289210102810441182 +3A7E:02100F10781008FEFF102A102AFCFF442A442A44FF28082808100E2870442182 +3A7F:1020102020203F3E404480443E4402A40428082810102010212821281F440082 +3A80:00407C401040108010FE11081288FC8810881050105010201050108851042202 +3A81:081008101410141E2210521088FC084400447E44022804280410082808440082 +3A82:201020107F10801E00107E1000FC0044FC440444042805280510032801440082 +3A83:00100010FF90021E02107A104AFC4A444A444A447A284A28021002280A440482 +3A84:282028202820FE3E2A442A44FE44A8A4A828FF28291029102D284A4848848902 +3A85:7FFC01003FF82108228824482118010001FC01003FF00820044003801C70E00E +3A86:021007107810481E481048107EFC484448444844482844284510632849440482 +3A87:0820282028203E3E4844084408447FA414281428141014102528264844848102 +3A88:08100810081E7F10081008FCFF440044084408287F28081008100F28F0444082 +3A89:082008201420223E4144BEC4004400A43E2822282210221022283E4822840102 +3A8A:00107E101210121EFF10121012FC7E44204420447E286228A21022283E442282 +3A8B:00107F1041107F1E41107F1000FC00447F4408440828FFA80810082808440882 +3A8C:0010FC100410681E1010FE1092FC9244FE4492449228FE289210922892448682 +3A8D:082008207F20083E08447F44414482A43C28042808100F107828082828441082 +3A8E:081008100810FF9E08102A102AFC2A445D4488C4082814281210212841448082 +3A8F:101020107F10491E49107F1049FC51447F4424444428FFA80410042804440482 +3A90:081004103F10211E21103F1024FC264425443F44242824284A10492891442082 +3A91:08100810FF90141E2210491088FC7F4449447F4449287F2808100A280C440882 +3A92:101067104110411E7710411041FC7F4414441444142814282510262844448082 +3A93:02100F107810081EFF9008102AFC2A44EBC42A442AA86B28AA10082808440882 +3A94:221022102210221EF790221022FC66447744AAC4AA2832282210222822442282 +3A95:081008100F9E08107F1041FC7F4441447F4449280828FF900810082808440882 +3A96:00107E1002103E1E0210FF9008FC094449442A441C282A28C910092828441082 +3A97:101008107F1E0010221014FCFF44004400443E282228221022103E2822440082 +3A98:082008201420223E4144BEC4084408A47F28492849107F100828144822844102 +3A99:00207F204920493E7F44494449447FA40828FF281C102A104928884808840902 +3A9A:242024207E20243E2444FF4400447EA4422842287E10421042287E4842840102 +3A9B:22102210FF10221E3E1022103EFC22442244FF4440285428621040287E440082 +3A9C:101092109210921EFE100010FEFC10442044FE44AA28AA28AA10AA28AA448682 +3A9D:08100810FF90081E7F1049106BFC5D4449447F4408281C282A10492888440882 +3A9E:0010FF108110BD1E8110BD1081FC00447E4442447E2842287E1042287E444282 +3A9F:10200820FF20003E3E4422443E4400A47F28412841107F10412841487F844102 +3AA0:441028100010FF1E2810FE102AFCFF442A44FE4428286C28AA10292828442882 +3AA1:101008107F10411E08103E1008FC3E4408447F4408283E28221022283E442282 +3AA2:28104B104910491E6B10491049FC7F4408447F44012832280C10122861440082 +3AA3:102008207F20003E3E4422443E4400A47F2841285D1055105D28412845444282 +3AA4:00207F2049207F3E49447F442A442AA4FFA82A282A107F100828FFA808440882 +3AA5:10101E1010107F1E51105C1072FC4E4440445F4451285F2851105F285144BF82 +3AA6:10200820FF20813E00447E4408447EA44A287E284A107E100028244842848102 +3AA7:0810141022105D1E80903E1022FC3E4400447744112855283310552811443382 +3AA8:22101410FF9E08107F1008FCFFC449442A44FFA800287F10411041287F444182 +3AA9:04083F8804887FEE04883F88043C555475D444547FD4444875C8555455548462 +3AAA:00107F101010FF9E2210411094FC1444F7C4144477281428F790142814441482 +3AAB:10101F101010FF9E80907F102AFC5544A2447F44A2A83E2822103E2822443E82 +3AAC:0010EE102210AA1E6610AA1000FC24447F44C8447E2848287E1048287F444082 +3AAD:10101F10101EFF109110FCFC9144BF44AA44BE28AA28BE1080107F285544FF82 +3AAE:00087FC80408FFEE84283588041C359400140014EEF4AAA8AAA8AAB4EEF4AAA2 +3AAF:020001007FFC0820044003801C70E10E01001FF801000100FFFE010001000100 +3AB0:020001007FFC0820044003801C70E10E1110092005407FFC054009203118C106 +3AB1:0080208010F80108FE1009FC092449242924112413FE28502850488881040202 +3AB2:00400440024012400840084001FC7E400040004000407FF80008000800080008 +3AB3:0040044002401240084009FC7E400040004000001FF02008200820081FF00000 +3AB4:00107C10009000500010FE9028502810281E29F028102A104C10481080100010 +3AB5:101010109490585010107C9010501010FE1E11F0101010102010201040108010 +3AB6:0010FE101090105020107C9044504410441E7DF04410441044107C1044100010 +3AB7:0010FE10009000507C104490445044107C1E01F04410241028100E10F0104010 +3AB8:22082248FFA8222822083E48222822283E0E22782208FF080008140822084108 +3AB9:08087F484928FFA849087F4808287F28490E7F781008FF08210872080C08F308 +3ABA:08080848FFA80828EB88AAC8EBA8AAA8EB8EAAF8EB8814081208220841088108 +3ABB:210447C88812F3BC20084B92F83E0380AAAAABAA04401240087EFFC000400040 +3ABC:00000004FF78044004407440547E544854485448744854480448048814880908 +3ABD:0000FFFE0000000C7CF04480448044807CFE4488448844887C88450801080208 +3ABE:100010041E78224062409440087E144822484148BE482248224822883E882308 +3ABF:08004904497849407F401040207E48488848494849487F480848108820884108 +3AC0:00007C0444787C4044407C40007EFE4882488248FE4882488248FE8882880108 +3AC1:11009102AABCBBA09120AAA0BBBE8024FFA492249224A1A48024FFC400440084 +3AC2:100008047F784040524052407F7E524852485E48404855485548558880880108 +3AC3:202010201020FF20202020203E202220225022502250225042884A8885040202 +3AC4:02000100FFFE100010003FF8480884087FE810081F8810882088208842A88110 +3AC5:2020102010500088FD04220220F83C00240027FE248824882488448855088A08 +3AC6:202010200050FE50208821043E22242024A824A4252425224622542088A00040 +3AC7:10100810FF2820443E822210220842204A10840800003FF80008000800080008 +3AC8:10100810FF2820443E822210220842204A1084081FF02008200820081FF00000 +3AC9:2040104010FC0104FE0821FE21003D7C254425442554254825424542553E8A00 +3ACA:2100110011FE0200FC0021FE20083C0825E825282528252825E8440854288810 +3ACB:2080108010FE0120FE2021FC21243D2425FC2524252427FE2504450455148908 +3ACC:2080108010FE0100FE00200021FE3C1024102490249C24902490449055FE8800 +3ACD:2100110011FE0200FC902090215E3D6427542554255425482548455455148922 +3ACE:2100110013FEFC0023FE222239FC282029FC292429FC292429FC48205BFE8020 +3ACF:2100110011FE0200FDFC205021FC3D54255425FC244027FE2488459054708B8C +3AD0:00001FF0101010101FF0101010101FF00000203823C03C04200420041FFC0000 +3AD1:004000407C40444045FC444444447C4444444484448444847D04450402280410 +3AD2:00001FF0101010101FF0101010101FF008200820FFFE08200820102020204020 +3AD3:004000407C8044FE4500460044FC7C0844104420444044807D02450200FE0000 +3AD4:00001FF0101010101FF0101010101FF00200020003F8020002000200FFFE0000 +3AD5:00001FF0101010101FF0101010101FF000007FFC04400440084010422042C03E +3AD6:0200020003F802000200FFFE000000001FF0101010101FF0101010101FF01010 +3AD7:00001FF010101FF010101FF000001FE000400180FFFE01000100010005000200 +3AD8:00007FFC010003000570190CE10201001FF0101010101FF0101010101FF01010 +3AD9:002000207C20442045FC442044207C2047FE4420445044507C88448801040202 +3ADA:08001FF82248444808881108222804101FF0101010101FD0101010101FF01010 +3ADB:000001FC7D0445044504450445FC7C5044504450445044927C924512020E0400 +3ADC:000001F8790849084908490879F8490849084908490879F84800000007FE0000 +3ADD:0008003C7BE04A204A204A204A207BFE4A204A104A104A127A0A4A8A03260212 +3ADE:002001247924492449FC482048207BFC49044888488848507820485001880606 +3ADF:000000F87C8844884488448845067E00440044FC448444847C84448400FC0084 +3AE0:002000207D2444A444A8442045FC7C204420442047FE44207C20442000200020 +3AE1:1FF010101FF010101FF008001FF02820444003801C70E30E00C00E0001800040 +3AE2:00200020782049FC4820482048207BFE482048404840488879044BFE01020000 +3AE3:1FF010101FF010101FF001003FF8210821083FF8210821083FFA0102010200FE +3AE4:00001FF010101FF010101FF0010000801F0001047D88095011202118C5060200 +3AE5:004000407CFC45044688445044207C40448045FC468444847C84448400FC0084 +3AE6:0840084010FC10883550542094D8170614F81488148814F81488108810F81088 +3AE7:00001FF010101FF010101FF0111009200100FFFE0380054009203118C1060100 +3AE8:0040002078204BFE4A024C4478404BFE48884888490878D04820005000880304 +3AE9:010001007FFC01000820FFFE082008201FF0101010101FF0101010101FF01010 +3AEA:01007FFC01003FF80200FFFE08203018D3F61210121013F01210121013F01210 +3AEB:00001FF010101FF010101FF000007FFC044004402448144814500440FFFE0000 +3AEC:00800080790049FC4A044C047BE44A244A244BE44A247A244BE4000400280010 +3AED:00001FF010101FF010101FF001003FF80100FFFE00407FFC0840044001400080 +3AEE:088008882E9028E028842E84F07C00001FF0101010101FF0101010101FF01010 +3AEF:1FF010101FF010101FF000003FF820083FF820083FF800007FFC04401842E03E +3AF0:008000407BF84A084A084BF84A087A084BF84A404A444A287A104A8803060200 +3AF1:00001FF010101FF010101FF001003FF80100FFFE044024484444884211402080 +3AF2:002000207BFE482048204BFE7A024C0449F8481048207BFE4820002000A00040 +3AF3:00003FFC20002FF820003FFC24482530260E20002FF828084FF848088FF80808 +3AF4:004000447BF4484848484FFE782048404BF849104A207DFE4820002000A00040 +3AF5:0090009078904F9E4890489048907B9C4890489048904F9E7890489000900090 +3AF6:000001FC780448FC480449FC78004BFE4A22482049FC79244924013401280020 +3AF7:08207FFC08200FE008200FE00820FFFE10102008DFF610101FF010101FF01010 +3AF8:00400040F7FE904093F8904897FEF04893F890409240927CF240954004FE0800 +3AF9:1FF010101FF010101FF00000061838E020803E8022FC3E902090209040908110 +3AFA:08200820082014502288492408201450228841061FF010101FF010101FF01010 +3AFB:00400040F0A0911092089DF69000F7FC94A494A497FC94A4F4A494A404140408 +3AFC:008200827A824BEA4C8A488A4FFA788A4BEA4AAA4AAA4AAA7AA24AE2008A0084 +3AFD:000001F87808480849F8480848087BFE48204A22497448A879244A2200A00040 +3AFE:0020012478A448A848204BFE4A027A024AFA4A8A4A8A4A8A7AFA4A02020A0204 +3AFF:00A00090788049FE49104B104DFC7910491049FC49104910791049FE01000100 +3B00:004000207BFE480049FC490479FC480049FC480848107BFE4820002000A00040 +3B01:00001FF010101FF010101FF0204010A0811042E8140623F8E208220823F82208 +3B02:01FC0124792449FC4924492479FC482048204BFE4A227A2A4AFA020A02020206 +3B03:3FF820083FF820083FF8100020087FFC00043FF820083FF8110822900C60F01E +3B04:1FF010101FF010101FF000003FFC20802FF820803FFC22204A285424A4A20840 +3B05:3FF820083FF820083FF800007FFC44447FFC0000FFFE08000FF810082028C010 +3B06:000003FC7A044BFC4A204BFE4A107A8A4B0648004BFC4A047BFC4A0403FC0204 +3B07:0080008078F849084A104DFC79244924492449244BFE78504850008801040602 +3B08:000001F87908490849F84908790849F848004BFC4A947A944A94029407FE0000 +3B09:000003FE7820484049FC4954795449544954492C48207BFE4850008801040202 +3B0A:1FF010101FF010101FF000FC7F0811103FF80200FFFE080017F02220C1C00E3C +3B0B:008000BC7884490849FE4B204D20797C4990491049FE49107928492801440182 +3B0C:1FF010101FF010101FF00100FFFE00001FF010101FF010101FF0092011102308 +3B0D:002800247BFE482049FC492479FC492449FC492448087BFE4888004800480018 +3B0E:00001FF010101FF010101FF0082012483CF0082014503EF80000248822444244 +3B0F:000003FE780049FC4904490479FC48004BFE4A8A4A527BFE4A220222022A0204 +3B10:000003FC78904A94499848904FFE780049F84908490849F87908490801F80108 +3B11:0200011EF7D2901297D4945497D8F01497D29092911291DAF714911005100210 +3B12:008800887BFE488848244BFE7850488849044A8A48887BFE4888008801080208 +3B13:000003FE785049FC4954495449FC780049FC48004BFE482078A8492402A20040 +3B14:000007BCF08494A4929494A49050F188962690C093109064F388903000C00700 +3B15:022201127914483E4F8848884908793E4B884D484908493E7908490801080108 +3B16:02100110F79E94A494D497949408F4149462980093F89208F208920803F80208 +3B17:0110011479D24A504A7E4D5048907AA8492849444A444C8278084AA402520452 +3B18:002001FC78244BFE482449FC48207AAA4BAE4A224BFE4A227BAE4AAA02AA0422 +3B19:000E03F078444A2449084BF87A084BFC4A044BFE4A027AAA4AAA050204140808 +3B1A:02080108F7C89210949E9FD49064F7949494979494949788F488949404A405C2 +3B1B:004000A0F11896E6900093F89208F3F8900097BC908494A4F29494A402940108 +3B1C:0000FEFE20204444FEFE12127C7C10101EFEE0001FF010101FF010101FF01010 +3B1D:0104008878004BFE4A224AAA4A727A224BFE480049FC490479FC490401FC0104 +3B1E:002002227BFE480049FC490449FC790449FC488049FE4A227D52490201FA0006 +3B1F:4044402440287EFEAA922AD62ABA4A924AFE9200127C2244227C4244947C0844 +3B20:02100210F3D0945E98A493D49054F05493C89048905497E2F00092A402520452 +3B21:000001FC78204BFE4A2249AC782049AC485048C84B2678F8480800D000200010 +3B22:010400887BFE482049FC48207BFE4854499248904BFE789048D4038A009601A2 +3B23:02840284FAA496C4929E97C49004F454928C97C4910497C4F10491C40E140008 +3B24:000003FE7A024BFE4A024BFE79084A524B9C49084A527BDE480002A402520452 +3B25:3FF820083FF820083FF811101FF041047FFC0200FFFE09203558DFF605400920 +3B26:008803FE78A8489049FE4B2079FC492049FC492049FE79004BFC00880070038E +3B27:3FF820083FF820083FF811101FF00100FFFE0A203458CF8601201FF009501320 +3B28:01100110F11097BC911091109FFEF2A892A896EC9AAA92AAF2A895A804480898 +3B29:008803DE788849DC48884BDE48887BFC480449FC48044BFC78404AA4028A047A +3B2A:0FE008200FE008200FE07C7C44447C7C4544FFFE88020FF010101FE00020FFFE +3B2B:0440FFFE044017D2F01C17D03452D7CE0000444482221FF010101FF010101FF0 +3B2C:07BC04A4F7BC94A497BC94A497BCF12093FE922097FC9A20F3FC922003FE0200 +3B2D:001E03E0792248944BFE4A527BFE48044BC44A7E4BC47A544BCC028402D40348 +3B2E:3FF820083FF820083FF84450FE4844FE7D9010FCFE9092FCFE901090FEFE2880 +3B2F:00803FFE0800EFF8A000AFF8A808EFF8A220BD5CB7F4BC94F5DC1C9617F62CA2 +3B30:0100010001003FF8210821083FF8210821083FF801000280044008203018C006 +3B31:28503E7C4890FEFE14281528264A44861FF0101010101FF0101010101FF01010 +3B32:00887C50100011FC7C50548855047DFC555455547D5493FE600020005FFE8000 +3B33:00803C80248025FC25203E202420242027FE3C20242024202420442054208820 +3B34:00907890489048904BFC78904890489048907BFE480048904888490849049A04 +3B35:00403C20242025FE24003C882504260224883C88245024502420445054888B06 +3B36:00207920492049FC49207A2048204BFE4800780049FC49044904490449FC9904 +3B37:00007BFE4A224A224A227BFE4A224A624A727AAA4B224A224A224A024BFE9A02 +3B38:00883C8825FE248824883C502450249425943E98249024B224D24492548E8880 +3B39:00803C8024F8250826103DFC2424242425FE3C24242425FC2424442054A08840 +3B3A:0020792448A849FC48407BFE49084A244C2279FC492449244934492848209820 +3B3B:008878884BFE48A848107BFE4880488048FC780048A848A848A848AA492A9A06 +3B3C:104010407EFE108021FC3E8424FC6484BCFC2440247C3CC42528241024682D86 +3B3D:00003CF8248824F824003DDC255425DC24003DFE248024FC2404440454288810 +3B3E:7F7848485F4C64805F784A4851307F4C00001FF010101FF010101FF010101070 +3B3F:010878884BC848104BDE7A644BD448144BD47854489448E84B8848944A949922 +3B40:0110791049DE4AA84C4478004BFC48204928792849284AB44C6248204BFE9800 +3B41:1000100013F81088FC90109030A038BC54845484910411041104120412281410 +3B42:1020102010201020FC2010A830A438A455225122922210201020102010A01040 +3B43:1020102010401040FC84108431083BF855105410902010401088110413FE1102 +3B44:100013F010901090FC90109030903BF05490549090901092108A108A10861082 +3B45:1000100013FC1000FC001000300039F85400540090001000100017FE10001000 +3B46:00003FE00420047C08043014C10801007FFC01003FF8054009203118C1060100 +3B47:1040104010801088FD0413FE30023890549054909090109011121112120E1400 +3B48:10401040104013F8FC4810483048384857FE544090A010A01110111012081406 +3B49:08200820FFFE08200920010001007FFC03800540092011102108C10601000100 +3B4A:1010111011101110FD1011FE31003900550055F8910811081108120812081408 +3B4B:10201020102013FEFC201020302039FC54205420902013FE1020102010201020 +3B4C:1020102011201120FDFC112032203820542053FE902010201020102010201020 +3B4D:40802080089C17E0E08020842084207C01000100FFFE054009203118C1060100 +3B4E:100013FC12041204FE94125432243A2456545254929413041204120412141208 +3B4F:10201020102011FEFC20102030FC3820542055FE90221022102A102410201020 +3B50:020002007FFC044008203018C10601007FFC01003FF8054009203118C1060100 +3B51:10201020102011FCFC20102030203BFE547054A890A811241124122210201020 +3B52:100011F811081108FD08110831F83900550055FC910411041104110411FC1104 +3B53:1020102010401088FD0413FE30023888548853FE908810881108110812081408 +3B54:1008103C13E01020FD2410A430A8382057FE5420902010201020102010A01040 +3B55:10201020102011FCFC20102030203BFE5420544090401088110413FE11021000 +3B56:10A010A810A41124FD20133E3BE03520512051209120112011141114110C1104 +3B57:010001007FFC0380054009203118C10600003FF82448244824482448FFFE0000 +3B58:1020102010501088FD04120231FC3800540055FC910411041104110411FC1104 +3B59:10201020102011FCFC20102033FE3808540855FE900810881048100810281010 +3B5A:1080108010FE1100FE00101C31E0392055225524912811101110114811841102 +3B5B:1004101E11E01100FD0611783150395055525554914811481144125412621440 +3B5C:1028102410241020FBFE102031243924552453A8912811101212122A14461082 +3B5D:082008207EFC08201C702AA8C826020002001FE00420042008221022201E4000 +3B5E:1020102011241122FA2A101030603B805440504093FC10441084108411141208 +3B5F:044004403FF8044004400440FFFE08203118C1061FF0030005C0193061080100 +3B60:10201120112011FCFD20122030203BFE5490549090901090111211121212140E +3B61:10201020104011FCFD0411043194395455245524915411941104110411FC1104 +3B62:200427C422842294FA942294229477D46A94A294A29422942284248424942888 +3B63:1100108010BC1204FE0412F432943A945694529492F412941204120412141208 +3B64:1020104011FC1104FD4411243124390C550055FE9002100213FA100210141008 +3B65:1040104010F81088FD1013FC3104392455245124912411241050108811041202 +3B66:1040102013FE1202FC00103833C038405440507C93C0104010421042103E1000 +3B67:020004001FF011101090FFFE101012102150402001007FFC05401930E10E0100 +3B68:200027DE20922492FC94249427D870946992A192A292229A2494289022902110 +3B69:1004101E11E01022FD1210943080380855FE5408908810481048100810281010 +3B6A:1028102413FE1020FC2011FC3124392455FC5524912411FC112411241124110C +3B6B:1020102010A810A8FCA8117432223820542055FC902010201020102013FE1000 +3B6C:100013FE10401080FD441224306838B055305228906810A41122122010A01040 +3B6D:200223E22222222AFA2A23EA210A710A6BEAA12AA12A212A2222222224AA2844 +3B6E:2124212422482248F9242124200077FE6880A1FCA10422882450202020C02700 +3B6F:100013FE11201128FD2811E831283928552855E89128112A113A13EA10261020 +3B70:088028882EF028842E84F17C0100FFFE01003FF821082388255809201110610C +3B71:100011FE1100117CFD541154317C39545554557C911011101110110011FE1000 +3B72:1000105010481084FD24102030503888550652F8908810881088108810F81088 +3B73:1020102211FA1024FC2413FE3010382055FC5488911012FE1410101010501020 +3B74:108012FC12A412A4FEA8129032A838C65420542091FC10201020102013FE1000 +3B75:1100110011FC1204FA0415F43154395455F45154915411F41114100410281010 +3B76:1104110417FE1104FD44102037FE3880548054FC908410841104110412141408 +3B77:11FC1124112411FCFD24112431FC3840544053FE904210821082110212141408 +3B78:1080108010F81108FA1011FC31243924552451FC90501058109410921112120E +3B79:10101388108810FEFC90139032243A24563853889090109010A410BE12821100 +3B7A:1020102013FE1050FC881124322239FC552455FC912411FC10221022101E1000 +3B7B:1020112410A410A8FC2013FE32023A0256FA528A928A128A12FA1202120A1204 +3B7C:1020102213B410A8FCA8112432A2384055FC5504910411FC1104110411FC1104 +3B7D:1040102013FE1200FE1C12F032903A9056FE52909290129012AA12CA14A61812 +3B7E:100013FE12021202FBFE121032923A92569252FE921012921292149214FE1802 +3B7F:200023FC220423FCFA0423FC200071806E3EA422A422242225A2262A24242020 +3B80:100011FC10081010FA2212AA32723A22567252AA932612A21242120213FE1002 +3B81:11841068103010C8FB24102033FE384054FC518492FC108410FC108410941088 +3B82:1FF010101FF010101FF010101FF01010FFFE08203118C1061FF0054009201110 +3B83:101C11E010201020FBFE10A831243A42544053FE9088110810D0103010481184 +3B84:1040102013FE1080FC8011FE31423A2255FA508290F2109211121152122A1004 +3B85:010001007FFC054009203118C90608801FFC30805FF890801FF810801FFC1000 +3B86:1020102010501088FD04128A305039FC542054F8902013FE1020102010201020 +3B87:100013FC10401040FBFE10A031103A0854465040904812641252145211401080 +3B88:1020102013FE1050FC88110432FA3800540053FE902011241122122210A01040 +3B89:211021102110227CFA10269236546A1062FEA210A22822282228224422442282 +3B8A:200827C820482288F93E208827D8715C692CA12AA14821082108210825082208 +3B8B:2100211E27F22112FA1423D4225876546BD2A252A25223DA22542250225022D0 +3B8C:100017FE10401080FBFC129432943AF45694529492F412941294129413FC1204 +3B8D:0820FFFE00003E0822483E4822483E482208261801007FFC05401930E10E0100 +3B8E:100013FE10101020FC6810A433223820540051FC915411541154115417FE1000 +3B8F:2040204027FC20E0F95022482C4673F86800A000A7FC20402248244429422080 +3B90:1020102010A410A2FD2A10103860358056FC508490FC108410FC108410FC1084 +3B91:1008103C11E01020FC2013FE302038A0552C5524912411AC1124112411FC1104 +3B92:100013FE10501050FDFC11543154395455FC5420902011FC1020102013FE1000 +3B93:1100117E11101110FD90115E3B22352A512651429152110C11041104117E1100 +3B94:1008103C11E01020FBFE102031FC392455FC512491FC102011FC102013FE1000 +3B95:100013FE10201040FDFC1154315439545554552C902013FE1050108811041202 +3B96:1088108813FE1088FCF8102031FC3924552455FC902013FE1020102010201020 +3B97:00207E20145008887F442A2249F888082810102001007FFC05401930E10E0100 +3B98:2008278820882290F91E211427E471546B14A314A51425082908211425242242 +3B99:100013DE12521252FBDE100031FC380057FE5080910011FC1004100410281010 +3B9A:010001F801003FF8210822C82D28228824483FF801007FFC05401930E10E0100 +3B9B:100011FC11041104FDFC1104310439FC540053FE90201120113C112012A0147E +3B9C:100013FE12001224FAA412A432E43A3E57E452A492A412A4132E120013FE1000 +3B9D:2000229E22522252F5522112229272526C32A3D2A25A22542250225023D02250 +3B9E:1020112010BE1042FC841310311039285544548290FC10841084108410FC1084 +3B9F:2008200827E82108F93E220823D8765C6A6CA26AA248224823C8224820082008 +3BA0:1088108813FE1088FC0013FE3A023424502053FE907010A810A8112412221020 +3BA1:080008FC2A802CF8488808F8148022FC40000100FFFE054009203118C1060100 +3BA2:108010BC10841108FDFE13203520397C5590511091FE11101128112811441182 +3BA3:00007DFC44207D2045FE7C5048525492650E0100FFFE054009203118C1060100 +3BA4:020001007FFC49241290244818306FEC082008200FE001007FFC05401930E10E +3BA5:10401048108411FEFC2013FE3888350453FE5524912411FC1124112411FC1104 +3BA6:1020102013FE1020FBFE1242348C39F05420504493FE10221128122414A41040 +3BA7:1040108011FC1104FD0411FC310039FE550055FE900212AA12AA140210141008 +3BA8:100011FC112411FCFD2411FC38883544524250F8918812501020105011881606 +3BA9:1020104011FC1104FDFC110431FC390455FC5440902010A4128A128A14781000 +3BAA:100013B811281128FD3A11AA37263A405420502093FE107010A8112412221020 +3BAB:1040102013FE1202FC2411FC382035FC502053FE902011FC1104110411FC1104 +3BAC:1090108811041242FC8811FC3804340053DE50429252114A12521042114A1084 +3BAD:100013FC100810D0FC2013FE328A3A5256FA5222922213FE1222122213FE1202 +3BAE:108013DE108A11CAFC8A13D230A6380854F0542091FC102013FE102010A01040 +3BAF:200027FE240225FAFC4224C2252A746A6CB2A52AA46A24AA2522244227FE2402 +3BB0:1020104011FC1104FD5411243154390455FC5400911211D4111811521192110E +3BB1:1088108813FE1088FC2010A038FC3520502053FE90501050109010921112120E +3BB2:1080108011FC1244FD5411F438843528529051FC9244155411F4108411281210 +3BB3:2044272425282500FD7C2710251075106DFEA710A5102528252825442B442082 +3BB4:10A0112C11241124FDAC1124312439FC542055FC908810501020105010881306 +3BB5:22202120213E27A0FA40223C23A472B46AACA2A4A2FE22A424A424A429A4304C +3BB6:2440225E22922012F7D2211E255275526D52A7DEA152211222122222242A2844 +3BB7:1050104813FC10A0FD22121E311039E0550454FC900011FC110411FC110411FC +3BB8:1044102412281100FD7C101030103B7E551051109128112411441280147E1000 +3BB9:2008200827C82210FA1E24A427D471146914A7D4A114210821C82E1424142022 +3BBA:010001007FFC03800540092037D8C10600007BBC4AA44AA44AA44AA47BBC4AA4 +3BBB:100011FC10A41088FC50102030D83B26542051FC9124112411FC102213FE1002 +3BBC:1040102013FC1204FA0413FC32003BDC5644535492CC124412CC1554144418CC +3BBD:2100223C27A424A4F6A425A424C27F806CBCA4A4A6A425A424942488249429A2 +3BBE:10007E7C42447E7C42447E7C484444445A94610801007FFC05401930E10E0100 +3BBF:100011FC112411FCFD2411FC30A838A857FE54A890A811FC102013FE10201020 +3BC0:22102110211027BEFA40220023BE728A6A88A2A8A2AE22A824A825A8285E3080 +3BC1:20202710257C2500FD442628250075FE6D00A500A57C264424442444247C2444 +3BC2:22A822A827FC22A8FAAA24E6280077FC6C44A040A3F822482248224822582040 +3BC3:1020102013FE1070FCAC13223850348851245222912410A81124122210A01040 +3BC4:08207EFC08701CA82B26C820087C3F8020003FFC20002FF828884FF8480287FE +3BC5:2040202027FE2420FC4025FC252475FC6D44A5FCA45024902BFE281030102010 +3BC6:1040102013FC1000FD08109033FE3A2056A052FC9320122012FC1420142019FE +3BC7:1050105013DE1050FDDC105033DE385054505420902011FC1020102013FE1000 +3BC8:2010201024FE2210FA1020FE209276926AFEA210A238225422922210251028FE +3BC9:1020103E102011FEFD20113C31E2391E550455789192115412FE121014501020 +3BCA:200027FC20402278F2402FFE210071FC6A00A3FCA00425542554280420282010 +3BCB:40004CFE7010422042FC3E84108410FCFE8430FC3884548452FC904810841102 +3BCC:2000227E21102130F84A209A262C724C6A9AA22AA24A22882228251028FE2000 +3BCD:20902290229E22A2FAD423A8209470A46FFEA284A2A422942294228424942888 +3BCE:22082108210827C8F83E27882018779C682CA7AAA4C824882488278824882008 +3BCF:08007F7808483E4800863E782A483E304048808401007FFC05401930E10E0100 +3BD0:00407BFC488049F852204DFC488868F8508840F8408801007FFC05401930E10E +3BD1:20002F3E2120213CF1202F3C282078FE6850AF52A1542148214821442A622440 +3BD2:200E27F020442224F90823FC220473FC6A04A3FCA20423FC2090211022122C0E +3BD3:204020A0211826E6F80023F8220873F86800A7BCA08424A4229424A422942108 +3BD4:01F03E0003F03E0003FA7E0201FE0C20703C1DE2F0221C1E0100FFFE0920711C +3BD5:22402242225C27F0FA5023D0225E73D46A54A254A7F420142294246428242044 +3BD6:1020102013FE1020FDFC1154315439FC540053FE9040102412A2128A14881078 +3BD7:200027BC24A427BCFCA427BC244474446DF4A444A4E42554264C244424542408 +3BD8:2108210827C82108F91E2392202473806808A7C8A10821082594295425242242 +3BD9:2208210827C82210F49E2FD4206477946C94A794A49427882488249424A425C2 +3BDA:1210121013DE1228FD4410A031103A0855F65000900013F81208120813F81208 +3BDB:1020102013FE1020FDFC100033FE3A52545051DC910411DC1050105013FE1000 +3BDC:1088108813FE1088FC2013FE3088388855545222902017FE1020102010201020 +3BDD:2010279024BC24A4F4C427A8211071286946A5C0A53C2524252425A42E3C2024 +3BDE:2080209E21122152FA5E2780209E71126A52A7DEA052201E2552255224122016 +3BDF:10101010FEFE3838545492823FF000101FF00010FFFE111009A005401930E30E +3BE0:102013FE104810F0FC2013FE3242389055F85028912011FC122017FE10201020 +3BE1:10401040FEFC3884550492F42894449492F410845494388854829282507E2000 +3BE2:100013DE125213DEFE10125231CE3800548853FE9088108813FE108811041202 +3BE3:21082FFE21082090F10823FC2C8A71286A50A040A7FC20E0215022482C462040 +3BE4:101010101010FEFE1010545454545454BABA1010383854549292101010101010 +3BE5:10101010FEFE10107C7C54547C7C54547C7C1010383854549292101010101010 +3BE6:211027FC211021F0F91021F0211077FC6910A248A44623F820E0215826442040 +3BE7:2100213C211427D4F91421242FCC7100693CA524A5E4253C2724250024FE2800 +3BE8:100013FE10501050FBFE125232523BFE552450A893FE107010A8112416221020 +3BE9:00107E1022FE1C10227C7714557C2250557E08127F121C162A28492888440882 +3BEA:100011FC102013FEFA2211AC302039AC545050C8932610F8100810D010201010 +3BEB:1040107C104013FEFA42127833C43A3C560053FE924013A4125815B4145219B0 +3BEC:1010FEFE5454929200407BF8084817FE20487BF808400BF8504027FC584087FE +3BED:1040107C104013FEFA4213F832443AFC56A852F892A812F8122015FC1444198C +3BEE:100011FC11541154FDFC108031FE3A4255F25152915211F2104A13FA100A1004 +3BEF:108011FC12881070FBAE10F8312039FC542051FC910411FC110411FC10881104 +3BF0:11FC1154115411FCFC2013FE302039FC550455FC910411FC110411FC110417FE +3BF1:01007FFC11101FF00100FFFE90021FF821007FFC11101FF00100FFFE0920711C +3BF2:2110211027BC2110FBB82554291270006BF8A000A7FC20402248244429422080 +3BF3:2288228827E8FA90241E27E474546854AF54A554255427482548205422942122 +3BF4:1088108813FE1088FC2013FE3202388855245450908811FC128A108810F81088 +3BF5:211027FE211023F8F84027FC204073F86A48A3F8A24823F8204027FC20402FFE +3BF6:1020108812521326FE52128A32223BFE54885144927A10881150102010D81706 +3BF7:212821AA216C2228FAFE264436286AFE6210A27CA21022FE2210222822442282 +3BF8:204023F8204827FEF84823F8204077FE6800A2A4A45223F822A822A82FFE2000 +3BF9:20042FE422842FE4FABE2AA42FE470046FD4A00CAFEC2104254425242924230C +3BFA:00407E40487E7EA043107EFE48AA48AA7EFE000001007FFC05401930E10E0100 +3BFB:01007FFC11101FF00100FFFE82120D2032C00DA032900D883100FFFE0920711C +3BFC:108813FE10881020FDFC102033FE3840548855FC900011FC1154115417FE1000 +3BFD:102017FE140213FCFE2413FC32003AFC568452FC928412FC128414FC14481884 +3BFE:202824FE222822FEF8AA20FE2EAA72FE6A00A27CA244227C2244227C250028FE +3BFF:1124124811241000FBFC129432643A9457FC524893681248136A124A12461362 +3C00:10501190109E13EAFC8A11D2328A38A454505088932610A8107010A811241060 +3C01:200027FC2100FBF82508210871F86800AFBEA208279E24922CB22492279E2492 +3C02:202023FE2202241CFBE0212420A873FE6924A202A5FC212421FC212421FC2104 +3C03:220624382F882892FFA428BC2F8872146FBEAA8AAA882AAC2AAA2BCA22282210 +3C04:20142792249E24F0F794248A249677E26C94A492A79E20702514248A28962062 +3C05:2020201024FE2244FA2820FE209276FE6A92A2BAA2AA22BA2286250028FE2000 +3C06:01007FFC11101FF00100FFFE82823EF802807EFC028001007FFC05401930E10E +3C07:2114211227D22110F1102FFE229076D26A92A6D2A29426D4228A22CA2F162022 +3C08:1010FEFE54549292004027FC104013F8024873F8124813F8104017FC284047FE +3C09:201020102F7E2410F43C29102F7E72246A4AAF30A210227E23382E5424922010 +3C0A:2108210827AA212CF1082FD4201274A26948A108A7AA212C210821942E242442 +3C0B:2100213E250825D0F53E25222FE2703E6922A57EA56225A228BE210022142C22 +3C0C:11FC102013FE1222FDAC102031AC389055FE532095FC112011FC112011FE1100 +3C0D:08407F7C1440FF7C22043E7C22403E7C2242263E01007FFC05401930E10E0100 +3C0E:1020122213FE1090FDFE131035FE391055FE551091FE110013DE125212721206 +3C0F:110811EE12941020FBFE100030F8388854F8500093FE120212FA128A12FA1206 +3C10:2008273E2590255EFD64265E250075DE6D52A55EA552265E2452245624A0251E +3C11:20202294228A247AF800228A31446A286AAAA186A0402FFE215022482C462040 +3C12:22A0244C24A4260CFCA4264C34A46FFE6802A3F0A020204027FC204021402080 +3C13:27D0251027DE2450F7E8250427C473F86A08A3F8A20823F8220823F821102208 +3C14:224822E8230826EAFA1C22E832086AE865B4A8E2A00023F8211020E023182C06 +3C15:211027FC204023F8F84027FC200073D46912A7FEA3502534238C208A22962102 +3C16:13D0129013DE1268FBC4128433F8390855F8510891F8110811F810901112160E +3C17:201427FE249024D4FC9427FA35AA6A9661A2A3F8A20823F82040227C254028FE +3C18:208020F8210821F0F81027FE255473BC6FCAA13EA388256A208827FE20882108 +3C19:251825142F90253EF72822682FBE7AA86FA8A23EAFA822283FE8253E28A03060 +3C1A:220C210A27C8229EF55426F4245E77D46914A7DEA554255425D4245E25502490 +3C1B:21102FFE255424E4F8A82AAA2EEE74A46AAAAEEEA2422FFE215022482C462040 +3C1C:2200221E2FC42208F79E24922792749E6F92A49EA79224922FDE2500248C2892 +3C1D:00403E402240227C2284228823203E2020202050205022502C88308821040202 +3C1E:082008200820087E49424984491049104910491049284F287948004400840102 +3C1F:202020207F20807E00427E8400100010FC100410042805280528034401440082 +3C20:102008200820FF7E004200843C10241024102410242825284648444480840102 +3C21:082008201420127E214240849210121012101210122812282228224442448282 +3C22:00207E202420247E244224842410FF1024102410242824282448244444848502 +3C23:142014201420547E55425E845410541054105410542854285D487644C4840102 +3C24:00200020FFA0027E02427A844A104A104A104A107A284A28024802440A840502 +3C25:122052205220527E5242FF845210521052105E104028402840487FC400840102 +3C26:0820082008207F7E084208840810FF901010101024284228FF48414400840102 +3C27:104010402040287C4484FE88432000207C2044504450445044887C8845040202 +3C28:002000207E20427E4242428442107E1042100010242822284248424480840102 +3C29:0820082008207F7E49424984491049107F10481008280A280F48F14440840102 +3C2A:0820082008207F7E08420884FF100010081008107F28082808480F44F0844102 +3C2B:0820282028203E7E4842088408107F1014101410142814282548264444848102 +3C2C:2020202020207F7E41428184791049104910791049284928792801440A440482 +3C2D:10401040FE40287C448482887D200020FE20205040507C500488048829041202 +3C2E:00207F204020407E5E42408440107F10501051105A2854285228914498441082 +3C2F:0020FF200020007E7E424284421042107E1000104228222824280F44F0444082 +3C30:082008207F20087E08422A842A102A105D108890082814281428224442448082 +3C31:072078200820087E7F4208847F10491049107F10492849287F28084408440882 +3C32:0420052004A0FFBE042204447550559055107310029032A8C5A808C410440082 +3C33:0040FE402840287C2884EE88832082208220EE50285028502E88F08841040202 +3C34:102008207F20007E22421484FF10001000103E102228222822483E4422840102 +3C35:1020082000207F7E004222842210551088900810FF2808280848084408840902 +3C36:222022203A204B3E4AA2AA4412502890479080103F102128212821443F442182 +3C37:00200020FFA0227E22423A844A104B904A10AA101228122822A8234442448082 +3C38:082008201420227E4142BE84081008107F10491049287F280848144422844102 +3C39:0110019001507F9E411241225D08414841485D48558855945D54415442D48462 +3C3A:002077205120513E512277444050409077104110491075284228424445444982 +3C3B:08200820FF20083E08227E4400507E90421042107E10422824280F44F0444082 +3C3C:0020FF208820887EFE428884AA10AA10DD10881094289228A128C044FF440082 +3C3D:0020FFA08020BF7EA142BF84A110BF108810FF909228B2288C289244A144FF82 +3C3E:082010207E20427E7E4242847E1010100810FF1020283E28224842444A848502 +3C3F:0E40F0402240927C448420884520F82010202450FE501050FE88288845048202 +3C40:202020207F20917E55427D8421104A10A4107F10912855287D2821444A448482 +3C41:08202A202A203E7E494249847F1000103E1000107F2808282A48494428841102 +3C42:041002103FD0221E2F9222A43FC822882F88220832482A9427144A9452548622 +3C43:082014202220497EBEC204840810FF9014107F105528632841487F4441847F02 +3C44:00207F2049206B7E5D4249847F1008107F1008100F28F0280128554454444082 +3C45:0820FFA008207F7E0042FF8480907F1000107F1041287F28412822440FC4F082 +3C46:08200F2008207F7E49424C847910471040105F1040285F2851285F448A443F82 +3C47:08207F202A202A3E5D220844FF5000907F1041105D1055285D2841447F444182 +3C48:22202220F7A0227E7742AA84225000107F100010FFA80828492888C428441082 +3C49:142055203620147EFF42228414107F1008107F100828FF281C282A4449440882 +3C4A:FF2010207E20427E7E424284FF1091104A10A5101C2820287E28A2441C44E282 +3C4B:3F9004107FD0445EB5920424358812083FC86408BF8824143F9424143FD42022 +3C4C:7F8821083F0821083F1E21D2FF240100FFC852887388528873945AD4F7A410C2 +3C4D:4848444840485E4EA0AAAEB2C0C44E4440448E84AAA4EAEA0A0AAEAAAAAA0010 +3C4E:7F2055207F202A7E49422A8461103E104410FF1049287F2849287F440044AA82 +3C4F:00001FF00000000000007FFC01000100110011F81100110011001100FFFE0000 +3C50:000000103F0800080000FFFE00000400040027002400240024002780F8004000 +3C51:0100010011F811001100FFFE020004000FF0101068200440028003001C00E000 +3C52:0100010011F811001100FFFE0000FFFE00101F90109010901F90001000500020 +3C53:08200820085048504E8849244A12481049FC4804480848884E50F02000100010 +3C54:044004441748147014421742783E020007F0081034200240008003000C007000 +3C55:100011FC100410FC50045DFC500053FE5222502051FC5D247124C13401280020 +3C56:1040102013FE100050885C88515452225000502053FE5C207020C02000200020 +3C57:1020104011FC110451FC5D0451FC510451FC502850245DFE7050C08801040202 +3C58:3FFE29142F1229102F7E20102F2829282F2829442F4429824B40447C84401FFE +3C59:000003FEFC40204020803C80450045FC64049404080408041004200440288010 +3C5A:000000FCFC84208420843CFC44844484648494FC088408841104210442148408 +3C5B:00000000FDFE202020203C7C44444484648495480A2808101010202040408080 +3C5C:00000020FC20202020203C204520453C652095200920092012A02260443E8800 +3C5D:00100010FF902210227E3A124A124B924A12AA121212121222922322422A8044 +3C5E:00800040FC40200023FC3C0044084508650894900890089010A0202047FE8000 +3C5F:00100010FC1021FE21123D14451045FC65449544092809281110222842448482 +3C60:00200020FC20202023FE3C204420442065FC9504090409041104210441FC8104 +3C61:00200120FD2021FC21203E20442047FE6490949008900890111221124212840E +3C62:00400020FDFC210421043DFC4504450465FC9520092209141108214441828100 +3C63:0004001EFDE0202221123C944480442065FE9444088409C81030202840C48302 +3C64:00800086F898209023D03890489E499469D49AB40A94149410942094409480A4 +3C65:00200020F9FC202020203BFE488849446A4298F8098812501020205041888606 +3C66:00200020FDFC205020883D0447FE440865E89528092809E81128200840288010 +3C67:00400020FBFE22022504390049DE4A526A529B520C9A1094111021124212840E +3C68:00400020FBFE2202240438004BFE482068209920093C112012A02260443E8800 +3C69:00200020F9FC202020203BFE4802489468509910089013FE1028204440828302 +3C6A:000001FCFD0421FC21103DFE4510454A6586940009FC090411FC210441FC8104 +3C6B:0020FC2023FE202021FC3D2445AC4574652495FC0820087010A8212442228020 +3C6C:000003F8FA48224823F83A484A484BF868009FFE0A4012441228229043088206 +3C6D:00800338FA28222823A83A464A004A7C6BA49A240A2813A81610222842448282 +3C6E:00200020FDFC212421FC3C2047FE440065FC9504092409241124205040888304 +3C6F:00200124FD24212421FC3C0047FE440065FC9504090409FC1088205043FE8000 +3C70:0040FC2023FE224220203DFC4488445067FE9420082009FC1020202040208020 +3C71:00200040FBFC222422243BFC4A244A446BFC984008A810B4113C21224222841E +3C72:02080108F910200027FC380049104A086C049BF80AA812A812A822A84FFE8000 +3C73:04407FFC04401FF010101FF010101FF00400FFFE10102FE8C2060FE004403F80 +3C74:002003FEF82021FC20203BFE480049FC690499FC090411FC110421FC40888104 +3C75:002001FCFC20208823FE3C8845FC450465FC950409FC090411FC208841048202 +3C76:00820082FBF4208820803BE248024BE46A289A200BE012221142207447888210 +3C77:00A00090FDFE232021FC3D2045FC452065FE950008200BFE107020A843268020 +3C78:001003C8FA7E224022623BD44A004A3E6BC89A480E7E1248124823C842488008 +3C79:000003FEFA2222CC22443BEE4A444AEE6B549A440A101290129E249044908BFE +3C7A:0040007CF84023FC22443BF04A444AFC6AA89AF80AA812F8120025FC45548BFE +3C7B:00401FFEE40047FC400077FC540497FC51102EAE2BFA2E4A4AEE4E4A8BFA1650 +3C7C:00003E78224822482248228622003EFC20442044202822282C10302820440182 +3C7D:0800087808487F4849480886080014FC14441444142825282610442880440182 +3C7E:100008780848FF480848108622007CFC094412442428C82814102228C0440182 +3C7F:10001078FE48104810487C86000000FCFE4482448228BA28821082288A448582 +3C80:00007F78404840485E48408640007EFC504451445A2854285210512898441182 +3C81:20001078FE48824828484486820000FC7C441044102810281E10F02840440182 +3C82:10009278524854481048FE86820082FCBA44AA44AA28AA28BA1082288A448582 +3C83:100010781E4810487E4842867E0042FC7E44004420283E28201022282C443182 +3C84:10001078FE4810487C480086FE0082FC00447C4410287C2810101E28F0444182 +3C85:20001078FE48824810487C8610007CFC1044FE4410287C28441044287C444582 +3C86:08007F7808483E4800863E782A483E30414882840C603118CFE6004006800180 +3C87:08007F7808483E4800863E782A483E3048489FF4282007C01830E18E0C400300 +3C88:08007F7808483E4800863E782A483E30404880867FF8080810303FF8D0081FF8 +3C89:1000FE7810487C480048FE8682007CFC2044CE44AA28EE28AA10EE2828444982 +3C8A:10001F381028FFA880A87F462A00557CA2247F24A2A83E2822103E2822443E82 +3C8B:080008001FE020204040BFF8200820083FF8000020843E9820E020842684387C +3C8C:08001DF87048104810501C5C7084108410841D04F1281212100210020FFE0000 +3C8D:1010103811C0FE40107811C0FC40447C47C0284428441044183C240043FE8000 +3C8E:04080E1C70E0102010201C3C70E0102010201E3CF0E0102214221822101E0000 +3C8F:0408243C25E0242024203E3C21E020203C20243E27E02420242244224422841E +3C90:08201C207050105010881D44722210F810081C10F0101022102210020FFE0000 +3C91:08201C207020102411A81CB070B0112811281D24F22410A0104010020FFE0000 +3C92:2008201C40E07E208220023C7AE04A204A204A3C7AE04A2202220222141E0800 +3C93:08281C24702411FE11201D2871A8115011141D34F14C1104120010020FFE0000 +3C94:1004080E7F7000102210141CFF7008100810081E7F700810081208120812080E +3C95:04081E1CE0E022209220543C40E00420FF20043C44E0242224220422141E0800 +3C96:0804490E29702A1008107F1C417041107F10411E41707F10411241124512420E +3C97:04081E1CE0E0022092204C3C00E0FE200420083C0EE0F82248220822281E1000 +3C98:00087E1C42E042207E20423C42E07E204220423C7EE0002224222222411E8100 +3C99:08401C2071FE104010881DFC700410A810A81CA8F12A1226100010020FFE0000 +3C9A:1020082040A824A4092A723010C0170000F03F0001F03F0001F87F02010200FE +3C9B:20003E7C48440844FF441444227C400000F03F0001F03F0001F87F02010200FE +3C9C:1008521C54E090202820443C82E010201020523C54E0902228222422421E8000 +3C9D:08501C4870FE119012901CFE7090109010FE1C90F09010FE108010020FFE0000 +3C9E:1004080E00707F100010221C227055108890081EFF700810081208120812080E +3C9F:2204220E7F7022102A10081C3E702A102A102A1EFF700810141212122212400E +3CA0:082008207E7E08C4FF281C102A2848C600F03F0001F03F0001F87F02010200FE +3CA1:0804080E7F701C102A10491C00707E100010FF1E08704A10491289122812100E +3CA2:1004080E7E70421042107E1C427040107F10551E55707F10D51255125512430E +3CA3:5008961C92E09220D620923C92E0FE201020FE3C02E0642218222422C21E0000 +3CA4:1004080E7F7000103E10221CFF7022103E10189E35705210911214921812100E +3CA5:1004080E7F7048105E104A1C7F704A105E10481E5E705210521252125E12920E +3CA6:102010201050FE8811067C1844E07C2044387CE01020FE3C11E010221022101E +3CA7:10003BF0E150211020A03840E1B0264E21F03950E1F0204823FA200A20021FFE +3CA8:2408241CFEE024200020FE3C24E03C2024203C3C24E02E22F4220422041E0400 +3CA9:10003BF8E20823F822083BF8E00027BC20843CA4E29424A42296210A20021FFE +3CAA:0A04740E157052102210211C5D7080107E10421E42707E10421224120F12F00E +3CAB:2808AA1C6CE02820FE20443C28E0FE2010207C3C10E0FE2210222822441E8200 +3CAC:2808241C7EE0C82048207E3C48E048207E20483C48E07E224022AA22AA1E0000 +3CAD:0804290E29704A101410221C4170001022102A9EB7706210221252124512888E +3CAE:12103A10E3DE252820843840E0A0211022E83C04E1F02110211221F220021FFE +3CAF:00047A0E52707B904A107B1C54F0789000107F1E5570551055125792FC12000E +3CB0:0804FF0E91704A10A5101C1C00707F105510FF9E00707F10081208122812100E +3CB1:11243A48E12423FC22943A64E29423FC22483B68E248236A2246236220021FFE +3CB2:7F04490E7F704910FF90AA9CFFF0AA90FF90001EFFF0A2903E1222122792F80E +3CB3:08201C20F120912091FC9120FE20902093FE902090508A50A688D28809040202 +3CB4:20003FFC40009FF000007FF0041004107FD0445044507FD2444A040A04060402 +3CB5:20003FFC40009FF000007FF0249015107FD040507FD040527FCA404A41464082 +3CB6:20003FFC40009FF000007FF0041007F004107FD055504A5264CA4A4A55467FC2 +3CB7:20003FFC40009FF000007FF02A903B9000103F9024903F92248AFFEA04060402 +3CB8:0000200013FC1008801040204840088010801100E10022022202220221FE0000 +3CB9:000021F011101110811041104910091011101110E210221222122412240E0800 +3CBA:00402040104010408040404E48700FC010401040E040204220422042203E0000 +3CBB:0840084008401044176831703160515091501248124814441842104011401080 +3CBC:0000200812081208820841104910091010A010A0E040204020A0211022080C06 +3CBD:000023FC10841084808442844A840A8414841084E08420842104210422280410 +3CBE:020001007FFE40028104010001003D8405880950092011102108C10605000200 +3CBF:00402020102013FE820042004A000A0012001200E20022002200240024000800 +3CC0:009020881088108080BE47C04080104410442048E03020222052218A26060002 +3CC1:000023FE12001220822042204A200A2012201250E25022502488248829041202 +3CC2:0020212011201110811042484248144418822080E1102108220827FC22040000 +3CC3:0080208013F010908090411249120A4E14401040EFFE20402040204020400040 +3CC4:00802080108010FC8104410842401440104020A0E0A021102110220824040802 +3CC5:0000200017FE102080204040484008D011481244E44220402040204020400040 +3CC6:00102110109010908010421049100910101E17F0E01020102010201020100010 +3CC7:0020211011081204820444104110111010A020A0E04020A02110220824040802 +3CC8:004020401040104087FC40404950095011501150E1522252224E244020400040 +3CC9:000021FC11041104810441FC49040904110411FCE10421042204220424140808 +3CCA:00802080110011FE8210421045101110111020A0E0A0204020A0211022080406 +3CCB:0008203C13C01200820042004A000BFC12201220E2202220222022202FFE0000 +3CCC:000027FC14441444844447FC44441444144427FCE44420402040204020400040 +3CCD:00402040104017FE808040A0492009FC13241524E12421242134212820200020 +3CCE:0040204010801110820847FC40041110111027FEE11021102210221024100810 +3CCF:00402040104017FC844444444444144417FC2040E24021402080214022300C0E +3CD0:011021101110111087D041104310139015502510E910211221122112210E0100 +3CD1:0000200013F812A882A842A84AA80AA812A812A8E2A822A822A82FFE20000000 +3CD2:00402040104017FE80A041104208142610202040E0802108220427FE22020000 +3CD3:004020401040104087FE40804880090013FC1504E90421042104210421FC0104 +3CD4:000420041784108480BE4484428412A411142114E28422842484280420140008 +3CD5:0000210810881090800043FE48000800100011FCE00020002000200023FE0000 +3CD6:00802040104017FE808040804940094413481530E92021102108214421820100 +3CD7:000023F81108115080A0404041B0160E10402040E3F820402040204027FC0000 +3CD8:00802040104017FE80804110420817FC11242120E120212022222222241E0800 +3CD9:004020801108120487FE400248000BFC120413FCE20423FC2204220422140208 +3CDA:002820241024102083FE42204A240A24132412A8E22822102212242A24460882 +3CDB:00402140165C14448444475C4444144417FC2444E0A020A02110220824040802 +3CDC:009020901090111081FE43104D10093811381154E15421922110211021100110 +3CDD:01002108111C1270821046104A10121012FE2210E210221022102210227C0200 +3CDE:011021101110121082FE469256921A92129222FEE29222102210221022100210 +3CDF:044004403FF804400440FFFE082011102928C546038005400920311005000200 +3CE0:001024101210121080FE40104610122812242244E24222822200250028FE0000 +3CE1:040842082208200800FE8E084248522812282208E20822282210250028FE0000 +3CE2:0010207813C01040804047FE48A0091012081516E11021102110221022100410 +3CE3:00402040104413F48048405047FE104010802184E29824E028822082207E0000 +3CE4:011049102510251001108FFE4110511015982554E95422102210241028101010 +3CE5:000027FC1040104083F84040404017FC11102110EFFE21102110221022100410 +3CE6:0014401220102FFE00108290429252921FD22294E2942288228A249A24260842 +3CE7:00002FFE14801490849047904490149014902790E490249224D22F92208E0080 +3CE8:012421241248124881244124400017FE108021FCE10422882450202020C00700 +3CE9:0000407C20442E44046484544454544415FE2444E7443C442044208420940108 +3CEA:000027FC1020104080D041485244144410402000E3F822082208220823F80208 +3CEB:010001087D1005A009603118C50602000C00307820083C78200820083FF82008 +3CEC:0100210011FE1200840041FE482208241120113CE1202120212022A0247E0800 +3CED:000023F812081208820843F84040104017FC20E0E15022482444284220400040 +3CEE:000023FC1204120483FC42004A200A2213B212B4E2A822A8252425242AA20040 +3CEF:0080204017FC1000811040A04FFE104010402040E7FC20402040204020400040 +3CF0:0040202013FC1040809041084BFC080411101110E7FE21102110211022100410 +3CF1:0000278014BC152485244624452414BC14A424A4E6A42524243C242424000400 +3CF2:0020482024202020082085FE4420502012202450EC502450248824C825240202 +3CF3:00402040104017FC804040404BF80A08120813F8E0A020A021222122221E0400 +3CF4:004020281088129082A442C2448A118816782000E04027FC204020402FFE0000 +3CF5:003823C0104017FC80E0415052481C4613F02020E04027FC2040204021400080 +3CF6:00E84F08222829280548800847C8508811082108E1E82F08210A210A250A0206 +3CF7:0100210011FC12A484A441244A44089411081000E3FC220423FC220423FC0204 +3CF8:0108210817FE1108810840004890089211141318E510213221522112210E0100 +3CF9:0200420022FE22100F9082104610577C16902A90EA103210221022FE22000200 +3CFA:02404240227E22800F00827842085308121026FEEA102210221022102A500420 +3CFB:01102110111017FC811041104FFE100013F82208E20823F82208220823F80208 +3CFC:00500048FFFE00403E4022243E2800120E2A70C6030A7D90096011202518C206 +3CFD:002027201120113E814047404490141014102754E15221522192211025500220 +3CFE:02082108111017FC8040404043F8104010802FFEE1202120222022222422081E +3CFF:0040202013FC1040809041084BFC0844104017FCE0E0215022482C4620400040 +3D00:0108210817FE11088000403C4BC00820101013FCE0082010206021802240043E +3D01:000023F8104010408FFE41104208151613F82110E11027FC2110211022100410 +3D02:0020402020202EF804A884A844F854A814A824A8E5FE26883888208820A80090 +3D03:0040202013FE1202820243FE4220122013B222B4E2A824A82524292432A20040 +3D04:000027FE14021492848A450A4402140214F22492E49224922492249227FE0402 +3D05:010001087D1005A009603118C50602003FF82448282837D8244827C820083FF8 +3D06:000023F8100811F8800843F8400017FE14422844E3F822482248224822580040 +3D07:1088108810881088D6EA52AC52A85AA856EC52AA52AA94C81088108852A82110 +3D08:0010203813C0120083FC4220422012201FFE2000E04024442444244427FC0004 +3D09:00402090110813FC8108421044A417BE10822000E3FC20002000200027FE0000 +3D0A:044422441284101487D4411445541554155427D4E15421142204220424140808 +3D0B:0040204013F8104887FE40484BF8084012481248E2E823582248224824480848 +3D0C:02104210221022100F7E851045105510157C2944E544224422442544257C0844 +3D0D:03F04010202020440E5883F04250524815E82448E4442BF43042204021400080 +3D0E:0040204017FC10A08110420845F61000100027FCE04022482244244421400080 +3D0F:0080204017FC140481104208440413F810402040E3F820402040204027FC0000 +3D10:000040FE2F1029100950895E4F52495219522F7EE902290229022F0229140008 +3D11:0040202017FE14008504448847FE142015242524E52425FC2844288031000200 +3D12:0080204017FE1090829844944114123014002110E1102FFE2110211022100410 +3D13:000023FC1244124483FC42444A440BFC10001040E0242522250A290820F80000 +3D14:0080208011F81208841043FC480409FC100413FCE00420402124252A250A08F8 +3D15:0108210817FE1108800040384BC00840104017FCE0E021502248244428420040 +3D16:0110211017FC111081F0404043F81248124823F8E0402FFE2040204020400040 +3D17:000023FE1050105083FE42524A520BFE10001040E7FE20882190206020D80304 +3D18:000027FE140215FA840245FA4402100013FC2204E3FC220423FC220423FC0204 +3D19:0008203C17C0104080404FFE40401140165C2444E444275C2444244427FC0404 +3D1A:02082110100017FE80804184424414A811302270E4A8212822242C2220A00040 +3D1B:0008200817C81210821E44A447D41114111427D4E114210821C82E1424140022 +3D1C:0080204017FC1404840447FC4400140017FC26A4EAA42BFC2AA42AA432A4020C +3D1D:060478440844FF441C442A44C9140A880C603118C92605400920111025080200 +3D1E:0008203C13C010448224412849000A7C12441244E27C224422442244227C0244 +3D1F:000023FE120012FC828442FC4A840AFC120012FCE208221023FE241024500820 +3D20:00008FF8401000208040577A554A156A35525552D76A504A514250825FFE0002 +3D21:003823C01040104087FC41505248144613F82208E20823F82208220823F80208 +3D22:0090909048900190917C4954495403542554497CD95449104910491049100110 +3D23:002090204BFE002091FC482449FC012025FE4822D82A48544850488849040202 +3D24:021042082200227E0F9082104210571016FC2A10EA102210221022FE22000200 +3D25:04108410445404389510557C55441544357C5544D544577C5944404440540048 +3D26:0040202017FE1402800041F84908090811F81000E3FC22042204220423FC0204 +3D27:0040208013FC120483FC420443FC120413FC2000E04020242522250A28F80000 +3D28:0044272415281500857C47104510151015FE2710E5102528252825442B440082 +3D29:012422481248112483F842084BF8080013F81248E24823F82202220221FE0000 +3D2A:0040208013F8120883F842084BF80A0813F81040E7FE20E02150224824460040 +3D2B:40002FDE225282525FF4425402582FD4241247D2CC524C5A545467D044500010 +3D2C:010822081788148887BE4488478814C814A82FA8E18822882488288822A80110 +3D2D:0080204017FC140480A041104A08080013F81208E3F8220823F8220823F80208 +3D2E:000027FC1404140487FC4420452414A815FC2504E5FC250425FC290429141108 +3D2F:002027A414A814B084A247A2449E148014BE27A2E4A224BE24A228A22ABE1122 +3D30:01102212145417D88010401247D2144E144027D2E454245827D024522552048E +3D31:0080204017FC140480A041104248104017FC2040E44422A820A0211022080C06 +3D32:0004203E17E0143E842045FE4522153815E2251EE50029782A48324A248A0906 +3D33:04484444244024FE04509F544458545214542458E45227543C9A2092212E0240 +3D34:002024A414A8152084504488450417FE142024A4E52824502488250427FE0000 +3D35:00402028109012A482C2448A41881678100023FCE2942294229422942FFE0000 +3D36:0080208017FE1522811043FC56201A2013FC2220E22023FC2220222023FE0200 +3D37:00104F9025102510077C855447545510151025A8E7282D28214A214A21860100 +3D38:000027BC14A417BC84A447BC4404144414442444E4A424942514240424140408 +3D39:0010209214521254821040FE4010163812542292E31022102210250028FE0000 +3D3A:00208820442005FC902048A848A804A825744A22D85048504888488849040202 +3D3B:00044FC42004200407BE8484448454A417942014E8842484250421C42E140008 +3D3C:0040202017FE1402810041FE421016201A7C2244E244227C22442244227C0244 +3D3D:0008403C27C02040024881504FFE515012482C46E08020442A422A1231F00000 +3D3E:010841082FC82110011E8FD44864401417942094E11421C82F08211425240242 +3D3F:0000407E2F902220027C82444244527C1244227CE2442244227C2A0024280044 +3D40:04204220223E2F4004A08420473C555015102510E5FE2510252829282B441082 +3D41:0108210817FE1148802047FE4880090813FC1004E1502150215022522252044E +3D42:0040202013FE1200824842484BFE0A4812481248E27822002554252A2A2A1000 +3D43:0410840844081F7E95425542552015243F284430C420452247A25CA2481E0000 +3D44:00142012101217FE801043D04A500BD4101417D4E11427F8210A228A24560822 +3D45:004020A0111012488DF6402048400BF8120813F8E20823F8220823F821100208 +3D46:000840282F28293E0928894849084F7E19002900E93E29222F222922203E0022 +3D47:01A44E2422242224027E8FA44224522412242FBCE8A428A428A42FA428BC0024 +3D48:008890884888008893DE494849480148255E4A52D95248924892495E49520200 +3D49:008890884888008893DE48884888019C25DC4AAADAAA4CC84888488848880088 +3D4A:000023F8120813F8820843F850001FFE148027BCE494279424D42F88209400A2 +3D4B:000027FC14A414A487FC40004BF80A0813F81208E3F8220823F8211022080404 +3D4C:0408841C49F01110A51045FE4910197C2944497CC944497C49444A444A7C0C44 +3D4D:0000279E1492179E8492479E44421422140A2546E542255226322402240A0404 +3D4E:079E2492179E1492879E440244F2149214F22492E4F224922492253224020406 +3D4F:0110211017FC1110804047FC4110111012A82444E0402FFE2040204020400040 +3D50:40002FFE28008A2849484BEE089228842AA04AA8CBE848884894491449241242 +3D51:0200420027BC22A404A485BC480053F8120823F8E20823F8220823F821100208 +3D52:009027FC109413FC829043FE49120BFA150E11F8E10821F8210821F820900108 +3D53:008040402FFE280203F8820843F8520813F82000EFFC2240227C254024FE0800 +3D54:0040204017FC11108248444643F8105017FC2080E3F82D0821F8210821F80108 +3D55:0080211013F8121084A447BC404010A013582C46E04822642252245221400080 +3D56:0100210017DE125286924112429E14C0111023E0E04827FC2254244829440080 +3D57:43FC22400BF80A4013F82240E3FC20042554200801087D90096011202518C206 +3D58:08100A146AD42C582A544A94A950102008100A146AD42C582A544A94A9521020 +3D59:004027FC104013F8800043F8420813F811102FFEE00023F82208220823F80208 +3D5A:01102208141411A080604198464410A013182DF6E04027FC224821502FFE0000 +3D5B:011020A017FC104083F8404047FC124811502FFEE00023F82208220823F80208 +3D5C:0010241012FE1210801048FE448214AA119222BAEE9222FE22922292228A0084 +3D5D:008080405FFE0148823046905B08020627FC4524C61445EC452445E444140408 +3D5E:00C84708212A212C0FC881084388555419142122E04020242522250A290800F8 +3D5F:028842A826A82BF0001E822445D45C14141425D4E55425482568255426140422 +3D60:004047FE24022914020887FC440457FC14202524E52425FC24202924292411FC +3D61:03F8204017FC1444835840404358120013F82408EBC8224823E82212220201FE +3D62:000047FC20402FFE0842835840405358100027FCE444244427FC2444244407FC +3D63:00109F1051101F3E91225F4448101F9024905490DAA850A85EA840C445440282 +3D64:000027BC108414A4829444A4404017FC10402248E248255420A0211022080C06 +3D65:0080204017FC1484805045285554199416F02000E3F822A822A822A82FFE0000 +3D66:002021FE144012FC811042FE400016FC128422FCE28422FC2284228C250008FE +3D67:011027FE111013F8820843F84A080BF8110013FCE4442AA4220423F420140008 +3D68:00407C2045FC44887C5043FE7C20A5FC24203C2001087D90096011202518C206 +3D69:010827FE1108100084884FFE448814F8140027FCE0402FFE215022482C460040 +3D6A:0208211017FC104083F8404047FC10001440227CE08422282C20245024880106 +3D6B:01F8201017FE10A0804047BC408411CE17382108E31827FC240427FC240407FC +3D6C:00009DF85488149014FC1D549524555416881C0015FC55549554255427FE4C00 +3D6D:0040204413F8105087FE404051FC170411FC2104E1FC20002524249228920000 +3D6E:004027FC10A013188D1643F8411011F0104023F8E24823F8204027FC20400040 +3D6F:40002FF828088BE849084BE80A282BE82A284BE8CA084BFA4A0A53FA55562032 +3D70:0140224C12641244834C42644AA40BAC12A412A4E7FE20002110210822040404 +3D71:00044FE422842FE40ABE8AA44FE4500417D4200CEFEC2104254425242924030C +3D72:0100420027FC2AA802A88FFE42A852A81FFE2208E3BE24882AA8213E22080C08 +3D73:00404FFE280227BC04A4829444E450A013182C46E090232020C8231020600380 +3D74:000C800A57FE140895E85D48454A05EA3D2A552CD5EC554C654A49EA48161022 +3D75:07E0225C13C4125483C8426847D41064103C27C0E144226820D0214826460040 +3D76:0110411427D221100FFE829044505FF4149427F4E49427E8248A27FA24260042 +3D77:2010110810887CBE020029141108FC3E108810887D1C13081108210821084008 +3D78:004020A01110120885F4480243B812A813B82000E7FC24A427FC24A424A4040C +3D79:0428842844FE04289500557C5544157C3544557CD510577E5910402840440082 +3D7A:0210221017DE152888C440804BFC0A2413FC1244E3FC2120222027FE20200020 +3D7B:40502E962A928A924AD64E920A922AFE2A104EFCCA444A444A285210522826C6 +3D7C:000027FC140410808338420843B8120813F82200E7FC28042554255428280010 +3D7D:03F82248124813F88248424843F810001FBE2AAAEAAA2FBE2AAA2AAA2FBE08A2 +3D7E:0200823C5FA402248FBC42245FE4003C2FA448A4CFBC48904F9848A848AA09C6 +3D7F:0080210013F8120883F8420843F8120814102FBEE8A228A22FBE28A228A20FBE +3D80:00004EEE2A222AAA0A668EAA4A104A281A442F92EA202AC82A322AC42A1816E0 +3D81:03909C10411E15108A7E4852425C02703F52424ED2404A5C42544A5444960122 +3D82:0088908849FC008890884BFE482001FC252449FCD92449FC4800488849040202 +3D83:0080908049FE0354915449544BFE015425544954DBFE48004954492A4A2A0000 +3D84:07BC24A417BC14A487BC448444F41514162425B4E51425B4251425F424140408 +3D85:42A0244C24A4860C44A4464C04A42FFE280243F0C020404047FC404041400080 +3D86:04104210227A2F1200148F7E40084F10103C2F64E9A4293C29242F24293C0024 +3D87:42282228227C82284F2842FE0610277C2AD44A7CD254427C4200422842440282 +3D88:0110455425B8291002A884444FFE4842104023F8E248224823F8204427FC0004 +3D89:0308BC1044BE11228432492A5E22042629205F3EC4025F02447A4A02510A2084 +3D8A:00004FBE2A082A100A3E8FA248A248BE18A22FBEEA222A222A3E2A002F940022 +3D8B:050855482DA8253E0FA8824844484ABE13082588E988237E25402920251E0200 +3D8C:00449F444AAA0AEE8E444AAA4AEE0E002A284AAACBAA4EEE5A28422842480288 +3D8D:0200422227922494093E87C84548555E17C82548E57E27C820082AA82AA80008 +3D8E:01FC495425FC240001FE80005CFC448414FC2452E4CC254824642B0030FE0000 +3D8F:001C4EE02A542A280A7C8C104AFE4A001AFC2A04EA7C2C0428FC2814294A0A38 +3D90:0040202017FE14A884FE4550477C1550157C2550E57E254028A42A8A328A0478 +3D91:021082104510089E90526FA2400800083DC85548D5485DD44894489455542222 +3D92:1F3E91225F3E11229F3E500257FA148237F25482D7F2548257FA500A5AAA1014 +3D93:02109FFE4214000A07FE140895E85D4805EA3D2A15EC554CA54A09EA08161022 +3D94:000043F822A822A803F880004FBE4AAA1AAA2FBEE0402FFE20A0211022080C06 +3D95:021043DE2528288407BC84A447BC54A417BC2404E5F4251425F4251425F4040C +3D96:088089F84A881070138E3400B5FC55AC157415FC142055FC942013FE1154122A +3D97:20287F78AA147F7C2A543FB206001FF010101FF010101FF001843D480930730E +3D98:021043DE2528288407FC80A047FC54A417FC2208E3F8220823F820402FFE0040 +3D99:0284AAA456D4029EA7D451245224055E298452C4F4C451BE52A05490528E0100 +3D9A:07FE209017FE149287FE428047DE12921392211EE7D2255227DE21122FD20126 +3D9B:1080888049FE3D0012A0112C9D3455AC1534155415DC5554A7FE24884D048202 +3D9C:0002BEFA628A3EFA208231C6AAAA60823FFE2AAA2AAA7FFEAAAA2AAA32CA4104 +3D9D:004090204BFE02A492BE4BE84ABE02A826BE4AA8DABE4AA04A144B524D4A0A38 +3D9E:03F8220813F8120883F840404FFE14A417BC2110E7FC21102FFE212423180D86 +3D9F:47FC244427FC84444FFE4AAA0FBE2AAA2FBE4220C7C040844FFE404245480884 +3DA0:00009EFE54AA1EAA94FE5E10547C14103FFE4128D57C551055FE511041100610 +3DA1:00003FF8210821082108292829282948310822882248244A242A482A50068002 +3DA2:01001110111022A0044008203018C20602003FE002200420042008223022C01E +3DA3:00003FF801000100FFFE01000100000001001110111022A0044008203018C006 +3DA4:10801080108010FC550459045284944810281010101028202440448041008600 +3DA5:100011FC1020102054205820502093FE10201020102028202420442040208020 +3DA6:100011F8100810505420581053FE902210241020102028202420442040A08040 +3DA7:10201020102011FE55225922512291221152114A118A290225024502410A8104 +3DA8:00007FFC008001000300056009183104C1020100010000002488224442448004 +3DA9:10201020102011FE55225A24502090201050105010502850249044924112820E +3DAA:00007FFC01000300056019186104000001001110111022A0044008203018C006 +3DAB:010001007FFC0100210412C80C30F00C01021110111022A0044008203018C006 +3DAC:10201020102015FE58205020502091FC107010A810A829242524422240208020 +3DAD:1010109010901110557E5A52539290921112111212522BD224624422404A8084 +3DAE:00007FFC010001003FF8210822882448200820180100111022A004401830E00E +3DAF:10001080131E125256525A5252529252125212D2135A2A542490449041108210 +3DB0:10881088108814885BFE508850889088108810F8108828882488448840F88088 +3DB1:102010201020102055FE58205070907010A810A811242AFA2420442040208020 +3DB2:100011FC11241124552459FC51249124112411FC11242924252445244104820C +3DB3:01003FF00110FFFE01103FF001003FF80100FFFE00000100111022A00C60701C +3DB4:10201020107C108455485830502090481190103E104229A42418441040608180 +3DB5:0810087813C0304050409FFE10401040104017FC100000002488224442448004 +3DB6:10201020102017FE5A42544450A090A211A4129814902888248444A240C08080 +3DB7:1080108011FC15045A0451E45124912411E41124112429E42504440440288010 +3DB8:1040104011FC14445884508451289210110813DE114A294A254A4252435A84A4 +3DB9:100011FC102014205BFE50005020902213B210B410A829282524422444A28040 +3DBA:100011FC1020102054205BFE50509088110412FA148828882488448840F88088 +3DBB:08001FF0282007C01830E10E1FF001001FF001007FFC01000100488844448444 +3DBC:10201040108815045BFE5082508091FC1220102013FE28202450448841048602 +3DBD:100011FC11041504590451FC5020902013FE122212522A8A270A4202420A8204 +3DBE:00007FFC04403FF8244824483FF800007FFC010011101120228004401830E00E +3DBF:1020102013FE102054205BFE5202940411F8101010202BFE2420442040A08040 +3DC0:08202AA42CA849201450228841047FF0041004100410FFD00412040A04060402 +3DC1:100011F8100810D0542059FC5124912411FC1124112429FC252445244124810C +3DC2:00007E7C48047E4442287E1048287EC401001110111022A0044008203018C006 +3DC3:010011081108229004401830EFEE08000FE008000FE00800FFFE111014E0181C +3DC4:100011FC1124152459FC5124512491FC102013FE107028A82524422240208020 +3DC5:7F00227C3E0422283E1023A8FE44020001001110111022A0044008203018C006 +3DC6:1020104011FC110455FC590051FC910411FC102010202BFE2420442040208020 +3DC7:204020403C4045FEA84010902090C89211523D5446908428282810442084C102 +3DC8:1020102013FE105054885924522291FC112411FC112429FC24224422401E8000 +3DC9:00043F84208420843FBE20042F8420243FD422142A442A845204450488941048 +3DCA:0820082008207EFC08201C301A702A6848A48922082008200000488844448444 +3DCB:102010A210A211245450588853049022102010A410A429282450448841048202 +3DCC:100011FC100414FC580451FC500093FE1222102011FC29242524453441288020 +3DCD:1020102010501488590452FA500091FC1154115411FC2954255445544104810C +3DCE:100011FC110411FC550459FC508091FE122211221152290225FA440240148008 +3DCF:0640387C08907E1008FE1C102A10481001001110111022A0044008203018C006 +3DD0:1040119C1104110455DC5904510491FC1020102011FC28202420442043FE8000 +3DD1:010011081108229004401830E00E3FF804403FF824483FF801003FF80100FFFE +3DD2:11FC1124112415FC5924512451FC9020102013FE12222A2A26FA420A42028206 +3DD3:1080108010FC15545AD450B4512C924410941108104028A426AA428A44788000 +3DD4:1008103C13C014445A2451285100927C12441244127C2A4426444244427C8244 +3DD5:221012101410FF92145214547F5855905510632841287F28414841447F844102 +3DD6:00007DFC444444447C44444444947C88110014FC588450849084288444FC8084 +3DD7:00002FBC28A42FA4283C2FA228A24F9E81001110111022A0044008203018C006 +3DD8:10401088110413FE540259FC5104910411FC102013FE287024A8452442228020 +3DD9:11081088109017FE580053C45254925413D4125412542BD426544244425482C8 +3DDA:1040102013FE100055FC590451FC900013FE120211FC28202420442040A08040 +3DDB:08000BF81208320853F8904017FE10E0115012481C4610400000488844448444 +3DDC:2080204027FE2090AA98B494A114A2302440204027FE204050A0491042088C06 +3DDD:1040102013FE12025488590452229028102413FE102028502450448841048202 +3DDE:200023FE220022FCAA84B2FCA284A2FC220022FC2208221053FE4C1044508820 +3DDF:10081210117C15445844507C57409140117E11421142297E25424280447E8000 +3DE0:0110092012E00C187104091012A00C60701C10103EFC4210149008FE3010C010 +3DE1:00007EFE42807EFC42847EFC42807EFE01001110111022A0044008203018C006 +3DE2:082004407FFC01003FF80200FFFE080037F0C0801FFC0100111022A00C60701C +3DE3:1088105013FE102055FC582053FE900010A010FC1120282027FE442040208020 +3DE4:10001078FE4810487C480086FE0082FC7C44104412285428A810242844448182 +3DE5:100015F854105820902429A844B090A815285924522290A02840440081FC0000 +3DE6:0020FF2024A43CA424A83D20242024502F50F488050406020400488844448444 +3DE7:100011FE11101520597C5144517C9144117C1110111029542552429242508420 +3DE8:1020122213FE148059F852885070938E102011FC102029FC242043FE40208020 +3DE9:000027DC25042784249C2790251247CE0000010011101120228004401830E00E +3DEA:10A0109011FE132055FC592051FC912011FE110013FC2888249E4502420A8404 +3DEB:08007F7808483E4800863E782A483E30404880840100111022A004401830E00E +3DEC:1088108813FE1088540059FC510491FC110411FC10202BFE2450448841048202 +3DED:210013F0151000E0775C11F0104013FC284047FE0100111022A004401830E00E +3DEE:1090109017FE109057FC5A9453FC929413FC100011F8290825F8450841F88108 +3DEF:1020102055FC584090F810402BFE4488912412227CF8102011FC1E20F0204020 +3DF0:1040102013FE140059545124515491FC102013FE12422A9226FA420A42028206 +3DF1:1010101022107F7C01103E1022103EFE22103E2022442AFE2442000024884244 +3DF2:21C8270821082FE8A91EB7CAA54AA7CA254A27CA210A27CA511249D24E2A8444 +3DF3:3FFE224824FE2D9036FC249024FC249024FE248020402248445040A083180C06 +3DF4:3FFE21042E3822102FBC27182AB432522000208024882890214042204C18B006 +3DF5:100011FC112415AC5974512451FC902011FC102013FE280026A4425244528000 +3DF6:111017FC21102FFE6100A3F826482BF8224823F8224822580000488844448444 +3DF7:100013DE125217DE5A10525251CE9000108813FE1088288827FE448841048202 +3DF8:100011FC110415FC590451FC500091FC10A813FE10A829FC242043FE40208020 +3DF9:108813FE10881020543E582051FC910411FC110411FC282027FE442040208020 +3DFA:20203E20443EA84446844228761042287E44010211101120228004401830E00E +3DFB:1080108011FE13545554595453FE91541154115417FE28002554452A422A8000 +3DFC:0440FFFE0440044017D01012F7DC14503452D7D2100E0100111022A00C60701C +3DFD:1088105013FE102055FC582053FE912410A813FE100029FC2504450441FC8104 +3DFE:2040207C204023FEAA42B278A3C4A23C220023FE224023A452584DB4445289B0 +3DFF:1020102010501488590452FA5000900011DC1154115429DC2488448841548222 +3E00:102013FE100014F8588850F8500093FE120212FA128A2AFA262641F8402083FE +3E01:10501252115414505BFE5088505093FE102011FC10202BFE24A8412446228020 +3E02:011027FC1080034870B0136810A4132010402FFE4100111022A004401830E00E +3E03:00107F1049106B1E5D1049107F7C08447F4408440F7CF0440000488844448444 +3E04:2040202023FE2088A852B7ACA2AAA2A825AC2000210421FC510449FC41048204 +3E05:2210221023DE2528A884B000A7BCA4A427A424A427A4243455284EA044208020 +3E06:112011FC122017FE580051FC510491FC105013DE105029DC245043DE40508050 +3E07:108811DC108813DE54885954522291FC110411FC110429FC250445FC40888104 +3E08:081024483F7E64C8BF7E24483F7E24483F7E20400100111022A004401830E00E +3E09:210827C8AAAAB12CAFE8210857D44912892200000100111022A004401830E00E +3E0A:2108210827CE2112A924B7DEA552A55E27D2211E2392255E5940491441128122 +3E0B:203C21E03D2444A8A9FE50A82124420291FC5524552459FC9124292425FC4504 +3E0C:11FC102013FE122255AC582051AC909011FE132015FC292025FC452041FE8100 +3E0D:210821EC210A27E8AD28B5DEA728A4EA240A27EA240C27EC5A2A4BEA515687E2 +3E0E:13FC110811F8150859F8510E57F8900817FE1294139C2A94279C42D647BC8084 +3E0F:00803FFE24103F7C26382D5435322F3C2120273821202F3C248849504630B80E +3E10:2850FE4828FE399012907CFE54907C9010FE7C901090FEFE2880440024884244 +3E11:2FEC48246BAC48246BAC4AA4FFFE88227EFC2C684AA40100111022A00C60701C +3E12:00FC7F00020821081110102000F83F0001000100FFFE0100010001003FF80000 +3E13:00FC7F0002082108111010203FF82008200820083FF82008200820083FF82008 +3E14:00F87F00211011101220FFFE040008001FF028104FF088100FF008100FF00810 +3E15:0228077E38482AFE2A482A7E2A482A7E2A40297E2922289C28624830480E8800 +3E16:000028F824884288408884F804884888288810F8188824882488408883FE0000 +3E17:084010202850448803001CE0E01E3FF820082FE8200827C8244827C820282010 +3E18:084010202850448803001CE0E01E1FF012901FF000007FFC0100010005000200 +3E19:084010202850448803001CE0E21E1FD00220FFFE03000FF03810CFF008100FF0 +3E1A:0008848844502820105028884500840800880488445028501020285044888506 +3E1B:040025FC2444244424443C4404940488FD0024FC248424842484448444FC8484 +3E1C:04202410241025FE25023E5404880504FC0024FC242024202420442045FE8400 +3E1D:044024402440247C24443E8820A021203C202450245024482488448445048602 +3E1E:041024902490249024903EFE208020803C8024F8248824882488448844888508 +3E1F:04802484249824E024823E82207E20003CFC2484248424FC2484448444FC8484 +3E20:0890489048904A9249947C98409041987A944C9248904890491249124A128C0E +3E21:08204920492049FC49207E20402043FE787048A848A8492449244A2248208820 +3E22:0844484449FE484448447DFE404040FE79924AFE489248FE4892489248928886 +3E23:08504A52495448504BFE7C88405043FE782049FC48204BFE48A849244E228820 +3E24:409022882288FABE028053D42208FA3E23882288729C22882288448844888888 +3E25:09F04A104FFC4A044BFC7E2443B8422279FE4A104FFC4A444BFC48D0494A8E3E +3E26:00003FF800801080108020803FFC0080108008800680018000F0008E02800100 +3E27:00007EFC0484248424FC248444847EFC0C92149214942488448884A414C20880 +3E28:08040804488448847E844884888408840E8CF89448E408840804080408040804 +3E29:080008FC482048207E204820882009FE0E20F820482008200820082008200820 +3E2A:11041124512451247D245124912411241D24F124512411241124122412041404 +3E2B:0804080E48F048807E80488088FE08880E88F888488808880888090809080A08 +3E2C:10201020502053FE7C20502091FC11241D24F124512411341128102010201020 +3E2D:1000100051FC51247D245124912411241DFCF100510011001102110210FE1000 +3E2E:10101090509050887D085104920415FA1C88F088508810881108110812281410 +3E2F:08080888484848487E084888884808480E08F80E49F808080808080808080808 +3E30:10201010501051FE7D025204908010881C90F0A050C0108210821082107E1000 +3E31:1080108050FE51007A205120912C11741BA43124D13411281122110210FE1000 +3E32:084008404840487E7EA048A08920083C0E20F8204820083E0820082008200820 +3E33:10201020505050507C885124921210101DFCF004500810881050102010101010 +3E34:0000FFFE040008001FF02810C8100FF0010011001FF821000100FFFE01000100 +3E35:10201020502053FE7C20502091FC10001C00F1FC510411041104110411FC1104 +3E36:100011FC510451247D24512491FC11241D24F154514C118C1104110411FC1104 +3E37:080008007F7C08243E2408447F540888090011001FF821000100FFFE01000100 +3E38:1008101C51E051007D0051FE910011001D7CF144514411441144127C12441400 +3E39:1004101E51E050227D125094908010081DFEF008508810481048100810281010 +3E3A:1020082040A824A4092A723010C01700010011001FF821000100FFFE01000100 +3E3B:10201040508851047DFE5002908010FC1D20F02053FE10201050108811041202 +3E3C:1040104050FC50887D50502090D813261CF8F02050F8102013FE102010201020 +3E3D:080008FC488448847EFC4884888408FC0E84F88448FC08000848084408820902 +3E3E:100013FC5044514479445284909411081A403020D0A41282128A128A14781000 +3E3F:1020102053FE50207DFC500093FE12021C04F0F050901090109011121112120E +3E40:1020102053FE5020782053FE9202140419F83010D02013FE1020102010A01040 +3E41:1040102053FE50007C0051FC910411041DFCF020512811241222142210A01040 +3E42:00007EFC48447E4442287E1048287EC6010011001FF821000100FFFE01000100 +3E43:044004407C7C04403C7804407C7C0440054011001FF821000100FFFE01000100 +3E44:100011FC512451FC7D2451FC908811441E42F0F8518812501020105011881606 +3E45:1080108050FC51547AD450B4912C124418943108D04010A412AA128A14781000 +3E46:100013FE522250207DFE502091FC11241DFCF12451FC102013FE102010201020 +3E47:100011FC510451FC7D0451FC908011FE1E22F1225152110211FA100210141008 +3E48:082008207E7E08C4FF281C102A2848C6010011001FF821000100FFFE01000100 +3E49:100011FE511051207D7C5144917C11441D7CF110511011541152129212501420 +3E4A:1040104053FE52A27C9051FE912013201DFCF120512011FC1120112011FE1100 +3E4B:1120113C514452A87A1056A89AC612801A8832B0D28412881232120412181260 +3E4C:1040102053FC50007D08509093FE12201EA0F2FC5320122012FC1420142019FE +3E4D:1040102053FE50887C5053FE922212FA1E22F2FA528A128A12FA1202120A1204 +3E4E:100011FC512451FC7D2451FC904010881DF0F020504413FE1022112412221060 +3E4F:1088108853FE50887CF8502091FC11241DFCF02053FE102011FC102013FE1000 +3E50:11102110CAA814443240D27C154014FE090011001FF821000100FFFE01000100 +3E51:101417FE501053D0781053D0901013D01A5033D0D25013C8124A13CA11861242 +3E52:10501252515450507BFE5088905013FE182031FCD02013FE1050108811041602 +3E53:1020102051FC50207BFE5108939C11081988363ED00013FE109010901112120E +3E54:100013FE500051FC7D2451FC912413FE1C00F1FC512411FC112411FC100013FE +3E55:7DFE002000FCFE8428FC288428FC4A844CFC884811841FF82100FFFE01000100 +3E56:1020112450A851FC784053FE908811041AFA3040D1A4105811B4105213901030 +3E57:102013FE502051FC7C0053FE900211FC1C20F3FE500013FE100413BE12A4138C +3E58:100011FC502053FE7E2251AC902011AC1C00F3FE502011FC115411541154110C +3E59:108812AA52DC54887954522293FE12021DFC3104D1FC110411FC110411FC1104 +3E5A:108812AA52DC54887954522293FE120218F83088D0F8100011FC110411FC1104 +3E5B:200027FEA040A2EEFAAAABEAAAAE2AE83BAAECE6228825F42290206021982606 +3E5C:08200A280924092408207EFE0820082008501450125012882088210442048402 +3E5D:0004441E29F0111029104910891009FE1910291049108908090A094A51862102 +3E5E:0008441C29E011002900490089FE0910191029104910891009100A1052102410 +3E5F:00404440284013F828484848884808481FFE284048A088A00910091052082406 +3E60:00204420282013FE2820492489240924192429FC4824882008220822501E2000 +3E61:00404420282013FE28404840888809081BF028204840888809040BFC51042000 +3E62:02008A005200221E57D292521252125232525252925212521452145EA9525080 +3E63:0080888050F82108531094A0104010A033185C0690C0102010101180A0604010 +3E64:00204420282011FC2820482088200BFE182028404840888809040BFE51022000 +3E65:00404420280013FE282048208820082019FC2820482088200820082053FE2000 +3E66:00008BFC508420845084910411141208340051FC9104110411041104A1FC4104 +3E67:00204420282011FC292449248924092419242BFE482088500850088851042202 +3E68:002044202820102029FC492489240924192429FC492489240924092451FC2104 +3E69:000045FC2884108828504820885008881B26282049FC88200820082053FE2000 +3E6A:000097BC54A424A454A494A414A41FFE34A454A494A414A414A415A4A8545088 +3E6B:002044202BFE102029FC482489FC092019FE2822482A88540850088851042202 +3E6C:004088405FFE2040504097FC1444144437FC50409240114010801140A2304C0E +3E6D:0020442029FC1124292449FC8924092419FC282048248818083208CA53062002 +3E6E:000045FE28201020284049FC89040904190429FC490489040904090451FC2104 +3E6F:009044902890111029FE4B108D10093819382954495489920910091051102110 +3E70:004044442A441148295048408FFE0890189028904890889209120912520E2400 +3E71:000045FC29041104290449FC882008201920293C492089200AA00A60543E2800 +3E72:0020442229FA102428244BFE8810082019FC288849108AFE0C10081050502020 +3E73:000047FE2840104029FC488488840BFE1800280049FC89040904090451FC2104 +3E74:000045FE2820102029FC4924892409FC1924292449FC892008A0084050B0230E +3E75:000045FE2800109229244A4889240892180029FE482088200820082053FE2000 +3E76:0000880653B8208850889108113E1388308852889288113E11001280A47E4800 +3E77:4210241418122412521010FEFF10201028107E28AA282A282A442E4408840902 +3E78:0020444029FC1104290449FC8904090419FC28504850885008920892510E2200 +3E79:0040882053FE222052FC9224122413FE3224522492FC122012501450A4884906 +3E7A:002044222BB410A828A849248AA2084019FC2904490489FC0904090451FC2104 +3E7B:001C45E0282010202BFE48A889240A4218402BFE4888890808D0083050482184 +3E7C:0080448028FE11022A424A4A895208421BFE284248E289520A4A084250542008 +3E7D:00504448285E13E42828483288CA0F0618502848485E8BE40828083250CA2706 +3E7E:0110891053D8225454529A90111012FE3C00500093F8120812081208A3F84208 +3E7F:00204420283E102029FC490489FC090419FC292448208BFE0820082050202020 +3E80:0080448028FC11542A5448A489240A4418942908484088A40AAA0A8A54782000 +3E81:009245242A4811242892484088800BFE1A022A8A4A528A220A520A8A53FE2202 +3E82:00148812501027FE5410941015D01412341255D49554154815DA142AA8465082 +3E83:008844882BFE1088290049FC89040A0419F42914491489F40914080450282010 +3E84:004044A0291012082DF648008BC40A541A542BD44A548A540BD40A44525422C8 +3E85:0080888051FC220454089BFE1200128032FC5320922013FE14201450A8885306 +3E86:02104510287E1310292849A88944080019FC2904492489240924085050882304 +3E87:001090145FD229126910A97E2B902A906A90AB982928292829242FC4A0444082 +3E88:00204524292411FC28204BFE8800082019FC2924492489FC0820082453FE2102 +3E89:10001078FE4810487C480086FE0082FC7C4400441428FE281010282844448182 +3E8A:01044488280013FE2820482089FC082018202BFE484088240AA20A8A54882078 +3E8B:0120891052082486591093F81008100037BC508494A4129414A41084A2944108 +3E8C:011088A0500027FE50A093F810A817FE30A853F890A011B012A814A6A0A040A0 +3E8D:0040882053FE2202541491E01100110031FC5110911017FE10001090A1084204 +3E8E:002097FE542025FC542497FE142415FC342055FC952415FC152419FCA924512C +3E8F:002045FC292413FE292449FC882009FC192429FC48408BFE088809D05070238C +3E90:012446482924100029FC492489FC092419FC28204BFE887008A8092456222020 +3E91:0040448829FC11082A524BFE885009881E2628C04B1088640B88083050C02700 +3E92:000097BC508424A4529494A410501188362650C09310106413881030A0C04700 +3E93:002047FE282011FC28204BFE880009FC190429FC490489FC090409FC50882104 +3E94:000E8BF050442224510893F8120813FC320453FE920212AA12AA1502A4144808 +3E95:007897C05248215057FC91501248140633F85248924813F812481248A3F84208 +3E96:00089788508821106FDEA49424A427946494A794249424C827882C94A0A440C2 +3E97:000047DE2A5212522BDE480089FC092419FC292449FC88200BFE082050202020 +3E98:0090448829FE11102B104DFE8910091019FE2910491089FE09000AA452522452 +3E99:0080884057FE240251F8914817FE122833FC501093F81248124812A8A1104608 +3E9A:00109410527C201050FE9044162812FE3210527C921012FE12101210A5FE4800 +3E9B:03FC8A4053F8224053F8924013FC10043554500891101FFE11101110A2104410 +3E9C:00908BFC529423FC529493FC100013FC320052F8920013FE15201514A5484986 +3E9D:001097D0551027DE545097E8150417C4300053F892A812A812A812A8AFFE4000 +3E9E:01408A4C52642244534C926412A413AC32A452A497FE100011101108A2044404 +3E9F:000097BC508424A4529494A41120121037FC5A2093FC122013FC1220A3FE4200 +3EA0:008090405FFE29126208A5842E0E2A746A54AB542AD42A542A522D54B75C4084 +3EA1:000097FE544425986488A7DE248825DC66AAA48824202520253C2920A92057FE +3EA2:07FC904057FE24425B5C9040175C112033FC56209BFC122013FC1220A3FE4200 +3EA3:010891EC510A27E86528A5DE272824EA640AA7EA240C27EC2A2A2BEAB15647E2 +3EA4:0148894C52AA200857FE91481368114A336A514C936C1148116A139AA0264042 +3EA5:01F08A1057FC220453FC922413B8122231FE521097FC124413FC10D0A14A463E +3EA6:00449F445AAA2AEE6E44AAAA2AEE2E006A28AAAA2BAA2EEE3A282228A2484288 +3EA7:07BC94A457BC200057FC908013F8120833F8520893F81110120817BCA4A447BC +3EA8:00200020FC201020102010407C4010401080108810841D04E3FE410200020000 +3EA9:00040004FE841084108410847C841084108C109410E41E84F004400400040004 +3EAA:00400040FE401040104010507C4810441044104010401E40F040404000400040 +3EAB:00080008FE081088108810887C8810881088108810881E08F008400800280010 +3EAC:000001F0FD101110111011107D9011501150111011101D12E2124212040E0800 +3EAD:000001FCFC041008101010207C2013FE1020102010201C20E020402000A00040 +3EAE:000001FCFC001000100013FE10407C40108010FC100410041C04E00440280010 +3EAF:00007FFC010001003FF801000100FFFE00000100FFFE0280044008203018C006 +3EB0:000003FEFC201020102011FC7D2411241124112411241D34E128402000200020 +3EB1:100017F82110613CA10422042414280820007FFC01003FF801200110FFFE0000 +3EB2:000001F8FC481048104810487C4811F81088108810881C88E088408803FE0000 +3EB3:00200020FE20103E102010207C2011FC1084108810481E50F020405001880606 +3EB4:00200028FE241024102011FE7C2010201020105010501E50F088408801040202 +3EB5:00800080FC8010FC1104110812407C40104010A010A011101D10E20844040802 +3EB6:00080088FE481048100810887C4810481008100E11F81E08F008400800080008 +3EB7:00200028FC24102011FC10207C70107010A810A811241D24E222402000200020 +3EB8:080009F011103190515091521112120E04007FFC01003FF801200110FFFE0000 +3EB9:00200020FC401088110413FE7C021088108813FE10881C88E108410802080408 +3EBA:000001FCFD041104110411FC11047D04110411FC110411041D04E10441FC0104 +3EBB:00200020FC2013FE102010207DFC11241124112411241D34E128402000200020 +3EBC:000003FEFC221024102010207D20113C1120112011201D20E2A04260043E0800 +3EBD:000001FEFC101010102010207C6810A41122122210201C20E020400003FE0000 +3EBE:000003FCFA042204220422F4FA9422942294229422F43A94E204420402140208 +3EBF:000001FEFD1011101110117C11447D4411441144117C11101D10E11041FE0000 +3EC0:00200020FBFE2222222223FE2222FA2223FE2020212038A0E04040A001180606 +3EC1:00000000FDFC1104110411747D5411541154115411741D04E10441FC01040000 +3EC2:01040084FC88100013FE10887C881088108817FE10881C88E108410802080408 +3EC3:044004403FF824483FF824483FF800007FFC010001003FF801200110FFFE0000 +3EC4:0008003CFDC01000100013FE7C2010201120113C11201D20E2A04260043E0800 +3EC5:00200020FC5010881104120210F87C00100013FE102010401C88E10443FE0102 +3EC6:00400080F908220427FE20022000FBFC220423FC220423FC3A04E20402140208 +3EC7:00200020FC501088110412027DFC10201020102011FC1C20E020402003FE0000 +3EC8:0008001CFDE01100110011FE7D001100117C114411441D44E144427C02440400 +3EC9:00200020F920213C2120212027FEF8002020212421243A28E410402000C00700 +3ECA:00800080FCF81108121011FC11247D24112411FC105010501C90E0924112020E +3ECB:00200020FDFE1020102011FC7D24112411FC102010701CA8E124422200200020 +3ECC:00200020FC501088110412FA7C20102013FE102011281D24E222442200A00040 +3ECD:000001FCFD04110411FC10007C0011FC1020102013FE1C20E050408801040202 +3ECE:010001007FFC0100FD7C111011107D7C11101D10E2FE4280044008203018C006 +3ECF:000001FCFC04100410FC10047C0411FC102010A410A41D28E050408801040202 +3ED0:00400040FC88110413FE100210887D44124210F8118812501C20E05041880606 +3ED1:001C00E0FC2011FE107010A87D24122210F8101010201DFEE020402000A00040 +3ED2:000003FEFA02221A22E222222222FBFE2222227222AA3B26E222422203FE0202 +3ED3:000007E0FA5E2252225223D22252FA5423D4225422483AE8E754405400620040 +3ED4:0008003CFDE0102013FE10A810A87CA813FE10A810A813FE1C20E02041FC0000 +3ED5:000003FEFA02220223FE22102292FA92229222FE22103A92E292449204FE0802 +3ED6:00400040FBF82048204827FE2048F84823F8244422E83950E248444601400080 +3ED7:044004407C7C04403C7804407C7C044004407FFC01003FF801200110FFFE0000 +3ED8:00400020FBFE2222202021FC2124F92421FC2124212439FCE124402000200020 +3ED9:00400020FBFE2080210423FEF80221FC210421FC210439FCE104410401140108 +3EDA:000003DEFA522252225223DE2252FA52225223DE22523A52E2524252055208A6 +3EDB:000001F8FD08110811F811087D0811F8108011FC12541C94E124424400940108 +3EDC:00880088F8882088215422222442F82020202120213C3920E2A04260043E0800 +3EDD:00820082FBE22082208A23EA22AAFAAA23EA208A21CA3AAAE4A24082008A0084 +3EDE:00400020FBFE2202220223FE2200FA0023FE235225523DFEE552455209520106 +3EDF:00400040FBFE208021FC222025FEF80021FC210421FC210439FCE10401140108 +3EE0:00400020FBFE220220882104FA222028202423FE20203850E050408801040202 +3EE1:00480148FD4813FE114811487D78110011FE102013FE1C70E0A8412406220020 +3EE2:02100110F91027BE2228224823AAFAAE22BA22EA22AE3AA8E4AA44A209A2101E +3EE3:00880088FBFE208820F8208820F8F888208823FE21003948E184410001FE0000 +3EE4:00880088FBFE2088210021FC2104FA0421F42114211439F4E114400400280010 +3EE5:00880048FC5013FE105010507DFC11541154118C11041DFCE104410401FC0104 +3EE6:01FC0124FD2411FC112411247DFC1020102013FE12221E2AE2FA420A02020206 +3EE7:01040104F9DE22442554209E2104FA24242423FE207038A8E124462200200020 +3EE8:00007EFC48447E5443287E9048287EC600007FFC01003FF801200110FFFE0000 +3EE9:011000A0F80027FE20A023F8F8A827FE20A823F820A039B0E2A84CA600A000A0 +3EEA:00A00090FDFE132015FC11207DFC112011FE110013FC1C88E09E4102020A0404 +3EEB:000001FCFD2411FC112411FC7CA810A813FE10A810A81DFCE02043FE00200020 +3EEC:01FC0020FBFE222221AC2020F9AC200021FC200023FE3880E0FC400400280010 +3EED:00400020FBFE2020204822F2F924225220F8200820203BFEE020402000200020 +3EEE:01000110FBDC225425542288F90822F42402200023FC3840E150424805440080 +3EEF:0040007CF84023FE22422278FBC4223C220822F023243AA8E5FE442008A00040 +3EF0:008803DEFC8811DC108813DE7C88100013FC100410041DFCE004400403FC0004 +3EF1:0020047CFA842148203020CE2610FA7C2210227C22103AFEE210421005FE0800 +3EF2:002001FCFD2413FE112411FC7C2011FC112411FC10401DFEE08841D00070038C +3EF3:00880088FBFE2088204220E2FB82208A208A27EA218A39CAE2AA4482008A0084 +3EF4:000001F8FD0811F8110811F87C0013FC129413FC10001DF8E090406001980606 +3EF5:03FE0202FBFE220022FC220823FEFA10223023CE22423A84E4EE47840884018C +3EF6:010801EEFA942042202021FC2024FBFE202421FC202039FEE02043FE00200020 +3EF7:02080208EFBE420842084FBE4AAAEAAA4AAA4BAE4208671CCAAA124802080208 +3EF8:000007BCF908252827BC231825AAF946200023F822083A08E3F84208020803F8 +3EF9:FDFC104021A27C54A5B824543D92246000007FFC01003FF801200110FFFE0000 +3EFA:3FFE21042E3822102FBC27182AB4325220002FFC208027F820A040905FFE8000 +3EFB:01080088FBC8201023DE226423D4F81423D42054209438E8E388409402940122 +3EFC:000003FEFC5013FE125213FE7C0011FC110411FC11041DFCE02043FE00200020 +3EFD:00A00090FDFE132011FC11207DFC112011FE110013DE1E52E252427202020206 +3EFE:0100FFFE104824FE799010FC22907CFC089030FEC0807FFC01003FF80120FFFE +3EFF:000003F8FAA822A823F82100FBFC248423E422A422A43BE4E09447F400140008 +3F00:00100410FA7C201020FE20442628FAFE2210227C22103AFEE210421005FE0800 +3F01:01040088FBFE202021FC2020FBFE20542192209023FE3890E0D4438A009601A2 +3F02:0A0033B822083BB820883AB82288FFFE80027FFC01003FF801200110FFFE0000 +3F03:01240248F924200023FC22942264FA9423FC224823683A48E36A424A02460362 +3F04:01240124FAAA23AE212422AAFBAE202427FE201027D43D54E7CA454A07D60022 +3F05:00200010FBFE224422FE224423FEFA1022FE229222FE3A92E2FE420002440482 +3F06:008802AAFADC24882154222227FEFC0221F82040204039F8E050404803FE0000 +3F07:00200222FBFE209021FE231025FEF91021FE211021FE21003BDEE25202720206 +3F08:000007FCF4A424A427FC221022A8F4BE2F68223C24A82FBC3028CAA80ABE0020 +3F09:0210071038102A7C2A542A542A102A282A282948294A288628404A304D0E8900 +3F0A:1008101C10E8FEA810A854A854A854A854A87CA410A410A414A2192811340224 +3F0B:1008101C10E810A8FEA810A810A810A87CA844A444A444A444A27D2845340224 +3F0C:08081C1C70E850A850A850A858A854A854A854A450A450A458A255289D340624 +3F0D:1008101C10E8FEA810A87CA810A8FEA830A838A454A454A490A2112811341224 +3F0E:0220071038102AFE2A002A442A822A282A1029282944288428404A304D0E8900 +3F0F:04081E1CE0E822A892A854A848A810A8FCA824A444A428A410A2292845348224 +3F10:0804040E7F74415441547F5440547F54555455527F52555255505594819A0312 +3F11:1008101CFEE810A8FEA892A8D6A8BAA892A8FEA410A438A454A2932811341224 +3F12:027C0744387C2A442A7C2A002AFE2A402A7E29AA295228AA28444A304D0E8900 +3F13:08881C50700053FE505051FC585457FE545455FC505050D8595456529C500450 +3F14:0008001C7CE844A87CA844A87CA800A87CA854A454A454A456A2F92801340224 +3F15:1008921C54E8FEA882A87CA844A87CA800A87CA454A47CA454A255287D344624 +3F16:11F03A10E3E0A020A7FCA188B650A9A8AE64A9A0A248AFBEBAAAAFBE3A8A0FBE +3F17:000001FCFE801080108010F81088108811481128112811081108114A518A2106 +3F18:100011FC10801080548054F8548854885548552855285D086508014A018A0106 +3F19:100010FC1040FE40924092789248924892A892989A88948810AA10CA108A1006 +3F1A:100008FC0840FF40004000783C48244824A824982488258846AA44CA808A0006 +3F1B:00007EFC24402440244024782448FF4824A824982488248824AA24CA448A8406 +3F1C:01001FF011101110FFFE02801C70E00E00007FFC08000FE0092010A41624181C +3F1D:10001EF8228862A894920882307EC00000007FFC08000FE0092010A41624181C +3F1E:00007EFC084008404A402A782C480848FFA808980888088808AA08CA088A0806 +3F1F:100010FC20407E4042404278424842487EA842984288428842AA7ECA428A0006 +3F20:100008FC08407F4041408278204820483EA820982088208826AA38CA208A0006 +3F21:080028FC28403E404840887808487F4818A81C982A882A8848AA88CA088A0806 +3F22:0000FEFC904090409040BC78A448A448A4A8A498BC88908890AA90CAFE8A0006 +3F23:0000FEFC1040104020407C784448444844A87C984488448844AA7CCA448A0006 +3F24:080008007F7C08243E2408447F54088800007FFC08000FE0092010A41624181C +3F25:100012FC7A4014401440FF78104820487EA8909820883C8804AA04CA148A0806 +3F26:00007DF01110119011521D12E20E440000007FFC08000FE0092010A41624181C +3F27:0000FCFC044068401040FE7892489248FEA892989288FE8892AA92CA928A8606 +3F28:080008FC14402240514088787E48024804A808987E88428842AA7ECA428A0006 +3F29:0400057C04A07F2044204438742855285558564856485448655A4D6A934A0106 +3F2A:080008FC7F40084008402A782A482A485DA888980888148814AA22CA428A8006 +3F2B:00007EFC4A404A407E404A784A487E4808A8FF9818882C882AAA4ACA888A0806 +3F2C:100010FC7C4010401040FE78444828487CA810981088FE8810AA10CA108A1006 +3F2D:1020103E7C2011FC11041D04E1FC010400007FFC08000FE0092010A41624181C +3F2E:100010FCFE4010407C401478FE4814487CA81098FC88248844AA28CA308AC806 +3F2F:0800087CFFA0082008207F3849287F2849587F4808481C482A5A496A884A0806 +3F30:0800107C7F20492049207F38492849287F5814482448FF48045A046A044A0406 +3F31:04447C5804621C42E43E00007FFC482410107FFC08000FE0092010A41624181C +3F32:0000FEFC10402040FE40AA78AA48AA48A2A896981088FE8810AA28CA448A8206 +3F33:100010FC52405140954008783048C0487EA842987E8842887EAA42CA7E8A4206 +3F34:00007CFC544054407C40547854487C4810A8FE9892889688BEAA82CA8A8A8406 +3F35:00003EFC22203E2022383E280048FF680858084A2F4A286A284658004FFE8000 +3F36:100010FC2840444082407C780048E248AAA8AA98EA88AA88AAAAE2CAAA8AA406 +3F37:100092FC92409240FE400078FE48104820A8FE98AA88AA88AAAAAACAAA8A8606 +3F38:1000087CFFA080A0142022384928142822584148BEC82248225A226A3E4A2206 +3F39:440044FCFF4054400840FF78404840487EA800985488548855AA56CA948A0006 +3F3A:100008FC7F4048405E404A787F484A485EA848985E88528852AA52CA5E8A9206 +3F3B:11102110CAA814443240D27C154014FE08007FFC08000FE0092010A41624181C +3F3C:0000FEFC2840FE40AA40AA78FE4800487CA80098FE88108854AA92CA508A2006 +3F3D:100010FCFE401040BA405478BA481048BAA85498BA88108828AA24CA428A8006 +3F3E:0800047C7FA0522052207FB852A852A87FD8524852485BC8525A52EA9B4A1206 +3F3F:1000087C7F202220FF2000387F2849287F5849487F4808487F5A086A0F4AF006 +3F40:2200147CFF2014207F20553863285D2841587F480848FF48145A226A414A8006 +3F41:3FFE21042E3822102FBC27182AB4325220003FFE240027F0249048524B128C0E +3F42:0800147C22205D2080A03E3822283E280058774811485548335A556A114A3306 +3F43:0E00F0FC92405440FE403878544882487CA8549854887C8854AA54CA7C8A4406 +3F44:240CFF7024403C40247E3C482448FF482448428800007FFC08000FE011241C9C +3F45:0A0074FC15405240224021785D4880487EA8429842887E8842AA24CA0F8AF006 +3F46:100092FC5440FE4082407C7844487C4800A87C9854887C8854AA54CA7C8A4406 +3F47:0A803138228838382288393822887FFE4002BFF408000FE0092010A41624181C +3F48:48F8705044203DFC20247CB890A07D7E2A007FFC08000FE0092010A41624181C +3F49:00007E40487E7E9043087EFE48AA7EFE00007FFC08000FE0092010A41624181C +3F4A:49005D7C6120DDA043205D3841285D28B6D89C4800487F48025A346A1C4A6306 +3F4B:210447C88812F3BC20084B92F83E0380AAAAABAA00007FFC08000FE011241C9C +3F4C:7F00087CFFA088A06B2010386F28452855586B4810487F48495A7F6A494A7F06 +3F4D:220022FC22402240FF402278224822483EA822982288228822AA3ECA228A0006 +3F4E:22102210FF1022103EFE22923E9222102228FF28402854286248404A7E8A0106 +3F4F:204010A083184DF61000E3F8220823F800001010FFFE10101FF010101FF01010 +3F50:48884850480049FEFC5049FC48544BFE485479FC485048D849547A5248500050 +3F51:4BFE48504BFE4A52FE524BFE480049FC790449FC490449FC48207BFE48200020 +3F52:00107C10549054907CFC549055107C101010FEFC12101210221022104AFE8400 +3F53:010011001FF821005FF00100FFFE081048507E7C489088107E7C08100F10F0FE +3F54:28102810AA506C7C2850FE901010307C4A109C102C10DAFE2900C8C0283E1000 +3F55:010001003FF821083FF821083FF800007FF8000810081FFE0002000200140008 +3F56:004000407C40544055FC544454447C4454445484548454847D04450402280410 +3F57:002000207C2054205420542054207C2054505450545054887C88450402040402 +3F58:004000207C0055FC5400540054F07C9054905490549054927C924512010E0200 +3F59:004000407C805488550457FE54027C9054905490549054907D124512020E0400 +3F5A:00003FF8210821083FF8210821083FF8000011003FF841000100FFFE01000100 +3F5B:008000807D0055FC5604540455E47D245524552455E455247C04440400280010 +3F5C:10001EF8228862A894920882307EC0003FF8210821083FF8210821083FF82008 +3F5D:7F0408441E44224454440844300CC0001FF0111011101FF0111011101FF01010 +3F5E:00003EF82288228822883EF8000000003FF8210821083FF8210821083FF82008 +3F5F:0004001E7DE054225512549454807C0855FE5408548854487C48440800280010 +3F60:002000207C2057FE5420542055247D24552456AA542054507C50448801040202 +3F61:00400080F9FCA924A924A9FCF924A944A9FCA890A910FBFE8810001000100010 +3F62:00400080FBFCA910AA48AC46FBF8AA48AA48ABF8AA48FA488BF800420042003E +3F63:00140012F810AFFEA810A810FBD2AA52AA52AA54ABD4F80888EA071A02260042 +3F64:008000807CFE5502562254AA54727C2255FE5422547254AA7D224422000A0004 +3F65:000000FC7C48543055FE545254947D105630542055FE54707CA8452402220020 +3F66:08202AA44D28145022887FFE400280043FF8210821083FF8210821083FF82008 +3F67:00840044F848ABFEA884A884F908A94AAA52AB9CA884F9088908025203DE0042 +3F68:01080088F890ABFCA840A9F8F840ABFEA880A900A9FCFA208C20082003FE0000 +3F69:00400088F9FCA908AA52ABFEF850A988AE26A8C0AB10F8648B88003000C00700 +3F6A:01040088F800ABFEAA22AAAAFA72AA22ABFEA800A9FCF90489FC010401FC0104 +3F6B:0100FFFE104824FE799010FC22907CFC089030FEC0803FF821083FF821083FF8 +3F6C:0000FEFE00007C7C444444447C7C0000FEFE92929292FEFE92929292FEFE8282 +3F6D:000001FCF820ABFEAA22A9ACF820A9ACA800ABFEA820F9FC895401540154010C +3F6E:0FE009200FE009200FE07C7C54547C7C54547D7C11001FF821005FF00100FFFE +3F6F:022203FEF890A9FEAB10ADFEF910A9FEA910A9FEA900FBFE8A8A037602520276 +3F70:0000777C55145514551077105550555C55507750555055505550B55089BE1300 +3F71:008000401FFE1000900852085208120832085208923813C82208200840088008 +3F72:008000401FFE1000900057FE50801100320053F8900810082008200840508020 +3F73:008000401FFE1000900057FC5040104030405FFE904010402040204041408080 +3F74:008000401FFE10009010501057FE101030105210912010A0204020A043188C06 +3F75:008000401FFE1000904050405040104037FC504090401040204020404FFE8000 +3F76:008000401FFE1000900053F850081008300853F8920012022202220241FE8000 +3F77:008000401FFE1040904050445768117031605150925012482444284241408080 +3F78:008000401FFE10009040504053FC1244344850A090A01120212022224422881E +3F79:008000401FFE1000901C53E05200120033F85288928812502420245048889306 +3F7A:008000401FFE100097F8510851101120313C5204928812502420245048889306 +3F7B:008000401FFE1040904057FC5040104037F85208911010A0204020A043188C06 +3F7C:008000401FFE1000900457E45024102433E45204940417E42024202441448084 +3F7D:008000401FFE10409040504057FE1040304053F8920812082208220843F88208 +3F7E:008000401FFE1000904052485248124833F85048904014442444244447FC8004 +3F7F:008000401FFE1000901C53E052901290329052909290128824C824A448D49092 +3F80:010000803FFE20002080A0806FFC208020806080BFFE2100221044084FFC8404 +3F81:008000401FFE104090505048504017FC30E05160915012482444284240408040 +3F82:008000401FFE108090805110520817FC3204500093F812082208220843F88208 +3F83:008000401FFE1080904057FC54041808320052109260138022002204420481FC +3F84:008000401FFE10009040504057FC14443444544497FC14442444244447FC8404 +3F85:008000401FFE1040905C53E05240124033FC504490C4115422482C4040408040 +3F86:008000401FFE1040904053F85248124833F8524892481FFE2208220842288210 +3F87:010000803FFE20002000A7F86408240827F86408A40827F82408440847F88408 +3F88:008000401FFE100091085108510812FE320856489A2812282208220842288210 +3F89:008000401FFE1040904050A0511012483426502093F81008211020A040408020 +3F8A:010000803FFE20402040AFFE604027FC24446454A4E8215022484C4640408040 +3F8B:008000401FFE11109110521052FE16103A385238925412542292221042108210 +3F8C:008000401FFE10009040524053FC144030405FFE91201120212022224422981E +3F8D:008000401FFE100090005FFE5040108037FC54A494A414A424A424A444948408 +3F8E:008000401FFE1000900057BC54A414A434A454A494E414042404240447FC8404 +3F8F:008000401FFE1000904057FC504010403FFE5000904017FC204020405FFE8000 +3F90:008000401FFE100090045FC45214121437D454549A5411942084210442148C08 +3F91:008000401FFE104090A0511052081DF63000500093F812082208220843F88208 +3F92:008000401FFE11009100511E5FD2125232525452949212922112229E44528840 +3F93:008000401FFE100093F0521053F0100037F8540897F8140827F8240844288410 +3F94:008000401FFE1000900053F85208120833F8500097FC14042404240447FC8404 +3F95:008000401FFE1080904057FC520811103FFE5040904017FC2040204040408040 +3F96:008000401FFE1000900057FC544417FC344457FC904017FC204020404FFE8000 +3F97:008000401FFE1100908057F8540817F8340857F8948214442428251046088406 +3F98:008000401FFE100097FC504053F8124833F8524893F812402140208043608C1E +3F99:008000401FFE1010972050C0513016883FFE5100924017F82A48226842508040 +3F9A:008000401FFE1120912455E85530152235A25E1E900013F8200020004FFE8000 +3F9B:008000401FFE100093F8500851F8100833F8500097FC140423F8211040E0871C +3F9C:008000401FFE10009040504057FC1040324852489554184220A0211046089806 +3F9D:010000803FFE20803FFCA0806FF828882FF86888AFF820803FFE408040808080 +3F9E:010000803FFE20002FFCA1206FFC292429246A1CAC042FFC280448044FFC8804 +3F9F:008000401FFE10009040527C524012403FFE5040914412482410206043809C00 +3FA0:008000401FFE10009880557C52101D103110517C93101D10211021104A7E8400 +3FA1:008000401FFE1100911E57D2511211123FF251129292145A2FD4245040108010 +3FA2:008000401FFE104090405FFE504012483248555498E2115022482C4640408040 +3FA3:00803FFE20802140A2206410280837F66080A0802FF82080249042A05FFE8000 +3FA4:008000401FFE1080904057FC540411103208540493F810402040204047FC8000 +3FA5:008000401FFE1000920053BC521412143FD45014920816882A4822144A148422 +3FA6:008000401FFE1080904057FC520811103FFE500093F812082208220843F88208 +3FA7:008000401FFE100093F8524853F8124833F8504097FC10E0215022484C468040 +3FA8:010000803FFE20802FF8A140622024103FFE6010A7D0245027D0401040508020 +3FA9:008000401FFE1000903853C050401FFE31505154975811542354254C40408040 +3FAA:008000401FFE104092485454586213803FF8520893F8120823F8220843F88208 +3FAB:008000401FFE104093FC5204520413FC320053FC9354155425FC29544144810C +3FAC:008000401FFE1000942457A854321522361E510093FC120423FC220443FC8204 +3FAD:010000803FFE20002310AE10625422543F586690A6102B282A28524442448282 +3FAE:008000401FFE1040908053F8520813F8320853F8900017FC204023FC40408FFE +3FAF:008000401FFE100093F8524853F8124833F8500097FE12442228229043088206 +3FB0:010000803FFE2200223CA2246FA4223C22246FA4A8BC28A42FA448C440548088 +3FB1:010000803FFE20402F50A1246A1824083BF66120A1202FFC212042244424881C +3FB2:010000803FFE22102F90A21E6FA422243FD46414A7942488248848944AA49142 +3FB3:010000803FFE288024FCA12464203850298C6100BFFE2210272040C043308C08 +3FB4:008000401FFE1040904057FC51501248344653F8920813F8220823F842088FFE +3FB5:008000401FFE120091085FC850081788303E5788900817882488248847888488 +3FB6:00803FFE200023F8A20863C822482FFE6802B3FC220823F8220843F842088218 +3FB7:00803FFE2000203EAFC0687C28402BFE6A42AA782AC42A3C320054F06494890C +3FB8:008000401FFE102097FE500051F8110831F8500097FE140225FA250A45FA8406 +3FB9:010000803FFE21202128A5B065242524259C6E40A04027FC20E0415042488C46 +3FBA:010000803FFE200027FCA44067F8244027F86440A7FC20042AA44AA450148008 +3FBB:008000401FFE1010972855445582167C3510551095FE15102754249245528420 +3FBC:010000803FFE200029F8A50865F821083DF86524A5182548258445044A0091FE +3FBD:010000803FFE20402880A5F8610821082DF86500A5FC2504250445FC4A0091FE +3FBE:008000401FFE120891105FFE512017FC31245FFE912417FC2330252859268120 +3FBF:010000803FFE22002100AFBE68A22FA428A86FA4AA2229222AAA4CA448208020 +3FC0:010000803FFE20202E2EA42464A424A424A46EAEA424242424444644588E8100 +3FC1:008000401FFE108093F8520853F8120833F8508097FC1210244829F640408040 +3FC2:008000401FFE11109550555057DE102437D45114911417D4210821084FD48022 +3FC3:008000401FFE12A892A857FC52AA14E6380057FC944413F82248224842588040 +3FC4:010000803FFE20002FDCAA146BD42D1629206FDCA9142A942C5448084FD48022 +3FC5:010000803FFE22102410A89C7090229025FE6C10B490249C24904550463E8400 +3FC6:00801FFE1000103893C0504017FC315052489486104017FC20A223144D488186 +3FC7:008000401FFE100097BC508454A4129434A4510093FC120423FC220443FC8204 +3FC8:010000803FFE22282224A57E69482E4822FE6548A9482F7E22484448487E9040 +3FC9:00803FFE204027FCA44467FC20403FFE6404A7FC240427FC240447FC42088404 +3FCA:00803FFE20002F78A2106A502F7C26306B54B28C27F8240827F8440847F88408 +3FCB:00801FFE100013F8920853F8100037BC54A497BC10401FFE215022484C468040 +3FCC:00803FFE20802140A22064103BEC20006F78A94829482F782220455048889104 +3FCD:010000803FFE2000287CAF1471242FCC2AA86FBEAAC82F882AFE4A885088A188 +3FCE:00801FFE104017FC91505FFE111037FC540497FC140417FC240427FC41108208 +3FCF:00803FFE200027F8A0886FFE210827F86310A4A02FFC304023F840404FFE8040 +3FD0:00803FFE2210223EAF4462A822103FA8625EA2222A542B082A104A605600A3FE +3FD1:00803FFE20002FBEA492628A2492222067FEAC2037FE242027FE442047FE8400 +3FD2:00803FFE20402FFCA04067FC20003FFE6002A7F820403FFE20084F7E49488F18 +3FD3:00803FFE204027FCA2486248255428A26318ADF6211021F02240427C454088FE +3FD4:010000803FFE200027FCA44467FC244427FC6000AFBE2AAA2FBE4AAA4FBE88A2 +3FD5:00803FFE20002F3CA9246F3C29242F3C69E4AA242C442B642A244B644A248BEC +3FD6:00803FFE2040207CA04067FE244225F86444A4FC24A824F824A849FC495493FE +3FD7:00803FFE20002300BCFE64103F7C2E44757CA4442E7C2A442A7C53285244A082 +3FD8:00803FFE22082AAAA248651428A22FFE6802A3F8220823F8200047FC440487FC +3FD9:010000803FFE200023F8A2A863F820002FBE6AAAAFBE20402FFE40A043188C06 +3FDA:00803FFE20002FFEA9126FFE2228244469FEAF48227E25482F7E4048557E9540 +3FDB:00803FFE20002FBEA514671C25542FFE6920AFFC29242FFC2A244BB85222A39E +3FDC:00803FFE210027F8A54864A827F8221067F8BD2E27F820002FFC49244FFC8924 +3FDD:040008003FF8200820083FF8200820083FF8020004000820101020087FFC2004 +3FDE:1008103C21E07C204420443C45E044207C20443E47E0442044227C224422001E +3FDF:1020102020407CFC44844484448444847CFC44844484448444847C8444FC0084 +3FE0:1040104422447948495048404FFE48907890489048904892491279124A0E0400 +3FE1:020004001FF010101FF010101FF00000244814500C601450644808421042603E +3FE2:00007CFC448444FC7C8444FC44847D14020808003FF820083FF820083FF82008 +3FE3:100013F822087BF84A084BF849004BFC7C444A444AA44A044BF4780448280010 +3FE4:1040104023FC784049F848804BFC49107A084DF64910491049F07910491001F0 +3FE5:1040104023FE7AA2489049FE49104B107DFE4910491049FE4910791049FE0100 +3FE6:08007F7808483E4800863E782A483E30404884861FF010101FF010101FF01010 +3FE7:102013FE202079FC48004BFE480249FC78204BFE48004BFE48047BBE4AA4038C +3FE8:100013FE22227ACC4A444BEE4A444AEE7B544A444A104A104A5E7A504A5005FE +3FE9:112410A823FE7A0248F848884BFE4AAA7A724BFE48204BFE48207FFE4AA40452 +3FEA:0820082008207F7849284A2848287EA84268422852584C48444A4A8A92862102 +3FEB:208020843E9820E42684387C00801FFC1084108817F01210212020C043301C0E +3FEC:08000800087C7F5449544A5448547E54427C424052404C4044424A42923E2000 +3FED:0C107010401040FE40927E94489048FC58A448A44CA84AA84890492889440282 +3FEE:1010101010107CFE54925494549054FC54A4FEA410A810A82890252845448282 +3FEF:010006C01830EFEE00001FF010101FF001003FFC21042FE82420424041809E7C +3FF0:201010100010FEFE00922894449082FC04A444A428A810A82890452885440282 +3FF1:100C11F0FD0011FE1D10F2101210341001003FFC21042FE82420424041809E7C +3FF2:10101010FE1010FE28924494FE9004FC74A454A454A874A85490052815440A82 +3FF3:082A082A08547F54492A4A2A482A7E0042FE429252924CFE44924A9292FE2082 +3FF4:10101010FF1024FE429281947E9024FC3CA424A43CA824A82E90F52805440682 +3FF5:080008FE08107F2049FE4AAA48AA7EAA42A2429652104CFE44104A2892442082 +3FF6:20101010FE1000FE44922894FE90A2FC10A4FEA420A83CA82490452855448A82 +3FF7:441024102810FEFE10927C941090FEFC20A43EA448A848A88E90792821440282 +3FF8:087C0844087C7F44497C4A0048FE7EAA42FE420052FC4C4444284A1092682186 +3FF9:10101210117C7C1054FE504453287DFE4510657C591049FE5510951022FE0400 +3FFA:7F0841087F08417E7F4A224A7F48227CFFD422544954AAD41C482A8849141822 +3FFB:00001FF0010001000100FFFE0100010001003FF82448244824482448FFFE0000 +3FFC:00003FF808200820FFFE082010202020402000003FF8244824482448FFFE0000 +3FFD:0440082010102FE8C40608000FE00020014000803FF8244824482448FFFE0000 +3FFE:020001007FFE400280043FF001000100050002003FF8244824482448FFFE0000 +3FFF:00007FFC0104110011F81100290047FE80003FF82448244824482448FFFE0000 +4000:100009F841082508092811107102110210FE00003FF8244824482448FFFE0000 +4001:0200FFFE04000FF018102FF0C8100FF00810083000003FF824482448FFFE0000 +4002:01007FFC40040400FFFE08201E4003C03C3800003FF8244824482448FFFE0000 +4003:00007FFC02000D08719002A00CC071A006981A86E1003FF824482448FFFE0000 +4004:020001007FFE42028924284849940E1077F000003FF8244824482448FFFE0000 +4005:20201020FC2009FC102038205420902013FE100000003FF824482448FFFE0000 +4006:01003FF80108FFFE01083FF801007FFC0000110826D01830E00E3FF82448FFFE +4007:1080108011FCFE20102011FC7C20452445247DFC00003FF824482448FFFE0000 +4008:7DFC44207D2045207DFE505048905512620E00003FF8244824482448FFFE0000 +4009:00701F800200FFFE082037D8C4463FF8200827C8244827D800003FF82448FFFE +400A:27BC14A4929444A4404011B02E4EE390206023882070038000003FF82448FFFE +400B:210021FE2220243EF82023FE22AA225223263A52E2AA43FE00003FF82448FFFE +400C:01003FF80108FFFE01083FF801007D7C11107D7C44447C7C44447FFC2448FFFE +400D:1040FEF82948FE3001CE7CF844207DFC44887CF81088FEF810503FF82448FFFE +400E:000003FE7C40444044807C80450045FC7C044404440444047C04440400280010 +400F:100010001FFC200420045FE490241FE410241FE410241FE41024000400280010 +4010:00087E084210422042447E044208421042227E424204420442087E10422000C0 +4011:000001F87C8844C844A87CA8448844507C504450442044207C50448801040202 +4012:0008003C7DE0442044207C20442047FE7C204420442044207C20442000200020 +4013:004000407C40444045F87C48444844487D4844C8444844A87CAA450A02060402 +4014:000000007DFC444444447D44454445447D444644444444847C84450402280410 +4015:000403E478244824482479E4490449047A044BE4482448247824482401440084 +4016:000000007DFC442044207C20442047FE7C204420445044507C88448801040202 +4017:0040004078404BF848487848484848487BFE484048A048A07910491002080406 +4018:000003FC789048904890789048904FFE78904890489048907910491002100410 +4019:00000100797E49124912791249D24F12791249124952499279224822004A0084 +401A:1FF010101FF010101FF010101FF000000C0070FC408440844C84709440880080 +401B:01000100790049FC4AA47CA448A4492479244A444C44488479044A0404280010 +401C:080008001FF82248444808881128221004001FF010101FF010101FF010101FF0 +401D:00100110791049124912791449D84910791049104910491279524992010E0000 +401E:001001107C90449044107D10449044907C10441E47F044107C10441000100010 +401F:0090009078904BFC489478944BFC4A907A904BFE48924892791A491402100410 +4020:00007CFC4484448444847CFC4484448444847CFC4484448444847CFC44840000 +4021:002000207C204420443E7C20442044207DFC4504450445047D04450401FC0104 +4022:00400040788048FC49207A20482048207BFE4820485048507888488801040202 +4023:00000040782048284808788848904A947AA24AA24CC2488879884A8804780000 +4024:102010203F304128A224142208203020DFF010101FF010101FF010101FF01010 +4025:0008001C7DE0450045207D20452045FE7C20442044A844A47D22462200A00040 +4026:00200020782048204BFE78204820482079FC4904490449047904490401FC0104 +4027:01100110791049104BFC79104910491079104FFE4800491079084A0804040804 +4028:0008003C79E0482048207BFE48204820782049FC490449047904490401FC0104 +4029:0080008078F849084B107CA0484048A079184A064DF849087908490801F80108 +402A:00800080793C4A004C807880497E4B087D084908490849087908490801280110 +402B:0040004078A049104A087C064BF8480078004BF84A084A087A084A0803F80208 +402C:0040004078A049104A087C064BF84840784048404BF848407840484007FE0000 +402D:002000107C1045FE44207C24444444F87C124422444445887C10442800440182 +402E:008000407BFC49004900790049F8480079504950495049507A504A520452080E +402F:004800447BFE484048407BFC4A444A447BFC4A444A444BFC7A444A4402540208 +4030:0088788449024A2248207850488849047A0249FC490449047904490401FC0104 +4031:0080008079F849104AA0784049B04E4E79F0484049F048407FFC484000400040 +4032:0100010079FC4A004DF87908494849287BFE49084A484A287BFC480800500020 +4033:002000207BFE4820482079FC4924492479FC4820487048A879244A2200200020 +4034:000003FC780049244A487C904A48492478004BFC484048407840484007FE0000 +4035:00200040788849044BFE7882488049FC7A2048204BFE48207850488801040602 +4036:008000407BF84A084A087BF84A084A087BF84A404A444A287A104A8803060200 +4037:00880088788849C8489E788A488A4BEA788A488A490A494A7BEA4912002A0044 +4038:080C08F07E8008800EFE78880888290812081FF010101FF010101FF010101FF0 +4039:0020002078204BFE482078204924492479244AAA482048507850488801040202 +403A:108020FC6910AA9028602890230C00001FF010101FF010101FF010101FF01010 +403B:0020002079FC492449FC792449FC48007BFE4880490049FC7804480400280010 +403C:000003FC7A004A004AF87A004A004BFC7AA04AA44AA84A907A904C8804A408C2 +403D:0004000E7BB8488848887928492E4BA878A84AA84AA8493E79004A80047E0800 +403E:0000FEFC104420287E10A2283EC600001FF010101FF010101FF010101FF01010 +403F:0104010EF130912097E0F120913E9164F1A4972491249124F124912405440284 +4040:1FF010101FF010101FF010101FF0080C08F07E8008800EFE7888088829081208 +4041:004000207BFE4800480079FC49044904790449FC482048A879244A2200A00040 +4042:7EFC48447E4442287E1048287EC600001FF010101FF010101FF010101FF01010 +4043:002000207BFE4820482079FC482048207BFE484048A449A87A904C8800C60080 +4044:0020002079FC482048207BFE4888485079FC482048204BFE7820482000200020 +4045:000001FC7808481048207BFE482048A0784049FC495449547954495407FE0000 +4046:004000807BFC49104A487C464BF84A487A484BF84A484A487BF848420042003E +4047:020001007FFE4202A96C49940E1077F000001FF010101FF010101FF010101FF0 +4048:104008403E7E228823503E20205841869FF010101FF010101FF010101FF01010 +4049:104808443E7E23C022243E282212206A41869FF210101FF010101FF010101FF0 +404A:000003F87948491048A0784049B04E0E79F8490849F8490879F8490801F80108 +404B:0048014879484BFE494879484978490079FE48204BFE487078A8492406220020 +404C:000003FE7A224BFE4A227BFE480049FC790449FC490449FC7904490401140108 +404D:00140012F01097FE9410F41095D09412F41295D495549548F5DA942A08461082 +404E:004000207BFE480049FC790449FC48007BFE4A0249FC48207820482000A00040 +404F:000003FE785048504BFE7A524A524BFE780048404FFE48887990486000D80304 +4050:008800887BFE488848A8782049FC4924792449244BFE48207850488801040202 +4051:000001F8790849F8490879F848004BFE790049FC4A544C9479244A4400A80110 +4052:000001F87908490849F878004FFE490879F8490849F84908793E4FC800080008 +4053:000000887A524A224A527A8A4A024BFE788849444A7A48887950482000D80706 +4054:001E03E078444924488879FC484048407BFE488048FC494479284A1000680186 +4055:000003FC7A044BFC4A207BFE4A104A8A7B0648004BFC4A047BFC4A0403FC0204 +4056:0020012478A848204BFE78A849244A0278404BFE488849087990486001980604 +4057:002001247924492449FC78004BFE480079FC4904490449FC7888485003FE0000 +4058:0008003C7BC048044A44792849FC4A2078204BFE482049247924492401FC0004 +4059:000001FC790449FC490479FC48204BFE7A0248404BFE48887990486000980304 +405A:000001F87908490849F878004BFC4A047BFC4A044BFC4A047BFC489001080204 +405B:002000407BFC4A244A247BFC4A244A447BFC484048A848B4793C49220222041E +405C:000001FC7D0445FC45047DFC442045247CA8442047FE44907C9045120212040E +405D:08202AA42CA84920145022887FFE40029FF410101FF010101FF010101FF01010 +405E:082014502288082014502288FFFE08001FF028104FF088100FF008100FF00810 +405F:0108008878904BFC484079F848404BFE7880490049FC4A207C20482003FE0000 +4060:011000A078004FFE48A07BF848A84FFE78A84BF848A049B07AA84CA600A000A0 +4061:000003DE7A524BDE4A527BDE4A024A227A224A224A524A4A7A8A4A02020A0204 +4062:02100110F11097BE9240F20093BE928AF28892A892AE92A8F4A895A8085E1080 +4063:00207BFE482049FC492479FC492449FC78224BFE48084BFE7908488800280010 +4064:004000207BFE488848507BFE4A224AFA7A224AFA4A8A4A8A7AFA4A02020A0204 +4065:000003FE7A484A484BFE7A484A204BFE7A404AFC4B444A447A7C4A0003FE0000 +4066:0040007C78404BFE4A427A784BC44A3C7A004AFC4A844AFC7A844CFC048409FE +4067:008800887BFE488848F8782049FC492479FC482049FC48207BFE485000880306 +4068:0200011EF7D2901297D4F45497D89014F7D29092911291DAF714911005100210 +4069:0040004078F849084A1079FC4924492479FC4924492449FC78004954012A022A +406A:02000202E23CAFA0A220EFA0AABEAFA4EAA4AFA4A224AFA4E224A24402440284 +406B:000001FC792449AC4974792449FC482079FC48204BFE48007AA44A5204520000 +406C:0104008878004BFE4A227AAA4A724A227BFE480049FC490479FC490401FC0104 +406D:002800247BFE4850488879044A024998795449104BBE49107AA84AA804440882 +406E:000007BCF108952897BCF31895AA9946F00093F892089208F3F89208020803F8 +406F:004000A0F11896E69000F3F8920893F8F00097BC908494A4F29494A402940108 +4070:000000FEF0109720927CF2449244927CF244927C93C49E44F07C902800440082 +4071:0020002079FC48204BFE79084B9C490879884E3E48004BFE789048900112020E +4072:000003FE7A524A524BFE780049FC490479FC490449FC490479FC488801040202 +4073:008800887BFE488848247BFE4850488879044A8A48884BFE7888488801080208 +4074:00400FFEF00097FC9404F5F4951497FCF00093F8920893F8F20893F800000FFE +4075:000001FC7954495449FC78004BFE480079FC490449FC48627894498802A400C2 +4076:01080208F7C8945097DEF46497D49214F11497D4921493C8F2489454055408A2 +4077:0A803138228838382288393822887FFE40029FF410101FF010101FF010101FF0 +4078:009003FCF29493FC9294F3FC900093FCF20092F8920093FEF520951405480986 +4079:001003C87A7E4A404A627BD44A004A3E7BC84A484E7E4A487A484BC802480008 +407A:000001FC795449FC482079FC48204BFE7888485049FC48207BFE482000200020 +407B:044404E4E8A8AAAAAEEEE4A4AAAAAEEEE242A040AFFEA0E0E150A2480C460040 +407C:01FC792449AC492449FC782049FC48207BFE49544A2A482079FC482003FE0000 +407D:01240248792448004BFC7A944A644A947BFC4A484B684A487B6A4A4A02460362 +407E:010807FE790848004BFC7A944A944BFC78284BFE4A204B247AA84A92042A08C6 +407F:7F146B125D107F7E08107F100828FFA855449FF210101FF010101FF010101FF0 +4080:011007FCF04093F89040F7FC900093D4F11297FE93509534F38C908A02960102 +4081:01F00210F7FC920493FCF22493B89222F1FE921097FC9244F3FC90D0014A063E +4082:07BC04A4F7BC94A497BCF4A497BC9120F3FE922097FC9A20F3FC922003FE0200 +4083:003C07C0F244912897FCF4A497FC9008F78894FE978894A8F798950805A80690 +4084:03DE7A524BDE4A524BDE78A049FE4B207DFC492049FE480079FC48880070078E +4085:044404E4EA0AAEEEA404EAEAAE0EA0E0EAAAAAEAA040A7FCE444A7FC00440FFE +4086:00407C400440287C10840884FF041A4428242824480448048804080428281010 +4087:00007CFC0424282410240824FE241AFC28442844484448448844084429FE1000 +4088:00107C10041028FE10920892FE921A9228FE289248104814881209FE28821000 +4089:0080F8BC0884510821FE1320FD20357C3190511051FE51109128112851442182 +408A:0080F8F8090853FE25121122FDFE344030A25354509853349054109253502020 +408B:100010FCFE4810307DFE44527C94111012307C2011FE50707CA8112412221020 +408C:0020F9FC0888505023FE1000FDFC352431FC512451FC502091FC102053FE2000 +408D:01FCF90409FC510421FC1088FDFC348833FE5088512452AA907010A851242060 +408E:0528FFBE094857BE231815AAFD4637FC320453FC520453FC920413FC51082204 +408F:200021FC3C445044904410441094FE88110010FC108428842484448440FC8084 +4090:2020202021247D245124912411FCFC2010201124112429242524452441FC8004 +4091:2048204820487D48514A916C1148FD48114811481148294A256A478A41068000 +4092:202020203C2053FE9020102011FCFE00100011FC110429042504450441FC8104 +4093:200021FC21047D0451FC91041104FDFC1104110411FC2850249044924112820E +4094:2020202021FC7C20502093FE1088FC5011FC102010202BFE2420442040208020 +4095:208020FC21047DF8500893FE1040FCA21334105810942B342452449043508020 +4096:0000FFFE020002100408040408000FF81808280848088808080808080FF80808 +4097:00400040FE401044104420483E5062606240A2C0234022443E442244003C0000 +4098:000003FCFD041144112420A83C8864886450A450242024203C50248821040602 +4099:0000007CFE441048104820503E4862486244A244224422683E50224000400040 +409A:00080088FC501020105020883D0064086488A488245024503C20245020880306 +409B:000001F8FC081050102020103DFE64226424A420242024203C20242020A00040 +409C:00200020FC2013FE102020203C2065FC6420A420242027FE3C20242020200020 +409D:00500048FC481040105E21E03C4064446444A448243024223C52248A23060002 +409E:0000FFFE040008001FF02810C8100FF001000100FFFE054009203118C1060100 +409F:080008007F7C094411441144257C42000000FFFE08001FF82808C8080FF80808 +40A0:00400040FC8010FC112022203C20642067FEA420245024503C88248821040202 +40A1:0008001CFCE01080108020803C8064FE6488A488248824883C88248821FE0000 +40A2:00400040FC7C1084118822503C2064506488A706246024103C0824C020200010 +40A3:00900090F8902290229242D47A98CA904A904A904A904A927AD24712020E0000 +40A4:00880088FC881108117E23083D0865486528A528250825083D08250821280110 +40A5:000001FCFD041104110421FC3D20652065FEA520252025103D12254A21860102 +40A6:00200020FC501088110422123C2064406588A410242024443D88241020600380 +40A7:00800080FC8011FE110222043C2064206528A524262426223C22242020A00040 +40A8:0008001CFDE01100110021003DFE65106510A530251825143D12221002100410 +40A9:000001FCFD041124112421243DFC65246524A554254C258C3D04250421FC0104 +40AA:00900090FC901292119420983C9065986694A492249024903D1225122212040E +40AB:00800080F8FC21082290406079984E26C82049FC48204A207BFE482000200020 +40AC:00007DF01110119011521D12E20E44000000FFFE08001FF82808C8080FF80808 +40AD:00400020FC2013FE100020883D0466026488A488245024503C20245020880306 +40AE:080008007F7C08243E2408447F5408880800FFFE08001FF82808C8080FF80808 +40AF:00200010FC1011FE110021103D106510657CA510251025103D10221002FE0400 +40B0:004200E2FB82208A208A408A7BEA488AC98A49CA4AAA4A827C824882008A0084 +40B1:01040084FC88101011FC21043D04650465FCA450245024903C922512220E0400 +40B2:08207E2008FCFF24102424447E5422880100FFFE08001FF82808C8080FF80808 +40B3:00200020FCA810A810A821743E2264206420A5FC242024203C20242023FE0000 +40B4:00400020FDFE1000100020FC3C00640064FCA400240024FC3C84248420FC0084 +40B5:000001FCFC20102013FE20003C0065FC6504A524252425243D54248821040602 +40B6:00880088F88821C8209E408A788A4BEAC88A488A490A494A7BEA4912002A0044 +40B7:001C01E0FC20102013FE20203CA864AA67ACA4A824AA25AA3EA6242020200020 +40B8:00140012F81027FE201040107BD2CA524A524A544BD4480878EA471A02260042 +40B9:00200040FCFE1124129820503C6067806420A42424A424A83D30245020880306 +40BA:000001FCFD24112411FC21243D2465FC6420A7FE247024A83D24222200200020 +40BB:000000FCFC8010F8108020F83C8067FE6540A524252825103D08254421820100 +40BC:00200020F85020882144422279F84808C850482048A44A827A8A4A8A04780000 +40BD:00200020FC3E102011FC21043DFC650465FCA524242027FE3C20242020200020 +40BE:00200020F82023FE2020412479244924CAAA487048A848A879244A2204200020 +40BF:00200022FBB420A820A841247AA24840C9FC4904490449FC7904490401FC0104 +40C0:00200020FBFE202021FC40247BFE4824C9FC48404BFE488479C8483000CC0302 +40C1:000001FEFC481048104821CE3D0265026502A5CE244824483C48244821FE0000 +40C2:000001FCFD04110411FC21043D0465FC6400A51225D425183D1025522192010E +40C3:000003FEFA02228A225243FE7A424A22CBFE4A824A824A827AFA4A02020A0204 +40C4:00400020FBFE2000200041FC79044904C90449FC482048A879244A2200A00040 +40C5:01040088FC5011FC112421243DFC65246524A5FC242024203DFE242020200020 +40C6:00840084FDFE1084108420FC3C84648464FCA484248425FE3C00244820840102 +40C7:00200040FCFC108410FC20843CFC64206420A5FE252225223D2A252420200020 +40C8:01100112FDD41118115221923D2E644065FCA504250425FC3D04250421FC0104 +40C9:000001FCFD0411FC111021FE3D10654A6586A40025FC25043DFC250421FC0104 +40CA:00900090FBFC2090200041F879084908C9F84908490849F87908490807FE0000 +40CB:004000A0F910220825F640007BC44A54CA544BD44A544A547BD44A44025402C8 +40CC:000003FEFC50105011FC21543D54655465FCA420242025FC3C20242023FE0000 +40CD:01040088F80023FE204040C27922CA54489849384A5448947912461000500020 +40CE:00000040FBFE20882104464278FC4B08C8B048D04F3E48C27B24481800600780 +40CF:000001FCFD0411FC110421FC3C20652065FEA620242025FC3C20242023FE0000 +40D0:00400020FBFE2202208841047A224828C8244BFE482048507850488801040202 +40D1:0100023CF7A424A426A445A474C2DF8054BC54A456A455A474945488049409A2 +40D2:000003FEF80021FC2104410479FC4800CBFE4A8A4A524BFE7A224A22022A0204 +40D3:00880088FBFE208821FC40887BFE4820C9FC492449FC49247BFE490401140108 +40D4:00200010FDFE1102100020FC3C84648464FCA40025FE25023D02250221FE0102 +40D5:08202AA42CA84920145022887FFE40028004FFFE08001FF82808C8080FF80808 +40D6:00400080F9FC2104210441FC7900C9FE490049FE48024AAA7AAA440200140008 +40D7:000203E2F82221EA202A47FA788A4AAAC9CA488A49CA4AA27C924882028A0104 +40D8:000003DCFA9423D4225443C87A884A94CBE24800482049FC7820482003FE0000 +40D9:00400020FBFE2250225043FE7A52CA524BFE4A004A924AD47A98449204D2088E +40DA:04200220F23E2F4024A04420773CD5505510551055FE5510752859280B441082 +40DB:00100010FAFE2110217C4054787C4B54C97C491049FE491079104A90047E0000 +40DC:00007F7848485F4C64805F7844484A4851307F4C00007FFC08001FF868080FF8 +40DD:02080248F7482290229E4FE47114D2145FD45494591451C87F08511405140222 +40DE:08407F4022F83E4800483EC804487EAA08AA290612027FFC08001FF868080FF8 +40DF:02880288F7C82290229E4FD47024D7D4545457D4545457C874485454046404C2 +40E0:02100110F11027BE2240420073BED28A528852A852AE52A874A855A8085E1080 +40E1:000003DEF88822A823FE41887ADA4CA6C9F84908490849F87908490801F80108 +40E2:02100210F51024BE282247447210D2105F1052105AA85728722853440C440082 +40E3:000E03F0F8442224210843F87A08CBFC4A044BFE4A024AAA7AAA450204140808 +40E4:004003F8F04827FE204843F87040D554575C544457FC5444775C555405540844 +40E5:002001FCFC88105013FE20003DFC652465FCA52425FC24203DFC242023FE0000 +40E6:08407F40227E3E8801483E4804507E200850288C10007FFC08001FF868080FF8 +40E7:008079F84A884870538E492049FC6A2050F84020FFFE04000FF83808CFF80808 +40E8:000003BEF8A220A220BE43887A08CA3E4A2A4BAA48AA48BE7888408A057E0202 +40E9:005001FCFD5411FC115421FC3C0065FE6500A57C250025FE3D50255421480266 +40EA:002003FEF80023FC220442F47A944BFCC80049F8490849F8790849F8000003FE +40EB:010001F8FA0827FE228843247BFECA004AFC4A004AFC4A007AFC448404FC0884 +40EC:00400248FA4823F8208043F87A484BF8CA484BF8484848B478BC49220222041E +40ED:00140012F7FE241025D0441475D4D55855CA54165442582472A2528A04780000 +40EE:00100410F27C201020FE40447628D2FE5210527C521052FE7210521005FE0800 +40EF:00200040F8F8228A218C40F8798C4A8AC8F848204BFE487078A8492406220020 +40F0:00800040F7FE24022A2443BC74A4DAA8551052E854045BFA70405248044400C0 +40F1:01140112F7D2211021104FFE7290D6D2529256D2529456D4728A52CA0F160022 +40F2:010003DCFA542366224047DC7A544B48CA544CA248004BFC7A944A9407FE0000 +40F3:01240248F924200023FC42947A644A94CBFC4A484B684A487B6A4A4A02460362 +40F4:04100210F07A27122014477E7008D710503C576455A4553C75245724053C0024 +40F5:004007FEF00023FC224043F87240D3F8524053FC5004555470A853100D480186 +40F6:00400020FDFE100011FC21543DFC64206522A48C252224543CC8254422520060 +40F7:00400FFEF40027FC200047FC7404D7FC50805C9C57D45D54755C5C9615562E22 +40F8:0148014CFAAA200827FE41487B68494ACB6A494C4B6C4948796A4B9A00260042 +40F9:03DE0252FBDE225223DE42227AFA4A22CAFA4AAA4AFA4AAA7AFA4A7202AA0226 +40FA:002007FEF48827DE248845DC76AAD488545057DE545055DC74505BDE08501050 +40FB:03FE0020F7FE242221AC428077DED2925392511E57D2555277DE51120FD20126 +40FC:1020082008207E200420082808241C222A224A20882008200820082008200820 +40FD:202010201020FBFE08201020102039FC54849488104810501020105011881606 +40FE:201011101110F9120912111411D83910551095101110111211521192110E1000 +40FF:202010201020F82009FC10201020382055FE9420105010501088108811041202 +4100:209010881088F88008BC13C010803888548894901060104410A41114120C1004 +4101:204811481148F948094813FE1148394855489548117811001100110011FE1000 +4102:202010201020F82009FC112411243924552495FC112411241124112411FC1104 +4103:202010201020F9FC0924112419243524512493FE102010501050108811041202 +4104:200011FC1104F9240924112411FC392455249554114C118C1104110411FC1104 +4105:0100111009203FF802007FFC082010102FE8C0063FF801001110210845040200 +4106:2008103C11E0F820082013FE10203820542095FC110411041104110411FC1104 +4107:200011FC1104F904090411FC1000380057FE9420102011FC1020102013FE1000 +4108:200013FC1000F80009F811081108390855F89400110810881090100017FE1000 +4109:201010D81394F894089013FE10903894549490D81398109010AA10CA12861102 +410A:202010201020FBFE08201020102039FC5440942010A41282128A128A14781000 +410B:2020102013FEF85008881124122239FC552495FC112411FC10221022101E1000 +410C:400023DE2042F94A1084114A225234206800ABDE205221522094214822542422 +410D:208810881088FBFE0888108817FE380055FC9504110411FC1104110411FC1104 +410E:2020102011FCF8500888110413FE380855E89528112811E81128100810281010 +410F:2088108813FEF8880800101C19E03420502093FE102010501050108811041202 +4110:1000540054FC7C8492849284FE8400FC7C800080FE80108254829282507E2000 +4111:201C13E01220FBFE0A201292130A3A0655FC9504110411FC1104110411FC1104 +4112:202010201050F8880944122211F838085450942010A41282128A128A14781000 +4113:2020104011FCF90409FC110411FC380057FE9420102011FC1020102013FE1000 +4114:2004101E13E0F82009FC1124192435FC502093FE1222122A12FA1202120A1204 +4115:2020102213B4F8A808A8112412A2384055FC9524112411FC1124112411FC1104 +4116:404020A02110FA0815F6100023C432546A54ABD42254225423D42244225422C8 +4117:405022522252FA5213DE1202220233FE6A02AA0223DE22522252225224522802 +4118:2020101011FEF884084811FE11023A24541095FE1040107C1044108410941108 +4119:200013FE1202F80009FC110411FC390455FC9440102013FE1000108811041202 +411A:4090209027FEF89013FC129423FC32946BFCA80021F8210821F8210821F82108 +411B:202011FC1124FBFE092411FC102039FC552495FC104013FE108811D01070138C +411C:2040102013FEF80009541124195435FC502093FE1242129212FA120A12021206 +411D:2020102013FEF82009FC10401BFE348851049242159C110411DC110411FC1104 +411E:4100211023DCFA5415541288210832F46C02A80023FC20402150224825442080 +411F:01F03E0003F03E0003FA7E0201FE0C20703C1DE2F0221C1E0000FFFE11102308 +4120:202013FE1000FBFC0A0412F412943BFC540095F8110811F8110811F8100013FE +4121:208010F81108FBFE0944119211FE3900557C9500117C1100117C1244127C1444 +4122:4080204027FCF91010A41F58255435526B58A800220823F8220823F822082408 +4123:202013FE1020F9FC080013FE12523BFE550495FC110411FC110411FC10881104 +4124:4108210827CEF912112417DE2552355E6FD2A91E2392255E2940211421122122 +4125:47FC20402FFEF84213581040235830006EEEAAAA2EEE20002FFE224825542FFE +4126:04000EFC780408080810FF20082018201C202A202A2048208820082008A00840 +4127:04000E0079FC08440848FF480850185E1C422A422A8248828882090209140A08 +4128:08001DFCF02010201020FC20102033FE38205420542090201020102010A01040 +4129:04200E28782408240820FF2E08F018201C202A202A2048108812080A08060802 +412A:08401C40F08010FC1104FE041004310438845444544490041004100410281010 +412B:04000E0078FC08040804FF04080418FC1C842A802A80488088820882087E0800 +412C:08201C20F0201120112CFD34116433A439245534552891221122110210FE1000 +412D:08081C3CF1E010201020FC20102033FE38205420542090201020102010201020 +412E:08201C20F020102011FCFC201020382035FE5420505090501088108811041202 +412F:04000EFC784808480848FF48084819FE1C482A482A4848488848084808880908 +4130:08001DFEF00810881088FC88110831FE38185428544890881108120810281010 +4131:08401C20F02013FE1080FC80108030FC38845484548490841104110412281410 +4132:08201C20F02011FE1122FD22112231223952554A558A910211021102110A1104 +4133:08201C20F02011201120FD20113C312039205520552091201120112017FE1000 +4134:08001CFCF08410841084FCFC10843084388454FC548490841104110412141408 +4135:00701F80010001007FFC054009203118C00601001FF011001100FFFE01000100 +4136:08901C90F09013FC1094FC9413FC3A90369053FE50929092111A111412101410 +4137:08001C00F3FE10201020FC40104038FC35845284548490841084108410FC1084 +4138:08201C20F04011FC1104FD041104310439FC5504550491041104110411FC1104 +4139:00F83F0001007FFC092011102288CC643018C1E61F000100FFFE010001000100 +413A:08201C20F3FE102011FCFC2411FC312039FE5422542A90541050108811041202 +413B:08901C90F09012921194FC98109031983A94549254909090111211121212140E +413C:08001DFEF02010201020FDFC112431243954554C558C91041104110411FC1104 +413D:08001DFCF05010501050FDFC1154315439545554555C91841104110411FC1104 +413E:08281C24F024102013FEFC2011243124392457A8552891101212122A14461082 +413F:08201C20F1FC11241124FDFC1124312439FC542054249018103210CA13061002 +4140:08021C02F3E2110A110AFDEA112A3A2A372A52AA544A904A10821102120A1404 +4141:01007FFC40040400FFFE08201E4003C03C3801E01F0001007FFC05401930610C +4142:08801C80F0F811081310FCA0104038A03518520655F891081108110811F81108 +4143:00007DF01110119011521D12E20E440000E01F0001007FFC05401930E10E0100 +4144:08401C40F1FC10441084FC8411283210390857DE554A914A114A1252135A14A4 +4145:08201C20F1FC10201020FC2013FE30003820542055FC90201020102013FE1000 +4146:08101C10F210113E1122FC441010389034905310512891281128114410441082 +4147:00007FFC04403FF8244824483FF8000000E01F0001007FFC05401930E10E0100 +4148:0100111009203FF802007FFC082010D02F08C1061FF005400920111061080100 +4149:08001DFEF04810481048FC481248314A394A554C544890481048104813FE1000 +414A:08401C20F3FE12001200FE0C12F032203A20563E53E0922014221422181E1000 +414B:08801C80F0F811081210FDFC11243124392455FC54509050109010921112120E +414C:08001CFCF084108410FCFC0011FE3102390255FE5502910211FE1102110A1104 +414D:08001C06F3B810881088FD08113E3B88348852885288913E11001280147E1800 +414E:081C1DE0F020102013FEFCA81124322239F85488549090BE1102110212141408 +414F:08001DFCF104110411FCFD00111831E0393855E0553C91E011221222121E1400 +4150:08001DF8F108110811F8FD08110831F83908550855F89090109011121212140E +4151:08081C3CF3C010441224FD28110030403BFE5488510893901060105011881604 +4152:08901C90F3FE10901090FC40102033FE39005500550091001100110011F81000 +4153:12003A00E23C27D42454F854275435546D546554A74825482048205422942122 +4154:08921C92F12412481124FC921092300039FE5522552291FE1122112211FE1102 +4155:08001DFEF102110211FEFD10111031FE39105510557E914211421242127E1442 +4156:08201C20F3FE10501088FD24122231FC392455FC552491FC10221022101E1000 +4157:081C1DE0F020102013FEFCA811243A42344053FE5088910810D0103010481184 +4158:08201C20F02013FE1020FD24112431243AAA547054A890A81124122214201020 +4159:08001DFCF104110411FCFD04110431FC3800551255D49118111011521192110E +415A:08201D24F0A8102011FCFC4013FE3888350452FA5488908810A810921082107E +415B:08FC1C84F08410FC1084FC8410FC300039FE5502550291FE1102110211FE1102 +415C:08081C3CF1E0102013FEFCA810A830A83BFE54A850A893FE1020102011FC1000 +415D:08401C20F02013FE1202FC9411083204380055FC542090201020102017FE1000 +415E:08001DF8F10811F81108FDF8100031FC381057FE541091101090101010501020 +415F:00401848708411FE1020FBFE108831243A425588501090621184101810601380 +4160:08001DFCF104110411FCFD04110439FC340053FE50209120113C112012A0147E +4161:08001DFEF020104011FCFD04110431FC390455FC5504910411FC100010881104 +4162:08201C20F3FE122213FEFE2213FE300039FC550455FC910411FC110411141108 +4163:08201C40F1FC110411FCFD0411FC30003BFE5420542091FC1020102013FE1000 +4164:08081C3CF1E010201020FDFE102030A0392C5524552491AC1124112411FC1104 +4165:08001DFCF10411FC1104FDFC108031FE3A2255225552910211FA100210141008 +4166:08881C88F3FE10881088FC0011FC31243924552455FC91241124112411FC1104 +4167:08401C20F3FC10001108FC9013FE300039F85508550891F81108110811F81108 +4168:081C1DE0F020102013FEFCA81124322239FC5504550491FC1104110411FC1104 +4169:08201C20F3FE102011FCFC881050302038585586540091FE110211FE10841102 +416A:08201C20F1FC112411FCFC2013FE300039FC5504552491241124105010881304 +416B:08401C20F3FE10001000FDFC110431FC390455FC542090A81124122210A01040 +416C:09041C84F088100013FEFC00108831043A0255FC555491541154115417FE1000 +416D:08201C10F1FE10841048FDFE11023224381055FE5440907C1044108410941108 +416E:08201C20F050104810A4FDFE128430FC388454FC548090FC11441144127C1044 +416F:08201C10F1FE1110117CFD1411FE3114397C5510557C914411441244127C1444 +4170:08001DFCF124112411FCFD241154318C390455FC5440902010A4128A128A1478 +4171:08201D24F124112411FCFC0013FE300039FC5504550491FC1088105013FE1000 +4172:08401C44F1F8105013FEFC4010F831823A7E540055FC910411FC110411FC1104 +4173:08801C80F1FC12441154FDF4108431283A9055FC5244955411F4108411281210 +4174:0020182073FE102013FEFA42148C31F03820544453FE90221128122414A41040 +4175:09041C84F088100013FEFC20102039FC3420542053FE900012A4125214521000 +4176:08001DFEF100117E1100FDFE1154314839645542550491FE114412241204140C +4177:08881C88F3FE108810A8FC50108831743A22542055FC902010A8112412A21040 +4178:08881C88F3FE10881040FC2011FC3888345053FE5020902011FC102010201020 +4179:08201DFCF12413FE1124FDFC102031FC392455FC504093FE108811D01070138C +417A:08001DFCF05011FC1154FD5411FC300039FC540057FE902010A8112412A21040 +417B:08401C20F3FE10001154FD24115439FC342053FE5242929212FA120A12021206 +417C:08001DF8F10811F81108FDF810003BFC369453FC500091F81090106011981606 +417D:08007F7808483E4800863E782A483E30404881E41F0001007FFC05401930610C +417E:00001BDE708812A813FEF98812DA34A639F85508510891F81108110811F81108 +417F:08881FFEF088100011FCFCA810A833FE38A854A855FC902013FE102010201020 +4180:08001DFCF12411AC1174FD2411FC382035FC502053FE900012A4125214521000 +4181:08001DFCF15411FC1020FDFC102033FE3888545055FC902013FE102010201020 +4182:10203BFEE288225023FEFA5022FC32546BFE6254A2FC225022D8255426522850 +4183:211017FC004073F8120813F812082FFE400001E01F0001007FFC05401930610C +4184:08101DFEF00011FE1102FD7A114A39FE340054FC508490FC108410FC100011FE +4185:0A201D3EF04210941310FD28104631FC390455FC550491FC110411FC10881104 +4186:08F81C88F08810F81000FDDC1154315439DC542057FE907010A8112412221020 +4187:1000E7FC248425E42524FDE4252435E46D0465F4A50425F42414255625562832 +4188:1000E4FE228222FE2080F8AA2E9C32AA6A8062A8A2BE22C822BE2288250828FE +4189:10003BFCE294229423FCF910225233DC681263CEA24023D2225C23D0225222CE +418A:00941B987092118E1280F9FC112431FC392455FC508891FC108813FE10881104 +418B:108039F8E20827FE2252FBDE2050335E695267DEA152235E215027D22152233E +418C:0394191077BE111813AAFD46102033FE380057FC500093FC100013FC120413FC +418D:12103910E7DE2010245EFA8227DE30106FDE6450A7DE245027DE2450245224CE +418E:1148394CE2AA200827FEF9482368314A6B6A614CA36C2148216A239A20262042 +418F:09241CA8F3FE10A81326FDFC112431FC392455FC548893FE108817FE11041202 +4190:01001FF002007FFC082037D8C1063FF811107D7C2020FEFE5454BABA10105454 +4191:020001007FFE400288241010200800007FFC0100010001000100010005000200 +4192:020001007FFE40028824121022081FE002200A200420062009221022201E4000 +4193:020001007FFE4002882411102208044008201FF004500440044008441044603C +4194:020001007FFE48229114210801003FF82108210821083FF82108010001000100 +4195:020001007FFE4822911401003FF0011001100110FFFE0280044008203018C006 +4196:020001007FFE48229014220802007FFC0400048008801100222044108FF80408 +4197:020001007FFE48229014200800007C8844884488448844987CE8448800080008 +4198:020001007FFE4822901420081FF0111011101FF0111011101FF0111001000100 +4199:020001007FFE4822901400007FFC01000100110011F8110011001100FFFE0000 +419A:020001007FFE4822901400003FF820082FE8200827C82448244827C820082018 +419B:020001007FFE482290140000001879E048404840487E4BC0484078444844003C +419C:020001007FFE4822941404007FFC08001FF028104FF088100FF0081008500820 +419D:020001007FFE400288241010210802003FF824482448244824482448FFFE0000 +419E:020001007FFE482290141FF010101FF010101FF0000010F01F00100410040FFC +419F:020001007FFE4822911422880C603018CFE600001FF01010101010101FF01010 +41A0:01007FFE4822901400003FFC210021003FF8200820083FF8210021003FFC0000 +41A1:020001007FFE4822921401001FF010101FF010101FF011081090126014181806 +41A2:020001007FFE482290141040FDF810481448184833FED04010A0111052082406 +41A3:020001007FFE4822901400003FFC20002FF820003FFE2908289048604A188C06 +41A4:01007FFE4822901402001FF010101FF010121FF410187FF001900E10F0500020 +41A5:020001007FFE482290147FFC02000D08719002A00CC071A006981886E2800100 +41A6:020001007FFE482291140910092012C0043019086914091012A004401830600C +41A7:01007FFE482290741F8001007FFC05401930E10E04007FFC08201C4003807C78 +41A8:01007FFE482290141FF010101FF010101FF000003FF801007FFC04401830E00E +41A9:01007FFE482290141FF010101FF010101FF010101FF002007FFC04401830E00E +41AA:1040102095FC550458501088FD04280028F828202820282029FC4800480287FE +41AB:01007FFE4822901408001FF82A4844480A88110822A8041001004884481287F2 +41AC:01007FFE482290140FE008203FF820083FF820083FF820083FF8082010102008 +41AD:01007FFE4822901408007F7C08107F1049107F1049FE7F100810FF9008100810 +41AE:01007FFE4822901423F8100811F8800843F8500017FC2404E3F8211020E0271C +41AF:01007FFE4822BEFC12480C3032C800003EF812480C3032C8FFFE082007C07838 +41B0:020001007FFE482290143FF8200027F0241027F020002F7829482F7820003FFC +41B1:020001007FFE482290142040124890B04108460410402244E44820A023182C06 +41B2:01007FFE482291143FF820802FF820883FFE20882FF824C422A8449858868180 +41B3:01007FFE4822901423FC10801144066870B01128166810A4112416A0284047FE +41B4:01007FFE48229FD410403FF051101FF011103FF821083FF821083FFA010200FE +41B5:020001007FFE4822901408207FFC511449247FFC00001FF010101FF010101FF0 +41B6:01007FFE4822911408801FFC30805FF810801FF810801FFC1000248822444244 +41B7:01007FFE482290141FF002207FFC04887A8001003FF8282837D8244827C82018 +41B8:020001007FFE482290947EA00444282817D02008DFF610101FF0082004407FFC +41B9:01007FFE49229FF404407FFC00001FF011101FF011101FF001003FF80100FFFE +41BA:01007FFE4822901400F83F0011100920FFFE09203018DFF611101FF011101FF0 +41BB:020001007FFE482290147C200420FF3E22443EA422283E282390FE2842440282 +41BC:01007FFE4822901421F8110811E8012873FC120412F4129412F412142A0847FE +41BD:01007FFE482291FC01003FFC21042FE021082FF823002C9023605CD843469CC0 +41BE:01007FFE482290143F2024203F3E21403F5024883F0800003FF824482448FFFE +41BF:01007FFE4822905409FC490449FC490479FC090409FCF8204BFE48A849248A22 +41C0:01007FFE482290142200FF7E22243E3C08247F24493C7F240826FF7C08040804 +41C1:01007FFE4822901420443E2844FEFF1049107F7C49107F1000FE55104A908A90 +41C2:0200010001007FFC00001010082004400000FFFE010001000100010001000100 +41C3:1000080008FC7E8400840484448444FC2484288028800E82F0824082007E0000 +41C4:1040084008407EFE00800500447C44082410282028400E80F102410200FE0000 +41C5:1050084808487E40005E05E0444044442444284828300E22F052408A03060002 +41C6:1008088808487E4800080488444844482408280E29F80E08F008400800080008 +41C7:200011FC1104FD04010409FC8920892049FE4920512051101D12E14A41860102 +41C8:200011FC1084FC880050082088D88B064820482051FC50201C20E02043FE0000 +41C9:2000100013FEFC2000200840884088FC49844A84548450841C84E08440FC0084 +41CA:202010101010FDFE010009108910891049104920512851241E44E2FE44420800 +41CB:10200820087C7E840148043044284448259E282228420EA4F018401000600180 +41CC:2020112410A4FCA8002009FC8904890449FC4904510451FC1D04E10441140108 +41CD:200011FC1104FD04010409FC882088204920493C512051201EA0E260443E0800 +41CE:204810481048FDFE0048084889FE880048FC4884508450FC1C84E08440FC0084 +41CF:2040102013FEFC0001FC090489FC880049FC4808501053FE1C20E02040A00040 +41D0:2020102011FCFC2400240BFE8824882449FC4A22517450A81D24E22240A00040 +41D1:2040108011FCFD24012409FC8924894449FC4890511053FE1C10E01040100010 +41D2:7DFC44207D2045FE7C5048525492650E020001003FF8000008200440FFFE0000 +41D3:0BFE104061FC090411FC610405FC090431FCC088030401003FF808200440FFFE +41D4:0100FFFE20003FF800003FF820083FF80200711C57D47014545C729651D6B622 +41D5:000021FC102013FEFA2201AC082089AC88004BFE502051FC1D54E1544154010C +41D6:104010403F7E48908508080008001FF821084108020802080408180860500020 +41D7:104010403F7E2890450880000440082010102108C2060400082010103FF81008 +41D8:104010403F7E2890450880007FFC04000FF00810082010201FC00040FFFE0000 +41D9:20403F7E4890850800007F08010801083F08200840087F08010801080A080408 +41DA:104010403F7E4890850800000840084010403050504890441044104010401040 +41DB:104010401F7E28902488450881000100110011F81100110011001100FFFE0000 +41DC:204020407EFE5110880808000FFC10042108410001000280044008203018C006 +41DD:104010403F7E2890450880400420040004FEFF000210016001840E447034000C +41DE:104010403F7E4890850810101010FFFE101010101FF01010101010101FF01010 +41DF:104010403F7E28904508902010203E2022FC4224A42414440844108421144208 +41E0:104010403F7E28904508820001007FFC010001003FF8010001000100FFFE0000 +41E1:204020407EFE51108A0801007FFE400280043FF8010001000100010005000200 +41E2:104010403F7E2890450881000100FFFE010001001FF01010101010101FF01010 +41E3:104010403F7E489085080280044009203118C106010009201110210805000200 +41E4:20403F7E489085080000FFFE010001007FFC4104428444444824400440144008 +41E5:104010403F7E4890850800007FFC01000100110011F8110011001100FFFE0000 +41E6:104010403F7E2890450881001FF0111011101110FFFE0280044008203018C006 +41E7:104010403F7E489085080000FFFE01003FF8210822882448282820083FF82008 +41E8:20403F7E4890850808001FF0282007C01830E10E1FF0010011001FF801000100 +41E9:104010403F7E4890850801003FF821083FF821083FF8010800B001C20E32700E +41EA:104010403F7E4890850800007FFC040008201FF0011001003FF801000100FFFE +41EB:20403F7E4890850800003FFC2080208027F82408240827F8208020803FFE0000 +41EC:104010403F7E48908508110011003FF841000100FFFE054009203118C1060100 +41ED:20403F7E48908508020002083FD00220FFFE0100061008E03F00C808080807F8 +41EE:104010403F7E489085080810087813C0304050409FFE10401040104017FC1000 +41EF:104010403F7E2890450880007FFC10101FF010101FF01010103EFFD000100010 +41F0:104010403F7E4890850800001FC000447D88055009203118C50602003FF80000 +41F1:104010403F7E4890850800003FF8220823C824482A882108228824083FF82008 +41F2:104010403F7E4890850801003FF8010011100920FFFE0280044008203018C006 +41F3:104010403F7E28904548822003F87E0003F03E0003FCFE20014000840764781C +41F4:104010403F7E489085080000FFFE04403FF8244824482848303820083FF82008 +41F5:104010403F7E48908508200C11F01100810049FE49101110E110221022102410 +41F6:20403F7E4890850808001FF020205FF811081FF811081FF81108210821284010 +41F7:20403F7E489085083F04210421243F24082408247FA408A410A4108422944108 +41F8:104010403F7E289045089FF0101010101FF000003FF801001FF001007FFC0000 +41F9:20403F7E4890850800003FF80408FFFE04083FF808001FF8280848088FF80808 +41FA:20403F7E4890850800007FFC00001FF0101010101FF0000008200440FFFE0000 +41FB:20403F7E489085083FF820083FF8200020702F8020F02F8020F85F824082807E +41FC:20403F7E489085081FF010101FF000003FF8210821083FF8200220021FFE0000 +41FD:104010403F7E48909508100C11F0FD00110011FE1D10F1101110121052102410 +41FE:104010403F7E4890850801007FFC00003FF800003FF800003FF820083FF82008 +41FF:20403F7E489085080100FFFE01003FF8210821083FF8238805601918E1060100 +4200:104010403F7E489085083F842A842A942A94FFD42A942A942A942A8420942188 +4201:20403F7E4890850802800C6037D8C0063FF8248824883FF82488248824A82010 +4202:104010403F7E48908508101008207FFC082008200820FFFE0820082010202020 +4203:20403F7E4890850823FC10841084808449144A0815FCE1042104210421FC2104 +4204:104010403F7E289045089FE040445194492443C445444924551442047FFC0004 +4205:104010403F7E4890852800907FFC00803E88228822503E5000240754788C2104 +4206:20403F7E4890850800803FFC200420043FFC20A020902FFC2120421044089806 +4207:20403F7E48908508010001FC01003FF820083FF820083FF80100FFFE01000100 +4208:104010403F7E489085083EFC22A422A43EA422FC22803E80228222824A7E8400 +4209:204020407EFE51108A0801003FF80820FFFE04007FFC08201C4003800C707008 +420A:20403F7E4890850801003FF80100FFFE1010220847E40820144003801C70E00E +420B:20403F7E4890850801047D9809603118C50602001FF010101FF010101FF01010 +420C:20403F7E48908508100009F80908410821F82908090811F87108110817FE1000 +420D:20403F7E489085080080FFFE10001FF800001FF010101FF010101FF010101FF0 +420E:20403F7E4890850812207FFC122013E010001FF80100FFFE05401930E10E0100 +420F:20403F7E4890850800007FFC00001FF010101FF000003FF821083FF821083FF8 +4210:104010403F7E48909548104013FE5880549051109152125414A8102810441082 +4211:20403F7E489085081FF010101F9010907FFC40044FE4482448244FE440144008 +4212:20403F7E489085080100FFFE01003FF8244822882FE821083FF8210821282010 +4213:104010403F7E489085081FF010101FF010101FF008001FFC2104528414541FE8 +4214:20403F7E489085087CF8440844087CF8400041F87C88405040207C5040884306 +4215:20403F7E489085081FF010101FF010101FF000007FFC110011F8290047FE8000 +4216:20403F7E489085080C10709010501010FC903050381E55F05010901010101010 +4217:20403F7E4890850809100A0817FC31105208948411F813081490106011981606 +4218:20403F7E4890850808200440FFFE1020102024487CF80810102024487EFC0204 +4219:104010403F7E4890850810001008240879FE100824887E48004854084A288A10 +421A:20403F7E48908508080010103FF800081FF0101010101FF001004884481287F2 +421B:20403F7E4890850808000F7C084408447F44552855287F105510552855444382 +421C:20403F7E489085080BF8080811F8300853F8900017FC140413F8111010E0171C +421D:20403E7E4890BFFC010411F011002FFE40009FF010101FF010101FF010101030 +421E:20403F7E4890850800807FFC00001FF010101FF000003FF820083FF820083FF8 +421F:204020407EFE511088083F0421243F2421243F24212421243F24120421144088 +4220:20403F7E4890850800FC7F00220811103FF80200FFFE04000FF0122021C0CE3C +4221:20403F7E4890850808001FF82A4844480A88110822A8041001004884481287F2 +4222:20403E7E4890900020087FFC00043FF820083FF80100FFFE054009203118C106 +4223:104010403F7E4890850800207F20043E044427A42428242824102F28F0444082 +4224:20403F7E4890850810881088FC8813FE3088388854F854889088108810F81088 +4225:20403F7E4890850810101F1022107FBEA4923F9224923F92249224A242AA8144 +4226:20403F7E489085082448238824483FF81010220847E40820144003801C70E00E +4227:20403E7E489080F87F00221011201FE010201FF010101FFC20042AA44AA4800C +4228:20403F7E4890850800007DF8450849F8510849F8452445285510494841864100 +4229:20403F7E489085080804140422245D248024112409244A2427A4F80440140008 +422A:20403F7E489085087FFC00001FF010101FF000007FFC482444445FF44104410C +422B:20403F7E489085081020102025FC7D2409241154254C7D840104550455148108 +422C:20403F7E48908508404427FE204087FC444457FC1444E7FC2444244424540408 +422D:204020407EFE51108A0804003FF821083FF821083FF8029004A808FA308AC07E +422E:20403F7E489085082080108010FCFD0402F44894489448F410941E04F0284010 +422F:20803EFE4910BFF801001FF010101FF010101FF010101FF01010FFFE08201010 +4230:20403F7E489085081020112410A8FC2011FC11041DFCF10451FC110451142108 +4231:104010403F7E4890850800FC7F00220811100C20307820083C7820083FF82008 +4232:20403F7E4890850810783E4822482A862300FEFC22442A44222842104A2884C6 +4233:20403F7E48909FF810081FF810081FF800007EFC224412240A1412246AD40408 +4234:20403F7E48908508102008407FFC04803FF00490FFFE04903FF00CA03498C486 +4235:20403F7E4890854808203218C4460FE000207EFC224412240A1412242A544488 +4236:104010403F7E4A9085087FFE400289241290244808203FF8C82608200FE00820 +4237:20403F7E48909508108010F8FD08129030603998560651F89108110811F81108 +4238:20403F7E4890850810041F2422147F84A4A43F9424863FBC2484248442848104 +4239:20403F7E489085087FFE48028BF4108033F85208920813F81208120813F81208 +423A:20403F7E48908508104010FC24887D50082010D827067C60001054C054308008 +423B:20403F7E48908508002878244BFE482079FC492449FC792449FC49244924990C +423C:20403F7E50908A0801007FFE42028924284849940E1077F00100210821083FF8 +423D:20403F7E4890850808207FFC08200FE001003FF821083FF801007FFC0100FFFE +423E:20403F7E4890850810201124FCA8102031FC390455FC910411FC110411141108 +423F:20403F7E489085087FFC40041FF010101FF010101FF00100FFFE082010102008 +4240:20403F7E4890850800803FFC222022203FFC2220222023E020004A4849249124 +4241:20403F7E489085080010FF9022283E4422923E08227C2384FE08023002080204 +4242:20403E7E48909FF011101FF011101FF0040008201FC003103FF8112025104208 +4243:20403F7E489085080440247C24A83D50042804487DFE24882448244844088418 +4244:20403F7E4890850878404BF8504067FC51104A884CF4691052A0404041B04E0E +4245:104010403F7E4890954810407C4011F8FE48444828C87C4810AAFEAA11061202 +4246:20403F7E489085081FF010101FF010101FF010001FFC10001FFC492484940008 +4247:20403F7E4890950811047FC411241F2411241F2411247FE42924308420143FC8 +4248:20403F7E4890850824207E20243EFF4400A47E2442287E2842107E2842444682 +4249:20403F7E4890850820003E1C44E87EA8AAA83EA82AA83EA82AA42B542B744612 +424A:20803EFE551088201FF00210FFFE09203FF8D1161FF011101FF001007FFC0100 +424B:20403F7E4890850811FC1124FDFC2500257C4944297C1144297C4644827C0444 +424C:20403F7E4890850878904BFC48805144566848B049284E6868A4512246A04040 +424D:20403F7E489085087C7C44447C7C44447D7C40844A244A14525441C440144008 +424E:20403F7E48908508111009203FFC20044FE808200FE001007FFC05401930610C +424F:20403F7E4890850810001EFC22247F44A99C3F50297C3F9029FE291045108210 +4250:20403F7E489085081020FE2010207DFC54207C2054F87C881088FE8810F81088 +4251:20403F7E4890850810003FFC4AA00AA07FFC0AA00AA07FFC0000248822444244 +4252:20803EFE491080F83F0011100920FFFE09203018DFF611101FF011101FF01010 +4253:20403F7E48908508100011FC1124FDFC312439FC542053FE90A8112412221020 +4254:20403F7E5090880800900088FBFE20483C3245CE4890A88813FE10482032C1CE +4255:20403F7E48908508082004403FF8292825483FF800001FF010101FF010101FF0 +4256:20403F7E4890850808107F1008287F4449927F08497C7F040808FFB008080804 +4257:20403F7E4890850811F81108FDF8100013FC11081DF8F10811F8110E57F82008 +4258:20403F7E489085081040102013FEFA0214FC300039FE542050A8912412A21040 +4259:20403E7E4890BFF801007FFE41029D7401001D7000003FF80000FFFE10103FF8 +425A:20403F7E489085083FF824483FF800007FFE4002BFF408000FE0112416A4181C +425B:20403E7E489084003FF8292825482FE8254828280100FFFE02800C603018C006 +425C:20403F7E4890850820A020907DFE9120132011FCFD2011FC2920252041FE8100 +425D:20403F7E4890951808203FF801007FFC02403C500848FFFE08507E240854198C +425E:20403F7E4890850800283FFE20202FA420282F9048AA4FC682820900282847E4 +425F:20403E7E4890812011FC1320FDF8112015F8192031F8D10013F8111050E0271E +4260:20403F7E4890850822204AA08ABE1FC420A46F24A0282F28291029A829443082 +4261:20803EFE4910FFFE00003FF8200827C824483FF810101FF010101FF00000FFFE +4262:20403E7E489081007FFC11102928FFFE00003FF8200827C8244827C820083FF8 +4263:20403E7E489082001CF010101EF010101FF008001FFC20044924249424944008 +4264:20403F7E4890850849202A20FF3E2A4449A41024FE282228641018282444C282 +4265:20403F7E4890854811FE1122FD7A118A155219223152D1FE104012A4528A247A +4266:20403E7E48908FF841402FF829480FF8E1002FFC24102BE8322423E052088FFE +4267:20403E7E4890F784428462A454A469A414242224DD2408247F244A042F94F008 +4268:20403E7E4890900008787F48224814867F0010FC694416446D281490642818C6 +4269:20403F7E48908508100013FE1200FE7C1244327C3A0056EE52AA92EE120013FE +426A:20403F7E489085083FF821083FF821083FF80000FEFE9292FEFE9292FEFE8282 +426B:20403E7E48908640387C08947E241C442A94490802C01D30E92E054009201310 +426C:20803EFE491080803FFE20202F2831102A0A277C294A378428784F484130874C +426D:20803EFE49109084210810843FF82448238824483FF829482528294A25263182 +426E:20403E7E4890FC7C44447C7C44447D7C44844FE459044FC449044FC449044FEC +426F:20403E7E4890BF7C24443F2821103F2824463FF010101FF010101FF008201010 +4270:20403E7E4890BE2022103AFE2A007F2841443E8222283E2822103E2822442682 +4271:20403F7E4890A508100003FEFA000A7C12442A7C7200AAEE2AAA22EE220023FE +4272:20403E7E48908000F7FC124817FCFC4686EC8554F6EC155416EC144454542408 +4273:20403F7E4890850820443E2844FEFF1049107F7C49107F1000FE55104A908A90 +4274:20403F7E489085087FFC00003EF822883EF804403FF80440FFFE04901C60671C +4275:20403F7E48909FF8149012501FF00200FFFE0AA03458CFE6155007C004A00670 +4276:20403E7E4890A4483F7E64C8BF7E24483F7E24483F7E20401FF0082007C0F83E +4277:20403F7E489085081E7812483FFC20202E20223C3FC829282F2849905F288144 +4278:204020407EFE5110880841102788F83E53942008FBBE2008739C228843888288 +4279:20403E7E4890BFF801007FFE492284143BB82AA83BB800007FFC11102928FFFE +427A:080008004AFC2A202C200820FE2018201C202A202A2048208820082009FE0800 +427B:1004101E95F0551059101110FD1031FE3910551055109108110A114A11861102 +427C:0804080E4AF02A802C800880FEFE18881C882A882A8848888888090809080A08 +427D:10201020952454A458A81020FDFC30203820542057FE90201020102010201020 +427E:044004447C78044004421C42E43E0000111009207FFC054009203118C1060100 +427F:1008103C95E05420592410A4FCA8302039FE5420542090201020102010A01040 +4280:10201020942054205BFE1020FC20302039FC5504550491041104110411FC1104 +4281:10201120952055FC59201220FC2033FE3890549054909090111211121212140E +4282:1020102097FE5420582011FCFD2431243924552C547090A81124162210201020 +4283:200027FC2404AC0475F42444FC4425F475546D54AD5425542574244624462842 +4284:00007DF01110119011521D12E20E4400111009207FFC054009203118C1060100 +4285:1040104094FC55045A881050FC203040388055FC568490841084108410FC1084 +4286:04003878200820083C78200820083FF80000111009207FFC054009203118C106 +4287:1028102495FE5420582011FCFD24312439FC5524552491FC112411241124110C +4288:1080108094FE55005AFC1084FCA430943BFE54845524911411FE100410281010 +4289:1040102095FC55045A281020FC2031FC3870546854A890A41124122210201020 +428A:100011FC9504550459FC1100FD1C3170391C5570551E91F0111011121112120E +428B:1048114895485548594811C8FC7E30483BC855485548914811481148125C1440 +428C:10201010941055FE59001148FD4A314A396C55485548914A114A126A12461400 +428D:0C8070FC1124FD2412243844548491281010111009207FFC054009203118C106 +428E:1020112494A8542059FC1040FDFE3088390456FA5488908810A810921082107E +428F:102010A494A4552858501088FD043024382054A854A891301050108811041202 +4290:100011FC9504550459FC1104FD0431FC3800551255D49118111011521192110E +4291:1020112494A454A8582011FCFD04310439745554555491541174110411141108 +4292:10A01090948055FE59101310FDFC3110391055FC55109110111011FE11001100 +4293:100011FC9504550459FC1104FD0431FC380057FE54209120113C112012A0147E +4294:2088208823FEA88870A82020F9FC212471246924ABFE20202050208821042202 +4295:20102010207CAB1471FE2114FA7C2210777C6910A9FE25102210230024FE2800 +4296:2020202023FEA820702023FEFA8A225272FA6A22AA2222FA22222222222A2204 +4297:1020104095FC550459FC1104FDFC30003BFE5420542091FC1020102013FE1000 +4298:1020102095FE552259FE1122FDFE300038FC548454FC908410FC108410941088 +4299:0000FDFE204840487DFEC44844887D080008111009207FFC054009203118C106 +429A:20102220217CA9447044207CFB402140717C6944A944217C21442280247E2000 +429B:2000245C2294A91472942454F926210077DC6914AD9425542948210825142222 +429C:102013FE942055FC592411FCFD2431FC382257FE540893FE1108108810281010 +429D:101C11E09420552458A813FEFC7030A8392456225440902412A2128A14881078 +429E:2040202023FEA888705023FEFA2222FA72226AFAAA8A228A22FA2202220A2204 +429F:2088208823FEA888708820F8F82023FE72226B32AAAA237622222222222A2224 +42A0:7DFC44207D2045FE7C5048525492650E111009207FFC054009203118C1060100 +42A1:100011F8950855F8590811F8FC0033FC3A9457FC540091F81090106011981606 +42A2:0440247C24A83D5004287DFE248844488418111009207FFC054009203118C106 +42A3:1088108895FC5488588813FEFC2031FC392455FC552491FC1000108811041202 +42A4:100013FE945057FE5A5213FEFC0031FC390455FC550491FC102013FE10201020 +42A5:202021FC2024ABFE702421FCF82022AA73AE6A22ABFE222223AE22AA22AA2422 +42A6:102013FE942055FC580013FEFE0231FC380055FC550491FC1104108813FE1000 +42A7:209027FC2094ABFC729023FEF91223FA750E69F8A90821F8210821F820902108 +42A8:0100FFFE20003FF800003FF820083FF80100755C539477D4511473965556B122 +42A9:103C13E0952454A85BFE10A8FD24320239FC5524552491FC1124112411FC1104 +42AA:1088108897FE548859FC1124FDFC312439FC542057FE9222122A12FA120A1206 +42AB:200023FC2294AA9473FC2000F890279E70906890AB9C20902090279E20902090 +42AC:0DFC712411FC1124FDFC30203BFE54A851248222111009207FFC05401930E10E +42AD:102013FE942055FC580013FEFC0231FC382057FE540093FE100413BE12A4138C +42AE:200023DE2042AA52714A2252F890210873FE6D10A9FE211021FE211021FE2100 +42AF:1020101095FE5528597C1128FDFE3110397C5554557C9154117C120012441482 +42B0:22102110203AAB92701423BEF8082390703C6BE4AAA422BC22A423A422BC2024 +42B1:2148214C22AAA80877FE2148FB68214A736A694CAB6C2148216A239A20262042 +42B2:0010FE0828FEFE00AA44AA28FEFE108854A838BEFEC8108838BE55089108127E +42B3:202023FE2248ABFE724822ECFB5A224872506BDEAA5023DC225025DE24502850 +42B4:1088108894EE55545A221050FC8831743A0255DC555491DC1088108811541222 +42B5:104010402040244045F8F848104820484848FC480448004A548A548A81060200 +42B6:1020102020202520452CF934116423A44924FD34052801225522550280FE0000 +42B7:080808081008120822FE7C080818101824287E28024800885208490889280010 +42B8:100011FC200024004400FBFE104020404880FCFC040400045404540480280010 +42B9:1008103C21E024204420F820102023FE4820FC20042000205420542080200020 +42BA:100011FE204024404440F87C108420844884FD0405FC00085408540881FE0000 +42BB:104010402040247E4482F884112022204820FC50045000485488548481020200 +42BC:10101010201024904490F890109E20904890FC90049000905490549083FE0000 +42BD:10201020202025FC4424F824102420244BFEFC20045000505488548881040202 +42BE:102010202020242045FEF8201070207048A8FCA8052401245622542080200020 +42BF:102010202020242045FCF820102020204BFEFC20045000505488548881040202 +42C0:010000803FFC20043FFC2080211023E02040208827FC20444250444889440080 +42C1:10401020200025FC4400F80010F020904890FC900490009254925512810E0200 +42C2:080408441028121022287C440880100424447E44022800285210492889440082 +42C3:1008103C21E024204420F83C11E020204820FC3E07E00020542254228022001E +42C4:100011FC210425044594F954115421244924FD54055401945504550481140108 +42C5:101010102090249044FEF890111020104810FDFE041000105410541080100010 +42C6:10401020202025FC4504F904110421FC4904FD00050001005500560082000400 +42C7:100011FC210425044504F90411FC21204920FD20052001105510550882040402 +42C8:08007F7C114432280C101228634604201FC0018006103FF80108112025104208 +42C9:1040102020202BFE4A02F404100020904890FC90048801085508550482040402 +42CA:1000100021FE24104410F81010902090489EFC90049000905490549083FE0000 +42CB:100011FC210425044504F9FC1120212049FEFD20052001105512554A81860102 +42CC:100011FE210025004500F9FC110421044904FD0405FC01005500550081FE0000 +42CD:1000100021FE24084408F9E8112821284928FD2805E801285408540880280010 +42CE:1000100021FC25044504F90411FC21044904FD0405FC01045400540083FE0000 +42CF:10801080208024FE4540F9401240207C4840FC400440007C5440544080400040 +42D0:10281024202428204BFEF220122422244A24FA280A280290AB12AA2A80460082 +42D1:100011FE202024204420F9FE112221224952FD4A058A010255025502810A0104 +42D2:100011F8200824504420F81013FE206248A4FCA0052002205420542080A00040 +42D3:1080108020F825084610FC2011FC20044804FC0405FC00045404540481FC0004 +42D4:100011FE201024104420F820106820A44922FE22042000205420540083FE0000 +42D5:081813E0304057FC904013F8020004201FC0018006103FF80108112025104208 +42D6:1020102020FC242445FEF82410FC20204820FCFC0420002055FE542080200020 +42D7:100011FE212025204520F9FC110421044904FD0405FC01205520552081FE0000 +42D8:1020102023FE28204820F1FC102020204BFEF87008A800A8A924AA2284200020 +42D9:100013FE210825084508F9F81108210849F8FD080508011E57E8540880080008 +42DA:100013DE204228424A52F14A114A204248C6F94A0A520042A842A842814A0084 +42DB:10201020212424A444A8F820102023FE4870FCA804A801245524562280200020 +42DC:100008FC3E44222822103E28224644209FC0018006103FF80108112025104208 +42DD:10401024222425084508F810104020404BFEFC88050801905460545081880604 +42DE:100011FC210425044504F9AC115421544954FD5405AC01045504550481140108 +42DF:100011F82008240845F8F9001104210448FCFC40042000A4AA8AAA8A84780000 +42E0:1028102421FE24204420F9FC1124212449FCFD24052401FC552455248124010C +42E1:10201020205028884904F2FA102020204BFEF82009280124AA22AC2280A00040 +42E2:080C08F07E8008800EFE788808882908164808801F0002103FF8010815202210 +42E3:201020103F244044BEF8221032202A44FF7E221252104A547F52029214500820 +42E4:084008407F40087C3E840884FF04104422247C240904FF8408844904A8A81010 +42E5:100011FC2124252445FCF924112421FC4820FC2005FC00205420542083FE0000 +42E6:1080108020FE250046FCF88410A4209449FEFC840524011455FE540480280010 +42E7:100011FC2104250445FCF910111021FE4910FD10057C014455445544817C0244 +42E8:1040102021FC24004508F890100023FE4800FC0005FC01045504550481FC0104 +42E9:10001040239C2A044A04F39C120422044BFCFC9004900090549055128212040E +42EA:2000277E450445049574E554265445549554F55405741554AE04A40484140408 +42EB:1080108020F825084610F9FC1024202449FEFC24042401FC5424542080A00040 +42EC:100013FC204028404BFEF0A0111022084C46F84008480264AA52AC5281400080 +42ED:1040102023FE28804904F3FE100221FC4904FDFC050401FC5504550481140108 +42EE:10201020205024884504FA0210F820204820FDFC0420012454A454A883FE0000 +42EF:104808443E7E23C022243E282212206A444688821F0002103FF8010815202210 +42F0:1FF010101FF010101FF010101FF01010FFFE11102248CF8602201FF009481320 +42F1:1020102020202BFE4820F124112421244AAAF87008A800A8A924AA2284200020 +42F2:100011F02110291049F0F04013F822484A48FBF80A480248ABFAA8428042003E +42F3:1050105223DC245044D2FB4E100021FC4904FDFC050401FC5504550481140108 +42F4:100010FC2048243045FEF852109421104A30FC2005FE007054A8552482220020 +42F5:100011FC210425FC4504F9FC108021FE4A22FD220552010255FA540280140008 +42F6:100013FE2020244045FCF904110421FC4904FDFC0504010455FC540080880104 +42F7:00207E20247E18A4FF2829104A2898C6044008801F0002103FF8010815202210 +42F8:1008101C21F025104510F9FE1110217C4944FD7C0544017CA944AA44827C0444 +42F9:100013FE200029FC4904F10411FC20004BFEFA220A2203FEAA22AA2283FE0202 +42FA:108811C827082908492AF12A17AC21484B08FB880D540514A914A92481240142 +42FB:1020102023FE28204820F3FE128A22524AFAFA220A2202FAAA22AA22822A0204 +42FC:100011F82088249044FCF954112421544A88FC0005FC0154A954A95483FE0000 +42FD:21042104410447C4913EE10427C440249114F11407C41104A904A1C48E140408 +42FE:1000104023FE28884904F64210FC230848B0F8D00F3E00C2AB24A81880600780 +42FF:100011FC2124292449FCF124112421FC4800FBFE09200122A914A94881840102 +4300:10C41704212429144914F784112421144B94FB460D3C0504A904A90481040104 +4301:100013FE205028504BFEF252125223FE4800FC4007FE00885590546080D80304 +4302:100013FC220422044BFCFA0013FC22404A88FBFC0A241220ADFCA420882013FE +4303:1082108222A229CA488AF3EA122A222A4BEAFA2A0A2A03EAAA22AA2282AA0244 +4304:11FC102021FC25244554F904112C2020483CFC2005F800885450542080D80306 +4305:1020101021FE2510457CF91411FE2114497CFD10057C0144A944AA44827C0444 +4306:1020104023FC2A244A24F3FC122422444BFCF84008A800B4A93CA9228222041E +4307:1020102023FE28204BFEF242148C21F04820F8440BFE0022A928AA2484A40040 +4308:100011FC210429FC4904F1FC100023DE4842FA52094A00C6AB5AA842814A0084 +4309:100013FE22522A524BFEF000100023FE4820F820093C0120A920A92087FE0000 +430A:1008103C23C028044A44F12811FC22204820FBFE08200124A924A92481FC0004 +430B:1088108823FE28884820F050108821044AFAFC00040001FC5504550481FC0104 +430C:100013DE20422A52494AF2521042202049FCFD04050401FC5504550481FC0104 +430D:1088108823FE248844F8F82011FC212449FCFC2005FC002055FC542083FE0000 +430E:00407CF8554854307DCE54F854887CF8044008801F0002103FF8010815202210 +430F:1040102023FE2A424828F29412AA24CA48F8FB0008200124A924A92481FC0004 +4310:100E13F020442A244908F3FC120423FC4A04FBFC0A0403FCA890A91082120C0E +4311:100013DC22942BD44A54F3C8128822944BE2F800082001FCA820A82083FE0000 +4312:1040102023FE22504A50FBFE125222524BFEFA000A9212D4AA98A49284D2088E +4313:20783F48404CBE802A78FF284A107F28044408801F0002103FF8010815202210 +4314:100013FE22002A7C4A44F244127C22004AEEFAAA0AAA02AAAAEEAA0083FE0000 +4315:2040202047FE44909490E49027FC449094D8F5B805B416D4A892A89090900090 +4316:10A0109021FE2B2049FCF12011FC212049FEFD00042003FE547054A883260020 +4317:2100210043FC46A89AA8E2A827FC42A892A8F2A80FFE1000AAA8A25484540000 +4318:082049202A3E7F4849485DA86B104928454608801F0002103FF8010815202210 +4319:1088108821FC24884488FBFE102021FC4924FDFC052401FC5400548881040202 +431A:100013FE205028504BFEF252125223FE4924F8A80BFE0070A8A8A92486220020 +431B:10001E0C22F05420284410F82810FF2400FE7E1200507E5400927F1242507E20 +431C:10501252215428504BFEF088105023FE4820F9FC082003FEA8A8A92486220020 +431D:2110211047BC411093B8E5542912400093F8F00007FC1040AA48A44489420080 +431E:10201020205024884504FAFA1000200049DCFD54055401DC5488548881540222 +431F:101013C8227E2A404A62F3D41200223E4BC8FA480E7E0248AA48ABC882480008 +4320:02907FD0421E5EA242885D0855485ED4846208801F0002103FF8010815202210 +4321:109013FC22942BFC4A94F3FC100023FC4800FBFC0A0403FCA908A89087FE0000 +4322:100011FC20202BFE4A22F1AC102021AC4850F8C80B2600F8A808A8D080200010 +4323:1108110821EE2A944842F01011FE210248F8FC8804F8008054FC548480FC0084 +4324:200027FC424844449FFEE44426EC455496ECF44406EC1554AEECA44484540408 +4325:103E17C0224421284BF8F84017FC20004BF8F8080BF81008ABF8A544852A08FA +4326:100013DE20422A52494AF252109021084BFEFD1009FE0110A9FEA91081FE0100 +4327:102013FE202029FC4800F3FE100221FC4820FBFE080003FEA804ABBE82A4038C +4328:1088108823FE28884910F1DE125225544A88F9740A0201FCA820A92482220060 +4329:110817FE210828004BFCF294129423FC4828FBFE0A200324AAA8AA92842A08C6 +432A:13DE125223DE2A524BDEF242127A228A4B12FADA0A8A02DAAA8AAAFA820A0204 +432B:13D0129023DE2A684BC4F28413F8210849F8FD0805F8010855F854908112060E +432C:1110109023DE28104A5EF18213DE20104BDEFA500BDE0250ABDEAA50825202CE +432D:1088108823FE28A84890F1FE112023FC4D20F9FC092001FEA900AAA482520452 +432E:11FC102023FE2A2249ACF02011AC2000489EFBF2089E01D2AABEAC92809E0092 +432F:108813FE20882BDE4A52F3DE10A0209049FEF9200BFC0520A9FCA92081FE0100 +4330:13FC110821F8290849F8F10E17F820084FFEFA940B9C0294AB9CAAD687BC0084 +4331:40807FFC48008FF8A000EFF848084FF8A100FC9C15D45C14555C5C9695D62C22 +4332:108813FE208829F04820F3FE102021FC49ACFD7405FC002055FC542083FE0154 +4333:27FC224847FC4C4696ECE55426EC455496ECF454040817FCA840A3F8805007FC +4334:40807FFC48008FF8A000EFF848084FF8A220FD5C17F45C9455DC5C9697F62CA2 +4335:13FE120223FE2A924A54F29212FE22AA4AFEFB220AFA02AAAAFAAA2285FA0004 +4336:101010102010241045FEF810103020304050FC50409001101C10E01040500020 +4337:102010202020242045FCF924112421244124FDFC412401241D24E12441FC0104 +4338:10201020202025FC4420F84013FE20404080FDFC400400881C50E02040100010 +4339:100013FC220422044A04FAF4129422944294FA9442F402941A04E20442140208 +433A:100013FE2088248844F8F888108820F84088FC88408E03F81C08E00840080008 +433B:100013DE204220424A52F94A114A204240C6F94A425200421842E042414A0084 +433C:110410842088241045FCF9041104210441FCFC50405000901C92E112420E0400 +433D:1008103C23C020444A24F9281100202043FEF87040A800A81924E22244200020 +433E:1020102023FE20204820FBFE128A225242FAFA22422202FA1A22E222422A0204 +433F:100013FE200021FC4904F90411FC200043FEFA22422203FE1A22E22243FE0202 +4340:10901290229C22A04AD0FA88128820804000FBF842A802A81AA8E2A84FFE0000 +4341:10881448225020FC4820F850169422384250FA98423402541A90E22045FE0800 +4342:200020FC3C20502090201020FE2011FE10205420542054205C20642004A00040 +4343:000801FC7E0022081108111008001FF821000100FFFE0100210821083FF80008 +4344:202020203C205020903E1020FE20102011FC5504550455045D04650405FC0104 +4345:202020203C50505090881124FE12101011FC5404540854885C50642004100010 +4346:204020203C2051FE91021204FE00100011FE5420542054205C20642004A00040 +4347:2004201E3CE0500090101008FEFE100210045408541054205C4064A0051E0000 +4348:200021FC3C205020912410A4FEA8102013FE5420542054205C20642004200020 +4349:200020003CFC508490841084FE84108410FC5484540054485C44648404820102 +434A:204020203C2051FE90001088FF04120210885488545054505C20645004880306 +434B:2008203C3DE0502091FE10A8FEA810A811FE54A854A855FE5C20642005FC0000 +434C:204020203CFC500090881048FE5011FE1000540054FC54845C84648404FC0084 +434D:1000FE7810487C480048FE8682007CFC20443C445028FE28101054287C440182 +434E:408843FE7888A02023FE2250FBFE225223FEAA80AAFEAA80BAFECC020AAA0004 +434F:00003FF824482448244824483FF8200820082008200820082008200820282010 +4350:00007FFC444444447FFC00003FF8010001000100FFFE01000100010001000100 +4351:00003FF822282AA824482AA8312800003FF801000100FFFE0100010001000100 +4352:00007FFC444444447FFC010001007FFC03800540092011102108C10601000100 +4353:00007FFC444444447FFC00003FFC0040104020403FFE01400640184061400080 +4354:00007FFC444444447FFC020002007FFC0400048008801100222044108FF80408 +4355:00007FFC444444447FFC000000F03F00210021003FFC208020402A243114210C +4356:00007FFC444444447FFC08001FF020105F90109010901F901050102410040FFC +4357:00007FFC444444447FFC020001007FFC040008201FC0008003200C103FF80008 +4358:00007FFC444444447FFC01001110092005407FFC0540092011102108C1060100 +4359:00007FFC44447FFC10003FFC40009FF012101110FFFE221021103FFC00100060 +435A:00007FFC444444447FFC01001FF010101FF010101FF011081090126014181806 +435B:00007FFC444444447FFC00003FF821082FE8210827C8244827C820083FF82008 +435C:7FFC44447FFC090008801FFC108030805FF8908010801FF8108010801FFC1000 +435D:7FFC44447FFC000001047D9809603118C50602001FF010101FF010101FF01010 +435E:7FFC40044AA444444AA400500048FFFE00403E4022243E2800120E2A70C60302 +435F:7FFC44447FFC00002448238824483FF81010220847E40820144003801C70E00E +4360:7FFC44447FFC01000080FFFE0440139014501FF001007FFC44444FE44424400C +4361:00007FFC44447FFC00803FFE22203FFC22243FFC284028482F7048444B448C3C +4362:00007FFC44447FFC10003FFC4AA00AA07FFC0AA00AA07FFC0000248822444244 +4363:7FFC44447FFC00003FF801007FFE41029D7400003FF821083FF821083FF82008 +4364:00007FFC44447FFC0100FFFE02887D7025484D6690101FF010101FF010102010 +4365:00007FFC44447FFC00007FFE40005F3C44107F7E4E345552609044F84480BFFE +4366:7FFC44447FFC100008287F24147E494855C87F7E08487F7E514855485D7E4340 +4367:10881048505050007DFC5020902010FC1C20F02051FE10201020102010201020 +4368:442024202820FDFE102010207DFC11241124FD24112411342128202040208020 +4369:444024402840FE8010FE11087E8810881088FE50105010202050208841048202 +436A:442024202820FDFE102010207C2011FC1070FCA810A811242124222240208020 +436B:442024102810FDFE110212047C8010881090FCA010C0108220822082407E8000 +436C:440025FC2820FC20112410A47CA8102013FEFC20102010202020202040208020 +436D:440024FC2884FEA4109410847C8413FE1104FF441124110421FE200440288010 +436E:445024502850FD5210D410587C50105810D4FD5210501050209220924112820E +436F:4440244028FCFD04120811FE7D00117C1144FD441154114821422242423E8400 +4370:440025FC2904FD24112411247DFC11241124FD54114C118C2104210441FC8104 +4371:442024202850FC88110412FA7C20102013FEFC20112811242222242240A08040 +4372:88004840539CFA042204239CFA04220423FCF89020902090209041124212840E +4373:88004BDE5042F94A2084214AFA5224202000FBDE205221522094414842548422 +4374:881C49E05020F82023FE20A8F92422422040FBFE2088210820D0403040488184 +4375:4440244028F8FD08101011FC7C24102413FEFC24102411FC2024202040A08040 +4376:442024202BFEFC2011FC11247DFC112411FCFC20107010A82124262240208020 +4377:4440244029FCFC8413FE10007DFC110411FCFC2013FE1020222023FE40208020 +4378:442824242BFEFC2011FC11247DFC112411FCFD24100813FE2088204840488018 +4379:4420244029FCFD0411FC11047DFC110411FCFC28102413FE2050208841048602 +437A:8820482051FCF92421FC2020FBFE222223FEF8202040202422A2428A44788000 +437B:88004BDE5252FBDE22102252F9CE20002088FBFE2088208823FE408841048202 +437C:88004BDE5088FAA823FE2188FADA24A621F8F908210821F82108410841F88108 +437D:88004BFE5222FACC224423EEFA4422EE2354FA4422102290229E449044908BFE +437E:00007EEE2422242224AA24662422FF222426246A24B224222422242244AA8444 +437F:00007EFC224412241A3462C4020400007FFC010001003FF801000100FFFE0000 +4380:0014EE1222122210AAFE66902292229226926A94B29422B422CA228AAA164422 +4381:100011DC10441044FF5410CC104410447C4C44D44564444444447C4445540088 +4382:0040EE4022FC2284AB0466F42294229426F46A84B294228822822282AA7E4400 +4383:100011DC10447C44555454CC7C445444544C54D4FF6444444444444455544888 +4384:0000FDDC24442444255424CC54444844804C7CD445644444444444447D544488 +4385:100011DC20447C44455444CC444444447C4C44D44564444444447C4445540088 +4386:00007EFC224412241A3462C4030402800C603218C1061FE00020064001800040 +4387:100021DC7C444444655454CC5444FC44444C64D4556454444444444455548888 +4388:0020EE2022FC22A4AAA466FC22A422A426FC6A20B22422182212226AAB864402 +4389:000CEE0A220822FEAA8866882288228A26EA6A8AB28C228C228A228AAA964522 +438A:100010EE1E22222262AA9466082214222226416ABEB22222222222223EAA2244 +438B:080028EE28223E2248AA0866FF22002200263E6A22B2222222223E2222AA0044 +438C:0000EE7C22442244AA446644227C221026106A50B25E225022502270AA9E4500 +438D:0028EC2425FE2420B4206DFC2524252425FC6D24B52425FC25242524B524490C +438E:0000EDFE24A024A8B4A86CE824A824A824A86CE8B4A824AA24BA25EAB4264820 +438F:080008EE1422222251AA88667E2202220426086A7EB2422242227E2242AA0044 +4390:100011DCFE4410447D5444CC7C4444447C4C54D41164FE441044104411541088 +4391:0000EEFC22042204AA7C6604220422FE26106A92B254223822542292AA504420 +4392:0048EE44225E23E0AA286612226A239626486A5EB3E0222422282212AA6A4586 +4393:0010EE1022DA2254AA5466922350222026FE6A82B28222FE22822282AAFE4482 +4394:0028EC2427FE2420B5FC6D2425FC252425FC6D24B40827FE24882448B4484818 +4395:08202AA44D28145022887FFE400280043EF8020812480A28124822880A280410 +4396:440024EE2822FE2292AAD666BA229222FE26006A7CB244227C2244227CAA4444 +4397:060078EE1022FFA222AA5D6694A21C2200267F6A41B25D2255225D2241AA4344 +4398:08007F7E0912FF92095A7F360812AA92EB9688BAFFD28892EB92AA92AA9208B6 +4399:200011DCFE4482447D5454CC98447C44C44C7CD445647C4444447C4429544488 +439A:0088EDDC248825DCB4886DDC248825FC24046CFCB40425FC24202554B54A4A3A +439B:020002083FD00220FFFE02000C703F84C80407FC00001FF0101010101FF01010 +439C:101012107E12147E1414FE1408FE100820307E22A06422B82D223022201E0000 +439D:02203FC00280FFFE02200FC03408C3F800007EFC224412240A1412246AD40408 +439E:010001081FD001207FFC02000FF03810CFF008100FF000003FF8000800080008 +439F:100013FE10201020FC4025FC2554255425544954295411542954454481140108 +43A0:200023FE20202040FDFC25542554A5546554255435442D16250A440243FE8000 +43A1:0000FFFE020004003FF82488248824A82010010011101120228004401830E00E +43A2:104010401080FCFE11007A0010FCFC0810103820344054809102110210FE1000 +43A3:100810481128FD28112879081108FD0811083908354855949114102210421082 +43A4:100011FC1104FD0411FC79001100FDFE1102397A354A554A927A120214141008 +43A5:100010501048FC84112478201050FC8811063AF8348854889088108810F81088 +43A6:102010A410A4FD28105078881104FC24102038A834A855309050108811041202 +43A7:1040102010FCFC00108878481050FDFE1000380034FC54849084108410FC1084 +43A8:1020102013FEFC50108879241222FDFC112439FC352455FC90221022101E1000 +43A9:109210921124FE48112478921092FC0011FE3922352255FE9122112211FE1102 +43AA:100011FC1104FDFC110479FC1000FDFE10083BFE340855089088100810281010 +43AB:105011241154FD0411FC78501088FD4410783888348855509020105010881106 +43AC:100013FE1252FE5213FE78201020FDFC1020382037FE54409088110413FE1102 +43AD:101010501250FD7C1090781010FEFF00117C39443544517C5144910012FE1400 +43AE:1040102011FCFC88105079FC1104FD2411FC392435745554915411741104110C +43AF:1088108813FEFC8810F8782011FCFD2411FC382035FC542093FE105010881306 +43B0:1142115C13F0FD501150795E13F4FC1411D43954355455D49154115411E41004 +43B1:200023FC2294FA9423FC71102252FBDC201273CE6A40A3D2225C23D0225222CE +43B2:0000FF0024FC24043C08241024203C20244024402E80F48244820482047E0400 +43B3:0000FF7C244424443C44247C24443C442444247C2E44F4444444048404940508 +43B4:0048FF48244824483CFC244824483C4825FE24482E48F4484448048804880508 +43B5:0040FF20242824083C08244824543D52255225602E60F44444C40544063C0400 +43B6:0020FC20482049FC79244924492479FC492449244D2479FCC924082008200820 +43B7:0020FD20492049FC79204A2048207BFE487048A84CA87924C9240A2208200820 +43B8:0000FDFE4820482078FC4844484479FE480048004CFC7884C884088408FC0884 +43B9:00F83F0011100920FFFE09203118C1063FF808200FE008200FE0083EFFE00020 +43BA:0082FC824A824BEA7C8A488A4FFA788A4BEA4AAA4EAA7AAACAA20AE2088A0884 +43BB:0000FDFC492449247974492449FC7904497449544D547974C9040A040A140C08 +43BC:0000FDF84808480879F8480848087BFE48204A224D7478A8C9240A2208A00840 +43BD:001CFDE04920492079FE4910494A7986480249FC4D047904C9FC0904090409FC +43BE:0020FC204850488879044AFA480079FC495449544DFC7954C95409540904090C +43BF:0008FCC84B084908792A492A4BAC794849084B884D547914C914092409240942 +43C0:0082FC824BE24882788A4BEA4AAA7AAA4BEA488A4DCA7AAACCA20882088A0884 +43C1:0040FC204BFE4A42782049FC488878504BFE48204C2079FCC820082008200820 +43C2:00A0FD2C4924492479AC4924492479FC482049FC4C887850C820085008880B06 +43C3:0000FDFE4902480078FC488448FC788448FC48204C1079FEC800084808840902 +43C4:0040FC204BFE4A8A79044BFE4840788849FC48244C2079FCC82008200BFE0800 +43C5:0080FC8849EE492A7AAA49444884797A4A0048004DFE7820C8A809240AA20840 +43C6:0050FC504BFE48507BFE4A524BFE7A524BFE48004DFC7904C9FC090409FC0904 +43C7:0000FDFC485049FC7954495449FC780049FC48004FFE7820C8A809240AA20840 +43C8:0108F9085254525474BC57085110722454BE578A580870ACD56A154A14281010 +43C9:0000FDFC490449FC790449FC4888795449DC48884D5479DCC80009A809540A54 +43CA:0110FC904BDE48107A5E49824BDE78104BDE4A504FDE7A50CBDE0A500A520ACE +43CB:01003FF80108FFFE01083FF8054009203118C10625781348A178A5441D3C0100 +43CC:084008201010200840069FF0101010101FF0101010101FF01010101010501020 +43CD:02000400082010103FF8100800001FF010101FF010101FF01010101010501020 +43CE:00003C0024F0249024903C90249024D024B03C902490249224924512550E8A00 +43CF:00003DFC2420242024203C2027FE242024203C20242024202420442054A08840 +43D0:00203C20242025FC24243C242424242427FE3C20245024502488448855048A02 +43D1:020004000FF81210692004C003000C0071003FF8228824482108228824482018 +43D2:00083C882488248824883CFE2480248024803CFC248424842484450455048A04 +43D3:00003CFC2400240034002DFE245024502C5034502450245224524492548E8900 +43D4:00003DF82448244824483C48244825F824883C88248824882488448857FE8800 +43D5:00083C3C25E0242024203C20242027FE24203C20242024202420442055FC8800 +43D6:00043DE42424242424243DE42504250425043DE4242424242424442455448884 +43D7:00803C8024FC250026003CF82400240025F83C0824082408240A440A54068802 +43D8:00003DFE2528252825283D2825282528252A3D2A254A25462580450055FE8800 +43D9:00203C20242025FE25223E242420242024503C50245024502490449255128A0E +43DA:00203C20242024A824A43CA22522252026243C24242824082410442054C08B00 +43DB:00403C40248024FC25043E042484244424443C14242424442584440454288810 +43DC:00007BFC4884488848887890489C488449447944492849284A104A284C449982 +43DD:00203C20242025FC24203C4027FE244024803DFC240424882450442054108810 +43DE:00203C20242027FE24203C20242025FC24703CA824A825242524462254208820 +43DF:00403C202428240824083C482454255225523D602660244424C44544563C8800 +43E0:00407820482048004BFC780048084908490878904890489048A048204BFE9800 +43E1:00003CFC2400240024003DFE2420242024A83CA4252425222622442054A08840 +43E2:00103C10241024FE24923C94249024FC24A43CA424A824A82490452855448A82 +43E3:00003CF82488248824883CF82488248824883CF8248824882488448857FE8800 +43E4:00003DFC2404240425F43C04240425F425143D1425F425142404440454288810 +43E5:00203C20242025FC25243D2425FC252425243D2427FE25042504450455148908 +43E6:00083C3C25E0242024203FFE2420242024203DFC250425042504450455FC8904 +43E7:00203C20247C248425483C302420244825903C3E244225A42418441054608980 +43E8:00403C8025F8250825083D0825F8250025003D0025FC25042504450455FC8904 +43E9:00203C202450245024883D0426FA240024003CF8248824882488448854F88888 +43EA:00003DFE2488248824883CF82488248824F83C882488249E27E8440854088808 +43EB:009078904890491049FE7B104D10493849387954495449924910491049109910 +43EC:00203C202448248425FE3C122490249024FE3D10241025FE2410441054108810 +43ED:00207920492049FC49207A2048204BFE487078A848A8492449244A2248209820 +43EE:00403C4025FC244424443C842494250824003D02248424482400444854848902 +43EF:0020782048204BFE48207820482049FC4840782048A44A824A8A4A8A4C789800 +43F0:00007BFC4844494449447A84489449084A40782048A44A824A8A4A8A4C789800 +43F1:000079FC4904490449FC7900490049FE4902797A494A494A4A7A4A024C149808 +43F2:01083C88249025FC24243C2425FC252025203DFE246224A2252A462454208820 +43F3:0104790E493049204FE07920493E496449A47F24492449244924492449449B84 +43F4:00203D2424A424A824203DFC2504250425FC3D04250425FC2504450455148908 +43F5:0090788848804BFE48A078A848B048A448A878B04924492A49324A224ADE9C00 +43F6:01103D12251425D825103D122552258E25203C2025FC24202420442057FE8800 +43F7:00003DFC250425FC25043DFC2400240025FC3C20242027FE2420442054208820 +43F8:00007BFC4840484049F8788848884BFE4800780049F849084908490849F89908 +43F9:00003DFC2504250425FC3D04250425FC25043D0425FC24502490449255128A0E +43FA:00403C4024FC248825503C2024D8272624F83C2024F8242027FE442054208820 +43FB:1020102020204420FEFC02207C20442045FE7C2044207C48448445FE54824800 +43FC:00483C44245E25E024283C12246A259624483C5E25E0242424284412546A8986 +43FD:00403C2025FC240025083C90240027FE24003C0025FC25042504450455FC8904 +43FE:00203C2025FE242024FC3C4025FE248825243E2224F8242025FE442054208820 +43FF:104008403E7E228823503E20205841869FF010101FF010101FF0101010501020 +4400:00203C2025FC245024883D0427FE240825E83D28252825E82528440854288810 +4401:00007BFE4840488049447A2448684AB049307AA8486848A449224A2048A09840 +4402:000079F84808480849F8780848084BFE48207A22497448A849244A2248A09840 +4403:00007BFE4A024A1A4AE27A224A224BFE4A227A724AAA4B264A224A224BFE9A02 +4404:00403C40247C248425083E00242025CE25023D0225CE25022502450255FE8902 +4405:00003DFC2504250425FC3D002540257C25903D1025FE25102528452855448A82 +4406:0008783C4BC048444A247928490048204BFE787048A848A849244A224C209820 +4407:00803C8024FC255426543C942524245424883C0025FC250425FC450455FC8904 +4408:004078404BFC4840484079F8490849F8490879F8490849F8490849084FFE9800 +4409:00923C922524264825243C922492240025FE3D22252225FE2522452255FE8902 +440A:00003DFC2504250425FC3D04250425FC24003D1225D42518251045525592890E +440B:00907890490849484A447C9249084BFC4844782048A44A824A8A4A8A4C789800 +440C:044004403FF824483FF82448FFFE10102008DFF610101FF010101FF010101030 +440D:00203C2027FE242024203DFC2400240025FC3D04250425FC2400448854508BFE +440E:000079FC4904490449FC7904490449FC48007BFE48204920493C49204AA09C7E +440F:00203C2027FE242025FC3C4027FE248825043EFA2488248824F84488548888F8 +4410:008871C857085108512A712A57AC51485308738855545514591451245124B142 +4411:00483D48254827FE25483D482578250025FE3C2027FE247024A8452456228820 +4412:00003C4025FE248825043E4224F8270824903C7027BE244225A4441854608B80 +4413:00003DFE2410242024FC3C84248424FC24843CFC2484248424FC444854848902 +4414:00203C1025FE250225023DFE2500250025FE3DAA26AA24FE24AA44AA54AA8886 +4415:00003CF82488248824F83C0025FE248824F83C8824F82488249E47E854088808 +4416:00007BFC4A044A044BFC7A204B244AA84A207BFE4A704AA84AA84D244A229820 +4417:00203C2024FA242424283DFE2420244024FC3D442644247C24444444547C8844 +4418:001E7BE048444924488879FC484048404BFE788048FC494449284A1048689986 +4419:008878884BFE488848F8782049FC4924492479FC48204BFE4820482048209820 +441A:00007BDE4A524A524A527BD24A524A524A527BD24A1A4A944A504AB04B109810 +441B:00203C2025FE245024883D0427FE248824F83C8824F82488249E47E854088808 +441C:002078204BFE482049FC790449FC490449FC790449FC49044BFE488849049A02 +441D:00203D2424A8242025FC3D04250425FC25043DFC2504250425FC440054888904 +441E:00007BDE484248424BDE7A104A104BDE48427A52494A494A4A5248424A949908 +441F:008878884BFE488849FC78884BFE482049FC792449FC49244BFE490449149908 +4420:00883C8827FE24A824103FFE2480248024FC3C0024A824A824A844AA552A8A06 +4421:02000100FFFE02847D78255025484D6401003FF8228824482108228824482018 +4422:0080788049FC4A44495479F4488449284A9079FC4A444D5449F4488449289A10 +4423:00003CF82488248824F83C0025FC250425FC3D0425FC250425FC445054888904 +4424:00843C44244825FE24203CFC242025FE24403C8024FE25102610441055FE8800 +4425:0090788849044A424C8879FC480448004BDE78424A52494A4A524842494A9884 +4426:00203C2024FC242024203DFE2440248425FE3C0225FC25542554455457FE8800 +4427:004078204BFC480049F8790849F848004BFC7A044AF44A944AF44A044A149A08 +4428:1000FE7810487C480048FE8682007CFC00447C4444287C2844107C2844444D82 +4429:00203D242524252425FC3C0027FE240025FC3D04250425FC2488445057FE8800 +442A:00A0789049FE4B204DFC792049FC492049FE79004BFC4888489E49024A0A9C04 +442B:012479244A244C244954794A4A924E104A107A504A5C4A504A504AB04A9E9B00 +442C:009078904FFE48904BFC7A944BFC4A944BFC780049F8490849F8490849F89908 +442D:02A872A857FC52A852AA74E6580057FC5444704053F85248524852485258B040 +442E:004078204BFC4800490878904BFE4A204AA07AFC4B204A204AFC4A204C2099FE +442F:00003DFC252425FC25243DFC2440248825F03C20244427FE2422452456228860 +4430:0120793C49444AA84A107EA84AC64ABC4AA47ABC4AA44ABC4A244A244A249A2C +4431:004078204BFE488848507BFE4A224AFA4A227AFA4A8A4A8A4AFA4A024A0A9A04 +4432:00007BDE48424A52494A7A524842482049FC7904490449FC4904490449FC9904 +4433:00403C4024F8250826103DFC2524252425FC3D24252425FC24004554552A8A2A +4434:7DFC44207D2045FE7C5048525492650E1FF010101FF010101FF0101010501020 +4435:00883C8825FC248824883FFE242025FC25243DFC252425FC2400448855048A02 +4436:00007BDE48884AA84BFE79884ADA4CA649F87908490849F84908490849F89908 +4437:00007BDE4A524A524BDE780049FC492449FC792449FC48204BFE482048209820 +4438:00203DFC242427FE24243DFC242027FE24003DFC252425FC252445FC54008BFE +4439:002079FC48244BFE482479FC48204AAA4BAE7A224BFE4A224BAE4AAA4AAA9C22 +443A:00007BFE48504BFE4A527BFE480049FC490479FC490449FC48204BFE48209820 +443B:00207BFE482049FC490479FC482049FC488878504BFE482049FC482048209820 +443C:00807BDE488A49CA488A7BD248A64840488879F048244BFE482249244AA29840 +443D:008878884BFE4888488878F848204BFE4A227B324AAA4B764A224A224A2A9A24 +443E:00003DFC255425FC24203DFC242027FE24883C5025FC242027FE442054208820 +443F:004078804BFE4A224AAA7A224BFE4A724AAA7A0248204BFE4820485048889B06 +4440:00107BC84A7E4A404A627BD44A004A3E4BC87A484E7E4A484A484BC84A489808 +4441:3AB821083AB82288393822887FFE40029FF410101FF010101FF0101010501020 +4442:01407A4C4A644A444B4C7A644AA44BAC4AA47AA44FFE4800491049084A049C04 +4443:00883DFE248825FE35022CFC240025FE2C20345025AA245C25AA444855A88810 +4444:00403CF8248824F824883CF8240025FC25243DFC252425FC240047FE54888908 +4445:00887BFE488849FC4954795449FC48004BFE7A4248F848884948483048609B80 +4446:010878904BFC484049F878804BFC494849FC7B0A4DF8490849FA4934498C9902 +4447:00427B9C4A104BDE4A947A944C204BFC4A047BFC4A044BFC4A044BFC49089A04 +4448:012479744A584ADA4BFE79544ADA4BFE48A278204BFE487048A849244A229820 +4449:E040BFFEA400A7FCA000E7FCA404A7FCA040EE4EABEAAEAAAAAEAE4A2AAA7710 +444A:0010787C4A54497C491078FE48444B7C4944797C4944497C492849444A809C7E +444B:00207BFE480049DC495479DC48884BFE48887BFE48884BFE489449884AA498C2 +444C:03DE7A524BDE4A524BDE7A224AFA4A224AFA7AAA4AFA4AAA4AFA4A724AAA9A26 +444D:03DE7A524BDE4A524BDE7A524BDE498C4A5278404FFE48884990486048D89B04 +444E:0148794C4AAA48084FFE79484B68494A4B6A794C4B6C4948496A4B9A48269842 +444F:00887BFE48884BDE4A527BDE48A0489049FE79204BFC4D2049FC492049FE9900 +4450:00407E40484048FE48807E804310421042587E5448944892491248107E500020 +4451:00287EAA486C482848FE7E44422842FE42107E7C481048FE481048287E440082 +4452:0000FE0011FC2024282444A4FEA412A4112410247C24104410441E84F1144208 +4453:08207FFC08200FE008200FE008207FFE4002BFFC08201FF001001FF001007FFC +4454:0020402098208BFE8820882089FCD9248924892489248934F928882000200020 +4455:060038F820083EF820083FF800003FF821083FF821083FF8210A410A41068102 +4456:002040209BFE882089FC88248BFED82489FC88208920893EF9208AA0027E0400 +4457:000041F8990889F8890889F88800DBFE890089FC8A548C94F9248A4400A80110 +4458:0108408898908BFC884089F88840DBFE8880890089FC8A20FC20882003FE0000 +4459:08001CFC708410841084FDFE108410847C8445FE4484448444847C8444940088 +445A:08001CFC708410841084FCFC108410847C8444FC4484448444847C8445140208 +445B:08041C1E71F011101110FD10111011FE7D10451045104508450A7D4A45A60112 +445C:08481D48714813FE1148FD48117811007DFE442047FE447044A87D2446220020 +445D:00003EF8228822883EF80000FFFE902210203DF84420A520192011FC20204020 +445E:3FFC24902960261038882290256022102C083FFC10103EFC4210149018FEE010 +445F:0F10F020117C8944427C0044FF7C810042FE771092105A7C2F10221042FE8200 +4460:080011FC3E04220832102A202A20FE20222032202A202A20222042204AA08440 +4461:100021F87C8844C864A854A85488FC5044506450542054204450448855048A02 +4462:100020007DFC4490649054905490FC90449064905490549244924492550E8A00 +4463:080410043F082110292025442504FF08211029222542250421084110452082C0 +4464:082010203E50225032882B442A22FE20220033FC2A042A08220842104A108420 +4465:080010FC3E44224832482A502A5CFE44224432442A682AA8229042984B248442 +4466:084010403E8022FC33042A042AF4FE94229432942AF42A94220442044A288410 +4467:1088208878884908697E5B084D08F94849284928690859084908490849289910 +4468:108020807CFE450066205520552CFD7447A46524553455284522450254FE8800 +4469:081010103E10221032FE2A102A10FE10227C32442A442A44224442444A7C8444 +446A:082010203E50225032882B042AFAFE00220032F82A882A88228842884AF88488 +446B:088410483E0022FC32482A482A48FE4823FE32482A482A48224842884A888508 +446C:085010503E50235232D42A582A50FE5822D433522A502A50229242924B12860E +446D:100021007CBE4488640856085508FD484448648857885488448844FE54808800 +446E:100020F87C884488648854885526FE2045FE6420547054A84524462254208820 +446F:110820887C9045FC6424542455FCFD20452065FE546254A2452A462454208820 +4470:081010103E90229E32902A902BFEFE00221032922A922B14220442084A3085C0 +4471:104020207BFE4A026D04590049DEFA524A524B526C9A5894491049124A129C0E +4472:082010203E3E222032FC2A842AFCFE8422FC32A42A202BFE222042204A208420 +4473:102020207C504488650456FA5400FDFC4554655455FC5554455445545504890C +4474:084410443EFE224432442A7C2A44FE44227C32442A442AFE220042284A448482 +4475:100021FE7D02457A6502557A5400FCFC448464FC548454FC4484448454948888 +4476:081010103EFE2210327C2A102AFEFE00227C32442A7C2A44227C42444A548448 +4477:102020107DFE4502650255FE5500FD7E4542657E5542557E45424542554A8A44 +4478:082010103EFE228232002A7C2A00FE0022FE32102A102A54225242924A508420 +4479:104020207BFE4A2268A459284850F888490448F8688858884850482048D89B06 +447A:100023FC7A044A346BC45A444BF4FB544B544BF46A445A544BF44A944C069802 +447B:1108208878884BDE6910592049DEF94249444944695E59444A444A444CD49808 +447C:104020407CFE452264AA54FA5442FC94454864FE552256AA44FA444254948908 +447D:100021FC790449FC690459FC4800FBDE48424A52694A58C64B5A4842494A9884 +447E:10A0209079FE4B2069FC592049FCF92049FE49006BF859084890486049989E06 +447F:102020107BFE4A02688058FE4910FB204D7C49446944597C49444944497C9944 +4480:1110211079DE4AA86C4458884888F9084B7E4D08694859284908490849289910 +4481:100023DE78424A52694A5A524842F82049FC4904690459FC4904490449FC9904 +4482:109022907A9E4AA26AD45BA84894F8A44FFE4A846AA45A944A944A844C949888 +4483:101020507A50497C6890581048FEFB00497C49446944597C494449004AFE9C00 +4484:100020007BFE4A0269FC580048F8F88848F8480069FC592449FC492449FC9904 +4485:102021247CA845FC644057FE5488FD0447FE650455FC550445FC450455FC8904 +4486:110820887BE849106A9E5FD44864FBD44A544BD46A545BC84A484A544A649AC2 +4487:104020207BFE4A0269FC580048F8F88848F8480069FC592449FC492449FC9904 +4488:102021FC7C20448867FE548855FCFD0445FC650455FC550445FC448855048A02 +4489:108021007BFE4D5469545BFE4954F9544BFE490469DE5A444954489E49049A04 +448A:0440244022FC2288431040FCBEA410A420A43EFC0280028002820282147E0800 +448B:1040104010FC7C88551054FC54A454A454A4FEFC1080108028822482447E8000 +448C:0020FF20817C00447E88427C7E5442547E54107C0840FF4000422442423E8100 +448D:20401040FEFC0088451028FCFEA4A2A410A4FEFC20803C8024824482547E8800 +448E:24202420FF7C24441288FE7C245442548154247C2440FF4024422442443E8400 +448F:4440244028FCFE889310D6FCBAA492A4FEA400FC7C8044807C8244827C7E4400 +4490:2220FFA0227C7F4455887F7C0054FFD480D43E7C22403E4022423E42223E3E00 +4491:00000000000000001010081008200000FFFE0000000000000000000000000000 +4492:08200820FFFE0820082000003FF8000800480188060818086008000800500020 +4493:08200820FFFE082008200000FFFE0400040008001FF000100010001000A00040 +4494:08200820FFFE0820082000400440044004200820082010101010200840048002 +4495:08200820FFFE0820092001000100010011101108210421044102810205000200 +4496:08200820FFFE0820082000007FF0041004100410FFD00412040A040604020400 +4497:04400440FFFE0440080008001FFC200040009FE0002000C003000C0410040FFC +4498:08200820FFFE08200820040004000FF01010282044400280010006C01830E00E +4499:08200820FFFE08200820010001000100010001F80100010001000100FFFE0000 +449A:08200820FFFE082008200100010011101108210421144120004001800E00F000 +449B:08200820FFFE0820100010FC22044204FC040804100422044104FF0441280010 +449C:08200820FFFE08200920110011001FF8210041000100FFFE0100010001000100 +449D:08200820FFFE08200008181006600180066018186C240240018006601818E006 +449E:08200820FFFE0820092001003FFC2104410802800280048008821082207E4000 +449F:08200820FFFE082000001FF01010121011101010FFFE10102010201040508020 +44A0:08200820FFFE0820092001007FFC010001003FF801000100FFFE010001000100 +44A1:08200820FFFE082000007F08010801083F08200840087F08010801080A080408 +44A2:08200820FFFE0820082000000C0070FC4084408440844C847094408800800080 +44A3:08200820FFFE082000001FF0101010107FFC101010107FFC1010101010501020 +44A4:08200820FFFE0820082000003FF82008200820083FF82008200820083FF82008 +44A5:08200820FFFE082000007FFC010001003FF82108210821082128211001000100 +44A6:08200820FFFE082001F03E00020001007FF8006001800E003000480087FE0000 +44A7:08200820FFFE0820092001003FF8010001000100FFFE0400082010103FF81008 +44A8:04400440FFFE0440080008001FF8210041000100FFFE0280044008203018C006 +44A9:08200820FFFE0820000000F01F00010001007FFC054009203118C10601000100 +44AA:0820FFFE08200400082010103FF8000808200820FFFE08200820102020204020 +44AB:08200820FFFE08200000085008481040307C57C09040102010201014100C1004 +44AC:08200820FFFE0820082000003FF800000000FFFE010011102108410485020200 +44AD:08200820FFFE082000001FF0001000107FFC00000020FFFE0820042004A00040 +44AE:08200820FFFE082000007FFE400280040FE008200A20092009221022201E4000 +44AF:08200820FFFE082000007FFE420282041FE002200C2004200A2011222022401E +44B0:04400440FFFE044000003FFE20002FFC2080208027F8208020802FFC20003FFE +44B1:04400440FFFE04403FF0002000C07D040588095011202118C5060200FFFE0000 +44B2:04400440FFFE04401008101CFEE0122022202220643E15E0082214222222C01E +44B3:08200820FFFE082000000FE008201020611C0100FFFE054009203118C1060100 +44B4:08200820FFFE0820040004007FFC08001FF028104FF088100FF0081008500820 +44B5:08200820FFFE0820100011F8FC082410242025FE442024201820182024A0C240 +44B6:08200820FFFE0820092001003FF821083FF821083FF8010800B001C20E32700E +44B7:08200820FFFE082000F01F0001000100FFFE010001001FF0101010101FF01010 +44B8:08200820FFFE0820092002003FF82448244824482448244824482448FFFE0000 +44B9:08200820FFFE0820092001007FFC01003FF80100FFFE054009203118C1060100 +44BA:08200820FFFE0A20040008201FC0008003200C103FF801081110210845040200 +44BB:04400440FFFE04400800087C080449044904497C494049404F427942003E0000 +44BC:08200820FFFE0820044004403FF82448244824483FF82448244824483FF82008 +44BD:08200820FFFE082000003FF820082AA82AA8244824482AA82AA8200820282010 +44BE:08200820FFFE08200A200100FFFE02000500090418882850C8200A180C060800 +44BF:08200820FFFE08207FFE40029FF4101010101FF0101010101FF0101010501020 +44C0:08200820FFFE0820092001007FFC010001001FF000001FF0101010101FF01010 +44C1:08200820FFFE082001003FF801000100FFFE000000207FFC0820042004A00040 +44C2:08200820FFFE08200A200100FFFE00003FF800003FF800003FF820083FF82008 +44C3:04400440FFFE04401FF010101FF000003FF8210821083FF8200220021FFE0000 +44C4:08200820FFFE08204400280C11F02900C90019FE2910491089100A1052102410 +44C5:08200820FFFE08200820200C11F01100810049FE49101110E110221022102410 +44C6:04400440FFFE04401000100C11F0FD00110011FE1D10F1101110121052102410 +44C7:08200820FFFE082001003FF801000100FFFE0440244844448842084011402080 +44C8:04400440FFFE0440100010F8208841088A06100031F850889050102010D81706 +44C9:08200820FFFE082000007E7C2444244844507F48144424444454844814400840 +44CA:0820FFFE082000007FFC020002003FF004100810FFFE00001FF0101010101FF0 +44CB:08200820FFFE08202008103C13E082204A204BFE1220E2102212228A23062202 +44CC:08200820FFFE0820092001007FFC010001003FF80000010008844892481287F0 +44CD:04400440FFFE04401FF010101FF010101FF000003FF80100FFFE010001000100 +44CE:04400440FFFE04401080108014FC55045A045084904410442804240444288010 +44CF:08200820FFFE082000007FFC010003000D603118C1041FF0101010101FF01010 +44D0:0820FFFE082001007FFC044008203118C1063FF80100111011141FF4010400FC +44D1:08200820FFFE0820200017FC91104110411017FE2110E1102210221024100810 +44D2:04400440FFFE044010001FF820085FC8924812481FC8124812481FC800280010 +44D3:0820FFFE0A2002007FFC02003FF80400FFFE08201FFC20204420822002A00040 +44D4:08200820FFFE082001081FD00120FFFE01001FF0082030C0CFFC008002800100 +44D5:08200820FFFE082023F01000100007FC7120112012241224141C280047FE0000 +44D6:08200820FFFE0A2001007FFE40028824121022081FF004100410081010A02040 +44D7:08200820FFFE08200440082011102208C44608201FF0011008844892481287F0 +44D8:0820FFFE0820000008401F6022505448084037FEC0001FF0101010101FF01010 +44D9:0820FFFE082000701F800100FFFE010009207924092809321922E91E01000100 +44DA:04400440FFFE0440100021F84108890811F83108510891F81108110817FE1000 +44DB:08200820FFFE082000003FF820083FF820802490249027F02080488848888FF8 +44DC:08200820FFFE08202008103C13E082204A204BFE1220E2102212228A23262212 +44DD:0820FFFE082000001FE0004001807FFC0100050002003FF824482448FFFE0000 +44DE:08200820FFFE092000803FFC200420043FFC20A020902FFC2120421044089806 +44DF:08200820FFFE082000003FF8210827C821082FE8200827C8244847C840288010 +44E0:08200820FFFE082001047D9809603118C50602001FF010101FF010101FF01010 +44E1:08200820FFFE0820282020003E7C484488440844FF4408441444227C41448000 +44E2:08200820FFFE082000003FF8210821082FE8210827C8244827C820083FF82008 +44E3:08200820FFFE0820FFFE010001007FFC41045144492455546594410441144108 +44E4:04400440FFFE044008001FF822484448088811082228041001004884481287F2 +44E5:0600010006C01830E44E3FF804401FF010101FF010101FF001007FFC01000100 +44E6:08200820FFFE0820044004403FF8244824483FF824482448FFFE082010102008 +44E7:0440FFFE044000003FF0002000C0793C4904496849107928014405000200FFFE +44E8:08200820FFFE08207FFE400288041FF821000100FFFE0100210821083FF80008 +44E9:04400440FFFE04401020102011FEFC20102031FC388454885050902010D81306 +44EA:08200820FFFE08201FF010101FF010101FF008001FF822484488090812282410 +44EB:08200820FFFE092001003FF804400820FFFE00101F9010901F90001000500020 +44EC:08200820FFFE0820010001FC01003FF820083FF820083FF80100FFFE01000100 +44ED:08200820FFFE0820010432040C243224C9240824FFA408242A244904A8941008 +44EE:08200820FFFE08203E400240147E0888FF480A48185028504820085028881104 +44EF:0820FFFE09203FF801001FF001007FFC00001FF01210FFFE20903FFC00100060 +44F0:0820FFFE082000007FFC04403FF8244824483FF8010001003FF801000100FFFE +44F1:0820FFFE08200440274C247024422F42F03E01007FFC054009203118C1060100 +44F2:04400440FFFE044009080890100013FC3204520493FC1090109011121212140E +44F3:04400440FFFE0440000009F8110821F8450809F8192429284910094809860900 +44F4:0820FFFE08200000FFFE02003FF8248824A821100100FFFE028004401830E00E +44F5:08200820FFFE082000001FF0101010101FF000007EFC4284428442847EFC4284 +44F6:04400440FFFE044008080808FF8808487F4849487F481C482A48490888280810 +44F7:08200820FFFE08A02100123C94804100437E15082108E1082108210821282110 +44F8:04400440FFFE044008007EF812202420182065FC08207E201220242018206420 +44F9:08200820FFFE092002800E603118DFE610201FE010201FE01008119014601810 +44FA:0820FFFE0820101008207FFC01003FF80100FFFE01007FFC028004401830E00E +44FB:08200820FFFE08207FFE4002BE24002001FC7E4814C81430146A2586240243FE +44FC:0820FFFE08201088108413FEFCA424A824B424A848B228A410AA2932452282DE +44FD:04400440FFFE0440200010FCFE0400047C0400FC7C8000807C8044827C82447E +44FE:08200820FFFE082020401248444420140860738020000400FFFE082007C07838 +44FF:0820FFFE082000003FE0044002807FFC444442845FF441047FFC410441047FFC +4500:0440FFFE0440103813C0204027FC6150A248244620802FFE2110232020E02718 +4501:08200820FFFE082000007FFC04403FF824483FF801007FFC05401930E10E0100 +4502:0820FFFE0A2001007FFE420281043FF808200440FFFE01003FF8010001000100 +4503:08200820FFFE0820200011F8FD08090811F83908550895F81108110817FE1000 +4504:0820FFFE082000FC7F002208111020203FF841000100FFFE0100210821083FF8 +4505:0820FFFE082000007FFC00201F2011201F200000FFFC00201F2011201F200060 +4506:08200820FFFE0820440029FC112429FC492499FC282049FC8820082053FE2000 +4507:0820FFFE08200100210821083FF800007FFC00001FF010101FF008200440FFFE +4508:0440FFFE04403FF801007FFC00001FF010101FF010101FF010101FF008201010 +4509:08200820FFFE08200C1C71E010201020FDFE307038A854A85124922210201020 +450A:08200820FFFE08200108FC9011FC109010907C9013FE10901C90F11041100210 +450B:04400440FFFE04401020102024207CA808A4112225227E280010542054C08300 +450C:0820FFFE082002001FF010101FF010101FF002007FFC08203118CFE601000100 +450D:08200820FFFE082000001FF811001FF011001FF011001FFC0004292444940008 +450E:08200820FFFE0820204017FC104003F87248124813F8115012481444284047FE +450F:0820FFFE08200040224013F81440004077FC100013F8120813F8280047FE0000 +4510:04400440FFFE04402120111017FC80904064539C11202110E7FC20902064239C +4511:04400440FFFE04400808144822285D0888C808287F0E08F82A084908A8881008 +4512:08200820FFFE0820008078404BFC5108609057FE480049F86908510841F84108 +4513:0820FFFE082020001040FE4000FE7C9001107C1001FE7C10441044107C104410 +4514:0820FFFE082001003FF80440FFFE00001FF010101FF010101FF004421842E03E +4515:04400440FFFE0440002878244BFE482079FC492449FC792449FC49244924990C +4516:0820FFFE0820000078404BF8504067FC51104A884CF4691052A0404041B04E0E +4517:08200820FFFE082020881050FBFE0820102039FC5420942013FE102010201020 +4518:04400440FFFE0440200020F83C88508810F8FC88108854F854885C8875FE0400 +4519:08200820FFFE08201080288044FCB90412047C841044944450041E04E0284010 +451A:0820FFFE08203FFC20002FF820003FFC24482630240E2FF848084FF888080818 +451B:08200820FFFE082023FC204021F821083DF8210821F8250829F8300020900108 +451C:04400440FFFE04400020FC2049FC7924492479FC49244D24FBFE090409140908 +451D:0440FFFE044008442F7828422F3EF40008201FC003100C083FFC010415102208 +451E:0820FFFE0A2001007FFC020044442F88111022484FE400200100FFFE01000100 +451F:0440FFFE044000200C4070FC13081090FC6030903B3E544255A4901810601380 +4520:04400440FFFE044010201124FCA8102031FC390455FC910411FC110411141108 +4521:04400440FFFE044008001FE020207FF8A1083FF821083FF80000248822444244 +4522:0820FFFE0820145022880820145022881FF00000FFFE10001FF8000800500020 +4523:0820FFFE082003043C2404247FA416242504440C11001FF82100FFFE01000100 +4524:08200820FFFE0820000013FE20207C4045FC450445047DFC450445047DFC4504 +4525:0820FFFE082001003FF00110FFFC01103FF0092025482FE82388254829284108 +4526:04400440FFFE0440110011FC1200FDF83148392857FE5148922813FC10501020 +4527:0820FFFE082003043C2404247FA416242504440C01007FFC05401930E10E0100 +4528:0820FFFE08201050104824FE45907A9010FC2490449078FC0890109020FEC080 +4529:04400440FFFE044008200820FFBE08447FA449247F281C282A10492888440882 +452A:0820FFFE082001007FFC01002928111029280100292811102AA804401830E00E +452B:04400440FFFE044000207C2007FE182051FC5D24512C50705CA87124C2220020 +452C:0820FFFE082000003FF821083FF821083FF804403FF80440FFFE082010102008 +452D:0820FFFE09207FFC41041490142823E800003FF821083FF821083FF821082118 +452E:08200820FFFE0820220C2270FF4022403E40227E3E482248FF48224841488088 +452F:0820FFFE082000107F10141014FE7F105510557C574461447F4441447F7C4144 +4530:0820FFFE09207FFC40043FF800001FF010101FF000003FF821083FF821083FF8 +4531:08200820FFFE082011F81108FDF8100013FC11081DF8F10811F8110E57F82008 +4532:08200820FFFE082000907EA00444282817D02008DFF610101FF0082004407FFC +4533:04400440FFFE044010281E2432FE4A20A450185010882106C000248822444244 +4534:0440FFFE044008002A003E7C49447F4400443E2800287F1008102A2849441882 +4535:0820FFFE082000007C7C44447C7C44447D7C41045FF44384454449245124410C +4536:0820FFFE0820000011FC1104FDFC110415FC180037FED020113C112052A0247E +4537:0820FFFE08200000FEFE10107C7C1010FEFE010006C01A30E10E1FE000400080 +4538:0440FFFE04400120FFFE02800C603018C00610281424FEFE1020285044888106 +4539:0820FFFE0820010878904BFC48805144566848B049284E6868A4512246A04040 +453A:0440FFFE04407BFC488049F8522055FC480049F8490869F8510841F841084118 +453B:0820FFFE08201040FE4000807CFE45087E8800887C500850FE20105050882306 +453C:0820FFFE082000007EFC122452A49324264C409008502E5C28502E50F1FE0000 +453D:0820FFFE082023F8120813F8820843F8510013FC2444EAA4220423F420142008 +453E:0820FFFE082023F8220823F8FA0823F8290033FC6444AAA4220423F4A0144008 +453F:0820FFFE08200440FFFE04403FF82848303827C820083FF80020FFFE08200460 +4540:04400440FFFE044008207F20083E3E4200943E1000107F1008282A2849441882 +4541:0820FFFE082004407C7C04403C7804407C7C05400100FFFE05401930E10E0100 +4542:0820FFFE082000802110120817FC000473F8120813F810C411A812902C8847FE +4543:0820FFFE0820004078A049104BF8550651F0490049F049006FFC5100421043F8 +4544:0820FFFE082000001FC000447D88055009203518C2061FF000003FF82448FFFE +4545:0820FFFE08200080112C1124FDAC252425FC482029F810882850442080D80306 +4546:0440FFFE044020A021102208F5F62000678474A4AFA4A4A427A4248424942588 +4547:0820FFFE092000803FFC208021002FF828882FF829082FF84254445C9842603E +4548:0820FFFE0820004809484BFE49487978090009FEF8204BFE487048A88B260820 +4549:0820FFFE08203FF824483FF801003FF80100FFFE04403FF80100FFFE01000100 +454A:0820FFFE0920FFFE00003FF8200827C824483FF810101FF010101FF00000FFFE +454B:0820FFFE08201040102013FE12207EFC122413FE12241EFCE22004FC048408FC +454C:0820FFFE082000000CA0709011FE1120FB2031FC392055FC5120912011FE1100 +454D:0820FFFE0A200100FFFE04881A70EC1808063FF824482FE8345827C820282010 +454E:08200820FFFE082001FC7C0044F844887CF8440045FC7D2445FC45247DFC4504 +454F:0440FFFE0440101008203FF801007FFC02403C500848FFFE08507E240854198C +4550:08200820FFFE082021FC1000FCF8088810F8380055FC952411FC112411FC1104 +4551:0440FFFE0440001C11E0104425247C880820102025FC7C4800C8543054688184 +4552:0820FFFE0920FFFE01003FF800001FF010101FF00820FFFE10007EF8228846F8 +4553:0820FFFE0A2001007FFE50829EFC22885450282017D82006DFF0010011102308 +4554:0820FFFE08202100411C828014402BBE7108A7C821082948250821C82E282410 +4555:0820FFFE082011F8090809F8410823FC2A940BFC100073F81090106011981606 +4556:0820FFFE0820400C2F70211002240278E3122E7E221022542A92243050008FFE +4557:0820FFFE0A201FF010101FF010101FF000003FF821083FF82108FFFE08201020 +4558:0440FFFE0440100013FC284045F8930809F8FD0805F8090851F8200010900108 +4559:0440FFFE044008207F280824FFFE12203FA46424BFA824183F92242A3FC62082 +455A:0820FFFE08203FFC208027F0249027F020803FFC241027F0241027F022203FFC +455B:0440FFFE044020201020FDFC002078A800A878A801747A224850488879044A02 +455C:0820FFFE08207CF824481428244801007FFC0820145022880100FFFE01000100 +455D:0820FFFE0820001E0DE07044112410A8FDFC312439FC552453FE910411141108 +455E:0820FFFE08207C7C44447C7C44447D7C47C4444447C4444447D444A44544462C +455F:0820FFFE082000002FEC48244BA4682C4BA46AAC4BA44824FFFE101020084004 +4560:0820FFFE082000803FFE20202F2831102A0A277C294A378428784F484130874C +4561:0820FFFE08207C7C44447C7C44447C7C47C4444447C440044FE448244FE4400C +4562:08200820FFFE082000887C5013FE102021FC3C4067FEA480257C26103C1025FE +4563:0820FFFE082023F8120803F8FA080BF811002BFC7444AAA42A0423F420142008 +4564:0820FFFE08207700557C774400487F5049487F4449447F540848FFC008400840 +4565:0440FFFE0440111025484924BFFA210835582928355821083558292835582118 +4566:0820FFFE082001007FFC10001FF808200FE079384FA87AA84AB8792A4AAA9C46 +4567:0440FFFE04403E2022103AFE2A007F2841443E8222283E2822103E2822442682 +4568:0440FFFE044001243CA825FC24403DFE248825443E8A24F0242445FC54A88964 +4569:0440FFFE04401000102013FE7850128A31FC3A8A54F8508890F8112412221060 +456A:04400440FFFE044023F812A893F8404043F8104027FCE11023F8204027FC2040 +456B:0820FFFE08A0111E13D25A5E53D05A52E3CE120827E44822144003801C70E00E +456C:0820FFFE082003FEF80009FC0924F9FC812487FEF80009FC092409FC512427FE +456D:0440FFFE0440101010547C581090FE280044549292547C5810901C28E0444182 +456E:0440FFFE0440110011FC7E441154FEE4444429F47C4410E4FF54104410541008 +456F:0820FFFE08200000FE1C28E8FEA8AAA8FEA800A87CA800A4FEA4554A92783008 +4570:0440FFFE0440101C13E0152454A85BFE5124920211FC112429FC252445FC8104 +4571:0820FFFE082000007DFE002000FC7E8442FC42847EFC428424FC0F00F0484084 +4572:0820FFFE08A03FFE20402FFE240425F4251427FC200027FC20004FFE424884C4 +4573:0820FFFE08200000F7FC124817FCFC4686EC8554F6EC155416EC144454542408 +4574:0440FFFE044000A00C9071FE112013FCFD2031FC392055FE500092A412521452 +4575:0440FFFE0450102010FCFE8410FC10847CFC008000FE7C8044FE44027D524406 +4576:0440FFFE0440209010FEFD9002FC789000FC789000FC788049FC488878704B8E +4577:0820FFFE092000803FFE24103F7C26382D543492212027C021104FF844A48990 +4578:0440FFFE04407F1049106BFE5D107F10087C7F0008000F7CF0440044557C5544 +4579:0440FFFE044020101048FE4044FE4590AA9010FCFE9010FC5490529092FE3080 +457A:0820FFFE0820244814507FFC082004407FFC0100FFFE22003E7C23A47E180266 +457B:0440FFFE04403F7E12241B3412A43FFC22403FF822483FF828442F7848428F3E +457C:0820FFFE08204450FE4844FE7D901290FEFE9290FE9010FEFE90289044FE8280 +457D:0820FFFE082001FC7D5445FC44807DFC124411F45D5451F450445DF4E0140008 +457E:0820FFFE082000001E7812483FFC20202E20223C3FC829282F2849905F288144 +457F:0440FFFE04504420FEFC44847CFC1084FEFC9280FEFE1080FEFE280245528206 +4580:0820FFFE08203C782448FFFE02001FF0149012501FF0082010107C7C44447C7C +4581:2810FEFE284400287CFE54007C7C54447C7C1044FE7C9210920ABAAA8AA4851C +4582:0820FFFE29284FD2F03C23884812FBBE0280ABAA00F03F000100FFFE01000300 +4583:0820FFFE0A207FFC08001FF068100FF04444FEFE5454FEFE20207C7CC4C47D7C +4584:0820FFFE08204450FE4844FE7D9010FCFE9092FCFE901090FEFE288044488224 +4585:0820FFFE08203FF801007FFE492284143BB82AA83BB800007FFC11102928FFFE +4586:0440FFFE04400020FBFE2154F9DCA888A9FCD88889FC8888FBFE898AFEA488C2 +4587:0820FFFE2A28F3BC2508739CAD6A27C80000FFFE950A6B7055047F3824823FBC +4588:010001F801003FFE210221F02F0420FC2000241824E027042404440443FC8000 +4589:010001F801003FFE210221F02F0420FC200023F8204020402FFE404041408080 +458A:0020043E042085FE4522293829E01122111E2900297845484548824A024A0486 +458B:0410079004103F90249027103C102490239020282F282928296449A491242042 +458C:0404078404043FD4245427143C5423D420142F14291429044944498491142008 +458D:010001F801003FFE210221F02F0420FC210021FC2210251028A0404041B0860C +458E:00407840487C504053FC624452704BC04A444A3C6A0052F0449044924912520E +458F:010001F801003FFE210221F02F0422FC220027F82D48334822E8449E49088218 +4590:04100E1E301020FE2092209C3EF02492248E248024B824A824A8452A452A8246 +4591:08000F00087C7F4449444E44787C4944474440444E7C4A444A02520291FE2000 +4592:010001F801003FFE210221F02F0420FC20002FF8200027F0241047F042209FFC +4593:1010101E921092FE9292929CFEF01092108E928092B892A89EA8F32A012A0246 +4594:1020103E10207DFE1122113811E0FD22111E110021784948FD48464A024A0486 +4595:08000F0008787F4849484E7878484948477840484E484AFC4A02520291FE2000 +4596:08000F00087C7F5449544E7C78544954477C40104E104A104A12520291FE2000 +4597:01FC01003FFE210221F02F0420FC20282FFE28202BA428282BAC2A944BAC9044 +4598:10401E4010787E8853105CFC70A452A44EFC40205C505458545456929492210E +4599:3F9024183F1421123F10247C3F8020802FFC288428F02F84287C49E04924921C +459A:10201E4010FC7E8452845CFC708052FE4E8040FE5C0254AA54AA560294142008 +459B:08100F10087C7F1049FE4EA278444978471440FE4E104A544AB2520291FE2000 +459C:1E3C10207EFE52A25CB872E44E9C40805CB8952A23465FF010101FF010101FF0 +459D:0008007C07807900010001003FF82108210821083FF82100011001F87F042004 +459E:0808080808087F0849FE4908490849087F48482808280A080F08F10840280010 +459F:02000100FFFE100010001FF8000001001FF0111011101FF0110001087FFC2004 +45A0:100011F011107D1055105510559055507D505110111015121D12E612420E0400 +45A1:100011F810487C4854485448544855F87C885088108814881C88E48843FE0000 +45A2:1020102010207CA854A454A2552255207E245024102814081E10E22040C00300 +45A3:1008101C11F07D5055505550555055507D505148114815481D44E64442420400 +45A4:100010F83E884288A4A818941084207CC1001FF0111011101FF001087FFC2004 +45A5:1FF0022001407FFC048418886280010001001FF0111011101FF001087FFC2004 +45A6:1020102011247D245524552455FC54207C205124112415241D24E52441FC0004 +45A7:1000100010FC7C845484548454FC54847C84508410FC14841E00E20041FE0000 +45A8:1000100011FE7C2054205440544054FC7C845184128414841E84E28440FC0084 +45A9:1040102010287C0854085448545455527D525160126014441CC4E544423C0000 +45AA:088008882E9028A028C028842E84F07C01001FF0111011101FF001087FFC2004 +45AB:1010105010507C885488550456FA54207C20502011FC14201E20E22040200020 +45AC:100011FC11247D24552455FC552455247D2451FC112414201C20E42040200020 +45AD:1110091009207FFC0200FFFE08203018C1061FF0111011101FF001087FFC2004 +45AE:1020102010407DFC55045504557455547D545154115415741D04E50441140108 +45AF:01003FF80100FFFE01003FF80100FFFE000001003FF821083FF801087FFC0004 +45B0:1004101E11E07D0055065578555055507D52115415481D48E544425402620440 +45B1:100011FE11007D0055FE55105510557C7D105110111015FE1D00E50041FE0000 +45B2:1080108011FC7D04560455E4552455247DE45124112415E41D04E40440280010 +45B3:1020101011FE7D025400541C54E054207C20503E11E014201E22E222401E0000 +45B4:1050105010507D5254D45458545054587CD45152105014501E92E2924112020E +45B5:1020102010207DFC55245524552455247DFC5124102014281C24E5FE40820000 +45B6:100013FE10407C8055445624546854B07D305228106814A41D22E62040A00040 +45B7:218420682030F8C8AB04A840ABFEA8A0F920A3FC252429243934E92840200020 +45B8:02403C500848FFFE08480E5078240854198C01003FF821083FF801087FFC0004 +45B9:208820882088FB8EA888A888A800A9FCF820A02023FE28203820E82040200020 +45BA:1080108011F821082A906C60A9982E4628402BF82A482A482BF8204427FC2004 +45BB:1020101011FE7C205448548455FE54027CA850A810A814A81EA8E2AA412A0206 +45BC:21002100211EFB92A912A912A912AFD2F912A112221A2A943FD0EA5040100010 +45BD:03083C0804487F480C4816482508442805101FF0111011101FF001087FFC2004 +45BE:1020101011FE7D02560454F8540054007DFE5050105014501E92E292410E0200 +45BF:0C8070FC1124FD241224384454849128101001003FF821083FF801087FFC0004 +45C0:2020202021FCF820A820ABFEA888A944FA42A0F821882A503820E85041880606 +45C1:1020102011FC7C505488550457FE54087DE85128112815E81D28E40840280010 +45C2:10201020103C7C2055FC5524553055E07D24511C110015701D50E5524292050E +45C3:10481044105E7DE054285412546A55967C48505E11E014241E28E212406A0186 +45C4:1050108811547C2054D85706540854F07C80508010FC14901C90E51042100010 +45C5:100010FC10807CF8548054F8548057FE7D405124112815101D08E54441820100 +45C6:1020101011FE7D02560454F8548854887CF85080108014FC1E84E28440FC0084 +45C7:1080108010FE7D02562254AA547254227DFE5022107214AA1D22E422400A0004 +45C8:1040102013FE7C805480548054FC54007CFC508410FC14841EFCE28440FC0084 +45C9:10F8108810887CF85488548854F854007DFC5104110415FC1D04E50441FC0104 +45CA:102010A210A27D2454505488570454227C2050A410A415281C50E48841040202 +45CB:1088108813FE7C88548854F8548854887CF8502013FE14701CA8E52442220020 +45CC:100011FC11047DFC550455FC542055207DFE5220102015FC1C20E42043FE0000 +45CD:0FE010201FC00040FFFE0C1073200DC072B00C8EF3003FF821083FF801047FFE +45CE:100013FE10507C5055FC5554555455547DFC5020102015FC1C20E42043FE0000 +45CF:1040102011FE7D2254A45528545054887D0450F8108814881E50E22040D80306 +45D0:1040FEFE21203CAC24F427A444AC54A2887E01003FF821083FF801087FFC0004 +45D1:100010FC10847CFC548454FC548454207C1051FE100014841E48E20041FE0000 +45D2:210820902000FBFCA890A890A892AC92FA94A298209028903890E89047FE0000 +45D3:2080208020FCF954AAD4A8B4A92CAA44F894A108204028A43AAAEA8A44780000 +45D4:108010BC10847D0855FE57205520557C7D90511011FE15101D28E52841440182 +45D5:01007FFC50043EF84288A2AA1492187EE1001FF0111011101FF001087FFC2004 +45D6:20A820A823FEF8A8A8A8A800ABFEAA22F820A1FC212429243934E92840200020 +45D7:2210221023DEFD28A884A800ABFCA890F890A09027FE28903890E91042100410 +45D8:1020102010FC7C20542055FE544054847DFE500211FC15541D54E55443FE0000 +45D9:01007FFE44429FF404403FF80440FFFE082011102FE8C9260FE001103FF81008 +45DA:1028102413FE7C2055FC552455FC55247DFC5124100817FE1C88E44840480018 +45DB:2120213C2144FAA8AA10AEA8AAC6AABCFAA4A2BC22A42ABC3A24EA244224022C +45DC:204023BE2212FA92AA52AAAAAB24A840FBFEA22222222BFE3A22EA2243FE0202 +45DD:20201020FDFC092411FC392455FC9020102001003FF821083FF801087FFC0004 +45DE:00003FF80100FFFE02800C603018C00610207EFC52A47EFC10201424FEFE0202 +45DF:7F7848485F4C64805F7844484A4851307F4C01003FF821083FF801087FFC0004 +45E0:20401040FEFE21003DFE242224A044BC55608A3E01003FF821083FF801047FFE +45E1:200023FE2020F93CA920AFFEA880A8FEF900A1FE20022AAA3AAAEC0240140008 +45E2:1010105012507D7C5490541054FE57007D7C51441144157C1D44E50042FE0400 +45E3:08200820FFFE08200FE008200FE0000010207EFC52A47EFC10201424FEFE0202 +45E4:101011FE11107D7C551455FE5514557C7D10117C15541D7CE554427C0254044C +45E5:212421242224FC24A954A94AAA92AE10FA10A250225C2A503A50EAB0429E0300 +45E6:2020247C2284F948A830A8CEAE10AA7CFA10A27C22102AFE3A10EA1045FE0800 +45E7:1020101011FE7D10557C551455FE55147D7C111015921D54E538425402920430 +45E8:1040104010F87D08561055FC552455247DFC5124112415FC1C00E554412A022A +45E9:200C200A2008FBFEAA08AA48AA6AAA4AFBFAA24C224C2AEC3B5AEC4A44D60822 +45EA:00803FFE222022203FFC222023E020002A48312420802FF848884FF880841FFE +45EB:1020101011FE7D485548554855FE55487D4851EC115A15681D48E54842480048 +45EC:210013F0151000E0775C11F0104013FC284047FE01003FF821083FF801047FFE +45ED:2020202021FCF924A9FCA820ABFEAA22FBFEA020204028243AA2EA8A44780000 +45EE:2020202023FEF820AAAAA924AAAAA820FAAAA12422AA28503850E88841040602 +45EF:20282224217EF9C8A948A87EAB48A948F97EA1482148297E3940EA80447E0000 +45F0:200021FC2124FBFEA924A9FCA800A9FCF904A1FC210429FC3904E9FC40880104 +45F1:205022522154F850ABFEA888A850ABFEF820A1FC20202BFE3850E88841040602 +45F2:2020212420A8FBFEA8A8A924AA22A904F904A1DE22442D54389EE90442040404 +45F3:201023D22054F948A88AA904AAFAAC00F9FCA104210429FC3904E88847FE0000 +45F4:2110211021DEFAA8AC44A806ABB8A888F908A3BE20882A88393EEAC0443E0000 +45F5:100013FE10007DFC552455FC552457FE7C0051FC112415FC1D24E5FC400003FE +45F6:108813FE10887DFC550455FC550455FC7C8051FE122215521D02E5FA400A0004 +45F7:1040102011FC7C88545057FE540055FC7D0451FC110415FC1C20E694428A047A +45F8:0100FFFE104824FE799010FC22907CFC089030FEC1803FF821083FF801047FFE +45F9:2108209023FEF908A908AA52AB9CA908FA52A3DE204028A43AAAEA8A44780000 +45FA:00187BE0104022787A400A402BFC10002FFE400010207CF854A87CF81224FEFC +45FB:2108210821EEFA94A842A800ABDEAA52FBD2A25223D22A1A3A94EB5042100010 +45FC:201C21E02020FBFEA820A9FCA9ACA974F9FCA02021FC28203BFEE8004154022A +45FD:10A0209045FE792013FC25207DFC012055FE81003FF821083FF801087FFC0004 +45FE:200023FE2202FBFEAA02ABFEA908AA52FB9CA10822522BDE3800EAA442520452 +45FF:2040202023FEFA22A954A94AAA3AA800F9FCA15423FE280039FCE82040A00040 +4600:08003FF020103FF020003FF820083FF80100FFFE11207CF854A87CF81224FEFC +4601:08287F240820FFFE12203FA46424BF2824123FAA01463FF821083FF801047FFE +4602:2088208C23EAF888A888ABFEA948AB6AF94AA36A214C2B6C394AE96A47960022 +4603:21FC212421ACF924A9FCA820A9FCA820FBFEA154222A282039FCE82043FE0000 +4604:01081FD001207FFC02000FF03810CFF008100FF010207CF854A87CF81224FEFC +4605:20444258FF6201427E3E42007E4C42727E42423E10207CF854A87CF81224FEFC +4606:102013FE12227DFC542054F8542055FC7C2011FC15541DFCE44042A4028A047A +4607:01007FFC082007C01930EFEE09200FE001103FF810207CF854A87CF81224FEFC +4608:2FE829482BE8F95EA80AABEAAAAAABEAFAAAABEA288A2BEA3AAAEBEA4A2A1276 +4609:3FF801007FFC04401930EFEE09200FE001103FF810207CF854A87CF81224FEFC +460A:221023DE2528F884ABFCAA94AA94ABFCF828A3FE22202B243AA8EA92442A08C6 +460B:2148214C22AAF808ABFEA948AB68A94AFB6AA14A236C294C396AEB8A40160022 +460C:3FFC24202FF825203FFC220027F02A1033F03FFC10207CF854A87CF81224FEFC +460D:0820FFFE08201FF011101FF011107FFC41245FEC10207CF854A87CF81224FEFC +460E:244428E82E0EFCE4AA0AAEEEA8A0AAEAF800A3F820082BF83A00EBFC40040038 +460F:0800083E10227F245524552855245524552255225522553457A8FC2000200020 +4610:0800080010787F2855285528556C556A55AA552A5528552857C8FC4800980100 +4611:0830080810007F705510551A55DA555C55585558555455545794FC1200500020 +4612:0810081010207F4455FE5528554455A2553C5544554455A85790FC2800440082 +4613:08100810101E7F225524554055105566554255425566554257C2FC42007E0042 +4614:08200810107E7F425510551C552455545508553655C0553C57A4FC24003C0024 +4615:12001100211C4FC08000100023BE6288A2882288228822A824C8248828282010 +4616:10001200221C43C085001100213E6FC8A10821082548254825C8264820282010 +4617:11001540254E47C0800017C0221E6444A784210422442FE42104254429342308 +4618:21002FE0410E47C081001FE0221E6444A784210422442FE42104254429342308 +4619:110017C0224E4FE0800017C0245E67C4A10423C4250427E4210427C425542548 +461A:02000100FFFE05000C883450C530060E040001000100FFFE0100010001000100 +461B:200011F00110FD100910111011103510591095101510111211121212120E1400 +461C:202010200020FC2009FC11241124352459249524152411341128102010201020 +461D:205010480048FC40087C13C010403440584094201420102010141014100C1004 +461E:200013F80008FC0809081108110835FE58029402140213FA1002100210141008 +461F:200011FC0024FC24082411FC11203520592095FE14221022102A102410201020 +4620:204010400040FC4009FE10401040348458A494A4152811281210142810441182 +4621:2080208820B03EC020842684387C22000100FFFE05000C883450C530060E0400 +4622:204010200020F9FE090212041000340059FE9420142010201020102010A01040 +4623:209010900090F290129222D422986A90B2902A902290229223D22E12240E2000 +4624:204010500048F8400BFC104014E038E055509150124814441842104010401040 +4625:200011FC0124FD24092411FC11243524592495FC152410201020102010201020 +4626:200011FC0104FD04090411FC11003540594495481570114011421242123E1400 +4627:202010200020FDFC0924112411243524592497FE142010501050108811041202 +4628:204010200020FBFE0800108815043A0254889088105010501020105010881306 +4629:2080108001FCFD040A0411E41124352459E49524152411E41104100410281010 +462A:204010200020FBFE0840108815043BFE549290901090109011121112120E1400 +462B:080008007F7C114421441A440C7C32000100FFFE05000C883450C530060E0400 +462C:202810240024F8200BFE102011243524592497A8152811101212122A14461082 +462D:200011FE0020FC200848108411FE34225820942015FC10201020102013FE1000 +462E:010001007FFC11101110292845440100FFFE1200111010A010401430180E1000 +462F:2020112400A4FCA8082011FC1104350459FC9504150411FC1104110411141108 +4630:2004100E03B8F08810882128212E6BA8B0A82AA822A8213E21002280247E2800 +4631:0100FFFE0820111022880C603018DFF6101010101FF004880C503530C60E0400 +4632:200011FC0004F8FC080411FC100033FE560299F8148810881050102010D81306 +4633:202010200050FC880904120210F83420582095FC1420112410A410A813FE1000 +4634:220812280228F2281FA4224422546E92B7102AA02A203228224422FC22442200 +4635:200011FC0004F80409FC100414043BFE54209222117410A81124122210A01040 +4636:200011FC0008F010122222AA22726A22B2722AAA232622A22242220223FE2002 +4637:2020112400A4FCA8082011FC11243524597495AC152411241124110411141108 +4638:2080104007FEF1201120223C22446E64B2942B48224822302220225022882306 +4639:2040102003FEF8000888108815543A225400902013FE10201020102010201020 +463A:2040102003FEF2021404200023FE6820B0202920213C212022A02260243E2800 +463B:2040102003FEF880090413FE100235FC590495FC150411FC1104110411141108 +463C:2040102003FEF2021504210021DE6A52B2522B52249A2094211021122212240E +463D:20001040039CFA040A04139C120436045BFC949014901090109011121212140E +463E:2040102003FEFA020C0411F81108350859F89500150011FC1104110411FC1104 +463F:200013FE0202F20213FE221022926A92B2922AFE221022922292249224FE2802 +4640:200013DE0252F252125223DE22526A52B2522BDE2252225222522252255228A6 +4641:20481044005EFDE008281012106A35965848945E15E0102410281012106A1186 +4642:209010900108F1481244249221086BFCB044282020A42282228A228A24782000 +4643:2040104003FEF88009FC122015FE300055FC990415FC110411FC110411141108 +4644:2008103C01E0F820082013FE102034A0592C9524152411AC1124112411FC1104 +4645:200013FE0050F8500BFE125216523BFE5400904017FE10881190106010D81304 +4646:201013D40058FA52098C108815043AFA5420902011FE10201050108811041202 +4647:200013FE0020FC4009FC1154115435545954952C142013FE1050108811041202 +4648:210011780108F20812FE26402A406A7CB2902A1022FE22102228222822442282 +4649:2008101C01F0FD10091011FE1110357C5944957C1544117C11441244127C1444 +464A:20A810A803FEF8A808A8100013FE3622582095FC152411241134112810201020 +464B:2040102003FEFA020C0411FC100035FC590495FC150411FC1104100013FE1000 +464C:2020102001FCF92409FC102013FE340059FC9504152411241124105010881304 +464D:200013FA000CF84A0B88112A112635225BF8952A152C112A1128122A12261422 +464E:201E13E00122FC940840108811F0342058C495FE1422102013FE105010881306 +464F:2028102403FEF82009FC112411FC352459FC9524140813FE1088104810481018 +4650:200013FE0000F9FC0904110415FC380057FE928A125213FE12221222122A1204 +4651:2080104007FEF00013F822082FFE6A08B3F828A4212823102510294821862100 +4652:2040102003FEF840088811F01020344459FE940215FC112411FC112411FC1104 +4653:200013FE0252FA520BFE1020142039FC5420902017FE10401088110413FE1102 +4654:200013FE0200FA7C0A441244167C3A0056EE92AA12AA12AA12EE120013FE1000 +4655:212411240224F4A41154214A23926D08B1082928212E212821282158214E2180 +4656:202012220222F3FE100023DE22526A52B3DE2A52225223DE22522252255A28A4 +4657:2040102003FEF888085013FE16223AFA562292FA128A128A12FA1202120A1204 +4658:201410120010F7FE1410249024D26C92B7F22C94249425C82AAA289A31A62042 +4659:200013FE0202F3FE1210225422386A54B2822A50227C2290221025FE24102810 +465A:02001FF010101FF010101FFC10001FFC0004492C0200FFFE06801C48E530060E +465B:2040102003FEF88809241242109035F85808944414A81190128814A410C21080 +465C:2020147C0284F148103020CE26106A7CB2102A7C221022FE2210221025FE2800 +465D:0100FFFE08207E2008F8FF2814287F6A082AFF560B8204880C503530C60E0400 +465E:202017A400A8F2921114220825F46802B3F82A08220823F8220821102FFE2000 +465F:200017FC0444F5F4149427FC24046DF4B5142DF4244424F4254425FC244427FC +4660:200017FE0400F628154827EE24926C84B6A02EA827E824882494251429243242 +4661:202011FC0124F9FC082013FE100035FC590495FC150411FC110411FC10881104 +4662:210410880000FBFE0A2212AA1272322257FE980015FC110411FC110411FC1104 +4663:200011FC0040FBFE088811041652305057DE985015DC105013DE105010501050 +4664:2000127C0144F1741054205426FE6A82B2BA2AAA22BA2282228A2284250028FE +4665:200011FC0020FBFE0A2211AC142039AC545090C8132610F8100810D010201010 +4666:208813FE0088F9FC0954115415FC380057FE924210F810881148103010601380 +4667:201C11E00020FBFE082011FC11AC357459FC942015FC102013FE10001154122A +4668:21FC112401FCF92409FC102013FE34A859249642142013FE10601194168810C6 +4669:208813FE0088FBFE0A0211FC14003BFE544090A2135410B81354109213501020 +466A:22882108FABE2008729CA92A2288FFFE0A203118CFE6028804501C2065180606 +466B:209413980092FD8E0A8011FC112435FC592495FC148811FC108813FE10881104 +466C:23DE125203DEFA520BDE125217DE398C5652904017FE10881190106010D81304 +466D:204017FE0492F3FC109023FC20906FFEB1082BFC250A21F82240227C254028FE +466E:208813FE0088FBDE0A5213DE14A0389055FE912013FC152011FC112011FE1100 +466F:201417FE0490F4D4149427FA25AA6A96B1A22BF8220823F82040227C254028FE +4670:220C110A07C8F29E155426F4245E6FD4B1142FDE2554255425D4245E25502490 +4671:23FE120203FEFA920A54129216FE3AAA56FE932212FA12AA12FA122215FA1004 +4672:00007FFC044004403FF8244824483FF801000100FFFE0280044008203018C006 +4673:00007FFC044004403FF8244824483FF801001110111022A0044008203018C006 +4674:7FFC04403FF8244824483FF80200FFFE08201FF02828C8260FE00808080807F8 +4675:00007FFC04403FF8244824483FF801003FF80100FFFE000001003FF80100FFFE +4676:0010FE10281029FE2922FE20AA50AA50AAD2AACCAF48C24482448252FE608240 +4677:1FF010101FF010101FF010101FF004421842E03E0020FFFE0820042004A00040 +4678:00087E08420842FE7E08420842887E48424842087E0824282412240243FE8000 +4679:00007EFC2484248424FC24842484FFFC2484248424FC2450245024924492850E +467A:100011FC1104110455FC5904510491FC1104110411FC2850245044924112820E +467B:0800087C0B447C44487C484448447F7C09441944297C49288B28084A084A0886 +467C:00007EFC1284128422FC2A84448480FC3E84228422FC225022503E922292010E +467D:01000100FFFE0280244818303FF8D0161FF010101FF010101FF004421842E03E +467E:200010FC1084FE8482FC0484408440FC7C84408440FC40504C5070924092010E +467F:100010FC10847C8410FC10841084FEFC1084388434FC5250905010921092110E +4680:0800107C3E442244327C2A442A44FE7C224432442A7C2A282228424A4A4A8486 +4681:0800087C10447F44417C41445D44557C55445544557C5D284128414A454A4286 +4682:100010FC10847C8410FC1084FE8428FC28846C84AAFC2850285048924892990E +4683:0800087C0F440844087C7E444244427C7A444A444A7C7A284228424A7E4A4286 +4684:00007E7C02443E44027CFFC40844097C49442A441C7C2A28C928094A284A1086 +4685:0800087C0844FF44087C2A442A442A7C5D4488441C7C2A284928884A084A0886 +4686:2200227C7F4422442A7C08443E442A7C2A442A44FF7C08281428124A224A4086 +4687:1000107C52445144957C08443044C07C7E4442447E7C42287E28424A7E4A4286 +4688:0000FF7C144414447F7C554455447F7C084408447F7C082808280F4AF04A4086 +4689:20002F7CF5442544757C2544F544297C23440844087CFFA81428224A414A8086 +468A:2200147C00447F44007C14442244417C00447F44557C5528552857CAFC4A0086 +468B:00003E7C224422443E7C00447F44417C7F4441447F7C41287F28144A224A4286 +468C:0800107C7F4441447F7C41447F44107CFFC42244497C88A87F68084A084A0886 +468D:0800FF7C08447E44087CFF4400447E7C42447E44427C7E2842287E4A244A4286 +468E:0800087C7F4410443E7C1044FFC4227C414490C4267C22283628224A3E4A2286 +468F:08004A7C2C440844FF7C2A444944887C42447744927C5A282F28224A424A8286 +4690:4000777CA5442544FD7C27445544807C7E444244427C7E284228424A7E4A4286 +4691:0000FEFCAA84AA84FEFC00847C8444FC7C8444847CFC44507C5000922892450E +4692:1000087C7F442244FF7C00447F44497C7F4449447F7C08287F28084A0F4AF086 +4693:0000FEFC2884FE84AAFCFE8400847CFC44847C8444FC7C501050FE921092110E +4694:200010FCFE8482847CFC548498847CFCC4847C8444FC7C5044507C922892450E +4695:7700007C77445544777C554408447F7C54447F44557C7F2855285E4A554A9B86 +4696:0000FEFC1084FE8492FC54840084EEFCAA84EE8400FCFE505450BA921092FF0E +4697:200820487848484890447C8454A455227C20544054407C48548455FE44828C00 +4698:12001380249C490087C01540257E67C8A548254827C8254825482548246828D0 +4699:100010FE3C002400487CBE442A442A7C3E442A442A7C3E442A004A0042FE8600 +469A:101010503C50247C4890BE102A102AFE3E282A282A283E282A4A4A4A42868700 +469B:101010503C50247C4850BE902A102AFE3E002A002A7C3E442A444A44427C8644 +469C:102010403CFE24924892BEFE2A922AA23EFE2A482A883FFE2A084A0842088608 +469D:2040202079FE480090887C88555456227C00542055FE7C205420542044208C20 +469E:2020202078204BFE90207D24552455247EAA547054A87CA85524562244208C20 +469F:100010FC3C8424FC4884BEFC2A002AFE3E082BFE2A083E882A484A0842288610 +46A0:200021FC7904490491FC7D04550455FC7C00551255D47D185510555245928D0E +46A1:200021FC7924492491FC7D24552455FC7C20541054547D425542554A46388C00 +46A2:2048214879484BFE91487D48557855007DFE542057FE7C7054A8552446228C20 +46A3:100010FC3C84248448FCBE842A842AFC3E002BFE2A203EA02ABC4AA04360863E +46A4:1000107C3C542454487CBE542A542A7C3E102AFE2A923E962ABE4A82428A8684 +46A5:100010EE3C22242248EEBE882A882AEE3E222AAA2A663E662AAA4A2242AA8644 +46A6:2008203C79D0491C91107D7C555455587D705554554C7D40567854A8442A8C46 +46A7:200021DC7844495490CC7D54542854447D92542054C87C3254C4541844608D80 +46A8:201221D478484A8A91047E0255DC54547C6255C0551E7DC25454544845548CA2 +46A9:201821E078404BFE90887D74565254707C0055FC55047D745554557445048D0C +46AA:200021FC7954495491FC7C0057FE54007DFC550455FC7C625494558846A48CC2 +46AB:10207E204A7E7EC41028FF1020283EC652001FE020405FF091101FF011102130 +46AC:2020212478A84BFE90A87D24562255087DC8565E55487CA854BE550845088E08 +46AD:208823FE7888480091DC7D5455DC54887DFE569054FC7C9054FC549044FE8C80 +46AE:2000100011FCFE4400487C4800507C5E00427C424482448244827D0245140208 +46AF:100408040804FFA400247F2400247F2400247F244124412441247F0441140008 +46B0:208010801080FE8400887C9000A07CC000807C804480448444847C84447C0000 +46B1:202010201020FE2000207CA800A47CA401227D224622442044207C2044A00040 +46B2:200810081010FE2000407C8800087C1000207C444484440844107C2044C00300 +46B3:202010200020FDFE00207820002079FC00847888484848504820785049880606 +46B4:200010FC1084FE8400847CFC00847C8400847CFC4484448444847C8445140208 +46B5:200810881048FE4800087C8800487C4800087C0E45F8440844087C0844080008 +46B6:2000100011FCFE2000207C2000207DFE00207C204450445044887C8845040202 +46B7:209010900108FD0802047C0203FC7880010079F8480848084808780848500020 +46B8:202010201050FE5000887D0402027C8800887C884488448844887D0845080208 +46B9:201011100110FD120112791401D87910011079104910491249527992490E0000 +46BA:204010401040FE8000FE7D0802887C8800887C504450442044507C8845040202 +46BB:020007F0182062400980060019007FFC00003FF800003FF800003FF820083FF8 +46BC:200011F81048FE4800487C4800487DF800887C884488448844887C8847FE0000 +46BD:2008103C11E0FE2000207C3C01E07C2000207C3E47E0442044227C224422001E +46BE:2008103C11E0FE2000207C2000207DFE00207C204420442044207C2045FC0000 +46BF:204010401040FE7C00847C8801207C2000207C504450445044887C8845040202 +46C0:2008101C01E0FD00010079FC01447944014479284928491049107A284A440482 +46C1:200010FC1084FE8400847DFE00847C8400847DFE4484448444847C8444940088 +46C2:200810680388FC880088788800887BFE0088788848884888490879084A080408 +46C3:2000100011FCFC0000007C0003FE7C9000907C904490449044927D124512020E +46C4:42002200023CFBA402A472A404A474A40AB471285120512252227222541E0800 +46C5:200011FC1124FD2401247DFC01247D2401247DFC4524442044207C2044200020 +46C6:202010201020FE2001FC7D2401247D2401247DFC4524452445247D2445FC0104 +46C7:200010F81088FE8800887C8801067E0000007DFC4504450445047D0445FC0104 +46C8:204010401080FCFC01207E2000207C2001FE7C204450445044887C8845040202 +46C9:200011FC1104FF0401047DFC01207D2001FE7D204520451045127D4A45860102 +46CA:2000100010FCFE8400847C8400847C8400FC7C844400444844447C8444820102 +46CB:202810240024FC2001FE792001247924012479284928491849127A1A4A260442 +46CC:2040104010FCFE8401047EF400947C9400F47C844494448844827C82447E0000 +46CD:209010900090FBFC0094789403FC7A9002907BFE48924892491A79144A100410 +46CE:204010200020FBFE02027C04000078900090789048884908490879044A040402 +46CF:200010FC1084FE8400847CFC00807CA000A27CA444B844A044A27D22451E0200 +46D0:00003FF800087FC800083F8820883FA80110FFFE00003FF800003FF820083FF8 +46D1:200010400020FC280008788800907A9402A27AA24CC2488849887A8844780000 +46D2:00007DFE108010FC1E04F02801107FFC00003FF800003FF800003FF820083FF8 +46D3:0480248024FC24A02510040001007FFC00003FF800003FF800003FF820083FF8 +46D4:200013FE1020FE2000407DFC01547D5401547D544554455445547D4445140108 +46D5:2020102003FEFE2202227BFE02227A2203FE7820492048A0484078A049180606 +46D6:2020102001FCFD24012479FC0124792401FC782048244818483278CA4B060002 +46D7:00407E2049FE480048007EFC4200420042FC7E00480048FC488448847EFC0084 +46D8:20801088009CFD7001107B100510791001FE79104910491049107910497C0100 +46D9:209010900090FD1001FE7B100510793801387954495449924910791049100110 +46DA:08007EF808483E4808887EA809107FFC00003FF800003FF800003FF820083FF8 +46DB:2000100011FCFF0401047D7401547D5401547D544574450445047DFC45040000 +46DC:202010200040FDFC010479040194795401247924495449944904790449FC0104 +46DD:200011FC0024FC2401FC784400447BFE00007820482049244924792449FC0004 +46DE:200011FC1104FDFC01047DFC00007C0001FC7C20442047FE44207C2044200020 +46DF:202010200020FBFE002078200124792401247AAA482048504850788849040202 +46E0:200011FE1000FE0000FC7C8400847C8400FC7C004484444444487C0045FE0000 +46E1:201C13E00220FE2003FE7A2002907B0A020679FA490849084908790849F80108 +46E2:201C11E00020FC2003FE78A801247A22000078F8488848884888788A490A0206 +46E3:2020102001FCFD2401FC792401FC780003FE7880490049FC4804780448280010 +46E4:200010FC1084FE8400847C8400FC7C1000107C90449E449044907CD0453E0200 +46E5:218410680030FCC80304784003FE78A001207BFC4D2449244934792848200020 +46E6:200010501048FE8401247C2000507C8801067EF84488448844887C8844F80088 +46E7:201011101110FD9201547D1001FE7D1001387D544592451045107D1045FE0000 +46E8:2040102011FCFE0000887C5003FE7C2000207C2045FC442044207C2044200020 +46E9:200011FE1048FE4800487DCE01027D0201027DCE4448444844487C4845FE0000 +46EA:2040102003FEFA0200887904020279FC000479FC490049FC4804780448280010 +46EB:200010FC0080FCF8008078F800807BFE01407924492849104908794449820100 +46EC:2080108001FCFD04028478F40144784403FC78444954495449F4780448280010 +46ED:2020102001FCFC2000207BFE0088785001FC782048204BFE4820782048200020 +46EE:2088108810E8FD2C012A7EA800487CA0011E7E0044FC448444847C8444FC0084 +46EF:200011FE0102FD0201FE7910011079FE01107910497E494249427A424A7E0442 +46F0:200011FC1104FF0401FC7D0401047DFC00007D1245D4451845107D524592010E +46F1:2020102001FCFD240124792401FC78200040782048A44A824A8A7A8A44780000 +46F2:2020104001FCFD0401FC790401FC782000207BFE4A224A224A2A7A2448200020 +46F3:2020102003FEFC5000887924022279FC012479FC492449FC48227822481E0000 +46F4:2020102001FCFC500088790403FE780801E87928492849E84928780848280010 +46F5:201C13E00044F92400A8789003FE7A02000079FC488448884850782048D80306 +46F6:2020102003FEFC2001FC782003FE7820000078204BFE487048A879244A220020 +46F7:2040102003FEFA020504790001DE7A5202527B524C9A4894491079124A12040E +46F8:2020101001FEFD0001107910011E79100110797E4942494249427A424A7E0442 +46F9:208010FC0104FDF800087BFE004078A20334785848944B34485278904B500020 +46FA:21FC11240124FDFC0124792401FC7850008879044A8A48884888788849080208 +46FB:2008101C01F0FD10011079FE0110797C0144797C4944497C49447A44427C0444 +46FC:2040119C0104FD0401DC7904010479FC0000780049FC4820482078204BFE0000 +46FD:2008103C01E0FC2000207BFE002078A0012C7924492449AC4924792449FC0104 +46FE:2020102003FEFC2001FC782003FE7840008879F048244BFE482279244AA20040 +46FF:200013FE0000FDFC0104790401FC780003FE7A8A4A524BFE4A227A224A2A0204 +4700:400023DE014AF94A035A756A014A72D6002070205120513C5120712057FE0000 +4701:202011FC0220FBFE02007A2003FC7A2003FE7A004BE048204BFE785048880306 +4702:2020104001FCFD0401FC790401FC784003FE788849244A224DFC782048200020 +4703:20501048FEFE00907DFE00907CFE00907C9044FE7C8001003FF80100FFFE0000 +4704:200011FE0102FDFE011079540138795401827950497C499049107AFE4A100410 +4705:2020122203FEFC90008879FE03107D1001FE7910491049FE4910791049FE0100 +4706:00803FFE24103F7C26382D5434923FFC20002FF820002FF820004FF848088FF8 +4707:2040102003FEFC8801247A42009079F80008784448A849904A887CA448C20080 +4708:212412480124FC0001FC792401FC792401FC78204BFE487048A8792446220020 +4709:2020102003FEFC7000AC7B220050788801247A22492448A849247A2248A00040 +470A:2090109007FEF89003FC7A9403FC7A9403FC780049F8490849F8790849F80108 +470B:202011FC0124FDFC00207BFE000079FC010479FC490449FC490479FC48880104 +470C:1204110420082B8A4812F3BC100423884812FBBE0A820280AAAAABAA82A20000 +470D:2020102001FCFC200154788801047AFA008878F8488848F8482078A849240060 +470E:208812AA02DCFC8801547A2200007BFE02427C444BFC48444844788449140208 +470F:4020272005FEFD40057C7690057E7500057C7544557C5644547C74445444044C +4710:00407BFC488051F84A204DFC688852F84188FFFE00003FF800003FF820083FF8 +4711:200013FE0050FDDC0104790401DC785000507BFE4840482048A47A8A4A8A0478 +4712:2040108003FEFE2202AA7A2203FE7A7202AA7A0248204BFE4850788849040602 +4713:208813FE0088FC0001487BFE01487978010079FC48204BFE487078A84B260020 +4714:202010FE0240FD7C0090797E00007B7C0144797C4944497C4944794C4A80047E +4715:2088108803FEFC8801FC792401FC792401FC78204BFE4A224A2A7AFA4A0A0206 +4716:200013FE0050FBFE02527BFE000079FC010479FC490449FC490479FC48880104 +4717:4014201207FEF41005D0741405D4755805CA74165442582452A2728A54780000 +4718:4288228807E8FA90041E77E40454785407547554555457485548705452940122 +4719:200013FE0202FBFE02027BFE01087A52039C79084A524BDE48007AA44A520452 +471A:440022FE02AAF8AA00FE70100E54729202107254529252105210750058FE0000 +471B:208011F80210FDFC012479FC00927B0E008079F84A1049FC492479FC4892030E +471C:2040107C0040FBFE020279FC00A87954028879FC4A8A48F8488878F8488800F8 +471D:2044128402EAFE4E02A47AEE02227BFE02447A844AEA4A4E4AA47AEE4A2203FE +471E:4040202003FEF888005277AC02AA72A805AC7000510451FC510471FC51040204 +471F:2088108C03EAF88800887BFE01487B6A014A7B6A494C4B6C494A796A4B960022 +4720:2042139C0210FBDE02947A9404207BFC02047BFC4A044BFC4A047BFC49080204 +4721:43FC204001F8F90801F8710807FE744202A4728A547A508051F872885070038E +4722:202013FE0222FDFC002078F8002079FC002079FC495449FC48407AA44A8A047A +4723:0008201C11E0110001000100F1FE111011101110111015101910121002100410 +4724:011041102110211007FC0110E110211021102FFE200029103108220804040804 +4725:0000407C2F442144027C0244E4442744217C250025002AFE3200250008FE0000 +4726:0110211017FE1110020003FCF40413E4122413E4122417E41A24100400280010 +4727:000023DE114A114A035A056AF14A12D6102010201120153C1920112007FE0000 +4728:0020202011FC112401FC0020F3FE122213FE1020104014241AA2128A04780000 +4729:0110411027FC211001F00208E2EA26AC22A822AA26EA2A06300022A402520452 +472A:0040244022404A4089F8144822484148BC4824482448244A248A3C8A25060200 +472B:0000240022F84A208820142022204120BC2024202420242024203DFC24000000 +472C:0020242022204A2089FC152423244124BD2425FC2524252425243D2425FC0104 +472D:010001F801007FFE40029FF40820111022880C603018DFF6101010101FF01010 +472E:0020241022FE4A8289141450227E4150BC90241025FE241024103C1024100010 +472F:00402440227E4A82892214AA22724122BCFE2422247224AA25223C22240A0004 +4730:0020484045FC950411FC290445FC80407BFE488849244A224DFC782048200020 +4731:000049F8450895F8110829F8440083FC7A944BFC480049F84890786049980606 +4732:01244A484524940013FC2A94466482947BFC4A484B684A484B6A7A4A4A460362 +4733:00007FFC000000001FF0101010101FF008200440FFFE1000100010001FF80000 +4734:0020FE200020003E7C204420442045FC7C840088444828502E20F05041880606 +4735:0010FE10001001FE7D124514451045FC7D440144452829282F10F22842440482 +4736:0020FE20003C00447CA84410442844D67C1000FC441028902EFEF01040100010 +4737:0000FEFC0004007C7C0444FC440045FE7D0200FC444428442E28F01040680186 +4738:0000FEFE008200827CFE4480448C44B07C9C00B0449E28F02E92F112410E0200 +4739:0020FE2001FE00207C2045FC452445247DFC0020447028A82F24F22240200020 +473A:0048FE48004801FE7C48444845FE44007CFC0084448428FC2E84F08440FC0084 +473B:0000FEFC008400847CFC4484448444FC7C0001FE442028A02EBCF0A04160023E +473C:00207E20247E18A4FF2829104A2898C600007FFC00001FF010101FF004407FFC +473D:0020FE50008801047EFA440045E2452A7D2A01EA452A292A2FEAF122412A0164 +473E:0020FE1001FE00007C84444845FE44007CFC0084448428FC2E84F08440FC0084 +473F:00003F2024203F3E21403F5024883F0800007FFC00001FF010101FF004407FFC +4740:0020FEDE008A00CA7CAA44D244A644007CFE0092449228FE2E92F09240FE0082 +4741:08202AA42CA84920145022887FFE40029FF400001FF010101FF008200440FFFE +4742:7E7848487E8E420042F87E4848307ECE00007FFC00001FF010101FF004407FFC +4743:0000FEFE008200FE7C8244FE444444AA7CEE004444AA28EE2E00F0D440AA012A +4744:0108FA9403DE06B47BDE529453DE529473DE021097FC510860903860C1980606 +4745:0020FE200820102030204A209DFC28204C209A202A204820882008202BFE1000 +4746:08001FF822484488095012207FFC02000D1072A00CC071A006981886E2800100 +4747:000025FC2220424080A425382450249825382454249425502422440243FE8000 +4748:001CFDE01100210061FE95003900517C994435445554914811421242523E2400 +4749:044024481450FFFE800200007FFC02000D1072A00CC071A006981886E2800100 +474A:0020FC2013FE202061FC94243BFE502499FC34205520913E112012A0527E2400 +474B:0040FC2013FE2202600095FC380050009BFE3420552891241222142250A02040 +474C:0000FBDE2042414AA084154A3A525420980037DE505291521094114852542422 +474D:0000FBFE22224020A1FE142039FC512499FC352451FC902013FE102050202020 +474E:0020FD241124212461FC94003BFE5020984035FC55549154115411545154210C +474F:0020FDFC112423FE612495FC382051FC992435FC544093FE108811D05070238C +4750:0010FB9022FE42A0A2BE17483ABE52809ABE36A252BE9322123E122252222226 +4751:0020FDFC1088205063FE940039FC512499FC352455FC902011FC102053FE2000 +4752:03F0FD2E11E2212A61E495343BEA5032981E35E054A29134106810A453222020 +4753:0124FA4821244000A3FC16943A6452949BFC364853689248136A124A52462362 +4754:0088FBFE208843DEA25217DE38A0509099FE352053FC952011FC112051FE2100 +4755:03FCF90811F8210865F8990E37F8500897FE3A94579C9294139C12D657BC2084 +4756:1008201CD5F0095051502150D15019502950C94819482948C9440A4452422400 +4757:0C203020C22014204BFE3020C870147024A8CCA815242622C420042028201020 +4758:0C0030F8C288148848883106CA0015FC2484CC8414482450C420045028881306 +4759:0C0031FEC300150449443128C92815102510CD2815282544C584050029FE1000 +475A:100021FCD5040904510421FCD10019402944C94819702940C9420A42523E2400 +475B:10102010D41009FE51122114D11019FC2944C94419282928C9100A2852442482 +475C:10402040D488090453FE2002D08819442A42C8F819882A50C820085051882606 +475D:0C203020C3FC145048883104CBFE140825E8CD28152825E8C528040828281010 +475E:10202020D43E082051FE2122D13819E02922C91E19002978CA480A4A548A2906 +475F:1080209ED7EA088A51CA208AD3EA189228A6C8201BFE2820C850088851042602 +4760:100021FED5100920517C2144D17C1944297CC91019102954C9520A9252502420 +4761:10882088D7FE0888508820F8D0201BFE2A22CB321AAA2B76CA220A22522A2224 +4762:100021F8D50809F8510821F8D0001BFC2A94CBFC180029F8C890086051982606 +4763:1200217ED4400C7C524420FCD1401E7E2A20C8201BFE2870C8A8092452222020 +4764:0C203020C3FC142049543088C90416FA2488CCF8148824F8C42004A829241060 +4765:104021FCD50409FC510421FCD10419FC2820C92418A82924C8200BFE50202020 +4766:10402080D7FE0A52525227FED000181E2BE0C8A219222A74C8A8092456222020 +4767:00407C40448044FC7D04460444847C44444444147C2400442984240444288010 +4768:040025FC2488245024202450008C1FF010101FF010101FF010101FF008201010 +4769:00207C20445044887D04461244207C40458844107C2000442988241044608380 +476A:00007C0045FE44127C14441044907C90449E44907C90009028D02530451E8200 +476B:00807C80448044FE7D40454046407C7C444044407C40007C2840244044408040 +476C:00407C20440045FC7C20442044207C2045FC44207C2000202820242047FE8000 +476D:00807C80450045FC7E04440445E47D24452445247DE401242804240444288010 +476E:00207C10441045FE7C20442044447C8445F844107C200044288225FE44828000 +476F:00807C8044FE45007E204520452C7D7447A445247D3401282922250244FE8000 +4770:00207C20442045FC7C20442047FE7C08440845FE7C0800882848240844288010 +4771:02001FF0081010307EFC2244468C1FF010101FF010101FF010101FF008201010 +4772:00007CFC448444847CFC449044907C88448445327D0802002860241844048000 +4773:08000F7C28447F28A11016283846DFF010101FF010101FF010101FF008201010 +4774:01007FFC01001FF011101FF001007FFE50129FF410101FF010101FF008201010 +4775:00287C2445FE44207C2045FC45247D2445FC45247D2401FC292425244524810C +4776:00407C2047FE44007C0045FC45047D0445FC44207D2801242A22242244A08040 +4777:20003E7C48440844FF44247C42001FF010101FF010101FF010101FF008201010 +4778:00887C8847FE44887CA8442047FE7C20442045FC7C8400882850242044D88306 +4779:004078204BFE4A027D04490049DE7A524A524B527C9A0094511049128A12040E +477A:102008107EFC04482448183064CC1FF010101FF010101FF010101FF008201010 +477B:00007DFC450445047DFC451045107DFE451045107D7C014429442544457C8244 +477C:00207C2047FE44207DFC442047FE7C0045FC45047DFC010429FC250445148108 +477D:000079FE49104910797C4910491079FE490049107910017C51104A108AFE0400 +477E:3F500048FFFE08402F2028122F0AF0063FFA20083FF820083FF820083FF80820 +477F:0500397821083D7822083FF808203FF8D0161FF010101FF010101FF008201010 +4780:00807CBC448445087DFE472045207D7C459045107DFE01102928252845448182 +4781:00007BFE4A004AFC7A844AFC4A847AFC4A204BFE7A4802C852304A488A8403FE +4782:00007DFC442044407DFC455445547D544544452C7C2003FE2850248845048202 +4783:0008700857C85210721E54A457D47114511457D47114010851C84E1484140022 +4784:2040FEFE21203CAC24F447AC54A2887E00001FF010101FF010101FF008201010 +4785:000079FE4900497E790049FE49547948496449427900017E51424A428A7E0442 +4786:00207D2444A844207DFC450445047DFC450445FC7D04010429FC240044888104 +4787:08203E2008F87F282A685D2A08563E8200001FF010101FF010101FF008201010 +4788:001E7BE0494448A879F84908490879FC4904490479FE010252AA4AAA8D0A0004 +4789:00207D2444A845FC7C4047FE44887DFC468A44F87C8800F8288824F844508088 +478A:007C78404BFE4A427A784BC44A3C7AA84B544AF87B8C02FA52884AF88A8804F8 +478B:0200713C57A4502474BC532457A4713C512457A4713C059055584968812A0346 +478C:00087C3C45E05420542057FE54205420542055FC550411042904250445FC8104 +478D:00207C2047FE442055FC542057FE540055FC550455FC110429FC250441148108 +478E:00F87C88448854F85488548854F8540055FC5504550411FC2904250445FC8104 +478F:00007DFC4524452455FC5524552455FC54205410545411422942254A42388000 +4790:00207C2047FE542055FC544057FE5488550456FA5488108828F82488448880F8 +4791:08000800087C7E1008100810FF10141014105610551095102410241054FE8800 +4792:080008FE08827E8208BA0882FF8214BA14AA56AA55AA94BA24822482548A8884 +4793:080008FE08007E5208A40928FF94144A140056FE551095102410241055FE8800 +4794:080008FE08827E8208FE0880FF8C14B0149C56B0559E94F024922512550E8A00 +4795:0800087C08107EFE08920854FF101454140056FE551094FE24AA24AA54AA8886 +4796:0850084808487E40085C09E0FE400840282028242E14280C280458004FFE8000 +4797:0808080808087E0808FE0818FE180828282828482E482888281858004FFE8000 +4798:08400840087C7E8009000800FEF80810282028402E842884287C58004FFE8000 +4799:100013FE10207C20102011FCFD241124112451245D2451345128702050208FFE +479A:0810081008FE7E10081008FCFF040804286828102E282844288258004FFE8000 +479B:080009FE08207EA008BC08A4FEA408FC280428042E042828281058004FFE8000 +479C:0800080009FE7E1008200820FE68086428A229222E202820282058004FFE8000 +479D:0800080008FC7E2008200820FE2008FC282828242E24282029FE58004FFE8000 +479E:1050105010507DFC10541054FDFC1150115051FE5C525052505A709451108FFE +479F:0820082008407EFC08840884FE8408FC288428842E8428FC288458004FFE8000 +47A0:080009FE08207E200840087CFEC40944284428442E44287C284458004FFE8000 +47A1:0800080008FC7E84088408FCFE84088428FC28842E0029FE280058004FFE8000 +47A2:0840084008407EFE08A00920FE3C08202820283E2E202820282058004FFE8000 +47A3:0808081C08E07E80088008FEFE90089028B028982E94291029105A004FFE8000 +47A4:1080108011007DFC12041004FDE41124112451245DE451245004702850108FFE +47A5:0810081009FE7E20084008FCFF44087C2844287C2E442854284858004FFE8000 +47A6:08200820083C7E4408A80810FF2808442882287C2E442844287C58004FFE8000 +47A7:0808081C08E07E8008FE0880FE8008BC28A428A42EA4293C29245A004FFE8000 +47A8:0820082008FC7E20082009FEFE00082028FC28202E20282029FE58004FFE8000 +47A9:0810081008287E440882087CFF000800287C28442E44287C284458004FFE8000 +47AA:080008FE08807E8408B808A0FFBE08A428A428A42EC4288028FE58004FFE8000 +47AB:100011FC10447C4413FE1044FC4411FC108050FC5D84528450FC708450008FFE +47AC:080C087008107EFE08380854FE920800287C28242E2E2842288A59044FFE8000 +47AD:1020104810847DFE10021048FC841142107C50845D6850105068718450008FFE +47AE:0810081008287E4408BA0810FEFE0810285828942F122850282058004FFE8000 +47AF:080E08F008227E9208540800FF7C0808281028FE2E102810285058204FFE8000 +47B0:1020102011FC7C20102013FEFC501050115451525E5250905090713050008FFE +47B1:0828084408927E1008280844FE82097C284428442E44287C284458004FFE8000 +47B2:101010D813947C94109013FEFC94109410D853925CAA50CA5286710250008FFE +47B3:0820081008FC7E0008840848FEFE080028FC28842E8428FC288458004FFE8000 +47B4:11FC112411247D74112411FCFD041174115451545D7451045204721454088FFE +47B5:100011EE10227CAA104410AAFD32120011EE50225CAA504450AA711252208FFE +47B6:11F8110811087DF811081108FDF8108011FC52545C9451245244709451088FFE +47B7:100011FC11047DFC11001110FD541154117C51105D5451545254747C50008FFE +47B8:100010F810007C0011FC1020FD241222106050005DFC5104510471FC50008FFE +47B9:0820084008FC7E8408FC0884FEFC080029FE28202EFC282029FE58004FFE8000 +47BA:081E09F009107F1009FE0910FF7E0942297E29422F7E2942297E5A004FFE8000 +47BB:11F8105010207DFC112411FCFD2411FC112450405DFC50445084712852108FFE +47BC:0820083C08447E78080808FEFF20085228AC28582EAC284A28AA58104FFE8000 +47BD:08100810087C7E1008FE08A2FE440878281428FE2E10285428B258004FFE8000 +47BE:101E13E0123C7A2012FE12A2FAB812E4129C52805AB85328554A728650008FFE +47BF:01007FFE44429FF404403FF80440FFFE092017D02108DFF6010011F8290047FE +47C0:0844082808FE7E10087C0810FEFE08202820287E2E882908287E58004FFE8000 +47C1:1124124811247C0011FC1124FDFC112411FC50205DFE507050A8712452208FFE +47C2:10FC108410FC7C8410FC1000FDFE114A11FE50005CFC5048503070CC53028FFE +47C3:1040108811FC7D08125213FEFC50118C162251C85C3251CC503071C050008FFE +47C4:102013FE10207DFC102013FEFC0011FC110451FC5D0451FC510471FC50888FFE +47C5:08047F7808403E402A7E3E482A48FF4809883FF00100FFFC110011F8290047FE +47C6:11FC112411FC7D2411FC10A8FCA813FE10A850A85DFC502053FE702050208FFE +47C7:0894091809DE7E94095A09DEFE9409FE289028D42EAA29162A2258004FFE8000 +47C8:109411D210907DFE101011D4FD5411D4101453E85C8A51CA509673E250008FFE +47C9:11FC115411547DFC108011FCFE4411F4115451545DF4504451F4701450088FFE +47CA:1020103E10207DFE112211F8FD2211FE112051525DAC525A52AA744850908FFE +47CB:1040107C10847D0813FE1144FD92117C1100517C5D00517C5244727C54008FFE +47CC:1048104C11FA7C4813FE10A8FDFA134A15EC514C5DEA514A51F6712250008FFE +47CD:104011FC11247D94114C1124FDFC102013FE528A5D2453FE508070FC51048FFE +47CE:108811DC10887DDE10881154FE2211FC110451FC5D0451FC510471FC50888FFE +47CF:1124117412587BFE115412DAFBFE1082102053FE587050A85124722250208FFE +47D0:13FE120012227ECC124413EEFE4412EE135452105E90529E549073FE50008FFE +47D1:1020105010887D74120211FCFD5411FC100051FC5D5451FC5154710C50008FFE +47D2:108813FE10887BDE125213DEF8A011FE112053FC5D2051FC512071FE51008FFE +47D3:00007C0045FE442044207C201020102010205C205020502050205C20E0A00040 +47D4:00407E404240424042407E60085008484E444844484048404E40F04000400040 +47D5:00007DF8448844C844A87CA8108810505C505050502050205C50E08801040202 +47D6:00207C204420442045247D24112411245D245124512451245D24E1FC00040000 +47D7:00047C1E45F0451045107D10111011FE11105D1051105108510A5D4AE1860102 +47D8:00807C40444047FC44007C0011F011105D105110511051125D12E212020E0400 +47D9:00007900497E49124912791211D2171251125D12515251925922E022004A0084 +47DA:00007CFC4400440044007DFE104810485C485048504850485C88E08801080208 +47DB:00207C20442047FE44207C2011FC11245D245124512451345D28E02000200020 +47DC:00207C20442045FE45227D221122112211525D4A518A510251025D02E10A0104 +47DD:00007CF84488448844887D06120011FC10845C845048505050205C50E0880306 +47DE:00207C20442044A844A47CA21122112012245C245028500850105C20E0C00300 +47DF:0200077C384420442044207C3F90241024502C5C24502650255044B0449E8500 +47E0:00287C244424442045FE7D201124112411245D285128516851945D14E02C0044 +47E1:00047C1E45F0451045107D10111011FE11105D1051105108510A5D4AE1A60112 +47E2:00807C80448044FE45027D04122010205CA850A4512451225E22E02000A00040 +47E3:00207C284424442045FC7C20107010705CA850A8512451245E22E02000200020 +47E4:00407C204428440844087C48105411525D525160526050445CC4E144023C0000 +47E5:00007DF84408445044207C1013FE10625CA450A0512052205C20E02000A00040 +47E6:00087C3C45E0442044207DFE104010405C7C50A450A851285D10E22804440082 +47E7:00007C0045FC452445247D241124112411FC5D245124512451245D24E1FC0104 +47E8:00007DFC4504450445047DFC1120112011FE5D205120511051125D4AE1860102 +47E9:00207C20442045FC44207C20102013FE5C205040504050885D04E3FE01020000 +47EA:00047C1E45E0440044207C1011FE100410085C105020504050805D40E23E0000 +47EB:0100111009207FFE40029FF4101010101FF00100110011F81100290047FE8000 +47EC:00087C1C45E0450045007D00110011FE5D105110511051105D10E11007FE0000 +47ED:00807C80448044FE45407D401240107C5C4050405040507C5C40E04000400040 +47EE:00907C944492451245107F7E1510111011105D285128512851285D44E1440182 +47EF:00087C3C45E0442044207DFE102010205C2051FC510451045D04E10401FC0104 +47F0:00407C40449C450046407C4010BE118812885C885088508850885C88E0A80090 +47F1:00207C2047FE442044207DFC112411245D24512C507050A85D24E62200200020 +47F2:00407C20442047FE44407C88110413FE10925C905090509051125D12E20E0400 +47F3:00003EEE2222222222AA3E660822086628AA2E22282228AA284458004FFE8000 +47F4:00007DFE45004500457C7D00110011FE5D505152515451485D48E24402520460 +47F5:00287C244424442045FE7C20112010B25CB4506850A851245E22E02000A00040 +47F6:00207C2044A844A844A87D741222102010205DFC5020502050205C20E3FE0000 +47F7:0104790E493049204FE07920113E11641DA457245124512451245D24E1440384 +47F8:00207C20447C44C445287C90106011805C48504851FE50485C48E08800880108 +47F9:00047C1E45E0442245127C941080100811FE5C085088504850485C08E0280010 +47FA:00007EFC4284428442FC7E84088408FC4E84488448FC48004E48F04400820102 +47FB:00207C204450448845047E0210F810205C2053FE502051245D22E22200A00040 +47FC:00087C0C44EA440A44087DFE1048104811485D6851485148514A5D6AE3860102 +47FD:00407C2045FC444044907D0813FC10045D505150515051505E50E2520452080E +47FE:00007BDE4842494A4884794A125214201C0053DE5052515250945D48E2540422 +47FF:00007DF84408440845F87C08100813FE5C205222517450A85D24E22200A00040 +4800:00207D2444A444A844207DFC1104110411745D545154515451745D04E1140108 +4801:0040789049084BFC49087A1014A417BE50825C0053FC50005800E00007FE0000 +4802:082008207EFC08301C682AA4C92208201FF010101FF0010011F81100290047FE +4803:00007BFE482048204BFE7A221222133252AA5EAA537652665A22E222022A0204 +4804:00507C50445045FC45547D54115411FC5D545154515453FE5C00E05000880104 +4805:00007DFE4502451A45627D22112211FA5D225132516A51A65D22E12201FE0102 +4806:00007CFC448044F844807CF8108013FE11405D245128511051085D44E1820100 +4807:00007DFE4502450245FE7D10115211525D52517E511051525D52E252027E0402 +4808:0020782049FC482448247BFE1024102451FC5E22517450A85924E22200A00040 +4809:00207C1045FE450246047CF8108810885CF85080508050FC5C84E08400FC0084 +480A:00907C904490479E44907C901090139C10905C905090539E50905C90E0900090 +480B:00407C8045FC452445247DFC112411445DFC5090511053FE5C10E01000100010 +480C:00207C2247B444A844A87D2412A210405DFC510451FC51045DFCE10401140108 +480D:00007BDE4A424A424A427BDE1200123E53D25E12521453D45A08E21402240242 +480E:00007DFE4502450245FE7D0011FE11205D4451FE511251105EFEE210041009FE +480F:00107BD448584A52498C7888110412FA10205C2053FE502050505C88E1040202 +4810:00007DFC450445FC45047DFC110411FC5C28502453FE50505C50E08801040202 +4811:002078204BFE485048887B2611FC10201C2053FE5000502051FC5C20E02003FE +4812:00807C9E449245D244927C9E109211D25D52515E515251525DD2E022002A0044 +4813:00887C48445047FE44507C5011FC11545D54518C510451FC5D04E10401FC0104 +4814:00007C844448440045FE7C20104411A810305C585198503450525D90E0500020 +4815:009078924AD44A984A927AD2170E10201C2053FE507050A851245E22E0200020 +4816:00207D2044BE444244847F101110112811445C8250FC508450845C84E0FC0084 +4817:00207C4045FC450445FC7D0411FC11045DFC5028502453FE5C50E08801040202 +4818:00207C4045FC450445547D241154110411FC5C00511251D451185D52E192010E +4819:00207C1045FE448444487DFE1102122410105DFE5040507C50445C84E0940108 +481A:0080F04097FC94049110F208203C23D0A290BA90A290A288A288B4A4C4D40892 +481B:0008783C4BC048044A44792811FC12201C2053FE5020512451245D24E1FC0004 +481C:00887C8845FE448844007DFE1088108810F85C8850F85088509E5DE8E0080008 +481D:00007CF84488448844F87C0011FC11045DFC510451FC51045DFCE05000880104 +481E:0014F012901097FE9410F49024D22492A7F2BC94A494A5C8BAAAE89A11A60042 +481F:08207E2008F8FF2814287F6A082AFF5608821FF010101FF0010011F83100CFFE +4820:14507FFC245247CE80007FFC41043FF821083FF810101FF0010011F83100CFFE +4821:00207C3C442045FE45227D3811E4111C11005D7C5144517C51445D7CE14402FE +4822:0820FFFE08203FF824483FF800007FFE40029FF410101FF0010011F83100CFFE +4823:00007BDE4A524BDE4A107A5211CE10001C8853FE5088508853FE5C88E1040202 +4824:00007DDC4554455445DC7C0011FC112411FC5D2451FC502053FE5C20E0200020 +4825:0108F10895489390911EF7D425642554A554BF54A5D4A548A548B554C46404C2 +4826:00807CEE454A444A45FA7C4E10AA110010FC5C84508450FC50845C84E0FC0084 +4827:00007BFC4A044A044BFC7A2212FC122813FE5E2052FC538452FC5C84E4FC0884 +4828:00807CF8450847FE45447D9211FE11005D7C5100517C51005D7CE244027C0444 +4829:0020F13C912097FE9010F01423FE2210A3F0BA54A254A2D4BB68E44A08960322 +482A:00447A844AEA4A4E4AA47AEE122213FE12445E8452EA524E52A45EEEE22203FE +482B:03F0792E49E2492A49E4793413EA10321C1E53E050A2513450685CA4E3220020 +482C:00A0F74E915A952A922AF21C25DA280AA1EAB92AA1EAA22CA148B068C3880008 +482D:0108F10897CE91129124F7DE2552255EA7D2B91EA392A55EA940B114C1120122 +482E:012478A849FC48404BFE790813FC152251FC5D2051FC512059FEE00202AA0004 +482F:0040F0A0911092089DF6F0002EEE2AAAAEEEB800AFFEA922AFFEB922C92A0804 +4830:00887BFE48884BDE4A527BDE10A0109011FE5D2053FC552051FC5D20E1FE0100 +4831:03FE7A024BFE4A924A547A9212FE12AA52FE5F2252FA52AA5AFAE22205FA0004 +4832:102020207C5044507C8845247E12441045FCFC040C0814882450442094100810 +4833:102020207D2445247D2445247DFC44204420FD240D2415242524452495FC0804 +4834:102020107C1044007DFE44007C0444844484FC480C4814482450441095FE0800 +4835:104420447C4444847CBE45847E8444A44494FC940C8414842484448494940888 +4836:104020407C8044FC7D2046207C20442047FEFC200C5014502488448895040A02 +4837:105020507C5045527CD444587C50445844D4FD520C5014502492449295120A0E +4838:102020207DFC44507C8845047EFA440047FEFC400C8015FC2404440494280810 +4839:102020107C1045FE7C2044247C4444F84412FC220C4415882410442894440982 +483A:108020407C5E45027D02457A7D4A454A454AFD4A0D7A154A25024502950A0904 +483B:102020107DFE45027C4844847D0244FC4404FCFC0C8014FC2404440494280810 +483C:102020507C8845047EFA44007DE2452A452AFDEA0D2A152A25EA4522952A0964 +483D:102021247924492479FC48007BFE480049FCF904190429FC488888502BFE1000 +483E:100023DE7A524BDE7A524BDE7A024A224A22FA221A522A4A4A8A8A022A0A1204 +483F:102021FC7D2445FC7C2047FE7C0045FC4504FDFC0D0415FC250445FC94880904 +4840:101021FE7C0045FE7D02457A7D4A45FE4400FCFC0C8414FC248444FC940009FE +4841:111020907BDE48107A5E49827BDE48104BDEFA501BDE2A504BDE8A502A5212CE +4842:080408040844FF4408447F4449447F4449447F4C0874FF440804080408040804 +4843:104010401040FE4011FC7C4454447C4454447C841084FE841104110412281410 +4844:100010F01090FE9010907C9054907C9054907C901090FE9210921112110E1200 +4845:108210921092FE9210927C9254927C9254927C921092FE921092111211021202 +4846:101010901090FE8810887D2455247E2254207C401048FE44108411FE10821000 +4847:1000100011FCFE0010007C0057FE7C9054907C901090FE9011121112120E1400 +4848:100810881050FE2010507C8855007C0854887C881050FE501020105010881306 +4849:104010201000FDFC10007C0054F07C9054907C901090FE9210921112110E1200 +484A:1008101C11E0FD0011007DFC55447D4455447D281128FF101110122812441482 +484B:102010201020FDFE10207C2054207DFC54847C881048FE501020105011881606 +484C:104010401040FC4013FE7C4054807C9054907D201120FE481244148411FE1082 +484D:102010201020FC2011FC7C2054207C2055FE7C201050FE501088108811041202 +484E:102010101010FEFE10827C8254827CFE54827C801080FE801080110011001200 +484F:100811C81048FE4810487DC855087D0855107DD01054FE541052105E12821100 +4850:102010101010FEFE10827D0454407C4854507C601040FE4210421042103E1000 +4851:100011FC1104FD0411047DFC55207D2055FE7D201120FD101112114A11861102 +4852:1000100011FCFD2411247D2455247D2455FC7D241124FD241124112411FC1104 +4853:11001100211C47C0810017C0257E67C8A54827C821082FE82108210821282110 +4854:10201020107CFC8411487C3054207C4855907C3E1042FDA41018101010601180 +4855:100011F81010FC2010247DA854B07CA855287D241222FCA01040100011FC1000 +4856:1000100011FCFE0010507C8855247C2054207DFC1020FE201020102013FE1000 +4857:7DF0111011901D52F20E05001FF001001FF011101FF011101FF00100FFFE0100 +4858:1080108010FEFD0211027EFA54AA7CAA54FA7CAA10AAFEFA108A100210141008 +4859:1020101010FCFE8410847CFC54847C8454FC7CA210A4FE981090108810C41082 +485A:1020104011FCFD0411047DFC55047D0455FC7C501050FE5010921092110E1200 +485B:10101010FEFE10107C7C545454547C7C545454547C7C1010FEFE101010101010 +485C:1020102011FCFC2010207DFE54887D0456227C2011FCFE201020102013FE1000 +485D:2040202023FEFA022504F900A9DEFA52AA52FB52249AF894211021122212240E +485E:1FF010101FF010101FF01010FFFE11103FF8C1061FF011101FF01110FFFE0100 +485F:1020104010FEFC9210927CFE54927CA254FE7C481088FDFE1008100810081008 +4860:10201020103EFE2010207CFC54847CFC54847CFC1084FEFC1000104810841102 +4861:1110111211D4FD1811527D92552E7C4055FC7D041104FDFC1104110411FC1104 +4862:1040102011FEFD0211027DFE55007D0055FE7DAA11AAFEFE12AA12AA14A21086 +4863:100013FE1222FC2011FE7C2055FC7D2455FC7D2411FCFC2013FE102010201020 +4864:02003FD00260FFFE1C10EFF008100FF001007FFC11101FF01110FFFE01000100 +4865:1040102013FEFE0210507C8855247C5054887D0412FAFC881088108810F81088 +4866:21F820882070F98C2000FBDEAA52F98CAA52F82023FEF87020A8212426222020 +4867:1040108011FCFD0411047DFC55007DFE55007DFE1002FEAA12AA140210141008 +4868:082004407FFC0100FFFE04001FF0E1003FFC01001FF011101FF01110FFFE0100 +4869:1020102013FEFC2011FC7D0455FC7D0455FC7D0411FCFD0413FE108811041202 +486A:1020101011FEFD0211027DFE55007DEE55227DAA1166FD22116612AA12221466 +486B:10201220117CFCA410187CE657107D7E55107D7C1110FDFE1110111012FE1400 +486C:200021F82108F9F82108F9F8A800FBFCAA94FBFC2000F9F82090206021982606 +486D:1084104811FEFE1010FC7C2055FE7C40547C7CA41124FEFC1044104411FE1000 +486E:112411241224FCA411547D4A57927D0855087D28112EFD2811281158114E1180 +486F:1020104011FCFD24117C7D8C55547D2455547DFC1040FC2412A2128A14881078 +4870:0878FF4808863E782A483E30404881043FF801001FF011101FF01110FFFE0100 +4871:200023FE2200FA7C2244FA44AA7CFA00AAEEFAAA22AAFAAA22EE220023FE2000 +4872:100013DE1252FE5213DE7C0055FC7D2455FC7D2411FCFC2013FE102010201020 +4873:214021442158FBF02150F9D0A95EF9D4A954F95423F4F8142154223424142024 +4874:102011FC1088FC5013FE7C0055FC7D2455FC7D2411FCFC2011FC102013FE1000 +4875:104412241128FC7E10107C28574A7D1C55287D4C111AFD2A1148111012FE1400 +4876:201023C8227EFA402262FBD4AA00FA3EABC8FA48267EFA48224823C822482008 +4877:108813FE1088FC2011FC7C2057FE7C4054887DFC1000FDFC1154115417FE1000 +4878:108813FE1088FDFC11547D5455FC7C2854247DFE1120FD241114114A11961122 +4879:102011FE1020FDFE11027EFC54A47CFC54A47CFC1000FDFE10A210BC1160123E +487A:208823DE2088F9DC2088FBDEA888FBFCA804F9FC2004FBFC204022A4228A247A +487B:204021FC2124F994214CF924A9FCF820ABFEFA8A2124FBFE208020FC2104220C +487C:200021FC2020FBFE2222F9ACA820F9ACA800FBEE22AAFAAA22AA22AA23EE22AA +487D:252827BE2948FFBE2318FDAAA946FBFCAA04FBFC2204FBFC220423FC21082204 +487E:210821EC210AFFEA2928FBC8A93EFFE8A948FBE82A28FB682AA82BF42AB432A2 +487F:21FC202023FEFA2221ACF820A9ACF800ABBEFAAA23BEF80023FE212422AA27FE +4880:104010401040FEFE2080290048F87E08081008200E40F8804902090208FE0800 +4881:100010FC1084FE84208428FC48847E84088408FC0E84F8844884088409140A08 +4882:104010201020FE0021FE280048047E84088408480E48F848485008100BFE0800 +4883:00407C2045FC44887C5043FE7C20A5FC24203C2010080810066001800E70F00E +4884:101024FE42447E2800FE7E10427C7E10082008207EFC08301C682AA4C9220820 +4885:02001C7810081E7810081FF800003FFC20002FF820003FFE288848504A308C0E +4886:000001FE7D00457C450001FE39542948296429422B082DFE4948412882080418 +4887:200011FE7D00457C450001FE39542948296429422B082DFE4948412882080418 +4888:3FFC20002FF820003FFE286849104A888C643FF8D55613901FF00A2009200FE0 +4889:111827C8244836D8254826C837D800003FFC20002FF820003FFC24484430860E +488A:000023F81010102000400040F7FE104010401040104011401080280047FE0000 +488B:000023FC1090109000900090F090109010901110111012101410280047FE0000 +488C:0040404020402FFE00400040E7FC244424442444245424482040204050008FFE +488D:00802040104017FE01000100F1F8110811081108120812081450282047FE0000 +488E:000023FC1090109000900090F7FE109010901110111012101410280047FE0000 +488F:001021101090109000100210F1101110101E17F0101010101010281047FE0000 +4890:000021F81108110801F80108F10811F811081108110817FE1000280047FE0000 +4891:0008203C13E0122002200220F3FE122012101212128A13261212280047FE0000 +4892:0080204017FC100001100208F414111010A0104010A011101208280047FE0000 +4893:0040202013FE1202040401FCF020102017FE10201020102010A0284047FE0000 +4894:004020A0111012080DF60000F00013F812081208120813F81000280047FE0000 +4895:002820241024102003FE0220F224122413A812281212121A14261442288047FE +4896:0040204013F8104807FE0048F3F8104013F81040104017FC1040284047FE0000 +4897:0120412021202FFC09240924E9242FFC2924292429242FFC200050008FFE0000 +4898:0040202013FE120204140010F3FE1010111010901090101010101050282047FE +4899:000023FC1204120403FC0204F20413FC1204120413FC100011081204280047FE +489A:00004FFE204027FC044407FCE44427FC2040274020C020B02108220450008FFE +489B:000023FC12041294030C0204F2F41294129412F4120412141208280047FE0000 +489C:03F8200811F8100803F80000F7FC144413F81248124812681250284047FE0000 +489D:000027FE10901090039C0204F204139C10901090109017FE1000280047FE0000 +489E:0210421022102F7C02100630E7382AD42A52329223102210221050008FFE0000 +489F:0420422020202FBE04480488E72825282510291029283544228450008FFE0000 +48A0:00404244224424A801100208EC06211021102FFE21102210221054108FFE0000 +48A1:029042902FFC229002F00200E3F82040204027FC21502248244450408FFE0000 +48A2:004040A0211022880C4603F8E20823F8220823F8220025FC250429FC50008FFE +48A3:002020FE134C107007A001FEF00011FC100011FC100011FC110411FC280047FE +48A4:03904E18221422100F7E0610E7382AB42A54325022902210221050008FFE0000 +48A5:000027FC1040127802400FFEF00013F8120813F8120813F8120813F8280047FE +48A6:0080204017FC1040009005E4F24814A411F01010104017FC10401040284047FE +48A7:000027BC108414A4029404A4F0501188162610C0131010641388103028C047FE +48A8:02244224242429240154024AE6922A102250225E2250225022B0229E53008FFE +48A9:00105F902210221E0FA404C4E4943FD420082F88289428A22FC250008FFE0000 +48AA:0078478020802FFC01200210E5E8292627F8240825E8252825E8241850008FFE +48AB:072025FE1540157C0690057EF500157C1544157C1644147C1444144C280047FE +48AC:003C47C020442224010807FEE4022A08220823BE24882AA8213E220854088FFE +48AD:0208411027FC204003F80040E7FC20002440227C208422282C20245054888FFE +48AE:000047FC20402FFE08420358E0402358200027FC244427FC244427FC50008FFE +48AF:0244444820B0230C0C420244E4A823183C06240827BE28883528223E54088FFE +48B0:07BC208414A4129404A40120F21017FC1A2013FC122013FC122013FE2A0047FE +48B1:004027FC104013F8000007FCF4A417FC120813F8120813F8120813F8291047FE +48B2:07BC24A417BC14A407BC0140F3FC124017FC1A4013FE129010601398280047FE +48B3:00003C7C24442448244824502448244824442444244425684650444080400040 +48B4:0000077C78440848084808500848FFC808440844104410682050204040408040 +48B5:00007E7C004400480048FF50104810482044204444444268FF50414000400040 +48B6:0800087C084408487F48085018481C482A442944484488680850084008400840 +48B7:00003F3E212221242924252825242124FFE22122212221342128412045208220 +48B8:00003F3E2122212421243F28212421243F2221222122213427A8F82040200020 +48B9:00007FBE4022402440247F2841244124412241227F224034402840207FA00020 +48BA:0800087C49444948494849507F48084808444944494449684F50794000400040 +48BB:00007FBE4822482448247F2841244124412241227F224834482848207FA00020 +48BC:1200123E122212247F241228122412241222FFA2002212341128212020A040A0 +48BD:044004407FFC0440FFFE10102FE8C8260FE000001FF011101FF0100410040FFC +48BE:0800287C28443E484848085008487F4814441444144414682550264044408040 +48BF:1000083E0822FFA480A411281024FFA42222222242223434082814202220C120 +48C0:1000107C3F4421484248BFD020482F48294429442D442A6828504A404C408840 +48C1:0000F7BE10A210A494A452A852A410A431A252A294A210B410A810A052A02120 +48C2:0800087C08447F4808483E5008487F4818441C442A442A684850884008400840 +48C3:2000207C3F444848884808507F48084808442E44284428682F50F04040400040 +48C4:0800087C144422484148BE50084808487F4408442A4429684950884028401040 +48C5:00003FBE202220242F24202820243FA4282228A22D222A34292848A04C208820 +48C6:00007FBE002224A449249228492424A400227FA20822083408280BA0FC200020 +48C7:08000A7C094408487F480850084849482A4408441C442A68C950084028401040 +48C8:00007CF8448844887CF800007DFC5524552455247DFC410041004D02710240FE +48C9:20401248444420140860738020001FF010101FF000003FF821083FF820021FFE +48CA:0800493E29222A2408247F28412441245D225522552255345D28412045204220 +48CB:010007BE782208A444A42528202404247FA20C221622153424A8442084200420 +48CC:0800041E7FD2401243945E14521852145FD252125212521A5554595094D00250 +48CD:0800083EFFA214242224492888A47F2449227F2249227F3408280A200C200820 +48CE:248024BE49229224492424A824A400247FA248A248A27FB448A848A07FA040A0 +48CF:1500153E152225242FA465286524A524252225223FE22034252824A028A03020 +48D0:2200227C7F4422482A4808503E482A482A442A44FF4408681450124022404040 +48D1:00003FBE20222FA42AA42AA82FA42AA42AA22FA222222FB4422843A09C200820 +48D2:0800083E7F2249247F240828FFA400247F22412249224934492814202220C120 +48D3:0000FFBE00227F24412441287F240024FFA2A2A294A2FFB488A888A08AA08120 +48D4:0800497C2A4408487F48415041487F4841447F44414441687F50004022404140 +48D5:00007FBE48227F2448247F28482448247FA200A2AAA2AAB4AAA880A005200220 +48D6:00007E7848487E4848787E0048FC48A47EA402A4AAFCAA80AA8082821482087E +48D7:0800103E7F2241247F2441287F241024FFA22222492288B47F68082008200820 +48D8:0800493E2A22FFA480A43E28222422243E2208227F22083408280F20F0204020 +48D9:0400445E44527FD200147BD44A584A547BD24A524A527BDA4A544A50AB501490 +48DA:08007F3E4922FFA449247F2808247F2449227F221022FF34212872200C20F320 +48DB:0800083EFFA21C242B24C8A814242224492288A249222A34492888A028201020 +48DC:08000F3E08227FA448A44E287924472440225F2251225F3451285F2051A0BE20 +48DD:00003FDE205220523FD422342FD822943FF222122FD2385A2FD448504FD08850 +48DE:0000F7BE94A294A4F7A422281424FFA40822492249227F340928102020204020 +48DF:0000F7BE2122A524F7A46328B5A421247FA240A240A27FB440A840A07FA040A0 +48E0:1100111E7BD21112FFF411142A9844543FB2209220923F9A209420903F902090 +48E1:4100223EFFA208247F240828FFA4152464A22422FFA224343528E2A025A068A0 +48E2:2280229E27D2FA922294729427F8F81427D274526C52A7DA2454245027D02450 +48E3:2480151E7FD240521F1411147FD855544E527FD204127FDA0414FFF02A504530 +48E4:7BC04A5E7BD24A527BD414143FD86414BF9224123FD2001A3F9410900F10F090 +48E5:0020FFA0142014227F225524552855305720612041207F22412241227F1E4100 +48E6:0020FFA0142014207F7C5524552455245724612441247F24414441447F944108 +48E7:0020FFA8142414247F20553E55E055205720612041207F20411441147F0C4104 +48E8:0010FF901410141C7F70551055105510571E61F041107F12411241127F0E4100 +48E9:0020FE20282029FCFE20AAA8AAA8AAA8AEA8C2A882F8FE2282228222FE1E8200 +48EA:0010FE10281028FEFE10AA10AAFEAA92AE92C2928292FE9A82948210FE108210 +48EB:0010FE10281028FEFE10AA10AAFCAA44AE44C2448228FE2882108228FE448282 +48EC:0048FE4428442840FE5EABE0AA40AA44AE44C2488230FE228252828AFF068202 +48ED:0010FE1428122812FE10AAFEAA10AA10AE10C2288228FE2882288244FE448282 +48EE:0028FE2428242820FEFEAA20AA20AA3CAE34C2548254FE5482888288FF148222 +48EF:0000FFBC142414247F24553C552455245724613C41247F24412441247F7E4100 +48F0:0000FFBE142014207F20553E5522552257226122413E7F20412041207F3E4100 +48F1:0020FFA01420147C7F445584557455545754615441747F54410441047F284110 +48F2:0020FE2028402848FE84AAFCAA04AA48AE48C2FE8248FE4882488288FE888308 +48F3:0000FEFC28042804FEFCAA04AA04AAF4AE94C2948294FEF482048204FE148208 +48F4:0000FE4428282892FEAAAAC6AA82AAFEAE28C2288228FE288248824AFE8A8306 +48F5:0000FEFE28482848FE78AA48AA48AA78AE48C248824EFEF882088208FE088208 +48F6:0008FE1C28702810FE10AAFEAA10AA10AE10C27C8244FE4482448244FE7C8244 +48F7:0010FE502850287CFE90AA10AA10AAFEAE10C2388238FE5482548292FE108210 +48F8:083813C0304057FC9040104013F81000FFFE04403FF82848303827C820083FF8 +48F9:0050FE5828542894FE90AA9CABF0AA94AE94C2948298FE9882948294FEAC82C4 +48FA:0000FE7C28442844FE7CAA00AAFEAA82AE82C2FE8282FE8282FE8282FE8A8284 +48FB:0010FE1028282844FE92AA08AA7CAA04AE08C210827CFE4482448244FE7C8244 +48FC:0020FE1028FE2800FE00AA7CAA44AA44AE7CC2108254FE5282928210FE508220 +48FD:20003E7C48440844FF441444227C4000FFFE04403FF82848303827C820083FF8 +48FE:0020FE1028FE2882FF04AA7CAA44AA44AE7CC2448244FE7C82448244FFFE8200 +48FF:0000FE7C28102810FEFEAA10AA10AA50AE20C2FE82AAFEAA82AA82AAFFFE8200 +4900:0044FE4429FE2844FE54AA10ABFEAA20AE40C27E82C2FF4282428242FE7E8242 +4901:0048FE4829FC2848FE78AA48AA78AA48AE48C3FE8280FEA882C48280FEFE8200 +4902:0088FE882BFE2888FE88AAF8AA88AA88AEF8C22083FEFE7082A88324FE228220 +4903:0040FE2029FE2800FE84AA48ABFEAA00AEFCC2848284FEFC82848284FEFC8284 +4904:0000FEFE28102820FEFEAAAAAAAAAABAAEAAC2AA82BAFEAA82AA82AAFEFE8282 +4905:0010FE1028282844FE82AA7CAA00AAE2AEAAC2AA82EAFEAA82AA82E2FEAA82A4 +4906:0010FED42848294AFE84AA84AB02AAF8AE20C22083FCFE2082508248FE848304 +4907:0020FE1028FE2882FE28AA44AA92AA28AE44C282827CFE0482288210FE2882C4 +4908:0044FE82297C2820FE40AA7CAA04AA28AE10C2FE82AAFEAA82AA82AAFFFE8200 +4909:0010FE0C282428AAFEB0AB24AA64AB9CAE00C2FE82AAFEAA82AA82AAFFFE8200 +490A:0044FE4428FE2844FE00AAFEAA44AA44AE7CC244827CFE44824E82F4FE048204 +490B:4408240C280AFE0829FE2808FE08AAEAAAAAAEAAC2ECFE0C822A82CAFE168222 +490C:0020FE2028502848FEA4ABFEAA84AAFCAE84C2FC8280FEFC83448344FE7C8244 +490D:0088F88823FE2088F888A8F8A820ABFEDA228B328AAAFB768A228A22FA2A8A24 +490E:00FCFE28281029FEFE52AA94AB50AA20AEFEC2AA82C6FEBA82AA82BAFE828286 +490F:0028FEEE282828EEFE28AAEEAA28AA06AEF8C21082FEFE1082FE8210FE508220 +4910:0000FBDE208822A8FBFEA988AADAACA6D9F889088908F9F889088908F9F88908 +4911:0028FE28287C2828FE28AAFEAA10AA7CAE54C27C8254FE7C82008228FE448282 +4912:0124F92422AA23AEF924AAAAABAEA924DBFE89108914F9148A8A8A4AFA168C22 +4913:0048FE4829FE2848FEFEAA82AB7CAA00AEFEC22082D2FE2C82D8822CFECA8230 +4914:42043FD88A904F9E2A945FD48224FFFE04803FF82488287830083FF820083FF8 +4915:0124F974225822DAFBFEA954AADAABFED8A288208BFEF87088A88924FA228820 +4916:01FCF90421FC2104F9FCA888A9FCA888DBFE88888924FAAA887088A8F9248860 +4917:08207F7C14C47F3822D63E3822507F7C0810FFFE04403FF8284837B820083FF8 +4918:0148F94C22AA2008FBFEA948AB68A94ADB6A894A8B6CF94C896A8B8AF8168822 +4919:00F8F90821F02010FBFEA8C4AB28A8D4DB3288D08A28FFBE8AAA8FBEFA8A8FBE +491A:00003DFC2524252425FC3D24252425FC24203C2025FC24202420442057FE8800 +491B:10041004288424844284BC8410841084FE8C109494E4588450041E04F0044004 +491C:102010202820243C41E0B82010201020FC3E13E09420582250221C22E01E4000 +491D:10001040299E25124112B91211121112FD121112955A599451101C10E0104010 +491E:10401050284824484040B9FE10501050FC5010509490589050921D12E10E4200 +491F:1000100029FE25024302BC0010781048FE4810489448584A504A1E8AF0864100 +4920:10101010281024904290BC90109E1090FE9010909490589050901E90F1FE4000 +4921:10201020282025FC4124B92411FC1124FD24112497FE590451041D04E1144108 +4922:100011FC290425044104B9FC10401040FDFC10449444588450841D04E2284410 +4923:1008103C29E024204124B8A410A81020FDFE10209420582050201C20E0A04040 +4924:10201010281025FE4220BC24104410F8FE1210229444598850101E28F0444182 +4925:1040104028FC25044208B9FE1100117CFD4411449554594851421E42E23E4400 +4926:10A810A428A42520412EBBF015201124FD2411249528591051321D4AE1864102 +4927:1000100029FC25044104B97411541154FD5411549574590451041DFCE1044000 +4928:1004101E29E025004106B97811501150FD5211549548594851441E54E2624440 +4929:1020101029FE25024000B81C10E01020FC20103E95E0582050221C22E01E4000 +492A:100010F8288824884088B88811261220FDFE1020947058A851241E22E0204020 +492B:102011242924252441FCB82010501088FD441222942059F850081C10E0104020 +492C:201022105110491084547A5222522090F81021142E04B20862083A10E22000C0 +492D:21842068503048C88304784023FE20A0F92023FC2D24B12461343928E0200020 +492E:101010102890249E4090B89013FE1000FC1010929492591452081C10E0604380 +492F:100213E2294425484140B942114213E4FD4811409542594251441E44E2484450 +4930:108010807DFC124410481CA0E11006C81830EFEE01003FF809200540FFFE0000 +4931:10201124292425FC4000B80C11F01100FD0011FE9510591051101E10E2104410 +4932:1020102029FC24204020B82013FE1048FC48114C954A5A4A50881C88E1284210 +4933:2080204057FE492081207A3C22442664FA9423482A48B23062203A50E2880306 +4934:200021FC5008481082227AAA22722222FA7222AA2B26B2A262423A02E3FE0002 +4935:109010902890279E4090B8901090139CFC90109094905B9E50901C90E0904090 +4936:102010202BFE24504088B924122211FCFD2411FC952459FC50221C22E01E4000 +4937:200023FE52004AFC82847AFC228422FCFA2023FE2A48B2C862303A48E28403FE +4938:208020FC510449F880087BFE204020A2FB3420582894B33460523890E3500020 +4939:104010202BFE262240A4B92810501088FD0410F89488588850501C20E0D84306 +493A:100010022BDC24904090B91011DE1354FD541154955459D451541C24E0244044 +493B:104010402BFE248041FCBA2015FE1000FDFC110495FC590451FC1D04E1144108 +493C:2040208051FC490481FC790421FC2020F83223B428A8B12861243A24E4A20040 +493D:100011FC295425544154B9FC102010A8FCA41124942058A850A41D24E0204020 +493E:101E11E0282225124094B880102011CEFD02110295CE590251021D02E1FE4102 +493F:108013DE288A25CA408ABBD210A61008FCF0102095FC582053FE1C20E0A04040 +4940:10201124292425FC4020BBFE10001020FDFC1124952459FC50201C24E3FE4102 +4941:200023FC500848D080207BFE228A2252FAFA22222A22B3FE62223A22E3FE0202 +4942:200023FE52024CFC800079FC204020A4FB3820582894B33460523890E3500020 +4943:104010402BFE26924088B9FE13101510FDFE1110951059FE51101D10E1FE4100 +4944:200023FE52004A4882487AFC22482248FBFE22002AFCB28462FC3A84E2FC0484 +4945:01007FFC01007D7C11107D7C11101CFEE10006C01830EFEE01003FF80920FFFE +4946:0100FFFE04407C7C04403C7804407D7C06C01830EFEE01003FF811100920FFFE +4947:1020101029FE25024102B9FE110011EEFD2211AA9566592251661EAAE2224466 +4948:2088208853FE488880247BFE20502088F904228A2888B3FE60883888E1080208 +4949:100013FE2A02244040F8B908121011FCFD24112495FC585050581C96E112420E +494A:102013FE282025FC4020BBFE100011FCFD0411FC950459FC51041DFCE0884104 +494B:1020101029FE240042FCBC8410FC1000FEFC10089410585050201E00F1544252 +494C:020001007FFC40043C7824483C7824483D7806C01830EFEE01003FF80920FFFE +494D:08207E2008F8FF2814287F6A082AFF56098206C01830EFEE01003FF80920FFFE +494E:23FE220052FC4A0083FE7A9422A822C4FA0022FC2A84B2FC62843CFCE484088C +494F:2280228E54EA494A804A724A25EA2C4AF44A256AA54A754E25683788C4080408 +4950:00207E7C14C40838FEC62A2048FCA844118C06C01830EFEE01003FF80920FFFE +4951:102010202BFE24A840A8B97412221070FCA811469478588851501C20E0504180 +4952:7CF8048804F87C2041FC7D2405FC04282BFC16C41830EFEE01003FF80920FFFE +4953:1088108829FE248840F8B88810F81088FDFE108895245AFA50201C20E1FE4000 +4954:200023FE5050485083FE7A52225223FEF92420A82BFEB07060A83924E6220020 +4955:2108210855484B90811E77D425642554F5542754A5D4754825483554C46404C2 +4956:108810502BFE245041FCB954118C1174FD0411FC94205BFE50501C88E1044202 +4957:2108210857C84908811E7B9220242380F80827C82908B10865943954E1240342 +4958:10881088295426224088B88811541222FDFC1104950459FC51041D04E1FC4104 +4959:2044272455284D7E85107630254A251AF52C254CA51A762A24483408C4280410 +495A:3FF820082EE82AA82EE82AA82EE82AA82FE8228824483BB8210A4FEA45469FF2 +495B:108013DE288A25CA408ABBD210A61040FC8811F094245BFE50221D24E2A24040 +495C:200023DE52524BDE82527BDE22222222FAFA22222A72B2AA63263A22E22A0204 +495D:202023FE52504BFE82527BFE229422D8FA9222CE2A00B28462983CE2E482087E +495E:2108220827C854508FDE746427D42214F91427D42A14B3C862483C54E55408A2 +495F:2200227C52444A7C87447A7C2220237EFA9226522A6AB242627A3A02E2140608 +4960:2088208853FE48888014781223FE2210FAF422142AF4B2A862AA3AFAE2160422 +4961:2114255455544DFE855477D4245C2440F77E2510A5FE751025383554C5920910 +4962:0810FF7E08107F7C41047F2822101F28E14406C01830EFEE01003FF80920FFFE +4963:2C7844486C4844867D7800487C301048FD8406C01830EFEE01003FF80920FFFE +4964:11FC10202BFE262241ACB82011AC1040FCFC110496F4589450F41C8AE082407E +4965:202023FE5088485083FE7A5023FC2254FBFE22542BFCB25062D83D54E6520850 +4966:202021FE54404AFC81107AFE200026FCFA8422FC2A84B2FC62843A8CE50008FE +4967:2040207C50404BFE820279FC20A82154FA8821FC2A8AB0F8608838F8E08800F8 +4968:200023DE52524BDE82527BDE220222FAFA8A22FA2A02B2FA628A3AFAE2020206 +4969:228822A856A84BF0801E722425D42C14F41425D4A554754825683554C6140422 +496A:200023FE52024BFE82027BFE21082252FB9C21082A52B3DE60003AA4E2520452 +496B:2110211457D249108FFE729024502FF4F49427F4A49477E8248A37FAC4260042 +496C:108813FE2888242443FEB82011FC1124FDFC112495FC592450081DFEE0884058 +496D:14141010FEFE10105454383854549292313006C01830EFEE01003FF80920FFFE +496E:200023FE50504BFE82527BFE200023DEFA9223D22A52B3D2629A3A94E3D00010 +496F:200023FC52944A9483FC7910225223DCF81223CE2A40B3D2625C3BD0E25202CE +4970:2040202057FE4900810079FC20002088FBFE22AA2AAAB3FE608838AAE3FE0022 +4971:202023FE52024840819C790421DC2104F9FC21002BFEB40262AA3AAAE4140008 +4972:200827E854084DC8855E755225E42400F7E826A8A6A877E8241437F4C0240042 +4973:23FC204051F8490881F8790827FE2442FAA4228A2C7AB08061F83A88E070038E +4974:2020222253FE489081FE7B1025FE2110F9FE211029FEB10063DE3A52E2720206 +4975:20102010577E4D1085FE754425EE2744F56425DEA50075FE2728352AC04A0086 +4976:200023FE52224ACC82447BEE224422EEFB5422442A10B210625E3A50E25005FE +4977:244227722AA2511A8BEA722A23EA222AFBEA222A2BEAB14A67F23942E24A0444 +4978:F7FC124817FCFC4686ECF55416EC155457EC26C41830EFEE01003FF80920FFFE +4979:208023DE508A49D280A67BD0209C2050FBFE20502AAAB3FE62523AAAE3FE0002 +497A:200023FC3810211041107910A21023FEF8302050209021102A10341020500020 +497B:100010003DFC20204020BC20102013FEFC5010501050109014921912120E0400 +497C:108010803C8020FC4154BE5410541094FC941124122410441444188411280010 +497D:204020483A44224043FE7880A08020FCF9442144214822502A20345028880306 +497E:200023FE3A022484408078FCA0802100F9FC2004200423F42804300420280010 +497F:1008101C3DE021004100BDFE11201120FD3C11241124112415241A4412540488 +4980:200027BC3884208444A47A94A2942084F98C229424A420842884308422940108 +4981:2100211E391227D241147914A7D82114F91227D22112211A2914321022100410 +4982:204020203BFC220442047BFCA20023DCFA44235422CC22442ACC3554244408CC +4983:208820883BFE20A8402279FAA0242028FBFE204020FC21842AFC348420FC0084 +4984:102013FE3C2021FC4124BDFC112411FCFC2213FE1050109415881AA814C40082 +4985:208820503BFE202041FC7820A3FE2124F8A823FE200021FC2904310421FC0104 +4986:23DE22523BDE225243DE78A0A1FE2320FDFC212021FE200029FC30882070078E +4987:00103E50205020483C8820A43D2422422040FE8010F820084408FE0802500020 +4988:00403E40204020403DFE20403C40204020FCFE90109021104510FE1002FE0000 +4989:00003EFE20AA20AA3CAA20AA3CAA20AA20AAFEAE10C220824482FEFE02820000 +498A:00203E202020203C3C2020203DFE20002020FE2010A820A44522FE2202A00040 +498B:00883C8820883BD0209E3BE4209427D4F91421D421544948F9484A5402D40422 +498C:00007C7C44447C7C44447C7C410441044FE44104410441045FF4400440144008 +498D:7C7C44447C7C44447C7C4004440447F4480457C4418442044414441443F4400C +498E:7C7C44447C7C44447C7C40044FC440045FE4450445044504492450E440144008 +498F:00007C7C44447C7C44447C7C410442844464581C444444444444484450544008 +4990:00007C7C44447C7C44447C7C400440E45F0441045FE441047FFC410445144208 +4991:7C7C44447C7C44447C7C420442044FC4424442445FF442044504448448545008 +4992:7C7C44447C7C44447C7C40045FE44104420447C44C445444444447C444544008 +4993:7C7C44447C7C44447C7C4104410441F4410441044FE4482448244FE440144008 +4994:7C7C44447C7C44447C7C400440044FE448244FE448244FE440045FF44004400C +4995:7C7C44447C7C44447C7C4004482444445FF4444444447FFC444448444844504C +4996:7C7C44447C7C44447C7C410441045FF441044FE440044FE448244FE44824400C +4997:7C7C44447C7C44447C7C410442044FE44AA44AA44AA44AA45FF4400440144008 +4998:7C7C44447C7C44447C7C40044FE448244FE448244FE4491448A44A444C24481C +4999:7C7C44447C7C44447C7C410441045FF441047FFC40445FF44844444441544088 +499A:7C7C44447C7C44447C7C400440E44F0441045FF441044FE448244FE440144008 +499B:7C7C44447C7C44447C7C420447C448845FE441245FF441244FE441044304400C +499C:7C7C44447C7C44447C7C40045FF442044FE444247FFC40044FE448244FF44008 +499D:7C7C44447C7C44447D7C41044FE441045FF442844AA44A945494448449944008 +499E:7C7C44447C7C44447C7C400449F44444504449F44444484458444BFC4804400C +499F:7C7C44447C7C44447C7C410449244924555441044FE4410441045FF44004400C +49A0:7C7C44447C7C44447C7C40045FF44204451459A44AC445A45A9444945A84410C +49A1:7C7C44447C7C44447C7C41045FF4501447C4444447C4440447E4442447E4400C +49A2:7C7C44447C7C44447C7C5084488463E45084488457F47104522457F45014400C +49A3:7C7C44447C7C44447E7C41045FF4482444447FFC40044FE4482448244FE4400C +49A4:7C7C44447C7C44447C7C40044EE44AA444444AA451044EE44AA444444AA4510C +49A5:7C7C44447C7C44447C7C4004444444445EF444444EE45554644C444444544008 +49A6:7C7C44447C7C44447C7C410442844C6477DC41045FF4492445447FFC4004400C +49A7:7C7C44447C7C44447C7C400442044CE448244EE448244FE4428444945874400C +49A8:7C7C44447C7C44447C7C41045FF441044FE449244FE449244FE445444924410C +49A9:7C7C44447C7C44447FFC48244FE448244FE448244FE444044FC4544443945C68 +49AA:7C7C44447C7C44447FFC48244FE448244FE444044FF459146A944FD44054402C +49AB:7C7C44447C7C44447C7C400444445FF4444441044FE449245FF442844444482C +49AC:7C7C44447C7C44447C7C44045EF444544E5444545EB445045FF442844444482C +49AD:7C7C44447C7C44447C7C40E44F0441045FF44544492457D4444447C4445447C8 +49AE:7C7C44447C7C44447D7C4FE441044FE442045FF444444FE4545C67C4444447CC +49AF:7C7C44447C7C44447C7C40047F444844527C5F9444545F54442447547C94510C +49B0:783C48247A3C4BA47CBC4FC4554447C445444FE449244FE449244FE4411440F4 +49B1:7C7C44447C7C44447C7C41E45E2445444F8448844FC448444FE448245524656C +49B2:7C7C44447C7C44447C7C420447C448445FF46A244C944FF448044BE44A2453EC +49B3:7C7C44447C7C44447C7C520457746D54775455646F547C545654556466C4444C +49B4:7C7C44447C7C44447FFC4AA44FE441044FE441045FF444444FE441045FF4410C +49B5:7C7C44447C7C44447C7C40045FF449245FF4711C5BB455545BB455545BB4511C +49B6:200013FC1004420447C4484450844FE441245FF441244FE44104450442144008 +49B7:200013FC10044004410449244924555441044FE4410441045FF4400440144008 +49B8:200017FC00044FE449244FE449244FE441045FF45114515457D450545034400C +49B9:00207C2044204820482050204BFE482044204420442068205020402040204020 +49BA:00007C0045FE4820482050204820482044204420442068205020402040A04040 +49BB:00007DFC440448084810502048204BFE44204420442068205020402040A04040 +49BC:00407C4044404BF8484850484848484847FE444044A068A05110411042084406 +49BD:00007DF844084850482050104BFE482244244420442068205020402040A04040 +49BE:1040104020807C88450447FE7C02409040907C90449044907D124512020E0400 +49BF:00207C204420482049FC512449244924452445FC452468205020402040204020 +49C0:00407C40444048404BFE5040488048904490452045206A485244448441FE4082 +49C1:00807C80450049FC4A04540449E449244524452445E469245004400440284010 +49C2:00007DFC444448444844504448944888450044FC448468845084408440FC4084 +49C3:00007C0045FC4924492451244924492445FC4524452469245124412441FC4104 +49C4:00807C8044F849084B1054A0484048A04518460645F869085108410841F84108 +49C5:004078404BFC484053F8504863F852404BFC4844485468A850A0411042084406 +49C6:00907C90449048904BFC509048904890449047FE440068905088410841044204 +49C7:0040782048204BFE5040504060A050A249A44A984C906888508440A240C04080 +49C8:00007BFE48505050505061FC5154495449544954695C51844104410441FC4104 +49C9:00007DFC4524492449FC5124492449FC4420442045FC68205020402043FE4000 +49CA:00207D20452049FC4920522048204BFE4400440045FC69045104410441FC4104 +49CB:00007DFC4504490449FC5104490449FC4504450445FC6850509040924112420E +49CC:0008783C4BC0504452246128510048404BFE4888690853904060405041884604 +49CD:00887C8445024A224820505048884904460245FC450469045104410441FC4104 +49CE:00007CFC4484488448FC500049FE4902450245FE4502690251FE4102410A4104 +49CF:00407C4044FC48884950502048D84B2644F8442044F8682053FE402040204020 +49D0:00407C2047FE480049FC510449FC480045FC440844106BFE5020402040A04040 +49D1:004078204BFE52025404600053FE482048204920693C512042A04260443E4800 +49D2:00207C2044204BFE482051244924492446AA447044A868A85124422244204020 +49D3:00007DFC452449244974512449FC490445744554455469745104420442144408 +49D4:00207C20445048884944522249F848084450442044A46A82528A428A44784000 +49D5:00147812481057FE5010601053D24A524A524A546BD4500840EA471A42264042 +49D6:00487C44445E49E048285012486A49964448445E45E0682450284012406A4186 +49D7:01007D0045FE4A004DFC510449FC490445FC448044FC69085290406041984606 +49D8:010079F84A0853F0501067FE508049444E6848B06928566840A4412246A04040 +49D9:00407A484A48524853F8604050A049104A884C86689052A84294449442804100 +49DA:00207C1045FE480048FC508448FC480045FE4502457A694A517A4102410A4104 +49DB:004078204BFC5108509063FE52024C4448204BFC688050F84088410841284210 +49DC:00207C1045FE4910497C511449FE4914457C4510457C694451444244427C4444 +49DD:00207D24452449FC482053FE4800482045FC4524452469FC5020402443FE4102 +49DE:00007DFE452049FC492051FC4920492045FE440246AA6AAA52AA420240144008 +49DF:001E7DE04422491248945080482049CE4502450245CE69025102410241FE4102 +49E0:00207BFE482051FC512461FC512449FC48224BFE680853FE4108408840284010 +49E1:00107DFE4510497C491451FE4914497C4510457C4554697C5154427C4254444C +49E2:00007BFE4A00527C52446244527C4A004AEE4AAA6AAA52AA42EE420043FE4000 +49E3:00007DFC445049FC4954515449FC480045FC440047FE682050A8412442A24040 +49E4:00507A524954505053FE608850504BFE482049FC682053FE4050408841044602 +49E5:002078204BFE502051FC612451FC492449FC48226BFE5042402442A2428A4478 +49E6:000E7BF048445224510863F852084BFC4A044BFE6A0252AA42AA450244144808 +49E7:010478884BFE482051FC502063FE5054499248904BFE689050D4438A409641A2 +49E8:00507A524954485053FE5088605053FE482049FC48206BFE50A8412446224020 +49E9:00087B884888511057DE629452A44B944A944B946A9452C84388469440A440C2 +49EA:002078104BFE4A1052FE5254625452BA4A284A444A826A2052FE4444443848C6 +49EB:00207BFE480051FC510461FC50004BFE4A0249FC684053A440D8433440D24330 +49EC:004078204BFE520251FC6148525049FC4B0449FC690451FC410441FC40884104 +49ED:004078804BFE5222528A625253264A524AAA4BFE6840502442A2428A44884078 +49EE:00207BFE4A2251FC502060F8502049FC482049FC695451FC404042A4428A447A +49EF:01F07A104FFC520453FC622453B84A2249FE4A106FFC524443FC40D0414A463E +49F0:0406E438AF08A910B224AFBCCA88AA94AFBEAA8AAA88AFACC02A954A95488018 +49F1:20502048208020FEFD90269024FC2490249024FC25902690449040FE80800080 +49F2:00507C48108010FE1190129010FCFE90109010FC10901090109010FE10801080 +49F3:08500848088008FE49904E9048FC4890489048FC48904E905890E0FE00800080 +49F4:105010481080FEFE11901290FCFC0490049048FC28901090289044FE82800080 +49F5:105010481080FEFE9390129010FC2890289028FC28904A904C9088FE00800080 +49F6:090008801FFC30805FF890801FF810801FFC12000100FFFE0000082010102008 +49F7:205020483C8044FEA990129028FC4490829030FC08900090609010FE08800080 +49F8:10501048108010FEFD90129010FC10907C9044FC4490449044907CFE44800080 +49F9:010000803FFE2250224824FE24902D9036FE2490249024FE4490449084FE0480 +49FA:082808240840FF7E10C81148207E3E486248A27E2248224822483E7E22400040 +49FB:08500848148022FE4190BE9000FC00903E9022FC2290229022903EFE22800080 +49FC:1050504850807CFE5190929010FCFE90009000FC7C904490449044FE7C804480 +49FD:0628782408404A7E2AC82D48087EFF4818481C7E2A482A484848887E08400840 +49FE:10501048284044FE82907D9012FC1090FE9010FC10907C90449044FE7C804480 +49FF:242824247E40247E24C8FF48007E7E484248427E7E48424842487E7E42400040 +4A00:20501048288044FE9190129054FC38901090FEFC10903890549094FE10801080 +4A01:7E20243E1848FFA829104A28984609001FFC30805FF890801FF810801FFC1000 +4A02:0620382008A47EA819202C504A8809041FFC30805FF890801FF810801FFC1000 +4A03:00287E2442407E7E42C87F48087EFF488148107EFF4822486448187E2440C240 +4A04:082814242240497EBEC80548087EFFC814487F7E5548634841487F7E41407F40 +4A05:10281024FE40107EAAC84548827E7D4844487C7E44487C481048547E92403040 +4A06:49202A3E7F4849485DA86B10492841460A001FF831005FF091001FF011001FF8 +4A07:285024487EFEC9907EFC48907EFC48907EFE40807DFC0488285010202858C586 +4A08:20501048FE8082FE7D90569098FC7C90C4907CFC44907C9044907CFE28804480 +4A09:002877245540777E55C87748557E77482248557E1048FF482248647E1C40E340 +4A0A:08801FFC3080DFF810801FFC14283F7E64C8BF7E24483F7E10041E7C12442244 +4A0B:00003FF801007FFE41029D7401001D70000000F03F00020003F87E02020201FE +4A0C:00003FF801007FFE41029D7401001D7000001FF000007FFC044008441044603C +4A0D:3FF801007FFE41029D7401001D70000008203FF808200820FFFE102020204020 +4A0E:3FF801007FFE41029D7401001D7000007F1001107F1040207F2401420AFE0442 +4A0F:3FF801007FFE41029D7401001D704080208009FC12042448E04020A023182C06 +4A10:3FF801007FFE41029D7401001D70010006C01830E7CE00001FF010101FF01010 +4A11:3FF801007FFE492284140100FFFE01007FF801083FF821003FFC0284044C1830 +4A12:3FF801007FFE41029D7401001D7000007EFC224412240A14122422444A940408 +4A13:3FF801007FFE41029D7401001D7000003FF8200827C8244827C820083FF82008 +4A14:00003FF801007FFE41029D7401001D70000011100920FFFE044008423042C03E +4A15:3FF801007FFE41029D7401001D70000011FC482020200BFE7020102010A00040 +4A16:3FF801007FFE41029D7404007FFC08001FF028104FF088100FF0081008500820 +4A17:3FF801007FFE41029D74000000FC7F00121009203FF00040FFFE010005000200 +4A18:3FF801007FFE41029D7400001FF010101FF010101FF010101FF004421842E03E +4A19:3FF801007FFE41029D7401001D700000203813C08040484017FEE040204023FC +4A1A:3FF801007FFE41029D7401001D7008001FF86488090836280110489487F20000 +4A1B:3FF801007FFE41029D7401001D700000100CFDF0110039FE5510921012101410 +4A1C:3FF801007FFE41029D7401001D7000003E7C22443E7C22443E7C22444A948508 +4A1D:3FF801007FFE41029D74000001003FF80100FFFE10101FF010101FF010101030 +4A1E:3FF801007FFE41029D74000001F87F0001001FF011107FFC412441F45E144008 +4A1F:3FF801007FFE41029D7401001D702000104083F8404017FC2040E3F820402FFE +4A20:3FF801007FFE492284141FF010101FF010101FF008001FFC2104528414541FE8 +4A21:3FF801007FFE41029D7401001D7000001FE0004051944924551442047FFC0004 +4A22:3FF801007FFE41029D7408207FFC08200FE008200FE00820FFFE124014201FF8 +4A23:3FF801007FFE41029D7408207FFC08200FE001003FF821083FF80100FFFE0100 +4A24:3FF801007FFE41029D7401001D702040104007FCF44417FC144417FC280047FE +4A25:3FF801007FFE41029D7409001FF831005FF091001FFC10003FF0082007C0F83E +4A26:3FF801007FFE41029D7402003FF808207FFC41043FF8040007F0081010502020 +4A27:3FF801007FFE41029D7401001D7020201050FE880526441028FC2E08F0704008 +4A28:3FF801007FFE41029D740080210013F80208F3F8120013FC120413FC280047FE +4A29:3FF801007FFE41029D7401001D7020201020FDFC092411FC392455FC90201020 +4A2A:3FF801007FFE41029D74000011FC112411FCFD2411FC10201DFCE02043FE0000 +4A2B:3FF801007FFE41029D74000001007FFC11102BA845641918E3E60E4001800E40 +4A2C:3FF801007FFE41029D7401001D702000111081104FBC1110E3B8255429122110 +4A2D:00107F100854FFB888906B7C08446B44007C7E440044FF7C104422447F540148 +4A2E:3FF801007FFE49229414FEFE10107C7C1010FEFE10103FF800081FF800083FF8 +4A2F:3FF801007FFE41029D7400207BFE482051FC612451FC492449FC687050A84124 +4A30:3FF801007FFE49228414211017FC911041F048400BF81248E3F820402FFE2040 +4A31:3FF801007FFE41029D74120027FC42088BF8120833F8510093F8151010E0171E +4A32:00207F20083CFFC488886B7E08526B52007EFF90082C7F2A5528554A554A4386 +4A33:3FF801007FFE41029D7400003EF822883EF822883EF822883EF814502692450E +4A34:3FF801007FFE41029D740000550836087F7E14087F4808283E2808080F287810 +4A35:3FF801007FFE4922A7FC10A017FC84A447FC520813F82208E3F8204027FC2040 +4A36:3FF801007FFE41029D7408201FF000104FE44AA449647FFC0440FC7C24444444 +4A37:3FF801007FFE41029D74000011087BCE11083B88557EBF9220943F88209421A2 +4A38:3FF801007FFE41029D7400187BE0495053F8604053F8480849F86840529444F4 +4A39:3FF801007FFE41029D74108011FC228828706B8EA9FC29AC297429FC28202154 +4A3A:3FF801007FFE49229FF404400FE000007C7C1010FEFE92925454FEFE28287C7C +4A3B:7C7C1010FEFE92927C7C54547C7C00007C7C1010FEFE92927C7C54547C7C0000 +4A3C:104411FEFE5410487CFE1190FEFE00907CFE44907CFE44807DFE4444543849C6 +4A3D:04407C7C04403C7804407C7C044004403FF0001000103FF02000200420041FFC +4A3E:010000803FFE2000212021202F3C212021202738212021204F3C412081200120 +4A3F:00003FF801000200FFFE08203018C44604407C7C04403C7804407C7C04400440 +4A40:04407C7C04403C7804407C7C04401FF010101FF010101FF010101FF008201010 +4A41:04407C7C04403C7804407C7C04403FF002007FF802020DFE70401C78F1C41C3C +4A42:0020FE2010202050FE50AA88AB44BA22AA20AAF8BA08AA08AA10FE1082200020 +4A43:0010FE9010902092FE92AA94AAF4BA98AA90AA90BA90AA92AAB2FED2828E0000 +4A44:0000FE7C10442044FE54AA54AA54BA54AA54AA54BA10AA28AA28FE4A828A0106 +4A45:0010FE10101020FEFE92AA94AA90BAFCAAA4AAA4BAA8AAA8AA90FEA883440282 +4A46:0040FE401040207EFEA0AAA0AB20BA3EAA20AA20BA20AA3EAA20FE2082200020 +4A47:0010FE1010102010FE1EAA10AA10BA10AAFEAA82BA82AA82AA82FE8282FE0082 +4A48:0040FE40107E2080FF7CAA44AA64BA54ABFEAA44BAA4AA94AAFEFE0482280010 +4A49:0014FE1210FE2010FE10AAFEAA92BA92AAFEAA92BA92AAFEAA92FE9282920086 +4A4A:0020FE1010FE2082FE40AA4EAA6ABAAAAAAAAAAABB6CAA28AA4AFE4A828A0106 +4A4B:0010FE0810FE20A4FEA4AAA4AAFEBAA4AAA4AAF6BAACAAB4AAA4FEA483240024 +4A4C:0028FE241040207EFEC8AB48AA7EBA48AA48AA7EBA48AA48AA7EFE4082AA012A +4A4D:0010FE1010FE2010FEAAAA44AA82BB7CAA44AA7CBA44AA7CAA10FE5482920030 +4A4E:0010FE1010282044FE82AA7CAA00BAEEAAAAAAAABAEEAA44AA44FEAA82AA0112 +4A4F:0024FEFE10242000FEFEAAAAAAAABAFEAA14AAFEBA90AAD2AAACFEAA82960122 +4A50:22202220FF20227E3E4008807F3C490449087F100820FFC008420842083E0800 +4A51:2200227EFF0222023E02083E7F20492049407F7E0802FF820802080208140808 +4A52:2200227EFF1022103E1008107F1049FE49107F100810FF900810081008500820 +4A53:28802880FC8028FE390212427C42548254A27D1213FAFD0A1002100210141008 +4A54:280028F8FE882888388811067E0055FC54847C841048FE501020105010881306 +4A55:28002840FD9E2912391211127D12551255127D12115AFD941110101010101010 +4A56:28202820FE2028A838A410A27D22552056247C241028FE081010102010C01300 +4A57:280028FCFE842884388410FC7C84548454847CFC1084FE841104110412141408 +4A58:22002200FF7E22083E1008107F24494449787F080810FF940822087E08220800 +4A59:28202810FE1029FE382010207C44548455F87C101020FE44108211FE10821000 +4A5A:2804281EFDF02910391011107D1055FE55107D101110FD08110A114A11A61112 +4A5B:28402820FC282808380810487C54555255527D601260FC4410C41144123C1000 +4A5C:28202820FE20282039FC11247D24552455247DFC1124FF241124112411FC1104 +4A5D:2808281CFDF02950395011507D50555055507D481148FD681154127412521400 +4A5E:28202820FE202820383E10207C20542055FC7D041104FF041104110411FC1104 +4A5F:28202820FDFE282039FC10247DFC552055FE7C22102AFC541050108811041202 +4A60:50005006FBB8508870882108F93EAB88A888FA882288F93E21002280247E2800 +4A61:28202820FC202BFE382010207D24552455247EAA1020FC501050108811041202 +4A62:5104510EF930512077E02120F93EA964A9A4FF242124F9242124212425442284 +4A63:28202820FC502888390412FA7C20542057FE7C201128FD241222142210A01040 +4A64:280028FCFE84288438FC10847C8454FC54847C8410FCFE50105010921112120E +4A65:5004500EFBB8508870882128F92EABA8A8A8FAA822A8F93E21002280247E2800 +4A66:108020FC6910AA9028602890230C04407FFC044007C001001FF01110FFFE0100 +4A67:28402820FDFE2800380010FC7C00540054FC7C001000FCFC1084108410FC1084 +4A68:280028FCFE8028F8388010F87C8057FE55407D241128FF101108114411821100 +4A69:50405020FBFE520275042100F9DEAA52AA52FB52249AF894211021122212240E +4A6A:28202810FDFE29023A0410F87C88548854F87C801080FCFC1084108410FC1084 +4A6B:500053FEF820502073FE2222FA22AB32AAAAFAAA2376FA6622222222222A2204 +4A6C:28202820FDFE282038FC10407DFE548855247E2210F8FC2011FE102010201020 +4A6D:28202820FDFC2850388811047FFE540855E87D281128FDE81128100810281010 +4A6E:280029F8FC08280839F810087C0857FE54207E221174FCA81124122210A01040 +4A6F:500053FCF8085010702023AEFAA2AAAAAAA4FAA423AAF83220A0204027FE2000 +4A70:280028F8FE88288838F810007DFE548854F87C8810F8FE88109E13E810081008 +4A71:504050A0F910520875F62000FBC4AA54AA54FBD42254FA5423D42244225422C8 +4A72:28402820FDFE2948394811FE7D48557855007DFC1144FD4811281210122814C6 +4A73:28402820FDFE292238A411287C50548855047CF81088FC881050102010D81306 +4A74:2880289EFC9229D23892109E7C9255D255527D5E1152FD5211D21022102A1044 +4A75:28002BFEFE2228203BFE10207DFC552455FC7D2411FCFC2013FE102010201020 +4A76:28202924FD2429FC382011FE7C00542055FC7D241124FDFC1020102413FE1102 +4A77:28202810FDFE2884384811FE7D02562454107DFE1040FC7C1044108410941108 +4A78:28882888FDFE2888380011FE7C88548854F87C8810F8FC88109E11E810081008 +4A79:280028FEFE00287C3844107C7C0054FE54827CAA1092FEFE1092109210921086 +4A7A:50905088F9045242748821FCF804A800ABDEF8422252F94A22522042214A2084 +4A7B:280029FEFD2029FC392011FC7D20552055FE7C0212AAFEAA12AA120210141008 +4A7C:28202A20FD7C28A4381810E67F10557E55107D7C1110FDFE1110111012FE1400 +4A7D:500053FEFA00527C72442244FA7CAA00AAEEFAAA22AAFAAA22EE220023FE2000 +4A7E:50405020FBFE520072482248FBFEAA48AA48FA482278FA002554252A2A2A3000 +4A7F:282029FCFC2028883BFE10887DFC550455FC7D0411FCFD0411FC108811041202 +4A80:282029FEFF0228F8388810F87C8054FC54847CFC1000FE2010541142114A1238 +4A81:28502952FCD4285039FE10887C5055FE54207CFC1020FDFE1050108811041202 +4A82:52085208FFBE520872082FBEFAAAAAAAAAAAFBAE2208FF1C2AAA324822082208 +4A83:51085088FBC8501073DE2264FBD4A814ABD4F8542094F8E82388209422942122 +4A84:28882888FDFC2888388813FE7C2055FC55247DFC1124FDFC1000108811041202 +4A85:280029FCFD54295439FC10807DFE564255F27D521152FDF2104A13FA100A1004 +4A86:285029FCFD5429FC395411FC7C0055FC54007DFC1104FDFC1088105013FE1000 +4A87:28882BFEFC8828243BFE10207DFC552455FC7D2411FCFD24100811FE10881058 +4A88:2810287CFE54297C391010FE7C00577C55447D7C1140FD7C1144117C1280147E +4A89:51245248F924500073FC2294FA64AA94ABFCFA482368FA48236A224A22462362 +4A8A:51105090FBDE5010725E2182FBDEA810ABDEFA5023DEFA5023DE2250225222CE +4A8B:2810287CFE54297C391010FE7C44577C55447D7C1144FD7C112811441280147E +4A8C:51F05210FBFC560473FC2224FBB8AA22A9FEFA1027FCFA4423FC20D0214A263E +4A8D:53DE5252FBDE525273DE2222FAFAAA22AAFAFAAA22FAFAAA22FA227222AA2226 +4A8E:522253FEF89051FE731025FEF910A9FEA910F9FE2100FBFE228A237622522276 +4A8F:101010107E1022FEFF9200927E9242AA7EAA08CA7E82088248827E82088A0884 +4A90:104010207C282408FE0800487C5445527D5211607E60104450C47D44123C1000 +4A91:102010107E1022FEFF8200847E4042447E4808507E60084248427E42083E0800 +4A92:102010107E0022FEFF1000107E1042107E7C08107E10081048107E1008FE0800 +4A93:102010207E202220FF3C00207E2042207EFC08847E84088448847E8408FC0884 +4A94:102810247DFE2420FE2001FC7D2445247DFC11247D2411FC51247D241124110C +4A95:108010807CFE2502FE2200AA7C7244227DFE10227C7210AA51227C22100A1004 +4A96:104010407E7E2280FF7C00447E7C42447E7C08207E3C084448A87E10082808C6 +4A97:100011DC7D442544FF4401DC7D0045007DDC11147D1411D451087D0811141122 +4A98:100010FC7C842484FEFC00847C8444FC7C0011FE7C101090509C7C901150123E +4A99:101410127DFE2410FEFE00927CFE44927CFE10927C0411FE50447C241024100C +4A9A:100011FC7D0425FCFF0401FC7C0047DE7C4212527D4A10C6535A7C42114A1084 +4A9B:101E10F07C922454FEFE00547C9245007CFE10927C9210FE50927C9210FE1082 +4A9C:104010787C8825FEFEA400D27CFE44807CBC10807CBC108050BC7D24113C1224 +4A9D:104411FE7C542448FEFE01907CFE44907CFE10907CFE108051FE7C44103811C6 +4A9E:00003FF80100FFFE028004401830E44E04407C7C04403C7804407C7C0440FFFE +4A9F:100011F8FE88105010207C50558C545055DC545055DC5C5011DC105013FE1000 +4AA0:1640F87C9084FE2832205250968C100004407C7C04403C7804407C7C0440FFFE +4AA1:11201CBE704250947D9034A85C46900004407C7C04403C7804407C7C0440FFFE +4AA2:12201D3E70425094531051287D46145035DC345055DC985011DC105013FE1000 +4AA3:1220113E1042FC94131011287C46545055DC54505DDC305051DC905013FE1000 +4AA4:281E29F02892EE5429FE2854EE92290028FE2892EE9228FE28922E92F0FE4082 +4AA5:10001EFC1044FF2881107E2800C67E2842EE7E2842EE7E2842EE7E2824FE4200 +4AA6:200010007CF8002044202820FE2000207C20442044207C20442044207DFC4400 +4AA7:202010207C2000A044AC28B4FEE401A47CA444B444A87CA244A244827C7E4400 +4AA8:204010407C4000FC44842904FE0400847C44444444447C04440444047C284410 +4AA9:202010207C20005044502888FF4402227C2044F844087C08441044107C204420 +4AAA:10007E7C124422444A7C844401003FF80820FFFE00001FF010101FF010101FF0 +4AAB:200010FE7C00005244A42928FE94004A7C0044FE44107C10441044107DFE4400 +4AAC:202010207DFE0020442029FEFF0202047CF8441044207DFE442044207CA04440 +4AAD:202010107CFE000044442828FEFE00007C7C444444447C7C444444447C7C4444 +4AAE:204010407CFE012244AA28FAFE4200947D4844FE45227EAA44FA44427C944508 +4AAF:08202AA44D28145022887FFE41029FF404407FFC00001FF010101FF010101FF0 +4AB0:2040102079FC0088485033FEFC0001FC790449FC490479FC48204A947A8A4C7A +4AB1:000001FEFC20044005FC050405047DFC410441FC4104450459FC608841040202 +4AB2:000000FEFE10282028FC2884288428FC288428FC28842A844CFC484880840102 +4AB3:000000FE7E10122012FCFF84128412FC7E8412FC1084108420FC204840848102 +4AB4:080008FE08107F20497C08440844147C1444147C14442544267C440080280044 +4AB5:00007EFE0410242024FC248444847FFC0C8414FC1484248444FC844814840902 +4AB6:00007CFE4410442044FC7C84448444FC7C8444FC448444844EFCF04800840102 +4AB7:200020FE40107E2082FC02847A844AFC4A844AFC7A844A8402FC024814840902 +4AB8:00007EFE421042207EFC4884488448FC7E8448FC488448844AFC4A4866844302 +4AB9:00007EFE0810082010FC1484328451FC908410FC108400840EFCF04840840102 +4ABA:100010FE10107E2010FC10841084FEFC108410FC2084288444FCFE4842840102 +4ABB:100010FE20104420FEFC0284248424FC2484FEFC2484248424FC444844848502 +4ABC:100010FE9210922092FC9284FE8410FC108492FC928492849EFCF24800840102 +4ABD:00007CFE4410442044FC7C840084FEFC208440FC7C84048404FC044828841102 +4ABE:0010FF10082810287E44428242087E1042647E08421242647E08243042C08100 +4ABF:080008FE10107F20417C41446544557C4944497C55446544417C7F0041280044 +4AC0:00007EFE421042207EFC428442847EFC408448FC44844A8452FC604840840102 +4AC1:100011FE20207C4045FC45047D0445FC45047DFC4504450445FC7C8845040202 +4AC2:100010FE3E104220A47C18441044247CC8441F7C2144D2440C7C08003028C044 +4AC3:00007F7E401040205E7C404440447F7C5044517C5A445444527C910098281044 +4AC4:440024FE281000207CFC4484448444FC7C8428FC288428842AFC4C4888840102 +4AC5:100008FE7F104120497C084408447F7C0844187C1C442A44497C880008280844 +4AC6:0400053E048804107FBE44224422753E5522553E5522522252BEA680899410A2 +4AC7:0C0030FEC6101820637C0C44F044007C7E44427CFF444244FF7C42004A284444 +4AC8:0800497E491049207F7C08441444227C514488FC08447E44027C040004280844 +4AC9:0C0030FEC210142048FC3084C88414FC2484CCFC14842484C4FC044828841102 +4ACA:0000FEFE08101020347C52449144107C00447E7C42444244427C42007E284244 +4ACB:0C0070FE1010FE2038FC5484928400FC1084FCFC2484448428FC10482884C502 +4ACC:080010FE7F104920497C7F444944497C7F44147C2444FF44047C040004280444 +4ACD:140014FE1410F720147C14441444777C1444147C1444F744147C140014281444 +4ACE:0000F77E11105520227C55448944107C0044F77C11445544227C550089281044 +4ACF:2200227EFF902220227C3E442244227C3E44227C2244FF44007C140022284144 +4AD0:2200227E22102220F7FC22442244667C7744AAFCAA443244227C220022282244 +4AD1:100010FEFE10102028FC4484FE8404FC748454FC5484748454FC044814840902 +4AD2:000006FE781048207F7C48444544537C6144007C7E4442447E7C42007E284244 +4AD3:200010FE7C10002044FC24842884FEFC008400FC7C84448444FC44487C844502 +4AD4:20002F7EF5102520757C2544F544297C2344087C0844FFC4147C2200412880C4 +4AD5:200010FEFE10002044FC2884FE8482FC10847CFC5484548454FC5C4810841102 +4AD6:220022FEFF1022203E7C22443E44227C2244FF7C40445444627C40007E280044 +4AD7:0000777E51105120517C77444044407C7744417C49447544427C420045284944 +4AD8:00007CFE44107C2044FC7C8420847EFC928452FC6A8442847AFC024814840902 +4AD9:080008FE7F1008202A7C2244FFC4227C2A44087C7F441C442A7C490089280844 +4ADA:00003EFE221022203A7C2A442A447F7C41445D7C554455445D7C410045284244 +4ADB:20002F3E210841105FBEC82248224FBE5222423E5FA24222453E448048945022 +4ADC:08002A3E2A08AA90CCBEDDA2FFA2AABEAAA2DDBEFFA299A288BE8F80F0940022 +4ADD:060078FE08100820FF7C1C442A44497CBE44227C22443E44227C22003E282244 +4ADE:440024FE28100020FEFC108410847CFC108410FCFE840084AAFCAA48AA840102 +4ADF:00007CFE441044207CFC0084FE8482FCFE8482FCFE848284FEFC284844848502 +4AE0:180060FE0C1070200CFC70840084FEFC108434FC528490847CFC44487C844502 +4AE1:2200147EFF901420147C7F441544FFFC15447F7C14443644557C948014281444 +4AE2:03007C7E471044205F7C554456445C7C5544537C50445744557C5500A9A80044 +4AE3:0E00F0FE2210922044FC20844484F8FC108424FCFE841084FEFC284844848302 +4AE4:0000FF7E811000207E7C42447E44427C7E44107C0844FF44007C240042288144 +4AE5:080010FE7F104920497C7F44497C49447F7C10441A7C2CA82FC44882480287FE +4AE6:0800083E7F080810083EFFA22022413EFFA240BE00227F22553E55005794FC22 +4AE7:100020FE7C1044207CFC44847C8410FCFE8428FC548492847CFC104810841102 +4AE8:1200123E12087A1013FE7CA210A2FCBE22A23ABE29222922293E4A805A9484A2 +4AE9:1000223E7F08421094BEF7A20822363EC92230BEC4221922623E0C003014C022 +4AEA:100010FEFE101020BAFC5484BA8410FCBA8454FCBA84108428FC244842848102 +4AEB:08007F7E4910FFA0497C7F4408447F7C49447F7C1044FF44217C72000C28F344 +4AEC:0000F7BE2108A510F7BE6322B5A2213E7FA240BE40A27FA240BE40807F9440A2 +4AED:10007CFE54107C2010FCFE8400847CFC44847CFC44847C8444FC7C4828844502 +4AEE:00007F7E01103F20017C7F440044777C2544F77C0244FFC4427C22002A280444 +4AEF:4100211E0FE4F108429E44527FF2505E5752555E55525752555E5040A14C0092 +4AF0:0020F92420A843FEF8A889248A22F9048904F9DE8A448D54F89E010452048C04 +4AF1:00007FBE08087F9054BE54A254A241BE00227FBE08227FA254BE5480549441A2 +4AF2:0280025E7FC442085E1E42925E92571E5D5242DE88520492545E51408F0C0012 +4AF3:00007F7E551055207F7C20447F44917C7D44557C55447D44117C7D0005280244 +4AF4:2200223EF7882210773EAAA22262003E7F22003EFFA20822493E4880A8941022 +4AF5:10007F3E49086510533E49227F22083EFFA2A2BE4922FFA2203E3F0041148322 +4AF6:20802A9EF5E42A8871DE6AB2A4922A9E2092041E04127FD20A1E1100208C4052 +4AF7:0000FFBE0808EB90AABEEBA20822FFBE0822EBBEAAA2EBA2083E0F80F8144022 +4AF8:00007FDE404A434A5C4A444A5F4A554A55525F52446A45445F404922801E0000 +4AF9:00007FC0407E43485C4844485F48554855485F484448457E5F404922801E0000 +4AFA:100011FC1104FD3411C4114421F42954295429F4514455545DF4851602060402 +4AFB:00007FDE405243525C52445E5F52555255525F52445E45405F404922801E0000 +4AFC:00107F1041104D7C711451147D1455FE7D10512855247D4444804042803E0000 +4AFD:00007FC6405843485C4E44585F4E5578554A5F4A444A45465F404922801E0000 +4AFE:00407C2044284C087448545455527D6256607C4454C4553C52007D004482807E +4AFF:001E7FCA404A434A5C5244665F40555E55525F52445E45525F404922801E0000 +4B00:00487C4844884CBE752A55CA544A7C8A54AA7DF25412542A52447D004482807E +4B01:00107F08417E4D42712051247D3855207D225122551E7D0044804042803E0000 +4B02:00287C2444204DFC7520552455247D2855287D105594552C52447D004482807E +4B03:00107F0841004D7C710051447D2455287D28511055FE7D0044804042803E0000 +4B04:00147C1244104DFE7510551455147DD455087D0A551A552652427D004482807E +4B05:00407C4045FC4C847484552856107D0857DE7D4A554A5652525A7DE44482807E +4B06:00447D8444944C9477F4549455947DD456B47C945484549452887D004482807E +4B07:440025FC290401347DC4454445F445547D5429F4294429542BF44D168A060402 +4B08:00007F4441284D00717C51447D44557C7D285128554A7D8644804042803E0000 +4B09:00207C2045FC4C20742057FE54507C5055547D525652549052907D304482807E +4B0A:00107F1041FE4D10715451547DBA55107D28512455427D8044804042803E0000 +4B0B:00207C2044F84C2075FC548855447C7854887D505420545052887D084482807E +4B0C:10001DFC11047D3455C4594471F455544D5441F45D44555457F4951622060402 +4B0D:00807C8044FC4D54765454A455547C8854207C145552554A52387D004482807E +4B0E:00147C1247FE4C10741055D455547D5455CC7C0A54CA571652227D404482807E +4B0F:00207F10417C4D44712851FE7D00557C7D445144557C7D4444804042803E0000 +4B10:00187CE044204DFC747054A855247C4057FE7C8855905470538C7D004482807E +4B11:007C7F54417C4D54717C51007D7C55447D7C5144557C7D4444CC4042803E0000 +4B12:00207DFC45044C507488552454507C8855067CF85408545052207D50448A807E +4B13:00207F1041FE4D44712851FE7D00557C7D44517C55447D7C44804042803E0000 +4B14:00207C5044884D0474F8540055C47D5455D47D5455D4554453547D484482807E +4B15:00007DFC45044D3475C455447DF4555455547DF4554455547DF4491682060402 +4B16:00107F20417C4D44717C51447D7C55007D7C5110557C7D1044FC4042803E0000 +4B17:00007CF844887C9844E87CA800A8FEF840A87EF8AAA82AAA4AAA92FA2A864502 +4B18:00207DFC44004CF8748854F854007DFC55047D7455545574530C7D004482807E +4B19:000E7F7041124D447120517C7D9055107DFE511055547D7C44804042803E0000 +4B1A:00007DFC45204DF8752055F855207DFC54047D545554540452287D104482807E +4B1B:01FC7D2445FC4D2475FC54A854A87FFE54A87CA855FC542053FE7D2044A2807E +4B1C:00407C2045FC4C507524555455FC7C2055FC7D4455545574530C7D004482807E +4B1D:00287F7C41284DFE7110517C7D54557C7D54517C55007D4444824042803E0000 +4B1E:00207DFE44204CFC740055FE54027CF854207DFE540455DE53547DCC4482807E +4B1F:00827D7A452A4DAA754A559A55427CA255F27C4A55F2555252E67DF84482807E +4B20:00003FF801007FFE41029D7401001D7000047FE808247212120EFFD0122A221E +4B21:02003FD00260FFFE1C10EFF008100FF000047FE808247212120EFFD0122A221E +4B22:0800080014FC122429247E24A2243E2422243E242024284424442A8433282210 +4B23:082008201420127E29407E80A23C3E0422083E102020284024422A42323E2000 +4B24:00003FFC200420043FFC208023602C9837F6241027F0241027F4446845188604 +4B25:04200210013EFFC00022011A02860D603FF8C8260FE008200FE808D00A300C08 +4B26:080008781448124829487E86A3003EFC22443E442028282824102A2832442182 +4B27:0800080014FC120029007E00A3FE3E5022503E502050285024522A92328E2100 +4B28:10801080288025FE5202FC8244827DE244A27CA2412A512A4A1A540264144008 +4B29:00007FFC010003600D18710402800D603FF8C8260FE008200FE808D00A300C08 +4B2A:0800080014FE121029107E20A2203E6822643EA22122282024202A2032202020 +4B2B:0804081E14F0129029907E90A2903EFE22903E9020902888248A2AAA32D6208A +4B2C:10201020282025FC5324FD2445247D2445247FFE402050504850548865044202 +4B2D:00007DFC444444447C94010802800D603FF8C8260FE008200FE808D00A300C08 +4B2E:10081048292825285328FD0845087D0845087D08414851944914542264424082 +4B2F:0810081014101210291E7E10A2103E1022FE3E822082288224822A8232FE2082 +4B30:080008FE1422122229227E22A24A3E4422803E7E2042284224422A42327E2042 +4B31:102010202820242053FEFC7044A87CA845247D24422250F84820542064204020 +4B32:08400840148012FC29047E04A2F43E9422943E9420F4289424042A0432282010 +4B33:10201020292424A452A8FC2045FC7C2044207C2043FE50204820542064204020 +4B34:10201020282025FE5220FC2044207DFC44707CA840A851244924562264204020 +4B35:10201010281025FE5220FC2444447CF844127C22404451884810542864444182 +4B36:080008FC1484128429FC7E84A2843EFC22A23EA42098289024882AA432C22080 +4B37:08200820147C128429487E30A2203E4823903E3E204229A424182A1032602180 +4B38:7F7C08041E282210542809443280CD603FF8C8260FE008200FE808D00A300C08 +4B39:100011FE282024205248FC8445FE7C2244207C2041FC50204820542067FE4000 +4B3A:110410842888240053FEFC2044207DFC44207C2043FE50204820542064204020 +4B3B:10281024283E25E05220FC3C45E07C20443E7DE0402250244818546A65864002 +4B3C:0800087C14441244297C7E00A2FE3E8222823EFE2082288224FE2A82328A2084 +4B3D:088408441448120029FC7E84A2843E8422FC3E482048284824482A8A328A2106 +4B3E:10881048285025FC5224FC2445FC7D2045207DFE40225022486A54A465204020 +4B3F:100011FC2904250453FCFD00451C7D70451C7D70411E51F0491055126512420E +4B40:100010782A2825285128F82848787B284928792A412A512649225A806C7E4000 +4B41:100CFEF010801CFEF088110832880D603FF8C8260FE008200FE808D00A300C08 +4B42:100010F82888248852F8FC0045FC7D2445247D2441FC510049005502650240FE +4B43:10201020285024885144FA2249F878084850782040A452824A8A5A8A6C784000 +4B44:102010202BFE242053FCFD2445FC7C2045FC7C2443FE502449FC542064A04040 +4B45:100011FC290425245324FDFC45247D2445747D54415451744904550465FC4104 +4B46:7F2048307E2842247E2049207E800D603FF8C8260FE008200FE808D00A300C08 +4B47:1080108028FC25045244FC4447FC7C4445F47C0441F4511449F4540464284010 +4B48:10101010287C271451FEF9144A7C7A104F7C791041FE55104A10530064FE4800 +4B49:1020102028FE244052FCFD1046FE7C0044FC7C8440FC508448FC548464944088 +4B4A:108810882BFE248852A8FC2045FC7D2445247D2443FE50204850548865044202 +4B4B:1100117C294426445244FE7C4A107A104AFE7A38425452544A945B126A104210 +4B4C:107CFF44107C7E44427C7F44028C0D603FF8C8260FE008200FE808D00A300C08 +4B4D:1020102029FC24205220FCF844207C2045FC7C0041FC51544954555467FE4000 +4B4E:10481148294827FE5148F9484978790049FE782043FE507048A859246E224020 +4B4F:1040102029FE25025102F9FE4900790049FE79AA41AA52FE4AAA5AAA6CA24086 +4B50:11041088280027FE5020F82049FC782048207BFE404050244AA25A8A6C884078 +4B51:10881050280025FE5250FDFC44547DFE44547DFC405050D84954565264504050 +4B52:1010102028FC248452FCFC8444FC7C8444FC7C20401050544942554A66384000 +4B53:102011242924252453FCFC0047FE7C0045FC7D04410451FC4888545067FE4000 +4B54:10101220297C25445044F87C4B407940497C79444144517C49445A806C7E4000 +4B55:100CFEF054807CFE5488FF0812880D603FF8C8260FE008200FE808D00A300C08 +4B56:1040102029FE25005148F94849FE794849487948417851004AD452AA652A4800 +4B57:1040102029FC24885050FBFE480079FC490479FC410451FC489058926912460E +4B58:100011FC290425FC5104F9FC48207BFE480079FC410451FC482059246A224060 +4B59:100013DE288826A853FEF9884ADA7CA649F87908410851F84908590869F84108 +4B5A:102011FC2888245053FEFC0045FC7D2445FC7D2441FC502049FC542067FE4000 +4B5B:100813882888251057DEFA944AA47B944A947B94429452C84B885E9468A440C2 +4B5C:1020102029FC24205354FC8845047EFA44887CF8408850F8482054A865244060 +4B5D:10201050288825745202FDFC45247DAC45247DFC400050F8488854F8648840F8 +4B5E:100011FC295425FC5220FDFC44207FFE44887C5041FC50204BFE542064204020 +4B5F:108813FE288824005148FBFE49487978490079FC402053FE487058A86B264020 +4B60:102013FE2A88265053FEFA504AFC7A544BFE7A5442FC52504AD8555466524850 +4B61:103C13C0294424A451F8F8204BFC780049F8780841F8500849F85AC46AAA447A +4B62:104010202BFE26225154F94A4A3A780049FC795443FE500049FC582068A04040 +4B63:104010202BFE24885052FFAC4AAA7AA84DAC7800410451FC490459FC69044204 +4B64:1010107C2A54257C5110F8FE48007B7C4944797C4140517C4944597C6A80447E +4B65:110810902BFC244051F8F8804BFC794849FC7B0A45F8510849FA5934698C4102 +4B66:108813FE2888241252FEF8104CFE7A924AFE789241FE52924E045AFE6A44422C +4B67:102013FE2A4827FE5248FAEC4B5A7A484A207A44427852144AFE5A106A5444B2 +4B68:122213FE289025FE5310FDFE491079FE491079FE410053FE4A8A5B766A524276 +4B69:102013FE2A4827FE5248FAEC4B5A7A484A507BDE425053DC4A5055DE64504850 +4B6A:200021FC21043DFC45044BFE800021FC212421FC212425FC282031FC202003FE +4B6B:4084444859FE6020424042FC3E8400847CFC448444847CFC448444847CFC4484 +4B6C:4092452459246092420042FE3E1000207CFC448444FC7C8444FC44847CFC4484 +4B6D:440028FEFE10102020FC7C84448444FC7C8444FC44847C8444FC44487C844502 +4B6E:3F042018FF62220C7F7010100820FFFE02003FF820083FF820083FF820083FF8 +4B6F:042078201124FF241124392455FC90207C20452445247D24452445247DFC4404 +4B70:0420782011FCFE4010F8384057FE90887D24462244F87C2045FC44207C204420 +4B71:0420792410A4FEA8102039FC552491247D7445AC45247D24452445047D144508 +4B72:0420782011FCFE501088390457FE90087DE8452845287DE8452844087C284410 +4B73:7C4011FCFD2439FC5524FDFC24681BA2651E7FF809203FF8C8260FE008200FE0 +4B74:00001FF811001FF011001FF011001FFC0004292444940108FFFE010001000100 +4B75:00007E7848487E4848487E48486848587E580248AA48AA4AAA4A828A14860900 +4B76:00007EFE48487E4848487E48484848487E480248AA48AA48AA88828815080A08 +4B77:00087F1C48707F1048107F1C487048107F90009EAAF0AA90AA9280920512020E +4B78:00107E8848847E8449027E02488848887E880250AA50AA20AA50828815040A02 +4B79:00007C40519E7D1251127D12511251127D120512555A55945510841014100810 +4B7A:00207E1048107EFE48007E00487848487E480248AA48AA4AAA4A828A14860900 +4B7B:00107E5048507E5048887E8849044AFA7E480248AA48AA48AA88828815280A10 +4B7C:00007F3C48007F0048007F7E482448247FA400A4AAA4AAA4AAA480A405440284 +4B7D:00087F2848287F28483E7F28484848087F8800FEAA88AA88AA88808805080208 +4B7E:00207E2848247E2448207E2048FC48207E200250AA50AA50AA88828815040A02 +4B7F:00107E1048507E50487C7E90491048107EFE0210AA28AA28AA28824414440882 +4B80:00407E4048FC7E8449047EF4489448947EF40284AA94AA88AA828282147E0800 +4B81:00207E2048407E4848847EFC480448487E4802FEAA48AA48AA48828814880908 +4B82:00287E2448247E2048FE7E204820483C7E340254AA54AA54AA88828815140822 +4B83:00107E1048107E7E48107E10481048FE7E100210AA20AA28AA4482FE14420800 +4B84:00107F0848087F7E48107F10482448247FB80088AA90AA90AAA480BE05020200 +4B85:00147E1248127E1048FE7E90489248927E920294AA94AAB4AACA828A14160822 +4B86:00007EFE48087E1048347E52489048107E000210AA10AAFEAA10821014100810 +4B87:00207E2048FC7E2449FE7E2448FC48207E2002FCAA20AA20ABFE822014200820 +4B88:00107F10481E7F2248547F08481048647F88009EAAA2AAC2AA94808805100260 +4B89:00407E40487E7E8049007E1C48E048A07EA202A4AAA8AA90AA9082A814C40882 +4B8A:00207C2051FE7C2051FC7C2451FC51207DFE0422542A54545450848815040A02 +4B8B:00027C0253E27C8A508A7CEA50AA512A7DAA056A564A544A54828482150A0A04 +4B8C:0090F890A090F910A1FEFB10A510A138F9380954A954A992A910891009103110 +4B8D:3FF821003FF021003FF021003FFC492486940108FFFE048808503A20CC180806 +4B8E:00C27C3450187C6451827C2051FE50507C9005FE56925492549A849414100810 +4B8F:00007EFE48107E10487C7E24482448FE7E000200AA7CAA44AA448244147C0844 +4B90:00007EFE48827E8248AA7EC6488248BA7EAA02AAAABAAAAAAA828282148A0884 +4B91:00047E1E48E07E12488A7E4C484048087EFE0208AA88AA48AA28820814280810 +4B92:00147E1248FE7E1048107EFE489248927EFE0292AA92AAFEAA92829214920886 +4B93:00207E20483E7E2048FC7E8448FC48847EFC02A4AA20ABFEAA20822014200820 +4B94:00047E1E48F07E1048FE7E54485448547EFE0254AA54AAFEAA10821014FE0800 +4B95:0000FBDEA042F94AA084F94AA252A420F8000BDEA852A952A89489480A543422 +4B96:007C7E4448447E7C48447E44487C48007EFE0282AA82AAFEAA82828214FE0882 +4B97:00107E9248927E9248FE7E0048FE48807EBE0288AA88AAFEAA88830815080A08 +4B98:00007E2048CE7E8248827EEE488248827EFE0228AA28AA28AA48824A148A0906 +4B99:00087E0C480A7E0849FE7E08480848EA7EAA02AAAAECAA0CAA2A82CA14160822 +4B9A:00107E10487E7E1048107EFE482448427E90023CAA44AAA4AA288210142808C6 +4B9B:0014FB94A294FAA4A2BEFAA4A364A2B4FAAC0AACAAA4AAA4AB248A240A24322C +4B9C:00147E5448547EFE48547E54485C48407E7E0210AAFEAA10AA38825414920810 +4B9D:00007EFE48927E1048FE7E10487C48547E7C0254AA7CAA10AAFE821014100810 +4B9E:00207E2049FE7E2048FC7E4049FE48887F0402FAAA88AA88AAF88288148808F8 +4B9F:00407C2051FE7D2250A47D28505050887D0404F8548854885450842014D80B06 +4BA0:00007EFE48007E7C48447E44487C48007EFE0292AA92AAFEAA92829214FE0882 +4BA1:00407E40487E7E80487C7E44487C48447E7C0220AA3CAA44AAA88210142808C6 +4BA2:00047E1E48F07E1048107EFE481048507E960292AA92AAD6AA92829214FE0882 +4BA3:00007EFC48447E3848447EEE48AA48447EAA0210AAFEAA38AA54829214100810 +4BA4:00207E2049FE7F5248487EFE489049907EFE0290AA90AAFEAA90829014FE0880 +4BA5:00007EFE48007E7C48447E7C480048FE7E8202AAAA92AAFEAA92829214920886 +4BA6:00207E1048FE7E00487C7E44487C48007EFE0282AABAAAAAAABA8282148A0884 +4BA7:101010281044FE8211FE7C9044FC7C9044FC7C9010FEFE0212AA12AA14141008 +4BA8:00207E1048FE7EA248107EFE484448287EFE0210AA10AA7CAA10821014100810 +4BA9:00007E7C48447E7448547EFE4882487C7E44027CAA44AA7CAA44824414540848 +4BAA:00847C8450DE7D4451547EDE504450847D24042055FE547054A8852416220820 +4BAB:0020F9FCA124FBFEA124F9FCA020A1FCF92409FCA840ABFEA88889D00870338C +4BAC:00487E4849FE7E4848007EFC488448FC7E8402FCAA20ABFEAA20825014880906 +4BAD:000E7EF048227E9248447EFE488248FE7E8202FEAA82AAFEAA288248148A0906 +4BAE:00207C2053FE7CA850A87D74522250707CA80546567854885550842014500980 +4BAF:0088F888A088FBD0A09EFBE4A094A7D4F91409D4A954A948A9488A540AD43422 +4BB0:00207E1048FE7E4448287EFE488248927EFE0292AABAAAAAAAAA82BA14820886 +4BB1:0000FA7EA110F930A04AF89AA62CA24CFA9A0A2AAA4AAA88AA288D1008FE3000 +4BB2:00287E28487C7E2848287EFE4810487C7E54027CAA54AA7CAA00822814440882 +4BB3:003CFBE0A124F8A8A3FEF8A8A124A202F9FC0924A924A9FCA924892409FC3104 +4BB4:00107ED448487F4A48847E84497A48007EFC0284AAFCAA00AA84824815FE0800 +4BB5:00207DFC50887C5053FE7C0051FC51247DFC052455FC542055FC842017FE0800 +4BB6:00507E4848FE7F9048FC7E9048FC48907EFE0280AA10AAFEAA38825414920810 +4BB7:00007EFE48AA7EAA48FE7E4048FE49227EFA02AAAAAAAAFAAA2282FA140A0804 +4BB8:0A803138228838382288393822887FFE51029FF411001FF011001FFC2A44492C +4BB9:0020F93CA120FBFEA010F814A3FEA210FBF00A54AA54AAD4AB688C4A08963322 +4BBA:0040F820A3FEF888A052FFACA2AAA2A8FDAC0800A904A9FCA90489FC09043204 +4BBB:0020FBFEA020F9FCA000FBFEA002A1FCF8200BFEA800ABFEA8048BBE0AA4338C +4BBC:00127E5448A87E4448927E54489848247EC20284AAEEAB24AAB4825E14440884 +4BBD:0040F820A3FEFA50A3FEFA52A3FEA200FA940AD8AA90AAD2AA8E8C000954322A +4BBE:0110F890A3DEF810A25EF982A3DEA010FBDE0A50ABDEAA50ABDE8A500A5232CE +4BBF:0020FBFEA24AF9FEA048F9FEA048A3FEF88409FEAA84A8FCA920893C0AA0347E +4BC0:03FCF908A1F8F908A1F8F90EA7F8A008FFFE0A94AB9CAA94AB9C8AD60FBC3084 +4BC1:00400FFEF200A3F8F000A7F8F408A7F8F2201D5C57F4BC9495DC1C9657F62CA2 +4BC2:3FF821003FF021003FF892487EFC48907EFC48907EFEAAAA0100FFFE0920711C +4BC3:0040F82008204BFE4A024C4448407FFE048804881D08E4D04420045028881304 +4BC4:0000F8FC08844884488448FC48207C2005FE05221D52E58A450A0502290A1104 +4BC5:0000F1FE108450FC508450FC50867BFC08040BDE3852C952089409482A541422 +4BC6:00207F20412079204920FFA080A07F2041207F2041207F2241224122451E4200 +4BC7:00207C204420742054FCFE2482247C2444247C4444447C444484448455284A10 +4BC8:00007CFC440074005400FEFE82507C5044507C5044507C5244524492548E4900 +4BC9:00407C404440747C5444FE8882A07D2044207C5044507C484488448455044A02 +4BCA:00007C0045FE74045404FEF482947C9444947C9444F47C944404440454144808 +4BCB:00507C484448744055FEFE4082407C7C44A47CA444A87D284510462854444882 +4BCC:00007CFE4482748254FEFEA082A07CA044F87CA844A87CA84528452A564A4886 +4BCD:00207C20445074505488FF2482127C1045FC7C0444087C884450442054104810 +4BCE:00207C20445074505488FF0482FA7C2044207C2045FC7C204420442054204820 +4BCF:00047C1E44F074105410FEFE82107C1044107CFE44827C824482448254FE4882 +4BD0:00107C10441074FE5492FE9282AA7CC644927C9244AA7CC644824482548A4884 +4BD1:00207C20452474A454A8FE2083FE7C5044507C5044507C5244524492548E4900 +4BD2:00207C20444E74805520FE20825E7CC445447C4444447C444444444454544848 +4BD3:00207C2044FC74205420FE2083FE7C0044207C2044FC7C204420442055FE4800 +4BD4:00207C1045FE75025400FE1C82E07C2044207C3E45E07C2044224422541E4800 +4BD5:00007C0645D874485448FE88829E7DC844487D4845487C9E44804540563E4C00 +4BD6:00207C1044FC74845484FEFC82847C8444FC7CA244A47C984490448854C44882 +4BD7:01107D12451475D85510FF1283527D8E45207C2045FC7C204420442057FE4800 +4BD8:00207C1045FE75025604FEF882007C0045FE7C5044507C5044924492550E4A00 +4BD9:00147C1244FE74105410FEFE82927C9244FE7C9244927CFE4492449254924886 +4BDA:00207C4444F874105424FEFE82027CFC44847CFC44847CFC4484448454944888 +4BDB:00407C2045FC75045480FE9C82D47D5445547D5446D87C504494449455144A0C +4BDC:00007CFC4484748454FCFE8482847CFC44407CFE452A7E4A44924522544A4884 +4BDD:00207C2044FE744054FCFF1082FE7C0044FC7C8444FC7C8444FC448454944888 +4BDE:00007CF84488748854E8FEA882A87DFC45047D7445547D544574450455144908 +4BDF:00007C844448740055FEFE2082447DA844307C5845987C344452459054504820 +4BE0:00007CF84488748854F8FE8882887CF844007DFC45547D544554455457FE4800 +4BE1:00887C50440075FE5450FFFC82547DFE44547DFC44507CD84554465254504850 +4BE2:00803FFE24103F7C26382D5437FA220823C822482FFE2A0A23F8420842288210 +4BE3:00207DFC452475FC5420FFFE82007DFC45047DFC45047DFC450445FC54884904 +4BE4:00107C28444474BA5500FEFE82927CD644927CFE44007C7C4444447C5444487C +4BE5:00007CFE448274FE5482FEFE82447CAA44EE7C4444AA7CEE440044D454AA492A +4BE6:00247CFE4424740054FEFEAA82AA7CFE44147CFE44907CD244AC44AA54964922 +4BE7:01007FFC00001FF010101FF000007FFE40029FF4101017D0145017D010101030 +4BE8:0100FFFE00001FF010101FF000007FFC40044FE448244FEC0200FFFE1830E00E +4BE9:0100FFFE00001FF010107FFC40044FE448244FEC00003FF821083FF820021FFE +4BEA:200011FEFE1000207CFC44847C8400FCFE8482FCBA84AA84AAFCBA4882848702 +4BEB:00207C1045FE7C0044FC7C8410FCFE0001FE7D02457A7D4A117A5502930A3104 +4BEC:1000FEEE44AA7CAA00EEFE00AA7CBA54827CFE54447C7C1010FEFE1010101010 +4BED:3E0420183E6020043E182062FF0422187F6000003FF00820044003801C70E00E +4BEE:3E0420183E6020043E182062FF0422187F6000003FE00420047C08043014C008 +4BEF:3E0420183E6020043E182062FF0422187F60010011102108416403801C00E000 +4BF0:3E0420183E6020043E182062FF0422187F60028004401C70E44E044008401040 +4BF1:3E0420183E6020043E182062FF0422187F6000007FFC01000770190CE1020100 +4BF2:3E0420183E6020043E182062FF0422187F6000003FF821083FF8200220021FFE +4BF3:3E0420183E6020043E182062FF0422187F60044008203218C44608201FF00810 +4BF4:3F0820303EC42018FF62220C7F7000000FE01020601C1FE0082004C00780F87E +4BF5:3E0420183E6020043E182062FF0422187F6001003FF801000820FFFE08201020 +4BF6:3F0820303EC42018FF62220C7F7000001FF010101FF010101FF01010FFFE0000 +4BF7:3E0420183E6020043E182062FF0422187F600090FFFE10887E50102420D4C70C +4BF8:3E0420183E6020043E182062FF0422187F60410021FC0A441048E0A021182606 +4BF9:3F042018FF62220C7F7000003FF000101FF000107FFE40029FF4082007C0F83E +4BFA:3F042018FF62220C7F7000183FE021003FFC20802C64301C1FF0101010101FF0 +4BFB:3F0820303EC42018FF62220C7F7011001FF82100FFFE00001FF010101FF01010 +4BFC:3E0420183E6020043E182062FF0422187F601400082014A46CA8155064881906 +4BFD:3F0820303EC42018FF62220C7F7001003FF80440FFFE00001FF010101FF01010 +4BFE:3F042018FF62220C7F7000003FF8210827C821082FE8200827C8444847C88018 +4BFF:3E0420183E6020043E182062FF0422187F6001003FF80820145001007FFC0100 +4C00:3F042018FF62220C7F7000001FF00100FFFE0920711C0200FFFE082007C07838 +4C01:3F042018FF62220C7F7000003FF000101FF00010FFFE111009A005401930E30E +4C02:3F0820303EC42018FF62220C7F7000183FE0121009207FFC05401930E10E0100 +4C03:3E0420183E6020043E182062FF0422187F60082004407FFC044024481450FFFE +4C04:3F0820303EC42018FF62220C7F7000003FF821083FF821083FF84904489287F2 +4C05:3F042018FF62220C7F7000007FFC02001FF010101FF010101FF010101FF00820 +4C06:3F042018FF62220C7F7000001FF0022001407FFC188462880100FFFE0920711C +4C07:3F042018FF62220C7F7002001FD00220FFFE03000FF03810CFF008100FF00810 +4C08:3F042018FF62220C7F70082004407FFC01003FF80200FFFE080037F0C0801FFC +4C09:3F042018FF62220C7F70000010783E4822482A86FF7822482A2842104A2884C6 +4C0A:3F042018FF62220C7F700110FFFE21083FF821083FF821080020FFFE08200460 +4C0B:3F042018FF62220C7F7000001FF010101FF010107FFC44043FF8082007C07838 +4C0C:3E0420183E6020043E182062FF0422187F60108821544A22113C312052A0147E +4C0D:3F042018FF62220C7F7001007FFC09103108C6C41930E92E05C0193061080300 +4C0E:3F042018FF62220C7F7001001FF011101FF00100FFFE10101FF010101FF00820 +4C0F:3F042018FF62220C7F7008287F240820FFFE12203FA46424BF2824123FAA2046 +4C10:3F042018FF62220C7F7024203F3E21403F5024883F0800003FF824482448FFFE +4C11:3F042018FF62220C7F7000003FF801007FFE492285147FFC02003FF824482458 +4C12:3F042018FF62220C7F7008207FFC08207FFE40029FF40600192006C038A00318 +4C13:3F042018FF62220C7F7002001FF014901250FFFE92122FE8440407E008203060 +4C14:3F042018FF62220C7F7008003E7822482A867E7822482A30464C3FF82448FFFE +4C15:3F042018FF62220C7F7001FC01003FFE210221F02F0420FC20004FFC4914BFFE +4C16:3F042018FF62220C7F7028503E7C4890FEFE1528264A5FF6149012501FF00820 +4C17:BEFA8822BEFA8822BEFA84028782888297C284428FE289228FE289228F1281F6 +4C18:BEFA8822BEFA8822BEFA8002BEFA924A8A2A934A82828C62B19A860280729F86 +4C19:0010FE1000107CFE44107C1000FCFE448244AA449228FE289210922892448682 +4C1A:0020FE1000107CFE44447C440044FE448244AA289228FE109210922892448682 +4C1B:0000FE0001FE7C4044407C780048FE488268AA989298FE88928A92AA92CA8686 +4C1C:0000EFEE200227C22442E7CE80088FE88828EAAE29222FE229222922A92A4864 +4C1D:0044FE2400287CFE44927CD600BAFE9282FEAA00927CFE44927C9244927C8644 +4C1E:713C17C4719C47F0725C17C45A5423C8FFFE00001FF010107FFC44445FF4410C +4C1F:3FF80000FFFE082010103FF802081FF011101FF012101FF004A808BA3082C07E +4C20:081010107F10497C49547F54497C49547F54107C1A102C902F904810480287FE +4C21:080810087F284928493E7F48490849087F7E10081A082C942F924820484287FE +4C22:102020407C8E550054207C5E54C455447C4410442A442D544F48480287FE0000 +4C23:100021FC7D04550455AC7D54555455547D5411AC2B042D144F08480287FE0000 +4C24:10201040FDFC11247D2455FC7D2455247DFC1040386854B292BE11201122121E +4C25:00507FFC00403E4822503E2000547FFC11141FF012101FF004A808BA3082C07E +4C26:080010087F10497E494A7F7E4952497E7F2810481A7E2C882F884808480287FE +4C27:1020203C7C2054FE54A27CB854E4549C7C8010B82AA82D2A4F464A0287FE0000 +4C28:100021FC7D2455FC55007D7C5544557C7D44117C2A442D7C4F00480287FE0000 +4C29:102010407DFC12941494FFFC10A420A47EFCA22022443E6A226E22A03EA2231E +4C2A:1020924054FCAA94449482FC7CA444A444FC7C204444446A7C6E44A044A24D1E +4C2B:1010207C7C1054FE54447CEE544454EE7C0010FE2A282D2A4F46488287FE0000 +4C2C:10FC20287C1055FE54527C9055FE54AA7CC610BA2AAA2DBA4F84480287FE0000 +4C2D:0020FE4010FCFE94AA94AAFCAAA486A400FCFE201044FE6AAA6EAAA0AAA2871E +4C2E:208843FEF820A9FCA820FBFEA854A992F89023FE209054D45B8A5E9651A28FFE +4C2F:1100215C7D84555854C87D3E55CA56A87DEC10A82B682D5E4F80480287FE0000 +4C30:00207C4010FCFE94929454FC10A454A400FCFE201044FE6AAA6EAAA0AAA2871E +4C31:0020FE4010FCFE94929454FC00A4EEA4AAFCEE200044FE6A546EBAA010A2FF1E +4C32:102010203E20422084207F20492049207F20492049207F22002255224A9E8A80 +4C33:200020007CFE441088107E10521052107E10521052107E100010AA10AA500020 +4C34:20402040788048FC91007E0054F854087C10542054407C800084AA84AA7C0000 +4C35:200021FC7C04440888107E20522053FE7E20522052207E200020AA20AAA00040 +4C36:202020107C10440089FE7E40524052407E40524052407E400040AA40AA7E0000 +4C37:20202020782049FE90207C20542054FC7C20542054207DFE0020AA20AA200020 +4C38:200820487848484890447C8454A455227C20544054407C480084ABFEAA820000 +4C39:202820247C244420882E7EF0522052247E24522852287E100032AA4AAB860002 +4C3A:2004200E7C70444088407E40527E52487E48524852487E480048AA88AA880108 +4C3B:102010203E20423E84447F44494449A47F28492849107F10002855284AC48A82 +4C3C:202020207820485090507C88554456227C2054F854087C080010AA10AA200020 +4C3D:2020202078204BFE90207C2055FC55247D24552455247D340128AA20AA200020 +4C3E:2000200078FC48A490A47CA454A454A47CFC548054807C800082AA82AA7E0000 +4C3F:20402040787E488091207CA054AC54B47DE454A454B47CA800A2AA82AA7E0000 +4C40:20202020782048FC90A47CA454A454A47CA455FE54207C500050AA88AB040202 +4C41:2020202078204BFE90507C50548855247E22542055FC7C200020AA20AA200020 +4C42:201020507850489090FC7D5455D454947C94551455547DD40054AA24AA340048 +4C43:201020107C504450887C7E90531052107EFE521052287E280028AA44AA440082 +4C44:2008201C79F0495091507D50555055507D50554855487D680154AA74AA520400 +4C45:2020202078204BFE90207C20542055FC7C7054A854A87D240124AA22AA200020 +4C46:200021FC78444848908E7C82557A56147C20542057FE7C200020AA20AAA00040 +4C47:200020007CFC448488847E8452FC52847E84528452FC7E840000AA00ABFE0000 +4C48:200020FC7800480090007DFC542054207CA854A455247D220222AA20AAA00040 +4C49:200020F87888488890887CF8548854887C8854F854887C880088AA88ABFE0000 +4C4A:20202020792448A490A87C20542057FE7C7054A854A87D240124AA22AA200020 +4C4B:204820487848484891FE7C48544854487C4855FE54007C480044AA84AA820102 +4C4C:200020FE7C90449088907EBC52A452A47EA452A452BC7E900090AA90AAFE0000 +4C4D:200021FE7840484090407C78548854A87C98550855487C300010AA10ABFE0000 +4C4E:200021FE7800480090FC7C84548454FC7C84548454FC7C840000AA00ABFE0000 +4C4F:200021FE7800480090FC7C84548454847CFC540054847C440048AA00ABFE0000 +4C50:2008203C79C0480491447CA8540055F87C10542057FE7C200020AA20AAA00040 +4C51:2080208C78B048A093E07CA054BE54E87CA857A854A87CA800A8AAA8AAC80188 +4C52:2000207C7C444444887C7E0052FE52927E92529252FE7E800080AA82AA82007E +4C53:2000200679D8484890487C88549E55C87C48554855487C9E0080AB40AA3E0400 +4C54:2088208878884910915E7D64575455547D54555455547D480148AB54AB140122 +4C55:2080208078FE490092FC7C8454A454947DFE548455247D1401FEAA04AA280010 +4C56:200020FE7C28442888287EEE52AA52AA7EAA52AA52EE7E280028AA28AA480088 +4C57:08000F7C28447F28A11016283846CFE010403FF051101FF011101FF024884244 +4C58:03043C2404247FA416242504440C0FE010403FF051101FF011101FF024884244 +4C59:20802080789C48F490947C9457F454147C94549455C87EA80088AA94AA9401A2 +4C5A:200021F87808480890F87C08540855FC7C20552454A87C7000A8AB24AAA20040 +4C5B:20142012781049FE90107C1055D255527D52555455D47C0800CAAB1AAA260042 +4C5C:20482048784849FE90487C4855FE54007CFC548454847CFC0084AA84AAFC0084 +4C5D:2020204078FE489290927CFE549254A27CFE544854887DFE0008AA08AA080008 +4C5E:2020202079FE485090887D0456FA54007C0055FE54207CA400A2AB22AA200060 +4C5F:200020FE7C82448288FE7E88528852FE7E88528852BE7EA200A2AAA2AABE0122 +4C60:20482044785E49E090287C12546A55967C48545E55E07C240028AA12AA6A0186 +4C61:2080208078FE490292227CAA547254227DFE542254727CAA0122AA22AA0A0004 +4C62:2080208078F8490892107DFC542454247DFE542454247DFC0024AA20AAA00040 +4C63:2040202079FE480090887C88555456227C00542055FE7C200020AA20AA200020 +4C64:20402040787C488491087E00542054CE7C82548254EE7C820082AA82AAFE0082 +4C65:24043FA44424FFA404243F8424942FE810403FF051101FF011101FF024884244 +4C66:20502048788048FE91907E9054FC54907C9054FC54907C900090AAFEAA800080 +4C67:2020212478A8482091FC7C4057FE54887D0456FA54887C8800A8AA92AA82007E +4C68:2082208273E2908A208AFBEAAAAAAAAAFAAAAAEAA88AF9CA02A2AC82A88A0084 +4C69:200020FE7C8244C688AA7EFE52A252927EFE52A252A27EBA0082AA82AA8A0084 +4C6A:2010201079FE481090107CFE541054107DFE542054527CD40148AA44AA620040 +4C6B:04047FC404243FA424A43FA4150424944FE810403FF051101FF011101FF02488 +4C6C:200021FE78124890909C7C90557E56007CFC548454FC7C8400FCAA84AA940088 +4C6D:208020FE7890489090D07CBC559456947CAC54A454B47C880088AA88AAFE0080 +4C6E:2080209E73EA908A21CAF88AABEAA892F8A6A820ABFEF8200050A888A9040602 +4C6F:7E20243E1848FFA829104A2898460FE010403FF051101FF011101FF024884244 +4C70:2008203C79E0482093FE7C2055FC55247DFC552455FC7C2001FCAA20ABFE0000 +4C71:202020107CFE440088447E2852FE52827E10527C52547E540054AA5CAA100010 +4C72:2040207C788448F890087DFE544054A47D38545854947D340054AA92AB500020 +4C73:200021FE7900497C91547D54557C55547D54557C55107D10017CAA10AA1004FE +4C74:2040205E78404860915E7D525552555E7C52545254527C5E0052AA40AA5E0040 +4C75:205020887924484090907DF8540854007DDC544455547CCC0154AA44AA5400C8 +4C76:2100209E79D2495491547DD8555455527DD25512559A7D5401D0AB50AA100010 +4C77:0F1008107F9048A04E3E79444F2451245F2475285F2855105F284028AAC40082 +4C78:20A0212C7924492491AC7D24552455FC7C2055FC54887C500020AA50AA880306 +4C79:204420247C2844FE88107E7C521052FE7E205220527C7E500090AB10AAFE0000 +4C7A:202021247924492491FC7C0057FE54007DFC550455047DFC0088AA50ABFE0000 +4C7B:2000207C7C44447488547EFE5282527C7E44527C52447E7C0044AA44AA540048 +4C7C:200021FE7902490291FE7D245524557E7D24552455FE7D520154AA48AA640442 +4C7D:202020207850484890A47DFE568454FC7C8454FC54807CFC0144AB44AA7C0044 +4C7E:202021FC79244BFE91247DFC542055FC7D2455FC54407DFE0088ABD0AA70038C +4C7F:21002102711C97D02110FFD0AD5EAFD4FD54AFD4A914FFD40114A924A9240144 +4C80:08207E2008F8FF2814287F6A082A0FE610423FF051101FF011101FF024884244 +4C81:200423E47224922423EEFA04AAE4AA04FA0CABF4AA44FA640554AD44AA5400C8 +4C82:22102110711097BE2240FA00ABBEAA8AFA88AAA8AAAEFAA804A8ADA8A85E1080 +4C83:209221247892480090FE7C9254FE54927CFE541055FE7C380054AA92AB100010 +4C84:2208220873C8921027DEFA54AB64AAD4FFF4AA54AD54FCC807C8A854AAA40142 +4C85:2100213C712493A4213CF924A924ABBCF924A924A93CF92802A8AACAAC4A0886 +4C86:202020207C78444888907E7C525452547E7C525452547E7C0000AAAAAAAA0000 +4C87:20102210797C4910907C7C545754557C7D10553855547D920110AA90AA7E0000 +4C88:2020201079FE494891487D4855FE55487D4855EC555A7D680148AB48AA480048 +4C89:21402144715893F02150F9D0A95EA9D4F954A954ABF4F8140154AA34AC140024 +4C8A:2010239072FE92A022BEFB48AABEAA80FABEAAA2AABEFB22023EAA22AA220226 +4C8B:2088208879DC488893DE7C88555456227CFC548454847CFC0084AA84AAFC0084 +4C8C:2108210877C89108211EFB92A824AB80F808AFC8A908F9080594A954A9240342 +4C8D:112420A879FC48406BFE59084A84FCFA49104BFC6D2459FC492449FC48009954 +4C8E:200823887088911027DEFA94AAA4AB94FA94AB94AA94FAC80388AE94A8A400C2 +4C8F:2048216A78DC484890B47D2255FE55027C20542054FC7C240044AA44AA940108 +4C90:2020203E782049FE91227DFC5522557E7D54557C55547D7C0110AAFEAA2204C6 +4C91:210420887BFE482091FC7C2057FE54547D92549057FE7C9000D4AB8AAA9601A2 +4C92:210021DE724A948A23EAFAB6AAA4ABF4FABEAAA4ABE4FABE02A4AAA4AA240464 +4C93:202020207850488891047EFA540054007DDC555455547DDC0088AA88AB540222 +4C94:200023FE700091FC2124F9FCA924ABFEF800A9FCA924F9FC0124A9FCA80003FE +4C95:2084204879FE4848914A7CCC544855FE7C0054FC54847C8400FCAA84AA8400FC +4C96:202023FE702091FC2000FBFEA802A9FCF820ABFEA800FBFE0004ABBEAAA4038C +4C97:21202120725692482580F970AA2EAA24FEF4AA24AAACFA740224AA34AAC4020C +4C98:2108210879EE4A9490427C1055FE55027CF8548854F87C8000FCAA84AAFC0084 +4C99:2108210871EE92942042F800ABDEAA52FBD2AA52ABD2FA1A0294AB50AA100010 +4C9A:2088208873EE90922084FBEEAAAAAAAEFBEAA88EA9CAFAAE04A0A88CA88A0092 +4C9B:208823FE788849FC91547DFC540057FE7E0254F854887CF80088AAF8AA8800F8 +4C9C:3C3C4848FCFC54547C7C54547C7CAAAA3C3C4848FCFC54547C7C54547C7CAAAA +4C9D:202020207C50445088887D04560254F87C88548854A87C9000821C82E07E4000 +4C9E:204020207C20440089FE7C00540454847C84544854487C4800501C10E3FE4000 +4C9F:200020407D9E451289127D1255D255127D125512555A7D9401101C10E0104010 +4CA0:202020207DFE442088FC7C4055FE54887D0456FA54887C8800F81C88E08840F8 +4CA1:208820487C5045FE88507C5055FC55547D54558C55047DFC01041D04E1FC4104 +4CA2:01243CA825FC244027FE3D08268424FA25103FFC252425FC252445FC54008BFE +4CA3:0F1008107F9048A04E3E79444F2451245F2475285F2855105F284028BF440082 +4CA4:400044FE7A28882814FEFAAAAAAAA8AAF9AEAAC2AE82FAFE02821A82E2FE4082 +4CA5:02003FE004221822E21E1FF010101FF010101FF010001FFC10001FFC2A44452C +4CA6:101020107F1041107F7E41107F1040107F9040287FA800A8AAA8AAC481440682 +4CA7:1040108011FC110411FCFD0411FC110011FE11001DFEE00242AA02AA0202000C +4CA8:004000807DFC110411FC110411FC110011FE110011FE1C02E2AA42AA0202000C +4CA9:3FFC20043FFC220027F0241027F0241027F0240027FC240047FC40048AA40AAC +4CAA:1040108011FC110411FCFD0411FC110011FE290025FE240242AA42AA8202000C +4CAB:0080FDF8290829F8290829F8290029FC290029FC280429542A5C480247FE8000 +4CAC:1004201E7CF044907C9044907C9040FE7E9040907E900288AA8AAAAA82C60C82 +4CAD:04200E40F0FC908490FC9084FCFC908090FE908090FE88028AAAC6AA8302000C +4CAE:00207C4000FC008400FCFE8428FC288028FE288028FE2A024EAA4AAA8202000C +4CAF:00207E4022FC248424FC28842EFC22802AFE248044FE4A0292AA20AA4102000C +4CB0:0040008079FC010401FC0104FDFC210021FE210041FE50028AAAFAAA0A02000C +4CB1:102020107F0041FE7F2041207F3C40247FA440247FA400A4AAA4AAA481540688 +4CB2:0020284024FC248442FC528490FC108020FE208048FE4402FCAA44AA0102000C +4CB3:1020084008FCFF8400FC00843CFC248024FE248024FE250246AA44AA8102000C +4CB4:1040108011FC150459FC510451FC910011FE110011FE280226AA42AA4202800C +4CB5:0100111021E84F04F2001FF010101FF010101FF010001FFC10001FFC2A44452C +4CB6:1FF00000FFFE0844323CDFF010101FF010101FF010001FFC10001FFC2A44452C +4CB7:04001FF010101FF010101FF010001FFC10001FFC492484940108FFFE0920711C +4CB8:1040108011FC290425FC4304A9FC290029FE290029FE28024AAA4AAA8A02000C +4CB9:00407E8009FC090411FC150433FC510091FE110011FE00020EAAF2AA4202000C +4CBA:4840488049FC4904FDFC490449FC490079FE490049FE48024AAA7AAA4A02000C +4CBB:2040108001FCFD0421FC410449FC8900F1FE110021FE20024AAAFAAA0A02000C +4CBC:1040108051FC51047DFC510491FC110011FE7D0011FE100212AA1EAAE202400C +4CBD:00400080F9FC210421FC410479FC4900C9FE490049FE48027AAA4AAA0202000C +4CBE:00007DFE108010FC1E04F02802101FF010101FF010101FFC10001FFC0004492C +4CBF:00203E4022FC228422FC3E8420FC288028FE2E8028FE28024AAA4CAA8902000C +4CC0:101020107C5044507C7C44907D1040107EFE40107E280228AA28AA4482440C82 +4CC1:105020487C4844407DFE44407C40407C7EA440A47EA80328AB10AA2882440C82 +4CC2:0020FC4024FC248444FC548488FC00807CFE448044FE440244AA7CAA4502000C +4CC3:02001FF010101FF010101FFC10001FFC0004492C08001EF8228854980882307E +4CC4:1420144014FC548455FC5E8454FC548054FE548054FE54025DAA76AAC502000C +4CC5:100020007F3E41227F2241227F22403E7FA240007F940094AAA2AAA281420600 +4CC6:1040108021FC790449FC490449FC490079FE490049FE48024AAA7AAA4A02000C +4CC7:00203C4024FC34842CFC248424FCFE8044FE648054FE44027EAA04AA2902100C +4CC8:104020407CFC44847D0446F47C9440947EF440847E940288AA82AA82827E0C00 +4CC9:204020803DFC4504A9FC110429FC450083FE310009FE000262AA12AA0A02000C +4CCA:2820244024FC2084FEFC208420FC3E8042FE448054FE880216AA22AA4202000C +4CCB:2040208021FCF904A9FCA904A9FCA900F9FEA10021FE28023AAAEAAA4202000C +4CCC:1040108021FC4904FDFC050479FC490049FE790049FE78024AAA4AAA4A02580C +4CCD:24102420247C24447F7C2444247C2440247EFF40007E240224AA42AA4302820C +4CCE:0040408099FC890489FC890489FCD90089FE890089FE8802FAAA8AAA0202000C +4CCF:1040108011FC7D0411FC1104FDFC010011FE11007DFE100212AA1EAAE202400C +4CD0:410021FC0A441048E0A0211826061FF010101FF010101FFC10001FFC0004492C +4CD1:10201040FEFC108420FC3E8422FC6280BEFE228022FE3E0222AA22AA2302260C +4CD2:08207F280824FFFE10207F2041247F2441247FA840287F900092AAAAAAC60182 +4CD3:102012407EFC148414FCFF8408FC108020FE7E80A0FE22022CAA30AA2102000C +4CD4:060038F820083CF820083FF802001FF010101FF010101FFC10001FFC0004492C +4CD5:0E20F04022FC928454FC0084FCFC088010FE168018FEF00252AA12AA5202200C +4CD6:100021FE7CA044A87CA844E87CA840A87EA840E87EA802AAAABAABEA82260C20 +4CD7:02001FF010101FF010101FFC5244892C02403C500848FFFE08507E240854198C +4CD8:201040D8F3949094F09093FEF0908094F89480D8FB980890A8AAA8CA8A863102 +4CD9:081008207F7C49447F7C49447F7C0040FF7E2040407E7E0202AA02AA1502080C +4CDA:00407C8045FC7D0445FC7D0401FC01007DFE110011FEFE0212AA12AA1202100C +4CDB:00207E4042FC42847EFC428442FC7E8010FE1080FEFE220264AA18AA2502C20C +4CDC:1020104028FC448482FC7C8410FC1080FEFE108054FE520292AA10AA5102200C +4CDD:202010407CFC008444FC288400FCFE8000FE00807CFE440244AA44AA7D02440C +4CDE:081008207F7C10443E7C1044FFFC2240497E88C03E7E08027FAA08AA0902080C +4CDF:00200E40EAFCAA84AAFCAE84EAFCAA80AAFEAE80EAFEAA020AAA12AA1302260C +4CE0:02100F20787C0844FF7C2A442A7CFF402A7E2A40FF7E080208AA0EAA7102200C +4CE1:2820244040FC7E84C8FC48847EFC488048FE7E8048FE480248AA7EAA4102400C +4CE2:4840488049FCFD0449FC490479FC490079FE490049FEFC0202AA52AA4A02840C +4CE3:08507F480840FFFE20403E502222465A82861FF010101FF010101FFC5244892C +4CE4:10109220527C5444107CFE44927C9240BA7ED640927E920292AA82AA8B02840C +4CE5:1020924092FCFE8410FC288444FC928008FEFC8004FE080252AA22AA1202000C +4CE6:20201040FEFC828400FC7C8400FC7C8044FE7C8044FE7C0202AA1EAAE202400C +4CE7:21004178F1089208F2FE9640FA40827CFA908210FAFE0A10AA28AA288A443282 +4CE8:102020407CFC44847CFC44847CFC0080FEFE108010FE7C0212AA1EAAF202400C +4CE9:0020FE4028FC2884FEFCAA84AAFCFE8010FEFC8024FE44022AAA12AA2A02C40C +4CEA:1020924092FC9284FEFC0084FEFC108020FEFE80AAFEAA02AAAAAAAAAB02860C +4CEB:0A107420157C5244227C2144417CBE40087E08407F7E080214AA12AA2302400C +4CEC:28402880FDFC290439FC11047DFC550055FE7D0011FEFC0212AA12AA1202100C +4CED:0020EE40AAFCAA84AAFCEA84AAFCAA80EAFE8A80CAFEAE02D8AA88AA0902080C +4CEE:00207C1045E07C2245B47CA8452456A28A401FF010101FF010101FFC5244892C +4CEF:1C20704010FCFE8410FC7C8454FC7C8054FE7C8010FE7C0210AA1EAAF102400C +4CF0:1008179014BC24A424BC67A4A23C22202FBE272026BE2A822AAA322A2202220C +4CF1:00207E7C14C40838FEC62A2048FCA844128C1FF010101FF010101FFC5244892C +4CF2:11FE1100FD7C11001DFEF1541248546422421FF010101FF010101FFC5244892C +4CF3:1020544054FC7C8492FC9284FEFC00807CFE0080FEFE100254AA92AA5102200C +4CF4:0020FE40AAFCAA84AAFCFE8410FC548052FE928010FE540252AA92AA1102100C +4CF5:11041108111E7D1213DE5552555E5550BB5E1150395E554292521252154A1884 +4CF6:100E20F07C2244927C4444207C4440F87E1040247EFE0210AAFEAA2882440C82 +4CF7:11102110CAA814443240D27C154014FE0A001FF010101FF010101FFC5244892C +4CF8:00803FFE24103F7C26382D543412210027F0241027F0241027FC40044AA4800C +4CF9:20404020F3FE9202F00893EEF008801CFBE48154F9480954A964A942893E3200 +4CFA:08101420227C4944BEFC0444087CFFC0147E7F40557E6302412A7F2A41427F0C +4CFB:08047F7808403E402A7E3E482A48FF480A881FF010101FF010101FFC5244892C +4CFC:100020FE7C8044807CBC44A47CA440BC7E8040EE7EAA02AAAAEEAA8082FE0C00 +4CFD:1020924092FCFE8428FC24847EFCC88048FE7E8048FE7E0248AA48AA7F02400C +4CFE:0A107420157C5244227C21445D7C80407E7E4240427E7E0242AA24AA0F02F00C +4CFF:24102620357C54445F7C7444947C64402A7E4940917E0002AAAAAAAAAB02000C +4D00:101008207F7C2244FF7C00447F7C49407F7E49407F7E08027F2A082A0F42F00C +4D01:20201040FEFC82847CFC54847CFC54807CFE1080FEFE920292AABAAA8B02840C +4D02:20103E20427CFF44497C49447F7C1040287ED540267ECD0215AA24AAD502080C +4D03:102010407CFC1084FEFC4484EEFC448064FEDE8000FEFE0228AA2AAA4D02880C +4D04:0F10F020117C8944427C0044FF7C8140427E7740927E5A022F2A222A4242820C +4D05:08107F20087C2244FFFC22447F7C41407F7E41407F7E41027F2A222A4142808C +4D06:2820AA406CFC2884FEFC448428FCFE8010FE7C8010FEFE0210AA28AA4502820C +4D07:00107F20087CFFC488FC6B44087C6B40147E2A40457EBE0202AA04AA1902040C +4D08:10202040FEFC9284D6FCBA84FEFC9280BAFED68082FE1002FEAA28AA4502820C +4D09:0020FE40AAFCAA84FEFC0084FEFC00807CFE44807CFE2A0264AAA2AA3102200C +4D0A:41082210FFBC08247F3C0824FFBC152064BE2420FFBE2402352AE2AA2582688C +4D0B:200043FCF2949294F3FC9000F7FE8000FBFC8204FBFC08A2A914AB088D443182 +4D0C:104820487DFE44487CFE44827D7C40007EFE40207ED2022CAAD8AA2C82CA0C30 +4D0D:00100020777C5544557C7744557C5540777E5540557E7702002A552A88C2000C +4D0E:00001FF011101FF011103FF82AA83EF82AA83FF810101FF010101FFC5244892C +4D0F:22082210FFBC22243E3C41245D3CD5E0553E5520DD7E4182002A552A4A828A8C +4D10:0808FF9084BC77242A3C77242ABCFFA0003E7F20413E7F02412A7F2A2202410C +4D11:7F0849107F3C4924FFBCAAA4FFBCAAA0FFBE0020FFBEA2823E2A222A2782F80C +4D12:7F080810FFBC88A46B3C08246B3C0020EFBEAAA0EFBE0002FFAA492AAA82FF8C +4D13:0010FFA0087C084408647F544944494C4940497E49024D024A7A0802080A0804 +4D14:2020104000FCFE8400A4288444948288048044FE2802100229FA440284140008 +4D15:7F0408441E44224454440844320CDFE01420126010001FF800087F8800280010 +4D16:10201040FEFC10847CA41084FE9400887C8044FE7C0244027DFA440254144808 +4D17:00207E4042FC7E8442A47E8442947E88148012FEFF02100229FA240242148008 +4D18:03107C20477C44445F64555456445C4C5540537E50025702557A5502A98A0004 +4D19:02087910493E4BA248327AAA412247E67920693EAB82A902297A3902290A0104 +4D1A:104010201E2010FC1000FE009278C648AA48D648AA48C64A924AFE8A82860100 +4D1B:101010921E5210541010FEFE9282C682AAFED682AA82C6FE9282FE82828A0084 +4D1C:101010201EFE10921092FEFE9292C692AAFED620AA24C65A925EFE908292010E +4D1D:1000107C1E44107C1044FE7C9200C7FEAAA0D6EEAAAAC6EA92BAFFE48224002A +4D1E:100011DC1E44115410CCFF549250C648AAFED790AAFEC69092FEFE9082FE0080 +4D1F:00803FFE22203FFC22243FFC242027BC2422279E200023F0221042904452980E +4D20:00803FFE22203FFC22243FFC242027BC2422279E203827C020405FFE41108E0E +4D21:00007FFE024012480A503FFE22203FFC22243FFC284028482F7048444B448C3C +4D22:00803FFE22203FFC22243FFC242027BC2422279E204020402FFE415042488C46 +4D23:08047F1E54F054107F92555255547F1054FE54105E10541054105C1056508020 +4D24:00803FFE22203FFC22243FFC242027BC242227DE224023FC24404BF840409FFE +4D25:00803FFE22203FFC22243FFC242027BC2422279E24003FBC24A444A44ABC9124 +4D26:00803FFE22203FFC22243FFC242227BE20403FFE200027F8200047F8440887F8 +4D27:081C7F70541054FE7F38555455927F10542054FE5E24544454285C10562880C4 +4D28:08007F7E544854507F5C555455547F5C545454545E5C5448545C5CAA568A8118 +4D29:00803FFE22203FFC22243FFC20003FFC21402FF829482FF820005FFC44908988 +4D2A:00803FFE22203FFC22243FFC280024F824083E78220824FE2E545538445484B2 +4D2B:08007F7C541054FE7F92555455107F54542854545E8A547C54045C0856308008 +4D2C:08480844FF442A402A5E5DE088401C402A4050401E2022225412080A14066002 +4D2D:08080808FF082A082AFE5D0888181C182A2850281E4822885408080814286010 +4D2E:08100810FF102A102A925D9288921C922A9250921E922292549208FE14026000 +4D2F:08400840FF402A7E2AAA5D2A882A1C4A2A4A50921F1222225422084214946008 +4D30:08480844FF442A402A5E5DE088401C442A4450481E3022225452088A15066002 +4D31:08200810FF102AFE2A825D0488401C482A5050601E40224254420842143E6000 +4D32:08100810FF102AFE2A105D1088101C7C2A1050381E3822545454089214106010 +4D33:08200810FF102AFE2A825D0488001C282A2850281E2822285444084414446082 +4D34:08100810FF102A102A1E5D1088101C102AFE50821E8222825482088214FE6082 +4D35:10841048FE0054FC5448BA481048384855FEA2483C484448A84810882888C108 +4D36:10401040FEFC54885550BA2010D83B2654F8A2203CF84420ABFE10202820C020 +4D37:10401020FE2055FE5502BA0410F838005400A3FE3C504450A89010922912C20E +4D38:080E08F0FF222A922A545D00887C1C082A1050101EFE22105410081014506020 +4D39:0800087CFF542A542A7C5D5488541C7C2A1050FE1E1022385454089214106010 +4D3A:08200810FF7C2A002A445D2888001CFE2A0050001E7C224454440844147C6044 +4D3B:0640387C08947E242CD44A0801007FFC11102BA845641918E3E60E4001800E40 +4D3C:10481044FE5E55E05428BA12106A39965448A25E3DE04424A8281012286AC186 +4D3D:10201040FEFE54925492BAFE109238A254FEA2483C8845FEA80810082808C008 +4D3E:10841044FE4855FE5420BAFC102039FE5440A2803CFE4510AA10141029FEC000 +4D3F:100011FEFF0254785400BAFC104038A45538A2583C944534A85210902950C020 +4D40:10101092FE54541054FEBA82108238FE5482A2FE3C824482A8FE10002844C082 +4D41:10481148FF5E556A5554BBC81050386455C4A37E3D444564A95411442954C248 +4D42:10201010FEFE54445428BAFE1082389254FEA2923CBA44AAA8AA10BA2882C086 +4D43:08280828FF7C2A282A285DFE88101C7C2A54507C1E54227C5400082814446082 +4D44:105011FCFF5455FC5554BBFC100039FC5400A3FC3D0445FCA88810502BFEC000 +4D45:08207F20083E3E4408A87F1010281E462280FFFE11C82AB40DD0764E01801E40 +4D46:10481048FEFE544854FEBA82117C380054FEA2203CD2442CA8D8102C28CAC030 +4D47:081004107FD04910493E49247FD4491459145D946B544D084908491489140922 +4D48:111023E040480BFC110033F0551010E0111012883FFE24103F7C26384D549412 +4D49:00803FFE24103F7C26382D543492214026303BEE20002FA428A44FA448A4898C +4D4A:0088788849FC488868885BFE4820FDFC492449FC492449FC4800488849049A02 +4D4B:282028207DFE28402840FEFC10847D8456FC54847C8454FC54847C8428944488 +4D4C:282028207C2029FC2820FEA810A87CA8557456227C50545054887C8829044602 +4D4D:282028107DFE280028FCFE8410FC7C0054FC54087C1055FE54107C1028504420 +4D4E:282029247D24292429FCFE0013FE7C20544055FC7D54555455547D542954450C +4D4F:280029DC7C44295428CCFF5410287C44559254207CC8543254C47C1828604580 +4D50:280029DC7D54295429DCFE0011FC7D2455FC55247DFC542057FE7C2028204420 +4D51:0C00700011FCFE24382454A490A428A455249024542438445444928451142208 +4D52:0C0070FC1084FE8438845484908428FC54849084548438845484928450FC2084 +4D53:0C1070101090FE9038FE549091102810541091FE541038105410921050102010 +4D54:0C20702013FEFE2039FC552491FC292455FC9020547038A85524962250202020 +4D55:0C0071FC1104FF0439FC5510911029FE55109110557C394455449344517C2244 +4D56:7E7C48047E2842107E2848FC7F0001007FFC09103288CC643938C54609203310 +4D57:0C0071FC1000FEF83888548890F8280055FC9124552439FC5524932451FC2104 +4D58:0C0070FC1084FEFC388454FC900029FE548090FE552A3A4A5492932250542088 +4D59:0C00702010FEFE4438825520907C288854509068559E382254D49208503021C0 +4D5A:0C1E71E01022FF1238945480902029CE5502910255CE39025502930251FE2102 +4D5B:0C0071EE114AFFEA392A55E49144294A55F09000541038FE5410921051FE2000 +4D5C:0C5071FC1154FFFC395455FC900029FE5500917C550039FE5550935451482266 +4D5D:00207F2049206B205D2049207F2008207F2008200F20F022002255224A9E8000 +4D5E:00047F0449046B245D2449247F2408247F2408240F24F024000455044A948008 +4D5F:0000FE7C9210D610BA109210FE1010FEFE1010101E10E0100210AA10A8108010 +4D60:0040FE409240D6FCBA849304FE041084FE4410441E44E0040204AA04A8288010 +4D61:00003FF801007FFC04401830E00E3FF8292825483FF801007FFC0100FFFE4444 +4D62:0010FE109210D67CBA109210FE1010FEFE1010381E38E0540254AA92A8108010 +4D63:0000FE0092FCD684BA849284FEFC1084FE8410841EFCE0840200AA00A9FE8000 +4D64:3FF808200820FFFE0820102020207FF8292825483FF801007FFC0100FFFE4444 +4D65:0040FE40927CD684BB0892FCFEA410A4FEA410FC1E80E0800282AA82A87E8000 +4D66:0000FE9C9248D608BA889248FE5E1008FE2810481EC8E0480248AA48A8488018 +4D67:08207F280824FFFE00207F2049246B2449247F2808287F100812FFAA0046AA82 +4D68:0048FE449240D6FEBA509254FE581052FE5410581E52E054029AAA92A92E8240 +4D69:03043C2404247FA416242504440C3FF8292825483FF801007FFC0100FFFE4444 +4D6A:0000FEFC9284D684BAFC9284FE8410FCFE0010901E92E0F40298AA92A8D2808E +4D6B:01007FFC50043EF84288A2AA1492187EE0003FF8292825483FF80100FFFE2448 +4D6C:0010FE1092DAD654BA549292FF501020FEFE10821E82E0FE0282AA82A8FE8082 +4D6D:0020FE2092FAD624BA2893FEFE201040FEFC11441E44E07C0244AA44A87C8044 +4D6E:0000FE7C9244D67CBA44927CFE0010FEFE40107E1EAAE12A024AAA92A82A8044 +4D6F:0008FE1C92E0D620BBFE9220FEFC10A4FEFC10A41EFCE02002FCAA20A9FE8000 +4D70:0040FE7E9280D77CBA44927CFE44107CFE0010FE1E40E0FE032AAA4AA8928026 +4D71:0010FE1092FED610BA7C9200FE7C1044FE7C10281EFEE000027CAA44A87C8044 +4D72:007CFE449244D67CBA0092EEFEAA10AAFEEE10101EFEE0380254AA92A9108010 +4D73:0010FE289244D6BABB0092FEFE9210D6FE9210FE1E00E07C0244AA7CA844807C +4D74:0000FEFE92AAD6AABAEE9228FEEE10AAFEAA10EE1EAAE0AA02EEAAA8A82A801E +4D75:20403F7E48909FF8149012501130FFFE08203FF8D55613901FF001007FFC2448 +4D76:200021FC21547D5445DC845075DC5554555455DC7554555405DC05502852103E +4D77:100011FC11547D5411DC1050FDDC0154115411DC7D54115411DC1D50E052403E +4D78:7C101052FE94382854449FF212901EF002803EF822883EF822883EFA028201FE +4D79:201C7DC8917EFDC828185FF092901EF002803EF822883EF822883EFA028201FE +4D7A:21F8210821F8250AF5FA250A25FA2402279E20903090EF9E4492049204920892 +4D7B:1C4414441CEE55445DEE55445DEE41447744140014FEF702557E550255FE9502 +4D7C:0440247C24A83D5004287DFE248844488FF848244FE448247FFC0440FC7C2444 +4D7D:0810FF7E08107E7C42447E282418FEE601003FF80100FFFE040008201FF00810 +4D7E:081017FE3210D15010200810FF1008FE7E1000FC7E4442487E2824101E28E0C6 +4D7F:0810FF1008FC7E1000FC7E4442287E1024281EC6E10001FC01003FF820083FF8 +4D80:0810FF7E08107E7C42047E4824381E44E10006C01830E7CE00001FF010101FF0 +4D81:0810FF7E08107E7C42447E3824447E8201187D6009183FF6D0101FF010101FF0 +4D82:2020CE208220EE7C82448284FE04008492449224DA249204DA0492049328D910 +4D83:2010CE108210EE2882288244FE4400A292109210DA7C9204DA0892089310D910 +4D84:2000CEFC8210EE1082948254FE58001093FE9210DA109210DA1092109310D910 +4D85:2020CE20823CEE4482A88210FE2800449282927CDA449244DA449244937CD944 +4D86:2028CE248240EE7E82C88348FE7E00489248927EDA489248DA48927E9340D940 +4D87:2010CE1082FEEE9282FE8292FEFE0000927C9244DA7C9244DA7C92449344D94C +4D88:2014CE1283FEEE1082FE8292FEFE009292FE9292DA0493FEDA4492249324D90C +4D89:2020CEDE828AEECA82AA82D2FEA6000092FE9292DA9292FEDA92929293FED982 +4D8A:20007CFC44247C2444247C240024FEFC9244FE449244FE440044FE4445FE8400 +4D8B:20007CFC44447C4844487C50005CFE449244FE449268FEA80090FE9845248442 +4D8C:20407C4044FC7C8445047EF40094FE9492F4FE849294FE880082FE82447E8400 +4D8D:0040FEF8208828F84488FCF8140011FC11247DFC112411FC1C00E3FE40880108 +4D8E:10103E1022283E2822443E82007C7F0049007F7C49447F440044FFC4227C4244 +4D8F:4420287C0044FC7C1444147CFC0090FE9092FEFE329232FE5A0054FE90441084 +4D90:20107C2844447CBA45007CFE0092FED69292FEFE9200FE7C0044FE7C4444847C +4D91:20207CF844207DFC45047CF800A8FEF892A8FEF89244FEFC0020FEB844A0857C +4D92:0100FFFE02847D78255025484D6420083FF820083FF822083FF8244843889C68 +4D93:2040202023FEF888A852AFACAAAAAAA8ADACA800A904B9FC210421FC21042204 +4D94:102050205C2050A0FEAC28B4AAE4D7A482A4FEB4AAA8AAA2D6A29E82E27E0200 +4D95:080028002F7C2854FF54145455546B54417C7F40554055406B424F42713E0100 +4D96:081028102F102828FF28144455446BA241107F10557C55046B084F0871100110 +4D97:0800287E2F042804FF74145455546B5441547F54557455546B044F0471140108 +4D98:082028102F1028FEFF00140455446B4441247F24552855286B084F1071FE0100 +4D99:0800287E2F402840FF40147C55446B4441447F44557C55406B404F40717E0100 +4D9A:081028102F10287CFF54145455546B54417C7F54551055146B124F7E71220100 +4D9B:7F0408441E44224454440844310CC9E009007FFC04402AA83FF824482AA83FF8 +4D9C:101050505C50507CFE502890AA10D6FE8200FE00AA7CAA44D6449E44E27C0244 +4D9D:102050205C2051FCFE2028A8AAA8D6A88374FE22AA50AA50D6889E88E3040202 +4D9E:082428242F7E2824FF24143C55246B24413C7F24552455FE6B004F2471220142 +4D9F:102050205C3C5044FE482880AA20D6CC8284FE84AACCAA84D6849E84E2FC0284 +4DA0:00283FFE20202FA420282F9048AA4FC68082010011F81100FFFE04402AA83FF8 +4DA1:100250E25CA250AAFEAA28EAAAAAD6AA82EAFEAAAAAAAAA2D6E29E02E24A02A4 +4DA2:100C500A5C0850FEFE882888AAFAD68A828AFEECAAACAAACD6EA9E8AE2960322 +4DA3:101050545C545054FE7C2800AAFED600827CFE44AA44AA7CD6449E28E2FE0200 +4DA4:1000507C5C445074FE5428FEAA82D67C8244FE7CAA44AA7CD6449E44E2540248 +4DA5:1020503C5C2050FEFEA228B8AAE4D69C8280FEBCAAA4AABCD6A49EBCE2A4037E +4DA6:102051FC5C2050FCFE2029FEAA00D6FC8284FEFCAA84AAFCD6849EFCE2480284 +4DA7:101050105C7E5010FEFE2844AAEED6448264FEDEAA00AAFED6289E28E24A0286 +4DA8:101050105C285044FE82287CAA00D6EE82AAFEAAAAEEAA44D6449EAAE2AA0312 +4DA9:102050105DFE5054FFA828ACABAAD6A883ACFE00AA84AAFCD6849EFCE2840304 +4DAA:104C51FA5C4851FEFE082868AA5AD6FA83AAFEFCAAACAAFCD6AA9EFAE2960222 +4DAB:13DE52525FDE5000FFFE2A00AAC8D64E83EAFEB2AAEAAAAAD6EA9EB4E3E4022A +4DAC:00007C7C1010FEFE1010101008407F7C1440FF7C22043E7C22403E7C2242263E +4DAD:140012FE12101010FF90147C14101510151016FE260024022C02540243FE8000 +4DAE:04400420FFFE0910116021844F0480FC00001FF001007FFC028004401830600C +4DAF:208027FC240427BCF0A056BE52A257B652AA96AA50B626A222BE57A052A2867E +4DB0:1000FF8680B8F7881408D7CE5458F6C85548D54E16F8D44857CAF40A544ACFC6 +4DB1:408047FC740497BC50A026BE52A28FB60AAA66AA10B606A282BE47A022A2067E +4DB2:104013FE12027FDE5450575E7D5257DA55565756FC5A4752455E47D055524B3E +4DB3:081008081400227E5D0080807F3855287F2800287F28552A7F2A554A55464380 +4DB4:08402A7C48941410212846C41830EFEE00003BB82AA87FFC44447FFC4444444C +4DB5:1004103E2BE0463CBA2002FCFEA4AAB8FEE4029CFE80AAB8FEA8AAAAAB2A8646 +4DB6:020003F802007FFE000011F811087DF811081DF8300057FE1090109C5150223E +4DB7:00000110791049104910491049104910491049107A104A1202120412040E0800 +4DB8:00000080788048804880492049204A204840484078884884010403FE01020000 +4DB9:000001000100210821082108210821083FF80100010002000200040008003000 +4DBA:3C102410241025FF3D112511251125293D252543258125012501450155058902 +4DBB:3C202420242025FE3D2224242420242824283C48244824882489450956078800 +4DBC:7848488449124A21784449824BFE480278204810495249414A458845A83C1000 +4DBD:3D5225222552258A3DFE2448244824873D102420247C24842548442054588984 +4DBE:000008100810681F8BA188AAEBC88888FF88081408140C1412222122C1410000 +4DBF:084808481448124828487E48A2483E4822483E482088288924892A8933072100 +4DC0:0000000000007FFC00007FFC00007FFC00007FFC00007FFC00007FFC00000000 +4DC1:0000000000007C7C00007C7C00007C7C00007C7C00007C7C00007C7C00000000 +4DC2:0000000000007C7C00007FFC00007C7C00007C7C00007C7C00007FFC00000000 +4DC3:0000000000007FFC00007C7C00007C7C00007C7C00007FFC00007C7C00000000 +4DC4:0000000000007C7C00007FFC00007C7C00007FFC00007FFC00007FFC00000000 +4DC5:0000000000007FFC00007FFC00007FFC00007C7C00007FFC00007C7C00000000 +4DC6:0000000000007C7C00007C7C00007C7C00007C7C00007FFC00007C7C00000000 +4DC7:0000000000007C7C00007FFC00007C7C00007C7C00007C7C00007C7C00000000 +4DC8:0000000000007FFC00007FFC00007C7C00007FFC00007FFC00007FFC00000000 +4DC9:0000000000007FFC00007FFC00007FFC00007C7C00007FFC00007FFC00000000 +4DCA:0000000000007C7C00007C7C00007C7C00007FFC00007FFC00007FFC00000000 +4DCB:0000000000007FFC00007FFC00007FFC00007C7C00007C7C00007C7C00000000 +4DCC:0000000000007FFC00007FFC00007FFC00007FFC00007C7C00007FFC00000000 +4DCD:0000000000007FFC00007C7C00007FFC00007FFC00007FFC00007FFC00000000 +4DCE:0000000000007C7C00007C7C00007C7C00007FFC00007C7C00007C7C00000000 +4DCF:0000000000007C7C00007C7C00007FFC00007C7C00007C7C00007C7C00000000 +4DD0:0000000000007C7C00007FFC00007FFC00007C7C00007C7C00007FFC00000000 +4DD1:0000000000007FFC00007C7C00007C7C00007FFC00007FFC00007C7C00000000 +4DD2:0000000000007C7C00007C7C00007C7C00007C7C00007FFC00007FFC00000000 +4DD3:0000000000007FFC00007FFC00007C7C00007C7C00007C7C00007C7C00000000 +4DD4:0000000000007FFC00007C7C00007FFC00007C7C00007C7C00007FFC00000000 +4DD5:0000000000007FFC00007C7C00007C7C00007FFC00007C7C00007FFC00000000 +4DD6:0000000000007FFC00007C7C00007C7C00007C7C00007C7C00007C7C00000000 +4DD7:0000000000007C7C00007C7C00007C7C00007C7C00007C7C00007FFC00000000 +4DD8:0000000000007FFC00007FFC00007FFC00007C7C00007C7C00007FFC00000000 +4DD9:0000000000007FFC00007C7C00007C7C00007FFC00007FFC00007FFC00000000 +4DDA:0000000000007FFC00007C7C00007C7C00007C7C00007C7C00007FFC00000000 +4DDB:0000000000007C7C00007FFC00007FFC00007FFC00007FFC00007C7C00000000 +4DDC:0000000000007C7C00007FFC00007C7C00007C7C00007FFC00007C7C00000000 +4DDD:0000000000007FFC00007C7C00007FFC00007FFC00007C7C00007FFC00000000 +4DDE:0000000000007C7C00007FFC00007FFC00007FFC00007C7C00007C7C00000000 +4DDF:0000000000007C7C00007C7C00007FFC00007FFC00007FFC00007C7C00000000 +4DE0:0000000000007FFC00007FFC00007FFC00007FFC00007C7C00007C7C00000000 +4DE1:0000000000007C7C00007C7C00007FFC00007FFC00007FFC00007FFC00000000 +4DE2:0000000000007FFC00007C7C00007FFC00007C7C00007C7C00007C7C00000000 +4DE3:0000000000007C7C00007C7C00007C7C00007FFC00007C7C00007FFC00000000 +4DE4:0000000000007FFC00007FFC00007C7C00007FFC00007C7C00007FFC00000000 +4DE5:0000000000007FFC00007C7C00007FFC00007C7C00007FFC00007FFC00000000 +4DE6:0000000000007C7C00007FFC00007C7C00007FFC00007C7C00007C7C00000000 +4DE7:0000000000007C7C00007C7C00007FFC00007C7C00007FFC00007C7C00000000 +4DE8:0000000000007FFC00007C7C00007C7C00007C7C00007FFC00007FFC00000000 +4DE9:0000000000007FFC00007FFC00007C7C00007C7C00007C7C00007FFC00000000 +4DEA:0000000000007C7C00007FFC00007FFC00007FFC00007FFC00007FFC00000000 +4DEB:0000000000007FFC00007FFC00007FFC00007FFC00007FFC00007C7C00000000 +4DEC:0000000000007C7C00007FFC00007FFC00007C7C00007C7C00007C7C00000000 +4DED:0000000000007C7C00007C7C00007C7C00007FFC00007FFC00007C7C00000000 +4DEE:0000000000007C7C00007FFC00007FFC00007C7C00007FFC00007C7C00000000 +4DEF:0000000000007C7C00007FFC00007C7C00007FFC00007FFC00007C7C00000000 +4DF0:0000000000007C7C00007FFC00007FFC00007FFC00007C7C00007FFC00000000 +4DF1:0000000000007FFC00007C7C00007FFC00007FFC00007FFC00007C7C00000000 +4DF2:0000000000007C7C00007C7C00007FFC00007C7C00007C7C00007FFC00000000 +4DF3:0000000000007FFC00007C7C00007C7C00007FFC00007C7C00007C7C00000000 +4DF4:0000000000007FFC00007FFC00007C7C00007FFC00007C7C00007C7C00000000 +4DF5:0000000000007C7C00007C7C00007FFC00007C7C00007FFC00007FFC00000000 +4DF6:0000000000007C7C00007C7C00007FFC00007FFC00007C7C00007FFC00000000 +4DF7:0000000000007FFC00007C7C00007FFC00007FFC00007C7C00007C7C00000000 +4DF8:0000000000007FFC00007FFC00007C7C00007FFC00007FFC00007C7C00000000 +4DF9:0000000000007C7C00007FFC00007FFC00007C7C00007FFC00007FFC00000000 +4DFA:0000000000007FFC00007FFC00007C7C00007C7C00007FFC00007C7C00000000 +4DFB:0000000000007C7C00007FFC00007C7C00007C7C00007FFC00007FFC00000000 +4DFC:0000000000007FFC00007FFC00007C7C00007C7C00007FFC00007FFC00000000 +4DFD:0000000000007C7C00007C7C00007FFC00007FFC00007C7C00007C7C00000000 +4DFE:0000000000007C7C00007FFC00007C7C00007FFC00007C7C00007FFC00000000 +4DFF:0000000000007FFC00007C7C00007FFC00007C7C00007FFC00007C7C00000000 +4E00:0000000000000000000000000000FFFE00000000000000000000000000000000 +4E01:00007FFC01000100010001000100010001000100010001000100010005000200 +4E02:0000FFFE040004000800080010001FF000100010001000100010001000A00040 +4E03:02000200020002000200023C07C0FA0002000200020002040204020401FC0000 +4E04:01000100010001000100010001000100010001000100010001000100FFFE0000 +4E05:0000FFFE01000100010001000100010001000100010001000100010001000100 +4E06:0000FFFE02000200040004000800080010002000400080000000000000000000 +4E07:00000000FFFE04000400040007F0041004100810081010101010201040A08040 +4E08:00800080008000807FFC0080108010800880048002800100028004401830E00E +4E09:000000007FFC00000000000000003FF800000000000000000000FFFE00000000 +4E0A:02000200020002000200020003F80200020002000200020002000200FFFE0000 +4E0B:0000FFFE02000200020002000240022002100208020802000200020002000200 +4E0C:0000FFFE08200820082008200820082008200820082010201020202040208020 +4E0D:00007FFC00800080010001000340052009101108210441048100010001000100 +4E0E:1000100010001FFC1000200020003FF8000800080008FFC80008000800500020 +4E0F:0000FFFE01000100210021FC2104210421043FFC000400040004000400280010 +4E10:0000FFFE01000100210021FC2100210021003FFC000400040004000400280010 +4E11:00003FF0021002100210021002103FF0041004100410041004100410FFFE0000 +4E12:00003FF8010801080908050802080308048804880808105020200000FFFE0000 +4E13:0100010001003FF802000200FFFE040008000FF0001000200640018000400020 +4E14:00001FF01010101010101FF01010101010101FF01010101010101010FFFE0000 +4E15:00007FFC0080010001000340052009103108C1040100010001000000FFFE0000 +4E16:02201220122012201220FFFE122012201220122013E01000100010001FFC0000 +4E17:111011101110111011101110FFFE11101110111011101110111011101FF01010 +4E18:001000781F8010001000100010001FFC104010401040104010401040FFFE0000 +4E19:0000FFFE0100010001007FFC4104410442844244442448244004400440144008 +4E1A:04400440044004404444244424481448145014600440044004400440FFFE0000 +4E1B:08200820082008200820082008201450125022882088410482020000FFFE0000 +4E1C:0200020002007FFC04000900110021003FF80100092011102108410405000200 +4E1D:0810081010201020224442847CF804080810102020407EFC00000000FFFE0000 +4E1E:00003FF00020004000807D0405880950092011102108410685000200FFFE0000 +4E1F:00007FFC0100010001003FF8010001000100FFFE02000400082010103FF81008 +4E20:04400440044004447C48045004600440044204421C42E43E44000000FFFE0000 +4E21:0000FFFE0100010001007FFC410449244924492449244FE44024400440144008 +4E22:001000F83F00010001003FF8010001000100FFFE02000400082010103FF81008 +4E23:0000FFFE0440044004407C7C4444444444447C7C044408400840104020404040 +4E24:0000FFFE0440044004407FFC4444444444444AA44A9451144204400440144008 +4E25:00007FFC024012480A5002403FFE200020002000200020002000400040008000 +4E26:1010082004407FFC0440044004404444244414481450044004400440FFFE0000 +4E27:010001007FFC01001110091009200100FFFE1200111010A010401430180E1000 +4E28:0100010001000100010001000100010001000100010001000100010001000100 +4E29:0040004010401040104010401040104010C013401C4010400040004000400040 +4E2A:0100010002800440082010102108C10601000100010001000100010001000100 +4E2B:0000201010200840048001000100010001000100010001000100010001000100 +4E2C:0100010001001100090009000100030005000900310001000100010001000100 +4E2D:01000100010001003FF8210821082108210821083FF821080100010001000100 +4E2E:00007FF00410041004107FD0041004100410FFD00412040A040A040604020400 +4E2F:0100010C017007807900010C017007807900010C017007807900010001000100 +4E30:0100010001007FFC0100010001003FF8010001000100FFFE0100010001000100 +4E31:04400440444444444444444444444C44547C644404400840084010402040C040 +4E32:010001003FF8210821083FF8010001007FFC410441047FFC4104010001000100 +4E33:044004403FF8244824483FF8044004407FFC444444447FFC4844104020404040 +4E34:08800880088049FE49404A204C20480049FC492449244924492409FC09040800 +4E35:0440244814500440FFFE0000082004403FF801000100FFFE0100010001000100 +4E36:0000000000000000000004000200010000800040004000000000000000000000 +4E37:0000000000000008200810100810042004400080000000000000000000000000 +4E38:02000200020002007FE0022012200A20042004200A20092211222022401E8000 +4E39:00001FF0101010101210111011101010FFFE1010101010102010201040508020 +4E3A:010021001100110001007FF80208020802880448044808081008200840508020 +4E3B:0200010000007FFC01000100010001003FF801000100010001000100FFFE0000 +4E3C:08200820082008207FFC08200A2009200820FFFE082008201020102020204020 +4E3D:0000FFFE000000003EF822882288228832C82AA82AA82288228822882AA82490 +4E3E:2208110811100020FFFE082011102108CFE6010001007FFC0100010001000100 +4E3F:0100010001000100010001000100010001000200020004000400080010002000 +4E40:000000000000080008001400140024004200010000C00030000E000000000000 +4E41:000000003F000100010001000100010001000080008000400020001000080006 +4E42:000000102010201010201020082008400440028001000280044008203018C006 +4E43:00003FF00410042004200440047C040408040804080410041004200440288010 +4E44:000000100010001000100220012000C0004000A0011022102400380020000000 +4E45:04000400040007E008200820104020404080008001400240042008103008C006 +4E46:0010081008101020102020407FC020800080014001400220042008103008C006 +4E47:002003F03E00020002000200020003FCFE000200020002040204020401FC0000 +4E48:01000100020002000440084010802080410002000420081010083FFC10040000 +4E49:020001102110201010201020082008400440028001000280044008203018C006 +4E4A:0000000801FC7E00000820081010101008200840000000000000000000000000 +4E4B:02000100010000007FF800100020004000800100020004001800240043FE0000 +4E4C:010002001FF01010101010101050102010001FFC000400047FE4000400280010 +4E4D:080008000FFE12001200220043F882000200020003FC02000200020002000200 +4E4E:001000F83F0001001110091009200100FFFE0100010001000100010005000200 +4E4F:001001F87E0000000200010001007FF8003000C003000C003000480087FE0000 +4E50:002000F01F0010001100210021003FFC01000920091011082104410405000200 +4E51:000801FC7F00010009040908119021A045408540092011102108410681000100 +4E52:002000F01F00100010001FF81080108010801080FFFE00000800100020004000 +4E53:002000F01F00100010001FF81080108010801080FFFE00000040002000100008 +4E54:001000F83F00010002007FFC044008203018C826082008200820102010202020 +4E55:000800FC3F8020802FF8208020803FFE208020802FF82888488848A888900080 +4E56:00701F8001000100FFFE0100092009247928093009221922E91E010001000100 +4E57:00F83F0001007FFC09200920FFFE092009207FFC0380054009203118C1060100 +4E58:00F83F0001007FFC01000924F93809223922CB9E054009203118C10601000100 +4E59:00007FF00020004000800100020004000800100010002004200420041FFC0000 +4E5A:100010001000100010001000100010001000100010001004100410040FFC0000 +4E5B:00000000FFFC0004000800100000000000000000000000000000000000000000 +4E5C:000000001000103010D017103810D0101010105010201002100210020FFE0000 +4E5D:04000400040004007FE0042004200420082008200820102210222022401E8000 +4E5E:080008001FFC1000200040009FE000200040018006000804100410040FFC0000 +4E5F:010001001100113011D017103910D1101110115011201102100210020FFE0000 +4E60:00007FF8000800080808040802080208006801880E0870082008000800500020 +4E61:020002000420082010403F800108020804101FE000400080010006001800E000 +4E62:082008200820082049204920492049204920492049204F2279220022001E0000 +4E63:084008401040104022404240FC4004400840104024404242FE424242003E0000 +4E64:0000FFFE02000240022002100208020000007FF0006001800600180420041FFC +4E65:000801FC7E000010101008200440008000007FF0006001800600180420041FFC +4E66:0220021002083FE00220022002200220FFFC0204020402040204022802100200 +4E67:0040044002401240084009FC7E400040004000007FF0006003801C0420041FFC +4E68:08200820102022204120FFA000A000207F20412041204122412241227F1E4100 +4E69:08200820082008200FA00820082008207F20412041204122412241227F1E4100 +4E6A:0000FDFC052405240924092411FC112421242124412441FC400240023FFE0000 +4E6B:100010007E7C124412441244227C4A4484007FF0006001800600180420041FFC +4E6C:00003FFC20003FF820083FF820003FFC00007FF0006001800600180420041FFC +4E6D:0000FFFE040008001FF02810C8100FF000007FF0006001800600180420041FFC +4E6E:0C0070FC408444845C8464944488088010807FF0006001800600180420041FFC +4E6F:00F87F0011100920FFFE01000100050002007FF0006001800600180420041FFC +4E70:00007FFC0004088804802480108010800100FFFE010002C0042008103008C004 +4E71:04400E40384008400840FF40084008403E4022402240224222423E42223E0000 +4E72:4080208009FC12042448E04020A023182C0600007FF0006003801C0420041FFC +4E73:02200F20F020012091204A200020FE20042008200F20F82248220822281E1000 +4E74:080C08F07E8008800EFE788808882908120800007FF0006003801C0420041FFC +4E75:102008207F20002022201420FFA00820082008207F20082208220822081E0800 +4E76:012001107FFC01003FF821083FF821083FF8210800003FF001C01E0420041FFC +4E77:1020082040A824A409221228703010C0170000007FF0006003801C0420041FFC +4E78:0800087C28442E643A54EAFE2A442AA42A942EFE2804282A201220021FFE0000 +4E79:08200820FFA008207F2041207F2041207F2049200820FFA208220822081E0800 +4E7A:061838E020803EFC22903E902090411080007FF0006001800600180420041FFC +4E7B:10100810FF2820443E822210220842204A1084087FF0006003801C0420041FFC +4E7C:2080104087FC4040104023F8E040204027FC20007FF0006003801C0420041FFC +4E7D:01081FD001207FFC02000FF03810CFF008100FF000003FF001C01E0420041FFC +4E7E:104010401080FEFE11007E0044FC7C0844107C201040FE801102110210FE1000 +4E7F:0F20F020112089204220102022207C2008201120FFA008A24A228922281E1000 +4E80:04000FE010403FF051101FF011101FF001003FF821083FF821083FFA010200FE +4E81:08200820FFA0087E7F4041807F7C41047F0800107F200840FFC20842083E0800 +4E82:0F20F02049202220FE2014200820FF209520BD208320BD2295228922951EA300 +4E83:082049202A20FFA02A20492088A04120412077A09120552227A24122811E0100 +4E84:0820FFA008207F200020FFA080A07F2000207F2041207F22412222220F9EF000 +4E85:0010001000100010001000100010001000100010001000100010001000500020 +4E86:00007FF800100020004001800100010001000100010001000100010005000200 +4E87:0800080008000FFC100411082110410001000100010001000100010005000200 +4E88:00001FF000100220014000807FFE008200840080008000800080008002800100 +4E89:080008001FE020204040BFF8010801087FFE010801083FF80108010005000200 +4E8A:010001007FFC111009203FF801080108FFFE010801083FF80108010005000200 +4E8B:01000100FFFE01003FF821083FF801003FF80108FFFE01083FF8010005000200 +4E8C:0000000000003FF800000000000000000000000000000000FFFE000000000000 +4E8D:00003FF80000000000000000FFFE010001000100010001000100010005000200 +4E8E:00003FF80100010001000100FFFE010001000100010001000100010005000200 +4E8F:00003FF8000000000000FFFE0400040008000FF0001000100010001000A00040 +4E90:00003FF8020002000200FFFE0400040008000FF0001000100010001000A00040 +4E91:00003FF80000000000000000FFFE0200040004000840102020107FF820080008 +4E92:00007FFC0400040004000FF008100810101010201FE0002000400040FFFE0000 +4E93:00003FF8000000000000FFFE0820082008200820082010201020202040208020 +4E94:00007FFC02000200020002003FF00410041004100410081008100810FFFE0000 +4E95:08200820082008207FFC0820082008200820FFFE082008201020102020204020 +4E96:000000003FF8000000000000FFFE0000000000003FF8000000000000FFFE0000 +4E97:010001002108210821083FF80000000000003FF80000000000000000FFFE0000 +4E98:00007FFC000000001FF0101010101FF0101010101FF0101000000000FFFE0000 +4E99:00007FFC0400040004000FF008100A10111010200420022000400040FFFE0000 +4E9A:00007FFC044004400440044044442444244814481450044004400440FFFE0000 +4E9B:04400440244427482470244224422F42F03E400000001FF0000000007FFC0000 +4E9C:00007FFC0440044004403FF824482448244824483FF8044004400440FFFE0000 +4E9D:0400082010103FF80810102024487EFC020400003FF8000000000000FFFE0000 +4E9E:00007FFC0440044004403C7820082008200820083C78044004400440FFFE0000 +4E9F:00003FF0002000400180793C49044944492849107928014405000200FFFE0000 +4EA0:020001000100FFFE000000000000000000000000000000000000000000000000 +4EA1:0200010001000000FFFE1000100010001000100010001000100010001FFC0000 +4EA2:020001000100FFFE000000000FE00820082008200820082210221022201E4000 +4EA3:020001000100FFFE042004200420042004200420042008200820102020204020 +4EA4:020001000100FFFE0000101010082024482404400280010002800C403030C00E +4EA5:0200010000007FFC02000400082010403F8801100620184060A003100C087004 +4EA6:020001000100FFFE044004402450244824484444444488440840104021404080 +4EA7:020001007FFC00000820042004403FFE20002000200020002000400040008000 +4EA8:02000100FFFE00001FF0101010101FF000003FF0006001800100010005000200 +4EA9:020001000100FFFE000000003FF82108210821083FF82108210821083FF82008 +4EAA:02000100FFFE0440145024484844094010807FE0002000200010001000080006 +4EAB:020001007FFC00001FF010101FF000001FE000400180FFFE0100010005000200 +4EAC:02000100FFFE000000001FF01010101010101FF0010011101108210445040200 +4EAD:020001007FFC00001FF010101FF000007FFE40029FF401000100010005000200 +4EAE:020001007FFC00000FE008200FE000007FFE400287C40440044008423042C03E +4EAF:02000100FFFE00001FF010101FF000003FF8200820083FF8200820083FF82008 +4EB0:02000100FFFE000000001FF010101FF010101FF0010011101108210445040200 +4EB1:02000100FFFE0800080013F81208320853F89208120813F81208100017FC1000 +4EB2:020001003FF8000008200440FFFE010001007FFC010009201110210845040200 +4EB3:01007FFC00001FF010101FF000007FFE400280F43F00020003F87E02020201FE +4EB4:01007FFC00001FF010101FF000007FFE41029FF401007FFC02003FE00822701E +4EB5:0100FFFE000008407DF808480CC8784A08AA2906130204880C503530C60E0400 +4EB6:0100FFFE00003FF8200827C824483FF800001FF010101FF010101FF00000FFFE +4EB7:010000803FFC041002203FFE22402FF822483FFE22482FF826604A50524C8240 +4EB8:20881048FC5001FC7D2445247DFC01247D2409FC10201C20F3FE102050202020 +4EB9:0100FFFE00002FEC48246BAC48246BAC4AA4FFFE90121FF010101FF01010FFFE +4EBA:0100010001000100010001000280028004400440082008201010200840048002 +4EBB:0800080008001000100030003000500090001000100010001000100010001000 +4EBC:01000100010001000280028004400440082010102008C00600000000FFFE0000 +4EBD:010001000100028002800440082010102008C006020001000080008000000000 +4EBE:008000800080208020802140214022202220241028083006200020003FFE0000 +4EBF:080008000BFC1008101030203040508090801100110012021202120211FE1000 +4EC0:08200820082010201020302037FE502090201020102010201020102010201020 +4EC1:08000800080013FC1000300030005000900010001000100017FE100010001000 +4EC2:084008400840104013FC30443044504490441084108410841104110412281410 +4EC3:080008000BFE1020102030203020502090201020102010201020102010A01040 +4EC4:00003FFE20002000208020802080208020802140214022204220441088081006 +4EC5:08000BFC09041104110430883088508890501050102010201050108811041602 +4EC6:0840084008401040104030503048504490441040104010401040104010401040 +4EC7:090009000900110017F0311031105110911011101110121212121412180E1000 +4EC8:0800082009201120112031203120512091201110111012101208140818041002 +4EC9:080009F0091011101110311031105110911011101110111211121212120E1400 +4ECA:0100010002800440082012102108C10600001FF0001000200020004000800100 +4ECB:0100010002800440082010102008C82608200820082008201020102020204020 +4ECC:010001000280024004200810110861040100028002800440082010102008C006 +4ECD:080008000BF810881090309030A050BC90841084110411041104120412281410 +4ECE:0820082008200820082008200820082008501450125012882088210442048402 +4ECF:08400840084010401040308030805080910011101108120817FC120410041000 +4ED0:0100010002800440082010102108C10601000100FFFE01000100010001000100 +4ED1:0100010002800440082010102008C806083008C00F0008080808080807F80000 +4ED2:0100010002800440082010102008C6060180004000000C00030000C000200000 +4ED3:010001000280044008203018C0060FE00820082008A008440804080407FC0000 +4ED4:08000BF80808101010203040304057FE90401040104010401040104011401080 +4ED5:084008400840104010403FFE304050409040104010401040104017FC10001000 +4ED6:084008400A401258126832C833485E4892481248125812421202120211FE1000 +4ED7:081008100810101013FE30103010511091101090109010501020105011881606 +4ED8:081008100810101017FE30103010501091101090109010101010101010501020 +4ED9:1040104010402040244464446444A4442444244424442444244427FC20042000 +4EDA:0100010002800440082010102108C1060100210821082108210821083FF80008 +4EDB:081008780BC01040104030403040507E97C010401040104210421042103E1000 +4EDC:08000800080013FE10203020302050209020102010201020102017FE10001000 +4EDD:0100010002800440082010102008C0061FF0010001000100010001007FFC0000 +4EDE:080008000BFC1044104432443244524494841084108411041104120414281810 +4EDF:081008780BC0104010403040304057FE90401040104010401040104010401040 +4EE0:08000BFC084010401040304030405FFE90401040104010401040104010401040 +4EE1:08800880090011FE1200340031F8500890101060108011001202120211FE1000 +4EE2:08800880090011FC120432043404590490841044104410041004100410281010 +4EE3:089008880888108010BE37C03080504090401040102010221012100A10061002 +4EE4:01000100028004400A2011102108C0061FF00010002004400280010000800080 +4EE5:0010041022102110211020102010202020202020244028503088210402020402 +4EE6:0820082008201020102031283124512492221222122214221020102010A01040 +4EE7:02000200020003F8020002000200FFFE0100010001000280044008203018C006 +4EE8:080008000BFC100010003000300051F89000100010001000100017FE10001000 +4EE9:084008400840104010403040307C504090401040104010401040104017FE1000 +4EEA:088008480A481208120831103110511090A010A01040104010A0111012081406 +4EEB:084008400880108011003110321054209020104010801108120417FE12021000 +4EEC:0900088008BC1204120432043204520492041204120412041204120412141208 +4EED:080008000BF81088108832883188508890C810A81098110E1108120814501820 +4EEE:0808083C0BC012001200320033F8528892881288125012501220145014881906 +4EEF:0840084008401148114432423242544890481048101010101020104011801600 +4EF0:080008800B3C122412243224322452249224122412B413281220102010201020 +4EF1:0840084008A010A01110328834465040900013F8100810101010102010201040 +4EF2:084008400840104017FC3444344454449444144417FC14441040104010401040 +4EF3:08200A200A2012221222322433A85230922012201220122212A21322121E1000 +4EF4:080009FC09041104110431FC31045104910411FC110411041204120414141808 +4EF5:11001100110023F8224062406440A04020402FFE204020402040204020402040 +4EF6:082008200920112011FC322032205420902017FE102010201020102010201020 +4EF7:0840084008A010A0111032083406511091101110111011101110121012101410 +4EF8:081008780FC0104010403040304057FE904010A010A011101110120814041802 +4EF9:08400840084017FC10403040304053FC9040104010401FFE1040104010401040 +4EFA:01000280044008203018C0061FF01000100010001FF01000100010001FF80000 +4EFB:081008780BC010401040304030405FFE90401040104010401040104017FC1000 +4EFC:080008000BFE1020102030203020502091FC1020102010201020102017FE1000 +4EFD:081008900890108811083104320455FA90881088108810881108110812281410 +4EFE:08000FFE08801080108030F8310851089108120813F810101010101017FE1000 +4EFF:08800840084017FE11003100310051F891081108110811081208120814501820 +4F00:082009200920111011103248324854449882108011101108120817FC12041000 +4F01:010001000280044008203118C1060100110011F81100110011001100FFFE0000 +4F02:1040104010402FFE2040604067FCA44424442444244424542448204020402040 +4F03:08000BF80808111010A0304037FE504290441040104010401040104011401080 +4F04:08000BFC08441044104433FC32405240944017FE10421042104A104410401040 +4F05:08400840084017FC1040324832485248924813F81048104010421042103E1000 +4F06:09000900090011FC12A434A430A4512491241244144410841104120414281010 +4F07:080009F0091011101110320E340053F891081110109010A0104010A013181C06 +4F08:0800088008401020112031003100550495021502150219081108110810F81000 +4F09:08800840084013FC1000300031F05110911011101110111211121212120E1400 +4F0A:08000BF808881088108837FE30885088908813F8108810801100110012001400 +4F0B:100017F81108211021106120613CA10421042288228822502420245028882306 +4F0C:08000BFE0A00120012F8328832885288928812A81290128214821482187E1000 +4F0D:08000BFC084010401040304033F8508890881088108811081108110817FE1000 +4F0E:08400840084017FE10403040304057F892081208111010A0104010A011181606 +4F0F:0840085008481048104037FE3040504090A010A010A011101110120814041802 +4F10:089008880888108010BE37C03080504490441048103010221052118A16061002 +4F11:084008400840104017FE304030E050E091501150124814441842104010401040 +4F12:0808081C09E011001100310031FE511091101110111011101110121012101410 +4F13:080008000BFE102010203040304050D091481244144410401040104010401040 +4F14:080008000BFE12021404300031F05110911011101110111212121212140E1800 +4F15:08400840084013FC10403040304057FE904010A010A011101110120814041802 +4F16:088008800880108017FE3080310051FC91441244124814501420185010881306 +4F17:0100010002800440082010102828C82608200820082014501250228841048202 +4F18:089008880888108017FE30A030A050A090A010A01120112211221222121E1400 +4F19:08400840084010401244324432485450904010A010A011101110120814041802 +4F1A:010001000280044008203018CFE6000000007FFC02000400082010103FF81008 +4F1B:08000BFC0A001208128832503250522092201250125012881308120013FE1000 +4F1C:088008800BF01090109031123112524E944010401FFE10401040104010401040 +4F1D:080008000BFC10001000300037FE50409040108010801108120417FE12021000 +4F1E:010001000280044008203018C1061110091009200100FFFE0100010001000100 +4F1F:08400840084017FE1040304033FC5040904017FE10421042104A104410401040 +4F20:08400840084013F81040308037FE5080910013F81008111010A0104010201020 +4F21:08400840084017FE108030A0312053FC90201020102017FE1020102010201020 +4F22:08000BFC0810111011103110321053FE90301050109011101210141010501020 +4F23:08000BF80A0812081248324832485248924812A812A81120112012221422181E +4F24:08800880090011FE12003440304053FC90441044108410841104110412281410 +4F25:090009080908111011203140310057FE91401120112011101108114411821100 +4F26:0840084008A010A0111032083406511091201140118011001104110410FC1000 +4F27:0840084008A01110120834043BF2521092101210125012201204120411FC1000 +4F28:0900090009FC1204120435043884508490141024104413841104100410281010 +4F29:08800840084017FC1110311031105110911010A010A0104010A0111012081C06 +4F2A:08400A4009401140104037FC30445044908410A4109411141104120414281810 +4F2B:084008200820100013FE3202340450009000100010001000100013FE10001000 +4F2C:080009FC090411041104310431FC512491201120111011101208120814041802 +4F2D:08800840084017FE104030803108521097E0104010801108120417FE12021000 +4F2E:12001200127C22242FA464A464A4A4A824A82928251022102528294830842102 +4F2F:08400840088013FC120432043204520493FC1204120412041204120413FC1204 +4F30:084008400840104017FE30403040504093F81208120812081208120813F81208 +4F31:0840084008A010A0111032083446504091501148124812441444104011401080 +4F32:08000BFC0A041204120433FC32005240924412481270124014421442183E1000 +4F33:08480A480A481248124837FE3248524892481248127812001200120013FE1000 +4F34:08400A4409481150104037FC3040504090401FFE104010401040104010401040 +4F35:1000100017FC24A424A464A464A4A4A424A42524251C26042404240427FC2404 +4F36:0840084008A010A0111032483426502093F810081010111010A0104010201020 +4F37:104010401040204027FC64446444A444244427FC244424442444244427FC2404 +4F38:08400840084017FC14443444344457FC94441444144417FC1444104010401040 +4F39:080009F809081108110831F831085108910811F8110811081108110817FE1000 +4F3A:08000BFC0804100417F43004300453E492241224122413E41004100410141008 +4F3B:08000BF808401040124831483150504097FE1040104010401040104010401040 +4F3C:1008110810882448244864086408A40824102410241025282624244420822102 +4F3D:140014001400243C2FA464A464A4A4A424A424A424A424A428A428BC32A42100 +4F3E:08000BFC082010201040304030D0514892441444104010401040100017FE1000 +4F3F:080008000BFC1204120432043204520493FC1204100010901088110412021402 +4F40:08000BF80A0812081208320833F85200920013FC120412041204120413FC1204 +4F41:08400840088010801110320837FC5004900013F8120812081208120813F81208 +4F42:080008000BFE10201020302031205120913C1120112011201120112017FE1000 +4F43:1000100017FC2444244464446444A7FC2444244424442444244427FC24042000 +4F44:090809080908110817FE310831085108910811F8110811081108110811F81108 +4F45:08400840084013FC10403040304057FE90E01150115012481444184210401040 +4F46:080008000BFC12041204320433FC52049204120413FC12041000100017FE1000 +4F47:08400820082013FE120234043000500093FE1020102010201020102010A01040 +4F48:08400840084017FE108030A0312051FC93241524112411241134112810201020 +4F49:084008400840104013FC30403040504097FE1040108010801110120817FC1204 +4F4A:08200820082013FE12223224322053FC92841288124812501220145014881906 +4F4B:08000BFC088410841084310431145208940011FC110411041104110411FC1104 +4F4C:1120112011202522252265E46528A530252025202520252225E23E22281E2000 +4F4D:088008400840100017FC3000300852089208111011101110112010201FFE1000 +4F4E:0808083C0BE0122012203220322053FE9220121012101212120A128A13261212 +4F4F:08800840080017FC104030403040504097FC104010401040104010401FFE1000 +4F50:088008800880108017FE30803100510091FC1220122014201420182013FE1000 +4F51:084008400840104017FE30803080510093FC1504190411041104110411FC1104 +4F52:08400840084013F81248324832485248924817FE104010A010A0111012081406 +4F53:084008400840104017FC304030E050E091501150124815F41842104010401040 +4F54:084008400840107E104030403040504093FC1204120412041204120413FC1204 +4F55:0800080017FE1008200833C8524892481248124813C812481008100810281010 +4F56:1000108010402028212861086110A51425222522254229882108230824F82800 +4F57:08400820082013FE12023404310051089110112011C011021102110210FE1000 +4F58:010001000280044008203018CFE6000000007FFC010011101108210445040200 +4F59:0100010002800440082010102FE8C10601003FF8010011101108210445040200 +4F5A:104010401240224023FC62406440A0402FFE204020A020A02110220824042802 +4F5B:1120112011202FFC2124612467FCA52029202FFE21222122222A222424202820 +4F5C:09000900090011FE12803280348050F890801080108010FC1080108010801080 +4F5D:11001100120023FC2404680463E4A22422242224222423E42224200420282010 +4F5E:100013F8100020002FFE60806080AFFE21082210261021A02060209023082C04 +4F5F:0880088008F81108131034A0304050A093181C0610C010201010118010601010 +4F60:08800880088011FE110232043420502091281124122412221422102010A01040 +4F61:1040104010A020A0211062086444A84220402444244424442444244427FC2004 +4F62:08000BFE0A001200120033FC320452049204120413FC12001200120013FE1000 +4F63:100017FC14442444244467FC6444A444244427FC244424442444284428543008 +4F64:080008000FFC1100110031F0311051109190125012501210121212921312120E +4F65:0100010002800440082010102FE8C0060210111009100920082000407FFC0000 +4F66:080008000FFE104010403080308051F893081508190811081108110811F81108 +4F67:084008400840107C10403040304057FE90401040105010481044104010401040 +4F68:0880088009FC1104120435F431145114911411F4110411281112110210FE1000 +4F69:100017FC1404240425F464446444A5F425542554255425542574244624462842 +4F6A:080008000BFC1204120432F4329452949294129412F41204120413FC12041000 +4F6B:0880088009F81208151030A0304050A093181C0613F812081208120813F81208 +4F6C:08400840084413F41048305037FE504090801184129814E018821082107E1000 +4F6D:0900090009F8131014A0304031B0564E904013FC1040144017FE104010401040 +4F6E:0840084008A011101208340633F85000900013F8120812081208120813F81208 +4F6F:0A0809080910100017FC3040304053F89040104017FE10401040104010401040 +4F70:08000BFE08201020104031FC31045104910411FC110411041104110411FC1104 +4F71:010001000280044008201010EFEE000000007FFC0100010011F811001100FFFE +4F72:0880088008FC1104128834503020504091FC13041D0411041104110411FC1104 +4F73:084008400BFC1040104030403FFE50009040104013FC1040104010401FFE1000 +4F74:08000BFE09081108110831F83108510891F811081108111E17E8100810081008 +4F75:090408840888100013FE308830885088908817FE108810881108110812081408 +4F76:0840084008401FFE1040304037FC5000900013F8120812081208120813F81208 +4F77:08000BF80A08120813F83208320853F892441248123012201210128813061200 +4F78:081008780BC01040104037FE30405040904013F8120812081208120813F81208 +4F79:1100110013F8220824106BFE6200A2F82288228822A8229022822482247E2800 +4F7A:0840084008A011101208340633F850409040104013F810401040104017FE1000 +4F7B:089008900890149212943098309051989294149210901090111211121212140E +4F7C:10801040104027FC200061106208A4042110211020A0204020A0211022082C06 +4F7D:102010201420227E224260846010A11021102E10222822282248224420842102 +4F7E:081009100908120814043BFA3208520893F81208120813F81208120812281210 +4F7F:104010401FFE2040204067FC6444A44427FC2040224021402080214022302C0E +4F80:10041FC414842494249464946494AFD424942494249424942484288428943088 +4F81:10401240124023FC244068406040A7FE212021202120212022222222241E2800 +4F82:084008200BFE12001200320C32F052209220123E13E0122014221422181E1000 +4F83:100017FC14042404240467FC6000A2482248224822482248224A244A244A2806 +4F84:100017FE104020802110620867FCA0442040204027FC2040204020402FFE2000 +4F85:08400820082017FE10403084310853F090221044118816101020105011881604 +4F86:0100010001007FFC010011101110292845440380054009203118C10601000100 +4F87:1040104017FE204027FC604463FCA240244027FE204220AA20A4211022082C06 +4F88:1080108011F82210252060C06090A3202C7C2084210826902060204021802E00 +4F89:1040104017FC20A0211062086DF6A00027FC2080210023F82008200820502020 +4F8A:084008440A4411481150304037FE5090909010901090109211121112120E1400 +4F8B:1004100417C42214221463D46254A45426542554289420942104220424142808 +4F8C:01000280044009203098CFE6004000803FF800000000FFFE082010103FF80008 +4F8D:08400840084013FC1040304037FE5010901017FE101012101110111010501020 +4F8E:084008400A4811481150304037FE504090E01150115012481444184210401040 +4F8F:08400A400A4013FC14403040304057FE90E01150115012481444184210401040 +4F90:084008400880110013FC3294329452949294129412941294129412941FFE1000 +4F91:084008400FFE1080110031FC3304550499FC1104110411FC1104110411141108 +4F92:08400820082013FE12023444304053FE90881088110810D01020105010881304 +4F93:084008400BF8104817FE304833F85040904017FC104010401FFE104010401040 +4F94:084008400890110813FC30243120512091FC1220102017FE1020102010201020 +4F95:100017FC10402040208067FC64A4A4A424A424A424A424A424A4248424142408 +4F96:010002800440082037D8C00600003FF82488248824883FF82488248824A82010 +4F97:100017FC1404240425F464046404A5F425142514251425F42404240424142408 +4F98:08400820082013FE12023404303853C090401040107E17C0104010421042103E +4F99:082808240824102017FE3020302057E0912011101110111011CA170A12061002 +4F9A:08800880090011FC1204340433E45224922413E41224122413E4100410281010 +4F9B:091009100910111013FC311031105110911017FE100011101108120814041804 +4F9C:088009000BF812081288324832485FFE92081288124812481208120814281810 +4F9D:08800840084017FE108030803140514493481530192011101108114411821100 +4F9E:090009000900111E17D232523252525292521492129211121292125E14521800 +4F9F:08400840084017FE10803080317C51089310151011FE11101110111011501120 +4FA0:08400840084017FC10403248315050409FFE10A010A011101110120814041802 +4FA1:100017FE10A020A020A067FC64A4A4A424A424A424A424A424A427FC24042000 +4FA2:08000FFC0840104013F83248324853F8924812481FFE12081208120812281210 +4FA3:100013F8120822082208620863F8A000200027FC240424042404240427FC2404 +4FA4:088008880BE8109010A037FE3080510093FC1480190011F81008100810501020 +4FA5:0880088008BC13C01050302430D4530C900017FE1090109011121112120E1400 +4FA6:08400840087E1040104033F832085248924812481248124810A0111012081404 +4FA7:100417C414442454255465546554A55425542554255421042284224424142808 +4FA8:081008780BC01040104037FE30A0511092081516111011101110121012101410 +4FA9:0840084008A011101208340631F05000900017FC104010801110120817FC1204 +4FAA:088008400FFE1208111030A0304051B0960E1110111011101110121012101410 +4FAB:088008401FFE12001200320033FC508090801FFE110812081390106011981604 +4FAC:10401040104027FC248468886140A14423482530292021102108214421822100 +4FAD:08000BF80A08120813F8322032205210920814C61420180011C0103010081000 +4FAE:0900090009FC120015F831083148512897FE11081248122813FC100810501020 +4FAF:08000BF80808100817FE3100310053F8944010401FFE104010A0111012081C06 +4FB0:08000BF80888108817FE3088308853F89100110013F815081908110811F81108 +4FB1:08000BF80A081208120833F83000500097FC1040104013F8104010401FFE1000 +4FB2:08000BFC0A00120012F83200320053FC92A012A412A812901290148814A418C2 +4FB3:084008400A4812481248355438E25040904017FC10401040104010401FFE1000 +4FB4:01000280044008203018CFE600003F04092409243F241124112417A47804200C +4FB5:08000BF8080811F8100833F8300057FC940413F01110111010A0104011B0160E +4FB6:080009F8090811081108310831F85040908013FC120412041204120413FC1204 +4FB7:08000BF80A08120813F83200320053FC920412F41294129414F4140418281010 +4FB8:08000FFC0800100013F8320832085208920813F810001208110811101FFE1000 +4FB9:1000100C1770211021106210627CA710211025102510227C2200250028FE3000 +4FBA:08400A480A48124813F8304030A0511092881446104013F01010102010201040 +4FBB:0A0809080910102013F832083208520893F810A010A0112011221222141E1800 +4FBC:082008200BFE1020102033FE3202540491F81010102013FE1020102010A01040 +4FBD:0BF80A480A4813F81248324833F85080908017FC108411041104120414281810 +4FBE:084008440BF41048104837FE3020504093F81110122015FE1820102010A01040 +4FBF:100017FE104027FC2444644467FCA444244427FC224021402080214022302C0E +4FC0:0808083C0BC01044122431283100504093FE1088110813901060105011881604 +4FC1:080008F80888108812F83200320053FC9044104417FE104010A0111012081406 +4FC2:0804081E0BE01080110833F030205048918417FE102211281124122214A21040 +4FC3:08000BF80A0812081208320833F8504090401240127C12401240154018FE1000 +4FC4:102811A41724212021206FFE6120A12421A423282D2821102112212A25462282 +4FC5:085008480848104017FE304032445164916810D0115012481444104211401080 +4FC6:0840084008A01110120835F63040504097FC1040125012481444184411401080 +4FC7:08000C400ABE110812883488308850BE918812881488108810881088153E1200 +4FC8:08400A400A4013FC14403840304057FE9000100013F812081208120813F81208 +4FC9:08000FFC0880108013F83108310857FE9000100013F812081208120813F81208 +4FCA:084008400888110413FE300230885144924210F8118812501020105011881606 +4FCB:08000BF80A08120813F8300037FC54449444144417FC14001402140213FE1000 +4FCC:1048104417FE2040204067FC6444A44427FC2444244427FC2444244424542408 +4FCD:088008400BF81208120833F83208520893F81240124412281210128813061200 +4FCE:100011F811082908250845F891081108110811F8290825084508810807FE0000 +4FCF:08400A4809481150104033F83208520893F81208120813F81208120812281210 +4FD0:108411C417042114211461146FD4A11423142394255425042904210421142108 +4FD1:100017F8101021A0204067FC6444A44427FC2444244427FC2444244424542408 +4FD2:084008200BFE1202140431F83000500093FE10901090109011121112120E1400 +4FD3:08000BFC080011241248349032485124900013FC104010401040104017FE1000 +4FD4:08000BF80A08120813F83208320853F89208120813F81120112012221422181E +4FD5:1080104017FE2402284460406040A7FC20E02150215022482444284220402040 +4FD6:100017FC1020204020D061486644A040200023F8220822082208220823F82208 +4FD7:091009080A041444104030A0311052089C0613F8120812081208120813F81208 +4FD8:0808083C0BC0100412443128300053F89010102017FE10201020102010A01040 +4FD9:1208111010E02110220860806FFEA140224027FC2A4422442254224820402040 +4FDA:100017FC1444244427FC64446444A7FC2040204027FC2040204020402FFE2000 +4FDB:0900090009F01210122037FC3A445244924413FC12A410A0112012221422181E +4FDC:1040104017FC244427FC644467FCA0003FFE2100220023FC2004200420282010 +4FDD:08000BF80A081208120833F83040504097FC10E0115012481444184210401040 +4FDE:01000280044008203018CFE600003E0822483E4822483E48224822082A282410 +4FDF:104010801110220827FC61046100A3F8244020402FFE204020A0211022082C06 +4FE0:08400840084017FE1040324832485248955418A210A011101110120814041802 +4FE1:084008200BFE1000100031FC3000500091FC1000100011FC1104110411FC1104 +4FE2:0880088009F8131014A0304031B05E4E90801320104411881610102010C01700 +4FE3:08000BF80A08120813F83000300057FC904010401FFE104010A0111012081406 +4FE4:09080888089013FC1024302433FC5220922013FE106210A2112A122414201020 +4FE5:104010401FFE204027FC64446444A7FC2444244427FC20403FFE204020402040 +4FE6:1040104017FC204023F8608067FEA090211021FE221022902450281020502020 +4FE7:08200820082013FE10203020302051FC9040102010A41282128A128A14781000 +4FE8:08000BFC089012941198309033FE520092001200120012001200140014001800 +4FE9:10001FFE1120212021206FFC6924A92429242AA42A542C4C2884280428142808 +4FEA:10001FFE1000200027BC64A464A4A4A426B425AC24A424A424A424A424A425AC +4FEB:08400840084017FC10403248314851509FFE10E0115011501248144418421040 +4FEC:108811C81F08210821086FD06110A3102390255425642922217E212221022100 +4FED:0840084008A010A01110320835F6500090881048124811501110102017FE1000 +4FEE:1080108011F821082A906C60A9982E2628C02B10282028C82B10206021802600 +4FEF:1040102017FE2400248864886508A57E27082548252825282908290831282110 +4FF0:100011801700211E21126FD26112A3122392235225522512291E211221002100 +4FF1:08000BF80A08120813F8320833F8520893F8120812081FFE1000111012081404 +4FF2:12101110111027D0203E62926252A452289222922112211222A224A2284A2084 +4FF3:089008900890179E109030903090539C909010901090179E1090109010901090 +4FF4:10A0109010BC27C8205060646194AE0C20A0209020BC27C82050206421942E0C +4FF5:1040104017FC2040204063F86040A0402FFE2088215023202510294821862100 +4FF6:0900090009DC11141114311437D4501491141114158815481948111415141222 +4FF7:100017BE14AA24AA24AA67AA64AAA4AA24BE27A024A024A024A228A22AA2311E +4FF8:084008400FFC104013F8308037FC51109248144611F0104017FC104010401040 +4FF9:08000FFE089010901090339C320452049204139C109010901090109017FE1000 +4FFA:084008800BFC11101248344633F85248924813F81248124813F810421042103E +4FFB:0880088009F81208151030E033185C0693F81248124813F81248124813F81208 +4FFC:088008400FFE1100120837FC300453F8920813F8120813F81208120812281210 +4FFD:101010901710243E242264446790A51025102510252825282528294429443082 +4FFE:084008800BFC1224122433FC3224524493FC1090111017FE1010101010101010 +4FFF:08400840087C104013FC3244327053C09244123C120012F0149014921912120E +5000:080009FC090011F8110031F831005FFE92801248125012201210128813061200 +5001:09000900090013DE129234923092509293F2109210921152115E122014201800 +5002:08840884090813DE110831083108510897BE1108110811081108120812081408 +5003:1110111013D8225424526A906110A2FE2C00200023F822082208220823F82208 +5004:09080890086011981644304037FE508091FC130415FC110411FC110411141108 +5005:088008400BFC10001110311032A854449000104017FE10401040104010401040 +5006:100017FC1040204027FC64446444A6642554255426EC24CC2444244424542408 +5007:1080104017FE24022A04620063BCA4A424A426A429342128222222222422281E +5008:08400840084017FC1040324832485248955410E0115011501248144418421040 +5009:0100028004400A203118DFF610101FF010101FF010002FF8280848088FF80808 +500A:089008900908114812443492310853FC9044102010A41282128A128A14781000 +500B:100017FC1444244427FC64446444A5F425142514251425F42514240427FC2404 +500C:084008200BFE1202140431F83108510891F81100110011FC1104110411FC1104 +500D:088008400BFC100012083108311057FE9000100013FC12041204120413FC1204 +500E:08900890089013FC12943294329453FC92941294129417FE1000109011081204 +500F:1080108011F821082A906C60A9982E46285028482BFC284028A0211022082404 +5010:0840084010FC10883550542094D81706142014A414A415281450104810841302 +5011:100017BC14A424A427BC64A464A4A7BC24042404240424042404240424142408 +5012:100410041FC422142214649467D4A114211427D42114211421C42E0424142008 +5013:08400A440A44144810A0311036085044904012481248145010A0111012081C06 +5014:100017FC1404240427FC64206524A524252425FC242025242524292429FC3004 +5015:081008780BC01040104037FC324852489FFE1248124817FC1040104017FC1000 +5016:084008400FFC1040104037FE311050A097FC104010401FFE1040104010401040 +5017:100017BC14A424A424A467BC64A4A4A424A427BC24A424A424A424A42AA4314C +5018:1040124811482150204067FC6404A40425F425142514251425F4240424142408 +5019:100013F8100828082FFE69006900ABF82C4028402FFE284028A0211022082C06 +501A:084008400BFC10A01110320837FE500893C812481248124813C8100810281010 +501B:090809080FFE1108110831F83108510891F81108110817FE1000109011081204 +501C:100017FC1444244425F464446444A7FC240425F42514251425F4240424142808 +501D:08100810FF9008107F1041107F1041107F1049100828FFA80848084408840902 +501E:088008400FFE1000100033F83208520893F81040125012481444184411401080 +501F:09100910091017FC111031103FFE500093F81208120813F81208120813F81208 +5020:09400920092013FE122036203BFC5220922013FC12201220122013FE12001200 +5021:09F80908090811F81108310831F8500093FC1204120413FC1204120413FC1204 +5022:1040104017FE204023F8604867FEA04823F820402240227C2240254024FE2800 +5023:1410121012102FA0243E644467A4A4A424A824A8249024902AA8292830442082 +5024:082008200BFE104011FC3504350455FC950415FC1504150415FC140017FE1000 +5025:08400820082013FE1202349431085204900011FC102010201020102017FE1000 +5026:10401248115027FC208061006FFEA21024082BF43212221022502224220421FC +5027:1080104017FE2402280463F06000A00027FC2040225022482444284421402080 +5028:08000BFC0A04120413FC3220322053FE9220122012FC12841284148414FC1884 +5029:084008400FFC104013F8304037FE500093F8120813F8120813F8120812281210 +502A:080008400B9C12041204339C3204520493FC109010901090109011121212140E +502B:1040104010A0211022086DF66000A7FC24A424A427FC24A424A424A424142408 +502C:08400840087E104013FC320433FC520493FC1244104017FE1040104010401040 +502D:08380BC00840104017FC315032485486908017FC1110121011A0106010901308 +502E:08000BF80A48124813F83248324853F8904017FC10E011501248144610401040 +502F:12081228122822282FA462446254A69227102AA02A203228224422FC22442200 +5030:1040104017FC204020406FFE6208A484288221F82208251020A0204021B02E0E +5031:100017FC1404240427FC64046404A7FC20002420242227AC2430242225A2261E +5032:104010401FFE2040204067FC6444A7FC244427FC24E421502248244438422040 +5033:104010401FFE204027FC644467FCA04027FC20443FFE204427FC204021402080 +5034:084008400FFE10A01150324835F650409150111017FE11101110111012101410 +5035:081008180BD41014101037FE30105090909012D012901290128A12EA17061202 +5036:08000BFC0A04120413FC320433FC5204920413FC100017FE1000110812041402 +5037:084008400FFC10A01110320835F65000900017FC104012481244144411401080 +5038:0808083C0BC01044122431283100502093FE107010A810A81124122214201020 +5039:0840084008A01110120835F63040504093F81248124813F810A0111012081406 +503A:084008400FFC104013F8304037FE500093F8120812481248124810A011101608 +503B:10001FDE14922492249467946498A49427922492249225DA2E94209020902090 +503C:084008400FFC1040104033F8320853F8920813F8120813F8120812081FFE1000 +503D:0840084008A01110120835F63040504097FC1040104013F81208120813F81208 +503E:100010FE14102420247C64446754A45424542454255426542420202820442082 +503F:088008400BFC10001108309037FE5040904017FE108811081090106011981604 +5040:1110111017FC21102150604063F8A248224822482FFE204020A0211022082406 +5041:103E17C0108424442208604067FCA444244427FC244424443FFE240424142408 +5042:09080888089017FE100033C43254525493D41254125413D412541244125412C8 +5043:08000BFE0A0012FC128432FC328452FC922013FE124812C812301248128413FE +5044:100017FC1040208027FC64A464A4A4A42484244C20402FFE20A0211022082C06 +5045:1008103C17C020402FFE604067FCA44427FC244427FC204027FC20402FFE2000 +5046:1040104017FC204023F860806FFEA110220827FC2A0A220823F82208220823F8 +5047:100017BC14842484248467BC6400A40027BC2424242427A82410242824442482 +5048:08000BF80A0813F8120833F8310053FC9444124412A4120413F4100410281010 +5049:088008800BF8110817FE300033F8520893F8104017FC1040144017FE10401040 +504A:0804081E0BE0102011FC3124312451FC902013FE1222122A12FA1202120A1204 +504B:08000BFC0A04120413FC32003284524892FC1248124813FE1448144818881108 +504C:1108110817FE21082148604067FEA080210023FC250429042104210421FC2104 +504D:08000BF80A08120813F83208320853F8900017FE1040124012781240154018FE +504E:08000BF80A48124813F83248324853F8900017FE124012441228129013081206 +504F:1080104017FC2404240467FC6400A40027FC26A42AA42BFC2AA42AA432A4220C +5050:084008200BFC10001108309033FE5210922012C81210122412C8141014601980 +5051:20002FF8280848684B884888C8884BE84AA84AA84BE8488A48AA50EA57266002 +5052:08000BF80A0813F8120833F830005FFE920013FC149419241244148411281210 +5053:08000BFC0A04120413FC320033FC5240928813FC1224122015FC1420182013FE +5054:08000BDE0A52125213DE300031FC500097FE1080110011FC1004100410281010 +5055:0A200A240BA8123012A23322325E508093FC1204120413FC1204120413FC1204 +5056:084008440BF41048105037FE3040508091F81308150811F81108110811F81108 +5057:0820082009241122122A303030C0570091FC110411FC110411FC110411FC1104 +5058:08000BF80A0812081208320833F85000900017BC14A414A414A414A417BC14A4 +5059:088008400BFC10001108309037FE5442984413FC124412441254124810401040 +505A:1210121012102FA0223E62446224AFA428A428A828A828902FA8282820442082 +505B:1008103C17C0204020406FFE6040A140265C24442444275C2444244427FC2404 +505C:1080104017FC200023F8620863F8A0002FFE280223F820402040204021402080 +505D:089008920F9C10901192368E300053FC920413FC120413FC1204120412141208 +505E:08900A900A9017FE1290329032F0520093FC104017FE10E0115012481C461040 +505F:084008800BF8120813F8320833F8500097FC1040104013F81040104017FC1000 +5060:08000BFE0850105013FE3252325253FE9000104017FE10881190106010D81304 +5061:090809080FFE110811F8310831F85108910817FE125012881304120013FC1000 +5062:13901E101210221222526FD46258A69027102AA82A2832282248224422842302 +5063:088008400FFC1000120831103FFE500093F81208120813F81208120813F81208 +5064:09080888089017FE1090309033FC52949294130C120413FC1204120413FC1204 +5065:1020102010FC2E2423FE622464FCA4202EFC222022202BFE2420262029FE3000 +5066:08000BFE08221120113C312032FE540091FC110411FC110411FC110411141108 +5067:1000108017FC211022086C8661F8A610216021A02E7E21842648203020C02F00 +5068:1120112415A82530252465A46E1CA040204027FC20E0215022482C4620402040 +5069:090009000BF8120814103BFC320453FC920413FC120413FC1000110812041402 +506A:100017FC100023F82208620863F8A00027FC2444244427FC2444244427FC2404 +506B:111011101210247C2910611062FEA6082A0822FE220822482228220822282210 +506C:1100110013FC24942B9461646254A4842128221020402124252A250A28F82000 +506D:08000FFE0840108013FC3294329452F49294129412F412941294129413FC1204 +506E:080009F80908110811F8300037FE510891F8110811F81108113E17C810081008 +506F:088008400FFE100013F832083208520893F810A4112813101510194811861100 +5070:0900093C0FD411141394311437D45124914C104017FE104010A0111012081C06 +5071:103C17E01420242027FE642065FCA504250425FC250425FC2904290431FC2104 +5072:08000BFC0A44124413FC3244324453FC9000104010241522150A190810F81000 +5073:104014441444244427FC60006FFEA040208027FC24A424A424A424A424A4240C +5074:100217C21442245227D264526452A7D22452245227D2200222822242244A2804 +5075:1040107E1040204027FC64046404A7FC240427FC2404240427FC211022082404 +5076:100017FC1444244427FC64446444A7FC20402FFE284228522BF22912280A2804 +5077:084008A00910120815F6300033C45254925413D41254125413D41244125412C8 +5078:09C008A00910120815F6300033CA524A925413D41268125413D4124A124A12C0 +5079:0840084010FC10883550542094D8170614F814A814A814A814F810A810A810F8 +507A:091009100BD8125414523A90311052FE9C0013F81208120813F81208120813F8 +507B:0820092408A8102013FE30A831245202904017FE108811081190106011981604 +507C:08400840087E104013FC300431FC500493FC10401240127C1240154014FE1800 +507D:08400A40094017F81088309030FC5104910813FE1202142A1AAA128214141008 +507E:1040104017FC204022486FFE6208A00027FC240424442444244420B0230C2C02 +507F:08400A480950104017FE3402380451F09000100017FC10801110120817FC1204 +5080:1040108017FC2444244467FC6444A48427FC208021502164227C24422842303E +5081:1140165C14442444275C64446444A7FC204027FC2208211020A0204021B02E0E +5082:1004103E17E0243E242065FE6522A53825E2251E250029782A48324A248A2906 +5083:084008400FFC104013F8304037FE5080911013E0104817FC1044124815441080 +5084:104010401FFE244422A861106208AC0623F8220823F8220823F8220823F82208 +5085:085008480FFE104017FC344437FC544497FC144410081FFE1208110811281010 +5086:100017FE1420244025FC650465FCA50425FC2524242024A829242A2230A02040 +5087:090809080FFE1108100037FE310851F8910811F81108113E17C8100810081008 +5088:100017FC10A020A027FC64A464A4A7FC2040204027FC20E0215022482C462040 +5089:08000BFE0A0012FC120033FE32A8529092C81286120813FE1288144814081818 +508A:080009F80908110811F8300033FC520493FC120413FC120413FC109011081204 +508B:091009100FFC111013F8311037FC504093F8124813F8124817FE120812281210 +508C:08000BFC0A4013F8124033F83240524093FC1004155415541554140410281010 +508D:1080104017FC2208211067FE6402A884204027FC210021F82108220822282410 +508E:1040104017FC204023F8620863F8A20823F8220823F822082FFE211022082404 +508F:1040102017FE242025FC642467FEA42425FC242025FC25042504290429FC3104 +5090:1080104017FE200023F8620863F8A00027FC240425F4251425F4240424142408 +5091:1208120813BE24882AA8613E6208A448284827FC20E0215022482C4620402040 +5092:083C0FC00A4411281080311033E05040918813FC1044104017FC10A01110160E +5093:1080104017FE2402240267FE6400A7DE24422652254A24C62B5A2842314A2084 +5094:0A080910080017FE10A037FC30A45FFE90A417FC10A011B012A81CA610A010A0 +5095:1080108017FE2522211063FC6620AA2023FC2220222023FC2220222023FE2200 +5096:0840084008A01190124837FE3A0853F8920813F8120013F81508150819F81108 +5097:088008400FFC1080110833F03060518497FE100217FC144417FC144417FC1404 +5098:01000280044008203118D116111029284544111029284544FFFE010001000100 +5099:088808880BFE1088108837FE308051FC932415FC112411FC112411241124110C +509A:1410121012102FA0203E654464A4A8A431282528221022102528292830442082 +509B:084008200BFE120214943108326450909108120415FA11081108110811F81108 +509C:1004103E17C02244212461286200A3FC244020402FFE20402444244427FC2004 +509D:08000BF80A0813F8120833F83000500097BC108414A4129414A4108412941108 +509E:09080888089013FC104031F8304053FE9080110011FC12201420182013FE1000 +509F:092009100A081486191033F83008500097BC108414A4129414A4108412941108 +50A0:1204110411042FC4203E67846004A7A420142794248424842484278424942008 +50A1:1410120812082FBE2000608268A2A8A22492251225142114220421882E3E2400 +50A2:1080104017FC2404200063F86080A144266820B02128266820A4212226A02040 +50A3:084008400FFC104013F8308037FC511092481446124811501248144411401080 +50A4:1110111417D221102FFE62106210AFD4241429142FD4210821CA2F1A25262142 +50A5:08400A480950104017FE3402380453F89208120813F810A0112011241224141C +50A6:080009F8090811E8112837FE340251F8910811F8110811F81108110811281110 +50A7:1080104017FE2402281463E06200A20023FC221022102FFE2000211022082404 +50A8:1020102018FA2424242861FE6020BC4024FC25442644247C25442644247C2044 +50A9:102810241740217E21C86948657EA5482248227E254825482948207E20402040 +50AA:1080111013F8221024A46FBE6042A0A023182C46219026642188263021C02E00 +50AB:100017FC144427FC244467FC6100A21027E020C823042FFE2042224825442882 +50AC:08200A220BFE1090108831FE3310551091FE1110111011FE1110111011FE1100 +50AD:102017FE142025FC242467FE6424A5FC242025FC252425FC252429FC2924312C +50AE:08A008A00FFE10A017FC34A437FC54A497FC100013F8120813F8120813F81208 +50AF:084008800BFC124412F4331432A4524492A413FC104010241522150A190810F8 +50B0:10401444144427FC200067BC64A4A4A427BC24A424A427BC24A424A42AB43148 +50B1:11241124122424242954614A6292A6102A102250225C2250225022B0229E2300 +50B2:121012101FD022202FBE6244BFA42424242427A824A8249024A829A828443082 +50B3:10401FFE104027FC244467FC6444A7FC20422FFE20102FFE2210211021502020 +50B4:100017FC140024F82488648864F8A40025DC25542554255425DC240027FE2000 +50B5:08200BFE082011FC102033FE300051FC910411FC110411FC110411FC10881104 +50B6:10141012101027FE2410649064D2A49227F22494249425C82AAA289A31A62042 +50B7:090009FC0A0015F8110831F8310851F8900017FE110013FC14A4112412541088 +50B8:1040104017FC2040255462486554A04025542248255420A020A0211022082C06 +50B9:088008400BF8111010A037FE300053F8920813F8120813F81120112212221C1E +50BA:090009100BDC125415543288310852F49402100013FC10401150124815441080 +50BB:084008800BFC12941264329433FC50909108128414FA11081290106011981606 +50BC:1110111017FE211021F0604063F8A24823F8204027FC20402FFE20A02110260C +50BD:104017FC111020A02FFE600063F8A20823F8220823F820402FFE204020402040 +50BE:100011FE1010242024FC64846784A4FC248424FC2584268424FC204820842102 +50BF:100017FC1040227822406FFE6100A1FC220023FC200425542554280420282010 +50C0:12A812A817FC22A822AA64E66800A7FC2444204023F822482248224822582040 +50C1:1008103C17C02040224861506FFEA15022482C46208020442A422A1231F02000 +50C2:104013F812482FFE224863F86040A3F8224823F820802FFE211020E023182C04 +50C3:111011101FFE2110240067FC6804B7F4249427F4249427F42494249424342008 +50C4:10001FFE10A027FC24A464A467FCA00027FC20002FFE20402248244429422080 +50C5:111011101FFE211021F0604067FCA44427FC20402FFE204027FC20402FFE2000 +50C6:1020182015FE242021FC61246DFCA52425FC242025FE242024202A2031FE2000 +50C7:08000FBC088414A4129434A430505188962610C0131010641388103010C01700 +50C8:13F8120813F8220823F8600067FCA4A424A427FC200023F8211020E023182C06 +50C9:010002800440082037D8C00600003EF8228822883EF808200820145022884104 +50CA:100017FC10A027FC24A467FC6040AFFE2110220827F62A1023F02204220421FC +50CB:084008A0091012481DF63020304053F8920813F8120813F8120813F811101208 +50CC:121012101F9022202FBE6AC46AA4AFA42AA42AA82FA822103FA8222822442282 +50CD:11C8170811082FE8211E67CA654AA7CA254A27CA210A27CA211221D22E2A2444 +50CE:100017BC14A427BC242064A4639CA000211027FC211021102FFE211022082404 +50CF:090009F00A1017FC1A24324433FC5080914416A81130166810A8112416A21040 +50D0:088808500BFE102011FC302033FE512490A817FE100011FC1104110411FC1104 +50D1:103813C0108027FE2110620865F6A91021F0200027FC240425F4251425F4240C +50D2:1080104017FC2514220863F86088A7FE208823F8210023F82508290821F82108 +50D3:08400BF80A4813F8104037FE300053F8920813F8120813F8120813F811101208 +50D4:090808900FFE109013FC3294331C520493FC120413FC100817FE110810A81010 +50D5:10A014A412A820A027FC611060A0A7FC204023F8204027FC20A0211022082C06 +50D6:104017FC104023F8200063F86208A3F821102FFE200023F82208220823F82208 +50D7:08880AAA0ADC148811543222300053FE9242144413FC10441044108411141208 +50D8:220832482A484A90421E5FE4D0545054575455545554554857485054515450A2 +50D9:1110111017FC211021106FFE6040A7FC244427FC244427FC2000211022082404 +50DA:1040104017FC20A02514620867FCAA0A23F8220823F820402248244429442080 +50DB:1510151015102F90253E67226544A790251025102F902028252828A430442082 +50DC:102017A410A822922114620865F4A80223F82208220823F8220821102FFE2000 +50DD:17FC140417FC240025F8641067FEA4202460279C2484250829DE2F0831082318 +50DE:1004103E17C02244212863F86208A3FC220423FE240226AA2AAA2A0230142008 +50DF:124812481554275C22486554675CA2482FFE22202228222825142494242C2844 +50E0:08780FC00A48115017FC31503248540693F81248124813F81248124813F81208 +50E1:104010401FFE204027FC644467FCA44427FC20442FFE204220242522250A28F8 +50E2:103C17C010442224210867FE6402AA08220823BE24882AA8213E220824082808 +50E3:1110111017BC21102FFE611062A8A44423FA2208220823F82208220823F82208 +50E4:08000BDE0A52125213DE300031FC512491FC112411FC102013FE102010201020 +50E5:1040104017FC20402FFE611067BCA1102190263E20002FFE2120212222222C1E +50E6:141412121F922010207E6F906890A8902F9022282B282AA83228224A2A4A2486 +50E7:09040888080013FE122232AA3272522293FE100011FC110411FC110411FC1104 +50E8:104017FC104021102FFE611063F8A20823F8220823F8220823F8211022082404 +50E9:179E1492179E2492279E640264F2A49224F2249224F224922492253224022406 +50EA:08000BFC0848103013FE305230945350902013FE1252128A1376125212721206 +50EB:08000FFE08901090139C32043204539C9090109017FE10401524150A190A10F8 +50EC:1140112013FE222026206BFC6220A22023FC2220222023FE2200252424922892 +50ED:100017BC1108252827BC631865AAA946200023F82208220823F82208220823F8 +50EE:08400BF8091010A017FC300033F8524893F8124813F8104013F8104017FE1000 +50EF:10401248115027FC215062486444A208220823BE24882AA8213E220824082808 +50F0:10101010FEFE1010FEFE929292923838545492921010111002800C603018C006 +50F1:084008200BFE1202120233FE3250524892FE139012FE129014FE149018FE1080 +50F2:100017FE10A027FC24A464A467FCA208220823BE24882AA8213E220824082808 +50F3:100017FC10A020A027FC64A464A4A7FC2248215027FC20E0215022482C462040 +50F4:100017BC14A427BC24A467BC6404A5F4251425F4251425F42514240424142408 +50F5:10001FFE100027FC244467FC6444AFFE200027FC244427FC244427FC20002FFE +50F6:100017FC14A424A427BC60A067BCA4A424A427BC24A424A427BC24A220A2207E +50F7:110817FE1108200024886FFE6488A4F8240027FC20402FFE215022482C462040 +50F8:1110111017BC211023B865546912A00023F8200027FC20402248244429422080 +50F9:10001FFE11202FFC29246FFC6000A7F8240827F8240827F8240827F822102408 +50FA:13F81208120823F8200067BC64A4A4A427BC20402FFE21602250244838462040 +50FB:10101008178824BE248064946788A47E2408278826BE2A882A882B8832882008 +50FC:10A010A017FC24A427FC64A467FCA00027FC200023F8220823F8211020A02FFE +50FD:10C81708112A212C2FC861086388A55429142122204020242522250A290820F8 +50FE:083C0BC008441224110837FE344252A4928A147A108010F8110812901060179E +50FF:1080104017FE25122BFC611067FCA11027FE2110224825F42842204027FC2000 +5100:111017FE104023FC204067FEA080272821242FFE212021A42F1A2112276E0000 +5101:1140112013FE222027FC6A2063FCA22023FE2200279E2492249224F224022406 +5102:08900BFC0A9413FC129433FC300053FC920012F8120013FE1520151415481986 +5103:10401FFE100027FC240465F46514A7FC200023F8220823F8220823F820002FFE +5104:088008400BFC1108109037FE300053FC920413FC120413FC10401524150A18FA +5105:10401248115027FE2402680463F8A20823F8200027FC244427FC244427FC2404 +5106:1288128817E82290241E67E46454A85427542554255427482548205422942122 +5107:08000BFC0A94129413FC300037FE500093FC120413FC10A2111413081D441182 +5108:104010A013182DF6200067FC6554A4E427FC200023F8220823F8220823F82208 +5109:1040104010A02110220865F66800A7BC24A424A427BC22102210252829443082 +510A:1110111017BC211023B865546912A00027FC2044224022782240254028FE3000 +510B:120013F8141027FE2D48762467FEA40025FC240025FC240025FC290429FC3104 +510C:121014101F9028902FBE68A46FD4A41422142FD424142788248828942A943122 +510D:082008880A5213261252328A322253FE90881144127A10881150102010D81706 +510E:111417D211102FFE21106FD06112A7D2255227D4255427C8210A2FDA21262142 +510F:108010DC128423D424486A946324AC402248215027FC20E0215022482C462040 +5110:1080104017FE24022BFC61486250A7FC220427FC2A0423FC220423FC21082204 +5111:08000BFE0A0213FE120233FE31085252939C1108125213DE100012A412521452 +5112:100017FC10402FFE284263586040A35820002FFE204027FC24A424A424A4240C +5113:10401FFE104027FC200063F86208AFFE280227FC211023F8204027FC20402FFE +5114:104017FC104023FC20006FFE6002A3F8204027FE200027FE200827FE24A82798 +5115:1080104017FC211020A46F586554A5522B582000220823F8220823F822082408 +5116:101017D0151027DE245067E86504A7C4200023F822A822A822A822A82FFE2000 +5117:1400157C160424A82390607C6414A7942A5022502FDC2250255024B0289E2100 +5118:08400BF8084817FE104833F8304057FE900012A4145213F812A812A81FFE1000 +5119:101014FE129222FE201061FE6000AEFE228222FE228022FE228222FE250028FE +511A:088808880BFE108813FE325233FE500093FE124210F811081290106010C01700 +511B:1100120017FC2AA822A86FFE62A8A2A82FFE220823BE24882AA8213E22082C08 +511C:1080104017FC244422A862946474A00023F822A82FFE200027FC204021402080 +511D:1110155415B8291022A864446000A7FC2444204027FC20E0215022482C462040 +511E:100017FC124824442FFE644466ECA55426EC244426EC255426EC244424542408 +511F:0A4809500FFE140211F8310833FC520493FC120413FC120413FC110812041402 +5120:09240A480924100013FC32943264529493FC124813681248136A124A12461362 +5121:13F81248124823F82248624863F8A0002FBE2AAA2AAA2FBE2AAA2AAA2FBE28A2 +5122:1020103E102027FE242265F86422A5FE252425FC252425FC28402AA4328A247A +5123:1040102017FE248825FC648867FEA42025FC252425FC252429FC288831042202 +5124:0BF80A080BF8120813F8311037FC51109FFE11101248155410E01150124810C0 +5125:08200BFE082011FC100033FE325253FE910411FC110411FC110411FC10881104 +5126:1080104017FC24A027FC64A467FCA400252425A8253025A4251C28002AA43452 +5127:12081FBE12082FBE2208651468A2A7FC240427FC240427FC240427FC21102208 +5128:08420B9C0A1013DE12943294342053FC920413FC120413FC120413FC11081204 +5129:10001F7C1944297C2F446944697CAF20297E29AA2F2A204A2A922922294A3104 +512A:17FC108013F8220823F862086FFEA8822548251428F4210023F8250820F02F0E +512B:104017FE100021F8210861F86000A7FE240223F82180264421B8266821A62E60 +512C:1200123C1FA422242FBC62247FE4A03C2FA428A42FBC28902F9828A828AA29C6 +512D:1400123C1FA4202428BC65246FA4A23C22242FA4223C2B102A9832A82A2A2446 +512E:100017FE14442598248867DE6488A5DC26AA248824202520253C2920292037FE +512F:1248115017FC20802FFE620867FCAA4223F8224023F8224023FC200425542008 +5130:11101FFE1110203C2FC064886250A7F8240827FC240427FE28022AAA32AA2004 +5131:142012201FBE2520223E7F82603EAFA028BE2FA028BE2FA028BE28A028A2299E +5132:14101210127A2F1220146F7E6008AF10203C2F6429A4293C29242F24293C2024 +5133:09F00A100FFC120413FC322433B8522291FE121017FC124413FC10D0114A163E +5134:104017FC100023B822A863B86110A7FC211027FC21102FFE212823102D482186 +5135:108011F812882070238E680069FCA92429AC292429FC282029FC202023FE2154 +5136:0A220BFE089011FE131035FE311051FE911011FE110013FE128A137612521276 +5137:17BE100017BC24A426B464A46040A7FE24A027FC24A427FC251229DC291231CE +5138:100017FC14A424A427FC621062A8A4BE2F68223C24A82FBC20282AA82ABE2020 +5139:152817BE194827BE231865AA6946A3FC220423FC220423FC220423FC21082204 +513A:151815141F90253E272862686FBEAAA82FA8223E2FA822283FE8253E28A03060 +513B:1248115017FC240421F0611067FCA55424E427FC204027FC20402FFE22A42452 +513C:17BC14A417BC200027FE64006590A49E27D4256425D4255425D425682BC83054 +513D:17FC144417FC24442FFE6AAA6FBEAAAA2FBE222027C020842FFE204225482884 +513E:104017FC124823F820406FFE6AAAA3B8211027FC21102FFE212823102D482186 +513F:08400840084008400840084008400840084008400840104210422042403E8000 +5140:00000000FFFE08400840084008400840084008400840104410442044403C8000 +5141:0100010002000440082010103FF804480440044004400840084210422042C03E +5142:0100010001007FFC01001100110021003FFE02800480048008841084207CC000 +5143:00003FF8000000000000FFFE04400440044004400840084210422042403E8000 +5144:00003FF8200820082008200820083FF80440044004400840084010422042C03E +5145:02000100FFFE04000400082010103FF80448044004400440084408441044603C +5146:04400440444424481450144004600C50144824444440084208421042203E4000 +5147:08202448228821082288244828283FF80440044004400440084408441044603C +5148:0100110011001FF8210041000100FFFE044004400440084008421042203EC000 +5149:010021081108091009200100FFFE0440044004400440084208421042203EC000 +514A:04400440082011102108C206044008201FF0045004400440084408441044603C +514B:01000100FFFE010001003FF82008200820083FF804400440084010422042C03E +514C:04400440082010102008DFF61010101010101FF004400440044008441044603C +514D:080008000FE0102020407FF8A108210821083FF822880480088010822082C07E +514E:000801FC7F00010001003FF82108210821083FF8228804A0089010922082C07E +514F:001000F81F80108010F81080108010801FFE11201120112022222222441E9800 +5150:000023F82208220823F82208220823F82208000004400440044008441044603C +5151:10100820044000001FF01010101010101FF0145004400440084408441044603C +5152:0000060038F8200820083CF8200820083FF8044004400440084408441044603C +5153:00007EFE081008104890489048907EFE08100810142814282548264A448A8106 +5154:080008000FE0102020407FF8A108210821083FF8228804A0089010922082C07E +5155:00003C7824482448244827C8200820083FF8244804400440084010422042C03E +5156:02000100FFFE082011102208444408201FF0045004400840084010422042C03E +5157:02000100FFFE0820101020085FF41010101010101FF00440044008441044603C +5158:00207C200048008401FEFE02240024FC2484248424FC24842402440243FE8000 +5159:08100810FF10081008107F7E411041107F101410141014102412240243FE8000 +515A:01001110091009207FFE400280041FF0101010101FF00440044008423042C03E +515B:0808081CFF70081008107F1041FE41107F101410141014102412240243FE8000 +515C:0100120067DC4444444447C44444444457C4601C04400440044008441044603C +515D:08080828FF24084408427F80417C41247F24144414441494250A240243FE8000 +515E:083808E0FF20083808E07F20413C41E07F2414241424141C2402240243FE8000 +515F:0810285028503E7C4890081008107EFE1428142814281428254A264A44868100 +5160:0100121017D2F454145817D014523452D7CE100004400440044008441044603C +5161:080008FEFF100820087C7F444144417C7F441444147C14442402240243FE8000 +5162:0820082008207EFE082008207EFC428442847EFC14501450255026924492810E +5163:100011FEFD00117C11547D7C4554457C7D10297C29102AFE2C00480247FE8000 +5164:101011FE9528557C592811FEFD10297C2954297C29542A7C2A284C44480287FE +5165:0400020001000100010002800280028004400440082008201010201040088006 +5166:040042004100410040804080414041404220422044104808500440007FFE0000 +5167:0400020002007FFC410441044284428444444824501440044004400440144008 +5168:0100010002800440082010102FE8C106010001001FF00100010001007FFC0000 +5169:0000FFFE0100010001007FFC4104514449244924555465944104410441144008 +516A:0600010002800C603018CFE600003E24222422483E4822903E48224822242624 +516B:0000004004400440044004400440042008200820081010101008200820044002 +516C:00800480048008400840102020104208820604000440082010203FF010100000 +516D:02000100008000800000FFFE0000000004400420081008081008200440040000 +516E:044004400820082010102008DFF6040008000FE0002000200020002001400080 +516F:201010100820084000007FF80208020802080208022802100200020002000200 +5170:101008100420044000007FFC0000000000003FF80000000000000000FFFE0000 +5171:04200420042004203FFC042004200420042004207FFE00000420081010082004 +5172:00007FFC010001003FF801000100FFFE0000044004400820082010102008C006 +5173:10100810082000003FF8010001000100FFFE010002800280044008203018C006 +5174:0408020821081110081008200040FFFE00000440042008100808100820044004 +5175:002000F01F00100010001FF81080108010801080FFFE00000840102020104008 +5176:082008207FFC082008200FE0082008200FE008200820FFFE0000082010102008 +5177:00001FF0101010101FF010101FF010101FF010101010FFFE0440082010102008 +5178:0440044004403FF82448244824483FF8244824482448FFFE0440082010102008 +5179:082004200440FFFE1020102020402448448878F008101020142822447EFC0204 +517A:0440082010102FE8C4260420082010A0604000003E442258226022423E42223E +517B:0820044002887FFC01003FF80200FFFE04400830344EC4440440044008401040 +517C:102008407FFC048004803FF00490FFFE04903FF00CC014A02498C48604800480 +517D:082004403FF821083FF821083FF80000FFFE00001FF01010101010101FF01010 +517E:082004403FF821083FF821083FF8000008207FFC08200820FFFE082010102008 +517F:08100420FFFE08203EF808283EAA0866389200001FF000007FFC040008101FF8 +5180:04447C7804421C3EE4003FF821083FF821083FF804403FF80440FFFE10102008 +5181:440025FE29027D0255FE55247D24557E55247D2411FE1152FD54124812641442 +5182:00007FFC40044004400440044004400440044004400440044004400440144008 +5183:00007FFC4004400440045FF44004400440045FF4400440044004400440144008 +5184:00003FF8200820082008FFFE200820082008FFFE200820082008200820282010 +5185:0100010001007FFC410441044104428442444424481450144004400440144008 +5186:00007FFC410441044104410441047FFC40044004400440044004400440144008 +5187:02000200FFFE040004000FF00810181028104810881008100810081008500820 +5188:00007FFC40044004400448244444428441044284444448244004400440144008 +5189:0100010001003FF8210821083FF8210821082108FFFE20082008200820282010 +518A:00003FF824482448244824482448FFFE24482448244824482448240820282010 +518B:00007FFC40044004400447C4444444444444444447C444444004400440144008 +518C:00001E7812481248124812481248FFFE12481248124812481248128826A84110 +518D:0000FFFE010001003FF8210821083FF821082108FFFE20082008200820282010 +518E:00001FF0101010101F90109010907FFC40044004400440044004400440144008 +518F:00007FFC400444444824501467CC444444444444444447C44444400440144008 +5190:00003FF820082FE820082FE800001FF010101FF010101FF01010101010501020 +5191:010001003FF821083FF821083FF800001FF0101017D0101017D0101010501020 +5192:00003FF820082FE820082FE8200800001FF010101FF010101FF010101FF01010 +5193:082008207FFC08203FF80820FFFE01003FF821083FF82108FFFE200820282010 +5194:00003FF820082FE820082FE800007DFC4420442047FE44207C20442000A00040 +5195:7FFC40045FF440045FF404000FE010203FF8510811081FF8028004821882607E +5196:00007FFE40028004000000000000000000000000000000000000000000000000 +5197:000000007FFE4002800400000FC00840084008400840104210422042403E8000 +5198:0100010001003FFC2104410801000280028002800480048008841084207C4000 +5199:00007FFE4002900410001FF8100020003FF800080008FFC80008000800500020 +519A:000000007FFE400281040100010021082108210821082108210821083FF80008 +519B:00007FFE4002820402003FF80400090011003FF801000100FFFE010001000100 +519C:0100010001007FFC4204820805000508089018A02840482088100A080C060800 +519D:00007FFE400280041FF0101010101FF0101010101FF0101010101010FFFE0000 +519E:00007FFE4002810411100920054001007FFC0540092011102108C10601000100 +519F:00007FFE410282041FF010101FF010101FF0000010F01F00100410040FFC0000 +51A0:00007FFE400280043E08000800FE7E08144814281408142A2412240243FE8000 +51A1:00007FFE40029FF400007FFC02000D08719002A00CC071A006981886E2800100 +51A2:00007FFE400280047FFC0200060819106AA004C01BA062980C863080C2800100 +51A3:00007FFE400280047F0022FC22443E44224422283E2822102790FA2842440282 +51A4:00007FFE400288040FE0102020405FF8110811081FF8028004A008921082607E +51A5:00007FFE400280041FF010101FF010101FF012100100FFFE0000082010102008 +51A6:000000007FFE400280243E38002000207EF814081450142014542484240443FC +51A7:00007FFE400280040820082008207EFC08201C301A702A6848A4892208200820 +51A8:00007FFE400280043FF800001FF010101FF000003FF821083FF821083FF82008 +51A9:00007FFE400282041CF010101EF010101FF008001FFC20044924249424944008 +51AA:FFFE84423FF804401FF010101FF010101FF002007FFC09203FF8D11611300100 +51AB:000040002000200000000800080010001000E000200020002000200020000000 +51AC:040004000FF010102820444003800C603018C006070000C000200E0001800040 +51AD:010001000100FFFE02800440082010102608C186004000000C00030000C00020 +51AE:0000400027FC204000400840084010401040E0402040204020402FFE20000000 +51AF:000047F02010201002100A100A1013FC1004E004200427F42004200420280010 +51B0:004040402040204400680770116011502150E248224824442842204021400080 +51B1:000047FE20802080008008F80908110811082208E3F820102010201027FE0000 +51B2:004040402040204007FC0444144414442444E44427FC24442040204020400040 +51B3:00804080208027F800880088108810882FFEE080214021402220241028081006 +51B4:000043FC20102110011009100A1013FE1030E050209021102210241020500020 +51B5:000047F8240824080408040817F811202120E1202120222022222422281E1000 +51B6:0040404020802110020807FC1004100023F8E208220822082208220823F80208 +51B7:0040404020A020A0011002481426102023F8E0082010211020A0204020200020 +51B8:0040424421482150004007FC104010402040EFFE204020402040204020400040 +51B9:009040882088208007FE0080110011FC2144E244224824502420285020880306 +51BA:000043FC2204220402040BFC0A20122013FEE220222022102212228A23060202 +51BB:00404040204027FE008009200920122013FCE020212821242222242220A00040 +51BC:00404240224023FC04400040104017FE2120E1202120212022222222241E0800 +51BD:000440042FC42224022403A412A414A426A4E5A4292421242204220424140808 +51BE:0040404020A021100208140613F81000200023F8E20822082208220823F80208 +51BF:0040404023F8204807FE004813F810402040E7FC204020402FFE204020400040 +51C0:0100410023F02410002017FC104410442FFE2044E04427FC2044204021400080 +51C1:004040402FFE2040004007FC1444144427FCE04020E0215022482C4620400040 +51C2:0100410021F02210022007FC1A4412442244E3FC22A420A0212022222422081E +51C3:0040404020A02110020805F61040104027FCE040225022482444284421400080 +51C4:0040404027FC204003F8004817FE104823F8E08027FE21082390206021980604 +51C5:000047FC2444244407FC0444144415F42514E514251425F42514240427FC0404 +51C6:01404120212023FE022016201BFC1220222023FCE2202220222023FE22000200 +51C7:02084228222822280FA40244125416922710EAA02A203228224422FC22440200 +51C8:003C47C02244212800000BF80848104817FEE048204823F82048204021400080 +51C9:008040402FFE2000000003F81208120823F8E040225022482444284421400080 +51CA:0040404027FC204003F8104017FE100023F82208E3F8220823F8220822280210 +51CB:000047FC2444244405F40444144417FC2404E5F42514251425F4240424140808 +51CC:0040404023F82040004007FE111012882484E1F0231024A0204020A023100C0C +51CD:0040404027FC204003F80A480BF8124813F8E04020E0215022482C4620400040 +51CE:0040404020A021100208040611F010402040E3F820402248214821502FFE0000 +51CF:00144012201027FE0410041015D014122412E5D42554254825DA242A28461082 +51D0:000047FC20A020A007FC04A414A414A427FCE040204027FC204020402FFE0000 +51D1:0040404027FC204003F8008017FC11102208E5F6204023F8204020A021100608 +51D2:004042482248224803F8000017FC100023F8E208220823F8211020A027FE0000 +51D3:000047FC20A020A007FC04A414A417FC2040E04027FC20E0215022482C460040 +51D4:0040404020A02190024817FE1A0813F8220823F8E20023F82508250829F80108 +51D5:000047FC2404200003F80A080BF8120813F8E080204027FC2000211022080404 +51D6:4140212003FE0A2017FCEA2023FC222023FE02000100FFFE0100010001000100 +51D7:0040444427FC2120011003FE122016202BFCE220222023FC2220222023FE0200 +51D8:04804482249C2FD004900790149E17942494E4942FD42014251428A430240044 +51D9:000047FC24A427FC004003F8104017FC2110E0A023F820402FFE204020400040 +51DA:0110411027BC211003B805541912100023F8E00027FC20402248244429420080 +51DB:00404FFE200027FC040405F4151415F42404E7FC200023F820002FFE224804C4 +51DC:00404FFE200027FC040405F4151415F42404E7FC200823F020402FFE21500E4E +51DD:0400457C260424A80390107C141417942A502250EFDC2250255024B0289E0100 +51DE:08008BDE4A924A920BD22A5E2A502BD04A92CA924BCE50004000452444920892 +51DF:00404FFE204027FC000007FC14A417FC2208E3F8220823F8220823F821100208 +51E0:00000FE0082008200820082008200820082008201020102220222022401E8000 +51E1:00000FE00820082008200A20092008A008A008201020102220222022401E8000 +51E2:0200020004001FE01020102010201020102010201020102220222022401E8000 +51E3:02000200020002001FE0102010201020102010201020102220222022401E8000 +51E4:00003FF8200820082FC8204828482488228821082288244A284A400A40068002 +51E5:00003FFC200420043FFC2000200023E02220222022202220242244224822901E +51E6:100010F010901E901290229022905290949414940894090C1400230040FE8000 +51E7:00003FF820082108210821082FE829282928292829A8294A210A410A41068002 +51E8:00003FF8200820082FC8200820083FE82208248828483FEA282A400A40068002 +51E9:00003FF820082108210821082FE82108238823482528252A290A510A41068002 +51EA:00003FF820082088208820882088248824E824882488248A248A5FFA40068002 +51EB:020004003FE02020242022A020403FF800081F8810A8109010822082407E8000 +51EC:00003FF8200820082FE82008200827C82448244827C8244A244A47CA44468002 +51ED:08380BC01040304057FE90401040104013F800000FE00820082010222022C01E +51EE:00003FF8200820082FE82108220827C82448244827C8244A244A47CA44468002 +51EF:100092F092909290FE900090FE90029002907E904090409246925912610E0200 +51F0:00003FF8220827C8244827C8244827C820082FE8210827CA210A4FEA40068002 +51F1:0800490049787F480048FF4800487F48414841487F484248244A0F4AF08A4106 +51F2:00003FF8244822883FF822882FE822A83FF822A82FE8228A26CA4AAA52968282 +51F3:00907EA004442BA810102FE8C8260FE004407FFC00000FE0082008221022601E +51F4:000043FC22400BF80A4013F82240E3FC2004255420080FE0082008221022601E +51F5:000000000000000040044004400440044004400440044004400440047FFC0004 +51F6:000000101010082044444284410442844444482450146014400440047FFC0004 +51F7:01000100010001004FE4410441044104410441045FF44004400440047FFC0004 +51F8:00000FE008200820082008200820783C4004400440044004400440047FFC4004 +51F9:00007C7C444444444444444444444444444447C440044004400440047FFC4004 +51FA:0100010021082108210821083FF801080100010041044104410441047FFC0004 +51FB:0100010001003FF8010001000100FFFE0100010021082108210821083FF80008 +51FC:01000100010001105D244544458449444924511461144504420440047FFC0004 +51FD:00003FF00020004051944924454441044544492451144504420440047FFC0004 +51FE:00003FF00020004041845D745594555455245D5441944504420440047FFC0004 +51FF:0440244814500440FFFE0000044022882FE8210821082FE8210821083FF80008 +5200:000000003FF80208020802080208020802080408040808080808100820504020 +5201:00003FF800080008000800480088010802080408080810086008000800500020 +5202:0004000400040044004400440044004400440044004400040004000400140008 +5203:00003FF802080208020822082208220842080208040804080808080810506020 +5204:00007FF004100410241014100C100410061005900870081E1010101020A0C040 +5205:00007FE00420042004200420242824244422842208200820102010202140C080 +5206:00400440042008201010200840049FE204200420042008200820102021404080 +5207:1000100011FC104410441E44F044104410441244144418841084010402280410 +5208:000401040104212411240A240A24042404240A240A2411242104400480140008 +5209:1004100420043FA4402480243F2402240424082410242024408440843F940008 +520A:00047F0408040824082408240824FFA408240824082408240804080408140808 +520B:0004070478040824082408240824FFA408240824102410242004200440148008 +520C:0404040404040424FFA404240424042444242424242404240404040414140808 +520D:040004000FF0101020204040BFF80008000800081FF80008000800083FF80008 +520E:2004200420043FA454A494A414A424A424A448A488A410A42084408485140208 +520F:200420043F84402480243F24002400247F240124012401240144014400D40048 +5210:00043F04210421242924252425242124FFE42124212421242104410445148208 +5211:00047F8412041224122412241224FFE412241224122412242204220442148208 +5212:100414041204102413A4FC2410241124112412240C2408A414842284C1940088 +5213:00043F04000400240024FFA41224122412241224122422A42304420480140008 +5214:0804080408047F240924092409240924FFE40824082414241204210441148008 +5215:00003FF80208020804080850302000007EFC122412241224224422444A948508 +5216:00043F042104212421243F242124212421243F24212421242104410445148208 +5217:00047F84080408241F2411242124212452248A24042404240804100420144008 +5218:100408040804FFA4022442242224142414240824082414242404420482140008 +5219:00047F0441044124492449244924492449244924492414241204210440948088 +521A:00047F0441044124652455245524492449245524552465244104410445144208 +521B:0804080414041224212440A4BE242224222422242A242424208420841F940008 +521C:1202120212027F82129212927F92521252127FD21252125223422282420A8204 +521D:2000100001FCFC44084410441044344458449444144410841084110412281410 +521E:00043F042104212421243F24212421243F242124212421242784F80440140008 +521F:00047F041104112421242524422480243F2421242124212421043F0421140008 +5220:00027BC24A424A4A4A4A4A4A4A4AFFEA4A4A4A4A4A4A4A4A4A425A42854A0884 +5221:00027F824082408240927F92441244127FD24412441242124242514260CA4044 +5222:0804080414041224212448A4842404247F240124222414240804040404140008 +5223:0804080408041024122421247FA420A400243F2421242124210421043F142108 +5224:040444842484252404247FA4042404240424FFE4042408240804100420144008 +5225:00047F044104412441247F240024102410241F2411241124210421044A148408 +5226:0804080408047F24082408240824FFA408241024102422244104FF8440940008 +5227:0800080008FC7F24082408240824FFA41024102424244224FF44414400940108 +5228:100410043F0421244124BD24252425243D24212425242224208420841F940008 +5229:010407847C04042404240424FFA40C241624152424A424244404840404140408 +522A:00047F0455045524552455245524FFA455245524552455245504510445144208 +522B:00047F044104412441247F2410241024FF24112411241124210421044A148408 +522C:14041204100417247824102417A4F824112412240C2408A414842284C1940088 +522D:00047F04020404240C2412242124C0A400247F240824082408040F04F0144008 +522E:02040F04780408240824FFA40824082408247F2441244124410441047F144108 +522F:00047F84000400243F24212421243F24212421243F24212400040784F8144008 +5230:0004FF840804102422244124FFA408A4082408247F24082408040F84F8144008 +5231:2400240025F824487E482448254C254AFE4A2448244824482448448844A88510 +5232:080408047F04082408240824FFA40024082408247F24082408040F04F0144008 +5233:08040804FF84142422244124BEA40024FFA4102420247F24010401040A140408 +5234:00047F041104122423A420A44AA489240824FFA418242C242A04490488940808 +5235:0004FF84220422243E24222422243E242224222427A4FA244204020402140208 +5236:0404240424043FA444240424FFE4042404243FA424A424A42684250404140408 +5237:00023FC2204220423FD22212221222123FD252525252525293421282020A0204 +5238:0100111009203FF8020002007FFC082010102FE8C42604200820082011402080 +5239:01046204140408241424222449240824FFA408242A2429244884888428141008 +523A:08040804FF84082408247F24492449244D244A241C242A244904888408140808 +523B:100408040004FFA40824112421247E240424092412242424CC0412042114C088 +523C:1000100010FC7E24102410A410A4FEA410A41124202428244444FE4442940108 +523D:08040804140422244124BEA400240024FFA41024102422244104FF0441140008 +523E:080408040804FFA40824492429242A24FFA40824082414241204210441148008 +523F:08044904490449247F24102410243F244124A12412241424080410042014C008 +5240:08044904490449247F2400247F24012401243F242024202423042C0430140008 +5241:00043E0422042224222449A488240824FFA408241C242A244904888408140808 +5242:10040804FF840224642418242624C12422A42224222422242204420442148208 +5243:420422042404FF2409240924FF2488248824FFA418A428A44A84890408140808 +5244:00047F84000424A449249224492424A400247FA40824082408040B84FC140008 +5245:00047F84000400243F242124212421243F240024212411241204078478142008 +5246:080404043F04212421243F24212421243F242024242422242504290430142008 +5247:00047F04410441247F24412441247F24412441247F2400242204210440948088 +5248:00043F04210421243F2400247FA440A440A47FA440A440A47F84408442944108 +5249:080408042A042A242A245D2488A4082408247F240824082408040F84F8144008 +524A:0804490429042A2408247F24412441247F24412441247F244104410445144208 +524B:08080808FF48084808487F48414841487F481448140814282412240243FE8000 +524C:08040804FF84082408247F24492449247F2408241C242A244904880408140808 +524D:101008100820FFFE00003E08224822483E48224822483E48220822082A282410 +524E:02046404180416242124CA2409240824FFA418241C242A242904488488940808 +524F:4200240000FC7E24242424A424A424A4FEA42524242424242444444444948508 +5250:00047F044104412441247F2408240824FFA488A494A4A2A4C284808482948108 +5251:0804080414041224212440A4BE24002411240924492422242204078478142008 +5252:1204120412047F2412241224FFA400243F24212421243F24210421043F142108 +5253:0C80708011FCFD2432243844548491041228101000007FF80408080810506020 +5254:00043F04210421243F24212421243F2410243FA44AA492A42484488412942108 +5255:120212021202F3C21212121212127392121212121212F3D212021202120A1204 +5256:100408047F84002421241224FFE4002400243F242124212421043F0421140008 +5257:240422042F04F024142409243524CB2424242F24F0241224140409043514C308 +5258:22042204FF84222422243E24222422243E2422242224FFA40004220441148088 +5259:4200240001F87E4824482448254C254AFE4A2448244824482448448844A88510 +525A:04020402FFC204023F9224923F9204123F920492FFD204923F820402140A0804 +525B:00027FC2404251424A527FD2445244525552555255525F5240424042414A4084 +525C:080404047F8440A420243BA42AA42AA42AA45AA44BA48A241204128423144208 +525D:20043E0442047C240424FFA40824092449242A241C242A24C904090428141008 +525E:080408047F84142422244124FFE4012479244924492449247904010405140208 +525F:00047B8408842AA411242AA444A4882400247BA408A42AA411042A8444948808 +5260:10040804FF84002400247F244124412441247F2408242A244904888428141008 +5261:0804090449044A2488241424222449248824492449248A241404220441148088 +5262:0004FF84080410242824C4A40D2456242524D5240CA414A42404C40414140808 +5263:08040804140422244124BEA4082408247F24492449247F240804140422144108 +5264:10040804FF840224642418242624C12422A43E24222422243E04420442148208 +5265:00047E0402043E240224FFA40824092449242A241C242A24C904090428141008 +5266:08040804FF8414242224492488A47F2449247F2449247F2408040A040C140808 +5267:00043F84208420A43FA4242424243FA4242424243FA450A4508490841F941088 +5268:08040804FF8408247F240824FFA40824FFA4102420247F24A10421043F142108 +5269:070278020802FF822A122A92EB122A926A92A9921C122A1249028882080A0804 +526A:0820FFFE00003E0822483E4822483E482208261800007FF80408080810506020 +526B:040202023FE2248224923FF22492279220122FD22052249222824102468A9844 +526C:08044904490449247F240024FFA4082410247F24552455245504550455144308 +526D:00043F84208420A43FA420243FA4242429242FA422242FA4220443845E148808 +526E:00047F0441044124792449244924FFA480A4BEA4A2A4A2A4BE84808482948108 +526F:00027FC200023F82209220923F9200127FD2445244527FD2444244427FCA4044 +5270:03823C0204027FC215121512FFD2151215127FD20E12151224824442840A0404 +5271:08000800147E22124112BED2085208527F52499249127F1208221422224A4184 +5272:10040804FF8480A409247F2408247F240824FFA408247F24410441047F144108 +5273:22042204FF8422240824142422244124BEA4002400247F24410441047F144108 +5274:0804490449047F240024FF2400247F24412441247F24422424040F04F0144008 +5275:08040C041204292444A4BF2421243F2421243F2420243F24510451049F141108 +5276:20043F0441047E240224FFA4102428A4CD2416242524CD2414842484D4140808 +5277:080404043F8411240A243FA422242A242FA4322422242FA42204420443949C08 +5278:0804FF8408047F2449247F2449247F2408A4FFA40224FFA4420422040A140408 +5279:0004770411045524332455240C243324C4A4182462240CA4710406041814E008 +527A:082008207E7E08C4FF281C102A2848C600003FFE20002FF82208420844289810 +527B:0202222222223FEA000A3DEA252A252A3DEA252A252A3DEA2522252255AA8A44 +527C:100422047F04422494A4F7A408243624C92430A4C424192462040C043014C008 +527D:0002FFE20A027FC24A524A527FD200127FD20012FFF2041224824442942A0804 +527E:00027FC240024F82489248924F9240125DD25552555255525DC240027FEA0004 +527F:49049204490400247F2449247F2449247F240824FFA41C242A04490488140808 +5280:00047F0412040C24FFA414A42524D4240824FFA494A4A2A4DD8494849C948188 +5281:120211023FC222026212BFD2221222123FD2221222123FD2200254824A4A8A44 +5282:00027FF24002514A4A4A5F7A449A442A550A554A5F4A444A44A248A2492A9204 +5283:08047F040904FFA409247F240824FFA400247F2449247F2449047F040014FF88 +5284:420442047BC44524A8A4142422244124BEA4002400247F24410441047F144108 +5285:00047F04550455247F2420247FA490A47CA454A454A47CA41284FE8402940108 +5286:02023FF22882250A3FEA250A2FCA254A3FEA254A2FCA250A2D825542652A8504 +5287:08040F0408047FA448A47E244924472440247FA4482455244A04B7040A943608 +5288:00407C2045FC44887C5043FE7C20A5FC24203C2000007FF80408080810506020 +5289:080277C252424A42555264920A1211123F92C4523F120492250217C27C0A2004 +528A:04020B0230C2DF2200127FD255524E527FD200123F9220923F8220823F8A2084 +528B:00047F0441047F240024F7A494A4F7A408240824FFA41C242A04490488940808 +528C:020213C212027FEA010A014A3FEA210A3F0A254A254A2D4A368244A2896A3224 +528D:08040804140422244124BEA40024002477245524552477242204220455148888 +528E:0800080014FC22244124BE240024002477245524552477242244224455948908 +528F:080449042A04FFA480A43E24222422243E2400247F2449247F0449047F144108 +5290:11027FC2150212023FD26412BF9224123F9224123FD220127F8211020E0A7184 +5291:080204027FC211020A52F59255525532B592001220923F9220823F82208A4084 +5292:08000800147E22124112BE5200520052775255925512771222222222554A8884 +5293:08023F8220823F8220923F9200127FD244527FD244527FD20002FFE2110A2104 +5294:08000800147C22244124BE2400A4006477245534552C7726222422245544888C +5295:0844738442047BE452A452A484247FA440A47FA440A47FA440847F8421144088 +5296:3E024202FF8240827F924492771244523FD24212FF9248927F821A02294AC7C4 +5297:52827BE294827BEA318A5AAA946A3FCA204A3FCA204A3FCA20423FC2108A2044 +5298:02023FF224823FEA248A2ECA35AA248A250A3DEA250A3DCA25025DE2450A8504 +5299:1F0221023E0202027FD2189265121A9266521A122492FBF2AAA2FBE228AAFBE4 +529A:7FC240427FC252424A9252525FD255525FD264525F5255525F424442BF4A0084 +529B:02000200020002007FF802080208020802080408040808080808108820504020 +529C:1020102010201020FF201120112011201120112021202122212241224A1E8400 +529D:004000400040FC4005FC04444844284410441084288424844504810402280410 +529E:02000200020002007FF002100210121812142412441208100810101020A04040 +529F:004000400040FE4011FC1044104410441044108410841E84F104410402280410 +52A0:100010001000107CFE4412441244124412441244124412442244227C4A448400 +52A1:040004000FF0182024C003000CC03230C20E1FF0021004100410081010A02040 +52A2:00200020FF20202020FC20243E24222422242224222422244244424494A80910 +52A3:0100111011082124414401800E00F10001003FF8020802080408080810506020 +52A4:022007203820202020FC20243F24242424242424242424442444448445288210 +52A5:102008200820FF2000FC00243C24242424242424242425444644448481280210 +52A6:020002003FF00410081010A06040102010207EFC12241224224422444A948508 +52A7:04200E207820082008FC7E24082408240824FF24082408440844088429281210 +52A8:004000407C40004001FC0044FE4420442044208448844484FD04450402280410 +52A9:00207C204420442044FC7C24442444247C244424442444444E44F08401280210 +52AA:10001000FEFC22844488285010202858C586020002007FF80408080810506020 +52AB:0820082008207E2008FC08240824FF241024102420244444FE44428401280210 +52AC:2020202020207E2042FC82247A244A244A244A247A244A440244028415280A10 +52AD:00207E201220122022FC2A24442480243E2422242224222422443E4422A80110 +52AE:08200820482048207EFC482488240824FF240824082414442244428481280210 +52AF:00200020FF20102010FC10243E2422246224A224222422443E44228401280210 +52B0:1020102020207E2042FC4224422442247E2442244224422442447E4442A80110 +52B1:00107FD0401040105F7E481248124F12491249124912491249125122952A2244 +52B2:00207E200420082018FC24244224812400247E240824084408440E84F1284210 +52B3:08200820FFFE082000007FFE420282043FF00210021004100410081010A02040 +52B4:22081108111000207FFE4002820402007FF80208020804080408080810506020 +52B5:0100111009203FF8020002007FFC082012102208DFF604100410081010A02040 +52B6:04200E207020402040FC7F24402440245E2452245224522452449E4492A80110 +52B7:2220122014207F2008FC08243E24082408247F24082408441044108421284210 +52B8:082008207F20082008FC0824FFA40024082408247F24082408440F44F0A84110 +52B9:102008200020FF2000FC24244224812424241424082414442244428481280210 +52BA:101010102410427EFF120912481248127F1288220822FFA20842084208940908 +52BB:00107F904010407E7F92441244125F12441244227FA2402240427FC200940108 +52BC:082008200820FF2008FC08247E24002400247E244224422442447E4442A80110 +52BD:7F84082410243F2451240A24040408043014C20802007FF80408080810506020 +52BE:102008200820FF2008FC102422247C24092412242424C82414442244C0A80110 +52BF:084008407DF808480C4819C8684A08AA2886130202007FF80408080810506020 +52C0:0820082008207F2008FC08247F24412441247F24142414242544264444A88110 +52C1:00207F20002025204AFC9224492424A400247F240824082408440F44F8A80110 +52C2:0820282028203E2048FC0824FF24002400243E242224222422443E4422A80110 +52C3:082008207F20082008FC7F24412482243C24042408240F447844088429281210 +52C4:201020103F904010BF7E211229122512FFD22112491245127F9201220A2A0444 +52C5:08200820FFA0082008FC7F24492449247F2408241C242A444944888409280A10 +52C6:102008207E20422042FC7E24422442247E244024482444444A44528461284210 +52C7:3FF0066001803FF821083FF821083FF82108220802007FF80408080810506020 +52C8:00107E1002103410087E7F12491249127F12491249127F1249124922492A4344 +52C9:202020203E20442088FC7F244924492449247F4414441494250A240243FE8000 +52CA:08200820FF20087C08247F24412441247F241444145414882502240243FE8000 +52CB:00203E20222022203EFC00247F2441244924492449244944144412842128C210 +52CC:082049202A207F2008FC1024FFA422244124BEA422242A24244420442CA83110 +52CD:10100810FF900010007E7F124112411241127F1208122A12491288A2282A1044 +52CE:082008207E20082008FCFF242224412488A408247E24082408440F44F8A84110 +52CF:102008207F20002022FC1424FFA4002400243E242224222422443E4422A80110 +52D0:00203E20042008207EFC08240824282410247F245524554455445784FD280210 +52D1:082008200820FF2008FC2A242A242A245D2488241C242A444944888409280A10 +52D2:22202220FFA022203EFC08247F24492449247F240824FFC40844088409280A10 +52D3:441044907510461054FE64924B9210127F12411241127F12411241227F2A4144 +52D4:0020FFA0082010207F7C552455245D24552455245D245524554455447F944108 +52D5:0F2078200820FFA0087C7F2449247F2449247F2408247F2408440FC4F8944108 +52D6:0020FF208120BD2081FCBD24812400247E2442247E2442247E4442447EA84310 +52D7:1FF010101FF010101FF000003E2022203EFC22243E2422242F44F04440940108 +52D8:22202220FF2022203EFC22243E2422242224FF2440245444624440847F280210 +52D9:0040FC4004FC688811500820FED813063440304053FC50449084108451142208 +52DA:52105210FF9052105E7E40127F1200127F1241124912491249121422222AC144 +52DB:00203E20222022203EFC00247F2441247F2441247F2441247F44144422A84110 +52DC:282044209220202048FCFC2404240024EE242224AA246624AA442244AAA84510 +52DD:0020792448A8482049FC78404BFE488849447A424DF848484888488849289A10 +52DE:08202AA42CA84920145022887FFE410281043FF8020802080408080810506020 +52DF:04407FFC04401FF010101FF010101FF00400FFFE10102208DFF6041008503020 +52E0:0020772011205520337C55240C243324C4A4182462240CA4714406441894E108 +52E1:0020FFA014207F2055FC55247F2400247F240024FFA408242A444944A8A81110 +52E2:10407C4011F8FE4844C892487CAA10AA1D06E20202007FF80408080810506020 +52E3:08107F1008107F10087EFF9200127F1241127F1241127F1241127F22222A4144 +52E4:22202220FFA022203EFC08247F2449247F2408247F2408447F4408840F28F210 +52E5:7CF8048804F87C2041FC7D2405FC04282BFC120402007FF80408080810506020 +52E6:49209220492000207F7C49247F2449247F240824FFA41C242A44494488940908 +52E7:202020203F20482088FC7F24142422247F24A4243F2424243F4424443FA82110 +52E8:20203E204220FF2049FC49247F2410242824D5242624CD2415442444D4A80910 +52E9:5220FFA052205E2040FC7F2400247E2442247E2442247E4442447E8425284210 +52EA:061078101010FF90227E5D1294921C1200127F1241125D1255125D22412A4344 +52EB:0F10F81049102A7EFF922A12491280927F12492249227F22494249427F944108 +52EC:081049102A107F10107EFF9222125112A2923C1209127F120812492288AA1844 +52ED:101008107F102210FF7E00127F1249127F1249127F1208127F1208220F2AF044 +52EE:08100F1008107F9048FE7E124912471240127F92481255124A12B7220AAA3644 +52EF:0820FF200020FF20817CBD24A524FF2400247E2442247E2442447E440094FF08 +52F0:100010FE7E92129222FE2A92449280FE4410FF0855285520556455AA5928B318 +52F1:22102210FF9022107F7E49127F1249127F120812FF9288928A92BEA282AA81C4 +52F2:7F200820FF2008FC7F2449247F2449247F2408447F440894FF08000024484224 +52F3:071078100810FF90087E7F126B125D127F1208127F120812FF920022552A8AC4 +52F4:08100F9008107F9048FE7E1248925F9255125F1255125F1248125522B2AA5E44 +52F5:00107F904A107F904A7E5F1255125F1255125F1244127F926492AEA2A2AA2144 +52F6:22104F90821E14A42FD46014AF9428882F88289429A202007FFC040418286010 +52F7:0810FF9000107710557E771222127F1222127F122212FF9228926522B22A2144 +52F8:2210FF902210F79094FEF792281224127F924812FF1248127F1248227FAA4044 +52F9:100010003FFC2004400480040004000400040004000400040004000400280010 +52FA:0800080010001FF8200840088008040802080108010800080008000800500020 +52FB:0800080010001FF82008400880081F880008000800083FC80008000800500020 +52FC:100010003FFC2004440484043F84048404840884089410942074400400280010 +52FD:0800080010001FF8200842088208020805080488048808481048200800500020 +52FE:0800080010001FF820084208820804080408088810483FE81028000800500020 +52FF:0800080008001FFC124422444244844404440884108421044204040408281010 +5300:080008000FFC10042004480484040204002400C403041C040804000400280010 +5301:0800080008001FF811082908450882080308048804480838100E200840500020 +5302:100010003FFC200448048844088409040E0408140814081407F4000400280010 +5303:080008000FFC1004210441049104128412441424182410041FE4000400280010 +5304:100010003FFC20044204810400043FF408040804080408040FE4000400280010 +5305:080008001FF0101020105F909090109010901F9010501020100410040FFC0000 +5306:0800080008001FFC1244224442449C440644098410C421244214040408281010 +5307:100010003FFC2204420487E40824102424440244028401040604180460280010 +5308:0800080010001FF820084088888825282228252828A820283FE8000800500020 +5309:100010003FFC20044004BFE4020412440A440A8402047FF40204020402280210 +530A:100010003FFC2004420492440A8402047FF407040A8412446224020402280010 +530B:100010003FFC200448048FC4120402047FF40204124412441FC4004400280010 +530C:100010003FFC22044504888410446FB400041FC4104410441FC4000400280010 +530D:100010001FFC22444224BFF402043FE422243FE422243FE42224222422B42048 +530E:100010001FFC24047FE48884124462341FC412441FC412441FC4022401F40008 +530F:10401040FEFC2884450482F47C940094FEF4208440947C8804820482287E1000 +5310:100010001FFC20047FE480041FC410441FC400043FE422243FE422243FF42028 +5311:100010003FFC28045EF492141E1412F41E8412847EF40A1412142A5444280010 +5312:100010001FFC28844884BFE40A8405040884174460341FC4104410441FD41048 +5313:100010003FFC4004BDE4252425243D34260425E43C2420A428442CA433282010 +5314:100010003FFC28045EF492941E9412F41E0412F47E940A9412F42A0444280010 +5315:1000100010001008103010C013001C001000100010001004100410040FFC0000 +5316:0880088008841088109030A030C05080918012801480108210821082107E1000 +5317:044004400440044404487C500460044004400440044004421C42E442443E0400 +5318:409241244248492448925040608043FE4202428A42524A224A524A8A3BFE0202 +5319:00003E4022403E4422483E500060FF40084408442F44283C280058004FFE8000 +531A:00007FFC4000400040004000400040004000400040004000400040007FFE0000 +531B:00007FFC4200420047F0441048205020404040A041104608580440007FFE0000 +531C:00007FFC40804080448044F047905C9044D044A44484440443FC40007FFE0000 +531D:00007FFC4080408040804FF8488848884888488848A84890408040807FFE0000 +531E:00007FFC400040004FF84080408040804080408040805FFC400040007FFE0000 +531F:00007FFC4000410040805FFC400043E04220422042244424481C50007FFE0000 +5320:00007FFC4000403847C04400440047FC4420442044204820482050207FFE0000 +5321:00007FFC400040004FF84080408047F04080408040804FF8400040007FFE0000 +5322:00007FFC4400440047F84928512862484448488851084250442040007FFE0000 +5323:00007FFC400040004FF8488848884FF8488848884FF84888408040807FFE0000 +5324:00007FFC400040005FFC408040804FF8408040A040905FFC400040007FFE0000 +5325:00007FFC4200441048085FFC4004441044107FFE44104410481050107FFE0000 +5326:00007FFC442044205FA0487852285FA8422843A85E2A4A2A424642807FFE0000 +5327:00007FFC408040805FFC4080449044904AA8514441204220441048107FFE0000 +5328:00007FFC4220522052205E2043FC42207E205220522052F8620042007FFE0000 +5329:00007FFC4080488848884FF840805FFC400040804FF840805FFC40007FFE0000 +532A:00007FFC424042407E7C424042405E78424042407E7C4240424042407FFE0000 +532B:00007FFC44004FFC5124624444A849104FF848084FF848084FF840007FFE0000 +532C:7FFE4080414042204C1873F640004FA448A44FA448A44FA448844A9449087FFE +532D:00007FFC44205F2044205F7855285F2855285F28442A5F2A444644807FFE0000 +532E:00007FFC40804FF848884FF840807FFE40004FF84888496842104C087FFE0000 +532F:00007FFC40A0489045FE612057FC452049FC7920492049FE490040007FFE0000 +5330:7FFE40005F7C51445F7C40004FF848884FF848884FF840807FFE408040807FFE +5331:7FFE40804FF848884FF840807FFE48084FF848084FF848084FF8441048087FFE +5332:00007FFC40805FFC42204C1877F6441047F040004F7849484F7840007FFE0000 +5333:7FFE4080414042204C1873E640005F7C514451445F7C44104A28514440007FFE +5334:7FFE48404F7C54906FF848084FF848084FF848084FF842205FFC442048207FFE +5335:7FFE40804FF840804FF849484FF8441047F0441047F0441047F0422044107FFE +5336:7FFE44105FFC44904FFC58806FF848804FF848804FFC4408473844087FFE0000 +5337:7FFE49484F7849484F7849484F78448047F84C8057F0648047FC44007FFE0000 +5338:00000000FFFE10001000100010001000100010001000100010001FFE00000000 +5339:00007FFC444044404440444044404440444444444844483C500040007FFE0000 +533A:00007FFC4000401044104220414040804140422044104810400040007FFE0000 +533B:00007FFC440044004FF8508040805FFC4080414042204410580840007FFE0000 +533C:00007FFC40804140422044105BEC400047F04410441047F0441040007FFE0000 +533D:7FFE40004FF848084FF848084FF841005FFE4210472040C043304C0840007FFE +533E:00007FFC40804FF848084FF848004FFC592469244FFC4924492C40007FFE0000 +533F:00007FFE422042205FFC422041005FFC420047F84A08520843F840007FFE0000 +5340:00007FFC40004FF0481048104FF040005E78524852485E78524840007FFE0000 +5341:010001000100010001000100FFFE010001000100010001000100010001000100 +5342:00007FF004100410041004100410FFD0041004100412040A040A040604020400 +5343:001000F83F000100010001000100FFFE01000100010001000100010001000100 +5344:084008400840084008400840FFFE084008400840084008400840084008400840 +5345:101011101110111011101110FFFE111011101110111011101110211020104010 +5346:020002003FE00420042008221022211E41000100FFFE01000100010001000100 +5347:012007A03C200420042004200420FFFE04200420042008200820102020204020 +5348:0800080008001FF811002100410001000100FFFE010001000100010001000100 +5349:0100010001007FFC01000100092008200820FFFE082008201020102020204020 +534A:0100210811080910092001003FF8010001000100FFFE01000100010001000100 +534B:0100010001007FFC01000100092008200820FFFE08200820082008200FE00820 +534C:201024902490249024902490FFFE249024902490249024902490249024902010 +534D:00043F84008400840084008400843FFC2084208020802080208020FE20002000 +534E:08800888109030E0518096841084107C11000100FFFE01000100010001000100 +534F:2080208020802080FBF020902090229822942492289220902110211022502420 +5350:200021FC210021002100210021003FFC01040104010401040104FF0400040000 +5351:020004003FF8210821083FF8220822083FF808801080FFFE0080008000800080 +5352:020001007FFC0820082008201450228801000100FFFE01000100010001000100 +5353:010001FC010001001FF010101FF010101FF011100100FFFE0100010001000100 +5354:2040204023FC2084F88421142208201024102FBE24922492249228A22AAA3144 +5355:1010082004403FF8210821083FF8210821083FF801000100FFFE010001000100 +5356:010001003FF8010001007FFC04040288128008800900FFFE0240042018106008 +5357:01000100FFFE010001007FFC482444444FE4410441045FF44104410441144008 +5358:2208110811103FF8210821083FF8210821083FF801000100FFFE010001000100 +5359:22102210FF9022103E1022103E7E22102210FFD040105210611040107F900010 +535A:205020482FFE204027FCFC4427FC244427FC244420082FFE2208210821282010 +535B:210447C88812F3BC20084B92F83E0380AAAAABAA01000100FFFE010001000100 +535C:0200020002000200020002800240022002100210020002000200020002000200 +535D:084008400840084008400840F87E084008400840084008400840084008400840 +535E:0200010001000000FFFE02000200024002200210021002000200020002000200 +535F:004000407C4044404440446044504448444444447C4044400040004000400040 +5360:01000100010001FE01000100010001003FF8200820082008200820083FF82008 +5361:0200020003F8020002000200FFFE020002000240022002100208020002000200 +5362:0100010001FC010001001FF81008100810081FF8100810002000200040008000 +5363:0100010001FE010001003FF8200820083F88208820883F88200820083FF82008 +5364:0100010001FE010001003FF8200824482288210822882448282820083FF82008 +5365:0100010001FE010001003FF8200829282528224825482888214822283FF82008 +5366:0840084008407F4008400860FFD0084808447F440840084008400FC0F0400040 +5367:00207FA04820482048207F304128412441227F224820482048207FA000200020 +5368:0100010001FC01001FF010101F9010907FFC40044FE4482448244FE440144008 +5369:000003F802080208020802080208020802080208022802100200020002000200 +536A:000003F802080208020802880248024802080208022802100200020002000200 +536B:00007FF8020802080208020802080208022802100200020002000200FFFE0000 +536C:0000060078FC408440844084408440844084408440844EA87090008000800080 +536D:00000000FEFC10841084108410841084108410841E84F0A84090008000800080 +536E:007C3F80200020003FFE2000200027F024102410245024242404440443FC8000 +536F:0C0070FC44844484448444844484448444844C8474A804900880088010802080 +5370:0000060078FC4084408440847E8440844084408440844EA87090008000800080 +5371:040004000FF0101020205FFC100013F012101210125012202204220441FC8000 +5372:000000007F7C1144114421442544424480443F4421442154214821403F402140 +5373:00007E7C424442447E44424442447E444044484444544A485240604000400040 +5374:08000800087C7F44084408440844FFC41044104424444254FF48414000400040 +5375:0C0070FC4484448464A454945494448444844C8474A804900880088010802080 +5376:100010003E7C4244A444184410442444C8441F442144D2540C4808403040C040 +5377:0100111009203FF8020002007FFC082010102FE8C826082008A80848080807F8 +5378:200020003F7C4844884408447F44084408442E44284428542F48F04040400040 +5379:08000800107C7F445544554455445544554455445544555457C8FC4000400040 +537A:1FC000447D88055009203118C50602003FF800001FF010101050102410040FFC +537B:14001200217C49440844144422444144BE4422442244225422483E4022400040 +537C:0080FC8029F82A082DFE2900297829482968295029442A442C3C480247FE8000 +537D:080010007E7C42447E4442447E440044404440447E44405440484C4070400040 +537E:00007700557C5544774400447F440044FFC420443F440154014801400A400440 +537F:080073DE42524A524A524BD24A524A524A525BD26A124A9A125412B023104210 +5380:080008007F7C1C442A44494414442244494488442A441C542A48C94028401040 +5381:0808144822285C8888487F0E08F82A08490818087FFC01040114010801000100 +5382:00003FFE20002000200020002000200020002000200020002000400040008000 +5383:040004000FF0101020205FFC1000100010001000100010002000200040008000 +5384:00003FFE2000200027F024102410241024102450242024042404440443FC8000 +5385:00003FFE2000200020002FFE2040204020402040204020402040404041408080 +5386:00003FFE20002080208020802FFC208420842104210422042204440448289010 +5387:00003FFE2000201020F827802080208020FE3F802080208220824082407E8000 +5388:00003FFE200020002FFC20802080208020803FFE208020802080408040808080 +5389:00003FFE200020002FFE2100210021F821082108210822082208440848509020 +538A:00003FFE2000200027FE201022102210241027FE20502090211042104C508020 +538B:00003FFE200020802080208020802FFC2080208020902088208840805FFE8000 +538C:00003FFE200020802090208820802FFC20802140214022202220441048089006 +538D:00003FFE2000208020802FFC21002240244027FC204020404FFE404080400040 +538E:00003FFE20002000203C27C024402440244027FE242024202412450A46468422 +538F:00003FFE20002200220023FE2480248028FC3080208020FC2080408040808080 +5390:00003FFE20002220221022002FFC22402240224824502460484248C2933E2000 +5391:00003FFE200020202FA028A228A428A828B028A028A028A22FA248A2401E8000 +5392:00003FFE20002100210023FC2240244020403FFE204024442444444447FC8004 +5393:00003FFE2040204027FC204020402FFE20002040204027FC204040404FFE8000 +5394:00003FFE2000200027FC20802110220827FC2044204027FC204040404FFE8000 +5395:00003FFE20002F8428A428A42AA42AA42AA42AA42AA422242504448448949008 +5396:00003FFE241024083FFE249024A024C8249024A424C8249228E24982567EA000 +5397:00003FFE2080204027FC2000211020A02FFE2040204027FC2040404040408040 +5398:00003FFE200027FC2444244427FC2444244427FC2040204027FC404040408FFE +5399:00003FFE204020402FFC204027FC244427FC244427FC20402FFE404040408040 +539A:00003FFE200027F8240827F8240827F8200027F8201020202FFE404041408080 +539B:00003FFE2000200C2F70294029402940297E2948294829482F48408840888108 +539C:00003FFE2000203827C0204027FC224822482FFE224822482FFE4040404087FC +539D:00003FFE221022102FFC221022103FFE200027F82408240847F84408840807F8 +539E:00003FFE2120212021203F3E212021202F3C212021203F3E2120412041208120 +539F:00003FFE2080210027F02410241027F02410241027F020802490488852848100 +53A0:00003FFE20002F84288428A42FA428A42FA428A428A42FA42024490448949088 +53A1:00003FFE2080210027FC240427FC240427FC2040274421682250444859468080 +53A2:00003FFE22002200227C2F442244267C27442AC42A7C324422444244427C8244 +53A3:00003FFE20A020903FFE21402630380E2FF828882FF828884FF8488880800080 +53A4:00003FFE2000230C2E70221022103FFE2210273826B42A542A52529042108210 +53A5:00003FFE2000289025102FBE222222442A902A902F9022104228442884440882 +53A6:3FFE20003FFC210027F8240827F8240827F8240827F8220047F84A0881F01E0E +53A7:00003FFE20802FFC208027F8240827F8240827F8240827F824087FFE42108408 +53A8:00003FFE20083F8820082F08297E290829082F4820282908260843885C288810 +53A9:00003FFE20002F7E291029102F502950297E2F1028282A2829284B4A4D4A8886 +53AA:00003FFE21102FFE211021F0204027FC244427FC20402FFE204047FC40408FFE +53AB:00003FFE221022102F90221E2FA422243FD4241427942488248848944AA49142 +53AC:3FFE200027F8240827F8240827F8222027B02D2827FE380047F8440887F80408 +53AD:00003FFE20102F9428922F9028FE2F9020102F9028902F9028A84FA848C48982 +53AE:00003FFE2900290C3FB0292029202F3E29282F28292829285FA840488A881108 +53AF:00003FFE221022103FFE27182AB4325222102210208024442452441243F08000 +53B0:00007FFE420852484A504A9E5FE4505457545554554857485048515450948022 +53B1:00003FFE204020A0211022082DF6200027BC24A424A427BC211042A844448882 +53B2:00003FFE21102FFE211023F8224823F8224823F8204027FC245445F44414840C +53B3:1104088408883FFE20002710211E2FD424A427942494278824E85F9440A480C2 +53B4:3FFE28882F8A20082FBE28882F88289429A2200027FC244427FC444447FC8040 +53B5:3FFE20802FF828082FF844904A8881007EFE48905EBC52A45EBC48906AD49930 +53B6:0200020002000200040004000400080008401020101020107FF8200800080000 +53B7:020002000200FFFE0400040004400840088010801100221044088FFC04040004 +53B8:080808080808080808081010101010102020242424244242FEFE424202020000 +53B9:020002003FE002200220042004220822311EC10002000420081010083FFC1004 +53BA:010001000100FFFE0280044009203118C20602000420081010083FFC10040004 +53BB:0100010001003FF80100010001000100FFFE020002000400082010103FF80008 +53BC:020002000400082010103FF81108010009200910110821044104010005000200 +53BD:020002000400082010103FF80008101010101010202024244242FEFE42420000 +53BE:00007FF00410041004103F90041004107FD0041008101112208A7FCA00460002 +53BF:00001FF0101010101FF0101010101FF010101010FFFE0400082010103FF81008 +53C0:01000100FFFE01003FF8210821083FF8210821083FF80400082010103FF80008 +53C1:0200044008201FF002007FFC0820101027C8C00600000FE0000000003FF80000 +53C2:0200044008201FF002007FFC082010902308CC4601800610182000C007007800 +53C3:040008201FF0102024487EFC010006C018B0E30E0C403190062038C007007800 +53C4:040008201FF0102024487EFC010006C01830E00E0FE000001FF000007FFC0000 +53C5:040008201FF0102024487EFC010006C01830E20E02201290124822480A000400 +53C6:000E03F078440224010803FEFE42104013FE208028FC4544FD28421004680186 +53C7:00100210797C001400FE0014FB7C21922154413851544992F930490002FE0400 +53C8:00003FF01010101010200820082004400440028001000280044008203018C006 +53C9:00003FF01010121011200920082004400440028001000280044008203018C006 +53CA:00003FE008200820084008400CF80A080A080910111010A0204020A043188C06 +53CB:020002000200FFFE040004000FF00A1012101120214040808140062018186006 +53CC:00000000FDFC0484448444842888288810501050282028204450448881040202 +53CD:001000F83F00200020003FF8240824102210222021402080414042208C183006 +53CE:0400040045FC448444844484448844884C505450642044200450048805040602 +53CF:020002003FF0021002100210FFFE020002003FF010100820044003801C70E00E +53D0:00FC3F00010001007FFE0200040007F80A080A08111020A0404080A003180C06 +53D1:01001110110822003FFC0200040007F80A080908111010A0204040A003181C06 +53D2:00003FF000201E40018006601818E00400003EF8028822881450082034D8C306 +53D3:01000100FFFE01003FF8210821083FF801003FF010100820044003801C70E00E +53D4:080008000EFC084408440844FF440028082808284A1049108928084828841102 +53D5:00003EF8020822881450082034D0C30800003EF8028822881450082034D8C306 +53D6:0000FF8022FC22443E44224422443E442228222827A8FA104210022802440282 +53D7:0008007C3F88110808907FFE400280043FF0082004400280010006C01830E00E +53D8:02000100FFFE044014502448444400003FF0082004400280010006C01830E00E +53D9:0800080014FC22444144BE44084408287F2808282A1029104928884828841102 +53DA:00003E7C2204220422043E7C200020003EFC204420443E282010202820C42302 +53DB:1008101C95E0590011007DFC11441144FF441128112811102110222842448482 +53DC:020001007FFE4112912422C00430180CE0023FF010100820044003801C70E00E +53DD:100010FC108410847C941088108010FCFEA410A410A824A84290FEA842C40082 +53DE:00007F00417C41247F2440245F24402840287FA84410551094A8A4A814440882 +53DF:010005003978210821083D78210821083FF801003FF00820044003801C70E00E +53E0:1FE0044003800C407EFC22441C3862440000FFFE90121FF010101FF01010FFFE +53E1:10001F00107CFFA480A47F242A245528A2287F28A2903E1022283E2822443E82 +53E2:24481450FFFE08207FFC01003FF80100FFFE22003EFC22443E282390FE2802C6 +53E3:000000003FF820082008200820082008200820082008200820083FF820080000 +53E4:0100010001000100FFFE0100010001001FF0101010101010101010101FF01010 +53E5:0800080010001FF8200840089F8810881088108810881F881088000800500020 +53E6:00001FF01010101010101FF0020002007FF80208040804080808100820504020 +53E7:00001FF01010101010101FF0000000007FF8040804080808080810082050C020 +53E8:000000007DFC44444444444444444444444444447C4444840084010402280410 +53E9:000000FC7C8444844484448444844484448444847C9444880080008000800080 +53EA:00001FF01010101010101010101010101FF01010000008200810100820044004 +53EB:000400047C8444844484448444844484448C44B47CC444840004000400040004 +53EC:00007FF804080408080808081050202040009FF810081008100810081FF81008 +53ED:000000207920492049204920492049204920491079104A100208040808041002 +53EE:000000007BFE4820482048204820482048204820782048200020002000A00040 +53EF:00007FFE001000101F10111011101110111011101F1011100010001000500020 +53F0:0200020004000820101020087FFC200400001FF010101010101010101FF01010 +53F1:004000407C4044424444444844504460444044C07D40444200420042003E0000 +53F2:0100010001003FF82108210821083FF82108010011000900060005801870E00E +53F3:020002000200FFFE04000400080008001FF8280848088808080808080FF80808 +53F4:020002003FE00220042004220822301EC0001FF010101010101010101FF01010 +53F5:00007FFC40004000400047F0441044104410441047F04410400040007FFE0000 +53F6:0020002078204820482048204BFE482048204820782048200020002000200020 +53F7:00001FF01010101010101FF00000FFFE080010001FF000100010001000A00040 +53F8:00003FF8000800087FE8000800081F8810881088108810881F88108800280010 +53F9:000007F87A084A084A0849104910491048A048A07840484000A0011002080C06 +53FA:020001007880488048404840484048A048A048A0791049100208020804040802 +53FB:00400040784048404BFC48444844484448444884788448840104010402280410 +53FC:000003FC780448044804481448244844488449044A0478044804000400280010 +53FD:000001F0791049104910491049104910491049107A104A1202120412040E0800 +53FE:00003FF800600180010001000100050002001FF010101010101010101FF01010 +53FF:000000007DFC44204420442044204420442044207C2044200020002003FE0000 +5400:0008003C7DE0442044204420442047FE442044207C2044200020002000200020 +5401:000001FC782048204820482048204BFE48204820782048200020002000A00040 +5402:02000100FFFE1000100010001FF8000000001FF010101010101010101FF01010 +5403:00800080790049FE4A004C0049F8480848104860788049000202020201FE0000 +5404:040004000FE0082014402280410006C01830E00E1FF01010101010101FF01010 +5405:000000007EFC4284428442844284428442844284428442847EFC428400000000 +5406:00200020784048404884488449084BF849104810782048400088010403FE0102 +5407:000003F8780848104820484048404FFE48404840784048400040004001400080 +5408:010001000280044008203018CFE6000000001FF010101010101010101FF01010 +5409:010001000100FFFE0100010001003FF8000000001FF01010101010101FF01010 +540A:00001FF01010101010101FF0010001003FF82108210821082128211001000100 +540B:00100010781048104BFE48104810481049104890789048100010001000500020 +540C:00003FFC200420042FF42004200427E424242424242427E42424200420142008 +540D:0200020007F00810142062400280010006001FF8E8080808080808080FF80808 +540E:001000F81F00100010001FFE10001000100017F8140824082408440887F80408 +540F:01000100FFFE010001003FF82108210821083FF811000900060005801870E00E +5410:0040004078404840484048404FFC48404840484078404840004000400FFE0000 +5411:0200040008007FFC4004400447C4444444444444444447C44444400440144008 +5412:0008003C7BC04840484048404840487E4BC048407840484200420042003E0000 +5413:000007FE78404840484048404850484848444844784048400040004000400040 +5414:0020002078204920492C493449644BA449244934792849220122010200FE0000 +5415:00001FF010101010101010101FF0000000003FF820082008200820083FF82008 +5416:0000020279044888485048204820482048204820782048200020002000200020 +5417:000003F07810481049104910491049FC4804480478044BF40004000400280010 +5418:00800080788049FC49204A20482048204BFE4820782048200020002000200020 +5419:00400040784048404A444A444A484C50484048A078A049100110020804040802 +541A:000003F87888488848884FFE4888488848884BF8788848800100010002000400 +541B:00003FF804080408FFFE040804083FF8080008001FF81808280848088FF80808 +541C:000003F8788848884888488848884FF849084908790849080108010807FE0000 +541D:020001007FFC0820044003800C603018C0061FF010101010101010101FF01010 +541E:00003FF801000100FFFE0280044008203018DFF610101010101010101FF01010 +541F:0040004078A048A049104A884C46484048004BF8780848100010002000200040 +5420:004000507848484848404FFE4840484048A048A048A079104910020804040802 +5421:002002207A204A224A224A244BA84A304A204A207A204A2202A20322021E0000 +5422:01000080088848044812481287F0000000001FF810081008100810081FF81008 +5423:00000040F0209010909090809080928492829282F28294880088008800780000 +5424:0040004078A048A049104A084C06491049104910791049100110021002100410 +5425:000000007BFE48104810482048204868486448A479224A220420002000200020 +5426:00007FFC008001000300056009183104C10200001FF01010101010101FF01010 +5427:000003F87A484A484A484A484A484BF84A084A007A004A020202020201FE0000 +5428:0040004078404BFC48404A484A484A484A484BF87848484000420042003E0000 +5429:0010009078904888490849044A044DFA48884888488878884908010802280410 +542A:00A000A078A0492449244B284D304920496049A07920492201220122011E0100 +542B:01000100028004400A203118C1060FE0004000801FF01010101010101FF01010 +542C:0008001C79E049004900490049FE491049104910791049100110021002100410 +542D:0080004078404FFC4800480049F04910491049107910491202120212040E0800 +542E:00800080790049104A084FFC48044920492049207920492002220222041E0800 +542F:010000801FFC1004100410041FFC10001000100017FC24042404440487FC0404 +5430:00400040784048404BFE4840488048904890492079204A480244048401FE0082 +5431:0020002078204BFE48204820482049FC48844888784848500020005001880606 +5432:000403E478244824482449E4490449044A044BE4782448240024002401440084 +5433:000007E00420142017E0100010001FF001100110FFFE0280044008203018C006 +5434:00001FF0101010101FF0000000003FF801000100FFFE0280044008203018C006 +5435:004000407840494849444A424A424C4848484848781048100020004001800600 +5436:004000200020FBFE8A228A228A328A4A8A4A8A86FB068A0202020202020A0204 +5437:0040004078404BF848484848484848484FFE484078A048A00110011002080406 +5438:000007F87908491049104920493C490449044A887A884A500420045008880306 +5439:00800080788048FC490449084A404C40484048A078A049100110020804040802 +543A:000001F07910491049104A0E4C004BF849084910789048A0004000A003180C06 +543B:01000100790049FC4AA44CA448A4492449244A447C4448840104020404280010 +543C:001007D078504890491049104950499049104F107910491201120112050E0200 +543D:002000207920492049FC49204A20482048204BFE782048200020002000200020 +543E:00007FFC020002003FF0041004100810FFFE00001FF01010101010101FF01010 +543F:0100110011001FF8210041000100FFFE010001001FF01010101010101FF01010 +5440:000003FC78104910491049104A104BFE48304850789049100210041000500020 +5441:00400040788048FC49044A044884484448444814482478444984000400280010 +5442:00001FF010101010101010101FF0020004003FF820082008200820083FF82008 +5443:000003FE7A004A004AF84A884A884A884A884AA87A904A8204820482087E1000 +5444:00003FE00420047C0804101461080100FFFE010001003FF8200820083FF82008 +5445:0080004078404FFC4910491049104910491048A078A0484000A0011002080C06 +5446:00001FF01010101010101FF0010001007FFC03800540092011102108C1060100 +5447:010001047D880550092011102108C50602001FF010101010101010101FF01010 +5448:00001FF01010101010101FF0000000007FFC010001003FF801000100FFFE0000 +5449:000007E00420142017E0100010001FF000100010FFFE00000440082010102008 +544A:0100110011001FF8210041000100FFFE000000001FF01010101010101FF01010 +544B:0040004078404BFC4840484048404FFE484048A078A049100110020804040802 +544C:001001107890489048104910489048904810481E7BF048100010001000100010 +544D:0000000079FC4800480048004BFE48204820484078404888010403FE01020000 +544E:000001FC790449044904490449FC492449204920791049100208020804040802 +544F:000800687B8848884888488848884BFE48884888788848880108010802080408 +5450:0040004078404BFC4A444A444A444A444AA44A947B144A040204020402140208 +5451:001000F83F00010002007FFC044008203018C0061FF01010101010101FF01010 +5452:000003FC78404840484048404FFE484048A048A078A0492001220222041E0800 +5453:009000907BFE4890489048004BF8481048204840788049000202020201FE0000 +5454:00400040784048404FFE4840484048A048A048A0791049100288024804440802 +5455:000003FC7A004A084A884A504A504A204A204A507A504A880308020003FE0000 +5456:000003FE7A004A204A204A204AFC4A244A244A247A444A440484048409281210 +5457:000001FC79044904492449244924492449244924792448500048008401020602 +5458:00001FF0101010101FF000003FF82008210821082108210822C8043018086004 +5459:00001FF01010101010101FF0010001007FFC4104428444444824400440144008 +545A:004000407C40448044FE450846884488448844507C5044200050008801040202 +545B:0040004078A048A049104A084C0649F049104910795049200104010400FC0000 +545C:0020004079FC49044904490449144908490049FE7802480203FA000200140008 +545D:0040002079FC4904490449FC49004900497C49087910492001420282027E0400 +545E:000001FC780448044BF44804480449F449144914791449F40004000400140008 +545F:0080004078404BFE48404840488849084BF0482078404888010403FE01020000 +5460:00400040784048404FFC484048E048E0495049504A487DF44842004000400040 +5461:000003FC7A044A044A044BFC4A204A204BFE4A207A204A100212028A03060202 +5462:000003FC7A044A044A044BFC4A004A404A444A487A704A4004420442083E1000 +5463:000001F8790849484928490849084FFE4A084A887A484A0803FE000800500020 +5464:0040004078A048A049104A484C2648204BF848087810491000A0004000200020 +5465:0040004078404BF84A484A484BF84A484A484A484FFE7A084A08020802280210 +5466:002001207120522052FC54A4572451245224522474A447A400C4004400940108 +5467:0008003C7BE04A204A204A204A204BFE4A204A107A104A12020A028A03260212 +5468:00003FF8210821082FE8210821083FF8200827C82448244827C8400840288010 +5469:000001FC7800480048004BFE48204820492849247A244A220422002000A00040 +546A:000003FC7A044A044A044A044BFC4890489048907890491201120212040E0800 +546B:0020002078204820483E48204820482049FC4904490479044904010401FC0104 +546C:000000007BFC4A944A944A944A944A944A944A944A9C7B044A04020403FC0204 +546D:004802487A484A484A484FFE4A484A484A484A487A784A000200020003FE0000 +546E:0000000079FC4904490449044904490449FC4904780048900088010402020402 +546F:000001FC78204820492448A448A848204BFE4820782048200020002000200020 +5470:0440044024442758246024422F42F03E40001FF010101010101010101FF01010 +5471:0008003C7BD04A904A904A904A904A904A904A887A884AC802A404D404920800 +5472:0090009078904A904A924AD44A984A904A904A907A904A9203D20E12040E0000 +5473:0040004078404BFC4840484048404FFE48E0495079504A480444084200400040 +5474:00800080790049FC4A044C0449E449244924492479E449240004000400280010 +5475:000000007BFE4808480849E8492849284928492879E849280008000800280010 +5476:02000200E27CA224AFA4A4A4A4A4A4A8A4A8A928E510A2100528094810840102 +5477:000007FCF4449444944497FC94449444944497FCF44490400040004000400040 +5478:000003FC782048204840484048D049484A444C44784048400040000007FE0000 +5479:004000407A404A404BFC4A404C4048404FFE484078A048A00110020804040802 +547A:000001F879084908490849F848004BFE4880490079F848080008000800500020 +547B:0040004078404BF84A484A484A484BF84A484A487A484BF80248004000400040 +547C:0008003C7BE04820492448A448A848204BFE4820782048200020002000A00040 +547D:0100010002800440082037D8C00600003EF82288228822883EA8229000800080 +547E:0000000079FC49044904490449FC49044904490479FC49040000000003FE0000 +547F:00200020782049FC4820482048204BFE4820484078404888010403FE01020000 +5480:000001F879084908490849F849084908490849F8790849080108010807FE0000 +5481:01080108790849084FFE490849084908490849F8790849080108010801F80108 +5482:000003FE7A104A104A104AFE4A924A924A924A927A9A4A940210021003FE0000 +5483:0120012079204AA04AAC4EB44AE44BA44AA44AB47AA84AA202A20282027E0200 +5484:00200020792449244924492449FC4824482048207A224A220222022203FE0002 +5485:020001003FF8000008200440FFFE000000001FF010101010101010101FF01010 +5486:0080008079FC49044A044DF449144914491449F4790449280112010200FE0000 +5487:00000040782048284808488848904A944AA24AA27CC248880188028804780000 +5488:0090009078904BFC489448944BFC4A904A904BFE78924892011A011402100410 +5489:0040004078404BF84A484A484A484A484A484FFE784048A000A0011002080406 +548A:003803C07840484048404FFC484048E048E0495079504A480444084200400040 +548B:01000100790049FE4A804A804C8048F848804880788048FC0080008000800080 +548C:04000E007800087C0844FF44084418441C442A442A444844887C084408000800 +548D:002000207840488849044BFE4802480049FC4904790449040104010401FC0104 +548E:104010401E502248224454440840144023FEC0001FF01010101010101FF01010 +548F:00400020781049E0482248344BB848B048A848A8792849240224042200A00040 +5490:0088008878884908497E4B084D08494849284928790849080108010801280110 +5491:01000100793E49084FC849084908494849884F08790849080108010805280210 +5492:00007CF84488448844887CF8000000000FC0084008400840104010422042C03E +5493:000000007BFC4900490049F04910491049904A507A504A10021202920312020E +5494:004000407840487C4840484048404FFE48404840785048480044004000400040 +5495:00200020782048204BFE48204820482049FC4904790449040104010401FC0104 +5496:04000400F400943C9FA494A494A494A494A494A4F4A494A408A408BC12A42100 +5497:00400040784048404BFE48404880488048FE491079104A100210041001FE0000 +5498:0040004078404BFE488048A0492049FC4B244D24792449240134012800200020 +5499:00900088788848804BFE48A048A048A448A449287928493202220262049E0800 +549A:0080008078F849084B104CA0484048A04B184C0678C048200010018000600010 +549B:0040002078204BFE4A024C04480048004BFE4820782048200020002000A00040 +549C:0040002078204BFE4A024C04490049084910492079C049020102010200FE0000 +549D:0108010871085210529454A457BC510851085210742057BC000000000FFE0000 +549E:000003FC789048904890489048904FFE48904890789048900110011002100410 +549F:000003FE78204820484049FC49044904490449FC490479044904010401FC0104 +54A0:00001FF0101010101FF000007FFC10101FF010101FF01010103EFFD000100010 +54A1:000003FE79084908490849F84908490849F849087908491E07E8000800080008 +54A2:00003EF8228822883EF800003FF80000FFFE040008000FF00010001000A00040 +54A3:004000447A444948495048404FFE4890489048907890489201120112020E0400 +54A4:0040002078204BFE4A024C0448384BC048404840787E4FC0004000420042003E +54A5:000003FE78204840488849044BFE4822482048207BFE48200020002007FE0000 +54A6:00400040F7FE904097FC904493FC9240944097FEF04290AA00A4011002080C06 +54A7:00040004EFC4A214A214A3D4A254A454A654A554E894A0940104020404140808 +54A8:4080208009FC12042448E04020A023182C0600001FF01010101010101FF01010 +54A9:01040084788848004BFE4820482049FC482048207BFE48200020002000200020 +54AA:004000407A484948495048404FFE484048E0495079504A480444084200400040 +54AB:00003E7C22442244224422443E7C2A002828282428442442248242004180807E +54AC:00800040F04097FC900091109208940491109110F0A0904000A0011002080C06 +54AD:0020002078204BFE4820482049FC4800480049FC790449040104010401FC0104 +54AE:00200120792049FC49204A2048204BFE487048A878A849240124022200200020 +54AF:0080008078F849084B104CA0484048A049184A067DF849080108010801F80108 +54B0:0080008079FC49044A0449E44924492449E44924792449E40104000400280010 +54B1:0020004079FC49044904490449FC49044904490449FC79044904010401FC0104 +54B2:02080108791048004BFC4840484048404FFE4840784048A000A0011002080406 +54B3:00400020F02097FE90409084910893F090229044F18896100020005001880604 +54B4:0040004078404BFE4880489048904912495249547A904A280428004400840102 +54B5:002000207BFE4850488849044AFA48004BFE4840788049FC0004000400280010 +54B6:0008003C79E0482048204BFE48204820482049FC790449040104010401FC0104 +54B7:0090009078904A9249944898489049984A944C9278904890011201120212040E +54B8:0050004800403FFE204020402F44204420442F28292829122F32494A40868102 +54B9:0040002078204BFE4A024C4448404BFE48884888790848D00020005000880304 +54BA:000003FE7800480049FC4904490449FC4904490479FC49040000000003FE0000 +54BB:009000907890491049FE4B104D10493849384954795449920110011001100110 +54BC:00001FF0101010101F90109010907FFC400440044FE4482448244FE44004400C +54BD:000007FCF40494449444944497FC9444944494A4F49495140604040407FC0404 +54BE:0040004078444BF4484848504FFE4840488049844A987CE048820082007E0000 +54BF:0100017CF1249224922496FE9A2492249224927CF22492200220022002400280 +54C0:02000100FFFE000000001FF0101010101FF0028004440C283410C50806060400 +54C1:00001FF010101010101010101FF0000000007C7C44444444444444447C7C4444 +54C2:000007FE7890489048904BFC4A944A944A944A947A9C4B040204020403FC0204 +54C3:000003FC7A044A044AF44A044A044AF44A944A947A944AF40204020402140208 +54C4:01100110791049104BFC49104910491049104FFE780049100108020804040804 +54C5:01000100790049FE4A024A024D1248A24A4A4AAA7B1A4A0A03FA000200140008 +54C6:00800080F1F89210952090C0909093209C7C9084F10896900060004001800E00 +54C7:0020002079FC4820482048204BFE48004820482079FC48200020002003FE0000 +54C8:0040004000A0F8A089108A088C0689F4880088008BF8FA088A08020803F80208 +54C9:0840084808447F4408400840FFFE004000443E442228222A22123E2A22460082 +54CA:00400040F7FE9080910091FC9304950499FC9104F10491FC0104010401140108 +54CB:021002507250525C5F7452D4525452545254525C725053520E420442003E0000 +54CC:0008003CF7C09400941C95E09520952295249528F51095100508094409821100 +54CD:0040004078804BFC4A044A044AF44A944A944A947A944AF40204020402140208 +54CE:011001107BFC4910491048004A084A084910491078A0484000A0011002080C06 +54CF:000003F87A084A084BF84A084A084BF84A444A487A304A200210028803060200 +54D0:000003FE7A004A004BFC4A204A204AF84A204A207A204BFC0200020003FE0000 +54D1:000003FC78904890489048924C924A944A944A98789048900090009007FE0000 +54D2:001002107910491048FE48104B104928492449447942498201000280047E0000 +54D3:0080008078BC4BC04850482448D44B0C48004BFE7890489001120112020E0400 +54D4:01100112791449D8491049124952498E492048207BFE48200020002000200020 +54D5:002001247924492449FC4840484048FC49044A84784848500020004000800300 +54D6:0080008078FE49104A10481048FC4890489048907BFE48100010001000100010 +54D7:00900094791449184B104D324952490E492048207BFE48200020002000200020 +54D8:00800080793C4A004C804880497E4B084D084908790849080108010801280110 +54D9:0040004078A049104A084C0649F0480048004FFC784048800110020807FC0204 +54DA:000001F079104910491049104A4E4C404BFC484078E049500248044600400040 +54DB:00807C8844B044C444847C7C00000440082010102FE8C4260420082010A06040 +54DC:004000207BFE490448884850482048D84B064888788848880088010801080208 +54DD:00400040F04097FC948498889140914493489530F92091100108014401820100 +54DE:00400040789049084BFC48244920492049FC4A2078204FFE0020002000200020 +54DF:02200220F220943C95449F449284922494149F94F404900401840E0404280010 +54E0:00200120792049FE4A204C2048204BFE4800480079FC49040104010401FC0104 +54E1:00001FF0101010101FF000003FF820083FF820083FF820083FF8082010102008 +54E2:000003FE7820482049FC482048204BFE488848887BFE48880088010801080208 +54E3:000003FC7800480049F849084908490849F84800790848880090000007FE0000 +54E4:0110010879004FFE494849504964494849504A647A484A520462044209BE1000 +54E5:00007FFC00101F90109010901F900000FFFE00101F90109010901F9000500020 +54E6:002801A4F724912091209FFE9120912491A49328FD2891100112012A05460282 +54E7:0020002079FC4820482048204BFE48484848494C794A4A4A0088008801280210 +54E8:0020012478A448A8482049FC4904490449FC4904790449FC0104010401140108 +54E9:000007FCF444944497FC9444944497FC90409040F7FC9040004000400FFE0000 +54EA:00000FDE72525252525457D45258525452525FD27252525A0254045005500890 +54EB:000001FC79044904490449FC482048204920493C7920492002A00260043E0800 +54EC:0100010079FE4A044A044EF44A944A944A944A947AF44A940204020402140208 +54ED:00003C782448244824483C78000001100108FFFE01000280044008203018C006 +54EE:004000447BF4484848484FFE482048404BF849107A204DFE0820002000A00040 +54EF:000001FC7904490449FC4904490449FC4904490479FC4850009000920112020E +54F0:004000207BFE4A024C24492049FC49204A2048207BFE48200020002000200020 +54F1:002000207BFE482048204BFE4A024C0449F8481078204BFE0020002000A00040 +54F2:080C08F07E8008800EFE788808882908120800001FF01010101010101FF01010 +54F3:0208021C726052405FC05240527E52C853485E4872485248024802480A880508 +54F4:008000407BF84A084A084BF84A084A084BF84A407A444A280210028803060200 +54F5:000203E27A224A2A4A2A4BEA490A490A4BEA492A792A492A0222022204AA0844 +54F6:0088008878884B8E48884888480049FC482048207BFE48200020002000200020 +54F7:0008003C7BC048444A244928490048104BFE4810791048900090001000500020 +54F8:0008003C7BC048444A244928490048404BFE488879084B900060005001880604 +54F9:0008003C7BC048044A44492848004BF8481048204FFE78204820002000A00040 +54FA:00480044F7FE9040904093FC9244924493FC9244F24493FC0244024402540208 +54FB:000001FC790449FC490449FC4800480049FC482078204BFE0020002000200020 +54FC:004000207BFE480049F84908490849F848004BFC780848300020002000A00040 +54FD:000007FEF04097FC9444944497FC9444944497FCF24091400080014002300C0E +54FE:010400847888481049FC49044904490449FC48507850489000920112020E0400 +54FF:080008007F7C114411442544427C0000FFFE00101F90109010901F9000500020 +5500:001C01E0782048204BFE48A849244A2249F84888789048BE0102010202140408 +5501:004000207BFE4800480049FC4800480049FC4800780049FC0104010401FC0104 +5502:01100108F2049444904090A0911092089C0693F8F20892080208020803F80208 +5503:010001007BF84A084C104BFC4A444A444BFC4A447A444BFC0244044404540808 +5504:000001FC7904490449FC4904490449FC4904490449FC78004888008401020202 +5505:0040004078A049104A884C4649F04810482048407BF84A080208020803F80208 +5506:00400040788849044BFE4802488849444A4248F879884A500020005001880606 +5507:00003FFC20002FF820003FFE248824502530260E20002FF8480848088FF80808 +5508:000001F87908490849F848004BFC4A444A444A447BFC4A000202020201FE0000 +5509:00400080F110920897FC9104910093F8944090409FFEF04090A0011002080C06 +550A:0020002078204BFE482048204924492449244AAA782048500050008801040202 +550B:002000207850488849044AFA482048204BFE4820792849240222042200A00040 +550C:0004000E7BB8488848884928492E4BA848A84AA87AA8493E01000280047E0800 +550D:004000207BFE4A024C0449F8480048004BFE48907890489001120112020E0400 +550E:004200E27B82488A488A488A4FEA488A498A49CA7AAA4A8204820082008A0084 +550F:01840068783048C84B0448404BFE48A049204BFC7D2449240134012800200020 +5510:010000803FFE20802FF820883FFE20882FF820802FF82808480848088FF80808 +5511:00400040F24892489248955498E29040904097FCF0409040004000400FFE0000 +5512:00000FFEF0A090A097FC94A494A494A4951C9604F40497FC0404040407FC0404 +5513:002000207BFE482049FC4924492449FC4924492449FC78204BFE002000200020 +5514:000007FCF040904093F89088908897FE90009000F3F892080208020803F80208 +5515:0020004079FC4904490449FC4904490449FC482078204BFE0020002000200020 +5516:000003FC7890489048904BFC4A944A944A944A947BFC48900090009007FE0000 +5517:0020002079FC4820482048204BFE482048204920793C492002A00260043E0800 +5518:0000FEFC104420443E286210A2283E44228200001FF01010101010101FF01010 +5519:001008907510521255525954515851905310552879285128014801440A840502 +551A:000001FC780448FC480449FC48004BFE4A0249F8788848880050002000D80306 +551B:00400040F7FC904093F8904097FE908090F89108F31094A0004000A003180C06 +551C:010001007FFC01003FF8054009203118C10600003E442258226022423E42223E +551D:000001FC782048204BFE4800480049FC49044924792449240154008801040602 +551E:01040124791449144FC449244914495449864F3C790449040104010405040204 +551F:010001003FF801000100FFFE040008201FF000103E442258226022423E42223E +5520:008800887BFE488848004BFE4A024C4448404BFC784448840084010402280410 +5521:000003FE7850485048504BFE4A524A524A524AAA7AA64B0202020202020A0204 +5522:0020012478A448A8482049FC4904492449244924792449240050008801040202 +5523:0020004079FC4904490449FC4904490449FC48407840487E07C000420042003E +5524:01000100F1F0921094209BF89248924892489248F7FE90A000A0011002080C06 +5525:001004107A284A2848444992490849084AFE4E027A044A440228021002080008 +5526:00100210791049104C544A524A524890481049147E044A0802080210022000C0 +5527:000007BC74A454A454A457A454A454A454A457A47434552804A0056006200020 +5528:000007BC74A455245524563C552454A454A454BC76A4552404240424047E0400 +5529:001C01E0782048204BFE48A849244A4248404BFE7888490800D0003000480184 +552A:00400040F7FC904093F8908097FC911092489446F1F0904007FC004000400040 +552B:0040004078A049104A084C0649F0484048404BF878404A48014801500FFE0000 +552C:00400040787C48404BFC4A444A704BC04A444A3C7A004AF0049004920912120E +552D:008800887BFE4888488848F84888488848F8488878884BFE0000008801040202 +552E:090008800FFC10803FF850809FF810801FFC00001FF81008100810081FF81008 +552F:00A00090788049FE49104B104DFC4910491049FC79104910011001FE01000100 +5530:000207E27422542A57EA548A548A548A57EA56AA76AA5AAA0AA212E2008A0084 +5531:01F80108790849F84908490849F848004BFC4A047A044BFC0204020403FC0204 +5532:000000407B9C4A044A044B9C4A044A044BFC489078904890009001120212040E +5533:004000207BFC4A044A044BFC4A004A284A244BFE7A204A500250048805040A02 +5534:02080108F11097FC9040904093F8904090809FFEF1209120022002220422081E +5535:004000807BFC49104A484C464BF84A484A484BF84A487A484BF800420042003E +5536:0088008878884BFE488848884FFE480049FC4904790449FC0104010401FC0104 +5537:004000207BFE488049044BFE480249FC490449FC790449FC0104010401140108 +5538:0040004078A049104A884C4648004BF048104820784049240522050A090800F8 +5539:0108008878084FD44A144A224A004BC84A444A447A404A500248044405440880 +553A:0090009078904BFC4A944A944A944BFC4A944A944A947FFE4800009001080204 +553B:0040004078404FFC48404A484A484A484D5448E0795049500248044408420040 +553C:008000407BFC4800490848904FFE484048404FFE788849080090006001980604 +553D:01000106F138912097A09120913E932493A49564F52499240124012401240144 +553E:00100078F3C09040904097FC9248924897FE9248F24897FC0040004007FC0000 +553F:01000100F3FC9494989491249244948491289210F0409124052A050A08F80000 +5540:000003FE7A104A104AFE4A104A104BFE4A004A107A104AFE0210041005FE0800 +5541:000007FCF444944495F49444944497FC940495F4F514951405F4040404140808 +5542:00E80F08E228A928A548A008A7C8A088A108A108E1E8AF08010A010A050A0206 +5543:00200120793C492049204FFE48004BFC4A044BFC7A044BFC0204020402140208 +5544:000003FE7840488049444A2448684AB049304AA8786848A40122022000A00040 +5545:00200020783E482049FC490449FC490449FC492448207BFE4820002000200020 +5546:020001007FFC082004403FF820082448282837D82448244827C8200820282010 +5547:020001007FFC082004403FF821082FE8210827C82448244827C8200820282010 +5548:0020002079FC482048204BFE4888485049FC482078204BFE0020002000200020 +5549:011001107110511057BC51105110533853B85554755459920110011001100110 +554A:00000EFCEA08AA08AAE8AAA8ACA8AAA8AAA8AAA8EAE8AAA80C08080808280810 +554B:0008003C7BC048444A244928490048204BFE487078A848A80124022204200020 +554C:0040002078204BFE4A024C9449084A04480049FC782048200020002007FE0000 +554D:004000207BFE480049FC490449FC480049FC480878104BFE0020002000A00040 +554E:200021FE20203E2049FC8844084409FEFE00080008FC08840884088408FC0884 +554F:00007CF844887CF844887CF8400840084FC8484848484FC84848400840284010 +5550:00800040F7FC90009110911092A8944490009040F7FE90400040004000400040 +5551:002000207BFE482049FC48244BFE482449FC48207920493E012002A0027E0400 +5552:000003FE7A024A024BFE4A104A924A924A924AFE7A104A920292049204FE0802 +5553:104008403E7E228823483E5020204058418680001FF01010101010101FF01010 +5554:104808443E7E23C022243E282212206A418680021FF01010101010101FF01010 +5555:0100010079FC4A044D0449E44A8448844FF448847AA44AA403E4000400280010 +5556:00400244F244944890A091109608904490409248F248945000A0011002080C06 +5557:0080008078F849084A104C0048404B9C4A044A047B9C4A040204020403FC0204 +5558:00800040F7FE94029A04920093BC94A494A496A4F9349128022202220422081E +5559:04400440244427582460244224422F42F03E00003E7C2244224422443E7C2244 +555A:00001FF0101010101FF00100FFFE02003FF8200827C8244827C820083FF82008 +555B:002000207BFE482049FC48244BFE482449FC48407BFE488401C8003000CC0302 +555C:000007BC708452945108529454A45840500057BC70A452A40128029004A80846 +555D:000001807700511E51125FD2511253125392535275525512091E011201000100 +555E:000007FE7890489048904B9C4A044A044A044B9C789048900090009007FE0000 +555F:082004203F20213E214421443F4420A420283F283110511051289F2811440082 +5560:060C3870204020403F7E244824482448448881001FF01010101010101FF01010 +5561:00900090F090979E909090909090939C90909090F090979E0090009000900090 +5562:000003FE782048204BFE4A224A224B324AAA4AAA7B764A6602220222022A0204 +5563:0400040077DE5912511251125FD25112511255D27512551A05D41E1008100010 +5564:004000807BFC4A244A244BFC4A244A444BFC489079104FFE0010001000100010 +5565:0040004078A049104A084DF6484048404FFC484078404BF80208020803F80208 +5566:012001107110517E57805104514451C4512453247528512801080110057E0200 +5567:002000207BFE482049FC48204BFE480049FC4904792449240124005000880304 +5568:002000207BFE482049FC48204BFE480049FC490479FC490401FC010401140108 +5569:01100110F7D09110911091189FF4901291129110F7D09110011001D00E100410 +556A:021002107220527C5FC45244524452C4537C5E4472445244024402440A7C0444 +556B:004000447BF4484848504FFE4840488049F84B087D0849F80108010801F80108 +556C:010001007FFC010011100920FFFE00003FF8200827C8244827C820083FF82008 +556D:0210021072105FBC52105510557E57905120513C71C45F080528011001080104 +556E:00400040F27C9240924092409FFE900094449444F4A494940514040407FC0004 +556F:000003FE7A024A024BFE4A224A224AFA4A224A327A2A4BFE0202020203FE0202 +5570:000003FE7A524A524A524BFE4820484048FC49047A8848500020004001800600 +5571:002001247924492449FC480048004BFE4840488078FC49840284048400FC0084 +5572:0088008879084BDE4A524A624A424A524BCA4A4A7A424A42024203C202540008 +5573:00400248F15097FC908091009FFE921094089BF4F212921002500224020401FC +5574:01040088785049FC4924492449FC4924492449FC7820482003FE002000200020 +5575:00100410721052FE58925494549052FC52A454A47CA854A80490052805440282 +5576:004000207BFE4A024C0448004BFE482048204920793C492002A00260043E0800 +5577:0100009E7BD24A524A544BD44A584A544BD24A127A924A5A02D4035002100010 +5578:004000407BF848484FFE48484BF848404A484A487AE84B580248024804480848 +5579:000003FC7A044A044BFC4A204A204BFE4A204A207AFC4A840284048404FC0884 +557A:000001FC790449FC490449FC48004BFE490049FE7A4A4C920122024200940108 +557B:01003FF8082004407FFE41029FF411101150112001003FF8200820083FF82008 +557C:0040002079FC4800488848504BFE4A224C2449FC492479244934012800200020 +557D:004000A079104A084DF648004BF84A084A084BF87910491007FC011002100410 +557E:008801C877085108512A512A57AC514853085388755455140914012401240142 +557F:008800887BFE488848F8488848F8488848884BFE790049480184010001FE0000 +5580:004000207BFE4A02488048F849084A90486049987E0649F80108010801F80108 +5581:01FC0124792449FC4924492449FC482048204BFE7A224A2A02FA020A02020206 +5582:000003F87A484A484BF84A484A484BF848004FFE7A404A440228029003080206 +5583:00400040F7FC9040904097FC951494A495F49444F44495F40444044404540408 +5584:082004407FFC01003FF801007FFC11100920FFFE00001FF0101010101FF01010 +5585:000001FC790449FC490449FC4904484048204BFE780049040088000007FE0000 +5586:101010101010FEFE101010107C7C000000007C7C44444444444444447C7C4444 +5587:0104010477C45104511457D45554555457D45114739455540944010401140108 +5588:022002247BA84A304AA24B224A5E48804BFC4A047A044BFC0204020403FC0204 +5589:010001787108520852FE56405A40527C5290521072FE52100228022802440282 +558A:00140012701057FE5410541055D05412541255D47554554805DA042A08461082 +558B:0048014879484BFE494849484978490049FE48207BFE487000A8012406220020 +558C:00007EFC428442847EFC00001008110811085548532891082108210841088108 +558D:009000927AD44A984A924AD24F0E482048204BFE787048A80124062200200020 +558E:000001FC7904490449E4492449244BFE4A024AFA7A8A4A8A02FA0202020A0204 +558F:01080108F7FE91089148904097FE9080910093FCF50499040104010401FC0104 +5590:0100011E77F25112521453D4525856545BD25252725253DA02540250025002D0 +5591:008000407BFC4800490848904FFE480049F84908790849F80108010801F80108 +5592:0088008879EC492A4A284D484888497E4E0049FC7904490401FC0104010401FC +5593:000003FE785048504BFE4A524A524BFE480048404FFE78884990006000D80304 +5594:000003FC7A044A044BFC4A004BFC4A404A884BFC7A244A2005FC0420082013FE +5595:000007FE784048804BFC4A944A944AF44A944A947AF44A940294029403FC0204 +5596:010801087108510857BE510853085388557E55227922512201220122013E0122 +5597:000003FE7A2248204BFE482049FC492449FC492479FC482003FE002000200020 +5598:00400444F444944497FC90009FFE9040908097FCF4A494A404A404A404A4040C +5599:010001F8F20893F0901097FE90809144966890B0F128966800A4012206A00040 +559A:01000100F3F09410982097FC940494A495149444F0409FFE00A0011002080C06 +559B:003C07C07A44492848004BFC488048804FFE490079F84A880250042008D80306 +559C:01007FFC01003FF800003FF820083FF80820FFFE00003FF8200820083FF82008 +559D:000003F87A084BF84A084BF849004BFC4C444A447AA44A0403F4000400280010 +559E:008001007BDE4A524A524BD24A524A524BD248127A5A4B940210025001D00010 +559F:000003FE7A224BFE4A224BFE480049FC490449FC790449FC0104010401140108 +55A0:0008003C79E048204BFE482049FC492449FC492479FC482001FC002003FE0000 +55A1:0040004079FC48844BFE480049FC490449FC48207BFE4820022003FE00200020 +55A2:0004001E7BE0482048204FFE482048A04B2E4A227A224BAE0222022203FE0202 +55A3:0100010079FC4A044C0449E44924492479E44804002800102488224442448004 +55A4:0020004079FC490449FC490449FC48004BFE4820782049FC0020002003FE0000 +55A5:004000207BFE4A484A484BFE4A484A784A004AFC7A444A480228041004680986 +55A6:00001FF0101010101FF000007D7C454445447D7C01002108210821083FF80008 +55A7:004000207BFE4A024C0449FC480049FC490449FC790449FC0104000003FE0000 +55A8:00800040F7FE900093F8920893F8900097FE9402F9F49110011002120412080E +55A9:01C000A079104A084DF648004BCA4A4A4A544BD47A684A5403D4024A024A02C0 +55AA:010001007FFC01003D7825483D780100FFFE1200111010A010401430180E1000 +55AB:0080009E7BEA488A49CA488A4BEA489248A648207BFE48200050008801040602 +55AC:00F83F000200FFFE04400FE03458C7C600003FF8200827C8244827C820282010 +55AD:004000207BFC4800490848904BFE4A104A204AC87A104A2402C8041004600980 +55AE:00007EFC428442847EFC00003FF821083FF821083FF80100FFFE010001000100 +55AF:002000207BFE485048A849244AFA482048A848887BFE48880088008801080208 +55B0:0040004078A049104A884C464BF84A084BF84A087BF84A440228029003080204 +55B1:000007FEF40095FC9524952495FC9524952495FCF420942005FC0820082013FE +55B2:011001107210529E54A25F2251425212548A5FCA744250020A82094211540008 +55B3:00400040F7FC90E091509248944693F8920893F8F20893F8020800000FFE0000 +55B4:0014001277FE5410541057F05492549257D2555475545488054A0A1A08261042 +55B5:008800887BFE48884888480049FC49244924492479FC49240124012401FC0104 +55B6:2208111000207FFE400280041FF0101010101FF000003FF8200820083FF82008 +55B7:002001FC782048884BFE4888480049FC49044924792449240124005000880304 +55B8:012001107FFC01003FF821083FF821083FF8210800007C8844B044C47C84447C +55B9:00400040F7FC90A0911092489DF69040904097FCF000904003F8004000400FFE +55BA:0106017871105222524456F85A14522252FE5212721052540292031202500220 +55BB:004000A079104A084DF648004BC44A544A544BD47A544A5403D40244025402C8 +55BC:0080008079F84A084C104BFC480449FC48044BFC780448400124052A050A08F8 +55BD:0020012478A848204BFE48A849244A0248404FFE788849080190006001980604 +55BE:2208111000207FFE410291041FF021000100FFFE00001FF0101010101FF01010 +55BF:00001FF0101010101FF000007C7C444444447C7C01007FFC05401930E10E0100 +55C0:10001078FE4810487C480086FE0082FC00447C4400287C28441044287C444582 +55C1:0004001E7BF04A1E4A104AFE4A924A984AF24A8E7A804AB802A804AA054A0A86 +55C2:0008003C7BC048044A44492849FC4A2048204BFE782049240124012401FC0004 +55C3:004000207BFE480049FC490449FC48004BFE4A027AFA4A8A02FA0202020A0204 +55C4:07FC0080F3F8920893F8920893F8920893F89080F1F8931004A0004001B00E0E +55C5:004000807BF84A084BF84A084BF84A084BF8485078484FFE00A0011002080C06 +55C6:00400040F0A09190924897FE9A0893F8920893F8F20093F80508050809F80108 +55C7:010001007FFC111029284544FFFE00003FF8200827C8244827C820083FF82008 +55C8:012402487A4849244BF84A084BF848004BF84A487A484BF80202020201FE0000 +55C9:002000207BFE482049FC48204BFE4840488849F078244BFE0022012402A20040 +55CA:000001FC782048204BFE480049FC490449FC490479FC490401FC008801040202 +55CB:004001FC7844489449084BDE494A494A4A9449FC790449FC010401FC0104010C +55CC:02080108F110900097FC900091109208940493F8F2A892A802A802A80FFE0000 +55CD:0440025E7292501257D2511E55525552555257DE7152511202120222042A0844 +55CE:000001FE792049FC492049FC4920492049FE48027AAA4AAA02AA020200140008 +55CF:008800887BFE488848A84850488849244A2249FC782048A80124022200A00040 +55D0:004000207BFE4A024C2449FC482049FC48204BFE782049FC0104010401FC0104 +55D1:0020002079FC482048204BFE488049044BFE48027BFC4A940294029407FE0000 +55D2:01100110F7FC9110904090A09110920895F69000F00093F80208020803F80208 +55D3:03F00110F0E09318900097BC94A4931894A49040F7FC90E0015002480C460040 +55D4:00400040F7FC904093F8920893F8920893F89208F3F892080FFE011002080404 +55D5:000003FE7A004AFC4A004BFE4AA84A904AC84A867A084BFE0288044804080818 +55D6:0140065CF4449444975C9444944497FC904097FCF208911000A0004001B00E0E +55D7:000001FC790449E449244BFE4A0249FC490449FC790449FC0104010401140108 +55D8:001E03E0792248944840488849F0482048C449FE7822482003FE005000880306 +55D9:004000207BFC490848904BFE4A024C4448204BFC788048F80088010801280210 +55DA:0040008079FC4904490449FC490049FE490049FE78024AAA02AA040200140008 +55DB:0108009078004BFE48A04BFC48A44FFE48A44BFC78A049B002A80CA600A000A0 +55DC:0040004479F848504BFE484048F849824A7E4C0079FC490401FC010401FC0104 +55DD:00000FFEF00093F89208920893F8900097FC9514F4A497FC0444044404540408 +55DE:0084004478484BFE488448844908494A4A524B9C788449080108025203DE0042 +55DF:0108008878904BFC484049F848404BFE4880490079FC4A200420082003FE0000 +55E0:0E40F04022789288555000207C500888110610F81E88F0885088108850F82088 +55E1:0090008879044A424C8849FC480448004BDE48427A52494A02520042014A0084 +55E2:000001F87908490849F84908490849F848004BFC7A944A940294029407FE0000 +55E3:00003E7C220422043EF400047F045574555455547F5455545574550451144308 +55E4:00200124792449FC48204BFE4800482049FC4924792449FC0020002403FE0102 +55E5:00400080F3F8920893F8920893F8908097FC9110F24894440BFA004000400040 +55E6:00400040F7FC904097FC9484991893E090409088F7FC90440250044809480080 +55E7:10007E7812482A48457882800C6037D8C0063FF8248824883FF8248824A82010 +55E8:00800880E4FEA100AAFCA484A4A4A094A3FEA484ED24A51405FE040404280010 +55E9:0020012478A8482049FC4904490449FC490449FC4904790449FC000000880104 +55EA:00400040F7FC904093F8908097FC9110926895C6F04093F800E0015806440040 +55EB:000003FC790849F8490849F8490E4FF848084FBC78A44AA40128029004A80846 +55EC:01100110F7FE9110910092FE920896089AE892A8F2A892E802A8020802280210 +55ED:01007FFC01001FF010101FF010101FF010101FF01010FFFE00903EE422843E7C +55EE:000000FEEE28AA28AA28AAFEAAAAAEAAAAAAAAAAEAAEAAC20E820A8200FE0082 +55EF:000007FCF444944497FC944494A49514940497FCF04090240522050A090800F8 +55F0:020003FC752455245D2455FC5524552455745554755455540574050405FC0504 +55F1:00200050788849744A0248F8488848F8480C49F0782049FC002003FE00200060 +55F2:00900108F29490609198964690FC930890B090D0F73E90C20324001800600780 +55F3:000E03F078444A2449084BFE4A4248404BFE488078FC49440128021004680186 +55F4:010800907BFC4840484049F8484048404BFC48A078A848B4013C01220222041E +55F5:01FC0808E450A420A1FCA124BD24A5FCA524A5FCE524A524052C0A0011FE0000 +55F6:000001FC792449FC492449FC48A848A84BFE48A878A849FC002003FE00200020 +55F7:01080108710857D0511E579451245FD4521453D472545248024804D404240842 +55F8:08207F20087E7E4408A4FF2810101E282244468280003FF8200820083FF82008 +55F9:0020082075FE542051FC51245DFC552455FC542075FE542004200A2011FE0000 +55FA:002002227BFE4890488849FE4B104D1049FE4910791049FE0110011001FE0100 +55FB:004000207BFE4A004A484A484BFE4A484A484A487A784A000554052A0A2A1000 +55FC:008800887BFE4888480049FC490449FC490449FC78204BFE0050008801040202 +55FD:01080108F7C89108911E97D29564954097C89108F38895480954011401240142 +55FE:04200220723E5F4054A05420573C55505510551075FE5510052809280B441082 +55FF:004000A079104A484DF6482048404BF84A084BF87A084BF8020803F801100208 +5600:00800040F7FC911090A097FC944495F4944495F4F514951405F4040404140408 +5601:00140012701057FE5410549054D2549257F25494749455C80AAA089A11A60042 +5602:0040785E48524A524A524A527A5E02407A5E4AD24B524A524852785E48520040 +5603:002007FE742055FC542457FE542455FC542055FC752455FC052409FC0924112C +5604:010003F87A084BF84A084BF84A004BFE4A004BFE78424FFA0164065818460040 +5605:000007BE7488548857A854A854A857BE54105518749855A806AA044A00460080 +5606:01100110F7FE911091F0904093F8924893F89040F7FC90400FFE00A00110060C +5607:00800110F3F8921094A49FBE904290A093189C46F19096640188063001C00E00 +5608:00A000A077FE50A057FC54A457FC54A457FC500073F8520803F8020803F80208 +5609:0100FFFE01003FF800001FF010101FF00820FFFE10007F7C11442144457C8244 +560A:002002227A224BFE48004BFE4A204BFC4A204BFE7A004A2005FC04200BFE0000 +560B:02080248E748A290A29EAFE4A114A214AFD4A494E914A1C80F08011405140222 +560C:00000FFEE0A0A7FCA4A4A4A4A7FCA000A7FCA000EFFEA0400248044409420080 +560D:004003F8F2489FFE924893F8904093F8924893F8F0809FFE011000E003180C04 +560E:07FC00807BF84A084BF84A084BF84A084BF84910797C4F800090006201B20E0E +560F:100011DC11441144FD4411DC110011007DDC4514451445D445087D0845140122 +5610:000007BCF08494A4929494A490509188962690C0F31090640388003000C00700 +5611:0040007C78404BFE4A424A784BC44A3C4A084AF07B244AA805FE042008A00040 +5612:008803DE788849DC48884BDE488848004BFC4804780449FC0004000403FC0004 +5613:00000FFEE82AA826AFFEA822ABAAAAAAABAAA832E996AE2E084608820FFE0802 +5614:000003FE7A004A7C4A444A444A7C4A004AEE4AAA7AAA4AAA02EE020003FE0000 +5615:000007FCF040927892409FFE910091FC920093FCF00495540554080400280010 +5616:002003FE782049FC48204BFE480049FC490449FC790449FC010401FC00880104 +5617:111009207FFE50129FF4000020F03F0420041FFC00001FF810081FF810081FF8 +5618:0040007C78404BFE4A424A784BC44A3C4A004A507A544B5404D8045009FE0000 +5619:04100210E8FEA492A2FCA4A4ACA8A510A528A6C6E080AFFE0110032000E00718 +561A:0200027C7444597C5144527C56005AFC520853FE720852880248020802280210 +561B:00400020F7FE94909490949097FC949094D895B8F5B496D40892089010900090 +561C:004007FC7150515052E8544450E053585C46508071F8520804D0002000D00708 +561D:0204020477845494590C57C45564555457C45546757C57C405440544044408C4 +561E:0290029077D0529053BC511457D45554555457D4711457D40124012401540188 +561F:0200023EEF62A264A2A4AFE8A124A224A7A2ACA2F4A2A7B404A804A007A004A0 +5620:07FC0080F3F8920893F8920893F8920897FE94A2F89C97F00050002400D4030C +5621:0020012478A84BFE4A0248F84888488848F84820782049FC0020002003FE0000 +5622:000007DE7542555457C85544557E57CA510A510877C85108010801C80E280410 +5623:00400444744457FC500057BC54A454A457BC54A474A457BC04A404A40AB41148 +5624:00000FBEE8A2AAAAAAAAAAAAA514A8A2A080AFFEE110A21003A0006001980E04 +5625:021002107450595C5150525056FE5A0052105250725C525002B00290030E0200 +5626:3FF820083FF8101020085FF404403FF824483FF80400FFFE08201E4003C03C38 +5627:00800040F7FE9402989490509524954A98FA9300F04094440444044407FC0004 +5628:0040004077FC50445FFE504457FC5040555454E4744457FC04E409540A4C1044 +5629:008803FE7888480049FC48A848A84BFE48A848A879FC482003FE002000200020 +562A:000003FE7A524A524BFE480049FC490449FC490479FC490401FC008801040202 +562B:0110011479D24A504A7E4D5048904AA8492849447A444C82000802A402520452 +562C:000003F8F20893F8920893F890009FFE948097BCF494979404D40F88009400A2 +562D:0104010477E85110510057C4500457C85450544277C25444028400E80F100420 +562E:008802AA7ADC4C8849544A2248004BFE4A424C447BFC48440044008401140208 +562F:004003F8F04897FE904893F890409554975C9444F7FC9444075C055405540844 +5630:024802487554575C52485554575C52485FFE52207228522805140494042C0844 +5631:000007FCF40497FC940095FC942095FC952495FCF42097FE062A06FA0A0A1206 +5632:0200023C0FA4E224A224AFBCA8A4AFA4A8A4AFBCA224E224AFA402240244028C +5633:002001FC792449FC48204BFE480049FC490449FC790449FC010401FC00880104 +5634:00900294F2D8929292D2970E91F0921097FC9A44F3FC924403FC044404540808 +5635:0020002079FC48204BFE49084B9C490849884E3E78004BFE009000900112020E +5636:04800482E49CAFD0A490A790A49EA794A494A494EFD4A014051408A410240044 +5637:004001FC790449FC490449FC490449FC4820492478A84924002003FE00200020 +5638:0080008079FE4B544D5449544BFE4954495449544FFE78004954012A022A0000 +5639:00400040F7FC90A09514920897FC9A0A93F89208F3F890400248044409440080 +563A:003803C0F08097FE9110920895F6991091F09000F7FC940405F4051405F4040C +563B:004007FCF04093F8900093F8920893F891109FFEF00093F80208020803F80208 +563C:3E7C22443E7C00003FF821083FF821083FF80000FFFE00003FF820083FF82008 +563D:000003DE7A524A524BDE480049FC492449FC492479FC482003FE002000200020 +563E:000003FE78504BFE4A524BFE480049FC490449FC790449FC002003FE00200020 +563F:000007FCF444955494E4944497FC904097FC9040F0409FFE0000052404920892 +5640:000003DE7A524BDE4A104A5249CE480048884BFE7888488807FE008801040202 +5641:000007FEF0909090939C92049204939C90909090F7FE90400524050A090A00F8 +5642:01080090F7FE909093FC9294931C920493FC9204F3FC900807FE010800A80010 +5643:003C03E0792448A84BFE48A849244A0249FC4924792449FC0124012401FC0104 +5644:008003DE788A49CA488A4BD248A64840488849F078244BFE0022012402A20040 +5645:0004003EF7C09244912893F8920893FC920493FEF40296AA0AAA0A0210140008 +5646:000007BC7108552857BC531855AA5946500053F87208520803F80208020803F8 +5647:002001FC788848504BFE480049FC492449FC492479FC482001FC002003FE0000 +5648:04140212EF92A010A07EAF90A890A890AF90A228EB28AAA81228024A0A4A0486 +5649:00080788708851105FDE549454A4579454945794749454C807880C9400A400C2 +564A:000003FC784848304BFE485248944B5048204BFE7A524A8A0376025202720206 +564B:0208010877C85010579E549457A4501457945094711451C80708011405240242 +564C:02080110F00097FC9444955494E4944497FC9000F3F8920803F8020803F80208 +564D:01400120F3FE922096209BFC9220922093FC9220F22093FE0200052404920892 +564E:002003FE782049FC48004BFE4A0249FC480049FC790449FC0104008803FE0000 +564F:004000A0F11896E6900093F8920893F8900097BCF08494A4029404A402940108 +5650:00003E7C224422443E7C00003FFC010001007FFE00003E7C224422443E7C2244 +5651:0020004079FC490449FC490449FC4820492448A87924482003FE002000200020 +5652:0020012478A84BFE48A849244A224904490449DE7A444D54009E010402040404 +5653:0040007C78404BFE4A424A784BC44A3C4A004A507B544B5405DC04500BFE0000 +5654:002007A4F0A892929114920895F4980293F89208F20893F8020801100FFE0000 +5655:00F83F2009401FE010201FF010101FFC20042AA4400CBFF8200820083FF82008 +5656:00000FBEF208971C92089FBE904090A093189C46F02093F80008001000200040 +5657:00A004A4F2A890A097FC911090A097FC904093F8F04097FC00A0011002080C06 +5658:00000FFEE800AA28A948ABEEA892A884AAA0AAA8EBE8A8880894091409241242 +5659:004000A0F11092489DF690A0924892A893F89040F7FC9484052405F40414040C +565A:000003FC78044BFC48044BFC48004BBC49244FBC78084BFE0108008800A80010 +565B:00200020793C492049204FFE480048204AAA4A227BFE4A7202AA022203FE0002 +565C:010003F0F4109FFC944497FC944497FC90009FFEF00093F8020803F8020803F8 +565D:01080108E214A294A4BCAF08A110A224A4BEAF8AE088A02C0AAA0ACA08280010 +565E:00400040F0A09110920895F6980097BC94A494A4F7BC92100210052809441082 +565F:010000803FFE224824FE2D9036FC249024FC249024FE24804FFC48048FFC0804 +5660:001004107A7C481048FE48444E284AFE4A104A7C7A104AFE0210021005FE0800 +5661:010001F87A084FFE4A884B244BFE4A004AFC4A007AFC4A0002FC048404FC0884 +5662:00800100F7FC94449554944497FC94E495549404F04097FE00A0011002080C06 +5663:000003F87AA84AA84BF849004BFC4C844BE44AA47AA44BE4009407F400140008 +5664:01100110F7BC911093B895549912900093F89000F7FC90400248044409420080 +5665:009003FC7A944BFC4A944BFC48004BFC4A004AF87A004BFE0520051405480986 +5666:0020013C79204FFE481048144BFE4A104BF04A547A544AD40368044A08960322 +5667:008800887BFE488849FC492449FC492449FC48207BFE4A22022A02FA020A0206 +5668:00003E7C224422443E7C01200110FFFE02800C603018C0063E7C224422443E7C +5669:00007FFC01003D78254825483D7801007FFC01003D78254825483D780100FFFE +566A:03F80208F20893F8900097BC94A494A497BC9040FFFE91600250044818460040 +566B:008000407BFC490848904FFE48004BFC4A044BFC7A044BFC00400524050A08FA +566C:02100210F3DE95289884900097FC904092489248F248955408E200400FFE0000 +566D:0108020877C8545057DE546457D45214511457D4721453C802480454055408A2 +566E:000003FC7A944A944BFC48004FFE48004BFC4A047BFC48A2011403080D440182 +566F:003C03C070445224510857FE544252A4528A547A708050F8010802900060079E +5670:0040002077FE50285224527E54C85748517E524874C8577E01480248047E0840 +5671:0040007C78404BFE4A424A784BC44A3C4A004BFE7A404BA4025805B4045209B0 +5672:004000A0F3189DF6900097FC955494E497FC9000F3F8920803F8020803F80208 +5673:0020003E78204BFE4A224BF84A224AFE4A844AFC7A004AFC022005FE04480986 +5674:002001FC782048884BFE488849FC490449FC490479FC490401FC008801040202 +5675:211017FE108003F8F20813F8120813F8120813F8280047FE00003FF820083FF8 +5676:008803FE788849FC490449FC490449FC488049FE7A224D52010201FA000A0004 +5677:021001107790503E54A253445F9050105790549077A854A804A807C400440082 +5678:0200023EE208BFD0A23EAAA2AAA2AABEAAA2AFBEE222A22202BE030002140022 +5679:00400248F15097FE9402980493F8920893F89000F7FC944407FC044407FC0404 +567A:0200010277DC50105450529057DE5114511457D4711455940554092405240244 +567B:00800040F7FE95129BFC911097FC911097FE9110F24895F40842004007FC0000 +567C:00100008778854BE548054945788547E5408578876BE5A880A880B8812880008 +567D:0800FF0008FE7E1000107E3042387E542492FF1000107E10421042007EFE4200 +567E:004000207BFE4A8A49444A2249FC48884BFE480079FC490401FC010401FC0104 +567F:03DE00427A52494A4A5248204BFE4888488849547A22482003FE002000200020 +5680:004000207BFE4A224954494A4A3A480049FC49547BFE480001FC002000A00040 +5681:000003DE78424A52494A4A52489049084BFE4D1079FE491001FE011001FE0100 +5682:001007D0751057DE545057E8550457C4500053F872A852A802A802A80FFE0000 +5683:040002FE7AAA48AA48FE48104E544A924A104A547A924A100210050008FE0000 +5684:008803FE78A8489049FE4B2049FC492049FC492079FE490003FC00880070038E +5685:000007FCE040AFFEA842A358A040A358A000AFFEE040A7FC04A404A404A4040C +5686:010807FEF108902097FE900091F8910891F89000F7FE940205FA050A05FA0406 +5687:01100110711057BC511051105FFE52A852A856EC7AAA52AA02A805A804480898 +5688:00000FFEE808ABC8AA4CABCAAA48ABDEA808ABC8EA48ABD40A540BD40A5412E2 +5689:02840284EAA4A6C4A29EAFE4A004A454A28CAFE4E104A7C4010401C40E140008 +568A:008003F8F20893F8920893F8900097FC944497FCF44497FC00000FFE01100210 +568B:004007FC704053FC500057FE500253F8504057FE700057FE000807FE04A80798 +568C:0080004077FC511050A45F58555455525B585000720853F8020803F802080408 +568D:004003F8704857FE504853F8504057FE500052A4745253F802A802A80FFE0000 +568E:004007FEF00091F8910891F8900097FE940293F8F180964401B8066801A60E60 +568F:004007FCF04097FE94029BFC924893F8924893F8F00097FC02440278054008FE +5690:012400A87BFE4A8A48F8490C49F0490248FE480079FC490401FC010401FC0104 +5691:003C07C0F0409FFE904097FC955494E497FC9040F7FC90400FFE000005240892 +5692:0040002077FE548857DE548855DC56AA54885440748855F00420044809FC1084 +5693:0080004077FE54025A2453BC54A45AA8551052E874045BFA00400248044400C0 +5694:004007FC704057FE54025BFC524853F8524853F8710857FC02440278054008FE +5695:010003F074105FFC544457FC544457FC5524589273F8520803F8020803F80208 +5696:008803DE788849DC48884BDE48884BFC480449FC78044BFC004002A4028A047A +5697:03F80208F3F8920893F8911097FC91109FFE9110F248955400E00150024800C0 +5698:07FC0080E3F8A208A3F8A208AFFEA882A548A514E8F4A10003F8050800F00F0E +5699:00200120793C49204FFE48904A944B6C4A044BFC7A944A94036C020403FC0004 +569A:00003E7C22443E7C00003FFC21003FF820083FF821003FFC00003E7C22443E7C +569B:044404E4E8A8AAAAAEEEA4A4AAAAAEEEA242A040EFFEA0E0015002480C460040 +569C:01FC012479AC492449FC482049FC48204BFE49547A2A482001FC002003FE0000 +569D:0040002077FE548855FC548857FE542055FC552475FC552409FC088811040202 +569E:0100FFFE01007FFC00003FF820083FF81010FEFE10107C7C00007C7C44447C7C +569F:0090031EF12A97CA910A93929522995690889124F22294A8007001AC06220060 +56A0:020205E274A256AA552A566A510A528A544A5BAA710A57CA0122054201EA0E04 +56A1:05080508EFBEA508A708A208AFBEAA80AA88AF88E23EAF8802080208023E0200 +56A2:01007FFC11101FF00100FFFE94522FE844441FF004407FFC05081890EA600C18 +56A3:3EF822883EF80000FFFE01001FF01010111002C00C30700800003EF822883EF8 +56A4:002007FE748857DE548855DC56AA548C55F0542075FC542007FE082008A01040 +56A5:0110011077FC511051F0520852EA56AC52A852AA76EA5A06000002A402520452 +56A6:000007FE74445598548857DE548855DC56AA548874205520053C0920092017FE +56A7:0040007C78404BFC4A444BF04A444AFC4AA84AF87AA84AF8020005FC05540BFE +56A8:0210011077DE5010545E528257DE501057DE545077DE545007DE0450045204CE +56A9:04140412E9FEAA10B2FEBC92A4FEA892B2FEBE92E20481FE2A442A242024000C +56AA:03DE02527BDE4A524BDE4A424A7A4A8A4B124ADA7A8A4ADA028A02FA020A0204 +56AB:0400023CEFA4A024A8BCA524AFA4A23CA224AFA4E23CAB100A9812A80A2A0446 +56AC:0100013E750855D0553E55225FE2503E5122557E756255A208BE010002140C22 +56AD:0800FF7E08087E0800107E3442527E922410FF10007C7E44424442447E7C4244 +56AE:11002BDE4A5273D42A524BD27A1A12942350CA403FFC200427E4242427E4200C +56AF:07FC0040F7FE94429B5C9040975C912093FC9620FBFC922003FC022003FE0200 +56B0:004000207BFE4A484BFE4A484AEC4B5A4A484BFE7A204A7C02C40344047C0844 +56B1:010801EC710A57E8552855DE572854EA540A57EA740C57EC0A2A0BEA115607E2 +56B2:200011DCFD5401547DDC44007DFC01247DFC092411FC1C20F3FE102050202020 +56B3:3AB821083AB82288393822887FFE400291041FF02100FFFE00001FF010101FF0 +56B4:3E7C22443E7C00003FFE20002E20223C3FA829482F2829282F1049D07F288144 +56B5:01F0021077FC520453FC522453B8522251FE521077FC524403FC00D0014A063E +56B6:03DE02527BDE4A524BDE4A524BDE498C4A5248407FFE48880190006000D80304 +56B7:004007FCF00093B892A893B8911097FC911097FCF1109FFE012803100D480186 +56B8:00080FE8E928AB68A9AEA928AFE8A108AFE8A11EE112BFF200121552155E2012 +56B9:0820083CEE20B4FEA4A2A4B8BFE2A49EB582B5BCF5AAB79C18FF010801280210 +56BA:01FC095475FC5488505053FE5C4054A25534545875B45452059204500A2011FE +56BB:00007BDE489249124BD24A527A5E03C07A5E4BD24A524A524BD2781E49920240 +56BC:003C07C07244512857FC54A457FC5008578854FE778854A80798050805A80690 +56BD:011007D0711E57A451545FD45208539454A25BFC720453FC020403FC01080204 +56BE:008803FE78884BDE4A524BDE48A0489049FE49207BFC4D2001FC012001FE0100 +56BF:010807FE712853FE522057FC5A2053FC522053FE7080531C0204039C020403FC +56C0:02080208E27EAF88A23EAFAAAABEAFAAAABEAF8AE27EAF84027E02240214020C +56C1:03FC010879F8490849F8490E4FF848084FFE4A947B9C4A94039C02D607BC0084 +56C2:3EF822883EF80000FFFE02001FF010101FF010101FF0082010103EF822883EF8 +56C3:04140212EFA0A53EA564AAA4A03EA224AFA4A23EEB24AAA412A4023E0A200420 +56C4:04180214EF90A53EAAA8ADE8A8BEAFA8A228AFBEEAA8AAA80BA808BE0AA00920 +56C5:0000EEFEAA82AA82EEFE00A4FEA492FEFEA492A4FEFE10A8FEAA112411321220 +56C6:008803FE788849FC492449FC49244BFE4A2A4AFA7A2649FC012401FC002203FE +56C7:0FBE000077BC54A456B454A4504057FE54A057FC74A457FC051209DC091211CE +56C8:010807FE71085390513C57D452B4555C5396512273FC500007FE0080010403FE +56C9:000007FC74A454A457FC521052A854BE5F68523C74A85FBC00280AA80ABE0020 +56CA:01007FFC11101FF00100FFFE92921EF004403FF80440FFFE04880C503530C60E +56CB:052807BE794857BE531855AA594653FC520453FC720453FC020403FC01080204 +56CC:01100FFEE510A400AF06B138AF88AA88AABEAF88EA9CAF9A0028154815480008 +56CD:10101010FEFE10107C7C00007C7C44447C7C2828FEFE00007C7C44447C7C4444 +56CE:00440E28EAFEAA92AED6AABAAAFEAE00AA7CAA44EE44A07C0A440944117C0044 +56CF:281029FEFE1028FC380010FC7C8454FC7C4811FE7C0010FCFE84288444FC8284 +56D0:010801ECE10AAFEAA928ABC8A93EAFE8A948ABE8EA28AB680AA80BF40AB412A2 +56D1:07FC040477FC552454A8552455FC555455FC564475F4555409F4084413F40008 +56D2:011007FE711057BC54A457BC54A457BC544457FC755455F4044404E405540448 +56D3:008003DE788A49D248A64BD0489C48504BFE48507AAA4BFE025202AA03FE0002 +56D4:004007FC724853F850405FFE5AAA53B8511057FC71104FFE012803100D480186 +56D5:0790051E77A8548457BE552A57BE500053F8520873F8520803F800A00124061C +56D6:021007DEE928AFFEA912AFFEA228A444A9FEAF48E27EA5480F7E0048157E1540 +56D7:00007FFC4004400440044004400440044004400440044004400440047FFC4004 +56D8:00007FFC400440044FC44844484448444FC448044824482447E4400440144008 +56D9:00007FFC4004400440047F8440844084408440847F844084400440047FFC4004 +56DA:00007FFC4004410441044104410442844244444444244824502440047FFC4004 +56DB:000000007FFC444444444444444444444844483C5004600440047FFC40040000 +56DC:00007FFC400440044104410442044204444448245FF44814400440047FFC4004 +56DD:00007FFC400440044FE44044408441045FF4410441044104450442047FFC4004 +56DE:00003FFC2004200427E42424242424242424242427E4200420043FFC20040000 +56DF:0200020004007FFC40044824444442844104428444444824400440047FFC4004 +56E0:00007FFC40044104410441045FF441044284424444244814501440047FFC4004 +56E1:00007FFC4204420442047FFC444444444884468441044284444448247FFC4004 +56E2:00007FFC4004408440845FF4408441844284448448845084428441047FFC4004 +56E3:00007FFC4004408440845FF4408448844484448440844084428441047FFC4004 +56E4:00007FFC410441045FF44104492449244FE441144114411440F440047FFC4004 +56E5:00007FFC4004420441045FF44004400447C4444444444454483450047FFC4004 +56E6:00007FFC4004410441045D1445A445444924491451146504420440047FFC4004 +56E7:00007FFC40044444442448145014600447C4444444444444444444447FFC4004 +56E8:00007FFC40045FF440844104410443844544492451146114410441047FFC4004 +56E9:00007FFC400440044FE4400440045FF44204444448245FF4481440047FFC4004 +56EA:040008007FFC4004408448944514422445444884514442244C2440047FFC4004 +56EB:00007FFC4404440447F449544954525442944494491442A4444440047FFC4004 +56EC:00007FFC44444444444447C444444444444447C444444444444444447FFC4004 +56ED:00007FFC40044FE4400440045FF444844484448448944894507440047FFC4004 +56EE:00007FFC4504450449245944698449044F144914491448F4480440047FFC4004 +56EF:00007FFC400440045FF4410441044FE44104410441045FF4400440047FFC4004 +56F0:00007FFC4104410441045FF4410443844344452449145114410441047FFC4004 +56F1:040008007FFC4204420447F4481452244144408441444624580440047FFC4004 +56F2:00007FFC4444444444445FF44444444444447FFC44444444484450447FFC4004 +56F3:00007FFC40044104448442A45224484444444284410446C4583440047FFC4004 +56F4:00007FFC410441045FF441044FE441045FF4411441144154412441047FFC4004 +56F5:00007FFC41044104428444444824549C650446044424442443E440047FFC4004 +56F6:00007FFC400444444824511441044FE44104410441045FF4400440047FFC4004 +56F7:00007FFC400440E44F04410441045FF44304458449445124410440047FFC4004 +56F8:00007FFC400440045FF44104410449E44904490449045FF4400440047FFC4004 +56F9:00007FFC41044104428444444A24511C6FE4402440444284410440847FFC4004 +56FA:00007FFC410441045FF4410441044FE44824482448244FE4482440047FFC4004 +56FB:00007FFC40045FE4502450245FE451045FF4510450945454583440047FFC4004 +56FC:00007FFC42044204444448245FF440144FE4482448244FE4482440047FFC4004 +56FD:00007FFC400440045FF4410441044FE44104414441245FF4400440047FFC4004 +56FE:00007FFC4204420447E44C445284410446C4783C43044084460441847FFC4004 +56FF:00007FFC420442045FF444044FE4542467E4442447E4442444A444447FFC4004 +5700:7FFC400444444824521441045FF44404440447E44424482448A450447FFC4004 +5701:00007FFC41045FF440044FE440044FE440044FE448244FE4482440047FFC4004 +5702:00007FFC40044FE44204451459A442C444A459A4429444945A8441047FFC4004 +5703:00007FFC414441245FF441044FE449244FE449244FE44924496440047FFC4004 +5704:00007FFC40045FF442044FE444247FFC40044FE4482448244FE440047FFC4004 +5705:3FF00020064001807FFC444442845FF4410441047FFC4104410441047FFC4004 +5706:00007FFC40044FE448244FE440045FF45014511451145294444448247FFC4004 +5707:00007FFC4104428444444BA450144FE44AA44AA44FE44AA44AA448647FFC4004 +5708:00007FFC492445445FF442047FFC482457D4644C44C4442443E440047FFC4004 +5709:00007FFC410441044FE441045FF4444442844FE441045FF4410441047FFC4004 +570A:7FFC41044FE441044FE441047FFC40044FE448244FE448244FE4482448647FFC +570B:00007FFC40A440947FFC40845E94529452A45EA4405446B4591440047FFC4004 +570C:00007FFC4104511451145FF440047FFC41045FF452945294503440047FFC4004 +570D:7FFC42044FE444245FFC40044FE448244FE441045FF4410451045FFC41047FFC +570E:7FFC440448245FF440144FE448244FE448244FE448244FE4444448247FFC4004 +570F:00007FFC492445445FF442047FFC482457D4604C47C4442443E440047FFC4004 +5710:00007FFC40045FF4529452945FF441047FFC440447F44814505460247FFC4004 +5711:7FFC41245FF441044FE449244FE449244FE4492440445FF44844454440847FFC +5712:00007FFC41044FE441045FF440044FE448244FE4411446A45A4442247FFC4004 +5713:7FFC40044FE448244FE440045FF450145FF450145FF450145FF4444448247FFC +5714:7FFC41044FE441045FF4420444444FE440044FE44AA44AA45FF440047FFC4004 +5715:7FFC410441044FE441245FF441244FE441045FF448244FE448244FE440047FFC +5716:7FFC40044FE448244FE441047FFC41045FF4501457D454545FF440047FFC4004 +5717:7FFC420444444FE441047FFC42045FF4545457D4545457D454545FF440047FFC +5718:7FFC41045FF441044FE449244FE449244FE441145FF440445FF4484444C47FFC +5719:00007FFC4444482457D441044FE44AA44BA44AA44BA44AA44FE440047FFC4004 +571A:7FFC41044FE449244FE441045FF448244FE448244FE448244FE4444448247FFC +571B:7FFC40045FF452945FF441044FE441045FF4444442844FE441047FFC41047FFC +571C:7FFC40045FF452945FF440047FFC40044FE448244FE445144CA4744446247FFC +571D:0000FFFE800291129392A82ABBBA9012ABAAB83A8382AAAAABAA8002FFFE8002 +571E:FFFE9112A3A2B83A9392A82ABBBA8282ABAA8102BFFA854289229112FFFE8002 +571F:0100010001000100010001003FF80100010001000100010001000100FFFE0000 +5720:10801080108010801080FE80108010801080108016801884E0844084007C0000 +5721:0100010001000100010001003FF80100010001200110011001000100FFFE0000 +5722:1000100013FE10201020FE20102010201020102016201820E020402000A00040 +5723:00003FF0082004400280010006C01830E10E01001FF00100010001007FFC0000 +5724:10401040104010401040FE60105010481044104416401840E040404000400040 +5725:0100010001003FF8010001000100FFFE0440044004400440084408441044603C +5726:12001100108010801040FC40104010A010A010A011101D10E208420804040802 +5727:00003FFE200020802080208020802FFC2080208020802080208040805FFE8000 +5728:020002000400FFFE080008401040304057FC904010401040104010401FFE1000 +5729:100011FC102010201020FC20102013FE1020102010201C20E020402000A00040 +572A:10401040108010FE1100FE0010FC10081010102010401C80E102410200FE0000 +572B:1008103C13C010401040FE401040107E13C0104016401842E0424042003E0000 +572C:200021FC200020002000FBFE20802080210021FC20043804E004400400280010 +572D:010001003FF8010001000100FFFE0000010001003FF8010001000100FFFE0000 +572E:1000100011F810081008FC08100811F81108110011001D00E102410200FE0000 +572F:100011FC110411041104FD04110411FC1100110011001D00E102410200FE0000 +5730:1020102010201120112CFD34116413A41124113411281D22E122410200FE0000 +5731:00200C2070201020102011FC1020FE201020102010201020202023FE40008000 +5732:1008103C11E010201020FC20102013FE1020102010201C20E020402000200020 +5733:11041124112411241124FD24112411241124112411241D24E124422402040404 +5734:10401040108010FC1104FD04120414841044102410241C04E004400400280010 +5735:10401040104010401040FE40107C10401040104016401840E040404007FE0000 +5736:010001007FFC0280044008203118C10601003FF80100010001000100FFFE0000 +5737:100013FE104010401040FE40105010481044104416401840E040404000400040 +5738:10201020102010201124FD24112411241124112411241D24E12441FC00040000 +5739:10401020102013FE1200FE0012001200120012001E00E2004200040004000800 +573A:200023F0202020402080F90023FC21242124212422243A44E444488401280210 +573B:1008101C11E011001100FD0011FE11101110111011101D10E110421002100410 +573C:00003FF8200820083FF8200820083FF8010001003FF8010001000100FFFE0000 +573D:11001100110011FC12A4FCA410A41124112412441C44E0844104020404280010 +573E:100017F8110811101110FD20113C1104110412881E88E2504420045008880306 +573F:10201020105010501088FD04120210881088108810881C88E088410801080208 +5740:10201020102011201120FD20113C11201120112011201D20E120412007FE0000 +5741:1004101E11F011101110FD10111011FE1110111011101D08E10A414A01860102 +5742:1008101C11E011001100FDFC114411441144112811281D10E110422802440482 +5743:1000100011FC10001000FC0013FE10901090109010901C90E1124112020E0400 +5744:200021F0211021102110FA0E240023F821082110209038A0E04040A003180C06 +5745:10201020105010501088FD4412221020100011FC10041C08E008401000100020 +5746:104010401040108010FEFD08128810881088105010501C20E050408801040202 +5747:10401040108010FC1104FE04108410441044101410241C44E184400400280010 +5748:1000100013FC12041408FC0011F011101110111011101D12E2124212040E0800 +5749:10201020102013FE1020FD2411241124112411FC10241C20E0224022001E0000 +574A:10401020102013FE1080FC80108010FC1084108410841C84E104410402280410 +574B:10101090109010881108FD04120415FA1088108810881C88E108410802280410 +574C:0440082010102FE8C4260420082010A0614001003FF8010001000100FFFE0000 +574D:100011F8110811081148FD281128110817FE110811081D08E108420802280410 +574E:10801080108010FC1104FD0812401440104010A010A01D10E110420804040802 +574F:1000100013FE10101010FC2010201068106410A41D22E2224420002000200020 +5750:01001110111011101110292825244544810001003FF8010001000100FFFE0000 +5751:10801040104013FC1000FC0011F011101110111011101D12E1124212020E0400 +5752:2080208820B03EC0208020842684387C210001003FF8010001000100FFFE0000 +5753:0820082008207FFC08200820FFFE10202020412001003FF801000100FFFE0000 +5754:010001047D880550092011102108C5060200010001003FF801000100FFFE0000 +5755:00781FA01120112011201110211021084004010001003FF801000100FFFE0000 +5756:00003FF800000000FFFE044004420842303EC10001003FF801000100FFFE0000 +5757:10401040104013FC1044FC441044104413FE104010A01CA0E110420804040802 +5758:100017FE108010801080FCF8110811081108120813F81C10E010401007FE0000 +5759:00007FFE0888088811102220111008880888010001003FF801000100FFFE0000 +575A:040025FC2504248824502420245825860400010001003FF801000100FFFE0000 +575B:1000100011FC10001000FC0013FE10201020104010401C88E10443FE01020000 +575C:200023FE220022202220FA2022FC22242224222422443A44E484448409281210 +575D:100011FC110411041124FD24112411241124112411241C50E048408401020602 +575E:1020104011FC11041104FD0411141108110011FE10021C02E3FA400200140008 +575F:10801040104017FC1110FD1011101110111010A010A01C40E0A0411002080C06 +5760:00407C404440484044A044A0551049084204450201003FF801000100FFFE0000 +5761:20202020202023FE2222FA24222023FC2284228822483A50E220445004880906 +5762:10201020112410A410A8FC2011FC10201020102013FE1C20E020402000200020 +5763:01001110092001007FFE40028104010001003FF80100010001000100FFFE0000 +5764:10201020102011FC1124FD24112411FC1124112411241DFCE124402000200020 +5765:100011F8110811081108FDF811081108110811F811081D08E108410807FE0000 +5766:1000100011FC11041104FD0411FC11041104110411FC1D04E000400003FE0000 +5767:1000100013FE10201020FC40104010FC1184128414841C84E084408400FC0084 +5768:10401020102013FE1202FC04110011081110112011C01D02E102410200FE0000 +5769:110811081108110817FEFD0811081108110811F811081D08E108410801F80108 +576A:100011FC102010201124FCA410A8102013FE102010201C20E020402000200020 +576B:1020102010201020103EFC201020102011FC110411041D04E104410401FC0104 +576C:2008203C23D022902290FA90229022902290228822883AC8E2A444D404920800 +576D:100011FC110411041104FDFC110011401144114811701D40E1424242023E0400 +576E:10201020104010401088FD0413FE1002100011FC11041D04E104410401FC0104 +576F:100013FC102010201040FE4010D011481244144416401840E040400007FE0000 +5770:100011FE110211021102FD7A114A114A114A114A117A1D4AE1024102010A0104 +5771:10201020102011FC1124FD2411241124112413FE10201C50E050408801040202 +5772:10901090109013FC1094FC9413FC1290129013FE10921C92E11A411402100410 +5773:202021202120222022FCF4A4272421242224222424A437A4E0C4404400940108 +5774:010001003FF801000100FFFE08201010210841043FF8010001000100FFFE0000 +5775:1008101C11E011001100FD00110011FE1110111011101D10E110411007FE0000 +5776:200021F8210821482128F908210827FE2208228822483A08E3FE400800500020 +5777:2000200027FE20082008FBC8224822482248224823C83A48E008400800280010 +5778:10801080110011FC1204FC0411E411241124112411E41D24E004400400280010 +5779:10401020102013FE1202FC04100010901090109010881D08E108410402040402 +577A:105010481048104013FEFC80108010FC1144114411281D28E210422804440182 +577B:1008103C13E012201220FE20122013FE1220121012101E12E20A428A03260212 +577C:1008101C11E011001100FD0011FE11101110113011181D14E112421002100410 +577D:10201020105010501088FD241212101011FC100410081C88E050402000100010 +577E:10401020102013FE1202FC041000100013FE102010201C20E020402000A00040 +577F:2088208820882108217EFB08250821482128212821083908E108410801280110 +5780:1008103C13E010201124FCA410A8102013FE102010201C20E020402000A00040 +5781:10401040108010FC1120FE201020102013FE102010501C50E088408801040202 +5782:001000F83F00010001007FFC09200920FFFE092009207FFC010001003FF80000 +5783:108010401040100013FCFC00100811081108109010901C90E0A0402007FE0000 +5784:04400420FFFE0910112011C023044D0480FC010001003FF801000100FFFE0000 +5785:109010881088108013FEFCA010A010A410A410A811281D32E1224262029E0400 +5786:20402040207E20402040FBFC22042204220423FC22043A00E200440004000800 +5787:2000200023DE22522252FA52225222522272220222023A02E20243FE02020000 +5788:089008881080309E57E0908010441034110C01003FF8010001000100FFFE0000 +5789:1080108011FC11041204FDF411141114111411F411041D28E112410200FE0000 +578A:200023FC220422042204FBFC2220222023FE222022203A10E212428A03060202 +578B:00047F84122412241224FFA4122422042214410881003FF801000100FFFE0000 +578C:200023FE2202220222FAFA02220222FA228A228A228A3AFAE2024202020A0204 +578D:10201020104011FC1104FD04110411FC1104110411FC1D04E104410401FC0104 +578E:2080208021F822082510F8A0204020A023182C0623F83A08E208420803F80208 +578F:1020102011FC102413FEFC2411FC1020102011FC10201C20E3FE402000200020 +5790:4080208009FC12042448E04020A023182C06010001003FF801000100FFFE0000 +5791:2040204020FC21082290F86020482190263E204220843B48E030402000C00700 +5792:0400082010103FF80810102024487EFC0204010001003FF801000100FFFE0000 +5793:20402020202027FE2040F884210823F0202220443988E6104020005001880604 +5794:00007FFC044004403FF8244824483FF8010001003FF8010001000100FFFE0000 +5795:007C3F8020003FFE20002FF8280828082FF8208020802FFC40804080BFFE0000 +5796:1040108011F811081108FD0811F811001100110011FC1D04E104410401FC0104 +5797:10901090109012921194FC98109011981294149210901C90E11241120212040E +5798:10901094109211121110FF7E151011101110112811281D28E128414401440182 +5799:10201020112410A410A8FC2013FE10901090109010901C92E1124112020E0400 +579A:010001003FF8010001000100FFFE1010101010107CFC101010101E10F0FE4000 +579B:100011F0111011101110FD10124E144013FC10401CE0E1504248044600400040 +579C:100013F81088109010BCFD0411141248104017FE10401CE0E150424804460040 +579D:1040104010FC11041208FDFE1100117C1144114411541D48E1424242023E0400 +579E:2040202023FE22022000F83823C020402040207C23C03840E0424042003E0000 +579F:110410841088100013FEFC20102011FC1020102013FE1C20E020402000200020 +57A0:100011F81108110811F8FD08110811F81144114811301D20E110414801860100 +57A1:08A00890108030FC57809048105010241054118C160401003FF801000100FFFE +57A2:1008101C11E011001100FDFE11001100117C114411441D44E144427C02440400 +57A3:100013FE1000100011FCFD04110411FC1104110411FC1D04E000400003FE0000 +57A4:200027FE204020802110FA0827FC20442040204027FC3840E04040400FFE0000 +57A5:2040204020A02110FA08240623F82000200023F822083A08E208420803F80208 +57A6:00003FF020103FF020103FF0220821902C60311C01003FF801000100FFFE0000 +57A7:20402040208023FC2204FA0422F422942294229422943AF4E204420402140208 +57A8:1040102013FE12021414FC10101013FE1010111010901C90E010401000500020 +57A9:00007FFC04402448144814500440FFFE0000010001003FF801000100FFFE0000 +57AA:110410841088100011FEFC8810881088108813FE10881C88E108410802080408 +57AB:084008407DF808480C4819C8684A08AA2886110201003FF801000100FFFE0000 +57AC:108810881088108811FEFC8810881088108813FE10001C88E084410402020402 +57AD:200023FC209020902090F892249222942294229820903890E090409007FE0000 +57AE:2040204027FC20A02110FA082DF6200027FC208021003BF8E008400800500020 +57AF:101012101110111010FEFC10131011281124114411421D82E1004280047E0000 +57B0:10201020103E10201020FDFE1000100011FE102010281C24E022402000200020 +57B1:1020112410A410A410A8FC2013FC10041004100411FC1C04E004400403FC0004 +57B2:102011241124112411FCFC0011FC1004100411FC11001D00E102410200FE0000 +57B3:20802080213C22002480F880217E23082508210821083908E108410801280110 +57B4:20402020202027FE2000F800209022542224222422543A94E204420403FC0004 +57B5:10401020102013FE1202FC44104013FE1088108811081CD0E020405000880304 +57B6:1040102011FC10001088FC5013FE10201020102011FC1C20E020402000200020 +57B7:100013F81208120813F8FE08120813F81208120813F81D20E12042220422181E +57B8:1040102013FE12021404FDF81000100013FE109010901C90E1124112020E0400 +57B9:2100211E21122FD22114F91427D8211421122FD22112391AE214421004100810 +57BA:1008103C11C010041144FCA8100011F81010102013FE1C20E020402000A00040 +57BB:100011FC1104110411FCFD04110411FC1104110411FC1C00E088408401020202 +57BC:10F8208841088A06100031F850889050102010D8170601003FF801000100FFFE +57BD:200C11F08100490009FE1110E11022102210251001003FF801000100FFFE0000 +57BE:100011FC110411FC1104FDFC1000100011FC10201C20E3FE4020002000200020 +57BF:2040202023FE22002200FAFE22042228221023FE3A12E2144210041004500820 +57C0:00F83F000100FFFE01000924F93809223922C91E01003FF801000100FFFE0000 +57C1:102011241124112411FCFC20105010881144122210201DF8E008401000100020 +57C2:100013FE1020102011FCFD24112411FC1124112411FC1D20E0A0404000B0030E +57C3:204020802110220827FCF904210023F82440204027FE3840E0A0411002080C06 +57C4:210021F8230824902060F9982646204023F8204023F83840E7FC404000400040 +57C5:004078204BFE508048F84488550849284210410001003FF801000100FFFE0000 +57C6:1080108010F811081210FDFC1124112411FC112411241DFCE124422402140408 +57C7:100011F8100810D01020FDFC1124112411FC112411241DFCE12441240124010C +57C8:104010401088110413FEFC0210881144124210F81D88E2504020005001880606 +57C9:10201020102013FE1020FC2011241124112412AA10201C50E050408801040202 +57CA:0100210821083FF8000001047D88095011202518C20601003FF801000100FFFE +57CB:100011FC1124112411FCFD24112411FC1020102011FC1C20E020402003FE0000 +57CC:1040102011FC11041104FDFC1104110411FC112011221D14E108414401820100 +57CD:100010FC1084108410FCFC0011FE1102110211FE11021D02E1FE4102010A0104 +57CE:20282024202027FE2420FC20242427A424A424A824A83C90E692492A08461082 +57CF:2008201C277021102110FA50225C27502150255025503A7CE200450008FE1000 +57D0:100011FC100410FC1004FDFC100013FE120211F810881C88E050402000D80306 +57D1:080C08F07E8008800EFE7888088829081208010001003FF801000100FFFE0000 +57D2:1008103C13C010441224FD281100101013FE101011101C90E090401000500020 +57D3:1008103C13C011241098FC601390101013FE101011101C90E090401000500020 +57D4:2048204427FE20402040FBFC2244224423FC224422443BFCE244424402540208 +57D5:100011FC110411041104FDFC1000100013FE102010201DFCE020402003FE0000 +57D6:2108210827FE21082108F800209020922114231825103932E1524112010E0100 +57D7:101010101090109E1090FC9013FE10001010109210921D14E208401000600380 +57D8:200820082788248824FEFC88248827C824A824A824883C88E788448800280010 +57D9:200023F82208220823F8F800200027FC2404244424443C44E4B4410806041802 +57DA:200023F8220822082208FBF82040204027FC244424A43D14E614440404140408 +57DB:200027FC240424A42514FE0C240425F42514251425143DF4E514440404140408 +57DC:082008207EFC08301C682AA4C9220820092001003FF8010001000100FFFE0000 +57DD:20202020205020882144FA2221F820082050202020A43A82E28A428A04780000 +57DE:1040102013FE12021404FC0013FE102010201120113C1D20E2A04260043E0800 +57DF:20142012201027FE2010F81023D222522252225423D43808E0EA471A02260042 +57E0:1020104011FC110411FCFD0011FC110411FC10201C20E3FE4020002000200020 +57E1:200027FE209020902090FB9C220422042204239C20903890E090409007FE0000 +57E2:204022482150204023F8F88027FC2110220825F429123910E1504124010400FC +57E3:1040102013FE10001088FC88115412221000102013FE1C20E020402000200020 +57E4:2040208023FC22242224FBFC2224224423FC20903910E7FE4010001000100010 +57E5:1020102013FE102011FCFC2013FE100011FC110411FC1D04E1FC410401140108 +57E6:2040202023FE22022504F90021DE225222522352249A3894E11041120212040E +57E7:100011F81108110811F8FD0811F8110811F811081D08E3FE4000009001080204 +57E8:2040204020A021102208FDF6200027FC24A424A427FC3CA4E4A444A404140408 +57E9:1080108011F811081210FDFC1024102413FE102410241DFCE024402000A00040 +57EA:10401020102013FE1202FC9411081204100011FC10201C20E020402007FE0000 +57EB:2020212420A420A82020FBFE2202220222FA228A228A3A8AE2FA4202020A0204 +57EC:2040204027FC204023F8FA4823F8224823F8204020E03950E2484C4600400040 +57ED:2040204023F82048F84827FE2048204823F8244422E83950E248444601400080 +57EE:10201122112212241050FC8813041022102011241D24E2284050008801040602 +57EF:2040208027FE21102248FC4623F82248224823F822483A48E3F840420042003E +57F0:1008103C13C010441224FD281100102013FE107010A81CA8E124422204200020 +57F1:2100210021DC2114F114211427D42014211421143588E5484948011405140222 +57F2:1020102013FE102011FCFC4013FE10881124122210F81C20E3FE402000200020 +57F3:2080208020F82108FA1024002040239C22042204239C3A04E204420403FC0204 +57F4:2040204027FC20402040FBF8220823F8220823F822083BF8E20842080FFE0000 +57F5:2008203C21E020202020FBFE2124212427FE212421243BFEE020402003FE0000 +57F6:104010407C40104011F8FE480048454892C810487C68105A108A1C8AE1064202 +57F7:104010407C4011F81048FE48444829487CC8104810A8FEA8108A110A11061202 +57F8:100011FC110411FC1104FDFC1080108011FE124A144A1C92E122424200940108 +57F9:1040102011FC10001108FC90100013FE1000100011FC1D04E104410401FC0104 +57FA:082008207FFC08200FE008200FE00820FFFE082011102108CFE6010001003FF8 +57FB:1040102013FE100011FCFD0411FC100011FC10081C10E3FE4020002000A00040 +57FC:2040204023FC20A02110FA0827FE200823C8224822483A48E3C8400800280010 +57FD:200023F8200821F82008FBF8200027FE2442284423F83A48E248424802580040 +57FE:00007F7C22443E4422283E1023A8FE440282010001003FF801000100FFFE0000 +57FF:23F8120882084BF80A401248E27022442444253C09003FF801000100FFFE0000 +5800:100013FE1202120213FEFE1012921292129212FE12101E92E292449204FE0802 +5801:100011FC1124112411FCFD24112411FC102013FE10701CA8E124422200200020 +5802:0100111009207FFE40029FF4101010101FF0010001003FF801000100FFFE0000 +5803:102008107EFE10201E3C1224122422444A94850801003FF801000100FFFE0000 +5804:20002040239C22042204FB9C2204220423FC209020903890E09041120212040E +5805:7F7C48447F44414841287F30481048287F44008201003FF801000100FFFE0000 +5806:21402120212023FE2220FE202BFC2220222023FC22203A20E22043FE02000200 +5807:08200820FFFE08200FE001003FF821083FF801007FFC01003FF80100FFFE0000 +5808:200023FE2202228A2252FBFE2222222222AA22AA22AA3AFAE2024202020A0204 +5809:2040202023FE20802104FBFE200221FC210421FC210439FCE104410401140108 +580A:00007FFC04403C78200820083C780440FFFE010001003FF801000100FFFE0000 +580B:200023DE225222522252FBDE22522252225223DE22523A52E2524252055208A6 +580C:200027FC2444244427FCFC44244425F42514251425143DF4E514440407FC0404 +580D:2100210021F02210FA2027FC2A442244224423FC22A438B0E128422A0422081E +580E:2020202021FC20202020FBFE20882144224220F821883A50E020405001880606 +580F:0820081009FE7E40187C2C442A8448948908080001003FF801000100FFFE0000 +5810:100013FE1210121012FEFE10121013FE1200121012101EFEE210441005FE0800 +5811:100CFEF0208048807EFE08880E88F9084A08090801003FF801000100FFFE0000 +5812:100011FC1104110411FCFD04110411FC1000111211D41D18E11041520192010E +5813:102011241124112411FCFC0011FE1100117C111011101DFEE110421002100410 +5814:100013FE120212521088FD041020102013FE102010701CA8E124422200200020 +5815:00207BFE484048FC51844AFC488468FC5084418C01003FF801000100FFFE0000 +5816:21242248249022482124F880210027FC2404251424A43C44E4A4451407FC0404 +5817:1040102013FE12021088FD0412221028102413FE10201C50E050408801040202 +5818:204022482150204023F8F88027FC2110224824443842E3F84040004007FC0000 +5819:200027FC20A020A027FCFCA424A424A427FC20403840E7FC404000400FFE0000 +581A:100013FE1222102013FEFC2011FC112411FC112411FC1C20E3FE402000200020 +581B:200023FE200021FC2104F90421FC200023FE222222223BFEE222422203FE0202 +581C:1020102013FE102011FCFD2411AC1174112411FC10201C70E0A8412402220020 +581D:100011FC1104110411E4FD24112413FE120212FA1E8AE28A42FA0202020A0204 +581E:20902290229027FE2290FA9022F0220023FC204027FE38E0E15042480C460040 +581F:208020FC210421F82008FBFE204020A22334205820943B34E052409003500020 +5820:2100217821082208FAFE26402A40227C2290221022FE3A10E228422802440282 +5821:08000BF8120833F8504097FC115012481446114001003FF801000100FFFE0000 +5822:2100217C21442244FA44267C2A10221022FE223822543A54E294431202100210 +5823:11FC1124112411FC1124FD2411FC1020102013FE12221E2AE2FA420A02020206 +5824:100011FC1104110411FCFD04110411FC100013FE10201D20E13C412002A0047E +5825:00407F40127E0C88FF4819482A504820A850118C01003FF801000100FFFE0000 +5826:1110111211D411181152FD92112E104011FC110411041DFCE104410401FC0104 +5827:100013FE1020104011FCFD54115411541154112C1C20E3FE4050008801040202 +5828:100011FC110411FC1104FDFC108011FE1222112211521D02E1FA400200140008 +5829:2100213C21002100F9BC25642524253C252421242124393CE1244100017E0100 +582A:1088108813FE108810F8FC8810F81088108813FE11001D48E184410001FE0000 +582B:20002088225222222252FA8A220223FE20882144227A3888E150402000D80706 +582C:204020A02110220825F6F80023C42254225423D422543A54E3D44244025402C8 +582D:1020104011FC110411FCFD0411FC100013FE102010201DFCE020402003FE0000 +582E:100013DE1252125213DEFC0011FC100013FE108011001DFCE004400400280010 +582F:010001003FF80100FFFE08203EF808200E2078FC0000FFFE044008421042603E +5830:200023FE220022FC2284FAFC228422FC222023FE22483AC8E2304248028403FE +5831:100010FC7C8410841094FE88448028FC7CA410A410A8FEA8109010A810C41082 +5832:7E7C42447E4442447E44484444545A486240404001003FF801000100FFFE0000 +5833:200023FC2224222423FCFA0022FC2284228422FC22843AFCE484448408FC1084 +5834:200023F8220823F82208FBF820002FFE220023FC24943924E244448401280210 +5835:2040204423F42048F85027FE2040208021F82B08350821F8C108010801F80108 +5836:2040204023FE208021FCFA2025FE200021FC210421FC3904E1FC410401140108 +5837:2080204027FC20002208F9102FFE200023F8220822083BF8E208420803F80208 +5838:20002FF828082868FB88288828882BE82AA82AA83BE8E88A48AA10EA17262002 +5839:1008103C11E0102013FEFC2011FC112411FC112411FC1C20E1FC402003FE0000 +583A:23F82248224823F82248FA4823F820A02110220825163910E110411002100410 +583B:204013F890484FFE404813F82040E3FC20402FFE2040204001003FF80100FFFE +583C:080808087E0808FEFE0808487E2808080F28F01001003FF801000100FFFE0000 +583D:100013FE1252125213FEFC00100013FE10201020113C1D20E120412007FE0000 +583E:2040204027FC204023F8F88027FE2110220827FC3A0AE20843F80208020803F8 +583F:20142012201027FE2410FC1025D02412241225D425543D48E5DA442A08461082 +5840:200023FC2204220423FCFA002284224822FC224822483BFEE448444808881108 +5841:3FF821083FF821083FF8600C183006C01830610C01003FF801000100FFFE0000 +5842:2110211027FC2110F1102FFE2110220827F42A123210E3F04204020401FC0000 +5843:2108210827FE2148F82027FE2200220023FC200022483A48E248444A044A0846 +5844:200023FC229422942294FBFC2080204027FE208020F83888E108410802280410 +5845:208023382228222823A8FA462200227C23A4222422283BA8E610422802440282 +5846:2080204027FE2090FA942492200023F8200823F822003BFCE004400400280010 +5847:1040102013FE12021404FDFC100011FC110411FC11041DFCE104400003FE0000 +5848:00007DFC44207D2045FE7C5048525492650E01003FF8010001000100FFFE0000 +5849:204022482150224824A4F918260623F8220823F822083BF8E208420802280210 +584A:2020204023FC22242224FBFC2224224423FC204020A838B4E13C41220222041E +584B:08202AA42CA84920145022887FFE4002810401003FF8010001000100FFFE0000 +584C:200023F8220823F82208FBF82000200027BC208424A43A94E4A4408402940108 +584D:0020792448A8482049FC78404BFE488849247A224C2049FC482048204BFE9800 +584E:1040102013FE12021050FC88112410501088110412FA1C88E088408800F80088 +584F:102011241124112411FCFC0013FE100011FC110411041DFCE088405003FE0000 +5850:1020102013FE102011FCFC2013FE1040108811F01C24E3FE4022012402A20040 +5851:2200147CFF44087C4944497C7F4408441094210841003FF801000100FFFE0000 +5852:201020102710257C2510F51025FE2708250825FE25083548E728400800280010 +5853:100013FE1202100011FCFD0411FC110411FC10401C20E3FE4000008801040202 +5854:2110211027FC21102040F8A02110220825F6200020003BF8E208420803F80208 +5855:21202110220824862910FBF82008200027BC208424A43A94E4A4408402940108 +5856:203823C0204027FC2150F954275821542354254C20E03950E248444408420040 +5857:204010A0911042084DF6104027FCE040224824442942208001003FF80100FFFE +5858:2040202027FE242025FCFC2427FE242425FC242025FC3D04E504490409FC1104 +5859:1040102013FE100011FCFD0411FC100013FE12021EFAE28A42FA0202020A0204 +585A:200027FE2402280427FEF8802184224426A821303AF0E4A8412802240CA20040 +585B:200027FC20A020A027FCFCA424A427FC2040204027FC38E0E15042480C460040 +585C:200027FE240229F42000FBF820802144266820B03928E66840A4012206A00040 +585D:2040202023FC21082090FBFE22022444202023FC208038F8E088410801280210 +585E:020001007FFE44429FF404403FF80440FFFE082011102108DFF6010001007FFC +585F:0820FFFE082000007FFC08401F48625014621842E03E01003FF801000100FFFE +5860:2010242022F82288F88820F82E80228022FC228422843AFCE284450008FE0000 +5861:111811E2110210FE1000FCFC128412FC128412FC12841EFCE20043FE01080204 +5862:1040108011FC11041104FDFC110011FE110011FE1C02E2AA42AA040200140008 +5863:200013F8920842084BF8080017FCE04023F8204027FC01003FF801000100FFFE +5864:100011F81108110811F8FC0013FC120413FC120413FC1E04E3FC409001080204 +5865:200023FE200021FC2104F90421FC200023FE228A22523BFEE2224222022A0204 +5866:7C2045FE482051FC492445FC452455FC482043FE402001003FF801000100FFFE +5867:220821082110200027FCF80021102208240423F822A83AA8E2A842A80FFE0000 +5868:2090209023FC20902090F89027FE209021482244244A3954E14A424A01400080 +5869:2100210021FE220025F8F908210821F8200023FC22943A94E294429407FE0000 +586A:101E11E0102211121094FC80102011CE1102110211CE1D02E102410201FE0102 +586B:2040204027FC204023F8FA0823F8220823F8220823F83A08EFFE411002080404 +586C:200027FE2420244025FCFD0425FC250425FC25243C20E4A849240A2210A00040 +586D:100011F81108110811F8FD08110811F8100013FC12941E94E294429407FE0000 +586E:2084210423C4224423DEFA4423C42264225427D420C43944E244444401540088 +586F:204023BE221222922252FAAA2324204023FE222222223BFEE222422203FE0202 +5870:210011FC920045F84148112823FEE148222823FC205001203FF801000100FFFE +5871:10007E7C42447E7C42447E7C484444445A94610801003FF801000100FFFE0000 +5872:210021FC220025F82108F9F8210821F8200027FE21003BFCE4A4412402540088 +5873:2020247C228421482030F8CE2610227C2210227C22103AFEE210421005FE0800 +5874:20202222222223FE2000FBDE2252225223DE225222523BDEE2524252055A08A4 +5875:010000803FFE22203FFC22243FFC28402F7828422F3E20802FF840807FFE8000 +5876:2040202023FE22502250FBFE2252225223FE220022923AD4E298449204D2088E +5877:20202020203E20202020FBFE22022326228A225223263A52E28A432603FE0202 +5878:200023FE2200227C2244FA44227C220022EE22AA22AA3AAAE2EE420003FE0000 +5879:08047F7808407F40497E7F4849487F4808487F48088801003FF801000100FFFE +587A:010000803FFE221022102FBC231826B42A52208020802FFC408040809FFE0000 +587B:1088108813FE10881000FDFC110411FC110411FC1C20E3FE4050008801040202 +587C:102013FE102011FC1124FDFC112411FC102213FE1C08E3FE4108008800280010 +587D:2040204027FC20402554FA482554204025542248255438A0E0A0411002080C06 +587E:1040FE4000407DF844487C4800C87C4808AAFEAA1106520221003FF80100FFFE +587F:102011FC112413FE1124FDFC102011FC112411FC1C40E3FE408801D00070038C +5880:200027FC240427FC2420FCA8247024A8250424A03CFCE52044200BFE08201020 +5881:23F8220823F8220823F8F80027FC24A424A427FC20003BF8E11040E003180C06 +5882:100013FE105011FC1154FD5411FC100011FC100013FE1C20E0A8412402A20040 +5883:2080204023F82110F8A027FE200023F8220823F822083BF8E120412202220C1E +5884:20142012201027FE2410FC9024D2249227F224943C94E5C84AAA089A11A60042 +5885:7F7C49047F2849107F7E08127F1408100F50F02001003FF801000100FFFE0000 +5886:22A822A827FC22A8FAAA24E6280027FC2444204023F83A48E248424802580040 +5887:102011FC1088105013FEFC0011FC110411FC110411FC1C20E3FE402000200020 +5888:224822482FE8224823DEF24A23CA224A224A2FEA240A354AE632441207EA0044 +5889:202027FE242025FCF42427FE242425FC242025FC3524E5FC452409FC0924112C +588A:08207E2008F8FF2814287F6A082AFF560882010001003FF801000100FFFE0000 +588B:2040208821FC21082252FBFE20502188262620C023103864E388403000C00700 +588C:2040202023FE22002248FA4823FE2248224822483A78E2004554052A0A2A1000 +588D:10007EFC42107E9042907EFE001040287E2840484C8A710601003FF80100FFFE +588E:2200211E27D2201227D4FC5427D8201427D22092211239DAE714411005100210 +588F:0420247E24943D48043005C87C0825FE24882448441881003FF801000100FFFE +5890:1088108813FE108810F8FC2011FC112411FC102013FE1C20E1FC402003FE0000 +5891:2040202023FE20882050FBFE222222FA222222FA228A3A8AE2FA4202020A0204 +5892:2040202023FE20882050FBFE2252228A230622FA228A3A8AE2FA4202020A0204 +5893:04407FFC04401FF010101FF010101FF00400FFFE10102108CFE6010001003FF8 +5894:1020122213FE10901088FDFE1310151011FE111011101DFEE110411001FE0100 +5895:200027FC20402278F2402FFE210021FC220023FC3004E5544554080400280010 +5896:204020A0211022082DF6F00023F8220823F8200027FC3444E7FC444407FC0404 +5897:21042088200023FE2222FBFE2222222223FE200021FC3904E1FC410401FC0104 +5898:2110211021102FDEF12027C0245C27C4244827C83110EFD041220122011E0100 +5899:2040204027FC20402248F95027FE200023F8220822E83AA8E2E8420803F80208 +589A:22782128246C22AA202AF94822982040204027FC20E03950E2484C4600400040 +589B:200427C42444244427DEFC0425C42404241427EC3C84E4C44AA40A8414940188 +589C:00887C5045FC484050A24B5444B8675458924350402001003FF801000100FFFE +589D:2020202021FC202023FEF908239C21082188263E20003BFEE09040900112020E +589E:22082110200027FC2444FD5424E4244427FC200023F83A08E3F8420803F80208 +589F:2040207C204023FE2242FA7823C4223C2200225022543B54E4D8445009FE0000 +58A0:100013DE1252125213DEFC0011FC112411FC112411FC1C20E3FE402000200020 +58A1:1088105013FE102011FCFC2013FE112410A813FE10001DFCE104410401FC0104 +58A2:202423A820922514F2082C0427BA20A827C6240037BCE08440A8009005280244 +58A3:20A024A422A820A027FCF91020A027FC204023F83840E7FC40A0011002080C06 +58A4:204023F8224823F8F84027FE200023F8220823F822083BF8E20843F801100208 +58A5:102011FC1088105013FEFC0011FC112411FC112411FC1C20E1FC402003FE0000 +58A6:103C13E0112410A813FEFCA81124120211FC112411241DFCE124412401FC0104 +58A7:203823C0208027FE2110FA0825F6291021F0200027FC3C04E5F4451405F4040C +58A8:00003FF8292825483FF801003FF80100FFFE2448422401003FF801000100FFFE +58A9:221021102FD0201027BEFCA427D4201427942094211439C8EF08411405140222 +58AA:08407F40007E3E8823483E4800503E5004207F500888290411003FF80100FFFE +58AB:2108209027FE209023FCFA94231C220423FC22043BFCE00847FE010800A80010 +58AC:00403C78248828F030102BFE244025A4345829B4205221B001003FF80100FFFE +58AD:2028202423FE22202224FBA42298249025AA284623FA3AA8E2A842A80FFE0000 +58AE:00407BFC488051F8622055FC488848F8688850F8408841003FF801000100FFFE +58AF:104013FE188055F8522095FC108810F8108810F8108801003FF801000100FFFE +58B0:200023FE205023FE2252FBFE200021FC210421FC210439FCE02043FE00200020 +58B1:202027A420A822922114FA0825F4280223F8220822083BF8E20841100FFE0000 +58B2:2100210023FC26A82AA8F2A827FC22A822A822A82FFE3000E2A8425404540000 +58B3:102011FC1020108813FEFC8811FC110411FC110411FC1D04E1FC408801040202 +58B4:2110211027FC21102110F7FE204027FC244427FC244437FCE000411002080404 +58B5:100011FC102013FE1222FDAC102011AC100011FC1C00E3FE4040008801FC0084 +58B6:20102410227C201020FEF844262822FE2210227C22103AFEE210421005FE0800 +58B7:108813FE1088100011FCFCA810A813FE10A810A811FC1C20E3FE402000200020 +58B8:2108210827FE21082044FBF42048205027FE208021FC3B04E5FC490401FC0104 +58B9:200027BC24A427BC24A4FFBC240425F4251425F425143DF4E514440404140408 +58BA:2080210027FC24442554FC4427FC24E4255424043840E7FE40A0011002080C06 +58BB:2040204027FC2248FA4825542FFE200023F8220822E83AA8E2E8420803F80208 +58BC:0800FF7808487F4849867F0049787F480828FF9049287F4401003FF80100FFFE +58BD:221024102F9028902FBEF8A42FD4241422142FD424143788E48848940A941122 +58BE:0600F8FC4A8424FC3884CCFC36A2CA9412A86AC4048201003FF801000100FFFE +58BF:200027FC24A427FC2040FBF8204027FC211020A03BF8E0404FFE004000400040 +58C0:20102008278824BEF48024942788247E2408278836BEEA884A880B8812880008 +58C1:00407C2045FC44887C5043FE7C20A5FC24203D2001003FF801000100FFFE0000 +58C2:3F7821483F4820862A783F482A483F2820104A289146200001003FF80100FFFE +58C3:100013FE100011FC1124FDFC112413FE100011FC11241DFCE12441FC000003FE +58C4:000027882088FABE210877D86B5CA52A29482508220801003FF801000100FFFE +58C5:02000100FFFE104824FE799010FC22907CFC089030FEC08001003FF80100FFFE +58C6:0A803138228838382288393822887FFE4002810401003FF801000100FFFE0000 +58C7:20402FFE200027FC2404FDF4251427FC200023F822083BF8E20843F800000FFE +58C8:20402FFE200027FC2404FDF4251425F4240427FC20083BF0E0404FFE01500E4E +58C9:2040207C204023FE2242FA7823C4223C220023FE22403BA4E25845B4045209B0 +58CA:2020202027FE202023FEFA52225223FE2040202027FE38A4E1A84290048800C6 +58CB:20402248215027FE2402F80423F8220823F8200027FC3C44E7FC444407FC0404 +58CC:2080204027FE2110FA08251423F8211023F8211027FC3928E3104D4801860100 +58CD:420C2FB082204FA00ABE2FA84AA8CFA842285FA84248028801003FF80100FFFE +58CE:203C27C020402FFEF04027FC255424E427FC204037FCE0404FFE000005240892 +58CF:201027D0251027DEFC5027E8250427C4200023F822A83AA8E2A842A80FFE0000 +58D0:7FFC111021087FFCB55A292835582108355829283458201801003FF80100FFFE +58D1:08000F00087CFFA480A47F24492494A822107F28A2443E0201003FF80100FFFE +58D2:211027FC2110204023F8F84027FC2080211023F820003BF8E2A842A80FFE0000 +58D3:00003FFE288C2F8A28882FBE20082F8828882F94289429A2404047FC80401FFE +58D4:204027FC204023FC2000F7FE200223F8204027FE200037FEE00847FE04A80798 +58D5:204027FE200021F8F90821F8200027FE240223F829803644E1B8466801A60E60 +58D6:100011FC102013FE1222FDAC102011AC100013FE10201DFCE15441540154010C +58D7:204023F8204827FE2048FBF8204027FE200022A424523BF8E2A842A80FFE0000 +58D8:00001FF011101FF011101FF000003EF82AA83EF82AA83EF801003FF80100FFFE +58D9:2040202027FE248825FCFC8827FE242025FC25243DFCE52445FC040004880904 +58DA:2040207C204023FC2244FBF0224422FC22A822F822A83AF8E20045FC05540BFE +58DB:27BC24A427BC24A427BCFC8424F42514262425B425143DB4E51445F404140408 +58DC:11FC110411FC110413FEFC2013FE122211AC102011FC1C00E3FE4040008801FC +58DD:202029FC252421FCF82023FE2D0425FC250425FC25043DFCE48845040BFE1000 +58DE:208020402FFE200027FCFCA427FC224821502208244438A8E11043080D460180 +58DF:08407E7C2440FF7C00047E7C42407E7C42407E7C4242463E01003FF80100FFFE +58E0:2210211027DE2010245EFA8227DE201027DE245027DE3C50E7DE4450045204CE +58E1:10001F7C1024FFA480A87F102A285546A2107F10A2BC3E1022103E1022FE3E00 +58E2:200027FE244425982488F7DE248825DC26AA248824203520E53C4920092017FE +58E3:40445F444AAA4AEE4E44EAAA4AEE4E004A284AAA6BAA4EEE9A28022802480288 +58E4:204027FC200023B8F2A823B8211027FC211027FC3110EFFE412803100D480186 +58E5:27FE240025FC25AC2574FDFC242025FC242027FE3C00E554482009FC102003FE +58E6:21102FFE211027BC24A4F7BC2140212023FE222027FC3A20E3FC422003FE0200 +58E7:27BC24A427BC200027FEFC002590249E27D4256425D43D54E5D445680BC81054 +58E8:00003EF82AA83EF82AA83EF800003EF82AA83EF82AA83EF801003FF80100FFFE +58E9:27FC20402FFE28422358F5002FBC25242724223C2FA43AA4EFBC42241FA4024C +58EA:244428E82E0E24E4FA0A2EEE20A02AEA200023F820083BF8E20043FC00040038 +58EB:010001000100010001000100FFFE01000100010001000100010001003FF80000 +58EC:001000F83F000100010001000100FFFE0100010001000100010001003FF80000 +58ED:01000100FFFE010001007FFC000000003FF80108010801280110010001000100 +58EE:0820082008204820282028200BFE182028204820882008200820082009FC0800 +58EF:042024202420242024203C2007FE0420FC20242024202420242045FC44008400 +58F0:01000100FFFE01007FFC00003FF8210821083FF8200020002000400040008000 +58F1:010001007FFC010001001FF000007FFE40028004101010E01F08100810080FF8 +58F2:010001007FFC010001001FF000007FFE4002844404400440044008441044203C +58F3:010001007FFC010001001FF000007FFE400280040FE00820082010222022C01E +58F4:01000100FFFE010001007FFC00001FF0101010101FF0000008200440FFFE0000 +58F5:010001007FFC0100010001003FF8000010101010FEFE1010101010107C7C0000 +58F6:010001007FFC010001001FF000007FFE40028444044024481448145004407FFC +58F7:010001007FFC01001FF000007FFE444284443FF8244824483FF804400440FFFE +58F8:010001007FFC01001FF000007FFE4002BFFC04402448144814500440FFFE0000 +58F9:010001007FFC01001FF000007FFE40029FF400001FF010101FF008200440FFFE +58FA:010001007FFC01001FF000007FFE444284443C7820083C7804400440FFFE0000 +58FB:100013FE10221120113CFD2012FE140011FC110411FC1D04E1FC410401140108 +58FC:010001007FFC01001FF000007FFE4002BFFC04403C7820083C780440FFFE0000 +58FD:01007FFC01003FF80000FFFE00023FF00100FFFE00007FFC00107DFC44907C30 +58FE:0800087EFF40084008407E7C00447E44424442447E7C424024400F40F07E4000 +58FF:1088105013FE105011FCFF54118C1174110411FC1C0873FE2108008800A80010 +5900:01003FF801001FF001007FFC01041FF011101FF00100FFFE00083EFE22483E18 +5901:0100FFFE01003FF800007FFC44447FFC00003FF821082FE8210827C824483FF8 +5902:0400040004000FF008101010302048208440028001000280044008203018C006 +5903:00003FF00410042004200440047C04040BE4082409441084114422244C288010 +5904:1040104010401E40126022502248524494441440084008401440230040FE8000 +5905:040004000FF01820644003801C70E10E01001FF0010021003FF8010001000100 +5906:040004000FF01820644003801C70E10E1FF001001FF001007FFC010001000100 +5907:040004000FF01820644003801C70E00E1FF0111011101FF0111011101FF01010 +5908:040004000FF01820644003801C70E10E111009207FFC05400920111061080100 +5909:01000100FFFE04401450244848C4140027F0082014402280410006C01830E00E +590A:0400040004002FF028101010302048208440028001000280044008203018C006 +590B:0400082010103FF8000808201210220847E4082014402280010006C01830E00E +590C:010001003FF801000100FFFE1210220847E4882214402280010006C01830E00E +590D:100010001FFC20005FF090101FF010101FF004000FF01820644003801C70E00E +590E:010011101110292845443FF801000100FFFE08000FF01420224041800E60701C +590F:7FFC02001FF010101FF010101FF010101FF008001FF02820444003801C70E00E +5910:10001FE020207FF8A30824881FF010101FF010101FF008001FF0282007C0F83E +5911:210827C820086B9AB02C2388200853944A928BA204000FE0144003801C70E00E +5912:0000FFFE110013DC52545BD4525C53D05A52E3CE24084FE4944203801C70E00E +5913:17C0621C47C4444477DC444447C4745C47C4000024084FE4944203801C70E00E +5914:0440FFFE110013DC52545BD4525C53D05A52E3CE24084FE4944203801C70E00E +5915:020002000200020007F80408080810102410422001400080010002000C007000 +5916:10401040104010403E40226042504248A4441444084008401040204040408040 +5917:1000100010F81E8812882288228852888AA804900480088208821082207E4000 +5918:10001000107C1E4412442244224452448A440444044408540848104020404040 +5919:00003FF8200820082FE82208220827C8244828483488228A210A420A44068802 +591A:0200020007F008203840048003400C8071F802080C103220014001800E007000 +591B:00003FF0001000101FF000100010FFFE020007F008103420024001800E007000 +591C:02000100FFFE0880088010F81108314852289510111010A0104010A011181606 +591D:2020202021203D2025FC45204620A420142009FC082010201020202043FE8000 +591E:102010203F304128A224142208203020C02000003E442258226022423E42223E +591F:20202020407C7E4482A802107A204AD04A1E4A227A644A9402080210142008C0 +5920:102010203E40427EA4821902107A284ACF4A114A327A4A4A040208023014C008 +5921:101010103E1042FEA4101810107C2800CF00117C32444A4404440844307CC044 +5922:0820FFFE08203FF824483FF800007FFE420287F408103420024001800E007000 +5923:0100FFFE10103FF800003FF824483FF800007FFE44028FF4342002C007007800 +5924:02000FF0346003801D007FFE4002BFFC01003FF821083FF821083FF810102008 +5925:00207E204A7C4A447EA84A104A207ED0081EFF2218642C942A084A10882008C0 +5926:22202220FF7C22443EA822103E2022D0221EFF2240645494620840107E2000C0 +5927:01000100010001000100FFFE010001000280028004400440082010102008C006 +5928:100010001000200020007F80008001000100FFFE01000280044008203018C006 +5929:00003FF80100010001000100FFFE01000280028004400440082010102008C006 +592A:01000100010001000100FFFE0100010002800280044004400A2011102108C006 +592B:01000100010001003FF8010001000100FFFE028004400440082010102008C006 +592C:0100010001001FF001100110011001100110FFFE02800280044008203018C006 +592D:001000F83F000100010001000100FFFE0100028002800440082010102008C006 +592E:0100010001001FF011101110111011101110FFFE02800280044008203018C006 +592F:010001007FFC0280044008203018C10601003FF8020802080408080810506020 +5930:010001007FFC0280044008203018C44604400440044004400840084010402040 +5931:01001100110011001FF8210041000100FFFE010002800280044008201010600C +5932:010001007FFC0280044008203118C10601000100FFFE01000100010001000100 +5933:010001000100FFFE02800440082010102008CFE600000000000000007FFC0000 +5934:00800080088004802480108010800080FFFE010001400220041008083004C004 +5935:010001007FFC0280044008203018C10601000920091011082104410405000200 +5936:082008200820082008207EFE0820082008501450125012882088210442048402 +5937:01000100FFFE01003FF8010801083FF8210021003FFC0284044C08203018C006 +5938:010001007FFC0440082017D02008C0063FF8040008000FF00010001000A00040 +5939:0100010001007FFC0100111009200100FFFE010002800280044008203018C006 +593A:010001007FFC0280044008203018C0460040FFFE004010400840084001400080 +593B:010001007FFC01000280044008203018C0061FF010101010101010101FF01010 +593C:010001007FFC0280044008203018C92609200920092009201120112021204020 +593D:020002007FFC044008203018CFE6000000007FFC02000400082010103FF81008 +593E:0100010001007FFC01001110111011102928454402800280044008203018C006 +593F:010001007FFC0280044008203018DFF61110111011101FF0100410040FFC0000 +5940:00007FFC01000300056019186104000001000100FFFE0280044008203018C006 +5941:020002007FFC044008203018DFF610001220114010801140122010001FF80000 +5942:080008000FE0102020405FF09110111011101110FFFE0280044008203018C006 +5943:020002007FFC044008203018C0F63F00210021003FFC208020402A243114210C +5944:020002007FFC044009203118DFF6111011101FF0111011101FF40104010400FC +5945:020002007FFC044008203018C60638F82088228822882E8832A8249004800880 +5946:020002007FFC044008203018DFF6100010001FE0102010201FE0100010001FF8 +5947:010001003FF8028004400820FFFE001000101F90109010901F90001000500020 +5948:020002007FFC044008203018CFE6000000007FFC010011101108210445040200 +5949:010001007FFC01003FF80200FFFE044009203118CFE6010001003FF801000100 +594A:00800FF840805FFC40804FF840805FFC40007F0001007FFC028004401830E00E +594B:010001007FFC0280044008203018C0061FF0111011101FF0111011101FF01010 +594C:0100010001FC010001001FF0101010101FF0010001007FFC028004401830E00E +594D:0100111009203FF8020002007FFC082010102448C44604400840084010402040 +594E:020002007FFC044009203118CFE6010001007FFC000001003FF801000100FFFE +594F:010001007FFC01003FF80200FFFE0440082037D8C1061FF0010002C00C303008 +5950:080008001FE020204040BFF822882448282821080100FFFE028004401830E00E +5951:080008007F7C08243E2408247F44085409880100FFFE0280044008203018C006 +5952:020002007FFC04400A203118DFF6040008401F8001100620384001A00E107008 +5953:020002007FFC044008203218C7E618400580068039F80610192000C003003C00 +5954:020002007FFC044009203118CFE60100092008207FFC08200820102010202020 +5955:020001007FFC0440245044488944108001000100FFFE0280044008203018C006 +5956:0840484028FC09041A8828504820884009800100FFFE0280044008203018C006 +5957:010001007FFC028004400FF03418C7E6040007E00400FFFE040008101FF80008 +5958:2420242024203DFC0420FC20242024F845000100FFFE0280044008203018C006 +5959:040008201FF00210FFFE08203118DFF611101FF011101FF40104010400FC0000 +595A:00FC7F002208151008401F8003200C103FF8010801007FFC028004401830E00E +595B:020002007FFC044008203018C0063CF824883CF8248824F83C88248801280210 +595C:044004407C7C04403C7804407C7C044005400100FFFE0280044008203018C006 +595D:020002007FFC044008203FF8D11617D011101FF0101017D0245027D040108030 +595E:020002007FFC044008203018C90608801FFC30805FF890801FF810801FFC1000 +595F:020002007FFC044008203E78D24E12481E78124812481E78124822882AA84510 +5960:08200440FFFE04403FF82848303827C820083FF801007FFC028004401830E00E +5961:7FFC02001FF010101FF010101FF010101FF00200FFFE08203458C44608401040 +5962:020002007FFC044008203218DFD60220FFFE03000FF03810CFF008100FF00810 +5963:00003FF802007FFC04401830E00E3CF8248824F83C8824F824883C8801280210 +5964:020002007FFC044008203FF8C10602003FF8244827C8244827C824483FF82008 +5965:020004003FF82008292825482FE82548292820080100FFFE02800C603018C006 +5966:00407EFC15440838FE441AA22CFC4844A894110801007FFC028004401830E00E +5967:020004003FF820682FA825482FE823482528280801007FFC02800C603018C006 +5968:083E4BC42A48292008081BFE2908C8880828091001007FFC028004401830E00E +5969:02007FFC04201818E0063FF8200027F0241027F020002F7829482F7820003FFC +596A:02007FFC04201898E8461FF830805FF810801FF810801FFC1020FFFE08200460 +596B:020002007FFC044008203018C14625481778840847F814082778E54825482808 +596C:0440247C24A83D5004287DFE2488444885180100FFFE0280044008203018C006 +596D:01000100FFFE01007D7C11107D7C45447D7C45447D7C0280044008203018C006 +596E:02007FFC04201818E9061FF831005FF891001FFC10003FF821083FF821083FF8 +596F:02007FFC04201918E9E609007FFC00283FFE20202FA422282A90532A46469882 +5970:00003FF824483FF80000FEFEAAAAAAAAFEFE010001007FFC028004401830E00E +5971:210447C88812F3BC20084B92F83E0380AAAAABAA01007FFC028004401830E00E +5972:100010EEFEAA28AA44EE90007AFE1492FEFE10927CFEC4107DFE44107C104410 +5973:02000200020002000400FFFE0420082008201040184006800180066018106008 +5974:1000100011FC1084FC8424842488248824504850282010202850448881040202 +5975:1000100013FE1020FC2024202420242024204820282010202820442084A00040 +5976:1000100013F81088FC90249024A024BC24844884290411042904460482280410 +5977:1008103C11E01020FC202420242027FE24204820282010202820442084200020 +5978:100011FC10201020FE202220222023FE42202420142008201420222042208020 +5979:1020102010201120FD2C2534256427A425244934292811222922450284FE0000 +597A:10801080108010F8FD0825082510261024204820285010502888450882040402 +597B:1020102010201020FEFE22442244224442442484144808281410222842448082 +597C:1010103811E01020FE2022202220223E43E024201420082214222222421E8000 +597D:100010FC10041008FC102420242025FE24204820282010202820442084A00040 +597E:1020102010201020FD242524252425242524492429241124292445FC80040000 +597F:20402040204023FEFC88248825082490645024203450248A2502440243FE8000 +5980:00400040FC40044007FE048804887C8840884108409044505820605040880304 +5981:10401040108010FCFD0426042404250424844844284410042804440484280010 +5982:100010001000107CFE4422442244224442442444144408441444227C42448000 +5983:1000100011F81008FC082408240825F825084900290011002902450284FE0000 +5984:02000100FFFE100010001FF802000200FFFE042008201E400180066018186004 +5985:1000100011FC1020FC2024202420242024204820282010202820442083FE0000 +5986:08400840084048402BFE28880888088818882908C89008500820085008880B04 +5987:1000100011FC1004FC042404240425FC2404480428041004280445FC80040000 +5988:100013F010101010FD102510251025FC24044804280413F42804440484280010 +5989:10201020102011FEFD222624242024202450485028501050289044928512020E +598A:1008103C11E01020FC202420242027FE24204820282010202820442085FC0000 +598B:1020102010201020FDFC24202420242027FE4820285010502888448885040202 +598C:1088108810881088FDFC24882488248827FE4888288810882888450885080208 +598D:100013FE10881088FC882488248827FE24884888288810882888448881080208 +598E:1020102010501050FC8825042602248824884888288810882888450881080208 +598F:10401020102013FEFC8824882488248824884850285010202850448881040602 +5990:1010109010901088FC882524252426222420484028481044288445FE84820000 +5991:1000100011FC1124FD2425242524252425FC4900290011002902450284FE0000 +5992:10401020102011FEFD022502250225FE25024900290011002A00460084000800 +5993:10201020102013FEFC202420242025FC24844888284810502820445081880606 +5994:10801040104013FCFC00240025F02510251049102910111229124612820E0400 +5995:1020102010201020FDFC252425242524252449FC292410202820442084200020 +5996:1008103C11E01020FC20242025FE242024204850285010502888448881040202 +5997:1020102010501050FC88254426222420240049FC280410082808441084100020 +5998:1000100010FC1000FC00240025FE24202420484028401088288445FE84820000 +5999:10201020102010A8FCA424A22522252026244824282810082810442080C00300 +599A:1000100011FE1010FC1024202420246824A449222A2210202820442084200020 +599B:01002108210821083FF801000100FFFE02000200FFFE08201C4003800C707008 +599C:10401040104013F8FC4824482448244827FE484028A010A02910451082080406 +599D:042024202420242025FE3C4404440444FC442484244824282410442844448582 +599E:100011F810481048FC482448244825F824884888288810882888448883FE0000 +599F:00001FF0101010101FF0101010101FF002000200FFFE08201C4003800C707008 +59A0:1020102010201020FDFE2522252225222552494A298A110229024502850A0104 +59A1:1008101C11E01100FD00250025FE251025104910291011102910461082100410 +59A2:1010109010901088FD082504260425FA24884888288810882908450882280410 +59A3:1010111011101112FD12251425D82510251049102910111229524592850E0000 +59A4:100011F810081050FC20241027FE242224244820282010202820442084A00040 +59A5:00FC7F00020821081110102002000200FFFE042008201E400180066018186004 +59A6:10201020102013FEFC202420242025FC24204820282013FE2820442084200020 +59A7:100011FC10001000FC0027FE24902490249048902890109229124512820E0400 +59A8:10401020102011FEFC4024402440247C24444844284410442884448481280210 +59A9:200023FC20402040F84048404FFE484088A048A030A0112029224A22841E0800 +59AA:100011FE11001104FD4425282528251025104928292811442984450085FE0000 +59AB:1020112010A010A0FC2027FE2422242224424852284A108A2882450282140408 +59AC:1000100013FE1020FC202440244024FC25844A842C8410842884448484FC0084 +59AD:2050204820482040FBFE4880488048FC89444944312811282A104A2884440182 +59AE:100011FC11041104FD0425FC25002540254449482970114029424642823E0400 +59AF:1020102010201020FDFC252425242524252449FC292411242924452485FC0104 +59B0:10801080108010FEFD4025402640247C244048402840107C2840444084400040 +59B1:100013FC10841084FC84250425142608240049FC290411042904450485FC0104 +59B2:1000100010FC1084FC84248424FC24842484488428FC10842800440085FE0000 +59B3:10801080108010FEFD0225042620242024A848A4292411222A22442080A00040 +59B4:100010F83E884288A4A818941084207CC2000200FFFE08201C4003800C707008 +59B5:10401020100013FEFC2024202420242025FC4820282010202820442083FE0000 +59B6:10201010101011FEFC2024202444248425F8481028201044288245FE84820000 +59B7:1020102011201120FDFC25202620242025FE4820285010502888448885040202 +59B8:1000100013FE1008FC0825E8252825282528492829E811282808440884280010 +59B9:10201020102011FCFC202420242027FE247048A828A811242924462284200020 +59BA:10201020102013FEFC202420242025FC247048A828A811242924462280200020 +59BB:010001007FFC01003FF80108FFFE01083FF80200FFFE08201C4003800C707008 +59BC:1040102010281008FC08244824542552255249602A60104428C44544823C0000 +59BD:10201020102011FCFD242524252425FC25244924292411FC2924442080200020 +59BE:020001003FF8000008200440FFFE020002007FFC042008401C8003800C707008 +59BF:100010007E7C1244124422444A7C844402000200FFFE08201C4003800C707008 +59C0:101C11E010201020FC2027FE24202470247048A828A811242A22442080200020 +59C1:10801080110011FCFE04240425E425242524492429E411242804440484280010 +59C2:1004101E11E01000FC20241025FE2404240848102820104028804540823E0000 +59C3:1000100013FE1020FC20242025202520253C4920292011202920452087FE0000 +59C4:100011FC11041104FD0425FC2520252025FE4920292011102912454A85860102 +59C5:10201020112410A4FCA8242025FC2420242048202BFE10202820442084200020 +59C6:100010FC108410A4FC942484248427FE250449442924110429FE440484280010 +59C7:0810081017FE3010521091101110105012200200FFFE08201C4003800C707008 +59C8:1020102010501050FC8825242612241025FC4804280810882850442084100010 +59C9:10201020102013FEFC20242025FC252425244924292411342928442084200020 +59CA:10201020102E11F0FD202520252025FE2422486228A2112A2E24442084200020 +59CB:1020102010201040FC48248425FE2482240048FC288410842884448480FC0084 +59CC:10201020102011FCFD24252425FC2524252449242BFE11042904450485140108 +59CD:100011FC11541154FD542554255427FE25544954295411542954454485140108 +59CE:10201020102011FCFD2425242524252425244BFE282010502850448881040202 +59CF:1088108810881088FDFE248824882488248848F8288810882888448884F80088 +59D0:100011F811081108FD0825F825082508250849F8290811082908450887FE0000 +59D1:1020102010201020FDFE24202420242025FC4904290411042904450485FC0104 +59D2:1008104811281128FD2825082508250825084908294811942914442284420082 +59D3:1020102011201120FDFC252026202420242049FC282010202820442083FE0000 +59D4:00701F8001000100FFFE054009203118C2060200FFFE08201C4003800C707008 +59D5:0880088828902EA028C028842E84F07C02000200FFFE08201C4003800C707008 +59D6:100011FE11001100FD0025FC250425042504490429FC11002900450085FE0000 +59D7:100011DC11541154FD542554255427FE2554495429541154295446D48224044C +59D8:1104108410881000FDFE24882488248824884BFE288810882908450882080408 +59D9:10801088109C1170FD1027102510251025FE49102910111029104510857C0100 +59DA:2090209020902292F9944898489049988A944C9230901090291249128212040E +59DB:100011FE11021102FD7A25022502257A254A494A294A117A29024502850A0104 +59DC:082004407FFC01003FF80100FFFE02000400FFFE082010201C4003800C707008 +59DD:20202120212021FCF9204A2048204BFE487090A850A8212431244A2248208020 +59DE:10201020102013FEFC20242025FC2400240049FC290411042904450485FC0104 +59DF:10201010101013FEFC202442248425F82410482228C413082810442880C40302 +59E0:10201020104011FEFD022502257A254A254A494A294A117A29024502850A0104 +59E1:1008103C11E01020FC2027FE24202420242049FC290411042904450485FC0104 +59E2:1020102010481084FDFE2402240024FC248448FC288410FC2884448484940088 +59E3:10401020102011FEFC0024882504260224884888285010502820445080880306 +59E4:1008101C11E01100FD0025FE25002500257C4944294411442944467C82440400 +59E5:10401040104411F4FC48245027FE2440248049842A9810E028824482847E0000 +59E6:04000400FFFE08201C4003800C70700800101010FEFE2224646418182434C2C2 +59E7:10001000FE7C2210641018102410C21010FE1010FE102210641018102410C210 +59E8:2040204027FC2040FBF848484BF84A408BFC4844305410A828A0491082080406 +59E9:1080108010FE1110FE10241024FC2490249048902BFE10102810441084100010 +59EA:100011FE10201040FC88250425FE24222420482029FE10202820442083FE0000 +59EB:100011FE11201120FD2025FC250425042504490429FC11202920452085FE0000 +59EC:100011FE11101110FD10257C2544254425444944297C11102910451085FE0000 +59ED:02001FF00410085010207EFC12242A5444880400FFFE08201C4003800C707008 +59EE:100013FE10001000FDFC2504250425FC2504490429FC11042800440083FE0000 +59EF:1040104412441148FD50244027FE2490249048902890109229124512820E0400 +59F0:1080108011FC1104FE0425E42524252425E44924292411E42904440484280010 +59F1:1020102013FE1050FC88250426FA240027FE4840288011FC2804440484280010 +59F2:20402020202023FEFA024C4448404BFE48889088510820D03020485048888304 +59F3:1040104010FC1104FE88245024202440248049FC2A8410842884448484FC0084 +59F4:00047FA410243F2451240A040C043014C2080200FFFE08201C4003800C707008 +59F5:200027FC24042404F5F45444544455F455549554555425542574544654468842 +59F6:1020102010501088FD04260225FC2400240049FC290411042904450485FC0104 +59F7:1020102011FE1040FC4024FC2484258426FC4884288410FC2884448484940088 +59F8:100011DC10881088FC882488248827DE24884888288810882888450881080208 +59F9:10401020102011FEFD022604241825E024404840287E13C0284044448444003C +59FA:10201120112011FCFD202620242027FE2490489028901090291245128212040E +59FB:100011FC11041124FD24252425FC252425244954294C118C2904450481FC0104 +59FC:10201020107C1084FD482430242024482590483E284211A42818441084600180 +59FD:1040104010FC1104FE0825FE2500257C254449442954114829424542853E0200 +59FE:1020102010501088FD04260225FC24202420482029FC10202820442083FE0000 +59FF:4080208009FC12042448E04020A023182C060400FFFE08201C4003800C707008 +5A00:2028202420242020FBFE48204924492489244BA8312811102A124A2A84460082 +5A01:0028002400203FFE202020203FE4222422243FA824A828902512422A45469882 +5A02:1088108810881088FDFE24882488248824884BFE280010882884450482020402 +5A03:1020102011FC1020FC20242027FE24002420482029FC10202820442083FE0000 +5A04:010011100920FFFE054009203118C0060200FFFE042008201C4003800C707008 +5A05:200023FC20902090F89048924C924A948A944A98309010902890489087FE0000 +5A06:2080208020BC23C0F850482448D44B0C88004BFE3090109029124912820E0400 +5A07:1008101C10E01020FC2025FE2450248825044A8A288810882888448884880108 +5A08:02000100FFFE0440145014482444420402007FFC042008401C8003800C707008 +5A09:1020102011FC1124FDFC252425FC240027FE4880290011FC2804440484280010 +5A0A:100011F811081108FDF82508250825F82508490829F81090289045128212040E +5A0B:1020112410A410A8FC2025FC2504250425FC4904290411FC2904450485140108 +5A0C:100011FC11241124FDFC2524252425FC2420482029FC10202820442087FE0000 +5A0D:2028202420242020FBFE4A204A244A248BA44AA832A812902A924DAA84460882 +5A0E:080C08F07E8008800EFE78880888290812080200FFFE08201C4003800C707008 +5A0F:10901088108013FEFCA024A824B024A424A848B02924112A2932462282DE0400 +5A10:1008103C11C01004FD4424A8240025F8241048202BFE10202820442084A00040 +5A11:1020082040A824A4092A723010C0170002007FFC042008401C8003800C707008 +5A12:1080108010FE1100FEFC248424A4249425FE48842924111429FE440484280010 +5A13:200023FC22042204FBFC4A004A184AE08A384AE0323C13E02A224C22841E0800 +5A14:1020102013FE1020FC2025FC25042504250449FC28501050289244928112020E +5A15:1020102013FE1020FC2025FC2524252425FC4820287010A82924462280200020 +5A16:100011FC11041104FD04250425FC242024204920293E1120292046A0847E0800 +5A17:2000200623B82088F8884908493E4B8888884A883288113E29004A80847E0800 +5A18:1040102011FC1104FD0425FC2504250425FC4920292211142908454485820100 +5A19:100011FE10001092FD24264825242492240049FE282010202820442083FE0000 +5A1A:11FC1124112411FCFD24252425FC244024404BFE284210822882450282140408 +5A1B:200020F820882088FAF84A004A004BFC8844484437FE104028A0491082080406 +5A1C:20002FDE22522252F25457D45258525452529FD25252225A2254545055508890 +5A1D:100013FE10101020FC6824A427222420240049FC290411042904450485FC0104 +5A1E:2008203C23C02044FA244928490048408BFE4888310813902860485081880604 +5A1F:200021F821082108F9F848004BFC4A044A0493FC5204220433FC4A044A148208 +5A20:200023FC22002200FAF84A004A004BFC8AA04AA432A812902A904C8884A408C2 +5A21:20202020202023FEF8204820482049FC8840482030A412822A8A4A8A84780000 +5A22:1020102010501088FD44262224F824082410482029FC11042904450485FC0104 +5A23:11081088109011FCFC24242425FC2520252049FE286210A2292A462484200020 +5A24:2420242024203DFC0420FC20242024F846000200FFFE08201C4003800C707008 +5A25:101010D813941094FC9027FE24902494249448D82B98109028AA44CA84860182 +5A26:1010103811C01100FD0025FC25102510251049102BFE10002890450882040402 +5A27:1104108410881010FDFC25042504250425FC48502850109028924512820E0400 +5A28:100011FC110411FCFD0425FC2400240025FC4820282013FE2820442084200020 +5A29:1080108010F81108FE1025FC25242524252449FC28501050289044928112020E +5A2A:100013FE10401040FDFC2484248427FE2400480029FC11042904450485FC0104 +5A2B:2004200E23B82088F8884928492E4BA888A84AA832A8113E29004A80847E0800 +5A2C:2010201823D42014F8104FFE4810489088904AD0329012902A8A4AEA87060202 +5A2D:2020204020882104FBFE4882488049FC8A20482033FE10202850488881040602 +5A2E:1040102013FE1000FC0025FC2400240025FC4800280011FC2904450485FC0104 +5A2F:200020F820882088FAF84A004A004BFC8804480437FE100028A0491082080406 +5A30:21082148212822A8FAA84E884A884A884A88928852A822D432944A224A428282 +5A31:200023F822082208FBF8480048004BF88840484037FE104028A0491082080406 +5A32:200021FC21042104F90449FC482048204BFE92225252228A330A4A024A0A8204 +5A33:204220E22382208AF88A488A4BEA488A498A91CA52AA228234824882488A8084 +5A34:110010BC10041124FD24252425FC2524257449AC292411242924450485140108 +5A35:200027E0225E2252FA524BD24A524A544BD49254524822E83754485448628040 +5A36:00007F7C22443E4422283E1023A8FE4402820400FFFE08201C4003800C707008 +5A37:1008103C11E01020FDFE24A824A824A827FE48A828A813FE2820442085FC0000 +5A38:1088108813FE1088FC8824F82488248824F84888288813FE2800448885040202 +5A39:20102388208820FEF8904B904A244A244A3893885090209030A448BE4A828100 +5A3A:200023DE2042214AF884494A4A524C2088004BDE305211522894494882540422 +5A3B:1020102013FE1020FDFC252425FC252425FC4820287010A82924462280200020 +5A3C:10FC1084108410FCFC84248424FC240025FE4902290211FE2902450285FE0102 +5A3D:100011F810081008FDF82408240827FE24204A22297410A82924462280A00040 +5A3E:100011FE11101110FD7C2510251025FE250049102910117C2910461082FE0400 +5A3F:00007BFE480851E8492845E85408482842100200FFFE08201C4003800C707008 +5A40:2000277E25042504F57455545654555455549554557425542604540454148408 +5A41:01001FF01110FFFE11101FF001001FF011101FF00200FFFE08201C4003C03C38 +5A42:2020204021FC2104F9FC490449FC4820482093FE52222222322A4A2448208020 +5A43:2040202023FE2202F80049FC480048004BFE90205128212432224C2248A08040 +5A44:1040102011FC1000FD082490240027FE2400480029FC11042904450485FC0104 +5A45:1100110011FC1204FC44255424E4244427FC484428E411542A44444484140008 +5A46:202013FE922242204BFC1284E448243029CE0400FFFE08201C4003800C707008 +5A47:2008203C23C02044FA244928490048208BFE487030A810A829244A2284200020 +5A48:2020202021FC2020F8204BFE488849448A4248F8318812502820485081880606 +5A49:2040202023FE2202FD04490049DE4A528A524B52349A1094291049128212040E +5A4A:1020102013FE1020FC2025FC2420242027FE484028A411A82A90448884C60080 +5A4B:10201020103E1020FDFE2522253825E02522491E290011782A48464A848A0906 +5A4C:2100210021DC2114F114511457D4501451149114558825482948511455148222 +5A4D:1020102011FC1050FC88250427FE240825E84928292811E82928440884280010 +5A4E:10A01090109011FEFD20252027FC2520252049FC29201120292045FE85000100 +5A4F:1080108010F81108FE1025FC25242524252449FC28501058289444928112020E +5A50:100011FC11241124FDFC2524252425FC24204BFE287010A82924462280200020 +5A51:201C21E020202020FBFE48A849244A42484093FE5088210830D0483048488184 +5A52:102010A210A21124FC50248827042422242048A428A411282850448885040202 +5A53:04400440FC7E04407C7C0440FC7E044006400200FFFE08201C4003800C707008 +5A54:209020902090279EF890489048904B9C489090905090279E3090489048908090 +5A55:2020202023FE2020F9FC48244BFE482489FC48203120113E29204AA0827E0400 +5A56:200023FC20402040FBFE48A049104A084C4690405048226432524C5249408080 +5A57:20002040239C2204FA044B9C4A044A048BFC489030901090289049128212040E +5A58:1020112410A81020FDFC244027FE248825044AFA2C88108828A844928482007E +5A59:1080108010F81108FE1025FC2424242425FE4824282411FC2824442084A00040 +5A5A:201C23E0222023FEFA204A924B0A4A0649FC9104510421FC3104490449FC8104 +5A5B:1040102013FE1000FC0025FC2504250425FC4820292811242A22442280A00040 +5A5C:00007F7C48447F4441287F1048287F4400820400FFFE08201C4003800C707008 +5A5D:2040202023FE2202FC0448004BFE482088204920313C11202AA04A60843E0800 +5A5E:1020102011FC1020FC2027FE2488245025FC4820282013FE2820442084200020 +5A5F:200023FE22222222FBFE4A224A224AFA4A8A928A528A22FA328A4A024BFE8202 +5A60:1040102013FE1202FC0425F82508250825F84900290011FC2904450485FC0104 +5A61:20202020202023FEF8204924492449248AAA487030A810A829244A2284200020 +5A62:1040108011FC1124FD2425FC2524254425FC4890291013FE2810441084100010 +5A63:2050225222522252FBDE4A024A024BFE8A024A0233DE12522A52425284520802 +5A64:200023FE22222222FAFA4A224A224BFE8A024AFA328A128A2AFA4A02820A0404 +5A65:10201020103E1020FDFC250425FC250425FC4924282013FE2820442084200020 +5A66:200021FC200420FCF80449FC48004BFE4A22902051FC21243124493449288020 +5A67:1020102013FE1020FDFC242027FE240025FC490429FC110429FC450485140108 +5A68:1020102010501088FD0426FA240025FC2554495429FC1154295445548504010C +5A69:1020112411241124FDFC240025FE2500257C4910291011FE2910461082100410 +5A6A:082008207EFC08301C682AA4C92208200A207FFC042008401C80038006703808 +5A6B:100011FC11041104FDFC2504250425FC2400491229D41118291045528592010E +5A6C:1008103C11C01044FD2424A82490241C25E04820282013FE2820442085FC0000 +5A6D:100011FE10481048FC4825CE25022502250249CE284810482848444885FE0000 +5A6E:100011FC11041104FDFC2510251025FE25104910297C114429444544857C0244 +5A6F:0000FEFE00007C7C444464645454444446440200FFFE08201C4003800C707008 +5A70:10501050105011FCFD542554255425FC25544954295413FE2800448881040202 +5A71:00407C2005FC7C4040887DF00420044829FC10040200FFFE08201C4003C03C38 +5A72:1088108813FE1088FC8824502450249425944A98289010B228D24492848E0080 +5A73:200023FE20002000F8F848A84AAA4AFA4AAA92AA52AA22FA32024A024BFE8002 +5A74:00003EF822882AA82AA82AA81450628802007FFC042008401C80038006703808 +5A75:11041088105011FCFD24252425FC2524252449FC282010202BFE442084200020 +5A76:2040202023FE2222F82049FC4924492449FC9124512421FC3124482048208020 +5A77:1040102013FE1000FDFC250425FC240027FE4A0229FC10202820442084A00040 +5A78:100010FC108410FCFC8424FC240025FE248048FE292A124A2892452284540088 +5A79:200023FE20502050FBFE4A524A524BFE4800904057FE20883190486048D88304 +5A7A:00207E20247E18A4FF2829104A2898C602007FFC042008401C80038006703808 +5A7B:2020202023FE2020F8204BFE4A8A4A524AFA9222522222FA32224A224A2A8204 +5A7C:1088108813FE1088FCA8242027FE2440248048FC298412842884448484FC0084 +5A7D:200023DE22422242FA424BDE4A004A3E4BD29212521423D432084A144A248242 +5A7E:21C020A021102208FDF648004BCA4A4A4A5493D45268225433D44A4A4A4A82C0 +5A7F:100013FE10221120FD3C252026FE240025FC490429FC110429FC450481140108 +5A80:21FC2124212421FCF924492449FC4820482093FE5222222A32FA4A0A4A028206 +5A81:2040204021FC2084FBFE480049FC490449FC902053FE202032204BFE48208020 +5A82:2040202021FC2000F88848504BFE4A224C2491FC512421243134492848208020 +5A83:200021FC20482030FBFE4852489449108A30482033FE107028A8492486220020 +5A84:1104108813FE1020FC2025FC2420242027FE4800282013FE2820445080880306 +5A85:1088108813FE1088FCF8248824F8248824884BFE290011482984450085FE0000 +5A86:100013FE10201040FDFC2554255425542554492C282013FE2850448881040202 +5A87:1040102011FC1000FC88245027FE2420242049FC282010A82924462280A00040 +5A88:200023FE22222020FBFE482049FC492449FC912451FC202033FE482048208020 +5A89:200023FC22042204FBFC4A004BFC4A408A884BFC322412202DFC4420882013FE +5A8A:21082088209027FEF8004BC44A544A544BD49254525423D432544A444A5482C8 +5A8B:1020102013FE1020FDFC244027FE248825044AFA2888108828F84488848800F8 +5A8C:1088108813FE1088FC88240025FC25242524492429FC11242924452485FC0104 +5A8D:1040104010F81108FE1025FC250425FC250449FC290411FC2800448881040202 +5A8E:1020102211FA1024FC2827FE2420244024FC49842A8410FC2884448484FC0084 +5A8F:1020112411241124FDFC240027FE2420244049FC29541154295445548554010C +5A90:00007F7C444444445F7C51405F4244427FBE0200FFFE08201C4003800C707008 +5A91:2008203C21E02020FBFE482049FC492449FC912451FC202031FC48204BFE8000 +5A92:21102110211027FCF91029F0291029F048404FFE284010E011502A4E44448040 +5A93:1020104011FC1104FDFC250425FC240027FE4820282011FC2820442083FE0000 +5A94:200027FE20402080FBFC4A944A944AF44A94929452F4229432944A944BFC8204 +5A95:1020105010881104FEFA240025FC2504250449FC288810882BFE448881080208 +5A96:2110211027FC2110F95048404BF84A488A484A4837FE104028A0491082080406 +5A97:2040202023FE2202FC0449FC480049FC490491FC510421FC310448004BFE8000 +5A98:1110111211D41118FD522592252E244025FC4904290411FC2904450485FC0104 +5A99:200C200A200823FEFA084BF84A4A4A4A8BEA4AAC32AC124C2AAA4B0A82160422 +5A9A:100011FC11241124FDFC2500257C25442544497C2944117C29444644827C0444 +5A9B:203C27C022442128F8004BFC488048804FFE910051F8228832504C2048D88306 +5A9C:10201020103E1020FC2025FC250425FC250449FC290411FC2800448885040202 +5A9D:0610381008527E5408901C282A2848440A820200FFFE08201C4003800C707008 +5A9E:100011FC11041104FDFC2504250425FC24004BFE28201120293C452082A0047E +5A9F:10481148114813FEFD4825482578250025FE48202BFE107028A8452486220020 +5AA0:1040104013FE1080FDFC262025FE240025FC490429FC110429FC450485140108 +5AA1:1020102013FE1020FDFC252425AC2574252449FC2820107028A8452482220020 +5AA2:100011FE1102117AFD02257A2502240024FC488428FC108428FC448484FC0084 +5AA3:212020A024782228F8A8492A4F2A494649A0902053FE207030A849244A228020 +5AA4:100011FC11241124FDFC2524252425FC24204810285411422942454A82380000 +5AA5:2040202021FE2102F90249FE4900490089FE49AA31AA12FE2AAA4AAA84A20086 +5AA6:200023FE222223FEFA224BFE480049FC490491FC510421FC3104490449148108 +5AA7:100010FC10841084FCF42494249425FE2502497A294A114A297A4502850A0104 +5AA8:21082088209027FEF89048904BFC4A944A94930C520423FC32044A044BFC8204 +5AA9:1080109E109213F2FC92249E249225D22552495E2952115229D24422842A0044 +5AAA:200021F821082108F9F84908490849F888004BFC329412942A944A9487FE0000 +5AAB:20402040207E2040FBFC480449FC48048BFC48403240127C2A40454084FE0800 +5AAC:2100217C21442244FA444E7C4A104A104AFE92385254225432944B124A108210 +5AAD:0BFE3020C1FC09043124C52409243050C08803040200FFFE08201C4003C03C38 +5AAE:204020A021102208FDF648004BC44A544A5493D45254225433D44A444A5482C8 +5AAF:20402240214027F8F888489048FC490489084BFE3202142A2AAA4A8284140008 +5AB0:2080208021FC2244F95449F4488449284A9091FC5244255431F4488449288210 +5AB1:2008203C23C02004FA44492849FC4A20482093FE502021243124492449FC8004 +5AB2:1020104011FC1154FD242554250425FC2400491229D41118291045528592010E +5AB3:2020204021FC2104F9FC490449FC490489FC4840302010A42A8A4A8A84780000 +5AB4:2020202021FC2020FBFE480049FC4904490491FC5052209431884EA448C28080 +5AB5:0020792448A8482049FC78404BFE488849447A424DFC488849D0483048489984 +5AB6:2108210827FE2108F8004FFE490849F8490891F85108213E37C8480848088008 +5AB7:200023FE220022FCFA004BFE4AA84A908AC84A86320813FE2A884C4884080818 +5AB8:20202124212421FCF8204BFE4800482049FC9124512421FC302048244BFE8102 +5AB9:204023BE22122292FA524AAA4B2448404BFE9222522223FE32224A224BFE8202 +5ABA:2108254825482550F7DE502450145FD450149794549424A824C8549458149022 +5ABB:10783E4822482A86FF7822482A2842104A2884C60200FFFE08201C4003C03C38 +5ABC:100010F810A810A8FCD8248824F82400240049FC295411542954455483FE0000 +5ABD:200021FE212021FCF92049FC4920492089FE480232AA12AA2AAA4A0280140008 +5ABE:1088108813FE1088FDFC248827FE242025FC492429FC11242BFE450485140108 +5ABF:2020204023FC2224FA244BFC4A244A448BFC484030A810B4293C49228222041E +5AC0:2040204027FC2040FBF848804FFC49108A684DC6304013F828E0495886440040 +5AC1:2040202023FE2202F80049FC484048A24B34905850942334305248904B508020 +5AC2:10A0112C11241124FDAC2524252425FC242049FC288810502820445080880306 +5AC3:1020102013FE1020FDFC250425FC250425FC490429FC11042BFE448881040202 +5AC4:100011FE11101120FD7C2544257C2544257C4910291011542952469282500420 +5AC5:21082088209023FCF84049F848404BFE4880910051FC2220342048204BFE8000 +5AC6:1040102013FE1202FC50248825242450248849042AFA10882888448884F80088 +5AC7:100013FE12021000FDFC250425FC250425FC4840282013FE2800448881040202 +5AC8:08202AA42CA84920145022887FFE400282040200FFFE08201C4003800C707008 +5AC9:2020201021FE2100F9204D204B3C495089904B1035FE111029284A2882440482 +5ACA:2020202023FE2020F9FC48204BFE4840488891F0502423FE302249244AA28040 +5ACB:200023DE20422042FBDE4A104A104BDE48429252514A214A325248424A948108 +5ACC:10881050100013FEFC5025FC245427FE245449FC285010D82954465284500050 +5ACD:101E11E010221112FC942480242025CE2502490229CE11022902450285FE0102 +5ACE:2040202023FC2108F8904BFE4A024C44482093FC508020F83088490849288210 +5ACF:2100209E23D22252FA544BD44A584A544BD292125292225A32D44B504A108010 +5AD0:200827C825482548F7FE5554555457D45214922457D4224822485254555488A0 +5AD1:7FFC03000D70710C01007FFC04403FF824483FF80400FFFE08201E4003C03C38 +5AD2:200E23F020442224F9084BFE4A4248404BFE908050FC214431284A104C688186 +5AD3:108010F811081210FDFC25242554258C25044810291211D4291845528592010E +5AD4:2040202023FE2202FC1449E04900490049FC9110511027FE3000489049088204 +5AD5:100011FE1140117CFD90251025FE2528254449FE2820101029444542824A0038 +5AD6:100013FE105011FCFD54255425FC240025FC48002BFE102028A8452482A20040 +5AD7:200023FE2200227CFA444A444A7C4A004AEE92AA52AA22AA32EE4A004BFE8000 +5AD8:100011FC112411FCFD2425FC2440248825F04820284413FE2822452482220060 +5AD9:2420222022202F7EF4805400577C551455109550555C255029505B5050BEA100 +5ADA:200021F8210821F8F90849F848004BFC4A9493FC500021F83090486049988606 +5ADB:7F7848485F4C64805F7844484A4851307F4C0400FFFE08201C4003800C707008 +5ADC:202021FC20882050FBFE480049FC490449FC910451FC202033FE482048208020 +5ADD:1020101011FE1110FD7C251425FE2514257C4910299211542938465482920430 +5ADE:202023FE222022FCFA244BFE4A244AFC8A204AFC32A412FC2AA44CFC84A408AC +5ADF:200023FE22482248FBFE4A484A204BFE4A4092FC53442244327C4A004BFE8000 +5AE0:08203E7E08A47F281C102A2849443FFE210021003FFE2210272040C043308C0C +5AE1:2040202023FE2088F8504BFE4A224AFA4A2292FA528A228A32FA4A024A0A8204 +5AE2:11F87D0811F81108FDF8110829F824904112860E0200FFFE08201C4003C03C38 +5AE3:200027FC20402278FA404FFE490049FC4A0093FC500425543554480448288010 +5AE4:1088108813FE1088FCF8242025FC252425FC48202BFE102029FC442083FE0000 +5AE5:102013FE102011FCFD2425FC252425FC24224BFE280813FE2908448884280010 +5AE6:2020212420A823FEFA0248F84888488848F8902051FC21243124493449288020 +5AE7:102013FE102011FCFC2027FE240025FC250449FC290411FC290445FC84880104 +5AE8:1088108813FE1088FCF8242025FC252425FC482029FC10202BFE445080880306 +5AE9:2108210827C82110F11E57E45554555457D49114539425482948511451148122 +5AEA:200027BC208424A4FA944CA4485049884E2690C0531020643388483048C08700 +5AEB:2110211027FC2110F8004BF84A084BF88A084BF8304017FC28A0491082080406 +5AEC:2040202023FE2200FA484A484BFE4A488A484A48327812002D54452A8A2A1000 +5AED:2040207C204023FEFA424A784BC44A3C8A084AF0332412A82DFE442088A00040 +5AEE:11FC102013FE1222FDAC242025AC240025FC48002BFE108028FC440484280010 +5AEF:08207F20087E7E4408A4FF2810101E28224446828200FFFE08201C4003C03C38 +5AF0:2108210827C82108F11E57D25564554057C89108538825482954511451248142 +5AF1:1020102013FE1020FD2424A827FE240025FC4904297411542974450485FC0104 +5AF2:2040202027FE2490F490549057FC549054D895B855B426D42892589050908090 +5AF3:082049202A3E7F4849485DA86B10492841460400FFFE08201C4003800C707008 +5AF4:102013FE102011FCFD0425FC242025FC248848502BFE102029FC442084200020 +5AF5:2080208021FE2354FD5449544BFE49544954915457FE20003154492A4A2A8000 +5AF6:2090208821FE2110FB104DFE4910491089FE4910311011FE29004AA482520452 +5AF7:2020272025FE2540F57C5690557E5500557C9544557C2644247C54445444844C +5AF8:1088105013FE1020FDFC242027FE252424A84BFE280011FC2904450485FC0104 +5AF9:1088108811FC1088FC8827FE242025FC252449FC292411FC2800448881040202 +5AFA:239C2294239C2294FB9C4A044AF44A944AF4929452F4229432944B344A04820C +5AFB:200023DE225223DEFA524BDE4A224A224AFA9222527222AA33264A224A2A8204 +5AFC:200021FC212421ACF974492449FC482089FC482033FE10002AA44A5284520000 +5AFD:2020202023FE2050FA8A49044BFE4D0449FC910451FC202031244A224CA28040 +5AFE:2020212420A823FEF8A849244A224904890449DE32441554289E490482040404 +5AFF:202021FC202423FEF82449FC48204BFE480091FC512421FC312449FC480083FE +5B00:2004203E27C02244F12853F8520853FC520493FE540226AA2AAA5A0250148008 +5B01:202027A420A82292F9144A084DF448028BF84A08320813F82A0841108FFE0000 +5B02:2110209423D22012FA5049904FFE48104BD29252525423D4324A4A4A4BD68022 +5B03:0BFE104061FC090411FC610405FC090431FCC0880504FFFE08201E4003C03C38 +5B04:202023FE202021FCF8004BFE4A0249FC480091FC510421FC310448884BFE8000 +5B05:108813FE10881000FDFC24A824A827FE24A848A829FC10202BFE442084200020 +5B06:204020A0211826E6F00053F8520853F8500097BC508424A4229454A452948108 +5B07:102011FC112411FCFC2027FE240025FC250449FC290411FC290445FC84880104 +5B08:2020202021FC2020FBFE49084B9C49084988963E500023FE309048904912820E +5B09:102013FE102011FCFC0025FC250425FC24884BFE280011FC2904450485FC0104 +5B0A:0440FFFE044017D0F01217DC3452D7D2100E0400FFFE08201C4003800C707008 +5B0B:200023DE22522252FBDE480049FC492449FC912451FC202033FE482048208020 +5B0C:101811E0104013FEFC88257426522470240049FC29041174295445748504010C +5B0D:2108254825482550F7DE501457E4501457D4911457D4210821085FD450248042 +5B0E:2200220823A824A8F93E57C85548555C554897C852BE228022825482547E8800 +5B0F:203C23E0212420A8FBFE48A849244A0249FC9124512421FC3124492449FC8104 +5B10:1020102010501088FD0426FA2400240025DC4954295411DC2888448885540222 +5B11:2040202021FC2088F8504BFE480049FC490491FC510421FC30204A944A8A847A +5B12:1020105010881174FE0225FC252425AC252449FC280010F8288844F8848800F8 +5B13:2108220827C82450F7DE546457D45214511497D4521423C822485454555488A2 +5B14:22002208238824A8F93E57C85548557E554897C852BE228022A25492547E8800 +5B15:100011FC115411FCFC2025FC242027FE2488485029FC10202BFE442084200020 +5B16:00407C2045FC44887C5043FE7C20A5FC24203C200200FFFE08201C4003C03C38 +5B17:202023FE200023FCFA044AF44A944BFC480091F8510821F8310849F8480083FE +5B18:20882448225020FCF82048504E944A388A504A98323412542A904A2085FE0800 +5B19:2020202023FE2124F9244AAA4FFE480049FC9104517421543174490449FC8104 +5B1A:202023FE22882250FBFE4A504AFC4A548BFE4A5432FC12502AD84D5486520850 +5B1B:200023FC22942294FBFC48004FFE48004BFC920453FC20A231144B084D448182 +5B1C:10207E20243EFF4200947E1042287E2842447E820200FFFE08201C4003C03C38 +5B1D:208023F8220823F8FA084BF84A004BFC8A004BFC304413FC28A0499486C80086 +5B1E:208823FE208821FCF8204BFE482049FC492491FC512421FC30204BFE482087FE +5B1F:2104208823FE2020F9FC48204BFE48544992909053FE209030D44B8A489681A2 +5B20:10F81088108810F8FC0025DC2554255425DC48202BFE107028A8452482220020 +5B21:203C23C020442224F10857FE544252A4528A947A508020F8210852905060879E +5B22:2080204027FE2110FA084D144BF849104BF8911057FC212833104D4849868100 +5B23:2040202023FE2222F954494A4A3A480049FC915453FE200031FC482048A08040 +5B24:2040202027FE2488F7DE548855DC56AA54889440548825F02420544859FC9084 +5B25:200023DE20422252F94A4A52489049084BFE951051FE211031FE491049FE8100 +5B26:204027FC204023FCF00057FE500253F8504097FE500027FE200857FE54A88798 +5B27:204023F8204827FEF8484BF848404FFE480092A4545223F832A84AA84FFE8000 +5B28:2108209023FE2108F9084A524B9C49088A524BDE304010A42AAA4A8A84780000 +5B29:2140224C22642244FB4C4A644AA44BAC8AA44AA437FE10002910490882040404 +5B2A:2040202023FE2202F9FC49484A5049FC4B0491FC510421FC310449FC48888104 +5B2B:208822AA22DC2488F9544A2248004BFE8A22482033FE107028A8492486220020 +5B2C:200021FC202023FEFA2249AC482049AC480093FE502021FC315449544954810C +5B2D:200027FC22482444FFFE544456EC555456EC944456EC255426EC544454548408 +5B2E:3FFE28882F8A20082FBE28882F88289429A220803FFE2208271040E0431C9C02 +5B2F:20402FFE204027FCF00053F852085FFE580297FC511023F8204057FC50408FFE +5B30:3EF822883EF822883EF822883EF8145022880400FFFE08201C4003800C707008 +5B31:420C2FB082204FA00ABE2FA84AA8CFA842285FA84248FFFE08201C4003C03C38 +5B32:0000F93EA92AA92AF93EAFAAAAAAFABE42904490FABE491249124A92ACAA1044 +5B33:108813FE10A81090FDFE272025FC252025FC492029FE11002BFC44888070038E +5B34:0100FFFE20003FF800003FF820083FF8010079384FA87AA84AB8792A4AAA9C46 +5B35:21082110223E2222F4BE5722513E520854BE97AA502A20AA256A552E54088008 +5B36:104010F8108810F8FC8824F8240025FC252449FC292411FC280047FE84880108 +5B37:2040202027FE2488F7DE548855DC56AA54889440549025202448548455FC8884 +5B38:202023FE2202241CFBE0492448A84BFE4924920255FC212431FC492449FC8104 +5B39:220024EC24A424A4F6EC54A454A456EC54A494A45FFE20002110510852048404 +5B3A:23FE224823FE2248FA204BFE4A404AFC8B444A7C320013FE28404AA4828A047A +5B3B:202023FE202021FCF8004BFE4A524BFE490491FC510421FC310449FC48888104 +5B3C:220225E224A226AAF52A566A510A528A544A9BAA510A27CA2122554251EA8E04 +5B3D:23FA22AA23FA2002F7FE540055FC555455FC940057FE204027FE50A051188606 +5B3E:2108210827CE2112F12457DE5552555E57D2911E5392255E2940511451128122 +5B3F:2110211027FC2110F1F0520852EA56AC52A892AA56EA2A06200052A452528452 +5B40:21FC202023FE2222F9AC482049AC4800489E93F2509E21D232BE4C92489E8092 +5B41:3FF801007FFE41029D7401001D7000003BB82AA83BB80400FFFE082007C07838 +5B42:221023DE25282084FBF84A084BF84A088BFA4A243298130628004BFC82940FFE +5B43:204027FC200023B8FAA84BB849104FFC491097FC511027FE31284B104D488186 +5B44:23DE225223DE2252FBDE4A224AFA4A224AFA92AA52FA22AA32FA4A724AAA8226 +5B45:2148214C22AA2008F7FE51485368514A536A914C536C2148216A539A50268042 +5B46:23DE225223DE2252FBDE4A524BDE498C4A52904057FE20883190486048D88304 +5B47:2108229423DE26B4FBDE4A944BDE4A944BDE921057FC21083090486049988606 +5B48:222223FE209021FEFB104DFE491049FE491091FE510023FE328A4B764A528276 +5B49:208823FE208823DEFA524BDE48A0489049FE912053FC252031FC492049FE8100 +5B4A:202023FE224823FEFA484AEC4B5A4A488A504BDE325013DC2A504DDE84500850 +5B4B:23DE200023DE2252FB5A4A5248204BFE4A5093FE525223FE32924ADC4A9284CE +5B4C:210447C88812F3BC20084B92F83E0380AAAAABAA0200FFFE08201C4003C03C38 +5B4D:27BC24A427BC2000F7FE54005590549E57D4956455D4255425D455685BC89054 +5B4E:23FE220223FE2292FA544A924AFE4AAA4AFE932252FA22AA32FA4A224DFA8004 +5B4F:208823FE208823DEFA524BDE4A524BDE4A2293FE52AA22FA32224A724AAA8224 +5B50:00007FF800100020004001800100FFFE01000100010001000100010005000200 +5B51:00007FF800100020004001840118016003801D00E10041000100010005000200 +5B52:00007FF80010002000400180010001FE01000100010001000100010005000200 +5B53:00007FF800100020204011800900050003000100018001400130010C05000200 +5B54:00407E4002400440084008400A400C403840C8400840084208420842283E1000 +5B55:00003FF008100820083C100417C4205440880100FFFE01000100010005000200 +5B56:00007EFC02040408081008200A200DFE3820C820082008200820082028A01040 +5B57:020001007FFE400280041FE0004000800100FFFE010001000100010005000200 +5B58:04000400FFFE0800080013F810103020504097FE104010401040104011401080 +5B59:00207E2002200420082008A80AA40CA43922C9220A2208200820082028A01040 +5B5A:00F87F0022101110112000001FE0004000800100FFFE01000100010005000200 +5B5B:010001003FF8010001007FFE400280040FE000400080FFFE0100010005000200 +5B5C:0040FC400440088010FE1108168818883088D050105010201050108851042202 +5B5D:020002083FD002200240FFFE010002003FE0104020805FFC8080008002800100 +5B5E:00001FE0004000800100FFFE0100010005000200091049084824482487E00000 +5B5F:00001FE000400180FFFE01000100050002003FF82448244824482448FFFE0000 +5B60:00003FF800087FC800083F8820883FA800103FE000800100FFFE010005000200 +5B61:00207E2002200440084808840BFE0C823800C8FC088408840884088428FC1084 +5B62:0080FC8005FC0904120415F4151419143114D1F4110411281112110250FE2000 +5B63:00701F80010001007FFC054009203118CFE600400080FFFE0100010005000200 +5B64:0008F83C0BD01290229022902A9032902290E288228822C822A424D4A4924800 +5B65:10001000FEFC2244642818102428C2C600003FE000800100FFFE010005000200 +5B66:22081108111000207FFE400280041FE000400180FFFE01000100010005000200 +5B67:0820102022FC7C24082412447F54008801003FE000800100FFFE010005000200 +5B68:00001FE000800100FFFE0100010005007A7C080810101EFEF010101050502020 +5B69:0020FC1004100BFE10201042148419F83010D02210C413081010102850C42302 +5B6A:02000100FFFE0440145014482444444400003FE000800100FFFE010005000200 +5B6B:000CFDF004200844108811F01420184431FED022102010A81124122250A02040 +5B6C:7FFC008003600D1871040100100010FCFE042208221064FE141008103450C220 +5B6D:0000FDFC0504090411FC1104150419FC3104D10411FC10001088108451022202 +5B6E:0040FC2007FE0A02100011FC1400180033FED020112811241222142250A02040 +5B6F:00007EFC48447E4442287E1048287EC600003FE000800100FFFE010005000200 +5B70:10400840FF4000407EF842487E4801487EC8044808680E5AF88A088A29061202 +5B71:3FFC20043FFC200023F020203FFE204020C02FBE210423885E7E42088A280410 +5B72:0000FDFE04480848104811CE150219023102D1CE104810481048104853FE2000 +5B73:082004407FFC12483CF0082014503EF800003FE000800100FFFE010005000200 +5B74:1FE00040FFFE010003007C7C08081EFEF010105030201FF010101FF010101FF0 +5B75:200ECEF08A22AA92AA54EE00AA7CAA08AA10AA10EEFEA8102810481048508820 +5B76:0820FFFE082012483CF0082014503EF800003FE000800100FFFE010005000200 +5B77:08203E7E08A47F281C102A2849443FFE200023F0202020402FFE404041408080 +5B78:0A803138228838382288393822887FFE4002BFE400800100FFFE010005000200 +5B79:3E1022FE3E4420287EFEA2103EFC221000003FE000800100FFFE010005000200 +5B7A:0000FDFC04200BFE122211AC142019AC3000D3FE102011FC115411545154210C +5B7B:0020FDFC04240BFE102411FC14201BFE3000D2A4145211FC1154115457FE2000 +5B7C:52107EFE28447E28A2FE3E1020103E7C22103E1000001FE00040FFFE01000300 +5B7D:0820FFFE28207DFC44887C5041FE7C2045FC7C2000001FE00040FFFE01000300 +5B7E:03DEFA520BDE125223DE22522BDE318C2252E04027FE208821902060A0D84304 +5B7F:210447C88812F3BC20084B92F83E0380AAAAABAA00001FE00040FFFE01000300 +5B80:0200010001007FFE400280040000000000000000000000000000000000000000 +5B81:0200010001007FFE4002800400003FF801000100010001000100010005000200 +5B82:0200010001007FFE4002800400000FE0082008200820102010222022401E8000 +5B83:020001007FFE4002800408000808083009C00E00080008040804080407FC0000 +5B84:0200010001007FFE4002820402001FE0022002200420042008221022201E4000 +5B85:020001007FFE40028004002003F03E00020003FCFE0002040204020401FC0000 +5B86:020001007FFE400280043FF8000800083FF8200020003FFC0004000400280010 +5B87:020001007FFE400280043FF8010001000100FFFE010001000100010005000200 +5B88:020001007FFE4002804400400040FFFE00400040104008400840004001400080 +5B89:020001003FFC2004420802000200FFFE0420082018400640018002600C107008 +5B8A:0200010001007FFE40028104012001107FFC010002800280044008203018C006 +5B8B:020001007FFE40028104010001007FFC03800540092011102108C10601000100 +5B8C:020001007FFE400280041FF0000000007FFC044004400440084408441044603C +5B8D:020001007FFE40028204010000800000FFFE0000044004200810100820044004 +5B8E:020001007FFE4002800400F03F0001000100FFFE01000280044008203018C006 +5B8F:020001007FFE4002820402007FFC04000480088009001100222044108FF80408 +5B90:020001007FFE40028404040007F00810081014202220014000400080FFFE0000 +5B91:020001007FFE4002882408203FF8082008200820FFFE08201020102020204020 +5B92:020001007FFE4002800400F83F00010001F83F00010001FC7F020102010200FE +5B93:0200010001007FFE400281040090089048244842488289020E101810E7F00000 +5B94:020001007FFE4002820401007FFC0100010001003FF8010001000100FFFE0000 +5B95:020001007FFE4002800400007FFC0400040008001FF82808C80808080FF80808 +5B96:020001007FFE400280047E10021002103E10202040287E24024402FE14420800 +5B97:0200010001007FFE400280041FF0000000007FFC010011101108210445040200 +5B98:020001007FFE400280041FF0101010101FF0100010001FF8100810081FF81008 +5B99:020001007FFE4002810401003FF82108210821083FF82108210821083FF82008 +5B9A:020001007FFE4002800400003FF801000100110011F811001100290047FE8000 +5B9B:020001007FFE400290041EF812882288228852A88C90048208821082207E4000 +5B9C:020001007FFE400280041FF0101010101FF0101010101FF010101010FFFE0000 +5B9D:020001007FFE4002800400007FFC0100010001003FF8010001200110FFFE0000 +5B9E:020001007FFE4002888404800480108008800880FFFE01400220041018086004 +5B9F:020001007FFE4002810401003FF801001FF001007FFC0280044008203018C006 +5BA0:020001007FFE4002842404100410FFFE04800888089010A010C220824182867E +5BA1:020001007FFE410281043FF8210821083FF8210821083FF82108010001000100 +5BA2:020001007FFE400288040FF010202C4003801C70E00E1FF0101010101FF01010 +5BA3:020001007FFE400280043FF800001FF010101FF010101FF010100000FFFE0000 +5BA4:020001007FFE400280043FF8040008201FF0011001003FF801000100FFFE0000 +5BA5:020001007FFE420282047FF804000FF018102FF048108FF00810081008500820 +5BA6:020001007FFE400280043FF8210021003FF02010201020103FF0210021003FFC +5BA7:020001007FFE400280043FFC2080208027F82408240827F8208020803FFE0000 +5BA8:020001007FFE4002800404404448245024600C403460C852084A1042203E4000 +5BA9:020001007FFE410291140920054001007FFC0540092011102108C10601000100 +5BAA:020001007FFE4002810411001FF821000100FFFE04400440044008423042C03E +5BAB:020001007FFE400280041FF0101010101FF000003FF82008200820083FF82008 +5BAC:020001007FFE4002809400883FFC208020883E88225022502A244454418C8604 +5BAD:020001007FFE400280043FF80408FFFE04083FF808001FF8280848088FF80808 +5BAE:020001007FFE400280041FF0101010101FF0020004003FF8200820083FF82008 +5BAF:020001007FFE4002810C1FD00120FFFE01001FF0082030C0CFFC008002800100 +5BB0:020001007FFE420281043FF8000008200440FFFE010001007FFC010001000100 +5BB1:020001007FFE40028884088010FE11403240547C90401040107E104010401040 +5BB2:020001007FFE400280041FF0101010101FF00100FFFE054009203118C1060100 +5BB3:020001007FFE400281043FF801001FF00100FFFE01001FF0101010101FF01010 +5BB4:020001007FFE40029FF410101FF010101FF00400FFFE08201C4003800C703008 +5BB5:020001007FFE40029114092001001FF010101FF010101FF01010101010501020 +5BB6:020001007FFE400280047FFC02000D08719002A00CC071A006981886E2800100 +5BB7:020001007FFE400280F43F00111009200100FFFE0380054009203118C1060100 +5BB8:020001007FFE400280043FF820002FF020003FFC248824504420451886060400 +5BB9:020001007FFE4002882411102288044008203018DFF61010101010101FF01010 +5BBA:020001007FFE40029FF4101010101FF00000FFFE09200920112011222122411E +5BBB:020001007FFE4002BFF410104824244803801C70E00E0100210821083FF80008 +5BBC:020001007FFE400280243E2001FE00447E4414C814281410146A2586240243FE +5BBD:020001007FFE400284443FF8044000001FF0101011101110129004821882E07E +5BBE:020001007FFE400280741F80100010001FF810801080FFFE0000084010202010 +5BBF:020001007FFE400288040FFC1040308053F89208120813F81208120813F81208 +5BC0:020001007FFE4002801400F83F001110082001007FFC054009203118C1060100 +5BC1:01007FFE400281047FFC01003FF80108FFFE01083FF8110011F8290047FE8000 +5BC2:020001007FFE400288040F7C08440844FF44002808282A104910892828441082 +5BC3:020001007FFE48028FE4102020405FF8110811081FF8028004A008921082607E +5BC4:020001007FFE420282043FF804800840FFFE00101F90109010901F9000500020 +5BC5:020001007FFE40029FF401001FF0111011101FF0111011101FF0044008201010 +5BC6:020001007FFE40028224094028884B141C10E7F001002108210821083FF80008 +5BC7:020001007FFE400280243E38002000207EF814081450142014542484240443FC +5BC8:01007FFE4102BFFC01001FF00100FFFE00001FF010101FF010101FF010101030 +5BC9:020001007FFE490288841FFC108030805FF8908010801FF8108010801FFC1000 +5BCA:020001007FFE420283F402003FF820083FF820083FF820083FF8082010102008 +5BCB:020001007FFE4822BFFC08203FF80820FFFE10102FE8C82608A00848080807F8 +5BCC:020001007FFE4002BFFC00001FF010101FF000003FF821083FF821083FF82008 +5BCD:020001007FFE4002820409084924482487E000003FF8244824482448FFFE0000 +5BCE:020001007FFE4002840425FC24203C2005FC05247D2425542594250445148508 +5BCF:020001007FFE48028FE410403FF852481428110801007FFC028004401830E00E +5BD0:020001007FFE40028424242025FC3C20042007FE7C6024B02528262644208420 +5BD1:020001007FFE40028BFC080811F8300853F8900017FC140413F8111010E0171C +5BD2:020001007FFE44429FF404403FF80440FFFE082013102088C046060001800040 +5BD3:020001007FFE40029FF411101FF011101FF001003FF8210821482FE824282010 +5BD4:020001007FFE40029FF410101FF010101FF000007FFC110011F8290047FE8000 +5BD5:020001007FFE4002BFFC02003FF8244824483FF80000FFFE0100010005000200 +5BD6:020001007FFE4002A3FC100811F8800843F8500017FC2404E3F8211020E0271C +5BD7:01007FFE420281440880292847E4180061003FF821083FF82108FFFE20082018 +5BD8:01007FFE4102BFFC01001FF010101FF010101FF010101FF01010FFFE08201010 +5BD9:020001007FFE40028004061C38E828A82CA82AA82AA82AA828A455545D748212 +5BDA:020001007FFE4002BFFC01001FF001007FFC10001FF02100FFFE010021083FF8 +5BDB:020001007FFE4822BFFC08201FF010101FF010101FF010101FF004421842E03E +5BDC:020001007FFE41029494142823E800003FF824482448FFFE0100010005000200 +5BDD:01007FFE4002800413F8100891F8500853F8100037FC540493F8111010E0171C +5BDE:01007FFE400284443FF804401FF010101FF010101FF002007FFC04401830E00E +5BDF:01007FFE400290841EF822885450282017D82006DFF001001110210845040200 +5BE0:020001007FFE4102BFFC2108FFFE21083FF811101FF00400FFFE082007C07838 +5BE1:01007FFE4002BFF404001FF010101FF010101FF01010FFFE082037D8C2460CC0 +5BE2:01007FFE4002840424FC2404247C3C0404FC04007DFE250224FC2448443085CE +5BE3:020001007FFE4042842425FC24003CF8040004F87C0024F82488248844F88488 +5BE4:020001007FFE400285FC242024F83C48044805FE7C0024FC2484248444FC8484 +5BE5:01007FFE4002BCFC24481428254806C01830E30E0C403180063038C007003800 +5BE6:01007FFE40029FF41110FFFE22103FF010101FF010101FF010101FF008201010 +5BE7:01007FFE4102949414A823E800003FF82448FFFE00003FF80100010005000200 +5BE8:01007FFE44429FF404403FF80440FFFE082011102FE8C1060920111025080200 +5BE9:01007FFE400280FC3F0011100920FFFE09203018DFF611101FF011101FF01010 +5BEA:01007FFE400280FC7F00221011201FE010201FF010101FFC20042AA44AA4800C +5BEB:01007FFE400282041CF010101EF010101FF008001FFC20044924249424944008 +5BEC:020001007FFE4822BFFC08201FF010101FF010101FF010101FF00452184AE03E +5BED:01007FFE4102BFFC01001FF011101FF011101FF001087FFC02044908482487E4 +5BEE:01007FFE400281047FFC044028281FF02828CFE608200FE00100111025080200 +5BEF:01007FFE490288841FFC30805FF890801FF810801FFC10003E7C224423D42008 +5BF0:01007FFE4002BFFC24483FF80000FFFE00001FF010101FF005081890EA600C1C +5BF1:020001007FFE404289FC490449FC490479FC090409FCF8204BFE48A849248A22 +5BF2:020001007FFE4002A47C3A0422281E1020FE3E124850085E7F5014B0229E4100 +5BF3:01007FFE4082BEFC09243EA809247EA000401FF010101FF010101FF008201010 +5BF4:020001007FFE400288047F7C2244147CFF44087C7F44087C2A28492AA94A1086 +5BF5:0100FFFE88427F7C2240147CFF04007C7F40417C7F40417C7F40417C4542423E +5BF6:01007FFE4082BEFC09203EFC08207EA400FC1FF010101FF010101FF008201010 +5BF7:01007FFE48229D7449245D7449245D7449247FFC00007FFC10101FF00820FFFE +5BF8:0040004000400040FFFE00400040004010400840084000400040004001400080 +5BF9:0010001000107E1002FE02102410149008500850141012102210401000500020 +5BFA:0100010001003FF801000100FFFE002000207FFC082004200420002000A00040 +5BFB:00003FF8000800081FF8000800083FF800200020FFFE08200420042000A00040 +5BFC:00003FF0201020103FF0200420041FFC00200020FFFE08200420042000A00040 +5BFD:000801FC7E0002082108111010400040FFFE0040104008400840004001400080 +5BFE:2010101010100010FEFE04100410489028501050101028102410441080500020 +5BFF:020002007FFC02003FF80400FFFE082008201FFC102024204220822000A00040 +5C00:000800087F884008407E5F0851085148512851285F08510840087F8800280010 +5C01:0808080808087F08087E0808FF080048082808287F08080808080F08F0284010 +5C02:01000100FFFE01003FF821083FF821083FF80020FFFE08200420042000A00040 +5C03:012001107FFC01003FF821083FF821083FF821080020FFFE0820042004A00040 +5C04:080810083E0822083EFE22083E0822082248FE2806280A08120822084A280410 +5C05:08080808FF08080808FE7F08414841287F281408140814282412240243FE8000 +5C06:088008F809084A1028A0284008900B1018102BFEC81009100890081008500820 +5C07:0440247C24C4252824903CA004480588FC0825FE240824882448440884280410 +5C08:01007FFC01003FF821083FF821083FF80104FFFE0022FFFE0820042004A00040 +5C09:00043F84208420843FBE20042F84202420143FD422042A844A4452448A140408 +5C0A:08200440FFFE04403FF82848303827C820083FF80020FFFE0820042004A00040 +5C0B:00003FF000101FF000103FF000003E7C08447F7C0020FFFE0820042004A00040 +5C0C:08080808FF880808087E7F0800087F48412841287F08000822081788F8284010 +5C0D:1408140855083608147EFF080008224814287F2808083E0808080F0878282010 +5C0E:211017FE108003F8F20813F8120813F8120813F8280047FE0020FFFE08200460 +5C0F:0100010001000100010011101108110421042102410281020100010005000200 +5C10:01000100010009200910110811042104410001000000180024000380007E0000 +5C11:010001000100092009101108110421144110012000400080010002000C007000 +5C12:010001000280044008203118C106010009200910110821044104010005000200 +5C13:0800080008001FFC100021004100810001001110110821044102810205000200 +5C14:0800080008001FFC100421084100810001001110110821044102810205000200 +5C15:00003FF008100820083C10041004211441080920091011082104410405000200 +5C16:01000100092009101108210800000104FFFE01000280028004400830300EC004 +5C17:0200020003F8020002000200FFFE010001000920111021084104010005000200 +5C18:01000100092009101108210441040000010001003FF8010001000100FFFE0000 +5C19:010011101108210441043FF82008200827C824482448244827C8200820282010 +5C1A:010021081110092001003FF82008200827C824482448244827C8200820282010 +5C1B:0100010009200910110821044104101010101010545452529292101050502020 +5C1C:010009201110210800000100FFFE02800C603018C10609200910110825080200 +5C1D:01001110092001007FFE400280041FF0000000007FFC0400082010103FF81008 +5C1E:010001007FFC2288145008203FF8D0161FF010101FF001001110210845040200 +5C1F:00103E1022103E5422523E520090FF12080408082F102860298058004FFE8000 +5C20:22102210FF1022103E5422523E5222902210FF1440045408620840107E2000C0 +5C21:100011FC9104550459FC1104FD0429FC2800291229D429182B104D524992810E +5C22:0400040004000400FFFE048004800480048008800880108210822082407E8000 +5C23:04400420081010082004444284420440044004400440084208421042203E4000 +5C24:0420041004100400FFFE048004800480048008800880108210822082407E8000 +5C25:20802080208021F8FD082A082888284828482808280828502822480247FE8000 +5C26:004024402240427C808425042444242424242404240424282412440243FE8000 +5C27:0200020002FC7F20014000840764381C0000FFFE04400440044008423042C03E +5C28:0420041004100400FFFE049004A004C8049008A408C8109210E221824E7E8000 +5C29:000024FC22204220802024F8242024202420242025FC24002402440243FE8000 +5C2A:200023F820402040FC40284029F028402840284028402BF82802480247FE8000 +5C2B:000001FCFE202420242025FC242024202420242027FE24002400440243FE8000 +5C2C:2020202020502088FD042A022888288828882888290829082A0A480247FE8000 +5C2D:010001007FFC010009200820FFFE082008207FFC04400440084010422042C03E +5C2E:200023F820882090FCBC290429142A4828402BFC28E029502A4A484247FE8000 +5C2F:2080208021F82208FDFE2900297829482968295029442A442C3E480247FE8000 +5C30:203C21E0202023FEFC2029FC292429FC292429FC282029FC28204BFE480287FE +5C31:20401050FE48004800407DFE4450445044507C501090549092921112510E2200 +5C32:2088205023FE2050FDFC28542BFE285429FC285028D829542A52485247FE8000 +5C33:20F8208820E820A8FDFC290428F8288828F8288828F82888288848AA489287FE +5C34:2090229022BC22D0FE882A8828002BF82AA82AA82AA82FFE2802480247FE8000 +5C35:202021FC212421FCFC202BFE290429FC290429FC290429FC28884906480287FE +5C36:03E8FE882BCE2A502BE42A822BE0280029FC2954295429542BFE480247FE8000 +5C37:23E8228823CE2250FFE42A822BE0280029FC2954295429542BFE480247FE8000 +5C38:00001FF810081008100810081FF8100810001000100010002000200040008000 +5C39:000000003FF004100410FFFE041004103FF00410040008000800100020004000 +5C3A:00001FF810081008100810081FF8108010801080104010402020201040088006 +5C3B:00003FF8200820083FF8210021002FE0212021202220222044224422881E1000 +5C3C:00001FFC1004100410041FFC10001200120C123013C012022202220241FE8000 +5C3D:00001FF81008100810081FF81048104010202310208840068C00030000800040 +5C3E:00003FFC200420043FFC200020F02F00210021F02F00210021F85F02410280FE +5C3F:00003FF8200820083FF82080208020882ED022E022A024A04490488892840100 +5C40:00003FF8200820083FF8200020003FFC200427E42424242447E4400480280010 +5C41:00003FF8200820083FF820002840284028442F4828502860484449448A440C3C +5C42:00003FFC200420043FFC200020002FFC200020003FFE2100221044084FFC8404 +5C43:00003FFC200420043FFC2000200027FC240424442444244424B4410846049802 +5C44:00003FFC200420043FFC208020402FFE28023124212022102210440848049002 +5C45:00003FF8200820083FF8208020803FFE208020802FF82808480848088FF80808 +5C46:00003FFC200420043FFC2000208028842BE4288428842FF4280448044FFC8004 +5C47:00003FFC200420043FFC200027FC24442444244427FC24442444444447FC8404 +5C48:00003FF8200820083FF820802888288828882FF820803084508450849FFC0004 +5C49:00003FF8200820083FF820902490249024903FFC2490249044F04400840007FE +5C4A:00003FF8200820083FF82080208020802FF8288828882FF8488848888FF80808 +5C4B:00003FFC200420043FFC20002FFC2100221027F8208820802FFC40804080BFFE +5C4C:00003FFC200420043FFC200027FC2404240427FC20402FFE2842484A48448040 +5C4D:00003FFC200420043FFC200020003FFE2420242427A828B0352042224422981E +5C4E:00003FFC200420043FFC2080249022A020803FFC21C022A02490488850868080 +5C4F:00003FF8200820083FF8241022202FF8222022203FFC22204220442084200820 +5C50:00003FFC20043FFC2020242029FE3020222025FC2C8434884450442084D80706 +5C51:00003FF8200820083FF82080249022A02FF828082FF828084FF8480888280810 +5C52:00003FFC20043FFC20002FF828002BF828002FFC2A482A5052205298A3060200 +5C53:00003FFC200420043FFC200027FC240427FC240427FC240427FC411042088404 +5C54:000002FE3C822082208220FE3E8024A024A224A424B82EA0F1224122021E0400 +5C55:3FFC200420043FFC222022203FFC222022203FFC244024442428451046088406 +5C56:00003FFC20043FFC210020802FF8241022203FFC208020804FF8408080800080 +5C57:00083F082108217E3F08204823283C2827083C0827A83C122402440243FE8000 +5C58:00003F7E210221043F082008237E3C0827083C0827883C2A2412440243FE8000 +5C59:00003FFC20043FFC20002EFC2A082AE82CA82AA82AA82AE84AA84E0888280810 +5C5A:00003FFC20043FFC20003FFE20802FFC28842CA42A9428844CA44A948884080C +5C5B:00003FFC200420043FFC210822102F7C221022103F7E22102210441044108810 +5C5C:00003FFC200420043FFC222824A82AA823FE24A82CA834A824B8448044FE8400 +5C5D:00003FFC200420043FFC212021202F3C212021202738212021204F3C41208120 +5C5E:00003FFC20043FFC20002FF820802FF828882FF820803FFC509457F490141008 +5C5F:3FFC20043FFC200024883FFE248824F8240027FC20402FFE415042488C460040 +5C60:00003FFC20043FFC2080208827F020A03FFE208023F826085BF8420883F80208 +5C61:3FFC20043FFC249022A03FFC22A02490288821003FFC2210472040C083300C08 +5C62:3FFC20043FFC20802FF828883FFE28882FF8249027F021005FFE441083E01C1C +5C63:3FFC20043FFC22102410289C3090229025FE2C103490249C44904550863E0400 +5C64:3FFC20043FFC221021202FFC2A9429A42FFC200027F8240847F8440887F80408 +5C65:3FFC20043FFC210029FE320021FC250429FC390429FC288049FC4A8888700B8E +5C66:00003FFC20043FFC2000252428A831FC24A8292438402BFE4888499088700B8C +5C67:3FFC20043FFC244825482BFE354825782D0035FE242027FE44A8452486220420 +5C68:3FFC20043FFC242029FC312423FE25242DFC34A824F8244045FE44888470058C +5C69:3FFC20043FFC220025FC284033FE24882D74365225FC2504457445548574050C +5C6A:3FFC20043FFC20402FFE288227FC21102BFA260C2BFA220843F84040844808C4 +5C6B:3FFC20043FFC200022FE2A202BFE2E4422BA23283EFE2A824ABA4AAA92BA2286 +5C6C:3FFC20043FFC249022A024902FF829482FFC24842FF4349447F440948FF40008 +5C6D:3FFC20043FFC220823F8220823F8211022082FBE28A22FBE48A24FBE851408A2 +5C6E:01000100210821082108210821083FF801080100010001000100010001000100 +5C6F:010001000100FFFE010021082108210821083FF8010001020102010200FE0000 +5C70:101008100820FFFE010001002108210821083FF802080400040008003000C000 +5C71:01000100010001002108210821082108210821082108210821083FF800080000 +5C72:0008007C078078000100010001002108210821082108210821083FF800080000 +5C73:060001000280044008203118C10601002108210821082108210821083FF80008 +5C74:010001002108210821083FF8020002007FF80208040804080808100820504020 +5C75:01002108210821083FF8000000003FFC20002000200020002000400040008000 +5C76:010001002108210821083FF8000000007FF8040804080808080810082050C020 +5C77:1000100013F810885490549054A054BC5484548455045D046504020402280410 +5C78:1000100011FC102054205420542054205420542054205C206420002003FE0000 +5C79:10401040108010FE5500560054FC54085410542054405C806502010200FE0000 +5C7A:1000100011F8100854085408540855F85508550055005D006502010200FE0000 +5C7B:1000100011FC104454445544554455445544564454445C846484010402280410 +5C7C:1000100013FC109054905490549054905490549054905C9265120112020E0400 +5C7D:100011FC1020102054205420542057FE5420542054205C206420002000200020 +5C7E:102010201020102055245524552455245524552455245D24652401FC00040000 +5C7F:104010401040107E54405480548054FC5404540454045DF46404000400280010 +5C80:0100010021082108210821083FF80000010041044104410441047FFC00040000 +5C81:01002108210821083FF80200020007F00810141022200140008003001C00E000 +5C82:01002108210821083FF8000000003FF00010001000103FF02000200420041FFC +5C83:01002108210821083FF8000000003FF802081208120822080408080810506020 +5C84:100010FC10841084548454FC54845484548454FC54845C846504010402140408 +5C85:1008101C11E01100550055FC554455445544552855285D106510022802440482 +5C86:1008103C11E010205420542057FE54205420545054505C506488008801040202 +5C87:01002108210821083FF800000C0070FC4084408440844C847094408800800080 +5C88:100011FE1008108854885488550855FE5418542854485C886508020800280010 +5C89:10801080108010FC55545654545454945494552456245C446444008401280010 +5C8A:00003FF8210821083FF82000200220021FFE010001002108210821083FF80008 +5C8B:100013FC1084108854885490549C54845544554455285D286610022804440182 +5C8C:0100210821083FF800003FF0082008400CF80A08111010A0204020A043188C06 +5C8D:100011FC1088108854885488548857FE5488548854885C886488010801080208 +5C8E:101010901090108855085504560455FA5488548854885C886508010802280410 +5C8F:100011FC10001000540057FE549054905490549054905C9265120112020E0400 +5C90:10201020102013FE54205420542055FC5484548854485C506420005001880606 +5C91:0100210821083FF80100028004400A203118C1061FE000200040004000800100 +5C92:10201020105010505488554456225420540055FC54045C086408001000100020 +5C93:1008101C10E010805480548054FE54885488548854885C886508010802080408 +5C94:0440082010102FE8C4260420082010A06040010001002108210821083FF80008 +5C95:01002108210821083FF801000280044008203458C44604400440084008401040 +5C96:100011FE1100110455445528552855105510552855285D446584010001FE0000 +5C97:0100210821083FF800003FF82008204824482288210822882448280820282010 +5C98:100011FC1104110455245524552455245524555454505C90649001120212040E +5C99:001000F83F00010002007FFC044008203018C10601002108210821083FF80008 +5C9A:0100210821083FF800001FF0101010501450129011101292244A284A40068002 +5C9B:010002001FF0101012101150102010001FFC0204222422243FE4000400280010 +5C9C:0100210821083FF800003FF82108210821083FF820002002200220021FFE0000 +5C9D:0100210821083FF8080008001FFC2400440087F00400040007F8040004000400 +5C9E:10801080108010FE554055405640547C5440544054405C7E6440004000400040 +5C9F:10201020102011FC5524552455245524552457FE54205C506450008801040202 +5CA0:100010FE10801080548054FC548454845484548454FC5C806480008000FE0000 +5CA1:00007FFC40044824442444445FF4410441044924492449244FE4400440144008 +5CA2:0100210821083FF800000000FFFE001000101F90109010901F90001000500020 +5CA3:10801080110011FC5604540455E455245524552455E45D246404000400280010 +5CA4:20402020202023FEAA02AC04A800A890A890A890A888B908C908010402040402 +5CA5:10101010101011FE55125514551055FC5544554455285D286510022802440482 +5CA6:01002108210821083FF80200010001007FFC00001010082004400000FFFE0000 +5CA7:0100210821083FF800007FF80408080810502020DFF81008100810081FF81008 +5CA8:100010F810881088548854F854885488548854F854885C886488008803FE0000 +5CA9:01002108210821083FF8000000007FFC040004000FF818082808C8080FF80808 +5CAA:0100210821083FF804403FF8044804481FF8144024403FFC0844105420484040 +5CAB:102010201020102055FC552455245524552455FC55245D246524012401FC0104 +5CAC:100011FC11241124552455FC55245524552455FC55245C206420002000200020 +5CAD:1020102010501050548855245612541055FC540454085C886450002000100010 +5CAE:10201010101011FE5502560454805488549054A054C05C8264820082007E0000 +5CAF:100011FE1010101054205420546854A45522562254205C206420000003FE0000 +5CB0:2010209020902110A97EAA52AB92A892A912A912AA52BBD2C8620022004A0084 +5CB1:089008881080309E57E0908010441034110C010021082108210821083FF80008 +5CB2:100011FC110411045504550455FC54505450545054505C9264920112020E0400 +5CB3:00701F80100010001FF8108010801080FFFE010001002108210821083FF80008 +5CB4:1008101C10E0108054805480548054FE5488548854885C886488008801FE0000 +5CB5:102010201020102055FE54205420542055FC550455045D046504010401FC0104 +5CB6:10201020104011FC550455045504550455FC550455045D046504010401FC0104 +5CB7:100011FC11041104550455FC5520552055FE552055205D106512014A01860102 +5CB8:0100210821083FF800003FFC20002FF8208020803FFE20804080408080800080 +5CB9:100013FC108410845484550455145608540055FC55045D046504010401FC0104 +5CBA:0100210821083FF8010002800C603218C1061FE0002000400C80030000800040 +5CBB:1004101E11F0111055105510551055FE5510551055105D08650A014A01A60112 +5CBC:100011FC10201020552454A454A8542057FE542054205C206420002000200020 +5CBD:0100210821083FF8020002007FFC0400090011003FF801001110210845040200 +5CBE:1020102010201020543E54205420542055FC550455045D046504010401FC0104 +5CBF:0100210821083FF8000008004BF848084808480849F848084808100813F82008 +5CC0:01002108210821083FF80000010001003FF8210821083FF8210821083FF82008 +5CC1:0100210821083FF800000C0070FC4084448444845C8464944888088010806080 +5CC2:10401040107C108455885650542054505488570654605C10640800C000200010 +5CC3:020821081110102000007FFE400281040100210821082108210821083FF80008 +5CC4:100013FC110410885450542054D85726542055FC54205C2067FE002000200020 +5CC5:1020102010401088550457FE54025488548857FE54885C886508010802080408 +5CC6:10201020105010885504560255FC5400540055FC55045D046504010401FC0104 +5CC7:0100210821083FF8010002800C603018CFE600001FF01010101010101FF01010 +5CC8:2080208020F82108AB10ACA0A840A8A0A918AA06ADF8B908C908010801F80108 +5CC9:0100210821083FF808000FF010202C4003801C70E00E1FF0101010101FF01010 +5CCA:040008003FF0201020103FF020003FF8200820083FF80100210821083FF80008 +5CCB:1080108011FC1104560455E45524552455E4552455245DE46504000400280010 +5CCC:100011FE102010405488550455FE54225420542055FE5C206420002003FE0000 +5CCD:2020202021FC2024ABFEA824A9FCA820A820A9FCA820B820CBFE002000200020 +5CCE:0100210821083FF800003FF020103FF020103FF02208211020A024402830300E +5CCF:100013FE10201020544055FC555455545554555455545D546554014401140108 +5CD0:10201010101013FE54205442548455F85410542254C45F086410002800C40302 +5CD1:0100210821083FF801000280044008203018CFE6010001001FF0010001007FFC +5CD2:100011FE11021102557A55025502557A554A554A554A5D7A65020102010A0104 +5CD3:1020102013FE102055FC542455FC552055FE5422542A5C546450008801040202 +5CD4:10401040104411F45448545057FE54405480558456985CE064820082007E0000 +5CD5:0100210821083FF802000100FFFE00001FF0101010101FF0101010101FF01010 +5CD6:20402020202023FEAA02AC44A840ABFEA888A888A908B8D0C820005000880304 +5CD7:1040104010FC1104560855FE5500557C5544554455545D4865420242023E0400 +5CD8:100013FE1000100055FC5504550455FC5504550455FC5D046400000003FE0000 +5CD9:10201020102011FC5420542057FE5408540855FE54085C886448000800280010 +5CDA:0100210821083FF8000002007FFC04401830E10E01001FF0010001007FFC0000 +5CDB:0100210821083FF800047F84082408241F24212451240A24040408043014C008 +5CDC:0100210821083FF801000280044008203118C10609F00900090009007FFC0000 +5CDD:0100210821083FF800003FF820082FE8200827C82448244827C8200820282010 +5CDE:0100210821083FF808001FE020205FFC900017F0141014542424240443FC8000 +5CDF:0100210821083FF8040004007FFC08001FF028104FF088100FF0081008500820 +5CE0:10201020103E1020542055FE5400540055FE542054285C246422002000200020 +5CE1:10201020102011FC5420552454A454A8542057FE54505C506488008801040202 +5CE2:2002200227E2210AA90AA9EAA92AAA2AAB2AAAAAAC4AB84AC8820102020A0404 +5CE3:1080108010BC13C05450542454D4570C540057FE54905C9065120112020E0400 +5CE4:1008103C11E01020542057FE545054885504568A54885C886488010801080208 +5CE5:1080108010F81108561055FC5424542455FE542454245DFC6424002000A00040 +5CE6:02000100FFFE044014501448244444440100010021082108210821083FF80008 +5CE7:10401020102013FE54005488550456025488548854505C506420005000880306 +5CE8:101010D813941094549057FE54905494549454D857985C9064AA00CA02860102 +5CE9:010041047FFC0000064038500848FFFE084008400E2478280812082A28C61302 +5CEA:10001050104810845524542054505488550656F854885C886488008800F80088 +5CEB:200027DE20922292AA94AA94ABD8A894A992A992AA92BA9ACC94089002900110 +5CEC:1028102413FE1020542055FC5524552455FC552455245DFC652401240124010C +5CED:1020112410A410A8542055FC5504550455FC550455045DFC6504010401140108 +5CEE:200023F820882088AFFEA888A888ABF8A900A900ABF8BD08C908010801F80108 +5CEF:010041047FFC08001FF0282007C01830E10E1FF001001FF001007FFC01000100 +5CF0:1040104010FC10885550542054D8572654F8542054F85C2067FE002000200020 +5CF1:000045FC2824102429FC484488440BFE18002820482089240924092451FC2004 +5CF2:0100210821083FF800000608780808480848FF481C482A484948880808280810 +5CF3:0100210821083FF8000010401040247E24886488A54824502420205020882306 +5CF4:100011FC1104110455FC5504550455FC5504550455FC5C50645000920112020E +5CF5:2040202023FE2202AC44A840ABFEA840A890A890A910B920CA24024204FE0842 +5CF6:020004001FF010101FF010101FF010001FFC10001FFC020422243FE400280010 +5CF7:0100210821083FF8020001003FF808200440FFFE010001007FFC010001000100 +5CF8:2028202420242020ABFEAA20AA24AA24ABA4AAA8AAA8BA90CA9205AA04460882 +5CF9:010002800C603018CFE601003FF801001110250802000100210821083FF80008 +5CFA:100013FE1020102055FC5524552455FC5524552455FC5D2064A0004000B0030E +5CFB:2040204020882104ABFEA802A888A944AA42A8F8A988BA50C820005001880606 +5CFC:10201120112011FC55205620542057FE5400540055FC5D046504010401FC0104 +5CFD:10201020102013FE5420542055245524552456AA54205C506450008801040202 +5CFE:200C11F08100490009FE1110E11022102210251001002108210821083FF80008 +5CFF:100013FE1040104055FC5484548457FE5400540055FC5D046504010401FC0104 +5D00:0100210821083FF8020001001FF010101FF010101FF011081090126014181806 +5D01:0100210821083FF81080108010FC7D041248104010401CA0E0A0411002080C06 +5D02:2088208823FE2088A800ABFEAA02AC44A840ABFCA844B884C884010402280410 +5D03:20402040204027FCA840AA48A948A950AFFEA8E0A950B950CA48044408420040 +5D04:10201020105010505488550456FA54005444542455245CA86488001003FE0000 +5D05:10401040107C1084550856FE5492549254FE549254925CFE64920112010A0204 +5D06:20402020202023FEAA02AC94A908AA04A800A9FCA820B820C820002007FE0000 +5D07:0100210821083FF8020001007FFE40029FF400007FFC01001110210845040200 +5D08:020001007FFE40029FF400007FFC11102108450402000100210821083FF80008 +5D09:1020102213B410A854A8552456A2544055FC550455045DFC6504010401FC0104 +5D0A:2088208820882088ABDEA888A888A99CA9DCAAAAAAAABCC8C888008800880088 +5D0B:0100210821083FF800007FFC11101110FFFE111011107FFC0100FFFE01000100 +5D0C:100011FE1102110255FE5510551055FE55105510557E5D4265420242027E0442 +5D0D:10201020102013FE542055245524552456AA547054A85CA86524022204200020 +5D0E:1020102011FC10505488550457FE540855E8552855285DE86528000800280010 +5D0F:201C23E0222023FEAA20AA92AB0AAA06A9FCA904A904B9FCC904010401FC0104 +5D10:100011FC1104110455FC5504550455FC5400551255D45D18651001520192010E +5D11:0100210821083FF800001FF810081FF810081FF82080208C3EF020822682387E +5D12:0100210821083FF8020001007FFC0820145022880100FFFE0100010001000100 +5D13:200023FE22222222ABFEAA22AA22AAFAAA8AAA8AAA8ABAFACA8A020203FE0202 +5D14:010041047FFC090008801FFC108030805FF8908010801FF8108010801FFC1000 +5D15:100011FE11101110557C5510551055FE5500551055105D7C6510021002FE0400 +5D16:0100210821083FF800003FFC20802FF820803FFC200020804FF840809FFE0000 +5D17:0100210821083FF800007FFC482444445FF441044924492449244FE440144008 +5D18:1020102010501088550456FA540055FC5554555455FC5D54655401540104010C +5D19:0100210821083FF802800C6037D8C0063FF8248824883FF82488248824A82010 +5D1A:2020202021FC2020A820ABFEA888A944AA42A8F8A988BA50C820005001880606 +5D1B:200023FE22022202ABFEAA10AA92AA92AA92AAFEAA10BA92CA92049204FE0802 +5D1C:2008203C21E02020ABFEA8A8A8A8A8A8ABFEA8A8A8A8BBFEC820002001FC0000 +5D1D:1020102013FE102055FC542057FE540055FC550455FC5D0465FC010401140108 +5D1E:2040202023FE2000A9FCA904A9FCA800A9FCA808A810BBFEC820002000A00040 +5D1F:0100210821083FF8010002800C603018CFE6010001003FF811100920FFFE0000 +5D20:1020102013FE102055FC552455FC552455FC542054705CA86124062200200020 +5D21:200021FC20082010AA22AAAAAA72AA22AA72AAAAAB26BAA2CA42020203FE0002 +5D22:101E13E011221094540055FC5424542457FE542454245DFC6424002000A00040 +5D23:010041047FFC00701F8001007FFC05401930E10E04007FFC08201C4003807C78 +5D24:21842068203020C8AB24A820ABFEA840A8FCA984AAFCB884C8FC008400940088 +5D25:1040108011FC1124552455FC5524554455FC549055105FFE6410001000100010 +5D26:2040208027FE2110AA48AC46ABF8AA48AA48ABF8AA48BA48CBF800420042003E +5D27:0100210821083FF8101010901090FD0831483A44544250909088110813FC1104 +5D28:1020102013FE102055FC542457FE542455FC542055205D3E652002A0027E0400 +5D29:0100210821083FF800003E7C224422443E7C224422443E7C224422444A948508 +5D2A:1040102013FE100054885488555456225400542057FE5C206420002000200020 +5D2B:0100210821083FF800003FF820083FF820802490249027F02080488848888FF8 +5D2C:0100210821083FF80100FFFE01003FF821083FF821083FF803800D603118C106 +5D2D:0100210821083FF81000100CFEF0208048807EFE08880E88F888490809080A08 +5D2E:0100210821083FF800003FF8210821082FE8210827C8244827C820083FF82008 +5D2F:10201020105010885504560254F85420542055FC54205D2464A400A803FE0000 +5D30:1092109211241248552454925492540055FE552255225DFE6522012201FE0102 +5D31:0100210821083FF800003F0421243F2421243F24212421243F24120421144088 +5D32:1020104011FC110455FC550455FC540057FE542054205DFC6420002003FE0000 +5D33:204020A021102208ADF6A800ABC4AA54AA54ABD4AA54BA54CBD40244025402C8 +5D34:0100210821083FF8002800243FFE20202FA422242FA824982D12422A45468882 +5D35:100010FC108410FC548454FC540055FE548054FE552A5E4A6492012200540088 +5D36:0100210821083FF8080008087F0808FEFF08084808287F2808080F08F0284010 +5D37:10881048105013FE5450545055FC55545554558C55045DFC6504010401FC0104 +5D38:100013FE1020104055FC5504550455FC550455FC55045D0465FC000000880104 +5D39:2040202021FC2000A888A850ABFEAA22AC24A9FCA924B924C934012800200020 +5D3A:0100210821083FF820401040FEFE212020AC3CB425E424AC24A044A25482887E +5D3B:211021102210247CA910A910AAFEAE08AA08AAFEAA08BA48CA28020802280210 +5D3C:100011FC1104110455FC5504550455FC540057FE54205D20653C012002A0047E +5D3D:0100210821083FF800001FF0111011101FF0111011101FF001004884481287F2 +5D3E:200023FE20502050ABFEAA52AA52ABFEA800A840AFFEB888C990006000D80304 +5D3F:100011DC1154115455DC540055FC540057FE548054FC5C046404000400280010 +5D40:0100210821083FF80000084008207EFC082018201CFC2A202A20482089FE0800 +5D41:1088108813FE108854F8548854F85488548857FE55005D486584010001FE0000 +5D42:0100210821083FF8004013F8204847FE884813F8304053FC904017FE10401040 +5D43:1020101011FE10005484544855FE55085510556455085D1265640208023004C0 +5D44:2104208823FE2020A820A9FCA820A820ABFEA800A820BBFEC820005000880306 +5D45:0100210821083FF8002800243FFE20202FA420242FA8289828924FAA40468082 +5D46:0C487044104013FEFC503890549091121212110E01002108210821083FF80008 +5D47:08481C44F04013FE1050FC5010923892350E5420502091241124112411FC1004 +5D48:203C27C022442128A800ABFCA880A880AFFEA900A9F8BA88CA50042008D80306 +5D49:2040202023FE2000A9FCA904A9FCA800ABFEAA02A9FCB820C820002000A00040 +5D4A:203823C0204027FCA950A954AF58A954AB54AD4CA8E0B950CA48044408420040 +5D4B:100011FE1112111255FE5500557E55425542557E55425D7E62420242047E0842 +5D4C:0100210821083FF800202220223EFF42229422103E10221022283E2822440082 +5D4D:00407F40127E0C88FF4819482A504820A850118C01002108210821083FF80008 +5D4E:21FC2124212421FCA924A924A9FCA820A820ABFEAA22BA2ACAFA020A02020206 +5D4F:010041047FFC00002448238824483FF81010220847E40820144003801C70E00E +5D50:0100210821083FF800001FF0101010D01710111017D0155027CA212A4FE68022 +5D51:100011FC110411FC550455FC548055FE5622552255525D0265FA000200140008 +5D52:00001FF0101010101FF000007C7C444444447D7C01002108210821083FF80008 +5D53:0100210821083FF800001FF0101010101FF000007EFC4284428442847EFC4284 +5D54:010041047FFC00001FF011101FF011101FF00000FFFE111010A014401830100E +5D55:2000208822522222AA52AA8AAA02ABFEA888A944AA7AB888C950002000D80706 +5D56:1020102013FE107054A85524562255FC550455FC55045DFC6504000003FE0000 +5D57:0100210821083FF8004800443FFE20402F4422442A282AA83112422A44C69B02 +5D58:2088208823FE2088A800ABFEAA02AC24A820ABFEA870B8A8C8A8012402220020 +5D59:0100210821083FF800000C1070901050FC903050381E55F05010901010101010 +5D5A:0100210821083FF8104010403E7C4084BD2810201020FE501050148819041202 +5D5B:0100210821083FF802800C6037D8C0063E0822483E4822483E48220822282610 +5D5C:010041047FFC020001003FF808200440FFFE00101F90109010901F9000500020 +5D5D:2020212420A82020ABFEA8A8A924AA02A840AFFEA888B908C990006001980604 +5D5E:010002800C603018CFE601003FF80100111025080200101092929292FEFE0202 +5D5F:010041047FFC00003FFC2280224027FC2C4037F8244027F82440444047FC8400 +5D60:101E13E0112210945440548855F0542054C455FE54225C2063FE005000880306 +5D61:010041047FFC044008203218C4460FE000207EFC224412240A1412242A544488 +5D62:102010201050104854A455FE568454FC548454FC54805CFC65440144027C0044 +5D63:1020101011FE1110557C551455FE5514557C5510557C5D4465440244027C0444 +5D64:08202AA42CA84920145022887FFE40028104010021082108210821083FF80008 +5D65:2104210421DE2244AD54A89EA904AA24AC24ABFEA870B8A8C924062200200020 +5D66:102011241124112455FC540057FE540055FC550455045DFC6488005003FE0000 +5D67:204023BE22122292AA52AAAAAB24A840ABFEAA22AA22BBFECA22022203FE0202 +5D68:2040208021FC2104A904A9FCA900A9FEA900A9FEA802BAAACAAA040200140008 +5D69:010041047FFC0200FFFE00001FF010101FF000007FFC40044FE448244FE4400C +5D6A:2040202023FC2000A9F8A908A9F8A800ABFCAA04AAF4BA94CAF4020402140208 +5D6B:20842044204823FEA884A884A908A94AAA52AB9CA884B908C908025203DE0042 +5D6C:0100210821083FF8020004003FF821083FF821083FF8029004A808FA308AC07E +5D6D:2040202023FC2108A890ABFEAA02AC44A820ABFCA880B8F8C888010801280210 +5D6E:1020102013FE102055FC550455FC550455FC550455FC5D0463FE008801040202 +5D6F:11081088109013FC544055F8544057FE5480550055FC5E206420082003FE0000 +5D70:10881050100011FE545055FC545457FE545455FC54505CD86554025200500050 +5D71:2040202023FE2202AC94A908AA64A890A908AA04ADFAB908C908010801F80108 +5D72:1020104011FC110455FC550455FC550455FC542057FE5C7064A8012402220020 +5D73:0100210821083FF8082004407FFC01003FF80200FFFE080037F0C0801FFC0000 +5D74:2040224821502248ACA4A918AE06ABF8AA08ABF8AA08BBF8CA08020802280210 +5D75:0100210821083FF8004078404BFC48404FFE78104FFE48104A10791048500020 +5D76:200023DE20422042ABDEAA10AA10ABDEA842AA52A94AB94ACA52004202940108 +5D77:2124212422242424A954A94AAA92AE10AA10AA50AA5CBA50CA5002B0029E0300 +5D78:0100210821083FF81110211041108AA8144430405240927C1240154014FE1800 +5D79:010041047FFC00007CF8048804F87C2041FC41247D2405FC042004242BFE1002 +5D7A:200027BC208424A4AA94ACA4A850A988AE26A8C0AB10B864CB88003000C00700 +5D7B:1020101011FE1110557C551455FE5514557C551055925D546538025402920430 +5D7C:2040202023FC2000A908A890ABFEAA20AAA0AAFCAB20BA20CAFC0420042009FE +5D7D:2154215423FE2154A954AA72AC00ABFEAA22A820A9FCB924C9240124012C0020 +5D7E:010041047FFC08201FF0102025487EFC04401930E64E1990062018C007003800 +5D7F:010041047FFC00000000FDFC104011F8110811F8110811F8110811F850902108 +5D80:11FC102013FE122255AC542055AC540055FC540057FE5C8064FC000400280010 +5D81:102011FC112413FE552455FC542055FC552455FC54405FFE648801D00070038C +5D82:102011FC1088105057FE540055FC550455FC550455FC5C2067FE002000200020 +5D83:22002202223C2FA0AA20AFA0AABEAFA4AAA4AFA4AA24BFA4CA24024402440284 +5D84:0100210821083FF808067F7808407F40497E7F4849487F4808487F4808880908 +5D85:082008207F20087E7E4408A4FF2810101E28224446828100210821083FF80008 +5D86:2090209027FE2090ABFCAA94ABFCAA94ABFCA800A9F8B908C9F8010801F80108 +5D87:200023FE2200227CAA44AA44AA7CAA00AAEEAAAAAAAABAAACAEE020003FE0000 +5D88:0100210821083FF80440247C24A83D50042804487DFE24882448244844088418 +5D89:0100210821083FF800A0009079FE49204B204DFC492049FC7920492001FE0100 +5D8A:0100210821083FF810A01090F9FE11201B2015FC3120D1FC1120112051FE2100 +5D8B:1040108011FC110455FC550455FC550055FE550055FE5C0262AA02AA0202000C +5D8C:010041047FFC04001FF010101FF010101FF010001FFC10001FFC492484940008 +5D8D:100013DE10421252554A56525442542055FC550455045DFC6504010401FC0104 +5D8E:0100210821083FF800003F0821083F0820FE2E0820483F2844285508A4A80C10 +5D8F:010041047FFC00007FFE40005FDC45045FC4554459DC50505FD050525FD2904E +5D90:010041047FFC010079F04A9050606198560649F04A406BF8544043F8404047FC +5D91:208020F8210823FEAD12A922A9FEA840A8A2AB54A898BB34C854009203500020 +5D92:21042088200023FEAA22AAAAAA72AA22ABFEA800A9FCB904C9FC010401FC0104 +5D93:103C13E0112410A855FE54A85524560255FC552455245DFC6524012401FC0104 +5D94:0100210821083FF808401440227C5C8489283E2008204A5028500E8871042202 +5D95:2090208821FE2110AB10ADFEA910A910A9FEA910A910B9FEC90002A402520452 +5D96:204020A0211826E6A800ABF8AA08ABF8A800AFBCA884BCA4C29404A402940108 +5D97:208822AA22DC2488A954AA22A800ABFEAA42AC44ABFCB844C844008401140208 +5D98:0100210821083FF81090108813FEFC48103231CE3890548853FE9048103211CE +5D99:2020212420A823FEA8A8A924AA22A904A904A9DEAA44BD54C89E010402040404 +5D9A:010041047FFC01007FFC044028281FF02828CFE608200FE00100111025080200 +5D9B:1020102011FC102055545488550456FA548854F854885CF8642000A801240060 +5D9C:010041047FFC00003E7C081048907EFE1428244A46863FF820083FF820083FF8 +5D9D:202027A420A82292A914AA08ADF4A802ABF8AA08AA08BBF8CA0801100FFE0000 +5D9E:00407BFC488051F8622055FC488848F8688850F840884100210821083FF80008 +5D9F:2088205023FE2050A9FCA954A98CA974A904A9FCA808BBFEC908008800A80010 +5DA0:101811E0104013FE5488557456525470540055FC55045D74655401740104010C +5DA1:010041047FFC00003FFE289025102FBE22222AD42A902F902228442844448882 +5DA2:2020202021FC2020ABFEA908AB9CA908A988AE3EA800BBFEC89000900112020E +5DA3:010041047FFC010008801FFC30805FF810801FF810801FFC1000248822444244 +5DA4:010041047FFC01003FF80100FFFE08203EF808207EFC00007FFC04401842E03E +5DA5:20002FFE28002A28A948ABEEA892A884AAA0AAA8ABE8B888C894091409241242 +5DA6:108010F8110813FE5544559255FE5500557C5500557C5D00657C0244027C0444 +5DA7:100011FC115411FC542055FC542057FE5488545055FC5C2067FE002000200020 +5DA8:0A803138228838382288393822887FFE4002810401002108210821083FF80008 +5DA9:105011FC115411FC555455FC540055FE5500557C55005DFE6550015401480266 +5DAA:010041047FFC24481450FFFE082004407FFC01003FF80100FFFE05401930E10E +5DAB:2050225221542050ABFEA888A850ABFEA820A9FCA820BBFEC8A8012406220020 +5DAC:2104208823FE2020A9FCA820ABFEA854A992A890ABFEB890C8D4038A009601A2 +5DAD:0100210821083FF810407C2045FC44887C5043FE40207C2045FC44207C204420 +5DAE:1020102010501088550456FA5400540055DC555455545DDC6488008801540222 +5DAF:41047FFC00003E2822243E240020FFFE22203E2822283E1022122F2AF2464282 +5DB0:210021DE224A248AABEAAAB6AAA4ABF4AABEAAA4ABE4BABECAA402A402240464 +5DB1:108813FE108811FC550455FC550455FC548055FE56225D52650201FA000A0004 +5DB2:010041047FFC08801FFC30805FF890801FF810801FFC10003E7C224423D42008 +5DB3:21083FF800007FFC06003B0804B019C062A00C98732610207CFC10201E20F1FE +5DB4:04003FF82008292825482FE8254829280200FFFE08203118D11611101FF00010 +5DB5:200023FC22942294ABFCA800A890AF9EA890A890AB9CB890C890079E00900090 +5DB6:010041047FFC000022204AA08ABE1FC420A46F24A0282F28291029A829443082 +5DB7:010041047FFC0000247C3A0422281E1020FE3E124850085E7F5014B0229E4100 +5DB8:208822AA22DC2488A954AA22A800ABFEAA22A820ABFEB870C8A8012406220020 +5DB9:202023FE202021FCA800ABFEA802A9FCA820ABFEA800BBFEC80403BE02A4038C +5DBA:010041047FFC100013FC284045F8930809F8FD0805F8090851F8200010900108 +5DBB:010041047FFC08207F280824FFFE12203FA46424BFA824183F92242A3FC62082 +5DBC:2140224C22642244AB4CAA64AAA4ABACAAA4AAA4AFFEB800C910010802040404 +5DBD:0100210821083FF8001052182F945014977E1010372850289728154457442082 +5DBE:203E27C022442128ABF8A840AFFCA800ABF8A808ABF8B808CBF80544052A08FA +5DBF:200021FC202023FEAA22A9ACA820A9ACA800ABFEA820B9FCC95401540154010C +5DC0:010041047FFC08002A284D240820142E3F706424BF2424283F12242A3F462082 +5DC1:200023FE224823FEAA48AAFCAAA4AAFCAAA4AAFCAA20BBFEC32A057A050A0906 +5DC2:21083FF808801FFC30805FF890801FF810801FFC10003FFC24242BD4224423CC +5DC3:41047FFC08407F7C2240147CFF04007C7F40417C7F40417C7F40417C4542423E +5DC4:2110209023DE2010AA5EA982ABDEA810ABDEAA50ABDEBA50CBDE0250025202CE +5DC5:21083FF808007EFE08103E20227C3E4422543E5422543E542254FF2824444282 +5DC6:208822AA22DC2488A954AA22ABFEAA02A8F8A888A8F8B800C9FC010401FC0104 +5DC7:208820CC208A23E8AAA8AADEABA8AA6AAA0AABEAAC0CBFECCA2A03EA015607E2 +5DC8:010041047FFC000029007DFC29043A4411547CE455F47C4410E4FD5410541008 +5DC9:21F0221027FC2204ABFCAA24ABB8AA22A9FEAA10AFFCBA44CBFC00D0014A063E +5DCA:23DE225223DE2252ABDEAA52ABDEA98CAA52A840AFFEB888C990006000D80304 +5DCB:010041047FFC10007DFC44047CFC40047DFC44007DFE11225CFC50A45EACF020 +5DCC:41047FFC220811103FFC20002E20223C3FA829482F2829282F1049D07F288144 +5DCD:010041047FFC0C20704011FCFD2439FC552493FCFC24245A685E10902912C60E +5DCE:200027FE204022EEAAAAABEAAAAEAAE8ABAAACE6AA88BDF4CA90006001980606 +5DCF:208823FE208823DEAA52ABDEA8A0A890A9FEA920ABFCBD20C9FC012001FE0100 +5DD0:010041047FFC08007F7C00443E7C22443E7C00107F6441245DFE55245D244344 +5DD1:252827BE294827BEAB18ADAAA946ABFCAA04ABFCAA04BBFCCA0403FC01080204 +5DD2:210447C88812F3BC20084B92F83E0380AAAAABAA01002108210821083FF80008 +5DD3:010041047FFC22003CFE21101F7C52445E7C52445E7C52447F7C002824444282 +5DD4:21083FF808007EFE08103E20227C3E44227C3E44227C3E44227CFF2824444282 +5DD5:2108209027FE2108ABFEAA54ABC8AA3EABC8AA5CABC8B840CBFE00880070038C +5DD6:010041047FFC00001E7812483FFC20202E20223C3FC829282F2849905F288144 +5DD7:23DE225223DE2000ABFEAA00AAC8AA4EABEAAAB2AAEABAAACAEA02B405E4082A +5DD8:210821EC210A2FEAA928ABC8A93EAFE8A948ABE8AA28BB68CAA80BF40AB412A2 +5DD9:211027FE204022EEAAAAABEAAAAEAAE8ABAAACE6AA88BDF4CA90006001980606 +5DDA:010041047FFC08000F9008147F9248FE7E1048905FA851285F28554455449382 +5DDB:0000000008880888088811101110222022201110111008880888088800000000 +5DDC:0000041004100820082010402080410020801040082008200410041000000000 +5DDD:1004108410841084108410841084108410841084108410842084208440048004 +5DDE:1004108410841084108454A45294529490841084108410842084208440048004 +5DDF:02000100FFFE1000100010001FF800001110111011101110211021124112800E +5DE0:00007FFE00000888111022201110088800003FF80100010001000100FFFE0000 +5DE1:000021241124112402480248F490124812481124112411241000280047FE0000 +5DE2:088811102220111008883FF821083FF821083FF80100FFFE054009203118C106 +5DE3:22081108111000003FF821083FF821083FF80100FFFE054009203118C1060100 +5DE4:1084210810843FF82448238824483FF80000294825282948252A210A29463182 +5DE5:000000007FFC0100010001000100010001000100010001000100FFFE00000000 +5DE6:020002000200FFFE04000400040008000FF8108010802080408080803FFE0000 +5DE7:000003FEFC40104010801080110011FC100410041E04E0044004000400280010 +5DE8:00003FF82000200020003FF02010201020103FF020002000200020003FFC0000 +5DE9:000001F07D1011101110111011901150115011101D10E11242120212040E0800 +5DEA:00003FF8200020003FF0201020103FF0200020003FFC00007FF8000800080008 +5DEB:000000007FFC01000100111011101110292829284544858401000100FFFE0000 +5DEC:00007DF01110111011121D12E20E440001003FF80100FFFE028004401830600C +5DED:00407C4013FC104410441C84E114420801003FF80100FFFE028004401830600C +5DEE:082004407FFC010001003FF802000200FFFE0400080017F82080408080801FFC +5DEF:00207C1005FE08201048288445FE820200A87CA810A810A810AA1D2AE1264200 +5DF0:0020FE1055FE5420A848548455FE0002FEA810A810A810A81EAAF12A41260200 +5DF1:00003FF0001000100010001000103FF02000200020002004200420041FFC0000 +5DF2:00003FF0001000100010201020103FF02000200020002004200420041FFC0000 +5DF3:00003FF0201020102010201020103FF02000200020002004200420041FFC0000 +5DF4:00003FF8210821082108210821083FF82008200020002002200220021FFE0000 +5DF5:007C3F80200020003FFE200020002FF82888288828882FF828084802480287FE +5DF6:0000FEFC2284228442844A84848400FC7E8042804280428242827E82427E0000 +5DF7:044004403FF804400440FFFE044008201FF02828C8260FE008200808080807F8 +5DF8:00007F7C4844484448445E445244527C524052405E404842484248427F3E0000 +5DF9:1FC000447D88055009203118C50602003FF800003FF000103FF0200420041FFC +5DFA:00007CF8448844887CF84080428442843E7C00000000FFFE0000082010102008 +5DFB:0100111009203FF802007FFC082010102FE8C02600200FE008000808080807F8 +5DFC:00003FF0211021103FF02000200420041FFC00003E442258226022423E42223E +5DFD:00007CF844887CF8408042843E7C044004403FF804400440FFFE082010102008 +5DFE:0100010001003FF8210821082108210821082108210821282110010001000100 +5DFF:01000100FFFE0100010001003FF8210821082108210821282110010001000100 +5E00:00007FFC0100010001003FF82108210821082108210821282110010001000100 +5E01:000801FC7F00010001003FF82108210821082108210821282110010001000100 +5E02:0200010000007FFC0100010001003FF821082108210821082128211001000100 +5E03:020002000200FFFE0400090011003FF851089108110811081128111001000100 +5E04:0800080008FE7F1049104910491049104910491049104B100810081008500820 +5E05:082008204820482049FC49244924492449244924492409341128102020204020 +5E06:100011F011107D1055105510559055505550551055105D1211121212120E1400 +5E07:010001003FF80108FFFE01083FF8010001003FF8210821082128211001000100 +5E08:08000BFE48204820482049FC4924492449244924492409341128102020204020 +5E09:1010109010907C8855085504560455FA5488548854885C881108110812281410 +5E0A:1000100011FC7D24552455245524552455FC550055005D001102110210FE1000 +5E0B:00783F80208020803FFC20402822311A21061FF0111011101150112001000100 +5E0C:18180660018006603A180200FFFE048008801FF82888488888A8089000800080 +5E0D:020001003FFC200420043FFC2040204027FC2444244424444454444880400040 +5E0E:1020102010207DFE55225624542054205450545054505C50109010921112120E +5E0F:1020102010207DFE5420542054FC5420542055FE54225C22102A102410201020 +5E10:1080108410847C88549054A0548057FE54A0549054905C88108410A210C01080 +5E11:10001000FEFC2244642818102428C34601003FF8210821082128211001000100 +5E12:08A0109030BE57C0904010241014110C01003FF8210821082128211001000100 +5E13:1020102010207DFE54205420542055FC547054A854A85D241124122210201020 +5E14:1010101010107DFE55125514551055FC5544554455285D281110122812441482 +5E15:1020102010407DFC550455045504550455FC550455045D041104110411FC1104 +5E16:1020102010207C20543E54205420542055FC550455045D041104110411FC1104 +5E17:1050104810487C4055FE54405440547C54A454A454A85D281110122810441082 +5E18:020001007FFE400288241010210801003FF82108210821082128211001000100 +5E19:1020102011207D2055FC55205620542057FE542054505C501088108811041202 +5E1A:00001FF000100FF000101FF000007FFE410281041FF011101110115011200100 +5E1B:010002001FF010101FF010101FF0010001003FF8210821082128211001000100 +5E1C:1000100011FC7D04550455045504550455FC550454005C901088110412021402 +5E1D:020001003FF80000082004407FFE410281041FF0111011101150112001000100 +5E1E:100013FE10207C20544055FC55045504550455FC55045D041104110411FC1104 +5E1F:020001007FFC0440245044488944108001003FF8210821082128211001000100 +5E20:02001CF0101010101EF0101010101FF001003FF8210821082128211001000100 +5E21:1104108410887C0055FE548854885488548857FE54885C881108110812081408 +5E22:1020102010507C885504560255FC5400540055FC55045D041104110411FC1104 +5E23:1110091009207FFC02000400FFFE11102108DFF6111011101150112001000100 +5E24:10001000FE7C224442443444087C3400C20001003FF821082108212821100100 +5E25:102020207C20442045FC45247D24412441247D244524453445287C2044200020 +5E26:092009207FFC0920092000007FFE410281041FF0111011101150112001000100 +5E27:10201020103E7C20542055FC550455245524552455245D241050104810841104 +5E28:1104108410887C1055FC55045504550455FC545054505C9010921112120E1400 +5E29:1020112410A47CA8542055FC5504550455FC550455045DFC1104110411141108 +5E2A:100011FE11007D00557C5500550055FE5550555255545D481148124412521460 +5E2B:100023FE7C204420442045FC7D24412441247D244524453445287C2044200020 +5E2C:00003FF80208FFFE04083FF808001FF82808CFF800801FFC1084109410880080 +5E2D:010000803FFE222022203FFC2220222023E020802FF82888488848A888900080 +5E2E:0800087CFF4808507E480844FF54104820404100BFF821082108212821100100 +5E2F:092009207FFC09200FE000007FFE410281041FF0111011101150112001000100 +5E30:080009FC480448FC480449FC48004BFE4A22482049FC09241124113421284020 +5E31:2040204027FCF840ABF8A880AFFEA890A910A9FEAA10BA902450281020502020 +5E32:1044104410887DDC548854885488548855DE548854885C881088108810881108 +5E33:100010FC10807CF8548054F8548057FE5540552455285D101108114411821100 +5E34:10481044105E7DE054285412546A55965448545E55E05C2410281012106A1186 +5E35:2040202023FEFA02AD04A900A9DEAA52AA52AB52AC9AB894211021122212240E +5E36:145014507FFC1450245247CE80007FFC41041FF0111011101150112001000100 +5E37:1050104810807CFE5590569054FC5490549054FC54905C90109010FE10801080 +5E38:0100111009207FFE40028FE4082008200FE001001FF011101110115011200100 +5E39:2080204023FCF800A908A890AFFEA840A840AFFEA888B9082090206021982604 +5E3A:1088108811FC7C88548854F85488548854F8548854885DFE1000108811041202 +5E3B:2040204027FCF840ABF8A840AFFEA800ABF8AA08AA48BA48224820A021102608 +5E3C:200023FE2202FA02ABFEAA22AA22AAFAAA22AA32AA2ABBFE2202220223FE2202 +5E3D:200023FC2204FAF4AA04AAF4AA04A800A9F8A908A9F8B90821F8210821F82108 +5E3E:1020102211FA7C24542857FE5420544054FC558456845CFC1084108410FC1084 +5E3F:210021782108FA08AAFEAE40AA40AA7CAA90AA10AAFEBA102228222822442282 +5E40:10201020103E7C20542055FC550455FC550455FC55045DFC1000108811041202 +5E41:100013FE10207C4055FC5504550455FC550455FC55045D0411FC100010881104 +5E42:00007FFE40029FF410101FF010101FF00200FFFE09203FF8D116115011200100 +5E43:1040104011FC7C8457FE540055FC550455FC542057FE5C20122013FE10201020 +5E44:200023FC2204FA04ABFCAA00ABFCAA40AA88ABFCAA24BA2025FC2420282033FE +5E45:100011FE10007CF85488548854F8540055FC552455245DFC1124112411FC1104 +5E46:100011FC11047DFC550455FC548055FE5622552255525D0211FA100210141008 +5E47:080808087E0808FEFE0808487E2808080F28F11001003FF82108212821100100 +5E48:200023FC2204FA04ABFCAA00AA84AA48AAFCAA48AA48BBFE2448244828883108 +5E49:204821482148FBFEA948A948A978A900A9FEA820ABFEB87020A8212426222020 +5E4A:100011FC10207C2057FE540055FC550455FC550455FC5D0411FC108811041202 +5E4B:10783E4822482A86FF7822482A2842104A28854601003FF82108212821100100 +5E4C:100011FC11047DFC550455FC5420552454A8542057FE5C50105010921112120E +5E4D:101E11E010227D1254945480542055CE5502550255CE5D021102110211FE1102 +5E4E:200023FE2202F800A9FCA904A9FCA904A9FCA840A820BBFE2000208821042202 +5E4F:2040202023FEFA02A800A9FCA840A8A2AB34A858A894BB342052209023502020 +5E50:0020792448A849FC48407BFE49084A244C2279FC492449244934492848209820 +5E51:12101A902A904AA08FBE10442FA46224A2242FA82AA82A902AA82BA822442282 +5E52:1020104011FC7D24557C558C55545524555455FC54405C2412A2128A14881078 +5E53:2040208821FCF908AA52ABFEA850A988AE26A8C0AB10B8642388203020C02700 +5E54:200021F82108F9F8A908A9F8A800ABFCAA94ABFCA800B9F82090206021982606 +5E55:04407FFC04401FF010101FF010101FF00400FFFE11103FF8D116115011200100 +5E56:100013FE10507DFC5554555455FC540055FC540057FE5C2010A8112412A21040 +5E57:200023FE221AFA16ABFEAA12AAEAAAAAAAAAAAEAAA0EBA6A239A222623FE2202 +5E58:102013FE10207DFC542057FE540055FC550455FC55045DFC110411FC10881104 +5E59:1088108813FE7C88540055FC550455FC550455FC54205DFE1050108811041202 +5E5A:087CFF4808507E480844FF54104822405FF090101FF010103FF8210821180100 +5E5B:102011FC10887C5057FE540055FC550455FC550455FC5C2013FE102010201020 +5E5C:100011FC11047DFC550455FC542057FE540055FC55045DFC1020112412221060 +5E5D:200023DE2252FA52ABDEA800A9FCA924A9FCA924A9FCB82023FE202020202020 +5E5E:205022522154F850ABFEA888A850ABFEA820A9FCA820BBFE2050208821042602 +5E5F:2110209423D2F812AA50A990AFFEA810ABD2AA52AA54BBD4224A224A23D62022 +5E60:2080208021FEFB54AD54A954ABFEA954A954A954AFFEB8002154212A222A2000 +5E61:207827C02248F950ABFCA950AA48AC06ABF8AA48AA48BBF82248224823F82208 +5E62:102011FC10887C5057FE540055FC552455FC552455FC5C2011FC102013FE1000 +5E63:49202A207F3E49485DA86B2849104928404601003FF821082108212821100100 +5E64:082049202A3E7F4841A85D2855105D28424601003FF821082108212821100100 +5E65:212420A823FEFA02A8F8A888A8F8A80CA9F0A820A9FCB82023FE202020A02040 +5E66:00407C2045FC44887C5043FE7C20A5FC24203D2001003FF82108212821100100 +5E67:10F8108810887CF8540055DC5554555455DC542057FE5C7010A8112412221020 +5E68:210021F82208FFFEAA88AB24ABFEAA00AAFCAA00AAFCBA0022FC248424FC2884 +5E69:102011FC10207C8857FE548855FC550455FC550455FC5D0411FC108811041202 +5E6A:208823FE2088FBFEAA02A9FCA800ABFEA840A8A2AB54B8B82354209223502020 +5E6B:08083EFE08087F4808283E0809287FF028200FE008200FE001003FF821082118 +5E6C:202023FE2020F9FCA800ABFEA802A9FCA820ABFEA800BBFE200423BE22A4238C +5E6D:210827FE2108F800ABFCAA94AA94ABFCA828ABFEAA20BB2422A82292242A28C6 +5E6E:2040202023FEFA44ABF4AA44AAEEAA04AAF4AAACAAE4BA1422A4247425942808 +5E6F:2108210821EEFA94A842A800ABDEAA52ABD2AA52ABD2BA1A2294235022102010 +5E70:102013FE12227DFC542054F8542055FC542055FC55545DFC104012A4128A147A +5E71:23DE225223DEFA52ABDEAA22AAFAAA22AAFAAAAAAAFABAAA22FA227222AA2226 +5E72:00003FF801000100010001000100FFFE01000100010001000100010001000100 +5E73:00007FFC010001001110091009200100FFFE0100010001000100010001000100 +5E74:100010001FFC2080208040801FF8108010801080FFFE00800080008000800080 +5E75:00007C7C10101010101010101010FEFE10101010101010102010201040108010 +5E76:10100810082000007FFC0820082008200820FFFE082008201020102020204020 +5E77:0808080810107C7C1010101010101010FCFE1010101010102010201040108010 +5E78:010001003FF801000100FFFE082004403FF801000100FFFE0100010001000100 +5E79:102010201050FE5010887D0446FA7C2044207C2011FCFE201020102010201020 +5E7A:0200020004000810101020207FC02080010002000400082010103FF810080000 +5E7B:0800080011FC100422044204FC0404040804100424044204FE04420400280010 +5E7C:104010402040204045FC4444F84408441044108428844484FD04450402280410 +5E7D:0100010009200920514455547DF44924492455547DF44514410441047FFC0004 +5E7E:1110212045447978111025247D7C15241110FFFE1080108828522422405A8186 +5E7F:0100008000803FFC200020002000200020002000200020002000400040008000 +5E80:010000803FFE2000200022002204221822602380220022022202420241FE8000 +5E81:010000803FFE2000200020002FFE204020402040204020404040404081400080 +5E82:010000803FFE2000208020802080208020802140214022204220441088081006 +5E83:010000803FFE20002080208020802100210021002210220844084FFC84040004 +5E84:0100008000803FFC20002080208020802FFC208020802080208040805FFE8000 +5E85:010000803FFE20002100210022202220244028802100220844044FFE84020000 +5E86:010000803FFE20002080208020802FFC20802140214022204220441088081006 +5E87:010000803FFE20002420242024242428273024202420242245224622841E0000 +5E88:010000803FFE20802140222024102908308620802FF020104020402080400080 +5E89:010000803FFE204020402FFE204024442444244427FC204220424042403E8000 +5E8A:010000803FFE2000208020802FFC208021C022A022A024904888508680800080 +5E8B:010000803FFE208020803FFC208020802FF02410222021404080416086183806 +5E8C:010000803FFE200020002FFC2020242028202FFE20A021204620582080A00040 +5E8D:010000803FFE2000201C27E02400240027FE2420242024204820482090202020 +5E8E:010000803FFE2040204020A0211022082D162110211021104110421082100410 +5E8F:010000803FFE200023F8201020A020402FFE2042204420404040404081400080 +5E90:010000803FFE2100208027F824082408240827F8240824004400480088001000 +5E91:010000803FFE200020002FFC208020803FFE21402140224042424442883E1000 +5E92:010000803FFE20802080208020802FFC2080208020902088408840809FFE0000 +5E93:010000803FFE210021003FFC2200248028802FF8208020805FFE408080800080 +5E94:010000803FFE200020002104288424842448224822102210402040409FFE0000 +5E95:010000803FFE2000203C27C024402440244027FE242024202412450A46468422 +5E96:010000803FFE2200220027F8280837C82448244827C824282412440243FE8000 +5E97:010000803FFE20802080208020FC2080208027F8240824084408440887F80408 +5E98:010000803FFE2000200027FC2444244427FC2444244427FC2444404040408040 +5E99:010000803FFE2000208020802FF82888288828882FF82888488848888FF80808 +5E9A:010000803FFE200020802FF8208820883FFE208820882FF8414042208C183006 +5E9B:010000803FFE2000211021102512251425D8251025102510251245D25E12880E +5E9C:010000803FFE200022082208240824FE2C083488244824484408440884280410 +5E9D:010000803FFE2100210023F82610292020C023303C0E20C04020430080C00020 +5E9E:010000803FFE2220221022002FFC22402240224824502460484248C2933E2000 +5E9F:010000803FFE2080249028882FFE210021FC2284228824502420485051888606 +5EA0:010000803FFE241022203FFC208020802FF8208020803FFE2080408040808080 +5EA1:010000803FFE208020403FFE20802100228426882A5032204210428883060200 +5EA2:010000803FFE200020002FFC2100221027F8208820802FFC40804080BFFE0000 +5EA3:010000803FFE212021202924252821302120233025282924222042224422881E +5EA4:010000803FFE2000204027FC204020403FFE200020102FFC4210411081500020 +5EA5:010000803FFE20002220222024202DFE347024A824A825242622442044208420 +5EA6:010000803FFE222022203FFC2220222023E020002FF02410422041C08630380E +5EA7:010000803FFE20802490249024902AA831C420802FF8208040804080BFFE0000 +5EA8:010000803FFE2080208827F020A03FFE20802FF02620384047FC404081400080 +5EA9:010000803FFE20802140222024103BEC208020802FF820804490488892840100 +5EAA:010000803FFE24102410247E3F102410257C26443C4424284410442894440882 +5EAB:010000803FFE20803FFC20802FF828882FF828882FF820805FFE408080800080 +5EAC:010000803FFE221022083FFE224822502264224822522264444A447288C2133E +5EAD:010000803FFE20002E0E22F0241024102EFE221022102AFE4400460089FE1000 +5EAE:010000803FFE20002FFC21202FFC292429242A1C2C042FFC480448048FFC0804 +5EAF:010000803FFE204820442FFE204027FC244427FC244427FC2444444444548408 +5EB0:010000803FFE22082108211027FC2110211021102FFE21104110421084100810 +5EB1:010000803FFE208020802FFC20803FFE2408290433F22610492040C08730380E +5EB2:010000803FFE204020402FFE204022482248255428E2215042484C4680400040 +5EB3:010000803FFE2080210027FC244427FC248427FC212022203FFE402040208020 +5EB4:00803FFE221022102FFC221022103FFE200027F82408240847F84408840807F8 +5EB5:010000803FFE200020802FFC2120221024882FF6349027F0249047F24082807E +5EB6:010000803FFE2000222022203FFC22202220222023E020004A48492491240000 +5EB7:010000803FFE20802FF820883FFE20882FF8288024C422A84490488892860100 +5EB8:00803FFE20802FF820883FFE20882FF820802FF828882FF848884FF888880898 +5EB9:010000803FFE221022103FFE221023F0200027F8240827F84420441088081006 +5EBA:010000803FFE221024882924221027F8208820802FFC21C042A0449898860080 +5EBB:010000803FFE222022203FFC2220222023E020002410241044104A2891442082 +5EBC:010000803FFE280029FC28202E4029FC2904292429242B242D24485040888304 +5EBD:010000803FFE200027F8248827F8248827F820802FFC288448A44BF489140808 +5EBE:010000803FFE200022802CB8288828882EB8288828882FF8414042208C183006 +5EBF:010000803FFE211021102FFE2110200027FC2444244427FC2444444447FC8404 +5EC0:010000803FFE20402FFE2842224824B023082C0427F82208211040E043189C06 +5EC1:010000803FFE20002F84288428A42FA428A42FA428A42FA44024490488941088 +5EC2:010000803FFE20002200227C3F442244267C27442AC42AFC52446244827C0244 +5EC3:010000803FFE20402F5021242A1824083BF6212021202FFC212042244424881C +5EC4:010000803FFE20002F78294829482F862900297C2F4428442A2849104B288D46 +5EC5:010000803FFE20802FFC20803FFE220024082FFC20002FFC49244924BFFE0000 +5EC6:010000803FFE208021002FFC28842FFC28842FFC21482154425C44468842303E +5EC7:00803FFE2080277C2424252424A425542648208027FC244447FC444487FC0404 +5EC8:010000803FFE20002FFC208027F8240827F8240827F8220027F84A0841F09E0E +5EC9:010000803FFE220821102FFE212027FC21243FFE212427FC2330452859268120 +5ECA:010000803FFE220021002FBE28A22FA428A82FA42A2229222AAA4CA448208020 +5ECB:010000803FFE2140265C2444275C244427FC20402FFC2208211040E043188C06 +5ECC:010000803FFE22203FFE22223FFE240027FC240027FE2002224A4926500A8004 +5ECD:010000803FFE2400221E2F922014289825143FD220122F9A489448908F900890 +5ECE:010000803FFE200029FE282028FC2E8428FC288428FC2A844CFC480080480084 +5ECF:010000803FFE24002FBC28A42FA428C22F80207E29222A222C94488847948062 +5ED0:00803FFE20002F7E291029102F502950297E2F1028282A2849284B4A8D4A0886 +5ED1:00803FFE24103FFE241027F020802FF828882FF820803FFC40804FF880803FFE +5ED2:010000803FFE22102F90221E2FA422243FD4241427942488448848948AA41142 +5ED3:00803FFE22003FBC20242FA428A82FA820242FA4212423F45E2842208A200420 +5ED4:010000803FFE20802FF828883FFE28882FF8249027F021003FFE441043E09C1C +5ED5:010000803FFE20102F2829442A922C7C2A082910297E2D002AFE4820484488FE +5ED6:00803FFE20002F7C2924251429A421602618388623202C4041884E3081C00E00 +5ED7:010000803FFE22A822A82FFC22AA24E628002FFE284223F84248424882580040 +5ED8:010000803FFE208020402FFC29202FFC29242FFC2A202A244BB8522492A4231C +5ED9:010000803FFE200027FC244427FC244427FC211027FC21102FFE400042088404 +5EDA:010000803FFE22043FC422042FBE20042FA428942F942884450443849C140808 +5EDB:00803FFE20002FF828882FF828882FF820802FF820803FFE488853E480803FFE +5EDC:00803FFE200027FC240427FC244425F8245027FE244024F849884AF8948800F8 +5EDD:00803FFE2900290C3FB0292029202F3E29282F28292829285FA840488A881108 +5EDE:010000803FFE22002220252028BE374222942F90221032904A2843A89C440882 +5EDF:010000803FFE22002FBC22242FA428BC2FA428A42FBC22245FA4424482540288 +5EE0:00807FFE420852484A504A9E5FE4505457545554554857485048515450948022 +5EE1:010000803FFE220024002FFC355025502FFC255025503FFE40004A4889241124 +5EE2:010000803FFE20402F5021242A1824083B7621502F8C28782F48413045488284 +5EE3:010000803FFE22202FF822203FFC20802FF828882FF828884FF8422084100808 +5EE4:00803FFE20803FFC20802FF828882FF828882FF820803FFC40A45F3A91221F1E +5EE5:00803FFE214026303BEC20002FF82AA829C82FF8200027F0441047F0841007F0 +5EE6:010000803FFE2010278824BE248027A22494243E2F882C8854BE478884880008 +5EE7:00803FFE204027FC2248224825543FFE200027FC240425F4451445F4840407FC +5EE8:00803FFE24002F3C311422242FCC2A802FA82ABE2FC82A884ABE4A8888881188 +5EE9:00803FFE20402FFE200027FC240425F4251427FC200823F040404FFE81500E4E +5EEA:00803FFE20402FFE200027FC240425F4251427FC200027FC40004FFE824804C4 +5EEB:00803FFE20002EEE2A222AAA2A662EAA2A102A282E542AAA4A50522492482610 +5EEC:00803FFE2040207C204027FE244225F8244424FC24A824F844A849FC895413FE +5EED:00803FFE2010237C2E10227C2F1022FE2644277C2AC42A7C5244427C82280244 +5EEE:00803FFE20002FBE28A22FBE28A22FBE28A22FBE251428A24FFE431080E00F1C +5EEF:010000803FFE240027222914323E2F882A882F9C2A882F88403E554895480008 +5EF0:00807FFE40207E2055FE54205DFC555455545DFC542056105C547542454A8638 +5EF1:00803FFE20002AA835242ABE2F6829682FBE20282FA82ABE4FA8482888BE07A0 +5EF2:00803FFE20002FBE2514271C25542FFE29202FFC29242FFC4A244BB89222239E +5EF3:00807FFE40107F1052FE5E1052FE5EAA52AA7EFE42007EFE4A245E124AA4BE9C +5EF4:00000000F80008001000100020007800080008004800300010002C0043FE8000 +5EF5:00000124F92409241248124824907A480A4809244924312410002C0043FE8000 +5EF6:0008003CF9E0082010201120213C792009200920492031FC10002C0043FE8000 +5EF7:0008003CF9E008201020102021FC782008200820482033FE10002C0043FE8000 +5EF8:00200020F82009FC11241124212479FC09240924492431FC10002C0043FE8000 +5EF9:00200020F84009FC11041104210479FC09040904490431FC11042C0043FE8000 +5EFA:00400040FBF8084817FE104823F878400BF80840484037FC10402C4043FE8000 +5EFB:000003FCFA040A0412F4129422947AF40A040A044BFC320410002C0043FE8000 +5EFC:000007FEF890089013FC129422947A940A9C0B044A0433FC12042C0043FE8000 +5EFD:000003FCFA940A9412F4129422947AF40A940A944A9433FC12042C0043FE8000 +5EFE:0000000008200820082008200820FFFE08200820082008201020102020204020 +5EFF:08100810081008100810FFFE081008100810081008100810081008100FF00810 +5F00:00007FFC08200820082008200820FFFE08200820082008201020102020204020 +5F01:02000400082010103FF80008082008200820FFFE082008201020102020204020 +5F02:00003FF0201020103FF0200420041FFC000008200820FFFE0820102020204020 +5F03:010000803FFC0200042008101FF80008042004207FFE04200420082010202020 +5F04:00007FFC010001003FF801000100FFFE000008200820FFFE0820102020204020 +5F05:0440082010102FE8C4260420082010A0604008200820FFFE0820102020204020 +5F06:010001003FF80100FFFE040008201FF0001008200820FFFE0820102020204020 +5F07:010002800C603018CFE600001FF010101FF008200820FFFE0820102020204020 +5F08:020001007FFC04402450444889441080000008200820FFFE0820102020204020 +5F09:2420242024203DFC0420FC20242024F8440008200820FFFE0820102020204020 +5F0A:082049202A3E7F4849485DA86B104928434608200820FFFE0820102020204020 +5F0B:022002100210020002FEFF0002000200020001000100008000420022001A0006 +5F0C:0048004400440040FFFE00400040004000400040002000227F92000A00060002 +5F0D:0048004400440040FFFE0040004000407E400040002000220F12F00A40060002 +5F0E:0048004400440040FFFE004000407F40004000403E2000220012078AF8064002 +5F0F:0048004400440040FFFE004000403E4008400840082008220F12780A20060002 +5F10:00483E4400440040FFFE0040004000407E400040002000220F12F00A40060002 +5F11:00144412281013FE28104410101011F0FC9010905890548894EA138A51062002 +5F12:441028141012281045FE1010141011D0FC9030903890548850EA938A10061002 +5F13:00007FF00010001000103FF02000200040007FF8000800080008000800500020 +5F14:00003FF80108010801081FF81100110021003FFC010401040114010801000100 +5F15:00087F080108010801083F082008200840087F0801080108010801080A080408 +5F16:00003FF8000800081FF8100020003FFC000400040004002800100000FFFE0000 +5F17:0440044004407FF8044804483FF8244024403FFC044408440854104820404040 +5F18:00207C200420042004207C404040404040807C880484050407FE050228021000 +5F19:00007CFE0410041004107C10401041FE40107C10041004100410041028501020 +5F1A:0820042004407FF8010801083FF8210021003FFC010401040114010801000100 +5F1B:0020F82008200920092C7934416443A441247934092809220922090250FE2000 +5F1C:00007DFC0404040404047CFC4080408041007DFC040404040404040428281010 +5F1D:00007DFC0524052405247D24412441FC41047D00050005000502050228FE1000 +5F1E:00407C400440047C04847C884120402040207C50045004500488048829041202 +5F1F:0820042004407FF8010801083FF8210021003FFC030405040914110861000100 +5F20:0100F9080908091009207940410047FE41407920092009100908094451822100 +5F21:00007CFE0480048004807CFC4084408440847C8404FC04800480048028FE1000 +5F22:00207D240524052405FC7C20402043FC41047C88048804500420045029881606 +5F23:0088F88808880908097E7B084508414841287928090809080908090851282110 +5F24:0004F81E09F0091009107910411041FE4110791009100908090A094A51A62112 +5F25:0080F880088009FE09027A0444204020412879240A240A220C22082050A02040 +5F26:0040F82008200BFE084078404088410843F078200840088809040BFC51042000 +5F27:0008F83C0BD00A900A907A904290429042907A880A880AC80AA40CD454922800 +5F28:0000FBFC088408840884790441144208440079FC090409040904090451FC2104 +5F29:08007F7C114432280C101228614600003FF000103FF020003FF8000800500020 +5F2A:00007DFC0408041004307C484084430240007DFC04200420042004202BFE1000 +5F2B:00007DFE0520052005207DFC4104410441047D0405FC05200520052029FE1000 +5F2C:00007DFE0510051005507D5C4144414441447D44055C05500510051029FE1000 +5F2D:0000FBFE09080908090879F84108410841F879080908091E0BE8080850082008 +5F2E:111009207FFC0400FFFE10102008DFF600100FF0080010001FF8000800280010 +5F2F:02000100FFFE044014502448444400003FF000103FF020003FF8000800500020 +5F30:00207D2404A404A804207DFC4104410441FC7D04050405FC0504050429141108 +5F31:00007EFC020402047EFC408040807EFC22441224060C1A3462C4020414280810 +5F32:0000F9F80908090809F8780043FC420442047BFC0A040A040BFC0A0452142208 +5F33:0000FBFC080009240A487C904248412440007BFC084008400840084057FE2000 +5F34:0040F8200BFE080009FC790441FC400041FC780808100BFE0820082050A02040 +5F35:0000F8FC088008F8088078F8408047FE41407924092809100908094451822100 +5F36:0040F8200BFE0800080079FC41044104410479FC082008A809240A2250A02040 +5F37:0020F840088809040BFE7822402043FE42227A220BFE08200824082257FE2002 +5F38:0000FBDE0A520A520A527BDE4252425242527BDE0A520A520A520A52555228A6 +5F39:0104F888085009FC0924792441FC4124412479FC082008200BFE082050202020 +5F3A:0000F9FC0904090479FC402083FE8222FA220A220BFE082008240822903F63C1 +5F3B:0000F01E17C211021102F7DE855085508550F6DE14421442144217C2A4544008 +5F3C:0000F01E17C211021202F7DE845084508450F7DE14421442144217C2A4544008 +5F3D:0048F94809480BFE094879484178410041FE78200BFE087008A8092456222020 +5F3E:0242F924080009FC0924792441FC4124412479FC082008200BFE082050202020 +5F3F:01007FFE44429FF404403FF80440FFFE08201FF02028DFE610001FF0001000E0 +5F40:1000FE7810487C480048FE8682007CFC00447C4404287C2840107C2804440D82 +5F41:0000FBFE080809E8092879E8400043FE400879E80928092809E8080850282010 +5F42:0440244814500440FFFE0000FC8004F87D20402081FCFC200450045028881104 +5F43:0000F9FC092409FC092479FC40A840A843FE78A808A809FC08200BFE50202020 +5F44:0000FBFE0A000A7C0A447A44427C420042EE7AAA0AAA0AAA0AEE0A0053FE2000 +5F45:0108F8900FFE08000BC47A5443D4425443D47A440ACC08000BFC088451142608 +5F46:49202A3E7F4849485DA86B10492841463FF000103FF020003FF8000800500020 +5F47:0020F9FC08240BFE082479FC402042AA43AE7A220BFE0A220BAE0AAA52AA2422 +5F48:0000FBDE0A520A520BDE780041FC412441FC792409FC08200BFE082050202020 +5F49:0088F88809FC088808887BFE402041FC412479FC092409FC0800088851042202 +5F4A:0000FBFE080009FC092479FC412443FE400079FC092409FC092409FC500023FE +5F4B:0000FBFC0A940A940BFC780047FE400043FC7A040BFC08A209140B085D442182 +5F4C:0000F7FC124814441FFEF44486EC855486ECF44416EC155416EC1444A4544408 +5F4D:0040F02017FE148815FCF48887FE842085FCF52415FC152415FC1400A4884904 +5F4E:21084FD2F03C23884812FBBE0280ABAA00003FF000103FF020003FF800080070 +5F4F:03DEFA520BDE0A520BDE78A041FE432045FC792009FE080009FC08885070278E +5F50:000000007FF800080008000800083FF800080008000800087FF8000800000000 +5F51:04000400040008000FF008101010102020203FE00040004000800080FFFE0000 +5F52:080008004BFC480448044804480449FC4804480448040804100413FC20044000 +5F53:0100210811080910092001007FF80008000800083FF80008000800087FF80008 +5F54:08000FE0082010201FC000400040FFFE010021081190056009203118C5060200 +5F55:00003FF0001000101FF000100010FFFE010021081190056009203118C5060200 +5F56:08000FF010101FE00020FFFE02000D08719002A00CC071A006981886E2800100 +5F57:1010FEFE10107C7C1010FEFE101000007FF8000800083FF8000800087FF80008 +5F58:08000FF010101FE00020FFFE0200421043D2751441184FD041126292444E0820 +5F59:08000FF010101FE000207FFE40029FF411101FF011101FF00100FFFE1110610C +5F5A:00003FF000101FF000107FFE40029FF411101FF011101FF00100FFFE1110610C +5F5B:3FF000101FF00010FFFE92485484FF7A3828544892980820FFFE082010202020 +5F5C:08000FF010101FE00020FFFE92485484FF7A3828544892980820FFFE08201020 +5F5D:08000FE010201FC00040FFFE92245478FE1238FE545492920820FFFE08201020 +5F5E:3FF000101FF00010FFFE92245478FE1238FE545492920820FFFE082010202020 +5F5F:0044FDFE04540448FCFE059004FEFC9000FE0890FEFE088049FE2844083819C6 +5F60:7E4403FE3E5402487EFE0190EEFE4A906EFEC09004FEFE8045FE244424380DC6 +5F61:0040008001000600180000200040018006001800001000200040018006003800 +5F62:00007F8412041208121012221202FFC412081210122212022204220842108260 +5F63:100408040808FF90222422442208221214221444080808101420230040FE8000 +5F64:00003F04210421082910252225022104FFC82110212221022104410845108260 +5F65:020001003FF8042003C004203FFC202021C02E10206021882E10406043809C00 +5F66:020001003FF8082004403FFC2000202021C02E10206021882E10406043809C00 +5F67:005000480040FFFE004000507C6045C8445044647DA800120E32F0CA43060002 +5F68:0002FFE2000400087BD04A424A424A446B485AD04A424A424A444A484A505AE0 +5F69:010007847804088844902522200204047F880C10162215022484440884100460 +5F6A:0400078404043FC8245027243C84238820102F24290429084912512290FE2000 +5F6B:00003F84248424882E9024A23F8220842E882A902AA22E822084408842908160 +5F6C:1082108210841088FBD01082308239C455A852909282148210841088109010A0 +5F6D:08000804FF84080808107F2200027F04410841107F22000222041788F8104060 +5F6E:10000804FF848088141022224902140422084110BEA22202220422083E102260 +5F6F:0000FF8414047F08551055227F0200047F080010FFA208022A044908A8901060 +5F70:100008047F0422081410FFA200027F0441087F1041227F020804FF8808100860 +5F71:00007F0441047F0841107F220802FFC400087F1041227F020804490888901860 +5F72:7BC200027BC44A486B504A4204027FC44A087FD04A427FC252445B88525099E0 +5F73:0800080010002000480008001000300050009000100010001000100010001000 +5F74:08400840108020FC490409041204348450449024102410041004100410281010 +5F75:08400840104022404A580A6812C8374852489268125012441244120411FC1000 +5F76:100017F82108411091101120213C6104A1042288228822502420245028882306 +5F77:08400820102023FE48800880108030FC50849084108410841104110412281410 +5F78:082009201120211049100A48124834445882908011101108120817FC12041000 +5F79:080009F01110211049100A0E140033F851089110109010A0104010A013181C06 +5F7A:0800080013FE2020482008201020302051FC9020102010201020102017FE1000 +5F7B:1000120022FC42249224122423A46E24A224222422A423242244204420942108 +5F7C:08200820102023FE4A220A24122033FC52849288124812501220145014881906 +5F7D:0808083C13E022204A200A20122033FE5220921012101212120A128A13261212 +5F7E:0840084010A020A049100A481426302053F890081010111010A0104010201020 +5F7F:08900890109023FC4894089413FC3290529093FE10921092111A111412101410 +5F80:08800840100027FC484008401040304057FC904010401040104010401FFE1000 +5F81:0800080013FE20204820082011203120513C9120112011201120112017FE1000 +5F82:080009F811082108490809F811083108510891F8110811081108110817FE1000 +5F83:082009201120212049FC0A2012203420502091FC102010201020102017FE1000 +5F84:08000BF8101020204860089811043602500093FC104010401040104017FE1000 +5F85:08400840104023FC4840084017FE3010501097FE101012101110111010501020 +5F86:08000FFE1090209048900BFC1294329452949294129C13041204120413FC1204 +5F87:08800880110021FC4A040C0413E43224522493E41224122413E4100410281010 +5F88:08000BF8120822084BF80A08120833F852449248123012201210128813061200 +5F89:09040884108820004BFE0820102031FC5020902013FE10201020102010201020 +5F8A:0800080013FC22044A040AF4129432945294929412F41204120413FC12041000 +5F8B:0840084013F820484FFE084813F83040504093F81040104017FC104010401040 +5F8C:08200840108821104BE00840108833FC5084908011F813081490106011981606 +5F8D:0820082011FC20204820082017FE30005020902011FC10201020102017FE1000 +5F8E:080009FC11042104490409FC1000300053FE9020102011FC1020102013FE1000 +5F8F:082008201120213C4920092017FE300050209124112412281410102010C01700 +5F90:1040104020A04110920815F620406040A7FC2040225022482444284421402080 +5F91:08000BFC100021244A480C9012483124500093FC104010401040104017FE1000 +5F92:0820082011FC20204820082013FE302050209120113C112012A01260143E1800 +5F93:080409041088209048000BFE102030205120913C1120112012A01260143E1800 +5F94:0888088813FE208848880840102033FC5008901010201040108011001280147E +5F95:10401040204047FC9040124821486150AFFE20E0215021502248244428422040 +5F96:0840082013FE2202480009FC1000300053FE9020112811241222142210A01040 +5F97:08000BF8120823F84A080BF8100033FC501097FE101012101110101010501020 +5F98:089008901090279E489008901090339C509090901090179E1090109010901090 +5F99:082008201120213C4920092017FE300050209120113C112012A01460183E1000 +5F9A:104010402FFE404097FC1444255464E4A44427FC20E0215022482C4620402040 +5F9B:0840084013FC20A049100A0817FE300853C892481248124813C8100810281010 +5F9C:0820092410A420A848200BFE1202320252FA928A128A128A12FA1202120A1204 +5F9D:0840084017FC204048400BF8120833F8520893F8120813F8120812081FFE1000 +5F9E:088808881088208849540A221442302050209120113C112012A01260143E1800 +5F9F:100017FC2444444495F41444244467FCA40425F42514251425F4240424142808 +5FA0:08400840104027FC48400A4812483248555490E0115011501248144418421040 +5FA1:1400140027DE4912911211122FD26112A11225D22512251A25D43E1028102010 +5FA2:1040104027FE404093F8104827FE6048A3F820402240227C2240254024FE2800 +5FA3:11101110211047FC911011102FFE6000A3F82208220823F82208220823F82208 +5FA4:08100810177C211449FE0A14127C3710517C951015FE12101210150018FE1000 +5FA5:080009FC1104210449FC0904110431FC500093FE10201120113C112012A0147E +5FA6:100017BC24844484948417BC24006400A7BC2424242427A82410242824442482 +5FA7:0840082013FE22024A020BFE1200320053FE9352155215FE1552155219521106 +5FA8:0840088013F822084BF80A0813F8300057FC9040104013F81040104017FC1000 +5FA9:0900090011FE22004DFC090411FC310451FC908010FC11081290106011981606 +5FAA:103C17E02420442097FE142025FC6504A50425FC250425FC2904290431FC2104 +5FAB:0880088013F821084FFE080013F8320853F8904017FC1040144017FE10401040 +5FAC:0840082013FC210848900BFE12023444502093FC108010F81088110811281210 +5FAD:0808083C13C020044A44092811FC3220502093FE102011241124112411FC1004 +5FAE:110815482548455097DE102420146FD4A0142794249424A824C8249428143022 +5FAF:083C0FC0124421284880091013E03040518893FC1044104017FC10A01110160E +5FB0:08000BFE1020213C4920092017FE300057FE90201120113C1120112017FE1000 +5FB1:100017FC20A047FC94A414A427FC6000A7FC20002FFE20402248244429422080 +5FB2:100017FC240447FC942014A8247064A8A50424A024FC252024202BFE28203020 +5FB3:0820082017FE204048400BFC1294329453FC904010241522150A190810F81000 +5FB4:12101A902A904AA08FBE104420246FA4A22422282FA8221022282FA820442082 +5FB5:110815482548455097DE101427E46014A7D4211427D4210821082FD420242042 +5FB6:1108110825484390911E17D425646554A554275425D4254825482554246424C2 +5FB7:104010402FFE404097FC14A424A467FCA0002FFE204020242522250A290820F8 +5FB8:08400BF8111020A04BFC080013F8324853F8924813F8104013F8104017FE1000 +5FB9:1210111027D0421094BE1FE420546794A49427942494278824882494249425A2 +5FBA:0820082011FC20204BFE0908139C31085188963E100013FE109010901112120E +5FBB:104010A023184DF6900017FC255464E4A7FC200023F8220823F8220823F82208 +5FBC:121014102F9048909FBE18A42FD46414A2142FD424142788248828942A943122 +5FBD:12101A902A904FA0803E1FC4242468A4AF24222824A83FD022282AA832442682 +5FBE:12101A902A904F90943E12242FD46014AF9420142F9420082F8828942F942022 +5FBF:0910089013DE20104A5E098213DE301053DE925013DE125013DE1250125212CE +5FC0:104017FC200043B892A813B8211067FCA11027FC21102FFE212823102D482186 +5FC1:0BF80A0813F822084BF80A4813F8344457FC90801FFE1248155418E2115016C8 +5FC2:17BC14A427BC44A497BC14A427BC6120A3FE222027FC2A2023FC222023FE2200 +5FC3:0000020001000080008004000408240424042402440244128410041003F00000 +5FC4:1000100010001000180054005000500090001000100010001000100010001000 +5FC5:00000400021001100120082028482844288449024A028C120810181027F04000 +5FC6:1000100013FC1008181054205040508090801100110012021202120211FE1000 +5FC7:104010401040104019FC54445044504490441084108410841104110412281410 +5FC8:00003FF80000000000000000FFFE000001000880088848044812481287F00000 +5FC9:1000100017FC1084188454845084508490841084110411041204120414281810 +5FCA:1000100013FE1020182054205020502090201020102010201020102010A01040 +5FCB:1000100013F8100818085408500853F892081200120012021202120211FE1000 +5FCC:00003FF0001000103FF02000200420041FFC0100088848844812481287F00000 +5FCD:00003FF802081208120824080808105060200100088848844812481287F00000 +5FCE:001000F83F0001000100FFFE0100010001000000010008844892481287F00000 +5FCF:1010107813C0104018405440504057FE90401040104010401040104010401040 +5FD0:02000200020003F8020002000200FFFE00000100088848844812481287F00000 +5FD1:0000FFFE02000240022002100208020000000100088848844812481287F00000 +5FD2:0048004400440040FFFE0040084004401440554050A050A29292120A0E060002 +5FD3:100011FC1020102018205420502053FE90201020102010201020102010201020 +5FD4:10801080110011FE1A00540051F8500890101060108011001202120211FE1000 +5FD5:1040104010401840544053FE50409040104010A010A010901110110812041402 +5FD6:10101010101010101BFE54105010501091101090109010101010101010501020 +5FD7:0100010001087FFC0100010001103FF800000A102908292C6824482407E00000 +5FD8:02000100FFFE10001000100010001FF800000100088848844812481287F00000 +5FD9:10201010101010001BFE54805080508090801080108010801080108010FE1000 +5FDA:1020102010201120192C5534516453A491241134112811221122110210FE1000 +5FDB:100011F0111011101910551051905150915011101110111211121212120E1400 +5FDC:010000803FFE2000210020802240220022002A082A042A145210421081F00000 +5FDD:00003FF801000100FFFE0280044009203118C106119011482124412405000200 +5FDE:020001007FFC0820044003800C603018C0060100088848844812481287F00000 +5FDF:10401020102013FE188854885088508890881050105010201050108811041602 +5FE0:010001003FF82108210821083FF8210801000100088848844812481287F00000 +5FE1:10201020102010201BFE5622522252229222122213FE12221020102010201020 +5FE2:00007FFC020002003FF0041004100810FFFE0000010008844892481287F00000 +5FE3:100013FC1084108818885490509C508491441144112811281210122814441182 +5FE4:10801080108011FC192056205020502093FE1020102010201020102010201020 +5FE5:100010003FFC20004FF080003FF000100810041014905050514A514A8F060002 +5FE6:1040104010A018A0551052085406911011101110111011101110121012101410 +5FE7:10901088108810801BFE54A050A050A090A010A01120112211221222121E1400 +5FE8:1000100013F818005400500057FC9120112011201120112012221222141E1800 +5FE9:04400440082010102208C44608201FF000100100088848844812481287F00000 +5FEA:102011201120191055105248524894441882108011101108120817FC12041000 +5FEB:10401040104013F8184854485048504897FE104010A010A01110111012081406 +5FEC:100013F81008191054A0504057FE904210441040104010401040104011401080 +5FED:10401020102010001BFE54405040506090501048104410441040104010401040 +5FEE:10401040104017FE18405440504057F892081208111010A0104010A011181606 +5FEF:1008103C13E012201A205620522053FE9220121012101212120A128A13061202 +5FF0:1080108013F01890549051125112924E144010401FFE10401040104010401040 +5FF1:10401040104013FC1A4454485040504090A010A010A0112011221222141E1800 +5FF2:10401040104010401BFE5440504050A090A010A0111011101288124814441802 +5FF3:10201020102013FE1820552451245124912411FC1024102010221022101E1000 +5FF4:1040104010A018A05510528854469040100013F8100810101010102010201040 +5FF5:01000100028004400A203118C1060FE000400080010008844892481287F00000 +5FF6:1000100011FC18005400500053FE90201020104010401088110413FE11021000 +5FF7:10001008110810881A5256525222522292521292130A120A120213FE10021000 +5FF8:100013F81088108818885488508857F891081108110811081108110817FE1000 +5FF9:1000100013FE1020182054205020502091FC1020102010201020102017FE1000 +5FFA:10801080108010FC1904550852405440904010A010A010901110110812041402 +5FFB:1008101C11E011001900550051FE511091101110111011101110121012101410 +5FFC:10801040104017FC1800540051F05110911011101110111211121212120E1400 +5FFD:080008001FF81248224844880888110822280410010008844892481287F00000 +5FFE:1100110011FC1A00540051F85000900013F8100810081008100A100A10061002 +5FFF:0440082010102FE8C4260420082010A060400100088848844812481287F00000 +6000:1000100017FE102018205440504050D091481244144210401040104010401040 +6001:010001007FFC0100028004400A203118C0060100088848844812481287F00000 +6002:0820082008200820145012502288208841048202010008844892481287F00000 +6003:100013FC104018405440504057FE904010A010A010A0112011221222141E1800 +6004:100013FC120012081A8856505250522092201250125012881308120013FE1000 +6005:110011081108111019205540510057FE91401120112011101108114411821100 +6006:1040104010A018A055105208540691F011101110115011201104110410FC1000 +6007:100013FE120012001A0057FC520452049204120413FC12001200120013FE1000 +6008:10481248124812481A4857FE5248524892481248127812001200120013FE1000 +6009:1080108011FC11041A0455F451145114911411F4110411281112110210FE1000 +600A:100013FC108410841884550451145208940011FC110411041104110411FC1104 +600B:100013FC120412041A0457FC5220522093FE1220122012101212128A13061202 +600C:100013FC102010201840544050D0514892441444104010401040100017FE1000 +600D:10801080108018FE554051405240907C104010401040107E1040104010401040 +600E:080008000FFC1400240047F00400040007F80400010008844892481287F00000 +600F:10401040104013F81A48564852485248924817FE104010A010A0111012081406 +6010:10801080110011FC1A04540451E451249124112411E411241004100410281010 +6011:2040224421483150A840A7FCA040A04020402FFE204020402040204020402040 +6012:10001000FEFC22844488285010202858C5860000010008844892481287F00000 +6013:21002100213E211237D2AA52A252A254A254249422882108229424A428422080 +6014:1000100013FE10201820542051205120913C1120112011201120112017FE1000 +6015:10201020104011FC190455045104510491FC1104110411041104110411FC1104 +6016:10401040104013FE188054A0512051FC93241524112411241134112810201020 +6017:104010401040187E544050405040904013FC1204120412041204120413FC1204 +6018:010001007FFC010001001FF0101010101FF00100088848844812481287F00000 +6019:10201020102010201BFE54205020502091FC1104110411041104110411FC1104 +601A:100011F811081108190855F851085108910811F8110811081108110817FE1000 +601B:1000100011FC11041904550451FC51049104110411FC11041000100013FE1000 +601C:1040104010A018A0551052485426902013F810081010111010A0104010201020 +601D:00003FF8210821083FF8210821083FF820080100088848844812481287F00000 +601E:10201020102010201BFE562252225222922213FE122212221222122213FE1202 +601F:1008103C13E012201A205620522053FE9220121012101212120A128A13261212 +6020:02000400082010103FF800081FF0101010101FF0010008844892481287F00000 +6021:10201020104018405488510453FE9002100011FC110411041104110411FC1104 +6022:102010201120112019FC55205220502093FE1020105010501088108811041202 +6023:090009001FF0210001007FFC0280044008203018C10608844892481287F00000 +6024:0810081017FE3010521091101110105010200100088848844812481287F00000 +6025:08000FE0102020405FF8000800081FF8000800083FF802005104511290120FF0 +6026:100013F8104010401A4855485150504097FE1040104010401040104010401040 +6027:102010201120112019FC552052205020902011FC102010201020102013FE1000 +6028:100010F83E884288A2A8149008841084207CC000010008844892481287F00000 +6029:100011FC11041104190455FC51005140914411481170114011421242123E1400 +602A:100017F81208111018A0544050A053189C46104017FC1040104010401FFE1000 +602B:10901090109013FC1894549453FC5290929013FE10921092111A111412101410 +602C:1000100013FE12521A5256525252525292521292128E13021202120213FE1202 +602D:1000104010201028180854885090529492A212A214C210881188128814781000 +602E:2220222022203420AD7CA924AE24A2242424242429242F242144204420942108 +602F:10401040104010401BFC54405040504097FE1040108010801110120817FC1204 +6030:10401020102013FE184054405088510893F0102010401088110413FC11041000 +6031:080008001FF812482A4844880A88110822A80410010008844892481287F00000 +6032:100013FE10201020182057FE522252229252124A128A130212021202120A1204 +6033:100013FC120412041A04560453FC5090909010901090111211121212140E1800 +6034:10281024102410201BFE56205224522492241228122812901312122A10461082 +6035:10201028102410201BFE54205070507090A810A8112412221420102010201020 +6036:10201020102013FE1A225624522053FC92841288124812501220145014881906 +6037:011001080100FFFE01001110111011102110C00E010008844892481287F00000 +6038:0120011001007FFC0380054009203118C1060000010008844892481287F00000 +6039:104010402240227863C8AE48226822522242220221FE02005104511290120FF0 +603A:10401020101019E05422503453B890B010A810A8112811241224142210A01040 +603B:10100820044000001FF01010101010101FF01010010008844892481287F00000 +603C:000800087E0802FE240814480828140822284010010008844892481287F00000 +603D:10401040104013FC18405440504057FE90E01150115012481444184210401040 +603E:1000100011FC1104190455045104510491FC1104100010901088110412021402 +603F:100017F81208111018A0544051B0564E904013F81040104017FC104010401040 +6040:1040104010FC11081A90546050485190963E1042108413481030102010C01700 +6041:08380BC01040304057FC90401040104013F80100088848844812481287F00000 +6042:10801080110011FC1A04540453E45224922413E41224122413E4100410281010 +6043:1040104010401BFC5440504057FE9010101017FE101012101110111010501020 +6044:10201020102013FE1820542051FC5000900011FC110411041104110411FC1104 +6045:10401040104419F45448505053FE904010801184129814E010821082107E1000 +6046:100017FE10801080188054F85108514891281208128810501010101017FE1000 +6047:100013FE120012001BFC5620522052F892201220122013FC1200120013FE1000 +6048:10401040109011081BFC54245120512091FC1220102017FE1020102010201020 +6049:11001104113811C01902550250FE500091FC1104110411FC1104110411FC1104 +604A:2040204023FC3084A884A114A208A01024102FBE24922492249228A22AAA3144 +604B:02000100FFFE0440145014482444444400000100088848844812481287F00000 +604C:109010901090129219945498509051989294149210901090111211121212140E +604D:10401044124419485550504057FE9090109010901090109211121112120E1400 +604E:100013FE102010401888550453FE50229020102013FE10201020102017FE1000 +604F:100010FCFE042208221064FE141008103450C220010008844892481287F00000 +6050:00007DF011101110119011501D12E212440E0800010008844892481287F00000 +6051:1040104010FC11041A0855FE5100517C914411441154114811421242123E1400 +6052:100013FE1000100019FC5504510451FC9104110411FC11041000100013FE1000 +6053:100017FE10901890549053FC5294929412941294129C13041204120413FC1204 +6054:10401020102013FE180054885104520290881088105010501020105010881306 +6055:10001000FE7C2244444434440844147C2244C000010008844892481287F00000 +6056:020004003FF8244822882108228824483FF80100088848844812481287F00000 +6057:1020102013FE10501888550452FA500093FE1040108011FC1004100410281010 +6058:109010901090191055FE53105510913811381154115411921110111011101110 +6059:082004407FFC010001003FF801000100FFFE0100088848844812481287F00000 +605A:01003FF801000100FFFE000001003FF801000100FFFE02005104511290120FF0 +605B:1000100013FC12041A0456F4529452949294129412F41204120413FC12041000 +605C:102810241024182057FE5020502097E0112011101110111011CA170A12061002 +605D:080008007F7C08243E2408247F44085408880100088848844812481287F00000 +605E:1040104017FC10401BF8544853F8524093FC1044105410A810A0111012081406 +605F:11001100110019FE56025202551298A2124A12AA131A120A13FA100210141008 +6060:10401040104013FE1880549051105110937C151011101110111011FE11001100 +6061:10081190106010981B045440504057FE90801090111011201248148419FC1084 +6062:10401040104013FE188054905090511291521154129012281428104410841102 +6063:4080208009FC12042448E04020A023182C060100088848844812481287F00000 +6064:10401040108011001BFC56945294529492941294129412941294129417FE1000 +6065:0000FF20241024103C00244024403D44254225422E42F4484448044804380400 +6066:10401040108013FC1A04560452F4529492941294129412F41204120412141208 +6067:0000FFFE020004003FF824882488248824A82010010008844892481287F00000 +6068:100013F8120812081BF85608520853F892441248123012201210128813061200 +6069:00003FF8210821082FE821082288244828283FF8010008844892481287F00000 +606A:1080108010F811081B1054A0504050A09118120615F811081108110811F81108 +606B:200027FC2404240435F4AC04A404A5F4A5142514251425F42404240424142408 +606C:1008103C11E01020182055FE50205020902011FC110411041104110411FC1104 +606D:044004403FF804400440FFFE0440082012102208C2261290124822480A000400 +606E:1040104010A011101A08540653F850409040104013F810401040104017FE1000 +606F:010002001FF010101FF010101FF010101FF01010010008844892481287F00000 +6070:1040104010A011101A08540653F85000900013F8120812081208120813F81208 +6071:10901090110811481A445492510853FC909410901090109011121112120E1400 +6072:11041084108810001BFE548850885088908817FE108810881108110812081408 +6073:00003FF020103FF020103FF0220821902C60301C010008844892481287F00000 +6074:02000100FFFE00003FF820083FF820083FF80100088848844812481287F00000 +6075:01000100FFFE01003FF821083FF821083FF80000010008844892481287F00000 +6076:00007FFC04402448144814500440FFFE00000100088848844812481287F00000 +6077:08400840104037FC50E091501150124814441842104002005104511290120FF0 +6078:2010201027903010A87EA012AFD2A21222122422252228A22FC2204220942108 +6079:100013FE122012281A24562053FE522092201250125012501488148819041202 +607A:102011241124112419FC540051FC5004900411FC110011001102110210FE1000 +607B:200427C4244424543554AD54A554A554A5542554255421042284224424142808 +607C:10401020102017FE180054005090525492241224125412941204120413FC1004 +607D:100013FE12021C44544053FC508090A0112011FC1020102017FE102010201020 +607E:1090109017FE109018905440502057FE91001100110011001100110011FC1000 +607F:3FF0066001803FF821083FF821083FF821082018010008844892481287F00000 +6080:100013FC100818D0542053FE5222922213FE1222122213FE12221222122A1204 +6081:100011F81108110819F8540053FC5204920413FC1204120413FC120412141208 +6082:12201224122813B01A20562252A2531E9040104013FC10401040104017FE1000 +6083:200027FC244424443444AFFCA444A4C4A4E42554264424442444240427FC2404 +6084:1020112410A410A8182055FC5104510491FC1104110411FC1104110411141108 +6085:10101090108811081A0455FA51085108910811F810901090109011121212140E +6086:010002800C603018CFE601003FF8111025080200010008844892481287F00000 +6087:1040104010A011101A0855F65040504097FC1040125012481444184411401080 +6088:10101014101210101BFE54105150515497F4115411541148124A125A14261042 +6089:00F83F00111009200100FFFE092011102108C006010008844892481287F00000 +608A:080C08F07E8008800EFE78880888290812080100088848844812481287F00000 +608B:1040102017FE11081890546050605198960611F8110811081108110811F81108 +608C:11081088109013FC1824542453FC5220922013FE106210A2112A122414201020 +608D:100011FC110411FC190455FC5000500091FC1020102013FE1020102010201020 +608E:10201120112011FE1A205420502053FE9000100011FC11041104110411FC1104 +608F:10201020102013FE1820542051245124912412AA102010501050108811041202 +6090:4420282010A428A448A8992028204850885008885104220201004884481287F2 +6091:1048104413FE1840544053FC5244924413FC1244124413FC1244124412541208 +6092:100011F81108110819F8540053FC52449244124413FC12001202120211FE1000 +6093:100013F8120812081BF85608520853F89208120813F81120112012221422181E +6094:1100110011FC1A0055F851085148912817FE11081248122813FC100810501020 +6095:2208211020E03110AA08A080AFFEA140224027FC2A4422442254224820402040 +6096:1020102013FE1820542053FE5202940411F81010102013FE1020102010A01040 +6097:1080108011F81A08541053FC52449244124413FC10A010A011221122121E1400 +6098:00003FF8240027F028803FFC2140222024103FFC010008844892481287F00000 +6099:1040102013FE100019F85508510851F8900013FC100810301020102010A01040 +609A:1020102013FE1020182055FC5124512491FC1020107010A81124122210201020 +609B:10401040108811041BFE540250885144924210F8118812501020105011881606 +609C:100011FC11041104190455FC5000500093FE1020102011FC1020102013FE1000 +609D:200027FC2444244437FCAC44A444A7FCA040204027FC2040204020402FFE2000 +609E:100010F8108810881AF85600520053FC9044104417FE104010A0111012081406 +609F:100013FE1040104019FC5484508453FE9000100011FC11041104110411FC1104 +60A0:10401040247E6488A54824502420205820862300010008844892481287F00000 +60A1:0604780408440844FF441C442A44490488140808010008844892481287F00000 +60A2:1080104013F812081A0857F85208520893F81240124412281210128813061200 +60A3:01001FF0111011101FF001003FF8210821083FF8010002005104511290120FF0 +60A4:020004003FF8220823C824482A882108228824083FF8200801004884481287F2 +60A5:02000100FFFE00003FF800003FF800003FF820083FF802005104511290120FF0 +60A6:12081108111010201BF856085208520893F810A010A0112011221222141E1800 +60A7:108411C4170411141914551457D4511493141394155415041904110411141108 +60A8:0900090011FC3204544899501148124414441140108002005104511290120FF0 +60A9:104212221124110418085400520A528A925212221252128A130A120213FE1002 +60AA:00007FFC04403FF8244824483FF80440FFFE0100088848844812481287F00000 +60AB:01007FFC01003FF800007FFE40028FE4082010222022C11E288828A4482407E0 +60AC:1FF010101FF010101FF01010FFFE082010103FF810080100288828A4482407E0 +60AD:108012FC12A412A41AA8569052A850C69020102011FC10201020102013FE1000 +60AE:200023F82208220833F8A800A000A7FCA04020402FFE204020A0211022082C06 +60AF:110010BE128212021A42562253FE5292925212221252128A130A1202120A1204 +60B0:1040102013FE1202180055FC5000500093FE1020112811241222142210A01040 +60B1:109010901090179E189054905090539C909010901090179E1090109010901090 +60B2:044004407C7C044004403C78044004407C7C0440010008844892481287F00000 +60B3:00803FFE008007F8240827F8240827F8240827F820003FFE01004884481287F2 +60B4:1080104013FC18005510511052A894441000104017FE10401040104010401040 +60B5:100010FC108018F8548050F8508097FE11401124112811101108114411821100 +60B6:00007C7C44447C7C44447C7C42044104450454245454645443C4400440144008 +60B7:1040102013FC12041A0457FC52005228922413FE122012501250148815041A02 +60B8:203823C0204027FC30E0A950A248AC46A3F02020204027FC2040204021402080 +60B9:01007FFE40029FE410201FE010001FF0101010101FF002005104511290120FF0 +60BA:1040102013FE1A02540451F85108910811F81100110011FC1104110411FC1104 +60BB:1020102013FE1020182057FE5088505093FE1020102017FE1020102010201020 +60BC:10401040107E10401BFC560453FC520493FC1244104017FE1040104010401040 +60BD:1040104017FC10401BF8544857FE504893F8108017FE11081390106011981604 +60BE:10401020102013FE1A02549451085204900011FC102010201020102017FE1000 +60BF:100013FC104010401BFE54A05110520894461040104812641252145211401080 +60C0:2040204020A03110AA08ADF6A000A7FC24A424A427FC24A424A424A424142408 +60C1:080C08F07E8018802CFE2A884888888809080100088848844812481287F00000 +60C2:1080108010F811081A1054005040539C92041204139C12041204120413FC1204 +60C3:100013FC120412041BFC5604520453FC90001220122413A81230122212A2131E +60C4:08000F7C08440844FF4808282A30491089282844108202005104511290120FF0 +60C5:1020102013FE102051FC582057FF940011FC110411FC110411FC11041114110C +60C6:100013FE122212221AFA5622522253FE920212FA128A128A12FA1202120A1404 +60C7:1040102013FE100019FC550451FC500091FC1008101013FE1020102010A01040 +60C8:100013F8124812481BF85648524853F8904017FC10E011501248144610401040 +60C9:10400840407E2040084013FC7204120413FC1000010008844892481287F00000 +60CA:1040102013FE1000180055FC5104510491FC1020112811241222142210A01040 +60CB:1040102013FE12021D04550051DE525292521352149A1094111011121212140E +60CC:020001007FFE400290041EF8228824A8549008841084607C01004884481287F2 +60CD:1040104010A011101A08540651F05040904013F8104012481148115017FC1000 +60CE:08207FFC08200FE008200FE00820FFFE10102208C10609002828282447E40000 +60CF:211021102110211037BCA910A110A338A3B82554255429922110211021102110 +60D0:10141012101017FE1810541053D252529252125413D4100810EA171A12261042 +60D1:00500048FFFE00403E4022243E2800120E2A70C603020100288828A4482407E0 +60D2:0600787C08440844FF441C442A44497C88440800010008844892481287F00000 +60D3:1020112410A81BFE5440508057FE9108120415FA1908110811281112110210FE +60D4:104012441244144818A0551056085044904012481248145010A0111012081C06 +60D5:100011FC110411FC190455FC5080508091FE124A144A10921122124210941108 +60D6:1FF010101FF010101FF008001FF82248448809081228241001004884481287F2 +60D7:2040204020A03110AA88A446A800A3F020102020204021242522250A290820F8 +60D8:100013FE1202128A1A5257FE5242522293FE12821282128212FA1202120A1204 +60D9:200027BC208422943108AA94A4A4A840A00027BC20A422A42128229024A82846 +60DA:1080108010FC11541A5454A45124524490941108104010A412AA128A14781000 +60DB:101C13E0122013FE1A205692530A520691FC1104110411FC1104110411FC1104 +60DC:10881088108813FE1888548857FE500091FC1104110411FC1104110411FC1104 +60DD:1020112410A410A8182057FE5202520292FA128A128A128A12FA1202120A1204 +60DE:201020902710243E3422AC44A790A510A5102510252825282528294429443082 +60DF:10A01090108011FE1910571055FC5110911011FC11101110111011FE11001100 +60E0:010001007FFC01003FF821083FF821083FF80104FFFE0102288828A4482407E0 +60E1:00007FFC04403C78200820083C780440FFFE0000010008844892481287F00000 +60E2:01000080088848044812481287F00000101008082220A124A4A2A4A41D1C0000 +60E3:108050807CFC515492541CA4F124124410941108010008844892481287F00000 +60E4:10101388108810FE1890579052245224923813881090109010A410BE12821100 +60E5:01000500397821083D7821083FF8028004401830E10E08844892481287F00000 +60E6:1040102013FE12001A205620523E5220922012FC128412841284148414FC1884 +60E7:100013F8120812081BF8560853F8520893F8120812081FFE1000111012081404 +60E8:20802090210833FCA840A7FEA110A2482C862310202020C42308203020C02700 +60E9:100023FE40208920113C31205120912017FE1000010008844892481287F00000 +60EA:01007FFC01001FF010101FF010101FF010101FF01010FFFE01004884481287F2 +60EB:08000FF010202C4003801C70E00E1FF011101FF011101FF001004884481287F2 +60EC:200027FE2420242035FCAC20A524A4A8A7FE2420245024482484250427FE2000 +60ED:21002102211C2FD03210AA10A51EA7D4A114211421D42F142514212421242144 +60EE:11041088105011FC1924552451FC5124912411FC1020102013FE102010201020 +60EF:11FC1124112413FE1924552451FC500091FC1104112411241124105810841302 +60F0:1040104013FE108019FC562055FE500091FC110411FC110411FC110411141108 +60F1:109211241248112418925440508053FE9202128A125212221252128A13FE1202 +60F2:100013FE122210201BFE542051FC512491FC112411FC102013FE102010201020 +60F3:080008F808887E8808F818881CF82A88488808F8010008844892481287F00000 +60F4:2040244424443444AFFCA000AFFEA040208027FC24A424A424A424A424A4240C +60F5:10901290129017FE1A90569052F0520093FC104017FE10E0115012481C461040 +60F6:1020104011FC110419FC550451FC500093FE1020102011FC1020102013FE1000 +60F7:01007FFC01003FF80200FFFE08201FF02828CFE608200FE001004884481287F2 +60F8:110011FE120215F2191255F2511251FA900413F81010102017FE102010A01040 +60F9:08207FFC08200200FFFE08001FF02810C8100FF0010008844892481287F00000 +60FA:100011FC110411FC190455FC5020512091FE1220102011FC1020102013FE1000 +60FB:200227C22442245237D2AC52A452A7D2A452245227D2200222822242244A2804 +60FC:1040102013FE12021A0257FE5200520093FE1352155215FE1552155219521106 +60FD:100013FC120413FC1A2057FE5210528A9306100013FC120413FC120413FC1204 +60FE:10001088125212221A52568A520253FE90881144127A10881150102010D81706 +60FF:100011FC1104110419FC5504510451FC900013FE10201120113C112012A0147E +6100:208821C827083108A92AA12AA7ACA14823082388255425142914212421242142 +6101:0E207820082408A4FEA819202C504A50888809040A020100288828A4482407E0 +6102:08107F1008107F7E41123E1204120F1278220822284A108401004884481287F2 +6103:1040102013FE1A02540451FC500091FC110411FC110411FC1104100013FE1000 +6104:100013F8124812481BF85648524853F8900017FE124012441228129013081206 +6105:2110211027FC211031F0A840A3F8A248A24823F820402FFE2040204020402040 +6106:1200213C48009400217E6208AE08220822282210210008844892481287F00000 +6107:1040104011FC10841BFE540051FC510491FC102013FE1020122013FE10201020 +6108:010002800C6037D8C0063E0822483E4822483E482208261801004884481287F2 +6109:104010A0111012081DF6540053C45254925413D41254125413D41244125412C8 +610A:100013FE100011FC1904550451FC500093FE1222122213FE1222122213FE1202 +610B:103C17C012441928540053FC5080908017FE110011F812881250142018D81306 +610C:1080108010F811081A1055FC51045154918C1124102013FE1050108811041602 +610D:00207F20413E7F4448A47F244828451053286146010008844892481287F00000 +610E:1100110011FE1A0055FC510451FC910411FC108010FC11081290106011981606 +610F:01003FF808200440FFFE00001FF010101FF010101FF002005104511290120FF0 +6110:100017FE104010801BFC5694529452F49294129412F412941294129413FC1204 +6111:100013FC108810501BFE562253FE522293FE1222104013FE1042108211141208 +6112:100013F812081BF8560853F8510093FC1444124412A4120413F4100410281010 +6113:200023F8220833F8AA08A3F8A000AFFE220023FC249429242244248421282210 +6114:2080204027FC3000AA08A110AFFEA00023F82208220823F82208220823F82208 +6115:200027BC24A424A437BCA800A3F8A000A7FC2100220023F82008200820502020 +6116:1110111017FC111019F0551051F05110911017FE120012901308120013FC1000 +6117:00407F40127E0C88FF4819482A504820A850108C010008844892481287F00000 +6118:1040102013FE1202188054F85108529090601198160611F81108110811F81108 +6119:020001007FFE48029FF4282007C01830E00E1FF010101FF001004884481287F2 +611A:1FF011101FF011101FF001003FF8210821482FE82428201001004884481287F2 +611B:007C3F80110808907FFE41029494142823E808000FF01420224041800E60701C +611C:200027FE2420242035FCAC20A4A8A4A8A5742420245024482484250027FE2000 +611D:100013FE120012FC1A8456FC528452FC922013FE124812C812301248128413FE +611E:100013FE102010401BFE56525252525292421226102017FE1050108811041602 +611F:002800243FFE20202FA420242FA8289828924FAA4046808201004884481287F2 +6120:100011F81108110819F85508510851F8900013FC129412941294129417FE1000 +6121:1080108010FC11541AD454B4512C524490941108104010A412AA128A14781000 +6122:100013FC124412441BFC5644524453FC9000104010241522150A190810F81000 +6123:100013FC12941A94569453FC5080904017FE108010F810881108110812281410 +6124:102011FC102010881BFE5488500051FC91041124112411241124105010881304 +6125:2110211027FC21103150A840A3F8A248A24822482FFE204020A0211022082406 +6126:1020102011FC192455FC502053FE900011FC1104112411241124105010881304 +6127:2040208027FC24443444AFFCA444A484A7FC208021502164227C24422842303E +6128:08007F7808483E4800867F78414800303ECE0000010008844892481287F00000 +6129:100011FC102010201BFE540051FC510491FC110411FC110411FC108811041202 +612A:100011F81108110819F8540053FC520493FC120413FC120413FC109011081204 +612B:1040104017FC10401BF8544057FE5080911013E0104817FC1044124815441080 +612C:2200147CFF44087C4944497C7F44084410942108410008844892481287F00000 +612D:1040104411F810501BFE544050F85182927E140011FC110411FC110411FC1104 +612E:1008103C13C010041A44552851FC5220902013FE102011241124112411FC1004 +612F:10A0109011FE1B2055FC512051FC912011FE110013F811081090106011981606 +6130:100011FC110411FC190455FC5020512490A8102013FE1090109011121212140E +6131:1020101011FE190055205120553C93501190131015FE11101128122812441482 +6132:100011F8110811E8192857FE540251F8910811F8110811F81108110811281110 +6133:00003E7C22443E7C22443E7C22443E7C00000100088848844812481287F00000 +6134:10201020105018C8552453FE550491FC110411FC110011FC1284128414FC1084 +6135:100013DE104210421BDE5610521053DE90421252114A114A1252104212941108 +6136:104011FC10441094190857DE514A514A929411FC110411FC110411FC1104110C +6137:1040124812481A4857F8500057FC900013F81208120813F8111010A017FE1000 +6138:082008207F7C2A242A245D2408241C442A944808010008844892481287F00000 +6139:2040202023FE22023494A908A264A090A108220425FA21082108210821F82108 +613A:1088108813FE1088180055FC510451FC910411FC1124102013FE102010201020 +613B:000C7DF00440088811F010201C44F3FE102211245222206001004884481287F2 +613C:120C13F2120219FE540051FC550495FC150415FC150415FC140017FE11041202 +613D:1028102413FE102019FC552451FC512491FC1124100813FE1088104810481018 +613E:1100110011FC1A0055F8500053F8908812A811C817F8108A11CA16AA10861082 +613F:00003FFE208027F8240827F8240827F8225024482944208020444A424A1291F0 +6140:103C17C0124419285480511053E09040118813FC1044104017FC10A01110160E +6141:3FF820082FF822082D2822C82DA822982D8820083FF802005104511290120FF0 +6142:200017F8911040A047FC144427FCE44427FC244424040100288828A4482407E0 +6143:2120211022083486A910A3F8A008A00027BC208424A4229424A4208422942108 +6144:200027FC20A020A037FCACA4A4A4A7FCA040204027FC20E0215022482C462040 +6145:100013F81148111018A0544051B0564E904013F81248124813F8104417FC1004 +6146:103C13C010441224192855005040539C92041204139C12041204120413FC1204 +6147:0600387820483E4822863E0022FC3E4420283E1022284A4685004884481287F2 +6148:08200440FFFE10201020244878F0102024487EFC02040100288828A4482407E0 +6149:2080204027FC20803108ABF0A060A184A7FE200227FC244427FC244427FC2404 +614A:211020A0200027FE30A0ABF8A0A8A7FEA0A823F820A021B022A82CA620A020A0 +614B:108024987EE000847E7C42007E9842E07E844284467C02005104511290120FF0 +614C:2108210827FE21483020AFFEA200A200A3FC2000224822482248244A244A2846 +614D:200023F8224822A83318AA08A3F8A000A00027FC24A424A424A424A42FFE2000 +614E:2040204027FC204033F8AA08A3F8A208A3F8220823F822082FFE211022082404 +614F:100013FE1202100019FC550451FC510491FC1040102013FE1000108811041202 +6150:3FF801007FFC00001FF010101FF010101FF010101FF0082011104884481287F2 +6151:200023FC210821F83108A9F8A10EA7F8A00827BC20A422A42128229024A82846 +6152:1050105013FE10501BFE565253FE525293FE100011FC110411FC110411FC1104 +6153:20002FFE20A027FC34A4ACA4A7FCA000A7FC20002FFE20402248244429422080 +6154:2110211027FC21103000ABF8A208A3F8A20823F8204027FC20A0211022082C06 +6155:04407FFC04401FF010101FF010101FF00400FFFE12102208CB2612902A900400 +6156:200027FE242A242637FEAC22A7AAA6AAA7AA24322596262E2446248227FE2402 +6157:08200820FFBE08447FA449247F281C282A1049288844088201004884481287F2 +6158:2080211023F8221034A4AFBEA042A0A0A3182C46219026642188263021C02E00 +6159:08047F7808407F40497E7F4849487F4808487F48088802005104511290120FF0 +615A:22002202223C2FA03220AFA0AABEAFA4AAA42FA422242FA42224224422442284 +615B:1020122213FE1090188855FE5310551091FE1110111011FE1110111011FE1100 +615C:20203FA0403EBF4429A425247FE8292845107FA8014402825104511290120FF0 +615D:3FFC24202FF825203FFC220027F02A1033F020003FFC02005104511290120FF0 +615E:102011FC108810501BFE540051FC510491FC110411FC102013FE102010201020 +615F:21C8270821082FE8311EAFCAA54AA7CAA54A27CA210A27CA211221D22E2A2444 +6160:21082108210827D0311EAF94A124AFD4A21423D422542248224824D424242842 +6161:2040204027FC20403554AA48A554A040A5542248255420A020A0211022082C06 +6162:23F8220823F83208ABF8A000A7FCA4A424A427FC200023F8211020E023182C06 +6163:100011FC112413FE192455FC500051FC910411FC110411FC110411FC10881104 +6164:08787F4808483E8600787F4841489C2815102628404602005104511290120FF0 +6165:10101450127C1290181054FE50005600927C12441244127C1244150018FE1000 +6166:0A2009207FBE08446AA41C242A28491028281046010008844892481287F00000 +6167:1010FEFE10107C7C1010FEFE10103FF800081FF800083FF801004884481287F2 +6168:200027BE2488248837A8ACA8A4A8A7BEA4102518249825A826AA244A20462080 +6169:2010241022FE3210A8FEA092A6FEA29222FE221022FE22102210251028FE2000 +616A:100013FE1200127C1A445644527C520092EE12AA12AA12AA12EE120013FE1000 +616B:1110211041108AA814443240527C9240154018FE110008844892481287F00000 +616C:1088108813FE108818F8542051FC512491FC102013FE102011FC102013FE1000 +616D:081408127F104AFE2C10FF101C282A2849448882010008844892481287F00000 +616E:010001FC01003FFE21022FF4210027F8244827F8244827F820804A44521281F0 +616F:110011FC120015F8190855F8510851F8900017FE110013FC14A4112412541088 +6170:3F0821083F7E20082F4820285FA8440895282C90010008844892481287F00000 +6171:102013FE102011FC192455FC512451FC902213FE100813FE1108108810281010 +6172:1088108813FE1088188854F8502053FE9222133212AA137612221222122A1224 +6173:200027DC251427D43454AFC8A508A514A7E22000204027FC204020402FFE2000 +6174:100013DE10421252194A56525042502091FC1104110411FC1104110411FC1104 +6175:202027FE242025FC3424AFFEA424A5FCA42025FC252425FC252429FC2924312C +6176:00803FFE22203FFC22243FFC20003FFE20822A5431F2220027F84A0841F09E0E +6177:2040202027FE242035FCAC24A7FEA424A5FC2420256224B429282A2630A02040 +6178:145014507FFC245247CE80007FFC41041FF011101150112001004884481287F2 +6179:10407C4011F8FE48444828C87C68109AFE8A1106120202005104511290120FF0 +617A:204023F822482FFE3248ABF8A040A3F8A24823F820802FFE211020E023182C04 +617B:10401248115013F8188057FC5110520897FC1A0A13F8120813F8120813F81208 +617C:002800243FFE2220232422242FA822282A92522A46468102288828A4482407E0 +617D:20142012201027FE3410AC90A4D2A492A7F22494249425C82AAA289A31A62042 +617E:14202220493E144222944110BE28222822443E82010008844892481287F00000 +617F:43FE222023FC0A200BFC1220E3FE212227FA2122022602005104511290120FF0 +6180:100017BC108414A41A9454A450505188962610C0131010641388103010C01700 +6181:1040108013FC12441AF4571452A4524492A413FC104010241522150A190810F8 +6182:7FFC02001FF010101FF010107FFE41029494142823E808001FF0682007C0F83E +6183:01007FFC01003FF80200FFFE08203CF8D0161CF010101FF001004884481287F2 +6184:104027FC40408BF8120833F8520893F8120813F8120817FE01004884481287F2 +6185:7F200820FF2008FC7F2449247F2449247F2408447F440894FF08020851249FE4 +6186:1020112410A813FE1A0254F85088508890F81020102011FC1020102013FE1000 +6187:0688388809FE7E88088808F83E88228822883EF8010008844892481287F00000 +6188:1040107C104013FE1A42567853C4523C920012501254135414D8145019FE1000 +6189:1082108217F41088188057E2500253E49228122013E012221142107417881210 +618A:111017FC21102FFE6100A3F826482BF8224823F82248225801004884481287F2 +618B:082049202A3E7F4449A45D286B28491049284346010008844892481287F00000 +618C:08401440227C5C8489443E2C08144A2428C40E28701022005104511290120FF0 +618D:203823C0208027FE3110AA08A5F6A910A1F0200027FC240425F4251425F4240C +618E:11041088100013FE1A2256AA5272522293FE100011FC110411FC110411FC1104 +618F:2100211023DC22543554AA88A108A2F4A402200023FC20402150224825442080 +6190:20402248215027FC3150AA48A444A208A20823BE24882AA8213E220824082808 +6191:43FC22400BF80A4013F82240E3FC200425542008010008844892481287F00000 +6192:104013F8124813F8184057FE500053F8920813F8120813F8120813F811101208 +6193:204020402FFE204037FCAC44A7FCA444A7FC20442FFE204220242522250A28F8 +6194:2140212023FE22203620ABFCA220A220A3FC2220222023FE2200252424922892 +6195:202027A420A822923114AA08A5F4A802A3F82208220823F8220821102FFE2000 +6196:081408127F102AFE2A105D101C282A2849448882010008844892481287F00000 +6197:082008207F3E2A442AA45D2408281C102A284846010008844892481287F00000 +6198:102013FE102019FC540051FC510491FC108817FE100011FC1104110411FC1104 +6199:01007FFC01003FF800003FF820083FF80820FFFE20083FF801004884481287F2 +619A:100013DE125212521BDE540051FC512491FC112411FC102013FE102010201020 +619B:100013FE10501BFE565253FE500091FC110411FC110411FC102013FE10201020 +619C:2020272025FE2540357CAE90A57EA500A57C2544257C2644247C24442444244C +619D:08407F40007E3E8823483E4800503E5004207F500888290411004884481287F2 +619E:221021102FD0201037BEACA4A7D4A014A7942094211421C82F08211425142222 +619F:200027FC20A020A037FCACA4A4A4A7FCA248215027FC20E0215022482C462040 +61A0:3FFE289025102FBE22222AD42A902F90222844284444888201004884481287F2 +61A1:1210121013DE152818A4542053FE502093FE1222122A127410A8112416221020 +61A2:1020102011FC10201BFE5508539C51089188163E100013FE109010901112120E +61A3:103C13E0112410A81BFE54A85124520291FC1124112411FC1124112411FC1104 +61A4:102011FC102010881BFE548851FC510491FC110411FC110411FC108811041202 +61A5:08202AA80820145022887FFC400402003FF804080850302001004884481287F2 +61A6:108812AA12DC148819545622500053FE9242144413FC10441044108411141208 +61A7:102011FC108810501BFE540051FC512491FC112411FC102011FC102013FE1000 +61A8:7C200420FF3E22443EA422283E282390FE28424402820100288828A4482407E0 +61A9:1C10702010FCFE8410FC7C8444FC44847CFC4400010008844892481287F00000 +61AA:279E2492279E2492379EAC02A4F2A492A4F2249224F224922492253224022406 +61AB:200027BC24A427BC34A4AFBCA484A444A5F4242424A4244424A4250424142408 +61AC:100013F812081BF8560853F8504097FE100013F8120813F810401248144410C0 +61AD:2040204027FC20A03514AA08A7FCAA0AA3F8220823F820402248244429442080 +61AE:2100210023FC36A8AAA8A2A8A7FCA2A822A822A82FFE200022A8225424542000 +61AF:200027BC2108252837BCAB18A5AAA946A00023F82208220823F82208220823F8 +61B0:100013FC104810301BFE545250945350902013FE1252128A1376125212721206 +61B1:221421122FD22010307EAF90A490A490A790212825A825682928214A254A2286 +61B2:01007FFC41043FF801001FF00100FFFE01003FF824483FF801004884481287F2 +61B3:100013FC100413FC180457FC500053BC912417BC100813FE1108108810A81010 +61B4:200027FC24A424A437BCA8A0A7BCA4A4A4A427BC24A424A427BC24A220A2207E +61B5:00407C2045FC44887C5043FE7C20A5FC24203C20010008844892481287F00000 +61B6:1080104013FC1908549057FE500093FC120413FC120413FC10401524150A18FA +61B7:2110211027BC3110ABB8A554A912A00027FC2044224022782240254028FE3000 +61B8:2040204020A03110AA08A5F6A800A7BC24A424A427BC22102210252829443082 +61B9:109013FC12941BFC569453FC500093FC120012F8120013FE1520151415481986 +61BA:110011F8120817FE1A88572453FE520092FC120012FC120012FC148414FC1884 +61BB:102017FE100013FE1A0256FA528A53FE900011FC110411FC110411FC100017FE +61BC:2220FFA0223E20447FA481287D2845107D280A44048202005104511290120FF0 +61BD:21102FFE21103200ABFCA4A4ABA4A164225424942108204020242522250A28F8 +61BE:2014201227FE241035D0AC14A5D4A558A5CA24162442282422A2228A24782000 +61BF:2108220827C8245037DEAC64A7D4A214A11427D4221423C822482454255428A2 +61C0:204020A023182DF63000AFFCA554A4E4A7FC200023F8220823F8220823F82208 +61C1:200023FC22943294ABFCA000A7FEA00023FC220423FC20A2211423082D442182 +61C2:211027FE211023F83040AFFCA040A3F8A24823F8224823F8204027FC20402FFE +61C3:2220FFA022203EFC08247F2449247F2408247F440854FF8801004884481287F2 +61C4:228822882FE8228833BEA90AA7CAA54AA7CA210A27CA210A27D2211221EA2E44 +61C5:1040107C104013FE1A42567853C4523C920013FE124013A4125815B4145219B0 +61C6:23F82208220833F8A800A7BCA4A4A4A427BC20402FFE21602250244838462040 +61C7:0600F8FC4A8424FC3884CCFC36A2CA9412A86AC4048202005104511290120FF0 +61C8:2200239E248A290A37D2AD66A540A7D4A55E256427C42544255E2544244428C4 +61C9:010000803FFE224824FE2D9034FC249024FC249024FE24804244524A920A21F8 +61CA:2080210027FC24443554AC44A7FCA4E4A554240420402FFE20A0211022082C06 +61CB:27882088FABE210877D86B5CA52A294825082208010008844892481287F00000 +61CC:200027FC24A427FC3040ABF8A040A7FCA11020A023F820402FFE204020402040 +61CD:20402FFE200027FC3404ADF4A514A5F4A40427FC200823F020402FFE21502E4E +61CE:2040204027FC3248AA48A554AFFEA00027FC240425F4251425F4240427FC2404 +61CF:10A0109011FE132019FC552051FC512091FE110013DE12521252127212021206 +61D0:1040102013FE100019FC5554515451FC902013FE10501094118812A814C41082 +61D1:01104FFE211027FC80A047FC54A414A4E56426542484240C01004884481287F2 +61D2:221022102F9C22243248AFBEAAA2AAAAAFAA222A272A2AAA3288221422222242 +61D3:103C13C010441224190857FE544252A4928A147A108010F8110812901060179E +61D4:20402FFE200037FCAC04A5F4A514A5F4240427FC200023F820002FFE224824C4 +61D5:00003FFE288C2F8A28882FBE20082F8828882F94289429A2408042408A1411F2 +61D6:080C147022105C1088FE3E1008104A7C28440E44707C22005104511290120FF0 +61D7:21102110211037BCA910A110AFFEA2A822A826EC2AAA22AA22A825A824482898 +61D8:42A827FC22AA84E6400057FC1444E3F822482258214008844892481287F00000 +61D9:1140124C126412441B4C566452A453AC92A412A417FE10001110110812041404 +61DA:203E27C02244212833F8A840A7FCA000A3F8200823F8200823F82544252A28FA +61DB:20402FFE204027FC3000ABF8A208AFFEA80227FC211023F8204027FC20402FFE +61DC:1088108813FE10881BFE565253FE500093FE124210F811081290106010C01700 +61DD:2400257C260434A8AB90A07CA414A7942A5022502FDC2250255024B0289E2100 +61DE:108813FE108813FE1A0255FC500053FE904010A2135410B81354109213501020 +61DF:140855083608147E7F0814487F2808283E0808080F28781021004884481287F2 +61E0:2080204027FC211030A4AF58A554A552AB582000220823F8220823F822082408 +61E1:2040202027FE248837DEAC88A5DCA6AAA4882440249025202448248425FC2884 +61E2:201027D0251027DE3450AFE8A504A7C4A00023F822A822A822A822A82FFE2000 +61E3:011047FC211081F0404017FC1664E55426EC2444244C02005104511290120FF0 +61E4:204027FC204033FCA800A7FEA002A3F8204027FE200027FE200827FE24A82798 +61E5:204027FC204027FE3402ABFCA248A3F8A24823F8200027FC22442278254028FE +61E6:200027FC20402FFE3842AB58A040A358A0002FFE204027FC24A424A424A4240C +61E7:2080204027FC244432A8AA94A474A000A3F822A82FFE200027FC204021402080 +61E8:20002FFE28082BC83A4CABCAAA48ABDEA8082BC82A482BD42A542BD42A5432E2 +61E9:2208211027FC3040ABF8A080A7FCA14823FC260A2BF8220823FA2234228C2302 +61EA:23F8220823F8220833F8A910A7FCA110AFFE21102248255420E02150224820C0 +61EB:1042139C12101BDE56945294542093FC120413FC120413FC120413FC11081204 +61EC:00803FFE22202FF822203FFC20802FF828882FF828882FF842205494924A23FA +61ED:2040202027FE248835FCAC88A7FEA420A5FC252425FC252425FC240024882904 +61EE:27FC208023F83208ABF8A208AFFEA8822548251428F4210023F8250820F02F0E +61EF:0A20FFA0493E7F4449A451240828FF2820103E284244868201004884481287F2 +61F0:220225E224A226AA352AAE6AA10AA28AA44A2BAA210A27CA2122254221EA2E04 +61F1:110817FE110810001BFC5694529453FC902813FE1220132412A81292142A18C6 +61F2:22204AA08ABE1FC420A46F24A0282FA822102FA822442F8201004884481287F2 +61F3:108813DE108819DC548853DE508893FC100411FC100413FC104012A4128A147A +61F4:2114211227D23110A910A7FEA290A6D2229226D2229426D4228A22CA2F162022 +61F5:110817FE110813FC1A9457FC500057FE940211F8110811F8110811F8110811F8 +61F6:2108210827CE21123124AFDEA552A55EA7D2211E2392255E2940211421122122 +61F7:208020402FFE200037FCACA4A7FCA248A1502208244420A8211023082D462180 +61F8:3E0E22F03E2022443EF822103E2422FE7F1008542A92595001204884481287F2 +61F9:204027FC200023B832A8ABB8A110A7FCA11027FC21102FFE212823102D482186 +61FA:2448244C2AAA3008AFFEA288AEE8A28A2EEA228C2EEC228822EA2F1A24262042 +61FB:109413981092118E1A8055FC512451FC912411FC108811FC108813FE10881104 +61FC:27BC24A427BC24A437BCACA4A7BCA120A3FE222027FC2A2023FC222023FE2200 +61FD:21102FFE211027BC34A4AFBCA140A120A3FE222027FC2A2023FC222023FE2200 +61FE:13FC110811F8190855F8510E57F8900817FE1294139C1294139C12D617BC1084 +61FF:1020FF2010BE7C440050FE9083907CA800A47CC244207C1045542F42F14A4238 +6200:210447C88812F3BC20084B92F83E0380AAAAABAA010008844892481287F00000 +6201:2850FE4828FE399012907CFE54907C9010FE7C901090FEFE28804504249243F0 +6202:202027FE248827DE3488ADDCA6AAA488A45027DE245025DC24502BDE28503050 +6203:2248215027FC240431F0A910A7FCA554A4E427FC204027FC20402FFE22A42452 +6204:13DE125213DE12521BDE54A051FE532095FC112011FE100011FC10881070178E +6205:1000FEF82820FEFC00007CF844887CF844887CF81088FEF81050020851249FE4 +6206:1040FEF82948FE3001CE7CF844207DFC44887CA810A8FE5011884884481287F2 +6207:1040FEF82948FE3001CE7CF844207DFC44887CF81088FEF81050028851249FE4 +6208:022002100210020002FEFF0002080208021001200140008003420C22701A0006 +6209:00900088008800807FFE408040804088408840904060484450A46114420C0404 +620A:0090008800803FFE208020802084204420482048203020222052408A43068C02 +620B:02400220022002FC7F0002000200023EFFC002100120014001840E447034000C +620C:0050004800403FFE20402040204420443E442028202820122032404A40868102 +620D:0050004800403FFE204020402044304428442428242820122032404A40868102 +620E:004800440040FFFE00400840084408447F440828082810121032204A40860302 +620F:0020002800247E240220023E25E0142408240828142812102232404A00860102 +6210:0050004800403FFE2040204020443E4422442228222822122A32444A40868102 +6211:04400E50784808480840FFFE084008440A440C48183068220852088A2B061002 +6212:004800440040FFFE00401240124412447F441228122812122232224A40860302 +6213:004800440040FFFE0040004000443E4422442228222822123E32224A00860302 +6214:0240022002FC7F10016003841C64E01C0240022002FC7F10016003841C64E01C +6215:042024282424242424203C3E05E00424FC242428242824102432444A84860502 +6216:004800440040FFFE004000403E442244224422283E2800120732784A20860302 +6217:0828082414241220212E40F0BE202224222422282A2824102112212A1F460082 +6218:1020102810241E241020103E11E010247E2442284228421042327E4A42860102 +6219:0028FF2481248120BD2E81F08120BD24A524A528A528BD108112812A85468282 +621A:0028002400203FFE222023A0222422243FE4202822282A903252422A4A468482 +621B:7FFC02001FF010101FF010101FF010101FF0024003F87E20014000840764381C +621C:005000480040FFFE00403E4022443E4400447F2808283E1208320F4A78862302 +621D:00287E24422442207E2E42F042207E24422442287E2800102412222A41468182 +621E:7FFC02001FF010101FF010101FF010107FFE424283FC7E20014000840764381C +621F:08200828FFA408247F20413E7FE041247F2449280828FF900832084A08860902 +6220:10400848FF44004442402440FFFE00407E44424442287E2A4212422A7E464282 +6221:22202228FF2422243E20223E3FE022242224FF28402854106232404A7E860102 +6222:3F28212421243F200020FFFE21203F2421243F28212827D0F912412A01460182 +6223:0A28742415245220222E21F04120BE24082408287F2808101412122A22464082 +6224:00107E14221224103F16557849125512A21200147F145508551A57AAFC460082 +6225:00207E2842247E2442207E3E09E048247F2488287E2808100F32F04A40860102 +6226:90A8492400247F20492E49F07F20492449247F2808280810FF92082A08460882 +6227:08280C241224292044AEBFF021203F2421243F2820283F105112512A9F461182 +6228:0028FF2402247A204A2E7AF00020FF2402247A284A284A107A12022A0A460482 +6229:0028FF2422245520F72E00F0FF2000247E24422842287E104212422A7E464282 +622A:082008287F240820FFFE142022247FA4A4243F2824283F1024123FAA20462082 +622B:10141012FE1011FE20103C1025D26552BD52255425D43C0824CA271A24262C42 +622C:00107F941212529033161278FFD200123F12211421143F08211A212A3F462182 +622D:10100814FF92809000167F7808127F1249127F1449147F08001A222A41468082 +622E:0010771411125510331655780C123312C492181462140C88711A062A1846E082 +622F:10281E2410247F20512E5CF072204E2440244A286AA85B104A128F2A78460082 +6230:0010F79494929490F79600787F1249127F1249147F140808FF9A082A08460882 +6231:08100F1408127F9048964E787912471240124A146A94AA88BB9A0A2A7F462082 +6232:08280F2408247F20492E4CF07920472440245F2840285F1051125F2A8A463F82 +6233:0020EE282224AA246620AA3E01E024247F24C8287E2848107E32484A7F864102 +6234:08207F280824FFFE00207F2049247F2449247F2822287F102212FFAA22464182 +6235:7728552477245520772E55F0772022247FA4A4283F2824103F12242A3FC62082 +6236:001000F81F0010001FF81008100810081FF81008100010002000200040008000 +6237:0200010001001FF810081008100810081FF81008100010001000200020004000 +6238:00007FFE000000001FF81008100810081FF81008100010002000200040008000 +6239:020001003FFC200420043FFC200020002FF0202020C0210042004404840403FC +623A:08000400047C3F442144214421443F44217C204020402040204240424042803E +623B:020001003FFC200420043FFC2080208020802FFC214021404220441088081006 +623C:0000FC7E0440044004407C7C4444444444447C7C044408400840104020404040 +623D:020001003FFC200420043FFC20002220212024202220207E5FA0402080200020 +623E:020001003FFC200420043FFC208020A020902FFC214021404220441088081006 +623F:020001003FFC200420043FFC210020803FFC2200220023F84408440888281010 +6240:0208071C38E0208020803E8022FE228822883E88208820884108410882080408 +6241:020001003FFC200420043FFC200020002FFC292429242FFC492449248924080C +6242:020001003FFC200420043FFC2080208020FC208020802FF8480848088FF80808 +6243:020001003FFC200420043FFC200020002FFC280429E42924492449E488140808 +6244:020001003FFC200420043FFC210022002FFC280429E42924492449E488140808 +6245:010000803FFC20043FFC210023F02C2022C023403CFC23084C90406081801E00 +6246:020001003FFC200420043FFC210020802FFC2140224426284A10528883060200 +6247:020001003FFC200420043FFC200020003F7C2104292425144924514485140208 +6248:010000803FFC20043FFC200027F0241027F020002FF828884FF84802880207FE +6249:010000803FFC20043FFC212021203F3E212021202F3C212041205F3E81200120 +624A:010000803FFC20043FFC24882490296022182C84348A2488495042208C183006 +624B:001000F83F00010001003FF8010001000100FFFE010001000100010005000200 +624C:1000100010001000F8001000140018003000D000100010001000100050002000 +624D:0080008000800080FFFE01800280028004800480088010802080408002800100 +624E:1080108010801080FE801080108012801C803080D080108410841084507C2000 +624F:1080108010801080FDF010901090149018903090D090109211121112520E2400 +6250:1040104010401040FDFC10441044144418443084D08410841104110452282410 +6251:1080108010801080FE8010A0109012881C843084D08010801080108050802080 +6252:1000102011201120FD2011201120152019203110D21012101208140854042802 +6253:1000100013FE1020FC2010201020142018203020D02010201020102050A02040 +6254:1000100013F81088FC90109010A014BC18843084D10411041104120452282410 +6255:1040104010401040FC4010801080148019003110D108120817FC120450042000 +6256:1200110010801080FC401040104014A018A030A0D11011101208120854042802 +6257:1020102010201020FC20102011FC142018203020D02010201020102053FE2000 +6258:1008103C13C01040FC4010401040147E1BC03040D040104210421042503E2000 +6259:1010101010101010FDFE10101010151019103090D09010501020105051882606 +625A:10401040108010FCFD0412041004150418843044D04410041004100450282010 +625B:1000100011FC1020FE201020102012201C203020D02010201020102053FE2000 +625C:100011FC10201020FC20102014201BFE3020D020102010201020102050A02040 +625D:100011FC10001000FC0013FE10401440188030FCD00410041004100450282010 +625E:100011FC10201020FC20102014201BFE3020D020102010201020102050202020 +625F:100013F010901090FC901090109013F018903090D0901092108A108A50862082 +6260:100017F812081288FE4811501110151018A030A0D040104010A0111052082C06 +6261:1020102010201120FD2C1134116417A419243134D12811221122110250FE2000 +6262:10401040108010FEFD00120010FC140818103020D04010801102110250FE2000 +6263:1000100011FC1104FD0411041104150419043104D1041104110411FC51042000 +6264:1000100013FC1090FC9010901090149018903090D090109211121112520E2400 +6265:102010201020103CFDE0102010201420183E33E0D020102210221022501E2000 +6266:1008103C11E01020FC201020102017FE18203020D02010201020102050202020 +6267:1040104010401040FDF8104810481448194830C8D04810A810AA110A52062402 +6268:1000100011FC1044FC4411441144154419443244D04410841084110452282410 +6269:10201010101011FEFD0011001100150019003100D10011001100120052002400 +626A:1100108010BC1204FA04120416041A043204D204120412041204120452142208 +626B:1000100013FC1004FC041004100415FC18043004D0041004100413FC50042000 +626C:100011F810101020FC40108011FE149218923092D11211221222144250942108 +626D:100011FC10441044FC441044104415FC18843084D08410841084108457FE2000 +626E:1010109010901088FD081104120415FA18883088D08810881108110852282410 +626F:1020102010201120FD201120113C152019203120D12011201120112057FE2000 +6270:1040105010481048FC4011FE1050145018503050D090109010921112510E2200 +6271:100013FC10841088FC881090109C148419443144D12811281210122854442182 +6272:1040104010A010A0FD10128814461040180033F8D00810101010102050202040 +6273:1008101C11E01100FD0011FC1144154419443128D12811101110122852442482 +6274:1020102010501050FC8811041202108818883088D08810881088110851082208 +6275:1020102010201050FC50108815041A023060D010100010C01020101050082000 +6276:1020102010201020FDFC1020102014201BFE3020D05010501088108851042202 +6277:1008103C11E01020FC20102013FE142018203050D05010501088108851042202 +6278:1010111011101110FD1011FE11001500190031F8D10811081108120852082408 +6279:1010111011101112FD12111411D8151019103110D110111211521192510E2000 +627A:1008103C13E01220FE201220122017FE1A203210D2101212120A128A53062202 +627B:10801080108010FCFD04110812401440184030A0D0A010901110110852042402 +627C:200023FE22002200FAF8228822882A883288E2A82290228224822482A87E5000 +627D:10201020102013FEFC20112411241524192431FCD024102010221022501E2000 +627E:1090108810881080FCBC13C01080148818883090D060104410A41114520C2004 +627F:1FE000400080010479280FF00920111017D0210821084FE48102010005000200 +6280:10201020102013FEFC201020102015FC18843088D04810501020105051882606 +6281:1040104010801088FD0413FE1002149018903090D090109011121112520E2400 +6282:1000100013FE1020FC2010201020142019FC3020D02010201020102057FE2000 +6283:1040102010201000FDFE10401040146018503048D04410441040104050402040 +6284:10201020102010A8FCA410A2112215201A243024D02810081010102050C02300 +6285:10801080108010FEFD0212421042148218A23112D3FA110A1002100250142008 +6286:10401020102013FEFC8810881088148818883050D05010201050108851042602 +6287:1000100011FE1102FD021102110215FA19023102D1021102110211FE51022000 +6288:100011FC11041104FD0411FC11041504190431FCD10411041204120454142808 +6289:10401040104013F8F84810481448184837FED04010A010A01110111052082406 +628A:100011FC11241124FD241124112415FC19043100D10011001102110250FE2000 +628B:1000104010201010FC901080108012841A823282D28214881088108850782000 +628C:10201020102011FEFD2212241020142018503050D0501050109010925112220E +628D:1008106813881088FC88108814881BFE3088D088108810881108110852082408 +628E:1000100011FC1000FC00100013FE142018203040D0401088110413FE51022000 +628F:1000100011FC1000FC00100013FE109018903090D090109011121112520E2400 +6290:1020102010201020FDFE1122112215221952314AD18A110211021102510A2104 +6291:10001080133C1224FE241224122416241A243224D2B413281220102050202020 +6292:100011F810081050FC20101013FE142218243020D02010201020102050A02040 +6293:1008101C11F01150FD5011501150155019503148D14811481144124452422400 +6294:1000100013FE1020FC201040104014D019483244D44410401040104050402040 +6295:100010F810881088FC881106120015FC18843084D04810501020105050882306 +6296:1010111010901090FC101110109014901810301ED3F010101010101050102010 +6297:10801040104013FCFC00100011F0151019103110D110111211121212520E2400 +6298:1008101C11E01100FD00110011FE151019103110D11011101110121052102410 +6299:1008103C11E01020FC2011FC10201420182033FED02010201020102050A02040 +629A:100013FC10401040FC40104017FE104018A030A0D0A0112011221222541E2800 +629B:121012101210127CFA14179412941A9432A4D2A412D4128A14821482587E3000 +629C:1040104010401040FBFE1080148018FC3144D144114812501220145058882306 +629D:20802080213E2102FA42224227C228823082E1022142222227E22222A00A4004 +629E:100011FC11041104FD04110411FC152419203120D11011101208120854042802 +629F:10201020102011FCFC20104011FE1440188031FCD00410881050102050102010 +62A0:100011FE11001104FD4411281128151019103128D12811441184110051FE2000 +62A1:1040104010A010A0FD1012081406111019203140D18011001104110450FC2000 +62A2:1040104010A010A0FD101208140611F019103110D15011201104110450FC2000 +62A3:10401040108010FCFD0412041084144418443014D02410441184100450282010 +62A4:10401020102011FEFD021102110215FE19023100D10011001200120054002800 +62A5:100011FC11041104FD141108110015FC19443144D12811281110112851442182 +62A6:100013FE10201020FC2013FE122216221A52324AD28A130212021202520A2204 +62A7:1000100011FC1104FD0411041104150419FC3104D00010901088110452022402 +62A8:100011FC10201020FD2410A410A814201BFE3020D02010201020102050202020 +62A9:10201020102011FCFD24112411FC152419243124D7FE11041104110451142108 +62AA:10401040104013FEFC8010A0152019FC3324D524112411241134112850202020 +62AB:10101010101011FEFD121114111015FC19443144D12811281110122852442482 +62AC:1020102010401088FD0413FE1002140019FC3104D10411041104110451FC2104 +62AD:10401020102013FEFA021404100018F03090D0901090109011121112520E2400 +62AE:1040104010A01110FA081426104018803310D020104010881310102050C02700 +62AF:100011F811081108FD0811F811081508190831F8D10811081108110857FE2000 +62B0:10201020102011FCFD24112411241524192433FED02010501050108851042202 +62B1:1080108011FC1104FA0415F4111419143114D1F4110411281112110250FE2000 +62B2:1000100017FE1008FC0813C8124816481A483248D3C812481008100850282010 +62B3:100011FC11041104FD0411FC1100154019443148D170114011421242523E2400 +62B4:2048224822482248FA4827FE22482A483248E2482278220022002200A3FE4000 +62B5:1008103C13E01220FE201220122013FE1A203210D2101212120A128A53262212 +62B6:1020102011201120FDFC1120122010201BFE3020D05010501088108851042202 +62B7:100013FC10201020FC40104014D019483244D444104010401040100057FE2000 +62B8:1008103C13C01000FC40102013FC140818103020D040108011001280547E2000 +62B9:10201020102013FEFC201020102015FC187030A8D0A811241124122250202020 +62BA:10201020102011FCFC201020102013FE187030A8D0A811241124122250202020 +62BB:10201020102013FEFA22122216221BFE3222D222122213FE1222102050202020 +62BC:100011FC11241124FD2411FC11241524192431FCD12410201020102050202020 +62BD:1020102010201020FDFC112411241524192431FCD12411241124112451FC2104 +62BE:1020102010201020FDFE1020102014201BFE3020D04010401088110453FE2102 +62BF:100013FC12041204FE0413FC122016201BFE3220D22012101212128A53062202 +62C0:100011FC11041104FD04110411FC145018503050D050109210921112520E2400 +62C1:220022002200221EF7D22252225222523252E252225222522452245EA9525080 +62C2:10901090109013FCFC94109413FC16901A9033FED0921092111A111452102410 +62C3:10801080108010FEFD4011401240107C18403040D040107E1040104050402040 +62C4:10401020100013FEFC2010201020142019FC3020D02010201020102053FE2000 +62C5:1000100011FC1104FD04110411FC150419043104D1FC11041000100053FE2000 +62C6:1008101C11E01100FD00110011FE151019103130D11811141112121052102410 +62C7:100011F811081148FD281108110817FE1A083288D248120813FE100850502020 +62C8:104010401040107EFC4010401440184033FCD204120412041204120453FC2204 +62C9:1040102010201000FBFE1000140419043104D088108810881090101057FE2000 +62CA:1088108810881108FD7E13081508114819283128D10811081108110851282110 +62CB:221022102210227CFA1427D422942A9432A4E2A422D4228A24822482A87E5000 +62CC:10201020112410A4FCA8102011FC142018203020D3FE10201020102050202020 +62CD:10201020104011FCFD0411041104150419FC3104D10411041104110451FC2104 +62CE:1040104010A010A0FD101248142610201BF83008D010111010A0104050202020 +62CF:10001000FEFC2244642818102428C2C600201FC001003FF801007FFC01000300 +62D0:100011FC11041104FD0411FC104014401BFC3044D04410841084110452282410 +62D1:1088108810881088FDFE108810881488188830F8D08810881088108850F82088 +62D2:100011FE11001100FD0011FC1104150419043104D1FC11001100110051FE2000 +62D3:1000100013FE1020FC201040104014FC19843284D48410841084108450FC2084 +62D4:1050104810481040FBFE1080148018FC3144D144112811281210122854442182 +62D5:10201010101011FEFD02120410801488189030A0D0C0108210821082507E2000 +62D6:1080108010FE1100FE201120112C15741BA43124D13411281122110250FE2000 +62D7:2020212021202220FAFC24A4272429243224E22424A427A420C42044A0944108 +62D8:10801080110011FCFA04140411E419243124D12411E411241004100450282010 +62D9:1020102011241124FD24112415FC18243020D020122212221222122253FE2002 +62DA:1020102010401088FD0413FE10021488188833FED08810881108110852082408 +62DB:100013FC10841084FC841104111412081C0031FCD10411041104110451FC2104 +62DC:04001EFCF020102010FCFE20102010FC1020FE2011FE10202020202040208020 +62DD:100013FE10201020FDFC1020102015FC18203020D3FE10201020102050202020 +62DE:1008101C11E01100FD001100110015FE19103110D11011101110111057FE2000 +62DF:1008108810481228FA28120812081A083208D208121012981324122450422082 +62E0:220022382228FBA822A822A834A826AAEAAA22AA2126214022802260A41E4800 +62E1:10201010101011FEFD0011101110151019103120D1281124124412FE54422800 +62E2:1090108810881080FBFE10A014A018A430A4D1281128113212221262549E2800 +62E3:1040104017FC1080FC8013E0112012201BFC3020D12811241222142250A02040 +62E4:104010401040107CFC40104014401BFE3040D040105010481044104050402040 +62E5:200027FC24442444FC4427FC24442C443444E7FC2444244424442844A8545008 +62E6:1000110810881090FC0013FE10001400180031FCD00010001000100053FE2000 +62E7:10401020102013FEFA0214041000180033FED020102010201020102050A02040 +62E8:1040104812441240FBFE1080148018FC3144D144114812501220145058882306 +62E9:200027F822082110F0A0204021B0264E3040E3F82040204027FC2040A0404040 +62EA:100017FE10901090FC9013FC129416941A943294D29C13041204120453FC2204 +62EB:100011F811081108FDF81108110815F819443148D13011201110114851862100 +62EC:1008103C11E01020FC2013FE10201420182031FCD10411041104110451FC2104 +62ED:1028102410241020FBFE102014201BA03120D1101110111011CA170A52062002 +62EE:10201020102013FEFC20102011FC1400180031FCD10411041104110451FC2104 +62EF:100011FC10081010FC2213B210B414A819283124D22214A01040100057FE2000 +62F0:10801088109C1170FD1013101510111019FE3110D110111011101110517C2100 +62F1:1088108810881088FDFE108810881488188833FED00010881084110452022402 +62F2:044004407FFC0440FFFE08203018C0E61F0001003FF801007FFC010005000200 +62F3:0100111009203FF802007FFC082010F03F08C1061FE001003FF8010005000200 +62F4:1020102010501088FD04120211FC142018203020D1FC10201020102053FE2000 +62F5:10401040104013FEFC801080117815081B103510D1FE11101110111051502120 +62F6:1124112412481124FD241000108014FC19043184D24814281010102050C02300 +62F7:1040104411F41048FC5013FE1040148019FE3240D48010FC1004100450282010 +62F8:1040104010FC1108FA90106014481990363ED042108413481030102050C02700 +62F9:1040104011FC1044FC84108415281A103108D3DE114A114A114A1252535A24A4 +62FA:1020102013FE1020FC2011FC112415241924312CD07010A81124162250202020 +62FB:10401040104013FEFC8010901090151219523154D29012281428104450842102 +62FC:1104108410881000FDFE108810881488188833FED08810881108110852082408 +62FD:1020102011FC1124FD2411FC1124152419FC3020D0241018103210CA53062002 +62FE:1020102010501088FD04120211FC1400180031FCD10411041104110451FC2104 +62FF:010006C01830EFEE00001FF010101FF000201FC001003FF801007FFC01000300 +6300:1004101E11E01100FD0611781150155019523154D14811481144125452622440 +6301:10201020102011FCFC20102013FE1008180833FED00810881048100850282010 +6302:1020102011FC1020FC20102013FE100018203020D1FC10201020102053FE2000 +6303:100011FE10201040FC88110411FE142218203020D1FE10201020102053FE2000 +6304:1040104412441148FD50104017FE109018903090D090109211121112520E2400 +6305:100013F810881090FCBC110415141A483040D7FE104010E01150124854462040 +6306:100011F011101110FD101110124E14401BFC3040D0E011501248144650402040 +6307:11001104113811C0FD02110210FE140019FC3104D10411FC1104110451FC2104 +6308:08007F7C08243E2408247F44085408F83F0001003FF801007FFC010005000200 +6309:10401020102013FEFA02144410401BFE3088D088110810D01020105050882304 +630A:10401040107C1040FC4013FE100010001BFE3040D05010481044104050402040 +630B:100013FE12201220FE2013FC120416041A043204D3FC12201220122053FE2000 +630C:1080108011F81208FD1010A0144018A03318DC0613F812081208120853F82208 +630D:10401020102013FEFC0010881104120218883088D05010501020105050882306 +630E:2040204027FC20A0F11022082DF6200037FCE080210023F820082008A0504020 +630F:100011FE11021102FD7A11021102157A194A314AD14A117A11021102510A2104 +6310:10001000FE7C224442443444087C3400C2201FC001003FF801007FFC01000300 +6311:1090109010901292FD941098109015981A943492D0901090111211125212240E +6312:200220022FC22212FA1223D222522C523652E5522892209221022202A40A4804 +6313:10401020102013FEFA02140410381BC03040D040107E17C0104010425042203E +6314:10401020102013FEFC40104010A014A219A43298D4901088108410A250C02080 +6315:100013FE11081108FD0811F81108150819F83108D108111E17E8100850082008 +6316:1040102013FE1202FC881104120214F818103020D04010801102110250FE2000 +6317:1020102013FE1020FDFC102411FC152019FE3022D02A10541050108851042202 +6318:1020102011241122FA2A101014601B803040D04013FC10441084108451142208 +6319:2208110811100020FFFE0820101020E8DF0601003FF801007FFC010005000200 +631A:1080FBF010901990F0941154520C24E41F0001003FF801007FFC010005000200 +631B:02000100FFFE044014502448444400F03F0001003FF801007FFC010005000200 +631C:100013FC10901090FC901092149212941A943298D09010901090109057FE2000 +631D:2408220822082008F8FE2E0822482A283228E2082208222822102500A8FE4000 +631E:1010121011101110FCFE10101310152819243144D142118211001280547E2000 +631F:10201020102011FCFC20112410A414A8182033FED05010501088108851042202 +6320:1080108010BC13C0FC50102410D4130C180033FED090109011121112520E2400 +6321:1040124411441144FD48104017FC100418043004D3FC10041004100457FC2004 +6322:2010207823C02040F84027FE20A029103208E5162110211021102210A2104410 +6323:1080108011F01210F82013FC1044184437FED044104413FC1044104051402080 +6324:1080104017FE1208FD1010A0144019B0360ED110111011101110121052102410 +6325:100013FE12021444FC4013FC108014A0192031FCD020102017FE102050202020 +6326:100013FC10041004FDFC1004100417FC18083008D7FE11081088108850282010 +6327:100013DE10421042FA52114A154A184230C6D14A1252104210421042514A2084 +6328:2040208021102208F7FC2104210023F83440E0402FFE204020A02110A2084C06 +6329:1010109010881108FA0415FA110819083108D1F810901090109011125212240E +632A:100017DE12521252FA5417D412581A543252DFD21252125A1254145055502890 +632B:2040204022482248F248255428E220403040E7FC2040204020402040AFFE4000 +632C:1020102013FE1020FC2013FE1202140419F83010D02013FE1020102050A02040 +632D:100013FE10201020FDFC1124112415FC19243124D1FC112010A0104050B0230E +632E:11081088109013FCFC24102413FC16201A2033FED06210A2112A122454202020 +632F:100013FC12001200FEF81200120017FC1AA032A4D2A812901290148854A428C2 +6330:100011FC11041104FD0411FC100014001BFE3020D02011FC1020102053FE2000 +6331:1010121011101110FC5412521252109018103114D604120812081210522020C0 +6332:204012484444201408607380200000F03F0001003FF801007FFC010005000200 +6333:100011FE10001092FD24124811241492180031FED02010201020102053FE2000 +6334:1100110011FC1200FDF81108114815281BFE3108D248122813FC100850502020 +6335:100013FE10201020FDFC102014201BFE3088D08813FE10881088110851082208 +6336:100011FC11041104FDFC1100110015FE1902317AD14A114A127A120254142008 +6337:2100211E211227D2F914211427D829143112E7D22112211A21142210A2104410 +6338:100011FC11041104FDFC1104150419FC3104D10411FC1050105010925112220E +6339:100011F811081108FDF8100013FC12441A443244D3FC12001202120251FE2000 +633A:2000200C27702110F9102210227C2F103110E5102510227C22002500A8FE5000 +633B:1004100E13B81088FC881128152E1BA830A8D2A812A8113E11001280547E2800 +633C:1008103C13C01044FA2411281500184033FED088110813901060105051882604 +633D:1080108011F81208FC1013FC124416441A4433FCD0A010A011221122521E2400 +633E:10201020102013FEFC20102011241524192432AAD02010501050108851042202 +633F:101C11E010201020FDFE102011FC1524192431FCD124112411FC102050202020 +6340:110011F813081490FC601198164610401BF83040D3F8104017FC104050402040 +6341:10201120112011FCFD201220102013FE18003000D1FC11041104110451FC2104 +6342:100013FE10401040FDFC1084108417FE18003000D1FC11041104110451FC2104 +6343:100011FC10441044FBFE1044144419FC3080D08011FC12841484108450FC2084 +6344:1028102410241020FDFE1020112014B218B43068D0A811241222102050A02040 +6345:200027F8201021A0F84027FC24442C4437FCE444244427FC24442444A4544408 +6346:200027FC24442444FC4427FC24442CC434E4E5542644244424442404A7FC4404 +6347:10201020102011FCFC20102013FE145018503154D15211521252109050902130 +6348:1020102010501088FD0412FA102014201BFE3020D12811241222142250A02040 +6349:100011FC11041104FD0411FC102014201920313CD120112012A01260543E2800 +634A:1008103C13C01004FA44112810001BF83010D02017FE10201020102050A02040 +634B:1008103C13C01044FA2411281500181033FED010111010901090101050502020 +634C:200427C424442454FC5427D422142A1437D4E2542254225424442444A9545088 +634D:100011FC110411FCFD0411FC1000140019FC3020D02013FE1020102050202020 +634E:1020112410A410A8FC2011FC1104150419FC3104D10411FC1104110451142108 +634F:100011FC11041104FDFC1104110415FC18203020D1FC10201020102053FE2000 +6350:100011F811081108FDF8100013FC16041A0433FCD204120413FC120452142208 +6351:100010FC10841284FEFC1284128416FC1A0033E0D02013FE1020105050882306 +6352:1020102013FE1020FC2011FC1124152419FC3020D07010A81124122250202020 +6353:200027DE20922492F494249427D820943192E1922292229A24942890A2904110 +6354:1080108011FC1104FA0815FE1122192231FED122112211FE11221222522A2404 +6355:1048104417FE1040FC4013FC124416441BFC3244D24413FC1244124452542208 +6356:1040102013FE1202FC0411F8100014001BFE3090D090109011121112520E2400 +6357:101010101090109EFC90109013FE140018103092D09211141208101050602380 +6358:1040104010881104FBFE1002148819443242D0F8118812501020105051882606 +6359:1020102013FE1020FDFC1124112415FC19243124D1FC102013FE102050202020 +635A:100011FC11241124FDFC1124112415FC18203020D1FC10201020102053FE2000 +635B:100011F811081108FD08110811F81400180033FCD20412041204120453FC2204 +635C:1020102011FC1124FD2411FC1124152419FC3020D3FC10881050102050D82306 +635D:1104108410881010FDFC11041104150419FC3050D050109010921112520E2400 +635E:1088108813FE1088FC0013FE12021444184033FCD04410841084110452282410 +635F:100010F810881088FCF8100011FC150419243124D12411241050104850842304 +6360:1008101C11E01100FD0011FE1110151019103110D7FE10001090110852042402 +6361:1040104010A010A0FD10120815F6100018883048D24811501110102057FE2000 +6362:1080108010F81108FA1015FC112419243124D12417FE10501050108851042602 +6363:2040208023F82208FA88224822182A0033FEE0822492249227F22002A0144008 +6364:200023FC22042204FBFC220022182AE03238E2E0223C23E022222422A41E4800 +6365:1040102013FE1202FD04110011DE12521A523352D49A1094111011125212240E +6366:1020102010501088FD04120210F81420182031FCD020112410A410A853FE2000 +6367:1020102013FE1020FDFC104013FE148819243222D0F8102013FE102050202020 +6368:1020102010501088FD0412FA102014201BFE3020D02011FC1104110451FC2104 +6369:1040102013FC1204FA0413FC16001A283224D3FE122012501250148855042A02 +636A:101C13E0122013FEFE201292130A120619FC3104D10411FC1104110451FC2104 +636B:200027BC24A424A4FFBC24A424A42FBC3404E4042404240424042404A4144408 +636C:2040202027FE2400FC88248825082D7E3708E5482528252829082908B1284110 +636D:1040108013FC1224FA2413FC16241A4433FCD090111017FE1010101050102010 +636E:11FE11021102FF0211FE1310151019FF1110311051FE928212821482548228FE +636F:200420042FC42214FA14249427D429143114E7D42114211421C42E04A4144008 +6370:100011FC11241124FDFC1124112415FC182033FED07010A81124122250202020 +6371:100013FE12101210FEFE1210121017FE1A003210D21012FE1210141055FE2800 +6372:1020112410A813FEFC40108017FE11081A0435FAD908110811281112510220FE +6373:1008101C11E01100FDFE11101510191037FED000102012221222122253FE2002 +6374:2090209021082148FA44249221082BFC3044E02020A42282228A228AA4784000 +6375:10901090109013FCFE941294129417FC1A943294D29417FE1000109051082204 +6376:1010107813C01040F84017FC12481A4837FED248124817FC1040104057FC2000 +6377:2040204027FE2040FBF8204827FE284833F8E0402240227C22402540A4FE4800 +6378:1020102011FC1024FC2413FE1024142419FC3222D17410A81124122250A02040 +6379:1020102013FE1050FCA8112412FA142018A83088D3FE10881088108851082208 +637A:1020102013FE1050FC88110412FA1000180033FED02011241122122250A02040 +637B:1020102010501088FD44122211F8140818503020D0A41282128A128A54782000 +637C:101C11E010201020FBFE10A815241A423040D3FE1088110810D0103050482184 +637D:1040102013FE1000FC88108815541A223000D02013FE10201020102050202020 +637E:1040102013FE1202FC0411F81108150819F83100D10011FC1104110451FC2104 +637F:1020102013FE1020FDFC102413FE142419FC3040D3FE108411C8103050CC2302 +6380:201020902710243EF4222444279025103510E5102528252825282944A9445082 +6381:100010FC108010F8FC8010F8108017FE19403124D12811101108114451822100 +6382:1040102013FE1200FE201220123E12201A2032FCD28412841284148454FC2884 +6383:100011FC100410FCFC0411FC100013FE1A223020D1FC11241124113451282020 +6384:2040204020A02110F2082DF6200027FC34A4E4A427FC24A424A424A4A4144408 +6385:1020102013FE1020FDFC102013FE140019FC3104D1FC110411FC110451142108 +6386:100013FE1202128AFE5213FE122216221AAA32AAD2AA12FA12021202520A2204 +6387:200027BC20842294F908229424A428403000E7BC20A422A421282290A4A84846 +6388:101C13E010841244FD48111017FE1402180033F8D108111010A0104051B0260E +6389:10201020103E1020FDFC110415FC190431FCD124102013FE1020102050202020 +638A:1040102011FC1000FD081090100013FE18003000D1FC11041104110451FC2104 +638B:1040102013FE1200FE1C12F0129016901AFE3290D290129012AA12CA54A62812 +638C:111009203FFC20044FE808200FE000F03F0001003FF801007FFC010005000200 +638D:100011FC11041104FDFC1104110415FC18003112D1D41118111011525192210E +638E:1040104013FC10A0FD10120817FE10081BC83248D248124813C8100850282010 +638F:1080108010FE1102FE8210F2114214421BFA3042D152115211F2100250142008 +6390:10401040107C1084FD081200102015CE19023102D1CE11021102110251FE2102 +6391:1088108813FE1088FC8810F81088148818F83088D08813FE1000108851042202 +6392:109010901090179EF890109010901B9C3090D0901090179E1090109050902090 +6393:2100210021DC2114F914211427D428143114E1142588254829482114A5144222 +6394:00007EFC48447E4442287E1048287EC600201FC001003FF801007FFC01000300 +6395:1020102011FC1020FC2013FE108815441A4230F8D18812501020105051882606 +6396:1080104017FE1120FD20123C124416641A943348D24812301220125052882306 +6397:100017FE10901090FC90139C120416041A04339CD09010901090109057FE2000 +6398:200027FC24042404F7FC2420252425243524E5FC2420252425242924A9FC5004 +6399:103C17C012441128FC0013F81448184837FED048104813F81048104051402080 +639A:100013FE10201020FBFE122212221B3232AAD2AA1376126612221222522A2204 +639B:1088108813E81088FC88108817EC140A188A3088D3E81088108810E853882108 +639C:10001040139C1204FE04139C120416041BFC3090D0901090109011125212240E +639D:10141012101017FEF810101017D21A523252D25413D4100810EA171A52262042 +639E:1020112211221224FC5010881304142218203124D12412281050108851042602 +639F:1040102013FE1202FC04100013FE142018203120D13C112012A01260543E2800 +63A0:1040102013FE1000FC0011FC1104150419FC3020D12811241222142250A02040 +63A1:1008103C13C01044FA2411281500182033FED07010A810A81124122254202020 +63A2:200027FC240424A4F91022082040284037FCE04020E0215022482C46A0404040 +63A3:24043FA44424FFA404243F842494258800201FC001003FF801007FFC01000300 +63A4:100013DE12521252FA5213DE12521A523252D3DE1252125212521252555228A6 +63A5:1080104013FC1000FD08109017FE1040184037FED08811081090106051982604 +63A6:100011FC110411FCFD0411FC1080148019FE324AD44A10921122124250942108 +63A7:10401020102013FEFA02149411081A043000D1FC102010201020102057FE2000 +63A8:10A01090108011FEFD10131015FC1110191031FCD1101110111011FE51002100 +63A9:1040108017FE1110FE48144613F816481A4833F8D248124813F810425042203E +63AA:10881088108813FEF888108817FE180031FCD104110411FC1104110451FC2104 +63AB:20002FC024BC24A4F4A427A424A424A837A8E4A8249025D02EA820A8A0C44082 +63AC:1100110011FC1204FC44115414E4184433FCD04410E411541244104450142008 +63AD:200023FC20402040FBFE20A021102A083446E0402048226422522452A1404080 +63AE:1040102013FC1204FE0413FC120012FC1A8432FCD28412FC1484148458942088 +63AF:10201120113C1120F92017FE10001BFC3204D3FC120413FC1204120452142208 +63B0:10003A86E2B824882448F85E202827882288FABE2288248824882A8851288010 +63B1:00F03F0001003FF801007FFC010005047A7810107CFC1010FEFE101050502020 +63B2:100011FC110411FCFD0411FC108015FE1A023112D1EA110A10FA100250142008 +63B3:2040207C204023FEFA42227823C42A3C3240E24023FC224424842484A9144208 +63B4:200023FE22022202FBFE222222222AFA3222E232222A23FE22022202A3FE4202 +63B5:1020102010501088FD0412FA100017DE1A523252D25213DA1254101050102010 +63B6:1040102013FE1220FEFC1224122417FE1A243224D2FC12201250145054882906 +63B7:2440225E22922012FFD421142118291437F2E1122112211A22942250A4504810 +63B8:11041088105011FCFD24112411FC1524192431FCD020102013FE102050202020 +63B9:100011FC10081010F82013FE142018A03040D1FC115411541154115457FE2000 +63BA:10801090110813FCFC4017FE111012481C863310D02010C41308103050C02700 +63BB:100011FC10841088FC50102014D81B263020D1FC1124112411FC102253FE2002 +63BC:11FC1124112413FEFD24112411FC140019FC3104D12411241124105850842302 +63BD:11081090100013FCFC901090109214921A943298D09010901090109057FE2000 +63BE:210021F8220823F0F81027FE208029443668E0B02128266820A42122A6A04040 +63BF:1088108813FE1088FCA8102013FE1440188030FCD18412841084108450FC2084 +63C0:1020102013FE1020FDFC112411AC1574192431FCD020107010A8112452222020 +63C1:10201020103E1020FC2011FC110415FC190431FCD10411FC1000108851042202 +63C2:21082088209027FEF890209023FC2A943294E30C220423FC22042204A3FC4204 +63C3:11081088109017FEF80013C412541A5433D4D254125413D412541244525422C8 +63C4:204020A021102208FDF6200023C42A543254E3D42254225423D42244A25442C8 +63C5:FDFE204840487DFEC44844887D0800E81F0001003FF801007FFC010005000200 +63C6:101013D410581252FD8C1088110412FA18203020D3FE10201050108851042202 +63C7:1020102013FE1020FC2013FE128A16521AFA3222D22212FA12221222522A2204 +63C8:1100110011FE1202FC8217F2100213F2180233F2D00213F2121213F250142008 +63C9:200021FC20482030FBFE2052209429103230E02023FE207020A82124A6224020 +63CA:100013FE100011FCFD04110411FC14001BFE3222D22213FE1222122253FE2202 +63CB:100011FC11241124FDFC1124112415FC180033FED12011221114114851842102 +63CC:100011FC11241124FDFC1124152419FC3000D040102412A2128A148850782000 +63CD:2040204027FC2040FBF8208027FC29103208E5F6204023F8204020A0A1104608 +63CE:1040102013FE1202FC0411FC140019FC3104D1FC110411FC1104100053FE2000 +63CF:1088108813FE1088FC88100011FC152419243124D1FC11241124112451FC2104 +63D0:100011FC11041104FDFC1104110415FC180033FED0201120113C112052A0247E +63D1:1040119C11041104FDDC1104110415FC18003000D1FC10201020102053FE2000 +63D2:2008203C27C02040F8402FFE20402940365CE4442444275C24442444A7FC4404 +63D3:22102110211027BEFA28224823AA2AAE32BAE2EA22AE22A824AA24A2A9A2501E +63D4:1080108010FC1154FAD410B4152C1A443094D108104010A412AA128A54782000 +63D5:1088108813FE1088FCF8108810F81488188833FED10011481184110051FE2000 +63D6:100011F811081108FDF8100017FE150819F83108D1F81108113E17C850082008 +63D7:101C13E012201220FBFE122012FC1A843284D2FC128412FC1484148458FC2084 +63D8:1020104011FC1104FDFC110411FC14001BFE3020D02011FC1020102053FE2000 +63D9:1040102013FE1202FE0213FE120016001BFE3352D55215FE1552155259522106 +63DA:100011F8110811F8FD0811F814001BFE3100D1FC125414941124124450A82110 +63DB:1080108011F81208FC1013FE12021A52328AD222102017FE1050108851042602 +63DC:1020105010881104FEFA100015FC19043104D1FC1088108813FE108851082208 +63DD:1088108811EC112AFA2815481088197E3600D1FC1104110411FC1104510421FC +63DE:1040102013FE1000FD04108817FE100019FC3104D10411FC1104110451FC2104 +63DF:100013FE10221120FD3C112012FE140019FC3104D1FC110411FC110451142108 +63E0:100013FE120012FCFA8412FC16841AFC3220D3FE124812C812301248528423FE +63E1:200023FC22042204FBFC220023FC2A403288E3FC2224222025FC2420A82053FE +63E2:1040102013FE1202FC8010F815081A903060D198160611F81108110851F82108 +63E3:2040244424442444F7FC20002FFE20403080E7FC24A424A424A424A4A4A4440C +63E4:100013DE12521252FA5213D212521A523252D3D2121A1294125012B053102010 +63E5:1080104013FC1000FD08109017FE1442184433FCD24412441254124850402040 +63E6:1082108217F21082FC8A13EA16AA1AAA33EAD08A11CA12AA14A21082508A2084 +63E7:04047FC404243FA424A43FA41504249444281FC001003FF801007FFC01000300 +63E8:1040102013FE1000FDFC110411FC14001BFE3202D1FC10201020102050A02040 +63E9:1110111211D41118FD521192112E144019FC3104D10411FC1104110451FC2104 +63EA:208821C827082108F92A212A27AC29483308E3882554251429142124A1244142 +63EB:0620382008A47EA819202C504A8809E41F0001003FF801007FFC010005000200 +63EC:1040102013FE1202FC88110412221028182433FED02010501050108851042202 +63ED:100013F8120813F8FE0813F8110013FC1C443244D2A4120413F4100450282010 +63EE:100013FE12221020FDFE102011FC152419FC3124D1FC102013FE102050202020 +63EF:220022FE22202220FB2022BC26442A54324CE28422A4221822082208A2FE4200 +63F0:1008103C11E01020FBFE102015FC192431FCD12411FC102011FC102053FE2000 +63F1:49042A247F2441247F2441247F244104432C1FC001003FF801007FFC01000300 +63F2:10481148114813FEFD4811481178150019FE3020D3FE107010A8112456222020 +63F3:1080109E13EA108AFDCA108A13EA149218A63020D3FE10201050108851042602 +63F4:203C27C022442128F80023FC2080288037FEE10021F8228822502420A8D84306 +63F5:20102010277C2114F9FE2214227C2F10317CE51025FE221022102500A8FE4000 +63F6:20002FDE24922492F4942794249824943792E492249225DA2E942090A0904090 +63F7:101C11E010201020FDFE10A0112C1524192431ACD124112411FC112450202020 +63F8:1020102013FE1070FCA81124122211FC190431FCD10411FC1104100057FE2000 +63F9:1050105213DC1050FCD2134E100015FC190431FCD10411FC1104110451142108 +63FA:1008103C13C01004FA44112815FC18203020D3FE102011241124112451FC2004 +63FB:2014201227FE2410FC1027F024922C9237D2E55425542488254A2A1AA8265042 +63FC:100013FE10401080FDFC1284108414FC18203022D3B410A81128122454A22040 +63FD:10901290129E12A8FAC4108015FC19043124D12411241154105010905112260E +63FE:100011F811081108FDF81108110815F8180033FCD29412941294129457FE2000 +63FF:22102210221023BEF422244427902A103210EF902228222822A82344A2444082 +6400:210021F022102420FBFC224422442BFC30A0E122261E20C020302180A0604010 +6401:2200217C25042484F4F4251426A4244434A4E71C25F42514251425F4A5144408 +6402:1020112410A81020FBFE10A811241A023040D7FE108811081190106051982604 +6403:11081088109013FCFE041204120413FC18403020D0A41282128A128A54782000 +6404:2100213C21002100F9BC256425242D3C3524E1242124213C21242100A17E4100 +6405:24842244224827FEFC02280423F82A083248E248224822A820A02122A2224C1E +6406:1088108813FE1088FDFC108813FE142019FC3124D1FC112413FE110451142108 +6407:204020A021182686F84023F0201028A03040E7FE2088215023202510A9484186 +6408:1040102013FE1202FC5010881124145018883104D2FA10881088108850F82088 +6409:1040104013FE12A2FC9011FE15101B1035FED110111011FE1110111051FE2100 +640A:1080108011FC1244FD5411F4108415281A9031FCD244155411F4108451282210 +640B:1004101E13F0121EFE1012FE129216981AF2328ED28012B812A814AA554A2A86 +640C:200023FC22042204FBFC224822482AFC3248E24823FE22A422A82490A4C84886 +640D:100011F811081108FDF8100013FC16041BFC3204D3FC120413FC109051082204 +640E:20062F7821102120FA44227823102A24367EEA122210225422522292AA504420 +640F:1028102413FE1020FDFC112411FC152419FC3124D00813FE1088104850482018 +6410:2080204027FC2080F90823F02060298437FEE00227FC244427FC2444A7FC4404 +6411:1108110817FE1108F80017FE110819F83108D1F81108113E17C8100850082008 +6412:1040102013FC1108FC9013FE12021444182033FCD08010F81088110851282210 +6413:11081088109013FCFC4011F8104017FE18803100D1FC12201420182053FE2000 +6414:200023F821482110F8A0204021B02E4E3040E3F82248224823F82044A7FC4004 +6415:1020102011FC1020FC2013FE108015041BFE3002D3FC12941294129457FE2000 +6416:1040108011FC1248FD3010C0130011FC1A203020D3FE10201124112451FC2004 +6417:1020104011FC1104FDFC110411FC150019FE3100D1FE1042124A13FA50142008 +6418:1040104411F81050FBFE104014F81982327ED40011FC110411FC110451FC2104 +6419:100013FE120012FCFE0013FE12A816901AC83286D20813FE1288144854082818 +641A:104011FC10441094FD0813DE114A154A1A9431FCD10411FC110411FC5104210C +641B:111010A0100017FEF8A013F810A81FFE30A8D3F810A011B012A814A650A020A0 +641C:10A0112C11241124FDAC1124112415FC182031FCD08810501020105050882306 +641D:1020104011FC1104FDFC110411FC150419FC3028D02413FE1050108851042202 +641E:1040102013FE1000FDFC110411FC14001BFE3202D2FA128A12FA1202520A2204 +641F:21002100213E27C8F90827C825482FC8357EE7C821082FE821082108A1084108 +6420:2440225E22922012F7D2211E255225523552E7DE2152211222122222A42A4844 +6421:23F0211020E02318F80027BC24A42B1834A4E04027FC20E021502248AC464040 +6422:100013FC10901294FD98109017FE180031F8D108110811F81108110851F82108 +6423:20142012201027FEFC10241027F22C923492E5B426D42488254A293AAA265042 +6424:1104108410881000FBFE1000148819043202D1FC115411541154115457FE2000 +6425:10101220117C1144FC44107C13401540197C3144D144117C11441280547E2000 +6426:200027BC20842084F7BC2420242027BC3084E4A42294229424A42084A5284210 +6427:2080204027FE2402FC0227FE24002FDE3442E652254A24C62B5A2842B14A4084 +6428:100011FC110411FCFD0411FC100014001BDE3042D252114A12521042514A2084 +6429:2208220823BEF4882AA8213E22083448E84827FC20E0215022482C46A0404040 +642A:2040202027FE2420FDFC242427FE2C2435FCE42025FC250425042904A9FC5104 +642B:08783E48228E2A007EF822482A3046CC80201FC001003FF801007FFC01000300 +642C:2100223C27A424A4F6A425A424C22F8034BCE4A426A425A424942488A49449A2 +642D:2110211027FC2110F84020A021102A0835F6E000200023F822082208A3F84208 +642E:100013FE10501050FBFE125216521BFE3020D02013FE107010A8112456222020 +642F:103C13C010441224F928110014401B9C3204D204139C12041204120453FC2204 +6430:100011FC110411E4FD2413FE120211FC190431FCD10411FC1104110451142108 +6431:100013FC12041204FBFC124012201BFC3288D25013FE122015FC142058202020 +6432:2080204027FC2404F9102208203C2BD03290E29022902288228824A4A4D44892 +6433:1040102013FE1202FC2411FC102015FC182033FED02011FC1104110451FC2104 +6434:01007FFE44429FF404403FF80440FFFE082017D02108DFF601007FF801000300 +6435:200023F8224822A8FB18220823F828003000E7FC24A424A424A424A4AFFE4000 +6436:10201020105010C8FD2413FE150411FC190431FCD10011FC1284128454FC2084 +6437:1020102013FE1020FDFC110411FC150419FC3104D1FC110413FE108851042202 +6438:1020102013FE1020FDFC104013FE1488193432E2D02011FC107010AC53222020 +6439:100013FE100011FCFD04110411FC14001BFE328AD25213FE12221222522A2204 +643A:10A0109011FE1320FDFC112011FC152019FE3100D3FC1088109E1102520A2404 +643B:010006C01830EFEE00001FF010101FF0040C78F010107CFC1010FEFE10103030 +643C:10401248115013F8F88017FC11101A2835C4D84213F8104017FC104051402080 +643D:1088108813FE1088FCA81050108815241A2231FCD02010A81124122250A02040 +643E:1040102013FE128AFD04108010FE15401A40307CD0401040107E104050402040 +643F:11003906E2B822882448F85E238820082008FBBE228822882288238842A88010 +6440:1040108011FC1104FD0411FC110015FE190031FED00212AA12AA140250142008 +6441:200027FC24442444F7FC244424A425143404E7FC204020242522250AA90840F8 +6442:100013FC110811F8FD0811F8110E17F818083008D20411081090110852042402 +6443:100011FC10201020FBFE100015FC190431FCD10411FC110411FC108851042202 +6444:100013FC110811F8FD0811F8110E17F8180837BCD0A412A41128129054A82846 +6445:2040207C204027FEF442247027C42444343CE4202410245425422942A94A5238 +6446:100013FE12521252FBFE1020142019FC3020D02017FE10401088110453FE2102 +6447:1008103C13C01004FA44112811FC1A203020D3FE102011241124112451FC2004 +6448:1040102013FE1202FC1411E01100150019FC3110D11017FE1000109051082204 +6449:1040102013FE1202FCA81124145018883346D0F8110812881050102050402380 +644A:202820242740217EF1C82948257E25483248E27E254825482948207EA0404040 +644B:2000245C22942114FA9424542126290037DCE1142594255429482108A5144222 +644C:1040102013FC1000FD08109017FE1A2032A0D2FC1320122012FC1420542029FE +644D:1040102017FE1402FD0011FE121016201A7C3244D244127C12441244527C2244 +644E:200027BC208424A4FA9424A4205029883626E0C02310206423882030A0C04700 +644F:1020102013FE1020FDFC104013FE148819043242D59C110411DC110451FC2104 +6450:212421242224F4242954214A22923610EA102250225C2250225022B0A29E4300 +6451:200027FE242A2426F7FE242227AA26AA37AAE4322596262E24462482A7FE4402 +6452:200023FC22042204FBFC220022842A4832FCE248224823FE24482448A8885108 +6453:1020147C12841148FC3010CE16101A7C3210D27C121012FE1210121055FE2800 +6454:1040102013FE1020FC4812F21124165218F83008D02013FE1020102050202020 +6455:22A822A827FC22A8FAAA24E628002FFC3444E04023F8224822482248A2584040 +6456:1100111013DC1254FD54128811081AF43402D00013FC10401150124855442080 +6457:2108210827C82108F91E27D225642D4037C8E1082388254829542114A1244142 +6458:2080204027FC2110F8A027FC24442DF43444E5F42514251425F42404A4144408 +6459:2010241022FE2210F8FE209226FE2A9232FEE21022FE221022102510A8FE4000 +645A:1020112410A813FEFA0210F81488188830F8D020102011FC1020102053FE2000 +645B:1040102013FE1000FD541124115415FC182033FED242129212FA120A52022206 +645C:100011FC112413FEFD2411FC100015FC190431FCD10411FC110411FC50882104 +645D:1040102013FE1250FE5013FE125216521BFE3200D29212D41298149254D2288E +645E:100013FC124413FCFE4413FC108015101BE03048D18413FE1022112852A42442 +645F:102011FC112413FEFD2411FC102015FC192431FCD04013FE108811D05070238C +6460:1040108013FC1244FAF4131412A41A4432A4D3FC104010241522150A590820F8 +6461:200027BE24882488F7A824A824A827BE3410E518249825A826AA244AA0464080 +6462:1040107C104013FEFA42127813C41A3C3208D2F0132412A815FE142058A02040 +6463:1040107C104013FEFA42127813C41A3C3200D2FC128412FC128414FC548429FE +6464:1020102013FE1020FAAA112412AA182032AAD12412AA10501050108851042602 +6465:110011FC120015F8F90811F8150819F83000D7FE110013FC14A4112452542088 +6466:2200220E2F74F254255428D427543054EFD424542754215421522154A55C4284 +6467:1020122213FE1090FC8811FE1310151019FE3110D11011FE1110111051FE2100 +6468:100013FE120213FEFE101254123816541A823250D27C1290121015FE54102810 +6469:00803FFE24103F7C26382D543412203827C0204027F820402FFE404041408080 +646A:20902290229E22A2FAD423A8209428A437FEE28422A4229422942284A4944888 +646B:2200227C22442744FA7C224422442F7C3244E244227C22282528254AA84A5086 +646C:1080104013F81110F8A017FE10001BF83208D3F8120813F81120112252222C1E +646D:2040202023FE2200FA48224823FE2A483248E248227822002554252AAA2A5000 +646E:08207F20087E7E4408A4FF2810101E2822645FC281003FF801007FFC01000300 +646F:08207E2008F8FF2814287F6A082AFF5608A21FC001003FF801007FFC01000300 +6470:08203E2008F87F282A685D2A08563E8200201FC001003FF801007FFC01000300 +6471:100011F8110811F8FD0811F8100017FC1A9433FCD00011F81090106051982606 +6472:22002202223C2FA0F2202FA02ABE2FA43AA4EFA422242FA422242244A2444284 +6473:100013FE1200127CFE441244127C16001AEE32AAD2AA12AA12EE120053FE2000 +6474:11FC102013FE1222FDAC102011AC140019FC3000D3FE108010FC100450282010 +6475:20142012201027FEFC10249024D22C9237F2E494249425C82AAA289AB1A64042 +6476:102013FE102011FCFD2411FC112415FC182233FED00813FE1108108850282010 +6477:1124124811241000FDFC112411FC152419FC3020D3FE107010A8112456222020 +6478:1110111017FC1110FC0013F8120817F81A0833F8D04017FC10A0111052082406 +6479:04407FFC04401FF010101FF010101FF00400FFFE10502788C1061FF001000300 +647A:200027BC208424A4FA9424A42084284033F8E208220823F822082208A3F84208 +647B:1040108811FC1108FA5213FE145019883626D0C0131010641388103050C02700 +647C:200027DC251427D4FC5427C825082D1437E2E000204027FC20402040AFFE4000 +647D:100013FE105011FCFD54115411FC140019FC3000D3FE102010A8112452A22040 +647E:2000277C21442144F97C271024102C7C3454E7542154217C21102114AAFE4402 +647F:1020105010881346FC2011FC108814501BFE3000D1FC110411FC110451FC2104 +6480:08007F7808483E4800863E782A483E3040689FC601003FF801007FFC01000300 +6481:102013FE104810F0FC2013FE1242109019F83028D12011FC122017FE50202020 +6482:200027FC244427FCFC4427FC21002BF83510E0E023182C0623F82208A3F84208 +6483:1078FE4810487C8654787C485430FECE10201FC001003FF801007FFC01000300 +6484:20002FBE28A22AAAFAAA2AAA251428A23080EFFE2110221023A02060A1984E04 +6485:20002FFE28002A28F9482BEE289228843AA0EAA82BE8288828942914A9245242 +6486:49202A3E7F4849485DA86B104928414600201FC001003FF801007FFC01000300 +6487:2108210825482390F91E27D425642D543554E75425D4254825482554A46444C2 +6488:208822AA22DC2488F954222220002BFE3242E44423FC204420442084A1144208 +6489:08407F40227E3E8801483E4804507E200850288C10F03F0001007FFC01000300 +648A:279E2492279E2492FF9E240224F22C9234F2E49224F2249224922532A4024406 +648B:200027BC24A427BCFCA427BC24042DF43444E4E42444244425F42404A4144408 +648C:104013F8124813F8F84017FE10001BF83208D3F8120813F8120813F851102208 +648D:200027BC21082528F7BC231825AA29463000E3F82208220823F82208A20843F8 +648E:102013FE102011FCFC0013FE120215FC180031FCD10411FC1104108853FE2000 +648F:100013FC100413FCFC0413FC100017BC192437BCD00813FE1108108850A82010 +6490:112410A813FE1202FCF8108810F8140019FC3010D11011FE1050109053102030 +6491:112410A813FE1202FCF8108810F8140C19F03020D1FC102013FE102050A02040 +6492:2288228827C82290FA9E27D420242FD43454E7D4245427C824482454A46444C2 +6493:1020102011FC1020FBFE1108179C19083188D63E100013FE109010905112220E +6494:100011FC110411FCFD0411FC14201BFE3000D1FC110411FC1020112452222060 +6495:24802482249C2FD0F4902790249E27943494E4942FD42014251428A4B0244044 +6496:2008278820882110FFDE249424A427943494E794249424C827882C94A0A440C2 +6497:1088108811FC1088FC8813FE102015FC192431FCD12411FC1000108851042202 +6498:1210121013DE1228FD4410A015101A0835F6D000100013F81208120853F82208 +6499:2108209027FE2090FBFC2294231C2A0433FCE20423FC200827FE2108A0A84010 +649A:2110211421D22250FA7E255020902AA83128E14422442482200822A4A2524452 +649B:1020112410A813FEFCA8112412221104190431DED2441554109E110452042404 +649C:202027A420A82292F914220825F4280233F8E208220823F822082110AFFE4000 +649D:2004203E27C02244F92823F822082BFC3204E3FE240226AA2AAA2A02B0144008 +649E:102011FC10881050FDFE100011FC152419FC3124D1FC102011FC102053FE2000 +649F:101C11E0104013FEFC88110412FA148818F83000D3FE120212FA128A52FA2206 +64A0:21102114211227D2F91027DE24702FD23452E7D421142FD8210A211AA1264142 +64A1:2080211023F82210FCA427BC204028A03358EC462048226422522452A1404080 +64A2:100013FE105013FEFE5213FE100015FC190431FCD10411FC102013FE50202020 +64A3:100013DE12521252FBDE100015FC192431FCD12411FC102013FE102050202020 +64A4:2208210827C82210F49E2FD4206427943494E7942494278824882494A4A445C2 +64A5:202423A820922514F2082C0427BA20A837C6E40027BC208420A82090A5284244 +64A6:1040104017FC1110FA48144613F8185037FCD08013F81D0811F8110851F82108 +64A7:21102110221C22A4F4C82F3E212A222A34AAEFBE20A020222AA22AA2A81E4000 +64A8:1090108811FE1110FB1015FE1110191031FED110111011FE110012A452522452 +64A9:2040204027FC20A0F514220827FC2A0A33F8E20823F8204022482444A9444080 +64AA:2080211023F82080F7FE224825F4284233F8E24823F8224823F82040A7FC4040 +64AB:1100110013FC16A8FAA812A817FC1AA832A8D2A81FFE100012A8125454542000 +64AC:103813C0107813C0FC7813C4103C140018C63738D1CE173811CE1738514A2186 +64AD:207827C022482150FBFC215022482C0633F8E248224823F822482248A3F84208 +64AE:200023F8220823F8FA0823F820002FFE3480E7BC2494279424D42F88A09440A2 +64AF:1088105013FE1020FDFC104013FE148019FC3284D4FC108410FC108450FC2084 +64B0:200027BC24A427BCFC2024A4239C28003110E7FC211021102FFE2110A2084404 +64B1:2020272025FE2540FD7C2690257E2D00357CE544257C2644247C2444A444444C +64B2:1050125211541050FBFE108814501BFE3020D1FC102013FE1050108851042602 +64B3:221022102510F4BE2822274422103210EF1022102AA8272822282344AC444082 +64B4:221021102FD02010F7BE24A427D420143794E094211421C82F082114A5144222 +64B5:1088108813DE1088FBDE108811541A2233FCD080112013FC102017FE50202020 +64B6:108813FE10881000FDFC10A810A817FE18A830A8D1FC102013FE102050202020 +64B7:220022FE22102FA0F27C2244275420543054E7542554255425282724A5424082 +64B8:210023F024102FFCF44427FC244427FC3000EFFE200023F8220823F8A20843F8 +64B9:12441124112813FEFA0211F8150819F83108D1F8110811F8109010905112260E +64BA:2080204027FC2514FA48244423F82A4833F8E04027FC244427FC2444A0404040 +64BB:20102410227C2010F8FE204426282AFE3210E27C221022FE22102210A5FE4800 +64BC:2014201227FE2410F5D0241425D4255835CAE4162442282422A2228AA4784000 +64BD:2108220827C82450F7DE246427D422143114E7D4221423C822482454A55448A2 +64BE:1000127C11441174FC54105416FE12821ABA32AAD2BA1282128A1284550028FE +64BF:1020102010501088FD0412FA1000140019DC3154D15411DC1088108851542222 +64C0:2108210821142FD4F12227C0245C27C83448E7C8213E2FC821082108A1084108 +64C1:2040202027FE2028FA24227E24C82F48317EE24824C82F7E21482248A47E4840 +64C2:200027FC20402FFEF842235820402B583000E7FC2444244427FC2444A44447FC +64C3:109013FC129413FCFE9413FC100017FC1A0032F8D20013FE1520151455482986 +64C4:1040107C104013FEFE4213F8124412FC1AA832F8D2A812F8122015FC5444298C +64C5:102013FF1000FDFE1102117A114A157A190231FED00010FC108410FC508433FF +64C6:1108110817FE1108F84413F41048185037FED08011FC130415FC190451FC2104 +64C7:100013FE125213FEFC2011FC14201BFE3088D05011FC102017FE102050202020 +64C8:1050125211541050FBFE108814501BFE3020D1FC102013FE10A8112456222020 +64C9:100013F812A812A8FBF8110013FC1C8433E4D2A412A413E4109417F450142008 +64CA:083C7F242A243E422A3CFFA449187F6600201FC001003FF801007FFC01000300 +64CB:20402248215027FEF402280423F8220833F8E00027FC244427FC2444A7FC4404 +64CC:2210221023DE2528F8C4204027FE28403248E248255428A220A02110A2084C06 +64CD:23F82208220823F8F80027BC24A42CA437BCE0402FFE216022502448B8464040 +64CE:2420FF20247E7EC482287A104A287AC604201FC001003FF801007FFC01000300 +64CF:2288228827E82290FC1E27E4245428543754E5542554274825482054A2944122 +64D0:100013FC12941294FBFC100017FE180033FCD20413FC10A2111413085D442182 +64D1:101013D412521252FBD0101017FE1A5033D2D25213D4125412EA174A50562062 +64D2:204020A021102248FDF620A022482AA833F8E04027FC2484252425F4A414440C +64D3:200027FE24282624FD7E244824C82C7E3648E57E24482448257E2640A7FE4000 +64D4:108010F8110813FEFD44119211FE1500197C3100D17C1100117C1244527C2444 +64D5:10A0109011FE1320FDFC112011FC152019FE3100D3DE12521252127252022206 +64D6:108813FE108811FCFD0411FC110415FC188031FED2221552110211FA500A2004 +64D7:20102008278824BEF48024942788247E3408E78826BE2A882A882B88B2884008 +64D8:3E1022FE3E4420287EFEA2103EFC221000201FC001003FF801007FFC01000300 +64D9:1040108013FE1222FEAA122213FE16721AAA3202D02013FE1020105050882306 +64DA:1040107C104013FEFE42127813C4163C1A0033FED24013A4125815B4545229B0 +64DB:108813FE10881000FD4813FE11481578190031FCD02013FE107010A853262020 +64DC:2108210827CC210AF90827DE24482EC83548E7C8255427D425542554A45444E2 +64DD:200027BC24A424BCF7A424BC24A427A43024E04C23F822A822A822A8AFFE4000 +64DE:22102A9027102220FFBE224427A42AA43228EFA82490289025282228A5444882 +64DF:200027FC2248F4442FFE244426EC3554E6EC244426EC255426EC2444A4544408 +64E0:2080204027FC2110F0A42F58255425523B58E000220823F8220823F8A2084408 +64E1:20402FFE204027FCF00023F822082FFE3802E7FC211023F8204027FCA0404FFE +64E2:200027BC208424A4FA9424A421202A1037FCEA2023FC222023FC2220A3FE4200 +64E3:204027FC204023FCF80027FE20022BF83040E7FE200027FE200827FEA4A84798 +64E4:208023F8220823F8FA0823F820002FFC3444E7FC244427FC20002FFEA1104210 +64E5:00007E40487E7E9043087EFE48AA7EFE00201FC001003FF801007FFC01000300 +64E6:2080204027FE2402FA2423BC24A42AA83510E2E824042BFA20402248A44440C0 +64E7:0A0033B822083BB820883AB82288FFFE082037D8C1061FF001007FFC01000300 +64E8:200820682F8828EEF88A2BF22AA42AC43B84EAA42A642A0A2AEA2AAAAAAA5530 +64E9:200027FC20402FFEF842235820402B583000EFFE204027FC24A424A4A4A4440C +64EA:3FFE28882F8A20082FBE28882F88289429A227F8204027FC20405FFE404080C0 +64EB:20002FFE28082BC8FA4C2BCA2A482BDE3808EBC82A482BD42A542BD4AA5452E2 +64EC:2400257C2604F4A82390207C24143794EA5022502FDC2250255024B0A89E4100 +64ED:108813FE10A81090FDFE132011FC152019FC3120D1FE110013FC10885070238E +64EE:2110211427D22110FFFE229024502FF43494E7F4249427E8248A27FAA4264042 +64EF:1040102013FE1202FDFC1148165019FC3304D1FC110411FC110411FC50882104 +64F0:1040102013FE1222FD54114A123A100019FC3154D3FE100011FC102050A02040 +64F1:200027BC24A427BCFCA427BC24842DF43694E4E4271C24E424A424A4A4E4440C +64F2:2440228E2FEAF28A2FEA2AAA2C6C3BAAE82A2FEA210A2FEA228C2448A8284008 +64F3:1108110811EE1294FC42100013DE16521BD23252D3D2121A1294135052102010 +64F4:2040202027FE2488FDFC248827FE2C2035FCE52425FC252425FC2400A4884904 +64F5:202027FE248827DEF48825DC26AA248C35F0E42025FC242027FE2820A8A05040 +64F6:121013DE15281084FD08109017FE10001BD43254D3D4125413D41244525422C8 +64F7:2200227E22102FA0F27C22442744207C3044E77C25442544257C2700A5284044 +64F8:1124124811241000FBFC129416641A9433FCD24813681248136A124A52462362 +64F9:2290229027D0229EFB92212227C82D4837C8E10827C821142FD42294A4544822 +64FA:200027FC24A424A4F7FC222024A427B83022EF9E28802FA428B82FA2A8A2499E +64FB:210827C825482FF0F55E27E4211427D43554E7D422142FC824482694A1944662 +64FC:210023F024102FFCF44427FC244427FC3524E89223F8220823F82208A3F84208 +64FD:244424E428A82AAAFEEE24A42AAA2EEE3242E0402FFE20E021502248AC464040 +64FE:27FC208023F82208F3F822082FFE28823548E51428F4210023F82508A0F04F0E +64FF:2020201024FE2244FA2820FE20922EFE3292E2BA22AA22BA22862500A8FE4000 +6500:22882108FABE2008729CA92A2288FFFE082037D8C1061FF001007FFC01000300 +6501:2208211027FC2040FBF8208027FC294833FCE60A2BF8220823FA2234A28C4302 +6502:23F82248224823F8F248224823F820003FBEEAAA2AAA2FBE2AAA2AAAAFBE48A2 +6503:1088108813FE1088FD1011DE125215541A883174D20211FC1020112452222060 +6504:2020203E202027FEFC2225F824222DFE3524E5FC252425FC28402AA4B28A447A +6505:108811DC108813DEFC881154122211FC190431FCD10411FC110411FC50882104 +6506:108813DE108813DEFD54122211FC142019FC3124D1FC112411FC102053FE2020 +6507:20402FFE284227FCF84023F820402FFC3040E7FC24A427FC20402524A52A48FA +6508:102013FE125013FEFA5213FE12941AD83292D2CE120812F0122015FC54A82B26 +6509:27FC204027FE2442FB5C2040275C292033FCE6202BFC222023FC2220A3FE4200 +650A:200027FE24442598FC8827DE24882DDC36AAE48824202520253C2920A92057FE +650B:2108210827CE2112F92427DE25522D5E37D2E11E2392255E29402114A1124122 +650C:2FFE28022BFA2AAAFBFA28022BFA280239F2E91229F228AA29922ACAA8824FFE +650D:40807FFC48004FF8E0004FF848084FF86080DC9C57D45D54555C5C965556EE22 +650E:1040107C104013FCFE4413F0124416FC1AA832F8D2A812F8120015FC55542BFE +650F:1110109013DE1010FA5E118217DE181033DED25013DE125013DE1250525222CE +6510:104017FE149213FCFC9013FC109017FE19483224D5FA10A411A8129054C82086 +6511:1140126C1244136CFEA413AC12A417FE19083244D5F2104017FC104050402040 +6512:2108252827BE2948F7BE231825AA29463000E3F822082248224820B0A1084604 +6513:204027FE249223FCF89023FC20902FFE3108E3FC250A21F82240227CA54048FE +6514:27BC24A427BC24A4FFBC244425F42C4435F4E55425F4255425F424E4A554444C +6515:2448244C2AAAF0082FFE22882EE8328AEEEA228C2EEC228822EA2F1AA4264042 +6516:13DE125213DE1252FBDE125213DE198C3252D04017FE10881190106050D82304 +6517:204027FE24A027FCFCA427FC25142DD83512E54E25A424A827FE28A8A9245222 +6518:204027FC200023B8FAA823B821102FFC3110E7FC21102FFE21282310AD484186 +6519:11F0121017FC1204FBFC122413B81A2231FED21017FC124413FC10D0514A263E +651A:108812AA12DC1488F954122217FE1A0230F8D08810F8100011FC110451FC2104 +651B:104017FE14921108FC80131C1204179C1A0433FCD24813681248136A52462362 +651C:122213FE109011FEFB1015FE111019FE3110D1FE110013FE128A137652522276 +651D:13FC110811F81108FDF8110E17F8180837FED294139C1294139C12D657BC2084 +651E:200027FC24A4F4A427FC221022A834BEEF68223C24A82FBC20282AA8AABE4020 +651F:204027FE24A027FCFCA427FC24002DFC3504E574252425FC257429ACA92451FC +6520:202027FE248827DEFC8825DC26AA2C883450E7DE245025DC24502BDEA8505050 +6521:241822142F90253EFAA82DE828BE2FA83228EFBE2AA82AA82BA828BEAAA04920 +6522:252827BE294827BEFB1825AA29462BFC3204E3FC220423FC220423FCA1084204 +6523:21084FD2F03C23884812FBBE0280ABAA00201FC001003FF801007FFC01000300 +6524:251825142F90253EF72822682FBE2AA83FA8E23E2FA822283FE8253EA8A05060 +6525:221023DE25282084FBFC22A422542BFC3080E7FE22A825E4285223F8A15042C8 +6526:2FBE200027BC24A4F6B424A4204027FE34A0E7FC24A427FC251229DCA91251CE +6527:2200221E2FC42208F79E24922792249E3792E49E279224922FDE2500A48C4892 +6528:20402FFE2A0A2434F3C02290228822A434D0E18E2E742B542AD42A52AB5A5294 +6529:2248215027FC2404F9F0211027FC2D5434E4E7FC204027FC20402FFEA2A44452 +652A:22AC244426AC2444F6AC24042FFE2A0A33F8E20823F8220823F820A0A124461C +652B:13DE125213DE1252FBDE10A011FE1B2035FCD12011FE100011FC10885070278E +652C:2790251E27A82484FFBE252A27BE280033F8E20823F8220823F820A0A124461C +652D:21F0221023E02020F7FC2188265021A83664E1A022482FBE2AAA2FBEA28A4FBE +652E:204027FC224823F8F0402FFE2AAA23B83110E7FC21102FFE21282310AD484186 +652F:0100010001007FFC0100010001003FF01010082004400280010006C01830E00E +6530:102010201020FE2010FC1024FC24442444242844284410941908240043FE8000 +6531:202010201020FDFE00200820882089FC48844888504850501C20E05041880606 +6532:10101010FE1010FE28104410FEFC044474445444542874285410042814440982 +6533:11FC100410FCFE0411FC1000FDDE449247DE28082BFE110818A8241043FE8000 +6534:01000100010001FC0100010001003FF01010082004400280010006C01830E00E +6535:0400040004000FFE08101010302048208440028001000280044008203018C006 +6536:084008404840488048FE49084A88488848885850685048200850088809040A02 +6537:00400040FE40208020FE210842887C8804880450045004200450048829041202 +6538:082008200820103E12443244524492A412281228121012101228104810841102 +6539:00400040FC8004FE0508050806887C8840884050405044205850608841040202 +653A:004000407C40448044FE4508468844887C884050405040204450588861040202 +653B:004000400040FE8010FE1108128810881088105010501E20F050408801040202 +653C:00407C401040108010FE11081288FE8810881050105010201050108811041202 +653D:002014201220123E214421444044BEA41228122812101210222822484A848502 +653E:204010400040FE8020FE21083E88248824882450245024204450548889040202 +653F:00200020FF20083E0844084448444EA448284828481048104F28F04800840102 +6540:1040104020407C8044FE4508468844887C8844504450442044507C8845040202 +6541:1020102010201E3E1020102010207DFC44844488444844507C20445001880606 +6542:1020102020203F3E414481443D4425A4252825283D102510012801480A840502 +6543:0020FE208220823E8244FE44904490A4FF289028901088108928A528C3448182 +6544:0040FC400440688010FE0908FE88128834883050505050209050108851042202 +6545:1040104010401080FEFE1108128810887C8844504450442044507C8845040202 +6546:08100810141E22104110BEFC004400443E4422282228221022103E2822440082 +6547:08100810FF900820083E7F44492449244D244A281C282A10492888A808440882 +6548:102008200020FF3E00442444424481A424281428081014102228424880840102 +6549:104010409440548058FE1108FE88308838885450545090201050108811041202 +654A:081008100E10081E08100810FEFC0044084408444A2849288910082828441082 +654B:204020403C404480C4FE290812882888448882507C504420445044887D044602 +654C:04200E203820083E0844FF44084408A43E2822282210221022283E4822840102 +654D:081008101410221E4110BE1008FC08447F4408442A2829284910882828441082 +654E:0240644018402480D2FE1108FE882088FE88445088500F20F850088829041202 +654F:402040207F20803E7E44424452444AA4FFA8422892108A10FF28024814840902 +6550:00207F204020403E5E44404440447FA4502851285A1054105228912898441082 +6551:1040144012401080FEFE11081088928854881050385054209250108851042202 +6552:1210121012102FA02ABE6AC46AA4AFA42AA42AA82AA82F902228222822442282 +6553:004028402440428080FE7D084688448844887C502850282028502A884D048A02 +6554:0020FF201020103E7E4422442244FFA4002800287E104210422842287E444282 +6555:08200820FFA0083E08447F44494449A47F2808281C102A104928884808840902 +6556:0820082008207F3E08443E440844FFA410281E281210121022282A4844848102 +6557:00407C40448044FE7D08450846887C88448844507C5000202850248845048202 +6558:082008201420223E4144BE44084408A47F2808282A1029104928884828841102 +6559:082008207EA0093E0A44FF4408447EA4242848288F1078100828084828841102 +655A:44402440284000807CFE4508468844887C882850285028202A504C8889040202 +655B:082008201420123E214440C4BE4400A411280928491022102228074878842102 +655C:082008201420223E514488447E4402A4142808282A10A110A128A5281C440082 +655D:0810491029102A20083E7F44492449245D246B28492849104928412845444282 +655E:0820492029202A3E08447F44414441A45D285528551055105D28412845444282 +655F:1420142014207F3E5544554455447FA4552855285510FF902428224842848102 +6560:0010F7101110551E2210551089FC10440044F744112855282210552889441082 +6561:00107E104210421E7E10421042FC7E4420447F44952825284910912825444282 +6562:00207E200220043EFF44224422443EA422283E28221022102F28F22842440282 +6563:242024207E20243E2444FF4400447EA442287E2842107E10422842284A444482 +6564:00107F104910491E7F10491049FC7F440844FF441C282A284910882808440882 +6565:0810091049104A1E8810141022FC49448844494449288A281410222841448082 +6566:10200820FF20003E7E4442447E4400A47E28042808100F10F828084828841102 +6567:081008107F1E1410221041FCFF4402447A444A284A287A104A1002280A440482 +6568:102008207F20003E22441444FF4400A400283E282210221022283E2822440082 +6569:511029102A100020FFBE80C401247E24042408280F28F8100828082828441082 +656A:0020F7201120553E22445544994400A4F7281128551022105528894810840102 +656B:082010207E20423E7E4442447E4410A40828FF2820103E10222842484A848502 +656C:22202220FFA0223E40447F44414481A47D28452845107D10452801280A440482 +656D:00207E2042207E3E42447E440044FFA440287F2895102510492891482A844502 +656E:02100F107810081E0810FF1028FC4B44494449446B28492849107F2841440082 +656F:0010FE108210FE1E8810FF1088FCA544C3440044FE288228FE108228FE448282 +6570:082049202A20083EFF442A44494488A41028FE2822104210642818283444C282 +6571:0810491049107F1E0010FF1000FC7F44414441447F28422824100F28F0444082 +6572:10100810FF10001E7E1042107EFC0044FF448144BD28A528BD10812885448282 +6573:0820492049207F3E0044FF4400447FA4412841287F10421024280F48F0844102 +6574:08200820FFBE08447FA449247F282A104928884600007FFC010011F81100FFFE +6575:102008207F20223E14447F44414449A47F2849285D10551055285D2841444382 +6576:0210E210BFD0A220AFBECAC4AFA4AAA4AFA4A228A728CA909268822882448282 +6577:0A200920FFA0083E7F4449447F4449A47F2849281010FF9020283E2842448682 +6578:08107F104910FFA0493E7F4408247F2449247F281028FF10212872280C44F382 +6579:082008200F20083EFF448144064478A449282A28FF1018102C284A4888840902 +657A:0010FF90801E9F10911091FC9F448044BBC4AAA8AAA8AA90BB908028FFC40082 +657B:10001FE020207FF8A30824881FF010101FF010101FF008001FF8282007C0F83E +657C:0810FF9008107F1E00107F1041FC7F442244FFC400287F28411041287F444182 +657D:061078101010FF9E22105D1094FC1C4400447F4441285D2855105D2841444382 +657E:22101410FF9008207F3E0844FFA449242A24FFA800287F10412841287F444182 +657F:061078101010FFA0223E5D4494A41C2400247F2841285D1055285D2841444382 +6580:00107F10551E55107F1020FC7F4491447D44552855287D1011107D2805440282 +6581:00207F2055207F3E08447F440844FFA4222814287F100810FFA8084808840902 +6582:082008201420223E4144BE44004400A477285528551077102228222855448882 +6583:49202A3E7F4849485DA86B10492841460000FFFE10803E9842E024841884E07C +6584:08203E3E08447FA82A10492808443FFE20802FFC249024902AA851C446B0988E +6585:34104B105510631E55106B10557CFFA480A47E2404280F28F810082828441082 +6586:34104B1055106320553E6B445524FFA480A47E2804280F10F828082828441082 +6587:020001000100FFFE10101010082008200440028001000280044008203018C006 +6588:020001007FFC0820044003801C70E00E0FE000400080FFFE0100010005000200 +6589:020001007FFC0820044003801C70F01E10101FF0101010101FF0101020104010 +658A:020001007FFC0820044003801C70E00E3FF808200FE008200FE0083EFFE00020 +658B:020001007FFC0820044003801C70E00E1FF0020004003FF82488248824A82010 +658C:0010201411D20012FC100BFE08104890289012D012902A902A8A4AEA87060202 +658D:01007FFC0820044003801C70E00E1FF010101FF010101FF010101FF00842F03E +658E:020001007FFC0820044003801C70E00E17D0101017D011101590255029104010 +658F:0040202011FC0104FD0409FC0904490429FC1120112229142908494481820100 +6590:04407C7C044004403C78044004407C7C04400100FFFE0820044003801C70E00E +6591:00000200F93E21082FC820882488FA8822BE210821083A88E2884448087E0000 +6592:0040202011FE0102FD0209FE0900490029FE11AA11AA2AFE2AAA4AAA84A20086 +6593:0200417C25040444FDF4144415F41554957455D4255425F454E455548444044C +6594:20201020FEA0052C6924112429ACD52411247DFC55247C5010501C88E5044202 +6595:03DE225213DE0252FFDE0A220AFA4A222AFA12AA12FA2AAA2AFA4A7282AA0226 +6596:01007FFC082007C01830E7CE244837D82448FFFE90121FF010101FF01010FFFE +6597:0040044002400240104008400840004000FE7F40004000400040004000400040 +6598:1010101010901E5012102290225052108A1E05F0041008100810101020104010 +6599:080808884A482A482C080888FE4818481C082A0E2AF848088808080808080808 +659A:1020102024487EFC224400007FFE4442824410400840007EFFC0004000400040 +659B:100810883C4824484808BE882A482A483E082A0E2AF83E082A084A0842088608 +659C:08080848142822284108BE48082808287F0E08782A0829084908880828081008 +659D:00003E7C224422443E7C00007FFE4442824410400840007EFFC0004000400040 +659E:080828484B28492849086B48492849287F0E4978080814081208210841088008 +659F:22082248FF2822283E0822483E282228220EFF7840085408620840087E080008 +65A0:22082248FFA822287F082248FFA808287F0E49787F084908FFC8410845084208 +65A1:102010201050FE8811047C1244907C5045107C90101EFEF01010101010101010 +65A2:220822487F2822282208FFC808287F28490E7F7849087F080008220841088088 +65A3:00087F48552855287F0820487FA890A87C8E54F854887C881288FE8802880108 +65A4:001000F81F001000100010001FFE104010401040104010402040204040408040 +65A5:001000F81F001000100010001FFE1040104011C0106010502048204040408040 +65A6:0200070438782040204020403F7E244824482448244824482448448844888108 +65A7:044008201850248803000CC03030C0EE1F00100010001FF81080108020804080 +65A8:0408241C24E0248024803C8004FE0488FC882488248824882508450846088408 +65A9:2008201C21E0FD004100510091FEFD10111011101D10F1105110121012101410 +65AA:2000200440787E40824002407A7E4A484A484A487A484A480248028814880908 +65AB:0008001CFCE01080108020803CFE64886488A488248824883D08250822080408 +65AC:1008101C10E0FE8010807C8054FE7C9054907C901090FE901090111011101210 +65AD:0400040455784E4044407F40447E4E48554865484448444840487F8800880108 +65AE:240024047E7824402440FF40007E7E48424842487E48424842487E8842880108 +65AF:220022047F78224022403E40227E22483E4822482248FF480448228841888108 +65B0:100008047F78004022401440FF7E084808487F4808482A484948888828881108 +65B1:100010047D7812401440FF40107E20487E48A24822483E48224822883E882308 +65B2:000077045578554077401440147E7748414841487748144814481F88F0884108 +65B3:22002202FFBC22203E2008207F3E49247F2408247F2408247F2408440F44F084 +65B4:080049022A3CFFA02A20492088BE4124412477A49124552427A4414481440184 +65B5:10006F044578554069404B40107EFFC8144877484148774814481788F8882108 +65B6:00000DFC7154415441FC40807DFC4A4449F44954495449F4484449F448148808 +65B7:0882509C5D5049D054905DDE44547FD4489450945D5449D454945DD444647FC4 +65B8:7FC2405C7FD052504A90525E5FD455545FD464545F5455545F544454BF640084 +65B9:020001000100FFFE04000400040007F004100410041008100810101020A04040 +65BA:202010200050FE50208821043E02248824882488248824884488550889080208 +65BB:208010800080FEFC210022003CF02490249024902490249244925512890E0200 +65BC:202010200020FE50205020883D04260224602410240024C04420541088080000 +65BD:2080108010FE0120FE202120212C3D7427A425242534252A2522450254FE8800 +65BE:208010800080FEFE212022203C2025FC25242524252425244534552888200020 +65BF:2080108010FE0100FE0020FC20043C08241025FE241024102410441054508820 +65C0:202010200048FE8421FE20023C20242024A824A4252425224622542088A00040 +65C1:020001003FF8082004407FFE420281043FF80400040007F00810081010502020 +65C2:2080108010FE0100FE0C20F020803C80248024FE248824882488450855088A08 +65C3:2080108010FE0100FE0020FC20843CA42494248425FE24842484450455148A08 +65C4:2080108010FE0100FE1C21E020203C3C25E02420243E27E0242044225422881E +65C5:2080108010FE0100FE0C20F020903C902492249424882488248444A454C28880 +65C6:2080108010FE0120FE2021FE20203C2025FC2524252425242534452854208820 +65C7:2080108010FE0100FE10201020FE3C92249024FC24A424A424A8451055288A46 +65C8:2020101001FEFE20204820843DFE240224A824A824A824A844A854AA892A0206 +65C9:01107FFC01003FF821083FF821083FF821080080FFFE08000FF810082028C010 +65CA:2080108010FE0100FE0020FC20403C402478244824A82498248844AA54CA888E +65CB:2080108010FE0100FE0021FC20243C2424A024A024BC24A024A04560553E8A00 +65CC:2080108010FE0110FE10209020FE3C902510241024FE24102410441055FE8800 +65CD:2080108010FE0120FE20205020883D242612241025FC24042488445054208810 +65CE:2080108010FE0100FE0020FC20843C8424FC248024A424A824B0452255228A1E +65CF:2080108010FE0100FE80208020FC3CA02520242027FE24202450445054888906 +65D0:2100110011FE0200FC50205022543D58245024D825542652245044505492890E +65D1:2020102011FC0050FC88210423FE3C0825E82528252825E82528440854288810 +65D2:2100110011FE0240FC2021FE20403C8425FE240224A824A824A844AA552A8A26 +65D3:2100110011FE0220FD2420A820203DFC250425FC250425FC2504450455148908 +65D4:40102010007CF71441FE4114727C5210577C511051FE551052105300B4FE0800 +65D5:10100810FF2820443E822210220842204A10840800007C8844B044C47C84447C +65D6:2100110011FE0200FC2021FC20503C8827FE240825E8252825E8440854288810 +65D7:2100110011FE0200FC8821FC20883CF8248824F82488248827FE445054888904 +65D8:2110109413D20012FA50219027FE38102BD22A522A542BD42A4A4A4A4BD69822 +65D9:203C13E0112400A8FDFE20A821243E0225FC2524252425FC2524452455FC8904 +65DA:210011FE120001FEFC5021FC21543DFC240025FC240027FE242044A855248A64 +65DB:2100110011FE0200FC1C23E021243CA827FE2524260225FC252445FC552489FC +65DC:210011FE122004FCFC0021FE21023D7A254A25FE248424FC248444FC540089FE +65DD:208010FE11300248FCB4210221FE3DAA257225FE240024FC248444FC548488FC +65DE:2080108010FE0100FE44202822FE3D2024542728255C252A254A452856908C7E +65DF:2100110001FEFE002540224C3A642B4C2A642AA42BAC2AA44FFE689091080204 +65E0:00003FF002000200020002007FFC0480048004800880088010842084407C8000 +65E1:00003FF002000200420042007FFC0480048004800880088010842084407C8000 +65E2:00007DFC442044207D20452045FE7C204020483044504A5052926092410E0200 +65E3:100021FC7C2044207D2045207DFE0020402040307C50405040924C92710E0200 +65E4:00007DFC442044207520552055FEFE208220BA30AA50AA50BA9282928B0E8600 +65E5:00001FF0101010101010101010101FF01010101010101010101010101FF01010 +65E6:00001FF010101010101010101FF010101010101010101FF000000000FFFE0000 +65E7:200023FC2204220422042204220423FC2204220422042204220423FC22042000 +65E8:2000207023803C08200820081FF800001FF0101010101FF0101010101FF01010 +65E9:00001FF0101010101FF0101010101FF001000100FFFE01000100010001000100 +65EA:002000207C2044204420442047FE7C2044204420442044207C20442000200020 +65EB:000000007DFC44444444444444447C4444444444444444847C84450402280410 +65EC:080008000FFC100410042FC4484488440FC4084408440FC40844000400280010 +65ED:200020F820882088FC8824F8248824882488248824F8248A2402440243FE8000 +65EE:020002003FE0042008223022C01E00001FF0101010101FF0101010101FF01010 +65EF:00001FF0101010101FF0101010101FF0020002007FE00420042008221022601E +65F0:000000FC7C2044204420442044207DFE44204420442044207C20442000200020 +65F1:1FF0101010101FF0101010101FF000003FF801000100FFFE0100010001000100 +65F2:00001FF0101010101FF0101010101FF001000100FFFE0280044008203018C006 +65F3:004000407C8044FC4504460444047D0444844444444444047C04440400280010 +65F4:000001FC7C2044204420442047FE7C2044204420442044207C20442000A00040 +65F5:00001FF0101010101FF0101010101FF00000010021082108210821083FF80008 +65F6:000800087C08440845FE440844087C0844884448444844087C08440800280010 +65F7:00400020782049FE490049007900490049004900490079004900020002000400 +65F8:000001F87C1044204440448045FE7C9244924492451245227E22444200940108 +65F9:01002108210821083FF80100FFFE00001FF0101010101FF0101010101FF01010 +65FA:000007FC784048404840484078404BFC4840484048407840484000400FFE0000 +65FB:1FF0101010101FF0101010101FF0020001007FFC08200440038004401830E00E +65FC:004000207C2047FE4488448844887C8844884450445044207C50448801040602 +65FD:0020002078204BFE4820492449247924492449FC4824482078224822001E0000 +65FE:01000100FFFE010021083FF80102010200FE00003FF820083FF820083FF82008 +65FF:008000807C8045FC4520462044207C2047FE4420442044207C20442000200020 +6600:004000407C8044FC4504460444847C4444444414442444447D84440400280010 +6601:0020002078204BFE4820482049FC792449244924492449347928482000200020 +6602:3FF820083FF820083FF800000C0070FC4084408440844C847094408800800080 +6603:00001FF010101FF010101FF000003FFC20802080214021402220441048089006 +6604:0008003C7BC04A004A004A007BF84A884A884A884A507A504A20045004880906 +6605:000003FC7884488848884890489C788449444944492849287A104A2804440182 +6606:00003FF0201020103FF0201020103FF00000208020843E9820E020842684387C +6607:00001FF010101FF010101FF000000720782008200820FFFE0820102010202020 +6608:002000107C1044FE4482448244827CFE44824480448044807C80450001000200 +6609:004000207C2047FE4480448044807CFC44844484448444847D04450402280410 +660A:00001FF010101FF010101FF0000000003FF801000100FFFE028004401830E00E +660B:3FF801000200FFFE044008203018C0061FF0101010101FF0101010101FF01010 +660C:1FF0101010101FF0101010101FF000003FF8200820083FF8200820083FF82008 +660D:000001FC7D0445044504450445047DFC45044504450445047D0445FC01040000 +660E:000000FC7C844484448444FC7C844484448444FC7C8444840104010402140408 +660F:00783F80208020803FFC20402822301A20061FF0101010101FF0101010101FF0 +6610:001000907C9044884508450446047DFA44884488448844887D08450802280410 +6611:002000207C5044504488454446227C20440045FC440444087C08441000100020 +6612:01000100790049FC4AA44CA448A4792449244A444C44488479044A0404280010 +6613:0FF0081008100FF0081008100FF0040008001FFC224442440484088411280210 +6614:044004403FF804400440FFFE000000001FF0101010101FF0101010101FF01010 +6615:0004000E7CF044804480448044FE7C8844884488448844887C88450801080208 +6616:00100090789048884888492449247A224C4048404888488479044BFE01020000 +6617:00001FF0101010101FF0101010101FF0020001007FFC00000440082010102008 +6618:00001FF010101FF010101FF002000100FFFE040007F004100810101020A04040 +6619:00001FF010101FF010101FF000003FF800000000FFFE0400082010103FF81008 +661A:01000100FFFE01002288145008203018DFF6101010101FF0101010101FF01010 +661B:000001FE7D004500450045FC45047D044504450445FC45007D00450001FE0000 +661C:00001FF010101FF010101FF00000FFFE08001FF8224844480888110822280410 +661D:104010403E5022485444084017FE2000DFF0101010101FF0101010101FF01010 +661E:000003FE7820482048204BFE7A224A224A524A4A4A8A7B024A020202020A0204 +661F:00001FF010101FF010101FF0010011001FF8210041001FF0010001007FFC0000 +6620:00200020782049FC492449247924492449244BFE482078504850008801040202 +6621:002000107C1045FE4420442044447C8445F84410442044447C8245FE00820000 +6622:002000207D2445244524452445FC7C2044204524452445247D24452401FC0004 +6623:002000207C5044884504461244207C4045884410442044447D88441000600380 +6624:002000207C5044504488452446127C1045FC4404440844887C50442000100010 +6625:010001007FFC01003FF80200FFFE082010102FE8C82608200FE0082008200FE0 +6626:00001FF010101FF010101FF002007FFC044008203458C4460440044008401040 +6627:00200020782049FC4820482048207BFE487048A848A8492479244A2200200020 +6628:01000100790049FE4A804A804C8078F848804880488048FC7880488000800080 +6629:0040004078404FFE4840484048407BFC484048E049504A487C46484000400040 +662A:00001FF010101FF010101FF0082010103FF808280820FFFE0820102020204020 +662B:00800080790049FC4A044C0449E479244924492449E449247804480400280010 +662C:00003FF820083FF820803FFC20402C243014200C1FF010101FF010101FF01010 +662D:000003FC788448844884490449147A084C0049FC490449047904490401FC0104 +662E:00001FF010101FF010101FF0004000407DFC1044104410841C84E10442280410 +662F:1FF0101010101FF0101010101FF00000FFFE0100110011F811002900450083FE +6630:00001FF010101FF010101FF0000000007FFC0100110011F811001100FFFE0000 +6631:1FF0101010101FF0101010101FF00200010001007FFC0000101008200440FFFE +6632:0090009078904BFC489448947BFC4A904A904BFE48927892491A011402100410 +6633:004000407A404A404BFC4A404C4078404FFE484048A048A079104A0804040802 +6634:00001FF010101FF010101FF000000C0070FC448444845C846494488810806080 +6635:000001FC79044904490449FC49007940494449484970494079424A42023E0400 +6636:08000400027C3C44044404C4757C164416441544257C248044408430140E0800 +6637:00001FF0101010101FF0101010101FF000003FF82448244824482448FFFE0000 +6638:004000407C7C44844588465044207C5044884706446044107C0844C000200010 +6639:00400020781049E0482248347BB848B048A848A8492879244A24042200A00040 +663A:00001FF010101FF010101FF000007FFC01003FF8210822882448282820082018 +663B:00001FF010101FF010101FF000007CFC10841084108410841E94F08840800080 +663C:00001FF8100810081FF81040102020102FE848268FE008200FE000007FFC0000 +663D:00900088788848804BFE48A048A078A448A44928492849327A224A62049E0800 +663E:00001FF0101010101FF0101010101FF0044044442444144814500440FFFE0000 +663F:00200010781049FE490049107910491049104920492879244A4402FE04420800 +6640:0090009078904A9249944898489079984A944C9248904890791249120212040E +6641:00001FF0101010101FF0101010101FF0244814500C601450644808421042603E +6642:002000207C2045FC4420442047FE7C08440845FE440844887C48440800280010 +6643:00001FF010101FF010101FF00100111009200100FFFE0440044008421042603E +6644:004000447A444948495048404FFE7890489048904890489279124912020E0400 +6645:000003FE7800480049FC4904490479FC4904490449FC49047800480003FE0000 +6646:002000207DFC44204420442047FE7C004420442045FC44207C20442003FE0000 +6647:002000207BFE4850488849047AFA48004BFE4840488079FC4804000400280010 +6648:004000207C2047FE4400448845047E0244884488445044507C20445000880306 +6649:00007FFC0810102024487EFC02040000FFFE00001FF010101FF010101FF01010 +664A:000003FE7840488049104A084BFC7844484048404BFC48407840484007FE0000 +664B:00007FFC0440244814500440FFFE00001FF0101010101FF0101010101FF01010 +664C:0040004078804BFC4A044A044AF47A944A944A944A944AF47A044A0402140208 +664D:000001FE7D024502457A450245027D7A454A454A454A457A7D024502010A0104 +664E:01100110791049104BFC49107910491049104FFE480079104908020804040804 +664F:00001FF010101FF010101FF001007FFC42040200FFFE08201C4003800C707008 +6650:0020001078104BFE48204842488479F84810482248C44B087810482800C40302 +6651:00001FF010101FF010101FF0020004003FF8200827C82448244827C820282010 +6652:000007FE7890489048904BFC4A947A944A944A944A9C4B047A044A0403FC0204 +6653:0080008078BC4BC04850482448D47B0C48004BFE4890489079124912020E0400 +6654:00900094791449184B104D324952790E492048204BFE48207820482000200020 +6655:1FF010101FF010101FF000007FFE42029FF4040009001FF001007FFC01000100 +6656:000003FE7A024C4448404BFC488078A0492049FC482048207BFE482000200020 +6657:0040004078A049104A884C4649F07810482048404BF84A087A084A0803F80208 +6658:000001FC7D0445FC450445FC44007C0045FC4420442047FE7C20442000200020 +6659:00400040788849044BFE4802488879444A4248F849884A507820485001880606 +665A:0080008079F84A084C104BFC4A447A444A444BFC48A048A079224922021E0400 +665B:000003F87A084A084BF84A087A084BF84A084A084BF87920492002220422181E +665C:00001FF010101FF010101FF004407FF801083FF821003FFC0304051419086100 +665D:01003FF80108FFFE01083FF801007FFC00003FF820083FF820083FF80000FFFE +665E:01840068783048C84B0448407BFE48A049204BFC4D2479244934012800200020 +665F:1FF010101FF010101FF000883FFC208020883E88225022502A244454418C8604 +6660:00280024782448204BFE4A207A244A244BA44AA84AA87A904A9205AA04460882 +6661:004800447BFE484048404BFC4A447A444BFC4A444A444BFC7A444A4402540208 +6662:080C08F07E8008800EFE788808882908120800001FF010101FF010101FF01010 +6663:0104010E793049204FE04920793E496449A44F24492479244924012405440284 +6664:000003FE7840484049FC488448847BFE4800480049FC49047904490401FC0104 +6665:004000207BFE4A024C0449F8780048004BFE48904890789049120112020E0400 +6666:0100010079FC4A004DF84908494879284FFE49084A484A287BFC480800500020 +6667:00200120792049FC49204A2078204BFE4800480049FC79044904010401FC0104 +6668:1FF010101FF010101FF000003FFC20002FF820003FFE2908289048604A188C06 +6669:0080008079F84A084C104BFC4A447A444A444BFC48A048A079224922021E0400 +666A:0090009078904BFC4A944A944A947BFC4A944A944A944FFE7800489001080204 +666B:00400040787E48404BFC4A044BFC7A044BFC4A4448404FFE7840484000400040 +666C:004000207BFE48004888488849547A22480048204BFE48207820482000200020 +666D:000003FE7A224A224AFA4A227A224BFE4A024AFA4A8A7A8A4AFA0202020A0404 +666E:082004407FFC044024481450FFFE00001FF0101010101FF0101010101FF01010 +666F:1FF010101FF010101FF00100FFFE00001FF0101010101FF00100210845040200 +6670:0200020CF27092409F409240927EF64897489AC89A489248F248924802480288 +6671:0020012279224A24485048887B0448224820492449247A284850008801040602 +6672:000000407B9C4A044A044B9C7A044A044BFC489048907890489001120212040E +6673:080C08F07E8018802CFE2A884888888809081FF0101010101FF0101010101FF0 +6674:002000207BFE482049FC48204BFE780049FC490449FC490479FC490401140108 +6675:104008403E7E228823503E20205841869FF0101010101FF0101010101FF01010 +6676:0FE0082008200FE0082008200FE000007EFC428442847EFC428442847EFC4284 +6677:1FF010101FF010101FF008401F6022505448084037FEC0001FF0101010101FF0 +6678:1FF010101FF010101FF000207F20043E044427A42428242824102F28F0444082 +6679:01FC010479FC4904490449FC7800490049FE4A4A4C4A789249120222004A0184 +667A:20003E7C48440844FF441444227C40001FF0101010101FF0101010101FF01010 +667B:004000807BFC49104A484C464BF87A484A484BF84A484A487BF848420042003E +667C:00800040F7FE94029A04920093BCF4A494A496A499349128F22292220422081E +667D:01100110F110911097BC91109110F33893B8955495549992F110911001100110 +667E:004000207BFE4800480049FC49047904490449FC482048A879244A2200A00040 +667F:00FC00847C8444FC4484448444FC7C0045FE4502450245FE7D02450201FE0102 +6680:0090008879004A7E4C90489049107B104D7E49104910491079104910017E0100 +6681:0020002079FC482048A848887BFE488848004BFE4890789049120112020E0400 +6682:100CFEF0208048807EFE08880E88F9084A081FF8101010101FF0101010101FF0 +6683:00001FF010101FF010101FF004407C7C044004407C7C04400440FC7E04400440 +6684:004000207BFE4A024C0449FC480079FC490449FC490449FC7904480003FE0000 +6685:0100013CF100910091BC95649524F53C952491249124913CF1249100017E0100 +6686:02100110F11097BE9228924893AAF2AE92BA92EA92AE92A8F4AA94A209A2101E +6687:000007BCF4849484948497BC9400F40097BC9424942497A8F410942804440482 +6688:1FF010101FF010107FFC41043FF801001FF011101FF011101FF00100FFFE0100 +6689:000003FE7A2248204BFE482079FC492449FC492449FC78204BFE002000200020 +668A:000003FE7C20444045FC450445047DFC450445FC450445047DFC440000880104 +668B:00207F20413E7F4448A47F2448284510532861461FF010101FF010101FF01010 +668C:001003D478584A52498C488849047AFA482048204BFE48207850488801040202 +668D:000001FC7D0445FC450445FC44807DFE46224522455245027DFA440200140008 +668E:008800887BFE488848A8482049FC7924492449244BFE48207850488801040202 +668F:004000447BF4484848504FFE4840788049F84B084D0849F87908490801F80108 +6690:0040004079FC48844BFE480049FC790449FC48204BFE48207A204BFE00200020 +6691:1FF010101FF010101FF002001FD00220FFFE03000FF03810CFF008100FF00810 +6692:000001FC790449FC490449FC7820492049FE4A20482079FC4820002003FE0000 +6693:00407F40127E0C88FF4819482A504820A850108C1FF010101FF010101FF01010 +6694:002000207BFE482048204BFE7A8A4A524AFA4A224A227AFA4A220222022A0204 +6695:002000207BFE482049FC492479AC4974492449FC4820787048A8012402220020 +6696:003C07C07A44492848004BFC788048804FFE490049F87A884A50042008D80306 +6697:008000407BFC4800490848904FFE780049F84908490849F87908490801F80108 +6698:000001F8790849F8490849F878004BFE490049FC4A547C944924024400A80110 +6699:00400040F7FC904093F8908097FCF110920895F691109110F1F09110011001F0 +669A:0008003C7BC048044A44492879FC4A2048204BFE482079244924012401FC0004 +669B:0108008878904BFC484049F848407BFE4880490049FC4A207C20482003FE0000 +669C:20201010FEFE00004444242428280EFEF00000001FF010101FF010101FF01010 +669D:000003FE7A02480049FC490449FC790449FC484048204BFE7800488801040202 +669E:0020004079FC490449FC490479FC490449FC48204BFE787048A8012402220020 +669F:002001247924492449FC48007BFE480049FC4904490479FC4888005003FE0000 +66A0:1FF010101FF010101FF00100FFFE10101FF000007FFC40044FE448244FE4400C +66A1:0090008879044A424C8849FC780448004BDE48424A52794A4A520042014A0084 +66A2:100011F811087DF8550855F87C0057FE550055FC7E5454941124124410A81110 +66A3:0100010079FC4A004DF848007BF848884AA849C84FF8788A49CA06AA00860082 +66A4:0020004079FC490449FC490479FC48404BFE488849247A224DFC002000200020 +66A5:000001FC790449FC490449FC78204BFE4A0248404BFE78884990006000980304 +66A6:00003FFE221022103FBE27182AB432522210200027F8240827F8440847F88408 +66A7:000E03F078444A2449084BFE7A4248404BFE488048FC79444928021004680186 +66A8:7DFC44207D2045FE7C5048525492650E1FF010101FF010101FF00000FFFE0000 +66A9:010001107BDC4A544D544A8879084AF44C0248004BFC78404950024805440080 +66AA:008800887BFE4888488848F878204BFE4A224B324AAA7B764A220222022A0224 +66AB:08047F7808407F40497E7F4849487F4808487F4808881FF010101FF010101FF0 +66AC:08203E2008F87F282228496A3E2A08567E8200001FF010101FF010101FF01010 +66AD:0020004079FC490449FC490449FC7820492448A8492448207BFE482000200020 +66AE:04407FFC04401FF010101FF010101FF00400FFFE10102FE8C8260FE008200FE0 +66AF:008800887BFE4888480049FC790449FC490449FC48207BFE4850008801040202 +66B0:01240124F22494249954914A9292F6109A109250925C9250F25092B0029E0300 +66B1:000003FE7A484A484BFE4A487A204BFE4A404AFC4B447A444A7C020003FE0000 +66B2:002001FC788848504BFE480049FC790449FC490449FC48207BFE482000200020 +66B3:008803DE788849DC48884BDE788848004BFC4804480479FC4804000403FC0004 +66B4:1FF010101FF010101FF008207FFC0820FFFE08203118C9260540092015102208 +66B5:008800887BFE488848F8482079FC492449FC482049FC78204BFE005000880306 +66B6:02100110F11097BE9240920093BEF28A928892A892AE92A8F4A895A8085E1080 +66B7:002003FE782049FC492449FC792449FC48224BFE48087BFE4908008800280010 +66B8:00400040F7FC90A09514920897FCFA0A93F8920893F89040F248944409440080 +66B9:07F8440827F8240807F80240E7FC2C4037F8244027F8244027FC54008FFE0000 +66BA:000003DE7A524A524BDE480079FC492449FC492449FC78204BFE002000200020 +66BB:000001FC790449FC490449FC78204BFE480049FC490479FC4820012402220060 +66BC:49202A3E7F4849485DA86B10492841461FF0101010101FF0101010101FF01010 +66BD:0020012478A84BFE48A849244A227904490449DE4A444D54789E490402040404 +66BE:02080108F7C89010979E949497A4F01497949094911491C8F708911405240242 +66BF:002003FE782049FC480049FC790449FC48884BFE480079FC4904010401FC0104 +66C0:002003FE782049FC48004BFE7A0249FC480049FC490479FC4904008803FE0000 +66C1:10007EFC42107E9042FE7E3040507C92410E5FF070101FF010101FF00000FFFE +66C2:0088008879FC488848884BFE782049FC492449FC492479FC4800008801040202 +66C3:00100210797C481448FE48144B7C799249544938495449927930490002FE0400 +66C4:008803FE7888480049FC48A848A87BFE48A848A849FC48207BFE482000200020 +66C5:1FF010101FF010101FF004407FFC04403FF809207FFC09203FF801007FFC0100 +66C6:3FFE2000218C2E7022103FBE27182AB43252221027F8240847F8440887F80408 +66C7:1FF010101FF010103FF801007FFE41029D7400003FF80000FFFE10103FF80008 +66C8:002001FC788848504BFE480079FC492449FC492449FC782049FC002003FE0000 +66C9:0020002079FC48204BFE49087B9C490849884E3E48007BFE489000900112020E +66CA:009007FC78944BFC4A904BFE79124BFA4D0E49F8490879F8490801F800900108 +66CB:000003FE78504BFE4A524BFE780049FC490449FC490479FC482003FE00200020 +66CC:00F87C8844F87C8844F87C8802A801107FFC482410102FE8010001007FFC0000 +66CD:004001FC790449FC490449FC790449FC4820492448A87924482003FE00200020 +66CE:000001FC795449FC482049FC78204BFE4888485049FC78204BFE002000200020 +66CF:1FF010101FF010101FF0210027DE545297D4E458245457D29512F49A25544610 +66D0:0FE008200FE008200FE07C7C44447C7C44447D7C11001FF821005FF00100FFFE +66D1:1FF010101FF010107FFC44447C7C44447D7C06C01930E64E01800E2000C01F00 +66D2:01080208F7C8945097DE946497D4F214911497D4921493C8F2489454055408A2 +66D3:3FF820083FF820083FF811101FF041047FFC0200FFFE09203FF8C5460BA01110 +66D4:02880288F7E89290941E97E49454F8549754955495549748F548905402940122 +66D5:010001F87A084FFE4A884B247BFE4A004AFC4A004AFC7A004AFC048404FC0884 +66D6:003C03C0F0449224910897FE9442F2A4928A947A908090F8F10892900060079E +66D7:00500252795448504BFE488878504BFE482049FC48207BFE48A8012406220020 +66D8:000001FC78204BFE4A2249AC782049AC48004BFE482079FC495401540154010C +66D9:000003FE7A524A524BFE482449FC78284BFE482048FC49847AFC488400FC0084 +66DA:011007FCF11097FC940493F89000F7FC9080914496A89170F6A8912606A00040 +66DB:003C07C0F0409FFE904097FC9554F4E497FC904097FC9040FFFE900005240892 +66DC:000007BCF08494A4929494A49120F21097FC9A2093FC9220F3FC922003FE0200 +66DD:03F80208F3F8920893F8911097FCF1109FFE911092489554F0E09150024800C0 +66DE:000003FE7A484BFE4A484AFC7AA44AFC4AA44AFC4A207BFE4B2A057A050A0906 +66DF:1FF010101FF010107FFC44447C7C44447FFC20002FF820003FFC24484430860E +66E0:00400020F7FE948895FC948897FEF42095FC952495FC9524F5FC940004880904 +66E1:0FE008200FE008200FE07C7C44447C7C4444FFFE90121FF010101FF01010FFFE +66E2:004000207BFE4A2249FC48507A8A49FC4A8A48F8488878F84820012402A20040 +66E3:01100110F7FC911091F0920892EAF6AC92A892AA96EA9A06F00092A402520452 +66E4:07FC0040F7FE94429B5C9040975CF12093FC96209BFC9220F3FC922003FE0200 +66E5:0040007C78404BFC4A444BF07A444AFC4AA84AF84AA87AF84A0005FC05540BFE +66E6:011007FCF04093F8904097FC9000F3D4911297FE93509534F38C908A02960102 +66E7:3FF820083FF820083FF800107F1000FE3E9222923EFE00107F1455127FFE4902 +66E8:02100110F7DE9010945E928297DEF01097DE945097DE9450F7DE9450045204CE +66E9:1FF010101FF010101FF00100FFFE22883EF804403FF80440FFFE04901C60671C +66EA:000003FEF252925293FE91089154F25E97B4911E925497DEF0149554055E0010 +66EB:210447C88812F3BC20084B92F83E0380AAAAABAA00001FF010101FF010101FF0 +66EC:0FBE0000F7BC94A496B494A49040F7FE94A097FC94A497FCF51299DC091211CE +66ED:02480150F7FC940491F0911097FCF55494E497FC904097FCF0409FFE02A40452 +66EE:07BC04A4F7BC900097FE94009590F49E97D4956495D49554F5D495680BC81054 +66EF:03FE02027BFE4A924A544A927AFE4AAA4AFE4B224AFA7AAA4AFA022205FA0004 +66F0:000000007FFC40044004400440047FE440044004400440047FFC400400000000 +66F1:00003FF82008200820083FF82108210821083FF8210801000100010001000100 +66F2:04400440044004407FFC44444444444444447FFC44444444444444447FFC4004 +66F3:0100010001003FF8210821083FF8210821083FF8009000A0004201A20E1AF006 +66F4:0000FFFE010001003FF8210821083FF8210821083FF811000A00060019C0E03E +66F5:0120011001003FF8210821083FF8210821083FF8009000A0004201A20E1AF006 +66F6:080008001FF8224844480888112822101FF0101010101FF0101010101FF01010 +66F7:00001FF010101FF010101FF0080008001FFC21045284944410041F8400280010 +66F8:01003FF00110FFFE01103FF001003FF80100FFFE00001FF010101FF010101FF0 +66F9:04400440FFFE04403FF824483FF824483FF800001FF010101FF010101FF01010 +66FA:01000100FFFE01003FF821083FF821083FF800001FF010101FF010101FF01010 +66FB:1FF010101FF010101FF00000101010103EFC4210A490149008FE101020104010 +66FC:00001FF010101FF010101FF000007FFC44447FFC00003FF0082007C01830E00E +66FD:082004403FF821083FF821083FF800001FF0101010101FF0101010101FF01010 +66FE:082004403FF82108292825483FF800001FF0101010101FF0101010101FF01010 +66FF:082008207EFC0820FEFE1450228841069FF0101010101FF0101010101FF01010 +6700:1FF010101FF010101FF00000FFFE22003EF822883E9022502F20F25042880306 +6701:3E7C081048907EFC1428244A468600001FF0101010101FF0101010101FF01010 +6702:1FF010101FF010101FF00000FFFE22203E2022FC3E2422242F24F24442540288 +6703:010002800C6037D8C0063FF8292825483FF800001FF010101FF010101FF01010 +6704:1020102013FE7C2055FC55247DAC5574552455FC7C20547010A8112412221020 +6705:100011FC11047DFC110411FC1080FDFE122211222152290245FAFC0244140008 +6706:444024402840FE7E92AAD72ABA2A924AFE4A00927D1244227C2244427C944408 +6707:1010282044FEBA920092FEFE9292D69292FEFE2800487DFE44087C0844087C08 +6708:07FC040404040404040407FC04040404040407FC040404040804080410142008 +6709:02000200FFFE040004000FF0081018102FF0481088100FF00810081008500820 +670A:0000780049FC4800480078004BFE489048907890489048904892491249129A0E +670B:00003E7C2244224422443E7C2244224422443E7C22442244224442844A948508 +670C:00103C502450245024883C88250426FA24483C48244824482488448855288A10 +670D:00003EFC2284228422943E88228022FC22A43EA422A822A8229042A84AC48482 +670E:00203C202450245024883D242612241025FC3C04240824882450442054108810 +670F:00203C202524252425243D2425FC242024203D24252425242524452455FC8804 +6710:00803C80250025FC26043C0425E4252425243D2425E425242404440454288810 +6711:00487A484A484A484A487FFE4A484A484A487A484A784A004A004A004BFE9800 +6712:00203C20242025FC25243D242554258C25243D242554258C2504450455148908 +6713:00503C502450255224D43C582450245824D43D52265024502492449255128A0E +6714:4200227C2444FF440844087C4944494449447F7C094410441084208441148208 +6715:00883C482450240025FC3C202420242027FE3C20245024502488448855048A02 +6716:00403C2025FC250425043DFC2504250425FC3D20252225142508454455828900 +6717:1000087C7E44424442447E7C424442447E44407C484444445A84628441140208 +6718:00407840488849044BFE7802488849444A4278F849884A504820485049889E06 +6719:0000FE7C8244AA44A644C67C8244BA44AA44AA7CAA44AA44FE84828401140208 +671A:02000100FFFE100010001FF800007CFC448444FC7C8444FC44847C8401140208 +671B:1000087CFF44207C2044267C3844209401087FFC010001003FF801000100FFFE +671C:00403C2027FE240025FC3D0425FC240025FC3C08241027FE2420442054A08840 +671D:0800083EFFA208227F22413E7F2241227F22493E0822FFA208420842088A0904 +671E:08207FFC08200FE008200FE00820FFFE10102FE8C8260FE008200FE008200860 +671F:2200227C7F44224422443E7C224422443E44227C2244FF440484228441148208 +6720:008878884BFE488848A8782049FC4924492479244BFE48204850488849049A02 +6721:000078884A524A224A527A8A4A024BFE488879444A7A48884950482048D89B06 +6722:00007F7C48447E7C42447E7C48447F5400887FFC01003FF801000100FFFE0000 +6723:00203DFC2488245027FE3C0025FC252425FC3D2425FC242025FC442057FE8800 +6724:3E7C22443E7C22443E7C22444A9485083E7C22443E7C22443E7C22444A948508 +6725:00887AAA4ADC4C8849547A2248004BFE4A427C444BFC48444844488449149A08 +6726:00887BFE48884BFE4A0279FC48004BFE484078A24B5448B84B5448924B509820 +6727:011078904BDE48104A5E79824BDE48104BDE7A504BDE4A504BDE4A504A529ACE +6728:01000100010001007FFC03800540054009201110210841048102010001000100 +6729:0100010001000100FFFE01000100092009101108110821044104810405000200 +672A:0100010001003FF8010001000100FFFE03800540092011102108C10601000100 +672B:010001000100FFFE0100010001007FFC03800540092011102108C10601000100 +672C:01000100010001007FFC0380054005400920111021084FE48102010001000100 +672D:0880088008800880FE80088018801C802A802A804880888408840884087C0800 +672E:0100012001100100FFFE01000920092009200920112011202120411E81000100 +672F:01000120011001107FFC03800540054009201110210841048102010001000100 +6730:010001007FFC0380054009203118C1063FF80010006003801C0420041FFC0000 +6731:0100110011001FF8210041000100FFFE03800540092011102108C10601000100 +6732:1040104010401040FC4010403040384054A054A090A011101110120814041802 +6733:1000102011201120FD2011203120392055205110911012101208140818041002 +6734:0840084008400840FE40085018481C442A442A40484088400840084008400840 +6735:00000FE00820082008201020201EC10001007FFC0380054009203118C1060100 +6736:00003FF008100820083C10041004201441080100FFFE054009203118C1060100 +6737:0800080009FC0844FE44084418441C442A442A44484488840884090409280A10 +6738:1040104010401040FDFC10443044384454445484908410841104110412281410 +6739:1080108010801080FDF0109030903890549054909090109211121112120E1400 +673A:100011F011101110FD10111031103910551055109110111211121212120E1400 +673B:0804080408840884FE84088418841C842A8C2AB448C488840804080408040804 +673C:0880088008800884FE88089018A01CC02A802A804880888408840884087C0800 +673D:100013FE10401040FC801080310039FC54045004900410041004100410281010 +673E:080008000BFE0820FE20082018201C202A202A20482088200820082008A00840 +673F:01000100FFFE010001003FF821082108210821282390054009203118C1060100 +6740:00081810066001800660181861040100FFFE0100112011102108210445040200 +6741:0880084008400820FE20082018201C502A502A50484888880888088409040A02 +6742:020002003FE0042004220822111E61000100FFFE010009201110210845040200 +6743:100013FC11041104FD0410883088388854505450902010201050108811041602 +6744:1008103C11E01020FC20102030203BFE54205420902010201020102010201020 +6745:100011FC10201020FC20102030203BFE54205420902010201020102010A01040 +6746:100011FC10201020FC20102030203BFE54205420902010201020102010201020 +6747:100011FC10001000FC0013FE30403840548054FC900410041004100410281010 +6748:100013FC11041144FD2410A83088388854505450902010201050108811041602 +6749:0804080408080810FE20084418041C082A102A224842880408080810082008C0 +674A:1104112411241124FD2411243124392455245124912411241124122412041404 +674B:100011F011101110FD10111031903950555055109110111211121212120E1400 +674C:1000100013FC1090FC90109030903890549054909090109211121112120E1400 +674D:100011FC10041008FC10102030203BFE54205420902010201020102010A01040 +674E:010001007FFC0380054009203118C1060FE000400080FFFE0100010005000200 +674F:010001007FFC0380054009203118C10600001FF010101010101010101FF01010 +6750:0808080808080808FEFE080818181C182A282A28484888880808080808280810 +6751:1010101010101010FDFE10103010381055105490909010101010101010501020 +6752:1000100011FC1044FC4411443944354452445044908410841104110412281410 +6753:10401040108010FCFD0412043004390454845444904410041004100410281010 +6754:1008103C13C01040FC4010403840347E53C050409040104210421042103E1000 +6755:0820082008200820FE2009FE18201C202A202A50485088500888088809040A02 +6756:1010101010101010FDFE10103010391055105490909010501020105011881606 +6757:02000100FFFE1000100010001FF801000100FFFE0380054009203118C1060100 +6758:00003FFC200420043FFC2000208020803FFE21C022A024902888508640808080 +6759:0848084408440840FE5E09E018401C402A402A40482088220812080A08060802 +675A:10401040108010FEFD00120030FC380854105420904010801102110210FE1000 +675B:100011FC10041004FC0410FC30803880550055FC900410041004100410281010 +675C:1020102010201020FC20102033FE382054205420902010201020102017FE1000 +675D:1020102010201120FD2C113431643BA455245534912811221122110210FE1000 +675E:1000100011F81008FC081008300839F855085500910011001102110210FE1000 +675F:01000100FFFE010001003FF82108210821083FF82388054009203118C1060100 +6760:1000100011FC1020FC2010203020382054205420902010201020102013FE1000 +6761:040004000FF01820644003801D70E10E01007FFC010009201110210845040200 +6762:010001007FFC0380054009203118C10600003FF80100010001000100FFFE0000 +6763:1020102010201020FD241124312439245524552491241124112411FC10041000 +6764:1000100013FE1080FC80108030FC388454845484910411041204120414281810 +6765:0100010001007FFC0100111009100920FFFE0380054009203118C10601000100 +6766:10801080108010F8FD08110831103A1054205020905010501088110812041402 +6767:1020101010101000FDFE10803080388054805480908010801080108010FC1000 +6768:100011F810101020FC40108031FE389254925492911211221222144210941108 +6769:100013F010101010FD101110311039FC54045404900413F41004100410281010 +676A:10201020102010A8FCA410A23122392056245424902810081010102010C01300 +676B:0810081008100890FE900890189E1C902A902A9048908890089008900BFE0800 +676C:100011FC10001000FC0013FE30903890549054909090109211121112120E1400 +676D:10801040104013FCFC00100031F03910551055109110111211121212120E1400 +676E:10201020102013FEFC20102031FC392455245524912411341128102010201020 +676F:1000100013FE1020FC201040384034D051485244944410401040104010401040 +6770:0100010001007FFC03800540092011102108C106010000002488224442448004 +6771:01000100FFFE010001003FF821083FF821083FF82388054009203118C1060100 +6772:1FF0101010101FF0101010101FF0010001007FFC0380054009203118C1060100 +6773:010001007FFC0380054009203118C1061FF0101010101FF0101010101FF01010 +6774:084008400840087CFE84088819201C202A202A50485088500888088809040A02 +6775:10801080108011FCFD2012203020382057FE5420902010201020102010201020 +6776:10201020102013FEFC20112431243924552455FC9024102010221022101E1000 +6777:100011FC11241124FD241124312439FC55045500910011001102110210FE1000 +6778:100010F810881088FC881106320039FC54845484904810501020105010881306 +6779:10A010A010A01124FD24132835303920556051A09120112211221122111E1100 +677A:1000104010201010FC90108030803A8456825282928214881088108810781000 +677B:080009F808480848FE48084818481DF82A882A8848888888088808880BFE0800 +677C:100011F810081050FC20101033FE382254245420902010201020102010A01040 +677D:1008103C11E01020FC2011FC38203420502053FE902010201020102010A01040 +677E:1010109010901088FC88112431243A225440544090881084110413FE11021000 +677F:1008101C11E01100FD0011FC3144394455445528912811101110122812441482 +6780:04400440082010102208C44608201FF001100100FFFE054009203118C1060100 +6781:100013FC10841088FC881090309C388455445544912811281210122814441182 +6782:080008FC08840884FE8408FC18841C842A842AFC488488840884088409140A08 +6783:10401040108010FCFD0412043084384454445414902410441184100410281010 +6784:10801080108010FCFD04110432443844548454A4911411F41014100410281010 +6785:100011FC10881088FC88108830883BFE54885088908810881088110811081208 +6786:1008103C11E01020FC20103C31E038205420503E93E01020102210221022101E +6787:1010111011101112FD12111431D83910551055109110111211521192110E1000 +6788:208020843E9820E020842684387C21000100FFFE0380054009203118C1060100 +6789:1000100013FE1020FC2010203020382055FC5020902010201020102017FE1000 +678A:10001040119E1112FD1211123112391255125512915A11941110101010101010 +678B:10401020102013FEFC801080308038FC54845484908410841104110412281410 +678C:1010109010901088FD0811043A0435FA50885088908810881108110812281410 +678D:1090109011081108FA04140233FC3880550051F8900810081008100810501020 +678E:1020102010201020FDFC10203020382057FE5420905010501088108811041202 +678F:100011F811081108FD0813FE31083908550853FE910811081108110811281110 +6790:1008101C11E01100FD00110031FE391055105110911011101110121012101410 +6791:100017FE10801080FC8010F8390835085108520893F810101010101017FE1000 +6792:080009FE08080888FE88088819081DFE2A182A284848888809080A0808280810 +6793:0808088808480848FE08088818481C482A082A0E49F888080808080808080808 +6794:1020102010501050FC88114432223820540055FC900410081008101010101020 +6795:10401040104013FCFA4414483040384054A050A090A0112011221222141E1800 +6796:0808083C09E00820FE20082019FE1C202A202A50485088500888088809040A02 +6797:1020102010201020FDFE10203070387054A850A8912412221420102010201020 +6798:10201020102011FEFD221122312239225552554A918A110211021102110A1104 +6799:100011FE11001100FD78114831483948554855689150114211421142123E1400 +679A:1040104010401080FCFE11083288388854885450905010201050108811041202 +679B:1008101C11F01150FD5011503150395055505548914811481144124412421400 +679C:00001FF0111011101FF0111011101FF011100100FFFE054009203118C1060100 +679D:10201020102013FEFC201020302039FC54845488904810501020105011881606 +679E:1110111011101110FD10111031103910551052A8926812281444144418841102 +679F:1000100011FC1000FC00100033FE38205420544090401088110413FE11021000 +67A0:1040104011F81048FC88108A310A3A265420502093FE10201020102010201020 +67A1:1008106813881088FC88108830883BFE54885488908810881108110812081408 +67A2:100013FC12001208FE88125032503A2056205250925012881308120013FE1000 +67A3:01000100FFFE01003FF821082388254809203018C606018000400E0001800040 +67A4:0820082808240824FE2009FE18201C202A202A50485088500888088809040A02 +67A5:200023FE22002220FA20222022FC72246A24A224A24422442484248429283210 +67A6:10401020102011FCFD041104310439FC55045500910011001100120012001400 +67A7:100011FC11041104FD241124312439245524555490501090109011121212140E +67A8:1080108410841088FC9010A030803BFE54A0549090901088108410A210C01080 +67A9:010001007FFC052009103108C5440440082011102108C206044008201FF00010 +67AA:1040104010A010A0FD101208340639F055105110915011201104110410FC1000 +67AB:200023F822082208FB2822A822A872486A48A2A8A2A8232A240A240A28063002 +67AC:100011F811081108FD4811283928350853FE5108910811081108120812281410 +67AD:010002001FF010101210115010201FFC010401047FF4038805401930E10E0100 +67AE:0810081008100810FE1E081018101C102AFE2A82488288820882088208FE0882 +67AF:1020102010201020FDFE10203020382055FC5504910411041104110411FC1104 +67B0:100011FC10201020FD2410A430A8382057FE5420902010201020102010201020 +67B1:0820082008200840FE48088419FE1C822A002AFC488488840884088408FC0884 +67B2:0400080010103FF800081FF0101010101FF00100FFFE054009203118C1060100 +67B3:1000100011FC1104FD0411043104390455FC5504900010901088110412021402 +67B4:100011F811081108FD0811F83000380057FC5444904410841084110412281410 +67B5:100011F811081108FD0811F830003BFE5480550091F810081008100810501020 +67B6:080008007F7C094411441144257C420001000100FFFE054009203118C1060100 +67B7:220022002200FA1E27D2225272526A52AA52A252225222522452245E29523080 +67B8:10801080108011FCFD04120431E4392455245524912411E41124100410281010 +67B9:1080108011FC1104FA0415F431143914551451F4910411281112110210FE1000 +67BA:10201020102013FEFC201020302039FC547054A890A811241124122210201020 +67BB:1048114811481148FD4813FE3148394855485548917811001100110011FE1000 +67BC:12201220FFFE1220122013E010001FF801000100FFFE054009203118C1060100 +67BD:010001007FFC01001010FFFE101010101FF00100FFFE054009203118C1060100 +67BE:10201020102013FEFC20102031243924552455FC912411241224122414241020 +67BF:10201020102013FEFC20102038A83488508857FE908810881108110812081408 +67C0:10101010101011FEFD121114311039FC55445544912811281110122812441482 +67C1:10201010101011FEFD02120430803888549054A090C0108210821082107E1000 +67C2:1080108010FE1100FA201120312C397457A45124913411281122110210FE1000 +67C3:1020102010501050FC8811243212381055FC5404900810881050102010101010 +67C4:100013FE10201020FC2013FE32223A225652524A928A130212021202120A1204 +67C5:100011FC11041104FD0411FC31003940554455489170114011421242123E1400 +67C6:1040102010201000FDFE10003004388454845448904810481050101013FE1000 +67C7:103811C010401040FC4013FC304038E054E05550915012481444184210401040 +67C8:10201020112410A4FCA8102031FC38205420542093FE10201020102010201020 +67C9:0804081E09E00800FE20081019FE1C042A082A1048208840088009400A3E0800 +67CA:10401040107C1084FD881250302038505488530690601010100810C010201010 +67CB:089008881080309E57E0908010441034110C0100FFFE054009203118C1060100 +67CC:100011FC10041004FDF41004300439F45514551491F411141004100410281010 +67CD:10201020102011FCFD24112431243924552453FE902010501050108811041202 +67CE:1088108810881108FD7E13083508394855285528910811081108110811281110 +67CF:10201020104011FCFD0411043104390455FC5504910411041104110411FC1104 +67D0:08200820FFFE082008200FE0082008200FE00100FFFE054009203118C1060100 +67D1:1088108810881088FDFE108830883888548854F8908810881088108810F81088 +67D2:20801080009C47E0208008841084607C21000100FFFE054009203118C1060100 +67D3:2080108003F04090211009121212640E29000100FFFE054009203118C1060100 +67D4:00001FF0022001407FFC04841888628001000100FFFE054009203118C1060100 +67D5:100011F810081050FC20101033FE386254A454A0912012201420102010A01040 +67D6:100013FC10841084FC84110431143A08540051FC910411041104110411FC1104 +67D7:1010109010901108FD081204340239F855085508910811081108110811F81108 +67D8:1000100013FE1020FC201040304038FC55845284948410841084108410FC1084 +67D9:100011FC11241124FD2411FC31243924552455FC912410201020102010201020 +67DA:1020102010201020FDFC112431243924552455FC912411241124112411FC1104 +67DB:10201020102011FCFD241124312439FC55245524912411FC1124102010201020 +67DC:100011FE11001100FD0011FC310439045504550491FC11001100110011FE1000 +67DD:1008101C11E01100FD00110031FE391055105530911811141112121012101410 +67DE:10801080108010FEFD4011403240387C544050409040107E1040104010401040 +67DF:10201020102011FCFD24112431FC39245524552493FE11041104110411141108 +67E0:20402020202023FEFA022404200070006BFEA020A02020202020202020A02040 +67E1:100011FC10001000FBFE10003020382257B250B490A811281124122414A21040 +67E2:1008103C13E01220FE20122032203BFE5620521092101212120A128A13261212 +67E3:1020102011201120FDFC11203220382057FE5420905010501088108811041202 +67E4:100011F811081108FD0811F831083908550855F8910811081108110817FE1000 +67E5:01000100FFFE0540092011103FF8D01610101FF0101010101FF00000FFFE0000 +67E6:0800080008FC0884FE84088418FC1C842A842A8448FC88840800080009FE0800 +67E7:1008101C11F01150FD5011503150395055505548914811681154127412521400 +67E8:10401040104013FEFC8010A0392035FC53245524912411241134112810201020 +67E9:100013FC12001240FE40127832883A9057105220925012881304120013FE1000 +67EA:1010109010901110FD7E12523392389255125112925213D210621022104A1084 +67EB:10901090109013FCFC94109433FC3A90569053FE90921092111A111412101410 +67EC:01000100FFFE010001003FF82108292825483FF82388054009203118C1060100 +67ED:1050104810481040FBFE1080308038FC55445144912811281210122814441182 +67EE:1020102011241124FD24112431FC382054205524912411241124112411FC1004 +67EF:1000100017FE1008FC0813C832483A485648524893C812481008100810281010 +67F0:010001007FFC054009203118CFE6000000007FFC010011101108210445040200 +67F1:10401020100013FEFC2010203020382055FC5420902010201020102013FE1000 +67F2:1000104010201028FC08108830903A9456A252A294C210881188128814781000 +67F3:10001080131E1252FE52125232523A52565252D2935A12541090109011101210 +67F4:0880088828902EA028C028842E84F07C01000100FFFE054009203118C1060100 +67F5:100011FC11541154FD54115431543BFE55545554915411541154114411141108 +67F6:1000100013FE1252FE52125232523A525652528E92821302120213FE12021000 +67F7:100011FC11041104FD04110431FC3850545054509050109210921112120E1400 +67F8:100011FE10101010FC201020306838A455225222902010201020100013FE1000 +67F9:10201020102E11F0FD201120312039FE5422546290A2112A1624102010201020 +67FA:100011FC11041104FD0411FC3040384055FC5444904410841084110412281410 +67FB:010001007FFC054009203118C1061FF010101FF010101FF010101010FFFE0000 +67FC:10401020102013FEFA0214043000389054905090908811081108110412041402 +67FD:100011FC10841088FC501020305038885726502091FC10201020102013FE1000 +67FE:1000100013FE1020FC20102031203920553C5520912011201120112017FE1000 +67FF:10401020100013FEFC20102031FC392455245524912411241134112810201020 +6800:101C11E011001100FDFE11003100397C554455449154114811421242123E1400 +6801:21002100211E21D2FA522252225275526892A092A11A21142210241028102010 +6802:100010FC108410A4FC94108430843BFE550455449124110411FE100410281010 +6803:1008101C11E01100FD0011FE31203920553C5524912411241124124412541488 +6804:22081108111000207FFE4002810401007FFC03800540092011102108C1060100 +6805:100011DC11541154FD54115431543BFE5554515491541154115412D41224144C +6806:010001007FFC01003FF8210821083FF80280044008203318C0C6060001800040 +6807:100011FC10001000FC0013FE3020382055285524922412221422102010A01040 +6808:105010481040105CFDE01040305E39E054445048903010221052108A13061002 +6809:1088108813FE1088FC88100033FE3842544254429042104A1044104010401040 +680A:1090108810881080FBFE10A030A038A454A451289128113212221262149E1800 +680B:10401040104017FEF880112031203A2057FC5020912811241222142210A01040 +680C:10201020103E1020FC2011FC31043904550455FC910411001100120012001400 +680D:1020102011201120FDFC112032203820542055FC902010201020102013FE1000 +680E:1008103C13C01200FE20122032203BFE54205420912811241222142210A01040 +680F:1000110810881090FC0013FE30003800540055FC900010001000100013FE1000 +6810:10401020101011E0FC22103433B838B054A854A8912811241224142210A01040 +6811:2004200427842084F8BE2484228472A46914A114A28422842484280420142008 +6812:1080108011FC1104FE0411E43124392455E45524912411E41104100410281010 +6813:1020102010501088FD04120231FC38205420502091FC10201020102013FE1000 +6814:080008007F7C08243E2408447F54088809000100FFFE054009203118C1060100 +6815:100011FE11201120FD2011FC310439045504550491FC11201120112011FE1000 +6816:100017FE10901090FC9013FC32943A9456945294929C13041204120413FC1204 +6817:00007FFC044004403FF8244824483FF801000100FFFE054009203118C1060100 +6818:10201020107C1084FD481030302038485590543E904211A41018101010601180 +6819:2080208020FC2108FA902060219876266820A1FCA020222023FE202020202020 +681A:1088104810501000FDFC10203020382055FE5420905010501088108811041202 +681B:1040104011FC1044FC84108431283A10550853DE914A114A114A1252135A14A4 +681C:1020102013FE1020FC2011FC312439245524552C907010A81124162210201020 +681D:1008103C11E01020FC2013FE30203820542055FC910411041104110411FC1104 +681E:00007EFC08200820FEFE08201020202041200100FFFE054009203118C1060100 +681F:1104108410881000FDFE108830883888548853FE908810881108110812081408 +6820:083813C03040504097FC1040104013F800000100FFFE054009203118C1060100 +6821:10401020102011FEFC00108831043A0254885088905010501020105010881306 +6822:100013FE10201020FC4011FC31043904550455FC910411041104110411FC1104 +6823:10801088109C1170FD1013103510391055FE55109110111011101110117C1100 +6824:2020242022202220F83221B220B472A86AA8A4A8A52429242A22202020A02040 +6825:0100410021FC0A441448E0A02110260801000100FFFE054009203118C1060100 +6826:1082109210921092FC92109232DA3AB654925092909210921092111211021202 +6827:1020102011FC1124FD2411FC3124392455FC542090241018103210CA13061002 +6828:101010101210113EFD2210443810349050905310912811281128114410441082 +6829:100013DE10421042FE52114A314A384254C6514A9252104210421042114A1084 +682A:10201120112011FCFD20122030203BFE547054A890A811241124122210201020 +682B:10401040104017FEF8801080317C39085710551091FE11101110111011501120 +682C:1040104010F81108FA1011FC31243924552451FC910011001102110210FE1000 +682D:100013FE10201020FC4011FC3154395455545554915411541154114411141108 +682E:100013FE11081108FD0811F83108390855F855089108111E17E8100810081008 +682F:1040104017FE1080FD0013FC3504390455FC5504910411FC1104110411141108 +6830:10A810A410A41120FD2E13F03520392455245524912811101132114A11861102 +6831:1088108810881088FDFE108830883888548853FE900010881084110412021402 +6832:1040104411F41048FC5013FE3040388055FE5240948010FC1004100410281010 +6833:10401040104411F4FC48105033FE384054805584929814E010821082107E1000 +6834:1080108010FE1100FA0010FC308438A45494508493FE10841084110411141208 +6835:1002100217E2110AF90A11EA312A3A2A572A52AA944A104A10821102120A1404 +6836:100013FC12041244FE44124433FC3A44564452A4929413141204120413FC1204 +6837:1104108410881000FBFE1020302039FC5420502093FE10201020102010201020 +6838:10201010101013FEFC201042308439F85410542290C413081010102810C41302 +6839:100013F812081208FBF8120832083BF856445248923012201210128813061200 +683A:11001104113811C0FD02110230FE380055FC5504910411FC1104110411FC1104 +683B:1028102410241020FBFE102030203BA0552051109110111011CA170A12061002 +683C:1080108010F81108FB1014A0304038A05518520695F811081108110811F81108 +683D:084008487F4408440840FFFE004008440844FF4418282C2A2A12492A88460882 +683E:02000100FFFE0440145014482444444400000100FFFE054009203118C1060100 +683F:1090109410921112FD10137E3110391055105528912811281128114411441182 +6840:101010103EFC4210A490149008FE101020104110FFFE054009203118C1060100 +6841:10801080113C1200FC801080317E3B0855085508910811081108110811281110 +6842:1020102011FC1020FC20102033FE38005420542091FC10201020102013FE1000 +6843:1090109010901292FD941098309039985694549290901090111211121212140E +6844:10201020112410A4FCA8102033FE3890549054909090109211121112120E1400 +6845:1040104010FC1104FE0811FE3100397C554451449154114811421242123E1400 +6846:100011FE11001100FDFE11103110397C55105510911011FE1100110011FE1000 +6847:10001000FE7C224442443444087C3400C3000100FFFE054009203118C1060100 +6848:01007FFC40040400FFFE08201E4003C03C380100FFFE054009203118C1060100 +6849:10401020102013FEFE02144430403BFE54885488910810D01020105010881304 +684A:0100111009203FF8020002007FFC082011102108DFF6030005C0193061080100 +684B:1020102013FE1020FDFC102431FC392055FE5422902A10541050108811041202 +684C:0100010001FC01001FF810081FF810081FF80100FFFE054009203118C1060100 +684D:1020102013FE1050FC88110432FA380057FE5440908011FC1004100410281010 +684E:100013FE10201040FC88110433FE38225420542093FE10201020102017FE1000 +684F:1000101E13F21092FC941094309838945492549290F2171A1214101010101010 +6850:100013FC12041204FEF4120432043AF456945294929412F41204120412141208 +6851:1FE0064001800E4000007CF82448183066CC01007FFC054009203118C1060100 +6852:010001007FFC010009200820FFFE082009200100FFFE054009203118C1060100 +6853:100013FE10001000FDFC1104310439FC5504550491FC11041000100013FE1000 +6854:10201020102013FEFC20102031FC3800540055FC910411041104110411FC1104 +6855:10001040119C1104FD041104310439DC5504550491041104110411FC11041000 +6856:1020102010401080FDFC11543154395455545554915411541154115413FE1000 +6857:100013F810881090FCBC110439143648504057FE904010E01150124814461040 +6858:1040108011F81108FD08110831F839005500550091FC11041104110411FC1104 +6859:1040104010901108FBFC10243120392055FC5220902017FE1020102010201020 +685A:1124112412481124FD241000308038FC55045184924814281010102010C01300 +685B:08200820083E0820FE2009FE18001C002BFE2A20482888240822082008200820 +685C:1040102412241108FD0810103040384057FE5488910811901060105011881604 +685D:2208220822082388FABE228824A874A86AA8A128A13E21082208220824082808 +685E:21002100211E21D2FA542254225875546892A092A112211A2214241028102010 +685F:10501048107E13C0FC40107C3BC03440507E53C090441028103210CA17061002 +6860:100011FE10481048FC4810483248394A554A554C904810481048104813FE1000 +6861:1080108010BC13C0FC50102430D43B0C540053FE9090109011121112120E1400 +6862:10201020103E1020FC2011FC3104392455245524912411241050104810841104 +6863:1020112410A410A4FCA8102033FC38045404500491FC10041004100413FC1004 +6864:1020112411241124FDFC100031FC3804540455FC910011001102110210FE1000 +6865:2010207823C02040F84027FE20A071106A08A516A11021102110221022102410 +6866:1090109411141118FB1015323152390E5520502093FE10201020102010201020 +6867:1020102010501088FD04120238F83400500053FE902010401088110413FE1102 +6868:0840484028FC09041A882850486089800100FFFE0380054009203118C1060100 +6869:10201010101011FEFD00111031103910557C5510911011101110121012FE1400 +686A:100013FC10041004FDFC100430043BFC5408500897FE11081088108810281010 +686B:2010221021102110F4542252225270906810A114A604220822082210222020C0 +686C:1020082040A824A409227228103010C007000100FFFE054009203118C1060100 +686D:100013FC12001200FEF8120032003BFC56A052A492A812901290148814A418C2 +686E:100013FE10101020FC6810A433223820540055FC910411041104110411FC1104 +686F:100011FC11041104FD0411FC3000380057FE5420902011FC1020102013FE1000 +6870:101C13E012201220FBFE122032903B0A560651FA910811081108110811F81108 +6871:100013FC10001124FA48149032483924540053FC904010401040104017FE1000 +6872:1020102013FE1020FC2013FE3A02340451F85010902013FE1020102010A01040 +6873:10401080110413FEFC22102033FE385054885124922211FC1020102010201020 +6874:1008103C11C01004FD4410A8300039F85410502093FE10201020102010A01040 +6875:2008203C23C02044FA242128210070406BFEA088A10823902060205021882604 +6876:200027F8201021A0F84027FC244474446FFCA444A44427FC2444244424542408 +6877:1080108010F81108FA1015FC3124392455FC5124912411FC1124122412141408 +6878:11841068103010C8FB04104033FE38A0552053FC952411241134112810201020 +6879:1040102011FC1104FD0411FC3104390455FC5520912211141108114411821100 +687A:100013FE10501050FC5013DE32523A525652525293DE10501090109011101210 +687B:210021F823082490F8602198264670406BF8A040A3F8204027FC204020402040 +687C:010001007FFC092011102108C284044009203118CB2605C01930610805000200 +687D:010001007FFC05401930E10E082009201550238801003FF801000100FFFE0000 +687E:100011FC10441044FBFE1044304439FC5480508091FC12841484108410FC1084 +687F:100011FC110411FCFD0411FC3000380055FC5420902013FE1020102010201020 +6880:1020102013FE1020FC2011FC3124392455FC5420907010A81124122210201020 +6881:000023F01090829452922492E110225025200100FFFE054009203118C1060100 +6882:1028102410241020FDFE1020312038B254B4546890A811241222102010A01040 +6883:2000200C27702110F9102210327C6F106110A510A510227C2200250028FE3000 +6884:100013FE10501050FDFC115431543954558C5504910411FC1104110411FC1104 +6885:1100110011FC1200FDF811083948352857FE51089248122813FC100810501020 +6886:2100211E21122FD2F114211427D871146912AFD2A112211A2214221024102810 +6887:100013FE10201020FDFC102030203BFE5488508893FE10881088110811081208 +6888:1040102013FE1000FDF81108310839F8540053FC900810301020102010A01040 +6889:1048114811481148FD4811C8307E384857C851489148114811481148125C1440 +688A:080C08F07E8008800EFE78880888290812080100FFFE054009203118C1060100 +688B:100011F811081108FDF8100033FC3A04560453FC9204120413FC120412141208 +688C:1020102010501088FD0412FA3020382057FE5420912811241222142210A01040 +688D:1020104011FC1104FD0411FC3104390455FC54409040107E17C010421042103E +688E:1020104011FC1104FDFC110431FC38005500550C91F011001102110210FE1000 +688F:10201120112011FCFD20122030203BFE5400540091FC11041104110411FC1104 +6890:12201224122813B0FE20122232A23B1E5440504093FC10401040104017FE1000 +6891:2010289025102212F5522954215871906B10A528A9282128214821442A842502 +6892:1020102010501088FD44122230F838085410542091FC11041104110411FC1104 +6893:1040102011FC1000FC88105033FE38205420542091FC10201020102010201020 +6894:1008101C11E01100FDFE1100317C3954555455549154117C114012421242143E +6895:100013FC10441144FD441284389435085240502090A41282128A128A14781000 +6896:080008FC08840884FEFC088418841CFC2A842A8448FC88000848084408820902 +6897:100013FE10201020FDFC1124312439FC5524552491FC112010A0104010B0130E +6898:100011FC11041104FDFC1104310439FC5504550491FC1050105010921112120E +6899:1020102011FC1124FD2411FC3020382057FE5222922213FE1222102010201020 +689A:1080108011F81208FC1013FC32443A44564453FC90A010A011221122121E1400 +689B:20002FDE22522252FA5427D432586A546252AFD2A252225A2254245025502890 +689C:10201020102013FEFC20102039243524512452AA902010501050108811041202 +689D:0840084010FC10883550542094D81726142015FC142014A81524122210A01040 +689E:100011F810081008FDF811003104390454FC5440902010A4128A128A14781000 +689F:04001FF010101FF010101FF010001FFC10001FFC01043FF405481930E10E0100 +68A0:100011F811081108FD08110831F83800540053FC920412041204120413FC1204 +68A1:1040102013FE1202FC0411F83800340053FE50909090109011121112120E1400 +68A2:1020112410A410A8FC2011FC3104390455FC5104910411FC1104110411141108 +68A3:1020112411241124FDFC10203050388855445222902011F81008101010101020 +68A4:1020112411241124FDFC100030883888550452FA904810481088108811281210 +68A5:020001007FFE48229214244808201FF001100100FFFE054009203118C1060100 +68A6:082008207EFC08201C702AA8C826040007F0081014202240018002000C007000 +68A7:100013FE10401040FDFC108430843BFE5400500091FC11041104110411FC1104 +68A8:03083C0804487F480C4816482508442805100100FFFE054009203118C1060100 +68A9:100011FC11241124FDFC1124312439FC5420542091FC10201020102013FE1000 +68AA:100013FC10001000FDF811083108390855F85400910810881090100017FE1000 +68AB:100011FC100410FCFC0411FC380037FE520251F8908810881050102010D81306 +68AC:1020102011FC1124FDFC112431FC380057FE5480910011FC1004100410281010 +68AD:1040104010881104FBFE100230883944564250F8918812501020105011881606 +68AE:100011FC11041104FDFC1100310039FE5502557A914A114A127A120214141008 +68AF:11081088109011FCFC24102431FC3920552051FE906210A2112A122414201020 +68B0:1010101410121010FBFE10103150395457F4515491541148124A125A14261042 +68B1:100013FE12221222FE2213FE32223A62567252AA932212221222120213FE1202 +68B2:1010109010881108FA0415FA31083908550851F890901090109011121212140E +68B3:1040102013FC1040FC90110833FC38045550515091501150125012521452180E +68B4:1004100E13B81088FC881128312E3BA854A852A892A8113E11001280147E1800 +68B5:082008207EFC08201C702AA8C82600000FE0082008200A20092011222022401E +68B6:100013FC12041204FBFC120032183AE0563852E0923C13E012221422141E1800 +68B7:100010FC1E0410487E28421042287EC401000100FFFE054009203118C1060100 +68B8:208421C427042114F914211427D471146B14A394A55425042904210421142108 +68B9:1008101C11E01100FD0011FE311039105510511097FE10001090110812041402 +68BA:082008207EFC08201C702AA8C8260000FFFE0200024002200210020802000200 +68BB:22502250225025FCF4542C5435FC75506D50A5FEA4522452245A249424902510 +68BC:1020102013FE1020FDFC104033FE3848548854FE910811481228140810281010 +68BD:10201020102013FEFC201020302039FC5440542090A41282128A128A14781000 +68BE:10201020102013FEFC20112430A438A855FE547090A810A81124122214201020 +68BF:101012101110117EFC2010283748397E5508550891FE110811081288147E1000 +68C0:1040104010A010A0FD10120835F6380054885048924811501110102017FE1000 +68C1:1104108410881010FDFC11043104390455FC54509050109010921112120E1400 +68C2:100013F810081008FDF8100830083BF8544051489148125010A0111012081406 +68C3:0C8070FC1124FD24122438445484912810100100FFFE054009203118C1060100 +68C4:020001007FFC10103FF801081110FFFE11101FF001007FFC05401930E10E0100 +68C5:207823C0204027FCF84023F8204877FE6848A3F8A0E0215022482C4620402040 +68C6:1020102010501088FD0412FA300039FC5554555491FC1154115411541104110C +68C7:1090109011081148FA44149231083BFC5444502090A41282128A128A14781000 +68C8:1020102013FE1020FDFC102033FE380055FC550491FC110411FC110411141108 +68C9:1020104011FC1104FDFC110431FC3820542053FE92221222122A122410201020 +68CA:08207FFC08200FE008200FE00820FFFE11102108DFF6030005C0193061080100 +68CB:1108110813FC1108FD0811F83108390855F85108910817FE1000109011081204 +68CC:2008203C23C02044FA242128210070206BFEA070A0A820A82124222224202020 +68CD:100011FC11041104FDFC1104310439FC5400551291D41118111011521192110E +68CE:100013FE12021252FC8811043020382057FE5420907010A81124162210201020 +68CF:100011FC110411FCFD0411FC300039FE540853FE900811081088100810281010 +68D0:044004407C7C04403C7804407C7C044005400100FFFE054009203118C1060100 +68D1:109010901090179EF890109030903B9C549050909090179E1090109010901090 +68D2:1020102013FE1020FDFC104033FE38885524522290F8102013FE102010201020 +68D3:1080104011FC1000FD08108830903BFE5400540091FC11041104110411FC1104 +68D4:101C13E0122013FEFE201292330A3A0655FC5104910411FC1104110411FC1104 +68D5:1040102013FE1202FC0011FC3000380057FE5420912811241222142210A01040 +68D6:100010FC108010F8FC8010F830803BFE55405524912811101108114411821100 +68D7:01007FFC01003FF823880D60301001007FFC01003FF82108238805601918E106 +68D8:10201020FDFC102010207CF854A854A854A85CB81020387054A8952610201020 +68D9:1040102013FC1204FE0413FC32003A28562453FE922012501250148815041A02 +68DA:100013DE12521252FE5213DE32523A52565253DE9252125212521252155218A6 +68DB:1040102013FE1080FD0413FE300239FC550455FC910411FC1104110411141108 +68DC:21082088200827D4FA142222220073C86A44A244A24022502248244425442880 +68DD:100011FC11041124FD2411FC3124392455745554915411741104110411FC1104 +68DE:100013FE1202121AFEE2122232223BFE5622527292AA13261222122213FE1202 +68DF:1020102013FE1020FDFC112431FC392455FC5420907010A81124162210201020 +68E0:0100111009207FFE40029FF4101010101FF00100FFFE054009203118C1060100 +68E1:100013FE1202128AFE5213FE32223A2256AA52AA92AA12FA12021202120A1204 +68E2:100013FE1202128AFE5213FE32423A2257FE52829282128212FA1202120A1204 +68E3:1020102011FC1024FC2413FE3824342451FC5222917410A81124122210A01040 +68E4:10881088108813FEFC88108837FE380055FC5104910411FC1104110411FC1104 +68E5:2088248822882108F93E22882498701C68ACA2AAA14821082288228824882808 +68E6:1080108011F01210FC2013FC3044384457FE5444904413FC1044104011401080 +68E7:10481044105E11E0FC281012306A39965448545E91E0102410281012106A1186 +68E8:102008203E3E224422843E282210402881440100FFFE054009203118C1060100 +68E9:1050125212521252FBDE120232023BFE5602520293DE12521252125214521802 +68EA:1020112211221224FC5010883304382254205524912412281050108811041602 +68EB:10141012101017FEF810101033D23A525652525493D4100810EA171A12261042 +68EC:1020112410A81020FDFC104033FE3888550452FA9488108810A810921082107E +68ED:2080204027FE2120F920223C224476646A94A348A24822302220225022882306 +68EE:010001007FFC054009203118C106082008207EFC08301C682AA4C92208200820 +68EF:1020102010501088FD44122231F838085450542090A41282128A128A14781000 +68F0:2010207823C02040F84027FC224872486FFEA248A24827FC2040204027FC2000 +68F1:1020102011FC1020FC2013FE30883944564254F8918812501020105011881606 +68F2:1020102013FE1020FDFC102433FE382455FC504093FE108411C8103010CC1302 +68F3:100013DE1042114AFC84114A3A523420500053DE905211521094114812541422 +68F4:200027BE24A224A2FCAA27A424A074BE6CAAA7AAA4AA24AA24A424A424AA29B0 +68F5:100011FC11241124FDFC1124312439FC542053FE907010A81124122210201020 +68F6:10401040104017FCF840124832483A48555450E0915011501248144418421040 +68F7:20002FC024BC24A4F4A427A424A474A86FA8A4A8A49025D02EA820A820C42082 +68F8:00007F00227C3E0422283E1023A8FE4402000100FFFE054009203118C1060100 +68F9:10201020103E1020FDFC110431FC390455FC5524902013FE1020102010201020 +68FA:1040102013FE1202FC0411F83108390855F85500910011FC1104110411FC1104 +68FB:0820FFFE08200460081037E8C22404A018400100FFFE054009203118C1060100 +68FC:082008207EFC08201C702AA8C8240440082010102FE8C4260420082010A06040 +68FD:082008207EFC08201C702AA8C92402800E603118C1061FE00020004000800100 +68FE:082008207EFC08201C702AA8C82600007FFE40028FE40820082010222022C01E +68FF:10001040139C1204FE04139C32043A0457FC549090901090109011121212140E +6900:1040102013FE1202FD04110031DE3A5256525352949A1094111011121212140E +6901:1040102013FE1000FDFC110431FC380055FC5408901013FE1020102010A01040 +6902:100011F810081008FDF8100830083BFE54205222917410A81124122210A01040 +6903:10401040107C1040FBFC124432703BC05644523C920012F0149014921912120E +6904:1080104013FC1000FD08109037FE3840544057FE908811081090106011981604 +6905:2040204023FC20A0F910220827FE70086BC8A248A248224823C8200820282010 +6906:100011FC11241124FD74112431FC390455745154915411741104120412141408 +6907:100011F811081108FDF8110831F8390855F85108910817FE1000109011081204 +6908:1100110011FC1204FC84149432A4388457FC508491C412A41494108410A81010 +6909:02000100FFFE10103EFC4210149018FEE0100110FFFE054009203118C1060100 +690A:1040102013FE1000FC88108831543A225400502093FE10201020102010201020 +690B:1040102013FE1000FC0011FC3104390455FC5420912811241222142210A01040 +690C:10401020102013FEFA02149431083A04540051FC902010201020102017FE1000 +690D:1020102013FE1020FC2011FC310439FC550455FC910411FC1104110417FE1000 +690E:10A01090109011FEFD10131035FE3910551055FE91101110111011FE11001100 +690F:100017FE10901090FC90139C32043A045604539C909010901090109017FE1000 +6910:100013FC12041204FBFC122032203BFE5620522092FC12841284148414FC1884 +6911:1040108011FC1124FD2411FC3124394455FC5490911013FE1010101010101010 +6912:2100210021DC2114F914211427D470146914A114A58825482948211425142222 +6913:100013FE10401080FD44122430683AB0553052A8906810A41122122010A01040 +6914:1092109211241248FD2410923092380055FE5522912211FE1122112211FE1102 +6915:2008208822882288FABE24482018779C6AACA2AAA2C822882288248824882988 +6916:1040102011FC1104FD0411FC3120391055FE55209120113C1124124412541488 +6917:1040102013FE1202FC04100033FE382054205520913C112012A01260143E1800 +6918:082008207EFC08201C702AA8C824020001007FF8006001800E003000480087FE +6919:11F81108110811F8FD08110831F8380057FC5204920413FC1204120413FC1204 +691A:100013DE12521252FBDE125232523BDE560252029202120212021202120A1204 +691B:1108110817FE1108FD08100038903492511453189510113211521112110E1100 +691C:1020102010501088FD0412FA3020382055FC5524912411FC1050108811041202 +691D:100011FC7D0411241124FC5010902912460E8100FFFE054009203118C1060100 +691E:080C08F07E8018802CFE2A884888888809080100FFFE054009203118C1060100 +691F:1020102011FC1020FC2013FE3002389454505510909013FE1028104410821302 +6920:100CFEF0208048807EFE08880E88F9084A080100FFFE054009203118C1060100 +6921:1002100217E2110AFD0A124A33EA388A548A53EA908A108A10E21702120A1004 +6922:100013FE12021202FBFE122232223AFA56225232922A13FE1202120213FE1202 +6923:10901090109013FCFE94129432943BFC56945294929417FE1000109011081204 +6924:100013FE12521252FE5213FE3020384054FC5104928810501020104011801600 +6925:11001100110013DEFA9214923092389257F2509290921152115E122014201800 +6926:1020112410A81020FDFC104033FE38885544524295F810481088108811281210 +6927:1020102010501088FD0412FA30003BDE56525252925213DA1254101010101010 +6928:1040102013FE1200FE44124432843ABE578452A4929412941284128414941088 +6929:1040102013FE1220FEFC122432243BFE5624522492FC12201250145014881906 +692A:10841048100011FEFC48104830483A48554A554C904810481048104813FE1000 +692B:11041088105011FCFD24112431FC3924552455FC9020102013FE102010201020 +692C:1040102013FE1202FC0411F83108390855F85508910811F81108110817FE1000 +692D:201027902490257EFD202620257C74A46CA4A4BCA6A4253C242424242424242C +692E:10401048108411FEFC2013FE3088392456425188901010621184101810601380 +692F:1020112411241124FDFC100033FE3820544055FC91541154115411541154110C +6930:20002FDE24922492F4942794249874946F92A492A49225DA2E94209020902090 +6931:1100110011FE1200FDFC110431FC390455FC548090FC11081290106011981606 +6932:1040104011FC1084FBFE100031FC390455FC502093FE1020122013FE10201020 +6933:100011FC11241124FDFC1124312439FC540053FE912011221114114811841102 +6934:102011DC11141114FD1411D43126390055DC5514911411D41708110811141122 +6935:100013DE12421242FE4213DE32003A3E57D25212921413D41208121412241242 +6936:1000108812521222FE52128A32023BFE54885144927A10881150102010D81706 +6937:20142012201027FEFC10241025D074126C12A5D4A554254825DA242A28463082 +6938:22102110211027BEFA28224823AA72AE6ABAA2EAA2AE22A824AA24A229A2301E +6939:1110111017FC1110FDF0111039F03510511057FE920012901308120013FC1000 +693A:2100217C21442244FA44267C2A1072106AFEA238A25422542294231222102210 +693B:100013FE120012FCFE8412FC32843AFC562053FE924812C812301248128413FE +693C:1080108E11201210FCC010AE31043B1455245164912411241124110411141108 +693D:210021F8220823F0F81027FE208071446E68A0B0A128266820A4212226A02040 +693E:11081088109017FEF80013C432543A5457D45254925413D412541244125412C8 +693F:1020102013FE1020FDFC104033FE3888550452FA9088108810F81088108810F8 +6940:1004101E13E01020FDFC1124312439FC542053FE9222122A12FA1202120A1204 +6941:1040102013FE1202FC8010F831083A9054605198960611F81108110811F81108 +6942:1020102013FE1070FCA81124322239FC550451FC910411FC1104100013FE1000 +6943:100013FC12041204FBFC120033FC3A40568853FC9224122015FC1420182013FE +6944:1040102013FE1202FE0213FE32003A0057FE5352955215FE1552155219521106 +6945:100013FE100011FCFD04110431FC380057FE5222922213FE1222122213FE1202 +6946:100013FE10501050FBFE125232523BFE5400504097FE10881190106010D81304 +6947:100011FC11041104FDE4112431243BFE560252FA928A128A12FA1202120A1204 +6948:100013FE10221120FD3C11203AFE340051FC510491FC110411FC110411141108 +6949:1088108813FE1088FCA8102033FE3840548054FC918412841084108410FC1084 +694A:100011F8110811F8FD0811F830003BFE550051FC925414941124124410A81110 +694B:1082108217F21082FC8A13EA32AA3AAA57EA508A91CA12AA14A21082108A1084 +694C:1040102013FC1000FD08109033FE3A10562052C89210122412C8141014601980 +694D:010001007FFC0380054009203118C10600007BBC4AA44AA44AA44AA47BBC4AA4 +694E:100013FE12221020FDFE102031FC392455FC552491FC102013FE102010201020 +694F:1020102013FE1050FC88132631FC3820542053FE9000102011FC1020102013FE +6950:11FC1124112411FCFD24112431FC385054885104928A10881088108811081208 +6951:101013D410581252FD8C108831043AFA5420502093FE10201050108811041202 +6952:100011FC11241124FDFC1124312439FC54005440902412A2128A148810781000 +6953:200027FC24042434FDC4244425F475546D54A5F4A444245425F4249428063002 +6954:2100213C27D42114FB94211427D47124694CA040A7FE204020A0211022082C06 +6955:1040104013FE1080FDFC122035FE380055FC550491FC110411FC110411141108 +6956:100013DE12521252FE5213D232523A52565253D2921A1294125012B013101010 +6957:2020202020FC2E24FBFE222424FC74206EFCA220A2202BFE2420262029FE3000 +6958:00207E20247E1884FF2829104A2899440100FFFE0380054009203118C1060100 +6959:2008278820882288F93E210827D8715C6B2CA32AA54825082908210825082208 +695A:082008207EFC08201C702AA8C82400007FFC0104110011F81100290047FE8000 +695B:1088108813FE1088FCA8102033FE38205420542091FC11041104110411FC1104 +695C:2100211E211227D2F912211E211277D26C52A45EA45227D224522022202A2044 +695D:1020102013FE1020FDFC112431AC3974552455FC9020107010A8112412221020 +695E:100013FC12941294FE9413FC3080384057FE548090F810881108110812281410 +695F:1040102013FE1000FDFC110439FC340053FE520291FC10201020102010A01040 +6960:1020102013FE1020FC2013FE328A3A5256FA5222922212FA12221222122A1204 +6961:11C010A011101208FDF6100033CA3A4A565453D49268125413D4124A124A12C0 +6962:11081088109017FEF890109033FC3A945694530C920413FC1204120413FC1204 +6963:100013FC12241224FBFC120032FC3A84568452FC928412FC1284128414FC1884 +6964:1080108010FC1154FAD410B4312C3A4454945108904010A412AA128A14781000 +6965:103C17C012441128FC0013FC3080388057FE550091F812881250142018D81306 +6966:1040102013FE1202FC0411FC300039FC550455FC910411FC1104100013FE1000 +6967:2110211027FC2110F950204023F872486A48A248A7FE204020A0211022082406 +6968:10201020103E1020FC2011FC310439FC550455FC910411FC1000108811041202 +6969:210021FE21102210FAFE2292269272FE6A92A292A2FE22902250222022582286 +696A:10481148114813FEFD4811483178390055FE542093FE107010A8112416221020 +696B:100011F811081108FDF8100037FE390855F8550891F81108113E17C810081008 +696C:100011FC110411FCFD0411FC388035FE522251229152110211FA100210141008 +696D:044024481450FFFE082004407FFC01003FF80100FFFE054009203118C1060100 +696E:1020102211FA1024FC2813FE3020384054FC5184928410FC1084108410FC1084 +696F:201C23E022202220FBFE222022FC72846A84A2FCA28422FC2484248428FC2084 +6970:1020102010A0112CFD24112431AC3924552455FC912410501050108811041202 +6971:2040204027FC2040FBF8208027FC71106A08A5F6A04023F8204020A021102608 +6972:2014201227FE2410FC1027F0249274926FD2A554A5542488254A2A1A28263042 +6973:1088108813FE1088FC8810F83088388854F8542093FE107010A8112412221020 +6974:1040102011FC1000FC88105033FE3A22542455FC912411241134112810201020 +6975:100013FC10081010FC2013AE32A23AAA56A452A493AA103210A0104017FE1000 +6976:410021FC0A441048E0A0211026081FF410101FF001007FFC05401930E10E0100 +6977:1110111211D41118FD521192312E384055FC5104910411FC1104110411FC1104 +6978:208821C827082108F92A212A27AC71486B08A388A55425142914212421242142 +6979:100013F811081110FD1C12E432A43A5454A8510093FC12941294129417FE1000 +697A:100010FC10481030FDFE1052389435105230502091FE107010A8112412221020 +697B:1020104011FC1104FDFC110439FC340053FE5020902011FC1020102013FE1000 +697C:2020212420A82020FBFE20A8212472026840A7FEA08821082190206021982604 +697D:0100420427C81450044017D02448C44407C00100FFFE054009203118C1060100 +697E:1040108011FC1104FDFC110431FC3820543253B490A811281124122414A21040 +697F:101C11E010201020FBFE10A831243A2255FC5104910411FC1104110411FC1104 +6980:100010F810881088FC88108830F83888540053DE925212521252125213DE1252 +6981:1040102011FE1102FE0411FC3040388855FC5424902011FC1020102013FE1000 +6982:200027BE24882488FFA824A824A877BE6C10A518A49825A826AA244A20462080 +6983:082008207EFC08201C702AA8C82600003FF8210821083FF8210821083FF82008 +6984:10901290129E12A8FEC4108031FC39045524552491241154105010901112160E +6985:100011F811081108FDF81108310839F8540053FC929412941294129417FE1000 +6986:104010A011101208FDF6100033C43A54565453D49254125413D41244125412C8 +6987:1040102011FC1000FC88105033FE3820542055FC902010A81124122210A01040 +6988:110010BC12841204FEF4129432943AF4560452F49294129412F4120412141208 +6989:1044112410881010FBFE108831243A2254F85020902013FE1020102010201020 +698A:120811081108103EFBAA10AA30BE392A55AA536A953E112A1108110811081108 +698B:100011FC100410FCFC0411FC3004380057DE5442904213DE1042104213DE1042 +698C:100013FA100C104AFB88112A3126392257F8512A912C112A1128122A12261422 +698D:200023FE22022202FBFE2210229272546AFEA282A2FE228222FE2482248A2884 +698E:13FE104011FC1104FDFC110431FC390455FC548090FC11081290106011981606 +698F:1104108410881000FBFE100030883904560251FC915411541154115417FE1000 +6990:100013FC12041204FBFC124832483AFC5648524893FE12A412A8149014C81886 +6991:1028102413FE1020FDFC112431FC392455FC5524900813FE1088104810481018 +6992:100013DE10421042FBDE121032103BDE54425252914A114A1252104212941108 +6993:20402028209022A4FAC2248A218876786800A3FCA29422942294229427FE2000 +6994:1100109E13D21252FE5413D432583A5457D252129292125A12D4135012101010 +6995:1040102013FE1202FC501088312438505488510492FA10881088108810F81088 +6996:08007F7808483E4800487F864100BEFC004408447E2818282C104A2888440982 +6997:100013FC10901294FD98109037FE380055F85508910811F81108110811F81108 +6998:200020FC3E8048F888887EF8148022FC40000100FFFE054009203118C1060100 +6999:1088108813FE1088FC2010503888350452FA5000900011FC1104110411FC1104 +699A:1104108410881000FBFE1020302039FC5420502093FE100012A4125214521000 +699B:1020102013FE1020FDFC10403BFE3488513452E2902011FC107010AC13221020 +699C:1040102013FC1108FC9013FE32023C44542053FC908010F81088110811281210 +699D:2000245C22942114FA942454212671006FDCA114A59425542948210825142222 +699E:100011FE11101120FD7C1144317C3944557C5510911011541152129212501420 +699F:1040102013FE1242FC2011FC3088385057FE5020902011FC1020102010201020 +69A0:100013FE12021000FDFC110431FC390455FC5440902013FE1000108811041202 +69A1:1020102013FE1020FDFC102033FE3840548855F0902413FE1022112412A21040 +69A2:1040102013FE1202FC0011FC304038A257345458909413341052109013501020 +69A3:1008103C13C01004FA44112831FC3A20542053FE902011241124112411FC1004 +69A4:2208220823BE2488FAA8213E220874486848A7FCA0E0215022482C4620402040 +69A5:100011FC110411FCFD0411FC3020392454A8502093FE1090109011121212140E +69A6:102010201050FE5010887D0446227C2045FC7C601070FEA810A4112412201020 +69A7:100013FE12281228FEEE122832283AEE5628522892EE12281228122813FE1000 +69A8:1040102013FE128AFD04108030FE39405640507C90401040107E104010401040 +69A9:1040107C104013FEFE42127833C43A3C5640522093FE12881250142014581986 +69AA:100011FE112011FCFD2011FC3120392055FE500292AA12AA12AA120210141008 +69AB:10A0109011FE1320FDFC112031FC392055FE5500902013FE1020102010201020 +69AC:1020102011FC1020FBFE100031FC3904550451FC90521094118816A410C21080 +69AD:2084210423C42244FBDE224433C46A646254A7D4A0C421442244244421542088 +69AE:08202AA44D28145022887FFE4002810401007FFC0380054009203118C1060100 +69AF:201020102710257CFD10251025FE77086D08A5FEA50825482728200820282010 +69B0:1040104411F81050FBFE104030F83982567E540091FC110411FC110411FC1104 +69B1:2080204027FE2000FBF822082FFE72086BF8A0A4A12823102510294821862100 +69B2:200023F8224822A8FB18220823F870006800A7FCA4A424A424A424A42FFE2000 +69B3:2040202023FE2202FAEC2224224472446AEEA224A2A422A4224E2460249E2900 +69B4:104013BE12121292FE5212AA3324384057FE5222922213FE1222122213FE1202 +69B5:1108110817FE1108F80017FE310839F8550851F89108113E17C8100810081008 +69B6:1020101013FE1220FAFC122433FE3A2456FC522092FC12841284148414FC1884 +69B7:1080108017FE1522FD1013FC36203A2057FC5220922013FC1220122013FE1200 +69B8:1100113E112A112AF93E17AA312A393E55085108913E118817081208107E1000 +69B9:1004101E13F0121EFE1012FE32923A9856F2528E928012B812A814AA154A1A86 +69BA:00203D2424A8242025FC3C4027FE248825243E2225FC247024A8452456248820 +69BB:100011FC110411FCFD0411FC3800340053DE50429252114A12521042114A1084 +69BC:1020102011FC1020FC2013FE3080390457FE540293FC12941294129417FE1000 +69BD:103C17C012441128FC80111033E03840558853FC9044104017FC10A01110160E +69BE:100011FC110411E4FD2413FE320239FC550455FC910411FC1104110411141108 +69BF:1020112411241124FDFC100033FE380055FC5504910411FC1088105013FE1000 +69C0:0100FFFE00001FF010101FF000007FFC40044FE448244FEC0100FFFE0920711C +69C1:1040102013FE1000FDFC110431FC380057FE520292FA128A12FA1202120A1204 +69C2:20062F7821102120FA44227833106A24667EAA12A2102254225222922A502420 +69C3:10003E7822482A48FE8623782A4842304A48848401007FFC05401930E10E0100 +69C4:103C13C010441224FD28110030403B9C56045204939C12041204120413FC1204 +69C5:100013FE100011FCFD04110431FC380057FE528A925213FE12221222122A1204 +69C6:1110111017FE1110FA0013FC34043BE4562453E4922413E41224100410281010 +69C7:111811E0110210FEFC00117C3144397C5544557C9144117C110011FE10881104 +69C8:100013FE120012FCFE0013FE32A83A9056C85286920813FE1288144814081818 +69C9:1020101011FE1100F9201520333C39505590531095FE11101128122812441482 +69CA:2200147CFF44087C4944497C7F44084410942108FFFE054009203118C1060100 +69CB:1088108813FE1088FDFC108833FE382055FC552491FC112413FE110411141108 +69CC:10101220117C1144FC44107C33403940557C55449144117C11441280147E1000 +69CD:10201020105010C8FD2413FE350439FC550451FC910011FC1284128414FC1084 +69CE:11081088109013FCFC4011F830403BFE5480550091FC12201420182013FE1000 +69CF:10881050100013FEFC5011FC30543BFE545455FC905010D81154125210501050 +69D0:1020104011FC1124FD2411FC3124394455FC544090B010A4113C11221222141E +69D1:00007CF84488448844887CF810201020FDFC307038A854A85124922210201020 +69D2:1040102013FE1040FC8811F03020384455FE540291FC112411FC112411FC1104 +69D3:100011FC10201020FBFE100031FC390455FC510491FC110411FC108811041202 +69D4:1040108013F81208FBF8120833F8388057FC5110924814441BFA104010401040 +69D5:10201020103E1020FDFC110431FC390455FC502093FE107010A8112412221020 +69D6:01007FFC01001FF000007FFE4002BFF408001FF068100FF00100FFFE0920711C +69D7:1040104017FE1080FDF8128834F8380057FE520292FA128A12FA1202120A1204 +69D8:1104108813FE1020FDFC102033FE3820552454A8907010A81124162210A01040 +69D9:1020102013FE1020FDFC110431FC390455FC550491FC110413FE108811041202 +69DA:100013FE105013FEFE52125233FE380055FC5504912411241124105010881304 +69DB:10481148114E1150FD68114431443840540055FC915411541154115417FE1000 +69DC:10A0109011FE1320FDFC112031FC392055FE510093FC1088109E1102120A1404 +69DD:1020104011FC1104FDFC110431FC390055FE550091FE1042124A13FA10141008 +69DE:1080104017FC1110F8A017FE30003BF8564853F8924813F8124A1042103E1000 +69DF:1040102013FE1202FC1411E03100390055FC5110911017FE1000109011081204 +69E0:2020242022FA2224F82821FE2E2072406AFCA344A244227C22C42344227C2044 +69E1:11F810881070118CFC0013DE3252398C5652502093FE107010A8112416221020 +69E2:100013DE10421252FD4A12523042382055FC5504910411FC1104110411FC1104 +69E3:1040102013FE1202FC2011FC3050388857FE540891E8112811E8100810281010 +69E4:1010101012FE1110FD7C1054307C3B54557C511091FE111011101290147E1000 +69E5:108813DE108811DCFC8813DE3888340053FC5004900411FC1004100413FC1004 +69E6:202027FE242025FCFC2427FE242475FC6C20A5FCA52425FC252429FC2924312C +69E7:08047F7808407F40497E7F4849487F4808487F48088801007FFC05401930E10E +69E8:2200211E27D22012F7D4245427D870146FD2A092A11221DA2714211025102210 +69E9:00007DFC44207D2045FE7C5048525492650E0100FFFE054009203118C1060100 +69EA:2100223E27882488FCA827A824BE74886F88A010A4982718242824AA23CA2086 +69EB:102013FE102011FCFD2411FC312439FC542253FE900813FE1108108810281010 +69EC:2200220E2F742254F55428D4275470546FD4A454A754215421522154255C2284 +69ED:20142012201027FEFC10249024D274926FF2A494A49425C82AAA289A31A62042 +69EE:1040108811FC1108FA5213FE30503988562650C0931010641388103010C01700 +69EF:1020122213FE1090FC8811FE3B10351051FE5110911011FE1110111011FE1100 +69F0:2020247C22842148F83020CE2610727C6A10A27CA21022FE2210221025FE2800 +69F1:100011FE10481048FDFE114A314A398E550255FE910211FE10001154112A122A +69F2:2204220427842494F90C27C4256475546FC4A546A57C27C425442544244428C4 +69F3:0440247C24A83D5004287DFE2488444885180100FFFE054009203118C1060100 +69F4:1040102013FC1204FBFC120032F83A8856F8520093FC132415FC1502190210FE +69F5:1020102011FC1124FDFC102033FE3A2257FE50209040102412A2128A14781000 +69F6:200027FE242A2426F7FE242227AA76AA6FAAA432A596262E2446248227FE2402 +69F7:08203E2008F87F282228496A3E2A08567E820100FFFE054009203118C1060100 +69F8:2110211027D02110F93C27D4201472B46D54A11CA7D42114211421E427262242 +69F9:1020104011FC1104FDFC110431FC3820552454A89124102013FE102010201020 +69FA:2040202027FE2420FDFC242427FE74246DFCA420A56224B429282A2630A02040 +69FB:2200227C22442744FA7C22442244777C6A44A244A27C22282528254A284A3086 +69FC:11F87D0811F81108FDF8110829F824904112860E01007FFC05401930E10E0100 +69FD:1090109017FE1090FBFC129433FC3A9457FC500091F8110811F8110811F81108 +69FE:100011F8110811F8FD0811F830003BFC569453FC900011F81090106011981606 +69FF:1088108817FE1088FCF8102031FC392455FC502093FE102011FC102017FE1000 +6A00:1040102013FE1088FC5013FE32223AFA562252FA928A128A12FA1202120A1204 +6A01:1020102013FE1020FDFC104033FE388855045242959C110411DC110411FC1104 +6A02:2104220447C89452E45C47C89452F45E17C20100FFFE054009203118C1060100 +6A03:1100109E13D21252FE5213DE32523A5257D2521E9292125212D21352122A1044 +6A04:2010271025FE2510FD7C2654257C75546D7CA510A53826542492241024102410 +6A05:2124212422242424F954214A229276106A10A250A25C2250225022B0229E2300 +6A06:1040102013FE1000FD541124315439FC542053FE9242129212FA120A12021206 +6A07:2120213C214422A8FA1026A82AC672BC6AA4A2BCA2A422BC222422242224222C +6A08:2080204023F82110F8A027FE200073F86A08A3F8A20823F82120212222222C1E +6A09:1020102013FE1020FAAA112432AA382056AA512492AA10501050108811041602 +6A0A:24482288F93E22886458729CA92A228825480100FFFE0280044008203018C006 +6A0B:20FE240422282210F8FE20922E9272FE6A92A2FEA29222922296250028FE2000 +6A0C:100011FC112413FEFD2411FC300039FC550455FC910411FC110411FC10881104 +6A0D:102013FE102011FCFC2013FE300039FC550455FC910411FC110411FC10881104 +6A0E:1020101013FE1202F88010FE31103B20557C51449144117C11441144117C1144 +6A0F:100011FC112411FCFD2411FC3040388855F05420904413FE1022112412221060 +6A10:10201020103E1020FC2013FE32023B26568A525293261252128A132613FE1202 +6A11:22782128246C22AAF82A2148229870406840A7FCA0E0215022482C4620402040 +6A12:1040102013FE1242FC2812943AAA34CA50F85300902011241124112411FC1004 +6A13:102011FC112413FEFD2411FC302039FC552455FC904013FE108811D01070138C +6A14:1124124811241000FDFC112431FC392455FC502093FE107010A8112416221020 +6A15:2108210827C82108F91E27D2256475406FC8A108A38825482954211421242142 +6A16:010006C01830EFEE00001FF010101FF0000013FEFC0811E8392855E890081018 +6A17:11FC102013FE1222FDAC102031AC380055FC500093FE108010FC100410281010 +6A18:1020112410A813FEFE0210F83088388854F85420902011FC1020102013FE1000 +6A19:100013FE105011FCFD54115431FC380055FC540093FE102010A8112412A21040 +6A1A:1040102013FE1250FE5013FE32523A5257FE5200929212D41298149214D2188E +6A1B:200027BC208424A4FA9424A4205071886E26A0C0A31020642388203020C02700 +6A1C:1040102013FE1200FE48124833FE3A4856485248927812001554152A1A2A1000 +6A1D:1040107C104013FEFE42127833C43A3C560052FC928412FC128414FC148419FE +6A1E:100013FE1200127CFE441244327C3A0056EE52AA92AA12AA12EE120013FE1000 +6A1F:102011FC10881050FBFE100031FC390455FC510491FC102013FE102010201020 +6A20:1088108813FE1088FC8810F830203BFE5622533292AA137612221222122A1224 +6A21:1110111017FC1110FC0013F832083BF8560853F8904017FC10A0111012081406 +6A22:1040108011FC1104FDFC110431FC390055FE550091FE100212AA12AA1202100C +6A23:1104108813FE1020FDFC102033FE3820541054E0902213B410A8112416A21040 +6A24:2110211E21222254F20826942AE272886A88A2BEA28822AC222A224A22282210 +6A25:108813FE10881080FDF8128830703B8E542055FC902011FC102013FE10201020 +6A26:1210121013DE1528F884102030103BFE5420502091FC10201020102013FE1000 +6A27:2000245C22942114FA94241420A67140691CA7D4A11423942548290821142122 +6A28:200023FE220223FEFA102254223872546A82A250A27C2290221025FE24102810 +6A29:1080108011FE1220FC4013FE3890350853FE551091FE111011FE111011FE1100 +6A2A:1110111013FCFD10111017FE30403BF8564853F8924813F81000111012081404 +6A2B:200027DC251427D4FC5427C8250875146FE2A000A04027FC204020402FFE2000 +6A2C:1040108013FC1244FEF4131432A43A4456A453FC904010241522150A190810F8 +6A2D:1088108813FE1088FCF8108830F8388857FE5088912412FA1020102013FE1000 +6A2E:100013FE10501050FBFE125232523BFE54205124912412281050108811041202 +6A2F:1020102013FE1020FD2410A833FE380055FC5504917411541174110411FC1104 +6A30:100011FC102013FEFE2211AC302039AC540055FC900411FC1004100411FC1004 +6A31:20002FBE28A22AAAFAAA2AAA251478A26880AFFEA110221023A0206021982E04 +6A32:101417FE101013D0FC1013D030103BD0565053D0925013C8124A13CA11861242 +6A33:100013FC100413FCFC0413FC30003BBC552457BC900813FE1108108810A81010 +6A34:1110109413D21012FA50119037FE381057D25252925413D4124A124A13D61022 +6A35:1090108811FE1110FB1015FE3110391055FE5110911011FE110012A412521452 +6A36:100011F8110811F8FD0811F8380037FE524053DC925413D4126817C810541062 +6A37:082008207EFC18302C684AA488207F7C22443E4422283E28221027A8FA440282 +6A38:1050125211541050FBFE108830503BFE542051FC902013FE1050108811041602 +6A39:210421042FE42104F93E27C4200477E46C54A454A7C42444228420E42F142408 +6A3A:108813FE10881000FDFC10A830A83BFE54A854A891FC102013FE102010201020 +6A3B:102011FC112411FCFC2013FE300039FC550455FC910411FC110411FC10881104 +6A3C:27FC240427FC2400FDF8241027FE74206C60A79CA484250829DE2F0831082318 +6A3D:1088105013FE1050FDFC1154318C3974550455FC900813FE1108108810A81010 +6A3E:2114211221122790F97E21502FD471546954A548A5EA25562722250024FE2800 +6A3F:100013DE12521252FBDE100031FC392455FC512491FC102013FE102010201020 +6A40:1040102013FE1040FC8411FE30A838AA5526520091FC11541154115413FE1000 +6A41:1110111011DE12A8FC44110031FC3A0455F4511491F4111411F4111410281010 +6A42:1088105013FE1050FDFC1154318C3974550455FC902013FE1050108811041202 +6A43:102413A810921514FA08140433BA38A854C65380923C138410A8109012A81144 +6A44:2008278820882110FFDE249424A477946C94A794A49424C827882C9420A420C2 +6A45:1080108011FE1354FD54115433FE39545554515497FE10001154112A122A1000 +6A46:20003FFC529092907FFC12901290FFFE082008207EFC18202C704AA889240820 +6A47:103813C0107813C0FC7813C4383C340050C6573891CE173811CE1738114A1186 +6A48:1020102011FC1020FBFE1108339C39085588563E900013FE109010901112120E +6A49:1020112410A813FEFCA8112432223904550451DE92441554109E110412041404 +6A4A:100013FE105013DEFA52125233DE385057FE5222922213FE1222122213FE1202 +6A4B:101811E0104013FEFC88117432523870540055FC91041174115411741104110C +6A4C:13DE125213DE1252FBDE120232F23A9256F2529292F212921292133212021206 +6A4D:100013DE125213DEFE5213DE32023AFA562252729222122212FA1202120A1204 +6A4E:103C13E0112410A8FBFE10A831243A0255FC5124912411FC1124112411FC1104 +6A4F:1088105013FE1020FDFC102033FE392454A853FE900011FC1104110411FC1104 +6A50:01007FFC11101FF00100FFFE80023FF804001FF068100FF00100FFFE0920711C +6A51:2040204027FCF8A02514220877FC6A0AABF8A20823F820402248244429442080 +6A52:100011FC102013FEFE2211AC302039AC540055FC900013FE1040108811FC1084 +6A53:203C27C02044FA24210827FE74026A08AA08A3BE24882AA8213E220824082808 +6A54:221021102FD02010F7BE24A427D470146F94A094A11421C82F08211425142222 +6A55:112410A813FE1202FCF8108830F8380055FC5410911011FE1050109013101030 +6A56:1020112410A813FEFE0210F83088388854F8502093FE107010A8112412221020 +6A57:1088108813FE1088FC0013DE32523A5257DE5252925213DE12521022102A1044 +6A58:100013FC10481030FBFE105230943B50542053FE9252128A1376125212721206 +6A59:102017A410A81292F914120835F4380257F85208920813F8120811101FFE1000 +6A5A:102011FC102413FEFC2411FC30203AAA57AE522293FE122213AE12AA12AA1422 +6A5B:20002FFE28002A28F9482BEE289278846AA0AAA8ABE828882894291429243242 +6A5C:3FFE289025103FDE22222A882F882294242228803FFE21C022A0449858868080 +6A5D:100013FE105013FEFE5213FE300039FC550455FC910411FC102013FE10201020 +6A5E:1020102013FE1020FDFC112431FC392455FC502293FE1042102412A2128A1478 +6A5F:1124112412AA13AEF92412AA33AE392457FE511091141114128A124A12161422 +6A60:102013FE104010F8FB48103033D0383C55C45048903013C410A8119016A810C6 +6A61:108010F8110813FEFD12112239FE344050A25354909813341054109213501020 +6A62:2020272025FE2540FD7C2690257E75006D7CA544A57C2644247C24442444244C +6A63:208020402FFE2882F548251428F470006FFCA444A7FC244427FC244424542408 +6A64:01002488242443E4000024241212A0A0A4A41C1C01007FFC05401930E10E0100 +6A65:282211FC28284BFE984029FC4E8488FC288410FC01007FFC05401930E10E0100 +6A66:102011FC10881050FBFE100031FC392455FC512491FC102011FC102013FE1000 +6A67:11041088100013FEFE2212AA32723A2257FE540091FC110411FC110411FC1104 +6A68:102011FC10201088FBFE108831FC390455FC510491FC110411FC108811041202 +6A69:108812AA12DC1488F954122233FE3A02540050F890881088108A110A12061400 +6A6A:1110111411D21250FA7E155030903AA85528514492441482100812A412521452 +6A6B:1088108813FE1088FCF8100033FE382055FC552491FC112411FC108811041202 +6A6C:100013DE108812A8FBFE118832DA3CA655F85108910811F81108110811F81108 +6A6D:102013FE102011FCFD0411FC302039FC5488505093FE102011FC102010201020 +6A6E:104013BE12921252FEAA1324304039FC550455FC910411FC110411FC10881104 +6A6F:208822AA22DC2488F9542222200073FE6A42A444A3FC20442044208421142208 +6A70:104011FC110411FCFD0411FC310439FC5420552490A81124102013FE10201020 +6A71:200027FE24002404F7E4240425DE75446D44A5D4A40C2544248424E42B142008 +6A72:102013FE102011FCFC0011FC390435FC508853FE900011FC1104110411FC1104 +6A73:2010275425382510FD7C271025FE75286D24A752A5FC2514252425242B542088 +6A74:1090109212D4129AFAD2174E308839F05420504493FE10221128122414A21040 +6A75:2288228827C82290FA9E27D4202477D46C54A7D4A45427C824482454246424C2 +6A76:21102114211227D2F91027DE247077D26C52A7D4A1142FD8210A211A21262142 +6A77:2040228822EA2EAAF2AC22E822AA76AA6AE6A000A1202120212022222422281E +6A78:10F81088108810F8FC88108830F8380057DE5252925213DE1252125213DE1252 +6A79:108010F8111013FCFD2411FC392435FC500053FE900011FC110411FC110411FC +6A7A:100013DE125213DEFE5213DE32023AFA568A52FA928A12FA128A1202120A1204 +6A7B:200023F820482048FBF82088208877FC6800A7BCA294229427BC229422D42F3E +6A7C:2220223C24442578F9082EFE222074D2681AAF2CA0CC201A232A2CC820282010 +6A7D:10101210117C1010FCFE1044332839FE5510557C911011FE1110111012FE1400 +6A7E:11FC1104110411FCFC0013DE32523A5257DE502093FE107010A8112416221020 +6A7F:100013FE100011FCFD2411FC31243BFE540055FC912411FC112411FC100013FE +6A80:20402FFE200027FCFC0425F4251477FC6800A3F8A20823F8220823F820002FFE +6A81:102013FE100011FCFD04117431543974550455FC900810F0102013FE10A81326 +6A82:109013FC129413FCFE9413FC30003BFC560052F8920013FE1520151415481986 +6A83:001E7BE4492853FC602053FE48004BFC680453FC400443FC0100FFFE0920711C +6A84:2108220827C82450FFDE246427D472146914A7D4A21423C822482454255428A2 +6A85:1020113C112013FEFC10101433FE3A1057F05254925412D41368144A18961322 +6A86:2108210821482548F58E290822887448693EA162A5A22522292222A2247E2822 +6A87:10A0109011FE1320FDFC112031FC392055FE510093DE12521252127212021206 +6A88:100013FC12941294FBFC100037FE380057FC520493FC10A2111413081D441182 +6A89:100017E0125E13D2FE5213D23A7237DE504053FE902011FC1020102013FE1000 +6A8A:2108210821142FD4F12227C0245C77C86C48A7C8A13E2FC82108210821082108 +6A8B:108813FE108813FEFC88112432FA382055FC552491FC112411FC102013FE1020 +6A8C:200023FC22942294FBFC20002090779E6890A090A39C20902090279E20902090 +6A8D:1040102011FC1088FC5013FE300039FC550455FC910411FC10201294128A147A +6A8E:1020105010881124FEFA10503124395455FC502093FE1242129212FA120A1206 +6A8F:1050125211541050FBFE108830503BFE542051FC902013FE10A8112416221020 +6A90:110011F8120817FEFA88132433FE3A0056FC520092FC120012FC148414FC1884 +6A91:100011FC102013FEFA2211AC302039AC540051FC9124112411FC1124112411FC +6A92:082008207EFC18302C684AA69FF010D01710111017D0155027CA212A4FE68022 +6A93:210026DC24542454F6D42454246677C0681CA014A7D42114210821C827142222 +6A94:1020112410A813FEFE0210F83088388854F8540091FC112411FC112411FC1104 +6A95:0800FF7808487F4849867F0049787F480828FF9049287F440100FFFE0920711C +6A96:104412241128107EFC101028334A391C5528554C911A112A1148111012FE1400 +6A97:00407C2045FC44887C5043FE7C20A5FC24203C2001007FFC05401930E10E0100 +6A98:20102008278824BEFC8024942788747E6C08A788A6BE2A882A882B8832882008 +6A99:21F8210821F8250AF5FA250A25FA74026F9EA090A0902F9E2492249224922892 +6A9A:2110211027BC2110FBB82554291270006FFCA044A24022782240254028FE3000 +6A9B:2000227C21442174F854205426FE72826ABAA2AAA2BA2282228A2284250028FE +6A9C:204020A023182DF6F00027FC255474E46FFCA000A3F8220823F8220823F82208 +6A9D:101013D412521252FBD0101037FE3A5057D2525293D4125412EA174A10561062 +6A9E:2200239E248A290AF7D22566254077D46D5EA564A7C42544255E2544244428C4 +6A9F:100013FE105013FEFE5213FE300039FC550455FC910411FC110411FC10881104 +6AA0:2420FF20243E7E4482847A284A107A2804440100FFFE054009203118C1060100 +6AA1:100011FC115411FCFC2011FC30203BFE5488545091FC102013FE102010201020 +6AA2:1020102010501088FD0412FA3000380055DC5554915411DC1088108811541222 +6AA3:2040204027FC2248FA4825542FFE70006BF8A208A2E822A822E8220823F82208 +6AA4:10441028120011FEFD20107C30443B7C5544517C9144117C11441280147E1000 +6AA5:1104108813FE1020FDFC10203BFE34545192509093FE109010D4138A109611A2 +6AA6:20022FE222822FEAFAAA2AAA2FEA700A6BCAA00AAFEA210A25422522292A2304 +6AA7:108813FE10881100FBFC155430D43B24545450949348102010A4128A128A1478 +6AA8:1104108813FE1020FDFC102033FE38005620513E904211141610122812441082 +6AA9:102013FE100011FCFD04117431543974550455FC900011FC100013FE11241262 +6AAA:1020104010F8128AFD8C10F8318C3A8A54F8502093FE107010A8112416221020 +6AAB:2080204027FE2402FA2423BC34A46AA86510A2E8A4042BFA20402248244420C0 +6AAC:211027FC211027FCF40423F8200077FC6880A144A6A8217026A8212626A02040 +6AAD:2200227C254424C4F87C27442244727C6F52A252AA542748224823542C622040 +6AAE:204027FC204023FCF80027FE200273F86840A7FEA00027FE200827FE24A82798 +6AAF:20402FFE204027FCF80023F832086FFE6802A7FCA11023F8204027FC20402FFE +6AB0:21082110223E2222F4BE2722213E72086CBEA7AAA02A20AA256A252E24082008 +6AB1:110811EE12941042FC88108833FE388854F8548890F8108813FE108811041202 +6AB2:13FE122213FE1222FEFA12AA32FA3AAA56FA522693FE120A13FE128A125A13FE +6AB3:2080204027FE2402FBFC2148225077FC6A04A7FCAA0423FC220423FC21082204 +6AB4:108813FE10A81090FDFE132031FC392055FC512091FE110013FC10881070138E +6AB5:1044128412EA124EFEA412EE32223BFE5644528492EA124E12A412EE122213FE +6AB6:1020102013FE1050FC8813FE32003A7C5644527C920012EE12AA12EE120013FE +6AB7:200027FC22482444FFFE244426EC75546EECA444A6EC255426EC244424542408 +6AB8:1040102013FE1222FD54114A323A380055FC515493FE100011FC102010A01040 +6AB9:24202220223E2F40F490247E272475426DFEA504A57425542974290433142008 +6ABA:204027FE200021F8F90821F8200077FE6C02A3F8A180264421B8266821A62660 +6ABB:100813E8128813EEFE2813F432823BE2540051FC915411541154115417FE1000 +6ABC:203E27C022442128FBF8204027FC70006BF8A008A3F8200823F82544252A28FA +6ABD:100011FC102013FEFA2211AC302039AC540053FE902011FC115411541154110C +6ABE:08202AA44D28145022887FFE4002882408207EFC08301C682AA4C92208200820 +6ABF:3FFE28942F9228902FFE20102F9028A82FA428C4298020404FFE416086581846 +6AC0:110817FE110811F8FD0811F8390837FE5108529495E2104813FC1040124814C4 +6AC1:1040102013FE1242FC2812943AAA34CA5378502091FC112411FC102213FE1002 +6AC2:200027BC208424A4F29424A4212072106FFCAA20A3FC222023FC222023FE2200 +6AC3:27FE242025FC2524FDFC242027FE75046DFCA504A5FC250425FC2488250427FE +6AC4:101C11E0102013FEFC2011FC31AC397455FC542091FC102013FE10001154122A +6AC5:2080204027FC2110F0A42F58255475526B58A000A20823F8220823F822082408 +6AC6:2104221427CC2544FD5427CC2546755C6FC4A104A2A422D424F02482287E2000 +6AC7:2080209E208427E8FCBE2492249277DE6E52A55EA5522492289E2940314C2252 +6AC8:202427A820922514F2E8240423FA72086BF8A110A7FC200021F021102212240E +6AC9:200027FE24842484F7E4249E25C474046DD4A54CA5C42544288428C433142008 +6ACA:200027BC24A427BCFCA427BC248475F46E94A4E4A71C24E424A424A424E4240C +6ACB:104011FC11241194FD4C112439FC342053FE528A912413FE108010FC1104120C +6ACC:23FC204021F82108F9F8210827FE74426AA4A28AA47A208021F822882070238E +6ACD:1042139C121013DEFE94129434203BFC560453FC920413FC120413FC11081204 +6ACE:2040202027FE2488FDFC248827FE74206DFCA524A5FC252425FC240024882904 +6ACF:200020FE242822FEFAAA20FE201071FE6E44A2FEA344227C2242223E250028FE +6AD0:1FF011101FF011101FF000003EF82AA83EF82AA83EF801007FFC05401930E10E +6AD1:23F82248224823F8FA48224823F870006FBEAAAAAAAA2FBE2AAA2AAA2FBE28A2 +6AD2:1088108813FE1088FD1011DE3A52355452885174920211FC1020112412221060 +6AD3:108011F8120815FCFD2411FC392435FC5154522A91FC110411FC110411FC1104 +6AD4:100013FE124813FEFE4812FC32A43AFC56A452FC922013FE132A157A150A1906 +6AD5:108811DC108813DEFC881154322239FC550455FC910411FC110411FC10881104 +6AD6:2020203E202027FEFC2225F8242275FE6D24A5FCA52425FC28402AA4328A247A +6AD7:110817FE11081000FBFC129432943BFC542853FE9220132412A81292142A18C6 +6AD8:108813DE108811DCFC8813DE30883BFC540451FC900413FC104012A4128A147A +6AD9:1088108817FE1088FBFE1200327C3A44567C520092EE12AA12AA12EE120013FE +6ADA:100013DE125213DEFE5213DE32023AFA568A52FA920212FA128A12FA12021206 +6ADB:1108110811EE1294FC42100033DE3A5257D2525293D2121A1294135012101010 +6ADC:01007FFC11101FF00100FFFE88421F6032504C4837FEC1007FFC05401930E10E +6ADD:102013FE102011FCFC0013FE32523BFE550455FC910411FC110411FC10881104 +6ADE:2120213C21442278FA8824FE2F2071526A1AA4ACAFCC209A202A2AC82AA82810 +6ADF:244424E428A82AAAFEEE24A42AAA7EEE6A42A040AFFE20E0215022482C462040 +6AE0:202027FE241027D4FD4A2484250277DC6C54A5E6A50025DC2844285431482094 +6AE1:2210221023DE2528F884204423F870506FFCA080A3F82D0821F8210821F82108 +6AE2:210827C825482FF0F55E27E4211477D46D54A7D4A2142FC82448269421942662 +6AE3:110817FE11081410FAFE1210307C3854567C5254927C121012FE1210151018FE +6AE4:121013DE15281084FD08109037FE380057D4525493D4125413D41244125412C8 +6AE5:1040102013FE1244FBF4124432EE3A0456F452AC92E4121412A4147415941808 +6AE6:102013FE125013FEFE5213FE32003BFE56925348923A124012FC1548143019CE +6AE7:24102210207A2712F814277E20087710683CA764A5A4253C25242724253C2024 +6AE8:1040107C104013FCFE4413F032443AFC56A852F892A812F8120015FC15541BFE +6AE9:13DE125213DE1252FBDE1242327A3A8A571252DA928A12DA128A12FA120A1204 +6AEA:200027FE24442598FC8827DE248875DC6EAAA488A4202520253C2920292037FE +6AEB:00207F2410FC28284DFE1620247C4EC4157C64440C7C01007FFC05401930E10E +6AEC:2200213C27A42024F4BC232427A4713C6924A7A4A13C259025582968252A2246 +6AED:2F7E29102F502950FF7E2A282B287D4A6886A7F8A40827F8240827F820002FFE +6AEE:100013FE102013AEFEAA12AA33AE382057FE502093AE12AA12AA13AE102013FE +6AEF:2206223827882488F90827DE254875486FDCA55AA56827E820082AA82AA82008 +6AF0:208020402FFE2000F7FC24A427FC72486950A208A44420A8211023082D462180 +6AF1:52107EFE28447E28A2FE3E1020103E7C22103E1001007FFC05401930E10E0100 +6AF2:20202F3C214425BEFA2A212A2FBE72906B2AA25AA22C225C222A22482A282410 +6AF3:2210211027DE2010F45E228227DE70106FDEA450A7DE245027DE2450245224CE +6AF4:2108210827CE2112F92427DE2552755E6FD2A11EA392255E2940211421122122 +6AF5:1088108813FE10A8FC9011FE31203BFC552051FC912011FE110012A412521452 +6AF6:102013FE122211FCFC2010F8302039FC542055FC915411FC104012A4128A147A +6AF7:208027FC240427BCF8A026BE22A277B66AAAA6AAA0B626A222BE27A022A2267E +6AF8:2140226C2244236CFAA423AC22A477FE6908A244A5F2204027FC204020402040 +6AF9:211027FE215023F8F84827FE204873F86D54A75CA44427FC2444275C25542954 +6AFA:200027FC20402FFEF8422358204073586800A000AEEE2AAA2AAA2AAA2EEE2AAA +6AFB:13DE125213DE1252FBDE125233DE398C5652504097FE10881190106010D81304 +6AFC:2148214C22AAF80827FE21487368694AAB6AA14C236C2148216A239A20262042 +6AFD:00187BE0495053F8604053F8480849F86840529444F401007FFC05401930E10E +6AFE:21822E3C20882A90F522243C27887A126A3EAF88A2082AAC2AAA2BCA2EA82090 +6AFF:108812AA12DC1488F954122233FE3A0254F8508890F8100011FC110411FC1104 +6B00:204027FC200023B8FAA823B8211077FC6910A7FCA1102FFE212823102D482186 +6B01:22882FE82AA82FE8FABE2FE830086FDC681AABE8A8282FC82AA82A482B283228 +6B02:108813FE10881412FAFE101034FE3A9256FE509291FE1292160412FE1244122C +6B03:11F0121017FC1204FBFC122433B83A2255FE521097FC124413FC10D0114A163E +6B04:13DE125213DE1252FBDE122232FA3A2256FA52AA92FA12AA12FA127212AA1226 +6B05:2140226C2244236CFAA423AC22A477FE6908A2F4A44223F8204027FC204020C0 +6B06:2108229423DE26B4FBDE229423DE72946BDEA210A7FC21082090206021982606 +6B07:13FC110811F81108FDF8110E37F8380857FE5294939C1294139C12D617BC1084 +6B08:122213FE109011FEFB1015FE311039FE551051FE910013FE128A137612521276 +6B09:249222942FFE2110F7FC204023F870406FFEA480A7BC2494279424C82F9420A2 +6B0A:108813FE108813DEFE5213DE30A0389055FE512093FC152011FC112011FE1100 +6B0B:13DE125213DE1252FBDE125233DE389055FE511093FE151011FE111011FE1100 +6B0C:2090209027FE2094F80A21FE250877E8694AA1EAAF2A25EA254C29EA22162462 +6B0D:210827FE212823FEFA2027FC2A2073FC6A20A3FEA080231C2204239C220423FC +6B0E:2288F93E2288729CA92A2288FFFE80023E0822FE3E0822483E28280824283A10 +6B0F:200027FC24A424A4F7FC221022A874BE6F68A23CA4A82FBC20282AA82ABE2020 +6B10:13DE100013DE1252FB5A125230203BFE565053FE925213FE129212DC129214CE +6B11:252827BE294827BEFB1825AA294673FC6A04A3FCA20423FC220423FC21082204 +6B12:210447C88812F3BC20084B92F83E0380AAAAABAA01007FFC05401930E10E0100 +6B13:2248215027FC2404F9F0211027FC75546CE4A7FCA04027FC20402FFE22A42452 +6B14:13DE125213DE1252FBDE10A031FE3B2055FC512091FE100011FC10881070178E +6B15:27BC24A427BC2000F7FE24002590749E6FD4A564A5D4255425D425682BC83054 +6B16:2790251E27A82484F7BE252A27BE70006BF8A208A3F8220823F820A02124261C +6B17:108813FE108813DEFE5213DE32523BDE562253FE92AA12FA1222127212AA1224 +6B18:13FE120213FE1292FE54129232FE3AAA56FE532292FA12AA14FA142219FA1004 +6B19:27FC244427FC2444FFFE2AAA2FBE7AAA6FBEA220A7C020842FFE204225482884 +6B1A:21F0221023E02020F7FC2188265071A86E64A1A0A2482FBE2AAA2FBE228A2FBE +6B1B:23FE202027FE2422F9AC228027DE72926B92A11EA7D2255227DE21122FD22126 +6B1C:204027FC224823F8F0402FFE2AAA73B86910A7FCA1102FFE212823102D482186 +6B1D:2288F93E2288729CA92A22887FFC44447FFC22083EFE22483E28280824283A10 +6B1E:27FC20402FFE2842FB582040235870006EEEAAAAAEEE20002FFE224825542FFE +6B1F:228027DE229227D2FD5E27D231126C9E67D2AD12B7DE250827CC251427D42422 +6B20:0800080008000FFC10041108211041000100028002800440082010102008C006 +6B21:00804080208020FC010409080A4014401040E0A020A021102110220824040802 +6B22:00800080FC8004FC050449082A401440104028A024A045108110020804040802 +6B23:022007203820207E204220843F10241024102410242824282448444444848102 +6B24:2020202020203F7E2042408440107E10021002101A28E2284248024414840902 +6B25:004000407C40447C4484448845207C2044204450445044507C88448801040202 +6B26:084008401440147C228452888920082000207E50025004500488088809040202 +6B27:00407E404040447C6484548849204820542054506450405040887E8801040202 +6B28:2040204040407E7C828402887B204A204A204A507A504A500288028815040A02 +6B29:00207F201120117E21422584421080103F1021102128212821283F4421440082 +6B2A:102010209220927E92429284FE10101010109210922892289E48F24400840102 +6B2B:202020203F20487E884208847F10081008102E10282828282F48F04440840102 +6B2C:102008200820FF7E0842108422107C10091012102428C82814482244C0840102 +6B2D:0020FE208220927E92429284FE1092109210AA10A628C2288248FE4482840102 +6B2E:422022202420FF7E084208844910491049107F10092810281048204440848102 +6B2F:104010401040FE7C108410887D20002000207C504450445044887C8845040202 +6B30:0820082010207F7E5542558455105510551055105528552857A8FC4400440082 +6B31:104010402840247C428480887D20002000207C504450445044887C8845040202 +6B32:142012202120497E0842148422104110BE1022102228222822483E4422840102 +6B33:082008200F20087E08427F845510551055107F10552855285528514445444282 +6B34:104008407E40427C42847E88432042207E204050485044504A88528861044202 +6B35:40404C407040447C44843C8841207C2090201050FE5010502888248845048202 +6B36:08200820FFA0087E08427F84491049107F1008101C282A284948884408840902 +6B37:422024201820247E52421084FF10201028107E10AA282A282A482E4408840902 +6B38:102010202020447EFE42028440107C1090101010FE2810281048284444848502 +6B39:082008207F20143E22224144FF5002907A104A104A107A284A2802440A440482 +6B3A:22202220FFA0227E22423E84221022103E1022102228FFA82448224442848102 +6B3B:104052405440907C288444888320102010205250545090502888248843048202 +6B3C:0020F7201120557E22425584891010100010F710112855282228554489441082 +6B3D:104010402840247C4284BC8811201020FE2010509450585050881E88F1044202 +6B3E:08200820FF20087E08427E8400107E100010FF1008284A284948894428841102 +6B3F:102010203E20227E4442808410106610421042106628422842487E4442840102 +6B40:082008207F201C7E2A42498400107E100010FF1008284A284948894428841102 +6B41:22202220FF20227E3E4222843E1022102210FF1040285428624840447E840102 +6B42:102092209220927EFE420084FE1010102010FE10AA28AA28AA28AA44AA448682 +6B43:02200F207820087E0842FF8428104B10491049106B28492849487F4441840102 +6B44:00203E202220227E3A422A842A107F1041105D10552855285D28414445444282 +6B45:0040FE402840287CFE84AA88AB20FE2010201050FE50105010881E88F1044202 +6B46:10200820FF20007E42422484FF1000107E10421042287E28424842447E844302 +6B47:00207E2042207E7E42427E8420107F1089104910552841287D2801440A440482 +6B48:102028204420827E7D420084F11095109510F51095289528F52891449544B282 +6B49:22201420FFA0147E14427F841510FF9015107F1014283628552894C414441482 +6B4A:10200820FF20007E7E4242847E100010FF108110BD28A528BD28814485448282 +6B4B:03207C204720447E5F42558456105C10551053105028572855485544A9840102 +6B4C:0020FF2002207A7E4A427A840010FF1002107A104A284A287A2802440A440482 +6B4D:102020207F20417E41427F8440107FD040107F9000A8AAA8AAA800C405440282 +6B4E:22202220FF20227E3E4208847F1049107F1008107F280828FF48144422844102 +6B4F:22202220FFA0227E3E4208847F1049107F1008107F2808287F2808440F44F082 +6B50:0020FFA080209F7E914291849F108010BB90AA90AAA8AAA8BBA88044FFC40082 +6B51:0410079004103FDE245227243C88238820882F0832482A945FD442148A140422 +6B52:20201020FE20447E2842FE8482109210FE109210BA28AA28AA28BA4482448682 +6B53:202020203F20483E88227F44145022907F10A4103F1024283F2824443F442082 +6B54:10201E2010207F3E51225C4472504E9040104A106A905B284A288F4478440082 +6B55:08207F200820223EFFA222447F5041907F1041107F1041287F28224441448082 +6B56:0820FF2008207E7E00427E8442107E102410FF1000287E28422842447E444282 +6B57:04103F9004907FDE04923FA40408554875C844487FC8445475D4555455548462 +6B58:0820292029204A7E144222844110001022102A90B72862282228524445448882 +6B59:0820142022205D3E80A23E4422503E9000107710111055283328554411443382 +6B5A:11100A107FD0041E3F9204247FC8248815087FC800083F94209420943F9420A2 +6B5B:082008201420227E4142BE840010001077105510552877282228224455448882 +6B5C:00207F205520557E7F4220847F1091107D10551055287D2811287D4405440282 +6B5D:00207F2055207F7E08427F840810FF90221014107F280828FFA8084408440882 +6B5E:00207F2041207F7E41427F842210551077102210552877280028554455440082 +6B5F:28204B204D20497E6B424D845510771055105510FFA800282228214441448082 +6B60:772055202220557EF742558422105510FF9014107F28552863285D4441447F82 +6B61:22202220FFA0227E77425584771012103F106410BF2824283F2824443F442082 +6B62:01000100010001001100110011F81100110011001100110011001100FFFE0000 +6B63:00007FFC0100010001000100110011F8110011001100110011001100FFFE0000 +6B64:0440044004402444244827502460244024402440244024422F42F042403E0000 +6B65:0100010011F8110011001100FFFE0100010011081110212040C003001C00E000 +6B66:004000503F4800480040FFFE0040044004402740242024222412278AF8064002 +6B67:0820082008200BFE48204E20482049FC4884488848484E505820E05001880606 +6B68:0100010011F8110011001100FFFE00000100110011F811001100290047FE8000 +6B69:0100010011F8110011001100FFFE0100011011081114212440C003001C00E000 +6B6A:00007FFC0100030005601918610400007FFC0100110011F811001100FFFE0000 +6B6B:080008FE0880088048804EFC488448844884488448FC4E805880E08000FE0000 +6B6C:010011F811001100FFFE010002001FF0101012101110FFFE1210211040508020 +6B6D:10201020102011FC50205C2053FE5008500851FE50085C887048C00800280010 +6B6E:0100010011F811001100FFFE00000810081048904E9C489048904E90F1FE0000 +6B6F:0100010011F811001100FFFE0000292825482FE823882548292820083FF80008 +6B70:00007EFC122452A4932422442A544488081008104E9C489048904E90F1FE0000 +6B71:1008103C11E0102053FE5C2051FC512451FC512451FC5C2071FCC02003FE0000 +6B72:008008FC088008807FFE002800243FFE20202FA422242A182A90512A46469882 +6B73:008008FC088008807FFE002800243FFE20202FA422242B182A9252AA4A468482 +6B74:3FFE221022103FBE261027382AD43292221022502040227C424042409FFE0000 +6B75:102011FE102011FC50205DFE500051FC510451FC51045DFC7104C1FC00880104 +6B76:08442F7828422F3EF0001FF011101FF011101FF001003FF821482FE824282018 +6B77:3FFE2000230C3C7024103F7E24102E3835542492208024F844804480BFFE0000 +6B78:10007DFC44047CFC40047DFC44007FFE122210205DFC512451245D34E1280020 +6B79:0000FFFE02000200040007F8080810102410422001400080010002000C007000 +6B7A:0080008000FE088008800FF8100814102210412001400080010002000C007000 +6B7B:0000FFFC1080108010841E88229022A052C08C800480088408841084207C4000 +6B7C:0008003CFDE0202020203C20442047FE64209420082008201020202040208020 +6B7D:0008001CFDE0210021003D0045FE451065109510091009101110221042108410 +6B7E:00800080FC8020FC21543E5444544494649495240A2408441044208441288010 +6B7F:00800080FCFC210421043E28441047FC65049488088808501020205041888606 +6B80:0008003CFDE0202020203C2045FE442064209450085008501088208841048202 +6B81:000000F8FC88208820883D06460045FC64849484084808501020205040888306 +6B82:000001F8FD08210821083DF845084508650895F8090809081108210847FE8000 +6B83:00200020FC2021FC21243D2445244524652497FE082008501050208841048202 +6B84:00200020FC50208821043E124420444065889410082008441188201040608380 +6B85:00200020FD20212021FC3D2046204420642095FC082008201020202043FE8000 +6B86:0020FC202020204020483C8445FE4482640094FC088408841084208440FC8084 +6B87:00800080FCFE210022F83C104420444065FC9494089409241224244440A88110 +6B88:00200020FC40208021FC3D544554455465549554095409541154215443FE8000 +6B89:0080FE8020FC210421043FF445144514A5F41914091411F41114200440148008 +6B8A:00200120FD2021FC21203E20442047FE647094A808A809241124222240208020 +6B8B:00500048FC40205C21E03C40445E47E064449448083008221052208A43068002 +6B8C:000003FCF800212422483C904A48492468009BFC084010401040204047FE8000 +6B8D:0008003CFDC0200421443CA8440045F8641094200BFE08201020202040A08040 +6B8E:00200020FC2023FE20203C2045244524652496AA082008501050208841048202 +6B8F:00280024FC24202023FE3C20452044B264B4946808A809241222202040A08040 +6B90:00200020FDFE202020203DFC4524452465FC9420087008A81124222240208020 +6B91:0020FC2023FE202020203DFC45044504650495FC08500850109220924112820E +6B92:000000F8FC88208820F83C0045FC450465249524092409241050204840848304 +6B93:00200020FC50205020883D0446FA440064449424092408A81088201043FE8000 +6B94:00200020F9FC202420243BFE4824482469FC9A22097410A81124222240A08040 +6B95:00400020FDFC200021083C90440047FE6400940009FC09041104210441FC8104 +6B96:0020FC2023FE202020203DFC450445FC650495FC090409FC1104210447FE8000 +6B97:00400080FBFC211022483C464BF84A486A489BF80A48124813F820424042803E +6B98:00900088FCBC23C020503C2444D4472C649094BC0BC008481050202440D4830C +6B99:001C03E0FA2023FE22203A924B0A4A0669FC9904090411FC1104210441FC8104 +6B9A:01040088FC5021FC21243D2445FC4524652495FC0820082013FE202040208020 +6B9B:000003FCF808201020203BAE4AA24AAA6AA49AA40BAA103210A0204047FE8000 +6B9C:00480148FD4823FE21483D484578450065FE94200BFE087010A8212446228020 +6B9D:00200020FBFE202021FC38404BFE488869349AE2082011FC107020AC43228020 +6B9E:000001F8F908210821F838004BFC4A046BFC9A040BFC120413FC209041088204 +6B9F:000001F8FD08210821F83D08450845F8640097FC0A940A941294229447FE8000 +6BA0:00200040FDFC210421FC3D0445FC450465FC942808240BFE1050208841048602 +6BA1:00400020FBFE2202241439E04900490069FC9910091017FE1000209041088204 +6BA2:01540154FBFE215421543A724C004BFE6A22982009FC112411242124412C8020 +6BA3:0088FC8823FE208820F83C2045FC452465FC94200BFE082011FC202043FE8000 +6BA4:008000FEFD0022FC20843CFC448444FC640097FE088009FE12522092412A8044 +6BA5:0040FC2023FE220220003DFC442045FC652495FC092409FC1000208841048202 +6BA6:00400080FDFC210421FC3D0445FC450065FE950009FE080212AA22AA4202800C +6BA7:02140112FBD22010203E3BD04A504A506BD099280BA813681528212A452A8246 +6BA8:002001FCFD2421FC20203FFE440045FC650495FC090409FC110421FC40888104 +6BA9:008000DCFA8423D424483A944B244C406A4899500FFC10E0115022484C468040 +6BAA:002003FEF82021FC20003BFE4A0249FC680099FC090411FC1104208843FE8000 +6BAB:000003DEFA52225223DE380049FC492469FC992409FC102013FE202040208020 +6BAC:000001FCFD5421FC20203DFC442047FE6488945009FC082013FE202040208020 +6BAD:000003FEFC0021FC21243DFC452447FE640095FC092409FC112421FC400083FE +6BAE:00200020FC50208821043EFA4400440065DC9554095409DC1088208841548222 +6BAF:00400020FBFE220221FC39484A5049FC6B0499FC090411FC110421FC40888104 +6BB0:002003FEF82021FC20003BFE4A524BFE690499FC090411FC110421FC40888104 +6BB1:0088008CFBEA208820883BFE49484B6A694A9B6A094C136C114A216A47968022 +6BB2:0148014CFAAA200827FE39484B68494A6B6A994C0B6C1148116A239A40268042 +6BB3:00000FE00820082008201020201EC0003FF010100820044003800C603018C006 +6BB4:00007EF840884488648854864900480055FC54846488405040207E5000880306 +6BB5:060038F82088208820883C86210020003DFC208420882C50F020205020882306 +6BB6:1000087800487F480848088608007EFC08440844082808280F10F02840440182 +6BB7:0600387820483E4822483E8622003EFC20443E442228222842104A2884440182 +6BB8:080008787F48084808483E8600003EFC2A442A443E2820282010402840448182 +6BB9:00007F78484848485F486486440044FC7F4444444A285128601040287E440182 +6BBA:040044782848104828484486920010FCFE441044582854289210122850442182 +6BBB:080008787F4808483E4800867F0041FC82443C44242824282510262844448182 +6BBC:080008787F4808483E4800867F0041FCBE4400443C2824282510262844448182 +6BBD:420024781848244852481086FF0020FC3E446244BE2822283E1022282A442582 +6BBE:100010787D4812481448FF86100020FC7E44A24422283E28221022283E442382 +6BBF:00003F78214821483F4820862A002AFC3F442A442A283F2820104A2891442182 +6BC0:2000CE7882488248EE4882868200FEFC10441044FE28102810101E28F0444182 +6BC1:2000CE7882488248EE4882868200FEFC00440044FE28102810101E28F0444182 +6BC2:1000FE7810487C480048FE86820010FC7C44204450287C281010FE2810441182 +6BC3:20001078FE4800487C4844867C0000FCFE448244BA28AA28BA1082288A448582 +6BC4:10007E7810487E4852487E8652007EFC1044FF4410287E28421042287E444382 +6BC5:100008787F4822481448FF86100029FCCE4414442628CD2815102428D4440982 +6BC6:0000FFB880289F28912891469F00807CBBA4AAA4AAA8AAA8BB908028FFC40082 +6BC7:1000673841287728412841467F00087C49242A24FFA81C282A10492888440882 +6BC8:2040CE9C8A94AA94AAD4EE94AAA6AAC0AA9CAA94EE94A8D42B884888489488A2 +6BC9:7F7848485F4C64805F784A4851307F4C00007FFC1110111029284544FFFE0000 +6BCA:0878FF4808863E782A483E3040489FF40200FFFE08203FF8D0161390129013B0 +6BCB:00001FF01110111011101110FFFE21102210221022103FFC0410081010A02040 +6BCC:00001FF011101110111011101110FFFE221022102210221022103FF000100010 +6BCD:00001FF01010121011101110FFFE20102210211021103FFC0010001000A00040 +6BCE:10001FFC200020005FF0911011101110FFFE2210221022103FFC001000A00040 +6BCF:10001FFC200020005FF0901012101110FFFE2010221021103FFC001000A00040 +6BD0:01000100FFFE01003FF800001FF011101110FFFE211022103FFC041008501020 +6BD1:00103E502250325C2A7422D42254FF544254525C4A5042507F420242143E0800 +6BD2:01003FF801001FF001007FFC00001FF012101110FFFE221021103FFC00100060 +6BD3:402040107DFE80207C48448465FE5402FEA844A8A4A894A8FEAA052A29261200 +6BD4:0080208020802084208820903EA020C0208020802080208226823882207E0000 +6BD5:2080208820B03EC0208020842684387C21000100FFFE01000100010001000100 +6BD6:2080208820B03EC0208020842684387C0100009048A4484289820E101810E7F0 +6BD7:001001107D1055125512551455D87D1055105510551055127D524592010E0000 +6BD8:00003FF8210821083FF8210821083FF80000208020843E9820E020842684387C +6BD9:410041187DE041044D0470FC0000FFFE108010883E9042E0148008843084C07C +6BDA:1FC020807FE0A0203FE020883CF420841FFC20407FF0A2103FF005441924E0FC +6BDB:001001F87E000200020003F03E000200020003FCFE00020002040204020401FC +6BDC:08201C207020102010A81CA47124112212221C20F02010A2104210020FFE0000 +6BDD:08041C08703011C010041C08703011C010041C08F03011C2100210020FFE0000 +6BDE:2080208820B03EC020842084267C380000F03F0001F03F0001F87F02010200FE +6BDF:0100111011082124414401800E00F00000F03F0001F03F0001F87F02010200FE +6BE0:080008007F7C094411441144257C420000F03F0001F03F0001F87F02010200FE +6BE1:08401C407040107C10401C40704011F811081D08F10811FA110A10020FFE0000 +6BE2:10003BF8E0A020A023F83AA8E2A822A822B83B08E20823F8220A200220021FFE +6BE3:00007EFC22441224060C1A3462C4000000F03F0001F03F0001F87F02010200FE +6BE4:281824E04220923810E02020443CFEE002222422241E24002402440243FE8000 +6BE5:11003900E1FC220424043BE4E22423E422243A24E3E42004202A201220021FFE +6BE6:0008FF1C44E0442044207C3C44E044207C20443C44E04F22F4220422041E0400 +6BE7:10503848E0402FFC20403A48E2482F5022503A20E2282468289A210A20021FFE +6BE8:08201CA070FC112010201DFE7050105010901C92F112120E100010020FFE0000 +6BE9:08201C20712410A410A81C2073FE102010701CA8F1241222102010020FFE0000 +6BEA:10403840E090210823FC3824E12021FC21203A20E7FE20202022202220221FFE +6BEB:01007FFC00001FF010101FF000007FFE400281F43E0003F03E0003FA7E0201FE +6BEC:08201C28702413FE10201D2470A8107010A81D24F22210A0104010020FFE0000 +6BED:0008FF1C00E000207E20423C42E042207E20003C42E0222224220F22F01E4000 +6BEE:1020102011241122FA2A101014601B80303CD3C0107C13C0107C17C25042203E +6BEF:10403A44E244244820A03910E608204420403A48E248245020A22112220A1FFE +6BF0:08401C2071FC100010881C5073FE100010F81C88F088108A10FA10020FFE0000 +6BF1:11003900E1FC220424843C94E2A427FC208439C4E2A4249420AA209220021FFE +6BF2:0004F70E117055102210551C897010100010F71E11705510221255128912100E +6BF3:01F03E0003F03E0003FA7E0201FE0000183071C01C7871C01C7871C41444183C +6BF4:10903890E090279E20903890E39C209020903890E79E20902092209220021FFE +6BF5:0808101C24E07E201020FF3C24E042208920303CC4E008223222C422381EC000 +6BF6:08401C8871FC102413FE1C88713412C210181CE0F00C103011C010020FFE0000 +6BF7:00047F0E41705D1041105D1C417000103E10221E3E7022103E1222123E12220E +6BF8:08001DFC712411FC11241DFC7020101411521D42F248103A100210020FFE0000 +6BF9:0804140E22704110BE90001C78F04A904A907A9E4AF04A907A9248924A92590E +6BFA:10203850E088210426FA3800E3C4225423D43A54E3D42244225622CA20021FFE +6BFB:1008101CFEE020207E20883C7EE000207E20423C7EE042227E2242224A1E4400 +6BFC:00087E1C42E07E2042207E3C20E07F209120513C69E041227D2201220A1E0400 +6BFD:10103810E77C211422FE3A14E77C2110217C3910E6FE2210251228FE20021FFE +6BFE:00047F0E41707F1041107F1C0070F7901090949E52F03190D69210925292210E +6BFF:1004220E7F7042109490F79C08703610C910309EC470191062120C123012C00E +6C00:08047F0E4970FF9049107F1C08707F1049107F1E1070FF10211272120C12F30E +6C01:11103910E7FC211023F83A08E3F8220823F83840E7FC20A02112220A20021FFE +6C02:08203E7E08A47F281C102A2849443FFE200020782F8020F0278040FA4F82807E +6C03:1004080E7F702210FF10001C7F7049107F10491E7F7008107F1208120F12F00E +6C04:7E04140E0870FF1029104A1CA87010107F10551E63705D1055125D124112430E +6C05:082049202A3E7F4841A85D2855105D2842F63F0001F03F0001F87F02010200FE +6C06:11083890E3FC209022943998E09027FE200039F8E10821F8210A21FA20021FFE +6C07:11003BF0E4102BF822483BF8E24827FC20003BF8E20823F8220A23FA20021FFE +6C08:1008FE1C00E0FE208220BA3CAAE0FE2000207C3C44E07C2244227C22001EFE00 +6C09:00047F0E41707F100010F79C94F0F7900810081EFF701C102A1249128892080E +6C0A:10203BFEE00023FC22043AF4E29423FC210839F8E10821F8200227FE20021FFE +6C0B:2404FF0E2470FF1081107E1C0070FF101010289ED5702E10D5122492D412080E +6C0C:108039F8E20825FC212439FCE12421FC21543AFAE08820F8208A20FA20021FFE +6C0D:7704550E777055107710551C777022107F90A41E3F7024103F1224123F92200E +6C0E:3F84248E3FF024907FD0555C7FF055507FD0041E7FF048501F122A1204127FCE +6C0F:001000F83F802080208020803FFE208020802040204020222012280A30062002 +6C10:001000F83F802080208020803FFE208020802040204020222112288A30462042 +6C11:00003FF82008200820083FF8208020803FFC20802040204024242814300C2004 +6C12:00F03F00210021003FFC2080204028243114210C0100FFFE0100010001000100 +6C13:200013FC12040204FA0443FC4220422043FE4220422042107A12028A03060202 +6C14:100010003FFC20004FF080003FF000100010001000100010000A000A00060002 +6C15:100010003FFC20004FF080003FF000100410041004100410080A080A10062002 +6C16:100010003FFC20004FF080003FF000103F101110121017D0204A204A42868102 +6C17:100010003FFC20004FF080003FF00010009030900D100210050A188A60460002 +6C18:100010003FFC20004FF080003FF000100010111011101110210A210A41068102 +6C19:100010003FFC20004FF080003FF000100410041044504450444A7FCA00460002 +6C1A:100010003FFC20004FF080003FF000102490249024902490248A448A44868082 +6C1B:20003FFC40009FF000007FF00010121021104090BF501112110A110A25064202 +6C1C:20003FFC40009FF000007FF000103F90209020903F902092208A208A3F862082 +6C1D:100010003FFC20004FF080003FF0041004107FD044504A50514A604A41464082 +6C1E:20003FFC40009FF000007FF000107FD004107FD044504A52514A604A41464082 +6C1F:20003FFC40009FF000007FF012107F9012907F9052107FD2124A134A22864202 +6C20:20003FFC40009FF000007FF0041004107FD044507FD044527FCA444A04060402 +6C21:20003FFC40009FF000007FF010101F90209051100E103192CC6A030A1C060302 +6C22:20003FFC40009FF000007FF000103FD003100CD070301FD2020A020A7FF60002 +6C23:100010003FFC20004FF080003FF00410249015107FD00E10150A248A44460402 +6C24:20003FFC40009FF000007FF000107FD0445044505F5044524A4A514A7FC64042 +6C25:20003FFC40009FF000007FF000107FD00A103F902A902A92338A208A3F862082 +6C26:20003FFC40009FF000007FF004107FD0081011103E100492190A620A0D063082 +6C27:20003FFC40009FF000007FF011100A107FD004103F900412FFEA040A04060402 +6C28:20003FFC40009FF000007FF004107FD040500810FFD01112320A0C0A1B066082 +6C29:20003FFC40009FF000007FF000107F901210125092905312520A120AFFC60002 +6C2A:20003FFC40009FF000007FF004107FD004103F9020903F920A0A124A224641C2 +6C2B:20003FFC40009FF000007FF000107FD02490491024907FD2040A040AFFE60002 +6C2C:20003FFC40009FF000007FF00010FFD01210739040904092738A120A1206FFE2 +6C2D:20003FFC40009FF000007FF004107FD004103F9024903F92248A3F8A15062482 +6C2E:20003FFC40009FF000007FF0041024900B10109060500412248A0B0A10866042 +6C2F:20003FFC40009FF000007FF000107F9000903F900090FFF2248A150A24864C42 +6C30:20003FFC40009FF000007FF004107FD004103F900410FFF2208A3F8A20862182 +6C31:20003FFC40009FF000007FF010901F9010903FF010103FD24A4A124A25460882 +6C32:20003FFC40009FF000007FF000103F9020903F9020903F92000A7FCA4A46FFE2 +6C33:20003FFC40009FF000007FF000103F9024902A903F9000127FCA4A4A4A46FFE2 +6C34:010001000100010801087D9005A0094009401120111021084106810005000200 +6C35:0000200010001000800040004800080010001000E00020002000200020000000 +6C36:00003FF000200040008401087D9005A005400940092011102108C10605000200 +6C37:0100010011000908090801907DA005400940092011102108C106010005000200 +6C38:0200010000801F00010401087D9005A005400940092011102108C10605000200 +6C39:00400040F84008440F480950116012502248244448444140408240023FFE0000 +6C3A:01000100010041082108111011200180054009201110E1084104010005000200 +6C3B:008020801080108087FC40844884088410841084E10421042104220422280410 +6C3C:010001047D880550092011102108C5060200010001000280044008203018C006 +6C3D:01000280044008203118C10601003D8405880950092011102108C10605000200 +6C3E:000023F812081208820842084A080A0812501220E20022022202220221FE0000 +6C3F:010021001100110087F041104910091011101110E110221222122412280E1000 +6C40:0000200013FE1020802040204820082010201020E02020202020202020A00040 +6C41:00402040104010408040404047FE104010402040E04020402040204020400040 +6C42:0120011001007FFC01002108111009A003400520091011086106010005000200 +6C43:0000202011201120812041204920092011201110E11022102208240828041002 +6C44:0040204010401040804040404840084010A010A0E0A021102110220824040802 +6C45:000027FE10801080810041004A000BF810081008E00820082008200820500020 +6C46:0600010002800C603118C10601003D8405880950092011102108C10605000200 +6C47:000023FE12001200820042004A000A0012001200E20022002200220023FE0000 +6C48:000027FC10041004800440144824084410841104E60420042004200420280010 +6C49:000027F812081208820841104910091010A010A0E040204020A0211022080C06 +6C4A:000027F812081288824841504910091010A010A0E040204020A0211022080C06 +6C4B:00802080110011FC820442045404190410842044E04420042004200420280010 +6C4C:0204224412441244824442444244124412442244E24422442244244424040804 +6C4D:008020801080108087F0409048900A9011901090E1502152220A220A24060802 +6C4E:000023F012101210821043105290125012502210E210221224122412280E1000 +6C4F:0040204010401040804047FE4840084010A010A0E0A021102110220824040802 +6C50:00802080108010FC810441044284144810282010E01020202040208021000600 +6C51:0010207813C01040804040404840087E17C01040E040204220422042203E0000 +6C52:004020201020100087FE41004900090011001100E10021002100210021FC0000 +6C53:000023F8100810108020404048400FFE10401040E04020402040204021400080 +6C54:00802080110011FE8200440041F8100810102060E08021002202220221FE0000 +6C55:0040204010401040844444444444144414442444E4442444244427FC20040000 +6C56:010001002108210821083FF80000010001047D880550092011102108C5060200 +6C57:0000200013FC1040804040404840084017FE1040E04020402040204020400040 +6C58:0010207813C010408040404048400FFE10401040E04020402040204020400040 +6C59:000021FC102010208020402048200BFE10201020E02020202020202020A00040 +6C5A:000023F810401040804047FE48800880110011F8E00820082008200820500020 +6C5B:000027F01110111081104110411017D011102110E1102112210A210A21060102 +6C5C:000023F812081208820842084A080BF812001200E20022022202220221FE0000 +6C5D:00802080108010808FFE41084108120812102610E1A0204020A0211022080C04 +6C5E:00003FF8010001000100FFFE0000010001047D880550092011102108C5060200 +6C5F:0000200017FC1040804040404840084010401040E040204020402FFE20000000 +6C60:0040204012401258826842C853481E4812482248E25822422202220221FE0000 +6C61:000023F810001000800047FE40801080110021F8E00820082008200820500020 +6C62:00402040104010408040404047FC104010402040E0402040204020402FFE0000 +6C63:00802080108010F88108410849100A1010201020E05020502088210822040402 +6C64:000023F0102010408080410043FC112411242124E22422442444288421280210 +6C65:00402040104017FE80404040404017FC12042208E11020A0204020A023180C06 +6C66:0008203C13E01220822042204A200BFE12201210E2102212220A228A23060202 +6C67:000027FC111011108110411049100FFE11101110E11021102110211022100410 +6C68:000023FC12041204820442044A040BFC12041204E2042204220423FC22040000 +6C69:0000200017FC140484044404440417F414042404E4042404240427FC24040000 +6C6A:000027FC1040104080404040404013FC10402040E0402040204020402FFE0000 +6C6B:011021101110111087FC41104110111011102FFEE11021102110221022100410 +6C6C:082008207FFC08200820FFFE10202020412001047D88095011202118C5060200 +6C6D:002020201020102083FE42224A220A221252124AE28A230222022202220A0204 +6C6E:0100410021FC2204020485044884408410142024E04423842104200420280010 +6C6F:0080408020802FFE008080804120512011202240E2402488248829FC20840004 +6C70:004020401040104087FE4040484008A010A010A0E11021102288224824440802 +6C71:0040205010481048804047FE4840084010A010A0E0A021102110220824040802 +6C72:000027F81108111081104120493C090411041288E28822502420245028880306 +6C73:0008203C13C01200820042004BF80A8812881288E25022502220245024880906 +6C74:008020401040100087FE4080488008C010A01090E08820882080208020800080 +6C75:0040204010A010A0811042884C460840100013F8E00820102010202020200040 +6C76:00802040104017FC8110411049100910111010A0E0A0204020A0211022080C06 +6C77:008020801080108081F841084A080D10111010A0E0A0204020A0211022080406 +6C78:00802040104017FE81004100490009F811081108E10821082208220824500820 +6C79:0000200811081088825242524A220A2212521292E30A220A220223FE20020000 +6C7A:00802080108017F8808840884888088817FE1080E14021402220241028081006 +6C7B:00802080108011FC812041204A200820102017FEE02020202020202020200020 +6C7C:002020201120112081FC422042201420102027FEE02020202020202020200020 +6C7D:0100210011FC1200840041F84800080013F81008E0082008200A200A20060002 +6C7E:001021101110120882084404580213F811082108E10821082208220824500820 +6C7F:000023F81008111080A0404047FE104210442040E04020402040204021400080 +6C80:0800087C080409280910EA082CFE2A1229144910489088900810081028501020 +6C81:0000208010401020812041004100150415022502E50229082108210820F80000 +6C82:0008203C13C012008200420043FE121012102210E21022102210241024100810 +6C83:0010207817C0104080404040404017FE104020A0E0A021102110220824040802 +6C84:0000200013FC10008000400047FE104010402080E0802108220427FE22020000 +6C85:0000200013F810008000400047FC112011202120E120212022222222241E0800 +6C86:00802040104017FC8000400049F0091011101110E110211222122212240E0800 +6C87:0080208011001110820847FC4004112011202120E120212022222222241E0800 +6C88:00402040104017FE84444848404010A010A020A0E120212022222222241E0800 +6C89:0000200013FE12028404400041F0111011102110E110211222122212240E0800 +6C8A:1020102010207E2453A894B010A8112429222A222C2028A22842480247FE8000 +6C8B:009020881088108087FE40A048A008A010A010A0E120212221222222221E0400 +6C8C:00402040104017FC804042484A480A48124813F8E048204020422042203E0000 +6C8D:000027FE10801080808040F84908090811081208E3F820102010201027FE0000 +6C8E:01202120112012248224462856301A20126022A0E220222222222222221E0200 +6C8F:0000220012FC12248224422453A41E2412242224E2A423242244204420940108 +6C90:004020401040104087FE404048E008E011501150E24824442842204020400040 +6C91:000023F8108810888088408848880BF811081108E1082108210821082FFE0000 +6C92:0080208010FC11048104422848100BFC11041088E08820502020205021880606 +6C93:010001087D1005A009603118C50602001FF0101010101FF0101010101FF01010 +6C94:000027FE104010408240427C4A440A44124413FCE00420042004200420280010 +6C95:01002100110011FC82A444A440A4112411242244E44420842104220424280010 +6C96:004020401040104087FC44444444144414442444E7FC24442040204020400040 +6C97:00003FF801000100FFFE028004401830E10E11100B2005C01930610805000200 +6C98:0020222012201222822242244BA80A3012201220E220222222A22322221E0000 +6C99:0040204010401148814442424242144810482048E01020102020204021800600 +6C9A:0040204010401040824042404A7C0A4012401240E2402240224022402FFE0000 +6C9B:0040404020402FFE0040804047FC544414442444E44424542448204020400040 +6C9C:0010221012101210821043FE4A000A00120013F8E20822082208240824080808 +6C9D:0820082008200A200A32EDB228B42CA82AA82AA8492449248A22082028A01040 +6C9E:00004FFE20402040004087FC4444544414442444E44424542448204020400040 +6C9F:01002100110011FC820444844084110411442224E7F422142004200420280010 +6CA0:0008203C17D01490849044904490149014902488E48824882484288428821000 +6CA1:000021F01110111081104210540E180013F82208E108211020A0204021B00E0E +6CA2:000021FC110411048104410449FC092411201120E11021102208220824040802 +6CA3:00202020102013FE80204020482009FC10201020E02027FE2020202020200020 +6CA4:000023FC12001208828842504A500A2012201250E25022882308220023FE0000 +6CA5:000023FE12001220822042204AFC0A2412241224E24422442484248429281210 +6CA6:0040204010A010A0811042084406111011202140E18021002104210420FC0000 +6CA7:0040404020A02110020884044BF2421012102210E25022202204220421FC0000 +6CA8:000023F812081208832842A84AA80A48124812A8E2A8232A240A240A28061002 +6CA9:0040224011401140804047FC40441044108420A4E09421142104220424280810 +6CAA:00802040104013FC82044204420413FC12042200E20022002400240028001000 +6CAB:00402040104017FE8040404048400BFC104010E0E15022482446284020400040 +6CAC:00402040104013FC8040404048400FFE10E01150E15022482444284220400040 +6CAD:004020501048104087FC404040E010E011502150E24824442842204020400040 +6CAE:000023F812081208820843F84A080A08120813F8E2082208220822082FFE0000 +6CAF:010001087D1005A009603118C50602007FFC040008001FF82808C8080FF80808 +6CB0:0000200017FE104080404080488009F813081508E90821082108210821F80108 +6CB1:00802040104017FC840448084200121012202240E38022042204220421FC0000 +6CB2:0100210013FC120084404840427812C813482E48E248225A2242220221FE0000 +6CB3:0000200017FE1008800843C84248124812482248E3C822482008200820280010 +6CB4:0040204010A01110820844264040108013102020E04020882310202020C00700 +6CB5:00802080108011FE810242045420102011282124E22422222422202020A00040 +6CB6:000023FC10001000800040004FFE104010402248E24424442442284221400080 +6CB7:009020881088108087FE4080490009FC11441244E24824502420285020880306 +6CB8:01202120112017F88128412847F81520152027FCE12421242234222824200820 +6CB9:004020401040104087FC444444441444144427FCE44424442444244427FC0404 +6CBA:000027FC1444144484444444444417FC14442444E4442444244427FC24040000 +6CBB:0040204010801110820847FC4004100013F82208E20822082208220823F80208 +6CBC:000027FC108410848084410441141208140023FCE20422042204220423FC0204 +6CBD:004020401040104087FE40404840084013F81208E20822082208220823F80208 +6CBE:004020401040107E804040404840084013FC1204E20422042204220423FC0204 +6CBF:000021F01110111081104110420E1400100023F8E20822082208220823F80208 +6CC0:000023FC1004100487F4400448040BE412241224E22423E42004200420140008 +6CC1:000027F8140814088408440847F8112011202120E120222022222422281E1000 +6CC2:000023FC12041204820442F44A940A9412941294E2F422942204220422140208 +6CC3:01002100120013FC8404480443E4122412242224E22423E42224200420280010 +6CC4:004822481248124882484FFE4248124812482248E27822002200220023FE0000 +6CC5:000027FC140414448444444444441444144424A4E49425142604240427FC0404 +6CC6:004020401240124083FC42404440104017FE2040E0A020A02110220824040802 +6CC7:020022001200121E87D242524A520A5212521252E25222522452245E29521080 +6CC8:0080208010F81108831044A0404010A013182C06E0C020202010218020600010 +6CC9:010002001FF0101010101FF0101010101FF001047D88095011202118C5060200 +6CCA:00402040108013FC820442044A040A0413FC1204E20422042204220423FC0204 +6CCB:00402040104017FC804040404150111011102FFEE11021102210221024100810 +6CCC:0000208010401028812841084110151415222522E54229882108230824F80800 +6CCD:004020401040104087FC404048E008E011501150E24825F42842204020400040 +6CCE:01002100110011FE82804280448010F810802080E08020FC2080208020800080 +6CCF:0040204012481248824842484BF8084810401040E44424442444244427FC0004 +6CD0:0010479024902510057E86124512549214922492E692251224222422244A0484 +6CD1:0220422022202420057C89244E24422414242424E9242F242144204420940108 +6CD2:0008203C13D01290829042904A900A9012901288E28822C822A424D424920800 +6CD3:0008278810881088808847884408141014102790E09420A420A220BE25020200 +6CD4:010821081108110887FE410841081108110821F8E10821082108210821F80108 +6CD5:004020401040104087FC4040404010401FFE2040E0802100221024082FFC0404 +6CD6:00002100163C14A484A444A444A414A414A425A4E6B424A82120212022200420 +6CD7:0000200017FC14A484A444A444A414A414A42524E51C26042404240427FC0404 +6CD8:0010207817C01040844442444248104017FE2040E04020402040204021400080 +6CD9:000023F810401040824841484950084017FE1040E04020402040204020400040 +6CDA:0120212011201524852445E84530152015202520E520252225E22E22241E0000 +6CDB:00102078178010008080404047F8101010202040E08021002200250028FC0000 +6CDC:0008203C13E01220822042204A200BFE12201210E2102212220A228A23260212 +6CDD:0008203C13C01200820042004BFE0A1012101270E21022182214241024100810 +6CDE:00802040104017FC840448084000100017FC2040E04020402040204021400080 +6CDF:000027FC10401040804040404A400A7812401240E2402240224022402FFE0000 +6CE0:0040204010A010A0811042484426102013F82008E010211020A0204020200020 +6CE1:0100210011FC1204820447E44A241224122423E4E21422082202220221FE0000 +6CE2:00202020102013FE822242244A200BFC12841288E24822502220245024880906 +6CE3:008020401040100087FC40004008120812082110E1102110212020202FFE0000 +6CE4:0008210810881448844844084408140814102410E41025282624244420820102 +6CE5:000023FC12041204820443FC4A000A4012441248E270224024422442283E1000 +6CE6:000023FC1204120483FC42404A400A4013F81248E24822482488248A290A0206 +6CE7:002820241024102083FE42204A240A2412241228E22822902312222A20460082 +6CE8:00802040100017FC804040404040104013FC2040E0402040204020402FFE0000 +6CE9:004022401240124083FC444054401840104023FCE0402040204020402FFE0000 +6CEA:000023FC12041204820443FC4A040A04120413FCE20422042204220423FC0204 +6CEB:00802040104017FE804040804108121017E02040E0802108220427FE22020000 +6CEC:00402020102013FE820244044000109010902090E08821082108210422040402 +6CED:010821081108120882FE46084A08120812882248E24822082208220822280210 +6CEE:0040204012481148815040404BF8084010401040E7FC20402040204020400040 +6CEF:000023FC12041204820443FC4A200A2013FE1220E22022102212228A23060202 +6CF0:010001007FFC01003FF80200FFFE044009203118CB2605C01930610805000200 +6CF1:00402040104013F8824842484A480A48124817FEE04020A020A0211022080406 +6CF2:00402040105C13E0824042404A400BFC104410C4E14422542C48204020400040 +6CF3:00802040102013C0804440444F48115011602160E25024482844304221400080 +6CF4:010001087D1005A009603118C506020000003FF82448244824482448FFFE0000 +6CF5:0000FFFE040008001FF02810C8100FF0010001047D88095011202118C5060200 +6CF6:22081108111000207FFE40028004010001047D880550092011102108C5060200 +6CF7:012021101110110087FE41404940094811481250E2502262244224C2293E1000 +6CF8:00402040107E1040804043FC4A040A04120413FCE20422002200240024000800 +6CF9:000023F812081208820842084BF80A0812081208E20823F8200020002FFE0000 +6CFA:0008203C17C0140084404440444017FE10402040E24822442442284221400080 +6CFB:000027FE14021904810041FC49000A0013FC1004E00427F42004200420280010 +6CFC:004020481244124083FE4080488008FC11441144E14822502220245028880306 +6CFD:000027F81208111080A0404041B0164E104023F8E040204027FC204020400040 +6CFE:000027F8101010208060409841041602100023FCE04020402040204027FE0000 +6CFF:000023F81208120883F842084A080BF812441248E23022202210228823060200 +6D00:0080210013F812088288424842481FFE12082288E24822482208220824280810 +6D01:0040404020402FFE0040804047FC5000100023F8E20822082208220823F80208 +6D02:00402020102017FE8090409048900A9412921292E49220902110211022500420 +6D03:00802080108017FE810041204A200AA414A41528EA5020502088210822040402 +6D04:000027FE1402140284F244924492149214922492E4F224922402240227FE0402 +6D05:000027FC1040104083F842484A480BF812481248EFFE22082208220822280210 +6D06:000023F810101020804447644168115012502248E4442942208020002FFE0000 +6D07:000027FC140414448444444447FC1444144424A4E49425142604240427FC0404 +6D08:0100210013F8120884104BFE420012F812882288E2A8229022822482247E0800 +6D09:0008203C13C01200820043FE4A000A00120012FCE28422842484248428FC0084 +6D0A:00402040104017FE80804080497C090813101510E1FE21102110211021500120 +6D0B:020821081110100087FC4040404013F810402040E7FE20402040204020400040 +6D0C:000240022FC22212021283D24252545216522552E892209221022202240A0804 +6D0D:000027FE14201420842044F84488148814882488E4F824202420242027FE0000 +6D0E:0040208013FC1204820442044BFC0A0412041204E3FC22042204220423FC0204 +6D0F:00002FFE10401040808047FC44A414A414A424A4E4A424A424A4248424140408 +6D10:00802080113C120084804080497E0B0815081108E10821082108210821280110 +6D11:0120412821242224022086204AFC422012202250E25022502288228823040202 +6D12:00002FFE10A010A087FC44A444A414A414A424A4E51C26042404240427FC0404 +6D13:0040204017FC1040804043F84A480A4812481258E0E0215022482C4620400040 +6D14:00402040104013FC8040404047FE1010101027FEE01022102110211020500020 +6D15:001021101108120884044BFA4208120813F82208E20823F82208220822280210 +6D16:000023F81208120883F84000400017FC10402040EFFE204020A0211022080C06 +6D17:00402240124013FC84404840404017FE11202120E120212022222222241E0800 +6D18:0080208813E8109080A047FE4880090013FC1480E90021F82008200820500020 +6D19:00402240124013FC84404040404017FE10E02150E15022482444284220400040 +6D1A:0100210011F8131084A0404051B0164E104023FCE040244027FE204020400040 +6D1B:0080208011F81208851040A0404010A013182C06E3F822082208220823F80208 +6D1C:08001FF0282007C01830E00E1FF010101FF001047D88095011202118C5060200 +6D1D:00802040104017FC84044888408017FC11102110E21021A0204020A021100608 +6D1E:000027FC1404140485F44404440415F415142514E51425F42404240424140408 +6D1F:0040204017FE104087FC404443FC1240144027FEE04220AA20A4211022080C06 +6D20:004020401090110883FC40244920092011FC1220E02027FE2020202020200020 +6D21:0040204017FC1040804043F84840084017FE10E0E15021502248244428420040 +6D22:0100217C11241224822446FE4A2412241224227CE22422202220222022400280 +6D23:00402040124811488150404047FE104010E02150E15022482444284220400040 +6D24:0040204010A011108208440643F8104010402040E3F820402040204027FE0000 +6D25:0040204013F8104887FE40484BF80840104013F8E040204027FC204020400040 +6D26:000027FE10201020804043FC4A040A04120413FCE20422042204220423FC0204 +6D27:0040204017FE1080810041FC4304150419FC2104E10421FC2104210421140108 +6D28:00802040104017FC800041104208140411102110E0A0204020A0211022080C06 +6D29:00402040104017FC8444444447FC1444144427FCE02820122032204A21860E02 +6D2A:011021101110111087FC41104110111011102FFEE00021102108220824040804 +6D2B:004020401080110083FC42944A940A9412941294E2942294229422942FFE0000 +6D2C:000027F81408140887F84488448814E815282528E6A8244A244A288A29061202 +6D2D:000023FE1200120083FC42204A200AF812201220E22023FC2200220023FE0000 +6D2E:0090209010901492829440984090119812942492E0902090211221122212040E +6D2F:080008007F7C08243E2408447F540888090001047D88095011202118C5060200 +6D30:000023FE12001200820043FC4A040A0412041204E3FC22002200220023FE0000 +6D31:000027FC1208120883F84208420813F812082208E20E23F82E08200820080008 +6D32:01042124112411248124412445B4156C19242124E12421242124222422040404 +6D33:010021001100111E87D242524252125212522492E29221122292225E24520800 +6D34:020821081110100087FC41104110111011102FFEE11021102210221024100810 +6D35:00802080110011FC8204440443E41224122423E4E224222423E4200420280010 +6D36:02002200120013FC840444044A24114414942554E634241427F4200420280010 +6D37:000027FE104010808110420847FC104410402040E7FC2040204020402FFE0000 +6D38:008020881488129082A040804FFC112011202120E120212422242224241C0800 +6D39:000027FC1000100083F84208420813F812082208E3F82208200020002FFE0000 +6D3A:0080208010FC1104828844504020104011FC2304ED0421042104210421FC0104 +6D3B:0010207813C01040804047FE40401040104023F8E20822082208220823F80208 +6D3C:0040204013F810408040404047FC100010402040E3F820402040204027FC0000 +6D3D:0040204010A011108208440643F81000100023F8E20822082208220823F80208 +6D3E:0008203C17C01400841C45E04520152215242528E51025102508294429821100 +6D3F:0040204017FC10A0811042084DF6100017FC2080E10023F82008200820500020 +6D40:005020501050105083FE42524A520A52125213FEE25222522252225223FE0202 +6D41:0080204017FE10808110420847FC100410002248E24822482248224A244A0846 +6D42:020821081110100083FC40404840084017FE1040E04020A020A0211022080406 +6D43:00402040104017FC80404248515010401FFE20A0E0A021102110220824040802 +6D44:0100210013F0121084204BFC4044104417FE2044E04423FC2044204021400080 +6D45:00A02090108010B887C0408040BC17C010882090E060204420A42114260C0004 +6D46:0840484028FC09041A8828504860898001047D880550092011102108C5060200 +6D47:0080208010BC13C08050402448D40B0C100017FEE090209021122112220E0400 +6D48:00402040107E1040804043F84A080A4812481248E248224820A0211022080404 +6D49:010021FE11101510857C45544554155415542554E5542154225C221024100810 +6D4A:00402040104017FC844444444444144417FC2444E040204820442FFE24020000 +6D4B:000427C414441454855445544554155415542554E55421042284224424140808 +6D4C:01202128112412248220463E4BE0122412242228E22822102212222A22460282 +6D4D:0040204010A011108208440641F01000100027FCE04020802110220827FC0204 +6D4E:0080204017FE1208811040A0404011B0160E2110E11021102110221022100410 +6D4F:0204410421042FE4009484944294529411142114E29422942444284430140008 +6D50:0040202013FC1000810840904BFE0A0012001200E20022002200240024000800 +6D51:000023FE12021444804043FC488008A0112011FCE020202027FE202020200020 +6D52:004044402240227C005080904E10521012FE2210E21022902310221020100010 +6D53:00402040104017FC848448884140114413482530E92021102108214421820100 +6D54:000027F81008100883F84008400817F810102010EFFE22102110211020500020 +6D55:000023F81208120883F842204A200A10120814C6E420280021C0203020080000 +6D56:0010207817801088844842504200102017FC2020E22021202120202020A00040 +6D57:005020481048104087FE40404A440964116810D0E15022482444204221400080 +6D58:000023FC1204120483FC42004A180AE0123812E0E23C23E022222422241E0800 +6D59:0208421C226022400FC08240427E52C813482E48E2482248224822482A880508 +6D5A:008020801110120887FC400441101288148421F0E31024A0204020A023100C0C +6D5B:0040204010A011108288444641F0101010202040E3F822082208220823F80208 +6D5C:0010203813C01200820043FC4220122012202220EFFE20002120221024080804 +6D5D:01102108110017FE814841504964094811501264E24822522462244229BE1000 +6D5E:000023F8120812088208420843F8104010402240E27C22402240254028FE1000 +6D5F:0210221012101420853E4D444DA4152415282528E51025102428242824440482 +6D60:0208211010E01110820840804FFE1140124027FCEA4422442254224820400040 +6D61:0040204013FC1040804047FE5402180411F02010E0202FFE2040204021400080 +6D62:000027FC1000100083F842084A080A08120813F8E0002208210821102FFE0000 +6D63:0080204017FC1404880843F04000100017FC2120E120212022242224241C0800 +6D64:0040202013FE1202844440404BFE084010901090E11021202224224224FE0842 +6D65:000023F81208120883F8400047FC144414442444E7FC24002402240223FE0000 +6D66:004840442FFE2040004087FC4444544417FC2444E44427FC2444244424540408 +6D67:000023F812081208820843F84800080017FC1040E04023F8204020402FFE0000 +6D68:0080204017FE140288444040404017FC10E02150E15022482444284220400040 +6D69:00402240124013FC84404840404017FE10002000E3F822082208220823F80208 +6D6A:0080204013F81208820843F84A080A0813F81240E24422282210228823060200 +6D6B:000047FE240229140208840443F8504010402040E7FC20402040204020400040 +6D6C:000027FC1444144487FC4444444417FC10402040E7FC2040204020402FFE0000 +6D6D:00002FFE104017FC8444444447FC1444144427FCE24021402080214022300C0E +6D6E:0008203C13C010048244412848000BF810101020E7FE20202020202020A00040 +6D6F:000027FC1040104083F84088408817FE10002000E3F822082208220823F80208 +6D70:008421C417041114811441144FD4111413142394E55425042904210421140108 +6D71:000023FC1200120082F842004A000BFC12A012A4E2A822902290248824A408C2 +6D72:010021F813081490806041984646104013F82040E3F8204027FC204020400040 +6D73:0088208410BE17C08032400E48000BFC120413FCE20423FC2204220422140208 +6D74:0110210812041444804040A041101208140623F8E20822082208220823F80208 +6D75:000227821484148886904582448214841FC82490E482248224842488289011A0 +6D76:0040202013FE12028424412049FC092012201020E7FE20202020202020200020 +6D77:0100210011FC120085F841084948092817FE1108E248222823FC200820500020 +6D78:000023F8100811F8800843F8400017FC140423F0E110211020A0204021B0060E +6D79:00402040104017FE8040424842481248155428A2E0A021102110220824040802 +6D7A:010821081108113E81AA456A452A152A192A213EE12A21082108210821080108 +6D7B:000027FC140414A48514460C540415F415142514E51425F42514240424140408 +6D7C:0100210011F01210822047FC4A441244124423FCE2A420A0212022222422081E +6D7D:0008203C13C01044822441284900084013FE1088E10823902060205021880604 +6D7E:0040204013FC10408040404047FE109012942292E49229122110221024500820 +6D7F:000023FC1204120483FC42044A040BFC12041204E3FC20002110210822040404 +6D80:000023F81208120883F84208420813F812082208E3F82120212022222422181E +6D81:01022102110411088FD041024302138415482550E90221022104210821100160 +6D82:0040204010A01110820845F64040104017FC2040E25022482444284421400080 +6D83:000027FC14441444844447FC444414C414E42554E64424442444240427FC0404 +6D84:0040204017FC144487FC444447FC10001FFE2100E20023FC2004200420280010 +6D85:000027FC1404140487FC4404440417FC10402040E7FC2040204020402FFE0000 +6D86:0000203E1788148884884488448817BE14882488E48824882788248820080008 +6D87:000023FC100011248248449052481124100023FCE04020402040204027FE0000 +6D88:0040224811481150804043F84A080A0813F81208E20823F82208220822280210 +6D89:002020201120113C8120412047FE100010202124E12422282410202020C00700 +6D8A:000023FC10441144814442844894090812401020E0A42282228A228A24780000 +6D8B:0040202013FE1202840440504048104017FE2040E0A020A02110211022080406 +6D8C:000027F8101011A0804047FC4444144417FC2444E44427FC2444244424540408 +6D8D:0040204413F41048804847FE4020104013F82110E22025FE2820202020A00040 +6D8E:0008201C1770111081104250425C175011502550E550227C2200250028FE1000 +6D8F:0000200C1770111081104210427C171011102510E510227C2200250028FE1000 +6D90:012043A82E24222402209FFE4220522412A42328E2282E102232224A2A860402 +6D91:004040402FFE2040004087FC4444544417FC2040E0E0215022482C4620400040 +6D92:000023F81088108887FE408848880BF811001100E3F825082908210821F80108 +6D93:000021F81108110881F840004BFC0A04120413FCE204220423FC220422140208 +6D94:004022481248124883F8404048A0091012881446E04023F02010202020200040 +6D95:02102110112017F88048404847F81440144027FCE0C421442254244828400040 +6D96:012021101110120082FE460056041A8412842248E24822482250221022FE0200 +6D97:0010209010881108820445FA41081108110821F8E0902090209021122212040E +6D98:004020801110120887FC4104410013F814402040EFFE204020A0211022080C06 +6D99:0040202013FC1204820443FC4A000A20122013FEE22022502250248825040A02 +6D9A:020821081110102083F842084A080A0813F810A0E0A0212021222222241E0800 +6D9B:0040204017FC104083F8408047FE1090111021FEE21022902450281020500020 +6D9C:0020202013FE102081FC40004BFE0A0214041090E0902090209021122112020E +6D9D:0108210817FE1108800047FE54021884108027FCE08421042104220424280810 +6D9E:00402040104017FC804042484148115017FE20E0E15021502248244428420040 +6D9F:00202420122012FE804040504E9012FE12102210E3FE22102210251028FE0000 +6DA0:000027FC1444144485F4444444E4144415F42454E45424742444244427FC0404 +6DA1:000023F812081208820843F84040104017FC2444E4A425142614240424140408 +6DA2:000023F81208120883F84000400017FC14042444E444244424B4210826041802 +6DA3:0100210011F0121084204BF84248124812482248EFFE20A020A0211022080C06 +6DA4:0080208011F813088490406041981646104027FCE04022482244244421400080 +6DA5:008040402FFE200003F88208420853F8100023F8E01020602040204021400080 +6DA6:0200217C1504140485F444444444144415F42444E444244425F4240424140408 +6DA7:0200217C15041404840445F44514151415F42514E51425F42404240424140408 +6DA8:00404F442144214801488F50484058FE18502F50E1482148214421442A620440 +6DA9:000023FC10441244824444844094110812202020E13C21202120212027FE0000 +6DAA:0080204013FC100082084108411017FE10002000E3FC22042204220423FC0204 +6DAB:0080404027FE2402080483F84208520813F82200E20023FC2204220423FC0204 +6DAC:0040204017FC104080404FFE411010A017FC2040E0402FFE2040204020400040 +6DAD:001C23E0108412448148411057FE1402100023F8E108211020A0204021B0060E +6DAE:000247E22422242A07EA848A448A548A17EA26AAE6AA2AAA2AA232E2208A0084 +6DAF:000027FE1420142085FC4420442017FE14002420E42025FC242028202BFE1000 +6DB0:000027BC108412948108429454A41840100027BCE0A422A42128229024A80846 +6DB1:000021FC110011F8810041F851001FFE12802248E25022202210228823060200 +6DB2:0080204017FE11208120423C4244166412942348E24822302220225022880306 +6DB3:00402020102013FE8202449441081204100021FCE02020202020202027FE0000 +6DB4:0080404027FE24020A04820043BC54A414A426A4E9342128222222222422081E +6DB5:000023F8101010208444455444E4144414E42554E64C25442484240427FC0004 +6DB6:0010207813C01040804047FC424812481FFE2248E24827FC2040204027FC0000 +6DB7:0040204017FC104083F842484BF80A4813F81040E0E0215022482C4620400040 +6DB8:000027FC1444144487FC4444444415F415142514E51425F42514240427FC0404 +6DB9:003823C01040104087FC415042481486108027FCE110221021A0206020900308 +6DBA:000023FC1204120483FC42204A200BFE12201220E2FC22842284248424FC0884 +6DBB:0040204010A01110820845F64040104017FC2040E04023F82208220823F80208 +6DBC:0080204017FE1000800043F84A080A0813F81040E25022482444284421400080 +6DBD:001C23E0122013FE822042924B0A0A0611FC1104E10421FC2104210421FC0104 +6DBE:0040204417681150815042484544108013F82208E20823F82208220823F80208 +6DBF:00004FFE20802184024484684AB0413012A82468E8A421242222242020A00040 +6DC0:0040202013FE12028404400043FE102010202120E13C212022A02260243E0800 +6DC1:0080204013FC10008108409047FE1040104027FEE08821082090206021980604 +6DC2:000023F8120813F8820843F848000BFC101017FEE01022102110201020500020 +6DC3:00402248115017FC808041004FFE121014082BF4F212221022502224220401FC +6DC4:0124212412481490824841244124100017FC2444E44427FC2444244427FC0404 +6DC5:0200420C227022400F408240427E564817482AC8EA4832482248224822480288 +6DC6:0210212010C013308C8840804FFE110013F82608EBF8220823F8220822280210 +6DC7:0108210817FE1108810841F84908090811F81108E10827FE2000209021080204 +6DC8:000023FE1202120283FE42104A920A92129212FEE21022922292249224FE0802 +6DC9:000023F81248124883F842484A480BF8104017FCE0E021502248244620400040 +6DCA:0100210011F81208841048204180163C14042404E7BC24042404240427FC0404 +6DCB:011021101110111087BC41104110133813B82554E55429922110211021100110 +6DCC:0040224811481150804047FC4404140415F42514E514251425F4240424140408 +6DCD:000027FC1444144485F44444444417FC140425F4E514251425F4240424140808 +6DCE:0040204017FC104083F8408047FC111012482446E1F0204027FC204020400040 +6DCF:000023FC120413FC820443FC48000BFC10401040E7FE204020A0211022080406 +6DD0:03F82208120813F88208420843F8100017FC2404E40427FC2404240427FC0404 +6DD1:0100210011DC11148114411447D4101411142114E58825482948211425140222 +6DD2:0040204017FC104083F8404847FE104813F82080E7FE21082390206021980604 +6DD3:020842082FFE2208028880404FFE4100110021F8E10821082208220824280810 +6DD4:0040204017FC1040804043F84A080BF8120813F8E20823F8220822082FFE0000 +6DD5:0040204013F81040804047FC4110120814442040E3F820402040204027FC0000 +6DD6:00402040107E104083FC42044BFC0A0413FC1244E04027FE2040204020400040 +6DD7:0100210011FC12048484449442A4108417FC2084E1C422A42494208420A80010 +6DD8:0100210011FC1204850441E44284108417F42084E2A422A423E4200420280010 +6DD9:0080404027FE2402080483F04000500017FC2040E25022482444284421400080 +6DDA:0040202013FC1204820443FC4A000A28122413FEE22022502250248825040A02 +6DDB:01042104150417D4891441144FF4111417D42554E5542554254425C421140108 +6DDC:000027BC14A414A484A447BC44A414A414A427BCE4A424A424A424A42AA4114C +6DDD:000027BE14AA14AA84AA47AA44AA14AA14BE27A0E4A024A024A228A22AA2111E +6DDE:02084228222822280FA482444254569217102AA0EA203228224422FC22440200 +6DDF:00902090109013FC829442944A940BFC12941294E29427FE2000209021080204 +6DE0:000027FC1444144487FC4444444417FC10002000EFFE22082208220824080808 +6DE1:004022441244144880A041104608104410402248E248245020A0211022080C06 +6DE2:00142012101017FE801040104BD20A5212521254E3D4200820EA271A22260042 +6DE3:00002040139C12048204439C4A040A0413FC1090E0902090209021122212040E +6DE4:0210411020102FA8042884444402579014882488E48024A0249028882A881100 +6DE5:008020F81088110881F0401048100BFE10201222E17420A82124222220A00040 +6DE6:0040204010A011108208440641F01040104023F8E0402248214821502FFE0000 +6DE7:0040202013FE12028444402048280888109012A4E2C224822188228824780000 +6DE8:003C27C012441128800043F84848084817FE1048E04823F82048204021400080 +6DE9:0040204017FC104080404FFE42081484188221F8E208251020A0204021B00E0E +6DEA:0040204010A0111082084DF6400017FC14A424A4E7FC24A424A424A424140408 +6DEB:0008203C17C01084844442484210103C17C02040E0402FFE2040204027FC0000 +6DEC:0080204017FC10008110411042A8144410002040E7FE20402040204020400040 +6DED:0080204017FC1404840447FC4440144017FE24E0E95029503248244428420040 +6DEE:01402120112013FE822046204BFC1220122023FCE2202220222023FE22000200 +6DEF:0080204017FE1100820847FC400413F8120823F8E20823F82208220822280210 +6DF0:0040204010A0111082884446400013F010102020E04021242522250A290800F8 +6DF1:000027FC140414A4811042084040104017FC2040E0E0215022482C4620400040 +6DF2:00402040107C104083FC42444A700BC01244123CE20022F0249024922912120E +6DF3:0080204017FC100083F842084BF8080013F81010E02027FC2040204021400080 +6DF4:0100210013FC1494889441244244148411282210E0402124252A250A28F80000 +6DF5:00A024A414A414A487BC4404440417FC14042404E7BC24A424A424A428A41004 +6DF6:00402040104017FC8040424842481248155420E0E15021502248244428420040 +6DF7:000027FC1404140487FC4404440417FC10002420E42227AC2430242225A2061E +6DF8:0040204017FC104083F8404047FE100013F82248E24823F82208220822280210 +6DF9:0040208017FE11108248444643F81248124823F8E248224823F820422042003E +6DFA:00A0209010BC17C88050406451941E0C10A02090E0BC27C82050206421940E0C +6DFB:000023FC1040104087FE40A04110120814462040E04822642252245221400080 +6DFC:010001087D1005A009603118C506020008100A146AD42C582A544A94A9521020 +6DFD:0108210817FE110881084020482009201120113CE1202120212021202FFE0000 +6DFE:010006C01830EFEE01003FF811100920FFFE000001087D90096011202518C206 +6DFF:0040208013F8120883F842084BF80840104017FCE44424442454244820400040 +6E00:0040204017FE10A08150424845F6104011502110E7FE21102110211022100410 +6E01:0040474421682150024884444940408010002040E74421682250244829460080 +6E02:03F82208120813F8820842084BF80880104017FCE110211020A0204021B00E0E +6E03:0108210817FE11088148404047FE1080110023FCE50429042104210421FC0104 +6E04:009020901090179E8090409048900B9C10901090E090279E2090209020900090 +6E05:2040104017FC004083F840404FFE080013F8120813F8E20823F8220822280210 +6E06:0844448420042FD404948494449454941FF42494E49424942484288428941088 +6E07:000023F8120813F8820843F849000BFC14041224E3D4221421F4200420280010 +6E08:0040202017FE11088090406041981606110821F8E10821F82108210822080408 +6E09:002020201120113C8120412047FE100010282124E122222A2410202020C00700 +6E0A:04442444165415548564444447FC144414C424E4E55425542644284428441044 +6E0B:002020201120113C8120412047FE100010002204E10820902108220424020000 +6E0C:000023F81008100883F84008400817FE10402444E2E821502248244621400080 +6E0D:0040204017FC104083F8404047FE100013F82208E2482248224820A021100608 +6E0E:0040204013F81040804047FC4004112810A02220E12027FC2050208821040604 +6E0F:0040204013FC10A08110420857FE100813C82248E248224823C8200820280010 +6E10:01004102211C2FD002108210451E57D411142114E1D42F142514212421240144 +6E11:000023F81208120883F8404047FC1444144427FCE444244427FC20422042003E +6E12:0040208013FC1224822443FC4A240A4413FC1090E11027FE2010201020100010 +6E13:003C27C010841444824842104840084013F81040E04027FC20A0211022080C06 +6E14:0100410023F0221004208FFC5444544417FC2444E44427FC200020002FFE0000 +6E15:04442244128417D48114411451141FF411142114E29422542444244428140008 +6E16:0080204017FC1444804043F84248124813F82248E24823F82248204020400040 +6E17:00802090110813FC804047FE411012481C862310E02020C42308203020C00700 +6E18:000023F81090106087FC40A44128122014602040E7FC20E0215022482C460040 +6E19:0100210013F01410882047FC440414A415142444E0402FFE20A0211022080C06 +6E1A:0080208817E8109080A04FFE4080110013F82608EA0823F82208220823F80208 +6E1B:00142012101017FE8410441045D01412141225D4E554254825DA242A28461082 +6E1C:000027FC1040108087FC44A444A414A41484244CE0402FFE20A0211022080C06 +6E1D:004020A01110120885F6480047C41454145427D4E454245427D4244425540488 +6E1E:0208211017FE1040808043F84A080A0813F81208E20823F82208220823F80208 +6E1F:0080204017FC100083F8420843F810001FFE2802E3F820402040204021400080 +6E20:23FC120083F84A080A0813F8E20023FC21000100FFFE054009203118C1060100 +6E21:0040202017FE1488848847FE448814F8140025FCE48424882450282028D81306 +6E22:40002FF8280888684B88488808882BE82AA84AA8CBE8488A48AA50EA57262002 +6E23:0040204017FC10E081504248444613F8120823F8E20823F8220820002FFE0000 +6E24:021082105FD00210823E5FD2505220922F124112C21243925E2242224A4A0484 +6E25:000023FC1204120483FC42004BFC0A40128813FCE224222025FC2420282013FE +6E26:000023F81208120883C84248424817FC140425F4E514251425F4240424140408 +6E27:0080204013FC10008108409047FE1442184423FCE24422442254224820400040 +6E28:000023F81248124883F842484A480BF8100017FEE24022442228229023080206 +6E29:000023F81208120883F84208420813F8100027FCE4A424A424A424A42FFE0000 +6E2A:0008203C17C0104083F842484A480BF8104017FCE444245425F4240424140408 +6E2B:00902290129017FE8290429042F0120013FC2040E7FE20E0215022482C460040 +6E2C:000227C21442145287D24452445217D214522452E7D2200222822242244A0804 +6E2D:000027FC144417FC844447FC400013F8120823F8E20823F82208220822280210 +6E2E:0110211017FE1110800047FE4008100813C82248E24823C82248200820280010 +6E2F:0110211017FC111081104FFE4110120817F42A12E21023F02204220421FC0000 +6E30:004020A0111012088DF6400043F81208120823F8E110211027FC211022100410 +6E31:01002100113E17C8854845484548154817C82508E108214821C82E48243E0000 +6E32:0080404027FC2404080883F8400053F8120823F8E20823F82208200027FC0000 +6E33:0000277E11241124813C47244424143C14242724E126217C210421042A040404 +6E34:000023F8120813F8820843F849000BFC14441244E2A4220423F4200420280010 +6E35:020842082FFE22080208800047FC544414442444E7FC24442444244427FC0404 +6E36:0110211017FC11108150404043F8124812482248EFFE204020A0211022080406 +6E37:0080204017FC11108208440443F81208120823F8E110211021122212240E0800 +6E38:02102110111017BE8220424043BC128412882288E2BE22882488248829A81010 +6E39:0200220013FE1402888247FA400217F2100227F2E00227F2241227F220140008 +6E3A:401020102F10891049144F52095229922F104914C9044F084910402040400180 +6E3B:00402040124812448454406049800E0013F81208E3F8220823F8220823F80208 +6E3C:0208211017FE1040804043FC4840084017FE1000E04027FC20A0211022080C06 +6E3D:0128212417A4112081204FFE4020102417A424A8E4A82490279224AA20460082 +6E3E:000027FC1444104087FE40404BF80A4813F81248E3F8204027FE204020400040 +6E3F:0040204017FC10E0815042484C4613F810002000E7FC20402248244429420080 +6E40:002027A810B014A483184110420815F410402040E7FC204020A0211022080404 +6E41:02102210122812288F444282427C130012002E7CE2442244224422442A7C0444 +6E42:000027BC14A414A487BC400043F810001FFE2100E20023F82008200820500020 +6E43:010043BC2E102210023C8F904210523C12102F90E27E22102210221024100810 +6E44:000023FC1224122483FC42004AFC0A84128412FCE28422FC2484248428FC1084 +6E45:004040402FFE204007FC8444455454E4144427FCE0E0215022482C4620400040 +6E46:0080204017FC1000820841104FFE100013F82208E20823F82208220823F80208 +6E47:0080204017FC120881104FFE400013F8120823F8E20823F82208220822280210 +6E48:020842082FFE2208020883F84208520813F82040EFFE20E0215022482C460040 +6E49:0208421C2270221003108AFE4A104A101210227CE244224422442244227C0244 +6E4A:0040204017FC104083F8408047FC1110120825F6E04023F8204020A021100608 +6E4B:0080208013F8110887FE40004BF80A0813F81040E7FC2040244027FE20400040 +6E4C:0040204010A01110828844464BF80A0813F81208E3F822442228229023080204 +6E4D:004024441444144487FC40004FFE1040108027FCE4A424A424A424A424A4040C +6E4E:000027FE1040108087FE4492449214F214922492E4F224922492249227FE0402 +6E4F:000027FE1040108083FC42044A040BFC120413FCE204220423FC200021080204 +6E50:021042102220227C0FC482444244574416FC2A44EA44324422442244227C0244 +6E51:000027FC104412408278424055FE180013F82208E3F8220823F8220822280210 +6E52:000023F81208120883F840004FFE120813F82208E3F82208227E2F8820080008 +6E53:001021101108120485FA408841081228141023F8E2A822A822A822A82FFE0000 +6E54:0208410821102FFE000087C44454545417D42454E45427D42454244425540488 +6E55:00102010177C111481FE4214427C1710117C2510E5FE22102210250028FE0000 +6E56:0100211E111217D28112411E411217D21452245EE45227D224522022202A0044 +6E57:01042104110417C4813E410447C4102411142114E7C42104210421C42E140408 +6E58:02004200227C22440F448244427C574416C42A44F27C224422442244227C0244 +6E59:0080204017FE1090829844944114123014402040E7FE204020A0211022080C06 +6E5A:00402488152815E8844844A845E8140815E82528E5E8252825EA292A292A1166 +6E5B:0108210817FE110881F8410849F80908110817FEE25022882304220023FC0000 +6E5C:000023F81208120883F842084A080BF8100017FEE040224022782240254008FE +6E5D:0220222413A8123082A243224A5E088013FC1204E20423FC2204220423FC0204 +6E5E:0040207E1040104087FC4404440417FC140427FCE404240427FC211022080404 +6E5F:0040208013F8120883F842084BF8080017FC1040E04023F82040204027FC0000 +6E60:004024441444144487FC4100410017FE11202220E2A422A82550245028880106 +6E61:03F82248124813F8824842484BF80840104017FCE444245425F424142404040C +6E62:000027FC100013F88208420843F8100017FC2444E44427FC2444244427FC0404 +6E63:000023FC120413FC822043FE4A100A8A13061000E3FC220423FC220423FC0204 +6E64:02102110111017BE822842484BAA0AAE12BA12EAE2AE22A824AA24A229A2101E +6E65:0080204017FC14048110420844441050104827FEE04020A020A0211022080406 +6E66:000023F8120813F8820843F848400A4013FC1440E04023F82040204027FE0000 +6E67:000027F8111010A087FC444447FC144417FC2444E08027FC2084210422280410 +6E68:000023FC120413FC820443FC4A040BFC10501048E7FE204020A0211022080C06 +6E69:0008203C17C010408FFE404047FC144417FC2444E7FC204027FC20402FFE0000 +6E6A:010021F8120813F0801047FE40801144166820B0E128266820A4212226A00040 +6E6B:43902E102210821242524FD40258269027104AA8CA2852284248424442840302 +6E6C:0610381008527E5408901C282A444882090001047D88095011202118C5060200 +6E6D:01082088109017FE809040904BFC0A941294130CE20423FC2204220423FC0204 +6E6E:000027FC10A010A087FC44A444A414A417FC2040E04027FC204020402FFE0000 +6E6F:000023F8120813F8820843F850001FFE120023FCE49429242244248421280210 +6E70:008021F81208151080E043184C0613F810402240E3FC244023F820402FFE0000 +6E71:0040204017FC104083F8404047FC104017FC2080E10023F82D08210821F80108 +6E72:003C27C012441128800043FC4880088017FE1100E1F822882250242028D80306 +6E73:004040402FFE2040004087FC451454A415F42444E44425F42444244424540408 +6E74:01082090100013FC809040904092149212942298E09020902090209027FE0000 +6E75:0208211017FC104083F8404047FC1100110023F8E4102820204020A023180C06 +6E76:0080210013F8120883F8420843F8104010402764E16821502248244429420080 +6E77:0040204017FC104083F8408047FE1110120827FCEA0A220823F82208220803F8 +6E78:0080204017FE100083F8420843F8100017FE2402E9F42110211022122412080E +6E79:000027FE140015FC8524452445FC1524152425FCE420242025FC2820282013FE +6E7A:0100217C114412448244467C4A10121012FE2238E25422542294231222100210 +6E7B:0040202017FE100081F8410849F8080013FC1204E20423FC2204220423FC0204 +6E7C:0100261C14041404871C4404440417FC10002000E7FC2040204020402FFE0000 +6E7D:0248424824902FFE049082484248500017FC2444E44427FC2444244427FC0404 +6E7E:010020801FFC112085284924400017F0101027F0E40027F82008200820500020 +6E7F:000027F81408140887F84408440817F811202120E9242528233021202FFE0000 +6E80:011041102FFE2110000087FC4040504017FC2444E554255425F4240424140408 +6E81:0088208813FE1088800043FE42021424102023FEE07020A820A8212422220020 +6E82:0102210217C21112811247D24552155217D22112E392254229222102210A0104 +6E83:0040204013F8124883F840404FFE100013F82208E2482248224820A021100608 +6E84:00402444144417FC808041F84208151010E02318EC4623F820402FFE20400040 +6E85:00104F94289228900A9E8AF04A905A9E1AF02A94EA942208250A249A28261042 +6E86:42002200257C84A448245724022422282FA84228CB104A9052A842284A440482 +6E87:004022481150104087FC41504248140410802FFEE1102210232020C023300C08 +6E88:00402240114017F88088409048FC0904110813FEE202242A2AAA228224140008 +6E89:000027BE1488148887A844A844A817BE14102518E49825A826AA244A20460080 +6E8A:000027BC14841484848447BC4400140017BC2424E42427A82410242824440482 +6E8B:000023F811081110811C42E442A4125414A82100E3FC22942294229427FE0000 +6E8C:001023D410581452828C4108420415FA10902090E7FE2090211021122212040E +6E8D:000027FC10A014A482A840A04FFE100013F82208E20823F82208220823F80208 +6E8E:02102210127C12108F90421042FE170016902A10EA7C32102210221022FE0200 +6E8F:0040202017FE142085FC442447FE142415FC2420E5FC25042504290429FC1104 +6E90:000027FE1420144085FC450445FC150415FC2524E42024A829242A2230A00040 +6E91:004022441148104083FC42044A040BFC120413FCE204220423FC200021080204 +6E92:0040204013F8104087FE40004BF80A08120813F8E0A4212823102D4821860100 +6E93:011020A0100017FE80A043F840A817FE10A823F8E0A021B022A82CA620A000A0 +6E94:020821081110100087FC404048400BF810401040E7FE2000254824A428A40000 +6E95:000047FE240229F4000083F840805144166820B0E128266820A4212226A00040 +6E96:2140112083FC524017F82A40E3F8224023FC22000100FFFE0100010001000100 +6E97:003823C0104017FC81504154475811541354254CE0E021502248244428420040 +6E98:0040204013FC104080404FFE4080111013F82008E7FC24A424A424A42FFE0000 +6E99:0040204017FC104083F8408047FC111012482446E24821502248244421400080 +6E9A:0110211017FC1110804040A049100A0815F61000E00023F82208220823F80208 +6E9B:0080204017FC140481104208483C0BD012901290E2902288228824A424D40892 +6E9C:0080277C1424152484A445544648108017FC2444E44427FC2444244427FC0404 +6E9D:0110211017FC111083FC41104FFE104013FC2244E3FC22442FFE220422140208 +6E9E:000023F81148111080A0404041B0164E104023F8E248224823F8204427FC0004 +6E9F:000027FC1404100083F842084BF80A0813F81080E04027FC2000211022080404 +6EA0:01082088109013FC804041F848400BFE10801100E1FC22202420282023FE0000 +6EA1:001020101710157C8510451045FE1708150825FEE50825482728200820280010 +6EA2:020821081110100087FC400041101208140423F8E2A822A822A822A82FFE0000 +6EA3:022042202250248805048EFA540055FC15542554E5FC2554255425542504050C +6EA4:000023FC124013F8824043F84A400A4013FC1004E55425542554240420280010 +6EA5:005040482FFE204007FC844447FC544417FC2444E0082FFE2208210821280010 +6EA6:010825481548155087DE402440141FD410142794E49424A824C8249428141022 +6EA7:000027FC10A010A087FC44A444A417FC10402040E7FC20E0215022482C460040 +6EA8:0110211417D2111081104FFE4010111417D42114E3942548290A211A21260142 +6EA9:0080210013F81208820843F84A000BFE120013FCE00425542554280420280010 +6EAA:003C27C0124411288080411043E01040118823FCE044204027FC20A02110060E +6EAB:400023F822480A488AA8530853F822082000C7FC44A444A444A444A44FFE0000 +6EAC:0208211017FC1040804043F84840088017FC10A0E1282134223C22222422081E +6EAD:000027FC144417FC844447FC41101208148421F8E20825082090206021980E06 +6EAE:020024FE17101510857C45544754145414542754E554255C2510271025100010 +6EAF:0440425E2292201207D2811E45525552155227DEE152211222122222242A0844 +6EB0:004022481248124883F8400047FC100013F82208E20823F8211020A027FE0000 +6EB1:0040204017FC104083F8408047FC1110126825C6E04023F820E0215826440040 +6EB2:00402140165C14448444475C4444144417FC2040E7F8211020A0206023981C06 +6EB3:000021F81108110881F840004BFC0A0413FC1204E3FC220423FC209021080204 +6EB4:0040208013F8120883F8420843F8120813F82050E04827FE20A0211022080C06 +6EB5:000021B81628142887A844A847CE148017B82428E7A824A8249028902AA81146 +6EB6:0040202013FE1202849441084A64089011081204E5FA21082108210821F80108 +6EB7:000027FE140215FA844244C2452A146A14B2252AE46A24AA2522244227FE0402 +6EB8:0040204017FC104083F8404047FE1080111023E0E04827FC2044224825440080 +6EB9:0040204017FC10408FFE4882411013E010402088E7FC20442248244429420080 +6EBA:000027BC1084108487BC4420442017BC108424A4E294229424A4208425280210 +6EBB:000023F8120813F8820843F8400017BC108424A4E294218C26B4208422940108 +6EBC:00002FFE1210121084A44738421014A417BC2040E04027FC204020402FFE0000 +6EBD:000023FE120012FC820043FE4AA80A9012C81286E20823FE2288244824080818 +6EBE:0080210017FC1444844447FC4444148417FC20C8E1502168227C22422442083E +6EBF:001080945F54155495585510557C1F10351055FED51055105F10511040100010 +6EC0:0080204017FC1080810843F04860098417FE1002E7FC244427FC244427FC0404 +6EC1:40102F1029288A284A444CBA0A10291029FE4910CD584A544892491248500820 +6EC2:0080404027FC221001208FFE4882504417FC2100E10021F82108220822280410 +6EC3:0120211012081486891043F84008100017BC2084E4A4229424A4208422940108 +6EC4:0040204010A01190824847FE4A0813F8120823F8E20023F82508250829F80108 +6EC5:00142012101017FE8410441047F21492149225B4E6D42488254A293A2A261042 +6EC6:00002FFE100013F88208420843F8100017FC2514E4A427FC2444244424540408 +6EC7:0040204017FC104083F8420843F8120813F82208E3F822082FFE211022080404 +6EC8:0080204017FE100083F8420843F8100017FC2404E5F4251425F4240424140408 +6EC9:000023F8120813F8820843F848400A4811501040E7FC2120212022242424081C +6ECA:0100210011FC120085F840004BF8088812A811C8E7F8208A21CA26AA20860082 +6ECB:01082088109017FE810841084210129414A42738E1082210221024A427BC0084 +6ECC:44202420247C88444AA84A101A282AD62A104AFECA104A544892491248500820 +6ECD:00402244124413FC80404FFE4000104013FC2244E24423FC2040204427FE0202 +6ECE:08202AA42CA84920145022887FFE4002810401047D88095011202118C5060200 +6ECF:01104208251420A000E083184C0653F810402040E7FC2040224821502FFE0000 +6ED0:0208220813BE14888AA8413E42081448184827FCE0E0215022482C4620400040 +6ED1:000023F8120813C882484FFE480213F8120823F8E20823F82208220822280210 +6ED2:000027FC100813C88248424843C810001FFE2008E3C82248224823C820280010 +6ED3:0080204017FC1484804043F8411010A017FC2040E04023F82040204020400040 +6ED4:003E4FC020842444024882104100561C14042404E71C24042404240427FC0404 +6ED5:0020792448A849FC482078404BFE488849247A224D2448A849244A2248A09840 +6ED6:0080204017FE100083F842084FFE120813F820A4E12823102510294821860100 +6ED7:0210221013DE1528888440784780108010F82780E08020F82F8420842084007C +6ED8:000047FE24022914020885F44040504017FC2000E00023F82208220823F80208 +6ED9:000027FE1450148885FE469044FC149014FC2490E49024FE2480240027FE0000 +6EDA:0080204017FC111082484484412013F010102088E15023202510294821860100 +6EDB:0004203E17C0124481244128420013FC14402040EFFE20402444244427FC0004 +6EDC:0040208013F8120883F842084BF8088017FC1110E24824442BFA204020400040 +6EDD:0080204017FC111080A047FE48000BF8124813F8E24823F8224A2042203E0000 +6EDE:0150215017FC11508150400047FE1442184423F8E24822482248225820400040 +6EDF:0420842044781F488490447C44541E542454447CC4405F4044424442443E0400 +6EE0:000023FC110811F8810841F8410E17F8100827BCE0A422A42128229024A80846 +6EE1:0108210817FE1108800047FE4090109017FE2492E492256A26462402240A0404 +6EE2:0110211017FE111080004FFE4802100017FC2040E04023F8205020482FFE0000 +6EE3:000023FE120012FC820043FE4AA80A9012C81286E20022FC2284248424FC0884 +6EE4:0040207C104017FE8442447047C41444143C2420E410245425422942294A1238 +6EE5:00902490149E149084A844A444C41080100027FCE4A424A424A424A42FFE0000 +6EE6:008040402FFE20A002A882A444A45040104027FEE0E021502248244428420040 +6EE7:4410221022108FA0403E454404A428A431284528C21042104528492850440082 +6EE8:0080204017FE1402881443E04A000A0013FC1210E2102FFE2000211022080404 +6EE9:005040482E8022FE039092904AFC5A90149024FCEA902A90329020FE20800080 +6EEA:00004FBE20882510023E81224FAA52AA122A222AE22A222A221022142A220442 +6EEB:4440244024FC88884B505A201AD82B062AF84A88CAF84A884AF8488848880898 +6EEC:0040202013FC120483FC42004AF80A8812F81200E3FC232425FC2502290200FE +6EED:000027FC144417FC844447FC5248124817FE2248E24827FC20402FFE20400040 +6EEE:420023C222028FE44A284B920E4229C428084B92CA824A844A8A4C92547E0800 +6EEF:02A822A817FC12A882AA44E6480017FC14442040E3F822482248224822580040 +6EF0:0080204013F8111080A047FE400013F8120823F8E20823F82120212222220C1E +6EF1:408020402FFE880250044F90001C20102F90457CC50445284910492A514220FE +6EF2:0080211013F8121084A44FBE404210A013182C46E19026642188263021C00E00 +6EF3:0080204017FC111080A047FC44A41514160C25F4E514251425F4240424140408 +6EF4:0080204017FC111080A047FC444415F4144425F4E514251425F4240424140408 +6EF5:0080404027FE2402089480504524554A18FA2300E04024442444244427FC0004 +6EF6:01082108110817D0811E479451241FD4121423D4E2542248224824D424240842 +6EF7:00402040107E1040804047FC4404164C151424A4E64C24A42514264C27FC0404 +6EF8:0210411021102FDE0028878840085788103E2788E48824882488278824880008 +6EF9:0040207C104017FE8442447845C4143C140824F0E52424A827FE282028A01040 +6EFA:02204220243E25480DA895104528544614802040E1242522250A250A28F80000 +6EFB:0040202013FC1000810840904BFE0A2012A012FCE320222022FC2420242009FE +6EFC:0110211017BE111083B845544912100013F02210E290225022522212240E0800 +6EFD:002027FE142015FC842447FE442415FC142025FCE52425FC252429FC2924112C +6EFE:0080204017FC1110820845F44110111011F02088E15023202510294821860100 +6EFF:0110211017FC1110811041F0404017FC14442664E55426EC2444244424540448 +6F00:08007F7808483E4800863E782A483E304048808401087D90096011202518C206 +6F01:0100210013F0121084204FFC5444144417FC2444E44427FC2000252424920892 +6F02:00004FFE20A027FC04A484A447FC500017FC2000EFFE20402248244429420080 +6F03:008040402FFE2802120483BC422452241FA42028E2282B10329022282A440482 +6F04:00202222122213FE800043FE4A200BFC122013FEE200222025FC24202BFE0000 +6F05:024824901248100083F842484BF80A4813F81040E7FC20E0215022482C460040 +6F06:0040204017FC10E08158464440A0111012482C46E24821502248244421400080 +6F07:021042102450295C0150825046FE5A0012102250E25C225022B02290230E0200 +6F08:0100211013DC125485544288410812F414022000E3FC20402150224825440080 +6F09:0080204017FC14A084A047FC44A414A417FC2400E52425A82530292429A4111C +6F0A:004043F822482FFE024883F8404053F8124823F8E0802FFE211020E023180C04 +6F0B:00204F3C29442AA80A108C284AC6493819102950ED7E2A90287C281028FE0800 +6F0C:011041102FFE211001F0804047FC544417FC2040EFFE204027FC20402FFE0000 +6F0D:00004FFE282A28260FFE88224BAA4AAA1BAA2832E9962E2E284628822FFE0802 +6F0E:01244124222424240954814A429256101A102250E25C2250225022B0229E0300 +6F0F:000047FE2402240207FE840047FE542017FE2622E6AA2A222AAA3222222A0204 +6F10:08207E2008F8FF2814287F6A082AFF56098201047D88095011202118C5060200 +6F11:0100423E2788248804A887A844BE548817882010E4982718242824AA23CA0086 +6F12:0000277C11441144817C47104410147C14542754E154217C211021142AFE0402 +6F13:0080204017FE100082A8424842A813F8104027FCE484252425F424142404040C +6F14:0080204017FC1404800043F8404013F8124823F8E24823F82000211022080404 +6F15:00A020A017FE10A087FC44A447FC14A417FC2000E3F8220823F8220823F80208 +6F16:0208224817481290829E4FE4411412141FD42494E91421C82F08211425140222 +6F17:0040208013FC124482F443144AA40A4412A413FCE04020242522250A290800F8 +6F18:07FE240015FC140087FE451445481586140025FCE50425FC250429FC2904110C +6F19:00404FFE204027FC044487FC444457FC10422FFEE0102FFE2210211021500020 +6F1A:000027FC140014F88488448844F8140015DC2554E554255425DC240027FE0000 +6F1B:00402248115017FC804040804FFE111012482446EA4821502248244421400080 +6F1C:0110211017BC111083B845544912111010402040E7FC2040204020402FFE0000 +6F1D:000027BC108414A4829444A44084104013F82208E20823F82208220823F80208 +6F1E:000E27F010441224810843FC4A040BFC120413FCE20423FC2090211022120C0E +6F1F:0040444422482FFE080283F84208520813F82040E04027FC204020402FFE0000 +6F20:0110211017FC1110800043F84A080BF8120813F8E04027FC20A0211022080C06 +6F21:010021FC120015F8810841F8490809F8100017FEE10023FC24A4212422540088 +6F22:0110211017FE111081F040404BF80A4813F81040E7FC20402FFE20A02110060C +6F23:0020482025FE242001FC81244DFC552415FC2420E5FE242024202A2031FE0000 +6F24:0110411027BC211003B885544912408010802FFCE1102210212020C023300C08 +6F25:008040402FFE29120248844443F8504010402FFEE000204023F8204020400FFE +6F26:08203E3E08447FA82A10492808443FFE200020882ED022A02490488852868100 +6F27:0110411021102FDE012087C0445C57C4144827C8E1102FD021222122211E0100 +6F28:0020247C12841148803040CE4610127C1210227CE21022FE2210221025FE0800 +6F29:0420422022202F7E04808400477C551415102550E55C255029502B5030BE2100 +6F2A:0020492025FC222006508A8843FE520816E82AA8E2A822E822A822082A280410 +6F2B:03F8220813F8120883F8400047FC14A414A427FCE00023F8211020E023180C06 +6F2C:004027FC104013F8804047FE48000BF8120813F8E20823F8220823F821100208 +6F2D:0110211017FC1110804847FC40A0111012082514E11027FE2110211022100410 +6F2E:0040202017FE142085FC442447FE142415FC2420E56224B429282A2630A00040 +6F2F:000027FC144417FC844447FC4100121017E020C8E3042FFE2042224825440882 +6F30:00402444144417FC800047BC44A414A417BC24A4E4A427BC24A424A42AB41148 +6F31:0108210817C81108811E47D24564154017C82108E38825482954211421240142 +6F32:00004F3E2120213C01208F3C482048FE18502F52E1542148214821442A620440 +6F33:004027FC111010A08FFE400043F8120813F82208E3F820402FFE204020400040 +6F34:00402444144417FC8080404047FE14021BF42000E7FC20402250244829440080 +6F35:0108210812881250841E4B944124111417D42114E59425482948211425240242 +6F36:0040204013F8124883F8404047FC144417FC2040E08020482544251428F00000 +6F37:0200211E17D2101287D4445447D8101417D22092E11221DA2714211025100210 +6F38:02004202223C2FA002208FA04ABE4FA41AA42FA4E2242FA42224224422440284 +6F39:000027FC1040127882404FFE410011FC120023FCE00425542554280420280010 +6F3A:0040204017FC1040855442484554104015542248E55420A020A0211022080C06 +6F3B:000027BC108414A4829444A440501188162620C0E31020642388203020C00700 +6F3C:0040244417FC1120811043FE522016201BFC2220E22023FC2220222023FE0200 +6F3D:000027FC140417FC842044A8447014A8150424A0E4FC252024202BFE28201020 +6F3E:0208211017FC104083F8404047FC1040102021C0E0442768215022482D460080 +6F3F:0440247C24A83D5004287DFE24884448851801047D88095011202118C5060200 +6F40:000027FC14A414A487FC4000401C17E012482248E24825542554286220400040 +6F41:200024FE3810222022FC1E84008408FC0A84ECFC28842C844AFC4A48A8841102 +6F42:00402444144417FC80004208411017FC11102110E5142318211021102FFE0000 +6F43:0240444028FC3088035084204CD8570614F82488E4F8248824F8248824880498 +6F44:0108210817C81110811E47E44554155417D42114E39425482948211421140122 +6F45:0100210013FC144080804FFE4120121017FC2A20E3FC222023FC222023FE0200 +6F46:01104FFE211020000FFE8882511443E010402088E7FC20442250244829440080 +6F47:011041102FFE2110004087FC40445FFE104427FCE04025642554265428441044 +6F48:000027FC14A414A484A447FC40801144166820B0E128266820A4212226A00040 +6F49:00402444144417FC800047FC440417FC140427FCE000242427A8243225A2061E +6F4A:421022102510849E48105710027C22242FA44224CB284AA8529042284A440482 +6F4B:42102210251084A0483E5744002424A432A44AA8C8A8411043A85C2840440082 +6F4C:0080204017FC1514820847FC4080111013F82048E04023F8204020402FFE0000 +6F4D:04508448448008FE8B905E9044FC049028905EFCC8904090469058FE40800080 +6F4E:0108210815481390811E47D44564155415542754E5D4254825482554246404C2 +6F4F:000027F81090106087FC40A4412816A0104027FCE4A4251426EC24A424E4040C +6F50:0140212013FE122086204BFC4220122013FC2220E22023FE2200252424920892 +6F51:002423A81092151482084C0447BA10A817C62400E7BC208420A8209025280244 +6F52:010041F0221027FC0A24824443FC5080114426A8E130266820A8212426A20040 +6F53:004040402FFE204007FC844447FC544417FC2044EFFE204220242522250A08F8 +6F54:010027BC11141394811447A4414C1080111023E0E04827FC2044224825440080 +6F55:0100210013FC16A88AA842A847FC12A812A822A8EFFE200022A8225424540000 +6F56:00004FBE220827BC02088FBE400057FC14442444E7FC24002402240223FE0000 +6F57:0140212013FE16208BFC422043FC122013FE2240E0402FFE215022482C460040 +6F58:007827C01248115087FC41504248140613F82248E24823F82248224823F80208 +6F59:0004203E17C01244812843F84A080BFC120413FEE40226AA2AAA2A0230140008 +6F5A:004023F8104817FE804843F840401554175C2444E7FC2444275C255425540844 +6F5B:000027BC1108152887BC431855AA1946100023F8E208220823F82208220803F8 +6F5C:0110411027BC21100FFE811042A8544413FA2208E20823F82208220823F80208 +6F5D:004020A0111816E6800043F84A080BF8100017BCE08424A4229424A422940108 +6F5E:0010279014BC14A484C447A841101128114625C0E53C2524252425A42E3C0024 +6F5F:010026381408140887384408440817F8120027FCE80425542554280420280010 +6F60:000027BC14A417BC842044A4439C1000111027FCE11021102FFE211022080404 +6F61:021041102FD0201007BE84A447D4501417942094E11421C82F08211425140222 +6F62:0110211017FC111081104FFE404017FC144427FCE44427FC2000211022080404 +6F63:000027BC14A417BC84A447BC4484144415F42424E4A4244424A4250424140408 +6F64:000027BC14A417BC84A447BC440415F4144424E4E444244425F4240424140408 +6F65:000027FC10A010A087FC44A444A417FC12482150E7FC20E0215022482C460040 +6F66:0040204017FC10A08514420847FC1A0A13F82208E3F820402248244429440080 +6F67:02082110100017FC8444455444E4144417FC2000E3F8220823F8220823F80208 +6F68:0080210017FC14A484A44FFE4000103C17C02144E24424E8215022482C460040 +6F69:000027FC144417FC844447FC4110111017FC2110E1102FFE2000211022080404 +6F6A:020043DE251221120FD28292425E540013FC2204E20423FC2204220423FC0204 +6F6B:00402248115013F8808047FC41101288151621E0E04823FC20442248244400C0 +6F6C:000027BC14A414A487BC40004BF80A4813F81248E3F8204027FC204020400040 +6F6D:000027FC10A017FC84A447FC400013F8120823F8E20823F8204027FC20400040 +6F6E:0100411E27D22112011287DE445257D2145227DEE11221122FD22122212A0144 +6F6F:000023FC100413FC800443FC48000BBC112417BCE00823FE2108208820A80010 +6F70:004023F8124813F8804047FE48000BF8120813F8E20823F8220823F821100208 +6F71:004027FC104013F8800047FC440413F8100023F8E20823F82208211027FC0000 +6F72:01104E102254223802108F7C4244534416FC2644EA44227C2244224422540248 +6F73:000023FC1204120483FC42224AFC0A2813FE1220E2FC238422FC248424FC0884 +6F74:0020492025FA222406288BFE4220524016FC2B44E244227C224422442A7C0444 +6F75:0288228817C81290829E4FD4402417D4145427D4E45427C824482454246404C2 +6F76:000027FC1444155484E4444447FC104017FC2040E0402FFE2000252424920892 +6F77:021023DE15281084804043F8404817FE104823F8E04023FC204027FE20400040 +6F78:042084205FFC0420956855AA652600002FF84808CFF848084FF8480848280810 +6F79:0040204017FC10E08150464C40401110111027BCE11023B82554291221100110 +6F7A:07FC240417FC140085F8441047FE14201460279CE484250829DE2F0831080318 +6F7B:003823C0104017FC8150424844A4111012482C46E24821502248244421400080 +6F7C:004023F8111010A087FC40004BF80A4813F81248E3F8204023F8204027FE0000 +6F7D:0208211017FC10A084A442A84FFE100013F82208E20823F82208220823F80208 +6F7E:00402248115017FC8150424844441208120823BEE4882AA8213E220824080808 +6F7F:000027FC144415F4849447FC440415F4151425F4E44424F4254425FC244407FC +6F80:00004FBC229426B40AD484A445AC584011082108E5A8252C252825A82E7E0000 +6F81:40402040227C824042404FFE0000220822084228CBAE4A284A284BA85E7E0000 +6F82:010825481548155087DE401447E4101417D42114E7D4210821082FD420240042 +6F83:0BFE104061FC090411FC610405FC090431FCC088010C7D90096011202518C206 +6F84:002027A410A812928114420855F4180213F82208E20823F8220821102FFE0000 +6F85:004023F8104817FE804843F8404017FE100023F8E24823F8224823F8200007FE +6F86:0040404027FC20400FFE811047BC51101190263EE0002FFE2120212222220C1E +6F87:0110455425B8291002A88444400057FC14842888E7F820882088210822280410 +6F88:0208210817C81210849E4FD44064179414942794E49427882488249424A405C2 +6F89:00084788208821100FDE849444A4579414942794E49424C827882C9420A400C2 +6F8A:0108209017FE109083FC42944B1C0A0413FC1204E3FC200827FE210820A80010 +6F8B:000023F8120813F8820843F8404017FE100023F8E20823F820402248244400C0 +6F8C:04804482249C2FD004908790449E579414942494EFD42014251428A430240044 +6F8D:010441042FE42104013E87C4400457E414542454E7C42444228420E42F140408 +6F8E:010441042FE82110010087C4400457C814502442E7C22444228420E82F100420 +6F8F:000023F81208120883F8400047BC14A414A427BCE04024442444244427FC0004 +6F90:000047FC20402FFE0842835840405358100027FCE0002FFE2100220827FC0204 +6F91:000027FE10A017BC84A444A447BC10A017FC2444E44427FC2444244427FC0404 +6F92:000020FE10101720827C42444244127C1244227CE3C42E44207C202820440082 +6F93:01402140127E1480897C4144427C16441A7C2220E23C224422A82210222802C6 +6F94:01082128122817BE84A844C8448814FE17802480E4BE24A224A227A224BE0022 +6F95:01102FFE1110100087FC415051501FFE11502150E7FC20402FFE204020400040 +6F96:000027BC14A417BC84A447BC4444144415F42444E4E42554264C244424540408 +6F97:000027BC14A417BC84A447BC440415F4151425F4E51425F42514240424140408 +6F98:0110211017BC111083B845544912100013F82208E20823F82208220823F80208 +6F99:00002080173C140487BC440447FC120013FC2400E7FE2002255224AA28AA0004 +6F9A:010027FC14441554844447FC44E4155410002FFEE20023FC2004200420280010 +6F9B:010043F024102FFC144487FC444457FC10002FFEE00023F8220823F8220803F8 +6F9C:0200217C1504144485F4444445F41554157425D4E55425F424E425542444044C +6F9D:008040402FFE28820548851448F4400017FC2444E7FC244427FC244424540408 +6F9E:0040207C104017FE844245F8444415FC150825F8E40025FE24202BFE28881306 +6F9F:00404FFE200027FC040485F4451455F4140427FCE00823F020402FFE21500E4E +6FA0:000027FC14A414A487BC40A047BC14A414A427BCE4A424A427BC24A220A2007E +6FA1:03F84208220823F8000087BC44A454A417BC2040EFFE21602250244838460040 +6FA2:00402248115017FE8402480443F8120813F82000E7FC244427FC244427FC0404 +6FA3:0108410821142FD4012287C0445C57C8144827C8E13E2FC82108210821080108 +6FA4:000027FC14A417FC804043F8404017FC111020A0E3F820402FFE204020400040 +6FA5:4400273C291492144FA44ACC0A802FA82ABE4AC8CF884A884ABE4A8848881188 +6FA6:00004FBE20882510023E81224FA252BE1222223EE2222222223E22002A140422 +6FA7:00A020A017FC14A487FC44A447FC100017FC2000E3F8220823F8211020A00FFE +6FA8:0210221013DE15288884400047FC104012482248E248255428E220402FFE0000 +6FA9:0A803138228838382288393822887FFE410281047D88095011202118C5060200 +6FAA:000047FC20402FFE084283584040535810A02398EC4623F02010232020C00020 +6FAB:0110211017FC111083F842484BF80A4813F81040E7FC2444245425F42414040C +6FAC:0440227C1084112886204250488C0BF8120813F8E20823F8220823F821100208 +6FAD:0040202017FE10288224427E44C81748117E2248E4C82F7E21482248247E0840 +6FAE:004040A023182DF6000087FC455454E417FC2000E3F8220823F8220823F80208 +6FAF:008040DC228423D404488A9443244C4012482150E7FC20E0215022482C460040 +6FB0:0040204010A01110820845F6400017BC14A424A4E7BC22102210252829441082 +6FB1:40002FDC285488544FD44A940AA62FC02A9C4A94CFD448145288524864540822 +6FB2:00A024A412A810A087FC411040A017FC104023F8E04027FC215022482C460040 +6FB3:0080210017FC14448554444447FC14E415542404E0402FFE20A0211022080C06 +6FB4:000023FC1294129483FC400047FE100013FC2204E3FC20A2211423082D440182 +6FB5:0200210217DC10108450429047DE1114111427D4E11425942554292425240244 +6FB6:00404FFE200027FC040485F4451457FC100023F8E20823F8220823F820000FFE +6FB7:03F8220813F8120883F8400047FC14A417FC2040E7FE210021F8210822280410 +6FB8:0014201217FE141085D0441445D4155815CA2416E442282422A2228A24780000 +6FB9:020043F8241027FE0D48962447FE540015FC2400E5FC240025FC290429FC1104 +6FBA:0080204013FC1108809047FE400013FC120423FCE20423FC20402524250A08FA +6FBB:00882448125010FC802040504694123812502298E23422542290222025FE0800 +6FBC:00102008178814BE848044944788147E14082788E6BE2A882A882B8832880008 +6FBD:0040207C104013FE824242784BC40A3C120013FEE24023A4225825B4245209B0 +6FBE:00102410127C101080FE4044462812FE1210227CE21022FE2210221025FE0800 +6FBF:0110211017BC111083B845544912100013F82000E7FC20402248244429420080 +6FC0:021044102F9028900FBE88A44FD4541412142FD4E4142788248828942A941122 +6FC1:000027FC14A414A487FC420053FE14421BFA224AE3FA2052207A278A22140008 +6FC2:002027FE1508149087FC445045FC145417FE2454E5FC245024D829542A521050 +6FC3:009023FC129413FC829443FC48000BFC120012F8E20023FE2520251425480986 +6FC4:000044F8228822E800A880A84DFC450415742554E5742504251425082A0011FE +6FC5:00404FFE280223F8000883F8400857FC144423F8E248204027F8211020E00F1E +6FC6:004027FC104011108FFE411043F8120813F82208E3F8220823F8211022080404 +6FC7:0040204017FC1248824845544FFE100017FC2404E5F4251425F4240427FC0404 +6FC8:03D42252125213D080104FFE425013D4125423D4E25422F82F4A244A20560062 +6FC9:002840242F40297E09C88F48497E59481F48297EE94829482F48297E20400040 +6FCA:0020213C112017FE801040144BFE0A1013F01254E25422D42368244A28960322 +6FCB:0110211017BC111083B845544912100017FC2044E24022782240254028FE1000 +6FCC:1C20702211B4FCA810A87D2456A27C4055FC7D0411047DFC11041F04F1FC4104 +6FCD:01104FFE2110220003FC84A44BA4416412542494E108204020242522250A08F8 +6FCE:01F8210811F8150A85FA450A45FA1402179E2090E0902F9E2492249224920892 +6FCF:000027BE1108110887BE4108410817BE10002080E0442512252229C023040CFC +6FD0:03FC220413FC120483FC40444BF8085017FE1040E1FC270421FC210421FC0104 +6FD1:021042102F9C222402488FBE4AA25AAA1FAA222AE72A2AAA3288221422220242 +6FD2:4200227E2A108BA04A7C4A441FD4205422544AD4CAD44B545120422844441882 +6FD3:004027FC111010A087FE44A047F814A817FE24A8E7F824A025B02AA82CA610A0 +6FD4:000027FC124814448FFE444446EC155416EC2444E6EC255426EC244424540408 +6FD5:000027FC140417FC840447FC421014A417382210E4A427BC2000254824A408A4 +6FD6:000027FC14A414A487FC404843F8105017FE2040E1F8230825F8210821F80108 +6FD7:01102FFE111013F8820843F8420813F810802FFEE24827FC2A4A224822580040 +6FD8:0080204017FC144482A842944474100013F822A8EFFE200027FC204021400080 +6FD9:0110455425B8291002A884444FFE480210402248E248245020A0211022080C06 +6FDA:0110455425B8291002A88444400057FC14442040E7FC20E0215022482C460040 +6FDB:011027FC111017FC840443F8400017FC10802144E6A8217026A8212626A00040 +6FDC:004023F8104817FE804843F8404017FE100022A4E45223F822A822A82FFE0000 +6FDD:010827FE110811F8810841F8410817FE11082294E5E2204823FC2040224804C4 +6FDE:008023F8120813F8820843F8400017FC144427FCE44427FC20002FFE21100210 +6FDF:0080204017FC111080A44F58455415521B582000E20823F8220823F822080408 +6FE0:004027FE100011F8810841F8400017FE140223F8E180264421B8266821A60E60 +6FE1:000047FC20402FFE084283584040535810002FFEE04027FC24A424A424A4040C +6FE2:07BC208414A4129484A4404047FC1110111022A8E44420402FFE204020400040 +6FE3:4210221022289FA842444F8A08A82F9828C84FA8C20E5FB84208420842080208 +6FE4:004027FC104013FC800047FE400213F8104027FEE00027FE200827FE24A80798 +6FE5:008041F82690206001A08FFE480247FC104027FCE44427FC244427FC22080404 +6FE6:003E27C01244112883F8404047FC100013F82008E3F8200823F82544252A08FA +6FE7:028442842AA426C4029E8FE440045454128C2FE4E10427C4210421C42E140008 +6FE8:0210212017FC1210821044A44738121014A427BCE08021482554251428F00000 +6FE9:010827FE1148122087FE4A2043FC122013FC2220E3FE220027F8211020E00F1E +6FEA:021042102F9C22240FC8823E4FAA502A1FAA28BEEFA028A02FA228A22AA2091E +6FEB:001027D0151017DE845047E8450417C4100023F8E2A822A822A822A82FFE0000 +6FEC:0040207C104017FE840243FC424814A4111023F8E60C2BFA220823F8220803F8 +6FED:011027FC1110104083F8404047FC1080111023F8E00023F822A822A82FFE0000 +6FEE:012821AA116C122882FE464456281AFE1210227CE21022FE2210222822440282 +6FEF:000027BC108414A4829444A44120121017FC2A20E3FC222023FC222023FE0200 +6FF0:422822242440857E49C85F48027E244829485F7EC14840485548557E50400040 +6FF1:0080404027FE24020BFC8148425057FC120427FCEA0423FC220423FC21080204 +6FF2:0200421C2F942214071480264F8048BC17142014E2142F8827082A9432240242 +6FF3:0108452827BE294807BE831845AA594613F82208E20823F82208220823F80208 +6FF4:0110455425B8291002A884444FFE484210402764E16821502248244429420080 +6FF5:002027FE140213FC822443FC4A000AFC128412FCE28422FC228424FC24480884 +6FF6:07BC24A417BC14A487BC4404443415C4144427FCE44425F4251425F424140408 +6FF7:0108799009603518C206011047FC211081F0404017FC1664E55426EC2444244C +6FF8:01102FFE1110104081B04E4E43F8120813F82208E3F8220025FC250429FC0104 +6FF9:000027FC144417FC844447FC404017FC10402FFEE5242892204027FC20400FFE +6FFA:00142792149E14F08794448A449617E214942492E79E20702514248A28960062 +6FFB:0010277C1554157C851046FE4500157C1544257CE544267C2444247C24280444 +6FFC:044444E428A82AAA0EEE84A44AAA4EEE12422040EFFE20E0215022482C460040 +6FFD:02084FBE22082FBE0208851448A257FC140427FCE40427FC240427FC21100208 +6FFE:0020203E102017FE842245F8442215FE152425FCE52425FC28402AA4328A047A +6FFF:000027FE148817FE848845FC452415FC152425FCE42027FE262A2AFA2A0A1206 +7000:07FC408023F8220803F882084FFE588215482514E8F4210023F8250820F00F0E +7001:0208211017FC104083F8408047FC114813FC260AEBF8220823FA2234228C0302 +7002:010043F024102FFC144487FC444457FC15242892E3F8220823F8220823F80208 +7003:40002F7C2944897C4F444944097C2F20297E49AACF2A404A4A924922494A1104 +7004:0210221013DE15288084400047BC14A417A424A4E7A42434252826A024200020 +7005:0110455425B8291002A884444FFE480213F82040E04023F8205020482FFE0000 +7006:00404FFE204027FC000087FC44A457FC120823F8E20823F8220823F821100208 +7007:0040202017FE148885FC448847FE142015FC2524E5FC252429FC288831040202 +7008:07BC24A4129414A48FFE484247FC104013F82248E3F8224823F8204027FC0040 +7009:00404FFE28822338020883B8420853F8120027FCE80425542554280420280010 +700A:010023DC12541366824047DC42541348125424A2E00023FC2294229427FE0000 +700B:004047FC2404283807C08248415057FC12482404EBFA224823F8224823F80208 +700C:0080204017FC14A087FC44A447FC1400152425A8E53025A4251C28002AA41452 +700D:002027FE140015FC852445FC452415FC142025FCE42027FE25242AFA282013FE +700E:010827FE1108100083FC42944A940BFC102813FEE220232422A82292242A08C6 +700F:020225E214A216AA852A466A410A128A144A2BAAE10A27CA2122254221EA0E04 +7010:0114211217D2111081104FFE429016D2129226D2E29426D4228A22CA2F160022 +7011:03F8220813F8120883F8411047FC11101FFE2110E248255420E02150224800C0 +7012:00404FFE2248255408E2815042484DF6100027FCE40425F4251425F4240407FC +7013:028842A826A82BF0001E822445D45C1415D42494E49425C82488249425D40422 +7014:02009FDC42140F9480145FD450660F80201C4F94C2145FD447084A8852540222 +7015:0100213E150815D0853E45224FE2103E1122257EE56225A228BE210022140C22 +7016:07FC204017FE14428B5C4040475C112013FC2620EBFC222023FC222023FE0200 +7017:00404FFE284227FC004083F8404057FC104027FCE4A427FC20402524252A08FA +7018:0040207C104013FC824443F04A440AFC12A812F8E2A822F8220025FC25540BFE +7019:4400223C2FA4802448BC45240FA4223C22244FA4C23C4B104A9852A84A2A0446 +701A:0410841044281F4484825F0051EE1F2231AA5F66C4225F6644AA442244AA0444 +701B:0080BFFC48000FF880004FF848080FF820805C9CD7D45D54555C5C9655562E22 +701C:00084F8820082708053E852A472A502A1FAA2DBEEAA82F882A8A2A8E2ABA0990 +701D:000027FE14441598848847DE448815DC16AA2488E4202520253C2920292017FE +701E:022042202FB822480F90827C4F9450141FFE2894EF9428FC2F9428902A900930 +701F:011027FE115013F8804847FE404813F81554275CE44427FC2444275C25540954 +7020:0110455425B8291002A8844447FC5484111023E0E04827FC2044224825440080 +7021:00104E7E2B202ABC0AC88CBE4A004BBC1AA42ABCEAA42CBC28A428AC29400A3E +7022:002049FC252421FC002083FE4D0445FC150425FCE50425FC248825042BFE1000 +7023:010041BC252427A804908AA8414652A017BC20A0E3B820A027BC20A02FFE0000 +7024:008040402FFE200007FC84A447FC524811502208E44420A8211023082D460180 +7025:07BC24A4129414A4804047FC400011F0111021F0E00027FC240424E424A404EC +7026:00109F90427A04128C1452FE47080A10333C46E4CAA4523C422442244A3C0424 +7027:0210211017DE1010845E428247DE101017DE2450E7DE245027DE2450245204CE +7028:0108210817CE1112812447DE4552155E17D2211EE392255E2940211421120122 +7029:01804E3E22083F90023E87224AA2527E1022273EE5222522257E298029141022 +702A:20207F3EAA447FA82A103F2804441FF010101FF010101FF001843D480930730E +702B:02009FDC42140F9480145FD450660F80241C4894CF1442945FC84A8852540622 +702C:4200223E2F888210423E4FA20AA22ABE2FA2423EC72246A24ABE520042140222 +702D:0410841044281F4484825F7C55001FE235AA5FAAC4EA5FAA44AA44E244AA04A4 +702E:07FC40402FFE2842035880404358500011102FBEE11023B82554291221100110 +702F:008822AA12DC14888154422247FE140211F82108E1F8200023FC220423FC0204 +7030:40002EFE2254829242FE4E9208D628BA28D64E92C2D642BA42D642924A9A0484 +7031:40002FFE29128FFE40004FFE08802AA2288A494ACA2A488A4AAA5082514A2224 +7032:0208820845080890905E6FA4401400143DD45554D5545DC84888489455542222 +7033:011027FE1110104087FE44A047FC14A417FC2500E5FC250025FC280435540008 +7034:07BC24A417BC14A487BC44A447BC131814A42080EFFC2110232020C021B00608 +7035:0248215017FC1150864C43F8424813F8124823F8E11027FC21102FFE22080404 +7036:00404F402A7E2A800A008F7C49444944197C2F00EAEE2AAA2AAA2AAA2FEE00AA +7037:000027BC14A4129484A443F8424813F8124823F8E11027FC21102FFE22080404 +7038:0448444C2AAA20080FFE82884EE8528A1EEA228CEEEC228822EA2F1A24260042 +7039:404020A0211082084DF640000EEE2AAA2EEE4000CFFE49224FFE4922492A0804 +703A:01F0221017FC120483FC42244BB80A2211FE1210E7FC224423FC20D0214A063E +703B:011447D221102FFE001087D0455257D2155227D4E29427C8228A2FFA22A60442 +703C:004027FC100013B882A843B8411017FC111027FCE1102FFE212823102D480186 +703D:004027FE149213FC809043FC409017FE110823FCE50A21F82240227C254008FE +703E:07BC24A417BC14A487BC444445F4144415F42554E5F4255425F424E42554044C +703F:021043D0241E2FE405548FF4454857D411B22220E7C0208827FC204423500488 +7040:07FC40402FFE28420358804043585000127C2FC4E27C27442AFC3244227C0244 +7041:4FBE28A22FBE88A24FBE484209F2291229F24912C9F248464F6A49524A4A0CC6 +7042:003C27C01244112887FC44A447FC1008178824FEE78824A82798250825A80690 +7043:015023F8155417FC855447FC455417FC100027FCE00023F8220823F821100FFE +7044:03FC210811F8110881F8410E47F8100817FE2294E39C2294239C22D627BC0084 +7045:07FC444427FC244407FC80004FBE5AAA1FBE2AAAEFBE2040204027FC20400FFE +7046:009027FE109013E8828843CE4A500BD412A213E2E00023FC2294229427FE0000 +7047:049242942FFE211007FC804043F850401FFE2480E7BC2494279424C82F9400A2 +7048:07BC24A417BC14A487BC44A447BC112013FE2220E7FC2A2023FC222023FE0200 +7049:0A98951454900A3E9F2851685F3E00283F28553ED5285F2850A850BE4FA00020 +704A:0FBE45282FBE2308059A892647FC500013F82208E3F8200027FC249425F4044C +704B:00404FFE29202FFC09248FFC49004BFE18022AAAE8442BF828402FFC291013F8 +704C:01104FFE211027BC04A487BC4140512013FE2220E7FC2A2023FC222023FE0200 +704D:0FBE48A22FBE28A20FBE8C424A924FDE19262D5AEFD22912292A2A462C0A0804 +704E:05089FC8555C1FC895485FFE40081FD020144FBEC8804FBE48AA452A43AA1C7E +704F:40002FBE28888F9048BE4FA202223FEA202A4FAAC8AA4FAA42084A9452520622 +7050:0110455425B8291002A884444FFE484210A02318EDF6204027FC224821500FFE +7051:0FBE400027BC24A406B484A4404057FE14A027FCE4A427FC251229DC291211CE +7052:052847BE294827BE031885AA494653FC120423FCE20423FC220423FC21080204 +7053:210447C88812F3BC20084B92F83E0380AAAAABAA01087D90096011202518C206 +7054:05109FD0555C1FE495485FFE402A1FEA202A4FBEC8A04FA048A2452243A21C1E +7055:040C820A5FC8051E92545574505E1FD422145FDED45455545754505E51501090 +7056:002027FE148817DE848845DC46AA1488145027DEE45025DC24502BDE28501050 +7057:081088FE48003EFE2A822ABAAAAA6AFE3E00287C08444A7C8E443A7C100000FE +7058:451825142F90853E472842680FBE2AA82FA8423ECFA842285FE8453E48A01060 +7059:0248215017FC140481F0411047FC155414E427FCE04027FC20402FFE22A40452 +705A:02AC444426AC244406AC84044FFE4A0A13F82208E3F8220823F820A02124061C +705B:4F1E29122F1E89124F1E4BBA0AAA2BBA29F24952C9F2495249F248424BFA0846 +705C:0080BFFC48000FF880004FF848080FF820005DDCD5545DD4555C5DD654962D62 +705D:40002FBE28888F9048BE4FA202223FFE20224FBEC8A24FA2423E4A8052540622 +705E:47FC20402FFE8842435845000FBC25242724423CCFA44AA44FBC42245FA4024C +705F:07FC240417FC152484A8452445FC155415FC2644E5F4255429F4284433F40008 +7060:0790251E17A8148487BE452A47BE100013F82208E3F8220823F820A02124061C +7061:011027FE111017BC84A447BC44A417BC144427FCE55425F4244424E425540448 +7062:004027FC124813F880404FFE4AAA13B8111027FCE1102FFE212823102D480186 +7063:444428E82E0E84E44A0A4EEE00A02AEA200047F8C00847F8440047FC40040038 +7064:444424E42A0A8EEE44044AEA0E0E20E02AAA4AEAC0404FFE415042484C460040 +7065:02001FF010101FF010101FF0092013107C7C44447C7C44447C7C92925454B2B2 +7066:00009FDE50441FC8905E5FD24892155E3DD2489ED5525DD2401E5540554C0012 +7067:42102A902F9C8AA44FC84ABE0FAA202A3FEA403ECFA048A04FA248A245221F9E +7068:04109F9C493406089FB6401C4F8808BE2F8048BECFA2423E5FA2423E42140222 +7069:42082A882F9C8A884F884ABE0F8820103FD4403ECF8048BE4FAA48AA452A1FFE +706A:428822E82F5E82EC475A4AE802082FFE29425494C55847F2420443E8420203E4 +706B:010001000100110811081110212021004280028004400440082010102008C006 +706C:0000000000000000000000000000000000000000000000002488224442448004 +706D:0000FFFE0100010011081108111021204280028004400440082010102008C006 +706E:010011081108229004401830E00E0440044004400440084010422042C03E0000 +706F:1000100013FE1020542058205020902010201020102028202420442040A08040 +7070:040004000400FFFE0480088008880A9012A014802140414082200210040E1804 +7071:1000100011FC1044544458445044904410441044104428842484450442288410 +7072:080408040804094449444A444C44884408440844144412442104210440148008 +7073:0800080008001FFC100422044244924412842204050404840844100460280010 +7074:1000100011FC1020542058205020902010201020102028202420442043FE8000 +7075:00003FF8000800081FF8000800083FF801001110111022A0044008203018C006 +7076:10201020102010205420582051FC902010201020102028202420442043FE8000 +7077:010011081108229004401830E00E082008200820FFFE08200820102020204020 +7078:040004000FE01040208003600C18700401001110111022A0044008203018C006 +7079:1010107813C01040544058405040907E17C010401040284224424442403E8000 +707A:1020102010201120552C5934516493A411241134112829222522450240FE8000 +707B:010001003FF8010001000100FFFE000001001110111022A0044008203018C006 +707C:10401040108010FC55045A045004910410841044104428042404440440288010 +707D:1110111022204440222011101110000001001110111022A0044008203018C006 +707E:020001007FFE400281040100110811081110212002800280044008203018C006 +707F:102010201020102055245924512491241124112411242924252445FC40048000 +7080:100011F8101014205840508051FE909210921092111229222622444240948108 +7081:00007FF80200420042007FFC0480088010842084C07C00002488224442448004 +7082:101010901090148858885124512492221440104010882884250443FE41028000 +7083:0440082010102FE8C4260420082010A06040010011101120228004401830E00E +7084:100013F81088148858885088508897F811081108110829082508410847FE8000 +7085:00001FF0101010101FF0101010101FF00100110811102280044008203018C006 +7086:10401020102013FE548858885088908810881050105028202450448841048602 +7087:104010401040148058FE51085288908810881050105028202450448841048202 +7088:100010F81088148858885106520091FC10841084104828502420445040888306 +7089:10801040104015FC59045104510491FC11041100110029002600420044008800 +708A:104010401040127C528454885920902010201050285028502488448841048202 +708B:1000100011FE1010541058205020906810A41122122228202420442040208020 +708C:1020102010501450588851045202908810881088108828882488450841088208 +708D:1008101C11E01500590051FC5144914411441128112829102510422842448482 +708E:010011081110212002C004301808600401001110111022A0044008203018C006 +708F:10401040104014405944514451489250104010A010A028902510410842048402 +7090:10201020102011FC54205820502091FC1020102010202BFE2420442040208020 +7091:10201020102014205BFE50205070907010A810A811242A222420442040208020 +7092:10201020102010A854A458A25122912012241024102828082410442040C08300 +7093:101011101090109054105910509090901010101E13F028102410441040108010 +7094:10401040104017F8584850485048904817FE104010A028A02510411042088406 +7095:10801040104013FC5400580051F09110111011101110291225124612420E8400 +7096:10201020102011FE5420592451249124112411FC1024282024224422401E8000 +7097:08200820FFFE0820082008200FE0082001001110111022A0044008203018C006 +7098:1008101C11E015005900510051FE911011101110111029102510421042108410 +7099:020004000FF81210692004C003000C0071001110111022A0044008203018C006 +709A:002000207C20442444A444A444A87D2044204450445044507C88448801040202 +709B:010011081108229004401830E00E08800888109030E0518096841084107C1000 +709C:10401040104013FE5440584051FC9040104013FE10422842244A444440408040 +709D:1040104010A014A059105208540691F011101110115029202504450440FC8000 +709E:10401020102014005BFE50405040906010501048104428442440444040408040 +709F:1000100011FC15045904510451FC91041104110411FC29042400400043FE8000 +70A0:100011FC11241124552459FC51249124112411FC112428202420442040208020 +70A1:1000100013FE14205820502051209120113C1120112029202520412047FE8000 +70A2:102010281024102055FE58205070907010A810A811242A222420442040208020 +70A3:1000100013FE1008540859E8512891281128112811E829282408440840288010 +70A4:100013FC108410845484590451149208140011FC110429042504450441FC8104 +70A5:10901090109013FC5494589453FC9290129013FE10922892251A451442108410 +70A6:10501048104814405BFE5080508090FC11441144112829282610422844448182 +70A7:1080108010FE15005A205120512C917413A41124113429282522450240FE8000 +70A8:10201010101015FE5902520450809088109010A010C0288224824482407E8000 +70A9:1040104010A014A0591052485426902013F810081010291024A0444040208020 +70AA:10201020112415245924512451FC902010201124112429242524452441FC8004 +70AB:10201010101015FE582050205044908411F8101010202844248245FE40828000 +70AC:100011FE11001100550059FC510491041104110411FC29002500450041FE8000 +70AD:0100210821083FF808000800FFFE10801088148824902940414082200C183006 +70AE:1080108011FC15045A0455F451149114111411F4110429282512450240FE8000 +70AF:100011FE110215025902517A514A914A114A114A117A294A25024502410A8104 +70B0:080008001FF020105F90109010901F901050102410040FFC0000488844448444 +70B1:02000400082010103FF800081FF0101010101FF00100111022A004401830E00E +70B2:102010201040108855045BFE5002900011FC1104110429042504450441FC8104 +70B3:100013FE10201420582053FE522292221252124A128A2B0226024202420A8204 +70B4:10201020102011FC5524592451249124112413FE102028502450448841048202 +70B5:10401040107C108455885A50502090501088130610602810240844C040208010 +70B6:1020102010201020543E58205020902011FC1104110429042504450441FC8104 +70B7:10401020100015FE582050205020902011FC1020102028202420402043FE8000 +70B8:11001100110015FE5A805280548090F810801080108028FC2480448040808080 +70B9:02000200020003FC020002003FF02010201020103FF000002488224442448004 +70BA:020012000A007FF0042004400FF8080810101FFC20042AA44AA4900400280010 +70BB:1000100013FE102054205840504090FC11841284148428842484448440FC8084 +70BC:1040104017FC108054805BE05120922013FC1020112829242622442240A08040 +70BD:1000100011FC1104550459045104910411FC1104100028902488450442028402 +70BE:100011FC110411045504590451FC9050105010501050289224924512420E8400 +70BF:1020104011F815085908514851289128110817FE110829082508410842288410 +70C0:1008103C13E01020552458A450A8902013FE1020102028202420442040A08040 +70C1:1008101C11E0110055205920512091FE1020102010A828A42522462240A08040 +70C2:1000110810881490580053FE50009000100011FC100028002400400043FE8000 +70C3:100011FC100810105430584850849302100011FC102028202420442043FE8000 +70C4:10401020102013FE540058885104920210881088105028502420445040888306 +70C5:102010201040148059FC51545154915411541154115429542554415443FE8000 +70C6:10801080113C120054805880517E930815081108110829082508450841288110 +70C7:10201020105014885904520251FC90201020102011FC28202420442043FE8000 +70C8:00047F84082408241F24212451240A24040408143008C0002488224442448004 +70C9:080008001FE020204040BFF820082288244828280100111022A004401830E00E +70CA:11041084108814005BFE5020502091FC1020102013FE28202420442040208020 +70CB:08400840104037FC50E091501150124814441842104000002488224442448004 +70CC:109010901090151059FE53105510913811381154115429922510451041108110 +70CD:10201120112011FC55205A20502093FE1090109010902890251245124212840E +70CE:00003FF808200820FFFE08201020202041201110111022A0044008203018C006 +70CF:020004001FF0101010101FF010001FFE10001FFC000409242494249440280010 +70D0:1020104011F8150859485128512893FE11081148112829282508420842288410 +70D1:10901090109014925A945098509091981294149210902890251241124212840E +70D2:10281024102414205BFE5020502093A0112011101110291025CA470A42068002 +70D3:1020102011FC14205820502053FE90001020102011FC28202420402043FE8000 +70D4:100011FE11021102557A59025102917A114A114A114A297A25024502410A8104 +70D5:0028002400203FFE202020202FA4222422642AA832282510249248AA50468082 +70D6:084008487F4408440840FFFE00400844294429442A28482A1412122A22464082 +70D7:10201010101013FE54205842508491F81010102210C42B082410442840C48302 +70D8:108810881088108855FE588850889088108813FE100028882484450442028402 +70D9:1080108010F815085B1054A0504090A01118120615F829082508450841F88108 +70DA:102010201050108855045A0251FC9000100011FC110429042504450441FC8104 +70DB:10201020102011FC552459245124912411FC112410202828242445FE40828000 +70DC:100013FE1000140059FC5104510491FC1104110411FC29042400400043FE8000 +70DD:00001FE0004000807D040588095011202118450682001FF00000488844448444 +70DE:10881088108814885BE85088518C91CA12AA1288148828882488448840888088 +70DF:100013FE120216225A22522253FE922212221252124A2A8A2702420243FE8202 +70E0:1040104017FE1080550059FC5304950419FC1104110429FC2504450441148108 +70E1:010011081108229004401830E44E04403FF804400440FFFE0000082010102008 +70E2:1040102013FE12025400583853C090401040107C13C0284024424442403E8000 +70E3:10401040104013FE54805890509091121152115412902A282428444440848102 +70E4:1040104411F4104854505BFE5040908011FE1240148028FC2404440440288010 +70E5:100011FE11201120552059FC510491041104110411FC29202520452041FE8000 +70E6:100013FE1020104055FC59045104912411241124112429442450448841048204 +70E7:2080208020BC23C0A850B024A0D4A30C200027FE2090209051124912420E8400 +70E8:10901094111415185B1055325152910E1120102013FE28202420442040208020 +70E9:10201020105014885904520250F89000100013FE102028402488410443FE8102 +70EA:108810481050100055FC58205020902013FE1020105028502488448841048202 +70EB:23F0102080C043FC11242124E2442484292820100100111022A004401830E00E +70EC:100011FC1104150459FC511051109108110412621410280024E0441840048000 +70ED:104010401040FDF8104810481CC83048D0AA10AA510622020000488844448444 +70EE:7F84082410243F2451240A24040408043014C10811101120228004401830E00E +70EF:11841068103014C85B04504053FE90A0112013FC152429242534412840208020 +70F0:1008103C11C01004554458A8500091F81010102013FE28202420442040A08040 +70F1:100013FE120216525A8A5306520292FA128A128A128A2AFA268A4202420A8204 +70F2:080C08F07E8008800EFE7888088829081208010011101120228004401830E00E +70F3:1028102413FE1020542059FC5124912411FC1124112429FC252445244124810C +70F4:100011FE100014925924524851249092100011FE102028202420442043FE8000 +70F5:1088108813FE10885400588050FC910412041484104428442404440440288010 +70F6:1000100613B8148858885108513E9388108812881288293E25004280447E8800 +70F7:1040102013FE16025C0451F85000900013FE10901090289025124112420E8400 +70F8:1080108010FE15005AFC508450A4909413FE10841124291425FE440440288010 +70F9:0100FFFE00001FF010101FF000003FF000600180010005000200488844448444 +70FA:1040102011FC1104550459FC5104910411FC1120112229142508454441828100 +70FB:1004100E13B8148858885128512E93A810A812A812A8293E25004280447E8800 +70FC:100013FE1040148059445224506890B011301228106828A42522422040A08040 +70FD:1040104010FC10885550582050D8932610F8102010F8282027FE442040208020 +70FE:01000910092012C0043019086914091012A004401830610C1FF0010001007FFC +70FF:100213C2124416485B5052C2524292441FE8125012422A4226444248445088E0 +7100:10001050104810845524582050509088110612F8108828882488448840F88088 +7101:0080008078FC49044A48484078B0030C0C02010011101120228004401830E00E +7102:1040104024FE6488A55024202450208801041110111022A0044008203018C006 +7103:1020102011FC10205420582053FE90481048114C114A2A4A2488448841288210 +7104:00003FF80408FFFE04083FF808001FF8280848088FF808080000488844448444 +7105:10201120112011FC55205A20502093FE1000100011FC29042504450441FC8104 +7106:100010FC1084108454FC580051FE9102110211FE1102290225FE4502410A8104 +7107:1020112410A410A8542059FC5104910411FC1104110429FC2504450441148108 +7108:1000087C3E442244227C3E4022422042413E9110111022A0044008203018C006 +7109:00007FFC010011F811001100FFFE08000FF810001FFC00042924249440280010 +710A:100011FC110411FC550459FC5000900011FC102010202BFE2420442040208020 +710B:2420242024203DFC0420FC20242024F84400010011101120228004401830E00E +710C:10401040108815045BFE500250889144124210F811882A502420405041888606 +710D:11081088109015FC5824502451FC9120112011FE106228A2252A422444208020 +710E:1000100C11F0FD00110011FE1D10F11011101210521024100000488844448444 +710F:00003FF0002000400180793C4944492849107928014405000200488844448444 +7110:100013FE1040104055FC5884508493FE1000100011FC29042504450441FC8104 +7111:100013FE122216225A2253FE52229262127212AA13222A222622420243FE8202 +7112:100010FC108410845484588450FC9000100011FE110229022502450241FE8102 +7113:10201020105014885944522250F890081010102011FC29042504450441FC8104 +7114:10401040107C148459085210513E912211221122113E292225224522413E8122 +7115:1080108010F815085A1055FC512491241124112413FE28502450448841048602 +7116:110010BE128216025A2252125252924212CA135612522A3226024202420A8204 +7117:100011FC1104150459FC5100510091FE1102117A114A294A267A420244148008 +7118:020002007FFC02003FF80400FFFE08201FFC20204420822002A0004024884244 +7119:1040102011FC100055085890500093FE1000100011FC29042504450441FC8104 +711A:082008207EFC08301C682AA4C922082009201110111022A0044008203018C006 +711B:7C7C44447C7C44447D7C4104410449244924494451844244422444244804500C +711C:100011FC1104110455FC5904510491FC1000111211D42918251045524192810E +711D:101C13E0122013FE56205A92530A920611FC1104110429FC2504450441FC8104 +711E:1040102013FE100055FC590451FC900011FC100810102BFE2420442040A08040 +711F:10881088108817FE5888508857FE900011FC1104110429FC2504450441FC8104 +7120:1040102013FE100054885888515492221000102013FE28202420442040208020 +7121:100010001FFC2AA04AA00AA07FFC0AA00AA00AA07FFC00002488224442448004 +7122:10201010101015FE5902525450889104100010FC102028202420442041FE8000 +7123:00007F0022FC3E4422443E44222822282F10F228424402820000488844448444 +7124:010000803FFE2210221025FE2C903450441044508520111022A004401830E00E +7125:1040102013FE12025504590051DE925212521352149A2894251045124212840E +7126:090008801FFC108030805FF8908010801FF8108010801FFC1000488844448444 +7127:10901090110815485A445492510893FC1044102010A42A82268A428A44788000 +7128:100013FC120412F456045AF4500091F8110811F8110829F82508450841288110 +7129:100013DE125216525A5253DE52529252125213DE12522A5226524252455288A6 +712A:1040102013FE120254885904520291FC100411FC110029FC2404440440288010 +712B:1088108813FE108854A8582051FC912411241154114C29842504450441148108 +712C:100011F81108150859F85108510891F8108011FC125428942524424440948108 +712D:08202AA42CA84920145022887FFE400280040FE00820082008221022201EC000 +712E:201020902710243EAC22B444A790A51025102510252825285528494449449082 +712F:10201020103E142059FC510451FC910411FC112410202BFE2420442040208020 +7130:10401040107C148459085200502091CE1102110211CE29022502450241FE8102 +7131:010011081108229004401830E00E08100A102A542C5448981410222842448082 +7132:2080204027FE2120A920B23CA244A664229423482248223052204A5042888306 +7133:10A01090108015FE5910531055FC9110111011FC11102910251045FE41008100 +7134:1040102013FE108055045BFE500291FC110411FC110429FC2504450441148108 +7135:100013FE1202168A5A5253FE5222922212AA12AA12AA2AFA26024202420A8204 +7136:102010281E24222033FE4A20A450145008881088210442020000488844448444 +7137:1040108011FC1124552459FC5124914411FC109011102BFE2410441040108010 +7138:00003E7C224422443E7C224422443E7C01001110111022A0044008203018C006 +7139:100013FE1202168A5A5253FE5242922213FE128212822A8226FA4202420A8204 +713A:100011FC110411FC550459FC5000902811C8108810882BFE2488448841088208 +713B:11F81108110815F85908510851F8900013FC120412042BFC2604420443FC8204 +713C:1020102011FC102054A8588853FE9088100013FE1090289025124512420E8400 +713D:00007CFC448444FC7C8444FC44847C84011402080100111022A004401830E00E +713E:10201020105014885944522251F890081050102010A42A82268A428A44788000 +713F:1040102013FE16205AFC5224522493FE1224122412FC2A202650445044888906 +7140:100013FE120216025BFE521052929292129212FE12102A922692449244FE8802 +7141:1088108813FE108854F8588850F89088108813FE110029482584450041FE8000 +7142:1088108813FE108854F8582051FC9124112411FC10202BFE2420442040208020 +7143:1020102013FE105054885B2651FC9020102013FE1000282025FC4420402083FE +7144:1008103C11E014205BFE502051FC912411FC112411FC282025FC442043FE8000 +7145:102011DC11141114551459D45126910011DC1114111429D42708450841148122 +7146:100013DE124216425A4253DE5200923E13D2121212142BD42608421442248242 +7147:100013FE1222102055FE582051FC912411FC112411FC282027FE442040208020 +7148:200027FC24042434ADC4B444A5F4A554255425F42444245455F44C9448069002 +7149:1020102013FE102055FC592451AC9174112411FC1020287024A8452442228020 +714A:1040102013FE1202540459FC500091FC110411FC110429FC2504440043FE8000 +714B:100011FC110415FC590451FC5020912011FE1220102029FC2420402043FE8000 +714C:1020104011FC150459FC510451FC900013FE1020102029FC2420402043FE8000 +714D:208821C827082108A92AB12AA7ACA14823082388255425145914492441248142 +714E:10100820FFFE00003E4822483E4822483E0822082A2824100000488844448444 +714F:100013FE100015FC5904510451FC900013FE122212222BFE2622422243FE8202 +7150:1088108813FE108854A8582051FC91241124112413FE28202450448841048202 +7151:01081FD001207FFC02000FF03810CFF008100FF00100111022A004401830E00E +7152:2040204021FC2084ABFEB000A1FCA10421FC202023FE202052204BFE40208020 +7153:102011241124112455FC580053FE9020104011FC11542954255445544154810C +7154:1020522054209020283C44208220102010FC5284548490842884248442FC8084 +7155:00007F7C444454445744517C51405740544244427F3E00002488224442448004 +7156:101E13E010441524588851FC5040904013FE108010FC29442528421040688186 +7157:100013FE1020104055FC5954515491541154112C10202BFE2450448841048202 +7158:20142012201027FEAC10B410A5D0A412241225D42554254855DA4C2A48469082 +7159:100013FE105014505BFE52525252925213FE102010202BFE2420402047FE8000 +715A:00007CFE448044FC7C8444FC44807CFE01001110111022A0044008203018C006 +715B:00003EF822883EF822883EF822883EF801001110111022A0044008203018C006 +715C:100011FC110415FC590451FC51049040102013FE100029042488400047FE8000 +715D:100013FC122416245BFC520052FC9284128412FC12842AFC2684428444FC8884 +715E:202020203C40447E88847F44024402287E2802100228FE440082488844448444 +715F:100013FE122213FE56225BFE500091FC110411FC110429FC2504450441148108 +7160:10481148114817FE594851485178910011FE102013FE287024A8412446228020 +7161:20102010207C2714A9FEB114A27CA210277C211021FE251052104B0044FE8800 +7162:08202AA44D28145022887FFE400280041FE0042004203FA004200414040C0404 +7163:100011FC104814305BFE5052509491101230102013FE287024A8412446228020 +7164:1088108813FE1088548858F85088908810F8102013FE287024A8452442228020 +7165:2080208020F82108AA10B5FCA104A154218C2124202023FE5050488841048602 +7166:0100790049FC4A044C0479E44924492449E44804782800102488224442448004 +7167:00007DFC44444444444444947D0844FC4484448444847CFC0000488844448444 +7168:100011FC1124112455FC5924512491FC100013FE112029222514454841848102 +7169:100013FE1020144059FC5104510491FC110411FC1104290425FC440040888104 +716A:11081088109017FE5890509053FC92941294130C12042BFC2604420443FC8204 +716B:2108209020002BFEB080A184A244A4A82130227024A8212852244C2248A08040 +716C:200023F822082BF8B208A3F8A000A7FE220023FC2494292452444C8449288210 +716D:2484490424A400247FA408241F24612412240C043014C0080000488844448444 +716E:020002083FD00220FFFE01000FF03810CFF0081008100FF00000488844448444 +716F:1110111211D4111855525992512E904011FC1104110429FC2504450441FC8104 +7170:100010F8108814885888508850F89088100013DE12522A522652425243DE8252 +7171:100011FC1104150459E45124512493FE120212FA128A2A8A26FA4202420A8204 +7172:08000BF8120833F8504097FC11501248144410400100111022A004401830E00E +7173:1100113C112417A45924513C512493A412A412BC12A42AA427A4444440548088 +7174:100011F81108150859F85108510891F8100013FC12942A942694429447FE8000 +7175:1020102013FE1420582053FE528A925212FA122212222AFA26224222422A8204 +7176:100011FC1104150459FC5104510491FC100013FE10202920253C412042A0847E +7177:2080204027FE2000ABF8B208A3F8A00027FE240229F4211051104A124412880E +7178:1040102011FE1102550259FE5100910011FE11AA12AA2AFE24AA44AA40A28086 +7179:1088108813FE148859FC508853FE902011FC112411FC292427FE410441148108 +717A:200024F822882288A8F8B088AE88A2F822A22294228822A852C44A84450088FE +717B:1020101013FE16205AFC522453FE922412FC122012FC2A842684448444FC8884 +717C:2080208021FC2A44B154A1F4A084A128229021FC2244255451F4488449288210 +717D:1020101011FE1502590251FE510091EE112211AA11662922256642AA42228466 +717E:100011FC1124152459FC51245154918C110411FC1040282024A4428A428A8478 +717F:1028102413FE102055FC592451FC912411FC112410082BFE2488444840488018 +7180:100011FC110411FC550459FC5020912410A8102013FE2890249045124212840E +7181:104011FC1044109455085BDE514A914A129411FC110429FC250445FC4104810C +7182:2100210021FC2A00B5F8A000A3F8A08822A821C827F8208A51CA4EAA48868082 +7183:00407EFC15440838FE441AA22CFC4844A89411080100111022A004401830E00E +7184:1020104011FC150459FC510451FC910411FC1040102028A4268A428A44788000 +7185:100013F8124812A857185A0853F89000100017FC14A42CA424A444A44FFE8000 +7186:1020102011FC1420582053FE5080910413FE100213FC2A942694429447FE8000 +7187:1040102013FE140059FC510451FC900013FE120212FA2A8A26FA4202420A8204 +7188:00002FBC2A242A242FA428BC28A02FA02A224A224F9E80002488224442448004 +7189:100010FC1084108454FC580051FE910211FE110211FE290225FE444840848102 +718A:1080249842E07E8400847E7C42807E9842E07E844284467C0000488844448444 +718B:108024987EE000847E7C42007E9842E07E844284467C0100111022A00C60701C +718C:100013DE125217DE5A5253DE520292221222122212522A4A268A4202420A8204 +718D:1020101011FE1102540058FC5084908410FC100011FE29022502450241FE8102 +718E:1008103C13C010045644592851FC9220102013FE102029242524452441FC8004 +718F:00F83F000100FFFE01003FF8292825483FF801003FF80100FFFE488844448444 +7190:100013FE1202100055FC590451FC910411FC104010202BFE2400448841048202 +7191:10881050100015FE585051FC505493FE105411FC105028D82554425240508050 +7192:08202AA42CA84920145022887FFE400281041110111022A0044008203018C006 +7193:2080210023F82208AA08B3F8A200A3FE220023FC200425545554480440288010 +7194:1040102013FE160258505088512490501088110412FA28882488448840F88088 +7195:100011FC102014205BFE500051FC910411FC110411FC290425FC448841048202 +7196:101E11E01022111254945880502091CE1102110211CE29022502450241FE8102 +7197:2040204020A02990B248A7FEAA08A3F8220823F8220023F855084D0849F88108 +7198:104013BE121216925A5252AA5324904013FE122212222BFE2622422243FE8202 +7199:00007F7C444444445F44517C51405F40444244427FBE00002488224442448004 +719A:100011FC112415FC592451FC50A890A813FE10A810A829FC242043FE40208020 +719B:100013FE105011FC5554595451FC900011FC100013FE282024A8452442A28040 +719C:1020104011FC1524597C518C51549124115411FC1020281025544542414A8238 +719D:1040102013FE125056505BFE5252925213FE120012922AD42698449244D2888E +719E:100013DC129417D45A5453C85288929413E21000102029FC2420402043FE8000 +719F:1040FE4000407DF844487C4800C87C4808AAFEAA110652022000488844448444 +71A0:100013DE10421252554A5A525042902011FC1104110429FC2504450441FC8104 +71A1:204023F822482FFEAA48B3F8A040A3F8224823F820802FFE511048E043188C04 +71A2:1020147C12841548583050CE5610927C1210127C12102AFE2610421045FE8800 +71A3:1020122213FE1090548859FE5310951011FE1110111029FE2510451041FE8100 +71A4:100013DE1042114A54C6594A525290021040102011FC280025084488409083FE +71A5:20FE240422282210A8FEB092AE92A2FE229222FE2292229252964D0048FE8000 +71A6:102011241122152A5A325060519097FE112011FC112029FC2520452041FE8100 +71A7:11102110CAA814443240D27C154014FE0800010011101120228004401830E00E +71A8:3F0821083F7E20082F4820285FA8440895282C900100111022A004401830E00E +71A9:1040102013FC16045BFC520052F8928812F8120013FC2B2425FC4502490280FE +71AA:20102190261E2222AA54B208AF90A2642208271E2AA2224252144A0842108260 +71AB:1040102013FE120056485A4853FE92481248124812782A002554452A4A2A9000 +71AC:082008207F20087E7E4408A4FF2810101E282244468280002488224442448004 +71AD:1010FEFE10107C7C1010FEFE10103FF800081FF800083FF8111022A00C60701C +71AE:200027BC208424A4AA94B4A4A050A188262620C0231020645388483040C08700 +71AF:1088108813FE108854F8582051FC912411FC102011FC282027FE445040888306 +71B0:100013FE1200167C5A445244527C920012EE12AA12AA2AAA26EE420043FE8000 +71B1:104010407C4010F8FE48444892C87C4810AA1CAAE10642020000488844448444 +71B2:400044FE7810422042FC3E84008410FC528452FC5484908428FC244844848102 +71B3:100011F8110811F8550859F8500093FC129413FC100029F82490446041988606 +71B4:20402444244427FCA800B7FCA404A7FC240427FC2000242457A84C3245A2861E +71B5:1040102013FE1488585053FE5252928A130612FA128A2A8A26FA4202420A8204 +71B6:200023F8220823F8AA08B3F8A000AFFE248027BC2494279454D44F88409480A2 +71B7:11041088100013FE56225AAA5272922213FE100011FC290425FC450441FC8104 +71B8:200027BC21082528AFBCB318A5AAA946200023F82208220853F84A08420883F8 +71B9:01007FFC01003FF800003FF820083FF80820FFFE00003FF820083FF824884244 +71BA:102013FE102011FC540059FC510491FC108813FE100029FC2504450441FC8104 +71BB:204020A021182EE6B000A3F8A208A3F8200027BC208424A452944CA44A948108 +71BC:200027FC244427FCAC44B7FCA110A11027FC211021102FFE5000491042088404 +71BD:102011FC102417FE582451FC502092AA13AE122213FE2A2227AE42AA42AA8422 +71BE:1110109413D214125A50519057FE901013D2125212542BD4264A424A43D68022 +71BF:1088108811FC108854885BFE502091FC112411FC112429FC2400448841048202 +71C0:100013DE1252125257DE580051FC912411FC112411FC282027FE442040208020 +71C1:108813FE1088100055FC58A850A893FE10A810A811FC282027FE442040208020 +71C2:100013FE105013FE56525BFE500091FC110411FC110429FC242047FE40208020 +71C3:1110111411D216505A7E5550509092A81128114412442C82240842A442528452 +71C4:101010523E5422904428804410826610425242546698421042287E2842440082 +71C5:081008527E5408900828FF4424824210895208547E98081008280F28F8444082 +71C6:101C11E0104017FE5888510452FA948810F8100013FE2A0226FA428A42FA8206 +71C7:1088105013FE105055FC5954518C9174110411FC10082BFE2508448840A88010 +71C8:202027A420A82A92B114A208A5F4A80223F82208220823F8520849104FFE8000 +71C9:2208210827C82010AF9EB494A7A4A01427942094211421C85708491445248242 +71CA:1108211002E00C1870040010525294942828C4C401007FFC05401930E10E0100 +71CB:1090108811FE15105B1055FE5110911011FE1110111029FE250042A442528452 +71CC:102011FC102014885BFE508851FC910411FC110411FC290425FC448841048202 +71CD:22402242225C27F0AA50B3D0A25EA3D42254225427F4201452944C6448248044 +71CE:2040204027FC20A0AD14B208A7FCAA0A23F8220823F8204052484C4449448080 +71CF:100013FC104814305BFE505250949350102013FE12522A8A2776425242728206 +71D0:20402248215027FCA950B248A444A210239024BC2A902150517E4A1042108410 +71D1:102011FC108814505BFE500051FC912411FC112411FC282025FC442043FE8000 +71D2:1020102011FC14205BFE5108539C91081188163E10002BFE249044904112820E +71D3:24482288F93E22886458729CA92A22882448010011101120228004401830E00E +71D4:103C13E0112410A855FE58A85124920211FC1124112429FC2524452441FC8104 +71D5:0440FFFE0440044017D01012F01C17D014503452D7D2100E0000488844448444 +71D6:100013FC100413FC54045BFC500093BC112417BC10082BFE2508448840A88010 +71D7:279E2492279E2492AF9EB402A4F2A49224F2249224F2249254924D3244028406 +71D8:100013DE125217DE5A5253DE5242922212FA121212522A2226524282420A8204 +71D9:23F8120893F8420843F810002FFEE20027FC292422540588111022A00C60701C +71DA:1010525254549090282844448282101010525254549890102828242842448082 +71DB:0000FEFE12907EFC42847EFC1290FEFE01001110111022A0044008203018C006 +71DC:2000279E2492279EAC92B79EA442A422240A25462542255256324C02440A8404 +71DD:100011FC110415FC590451FC502093FE100011FC110429FC2420452442228060 +71DE:142012203F3E24426494BF1024103F10242824283F4420820000488844448444 +71DF:08202AA44D28145022887FFE40029FF410101FF000003FF8200820083FF82008 +71E0:2080210027FC2444AD54B444A7FCA4E425542404204027FE50A0491042088C06 +71E1:100013FE125213FE542059FC502093FE1088105011FC282027FE442040208020 +71E2:0A803138228838382288393822887FFE41029114111022A0044008203018C006 +71E3:102013FE100011FC5504597451549174110411FC100828F0242047FE40A88326 +71E4:1088108813FE148859FC512451FC912411FC102013FE2A22262A42FA420A8206 +71E5:10F81088108814F8580051DC5154915411DC102013FE287024A8412442228020 +71E6:208020DC22842BD4B448AA94A324AC402248215027FC20E051504A484C468040 +71E7:104412241128147E58105028534A911C1128114C111A292A2548411042FE8400 +71E8:220821102FFE2840B7FCA040AFFEA054279221102FFE211051D44F0A49168322 +71E9:2108220827C82450AFDEB464A7D4A214211427D4221423C852484C54455488A2 +71EA:108813FE108815005BFC555450D49324105410941348282024A4428A428A8478 +71EB:102013FE1288125057FE5A5052FC925413FE125412FC2A5026D8455446528850 +71EC:210026DC24542454AED4B454A466A7C0201C201427D42114510849C847148222 +71ED:200023F822A82AA8B3F8A100A3FCA48423E422A422A423E450944FF448148008 +71EE:210827C820086B9AB02C2388200853944A928BA200003FF0082004C00780F87E +71EF:100011FC102013FE562259AC502091AC105010C8132628F8240844D040208010 +71F0:203C23C020442224A908B7FEA442A2A4228A247A208020F851084A904060879E +71F1:1040102011FC1488585053FE500091FC110411FC110429FC24204294428A847A +71F2:104013FC1044109455085BDE514A92D611FC110411FC290425FC450441FC8088 +71F3:200027BE24922492ACAAB7A4A4C0A4BE24A224A227BE24A250004AA442528452 +71F4:204020A023182DF6B000A7FCA554A4E427FC200023F8220853F84A084BF88208 +71F5:10101410127C141058FE5044562892FE1210127C12102AFE2610421045FE8800 +71F6:109013FC129417FC5A9453FC500093FC120012F812002BFE2520451445488986 +71F7:102013FE100015FC5904517451549174110411FC100029FC240043FE41248262 +71F8:100011FC102013FE562259AC502091AC100013FE102029FC255445544154810C +71F9:FEFE202050509A9A2C2C48489C9C2A2AC8C818180100111022A004401830E00E +71FA:102013FE100014F8588850F8500093FE1202127212522A76242043FE40A88326 +71FB:101C11E0102013FE542059FC51AC917411FC102011FC282027FE44004154822A +71FC:204023F8204827FEA848B3F8A040A7FE200022A4245223F852A84AA84FFE8000 +71FD:204027FC204023FCA800B7FEA002A3F8204027FE200027FE50084FFE44A88798 +71FE:01007FFC01003FF80000FFFE00023FF00100FFFE00107DFC44907C3024884244 +71FF:100013DE10421252554A5A525090910813FE151011FE291025FE451041FE8100 +7200:21102110211027BCA910B110AFFEA2A822A826EC2AAA22AA52A84DA844488898 +7201:100813E8128817EE5A2853F4528293E2100011FC115429542554415447FE8000 +7202:2FEC48244BA4682C4BA46AAC4BA44824FFFE810211101120228004401830E00E +7203:108812AA12DC148859545222500093FE1222102013FE287024A8412446228020 +7204:100013FE124817FE5A4852FC52A492FC12A412FC12202BFE272A457A450A8906 +7205:11FC112411AC152459FC502051FC902013FE1154122A282025FC402043FE8000 +7206:11FC110411FC150459FC508853FE908817FE108811242AAA247040A841248060 +7207:0820FFFE082010407C4011F8FE4844C892487CAA10AA1D06E202488844448444 +7208:2020203E202027FEAC22B5F8A422A5FE252425FC252425FC58404AA4528A847A +7209:11241248112414005BFC52945264929413FC124813682A48276A424A42468362 +720A:2080204027FC24A0AFFCB4A4A7FCA400252425A8253025A4551C48004AA49452 +720B:21C82708210827C8A93EB7CAA54AA7CA254A27CA210A27CA510A4FEA4AAA9156 +720C:2040202027FE2488ADFCB488A7FEA42025FC252425FC252455FC4C0044888904 +720D:244424E428A82AAAAEEEB4A4AAAAAEEE224220402FFE20E051504A484C468040 +720E:1040102013FE122255FC5850528A91FC128A10F8108828F82420452442A28040 +720F:200027FE24442598AC88B7DEA488A5DC26AA248824202520553C4920492097FE +7210:1040107C104013FC56445BF0524492FC12A812F812A82AF8260045FC45548BFE +7211:1088108813FE14A8589051FE512093FC152011FC112029FE250042A442528452 +7212:101010101EFE221054AAA8441082287CCA442A7C2C44487C1410125422924030 +7213:13DE125213DE16525BDE5242527A928A131212DA128A2ADA268A42FA420A8204 +7214:211027FC204023F8A840B7FCA000A3D4211227FE23502534538C488A42968102 +7215:210827C820086B9AB02C2388200853944A928BA20100111022A004401830E00E +7216:2210211027DE2010AC5EB282A7DEA01027DE245027DE245057DE4C50445284CE +7217:11FC110411FC150459FC508853FE908811FC10A813FE28A825FC442043FE8020 +7218:108010DE128213D454485AB4514A96A411FA128810F8288824FA449440A880C4 +7219:102013FE100015DC595451DC508893FE108813FE10882BFE2494418842A480C2 +721A:204020A021102208ADF6B000AEEEAAAA2EEE20002FFE29225FFE4922492A8804 +721B:13DE125213DE16525BDE522252FA922212FA12AA12FA2AAA26FA427242AA8226 +721C:249222942FFE2910B7FCA040A3F8A0402FFE248027BC249457944CC84F9480A2 +721D:101E13E0112214945BFE525253FE900413C4127E13C42A5427CC428442D48348 +721E:2040204023F82248ABF8B044A7FCA00422082FBE2AAA2FBE52084A8A4FBE8082 +721F:208823FE208823DEAA52B3DEA0A0A09021FE212023FC252051FC492041FE8100 +7220:27BC24A427BC24A4AFBCB4A4A7BCA12023FE222027FC2A2053FC4A2043FE8200 +7221:108813FE108811FC552459FC512493FE122A12FA122629FC252445FC402283FE +7222:00803FFE24103F7C26382D54341221202F3C2120273821202F3C41205244A122 +7223:2248215027FC2404A9F0B110A7FCA55424E427FC204027FC50404FFE42A48452 +7224:211027FE211027BCACA4B7BCA4A4A7BC244427FC255425F454444CE445548448 +7225:13FE120213FE16925A54529252FE92AA12FE132212FA2AAA24FA442249FA8004 +7226:2790251E27A82484AFBEB52AA7BEA00023F8220823F8220853F848A04124861C +7227:27FC20402FFE2842AB58B040A358A0002EEE2AAA2EEE20005FFE4A4845548FFE +7228:2FEC48246BAC48246BAC4AA4FFFE88227EFC2C684AA4FFFE11102928C6C61830 +7229:228822E82F5E22ECAF5ABAE8A208AFFE29423494255827F252044BE8420283E4 +722A:001000F81F201220122012201220122012201210121022102208420842048002 +722B:00000008007C07807A1021101120100000000000000000000000000000000000 +722C:0E00740055FC55245524552455FC550055005502550252FE5200510090FE1000 +722D:000801FC7E10221011203FF801080108FFFE010801083FF80108010005000200 +722E:024007403A7C2A842B742A542A542A742A482942294228BE28404830480E8800 +722F:000801FC7E102210112001003FF8210821083FF821082108FFFE200820282010 +7230:000801FC7E10221011203FF8020002007FFC04000FE01420224041808660381C +7231:000801FC7E10221011207FFE420282047FF8040007F00A10112020C043301C0E +7232:00FC7F00121009201FF0101010101FF8100810081FFE20022AA2495251548008 +7233:00F83F2009401FE010201FF010101FFC20042AA4400C9FE00040018005000200 +7234:0004FF0E8D748B54FF548954E954A954EB548554E5548B549154FF9200920100 +7235:00FC7F00220811107FFC44447FFC00087E0842FE7E0842487E28480874284210 +7236:044008201010200840240820082004400440028001000280044008203018C006 +7237:044008201850248803000CC03030C00E1FF00210021002100250022002000200 +7238:044008201850248803000CC03030C00E1FF0111011101FF01010100410040FFC +7239:044008201850248803000CC03230C7CE1A4001A01E7801880E90006003803C00 +723A:084010202850448803001CE0E01E00007F7822483E5022483E4423D4FE480240 +723B:00081810066001800660181860040020082004400280010002800C403030C00E +723C:040045F829081108290845F881080508450829F8110829084508810807FE0000 +723D:010001007FFC01002928111029280100292811102AA80280044008203018C006 +723E:00007FFC21084104BFFA21083558292835582108355829283558210821282010 +723F:00100810081008100FF00010001000107FF00810081008101010101020104010 +7240:042024202420242025FE3C2004700470FCA824A8252425242622442044208420 +7241:0400240025FE240824083DE805280528FD28252825E825282408440844288410 +7242:048424442448240025FE3C20042004FCFC20242025FE24202420442044208420 +7243:04482548254827FE25483D4805780500FDFE242027FE247024A8452446228420 +7244:042024202450244824A43DFE068404FCFC8424FC248024FC25444544467C8444 +7245:102057FE542055FC542477FE142415FCF42055FC552455FC552455FC5524892C +7246:082028202BFE292429243AAA0FFE0800F9FC2904297429542974490449FC8904 +7247:004010401040104010401FFC1000100010001FE0102010201020202020204020 +7248:0808481C49E0490049007DFC41444144794449284928491049104A284A448C82 +7249:04202420252424A424A83E2021FC20203C20242027FE24202420442044208420 +724A:040025FC2444244424443E44209420883D0024FC248424842484448444FC8484 +724B:04482444245E25E024283E12206A21963C48245E25E0242424284412446A8586 +724C:0840488049FC492449247DFC4124414479FC489049104BFE4810481048108810 +724D:0820482048FC482048207DFE4002409478504890485049FE4828484448828902 +724E:0880488048FC49544AD47CB4412C424478944908484048A44AAA4A8A4C788800 +724F:08204850488849044AFA7C0041E2412A792A49EA492A492A49EA4922492A8964 +7250:0808483C49E0482048207DFE402040A0792C4924492449AC4924492449FC8904 +7251:0840482049FE490249027DFE4100410079FE49AA4AAA4AFE4CAA48AA48A28886 +7252:0848494849484BFE49487D484178410079FE48204BFE487048A849244E228820 +7253:0820481049FE488448487DFE41024224781049FE4840487C4844488448948908 +7254:082848244BFE482049FC7D2441FC412479FC492448084BFE4888484848488818 +7255:0820484049FC4924497C7D8C41544124795449FC484048244AA24A8A4C888878 +7256:084048204BFE4A024BFE7E1443FE42107AFE4A924AFE4A924AFE4A924C928896 +7257:081049FE4910497C49147DFE4114417C7910497C4954497C49544A7C4A548C4C +7258:08204BFE482049FC48007FFE425243FE790449FC490449FC490449FC48888904 +7259:00003FFC004000401040104020403FFE01400240044008401040604001400080 +725A:111009207FFE40029FF410101FF000007FFC104020403FFE0240044019406080 +725B:01001100110011001FF82100410001000100FFFE010001000100010001000100 +725C:08000800480048007E004800880008000E00F800480008000800080008000800 +725D:08800880488048847E88489088A008C00E80F8804880088408840884087C0800 +725E:10401040504050407DFC5044904410441C44F084508410841104110412281410 +725F:02000400082010103FF80008010011001FF821000100FFFE0100010001000100 +7260:10201020502051207D2C5134916413A41D24F134512811221122110210FE1000 +7261:08200820482048207E20482089FC08200E20F82048200820082008200BFE0800 +7262:020001007FFE40028104110011001FF8210041000100FFFE0100010001000100 +7263:1000100051FC50447C445144914411441D44F244504410841084110412281410 +7264:10201010501050007DFE5080908010801C80F080508010801080108010FC1000 +7265:10401020502053FE7C805080908010FC1C84F084508410841104110412281410 +7266:0808083C49E048207E20483C89E008200E20F83E4BE00820082208220822081E +7267:08400840484048807EFE49088A8808880E88F850485008200850088809040A02 +7268:10801040504053FC7C00500091F011101D10F1105110111211121212120E1400 +7269:10801080508050FC7D545254905410941C94F124522410441044108411281010 +726A:08100810489048907EFE4890891008100E10F9FE481008100810081008100810 +726B:08500848484848407E5E49E0884008440E44F848483008220852088A0B060802 +726C:10201020502E51F07D205120912011FE1C22F06250A2112A1624102010201020 +726D:1000100053FC52947E945294929412941E94F294529C13041204120413FC1204 +726E:08A0109030BE57C0904010241014110C09001FF821000100FFFE010001000100 +726F:10201020502050207DFE5020902010201DFCF104510411041104110411FC1104 +7270:10201020502050207DFC5124912411241D24F1FC512411241124112411FC1104 +7271:1000100053FE50087C0851E8912811281D28F12851E811281008100810281010 +7272:10201020512051207DFC5120922010201C20F1FC502010201020102013FE1000 +7273:100010FC508450A47C945084908413FE1D04F1445124110411FE100410281010 +7274:1004101E51F051107D105110911011FE1D10F11051101108110A114A11A61112 +7275:010001003FF80280044008207FFE410289040FF0110001007FFC010001000100 +7276:0100111009203FF802007FFC082011102908CFF6110001007FFC010001000100 +7277:10201020505050887D04520291FC10201C20F02051FC10201020102013FE1000 +7278:1040102053FE52027C0451F8900810101C20F3FE502010201020102010A01040 +7279:10201020502051FC7C20502093FE10081C08F1FE500810881048100810281010 +727A:100017FE509050907C9053FC929412941E94F294529C13041204120413FC1204 +727B:10901088508051FE7CA050A890B010A41CA8F0B05124112A1132122212DE1400 +727C:100011FE500050927D245248912410921C00F1FE502010201020102013FE1000 +727D:01007FFC08201FC002007FFE48229FF4011011001FF821000100FFFE01000100 +727E:100013FE504050407DFC5084908413FE1C00F00051FC11041104110411FC1104 +727F:10201120512051FC7D205220902013FE1C00F00051FC11041104110411FC1104 +7280:00003FFC20043FFC2000288826B02808248027F8288020805FFE408080800080 +7281:03083C0804487F480C48164825084428051011001FF821000100FFFE01000100 +7282:0C8070FC1124FD241244388455289010010011001FF821000100FFFE01000100 +7283:1040102051FC50007D085090900013FE1C00F00051FC11041104110411FC1104 +7284:1020102051FC50507C88510493FE10081DE8F128512811E81128100810281010 +7285:100013FE5202528A7E5253FE922212221EAAF2AA52AA12FA12021202120A1204 +7286:1020102053FE50207C2051FC910411FC1D04F1FC510411FC1104110417FE1000 +7287:010009000FF0110001007FFC0100111051507C7C90901E10F0FE501010101010 +7288:1020112450A850207DFC504093FE10881D04F2FA5488108810A810921082107E +7289:1040102053FE50007DFC510491FC10001DFCF008501013FE1020102010A01040 +728A:1020102051FC50207C2053FE900210941C50F110509013FE1028104410821302 +728B:100011F8510851087DF8510891F811081DF8F108510817FE1000109011081204 +728C:100013DE524252427A4253DE9200123E1BD23212D21413D41208121412241242 +728D:10101010577C51147DFE5214927C17101D7CF51055FE12101210150018FE1000 +728E:08087E0808FEFE0808487E2808080F28F11011001FF821000100FFFE01000100 +728F:1080104053FC52047E0453FC920012001FFCF354535415FC155415541944110C +7290:10C417045124511479145784912411141B943346D53C15041104110411041104 +7291:100011FC510451FC7D0451FC910411FC1C28F02453FE10501050108811041202 +7292:1040102053FE50007DFC510491FC10001FFEF20252FA128A12FA1202120A1204 +7293:1080108051FC5244795451F4908411281A9031FCD244155411F4108411281210 +7294:1100110051FC52007DF8500093F810881AA831C8D7F8108A11CA16AA10861082 +7295:1088108853FE5088788857FE908011FC1B2435FCD12411FC112411241124110C +7296:08202AA42CA84920145022887FFE410289041FF821000100FFFE010001000100 +7297:1040102053FE52027C2451FC902011FC1C20F3FE502011FC1104110411FC1104 +7298:010000803FFE22102F7C26382B5432922040224023FC244020405FFE40408040 +7299:1040108851FC51087A5253FE905011881E2630C0D31010641388103010C01700 +729A:3F0821083F7E20082F4820285FA8440895282C9011001FF82100FFFE01000100 +729B:08203E7E08A47F281C102A2849443FFE2480248027F8288020805FFC40808080 +729C:1108108853C850107BDE526493D410141BD43054D09410E81388109412941122 +729D:102011FC508850507DFE500091FC11241DFCF12451FC102011FC102013FE1000 +729E:101811E0504053FE7C885174925210701C00F1FC51041174115411741104110C +729F:7CF8048804F87C2041FC7D2405FC04282BFC100411001FF82100FFFE01000100 +72A0:1104108853FE50207DFC502093FE10541D92F09053FE109010D4138A109611A2 +72A1:100013FE524853FE7E4852FC92A412FC1EA4F2FC522013FE132A157A150A1906 +72A2:102013FE502051FC7C0053FE925213FE1D04F1FC510411FC110411FC10881104 +72A3:11241248512450007BFC5294926412941BFC3248D3681248136A124A12461362 +72A4:100013FC529452947BFC5110925213DC181233CED24013D2125C13D0125212CE +72A5:1040102053FE52507BFE525293FE12001A9432D8D29012D2128E140015541A2A +72A6:13F8120853F852087BF8511097FC11101FFE3110D248155410E01150124810C0 +72A7:111017FC504053F8784057FC900013D4191237FED3501534138C108A12961102 +72A8:081024483F7E64C8BF7E24483F7E24483F7E204011001FF82100FFFE01000100 +72A9:7C4011FCFD2439FC5524FDFC246818A2651E11001FF821000100FFFE01000100 +72AA:211027FEA040A2EEFAAAABEAAAAE2AE83BAAECE6228825F42290206021982606 +72AB:51184B947C3ED3A87C7E53A87C3E53A87EBE43A011001FF82100FFFE01000100 +72AC:01000120011001100100FFFE010001000280028004400440082010102008C006 +72AD:0000440028001000280048008800080018002800480088000800080050002000 +72AE:01100108010801007FFE0200040007F80A080A08111020A0404080A003180C06 +72AF:0000440029F81108290849088908090819282910490089020902090250FE2000 +72B0:00804480288010802BF0489088900890189028904890889209120912520E2400 +72B1:004044402840104029F8484888480848194828C8484888A808AA090A52062402 +72B2:00104410281010102BFE48308830085018502890489089100A10081050502020 +72B3:00404440288010FC29044A048804090418842844484488040804080450282010 +72B4:000045FC282010202820482088200BFE18202820482088200820082050202020 +72B5:00804480290011FE2A004C0089F8080818102860488089000A020A0251FE2000 +72B6:084008480844484428402FFE08400840184028A0C8A00890091009080A040C02 +72B7:00204410281011FE2900490089000900190029004900890009000A0052002400 +72B8:000047F02810101029104910891009FC1804280448048BF40804080450282010 +72B9:00904488288810802BFE48A088A008A018A028A04920892209220A22521E2400 +72BA:00804440284013FC2800480089F00910191029104910891209120A12520E2400 +72BB:00204420282013FE2820482089FC092419242924492489340928082050202020 +72BC:00108FD0505020905110911011501190311057109110111211121112A50E4200 +72BD:000045FC28101110291049108A100BFE183028504850889009100A1050502020 +72BE:0040885050482048504097FE1040104030A050A090A0111011101208A4044802 +72BF:00404420282010002BFE48408840086018502848484488440840084050402040 +72C0:042024282424242424203DFE04200420FC202450245024502488448845048602 +72C1:004044402880108829044BFE88020890189028904890889009120912520E2400 +72C2:0000440029FC1020282048208820082019FC2820482088200820082053FE2000 +72C3:000045FC284410442844484488440BFC18842884488488840884088453FE2000 +72C4:00404440284010402944494489480A50184028A048A088900910090852042402 +72C5:0008443C29E010202820482088200BFE18202820482088200820082051FC2000 +72C6:002044202820102029FC492489240924192429FC492488200820082050202020 +72C7:00404440284010402BFE484088E008E0195029504A488C440842084050402040 +72C8:000045FC29041104292449248924092419242924492488500848088451022602 +72C9:000045FE2810101028204820886808A419222A22482088200820080053FE2000 +72CA:00003FF820083FF820083FF820083FF801100108FFFE0280044008203018C006 +72CB:000045FC2800100028004BFE88200820192829244A248A220C22082050A02040 +72CC:002044202920112029FC49208A200820182029FC482088200820082053FE2000 +72CD:0080448029FC11042A044DF489140914191429F4490489280912090250FE2000 +72CE:000045FC29241124292449FC89240924192429FC492488200820082050202020 +72CF:0080448028FE11002A204920892C09741BA42924493489280922090250FE2000 +72D0:0008883C53D02290529092901290129032905288928812C812A414D4A4924800 +72D1:0040444028A010A029104A488C2608201BF828084810891008A0084050202020 +72D2:00904490289013FC289448948BFC0A901A902BFE48928892091A091452102410 +72D3:00104410281011FE29124914891009FC194429444928892809100A2852442482 +72D4:000045FC29041104290449FC89000940194429484970894009420A42523E2400 +72D5:002089205120222052FC94A4172411243224522494A417A410C41044A0944108 +72D6:00404420282013FE2A024C048800089018902890488889080908090452042402 +72D7:00804480290011FC2A044C0489E409241924292449E489240804080450282010 +72D8:00284424282410202BFE4A208A240A241A242A284A288A900B120A2A50462082 +72D9:000045F829081108290849F889080908190829F8490889080908090857FE2000 +72DA:0000440029FC11042904490489FC09041904290449FC89040800080053FE2000 +72DB:00204420284011FC290449048904090419FC2904490489040904090451FC2104 +72DC:00204420282010202BFE48208820082019FC2904490489040904090451FC2104 +72DD:00804480288011FE29024A048C200820192829244A248A220C22082050A02040 +72DE:00404420282013FE2A024C04880008001BFE2820482088200820082050A02040 +72DF:000045FE2800100029FC4904890409FC1904290449FC89040800080053FE2000 +72E0:000045F82908110829F84908890809F819442948493089200910094851862100 +72E1:00404420282013FE2800488889040A0218882888485088500820085050882306 +72E2:0080448028F811082B104CA0884008A019182A064DF889080908090851F82108 +72E3:009044902890129229944898889009981A942C9248908890091209125212240E +72E4:00204420282013FE2820482089FC0800180029FC490489040904090451FC2104 +72E5:0080448029FC11042A0449E48924092419E42924492489E40904080450282010 +72E6:00008BF852A822A852A89FFE12A812A832A85FFE92A812A812A812A8A2084218 +72E7:0008443C29E0102028204BFE88200820182029FC490489040904090451FC2104 +72E8:00284424282410202BFE48208924092419242BA8492889100A120A2A54462082 +72E9:0040882053FE220254149010101013FE301051109090109010101010A0504020 +72EA:000045FE29021102297A49028902097A194A294A494A897A09020902510A2104 +72EB:00404440284413F4284848508FFE0840188029844A988CE008820882507E2000 +72EC:00204420282011FC292449248924092419FC29244820882808240BFE51022000 +72ED:00204420282011FC2820492488A408A818202BFE485088500888088851042202 +72EE:010089FE51102510557C9554155415543554555495541154125C1210A4104810 +72EF:0040884050A021105208940611F01000300057FC9040108011101208A7FC4204 +72F0:0080448029F0121028204BFC884408441FFE284448448BFC0844084051402080 +72F1:002094285224222450209E2012FC12203220525092D0135012881088A1044202 +72F2:00008810579020905110921012D81354325456929A92131212101210A2504620 +72F3:0040884050A02110520895F61040104037FC50409250124814441844A1404080 +72F4:02208A24522823B05220922212A2131E3040504093FC104010401040A7FE4000 +72F5:00904488288013FE28A048A888B008A418A828B04924892A09320A2252DE2400 +72F6:01844468283010C82B0448408BFE08A019202BFC4D2489240934092850202020 +72F7:000045F82908110829F848008BFC0A041A042BFC4A048A040BFC0A0452142208 +72F8:000045FC2924112429FC4924892409FC1820282049FC88200820082053FE2000 +72F9:00204420282013FE282048208924092419242AAA482088500850088851042202 +72FA:004044202BFE1000280049FC8800080019FC2800480089FC0904090451FC2104 +72FB:00404440288811042BFE4802888809441A4228F849888A500820085051882606 +72FC:0040442029FC1104290449FC8904090419FC2920492289140908094451822100 +72FD:000045FC2904110429FC4904890409FC1904290449FC88000888088451022202 +72FE:0104890E5130212057E09120113E116431A457249124112411241124A5444284 +72FF:0004440E2BB8108828884928892E0BA818A82AA84AA8893E09000A80547E2800 +7300:00108A10511021105454925212521090301051149604120812081210A22040C0 +7301:008489C457042114511491141FD41114331453949554150419041104A1144108 +7302:000045FC290411FC290449FC8800080019FC282048208BFE0820082050202020 +7303:0040884050A020A05110920815F61000308850489248115011101020A7FE4000 +7304:004044202BFE1000280049FC89040904190429FC482088A809240A2250A02040 +7305:009088905090279E509090901090139C309050909090179E10901090A0904090 +7306:044004407C7C04403C7804407C7C04400440012001107FFC028004401830E00E +7307:00204420283E102029FE4922893809E01922291E490089780A480A4A548A2906 +7308:0040448029FC1124292449FC8924094419FC289049108BFE0810081050102010 +7309:008844882BFE1088288848F88888088818F8288848888BFE0800088851042202 +730A:00009040539C22045204939C1204120433FC50909090109010901112A212440E +730B:01100108FFFE0280044008203018C00614281224FDFE10202850245044888106 +730C:081008140812FF1208102AFE2A102A105D1088281C282A284944884408840902 +730D:00408840504027FC5040924812481248355450E09150115012481444A8424040 +730E:00884488288813FE288848888FFE080019FC2904490489FC0904090451FC2104 +730F:0040882053FC2204520493FC120012FC328452FC928412FC14841484A8944088 +7310:02088908511027FC5040904013F8104030805FFE9120112012201222A422481E +7311:000045FC2904110429FC4904890409FC1800291249D48918091009525192210E +7312:00107E1442127E1242107EFE00107E1042107E2842287E28424442444A844502 +7313:00008BF85248224853F89248124813F8304057FC90E0115012481446A0404040 +7314:004044202BFE1202280049FC880008001BFE2820492889240A220C2250A02040 +7315:002097205120213E5142974414901410341057549152115211921110A5504220 +7316:01F84508290811F82908490889F808001BFC2A044A048BFC0A040A0453FC2204 +7317:0040884053FC20A05110920817FE100833C852489248124813C81008A0284010 +7318:00828882528223EA548A908A17FA108A33EA52AA92AA12AA12A212E2A08A4084 +7319:003C47C02A44112828004BF8884808481FFE284848488BF80848084051402080 +731A:00A04490288011FE29104B108DFC0910191029FC49108910091009FE51002100 +731B:000045FC2808101028204BFE882008A0184029FC495489540954095457FE2000 +731C:002044202BFE102029FC48208BFE080019FC290449FC890409FC090451142108 +731D:0080884057FC20005110911012A814443000504097FE104010401040A0404040 +731E:0040884050A02110520895F61040104037FC5040904013F812081208A3F84208 +731F:0000948452442248500093F81248124833F85248924813F8124A144AA4464802 +7320:00904490289013FC2A944A948A940BFC1A942A944A948FFE0800089051082204 +7321:00008BFE52522252525293FE1020104030FC51049288105010201040A1804600 +7322:0100891E511227D25112911E111217D23452545E945217D214521022A02A4044 +7323:000044882A5212222A524A8A8A020BFE188829444A7A88880950082050D82706 +7324:001045D428581252298C488889040AFA1820282049FE88200850088851042202 +7325:00008BF85248224853F89248124813F8300057FE9240124412281290A3084206 +7326:000097FC5404243465C4A44425F425546554A5F42444245425F42494A8065002 +7327:000045FC2904110429E4492489240BFE1A022AFA4A8A8A8A0AFA0A02520A2204 +7328:003C97C052442128500093FC1080108037FE510091F8128812501420A8D84306 +7329:00008BF8520823F8520893F81040124033FC5440904013F810401040A7FE4000 +732A:0040884453F42048505097FE1040108031F85308950811F811081108A1F84108 +732B:008844882BFE10882888480089FC09241924292449FC89240924092451FC2104 +732C:000097FC544427FC544497FC100013F8320853F8920813F812081208A2284210 +732D:010089F8520823F0501097FE10801144366850B09128166810A41122A6A04040 +732E:08100814FF92081208107F7E4110551049105D1049287F284928494445444282 +732F:004094445444244457FC90001FFE1040308057FC94A414A414A414A4A4A4440C +7330:0080449E2BEA108A29CA488A8BEA089218A628204BFE88200850088851042602 +7331:00008BF85090206057FC90A4112812203460504097FC10E011501248AC464040 +7332:000045FC290411FC290449FC888009FE1A2229224952890209FA080250142008 +7333:000097BC54842484548497BC1400140037BC5424942417A814101428A4444482 +7334:010089785108220852FE96401A40127C3290521092FE121012281228A2444282 +7335:0080884053FC2204520493FC1200120033FC5354935415FC15541554A944410C +7336:01084488289017FE289048908BFC0A941A942B0C4A048BFC0A040A0453FC2204 +7337:221012141412FF92141014FE7F1055105510632841287F28414441447F844102 +7338:00008BFC5224222453FC920012FC1284328452FC928412FC12841284A4FC4884 +7339:0040904057FC20E051509248144613F8320853F8920813F812081000A7FE4000 +733A:0008443C2BC010042A44492889FC0A2018202BFE482089240924092451FC2004 +733B:00068F78511021205244927813101224367E5A129210125412521292A2504620 +733C:002844242BFE102029FC492489FC092419FC292448088BFE0888084850482018 +733D:000047FE2A02100029FC490489FC090419FC284048208BFE0800088851042202 +733E:00008BF8520823C852489FFE180213F8320853F8920813F812081208A2284210 +733F:0040904053F8204057FE900013F81208320853F890A4112813101D48A1864100 +7340:0140965C54442444575C9444144417FC304057FC9208111010A01040A1B0460E +7341:00008BFC524023F8524093F81240124033FC50049554155415541404A0284010 +7342:000045FE29101120297C4944897C0944197C29104910895409520A9252502420 +7343:08104914491249127F1000FE7F1000107F1041287F28412822440F44F0844102 +7344:02109114511227D250109790103E17903010579094A814A814A817C4A0444082 +7345:020094FE57102510557C955417541454345457549554155C15101710A5104010 +7346:0020444029FC110429FC490489FC08401BFE288849248A220DFC082050202020 +7347:0208891057FC2040504093F81040108037FC50A091281134123C1222A422481E +7348:020889085110200057FC900011101208340453F892A812A812A812A8AFFE4000 +7349:0040884057FC204053F8908017FC1110326855C6904013F810E01158A6444040 +734A:0040884050A02190524897FE1A0813F8320853F8920013F815081508A9F84108 +734B:004045FC290411FC290449FC890409FC1820292448A8892408200BFE50202020 +734C:000045F8290811F8290849F888000BFC1A942BFC480089F80890086051982606 +734D:0080884053F8211050A097FE100013F8320853F8920813F811201122A2224C1E +734E:0440247C24A83D5004287DFE248844488418012001107FFC028004401830E00E +734F:008844882BFE1088280049FC890409FC190429FC48208BFE0850088851042202 +7350:002045FC288810502BFE480089FC090419FC290449FC88200BFE082050202020 +7351:01008902511C27D0511097D0155E17D4355457D4911417D411141124A1244144 +7352:08207F20083E7E440884FF2820103E284244872201107FFC028004401830E00E +7353:01089108510827D0511E979411241FD4321453D492541248124814D4A4244842 +7354:0020444029FC110429FC490489FC0820192428A8492488200BFE082050202020 +7355:002046222BFE1090288849FE8B100D1019FE2910491089FE0910091051FE2100 +7356:002045FC282010882BFE488889FC090419FC290449FC890409FC088851042202 +7357:00009FFE58002A286948ABEE289228846AA0AAA82BE8288828942914A9245242 +7358:082049202A3E7F4849485DA86B104928414440200110FFFE02800C603018C006 +7359:0108890855482390511E97D4156415543554575495D4154815481554A46444C2 +735A:0088448829FC108828884BFE882009FC192429FC492489FC0800088851042202 +735B:00A094A452A820A057FC911010A017FC304053F8904017FC10A01110A2084C06 +735C:0020452428A813FE28A849248A220904190429DE4A448D54089E090452042404 +735D:000045FC284810302BFE485288940B5018202BFE4A528A8A0B760A5252722206 +735E:002045FC288810502BFE480089FC092419FC292449FC882009FC082053FE2000 +735F:0020442029FC10202BFE49088B9C090819882E3E48008BFE089008905112220E +7360:0040904057FC20A05514920817FC1A0A33F8520893F8104012481444A9444080 +7361:00808B1C52042204539C9204120413FC310053FE940212AA12AA1402A0144008 +7362:00388BC0508027FE5110920815F6191031F0500097FC140415F41514A5F4440C +7363:9090491402127F1249107FFE49107F100010FFA800287F28414441447F844102 +7364:0208890857C82010579E949417A4101437945094911411C817081114A5244242 +7365:01088A0857C8245057DE946417D41214311457D4921413C812481454A55448A2 +7366:008847FE288811FC290449FC890409FC188029FE4A228D52090209FA500A2004 +7367:00008BFC5294229453FC900017FE100033FC520493FC10A211141308AD444182 +7368:000045FC2954115429FC488089FE0A4219F22952495289F2084A0BFA500A2004 +7369:0020893C512027FE5010901413FE121033F05254925412D41368144AA8964322 +736A:004088A053182DF6500097FC155414E437FC500093F8120813F81208A3F84208 +736B:0040444028A011102A084DF6880008001BB82AA84AA88BB80910091052A82444 +736C:0200939E548A290A67D2A566254027D4655EA56427C42544255E2544A44448C4 +736D:021092105F9C22246248AFBE2AA22AAA6FAAA22A272A2AAA32882214A2224242 +736E:000097FC524824446FFEA44426EC255466ECA44426EC255426EC2444A4544408 +736F:003C97C050402FFE504097FC155414E437FC504097FC10401FFE1000A5244892 +7370:0080884057FC244452A892941474100033F852A89FFE100017FC1040A1404080 +7371:004044202BFE120229FC49488A5009FC1B0429FC490489FC090409FC50882104 +7372:008847FE28A8109029FE4B2089FC092019FC292049FE89000BFC08885070238E +7373:000045FC282013FE2A2249AC882009AC18002BFE482089FC095409545154210C +7374:011097FC511027FC540493F8100017FC3080514496A8117016A81126A6A04040 +7375:01248A485124200053FC92941264129433FC524893681248136A124AA2464362 +7376:03FC884051F8210851F8910817FE144232A4528A947A108011F81288A070438E +7377:0040882057FE248855FC948817FE142035FC552495FC152415FC1400A4884904 +7378:77105514771200127F1049FE7F1049107F100028FFA800287F4441447F844102 +7379:0040887C504023FC524493F0124412FC32A852F892A812F8120015FCA5544BFE +737A:0108890857CE2112512497DE1552155E37D2511E9392155E19401114A1124122 +737B:08100F1408127F1249105EFE49107F104A105F2851285B2855445F4455849502 +737C:00009EFE5254229262FEAE9228D628BA68D6AE9222D622BA22D62292AA9A4484 +737D:004097FC500023B852A893B8111017FC311057FC91101FFE11281310AD484186 +737E:01108FFE511027BC54A497BC1140112033FE522097FC1A2013FC1220A3FE4200 +737F:000097FE504022EE62AAABEA2AAE2AE86BAAACE6228825F422902060A1984606 +7380:000097FC54A424A467FCA21022A824BE6F68A23C24A82FBC20282AA8AABE4020 +7381:07BC94A457BC200057FE94001590149E37D4556495D4155415D41568ABC85054 +7382:024097E2525C2EF06AB0AEF0201E27D46554A7D4255427D421142FE4A1244144 +7383:03DE46522BDE12522BDE48A089FE0B201DFC292049FE880009FC08885070278E +7384:020001000100FFFE02000420082010403F8011000200042008103FF810080008 +7385:101008100810FE101054105220524290FC104814100420084408FE10422000C0 +7386:101008080808FEFE1010101020204242FCFC4848101020204444FEFE42420000 +7387:020001007FFC020044442F88111022484FE400200100FFFE0100010001000100 +7388:10400840087EFE801100101C20E042A0FCA248A410A820904490FEA842C40082 +7389:00007FFC010001000100010001003FF8010001000120011001100100FFFE0000 +738A:000000007FFC010001200110011001003FF801000100010001000100FFFE0000 +738B:00007FFC010001000100010001003FF8010001000100010001000100FFFE0000 +738C:00400040FF4008400840084008407E4008400840084008420F42F042403E0000 +738D:1000100010003FFC21004100810001003FF801000100010001000100FFFE0000 +738E:00000000FEFE1010101010107C1010101010101010101E10F010401000500020 +738F:00400040FE40104011FC10447C4410441044108410841E84F104410402280410 +7390:00000020FD201120112011207D2011201120111011101E10E208440808041002 +7391:000001F0FD1011101110111011107D1011101110111011121D12E212420E0400 +7392:00000000FDFC1020102010207C2010201020102010201C20E020402003FE0000 +7393:00400040FE8010FC110412047C0411041084104410441E04F004400400280010 +7394:01040124FD241124112411247D2411241124112411241D24E124422402040404 +7395:000001FCFC201020102010207C2013FE1020102010201C20E020402000200020 +7396:00800080FC8010F8110811087D1012101020102010501C50E088410802040402 +7397:000001FCFC201020102010207C2013FE1020102010201C20E020402000A00040 +7398:00000000FDF810081008100810087DF811081100110011001D02E10240FE0000 +7399:00800080FC8010FE1080110011007DFC10041004100413F41C04E00440280010 +739A:000001F8FC101020104010807DFE10921092109211121D22E222444200940108 +739B:000003F8FC0810081108110811087DFE10021002100213FA1C02E00240140008 +739C:00100090FC901088108811247D2412221440104010881C84E10443FE01020000 +739D:00800080FC8011FC112012207C20102013FE102010201C20E020402000200020 +739E:00200020FC20102011FC10207C20102013FE102010501C50E088408801040202 +739F:00400020FC2013FE1088108810887C8810881050105010201C50E08841040602 +73A0:00200020FC501050108811047E0210881088108810881C88E088410801080208 +73A1:000001FEFE081088108810887D0811FE1018102810481E88F108420800280010 +73A2:00100090FC9010881108110412047DFA10881088108810881D08E10842280410 +73A3:00400020FE20100013FE10407C4010601050104810441E44F040404000400040 +73A4:00200020FC2013FE1020102010207DFC10201020102013FE1C20E02040200020 +73A5:000000FCFE841084108410FC7C841084108410FC10841E84F104410402140408 +73A6:00400040FC4013F8104810487C48104817FE104010A01CA0E110411002080406 +73A7:00400040FC801088110413FE7C0210901090109010901C90E1124112020E0400 +73A8:00000000FDFC1020102010207C20102011FC102010201C20E020402003FE0000 +73A9:00000000FDFC10001000100013FE7C9010901090109010901D12E112420E0400 +73AA:00200020FC5010501088114412227C20100011FC100410081C08E01040100020 +73AB:00400040FE40108010FE11087E8810881088105010501E20F050408801040202 +73AC:000001F8FD081108114811287D28110817FE110811081D08E108420802280410 +73AD:00100110FD101112111211147DD811101110111011101D12E1524192010E0000 +73AE:00400040FC4013FE1040104011FC7C40104013FE104210421C4AE04440400040 +73AF:00000000FDFE10101010102010207C6810A41122122210201C20E02040200020 +73B0:000001FCFD0411041124112411247D2411241154105010901C90E1124212040E +73B1:00200020FE501050108811047E0210F81088108810A81E90F0824082007E0000 +73B2:00200020FC5010501088112412127C1011FC1004100810881C50E02040100010 +73B3:00500054FC5210921090119E11F07E9010901090109010901C8AE08A40860082 +73B4:00480148FD481148114813FE7D4811481148114811781D00E100410001FE0000 +73B5:00880088FE88108813FE10887C881088108810F810881E88F088408800F80088 +73B6:000001FCFC201020112410A47CA8102013FE102010201C20E020402000200020 +73B7:00200020FC201020103E102010207C2011FC1104110411041D04E10441FC0104 +73B8:00800080FDFC1104120415F411147D14111411F4110411281D12E10240FE0000 +73B9:00400020FE2011FE102010207C44108411F8101010201E44F08241FE00820000 +73BA:080008001FFC2104410809201110250802007FFC01003FF801200110FFFE0000 +73BB:00200020F82023FE222222242220FBFC2284228822483A50E220445004880906 +73BC:00900090F8902290229222D4FA9822902290229022903A92E3D24E12040E0000 +73BD:00800080FD0011FC120414047DE411241124112411E41D24E004400400280010 +73BE:000001FCFD241124112411FC7D241124112411FC11241C20E020402000200020 +73BF:000001FCFE441044104410447C941088110010FC10841E84F084408400FC0084 +73C0:00200020FC4011FC1104110411047D0411FC1104110411041D04E10441FC0104 +73C1:00000000FBFC2100210021F02110F9102190225022503A10E21242920312020E +73C2:00000000FDFE1008100811E811287D281128112811E811281C08E00840280010 +73C3:00200020FC2011FC1124112411FC7D241124112413FE11041D04E10441140108 +73C4:00200020FD20112011FC112012207C20102011FC102010201C20E02043FE0000 +73C5:00200020FC2011FC112411247D2411FC1124112411241DFCE124402000200020 +73C6:00200020FC401088110413FE7C02100011FC110411041D04E104410401FC0104 +73C7:000001F8FD081108110811F87D081108110811F811081D08E108410807FE0000 +73C8:02000200FA00221E27D222522252FA522252225222523A52E452445E09521080 +73C9:000001FCFD041104110411FC11207D2011FE1120112011101D12E14A41860102 +73CA:0000F7BC24A424A424A424A4F4A42FFE24A424A424A434A4E4A445A408541088 +73CB:00000080FB1E2252225222522252FA52225222D2235A3A54E090409001100210 +73CC:00000040F8202028200820882090FA9422A222A224C23888E188428804780000 +73CD:00200020FC501088110412127C2010401188101010201C44E188401000600380 +73CE:00800080FC8010FE110211047E20102010A810A411241D22E222402000A00040 +73CF:00000000FDFC10201020102010207C2011FC1020102810241C24E02043FE0000 +73D0:00200020FC2011FC1020102010207DFE10201020104010481C84E1FE40820000 +73D1:00900088FC88108013FE10A010A07CA410A410A8112811321D22E262429E0400 +73D2:00200020FDFC102413FE10247DFC1020102011FC10201C20E3FE402000200020 +73D3:00400020FC2013FE100010887D0412021088108810501C50E020405000880306 +73D4:00400040F84027FE20802080F97C21082310251021FE3910E110411001500120 +73D5:00400040FDFC1044108410847D281210110813DE114A1D4AE14A4252035A04A4 +73D6:00200020FD2410A410A8102013FE7C9010901090109010921D12E112420E0400 +73D7:00200120FD2011FC112012207C2013FE1090109010901C90E11241120212040E +73D8:00200040FDF81108114811287D2813FE1108114811281D28E108420802280410 +73D9:00880088FC88108813FE108810887C88108817FE100010881C84E10442020402 +73DA:000001FCFD041124112411247DFC112411241154114C1D8CE104410401FC0104 +73DB:00200020FDFE1040104010FC7C84118412FC108410841CFCE084408400940088 +73DC:01040084FC88100013FE10207C2011FC1020102013FE1C20E020402000200020 +73DD:000003DEF84220422252214AF94A204220C6214A22523842E0424042014A0084 +73DE:00800080F8F82108231024A02040F8A02118220625F821083908E10801F80108 +73DF:000007F8F408240827F824882488F4E82528252826A8244A344AC88A09061202 +73E0:00200120FD2011FC112012207C2013FE107010A810A81D24E124422200200020 +73E1:0000FEFE101010107C7C10101010FEFE0100010001000280044008203018C006 +73E2:000001F8FD08110811F811087D0811F81144114811301D20E110414801860100 +73E3:00800080FDFC1104120411E47D24112411E4112411241DE4E104400400280010 +73E4:00800080FC8011FC112012207C20102017FE102011241D24E124412401FC0004 +73E5:000003FEFD081108110811F87D08110811F8110811081D1EE3E8400800080008 +73E6:00200020FC4011FE110211027D7A114A114A114A114A1D7AE1024102010A0104 +73E7:00900090F8902292219420982090F99822942492209020903912E1120212040E +73E8:00200020FC5010881104120211FC7C00100011FC110411041D04E10441FC0104 +73E9:00800080F93C220024802080217EFB082508210821083908E108410801280110 +73EA:00200020FDFC10201020102013FE7C001020102011FC10201C20E02043FE0000 +73EB:00400020FC2013FE104010887D0413FE1092109010901C90E1124112020E0400 +73EC:00280024F824202023FE22202224FA24222423A822283A10E212442A04460882 +73ED:00800080F8BE2288228822882288FABE2288248820883908E108423E04000800 +73EE:000007FCF404240425F424442444F5F425542554255425543574C44604460842 +73EF:00400040FC4411F41048105013FE7C4010801184129810E01C82E082407E0000 +73F0:00200124FCA410A410A8102011FC7C041004100411FC10041C04E00441FC0004 +73F1:00400024FA242108210820102040F84023FE208821083990E060405001880604 +73F2:000003FEFA022444204023FC2080F8A0212021FC20203820E3FE402000200020 +73F3:02040104F9082FE8229422A42288FA8A2292212421043908E2904240043E0800 +73F4:001000D8FB942094209023FEF8902094209420D823983890E0AA40CA02860102 +73F5:000001FCFD041104110411FC7C00100013FE102010201DFCE020402003FE0000 +73F6:01080088FC9011FC1024102411FC7D20112011FE106210A21D2AE22444200020 +73F7:00100018FBD42014201027FE2010F890209022D022903A90E28A42EA07060202 +73F8:000003FEF840204021FC20842084FBFE2000200021FC3904E104410401FC0104 +73F9:00280024F824202023FE22202224FA2423A422A822A83A90E29245AA04460882 +73FA:000001FCFC44104413FE10447C4411FC1080108011FC1E84E484408400FC0084 +73FB:00800080FCFE110012FC10847CA4109413FE108411241D14E1FE400400280010 +73FC:000001FCFD04110411FC11047D0411FC1104110411FC1C00E088408401020202 +73FD:00000006FBB8208820882108213EFB88208822882288393EE1004280047E0800 +73FE:000001FCFD04110411FC110411047DFC1104110411FC10501C90E0924112020E +73FF:000001FCFD041104110411FC7C2010201120113C11201D20E2A04260043E0800 +7400:00200020FC5010881144122210F87C081010102011FC11041D04E10441FC0104 +7401:01000100FDFE1200140011FE7C2210241120113C11201D20E12042A0047E0800 +7402:00200010FDFE1000100010FC10007C0010FC1000100010FC1C84E08440FC0084 +7403:00280024FC24102013FE102011207CB210B4106810A811241E22E02040A00040 +7404:000000FCFC84108410FC10007DFE1102110211FE11021D02E1FE4102010A0104 +7405:00400020FDFC1104110411FC11047D0411FC1120112211141D08E14441820100 +7406:000001FCFD24112411FC112411247DFC1020102011FC10201C20E02043FE0000 +7407:001C01E0FC20102013FE10A87D24122211F8108810901CBEE102410202140408 +7408:0008003CFDC01004114410A810007DF81010102013FE10201C20E02040A00040 +7409:00400020FBFC20402090210823FCF8042150215021503950E25042520452080E +740A:000007DEF89224922494249427D8F8942192219222923A9AE494489002900110 +740B:01840068F83020C823042040FBFE20A0212023FC25243924E134412800200020 +740C:00200124FD24112411FC10207C5010881144122210201DF8E008401000100020 +740D:004200E2FB82208A208A208A27EAF88A218A21CA22AA3A82E4824082008A0084 +740E:00240224FD24117E102410247C24137E1124112411241D24E144410002FE0400 +740F:00200420FA2022FE204020502E90FAFE2210221023FE3A10E210451008FE0000 +7410:00200124FCA410A8102011FC11047D2411241124112411241C50E08841040202 +7411:00200124FCA410A8102011FC7D04110411FC110411041DFCE104410401140108 +7412:00400040FCFC1088115010207CD8132610F8102010F81C20E3FE402000200020 +7413:00400020FBFE2202240421F82000F80023FE209020903890E1124112020E0400 +7414:00400020FBFE22022404200023FEF82020202120213C3920E2A04260043E0800 +7415:00400080FDFC1124112411FC11247D4411FC1090111013FE1C10E01040100010 +7416:00480044FC5E11E0102810127C6A11961048105E11E01C24E0284012006A0186 +7417:00400020FDFE1000108810887D5412221000102013FE1C20E020402000200020 +7418:001C03E0FA2023FE22202292230AFA0621FC2104210439FCE104410401FC0104 +7419:00140012F81027FE20102010FBD222522252225423D43808E0EA471A02260042 +741A:000003FCFA04220423FC22202220FBFE2220222022FC3A84E284448404FC0884 +741B:000007FCFC0424A4211022082040F84027FC204020E03950E2484C4600400040 +741C:00400040F84027FC204022482248FA48255420E021503950E248444408420040 +741D:01FC0104FD0411FC110411047DFC1040102013FE10881C88E050402000D80706 +741E:7CFC448444FC7C8444FC44847C84011402087FFC01003FF801200110FFFE0000 +741F:00A00090FC9011FE111013107DFE1110111011FE11101D10E11041FE01000100 +7420:00500050FC5011FC1154115411547DFC11541154115413FE1C00E08841040202 +7421:01000100F9DC21142114211427D4F8142114211425883D48E948411405140222 +7422:000003FEF8402080214422242068FAB0213022A8206838A4E122422000A00040 +7423:00400020F9FC2000210820902000FBFE2000200021FC3904E104410401FC0104 +7424:00800080FDF81108121015FC7C24102413FE102410241DFCE024402000A00040 +7425:00400040F87C204023FC22442270FBC02244223C22003AF0E49044920912120E +7426:00400040FBFC20A02110220827FEF80823C8224822483A48E3C8400800280010 +7427:00007FFC04403C7820083C780440FFFE00007FFC01003FF801200110FFFE0000 +7428:000001FCFD04110411FC110411047DFC1000111211D411181D10E1524192010E +7429:00FC0084FC8410FC108410847CFC100011FE110211021DFEE102410201FE0102 +742A:01080108FBFC2108210821F82108F90821F8210821083BFEE000409001080204 +742B:00200020FDFC104010F8104013FE7C881124122210F810201DFCE02040200020 +742C:00400020FBFE22022504210021DEFA5222522352249A3894E11041120212040E +742D:000001F8FC08100811F810087C0813FE1020122211741CA8E124422200A00040 +742E:00400020FBFE2202200021FC2000F80023FE202021283924E222442200A00040 +742F:00200010FDFE1102120410F87C88108810F8108010801CFCE084408400FC0084 +7430:00200122F9222224205020882304F82220202124212422283850E08801040602 +7431:000001FCFD241124117411247DFC11041174115411541D74E104420402140408 +7432:00900090F890239E209020902090FB9C209020902090239E3890E09000900090 +7433:01100110F910211027BC21102110FB3823B8255425543992E110411001100110 +7434:0000FEFE101010107C7C10101010FEFE010006C01A30E10E1FE0004000800100 +7435:0000FEFE101010107C7C10101010FEFE0000208020843E9820E020842684387C +7436:0000FEFE101010107C7C10101010FEFE00003FF8210821083FF8200220021FFE +7437:01080088F89023FC2040204021F8F840204027FE20A038A0E12041220222041E +7438:00200020FC3E102011FC110411FC7D0411FC1124102013FE1C20E02040200020 +7439:0000FEFE101010107C7C10101010FEFE010001007FFC054009203118C1060100 +743A:02100110F910247C221022102010F97E21102210262022243A42E2FE02420000 +743B:00200020FC5010881104120210F87C20102011FC102011241CA4E0A843FE0000 +743C:00400020FBFE2000200021FCF904210421FC202021283924E222442200A00040 +743D:00200022FDFA1024102813FE7C20104010FC118412841CFCE084408400FC0084 +743E:03F80248FA4823F82248224823F8F8A021102208251621103910E11002100410 +743F:000003FEFA22202023FE2020F9FC212421FC212421FC3820E3FE402000200020 +7440:0004001EFBE0202021FC21242124F9FC202023FE22223A2AE2FA4202020A0204 +7441:000001FEFD02117A1102117A11027C0010FC108410FC10841CFCE08440FC0084 +7442:000001FEFD12111211FE11007D7E11421142117E11421D7EE2424242047E0842 +7443:00400040FBFC204021F8208023FCF910220825F621103910E1F04110011001F0 +7444:00400020FBFE2202240421FC2000F9FC210421FC210439FCE104400003FE0000 +7445:000001FCFD04110411FC11047D0411FC100013FE10201D20E13C412002A0047E +7446:000001FCFD0411FC110411FC10207D2011FE1220102011FC1C20E02043FE0000 +7447:002001FEFC2010FC102011FE7C0010FC10A4109411FE1CA4E11441FE00040018 +7448:000001FCFC48103013FE10527C9411101230102013FE1C70E0A8412406220020 +7449:000001FCFD0411FC111011FE7D10114A1186100011FC1D04E1FC410401FC0104 +744A:0008000CF80A23FE2208220822E8FA0A220A22EC22AC3AA8E2EA421A02260442 +744B:00400040FDFC108413FE10007DFC110411FC102013FE1C20E22043FE00200020 +744C:000003FEFC20104011FC115411547D541154112C102013FE1C50E08841040202 +744D:00800080F8F82108221025FCF9042154218C212420203BFEE050408801040602 +744E:01100112FDD41118115211927D2E104011FC110411041DFCE104410401FC0104 +744F:00400020FBFE22022088210421FCF890211023FE20503890E110461000500020 +7450:01080088F89027FE200023C42254FA5423D4225422543BD4E2544244025402C8 +7451:008000FCFD0411F8100813FE10407CA213341058109413341C52E09043500020 +7452:000000FCFC8410FC108410FC10007DFE108010FE112A124A1C92E12240540088 +7453:00200020FBFE202021FC2124F9AC2174212421FC20203870E0A8412402220020 +7454:00400080FDFC110411FC11047DFC1020103213B410A81D28E124422404A20040 +7455:000003DEFA422242224223DE2200FA3E23D2221222143BD4E208421402240242 +7456:00800338FA28222823A822462200FA7C23A4222422283BA8E610422802440282 +7457:003C07C0FA442128200023FC2080F88027FE210021F83A88E250442008D80306 +7458:00000FDEF4922492249427942498F49427922492249225DA3E94C09000900090 +7459:00920124FA482124209220402080FBFE2202228A22523A22E252428A03FE0202 +745A:0100013CF92427E42124213C2124FBA422A422BC22A43AA4E3A4404400540088 +745B:00880088FBFE208820A8202021FCF9242124212423FE3820E050408801040202 +745C:004000A0F910220825F6200023C4FA54225423D422543A54E3D44244025402C8 +745D:00200040FDFC110411FC11047DFC100013FE102010201DFCE020402003FE0000 +745E:00200222FA22222223FE200027FEF820204023FE22523A52E252425202520206 +745F:0000FEFE101010107C7C10101010FEFE011008A0484449828E121810E7F00000 +7460:004003BEFA122292225222AA2324F84023FE222222223BFEE222422203FE0202 +7461:0100027EFB88228822BE22AA23AAFA2A222A23AA22AA3AAEE288438802880008 +7462:00400020FBFE2202249421082264F8902108220425FA3908E108410801F80108 +7463:00200124FCA8102011FC11047D0411FC110411FC11041D04E1FC400000880104 +7464:00400080FDFC1248113010C013007DFC1220102013FE10201D24E12441FC0004 +7465:000001F8FD08110811F811087D0811F8100013FC12941E94E294429407FE0000 +7466:00400080FDFC1104110411FC7D0011FE110011FE10021EAAE2AA440200140008 +7467:00200020FBFE202021FC204023FEF888213422E2202039FCE07040AC03220020 +7468:000003FCF89022942198209027FEF80021F82108210821F83908E10801F80108 +7469:08202AA44D28145022887FFE400280043FFC010001001FF80100012001107FFE +746A:000001FEFD2011FC112011FC7D20112011FE100212AA1EAAE2AA420200140008 +746B:001E01E0FC221112109410807C2011CE1102110211CE1D02E102410201FE0102 +746C:204017FE8090490813FCE1502252244E00007FFC01003FF801200110FFFE0000 +746D:00200010FBFE222022FC222423FEFA2422FC222022FC3A84E284448404FC0884 +746E:000003FEF850205023FE22522252FBFE2020202023FE3870E0A8412406220020 +746F:0100009EFBD22252225423D42258FA5423D2221222923A5AE2D4435002100010 +7470:00200040FBFC2224222423FC2224FA4423FC204020A838B4E13C41220222041E +7471:00200020FBFE202021FC210421FCF90421FC210421FC3904E3FE408801040202 +7472:00400040F8A02190224827FEFA0823F8220823F822003BF8E508450809F80108 +7473:00840044FC4811FE102010FC7C2011FE1040108010FE1D10E210441001FE0000 +7474:1000FE7810487C480048FE8682007CFC0044FE4410287C2810101E28F0444182 +7475:000001FCFCA41088105010207CD81326102011FC11241D24E1FC402203FE0002 +7476:0008003CFBC0200422442128F9FC2220202023FE20203924E124412401FC0004 +7477:000E03F0F8442224210823FE2242F84023FE208020FC3944E128421004680186 +7478:00400020FBFE2202241421E02100F90021FC2110211027FE3800E09001080204 +7479:00880088FBFE208820A820502088F9742222202021FC3820E0A8412402A20040 +747A:00200124FCA813FE120210F87C88108810F8102011FC1D24E124413401280020 +747B:000001FCFD2413FE112411FC7C0011FC110411FC11041DFCE10441FC00880104 +747C:002003FEFC2011FC112411FC11247DFC102213FE100813FE1D08E08840280010 +747D:01240124FA2424242954214AFA9226102A102250225C3A50E25042B0029E0300 +747E:00880088FBFE208820F8202021FCF92421FC202023FE3820E1FC402003FE0000 +747F:00007F7848485F4C64805F7844484A4851307F4C00007FFC01003FF80120FFFE +7480:00200222FBFE2090208821FE2310FD1021FE2110211039FEE110411001FE0100 +7481:00400080FBFC224422F4231422A4FA4422A423FC20403824E522450A090800F8 +7482:00880088FBFE208820F8208820F8F88823FE208821243AFAE020402003FE0000 +7483:00400020FBFE2000215421242154F9FC202023FE22423A92E2FA420A02020206 +7484:00400020FDFC1088105013FE7C0011FC110411FC11041DFCE09040920112060E +7485:01240248FD24100011FC11247DFC112411FC102013FE1C70E0A8412406220020 +7486:000007BCF88424A4229424A42050F988262620C023103864E388403000C00700 +7487:02100110F91027BE2240220023BEFA8A228822A822AE3AA8E4A845A8085E1080 +7488:01080108F90827D0211E2794F9242FD4221423D422543A48E24844D404240842 +7489:00100410FAFE221020FE209226FEFA9222FE221022FE3A10E210451008FE0000 +748A:00880088FBFE2088208820F82020FBFE2222233222AA3B76E2224222022A0224 +748B:002001FCFC88105013FE10007DFC110411FC110411FC1C20E3FE402000200020 +748C:00400020FBFE2202200021FC2020F9FC212421FC212439FCE000408801040202 +748D:008803FEF888200021FC20A820A8FBFE20A820A821FC3820E3FE402000200020 +748E:00000FBEF8A22AAA2AAA2AAA2514F8A220802FFE21103A10E3A0406001980E04 +748F:010001F8FA0823F020102FFE2080FC8824EA274A244C3DE8E44A464A04A60110 +7490:00100790FCBC24A424C427A82110F928214625C0253C3D24E52445A40E3C0024 +7491:00800080F9FE23542554215423FEF9542154215427FE20003954E12A022A0000 +7492:002007A4F8A822922114220825F4F80223F8220822083BF8E20841100FFE0000 +7493:008803FEFC88101C11E0102013FE7CA81124122211F810881C9EE082410A0204 +7494:01040088F80023FE222222AA2272FA2223FE200021FC3904E1FC410401FC0104 +7495:000003FCF80423FC200423FC2000FBBC212427BC20083BFEE108408800A80010 +7496:0200017EF840247C224420FCF940267E2220202023FE3870E0A8412402220020 +7497:21F8110841F821080BFE090073FC14A41154128800007FFC01003FF80120FFFE +7498:00200124F8A823FE20A821242222F904210421DE22442554389EE10402040404 +7499:00200020FBFE2050228A2104FBFE250421FC210421FC3820E124422204A20040 +749A:000003FCF848203023FE20522094FB50202023FE22523A8AE376425202720206 +749B:004003F8F84827FE204823F8F8402554275C244427FC3C44E75C455405540844 +749C:00880088FDFC1088108813FE10207DFC112411FC112411FC1C00E08841040202 +749D:002001FCFD2411FC102013FE7C0011FC110411FC11041DFCE10441FC00880104 +749E:00500252F954205023FE20882050FBFE202021FC20203BFEE050408801040602 +749F:000001FCFD0411FC110411FC7C2013FE100011FC11041DFCE020412402220060 +74A0:003C03E0FD2410A813FE10A87D24120211FC112411241DFCE124412401FC0104 +74A1:00280424FA7E22C82148207E2648FA48227E224822483A7EE240450008FE0000 +74A2:000003FEF85023DE2252225223DEF85023FE222222223BFEE222422203FE0202 +74A3:01240124FAAA23AE212422AA23AEF92427FE211021143914E28A424A02160422 +74A4:00200020FBFE202021FC2124F9FC212421FC202223FE3842E02442A2028A0478 +74A5:02880288F7E82290241E27E42454F8542754255425543748E548405402940122 +74A6:003C03C0F8442224210827FE2442FAA4228A247A208038F8E10842900060079E +74A7:3E1022FE3E4420287EFEA2103EFC221000007FFC01003FF801200110FFFE0000 +74A8:008000DCFA8423D424482A942324FC402248215027FC38E0E15042480C460040 +74A9:0040007CF84023FE2242227823C4FA3C220023FE22403BA4E25845B4045209B0 +74AA:01FC0104F90421FC200023DE2252FA5223DE202023FE3870E0A8412406220020 +74AB:00200124FCA813FE120210F810887C8810F8100011FC11241DFCE12441FC0104 +74AC:01080208F7C8245027DE246427D4F214211427D4221423C83248C454055408A2 +74AD:000004FEFA92227C2010207C2654FA7C2254227C221022FE3A10E51008FE0000 +74AE:002007FEF80023FE220222FA228AFBFE200021FC210439FCE10441FC000007FE +74AF:00200050FC881174120211FC7D2411AC112411FC10001CF8E08840F8008800F8 +74B0:000003FCFA94229423FC2000FBFE200023FC220423FC38A2E11443080D440182 +74B1:000007BEF108210827BE21082108F7BE20002080204425123522C9C003040CFC +74B2:00880448FA5020FC202020502694FA382250229822343A54E290422005FE0800 +74B3:00A000FCFD2013FE10A811247E2211FC110411FC11041DFCE10441FC00880104 +74B4:00880088FBDE208821DC22AA2488F80023FE20222120393CE12042A0047E0800 +74B5:0140024CFA642244234C226422A4FBAC22A422A427FE3800E110410802040404 +74B6:004003F8F84827FE204823F8F84027FE200022A424523BF8E2A842A80FFE0000 +74B7:014807C8F90827D0255E27E4FD5427D42554211427D43A08E3C84254055408A2 +74B8:00400020FBFE220221FC2148FA5021FC230421FC210439FCE10441FC00880104 +74B9:002003FEFC2011FC100013FE10027DFC102013FE100013FE1C04E3BE42A4038C +74BA:2FEC48244BA4682C4BA46AAC4BA44824FFFE80027FFC01003FF801200110FFFE +74BB:03DE0042FA52214A2252202023FEF8882088215422223820E7FE402000200020 +74BC:000803E8FA8823EE222823F42282FBE2200021FC21543954E154415407FE0000 +74BD:7FFC21087FFCB55A29283558210835582928355800007FFC01003FF80120FFFE +74BE:00400020FBFE2088205227AC22AAFAA825AC2000210439FCE10441FC01040204 +74BF:0040007CF84027FE240223FCFA4824A4211023F8260C3BFAE20843F8020803F8 +74C0:000001FCFC2013FE122211AC7C2011AC100013FE10201DFCE15441540154010C +74C1:008803FEFCA8109011FE13207DFC112011FC112011FE1D00E3FC40880070038E +74C2:008803FEFC88102011FC102013FE7C40108811FC100011FC1D54E15447FE0000 +74C3:03F80248FA4823F822482248FBF820002FBE2AAA2AAA3FBEEAAA4AAA0FBE08A2 +74C4:002003FEFC2011FC100013FE7E5213FE110411FC11041DFCE10441FC00880104 +74C5:044404E4F8A82AAA2EEE24A42AAAFEEE224220402FFE20E03150C2480C460040 +74C6:0042039CFA1023DE229422942420FBFC220423FC22043BFCE20443FC01080204 +74C7:03FC0040F9F8210821F8210827FEFC4222A4228A247A3880E1F842880070038E +74C8:00500190FC9E13EA108A11D2128A7CA410501088132610A81C70E0A841240060 +74C9:008801DCFC8813DE108811547E2211FC110411FC11041DFCE10441FC00880104 +74CA:010001F8FA0827FE22622292F9FC210421FC210421FC3880E1F842880070038E +74CB:00200010F4FE2244222820FE2092F6FE229222BA22AA22BA3286C50008FE0000 +74CC:00400020FDFE100011FC115411FC7C201122108C112210541CC8E14442520060 +74CD:0008073EF590255E2564265E2500F5DE2552255E2552265E3452C45604A0051E +74CE:01080108F7CE2112212427DE2552F55E27D2211E2392255E3940C11401120122 +74CF:01100090FBDE2010225E2182FBDE201023DE225023DE3A50E3DE4250025202CE +74D0:0040007CF84023FC224423F0FA4422FC22A822F822A83AF8E20045FC05540BFE +74D1:000007FEF4442598248827DE2488F5DC26AA248824202520353CC920092017FE +74D2:01040514F7DE29242FFF210CF3552DA723FC220422243A24E24400B001080604 +74D3:03DE0252FBDE225223DE222222FAFA2222FA22AA22FA3AAAE2FA427202AA0226 +74D4:03DE0252FBDE225223DE225223DEF98C2252204027FE3888E190406000D80304 +74D5:F7FC124817FCFC4686ECF55416EC155456EC244400007FFC01003FF80120FFFE +74D6:002003FEF80021DC215421DC2088FBFE208823FE208827FE3894E18806A400C2 +74D7:022203FEF89021FE231025FE2110F9FE211021FE210023FE3A8AE37602520276 +74D8:008803FEF88823DE225223DE20A0F89021FE212023FC3D20E1FC412001FE0100 +74D9:004003FCF84021F8200023FCF80421F0204023FC20083BBCE2A8439805240892 +74DA:052807BEF94827BE231825AAF94623FC220423FC22043BFCE20443FC01080204 +74DB:010801ECF10A2FEA29282BC8293EFFE829482BE82A282B683AA8CBF40AB412A2 +74DC:001000F81F2012201220122012201220122012101290225022A8432842048002 +74DD:02200720383C2A442A842A242A142A142A0429042928289028404A304D0E8900 +74DE:0210071038502A7C2A902B102AFE2A102A2829242942288228404A304D0E8900 +74DF:02400740387C2A842B742A542A542A742A482942294228BE28404A304D0E8900 +74E0:1008101CFEE828A844A882A87CA800A8FEA820A440A47CA404A2052829341224 +74E1:1008101C7CE810A810A8FEA844A828A87CA810A410A4FEA410A2112811341224 +74E2:0008FE1C28E8FEA8AAA8AAA8FEA800A87CA800A4FEA410A454A2932851342224 +74E3:409021C82708FD3E058055542548FD7E25482548755C25282508494849A89128 +74E4:1008FE1C00E8EEA8AAA8EEA844A8FEA844A8FEA444A4FEA450A2CB2865344224 +74E5:06FE38202C542AB42A5829B454545D9290307EFC52A47EFC10201424FEFE0202 +74E6:0000FFFE04000400040007E008200A20092009200820102213221C22101E0000 +74E7:0020FC202020202020203DFC2420242054204C20442044205422640243FE0000 +74E8:000001FC7C801080108010F8108810881148112811281D08E108414A018A0106 +74E9:0010FC3820E0202020203C2025FC242054204C20442044205422640243FE0000 +74EA:0004FC0E20F0208020803CFC248424C454A84C90452845445602640243FE0000 +74EB:044008203018DFE604200420082010A020407FFC08000FE0092010A41624181C +74EC:200011FC0080FE80208020F83C88248825482528252825084508554A898A0106 +74ED:000011FC10801080FE8092F81088108829482928292829084B084D4A898A0106 +74EE:0440082010102208C44608201FF0000000007FFC08000FE0092010A41624181C +74EF:00007EFC40404440644054784848484854A854986488408840AA7ECA008A0006 +74F0:0010FC502048208820843D0226F8244854484C88448845285612640243FE0000 +74F1:0020FC7021C0204020703DC02440247857C04C4844484448543A640243FE0000 +74F2:0020FC2021FE202021243D24252425FC54204C244424441C5402640243FE0000 +74F3:100011FC10801080FE8010F8108810887D4845284528450845087D4A458A0106 +74F4:100010FC284024404240917808480848FEA802984488288810AA08CA088A0006 +74F5:100011FC208028804480FEF8428800887D4845284528450845087D4A458A0106 +74F6:420024FC00407E402440247824482448FEA824982488248824AA44CA448A8406 +74F7:0100410021FC0A441448E0A02110260C00007FFC08000FE0092010A41624181C +74F8:0000FDFC2020204020F83C88248824F854884C8844F844885402640243FE0000 +74F9:00007EFC424042407E4000787E48424842A87E98428842887EAA42CA4A8A4406 +74FA:00003EFC204020403C40207820483C4820A82098FE88208824AA42CAFE8A4206 +74FB:420024FC1840244052401078FF48204828A87E98AA882A882AAA2ECA088A0806 +74FC:0000FDFC2124212421FC3D24252425FC54204DFC4420442055FE640243FE0000 +74FD:0100111009207FFE40029FF410101FF000007FFC08000FE0092010A41624181C +74FE:0C0071FC1080FE80388054F8928800881148FD28252845082908114A298AC506 +74FF:100008FC7F40004022401478FF48004800A83E982288228822AA3ECA228A0006 +7500:02000F7C78200820FFA02A382A28FFA82A582A48FFC80848085A0F6AF04A4006 +7501:220022FC4440EE404440447844484448EFA844984488448844AA44CA448A8406 +7502:1000087C7E20422042207E38422840287F58554855487F48D55A556A554A4306 +7503:0620382008A47EA819202C504A88090400007FFC08000FE0092010A41624181C +7504:0000FEFC28402840FE40AA78AA48FE4810A81098FE88108810AA1ECAF08A4006 +7505:0000FDFE2100217C21543D7C2554257C55104D7C451046FE5402640243FE0000 +7506:082004407FFC12483CF0082014503EF800007FFC08000FE0092010A41624181C +7507:08202AA42CA84920145022887FFE400280047FFC08000FE0092010A41624181C +7508:080010FC7E4042407E4042787E4842487EA80898FF8818882CAA4ACA888A0806 +7509:2200147CFFA0142014207F381528FFA815587F4814483648555A94EA144A1406 +750A:08007F7C4920FFA049207F3808287F2849587F481048FF48215A726A0C4AF306 +750B:200010FCFE4044402840FE7882489248FEA89298BA88AA88AAAABACA828A8606 +750C:0000FEFC80408040BC40A478A448BC4880A8EE98AA88AA88EEAA80CAFE8A0006 +750D:0820FFFE08203FF824483FF800007FFE4002BFF408000FE0092010A41624181C +750E:100010FCFE4010407C4054787C4854487CA81298FE880888FEAA48CA288A1806 +750F:08047F0808103E6400083E1022643E0814107F6000007FFC08000FE011241C9C +7510:0800497C2A200820FF202A38492888284258774892485A482F5A226A424A8206 +7511:440024FC2840FE409240D678BA489248FEA800987C8844887CAA44CA7C8A4406 +7512:2000207C7FA0D52055205538FFA8552855585548FFC800486A5A556A954A0006 +7513:00407C2045FC44887C5043FE7C20A5FC24203C2000007FFC08000FE011241C9C +7514:20003E7C4220FFA0512064B87FA840285F5840485F4840485F5A516A5F4A9106 +7515:0100FFFE104824FE799010FC22907CFC089030FEC0807FFC08000FE011241C9C +7516:3EF822883EF822883EF822883EF8145022887FFC08000FE0092010A41624181C +7517:08000F7C08207F2049205E3849287F284A585F4851485B48555A5F6A554A9506 +7518:08100810081008107FFE08100810081008100FF008100810081008100FF00810 +7519:005000480040FFFE004022402240FF40224022203E20221222123E0A22060002 +751A:082008207FFC082008200FE0082008200FE008200820FFFE1220141010001FF8 +751B:4404441E44F04410FE1044FE4410441044107CFE44824482448244827CFE4482 +751C:08881C887088108811FEFC88108810887C8844F84488448844887C8844F80088 +751D:08480F4808487F4849FE4E4878484948477840485E485248527A520291FE2000 +751E:0100111009207FFE40029FF410101FF000001010FFFE10101FF010101FF01010 +751F:01001100110011003FFC21004100810001003FF80100010001000100FFFE0000 +7520:002000207D20452045FC452046207C20442045FC442044207C20442003FE0000 +7521:08100810489048907EFE48908910081008107EFE0810081008100E10F1FE4000 +7522:010000803FFE022001C002203FFE2080248027FC2880308027F8408040809FFE +7523:010000803FFE041002203FFE2080248027FC2880308027F8408040809FFE0000 +7524:00100010FF50087C105030904A109C7C28104C109A1029FE48808860281E1000 +7525:11FC1124512451FC7D24512491FC10407C4013FE104210821C82E10242140408 +7526:0010FF101050107CFE5092909210FE7C92109210FE1090FE500020005FFE8000 +7527:101050507E7E90907C7C10101EFEE0001FF010101FF010101FF0101010501020 +7528:00003FF82108210821083FF82108210821083FF8210821082108410841288010 +7529:00003FF82108210821083FF82108210821083FF82108210821284112410280FE +752A:040008003FF82108210821083FF82108210821083FF821082108410841288010 +752B:01200110FFFE010001003FF8210821083FF8210821083FF82108210821282010 +752C:00003FF00020064001803FF8210821083FF8210821083FF82108210821282010 +752D:7FFC01000770190CE10200003FF8210821083FF8210821083FF8410841288110 +752E:08001FF822484488095012203FF8210821083FF8210821083FF8410841288110 +752F:020001007FFE41029494142823E800003FF821083FF821083FF8210821282010 +7530:00003FF8210821082108210821083FF8210821082108210821083FF820080000 +7531:01000100010001003FF821082108210821083FF821082108210821083FF82008 +7532:00003FF82108210821083FF82108210821083FF8210801000100010001000100 +7533:0100010001003FF82108210821083FF82108210821083FF82108010001000100 +7534:01000100010001003FF821082108210821083FF820082008200820083FF82008 +7535:0100010001003FF82108210821083FF82108210821083FF8210A0102010200FE +7536:0200020004003FF821082108210821083FF821082108210821083FF820080000 +7537:3FF8210821083FF8210821083FF8000001007FFC010401040204040418146008 +7538:0800080010001FF820084008BF88248824883F88248824883F88208800500020 +7539:010001003FF821083FF821083FF80000FFFE080010001FF00010001000A00040 +753A:000000007DFE54105410541054107C1054105410541054107C10441000500020 +753B:0000FFFE000000004FE4492449244FE44924492449244FE4400440047FFC0004 +753C:00003FF8210821083FF8210821083FF800000000FFFE01000100010005000200 +753D:008200927C9254925492549254927C9254925492549254927C92451201020202 +753E:0888111022201110088800003FF82108210821083FF82108210821083FF82008 +753F:002000107C10540055FE548054807C8054805480548054807C80448000FC0000 +7540:00001FF0111011101FF0111011101FF000000000FFFE08200820082010202020 +7541:010001001FF0111011101FF0111011101FF00000FFFE08200820082010202020 +7542:008000807C8054F85508550855107E1054205420545054507C88450802040402 +7543:104010401040FE7C92849284FF0492449224FE24920410041004100410281010 +7544:0408420821101110102000403FF82108210821083FF82108210821083FF82008 +7545:100011F810107C20544054807DFC5454545454947D2454241044108411281010 +7546:100008080808FF88000800087F104910491049207F244924494249FE7F424102 +7547:004000407C8054FC5504560454847C4454445414542454447D84440400280010 +7548:0008001C7DE05500550055FC55447D4455445528552855107D10462802440482 +7549:002000207C20542055FC542054207C2057FE5420545054507C88448801040202 +754A:008800887C88548855FE548854887C8857FE5488548854887C88450801080208 +754B:004000407C40548054FE550856887C8854885450545054207C50448801040202 +754C:00001FF0111011101FF0111011101FF002800C603458C4460440084008401040 +754D:002000207C5054505488550456027C8854885488548854887C88450801080208 +754E:002000287C245424542055FE54207C2054205450545054507C88448801040202 +754F:00001FF0111011101FF0111011101FF00000FFFE111010A010401430180E1000 +7550:0000FFFE00001FF0101010101FF000003FF8210821083FF8210821083FF82008 +7551:100011FC1124112455245924512491FC1124112411242924252445FC41048000 +7552:101008100810FF90001000107F104910491049287F284928494449447F844102 +7553:010001047D88095011202118C50602003FF8210821083FF8210821083FF82008 +7554:002000207D2454A454A8542055FC7C205420542057FE54207C20442000200020 +7555:1FF0111011101FF0111011101FF000003FF8210821083FF8210821083FF82008 +7556:0008001C7DF055505550555055507D5055505548554855687D54467402520400 +7557:02000100FFFE00001FF010101FF000003FF8210821083FF8210821083FF82008 +7558:002000207C2055FC5524552455FC7D245524552457FE55047D04450401140108 +7559:060078FC4044484444445A94610800003FF8210821083FF8210821083FF82008 +755A:0200044008201FF002007FFC082010103FF8D11611101FF0111011101FF01010 +755B:002000207C5054885504561254207C4055885410542054447D88441000600380 +755C:020001007FFC040008201FC003100C083FFC00043FF821083FF821083FF82008 +755D:102008200820FFBC002400447F444988490849107F104928492849447F844102 +755E:01000100FFFE012001207D205538554855487D885510551055287D4845840102 +755F:00003FF821083FF821083FF81210220847E4882214402280010006C01830E00E +7560:010002001FF010101FF010101FF000003FF8210821083FF8210821083FF82008 +7561:002000107C1055FE5420542454447CF854125422544455887C10442800440182 +7562:00003FF821083FF821083FF8092009207FFC092009203FF801007FFC01000100 +7563:010002800C603018CFE600001FF010101FF000003FF821083FF821083FF82008 +7564:002000207C2055FC5420542057FE7C08540855FE540854887C48440800280010 +7565:00800080F8F8A908AB10ACA0F840A8A0A918AA06ADF8F9088908010801F80108 +7566:002000207DFC54205420542057FE7C005420542055FC54207C20442003FE0000 +7567:00003FF821083FF821083FF808001FF0282007C01830E00E1FF010101FF01010 +7568:010011100920FFFE054009203118C0061FF0111011101FF0111011101FF01010 +7569:004000207C2055FE5440544054A07CA255A45698549054887C8844A400C20080 +756A:00F83F00111009200100FFFE092010103FF8D11611101FF0111011101FF01010 +756B:01003FF80108FFFE01083FF801007FFC00003FF821083FF821083FF80000FFFE +756C:010002800C603018CFE601003FF81110250802003FF821083FF821083FF82008 +756D:002000207C505488550456FA54207C2057FE5420552855247E22442200A00040 +756E:008000807CFE550056FC548454A47C9457FE5484552455147DFE440400280010 +756F:00400040F888A904ABFEA802F888A944AA42A8F8A988FA508820005001880606 +7570:00003FF821083FF821083FF8082008207FFC08200820FFFE0000082010102008 +7571:00007FFC02803EF8228822883EF802803FF8210821083FF8210821083FF82008 +7572:010002800C6037D8C0063FF809201110250802003FF821083FF821083FF82008 +7573:00003FF821083FF821083FF80000FFFE80021FF010101FF010101FF01010FFFE +7574:00200020FBFEA820A9FCA840FBFEA848A888A8FEA908F9488A28040800280010 +7575:01003FF80108FFFE01083FF80100FFFE00001FF051145FF451145FF440047FFC +7576:0100111009207FFE40029FF4101010101FF000003FF821083FF821083FF82008 +7577:000003DEF842A94AA884A94AFA52AC20A800ABDEA852F9528894014802540422 +7578:002000207DFC54505488550457FE7C0855E85528552855E87D28440800280010 +7579:00400020FBFEAA02AD04A900F9DEAA52AA52AB52AC9AF894891001120212040E +757A:00007FFC00003FF821083FF82108FFFE00003FF821083FF821083FF80000FFFE +757B:002001247CA8542055FC544057FE7C8855245622542055FC7C20442003FE0000 +757C:000000FC7C8454FC548454FC54007DFE548054FE552A564A7C92452200540088 +757D:0008003C7DE0542057FE542055FC7D2455FC552455FC54207DFC442003FE0000 +757E:1FF0111011101FF0111011101FF00000FEFE92929292FEFE92929292FEFE8282 +757F:1110212045447978111025247D7C05240110FFFE00807C8854527C22545A7D86 +7580:0020542055FEA82055FC542403FE7C2455FC54207CA054BC54A07D60453E0200 +7581:000007BCF884ACA4AA94ACA4F850A988AE26A8C0AB10F8648B88003000C00700 +7582:00003FF821083FF821083FF8183006C018307FFE50129FF410101FF01010FFFE +7583:002001FC7C88545057FE540055FC7D2455FC552455FC54207DFC442003FE0000 +7584:00200124F8A8ABFEA8A8A924FA22A904A904A9DEAA44FD54889E010402040404 +7585:000003FEF800A9FCA924A9FCF924ABFEA800A9FCA924F9FC892401FC000003FE +7586:0000FBFE080009FCF92481FC8124FBFE480049FCE92449FC692489FC500023FE +7587:002003FEF820A9FCA800ABFEF802A9FCA820ABFEA800FBFE880403BE02A4038C +7588:0080F8BE0080709C5294729C0280FABEAAAAACAAF8BEA8AAA8AAF93E89220200 +7589:1FF011101FF011103FF82AA83EF82AA8FFFE88020FF010101FE00020FFFE0000 +758A:1FF011101FF011103FF82AA83EF82AA8FFFE90121FF010101FF01010FFFE0000 +758B:000000007FFC0104010801001100110011F81100110011002900250043FE8000 +758C:010001007FFC01003FF80108FFFE01083FF80100110011F81100290047FE8000 +758D:00007FFC0104110011F0290047FE80001FF010101FF010101FF00000FFFE0000 +758E:002000207DFE0420082011FC512451245DFC5020507050A85D247222C0200020 +758F:002000107DFE04200848108451FE50025CA850A850A850A85D2A712AC22A0406 +7590:01003FF801007FFE40029FF411101FF011101FF000007FFC010411F02900C7FE +7591:40004DFC7008445044203DFE40247C2890A010B8FEA010A028E02520451E8200 +7592:008000401FFE1000900050005000100030005000900010002000200040008000 +7593:008000401FFE1000900057F8510811103120513C910411042204220444288810 +7594:008000401FFE1000900057FC5040104030405040904010402040204041408080 +7595:008000401FFE1000900052005208121032605380920012042204220441FC8000 +7596:008000401FFE1000900057FC5084108430845084909410882080208040808080 +7597:008000401FFE1000900057FC5008101030205040904010402040204041408080 +7598:008000401FFE10009000500057FC10403040504090401040204020404FFE8000 +7599:008000401FFE1100910053FC5400180033F850109060108021002202420281FE +759A:008000401FFE11009100510053F01210341058209020104020A0211046089806 +759B:008000401FFE10009010501057FE101030105210911011102010201040508020 +759C:008000401FFE10009000500057FE104030405050904810442040204040408040 +759D:008000401FFE100090405040504014443444544494441444244427FC40048000 +759E:008000401FFE1000900053F85000100037FE5080910013F82008200840508020 +759F:008000401FFE1000900053FC5200120032005FFE92001200220023FC40008000 +75A0:008000401FFE1000900057FC5100110031F85108910812082208240848509020 +75A1:008000401FFE100093F0502050C0110033FC5124912412242244244448A88110 +75A2:008000401FFE100090405040524412443248545090A010A02110220844048802 +75A3:008000401FFE100090905088508017FE30A0512091201120222222224422881E +75A4:008000401FFE1000900053F8524812483248524893F812002202220241FE8000 +75A5:008000401FFE1040904050A0511012083D165110911011102110221042108410 +75A6:008000401FFE10009040504053F810483048504897FE10A020A0211042088C06 +75A7:008000401FFE1000903C57C054401440344057FE942014202412250A46068402 +75A8:008000401FFE1000900057FC50101210341057FE90501090211022104C508020 +75A9:008000401FFE1080908057F0511011123212544E904017FE2040204040408040 +75AA:008000401FFE1020922052205222122433A852309220122222A22322421E8000 +75AB:008000401FFE100093F052105210140E380057F89208111020A0204041B08E0E +75AC:008000401FFE100093FE52005220122032FC5224922412442244248444A88910 +75AD:008000401FFE10009110511051101110311052A8926812282444244448849102 +75AE:008000401FFE104090A05110520814063BF052109210125022202204420481FC +75AF:008000401FFE1000900053F85208132832A85248924812A8252A240A48069002 +75B0:008000401FFE10809040500057FC10403040504093F81040204020404FFE8000 +75B1:008000401FFE1200920053FC54041BE43224522493E4121422082202420281FE +75B2:008000401FFE1040904057FC5444144037F85508951014A0244028A049189606 +75B3:008000401FFE1000920852085FFE12083208520893F812082208220843F88208 +75B4:008000401FFE1000900057FE5008100833C85248924813C82248200840288010 +75B5:008000401FFE1000911051105512151435D8551095101510251225D25E12880E +75B6:008000401FFE100090485248524812483FFE5248924812782200220043FE8000 +75B7:008000401FFE1000903C57C054401440344057FE942014202412250A46468422 +75B8:010000803FFE20002000A7F86408240827F86408A40827F8200040005FFE8000 +75B9:008000401FFE104090A051105208142630C05310902010C02308201040E08700 +75BA:008000401FFE1000907857805040102037FC5008903010C023002480487E9000 +75BB:008000401FFE1000900053FC520412043204520493FC12042090210842048402 +75BC:008000401FFE1100910053F85610192030C053309C0E10C02020230040C08020 +75BD:008000401FFE1000900053F85208120833F85208920813F8220822084FFE8000 +75BE:008000401FFE1200920053FC5240144030405FFE904010A020A0211042088C06 +75BF:010000803FFE21203FFCA12461242FFC29206920AFFE21222222422A44248820 +75C0:008000401FFE1200920053FC5404180433E45224922413E42224200440288010 +75C1:008000401FFE10809080508050FC1080308057F8940814082408240847F88408 +75C2:010000803FFE24002400A4006FBC24A424A464A4A4A424A428A448BC52A4A100 +75C3:008000401FFE108090405FFE50801108321057E0904010802110220847FC8204 +75C4:008000401FFE1200920053FE5500190031F85100910011FC2100210041008100 +75C5:008000401FFE1000900057FC5040104037FC544494A415142614240444148408 +75C6:008000401FFE100093FC5204520413FC3200524092441248227024424442883E +75C7:008000401FFE100090005FFC504010403240527C92401240224022405FFE8000 +75C8:008000401FFE1000900057FC5444144437FC5444944417FC2444284448549008 +75C9:008000401FFE100097F85010502010D833045C0293F81040204020404FFE8000 +75CA:008000401FFE104090A0511052081DF63040504093F81040204020404FFE8000 +75CB:008000401FFE10009040504057FC14443444544497FC10402048207C4F828402 +75CC:008000401FFE1000900057FC540415F4340455F49514151425F4240444148408 +75CD:008000401FFE10409FFE50405FFC104437FC544097FE104220AA211442088C06 +75CE:008000401FFE108090405FFE5080110833F05020904411882610206841848602 +75CF:008000401FFE1040904057FE5080110033FC550499FC110421FC210441148108 +75D0:008000401FFE1000900057FC5404140435F45514951415F42404240447FC8404 +75D1:008000401FFE108091F852105D2010C031A0567C908411082690206040C08700 +75D2:008000401FFE111090A057FC5040104033F85040904017FC2040204040408040 +75D3:008000401FFE100097FC50805110120837FC5044904017FC204020404FFE8000 +75D4:008000401FFE1040904057FC504010403FFE501090101FFE2210211041508020 +75D5:008000401FFE100097F8540857F8140837F85484948814502420251846068400 +75D6:008000401FFE1000900053FC5090109034925292929410982090209047FE8000 +75D7:008000401FFE1200920053FE54001BF8328852489FFE1488244827FC40088030 +75D8:008000401FFE1000900057FC500013F83208520893F81000211020A04FFE8000 +75D9:008000401FFE100097FC5000524814903248500097FC1040204020404FFE8000 +75DA:010000803FFE20802088A7F060A03FFE20806FF0A620384027FC404041408080 +75DB:010000801FFE100097F850A0504017FC344457FC944417FC2444244444548448 +75DC:008000401FFE1000903853C0504017FC31505248944611F02110211042128C0E +75DD:010000803FFE22102208BFFE6248225022646248A2522264244A447248C2933E +75DE:008000401FFE100097FC5020504011D036485044900013F822082208420883F8 +75DF:008000401FFE104092485150504013F8320853F8920813F82208220842288210 +75E0:008000401FFE10809108520457FE110A3284548291F813082490206041988E06 +75E1:008000401FFE105090485FFE504017FC344457FC944417FC2444244444548448 +75E2:008000401FFE100090C45704511411143FD45314939415542504290441148108 +75E3:008000401FFE10009040504057FC1040304053FC900010402124252A450A88F8 +75E4:008000401FFE1040904052485248155438E25040904017FC2040204040408FFE +75E5:008000401FFE10009210512057F814083408540897F81120212022224422981E +75E6:008000401FFE100097FC508053F8108831085FFE900013F82208220843F88208 +75E7:008000401FFE10109210511051541452329252109114160422082210422080C0 +75E8:008000401FFE1108910857FE5108100037FE5402904017FC2084210442288C10 +75E9:008000401FFE104097FC544457FC144437FC504097F81208211020E043188C06 +75EA:008000401FFE110091F0521054201BF83248524892481FFE20A0211042088C06 +75EB:008000401FFE10009200517C5404144435F4544494E415542644244444548408 +75EC:008000401FFE100093F8520853F8120833F8510093FC14942924224444A88110 +75ED:008000401FFE100097BC54A454A417BC34A454A497BC14A424A424A44AA4914C +75EE:008000401FFE100093FC520053F8120033F852009FFE14882450252046188406 +75EF:008000401FFE1080904057FC540413F03210521093F0120023F82208420883F8 +75F0:008000401FFE10409248525054A0111032085C449248125024A0211042088C06 +75F1:008000401FFE100090905090579E10903090539C90901090279E209040908090 +75F2:008000401FFE1110911051105FFE111035545554955415542554295641108110 +75F3:010000803FFE22102210A2107FBE221026106738AAB42A543292421042108210 +75F4:008000401FFE1200920053BC5524192431245FE49124112422A422BC44248800 +75F5:00801FFE1000103893C0504017FC315052489C4611F010202FFE204041408080 +75F6:008000401FFE10A090A057FC54A414A437FC54A494A41FFE2000211042088404 +75F7:010000803FFE20002080AFFC6120221024886FF6B49027F0249047F24082807E +75F8:010000803FFE21002504A7C469143FF4211467D4A5542554255445C441148108 +75F9:008000401FFE100093F8524853F8124833F850009FFE11102110211042108410 +75FA:008000401FFE1080910057FC544417FC348457FC914012403FFE204040408040 +75FB:00803FFE20002038AFC068402FFC28206B1AAC0627F8240827F8440847F88408 +75FC:008000401FFE100097FC5444544417FC344455F49514151425F4240447FC8404 +75FD:008000401FFE1120911053FE522016203BFC5220922013FC2220222043FE8200 +75FE:008000401FFE1000977E55045574165435545554955415742754240444148408 +75FF:008000401FFE103897C050405FFE115032485C4690801FFE2108231040E08F1C +7600:010000803FFE20002410A2106FA8242824446792A488248828A048905288A108 +7601:008000401FFE1000904057FC5110111032A8544490401FFE2040204040408040 +7602:008000401FFE10009FFC5120512017383408540897381120212021205FFE8000 +7603:010000803FFE20002FFCA100630824882D506260A5E029502250444859448080 +7604:010000803FFE22102FFCA21062103FFE200067F8A408240827F84408440887F8 +7605:008000401FFE1208911057FC544417FC344457FC944410402FFE204040408040 +7606:008000401FFE1090910853FC504017FE311052689D86103021C0201840608380 +7607:00803FFE200827F0A0406FFE204027FC6444A7FC244427FC204047FC40408FFE +7608:008000401FFE110097BC51145794111437A4514C90401FFE20A0211042088C06 +7609:008000401FFE104090A053185DF61000378454A497A414A427A4248444948588 +760A:010000803FFE200022F8A20864082DFE348064F8A520242025FE445044888506 +760B:010000803FFE20002FF8A80868682B8828886BE8AAA82BE8288A50EA5726A002 +760C:008000401FFE1100910457C4511417D4355457D4911413942554294441148108 +760D:008000401FFE100093F8520853F8120833F850009FFE120027FC292442548488 +760E:008000401FFE111097FC511051F0111031F0511097FE120022902308420083FC +760F:008000401FFE1040904453F45048105037FE508091F8130825F8290841F88108 +7610:010000803FFE20002280ACB8688828882EB86888A8882FF8214042204C18B006 +7611:010000803FFE200023F0A21063D0225022506FFCA80429E4292449E448148808 +7612:008000401FFE100097FE54425BFC104033F8524893F8124823F820404FFE8040 +7613:010000803FFE220023F0A4206FFC34A425146444A0402FFE20A0411042088C06 +7614:008000401FFE111091105FFE511010403FFE5040904017FC2404240447FC8404 +7615:008000401FFE100097BC5484548417BC3400547C97A414242428279044288446 +7616:008000401FFE1080904057FC521011203FFE500093F8120823F8220843F88208 +7617:010000803FFE20802FF8A49062A03FFE21406220AC9830862FF8408040809FFC +7618:008000401FFE124891505FFE51501248344450809FFE11082390206041988604 +7619:008000401FFE100097FC5248511010E033185C4693F8124823F8204447FC8004 +761A:010000803FFE28902510AFBE622222442A906A90AF9022102228442844448882 +761B:008000401FFE110097BC51145394111437A4514C9100104020242522450A88F8 +761C:010000803FFE210027F8A40867F8240827F86408A7F8208020444A424A1291F0 +761D:008000401FFE100097FC54A454A417FC30405150924814442150224844448040 +761E:010000803FFE204027FCA2486248255428A26318AC4623F8204040404FFE8000 +761F:010000803FFE200027F8A40867F8240827F86000AFFC2924292449247FFE8000 +7620:008000401FFE1444924854A45110120837FC5A0A93F8120823F8220842288210 +7621:008000401FFE104091B05E4E53F8120833F8520893F8120025FC250449FC8104 +7622:010000803FFE24002F78A9486D482B863F006978A9482D482B28491049289346 +7623:010000803FFE20802100AFFC68842FFC28846FFCA1482154225C44464842B03E +7624:008000401FFE1080977C542455A415543648508097FC144427FC244447FC8404 +7625:008000401FFE111090A057FC504013F8308057FC910013F82440284047FE8000 +7626:008000401FFE1140965C5444575C144437FC504097FC1208211020E043188C06 +7627:00803FFE208020FCA0806FFE288228F06F84A87C280029FC29004BFE490091FC +7628:00801FFE104017FC904053F8120833F8520893F8120813F822082FFE41108208 +7629:008000401FFE1110911057FC515010A0311052E89C0613F82208220843F88208 +762A:00803FFE210027F8A40867F8240827F86408A7F8212026183A664388420881F8 +762B:010000803FFE20502048BEFE72902A902BFE6490A4902AFE2A90529040FE8080 +762C:008000401FFE1000973C5120513C1720343C5420977E1128212A212445248232 +762D:00803FFE20003FFEA1206FFC29242FFC6000A7F820002FFC2248444449428080 +762E:008000401FFE111093F8521054A417FC30A053189C4613902064239840608380 +762F:008000401FFE142092205F7E544014A0373C5550951015FE251029284B449082 +7630:00803FFE200027FCA44467FC244427FC6100A20827F020C42FFE444849449082 +7631:010000803FFE20402FFEA2486248255428A26318AC0620802A444A4A520A81F8 +7632:010000803FFE22002448A848705422A425006C10B490249C24904550463E8400 +7633:00803FFE20002F7CA924651429A421606618B88623202C4021884E3041C08E00 +7634:00803FFE204027FCA1106FFE200023F86208A3F8220823F820404FFE40408040 +7635:010000803FFE222023BCA4A46AA82510220865F6A80027FC2250444849448080 +7636:010000803FFE22202220AFA0623E2FC22A946A90AF90221027284AA852448282 +7637:010000803FFE22102210AF90623E2FA42AD46A94AF94220827084A9452248242 +7638:008000401FFE120097BC52A454A415BC384057FC94A41554244424A44514840C +7639:010000803FFE22102520A8BC7744220422246F94A2142A84270443C45C288010 +763A:010000803FFE20002FFCA8046FFC28002FFE6820ABFE2B322AAA4B324AAA9206 +763B:010000803FFE20802FF8A8887FFE28882FF86490A7F021003FFE441043E09C1C +763C:008000401FFE111097FC511053F8120833F8520893F810402FFE20A043188C06 +763D:00803FFE22083FFEA20863F8204027FC6444A7FC20402FFE204047FC40409FFE +763E:00803FFE20402E78AA886B102CFC2A046AFCAA042BFC2E2028144952494A8A38 +763F:00803FFE20002FBEA8A26AAA2AAA2AAA6514A8A23FFE2208271040E0431C9C02 +7640:010000803FFE22202FF8A2207FFC20802FF86888AFF828882FF8422044108808 +7641:008000401FFE108094FC550058FC128432FC54849CFC144024FC2548443085CE +7642:008000401FFE104097FC50A0551413F8360C5BFA920813F82040244449428080 +7643:00803FFE20202F3CA9446AA82C102A286946A9382D502A7E2890487C481088FE +7644:008000401FFE1120911053FE56201BFC322053FC922013FE2200252444928892 +7645:008000401FFE100097FE50A057BC14A437BC50A097FC144427FC244447FC8404 +7646:010000803FFE21102554A5B8691022A824446FFEA88230842FF8410842288C10 +7647:00803FFE20002F3CA9246F3C29242F3C6804A9E4292429E4292449E449248A6C +7648:010000803FFE20402F50A1246A1824083B766150AF8C28782F48413045488284 +7649:00803FFE20002FBEA8A26FBE200027FC6444A7FC244427FC20407FFE40408040 +764A:010000803FFE20102F28A9446A922C7C2A086910A97E2D002AFE4820484488FE +764B:008000401FFE100097FC50A053B8120833B850A09FFE10402124252A450A88F8 +764C:008000401FFE100093F8520853F8100037BC54A497BC10402444244447FC8004 +764D:010000803FFE20802E4EA44465F4242425246EAEA444244424A446A4590E8200 +764E:008000401FFE100097BC54A457BC14A437BC540495F4151425F4251445F4840C +764F:00801FFE100017FC94A457FC10003FFE500093F8120813F8214423284D10818C +7650:00801FFE10A013189DF6500017FC355454E497FC100013F8220823F8420883F8 +7651:00803FFE212027F8A52867F825282FFE6800ABFC28002FFE2A444A285298A306 +7652:00803FFE204021A0A6187BF6200027A864A8A7A824A8278824A845904A5491F2 +7653:010000803FFE25102950B55067DE28243B946814AB942A942A884AC84A948C22 +7654:008000401FFE104097FC51105FFE100033F8520893F8120823F82544452A88FA +7655:008000401FFE1040902057FE5228127E34C8577E924814C8277E2248447E8840 +7656:010000803FFE20102788A4BE648027A22494643EAF882C8834BE478844888008 +7657:00803FFE200027FCA0406FFE284223586040A358200027FC244447FC444487FC +7658:00801FFE11101FFE911053F8124833F8524893F8104017FC245425F44414840C +7659:010000803FFE21002E78A8086F7828082FF86888ACC82AA82CCA4AAA4CC68882 +765A:00803FFE220023F8A4106FFE352426FA6400A5FC240025FC240049FC490491FC +765B:00803FFE20402FFEA00067FC240425F46514A7FC200823F020404FFE41508E4E +765C:010000803FFE20002FDCA8546FD42AA22A806FDCAA942FD4280852885454A862 +765D:00803FFE20402FFEA00067FC240425F46514A7FC200027FC20004FFE424884C4 +765E:00803FFE22102F9CA22462482FBE2AA26AAAAFAA222A272A2AAA529442228242 +765F:00803FFE210027F8A6486528249827F86210A5E8380627F8254847F845488558 +7660:010000803FFE20402FFEA0A06F5E255425546B5AA20823F8220843F844088808 +7661:010000803FFE2480273CA48463942408277E6A0AA2282FAE22284558484E9080 +7662:00801FFE1208111097FC504013F830805FFE921017F81A1623F0226443188204 +7663:010000803FFE24002744A928727E2F902A906FBCAA902F90207E43905C108010 +7664:008000401FFE121093DE5528588417BC34A457A494A417A42434252846A08420 +7665:010000803FFE25102950B55067DE28243B946814AFD429142B8849084FD48822 +7666:00803FFE200027FCA55464E427FC204067FCA0402FFE24A4285247FC40408FFE +7667:00803FFE20002FFCA8886B3029102FBC6BB8AD542912284029784940494097FC +7668:00803FFE200027FCA0406FFE284223586220A7FE2C2037FC242047FC442087FE +7669:010000803FFE2210221EBFA262442FBE2AA26ABEAFA2223E27224ABE52948222 +766A:00803FFE2010237CAE10627C2F1022FE6644A77C2AC42A7C3244427C42288244 +766B:00803FFE24003FBEA4086F10293E2F22692AAF2A292A2F2A292A7F94491290A2 +766C:010000803FFE24002722A914723E2F882A886F9CAA882F88203E554855488008 +766D:00803FFE20002FBEA8A26FBE28A22FBE68A2AFBE251428A22FFE431040E08F1C +766E:00803FFE20042EF8AA546AFE2C102AFE6A04AAFC2A042EFC282049544A4A8838 +766F:00801FFE14A417BC94A457BC14A437BC512093FE122017FC2A2023FC422083FE +7670:00803FFE20002AA8B5246ABE2F6829686FBEA0282FA82ABE2FA8482848BE87A0 +7671:00803FFE25182F94A53E672822682FBE6AA8AFA8223E2FA822285FBE452088A0 +7672:00803FFE22003FBEA2086F9028BE2FA268BEAFA228BE2FA228BE5FC0491490A2 +7673:00803FFE244427FCA4446FFE2AAA2FBE6AAAAFBE220827F020C44FFE424884C4 +7674:00803FFE24442AEAAE0E64E42AAA2EEE6000A7FC204027FC20404FFE404080C0 +7675:00803FFE244428E8AE0E64E42A0A2EEE60A0AAEA20402FFE28A24912484288A6 +7676:00887C9004A004C0448224442448085008201020101020084004800200000000 +7677:00907EA002444448283010102008DFF6010001000100FFFE0100010001000100 +7678:00907EA002444448283010102008CFE6010001007FFC010002C0042018106008 +7679:00907EA002444448283010102FE8C8260820101C2FE000200C4003800C707008 +767A:00907EA002444448283010102008DFF6044004407FFC0440084008441044603C +767B:00803E9002A424481450082017D02008DFF6101010101FF0082004407FFC0000 +767C:00907EA00444282810103CF8C49604903D0C200041F87C0804D0042028501188 +767D:0100020004003FF820082008200820083FF8200820082008200820083FF82008 +767E:0000FFFE0100020004003FF82008200820083FF820082008200820083FF82008 +767F:0820082010203F2021202120212021203F2021202120212221223F22211E0000 +7680:020004003FF8200820083FF8200820083FF80000203823C03C04200420041FFC +7681:020004001FF0101010101FF0101010101FF001000100FFFE0100010001000100 +7682:010002001FF0101010101FF0101010101FF00200020003FCFE000204020401FC +7683:040008003FF8200820083FF8200820083FF8044004400440084408441044603C +7684:1040104020407E7C42844284430442447E2442244204420442047E0442280010 +7685:1000100021FC7D2445244524452445247DFC45004500450045027D0244FE0000 +7686:208020883CB020C020842C84317C02001FF0101010101FF0101010101FF01010 +7687:020004001FF010101FF010101FF000007FFC010001003FF801000100FFFE0000 +7688:1004100E20F07C80448044FC44A444A47CA444A844A8449045107D2846440082 +7689:1090109020907A904A924AD44A984A907A904A904A904A924AD27F124A0E0000 +768A:1020102020507C5044884524461244107DFC44044408448844507C2044100010 +768B:020004001FF010101FF010101FF002007FFC044009203118CFE6010001000100 +768C:1020102020207DFE44204420442045FC7C7044A844A8452445247E2244200020 +768D:020004001FF010101FF010101FF0200020F83E882088208826A8389000800080 +768E:1040102020207BFE4800488849044A0278884888485048204850788849040602 +768F:1084104820007CFC44484448444844487DFE44484448444844487C8844880108 +7690:020004001FF010101FF010101FF021081110092011102108FFFE010001000100 +7691:1020112421247D2445FC440045FC44047C0445FC4500450045027D0244FE0000 +7692:101010D82394789448904BFE48904894789448D84B98489048AA78CA4A860102 +7693:1020112021207DFC45204620442047FE7C00440045FC450445047D0445FC0104 +7694:100011FC21047DFC450445FC440044007DFC4420442047FE44207C2044200020 +7695:00000000FEFE1020102020407EFC4284428442847EFC4284428442847EFC4284 +7696:1040102023FE7A024C0449F8480048007BFE489048904890491279124A0E0400 +7697:100011FC212479244974492449FC4904797449544954497449047A044A140408 +7698:1020102023FE7C2045FC442047FE44007DFC450445FC450445FC7D0445140108 +7699:080C08F07E8018802CFE2A8848888888090804001FF010101FF010101FF01010 +769A:102011242124792449FC48004BFE480079FC4904490449FC488878504BFE0000 +769B:020004001FF010101FF010101FF0081010207EFC428442847EFC428442847EFC +769C:1020101021FE7C0044FC448444FC44007DFE4502457A454A457A7D02450A0104 +769D:102020207D2444A47CA844207DFE0050FE50105010507C5210521E92F08E4100 +769E:1020104021FC790449FC490449FC48407BFE488849244A224DFC782048200020 +769F:102013FE20207DFC442047FE440045FC7D0445FC450445FC45047DFC44880104 +76A0:1020122223FE7890488849FE4B104D1079FE4910491049FE4910791049FE0100 +76A1:1020104021FC7D0445FC450445FC44207D2444A84524442047FE7C2044200020 +76A2:1020102021FC78204BFE49084B9C490879884E3E48004BFE489078904912020E +76A3:108813FE2088780049FC48A848A84BFE78A848A849FC48204BFE782048200020 +76A4:103C13E0212478A84BFE48A849244A0279FC4924492449FC4924792449FC0104 +76A5:104011FC210479FC490449FC490449FC7820492448A8492448207BFE48200020 +76A6:1088110823C87A504BDE4A644BD4491478944FF4491449C849487A544B5404A2 +76A7:103C13C020447A2449084FFE4C424AA47A8A4C7A488048F849087A904860079E +76A8:02001FF010101FF010101FF020407EFC42847EFC42847EFC01003FF80100FFFE +76A9:100021FC7D0445FC7D0445FC7C200124FCA8102013FE7C9010901D12E212440E +76AA:1124117422587ADA4BFE49544ADA4BFE78A248204BFE487048A879244A220020 +76AB:1040102023FE7A504BFE4A524BFE4A007A944AD84A904AD24A8E7C004954022A +76AC:11FC102023FE7A224DAC482049AC489079FE4B204DFC492049FC792049FE0100 +76AD:101E13E0212278944BFE4A524BFE48047BC44A7E4BC44A544BCC7A844AD40348 +76AE:0080008000803FFC2084208820802FF02410241022202140208041404630980E +76AF:0800087C08107F1049104A1048107EFE4210421052104C1044104A1092102010 +76B0:08200820087E7F4249824A7A484A7E4A427A4242524A4C4444424A42923E2000 +76B1:201020103E1042FE84920894FE9002FC02A47EA402A802A80290FF2802440082 +76B2:0010FF10911010FEFE922094289048FC7EA408A408A80EA8F890492809440A82 +76B3:10101410121010FEFE921094109092FC54A410A438A854A89290112851442282 +76B4:10101010201044FEFE9228944490A2FC3CA444A444A8A8A81090292845448282 +76B5:241024107E1024FE2492FF9400907EFC42A442A47EA842A842907F2842440082 +76B6:10101010FE1038FE5492929410907CFC44A47CA444A87CA800901D28E1444282 +76B7:08100810FF1008FE08927E9400907EFC42A442A47EA842A824900F28F1444282 +76B8:0010FE10921010FEFE9210947C9054FC7CA454A47CA810A8FE90112811441282 +76B9:080008FE08927F1049FE4A10487C7E54427C4254527C4C1044FE4A1092102010 +76BA:40104010FE1022FEAA92FA94429094FC48A4FEA422A8AAA8FA90432894440882 +76BB:10101E1010107EFE52925C9472904EFC40A45CA454A85CA854905D2896443882 +76BC:1010FE1010107CFE0092FE9482907CFC00A47CA444A87CA8449029280F44F282 +76BD:1010FE100010FEFE8292BA94AA90FEFC00A47CA444A87CA844907D280044FE82 +76BE:1010FE1010107CFE0092FE94AA90FEFC44A47CA444A87CA844907D2828444482 +76BF:000000003FF82448244824482448244824482448244824482448FFFE00000000 +76C0:0100010001800140012001100108010001003FF82448244824482448FFFE0000 +76C1:00003FF008100820083C10041004201440083FF82448244824482448FFFE0000 +76C2:00003FF801000100FFFE010001000500020000003FF8244824482448FFFE0000 +76C3:00007FFC010003000570090C3102C10000003FF82448244824482448FFFE0000 +76C4:00007FF801083FF821003FFC01040114010800003FF8244824482448FFFE0000 +76C5:010001003FF82108210821083FF82108010001003FF8244824482448FFFE0000 +76C6:0440082010102FE8C4260420082010A0604000003FF8244824482448FFFE0000 +76C7:010001007FFC028004400A203118C00600003FF82448244824482448FFFE0000 +76C8:00003FF008100FA008BC128411042294444800003FF8244824482448FFFE0000 +76C9:00701F8001000100FFFE054009203118C0063FF82448244824482448FFFE0000 +76CA:101008200000FFFE000008201010200840043FF82448244824482448FFFE0000 +76CB:024002207FFC04000BF0112020C043301C0E00003FF8244824482448FFFE0000 +76CC:100010F83E884288A2A8149008841084207CC0003FF8244824482448FFFE0000 +76CD:010001003FF801000100FFFE040008201FF000103FF8244824482448FFFE0000 +76CE:010001001FF011101110FFFE02800C603018C0063FF8244824482448FFFE0000 +76CF:0240022003F87E0003FCFE10016003821C62E01E00003FF8244824482448FFFE +76D0:082008207F20082808240F22F020402000003FF82448244824482448FFFE0000 +76D1:04402440247C2440249024882508040000003FF82448244824482448FFFE0000 +76D2:010002800C603018CFE600001FF010101FF000003FF8244824482448FFFE0000 +76D3:100009FC402020200BFE10207020102010A000403FF8244824482448FFFE0000 +76D4:040004007FFC08401248125024A0411082080C0600003FF8244824482448FFFE +76D5:100009F0411025900550095071121112120E14003FF8244824482448FFFE0000 +76D6:082004407FFC010001003FF801000100FFFE000000003FF8244824482448FFFE +76D7:4080208009FC12042448E04020A023182C0600003FF8244824482448FFFE0000 +76D8:020004001FF011101090FFFE10101210215040203FF8244824482448FFFE0000 +76D9:012001107FFC01003FF821083FF821083FF8210800003FF824482448FFFE0000 +76DA:011001087FFC0100211811A007401920E118450602003FF824482448FFFE0000 +76DB:009000883FFC208020883E48225022244A54448C81043FF824482448FFFE0000 +76DC:0080208011FC820454482040E0A023182C0600003FF8244824482448FFFE0000 +76DD:3FF000101FF00010FFFE111009A005401930E50E02003FF824482448FFFE0000 +76DE:021002FC7F4000840764781C021002FC7F4000840764781C00003FF82448FFFE +76DF:00007CFC448444FC7C8444FC44847C84011402083FF8244824482448FFFE0000 +76E0:08000FE010201FC000407FFC0600192006C039B0068C398000003FF82448FFFE +76E1:01003FF80108FFFE01083FF801007FFC248842443FF8244824482448FFFE0000 +76E2:00207C28542455FE7C20545054507C88010402023FF8244824482448FFFE0000 +76E3:00003F2024203F3E21403F5024883F0800003FF82448244824482448FFFE0000 +76E4:10783E4822482A86FF7822482A2842104A2884463FF8244824482448FFFE0000 +76E5:1100611C4D444544759C49844944755C420400003FF8244824482448FFFE0000 +76E6:010006C01930E7CE0080FFFE04403FF8284837B820083FF800003FF82448FFFE +76E7:010001F801003FFC21042FE0210827F8249027F0249027F020004FF84948BFFE +76E8:0BFE104061FC090411FC610405FC090431FCC08801043FF824482448FFFE0000 +76E9:08207F20083EFF4422A47F280828FF10082808463FF8244824482448FFFE0000 +76EA:23F8120893F8420843F810002FFEE20027FC2924225404883FF824482448FFFE +76EB:010006C01830EFEE00001FF010107FFC04401FF014501BB010103FF82448FFFE +76EC:00407E7C48907E1042FE7E10487C48447E7C00003FF8244824482448FFFE0000 +76ED:102022207C3E0A447FA408247F2814287F1008287F4408823FF824482448FFFE +76EE:00003FF82008200820083FF82008200820083FF820082008200820083FF82008 +76EF:000000007BFE4820482078204820482078204820482048207820482000A00040 +76F0:000001FC7C20442044207C20442047FE7C204420442044207C20442000200020 +76F1:000001FC7C20442044207C20442047FE7C204420442044207C20442000A00040 +76F2:02000100FFFE1000100010001FF800001FF010101FF010101FF010101FF01010 +76F3:002000107C10440045FE7C80448044807C804480448044807C80448000FC0000 +76F4:010001007FFC01001FF0101010101FF010101FF010101FF010101010FFFE0000 +76F5:004000407C8044FE45007E0044FC44087C104420444044807D02450200FE0000 +76F6:000000007DFC440044007C0047FE44907C904490449044907D124512020E0400 +76F7:004000407C8044FC45047E04448444447C444414442444447D84440400280010 +76F8:080008FC08840884FE8408FC18841C842A842AFC488488840884088408FC0884 +76F9:0020002078204BFE4820792449244924792449FC4824482078224822001E0000 +76FA:0008001C7CE0448044807C8044FE44887C884488448844887D08450802080408 +76FB:00900090790849084A047C024BFC4880790049F8480848087808480800500020 +76FC:0010009078904888490879044A044DFA78884888488848887908490802280410 +76FD:002000207C2045FC44207C20442045FC7C204420442047FE7C20442000200020 +76FE:007C3F8020803FFC20802FF8280828082FF8280828082FF8480848088FF80808 +76FF:004000207C2047FE44887C88448844887C884450445044207C50448801040602 +7700:000000FC7C84448444847CFC448444847C8444FC448444847D04450402140408 +7701:010011101108212440C003000C003FF8D0081FF810081FF8100810081FF81008 +7702:0004001E7DF0451045107D10451045FE7D104510451045087D0A454A01860102 +7703:0000000079FC4800480078004BFE4820782048404840488879044BFE01020000 +7704:000003FE7C20442045207D3E452245227D2245FE440244027C02440200140008 +7705:0008001C79E04900490079FC49444944794449284928491079104A2802440482 +7706:004000207C2045FE44407C404440447C7C444444444444447C84448401280210 +7707:004000407840494849447A424A424C4878484848481048107820484001800600 +7708:0040004078404BFC4A447C484840484078A048A048A0492079224A22041E0800 +7709:00003FF8210821083FF820002FF8280828082FF828082FF8480848088FF80808 +770A:0008003C7DE0442044207C3C45E044207C20443E47E044207C2244220022001E +770B:00F87F0001003FF80200FFFE040008001FF028104FF088100FF008100FF00810 +770C:00000FF048104FF048104FF048104FF040007FFC010011101108210445040200 +770D:000001FE7D00450445447D28452845107D104528452845447D84450001FE0000 +770E:000001FC7800480048007BFE48204820792849244A244A227C22482000A00040 +770F:002000207C2045FC45247D24452445247D2447FE442044507C50448801040202 +7710:000000007BFE48204820782049204920793C4920492049207920492007FE0000 +7711:0010009078904910497E7A524B924892791249124A524BD278624822004A0084 +7712:002000207C2045FC45247D24452445FC7D244524452445FC7D24442000200020 +7713:00280024782448204BFE7A204A244A247A244A284A284A907B124A2A00460082 +7714:00007FFC444444447FFC01000920111021084104092011102108410401000100 +7715:002000207C50448845047E12442044407D884410442044447D88441000600380 +7716:000001FC7D04450445047D0445FC44507C504450445044927C924512020E0400 +7717:008000807D0045FC46047C0445E445247D24452445E445247C04440400280010 +7718:01000100FFFE01002288145008203018DFF610101FF010101FF010101FF01010 +7719:002000207C20444044487C8445FE44827C0044FC448444847C84448400FC0084 +771A:010011001FF821005FF00100FFFE00001FF010101FF010101FF010101FF01010 +771B:002000207C2045FC44207C20442047FE7C7044A844A845247D24462200200020 +771C:002000207C2047FE44207C20442045FC7C7044A844A845247D24462200200020 +771D:0040002078204BFE4A027C04480048007BFE4820482048207820482000A00040 +771E:20703F8420041FFC00000FF848084FF848084FF848084FF840007FFE10102008 +771F:010001007FFC01001FF010101FF010101FF010101FF01010FFFE082010102008 +7720:000001FC7D04450445047DFC452045207DFE4520452045107D12454A01860102 +7721:0004001E7DF0451045107D10451045FE7D104510451045087D0A454A01A60112 +7722:10001EF8228862A894920882307EC0001FF010101FF010101FF010101FF01010 +7723:002000207D20452045FC7D20462044207DFE4420445044507C88448801040202 +7724:000001FC7D04450445047DFC450045407D444548457045407D424642023E0400 +7725:088008882E9028E028842E84F07C00001FF010101FF010101FF010101FF01010 +7726:0090009078904A904A927AD44A984A907A904A904A904A927AD24F12020E0000 +7727:000001FC7C44444444447C44449444887D0044FC448444847C84448400FC0084 +7728:0008003C7BC04800484078204BFC4808781048204840488079004A80047E0000 +7729:0040002078204BFE48407840488849087BF048204840488879044BFC01040000 +772A:000001FE7C20442044207DFE452245227D52454A458A45027D024502010A0104 +772B:002000207D2444A444A87C2045FC44207C20442047FE44207C20442000200020 +772C:00900088788848804BFE78A048A048A478A44928492849327A224A62049E0800 +772D:002000207DFC442044207C2047FE44007C20442045FC44207C20442003FE0000 +772E:000001FE7D024502457A7D024502457A7D4A454A454A457A7D024502010A0104 +772F:00200020792448A448A8782048204BFE787048A848A8492479244A2200200020 +7730:000001FE7C20444044887D0445FE44227C20442045FE44207C20442003FE0000 +7731:002000207BFE482049FC782449FC492079FE4822482A48547850488801040202 +7732:000003FE7C88448844F87C88448844F87C884488448E47F87C08440800080008 +7733:004000407CFC450446887C50442044407C8045FC468444847C84448400FC0084 +7734:0080008079FC49044A0479E44924492479E44924492449E47904480400280010 +7735:002000207C7C448445487C30442044487D90443E444245A47C18441000600180 +7736:000001FE7D00450045FE7D104510457C7D104510451045FE7D00450001FE0000 +7737:0100111009203FF802007FFC082010102FE8C8260FE008200FE008200FE00820 +7738:00400040789049084BFC78244920492079FC4A2048204FFE7820482000200020 +7739:008800487C50440045FC7C20442044207FFE4420445044507C88448801040202 +773A:0090009078904A9249947898489049987A944C9248904890791249120212040E +773B:010400847C88440047FE7C20442045FC7C20442047FE44207C20442000200020 +773C:000003F87A084A084BF87A084A084BF87A444A484A304A207A104A8803060200 +773D:0004001E7DE0450045067D78455045507D524554454845487D44465402620440 +773E:00007FFC444444447FFC000000FC7F0011101110111029282528454481820100 +773F:00400020781049E0482278344BB848B078A848A8492849247A244C2200A00040 +7740:082004407FFC01003FF80200FFFE04000FF018102FF0C8100FF008100FF00810 +7741:0100010079F04A104C207BF8484848487BFE484848484BF87848484001400080 +7742:0208050808881248050808883FF820002FF828082FF828082FF848084FF88808 +7743:00400040788849044BFE7802488849447A4248F849884A507820485001880606 +7744:002001247CA444A844207DFC450445047DFC4504450445FC7D04450401140108 +7745:000001FC7D0445FC45047DFC440044007DFC4420442047FE7C20442000200020 +7746:004000207BFE4A024C0479F8480048007BFE48904890489079124912020E0400 +7747:0108008878904BFC482478244BFC4A207A204BFE486248A2792A4A2404200020 +7748:000001FC7D04450445047DFC440044007DFE4420442045FC7C20442003FE0000 +7749:0020002079244924492479244AAA4C727820482049FC48207820482003FE0000 +774A:000000FC7C84448444FC7C0045FE45027D0245FE450245027DFE4502010A0104 +774B:001000D87B94489448907BFE48904894789448D84B98489078AA48CA02860102 +774C:0080008079F84A084C107BFC4A444A447A444BFC48A048A079224922021E0400 +774D:000003F87A084A084BF87A084A084BF87A084A084BF8492079204A220422181E +774E:01840068783048C84B0478404BFE48A079204BFC4D2449247934492800200020 +774F:000003FE7A224A224A227BFE4A224A627A724AAA4B224A227A224A0203FE0202 +7750:0020002078204BFE4820792448A448A87BFE487048A848A879244A2204200020 +7751:0040004078A048A049107A084DF64800788848484A4849507910482007FE0000 +7752:0020012279224A24485078884B0448227820492449244A287850488801040602 +7753:0090009078904BFC4A947A944A944BFC7A944A944A944FFE7800489001080204 +7754:002000207850488849047AFA480049FC7954495449FC4954795449540104010C +7755:004000207BFE4A024D04790049DE4A527A524B524C9A4894791049120212040E +7756:0020002079FC482048207BFE488849447A4248F849884A507820485001880606 +7757:000001F87908490849F87908490849F8788049FC4A544C9479244A4400940108 +7758:00003FF8244824483FF80000FFFE00001FF010101FF003040C881870EA180C06 +7759:004000207BFC4A044A047BFC4A004A287A244BFE4A204A507A504C8805040A02 +775A:000003FE7A104A104AFE7A104A104BFE7A004A104A104AFE7A104C1005FE0800 +775B:002000207BFE482049FC78204BFE480079FC490449FC490479FC490401140108 +775C:003C07C07A44492848007BF8484848487FFE484848484BF87848484001400080 +775D:0C8070FC1124FE24384454A8911000001FF010101FF010101FF010101FF01010 +775E:0020002078204BFE48207924492449247AAA487048A848A879244A2204200020 +775F:004000207BFE48004888788849544A22780048204BFE48207820482000200020 +7760:0020012478A8482049FC78404BFE488879044AFA4C88488878A848920082007E +7761:00100078F3C090409040F7FC92489248F7FE9248924897FCF040904007FC0000 +7762:00A00090788049FE49107B104DFC4910791049FC49104910791049FE01000100 +7763:08000EFC0844FF4408282A10492808441FF210101FF010101FF010101FF01010 +7764:000001FC7924492449FC7924492449FC780048004BFE48887888488801080208 +7765:004000807BFC4A244A247BFC4A244A447BFC489049104FFE7810481000100010 +7766:0020002079FC482048207BFE488849047A22482049FC48207820482003FE0000 +7767:001C03E07A204BFE4A207A924B0A4A0679FC4904490449FC7904490401FC0104 +7768:000000407B9C4A044A047B9C4A044A047BFC489048904890789049120212040E +7769:000001F87808480849F8780848084BFE78204A22497448A879244A2200A00040 +776A:00007FFC44447FFC01003FF80100FFFE082004403FF80100FFFE010001000100 +776B:002000207BFE482049FC78244BFE482479FC48204920493E79204AA0027E0400 +776C:0008003C7BC048444A247928490048207BFE487048A848A879244A2204200020 +776D:000001FC792449244974792449FC4904797449544954497479044A0402140408 +776E:004000A079104A084DF678004BC44A547A544BD44A544A547BD44A44025402C8 +776F:00207E20427E7EA448247F284810652843461FF010101FF010101FF010101FF0 +7770:008800887BFE488848A878204BFE4840788048FC49844A847884488400FC0084 +7771:000003DE7A424A424A427BDE4A004A3E7BD24A124A144BD47A084A1402240242 +7772:000001FC790449FC490479FC4820492079FE4A20482049FC7820482003FE0000 +7773:002000207BFE485048887B2649FC482078204BFE4800482079FC4820002003FE +7774:000003FE7A2248204BFE782049FC492479FC492449FC48207BFE482000200020 +7775:012801247BA4492049207FFE482048247BA44AA84AA84A907B92482A00460082 +7776:004000407BFC484049F878804BFC49107A084DF64910491079F04910011001F0 +7777:00200020F0FC9E2493FEF22494FC9420FEFC922092209BFEF420962009FE1000 +7778:000003FC7A244A244BFC7A004AFC4A847A844AFC4A844AFC7A844A8404FC0884 +7779:004000447BF4484848507FFE4840488079FC4B044D0449FC7904490401FC0104 +777A:008000BC7884490849FE7B204D20497C7990491049FE49107928492801440182 +777B:004000207BFE4A024C0479FC480049FC790449FC490449FC7904480003FE0000 +777C:000001FC7904490449FC7904490449FC78004BFE48204920793C492002A0047E +777D:001003D478584A52498C788849044AFA782048204BFE48207850488801040202 +777E:040008007FFC44447FFC01003FF80100FFFE082004403FF80100FFFE01000100 +777F:010001F801007FFE40029FF4092032900C603FF8D0161FF010101FF010101FF0 +7780:7E20243E1848FFA829104A28984600001FF010101FF010101FF010101FF01010 +7781:000003FC7A044BFC4A047BFC4A044BFC785048484FFE484078A0491002080C06 +7782:022807243C24242024FE3F2024202F3C29342F5429542F54298849884F148922 +7783:0008001C79F04910491079FE4910497C7944497C4944497C79444A44027C0444 +7784:008800887BFE48884888780049FC49247924492449FC49247924492401FC0104 +7785:008801C8F7089108912AF12A97AC9148F308938895549514F914912401240142 +7786:0020002079FC492449FC78204FFE480079FC4904492449247924485000880304 +7787:001000927A5249544910787E48104B38795449924910491079104A80047E0000 +7788:0090008879044A424C8879FC480448007BDE48424A52494A7A524842014A0084 +7789:1000FE7810487C480048FE8682007CFC00447C4444287C2844107C2844447D82 +778A:002000107BFE4A204AFC7A244BFE4A247AFC4A204AFC4A847A844C8404FC0884 +778B:002000207BFE482049FC790449FC490479FC490449FC49047BFE488801040202 +778C:0020002079FC482048207BFE488049047BFE48024BFC4A947A944A9407FE0000 +778D:0140065CF4449444975CF444944497FCF04097FC92089110F0A0904001B00E0E +778E:004000207BFE4A024C2479FC482049FC78204BFE482049FC7904490401FC0104 +778F:7FFC44447FFC01001FF001007FFC00001FF010101FF0048808503820CB180C06 +7790:1FF810081FF810081FF810081FF800007E7E42427E7E42427E7E42427E7E4242 +7791:000003FE7A02480049FC790449FC490479FC484048204BFE7800488801040202 +7792:01080108F7FE91089000F7FE90909090F7FE94929492956AF6469402040A0404 +7793:02020122782A4FEA482A7BAA482A4BAA782A4BAA4AAA4AAA7BAA4AAA00420082 +7794:002003FE782049FC48207BFE480049FC790449FC490449FC790449FC00880104 +7795:002001FC788848504BFE780049FC490479FC490449FC48207BFE482000200020 +7796:7F7848485F4C64805F784A4851307F4C00001FF010101FF010101FF010101FF0 +7797:0040008079FC490449FC790449FC490079FE490049FE48027AAA4AAA0202000C +7798:000003FE7A004A7C4A447A444A7C4A007AEE4AAA4AAA4AAA7AEE4A0003FE0000 +7799:008800887BFE4888480079FC490449FC790449FC48204BFE7850488801040202 +779A:004000207BFE4A02480079FC482049FC792449FC492449FC7800488801040202 +779B:01240124F22494249954F14A92929610FA109250925C9250F25092B0029E0300 +779C:002001FC79244BFE492479FC482049FC792449FC48404BFE788849D00070038C +779D:004000207BFE480049547924495449FC78204BFE4A424A927AFA4A0A02020206 +779E:008800887BFE4888488878F848204BFE7A224B324AAA4B767A224A22022A0224 +779F:000003FE785049FC4954795449FC480079FC48004BFE482078A8492402A20040 +77A0:0020012478A84BFE4A0278F84888488878F84820482049FC7820482003FE0000 +77A1:0200027CF2449744927CF2449244977CF2449244927C9228F528954A084A1086 +77A2:0820FFFE08203FF824483FF800007FFE40029FF410101FF010101FF010101FF0 +77A3:0020002079FC492449FC78204BFE4A227BFE4820484048247AA24A8A04780000 +77A4:00007BDE4A524BDE4A527BDE4A024AFA7A224A724A224A227AFA4A02020A0204 +77A5:082049202A3E7F4849485DA86B10492843461FF010101FF010101FF010101FF0 +77A6:002003FE782049FC480079FC490449FC78884BFE480049FC7904490401FC0104 +77A7:00A0009079FE49104B107DFE4910491079FE4910491049FE79004AA402520452 +77A8:00A004A4F2A890A097FCF11090A097FCF04093F8904097FCF0A0911002080C06 +77A9:000007FCF40497FC9400F5FC942095FCF52495FC942097FEF62A96FA0A0A1206 +77AA:002007A4F0A892929114F20895F49802F3F89208920893F8F20891100FFE0000 +77AB:000003FE78504BFE4A527BFE480049FC790449FC490449FC78204BFE00200020 +77AC:003C07C0F04492249108F7FE94029A08F20893BE94889AA8F13E920804080808 +77AD:00400040F7FC90A09514F20897FC9A0AF3F8920893F89040F248944409440080 +77AE:02080108F7C89210949EFFD490649794F494979494949788F488949404A405C2 +77AF:03DE7A524BDE4A524BDE7A024AF24A927AF24A924AF24A927A924B3202020206 +77B0:00080788F08891109FDEF49494A49794F4949794949494C8F7889C9400A400C2 +77B1:008803FE7888480049FC78A848A84BFE78A848A849FC48207BFE482000200020 +77B2:000003FC784848304BFE785248944B5078204BFE4A524A8A7B764A5202720206 +77B3:002001FC788848504BFE780049FC492479FC492449FC482079FC482003FE0000 +77B4:0080008079FE4B544D5479544BFE4954795449544FFE48007954492A022A0000 +77B5:00400248F15097FC9150F24894449208F20893BE94889AA8F13E920804080808 +77B6:002001FC792449FC48207BFE480049FC790449FC490449FC790449FC00880104 +77B7:00007BDE4A524BDE4A527BDE4A024AFA7A8A4AFA4A8A4AFA7A8A4A02020A0204 +77B8:008803FE7888480049487BFE49484978790049FC48204BFE787048A803260020 +77B9:003C03C0F04492249108F7FE944292A4F28A947A908090F8F10892900060079E +77BA:004000A0F3189DF69000F7FC955494E4F7FC900093F89208F3F8920803F80208 +77BB:010001F87A084FFE4A887B244BFE4A007AFC4A004AFC4A007AFC4C8404FC0884 +77BC:0040004078A049104A087DF6480048007BB84AA84AA84BB87910491002A80444 +77BD:0810FF7E08107E7C42447E282418FEE600001FF010101FF010101FF010101FF0 +77BE:00003EF822883EF822883EF822883EF801007FFC482410102FE8010001007FFC +77BF:3EF822883EF822883EF822883EF808801FFC30805FF890801FF810801FFC1000 +77C0:028802A8F6A89BF0901EF22495D49C14F41495D495549548F568955406140422 +77C1:00C80708F12A912C9FC8F10893889554F914912290409024F522950A090800F8 +77C2:01FC0104790449FC48007BDE4A524A527BDE48204BFE487078A8492406220020 +77C3:004000207BFE4A224954794A4A3A480079FC49544BFE480079FC482000A00040 +77C4:001C01E078204BFE482079FC49AC497479FC482049FC48207BFE48000154022A +77C5:000003DE78424A52494A7A52489049087BFE4D1049FE491079FE491001FE0100 +77C6:008803FE78A8489049FE7B2049FC492079FC492049FE49007BFC48880070038E +77C7:008803FE78884BFE4A0279FC48004BFE784048A24B5448B87B54489203500020 +77C8:004001FC790449FC490479FC48204BFE7A8A49244BFE488078FC488401140208 +77C9:004000207BFE4A0249FC79484A5049FC7B0449FC490449FC790449FC00880104 +77CA:01080110F23E922294BEF722913E9208F4BE97AA902A90AAF56A952E04080008 +77CB:000003FE7A484BFE4A487AFC4AA44AFC7AA44AFC4A204BFE7B2A4D7A050A0906 +77CC:002000107BFE4A444AFE7A444BFE4A107AFE4A924AFE4A927AFE4A0002440482 +77CD:7CF844887CF844887CF809001FF831005FF091001FFC10003FF0082007C0F83E +77CE:010001F87A084FFE4A627A9249FC490479FC490449FC488079F84A880070038E +77CF:004001FC79244994494C792449FC48207BFE4A8A49244BFE788048FC0104020C +77D0:01FC78204BFE4A224DAC782049AC489079FE4B204DFC492079FC492001FE0100 +77D1:0040007C78404BFC4A447BF04A444AFC7AA84AF84AA84AF87A004DFC05540BFE +77D2:010807FE79084BFC4A947BFC48004FFE7C0249F8490849F8790849F8010801F8 +77D3:011078904BDE48104A5E79824BDE48107BDE4A504BDE4A507BDE4A50025202CE +77D4:00887BFE48884BDE4A527BDE48A0489079FE49204BFC4D2079FC492001FE0100 +77D5:21084FD2F03C23884812FBBE0280ABAA00001FF010101FF010101FF010101FF0 +77D6:03DE78004BDE4A524B5A7A5248204BFE7A504BFE4A524BFE7A924ADC029204CE +77D7:01003FF801000FE00820092009207FFC08207EFC08203EF822882AA82AA8FFFE +77D8:02480150F7FC940491F0F11097FC9554F4E497FC904097FCF0409FFE02A40452 +77D9:0FBE08A2EFBEA8A2AFBEE802AB92A892EFDEAAAAABCAAAAAEB92AAD20FAA08C4 +77DA:03FE02027BFE4A924A547A924AFE4AAA7AFE4B224AFA4AAA7AFA4A2205FA0004 +77DB:00001FF000100220014000807FFE018202840480088010802080C08002800100 +77DC:00207E200250245018880944FE220A20180019FC280448088808081028101020 +77DD:00207C200450285010880924FE121A1029FC2804480848888850082028101010 +77DE:1FF0022001407FFC04841888628001003FF82448282837D82448244827C82018 +77DF:00107C9204522854101008FEFE821A8228FE2882488248FE88820882288A1084 +77E0:00487C48044829FE10480848FFFE1A0028FC2884488448FC8884088428FC1084 +77E1:03DEFA520BDE525223DE10A0FDFE372035FC512051FE500091FC10885070278E +77E2:0800080008001FF81100210041000100FFFE010002800280044008203018C006 +77E3:02000400082010103FF8080808001FF0210001007FFC0280044008203018C006 +77E4:00407C40048004FC05207E204020402043FE7C20045004500488048829041202 +77E5:20002000207C7E444844884408440844FF44084414441444227C224442008000 +77E6:080008001FE020204040BFFC240024002FF8308020803FFC414042208410180C +77E7:200421E43C245024902411E41104FF04110411E4102428242424442441448084 +77E8:2008203C21E07C205020902013FEFC2010201050105028502488448841048202 +77E9:200021FE3D005100910011FC1104FF041104110411FC29002500450041FE8000 +77EA:2010202020FC7C8450A490941094FDFE108410A4109428942484450441148208 +77EB:2008203C21E07C20502093FE1050FC881104128A108828882488450841088208 +77EC:2020202021247D245124912412AAFC721020102011FC28202420442043FE8000 +77ED:200021FE3C00500090FC10841084FE8410FC1000108428442448440041FE8000 +77EE:201C21E03C20502093FE10A81124FE42104013FE1088290824D0443040488184 +77EF:201821E03C4053FE908811741252FE70100011FC11042974255445744104810C +77F0:210420883C0053FE922212AA1272FE2213FE100011FC290425FC450441FC8104 +77F1:208823FE20A87C9051FE932011FCFD2011FC112011FE290027FC44884070838E +77F2:200023FE42527A52A3FE2110225223DCF81223CE224023D2525C4BD04A5282CE +77F3:0000FFFE020002000400040008000FF81808280848088808080808080FF80808 +77F4:00000000FEFE1010101020103E1062106210A210221022103E10221000500020 +77F5:00040004FE041044104420443E4462446244A244224422043E04220400140008 +77F6:000001F0F9102110211041107910C91049104910491049127A124212040E0800 +77F7:000001FCFC041008101020203C2067FE6420A420242024203C20242020A00040 +77F8:000001FCFC201020102020203C2067FE6420A420242024203C20242020200020 +77F9:00000000FDFC1090109020903C9064906490A490249024923C922492210E0200 +77FA:0008003CFDE01020102020203C20643E65E0A420242024223C222422201E0000 +77FB:00400040FE8010FE110022003CF86410A4202440244024823D02250200FE0000 +77FC:00000000FDFC1020102020203C2064206420A420242024203C20242023FE0000 +77FD:00400040FC40107E108220823D4266246414A408240824103C20244020800300 +77FE:000001F0F9102110211041107990C95049504910491049127A124212040E0800 +77FF:00200010FC1010FE108020803C8064806480A480248024803C80250021000200 +7800:000001F8FC101020104020803DFE64926492A492251225223E22244220940108 +7801:000001F8FC081008108820883C8864FE6402A402240225FA3C02240220140008 +7802:00200020FC2010A810A420A23D2265206624A424242824083C10242020C00300 +7803:000000FCFC84108410A420943C94648465FEA484248424843C84250421140208 +7804:00200020FC2011FC102420243C24642465FEA420245024503C88248821040202 +7805:00200020FC201020103221B23CB464A864A8A4A8252425243E22242020A00040 +7806:00200020FC20102011FC20203C20642067FEA420245024503C88248821040202 +7807:00400020FC2013FE108820883C8864886488A450245024203C50248821040602 +7808:000001FEFD001100117821483D4865486548A568255025423D422542223E0400 +7809:010001007FFC01003FF801007FFC01007FFC040008003FF0C81008100FF00810 +780A:00400020FC0011FC100020003CF064906490A490249024923C922512210E0200 +780B:00100010FC101090109020903C9E64906490A490249024903C90249023FE0000 +780C:00000100F97E21122112411279D24F12C91249124952499279224822004A0084 +780D:00400040FC40107C108420883D2064206420A450245024503C88248821040202 +780E:00200020FC501050108821043E0264886488A488248824883C88250821080208 +780F:00100050FC501050108820883D0466FA6448A448244824483C88248821280210 +7810:000003FCF884208820884090789CC88449444944492849287A10422804440182 +7811:000003FCF8102110211041107A10CBFE48304850489049107A10441000500020 +7812:00100110FD101112111221143DD865106510A510251025123D522592210E0000 +7813:000000F8FC881088108821063E0065FC6484A484244824503C20245020880306 +7814:000001FCFC881088108820883C8867FE6488A488248824883C88250821080208 +7815:00400040FDF810481088208A3D0A66266420A42027FE24203C20242020200020 +7816:00200020FC2011FC102020403DFE64406480A5FC240424883C50242020100010 +7817:00400040FC4013FE108020A03D2065FC6420A420242027FE3C20242020200020 +7818:00200020FC2013FE102021243D2465246524A5FC242424203C222422201E0000 +7819:00000000FBFC2100210041F079104910C9904A504A504A107A124A920312020E +781A:000001FCFD041104112421243D2465246524A554245024903C9025122212040E +781B:00200020FC501050108821443E2264206400A5FC240424083C08241020100020 +781C:000003F8FA082208232842A87AA8CA484A484AA84AA84B2A7C0A440A08061002 +781D:00200020FC2011FC102020203C2065FE6420A420244024483C8425FE20820000 +781E:00200020FC2013FE102020203C2065FC6470A4A824A825243D24262220200020 +781F:00800080FC8010FE114021403E40647C6440A4402440247E3C40244020400040 +7820:000000F8FC881088108820F83C8864886488A4F8248824883C88248823FE0000 +7821:00000000FDFC1020102020203C20642065FCA420242824243C24242023FE0000 +7822:00000000FDFE1008100821E83D2865286528A52825E825283C08240820280010 +7823:00200010FC1011FE110222043C8064886490A4A024C024823C822482207E0000 +7824:00800080FCFE1100122021203D2C657467A4A524253425283D22250220FE0000 +7825:0004001EFDF01110111021103D1065FE6510A510251025083D0A254A21A60112 +7826:088008882E9028E028842E84F07C00007FFC040008003FF0C81008100FF00810 +7827:00200020FC201020103E20203C20642065FCA504250425043D04250421FC0104 +7828:00400020FDFC1104110421FC3D006500657CA508251025203D422682227E0400 +7829:00900090F89023FC209440947BFC4A90CA904BFE48924892791A491402100410 +782A:000000FCFC8410A4109420843C8467FE6504A544252425043DFE240420280010 +782B:00400020FC0013FE102020203C20642065FCA420242024203C20242023FE0000 +782C:00400020FC20100011FE20003C0464846484A448244824483C50241023FE0000 +782D:0004001EFDE01000102020103DFE64046408A410242024403C802540223E0000 +782E:10001000FEFC2244642818102428C2C60000FFFE08001FF82808C8080FF80808 +782F:00200020FD2010A0103221B23CB464A864A8A4A8252425243E22242020A00040 +7830:000001FCFC201020112420A43CA8642067FEA420242024203C20242020200020 +7831:00200020FC501050108821243E12641065FCA404240824883C50242020100010 +7832:00800080FDFC1104120425F43D1465146514A5F4250425283D12250220FE0000 +7833:00000000FEFE1020102020403E7C62C462C4A3442244224422443E7C22440000 +7834:00100010FC1011FE111221143D1065FC6544A544252825283D10262822440482 +7835:00200020FC20102011FE20203C70647064A8A4A8252426FA3C20242020200020 +7836:00200020FC4011FC110421043D04650465FCA504250425043D04250421FC0104 +7837:00200020FC2011FC112421243D2465FC6524A524252425FC3D24242020200020 +7838:000003FEFA102210221042FE7A924A92CA924A924A9A4A947A104A1003FE0000 +7839:01100110FBFC2110211040007A08CA084910491048A0484078A0411002080C06 +783A:000001FEFD001100110021FE3D206520653CA524252425243D24224402540488 +783B:04400420FFFC0910116021844F0480FC0000FFFE08001FF82808C8080FF80808 +783C:00200020FC501050108821043E02640065FCA420242024203C20242023FE0000 +783D:000001FCFD241124112421FC3D2465246524A5FC252425243D2425242104020C +783E:0008001CFDE01100112021203D2065FE6420A42024A824A43D22262220A00040 +783F:00200010F81021FE2100411079104910C9104920492849247A444AFE04420800 +7840:00200020FD241124112421243DFC64206420A524252425243D24252421FC0004 +7841:000001FCFC081010103020483C8467026400A5FC242024203C20242023FE0000 +7842:00200020FC501088110422023DFC64206420A42025FC24203C20242023FE0000 +7843:00200120FD2011FC112022203C2067FE6470A4A824A825243D24262220200020 +7844:00200020FD2410A410A820203DFE64906490A490249024923D122512220E0400 +7845:00200020F9FC2020202040207BFE4800C820482049FC48207820482003FE0000 +7846:00200020FC501050108821043EFA64006400A4F8248824883C88248820F80088 +7847:00200020FC4011FC110421043D9465546524A524255425943D04250421FC0104 +7848:00200020FC2013FE102020203DFC64006400A5FC250425043D04250421FC0104 +7849:00200020FDFC102413FE202421FC7C206420A5FC2420242027FE3C2024200020 +784A:00400040FCFC1104120821FE3D00657C6544A544255425483D422542213E0200 +784B:00200010FC1013FE102020423C8465F86410A42224C427083C10242820C40302 +784C:00400040FC781088115020203C5064886506A4F8248824883C88248820F80088 +784D:000001F8FD08110811F821083D0865F86544A548253025203D10254821860100 +784E:000207E2FA42224A224A424A7A4A4FEACA4A4A4A4A4A4A4A7A424C42044A0844 +784F:000001DCFC881088108820883C8867DE6488A488248824883C88250821080208 +7850:000001FEFD021102117A21023D02657A654AA54A254A257A3D022502210A0104 +7851:01040084FC88100013FE20883C8864886488A7FE248824883D08250822080408 +7852:000003FEFC50105011FC21543D5465546554A554258C25043D04250421FC0104 +7853:00400040FC4411F41048205023FE7C406480A584269824E024823C82247E0000 +7854:00880088FC88108813FE20883C8864886488A7FE240024883C84250422020402 +7855:000003FEFC20104011FC21043D0465246524A524252425443C50248821040204 +7856:00200020FC2011FC102021243CA464A86420A7FE245024503C88248821040202 +7857:00800080F8BC23C02050402478D44B0CC8004BFE4890489079124912020E0400 +7858:00000000FDFC1104110421743D5465546554A554257425043D0425FC21040000 +7859:00200124FD24112411FC20003DFC64046404A5FC250025003D02250220FE0000 +785A:0008003CFDE01020102023FE3C5064886504A68A248824883C88250821080208 +785B:00400020F82027FE2090409078904A94CA924A924C9248907910491002500420 +785C:000001FEFC001092112422483D2464926400A5FE242024203C20242023FE0000 +785D:00200124FCA410A8102021FC3D04650465FCA504250425FC3D04250421140108 +785E:00200120FD2011FC112022203C2067FE6400A40025FC25043D04250421FC0104 +785F:0004000EFBB8208820884128792E4BA8C8A84AA84AA8493E79004A80047E0800 +7860:00400020FDFC1104110421FC3D04650465FCA520252225143D08254421820100 +7861:00400020FBFE2202244440407BFE4840C8904890491049207A244A4204FE0842 +7862:00200020FC501088110422FA3C20642067FEA420252825243E22242220A00040 +7863:00200022FDFA1024102423FE3C10642065FCA488251026FE3C10241020500020 +7864:00200020FC2013FE102020203D2465246524A6AA242024503C50248821040202 +7865:00900088FC8013FE10A020A83CB064A464A8A4B02524252A3D32222202DE0400 +7866:000003FEFC20102011FC20203C2067FE6488A48827FE24883C88250821080208 +7867:000001F8FC0810D0102021FC3D24652465FCA524252425FC3D2425242124010C +7868:00200020FDFE102011FC21243D2465FC6524A52425FC24203DFE242020200020 +7869:080C08F07E8008800EFE7888088829081208FFFE08001FF82808C8080FF80808 +786A:001000D8FB942094209043FE78904894C89448D84B98489078AA48CA02860102 +786B:00400020FBFC2040209041087BFC4804C9504950495049507A504A520452080E +786C:000001FEFC20102011FC21243D2465FC6524A52425FC25203CA0244020B0030E +786D:00480048FDFE1048104820203C1065FE6480A480248024803C80248020FC0000 +786E:00400040FC7C1084110822FE3C92649264FEA492249224FE3C922512210A0204 +786F:000001F8FD08110811F821083D0865F86508A50825F824903C9021120212040E +7870:1020082040A824A4092A723010C017000000FFFE08001FF82808C8080FF80808 +7871:000001FCFD241124112421FC3D2465646574A5AC252425243D24250421FC0104 +7872:00000050FC481084112420203C5064886506A6F8248824883C88248820F80088 +7873:00200020F9FC2020202040207BFE4848C848494C494A4A4A7888488801280210 +7874:00880088FDFE1088108820503C5064946594A698249024B23CD22492208E0080 +7875:00200020FC3E1020102021FE3D02654A652AA5122512252A3D4A250221FE0102 +7876:00200124FD24112411FC20203C5064886544A622242025F83C08241020100020 +7877:00400040F8A020A0211042087DF64800C88848484A4849507910482007FE0000 +7878:00200124FD24112411FC20003DFE6500657CA510251025FE3D10221002100410 +7879:02080228F22822282FA442447254D69257105AA05A205228724452FC02440200 +787A:000001FEFC20104010A221123C3465586498A554243424523C90251020500020 +787B:00007EFC48447E4442287E1048287EC60000FFFE08001FF82808C8080FF80808 +787C:000003DEFA522252225243DE7A524A52CA524BDE4A524A527A524A52055208A6 +787D:00400080FBFC2110224844467BF84A48CA484BF84A484A487BF848420042003E +787E:0008003CFDE0102013FE20A83CA864A867FEA4A824A827FE3C20242021FC0000 +787F:00400020F82023FE2202449479084A04C80049FC482048207820482007FE0000 +7880:00400040FCF81108101021FC3C24642467FEA424242425FC3C24242020A00040 +7881:08207FFC08200FE008200FE00820FFFE10103FF8C4060FE0182068200FE00820 +7882:00400020FBFE2202200041FC78004800CBFE4820492849247A224C2200A00040 +7883:00200020FBFE202021FC40207BFE4800C9FC490449FC490479FC490401140108 +7884:01100110F910211027BC411079104B38CBB84D544D5449927910491001100110 +7885:000003FEFA02221A22E242227A224BFECA224A724AAA4B267A224A2203FE0202 +7886:202013FC82244BF812882450E470298C2000FFFE08001FF82808C8080FF80808 +7887:00400020FBFE2202240440007BFE4820C8204920493C49207AA04A60043E0800 +7888:001C03E0FA2023FE222042927B0A4A06C9FC4904490449FC7904490401FC0104 +7889:000001FCFD241124117421243DFC65046574A554255425743D04220402140408 +788A:00480044FC5E11E0102820123C6A65966448A45E25E024243C282412206A0186 +788B:00200124FD24112411FC20003DFE640865E8A528252825E83D28240820280010 +788C:000001F8F808200821F8400878084BFEC8204A22497448A879244A2200A00040 +788D:000001F8FD0811F8110821F83C0065FC6410A7FE241025103C90241020500020 +788E:00400020FDFE1000108820883D5466226400A42027FE24203C20242020200020 +788F:00480048FC4811FE104820483DFE640064FCA484248424FC3C84248420FC0084 +7890:00200020F9FC2020202043FE78884944CA4248F849884A507820485001880606 +7891:00400080FDFC1124112421FC3D24654465FCA490251027FE3C10241020100010 +7892:00200020FC501088110422023CF864206420A5FC242025243CA424A823FE0000 +7893:00500048FC8010FE119022903CFC64906490A4FC249024903C9024FE20800080 +7894:0008000CFCEA100A100821FE3C4864486548A568254825483D4A256A23860102 +7895:00200020FDFC10501088210423FE7C0865E8A528252825E825283C0824280010 +7896:00200020FC501088110422FA3C0065FC6554A55425FC25543D5425542104010C +7897:00400020FBFE22022504410079DE4A52CA524B524C9A4894791049120212040E +7898:00500050FC5011FC115421543D5465FC6554A554255427FE3C00248821040202 +7899:000003FEFA02228A225243FE7A224A22CAAA4AAA4AAA4AFA7A024A02020A0204 +789A:00400020FDFC1000110820903C0067FE6400A40025FC25043D04250421FC0104 +789B:00200020FBFE202021FC40207BFE4800C9FC4904492449247924485000880304 +789C:00800090F90823FC204047FE79104A48CC864B10482048C47B08483000C00700 +789D:000003FEFC20104011FC21543D5465546554A52C242027FE3C50248821040202 +789E:00001FF010101FF000007C7C44447C7C0000FFFE08001FF82808C8080FF80808 +789F:00900290FA9027FE229042907AF0CA004BFC48404FFE48E0795042480C460040 +78A0:00400020FBFE200021FC410479FC4800CBFE4A0249FC48207820482000A00040 +78A1:002001FEFC2010FC102021FE3C0064FC64A4A49425FE24A43D1425FE20040018 +78A2:000000FCFC84108410F420943C9465FE6502A57A254A254A3D7A2502210A0104 +78A3:000001FCFD0411FC110421FC3C8065FE6622A522255225023DFA240220140008 +78A4:00880088FBFE208820A8402079FC4924C92449244BFE48207850488801040202 +78A5:00800040FBFC2204220443FC7A00CA004BFC4B544B544DFC7D5445540944010C +78A6:00400020FBFE2202208040F879084A90C86049984E0649F87908490801F80108 +78A7:0020FE4010FC7C8410FC1E84F0FC00007FFC040008003FF0C81008100FF00810 +78A8:000001FCFD24112411FC21243D2465FC6400A7FE252025223D14254821840102 +78A9:000003FEFC20104011FC21043D0465FC6504A5FC250425043DFC240020880104 +78AA:00880088FBFE208820F8408878F84888C8884BFE490049487984490001FE0000 +78AB:00800338FA28222823A842467A004A7CCBA44A244A284BA87E104A2802440282 +78AC:000003DEFA422242224243DE7A004A3ECBD24A124A144BD47A084A1402240242 +78AD:000001F8F90821F8210841F878004BFEC90049FC4A544C9479244A4400A80110 +78AE:000001FCFD04110411FC21043D0465FC6400A7FE242025203D3C252022A0047E +78AF:00920124FA4821242092404078804BFECA024A8A4A524A227A524A8A03FE0202 +78B0:01080090F80023FC2090409078924C92CA944A98489048907890489007FE0000 +78B1:00140012F01027FE2410441075D0D412541255D45554554875DA542A08461082 +78B2:00400020F9FC2000208840507BFE4A22CC2449FC492449247934492800200020 +78B3:00200124F924212421FC408078804BFEC890491049524A547AA84C2808440082 +78B4:00200020FBFE207020A841247A2249FCC90449FC490449FC7904480003FE0000 +78B5:00200020FC3E1020102021FC3D0465FC6504A5FC250425FC3C00248821040202 +78B6:0080009EFBEA208A21CA408A7BEA4892C8A648204BFE48207850488801040602 +78B7:0008001CFDF01110111021FE3D10657C6544A57C2544257C3D442244027C0444 +78B8:000007FCF404243425C4444475F4D554555455F45444545475F4549408061002 +78B9:00400020FBFE2202240441FC780049FCC90449FC490449FC7904480003FE0000 +78BA:00400040FBFE22A2209041FE79104B10CDFE4910491049FE7910491001FE0100 +78BB:00200010FDFE100010FC20843CFC640065FEA502257A254A3D7A2502210A0104 +78BC:000001FEF92021FC212041FC79204920C9FE48024AAA4AAA7AAA4A0200140008 +78BD:000001FCFC20102013FE20003DFC650465FCA50425FC25043DFC248821040202 +78BE:000001FEFD02110211FE21243D24657E6524A52425FE25523D54264822640442 +78BF:000003FEFA02220223FE42107A92CA544AFE4A824AFE4A827AFE4482048A0884 +78C0:02440124F928207E2010435479544954C97C49144920492079404A80047E0000 +78C1:01080088F09027FE210841087210D29454A4573851085210721054A407BC0084 +78C2:004003BEFA122292225242AA7B244840CBFE4A224A224BFE7A224A2203FE0202 +78C3:0004001EFBF0221E221042FE7A92CA984AF24A8E4A804AB87AA844AA054A0A86 +78C4:00200010FDFE1110117C21143DFE6514657CA510257C25443D442244027C0444 +78C5:00400020FBFC2108209043FE7A024C44C8204BFC488048F87888490801280210 +78C6:000001FCFD0411E4112423FE22027DFC6504A5FC250425FC25043D0425140108 +78C7:00200040FDFC1104115421243D54650465FCA400251225D43D1825522192010E +78C8:00200040FBFC2224222443FC7A244A44CBFC484048A848B4793C49220222041E +78C9:03F00110F0E02318200047BC74A4D31854A4504057FC50E0715052480C460040 +78CA:7FFC040008001FF0281048108FF000007EFE102020407EFCA34422443E7C2244 +78CB:00840044FC4811FE102020FC3C2065FE6440A48024FE25103E10241021FE0000 +78CC:00200020FBFE202021FC410479FC4904C9FC490449FC49047BFE488801040202 +78CD:00400020FBFE2202242441FC782049FCC8204BFE482049FC7904490401FC0104 +78CE:001E03E0FD2210941040208821F07C2064C4A5FE2422242027FE3C5024880306 +78CF:00880050FC0013FE105021FC3C5467FE6454A5FC245024D83D54265220500050 +78D0:08783E48228E2A007EF822482A3046CC0000FFFE08001FF82808C8080FF80808 +78D1:00200124FD24112411FC20003FFE640065FCA504250425FC3C88245023FE0000 +78D2:000000FCFC84108410FC20003DFE650265FEA50225FE25023DFE244820840102 +78D3:00100220F97C21442044407C7B404940C97C49444944497C79444A80047E0000 +78D4:02080208F3BE24882AA8413E7208D448584857FC50E0515072485C4600400040 +78D5:00200020FCFC1020102021FE3C40648465FEA40225FC25543D54255423FE0000 +78D6:000001DEFC42115210CA21523C42642064FCA484248424FC3C84248420FC0084 +78D7:00280024FBFE202021FC412479FC4924C9FC492448084BFE7888484800480018 +78D8:0008003CFBC020042244412879FC4A20C8204BFE482049247924492401FC0004 +78D9:00400020FBFE208821244242789049F8C808484448A849907A884CA400C20080 +78DA:002003FEFC2011FC112421FC3D2465FC6422A7FE240827FE3D08248820280010 +78DB:08047F7808407F40497E7F4849487F4808487F4808887FFC08001FF868080FF8 +78DC:01000110FBDC22542554428879084AF4CC0248004BFC484079504A4805440080 +78DD:00880088F88823D0209E43E478944FD4C91449D44954494879484A5402D40422 +78DE:00200222FA2223FE200043DE7A524A52CBDE4A524A524BDE7A524A52055A08A4 +78DF:000007BCF88424A4229444A478504988CE2648C04B1048647B88483000C00700 +78E0:00200020F83E2020202043FE7A024B26CA8A4A524B264A527A8A4B2603FE0202 +78E1:02480248F7E8224823DE424A73CAD24A524A5FEA540A554A7632541207EA0044 +78E2:00200020FBFE202022AA41247AAA4820CAAA49244AAA48507850488801040602 +78E3:00400088F9FC2108225243FE78504988CE2648C04B1048647B88483000C00700 +78E4:000000DCFB14221423D442547BE6CA404BDC4A144BD44A547A484448055408A2 +78E5:000001FCFD2411FC112421FC3C40648865F0A420244427FE3C22252422220060 +78E6:000003FEFC5011FC115421543DFC640065FCA40027FE24203CA8252422A20040 +78E7:002003FEFC2011FC102023FE3C0065FC6504A5FC250425FC3D0425FC20880104 +78E8:00803FFE22102F7C221027382AD422102FFC2100220027F84A08520883F80208 +78E9:000C000AF80823FE220842487A6ACA4A4BFA4A4C4A4C4AEC7B5A444A04D60822 +78EA:00200222FBFE2090208841FE7B104D10C9FE4910491049FE7910491001FE0100 +78EB:01240124F22424242954414A7292D6105A105250525C5250725052B0029E0300 +78EC:08007F7808483E4800863E782A483E304048FFFE08001FF82808C8080FF80808 +78ED:03FE0200FAFC220023FE42947AA8CAC44A004AFC4A844AFC7A8444FC0484088C +78EE:00200124FD2411FC102020503C8865746602A5FC255425543DFC25542154010C +78EF:01240124FAAA23AE212442AA7BAE4924CFFE4910491449147A8A4A4A02160422 +78F0:00880050FBFE202021FC40207BFE4924C8A84BFE480049FC7904490401FC0104 +78F1:008802AAFADC24882154422278004BFECA424C444BFC48447844488401140208 +78F2:0200017EF840247C224440FC79404E7ECA2048204BFE487078A8492402220020 +78F3:01040088F80023FE222242AA7A724A22CBFE480049FC490479FC490401FC0104 +78F4:002007A4F0A822922114420875F4D80253F85208520853F8720851100FFE0000 +78F5:000003DEFA5223DE225243DE7A024AFACA8A4AFA4A8A4AFA7A8A4A02020A0204 +78F6:0080031CFA042204239C42047A04CBFC49004BFE4C024AAA7AAA440200140008 +78F7:00200124F8A823FE20A841247A224904C90449DE4A444D54789E490402040404 +78F8:00880050FBFE205021FC4154798C4974C90449FC48204BFE7850488801040202 +78F9:000003FEFC5013FE125223FE3C0065FC6504A5FC250425FC3C2023FE00200020 +78FA:00880088FDFC1088108823FE3C2065FC6524A5FC252425FC3C00248821040202 +78FB:003C03E0FD2410A813FE20A83D24660265FCA524252425FC3D24252421FC0104 +78FC:00A00090FDFE132011FC21203DFC652065FEA500242027FE3C7024A823260020 +78FD:00200020F9FC202023FE41087B9C4908C9884E3E48004BFE789048900112020E +78FE:000003DEFA52225223DE400079FC4924C9FC492449FC48207BFE482000200020 +78FF:3FFE21042E3822102FBC27182AB4325220002FFC210023F826085A0843F88208 +7900:03DE0252FBDE225223DE42027AF24A92CAF24A924AF24A927A924B3202020206 +7901:00A00090F9FE2110231045FE79104910C9FE4910491049FE79004AA402520452 +7902:002003FEFC2011FC100021FC3D0465FC6488A7FE240025FC3D04250421FC0104 +7903:012400A8FBFE220220F8408878F8480CC9F0482049FC48207BFE482000A00040 +7904:001801E0FC4013FE108821743E5264706400A5FC250425743D5425742104010C +7905:02080108F7C82010279E449477A4D01457945094511451C87708511405240242 +7906:00200020FC501088110422FA3C00640065DCA554255425DC3C88248821540222 +7907:00400080FBFE222222AA42227BFE4A72CAAA4A0248204BFE7850488801040602 +7908:00440224F928207E201040287B4A491CC928494C491A492A7948491002FE0400 +7909:01080208F7C8245027DE446477D4D214511457D4521453C872485454055408A2 +790A:0878FFC808483E862B783E482A28FF9049287F4600007FFC08001FF868080FF8 +790B:000001FCFD5411FC102021FC3C2067FE6488A45025FC24203FFE242020200020 +790C:000001FCFC2013FE122221AC3C2065AC6400A5FC252425243DFC2524212401FC +790D:008803FEFC8811FC110421FC3D0465FC6480A5FE262225523D0225FA200A0004 +790E:00880088FBDE208821DC42AA7C884800CBFE48224920493C79204AA0047E0800 +790F:00500252F954205023FE408878504BFEC82049FC48204BFE78A8492406220020 +7910:0A803138228838382288393822887FFE4002BFF404000FF0181068100FF00810 +7911:00200124FCA813FE120220F83C88648864F8A40025FC25243DFC252421FC0104 +7912:01040088FBFE202021FC40207BFE4854C99248904BFE489078D44B8A009601A2 +7913:000003FEFC0011FC112421FC3D2467FE6400A5FC252425FC3D2425FC200003FE +7914:001003C8FA7E2240226243D47A004A3ECBC84A484E7E4A487A484BC802480008 +7915:3E1022FE3E4420287EFEA2103EFC22100000FFFE08001FF82808C8080FF80808 +7916:0140024CFA642244234C42647AA44BACCAA44AA44FFE48007910490802040404 +7917:00400020FBFE220221FC41487A5049FCCB0449FC490449FC790449FC00880104 +7918:000003FEFA0223FE220243FE79084A52CB9C49084A524BDE78004AA402520452 +7919:020002BEFB02225421C8403E7A0A4BCACD2849284FEE49287AA84A58044E0080 +791A:008803FEF888202021FC40207BFE4840C88849FC480049FC7954495407FE0000 +791B:000803E8FA8823EE222843F47A824BE2C80049FC495449547954495407FE0000 +791C:0A0033B822083BB820883AB82288FFFE10103FF8C4060FF0181068100FF00810 +791D:000001FCFC2013FE122221AC3C2065AC6400A7FE242025FC3D5425542154010C +791E:008803FEF88823FE220241FC78004BFEC84048A24B5448B87B54489203500020 +791F:000007C4F51427C8250847D47514D50057D450545554554875485454005401A2 +7920:01080090FBFE2108210842527B9C4908CA524BDE484048A47AAA4A8A04780000 +7921:008803FEFC88102413FE20203DFC652465FCA52425FC25243C0825FE20880058 +7922:01080090FBFC204021F840807BFC4948C9FC4B0A4DF8490879FA4934018C0102 +7923:004801FEFC48100011FE214A3D4A65FE6414A5FE251025923D4C254A21160222 +7924:00880088FBFE2088211041DE7A524D54CA8849744A0249FC7820492402220060 +7925:07DE0512F7D2245427C8451477E2D00053FC520453FC520473FC520403FC0108 +7926:00200010FBFE224422FE42447BFE4A10CAFE4A924AFE4A927AFE4A0002440482 +7927:000001FCF92421FC212441FC79044800CBFE4AAA4AAA4BFE7AAA4AAA03FE0222 +7928:00001FF011101FF011103FF82AA83EF82AA83EF800007FFC08001FF868080FF8 +7929:0042039CFA1023DE229442947C204BFCCA044BFC4A044BFC7A044BFC01080204 +792A:000001FEFD2811FE1128217C3D54657C6554A57C251025FE3D9222BA028A0484 +792B:01240174FA5822DA23FE41547ADA4BFEC8A248204BFE487078A8492402220020 +792C:22882108FABE2008729CA92A2288FFFE08203FF8C4060FF0181068100FF00810 +792D:01FC0020FBFE222225AC402079AC4890C9FE4B204DFC492079FC492001FE0100 +792E:001007C8F53E27C0251447D27522D50057D450545554554875485454005401A2 +792F:008802AAFADC2488215442227BFE4A42C88849F048244BFE7822492402A20040 +7930:000007FEF4442598248847DE7488D5DC56AA54885420542074BC54A004A00BFE +7931:08407F7C1440FF7C22043E7C22403E7C2242263E00007FFC08001FF868080FF8 +7932:01100090FBDE2010225E41827BDE4810CBDE4A504BDE4A507BDE4A50025202CE +7933:00400020FBFE224823FE42487AEC4B5ACA484BFE4A204A7C7AC44B44047C0844 +7934:008803FEF088241222FE401074FED29252FE509251FE5292760452FE0244022C +7935:01FC0020FBFE222221AC402079AC4800C89E4BF2489E49D27ABE4C92009E0092 +7936:008803FEF88823DE225243DE78A04890C9FE49204BFC4D2079FC492001FE0100 +7937:009007FEF89023E8228843CE7A504BD4CAA24BE248004BFC7A944A9407FE0000 +7938:052807BEF94827BE231845AA79464BFCCA044BFC4A044BFC7A044BFC01080204 +7939:07BC04A4F7BC200027FE44007590D49E57D4556455D4555475D455680BC81054 +793A:00003FF80000000000000000FFFE010001001110110821044102810205000200 +793B:200010001000F800080010001000380054009400100010001000100010001000 +793C:208010801080F8800880108010803880548094801080108410841084107C1000 +793D:2000100013F8F8880890109010A038BC54849484110411041104120412281410 +793E:202010201020F8200820102013FE382054209420102010201020102017FE1000 +793F:204010401080F8FC090412041004390454849444104410041004100410281010 +7940:2000100011FCF90409041104110439FC55049500110011021102110210FE1000 +7941:200010FC1084FC8804880890108838885484928410C410A81090108010801080 +7942:202010201020F920092C113411643BA455249534112811221122110210FE1000 +7943:200013F01010F81009101110111039FC54049404100413F41004100410281010 +7944:202010201050F850088811041202388854889488108810881088110811081208 +7945:2008103C11E0F8200820102013FE382054209450105010501088108811041202 +7946:2000100011FCF8200820102010203BFE54209420105010501088108811041202 +7947:2004101E11F0F91009101110111039FE5510951011101108110A114A11861102 +7948:2008101C11E0F9000900110011FE391055109510111011101110121012101410 +7949:202010201020F92009201120113C392055209520112011201120112017FE1000 +794A:204010201020FBFE08801080108038FC54849484108410841104110412281410 +794B:200010F81088F88808881106120039FC54849484104810501020105010881306 +794C:202010201020F82009FC112411243924552495FC112410201020102010201020 +794D:2008103C11E0F8200820102010203BFE54209420102010201020102011FC1000 +794E:202010201020FBFE0820102019FE3420502093FE10221022102A102410201020 +794F:2000100013FEF82008201040184034FC51849284148410841084108410FC1084 +7950:202010201020F8200BFE10401040388054FC9184128410841084108410FC1084 +7951:202010201120F92009FC11201220382057FE9420105010501088108811041202 +7952:200013FC1084F8840884110411143A08540095FC110411041104110411FC1104 +7953:205010481048F8400BFE1080108038FC55449544112811281210122814441182 +7954:208810881088F908097E13081508394855289528110811081108110811281110 +7955:200010401020F8280808108810903A9456A292A214C210881188128814781000 +7956:200011F81108F908090811F811083908550895F8110811081108110817FE1000 +7957:4008203C23E0FA2012201220222033FE6A20AA1022102212220A228A23262212 +7958:00003E7C0000000000007EFE081008102A542952495288900810081028501020 +7959:202010201020F9FC0820102010203BFE547094A810A811241124122210201020 +795A:208010801080F8FE094011401240387C544094401040107E1040104010401040 +795B:202010201020F9FC0820102010203BFE5420942010401048108411FE10821000 +795C:202010201020F8200BFE10201020382055FC9504110411041104110411FC1104 +795D:200013FC1204FA040A04120413FC3890549094901090111211121212140E1800 +795E:202010201020F9FC09241124112439FC55249524112411FC1124102010201020 +795F:0100111011101FF0410441047FFC00003FF80000FFFE01001110210845040200 +7960:200011FC1004F8040BF41004100439E455249524112411E41004100410141008 +7961:088008882E9028E028842E84F07C00003FF80000FFFE01001110210845040200 +7962:208010801080F8FE090211041220382054A894A4112411221222102010A01040 +7963:2080108010FEF9000A00101C11E0392055229524112811101110114811841102 +7964:200013DE1042F8420A52114A114A384254C6914A1252104210421042114A1084 +7965:210410841088F8000BFE1020102039FC5420902013FE10201020102010201020 +7966:200011FC1104F90409FC1000100039FC5420902013FE10201050108811041202 +7967:209010901090FA9209941098189035985294949210901090111211121212140E +7968:00007FFC04403FF8244824483FF800003FF80000FFFE01001110210845040200 +7969:202011201120F9FC0920122010203BFE547094A810A811241124122210201020 +796A:2040104010FCF9040A0811FE1100397C554495441154114811421242123E1400 +796B:202010201050F8880904120211FC3800540095FC110411041104110411FC1104 +796C:200013FE1020F8400888110413FE38225420902013FE10201020102017FE1000 +796D:100010801EBC22445448A83010102FE8C00600007FFC01001110210845040200 +796E:202010201020FBFE0820102011FC3800540095FC110411041104110411FC1104 +796F:20201020103EF820082011FC1104392455249524112411241050104810841104 +7970:202011201120F9FC0920122010203BFE5400940011FC11041104110411FC1104 +7971:210410841088F81009FC11041104390455FC94501050109010921112120E1400 +7972:200011FC1004F8FC080411FC10003BFE560291F8108810881050102010D81306 +7973:200013FC1200FA000AF8120012003BFC56A092A412A812901290148814A418C2 +7974:201010141012F8100BFE10101150395457F4955411541148124A125A14261042 +7975:400023FE2222FA22122213FE222232626A72AAAA232222222222220223FE2202 +7976:410820882090FBFC1024102423FC32206A20ABFE206220A2212A222424202020 +7977:2020102013FEF82009FC104013FE3848548894FE110811481228140810281010 +7978:200011FC1104F904090411FC1820342053FE92221252128A130A1202120A1204 +7979:2080108010FEF9020A8210F21142384257FA94421152115211F2100210141008 +797A:2108110813FCF908090811F81108390855F89508110817FE1000109011081204 +797B:200011FC1104F924092411FC1124392455749554115411741104110411FC1104 +797C:200011FC1124F92409FC1124192435FC502093FE107010A81124122210201020 +797D:2040102013FEF8000888108811543A225400902013FE10201020102010201020 +797E:2020102011FCF820082013FE18883544524290F8118812501020105011881606 +797F:208010F81088F90809F01010181037FE50209222117410A81124122210A01040 +7980:0100FFFE00003FF8200827C8244827C820083FF800003FF80000FFFE11102308 +7981:082008207EFC1C702AA849268A2000001FF000000000FFFE0100111025084204 +7982:200011FC1124F9240974112411FC390455749554115411741104120412141408 +7983:4040204027FCF840104013F8220833F86A08ABF8220823F8220822082FFE2000 +7984:400021F82008F80811F81008200833FE6820AA22217420A82124222220A02040 +7985:210410881050F9FC0924112411FC3924552495FC1020102013FE102010201020 +7986:2040108013FCFA240A2413FC1A24364453FC9090111017FE1010101010101010 +7987:2040104413F4F848085017FE1040388055F89308150811F81108110811F81108 +7988:200013FE1222F8200BFE102011FC392455FC952411FC102013FE102010201020 +7989:208810481050FBFE0850105011FC39545554958C110411FC1104110411FC1104 +798A:4100213C27D4F9141394111427D43124694CA84027FE204020A0211022082C06 +798B:200013FE1050F85009FC11541154395455FC9420102011FC1020102013FE1000 +798C:408420442048FBFE108410842108314A6A52AB9C208421082108225223DE2042 +798D:200011FC1104F90409E4112411243BFE560292FA128A128A12FA1202120A1204 +798E:20201020103EF820082011FC110439FC550495FC110411FC1000108811041202 +798F:400023FE2000F9FC1104110421FC30006BFEAA22222223FE2222222223FE2202 +7990:203C17C01244F928080013FC1080388057FE950011F812881250142018D81306 +7991:21FC11241124F9FC0924112419FC3420502093FE1222122A12FA120A12021206 +7992:210011F81208FBF0081017FE10803944566894B01128166810A4112216A01040 +7993:200011F81108F9F8090811F810003BFE550095FC125414941124124410A81110 +7994:200011FC1104F90409FC1104190435FC500093FE10201120113C112012A0147E +7995:2040104011FCF8840BFE100011FC390455FC902013FE1020122013FE10201020 +7996:2088108813FEF888088810F81088388854F8902013FE107010A8112412221020 +7997:200011FC1124F92409FC1124112439FC54009440102412A2128A148810781000 +7998:2040102011FCF8000888105013FE3A22542495FC112411241134112810201020 +7999:2050105213DCF85008D2134E100039FC550495FC110411FC1104110411141108 +799A:210410841088F8000BFE1020182035FC5020902013FE100012A4125214521000 +799B:2020102013FEF82009FC110411FC390455FC950411FC110413FE108811041202 +799C:08202AA44D28145022887FFE400280043FF80000FFFE01001110210845040200 +799D:200011FC1124F9FC092411FC18883544524290F8118812501020105011881606 +799E:2040102013FEF80009FC110419FC340053FE920212FA128A12FA1202120A1204 +799F:2020101011FEF910097C111411FE3914557C9510117C114411441244127C1444 +79A0:4004201E23F0FA1E121012FE229232986AF2AA8E228022B822A824AA254A2A86 +79A1:200011FE1120F9FC092011FC1120392055FE900212AA12AA12AA120210141008 +79A2:200011FC1104F9FC090411FC1800340053DE90421252114A12521042114A1084 +79A3:2028102413FEF82009FC112411FC392455FC9524100813FE1088104810481018 +79A4:200013FE1252FA520BFE100013DE38425652954A10C6135A10421042114A1084 +79A5:2088108813FEF88808F8108810F8388857FE9488112412FA1020102013FE1000 +79A6:020027DE491297D2211265DAA5142FD000003FF80000FFFE0100111025080200 +79A7:404027FC2040FBF8100013F8220833F86910AFFE200023F82208220823F82208 +79A8:4124212422AAFBAE112412AA23AE31246FFEA91021142114228A224A22162422 +79A9:400023FE2222FBFE122213FE208830886BFEA888208827FE2000208821042202 +79AA:200013DE1252FA520BDE100011FC392455FC952411FC102013FE102010201020 +79AB:200013FE1050FBFE0A5213FE100039FC550495FC110411FC102013FE10201020 +79AC:202010501088F9740A0211FC112439AC552495FC100010F8108810F8108810F8 +79AD:408824482250F8FC10201050269432386A50AA98223422542290222025FE2800 +79AE:409023FC2294FBFC129413FC200033FC6800ABFC220423FC2108209027FE2000 +79AF:409023FC2294FBFC129413FC200033FC6A00AAF8220023FE2520251425482986 +79B0:400023FE2124FA2217FE1222237632AA6B76AA22237622AA23762222222A2204 +79B1:404027FC2040FBFC100017FE200233F86840AFFE200027FE200827FE24A82798 +79B2:200013FE1248FBFE0A4812FC12A43AFC56A492FC122013FE132A157A150A1906 +79B3:202013FE1000F9DC095411DC188837FE508893FE108817FE1094118816A410C2 +79B4:404020A021100208F5F610002EEE2AAA6EEEB0002FFE29222FFE2922292A2804 +79B5:400023BE2288FB9012BE13A2203E37E2693EA92225BE2514252225002BFE3000 +79B6:452827BE2948FFBE131815AA294633FC6A04ABFC220423FC220423FC21082204 +79B7:4100255E2384F90817DE11122392355E6912A81E21522FF2211E2280244C2812 +79B8:0100010001007FFC420442044404444448245FF4481440044004400440144008 +79B9:001000F83F0001001FF0111011101FF001007FFC410441245FF448144004400C +79BA:00003FF8210821083FF8210821083FF801007FFC410441245FE4482440144008 +79BB:02000100FFFE00001450139014501FF001007FFC420444444FE4442440144008 +79BC:010001FC01001FF01450139014501FF001007FFC420444444FE4442440144008 +79BD:010002800C603118CFE60440139014501FF001007FFC420444444FE44424400C +79BE:001000F83F000100010001007FFC038005400540092011102108C10601000100 +79BF:00701F80010001007FFC054009203118C006044004400440044008421042603E +79C0:00701F80010001007FFC054009203118CFE60420044004780808080810506020 +79C1:04200E20782008200820FF40084018401C402A482A84488489FE088208020800 +79C2:00F83F0001000100FFFE0540092011102008C10401000280044008203018C006 +79C3:00701F80010001007FFC054009203118C0060FC00840084008441044203C4000 +79C4:04000EFC780408080810FF20082019FE1C202A202A2048208820082008A00840 +79C5:08081C3CF3C010401040FC401040307E3BC054405040904210421042103E1000 +79C6:08001DFCF02010201020FC20102033FE38205420542090201020102010201020 +79C7:08401C40F040104011F8FC4810483048394854C8544890A810AA110A12061402 +79C8:08201C20F02010201124FD24112431243924552455249124112411FC10041000 +79C9:00F83F0001007FFC01003FF80108FFFE01083FF80380054009203118C1060100 +79CA:00701F80010001007FFC054009203118C0E61F00010001007FFC010001000100 +79CB:08401C40F04010401144FD4411483250384054A054A090901110110812041402 +79CC:103811C010401440584053FC504090E010E0115011502A482444484240408040 +79CD:08201C20F020102011FCFD2411243124392455FC552490201020102010201020 +79CE:08101C90F09010881108FD04120435FA38885488548890881108110812281410 +79CF:08081C3CF1E010201020FC3C11E038203420503E53E09020102210221022101E +79D0:08001C00F1FC10001000FC0013FE30203820544054409088110413FE11021000 +79D1:08101D10F09010901010FD10109038903410501E53F090101010101010101010 +79D2:08201C20F02010A810A4FCA2112231203A245424542890081010102010C01300 +79D3:08201C20F02013FE1020FC20102031FC38845488544890501020105011881606 +79D4:08801C40F04013FC1000FC0011F03110391055105510911211121212120E1400 +79D5:08101D10F11011121112FD1411D83110391055105510911211521192110E1000 +79D6:08041C1EF1F011101110FD10111031FE3910551055109108110A114A11861102 +79D7:08081C3CF1E010201020FC2013FE302038205450545090501088108811041202 +79D8:08001C40F02010281008FC8810903A9436A252A254C290881188128814781000 +79D9:08201C20F020102013FEFC201020302039FC5504550491041104110411FC1104 +79DA:08201C20F12410A410A8FC2011FC38203420502053FE90201020102010201020 +79DB:08101C10F01011FE1112FD14111031FC39445544552891281110122812441482 +79DC:08001DFCF10411041104FDFC11003140394455485570914011421242123E1400 +79DD:08381DE0F02010201020FDFC10203070387054A854A891241124122210201020 +79DE:08201C20F020102011FCFD2411243124392455FC552491241124112411FC1104 +79DF:08001DF8F10811081108FDF811083108390855F8550891081108110817FE1000 +79E0:08001DFEF01010101020FC20106838A435225222502090201020100013FE1000 +79E1:08501C48F048104013FEFC80108030FC39445544552891281210122814441182 +79E2:08201C20F05010501088FD241212301039FC5404540890881050102010101010 +79E3:08201C20F02013FE1020FC20102031FC387054A854A891241124122210201020 +79E4:08001DFCF02010201124FCA410A830203BFE5420542090201020102010201020 +79E5:08201C20F0201020103EFC201020302039FC5504550491041104110411FC1104 +79E6:01007FFC01003FF80200FFFE082010D02F08C1061FF005400920111061080100 +79E7:08201C20F02011FC1124FD2411243124392457FE542090501050108811041202 +79E8:08801C80F08010FE1140FD401240307C384054405440907C1040104010401040 +79E9:08201C20F120112011FCFD201220302039FE5420545090501088108811041202 +79EA:08041C1EF1F011101110FD10111031FE3910551055109108110A114A11A61112 +79EB:08401C50F048104017FCFC4010E038E035505150524894441842104010401040 +79EC:08001DFEF10011001100FDFC110431043904550455FC91001100110011FE1000 +79ED:08201C20F02E11F01120FD20112039FE3422546250A2912A1624102010201020 +79EE:08201C20F04010401088FD0413FE3002380055FC550491041104110411FC1104 +79EF:04000E0078FC08840884FF84088418841CFC2A842A0048488844088408820902 +79F0:08801C80F08010FE1102FD041220302038A854A4512491221222102010A01040 +79F1:08001DFEF1021102117AFD021102317A394A554A554A917A11021102110A1104 +79F2:08201C20F02011FC1020FC2013FE3008380855FE540890881048100810281010 +79F3:08081C3CF1E010201020FDFE10203020382055FC550491041104110411FC1104 +79F4:08201C20F05010881104FE0211FC3000380055FC550491041104110411FC1104 +79F5:08001DFCF10411241124FD2411FC312439245554554C918C1104110411FC1104 +79F6:0100410021FC0A441448E0A02110260800E01F0001007FFC05401930E10E0100 +79F7:08001DFEF02010401088FD0411FE30223820542055FE90201020102013FE1000 +79F8:08201C20F02013FE1020FC2011FC3000380055FC550491041104110411FC1104 +79F9:00801888709C11701110FB101510311039FE55105110911011101110117C1100 +79FA:08401C20F3FE12021000FC3813C038403440507C53C0904010421042103E1000 +79FB:08201C20F07C10841148FC30102030483990543E544291A41018101010601180 +79FC:08201D20F12011FC1120FE20102033FE387054A850A891241124122210201020 +79FD:08201D24F124112411FCFC40104038FC35045284504890501020104010801300 +79FE:08201C20F02013FE1242FC4410A038A235A4529854909088108410A210C01080 +79FF:08281C24F3FE10201020FDFC1124312439FC5524552491FC112411241124110C +7A00:09841C68F03010C81304FC4013FE38A0352053FC552491241134112810201020 +7A01:01007FFC00001FF010101FF000007FFE400280741F800100FFFE05401930E10E +7A02:08401C20F1FC11041104FDFC1104310439FC5520552291141108114411821100 +7A03:08041C1EF1E010021122FC94100039FC3408501053FE90101010101010501020 +7A04:08401C40F088110413FEFC02108831443A4254F8518892501020105011881606 +7A05:08101C90F08811081204FDFA11083108390855F854909090109011121212140E +7A06:08001CFCF08410841084FC8410FC3800340055FE510291021102110211FE1102 +7A07:08001DFCF12411241124FDFC11243164397455AC552491241124110411FC1104 +7A08:08001DFCF10411FC1104FDFC1000380035FC5420502093FE1020102010201020 +7A09:08001DFEF020102011FCFD24112431FC3924552455FC912010A0104010B0130E +7A0A:09081C88F09011FC1024FC2411FC3120392055FE546290A2112A122414201020 +7A0B:00000DFCF10411041104FDFC1000380035FC5420502091FC10201020102017FE +7A0C:08201C20F05010881104FEFA102030203BFE5420552891241222142210A01040 +7A0D:08201D24F0A410A81020FDFC1104310439FC5504550491FC1104110411141108 +7A0E:09041C84F088101011FCFD041104310439FC54505450909010921112120E1400 +7A0F:08001DFEF04810481048FDCE11023102390255CE504890481048104813FE1000 +7A10:08201C20F05010881104FEFA100031FC3954555455FC9154115411541104110C +7A11:08201C20F1FC10201020FDFE108831043A22542051FC90201020102013FE1000 +7A12:08001DFCF10411241124FDFC1124312439745554555491741104110411FC1104 +7A13:08881C88F08813FE1088FC8817FE300039FC5504550491FC1104110411FC1104 +7A14:08201C20F05010881144FE2211F838083450542050A49282128A128A14781000 +7A15:08401C20F3FE100011FCFD0411FC380035FC5408501093FE1020102010A01040 +7A16:08801C40F1FC10001108FC88109033FE3800540055FC91041104110411FC1104 +7A17:08401C80F1FC11241124FDFC1124394435FC5490511093FE1010101010101010 +7A18:08881C88F3FE10881088FCF81088388834F85488508893FE1000108811041202 +7A19:08201C20F3FE10201020FDFC110431FC390455FC550491FC1104110417FE1000 +7A1A:08A01C90F09011FE1110FF1015FE3110391055FE55109110111011FE11001100 +7A1B:10003BFEE202221A22E2FA22222233FE6A226272A2AA23262222222223FE2202 +7A1C:10203820E1FC20202020FBFE208831446A4260F8A18822502020205021882606 +7A1D:10003BDEE25222522252FBDE225232526A5263DEA252225222522252255228A6 +7A1E:08001DFCF124112411FCFD24112431FC382057FE547090A81124122210201020 +7A1F:0100FFFE00003FF8200827C8244827C820083FF800001FF00100FFFE0920711C +7A20:08001DFCF12411241174FD2411FC310439745554555491741104120412141408 +7A21:08401C20F3FE10001088FC88115432223800542053FE90201020102010201020 +7A22:10143812E01027FE2010F81023D232526A526254A3D4200820EA271A22262042 +7A23:2008203C7DE0442088207C2055FE54207C70546854A87CA401221C20E0204020 +7A24:08401C20F3FE10001000FDFC1104310439FC5420552891241222142210A01040 +7A25:00701F8001007FFC054009203118C006149022481FF010101FF010101FF01010 +7A26:08401C40F1FC108413FEFC0011FC390435FC502053FE9020122013FE10201020 +7A27:08801C9EF3EA108A11CAFC8A13EA389234A6502053FE90201050108811041602 +7A28:08401C20F1FE11021102FDFE1100390035FE55AA51AA92FE12AA12AA14A21086 +7A29:08001DFEF12211FE1122FDFE100030FC388454FC548490FC1084108410941088 +7A2A:09001D00F1FE120015FCFD0411FC310439FC548054FC91081290106011981606 +7A2B:08001DFEF00010FC1084FC8410FC300039FE5522552291FE1122112211FE1102 +7A2C:08001DFCF020104011FCFD54115439543544552C502093FE1050108811041202 +7A2D:09101D12F1D411181152FD92112E304039FC5504550491FC1104110411FC1104 +7A2E:08081C3CF1E0102013FEFC2011FC312439FC552455FC902011FC102013FE1000 +7A2F:08001C88F25212221252FE8A12023BFE34885144527A90881150102010D81706 +7A30:08001DFEF0121090109CFC90117E320038FC548450FC908410FC108410941088 +7A31:081E1DE0F04411241088FC2011FC3924352455FC5124912413FE110411141108 +7A32:08041C1EF1E010221112FC941080313E39225522553E912211221122113E1122 +7A33:08401CF8F108121011FCFC04100439FC3404540451FC9040102412A2128A1478 +7A34:08881C50F00011FE1050FDFC105433FE385455FC545090D81154125210501050 +7A35:08841C44F04813FE1084FC841108314A3A52579C508491081108125213DE1042 +7A36:08141C12F01013FE1014FC18139032B43A98569053B2900C10CA171A10661002 +7A37:08001DFCF12411FC1124FDFC108831443A4254F8518892501020105011881606 +7A38:08401C20F3FE10401088FDF01020304439FE540255FC912411FC112411FC1104 +7A39:08201C20F3FE102011FCFD0411FC390435FC550451FC910417FE108811041202 +7A3A:10003BFCE204220423FCFA40222033FC6A886250A3FE222025FC242028202020 +7A3B:081E1DE0F02211121094FC80102031CE3902550255CE91021102110211FE1102 +7A3C:08401C20F3FE12021000FDFC104030A23B345458509493341052109013501020 +7A3D:08501C48F3FC10A01122FE1E111031E0390454FC540091FC110411FC110411FC +7A3E:01007FFC08200FE000007FFC48244FE440045FEC01007FFC05401930E10E0100 +7A3F:08401C20F3FE100011F8FD0811F8380037FC520452F49294129412F412141208 +7A40:1000FE7810487C480048FE8682007CFC00447C441028FE283810542892441182 +7A41:08881C88F1FE10881000FDFE1088308838F8548854F89088109E11E810081008 +7A42:08201C20F3FE102011FCFD2411FC392435FC5440502492A2128A148810781000 +7A43:08401C20F3FE12021050FC88112430503888550452FA90881088108810F81088 +7A44:11003910E3DC22542554FA88210832F46C026000A3FC20402150224825442080 +7A45:08201C10F1FE1110117CFD1411FE3914357C5510519291541138125412921430 +7A46:08201C40F1FC110411FCFD0411FC38203524563250C093181060118C103013C0 +7A47:10403888E1FC21082252FBFE205031886E2660C0A31020642388203020C02700 +7A48:010000803FFE22102F7C26382B543292203827C020402FFE215042484C468040 +7A49:08001DFEF10211FE1110FD541138395435825550517C9190111012FE12101410 +7A4A:1000E7BE2488248827A8FCA824A837BE6C106518A49825A826AA244A20462080 +7A4B:10003BDEE0422252214AFA52202830C46B126060A188203221C4201820602380 +7A4C:2008203C79E0482090207C2055FE54207C70546854A87CA40122AA20AA200020 +7A4D:08201DFEF02011FC1020FDFE100031FC390455FC550491FC110411FC10881104 +7A4E:40004CFE7010442044FC3C8400840CFC708410FCFE84108438FC544890841102 +7A4F:08081C3CF1C010441124FCA811FC300438FC540455FC904010A412AA128A1478 +7A50:1100E1F0222027F82A48FBF8224833F8684067FCA44427FC244427FE2042203E +7A51:08201C20F3FE10201124FCA813FE300039FC5504557491541174110411FC1104 +7A52:00701F800100FFFE05401930E20E1FF010101FF010101FFC10001FFC0004492C +7A53:10003BFEE22223FE2222FBFE208830886BFE6088A08827FE2000208821042202 +7A54:0088188871FC10881088FBFE102031FC392455FC512491FC1000108811041202 +7A55:08A01C90F1FE132011FCFD2011FC392035FE5500502093FE107010A813261020 +7A56:0124192472AA13AE1124FAAA13AE31243BFE551051149114128A124A12161422 +7A57:08201C20F3FE102011FCFD2411FC392435FC502253FE9042102412A2128A1478 +7A58:08201C20F1FC102013FEFD08139C31083988563E500093FE109010901112120E +7A59:08501E52F154105013FEFC88105033FE382055FC502093FE1050108811041602 +7A5A:08181DE0F04013FE1088FD7412523070380055FC55049174115411741104110C +7A5B:08901C88F1FE11101310FDFE1110391035FE5510511091FE110012A412521452 +7A5C:08201DFCF088105013FEFC0011FC312439FC552455FC902011FC102013FE1000 +7A5D:100039F8E10821F82108F9F8200037FE6A4063DCA25423D4226827C820542062 +7A5E:08801CF8F11013FC1524FDFC112431FC380057FE540091FC110411FC110411FC +7A5F:1088E448225020FC2020F850269432386A506298A23422542290222025FE2800 +7A60:08501DFCF15411FC1154FDFC100031FE3900557C550091FE1150115411481266 +7A61:0020182073FE11241124FAAA17FE300039FC5504517491541174110411FC1104 +7A62:08201D3CF12017FE1010FC1413FE32103BF05654525492D41368144A18961322 +7A63:10803840E7FE21102208FD1423F831106BF86110A7FC212823102D4821862100 +7A64:08001DFCF02013FE1222FDAC102031AC380057FE502091FC115411541154110C +7A65:11403A4CE2642244234CFA6422A433AC6AA462A4A7FE20002110210822042404 +7A66:08401C20F3FE120211FCFD48125039FC370455FC510491FC110411FC10881104 +7A67:10803840E7FC211020A4FF58255435526B586000A20823F8220823F822082408 +7A68:0C2071FC1124FDFC10203BFE540091FC010439FC290429FC29044DFC48888104 +7A69:103EE7C02244212823F8F84027FC30006BF86008A3F8200823F82544252A28FA +7A6A:10003BFEE124222227FEFA22237632AA6B766222A37622AA23762222222A2204 +7A6B:00881BFE70A8109011FEFB2011FC312039FC552051FE910013FC10881070138E +7A6C:10403820E7FE248825FCFC8827FE34206DFC6524A5FC252425FC240024882904 +7A6D:08801DF8F20815FC1124FDFC112431FC3954562A55FC910411FC110411FC1104 +7A6E:08401C20F3FE125013FEFE5213FE32003A9456D8529092D2128E140015541A2A +7A6F:00201BFE702013AE12AAFBAE102033FE380057FE520292FA128A12FA120213FE +7A70:1040E7FC200023B822A8FBB8211037FC691067FCA1102FFE212823102D482186 +7A71:001E1BE07122109413FEFA5213FE30043BC4567E53C4925413CC128412D41348 +7A72:13DE3800E3DE2252235AFA52202033FE6A5063FEA25223FE229222DC229224CE +7A73:1528E7BE294827BE2318FDAA294633FC6A0463FCA20423FC220423FC21082204 +7A74:0200010001007FFE400280440440044004200820082010101010200840048002 +7A75:020001007FFE40028824101020081FE000C0030004000800100810080FF80000 +7A76:020001007FFE400288241210220802003FE002200420042008221022201E4000 +7A77:020001007FFE400288241010220802007FF00210041004100810101020A04040 +7A78:020001007FFE400288241010220804000FF0101068200440028003001C00E000 +7A79:020001007FFE482290142FF8001000101FF0100020003FF80008000800500020 +7A7A:020001007FFE400288241010200800001FF0010001000100010001007FFC0000 +7A7B:020001007FFE4002882410102FE80100010001007FFC01000100010005000200 +7A7C:020001007FFE400288241010210801007FFC0540092011102108C10601000100 +7A7D:020001007FFE48229014282808203FF8082008200820FFFE0820102010202020 +7A7E:020001007FFE48229014200800F03F0001000100FFFE0280044008203018C006 +7A7F:020001007FFE4822901400003FFC0040104020403FFE01400640184061400080 +7A80:020001007FFE482291142108FFFE01002108210821083FF8010A0102010200FE +7A81:020001007FFE4002882411102148012001007FFC01000280044008203018C006 +7A82:020001007FFE48229014210811001FF8210041000100FFFE0100010001000100 +7A83:020001007FFE48229014200021FC2C44F0442044204424842884310422280410 +7A84:020001007FFE4822901428080FF81400240047F00400040007F8040004000400 +7A85:020001007FFE4822901420081FF0101010101FF010101FF0101010101FF01010 +7A86:020001007FFE4822901401F03E00020001007FF8006001800E003000480087FE +7A87:020001007FFE4822901408001FF020105F90109010901F901050102410040FFC +7A88:020001007FFE482290140840084012F822487C480848144822887E8821280210 +7A89:020001007FFE4822901420081FF0010001003FF8210822882448280820282010 +7A8A:020001007FFE4822901420781FA012201220122012101290224822A843248202 +7A8B:020001007FFE4822901421081110111011101FF001002108210821083FF80008 +7A8C:020001007FFE4822901420080C0070FC4084448444845C846494488808801080 +7A8D:020001007FFE48229014200800007DFE1040108011FC10041E04E00440280010 +7A8E:020001007FFE4822911422081FF010101210115010201FFC000400047FD40008 +7A8F:020001007FFE48229014100009FC4820202020200BFE10207020102010A01040 +7A90:020001007FFE4822901401003FF801000100FFFE000001003FF801000100FFFE +7A91:020001007FFE48229014200808001FF821000100FFFE0100210821083FF80008 +7A92:020001007FFE4822901400007FFC040008201FF0011001003FF801000100FFFE +7A93:020001007FFE482292142408082010103FF80008010008844892481287F00000 +7A94:020001007FFE4822921401007FFC08201010244844440280010006C01830E00E +7A95:020001007FFE4822901404404448245024600C403460C852084A1042203E4000 +7A96:020001007FFE4822911409000FF011000100FFFE00001FF0101010101FF01010 +7A97:020001007FFE4822921404003FF8220823C824482A882108228824083FF82008 +7A98:020001007FFE482290143FF80408FFFE04083FF808001FF8280848088FF80808 +7A99:020001007FFE4822911C0FD00120FFFE01001FF0082030C0CFFC008002800100 +7A9A:020001007FFE4822909400883FFC208020883E88225022502A244454418C8604 +7A9B:020001007FFE4822901420083E2001FE00247E4414E81410146A2586240243FE +7A9C:020001007FFE4822911401003FF821083FF801007FFC41047FFC410401000100 +7A9D:020001007FFE482290142FE8082008200FE001003FF821082288244820082018 +7A9E:020001007FFE4822941427E8082010402678180810081E78100810081FF81008 +7A9F:020001007FFE482290143FF820083FF820802490249027F02080488848888FF8 +7AA0:020001007FFE482290143FF811101FF011101FF00100FFFE054009203118C106 +7AA1:01007FFE482290143EF8020814D00820145062883EF80288145008203458C286 +7AA2:020001007FFE4822901400500048FFFE00403E4022243E2800120E2A70C60302 +7AA3:020001007FFE4822921401007FFC0820145022880100FFFE0100010001000100 +7AA4:020001007FFE482290143FF810081FF810081FF82080208C3EF020822682387E +7AA5:020001007FFE48229014000011FC7D0411241124FD241154285024904112860E +7AA6:020001007FFE482291142FE801007FFC048412880900FFFE0260041018086004 +7AA7:020001007FFE4822911401FC01003FF820083FF820083FF80100FFFE01000100 +7AA8:020001007FFE4A2291143FF808200440FFFE00001FF010101FF010101FF01010 +7AA9:020001007FFE482290143FF810101F9010907FFC40044FE448244FE44004400C +7AAA:020001007FFE48229014004023F81040804047FC10002040E3F82040204027FC +7AAB:01007FFE4822901408007F7C08243E2408447F5408880200FFFE04401830E00E +7AAC:020001007FFE492292940C6037D8C0063E0822483E4822483E48220822282610 +7AAD:020001007FFE4822911409207FFC05401930610C0400FFFE08201E4003C03C38 +7AAE:01007FFE4822901408003F7C21043F04217C3F4021407F7C05041904E5280210 +7AAF:020001007FFE48229014244802803FF801001FF001007FFC0000248822444244 +7AB0:01007FFE4822901401F87E002208111020003FF841000100FFFE010021083FF8 +7AB1:020001007FFE4822909411F822886870ABAE282029FC282028A8292422A42040 +7AB2:020001007FFE48229014080049482A280808FF48182E2CF84A08880808080808 +7AB3:020001007FFE48229014061C38E828A82CA82AA82AA82AA828A455545D748212 +7AB4:01007FFE4822901401007FFC01001FF010101FF010101FF01010FFFE10102008 +7AB5:01007FFE482294141FF010101FF010101FF010001FFC10001FFC492484940008 +7AB6:01007FFE482291143FF82108FFFE21083FF811101FF00400FFFE082007C07838 +7AB7:01007FFE482290140040FD9E4952495279524952795249DA5D54E89008900910 +7AB8:01007FFE4822901400F83F0011100920FFFE09203118C20609002908282447E4 +7AB9:01007FFE4822901405FC242024F83C48044805FE7C0024FC2484248444FC8484 +7ABA:020001007FFE48229014000011F87D0811F81108FDF8110829F824904112860E +7ABB:01007FFE4822911402003FF8220827E82A48218826483FF801004884481287F2 +7ABC:01007FFE48229114222011101FF011101FF011101FF001007FFC05401930E10E +7ABD:020001007FFE4822901422203C20213E1F4220943F104810FFA8142822444182 +7ABE:01007FFE4822901408207F20083E3E4200943E1000107F1008282A2849441882 +7ABF:01007FFE4822911479F04A9050606198560649F04A406BF8544043F8404047FC +7AC0:020001007FFE4822901401F8FD0811F8110851F85D0851F850905C90F112060E +7AC1:01007FFE4822901401F03E0003F03E0003FA7E0201FE0C20703C1DE2F0221C1E +7AC2:01007FFE482291147FFC044028281FF02828CFE608200FE00100111025080200 +7AC3:01007FFE492297D401007FFC11101FF011103FF821083FF821083FFA010200FE +7AC4:01007FFE4822961438F820083CF820083FF80000294825282948252A29463182 +7AC5:01007FFE482290143E2022203E3E22443EA408247F2810281E1022282A444482 +7AC6:01007FFE4822901408003E7C22443E44227C3E0022FEFE8212822282CAFE0482 +7AC7:01007FFE492297D401003FF824483FF810101FF010101FF010101FF008201010 +7AC8:01007FFE492297D401007FFC00001FF012903EF822883EF822883EFA028201FE +7AC9:01007FFE4822901408407E7C2440FF7C00047E7C42407E7C42407E7C4242463E +7ACA:01007FFE482290140C40707C104055FC39241154FD0433FE3A22564A92FA1206 +7ACB:02000100010000007FFC000000101010082008200440044004800000FFFE0000 +7ACC:1000080008F07E9000900490449044902490289028900E92F0924112010E0200 +7ACD:1020082008207E200020042047FE44202420282028200E20F020402000200020 +7ACE:020001003FF8000008200440FFFE0000044004407FFC04400840084010402040 +7ACF:1008083C09E07E2000200420442047FE2420282028200E20F020402000200020 +7AD0:100008F808887E8800880506460045FC2484288428480E50F020405000880306 +7AD1:204010401040FC4003FE08408880889048904920512052481E44E48441FE0082 +7AD2:020001003FF8000008200440FFFE001000101F90109010901F90001000500020 +7AD3:1008081C08E07E200020043C44E044202420283E29E00E20F02240220022001E +7AD4:200810681388FC880088088888888BFE48884888508850881D08E10842080408 +7AD5:201010901090FC88010809048A048DFA48884888508850881D08E10842280410 +7AD6:08004BF84A08491048A0484048B04B0C0A0001003FF8000008200440FFFE0000 +7AD7:1020082008207EA800A404A2452245202624282428280E08F010402000C00300 +7AD8:1040084008807EFE0102060244F244922492289228F20E92F002400200140008 +7AD9:1020082008207E20003E04204420442025FC290429040F04F104410401FC0104 +7ADA:204010201020FDFE01020A048800880049FE4820502050201C20E02040A00040 +7ADB:1020082008507E50008805244612441025FC280428080E88F050402000100010 +7ADC:020001003FF808200440FFFE00001FF011101FF011101FF01112010200FE0000 +7ADD:1020081008107EFE00000400448444842444284828480E10F01041FE00000000 +7ADE:020001003FF808200440FFFE00001FF0101010101FF00440044008423042C03E +7ADF:020001003FF808200440FFFE00001FF010101FF010101FF0044008421042603E +7AE0:020001003FF808200440FFFE00001FF010101FF010101FF00100FFFE01000100 +7AE1:100009FE08107E10002004FC44844484248428FC28840E84F084408400FC0084 +7AE2:202010401088FD0401FE0802888088FC4920482053FE50201C50E08841040202 +7AE3:204010401088FD0403FE0802888889444A4248F8518852501C20E05041880606 +7AE4:2040102013FE0202FC4400400BFE884088904890511051201A24E24204FE0842 +7AE5:020001003FF808200440FFFE00001FF011101FF011101FF001003FF80100FFFE +7AE6:2020102013FEFC20002009FC8924892449FC4820507050A81D24E22240200020 +7AE7:1020084008F87E8800F8048844F8448A248C29F828180E28F048408803280010 +7AE8:20201020103EFC2001FC090489FC890449FC4924502053FE1C20E02040200020 +7AE9:2020101011FEFD02020408F88888888848F84888508850F81C88E08843FE0000 +7AEA:00007EFC48447E4442287E1048287EC6020001003FF8000008200440FFFE0000 +7AEB:2040104010F8FD08001009FC882488244BFE4824502451FC1C24E02040A00040 +7AEC:2004101E13E0FC2001FC0924892489FC48204BFE5222522A1EFAE202420A0204 +7AED:200011FC1104FDFC010409FC888089FE4A224922515251021DFAE00240140008 +7AEE:200013FC1204FE0403FC0A008A848A484AFC4A48524853FE1C48E44848881108 +7AEF:202011241124FD2401FC08008BFE8820484049FC515451541D54E1544154010C +7AF0:100009FE09007F7C01540554457C45542554297C29100F10F17C4210021004FE +7AF1:202013FE1020FDFC012409FC892489FC48224BFE500853FE1D08E08840280010 +7AF2:21041088100003FEFA2202AA0A728A228BFE480051FC510419FCE10401FC0104 +7AF3:201013D21054FD48008A09048AFA8C0049FC4904510451FC1D04E08847FE0000 +7AF4:2088105013FEFC5001FC0954898C8974490449FC500853FE1D08E08840A80010 +7AF5:200013FE100803BEFA8802A80ABE8B8888084BFE528A52521BFEE222022A0224 +7AF6:20201010FEFE44442828FEFE00007EFC428442847EFC28502A502C924912820E +7AF7:1020FE7C44A42818FEE600107CFE44107C9044FE7C101020FE7C10C8103011CE +7AF8:20201010FEFE44442828FEFE00007C7C44447C7C44447C7C28282A284C4A8886 +7AF9:10401040104010403EFE289049108A1008100810081008100810081008500820 +7AFA:104010401F7E289024884508800000003FF800000000000000000000FFFE0000 +7AFB:104010401F7E289024884508820002007FF80208040804080808100820504020 +7AFC:104010401F7E28902488450880000FE0082008200A200920092210222022401E +7AFD:104010403F7E2890450880003FF801000100FFFE010001000100010005000200 +7AFE:104010401F7E2890248845088100117013901D10F11011501122110210020FFE +7AFF:104010403F7E4890850800003FF8010001000100FFFE01000100010001000100 +7B00:104010403F7E4890850802000100FFFE0800080008000800080008000FFC0000 +7B01:104010401F7E289024884508800000003FF801000100010001000100FFFE0000 +7B02:104010403F7E28904508820002007FE002200A200420062009221022201E4000 +7B03:104010403F7E28904508BFF00010101010101FFC000400047FE4000400280010 +7B04:104010403F7E4890850800007FFC082008200820FFFE08200820102020204020 +7B05:104010403F7E28904508981006600180066018186C240240018006601818E006 +7B06:104010403F7E2890450880003FF82108210821083FF820002002200220021FFE +7B07:104010403F7E289045088100008000007FFE0100012001100108010001000100 +7B08:104010403F7E2890450880003FE0082008400C780A081210112020C043308C0E +7B09:104010403F7E4890950810001FF820084C088208006801881E08080800500020 +7B0A:104010403F7E28904508801000F81F2012201220122012102210220842048202 +7B0B:104010403F7E489085083FF002100210FFFE021004103FF0081010002000C000 +7B0C:104010403F7E489085083FFC0020102020203FFE012002200C203020C0A00040 +7B0D:104010403F7E4890850801003FF8210821082288244828282008200820282010 +7B0E:104010403F7E4890850800001FF0000000007FFC04400440044408441044603C +7B0F:104010403F7E4890950810001FF8224842488488088811082208440808501020 +7B10:204020407EFE51108A0801007FFC000000000FE00820082008221022201EC000 +7B11:104010403F7E2890450880F03F0001000100FFFE01000280044008203018C006 +7B12:104010403F7E28904508828004400A203118C1061FE000200040004000800100 +7B13:104010403F7E489085082080208020883C9020A020C0208424842884307C0000 +7B14:104010403F7E4890850800F83F00010001F83F00010001FC7F020102010200FE +7B15:104010403F7E2890450880001FF010101110111011101290149008823082C07E +7B16:104010403F7E2890450880002410221021102110201024202830304821840602 +7B17:104010403F7E2890450888001FF02820444003801C70E30E00C00E0001800040 +7B18:104010401F7E289024884508810001FE010001003FF82008200820083FF82008 +7B19:104010403F7E28904508910011003FFC4100810001003FF8010001000100FFFE +7B1A:20403F7E4890850800003FF8210821083FF8210821083FF82108010001000100 +7B1B:104010403F7E2890450881003FF82108210821083FF82108210821083FF82008 +7B1C:104010403F7E2890450880000100210821083FF801000100410441047FFC0004 +7B1D:104010403F7E489085083FF820082FC820482688210822882C4820083FF82008 +7B1E:104010403F7E48908508082010103FF8000800001FF01010101010101FF01010 +7B1F:104010403F7E2890450880781FA012201220122012101290224822A843248202 +7B20:104010401F7E2890248845088200010001007FFC00001010082004400000FFFE +7B21:104010403F7E2890450880001FF0101010101FF010101FF010101010FFFE0000 +7B22:104010403F7E489085083FF8200820083FF8208020803FFC204020242C14300C +7B23:20403F7E4890850808001FF020105F90109010901F901050102410040FFC0000 +7B24:20403F7E4890850800007FF80408080810502020DFF81008100810081FF81008 +7B25:104010403F7E2890450880003FF800087FE800081F88108810881F8810A80010 +7B26:104010403F7E489085080810081013FE30105110909010901010101010501020 +7B27:20403F7E4890850800001E78124812481248FFFE124812481248128826A84110 +7B28:104010403F7E4890850801007FFC03800540092011102FE8C106010001000100 +7B29:104010403F7E28904508885008481040307C57C09040102010201014100C1004 +7B2A:104010403F7E2890450880001FF0101010101FF0101010101FF00000FFFE0000 +7B2B:104010403F7E2890450881701F80110021003FFC0304050409043128C1100100 +7B2C:20403F7E489085083FF8010801083FF8210021003FFC030405041928E1100100 +7B2D:104010403F7E28904508828004400A203118C1061FE0002000400C8003000080 +7B2E:104010403F7E28904508880008001FFC2400440087F00400040007F804000400 +7B2F:104010403F7E28904508900011F8FE881288228824506450182018502488C306 +7B30:20403F7E4890850804403FF8044804481FF8144024403FFC0844105420484040 +7B31:104010403F7E4890950810001FF8200840089F88108810881F88000800500020 +7B32:104010403F7E28904508882010103FF8000808200820FFFE0820082010202020 +7B33:104010403F7E489085081000107C7E441244124412441244224422444A7C8444 +7B34:104010403F7E489085080000FFFE001000101F90109010901F90001000500020 +7B35:104010403F7E48908508100009F84908210825080528091071021102110210FE +7B36:104010403F7E28904508880008001FF0210001007FFC0280044008203018C006 +7B37:104010403F7E489085080C0070FC4084448444845C8464944888088010806080 +7B38:104010403F7E2890450880003FFC2000200027F82408240827F8200020003FFE +7B39:104010403F7E28904508822012201220FFFE1220122013E0100010001FFC0000 +7B3A:20403F7E489085080240022003F87E00020003FCFE10012000C007443834000C +7B3B:104010403F7E2890450880007CFC10841084108410841E94F088408000800080 +7B3C:104010403F7E28904508804004207FFC04800488089008A010C223824C82807E +7B3D:104010401F7E28902488450880003FF8244824482448244824482448FFFE0000 +7B3E:104010403F7E489085082080108017F8008870881108110812281410280047FE +7B3F:20403F7E4890850808000FF010202C4003801C70E00E1FF0101010101FF01010 +7B40:104010403F7E2890450881003FF801000100FFFE000001003FF801000100FFFE +7B41:104010403F7E2890454884403FF82448244824483FF82448244824483FF82008 +7B42:104010403F7E4890854820401258926843C84E480A48125AE242220221FE2000 +7B43:104010403F7E489085083FF8210821082FE8210822882448282820083FF82008 +7B44:104010403F7E4890850804404448245024600C403460C852084A1042203E4000 +7B45:104010403F7E48908508110011003FF841000100FFFE0440084010422042C03E +7B46:104010403F7E489085083FF00110FFFE01103FF001003FF80100FFFE01000100 +7B47:104010403F7E2890450880007EFC088408880890088808840E84F0A840900080 +7B48:20403F7E4890850800F01F0001000100FFFE010001001FF0101010101FF01010 +7B49:20403F7E4890850801003FF801000100FFFE000000207FFC0820042004A00040 +7B4A:204020407EFE51108A0801007FFC08201010244844440280010006C01830E00E +7B4B:104010403F7E489085083E20222022FC3E24222422243E24224442444A948508 +7B4C:104010403F7E289045088280044008203018CFE6010001001FF0010001007FFC +7B4D:20403F7E4890950810001FF820085FC890481FC810481FC81048000800500020 +7B4E:104010403F7E489095081000FE7C124422442244644414440844147C2244C000 +7B4F:104010403F7E2890450888A00890108030FC57809048105010241054118C1604 +7B50:20403F7E4890850800003FFE20002FFC2080208027F8208020802FFC20003FFE +7B51:104010403F7E4890850800007DF011101110119011501D12E2124212040E0800 +7B52:104010403F7E28904508BFF820082FE8200827C82448244827C8200820282010 +7B53:104010403F7E2890450880007EFC082008200820FEFE08200820102020204020 +7B54:104010403F7E2890450882800C603018CFE600001FF01010101010101FF01010 +7B55:20403F7E48908508100021FC4000880013FE3020502090201020102010A01040 +7B56:104010403F7E489085080100FFFE01003FF821082388255809201110610C0100 +7B57:104010403F7E489085081040104027FC6444A444244427FC2444204020402040 +7B58:104010403F7E28904508880008007EFC088408840E847884088408FC28841000 +7B59:104010403F7E4890850801007FFC01003FF80100FFFE054009203118C1060100 +7B5A:20403F7E48908508208020883EB020C42084267C39000100FFFE010001000100 +7B5B:20403F7E4890850808004BFE4820482049FC4924492449241134112820204020 +7B5C:104010403F7E289045089110092001007FF8000800083FF8000800087FF80008 +7B5D:104010403F7E2890450888001FF020205FF80108FFFE01081FF8010805000200 +7B5E:204020407EFE51108A0801003FFC2004410801007FFC054009203118C1060100 +7B5F:20403F7E4890850800F87F00221011203FE000400080FFFE0100010005000200 +7B60:104010403F7E28904508908010FC7D041204108410541C24E044418400280010 +7B61:204020407EFE51108A880440082037D8C10601003FF801001110210845040200 +7B62:104010403F7E48908508100011FCFD24112411241DFCF10011001102510220FE +7B63:204020407EFE511088080608780808480848FF481C482A484948880808280810 +7B64:204020407EFE51108A0801001FF010101FF010101FF011081090126014181806 +7B65:104010403F7E2890450880001FF0101010101FF000003FF8200820083FF82008 +7B66:204020407EFE51108A0801003FFC20045FE800007FFC0440044008441044603C +7B67:104010403F7E289045089FF010101FF010101FF010101FF0044008421042603E +7B68:104010403F7E4890850802800C603118CFE6004000801FF0101010101FF01010 +7B69:104010403F7E489085083FE0044002803FF821083FF821083FF8210821282010 +7B6A:104010403F7E28904508BFFC20002FF828882FF828882FF8208020803FFE0000 +7B6B:104010403F7E2890450880003FF820083FF820083FF820083FF8082010102008 +7B6C:104010403F7E28904508809000883FFC208020883E48225022244A54448C8104 +7B6D:20403F7E4890850800003FF801001FF001007FFC00000820FFFE082010202020 +7B6E:104010403F7E4890850800007FFC01001110111011102928454485840100FFFE +7B6F:104010403F7E489085283E20222022FC3E2422243E24222422442F44F0944108 +7B70:104010403F7E289045088880088010FE11403240547C90401040107E10401040 +7B71:104010403F7E4890850810401040247E24886488A54824502420205020882306 +7B72:104010403F7E48908508111009201FF010101FF010101FF01010101010501020 +7B73:104010403F7E4890850800387BC00840104023F8784008402BFC1000280047FE +7B74:104010403F7E4890850801007FFC11101110292845440280044008203018C006 +7B75:20403F7E4890850800187BE00840104022787A400A402BFC1000280047FE8000 +7B76:104010403F7E4890850811001FF821000100FFFE00001FF0101010101FF01010 +7B77:104010403F7E48908508104011F818485448504853FE904010A0111012081406 +7B78:20403F7E489085081FF010101FF010101FF000003FF80100FFFE010001000100 +7B79:20403F7E4890850801007FFC02003FF80400FFFE08201FFC2420422080A00040 +7B7A:104010403F7E489085083FFE20002FFC2080208027F820A020902FFC20003FFE +7B7B:20403F7E489085087FFC01003FF821083FF821083FF821001A00060019C0603E +7B7C:20403F7E489085081FF0101010101FF000003FF820082108220804E01818E004 +7B7D:104010403F7E489085081FF010101FF000003FF80100FFFE028004401830E00E +7B7E:104010403F7E2890450882800440082037D8C00602101110092008407FFC0000 +7B7F:104010403F7E289045088FE0144003801C70E10E01003FF80100111025080200 +7B80:20403F7E4890850810000BF8200827C82448244827C82448244827C820082018 +7B81:204020407EFE51108A0801003FF808200440FFFE00001FF0101010101FF01010 +7B82:104010403F7E4890850801007FFC11101110292845440380054009203118C106 +7B83:20403F7E4890850800007F0022FC3E4422443E44222822282F10F22842440282 +7B84:204020407EFE51108A0804003FF821083FF822083FF808801080FFFE00800080 +7B85:104010403F7E489085083FF821083FF821083FF80000FFFE0820082010202020 +7B86:20403F7E4890850800003FF8210822882448000020843E9820E020842684387C +7B87:20403F7E4890850800003FF8210821082FE8210827C8244827C820083FF82008 +7B88:20403F7E4890850820801110120887FC4204500013F82208E208220823F82208 +7B89:20403F7E48908508100011F8FD08110815F8184033FCD0441084108451142208 +7B8A:104010403F7E4890952808207E50105010881F0612601210220022C04A308408 +7B8B:20403F7E48908508021002FC7F4000840764781C021002FC7F4000840764781C +7B8C:20403F7E489085087F84100422247F24092408247F24082408240F04F0144008 +7B8D:20403F7E48908508100013FE1220FE2012FC12A41EA4F2A412B412A8522023FE +7B8E:20403F7E4890850801F801003FFE210221F02F0420FC200027E044224822B01E +7B8F:20403F7E4890850800FC7F00220811103FF80108FFFE01083FF8010805000200 +7B90:20403F7E4990BFF801001FF00100FFFE00001FF010101FF010101FF010101030 +7B91:20403F7E489085087FFC01003FF80108FFFE01083FF8110011F8290047FE8000 +7B92:20403F7E489085081FF000100FF000101FF000007FFE41029FF4111011501120 +7B93:20403F7E489085083FF000101FF00010FFFE111009A005401930E10E05000200 +7B94:104010403F7E48908528104009FC49042104250405FC09047104110411FC1104 +7B95:20403F7E48908508082008207FFC08200FE008200FE00820FFFE082010102008 +7B96:104010403F7E48908508082008207EFC08200C701A682AA44922882008200820 +7B97:20403E7E489080003FF820083FF820083FF820083FF80820FFFE082010202020 +7B98:20403F7E489085083FF8200820C8270821082FE823882548292821083FF82008 +7B99:20403F7E489085083EFC228422943E88228022FC3EA422A422A822904AA884C6 +7B9A:104010403F7E289045088C04122421245EA480243F242124212421043F142108 +7B9B:20403F7E48908508001C7DF00950115011501D503148D14811441254525A2468 +7B9C:20403F7E4890850801007FFE40028824101020081FF00100010001007FFC0000 +7B9D:104010403F7E4890850810881088FBFE108810881CF8F0881088108850F82088 +7B9E:20403F7E48908508111009203FF802007FFC082010102FE8C8260868080807F8 +7B9F:104010403F7E289045089FF810081FF810081FF82080208C3EF020822682387E +7BA0:20803EFE491080F83F0001007FFC09200920FFFE092009207FFC010001003FF8 +7BA1:20403F7E4890850801007FFE40029FE410201FE010001FF0101010101FF01010 +7BA2:204020407EFE51108A0801007FFE400290041EF8228824A8549008841084607C +7BA3:204020407EFE511088080804FFA408247F2449244B241C242A24490488140808 +7BA4:204020407EFE51108A0801007FFC08200820145022880100FFFE010001000100 +7BA5:20403F7E489085082020102013FC822442204BF80A881288E25024202450298C +7BA6:20403F7E489085083FF801001FF001007FFC00001FF01010111002C00C307008 +7BA7:20403F7E4890850800003FFC208020802FF8249022A02FFC2140222024103FFE +7BA8:20403F7E48908508100011FC1088FC70138E10201DFC3020D3FE102050202020 +7BA9:20403F7E489085083FF8244824483FF8020007F008103420024001800E007000 +7BAA:20403F7E48908508082004403FF821083FF821083FF80100FFFE010001000100 +7BAB:10401F7C28A045103FF80108FFFE01083FF80100254825282528292821084108 +7BAC:20403F7E4890850808207FFC08200200FFFE040008001FF02810C8100FF00810 +7BAD:20403F7E4890850810100820FFFE00003E4822483E4822483E0822082A282410 +7BAE:20403F7E50908A0801007FFE40029FF400001FF010101FF010101FF00000FFFE +7BAF:20403F7E48908508080017FC304053F8924813F8124813F8114010C013301C0E +7BB0:20403E7E48909FF820085FC890481FC810681FD000001FE00040FFFE01000300 +7BB1:104010403F7E28904508880008FC7E84088418FC1C842A842AFC4884888408FC +7BB2:20403F7E489085281120092009FC422020202BFE08901090709011121112120E +7BB3:20403F7E489085083FF820083FF8241022202FF8222022202FFC422044208820 +7BB4:104010403F7E2890452880243FFE20202FA420242FA8289828924FAA40468082 +7BB5:20403F7E489085081110216843841C00FFF010101FF010101FF010101FF01010 +7BB6:204020407EFE51108808087C7F440844087C3E442244227C22443E8422940108 +7BB7:104010403F7E4890A5481040FEFE212020AC3CB425E424AC24A044A25482887E +7BB8:104010403F7E2890450882001FD00220FFFE03000FF03810CFF008100FF00810 +7BB9:20403F7E4890850810401440247C7884110424447E24002454044A048A280010 +7BBA:20403F7E489085087FFC01003FF80200FFFE08201FF02828CFE608200FE00820 +7BBB:20403F7E48908508004013F8204847FE884813F8304053FC904017FE10401040 +7BBC:20403F7E489085083FFC20043FFC20002FF8220024102FF820804FF84080BFFE +7BBD:20403E7E48909FF001007FFC01001FF011101FF011101FF001003FF80100FFFE +7BBE:20403F7E48908508080049042A247F2441247F2441247F244124410445144208 +7BBF:20403F7E489085081FF010101FF000007FFC10101FF010101FF0103EFFD00010 +7BC0:104010403F7E4890850800007E7C42447E4442447E44484444545A4862404040 +7BC1:204020407EFE51108A081FF010101FF010101FF000007FFC01003FF80100FFFE +7BC2:20403F7E489085081FF010101FF010101FF021003FF841009FF00100FFFE0000 +7BC3:20403F7E489085083FF821083FF820002FF828082FF828084FF848088FF80808 +7BC4:20403F7E4890850808007F7C08447F4449447F4449547F480842FFC20842083E +7BC5:20403F7E489085080100210821083FF80000FFFE02003FF82488248824A82010 +7BC6:20403E7E489088000FE010201FC00040FFFE06003B0804B019C062A00C987306 +7BC7:20403F7E4890850800803FFC20043FFC20002FFC292429242FFC49244924880C +7BC8:20403F7E48908508080008087F0808FEFF08084808287F2808080F08F0284010 +7BC9:20403F7E489085087DF01110119011521D12E20E01007FFC054009203118C106 +7BCA:104010403F7E489085082090109013FC80904890489017FEE000209021082204 +7BCB:104010403F7E489085083FFC20802FF82080249024902AA83144222024103FFE +7BCC:20403F7E4890850809F00810101037FC510091F81240104017FC10A01110120C +7BCD:20403F7E489085080C20702010A410A4FCA83120382054505050908811041202 +7BCE:104010403F7E4890850800207C2044A87CA445227D22462844107C6001800600 +7BCF:104010403F7E489085282220223EFF42229422103E10221022283E2822440082 +7BD0:20403F7E48908508100013FEFE20122032FC3AA456A492A412B412A8122013FE +7BD1:20403F7E489085081FF011101FF00100FFFE00001FF01010111002C00C307008 +7BD2:204020407EFE51108A880E603118DFE610201FE010201FE01008119014601810 +7BD3:20403F7E48908508111009207FFC05401930610C0400FFFE08201E4003C03C38 +7BD4:20803EFE49109FF010101FF000003FF820083FF820083FF820083FF808201010 +7BD5:20403F7E4890850801003FF801007FFC080010103FF800003FF824482448FFFE +7BD6:20803EFE491080803FFC20802FF820883FFE20882FF820804FF848088FF80808 +7BD7:20803EFE491088801FFC30805FF890801FF810801FFC10003FF00C6003807C7C +7BD8:20803EFE491090001FFC210451141FF4020814001FFC210451141FF404143808 +7BD9:20403E7E48908200FFFE00001FF010101FF000007FFC40044FE448244FE4400C +7BDA:20403F7E489085083FFC224022403E7822402E7022403E78224022403FFC0000 +7BDB:20403F7E4890850800007EFC02047EFC40807EFC020422441A3462C414280810 +7BDC:20403F7E489085081FC000447D88055009203118C50602003FF8000024884244 +7BDD:20403F7E489085487FFC04403FF80440FFFE11101FF01110FFFE101010501020 +7BDE:20403F7E48908508200017FC140487FC440457FC104027FCE04020402FFE2000 +7BDF:20403F7E4890850808400FFC104033F8504097FE120813F8120813F812081218 +7BE0:20403F7E48908508108011F822886870ABAE282029FC282028A8292422A42040 +7BE1:20403F7E48909FF810101FF010101FF010101FF002007FFC04401A30E44E0FE0 +7BE2:20803EFE4910BFF801007FFC00001FF010101FF010101FF010101FF008201010 +7BE3:20403F7E489085083FF8082004407FFE420281043FF8040007F0081010502020 +7BE4:20403F7E4890850800001FF811001FF011001FF011001FFC0004292444940008 +7BE5:104010403F7E489085087FFC04403FF824483FF801007FFC05401930E10E0100 +7BE6:20403E7E489082003FF82448238824483FF8000020843E9820E020842684387C +7BE7:20403F7E4890850804007FFC450408801FFC30805FF810801FF810801FFC1000 +7BE8:20403F7E48908508784048A05110620855F648404BFC68405150424845444080 +7BE9:20403E7E4890900023FE7C20442045FC7D2441247D24452445347D2844200020 +7BEA:20403F7E4890857C3F8020F820802FFC288428F02B882878480051E09224241C +7BEB:20403F7E489085087DF0111011901D52E20E5FF001001FF001007FFC01000300 +7BEC:20403F7E4890850806C01A30E10E1FF010101FF010101FF010002FF848088FF8 +7BED:20403F7E50908A0801003FF80820FFFE00003FF821083FF821083FFA010200FE +7BEE:20403F7E489085080480248024FC24A0251000003FF8244824482448FFFE0000 +7BEF:104010403F7E4890952810243C3E41E0BC20102E13F4FC281012106A15861802 +7BF0:20403F7E489085081000087C7F4422481450FFC800443E44225422483E402240 +7BF1:20403F7E489085080080FFFE0440139014501FF001007FFC44444FE44424400C +7BF2:20403F7E489085081010FEFE10107C7C1010FEFE10103FF800081FF800083FF8 +7BF3:20403F7E489085083FF821083FF821083FF80920FFFE09203FF801007FFC0100 +7BF4:20403F7E4890850823FC10801144066870B01128166810A4112416A0284047FE +7BF5:20403F7E489085081110211041108AA8144430405240927C1240154014FE1800 +7BF6:20403E7E4890FFFC010011F81100FFFE10001FF820003FFC0004492484940008 +7BF7:20403F7E4890850823F0151010E0071C704013F8104011F0104017FC284047FE +7BF8:20803EFE491088201FF0102025487EFC04401930E64E1990062018C007003800 +7BF9:20403F7E489085081FF0149012501FF00200FFFE08203FD8C84608C0080807F8 +7BFA:104010403F7E48909528104011FC7D2411FC11441DFC7050109013FE50102010 +7BFB:20403F7E489085087FFC04403FF824483FF800003FF80000FFFE111025080200 +7BFC:20403F7E48908508120067DC444447C4444457DC60000440044008421042603E +7BFD:20403F7E48908508140027DE4912811217D221126112A5D2251A25D42E102410 +7BFE:20403F7E489085083FF8244824483FF800903FFC208030482850242440D4830C +7BFF:20803EFE4910FFFC01003FF821083FF821083FF801047FFC0020FFFE08200460 +7C00:20803EFE4910BFF801003FF80100FFFE10101FF010101FF010101FF008201010 +7C01:20403F7E489085081020213C4120892017FE300050209120113E112012A0147E +7C02:20403F7E489085087FFC40A47FFC40845E9452945E64405446B459147FFC4004 +7C03:20403F7E489085280C4070FC13081090FC6030903B3E544255A4901810601380 +7C04:20803EFE4910BFF820083FF8200027F0241027F020002FF828884FF8480287FE +7C05:20403F7E4890850800803FFC041002203FFE208024802FFC308047F840809FFE +7C06:20403F7E50908A0801007FFE4022BE3C00207EF814081450142424D4440483FC +7C07:20403F7E4890850820401040FEFE212020403CFC2520242025FE445054888906 +7C08:20403F7E489085083FFC20043FFC220824102F78241024103F7C441044108810 +7C09:20403F7E48908548224013F81440004077FC100013F8120813F8280047FE0000 +7C0A:20403F7E4890850808207FFC08200FE008200FE00820FFFE11102FE8C1063FF8 +7C0B:20403F7E489085081FF010101FF010101FF410881470180E3FF824482448FFFE +7C0C:20403F7E489085080820FFA0083E7F42499449107F101C102A28492888440882 +7C0D:20403F7E489085083FF82108FFFE21083FF811101FF00400FFFE082007C07838 +7C0E:20403F7E489085081090109013FCFC9013FE10001DF8F10811F8110851F82108 +7C0F:20403F7E4890850800803FFE22203FFC22243FFC284028482F7048444B448C3C +7C10:20403F7E4890850808207F20083E7F4249847F1049107F100828FFA808440882 +7C11:20403F7E489085087FFC00001FF01010FFFE10101FF0048808503820CB180C06 +7C12:20803EFE49109FF010101FF010101FF010101FF00200FFFE08203518CA2617F0 +7C13:20403F7E4890850800047F0849105D6049047F0841105D6255045D0845108260 +7C14:20403F7E489085087FFC00003FF81010FFFE10103FF8048808503820CB180C06 +7C15:20403F7E4890850822207F2022203EFC08247F2449247F240844FF4408940908 +7C16:20403F7E48908508040C55704E4044405F7E44484E48554844487F8800880108 +7C17:20403F7E489095080BF040902A94129275121250142001007FFC05401930E10E +7C18:20403F7E489085083FF00110FFFC01103FF0092025482FE82388254829284108 +7C19:20803EFE4950804827FC204023F8FA4823F8224823F8224820102FFE211020B0 +7C1A:20403F7E489085087FFC444444447FFC0028FFFE08207F2449284D104A2A0846 +7C1B:20403F7E48908508220C2270FF4022403E40227E3E482248FF48224841488088 +7C1C:20403F7E4890850823F8120893F8420843F810002FFEE20027FC292422540488 +7C1D:20403F7E489085087FFC044028281FF02828CFE608200FE00100111025080200 +7C1E:20403F7E489085083EF822883EF800001FF011101FF011101FF00100FFFE0100 +7C1F:20403E7E4890FFFC04403FF824483FF810101FF010101FF00100FFFE01000100 +7C20:20403F7E489085283FF801001FF011101FF011101FF0111000003FF82448FFFE +7C21:20403F7E489085083E7C22443E7C22443E7C200427E4242427E4242427F42008 +7C22:20403F7E489085083E7C22443E7C22443F7C20842FF420442244218426542008 +7C23:20803EFE49109FF011101FF001007FFC10101FF010101FF010101FF008201010 +7C24:20403E7E4890BFF824483FF800001FF010101FF010101FF010101FF008201010 +7C25:20403F7E4890850800701F800200FFFE082037D8C4463FF8200827C8244827D8 +7C26:20403F7E4890850800907EA00444282817D02008DFF610101FF0082004407FFC +7C27:20403E7E489084403FF80440FFFE01003FF821083FF821083FF8082010102008 +7C28:20403F7E489085087CF844887CF842843E7C04403FF80440FFFE082010102008 +7C29:20403F7E4890850808202AA80820145022887FFC400402003FF8040808503020 +7C2A:20403F7E489085083E7C081048907EFE1428244A46863FF820083FF820083FF8 +7C2B:20803EFE4910BFF80108FFFE01083FF825483D7821083FF821083D7825484548 +7C2C:20403F7E48908508008078F849084A907860119812065DF8510851085DF8E108 +7C2D:20403F7E489085087FFC111029284544FFFE08203018DFF6101010101FF01010 +7C2E:20403F7E4890850808203EF808207EFC145022885FF410101FF010101FF01010 +7C2F:20403F7E489085081088108813FEFC8810F8388834F8508853FE908811041202 +7C30:20403F7E489085080820484049FC7D2441FC414479FC48A049204BFE48208820 +7C31:20403F7E48908508104808487EFC104810781E4812781248224823FE4A488484 +7C32:20403F7E4890850800203C4025FC25243DFC254425FC3C50249027FE54108810 +7C33:20403F7E4890850808107F2808443E82227C3E1022103EFE08107F1008100810 +7C34:20403F7E4890850801F801003FFE210221F02F0420FC292425285FFE42108408 +7C35:20403F7E489085081040FE7810887D5054207CD857067CF81088FE8810F81088 +7C36:20403F7E48908508200011F8FC0808F810083BFE5420953410A8112412A21040 +7C37:20403F7E48909FF820207FFEA4882BF4200027F8200027F8200047F8440887F8 +7C38:20403F7E4890850824102410FEFE24923C9024FC3CA424A4FEA8291045288246 +7C39:20403E7E4890911009203FFC20044FE808200FE000003FF821083FF821083FF8 +7C3A:20403F7E489085087FFE44429FF404403FF80440FFFE082011102FE8C1061FF0 +7C3B:20403F7E4890850821F8110811E8012873FC120412F4129412F412142A0847FE +7C3C:20403F7E48908508211027FCF91027FC291037FEE24823F822482FFEA2084218 +7C3D:20403F7E5090890802800440183067CC00003EF8228822883EF8082014502288 +7C3E:20403F7E489085083FFC22203FFC22402FF822483FFC22482FF846604A50B24C +7C3F:20403F7E4890854827FC104013F8824843F84A480BF81248F01027FC22102130 +7C40:20403F7E489085082080277CF4A425A436542088E7FC244427FC2444A7FC4404 +7C41:20403F7E4890850808207F3C08443E882A7C2A443E5408541C542A2848440882 +7C42:20403F7E48908508084014402AFE7F10A2103EFE22923E92289A24942A103010 +7C43:20403F7E489085083F2024203F3E21403F5024883F0800003FF824482448FFFE +7C44:20403F7E4890BFFC208027F0249027F020803FFC241027F0241027F022203FFC +7C45:20403F7E489085080A0033B822083A38238820883AB82288FFFE082010102008 +7C46:20803EFE491088207FFC09201FF831005FF091001FFC10003FF0082007C0F83E +7C47:20803EFE491080803FFC00000FF008107FFE40029FF40100069839E00690398C +7C48:20403F7E489085087F7C14207F20553855287F48086808587F4A084A0F6AF046 +7C49:20803EFE4910FFFE01003FF800001FF010107FFE48229FF401003FF80100FFFE +7C4A:20803EFE4910BEF812480A28124808801FFC30805FF890801FF810801FFC1000 +7C4B:20403E7E489080007FFC21084104BFFA21083558292835582108355829283558 +7C4C:20803EFE4910FFFC01003FF80000FFFE00023FF00100FFFE00107DFC44907C30 +7C4D:20403F7E4890850810487CFC10487C4811FEFE0010FC388454FC948410FC1084 +7C4E:20403F7E48908508247C3A0422281E1020FE3E124850085E7F5014B0229E4100 +7C4F:20403F7E48908508208011FEFE8821FE20883CF8248824F8248845FE54888904 +7C50:20403E7E489080203D2424A825FC3C4027FE24883D2426AA247044A855248A62 +7C51:20403E7E48909FF0149012501FF00200FFFE09203FF8CA2609200FE808D00E38 +7C52:20403F7E4890850827FE20A0F7BC24A437BC20A067FCA44427FC2444A7FC4404 +7C53:20803EFE4910A03817C01248815047FC524814042BFAE24823F8224823F82208 +7C54:20403E7E489088007F204920FFBE49447FA42A243E281028FF1022281C446282 +7C55:20403F7E48908508104011BC1114FD5411AC304039FC552451FC912411FC1104 +7C56:20403E7E489084203F280424FFFE122073A4122473A812287392121A17A6F842 +7C57:20403E7E4890BFF801007FFE41029D7408801FFC30805FF890801FF810801FFC +7C58:20403E7E489081243CA825FC24403DFE248825443E8A24F0242445FC54A88964 +7C59:20403F7E48908508100029F84408B8F810087DFE1020953450A81D24E2A24040 +7C5A:20803EFE491081F801003FFC21042FE0210827F8249027F024904FF849489FFC +7C5B:20403F7E48908508109010882BFE4448B83211CE7C90108897FE50481C32E1CE +7C5C:20403F7E4890850811FC1154FDFC102015FC182033FED08811FC102053FE2020 +7C5D:20403F7E489085087FFC10001FF808200FE079384FA87AA84AB8792A4AAA9C46 +7C5E:20403E7E4A90A7DE491297D2211265DAA5142FD000003FF80000FFFE11102308 +7C5F:20403F7E489095081080FEF811087EFC548454FC7C8410FC388454FC90481084 +7C60:20403F7E4890950808407E7C2440FF7C00047E7C42407E7C42407E7C4242463E +7C61:20403F7E48908508104010A0FD1012E814061BB832A8D3B81110111052A82444 +7C62:20403F7E4890850808201420223E5D4480A47724552877282210222855448882 +7C63:20403F7E4890FD7C44447C7C44447C7C41045FF441045FF455545FF44544592C +7C64:20403E7E4890912011282AA4FFFE122073A4122473A812287392121A17A6F842 +7C65:20803EFE491082800C6037D8C0063BB82AA83BB800003FF824883FF8248824B8 +7C66:20403F7E489085FC10202BFE4420B9FC11247DFC112495FC50201DFEE02047FE +7C67:20403F7E489085F840802FFC28840BF0E8882BF829402AA8317022A851608FFE +7C68:20403F7E4890850808201420223E5D4280847710551077102228222855448882 +7C69:20403E7E489087F8454824A827F80040EFFC2A1424882BF4210021F052108FFE +7C6A:20803EFE49108882511C5DD048905DD0445E7FF451145DD448945DD444547FE4 +7C6B:20403F7E4890850828503E7C4890FEFE1528264A5FF6149012501FF008201010 +7C6C:20403F7E4890950808287F24147E494855C87F7E08487F7E514855485D7E4340 +7C6D:20403E7E4890BF7E12241B3412A43FFC22403FF822483FF828442F7848428F3E +7C6E:20403E7E4890FFFC44447FFC10A0209045FE792013FC25207DFC012055FE8100 +7C6F:20403F7E489085087FFC10001FF808200FE07BB84AA87BA84AB87BAA492A9AC6 +7C70:20403F7E489085083EF822883EF822883FF831005FF091001FFC082007C0F83E +7C71:20403E7E4890BFF801007FFE41029D7401001D7048907EFCC9907EFC48907EFC +7C72:20403F7E4890850818FE24107E7C81447F7C55447F7C00447F7C55287F445582 +7C73:0100210811080910092001007FFC038005400540092011102108C10601000100 +7C74:06000100028004401830E10E1110092005407FFC0540092011102108C1060100 +7C75:081008104A102A102C100810FEFE18101C102A102A1048108810081008100810 +7C76:080008004AF02A902C900890FE9018901C902A902A90489288920912090E0A00 +7C77:0808081C4AE02A202C200820FE20183E1DE02A202A20482288220822081E0800 +7C78:100013F09490549058901090FC9033F03890549054909092108A108A10861082 +7C79:10401040944054405BFE1088FC88308838885508549090501020105010881304 +7C7A:084008404A402AFE2C800900FE7C18081C102A202A4048808902090208FE0800 +7C7B:01001110092001007FFC05400920111060080100FFFE0280044008203018C006 +7C7C:102010209420542059241124FD2431243924552455249124112411FC10041000 +7C7D:100011FC9404540858101020FC2033FE38205420542090201020102010A01040 +7C7E:1000100095FC544458441144FD44314439445644544490841084110412281410 +7C7F:080808084A082A082CFE0808FE0818081C882A482A4848088808080808280810 +7C80:10101010941054105BFE1010FC10311039105490549090501020105011881606 +7C81:0808081C4AE02A202C200820FE2019FE1C202A202A2048208820082008200820 +7C82:040004000FE01040208003600C187004111009207FFC054009203118C1060100 +7C83:101011109510551259121114FDD83110391055105510911211521192110E1000 +7C84:1008101C95E05500590011FCFD44314439445528552891101110122812441482 +7C85:10801080948054FC59541254FC54309438945524562490441044108411281010 +7C86:10201020942054A858A410A2FD2231203A245424542890081010102010C01300 +7C87:10801040944057FC58001000FDF03110391055105510911211121212120E1400 +7C88:100011F89448544858481048FC4831F838885488548890881088108813FE1000 +7C89:101010509450545058881088FD0432FA38485448544890481088108811281210 +7C8A:208020883CB020C020842C84307C0000111009207FFC054009203118C1060100 +7C8B:1040104095F854485888108AFD0A32263820542057FE90201020102010201020 +7C8C:100411E494245424582411E4FD043104390455E4542490241024102411441084 +7C8D:1008103C95E054205820103CFDE030203820543E57E09020102210221022101E +7C8E:080008FC4A842A842C840884FEFC18A01CA02AA02A904890890809080A040C02 +7C8F:082008204A202A202C2009FEFE2018201C202A502A504850888808C809240A02 +7C90:082008104A102AFE2C820882FE8218FE1C822A802A8048808880090009000A00 +7C91:1000100095FC552459241124FD24312439FC5500550091001102110210FE1000 +7C92:082008104A102A002DFE0800FE0418841C842A482A4848488850081009FE0800 +7C93:088808884A882A882DFE0888FE8818881C882AF82A8848888888088808F80888 +7C94:080008FE4A802A802C8008FCFE8418841C842A842AFC48808880088008FE0800 +7C95:10201020944055FC59041104FD04310439FC5504550491041104110411FC1104 +7C96:10201020942055FE58201020FC2031FC387054A854A891241124122210201020 +7C97:100011F895085508590811F8FD083108390855F8550891081108110817FE1000 +7C98:1020102094205420583E1020FC20302039FC5504550491041104110411FC1104 +7C99:102010209420542059FC1124FD243124392455FC552491241124112411FC1104 +7C9A:1080108094FE55005A201120FD2C31743BA45524553491281122110210FE1000 +7C9B:010001003FF80108FFFE01083FF80100292825482FE823882548292841088108 +7C9C:0100111011101FF0410441047FFC0000111009207FFC054009203118C1060100 +7C9D:100011FE95005500590011FEFD203120393C5524552491241124124412541488 +7C9E:100013FE9450545059FC1154FD54315439545554558C91041104110411FC1104 +7C9F:7FFC044004403FF8244824483FF80000111009207FFC054009203118C1060100 +7CA0:108810889488548859FE1088FC883088388857FE540090881084110412021402 +7CA1:100011FE95025502597A1102FD02317A394A554A554A917A11021102110A1104 +7CA2:0100410021FC0A441448E0A021102608111009207FFC054009203118C1060100 +7CA3:100011DC9554555459541154FD5433FE3954555455549154115412D41224144C +7CA4:02003FF8292825482FE82388254829283FF80000FFFE10001FF8000800500020 +7CA5:0100F93C09040D440B84793C412047E04120793C0B840D440904090451282110 +7CA6:0100111009207FFC054009203118C10610103EFC4210A290149008FE3010C010 +7CA7:10201010941055FE59001110FD103110397C5510551091101110121012FE1400 +7CA8:080009FE4A202A202C4008FCFE8418841C842AFC2A8448848884088408FC0884 +7CA9:10401040944455F458481050FDFE304038805584569890E010821082107E1000 +7CAA:0100111009207FFC054009203118C44604403FF804400440FFFE082010102008 +7CAB:100013FE94205420584011FCFD54315439545554555491541154114411141108 +7CAC:105010509450545059FC1154FD543154395455FC555491541154115411FC1104 +7CAD:082008204A502A482C840902FEFC18001C002AFC2A8448848884088408FC0884 +7CAE:1040102095FC5504590411FCFD04310439FC5520552291141108114411821100 +7CAF:100011F89508550859F81108FD0831F83908550855F89090109011121212140E +7CB0:1008103C95C05404594410A8FC0031F83810542057FE90201020102010A01040 +7CB1:000023F0909042941292E51222502420111009207FFC054009203118C1060100 +7CB2:08000F7C28043F44612892100C683184C000111009207FFC054009203118C106 +7CB3:100011FE9420542059FC1124FD2431FC3924552455FC912010A0104010B0130E +7CB4:100011FC9524552459FC1124FD2431FC3820542055FC90201020102013FE1000 +7CB5:04003FF820C82F2825483FF8254829283FF80000FFFE10001FF8000800500020 +7CB6:100011F89408540859F81008FC0833FE38205622557490A81124122210A01040 +7CB7:1080108094FE55025A42124AFD5230423BFE544254E29152124A104210541008 +7CB8:1088108897FE5488588810F8FC88308838F85488548893FE1000108811041202 +7CB9:1040102095FE540058881088FD5432223800542055FE90201020102010201020 +7CBA:1040108095FC5524592411FCFD24314439FC5490551093FE1010101010101010 +7CBB:100010FC948054F8588010F8FC8033FE39405524552891101108114411821100 +7CBC:080049122A120812FF242A24494888904248774892245A242F92221242128200 +7CBD:2040202023FEAA02700021FCF800200073FE6820A92821242222242220A02040 +7CBE:1020102095FE542058FC1020FDFE300038FC548454FC908410FC108410941088 +7CBF:100011FC9524552459FC1124FD2431FC382057FE547090A81124122210201020 +7CC0:1088108895FE548858881050FC50309439945698549090B210D21092108E1080 +7CC1:10401048948455FE582013FEFC8831243A425588541090621184101810601380 +7CC2:1088108897FE548858F81088FCF83088388857FE550091481184110011FE1000 +7CC3:100010FC948454FC588410FCFC0031FE388054FE552A924A1092112210541088 +7CC4:1040102095FE5502590211FEFD00310039FE55AA55AA92FE12AA12AA14A21086 +7CC5:200021FC2048A83073FE2052F894211072306820ABFE207020A8212426222020 +7CC6:100013FE9420544059FC1154FD54317439545554557491541154115411FC1104 +7CC7:108010BC9484550859FE1320FD20317C3990551055FE91101128112811441182 +7CC8:200023FE2022A920713C2120FAFE240071FC6904A9FC210421FC210421142108 +7CC9:200020882252AA227252228AFA0223FE70886944AA7A20882150202020D82706 +7CCA:1080109E949255D25892109EFC9231D23952555E5552915211D21022102A1044 +7CCB:210820882090ABFE700023C4FA54225473D46A54AA5423D422542244225422C8 +7CCC:2088208821ECA92A72282548F888217E760069FCA904210421FC2104210421FC +7CCD:210820882090AFFE71082108FA10229474A46F38A9082210221024A427BC2084 +7CCE:100011FE9500557C59541154FD7C31543954557C55109110117C1210121014FE +7CCF:200023FE2202AA0273FE2210FA92225472FE6A82AAFE228222FE2482248A2884 +7CD0:1028102497FE542059FC1124FDFC312439FC5524540893FE1088104810481018 +7CD1:200023DE2042A84273DE2210FA1023DE70426A52A94A214A2252204222942108 +7CD2:1088108897FE5488588813FEFC8031FC3B2455FC552491FC112411241124110C +7CD3:1000FE7810487C480048FE8682007CFC104454443828FE281010382854449182 +7CD4:100011FC94A4548858501020FCD83326382055FC5524912411FC102213FE1002 +7CD5:11041084948854005BFE1020FC2031FC3820542057FE900012A4125214521000 +7CD6:1020101095FE5510597C1114FDFE3114397C5510557C914411441244127C1444 +7CD7:2040208023F8AA0873F82208FBF8220873F86850A84827FE20A0211022082C06 +7CD8:1040102095FE5502580010FCFC4030A23B345458549493341052109013501020 +7CD9:101010509650557C58901010FCFE3300397C55445544917C1144110012FE1400 +7CDA:1048104895FE544858001048FD48314839FE5448544893C811481148117E1240 +7CDB:1020112494A857FE5A0210F8FC88308838F85420542091FC1020102013FE1000 +7CDC:010000803FFE22102F7C26382B5432922080249022A03FFC21C042A044989886 +7CDD:2040208821FCA908725223FEF8502188762668C0AB1020642388203020C02700 +7CDE:111009207FFC054019307FFC11101FF011101FF004403FF80440FFFE08201010 +7CDF:2090209027FEA89073FC2294FBFC229473FC6800A9F8210821F8210821F82108 +7CE0:1020101095FE5510597C1114FDFE3114397C5510559291541138125412921430 +7CE1:1040102095FC5488585013FEFC0031FC390455FC550491FC109010921112160E +7CE2:1088108897FE5488580011FCFD0431FC390455FC542093FE1050108811041202 +7CE3:200027BC2108AD2877BC2318FDAA294670006BF8AA08220823F82208220823F8 +7CE4:2288228827C8AA90729E27D4F82427D474546FD4AC5427C824482454246424C2 +7CE5:100011FE942055FE59521152FD523106380055FE542091FE1152115211521106 +7CE6:102013FE942055FC580011FCFD0431FC388857FE540091FC1104110411FC1104 +7CE7:100011FC950455FC590413FEFC0031FC392455FC552491FC102011FC102013FE +7CE8:200023BE20A2A8A270BE2388FA08223E722A6BAAA8AA20BE2088208A257E2202 +7CE9:10201050948855745A0211FCFD2431AC392455FC540090F8108810F8108810F8 +7CEA:00407C2045FC44887C5043FE7C20A5FC24203C20111009207FFC05401930E10E +7CEB:200023FC2294AA9473FC2000FBFE200073FC6A04ABFC20A2211423082D442182 +7CEC:200027FC24A4ACA477FC2048FBF8205077FE6840A9F8230825F8210821F82108 +7CED:202020882252AB267252228AFA2223FE70886944AA7A20882150202020D82706 +7CEE:201027D02510AFDE745027E8FD0427C470006BF8AAA822A822A822A82FFE2000 +7CEF:100011FC942057FE5A2211ACFC2031AC380057FE542091FC115411541154110C +7CF0:23FE222223FEAA2272FA22AAFAFA22AA72FA6A26ABFE220A23FE228A225A23FE +7CF1:52107EFE28447E28A2FE3E1020103E7C22103E10111009207FFC05401930E10E +7CF2:200023FE2248ABFE724822FCFAA422FC72A46AFCAA2023FE232A257A250A2906 +7CF3:553C1424FFA422427F00083CFF8408286B1049287F4410100920FFFE0920711C +7CF4:200011DC2844455490CC11545400384810FEFD9012FC389054FC949010FE1080 +7CF5:0820FFFE28207DFC44887C5041FE7C2045FC7C20111009207FFC05401930E10E +7CF6:540055DC7C44115454CC55547C00004854FE399012FCFC9038FC549092FE1080 +7CF7:208823FE2088ABDE725223DEFA5223DE72226BFEAAAA22FA2222227222AA2224 +7CF8:02000400082010403F800100061018087FFC0104092009101108210445040200 +7CF9:080008001000120022007C000800100024007E00020000005200490089000000 +7CFA:084008401040124022407C400840104024407E400240004452444944893C0000 +7CFB:00F83F000400082010403F800100061018087FFC010409201110210845040200 +7CFC:104010402040244045FCF844104420444844FC84048400845504550482280410 +7CFD:0800080010FE121022107C100810101024107E10021000105210491089500020 +7CFE:080408041044124422447C4408441044244C7E54026400445204490489040004 +7CFF:1000100021FC24444444F844104420444844FC44044400845484550482280410 +7D00:1000100021F824084408F808100821F84908FD00050001005502550280FE0000 +7D01:100013FC210425444524F8A8108820884850FC50042000205450548881040602 +7D02:080808081008120822FE7C080808100824487E28022800085208490889280010 +7D03:10821092209224924492F892109220924892FC92049200925492551281020202 +7D04:10401040208024FC4504FA04100421044884FC44044400045404540480280010 +7D05:1000100021FC24204420F820102020204820FC20042000205420542083FE0000 +7D06:100011FC202024204420F820102023FE4820FC20042000205420542080A00040 +7D07:10401040208024FE4500FA0010FC20084810FC20044000805502550280FE0000 +7D08:104010402040244045F8F848104820484948FCC8044800A854AA550A82060402 +7D09:1000100021FC24444444F944114421444944FE44044400845484550482280410 +7D0A:020001007FFC082007C01830E20E04201FC0018006103FF80108112025104208 +7D0B:10401020202027FE4488F888108820884888FC50045000205450548881040602 +7D0C:10401050204824484440F9FE105020504850FC500490009054925512810E0200 +7D0D:10201020202025FE4522F922112221224952FD4A058A010255025502810A0104 +7D0E:10401048204424444440FBFE104020404840FCA004A000905510550882040402 +7D0F:10081088204824484408F888104820484808FC0E05F800085408540880080008 +7D10:100011F8204824484448F848104821F84888FC88048800885488548883FE0000 +7D11:1000100021FE24104410F8201020206848A4FD22062200205420542080200020 +7D12:10201020205024504488F904120220884888FC88048800885488550881080208 +7D13:100011F8200824504420F81013FE20224824FC20042000205420542080A00040 +7D14:1020102020202BFE4820F124112421244924FDFC0424002054225422801E0000 +7D15:10101110211025124512F91411D821104910FD100510011255525592810E0000 +7D16:100411E4202424244424F9E4110421044904FDE4042400245424542481440084 +7D17:10201020202024A844A4F8A2112221204A24FC24042800085410542080C00300 +7D18:10401040204028404BFEF040108020904890F92009200248AA44AC8481FE0082 +7D19:1004101E21F025104510F910111021FE4910FD1005100108550A554A81860102 +7D1A:100013FC208424884488F890109C20844944FD4405280128AA10AA2884440182 +7D1B:10101090209024884508F904120425FA4888FC88048800885508550882280410 +7D1C:1000100020FC24004400F80011FE20204820FC4004400088548455FE80820000 +7D1D:1008103C21E024204420F820102023FE4820FC20042000205420542081FC0000 +7D1E:10201020202025FE4522FA24102020204850FC5004500050549054928112020E +7D1F:10201020205024504488F944122220204800FDFC040400085408541080100020 +7D20:01003FF801001FF00100FFFE020004201FC0018006103FF80108112025104208 +7D21:10401020202025FE4440F8401040207C4844FC44044400445484548481280210 +7D22:010001003FF8010001007FFE420284241FC0018006103FF80108112025104208 +7D23:1040104021F828484888F08A110A22264820F8200BFE0020A820A82080200020 +7D24:1004100E20F024804480F88010FE20884888FC88048800885488550881080208 +7D25:084008407F4008400E4078440844283C144008801F0002103FF8010815202210 +7D26:1000100021FC25244524F9241124212449FCFD00050001005502550280FE0000 +7D27:040025FC2488245024202450028C04201FC0018006103FF80108112025104208 +7D28:1088108820882908497EF308150821484928FD28050801085508550881280110 +7D29:102010202120252045FCF920122020204BFEFC20045000505488548881040202 +7D2A:1090109020902A904A92F2D4129822904A90FA900A900292AAD2AF12820E0000 +7D2B:088028882EF028842E84F07C020004201FC0018006103FF80108112025104208 +7D2C:102010202020242045FCF924112421244924FDFC052401245524552481FC0104 +7D2D:20082788408840889088E788240844109410F790009410A4A8A2A0BE85020200 +7D2E:042004207FA00E221522649E020004201FC0018006103FF80108112025104208 +7D2F:00003FF821083FF821083FF8020004201FC0018006103FF80108112025104208 +7D30:1000100021FC25244524F9241124212449FCFD24052401245524552481FC0104 +7D31:105010482048244047FEF880108020FC4944FD4405280128AA10AA2884440182 +7D32:10481148214825484548FBFE114821484948FD48057801005500550081FE0000 +7D33:10201020202025FC4524F924112421FC4924FD24052401FC5524542080200020 +7D34:10101010201025FE4512F914111021FC4944FD4405280128A910AA2882440482 +7D35:1040102020202BFE4A02F404100020004BFEFC20042000205420542080A00040 +7D36:10201020202025FC4420F820102023FE4820FC2004400048548455FE80820000 +7D37:10201020205024504488F9241212201049FCFC04040800885450542080100010 +7D38:10401020200025FE4420F8201020202049FCFC20042000205420542083FE0000 +7D39:100011FC204424444444F844109420884900FCFC048400845484548480FC0084 +7D3A:108810882088248847FEF888108820884888FCF8048800885488548880F80088 +7D3B:10201020202025FC4524F924112421244924FFFE042000505450548881040202 +7D3C:1090109020902BFC4894F09413FC22904A90FBFE08920092A91AA91482100410 +7D3D:10201010201025FE4502FA04108020884890FCA004C0008254825482807E0000 +7D3E:10201020205024884504FA12102020404988FC10042000445588541080600380 +7D3F:10201020204024404488F90413FE20024800FDFC050401045504550481FC0104 +7D40:10201020212425244524F92411FC20204820FD24052401245524552481FC0004 +7D41:1080108020FE25004620F920112C21744BA4FD24053401285522550280FE0000 +7D42:10401040207C28844988F250102020504888FB0608600010A808A8C080200010 +7D43:10201010201025FE4420F8201044208449F8FC1004200044548255FE80820000 +7D44:100011F8210825084508F9F8110821084908FDF805080108A908A90887FE0000 +7D45:100011FE210225024502F97A114A214A494AFD4A057A014A55025502810A0104 +7D46:10201020212424A444A8F82011FC20204820FC2007FE00205420542080200020 +7D47:10801080210029FC4A04F40411E421244924FD2405E401245404540480280010 +7D48:10201020204025FC4504F9041104210449FCFD04050401045504550481FC0104 +7D49:102010282024242045FEF8201070207048A8FCA8052402225420542080200020 +7D4A:102010202020242045FEF87010A820A84924FD24062200F85420542080200020 +7D4B:10201010201025FE4500F910111021104910FD2005280124AA44AAFE84420800 +7D4C:100011FC208424884450F820105020884B26FC2005FC00205420542083FE0000 +7D4D:10801088209C25704510FB101510211049FEFD100510011055105510817C0100 +7D4E:10401040209C25004640F84010BE21884A88FC88048800885488548880A80090 +7D4F:1020102021FC25244524F9FC1124212449FCFC2004240018543254CA83060002 +7D50:1020102020202BFE4820F02011FC20004800FDFC050401045504550481FC0104 +7D51:10201120212025FC4520FA20102023FE4870FCA804A801245524562280200020 +7D52:11041124212429244924F12415B4256C4924F92409240124A924AA2482040404 +7D53:1020102021FC24204420F82013FE20004820FC2005FC00205420542083FE0000 +7D54:100013FE202024204440F9FC110421044904FDFC050401045504550481FC0104 +7D55:100013FC204424444484F928121021FC4924FD2405FC01005502550280FE0000 +7D56:10401044224429484950F04017FE20904890FC900490009255125512820E0400 +7D57:1000100021FE25024502F97A114A214A494AFD4A057A0102550255FE81020000 +7D58:101010102210293E4922F044101020904890FB1009280128A928A94480440082 +7D59:100013FE2000240045FCF904110421FC4904FD0405FC01045400540083FE0000 +7D5A:100013FE204024404440F87C108420A44894FD04054400285408540883FE0000 +7D5B:108010F811082290206065986646A48825F02420244825FC2020212422A22040 +7D5C:08007F7C08243E2408447F540A8804201FC0018006103FF80108112025104208 +7D5D:1020102023FE24504488F90412FA20004BFEFC40048001FC5404540480280010 +7D5E:10401020202025FE4400F888110422024888FC88045000505420545080880306 +7D5F:10201020205024884504FA0211FC20204820FC2005FC00205420542083FE0000 +7D60:1020102021FE24404440F8FC108421844AFCFC84048400FC5484548480940088 +7D61:10401040207824884550F820105020884906FCF8048800885488548880F80088 +7D62:1080108021FC25044604F9E41124212449E4FD24052401E45504540480280010 +7D63:110410842088280049FEF088108820884888FBFE08880088A908A90882080408 +7D64:100013FE2050245045FCF954115421544954FD54058C01045504550481FC0104 +7D65:10901094209229124910F37E151021104910FD28052801285528554481440182 +7D66:10201020205024884504FA0211FC20004800FDFC050401045504550481FC0104 +7D67:100011FE21022502457AF9021102217A494AFD4A054A017A55025502810A0104 +7D68:10281024202428204BFEF020112421244924FBA809280110AA12AA2A84460082 +7D69:1090109020902A924994F098109021984A94FC9208900090A912A9128212040E +7D6A:100011FC210425244524F92411FC21244924FD54054C018C5504550481FC0104 +7D6B:040008201FF0102024487EFC020004201FC0018006103FF80108112025104208 +7D6C:1008103C21E024204420FBFE102020204820FDFC050401045504550481FC0104 +7D6D:111009207FFC0200FFFE08203218C4261FC0018006103FF80108112025104208 +7D6E:08007F7C114432440C44327CC20004201FC0018006103FF80108112025104208 +7D6F:10201010201025FE4420F824104420F84812FC22044401885410542880440182 +7D70:100011FE202024404488F90411FE20224820FC2005FE00205420542083FE0000 +7D71:1040102020202BFE4840F088110423FE4892FC900490009055125512820E0400 +7D72:102010202048248845F0F8201040208849FCFC24042000A85524562280A00040 +7D73:1080108020FC29084A90F060119826264820F9FC08200220ABFEA82080200020 +7D74:11041084208828004BFEF020102021FC4820FC2007FE00205420542080200020 +7D75:10201020205028884904F20210F820004800FBFE08200040A888A90483FE0102 +7D76:1040104020F825084610F9FC112421244924FDFC050001005502550280FE0000 +7D77:1080FBF010901990F0941154520C24241FC0018006103FF80108112025104208 +7D78:100011F82108250845F8F908110821F84908FD0805F80090549055128212040E +7D79:100010F82088248844F8F80011FC21044904FDFC0504010455FC550481140108 +7D7A:11841068203028C84B04F04013FE20A04920FBFC0D240124A934A92880200020 +7D7B:1080108020F825084610F9FC112421244924FDFC04500050549054928112020E +7D7C:1008103C21E024964448F830104821944824FC4C059400245444558480280010 +7D7D:100010FC208424844484F88410FC20004800FDFE050201025502550281FE0102 +7D7E:10281024202428204BFEF220122422244BA4FAA80AA80290AA92ADAA84460882 +7D7F:102810242024242045FEF820112020B248B4FC6804A801245622542080A00040 +7D80:1020102023FE24204420F9FC1124212449FCFC20047000A85524562280200020 +7D81:2100211E411247D29114E11427D841149112F7D20112111AA914A21082100410 +7D82:1040102023FE24004400F9FC110421044904FDFC04500050549054928112020E +7D83:1020112420A424A84420F9FC1104210449FCFD04050401FC5504550481140108 +7D84:1040102023FE2A024C04F1F8100020004BFEFC900490009055125512820E0400 +7D85:100011FC200424FC4404F9FC100023FE4A02FDF8048800885450542080D80306 +7D86:100013FE2020242045FCF924112421FC4924FD2405FC012054A0544080B0030E +7D87:100013FE2050245045FCF95411542154498CFD04050401FC5504550481FC0104 +7D88:11081088209025FC4424F82411FC21204920FDFE046200A2552A562484200020 +7D89:101C11E02020242047FEF8A81124222249F8FC88049000BE5502550282140408 +7D8A:1020102020202BFE4820F020112421244924FAAA08200050A850A88881040202 +7D8B:1040102023FE2A024C44F04013FE20404890F89009100120AA24AA4284FE0842 +7D8C:10001050204824844524F820105020884906FEF8048800885488548880F80088 +7D8D:1020102023FE28204820F3FE1202240449F8FC10042003FE5420542080A00040 +7D8E:1000100623B828884888F108113E23884888FA880A88013EA900AA80847E0800 +7D8F:1008103C23C028444A24F128110020404BFEF88809080390A860A85081880604 +7D90:110410842088241045FCF9041104210449FCFC500450009054925512820E0400 +7D91:100013FE22222A224A22F3FE122222624A72FAAA0B220222AA22AA0283FE0202 +7D92:1008103C21C024044544F8A8100021F84810FC2007FE00205420542080A00040 +7D93:100011FE200028924924F248112420924800FDFE042000205420542083FE0000 +7D94:1000100CFEF02820444482F87C100024FEFE201240507C540492051228501020 +7D95:1020102020202BFE4820F020102021FC4840F82008A40282AA8AAA8A84780000 +7D96:1004100E23B828884888F128112E23A848A8FAA80AA8013EA900AA80847E0800 +7D97:100013FE22022A524A8AF306120222FA4A8AFA8A0A8A02FAAA8AAA02820A0204 +7D98:1040104020FC24884550F82010D8232648F8FC2004F8002057FE542080200020 +7D99:10101110211025924554F91011FE21104938FD54059201105510551081FE0000 +7D9A:1020102023FE282049FCF00013FE22024C04F89008900090A890A9128112020E +7D9B:100013FC204429444944F284109421084A40F82008A40282AA8AAA8A84780000 +7D9C:1040102023FE2A024800F1FC100020004BFEF82009280124AA22AC2280A00040 +7D9D:10881088208828884BDEF0881088219C49DCFAAA0AAA04C8A888A88880880088 +7D9E:1008103C21E028204BFEF0A810A820A84BFEFCA804A803FE5420542081FC0000 +7D9F:1040102023FC2A044A04F3FC120022284A24FBFE0A200250AA50AC8885040A02 +7DA0:108010F82088290849F0F010101023FE4820FA22097400A8A924AA2280A00040 +7DA1:1040102023FE24004400F9FC110421044904FDFC042000A85524562280A00040 +7DA2:100011FC212425244574F92411FC21044974FD54055401745504560482140408 +7DA3:1020112420A8242045FCF84013FE20884904FEFA0488008854A854928082007E +7DA4:7E7C12442A484444BE44225422483E00044008801F0002103FF8010815202210 +7DA5:100011FC2124292449FCF124112421FC4800F8000BFE0088A888A88881080208 +7DA6:08207FFC08200FE008200FE00820FFFE14502888DF0602103FF8010815202210 +7DA7:1040102023FE240045FCF90411FC200049FCFC08041003FE5420542080A00040 +7DA8:1088108823FE24884488F8F81088208848F8FC88048803FE5400548881040202 +7DA9:1040102023FE2A024D04F10011DE22524A52FB520C9A0094A910A9128212040E +7DAA:1020102023FE242045FCF82013FE200049FCFD0405FC010455FC550481140108 +7DAB:10481044205E25E04428F812106A21964848FC5E05E0002454285412806A0186 +7DAC:101C13E020842A444948F11017FE24024800FBF809080110A8A0A84081B0060E +7DAD:10A01090208025FE4510FB1015FC21104910FDFC05100110551055FE81000100 +7DAE:104008403E7E228823503E2020584186844008801F0002103FF8010815202210 +7DAF:1080108021FC25044684F8F4114420444BFCFC440554015455F4540480280010 +7DB0:1040102023FE2A024C04F1F81108210849F8FD00050001FC5504550481FC0104 +7DB1:100013FE22022A8A4A52F3FE122222224AAAFAAA0AAA02FAAA02AA02820A0204 +7DB2:100011FE2102218A4952F9FE1122211221FE4942F542017A55025502550A8104 +7DB3:100013DE22522A524A52F3DE125222524A52FBDE0A520252AA52AA52855208A6 +7DB4:100013DE2042294A4884F14A125224204800FBDE08520152A894A94882540422 +7DB5:1008103C23C028444A24F128110020204BFEF87008A800A8A924AA2284200020 +7DB6:100011FC2124292449FCF124112421FC4820FBFE087000A8A924AA2280200020 +7DB7:1040102021FE24004488F888115422224800FC2005FE00205420542080200020 +7DB8:10201020205024884504FAFA100021FC4954FD5405FC0154555455548104010C +7DB9:1088108820E8252C452AFAA8104820A0491EFE0004FC00845484548480FC0084 +7DBA:1020102021FC24504488F90413FE200849E8FD28052801E85528540880280010 +7DBB:1040102023FE2A024C04F00013FE20204820F920093C0120AAA0AA60843E0800 +7DBC:1040108021FC25244524F9FC1124214449FCFC90051003FE5410541080100010 +7DBD:10201020203E242045FCF90411FC210449FCFD24042003FE5420542080200020 +7DBE:1020102021FC28204820F3FE108821444A42F8F809880250A820A85081880606 +7DBF:1020104021FC290449FCF10411FC20204820FBFE0A220222AA2AAA2480200020 +7DC0:1020102023FE242045FCF82413FE202449FCFC4007FE008455C8543080CC0302 +7DC1:1020102023FE242045FCF82413FE202449FCFC200520013EA920AAA0827E0400 +7DC2:1020112221222A244850F088130420224820F92409240228A850A88881040602 +7DC3:10881088208824884554FA22144220204820FD20053C0120AAA0AA60843E0800 +7DC4:100011FC2104250445FCF904110421FC4800FD1205D40118551055528192010E +7DC5:20002FC044BC44A494A4E7A424A444A897A8F4A8049015D0AEA8A0A880C40082 +7DC6:100011FC210425FC4504F9FC1080208049FEFE4A044A0092A922AA4280940108 +7DC7:1092109221242A484924F0921092200049FEFD22052201FE5522552281FE0102 +7DC8:1020102021FC24204420FBFE1088205049FCFC20042003FE5420542080200020 +7DC9:100013FE202028204BFEF222122223324AAAFAAA0B760266AA22AA22822A0204 +7DCA:7EFC48447E4442287E1048287EC604201FC0018006103FF80108112025104208 +7DCB:1090109020902B9E4890F0901090239C4890F8900890039EA890A89080900090 +7DCC:101C11E0202028204BFEF0A8112422424840FBFE08880108A8D0A83080480184 +7DCD:101C13E022202BFE4A20F292130A220649FCFD04050401FC5504550481FC0104 +7DCE:1014101220102BFE4810F01013D222524A52FA540BD4000CA86AAB8A81160022 +7DCF:10901090210829484A44F492110823FC4844F82008A40282AA8AAA8A84780000 +7DD0:4000400C7EF080207C4444F864105424FEFE4412A4509454FE92051228501020 +7DD1:100011F82008280849F8F008100823FE4820FA22097400A8A924AA2280A00040 +7DD2:1020102221FA24244428FBFE1020204048FCFD84068400FC5484548480FC0084 +7DD3:1088108823FE288848A8F02011FC21244924F9240BFE0020A850A88881040202 +7DD4:1020112420A428A84820F3FE120222024AFAFA8A0A8A028AAAFAAA02820A0204 +7DD5:1040102023FE24884450F82010D823064888FCF80488008854F8550881080208 +7DD6:1020102221FA24244428FBFE1024204248FCFD84068400FC5484548480FC0084 +7DD7:11001100213C29244BA4F124113C23A44B64FD24093C0124A924A924813C0124 +7DD8:1008100C200A2BFE4A08F20812E8220A4A0AFAEC0AAC02A8AAEAAA1A82260442 +7DD9:1088108823FE248844F8F82011FC21244924FDFC042003FE5420542080200020 +7DDA:1040108021FC290449FCF10411FC20204832FBB408A80128A924AA2484A20040 +7DDB:100013FE2020244045FCF954115421544954FD2C042003FE5450548881040202 +7DDC:1000200C7CF044207C4444F87C10102410FEFE12925092549292971210501020 +7DDD:100011F82108290849F8F00017FE210849F8F90809F80108A93EAFC880080008 +7DDE:1080133822282A284BA8F2461200227C4BA4FA240A2803A8AE10AA2882440282 +7DDF:1008103C21E028204BFEF02011FC212449FCFD2405FC002055FC542083FE0000 +7DE0:1080104023FC28004908F09017FE24424844FBFC0A440244AA54AA4880400040 +7DE1:100011FC210425FC4510F9FE1110214A4986FC0005FC010455FC550481FC0104 +7DE2:1088108823FE24884488F80011FC21244924FD2405FC01245524552481FC0104 +7DE3:108010FC210429F84808F3FE104020A24B34F85808940334A852A89083500020 +7DE4:1048114821482BFE4948F1481178210049FEF8200BFE0070A8A8A92486220020 +7DE5:1100117C21442A444A44F67C1A1022104AFEFA380A540254AA94AB1282100210 +7DE6:100011FC2124252445FCF924112421FC4820FC10045401425542554A82380000 +7DE7:1088104820502BFE4850F05011FC21544954FD8C050401FC5504550481FC0104 +7DE8:1040102021FE25024502F9FE1100210049FEFDAA05AA02FEAAAAAAAA84A20086 +7DE9:101E13E0204425244488F9FC104020404BFEFC8004FC01445528561080680186 +7DEA:1100117E211025104590F95E1322252A4926FD420552010C55045504817E0100 +7DEB:1080108020FC29544AD4F0B4112C22444894F908084000A4AAAAAA8A84780000 +7DEC:100017FE204028804BFCF294129422F44A94FA940AF40294AA94AA9483FC0204 +7DED:100013FE22222BFE4A22F3FE100021FC4904FDFC050401FC5504550481140108 +7DEE:1100110021FE2A004DFCF10411FC210449FCFC8004FC01085690546081980606 +7DEF:1040104021FC28844BFEF00011FC210449FCF8200BFE0020AA20ABFE80200020 +7DF0:104010A021102A084DF6F00013C422544A54FBD40A540254ABD4AA44825402C8 +7DF1:1100117821082A084AFEF6401A40227C4A90FA100AFE0210AA28AA2882440282 +7DF2:1010101023902A904A94F3B212B222D24B90FA940A840388AA90A82080400180 +7DF3:010000803FFE22003FBC22142F9422143FA4220C24202FC041085FFC88881184 +7DF4:1020102023FE242045FCF92411AC21744924FDFC0420007054A8552482220020 +7DF5:1000108822522A224A52F28A120223FE4888F9440A7A0088A950A82080D80306 +7DF6:110011FE21102A104AFEF292169222FE4A92FA920AFE0290AA50AA2082580286 +7DF7:100013FE2222242045FEF82011FC212449FCFD2405FC002057FE542080200020 +7DF8:100013FE2050245045FCF9541154215449FCFC20042001FC5420542083FE0000 +7DF9:100011FC2104290449FCF104110421FC4800FBFE08200120A93CA92082A0047E +7DFA:100010FC2084248444F4F894109421FE4902FD7A054A014A557A5502810A0104 +7DFB:2008200847C84210921EE4A427D441149114F7D401141108A9C8AE1484140022 +7DFC:100010F82088248844F8F888108820F84800FDFC055401545554555483FE0000 +7DFD:10201020203E24204420F9FC110421FC4904FDFC050401FC5400548881040202 +7DFE:100011FE2100257C4554F954117C21544954FD7C05100110557C5610821004FE +7DFF:1040109021082BFC4804F00011F821084908F9F808400024AAA2AA8A84880078 +7E00:100013DE22422A424A42F3DE1200223E4BD2FA120A1403D4AA08AA1482240242 +7E01:100011FC200428FC4804F3FE104020A24B34F85808940334A852A89083500020 +7E02:10881048205025FC4504F904110421FC4820FC10045401425542554A82380000 +7E03:100013FE20222520453CF92012FE240049FCFD0405FC010455FC550481140108 +7E04:100011FC212425FC4524F9FC102021FC4924FDFC052401FC542054228022001E +7E05:100C100A20082BFE4A08F3F8124A224A4BEAFAAC0AAC024CAAAAAB0A82160422 +7E06:2100213C4100410091BCE5642524453C9524F1240124113CA924A100817E0100 +7E07:1040102023FE2A024C04F1FC100021FC4904FDFC050401FC5504540083FE0000 +7E08:08202AA44D28145022887FFE420284241FC0018006103FF80108112025104208 +7E09:100013FC20902A944998F09017FE200049F8FD08050801F85508550881F80108 +7E0A:11041084208828004BFEF000108821044A02F9FC09540154A954A95487FE0000 +7E0B:10101220217C25444444F87C13402140497CFD440544017CA944AA80847E0000 +7E0C:124411242128247E4410FB5411542154497CFD1405200120A940AA80847E0000 +7E0D:1020101021FE24844448F9FE110222244810FDFE0440007C5444548480940108 +7E0E:100011FC210425E44524FBFE120221FC4904FDFC050401FC5504550481140108 +7E0F:08783E48228E2A007EF822482A3046CC844008801F0002103FF8010815202210 +7E10:1080108021FC2A444954F1F4108421284A90F9FC0A440554A9F4A88481280210 +7E11:10881050200025FE4450F9FC105423FE4854FDFC045000D85554565280500050 +7E12:10841044204825FE4420F8FC102021FE4840FC8004FE01105610541081FE0000 +7E13:100011FE21102520457CF944117C2144497CFD1005100154A952AA9282500420 +7E14:11F810882070298C4800F3DE1252218C4A52F8200BFE0070A8A8A92486220020 +7E15:100010F820A824A844D8F88810F820004800FDFC055401545554555483FE0000 +7E16:1040102023FE2A024C24F1FC102021FC4820FBFE082001FCA904A90481FC0104 +7E17:1040102023FE280049FCF10417FE210449FCFC5204940188568854A480C20080 +7E18:101E13E0212228944840F08811F0202048C4F9FE08220020ABFEA85080880306 +7E19:1088108821FE24884400F9FE1088208848F8FC8804F80088549E55E880080008 +7E1A:101E11E0202225124494F880102021CE4902FD0205CE01025502550281FE0102 +7E1B:1028102423FE242045FCF92411FC212449FCFD24040803FE5488544880480018 +7E1C:100010FC2084248444FCF80011FE210249FEFD0205FE010255FE544880840102 +7E1D:1020102023FE242045FCF90411FC210449FCFD0405FC010457FE548881040202 +7E1E:1040102023FC280049F8F10811F820004BFCFA040AF40294AAF4AA0482140208 +7E1F:100013FE220022FC4A00FBFE12A822904AC8FA860A0813FEAA88A44884080818 +7E20:1000FE7810487C480048FE8682007CFC2044444478281428FE10542892443182 +7E21:1040102023FE2A424820F1FC108820504BFEFC20042001FC5420542080200020 +7E22:0020792448A849FC48407BFE488849444A8A78F0482449FC482049244A229860 +7E23:00007C0C44F07C2044447CF844107C2444FEFE12105054545292931250502020 +7E24:1020102023FE242045FCF82013FE20404888FDF0042403FE5422552482A20040 +7E25:1020102023FE242045FCF84013FE20884934FEE2042001FC547054AC83220020 +7E26:108010A2211225144680F8FE110821084B28FD2E0528012855285558814E0180 +7E27:1110111E21222A544A08F6941AE222884A88FABE0A8802ACAA2AAA4A82280210 +7E28:100011FC210425FC4504F9FC1020212448A8FC2007FE0090549055128212040E +7E29:1100111023DC2A544D54F288110822F44C02F8000BFC0040A950AA4885440080 +7E2A:100011FC212425FC4524F9FC10A820A84BFEFCA804A801FCA820ABFE80200020 +7E2B:1020147C228429484830F0CE1610227C4A10FA7C0A1002FEAA10AA1085FE0800 +7E2C:100C100A200823FE4A08FA48126A224A4BFAFA4C0A4C12ECAB5AA44A84D60822 +7E2D:1040102023FE28004954F124115421FC4820FBFE0A420292AAFAAA0A82020206 +7E2E:1020101023FE2A024880F0FE111023204D7CF9440944017CA944A944817C0144 +7E2F:1040102023FE2A024800F1FC102021FC4924FDFC052401FC5400548881040202 +7E30:11081108222824AE44A8F928137E25004908FD28052E01285558554881860100 +7E31:1124112422242C244954F14A129226104A10FA500A5C0250AA50AAB0829E0300 +7E32:100011FC212425FC4524F9FC1040208849F0FC20044403FE5422552482220060 +7E33:102013FE202025FC4524F9FC112421FC4822FDFE040801FE5508548880280010 +7E34:102013FE204820F04820FBFE1242209049F8F828092011FCAA20A7FE80200020 +7E35:100011F8210829F84908F1F8100023FC4A94FBFC080001F8A890A86081980606 +7E36:08207E2008F8FF2814287F6A082AFF560A8204200FC002103FF8010815202210 +7E37:102011FC21242BFE4924F1FC102021FC4924FDFC044003FE548855D08070038C +7E38:1088108823FE24884400F9FC110421FC4904FDFC042003FE5450548881040202 +7E39:100013FE205025FC4554F95411FC200049FCFC0007FE002054A8552482A20040 +7E3A:1010101022FE2510457CF854107C2354497CFD1005FE0110A910AA90847E0000 +7E3B:010000803FFE22102F7C26382B543292210827F0206023842FFE404245488884 +7E3C:12101110211027BE4A40FA0013BE228A4A88FAA80AAE12A8ACA8A5A8885E1080 +7E3D:1020104021FC2524457CF98C115421244954FDFC0420001055545542814A0238 +7E3E:102013FE202025FC4420FBFE100021FC4904FDFC050401FC550455FC80880104 +7E3F:1040108821FC29084A52F3FE105021884E26F8C00B100064AB88A83080C00700 +7E40:1020122223FE28904888F1FE1310251049FEFD10051001FE5510551081FE0100 +7E41:20203F20403EBE482AA8FF284A107F28044608801F0002103FF8010815202210 +7E42:1040102023FE28204848F2F21124225248F8FC08042003FE5420542080200020 +7E43:1020122222222BFE4800F3DE125222524BDEFA520A5203DEAA52AA52855A08A4 +7E44:7F7848485F4C64805F784A4851307F4C044008801F0002103FF8010815202210 +7E45:112412482124280049FCF12411FC212449FCF8200BFE0070A8A8A92486220020 +7E46:100013DE20422A52494AF252102820C44B12F86009880032A9C4A81880600380 +7E47:00000E0CF0F02220924444F820103C2450FE1012FE501054549255125C506420 +7E48:10081388209028A448BEF38A1208223E4A2AFBAA08AA00BEA888A88A82BE0102 +7E49:11FC110421FC250445FCF90411FC20504954FCD804D80154565254908092010E +7E4A:1088108C23EA28884888F7FE1008214A494AFD5A0B6C014CA94AA9EA87160022 +7E4B:1078FE4810487C8654787C485430FECE144008801F0002103FF8010815202210 +7E4C:1040108023FC2A944A64F29413FC20904908FA840CFA0108AA90A86081980606 +7E4D:1020102021FC242447FEF82411FC202049ACFD74052401FCA964AAB4832C0424 +7E4E:1110111421D22A504A7EF550109022A84928F9440A440482A808AAA482520452 +7E4F:100013DE22522BDE4A10F25211CE20004888FBFE08880088ABFEA88881040202 +7E50:1020102023FE282049FCF12411FC212449FCF8220BFE0042A824AAA2828A0478 +7E51:101811E020402BFE4888F174125220704800FDFC05040174555455748104010C +7E52:1104108820002BFE4A22F2AA127222224BFEF80009FC0104A9FCA90481FC0104 +7E53:100011F8210821F84908F9F8100027FE4A40FBDC0A5413D4AA68A7C880540062 +7E54:1110109423D228124A50F19017FE20104BD2FA520A5403D4AA4AAA4A83D60022 +7E55:1088105023FE282049FCF02013FE212448A8FBFE080001FCA904A90481FC0104 +7E56:2288228847C84290929EEFD4202447D49454F7D4045417C8AC48A454846404C2 +7E57:1020112420A82BFE48A8F124122221044904F9DE0A440554A89EA90482040404 +7E58:100013FC204828304BFEF052109423504820FBFE0A52028AAB76AA5282720206 +7E59:103C13E0212428A84BFEF0A81124220249FCFD24052401FC5524552481FC0104 +7E5A:1020102021FC24204554F888110422FA4888FCF8048800F8542054A881240060 +7E5B:081008107F1E08103E7E0842FF7E22427C7E085212107F7E08102A1049101810 +7E5C:1088105023FE245045FCF954118C21744904FDFC040803FE5508548880A80010 +7E5D:13DE125223DE2A524BDEF20212F222924AF2FA920AF20292AA92AB3282020206 +7E5E:1020102021FC28204BFEF108139C21084988FE3E080003FEA890A8908112020E +7E5F:100013DE22522A524BDEF00011FC212449FCFD2405FC002057FE542080200020 +7E60:01002488242443E4000024241212A0A0A4A41C1C04201FC002103FF809201310 +7E61:204023F8404847FE9048E3F820404554975CF44407FC1444AF5CA55485540844 +7E62:102011FC212425FC4420FBFE100021FC4904FDFC050401FC550455FC80880104 +7E63:102011FC20242BFE4824F1FC102023FE4800FDFC052401FC552455FC800003FE +7E64:0820FFFE08201FF01490125011301FF00400FFFE12502F88C2261FF009481320 +7E65:102013FE202029FC4800F1FC110421FC4888FBFE080001FCA904A90481FC0104 +7E66:2000277C41444144917CE7102410447C9454F7540154117CA910A1148AFE0402 +7E67:100011FC20202BFE4A22F1AC102021AC4800FDFC040003FE5440548881FC0084 +7E68:10101210217C241044FEF844132821FE4910FD7C051001FE5510551082FE0400 +7E69:100011FC2154255445DCF85011DC21544954FDDC0554015455DC55508052003E +7E6A:10201050208829744A02F1FC112421AC4924FDFC040000F8548854F8808800F8 +7E6B:0878FFC808483E862B783E482A28FF9049287F4604201FC002103FF809201310 +7E6C:1020102023FE29244924F2AA17FE200049FCFD04057401545574550481FC0104 +7E6D:0820FFFE082000007FFC4924492455FC5DAC49FC55245D3C41CC6B0441144008 +7E6E:100013FE200025FC4524F9FC112423FE4800FDFC052401FC552455FC800003FE +7E6F:100013FC22942A944BFCF00017FE20004BFCFA040BFC00A2A914AB088D440182 +7E70:11FC1104210429FC4800F3DE125222524BDEF8200BFE0070A8A8A92486220020 +7E71:108813FE208829004BFCF55410D423244854F8940B480020A8A4AA8A828A0478 +7E72:110011DE224A2C8A4BEAF2B612A423F44ABEFAA40BE402BEAAA4AAA482240464 +7E73:2108220847C8445097DEE46427D442149114F7D4021413C8AA48A454855408A2 +7E74:3E1022FE3E4420287EFEA2103EFC2210045008801F0002103FF8010815202210 +7E75:102017FE20002BFE4A02F2FA128A23FE4800F9FC090401FCA904A9FC800007FE +7E76:1040102021FC24884450FBFE100021FC4904FDFC050401FCA820AA94828A047A +7E77:109013FC229423FC4A94FBFC100023FC4A00FAF80A0013FEAD20A51485480986 +7E78:10881448225028FC4820F050169422384A50FA980A340254AA90AA2085FE0800 +7E79:100011FC215425FC4420F9FC102023FE4888FC5005FC002057FE542080200020 +7E7A:1210121023D02C5E48A4F3D4105420544BC8F848085407E2A800AAA482520452 +7E7B:100011FC20202BFE4A22F1AC102021AC4800FBFE082001FCA954A9548154010C +7E7C:1044128422EA2A4E4AA4F2EE122223FE4A44FA840AEA024EAAA4AAEE822203FE +7E7D:1040102023FE2A0249FCF148125021FC4B04F9FC090401FCA904A9FC80880104 +7E7E:1010107C2254257C4510F8FE1000237C4944FD7C0540017C5544557C8280047E +7E7F:100813E822882BEE4A28F3F4128223E24800F9FC09540154A954A95487FE0000 +7E80:112811AA216C2A284AFEF64416282AFE4A10FA7C0A1002FEAA10AA2882440282 +7E81:101C11E020202BFE4820F1FC11AC217449FCFC2005FC002057FE54008154022A +7E82:20403E7E4890BFF8248822483FF80200FFFE092012502F88C2261FF009481320 +7E83:2080204047FC411090A4EF58255445529B58F000020813F8AA08A3F882080408 +7E84:108813FE208828204A3CF144103820D64B38F910097C0110A97EA910831004FE +7E85:244424E448A84AAA9EEEE4A42AAA4EEE9242F0400FFE10E0A950A2488C460040 +7E86:11FC112421AC252445FCF82011FC20204BFEFD54062A002055FC542083FE0000 +7E87:920054FEFE10302054FC9284208444FC788410FC2484FE8410FC544892843102 +7E88:1100113E21082FD0493EF12213A2203E4822FBBE0AA202A2AABEAB8082940022 +7E89:108811DC20882BDE4888F154122221FC4904FDFC050401FC550455FC80880104 +7E8A:1020101021FE2528457CF92811FE2110497CFD54057C0154A97CAA0082440482 +7E8B:13FC104021F8290849F8F10817FE24424AA4FA8A0C7A0080A9F8AA888070038E +7E8C:102013FE202029FC4800F3FE125223FE4904FDFC050401FC550455FC80880104 +7E8D:1FF011101FF011103FF82AA83EF82AA83EF808801F0002103FF8010815202210 +7E8E:1088108C23EA28884888F3FE1148236A494AFB6A094C036CA94AA96A87960022 +7E8F:202027FE440045FC9524E5FC252445FC9420F5FC042017FEAD24AAFA882013FE +7E90:1200113E27C828104ABEF262142220BE4AA2FABE09220122AABEAA8084140022 +7E91:1040107C20402BFC4A44F3F0124422FC4AA8FAF80AA802F8AA00ADFC85540BFE +7E92:13FE120022FE22924AFEFA9212FE22104AFEFA100BFE12AAAA10A2FE841009FE +7E93:13DE125223DE2A524BDEF25213DE218C4A52F8400FFE0088A990A86080D80304 +7E94:11F0121027FC2A044BFCF22413B8222249FEFA100FFC0244ABFCA8D0814A063E +7E95:102013FE200029DC4954F1DC108823FE4888FBFE088807FEA894A98886A400C2 +7E96:1148114C22AA28084FFEF1481368214A4B6AF94C0B6C0148A96AAB9A80260042 +7E97:122213FE209029FE4B10F5FE111021FE4910F9FE090003FEAA8AAB7682520276 +7E98:252827BE494847BE9318E5AA294643FC9204F3FC020413FCAA04A3FC81080204 +7E99:200023FE4252425293FEE1082154425E97B4F11E025417DEA814A554855E0010 +7E9A:13DE100023DE2A524B5AF252102023FE4A50FBFE0A5203FEAA92AADC829204CE +7E9B:0100FFFE01001FF01210FFFE10901FF0001C3EE022242AF82A24FFFE2A5459B2 +7E9C:1790151E27A82C844FBEF52A17BE20004BF8FA080BF80208ABF8A8A08124061C +7E9D:11FC112421FC29244BFEF2AA13FE22AA4BFEF88809F00064ABFEA92482220060 +7E9E:444444E44A0A4EEEA404AAEACE0E40E04AAA8AEAA040E0240522A50AA90800F8 +7E9F:10001000200024004400F800100020004000FC00400000001C00E00040000000 +7EA0:10041004208424844484F88410842084408CFCB440C400841C04E00440040004 +7EA1:100011FC202024204420F820102023FE4020FC20402000201C20E02040A00040 +7EA2:1000100021FC24204420F820102020204020FC20402000201C20E02043FE0000 +7EA3:100810082008240845FEF808100820084088FC48404800081C08E00840280010 +7EA4:1008103C21E024204420F820102023FE4020FC20402000201C20E02040200020 +7EA5:10401040208024FE4500FA0010FC20084010FC20404000801D02E10240FE0000 +7EA6:108010802080210445FEFA04140420844044FC24002400041C04E04440280010 +7EA7:100013FC208420884888F890109C20844144F944412801281A10E22844440182 +7EA8:104010402040244045F8F848104820484148FCC8404800A81CAAE10A42060402 +7EA9:10201010201025FE4500F900110021004100FD00410001001D00E20042000400 +7EAA:1000100023F820084808F008100823F84208FA00420002021A02E20241FE0000 +7EAB:1000100023FC20444844FA44124422444484F884408401041904E20444280810 +7EAC:10201020202025FE4420F82010FC20204020FDFE402200221C2AE02440200020 +7EAD:1000100021FC24004400F80013FE20204020FC40404000881D04E3FE41020000 +7EAE:10401040204020404BFEF840108020904090F920412002481A44E48441FE0082 +7EAF:10401040204023FC4840FA48124822484248FBF8404800401842E042403E0000 +7EB0:10101110211025124512F91411D821104110FD10411001121D52E192410E0000 +7EB1:10401040204021484944FA42124224484048F848401000101820E04041800600 +7EB2:100013FC220422044A94FA54122422244254FA54429403041A04E20442140208 +7EB3:10201020202020204BFEF222122222224252FA4A428A03021A02E202420A0204 +7EB4:1008103C21E024204420F820102023FE4020FC20402000201C20E02041FC0000 +7EB5:11101110211021104910F910111021104110FAA8426802281C44E44448841102 +7EB6:1040104020A020A04910FA08140621104120F940418001001904E10440FC0000 +7EB7:10101090209020884908F904120425FA4088F888408800881908E10842280410 +7EB8:1008103C23E022204A20FA20122023FE4220FA10421002121A0AE28A43060202 +7EB9:10801040204027FC4910F110111021104110F8A040A0004018A0E11042080C06 +7EBA:10401020202027FE4480F880108020FC4084FC84408400841D04E10442280410 +7EBB:104010202020240045FEF902120420004000FC00400000001C00E1FE40000000 +7EBC:100411E4202424244424F9E4110421044104FDE4402400241C24E02441440084 +7EBD:100011FC204424444444F844104421FC4084FC84408400841C84E08447FE0000 +7EBE:100011F8200824504420F81013FE20224024FC20402000201C20E02040A00040 +7EBF:105010482040245C45E0F840105E23E04044FC48403000221C52E08A43060002 +7EC0:110811082108250847FEF908110821084108FDF8410801081D08E10841F80108 +7EC1:10481248224822484A48F7FE124822484248FA48427802001A00E20043FE0000 +7EC2:10501048204820404BFEF880108020FC4144F944412801281A10E22844440182 +7EC3:1040104027FC20804880FBE01120222043FCF820412801241A22E42240A00040 +7EC4:100011F8210821084908F9F8110821084108F9F8410801081908E10847FE0000 +7EC5:10201020202025FC4524F924112421FC4124FD24412401FC1D24E02040200020 +7EC6:1000100021FC25244524F9241124212441FCFD24412401241D24E12441FC0104 +7EC7:1000100021FC25044504F9041104210441FCFD04400000901C88E10442020402 +7EC8:1080108020F821084B10FCA0104020A04318FC0640C000201810E18040600010 +7EC9:1080108020F821084A10FC2013FC20044004F80441FC00041804E00443FC0004 +7ECA:10201020212424A444A8F82011FC20204020FC2043FE00201C20E02040200020 +7ECB:10901090209023FC4894F89413FC22904290FBFE40920092191AE11442100410 +7ECC:10201020212425244524F92411FC20204020FD24412401241D24E12441FC0004 +7ECD:100013FC208420844884F904111422084400F9FC410401041904E10441FC0104 +7ECE:100013FC210420884850F82010D823264020F9FC402000201BFEE02040200020 +7ECF:100011FC200824104430F848108423024000FDFC402000201C20E02043FE0000 +7ED0:10201020204024884504FBFE1002200041FCFD04410401041D04E10441FC0104 +7ED1:2100211E211247D25114F11427D821144112F7D24112011A3114C21002100410 +7ED2:10281024202420204BFEF820112421244124FBA8412801101A12E22A44460082 +7ED3:10201020202027FE4420F82011FC20004000FDFC410401041D04E10441FC0104 +7ED4:1040104027FC20A04910FA081DF6200047FCF880410003F81808E00840500020 +7ED5:1080108020BC23C04850F82410D4230C4000FBFE409000901912E112420E0400 +7ED6:100011FE202024404488F90411FE20224020FC2041FE00201C20E02043FE0000 +7ED7:10801080213C22004C80F080117E23084508F908410801081908E10841280110 +7ED8:1040104020A021104A08F40611F020004000FBFC404000801910E20847FC0204 +7ED9:1040104020A021104A08F40613F820004000FBF8420802081A08E20843F80208 +7EDA:10801080210021FC4A04F40413E422244224FBE4422402241BE4E00440280010 +7EDB:1080108020FC21084A90F860119826264020F9FC402002201BFEE02040200020 +7EDC:1080108020F821084B10FCA0104020A04118FA0645F801081908E10841F80108 +7EDD:1080108020F821084A10F5FC112421244124F9FC410001001902E10240FE0000 +7EDE:10401020202025FE4400F888110422024088FC88405000501C20E05040880306 +7EDF:10401020202023FE4840F888110423FE4092F890409000901912E112420E0400 +7EE0:100013FE2020242045FCF924112421FC4124FD2441FC01201CA0E04040B0030E +7EE1:1020112420A424A84420F9FC1104210441FCFD04410401FC1D04E10441140108 +7EE2:100011F82108210849F8F80013FC22044204FBFC420402041BFCE20442140208 +7EE3:103813C0204020404FFCF9501248244643F0F9104120017C1A04E20444280810 +7EE4:10001050204824844524F820105020884106FCF8408800881C88E08840F80088 +7EE5:1008103C23C020444A24F9281100204043FEF888410803901860E05041880604 +7EE6:1080108021F823084C90F060119826464040FBFC404002481A44E44441400080 +7EE7:10201220222023244AA8F22013FC22204270FAA8432402201A20E22043FE0000 +7EE8:11081088209023FC4824F82413FC22204220FBFE406200A2192AE22444200020 +7EE9:1040104027FC20404BF8F04017FE200043F8FA08424802481A48E0A041100608 +7EEA:1040104423F420484850F7FE1040208041F8FB08450801F81908E10841F80108 +7EEB:1020102021FC20204820FBFE108821444242F8F8418802501820E05041880606 +7EEC:1088108823FE248844A8F82011FC21244124FD2443FE00201C50E08841040202 +7EED:1020102021FC24204420FBFE100220944050FD10409003FE1C28E04440820302 +7EEE:1020102021FC24504488F90413FE200841E8FD28412801E81D28E00840280010 +7EEF:109010902090279E4890F8901090239C4090F8904090079E1890E09040900090 +7EF0:10401040207E20404BFCFA0413FC220443FCFA44404007FE1840E04040400040 +7EF1:1020112420A420A84820FBFE1202220242FAFA8A428A028A1AFAE202420A0204 +7EF2:100011FC2104250445FCF904110421FC4000FD1241D401181D10E1524192010E +7EF3:100011F02110211049F0F84013F822484248FBF8424802481BFAE0424042003E +7EF4:10A01090208025FE4510FB1015FC21104110FDFC411001101D10E1FE41000100 +7EF5:1020104021FC210449FCF10411FC20204020FBFE422202221A2AE22440200020 +7EF6:101C13E0208422444948F91017FE24024000FBF84108011018A0E04041B0060E +7EF7:200027BC24A444A454A4F7BC24A424A444A4F7BC44A404A434A4C4A40AA4114C +7EF8:100013FE222222224AFAFA22122223FE4202FAFA428A028A1AFAE202420A0404 +7EF9:1080108020FE25024682F8F21142204243FAFC42415201521DF2E00240140008 +7EFA:1088108821EC212A4A28F5481088217E4600F80041FC01041904E10441FC0104 +7EFB:10401248215020404BF8F88017FC21104208FDF4491201101950E124410400FC +7EFC:1040102023FE22024800F9FC1000200043FEF820412801241A22E42240A00040 +7EFD:1040102023FE22024C04F80013FE20204020F920413C01201AA0E260443E0800 +7EFE:1040102023FE22024C04F9F81108210841F8F900410001FC1904E10441FC0104 +7EFF:100011F82008200849F8F808100823FE4020FA22417400A81924E22240A00040 +7F00:200027BC208442945108F29424A428404000F7BC40A402A43128C29004A80846 +7F01:11241124224824904A48F9241124200043FCFA44424403FC1A44E24443FC0204 +7F02:1088108823FE248844F8F82011FC21244124FDFC402003FE1C20E02040200020 +7F03:11001100213E21224FA2F122113E23A24362FD22493E01221922E122413E0122 +7F04:20142012201047FE5410F41025D024124412F5D44554054835DAC42A08461082 +7F05:100017FE204020804BFCF294129422F44294FA9442F402941A94E29443FC0204 +7F06:10901290229E22A84AC4F88011FC21044124F924412401541850E0904112060E +7F07:100011FC2104210449FCF904110421FC4000FBFE40200120193CE12042A0047E +7F08:20102010271045105514F752255225924710F514450807103520C04000800300 +7F09:100011F82108210849F8F00017FE210841F8F90841F80108193EE7C840080008 +7F0A:100011F82108210849F8F908110821F84000FBFC429402941A94E29447FE0000 +7F0B:1020102021FC252445FCF82013FE200041FCFD04412401241D24E05040880304 +7F0C:100011FC2124212449FCF924112421FC4000F840402402A21A8AE48840780000 +7F0D:1008103C21E020204820FBFE1124212447FEF924412403FE1820E02043FE0000 +7F0E:10801338222822284BA8FA461200227C43A4FA24422803A81E10E22842440282 +7F0F:110011FE211022104AFEF292169222FE4292FA9242FE02901A50E22042580286 +7F10:1040108021FC210449FCF90411FC20204032FBB440A801281924E22444A20040 +7F11:11001178210822084AFEF6401A40227C4290FA1042FE02101A28E22842440282 +7F12:10101220217C25444444F87C13402140417CFD444144017C1D44E280447E0000 +7F13:103C17C0224421284800FBFC1080208047FEF90041F802881A50E42048D80306 +7F14:1040102021FC24004488F85013FE22224424FDFC412401241D34E12840200020 +7F15:1020112420A820204BFEF8A8112422024040FBFE408801081990E06041980604 +7F16:1080104023FC22044A04FBFC1200220043FCFB54435405FC1D54E5544944010C +7F17:100013FC220423FC4A20FBFE1210228A4306F80043FC02041BFCE20443FC0204 +7F18:108010FC210421F84808FBFE104020A24334F858409403341852E09043500020 +7F19:100013FC209022944998F89017FE200041F8F908410801F81908E10841F80108 +7F1A:1050104827FE20404BFCFA4413FC224443FCFA44400803FE1908E08840A80010 +7F1B:100013FE220022FC4A00FBFE12A8229042C8FA86420803FE1A88E44844080818 +7F1C:1040104027FC20404BF8FA0813F8220843F8FA0843F802081FFEE11042080404 +7F1D:1020147C228421484830F8CE1610227C4210FA7C421002FE1A10E21045FE0800 +7F1E:1040102023FE200049FCF90417FE210441FCF852409401881A88E4A440C20080 +7F1F:1040102023FE200049FCF90411FC200043FEFA0242FA028A1AFAE202420A0204 +7F20:2040202027FE440055FCF524252425FC4524F52445FC042035FCC820082013FE +7F21:1040102023FE20004954F924115421FC4020FBFE424202921AFAE20A42020206 +7F22:11041084208820004BFEF800108821044202F9FC415401541954E15447FE0000 +7F23:10881050200025FE4450F9FC105423FE4054FDFC405000D81D54E25240500050 +7F24:1040102023FE22024C14F9E01100210041FCF910411007FE1800E09041080204 +7F25:100013FE205025FC4554F95411FC200041FCFC0043FE00201CA8E12442A20040 +7F26:100011F8210821F84908F9F8100023FC4294FBFC400001F81890E06041980606 +7F27:100011FC212425FC4524F9FC1040208841F0FC20404403FE1C22E12442220060 +7F28:20002FBE28A24AAA5AAAFAAA251428A24080F7FE4110021033A0C06001980E04 +7F29:2040202027FE44025100F1FE221026204A7CF2444244027C3244C244027C0244 +7F2A:100017BC208424A44A94F4A4105021884626F8C0431000641B88E03040C00700 +7F2B:112412482124240045FCF92411FC212441FCFC2043FE00701CA8E12446220020 +7F2C:220022FE22104FA0527CF244275420544054F754455405543528C72405420082 +7F2D:1020102023FE20504A8AF90413FE250441FCF90441FC00201924E22244A20040 +7F2E:1088105023FE202049FCF82013FE212440A8FBFE400001FC1904E10441FC0104 +7F2F:11041088200023FE4A22FAAA1272222243FEF80041FC010419FCE10441FC0104 +7F30:100013FE200025FC4524F9FC112423FE4000FDFC412401FC1D24E1FC400003FE +7F31:101014FE229222FE4810F9FE10002EFE4282FAFE428002FE1A82E2FE450008FE +7F32:11FC1104210421FC4800FBDE1252225243DEF82047FE007018A8E12446220020 +7F33:100013FC229422944BFCF80017FE200043FCFA0443FC00A21914E3084D440182 +7F34:2108220827C8445057DEF46427D422144114F7D4421403C83248C454055408A2 +7F35:2108252827BE494857BEF31825AA29464000F3F8420802483248C0B001080604 +7F36:0800080010001FF82100410001000100FFFE010021082108210821083FF80008 +7F37:200020003F3E482288220822FFA2082208224922492A49244F20792000200020 +7F38:200020003F7E481088100810FF10081008104910491049104F1079FE01000000 +7F39:080008001FF8210041000100FFFE01002108210821083FF80000488844448444 +7F3A:202020203C2051FC90241024FE24102413FE5420545054505C88648805040202 +7F3B:200020003DFE504090401078FE48104810685498549854885C8A64AA04CA0086 +7F3C:204020403C40507C90441088FEA0112010205450545054485C88648405040202 +7F3D:202020203C20502091FE1070FEA810A811245524562254F85C20642004200020 +7F3E:208420483C0050FC90481048FE48104811FE5448544854485C48648804880108 +7F3F:2008201C3CE05080908010FEFE80108010BC54A454A454A45CA4653C05240200 +7F40:205020503C50515290D41058FE50105810D45552565054505C9264920512020E +7F41:400043FE7A02A28A225223FEFA22222222AAAAAAAAAAAAFABA02CA02020A0204 +7F42:3EF822882AA82AA82AA81450228849041FF821000100FFFE010021083FF80008 +7F43:08202AA44D28145022887FFE400288041FF821000100FFFE0100210821083FF8 +7F44:08007F7808483E4800863E782A483E30404890861FF02100FFFE010021083FF8 +7F45:4040407C7840A3FE22422278FBC4223C2208AAF0AB24AAA8BDFECC2008A00040 +7F46:200021FC3D2453FE912411FCFE0011FC110455FC550455FC5D0465FC04880104 +7F47:410840907BFEA09023FC2294FB1C220423FCAA04ABFCA808BBFEC90800A80010 +7F48:400043FE7850A3FE225223FEF80021FC2104A9FCA904A9FCB820CBFE00200020 +7F49:412440A87BFEA20220F82088F8F8200C21F0A820A9FCA820BBFEC82000A00040 +7F4A:08787F4808483E862B783E482A28FF9049287F4620003FF84100FFFE21083FF8 +7F4B:0100FFFE104824FE799010FC22907CFC089030FEC8803FF84100FFFE21083FF8 +7F4C:3EF822883EF822883EF822883EF81450228810001FF02100FFFE010021083FF8 +7F4D:1FF011101FF011103FF82AA83EF82AA83EF810001FF02100FFFE010021083FF8 +7F4E:41FC410479FCA10423FE2020FBFE222221ACA820A9FCA800BBFEC840008801FC +7F4F:4040407C7840A3FC224423F0FA4422FC22A8AAF8AAA8AAF8BA00CDFC05540BFE +7F50:408843FE7888A3DE225223DEF8A0209021FEA920ABFCAD20B9FCC92001FE0100 +7F51:00007FFC40044004421452944A54442444244A544A5452946104400440144008 +7F52:00003FF82448244824483FF80000000000000000000000000000000000000000 +7F53:00003FF820082448228821082288244820080000000000000000000000000000 +7F54:00007FFC4004482444445FF4410440845FF444044404440447E4400440144008 +7F55:00007FFE40028824101020081FF0010001000100FFFE01000100010001000100 +7F56:00003FF82448244824483FF801000280044008203018C2060100008000800000 +7F57:00003FF82448244824483FF8020004000FF0101068200440028003001C00E000 +7F58:00003FF8244824483FF8000000007FFC010003000570090C3102C10001000100 +7F59:00007FFE400288241010210801000100FFFE03800540092011102108C1060100 +7F5A:00007FFC444444447FFC0000200810880088F088108810881488180810280010 +7F5B:00007FFC444444447FFC000000781FA01220122012101290124822A843248202 +7F5C:00007FFC444444447FFC020001007FFC010001003FF8010001000100FFFE0000 +7F5D:00007FFC444444447FFC00001FF0101010101FF010101FF010101010FFFE0000 +7F5E:00007FFC44447FFC00003FF0002006400180FFFE0282048408803080C2800100 +7F5F:00007FFC444444447FFC01000100FFFE010001001FF01010101010101FF01010 +7F60:7FFC444444447FFC00003FF8200820083FF8208020803FFC208020442C24301C +7F61:00007FFC444444447FFC000000007FFC0100110011F8110011001100FFFE0000 +7F62:00007FFC444444447FFC010001003FF801000100FFFE0400082010103FF81008 +7F63:00007FFC444444447FFC01003FF801000100FFFE000001003FF801000100FFFE +7F64:00007FFC444444447FFC082004407FF801083FF821003FFC0304051419086100 +7F65:7FFC44447FFC00001FF010101FF000003FF820083FF820083FF8200820282010 +7F66:7FFC44447FFC000000F87F00221011203FE000400080FFFE0100010005000200 +7F67:00007FFC444444447FFC082008207EFC08201C301A702A6848A4892208200820 +7F68:3FF8244824483FF802007FFC044009203FF8D1161FF011101FF40104010400FC +7F69:00007FFC44447FFC010001FC01003FF820083FF820083FF80100FFFE01000100 +7F6A:00007FFC444444447FFC000004407C7C044004407C7C04400440FC7E04400440 +7F6B:00007FFC444444447FFC000008207F200820FF30082808247F2408200F20F020 +7F6C:7FFC44447FFC00003EF8020814D00820145062883EF80288145008203458C286 +7F6D:00007FFC444444447FFC00500048FFFE00403E4022243E2800120E2A70C60302 +7F6E:7FFC444444447FFC0100FFFE02001FF010101FF010101FF010101FF01010FFFE +7F6F:00007FFC44447FFC01003FF808200440FFFE00001FF010101FF010101FF01010 +7F70:7FFC444444447FFC080004047FA400243F2400243F2400243F2421043F142108 +7F71:7FFC444444447FFC0100FFFE01003FF8244822882FE821083FF8210821282010 +7F72:00003FF8244824483FF802001FD00220FFFE03000FF03810CFF008100FF00810 +7F73:7FFC444444447FFC00001FF0111011101FF0111011101FF001004884481287F2 +7F74:3FF8244824483FF8010001003FF80100FFFE040008201FF00010488844448444 +7F75:7FFC444444447FFC00001FF811001FF011001FF011001FFC0004292444940008 +7F76:7FFC444444447FFC040079FC40444844545462883FF821083FF821083FF82008 +7F77:7FFC444444447FFC1080249842E07E8400847E7C42807E9842E07E844284467C +7F78:7FFC444444447FFC10080808FF0800FE7E0800887E4800487E0842087E284210 +7F79:00007FFC444444447FFC10A0109019FE552053FC952011FC1120112011FE1100 +7F7A:7FFC44447FFC1110222011101FF011101FF011101FF001007FFC05401930E10E +7F7B:7FFC444444447FFC00003F0821083F0820FE2E0820483F2844285508A4A80C10 +7F7C:7FFC44447FFC00003FF821083FF821083FF80920FFFE09203FF801007FFC0100 +7F7D:7FFC444444447FFC00007FFE42004A4452A4452448A452244AA4530444949848 +7F7E:3FF8244824483FF8082004403FF8292825483FF800001FF010101FF010101FF0 +7F7F:00007FFC44447FFC01003FF80440FFFE11101FF011101FF001003FF80100FFFE +7F80:3FF82AA824482AA80000FFFE02803EF822883EF802803FF821083FF821083FF8 +7F81:00007FFC44447FFC22007F7822083E4808487F7C49047F0408F4FF0408140808 +7F82:7FFC444444447FFC100011FC25047DFC080011FC25047DFC010455FC5504810C +7F83:7FFC44447FFC0820FFFE08201FF010101FF01010FFFE09203FF8D11611300100 +7F84:7FFC444444447FFC1020103C24207DFC090411FC25047DFC002055FE54208020 +7F85:00007FFC444444447FFC1050148825FE7A9010FC24907EFC009054904AFE8A80 +7F86:7FFC44447FFC108024987EE000847E7C42007E9842E07E844284467C24884244 +7F87:7FFC444444447FFC2820FDFC2820385010887DFE54087DE81128FDE810081018 +7F88:00007FFC444444447FFC2800FDFE292039FC11207DFC55207DFE1002FEAA1004 +7F89:7FFC444444447FFC000021082390482473B820104BA4783E0388AAACABCA8298 +7F8A:0820042004407FFC0100010001003FF8010001000100FFFE0100010001000100 +7F8B:092009200920F93E09200920082001007FFC01000100FFFE0100010001000100 +7F8C:0820042004407FFC010001003FF802000200FFFE04800480088010822082C07E +7F8D:020002007FFC044008203018C82604407FFC01003FF80100FFFE010001000100 +7F8E:1010081004207FFC010001003FF80100FFFE010001007FFC028004401830E00E +7F8F:220412041408FF90082008447F0408080810FFA208420804100810102060C180 +7F90:08200820F83E082001003FF801000100FFFE04000FE01040608003401C30E00E +7F91:082004407FFC01003FF80100FFFE040007E0082010406080014006201818E006 +7F92:441024502850FE50108810887D0412FA1048FE48104810482088208841288210 +7F93:4400240029FCFD24112411247D24112411FCFD00110011002102210240FE8000 +7F94:0820042004407FFC0100010001003FF8010001000100FFFE0000488844448444 +7F95:082004407FFC01003FF80100FFFE010000801F0001047D88095011202518C206 +7F96:440024F82888FE88108811067E0011FC1084FE84104810502020205040888306 +7F97:0820042004407FFC010001003FF802000200FFFE049004A408BC10822082C07E +7F98:01043C842488240027FE3C20242025FC24203C2027FE24202420442054208820 +7F99:082004407FFC010001003FF801000100FFFE010011101120228004401830E00E +7F9A:442024202850FC50108811247E12101011FCFC04100810882050202040108010 +7F9B:082004407FFC01003FF80100FFFE04407FF804483FF824403FFC084410542048 +7F9C:444024202820FDFE110212047C00100011FEFC20102010202020202040A08040 +7F9D:4404241E29F0FD10111011107D1011FE1110FD1011101108210A214A41A68112 +7F9E:082004407FFC01003FF80200FFFE04000FF011102110CFF0021002103FFE0000 +7F9F:440025FC2808FC10103010487C8413021000FDFC102010202020202043FE8000 +7FA0:442024202BFEFC2011FC10247DFC112011FEFC22102A10542050208841048202 +7FA1:082004407FFC01003FF80100FFFE4080208009FC12042448E04020A023182C06 +7FA2:441424122810FDFE101010907C92109213F2FC9410941088208A211A41268242 +7FA3:3FF80208FFFE04083FF808001FF82808CFF804407FFC01003FF80100FFFE0100 +7FA4:00827E44122812FEFF10121012107E7C201020107E1062FEA21022103E102210 +7FA5:440025FE2800FC92112412487D2410921000FDFE102010202020202043FE8000 +7FA6:4420241029FEFD02120410F87C00100011FEFC501050105020922092410E8200 +7FA7:444024402888FD0413FE10027C8811441242FCF8118812502020205041888606 +7FA8:082004407FFC01003FF80100FFFE0080208011FC820454482040E0A023182C06 +7FA9:082004407FFC01003FF80100FFFE02403C500848FFFE08480E5078240854198C +7FAA:4440242029FCFD04110411FC7D04110411FCFD20112211142108214441828100 +7FAB:4440242029FEFD02120410507C8811041000FDFC102010202020202043FE8000 +7FAC:8808480C500AFBFE22082208FAE8220A220AFAEC22AC22A822EA421A42268442 +7FAD:884048A05110FA0825F62000FBC422542254FBD42254225423D44244425482C8 +7FAE:04407FFC01003FF80100FFFE248842443FF801001FF00100FFFE02800C60701C +7FAF:440025FC2904FDFC110411FC7C8011FE1222FD221152110221FA200240148008 +7FB0:442025242924FD2411FC10807C8013FE1090FD101152125422A8242848448082 +7FB1:440025FE2910FD20117C11447D7C1144117CFD10111011542152229242508420 +7FB2:04407FFC01003FF80100FFFE00283E240824FFFE2A207D2490A81E12022A0C46 +7FB3:443C27E02924FCA813FE10A87D24120211FCFD24112411FC2124212441FC8104 +7FB4:082004407FFC01003FF80100FFFE454429287CFE10107C7C1010FEFE10102010 +7FB5:442025FC2820FC8813FE10887DFC110411FCFD0411FC110421FC208841048202 +7FB6:88204BFE5000FBFC220422F4FA9423FC2000F9F8210821F8210841F8400083FE +7FB7:442024202850FC88110412FA7C00100011DCFD54115411DC2088208841548222 +7FB8:0100FFFE20003FF800003FF820083FF80440729C57D47114539C711657D6B122 +7FB9:04407FFC01003FF80100FFFE482482823FF801001FF00100FFFE02800C60701C +7FBA:880049FC5020FBFE222221ACF82021AC2000FBFE202021FC215441544154810C +7FBB:88204BFE5250FBFE225223FEFA0023FE2292FB48223A224022FC4548443089CE +7FBC:3FFC20043FFC22202FF8208027F020803FFC2AA83F7C24105F7C4410BF7E0810 +7FBD:00007EFC0204020422441224122402040A14122462C422440204020414280810 +7FBE:0000EE00227C2210AA1066102210221026106A10B210221022102210AAFE4400 +7FBF:00007EFC22441224060C1A3462C40204042004207FFE04200420082010202020 +7FC0:0010EE1022102210AAFE66922292229226926AFEB292221022102210AA104410 +7FC1:0440082012102408C8261FF0001000007EFC224412240A14122422444A940408 +7FC2:0008EE2822282228AA4466442282237C26246A24B224222422442244AA944508 +7FC3:080008EE08227E2210AA1066202228224826486A90B2142222227E2222AA0044 +7FC4:0010EE10221022FEAA10661022FC224426446A44B228222822102228AA444482 +7FC5:100011DC1044FE44115410CCFC4444CC45542844284411541888240043FE8000 +7FC6:00007EFC224412241A3462C404003FC004400844113C2100FFFE010001000100 +7FC7:00007EFC224412241A3462C4022401107FFE020007F00A10112060C003301C0E +7FC8:00007DDC5444544455547CCC54445444544C7CD4556410441044104411541088 +7FC9:100011DC1044FC44115430CC38445444524C90D411647C441044104411541088 +7FCA:200013DE1042FC420252094A894A884248C6494A525250421C42E042414A0084 +7FCB:0020EE10221022FEAA0066042244224426246A24B228222822082210AAFE4400 +7FCC:00007EFC22441224060C1A3462C4010000807FFC0000101008200440FFFE0000 +7FCD:0010EE10221022FEAA926694229022FC26A46AA4B2A822A822902328AA444482 +7FCE:100011DC28442444435490CC08440044FC4C04D4096450442044104411540088 +7FCF:00007EFC224412241A3462C4030406C01830E30E0C403180063038C007003800 +7FD0:0010EE1022502250AA7C66902310221026FE6A10B228222822282244AA444482 +7FD1:0040EE40228022FCAB04660422F4229426946A94B2F4229422042204AA284410 +7FD2:00007EFC224412241A3462C4010402001FF8100810081FF8100810081FF81008 +7FD3:100011DC1044FE44115410CC7C440044004C7CD44564444444447C4445540088 +7FD4:440025DC2844FE44115410CC7C441044104CFED4116410442044204441548088 +7FD5:010006C01830EFEE00001FF010101FF000007EFC224412240A1412246AD40408 +7FD6:100011DC28442444435480CC7C440044004C7CD44564444444447C4445540088 +7FD7:100010EE3E224222A4AA186610222422C8261F6A21B2D2220C22082230AAC044 +7FD8:200021DCFE442444295412CC2A44C6CC0154FC4428442954288A480247FE8000 +7FD9:100092EE92229222FEAA206620223E224226426AA4B214220822102220AAC044 +7FDA:7EFC224412241A3462C400007FFE42029FF4040009001FF001007FFC01000100 +7FDB:108010F811082290286069986E06ABB828882AA8299829982AA8288822A82110 +7FDC:00007EFC224412241A3462C4020401007FFC092009201550228804401830E00E +7FDD:100008EE7F22412292AA10667F2210221426246A24B228224A225122BFAA1144 +7FDE:0020EE1022FE2200AA00667C22442244267C6A10B254225222922210AA504420 +7FDF:00007EFC224412241A3462C4020409001FFC30805FF890801FF810801FFC1000 +7FE0:00007EFC224412241A3462C4020401007FFC0820145022880100FFFE01000100 +7FE1:04407C7C04403C7804407C7C0440044000007EFC224412240A1412246AD40408 +7FE2:00007F6E492249225DAA49667F2241225D26556A55B25D2241224122452A8264 +7FE3:7EFC22441A3462C4020401003FF80820FFFE04007FFC08201C4003800C707008 +7FE4:00007CEE442244227CAA0066FE22AA22AA26AA6AFEB2AA22AA22AA22A2AA8644 +7FE5:01081FD001207FFC02000FF03810CFF008100FF000007EFC22441A3462C4060C +7FE6:0820FFFE00003E0822483E4822483E482208261800007EFC22441A3462C4060C +7FE7:200011DCFE44824401547CCC00447C44444C7CD445647C4400441C44E1544088 +7FE8:7EFC22441A3462C402041FF010101FF010101FF000007FFC110011F8290047FE +7FE9:100008EE7E22422242AA7E66422240227F26556A55B27F22D522552255AA4344 +7FEA:0028EE9222AA2282AAFE6628224422A2263C6A44B24422A822102228AA444482 +7FEB:0000EE7C2200AA006600AAFE225010507E50425042507E52425242927E8E4300 +7FEC:7CF82448142824487FFC41043FF801001FF011101FF011101FF00100FFFE0100 +7FED:0040EE5C22442284AABE66902390229E26A86A88B2BE228822882294AA9444A2 +7FEE:0000FEEE00227C2244AA7C660022FE228226AA6A92B2FE229222922292AA8644 +7FEF:7CF8244814282548FFFE00001FF010101FF000007FFC40044FE448244FE4400C +7FF0:102010201050FE8811067C0045DC7C4445547CCC1044FECC1154104411541088 +7FF1:100021DC7C4444447D5444CC7C441044FE4C28D4556492447C44104411541088 +7FF2:0000FEEE2822FE22AAAAAA66FE2200227C26006AFEB210225422922250AA2044 +7FF3:00007F7848485F4C64805F7844484A4851307F4C00007EFC22441A3462C4060C +7FF4:0010EC1026FE2510B57C6C54247C2754257C6D10B5FE251025102690B47E4800 +7FF5:0010EE20227C2244AA7C6644227C2240267E6A40B27E220222AA22AAAB02440C +7FF6:100021DC7C4444447D5444CC7C441044544C38D455641044FE44104411541088 +7FF7:080049EE2A220822FFAA2A66492288224226776A92B25A222F22222242AA8244 +7FF8:10007EEE10222422FEAA24667E2242227E26426A7EB242227E22242242AA8144 +7FF9:10007DDC1044FE444554EECC4444EECC0154FC4428442954288A480247FE8000 +7FFA:2000FEEE8222FE2282AAFE668222FE221026926A54B292221022FE2210AA1044 +7FFB:0E00F1DC92445444FF5438CC544482447C4C54D455647C44544454447D544488 +7FFC:7EFC22441A3462C402043FF821083FF821083FF804403FF80440FFFE08201010 +7FFD:08004E764812FF12045A05367F9244127C125536555A75125A12929225DAC8A4 +7FFE:0000FEEEAA22AA22FEAA0066FE2200227C26446A7CB22A226422A22231AA2044 +7FFF:1000FEEE10227C2200AAFE6602227C221026FE6A00B2FF220222FF22AAAAE644 +8000:100011DC9044555458CC1154FC00284828FE29902AFC28902AFC4C9048FE8080 +8001:020002083FD002200240FFFE010002000C1018E02F0048088808080807F80000 +8002:020002083FC802100220FFFE0080010002000C003000C0000000000000000000 +8003:020002083FD002200240FFFE010002000FF81200240047F08010001000A00040 +8004:02203FC00280FFFE02200FC03408C3F8000001F03E0003F03E0003FA7E0201FE +8005:020002083FD002200240FFFE010002000FF0181028104FF0881008100FF00810 +8006:02083FD00220FFFE02000C703F84C80407FC00001FF010101FF010101FF01010 +8007:020002083FD002200240FFFE03001C00EFF810082FC8C8480FC8000800500020 +8008:02203FC00280FFFE02200FC03408C3F810003FF840089F8810881F8800500020 +8009:020002103FE00240FFFE010007F81C00E7F800081F88108810881F8800500020 +800A:020002103FE00240FFFE010006001FF0E40008201FF001001FF001007FFC0000 +800B:02203FC00280FFFE02200FC03408C3F800007FFC08201FF001001FF001007FFC +800C:00007FFC0100010002003FF82488248824882488248824882488248820282010 +800D:0000FFFE020004003FF82488248824A822100200FFFE08201C4003800C707008 +800E:0000FFFE020004003FF824882488248824A8211001007FFC028004401830E00E +800F:0002FFE20404040808107FC24A424A444A484A504A424A424A444848415040A0 +8010:0008FF880808080810FE7F085508550855485528552855085508550841284310 +8011:01002108210821083FF800000000FFFE020004003FF824882488248824A82010 +8012:010001007FFC010001003FF801000100FFFE0380054009203118C10601000100 +8013:1000100011FEFE1010107C101010FE1010103810341054105010901010501020 +8014:100010FC1004FC08100878101010FDFE10103810341054109010101010501020 +8015:108810881088FE8811FC7C881088FE8813FE3888348854885088910811081208 +8016:102010201020FCA810A478A21122FD2012243824342854089010102010C01300 +8017:1008101C10E0FE2010207C3C10E0FE201020383E35E05420502290221022101E +8018:100010FC1000FE0010007C0011FEFE201020384034485484508491FE10821002 +8019:1000100011FCFD24112479241124FD2411FC3900350055009102110210FE1000 +801A:101010101010FDFE111279141110FDFC11443944352855289110122812441482 +801B:102010201020FE4010487C8411FEFE82100038FC348454845084908410FC1084 +801C:100011F81108FD081108790811F8FD00110039FC350455049104110411FC1104 +801D:100010F81088FE8810887CF81088FE88108838F8348854885088908813FE1000 +801E:110011001100FD1C13D479541154FD5411543954355455549154125C13541480 +801F:100011FE1100FF0011007DFC1104FF041104390435FC55005100910011FE1000 +8020:102010201050FC8811047A0211FCFC00100039FC350455049104110411FC1104 +8021:1008100813C8FE48125E7A4A13CAFE4A124A3BCA364A524A526A93D216121026 +8022:1088108813FEFC8810007BFE1202FC4410403BFC344454849084110412281410 +8023:102010201050FC8811047AFA1000FDFC1154395435FC5554915411541104110C +8024:104810481048FDFE1048784811FEFC0010FC3884348454FC9084108410FC1084 +8025:1020112410A4FCA810207BFE1202FE0212FA3A8A368A528A52FA9202120A1204 +8026:11FC11241124FDFC1124792411FCFC2010203BFE3622522A52FA920A12021206 +8027:1020112410A8FC2013FE78A81124FE0210403BFE348851085190906011981604 +8028:100011FE1100FD7E110079FE1154FD4811643942350851FE5148922812081418 +8029:1088108813FEFC8811FC788813FEFC2011FC392435FC512453FE910411141108 +802A:1040102013FCFD0810907BFE1202FC4410203BFC348054F89088110811281210 +802B:102013FE1020FDFC10207BFE1000FDFC110439FC350455FC910411FC10881104 +802C:102011FC1124FFFE112479FC1020FDFC112439FC344055FE908811D01070138C +802D:1124112412AAFFAE11247AAA13AEFD2413FE391035145114528A924A12161422 +802E:1048116A10DCFE4810B47D2211FEFF021020382034FC54245044904410941108 +802F:108813FE10A8FC9011FE7B2011FCFD2011FC392035FE550093FC10881070138E +8030:13FC104011F8FD0811F8790817FEFC4212A43A8A347A508051F892881070138E +8031:1040102013FEFE4813FE7A4812ECFF5A12483BFE3620527C52C49344147C1844 +8032:1040102013FEFC0011FC795411FCFC201122388C3522545490C8114412521060 +8033:00007FFC101010101FF0101010101FF010101010103E17D0F810001000100010 +8034:0020FFA0222022203E20222022203E202220222027A0FA2242220222021E0200 +8035:0000FF80227E22083E08220822083E08220822082788FA084208020802280210 +8036:0000FFBE222222243E24222822243E242222222227A2FA344228022002200220 +8037:010001007FFC0280044008203FF8C8260FE008200FE0082009F87E2000200020 +8038:0820082014502288410400007FFC10101FF010101FF01010103EFFD000100010 +8039:0020FF20242024503C50248825443E22242024F82E08F4084410041004200420 +803A:0000FF0024FC24003C00240025FE3C20242024402E40F488448405FE04820400 +803B:0010FF10241024903C902490249E3C90249024902E90F4904490049005FE0400 +803C:0000FF7C244424443C4424FE24443C44244424FE2E44F4444444044404540448 +803D:0040FC4048404BFC7A444C484840784048A048A04CA07920C9220A220C1E0800 +803E:0040FF40244024403DFE244024403C50249024902EA0F5284544064404FE0442 +803F:0020FF20242024243CA424A424A83D20242024502E50F4504488048805040602 +8040:0048FF44244424403C5E25E024403C44244424482E30F4224452048A05060402 +8041:0010FC9048904888790849044A047DFA488848884C887888C90809080A280C10 +8042:00007FFC08200FE008200FE0083EFFE000203EF8028822881450082034D8C306 +8043:0020FF20242025FC3D24252425FC3D24252425242FFEF5044504050405140508 +8044:0020FC204850488879044A1248207840498848104C207844C988081008600B80 +8045:0040FC40488048FC79204A20482078204BFE48204C507850C888088809040A02 +8046:0020FF20245024503C88252426123C1025FC24042E08F4884450042004100410 +8047:0000FF0024FE24103C10241024903C90249E24902E90F4904490049007FE0400 +8048:0010FC9048904910797E4A524B927892491249124E527BD2C8620822084A0884 +8049:0010FF10249224923C92249224FE3C10241024922E92F4924492049204FE0402 +804A:0000FC804B1E4A527A524A524A527A524A524AD24F5A7A54C890089009100A10 +804B:04800440FFFE0940118466FC00007FFC08200FE008200FE0083EFFE000200020 +804C:0000FF0024FC24843C84248424843C8424FC24842E00F4484444048404820502 +804D:0040FC2048204BFE7A024C04480078004BFE48204C207820C820082008A00840 +804E:0050FF50245025523CD4245824503C5824D425522E50F450449204920512060E +804F:0000FDFC48204820784049FC49547954495449544D547954C954094409140908 +8050:0020FC2048204BFE7820482049FC7800480049FC4D047904C904090409FC0904 +8051:0000FDFE48884888788848F84888788848F848884C88789ECBE8080808080808 +8052:0008FF1C24E024203C2025FE24203C20242024FC2E84F4844484048404FC0484 +8053:00007DF0111011901D52F20E04007FFC08200FE008200FE0083EFFE000200020 +8054:0088FC484850480079FC4820482078204BFE48204C507850C888088809040A02 +8055:0020FD20492049FC79204A2048207BFE480048004DFC7904C904090409FC0904 +8056:00007F00227C3E4422443E4423C4FE7C024402007FFC01003FF801000100FFFE +8057:0020FC2048204BFE782048204924792449244AAA4C207850C850088809040A02 +8058:0020FC2049FC492479FC492449FC78004BFE48804D0079FCC804080408280810 +8059:0020FC204BFE482079FC48204BFE780049FC49044DFC7904C9FC090409140908 +805A:7F00227C3E0422283E1023A8FE44020000F87F0009041188635005201918E106 +805B:0020FF4024FE24923C9224FE24923CA224FE24482E88F5FE4408040804080408 +805C:0020FF10241025FE3D02265424883D04240024FC2E20F4204420042005FE0400 +805D:0014FC12481049FE7810481049D27952495249544DD47808C8CA0B1A08260842 +805E:00007C7C44447C7C44447C7C40044FE4444447C4444447C444745FC440544048 +805F:20003E7C4844FF441444227C40007FFC08200FE008200FE0083EFFE000200020 +8060:0084FF48240024FC3C48244824483C4825FE24482E48F4484448048804880508 +8061:0090FC90490849487A444C9249087BFC484448204CA47A82CA8A0A8A0C780800 +8062:0020FF1024FE24823D04240024FE3C10241024902E9EF490449004D0053E0600 +8063:0000FF2024CE24823C8224EE24823C8224FE24282E28F4284448044A048A0506 +8064:0040FC204BFE480079FC490449FC78004BFE4A024DFC7820C820082008A00840 +8065:0004FC1E4BE0482079FC4924492479FC48204BFE4E227A2ACAFA0A020A0A0A04 +8066:0080FC8048FC49547AD448B4492C7A44489449084C4078A4CAAA0A8A0C780800 +8067:0010FDD448584A52798C488849047AFA482048204DFE7820C850088809040A02 +8068:0108FD4A4A524B9C79084A524BDE7842488848884FFE7888C888090809080A08 +8069:0020FC2049FC492479FC48204BFE780049FC49044D247924C924085008880B04 +806A:0088FC48485049FC79044904490479FC482048104C547942C942094A0A380800 +806B:0108FD4A4A524B9C79084A524BDE7842482048204FFE7820C850088809040A02 +806C:0090FC8849044A427C8849FC480478004BDE48424E52794ACA520842094A0884 +806D:0010FF2024FE24923C9224FE24923C9224FE24202E24F45A445E04900492050E +806E:0084FC844908494A7A524B9C48847908494A4BDE4C427800C954092A0A2A0800 +806F:0108FD4A4A524B9C79084A524BDE784248904A924E927B9EC890089008900910 +8070:0020FC4049FC4924797C498C49547924495449FC4C407824CAA20A8A0C880878 +8071:08207F20087E7E4408A4FF2810101E2822447FFE88200FE0083EFFE000200020 +8072:08007F7808483E4800863E782A483E304048FFFE08200FE0083EFFE000200020 +8073:11102110CAA814443278D24015FC18007FFC08200FE008200FE0083EFFE00020 +8074:0020FC204BFE4840784049FC4954795449FC48404C247AA2CA8A0C8808780800 +8075:0020FDFC492449FC78204BFE480079FC490449FC4D0479FCC90409FC08880904 +8076:7FFC08200FE008200FE0083EFFE000207EFC24483C7824483C78264EFDF80408 +8077:0110FC944BD248127A5049904FFE78104BD24A524E547BD4CA4A0A4A0BD60822 +8078:0080FCF849084BFE7944499249FE7900497C49004D7C7900C97C0A440A7C0C44 +8079:0040FC204BFE4A227954494A4A3A780049FC49544FFE7800C9FC082008A00840 +807A:0040FC204BFE4A02791049DE4A527D544A8849744E0279FCC82009240A220860 +807B:42043FD88A904F9E2A945FD482247FFC08200FE008200FE0083EFFE000200020 +807C:002078200BFE1020FDFC4954495479FC48007BFE48405C24EAA24A8A0C880878 +807D:0020FC204BFE782049FC79544954F9FC0800FBFE284078242AA2FA8A0C880878 +807E:08403E7C1440FF7822083E782242263E00007FFC08200FE0083EFFE000200020 +807F:010001003FF80108FFFE01083FF8010001003FF801000100FFFE010001000100 +8080:010001003FF80108FFFE01083FF8010801000100010001000100010001000100 +8081:010000803FFC20043FFC20802FF820883FFE20882FF820804FFC4080BFFE0080 +8082:00200020FDFC202423FE3C2445FC4420642095FC0820082013FE202040208020 +8083:010001003FF80108FFFE01083FF8010021082548252825282928410841088108 +8084:40204C2070FC442445FE3C2440FC7C20902011FCFE20102029FE242044208020 +8085:01003FF80108FFFE01083FF8054025483D7821083FF821083D78254845488108 +8086:00203E2020FC20243DFE202420FC3C20202021FCFE20202025FE4220FE204220 +8087:08403E7E22A83E10206E41009FF00110FFFE01101FF001003FF80100FFFE0100 +8088:08243E3E22E83E12202A41469FF00110FFFE01101FF001003FF80100FFFE0100 +8089:0100010001007FFC410442844444492451044104428442444444480440144008 +808A:00003E0022FC220422083E102220222022403E4022802282228242824A7E8400 +808B:00203E202220222022FE3E222222222222223E2222422242224242824A948508 +808C:00003CF02490249024903C902490249024903C902490249224924512550E8A00 +808D:00403C402440244025F83C482448244824483C482448244A248A448A55068A00 +808E:00007FFE4002800400001FF0101010101FF0101010101FF01010101010501020 +808F:0600010002800C603118C1063FF8228824482928210822882448200820282010 +8090:00403C40248024FE25003E0024FC240824103C20244024802502450254FE8800 +8091:00403C40248024FC25043E042404250424843C44244424042404440454288810 +8092:00403C402440244025F83C482448254824C83C482468245A248A448A55068A02 +8093:02000100FFFE100010001FF800001FF010101FF010101FF01010101010501020 +8094:00203C2024202520252C3D34256427A425243D34252825222522450254FE8800 +8095:00003C0024FC242424243CA424A424A424A43D24242424442444448455288A10 +8096:010021081110092001003FF8200820083FF8200820083FF82008200820282010 +8097:00403C402440244027FE3C882488248824883D08249024502420445054888B04 +8098:00083C082408240825FE3C082408240824883C48244824082408440854288810 +8099:1FF0101010101FF000003FF8200820083FF8200820083FF82008200820282010 +809A:00203C202420242024203C2025FC242024203C20242024202420442057FE8800 +809B:00003C0025FC242024203C202420242024203C20242024202420442057FE8800 +809C:00043E042208221022203E442204220822103E2222422204220842104A2084C0 +809D:00003DFC2420242024203C20242027FE24203C20242024202420442054208820 +809E:00403C242524250425043C882488248824503C50242024202450448855048A02 +809F:00003CFC2400240024003DFE2440244024803CFC240424042404440454288810 +80A0:00003DF82410242024403C8025FE249224923C92251225222622444254948908 +80A1:00003CF82488248824883D06260025FC24843C84244824502420445054888B06 +80A2:00203C20242025FE24203C20242025FC24843C88244824502420445055888E06 +80A3:00203C202450245024883D442622242024003DFC240424082408441054108820 +80A4:00203C202420242025FC3C202420242027FE3C20245024502488448855048A02 +80A5:00003DFC2524252425243D24252425FC25043D00250025002502450254FE8800 +80A6:00103C502450245034882C88250426FA2C483448244824482488448855288A10 +80A7:00003C0025FE241024103C202420246824A43D22262224202420442054208820 +80A8:00203C20242025FC24203C20242025FC24203C20242027FE2420442054208820 +80A9:010000801FF8100810081FF8100017F8140817F8140827F82408440884280410 +80AA:00403C20242025FE24403C402440247C24443C44244424442484448455288A10 +80AB:0040784048404BFC48407A484A484A484A487BF84848484048424842483E9800 +80AC:00403C502448244824403DFE2450245024503C502490249024924512550E8A00 +80AD:00203C20242025FE25223D222522252225523D4A258A250225024502550A8904 +80AE:00403C20240025FC24003C0024F0249024903C902490249224924512550E8A00 +80AF:0100010011F811001100FFFE00001FF010101FF010101FF01010101010501020 +80B0:00203C282424242424203DFE2420242024203C50245024502488448855048A02 +80B1:00407840484048404BFE7840488048904890792049204A484A444C8449FE9882 +80B2:02000100FFFE080010103FF800081FF010101FF010101FF01010101010501020 +80B3:00803C80248024FC25543E542454249424943D24262424442444448455288810 +80B4:18180660018006603A180200FFFE04000FF818082FF848088FF8080808280810 +80B5:00043C0E24F0248024803C8024FE248824883C88248824882488450855088A08 +80B6:00103D102510251225123D1425D8251025103D102510251225524592550E8800 +80B7:00403C402440247C24843C882520242024203C50245024502488448855048A02 +80B8:00103C902490248825083D042624242224203DFE242024202420442054208820 +80B9:00483C482484248425023E0025FE244024803CFC240424042404440454288810 +80BA:00203C20242027FE24203C2025FC252425243D24252425342528442054208820 +80BB:010001F8010001003FFC200440081FF010101FF010101FF01010101010501020 +80BC:00887888488848884BFE7888488848884FFE7888488848884888490849089A08 +80BD:00203C202420242024203DFE2420242024203C5024502450248844C855248A02 +80BE:040025F824882450242024D8270604001FF010101FF010101FF0101010501020 +80BF:00203C202420242025FC3D242524252425243DFC252424202420442054208820 +80C0:00803C842484248824903CA0248027FE24A03C9024902488248444A254C08880 +80C1:00807880488048804BF0789048904A984A947C9248924890491049104A509C20 +80C2:00203C20242025FC25243D24252425FC25243D24252425FC2524442054208820 +80C3:00003FF821083FF821083FF800001FF010101FF010101FF01010101010501020 +80C4:010001003FF821083FF821083FF800001FF010101FF010101FF0101010501020 +80C5:00203C202520252025FC3D202620242025FE3C20245024502488448855048A02 +80C6:00003C0024FC248424843C8424FC248424843C8424FC24842400440055FE8800 +80C7:00503C50245025FC24543C5425FC255025503DFE24522452245A449454908910 +80C8:00503C482448244025FE3C402440247C24A43CA424A825282510462854448882 +80C9:00103C10242024FC24843C842484248424FC3C84248424842484448454FC8884 +80CA:00803C80250025FC36042C0425E425242D24352425E425242404440454288810 +80CB:00203C2024202420243E3C202420242025FC3D04250425042504450455FC8904 +80CC:048004987CE004841C84E47C40001FF010101FF010101FF01010101010501020 +80CD:0008781C49F049504950795049504950495079484948496849544A744A529C00 +80CE:00203C202420244024483C8425FE248224003CFC248424842484448454FC8884 +80CF:00203C20242E25F025203D20252025FE24223C6224A2252A2624442054208820 +80D0:00203C202524252435242D2425FC24202C203524252425242524452455FC8804 +80D1:00003C0024FC248424843C842484248424FC3C84240024482444448454828902 +80D2:00003CFC2484248424843CFC248024A024A23CA424B824A024A24522551E8A00 +80D3:00003DFC2420242025243CA424A8242027FE3C20242024202420442054208820 +80D4:088008882E9028E028842E84F07C01003FF82288244829282108228824482018 +80D5:00443C442444248424BE3D84268424A424943C94248424842484448454948888 +80D6:00203C20252424A424A83C2025FC242024203C2027FE24202420442054208820 +80D7:00203C202450248825043E122420244025883C10242024442588441054608B80 +80D8:00203C10241025FE24203C202444248425F83C1024202444248245FE54828800 +80D9:00803C80248024FE25403D402640247C24403C402440247E2440444054408840 +80DA:00007BFC482048204840784048D049484A447C4448404840484048004FFE9800 +80DB:00003DFC2524252425243DFC2524252425243DFC252424202420442054208820 +80DC:002078204920492049FC79204A204820482079FC48204820482048204BFE9800 +80DD:00043C1E25F0251025103D10251025FE25103D1025102508250A454A55A68912 +80DE:0080788049FC49044A047DF449144914491479F4490449284912490248FE9800 +80DF:00003CFC248424A424943C84248427FE25043D442524250425FE440454288810 +80E0:00203C20242025FC24203C20242027FE24203C2024402448248445FE54828800 +80E1:0800087C084408447F44087C08443E442244227C224422443E84228401140208 +80E2:00003C0025FE240824083DE82528252825283D2825E825282408440854288810 +80E3:0080788048FE49004A207920492C49744BA47924493449284922490248FE9800 +80E4:01002208244827882108224827C8200827C8244827C8244827CA444A444A84C6 +80E5:7FFC0104110011F81100290047FE80001FF010101FF010101FF0101010501020 +80E6:00203C20242025FC25243D242524252425243FFE242024502450448855048A02 +80E7:00907888488848804BFE78A048A048A448A478A84928493249224A624A9E9C00 +80E8:0040784048404FFE4880792049204A204BFC7820492849244A224C2248A09840 +80E9:00403C402440247C24403C40244027FE24403C40245024482444444054408840 +80EA:00203C20243C242024203CFC2484248424843CFC248424802480450055008A00 +80EB:000079FC480848104830784848844B02480079FC48204820482048204BFE9800 +80EC:10001000FEFC2244642818102428C2C601003FF8228824482108228824482018 +80ED:00003DFC2504252425243D2425FC252425243D54254C258C2504450455FC8904 +80EE:0080788048FC49084A90786049984E26482079FC48204A204BFE482048209820 +80EF:00203C2025FC245024883D0426FA240027FE3C40248025FC2404440454288810 +80F0:004078404FFC48404BF878484BF84A404BFC7844485448A848A049104A089C06 +80F1:004078444A444948495078404FFE48904890789048904892491249124A0E9C00 +80F2:004078204BFE48404890789049244BE448447848488849104A30484848849B04 +80F3:00403C402478248825503C202450248825063CF8248824882488448854F88888 +80F4:00007BFC4A044A044AF47A044A044AF44A947A944A944AF44A044A044A149A08 +80F5:00003DFE2420244024883D0425FE242224203C2025FE24202420442057FE8800 +80F6:0040782048204BFE4800788849044A0248887888485048504820485048889B06 +80F7:10001FFC20045454939414541FF400081FF010101FF010101FF0101010501020 +80F8:01007900490049FE4A027A024D1248A24A4A7AAA4B1A4A0A4BFA480248149808 +80F9:00003DFC2420242024403DFC2554255425543D54255425542554454455148908 +80FA:0040782048204BFE4A027C4448404BFE48887888490848D04820485048889B04 +80FB:00807880493C4A004C807880497E4B084D087908490849084908490849289910 +80FC:00843C48240024FC24483C482448244825FE3C48244824482448448854888908 +80FD:104024444248FF70014000427E42423E42007E44424842707E4042424A42443E +80FE:082008287F240820FFFE002008247F24492455286B2849105512632A45464282 +80FF:00203C2025FC242024203C2027FE240024203C2025FC24202420442057FE8800 +8100:1FC000447D88055009203518C2063FF800001FF010101FF010101FF010101030 +8101:00503C502450255234D42C58245024582CD43552245024502492449255128A0E +8102:01003D04253825C025023D0224FE240025FC3D04250425FC2504450455FC8904 +8103:00803C8024F8250826103DFC2524252425243DFC250025002502450254FE8800 +8104:0040784048404BFE4880789048904912495279544A904A284C28484448849902 +8105:02001FF00410085010207EFC12242A5444881FF010101FF010101FF010101030 +8106:00403C4024FC250426083DFE2500257C25443D442554254825424542553E8A00 +8107:0040784049FC48444884788449284A1049087BDE494A494A494A4A524B5A9CA4 +8108:0004781E49E049004906797849504950495279544948494849444A544A629C40 +8109:00407820481049E0482278344BB848B048A878A8492849244A244C2248A09840 +810A:2108111009201290244808203FF8C82608200FE0082008200FE0082008A00840 +810B:00001FF00410045008207EFC12442A9445081FF010101FF010101FF010101030 +810C:00803C8024FE251026103C1024FC249024903C9027FE24102410441054108810 +810D:002078204850488849047A0248F8480048007BFE48204840488849044BFE9902 +810E:000479884850482048507888492448204BFE782048A848A449224A2248A09840 +810F:00207810481049FE4900791049104910497C79104910491049104A104AFE9C00 +8110:004078204BFE490448887850482048D84B067888488848884888490849089A08 +8111:0040782048204FFE4800780048904A544A247A244A544A944A044A044BFC9804 +8112:00203C20252424A424A83C20242027FE24703CA824A825242524462254208820 +8113:0020782048204BFE4A427C4448A048A249A47A984C904888488448A248C09880 +8114:02000100FFFE04401450254841043FF822882448292821082288244820082018 +8115:00803C8024F8250826103DFC2524252425243DFC245024502490449255128A0E +8116:002078204BFE482048207BFE4A024C0449F8781048204BFE4820482048A09840 +8117:00803C8024FC255426543CA42524264424943D0825FC25042504450455FC8904 +8118:004078204BFE4A024C0479F8480048004BFE789048904890491249124A0E9C00 +8119:00283C242424242027FE3C20252024B224B43C6824A825242622442054A08840 +811A:01007900491E4B924912791249124FD2491279124A1A4A944FD04A5048109810 +811B:00007BFC480049244A487C904A48492448007BFC48404840484048404FFE9800 +811C:00003DFE2410242024FC3C84248424FC24843C8424FC24842484448454FC8884 +811D:004078204BFE480049F87908490849F848007BFC480848304820482048A09840 +811E:00203C2024A824A824A83D742622242024203DFC242024202420442057FE8800 +811F:00043C1E25E0242225123C942480240825FE3C08248824482448440854288810 +8120:0004780E4BB8488848887928492E4BA848A87AA84AA8493E49004A804C7E9800 +8121:000078064BB8488848887908493E4B8848887A884A88493E49004A804C7E9800 +8122:00803C8024FE250026FC3C8424A4249427FE3C842524251425FE440454288810 +8123:3FFC20002FF820003FFC24482430260E2FF828082FF848084FF8880808280810 +8124:000079FE49004900497C7900490049FE495079524954494849484A444A529C60 +8125:0020782048204BFE482078204924492449247AAA482048504850488849049A02 +8126:00107814481248104BFE7810489048504848780848884AA84A9A4AAA4C669802 +8127:00403C402488250437FE2C02248825442E4234F8258826502420445055888E06 +8128:00203C2027FE242024203DFC2524252425FC3C20247024A82524462254208820 +8129:1080108011F821082A906C60A9982E0629F8290829F8290829F8210821282110 +812A:00C23C342418246425823C2025FE245024903DFE26922492249A449454108810 +812B:00107890488849084A047DFA49084908490879F848904890489049124A129C0E +812C:0008783C4BC048044A44792848004BF8481078204FFE48204820482048A09840 +812D:000079FC49044904490479FC480048004BFE7820482049FC482048204BFE9800 +812E:0008783C4BC048444A247928490048404BFE788849084B904860485049889E04 +812F:004878444BFE484048407BFC4A444A444BFC7A444A444BFC4A444A444A549A08 +8130:00003DFE2400240024FC3C842484248424FC3C00248424442448440055FE8800 +8131:010478844888481049FC79044904490449FC785048504890489249124A0E9C00 +8132:00007BFC4A044A044BFC7A004A204A224BB27AB44AA84AA84D244D244AA29840 +8133:00427A2249244904480878004A0A4A8A4A527A224A524A8A4B0A4A024BFE9802 +8134:00003DFE2410242024683CA42522242024003CFC248424842484448454FC8884 +8135:000079FC4904490449FC7800480049FC482078204BFE48204850488849049A02 +8136:000079FC49044904490479FC482048204BFE7A224A524A8A4B0A4A024A0A9A04 +8137:004278E24B82488A488A788A4FEA488A498A79CA4AAA4A824C824882488A9884 +8138:0020782048504850488879044AFA480048447824492448A8488848104BFE9800 +8139:00003CFC248024F824803CF8248027FE25403D24252825102508454455828900 +813A:004078204BFE48004888788849544A22480078204BFE48204820482048209820 +813B:002078204BFE482049FC78244BFE482449FC78204920493E49204AA04A7E9C00 +813C:00007BFE482048204BFE7A224A224B324AAA7AAA4B764A664A224A224A2A9A04 +813D:00503C48248024FE25903E9024FC249024903CFC24902490249044FE54808880 +813E:004078804BFC4A244A247BFC4A244A444BFC789049104FFE4810481048109810 +813F:00203C2027FE242024203DFC2420242027FE3C4024A425A82690448854C68880 +8140:00203C202450248825043EFA240025FC25543D5425FC2554255445545504890C +8141:0084788C49084FBE49087908490849084FBE79084908490849084A08AA089408 +8142:00003DFC2524252425FC3D24252425FC24203FFE247024A82524462254208820 +8143:00203D2424A8242025FC3C4027FE248825043EFA2488248824A844925482887E +8144:00083C3C25E0242027FE3CA824A824A827FE3CA824A827FE2420442055FC8800 +8145:00203CA224A2252424503C882704242224203CA424A425282450448855048A02 +8146:00507850485049FC49547954495449FC4954795449544BFE4800488849049A02 +8147:001C79E0482048204BFE78A849244A4248407BFE4888490848D0483048489984 +8148:002078204BFE482049FC78204BFE480049FC790449FC490449FC490449149908 +8149:000078404B9C4A044A047B9C4A044A044BFC789048904890489049124A129C0E +814A:0088788848884BFE488878884FFE480049FC7904490449FC4904490449FC9904 +814B:008078404FFE492049207A3C4A444E644A947B484A484A304A204A504A889B06 +814C:004078804BFC49104A487C464BF84A484A487BF84A484A484BF848424842983E +814D:002078204850488849447A2249F848084850782048A44A824A8A4A8A4C789800 +814E:7EFC48447E4442287E1048287EC600001FF010101FF010101FF0101010501020 +814F:00007BDE4842494A4884794A4A524C2048007BDE48524952489449484A549C22 +8150:00803FFE2208220825FE2C883448245820802FFC29442AA4488449448A24080C +8151:002078104BFE4A004A447A444A844ABE4B847AA44A944A944C844C8448949888 +8152:00003DFC2504250425FC3D10251025FE25103D10257C254425444544557C8A44 +8153:0090789048904F9E4890789048904B9C4890789048904F9E4890489048909890 +8154:0040782048204BFE4A027C9449084A04480079FC48204820482048204FFE9800 +8155:004078204BFE4A024D04790049DE4A524A527B524C9A4894491049124A129C0E +8156:002078204BFE482049FC792449FC492449FC7820487048A849244E2248209820 +8157:00203C2025FC252425243DFC2524252425FC3C0027FE24882488448855088A08 +8158:00007BFE4A024A024BFE7A224A224AFA4A227A324A2A4BFE4A024A024BFE9A02 +8159:004078204BFE4A02480079FC480048004BFE7820492849244A224C2248A09840 +815A:004078204BFE4A024C0478004BFE482048207920493C49204AA04A604C3E9800 +815B:00003DFE2502250225FE3D0025FC252025443DFE2512251025FC4510561089FE +815C:00883C8827FE248824883CF82488248824F83C2027FE247024A8452456228820 +815D:00003DFC2420244025FC3D542554255425443D2C242027FE2450448855048A02 +815E:00403C7C248424F824083DFE244024A425383C58249425342454449255508820 +815F:00403C2025FE250226043DFC2440248825FC3C24242025FC2420442057FE8800 +8160:002078204BFE482049FC78404BFE488849047AFA482049FC4820485048889B04 +8161:000079FC4904490449E4792449244BFE4A027AFA4A8A4A8A4AFA4A024A0A9A04 +8162:01FC7924492449FC4924792449FC482048207BFE4A224A2A4AFA4A0A4A029A06 +8163:0040782049FC4800488878504BFE4A224C2479FC492449244934492848209820 +8164:00203C1025FE240024843C4825FE240024FC3C84248424FC2484448454FC8884 +8165:00007BF84A084BF84A087BF848404A404BFC7C4048404BF8484048404FFE9800 +8166:009279244A4849244892784048804BFE4A027A8A4A524A224A524A8A4BFE9A02 +8167:004078A049104A084DF678004BC44A544A547BD44A544A544BD44A444A549AC8 +8168:00203D242524252425FC3C0027FE242024403DFC25542554255445545554890C +8169:002078204BFE482048207BFE4A8A4A524AFA7A224A224AFA4A224A224A2A9A04 +816A:00007BFE4A2248204BFE782049FC492449FC792449FC48204BFE482048209820 +816B:00083C3C25E0242027FE3C2025FC252425FC3D2425FC242025FC442057FE8800 +816C:00003CFC2448243025FE3C522494251026303C2025FE247024A8452456228820 +816D:00003DDC2554255425DC3C0025FC240025FE3C8024FC24042404440454288810 +816E:000079FC4924492449FC7924492449FC4800784048244AA24A8A4C8848789800 +816F:00043C1E25F0251025103DFE2510257C25443D7C2544257C25444544557C8A44 +8170:00007BFE485048504BFE7A524A524BFE480078404FFE48884990486048D89B04 +8171:00107810487C4B1449FE79144A7C4A104F7C791049FE4D104A104B004CFE9800 +8172:00003DFC2524252425FC3D24252425FC24003FFE252025222514454855848902 +8173:00007A9E4A524A524D5279124A924A524C327BD24A5A4A544A504A504BD09A50 +8174:00203C2024A0252C25243D2425AC252425243DFC252424502450448855048A02 +8175:00007BDE4A424A424A427BDE4A004A3E4BD27A124A144BD44A084A144A249A42 +8176:00203DDC2514251425143DD42526250025DC3D14251425D42708450855148922 +8177:00003DFC240024F824883C8824F8240025FC3D24252425FC2524452455FC8904 +8178:00003CFC248424FC24843CFC240025FE24803CFE252A264A2492452254548888 +8179:00403C4024FE248025FC3E8424FC248424FC3C40247C24C42528441054688986 +817A:0040788049FC490449FC790449FC482048327BB448A8492849244A244CA29840 +817B:001878144FFE48104BD078104BF048104BE87A284AA84AA84AAA494A4A269C22 +817C:00003DFE2420244025FC3D542554257425543D54257425542554455455FC8904 +817D:00003CF82488248824F83C88248824F824003DFC255425542554455457FE8800 +817E:0248794849504FFC48407FFE49104A084DF67810491049FC48044BE448149808 +817F:00007A7C49444944487C78444F44497C4950794A49444954496249424A809C7E +8180:004078204BFC490848907BFE4A024C4448207BFC488048F84888490849289A10 +8181:00883C50240025FE24503DFC245427FE24543DFC245024D82554465254508850 +8182:2040FEFE21003C1C24E0449454A888C61FF010101FF010101FF0101010501020 +8183:00003CF824A824A824D83C8824F8240024003DFC255425542554455457FE8800 +8184:00A03D2C2524252425AC3D24252425FC24203DFC248824502420445054888B06 +8185:00203C1025FE2510257C3D1425FE2514257C3D10257C254425444544557C8A44 +8186:002078204BFE482049FC78204BFE4840488879F048244BFE482249244AA29840 +8187:00107A20497C49444844787C4B404940497C79444944497C49444A804C7E9800 +8188:00007BFE480049FC4904790449FC48004BFE7A8A4A524BFE4A224A224A2A9A04 +8189:01043C842488240027FE3C002488250426023DFC255425542554455457FE8800 +818A:002878244BFE482049FC792449FC492449FC792448084BFE4888484848489818 +818B:08202AA44D28145022887FFE40029FF410101FF010101FF01010101010501020 +818C:00203D2424A8255424883D0426FA248824883CF82488248824F8448854888898 +818D:00203C4025FC250425543D242554250425FC3C00251225D4251845525592890E +818E:001E7BE0492248944840788849F0482048C479FE482248204BFE485048889B06 +818F:01007FFC08200FE000007FFE48228FE400001FF010101FF010101FF010101030 +8190:2040FEFE21003C1C24E0449454A888C601003FF8228824482108228824482018 +8191:004078204BFE4A024C1479E04900490049FC791049104FFE4800489049089A04 +8192:00007BFE4A004A7C4A447A444A7C4A004AEE7AAA4AAA4AAA4AEE4A004BFE9800 +8193:010079FC4A004DF8490879F8490849F848007FFE49004BFC4CA449244A549888 +8194:004078204BFE4A504A507BFE4A524A524BFE7A004A924AD44A984A924AD29C8E +8195:000077FE542A542657FE742257AA56AA57AA74325596562E5446548257FEB402 +8196:00207A20497C48A4481878E64B10497E4910797C491049FE491049104AFE9C00 +8197:00207A224BFE4890488879FE4B104D1049FE7910491049FE4910491049FE9900 +8198:00007BFE485049FC4954795449FC480049FC78004BFE482048A849244AA29840 +8199:00007BBE48A248A248BE7B884A084A3E4A2A7BAA48AA48BE4888488A4D7E9A02 +819A:010001FC01003FFE20022FFC28842FFC28842FFC240827F8240847F844088418 +819B:0020792448A84BFE4A0278F84888488848F87820482049FC482048204BFE9800 +819C:008878884BFE4888480079FC490449FC490479FC48204BFE4850488849049A02 +819D:002078204BFE487048AC7B224850488849247A22492448A849244A2248A09840 +819E:00203DFE242025FC25243DFC252425FC24223DFE240825FE2508448854288810 +819F:004078204BFE482048487AF249244A5248F8780848204BFE4820482048209820 +81A0:00007BDE48424A52494A7A52482848C44B1278604988483249C4481848609B80 +81A1:0020792448A849FC48407BFE488849044BFE7D0449FC490449FC490449FC9904 +81A2:002079FC49244BFE492479FC482049FC492479FC48404BFE488849D048709B8C +81A3:004078204BFE4A8A49047BFE4840488849FC7824482049FC482048204BFE9800 +81A4:000079FC48204BFE4A2279AC482049AC480079FC480449FC4804480449FC9804 +81A5:10141010FDFE11107DD43948554A929611223FF8228824482108228824482018 +81A6:0020792448A84BFE48A879244A224904490479DE4A444D54489E49044A049C04 +81A7:00203DFC2488245037FE2C0025FC25242DFC352425FC242025FC442057FE8800 +81A8:008278824FF4488848807BE248024BE44A287A204BE04A22494248744F889A10 +81A9:00147BFE48104BD048107BD048104BD04A507BD04A504BC84A4A4BCA49869A42 +81AA:0040782049FC488848507BFE4A224C2449FC7924492C482049FC490449FC9904 +81AB:00203C2025FC242025543C88250426FA24883CF8248824F8242044A855248860 +81AC:00387BC048784BC048787BC4483C480048C67B3849CE4F3849CE4F38494A9986 +81AD:00203DFC252425FC24203FFE240025FC25043DFC250425FC250445FC54888904 +81AE:0020782049FC48204BFE79084B9C490849887E3E48004BFE4890489049129A0E +81AF:00107BD248544948488A79044AFA4C0049FC7904490449FC490448884FFE9800 +81B0:003C7BE0492448A84BFE78A849244A0249FC7924492449FC4924492449FC9904 +81B1:011078944BD248124A5079904FFE48104BD27A524A544BD44A4A4A4A4BD69822 +81B2:00A0789049FE49104B107DFE4910491049FE7910491049FE49004AA44A529C52 +81B3:008878504BFE482049FC78204BFE492448A87BFE480049FC4904490449FC9904 +81B4:00803C8025FE275425543D5427FE255425543D5427FE24002554452A562A8800 +81B5:00883C8827FE248824203FFE2488248825543E22242027FE2420442054208820 +81B6:00007BDE4A524BDE4A527BDE4A024AFA4A227A724A224A224AFA4A024A0A9A04 +81B7:0280724E54EA55AA59AA7EEA52AC54AA55EA7F8A528A52AA54AC54E858A8B008 +81B8:002079FE4C404AFC49107AFE48004EFC4A847AFC4A844AFC4A844A8C4D0098FE +81B9:00203DFC2420248827FE3C8825FC250425FC3D0425FC250425FC448855048A02 +81BA:00803FFE225024FC2D9036FC249024FC200027F8240827F8440847F884080418 +81BB:00207BFE48004BFC4A047AF44A944BFC480079F8490849F8490849F848009BFE +81BC:00007A7C49444974485478544EFE4A824ABA7AAA4ABA4A824A8A4A844D0098FE +81BD:00803CF8250827FE25443D9225FE2500257C3D00257C2500257C4544557C8A44 +81BE:00203C502488257426023DFC252425AC25243DFC240024F8248844F8548888F8 +81BF:00503DFC255425FC25543DFC240025FE25003D7C250025FE2550455455488A66 +81C0:7E7842487E4854867E7854487E3094CE62001FF010101FF010101FF010101030 +81C1:00207BFE4A884A504BFE7A504AFC4A544BFE7A544AFC4A504AD84D544E529850 +81C2:3E1022FE3E4420287EFEA2103EFC221000001FF010101FF010101FF010101030 +81C3:004078204FFE48284A247A7E4CC84F48497E7A484CC84F7E49484A484C7E9840 +81C4:0040787C48404BFE4A427A784BC44A3C4A007BFE4A404BA44A584DB44C5299B0 +81C5:00003DFC2554255425FC3C8025FE264225F23D52255225F2244A47FA540A8804 +81C6:0040782049FC488848507BFE480049FC490479FC490449FC48204A944A8A9C7A +81C7:00A0789049FE4B2049FC792049FC492049FE79004BDE4A524A524A724A029A06 +81C8:00887BFE488849FC490479FC490449FC488079FE4A224D52490249FA480A9804 +81C9:00203C202450248825043EFA2400240025DC3D54255425DC2488448855548A22 +81CA:00F83C88248824F824003DDC2554255425DC3C2027FE247024A8452456228820 +81CB:7E7842487E4854867E7854487E3094CE63003FF8228824482108228824482018 +81CC:008878884FC848BE48887BC8481C4BD44A547A544BD44A48498848D44F149A22 +81CD:0080704057FC511050A47F58555455525B587000520853F8520853F85208B408 +81CE:03DE78424A52494A4A5278204BFE4888488879544A2248204BFE482048209820 +81CF:004078204BFE4A0249FC79484A5049FC4B0479FC490449FC490449FC48889904 +81D0:001C3DE0242027FE24203DFC25AC257425FC3C2025FC242027FE440055548A2A +81D1:000079FC48204BFE4A2279AC482049AC48007BFE482049FC495449544954990C +81D2:00887BFE48A8489049FE7B2049FC492049FC792049FE49004BFC488848709B8E +81D3:0090709057FE5094500A77FE540855E8554A75EA552A55EA554C55EA5416B862 +81D4:03DE7A924BD24A544BC87A944BE2480049FC790449FC490449FC490449FC9888 +81D5:004078204BFE4A504BFE7A524BFE4A004A947AD84A904AD24A8E4C0049549A2A +81D6:2FEC48244BA4682C4BA46AAC4BA4FFFE10103FF8D0161FF010101FF010101030 +81D7:00207BFE4A8A49FC488879FC490449FC490479FC490449FC4890489449129A0E +81D8:01247A48492448004BFC7A944A644A944BFC7A484B684A484B6A4A4A4A469B62 +81D9:0110711057FC511051F0720852EA56AC52A872AA56EA5A06500052A45252B452 +81DA:0040787C48404BFC4A447BF04A444AFC4AA87AF84AA84AF84A004DFC49549BFE +81DB:01FC78204BFE4A224DAC782049AC489049FE7B204DFC492049FC492049FE9900 +81DC:0108752857BE594857BE731855AA5946500073F852085248524850B05108B604 +81DD:0100FFFE20003FF800003FF820083FF8054077DC555477D4511C7FF65556B922 +81DE:03DE7A524BDE4A524BDE7A524BDE489049FE79104BFE4D1049FE491049FE9900 +81DF:0090709057FE5094500A71FE550857E8514A71EA5F2A55EA554C59EA5216B462 +81E0:210447C88812F3BC20084B92F83E0380AAAAABAA01003FF82288244821082298 +81E1:2450FF4824FE3D9008FC7E9052FC7E9024FE4280BFF822882448292822882458 +81E2:052877BE594857BE531875AA594653FC520473FC520453FC520453FC5108B204 +81E3:00003FFC2100210021003FF820082008200820083FF82100210021003FFC0000 +81E4:00007E0048FC484448447E444244422842287E2848104810482848487E840102 +81E5:00207E204820482048207E204220422042507E5048504850484848887E840102 +81E6:0000FE7E1248124812487E7E42424242424242427E7E124812481248FE7E0000 +81E7:002800245FFE502057A07520152017A4F4A454A857A85510951227AA20464082 +81E8:00407E40487E488049007E7C42444244427C7E0048EE48AA48AA48AA7EEE00AA +81E9:0000FEFE12907EFC42847EFC1290FEFE02007FFC04401830E44E044008401040 +81EA:0100020004001FF01010101010101FF0101010101FF01010101010101FF01010 +81EB:0820082010207F20412041207F20412041207F204120412241227F22411E0000 +81EC:020004001FF010101FF010101FF010101FF00100FFFE054009203118C1060100 +81ED:020004003FF820083FF820083FF820083FF801200110FFFE028004401830E00E +81EE:02001FF010101FF010101FF010101FF0000000FC7F0011101110292845440100 +81EF:02001FF010101FF010101FF010101FF021081110092011102108FFFE01000100 +81F0:02001FF010101FF010101FF010101FF00000FFFE08401F48625014621842E03E +81F1:02001FF01490125011301FF001007FFE4A2291143FF8040007F0081010502020 +81F2:102020207E7C42847F0842FE7E8042BC7EA410A4FEB418A834A25322911E1200 +81F3:00007FFC02000400082010103FF80008010001003FF8010001000100FFFE0000 +81F4:0040FE401040208028FE4508FE881288108810507C50102010501E88F1044202 +81F5:0040FE401078208829504420FE501288110610F87C88108810881E88F0F84088 +81F6:0020FE20102021FE28404440FEBC1284118812887CFE108810881E88F0A84090 +81F7:084008487F4408440840FFFE00407F44104422447F28092A3E12082A0F46F082 +81F8:0000FEFE1010202028444482FEFE1212101010107CFE101010101E10F1FE4000 +81F9:0028F8242024402053FE8A20FA242A2423A4FAA822A822903A92E5AA44460882 +81FA:0100FFFE01003FF800001FF010107FFE40029FF408201FF001003FF80100FFFE +81FB:0020F82023FE402051FC8840FBFE28882134FAE2202021FC3870E0AC43220020 +81FC:00000400387820082008200820083C78200820082008200820083FF820080000 +81FD:040004000FF01010202040408C003078200820083C782008200820083FF82008 +81FE:010005003978210821083D782108210821083FF821080280044008203018C006 +81FF:001001F83F000100FFFE01000D003178210821083D782108210821083FF82008 +8200:00FC7F0002082108111010200C003078200820083C782008200820083FF82008 +8201:060038F8200820083EF8200820083FF808200820FFFE08200820102020204020 +8202:010001007FFC01003FF80200FFFE044008203418D87610101C7010101FF01010 +8203:060038F8200820083EF8200820083FF810001FF820003FFC0004492484940008 +8204:060038F8200820083EF8200820083FF810003FFC400489242494249440280010 +8205:3E7820083C7820083FF800001FF011101FF011101FF002007FF8040818286010 +8206:1100611C47C44204751C47C4410477DC41044104FFFE00000820101020084004 +8207:0A003238238822083A38238820883AB822882288FFFE00000820101020084004 +8208:00002FEC48244BA4682C4BA44AA46AAC4BA44824FFFE00000820101020084004 +8209:0A0033B822083BB820883AB82288FFFE082011102FE8C1061FF0010001000100 +820A:0820FFFE09201FFC30805FF890801FF810801FFC02001C7810081E7810081FF8 +820B:2FEC48244BA4682C4BA46AAC4BA4FFFE80021FF010101FF010101FF01010FFFE +820C:001000F83F0001000100FFFE0100010001001FF010101010101010101FF01010 +820D:01000280044008203018CFE6010001003FF8010001001FF0101010101FF01010 +820E:01000280044009203118CFE6010001003FF8000000001FF0101010101FF01010 +820F:04040E04784408440844FF44084408443E4C22542264224422043E0422040004 +8210:08041C1E71F011101110FD10111011FE7D10451045104508450A7D4A45860102 +8211:08201C20702011FC1124FD2411FC11247D24452447FE450445047D0445140108 +8212:100011F82808445082207C1013FE1022FE24102010207C20442044207CA04440 +8213:08001DFC710411FC1104FDFC108010807DFE464A444A449245227E4244940108 +8214:08001DFC7020102011FEFC50105010887D244622442444B244AA7D2A44A00040 +8215:08201CA270A211241050FC88130410227C2044A444A4452844507C8845040202 +8216:102810242BFE442082207DFC11241124FFFC112411247DFC452445247D24450C +8217:102810242BFE542092207DFC11241124FDFC01247D2445FC452445247D24450C +8218:1020101029FE450282007CF810881088FEF8108010807CFC448444847CFC4484 +8219:00F83F000100FFFE01001FF010101FF00C0C70701010FEFE10107C7C44447C7C +821A:08801CF8710813FE1144FD9211FE11007D7C4500457C4500457C7D44457C0244 +821B:1010101010101E1012FE2210229052908A90049004FE08100810101020104010 +821C:007C3F800108108808907FFE481208101EFC221052900C9008FE101020104010 +821D:02003FF00410FFFE1110222011107FFE440288241FF001001FF021003FF80100 +821E:10003FFC4AA00AA07FFC0AA00AA07FFC101010103EFC4210149008FE3010C010 +821F:020004001FF01010121011101110FFFE10101210111011102010201040508020 +8220:080010003EFC222432242A242A24FE24222432242A242A44224442844B288610 +8221:080010003E7C221032102A102A10FE10221032102A102A10221042104AFE8400 +8222:102020207C204420652455245524FD244524652455245524452445FC54048800 +8223:104020247D244504650454885488FC8844506450542054204450448855048A02 +8224:080010003E78224832482A482A48FE68225832482A482A4A224A428A4A868500 +8225:100020007DFC4524652455245524FD2445FC6500550055004502450254FE8800 +8226:102020207C204420642055FE5420FC204420645054505450448844C855248A02 +8227:081010203E78224832482A482A48FE68225832482A482A4A224A428A4A868500 +8228:1004200E7CF04480648054FC54A4FCA444A464A854A854904510452856448882 +8229:101020907C904488648855245524FE224420644054485444448445FE54828800 +822A:104020207C0045FC6400540054F0FC90449064905490549244924512550E8A00 +822B:104020207C2045FE644054405440FC7C44446444544454444484448455288A10 +822C:080010783E48224832482A862A00FEFC224432442A282A28221042284A448582 +822D:101021107D1045126512551455D8FD10451065105510551245524592550E8800 +822E:102020107C1044FE648254825482FCFE44826480548054804480450055008A00 +822F:102020207C20442065FC55245524FD24452465FC552454204420442054208820 +8230:100021FC7D044504652455245524FD2445246554545054504490449255128A0E +8231:102020207C504450648855045602FCF84488648854A8549044824482547E8800 +8232:082010203E50225032882B242A12FE1023FC32042A082A88225042204A108410 +8233:102020207C20442065FC55245524FD24452465FC552455244524452455FC8904 +8234:108020807C8044FE654055405640FC7C444064405440547E4440444054408840 +8235:082010103E1022FE32822A842A40FE44224832502A602A42224242424A3E8400 +8236:081010103E2022FC32842A842A84FE8422FC32842A842A84228442844AFC8484 +8237:102020107C1045FE642054205444FC8445F8641054205444448245FE54828800 +8238:100020007DFE4408640855E85528FD284528652855E855284408440854288810 +8239:080010783E48224832482A482A8EFF00220032FC2A842A84228442844AFC8484 +823A:100021FC7D244524652455FC5524FD24452465FC552454204420442054208820 +823B:102020207C3C4420642054FC5484FC84448464FC548454804480450055008A00 +823C:104820487C48444865FE54485448FC48444865FE540054484444448454828902 +823D:082010203E3C224432A82A102A28FED6221032FC2A102A9022FE42104A108410 +823E:100023FE7C50445065FC55545554FD5445546554558C55044504450455FC8904 +823F:102020207BFE4850688859044AFAF8004BFE4840688059FC4804480448289810 +8240:1008203C7DC04404654454A85400FDF84410642057FE54204420442054A08840 +8241:081010503E50227C32502A902A10FEFE220032002A7C2A44224442444A7C8444 +8242:104020407CFC44886550542054D8FF2644F8642054F8542047FE442054208820 +8243:100021FC7D24452465FC55245524FDFC4420642055FC54204420442057FE8800 +8244:102021247CA444A8642055FC5504FD0445FC6504550455FC4504450455148908 +8245:102020207C504488650456FA5420FC2047FE6420552855244622442254A08840 +8246:082010103EFC228432842AFC2A84FE8422FC32A22AA42A98229042884AC48482 +8247:100020067BB8488868885908493EFB8848884A886A88593E49004A804C7E9800 +8248:102020107DFE44206448548455FEFC0244A864A854A854A844A844AA552A8A06 +8249:100021FC7D04450465FC5500551CFD70451C6570551E55F04510451255128A0E +824A:081010203E7C2244327C2A442A7CFE10221032FE2A922A92229242964A108410 +824B:100021FC7C084410642057FE5420FCA0444065FC555455544554455457FE8800 +824C:102020207850488869445A2249F8F8084850482068A45A824A8A4A8A4C789800 +824D:100021FC7D04450465FC55105510FDFE45106510557C554445444544557C8A44 +824E:102020407DFC450465FC550455FCFC0047FE6420542055FC4420442057FE8800 +824F:108420487DFE4420644054FC5484FC8444FC6484548454FC4484448454FC8884 +8250:105021247D54450465FC54505488FD4444786488548855504420445054888906 +8251:102020107DFE4502650255FE5500FD0045FE65AA56AA54FE44AA44AA54AA8886 +8252:100021FE7D02457A6502557A5502FC0044FC648454FC548444FC448454FC8884 +8253:104821487D4847FE654855485578FD0045FE642057FE547044A8452456228820 +8254:104020207DFE4548654855FE5548FD78450065FC554455484528451055288AC6 +8255:102020107DFE4484644855FE5502FE24441065FE5440547C4444448454948908 +8256:108420447C4845FE642054FC5420FDFE4440648054FE55104610441055FE8800 +8257:110420847C88440067FE54005488FD04460265FC555455544554455457FE8800 +8258:10A0212C7D24452465AC55245524FDFC442065FC548854504420445054888B06 +8259:102020207C50444864A455FE5684FCFC448464FC548054FC45444544567C8844 +825A:105020507DFE445065FC555455FCFD5445FC640054F8548844F8448854F88888 +825B:102021FC7D2447FE652455FC5420FDFC452465FC544057FE448845D054708B8C +825C:115421547BFE495469545A724C00FBFE4A22482069FC592449244924492C9820 +825D:100021FC78204BFE6A2259AC4820F9AC480049FC680459FC4804480449FC9804 +825E:111021107DDE46A8644454505554FCD8445064D8555456524490449255128A0E +825F:102021FC7C88445067FE540055FCFD2445FC652455FC542045FC442057FE8800 +8260:101023D278544948688A59044AFAFC0049FC4904690459FC490448884FFE9800 +8261:1020212478A84BFE6A0258F84888F88848F8480069FC592449FC492449FC9904 +8262:102020207BFE492469245AAA4FFEF80049FC4904697459544974490449FC9904 +8263:1040207C78404BFE6A425BF84A44FAFC4AA84AF86AA85AF84A204DFC4844998C +8264:110420887BFE482069FC58204BFEF854499248906BFE589048D44B8A489699A2 +8265:101023D47A524A526BD058104FFEFA504BD24A526BD45A544AEA4F4A48569862 +8266:100823E87A884BEE6A285BF44A82FBE2480049FC69545954495449544FFE9800 +8267:108823FE7CA8449065FE572055FCFD2045FC652055FE550047FC448854708B8E +8268:108823FE78884BFE6A0259FC4800FBFE484048A26B5458B84B5448924B509820 +8269:104020207BFE488868525FAC4AAAFAA84DAC4800690459FC490449FC49049A04 +826A:108021F87E0845FC652455FC5524FDFC4554662A55FC550445FC450455FC8904 +826B:1040207C78404BFC6A445BF04A44FAFC4AA84AF86AA85AF84A004DFC49549BFE +826C:11F022107BFC4E046BFC5A244BB8FA2249FE4A106FFC5A444BFC48D0494A9A3E +826D:110822947BDE4EB46BDE5A944BDEFA944BDE4A106FFC59084890486049989E06 +826E:00003FF0201020103FF0201020103FF022002208211020A02440282030182006 +826F:020001003FF0201020103FF0201020103FF02208211020A02040242028183006 +8270:000001F8FD08050845F84508290829F811441148293029204510454881860100 +8271:2200227CFF4422443E7C08447F44497C7F5208527F540848FF48144422624140 +8272:080008001FE020204040BFF82108210821083FF820002002200220021FFE0000 +8273:1080108010F8FD08121015FC11247D24112411FC1100FD001102110210FE1000 +8274:28202820287CFE442A882A7CFE54A854A854FF7C294029402D424A42483E8800 +8275:4240244000FC7E88251024FC24A424A4FFA424FC2480248024824482447E8400 +8276:28402840FEF8AA88FF10AAFCFEA400A4FEA400FC7C8044807C8248823E7EC000 +8277:2A107F10AA9CFFA4AAC8FFBEAAAAFFAA002AFFBE00207F2041227F222222FF9E +8278:10101010101092929292929292929292FEFE1212101010102010201040108010 +8279:08200820FFFE0820082000000000000000000000000000000000000000000000 +827A:08200820FFFE0820082000003FE000C00300040008001000200420041FFC0000 +827B:08200820FFFE08200A20020002007FF802080408040808080808100820504020 +827C:08200820FFFE0820082000007FFC010001000100010001000100010005000200 +827D:08200820FFFE08200820040004007FE0042004200820082010222022401E8000 +827E:04400440FFFE044000200820082004400440028001000280044008203018C006 +827F:04400440FFFE044000003FF8040804100420047C080408041004204440288010 +8280:08200820FFFE0820082000003FF8020802080208020804080408080810506020 +8281:08200820FFFE0820082000000FE00820082008200820102210222022401E8000 +8282:08200820FFFE0820082000007FF8020802080208020802500220020002000200 +8283:08200820FFFE0820082000000FE0082008200A200920092210221022201E4000 +8284:08200820FFFE08200820020002007FE002200A200420062009221022201E4000 +8285:08200820FFFE08200A200210021002FEFF00020001000100008000420032000E +8286:08200820FFFE082000003FF0121011200820044002800100028004401830E00E +8287:08200820FFFE08200820010001003FF821082108210821082128211001000100 +8288:09200920F93E0920092001003FF8010001000100FFFE01000100010001000100 +8289:08200820FFFE0820082000003FF8010001000100FFFE01000100010001000100 +828A:04400440FFFE0440000000F83F00010001000100FFFE01000100010001000100 +828B:08200820FFFE082000003FF8010001000100FFFE010001000100010005000200 +828C:0820FFFE082000003FF800000000FFFE040008000FF000100010001000A00040 +828D:04400440FFFE0440100010001FF8200840088808040802080208000800500020 +828E:04400440FFFE044000003FF8000800083FF8200020003FFC0004000400280010 +828F:08200820FFFE082009200100010001003FF801000100010001000100FFFE0000 +8290:08200820FFFE082008200000FFFE020002000240022002100208020002000200 +8291:08200820FFFE082000003FF00010001000103FF020002004200420041FFC0000 +8292:08200820FFFE0820082002000100FFFE0800080008000800080008000FFC0000 +8293:08200820FFFE0820082000001FE0004000800100FFFE01000100010005000200 +8294:01002108210821083FF8010011101010929292929292FEFE2212201040108010 +8295:08200820FFFE08200A20020007F808081010642002400280010006001800E000 +8296:08200820FFFE0820092001000100FFFE0100028002800440082010102008C006 +8297:08200820FFFE0A20040008101FE000C003040C083FF01020004001800E007000 +8298:08200820FFFE082008202080208020883C9020A020C0208424842884307C0000 +8299:08200820FFFE0820092001003FF801000100FFFE01000280044008203018C006 +829A:08200820FFFE082009200100FFFE01002108210821083FF8010A0102010200FE +829B:08200820FFFE082000003FF002100210FFFE021004103FF0081010002000C000 +829C:08200820FFFE082000003FF0020002007FFC02800480048008841084207CC000 +829D:08200820FFFE08200A20010001007FF8003000C003000C003000480087FE0000 +829E:04400440FFFE044010001FFC20005FF880003FF0001000100010000A00060002 +829F:08200820FFFE082000000FE008201020601C00001FE00820044003801C70E00E +82A0:08200820FFFE08200820020001007FFC0820082004400280010006C01830E00E +82A1:04400440FFFE0440080008000FFC10042108410001000280044008203018C006 +82A2:08200820FFFE082000000800080013FC3000500090001000100017FE10001000 +82A3:08200820FFFE0820082000007FFC008001000300056009183104C10201000100 +82A4:04400440FFFE044000007F400240044008400F40F840484208420842283E1000 +82A5:08200820FFFE082009200280044008203458C446044004400840084010402040 +82A6:08200820FFFE0820092000803FF8200820083FF8200820002000400040008000 +82A7:08200820FFFE082000003FF0002006400180FFFE008200840080008002800100 +82A8:04400440FFFE044000003FF0082008400CF80A08111010A0204020A043188C06 +82A9:08200820FFFE08200920028004400A203118C1061FE000200040004000800100 +82AA:08200820FFFE082000783F802080208020803FFE2040204020242814300C2004 +82AB:08200820FFFE082000001FF0000000007FFC044004400440084408441044603C +82AC:08200820FFFE082000400440082010102008DFE6042004200820102021404080 +82AD:08200820FFFE082000003FF82108210821083FF820002002200220021FFE0000 +82AE:08200820FFFE0820092001003FF8210821082288244828282008200820282010 +82AF:08200820FFFE0820082002000100008004082404240244028410041003F00000 +82B0:08200820FFFE092001007FFC010001003FF0082004400280010006C01830E00E +82B1:08200820FFFE082000000888089010A030C050809180128214821082107E1000 +82B2:08200820FFFE0820092002800C603018C80608E00F0078080808080807F80000 +82B3:08200820FFFE08200A200100FFFE0400040007F0041008100810101020A04040 +82B4:08200820FFFE0820100010001FF8224842488488088811082208440808501020 +82B5:08200820FFFE0820092001003FF0011001100110FFFE0280044008203018C006 +82B6:08200820FFFE082010001FF8200844088408090810883FC81048000800500020 +82B7:08200820FFFE08200820010001000100110011F81100110011001100FFFE0000 +82B8:08200820FFFE0820082000003FF800000000FFFE02000400082010103FF81008 +82B9:08200820FFFE082000381FC0100010001FFC1040104010402040204040408040 +82BA:08200820FFFE0820082000F03F0001000100FFFE01000280044008203018C006 +82BB:080008001FF8220852481FC80408085030201FF8220852489FC8040808503020 +82BC:08200820FFFE0820082000F83F00010001F83F00010001FC7F020102010200FE +82BD:08200820FFFE082000003FFC0020102020203FFE012002200C203020C0A00040 +82BE:08200820FFFE082009200100FFFE010001003FF8210821082108212821100100 +82BF:08200820FFFE0820100017F8210821106120A13C210421042204220424282810 +82C0:08200820FFFE08200A2001007FFC000000000FE00820082008221022201EC000 +82C1:08200820FFFE0820082000000820082008200820082014501250228841048202 +82C2:08200820FFFE082009200100110811081110212002800280044008203018C006 +82C3:08200820FFFE08200A200200FFFE040004000FF008101420224041808670380E +82C4:08200820FFFE08200A2001000100FFFE02000200024002200210020002000200 +82C5:08200820FFFE0820082002044244244414440844084414442404420482140008 +82C6:08200820FFFE08200820200021FC2C44F0442044204424842884310422280410 +82C7:08200820FFFE092001007FFC010001001FF0010001007FFC0104010401140108 +82C8:08200820FFFE082000003FFC210021002FF82108210822082208440848509020 +82C9:08200820FFFE082000003FFC22402240224022442444243C280020003FFC0000 +82CA:08200820FFFE082000003FFC2000200027E02420242024A024444404440483FC +82CB:08200820FFFE0820082000001FF010101110111011101290028004821882607E +82CC:04400440FFFE04400800083009C00E000800FFFE0900088008400A300C0E0800 +82CD:08200820FFFE082009200280044008203018CFE60820082008A80848080807F8 +82CE:08200820FFFE08200A2001007FFE4002800400000000000000007FFC00000000 +82CF:08200820FFFE08200A2002007FF0021002142212221224124410081010A02040 +82D0:0820FFFE082000003FF8010801083FF8210021003FFC030405041928E1100100 +82D1:04400440FFFE044010001EF812882288228852A88C90048208821082207E4000 +82D2:08200820FFFE0820082001003FF8210821083FF821082108FFFE200820282010 +82D3:08200820FFFE0920028004400A203118C1061FE0002000400C80030000800040 +82D4:08200820FFFE08200400082010103FF8000800001FF01010101010101FF01010 +82D5:08200820FFFE082000007FF80408080810502020DFF81008100810081FF81008 +82D6:08200820FFFE0820092001003FF82108210821083FF82108210821083FF82008 +82D7:08200820FFFE0820082000003FF82108210821083FF82108210821083FF82008 +82D8:04400440FFFE044000003FF82008200827C824482448244827C8200820282010 +82D9:08200820FFFE08200A20010000007FFC001010100820044004800000FFFE0000 +82DA:08200820FFFE082000003FF8210821083FF8210821083FF82108410841288010 +82DB:08200820FFFE082000007FFC001000101F10111011101F101110001000500020 +82DC:08200820FFFE082000003FF8200820083FF8200820083FF8200820083FF82008 +82DD:08200820FFFE082008200000044004447C480470044004420C423442C43E0400 +82DE:04400440FFFE044008001FF020105F90109010901F901050102410040FFC0000 +82DF:04400440FFFE044010001FF8200840089F88108810881F881088000800500020 +82E0:08200820FFFE08203FF8200820083FF8208020803FFC204020242414280C3004 +82E1:08200820FFFE0820000024102210211021102010202024202850308821040602 +82E2:08200820FFFE082000001FF0101010101FF0100010001FF8100810081FF81008 +82E3:08200820FFFE082000003FF8200020003FF0201020103FF02000200020003FFC +82E4:08200820FFFE082000007FFC00800100036005101908610401000100FFFE0000 +82E5:08200820FFFE08200A200200FFFE040008001FF028104810881008100FF00810 +82E6:08200820FFFE0820092001000100FFFE010001001FF01010101010101FF01010 +82E7:08200820FFFE08200A2001007FFE400280043FF8010001000100010005000200 +82E8:04400440FFFE04401FF8100810081FF810001200123813C02204220441FC8000 +82E9:08200820FFFE0820092002003FF82008200820083FF82008200820083FF82008 +82EA:08200820FFFE082000007FFC010001003FF82108228824482828200820282010 +82EB:08200820FFFE08200920010001FE0100010001003FF82008200820083FF82008 +82EC:08200820FFFE082000003FF8210821082108210822882448282820083FF82008 +82ED:08200820FFFE08201040104021FC24444444F844104420444884FC8445280210 +82EE:08200820FFFE0820000008200820102031245124912411241124112411FC1004 +82EF:08200820FFFE0820010001007FFC03800540092011102FE8C106010001000100 +82F0:08200820FFFE082000007E10021002103E10202040287E24024402FE14420800 +82F1:08200820FFFE0820010001001FF0111011101110FFFE0280044008203018C006 +82F2:04400440FFFE0440080008001FFC2400440087F00400040007F8040004000400 +82F3:08200820FFFE0820040008001FF02820444003801C70E30E00C00E0001800040 +82F4:08200820FFFE082000001FF0101010101FF0101010101FF010101010FFFE0000 +82F5:08200820FFFE0820010011001FF821000100FFFE01000280044008203018C006 +82F6:08200820FFFE082009200280044009203118C106010009201110210805000200 +82F7:04400440FFFE044010101010FFFE1010101010101FF01010101010101FF01010 +82F8:08200820FFFE0820001000F83F00111009200100FFFE01000100010005000200 +82F9:08200820FFFE082000007FFC01001110091009200100FFFE0100010001000100 +82FA:08200820FFFE082000001FF012101110FFFE1010221021103FFC001000A00040 +82FB:04400440FFFE044008100810101013FE30105110909010901010101010501020 +82FC:08200820FFFE0920110011003FFC4100810001003FF8010001000100FFFE0000 +82FD:08200820FFFE0820000000781FA012201220122012101290224822A843248202 +82FE:08200820FFFE0820082001000090089048244842488289020E101810E7F00000 +82FF:08200820FFFE0820092001003FF801000100FFFE0380054009203118C1060100 +8300:08200820FFFE082004403FF8044804481FF8144024403FFC0844105420484040 +8301:08200820FFFE082009202108210821083FF8010801004104410441047FFC0004 +8302:08200820FFFE0820009000883FFC2080208820882050205020244054418C8604 +8303:04400440FFFE0440100009F84908210825080528091071021102110210FE0000 +8304:08200820FFFE082000001000107C7E441244124412441244224422444A7C8444 +8305:08200820FFFE082000003FF0002006400180FFFE0282048408803080C2800100 +8306:08200820FFFE082000000C0070FC4084448444845C8464944888088010806080 +8307:04400440FFFE044002100208FFFE040004000FF008101420224041808670380E +8308:08200820FFFE08200440044024442448275024602440244224422F42F03E4000 +8309:08200820FFFE092001000100FFFE010001007FFC0380054009203118C1060100 +830A:04400440FFFE0440001000781F80100010001FFC1040104010401040FFFE0000 +830B:08200820FFFE082008783F802080208020803FFE2040204022242914308C2084 +830C:04400440FFFE0440080008401040104037FE5040904010401040104013FC1000 +830D:04400440FC7E0440144010001FF8200840089F88108810881F88000800500020 +830E:04400440FFFE044000003FF0006001800E70700C1FF0010001000100FFFE0000 +830F:08200820FFFE08200820004004207FFC04800488089008A010C223824C82807E +8310:04400440FFFE0440100010001FF822484A4884880A8811082288440808501020 +8311:08200820FFFE092002001FF012101110115010201FFC00047FE4000400280010 +8312:04400440FFFE044010001E7C12442248225052488C4404440854104820404040 +8313:08200820FFFE08200A2001007FFE40028004044004400820082010102008C006 +8314:08200820FFFE082000007FFE4002810401003FF80100010001000100FFFE0000 +8315:08200820FFFE082000007FFE400280041FE0042004203FA004200414040C0404 +8316:04400440FFFE044008000FF010202C4003801C70E00E1FF0101010101FF01010 +8317:08200820FFFE0820020007F808103420024001800FF81808E80808080FF80808 +8318:04400440FFFE044000003FF804080850302000007EFC1224122422444A948508 +8319:08200820FFFE082000900088FFFE0080108810887E50105010242054418C8604 +831A:08200820FFFE0820060078FC408440847E844084408440944E88708000800080 +831B:04400440FFFE044000003FF020103FF020103FF02208211020A024402830300E +831C:04400440FFFE04400000FFFE044004403FF8244824482848303820083FF82008 +831D:08200820FFFE082000003FFC2080208027F82408240827F8208020803FFE0000 +831E:08200820FFFE082000003FFC210021003FF8200820083FF8210021003FFC0000 +831F:08200820FFFE082001003FF00110FFFE01103FF001003FF80100FFFE01000100 +8320:04400440FFFE0440000008400840104037FC50E0915011501248144418421040 +8321:08200820FFFE0A2001007FFC400480081FE000400080FFFE0100010005000200 +8322:08200820FFFE082000047F84082408241F24212451240A24040408043014C008 +8323:04400440FFFE044000001FF010101FF000003FF80100FFFE028004401830E00E +8324:0820FFFE0820020007E01840648003200C4071F806081A10012000C007007800 +8325:08200820FFFE082001003FF801000100FFFE000001003FF801000100FFFE0000 +8326:08200820FFFE09200100FFFE01003FF8210821082128239005601918E1060100 +8327:08200820FFFE0820092001003FF82108210821083FF80100011001F87F042004 +8328:08200820FFFE08204080208020FC0904124814402040E0A020A0211022082C06 +8329:08200820FFFE082000781F80100010001FFC1000100017F82408240847F88408 +832A:08200820FFFE08200100111009100920FFFE04400440044008421042203EC000 +832B:08200820FFFE082008202040102087FE490009001100E1002100210021FC0000 +832C:08200820FFFE0A2002000400FFFE08001040304053FC90401040104017FE1000 +832D:08200820FFFE08200A2001007FFC08201010244844440280010006C01830E00E +832E:08200820FFFE0A20020003F802000200FFFE0000010011101108210445040200 +832F:08200820FFFE0820000008500848104037FE504090A010A01110111012081406 +8330:0820FFFE092001003FF8210821083FF8210821083FF811000A00060019C0E03E +8331:04400440FFFE0540110011003FF841000100FFFE0380054009203118C1060100 +8332:04400440FFFE04401020102020402448448878F008101020142822447EFC0204 +8333:08200820FFFE08200820200017FC90404040484008401040E04020402FFE2000 +8334:04400440FFFE044000003FF82008200827C82448244827C8200820083FF82008 +8335:04400440FFFE044000003FF8210821082FE8210822882448282820083FF82008 +8336:08200820FFFE082009200280044009203118DFF6010009201110210805000200 +8337:08200820FFFE0820000008A00890108030FC57809048105010241054118C1604 +8338:08200820FFFE082000007FFC10101FF010101FF01010103EFFD0001000100010 +8339:08200820FFFE082010001000FE7C124422442244644414440844147C2244C000 +833A:08200820FFFE0A200100FFFE0400082010103FF804480440044008441044603C +833B:1010929292929292FEFE2010401080001010929292929292FEFE221220104010 +833C:08200820FFFE082000003FF820082FE8200827C82448244827C8200820282010 +833D:08200820FFFE082000001040104027FC6444A444244427FC2444204020402040 +833E:08200820FFFE0820082000007FFC082008200820FFFE08200820102020204020 +833F:08200820FFFE0820082000007DF011101110119011501D12E2124212040E0800 +8340:04400440FFFE144010001FF820085FC890481FC810481FC81048000800500020 +8341:08200820FFFE082000007FFC00001FF010101FF010101FF010100000FFFE0000 +8342:0820FFFE0A2002007FFC0440082037D8C0063FF808000FE00020002001400080 +8343:08200820FFFE09200280044008203018CFE6010001001FF0010001007FFC0000 +8344:08200820FFFE08200A2001007FFC040008401F8001100620384001A00E107008 +8345:08200820FFFE0820092002800C603018CFE600001FF01010101010101FF01010 +8346:12041204FFC4122400247FA4122412241224FFE4122412242204220442148208 +8347:04400440FFFE0440100021FC4000880013FE3020502090201020102010A01040 +8348:04400440FFFE0440101010103E1022FC4210A490149008FE1010201040108010 +8349:04400440FFFE044000001FF010101FF010101FF00100FFFE0100010001000100 +834A:08200820FFFE082000047F84122412241224FFE4122412242204220442148208 +834B:08200820FFFE082000007FFC010002003FF82488248824882488248824A82010 +834C:08200820FFFE0A2001007FFE400282040200FFFE042008201C4003800C707008 +834D:08200820FFFE082004404440448044FE450846885C9064504420045004880506 +834E:08200820FFFE082000007FFC040008201FF0011001003FF801000100FFFE0000 +834F:04400440FFFE04400810087813C0304050409FFE104010401040104017FC1000 +8350:08200820FFFE0A2002007FFC040009F8081018202BFE48208820082008A00840 +8351:08200820FFFE08200100FFFE01007FF801083FF821003FFC0284044C1830E00E +8352:08200820FFFE0A200100FFFE100010001FF8000011101110111021124112810E +8353:04400440FFFE0440101008207FFC082008200820FFFE08200820102020204020 +8354:0820FFFE0A2002003FF0041018A06040102010207EFC1224224422444A948508 +8355:08200820FFFE082000003E20222022FC3E24222422243E24224442444A948508 +8356:08200820FFFE0A2002083FD002200240FFFE0100061018E02F00C808080807F8 +8357:08200820FFFE0820009000883FFC2080208830882850245020244054418C8604 +8358:08200820FFFE0820000008204820282028200BFE082018202820C82009FC0800 +8359:08200820FFFE082020401040104007FC704010A01090110812041404280047FE +835A:08200820FFFE0820010001003FF8010011100920FFFE0280044008203018C006 +835B:08200820FFFE0A2002FC7F20014000840764381C00007FFC044008421042603E +835C:08200820FFFE0820208020883EB020C42084267C39000100FFFE010001000100 +835D:08200820FFFE082000047F044124492449244924492449241424220441148088 +835E:08200820FFFE082000F03F000200FFFE044008203458C4460440044008401040 +835F:08200820FFFE092002800440082037D8C00600003FF80200044008201FF00810 +8360:08200820FFFE0A2001007FFC0820044003800C603018C4460440044008401040 +8361:08200820FFFE0820000023F01020104080804BFC48A41124E244248421282210 +8362:08200820FFFE0A2001007FFE400280043FF801000100FFFE0100010005000200 +8363:08200820FFFE082000007FFE4002810401007FFC0380054009203118C1060100 +8364:0820FFFE082000007FFE420282043FF8090011001FF001000100FFFE01000100 +8365:08200820FFFE082000007FFE4002810401047D880550092011102108C5060200 +8366:08200820FFFE082000007FFE4002810411001FF821000100FFFE010001000100 +8367:08200820FFFE082000007FFE400281041110111022A00280044008203018C006 +8368:08200820FFFE08203FF000101FF000103FF00020FFFE08200420042000A00040 +8369:04400440FFFE04401FF0101010101FF010801040162021102088460681800040 +836A:04400440FFFE044000007C200420082010A810A41D24F1221222102050A02040 +836B:04400440FFFE044000007CFC4484488450FC4884448444FC5484488441144208 +836C:04400440FFFE044000007FFC04040288128008800900FFFE0240042018106008 +836D:08200820FFFE08201000100021FC4420F82010202020FC2040201C20E3FE4000 +836E:04400440FFFE044010081008200845FEF80810882048FC4840081C08E0284010 +836F:04400440FFFE04401080108020FC4504FA0410842044FC4400041C04E0284010 +8370:04400440FFFE0440102010201020FC2031FC3820542050209020102013FE1000 +8371:08200820FFFE08203FF820083FF8200020702F8020F02F8020F85F824082807E +8372:0440FFFE044000001FF0111011101FF0111011101FF001003FF801000100FFFE +8373:08200820FFFE082000007FFC00001FF0101010101FF0000008200440FFFE0000 +8374:04400440FFFE044010201020FDFC10201420182033FED0501050108851042202 +8375:08200820FFFE082000007FF80208120824280810310008844892481287F00000 +8376:08200820FFFE08200040004078A049104A884C4648404BF07810482000200040 +8377:04400440FFFE0440100017FE20086008A7C824482448244827C8200820282010 +8378:08200820FFFE092001003FF801007FFE40029FE400400180FFFE010005000200 +8379:08200820FFFE0820010011F811001100FFFE010009081110606001800E00F000 +837A:08200820FFFE08200820108010FC7D041204108410541C24E044418400280010 +837B:04400440FFFE04404420282010A428A448A89920282048508850088851042202 +837C:08200820FFFE092002800440082037D8C10601003FF801001110210845040200 +837D:08200820FFFE082000F87F00221011200200FFFE042008201C4003800C707008 +837E:0820FFFE08200400082010103FF804480820121067E80820144003801C70E00E +837F:08200820FFFE0820009000883FFC208020883E88225022502A244454418C8604 +8380:08200820FFFE082000003FF820002FF020003FFC248824504420451886060400 +8381:08200820FFFE082000007FFC01001110111011102928454485840100FFFE0000 +8382:08200820FFFE08203F04210421243F24082408247FA408A410A4108422944108 +8383:0440FFFE044030100CE003000CC03230FFFE080011003FF0D110115011200100 +8384:0820FFFE082000007FFC01003FF821083FF821083FF821001A00060019C0603E +8385:08200820FFFE082008800840104033FC50009008120811101110102017FE1000 +8386:08200820FFFE09200110FFFE01003FF821083FF821083FF82108210821282110 +8387:04400440FFFE044000203E20222022FC3E2422243E24222422442F44F0944108 +8388:08200820FFFE082021F011101110820C440053F011102110E0A0204021B02E0E +8389:04400440FFFE044000000608780808480848FF481C482A484948880808280810 +838A:04400440FFFE044000002420242024203C2007FE0420FC202420242025FC4400 +838B:04400440FFFE04400880088010FE11403240547C90401040107E104010401040 +838C:04400440FFFE0440082004401FF01010101010101FF00440044008421042603E +838D:04400440FFFE0440011001087FFC0100211811A007401920E118410605000200 +838E:08200820FFFE082000001020082040A824A40522092272281010106011800600 +838F:08200820FFFE082010001020FC2010A814A419223122D2281010106051802600 +8390:08200820FFFE08202040104013FC8244444810A010A0E120212022222422281E +8391:0440FFFE044008001FF0282007C01830E10E1FF001001FF001007FFC01000100 +8392:08200820FFFE082000001FF0101010101FF000003FF82008200820083FF82008 +8393:04400440FFFE144010003FFC40009FF012101110FFFE221021103FFC00100060 +8394:04400440FFFE044000003FF8200824482828301827C82448244824483FF82008 +8395:08200820FFFE092001007FFC054009203118C1061FF01010101010101FF01010 +8396:08200820FFFE082000007FFE08881110222011103FF8010001000100FFFE0000 +8397:08200820FFFE082001007FFC01003FF821083FF821083FF80100FFFE01000100 +8398:08200820FFFE0A2001003FF8000008200440FFFE010001007FFC010001000100 +8399:08200820FFFE082000003FF80408FFFE04083FF808001FF8280848088FF80808 +839A:04400440FFFE044000187BE00840104022787A400A402BFC1000280047FE8000 +839B:04400440FFFE044000387BC00840104023F8784008402BFC1000280047FE8000 +839C:08200820FFFE0820000010401040247E24886488A54824502420205020882306 +839D:08200820FFFE082001001110111011102928454481003FF801000100FFFE0000 +839E:08200820FFFE0A2001003FFC200440081FE000007FFC0440044008441044603C +839F:08200820FFFE09200280044009203098CFE6004000801FF0101010101FF01010 +83A0:04400440FFFE04701F8001007FFC054009203118CFC6044004F0081010506020 +83A1:04400440FFFE044000001FF0101010101FF00100110011F81100290047FE8000 +83A2:08200820FFFE0820092001007FFC11101110292845440280044008203018C006 +83A3:08200820FFFE092000807FFC080008000FF80000010008844892481287F00000 +83A4:08200820FFFE08200000FFFE04403FF824482448283830083FF820083FF82008 +83A5:08200820FFFE082044002BF81048284848489BF8284848888888088857FE2000 +83A6:08200820FFFE08200100111009201FF010101FF010101FF01010101010501020 +83A7:08200820FFFE082000001FF010101FF010101FF010101FF0044008421042603E +83A8:08200820FFFE0A2001001FF010101FF010101FF0110410881050122014181806 +83A9:08200820FFFE082000F87F00221011203FE000400080FFFE0100010005000200 +83AA:08200820FFFE0820064038500848FFFE084008400E2478280812082A28C61302 +83AB:08200820FFFE082000001FF010101FF010101FF001007FFC028004401830E00E +83AC:08200820FFFE0820040007E0082010403FF8510811081FF8028004821882607E +83AD:08200820FFFE082000007E7C42447E4442447E44404450544848544062404040 +83AE:08200820FFFE082000003FF821083FF821083FF802007FFC0404080410286010 +83AF:08200820FFFE082008202040104097FE40E0415011502248E444284220402040 +83B0:04400440FFFE04401080108010FC7D041248104010401CA0E0A0411002080C06 +83B1:08200820FFFE092001003FF80100111009207FFC0380054009203118C1060100 +83B2:08200820FFFE0820208017FC1140024073FC1040104017FE1040284047FE0000 +83B3:04400440FFFE044000107C10441045FE44107D104490449044107C1044500020 +83B4:04400440FFFE04401FF0101010101FF001007FFC410442844444484440144008 +83B5:08200820FFFE092002003FF82108210821083FF8228804900888108A2082C07E +83B6:08200820FFFE0820092002800440082037D8C00602101110092008407FFC0000 +83B7:08200820FFFE082044402850104828404FFE984028A048A08910091052082406 +83B8:04400440FFFE04404490288810882BFE48A098A028A0492089200A225222241E +83B9:08200820FFFE082000007FFE400280043FF8010001001FF00100014001207FFC +83BA:08200820FFFE08207FFE42029FF410101210115010201FFC000400047FD40008 +83BB:04400440FFFE044000003FE00420047C08043014C0083E44225822623E42223E +83BC:04400440FFFE04401020102023FE44207924112421247DFC00221C22E022401E +83BD:0820FFFE0820024002207FFC044008203018C82608207FFC0820102020204020 +83BE:0820FFFE0A2002007FFC0440092037D8C106092008207FFC0820082010202020 +83BF:04400440FFFE044008000804FFA408247F2449244B241C242A24490488140808 +83C0:08200820FFFE0A2001007FFE400290041EF82288248854A8089008841084607C +83C1:0820FFFE09203FF801001FF00100FFFE00001FF010101FF010101FF010101030 +83C2:08200820FFFE0820104020407E7C4284430442447E244224420442047E284210 +83C3:08200820FFFE0820200013FE920042004BFC0A041204E3FC2200220023FE2000 +83C4:08200820FFFE08200100FFFE01003FF821083FF821083FF803800D603118C106 +83C5:08200820FFFE082001007FFE40029FE410201FE010001FF0101010101FF01010 +83C6:08200820FFFE08207F0022FC22443E44224422283E2822102790FA2842440282 +83C7:04400440FFFE044010101010FEFE12102210227C6444144408441444227CC044 +83C8:08200820FFFE082010401020FC2011FC140018083108D0901090102053FE2000 +83C9:08200820FFFE08203FF000101FF00010FFFE111009A005401930E10E05000200 +83CA:04400440FFFE044010001FFC220452448A8402047FF407040A84124462140208 +83CB:08200820FFFE0820004000407BF8484048404FFC48E079504A48044408420040 +83CC:0820FFFE082000003FF8200820C8270821082FE823882548292821083FF82008 +83CD:08200820FFFE09200280044009203098CFE60040028001004884481287F20000 +83CE:08200820FFFE082000001FF810081FF810081FF82080208C3EF020822682387E +83CF:04400440FFFE0440200017FE100880084BC84A481248E3C82248200820280010 +83D0:0440244814500440FFFE082004407FFC01003FF80100FFFE028004401830E00E +83D1:08200820FFFE08200888111022201110088800003FF821083FF821083FF82008 +83D2:08200820FFFE082000003FF820083FF820083FF80100FFFE054009203118C106 +83D3:08200820FFFE082000003FF821083FF821083FF80100FFFE054009203118C106 +83D4:08200820FFFE08203EFC228422943E88228022FC3EA422A422A822904AA884C6 +83D5:08200820FFFE092002800C6037D8C0063FF8248824883FF82488248824A82010 +83D6:04400440FFFE04401FF010101FF010101FF000003FF820083FF820083FF82008 +83D7:04400440FFFE04401020102011FCFD24112411241DFCF1241124112451FC2104 +83D8:04400440FFFE0440101010901090FD0831483A44544250909088110813FC1104 +83D9:0820FFFE082000F83F0001007FFC09200920FFFE092009207FFC010001003FF8 +83DA:08200820FFFE0820021002FC7F4000840764781C021002FC7F4000840764781C +83DB:08200820FFFE082000007C7C44447C7C44447C7C400440044004400440144008 +83DC:08200820FFFE0820001000F83F001110082001007FFC054009203118C1060100 +83DD:08200820FFFE082010481044FDFE1040144018FC30A4D12811281210542820C6 +83DE:08200820FFFE08200C80708010FC1124FD243224384454445084910412281010 +83DF:0440FFFE044008000FE0102020405FF8110811081FF8028004A008921082607E +83E0:04400440FFFE04402020102013FC822442204BF80A881288E25024202450298C +83E1:04400440FFFE044000001FE040445194492443C445444924551442047FFC0004 +83E2:08200820FFFE082010801080FDFC120415F411141D14F1F4110C1102510220FE +83E3:08200820FFFE082000007F7C484448447F44412841287F10481048287F440082 +83E4:04400440FFFE0540111009203FF802007FFC082010102FE8C8260868080807F8 +83E5:04400440FFFE04401000100C11F0FD00110031FE391055105110921012101410 +83E6:04400440FFFE0440201813E01200020073FC1220122012201420282047FE0000 +83E7:08200820FFFE092000803FFE200020782F80288028802FFC284048244A948C4C +83E8:08200820FFFE0A2001003FF808200440FFFE04007FFC08201C4003800C707008 +83E9:08200820FFFE082001003FF808200440FFFE000000001FF0101010101FF01010 +83EA:0820FFFE0A2001007FFE400280043FF0040008001FF02810481008100FF00810 +83EB:08200820FFFE08207FFC01003FF821083FF801007FFC01003FF80100FFFE0000 +83EC:08200820FFFE082023FC10841084808449144A0815FCE1042104210421FC2104 +83ED:08200820FFFE082020801110120887FC4204500013F82208E208220823F82208 +83EE:08200820FFFE092000803FFE20802FF820883FFE20882FF8214042204C18B006 +83EF:04400440FFFE04407FFC11101110FFFE111011107FFC0100FFFE010001000100 +83F0:08200820FFFE0820001C7DF00950115011501D503148D14811441254525A2468 +83F1:08200820FFFE082001003FF80100FFFE1010220847E40820144003801C70E00E +83F2:08200820FFFE0820082004407C7C044004407C7C04400440FC7E044004400440 +83F3:08200820FFFE0820092002800C603018CFE6010001003FF811100920FFFE0000 +83F4:08200820FFFE0A2002007FFC044009203FF8D1161FF011101FF40104010400FC +83F5:04400440FFFE04407FFC482444445FF4410440845FF44404440447E440144008 +83F6:04400440FFFE044001007FFC01003FF80200FFFE092017D02108DFF601000100 +83F7:0820FFFE08201FF000100FF000101FF000007FFE41029FF41110115011200100 +83F8:04400440FFFE0440102008207E50105010881F0612601210220022C04A308408 +83F9:04400440FFFE0440100009F80908410821F82908090811F87108110817FE1000 +83FA:0820FFFE092000801FFC10041FFC100017F8140817F8240827F8440884280410 +83FB:04400440FFFE04400820082008207EFC08201C301A702A6848A4892208200820 +83FC:08200820FFFE082001000910092012C0043019086914091012A004401830600C +83FD:04400440FFFE044008000F7C08440844FF44002808282A104910892828441082 +83FE:04400440FFFE04403FF801000200FFFE08203118C10609901148214805000200 +83FF:08200820FFFE08207F84100422247F24092408247F24082408240F04F0144008 +8400:08200820FFFE092001F801003FFE210221F02F0420FC200027E044224822B01E +8401:04400440FFFE0440082008207FFC08200FE008200FE00820FFFE082010102008 +8402:04400440FFFE04400E00787C08440844FF4418441C442A444A44887C08440800 +8403:08200820FFFE0A2001007FFC08200820145022880100FFFE0100010001000100 +8404:0820FFFE082020003FFC48049FE422040204FFFC0204222422243FE400280010 +8405:0820FFFE08200100FFFE010021083FFA010200FE00003FF820083FF820083FF8 +8406:08200820FFFE0A2004003FF821083FF822083FF808801080FFFE008000800080 +8407:04400440FFFE04400FF808000FF008000FF00800FFFE111010A014401830100E +8408:08200820FFFE082000001FF010101FF010101FF010101FF00450084A1042603E +8409:08200820FFFE082000003EFC22A422A43EA422FC22803E80228222824A7E8400 +840A:08200820FFFE092001007FFC11101110292845440380054009203118C1060100 +840B:0820FFFE09207FFC01003FF80108FFFE01083FF80200FFFE08201C4003C07C38 +840C:08200820FFFE082000007CFC448444847CFC448444847CFC4504010402140C08 +840D:08200820FFFE0820200017FC904042484950084017FEE0402040204020400040 +840E:0820FFFE082000701F8001007FFC05401930E10E04007FFC08201C4003807C78 +840F:04400440FFFE044008001FE020204440B878200820083C78200820083FF82008 +8410:0820FFFE082001007FFC01003FF80108FFFE01083FF8110011F8290047FE8000 +8411:08200820FFFE092008801FFC108030805FF8908010801FF8108010801FFC1000 +8412:08200820FFFE0A2001007FFC08201210244808201FF00440044008441044603C +8413:08200820FFFE0A2001007FFE40029FF4101010101FF010101FF010101010FFFE +8414:04400440FFFE0440100011FCFC4410441494190832FCD0841084108450FC2084 +8415:0820FFFE0A2001007FFC0820044003801C70E82E0FE008200FE0082010202020 +8416:0820FFFE0820060038F8200820083CF8200820083FF80440044008423042C03E +8417:08200820FFFE0A2001007FFE400280041FF0000000007FFC1110210845040200 +8418:08200820FFFE0A2002007FFC0440082037D8C0063FF801000920111025080200 +8419:04400440FFFE044010201020FDFE11223224385054505490909011121212140E +841A:08200820FFFE0820100011FC1088FC70138E10201DFC3020D3FE102050202020 +841B:08200820FFFE08203FF820083FF820083FF820083FF80820FFFE082010202020 +841C:04400440FFFE044010201020FE3E9220922092FC92849A849484108410FC1084 +841D:0820FFFE082000003FF8244824483FF8020007F008103420024001800E007000 +841E:08200820FFFE082000003FF8210822882448000020843E9820E020842684387C +841F:08200820FFFE08200640384009F808487E4818C81C482A68289A488A09060A02 +8420:08200820FFFE082000003E7C224422443E7C224422443E7C224422444A948508 +8421:04400440FFFE04400020104009FC49042104250405FC09047104110411FC1104 +8422:08200820FFFE08202100110013F884084BE85228122823E8E2182204220421FC +8423:08200820FFFE0A2001007FFE400280041FF00100110011F81100290047FE8000 +8424:08200820FFFE082000007FFE410281041FF0111011101FF0010001087FFC0004 +8425:08200820FFFE08207FFE40029FF4101010101FF000003FF8200820083FF82008 +8426:08200820FFFE082000007FFE440288441F8003200C103FF80108112025104208 +8427:08200820FFFE082001003FF80108FFFE01083FF8010025482528292841088108 +8428:04400440FFFE044000207DFC4488485051FE4900450045005500490042004400 +8429:04400440FFFE04400C20702010A410A4FCA83120382054505050908811041202 +842A:08200820FFFE08200C10709010501010FC903050381E55F05010901010101010 +842B:0820FFFE082000F83F000100FFFE054009203118DFF610101FF010101FF01010 +842C:04400440FFFE04401FF011101FF011101FF001003FF8210821482FE824282010 +842D:08200820FFFE082000F03F0001001FF011101FF001007FFC412441F45E144008 +842E:08200820FFFE092002800C6037D8C0063E0822483E4822483E48220822282610 +842F:0820FFFE082004000FE010203FF850081FF810081FF810081FF8042008101008 +8430:08200820FFFE092001007FFC01003FF8292825483FF8038005601918E1060100 +8431:08200820FFFE0A2001007FFE40029FF400001FF010101FF010101FF00000FFFE +8432:08200820FFFE082000FC7F00220811103FF80200FFFE04000FF0122021C0CE3C +8433:08200820FFFE08200100FFFE01003FF8244822882FE821083FF8210821282010 +8434:0820FFFE08203F04210421243F2421243F24212421243F240024120421144088 +8435:04400440FFFE04401FF010101F9010907FFC40044FE4482448244FE440144008 +8436:0820FFFE082001007FFC01003FF80200FFFE08201FF02828CFE608200FE00820 +8437:04400440FFFE0440080049042A247F2441247F2441247F244124410445144208 +8438:08200820FFFE082005003978210821083D78210821083FF8028004401830E00E +8439:08200820FFFE092000803FFC20043FFC20002FFC292429242FFC49244924880C +843A:0820FFFE08207FFC40045FF440045FF400001FF010101FF010101FF010101FF0 +843B:08200820FFFE0A2001003FF808200440FFFE00001FF010101FF010101FF01010 +843C:0820FFFE082000003EF822883EF800003FF80000FFFE08000FF0001000A00040 +843D:08200820FFFE0820208010F811088290486049981606E1F82108210821F82108 +843E:0820FFFE082000003FE008200BF80A88112822905FF8124812481248FFFE0000 +843F:04400440FFFE0440203813C01040804047FC5040104023F8E208220823F82208 +8440:04400440FFFE0440103813C0FC40104017FC18403040D3F81208120853F82208 +8441:0440FFFE0440082004407FFC01003FF80100FFFE0200FFFE08201C4003C03C38 +8442:04400440FFFE044020203E20442088FC7F24492449247F441454248A450283FE +8443:08200820FFFE082000807C8044FE454046407C7C44404440447E7C4044400040 +8444:08200820FFFE082000403E40227E22A03EA0233C22203E20223E22204A208420 +8445:04400440FFFE0440000011F81108290845F89108110829F82508410887FE0000 +8446:04400440FFFE044008000BF81208320853F8904017FE10E0115012481C461040 +8447:0440FFFE04401FF0022001407FFC0484188862800100FFFE05401930E10E0100 +8448:04400440FFFE144020087FFC00043FF820083FF80100FFFE054009203118C106 +8449:04400440FFFE044012207FFC122013E010001FF80100FFFE05401930E10E0100 +844A:08200820FFFE092006C01830EFEE00001FF010101FF00820FFFE082010202020 +844B:08200820FFFE082000803C8024FC25043EF4249424943CF42494240454288810 +844C:0820FFFE08200400FFFE08201E4003C03C381010FEFE2224646418182434C2C2 +844D:04400440FFFE04407FFC00001FF010101FF000003FF821083FF821083FF82008 +844E:08200820FFFE0820004013F8204847FE884813F8304053FC904017FE10401040 +844F:08200820FFFE0820204013F890484FFE404813F82040E3FC20402FFE20402040 +8450:08200820FFFE0820044008203018CFE6042018A060403FF8244824482448FFFE +8451:04400440FFFE0440080008087F0808FEFF08084808287F2808080F08F0284010 +8452:04400440FFFE04401000100025FC7C200820102024207E20002054204BFE8A00 +8453:08200820FFFE082008202090109013FC80904890489017FEE000209021082204 +8454:0820FFFE0820000009F00810101037FC510091F81240104017FC10A01110120C +8455:08200820FFFE08201200213C49009400247E6108A2082E082208220822282010 +8456:08200820FFFE0A2001007FFE48229114212801107FFC0280044008203018C006 +8457:0820FFFE082002083FD002200240FFFE03000C003FF0C8100FF008100FF00810 +8458:04400440FFFE044008881110FFFE1110088800003FF821083FF821083FF82008 +8459:04400440FFFE0440080008FC7E84088418FC1C842A842AFC4884888408FC0884 +845A:04400440FFFE044008207FFC08200FE008200FE00820FFFE1240142010001FF8 +845B:0820FFFE08201FF010101FF010101FF008001FFC21045284944410041FA80010 +845C:0440FFFE044008007F7C08243E2408447F5408880100FFFE02800C603018C006 +845D:04400440FFFE044000207F202A2054FC2A2400247E24082408440E44F0944108 +845E:0820FFFE082000007DFC048804887CF8408840887CF80488049E05E828081008 +845F:08200820FFFE092002001FF010101FF010101FF000007FFC01003FF80100FFFE +8460:04400440FFFE04400BF8080811F8300853F8900017FC140413F8111010E0171C +8461:04400440FFFE24403FFC42247FF482043FE422243FE422243FE4222422A4204C +8462:08200820FFFE092001007FFC04800A603118C0063FF8244824482448FFFE0000 +8463:0820FFFE08201FF001007FFC01001FF011101FF011101FF001003FF80100FFFE +8464:04400440FFFE04401008100824087DFE0808108824487E48000854084A288A10 +8465:04400440FFFE044010100820FFFE00003E4822483E4822483E0822082A282410 +8466:0820FFFE082002003FF00410FFFE00001FF010101FF001001FF021003FF80100 +8467:04400440FFFE044008107F1008107F7E41123E1204120F1278220822284A1084 +8468:04400440FFFE04401FF011101FF011101FF00000FFFE111010A014401830100E +8469:04400440FFFE0440100021FC7D244524452445247DFC4500450045027D0244FE +846A:04400440FFFE044010041F0422247FA4A4A43FA424A43FA424A4248442948108 +846B:04400440FFFE04400800087C7F440844087C3E442244227C22443E8422940108 +846C:0820FFFE0820FFFE10803E9842E024841884E07C08200820FFFE082010202020 +846D:0820FFFE082000007CF8440844087CF8400041F87C88405040207C5040884306 +846E:0820FFFE0820060038F8208820883D06220021F83C8820882C50F02020D82706 +846F:08200820FFFE082010401440247C7884110424447E24002454044A048A280010 +8470:04400440FFFE044009100A0817FC31105208948411F813081490106011981606 +8471:04400440FFFE044008001FF82A4844480A88110822A8041001004884481287F2 +8472:0820FFFE0A2004001FF010101FF010101FF001047D88095011202118C5060200 +8473:04400440FFFE0440002800243FFE20202FA422242FA824982D12422A45468882 +8474:04400440FFFE0440002800243FFE20202FA420242FA8289828924FAA40468082 +8475:0820FFFE082000907EA00444282810102FE8C10601007FFC010002C00C307008 +8476:0820FFFE09207FFC00001FF010101FF000007FFE40029FF40100010005000200 +8477:0820FFFE08207FFC41043FF801001FF011101FF011101FF00100FFFE01000100 +8478:0820FFFE082000003FF8210821083FF8210821083FF802005104511290120FF0 +8479:08200820FFFE082020401040FEFE212020AC3CB425E424AC24A044A25482887E +847A:0820FFFE08201FF010101FF000007FFC10101FF010101FF0103EFFD000100010 +847B:04400440FFFE044000001FF0101010D01710111017D0155027CA212A4FE68022 +847C:08200820FFFE08202448238824483FF81010220847E40820144003801C70E00E +847D:08200820FFFE08207FFC04403FF824483FF80400FFFE08201C4003800C703008 +847E:08200820FFFE082010001EF8228862A894920882307EC10008844892481287F0 +847F:08200820FFFE08203FF821083FF820002FF828082FF828084FF848088FF80808 +8480:04400440FFFE04401FF010101FF010101FF000003FF8244824482448FFFE0000 +8481:08200820FFFE08202050104817FC00C00160F150124814441040280047FE0000 +8482:0820FFFE0A2001003FF8082004407FFE410281041FF011101150112001000100 +8483:0440FFFE044008000FE010201FC00040FFFE06003B0804B019C062A00C987306 +8484:08200820FFFE08207FFE400280043E0800087EFE14481428140A242A241243FE +8485:0440FFFE04401080088043F0289011127212140E1100FFFE05401930E10E0100 +8486:0820FFFE082000007DF0111011901D52F20E0400FFFE08201C4003800C707008 +8487:04400440FFFE044800243FFE20202FA428A42AA82AA82A902A92452A49469082 +8488:04400440FFFE044020883C9020E42C84307C04001FF010101FF010101FF01010 +8489:0820FFFE082001001FF011101FF00100FFFE00001FF01010111002C00C307008 +848A:04400440FFFE04400880109830E057849084107C00007C8844B044C47C84447C +848B:08200820FFFE0820008008F849102AA0285008901BFE29104890889008100830 +848C:04400440FFFE0440111009207FFC05401930610C0400FFFE08201E4003C03C38 +848D:0820FFFE0820240014007FE0042008200FF8080810081FFE2002255249548008 +848E:04400440FFFE0440201C13E0920E42F04A900A901292E2942288248824A428C2 +848F:08200820FFFE08207FFE4002BFF404803FF82488287830083FF820083FF82008 +8490:08200820FFFE0A2004003FF821083FF821083FF8029002A804B8088A3082C07E +8491:0820FFFE08200600387820483E4822863F0022FC3E4420443E2822104A2884C6 +8492:0440FFFE0440100023FE7C20442045FC7D2441247D24452445347D2844200020 +8493:04400440FFFE04401020102025FE7C200924112425247DFC002254225422801E +8494:08200820FFFE0820004078404BFC48404FFE78104FFE48104A10791048500020 +8495:04400440FFFE04401FF01110129014501FF000003FF8244824482448FFFE0000 +8496:0820FFFE09207FFC01001FF010101FF010101FF010101FF01010FFFE08201010 +8497:08200820FFFE08A0204013F8920843F84A080BF81242E2442228229023082206 +8498:0440FFFE044008007F7C114432440C7C3220DFC001003FF801007FFC01000300 +8499:0820FFFE08207FFE40028FE400007FFC06003B0804B019C062A00C9872860100 +849A:0820FFFE082000007FFC00001FF010101FF000007FFC482444445FF44104410C +849B:04400440FFFE0440202020203DFC50241024FC2411FE542054505C5074880506 +849C:08200820FFFE082000007C7C00000000FEFE1010101054545252929250502020 +849D:0440FFFE044000003FFC2080210027F0241027F0241027F0408044908A881104 +849E:08200820FFFE082021401120120082FC46005A8812482248E250220022FC2200 +849F:08200820FFFE08202080108010FCFD0402F44894489448F410941E04F0284010 +84A0:0820FFFE082002003FF820083FF820083FF820083FF8010008844892481287F0 +84A1:0820FFFE082001003FF8082004407FFE420281043FF8040007F0081010502020 +84A2:08200820FFFE0820784048A05110620855F648404BFC68405150424845444080 +84A3:08200820FFFE0820104020A041108A0815F6304053FC90401150124815441080 +84A4:08200820FFFE0820204010A0911042084DF6104027FCE0402248244429422080 +84A5:08200820FFFE0820040079FC40444844545462883FF821083FF821083FF82008 +84A6:0440FFFE044008801FFC30805FF890801FF810801FFC10003FF00C6003807C7C +84A7:04400440FFFE0440002800243FFE222023A422242FA8289828924FAA40468082 +84A8:0440FFFE044013F8104023F820406FFEA00023F8220823F8220823F822082218 +84A9:08200820FFFE08200C0071F811081108FDF83108390855F85108910817FE1000 +84AA:0820FFFE092001107FFC01003FF821083FF821083FF821080020FFFE08200460 +84AB:0440FFFE0440082004407FFC01003FF80200FFFE080017F8208040809FFC0000 +84AC:08200820FFFE08207FFE44028FE410203FF8510811081FF802800492188AE07E +84AD:0820FFFE082010001FFC210451141FF4020814001FFC210451141FF404143808 +84AE:08200820FFFE082004007FFC450408801FFC30805FF810801FF810801FFC1000 +84AF:11021102FFE2110A000A7BCA4A4A4A4A7BCA4A4A4A4A7BCA4A424A42AB4A1484 +84B0:08200820FFFE082010783E4822482A862300FEFC22442A44222842104A2884C6 +84B1:04400440FFFE044010281024FDFE102015FC192431FCD12411FC11245124210C +84B2:08200820FFFE0828404427FE204087FC444457FC1444E7FC2444244424540408 +84B3:04400440FFFE04401020102025FC7D2409241154254C7D840104550455148108 +84B4:08200820FFFE08204100227CFFC40844497C494449447F7C1144204440948108 +84B5:0440FFFE044000387FC02208151008401F8001201FF002107FFC04401830E00E +84B6:04400440FFFE04401010109024887D040A0211F824487C480088548855288210 +84B7:0820FFFE08201FF010101FF000003FF820083FF820083FF820083FF808201010 +84B8:08200820FFFE08201FC000447D88055009203118C50602003FF8000024884244 +84B9:0820FFFE082010100820FFFE04403FF80448FFFE04483FF80C603458C4460440 +84BA:0820FFFE092000801FFC1000920053F8544010403FFE504090A0211022084C06 +84BB:08200820FFFE082000007EFC02047EFC40807EFC020422441A3462C414280810 +84BC:08200820FFFE092006C01A30E10E1FF010101FF010101FF010002FF848088FF8 +84BD:0820FFFE082000003FF821082FE82288244828283FF8010008844892481287F0 +84BE:08200820FFFE08202040124811500040F7FC10E01150124814441040280047FE +84BF:0820FFFE08200200FFFE00001FF010101FF000007FFC40044FE448244FE4400C +84C0:04400440FFFE0440000C7DF00440088811F010201C44F3FE1022112452222060 +84C1:0820FFFE082001007FFC01003FF80200FFFE082017D02108DFF6054009201110 +84C2:08200820FFFE08207FFE40029FF410101FF010101FF00100FFFE082010102008 +84C3:0820FFFE08200500397821083D7821083FF801003FF00820044003801C70E00E +84C4:0820FFFE08200100FFFE08201FC003100C083FFC00043FF821083FF821083FF8 +84C5:04400440FFFE0440202017FE1080810843FC500411502150E15022522252244E +84C6:0820FFFE092000803FFC222022203FFC222023E020802FF8488848A888900080 +84C7:0820FFFE08201FF010101F9010907FFE40029FF410101FF010101FF010101030 +84C8:08200820FFFE082004003F7C21443F4821503F48284424442A54324820400040 +84C9:08200820FFFE0A2001007FFE400289241290244808203FF8C82608200FE00820 +84CA:0820FFFE0820044008203218C4460FE000207EFC224412240A1412242A544488 +84CB:0820FFFE082001003FF801007FFC080010103FF800003FF824482448FFFE0000 +84CC:0440FFFE04401110111029287FFC0100FFFE08001FF02820444003801C70E00E +84CD:0820FFFE0A203FC00280FFFE02200FC03408C3F800001FF010101FF010101FF0 +84CE:0820FFFE092000803FFC20802FF820883FFE20882FF820804FF848088FF80808 +84CF:08200820FFFE08200000061C38E828A82CA82AA82AA82AA828A455545D748212 +84D0:0820FFFE08203FFC20002FF820003FFC24482430260E20205FFC442082A00040 +84D1:0820FFFE082001007FFC00001FF01010FFFE10101FF0048808503820CB180C06 +84D2:04400440FFFE044008007F7C08107F1049107F1049FE7F100810FF9008100810 +84D3:08200820FFFE08A0104017FC20006208A1102FFE200023F82208220823F82208 +84D4:04400440FFFE0440082004407FFC010001003FF801000100FFFE248822444244 +84D5:04400440FFFE04401020102011FCFC20102033FE3800542051FC9020102013FE +84D6:0820FFFE082002003FF82448238824483FF8000020843E9820E020842684387C +84D7:08200820FFFE0820104023F84040884017FC3040524092781240154018FE1000 +84D8:0820FFFE0A2001007FFC08201210244848241FF00510088818502920CA180C06 +84D9:08200820FFFE092000803FFE2080249024902AA831C420802FF8408040809FFE +84DA:08200820FFFE0820108011FC228828706B8EA8202848299028642988203021C0 +84DB:04400440FFFE044008200820FFBE08447FA449244B281C282A10492888440882 +84DC:08200820FFFE08207F7C140414047F04557C574061407F40414241427F3E4100 +84DD:08200820FFFE08200480248024FC24A0251000003FF8244824482448FFFE0000 +84DE:08200820FFFE082000FC7F00220811100C20307820083C78200820083FF82008 +84DF:04400440FFFE044010041F0422247FA4A4A43FA424A43FA40004078478142008 +84E0:08200820FFFE09200080FFFE0440139014501FF001007FFC44444FE44424400C +84E1:08200820FFFE082023F8100811F8800843F8500017FC2404E3F8211020E0271C +84E2:04400440FFFE144008003E7C22443E44227C3E442244287C24442A4432942108 +84E3:0820FFFE082000007DFC0420284011FCFD041524112411241124105050882304 +84E4:08200820FFFE0820404023F820400FFE1110128824F4E11022A0204021B02E0E +84E5:08200820FFFE082000007FFE410282840C603018DFF601003FF8111009207FFC +84E6:0440FFFE04401FF010101FF01010FFFE10102FC8C04608400FF800087FA80010 +84E7:08200820FFFE0820108011F822886870ABAE282029FC282028A8292422A42040 +84E8:0440FFFE0440108011FC228828706B8EA80029FC290429FC290429FC2104210C +84E9:0820FFFE082000807CF805082A901060FD981606304053F89048108851502620 +84EA:08200820FFFE082047F8211020A007FCE44427FC244427FC2444245454088FFE +84EB:0820FFFE082023FC10801144066870B01128166810A4112416A0284047FE0000 +84EC:0820FFFE0820010023F0151010E0071C704013F8104011F0104017FC284047FE +84ED:0820FFFE092000803FFC20803FFC222024902FF8349427F0249047F24082807E +84EE:0820FFFE0820004027FC104013F8024873F8124813F8104017FC284047FE0000 +84EF:04400440FFFE04401110211041108AA8144430405240927C1240154014FE1800 +84F0:04400440FFFE04401020213C4120892017FE300050209120113E112012A0147E +84F1:08200820FFFE08202108109093FC40904890089017FEE0902090211021100210 +84F2:0820FFFE082000003FF8200027F0241027F020002F7829482F7820003FFC0000 +84F3:0440FFFE044008207FFC08200FE001003FF821083FF801007FFC0100FFFE0000 +84F4:0820FFFE09207FFC01003FF821083FF821083FF801047FFC0020FFFE08200460 +84F5:04400440FFFE0440102013FE1020FDFC102413FE1C24F1FC1020113C512022FE +84F6:04400440FFFE044000A0009079FE49204B204DFC492049FC7920492001FE0100 +84F7:04400440FFFE044010A01090F9FE11201B2015FC3120D1FC1120112051FE2100 +84F8:0440FFFE04407FFC04403FF824483FF824483FF800001FF010101FF010101FF0 +84F9:04400440FFFE0440140027DE4912811217D221126112A5D2251A25D42E102410 +84FA:08200820FFFE0820104010407C4010F8FE48444892C87C4810AA1CAAE1064202 +84FB:08200820FFFE0820104010407C4011F8FE48444828C87C4810AAFEAA11061202 +84FC:0820FFFE08203CF824481428254806C01830E30E0C403180063038C007003800 +84FD:0820FFFE08203FF821083FF821083FF80920FFFE09203FF801007FFC01000100 +84FE:08200820FFFE092001FC01003FF829282448228829282288244829283FF82008 +84FF:0820FFFE082001007FFE48028BF4108033F85208920813F81208120813F81208 +8500:04400440FFFE04401000087C7F4422481450FFC800443E44225422483E402240 +8501:0820FFFE09203FF80440FFFE00001FF010101FF010101FF00100FFFE01000100 +8502:0820FFFE08201FF011101FF011101FF0040008201FC003103FF8112025104208 +8503:08200820FFFE08207CF8048804F87C2041FC41247D2405FC042004242BFE1002 +8504:08200820FFFE08207C7C44447C7C44447C7C40044FE4482448244FE440144008 +8505:0820FFFE08207C7C44447C7C44447C7C41044FF442444644418442444C24400C +8506:08200820FFFE0820204013F8104087FE4110528814F42110E2A0204021B02E0E +8507:08200820FFFE082000007DFC44207D20452045FE7C50505048925492610E4200 +8508:0820FFFE082000007FFC04403FF824483FF800003FF80000FFFE111025080200 +8509:0820FFFE08200100FFFE101020085FF4101010101FF0048808503820CB180C06 +850A:04400440FFFE044011FC110415FC550459FC500091FC10202BFE242044208020 +850B:08200820FFFE0820220013BE921242125FD210142214EA88324822142A242442 +850C:0820FFFE082000000820FFA0083E7F42499449107F101C102A28492888440882 +850D:08200820FFFE092000803FFE22203FFC22243FFC284028482F7048444B448C3C +850E:04400440FFFE244010F8FC8800887906020079F8008878884850482078D84B06 +850F:0820FFFE0A2001007FFC082004407FFC4444482457D4644C444447C440144008 +8510:0820FFFE0A2001007FFC082004407FFC41045FF441044FE448244FE44004400C +8511:0820FFFE082000003FF8244824483FF800903FFC208030482850242440D4830C +8512:0820FFFE082000003FF80208FFFE04083FF808001FF82808CFF8000024444222 +8513:0820FFFE08201FF010101FF010107FFC44447FFC00003FF0082007C01830E00E +8514:0820FFFE28203FFC4004BFE400041FC410441FC400043FE422243FE422243FEC +8515:0820FFFE0820145014507FFC245247CE80007FFC41041FF01110115011200100 +8516:0820FFFE092001F801003FFC21042FE0210827F8241027F0241047F044109FFC +8517:08200820FFFE092000803FFC222022203FFC2220222023E020004A4849249124 +8518:0440FFFE044008201FF0102025487EFC04401930E64E1990062018C007003800 +8519:08200820FFFE082020401040FEFE210020003DFE2422242024BC44A055608A3E +851A:08200820FFFE082000003F0821083F0820FE2E0820483F2844285508A4A80C10 +851B:08200820FFFE082010041F2422147F84A4A43F9424863FBC2484248442848104 +851C:04400440FFFE0440082008207F3E08443EA40824FF2810281E1022284A448482 +851D:04400440FFFE04400020792448A848207BFE487078A848A849247A2248200020 +851E:0820FFFE082001003FF82108FFFE21083FF811101FF00400FFFE082007C07838 +851F:08200820FFFE082020401040FEFE212020403CFC2520242025FE445054888906 +8520:08200820FFFE0820104010FC24887D50082010D827067C60001054C054308008 +8521:0440FFFE044010801EF822885450282017D82006DFF001001110210845040200 +8522:0440FFFE0440202013FC82244BF812882450E470298C2400FFFE082007C07838 +8523:08200820FFFE08200440247C24A83D50042804487DFE24882448244844088418 +8524:0820FFFE0A2001007FFE42028924284849940E1077F00100210821083FF80008 +8525:08200820FFFE092002003FF8220827E82A48218826483FF801004884481287F2 +8526:0820FFFE082004001FF010101FF010101FF010001FFC10001FFC492484940008 +8527:0820FFFE08201010FEFE10107C7C1010FEFE10103FF800081FF800083FF80008 +8528:0820FFFE08207FFC45445FF442047FFC482457D4644C44C4442443E440047FFC +8529:0820FFFE0A2001007FFE4002BFFC01003FF821083FF821083FF8101020084004 +852A:04400440FFFE044008067F7808407F40497E7F4849487F4808487F4808880908 +852B:0820FFFE08207FFC010011F81100FFFE10001FF820003FFC0004492484940008 +852C:0820FFFE082000107DFE0420184851FE50025CA850A850A85D2A712AC22A0406 +852D:0820FFFE0820004078A04910524865F4502048404BF8680057FC4080411043F8 +852E:04400440FFFE04407FFC40A47FFC40845E9452945E64405446B459147FFC4004 +852F:04400440FFFE044000207BFE482051FC612451FC492449FC687050A841244622 +8530:0820FFFE09203FF820083FF8200027F0241027F020002FF828884FF8480287FE +8531:0820FFFE082022001478084814482A8609007EFC08442A4449288910282810C6 +8532:0820FFFE0A2001007FFE400280443E40007C7E88155014201452248A43FE8000 +8533:0440FFFE044023F8104013F8804047FE500013F82208E3F8220823F822082218 +8534:08200820FFFE092000803FFC242024203F7C24202E702D6834A4452244208420 +8535:04400440FFFE044800243FFE20202FA42A242FA828A82F902A124FAA40468082 +8536:0820FFFE09207FFC01003FF80100FFFE10101FF010101FF010101FF008201010 +8537:0820FFFE082001003FF811100920FFFE00003FF8200827C8244827C820083FF8 +8538:08200820FFFE0920120067DC444447C4444457DC60000440044008421042603E +8539:04400440FFFE044008200820143E22445DA48024112809284A1027A8F8444082 +853A:0820FFFE0820200017FC050444844FF459046FE449044FE449044FF448144008 +853B:0820FFFE0A2001007FFE400280243E3800207EF81408145014242454248443FC +853C:0820FFFE082043F8220823F80208E3F8210023FC244422A42A0433F420140008 +853D:04400440FFFE0440082049202A3E7F4449A449245D286B284910412845444282 +853E:0820FFFE08200640387C08947E241C442A9449080100FFFE054009203118C106 +853F:0820FFFE082000F87F00221011201FE010201FF010101FFC20042AA44AA4800C +8540:0440FFFE044010101010FEFE1010FEFE92929292969638385454929210101010 +8541:0820FFFE08203FF000101FF000103FF000003E7C08447F7C0020FFFE08200460 +8542:0440FFFE044000203D2424A825FC3C4027FE24883D2426FA2448444854A88910 +8543:0820FFFE082000F83F0011100920FFFE09203018DFF611101FF011101FF01010 +8544:0820FFFE08207C7C44447C7C44447C7C410440844AA44A144A5451C440144008 +8545:08200820FFFE082023F8124893F842484BF8084017FCE444245425F42414040C +8546:04400440FFFE044800243FFE20202FA428A42FA828A82F9028924FAA45468882 +8547:0820FFFE08203EF822883EF800001FF011101FF011101FF00100FFFE01000100 +8548:0820FFFE08207FFC04403FF824483FF810101FF010101FF00100FFFE01000100 +8549:08200820FFFE092008801FFC30805FF810801FF810801FFC1000248822444244 +854A:08200820FFFE0820082001002488242443E4000024241212A0A0A4A41C1C0000 +854B:0820FFFE0820010011F811001100FFFE081008104E9C489048904E90F1FE0000 +854C:04400440FFFE04401FF010101FF010101FF000007EFC42847EFC42847EFC4284 +854D:0440FFFE044020A01110120885F64000578414A427A4E4A427A4248424942588 +854E:0820FFFE082000701F800200FFFE082037D8C4463FF8200827C8244827C82018 +854F:08200820FFFE0820004453F42048505097FE108031FC530495FC190451FC2104 +8550:0440FFFE04407FFC1110292845441110292845447FFC0100FFFE010001000100 +8551:0820FFFE08207C7C44447C7C44447C7C400447C4444447C4444447C4445448C8 +8552:0820FFFE08203FF824483FF800001FF010101FF010101FF010101FF008201010 +8553:0820FFFE08203FF801007FFE41029D7401001D7000003FF80000FFFE10103FF8 +8554:0440FFFE0440100010FC7C841094FE88448028FC7CA410A4FEA8109010A810C6 +8555:08200820FFFE0820228814500BFE145025FC4D54158C250445FC850429FC1104 +8556:0820FFFE082023FC120043F82A080BF8720013FC1100FFFE05401930E10E0100 +8557:08200820FFFE0820008078F849084A907860119812065DF8510851085DF8E108 +8558:0820FFFE082001003FF80100FFFE08203EF808207EFC00007FFC04401842E03E +8559:0820FFFE09203FF801001FF011101FF011101FF001087FFC02044908482487E4 +855A:0820FFFE08201FF010107FFC44447C7C00003FF80000FFFE10001FF800080070 +855B:08200820FFFE08200C88705011FC1024FDFC312039FE546250AA912412201020 +855C:08200820FFFE082004407C7C04403C7804407C7C0440020009084924482487E0 +855D:04400440FFFE0440108010F825087E1009FC112425247DFC01005502550280FE +855E:0820FFFE08201FF010101FF01010FFFE22003EFC22443E4422282F10F22842C6 +855F:0820FFFE08A03E900464282810103EF8C2961E90110C20F03E90026014900908 +8560:0440FFFE044008007F7C114432440C44367CC8801F0002103FF8010815202210 +8561:0440FFFE05407FFC0920FFFE08203FF820083FF820083FF820083FF808201010 +8562:0820FFFE09201FF011101FF00100FFFE10101FF010101FF010101FF008201010 +8563:0820FFFE082000FC7F00220811107FFE400290243DF84420A92011FC2020C020 +8564:0820FFFE08200010FF50107C29904E10967C2510CD1014FE2440C430140E0800 +8565:0820FFFE082000507E4804FE2490259044FE7E900C9014FE2490449094FE0880 +8566:0820FFFE082000000BFE102021FC490411FC210445FC090411FC2000C0880104 +8567:0820FFFE0820020013FC240043F88A0813F8320853F8910013F8151010E0171C +8568:0820FFFE082000003FFE289025102FBE22222AD42A902F902228442844448882 +8569:08200820FFFE082023F8120893F8420843F810002FFEE20027FC292422540488 +856A:04400440FFFE044010003FFC4AA00AA07FFC0AA00AA07FFC0000248822444244 +856B:0820FFFE09201FF004407FFC00001FF011101FF011101FF001003FF80100FFFE +856C:04400440FFFE04401020102024407C8809F0102024487DFC002054A855248060 +856D:0820FFFE09203FF80108FFFE01083FF825483D7821083FF821083D7825484548 +856E:0820FFFE082002001CF010101EF010101FF008001FFC20044924249424944008 +856F:0820FFFE0820010079F04A9050606198560649F04A406BF8544043F8404047FC +8570:04400440FFFE044023F8120893F842084BF8080017FCE524252425242FFE0000 +8571:04400440FFFE04400C20712410A81020FDFC310439FC550451FC910411141108 +8572:0820FFFE0820220C14707F4049407F40497E7F480848FF480848088808880908 +8573:08200820FFFE08207C7C44447C7C44447C7C40044FE448244FE448244FE4400C +8574:04400440FFFE044021F8210845F88908F1F8200043FCFA9402941A94E7FE4000 +8575:0440FFFE0440204020A021583A264DF8490849F8A90811F81144212841508188 +8576:0820FFFE08203FF801007FFE41029D7401001D7006C01930EFEE004006800100 +8577:0820FFFE082000007DFE042028FC1084FEFC128414FC108410FC100050482084 +8578:0820FFFE0820000047BC248427BC0400E7BC240427A82410242854448FFE0000 +8579:0820FFFE0A200100FFFE10A0209045FE7B2011FC25207DFC0920112021FEC100 +857A:0440FFFE04403E2822243E240020FFFE22203E2822283E1022122F2AF2464282 +857B:08200820FFFE082000483E4820483CFC20483C482048FEFE20004448FE844302 +857C:0440FFFE044000203EFC20243DFE20243CFC2020FEFC102025FE7E2022200020 +857D:0820FFFE082002401FF812481FF812483FFC20002FF820003FFE24484530860E +857E:0820FFFE08203FF801007FFE41029D7401001D7000003FF821083FF821083FF8 +857F:0440FFFE0440101E13E0152254945BFC504097FE108011FC2A48243044488186 +8580:08200820FFFE082023F81248924842A84BF8080017FCE4A424A424A42FFE0000 +8581:0820FFFE082004003FF8292825482FE8254828280100FFFE02800C603018C006 +8582:0820FFFE082010003E2022203E3E22443EA408247F2810281E1022282A444482 +8583:0440FFFE0440202017FE100081F8410851F8100027FEE40225FA250A25FA2406 +8584:0820FFFE0820004827FC104013F8824843F84A480BF81248F01027FC22102130 +8585:0820FFFE082023FE2200FAFC4A004BFE4AA4929852C6220853FE4A8884480818 +8586:0820FFFE082000F87F00221011207FFC4204292847E408001FF0282007C0F83E +8587:04400440FFFE044022204AA08ABE1FC420A46F24A0282F28291029A829443082 +8588:0820FFFE092002800C6037D8C0063FF829283FF800001FF010101FF010101FF0 +8589:0820FFFE092011F81100FFFE00243FFE20202FA422242A182A90512A46469882 +858A:04400440FFFE044010041F0422247FA4A4A43FA424A43FA400042A8445540008 +858B:0820FFFE492021FC0A44F0B0230E3FF010101FF010101FF010101FF008201010 +858C:08200820FFFE0820210027DE545297D4E458245457D29512F49A255446108410 +858D:0440FFFE04407F102A107F1012100C107F904A905E9040905E924A9244924B8E +858E:0820FFFE08207FFC44447FFC00007FFE4922911431FC5F1090A0104411A4161C +858F:0820FFFE082001003FF80820FFFE00001FF010101FF010101FF04904489287F2 +8590:04400440FFFE04400C2071FC102013FEFC8831443A7A54885150902010D81706 +8591:0820FFFE08207FFC00003FF821083FF82108FFFE00003FF821083FF82108FFFE +8592:0440FFFE044008000F7828087F28A110162838C4D11009207FFC05401930610C +8593:0820FFFE082023F8100813F8800847FC544413F82248E04027F8211020E02F1E +8594:0820FFFE09207FFC111029284544FFFE00003FF8200827C8244827C820083FF8 +8595:0820FFFE082001003FFC22203FFC22402FF822483FFC22482FF846604A50B24C +8596:08200820FFFE082021F8110811E8012873FC120412F4129412F412142A0847FE +8597:0820FFFE08207FFC41044FE441045FF440044FE448244FE446944A6452147FFC +8598:0820FFFE0820004023F8104017FC0110F7FC104013F8104017FC1040284047FE +8599:04400440FFFE044020A020907DFE9120132011FCFD2011FC2920252041FE8100 +859A:0820FFFE082000FC7E8410FC10843CFC240047FEA48019FE0A521092212A4044 +859B:08200820FFFE082010407C2045FC44887C5043FE40207C2045FC44207C204420 +859C:0820FFFE082000403E2022FC22883E5021FE20203E2052FC52209E2012200020 +859D:0820FFFE08201FF020207FFEA4882BF4200027F8200027F8200047F8440887F8 +859E:0820FFFE082000407EA0119812463DF8250845F8A50819F80944112821904108 +859F:08200820FFFE092002800440183067CC00003EF8228822883EF8082014502288 +85A0:08200820FFFE082013FC104015F8550859F8510891F8110829F8249045088204 +85A1:0820FFFE08201FF010101FF010105FF450145FF440047C7C0440FC7C24444444 +85A2:04400440FFFE044020FC3C244444BE8C2A503E7C2A903E102AFE2A1042108610 +85A3:0440FFFE04400810FF1008FE7E1000107EFE42427E44422824100E28F0444182 +85A4:0820FFFE082000507E5011DC10503C5025DC6450945009DC0850105023FE4000 +85A5:0820FFFE08203FF824483FF808001FFC2204DFC412441FC402243FE410280010 +85A6:0820FFFE09203FFC24403FF824483FF8240027FC28002FFC20044AA451548008 +85A7:0820FFFE09207FFC00001FF010107FFE4002BFF408401F48625014621842E03E +85A8:0820FFFE08207FFC44447FFC00007FFE4002BFF408401F48625014621842E03E +85A9:0440FFFE0440002079FC4888505063FE52204AA04AFC6B2052FC4420442049FE +85AA:0820FFFE0820100008047F7822401440FF7E08487F4808482A484988A8881108 +85AB:0820FFFE08203FF80100FFFE11101FF011101FF001003FF80100FFFE24884244 +85AC:0820FFFE0920020047C4244817D0244847C40100FFFE054009203118C1060100 +85AD:0440FFFE044000200C4071FC112411FCFD4431FC3850549051FE901010101010 +85AE:0440FFFE0440000049202A20FF3E2A4449A41024FE282228641018282444C282 +85AF:0820FFFE08203FF824483FF802001FD00220FFFE03000FF03810CFF008100FF0 +85B0:0820FFFE08203FF80100FFFE01003FF829283FF801003FF80100FFFE24484224 +85B1:08200820FFFE0820140855083608147E7F0814487F2808283E0808080F287810 +85B2:0820FFFE09207FFE40029FF4092011C006001FF868080FF808080FF804100808 +85B3:0820FFFE0820004023F8104017FC000073F8120813F810C411A812902C8847FE +85B4:0820FFFE09207FFC4204A92847E400003FF82448FFFE00007FFC010005000200 +85B5:0820FFFE09207FFC01003FF80000FFFE00023FF00100FFFE00107DFC44907C30 +85B6:0440FFFE0440080031FCCB242D2431FCC924152425FCCC2015FC2420D4200BFE +85B7:0820FFFE08203FF801007FFE41029D7401001D7000007FFC02003FF824482458 +85B8:0820FFFE0820200017FC10A087FC44A457FC100027FCE0002FFE2040224824C4 +85B9:0820FFFE0920FFFE01003FF800001FF010107FFE48229FF401003FF80100FFFE +85BA:0820FFFE08200100FFFE02887D7025484D6690101FF010101FF0101020104010 +85BB:0820FFFE082022481490124883F8424853F8124823F8E0402FFE215022482444 +85BC:0820FFFE09203FFC24403FF824483FF828402F7828442F3C20804FF840809FFC +85BD:0820FFFE082000007F7C14207F20553855287F48086808587F4A084A0F6AF046 +85BE:0820FFFE08207FFC111021087FFCB55A29283558210835582928355820082018 +85BF:08200820FFFE0820247C3A0422281E1020FE3E124850085E7F5014B0229E4100 +85C0:0440FFFE044008202AA44D28145022887FFE410291141120228004401830E00E +85C1:0820FFFE082001007FFC08200FE000007FFC48244FEC01007FFC05401930E10E +85C2:0820FFFE08207F00227C3E0422283E1023A8FE4403F87F04118863700D18F106 +85C3:0440FFFE044008207F2000203E3E22423E8400107F1041105D2855285D444382 +85C4:0440FFFE044008207FFC08200FE00820FFFE14502F8841241FF0011009201310 +85C5:0820FFFE08207FFC44447FFC0800FF8400247F2400247F2400247F0441147F08 +85C6:0820FFFE0A2001007FFE4442BFFC0440FFFE082031D8CF0601007FFC01000300 +85C7:04400440FFFE04400A0033B822083A38238820883AB82288FFFE082010102008 +85C8:0440FFFE04400020F7A490A89292F114920895F4F84293F89040F0A091100608 +85C9:08200820FFFE082010487CFC10487C4811FEFE0010FC388454FC948410FC1084 +85CA:0440FFFE044000200DFE7102110211FEFD0031FE39AA56AA52FE94AA10A21086 +85CB:0820FFFE08203EF812480A28124808801FFC30805FF890801FF810801FFC1000 +85CC:0820FFFE0A2001007FFC42442B904C2837E0C1001FF011101FF001087FFC2004 +85CD:0820FFFE082000003F2024203F3E21403F5024883F0800003FF824482448FFFE +85CE:0820FFFE09203FF80108FFFE01083FF801007FFC248842443FF824482448FFFE +85CF:0440FFFE044800241FFE502057A0752417A4F4A857A85510951227AA20464082 +85D0:0820FFFE082008103020CAFC2C843084C8FC14842484CCFC1448244AD48A0906 +85D1:0440FFFE14401FE020207FF8A30824881FF011101FF008001FF0282007C0F83E +85D2:08200820FFFE08200DFC710411FC1104FDFC308039FE56225552910211FA1006 +85D3:08200820FFFE082020443E2844FEFF1049107F7C49107F1000FE0F10F0104010 +85D4:0820FFFE0A207FFC4104BFF8044028281FF02828CFE608200FE0010015102208 +85D5:0820FFFE0820100011FC7D2411FC7D2411FCFC2013FE3A22562A92FA120A1206 +85D6:0820FFFE08203F7C24443F2821103F2824463FF010101FF010101FF008201010 +85D7:0440FFFE044042102F9022100F9E0AA2EA882F88220827142A94322252428FFE +85D8:0820FFFE092001F801003FFC21042FE0210827F8249027F0249047F44A4A93FA +85D9:0440FFFE0440100008787F48224814867F0010FC694416446D281490642818C6 +85DA:0820FFFE09207FFC01003FF824483FF810101FF010101FF010101FF008201010 +85DB:0820FFFE0A2001007FFE42029CF410101EF010101FF008001FFC20040AA412AC +85DC:0820FFFE08200640387C08947E241C442A94490802C01D30E92E054009201310 +85DD:0820FFFE08203E2008F87F282A285D6A082A3E5600823FF80000FFFE10103FF8 +85DE:0820FFFE082000007FFC08001FF02810CFF000007EFE20407EFCA3443E7C2244 +85DF:04400440FFFE04403FF821083FF821083FF80000FEFE9292FEFE9292FEFE8282 +85E0:0820FFFE092002001FF010101FF010101FF020407EFC42847EFC42847EFC4284 +85E1:0820FFFE08A0404027FC211000A007FCE44427FC244425F4251425F4540C8FFE +85E2:04400440FFFE044022204AA08ABE1FC420A46F24A0282FA822102FA822442F82 +85E3:0820FFFE08207FFC44447FFC24987EE000847E7C42007E9842E07E844284467C +85E4:0440FFFE044000203D2424A825FC3C4027FE24883D2426AA247044A855248A62 +85E5:04400440FFFE044021104BA472B823904AA47BBC0100FFFE05401930E10E0100 +85E6:0820FFFE08A03FFE24103F7C26382D5434122FF8208027F820805FFE40808180 +85E7:04400440FFFE0440103C13C025447CA809FC104027FE7C8000F85548563080CE +85E8:08200820FFFE09203FFC24403FF824483FF828402F7828442F3C40004A489124 +85E9:0820FFFE0820203817C01248815047FC524814042BFAE24823F8224823F82208 +85EA:0440FFFE044008007F204920FFBE49447FA42A243E281028FF1022281C446282 +85EB:0820FFFE0820000027FC10A017FC84A447FC520813F82208E3F8204027FC2040 +85EC:0820FFFE08207DFC452449FC482053FE490445FC450455FC490441FC40884104 +85ED:0820FFFE09207FFE5022A8143EF822083E0822F83E8022FCFE0412042228CE10 +85EE:0440FFFE044010A0109011FEFD2013FC312039FC552051FE900012A412521452 +85EF:0820FFFE08203F0821083F7E20082F4820285FA8440895282C900100489487F2 +85F0:0820FFFE08207784428462A454A469A414242224DD2408247F244A042F94F008 +85F1:08200820FFFE092000803FFC2100AFF868882FF86888AFF8215042F84C8AB07E +85F2:04400440FFFE0440100013FE1200FE7C1244327C3A0056EE52AA92EE120013FE +85F3:0440FFFE05407FFC08200FE000007FFC48244FEC00003FF80100FFFE0920711C +85F4:04400440FFFE144010F824887CF8088810F824007DFC01545554555483FE0000 +85F5:0820FFFE08200BF8120833F8504097FE115012480100FFFE06801C48E530060E +85F6:0820FFFE08203FFE21042E3822102FBC27182AB432522040247C444044409FFE +85F7:04400440FFFE044020201022FDFC00287BFE004079FC068478FC488478FC4884 +85F8:04400440FFFE04400022FCFA2024602895FE344058FC948435FC568490FC2084 +85F9:04400440FFFE0440200011FCFD0401FC790401FC788001FE7A224D5279FA4806 +85FA:0820FFFE08207C7C44447C7C44447D7C44844FE459044FC449044FC449044FEC +85FB:0820FFFE082023F8120813F8800047BC54A417BC2040EFFE215022482C462040 +85FC:0820FFFE09207FFC41043FF801001FF001007FFC24483FF801004884489287F2 +85FD:04400440FFFE044008007F7C2244147CFF44087C7F44087C2A28492AA94A1086 +85FE:04400440FFFE14401080FEF811087EFC548454FC7C8410FC388454FC90481084 +85FF:0820FFFE08203FF801007FFE41029D7408801FFC30805FF890801FF810801FFC +8600:08200820FFFE082011FC1154FDFC102015FC182033FED08811FC102053FE2020 +8601:0820FFFE08207FFC01003D7825483D7801007FFC01003D7825483D780100FFFE +8602:0820FFFE09202488242443E424281214A0A0A4A41C1C0100FFFE05401930E10E +8603:0820FFFE092011F81100FFFE08102E5C28502E50F0FE01007FFC05401930E10E +8604:0820FFFE0820770C5570774000407F7E49487F4849487F480848FF8808880908 +8605:0820FFFE0820220047DC888017C0257E67C8A54827C821082FE8210822A82450 +8606:0820FFFE092001F801003FFC21042FE0210827F8249027F024904FF849489FFC +8607:04400440FFFE0440200C3E704410FF1049FE7F1049387F34005455528A900010 +8608:0820FFFE0820060038FE08107F7C1C442A7C49441C7C1444157C262824444082 +8609:0820FFFE08203FF82448FFFE901213F020102FFC6804A7F02210212020C02738 +860A:0440FFFE0440100010F824A87CA808D810F824007DFC01545554555483FE0000 +860B:04400440FFFE044009FE28202EFC2884FEFC088428FC2A8444FC08003048C084 +860C:0820FFFE0A2027DE491297D2211265DAA5142FD000003FF80000FFFE11102308 +860D:0820FFFE08A03F1004107FD0043E7FD255527FD204127FD20412FFE22AAA4544 +860E:0820FFFE08203FF801007FFE41029D7400003EF822A83EA822F83E844284867C +860F:0820FFFE0820400049FE742044FC3C8400FC7C8400FCFE8410FC5400D2482084 +8610:04400440FFFE0440203C13C0FD4400A879FC00407BFE008078F849487A3048CE +8611:0820FFFE08A03FFE22102FBC231826B42A5220003FFC44004FF8940827F80408 +8612:0820FFFE08A01CF0F11012F810A8FCF810A831FC392455FC552491FC1022101E +8613:08200820FFFE08200C8070F811081210FDFC312439FC552451FC90001154122A +8614:0440FFFE0440480075FE44203CFC00840CFC708410FCFE8410FC380054489084 +8615:0440FFFE04402020247C4AA4F81810E626104AFEFA10027CAA10AAFE051008FE +8616:0440FFFE044020207DFC44887C5041FE7C2045FC7C2001007FFC05401930E10E +8617:0820FFFE082000407C2045FC7C5043FE7C20A5FC3C2001007FFC05401930E10E +8618:0820FFFE082001007FFC00003EF822883EF804403FF80440FFFE04901C60671C +8619:0820FFFE08207F7848485E8664785F484A307F4C00007EFC22441A3462C4060C +861A:08200820FFFE082020443E2844FEFF1049107F7C49107F1000FE55104A908A90 +861B:0820FFFE0820241024FEFF2024443CFE24023C7C2444FF7C5444627C40447E4C +861C:04400440FFFE044029007DFC29043A4411547CE455F47C4410E4FD5410541008 +861D:04400440FFFE044008201420223E5D4280847710551077102228222855448882 +861E:04400440FFFE044008201420223E5D4480A47724552877282210222855448882 +861F:0440FFFE044001FC7CA845FC482051FC480445FC440455FC484042A4428A447A +8620:0820FFFE0820104057FC524855547FFE100017FCF40455F4551455F4940417FC +8621:0820FFFE08203EF822883EF822883EF822883EF814502288FFFE082007C07838 +8622:0440FFFE0440100008407E7C2440FF7C00047E7C42407E7C42407E7C4242463E +8623:04400440FFFE044022207F10227EFF9008107F10497C7F1049107F1022FE4100 +8624:0440FFFE0440103C27C07A4449284BF84A087BFC4A044BFE7A024CAA04AA0906 +8625:0820FFFE092002800C6037D8C0063BB82AA83BB800003FF824883FF8248824B8 +8626:04400440FFFE04403FF801007FFE41029D7401001D7000003BB82AA83BB82AA8 +8627:0820FFFE08A000F840802FFC28840BF0E8882BF829402AA8317022A851608FFE +8628:0820FFFE0820070CF87051102A2420783E104824FF7E081249544F5271920030 +8629:0820FFFE28203F20403EBE482AA8FF284A107F2808461F8002103FF811102308 +862A:0820FFFE09203FFC24403FF824483FF828402F7828442F3C44905FFC82A01C9C +862B:08200820FFFE082027D01510179E84A047A8554417C42000E7F8252825282FFE +862C:0440FFFE044010007DFC44047CFC40047DFC44007DFE11225CFC50A45EACF020 +862D:0820FFFE08207C7C44447C7C44447C7C41045FF441045FF455545FF44544592C +862E:0820FFFE08203FF824483FF800003FFE22042A942514289422544A8445148888 +862F:0820FFFE082021F8110841F821080BFE090073FC14A4115412883FF82448FFFE +8630:04400440FFFE044021FC210449FCF90413FE22524BFEF80001FCA888A870038E +8631:0440FFFE0440100093FE5420FEFC388454FC928400FC1484FEFC280044488084 +8632:0440FFFE04401FF011101FF011103FF82AA83EF82AA83EF801003FF80100FFFE +8633:08200820FFFE082022107F7C2210FF90087E7F0049107F10497C7F10227E4100 +8634:0820FFFE08201D7049245D7449245D7449247FFC00007FFC10101FF00820FFFE +8635:0820FFFE08200094FDD2481249507BFE481049D4795449D44F48F9CA09560822 +8636:0440FFFE04400C20704011FCFD2439FC552493FCFC24245A685E10902912C60E +8637:0440FFFE0440FFFE110013DE5A5253DE52505BD2E40E0FE0544483821C70E00E +8638:0820FFFE08200050FE4810FE11907CFC549054FC6C9044FE7C8045547D2A462A +8639:0820FFFE08A0104017FC10005BF856A853F892441158124410A8119016A810C6 +863A:0440FFFE0440100008287F24147E494855C87F7E08487F7E514855485D7E4340 +863B:0820FFFE08207F3C2A243E422A3CFFA449187F6608401F8002103FF811102308 +863C:0820FFFE08A03FFE24103F7C26382D54341221203F3E21202F3C41205F3E8120 +863D:0820FFFE08201FF011101FF011103FF82AA83EF82AA83EF801007FFC0920711C +863E:0820FFFE08A0204027FC200023F8FAA823F822442118224438A8E19046A800C6 +863F:0820FFFE08207FFC44447FFC10A0209045FE792013FC25207DFC012055FE8100 +8640:0820FFFE0920FFFE02887D7025484D6682807EFC02803EF802807EFC0280FFFE +8641:0440FFFE0440FFFE110013DE5A5253DE52505BD2E64E0FE0544483821C70E00E +8642:0820FFFE08203FF801007FFE41029D7400403EFC23483E3009CE2E7828487E78 +8643:0820FFFE08202294129215508FFE42905EF412942EF4E2942EE8228A22F62F22 +8644:0820FFFE08A021F822882070FBAEA8F8A850FBFE22A02AFC3B20CA78042009FE +8645:0820FFFE082001243CA825FC24403FFE248825FC3EA224F824A044FC54048AAC +8646:0820FFFE08201FF011101FF011107FFC4AA47EFC4AA47EFC20087FFC11102308 +8647:0820FFFE08A87BFE08880BDE7A5243DE40A079FE09200BFC0D2009FC512021FE +8648:0820FFFE082000007BDE489249124BD27A5E03C07A5E4BD24A524BD2799E4A52 +8649:0820FFFE08207F10007C3E44227C3E44007C7F40557E49407F7E490249AA4306 +864A:0820FFFE082021084FD2F03C23884812FBBE0280ABAA01007FFC05401930E10E +864B:0820FFFE082077DC444477DC4444FFFE92921C7010101FF008201FF0642C0860 +864C:0820FFFE49202A3E7F4849485DA86B1049285FF612903EF822883EF8228A3DFE +864D:0100010001F8010001003FFC200421082100211821E02F002104410440FC8000 +864E:010001F801003FFC210421602F88210820F8200023E02220222044244824901C +864F:010001F801003FFC210421602F88210820F821002FF821082108420844509820 +8650:010001F801003FFC210421602F88210820F8200027F824003FFE440047F88000 +8651:010001F801003FFC210421602F88210820F82000208020442A424A12521081F0 +8652:0008007C3F80208020F820802FFE288228F02F84287C28004BE052229422281E +8653:2020203E202021FEF922293829E02922291E29002B782D484948424A824A0486 +8654:010001F801003FFE210221F02F0420FC210020802FF822202140408043608C1C +8655:010001F801003FFE210221F02F0420FC2400243827A828AA352A42464580987E +8656:010001F801003FFE210221F02F0420FC201027E0224821502FFE404041408080 +8657:010001F801003FFE210221F02F0420FC2000201C27E0240027FE442044209FFE +8658:010001F801003FFE210221F02F0420FC200027F8240827F8240847F84408BFFE +8659:010001F801003FFC210421602F88210820F8210020882A242A445380460899F8 +865A:010001F801003FFC210421602F88210820F8224032482A482A5042405FFC8000 +865B:010001F801003FFE210221F02F0420FC2120292429242F3C212041205FFE8000 +865C:010001F801003FFC21042FE0210827F8249027F0249027F041005FF884080818 +865D:08200F2008207F7E496A4EAA782A492A474A40924E224A544A0A520291FE2000 +865E:010001F801003FFC21042FE0210827F8241027F020002FF820805FFC42209C1C +865F:0020783E482049FE4922793801E0FD22211E41007978094809480A4A524A2486 +8660:2010101E0010FEFE0092289C44F08292048E448028B810A828A8452A852A0246 +8661:010001F801003FFE210221F02F0420FC200021202924252821205FFE42108408 +8662:04101E1EE01022FE9292549C40F00492FF8E048044B824A824A8052A152A0A46 +8663:08100C1EEA100AFE0892FE9C28F02892B88EA880AAB8AAA8B6A8C32A812A0246 +8664:10101E1E10107EFE52925C9C70F052924E8E40805CB854A854A8972A952A2246 +8665:10281E24102E7EF052285C12702A52D64E28402E5CF0542454285612942A20C6 +8666:2810241E2E10F0FE2892129C2AF0D692288E2E80F0B824A828A812AA2B2AC646 +8667:08000FBC08007FC048404F3E7890479052205FBE72025F8252025F8252149F88 +8668:08020F8208047FC848504F0278824784400848907DE248825DC46AA8489088A0 +8669:1020923E522055FE11227D3845E07D22451E7D00117859485548964A524A2486 +866A:2120213C39642318FA66AABEB2AAE6BEAAAA9ABE8288BABEAA88AE7E2A0042AA +866B:0100010001003FF821082108210821083FF8210801000110010801FC7E040000 +866C:0840084008407F4049404940494049407F40484008400A440F44F144403C0000 +866D:0800080008FE7F2249224922492249227F22482208220A420F42F18241140208 +866E:1000100010F07C9054905490549054907C905090109014921C92E512410E0200 +866F:0804080408447F4449444944494449447F44484C08740A440F04F10440040004 +8670:0800080008FE7F1049104910491049107F10481008100A100F10F11040500020 +8671:00007FF0009003D07C1004103F902490249024903F900412048A07CA78462002 +8672:0820082008207F2049204930492849247F22482208200A200F20F12040200020 +8673:0820082008207F7C49444984490449447F24481408140A040F04F10440280010 +8674:1008101C10E07C20542054205420543E7DE05020102014221E22E222401E0000 +8675:1020102010207D20552C5534556457A47D245134112815221D22E50240FE0000 +8676:100011FC10207C2054205420542057FE7C205020102014201E20E22040A00040 +8677:0800087C08107F1049104910491049FE7F10481008100A100F10F11040100010 +8678:100011FC10047C0854105420542057FE7C205020102014201E20E22040A00040 +8679:1000100011FC7C2054205420542054207C205020102014201E20E22043FE0000 +867A:00200020FE2025FC25242524252425FC24202420242825FC2404440243FE8000 +867B:1020101010107C0055FE5480548054807C805080108014801E80E28040FC0000 +867C:1040104010807CFE5500560054FC54087C105020104014801D02E50240FE0000 +867D:00001FF0101010101FF0010001003FF8210821083FF80120011001F87F042004 +867E:100013FE10407C4054405440545054487C445044104014401E40E24040400040 +867F:0000FFFE040007F00810101020A041403FF8210821083FF8010001087FFC2004 +8680:2020202020203DFC45244924A124212421FC212420202028282433FE21020000 +8681:1040102411247D0455045488548854887C505050102014201C50E48841040602 +8682:100011F810087C0854885488548854FE7C025002100215FA1C02E40240140008 +8683:040008401F8003080C103FE000C0070079001FF0111011101FF001087FFC2004 +8684:1040102010207DFE544054405440547C7C445044104414441E84E28441280210 +8685:100011FE11007D0055785548554855487D485168115015421D42E542423E0400 +8686:1000100011FC7D2455245524552455247DFC5100110015001D02E50240FE0000 +8687:100010FC10847C845484548454FC54A07CA050A0109014901D08E50842040402 +8688:100011FC10887C8854885488548857FE7C885088108814881C88E50841080208 +8689:020001007FFC0820044003801C70E10E1FF0111011101FF0110001087FFC2004 +868A:1040102010207DFE54885488548854887C885050105014201E20E25040880106 +868B:1020102010207DFE55225522552255227D52514A118A15021D02E502410A0104 +868C:1020102010207DFC54205420542055FC7C205020102017FE1C20E42040200020 +868D:1010111011107D125512551455D855107D105110111015121D52E592410E0000 +868E:1000100010FC7C8454845484548454847CFC5084108414841E84E28440FC0084 +868F:100010FC10847C84548454FC548454847C8450FC108414841E84E28441140208 +8690:1040104010807CFC55045604548454447C445014102414441D84E40440280010 +8691:1020102010207DFE54205420542055FC7C845088104814501E20E25041880606 +8692:100010FC10847C8454A45494549454847DFE5084108414841C84E50441140208 +8693:100411E410247C24542455E4550455047D0451E4102414241C24E42441440084 +8694:1004101E11F07D1055105510551055FE7D105110111015081D0AE54A41860102 +8695:00003FF801000200FFFE044008203118DFF6111011101FF0110001087FFC2004 +8696:1000100011FC7C005400540057FE54907C905090109014901D12E512420E0400 +8697:1020102010207DFC54245424542454247DFE5020105014501E88E28841040202 +8698:1048104410447C4057FE5450545054507C505050109014921C92E512410E0200 +8699:1020102010507C5054885544562254207C0051FC100414081E08E21040100020 +869A:1008101C10E07C805480548054FE54887C885088108814881D08E50842080408 +869B:1020102010207C2055FC5524552455247D2451FC112414201E20E22040200020 +869C:100011FE10087C8854885488550855FE7C185028104814881D08E60840280010 +869D:1008103C11E07C205420543C55E054207C20503E13E014201E22E2224022001E +869E:1020102010207C2055FE5420547054707CA850A8112415241E22E42040200020 +869F:1000100011FC7C2054205420542054207DFC5020102014201C20E42043FE0000 +86A0:044008203018DFE60420042008A0104021001FF0111011101FF001087FFC2004 +86A1:1010109010907C8855085504560455FA7C885088108814881D08E50842280410 +86A2:1040102010007DFC5400540054F054907C905090109014921C92E512410E0200 +86A3:1008104810487C485444548454A455227C205040104014481C84E5FE40820000 +86A4:00003FF012100920044003801C70E10E1FF0111011101FF0110001087FFC2004 +86A5:1010108810847C8455025602548854887C885050105014201E50E28841040202 +86A6:100010FC10847C84548455FE548454847C8451FE108414841E84E28440940088 +86A7:1020102010507C5054885504560254887C885088108814881C88E50841080208 +86A8:1020102010207C2055FC5420542054207DFE5020105014501E88E28841040202 +86A9:0100210821083FF80100FFFE000001003FF8210821083FF8010001087FFC2004 +86AA:1010111010907C9054105510549054907C10501E13F014101E10E21040100010 +86AB:1040104010FC7C84550456F4549454947CF45084109414881E82E282407E0000 +86AC:100011FC11047D0455245524552455247D245154105014901C90E5124212040E +86AD:100011FC11047D04550455FC550055407D445148117015401D42E642423E0400 +86AE:1050105410527C925490559E55F056907C905090109014901E8AE28A40860082 +86AF:1004100E10F07C8054805480548054FE7C885088108814881C88E48843FE0000 +86B0:1020102010207C2055FC5524552455247D2451FC112415241D24E52441FC0104 +86B1:1080108010807CFE554055405640547C7C4050401040147E1E40E24040400040 +86B2:100011FC10207C20552454A454A854207FFE5020102014201E20E22040200020 +86B3:1004101E11F07D1055105510551055FE7D105110111015081D0AE54A41A60112 +86B4:201020902090F910A97EAA52AB92A892F912A11222522BD23862E822404A0084 +86B5:1000100013FE7C08540855E8552855287D28512811E815281C08E40840280010 +86B6:1088108810887C8855FE5488548854887C8850F8108814881E88E28840F80088 +86B7:100010FE10807C80548054FC548454847C84508410FC14801E80E28040FE0000 +86B8:1008101C11E07D005500550055FE55107D105130111815141D12E61042100410 +86B9:1044104410447C8454BE5584568454A47C945094108414841E84E28440940088 +86BA:1020102010207DFC5524552455FC55247D24512417FE15041D04E50441140108 +86BB:042004207FA00E20152224A2441E01001FF0111011101FF0110001087FFC2004 +86BC:1080108010807DFC5504560455E455247D245124112415E41D24E40440280010 +86BD:100011FE10107C1054205420546854A47D225222102014201C20E40043FE0000 +86BE:1010101010107DFE55125514551055FC7D445144112815281D10E62842440482 +86BF:1020101010107DFE54205420544454847DF85010102014441C82E5FE40820000 +86C0:1040102010007DFE54205420542054207DFC5020102014201C20E42043FE0000 +86C1:100011FC10447C4454445444549454887D0050FC108414841E84E28440FC0084 +86C2:1050104810487C4055FE54405440547C7CA450A410A815281D10E62840440082 +86C3:100011FE10207C20542055FE552255227D52514A118A15021D02E502410A0104 +86C4:1020102010207C2055FE5420542054207DFC5104110415041D04E50441FC0104 +86C5:1020102010207C20543E5420542054207DFC5104110415041D04E50441FC0104 +86C6:100010FC10847C84548454FC548454847C8450FC108414841C84E48443FE0000 +86C7:1020101010107DFE55025604548054887C9050A010C014821E82E282407E0000 +86C8:1020102011207D2055FC5520562054207DFE5020105014501E88E28841040202 +86C9:1020102010507C5054885524561254107DFC5004100814881E50E22040100010 +86CA:010001003FF8210821083FF8010001087FFC00043FF8244824482448FFFE0000 +86CB:7FFC0104110011F81100290047FE81001FF0111011101FF0110001087FFC2004 +86CC:1008101C11F07D5055505550555055507D505148114815681D54E67442520400 +86CD:2208111000207FFE4002810401003FF8210821083FF80120011001F87F042004 +86CE:100011FE11007D00550055FE552055207D3C5124112415241D24E64442540488 +86CF:100011FC10847C8854505420545054887F26502011FC14201C20E42043FE0000 +86D0:1050105010507C5055FC5554555455547D5451FC115415541D54E55441FC0104 +86D1:1020102010487C8455FE5412549054907CFE5110101017FE1C10E41040100010 +86D2:1040104010787C8855505420545054887D0650F8108814881E88E28840F80088 +86D3:082008287F240820FFFE002008247F24492449287F28481009120FAAF0464082 +86D4:1000100011FE7D025502557A554A554A7D4A514A117A15021D02E5FE41020000 +86D5:1020102011FE7C40544054FC548455847EFC5084108414FC1E84E28440940088 +86D6:1090108810807DFE54A054A854B054A47CA850B01124152A1D32E62242DE0400 +86D7:040008003FF020103FF020003FF820083FF801003FF821083FF801087FFC0004 +86D8:1104108410887C0057FE5420542055FC7C20502013FE14201E20E22040200020 +86D9:1020102011FC7C205420542057FE54007C20502011FC14201C20E42043FE0000 +86DA:2002200223E2F90AA90AA9EAA92AAA2AFB2AA2AA244A284A3882E902420A0404 +86DB:1020112011207DFC55205620542057FE7C7050A810A815241D24E62240200020 +86DC:2100217C2124FA24AA24AEFEAA24AA24FA24A27C22242A203A20EA2042400280 +86DD:100011F811087D0855F85508550855F87D445148113015201D10E54841860100 +86DE:1008103C11E07C20542057FE542054207C2051FC110415041D04E50441FC0104 +86DF:1040102010207DFE54005488550456027C885088105014501C20E45040880306 +86E0:2040204021FCF844A884A884A928AA10F908A3DE214A294A394AEA52435A04A4 +86E1:100013DE10427C425652554A554A54427CC6514A125214421C42E442414A0084 +86E2:1104108410887C0055FE5488548854887C8853FE108814881D08E50842080408 +86E3:1020102010207DFE5420542054FC54007C0050FC108414841E84E28440FC0084 +86E4:1020102010507C505488550456FA54007C0050F8108814881E88E28840F80088 +86E5:10201020107C7C8455485430542054487D90503E104215A41E18E21040600180 +86E6:1020102013FE7C2055FC542455FC55207DFE5022102A14541E50E28841040202 +86E7:100011FC11047D04550455AC555455547D54515411AC15041D04E50441140108 +86E8:100011FE10207C20544054FC548454847C8450FC108414841E84E28440FC0084 +86E9:00007DF01110119011521D12E20E45001FF0111011101FF0110001087FFC2004 +86EA:080008007F7C08243E2408447F54088809001FF0111011101FF001087FFC2004 +86EB:1040104010FC7D04560855FE5500557C7D445144115415481D42E542413E0200 +86EC:044004407FFC04400440FFFE082010102108DFF6111011101FF001087FFC2004 +86ED:100011FE10207C405488550455FE54227C20502011FE14201C20E42043FE0000 +86EE:02000100FFFE044014502448444401001FF0111011101FF0110001087FFC2004 +86EF:1040104010447DF45448545057FE54407C805184129814E01C82E482407E0000 +86F0:10801080FBF010901990F0941154520C25041FF0111011101FF001087FFC2004 +86F1:1020102010207DFC5420552454A454A87C2053FE105014501E88E28841040202 +86F2:2080208020BCFBC0A850A824A8D4AB0CF800A3FE209028903912E912420E0400 +86F3:208020BE2088FA88AABEAAAAAAAAAAAAFAAAA2AA22AA28AA392EE90842080408 +86F4:1040102013FE7C8854505420545054887D065088108814881C88E50841080208 +86F5:100011FE10007C9255245648552454927C0051FE102014201C20E42043FE0000 +86F6:1004101E11E07C2255125494548054087DFE5008108814481E48E20840280010 +86F7:1028102410247C2055FE5420552054B27CB4506810A815241E22E42040A00040 +86F8:1020112410A47CA8542055FC550455047DFC5104110415FC1D04E50441140108 +86F9:100011F810087CD0542055FC552455247DFC5124112415FC1D24E5244124010C +86FA:1020102010207DFC542054A854A854A87D745222105014501E88E28841040202 +86FB:1010109010887D08560455FA550855087D0851F8109014901C90E5124212040E +86FC:1020102011FE7C2055FC5524552455FC7D24512411FC14201DFEE42040200020 +86FD:100010FC10847C8454FC5484548454FC7C84508410FC14001E48E24440820102 +86FE:201020D82394F894A890ABFEA890A894F894A0D82398289038AAE8CA42860102 +86FF:1020102010507C885544562254F854087C10502011FC15041D04E50441FC0104 +8700:00003FF8244824483FF810001FFC22045FC4924412441FC4022403F47C142008 +8701:2100210021FEFA00AC00A9FEA822A824F920A13C212029203920EAA0447E0800 +8702:1040104010FC7C885550542054D857267CF8502010F814201FFEE42040200020 +8703:3FFC20002FF820003FFC24482430260E20802FF8288848884FF880841FFE0802 +8704:100011FE11007D00557C5500550055FE7D505152115415481D48E64442520460 +8705:1028102413FE7C20542055FC552455247DFC5124112415FC1D24E5244124010C +8706:100011FC11047D0455FC5504550455FC7D04510411FC14501C50E4924112020E +8707:080C08F07E8008800EFE788808882908120801003FF821083FF801087FFC0004 +8708:100011FC11047D0455FC5400540055FC7C20502013FE14201C50E48841040202 +8709:1008103C11C07C04554454A8540055F87C10502013FE14201E20E22040A00040 +870A:208421C42704F914A914A914AFD4A914FB14A39425542D043904E90441140108 +870B:1040102011FC7D04550455FC550455047DFC5120112215141D08E54441820100 +870C:1110111211147DD8551055125552558E7D20502011FC14201C20E42043FE0000 +870D:1020102010507C885504560254F854207C2053FE102015241D22E62240A00040 +870E:1000107C10447C44547C540054FE54827C8250FE108214821EFEE282408A0084 +870F:101C11E010207C2057FE54A8552456227DF85088109014BE1D02E50242140408 +8710:1088108810887DC8549E548A548A57EA7C8A508A110A154A1FEAE512402A0044 +8711:00187BE0104022787A400A402BFC10002FFE41003FF821083FF801087FFC0004 +8712:2004200E23B8F888A888A928A92EABA8F8A8A2A822A8293E3900EA80447E0800 +8713:2000200623B8F888A888A908A93EAB88F888A2882288293E3900EA80447E0800 +8714:1080108010FE7D02550256FA54AA54AA7CFA50AA10AA14FA1E8AE20240140008 +8715:1104108410887C1055FC5504550455047DFC5050105014901C92E512420E0400 +8716:100011FE114A7D4A554A557A554A554A7D4A517A114A154A1D4AE5FE41020000 +8717:200021FC2104F904A904A9FCA820A820FBFEA22222522A8A3B0AEA02420A0204 +8718:210021002100FBDEAA92AC92A892A892FBF2A09220922952395EEA2044200800 +8719:210421142114F914AFD2A922A92AAB48FB88A550251029143922E97E41220100 +871A:044004407C7C04403C7804407C7C044001001FF0111011101FF001087FFC2004 +871B:100011FC11047D0455FC5510551055FE7D105110117C15441D44E544417C0244 +871C:020001007FFE42028924284849940E1077F001003FF821083FF801087FFC0004 +871D:08207FFC08200FE008200FE00820FFFE10102108DFF611101FF001087FFC0004 +871E:1088108811FC7C88548854F8548854887CF85088108815FE1C00E48841040202 +871F:1020101011FE7C40548455FE540254FC7C8450FC108414FC1E84E28440940088 +8720:200023FE2202FA1AAAE2AA22AA22ABFEFA22A27222AA2B263A22EA2243FE0202 +8721:1048104810487DFE5448544855FE54007CFC5084108414FC1E84E28440FC0084 +8722:100011FC10087C10542057FE542054A07C4051FC115415541D54E55443FE0000 +8723:1088104810507DFC5420542055FC54207C2053FE105014501C90E4924112020E +8724:080C08F07E8018802CFE2A884888888809081FF0111011101FF001087FFC2004 +8725:210021062138F920AFA0A920A93EAB24FBA4A564252429243924E92441240144 +8726:1020102010507C88550456FA540055FC7D54515411FC15541D54E5544104010C +8727:2040202023FCFA04AA04ABFCAA00AA28FA24A3FE22202A503A50EC8845040A02 +8728:1020102013FE7C2055FC542457FE54247DFC50201120153E1D20E6A0427E0400 +8729:100011FC11247D245574552455FC55047D745154115415741D04E60442140408 +872A:1080108010FE7D02568254F2554254427FFA5042115215521DF2E40240140008 +872B:100011FC11047D0455FC5504550455FC7C00511211D415181D10E5524192010E +872C:200021FC2008F810AA22AAAAAA72AA22FA72A2AA23262AA23A42EA0243FE0002 +872D:10401040107C7C8455085600542055CE7D02510211CE15021D02E50241FE0102 +872E:201420122010FBFEA810A810ABD2AA52FA52A25423D4280C386AEB8A41160022 +872F:1020102011FE7C2054FC544055FE54887D24522210F814201DFEE42040200020 +8730:00003EFC22A43EA422FC3E80228222824A7E85003FF821083FF801087FFC0004 +8731:1040108011FC7D24552455FC552455447DFC5090111017FE1C10E41040100010 +8732:101C11E010207C2057FE54A8552456427C4053FE108815081CD0E43040480184 +8733:1020101011FE7C0054FC548454FC54007CFC5008101015FE1E10E21040500020 +8734:100010FC10847C8454FC5484548454FC7C4050FE112A144A1C92E522404A0084 +8735:1050115411547D5455DC5504550455FC7D04510411DC15541D54E55442540404 +8736:1040102011FE7C0054885488555456227C00502013FE14201E20E22040200020 +8737:1020112410A87C2055FC544057FE54887D0452FA148814881CA8E4924082007E +8738:00007EFC48447E4442287E1048287EC601001FF0111011101FF001087FFC2004 +8739:1088108813FE7C8854A8542055FC55247D245154114C15841D04E50441140108 +873A:20002040239CFA04AA04AB9CAA04AA04FBFCA090209028903890E9124212040E +873B:1020102013FE7C2055FC542057FE54007DFC510411FC15041DFCE50441140108 +873C:10A0109010807DFE5510571055FC55107D1051FC111015101D10E5FE41000100 +873D:200023FE2020F820ABFEAA22AA22AB32FAAAA2AA23762A663A22EA22422A0204 +873E:100011FC11247D2455FC5524552455FC7C2053FE107014A81D24E62240200020 +873F:2040202023FEFA02AD04A900A9DEAA52FA52A352249A28943910E9124212040E +8740:1020102013FE7C2055FC552455FC55247DFC5020107014A81D24E62240200020 +8741:00007FFC04403C7820083C780440FFFE01001FF0111011101FF001087FFC2004 +8742:2080228622B8FAA0ABE0AA3EAA2AAA2AFBAAA2AA22A42AA43AA4ECCA448A0892 +8743:100013DE10427D4A5484554A565254207C0053DE105215521C94E54842540422 +8744:200023FE2202FA8AAA52ABFEAA42AA22FBFEA28222822A823AFAEA02420A0204 +8745:3EF8082008207EFC08201450228841049FF2111011101FF0110001087FFC2004 +8746:10A810A813AE7CA854A8542055FC54207C20502013FE14201E20E22040200020 +8747:200021F02110F910A9F0A840ABF8AA48FA48A3F822482A483BFAE8424042003E +8748:200023FE2202FA02ABFEAA22AA22AAFAFA22A232222A2BFE3A02EA0243FE0202 +8749:1104108810507DFC5524552455FC55247D2451FC102014201DFEE42040200020 +874A:2040202023FEFA02AC04A800ABFEA820F820A120213C29203AA0EA60443E0800 +874B:200024842244FA48A800ABF8AA48AA48FBF8A24822482BF83A4AEC4A44460802 +874C:20C427042124F914A914AF84A924A914FB94A346253C2D043904E90441040104 +874D:200023DE2252FA52AA52ABD2AA52AA52FA52A3D2221A2A943A50EAB043100010 +874E:100011FC11047DFC550455FC548055FE7E225122115215021DFAE40240140008 +874F:2040202023FEF800A9FCA904A9FCA800FBFEA20221FC28203820E82040A00040 +8750:100011FE11027D7A5502557A550254007CFC508410FC14841EFCE28440FC0084 +8751:100013FE10227D20553C552056FE54007DFC510411FC15041DFCE50441140108 +8752:100013FE10207C4055FC5554555455747D545154117415541D54E55441FC0104 +8753:204020A02110FA08ADF6A800ABC4AA54FA54A3D422542A543BD4EA44425402C8 +8754:1110111211D47D1855525592552E54407DFC5104110415FC1D04E50441FC0104 +8755:10201020282025FC5324FD2445247D2445FC7D2440205028482455FE64824000 +8756:1040102013FE7E02540455FC540055FC7D0451FC110415FC1D04E40043FE0000 +8757:2020204021FCF904A9FCA904A9FCA800FBFEA020202029FC3820E82043FE0000 +8758:100011FE11007D7C5544557C5544557C7D1051FE112415641D18E524414201FE +8759:1020101011FE7D02550255FE550055007DFE51AA12AA14FE1CAAE4AA40AA0086 +875A:100010FC10487C3055FE5452549455107E30502011FE14701CA8E52442220020 +875B:200C200A2008FBFEAA08ABF8AA4AAA4AFBEAA2AC22AC2A4C3AAAEB0A42160422 +875C:1040104010F87D08561055FC550455FC7D0451FC110415FC1C00E48841040202 +875D:1040107C10847CF8540855FE544054A47D385058109415341C54E49241500020 +875E:100011FC11247D2455FC5500557C55447D44517C1144157C1D44E644427C0444 +875F:100011FE11227DFE552255FE540054FC7C8450FC108414FC1E84E28440940088 +8760:100011FE10007CFC5484548454FC54007DFE5122112215FE1D22E52241FE0102 +8761:100013FE10207C4055FC5554555455547D54512C102015FE1C50E48841040202 +8762:100013FE10207C4055FC5504550455FC7D0451FC110415041DFCE40040880104 +8763:210820882088FBDEA910A920A9DEA942F944A144215E29443A44EA4444D40808 +8764:1088104810507DFE5450545055FC55547D54518C110415FC1D04E50441FC0104 +8765:00207E20247E18A4FF2829104A2898C601001FF0111011101FF001087FFC2004 +8766:200023DE2242FA42AA42ABDEAA00AA3EFBD2A21222142BD43A08EA1442240242 +8767:1088108813FE7C8854A8542055FC55247D24512413FE14201E50E28841040202 +8768:00003FF0021002107FEA0206020208207EFC4AA44AA47EFC08200A24FEFE0202 +8769:1008103C11E07C2057FE542055FC55247DFC512411FC14201DFCE42043FE0000 +876A:100010FC10847CFC548454FC540055FE7C8050FE112A164A1C92E52240540088 +876B:1020102211FA7C24542857FE542054407CFC5184128414FC1E84E28440FC0084 +876C:200020882252FA22AA52AA8AAA02ABFEF888A144227A28883950E82040D80706 +876D:100011FC11047D0455FC5504550455FC7C0053FE102015201D3CE52042A0047E +876E:1040104010FE7C8055FC568454FC54847CFC5040107C14C41D28E41040680186 +876F:101E13E010447D24548855FC544054407DFE508010FC15441D28E61040680186 +8770:1020102013FE7C505488572655FC54207C2053FE100014201DFCE420402003FE +8771:02000100FFFE100010001FF8000008207EFC4AA44AA47EFC08200A24FEFE0202 +8772:2082208227F2F882A88AABEAAAAAAAAAFBEAA08A21CA2AAA3CA2E882408A0084 +8773:102011FE10207CFC542055FE540054FC7CA4509411FE14A41D14E5FE40040018 +8774:2100213C2124FBA4A924A93CA924ABA4FAA4A2BC22A42AA43BA4E84440540088 +8775:0620382008A47EA819202C504A88090401001FF0111011101FF001087FFC2004 +8776:204821482148FBFEA948A948A978A900F9FEA02023FE287038A8E92446220020 +8777:1020101011FE7D005544552855FE55107D5451541154157C1D14E52042400080 +8778:100010FC10847C8454F45494549455FE7D02517A114A154A1D7AE502410A0104 +8779:100010F810887C8854F85488548854F87C0051FC115415541D54E55443FE0000 +877A:2004201E23E0F820A9FCA924A924A9FCF820A3FE22222A2A3AFAEA02420A0204 +877B:2020202023FEF820A820ABFEAA8AAA52FAFAA22222222AFA3A22EA22422A0204 +877C:2020212420A8F820ABFEA8A8A924AA02F840A7FE208829083990E86041980604 +877D:1020102013FE7C2055FC544057FE54887D0452FA108814881CF8E488408800F8 +877E:2088208823FEF888A800ABFEAA02AC24F820A3FE207028A838A8E92442220020 +877F:100011FC11247DFC552455FC542055FC7D2451FC112415FC1C20E4224022001E +8780:088049F82A90286008901FFE2A10C950092001003FF821083FF801087FFC0004 +8781:1000127C11447D44547C54445744557C7D50514A114415541D62E5424280047E +8782:2100209E23D2FA52AA54ABD4AA58AA54FBD2A21222922A5A3AD4EB5042100010 +8783:2040202023FCF908A890ABFEAA02AC44F820A3FC208028F83888E90841280210 +8784:2100227E2388FA88AABEAAAAABAAAA2AFA2AA3AA22AA2AAE3A88EB8842880008 +8785:2020204021FCF904A9FCA904A9FCA904F9FCA040202028A43A8AEA8A44780000 +8786:208420442048FBFEA884A884A908A94AFA52A39C208429083908EA5243DE0042 +8787:101E13E011227C945440548855F054207CC451FE102214201FFEE45040880306 +8788:100011FE11107D20557C5544557C55447D7C5110111015541F52E29242500420 +8789:209020882104FA42AC88A9FCA804A800FBDEA0422252294A3A52E842414A0084 +878A:1088105010007DFE545055FC545457FE7C5451FC105014D81D54E65240500050 +878B:10A0112C11247D2455AC5524552455FC7C2051FC108814501E20E25040880306 +878C:10783E4822482A86FF7822482A2842104A2885463FF821083FF801087FFC0004 +878D:0020FE2000207CFC44A47CA400A4FEA482FCAAA49220FE28922492FE92428600 +878E:200023FE2000F9FCA904A904A9FCA800FBFEA28A22522BFE3A22EA22422A0204 +878F:2020201021FEF900A920AD20AB3CA950F990A31025FE29103928EA2842440482 +8790:2040208021FCF904A904A9FCA900A9FEF900A1FE20022AAA3AAAEC0240140008 +8791:1020104011FC7D0455FC550455FC55047DFC5028102415FE1C50E48841040202 +8792:102010201050FE8811267C2045FC7D2445247D2411FCFE201028103C13C41104 +8793:2040204027FCF840ABF8A880AFFCA910FA68A5C620402BF838E0E95846440040 +8794:2004201E23F0FA1EAA10AAFEAA92AA98FAF2A28E22802AB83AA8ECAA454A0A86 +8795:1020104011FC7D0455545524555455047DFC5000111215D41D18E5524192010E +8796:100010FC10847CF4549455FE550254FC7C8450FC108414FC1E84E28440940088 +8797:1020101011FE7D10557C551455FE55147D7C5110117C15441D44E644427C0444 +8798:1020112411247D2455FC540057FE54007DFC5104110415FC1C88E45043FE0000 +8799:010001007FFC038005401930E10E08207EFC4AA44AA47EFC08200A24FEFE0202 +879A:20444258FF6201427E3E42007E4C42727E42423E01003FF821083FF801047FFE +879B:2040202023FEFA02AC24A9FCA820A9FCF820A3FE202029FC3904E90441FC0104 +879C:08007F7808483E4800867F78414800303ECE01003FF821083FF801087FFC0004 +879D:2020204023FCFA24AA24ABFCAA24AA44FBFCA04020A828B4393CE9224222041E +879E:200021FE2120F9FCA920A9FCA920A920F9FEA00222AA2AAA3AAAEA0240140008 +879F:200023FE2202F800A9FCA904A9FCA904F9FCA04020202BFE3800E88841040202 +87A0:210420842088F800ABFEA800A888A904FA02A1FC215429543954E95447FE0000 +87A1:020001007FFC082007C01830E00E08207EFC4AA44AA47EFC08200A24FEFE0202 +87A2:08202AA44D28145022887FFE410281041FF0111011101FF0010001087FFC0004 +87A3:00203D2424A8242025FC3C4027FE24A825243EFA24A824A824F8442455FC8804 +87A4:20201020FE2005FC6924112429FCD52411247DFC55247C5010501C88E5044202 +87A5:1020102010507C4854A455FE568454FC7C8450FC108014FC1D44E544427C0044 +87A6:1020102013FE7C2055FC542057FE54407C8851F0102417FE1C22E52442A20040 +87A7:1040104411F87C5057FE544054F855827E7E540011FC15041DFCE50441FC0104 +87A8:1048104811FE7C48540055FE544854487DFE514A114A15B61D22E502410A0104 +87A9:2110211E2122FA54AA08AE94AAE2AA88FA88A2BE22882AAC3A2AEA4A42280210 +87AA:2040202023FEF888A850ABFEAA52AA8AFB06A2FA228A2A8A3AFAEA02420A0204 +87AB:08207F20083EFF4414A85610A5284C4681001FF0111011101FF001087FFC2004 +87AC:2090209027FEF890ABFCAA94ABFCAA94FBFCA00021F8290839F8E90841F80108 +87AD:2040202023FEF800A954A924A954A9FCF820A3FE22422A923AFAEA0A42020206 +87AE:2154215423FEF954A954AA72AC00ABFEFA22A02021FC29243924E924412C0020 +87AF:08207F20087E7E4408A4FF2810101E282244468281003FF821083FF801047FFE +87B0:2040202023FEFA50AA50ABFEAA52AA52FBFEA20022922AD43A98EC9244D2088E +87B1:3F0821083F7E20082F4820285FA8440895282C9001003FF821083FF801047FFE +87B2:2040202023FEFA8AA904ABFEA840A888F9FCA024202029FC3820E82043FE0000 +87B3:2020212420A8FBFEAA02A8F8A888A888F8F8A020202029FC3820E82043FE0000 +87B4:00207BFE482051FC612451FC492449FC687050A841243FFA21083FF801047FFE +87B5:100013FE10507DFC5554555455FC54007DFC500013FE14201CA8E52442A20040 +87B6:00003FFC20003FF820083FF820003FFC10207EFC52A47EFC10201424FEFE0202 +87B7:00803FFE22002FF828882FF829082FF822203FFC20A02FF848884FF880843FFE +87B8:14202220493E144222944110BE28222822443E8201003FF821083FF801047FFE +87B9:20802080208EFBE8A888ABE8AAAEABEAFAAAA3EA208A2BEA388AE892409200A2 +87BA:100011FC11247DFC552455FC544054887DF05020104417FE1C22E52442220060 +87BB:202021FC2124FBFEA924A9FCA820A9FCF924A1FC20402BFE3888E9D04070038C +87BC:1088108813FE7C8854F8542055FC55247DFC502013FE14201DFCE42043FE0000 +87BD:08001FF0282007C01830E18E0C40030010A07EFC52A47EFC10201424FEFE0202 +87BE:1040102013FE7E02540055FC542055FC7D2451FC112415FC1C00E48841040202 +87BF:0440247C24A83D5004287DFE24884448841801003FF821083FF801087FFC0004 +87C0:2040202023FEF820A848AAF2A924AA52F8F8A00820202BFE3820E82040200020 +87C1:3FF820083FF821003FFC20802C64301C10207EFC52A47EFC10201424FEFE0202 +87C2:104011FC11047DFC550455FC550055FE7D0051FE102215FA1C76E4A843260020 +87C3:200021F82108F9F8A908A9F8A800ABFCFA94A3FC200029F83890E86041980606 +87C4:08207E2008F8FF2814287F6A082AFF56088201003FF821083FF801087FFC0004 +87C5:1040102011FE7D005548554855FE55487D48114815781D00E6D442AA052A0800 +87C6:1088108813FE7C88540055FC550455FC7D0451FC102017FE1C50E48841040202 +87C7:04407FFC04401FF010101FF010101FF00400FFFE11103FF8D1161FF001087FFC +87C8:200023FE221AFA16ABFEAA12AAEAAAAAFAAAA2EA220E2A6A3B9AEA2643FE0202 +87C9:200023DE2042FA52A94AAA52A828A8C4FB12A0602188283239C4E81840600380 +87CA:1FF0022001407FFC048418886280010010207EFC52A47EFC10201424FEFE0202 +87CB:201C21E02020F924A8A8ABFEA870A8A8F924A222204028243AA2EA8A44880078 +87CC:1020104011FC7D24557C558C555455247D5451FC102014101D54E542414A0238 +87CD:2062238A208AFFEAA88AA9CAAAA2AC8AF8A4A02023FE287038A8E92442220020 +87CE:2088208823FEF888A888A8F8A820ABFEFA22A33222AA2B763A22EA22422A0224 +87CF:2088208823FEF888A820ABFCA824AFFEF824A3FC20202AB43AACEB2C42240424 +87D0:2020212420A8FBFEAA02A8F8A888A888F8F8A02021FC29243924E93441280020 +87D1:102011FC10887C5057FE540055FC55047DFC510411FC14201FFEE42040200020 +87D2:2088208823FEF888A824ABFEA850A888F904A28A20882BFE3888E88841080208 +87D3:208020F82108FBFEAD12A922A9FEA840F8A2A35420982B343854E89243500020 +87D4:200021FC2124F9ACA974A924A9FCA820F9FCA02023FE28003AA4EA5244520000 +87D5:2090229422D8FA92AAD2AF0EA9F0AA10FFFCAA4423FC2A443BFCEC4444540808 +87D6:214021442158FBF0A950A9D0A95EA9D4F954A15423F428143954EA3444140024 +87D7:01007FFC11101FF00100FFFE91121FF041047FFC01003FF821083FF801047FFE +87D8:10541092119E7EF0548A5486540254FC7C8450FC108414FC1E84E2FC40480084 +87D9:2110209423D2F812AA50A990AFFEA810FBD2A25222542BD43A4AEA4A43D60022 +87DA:08047F0808103E6400083E1022643E0814107F6001003FF821083FF801047FFE +87DB:2082208227F4F888A880ABE2A802ABE4FA28A22023E02A223942E87447880210 +87DC:101811E010407FFE54885574565254707C0051FC110415741D54E5744104010C +87DD:2200217E2040FC7CAA44A8FCA940AE7EFA20A02023FE287038A8E92442220020 +87DE:082049202A3E7F4849485DA86B10492841461FF0111011101FF001087FFC2004 +87DF:1020102011FC7C2055545488550456FA7C8850F8108814F81E20E2A841240060 +87E0:203C23E02124F8A8ABFEA8A8A924AA02F9FCA124212429FC3924E92441FC0104 +87E1:200E23F02044FA24A908ABF8AA08ABFCFA04A3FE22022AAA3AAAED0244140808 +87E2:102013FE10207DFC540055FC550455FC7C8853FE100015FC1D04E50441FC0104 +87E3:2124212422AAFBAEA924AAAAABAEA924FBFEA110211429143A8AEA4A42160422 +87E4:200023DE2252FBDEAA10AA52A9CEA800F888A3FE208828883BFEE88841040202 +87E5:1088108811FC7C88548857FE542055FC7D2451FC112415FC1C00E48841040202 +87E6:102011FC10207C8857FE548855FC55047DFC510411FC15041DFCE48841040202 +87E7:208822AA22DCFC88A954AA22A800ABFEFA42A44423FC28443844E88441140208 +87E8:3FFE289025103FDE22222A882F8822942422284027FC244427FC40444FFE8002 +87E9:20002FFE2800FA28A948ABEEA892A884FAA0AAA82BE828883894E91449241242 +87EA:2020202023FEF820A9FCA924A9FCA924F9FCA02223FE28423824EAA2428A0478 +87EB:200023FE2050FBFEAA52ABFEA800A9FCF904A1FC210429FC3820EBFE40200020 +87EC:200023DE2252FA52ABDEA800A9FCA924F9FCA12421FC28203BFEE82040200020 +87ED:1090108811FE7D10571055FE551055107DFE111015101DFEE50042A402520452 +87EE:1088105013FE7C2055FC542057FE55247CA853FE100015FC1D04E50441FC0104 +87EF:2020202021FCF820ABFEA908AB9CA908F988A63E20002BFE3890E8904112020E +87F0:202021FC2024FBFEA824A9FCA820AAAAFBAEA22223FE2A223BAEEAAA42AA0422 +87F1:2080208021FEFB54AD54A954ABFEA954F954A15427FE28003954E92A422A0000 +87F2:010001003FF821083FF801087FFC000410207EFC52A47EFC10201424FEFE0202 +87F3:100011FC10047CFC540455FC540055DC7C9453DC100817FE1D08E48840A80010 +87F4:240CFF7024403C40247E3C482448FF482448428801003FF821083FF801047FFE +87F5:200023FE2200FA04ABF4AA04AAEEAAA4FAA4A2EC22042AA43A44EA7445940008 +87F6:200027E0225EFBD2AA52ABD2AA72AFDEF840A3FE202029FC3820E82043FE0000 +87F7:2020212420A8FBFEAA02A8F8A888A888F8F8A00021FC292439FCE92441FC0104 +87F8:7FFC06003B0804B019C062A00C98728611207EFC52A47EFC10201424FEFE0202 +87F9:20003EFC4424BE542A983E502AFC3E102AFE2A1045103FF821083FF801047FFE +87FA:101011FE10007DFE5502557A554A55FE7C0050FC108414FC1E84E2FC400001FE +87FB:2104208823FEF820A9FCA820ABFEA854F992A09023FE289038D4EB8A409601A2 +87FC:2420FF20247E7EC482287A104A287AC605001FF0111011101FF001087FFC2004 +87FD:10101210117C7C1054FE5444572855FE7D10517C111015FE1D10E51042FE0400 +87FE:108010F811087FFE5544559255FE55007D7C5100117C15001D7CE544417C0244 +87FF:0878FFC808483E862B783E482A28FF9049287F4601003FF821083FF801047FFE +8800:1220113E10427C9457105528544655FC7D0451FC110415FC1D04E5FC40880104 +8801:11002BDE4A5273D42A524BD27A1A12942350C24001003FF821083FF801047FFE +8802:108813FE10887C00554857FE554855787D0051FC102017FE1C70E4A843260020 +8803:0100FFFE20003FF800003FF820083FF80000711C57D4755457DC715657D6B062 +8804:202020502088F924AEFAA850A924A954F9FCA02023FE2A423A92EAFA420A0206 +8805:100011FC11547D5455DC545055DC55547D5451DC115415541DDCE5504052003E +8806:0820FFFE08201FF011101FF011107FFC41245FEC01003FF821083FF801047FFE +8807:2088208823FEF888A9FCA924A9FCA924F9FCA02023FE2A223A2AEAFA420A0206 +8808:00107C1445FE7C9044947DD4448A7C8A291645223FF821083FF801087FFC0004 +8809:100011FC11547D5455FC540057FE54007DFC510411FC14621C94E58842A400C2 +880A:202023FE2288FA50ABFEAA50AAFCAA54FBFEA25422FC2A503AD8ED5446520850 +880B:100011FC11547D5455FC548055FC56447DF45154115415F41C44E5F440140008 +880C:100011FC11547DFC542055FC542057FE7C88505011FC14201FFEE42040200020 +880D:200823C82248FBCEAA4AABD2A904ABE4FCA4A2A423642A2A3BEAE82A414A0090 +880E:108813FE10887C2057FE5450548857267CF85020108815FE1C88E48841080208 +880F:210021DE224AFC8AABEAAAB6AAA4ABF4FABEA2A423E42ABE3AA4EAA442240464 +8810:2040202023FEF888A852AFACAAAAAAA8FDACA000210429FC3904E9FC41040204 +8811:208822AA22DCFC88A954AA22A800ABFEFA22A02023FE287038A8E92446220020 +8812:7FFC21087FFCB55A29283558210835582928355801003FF821083FF801047FFE +8813:208823FE2088FBFEAA02A9FCA800ABFEF840A0A2235428B83B54E89243500020 +8814:202023FE2000F9FCA904A9FCA800ABFEFA02A1FC20402BA438D8EB3440D20330 +8815:200021FC2020FBFEAA22A9ACA820A9ACF800A3FE202029FC3954E9544154010C +8816:108813FE10A87C9055FE572055FC55207DFC512011FE15001FFCE4884070038E +8817:200023DE2042FA52A94AAA52A890A908FBFEA51021FE291039FEE91041FE0100 +8818:2110211423F2F910AFFEAA90AA50AFF4FA94A3F422942BE83A8AEBFA42260042 +8819:2040202023FEFA02A9FCA948AA50A9FCFB04A1FC210429FC3904E9FC40880104 +881A:08207FFC08200200FFFE08001FF02810C8100FF010207CF854A87CF81224FEFC +881B:104811FE10487C0055FE554A554A55FE7C1451FE111015921D4CE54A41160222 +881C:22882108FABE2008729CA92A2288FFFE08203018C1063FF821083FF801047FFE +881D:200021FC2124F9FCA924A9FCA904A800FBFEA2AA22AA2BFE3AAAEAAA43FE0222 +881E:20403F7E4890BF7C21443F4421443F5424483A4001003FF821083FF801047FFE +881F:212422482124F800ABFCAA94AA64AA94FBFCA24823682A483B6AEA4A42460362 +8820:00007FFC02003FF8244827C8244827C824483FF810207CF854A87CF81224FEFC +8821:0FE010201FC00040FFFE0C1073200DC072B00C8EF3207CF854A87CF81224FEFC +8822:01007FFC01003FF80200FFFE08203FF8C8260FE010207CF854A87CF81224FEFC +8823:100011FE11287DFE5528557C5554557C7D54117C15101DFEE59242BA028A0484 +8824:08200440FFFE04403FF82848303827C820083FF810207CF854A87CF81224FEFC +8825:52107EFE28447E28A2FE3E1020103E7C22103E1001003FF821083FF801047FFE +8826:2040207C2040FBFCAA44ABF0AA44AAFCFAA8A2F822A82AF83A00EDFC45540BFE +8827:01007FFC01001FF000007FFE48029FF42810CFF010207CF854A87CF81224FEFC +8828:208823FE20A8F9FCA824ABFEA824A9FCFAAAA3AE22222BFE3A22EBAE42AA04AA +8829:22102110203AFB92A814ABBEA808AB90F83CA3E422A42ABC3AA4EBA442BC0024 +882A:08407F7C1440FF7C22043E7C22403E7C2242263E01003FF821083FF801047FFE +882B:0704782425241E2464241A24652419046514020810207CF854A87CF81224FEFC +882C:2110209023DEF810AA5EA982ABDEA810FBDEA25023DE2A503BDEEA50425202CE +882D:210013F0151000E0775C11F0104013FC284047FE10207CF854A87CF81224FEFC +882E:23EE228A22EAFB50ABEEAA4AAAA4ABEAF800A3DE20422A52394AEA52414A0084 +882F:00807FFE42004FF848884FF849084FF842807FFC44905F7C55545F7C4492BFFE +8830:102013FE10007DDC555455DC548857FE7C8853FE108817FE1C94E58842A400C2 +8831:01001FF011101FF001087FFC10207CF854A87CF81224FEFC00003FF82448FFFE +8832:440024FE28AA00AAFEFE004028FE452282FA00AAFEAAAAFAAA22AAFAAF0AF804 +8833:23DE225223DEFA52ABDEAA52ABDEA98CFA52A04027FE28883990E86040D80304 +8834:108813FE10887DFC555455FC542255FC7C2853FE104015FC1E84E4FC408400FC +8835:222223FE2090F9FEAB10ADFEA910A9FEF910A1FE21002BFE3A8AEB7642520276 +8836:3E7C48907EFC142A66C63FF820083FF820083FF810207CF854A87CF81224FEFC +8837:23DE225223DEFA52ABDEAA52ABDEA890F9FEA11023FE2D1039FEE91041FE0100 +8838:208823FE2088FBDEAA52ABDEA8A0A890F9FEA12023FC2D2039FCE92041FE0100 +8839:01007FFC11101FF00100FFFE88021FF068100FF010207CF854A87CF81224FEFC +883A:7CF81020FDFC28504488BFF620103FF020103FF010207CF854A87CF81224FEFC +883B:210447C88812F3BC20084B92F83E0380AAAAABAA01003FF821083FF801047FFE +883C:23DE225223DEFA52ABDEA8A0A9FEAB20FDFCA12021FE280039FCE8884070078E +883D:08282A244D2E087014243F246428BF12242A3F4610207CF854A87CF81224FEFC +883E:23FE220223FEFA92AA54AA92AAFEAAAAFAFEA32222FA2AAA3AFAEA2245FA0004 +883F:249079E414547DFC0004FFFC249479E41454FFFC10207CF854A87CF81224FEFC +8840:0100010002003FF82448244824482448244824482448244824482448FFFE0000 +8841:02000100FFFE1000100010001FF8010002003FF82448244824482448FFFE0000 +8842:08000800107E7F125512555255525552555255925512552257A2FC4200940108 +8843:0800080010FE7F10551055205530555855545592551255105790FC1000100010 +8844:080008FC10247F2455245524552455FC554455445544554457C4FC4401FE0000 +8845:0810081010947F545558551055FC55105510551055FE55105790FC1000100010 +8846:040008003FF824482448FFFE000000F87F0009041188635005201918E1060100 +8847:0804080E10707F405546555855545554555655545554555457D2FC9200980110 +8848:0800087E10247F24553C55245524553C552455245526557C5784FC0400040004 +8849:08200820103C7F4455A85510552855445582557C5544554457C4FC44007C0044 +884A:102410FE2024FE00AAFEAAAAAAAAAAFEAA14AAFEAA90AAD2AFACF8AA00960122 +884B:01003FF80108FFFE01083FF801007D7C11107D7C44447C7C45447FFC2448FFFE +884C:080009FC100020004800080013FE302050209020102010201020102010A01040 +884D:10001200211C410080001400223E6288A0882108270821082108210821282010 +884E:1000100027DC410081001100213E6108AFE82108210821082108210821282110 +884F:100010002F9C400080001FC0253E6508A5082508254829882908300820282010 +8850:1000100027DC44008400178024BE6488A48827882408240827C8200820282010 +8851:11001100229C42408420190020BE6008AFC82048208825082208210821282010 +8852:12001100201C4FC08200140024BE6888AF0821082208220824882F8820A82010 +8853:11001180215C4140810017C0213E6308A3882348254825082908210821282110 +8854:12001200239C4200840017802A3E6208AF882208220822082288230822282010 +8855:20002FE0482E48208BA01820283E6BA4AAA42AA42AA42BA42824282428B42848 +8856:14801480249C44809FE0148024BE6488A4882FE8200824882448284830082018 +8857:1100110027DC4100810017C0203E6108A10827C82108210821C82E0824282010 +8858:1400140027EE4900910011002FDE6104A10425C42504250425C43E0428142008 +8859:10001FC0221C42008F80148024BE6FC8A0082008278824882488248827A82490 +885A:140014E024AE4EA084A014E024BE6EA4AAA42AE42AA42AA42EA4212421342268 +885B:120012002FCE44409FE010002FDE6844AFC421042FC4210429042FE421142108 +885C:144012802FEE4100820017C0245E6444A7C42444244427C42444244427D42448 +885D:108011C0271C410087C0110027FE6548A7C8254827C8210827C821082FE82010 +885E:110017C0224E4FE0800017C0245E67C4A0042FE421042FE42924292429742108 +885F:154015402A8E4540854010002FDE6104A7C4244427C4244427C4244427D42448 +8860:110011002FEE410087C0144027DE6444A7C4244427C424442FE4228424542828 +8861:120013C0244E488087C01540255E67C4A544254427C421042FE4210422942448 +8862:2EE02AA04EEE4AA08EE01AA02EFE6444AFF4348427E4248427E4248427F42408 +8863:020001000100FFFE0200020005000508089018A02840482088100A080C060800 +8864:200010000000FC00080010001000340058009400140010001000100010001000 +8865:1040084000407E400240046008501A482C444A440A4008400840084008400840 +8866:200011FC0020F8200820102014203BFE54209020102010201020102010201020 +8867:200011FC0020F8200820102014203BFE54209020102010201020102010A01040 +8868:010001007FFC010001003FF801000100FFFE0500088818502820C9180A060C00 +8869:200013FC0104F944092410A81088348858509450142010201050108811041602 +886A:202010200020F920092C1134116437A459249534152811221122110210FE1000 +886B:1004080400087E100220044408041A082C104A220A42080408080810082008C0 +886C:201010100010FC1009FE10101010341059109490149010101010101010501020 +886D:202010200020FC2009FC1020102034205BFE9420145010501088108811041202 +886E:02000100FFFE000008201210244848241FF0029004440C283410C50806060400 +886F:201010900090FC8809081104120435FA58889488148810881108110812281410 +8870:02000100FFFE00001FF01010FFFE10101FF0028004440C283410C50806060400 +8871:200013FC0084F88808881090109C348459449544152811281210122814441182 +8872:202010200020FDFE09221122112235225952954A158A110211021102110A1104 +8873:201010900090F8880888112415243A225440904010881084110413FE11021000 +8874:202010200020FDFE09221224102034205850945014501050109010921112120E +8875:2000100001FCFD04090411041104350459FC9504150411041104110411FC1104 +8876:202010200020FC2009FC112411243524592495FC152410201020102010201020 +8877:02000100FFFE01003FF8210821083FF80100028004440C283410C50806060400 +8878:2040104000A0F8A0091012081406311055109910151011101110121012101410 +8879:2004101E01F0FD1009101110111035FE5910951015101108110A114A11861102 +887A:02000100FFFE00007FFC20403FFE02400D407080030804900C603518C6060400 +887B:200010FC0084FC84088411FE10843484588495FE148410841084108410941088 +887C:202010200020FBFE08201020102035FC58849488144810501020105011881606 +887D:2008103C01E0FC2008201020102035FE58209420142010201020102011FC1000 +887E:01000280044009203098CFE6004002800100FFFE05000C883450C530060E0400 +887F:202010200050FC500888114412223420580095FC140410081008101010101020 +8880:204010400080FCFC090412041084344458449414142410441184100410281010 +8881:010001003FF80100FFFE00001FF0101010101FF0050408883850CA200C180806 +8882:202010200020F9FC082410241424382455FE9020105010501088108811041202 +8883:200021FC2C44F04420842484291432080100FFFE05000C883450C530060E0400 +8884:2008103C01E0FC200820102011FE342058209450145010501088108811041202 +8885:04001FE0142012A010401FFC000402140108FFFE05000C883450C530060E0400 +8886:202010200020FDFE0820102010FC3420582095FE14221022102A102410201020 +8887:200010FC0084FC8408A410941094348459FE9484148410841084110411141208 +8888:080008007F7C094411441144257C42000100FFFE05000C883450C530060E0400 +8889:202010100010F9FE0902120410803488589094A014C0108210821082107E1000 +888A:202010200050F850088811241212301055FC9804140810881050102010101010 +888B:08A0109030BE57C0904010241014120C0100FFFE05000C883450C530060E0400 +888C:0100FFFE08001FF020105F9010D01FA010040FFC030004880C503530C60E0400 +888D:2080108001FCF9040A0415F411143514591495F4150411281112110210FE1000 +888E:202011200120F22012FC24A427246924B2242A2424A427A420C4204420942108 +888F:204010400040FC400BFE10401080348058FE9510151012101210141011FE1000 +8890:200010400020F8280808108814903A9456A292A214C210881188128814781000 +8891:200013FC0084F8840884110415143A08540091FC110411041104110411FC1104 +8892:2000100001FCFD040904110411FC35045904950415FC11041000100013FE1000 +8893:200011F80108FD08090811F811083508590895F8150811081108110817FE1000 +8894:2000100003FEF808080811E8112835285928952815E811281008100810281010 +8895:204010200020FBFE0A0214041000349058909490148811081108110412041402 +8896:202010200020FC2009FC112411243524592495FC152411241124112411FC1104 +8897:202010200050FC88090412121020344059889410142010441188101010601380 +8898:2080108000FEFD000A201120112C35745BA49524153411281122110210FE1000 +8899:202010200040FDFC090411041104350459FC9504150411041104110411FC1104 +889A:205010480048FC400BFE1080108034FC59449544152811281210122814441182 +889B:2004101E01F0FD1009101110111035FE5910951015101108110A114A11A61112 +889C:202010200020FDFE08201020102035FC587094A814A811241124122210201020 +889D:208810880088F908097E13081508314855289928150811081108110811281110 +889E:02000100FFFE0820101020085FF4101010101FF004440C283410C50806060400 +889F:202010200120F92009FC11201220302055FE9820145010501088108811041202 +88A0:02000100FFFE11001FF822007FFC048008603298C4440C283410C50806060400 +88A1:202010200020F9FC0924112415FC39245524912413FE11041104110411141108 +88A2:202010200124F8A408A8102015FC38205420902013FE10201020102010201020 +88A3:204811480148F948094813FE1148354859489548157811001100110011FE1000 +88A4:0100FFFE00001FF0022001407FFC048418886280030004880C503530C60E0400 +88A5:2000100003FEF82008201040144038FC55849284148410841084108410FC1084 +88A6:202010200124FD240924112411FC342058209524152411241124112411FC1004 +88A7:208010800100F9FC0A04140411E435245924952415E411241004100410281010 +88A8:204010200020FBFE08401040108835085BF0942014401088110413FC11041000 +88A9:202010200020FC20083E10201020342059FC9504150411041104110411FC1104 +88AA:202010200020F9FC0820102014203BFE5420904010401088110413FE11021000 +88AB:201010100010F9FE09121114151039FC55449144112811281110122812441482 +88AC:02000100FFFE080010103FF800081FF0101010101FF0048808503820CB180C06 +88AD:04400420FFFE0910116021844F0482FC0100FFFE05000C883450C530060E0400 +88AE:208010800080F9FE090012001420302055289924162412221422102010A01040 +88AF:204010480244FA400BFE1080148038FC55449144114812501220145018881306 +88B0:1FF012101110FFFE121021103FFC001002A00140FFFE04880C503420C5180606 +88B1:209010940092F9120910137E1510311055109928152811281128114411441182 +88B2:0100FFFE02000FE034C00700388003F81D3001C03F0004880C503530C60E0400 +88B3:20201020007CFC8409481030102034485990943E144211A41018101010601180 +88B4:2020102003FEFC500888110412FA34005BFE9440148011FC1004100410281010 +88B5:20801088009CF970091013101510311055FE99101510111011101110117C1100 +88B6:2080108000FCF9080A90106011983626582095FC1420122013FE102010201020 +88B7:202010200050F8880904120211FC3400580095FC150411041104110411FC1104 +88B8:204010400040FBFE08801080117835085B10951015FE11101110111011501120 +88B9:200013FE0020FC20084011FC11043504590495FC150411041104110411FC1104 +88BA:202010200020FBFE0820102011FC3400580095FC150411041104110411FC1104 +88BB:200013FE0020FC20084011FC1154355459549554155411541154114411141108 +88BC:2080108000F8F9080B1014A0104034A05918960615F811081108110811F81108 +88BD:410021002100011EF7D2125222526A52B2522C92229221122292225E24522800 +88BE:202011200120F9FC09201220102033FE547098A814A811241124122210201020 +88BF:2020102001FCF8200820102013FE30005420982015FC10201020102013FE1000 +88C0:200011FE0102F9220922112211FE352259229552154A118A1102110211FE1102 +88C1:084008487F4408440840FFFE10400844FF4410442928662AA212292A30462082 +88C2:00047F8408241F24212452240C243004C20C0100FFFE04880C503420C5180606 +88C3:20401040007CFC40084013FE100034005BFE9440145010481044104010401040 +88C4:20401040009CF9000A40104010BE35885A889488148810881088108810A81090 +88C5:082048202BFE082018202820C9FC0A000100FFFE05000C883450C530060E0400 +88C6:2020112400A4FCA408A8102013FC34045804940415FC10041004100413FC1004 +88C7:202010200040F88009FC11541154355459549554155411541154115413FE1000 +88C8:200013FE0202FC44084013FC108034A0592095FC1420102013FE102010201020 +88C9:200011F80108F90809F81108110835F859449548153011201110114811861100 +88CA:04001FF010101FF010101FF010001FFC10001FFC01043FEC04801C486530060E +88CB:200013FC0000FC0009F811081108350859F89400150810881090100017FE1000 +88CC:202010200020FBFE0820102011243524592496AA142010501050108811041202 +88CD:200013FE0222FA220A2213FE16223A62567292AA132212221222120213FE1202 +88CE:200011FC0104F904090411FC1000340059FE9420142011FC1020102013FE1000 +88CF:0100FFFE00001FF011101FF011101FF001001FF001007FFC04880C503530C60E +88D0:200010FC0084FC8408FC100011FE3502590295FE1502110211FE1102110A1104 +88D1:2040108001F8F90809F8110815FA390A550C93F8101810281048118816281010 +88D2:02000100FFFE0400387820083C7820083FF8028004440C283410C50806060400 +88D3:201010140012F8100BFE10101550395457F4915411541148124A125A14261042 +88D4:02000100FFFE048808503A20CC1808063FF82448282837D8244827C820282010 +88D5:200010500048FC840924102010503488590694F8148810881088108810F81088 +88D6:200011FE0100FD00097C1100110035FE59509552155411481148124412521460 +88D7:2040102003FCF8400890110813FC30045550995015501150125012521452180E +88D8:012001107FFC111009A00540193062080100FFFE05000C883450C530060E0400 +88D9:200011FC0044F8440BFE1044104435FC5880948015FC12841484108410FC1084 +88DA:080C08F07E8008800EFE78880888290812080100FFFE04880C503420C5180606 +88DB:0100FFFE00001FF010101FF000003FF821083FF820021FFE04881850EB300C0E +88DC:2028102403FEF820082011FC1124352459FC9524152411FC112411241124110C +88DD:242024203C2005FCFC20242024F846000100FFFE05000C883450C530060E0400 +88DE:210410840088FC1009FC11041104350459FC94501450109010921112120E1400 +88DF:1020082040A824A409227228103010C007000100FFFE04880C503420C5180606 +88E0:3FF80208FFFE04083FF808001FF82808CFF80100FFFE04880C503420C5180606 +88E1:200011FC0124FD2409FC1124112435FC5820942015FC10201020102013FE1000 +88E2:201012100110F97E082010281748357E5908950815FE110811081288147E1000 +88E3:202010200050F8880904120211FC340058449424112410A81088101013FE1000 +88E4:2010100801FEFD10091011FE112035285948957E1508110811FE120812081408 +88E5:210010BE0282F202120222FA228A6A8AB2FA2A8A228A22FA22022202220A2204 +88E6:0100FFFE000019F8609040607BFC40A441287A60030004880C503530C60E0400 +88E7:202010A200A2F9240850108813043022542098A414A411281050108811041202 +88E8:2040108003FCFA240A2413FC16243A4457FC9090111017FE1010101010101010 +88E9:200011FC0104FD0409FC1104110435FC5800951215D41118111011521192110E +88EA:2080108000FEFD020A8210F2114234425BFA94421552115211F2100210141008 +88EB:205012520252F25213DE220222026BFEB2022A0223DE22522252225224522802 +88EC:2020102001FCFC20082013FE108835445A4294F8158812501020105011881606 +88ED:20201020003EFC2009FE1122113835E05922951E150011781248124A148A1906 +88EE:20FC10840084FCFC0884108410FC340059FE9502150211FE1102110211FE1102 +88EF:200011FC0124FD240974112411FC350459749554155411741104120412141408 +88F0:200017BC0084F2941108229424A46840B0002FBC20A422A42128229024A82846 +88F1:2020102003FEF820082011FC102034205BFE944014A411A81290148810C61080 +88F2:200013FE0020F02013FE222222226B32B2AA2AAA2376226622222222222A2204 +88F3:0100111009207FFE40029FF410101FF00100FFFE05000C883450C530060E0400 +88F4:044004407C7C04403C7804407C7C06400100FFFE05000C883450C530060E0400 +88F5:02000100FFFE04407C7C04403C7804407C7C0440030804900C603518C6060400 +88F6:209010900090F79E1090209020906B9CB09028902090279E2090209020902090 +88F7:2020112400A8F82009FC104017FE3888550492FA1488108810A810921082107E +88F8:200011FC0124F92409FC1124152439FC542093FE107010A81124122210201020 +88F9:0100FFFE00001FF011101FF011101FF00100FFFE131065880C503530C60E0400 +88FA:2020102003FEF85008881124122231FC552499FC152411FC10221022101E1000 +88FB:08000E7C08047F4408282A1049281A440100FFFE05000C883450C530060E0400 +88FC:200011F80108F90809F81108150839F8548091FC125414941124124410941108 +88FD:24043FA44424FFA404243F842494258802000100FFFE04880C503420C5180606 +88FE:200013FC0204F20413FC222022206BFEB2202A2022FC22842284248424FC2884 +88FF:2020102001FCFC500888110413FE340859E89528152811E81128100810281010 +8900:2088108803FEFC88088810F81088348858F89488148813FE1000108811041202 +8901:00001FF011101FF011101FF00100FFFE09201110630804900C603518C6060400 +8902:2110111007D0F110111021182FF46812B112291027D02110211021D02E102410 +8903:20201120013CFD20092013FE100035FC590495FC150411FC1104110411141108 +8904:2020102003FEF82009FC102413FE342459FC944017FE108411C8103010CC1302 +8905:2040102001FCF8000888105013FE3222542499FC152411241134112810201020 +8906:200011FC0104FD0409FC1104110435FC580097FE14201120113C112012A0147E +8907:2100110001FEFA000DFC110411FC350459FC948014FC11081290106011981606 +8908:2008103C01E0F8200BFE102011FC352459FC952415FC102011FC102013FE1000 +8909:2100113C07D4F1141394211427D46924B14C284027FE204020A0211022082C06 +890A:2080104003FCF204120423FC22006A00B3FC2B54235425FC255425542944210C +890B:204811480148FBFE094811481578390055FE902013FE107010A8112416221020 +890C:200013FE0222F8200BFE102011FC352459FC952415FC102013FE102010201020 +890D:202011240124FD2409FC100013FE3420584095FC15541154115411541154110C +890E:02000100FFFE00180CE0302021FC3CA821243C20030804900C603518C6060400 +890F:0100FFFE00200C2031FC21243DFC212421243DFC030004880C503530C60E0400 +8910:200013F80208F3F8120823F821006BFCB4442A4422A4220423F4200420282010 +8911:201E13E00044FD24088811FC104034405BFE948014FC11441128121010681186 +8912:0100FFFE08000BF8120833F8504097FE11501248030004880C503530C60E0400 +8913:2100117C0144F2441244267C2A106A10B2FE2A38225422542294231222102210 +8914:200013FE0000F9FC0904110415FC380057FE9222122213FE1222122213FE1202 +8915:204010A00110F20815F6200023C46A54B2542BD42254225423D42244225422C8 +8916:208010FC0104FDF8080813FE104034A25B349458149413341052109013501020 +8917:200013FE0200FAFC0A8412FC16843AFC562093FE124812C812301248128413FE +8918:2040104001FCF8840BFE100015FC390455FC902013FE1020122013FE10201020 +8919:2050105203DCF85008D2134E100035FC590495FC150411FC1104110411141108 +891A:2020102201FAF824082813FE1420384054FC9184128410FC1084108410FC1084 +891B:2020112400A8F02013FE20A821246A02B0402BFE208821082190206021982604 +891C:008079F84A087DE8492879E8491449049AFC0100FFFE04880C503420C5180606 +891D:224211240000FDFC0924112411FC3524592495FC1420102013FE102010201020 +891E:200011F80108F90809F81108150839F8540093FC129412941294129417FE1000 +891F:200011FC0104F9FC090411FC14003BDE54429252114A10C6135A1042114A1084 +8920:2088108803FEFC8809FC108813FE342059FC952415FC112413FE110411141108 +8921:2088108803FEF888082010501488390456FA9000100011FC1104110411FC1104 +8922:0100FFFE02001FF011101FF012101FF004A808BA3382C4FE0C503530C60E0400 +8923:2040102003FEFA0208501088152438505488910412FA10881088108810F81088 +8924:2020102001FCF8200BFE100011FC3504590495FC14521094118816A410C21080 +8925:200013FE0200F2FC120023FE22A86A90B2C82A86220823FE2288244824082818 +8926:211012120454F7D81010201227D26C4EB4402FD22454245827D024522552248E +8927:7E1024523C5424903C282744FC8206000100FFFE05000C883450C530060E0400 +8928:210810880090FBFC084011F814403BFE5480910011FC12201420182013FE1000 +8929:10003E7822482A48FE8623782A4842304A4886840100FFFE06801C48E530060E +892A:2000127C0144F944087C10441744357C5950954A15441154116211421280147E +892B:2004101E03F0F21E121022FE22926A98B2F22A8E228022B822A824AA254A2A86 +892C:21F810880070F18C100023DE2252698CB252282023FE207020A8212426222020 +892D:0100FFFE00003FFC21003FF821003FFE29224496030004880C503530C60E0400 +892E:08202AA44D28145022887FFE400282040100FFFE05000C883450C530060E0400 +892F:2040102007FEF488148827FE24886CF8B4202DFC252425242934292830202020 +8930:01007FFE44429FF404403FF80440FFFE0A2011102FE8C28E04501C2065180606 +8931:02000100FFFE00003FF824483FF8111009201110230804900C603518C6060400 +8932:2020101001FEFD10097C1110117C3554597C9554157C111011FE121012101410 +8933:2010101002FEF910097C1054147C3B54557C911011FE111011101290147E1000 +8934:20481148014EF9500968114411443440580095FC155411541154115417FE1000 +8935:2040102003FEF80009541124155439FC542093FE1242129212FA120A12021206 +8936:200013DE0042FA52094A12521042342059FC9504150411FC1104110411FC1104 +8937:221012100450F95C1150225026FE6A00B2102A50225C225022B02290230E2200 +8938:202011FC0124FBFE092411FC142039FC552491FC104013FE108811D01070138C +8939:2110111007D0F110113C27D420146AB4B554291C27D42114211421E427262242 +893A:08207E2008F8FF2814287F6A082AFF560A820100FFFE04880C503420C5180606 +893B:0100FFFE08203E2008F87F282A685D2A08563E82030004880C503530C60E0400 +893C:400023FE205003FEF25213FE20206FFEB088290423FA250821F82102210220FE +893D:3F0821083F7E20082F4820285FA8440895282E900100FFFE06801C48E530060E +893E:200013FE0050FDFC0954115411FC340059FC940017FE102010A8112412A21040 +893F:2090109007FEF8900BFC129413FC36945BFC940015F8110811F8110811F81108 +8940:202013FE0020FDFC082013FE100035FC590495FC150411FC110411FC10881104 +8941:200013BE00A2F0A210BE238822086A3EB22A2BAA20AA20BE2088208A257E2202 +8942:2040108801FCF9080A5213FE14503988562690C0131010641388103010C01700 +8943:0100FFFE00000CF8308820F83C2021FC20A83D24030004880C503530C60E0400 +8944:0100FFFE00003EF822883EF804407FFC04403FF80440FFFE04441C28E5180606 +8945:200011FC0124FDFC092411FC10A834A85BFE94A814A811FC102013FE10201020 +8946:205012520154F8500BFE108814503BFE542091FC102013FE1050108811041602 +8947:200013DE0252FBDE0A5213DE16023AFA568A92FA128A12FA128A1202120A1204 +8948:200013DE0252FBDE0A10125211CE3400588897FE1488108817FE108811041202 +8949:279E1492079EF492179E240224F26C92B4F22C9224F224922492253224022406 +894A:200013F80208F3F8120823F820006FFEB4802FBC2494279424D42F88209420A2 +894B:420822080FBEE20822082FBE4AAA5AAAEAAA5BAE4208471C4AAA524842084208 +894C:200013DE0252FA520BDE100011FC352459FC952415FC102013FE102010201020 +894D:20A0109001FEFB2009FC112011FC352059FE9500142013FE107010A813261020 +894E:203C13E00124F8A80BFE10A81124360259FC9524152411FC1124112411FC1104 +894F:202413A80092F5141208240423BA68A8B0C62B80223C238420A8209022A82144 +8950:208010F80108FBFE0D12112215FE384054A29354109813341054109213501020 +8951:200011FC0004FCFC080411FC100035DC589497DC140813FE1108108810A81010 +8952:210811080548F390111E27D425646D54B5542F5425D4254825482554246424C2 +8953:2020102001FCF8200BFE1108139C35085988963E140013FE109010901112120E +8954:2088108803FEF888088810F814203BFE5622933212AA137612221222122A1224 +8955:210010BE0282F22212FA222222FA6AAAB2BA2AEA22AA22FA227222AA22222226 +8956:2080110007FCF4441554244427FC6CE4B5542C0420402FFE20A0211022082C06 +8957:200011FC0154F9FC082011FC14203BFE5488905011FC102013FE102010201020 +8958:202010500088FD740A0211FC112435AC592495FC140010F8108810F8108810F8 +8959:20F810880088FCF8080011DC1154355459DC942015FE107010A8112412221020 +895A:204412240128FC7E08101028134A351C5928954C151A112A1148111012FE1400 +895B:209013FC0294FBFC0A9413FC14003BFC560092F8120013FE1520151415481986 +895C:208010F80108FBFE0944119211FE3500597C9500157C1100117C1244127C1444 +895D:202010200050FC88090412FA1000340059DC9554155411DC1088108811541222 +895E:00407C2045FC44887C5043FE7C20A5FC24203E200100FFFE06801C48E530060E +895F:2110111007BCF11013B8255429126800B3F8280027FC20402248244429422080 +8960:2020112400A8FBFE0A0210F81088348858F8940015FC112411FC112411FC1104 +8961:200013F802A8F2A813F8210023FC6C84B3E42AA422A423E4209427F420142008 +8962:202013FE0000FBFC0A0412F4129437FC580095F8150811F8110811F8100013FE +8963:204010F80088FCF8088810F8100035FC592495FC152411FC100013FE10881108 +8964:200813E80288FBEE0A2813F416823BE2540091FC115411541154115417FE1000 +8965:212811AA016CF22812FE264426286AFEB2102A7C221022FE2210222822442282 +8966:200011FC0020FBFE0A2211AC142039AC540093FE102011FC115411541154110C +8967:200017FC0248F4441FFE244426EC6D54B6EC2C4426EC255426EC244424542408 +8968:214411440554F364115E27E420046A34B14C2BE4208423E4208420E427142008 +8969:202013FE0020FDFC080013FE125237FE590495FC150411FC110411FC10881104 +896A:210817FE0108F00013FC229422946BFCB0282BFE2220232422A82292242A28C6 +896B:2020102007FEF02013AE212423AE6AAAB3AE2AAA23AE20502050208821042602 +896C:200013FC0294F29413FC211022526BDCB0122BCE224023D2225C23D0225222CE +896D:2100113E0108F7D0113E212223A2683EB0222BBE22A222A222BE238022942022 +896E:21FC110401FCFD0409FC108811FC34885BFE9488152412AA107010A811241060 +896F:4200213C27A40024F4BC132427A4693CB1242FA4213C259025582968252A2246 +8970:2108110807CEF112112427DE25526D5EB7D2291E2392255E2940211421122122 +8971:2210111007DEF010145E228227DE6810B7DE2C5027DE245027DE2450245224CE +8972:08407F7C1440FF7C22043E7C22403E7C2242263E0100FFFE06801C48E530060E +8973:4148214C22AA0008F7FE11482368694AB36A294C236C2148216A239A20262042 +8974:27BC14A407BCF4A417BC244425F46C44B5F42D5425F4255425F424E42554244C +8975:23FC110801F8F10811F8210E27F86808B7FE2A94239C2294239C22D627BC2084 +8976:411427D221100FFEF01017D025526FD2B5522FD4229427C8228A2FFA22A62442 +8977:2140126C0244F36C12A423AC22A46FFEB1082AF4244223F8204027FC204020C0 +8978:252817BE0948F7BE131825AA29466BFCB2042BFC220423FC220423FC21082204 +8979:27BE100007BCF4A416B424A420406FFEB4A02FFC24A427FC251229DC291231CE +897A:211017FE0110F00017FE254A254A6EFEB7EA2D6A267E27CA244E257225422406 +897B:22A8124807BEF2A8175C2AAA22886FFEB2182DE4284223F8204027FC204020C0 +897C:210817FE0108F390113C27D422B46D5CB396292223FC200027FE2080210423FE +897D:211017FE0110F7BC14A427BC24A46FBCB4442FFC255425F4244424E425542448 +897E:0000FFFE0440044004407FFC444444444444444447C444444004400440044004 +897F:0000FFFE0440044004403FF8244824482448244828383008200820083FF82008 +8980:00007FFC044004403FF8244824483FF800000000000000000000000000000000 +8981:00007FFC044004403FF8244824483FF802007FFC042008401C80038006703808 +8982:FFFE04403FF824483FF8000001F03E0001007FF80060018006001800E7FE0000 +8983:FFFE04403FF824483FF800001FF010101FF010101FF00100FFFE010001000100 +8984:00007FFC04403FF8244824483FF80850104837FE504090A010A0111012081406 +8985:0040FE402840287EFEAAAB2AAA2AFE4A104AFE9225124422282210422894C408 +8986:FFFE04403FF824483FF8120027FC42088BF8120833F8510093F8151010E0171E +8987:FFFE04403FF824483FF822007F7C22443E44087C7F4449447F7C0844FF540888 +8988:FFFE04403FF824483FF810207E20523E4A447EA41028FF2820103E2842448682 +8989:FFFE04403FF824483FF828207DFC2850388813FE7C0855E87D2811E8FE081018 +898A:FFFE04403FF824483FF82800FDFE292039FC11207DFC55207DFE1002FEAA1004 +898B:00001FF0101010101FF0101010101FF0101010101FF00440044008423042C03E +898C:000001F8FD08050805F84908290811F81108290825F844908090011202120C0E +898D:010009201110210841041FF010101FF010101FF010101FF0044008421042603E +898E:00007E7C420442087E10421042FE7E10421042107E1024502422240243FE8000 +898F:100010FC10847C8410FC10841084FEFC1084108410FC2850245044928092010E +8990:00007E88425042207E50428842007E88425042207E5024882402240243FE8000 +8991:080048FC4884488448FC7E84408440FC40847C8444FC4450445044924492850E +8992:04000EFC7084108410FC1C84708410FC10841E84F0FC1050145018921092010E +8993:000801FC7E102210112000001FF010101FF010101FF010101FF004421842E03E +8994:00007FFC010003600D1871041FF010101FF010101FF010101FF004421842E03E +8995:1000087C0A440244127C134454C454FC54449844197C112831284F4A804A0086 +8996:200011FC1104F90409FC1104110439FC5504950411FC1050109010921112120E +8997:00007F7C014401447D7C014401447D7C454445447D7C45280128014A0A4A0486 +8998:100010FC10841E8410FC1084108410FC7E84428442FC425042507E924292010E +8999:200020FC20847E8442FC4484908410FC5484548452FC5250925010925092210E +899A:2208111000207FFE40029FF410101FF010101FF010101FF0044008421042603E +899B:0200077C38442044237C2C44284428FC2D442A442A7C29282928494A4C4A8886 +899C:280028FC28842884AAFC6C84288428FC6C84AA8428FC28502A504C924892810E +899D:00007CFC10841084FEFC1084108400FC1084528452FC9450285024924492810E +899E:00007CFC448444847CFC448444847CFC448444847CFC28502A502C924892810E +899F:0800087C0844FF44087C084408447E7C104408442A7CA128A128A54A1C4A0086 +89A0:00007E7C12441244FF7C124412447E7C204420447E7C6228A228224A3E4A2286 +89A1:0000007C7F440844087C2A442A442A7C5D444944887C08280F28F04A404A0086 +89A2:100052FC5484908428FC4484828410FC1084528454FC9050285024924292810E +89A3:0C0070FC1084FE8438FC5484928400FC1084FC8424FC4450285010922892C50E +89A4:10001EFC10847E8452FC5C84708452FC4E8440845CFC5450545096929492210E +89A5:1400147C14447F44557C554455447F7C55445544557CFFA82428224A424A8086 +89A6:1000287C444482447D7C0044F144957C9544F544957C9528F528914A954AB286 +89A7:3F2024203F3E21403F5024883FF810101FF010101FF010101FF004421842E03E +89A8:0000777C55445544777C00447F44007CFFC420443F7C01280128014A0A4A0486 +89A9:1000107C7D441244147CFF441044207C7E44A244227C3E282228224A3E4A2286 +89AA:1000087C7F440044227C1444FF44087C08447F44087C2A28492888CA284A1086 +89AB:1000087C7F440044227C14447F44517C08447F44107C1E281228224A2A4A4486 +89AC:0800497C49447F44007CFF4400447F7C414441447F7C422824280F4AF04A4086 +89AD:0000FF7C814400447E7C42447E44427C7E441044087CFF280028244A424A8186 +89AE:08202AA44D28145022887FFE40029FF410101FF010101FF010101FF00842F03E +89AF:2200227CFFC422447F7C2244FFC4087C7F4449447F7C4928FFE8414A454A4286 +89B0:10001E7C10447F44517C5C4472444E7C40445E44527C5E2852285E4A524ABF86 +89B1:08047F7808403E402A7E3E482A48FF4808881FF010101FF010101FF00442783E +89B2:2200227CFFC422443E7C08447F44497C7F4408447F7C08287F28084A0F4AF086 +89B3:2000207C3F444844887C7F441444227C7F44A4443F7C24283F28244A3F4A2086 +89B4:0A00747C15445244227C21445D44807C7E444244427C7E284228244A0F4AF086 +89B5:E700A57CE744A544E77C8144BD44A57CBD44A544BD7CA528A528CD4A814A8386 +89B6:0F00F07C49442244FE7C14440844FF7C9544BD44837CBD289528894A954AA386 +89B7:10001E7C10447F44517C5C4472444E7C40444A446AFC5B284A288F4A784A0086 +89B8:0000777C55447744557C774441445D7C55445D44557C5D285528414A454A4286 +89B9:0144F9548B548DF8F80E89128AEAFE0A8A0A8AEAFAAA52A452B456AA5B0A9210 +89BA:3AB821083AB82288393822887FFE50129FF410101FF010101FF004421842E03E +89BB:08000F7C08447F44497C4C447944477C40445F44407C5F2851285F4A8A4A3F86 +89BC:0000FF7C52449144FFFC9144DB44B57CDB449144DB7CB528DB28914A954A8286 +89BD:7E40487E7E9043087EFE48AA7FFE10101FF010101FF010101FF004421842E03E +89BE:1000087C7F444144867C784449442A7CFF442A44417CBE282A283E4A2A4A3E86 +89BF:1000FEFC10847C8400FCFE84AA84FEFC44847C8444FC7C5044507C922892450E +89C0:2200227CFFC42244777C55447744127C3F446444BF7C24283F28244A3F4A2086 +89C1:00001FF01010101011101110111011101110129012900480048008823082C07E +89C2:000001FC0104FD0405240524492429241124115428502490449081120212040E +89C3:00003E7C220422082A102A102AFE2A102A102A10081014501422240243FE8000 +89C4:100011FC11047D04112411241124FF241124115410502890249045128212040E +89C5:01F87E0012100910092000001FF010101110111011101290028004821882607E +89C6:200011FC1104F90409241124112439245524955410501090109011121212140E +89C7:100011FC11041F0411241124112411247D2445544450449044907D124612040E +89C8:04402440247C2490250804001FF010101110111011101290028004841884607C +89C9:2208111000207FFE400280041FF010101110111011101290028004841884607C +89CA:0800497C494449447F5400547F54015401543F542010202823282C4A308A0106 +89CB:0000007C7F44084408542A542A542A545D544954881008280F28F04A408A0106 +89CC:0800087C7E4408440854FF5401542A54185448542810FF281428224A414A8186 +89CD:1400147C14447F445554555455547F54555455545510FFA82428224A428A8106 +89CE:1000287C444482447D540054F15495549554F55495109528F528914A954AB286 +89CF:2400247CFF4424447E542454FF5408547E544A547E104A28FF28424A4A4A4486 +89D0:2200227CFFC422443E5408547F5449547F5408547F1008287F28084A0F4AF086 +89D1:10001E7C10447F4451545C5472544E5440544A546A905B284A288F4A784A0086 +89D2:080008001FE020204040BFF8210821083FF8210821083FF82108410841288010 +89D3:100410041F2421244224BFA424A424A43FA424AC24B43FA42484448442848104 +89D4:101010101F102110427EBF92249224923F92249224923F92249244A242AA8144 +89D5:1080108050F851087E1055FC912411241DFCF124512411FC1124122412141408 +89D6:20202020782049FC90247C24542454247DFE542054507C505488548845048E02 +89D7:1004101E3CF024904890BE902A902AFE3E902A902A903E882A8A4AAA42C68682 +89D8:101010103C1024104854BE522A522A903E102A142A043E082A084A10422086C0 +89D9:100010FC3C4424484848BE502A5C2A443E442A442A683EA82A904A9843248642 +89DA:2008201C79F0495091507D50555055507D50554855487D685554567446528C00 +89DB:100010003CFC24844884BE842AFC2A843E842A842AFC3E842A004A0043FE8600 +89DC:088028882EF028842E84F07C08000FC010803FF851081FF811081FF811082118 +89DD:1004101E3CF024904890BE902A902AFE3E902A902A903E882A8A4AAA42D6868A +89DE:104010403C7E2480497CBE082A102A203EFE2A4A2A4A3E922B124A2242548688 +89DF:101010103C7C24104810BE102AFE2A003E102A102A7C3E102A104A1042FE8600 +89E0:111009207FFC0200FFFE08203818CFC610803FF851081FF811081FF811082118 +89E1:104010403C7824884950BE202A502A883F062AF82A883E882A884A8842F88688 +89E2:08007F7C08243E2408447F5408880FC010803FF851081FF811081FF811082118 +89E3:100010FC3C2424244854BE882A102A503E7C2A902A103EFE2A104A1042108610 +89E4:2040204078FC490492087DFE5500557C7D44554455547D4855425542453E8E00 +89E5:20202020792448A490A87C2055FE54907C90549054907C9255125512460E8C00 +89E6:20202020782049FC91247D24552455247DFC552454207C28542457FE45028C00 +89E7:108810483C50240049FCBE202A202AFC3E202A202BFE3E202A204A2042208620 +89E8:200021FC7820482093FE7C00542054227FB254B454A87D285524562444A28C40 +89E9:202820247824482093FE7C20552054B27CB4546854A87D245622542044A08C40 +89EA:104010203CFC24004888BE502BFE2A203E202A202AFC3E202A204A2042208620 +89EB:2020202079FE482090207DFC552455247DFC542054707CA85524562244208C20 +89EC:20002040799C490491047DDC550455047DFC545054507C505490549245128E0E +89ED:2020202079FC485090887D0457FE54087DE8552855287DE85528540844288C10 +89EE:100010FC3C042404487CBE042A042AFE3E102A922A543E382A544A9242508620 +89EF:21042088785049FC91247D2455FC55247D2455FC54207C2057FE542044208C20 +89F0:102010203CFA24244828BFFE2A202A403EFC2B442A443E7C2A444A44427C8644 +89F1:00283FFE20202FA420282F9048AA4FC690823FF851081FF811081FF811082118 +89F2:208820507BFE482091FC7C2057FE54007CA054FC55207C2057FE542044208C20 +89F3:0800FFB808287F280028FFC6A0803E7C4224FF2449287F2849107F2849448B82 +89F4:1040107E3C80257C4844BE7C2A442A7C3E002AFE2A403EFE2B2A4A4A42928626 +89F5:2048204879FC484890487DFE542055FC7D2455FC55247DFC5400544844848D02 +89F6:200021DC7954495491DC7C0055FC55247DFC552455FC7C2057FE542044208C20 +89F7:0A803138228839382288FFFE88020FC010803FF851081FF811081FF811082118 +89F8:200021FC7954495491FC7C8055FC56447DF4555455547DF4544455F444148C08 +89F9:105010483CFE259048FCBE902AFC2A903EFE2A002AEE3EAA2AAA4ABA42828686 +89FA:48F8705044203DFC20247CB890A07D7E2A004FF010202FF848880FF808881098 +89FB:212421747A584ADA93FE7D5456DA57FE7CA2542057FE7C7054A8552446228C20 +89FC:208020F879084BFE91227D5254FC54847CFC548454FC7C4054FC554444388CEE +89FD:2010211279FE484890FE7D9056FE54907CFE549054FE7C8055DE555245728D06 +89FE:208820887BFE488890F87D04557457567D54555457747D0654005554452A8E2A +89FF:222223FE789049FE93107DFE551055FE7D1055FE54007DFE554A55F645528D76 +8A00:02000100FFFE000000003FF8000000003FF8000000003FF8200820083FF82008 +8A01:200010001000FE0000007C0000007C0000007C004400440044007C0044000000 +8A02:2000100011FEFE2000207C2000207C2000207C204420442044207C2044A00040 +8A03:204010401040FE4000407C5000487C4400447C404440444044407C4044400040 +8A04:2040202023FC2000FDF8240025F8240025F82508250825FA250A440243FE8000 +8A05:204010401040FE4001F87C4800487C4800487C484448444A448A7C8A45060200 +8A06:200410041084FE8400847C8400847C84008C7C9444E4448444047C0444040004 +8A07:100010001FFC20044204BFE400041FC400041FC400041FC410441FC410540008 +8A08:202010201020FE2000207C2003FE7C2000207C204420442044207C2044200020 +8A09:200011F00110FD100110791001907950015079104910491249127A124A0E0400 +8A0A:200013F00090FC900090789000907BF00090789048904892488A788A48860082 +8A0B:204010401040FEFC00847D0400047D0400847C444444440444047C0444280010 +8A0C:2000100010FCFE2000207C2000207C2000207C204420442044207C2045FE0000 +8A0D:200011F81088FEC800A87CA800887C5000507C504420442044507C8845040202 +8A0E:201010101010FE1001FE7C1000107C1001107C904490441044107C1044500020 +8A0F:200010FC1020FE2000207C2000207DFE00207C204420442044207C2044A00040 +8A10:200010FC1020FE2000207C2000207DFE00207C204420442044207C2044200020 +8A11:202010201020FEA000AC7CB400E47DA400A47CB444A844A244A27C82447E0000 +8A12:2000100010FCFE2400247CA400A47CA400A47D244424444444447C8445280210 +8A13:210411240124FD240124792401247924012479244924492449247A244A040404 +8A14:0100210821083FF802000100FFFE00003FF800003FF800003FF820083FF82008 +8A15:202010201020FE2001247D2401247D2401247D244524452445247DFC44040000 +8A16:204010401080FEFE01007E0000FC7C0800107C204440448045027D0244FE0000 +8A17:2008103C11E0FE2000207C2000207C3E01E07C204420442244227C22441E0000 +8A18:2000100010FCFE0400047C0400047CFC00847C804480448044827C82447E0000 +8A19:204010401040FDF800487C4800487D4800C87C4844A844A8448A7D0A45060202 +8A1A:200017FC020441045FF440044FE440044FE440044FE4482448244FE44824400C +8A1B:20A010A000A0FD2401247B2805307920016079A04920492249227922491E0100 +8A1C:201010501050FE5000887C8801047EFA00487C484448444844887C8845280210 +8A1D:200011FC1010FE9000907C9001107DFE00307C504450449045107E1044500020 +8A1E:2008103C11E0FE2000207C2003FE7C2000207C504450445044887C8845040202 +8A1F:200810481048FE4800447C8400A47D2200207C404440444844847DFE44820000 +8A20:200411E40024FC24002479E401047904010479E4482448244824782449440084 +8A21:202010201050FE5000887D4402227C2000007DFC4404440844087C1044100020 +8A22:2004100E10F0FE8000807C8000FE7C8800887C884488448844887D0845080208 +8A23:202010201020FDFC00247C2400247C2403FE7C204450445044887C8845040202 +8A24:200810881050FE2000507C8801007C0800887C884450445044207C5044880306 +8A25:202010200020FC2003FE7A2202227A2202527A4A4A8A4B024A027A024A0A0204 +8A26:202010200020FDFE01227A24002078200050785048504850489078924912020E +8A27:204010501048FE4800407DFE00507C5000507C504490449044927D12450E0200 +8A28:201010101010FE9000907C90009E7C9000907C904490449044907C9045FE0000 +8A29:200010080108FC8802527A5202227A2202527A924B0A4A0A4A027BFE48020000 +8A2A:204010201020FDFE00407C4000407C7C00447C444444444444847C8445280210 +8A2B:200010400020FC100090788000807A8402827A824A824C884888788848780000 +8A2C:202010201020FEA800A47CA201227D2002247C244428440844107C2044C00300 +8A2D:200010F81088FE8800887D0602007DFC00847C844448445044207C5044880306 +8A2E:200011FC0088FC880088788800887BFE00887888488848884888790849080208 +8A2F:200013FC0084FC8800887890009C788401447944492849284A107A2844440182 +8A30:202010200020FBFE0020792401247924012479FC4824482048227822481E0000 +8A31:208010800080FDFC01207A200020782003FE7820482048204820782048200020 +8A32:202010200020FC2001FC792401247924012479FC492448204820782048200020 +8A33:200011FC0104FD040104790401FC792401207920491049104A087A0844040802 +8A34:2008101C01E0FD000100790001FE7910011079304918491449127A104A100410 +8A35:2000100003FCFE9402947A9402947A9402947A944A9C4B044A047A044BFC0204 +8A36:2000100003FEFC08000879E8012879280128792849E849284808780848280010 +8A37:202010200020FDFC01247924012479FC01247924492449FC4924782048200020 +8A38:201C10E01020FE2000207DFE00207C7000707CA844A8452446227C2044200020 +8A39:202010281024FC2003FE7C2000707C7000A87CA84524462244207C2044200020 +8A3A:202010200050FC8801047A120020784001887810482048444988781048600380 +8A3B:204010200000FDFE002078200020782001FC782048204820482078204BFE0000 +8A3C:2000100003FEFC200020782001207920013C7920492049204920792047FE0000 +8A3D:208010800100FDFC02047C0401E479240124792449E449244804780448280010 +8A3E:088028882EF028842E84F07C01007FFC00003FF800003FF800003FF820083FF8 +8A3F:209010900090FA9002927AD402987A9002907A904A904A924AD27F124A0E0000 +8A40:202010201020FE20003E7C2000207C2001FC7D044504450445047D0445FC0104 +8A41:202010200020FC2003FE78200020782001FC7904490449044904790449FC0104 +8A42:208810880088FD08017E7B080508794801287928490849084908790849280110 +8A43:202010101010FDFE00207C2000447C8401F87C104420444444827DFE44820000 +8A44:202010200120FD2001FC79200220782003FE7820485048504888788849040202 +8A45:202010201050FE5000887D2402127C1001FC7C044408448844507C2044100010 +8A46:2004101E11F0FF1001107D1001107DFE01107D1045104508450A7D4A45A60112 +8A47:202010200020FDFC012479240124792401247BFE482048504850788849040202 +8A48:00003FF8244824483FF80100FFFE00003FF800003FF800003FF820083FF82008 +8A49:41002100013EF91207D27252025272540254749452885108529474A458420080 +8A4A:202010201124FEA400A87C2001FC7C2000207C2047FE442044207C2044200020 +8A4B:200011FC0104FD040104790401FC78500050785048504892489279124A0E0400 +8A4C:208810881088FE8801FE7C8800887C8800887CF84488448844887C8844F80088 +8A4D:204811480148FD4801487BFE0148794801487948497849004900790049FE0000 +8A4E:200010FE1080FE8000807CFC00847C8400847C8444FC448044807C8044FE0000 +8A4F:201010900090FD10017E7A5203927892011279124A524BD248627822484A0084 +8A50:208010801080FCFE01407D4002407C7C00407C404440447E44407C4044400040 +8A51:202010101010FEFE00827D0400407C4800507C604440444244427C42443E0000 +8A52:202010201020FE4000487C8401FE7C8200007CFC4484448444847C8444FC0084 +8A53:202010201020FDFC00207C2000207DFE00207C204440444844847DFE44820000 +8A54:200011FC1044FE4400447C4400947C8801007CFC4484448444847C8444FC0084 +8A55:200011FC1020FE2001247CA400A87C2003FE7C204420442044207C2044200020 +8A56:201010100010FDFE01127914011079FC014479444928492849107A284A440482 +8A57:200011FE1102FF0201027D7A014A7D4A014A7D4A457A454A45027D02450A0104 +8A58:202010200124FD240124792401FC782000207924492449244924792449FC0004 +8A59:205010480048FC4003FE7880008078FC01447944492849284A107A2844440182 +8A5A:2000100010FCFE8400847C8400FC7C8400847C8444FC448444007C0045FE0000 +8A5B:200010F81088FE8800887CF800887C8800887CF84488448844887C8845FE0000 +8A5C:202011240124FD2401FC782000207BFC01047888488848504820785049880606 +8A5D:204010200020FDFE01027A040000780001FE7820482048204820782048A00040 +8A5E:200011FC1004FE0401F47C0400047DF401147D1445F4451444047C0444280010 +8A5F:04800440FFFE0940118466FC01007FFC00003FF800003FF800003FF820083FF8 +8A60:204010200010FDE00022783403B878B000A878A8492849244A247C2248A00040 +8A61:200013DE0042FC420252794A014A784200C6794A4A52484248427842494A0084 +8A62:2080108001FCFD04020479E40124792401E47924492449E44904780448280010 +8A63:208010841098FEE000827C82007E7C0000FC7C84448444FC44847C8444FC0084 +8A64:201011101110FF2801447D0001FE7C0000A87CA844A844A844A87CAA452A0206 +8A65:202010201050FE5000887D0402FA7C0000007CF84488448844887C8844F80088 +8A66:201010140012FC1003FE7810001079D0009078904890488848EA7B8A48060002 +8A67:108010803EFC62449448483031102FE8C0061FF000001FF000001FF010101FF0 +8A68:204010200020FDFE0000788801047A0200887888485048504820785048880306 +8A69:202010200020FDFC0020782003FE7808000879FE480848884848780848280010 +8A6A:200011F80108FD0801F87908010879F801447948493049204910794849860100 +8A6B:2040102003FEFA020000783803C078400040787C4BC0484048427842483E0000 +8A6C:2008101C01E0FD00010079FE01007900017C79444944494449447A7C4A440400 +8A6D:2040104000FCFD04020879FE0100797C014479444954494849427A424A3E0400 +8A6E:202010200050FC8801047A0201FC78200020782049FC4820482078204BFE0000 +8A6F:202010200040FDFC01047904010479FC0104790449FC49044904790449FC0104 +8A70:202010200020FBFE0020782001FC7800000079FC490449044904790449FC0104 +8A71:2008103C11E0FE2000207DFE00207C2000207DFC4504450445047D0445FC0104 +8A72:202010101010FDFE00207C2400447CF800127C224444458844107C2844440182 +8A73:210410840088FC0003FE7820002079FC002078204BFE48204820782048200020 +8A74:2020102011FEFE4000407CFC00847D8402FC7C84448444FC44847C8444940088 +8A75:202011200120FDFC01207A2000207BFE0090789048904890491279124A12040E +8A76:208210920092FC920092789202DA7AB604927892489248924892791249020202 +8A77:200011FE1102FF02017A7D0201027D7A014A7D4A454A457A45027D02450A0104 +8A78:202010200124FCA400A8782000207BFE007078A848A8492449247A2248200020 +8A79:08000FF010203FFE6508A8843FFE200027F8200027F8200027F8440847F88408 +8A7A:20201020107EFE8201447C2800107C2000407CFE4542444244427C42447E0042 +8A7B:2080108000F8FD0803107CA0004078A001187A064DF849084908790849F80108 +8A7C:204010400040FDFE0080789000907912015279544A904A284C28784448840102 +8A7D:200011DC0088FC880088788800887BDE00887888488848884888790849080208 +8A7E:210011000100FDFE02027A02051278A2024A7AAA4B1A4A0A4BFA780248140008 +8A7F:2020102001FCFC200020782003FE78000020782049FC4820482078204BFE0000 +8A80:200013FE1088FE8800F87C8800887CF800887C88448E47F844087C0844080008 +8A81:210410840088FC0001FE78880088788800887BFE48884888490879084A080408 +8A82:205010501050FD5200D47C5800507C5800D47D524650445044927C924512020E +8A83:20201020107CFE8401487C3000207C4801907C3E444245A444187C1044600180 +8A84:2020102003FEFC20002079FC0020782003FE787048A848A849247A2244200020 +8A85:202011200120FDFC01207A2000207BFE007078A848A8492449247A2248200020 +8A86:200013FE0200FE0003FC7A2002207AF802207A204A204BFC4A007A004BFE0000 +8A87:2020102003FEFC500088790402FA780003FE7840488049FC4804780448280010 +8A88:200011FE0020FC400088790401FE78220020782049FE4820482078204BFE0000 +8A89:2208110811100020FFFE082011102FE8C0061FF000001FF000001FF010101FF0 +8A8A:1110091009207FFC0200FFFE09203FF8C0061FF000001FF000001FF010101FF0 +8A8B:200011F80008FC0801F879000104790400FC7840482048A44A8A7A8A44780000 +8A8C:202010200020FBFE00207820002079FC0040782048A44A824A8A7A8A4C780000 +8A8D:200013FC0044FD4401447A84009479080240782048A44A824A8A7A8A44780000 +8A8E:2020102003FEFC20002079FC0124792401FC7820487048A849247A2248200020 +8A8F:2020101010FCFE8400847CFC00847C8400FC7CA244A4449844907C8844C40082 +8A90:201010D80394FC9400907BFE00907894009478D84B98489048AA78CA4A860102 +8A91:4000244002BEF90802887488008870BE018872885488508850887088553E0200 +8A92:202010400088FD0403FE7882008079FC022078204BFE48204850788849040602 +8A93:080C7EF008800EFE78880A8819087FFC00003FF800003FF800003FF820083FF8 +8A94:2000100603B8FC8800887908013E7B8800887A884A88493E49007A80447E0800 +8A95:2004100E03B8FC8800887928012E7BA800A87AA84AA8493E49007A80447E0800 +8A96:2020102003FEFC2000207BFE02027C0401F8781048204BFE4820782048A00040 +8A97:204210E20382FC8A008A788A03EA788A018A79CA4AAA4A824C827882488A0084 +8A98:201C11E00020FC2003FE78A801247A2201F87888489048BE490279024A140408 +8A99:200011FE0000FC9201247A4801247892000079FE48204820482078204BFE0000 +8A9A:2020112410A4FEA800207DFC01047D0401FC7D04450445FC45047D0445140108 +8A9B:200011FC0004FCFC000479FC00007BFE020279F8488848884850782048D80306 +8A9C:204010400088FD0403FE780200887944024278F849884A504820785049880606 +8A9D:202010201050FE8801447E2200F87C0800107C2045FC450445047D0445FC0104 +8A9E:200013FC0040FC4001F8788800887BFE0000780049F849084908790849F80108 +8A9F:2020102211FAFE2400247DFE00107C2001FC7C88451046FE44107C1044500020 +8AA0:202810240024FC2003FE7A2002247A2403A47AA84AA84A904A927DAA44460882 +8AA1:201010140012FC1003FE78100150795407F47954495449484A4A7A5A44260042 +8AA2:200011F80108FD0801F87908010879F80108790849F84890489079124A12040E +8AA3:200011FC0020FC20012479240124792402AA7AAA4CB24820482078204BFE0000 +8AA4:200011FC0104FD0401FC7800000079FC002078204BFE48204850788849040202 +8AA5:202011200120FDFC01207A2000207BFE0000780049FC49044904790449FC0104 +8AA6:200011F81008FED000207DFC01247D2401FC7D24452445FC45247D244524010C +8AA7:2028102411FEFE2000207DFC01247D2401FC7D24452445FC45247D244524010C +8AA8:2080108010FEFD0002FC7C8400A47C9403FE7C844524451445FE7C0444280010 +8AA9:202010101010FEFE00007C7C00007C7C00007C7C4444444444447C7C44440000 +8AAA:201010900088FD0802047DFA01087908010879F848904890489079124A12040E +8AAB:200011FE0100FD00017C7900010079FE015079524954494849487A444A520460 +8AAC:210410840088FC1001FC79040104790401FC785048504890489279124A0E0400 +8AAD:2020102003FEFC2001FC780003FE7A020404789048904890489079124912020E +8AAE:2088108813FEFC8800887C5000507C9401947E98449044B244D27C92448E0080 +8AAF:20FC10841084FEFC00847C8400FC7C0001FE7D02450245FE45027D0245FE0102 +8AB0:20A010900080FDFE01107B1005FC7910011079FC49104910491079FE49000100 +8AB1:2020102003FEFC2001FC782403FE782401FC78204920493E49207AA04A7E0400 +8AB2:200011FC0124FD2401FC7924012479FC00207BFE487048A849247A2248200020 +8AB3:400023FE0202FA0203FE721002927292029272FE521052925292749254FE0802 +8AB4:2040102003FEFA02000079FC0000780003FE7820492849244A227C2248A00040 +8AB5:218410680030FCC80324782003FE784000FC79844AFC488448FC788448940088 +8AB6:2040102003FEFC000088788801547A22000078204BFE48204820782048200020 +8AB7:200013FE0202FE8A02527BFE02427A2203FE7A824A824A824AFA7A024A0A0204 +8AB8:201013880088FCFE00907B9002247A2402387B884890489048A478BE4A820100 +8AB9:205010500050FBDE00507850005079DC00507850485048504BDE785048500050 +8ABA:202010200020FBFE002079240124792402AA787048A848A849247A224C200020 +8ABB:2020102203B4FCA800A8792402A2784001FC7904490449FC4904790449FC0104 +8ABC:2020101001FEFD02020478F80088788800F87888488848F8488878884BFE0000 +8ABD:20001040039CFA0402047B9C02047A0403FC789048904890489079124A12040E +8ABE:7C7C44447C7C44447C7C41045FF440044FE440044FE440044FE448244FE4400C +8ABF:200011FC0124FD240174792401FC7904017479544954497449047A044A140408 +8AC0:2040108001FCFD24012479FC0124794401FC789049104BFE4810781048100010 +8AC1:200013DE0042FD4A0084794A02527C2000007BDE48524952489479484A540422 +8AC2:20401040007CFC8401087A00002079CE0102790249CE49024902790249FE0102 +8AC3:208810880088FC8803DE78880088799C01DC7AAA4AAA4CC84888788848880088 +8AC4:2040102003FEFC0001FC790401FC780001FC780848104BFE4820782048A00040 +8AC5:08207FFC08200FE008200FE00820FFFE11103FF8C0061FF000001FF010101FF0 +8AC6:2088108813FEFC8800887CF800887C8800F87C88448847FE44007C8845040202 +8AC7:202010A200A2FD240050788803047822002078A448A449284850788849040202 +8AC8:2008103C01E0FC2003FE78A800A878A803FE78A848A84BFE4820782049FC0000 +8AC9:201C11E00020FC2003FE78A801247A4200407BFE4888490848D0783048480184 +8ACA:2080108000FEFD0202427A4A0152784203FE784248E249524A4A784248540008 +8ACB:2020102003FEFC2001FC782003FE780001FC790449FC490449FC790449140108 +8ACC:2020102013FEFC2001FC7D2401FC7D2401FC7C20447044A845247E2244200020 +8ACD:2080108001F8FD0802107DFC0024782403FE7824482449FC4824782048A00040 +8ACE:204810481048FDFE00487C4801FE7C0000FC7C84448444FC44847C8444FC0084 +8ACF:200017E0025EFA5202527BD202527A5403D47A544A484AE84F54785448620040 +8AD0:17F8240867F8A2A024A4289C01007FFC00003FF800003FF800003FF820083FF8 +8AD1:200013FE0040FC8001447A2400687AB001307AA8486848A449227A2048A00040 +8AD2:2040102003FEFC00000079FC01047904010479FC482048A849247A2248A00040 +8AD3:20481044105EFDE000287C12006A7D9600487C5E45E0442444287C12446A0186 +8AD4:4100210001DCF9140114711407D4701401147114558855485948711455140222 +8AD5:20201020003EFC2001FE7922013879E00122791E490049784A487A4A448A0906 +8AD6:202010200050FC8801047AFA000079FC0154795449FC4954495479544904010C +8AD7:202010200050FC8801447A2201F878080050782048A44A824A8A7A8A44780000 +8AD8:2020102003FEFC20002079FC0020782003FE784048A449A84A907C8848C60080 +8AD9:201C13E00220FBFE02207A92030A7A0601FC7904490449FC4904790449FC0104 +8ADA:2020101010FEFE8201047C0000FE7C1000107C90449E449044907CD0453E0200 +8ADB:2020102000A0FD2C0124792401AC7924012479FC492448504850788849040202 +8ADC:204811480148FBFE014879480178790001FE78204BFE487048A879244E220020 +8ADD:200013FE0022FD20013C792002FE7C0001FC790449FC490449FC790449140108 +8ADE:2040102001FEFD02010279FE0100790001FE79AA49AA4AFE4AAA7AAA44A20086 +8ADF:200011FC0104FD0401FC7904010479FC00007BFE48204920493C79204AA0047E +8AE0:2040102003FEFA02040479FC000079FC010479FC490449FC490478004BFE0000 +8AE1:2088110402FAFC40008078F800087850002079FC49544954495479544BFE0000 +8AE2:200013FE0222FC2003FE782001FC792401FC792449FC48204BFE782048200020 +8AE3:200010FC1084FE8400F47C9400947DFE01027D7A454A454A457A7D02450A0104 +8AE4:200013DE0252FE5203DE780001FC780003FE7880490049FC4804780448280010 +8AE5:2008103C01E0FC2003FE782001FC792401FC792449FC482049FC78204BFE0000 +8AE6:2040102001FCFC000088785003FE7A22042479FC492449244934792848200020 +8AE7:2110111201D4FD1801527992012E784001FC7904490449FC4904790449FC0104 +8AE8:200013FE0000FDFC0104790401FC780003FE7A224A224BFE4A227A224BFE0202 +8AE9:208410480000FDFE0048784800487A48014A794C48484848484878484BFE0000 +8AEA:2040102003FEFC0001FC790401FC780003FE7A0249FC48204820782048A00040 +8AEB:2020102003FEFC2001FC792401AC7974012479FC4820487048A879244A220020 +8AEC:0C28702411FEFE503852548E91007FFC00003FF800003FF800003FF820083FF8 +8AED:204010A00110FA0805F6780003C47A5402547BD44A544A544BD47A444A5402C8 +8AEE:2020112000BEFC4200847B10011079280144788248FC48844884788448FC0084 +8AEF:202011240124FD2401FC780003FE7820004079FC49544954495479544954010C +8AF0:200011FC0124FD2401FC7924012479FC0000784048244AA24A8A7C8848780000 +8AF1:2040104001FCFC8403FE780001FC790401FC78204BFE48204A207BFE48200020 +8AF2:200013FE0050FC5001FC79540154795401FC7820482049FC482078204BFE0000 +8AF3:2020101011FEFE0000847C4801FE7C0000FC7C84448444FC44847C8444FC0084 +8AF4:2008100C000AFBFE02087A0802E87A0A020A7AEC4AAC4AA84AEA7A1A4A260442 +8AF5:2020102003FEFC2000207BFE028A7A5202FA7A224A224AFA4A227A224A2A0204 +8AF6:2088108803FEFC8800F8788800F8788800887BFE490049484984790049FE0000 +8AF7:400027FC0404FC3405C4744405F47554055475F45444545455F4749458061002 +8AF8:2020102201FAFC2400287BFE0020784000FC79844A8448FC4884788448FC0084 +8AF9:200011F80108FDF8010879F800007BFE010079FC4A544C9449247A4448A80110 +8AFA:2020101001FEFC000084784801FE7908011079644908491249647A084A3004C0 +8AFB:2020104001FCFD0401FC790401FC780003FE7820482049FC482078204BFE0000 +8AFC:201E13E00044FD24008879FC0040784003FE788048FC494449287A1048680186 +8AFD:2088108803FEFC8800F8782001FC7924012479FC48204BFE4820782048200020 +8AFE:2088108803FEFC8800A8782003FE7840008078FC49844A844884788448FC0084 +8AFF:200010F81088FE8800F87C0001FE7C8800F87C8844F84488449E7DE844080008 +8B00:2088108803FEFC88008878F80088788800F878204BFE487048A879244A220020 +8B01:200011FC1104FDFC01047DFC00807DFE02227D224552450245FA7C0244140008 +8B02:200013FE0222FBFE02227BFE000079FC010479FC490449FC4904790449140108 +8B03:200011FC0104FDFC010479FC0020792001FE7A20482049FC482078204BFE0000 +8B04:024879504BF848804FFC79104A484FFC48027BF848004BF848004BF84A089BF8 +8B05:2040104010FEFD2200AA7CFA00427C9401487CFE452246AA44FA7C4244940108 +8B06:2020101001FEFD02010279FE010079EE012279AA4966492249667AAA4A220466 +8B07:01007FFE44429FF404403FF80440FFFE09201FF02008DFF600001FF010101FF0 +8B08:1FF010101FF010101FF008207FFC0820FFFE0A203118DFF600000FE008200FE0 +8B09:2020104003FCFE2402247BFC02247A4403FC784048A848B4493C79224A22041E +8B0A:2088108803FEFCA800107BFE0080788000FC780048A848A848A878AA492A0206 +8B0B:4208220803BEF4880AA8713E02087448084877FC50E0515052487C4650400040 +8B0C:200013FE0008FDE8012879E800007BFE000879E84928492849E8780848280010 +8B0D:08202AA44D28145022887FFE4102BFF400001FF000001FF000001FF010101FF0 +8B0E:201010940254FD580110787E00107B30013879544994491049107A804C7E0000 +8B0F:20A0112C1124FD2401AC7D2401247DFC00207DFC4488445044207C5044880306 +8B10:404020280090FAA402C2748A01887678000073FC529452945294729457FE0000 +8B11:201E13E00122FC940040788801F0782000C479FE482248204BFE785048880306 +8B12:202010200050FC4800A479FE028478FC008478FC488048FC494479444A7C0044 +8B13:2020102003FEFC2001FC790401FC790401FC790449FC49044BFE788849040202 +8B14:4040207C0040FBFE0242727803C07244023C720052FC528053FE7480548008FC +8B15:4004201E03F0FA1E021072FE0292729802F2728E528052B852A874AA554A0A86 +8B16:200011FC0124FDFC012479FC00887944024278F849884A504820785049880606 +8B17:2040102003FCFD0800907BFE02027C4400207BFC488048F84888790849280210 +8B18:200013FC0204FA0403FC7A4002207BFC02887A504BFE4A204DFC7C2048200020 +8B19:208810500000FDFE005079FC00547BFE005479FC485048D849547A5248500050 +8B1A:210410840088FC0003FE780000887904020279FC495449544954795447FE0000 +8B1B:2088108803FEFC8801FC788803FE782001FC792449FC49244BFE790449140108 +8B1C:200011FE0110FD20017C7944017C7944017C79104910495449527A924A500420 +8B1D:4084210403C4FA4403DE724403C47264025477D450C451445244744451540088 +8B1E:2040102003FEFC0001FC790401FC780003FE7A024AFA4A8A4AFA7A024A0A0204 +8B1F:203C13C00044FA240128790000407B9C02047A044B9C4A044A047A044BFC0204 +8B20:2040108001FCFA48013078C0030079FC022078204BFE48204924792449FC0004 +8B21:2008103C03C0F8040244792801FC7A2000207BFE482049244924792449FC0004 +8B22:20A0109001FEFB2001FC792001FC792001FE79004BF849084890786049980606 +8B23:21FC102003FEFE2201AC782001AC780001FC78004BFE488048FC780448280010 +8B24:200013FE0050FDFC0154795401FC780001FC78004BFE482048A879244AA20040 +8B25:2020104001FCFD24017C798C01547924015479FC4820481049547942494A0238 +8B26:0878FF4808863E782A483E304148FFFC00003FF800003FF800003FF820083FF8 +8B27:2040102003FEFC0001547924015479FC00207BFE4A424A924AFA7A0A4A020206 +8B28:2088108803FEFC88000079FC010479FC010479FC48204BFE4850788849040202 +8B29:04407FFC04401FF010101FF010101FF00400FFFE11102FE8C0060FE008200FE0 +8B2A:2040102003FEFC8800507BFE02527A8A03067AFA4A8A4A8A4AFA7A024A0A0204 +8B2B:2040102003FEFC8800507BFE02227AFA02227AFA4A8A4A8A4AFA7A024A0A0204 +8B2C:200013DE0042FA52014A7A52002878C4031278604988483249C4781848600380 +8B2D:2108109007FEF80003C47A5403D47A5403D47A444ACC48004BFC788449140608 +8B2E:202013FE0020FDFC00207BFE000079FC010479FC490449FC490479FC48880104 +8B2F:2020103C0020FDFE0122793801E4791C0100797C4944497C4944797C494402FE +8B30:2010101002FEFD10017C7854007C7B54017C791049FE491049107A90447E0000 +8B31:202011FC0124FBFE012479FC002079FC012479FC48404BFE488879D04870038C +8B32:2040108801FCFD0802527BFE00507988062678C04B1048644B88783048C00700 +8B33:200013FE0200FE7C02447A44027C7A0002EE7AAA4AAA4AAA4AEE7A004BFE0000 +8B34:200011FC0124FBFE012479FC000079FC010479FC490449FC490479FC48880104 +8B35:200013DE0042FA52014A7A520042782001FC7904490449FC4904790449FC0104 +8B36:2040102001FEFD000148794801FE794801487948497849004AD47AAA452A0800 +8B37:08207E20087EFEC410281E10222846C68100FFFE00003FF800003FF820083FF8 +8B38:410821080108F7D0011E779401247FD4021473D452545248524874D454240842 +8B39:2088108803FEFC8800F8782001FC792401FC78204BFE482049FC78204BFE0000 +8B3A:08207E2008F8FF2814287F6A082AFF560982FFFE00003FF800003FF820083FF8 +8B3B:40102190061EFA22025472080F9072640208771E5AA252425214720852100260 +8B3C:2040107C0040FDFC0144797801C4793C01047978499449584AFE7A1044500020 +8B3D:7CF804887CF840207DFC052415FC0A22FFFE00003FF800001FF010101FF01010 +8B3E:200011F80108FDF8010879F800007BFC02947BFC480049F84890786049980606 +8B3F:4100211E07D2F912011277DE045277D2045277DE511251125FD27122512A0144 +8B40:200813880088F91007DE7A9402A47B9402947B944A944AC84B887E9448A400C2 +8B41:208813FE0088FC0001FC78A800A87BFE00A878A849FC48204BFE782048200020 +8B42:200013DE0252FE5203DE780001FC792401FC792449FC48204BFE782048200020 +8B43:4040207C0040FBFE0242727803C4723C020072505254535454D8745059FE0000 +8B44:210410880000FBFE02227AAA02727A2203FE780049FC490449FC790449FC0104 +8B45:400027DE014AFB5A056A725202D674200084708452D45296529472D4573E0000 +8B46:202013FE0020FDFC000079FC010479FC00887BFE480049FC4904790449FC0104 +8B47:2020102003FEFC8801247A2201FC782803FE784049FC4E8448FC788448FC0084 +8B48:4208210807C8F810079E749407A4701407947094511451C85708711455240242 +8B49:202017A400A8FA9201147A0805F4780203F87A084A084BF84A0879104FFE0000 +8B4A:2020102001FCFC2003FE7908039C790801887E3E48004BFE489078904912020E +8B4B:239C1294039CFE94039C7A0402F47A9402F47A944AF44A944A947B344A04020C +8B4C:400E23F00044FA24010873F8020873FC020473FE520252AA52AA750254140808 +8B4D:00803FFE229025FE2E9034FE249024FE24402FFE200027FC400047FC840407FC +8B4E:200013FC0048FC3003FE785200947B5000207BFE4A524A8A4B767A524A720206 +8B4F:2124112402AAFBAE01247AAA03AE792407FE7910491449144A8A7A4A4A160422 +8B50:2088105003FEFC5001FC7954018C7974010479FC48084BFE4908788848A80010 +8B51:201811E00040FBFE0088797402527870000079FC49044974495479744904010C +8B52:203C13E00124FCA803FE78A801247A0201FC7924492449FC4924792449FC0104 +8B53:2020102003FEFC2001FC792401FC792401FC78224BFE484248247AA24A8A0478 +8B54:200013DE0252FBDE02107A5201CE780000887BFE488848884BFE788849040202 +8B55:2080108001FEFB540554795403FE7954015479544FFE48004954792A4A2A0000 +8B56:200013DE0088FAA803FE798802DA7CA601F87908490849F84908790849F80108 +8B57:2210121003DEFA28054478A001107A0805F6780048004BF84A087A084BF80208 +8B58:2110109403D2F8120250799007FE781003D27A524A544BD44A4A7A4A4BD60022 +8B59:2090108801FEFD1003107DFE0110791001FE7910491049FE49007AA44A520452 +8B5A:200013FE0050FBFE02527BFE000079FC010479FC490449FC48207BFE48200020 +8B5B:2088108803DEF88807FE788801547A2201FC7904490449FC4904790449FC0104 +8B5C:2108109003FCF8900294799800907BFE000079F84908490849F87908490801F8 +8B5D:400027FC04A4FCA407BC70A007BC74A404A477BC54A454A457BC74A250A2007E +8B5E:200011FC0154FD5401FC780003FE780001FC790449FC4862489479884AA400C2 +8B5F:20F810880088FCF8000079DC0154795401DC78204BFE487048A879244A220020 +8B60:202017FE0000FBFE02027AFA028A7BFE000079FC490449FC490479FC480007FE +8B61:2020112400A8FBFE020278F80088788800F8780049FC492449FC792449FC0104 +8B62:204412240128FC7E00107828034A791C0128794C491A492A494879104AFE0400 +8B63:202010200050FC8801047AFA0000780001DC7954495449DC4888788849540222 +8B64:4108220807C8F45007DE746407D47214011477D4521453C852487454555408A2 +8B65:10207E204A7E7EC41028FF1020283EC64300FFFE00003FF800003FF820083FF8 +8B66:2420FF20247E7EC482287A104A287AC60500FFFE00003FF800003FF820083FF8 +8B67:402023FE0288FA5003FE725002FC725403FE725452FC525052D8755456520850 +8B68:409023FC0294FBFC029473FC000073FC020072F8520053FE5520751455480986 +8B69:2040102001FCFC8800507BFE000079FC010479FC490449FC48207A944A8A047A +8B6A:208813FE0088FDFC010479FC010479FC008079FE4A224D52490279FA480A0004 +8B6B:208010F80108FBFE0144799201FE7900017C7900497C4900497C7A444A7C0444 +8B6C:3E1022FE3E4420287EFEA2103EFC22100100FFFE00003FF800003FF820083FF8 +8B6D:410026DC0454FC5406D47454046677C0001C701457D45114510871C857140222 +8B6E:202010501088FD7402027DFC01247DAC01247DFC440044F844887CF8448800F8 +8B6F:200011FC0154FDFC002079FC00207BFE0088785049FC48204BFE782048200020 +8B70:2104108803FEFC2001FC782003FE7854019278904BFE489048D47B8A489601A2 +8B71:08207FFC01003FF80100FFFE11107D7C01007D7C01007D7C01007D7C45447D7C +8B72:4080204007FEF9100208751403F8711003F8711057FC512853107D4851860100 +8B73:200011FC0020FBFE022279AC002079AC00007BFE482049FC495479544954010C +8B74:2010107C0254FD7C011078FE00007B7C0144797C4940497C4944797C4A80047E +8B75:414421440554FB64015E77E400047234014C77E4508453E4508470E457140008 +8B76:0100FFFE00003FF800003FF820083FF80810FEFE00007CFC00007CFC44847CFC +8B77:208813FE00A8FC9001FE7B2001FC792001FC792049FE49004BFC78884870038E +8B78:202013FE0020FDFC00007BFE000279FC00207BFE48004BFE48047BBE4AA4038C +8B79:202013FE0000FDFC010479FC00007BFE020279FC48404BA448D87B3448D20330 +8B7A:220012BE0302FA5401C8783E020A7BCA052879284FEE49284AA87A584C4E0080 +8B7B:3EF822883EF822883EF822883EF814502288FFFE00003FF800003FF820083FF8 +8B7C:7E40487E7E9043087EFE48AA7EFE02000100FFFE00003FF800003FF820083FF8 +8B7D:0A0033B822083BB820883AB82288FFFE11103FF840049FF200001FF010101FF0 +8B7E:208813FE0000FDE2012A79EA012A79EA0122796648004BDE4A52794A4A5200C6 +8B7F:208813DE0088FDDC00887BDE00887BFC000479FC48044BFC48407AA44A8A047A +8B80:202013FE0020FDFC00007BFE02527BFE010479FC490449FC490479FC48880104 +8B81:4020201004FEFA44022870FE009276FE029272BA52AA52BA5286750058FE0000 +8B82:210011F80208FFFE02627A9201FC790401FC790449FC488049F87A884870038E +8B83:208811DC0088FBDE00887954022279FC010479FC490449FC490479FC48880104 +8B84:83F842480248E3F80248E24803F8E0000FBEEAAAAAAAAFBEAAAAEAAAAFBE08A2 +8B85:202013FE0202FC1C03E0792400A87BFE01247A024DFC492449FC792449FC0104 +8B86:22004F9C94802FDE6108AFC8250827D80100FFFE00003FF800003FF820083FF8 +8B87:23DE125203DEFE5203DE7A42027A7A8A03127ADA4A8A4ADA4A8A7AFA4A0A0204 +8B88:400027FE0444FD98048875FE048875DC06AA748854205520553C752055200BFE +8B89:2010107C0254FD7C011078FE00447B7C0144797C4944497C492879444A80047E +8B8A:210447C88812F3BC20084B92F83E0380AAAAABAA08001FF8282007C01830E00E +8B8B:08407F7C1440FF7C22043E7C22403E7C2342FFFE00003FF800003FF820083FF8 +8B8C:4110211007FCF91001F0720802EA76AC02A872AA56EA5A06500072A452520452 +8B8D:200013FE0020FBAE02AA7AAA03AE782003FE78204BAE4AAA4AAA7BAE482003FE +8B8E:3218291440207BBED06853A8783E53A850287BBE52A852A852A87BBE42A04020 +8B8F:22004F9C94802FDE6208AFC82A482AD80100FFFE00003FF800003FF820083FF8 +8B90:48907EFCC9907EFC48907EFC48907EFC0100FFFE00003FF800003FF820083FF8 +8B91:804040A00110E2080DF6E0000EEEEAAA0EEEE000AFFEA922AFFEE922A92A0804 +8B92:21F0121007FCFA0403FC7A2403B87A2201FE7A104FFC4A444BFC78D0494A063E +8B93:202013FE0000FDDC015479DC00887BFE00887BFE48884BFE489479884AA400C2 +8B94:400E2770052AFD14053E7608057E7500057E7502553E5602547E741454AA04BA +8B95:23DE125203DEFE5203DE7A2202FA7A2202FA7AAA4AFA4AAA4AFA7A724AAA0226 +8B96:2148114C02AAFC0803FE79480368794A036A794A4B6C494C496A7B8A48160022 +8B97:222213FE0090F9FE03107DFE011079FE011079FE49004BFE4A8A7B764A520276 +8B98:43FC210801F8F90801F8710E07F8700807FE7294539C5294539C72D657BC0084 +8B99:208813FE0088FBDE02527BDE00A0789001FE79204BFC4D2049FC792049FE0100 +8B9A:452827BE0948F7BE031875AA094673FC020473FC520453FC520473FC51080204 +8B9B:410827FE0108FB90013C77D402B4755C0396712253FC500057FE7080510403FE +8B9C:4248215007FCF40401F0711007FC755404E477FC504057FC50407FFE52A40452 +8B9D:23DE125203DEFC0003FE7A0002C87A4E03EA7AB24AEA4AAA4AEA7AB445E4082A +8B9E:810841EC010AEFEA0928EBC8093EEFE80948EBE8AA28AB68AAA8EBF4AAB412A2 +8B9F:81084FE40100E7CE0000EFEE0AA0EFEE0440E7CEA44AA7CAA44AE7CEA28A0440 +8BA0:000020001000100000000000F000100010001000100010001400180010000000 +8BA1:004020401040104000400040F7FE104010401040104010401440184010400040 +8BA2:0000200013FE102000200020F020102010201020102010201420182010A00040 +8BA3:0080208010801080008000A0F090108810841084108010801480188010800080 +8BA4:004020401040104000400040F040104010A010A010A015101910120804040802 +8BA5:000021F01110111001100110F1101110111011101110151219121212020E0400 +8BA6:0000200013FC104000400040F040104017FE1040104010401440184010400040 +8BA7:0000200013FE102000200020F020102010201020102014201820102007FE0000 +8BA8:001020101010101003FE0010F010101011101090109010101410181010500020 +8BA9:004020401040104000400040F07C10401040104010401440184010400FFE0000 +8BAA:002020201020102001240124F12411241124112411241124152419FC10040000 +8BAB:00802080110011FE02000400F1F8100810101060108015001A02120201FE0000 +8BAC:0010207813C0104000400040F040107E17C010401040144218421042003E0000 +8BAD:010421241124112401240124F124112411241124112415241924122402040404 +8BAE:008020481248120802080110F110111010A010A01040144018A0111002080C06 +8BAF:000027F01110111001100110F11017D01110111011101112150A190A11060102 +8BB0:0000200011F8100800080008F00811F811081100110011001502190210FE0000 +8BB1:0000200013FC104400440244F244124414841084108415041904120404280810 +8BB2:011021101110111007FC0110F11011101FFE1110111015101910121002100410 +8BB3:00402040104017FE00400040F3FC1040104017FE10421042144A184410400040 +8BB4:000023FC1200120802880250F2501220122012501250128817081A0013FE0000 +8BB5:000023FE12001200020003FCF20412041204120413FC120016001A0013FE0000 +8BB6:000023FC1010111001100110F21013FE10301050109015101A10141000500020 +8BB7:002020201020102003FE0222F22212221252124A128A130216021A02120A0204 +8BB8:00802080108011FC01200220F020102013FE1020102010201420182010200020 +8BB9:00A020A010A0112401240328F5301120116011A01120112215221922111E0100 +8BBA:0040204010A010A001100208F406111011201140118011001504190410FC0000 +8BBB:000020081108108802520252F222122212521292130A160A1A0213FE00020000 +8BBC:002021201120111001100248F248144418821080111015081A0817FC02040000 +8BBD:000043F822082208032802A8E2A82248224822A822A82B2A340A240A08061002 +8BBE:000021F0111011100110020EF40013F811081110109014A0184010A003180C06 +8BBF:00802040104017FE01000100F10011F811081108110815081A08120804500820 +8BC0:00402040104013FC00440044F044104417FE104010A014A01910120804040802 +8BC1:0000200013FE102000200020F1201120113C1120112015201920112007FE0000 +8BC2:002020201020102003FE0020F020102011FC1104110411041504190411FC0104 +8BC3:0000200017FE1008000803C8F24812481248124813C812481408180810280010 +8BC4:000023F81040104002480148F150104017FE1040104014401840104000400040 +8BC5:000021F811081108010801F8F1081108110811F8110815081908110807FE0000 +8BC6:0000200011FC110401040104F104110411FC1104100014901888110402020402 +8BC7:000023FC12041204020402F4F29412941294129412F416941A04120402140208 +8BC8:01002100110011FE02800280F48010F810801080108014FC1880108000800080 +8BC9:0008201C11E0110001000100F1FE111011101130111815141912121002100410 +8BCA:0040404020A0211002080426E040208023102020204028883310202000C00700 +8BCB:0008203C13E0122002200220F22013FE1220121012101212160A1A8A13260212 +8BCC:0080208010F8110802100420F3FC10041004100411FC10041404180413FC0004 +8BCD:000023FC1004100407F40004F00413E412241224122413E41404180410140008 +8BCE:002020201124112401240124F1FC102010201124112411241524192411FC0004 +8BCF:000023FC1084108400840104F1141208140011FC110411041504190411FC0104 +8BD0:00202020102013FE02220224F22013FC12841288124816501A20145004880906 +8BD1:000023FC1104108800500020F0D81326102011FC102014201BFE102000200020 +8BD2:0020202010401088010403FEF002100011FC1104110411041504190411FC0104 +8BD3:000023FE1200120003FC0220F22012F812201220122013FC16001A0013FE0000 +8BD4:0040404027FC2040004003F8E040204027FE20E0215029503248244408420040 +8BD5:002820241024102007FE0020F02017E0112011101110151019CA170A02060002 +8BD6:0020202011FC102000200020F3FE10001020102011FC10201420182013FE0000 +8BD7:00402040104013FC00400040F7FE1010101017FE101012101510191010500020 +8BD8:00202020102017FE00200020F3FE1000100011FC110411041504190411FC0104 +8BD9:00802080108017FE01000120F22012A414A415281A5010501488190812040402 +8BDA:00284024202027FE04200420E42427A424A424A824A82C903692292A08461082 +8BDB:00202120112011FC01200220F02013FE107010A810A815241924122200200020 +8BDC:00202120112011FC01200220F02013FE1090109010901090151219121212040E +8BDD:0008203C11E01020002003FEF0201020102011FC110411041504190411FC0104 +8BDE:0008401C2F70211002100450EF5C21502950295025502A7C33002480087E1000 +8BDF:0008403C23C02200020003FEE2002200220022FC22842A843484248408FC0084 +8BE0:0040204010A0111002080406F3F810401040104013F810401440184017FE0000 +8BE1:0100410023F8220804100BFEE20022F82288228822A822902A823482247E0800 +8BE2:0200420023FC240404040BE4E224222423E42224222423E42A24300420140008 +8BE3:01002104113811C001020102F0FE100011FC1104110415FC1904110401FC0104 +8BE4:0080208011F01210002003FCF044104417FE1044104413FC1444184011400080 +8BE5:008040402FFE208001100110E22427E42048208821102A203450208803040C04 +8BE6:020821081110100007FC0040F04013F81040104017FE10401440184010400040 +8BE7:00402020102013FE02020404F03813C010401040107E17C0144018421042003E +8BE8:000023FE12021444004003FCF08010A0112011FC102014201BFE102000200020 +8BE9:000047BC2084208404A40294E2942084218C229424A420842884308422940108 +8BEA:0040404027FC204003F80080E7FE2090211021FE22102A903450281000500020 +8BEB:0014401220102FFE00100290E29222922FD2229422942A88328A249A04260842 +8BEC:000047FC2040204002480248E248255424D2286220402840304020400FFE0000 +8BED:000047FC2040204003F80088E08827FE2000200023F822082A08320823F80208 +8BEE:0020212410A410A8002001FCF104110411FC1104110411FC1504190411140108 +8BEF:000043F82208220803F80000E7FC204020402FFE204020A028A0311022080406 +8BF0:00202120112011FE02200420F02013FE1000100011FC11041504190411FC0104 +8BF1:001C47E0204020400FFE0150E2482C4623F021102120217C2A04320424280810 +8BF2:0100210011FC120005F80108F148112817FE11081248122817FC180810500020 +8BF3:0000444022BE210802880488E08820BE218822882488208828883088253E0200 +8BF4:020821081110102003F80208F208120813F810A010A0152019221222041E0800 +8BF5:000047F8201021A0004007FCE444244427FC2444244427FC2C44344424540408 +8BF6:004040802110220807FC0104E10023F8244020402FFE204028A0311022080C06 +8BF7:0040404027FC204003F80040E7FE200023F8220823F822082BF8320822280210 +8BF8:0040404423F42048005007FEE040208021F82308250821F82908310821F80108 +8BF9:00004FC024BC24A404A407A4E4A424A827A824A8249025D02EA830A820C40082 +8BFA:0108410827FE210801480040E7FE2080210023FC250429042904310421FC0104 +8BFB:0020202011FC1020002003FEF002109410501110109013FE1428184410820302 +8BFC:00004FFE2080218402440468EAB0213022A8246828A421242A22342020A00040 +8BFD:009020901090179E00900090F090139C109010901090179E1890109000900090 +8BFE:000043F82248224803F80248E24823F8204027FC20E029503248244600400040 +8BFF:003843C02040204007FC0150E2482486208027FC21102A1031A0206000900308 +8C00:00404140265C24440444075CE444244427FC244420A020A02910320824040802 +8C01:01404120212023FE02200620EBFC2220222023FC222022202A2033FE22000200 +8C02:0040404020A0211002880446E80023F020102020204029243522250A090800F8 +8C03:000047FC2444244405F40444E44427FC240425F425142D1435F4240404140808 +8C04:0080408020F8210802100400E040239C22042204239C22042A04320423FC0204 +8C05:0040202013FE1000000001FCF1041104110411FC102014A81924122200A00040 +8C06:0080204017FC100003F80208F3F8100013F81010102017FC1840104001400080 +8C07:0080404027FC200001100110E2A824442000204027FE20402840304020400040 +8C08:004022441244144800A00110F6081044104012481248145018A0111002080C06 +8C09:0040202013FE1222002001FCF124112411FC1124112415FC1924102000200020 +8C0A:0040202013FE1202040401F8F108110811F81108110815F81908110807FE0000 +8C0B:020842082FFE2208020803F8E208220823F820402FFE20E0295032482C460040 +8C0C:0110411027FC211001F00110E1F02110211027FE220022902B08320023FC0000 +8C0D:00904290229027FE02900290E2F0220023FC204027FE20E0295032482C460040 +8C0E:0108410827FE2148002007FEE200220023FC2000224822482A48344A244A0846 +8C0F:004040402FFE204007FC0444E55424E4244427FC20E029503248244600400040 +8C10:0220222413A8123002A20322F25E108013FC1204120413FC16041A0413FC0204 +8C11:0040207C104013FE02420278F3C01244123C120012FC16801BFE1480048008FC +8C12:000043F8220823F8020803F8E10023FC2444224422A422042BF4300420280010 +8C13:000047FC244427FC044407FCE00023F8220823F8220823F82A08320822280210 +8C14:000047BC24A424A407BC0000E3F820002FFE2100220023F82808300820500020 +8C15:004020A01110120805F60000F3C41254125413D41254125417D41A44125402C8 +8C16:003C47C022442128000003FCE080208027FE210021F82A883250242008D80306 +8C17:010021F01210142003FC0244F24413FC10A01122161E10C01430198010600010 +8C18:00402240117C108401080620F22012501288110611F811081508190811F80108 +8C19:0080404027FC200002080110EFFE200023F82208220823F82A08320823F80208 +8C1A:0040202013FC100001080090F3FE1210122012C8121016241AC8141004600980 +8C1B:0040202011FC100000880050F3FE1222142411FC112411241534192810200020 +8C1C:0010409224522254021000FEE010263822542292231022102A10350028FE0000 +8C1D:0080404027FC2404040407FCE400240027FC26A42AA42BFC3AA42AA412A4020C +8C1E:000023FE10221120013C0120F2FE140011FC110411FC150419FC110401140108 +8C1F:0110411027FC2110000003F8E20823F8220823F8204027FC28A0311022080C06 +8C20:004042482150204007FE0402E80423F82208220823F820A0292031242224041C +8C21:000047FC244427FC044407FCE1102208248421F8220825083090206001980E06 +8C22:010842082788248807BE0488E78824C824A82FA821882A883488288802A80110 +8C23:0008203C13C0100402440128F1FC1220102013FE102011241524192411FC0004 +8C24:0040202013FC1108009003FEF2021444102013FC108010F81488190811280210 +8C25:020841082110200007FC0000E1102208240423F822A822A82AA832A82FFE0000 +8C26:02084110200027FE00A007FCE0A42FFE20A427FC20A029B032A82CA600A000A0 +8C27:00404028209022A402C2048AE1882678200023FC229422942A94329427FE0000 +8C28:011041102FFE211001F00040E7FC244427FC20402FFE20402FFC30402FFE0000 +8C29:03F8420823F8220803F80000E7FC24A424A427FC200023F8291030E023180C06 +8C2A:0080404027FC211000A007FCE44425F4244425F4251425142DF4340424140408 +8C2B:0108209017FE100003C40254F3D4125413D4124412CC14001BFC108401140608 +8C2C:000047BC208424A4029404A4E0502188262620C0231020642B88303020C00700 +8C2D:000023FE105013FE025203FEF00011FC110411FC110415FC182013FE00200020 +8C2E:000047BC2108252807BC0318E5AA2946200023F8220822082BF83208220803F8 +8C2F:0140412023FE222006200BFCE220222023FC222022202BFE3200252404920892 +8C30:0200417C2504244405F40444E5F42554257425D4255425F42CE435542444044C +8C31:0208411027FC20A004A402A8EFFE200023F82208220823F82A08320823F80208 +8C32:000047F82090206007FC00A4E12826A0204027FC24A425142EEC34A424E4040C +8C33:0108410827CC210A010807DEE44826C8254827C8255427D42D543554245404E2 +8C34:001044FE229222FE001001FEE0002EFE228222FE228022FE2A8232FE250008FE +8C35:020043F8241027FE0D481624E7FE240025FC240025FC2C0035FC290409FC1104 +8C36:0448444C2AAA20080FFE0288EEE8228A2EEA228C2EEC2A8832EA2F1A04260042 +8C37:08200810110821044280044008203018C0061FF010101010101010101FF01010 +8C38:08881C84F102122210201050FC881104120211FC110411042104210441FC8104 +8C39:004048404440944013FE2840448080907890492049204A484A447C8449FE0082 +8C3A:000024FC22084A4888481448228841FEBC1824282428244824883D0824280010 +8C3B:000025F822484A48884815F822484148BC4825F824482448248A3C8A250A0206 +8C3C:0048244822484A4889FE144822484148BC4825FE2400244824443C8424820102 +8C3D:002048204450948811442A2244F880087810482049FC49044904790449FC0104 +8C3E:0040482045FE95021204285044888104780049FC48204820482078204BFE0000 +8C3F:0E00F05022489284452420204450F888110624F8FE881088FE88288844F88288 +8C40:001E4BE0452294941040288845F0802078C449FE482248204BFE785048880306 +8C41:20001050FE48828411247C2010507C881104FEFA10887C88448844887CF84488 +8C42:000024EE22224AAA886614AA22104128BC442592242024C824323CC4241800E0 +8C43:000853884888891027DE32944AA487947A944B944A944AC84B887E9448A400C2 +8C44:00204BFE442095FC10002BFE465283FE790449FC490449FC490479FC48880104 +8C45:011050904BDE8810225E31824BDE84107BDE4A504BDE4A504BDE7A504A5202CE +8C46:00007FFC000000001FF010101010101010101FF00000101008200440FFFE0000 +8C47:0000FE0001FC00207C204420442044207C200020442028202E20F02043FE0000 +8C48:0100210821083FF800007FFC00001FF0101010101FF0000008200440FFFE0000 +8C49:0020FE20002001FE7C204420442045FC7C840088444828502E20F05041880606 +8C4A:04403FF824483FF824483FF800007FFC00001FF010101FF008200440FFFE0000 +8C4B:108010803EFC62449448483030102FE8C0061FF010101FF008200440FFFE0000 +8C4C:0040FC2003FE02027D04490049DE4A527A5203528C9A489451101912E212040E +8C4D:0020FE4000FE00927C9244FE449244A27CFE0048448829FE2E08F00840080008 +8C4E:7EFC48447E4442287E1048287E4400827FFC00001FF010101FF008200440FFFE +8C4F:0088FE50000001FE7C5045FC445447FE7C5401FC445028D82F54F25240500050 +8C50:08201D7049245D7449245D7449247FFC00007FFC00001FF010101FF004407FFC +8C51:2844FE28AA00FEFCAA14FE1400FCFE9000907CFE44327C32445A28541E90E110 +8C52:2A227F14AABEFF8AAA8AFFBEAAA8FFA8003EFF9A001A7F2A412E7F482208FF88 +8C53:2A107F10AA90FFBCAA90FFA8AAA8FFA40054FF82007C7F5441547F542254FFFE +8C54:2A087F08AA9CFF88AA88FFBEAA88FF900014FFBE00007F3E412A7F2A222AFFFE +8C55:00007FFC020006000908119062A004C008C011A06290048808863080C2800100 +8C56:00007FFC020006000908119062A014C008C015A06290048808863080C2800100 +8C57:0000FDFE2820284028A22B34285828942B34285228922B102850482247FE8000 +8C58:0020FC20102023FE6020952439245124992435FC5424902010221022501E2000 +8C59:020001003FF808200440FFFE02000D08719002A00CC071A006981886E2800100 +8C5A:00007BFE4840488049447A24486848B049307A28486848A449224A2048A09840 +8C5B:0000FCF810882088608895063A0051FC98843484544890501020105050882306 +8C5C:0000FDFE1048204860489448384853FE98483448544890481088108851082208 +8C5D:0000FDFC1124212461249524392451FC99043500550091001102110250FE2000 +8C5E:0040FE40088010FC31044A049CF428944C949A942AF448948804080428281010 +8C5F:0040FC2011FC2104610495FC39005100997C35085510912011421282527E2400 +8C60:0000FEF80888108830884AF89C8828884C889AF82A884888888808882BFE1000 +8C61:08001FE020207FF8A10822083FF80600191062A00CC071A006901888E2860100 +8C62:111009207FFC0400FFFE10102FC8C606191062A00CC071B006881884E2800100 +8C63:0000FDDC1088208860889488388853DE98883488548890881088110851082208 +8C64:0000FDF81108210861F89508390851F899443548553091201110114851862100 +8C65:0020FE10081011FE30204A249C4428F84C129A222A4449888810082828441182 +8C66:010001F801003FFE210221F02F0420FC20002FF823002C9023605CD843469CC0 +8C67:0028FC2413FE2020602095FC3924512499FC3524552491FC112411245124210C +8C68:00C2FC34101820646182942039FE5050989035FE56929092109A109450102010 +8C69:0000FDFE1020204060A295123834505898983514543490521090111050502020 +8C6A:01007FFC00001FF010101FF000007FFE40029FF40600192006C039B0068C3980 +8C6B:0080F8F8090853FE25121122FDFE244028A223542098233420542092A3504020 +8C6C:0020FE2008FA102430284BFE9C2028404CFC9B442A44487C88440844287C1044 +8C6D:0000FDDC11442144614495DC3900510099DC3514551491D41108110851142122 +8C6E:0020FDFC1020208863FE9488380051FC99043524552491241124105050882304 +8C6F:000EFEF00822109230444A209C4428F84C109A242AFE481088FE082828441082 +8C70:1000FE7810487C480048FE8682007CFC0044FE44202854282810DC282A44D982 +8C71:0000FCF81088208860F89488388850F8980035FC555491541154115453FE2000 +8C72:0000FDFE11102120617C9544397C5144997C3510551091541152129252502420 +8C73:010041047DF4492451446BAC4D3459646DB44B2C596469A4596441047FFC0004 +8C74:0020FE1008FE104430284AFE9C8228924CFE9A922ABA48AA88AA08BA28821086 +8C75:0124F924222444A4A154154A3B92550899083528512E912811281158514E2180 +8C76:0020FDFC1020208863FE948839FC510499FC350455FC910411FC108851042202 +8C77:0020FBFE202041FCA00017FE3A0251FC980035FC510491FC1104108853FE2000 +8C78:00E007007A0C113008C00780784000A003300C507090011006101810E0A00040 +8C79:0C403040C28014FC49043204C80415042484CC4414442404C404040428281010 +8C7A:0C103010C210141049FE3010C83014302450CC5014902510C410041028501020 +8C7B:0C0030FCC220142048203020C82015FE2420CC2014202420C420042028201020 +8C7C:0C103110C310151249123114C9D815102510CD1015102512C5520592290E1000 +8C7D:0C203020C22015FE49223122C92215222552CD4A158A2502C5020502290A1104 +8C7E:0C0031FEC210141048203020C86814A42522CE2214202420C42004002BFE1000 +8C7F:0C803080C28015FC49043204C9E415242524CD24152425E4C524040428281010 +8C80:0C203020C324152449243124C9FC14202420CD2415242524C524052429FC1004 +8C81:10402020D4200BFE52022404D00018902890C89018882908C908090452042402 +8C82:0C0031FCC244144448443044C89414882500CCFC14842484C484048428FC1084 +8C83:0C203020C24015FC49043104C904150425FCCD0415042504C504050429FC1104 +8C84:0C203020C3FC14244BFE3024C9FC14202420CDFC14202420C7FE042028201020 +8C85:10902090D490091051FE2310D51019382938C95419542992C910091051102110 +8C86:0C0031FEC200140048FC3084C88414FC2484CC8414FC2484C400040029FE1000 +8C87:0C0031F8C308150849F83108C90815F82544CD4815302520C510054829861100 +8C88:0C103020C2FC148448A43094C89415FE2484CCA414942494C484050429141208 +8C89:10802080D4F80908531024A0D04018A02918CA061DF82908C908090851F82108 +8C8A:0C0030FEC2201420484030FCC88414842484CCFC14842484C484048428FC1084 +8C8B:0C0031FCC30415FC490431FCC800140025FCCC20142027FEC420042028201020 +8C8C:0C203040C3FC1504490431FCC904150425FCCC5014502450C4920492290E1200 +8C8D:0C0031FCC324152449FC3124C92415FC2420CC2015FC2420C42004202BFE1000 +8C8E:10002040D79C0A045204239CD2041A042BFCC89018902890C89009125212240E +8C8F:10402080D5FC0924512421FCD124194429FCC89019102BFEC810081050102010 +8C90:104020A0D5100A0855F62000D3C41A542A54CBD41A542A54CBD40A44525422C8 +8C91:100023DED6420A42524223DED2001A3E2BD2CA121A142BD4CA080A1452242242 +8C92:0C203124C324152449FC3000CBFE14202440CDFC15542554C55405542954110C +8C93:0C883088C3FE148848883000C9FC15242524CD2415FC2524C524052429FC1104 +8C94:0C203040C3FC150449543124C954150425FCCC00151225D4C51805522992110E +8C95:101E23E0D522089450402088D1F0182028C4C9FE18222820CBFE085050882306 +8C96:11042084D488080053FE2000D08819042A02C9FC19542954C954095457FE2000 +8C97:102021FCD5240BFE512421FCD02019FC2924C9FC18402BFEC88809D05070238C +8C98:0C883088C3FE1488480031FCC90415FC2504CDFC142025FEC450048829041202 +8C99:100023FED6000A7C52442244D27C1A002AEECAAA1AAA2AAACAEE0A0053FE2000 +8C9A:100023DED6520A5253DE2000D1FC192429FCC92419FC2820CBFE082050202020 +8C9B:108823FED4880BDE525223DED0A0189029FEC9201BFC2D20C9FC092051FE2100 +8C9C:13DE2252D7DE0A5253DE20A0D1FE1B202DFCC92019FE2800C9FC08885070278E +8C9D:00003FF8200820083FF8200820083FF8200820083FF800000820101020084004 +8C9E:010001FC010001003FF8200820083FF820083FF8200820083FF8082010102008 +8C9F:0800101020087FFC200400003FF820083FF820083FF820083FF8082010102008 +8CA0:080008001FE020204040BFF820083FF820083FF820083FF80000046018186004 +8CA1:00107C10441044107DFE441044307C30445044507C9001102810241044508020 +8CA2:00003FF801000100FFFE00003FF820083FF820083FF820083FF8082010102008 +8CA3:04200210013EFFC00022001A3FF620103FF020103FF020103FF0084010202010 +8CA4:0020782048204920792C493449647BA449244934792801225122490288FE0000 +8CA5:00407C20440045FC7C00440044F07C90449044907C90009228922512450E8200 +8CA6:00007C0045FC44007C00440047FE7C90449044907C900090289225124512820E +8CA7:044008203018CFE6042018A060401FF010101FF010101FF010101FF008201010 +8CA8:0880109830E057849084107C00001FF010101FF010101FF010101FF008201010 +8CA9:0008781C49E04900790049FC49447944494449287928011051104A288A440482 +8CAA:010002800C603118CFE6004000801FF010101FF010101FF010101FF008201010 +8CAB:00001FF01110FFFE11101FF000001FF010101FF010101FF010101FF008201010 +8CAC:01003FF801001FF00100FFFE00001FF010101FF010101FF010101FF008201010 +8CAD:0008007C3F80208020803FFE208027F8240827F8240827F8240847F842108408 +8CAE:00203F2800240020FFFE00207FA040A07FA040907F9040907F8A120A21064082 +8CAF:00407C20442045FE7D02460444007C0045FE44207C2000202820242044A08040 +8CB0:12207FFC122013E010001FF800001FF010101FF010101FF010101FF008201010 +8CB1:00107810481049FE79124914491079FC494449447928012851104A288A440482 +8CB2:088028882EF028842E84F07C00001FF010101FF010101FF010101FF008201010 +8CB3:0024FFFE00203FA000207FA000203FA020A03F9020903F90208A3F8A11062082 +8CB4:01001FF011101FF00100FFFE00001FF010101FF010101FF010101FF008201010 +8CB5:040008201FF00210FFFE08203018DFF610101FF010101FF010101FF008201010 +8CB6:00047C1E45E044007C20441045FE7C04440844107C20004028802540463E8000 +8CB7:00007FFC444444447FFC00003FF820083FF820083FF820083FF8082010102008 +8CB8:08901088307ED7C01022101A00061FF010101FF010101FF010101FF008201010 +8CB9:00107C10449044907CFE449045107C10441044FE7C1000102810241045FE8000 +8CBA:00007DFC450445047D04450445FC7C50445044507C50005028922492450E8200 +8CBB:04407FF804483FF824403FFC08441FF4301C5FF010101FF010101FF008201010 +8CBC:00207C20442044207C3E442044207C2045FC45047D0401042904250445FC8104 +8CBD:00207C20442044407C48448445FE7C82440044FC7C8400842884248444FC8084 +8CBE:00047C1E45F045107D10451045107DFE451045107D100108290A254A45A68112 +8CBF:060078FC4044484444445A9461081FF010101FF010101FF010101FF008201010 +8CC0:100010007E7C124422442A7C44009FF010101FF010101FF010101FF008201010 +8CC1:01003FF801000820FFFE082000001FF010101FF010101FF010101FF008201010 +8CC2:0080788048F849087B104CA0484078A049184A067DF801085108490889F80108 +8CC3:081813E0304057FC904013F800001FF010101FF010101FF010101FF008201010 +8CC4:00207C2045FE44407C4044FC44847D8446FC44847C8400FC2884248444948088 +8CC5:00207C10441045FE7C20442444447CF8441244227C4401882810242844448182 +8CC6:00827C42444444007CFE444444447C44444445FE7C4400442884248445048204 +8CC7:410021FC0A441048E0A0211826061FF010101FF010101FF010101FF008201010 +8CC8:00007FFC04403FF824483FF800001FF010101FF010101FF010101FF008201010 +8CC9:00207C20444044807DFC455445547D54455445547D5401542954255447FE8000 +8CCA:00147C12441045FE7C10449044927C9247F244947C940088288A251A45268242 +8CCB:00407C20442045FE7C00448845047E02448844887C5000502820245044888306 +8CCC:0100FFFE08401F90062038D007087FF410101FF010101FF010101FF008201010 +8CCD:00207810481049FE7900491049107910497C49107910011051104A108AFE0400 +8CCE:00287C24443E45E07C20443C45E07C20443E45E07C2200242818246A45868002 +8CCF:00007CFC448444847CFC448444847CFC448444847CFC00002848244444828102 +8CD0:00407840488849047BFE4802488879444A4248F8798802505020485089880606 +8CD1:000079FE49004900797C4900490079FE495049527954014851484A448A520460 +8CD2:00207C20445044887D0446FA44007C0047FE44207D2801242A22242244A08040 +8CD3:01007FFE4002BFFC0910316003803FF8E0083FF820083FF820083FF808201010 +8CD4:01007FFE4002BFFC21083FF820002FF828082FF828082FF828084FF844108808 +8CD5:00287C24442444207DFE442045207CB244B444687CA801242A22242044A08040 +8CD6:00207C20445044887D0446FA44207C2047FE44207D2801242A22242244A08040 +8CD7:0020782049FC4924792449FC482078204BFE4A227A2203FE5222482088200020 +8CD8:00207810481049FE7900491049107910497C49107914011251124A108AFE0400 +8CD9:00007CFE449244927CBA449244FE7C8244BA44AA7CAA00BA28822502450A8204 +8CDA:01007FFC092015502388054009203FF8D0161FF010101FF010101FF008201010 +8CDB:082008207EFC0820FEFE145022885FF690101FF010101FF010101FF008201010 +8CDC:00007CFC448444847CFC448444847CFC444044FE7D2A024A28922522444A8084 +8CDD:00007BFE4A024A5278884904482078204BFE4820787000A851244E2288200020 +8CDE:111009207FFE40029FF410103FF820083FF820083FF820083FF8082010102008 +8CDF:00507C50445045FC7D54455445547DFC455445547D5403FE2800248845048202 +8CE0:00407C2045FC44007D08449044007DFE440044007DFC01042904250445FC8104 +8CE1:00803FFE20802FF820883FFE21082FF824102FF8341627F0441047F082200410 +8CE2:00007EFC48447E4442287E1048287FF610101FF010101FF010101FF008201010 +8CE3:0100FFFE01003FF800007FFC44447FFC10101FF010101FF010101FF008201010 +8CE4:00487C44445E45E07C284412446A7D964448445E7DE0002428282412446A8186 +8CE5:00407C2045FE44007C88448845547E22440044207DFE00202820242044208020 +8CE6:00087C0C44EA440A7C0845FE44487C48454845687D480148294A256A47868102 +8CE7:00207CA244A245247C50448847047C22442044A47CA401282850248845048202 +8CE8:01007FFC40041FF000007FFC1110250842041FF010101FF010101FF008201010 +8CE9:004078204BFE4A02780049FC480078004BFE48207928012452224C2288A00040 +8CEA:060C387020403F7E2448244844889FF010101FF010101FF010101FF008201010 +8CEB:01007FFC0920092015507FFE40029FF410101FF010101FF010101FF008201010 +8CEC:00007CFC448044F87C8044F844807FFE454045247D2801102908254445828100 +8CED:00207C2245FA44247C2847FE44207C4044FC45847E8400FC2884248444FC8084 +8CEE:01003FF80108FFFE01083FF801007FFC24885FF410101FF010101FF008201010 +8CEF:010079FE4A024DF2791249F2491279FA48044BF87810002057FE482088A00040 +8CF0:00207C2047FE44207DFC444047FE7C88450446FA7C88008828F82488448880F8 +8CF1:00007BFE4A2248207BFE482049FC792449FC492479FC002053FE482088200020 +8CF2:13F8120823F86040A7FC215022481FF010101FF010101FF010101FF008201010 +8CF3:012879244BA4492079204FFE482078244BA44AA87AA802905392482A88460082 +8CF4:10201020FE7810881110FEFC928492FCFE8410FC388454FC9200104810841102 +8CF5:00007DFE4502457A7D02457A45027C0044FC44847CFC008428FC248444FC8084 +8CF6:00207C20445044487CA445FE46847CFC448444FC7C8000FC29442544467C8044 +8CF7:01007FFC01003D7825483D7801007FFE50129FF410101FF010101FF008201010 +8CF8:00203D2424A825FC24403FFE248825FC268A3CF8248824F8248844F854508888 +8CF9:01047884488848007BFE4800488879044A0249FC79540154515449548FFE0000 +8CFA:011078A048004BFC78A04BF848A87BFE48A84BF878A001B052A84CA688A000A0 +8CFB:00287C2447FE44207DFC452445FC7D2445FC45247C0803FE2888244844488018 +8CFC:008878884BFE488879FC48884BFE782049FC492479FC012453FE490489140108 +8CFD:01007FFE44429FF404403FF80440FFFE08201FF02828CFE608200FE004400820 +8CFE:00207DFE482048FC48205DFE540054FC54845CFC488448FC48847EFC00480084 +8CFF:00007BDE48424A52794A4A52482878C44B1248607988003251C4481888600380 +8D00:7F7848485F4C64805F784A4851307F4C00001FF010101FF010101FF008201010 +8D01:7E2042207E20423E7E4442447E4424A442287E2842107E1042287E4824844302 +8D02:0040788849FC49087A524BFE485079884E2648C07B1000645388483088C00700 +8D03:0020782049FC492479FC48204BFE7A224BFE48207840002452A24A8A8C780000 +8D04:08207E2008F8FF2814287F6A082AFF5608821FF010101FF010101FF008201010 +8D05:08207F20087E7E4408A4FF2810101E2822445FF290101FF010101FF008201010 +8D06:002878244BFE4850788849044A027998495449107BBE011052A84AA88C440882 +8D07:41D42010FBFE109052C8228A57E680021FF010101FF010101FF010101FF00820 +8D08:0104788848004BFE7A224AAA4A727A224BFE480079FC010451FC490489FC0104 +8D09:00007BFE48504BFE7A524BFE480079FC490449FC790401FC50204BFE88200020 +8D0A:28503E7C4890FEFE1528264A44861FF010101FF010101FF010101FF008201010 +8D0B:3FFE225024882DFE369024FC249024FE200027FC240427FC440447FC82080404 +8D0C:00507A52495448507BFE488848507BFE482049FC782003FE5050488889040602 +8D0D:008078F849084BFE7944499249FE7900497C4900797C0100517C4A448A7C0444 +8D0E:008878884BFE488879FC492449FC792449FC48207BFE0222522A4AFA8A0A0206 +8D0F:0100FFFE20003FF800003FF820083FF8000077DC545477D4545C77D65296B462 +8D10:002079FC48244BFE782449FC48207BFE48004AA47C5201FC515449548FFE0000 +8D11:1000FEFC44202820FEFE00007CFC44847CFC44847CFC1084FEFC104810841102 +8D12:7E2051FC7D2445FC7C24514A7EF800003FF820083FF820083FF820083FF80820 +8D13:000C700A51FE550875E85548574A71EA512A5FEC754C054C55EA4A0A82160422 +8D14:3FF820083FF820083FF820083FF8082010107EFC42847EFC42847EFC24484284 +8D15:2010CEFE8A10AA7CAA00EEFEAAAAAAFEAA44AA7CEE44A87C2844487C48288844 +8D16:00207BFE482049FC78004BFE4A527BFE490449FC790401FC510449FC88880104 +8D17:3FFE224025F82D0835F8250825FE26AA240627F8240827F8440847F882100408 +8D18:012478A84BFE4A0278F8488849FC790449FC490479FC010451FC480088880104 +8D19:0E1C08107EFC4A945CB84A945CB8952A22461FF010101FF010101FF008201010 +8D1A:011078904BDE48107A5E49824BDE78104BDE4A507BDE025053DE4A508A5202CE +8D1B:1040FE7C44C82830FECE00787C2045FC7C8844F87C8810F8FE8810F810501088 +8D1C:0090709057FE5094700A51FE550877E8514A51EA7F2A05EA554C49EA82160462 +8D1D:00001FF010101010101011101110111011101110121002800440082010102008 +8D1E:0100010001FC010001003FF820082108210821082208220804C008303008C004 +8D1F:040004000FE0102020405FF010101110111011101110121002C0042018106008 +8D20:02000400082010103FF8000800001FF01010111011101110121004C018306008 +8D21:00003FF8010001007FFC000000001FF01010111011101110121004C018306008 +8D22:00107C104410541055FE54105430543054505450549011102810241044508020 +8D23:010001007FFC01003FF80100FFFE00001FF0101011101110111002600C187004 +8D24:040025F824882450242024D8270604001FF0101011101110111002600C187004 +8D25:00407C404440548054FE55085688548854885450545010202850248845048202 +8D26:00807C8444845488549054A0548055FE54A054A054901090288824A444C28080 +8D27:08800880109830E057849084107C00001FF0101011101110111002600C187004 +8D28:007C3FC0204020403FFE2040204027FC240424442444244424B4410846049802 +8D29:00047C0E44F04480548054FC54A454A454A454A854A810902910252842448082 +8D2A:01000280044009203098CFE6004000801FF0101011101110111002600C187004 +8D2B:044008203018DFE60420042008A010403FF0101011101110111002600C187004 +8D2C:00087C3C45C044005420541055FC5404540854105420104028802540423E8000 +8D2D:00807C80448054FC5504550456445444548454A4551411F42814240444288010 +8D2E:00407C204420540055FE5502560454005400540054001000280025FE44008000 +8D2F:1FF011101110FFFE111011101FF000001FF0101011101110111002600C187004 +8D30:00280024FFFE00203FA000207FA000203FA0209024902490248A0A0A11066082 +8D31:00507C484440445C55E05440545E57E054445448543010222852248A43068002 +8D32:01003FF801000820FFFE082000001FF01010111011101110121004C018306008 +8D33:12201220FFFE122013E010001FF800001FF0101011101110111002600C187004 +8D34:00207C2044205420543E54205420542055FC5504550411042904250445FC8104 +8D35:01001FF0111011101FF00100FFFE00001FF0101011101110111002600C187004 +8D36:00007DFC450445045504550455FC5450545054505450109228922512420E8400 +8D37:08901088307ED7C01022101A00061FF01010111011101110121004C018306008 +8D38:060078FC4044484444445A94610800001FF0101011101110111002600C187004 +8D39:04407FF804483FF824403FFC0844105420085FF010101110111002C00C303008 +8D3A:100010007E7C124422442A7C44009FF01010111011101110121004C018306008 +8D3B:00207C20442054405448548455FE5482540054FC548410842884248444FC8084 +8D3C:00147C12441045FE541054905492549257F2549454941088288A251A41268242 +8D3D:10801080FBF010901990F0941154520C24041FF010101110111002C00C303008 +8D3E:00007FFC04403FF8244824483FF800001FF0101011101110111002600C187004 +8D3F:00207C2045FE5440544054FC5484558456FC5484548410FC2884248444948088 +8D40:088008882E9028E028842E84F07C00001FF0101011101110111002600C187004 +8D41:083813C03040504097FC1040104013F800001FF010101110111002C00C303008 +8D42:00407C40447854885550542054505488550654F8548810882888248844F88088 +8D43:00207C10441045FE5500551055105510557C5510551011102910261042FE8400 +8D44:0100410021FC0A441448E0A02110260C1FF0101011101110111002600C187004 +8D45:00207C10441047FE54205442548455F85410542254C413082810242840C48302 +8D46:00007CFC4484548454FC54905490548854845532550812002860241844048000 +8D47:00287C244424542055FE5420552054B254B4546854A811242A22242044A08040 +8D48:00007DFE45004500557C5500550055FE55505552555411482948264442528460 +8D49:010001007FFC11100920FFFE054009203018DFF610101110111002C00C303008 +8D4A:00207C2044505488550456FA5400540057FE5420552811242A22242244A08040 +8D4B:00087C0C44EA440A540855FE544854485548556855481148294A256A43868102 +8D4C:004000407C4445FC4448545057FE544054F85588568854F82888248844F88088 +8D4D:01007FFC0920092015507FFE400280041FF0101011101110111002600C187004 +8D4E:00207C2045FC4420542057FE5402549454505510549013FE2828244440828302 +8D4F:111009203FFC20044FE808200FE000001FF0101011101110111002600C187004 +8D50:00007CFC4484548454FC5484548454FC544054FE552A124A28922522444A8084 +8D51:1FF010101110111002C00C30700800003EF822882AA82AA82AA8145022884104 +8D52:00007DFC452445245574552455FC550455745554555411742904260442148408 +8D53:00803FFE20802FF820883FFE21082FF824102FF8341624904490416082100C08 +8D54:00407C2045FC540055085490540057FE5400540055FC11042904250445FC8104 +8D55:00207CA244A245245450548857045422542054A454A411282850248841048202 +8D56:10801080FEF8110812107DFC5504552455247D24112439245450908811041202 +8D57:00007DFE4502457A5502557A5502540054FC548454FC108428FC248440FC8084 +8D58:08207F20087E7E4408A4FF2810101E28224446829FF01010111002C00C307008 +8D59:00287C2447FE542055FC552455FC552455FC5524540813FE2888244844488018 +8D5A:00887C50440055FE545055FC545457FE545455FC545010D82954265244508050 +8D5B:01007FFE44429FF404403FF80440FFFE08201FF02928C92609200AA004401820 +8D5C:00207DFE482048FC48205DFE540055FC55045D244924492449247E5000880304 +8D5D:3FFE225024FE2D9036FC249024FC249024FE200027FC2444444440B0830C1C02 +8D5E:081028503E7C48907EFE14282548468A81061FF010101110111002C00C303008 +8D5F:41D42010FBFE109052C8228A57E680021FF0101011101110111002600C187004 +8D60:00887C48445055FC552455AC5574552455FC540054F8108828F8248844F88088 +8D61:00807CF8450847FE5544559255FE5500557C5500557C1100297C2644427C8444 +8D62:0100FFFE20003FF800003FF820083FF8000077DC54547554555C75565296B462 +8D63:1040FE7844D02920FE5801867CF844207DFC44007CF81088FEA810A810501188 +8D64:0100010001003FF801000100FFFE044004402448244444428842084011402080 +8D65:0810081008107E10083E0822FF44149014105610551095282428242454448882 +8D66:0820082008207E40087E0884FF44144414445628552895102410242854448882 +8D67:080008FC08847E8408940888FF8014FC14A456A455A894A8249024A854C48882 +8D68:0810081008107EFE08920892FF92149214FE5692551095142412241E54F28800 +8D69:0820082008787E480890087CFF5414541454567C5540954024422442543E8800 +8D6A:08100810081E7E10081008FEFF82149214925692559294922428242454428882 +8D6B:0820082008207EF808200820FEFE1450145056D8555494522450249054908930 +8D6C:08200820083E7E20082008FCFF8414FC148456FC558494FC2400244854848902 +8D6D:0820082408F47E28082808FEFF101420147C56C45544957C24442444547C8844 +8D6E:100011DC11447D44114411DCFF00290029DC6D14AB1429D42908490849149922 +8D6F:1020101011FE7D10117C1114FDFE2914297C6D10AB7C294429444A444A7C9C44 +8D70:0100010001003FF801000100FFFE01000100110011F811001100290047FE8000 +8D71:010001003FF8010001000100FFFE00002010102000C003000C00130020FE4000 +8D72:0820082008207E2008FC0824FF240824282428442E442894290858004FFE8000 +8D73:0804080408447E4408440844FF44084C285428642E042804280458004FFE8000 +8D74:0420042004203F20043004287FA404240420242027A02420242054004FFE8000 +8D75:0800080408847E4408280828FE100810282828282E442884280058004FFE8000 +8D76:080008FC08207E2008200820FE2009FE282028202E202820282058204FFE8000 +8D77:0800080008F87E0808080808FEF80888288028802E842884287C58004FFE8000 +8D78:0810081008107E1008920892FE920892289228922E9228FE280258004FFE8000 +8D79:0820082008407EFE09020842FE220822280A28322EC22802281458084FFE8000 +8D7A:0820082008507E5008880944FE2208F8280828102E102820282058004FFE8000 +8D7B:0810081008107E5408520852FE900812280428082E102860298058004FFE8000 +8D7C:0420042004203F3E044204047F9004100410242827A42442248254004FFE8000 +8D7D:0820082008207EFC08240824FE2409FE282028502E482884290458004FFE8000 +8D7E:0800080C08707E400840087EFF480848284828482E882888290858004FFE8000 +8D7F:1004101E11F07D1011101110FDFE1110111051105D10514A5186710250008FFE +8D80:0810081008167EF808900890FEFE0812283228522E962910281058104FFE8000 +8D81:0820082008507E5008880924FE420890282028442E882810282058404FFE8000 +8D82:0840084008407EFE08820924FE2008A828A429222E2228A0284058004FFE8000 +8D83:082008A008A07EFC08A00920FE2009FE282028502E482884290458004FFE8000 +8D84:080008F808887E8808F80888FF8808F8288828882E8829FE280058004FFE8000 +8D85:080009FC08447E4408440894FF0808FC288428842E8428FC280058004FFE8000 +8D86:0800081C08F07E90089008FEFE900890289028AA2ECA28A6281258004FFE8000 +8D87:0820081008107EFE08040844FF440828282828282E1028FE280058004FFE8000 +8D88:0820082008207E3E08200820FF2008FC288428842E8428FC288458004FFE8000 +8D89:0810081008927E92089208FEFF100892289228922E9228FE280258004FFE8000 +8D8A:1028102410207DFC11201124FD241128112851105D94512C704450004FFE8000 +8D8B:0840084008787E88091008FCFE04080428FC28042E0429FC280058004FFE8000 +8D8C:0810081008107EFE0810087CFF00087C284428442E44287C284458004FFE8000 +8D8D:10201020107C7C8813501024FCC8131E102250E45C1850105060738050008FFE +8D8E:0810085008507EFC09100810FEFE0830283828542E942910281058004FFE8000 +8D8F:081C08E008207E2009FE0820FE2008FC288428842E8428FC288458004FFE8000 +8D90:080009DC08447E44095408CCFE4408CC295428442E44285428C858004FFE8000 +8D91:1020122011207D3E10421084FC901090131051105D2851245142708250008FFE +8D92:0810085008507E50095408D8FE5008D8295428522E922892290E5A004FFE8000 +8D93:100010F810887C8810881088FD26122011FE50205C7050A85124722250208FFE +8D94:100213F210827C8A108A11EAFD2A112A12AA504A5C4A5082510A720450008FFE +8D95:0800087C08447E7C0844087CFF00087C281028102EFE2810281058104FFE8000 +8D96:0810081008547E54085408BAFF100810287C28102E1028FE280058004FFE8000 +8D97:080008F808887E88088808F8FE2008A028BC28A02EA029602A3C58004FFE8000 +8D98:080008FE08827EFE0880088CFEF0089C28F0289E2EF02912290E5A004FFE8000 +8D99:0810089208547E1008FE0882FEFE088228FE28822E82288A288458004FFE8000 +8D9A:0820082009FE7E20082009FCFF24092429FC28702EA829242A2258204FFE8000 +8D9B:0820082008507E8809040AFAFE20082029FC28202EA828702BFE58004FFE8000 +8D9C:0880088009FE7E2208AA0872FE2209FE282228722EAA2922282A58044FFE8000 +8D9D:1020102010507C8811441222FDF81008105050205CA4528A528A747850008FFE +8D9E:0848084808FC7E48084809FEFE0008FC288428FC2E8428FC288458004FFE8000 +8D9F:1020112410A47CA811FC1104FD041174115451545D745104710C50004FFE8000 +8DA0:10201020103E7C2011FC1104FDFC110411FC51245C2053FE5020702050208FFE +8DA1:0850084808807EFE09900A90FEFC0890289028FC2E90289028FE58804FFE8000 +8DA2:11F8100810F87C0813FE1020FC24112410A850705CA85324502470A050408FFE +8DA3:100013E0115E7D4211D2114AFD4A11C4114451645DCA534A705250404FFE8000 +8DA4:0820081008FE7E82080008FEFF20084028FC29442E44287C284458004FFE8000 +8DA5:1088105013FE7C50105011FCFD54118C110451FC5D04510451FC710450008FFE +8DA6:1220113E10427C9413101128FC46100011FC51045D04510451FC710450008FFE +8DA7:080008FC08847EFC088408FCFE0009FE2810289C2E902890297E5A004FFE8000 +8DA8:108011FC12447D5411F41084FD18108011FC52445D5451F45084711850008FFE +8DA9:100011FC11247DFC112411FCFC88108811FC50885C8853FE5088710450008FFE +8DAA:1088108811FC7C88108813FEFC2011FC112451FC5D2451FC5000708851048FFE +8DAB:103C13C010407BFE10901108FAF4149213FC52045AF4529452F4720C50008FFE +8DAC:0810087C08107EFE084408EEFE4408EE280028FE2E28282A284658804FFE8000 +8DAD:10A0109011FE7D2013FC1120FDFC1120112051FE5C0052A45252745250008FFE +8DAE:0800087C08447E7C080008EEFEAA08EE281028FE2E382854289258104FFE8000 +8DAF:080009EE08AA7E6608AA0850FEFE099028FC28902EFC289028FE58804FFE8000 +8DB0:100013FE11247A2217FE1376FAAA1376122253765AAA53765222720650008FFE +8DB1:1108152817BE794817BE1318FDAA194613F852085A48524850A0711052088FFE +8DB2:152817BE19487FBE131815AAF94613FC120453FC5A0453FC520473FC51088FFE +8DB3:00001FF010101010101010101FF001000100110011F811002900250043FE8000 +8DB4:00007C204520452045207D20112011205D205110511052105E08E40808041002 +8DB5:00407C40444044FC44847D04100411045C845044504450045C04E00400280010 +8DB6:00007DFC4420442044207C20102013FE5C205020502050205C20E02000A00040 +8DB7:00407C40448044FE45007E0010FC10085C105020504050805D02E10200FE0000 +8DB8:0000FFFE040007F0081010A0604000001FF010101FF0010011F81100290047FE +8DB9:00207C20442045FC44247C24102410245DFE5020505050505C88E08801040202 +8DBA:00207C204420442045FC7C20102010205DFE5020505050505C88E08801040202 +8DBB:00207C204450445044887D44122210205C0051FC500450085C08E01000100020 +8DBC:00007DFE4448444844487C48104813FE5C485048504850485C88E08801080208 +8DBD:00407C20442047FE44807C80108010FC5C845084508450845D04E10402280410 +8DBE:00207C204420452045207D20113C11205D205120512051205D20E12007FE0000 +8DBF:00007BFC4884488848887890109C108451445D44512851285A10E22804440182 +8DC0:00007CFC4484448444847CFC108410845C8450FC508450845D04E10402140408 +8DC1:00007DFC4524452445247D24112411FC11045D005100510051025D02E0FE0000 +8DC2:00207C20442045FE44207C20102011FC5C845088504850505C20E05001880606 +8DC3:00087C3C45E0442044207C2013FE10205C205050505050505C88E08801040202 +8DC4:00207C204450445044887D04120210F85C88508850A850905C82E082007E0000 +8DC5:00087C1C45E0450045007D0011FE11105D105130511851145D12E21002100410 +8DC6:00207C204440444044887D0413FE100210005DFC5104510451045D04E1FC0104 +8DC7:00487D484548454845487FFE114811485D485148517851005D00E10001FE0000 +8DC8:00207C204450448845047E121020104011885C105020504451885C10E0600380 +8DC9:00207C204450445044887D24121210105DFC5004500850885C50E02000100010 +8DCA:00207C20442045FC44207C20102013FE5C7050A850A851245D24E22200200020 +8DCB:00507C484448444047FE7C80108010FC5D445144512851285E10E22804440182 +8DCC:00207C204520452045FC7D201220102011FE5C205050505050885C88E1040202 +8DCD:00207C204420442047FE7C201020102011FC5D045104510451045D04E1FC0104 +8DCE:00207C10441045FE45027E04108010885C9050A050C050825C82E082007E0000 +8DCF:010079004900491C4BD479541154115451545D54515451545954E25C03540480 +8DD0:00487C4844484548454A7D6C114811485D4851485148514A5D6AE38A01060000 +8DD1:00807C8045FC450446047DF4111411145D1451F4510451285D12E10200FE0000 +8DD2:00007C0045FE440844087DE81128112811285D2851E8512850085C08E0280010 +8DD3:00407C20440047FE44207C20102010205DFC5020502050205C20E02003FE0000 +8DD4:00807C80450045FC46047C0411E411245D24512451E451245C04E00400280010 +8DD5:00207C2044204420443E7C201020102011FC5D045104510451045D04E1FC0104 +8DD6:00007C0045FE442044207C40104010FC10845D845284508450845C84E0FC0084 +8DD7:0088788848884908497E7B081508114851285D28510851085908E10801280110 +8DD8:00207C20452444A444A87C2011FC10205C20502053FE50205C20E02000200020 +8DD9:00007DF84508450845087DF8110811085D0851F8510851085D08E10807FE0000 +8DDA:00007DDC4554455445547D54115413FE5D545154515451545D54E2D40224044C +8DDB:00107C10441045FE45127D14111011FC5D445144512851285D10E22802440482 +8DDC:00007DFC4504450445047DFC110011405D445148517051405D42E242023E0400 +8DDD:00007DFE4500450045007DFC110411045D04510451FC51005D00E10001FE0000 +8DDE:00087C1C45E0450045207D20112011FE5C20502050A850A45D22E22200A00040 +8DDF:00007DF84508450845F87D08110811F85D445148513051205D10E14801860100 +8DE0:00207C2047FE442045FC7C2411FC112011FE5C22502A505450505C88E1040202 +8DE1:00407C20442047FE44907C90109012945E925292549250905D10E11002500420 +8DE2:00207C20447C448445487C30102010485D90503E504251A45C18E01000600180 +8DE3:00207920492049FC49207A20102013FE50905C90509050905912E1120212040E +8DE4:00407C20442045FE44007C881104120210885C885050505050205C50E0880306 +8DE5:00007DFC44444448445E7C82108A11245C2053FE502050705CA8E12402220020 +8DE6:00207D20452045FC45207E20102013FE5C7050A850A851245D24E22200200020 +8DE7:00207C204450448845047E0211FC10205C20502051FC50205C20E02003FE0000 +8DE8:002078204BFE48504888790416FA100053FE5C40508051FC5804E00400280010 +8DE9:00207C2045FC452445247DFC112411245DFC5020502450185C32E0CA03060002 +8DEA:00407C4044FC450446087DFE1100117C5D445144515451485D42E242023E0400 +8DEB:00007DF01110119011521D12E20E44001FF010101FF0010011F81100290047FE +8DEC:00207C2045FC442044207C2013FE10005C20502051FC50205C20E02003FE0000 +8DED:0080788048FC49084A9078601198162610205DFC5020522053FE5C20E0200020 +8DEE:00007DFE4420444044887D0411FE10225C20502051FE50205C20E02003FE0000 +8DEF:00407C404478448845507C201050108811065CF85088508850885C88E0F80088 +8DF0:01047C844488440045FE7C88108810885C8853FE508850885D08E10802080408 +8DF1:00207C20442045FC44207C2013FE100810085DFE5008508850485C08E0280010 +8DF2:00207C204450448845047E0211FC100010005DFC5104510451045D04E1FC0104 +8DF3:00507C504450455244D47C581050105810D45D525050505050925C92E112020E +8DF4:00007BFE48504850485079FC115411541D545154515C518451045D04E1FC0104 +8DF5:00507C484440445C45E07C40105E11E05C445048503050225C52E08A03060002 +8DF6:00107A104910491048FE78101310112851245D44514251825900E280047E0000 +8DF7:00807C8044BC47C044507C2410D4130C5C0053FE509050905D12E112020E0400 +8DF8:01107D12451445D845107D121152118E11205C2053FE502050205C20E0200020 +8DF9:00007A0C497049104810781010FE171051105D10511051105910E280047E0000 +8DFA:00007CF84488448844887C88112612205DFE5020507050A85D24E22200200020 +8DFB:00407C2045FE448844507C201050108811065C885088508850885D08E1080208 +8DFC:00007DFC4504450445FC7D00110011FE5D02517A514A514A5E7AE20204140008 +8DFD:00007DF84408440845F87D00110411045CFC5040502050A45E8AE28A04780000 +8DFE:1040104024FE6488A5502420245020881FF410101FF0010011F81100290047FE +8DFF:00207C2045FC442044207C2013FE10205C205120513C51205EA0E260043E0800 +8E00:00007DFC4504450445047DFC102010205D20513C512051205EA0E260043E0800 +8E01:00007DFE4400449245247E481124109210005DFE5020502050205C20E3FE0000 +8E02:00007BFE49204928492879E81128112851285DE85128512A593AE3EA00260020 +8E03:00207D2444A444A844207DFC110411045DFC5104510451FC5D04E10401140108 +8E04:00107C104490449E44907C9013FE10005C105092509251145E08E01000600380 +8E05:080C08F07E8008800EFE78880888290812081FF010101FF0010011F83100CFFE +8E06:00407C404488450447FE7C021088114412425CF85188525050205C50E1880606 +8E07:00807C8044FE450046FC7C8410A410945DFE5084512451145DFEE00400280010 +8E08:00207C2047FE442044207DFC112411245DFC5020507050A85D24E22200200020 +8E09:00407C2045FC450445047DFC1104110411FC5D205122511451085D44E1820100 +8E0A:00007DF8440844D044207DFC112411245DFC5124512451FC5D24E1240124010C +8E0B:0100F100911E93929112F112211227D2A112B912A21AA294A7D0B250C0100010 +8E0C:00207C2047FE442045FC7C4013FE10485C8850FE510851485E28E40800280010 +8E0D:00207C2245FA442444247DFE1010102011FC5C88511052FE54105C10E0500020 +8E0E:00007DFE4410442044687CA41122102010005CFC5084508450845C84E0FC0084 +8E0F:002078224BB448A848A8792412A2104051FC5D04510451FC5904E10401FC0104 +8E10:00487C44445E45E044287C12106A119610485C5E51E0502450285C12E06A0186 +8E11:00887C8847FE448844887CF8108810885CF85088508853FE5C00E08801040202 +8E12:001C7DE04420442047FE7CA8112412425C4053FE508851085CD0E03000480184 +8E13:00A07C90449045FE45207D2013FC112011205DFC5120512051205DFEE1000100 +8E14:00207C20443E442045FC7D0411FC11045DFC5124502053FE5C20E02000200020 +8E15:00207C2047FE442045FC7C2413FE10245DFC50205120513E5D20E2A0027E0400 +8E16:00487C48444845FE44487C4811FE100010FC5C84508450FC50845C84E0FC0084 +8E17:00207C204450448845447E2211F810085C50502050A452825E8AE28A04780000 +8E18:01007D0045FC460444447D5410E4104413FC5C4450E4515452445C44E0140008 +8E19:00007BE0495C495449D47954115411D451545D54516853C85848E05400540062 +8E1A:00207C204450448845047EFA100011FC11545D5451FC515451545D54E104010C +8E1B:00207C2045FC442044207DFE108811045E22502051FC50205C20E02003FE0000 +8E1C:0020782049FC482048207BFE1088114412425CF85188525050205C50E1880606 +8E1D:00007DFC4524452445FC7D24112411FC10205DFE507050A851245E22E0200020 +8E1E:00007DFE4502450245FE7D10111011FE5D105110517E51425D42E242027E0442 +8E1F:0100790049004BDE4A927C921092109253F25C9250925152595EE22004200800 +8E20:004078204BFE4A024D04790011DE12521E525352549A509451105D12E212040E +8E21:00207D2444A8442045FC7C4013FE10885D0452FA548850885CA8E0920082007E +8E22:00007CFC4484448444FC7C84108410FC5C4050FE512A524A5C92E122004A0084 +8E23:00407C2045FC440045087C90100013FE10005C0051FC510451045D04E1FC0104 +8E24:00407C2045FE440044887C881154122210005C2053FE502050205C20E0200020 +8E25:00407C2045FC440044887C5013FE10405C4053FE508851885C50E03000C80304 +8E26:00207C2045FC445044887D0413FE10085DE85128512851E85D28E00800280010 +8E27:00807C80449C44F444947C9413F4101410945C9451C852A850885C94E09401A2 +8E28:008878884888488849547A221442102050205D20513C51205AA0E260043E0800 +8E29:00087C3C45C0444445247CA8108010205DFE507050A850A85D24E22204200020 +8E2A:004078204BFE4A024C0479F81000100053FE5C20512851245A22E42200A00040 +8E2B:01087C90440045FC44907C901092129211945D985090509050905C90E3FE0000 +8E2C:001C7DE04510451045FE7D101110117C5D445154515451545D54E22802440482 +8E2D:00807C8044F8450846107DFC102410245DFE5024502451FC5C24E02000A00040 +8E2E:00207C1045FE450045207D20113C11205D20517C514451445D44E244027C0444 +8E2F:0440F25E9292901297D4F11421182114A7F2B912A112A11ABA94E25004500810 +8E30:00207C504488450446FA7C0011E2112A5D2A51EA512A512A5DEAE122012A0164 +8E31:00407C2045FE454845487DFE114811785D0051FC514451485D28E210022804C6 +8E32:00087C1C45F0451045107DFE1110117C5D44517C5144517C5D44E244027C0444 +8E33:00207C2047FE442045FC7C4013FE10885D0452FA508850885CF8E088008800F8 +8E34:00007DFC4448443045FC7D2411FC11245DFC5124504051FC5C44E08401140208 +8E35:00087C3C45E0442047FE7C2011FC11245DFC512451FC50205DFCE02003FE0000 +8E36:00007DFC4504450445FC7D04110411FC5C0053FE502051205D3CE12002A0047E +8E37:00207C2245FA442444287FFE1020104010FC5D84528450FC50845C84E0FC0084 +8E38:00887C8847FE448844F87C8810F810885C8853FE510051485D84E10001FE0000 +8E39:00207D244524452445FC7C0013FE10205C4051FC515451545D54E1540154010C +8E3A:001078104F7C491449FE7A14127C1710517C5D1055FE52105A10E50008FE0000 +8E3B:00007CFC4484448444F47C94109411FE5D02517A514A514A5D7AE102010A0104 +8E3C:00007CFC448444FC44847CFC100011FE5C8050FE512A524A5C92E12200540088 +8E3D:00047C1E47E0442045FC7D24112411FC5C2053FE5222522A5EFAE202020A0204 +8E3E:00007DFE440044FC44847C8410FC100011FE5D22512251FE51225D22E1FE0102 +8E3F:000878C84B084908492A792A13AC11481D0853885554511451145D24E1240142 +8E40:00487D48454847FE45487D48117811005DFE502053FE50705CA8E12406220020 +8E41:00407C2045FE450245027DFE110011005DFE51AA51AA52FE5EAAE2AA04A20086 +8E42:00007DFC4448443047FE7C52109411105E30502053FE50705CA8E12406220020 +8E43:00887C8847FE448844A87C2013FE104010805CFC5184528450845C84E0FC0084 +8E44:00407C2045FC440044887C5013FE12225C2451FC512451245D34E12800200020 +8E45:00207C2047FE447044A87D24122211FC5D0451FC510451FC5D04E00003FE0000 +8E46:00007A7C49444944487C78441744117C11505D4A5144515451625D42E280047E +8E47:01007FFE44429FF404403FF80440FFFE08201FF02828CFE6010009F0150023FC +8E48:001E7DE04422451244947C80102011CE11025D0251CE510251025D02E1FE0102 +8E49:00847C44444845FE44207CFC102011FE5C40508050FE51105E10E41001FE0000 +8E4A:001E7BE0492248944840788811F0102050C45DFE502250205BFEE05000880306 +8E4B:00007DFC450445FC45047DFC1000100013DE5C425252514A52525C42E14A0084 +8E4C:00207C204450444844A47DFE128410FC5C8450FC508050FC5D44E144027C0044 +8E4D:00007BFC4A044A044BFC7A48124812FC12485E4853FE52A452A85C90E4C80886 +8E4E:00207C2047FE442045FC7D0411FC110411FC5D0451FC510453FE5C88E1040202 +8E4F:0004781E4BF04A1E4A107AFE1292129852F25E8E528052B85AA8E4AA054A0A86 +8E50:00207D2444A8455444887D0412FA148810885CF85088508850F85C88E0880098 +8E51:00007DFE448444FC44847CFC108613FC5C0453DE505251525C94E14802540422 +8E52:00487C4845FE444844007DFE104810485DFE514A514A51B65D22E102010A0104 +8E53:00407DBC4514459445547DA4114C100011FC5D24512451FC51245D24E1FC0104 +8E54:08047F7808403E402A7E3E482A48FF4808881FF010101FF0010011F83100CFFE +8E55:00007DFC452445FC45247DFC10A810A85DFE50A850A851FC5C20E3FE00200020 +8E56:00207C2047FE442045FC7C4013FE10885D045242559C51045DDCE10401FC0104 +8E57:004078204BFE4A504A507BFE1252125253FE5E00529252D45A98E49204D2088E +8E58:00007BDE48424A52494A7A52102810C453125C605188503259C4E01800600380 +8E59:00243FFE222023A422243FA82B10529A46269FF210101FF0010011F83100CFFE +8E5A:0020792448A84BFE4A0278F8108810881CF85020502051FC50205C20E3FE0000 +8E5B:02A8F2A897FC92A892AAF4E6280027FCA444B840A3F8A248A248B248C2580040 +8E5C:002078104BFE4A02488078FE111013201D7C51445144517C51445D44E17C0144 +8E5D:010879084A284CAE48A87928137E15001D085128512E512851585D48E1860100 +8E5E:000078FE48104A204A7C7A4413C4127C52445E7C52C453445A7CE02800440082 +8E5F:00207BFE482049FC48207BFE100011FC1D0451FC510451FC51045DFCE0880104 +8E60:004078204BFE4A004A487A4813FE124852485E48527852005D54E52A0A2A1000 +8E61:00487D48455E456A45547DC81050106413C45D7E5144516451545D44E2540448 +8E62:004078204BFE488848507BFE122212FA52225EFA528A528A5AFAE202020A0204 +8E63:00887C8847FE448844887CF8102013FE5E22533252AA53765E22E222022A0224 +8E64:012479244A244CA44954794A1392150811085D28512E512851285D58E14E0180 +8E65:00107C1046FE4510457C7C54107C13545D7C511051FE51105D10E290047E0000 +8E66:00207A224A224BFE48007BDE1252125253DE5E52525253DE5A52E252055A08A4 +8E67:009078904FFE48904BFC7A9413FC129453FC5C0051F8510859F8E10801F80108 +8E68:0110791449D24A504A7E7D50109012A851285D44524454825808E2A402520452 +8E69:49202A3E7F4849485DA86B10492841461FF010101FF0010011F81100290047FE +8E6A:002079FC492449FC48207BFE100011FC11045DFC510451FC51045DFCE0880104 +8E6B:000079FC484848304BFE7852109413501C2053FE5252528A53765E52E2720206 +8E6C:00107BD248544948488A790412FA140051FC5D04510451FC5904E08807FE0000 +8E6D:0104788848004BFE4A227AAA1272122253FE5C0051FC510459FCE10401FC0104 +8E6E:00007DFC445045FC45547DFC102013FE5C48508451FA52885CF8E0840084007C +8E6F:003C7DE0452444A845FE7CA8112412025DFC5124512451FC5D24E12401FC0104 +8E70:00007BFE4A004A044BF47A0412EE12A452A45EEC520452A45A44E27405940008 +8E71:00207DFC4488445047FE7C0011FC11245DFC512451FC50205DFCE02003FE0000 +8E72:008878504BFE485049FC7954118C117451045DFC500853FE5908E08800A80010 +8E73:00247BA848924D144A087C0413BA10A81CC65380523C538450A85C90E2A80144 +8E74:0214F1129FD29010907EF79024902490A790B928A5A8A568A928B14AC54A0286 +8E75:08287F2400FE3E2022503E504952988E00001FF010101FF0010011F83100CFFE +8E76:0000F7FE940096289548F7EE24922484A6A0BEA8A7E8A488BC94E51409241242 +8E77:3FFE289025103FDE22222A882F88229424222BF8220823F82040427C454088FE +8E78:0020792448A84BFE48A879241222110411045DDE52445554509E5D04E2040404 +8E79:00207C504488457446027CF8108810F810005DDC5044515450CC5D54E04400CC +8E7A:0020782049FC48204BFE7908139C11081D88563E500053FE50905C90E112020E +8E7B:00187DE0444047FE44887D741252107010005DFC5104517451545D74E104010C +8E7C:00507A52495448504BFE7888105013FE50205DFC502053FE5850E08801040602 +8E7D:00207C2045FC442045547C88110412FA10885CF8508850F850205CA8E1240060 +8E7E:010878884BC848104BDE7A6413D4101413D45C54509450E853885C94E2940122 +8E7F:004078204BFE4A8A49247A2211FC112451FC5C2053FE52225BFEE22200200020 +8E80:00007DFC452447FE45247DFC100011FC5D0451FC510451FC5D04E1FC00880104 +8E81:00F87C88448844F844007DDC115411545DDC502053FE50705CA8E12402220020 +8E82:00107A10497C481048FE7844132811FE11105D7C511051FE51105D10E2FE0400 +8E83:001078084BC84A7E4A407A5413C8127E52085FC8537E55485D48E5C809480008 +8E84:3E1022FE3E4420287EFEA2103EFC221000001FF010101FF0010011F83100CFFE +8E85:00007DFC4554455445FC7C8011FC124411F45D54515451F450445DF4E0140008 +8E86:0040787C48404BFE4A427A7813C4123C1E0053FE524053A452585DB4E45209B0 +8E87:008878884BFE48A8482279FA1024102853FE5C4050FC51845AFCE48400FC0084 +8E88:008879084BC84A504BDE7A6413D4111450945FF4511451C85948E254035404A2 +8E89:0820FFFE08201FF011101FF011107FFC41245FFC10101FF0010011F83100CFFE +8E8A:00207BFE482049FC48007BFE100211FC1C2053FE500053FE50045FBEE2A4038C +8E8B:0080F04097FC911090A4FF5825542552AB58B800A208A3F8BA08E3F802080408 +8E8C:008079004BFE4D5449547BFE1154115413FE5D0451DE524451545C9EE1040204 +8E8D:00007BDE48424A52494A7A521090110813FE5D1051FE511051FE5D10E1FE0100 +8E8E:0000F7FC924894449FFEF44426EC2554A6ECBC44A6ECA554A6ECB444C4540408 +8E8F:00487DFE4448450044BE7C821152117E11D25D7E5152517E51525D7EE1420106 +8E90:01247A48492448004BFC7A941264129413FC5E4853685248536A5E4AE2460362 +8E91:0440F28E9FEA928A9FEAFAAA2C6C2BAAA82ABFEAA10AAFEAA28CB448C8280008 +8E92:012479744A584ADA4BFE795412DA13FE10A25C2053FE507050A85D24E2220020 +8E93:00427B9C4A104BDE4A947A94142013FC52045FFC520453FC5A04E3FC01080204 +8E94:0020F7FE940095FC9524F5FC252425FCA420BDFCA420A7FEBD24EAFA082013FE +8E95:004078204BFE4A444BF47A4412EE120452F45EAC52E452145AA4E47405940808 +8E96:01107A124BAA493A4A927BBA108A13FE1D12521253AA513A52925FBAE08A03FE +8E97:22004F9C94802FDE6108AFC8250827D801001FF010101FF0010011F83100CFFE +8E98:011078904BDE48104A5E798213DE101013DE5E5053DE525053DE5E50E25202CE +8E99:03DE7A524BDE4A524BDE7A22129212FA1FA252FA52A252FA52A25EFAE2820206 +8E9A:0000F0FE942892FE92AAF0FE201021FEA644BAFEA344A27CBA42E23E050008FE +8E9B:22004F9C94802FDE6208AFC82A482AD800001FF010101FF0010011F83100CFFE +8E9C:0108F52897BE994897BEF31825AA2946A000BBF8A208A248BA48E0B001080604 +8E9D:03DE7A524BDE4A524BDE7A2212FA122252FA5EAA52FA52AA5AFAE27202AA0226 +8E9E:0248F2E8930896EA9A1CF2E8220822E8A5B4B8E2A000A3F8B910E0E003180C06 +8E9F:00207BFE480049DC495479DC108813FE1C8853FE508853FE50945D88E2A400C2 +8EA0:0820FFFE28207DFC44887DFE40207DFC44207FF010101FF0010011F83100CFFE +8EA1:03FCF10891F8910891F8F10E27F82008A7FEBA94A39CA294A39CB2D6C7BC0084 +8EA2:079EF492979E949297FEF51225F22512A5F2BC02A7BAA6AAA59AB6AAC59A0406 +8EA3:03DE7A524BDE4A524BDE7A5213DE109011FE5D1053FE551051FE5D10E1FE0100 +8EA4:0108F7FE910890009114F7BE21142794B17EAF80A13EA3A2B57EC922013E0122 +8EA5:0040F7FE949291089080F31C2204239CA204BBFCA248A368A248B36AC2460362 +8EA6:0528F7BE994897BE9318F5AA294623FCA204BBFCA204A3FCBA04E3FC01080204 +8EA7:03DE78004BDE4A524B5A7A52102013FE1E5053FE525253FE52925EDCE29204CE +8EA8:0110F7FE904092EE92AAFBEA2AAE2AE8ABAABCE6A288A5F4A290B060C1980606 +8EA9:03DE7A524BDE4A524BDE78A011FE132015FC5D2051FE500051FC5C88E070078E +8EAA:00887BFE48884BDE4A527BDE125213DE124A5EFE539252FE52925EFEE2820206 +8EAB:020004001FF010101FF010101FF2101410187FF00050009003101C10E0500020 +8EAC:080010FC3E0422043E04227C3E4022402280FEFC06040A04120422044A280410 +8EAD:102020207C2045FE7D2246247C2044204450FC500C5014502490449295120A0E +8EAE:101020507C5044507C8844887D0446FA4448FC480C4814482488448895280A10 +8EAF:100021FE7D0045047D4445287D2845104510FD280D2815442584450095FE0800 +8EB0:102020207C2044207DFE44707CA844A84524FD240E2214F82420442094200820 +8EB1:100021FC7C4444487C5E44827C8A45244420FDFE0C20147024A8452496220820 +8EB2:100020F87C8844887C8844887D26462045FEFC200C7014A82524462294200820 +8EB3:0800107C3E4422443E4422443E7C22002200FEFE06820A82128222824AFE0482 +8EB4:082010103EFC22843E8422FC3E84228422FCFEA206A40A98129022884AC40482 +8EB5:100021FC7C2444A47CA445247C54444844A0FC100C5415422542454A96380800 +8EB6:100021FC7D2445247DFC45247D2445FC4420FDFE0C7014A82524462294200820 +8EB7:101C21E07C2044207FFE44A87D2446424440FFFE0C88150824D0443094480984 +8EB8:102020207DFC44507C8845047FFE440845E8FD280D2815E82528440894280810 +8EB9:108020807CFE45027E2244AA7C72442245FEFC220C7214AA25224422940A0804 +8EBA:102021247CA444A87C2045FC7D0445044574FD540D5415542574450495140908 +8EBB:104020207DFE45027E0444507C8845044400FDFC0C2014202420442097FE0800 +8EBC:100020FC7C8044F87C8044F87C8047FE4540FD240D2815102508454495820900 +8EBD:100023FE7A004AFC7A844AFC7A844AFC4A20FBFE1A482AC84A308A482A8413FE +8EBE:108420487DFE44207C2044FC7C20442045FEFC000C2015FE2420445094880B06 +8EBF:1020201079FE4910797C491479FE4914497CF9101992295449388A542A921430 +8EC0:100023FE7A004A7C7A444A447A7C4A004AEEFAAA1AAA2AAA4AEE8A002BFE1000 +8EC1:102021FC7D2447FE7D2445FC7C2045FC4524FDFC0C4017FE248845D094700B8C +8EC2:1048216A7CDC44487CB445227DFE45024420FC200CFC14242444444494940908 +8EC3:100021DC7D5445547DDC44007DFC452445FCFD240DFC142027FE442094200820 +8EC4:111020947BD248127A5049907FFE48104BD2FA521A542BD44A4A8A4A2BD61022 +8EC5:100023FE7A004A587A544ABE7BA84AE84ABEFAA81AA82ABE4AA88AA82ABE14A0 +8EC6:105021FC7D5445FC7D5445FC7C0045FC4400FDFC0D0415FC2488445097FE0800 +8EC7:102023FE782049FC78004BFE780249FC4820FBFE18002BFE48048BBE2AA4138C +8EC8:104020207BFE4A547A7E4AA87BBC4AA84ABCFAA81ABE2AA04A548B422D4A1238 +8EC9:102023FE7A1249DC78A849DC78AA4BFE4800F9FC190429FC490489FC28881104 +8ECA:010001007FFC01003FF8210821083FF8210821083FF80100FFFE010001000100 +8ECB:08200820FFA008207F20492049207F20492049207F200822FFA20822081E0800 +8ECC:108010801080FC8013F07C9054907C9054907C901090FE9211121112120E1400 +8ECD:00007FFE410281043FF801001FF011101FF011101FF00100FFFE010001000100 +8ECE:01007FFC01003FF821083FF821083FF80100FFFE01003FF8200820083FF82008 +8ECF:1000100013FCFC9010907C9054907C9054907C901090FE9211121112120E1400 +8ED0:100011F01090FE9010907C9054907DF054907C901090FE92108A108A10861082 +8ED1:102010201020FE2010207DFE54207C2054207C501050FE501088108811041202 +8ED2:0800087C0810FF1008107F1049107F7E49107F100810FF100810081008100810 +8ED3:1000100010F0FE9010907C9054907CD054B07C901090FE9210921112110E1200 +8ED4:1000100011FCFE2410247CA454A47CA455247C241024FE441044108411141208 +8ED5:102010201020FC2011247D2455247D2455247D241124FF24112411FC10041000 +8ED6:1000100011FCFE2010207C2054207C2055FC7C201020FE201020102013FE1000 +8ED7:100010F81088FE8810887D0656007DFC54847C841048FE501020105010881306 +8ED8:102010201020FDFE10207D2455247D2455247DFC1024FE2010221022101E1000 +8ED9:102010201020FE3E10207C2054207DFC54847C881048FE501020105011881606 +8EDA:102010201020FE2010207DFE54207C2054207C501050FE50108810C811241202 +8EDB:100011FE1100FD0011787D4855487D4855487D681150FD4211421142123E1400 +8EDC:102010201020FDFE11227D2255227D2255527D4A118AFF0211021102110A1104 +8EDD:1004101E10F0FE9010907C9054907CFE54907C901090FE88108A10AA10C61082 +8EDE:1008101C10E0FE2010207C3C54E07C2054207C3E11E0FE20102410241024101C +8EDF:104010401040FE7C10847C8855207C2054207C501050FE501088108811041202 +8EE0:1008103C11E0FE2010207C2054207DFE54207C201020FE201020102011FC1000 +8EE1:102010201050FE5010887D4456227C2054007DFC1004FE081008101010101020 +8EE2:1000100010FCFE0010007C0055FE7C2054207C401040FE88108411FE10821000 +8EE3:01007FFC01003FF821083FF821083FF80100FFFE0100600C183006C01830600C +8EE4:1008103C13E0FC2011247CA454A87C2057FE7C201020FE201020102010A01040 +8EE5:104010401040FEFC10847D0454F47C9454947C941094FEF41094100410281010 +8EE6:100011FC1104FD0411047D0455FC7C5054507C501050FE9210921112120E1400 +8EE7:1004101E10F0FE9010907C9054907CFE54907C901090FE88108A10AA10D6108A +8EE8:102010201050FE5010887D2456127C1055FC7C041008FE881050102010101010 +8EE9:102010201020FE4010487C8455FE7C8254007CFC1084FE841084108410FC1084 +8EEA:201020902090F910217EFA52AB92F892A912F9122252FBD220622022204A2084 +8EEB:102010201050FE8811047E1254207C4055887C101020FE441188101010601380 +8EEC:040008201FF00210FFFE09203FF8C1061FF011101FF011101FF00100FFFE0100 +8EED:100010FE1080FE8010FE7C9054907CBC54907C901090FEFE1080108010FE1000 +8EEE:102010201020FDFC11247D2455247D2455247FFE1020FE501050108811041202 +8EEF:100011FC1020FC2011247CA454A87C2057FE7C201020FE201020102010201020 +8EF0:04447C5804621C42E43E01007FFC01001FF011101FF011101FF00100FFFE0100 +8EF1:1008101C11F0FD5011507D5055507D5055507D481148FD681154127412521400 +8EF2:102010201020FE2011FE7C2054207C2054FC7C841084FE841084108410FC1084 +8EF3:1040104010FCFE8411047EF454947C9454F47C841094FE8810821082107E1000 +8EF4:104010201000FDFE10207C2054207C2055FC7C201020FE201020102013FE1000 +8EF5:104410441044FE8410BE7D8456847CA454947C941084FE841084108410941088 +8EF6:1040102011FCFD0411047DFC55007D00557C7D081110FD2011421282127E1400 +8EF7:105010481048FC4013FE7C8054807CFC55447D441128FD281210122814441182 +8EF8:102010201020FE2011FC7D2455247D2455247DFC1124FF241124112411FC1104 +8EF9:1000100011FCFF0411047D0455047D0455FC7D041000FE901088110412021402 +8EFA:100011FC1044FE4410447C4454947C8855007CFC1084FE841084108410FC1084 +8EFB:1000100013FEFC0810087DE855287D2855287D2811E8FD281008100810281010 +8EFC:102010201120FD2011FC7D2056207C2055FE7C201050FE501088108811041202 +8EFD:100011FC1084FE8810507C2054507C8857267C2011FCFE201020102013FE1000 +8EFE:101010141012FC1013FE7C1054107DD054907C901090FC8810EA138A10061002 +8EFF:108410481000FEFC10487C4854487C4855FE7C481048FE481048108810881108 +8F00:100013FE1020FE2010407DFC55547D5455547D541154FF541154114411141108 +8F01:104810481048FE4811FE7C4854487C4854487DFE1000FE481044108410821102 +8F02:08207FFC0820FFFE101021085FF481021FF011101FF011101FF00100FFFE0100 +8F03:104010201020FDFE10007C8855047E0254887C881050FE501020105010881306 +8F04:102010201124FEA410A87C2057FE7C9054907C901090FE9211121112120E1400 +8F05:104010401078FE8811507C2054507C8855067CF81088FE881088108810F81088 +8F06:102010101010FDFE10207C2454447CF854127C221044FD881010102810441182 +8F07:102010201050FE8811047E0255FC7C2054207C2011FCFE201020102013FE1000 +8F08:1010102010FCFE8410A47C9454947DFE54847CA41094FE941084110411141208 +8F09:08207F280824FFFE0820FFA008247F2449247F2849287F100812FFAA08460882 +8F0A:100011FE1020FE4010887D0455FE7C2254207C2011FEFE201020102013FE1000 +8F0B:010041047FFC0200FFFE09203FF8C1061FF011101FF011101FF00100FFFE0100 +8F0C:200023FE2020F8202020FBFEAA22FA22AAAAFAAA22AAFAFA22022202220A2204 +8F0D:100010501048FE8411247C2054507C8855067EF81088FE881088108810F81088 +8F0E:101010921052FE5410107CFE54827C8254FE7C821082FEFE10821082108A1084 +8F0F:100013FE1050FC5011FC7D5455547D54558C7D041104FDFC1104110411FC1104 +8F10:1020101011FEFD0212047CF854007C0055FE7C501050FE5010921092110E1200 +8F11:100010FC1024FE2411FE7C2454247CFC54407C4010FCFEC411441044107C1044 +8F12:100013FE1120FD2811287DE855287D2855287DE81128FD2A113A13EA10261020 +8F13:1080108010F8FD0812107DFC55247D2455247DFC1050FE50109010921112120E +8F14:1028102413FEFC2010207DFC55247D2455FC7D241124FDFC112411241124110C +8F15:100011FE1000FE9211247E4855247C9254007DFE1020FE201020102013FE1000 +8F16:100010FE1092FE9210BA7C9254FE7C8254BA7CAA10AAFEBA10821102110A1204 +8F17:10001040119CFF0411047DDC55047D0455FC7C501050FE50109010921112120E +8F18:1020102010FCFC2010207DFE54487C8455227C781088FD48105010201050118C +8F19:100013E0115CFD5411547DD455547D5455D47D541148FD6813C8105410541062 +8F1A:10481044105EFDE010287C12546A7D9654487C5E11E0FE2410281012106A1186 +8F1B:200023FE2020F82023FEFA22AA22FB32AAAAFAAA2376FA6622222222222A2204 +8F1C:109210921124FE4811247C9254927C0055FE7D221122FDFE1122112211FE1102 +8F1D:100013FE922254205BFE1020FDFC292429FC292429FC28202BFE4C2048208020 +8F1E:200023FE2202FA8A2252FBFEAA42FA22ABFEFA822282FA8222FA2202220A2204 +8F1F:200023DE2042F94A2084F94AAA52FC20A800FBDE2052F9522094214822542422 +8F20:100011FC1124FD2411FC7D2455247DFC54207DFE1070FEA81124122210201020 +8F21:10401040107CFC8411087E0054207DCE55027D0211CEFD021102110211FE1102 +8F22:1020102011FCFC5010887D0457FE7C0855E87D281128FDE81128100810281010 +8F23:100011DC1154FD5411547DDC55547D5455547DDC1154FD54115412D41224144C +8F24:1020102011FEFE2010FC7C2055FE7C0054FC7C8410FCFE8410FC108410941088 +8F25:100011FC1104FD0411FC7D0455047DFC54007D1211D4FD18111011521192110E +8F26:08203EF808207EFC145023885FF401001FF011101FF011101FF00100FFFE0100 +8F27:104410441088FDDC10887C8854887C8855DE7C881088FE881088108810881108 +8F28:1020101011FEFD0210007CF854887C8854F87C801080FEFC1084108410FC1084 +8F29:04407C7C04403C7804407C7C05403FF801001FF011101FF01110FFFE01000100 +8F2A:102010201050FE8811047EFA54007DFC55547D5411FCFF54115411541104110C +8F2B:104810481048FDCE10487C4854487DCE54487C481048FDCE1048104810481048 +8F2C:1040102013FEFC0010007DFC55047D0455047DFC1020FEA81124122210A01040 +8F2D:100013FE1020FC4011FC7D5455547D5455547D2C1020FDFE1050108811041202 +8F2E:100010FC1048FE3011FE7C5254947D1056307C2011FEFE7010A8112412221020 +8F2F:100010F81088FE8810F87C0055FE7C8854F87C8810F8FE88109E13E810081008 +8F30:100010FC1084FEFC10847CFC54007DFE54807CFE112AFE4A1092112210541088 +8F31:2008200C200AFBFE2208FA08AAE8FA0AAA0AFAEC22ACFAA822EA221A22262442 +8F32:102011241124FD2411FC7C0057FE7C2054407DFC1154FF54115411541154110C +8F33:1020102013FEFC2011FC7C4057FE7C8855047EFA1020FDFC1020105010881304 +8F34:1008101C11F0FD1011107DFE55107D7C55447D7C1144FD7C11441244127C1444 +8F35:100010FC1084FEFC10847CFC54407CFE55127C9210AAFE8210FA100210141008 +8F36:108810481050FDFE10507C5055FC7D5455547D8C1104FDFC1104110411FC1104 +8F37:1080108010FEFD0212427DFA54027DF254027DF21002FDF2111211F210141008 +8F38:204020A02110FA0825F6F800ABC4FA54AA54FBD42254FA5423D42244225422C8 +8F39:1040104010FEFE8011FC7E8454FC7C8454FC7C40107CFEC41128101010681186 +8F3A:1052105210A4FDFE10A47C5254527C0054FE7C921092FEFE1092109210FE1082 +8F3B:100010FE1000FE7C10447C44547C7C0054FE7C921092FEFE1092109210FE1082 +8F3C:100010F81088FE8810F87C8854887CF854007DFC1154FF541154115413FE1000 +8F3D:104010481084FDFE10207FFE54887D0457FE7D241124FDFC1124112411FC1104 +8F3E:200023FC2204FA0423FCFA48AA48FAFCAA48FA4823FEFAA422A8249024C82886 +8F3F:010017C0611C47C4454477DC454447C4711C47C44104FFFE0000101020084004 +8F40:100010F810A8FEA810D87C8854F87C0054007DFC1154FF541154115413FE1000 +8F41:101E11E01022FD1210947C8054207DCE55027D0211CEFF021102110211FE1102 +8F42:0800FFB808287F280028FFC688807F7C08247F2449287F284910FFA808440882 +8F43:1020102013FEFC2011FC7C4057FE7C8855347EE21020FDFC107010AC13221020 +8F44:2040202023FEFA022424F9FCA820F9FCA820FBFE2020F9FC2104210421FC2104 +8F45:1020102011FCFC2013FE7C0055FC7D0455047DFC1052FC94118816A410C21080 +8F46:2040202023FEFA502250FBFEAA52FA52ABFEFA002292FAD42298249224D2288E +8F47:200023DE2042FA52214AFA52A828F8C4AB12F8602188F83221C4201820602380 +8F48:112412481124FC0011FC7D2455FC7D2455FC7C2013FEFC7010A8112416221020 +8F49:102013FE1020FDFC11247DFC55247DFC54227DFE1008FDFE1108108810281010 +8F4A:108813DE1088FDDC10887FDE54887C0057FC7C041004FDFC1004100413FC1004 +8F4B:1010101012FEFD10117C7C54547C7F54557C7D1011FEFD1011101290147E1000 +8F4C:100011FC1020FFFE12227DAC54207DAC54007DFC1004FDFC1004100411FC1004 +8F4D:2108208823E8F910229EFFD4A864FBD4AA54FBD42254FBC822482254226422C2 +8F4E:201C21E02040FBFE2088F904AAFAFC88A8F8F80023FEFA0222FA228A22FA2206 +8F4F:23FE220223FEFA0022FCFA08ABFEFA10AA30FBCE2242FA8424EE27842884218C +8F50:1050115210D4FC5011FE7C8854507DFE54207CFC1020FDFE1050108811041202 +8F51:1020102011FCFC2011547C8855047EFA54887CF81088FEF8102010A811241060 +8F52:102011FC1020FC8813FE7C8855FC7D0455FC7D0411FCFD0411FC108811041202 +8F53:103C13E01124FCA813FE7CA855247E0255FC7D241124FDFC1124112411FC1104 +8F54:2020212420A8FBFE20A8F924AA22F904A904F9DE2244FD54209E210422042404 +8F55:108813FE1088FDFC11047DFC55047DFC54807DFE1222FD52110211FA100A1004 +8F56:2020202023FEF9242124FAAAAFFEF800A9FCF9042174F9542174210421FC2104 +8F57:2014201223FEFA1022F0FA14AAF4FAB8AAEAFA162442F82422A2228A24782000 +8F58:100011FC1154FD5411FC7C0057FE7C0055FC7D0411FCFC621094118812A410C2 +8F59:1104108813FEFC2011FC7C2057FE7C5455927C9013FEFC9010D4138A109611A2 +8F5A:08007F3C2A243E422A3CFFA449187F6601007FFC11101FF01110FFFE01000100 +8F5B:214421442554FB64215EFBE4A804FA34A94CFBE42084FBE4208420E427142008 +8F5C:200021FC2020FBFE2222F9ACA820F9ACA800FBFE2020F9FC215421542154210C +8F5D:1A3823883A38238838B82288FFFE11103FF8C1061FF011101FF01110FFFE0100 +8F5E:200823E82288FBEE2228FBF4AA82FBE2A800F9FC2154F9542154215427FE2000 +8F5F:01003FF801001FF011101FF01110FFFE01001110FEFE54547C7C5454FEFE1010 +8F60:200021FC2124F9FC2124F9FCA904F800ABFEFAAA22AAFBFE22AA22AA23FE2222 +8F61:210427C4410897D2E55C47C89552F7DE0100AFEAA92A01003FF820083FF82008 +8F62:212421742258FADA23FEF954AADAFBFEA8A2F82023FEF87020A8212422222020 +8F63:200023FE2222FACC2244FBEEAA44FAEEAB54FA442210FA90229E249024902BFE +8F64:2040207C2040FBFC2244FBF0AA44FAFCAAA8FAF822A8FAF8220025FC25542BFE +8F65:208823FE2088FBDE2252FBDEAA52FBDEAA4AFAFE2392FAFE229222FE22822206 +8F66:0200020002007FFC04000900110021003FF801000100FFFE0100010001000100 +8F67:104010401040FE402040284048407E40084008400E40F84248420842083E0800 +8F68:208020802080FC8043F050909090FC90109010901C90F09251121112120E1400 +8F69:1000100010FEFE102010281048107E1009FE08100E10F8104810081008100810 +8F6A:102010201020FE20202029FE48207E20082008500E50F8504888088809040A02 +8F6B:1000100010FCFE24202428A448A47EA408A409240E24F8444844088409280A10 +8F6C:202020202020FDFC4020504093FEFC40108011FC1C04F0885050102010101010 +8F6D:200021FE2100FD00417851489148FD48114811681D50F14251421142123E1400 +8F6E:2040204020A0FCA0411052089406FD10112011401D80F1005104110410FC1000 +8F6F:104010401040FE7C2084288849207E20082008500E50F8504888088809040A02 +8F70:020002007FFC080011003FF80100FFFE010001003EF80288145008203458C286 +8F71:102010201020FE2021FE282048207E2008FC08840E84F8844884088408FC0884 +8F72:2000200021FEFC08400851E89128FD28112811281DE8F1285008100810281010 +8F73:20202020203EFC20402051FC9104FD04110411FC1D04F1005100120012001400 +8F74:202020202020FC2041FC51249124FD24112411FC1D24F1245124112411FC1104 +8F75:2000200021FCFD04410451049104FD0411FC11041C00F0905088110412021402 +8F76:202020202120FD2041FC51209220FC2013FE10201C50F0505088108811041202 +8F77:2008203C23E0FC20412450A490A8FC2013FE10201C20F0205020102010A01040 +8F78:202020202050FC88410452129020FC40118810101C20F0445188101010601380 +8F79:2008201C21E0FD00412051209120FDFE102010201CA8F0A45122122210A01040 +8F7A:100011FC1044FE442044284448947E88090008FC0E84F8844884088408FC0884 +8F7B:200021FC2008FC10403050489084FF02100011FC1C20F0205020102013FE1000 +8F7C:201020142012FC1041FE50109010FDD0109010901C90F08850EA138A10061002 +8F7D:082008287F240820FFFE10201024FF24202448287F2808100F12F82A08460882 +8F7E:100010FE1010FE202044288248FE7E12081008100EFEF8104810081009FE0800 +8F7F:2008203C21E0FC20402053FE9050FC881104128A1C88F0885088110811081208 +8F80:2010202020FCFC8440A450949094FDFE108410A41C94F0945084110411141208 +8F81:202020202050FC884104520291FCFC20102010201DFCF0205020102013FE1000 +8F82:104010401078FE882150282048507E88090608F80E88F8884888088808F80888 +8F83:204020202020FDFE400050889104FE02108810881C50F0505020105010881306 +8F84:200023FE2120FD28412851E89128FD28112811E81D28F12A513A13EA10261020 +8F85:2028202423FEFC20402051FC9124FD2411FC11241D24F1FC512411241124110C +8F86:200023FE2050FC50405053FE9252FE52125212AA1EA6F30252021202120A1204 +8F87:082008207EFC0820FEFE145022884206BFF8050009001FF00100FFFE01000100 +8F88:04407C7C04403C7804407C7C064002003FF8050009001FF00100FFFE01000100 +8F89:100013FE92025444584013FCFC8028A0292029FC282028202BFE4C2048208020 +8F8A:200021FC2104FD0441FC51049104FDFC100011121DD4F118511011521192110E +8F8B:200023FE2202FA8A425253FE9242FE2213FE12821E82F28252FA1202120A1204 +8F8C:2040202023FEFC00400051FC9104FD0411FC10201D28F1245222142210A01040 +8F8D:200023DE2042FD4A4084514A9252FC20100013DE1C52F1525094114812541422 +8F8E:209220922124FA48412450929092FC0011FE11221D22F1FE5122112211FE1102 +8F8F:2020202023FEFC2041FC504093FEFC88110412FA1C20F1FC5020105010881304 +8F90:200021FE2000FCFC4084508490FCFC0011FE11221D22F1FE5122112211FE1102 +8F91:200021F82108FD0841F8500097FEFD0811F811081DF8F108513E17C810081008 +8F92:100010F81088FE8820F8288848887EF8080009FC0F54F954495409540BFE0800 +8F93:204020A02110FA0825F6400053C49254FA5413D41A54F25453D41244125412C8 +8F94:2208220847D08A22F53C27C84110F93E07C0193EE1003FF8200820083FF82008 +8F95:2020202021FCFC2043FE500091FCFD04110411FC1C52F094518816A410C21080 +8F96:2040202023FEFE02442451FC9020FDFC102013FE1C20F1FC5104110411FC1104 +8F97:200023FC2204FA0443FC52489248FEFC124812481FFEF2A452A8149014C81886 +8F98:2040202023FEFA50425053FE9252FE5213FE12001E92F2D45298149214D2188E +8F99:2208210827C8FA10249E4FD450649794FC9417941C94F7885488149414A415C2 +8F9A:2020212420A8FBFE20A8412452229104F90411DE1A44F554509E110412041404 +8F9B:020001003FF8000008200440FFFE0100010001007FFC01000100010001000100 +8F9C:01007FFC01001FF010101FF001003FF808200440FFFE01003FF8010001000100 +8F9D:10401020202029FC4400FE88425001FE7C20442045FC442044207C2044200020 +8F9E:00201E10F01011FF1000FE441024102811FF7C10441045FF441044107C104410 +8F9F:00407C20442045FC44007C88405041FE7C206420A5FCA42024203C2024200020 +8FA0:02001FF010101FF010101FF010101FF001003FF80820FFFE01003FF801000100 +8FA1:204010201020FDFC000044882850FDFE10201020FDFC10202020202040208020 +8FA2:10401020FE2011FC1000FE88925093FEFE20102039FC54209220102010201020 +8FA3:2020102011FCFC20002045FC2924FD2411FC1020FC7010A82124222240208020 +8FA4:04201E10E01022FE92005444FE2882FE00107C10047C68101010281044108210 +8FA5:08204A1052107EFE24004844BE2822FE22103E10207C3E10221022103E102210 +8FA6:421022082208FA3E078052942288FABE22882288729C2288248844884A889108 +8FA7:401020082788FABE028052942288FABE22882288729C2288248844884A889108 +8FA8:2010108810887CBE00802A941288FEBE128810887C9C11081108220824084008 +8FA9:2010120811087D3E00002B141108FD3E110811087D1C11481188210820084008 +8FAA:08204F10481048FEFF00084410287EFE42107E10407C7F1041107F1041100010 +8FAB:2010108810887D3E01402BD41088FCBE110813C87C1C100810C8230820084008 +8FAC:401022082108F93E000057D42088FCBE22882108711C22882288448848088008 +8FAD:0F20F010491022FEFE0014440828FFFE9510BD10837CBD10951089109510A310 +8FAE:411021082288FABE078051142108FABE27C82148711C25882548494845088208 +8FAF:421021082008FBBE000053942008FBBE20082388729C22882288438842888008 +8FB0:00003FFC200020002FF8200020003FFC24802488245024204410450886060400 +8FB1:00003FFC20002FF820003FFE288848504A308C0E0020FFFE0820042004A00040 +8FB2:04403FF824483FF824483FF800003FFC20002FF820003FFE288848504A308C0E +8FB3:082008207EFC08201C702AA8C8243FFC20002FF820003FFE288848504A308C0E +8FB4:0000EEFEAA80AA80EEBC0080FE8092FEFEA092B2FEB410A8FEA8112411321220 +8FB5:003803C07C00003803C03C0C007007807800010011F811001100290047FE8000 +8FB6:000020001000100000000000F000100010001000100010001000280047FE0000 +8FB7:0000200010001000000007FCF000100010001000100010001000280047FE0000 +8FB8:0000200017F8110801100120F13C110411041204120414281810280047FE0000 +8FB9:00402040104013FC00440044F044108410841104110412281410280047FE0000 +8FBA:0000200017F8108800880088F088108810881108110812281410280047FE0000 +8FBB:0040204010401040004007FEF040104010401040104010401040280047FE0000 +8FBC:0200210010801040004000A0F0A0111011101208140418021000280047FE0000 +8FBD:000023F81010102000400040F040104010401040104011401080280047FE0000 +8FBE:004020401040104007FE0040F04010A010901108120414041000280047FE0000 +8FBF:004020401040144404440444F44414441444144417FC10041000280047FE0000 +8FC0:000021FC1020102000200020F3FE102010201020102010201020280047FE0000 +8FC1:0010207813C0104000400040F7FE104010401040104010401040280047FE0000 +8FC2:000023F81040104000400040F7FC104010401040104010401140288047FE0000 +8FC3:000023F81000100007FE0080F10011F810081008100810501020280047FE0000 +8FC4:0100210011FE1200040001F8F010106010801104110410FC1000280047FE0000 +8FC5:00004FE02220222002200220EFA02220222422142214220C220450008FFE0000 +8FC6:004020401040125802E80748F248126812541244120411FC1000280047FE0000 +8FC7:00102010101017FE00100010F210111011101010101010501020280047FE0000 +8FC8:0000200017FE1080008000FCF084108410841104110412281410280047FE0000 +8FC9:000021FC11041104010401FCF104110011001100110012001400280047FE0000 +8FCA:00004FFE2040204007FC0444E44424442444245424482040204050008FFE0000 +8FCB:000027FC1040104000400040F3F8104010401040104017FC1000280047FE0000 +8FCC:000021FC1104110401FC0104F10411FC11041104110412141408280047FE0000 +8FCD:0040204017FC104002480248F24813F8104410441044103C1000280047FE0000 +8FCE:00002080133C122402240224F2241224122412B4132812201020282047FE0000 +8FCF:004020401040104007FE0040F04010A010901108124414241020280047FE0000 +8FD0:000023F810001000000007FCF04010801110120817FC12041000280047FE0000 +8FD1:0008201C11E01100010001FEF110111011101110121012101410280047FE0000 +8FD2:00802040104017FE00000000F1F011101110111012121212140E280047FE0000 +8FD3:000023FC1010111001100210F3FE103010501090111016501020280047FE0000 +8FD4:0008203C13C01200020003FCF204128812501220125014881504280047FE0000 +8FD5:00802080108011FC01200220F020102017FE1020102010201020282047FE0000 +8FD6:005020481048104007FE0040F04010A010901108120414041000280047FE0000 +8FD7:000023FC1040104000400040F7FE104010A01090110812041404280047FE0000 +8FD8:000023FC1020102000400040F0D0114812441444104010401040280047FE0000 +8FD9:00802040104017FC00100210F12010A0104010A0111012081408280047FE0000 +8FDA:00402040104017FC04440444F444144417FC1444104010401040280047FE0000 +8FDB:00902090109013FC00900090F09017FE10901090111011101210280047FE0000 +8FDC:000023F810001000000007FCF120112011201120112412241224141C280047FE +8FDD:008040802FFC2080008007F8E08020802FFC208420842094208850808FFE0000 +8FDE:0040204017FE108000A00120F3FC10201020102017FE10201020282047FE0000 +8FDF:000021F811081108010801F8F108112011101208120414041000280047FE0000 +8FE0:004020401040107E00400040F3FC120412041204120413FC1204280047FE0000 +8FE1:000023FC1204120403FC0200F2801284129812E012821282147E280047FE0000 +8FE2:000023FC1084108400840114F20811FC11041104110411FC1000280047FE0000 +8FE3:004822481248124807FE0248F248124812781200120013FE1000280047FE0000 +8FE4:0200220013FC144004400A58F2E81748126812501244120411FC280047FE0000 +8FE5:000023FC1204120402F40294F294129412F41294120412141208280047FE0000 +8FE6:04004400243C2FA404A404A4E4A424A424A428A428BC32A4210050008FFE0000 +8FE7:0040204017FC1444044407FCF444144417FC1444104010401040280047FE0000 +8FE8:008020801110120807FC0204F00013F812081208120813F81208280047FE0000 +8FE9:00802080110011FE02020424F020112811241222142210A01040280047FE0000 +8FEA:00404040204027FC04440444E44427FC24442444244427FC200050008FFE0000 +8FEB:00402040108013F802080208F20813F812081208120813F81208280047FE0000 +8FEC:00802040100017FC00400040F04013F81040104010401FFE1000280047FE0000 +8FED:00402240124013FC02400440F04017FE104010A0109011081208280047FE0000 +8FEE:01002100110013FE02800480F0F81080108010FC108010801080280047FE0000 +8FEF:01102110111011D002580254F252155218901090111012101410280047FE0000 +8FF0:004020501048104007FC00C0F0E0115011481244144410401040280047FE0000 +8FF1:0080404027FC240408080200E210226023802204220421FC200050008FFE0000 +8FF2:00402040104013FC00400040F7FE104010801110120817FC1204280047FE0000 +8FF3:000023F81010102000500188F60413F810401040104017FC1000280047FE0000 +8FF4:000023FC1204120402F40294F29412F41204120413FC12041000280047FE0000 +8FF5:000023FC120412F402040204F2F41294129412F4120412141208280047FE0000 +8FF6:0040204017FE1080010003FCF50419FC110411FC110411141108280047FE0000 +8FF7:0040224811481150004007FCF04010E011501248144410401040280047FE0000 +8FF8:02082110100017FC01100110F11017FE11101110121012101410280047FE0000 +8FF9:00402020102017FE00900090F294129214921110111012501420280047FE0000 +8FFA:00004FFE20A020A007FC04A4E4A424A4251C2604240427FC240450008FFE0000 +8FFB:0040208011F81610012000C0F120167C10841348103010C01700280047FE0000 +8FFC:00402040104017FC00400040F3F81000100013F81208120813F81208280047FE +8FFD:0020204013FC1204020403FCF200120013FE1202120213FE1202280047FE0000 +8FFE:000427E411041114011403D4F2541254155410941094110412141408280047FE +8FFF:0100210011FC1204040403E4F224122413E41224122413E410041028281047FE +9000:03F82208120813F802080208F3F8124412281210128813041204280047FE0000 +9001:020241043088101003FE0020F020102017FF10201050108811042A02440183FF +9002:007823C01040104007FE0040F04013F812081208120813F81208280047FE0000 +9003:00A020A014A412A801B000A0F1B012A814A4112011241224141C280047FE0000 +9004:0080208010FC110802900060F1981626102011FC1020122013FE1020282047FE +9005:003C23C01200120003FE0200F20012FC12841484148418FC1084280047FE0000 +9006:0208410821102FFE00400040E4442444244427FC20842100220054008FFE0000 +9007:021042502250225C0F7402D4E2542254225C23502E422442203E50008FFE0000 +9008:0040208013FC1204020402F4F2941294129412F4120412141208280047FE0000 +9009:00402240124013F804400040F7FC11201120112012241224141C280047FE0000 +900A:00104F9020902110021002D8E354225426922A92231222102A50242050008FFE +900B:004840442FFE204007FC0444E7FC244427FC244424442454240850008FFE0000 +900C:00402040107C1040004003FCF20413F4121413F4120413FC1204280047FE0000 +900D:0040224811481150004003F8F208120813F81208120813F8120812282A1047FE +900E:000027FE1090109003FC0294F294130C120413FC1204120413FC1204280047FE +900F:003823C0104017FC01500248F44613F01110113C110412141408280047FE0000 +9010:000023FC1040108001440668F0B01128166810A41124162010A0284047FE0000 +9011:00402050104817FC00400248F15010E011501248144411401080280047FE0000 +9012:011020A013F81048004803F8F240124013FC10C4114412541448284047FE0000 +9013:003C47E0242025FC042007FEE420242025FC2524252429342928302050008FFE +9014:004020A01110120805F60040F04017FC10401248124414441140288047FE0000 +9015:000027FC1000124804900248F00017FC1040104010401FFE1000280047FE0000 +9016:09104510221026520A520254E29026282A24324422422A82250050008FFE0000 +9017:000027FC1000100003F80208F20813F810001208111017FC1000280047FE0000 +9018:00802100120817FC01040100F3F81440104017FE104010A011102A0847FE0000 +9019:0080204017FC100003F80000F3F8100013F81208120813F81208280047FE0000 +901A:000047F8201021A0004007FCE444244427FC2444244427FC2444245454088FFE +901B:00004880257C22100D100110E17C23102D10211021102A7E240050008FFE0000 +901C:00004FF82080208007F00110E1102FFC200027F82408240827F850008FFE0000 +901D:0208421C226022400FC0027EE2C823482E48224822482A48248851008FFE0000 +901E:03F822081208120803F80000F7FC1040104013F81040104017FC280047FE0000 +901F:0040204017FC104003F80248F24813F810E01150124814441040280047FE0000 +9020:0040224013F81440004007FCF000100013F81208120813F81208280047FE0000 +9021:00802110120817FC00040110F208150411F812081590106011902E0847FE0000 +9022:010021F81308149000600198F606104013F8104013F8104017FC1040284047FE +9023:004040402FFE204007FC0444E7FC244427FC20402FFE2040204050408FFE0000 +9024:001022101110145402520092F0101114160412081210122010C0280047FE0000 +9025:000023FC1294129402F40294F29412F412941294129413FC1204280047FE0000 +9026:00004FFE2000200007BC04A4E4A426B425AC24A424A424A425AC50008FFE0000 +9027:01102248144410A001100208F40613F812081208120813F81208280047FE0000 +9028:0040204017FC104001500150F2E8144410E01150124814441040280047FE0000 +9029:0000208017FC111002480C46F3F810401150111017FE111012101410281047FE +902A:0110211017FC111001100FFEF00013F8120813F8120813F81208280047FE0000 +902B:000047BC2084252802100528E84027BC2084252822102528284450008FFE0000 +902C:00842084110817BC01080108F108110817BE11081108110811082A0847FE0000 +902D:0080204017FC140403F00210F21013F0120013F81208120813F8280047FE0000 +902E:0040204013F8104807FE0048F3F8144412481150124814441140288047FE0000 +902F:000047F8200823F800080FFEE040244422E8215022482444214050808FFE0000 +9030:02204220223E2F400280027CE30422082E7E2208220822082A28241050008FFE +9031:000047FC2444244405F40444E7FC240425F4251425F42404280C50008FFE0000 +9032:0140212013FE122006200BFCF220122013FC1220122013FE1200280047FE0000 +9033:0080204017FE1100020807FCF00413F8120813F8120813F8120812282A1047FE +9034:00402040107E104003F80208F3F8120813F810401FFE10401040284047FE0000 +9035:0040204013F81040004007FCF1101248144413F81040104017FC1000280047FE +9036:003823C0104017FC01500248F44410801FFE11081390106011981604280047FE +9037:000023F8120813F8020803F8F10013FC14941924124414A811102A0047FE0000 +9038:0100410021F0221004200FFCE444244427FC20A02130212A2222241E50008FFE +9039:0040204013F81040004007FCF11010A013F81040104017FC10401040284047FE +903A:0040204013F8104007FE0080F11013E0104411A81690108810C4280047FE0000 +903B:000047FC24A424A407FC0080E1F82208251020A0204021802E0050008FFE0000 +903C:000027FC100013F8020803F8F00017FC144417FC144417FC1404280047FE0000 +903D:0108210817FE1108004007FEF080110013FC1504190411FC1104280047FE0000 +903E:004040A0211022080DF60000E78424A427A424A427A424842494258850008FFE +903F:01F8210811F8110801F80000F7FE110013FC14A4112412541088280047FE0000 +9040:008027FC110013F804400BFCF00013F8120813F8120813F8120812282A1047FE +9041:001E23E01220122003FE0220F2FC128412FC128412FC148414FC280047FE0000 +9042:0110209010A017FC00800144F66810B01128166810A4112416A0284047FE0000 +9043:0040202013FC100001080090F3FE122012C81210122412C812101460298047FE +9044:004044442444244407FC0000EFFE208027FC24A424A424A424A4240C50008FFE +9045:00004FFC280428040FFC0910E8A02FFC28402BF8284037FC204050408FFE0000 +9046:0080204017FC111000A007FCF444104013F812481248126812501040284047FE +9047:000023F8124813F8024803F8F04017FC14441454147415941404140C280047FE +9048:000043F8220823F8020803F8E0002FFC204022782240254028FE50008FFE0000 +9049:00402040107C104003F80208F3F8120813F8120813F810A011102A0847FE0000 +904A:042042202FBE2440043C0784E488248824FE24882488288829A850108FFE0000 +904B:000027FC144413F8004003F8F24813F8124813F8104017FC1040284047FE0000 +904C:000027BC14A417BC000003F8F00017FE110011F8100810081050282047FE0000 +904D:0080204013FC1204020403FCF20013FC1354155415FC19541144110C280047FE +904E:01F8210811E81128012803FCF20412F4129412F4120412141208280047FE0000 +904F:000023F8120813F8020803F8F10013FC14441AA4120413F41014280847FE0000 +9050:000047BC2484248407BC0400E40027BC2404240427A82410242854448FFE0000 +9051:0040208013F8120803F80208F3F8100017FC104013F8104017FC280047FE0000 +9052:020841102FFE20A007FC04A4E4A42524261C240427FC240427FC50008FFE0000 +9053:02082110100017FC008003F8F20813F8120813F8120813F81208280047FE0000 +9054:0040204013F8104007FC0110F0A017FC104013F8104017FC1040284047FE0000 +9055:0040204013F8108807FE0000F3F8120813F8104013FC144017FE1040280047FE +9056:004040402FFE204007FC0514E4A425F4244425F424442454244850008FFE0000 +9057:004023F8124813F800400FFEF00013F812081248124810A011102A0847FE0000 +9058:011027FC111013F8011007FCF04013F8124813F8124817FE120812282A1047FE +9059:004020FC1324109800E00700F1F81240104017FC1040124413FC280047FE0000 +905A:00402140165C1444075C0444F7FC104017FC10081190106011981604280047FE +905B:0080477C2424252404A40554E648208027FC244427FC244427FC50008FFE0000 +905C:00064FB82090212002440278E3102E24227E221222542A92245050208FFE0000 +905D:000027FC14A414A407FC0040F150124814441150124814441040280047FE0000 +905E:001E47E0243C242005FE0522E53825E2251E250029782A48328A250650008FFE +905F:000023FC1204120403FC0240F22013FC1288125013FE122015FC1420282047FE +9060:0040204013F8104007FC0000F3F8120813F810C411A8129014881084280047FE +9061:0440225E1292101207D2011EF5521552155217DE115212121222142A284447FE +9062:000023F8120813F8020803F8F00017BC108414A4129414A412941108280047FE +9063:004023F8124813F8004007FEF00013F8120813F8120013F8120813F8280047FE +9064:000023FC124013F8024003F8F24013FC10041554155415541428281047FE0000 +9065:003C23C010041244012801FCF220102013FE102011241124112411FC280047FE +9066:03FC224417FE124403FC0000F3FC120413FC120413FC120413FC11082A0447FE +9067:004047FC21102FFE000003F8E20823F8220823F820402FFE204050408FFE0000 +9068:021042102F90221E07A40244EF9424142788248824942AA2294250008FFE0000 +9069:0080404027FC211000A007FCE44427FC244425F4251425F42404240C50008FFE +906A:0080211013F8121004A407FCF0A013181C4613901064139810601380280047FE +906B:021042102F90223E0FA40AC4EAA42F94220827082A943224224450008FFE0000 +906C:022042202FA0223C0FC40A90EA902F90221027282AA83244228450008FFE0000 +906D:00A02FFE10A017FC04A407FCF4A417FC100013F8120813F8120813F8280047FE +906E:0040402027FE240004880488E7FE2488248824F828002AA43252245250008FFE +906F:0000477E25102530074A059AE52C274C259A252A254A25A82B1050008FFE0000 +9070:02A822A817FC12AA04E60800F7FC1444104013F8124812481258284047FE0000 +9071:004043F822482FFE024803F8E04023F8224823F820802FFE211020E053188FFE +9072:07FC440427FC242004A80470E4A8250424A024FC252024202BFE282050208FFE +9073:0110211017FC111000400248F2481554104013F81040104017FC280047FE0000 +9074:00402248115017FC01500248F4441210139014BC1A901150117E12102A1047FE +9075:01104FFE20A027FC04A4051CE60427FC240427FC20102FFE211020B050008FFE +9076:0040204013F8104007FC0210F73812101F7C100017FC11201224141C280047FE +9077:07FC20A017FC14A407FC0080F7FE120815F4191211F0110410FC280047FE0000 +9078:0F3C49242F3C28A2079E0110E7FC211021102FFE21102208240450008FFE0000 +9079:000023F81090106007FC0124F6A8104017FC14A4151416EC14A414EC280047FE +907A:004023F8124813F800400FFEF00013F8120813F8120813F811101208280047FE +907B:000027BC14A414A407BC0110F0A017FC10401248124813F810401080290047FE +907C:004040402FFC20A0051403F8E60C2BFA220823F8204022482444294450808FFE +907D:0040407C204027FE044205F8E44427FC24C0272228D42B183074239250208FFE +907E:0210421023DE2528088407FCE04022482248255428E220402FFE50008FFE0000 +907F:0010478824BE248004A20794E43E28082F8834BE24882788248850008FFE0000 +9080:020044102F9028900F9E08A4EFC422143FD424082788289432A2214250008FFE +9081:01104FFE211023F8024803F8E24823F8204027FC245425F42414240C50008FFE +9082:04004F3C291432140F940AA8EAA82FBC2AC82A882FBE2A882A88318850088FFE +9083:008040402FFE2A12140C0120E7FC20802144266821B0266821A426A450408FFE +9084:000047FC24A427FC00000FFEE00023F8220823F8214423282D9051088FFE0000 +9085:002027FE100013FC020402F4F29413FC110811F8110811F8100017FE280047FE +9086:002423A810921514020805F4F00213F8120813F81208111017FC280047FE0000 +9087:07FC424824442FFE044406ECE55426EC244426EC255426EC2444240C50008FFE +9088:011042202D7C25C402440D7CE3442544297C23282528292A254652808FFE0000 +9089:008043F8220823F8020803F8E0402FFE2912220825F42912211021F050008FFE +908A:008047F8254824A807F80040EFFC2A1424882BF4210021F02210243050008FFE +908B:02484490224827F8052804C8E52827F8249026D0249026D4248C26C450008FFE +908C:0190461E222A2F8A031206AAEA4420A023182C46225021602250254850808FFE +908D:010043F0251020E0071C03F8E24823F8224823F820082FFE2248215052488FFE +908E:04004F8C35702A2004441A78EF9020242F7E20102F5429922F3050008FFE0000 +908F:00004FFE29122FFE02280424E97E2FC8227E25482F7E21482AFE2A4050008FFE +9090:0FBE40002FBE2CB20AAA0040EFFE29202FFC29242FFC2A282BB22A1E53808FFE +9091:00001FF0101010101FF000003FF82108210821083FF82008200220021FFE0000 +9092:0000FF7C08440848084808500848084808440844084408680850284010400040 +9093:00007E7C02440248424824501448084808441444144422684250804000400040 +9094:00007F7C01440148014801503F48214820442044204421682650384020400040 +9095:088811102220111008881FF010101FF000003FF8210821083FF8200220021FFE +9096:0800083E0822082449244928492449244922492249224F347928002000200020 +9097:00007F7C08440848084808500848FFC808440844084408680850084008400840 +9098:00007F7C08440848084808500848FFC808440844084408680850084028401040 +9099:1000083E08220024FFA4202820242024202220222022203420283F2000200020 +909A:1000107C10441048FE4822502248224842442444144408681450224042408040 +909B:0000007C7F44084808480850084808480844084408440F68F050404000400040 +909C:1000107C10441F482148215051488A480A440444044408681050204040408040 +909D:0800043E04223FA4202420282024202420222022202220342028402040208020 +909E:0800087C08447F48084808500848FFC808441444124422682150414080400040 +909F:1000087C0844FF48004800503C48244824442444244425684650444080400040 +90A0:0000147C12441248214821504048BE481244124412441268225022404A408440 +90A1:1000083E0822FFA4102410281F24112411221122112211342128252042208020 +90A2:00007FBE12221224122412281224FFE412221222122212342228222042208220 +90A3:00007E7C1244124812487E50124812487E4412441244226822504A4084400040 +90A4:0200077C38442048204820503FC8244824442444244424682450444044408440 +90A5:0800087C08447F48494808500848144814441444144425682650444080400040 +90A6:0800087C0844FF48084808507E4808480844FF44084410681050204040408040 +90A7:00003F3E002200240024FFA81224122412221222122222B42328422080200020 +90A8:0800083E0822FFA4082449284924492449227F220822083409280A200C200820 +90A9:0800087C0844094849484A504C48884808440844144412682150214040408040 +90AA:00007FBE022222242224222842247FE406220A2212222234422882200A200420 +90AB:100010F81088FC8810F810007DFC11241124FF2411FC110021002102410280FE +90AC:1000203E7E22422442244A28442440247F22012201221D34E12841200A200420 +90AD:1000103E20223F24412481283D242524252225223D222534012801200A200420 +90AE:0800087C08447F4849484950494849487F4449444944496849507F4041400040 +90AF:2200223E22222224FFA42228222422243E2222222222223422283E2022200020 +90B0:0800083E102222244124FFA800A400247F22412241224134412841207F204120 +90B1:0000033E3C222024202420283FA42224222222222222223427A8F82040200020 +90B2:1000083E0A2202241224132854A454A4542298221922113431284F2080200020 +90B3:0000FF7C08440848104814503248514890441044104400680E50F04040400040 +90B4:00007FBE0822082408247FA848A448A454A252A262A240B440A840A042A04120 +90B5:00007F3E1122112421242528422480243F2221222122213421283F2021200020 +90B6:1200123E122212241224F3A812241224122212221222323452A8932012200020 +90B7:0000FF7C204420483C482450244834484C444C44444445685550654043400040 +90B8:010007BE7C2244244424442844247FA4442244224422423442A852A069A044A0 +90B9:2000207C3E44424884480850FE48024802447E44024402680250FE4002400040 +90BA:1400143E142214A494A455285524562414221422142217B4F828402000200020 +90BB:0800087C14441248214848D0844804487F440144224414680850044004400040 +90BC:00007FBE402240247FA4442844245F24442244227FA2403440287FA000200020 +90BD:0800087C7F44084808480850FFC80048084408447F44086808500F40F0404040 +90BE:0800487C48447F48484888500848FFC818441C442A4429684950884008400840 +90BF:0800083E08227F2408240828FFA4022402227FA202222234122802200A200420 +90C0:0800083EFFA2142422244128BEA40024FFA2102220227F34012801200A200420 +90C1:0800083EFF22102410243F2821246124BF22212221223F342128212025202220 +90C2:1000083E0022FFA40824112821247E240422092212222434CC2812202120C0A0 +90C3:0800087C144422484148BED0004800483E4422442244226822503E4022400040 +90C4:0100323E0C22122469240828FFA410242422242248228A3411283F2011200020 +90C5:0000FFBE0822102422244128FFA408A4082208227F22083408280FA0F8204020 +90C6:0800083E0822FFA4082408287F24002400227F224122413441287F2041200020 +90C7:2000203E7F22412481247928492449247922492249227934412801200A200420 +90C8:0200073E7822402440247FA8402440245F2251225122513451289F2091200020 +90C9:0000773E22222224222422282224F7A422222222222222342228422042208220 +90CA:1000087C0044FF48004824504248814824441444084414682250424080400040 +90CB:0800083E10227F24412441287F24412441227F224122413441287F2041200020 +90CC:100010F810887C8810F81000FDFC0124112411247DFC110011001D02E10240FE +90CD:0800103E3F222124292425282524FF2421222922252225342128412045208220 +90CE:0800043E3F22212421243F28212421243F222022242222342528292030202020 +90CF:0800083E0822FFA40824492829242A24FFA20822082214341228212041208020 +90D0:0800083E142222244124BEA800240024FFA21022102222344128FF2041200020 +90D1:2200123E14227F24082408280824FFA408220822142212342128412080200020 +90D2:000020F810887C8844F844007DFC452445247D2441FC510049005502650240FE +90D3:00007FBE48A208247FA41028142424247FA20422042207B4FC28442004200420 +90D4:008001DE771211121114251425D8751415125512551227DA201450108FF00010 +90D5:0400053E04A204247FA4442844247524552255225522523452A8A6A089A010A0 +90D6:00007FBE002200243F242128212421243F22002221221134122807A078202020 +90D7:30800D3E0622192460A408287FE4142424227FA2A4A224B426A8252004200420 +90D8:00003E3E22222224222422283E24002400227F2241224134412841207F204120 +90D9:0A00093EFFA2082408247F28492449247F22492249227F344928492049204320 +90DA:0000FFBE082208247F2411281124FFE4002200227F224134412841207F204120 +90DB:02000F3EF022012491244A280024FE24042208220F22F8344828082028201020 +90DC:0800483E48227F24482488280824FFA4002200227F224134412841207F204120 +90DD:0800083E7F22082408240828FFA412241222532252A292B4222822204A208420 +90DE:1000087C7E44424842487E50424842487E4451444A4444684450524062404040 +90DF:0800083E0822FFA408242A282A242A245D2288A2082214341228212041208020 +90E0:00007FBE082208247F24492849247F24492249227F220834682818202620C120 +90E1:00007F3E11221124FFE4112811247F24202220227F22A134212821203F202120 +90E2:00007F7C4144414841487F5000487F48084408447F44086808500F40F0404040 +90E3:0800087C7F44084808487F50414882483C44044408440F687850084028401040 +90E4:1400127C214449480848145022484148BE4422442244226822503E4022400040 +90E5:00007E7C424442487E48425042487E48424442447E4400682450224041408140 +90E6:00007FDE001200127BD44A544A584A546B525AD24A524A5A4A544A504A505AD0 +90E7:00003E3E222222243E2400287F2441244922492249224934142812202120C120 +90E8:1000083E7FA2002421241228FFE4002400223F222122213421283F2021200020 +90E9:61001A3E0C223224C9240828FFA410243F226122BF2221343F28212025202220 +90EA:0800083EFFA208247F240928FFA409247F221022FF22213472280C203320C0A0 +90EB:1000203E7F22492449247F28492451247F2224224422FFB40428042004200420 +90EC:0800083EFFA208247F240828FFA400247F2241227F2241347F28412045204220 +90ED:1000087CFF4400487E4842507E4800487E44044408440F68F850084028401040 +90EE:00003FBE24A224A42EA424A83FA420A42EA22AA22AA22EB420A840A042A08120 +90EF:0800093E49224A2488241428222449248822492249228A3414282220412080A0 +90F0:0000FC1E48124BD278544A5449587954489248925C92E95A49540A5008100810 +90F1:2100113E122200247FA41228122412241222FFA2122212341228122022204220 +90F2:0800087C0844FF4808482A502A482A485D4488441C442A684950884008400840 +90F3:1000677C414441487748415041487F4814441444144414682550264044408040 +90F4:1100111E111211127BD41114111833143B9255525512991A1114111011101110 +90F5:02000F3E78220824FFA42A282A24FFA42A222A22FFA2083408280F20F0204020 +90F6:200010F87C88008844F8280001FCFF24012401247DFC4500450045027D0244FE +90F7:200023DE22524A524BD4F254125823D44A12FA920A5212DA1354221040108010 +90F8:4100223E14227F24492449287F24492449227F2208220834FFA8082008200820 +90F9:00007E7C42447E4842487E5042487E4814441244FF4410682850244042408040 +90FA:212422483D244400A8F8108820F8C80011FC3D24452485FC290011042104C0FC +90FB:3F00A13EBF22A124BF24A128BF248024FFA20022492249349228922049204920 +90FC:1000103E7F222124FFE400287F2441247F220822FFA208348828FFE008200820 +90FD:080008BE7EA209240A24FFE8082410243F226122A1223F34212821203F202120 +90FE:00007FDE40125F9250945F9450985F9444127FD24912591A4614491050907FD0 +90FF:00007F7C494449487F4840505F48514851445F4451445F68515051409F401140 +9100:2200223EFFA222242A240828FFA4102420223F226122A134212821203F202120 +9101:140014BEF722142434A4D3A800247F2441227F2241227F344128412045204220 +9102:0000773E55225524772400287F240024FFA220223F220134012801200A200420 +9103:0800143E22224124BEA4002878A44AA44AA27AA24AA24AB47AA848A04AA05920 +9104:0000FF7C144414487F48555055487F48084408447F44086808500F40F0404040 +9105:010007BEF82208247F24492849247F240822FFA288A28AB4BEA880A082A08120 +9106:0000FFBE88A20824FFA408287F2449247F2249227F220834FFA8082008200820 +9107:1000179E109220922FF46414A41827D4291221122FF2211A2294225024502810 +9108:0A00747C15445248224821504148BE48084408447F4408681450124022404040 +9109:2100209E23D24A524A54F3D4125822544BD2FA120A92125A12D4235042108010 +910A:200027FE22524A524BD4F254125823D44A52FA520A7217DA1054205040508050 +910B:28004B7C494449486B48495049487F4808447F44014432680C50124061400040 +910C:0800043E7FA244245F2445287FA445245F2244225F225134512851205F209120 +910D:0000FFBE80A200247F2441287F2441247F2210220822FFB400282220412080A0 +910E:0800103E7F2241247F2441287F2441247F22102208222934A2A8A2A01E200020 +910F:00007FBE40225F2440247FA855245224592250A242227FB452284A2082200620 +9110:1000083EFFA2102422247C28082411247FA200A27F2249347F2849207F204120 +9111:00007FBE122252A433241228FFE400243F22212221223F34212821203F202120 +9112:1000103E3FA248A42AA43EA810A4252452223FA248A2AAB43EA810A025204220 +9113:0800103E7F2241247F2441287F2441247F220A220922FFB40828142022204120 +9114:1000203E7F22412441247F2840247FE440227FA200A2AAB4AAA800A005200220 +9115:2080211E23D24A524A54F3D4125822544BD2F8120A52139A1214225041D08010 +9116:00003F3E212221243F2400287FA440A47FA240A27FA240B47FA81220212040A0 +9117:1000087CFF4400487E4842507E480048FF448144BD44A568BD50814085408240 +9118:02003FDE22122F9222943FD422982F9422122F922A922F9A4A944F908A900990 +9119:1F00113E11221F2404247FE804243FA420A22EA22AA22EB420A83FA020A00020 +911A:2200223EFFA222247F2441287F2441247F220822FFA208341428222041208120 +911B:4900927C494400487F4849507F4849487F440844FFC41C682A50494088400840 +911C:0800043E7FA2522452247FA852A452A47FA2522252225BB4522852A09B201220 +911D:0000773E11225524332455280C243324C4A2182262220CB4712806201820E020 +911E:2200227CFFC422483E4808507F4849487F4408447F4408687F5008400F40F040 +911F:0800FFBE08227F2449247F2849247F2408A2FFA20222FFB4422822200A200420 +9120:7F00083EFFA288A46B2408286B2400247F220022FFA220343F2801200A200420 +9121:10007F3E41227F2441247F2840247FA440227FA208A27EB41DA82A20C9200820 +9122:00007FBE042227242424FFA820243FA440227FA200A2AAB4AAA800A005200220 +9123:08007F3E22221424FFA400287F2441247F2241227F220834FFA8082008200820 +9124:7E00427C7E4442487E480050FF48A548FF4400447E4402683450084014406240 +9125:1000203E7F2241247F2441287F2440247FA240227FA200B4AAA8AAA080A00320 +9126:2000203E7FA2D52455245528FFA4552455225522FFA200346A28552095200020 +9127:0500723E12A2512421245EA880A43F24212221223F222134122807A078202020 +9128:49202A3E7F4449A85D106B2849461FF010101FF000003FF821083FF820021FFE +9129:00007F3E01223F2401247F28002477242522F7220222FFB4422822202A200420 +912A:1200FF9E12927F9252147FD422587F54A1D23F1221123F1A21143F1012102110 +912B:4100223E0022FFA488A4AAA89CA488A4FFA200227F2241347F2841207F204120 +912C:03C07C1E289215123F14211421183F94209220923FD2205A55545550A1500090 +912D:2200147CFF4414487F48555063485D4841447F440844FF681450224041408040 +912E:1000EFBEA4A294A4AAA4C92810247F2441227F2241227F3441287F2022204120 +912F:2200143EFFA208247F240828FFA449242A22FFA200227F34412841207F204120 +9130:0800493E2A22FFA42A24492888A44124412277A29122553427A8412081200120 +9131:0F00F83E49222A24FFA42A28492480A47F22492249227F34492849207F204120 +9132:0000F7BE94A294A4F7A400287F2449247F2249227F220834FFA8082008200820 +9133:00007F3E55225524772414287724552455227722552255347728542014A00FA0 +9134:1400557C36441448FF48225014487F4808447F440844FF681C502A4049400840 +9135:00007F3E41227F240024F7A894A4F7A408220822FFA21C342A28492088A00820 +9136:04000B1E30D2DF3200147FD455584E547FD200123F92209A3F9420903F902090 +9137:12007FBE52A27FA452A47FA800247FA400227FA240A27FB4212812200FA0F020 +9138:2200FFBE22227F24552455287F240024FFA290A23E22223452280C201820E020 +9139:FC004BBE78A24AA479244D28FAA40CA407A2F82228A24D341A282920C8A00820 +913A:0800043E7FA24A245F244A287FA444245F2255225F2255345F288020912020A0 +913B:2200F7BE2222F7A4552488A87F2408247F2249227F2249347F280820FFA00820 +913C:2200773E2222F7A42224552888A47F2441227F2241227F3441287F2022204120 +913D:04007FDE40125F9254945F9454985F9444125F9244127FDA5494AF5084103FD0 +913E:7F80083E3F2221243F2421287FA448A4252252A20E2210343F2851200E207120 +913F:2200FFBE222277245524772800247F2449227F2249227F340828FFA008200820 +9140:2200221EFF9222123E1441145D58D59455125552DD5240DA001454904A508A50 +9141:3E00421EFF9240927F944494771844543FD24212FF92489A7F941A102950C7D0 +9142:1080529E7BD29492FBF431945AD8949400123F922092249A24940B1010906050 +9143:00007FCE040AFFEA842A358A040C358A000A000AEEEAAAAAAAACAAA8EEE8AAA8 +9144:11007FDE11127BD24A547BD4141812143FD224127F92A41A3F9424103FD02010 +9145:44407FDE12123FD26214BFD422183FD422123FD220127FDA51546ED04A504ED0 +9146:2A007F3EAAA2FFA4AAA4FFA8AAA4FFA40022FFA200227F3441287F202220FFA0 +9147:52807BDE9492FBF231945AD494983F9420923F9220923F9A20943F9011102090 +9148:7BC0001E7BD24A526B544A5404187FD44A127FD24A527FDA52545B90525099D0 +9149:0000FFFE044004407FFC444444444844503C600440047FFC400440047FFC4004 +914A:0000FF80147E14107F105510551055105710611041107F10411041107F504120 +914B:101008100820FFFE044004407FFC44444844503C60047FFC400440047FFC4004 +914C:0020FE202820287CFE44AA84AA04AA44AE24C2148214FE0482048204FE288210 +914D:0000FE0028F82808FE08AA08AA08AAF8AE88C2808280FE8082828282FE7E8200 +914E:0008FE0828082808FEFEAA08AA08AA08AE48C2288228FE0882088208FE288210 +914F:0020FE20282028A0FEACAAB4AAE4ABA4AEA4C2B482A8FEA282A28282FE7E8200 +9150:0000FE7C28102810FE10AA10AA10AAFEAE10C2108210FE1082108210FE108210 +9151:0000FEFC28202820FE20AA20AA20ABFEAE20C2208220FE2082208220FEA08240 +9152:00004FFE20A020A007FC84A444A454A4151C2604E40427FC2404240427FC0404 +9153:010002800C603118CFE600400080FFFE04803FF82488287830083FF820083FF8 +9154:0040FE4029F82848FE88AA8AAB0AAA26AE20C22083FEFE2082208220FE208220 +9155:0008FE1C28F02810FE10AA1CAAF0AA10AE10C21E82F0FE1082128212FE12820E +9156:0010FE1028102810FEFEAA92AA92AA10AE28C2288228FE288248824AFE8A8306 +9157:0000FE4428442828FEAAAAAAAA92AA92AEAAC2AA82A6FEC682828282FEFE8202 +9158:0000FE7828482848FE48AA86AB00AAFCAE44C2448228FE2882108228FE448382 +9159:0008FE8828482848FE08AA88AA48AA48AE08C20E82F8FE0882088208FE088208 +915A:0008FE2828282828FE44AA44AA82AB7CAE24C2248224FE2482448244FE948308 +915B:0000FEFC28002800FE00AAFEAA50AA50AE50C2508250FE5282528292FE8E8300 +915C:0020FE20282028FCFE20AA20AA20ABFEAE20C2508250FE4882888284FF048202 +915D:0000FE00287C2800FE00AA00AAFEAA10AE10C2208220FE44824282FEFE428200 +915E:0020FE2028202820FE20ABFEAA20AA20AE20C2508250FE50828882C8FF248202 +915F:0010FF90141014107F1E551055105510577C614441447F44414441447F7C4144 +9160:0000FE0028FE2804FE04AAF4AA94AA94AE94C29482F4FE9482048204FE148208 +9161:0020FE10281028FEFE82AA84AA40AA44AE48C2508260FE4282428242FE3E8200 +9162:0040FE402840287EFEA0AAA0AB20AA3CAE20C2208220FE3E82208220FE208220 +9163:0044FE4428442844FEFEAA44AA44AA44AE44C27C8244FE4482448244FE7C8244 +9164:0010FE1028102810FEFEAA10AA10AA10AE7CC2448244FE4482448244FE7C8244 +9165:0004FE1E28F02810FE10AA10AAFEAA10AE38C2348254FE5282908210FE108210 +9166:0020FE2828A428A0FEFEAA40AA40AA7CAEA4C2A482A8FEA882908328FE448282 +9167:0020FE1028FE2882FF0CAA08AA08AAFEAE08C2488228FE2882088208FE288210 +9168:082008287F240820FFFE0020FFA414247F245528632841107F12412A7F464182 +9169:0020FE20287E2882FF44AA28AA10AA20AE40C2FE8342FE4282428242FE7E8242 +916A:0020FE20283C2844FEA8AA10AA28AA44AE82C27C8244FE4482448244FE7C8244 +916B:0010FE1028282828FE44AA82AA7CAA10AE10C210827CFE1082108210FEFE8200 +916C:0004FE4428542854FE54AA54AADCAB74AE54C2548254FE5482548254FE848304 +916D:0020FE2028FE2820FE40AA7CAA44AAC4AF7CC2448244FE7C82448244FE44824C +916E:0000FEFE28822882FEBAAA82AA82AABAAEAAC2AA82AAFEBA82828282FE8A8284 +916F:0080FE82288C28F0FE82AA82AA7EAA00AEFCC2848284FEFC82848284FEFC8284 +9170:0010FE502850287CFE90AA10AA10AAFEAE28C2288228FE28824A824AFE868300 +9171:0840488029FC1A482830C9C00800FFFE04803FF82488287830083FF820083FF8 +9172:0000FE7C28442844FE44AA7CAA00AA00AEFEC2108210FE7C82108210FEFE8200 +9173:0020FE4428F82810FE24AAFEAA02AAFCAE84C2FC8284FEFC82848284FE948288 +9174:0010FE1028282828FE44AABAAA10AA10AEFEC2108258FE5482928312FE508220 +9175:0020FE2229FA2824FE24ABFEAA10AA20AFFCC2888310FEFE82108210FE508220 +9176:0040FE40287E2880FF7CAA44AA64AA54AEFEC24482A4FE9482FE8204FE288210 +9177:0010FE502850287CFE50AA90AA10AAFEAE00C200827CFE4482448244FE7C8244 +9178:0010FE1028202844FEFEAA28AA44AAA2AE3CC2448244FEA882108228FE448282 +9179:0004FE1E28E02822FE92AA54AA40AA08AFFEC2088288FE4882488208FE288210 +917A:0014FE1228FE2810FE10AAFEAA92AA92AEFEC2928292FEFE82928292FE928286 +917B:000EFEF028222892FE54AA00AA7CAA08AE10C21082FEFE1082108210FE508220 +917C:0020FE1029FE2820FE48AA84ABFEAA02AEA8C2A882A8FEA882A882AAFF2A8206 +917D:0000FEFE282828AAFE6CAA28AAFEAA80AE80C2808280FE8082808300FF008200 +917E:0000FBFE20002000FBDEAA52AA52AA52DB5A8AD68A52FA528A528A52FA528AD6 +917F:0020FE1028FC2884FE84AAFCAA84AA84AEFCC2A282A4FE9882908288FEC48282 +9180:0050FE48288028FEFF90AA90AAFCAA90AE90C2FC8290FE90829082FEFE808280 +9181:0000FEFC28042804FE7CAA04AA04AAFEAE10C2928254FE3882548292FE508220 +9182:0048FE4828482848FEFEAA48AA48AAECAEDCC35A8248FE4882488248FE488248 +9183:0020FE2029FE2850FEA8AB26AAF8AAA8AEA8C2F882A8FEA882F882AAFE22821E +9184:0040FE4028FE2882FF42AA7AAAA2AA22AFFEC22282AAFEAA82FA8202FE148208 +9185:0020FE1028FC2800FE84AA48AA00AAFEAE00C20082FCFE8482848284FEFC8284 +9186:0028FE24282E28F0FE28AA12AA2AAAD6AE28C22E82F0FE2482288212FE2A82C6 +9187:0020FE1028FE2800FE7CAA44AA7CAA00AE7CC2088210FEFE82108210FE508220 +9188:0020FEA228A22924FE50AA88AB04AA22AE20C2A482A4FF2882508288FF048202 +9189:0040FE2029FE2800FE88AA88AB54AA22AE00C22083FEFE2082208220FE208220 +918A:0000FEEE282228AAFE44AAAAAB12AA00AEEEC22A82AAFE4A824482A4FF2A8210 +918B:0048FE48284829FEFE48AA48ABFEAA00AEFCC2848284FEFC82848284FEFC8284 +918C:0000FEFC28842884FEFCAA84AA84AAFCAE00C2908292FEF482988292FED2828E +918D:0000FE7C2844287CFE44AA7CAA00ABFEAE10C210825EFE50825082B0FE9E8300 +918E:0008F80C200A23FEFA08AA08AAE8AA0ADA0A8AEC8AACFAA88AEA8A1AFA268C42 +918F:0020FE2028FA2824FE28ABFEAA20AA40AEFCC3448244FE7C82448244FE7C8244 +9190:0100F93C212427E4F924A93CA924ABA4DAA48ABC8AA4FAA48BA48844F8548888 +9191:0000FEFC28142850FE5CAA50AA7EAA80AE7CC244827CFE44827C8244FE44824C +9192:0000FE7C2844287CFE44AA7CAA10AA50AE7CC2908210FE7C82108210FEFE8200 +9193:0010FE1028FE2892FE92AA28AA28AA4AAE86C30082FEFEAA82AA82AAFEAA83FE +9194:0620382008A47EA819202C504A880904FFFE04403FF82848303827C820083FF8 +9195:0020FE1029FE2800FE7CAA44AA7CAA00AEFEC2828282FEFE82828282FEFE8282 +9196:0000FE7C28442844FE7CAA44AA44AA7CAE00C2FE82AAFEAA82AA82AAFFFE8200 +9197:0008FEEC282828AAFE44AA44AA84AB7AAE28C22882FEFE288228824AFE4A8286 +9198:0010FE10287E2810FE10AAFEAA20AA42AEFEC20082FEFEAA82AA82AAFFFE8200 +9199:0050FE9628922892FED6AA92AA92AAFEAE10C2FC8244FE4482288210FE2882C6 +919A:0008FE4A292A28ACFE88AA3EAA08AB98AE9CC2AA82CAFE8882888340FE3E8200 +919B:0044FE4428FE2844FE10AA28AA44AA82AE7CC2108210FE7C82108210FEFE8200 +919C:0010FE2028FE2892FE92AAFEAA92AA92AEFEC2208224FE5A825E8290FE92830E +919D:0044FE24282828FEFE10AA7CAA10AAFEAE20C220827CFE5082908310FEFE8200 +919E:0000FE7C28542854FE6CAA44AA7CAA00AE00C2FE82AAFEAA82AA82AAFFFE8200 +919F:08202AA44D28145022887FFE4002BFF404803FF82488287830083FF820083FF8 +91A0:0010FE10287C2854FE54AAFEAA28AA44AE82C30082FEFEAA82AA82AAFFFE8200 +91A1:0040FE2029FE2902FE50AA88AB44AA40AEFEC320823CFE20823E8220FE208220 +91A2:0020F82023FC2040F880A9F8AA88AC88D8F8880089FCF95489548954FBFE8800 +91A3:0020FE1028FE2890FEBCAA94AAFEAA94AEBCC29082BCFEA482A482A4FEBC8324 +91A4:083E4BC42A4829281BFE2908C8A80810FFFE04403FF82848303827C820083FF8 +91A5:0000FEFE282828FEFEAAAAAAAAFEAA00AE7CC20082FEFE1082548292FE508220 +91A6:0010FE20284428FEFE44AAAAAAEEAA10AE28C25482AAFE5082248248FE108260 +91A7:0000FBFE2200227CFA44AA44AA7CAA00DAEE8AAA8AAAFAAA8AEE8A00FBFE8800 +91A8:0020FE1028FE2828FE92AAAAAA82AAFEAE10C2FE82A2FEAA82BA8282FE8A8284 +91A9:0028FE2828FE2828FEFEAAAAAAFEAAAAAEFEC200827CFE44827C8244FE7C8244 +91AA:0000FEEE282228AAFE66AAAAAA10AA28AE44C3928220FEC8823282C4FE1882E0 +91AB:7F7848485E8664785F484A307F480084FFFE04403FF82848303827C820083FF8 +91AC:0440247C3CA805507C2825FE44888058FFFE04403FF82848303827C820083FF8 +91AD:0028FEAA286C2828FEFEAA44AA28AAFEAE10C27C8210FEFE82108228FE448282 +91AE:0028FE242840287EFEC8AB48AA7EAA48AE48C27E8248FE48827E8240FEAA832A +91AF:0040F82023FE2040F884A9FEA8A8A8AAD9268A0089FCF95489548954FBFE8800 +91B0:0000FEFE282828FEFEAAAAFEAA00AA7CAE44C27C8244FE7C821082FEFE108210 +91B1:0024FBA820922514FA08AC04ABBAA8A8D8C68B808A3CFB8488A88890FAA88944 +91B2:0028FEFE28AA28FEFEAAAAFEAA00AAFEAE80C2BE8280FEFE82A882AAFEA48332 +91B3:0000FEFE28AA28FEFE10AAFEAA10ABFEAE44C22882FEFE1083FE8210FE108210 +91B4:0028FEFE28AA28FEFEAAAAFEAA00AAFEAE00C2FE8282FEFE82448228FEFE8200 +91B5:0040F87C204023FEFA42AA78ABC4AA3CDA008BFE8A40FBA48A588DB4FC5289B0 +91B6:0010FE1028282844FE82AA7CAA00AAEEAEAAC2AA82EEFE44824482AAFEAA8312 +91B7:0010FEFE28442828FEFEAA00AA7CAA44AE7CC244827CFE2082948342FE44823C +91B8:0020FE1029FE2848FE84AB4AAAFCAA48AEFCC24883FEFE5482C88354FE628240 +91B9:0000FE7C281028FEFE92AA54AA10AA54AE00C2FE8210FEFE82AA82AAFEAA8286 +91BA:001CF9E0202023FEF820A9FCA9ACA974D9FC882089FCF8208BFE8800F9548A2A +91BB:0020FBFE202021FCF800ABFEA802A9FCD8208BFE8800FBFE88048BBEFAA48B8C +91BC:0110F91027FC2110F9F0AA08AAEAAEACDAA88AAA8EEAFA0688008AA4FA528C52 +91BD:0000F9FC202023FEFA22A9ACA820A9ACD8008BEE8AAAFAAA8AAA8AAAFBEE8AAA +91BE:0040F82023FE2248FBFEAA48AAECAB5ADA488B248AA8FBFE8A708AA8FD268820 +91BF:0020FBFE224823FEFA48AAECAB5AAA48DA208A448A78FA148AFE8A10FA548CB2 +91C0:0010FEFE280028EEFEAAAAEEAA44AAFEAE44C2FE8244FEFE825082CAFF648242 +91C1:2FEC48246BAC48246BAC4AA4FFFE92921D7010101FF004401830EFEE04201860 +91C2:001EFBE021222094FBFEAA52ABFEA804DBC48A7E8BC4FA548BCC8A84FAD48B48 +91C3:03DEF80023DE2252FB5AAA52A820ABFEDA508BFE8A52FBFE8A928ADCFA928CCE +91C4:0020FBFE224823FEFA48AAECAB5AAA48DA508BDE8A50FBDC8A508BDEFA508C50 +91C5:03DEFA5223DE2000FBFEAA00AAC8AA4EDBEA8AB28AEAFAAA8AEA8AB4FDE4882A +91C6:001000F83F00010011100910092001007FFC03800540092011102108C1060100 +91C7:001000F83F00020011100910082001007FFC03800540092011102108C1060100 +91C8:0C00F1FC1104550439041104FDFC112031203920552051109110110812041402 +91C9:0C20F0201020542039FC1124FD241124312439FC552451249124112411FC1104 +91CA:0C00F3FC1104548838501020FCD81326302039FC5420502093FE102010201020 +91CB:0C00F1FC115455FC382011FCFC2013FE3088385055FC502093FE102010201020 +91CC:00003FF8210821083FF8210821083FF8010001003FF8010001000100FFFE0000 +91CD:001000F83F000100FFFE01001FF011101FF011101FF001003FF80100FFFE0000 +91CE:00007F7C490449287F104908497E7F12081408107F10081008100F10F0504020 +91CF:00001FF010101FF01010FFFE00001FF011101FF011101FF001001FF001007FFC +91D0:08203E7E08A47F281C102A2849443FFE20002FF828882FF828884FF840809FFC +91D1:0100010002800440082010102FE8C10601003FF80100111009100920FFFE0000 +91D2:10001000280024004200BC0010001000FE0010009400580050001E00F0004000 +91D3:10801080288024804280BC8010801080FE8010809480588450841E84F07C4000 +91D4:1000100028FE24044208BC1010201020FE4010409480588250821E82F07E4000 +91D5:100011FC280424084210BC2010201020FE2010209420582050201E20F0A04040 +91D6:1000100029FC24444244BC4410441044FE4410449444588450841F04F2284410 +91D7:10041004280424444244BC4410441044FE4410449444580450041E04F0144008 +91D8:100010002BFE24204220BC2010201020FE2010209420582050201E20F0A04040 +91D9:10401040284024404240BC5010481044FE4410409440584050401E40F0404040 +91DA:108010802880248043F0B89010901090FC9010909490589251121D12E20E4400 +91DB:102010202820242042FCBC2410241024FE2410449444584450841E84F1284210 +91DC:044008201850248803000CC03030C00E1FF0010001003FF80100111009207FFC +91DD:10201020282024204220BC2013FE1020FE2010209420582050201E20F0204020 +91DE:10801040284024204220BC2010201050FE5010509448588850881E84F1044202 +91DF:10001010289024904090B89010901090FC9010909508590851081E04E2044402 +91E0:100010F0289024904290BC9010901090FE9010909490589250921F12F10E4200 +91E1:0820101021084284044008203018CFE6010001003FF8010011100920FFFE0000 +91E2:1000100029FC24444248BC481050105EFE4210429482588250821F02F1144208 +91E3:104010402840247C4284BC8411041044FE2410249404580450041E04F0284010 +91E4:08040804140822104120BE44080408087F10082249422A0408080F10F02040C0 +91E5:10201020282024204020B8A810A410A4FD2211229622582050201C20E0A04040 +91E6:1000100028FC24844284BC8410841084FE8410849484588450841EFCF0844000 +91E7:11041124292425244124B92411241124FD2411249524592451241E24E2044404 +91E8:100010FC280424084210BC20102011FEFE2010209420582050201E20F0A04040 +91E9:100011F0291025104110B91011901150FD5011109510591251121E12E20E4400 +91EA:100010FC282024204220BC20102011FEFE2010209420582050201E20F0A04040 +91EB:100010FC280024004200BDFE10401040FE8010FC9404580450041E04F0284010 +91EC:100010FC282024204220BC20102011FEFE2010209420582050201E20F0204020 +91ED:1000100028FC24204220BC2010201020FE2010209420582050201E20F1FE4000 +91EE:101010102810241043FEBC1010301030FE5010509490591050101E10F0504020 +91EF:104010202820240043FEBC8010801080FE8010809480588050801E80F0FC4000 +91F0:1000100029FC24244024B8A410A410A4FD2410249424584450441C84E1144208 +91F1:10201020282024204220BDFE10201020FE2010509450585050881E88F1044202 +91F2:1000100028FC24844284BC84108410FCFE8410809480588250821E82F07E4000 +91F3:10401040288024FE4100BA0010FC1008FC1010209440588051021D02E0FE4000 +91F4:1050104828482440425EBDE010401040FE4010409420582250121E0AF0064002 +91F5:100011F8288824C842A8BCA810881050FE5010509420582050501E88F1044202 +91F6:1020102028202520412CB934116413A4FD2411349528592251221D02E0FE4000 +91F7:10201020282024204020B82011FC1020FC2010209420582050201C20E3FE4000 +91F8:104010402840247C4244BC8410C41124FE1810089410581050201E40F0804100 +91F9:104010402840244043FEB88810881088FC8811089490585050201C50E0884304 +91FA:1008103C29E024204020B820102013FEFC2010209420582050201C20E0204020 +91FB:104010402840244041F8B84810481048FD4810C8944858A850AA1D0AE2064402 +91FC:1000100029FC24444044B94410C41044FC641054944C588650841D04E2284410 +91FD:1008101C29F025504150B95011501150FD5011489548594851441E44E2424400 +91FE:100011FE280824884088B888110811FEFC1810289448588851081E08E0284010 +91FF:1004100E28F024804280BC8010FE1088FE8810889488588850881F08F1084208 +9200:1000100029FC25244124B92411241124FDFC11009500590051021D02E0FE4000 +9201:10401020282025FE4240BC401040107CFE4410449444584450841E84F1284210 +9202:10201020282025FE4122BA2410201020FC5010509450585050901C92E112420E +9203:100010FC284824484248BC48104811FEFE4810489448584850481E48F0884108 +9204:10081088284824484208BC8810481048FE08100E95F8580850081E08F0084008 +9205:100010FC288424844284BCFC10841084FE8410FC9484588450841E84F1144208 +9206:10081048284824484044B88410A41122FC2010409440584850841DFEE0824000 +9207:102010202820242041FCB82010201020FDFE10209450585050881C88E1044202 +9208:1000100029FE24104210BC2010201068FE6410A29522582050201E20F0204020 +9209:10201020282025FE4122B92211221122FD52114A958A590251021D02E10A4104 +920A:10001040282024104050B84010401144FD42114295425A4450441C44E03C4000 +920B:10A010A028A025244124BB2815301120FD6011A09520592251221D22E11E4100 +920C:10201020282025FC4024B82410241024FDFE10209450585050881C88E1044202 +920D:10201020282025FE4020B92411241124FD2411FC9424582050221C22E01E4000 +920E:10801080288024FC4104B90412441044FC8410A4951459F450141C04E0284010 +920F:100411E4282424244024B9E411041104FD0411E49424582450241C24E1444084 +9210:10201020285024504088B94412221020FC0011FC9404580850081C10E0104020 +9211:1008101C29E025004100B9FC11441144FD4411289528591051101E28E2444482 +9212:100013FC288424884088B890109C1084FD4411449528592852101E28E4444182 +9213:1008103C29E024204020B820102013FEFC2010209420582050201C20E1FC4000 +9214:10201020282024A842A4BCA211221120FE2410249428580850101E20F0C04300 +9215:100011F8284824484048B848104811F8FC8810889488588850881C88E3FE4000 +9216:10101090289024884108B904120415FAFC8810889488588851081D08E2284410 +9217:10401040288024884104BBFE10021090FC9010909490589051121D12E20E4400 +9218:10201020282025FE4020B820102011FCFC8410889448585050201C50E1884606 +9219:102010202820243E4220BC20102011FCFE8410889448585050201E50F1884606 +921A:10101110291025124112B91411D81110FD1011109510591251521D92E10E4000 +921B:1048104428442440425EBDE010401044FE4410489430582250521E8AF1064002 +921C:104010402840244043FEB84010801090FC90112095205A4852441C84E1FE4082 +921D:101010102890249042FEBC9011101010FE1011FE9410581050101E10F0104010 +921E:10401040288024FC4104BA0410841044FC4410149424584451841C04E0284010 +921F:100011FC282424244224BDFC11201120FF2011FE94225822502A1E24F0204020 +9220:100010F8288824884288BD06120011FCFE8410849448585050201E50F0884306 +9221:102010202820242041FCB92411241124FD2411FC9524582050201C20E0204020 +9222:102010202820242041FEB82010701070FCA810A89524592452221C20E0204020 +9223:100010FE281024104290BC9E10901090FE9010FE9402580250021E02F0144008 +9224:1000100028FC24844284BC8410841084FEFC10849484588450841E84F0FC4084 +9225:102010202820242442A4BCA410A81120FE2010509450585050881E88F1044202 +9226:10201020282024204220BDFE10201020FE2010509450585050881EC8F1244202 +9227:10401020280025FC4000B80010F01090FC9010909490589250921D12E10E4200 +9228:1000100029FC24004000B80013FE1090FC9010909490589051121D12E20E4400 +9229:10201010281024FE4282BC82108210FEFE8210809480588050801F00F1004200 +922A:100011FE290025004178B94811481148FD4811689550594251421D42E23E4400 +922B:10401020282025FE4288BC8810881088FE5010509420582050501E88F1044202 +922C:100010FC288424844284BC8410FC1090FE9010909490588850881E84F1044202 +922D:088008882E9028E028842E84F17C06C01830EFEE01003FF809200540FFFE0000 +922E:100011FC290425044104B9FC11001140FD4411489570594051421E42E23E4400 +922F:10201020292425244124B92411FC1020FC2011249524592451241D24E1FC4004 +9230:10401020280025FE4020B82011FC1124FD2411249524592451341D28E0204020 +9231:100011FC290425044104B9FC11201120FDFE11209520591051121D4AE1864102 +9232:1008101C29F025504150B95011501150FD5011489548596851541E74E2524400 +9233:100010002BFE24084008B9E811281128FD28112895E8592850081C08E0284010 +9234:10201020285024504088B92412121010FDFC10049408588850501C20E0104010 +9235:100011FE282024204020B9FE11221122FD52114A958A590251021D02E10A4104 +9236:10201020282024404248BC8411FE1082FE0010FC9484588450841E84F0FC4084 +9237:102010202820242043FEB82010201020FDFC11049504590451041D04E1FC4104 +9238:105010482848244043FEBC401040107CFEA410A494A8592851101E28F0444082 +9239:10101010281025FE4112B914111011FCFD4411449528592851101E28E2444482 +923A:1000100029FC24204020B82010201020FDFC10209428582450241C20E3FE4000 +923B:100010FC288424844284BC8410FC1080FE8010FE9482588250821E82F0FE4082 +923C:10801080288024FE4340BD401240107CFE4010409440587E50401E40F0404040 +923D:10201020282025FE4040B850109010FEFD92129294925892509A1C94E0104010 +923E:102010202820242041FCB92411241124FD2411FC9524592451241D24E1FC4104 +923F:1000100029FC25244124B92411241124FDFC11249524592451241D24E1FC4104 +9240:100011FC292425244124B9FC11241124FD2411FC9524582050201C20E0204020 +9241:10201020285024884104BA1210201040FD8810109420584451881C10E0604380 +9242:10201020282025FC4124B924112411FCFD241020952058C050401CA0E1184206 +9243:10401040288024FC4120BA2010201020FDFE10209450585050881C88E1044202 +9244:102010202920252041FCB92012201020FDFE10209450585050881C88E1044202 +9245:100010FE288024804280BCFC10841084FE84108494FC588050801E80F0FE4000 +9246:1020102028202420403EB82010201020FDFC11049504590451041D04E1FC4104 +9247:1080108028FE250042207D20912C11747BA411249534592851221D02E0FE4000 +9248:10201010281025FE4102BA0410801088FC9010A094C0588250821C82E07E4000 +9249:10201010281025FE4020B82010441084FDF810109420584450821DFEE0824000 +924A:100011FC284424444044B84410941088FD0010FC9484588450841C84E0FC4084 +924B:1080108029FC25044204BDF411141114FD1411F49504592851121D02E0FE4000 +924C:101C11E0282024204020BBFE10201070FC7010A894A8592452221C20E0204020 +924D:10401020282824084008B84810541152FD5211609660584450C41D44E23C4000 +924E:102010202920252041FCB92012201020FC2011FC9420582050201C20E3FE4000 +924F:100010F8288824884088B8F810881088FC8810F89488588850881C88E3FE4000 +9250:100010002BFE24204020B840104010FCFD8412849484588450841C84E0FC4084 +9251:10101010282024FC4284BC8410841084FEFC10849484588450841E84F0FC4084 +9252:10401020280025FE4020B82010201020FDFC10209420582050201C20E3FE4000 +9253:10801080288024FE4120BA20102011FCFD2411249524592451341D28E0204020 +9254:100011FE291025104110B97C11541154FD5411549554595C51101D10E1FE4000 +9255:100010FE2880248042BCBCA410A410A4FEA410A494BC58A450801E80F0FE4000 +9256:10401040287C24844188BA5010201050FC8813069460581050081CC0E0204010 +9257:108810882888248843FEBC8810881088FE8810F89488588850881E88F0F84088 +9258:10501050285025FC4054B85411FC1150FD5011FE94525852505A1C94E0904110 +9259:1000100029FC25044104B90411041104FDFC11049400589050881D04E2024402 +925A:20002080531E4A5282527A5222522252FA5222D22B5AB25460903890E1100210 +925B:100010F8288824884088B88811061200FC0010FC9484588450841C84E0FC4084 +925C:1088108828882508417EBB0815081148FD2811289508590851081D08E1284110 +925D:102010102810240041FEB80010041084FC8410489448584850501C10E1FE4000 +925E:202820245024482083FE7A2022242224FA2422282A28B29063123A2AE0460082 +925F:100010FE281024104220BC2010681064FEA211229420582050201E00F1FE4000 +9260:10201020282025FC4124B92411241124FD2413FE9420585050501C88E1044202 +9261:10201020292424A440A8B82011FC1020FC20102097FE582050201C20E0204020 +9262:102010202820242043FEB82010701070FCA810A895245AFA54201C20E0204020 +9263:10201020282025FC4020B820102013FEFC2010209440584850841DFEE0824000 +9264:10801080290025FC4204BC0411E41124FD24112495E4592450041C04E0284010 +9265:102010282824242041FCB82010701070FCA810A89524592452221C20E0204020 +9266:1000100029FE24104010B81010901090FC9E10909490589050901C90E3FE4000 +9267:100010FC288424A44094B884108413FEFD0411449524590451FE1C04E0284010 +9268:10801080288024FE4102B90412201020FCA810A49524592252221C20E0A04040 +9269:10201020285024504088B90412221020FCA810A49524592252221C20E0A04040 +926A:102410A428A424A442A4BDFE10A410A4FEA410A494BC588050801E80F0FE4000 +926B:110011002900251C43D4B95411541154FD5411549554595451541E5CE3544480 +926C:100011FC290425044104B9FC11041104FD0411FC9504590451041D04E1FC4104 +926D:1000100028FC24844284BC8410FC1084FE84108494FC588450001E00F1FE4000 +926E:10201020282025FC4124B924112411FCFD241124952459FC51241C20E0204020 +926F:10081048292825284128B90811081108FD0811089548599451141C22E0424082 +9270:100011FC2804240443F4B804100411E4FD241124952459E450041C04E0144008 +9271:10201010281025FE4100B91011101110FD1011209528592452441EFEE4424800 +9272:102010202820243C4220BC20102011FEFE2010209428582450221E20F0204020 +9273:10901090289024904090BB9210941098FC9010909490599252921C92E08E4080 +9274:04402440247C24902488250802800C603018CFE601003FF8092005407FFC0000 +9275:10201020282025FC4124B92411241124FDFC11249420582850241DFEE0824000 +9276:100213E22942254A414AB94A114A13EAFD4A114A954A594A51421E42E24A4444 +9277:104810482848244841FEB84810481048FC4811FE9400584850441C84E0824102 +9278:10401020282025FE4000B88811041202FC8810889450585050201C50E0884306 +9279:10201020287C24844148B83010201048FD90103E944259A450181C10E0604180 +927A:100013FE2888248840F8B888108810F8FC881088948E5BF850081C08E0084008 +927B:10401040287824884150B82010501088FD0610F89488588850881C88E0F84088 +927C:110410842888240041FEB88810881088FC8813FE9488588851081D08E2084408 +927D:201020145012481083FE7810201021D0F89020902890B08860EA3B8AE0060002 +927E:102010202848248441FEB81210901090FCFE1110941059FE50101C10E0104010 +927F:10201020285024884104BA0211FC1000FC0011FC9504590451041D04E1FC4104 +9280:100011F82908250841F8B908110811F8FD4411489530592051101D48E1864100 +9281:10401040288024FE4102BA0211F21112FD1211F29512591251F21C02E0144008 +9282:10821092289224924092B89212DA12B6FC9210929492589250921D12E1024202 +9283:10401020282025FE4040B888110411FEFC9210909490589051121D12E20E4400 +9284:10201020284025FC4104B90411741154FD5411549554597451041D04E1144108 +9285:100011FC290425044174B90411041174FD5411549554597451041D04E1144108 +9286:100013FE282024204040B9FC11041104FD0411FC9504590451041D04E1FC4104 +9287:1020102029FE24204020B8FC10201020FDFE107094A858A851241E22E4204020 +9288:1020102029FC24204020B82013FE1000FC20102095FC582050201C20E3FE4000 +9289:1020102029FC242443FEB82411FC1020FC2011FC9420582053FE1C20E0204020 +928A:202820245024482083FE7A2022242224FA2423A82A28B21062123C2AE4460882 +928B:10801088289C25704110BB1015101110FDFE11109510591051101D10E17C4100 +928C:10201020282025FE4040B84010BC1084FD88128894FE588850881C88E0A84090 +928D:100011FE282024404088B90411FE1022FC20102095FE582050201C20E3FE4000 +928E:00007DF01110119011521D12E20E450006C01830EFEE01003FF811100920FFFE +928F:100011DC295425544154B954115413FEFD5411549554595451541ED4E224444C +9290:00047F8408241F24212452240C243104C6CC1830EFEE01003FF811100920FFFE +9291:10201120292025FC4120BA20102013FEFC9010909490589051121D12E212440E +9292:100011DC288824884088B888108813DEFC8810889488588850881D08E1084208 +9293:10201020285024884104BA0211FC1020FC20102095FC582050201C20E3FE4000 +9294:100013FE281024204068B8A413221020FC00102094205BFE50201C20E0204020 +9295:102010202BFE242041FCB82411FC1120FDFE1022942A585450501C88E1044202 +9296:10201120292025FC4120BA20102013FEFC7010A894A8592451241E22E0204020 +9297:1008101C29E025004100B9FE11001100FD7C11449544594451441E7CE2444400 +9298:1040104028FC25044288B85010201040FC8011FC9684588450841C84E0FC4084 +9299:2020202053FE48508088790422FA2000FBFE20402880B1FC60043804E0280010 +929A:105010502850255242D4BC5810501058FED411529450585050921E92F112420E +929B:1008103C29E024204020BBFE10201020FC2011FC9504590451041D04E1FC4104 +929C:11001100229C424084201BC0213E6108AFC8210829482588250821C82E282410 +929D:109010902890251041FEBB1015101138FD3811549554599251101D10E1104110 +929E:10001FF820085FC890481FC810481FE8011006C01830EFEE01003FF80920FFFE +929F:101010922892249242FEBC0010101010FEFE10929492589A50941E10F0104010 +92A0:10401040284425F44048B85013FE1040FC801184969858E050821C82E07E4000 +92A1:10201020282027FE4020B82011FC1000FC0011FC9504590451041D04E1FC4104 +92A2:200021FC5000480083FE780020202022FBB220B428A8B12861243A24E4A20040 +92A3:210021005100491E87D27A5222522252FA5224922A92B11262923A5EE4520800 +92A4:10201020292424A440A8B820102013FEFC7010A894A8592451241E22E0204020 +92A5:10401020282025FE4040B84010A010A2FDA412989490588850881CA4E0C24080 +92A6:100011FE290225224122B92211FE1122FD221152954A598A51021D02E1FE4102 +92A7:104010442A4425484150B84017FE1090FC9010909490589251121D12E20E4400 +92A8:10401020282027FE4202BC44104013FEFC881088950858D050201C50E0884304 +92A9:1008103C29E024204020B9FC10201020FC2013FE9420584050881D04E3FE4102 +92AA:1020102029FE24404240BCFC10841184FEFC1084948458FC50841E84F0944088 +92AB:1080108028F825084210BDFC11241124FD2411FC9500590051021D02E0FE4000 +92AC:1040104429F424484050BBFE10401080FDFE1240948058FC50041C04E0284010 +92AD:10281024283E25E04220BC3C11E01020FE3E11E09422582450181E6AF1864002 +92AE:02000100FFFE0440145024484444010006C01830EFEE01003FF811100920FFFE +92AF:102010202848248841F0B82010401088FDFC1024942058A851241E22E0A04040 +92B0:1088108829FE24884088B80011041104FC8810889450582050501C88E1044202 +92B1:100010F82888248840F8B820102011FCFD2411249524592451341D28E0204020 +92B2:100011FC290425FC4104B9FC10001000FDFC102094205BFE50201C20E0204020 +92B3:10101090288825084204BDFA11081108FD0811F89490589050901D12E212440E +92B4:080C08F07E8008800EFE78880888290816C81830EFEE01003FF811100920FFFE +92B5:1020104028F8248840F8B88810F8108AFC8C13F89418582850481C88E3284010 +92B6:102810242824242043FEB820112010B2FCB4106894A8592452221C20E0A04040 +92B7:10101092285224544210BCFE10821082FEFE1082948258FE50821E82F08A4084 +92B8:100013FE292025284128B9E811281128FD2811E89528592A513A1FEAE0264020 +92B9:101C11E02820242043FEB8A811241222FDF81088949058BE51021D02E2144408 +92BA:242024203DFC0420FC2024F8450006C01830EFEE01003FF809200540FFFE0000 +92BB:11081088289025FC4024B82411FC1120FD2011FE946258A2512A1E24E4204020 +92BC:1020102028A824A840A8B97412221020FC2011FC9420582050201C20E3FE4000 +92BD:101C13E02A20262043FEBA201290130AFE0611FA9508590851081D08E1F84108 +92BE:200021FC5020482083FE780020202022FBB220B428A8B12861243A24E4A20040 +92BF:100011F8280824D04020B9FC11241124FDFC1124952459FC51241D24E124410C +92C0:100011FE2800240042FCBC8410841084FEFC10009484584450481E00F1FE4000 +92C1:100010FC288424844284BC8410FC1000FE0011FE9502590251021F02F1FE4102 +92C2:1080108028FE250042FCB88410A41094FDFE10849524591451FE1C04E0284010 +92C3:1040102029FC25044104B9FC11041104FDFC11209522591451081D44E1824100 +92C4:100013FE282024A44128B85010881104FC0010FC9484588850501C20E0D84706 +92C5:1040102029FC24004088B85013FE1020FC20102095FC582050201C20E0204020 +92C6:108010FC7D04104410341CC4E11406C81830EFEE01003FF809200540FFFE0000 +92C7:100011FC2904250441FCB904110411FCFD04110495FC580050881C84E1024202 +92C8:101C09E0402024200BFE70501088110406C01830EFEE01003FF811100920FFFE +92C9:102010202BFE24204020B9FC11241124FDFC1020947058A851241E22E0204020 +92CA:10881084290226224020B85010881104FE0210FC9484588450841C84E0FC4084 +92CB:2004200E53B8488880887928212E23A8F8A822A82AA8B13E61003A80E47E0800 +92CC:2000200653B8488880887908213E2388F88822882A88B13E61003A80E47E0800 +92CD:2020202053FE482080207BFE22022404F9F820102820B3FE60203820E0A00040 +92CE:1020101029FE25024204B8F810001000FDFE10509450585050921C92E10E4200 +92CF:10201020282025FC4020B8A810A810A8FD7412229450585050881C88E1044202 +92D0:1040102029FE25024244B84011FE1040FC501090949058A051241D42E27E4422 +92D1:104010402888250443FEB80210881144FE4210F895885A5050201C50E1884606 +92D2:1040104028FC24884150B82010D81326FCF8102094F8582053FE1C20E0204020 +92D3:204220E25382488A808A788A23EA208AF98A21CA2AAAB28264823882E08A0084 +92D4:1080108028F825084210B9FC11241124FD2411FC9450585050901C92E112420E +92D5:2020202050204BFE80207820202021FCF840202028A4B282628A3A8AE4780000 +92D6:1004101E29E024224112B89410801020FDFE1044948459C850301C28E0C44302 +92D7:100010F82888248840F8B80011FC1104FD0411FC9504590451FC1D04E1144108 +92D8:100011FC2904250441FCB800100011FCFC20102097FE582050501C88E1044202 +92D9:100011FE2820242042FCBC44104411FEFE00100094FC588450841E84F0FC4084 +92DA:1040104024FE6488A55024202450218806C41830EFEE01003FF811100920FFFE +92DB:2020202051FC4924812479FC20202020FBFE22222A22B3FE62223820E0200020 +92DC:100011FC290425044104B90411FC1020FC201120953E592051201EA0E47E4800 +92DD:1004101E29E024224112B89410801008FDFE10089488584850481C08E0284010 +92DE:100011FE280024924124BA4811241092FC0011FE9420582050201C20E3FE4000 +92DF:100011FC280424FC4004B9FC100013FEFE0211F89488588850501C20E0D84306 +92E0:100011FE29002500417CB900110011FEFD5011529554594851481E44E2524460 +92E1:10201020285024884144BA2210F81008FC10102095FC590451041D04E1FC4104 +92E2:1008103C29C024044144B8A8100011F8FC10102097FE582050201C20E0A04040 +92E3:200027DE50924C9284947C9427D82094F99221922A92B29A64943890E2900110 +92E4:2008200853C84A48825E7A4A23CA224AFA4A23CA2A4AB24A626A3BD2E6120026 +92E5:100011FC290425044104B9FC10001000FDFE1020942059FC50201C20E3FE4000 +92E6:100011FC2904250441FCB900110011FEFD02117A954A594A527A1E02E4144008 +92E7:100011F82908250841F8B908110811F8FD08110895F8589050901D12E212440E +92E8:201020D85394489480907BFE20902094F89420D82B98B09060AA38CAE2860102 +92E9:1048104829FE24484248BC20101011FEFE8010809480588050801E80F0FC4000 +92EA:102810242BFE24204020B9FC11241124FDFC1124952459FC51241D24E124410C +92EB:03043C0404247FA40E2415246484050C06C01830EFEE01003FF811100920FFFE +92EC:101C11E0FD0011FC1D04F1681210312806C41830EFEE01003FF811100920FFFE +92ED:110410842888241041FCB90411041104FDFC10509450589050921D12E20E4400 +92EE:202820245024482083FE7A2022242224FBA422A82AA8B29062923DAAE4460882 +92EF:10201120292025FC4120BA20102013FEFC00100095FC590451041D04E1FC4104 +92F0:100011FC2924252441FCB924112411FCFC20102095FC582050201C20E3FE4000 +92F1:201020145012481083FE781020902050F84820082888B2A8629A3AAAE4660002 +92F2:1010103829C025004100B9FC11101110FD10111097FE580050901D08E2044402 +92F3:102010202BFE242041FCB84013FE1048FC8810FE9508594852281C08E0284010 +92F4:102010202BFE24204020B9FC11041104FD0411FC9450585050921C92E112420E +92F5:101C11E02820242043FEB8A811241222FC0010F89488588850881C8AE10A4206 +92F6:1020101029FE24204248BC8411FE1002FEA810A894A858A850A81EAAF12A4206 +92F7:200027E0525E4A5282527BD222522254FBD422542A48B2E867543854E0620040 +92F8:100011FC2904250441FCB910111011FEFD101110957C594451441D44E17C4244 +92F9:100010FC288024F84080B8F8108013FEFD4011249528591051081D44E1824100 +92FA:2040202053FE4A028504790021DE2252FA5223522C9AB09461103912E212040E +92FB:7E7C48047E4442287E1048287EC4010006C01830EFEE01003FF811100920FFFE +92FC:200023FE52024A8A82527BFE22222222FAAA22AA2AAAB2FA62023A02E20A0204 +92FD:10201020283E242041FCB90411FC1104FDFC112494205BFE50201C20E0204020 +92FE:1040104028FE24824142B87A10A21022FDFE102294AA58AA50FA1C02E0144008 +92FF:1020112428A424A84020B9FC11041104FD7411549554595451741D04E1144108 +9300:10201020285024884104BAFA100011FCFD54115495FC595451541D54E104410C +9301:100011FC2924252441FCB924112411FCFC2011FE947058A851241E22E0204020 +9302:1020102029FC24204020BBFE10881144FE4210F895885A5050201C50E1884606 +9303:102009FE4122252009FC110472681410112806C41830EFEE01003FF80920FFFE +9304:108010F82888250841F0B810101013FEFC201222957458A851241E22E0A04040 +9305:0640387C08947E241C442A94490806C01830EFEE01003FF809200540FFFE0000 +9306:102010202BFE242041FCB82013FE1000FDFC110495FC590451FC1D04E1144108 +9307:1080104029FC24004108B888109013FEFC00100095FC590451041D04E1FC4104 +9308:1020112428A8242041FCB84013FE1088FD0412FA9488588850A81C92E082407E +9309:101C13E02A2027FE4220BA92130A1206FDFC1104950459FC51041D04E1FC4104 +930A:1040102029FE24004088B88811541222FC00102095FE582050201C20E0204020 +930B:200023DE52524A5282527BDE22522252FA5223DE2A52B25262523A52E55208A6 +930C:102011242924252441FCB80011FE1100FD7C1110951059FE51101E10E2104410 +930D:1040108029FC25244124B9FC11241144FDFC109095105BFE50101C10E0104010 +930E:10401040287C24844108BA00102011CEFD02110295CE590251021D02E1FE4102 +930F:100013FE285024504050B9DC11041104FD0411DC9450585050501C50E3FE4000 +9310:10A01090288025FE4110BB1015FC1110FD1011FC9510591051101DFEE1004100 +9311:2040202053FC4A0482047BFC22002228FA2423FE2A20B25062503C88E5040A02 +9312:2000277E55044D048574755426542554F5542554A574755426043404C4140408 +9313:10881048285025FC4020B82011FC1020FC2013FE9450585050901C92E112420E +9314:102010222BB424A840A8B92412A21040FDFC1104950459FC51041D04E1FC4104 +9315:100011FC2904250441FCB904110411FCFC00111295D4591851101D52E192410E +9316:08000E7C08047F4408282A104928194406C01830EFEE01003FF811100920FFFE +9317:101C11E02820242043FEB8A811241242FC4013FE9488590850D01C30E0484184 +9318:2008203C51E0482083FE78A820A820A8FBFE20A828A8B3FE60203820E1FC0000 +9319:10921092292426484124B89210921000FDFE1122952259FE51221D22E1FE4102 +931A:1080108028F825084210B9FC10241024FDFE1024942459FC50241C20E0A04040 +931B:102010202BFE245040A8B92412FA1020FCA8108897FE588850881C88E1084208 +931C:202020205050488881447A2221F82008F850202028A4B282628A3A8AE4780000 +931D:2040202053FE4A02800079FC20002000FBFE20202928B12462223C22E0A00040 +931E:104010202BFE240041FCB90411FC1000FDFC100894105BFE50201C20E0A04040 +931F:102010A228A225244050B88813041022FC2010A494A4592850501C88E1044202 +9320:2040202053FE4A028404780023FE2020F8202120293CB12062A03A60E43E0800 +9321:1020102029FC24504088B90413FE1008FDE81128952859E851281C08E0284010 +9322:10481044285E25E04228BC12106A1196FE48105E95E0582450281E12F06A4186 +9323:200023DE5042494A8084794A22522420F80023DE2852B15260943948E2540422 +9324:108810882BFE24884288BCF810881088FEF8108894885BFE50001E88F1044202 +9325:104010202BFE24804104BBFE100211FCFD0411FC950459FC51041D04E1144108 +9326:1020104028FC248440FCB88410FC1020FC2011FE95225922512A1D24E0204020 +9327:1020101029FE25024204BCF810881088FEF81080948058FC50841E84F0FC4084 +9328:108810882BFE24884088B80011FC1124FD24112495FC592451241D24E1FC4104 +9329:10F81088288824F84088B88810F81000FDFC1104950459FC51041D04E1FC4104 +932A:10501050285025FC4154B954115411FCFD54115495545BFE50001C50E0884104 +932B:100010FC2884248440FCB884108410FCFC4010FE952A5A4A50921D22E04A4084 +932C:102010202BFE242041FCB92411FC1124FDFC1020947058A851241E22E0204020 +932D:100011FC292425244174B92411FC1104FD7411549554597451041E04E2144408 +932E:100011FC290425244124B9FC11241124FD7411549554597451041D04E1FC4104 +932F:10481048284825FE4248BC4811FE1000FEFC1084948458FC50841E84F0FC4084 +9330:10201020282025FE4020B87010A810A8FD2412229420580051541D2AE22A4000 +9331:010002800C603018DFF601003FF8111009207FFC00007EFE08103E7C08107EFE +9332:100011F82808240841F8B808100813FEFC201222957458A851241E22E0A04040 +9333:100011FC280824104020BBFE102010A0FC4011FC9554595451541D54E3FE4000 +9334:1020102029FC24204020BBFE10881104FE22102095FC582050201C20E3FE4000 +9335:108810882BFE24884088B85010501094FD941298949058B250D21C92E08E4080 +9336:2020202053FE4820802079FC20202020FBFE204028A4B1A862903C88E0C60080 +9337:20882088208857E8888873E822A823E8FAA823E82888B7E8608A388AE08A0086 +9338:2020202050204BFE8020792421242124FAAA207028A8B0A861243A22E4200020 +9339:10201120293C25204120BBFE100011FCFD0411FC950459FC51041D04E1144108 +933A:110811082BFE25084148B82013FE1080FC8010F89488588850881D08E1284210 +933B:2010201451D2481280107BFE20102090F89022D02A90B290628A3AEAE7060202 +933C:2020202053FE48508088790422FA2000F80023FE2820B12461223A22E0A00040 +933D:100013FE282024A44128B85010881144FC4010FC95845A8850501C20E0D84706 +933E:1004FF7828407F7E08480F48F888090806C01830EFEE01003FF811100920FFFE +933F:10201020283E242041FEB922113811E0FD22111E9500597852481E4AE48A4906 +9340:100011FC290425FC4104B9FC100011FEFC0813FE9408590850881C08E0284010 +9341:2010209057104C3E8422744427902510F5102510A528752825283944C9441082 +9342:10201020285024884104BA0210F81020FC2011FC9420592450A41CA8E3FE4000 +9343:2080208050FC4954825478A421242244F89421082840B0A462AA3A8AE4780000 +9344:104010202BFE24004000B9FC11041104FDFC10209528592452221C22E0A04040 +9345:221021102110547C8A1072102010217EF91022102E20B22462423AFEE2420000 +9346:200023DE52524A5283DE7A52225223DEFA0222022A02B20262023A02E20A0204 +9347:1110111229D425184152B992112E1040FDFC1104950459FC51041D04E1FC4104 +9348:108810882BFE248840A8B82011FC1124FD24112497FE582050501C88E1044202 +9349:100011FC2904250441FCB904110411FCFC0013FE94205920513C1D20E2A0447E +934A:102010202BFE242041FCB92411AC1174FD2411FC9420587050A81D24E2224020 +934B:100010F82888248840E8B8A810A811FCFD0411749554595451741D04E1144108 +934C:0020112049FC22200BFE10907092110E16C01830EFEE01003FF811100920FFFE +934D:2040202053FE4A4882487BFE22482278FA0022FC2A44B24862283C10E4680986 +934E:1008101C29F025104110B9FE1110117CFD44117C9544597C51441E44E27C4444 +934F:1020102028FC244441FEB80010FC1084FCFC102095FE582051201DFEE0204020 +9350:2000208852524A2282527A8A220223FEF88821442A7AB08861503820E0D80706 +9351:1040104028FE248041FCBA8410FC1084FCFC1040947C58C451281C10E0684186 +9352:100010FC2848243041FEB85210941110FE30102095FE587050A81D24E2224020 +9353:100010F82888248840F8B80013FE1088FCF8108894F85888509E1DE8E0084008 +9354:200023DE52524A5283DE780021FC2000FBFE20802900B1FC60043804E0280010 +9355:100013FE2A22242043FEB82011FC1124FDFC112495FC582053FE1C20E0204020 +9356:108810882BFE248840F8B88810F81088FC8813FE9500594851841D00E1FE4000 +9357:1040102029FC24004088B85013FE1222FC2411FC9524592451341D28E0204020 +9358:200223C252424A5283D27A52225223D2FA5222522BD2B00261823942E24A0404 +9359:1090089043FC2090089017FE7090110816C41830EFEE01003FF811100920FFFE +935A:100010FC288424FC4084B8FC100011FEFC8010FE952A5A4A50921D22E0544088 +935B:2080233852284A2883A87A462200227CFBA422242A28B3A866103A28E2440282 +935C:200023DE52424A4282427BDE2200223EFBD222122A14B3D462083A14E2240242 +935D:11FC1124292425FC4124B92411FC1020FC2013FE96225A2A52FA1E0AE2024206 +935E:10201020283E24204020B9FC110411FCFD0411FC950459FC50001C88E1044202 +935F:100011FC290425FC4104B9FC10201120FDFE1220942059FC50201C20E3FE4000 +9360:1020104028FC248440FCB88410FC1000FDFE1020942058FC50201C20E1FE4000 +9361:100011FC2924252441FCB924112411FCFC0013FE9520592251141D48E1844102 +9362:100010FE2800247C4244BC44107C1000FEFE1092949258FE50921E92F0FE4082 +9363:1048104829FE24484200BDFC10441044FE94110896FC588450841E84F0FC4084 +9364:1008103C29E024204020BBFE102010A0FD2C1124952459AC51241D24E1FC4104 +9365:1080109E2BEA248A41CAB88A13EA1092FCA6102097FE582050501C88E1044602 +9366:22102110211057BE8A28724823AA22AEFABA22EA2AAEB2A864AA3CA2E9A2101E +9367:1080108028FE25024242B9FA100211F2FC0211F2940259F251121DF2E0144008 +9368:101011D428582652418CB888110412FAFC20102095FE582050501C88E1044202 +9369:108810882BFE248840A8B82013FE1040FC8010FC95845A8450841C84E0FC4084 +936A:00207E20247E1884FF2829104A28994406C01830EFEE01003FF811100920FFFE +936B:0620382008A47EA819202C504A88090406C01830EFEE01003FF811100920FFFE +936C:208821C857084908812A712A27AC2148F3082388A554751429143124C1240142 +936D:108010BC2884250841FEBB201520117CFD90111095FE591051281D28E1444182 +936E:204020A051104A0885F6780023C42254FA5423D42A54B25463D43A44E25402C8 +936F:2080208050FC495482D478B4212C2244F89421082840B0A462AA3A8AE4780000 +9370:101E13E0284425244088B9FC10401040FDFE108094FC594451281E10E0684186 +9371:2048214851484BFE8148794821782100F9FE20202BFEB07060A83924E6220020 +9372:100011FC290425FC4110B9FE1110114AFD86100095FC590451FC1D04E1FC4104 +9373:3F2024203F3E21403F5024883F08010006C01830EFEE01003FF811100920FFFE +9374:102011242924252441FCB80013FE1020FC4011FC9554595451541D54E154410C +9375:20102010577C491481FE7214227C2710F17C2510A5FE721022103500C8FE0000 +9376:100011FC2924252441FCB924112411FCFC2010109454594251421D4AE2384000 +9377:102010202BFE24504088BB2611FC1020FC2013FE9400582051FC1C20E02043FE +9378:1080109E289225D24092B89E109211D2FD52115E9552595251D21C22E02A4044 +9379:104010202BFE26024404B9FC100011FCFD0411FC950459FC51041C00E3FE4000 +937A:1020102229FA24244028BBFE10201040FCFC1184968458FC50841C84E0FC4084 +937B:100011FC290425FC4104B9FC108011FEFE2211229552590251FA1C02E0144008 +937C:2008200C500A4BFE82087A0822E8220AFA0A22EC2AACB2A862EA3A1AE2260442 +937D:1040102029FE25024102B9FE11001100FDFE11AA96AA5AFE54AA1CAAE0A24086 +937E:1008103C29E0242043FEB82011FC1124FDFC112495FC582051FC1C20E3FE4000 +937F:1052105228A425FE42A4BC5210521000FEFE1092949258FE50921E92F0FE4082 +9380:1090109E28A225544108BB5415621140FD4411589542594451181D02E10C4130 +9381:20002FDE54924C928494779424982494F7922492A49275DA2E943090C0900090 +9382:110410882BFE24204020B9FC10201020FDFE100094205BFE50201C50E0884306 +9383:2008241C52E04A80888C74B024A822AAF2AC24A8ACA874A824A43524C5320220 +9384:104010202BFE240041FCB90411041104FDFC10529494598852881CA4E0C24080 +9385:11FC1124292425FC4124B92411FC1050FC881104968A588850881C88E1084208 +9386:2108208850904BFE80007BC422542254FBD422542A54B3D462543A44E25402C8 +9387:100011FC2924252441FCB900117C1144FD44117C9544597C51441E44E27C4444 +9388:10841044284825FE4020B8FC102011FEFC40108094FE591052101C10E1FE4000 +9389:100011FC290425FC4104B9FC100013DEFC421252954A58C6535A1C42E14A4084 +938A:1020101029FE24844048B9FE11021224FC1011FE9440587C50441C84E0944108 +938B:2040202053FE4A02842479FC202021FCF82023FE2820B1FC61043904E1FC0104 +938C:10881050280025FE4050B9FC105413FEFC5411FC945058D851541E52E0504050 +938D:2020202053FE482083FE7A42248C21F0F82020442BFEB02261283A24E4A40040 +938E:2100210051FC4A0085F8780023F82088FAA821C82BF8B08A61CA3AAAE0860082 +938F:204017FE8090490813FCE1502252244E010006C01830EFEE01003FF80920FFFE +9390:1008103C2BC024044244B92811FC1220FC2013FE9420592451241D24E1FC4004 +9391:1020102028FC24204020B9FE10401084FDFE100295FC595451541D54E3FE4000 +9392:100011FE2900257E4100B9FE11541148FD641142950459FE51441E24E204440C +9393:2090208851044A42848879FC20042000FBDE20422A52B14A62523842E14A0084 +9394:104010202BFE26024050B88811241050FC88110496FA588850881C88E0F84088 +9395:1020101029FE2510417CB91411FE1114FD7C1110957C594451441E44E27C4444 +9396:1020112428A8242041FCB904110411FCFD0411FC9504590451FC1C00E0884104 +9397:102010202850244840A4B9FE128410FCFC8410FC948058FC51441D44E27C4044 +9398:200023FE500049FC8104790421FC2000FBFE228A2A52B3FE62223A22E22A0204 +9399:2440225E5292481287D2791E25522552FD5227DE2952B11262123A22E42A0844 +939A:10101220297C25444044B87C13401140FD7C11449544597C51441E80E47E4000 +939B:102810242BFE242041FCB92411FC1124FDFC112494085BFE50881C48E0484018 +939C:10003E782A482248FE862B7842484A30854806C41830EFEE01003FF80920FFFE +939D:108810882BFE24884020B85010881104FEFA1000940059FC51041D04E1FC4104 +939E:1020104029FC25044154B92411541104FDFC1000951259D451181D52E192410E +939F:21F820885070498C80007BDE2252218CFA5220202BFEB07060A83924E6220020 +93A0:200023FE52524A5283FE7800200023FEF8202020293CB12061203920E7FE0000 +93A1:2084204450484BFE808478842108214AFA52239C2884B10861083A52E3DE0042 +93A2:1040108029FC25044104B9FC110011FEFD0011FE94025AAA52AA1C02E0144008 +93A3:08202AA44D28145022887FFE410286C41830EFEE01003FF809200540FFFE0000 +93A4:100011FC290425FC4104B9FC10201124FCA8102097FE589050901D12E212440E +93A5:108011F822886870AB8E282029FC28A8216406C01830EFEE01003FF80920FFFE +93A6:204023BE52124A9282527AAA23242040FBFE22222A22B3FE62223A22E3FE0202 +93A7:102011242924252441FCB80013FE1000FDFC1104950459FC50881C50E3FE4000 +93A8:10A0109029FE272041FCB92011FC1120FDFE110094205BFE50201C20E0204020 +93A9:2000245C529449148294745421262100F7DC2114A594755429483108C5140222 +93AA:10A0112C2924252441ACB924112411FCFC2011FC9488585050201C50E0884306 +93AB:1020104029FC25044154B92411541104FC881144967A588851501C20E0D84706 +93AC:1020101029FE240040FCB88410FC1000FDFE1102957A594A517A1D02E10A4104 +93AD:111811E0290224FE4000B97C1144117CFD44117C9544597C51001DFEE0884104 +93AE:102010202BFE242041FCB90411FC1104FDFC110495FC590453FE1C88E1044202 +93AF:2100209E53D24A5282547BD422582254FBD222122A92B25A62D43B50E2100010 +93B0:10881050280025FC4000B85010881104FC0011FC9554595451541D54E3FE4000 +93B1:1020102029FC242043FEB80011FC1104FD0411FC9452589451881EA4E0C24080 +93B2:1020112428A8242043FEBA02100011FCFD04110495FC585050501C92E112420E +93B3:1020104029FC250441FCB90411FC1104FDFC102095FE587050A81D24E2224020 +93B4:1020104029FC250441FCB90411FC1104FDFC1040942058A4528A1E8AE4784000 +93B5:2040202053FE4A02800079FC204020A2FB3420582894B33460523890E3500020 +93B6:100013FE280825E84128B9E8100013FEFC0811E89528592851E81C08E0284010 +93B7:200021FE512049FC812079FC21202120F9FE20022AAAB2AA62AA3A02E0140008 +93B8:20A0209051FE4B2085FC792021FC2120F9FE21002BFCB088609E3902E20A0404 +93B9:102210122914248040BEB808100811BEFC8810889494589250A21D40E23E4000 +93BA:22002100513C482487A478A4213C2124FBA42564293CB12461243924E17E0100 +93BB:109211242A4825244092B80011FC1104FDFC110495FC590451FC1C88E1044202 +93BC:1020103C282025FE4122B93811E2111EFD0411789510597C51101EFEE2104430 +93BD:2020222253FE488081F87A882070238EF82021FC2820B1FC60203BFEE0200020 +93BE:100010F82888248840F8B888108810F8FC0011FC9554595451541D54E3FE4000 +93BF:10201050288825744202B8F8108810F8FC0C11F0942059FC50201DFEE0204060 +93C0:20202020503E482080207BFE22022326FA8A22522B26B252628A3B26E3FE0202 +93C1:112412482924240041FCB92411FC1124FDFC102097FE587050A81D24E6224020 +93C2:200023FE52004A7C82447A44227C2200FAEE22AA2AAAB2AA62EE3A00E3FE0000 +93C3:2220212051204FBE82407A2023BC22D0FA9022902AFEB29064A83DA8E8441082 +93C4:102013FE282025FC4124B9FC112411FCFC2213FE94085BFE51081C88E0284010 +93C5:2120213C214452A88A1076A82AC622BCFAA422BC2AA4B2BC62243A24E224022C +93C6:100011FC292427FE4124B9FC100011FCFD0411FC950459FC51041DFCE0884104 +93C7:22102110211057BE8A40720023BE228AFA8822A82AAEB2A864A83DA8E85E1080 +93C8:2010201052FE4910817C7854207C2354F97C211029FEB11061103A90E47E0000 +93C9:2108210857C84908811E77D225642540F7C82108A388754829543114C1240142 +93CA:08207F20083E7E440884FF2820103E28434486C21830EFEE01003FF80920FFFE +93CB:2088208853FE4888808878F8202023FEFA2223322AAAB37662223A22E22A0224 +93CC:108810882BFE24884000B9FC110411FCFD0411FC94205BFE50501C88E1044202 +93CD:100011FC292425FC4124B9FC10401088FDF0102094445BFE50221D24E2224060 +93CE:200021FC512449FC812479FC20A820A8FBFE20A828A8B1FC60203BFEE0200020 +93CF:208823DE508849DC80887BDE20882000FBFC20042804B1FC60043804E3FC0004 +93D0:200023DE50424A52814A7A52202820C4FB1220602988B03261C43818E0600380 +93D1:104010202BFE24884050BBFE122212FAFE2212FA968A5A8A52FA1E02E20A4204 +93D2:2040208851FC490882527BFE20502188FE2620C02B10B06463883830E0C00700 +93D3:1020104029FC2524417CB98C11541124FD5411FC9420581051541D42E14A4238 +93D4:104010202BFE26024000B9FC102011FCFD2411FC952459FC50001C88E1044202 +93D5:2040202053FE4A5082507BFE22522252FBFE22002A92B2D462983C92E4D2088E +93D6:00803FFE22203FFC22243FFC242027BC246227BE23182DF6204047FC42488FFE +93D7:200023DC52944BD482547BC822882294FBE220002820B1FC60203820E3FE0000 +93D8:20882288529E4AAA82947B88209020A4F88427BE2A84B2A462943A84E4940088 +93D9:102012222BFE24904088B9FE13101510FDFE1110951059FE51101D10E1FE4100 +93DA:200C200A50084BFE82087A48226A224AFBFA224C2A4CB2EC635A3C4AE4D60822 +93DB:1020112428A827FE4202B8F810881088FCF8102095FC592451241D34E1284020 +93DC:1020112428A827FE4202B8F810881088FCF81020942059FC50201C20E3FE4000 +93DD:100011F8290825F84108B9F8100013FCFE9413FC940059F850901C60E1984606 +93DE:101011FE2910257C4114B9FE1114117CFD10117C9554597C51541E7CE254444C +93DF:1020101029FE24004084B84811FE1110FD50117E95905910517E1E10E21044FE +93E0:2020247C52844948803078CE2610227CFA10227C2A10B2FE62103A10E5FE0800 +93E1:1040102029FC24884050BBFE100011FCFD0411FC950459FC50901C92E112460E +93E2:100013FE285025FC4154B95411FC1000FDFC100097FE582050A81D24E2A24040 +93E3:1040102029FE25004148B94811FE1148FD4811489578590052D41EAAE52A4800 +93E4:102011FC292427FE4124B9FC102011FCFD2411FC94405BFE50881DD0E070438C +93E5:102010102BFE26024080B8FE11101320FD7C11449544597C51441D44E17C4144 +93E6:112411242A2424A441547D4A9392150879081128952E592851281D58E14E4180 +93E7:08007F7808483E4800863E782A483E30414886C41830EFEE01003FF80920FFFE +93E8:08047F7808403E402A7E3E482A48FF48098806C01830EFEE01003FF80920FFFE +93E9:21002102511C4FD0811077D0255E27D4F55427D4A11477D421143124C1240144 +93EA:2090209057FE489083FC7A9423FC2294FBFC200029F8B10861F83908E1F80108 +93EB:2062238A208A57EA888A71CA22A2248AF8A420202BFEB07060A83924E2220020 +93EC:2040207C50404BFE82427A7823C4223CFA0822F02B24B2A865FE3C20E8A00040 +93ED:201C21E05020492480A87BFE207020A8F92422222840B02462A23A8AE4880078 +93EE:1020101029FE2510417CB91411FE1114FD7C11109592595451381E54E2924430 +93EF:2020202053FE482082AA792422AA2020FAAA21242AAAB05060503888E1040602 +93F0:2020222252224BFE80007BDE22522252FBDE22522A52B3DE62523A52E55A08A4 +93F1:102011FC2888245043FEB80011FC1104FDFC110495FC582053FE1C20E0204020 +93F2:202023FE504848F080207BFE22422090F9F820282920B1FC62203BFEE0200020 +93F3:2104208850004BFE82227AAA22722222FBFE200029FCB10461FC3904E1FC0104 +93F4:2010279054BC4CA484C477A821102128F14625C0A53C7524252435A4CE3C0024 +93F5:108813FE2888240041FCB8A810A813FEFCA810A895FC582053FE1C20E0204020 +93F6:10A0109029FE272041FCB92011FC1120FDFE110094205BFE50701CA8E3264020 +93F7:105012522954245043FEB888105013FEFC2011FC94205BFE50501C88E1044602 +93F8:2020202053FE482081FC792421FC2124F9FC20222BFEB04260243AA2E28A0478 +93F9:200023BE50A248A280BE7B882208223EFA2A23AA28AAB0BE6088388AE57E0202 +93FA:202423A8209255148A08740423BA20A8F8C623802A3CB38460A83890E2A80144 +93FB:2020212450A84BFE80A8792422222104F90421DE2A44B554609E3904E2040404 +93FC:2210221053DE4D2880A4782023FE2020FBFE22222A2AB27460A83924E6220020 +93FD:204023F850484FFE804873F820402554F75C2444A7FC7444275C3554C5540844 +93FE:2288228857C84A90829E77D4202427D4F45427D4A45477C824483454C46404C2 +93FF:2020212450A84BFE820278F820882088F8F820202BFEB07060A83924E2220020 +9400:102011FC292425FC4020BBFE100011FCFD0411FC950459FC51041DFCE0884104 +9401:22402242525C4FF082507BD0225E23D4FA5422542FF4B01462943C64E8240044 +9402:200023FE50504BDE82527A5223DE2050FBFE22222A22B3FE62223A22E3FE0202 +9403:2020202051FC482083FE7908239C2108F988263E2800B3FE60903890E112020E +9404:1088108829FC24884088BBFE102011FCFD2411FC952459FC50001C88E1044202 +9405:49202A3E7F4849485DA86B104928414406C01830EFEE01003FF811100920FFFE +9406:010878904BFC504049A4445855B4485241B046C01830EFEE01003FF80920FFFE +9407:103C13E0292424A843FEB8A811241202FDFC1124952459FC51241D24E1FC4104 +9408:101811E0284027FE4088B97412521070FC0011FC9504597451541D74E104410C +9409:100013DE2A5227DE4210BA5211CE1000FC8813FE9488588853FE1C88E1044202 +940A:2000277C55444D7C8544757C260025FEF540257EA5AA752A264A3492C42A0444 +940B:2000227C5144497C84447A7C220021FEF940227E2EAAB32A624A3A92E22A0044 +940C:208020F851084BFE8512792221FE2040F8A223542898B33460543892E3500020 +940D:11F81050282027FC40A4B92812A01040FDFC1154958C597451541D74E104410C +940E:1090108829FE25104310BDFE11101110FDFE1110951059FE51001EA4E2524452 +940F:108810502BFE245041FCB954118C1174FD0411FC94085BFE51081C88E0A84010 +9410:1020102029FC24204154B888110412FAFC8810F8948858F850201CA8E1244060 +9411:208820885108493E82487B88209C2100FA4023DC2814B05462B43A94E21C0014 +9412:208822AA22DC548889547222200023FEFA4224442BFCB04460443884E1140208 +9413:2108208853C8481083DE7A6423D42014FBD420542894B0E863883894E2940122 +9414:200023FE50504BFE82527BFE200021FCF90421FC2904B1FC60203BFEE0200020 +9415:200023DE50884AA883FE798822DA24A6F9F821082908B1F861083908E1F80108 +9416:2124212452AA4BAE81247AAA23AE2124FBFE21102914B114628A3A4AE2160422 +9417:23DE225253DE4A5283DE7A0222F22292FAF222922AF2B29262923B32E2020206 +9418:102011FC2888245043FEB80011FC1124FDFC112495FC582051FC1C20E3FE4000 +9419:101010D42848254A4284BC84117A1000FEFC108494FC580050841E48F1FE4000 +941A:100013FE285025DC4104B90411DC1050FC5013FE9440582050A41E8AE28A4478 +941B:100011FC290425FC4104B9FC102013FEFC0011FC950459FC50201D24E2224060 +941C:08207F20223E3E4400843E2804107E2809442EC21830EFEE01003FF80920FFFE +941D:200027FE54004E28854877EE24922484F6A026A8A7E8748824943514C9241242 +941E:100011FC280424FC4004B9FC100011DCFC9413DC94085BFE51081C88E0A84010 +941F:108810882BDE248847FEB88811541222FDFC1104950459FC51041D04E1FC4104 +9420:2108209053FC489082947998209027FEF80021F82908B10861F83908E10801F8 +9421:2094209253F2489087FE701023D22252F25223D4A454728C20EA370AC0160022 +9422:22882108FABE2008729CA92A2288210806C01830EFEE01003FF811100920FFFE +9423:112410A82BFE260240F8B88810F8100CFDF0102095FC582053FE1C20E0A04040 +9424:21F8210851F84D0A85FA750A25FA2402F79E2090A0907F9E24923492C4920892 +9425:108810502BFE242041FCB82013FE1124FCA813FE940059FC51041D04E1FC4104 +9426:200023DE52524BDE82527BDE220222FAFA5222522BFEB25262523A92E20A0204 +9427:200023DE52524BDE82527BDE220222FAFA8A22FA2A8AB2FA628A3A02E20A0204 +9428:109017FC289427FC4290BBFE111213FAFD0E11F8950859F851081DF8E0904108 +9429:104412242928247E4010B828134A111CFD28114C951A592A51481D10E2FE4400 +942A:1020103E282025FE4122B9FC1122117EFD54117C9554597C51101EFEE22244C6 +942B:20A0209051FE4B2081FC792021FC2120F9FE21002BDEB25262523A72E2020206 +942C:2020213C51204BFE8010781423FE2210FBF022542A54B2D463683C4AE8960322 +942D:2040208053FE4A2282AA7A2223FE2272FAAA22022820B3FE60503888E1040602 +942E:202023FE52884A5083FE7A5022FC2254FBFE22542AFCB25062D83D54E6520850 +942F:108810882BFE24A840227DFA902410287BFE104094FC598452FC1C84E0FC4084 +9430:10F81088288824F84000B9DC11541154FDDC102095FE587050A81D24E2224020 +9431:10201020285024884104BAFA10001000FDDC1154955459DC50881C88E1544222 +9432:100011FC2954255441FCB88011FC1244FDF41154955459F450441DF4E0144008 +9433:100011FC282027FE4222B9AC102011ACFC0011FC9524592451FC1D24E12441FC +9434:201023C8527E4A4082627BD42200223EFBC822482E7EB24862483BC8E2480008 +9435:208C23EA50884BFE80087BE8222A23EAF80A23EC288CB3EC608A38EAE3960022 +9436:100011FC2954255441FCB80013FE1000FDFC110495FC586250941D88E2A440C2 +9437:108813FE288824004148BBFE11481178FD0011FC94205BFE50701CA8E3264020 +9438:100011FC295425FC4020B9FC102013FEFC88105095FC582053FE1C20E0204020 +9439:2000227C514449748054785426FE2282FABA22AA2ABAB282628A3A84E50008FE +943A:1020112428A827FE4202B8F810881088FCF8100095FC592451FC1D24E1FC4104 +943B:2040207C50404BFE82427A7823C4223CFA0023FE2A40B3A462583DB4E45209B0 +943C:102011FC2820248843FEB88811FC1104FDFC110495FC590451FC1C88E1044202 +943D:10101210297C241040FEB844132811FEFD10117C951059FE51101D10E2FE4400 +943E:3E1022FE3E4420287EFEA2103EFC231006C01830EFEE01003FF811100920FFFE +943F:1040102029FC24884050BBFE100011FCFD0411FC950459FC50201E94E28A447A +9440:100E11F028A2245441FEB92210141152FD4A12389440587C50841D48E03041CE +9441:2020208852524B2682527A8A222223FEF88821442A7AB08861503820E0D80706 +9442:101C11E0282027FE4020B9FC11AC1174FDFC102095FC582053FE1C00E154422A +9443:100011DC2844255440CCB95410001048FCFE119096FC589050FC1C90E0FE4080 +9444:202023FE502049FC80007BFE200221FCF82023FE2800B3FE60043BBEE2A4038C +9445:208822AA22DC548889547222200023FEFA2220202BFEB07060A83924E6220020 +9446:2144214455544B64814E7BE42004222CF94423E42884B3E4608438E4E7140008 +9447:2040202053FE4888805277AC22AA22A8F5AC2000A10471FC210431FCC1040204 +9448:200027FC224854448FFE744426EC2554FEEC24442EECB55466EC3C44E4540408 +9449:108813FE2888242041FCB82013FE1040FC8811FC940059FC51541D54E7FE4000 +944A:108813FE28A8249041FEBB2011FC1120FDFC112095FE590053FC1C88E070438E +944B:1000FEFE10547CA854547C7C5410FEFE110006C01830EFEE01003FF80920FFFE +944C:2040202053FE4A0281FC7948225021FCFB0421FC2904B1FC610439FCE0880104 +944D:3EF822883EF822883EF822883EF81450238806C01830EFEE01003FF80920FFFE +944E:23FE222052FC4AA482FC7A2023FE2284FAFC22842AFCB28462FC3A48E28403FE +944F:104010202BFE26224154B94A123A1000FDFC115497FE580051FC1C20E0A04040 +9450:100011FC282027FE4222B9AC102011ACFC0013FE942059FC51541D54E154410C +9451:200823E852884BEE82287BF4228223E2F80021FC2954B15461543954E7FE0000 +9452:7E40487E7E9043087EFE48AA7EFE010006C01830EFEE01003FF811100920FFFE +9453:1010107C2A54257C4110B8FE1000137CFD44117C9540597C51441D7CE280447E +9454:2040202053FE4A02851479DE22522554FA8821742A02B1FC60203924E2220060 +9455:2042239C52104BDE82947A94242023FCFA0423FC2A04B3FC62043BFCE1080204 +9456:210827FE5108480083FC7A94229423FCF82823FE2A20B32462A83A92E42A08C6 +9457:10501190289E27EA408AB9D2128A10A4FC501088972658A850701CA8E1244060 +9458:23F8224852484BF88248724823F82000FFBE2AAAAAAA7FBE2AAA3AAACFBE08A2 +9459:2394211027BE51188BAA7546221823E0FA0421FC2800B3F862083BF8E20803F8 +945A:108811DC288825DE4088B954122211FCFD0411FC950459FC51041DFCE0884104 +945B:1020101029FE2528417CB92811FE1110FD7C1154957C5954517C1E00E2444482 +945C:112410A82BFE260240F8B88811FC1104FDFC110495FC590451FC1C00E0884104 +945D:208823FE50884820823C7944203820D6FB382110297CB110617E3910E31004FE +945E:212422485124480083FC7A9422642294FBFC22482B68B248636A3A4AE2460362 +945F:102013FE282025FC4000BBFE125213FEFD0411FC950459FC51041DFCE0884104 +9460:244424E458A84AAA8EEE74A42AAA2EEEF2422040AFFE70E021503248CC460040 +9461:20202120513C492087FE78902294236CFA0423FC2A94B294636C3A04E3FC0004 +9462:2020203C50204BFE82227AF8222422FCFAA422FC2AA4B2FC64203D54E94A023A +9463:2040202053FE4A5083FE7A5223FE2200FA9422D82A90B2D2628E3C00E5540A2A +9464:11FC110429FC250441FC7C8891FC10887BFE108895245AAA50701CA8E1244060 +9465:108011F82A0825FC4124B9FC112411FCFD54122A95FC590451FC1D04E1FC4104 +9466:27DE251227D254548FC8751427E22000FBFC22042BFCB20463FC3A04E3FC0108 +9467:102013FE2A8A25FC4088B9FC110411FCFD0411FC950459FC50901C94E112420E +9468:2110209053DE4810825E798223DE2010FBDE22502BDEB25063DE3A50E25202CE +9469:200023FE50204BAE82AA7AAA23AE2020FBFE20202BAEB2AA62AA3BAEE02003FE +946A:2040207C50404BFC82447BF0224422FCFAA822F82AA8B2F862003DFCE5540BFE +946B:010006C01830EFEE01001FF009203FF8101028287C7C92927C7C10105454FEFE +946C:13D012902BDE266843C4BA8413F81108FDF8110895F8590851F81C90E112460E +946D:23DE225253DE4A5283DE7A2222FA2222FAFA22AA2AFAB2AA62FA3A72E2AA0226 +946E:208823FE208854128AFE701024FE2292FAFE209229FEB29266043AFEE244022C +946F:2148214C52AA480883FE79482368214AFB6A214A2B6CB14C616A3B8AE0160022 +9470:10201050288825744202B9FC115411FCFC0011FC9554595451FC1D54E154410C +9471:21F0221057FC4A0483FC7A2423B82222F9FE22102FFCB24463FC38D0E14A063E +9472:102013FE280025DC4154B9DC108813FEFC8813FE94885BFE50941D88E2A440C2 +9473:204027FE54924BFC80907BFC209027FEF90823FC2D0AB1F862403A7CE54008FE +9474:222223FE209051FE8B1075FE211021FEF91021FE2900B3FE628A3B76E2520276 +9475:208823FE50884BDE82527BDE20A02090F9FE21202BFCB52061FC3920E1FE0100 +9476:2090209057FE4894800A71FE250827E8F14A21EAAF2A75EA254C39EAC2160462 +9477:23FC210851F8490881F8790E27F82008FFFE22942B9CB294639C3AD6E7BC0084 +9478:27FC244457FC4C4487FC70002FBE2AAAFFBE2AAAAFBE7040204037FCC0400FFE +9479:204027FE5492490880807B1C2204239CFA0423FC2A48B36862483B6AE2460362 +947A:23DE225253DE4A5283DE7A5223DE2090F9FE21102BFEB51061FE3910E1FE0100 +947B:22A8224857BE4AA8875C7AAA22882FFEF21825E4A84273F8204037FCC04000C0 +947C:200023FE52524A5283FE71082154225EF7B4211EA25477DE20143554C55E0010 +947D:252827BE294857BE8B1875AA294623FCFA0423FC2A04B3FC62043BFCE1080204 +947E:21084FD2F03C23884812FBBE0280ABAA010006C01830EFEE01003FF80920FFFE +947F:55781448FF4822867F7808486B2849107F2806C41830EFEE01003FF80920FFFE +9480:210821EC510A4FEA89287BC8293E2FE8F9482BE8AA287B682AA83BF4CAB412A2 +9481:23DE225253DE4A5283DE78A021FE2320FDFC212029FEB00061FC3888E070078E +9482:2248215057FC4C0481F0711027FC2554F4E427FCA04077FC20403FFEC2A40452 +9483:23FE220253FE4A9282547A9222FE22AAFAFE23222AFAB2AA62FA3A22E5FA0004 +9484:208823FE50884BDE82527BDE225223DEFA2223FE2AAAB2FA62223A72E2AA0224 +9485:100010001E00200020007C0090001000FE001000100012001400180010000000 +9486:108010801E80208020807C8090801080FE8010801080128414841884107C0000 +9487:100010003DFC20084010BC2010401040FC801080110011041504190410FC0000 +9488:102010201E20202020207C2093FE1020FE201020102012201420182010200020 +9489:100010003DFE20204020BC2010201020FC201020102010201420182010A00040 +948A:100410041E04204420447C4490441044FE441044104412041404180410140008 +948B:104010401E40204020407C6090501048FE441044104012401440184010400040 +948C:100011FC1E04200820107C2090201020FE201020102012201420182010A00040 +948D:102010203C2020204020BC2011FC1020FC201020102010201420182013FE0000 +948E:1008103C3DE020204020BC20102013FEFC201020102010201420182010200020 +948F:110411243D2421244124BD2411241124FD2411241124112415241A2412040404 +9490:100810081E10202020407C8890081010FE201044108412081410182010C00300 +9491:100013FC3C8420884088BC90109C1084FD4411441128112816101A2814440182 +9492:100011F03D1021104110BD1011901150FD5011101110111215121A12120E0400 +9493:104010403C8020FC4104BE0410041104FC841044104410041404180410280010 +9494:108010403C5E21024102BD0211021102FD0211021102110215021902110A0104 +9495:104010403C40204043FEBC8810881088FC881108109010501420185010880304 +9496:100011F83C1020204040BC8011FC1054FC541094112410241444188411280010 +9497:100013FC3D0421444124BCA810881088FC501050102010201450188811040602 +9498:100011FC3C8820884088BC88108813FEFC881088108810881488190811080208 +9499:100013FE3C2020204120BD3E11201120FD2011FE100210021402180210140008 +949A:100010003DFE20104010BC2010201068FCA41122122210201420182010200020 +949B:102010201E20202020207DFE90201020FE20105010501250148818C811240202 +949C:100011FE3D0021004100BDFC11041104FD04110411FC11001500190011FE0000 +949D:20402040384027FC40407A48A2482248FA4823F82048204028423042203E0000 +949E:102010203C2020A840A4BCA211221120FE241024102810081410182010C00300 +949F:102010203C20202041FCBD2411241124FD2411FC112410201420182010200020 +94A0:102010203C2021FE4122BD2211221122FD52114A118A110215021902110A0104 +94A1:100011FC3D0421044124BD2411241124FD241124112410501448188411020602 +94A2:100011FC3D0421044194BD5411541124FD241154115411941504190411140108 +94A3:1008101C3DE021004100BDFC11441144FD4411281128111015101A2812440482 +94A4:102010203C5020504088BD4412221020FC0011FC100410081408181010100020 +94A5:100010FC3C8420844084BCFC10841084FC8410FC108410841504190412140408 +94A6:104010403C40207C4084BC8811201020FC201050105010501488188811040202 +94A7:104010403C8020FC4104BE0410841044FC441014102410441584180410280010 +94A8:102010403CFC20844084BC8410941088FC8010FE1002100215FA180210140008 +94A9:108010803C8020FC4104BD0412441044FC8410A4111411F41414180410280010 +94AA:104010203C0021FC4000BC0010F01090FC9010901090109214921912110E0200 +94AB:104010203C2023FE4080BC80108010FCFC841084108410841504190412280410 +94AC:102010201E20202420A47CA490A81120FE201050105012501488188811040202 +94AD:101011103C9020904010BD1010901090FC10101E13F010101410181010100010 +94AE:100011F83C4820484048BC48104811F8FC881088108810881488188813FE0000 +94AF:100011FC3D2421244124BD24112411FCFD041100110011001502190210FE0000 +94B0:100010003DFC20204020BC2010201020FDFC1020102810241424182013FE0000 +94B1:105010483C40205C41E0BC40105E11E0FC441048103010221452188A13060002 +94B2:100010003DFE20104010BC1010901090FC9E1090109010901490189013FE0000 +94B3:108810883C88208843FEBC8810881088FC8810F8108810881488188810F80088 +94B4:102010203C20202043FEBC2010201020FDFC1104110411041504190411FC0104 +94B5:102010203C20202041FEBC7010A810A8FD241124122210F81420182010200020 +94B6:100010003DFE20084008BDE811281128FD28112811E811281408180810280010 +94B7:100011FE3D002100417CBD4411441144FD441144117C11441500190011FE0000 +94B8:20402040384023FE408078A0A12021FCFB242524212421242934312820200020 +94B9:105010483C48204043FEBC80108010FCFD4411441128112816101A2814440182 +94BA:202820243824202043FE7A20A2242224FA242228222822902B12322A20460082 +94BB:102010203C202020403EBC2010201020FDFC1104110411041504190411FC0104 +94BC:100011FC3D0421044104BDFC11041104FD0411FC110411041504190411FC0104 +94BD:100010003DFC21044104BD0411FC1104FD04110411FC11041400180013FE0000 +94BE:100011FC3D2421244124BDFC11241124FD2411FC112410201420182010200020 +94BF:100010003DFC21244124BD2411241124FDFC1124112411241524192411FC0104 +94C0:102010203C20202041FCBD2411241124FD2411FC112411241524192411FC0104 +94C1:102010203D20212041FCBD2012201020FDFE1020105010501488188811040202 +94C2:102010203C4021FC4104BD0411041104FDFC1104110411041504190411FC0104 +94C3:2040204038A020A041107A48A4262020FBF820082010211028A0304020200020 +94C4:2008203C3BC0220042207A20A22023FEF8202020212821242A22342220A00040 +94C5:100010F83C8820884088BC8811061200FC0011FC110411041504190411FC0104 +94C6:200020803B1E225242527A52A2522252FA5222D2235A22542890309021100210 +94C7:108010803DFC21044204BDF411141114FD1411F4110411281512190210FE0000 +94C8:104010203C0023FE4020BC2011FC1124FD241124112411241534192810200020 +94C9:102010103C1021FE4020BC2010441084FDF8101010201044148219FE10820000 +94CA:102010103C1021FE4102BE0410801088FC9010A010C0108214821882107E0000 +94CB:104010203C2820084008BC4810541152FD5211601260104414C41944123C0000 +94CC:100011FC3D0421044104BDFC11001140FD4411481170114015421A42123E0400 +94CD:101010103C1021FE4112BD14111011FCFD4411441128112815101A2812440482 +94CE:100013FC3D0420884050BC2010D81326FC2011FC1020102017FE182010200020 +94CF:200427C43A84229442947A94A29427D4FA942294229422942A84348424940888 +94D0:104010443DF420484050BDFE10401080FDFE1240148010FC1404180410280010 +94D1:104010403C4421F44048BC5013FE1040FC801184129810E014821882107E0000 +94D2:100011FE3C8820884088BCF810881088FCF810881088109E15E8180810080008 +94D3:104810483DFE20484048BC20101011FEFC801080108010801480188010FC0000 +94D4:200023FC3890209040907892A4922294FA942298209020902890309027FE0000 +94D5:102010203DFE20404040BCFC10841184FEFC1084108410FC1484188410940088 +94D6:202820243824202043FE7A20A2242224FBA422A822A822902A9235AA24460882 +94D7:102010203C2021FC4020BD2410A410A8FC2013FE105010501488188811040202 +94D8:200027DE3892449244947C94A7D82094F992219222922A9A3494289002900110 +94D9:2080208038BC23C040507824A0D4230CF80023FE2090209029123112220E0400 +94DA:100011FE3C2020404088BD0411FE1022FC20102011FE10201420182013FE0000 +94DB:102011243CA420A440A8BC2013FC1004FC04100411FC10041404180413FC0004 +94DC:200023FC3A04220442F47A04A20422F4FA942294229422F42A04320422140208 +94DD:100010FC3C8420844084BC8410FC1000FC0011FE110211021502190211FE0102 +94DE:200021FC3904210441FC7820A02023FEFA222222222222222A2A322420200020 +94DF:200023FE3A02222242227A22A3FE2222FA222252224A228A2B02320223FE0202 +94E0:102011243D24212441FCBC0011FC1004FC0411FC110011001502190210FE0000 +94E1:200223E23A22222A42AA7AAAA2AA22AAFAAA22AA22AA208229423122220A0404 +94E2:20202120392021FC41207A20A02023FEF87020A820A821242924322220200020 +94E3:102011203D2021FC4120BE20102013FEFC90109010901090151219121212040E +94E4:200020063BB8208840887908A13E2388F88822882288213E29003280247E0800 +94E5:1008103C3DE020204020BDFC10201020FC2013FE102010401488190413FE0102 +94E6:1008103C3DE020204020BDFE10201020FC2011FC110411041504190411FC0104 +94E7:109010943D1421184310BD321152110EFD20102013FE10201420182010200020 +94E8:2040204038A0211042087C06A3F82040F840204023F820402840304027FE0000 +94E9:100411883C5020204050BC8811241020FFFE102010A810A415221A2210A00040 +94EA:2040204038A0211042087C06A3F82000F80023F8220822082A08320823F80208 +94EB:105010503C50215240D4BC5810501058FCD4115212501050149218921112020E +94EC:104010403C7820884150BC2010501088FD0610F8108810881488188810F80088 +94ED:104010403CFC21044288BC5010201040FC8011FC128410841484188410FC0084 +94EE:2080208039F8220840107BFCA0242024FBFE2024202423FC2824302020A00040 +94EF:108010803CF821084210BDFC11241124FD2411FC110011001502190210FE0000 +94F0:104010203C2021FE4000BC8811041202FC881088105010501420185010880306 +94F1:104010203C2023FE4040BC4010A010A2FDA4129814901088148418A210C00080 +94F2:204020203BFC200041087890A3FE2200FA002200220022002A00340024000800 +94F3:104010203C2023FE4040BC88110413FEFC9210901090109015121912120E0400 +94F4:2200217C3904240842107A20A07E212AF92A222A264A22522A923322224A0084 +94F5:20402020382023FE42027C44A04023FEF8882088210820D02820305020880304 +94F6:100011F83D08210841F8BD08110811F8FD441148113011201510194811860100 +94F7:210021003900211E47D27A52A2522252FA522492229221122A92325E24520800 +94F8:102010203DFC202040FCBC2011FE1048FC4810FE1088114815281A0810280010 +94F9:208820883BFE208840007BFEA2022444F84023FC204420842884310422280410 +94FA:204820443BFE204040407BFCA2442244FBFC2244224423FC2A44324422540208 +94FB:100013FE3C40204041FCBC84108413FEFC00100011FC11041504190411FC0104 +94FC:20202020382023FE40207924A0A420A8FBFE207020A820A82924322224200020 +94FD:201020143812201043FE7810A0902050F8482008208822A82A9A32AA24660002 +94FE:201022103910217E40207828A748217EF908210821FE210829083288247E0000 +94FF:208022FC3AA422A442A87A90A2A820C6F820202021FC20202820302023FE0000 +9500:102011243CA420A84020BDFC11041104FDFC1104110411FC1504190411140108 +9501:102011243CA420A84020BDFC11041124FD241124112411241450188811040202 +9502:100011FC3D24212441FCBD24112411FCFC20102011FC10201420182013FE0000 +9503:100011FC3D0421044104BDFC10001000FDFE1020102011FC1420182013FE0000 +9504:200820083BC82248425E7A4AA3CA224AFA4A23CA224A224A2A6A33D226120026 +9505:200021FC39042104410479FCA0202020FBFE22222252228A2B0A3202220A0204 +9506:20202120392021FC41207A20A02023FEF800200021FC21042904310421FC0104 +9507:201020D83B94209440907BFEA0902094F89420D82398209028AA30CA22860102 +9508:101C11E03C20202043FEBCA811241222FDF81088109010BE1502190212140408 +9509:102010203D2421244124BD2412AA1472FC20102011FC10201420182013FE0000 +950A:1004101E3DE020224112BC9410801008FDFE1008108810481448180810280010 +950B:104010403CFC20884150BC2010D81326FCF8102010F8102017FE182010200020 +950C:104010203DFC20004088BC5013FE1020FC20102011FC10201420182010200020 +950D:204020203BFC204040907908A3FC2004F9502150215021502A5032522452080E +950E:210020BE3A82220242FA7A52A2522252FBFE2252225222922B123202220A0204 +950F:210020BE3A82220242027AFAA28A228AFAFA228A228A22FA2A023202220A0204 +9510:220821083910402043F87A08A2082208FBF820A020A0292031242224041C0800 +9511:21082088389023FC40247824A3FC2220FA2023FE206220A2292A322424200020 +9512:104010203DFC21044104BDFC11041104FDFC1120112211141508194411820100 +9513:100011FC3C0420FC4004BDFC100013FEFE0211F8108810881450182010D80306 +9514:200023F83A08420843F87A00A20023FCFA0422F422942A9434F4240408280010 +9515:2000277E3D04250445747D54A6542554FD542554257425542E04340424140408 +9516:202020203BFE202041FC7820A3FE2000F9FC210421FC210429FC310421140108 +9517:2020202239FA202440287BFEA0202040F8FC2184228420FC2884308420FC0084 +9518:208820883BFE208840A87820A3FE2040F88020FC218422842884308420FC0084 +9519:21102110391027FC41107910AFFE2000FBF82208220823F82A08320823F80208 +951A:208820883BFE208840887800A1FC2124F924212421FC21242924312421FC0104 +951B:202020203BFE205040A87924A2FA2020F8A8208823FE20882888308821080208 +951C:102010203DFC20504088BD0413FE1008FDE81128112811E81528180810280010 +951D:100011FC3D0421FC4104BDFC100011FEFC0813FE100811081488180810280010 +951E:100011FC3D24212441FCBD24112411FCFC2013FE107010A815241A2210200020 +951F:100011FC3D04210441FCBD04110411FCFC00111211D41118151019521192010E +9520:10FC10843C8420FC4084BC8410FC1000FDFE1102110211FE1502190211FE0102 +9521:100011F83D08210841F8BD08110811F8FC8011FC1254109415241A4410940108 +9522:100011FC3D0421244124BDFC11241124FD741154115411741504190411FC0104 +9523:200023FE3A52225242527BFEA0202040F8FC2104228820502820304021800600 +9524:2008203C39E0202040207BFEA1242124FBFE2124212423FE2820302023FE0000 +9525:105010483C8020FE4190BE9010FC1090FC9010FC10901090149018FE10800080 +9526:102010403DFC210441FCBD0411FC1020FC2013FE12221222162A1A2410200020 +9527:101C11E03D10211041FEBD101110117CFD4411541154115415541A2812440482 +9528:201020503B90221E42127A24A3C82288FA882288228822942A94349424940822 +9529:102011243CA8202041FCBC4013FE1088FD0412FA1488108814A818921082007E +952A:2080208038FC2154425478A4A1242244F8942108204020A42AAA328A24780000 +952B:104010203DFC20004108BC90100013FEFC00100011FC11041504190411FC0104 +952C:204022443A44244840A07910A6082044F84022482248245028A0311022080C06 +952D:204020203BFE220244047800A3FE2020F8202120213C21202AA03260243E0800 +952E:201020103B7C211441FE7A14A27C2710F97C251025FE22102A10350028FE0000 +952F:200023FC3A04220443FC7A20A22023FEFA20222022FC22842A84348424FC0884 +9530:200021FC3808201040207BFEA02020A0F84021FC215421542954315427FE0000 +9531:109210923D2422484124BC9210921000FDFE1122112211FE1522192211FE0102 +9532:2100213C3BD4211443947914A7D42124F94C204027FE204028A0311022080C06 +9533:208820883BFE208840A87820A1FC2124F924212427FE20202850308821040202 +9534:111011123DD421184152BD92112E1040FDFC1104110411FC1504190411FC0104 +9535:109010903C9E22A241D4BC88109410A4FDFE128414A410941494188410940088 +9536:200021FC3924212441FC7924A12421FCF8002040202422A22A8A348820780000 +9537:200023DE3A52225243DE7800A1FC2000FBFE2080210021FC2804300420280010 +9538:1008103C3DE020204020BDFE102010A0FD2C1124112411AC1524192411FC0104 +9539:200820C83B082108412A792AA3AC2148F9082388255421142914312421240142 +953A:1008103C3DE0202043FEBC2011FC1124FDFC112411FC102015FC182013FE0000 +953B:208023383A28222843A87A46A200227CFBA42224222823A82E10322822440282 +953C:10A0112C3D24212441ACBD24112411FCFC2011FC108810501420185010880306 +953D:102010403CFC208440FCBC8410FC1000FDFE1020102010FC1420182011FE0000 +953E:101E13E03C4421244088BDFC10401040FDFE108010FC114415281A1010680186 +953F:204020203BFE200041FC7904A1042104F9FC2052209421882A8834A420C20080 +9540:204020203BFE224842487BFEA2482278FA0022FC224422482A28341024680986 +9541:210420883BFE2020402079FCA0202020FBFE2000202023FE2820305020880306 +9542:102011243CA8202043FEBCA811241202FC4013FE108811081590186011980604 +9543:20842044384823FE40847884A108214AFA52239C208421082908325223DE0042 +9544:209027FC389423FC42907BFEA1122216FDFC2104212421242924305020880304 +9545:200023FC3A24422443FC7A00A2FC2284FA8422FC22842AFC3484248408FC1084 +9546:208820883BFE2088400079FCA10421FCF90421FC202023FE2850308821040202 +9547:202020203BFE402041FC7904A1FC2104F9FC210421FC290437FE208801040202 +9548:202820243BFE202041FC7924A1FC2124F9FC2124200823FE2888304820480018 +9549:200023FE380021FC41047904A1FC2000FBFE228A225223FE2A223222222A0204 +954A:200023FC390821F8410879F8A10E27F8F80827BC20A422A42928329024A80846 +954B:2020212438A8202043FE7A02A00021FCF904210421FC2050285030922112020E +954C:20A0209039FE232045FC7920A1FC2120F9FE210023FC2088289E3102220A0404 +954D:204020803BF8220843F87A08A3F82208FBF8204027FE20E02950324824460040 +954E:102010503C8821744202BCF8108810F8FC0C11F0102011FC14201BFE10200060 +954F:204023BE3A12229242527AAAA3242040FBFE2222222223FE2A22322223FE0202 +9550:204020203BFE200041FC7904A1FC2000FBFE220222FA228A2AFA3202220A0204 +9551:204020203BFC210840907BFEA2022444F82023FC208020F82888310821280210 +9552:210420843888200043FE7800A0882104FA0221FC215421542954315427FE0000 +9553:204020203BFE2202400079FCA04020A2FB342058209423342852309023500020 +9554:204020203BFE2202441479E0A1002100F9FC2110211027FE2800309021080204 +9555:204020203BFE220240507888A1242050F888210422FA20882888308820F80088 +9556:100013FE3C5021FC4154BD5411FC1000FDFC100013FE102014A8192412A20040 +9557:2020212438A823FE420278F8A0882088F8F82020202021FC2820302023FE0000 +9558:200021F8390821F8410879F8A00023FCFA9423FC200021F82890306021980606 +9559:100011FC3D2421FC4124BDFC10401088FDF01020104413FE1422192412220060 +955A:202022223A2223FE40007BDEA2522252FBDE2252225223DE2A523252255A08A4 +955B:202027FE3C2025FC442477FEA42425FCFC2025FC252425FC2D2439FC2924112C +955C:208020403BF8211040A077FEA00023F8FA0823F8220823F82920312222220C1E +955D:204020203BFE208840507BFEA22222FAFA2222FA228A228A2AFA3202220A0204 +955E:22202120392047BE42407A20A3BC22D0FA90229022FE2A9034A825A808441082 +955F:22102110391047BE42407A00A3BE228AFA8822A822AE2AA834A825A8085E1080 +9560:200023DE38422252414A7A52A02820C4FB1220602188203229C4301820600380 +9561:200023FE385023FE42527BFEA00021FCF90421FC210421FC282033FE20200020 +9562:20002FFE38004A2849487BEEA8922884FAA02AA82BE828883894291409241242 +9563:202020203BFE2050428A7904A3FE2504F9FC210421FC20202924322224A20040 +9564:20A024A43AA820A047FC7910A0A027FCF84023F8204027FC28A0311022080C06 +9565:208020F8391023FC452479FCA12421FCF80023FE200021FC290431FC210401FC +9566:210820883BC8201043DE7A64A3D42014FBD42054209420E82B88309422940122 +9567:2200217C3D04244445F47C44A5F42554FD7425D4255425F42CE435542444044C +9568:210820903BFC209042947998A09027FEF80021F82108210829F83108210801F8 +9569:204020203BFE228A41247A22A1FC2124F9FC202023FE22222BFE322220200020 +956A:200023BE38A220A240BE7B88A208223EFA2A23AA20AA20BE2888308A257E0202 +956B:202027A438A8229241147A08A5F42802FBF82208220823F82A0831102FFE0000 +956C:208823FE38A8209041FE7B20A1FC2120F9FC212021FE21002BFC30882070038E +956D:100011FC3C2023FE4222BDAC102011ACFC0011FC1124112415FC1924112401FC +956E:200023FC3A94229443FC7800A7FE2000FBFC220423FC20A2291433082D440182 +956F:200023F83AA822A843F87900A3FC2484FBE422A422A423E4289437F420140008 +9570:202023FE3A88225043FE7A50A2FC2254FBFE225422FC22502AD8355426520850 +9571:2040202039FC208840507BFEA00021FCF90421FC210421FC28203294228A047A +9572:2080204037FE44024A2473BCA4A42AA8F51022E8240423F828403248244400C0 +9573:204020203BFE225043FE7A52A3FE2200FA9422D8229022D22A8E340025540A2A +9574:212422483924200043FC7A94A2642294FBFC2248236822482B6A324A22460362 +9575:21F022103BFC260443FC7A24A3B82222F9FE221027FC22442BFC30D0214A063E +9576:204027FC380023B842A87BB8A11027FCF91027FC211027FE2928331025480186 +9577:00000FF808000FF008000FF00800FFFE1200111010A010401220141818061000 +9578:00000FF8080008000FF0080008000FF008000800FFFE0400082010103FF81008 +9579:00403E40204020783C8820883C8821102010FE10102820284448FE4402840102 +957A:00083E3C21E020203C2020203DFE20202020FE50105020504488FE8803040202 +957B:00203E2020A020A03CFC20A03D20202021FEFE20103020504448FE8803040202 +957C:00003EFE208220FE3C8820AA3CAA20AA20BEFE8810AA20AA44AAFEAA02BE0102 +957D:00203E2021FC20203D5420883D0422FA2088FEF8108820F84420FEA803240060 +957E:00003BFE21243A2227FE3A22237622AAFB76222223764AAAFB764A22022A0204 +957F:0800081008200840088009000800FFFE0A0009000880084009200A180C060800 +9580:00003E7C224422443E7C224422443E7C20042004200420042004200420142008 +9581:00007CF844887CF844887CF84008408840884108410842084408480840284010 +9582:00007C7C44447C7C44447C7C4004400440045FF4400440044004400440144008 +9583:00007C7C44447C7C44447C7C4004410441044104428442444424480440144008 +9584:0010771055105510771055105510771041104128412841284128414445444282 +9585:00007C7C44447C7C44447C7C40045FF441044104410441044104450442144008 +9586:00007C7C44447C7C44447C7C40045FF440044FE440045FF44004400440144008 +9587:00007C7C44447C7C44447C7C40045FF442044284424442244204420442144008 +9588:00007C7C44447C7C44447C7C40044FE4410441045FF441044104410441144008 +9589:00007C7C44447C7C44447C7C408440844FF44184428444844884428441144008 +958A:00007C7C44447C7C44447C7C4104410449244924492449244FE4400440144008 +958B:00007CF844887CF844887CF840084FC8448844885FE844884488488850A84010 +958C:7C7C44447C7C44447C7C420441045FF4400447C444444444485450344004400C +958D:00007C7C44447C7C44447C7C420441047FFC440447E444244824514460944008 +958E:7C7C44447C7C44447C7C410441045FF44204448444844904522467F44214400C +958F:00007C7C44447C7C44447C7C40045FF441044FE4410441045FF4400440144008 +9590:7C7C44447C7C44447C7C400441C45E0443C45E0443E45E04422441E440144008 +9591:7C7C44447C7C44447D7C410441045FF441044384454449245114410441144008 +9592:7C7C44447C7C44447C7C400447E4442447E4442447E4442448A4504440144008 +9593:00007CF844887CF844887CF840084FC848484FC848484FC84848400840284010 +9594:7C7C44447C7C44447C7C420441045FF440444444428441044284444448544008 +9595:00007C7C44447C7C44447C7C40044FE4408448844FF442844484588441944008 +9596:7C7C44447C7C44447C7C410441045D1445A44544492449145114650442144008 +9597:00007C7C44447C7C44447C7C4084448442844884448440F45F84408440944088 +9598:7C7C44447C7C44447C7C40044FE449244FE449244FE449244104410440144008 +9599:00007C7C44447C7C44447C7C420441045FF441044FE4492449A4494441144108 +959A:00007C7C44447C7C44447C7C420441044FE44444424442845FF4400440144008 +959B:7C7C44447C7C44447C7C40045FF44104492445445FF441044104410441144008 +959C:00007CF844887CF844887CF840085FE840484F4849484F484048414840A84010 +959D:7C7C44447C7C44447D7C4104428444444A24511C6FE440244044428441144088 +959E:7C7C44447C7C44447C7C440448245FF4445444445FF444444444444448544008 +959F:00007C7C44447C7C44447C7C4204414444845524561464544C4473C440144008 +95A0:00007C7C44447C7C44447C7C40045FF441044FE4410441445FF4400440144008 +95A1:7C7C44447C7C44447E7C41045FF4420444444F8441244644588443444C344008 +95A2:7C7C44447C7C44447C7C4004444442844FE441045FF44104428444444824400C +95A3:7C7C44447C7C44447C7C420447E44824544443844C64701C47C44444445447C8 +95A4:7C7C44447C7C44447C7C4104428444445BB4400447C44444444447C444544008 +95A5:7C7C44447C7C44447C7C40044544492459F46F244944488449544A344814400C +95A6:00007C7C44447C7C44447D7C4284444458344444444444444AA4511440144008 +95A7:7C7C44447C7C44447C7C400444445FF4444444447FFC4004444444244824400C +95A8:7C7C44447C7C44447C7C41044FE441045FF441044FE441045FF4400440144008 +95A9:7C7C44447C7C44447C7C410441044FE4492449244FE441145FF440144004400C +95AA:7C7C44447C7C44447C7C40045FF442844FE44AA44AA44CE448244FE44824400C +95AB:7C7C44447C7C44447C7C40045FF4511451145FF453945554593451145FF4400C +95AC:7C7C44447C7C44447E7C41044FE448244FE448244FE4491448A44A444C24481C +95AD:7C7C44447C7C44447C7C40044FE448244FE440045FF450145FF4400440144008 +95AE:7C7C44447C7C44447C7C40345DC4444448445DF44444544449F4560461F4400C +95AF:00007C7C44447C7C44447C7C5084488462A452944C8470245044518456144008 +95B0:7C7C44447C7C44447C7C400442044CE4482448244EE4482448244FE44004400C +95B1:7C7C44447C7C44447C7C444448245FF4682C48244FE44284428444944874500C +95B2:7C7C44447C7C44447C7C444442844FE448244FE442844284449458744004400C +95B3:7C7C44447C7C44447D7C41045FF441044FE449244FE449244FE441045FF4410C +95B4:7C7C44447C7C44447C7C40044FE448244FE448244FE448244FE444444824400C +95B5:7C7C44447C7C44447C7C450444844FF459046FE449044FE449044FF44804400C +95B6:7C7C44447C7C44447FFC48244FE448244FE440045FF450145FF450145FF44008 +95B7:08008BDE525223DE52528BDE22022222FA222222B252AA4A2A8A2202A20A4204 +95B8:7C7C44447C7C44447C7C40045FF442844EE4482448244EE4428442845FF4400C +95B9:7C7C44447C7C44447D7C42045FF449245FF4692C4FE449244FE4411440F4400C +95BA:7C7C44447C7C44447C7C40044FE448244FE448244FE441045FF4444443845C6C +95BB:7C7C44447C7C44447E7C420447E4482452444CE4482448244EE4482448244FEC +95BC:7C7C44447C7C44447C7C480444445E4448A44F144A4C4A244A8452446624400C +95BD:7C7C44447C7C44447C7C40645F8451045FE4509458744FE448244FE448244FEC +95BE:7C7C44447C7C44447C7C408440A45FF440844EA44AA44EA4405446B45914420C +95BF:7C7C44447C7C44447C7C40E45F2449445FF4501447C440444684410442844C4C +95C0:7C7C44447C7C44447C7C44445FF444447FFC482457D4644C47C4442443E4400C +95C1:7C7C44447C7C44447C7C40044EE44AA44EE44AA44EE44824482448244864400C +95C2:7C7C44447C7C44447C7C492445445FF442047FFC482457D4644C44C4442443EC +95C3:7C7C44447C7C44447C7C4FE448244FE448244FE448244FE441445FF44284444C +95C4:7C7C44447C7C44447C7C40045FF442844FE44AA44FE442045FF4444443845C6C +95C5:7C7C44447C7C44447FFC48244FE448244FE4420443F442045FE4444443845C6C +95C6:7C7C44447C7C44447C7C400447C4444447C440044EE44AA44AA44EE440144008 +95C7:7C7C44447C7C44447E7C41044FE4444442845FF440044FE448244FE448244FEC +95C8:7C7C44447C7C44447C7C42044FC444445FF448244FE441044FE451045FF44108 +95C9:7C7C44447C7C44447C7C40045FF442845FF452945FF441044FE441045FF4400C +95CA:7C7C44447C7C44447C7C4004483445C4404453FC484441F4451449F450144008 +95CB:7C7C44447C7C44447C7C40944EA4424C5454482457D4410C4FE442844444582C +95CC:7C7C44447C7C44447C7C41045FF441045FF4555453945FF4454449245114410C +95CD:7C7C44447C7C44447C7C41144FE441445FF442044FE4742447E4442447E4400C +95CE:7C7C44447C7C44447D7C42044FE448244FE448244FE441145DA445444924531C +95CF:FC7E8442FC7E8442FC7E8002BFE2A022AFA2A222AFA2AAAAAFAAA25ADFCA8046 +95D0:7C7C44447C7C44447D7C4FE441044FE448244FE448244FE448247FFC4444482C +95D1:7C7C44447D7C46447FFC48244FE448244FE448244FE441045FF445444924410C +95D2:7C7C44447C7C44447C7C47C4444447C4444447C440044EE44AA446644AA4466C +95D3:7C7C44447C7C44447D7C49244FE440045FF440044FE448244FE444445FF4400C +95D4:7C7C44447C7C44447C7C41044FE441045FF444444FE440044FE44AA45FF4400C +95D5:7C7C44447C7C44447C7C51444A445F744494552455445F44444448A449145208 +95D6:7C7C44447C7C44447C7C40044FF449044FE449044FE449044FF440145554402C +95D7:7C7C44447C7C44447C7C4844484452945CE4484452945EF440044AA45154400C +95D8:00007C7C44447C7C44447C7C40245E2440F45E2452A45E6452244F2478B45048 +95D9:7C7C44447C7C44447C7C480444445E7C52945E9451545E246A544E8C4004400C +95DA:7C7C44447C7C44447C7C480449E45D2449E449247DE4492449E454C45154623C +95DB:7C7C44447C7C44447C7C492445445FF4501447C4444447C441044FE441045FEC +95DC:7C7C44447C7C44447C7C484452945CE44A545EF4428452945EF4428444944888 +95DD:7C7C44447C7C44447C7C40245F24517C5F9451145F5451245F244A545194400C +95DE:7C7C44447C7C44447C7C40045C44447C7F5452945E1452545E2453A47E544298 +95DF:7C7C44447C7C44447D7C46C4583447C4444447C440044EE44AA446644AA4466C +95E0:7C7C44447C7C44447D7C4FE449244FE441047FFC48244FE448244FE44444482C +95E1:7C7C44447C7C44447EFC4AA44EE440044FE449244FE449244FE441045FF44108 +95E2:7C7C44447C7C44447C7C40845E4453F45EA450445EF46A444AE44E444A544008 +95E3:7C7C44447C7C44447C7C492445445FF4501447C444444FE449244FE449244FEC +95E4:7C7C44447C7C44447FFC4AA44FE440045FF440044FC448444FC445244CC4562C +95E5:7C7C44447C7C44447C7C50844BE4408447F459444BE448844FF44884488457EC +95E6:7C7C44447C7C44447C7C42844FE44AA44FE44AA45FF4444447C4444442844FEC +95E7:7C7C44447C7C44447C7C408463E4508447F4722453E45154532455146FF4400C +95E8:200013FC10044004400440044004400440044004400440044004400440144008 +95E9:200017FC000440044004400440045FF440044004400440044004400440144008 +95EA:200017FC00044004410441044104410442844244442448244004400440144008 +95EB:200017FC000440045FF44004400440044FE44004400440045FF4400440144008 +95EC:200017FC000440044FE44104410441045FF44104410441044104410440144008 +95ED:200017FC0004408440845FF44084418442844484488450844284410440144008 +95EE:200017FC00044004400447C44444444444444444444447C44444400440144008 +95EF:200013FC100440045F844084488448844FE4402440245FA44024414440944008 +95F0:200013FC1004400440045FF4410441044FE44104410441045FF4400440144008 +95F1:200017FC010441045FF4410441044FE4410441045FF44114411441544124400C +95F2:200017FC00044104410441045FF4410443844544492451144104410440144008 +95F3:200017FC0204420442045FF444044484488449045144522467F4421440144008 +95F4:200013FC1004400447C444444444444447C444444444444447C4400440144008 +95F5:200017FC0004420441045FF44044444442844104428444444844400440144008 +95F6:200017FC0004420441045FF44004400447C44444444444544834500440144008 +95F7:200017FC00044204410441044404542454146454444443C44004400440144008 +95F8:200017FC000440044FE4492449244FE4492449244FE449244104410441144008 +95F9:200017FC0004420441045FF4410441044FE44924492449A44944410441144008 +95FA:200017FC000441044FE4410441045FF4400441044FE4410441045FF44004400C +95FB:200017FC000440045FF4444447C4444447C4444444745FC44044404440544008 +95FC:200017FC00044844444445F440445C4444A4449445144A0451F4400440144008 +95FD:200017FC0004410441044FE44924492449244FE44904412441F45E144804400C +95FE:200017FC0004400447C44444444447C440044FE4482448244FE4400440144008 +95FF:200017FC0104492449244FE440044FE4402440244FE44804481447F44004400C +9600:200017FC000445444524490459F46F044924492448C4489449544A3448144008 +9601:200017FC0204420447E44C445284410442844C6477DC4444444447C440144008 +9602:200017FC0004420441045FF4420444444F8441244644588443444C244004400C +9603:200017FC000440045FF4511451145FF4511453945554593451145FF44004400C +9604:200017FC0004440447C4488451046FE449244FE449244FE44114411440F4400C +9605:200017FC00044444428440044FE4482448244FE4428442844484489450744008 +9606:200017FC020441044FE448244FE448244FE4491448A44A444C2448144004400C +9607:200017FC010441144FE441445FF442044FE4742447E4442447E4442440144008 +9608:200017FC008440A440945FF440844EA44AA44EA440C4465458B441144204400C +9609:200017FC000442045FF444444924711C4FE449244FE449244FE4411440F44008 +960A:200017FC00044FE448244FE448244FE440045FF450145FF450145FF44004400C +960B:200017FC000442044CE448244EE448244FE4428442844494449448745004400C +960C:200017FC000440E45F044A2445445FF4501447C440444684410442844444482C +960D:200017FC000440645F8451045FF450845C5450344FE448244FE448244FE4482C +960E:200017FC0204420447E4482452444CE4482448244EE4482448244FE440144008 +960F:200017FC0004484444445EA448A449144E0C4A444A244A044A8452445624600C +9610:200017FC0004444442844FE449244FE449244FE441045FF44104410440144008 +9611:200017FC010441045FF441045FF45114555453945FF44544492451244104410C +9612:200017FC00044FE448244FE448244FE448244FE441445FF4410442844444482C +9613:200017FC01044FE449244FE441047FFC40044FE448244924492442844444482C +9614:200017FC0004483445C46444504451F44444484479F44914491449F44004400C +9615:200017FC000440845E9442A44A4C4454482457D4610C4FE4410442844444582C +9616:200013FC11044FE441045FF4420444444FE440044FE44AA44AA45FF440144008 +9617:200017FC01045FF441044FE448244FE448244FE448244FE448247FFC4444482C +9618:200017FC00044FE448244FE448244FE440045EF4421452944A5452944A54442C +9619:200017FC000451444A445F744494552455445F44444448A44914520440144008 +961A:200017FC00045C44447C7F5452945E1452545E2453A47E544294430440144008 +961B:200017FC00045FF452945FF440047FFC40044FE448244FE445144CA47444462C +961C:020004003FF020103FF020003FF8200820083FF801000100FFFE010001000100 +961D:00007C0044004800480050004800480044004400440068005000400040004000 +961E:00407C40444048404BFC50444844484444444484448468845104410442284410 +961F:00407C4044404840484050404840484044A044A044A069105110420844044802 +9620:00007DF04490489048905090489049F04490449044906892508A408A40864082 +9621:00087C3C45E048204820502048204BFE44204420442068205020402040204020 +9622:00007C0047FC48904890509048904890449044904490689251124112420E4400 +9623:00407C40448048FE4900520048FC480844104420444068805102410240FE4000 +9624:00207C2044204920492C513449644BA445244534452869225122410240FE4000 +9625:0040784048405044506867705160495049504A486A4854444842404041404080 +9626:00407C40444048404944514449484A50444044A044A068905110410842044402 +9627:00107D104490489048105110489048904410441E45F068105010401040104010 +9628:00007DFE450049004978514849484948454845684550694251424142423E4400 +9629:00087C68478848884888508848884BFE44884488448868885108410842084408 +962A:00087C1C45E04900490051FC4944494445444528452869105110422842444482 +962B:00007C0045FE4810481050204820486844A44522462268205020402040204020 +962C:00807C4044404BFC4800500049F04910451045104510691251124212420E4400 +962D:00407C4044804888490453FE48024890449044904490689051124112420E4400 +962E:00007DFC44004800480053FE48904890449044904490689251124112420E4400 +962F:00207C204420492049205120493C492045204520452069205120412047FE4000 +9630:00107D10451049124912511449D84910451045104510691251524192410E4000 +9631:00887C88448848884BFE508848884888448847FE448868885088410841084208 +9632:00407C2044204BFE48805080488048FC44844484448468845104410442284410 +9633:00007C0045FC4904490451044904490445FC4504450469045104410441FC4104 +9634:00007DFC45044904490451FC49044904450445FC450469045204420444144808 +9635:00407C4044404BFE488050A0492049FC4420442044206BFE5020402040204020 +9636:00207C2044504850488851044A02488844884488448868885088410841084208 +9637:00007C0045FE48204820502049204920453C4520452069205120412047FE4000 +9638:00407C2045FC4904490451FC49004900457C45084510692051424282427E4400 +9639:00207C20442049FC4820502048204BFE4420444044406888510443FE41024000 +963A:00047C1E45F0491049105110491049FE4510451045106908510A414A41A64112 +963B:00007DF845084908490851F849084908450845F8450869085108410847FE4000 +963C:00807C80448048FE494051404A40487C444044404440687E5040404040404040 +963D:00207C2044204820483E50204820482045FC4504450469045104410441FC4104 +963E:00207C2044504850488851244A12481045FC4404440868885050402040104010 +963F:00007DFE4408480849E85128492849284528452845E869285008400840284010 +9640:00407C20442049FE49025204490049084510452045C069045104410440FC4000 +9641:00807C8044FE49004A205120492C497447A44524453469285122410240FE4000 +9642:00207820482053FE5222622452204BFC4A844A886A4852504220445044884906 +9643:00007DFE44204820482051FE492249224552454A458A690251024102410A4104 +9644:00887C8844884908497E53084D08494845284528450869085108410841284110 +9645:000079FC48005000500063FE50204820492849246A2452224422402040A04040 +9646:00207C20442049FC4820502048204BFE44204420452469245124412441FC4004 +9647:00907C88448848804BFE50A048A048A444A445284528693252224262449E4800 +9648:00407840484057FE5080612051204A204BFC4820692851244222442240A04040 +9649:00007DFC440848104830504848844B02440045FC442068205020402043FE4000 +964A:00207C20447C488449485030482048484590443E444269A45018401040604180 +964B:00007BFE4820502052FC62A452A44AA44AD44A846A8452944288420043FE4000 +964C:00007DFE44204820484051FC49044904450445FC450469045104410441FC4104 +964D:00807C8044FC49084A90506049984E26442045FC44206A2053FE402040204020 +964E:00207D20452049FC4920522048204BFE447044A844A869245124422240204020 +964F:00207C2045FE4840484050FC4884498446FC4484448468FC5084408440944088 +9650:00007BF84A08520853F8620852084BF84A444A486A3052204210428843064200 +9651:00007DFE44204820484051FE49524952455245524552695251524142410A4104 +9652:00407C4044FC49044A0851FE4900497C454445444554694851424242423E4400 +9653:002078204BFE48505088510462FA50004BFE4840488069FC5004400440284010 +9654:00407820482057FE5040608451084BF048224844698856104020405041884604 +9655:00407840484057FC50406248515048404FFE48A068A051104110420844044802 +9656:00407C40448849044BFE500248884944464244F845886A505020405041884606 +9657:00207D2444A448A8482051FC4904490445FC4504450469FC5104410441144108 +9658:00007BFC48005124524864905248492448004BFC684050404040404047FE4000 +9659:00007DFE45004900497C5100490049FE45504552455469485148424442524460 +965A:001078184BD45014501067FE5010489048904AD06A905290428A42EA47064202 +965B:02207A244A2853B05220622252A24B1E484048406BFC50404040404047FE4000 +965C:00207C2044204BFE4820502049244924452446AA442068505050408841044202 +965D:00407840484057FE5040645052484A484D5448A268A051104110420844044802 +965E:00287DC8448848884BFE5088488849084628442045FC68205020402043FE4000 +965F:002078204920513C5120612057FE480048204924692452284410402040C04700 +9660:00287C2445FE4820482051FC4924492445FC4524452469FC512441244124410C +9661:00207C2045FC4820482050204BFE482044204520453C692052A04260443E4800 +9662:004078204BFE5202540461F8500048004BFE48906890509041124112420E4400 +9663:00207C2045FE482049FC5124492449FC4524452445FC682053FE402040204020 +9664:00007840484050A05110620855F6484048404BFC684051504248444441444080 +9665:00407C40447C488449085210493E492245224522453E692251224122413E4122 +9666:00207C2047FE482049FC50404BFE4848448844FE450869485228440840284010 +9667:00007DFC4504490449FC5104490449FC4420442045FC68205020402043FE4000 +9668:00007CF84488488848F8500049FC490445244524452469245050404840844304 +9669:0040784048A050A05110620855F64800488848486A4851504110402047FE4000 +966A:00407C2045FC48004908509048004BFE4400440045FC69045104410441FC4104 +966B:00907C9044904B9E4890509048904B9C4490449044906B9E5090409040904090 +966C:00007FE04A5E5252525263D252524A544BD44A546A4852E84754405440624040 +966D:00207C2045FC4850488851044BFE480845E84528452869E85128400840284010 +966E:00A07C90448049FE491053104DFC4910451045FC45106910511041FE41004100 +966F:00207C2044504888490452FA480049FC4554455445FC6954515441544104410C +9670:00207C20445048884944522249F84808441045FC44006BFE5040408841FC4084 +9671:00807C8044FE49024A42524A4952484247FE444244E26952524A404240544008 +9672:0008783C49E05020502063FE512449244FFE4924692453FE4020402043FE4000 +9673:004078404FFC504053F8624853F84A484BF8484068E0515042484C4640404040 +9674:004078804BFC5224522463FC52244A444BFC4890691057FE4010401040104010 +9675:0020782049FC5020502063FE508849444A4248F8698852504020405041884606 +9676:0100790049FC5204550461E4528448844FF448846AA452A443E4400440284010 +9677:0080788048F851085210640050404B9C4A044A046B9C52044204420443FC4204 +9678:00207C2045FC4820482053FE488849044622442045FC68205020402043FE4000 +9679:00287DC8448848884BFE508848884908460045FC4504690451FC4104410441FC +967A:00207C2044504888490452FA4820482045FC4524452469FC5050408841044202 +967B:00007BFE4850505053FE625252524A524BFE4820682053FE4020402047FE4000 +967C:00207C2245FA4824482853FE4820484044FC4584468468FC5084408440FC4084 +967D:00007CFC448448FC488450FC480049FE448044FE452A6A4A5092412240544088 +967E:00007BFE4820504051FC6154515449544954492C682053FE4050408841044202 +967F:00007DFE4510491049FC51104954495445BA4510452869245142418041FE4000 +9680:00087C3C45E048204BFE502049FC492445FC452445FC682051FC402043FE4000 +9681:00007BFE4A0052FC528462FC52844AFC4A204BFE6A4852C842304248428443FE +9682:00207C50448849044AFE508048F8488044F8448047FE68405088410443FE4002 +9683:004078A04910520855F6600053C44A544A544BD46A54525443D44244425442C8 +9684:00007DFC4504490449FC5104490449FC440047FE44206920513C412042A0447E +9685:01FC7924492449FC5124512461FC502048204BFE4A226A2A52FA420A42024206 +9686:008079F84A08551050E063185C064BF848404A406BFC544043F840404FFE4000 +9687:000C780A48084BFE520853F8624A524A4BEA4AAC4AAC6A4C52AA430A42164422 +9688:00007BF84A484A4853F85248624853F848004FFE4A406A445228429043084206 +9689:00407D9C4504490449DC5104490449FC4400440045FC68205020402043FE4000 +968A:01047888480053FE504060C251224A54489849386A5450944112461040504020 +968B:004078404BFE508051FC622055FE480049FC490469FC510441FC410441144108 +968C:00407C2045FE4800488450484BFE480044FC4484448468FC5084408440FC4084 +968D:00207C4045FC490449FC510449FC480047FE4420442069FC5020402043FE4000 +968E:01107D1245D4491849525192492E484045FC4504450469FC5104410441FC4104 +968F:0010781049FE5420524060FC514448444E7C4A446A7C524442544248450048FE +9690:0080788049F84A08541053FC600451FC48044BFC480468405124452A450A48F8 +9691:00207D244524492449FC50004BFE480045FC4504450469FC5088405043FE4000 +9692:00887C50440049FE485051FC48544BFE445445FC445068D85154425240504050 +9693:00207C2045FE484048FC51104AFE4800442045FE444068FC5110421041FE4000 +9694:00007BFE480051FC5104610451FC48004BFE4A8A6A5253FE42224222422A4204 +9695:00007CFC4484488448FC500049FE490245FE450245FE690251FE404840844102 +9696:00407C8045FC4904490451FC490049FE450045FE44026AAA52AA440240144008 +9697:002078404BFC4A24522453FC622452444BFC484048A868B4513C41224222441E +9698:020879084910480057FC5000611052084C044BF84AA86AA852A842A84FFE4000 +9699:00207CA845244A22480051FC490449FC450445FC442068A85124422240A04040 +969A:00207D2444A84BFE4A0250F84888488844F84420442069FC5020402043FE4000 +969B:010079104BDC52545554628851084AF44C0248006BFC50404150424845444080 +969C:00207DFC448848504BFE500049FC490445FC450445FC682053FE402040204020 +969D:00407C8045FC490449FC510449FC490045FE450045FE680252AA42AA4202400C +969E:01087908490857D0511E679451244FD44A144BD46A545248424844D444244842 +969F:01247A484924500051FC612451FC492449FC48206BFE507040A8412446224020 +96A0:00087C3C45C04844492450A849FC480444FC440445FC684050A442AA428A4478 +96A1:004078204BFC50005108609053FE4A204AA04AFC6B20522042FC4420442049FE +96A2:00207C2045FC48204BFE51084B9C49084588463E44006BFE509040904112420E +96A3:0020792448A853FE50A8612452224904490449DE6A445554409E410442044404 +96A4:00207DFC452449FC482053FE480049FC450445FC450469FC510441FC40884104 +96A5:00107BD248545148508A610452FA4C0049FC4904690451FC4104408847FE4000 +96A6:00107BC84A7E5240526263D452004A3E4BC84A486E7E5248424843C842484008 +96A7:00887C484A5050FC5020605056944A384A504A986A3452544290422045FE4800 +96A8:002079FE4C404AFC511052FE600056FC4A844AFC4A846AFC5284428C450048FE +96A9:004078804BFE522252AA622253FE4A724AAA4A02682053FE4050408841044602 +96AA:00207C2044504888490452FA4800480045DC4554455469DC5088408841544222 +96AB:00207DFC442048884BFE508849FC490445FC450445FC690451FC408841044202 +96AC:00007BFE49244A2257FE5222637652AA4B764A224B766AAA53764222422A4204 +96AD:000079FC48204BFE522251AC602051AC48004BFE482069FC515441544154410C +96AE:004078204BFE4888505257AC62AA52A84DAC4800490469FC510441FC41044204 +96AF:00207BFE482049FC500053FE600251FC48204BFE48006BFE500443BE42A4438C +96B0:00007BFE4A024BFE520253FE610852524B9C49084A526BDE500042A442524452 +96B1:003E7FC04A44492853F8504067FC50004BF848084BF8680853F84544452A48FA +96B2:00207CA845244A2A483050C04BFE492045FC452045FC692051FE400242AA4004 +96B3:00407BFC488051F84A204DFC688850F8418846C01930E10E1190214845240200 +96B4:011078904BDE4810525E518263DE50104BDE4A504BDE6A5053DE4250425242CE +96B5:0108F1EC910AA7E8A528C5DEA72894EA940A97EAD40CA7EC8A2A8BEA915687E2 +96B6:010001003FF801080108FFFE010801083FF821081190056009203118C5060200 +96B7:10201020FCFC102411FE7C2400FC7C200124FCA8107054A85324922210A03040 +96B8:10201020FEFC382455FE922410FC7C200124FEA8107054A85324922250A02040 +96B9:0900088008801FFC108030805FF8908010801FF81080108010801FFC10001000 +96BA:020002007FFC450408801FFC308050809FF8108010801FF8108010801FFC1000 +96BB:090008801FFC30805FF890801FF810801FFC10003FF00820044003801C70E00E +96BC:090008801FFC30805FF890801FF810801FFC11000100FFFE0100010001000100 +96BD:090008801FFC30805FF890801FF810801FFC10003FE00420047C08043014C008 +96BE:00A00090FC8005FE05104B102DFC2910111011FC29102510451081FE01000100 +96BF:28502448248020FE3D90E29020FC2090209020FC20902090149014FE0C800480 +96C0:010011101108212440C003000C803040DFFC10801FF810801FF810801FFC1000 +96C1:00003FFE20002250224824FE24902D9036FE2490249024FE2490449044FE8480 +96C2:08500848148014FE2390529088FC089000907EFC02900490049008FE08800080 +96C3:00507E48248024FE2590269024FCFF90249024FC24902490249024FE44808480 +96C4:0850084808807EFE1190129020FC2890489048FC9090149022907EFE22800080 +96C5:00507E48048024FE2590269044FC7F900C9014FC14902490449084FE14800880 +96C6:090008801FFC30805FF890801FF810801FFC1100FFFE054009203118C1060100 +96C7:010000803FFC20043FFC2280224027FC2C4037F8244027F84440444087FC0400 +96C8:0440FC7E0440010008801FFC108030805FF8908010801FF8108010801FFC1000 +96C9:20A0209020807DFE5110931015FCFD10111011FC11102910251045FE41008100 +96CA:2050204820807EFE439082907AFC4A904A904AFC4A907A904A9002FE14800880 +96CB:090008801FFC30805FF890801FF810801FFC10003E7C2244224423C420142008 +96CC:14501448148054FE55905E9054FC5490549054FC549054905D9076FEC4800080 +96CD:02000100FFFE1050104824FE45907A9010FC2490449078FC0890109020FEC080 +96CE:00507C48448044FE45907E9044FC44907C9044FC449044904E90F0FE00800080 +96CF:205020483E8042FE85900A90FEFC029002907EFC029002900290FEFE02800080 +96D0:010001F801003FFE210221F02F0422FC224027FE2C4037FC244047FC444087FE +96D1:20502048F88028FE29902A9046FC90901090FEFC10903490529092FE50802080 +96D2:205020483C8044FEC5902A9010FC2890449082FC7C904490449044FE7C804480 +96D3:10501048288044FE83907E9010FC1090FE9010FC54905290929010FE50802080 +96D4:1428122420403F7E64C8A5483F7E244824483F7E2448244824483F7E20402040 +96D5:00287F244940497E5DC849487F7E41485D48557E55485D484148417E45408240 +96D6:00507C48448044FE7D90129010FCFE90929092FCFE901090149012FEFE800280 +96D7:10401040107EFE8011507C4844FE7D9046907CFC1090FEFC1090109010FE1080 +96D8:00443DFE2454244834FE2D9024FE2490FEFE249024FE248025FE244444388DC6 +96D9:081024483F7E64C8BF7E24483F7E24483F7E20401FF00820044003801C70E00E +96DA:0820FFFE08203EF822883EF8090008801FFC30805FF890801FF810801FFC1000 +96DB:202820247F40917E55C87D48217E4A48A4487F7E914855487D48217E4A408440 +96DC:10500848FE8000FE259026905AFC91901090FEFC10905490929012FE50802080 +96DD:492892244940007E7CC845487C7E0048FE48927E9248FE488148817E7F400040 +96DE:0E50F048228092FE4590229044FCF890109024FCFE901090FE9028FE44808280 +96DF:010042047FFC08803440CFFC18802FF848800FFE08003FFC24242BD4224423CC +96E0:30182A1441207D3ED06853287D3E512851287D3E5128516851A87D3E40204020 +96E1:0028EE242240AA7E66C8AB48187E66488948307EC4481948E2480C7E3040C040 +96E2:102808247F40147E49C85548417E7F4808487F7E514855485D48417E45404240 +96E3:22282224FF40227E3EC809487F7E49487F48087E7F480848FF48147E22404140 +96E4:3AB821083AB82288393822887FFE48829FFC30805FF890801FF810801FFC1000 +96E5:08801FFC30805FF890801FF810801FFC24483F7E64C8BF7E24483F7E24483F7E +96E6:318C294A22107BDE56B4D2947BDE529452947BDE5294529452947BDE42104210 +96E7:08801FFC3080DFF810801FFC14283F7E64C8BF7E24483F7E0100FFFE0920711C +96E8:0000FFFE0100010001007FFC4104410449444524410449444524410441144008 +96E9:3FF801007FFE41029D7401001D7000003FF80000FFFE04000FF0001000A00040 +96EA:3FF801007FFE41029D7401001D7000003FF8000800081FF8000800083FF80008 +96EB:00003FF801007FFE41029D7401001D700000FFFE020002400220021002000200 +96EC:00003FF801007FFE41029D7401001D70000001007FFC038005601918E1060100 +96ED:3FF801007FFE41029D7401001D7000003FE008400CF81210112020C043309C0E +96EE:00003FF801007FFE41029D7401001D70000001F03E0003F03E0003FA7E0201FE +96EF:3FF801007FFE41029D7401001D70020001007FFC08200440038004401830E00E +96F0:3FF801007FFE41029D7401001D70044008203018DFE604200420082010A02040 +96F1:3FF801007FFE41029D7401001D70020001007FFC040007F00410081010A06040 +96F2:3FF801007FFE41029D7401001D7000003FF800000000FFFE082010103FF80008 +96F3:3FF801007FFE41029D7401001D7000003FFC200021002FF82108420844509820 +96F4:00003FF801007FFE41029D7401001D70020001003FF8000008200440FFFE0000 +96F5:3FF801007FFE41029D7401001D70000001001FF011101110FFFE02801C70E00E +96F6:3FF801007FFE41029D7401001D7002800C603218C1061FE00020064001800040 +96F7:00003FF801007FFE41029D7401001D7000003FF8210821083FF8210821083FF8 +96F8:00003FF801007FFE41029D7401001D70000008207FFC08200FE008200FE00820 +96F9:3FF801007FFE41029D7401001D7008001FF020105F9010901FD0102010040FFC +96FA:3FF801007FFE41029D7401001D7000001FF0022001407FFC0484188862800100 +96FB:3FF801007FFE41029D7401001D7000003FF821083FF821083FF80102010200FE +96FC:3FF801007FFE41029D7401001D7000007FFC040008001FF82808C8080FF80808 +96FD:3FF801007FFE41029D7401001D70000000F87F0011100920FFFE010005000200 +96FE:3FF801007FFE41029D7401001D7004000FE0144003801C70E20E0FE004201860 +96FF:3FF801007FFE41029D7401001D700000244814500C601450644808421042603E +9700:00003FF801007FFE41029D7401001D700000FFFE02003FF82488248824A82010 +9701:3FF801007FFE41029D7401001D7000807FFC082007C01830E44E044008401040 +9702:00003FF801007FFE41029D7401001D702040104087FE50E02150E24824442842 +9703:3FF801007FFE41029D7401001D70204013FC824454A810A0E1222222241E2800 +9704:3FF801007FFE41029D7401001D70111009203FF820083FF820083FF820082018 +9705:3FF801007FFE41029D74000001007FFC00003FF800003FF800003FF820083FF8 +9706:3FF801007FFE41029D7401001D7000087C3C09E010203DFC44202BFE10006FFE +9707:3FF801007FFE41029D7401001D7000003FFC20002FF820003FFC24484430860E +9708:00003FF801007FFE41029D7401001D70204017FC40402BF80A48724812581040 +9709:3FF801007FFE41029D7401001D7010001FFC20005FF01210FFFE20903FFC0030 +970A:3FF801007FFE41029D7401001D7000001FF000007FFC044024481450FFFE0000 +970B:3FF801007FFE41029D7402001FF002107FFC02101FF004007FFC082007C07838 +970C:3FF801007FFE41029D7400003FF8210827C821082FE8200827C8444847C88018 +970D:3FF801007FFE41029D7401001D7008801FFC30805FF890801FF810801FFC1000 +970E:3FF801007FFE41029D7401001D7002003FF808207FFC0200FFFE082007C07838 +970F:00003FF801007FFE41029D7401001D7004407C7C04403C7804407C7C04400440 +9710:3FF801007FFE41029D7401001D70000027881088878854102790E0A422BE2102 +9711:3FF801007FFE41029D7401001D7020001040807C48400BF81208E20823F82208 +9712:00107F100810FFA888A86B4408A26B1000107E7C0004FF04100822087F100110 +9713:3FF801007FFE41029D7401001D70060038F820083CF820083FF808421042E03E +9714:3FF801007FFE41029D7401001D702080104087FC4040104023F8E040204027FC +9715:00107F10087EFF9088906B5408546B5400547F7C0014FF90101222127F12210E +9716:3FF801007FFE41029D7401001D70082008207EFC08301C682AA4C92208200820 +9717:3FF801007FFE41029D7401001D70204010A00158462629F0081070A010401020 +9718:3FF801007FFE41029D7401001D70200013FC020442F42A040AF4729412F4120C +9719:3FF801007FFE41029D7401001D700820FFFE09201FF01110FFFE02801C70E00E +971A:00003FF801007FFE41029D7401001D7000207E20247E18A4FF2829104A2898C6 +971B:3FF801007FFE41029D7401001D7000007BDE08427BDE42107BDE0842294A1084 +971C:3FF801007FFE41029D7401001D70000008FC7E8418FC2C844AFC888408FC0884 +971D:00003FF801007FFE41029D7401001D7000007BBC4AA44AA44AA44AA47BBC4AA4 +971E:3FF801007FFE41029D7401001D7000003EF822083EF820003EF820483E3020CC +971F:3FF801007FFE41029D7401001D701090089043FC2090089017FE709011081204 +9720:3FF801007FFE41029D7401001D7020201050FC8849444A2210F81E08F0104020 +9721:3FF801007FFE41029D7401001D7000203C1024E03C2225B43CA8252426A24C40 +9722:3FF801007FFE41029D7401001D70000C7DF045087D7045447D68455055488A66 +9723:3FF801007FFE492284140FE008203FF820083FF820083FF820083FF808201010 +9724:3FF801007FFE41029D74040079FC40444844545462883FF821083FF821083FF8 +9725:3FF801007FFE41029D7400007FFE40029FF406003B0804B019C062A00C987306 +9726:3FF801007FFE41029D7401001D7022042208F7B022047708AAB2224422182260 +9727:3FF801007FFE41029D74000000407EFC15440838FE441AA22CFC4844A8941108 +9728:3FF801007FFE41029D7400003F0821083F7E20082F4820285F88440895282C90 +9729:3FF801007FFE41029D740000087C7F4422483E5000483E4404647F5808401840 +972A:3FF801007FFE41029D7401001D70203C17C08244412817FC2040EFFE204027FC +972B:3FF801007FFE41029D7400007EFC22441A3462C404001FF010101FF010101FF0 +972C:3FF801007FFE492284143FF821083FF821083FF804403FF80440FFFE08201010 +972D:3FF801007FFE4922841423F8120803F8720813F8110013FC14441AA413F4000C +972E:3FF801007FFE49228414211017FC911041F0411011F02110E7FC2250228823FC +972F:3FF801007FFE41029D74000000907EA004442BA810102FE8C8260FE004407FFC +9730:3FF801007FFE41029D74000012203F20123E7F4400A43F2421283F1021282346 +9731:3FF801007FFE49229FF402207FFC04887A8001003FF8282837D8244827C82018 +9732:3FF801007FFE41029D7401001D7000407CF845487C3011CE5C0050F85C88E0F8 +9733:3FF801007FFE41029D74008079F84A884870538E492049FC6A2050F8402043FE +9734:00207C2010FCFE2493FE542410FC542001247CA80070FEA821244822FCA00440 +9735:3FF801007FFE41029D7400003E2822243E240020FFFE22243E282392FE2A0246 +9736:3FF801007FFE41029D74008047FC21100FFE884257FC1100E1F8220822282410 +9737:3FF801007FFE4922841401F8790849F849084BFE79004BFC4CA449247A544888 +9738:3FF801007FFE41029D7422007F7C22443E44087C7F4449447F7C0844FF540888 +9739:3FF801007FFE41029D7401001D7000107EFE42447E2840FE7E10627CBE102210 +973A:3FF801007FFE41029D7401001D702010455097DE20246FD4A014278824D428A2 +973B:3FF801007FFE41029D7404403FF824483FF824487FFC10101FF00820FFFE0000 +973C:00807C8010FCFF0092F8540011F8544801687CC801F8FE4A20EA495AFC460442 +973D:3FF801007FFE49228514FFFE02887D7025484D6690101FF010101FF010102010 +973E:3FF801007FFE41029D743000CBFC2D2431FCC92415FC64200DFC3420C5FE1800 +973F:3FF801007FFE41029D7400807DF8068828701088FD0634F8508890F8508820F8 +9740:3FF801007FFE41029D7408207FFC08207FFE40029FF40600192006C038A00318 +9741:3FF801007FFE492284143FF821083FF821083FF80000FEFE9292FEFE9292FEFE +9742:3FF801007FFE492284147FFE40005F3C44107F7E4E345552609044F84480BFFE +9743:3FF801007FFE41029D7401001D70081024483F7E64C8BF7E24483F7E24483F7E +9744:3FF801007FFE4922A41411FCFD0401FC790401FC788001FE7A224D5279FA4806 +9745:00287CFE102AFEFE92A854FE104A54FE00827CFE0082FEFE208248FEFC440482 +9746:00107E10117CFE1492FE5414137C559201547D380154FF9221304900FEFE0400 +9747:3FF801007FFE41029D74000008407F7C1440FF7C22043E7C22403E7C2242263E +9748:3FF801007FFE41029D7401001D7000003BB82AA83BB800007FFC11102928FFFE +9749:000E7DF010A2FE5493FE552210145552014A7E380040FE7C20844948FC3004CE +974A:3FF801007FFE41029D74000049245D7449247FFC00003FF808200FE004407FFC +974B:3FF801007FFE41029D74200017FE840047DC148827FEE5CC26AA293C292013FE +974C:3FF801007FFE492285147FFC40843CF809283CB009287FF011101FF008201010 +974D:3FF801007FFE41029D74284024FC7E8448FCFE8448FE7E8048FE48027EAA4004 +974E:3FF801007FFE41029D74084014FC22845CFC88843EFE08804AFE28020EAA7004 +974F:3FF801007FFE41029D7410407EFC528428FC3E8468FEBE8028FE3E0228AA3E04 +9750:3FF801007FFE49229FF411101FF000007C7C1010FEFE929254547C7C54547C7C +9751:010001007FFC01003FF80100FFFE00001FF0111011101FF01010101010501020 +9752:010001007FFC01003FF80100FFFE00001FF010101FF010101FF0101010501020 +9753:100010FCFE8410847CA410A4FEA400A47CA444A47C5044507C5044925492490E +9754:10401040FE7E10807D00107CFE0000007CF844087C0844087C0A440A54064802 +9755:00200020FDFE102010FC102051FE5C0050FC508450FC50845CFCF08400940088 +9756:2020102013FEFC2001FC08208BFE880049FC490451FC51041DFCE10441140108 +9757:10201020FD2410A47CA81020FDFE00507C5044507C5044507C924492550E4A00 +9758:10401040FCFC10887D1010FCFEA400A47CA444FC7C8044807C824482447E4C00 +9759:10401040FE7810887C1011FCFE2400247DFE44247C2445FC7C24442054A04840 +975A:100011FCFF0411047DFC1104FF0401FC7D0445047DFC44507C90449255124A0E +975B:10201010FEFE10827D041000FEFE00107C1044907C9E44907C9044D0553E4A00 +975C:101E11E0FE92104C7C0010FCFE2400247DFE44247C2444FC7C24442054A04840 +975D:10801080FCFC11007EF81000FDF800487D6844C87DF8444A7CEA475A54464842 +975E:044004400440FC7E0440044004407C7C0440044004400440FC7E044004400440 +975F:044004407C7C04403C7804407C7C044000F03F0001F03F0001F87F02010200FE +9760:11001FF02100FFFE00001FF010101FF004407C7C04403C7804407C7C04400440 +9761:00803FFE24103F7C26382D543412212021203F3E21202F3C21205F3E41208120 +9762:0000FFFE0200020004003FF82448244827C82448244827C8244824483FF82008 +9763:0000FFFE0200020004003FF82008200827C82448244827C8200820083FF82008 +9764:0040FE4010FC2084FF04AAF4AA94BA94AAF4AA84BA94AA88AA82FE82827E0000 +9765:3FFC20903FFC21402630380C27F020802FF82A282BE82A284BE84A288FF80808 +9766:0000FEFC10842084FEFCAA84AA84BAFCAA84AA84BAFCAA50AA50FE528292010E +9767:0010FEFE109220FEFE10ABFEAA00BAFEAA82AAFEBA82AAFEAA82FEFE82440082 +9768:3FFE28882F8A20082FBE28882F88289429A23FFE20802FFC292449E449248FFC +9769:082008207FFC082008200FE001003FF8210821083FF80100FFFE010001000100 +976A:22002200FF7E22083E0808087F08490849087F080808FF880808080808280810 +976B:280029F8FE8828C838A810A87C88545054507C501020FE201050108811041202 +976C:2200227CFF1022103E1008107F1049FE49107F100810FF900810081008100810 +976D:22002200FF7E22123E1208527F52495249527F920812FFA20822084208940908 +976E:22202220FF20227E3E4208827F02498249427F220822FF820802080208140808 +976F:22102210FF1022103E10087C7F10491049107F100810FF90081008FE08000800 +9770:28002800FDFC2890389010907C90549054907C901090FC9210921092110E1200 +9771:28002800FDFC2844384411447CC4544454647C54104CFC861084110412281410 +9772:28202820FE202850385010887D44562254207CF81008FE081010101010201020 +9773:2204220EFF7022403E4008407F7E494849487F480848FFC80848088808880908 +9774:28502850FE502892389211947E98549054B07CD01090FE9010921092108E1080 +9775:280029F8FE482848384810487C4855F854887C881088FE881088108813FE1000 +9776:280029FCFD242924392411247D2455FC55047D001100FD001102110210FE1000 +9777:280429E4FE242824382411E47D04550455047DE41024FE241024102411441084 +9778:28002BFCFC842888388810907C9C548455447D441128FD281210122814441182 +9779:28202820FE2029FE392211227D22552255527D4A118AFF0211021102110A1104 +977A:28202820FC202BFE382010207C2055FC54707CA810A8FD241124122210201020 +977B:280028F8FE882888388810F87C88548854887CF81088FE881088108813FE1000 +977C:28002800FEFC2884388410847CFC548454847C8410FCFE841000100011FE1000 +977D:28202820FD2428A438A810207DFC542054207C2013FEFC201020102010201020 +977E:282828A8FEA828A838A813FE7CA854A854A87CA810B8FE801080108010FE1000 +977F:50105090F8905110717E2252FB92A892A912F9122252FBD220622022204A2084 +9780:280029FCFE442844384410447C94548855007CFC1084FE841084108410FC1084 +9781:28102810FE1029FE391211147D1055FC55447D441128FF281110122812441482 +9782:2808283CFDE02820382010207DFE542054707C6810A8FCA41122102010201020 +9783:280829C8FE482848384811C87D08550855107DD01054FE541052105E12821100 +9784:28402840FEFC2884390412F47C94549454F47C841094FE8810821082107E1000 +9785:28202820FE2029FC392411247D24552455247FFE1020FE501050108811041202 +9786:280029FEFC202820382011FE7D22552255527D4A118AFD0211021102110A1104 +9787:280029FCFD042924392411247DFC552455247D54114CFD8C1104110411FC1104 +9788:28202820FE502848388411027CFC540054007CFC1084FE841084108410FC1084 +9789:28502850FE50295238D410587C50545854D47D521050FE50109210921112120E +978A:28202820FC202BFE382010207DFC540054007DFC1104FD041104110411FC1104 +978B:28202820FEFC2820382010207DFE540054207C2010FCFE201020102011FE1000 +978C:01007FFC44043FF8082007C0783804407FFC044007C001001FF01110FFFE0100 +978D:28402820FC202BFE3A0214447C4057FE54887C881108FCD01020105010881304 +978E:280028FCFE84288438FC10847C8454FC54A27CA41098FE90108810A410C21080 +978F:7CF8108810CA1D2AF20608207FFC08200FE001003FF821083FF80100FFFE0100 +9790:28202820FE3E2820382011FE7C00540055FE7C201028FE241022102010201020 +9791:28102910FC902890387E10107D90549054987CA810A4FCC410801140123E1000 +9792:2808281CFEE02820382011FE7C50548855047E8A1088FE881088108810881108 +9793:280028FCFE842884388410FC7C00540055FE7C201020FEFC1020102011FE1000 +9794:28802880FCF829083A1011FC7D24552455247DFC1050FC50109010921112120E +9795:280029FEFC20282039FC11247D2455FC55247D2411FCFD2010A0104010B0130E +9796:2804281EFDE02822391210947C80542055FE7C441084FDC81030102810C41302 +9797:108011F8128820702B8E68886BFEA88828F8282029FC292429FC202023FE2020 +9798:28102892FE522854381010FE7C82548254FE7C821082FEFE10821082108A1084 +9799:280028F8FE88288838F810007DFC550455047DFC1104FF0411FC110411141108 +979A:28202810FE1029FE390212547C88550454007CFC1020FE201020102011FE1000 +979B:28202810FEFC2800388810507C0055FE54007C0010FCFE841084108410FC1084 +979C:28202822FDB428A838A811247EA2544055FC7D041104FDFC1104110411FC1104 +979D:28202924FCA428A8382011FC7D04550455747D541154FD541174110411141108 +979E:28202840FCFE2892389210FE7C9254A254FE7C481088FDFE1008100810081008 +979F:28202810FDFE280038FC10847CFC540054FC7C081010FDFE1010101010501020 +97A0:28802880FEFE29023A2210AA7C72542255FE7C221072FEAA11221022100A1004 +97A1:28902888FC8828BE3BC010827CA254E254927D921294FC941084108812BE1100 +97A2:28482948FD482BFE394811487D78550055FE7C2013FEFC7010A8112416221020 +97A3:280029FCFC4828303BFE10527C94551056307C2013FEFC7010A8112416221020 +97A4:08087F0808FEFF0808487F2808080F28F01004407FFC04401FF01110FFFE0100 +97A5:28202830FE482884397A10007CFC548454847CFC1048FE4811FE104810881108 +97A6:500850C8FB085108712A212AFBACA948A908FB882554F9142114212421242142 +97A7:28882848FC502BFE385010507DFC555455547D8C1104FDFC1104110411FC1104 +97A8:280029FCFD0429FC390411FC7C8055FE56227D221152FD0211FA100210141008 +97A9:50825082FAA251CA708A23EAFA2AAA2AABEAFA2A222AFBEA2222222222AA2244 +97AA:7E20243E1848FFA829104A28984604407FFC044007C001001FF01110FFFE0100 +97AB:28802880FCFE29023A4211FA7C0255F254027DF21002FDF2111211F210141008 +97AC:50105010F87C571471FE2114FA7CAA10AF7CF91021FEFD102210230024FE2800 +97AD:288028FEFE90297C395413547D7C555455547D7C1190FF501120113011481186 +97AE:280028FCFE84288438FC10847C8454FC54007DFE1020FEA010BC10A01160123E +97AF:28482848FDFE2848382011FE7C40544054BC7D841288FCBE1088108810A81090 +97B0:280028F8FE88288838F810887C8854F854007DFC1154FF541154115413FE1000 +97B1:281E28E0FE222892385410407C2054CE54827C8210EEFE821082108210FE1082 +97B2:50885088FBFE508871FC2088FBFEA820A9FCF92421FCF92423FE210421142108 +97B3:28882888FDFE2888382010507C88550456FA7C001000FDFC1104110411FC1104 +97B4:50885088FBFE5088708827FEF880A9FCAB24FDFC2124F9FC212421242124210C +97B5:281E2BE0FD222894384010887DF0542054C47DFE1022FC2013FE105010881306 +97B6:08783E48228E2A007EF822482A3046CC7FFC044007C001001FF01110FFFE0100 +97B7:7FFC08200FE000003FF824482FE82108211804407FFC04401FF01110FFFE0100 +97B8:280029FCFD2429FC392411FC7CA854A857FE7CA810A8FDFC102013FE10201020 +97B9:5100509EFBD2501273D42254FBD8A814ABD2F8522092F8DA2394209022902110 +97BA:28202924FCA82BFE3A0210F87C88548854F87C201020FDFC1020102013FE1000 +97BB:282029FCFD242BFE392411FC7C2055FC55247DFC1040FDFE108811D01070138C +97BC:282029FCFD2429FC382013FE7C0055FC55047DFC1104FDFC110411FC10881104 +97BD:281829E0FC402BFE388811747E52547054007DFC1104FD74115411741104110C +97BE:28882BFEFC88280039FC10A87CA857FE54A87CA811FCFC2013FE102010201020 +97BF:51245124FAAA53AE712422AAFBAEA924AFFEF9102114F914228A224A22162422 +97C0:50405020FBFE525073FE2252FBFEAA80AAFEFA8022FEFA02255625562A022006 +97C1:28002BFEFC0029FC392411FC7D2457FE54007DFC1124FDFC112411FC100013FE +97C2:288028F8FD082BFE394411927DFE5500557C7D00117CFD00117C1244127C1444 +97C3:28102A10FD7C281038FE10447F2855FE55107D7C1110FDFE1110111012FE1400 +97C4:28882BFEFCA8289039FE13207DFC552055FC7D2011FEFD0013FC10881070138E +97C5:280029FCFD0429FC390411FC7C88555455DC7C881154FDDC100011A811541254 +97C6:500050FEFC2852FE72AA20FEF810A9FEAE44FAFE2344FA7C2242223E250028FE +97C7:28202BFEFC2029FC380013FE7E5257FE55047DFC1104FDFC110411FC10881104 +97C8:284829FEFC48280039FE114A7D4A55FE54147DFE1110FD92114C114A11161222 +97C9:508853FEF888502073FE2250FBFEAA52ABFEFA8022FEFA8022FE24022AAA2004 +97CA:508853FEF88853DE725223DEFA52ABDEAA22FBFE22AAFAFA2222227222AA2224 +97CB:020002003FF00410FFFE00001FF010101FF001003FF8010021003FFC01000100 +97CC:100010007EFE2212FF1200527E5242527E9208127E12082248227E42088A0904 +97CD:102810247E242220FF7E00207E20423C7E3408547E54085448887E8809140822 +97CE:101010107E1022FEFF1000107E10427C7E1008387E38085448547E9208100810 +97CF:111009207FFC0400FFFE12102FE8C4263FF810101FF001001FF021003FF80100 +97D0:102010207C502450FE8801047EFA44007C0010F87C88108850887C8810F81088 +97D1:102011FC944455FE580011FCFD0429FC282029FC2820292029FC4820482287FE +97D2:101010927E522254FF1000FE7E8242827EFE08827E8208FE48827E82088A0884 +97D3:1020102010FCFE4411FE7C0044FC7C8444FC7C1010FCFE10109010FE10101010 +97D4:1000107C7E402278FF4000787E4043FE7EA008A47E98089048887EA408C20880 +97D5:102010107EFE2200FF7C00447E7C42007E7C08087E1008FE48107E1008500820 +97D6:100010FC7C482430FEFE00527C9445507C2010107DFE103850547C9211101010 +97D7:100011FE7D022420FEFC00207DFC45247DFC11247DFC102053FE7C2010201020 +97D8:101410547E5422FEFF5400547E5C42407E7E08107EFE081048387E5408920810 +97D9:00103E7C22243EFE22003E7C0044FF7C0810083C2F50287E281058104FFE8000 +97DA:108810887DFE2488FEF800207DFC45247D2411FC7C2013FE50207C2010201020 +97DB:104410447DFE2444FE4401FE7C4044FE7D9212FE7C9210FE50927C9210921086 +97DC:101E11E07C222512FE9400807C2045CE7D0211027DCE110251027D0211FE1102 +97DD:104810487DFE2448FEFC00487DFE44107CFC10947CFC109451FE7C8410941088 +97DE:100010F87C882488FEF800887C8844F87C0011FC7D54115451547D5413FE1000 +97DF:101010207E7C2244FF7C00447E7C42107EFE08287E540892487C7E1008100810 +97E0:100010FE7E9222FEFF9200FE7E5442547EFE08547E5408FE48107EFE08100810 +97E1:104410FE7E442200FFFE00547E5442FE7E5408547EFE081048FE7E1008100810 +97E2:101010107DFE2410FEFC00947CFC44947CFC10127DFE102250147D52114A1238 +97E3:100011FC7D542554FFFC00807DFC46447DF411547D5411F450447DF410141008 +97E4:104811FE7C482400FFFE014A7D4A45FE7C1411FE7D101192514C7D4A11161222 +97E5:101010FE7E10227CFF0000FE7EAA42FE7E44087C7E44087C48447E7C08280844 +97E6:0100010001007FFE010001003FF8010001007FFC010401040104012801100100 +97E7:2000200021FCFC24202420A4F8A420A42124FC24242424443444288421142208 +97E8:205020482048FC4021FE2040F840207C20A4FCA424A8252835102A2820442082 +97E9:102010201020FEFE10207C2044FC7C2044207DFE1022FE22102A102410201020 +97EA:00203E2022FC3E2022203EF80020FF2008FC08242F242834282858204FFE8000 +97EB:200020F82088FC8820F82088F88820F82000FDFC255425543554295423FE2000 +97EC:201E21E02022FD1220942080F82021CE2102FD0225CE25023502290221FE2102 +97ED:044004407C7C0440044004407C7C0440044004407C7C044004400440FFFE0000 +97EE:08200820FFFE0820082004407C7C044004407C7C044004407C7C04400440FFFE +97EF:082008287F240820FFFE0020122473A4122473A812287390121217AAF8464082 +97F0:08000F7C28447F28A110162838C6C2807EFC02803EF802807EFC0280FFFE0000 +97F1:112011282AA444640020FFFE122073A4122473A812287390121217AAF8464082 +97F2:0100FFFE02847D78255025484D6402807EFC02803EF802807EFC0280FFFE0000 +97F3:020001003FF8000008200440FFFE00001FF0101010101FF0101010101FF01010 +97F4:200013FE7C200020442029FCFF2401247D24452445247D34452844207C204420 +97F5:204010407C8000FC45042A04FE8400447C44441444247C44458444047C284410 +97F6:200011FC7C44004444442844FE9400887D0044FC44847C84448444847CFC4484 +97F7:201010107C92009244922892FEFE00107C10449244927C92449244927CFE4402 +97F8:204010407CFC008845502820FED803267CF8442044F87C2047FE44207C204420 +97F9:202010407CFC008444FC2884FEFC00007DFE442044207CFC442044207DFE4400 +97FA:208810887DFC008844A82820FEF800A87CA844A844A87DFC442044507C884504 +97FB:2000107C7C440044447C2800FEFE00827CFE448244FE7C8244FE44287C444482 +97FC:20201220797C00A4481830E6FB10017E7910497C491079FE491049107AFE4C00 +97FD:1020281044FE92007C440828FEFE2800FE7CAA44CE44827CFE448244FE7C8244 +97FE:08007F7808483E4800863E782A483E30414EBFFC0440FFFE10101FF010101FF0 +97FF:110023DE7A5213D42A527BDA1294235001003FF80440FFFE10101FF010101FF0 +9800:204411FE7C54004844FE2990FEFE00907CFE449044FE7C8045FE44447C3845C6 +9801:00007FFE020004001FF8100810081FF810081FF8100810081FF8081010082004 +9802:000001FEFE20104011FC1104110411FC110411FC1104110411FC108851042202 +9803:000021FE2020204021FC3D04210421FC210425FC2904310421FC008801040202 +9804:200020FE20102020FCFC2484248424FC248424FC2584268444FC404880840102 +9805:000001FE0020FC4011FC1104110411FC110411FC11041D04E1FC408801040202 +9806:040045FE5420544055FC5504550455FC550455FC5504550455FC548885040602 +9807:00007CFE1010102010FC10841084FEFC108410FC1084108410FC104810841102 +9808:080009FE1020204041FC8904090411FC210445FC8504090411FC208841048202 +9809:080009FE0810082048FC4E84488448FC488448FC48844E8458FCE04800840102 +980A:000001FE7C20104011FC11047D0411FC110411FC11041D04E1FC408801040202 +980B:00007EFE401040205EFC5284528452FC5A8454FC5084528454FC584850848102 +980C:000028FE2410242042FC5284908410FC208420FC48844484FCFC444800840102 +980D:100011FE1020FE4011FC1104FD0405FC050449FC2904110429FC448881040202 +980E:08001DFE6020404041FC41047F0449FC490449FC4904490449FC488889040A02 +980F:100008FE0810FF2000FC00843C8424FC248424FC2484258446FC444880840102 +9810:00007CFE0410282010FC0884FE8412FC148410FC1084108410FC104850842102 +9811:00007CFE0010002000FCFE84288428FC288428FC28842A844CFC484880840102 +9812:000028FE2410242042FC428480847CFC248424FC2484248444FC444894840902 +9813:100011FE1020FE4011FC5504550455FC55047DFC1104110415FC188811040202 +9814:100011FE10207C4055FC5504550455FC7D0455FC5504550455FC7C8845040202 +9815:100010FE10101E2010FC1084108410FC7E8442FC4284428442FC7E4842840102 +9816:100011FE9420584011FC7D04110411FCFF0411FC1104110421FC208841048202 +9817:080008FE08107F20497C4A4448447F7C4144527C4A4444444A7C910021280044 +9818:100011FE2820244043FC9104090401FCFD0405FC0904510421FC108811040202 +9819:000001FEFC20104011FC110451045DFC510451FC510451045DFCF08801040202 +981A:00007CFE0410682010FC2884448492FC10847CFC108410841EFCF04840840102 +981B:100010FE1010FE2010FC7C841084FEFC308438FC5484548490FC104810841102 +981C:100011FE2820244043FC81047D0401FC01047DFC4504450445FC7C8845040202 +981D:200010FE0010FE2000FC2884448482FC048444FC2884108428FC444884840102 +981E:100008FE7E10422094FC10841084FEFC248424FC4884288410FC284844848102 +981F:200020FE3C104420C4FC2884108428FC448482FC7C84448444FC44487C844502 +9820:1000107E3F102120427CBFC420442F7C2944297C2D442A44287C4A004C288844 +9821:100010FE1010FE2010FC10847C8400FC00847CFC4484448444FC7C4844840102 +9822:08001DFE7020104011FCFD04110411FC7D0445FC4504450445FC7C8845040202 +9823:00007EFE4810482048FC7E84428442FC7E8448FC4884488448FC7E4800840102 +9824:00007DFE4820484049FC5D04550455FC55045DFC4904490449FC7E8801040202 +9825:40005F7E54105420547C5F445144517C51445F7C54445444547C54005F284044 +9826:100008FE0810FF2008FC108422847CFC098412FC2484C88414FC2248C0840102 +9827:080011FE7C20444045FC45047D0441FC41047DFC4504450445FC7C8845040202 +9828:0000EEFE22102220AAFC6684228422FC26846AFCB284228422FC2248AA844502 +9829:420024FE00107E2024FC2484248424FCFF8424FC2484248424FC444844848502 +982A:080008FE4A102A202CFC0884FE8418FC1C842AFC2A84488488FC084808840902 +982B:280028FE28102820AAFC6C84288428FC6C84AAFC288428842AFC4C4848848102 +982C:080008FE08107E2008FC4A842A842CFC0884FEFC0884148412FC224840848102 +982D:0000FEFE002000407CFC4484448444FC7C8400FC448428842EFCF00040480084 +982E:0800097EEA102C204A7C4944A844107C2444247CFF442444247C440044288444 +982F:100010FE3E10622094FC48843084C0FC248424FCFF84248424FC444844848502 +9830:080008FE0810FFA0087C2A442A442A7C5D4488FC08441444127C210041288044 +9831:04001EFEE010222092FC5484408404FCFF8404FC4484248424FC044814840902 +9832:000001BE76081210123E222227A2723E1222523E522227A2203E50008F940022 +9833:100010FE10107C2010FC1084FE8428FC28846CFCAA84288428FC484848849902 +9834:40004CFE7010422042FC3E8400847CFC0084FEFC1084548452FC924850842102 +9835:00007EFE12101220FF7C124412447E7C2044207C7E446244A27C22003E282244 +9836:080028FE28103E2048FC0884FF8400FC00843EFC2284228422FC3E4822840102 +9837:080008FE1410222051FC88847E8402FC048408FC7E84428442FC7E4842840102 +9838:0000FEFE54105420A8FC5484548400FCFE8410FC108410841EFCF04840840102 +9839:0C0070FE1010FE2010FC3884548492FC008428FC288428842AFC4C4848848102 +983A:0C0070FE1010FE2010FC3884548492FC7C8424FC28842E8422FC42484A848502 +983B:080008FE28102E2028FC2884FF8400FC08842AFC2A844C8484FC08483084C102 +983C:100010FEFE10102010FCFE84928492FCFE8410FC3884548492FC104810841102 +983D:0C0070FE1010FE2010FC3884548492FC008438FC288428842AFC4C4848848102 +983E:0BFE104061FC090411FC610405FC090431FCC088090428802E9828E22E82F07E +983F:060018FE62100C20737C0C44F444147C55445E7C54445544557C5D00F3280044 +9840:140012FE20103F20647CA4443F44247C24443F7C24442444247C3F0020282044 +9841:1000087E7F104120827C00447F44087C0844287C2E442844287C58004F288044 +9842:100010FE1010FE2010FC5484548454FCBA8410FC3884548492FC104810841102 +9843:100052FE5410902028FC4484828410FC108452FC5484908428FC244842848102 +9844:00007F7E02100420497C6B445D44497C5D446B7C49446944517C470079280044 +9845:100008FE7E10422042FC7E8440845EFC52845EFC52845E8452FC524892841702 +9846:00007F7E491049207F7C494449447F7C0844FF7C1C442A44497C880008280844 +9847:100008FE00107F20007C22442244557C88C4087CFF440844087C080008280844 +9848:40004CFE7010422042FC3E84208444FC788410FC2484FE8410FC544892843102 +9849:100010FE2810242042FCBC84108410FCFE8410FC9484588450FC1E48F0844102 +984A:100020FE7E1042207EFC40847E8442FC7E8410FC1084FE8410FC104810841102 +984B:00007F7E491049207F7C494449447F7C0844047C154450C450FC52808E280044 +984C:00003EFE22103E20227C3E44007CFF44087C08442F7C2828284458824FFE8000 +984D:200010FEFE10822020FC3C844484A8FC108428FC4484FE8444FC44487C844502 +984E:0000EEFEAA10AA20EEFC00847C8400FCFE8420FC40847C8404FC044828841102 +984F:100008FE7F1022201CFC22847F8444FC488472FC4484488471FC42488C847102 +9850:0000FEFE92101020FEFC10847C8454FC7C8454FC7C841084FEFC104810841102 +9851:020002BE02087F90423E42225E2242BE42A25EBE56A255225D7E414042D48462 +9852:00007CFE541054207CFC548454847CFC1084FEFC92849684BEFC82488A848502 +9853:100092FE92109220FEFC0084FE8410FC2084FEFCAA84AA84AAFCAA48AA848702 +9854:100008FE7F102220147C7F444444487C5244447C48445144427C440088283044 +9855:00007CFE441044207CFC448444847CFC288428FCAA846C8428FC2E48F0844102 +9856:0800107E7F104120557C49445544417C7F44087C054454C450FC92000E280044 +9857:0800497E49107F20007CFF4400447F7C4144417C7F444244247C0F00F0284044 +9858:00007F7E441048205F7C51445F44517C5F44447C56445544657C450094280844 +9859:00007EFE22101C20227C77445544227C5544087C7F441C442A7C490088280844 +985A:4600787E40903FA0007C5F4451445F7C51445F7C51445F44407C7F8022284144 +985B:100010FEFE1010207CFC44847C8444FC7C8444FC7C844484FEFC284844848302 +985C:2200223EFF8822107F3E2222FFA2083E7F22493E7F224922FFBE410045144222 +985D:00007CFE4410742054FCFE8482847CFC44847CFC44847C8444FC444854844902 +985E:100092FE5410FE2030FC5484928400FC148412FCFE84108428FC244844848102 +985F:0000777E11105520337C55440C44337CC4C4187C62440CC4717C06001828E044 +9860:0000FEFE2810FE20AAFCAA84FE8400FC7C8400FCFE84108454FC924850842102 +9861:100008FE7F102220147CFF441044297CCE44147C2644CD44157C2400D4280844 +9862:2200223EFF882210223E3E220822FFBE88A2CCBEAAA2DDA288BE88808A948922 +9863:0200029E02047FC8421E4A124E124A9E7E924A9E4A925D126B5E49405ACC8452 +9864:100010FE7C101020FEFC4484EE8444FC6484DEFC0084FE8428FC2A484C848902 +9865:00007CFE44107C2044FC7C841084FEFC00847CFC44847C8410FC544892843102 +9866:280024FE7E10C82048FC7E84488448FC7E8448FC48847E8440FCAA48AA840102 +9867:100008FE7F104120417C7F445444527C7F44547C5F4454445F7C54009F281044 +9868:FEFE10207EFC42847EFC42847EFC42847EFC244842840000FFFE082010202020 +9869:080008FE14102220417CBE440044007C7744557C55447744227C220055288844 +986A:040027BE2408FFD0023E02A27FE2423E7E224ABE4AA25AA26D3E894012D46462 +986B:1000FEFE0010FE2082FCBA84AA84FEFC00847CFC44847C8444FC7C480084FF02 +986C:00007F3E0808FF9088BE6B2208226B3E0022FFBE08227F22553E550055144322 +986D:2200FFBE22087F10553E55227F22003EFFA290BE3E222222523E0C001814E022 +986E:1000087EFF9080A07F7C524494447F7CC1447F7C41447F44417C7F0022284144 +986F:0000FEFE8210FE2082FCFE844484AAFCEE8444FCAA84EE8400FCAA48AA840102 +9870:087E2E10287EFF422A7E4C42327EC4243FFA21083FF822083FF80880FFFE0080 +9871:08000FBE08087F9048BE7E2248A25FBE55225F3E55225F22403EBF802A947FE2 +9872:29004A7E14106220097C2A445444227C4844FF7C00447F44417C5D0055287F44 +9873:7F80213E3F0821103F3E21E2FF22013EFFE252BE73A252A273BE5AC0F79410A2 +9874:2200227EFF902220777C55447744127C3F44647CBF4424443F7C24003F282044 +9875:00007FFC020004001FF010101110111011101110111012900240042018106008 +9876:000001FEFE20104011FC11041124112411241124112411441050508821040202 +9877:000021FE2020204021FC3D042124212421242524292431442050008801040202 +9878:000079FE1020104011FC11041124FD2411241124112411441050108811041202 +9879:000001FE0020FC4011FC1104112411241124112411241D44E050408801040202 +987A:040045FE5420544055FC55045524552455245524552455445450548885040602 +987B:080009FE1020204041FC89040924112421244524852409441050208841048202 +987C:000001FE7C20104011FC11047D2411241124112411241D44E050408801040202 +987D:00007CFE0020004000FCFE84289428942894289428942AA44C30484880840302 +987E:00007EFE402040405EFC5284529452945A945494509452A45430584850848302 +987F:100011FE1020FE4011FC55045524552455247D24112411441450188811040202 +9880:08001CFE6020404040FC40847E94489448944894489448A44830484888840B02 +9881:000029FE2820244045FC450481247D2425242524252425442450448855048A02 +9882:000028FE2420244042FC52849094109420942094489444A4FC30444800840302 +9883:100008FE0820FF4000FC00843C94249424942494249425A44630444880840302 +9884:0000F9FE0820504021FC1104FD242524292421242124214420502088A1044202 +9885:100010FE1E20104010FC7C844494449444947C94449440A44030404880840302 +9886:100011FE2820244043FC910409240124FD240524092451442050108811040202 +9887:080008FE08107F20497C4A4448547F54415452544A5444544A28912421420082 +9888:00007EFE04100820187C24444254815400547E540854085408280E24F0424082 +9889:100010FE1020FE4010FC10847C94009400947C94449444A444307C4844840302 +988A:080008FE08207E4008FC4A842A942C940894FE94089414A41230224840848302 +988B:0000037EEC102420247C44444F54E4542454A454A4544F544020A0281F440082 +988C:100010FE2820244042FC80847C94009400947C94449444A444307C4844840302 +988D:200024FE3820224022FC1E84009408940A94EC9428942CA44A304A48A8841302 +988E:400044FE7820424042FC3E840094109452945294549490A42830244844848302 +988F:100008FE0820FF4008FC108422947C94099412942494C8A414302248C0840302 +9890:00007DFE4820484049FC5D045524552455245D244924494448507E8801040202 +9891:100011FE50205C4051FC5104FF2401241124552455245544845008883104C202 +9892:080009FEEA102C204A7C4944A854105424542454FF5424542428442444428482 +9893:0C0071FE1020FE4011FC39045524932401243924292429442A504C8849048202 +9894:080008FE14102220517C88447E540254045408547E54425442287E2442420082 +9895:40004CFE7020424042FC3E8400947C940094FE94109454A45230924850842302 +9896:40004DFE7020444045FC3D0401240D2471241124FF2411443850548891041202 +9897:00007F7E491049207F7C494449547F540854FF541C542A544920882808440882 +9898:00003EFE22103E20227C3E440054FF54085408542F282844288258004FFE8000 +9899:00003EFE2A102A203E7C2A442A543E5408547F5449544B545F28412445424282 +989A:0000EEFEAA10AA20EE7C0044FE540054FF5440547E5402540228022414420882 +989B:0800497E491049207F7C0044FFD4085410547F54555455545520552855444382 +989C:100008FE7F102220147C7F444454485452544454485451544228442488423082 +989D:100008FE7F104120107C1E44225454540854145422547F54A22822243E422282 +989E:00007F7E22103E20227C3E4423D4FE540254F754115455542220552889441082 +989F:240024FEFF102420007CFF4424542454FF54A554A554DB549128812485428282 +98A0:080008FE7F1008203E7C22443E5422543E5422543E5422547F28142422424182 +98A1:00007EFE22101C20227C774455542254555408547F541C542A28492488420882 +98A2:00007F7E41107F20417C7F440854FFD400547F5441547F540820492888C41882 +98A3:920054FEFE103020547C924420544454785410542454FE541028542492423082 +98A4:0800FF7E0010FF20817CBD44A554FF5400547E5442547E5442207E280044FE82 +98A5:00007F7E0810FFA088FC6B4408546B540054FFD408547F545520552855444382 +98A6:08002EFE2820FF7C2A544C543228C4443FF821083FF822083FF80880FFFE0080 +98A7:2200227EFF902220777C5544775412543F546454BF5424543F2024283F442082 +98A8:00003FF8200820E82F0821082FE8292829282FE82908214A21EA5E2A48068002 +98A9:00027FC2404443485C5244425F44554855505F42444445485F504922801E0000 +98AA:00007FFC01000160011001001FF010D01710111017D0155027CA212A4FE68022 +98AB:00087FC84048435C5C4844485F7E554855485F54445245625F404922801E0000 +98AC:00007FDE404443545C5444645F7E5544554C5F54446445545F484922801E0000 +98AD:00087FC84048434E5C4844485F48555C55545F544454455C5F544922801E0000 +98AE:00407F40417C4D84717451547D5455747D48514255427D3E44804042803E0000 +98AF:80004FF848080868EB880888A888ABE8AAA8AAA84BE8388AC8AA10EA17262002 +98B0:00087FCA4048437E5C4844505F5E5552556A5F44444A45525F404922801E0000 +98B1:00087FC8404843525C5E44425F40555E55525F52445E45525F404922801E0000 +98B2:00027DF244824C8A748A55EA552A7D2A56AA7C4A544A5482530A7D044482807E +98B3:00047FD8404843485C7E44485F48555C55545F544454455C5F404922801E0000 +98B4:00207F20413E4D407180517E7D1255507D5C515055507DBE44804042803E0000 +98B5:00107F5441384D10717C51447D7C55447D7C514455447D4C44804042803E0000 +98B6:00007F7C41444D7C7144517C7D44557C7D4451FE55007D2844C44042803E0000 +98B7:00107F5241944D28714451847D1055127D5451A855247D4444804042803E0000 +98B8:00007F7C41544D7C7154517C7D0055247D12516055A47D1C44804042803E0000 +98B9:00107F7C41244DFE7100517C7D44557C7D10513C55507D7E44904052803E0000 +98BA:007C7F44417C4D44717C51007DFE55407D7E51AA55527D2A44844042803E0000 +98BB:0E00F1FC2304933445C421443DF451541154FFF41144555455F45D1662060402 +98BC:00A07D2C45244DAC752455FC54207DFC54047CC85430544853847D004482807E +98BD:100055FC550455347DC401447DF401547D5445F47D44455429F41D16E2064402 +98BE:00007DF844A84C887450542054D87F2654F87CA854F8542453FC7D044482807E +98BF:00007DFC51047D3451C47D4451F451547D5405F45544555455F4851616060C02 +98C0:00407DBC45144D5475A4552C54407DFC55247DFC552455FC52007D004482807E +98C1:0000FDFC2504B5346DC4B54425F411547D5445F445447D5445F445167E064402 +98C2:00007DDC44444D5474CC555454207C5054A87D5454A0544852907D2044C2807E +98C3:00007DFC44504DFC755455FC54007CF854007DFC54A8552452607D004482807E +98C4:0000FEF82888FE98AAE8AAA8FEF800A87CF800A8FEA810BA54CA928A51062202 +98C5:00007DFE44504DDC755455DC54507DFC55247DFC552455FC52007D004482807E +98C6:140011FCFF04293445C4834425F437542554FFF4254455544BF4891612060402 +98C7:00287C2045FC4C507488550454487C6C54487DFE544854A852947D1244A2807E +98C8:00207CA444A44D287450548855047C8856AA7DDC5488555452227D004482807E +98C9:00207C2045FC4D54748855FC568A7CF854887CF854A8552452607D004482807E +98CA:08002AF82C88489814E822A841F824A82DF8B6A864A824BA54CA4A8A91060202 +98CB:00007DDE44844DCE748455DE54207C1854487CD45562544853B87D004482807E +98CC:4400FEF844880098EEE8AAA8EEF824A87EF8C8A87EA848BA7ECA488A7F064202 +98CD:1FF010D01710111017D0155027CA212A4FE680227CF854A87CF854AA7DFE8202 +98CE:00003FF02010201028502450229022902110211022902292244A484A40068002 +98CF:00007DF84410442044C04DFC6C545494552454446C8445284410420241FE8000 +98D0:00103F10211E21102510357C294429442944297C3544250020824062401E8000 +98D1:00407C4044FC450446F44C946CF454845494548A6C82447E4400420241FE8000 +98D2:200013F81208FE0803280AA88AA88A484A484AA852A8532A1C0AE40A48061002 +98D3:00007CF8448844F844884CF86C8854F8548855FC6C0044504488420241FE8000 +98D4:00007DFC452445FC45244DFC6C205414555255426E4844384400420241FE8000 +98D5:00A07D2C452445AC45244DFC6C2055FC540454C86C3044484584420241FE8000 +98D6:0E00F0F822889288448820983CD850A810A8FEA810D8548A548A5D0A65060202 +98D7:00407DBC4514455445A44D2C6C4055FC552455FC6D2445FC4400420241FE8000 +98D8:0000FEF82888FE88AA88AA98FED800A87CA800A8FED8108A548A930A51062202 +98D9:000014F81088FE882888449882D824A836A824A8FFD8248A548A4B0A89061202 +98DA:00207CA444A4452844504C886D04548856AA55DC6C8845544622420241FE8000 +98DB:00007FE000240A28722412201212120AFFC6124812501248224022244214820C +98DC:08001DFAF00C544A3988FEAA34A652A281F87CAA54AC54AA7CA854AA54A67D22 +98DD:00047FE808247212120EFFD0122A221EFDF82448D5AA56ACFDFA54A855AA9326 +98DE:0000FFC000400044004800500060005000480044002000200012000A00060002 +98DF:0100028004400A203118DFF610101FF010101FF0100811901060121014081804 +98E0:080008001400120029007E00A2003E0022003E002000280024002A0032002000 +98E1:0040404020A0211002880C460BF8120813F8E20823F822442228229023080204 +98E2:080008781448124829487E48A2483E4822483E482048284A244A2A8A32862100 +98E3:0800080014FE121029107E10A2103E1022103E102010281024102A1032502020 +98E4:082008201420122029207E20A2203E2022503E502050285024482A8832842102 +98E5:0808081C14E0122029207E20A2203E3E22E03E202020282224222A22321E2000 +98E6:0800087C1410121029107E10A2103EFE22103E102010281024102A1032102010 +98E7:2020202020503C4824A445FA4688A4F8148808F808A21094108820A440C48080 +98E8:102010201050244824A479FA0A8810F824887CF804A20894088810A420C44080 +98E9:10201020282025FC5220FCA844A87CA844A87CA840F8502248225422641E4000 +98EA:08000808141C127029107E10A2103E1022FE3E102010281024102A10327C2000 +98EB:1008103C29E024205220FC2045FE7C2044207C50405050504888548865044202 +98EC:0100111009203FF802007FFC082011102FE8C8260FE008200FE808D00A300C08 +98ED:10401040284024FE5280FD2044207DFC44247C24404450444844548464A84110 +98EE:082008201420127E28424484BE1022103E1022103E2820283E4820443E842102 +98EF:1004100E28F024805280FCFC44A47CA444A47CA840A850904910552866444082 +98F0:082008101410120029FE7E20A2203E3022283E282024282424202A2032202020 +98F1:00200020FC50208821443E2245FC450465FC950409FC09221114214841848102 +98F2:104010402840247C5284FC8845207C2044207C50405050504888548865044202 +98F3:10201010280024FE5210FC1044107C1044FE7C10401050104810541065FE4000 +98F4:10201020282024405248FC8445FE7C8244007CFC408450844884548464FC4084 +98F5:084008401440127E29A07EA0A3203E3C22203E202020283E24202A2032202020 +98F6:10401020282824085208FC4844547D5245527D604260504448C45544663C4000 +98F7:0800087C1444124429447E7CA2443E4422443E7C2044284424442A4432FE2000 +98F8:00207C204450444844A47DFA0288FEF8208840F87CA20494048804A428C41080 +98F9:100010802B1E26525252FA524A527A524A527AD2435A52544890589069104210 +98FA:088028882EF028842E84F17C02800D603FF8C8260FE008200FE808D00A300C08 +98FB:10201020285024885304FE1244207C4045887C10402050444988541064604380 +98FC:080008FE1402120229FA7E02A2023EFA228A3E8A20FA288A24022A0232142008 +98FD:0840084014FC128429047EF4A2943E9422F43E842094288824822A82327E2000 +98FE:10801080288024FE5320FE2044207DFC45247D24412451244934552864204020 +98FF:081008101492129229927E92A2FE3E1022103E922092289224922A9232FE2002 +9900:1088108829FE24885288FC0045047D0444887C88405050204850548865044202 +9901:10401044284E24B85288FD8846887C8844FE7C88408850884888548864BE4080 +9902:1008103C29E024205220FDFE44207C2044207DFC410451044904550465FC4104 +9903:10401020282025FE5200FC8845047E0244887C88405050504820545064884306 +9904:081008101428122829447E82A27C3E0022003E7C2044284424442A44327C2044 +9905:08840848140012FC29487E48A2483E4823FE3E482048284824482A8832882108 +9906:105010502850255252D4FC5844507C5844D47D5240505050489254926512420E +9907:080008FE1482128229BA7E82A2823EBA22AA3EAA20AA28BA24822A82328A2084 +9908:410021FC0A441440E0B0210822842D603FF8C8260FE008200FE808D00A300C08 +9909:08100810142012FE29827E82A2BA3EAA22AA3EAA20AA28BA24822A82328A2084 +990A:082004407FFC01003FF80400FFFE11102FE8C8260FE008200FE808D00A300C08 +990B:111009207FFC0400FFFE111022C8CD363FE8C8240FE008200FE808D00A300C08 +990C:080008FE1444124429447E7CA2443E44227C3E442044284E24F42A0432042004 +990D:00003FFE21083FFC2410288833642C9837F6241027F0241027F4446845188604 +990E:084008401478128829507E20A2503E8823063EF82088288824882A8832F82088 +990F:10401020282025FE5240FC4044A07CA245A47E9844905088488854A464C24080 +9910:08000F7828087F28A11017283AC4CD603FF8C8260FE008200FE808D00A300C08 +9911:1020102029FE24205220FDFE45027E0444F87C10402051FE4820542064A04040 +9912:1004101E29E024225312FC9444807C2045FE7C44408451C84830542864C44302 +9913:101010D82B9424945090FBFE48907894489478D84398509048AA58CA6A864102 +9914:102810242BFE24205220FDFC45247D2445FC7D24412451FC492455246524410C +9915:081008101420124429FE7E28A2443EA2223C3E44204428A824102A2832442082 +9916:100011FE2800240052FCFC8444847C8444FC7C00408450444848540065FE4000 +9917:102010202BFE24205220FDFC45247D2445FC7C20407050A84924562264204020 +9918:081008101428122829447EBAA2103E1022FE3E102058285424922B1232502020 +9919:10C21034281824645382FC2045FE7C5044907DFE42925092489A549464104010 +991A:11841068283024C85324FC2047FE7C4044FC7D8442FC508448FC548464944088 +991B:100011FC2904250453FCFD0445047DFC44007D1241D45118491055526592410E +991C:100011FC2924252453FCFD2445247DFC44207DFE407050A84924562264204020 +991D:1084108429FE248452A4FC1045FE7C4044407C7C404450444844548464944108 +991E:10481044285E25E05228FC12446A7D9644487C5E41E0502448285412646A4186 +991F:100013DE2842254A5084F94A4A527C2048007BDE40525152489459486A544422 +9920:10441044288825DC5288FC8844887C8845DE7C88408850884888548864884108 +9921:10401040287C24845308FE0044207DCE45027D0241CE51024902550265FE4102 +9922:08200810147C120029447E24A2283EFE22003E00207C284424442A44327C2044 +9923:102010202BFE24505288FD2446227DFC45247DFC412451FC48225422641E4000 +9924:102010A228A225245250FC8847047C2244207CA440A451284850548865044202 +9925:04407C7C04403C7804407D7C06C00D603FF8C8260FE008200FE808D00A300C08 +9926:100010FC288024F85280FCF844807FFE45407D24412851104908554465824100 +9927:103810E0282025FC5270FCA845247C2044407DFE404850884850542064504188 +9928:0820081014FE128229047E7CA2443E44227C3E402040287E24422A42327E2042 +9929:082008201450128829267E10A3FE3E2022443EF82012286425882A1832642182 +992A:100013FE2820244053FCFD5445547D5445547D2C402053FE4850548865044202 +992B:100013FE2A22242053FEFC2045FC7D2445FC7D2441FC50204BFE542064204020 +992C:1080109E289225D25292FC9E44927DD245527D5E4152515249D25422642A4044 +992D:1020104028FC248452FCFC8444FC7C0045FE7C20402050FC4820542065FE4000 +992E:7F2010501E882346549009241048619006601FF8E8160FF008100FF408680C1C +992F:1040107C288424F85208FDFE44407CA445387C58409451344854549265504020 +9930:1080108E2920261054C0F8AE49047B144D247964412451244924590469144108 +9931:108010BC2884250851FEFB204D20797C4990791041FE51104928592869444182 +9932:080008FC148412FC29847EFCA2403EFE23123E9220AA288224FA2A0232142008 +9933:0800087C1444127C29447E7CA2003EFE22403E7E20AA292A244A2A92322A2044 +9934:102010202BFE245050A8F9244AFA782048A8788843FE50884888588869084208 +9935:100010FC28A424A452FCFCA444A47CFC44007DFE40905094488854A864C44082 +9936:100010FC288424F45294FDFE45027CFC44847CFC408450FC4884548464944088 +9937:0810081014FE123829547E92A2003E7C22443E7C2044287C24442A0032FE2000 +9938:102210122914248052BEFC0844087DBE44887C884094509248A25540663E4000 +9939:0820081014FE129029BC7E94A2FE3E9422BC3E9020BC28A424A42AA432BC2124 +993A:102810242BFE242053FCFD2445FC7D2445FC7D24400853FE4888544864484018 +993B:084408241428120029FE7E10A2103E7C22103E1020FE280024AA2AAA32AA2000 +993C:1080108028FC250052F8FC0045F87C4845687CC841F8504A48EA555A64464042 +993D:1020104029FC25245324FDFC45247D4445FC7C4040B050A4493C55226622441E +993E:104013BE2A1226925252FAAA4B2478404BFE7A22422253FE4A225A226BFE4202 +993F:10A0112C2924252453ACFD2445247DFC44207DFC408850504820545064884306 +9940:101E11E0282225125294FC8044207DCE45027D0241CE51024902550265FE4102 +9941:1020102028FC24205220FDFE44407C8445FE7C0241FC51544954555467FE4000 +9942:100010F82888248852F8FC8844887CF844007DFC415451544954555467FE4000 +9943:108810882BFE24885200FDFC45047DFC45047DFC402053FE4850548865044202 +9944:1020112428A827FE5202FCF844887C8844F87C20402051FC4820542067FE4000 +9945:087C0844147C1244297C7E00A2FE3EAA22FE3E0020FC284424282A1032682186 +9946:100011FC292425FC5324FDFC44A87CA847FE7CA840A851FC482057FE64204020 +9947:100013FE2A00267C5244FA444A7C7A004AEE7AAA42AA52AA4AEE5A006BFE4000 +9948:1084104829FE241052FCFC2045FE7C40447C7CA4412450FC4844544465FE4000 +9949:108810882BFE248852F8FC2045FC7D2445FC7C2043FE502049FC542067FE4000 +994A:114811482BE82550515EFBE448147BD44A547BD4425453C84A485A546A5442E2 +994B:102011FC292425FC5220FFFE44007DFC45047DFC410451FC490455FC64884104 +994C:100013DE2A5227DE5210FA5249CE780048887BFE408850884BFE588869044202 +994D:108810502BFE242051FCF8204BFE792448A87BFE400051FC4904590469FC4104 +994E:102013FE282025FC5200FDFC45047DFC44887FFE400051FC4904550465FC4104 +994F:3C20043EFF4422A83E1023287E44038006601FF8E8160FF008100FF408680C1C +9950:102013FE282025FC5000FBFE4A0279FC480079FC410451FC490458886BFE4000 +9951:112411242AAA27AE5124FAAA4BAE79244FFE7910411451144A8A5A4A6A164422 +9952:1020102029FC242053FEF9084B9C790849887E3E400053FE489058906912420E +9953:1020112428A827FE5202FCF844887C8844F87C2043FE507048A8552466224020 +9954:0100FFFE10A025FE7B2015FC792011FEE6601FF8E8160FF008100FF408680C1C +9955:7C1C4410FEFE20927CF8049428BC11AA06661FF8E8160FF008100FF408680C1C +9956:1020113C292027FE5010F8144BFE7A104BF07A54425452D44B68544A68964322 +9957:110023DE7A5213D42A527BDA129423D006601FF8E8160FF008100FF408680C1C +9958:101011FE280025FE5302FD7A454A7DFE44007CFC408450FC488454FC640041FE +9959:102011FC2820248853FEFC8845FC7D0445FC7D0441FC510449FC548865044202 +995A:108813FE2888242053FCFC2047FE7C4044887DFC400051FC4954555467FE4000 +995B:108813FE288827FE5202F9FC48007BFE484078A2435450B84B5458926B504020 +995C:3FFE28882F8A20082FBE28882F8828D429A223F826162BF0221043F44268831C +995D:104010202BFE264853FEFA484AEC7B5A4A487BFE4220527C4AC45344647C4844 +995E:11F012102BFC260453FCFA244BB87A2249FE7A1047FC52444BFC58D0694A423E +995F:102013FE280025DC5154F9DC48887BFE48887BFE408853FE489459886AA440C2 +9960:100013FE2A52265253FEF90849547A5E4FB4791E425457DE48145554655E4010 +9961:152817BE294827BE5318FDAA49467BFC4A047BFC420453FC4A045BFC69084204 +9962:104017FC2A4827F85040FFFE4AAA7BB849107BFC411057FE492853106D484186 +9963:2000200020003E00440048008000100010001000100012001400180010000000 +9964:2000200020FE3E10441048108010101010101010101012101410181010500020 +9965:200021F021103D1045104910A1102110211021102110211229123212220E0400 +9966:2010207823C03C40444048408040207E27C020402040244228423042203E0000 +9967:200021F820103C2044404880A1FE209220922092211221222A22344220940108 +9968:2040204020403BFC4840524882482248224823F82048204028423042203E0000 +9969:2080208020FC3D00460048F88000200021F8200820082408280A300A20060002 +996A:2008203C21E03C2044204820802023FE20202020202024202820302021FC0000 +996B:2008203C21E03C204420482083FE202020202050205024502888308821040202 +996C:20802080210039FE4A005440804023FC20442044208420842904310422280410 +996D:2008201C21E03D00450049FCA144214421442128212821102910322822440482 +996E:2040204020403E7C448448888120102010201050105012501488188811040202 +996F:2050204820403C5C45E04840A05E23E020442048203020222852308A23060002 +9970:2080208020803CFE45204A20802021FC21242124212425242934312820200020 +9971:2080208021FC39044A0455F481142114211421F4210421282912310220FE0000 +9972:200023FC20043C0447F44804A00423E422242224222423E42804300420140008 +9973:2020202021243D244524492481FC202020202124212425242924312421FC0004 +9974:2020202020403C8845044BFE8002200021FC2104210425042904310421FC0104 +9975:200023FE21083D08450849F8A108210821F821082108211E2BE8300820080008 +9976:2080208020BC3BC04850502480D4230C200027FE2090209029123112220E0400 +9977:2040204020803BFC4A04520482F4229422942294229422F42A04320422140208 +9978:2020202020503C8845044A0281FC2000200021FC210425042904310421FC0104 +9979:2080208020F839084B1054A0804020A02118220625F821082908310821F80108 +997A:2040202020203DFE44004888A104220220882088205020502820305020880306 +997B:2040202020203BFE4840504080A020A221A4229824902088288430A220C00080 +997C:21042084208838004BFE508880882088208827FE208820882908310822080408 +997D:2020202023FE3C2044204BFEA202240421F82010202023FE2820302020A00040 +997E:200023FC20003C0045F849088108210821F82000210824882890300027FE0000 +997F:201020D823943C9444904BFEA0902094209420D82398209028AA30CA22860102 +9980:2020202020503C8845044AFAA020202023FE2020212821242A22342220A00040 +9981:2008203C23C038444A2451288100204023FE2088210823902860305021880604 +9982:2040204020883D0447FE4802A0882144224220F8218822502820305021880606 +9983:200021FC21243D2445FC4924812421FC202023FE207024A82924322220200020 +9984:200021FC21043D0445FC4904A10421FC2000211221D42118291031522192010E +9985:2080208020F839084A1054008040239C22042204239C22042A04320423FC0204 +9986:2040202023FE3A024C0451F88108210821F82100210021FC2904310421FC0104 +9987:2040204027FC38E049505248844623F8220823F8220823F82A08300027FE0000 +9988:2020202021FC3D2445FC482083FE200021FC2104212425242924305020880304 +9989:200021FC21043DE445244BFE820221FC210421FC210425FC2904310421140108 +998A:20A0232E22223E2247AE4A22A22223FE202023FE210420882850302020D80706 +998B:210021F022103C204BFC5244824423FC20A02122261E20C02830318020600010 +998C:2020202021FC3C2044204BFEA080210423FE200223FC22942A94329427FE0000 +998D:2110211027FC3910480053F8820823F8220823F8204023FC28A0311022080406 +998E:2028202423FE3C2045FC4924A1FC212421FC2124200823FE2888304820480018 +998F:204023BE22123A924A5252AA8324204023FE2222222223FE2A22322223FE0202 +9990:2208211027FC38404BF8508087FC210023F82488288823F82908310827FE0000 +9991:2088208823FE3C8844F84820A1FC212421FC202023FE202029FC302023FE0000 +9992:23F8220823F83A084BF8500087FC24A424A427FC200023F8291030E023180C06 +9993:2288228827C83A904A9E57D4802427D4245427D4245427C82C483454246404C2 +9994:200023DE22523BDE4A10525281CE2000208823FE208820882BFE308821040202 +9995:204027FC22483BF848405FFE8AAA23B8211027FC21102FFE292833102D480186 +9996:10100820FFFE020004003FF8200820083FF8200820083FF8200820083FF82008 +9997:211020A0200023FCFC8025F8250825F8250825F8250825FA250A440243FE8000 +9998:441424122810FDFE101020107DD2455245527D5445D47C0844CA471A7C264442 +9999:00701F8001000100FFFE054009203118DFF6101010101FF0101010101FF01010 +999A:041078501050FE5010883888550492FA7C48444844487C48448844887D284610 +999B:045078481048FE4011FE38405440907C7CA444A444A87D28451046287C444482 +999C:040078FC1084FE84108438FC548090A07CA444A844B07CA044A245227D1E4600 +999D:044078201028FE0810083848545491527D52456046607C4444C445447E3C4400 +999E:0420782011FEFE20102039FE550292047CF8441044207DFE442044207CA04440 +999F:0408783C11C0FE04114438A8540091F87C10442047FE7C20442044207CA04440 +99A0:042078201050FE8811443A2254F890087C10442045FC7D04450445047DFC4504 +99A1:044878481048FDCE10483848544891CE7C48444844487DCE444844487C484448 +99A2:04487844105EFDE010283812546A91967C48445E45E07C24442844127C6A4586 +99A3:0420782011FEFE5010A8392654F890A87CA844F844A87CA844F844AA7C22441E +99A4:040079FC1104FDFC110439FC548091FE7E22452245527D0245FA44027C144408 +99A5:0440784010FEFE8011FC3A8454FC90847CFC4440447C7CC4452844107C684586 +99A6:048878501000FDFE105039FC545493FE7C5445FC44507CD8455446527C504450 +99A7:040078F81088FE8810F83888548890F87C0045FC45547D54455445547FFE4400 +99A8:0878FF4808863E782A483E3040489FE401007FFC09203FF8C8260FE008200FE0 +99A9:042079FC1020FC8813FE388855FC91047DFC450445FC7D0445FC44887D044602 +99AA:0420781011FEFF0210FC38A8553090FC7D8444FC44847CFC448444FC7C484484 +99AB:1FE001007FFC09203FF8C8260FE008247FF81010FEFE545492927C7C44447C7C +99AC:00003FF821003FF021003FF0210021003FF80008124849284928800800500020 +99AD:00007F00487C7F2448247F24482448287FA800A8AA90AA90AAA880A805440282 +99AE:000043FC224023F802400BF80A40124013FCE004255425542554240420280010 +99AF:00007F7C48107F1048107F104810487E7F900090AA90AA90AA90809005100210 +99B0:00107F1048107F3C48247F44480448247F940094AA84AA84AA84808405280210 +99B1:00107F1048107F10487E7F10481048107F9000A8AAA8AAA8AAA880C405440282 +99B2:00087F1C48707F1048107F104810481E7FF00090AA90AA92AA928092050E0200 +99B3:00207E2048207EA048AC7EB448E449A47EA402B4AAA8AAA2AAA28282147E0800 +99B4:00027F22482A7F2A482A7F2A482A482A7FAA00AAAAAAAAAAAAAA80AA05420282 +99B5:3FF821003FF021003FF021003FFC4924849408280820FFFE0820102020204020 +99B6:00107E1048107EFE48107E1048FC48447E440244AA28AA28AA10822814440882 +99B7:00087F0848087F3E48087F08483E482A7FAA00AAAAAAAAAAAAAE808805080208 +99B8:00007F0C48307F2048207F20483E48247FA400A4AAA4AAA4AAA480A405440284 +99B9:00007F3E48227F2248227F224822483E7FA200A2AAA2AAA2AAA280BE05220200 +99BA:00007EFC48447E4848487E50485C48447E440244AA68AAA8AA90829815240842 +99BB:00107F1048207F2848447F7C480448287FA800A8AAA8AAA8AAAA80CA05460280 +99BC:00207E1048107EFE48447E44484448447E440228AA28AA10AA10822814440882 +99BD:3FF821003FF021003FF021003FFC4924849401083FF8210821083FF801000100 +99BE:00107E1048107E1048FE7E92489248107E280228AA28AA28AA48824A148A0906 +99BF:00107F0848007F3E48227F224822483E7FA200A0AAA0AAA0AAA080A005400280 +99C0:00487E4448447E4049FE7E50485048507E500250AA50AA52AA528292148E0900 +99C1:00027F2248147F0848147F22484248007FA200A2AA94AA94AA88809405240242 +99C2:400049FC5120612045FC45203DFC1120112011FEFC0212AA12AA120210141008 +99C3:00107F1048107F10487C7F14481448147F9400FEAA90AA90AAA880A805440282 +99C4:00207E2048207E2048FE7E20482048307E500250AA48AA48AAC882A415240A02 +99C5:00007E7C48447E4448447E44487C48547E500250AA48AA48AA48828414840902 +99C6:00007DFE51007D0451447D28512851107D100528552855445584850015FE0800 +99C7:00107F1048107F20483E7F4448A448247FA800A8AA90AA90AAA880A805440282 +99C8:00087E1C48607E4048407E404840487E7E480248AA48AA48AA48824815FE0800 +99C9:00007EFE48827E8248827EBA48AA48AA7EAA02AAAABAAAAAAA828282148A0884 +99CA:00107E1048107EFE48927E94489048FC7EA402A4AAA8AAA8AA90832815440A82 +99CB:00007F7E48127F1248127F22482A48447F8000BEAAA2AAA2AAA280A2053E0222 +99CC:10003EF84288A2AA1492187EE0001FF011001FF011001FF011001FFC2A44492C +99CD:00007F7C48107F1048547F34483848107FFE0090AA90AA90AA90809005100210 +99CE:00087F0848087F08483E7F2A482A482A7FAA00BEAAAAAAAAAAAA80AA053E0222 +99CF:00007F3E48207F2048207F3E482248227FA200A2AABEAAA0AAA080A0053E0200 +99D0:00107F0848007F3E48087F08480848087FBE0088AA88AA88AA888088057E0200 +99D1:08007F7C114432280C10122861461FF011001FF011001FF011001FFC2A44492C +99D2:00207F2048207F7E48427F82483A482A7FAA00AAAABAAAAAAA82808205140208 +99D3:00007F3E48087F0848087F18481C482A7FAA00CAAA88AA88AA888080053E0200 +99D4:00007F3C48247F2448247F3C482448247FA400BCAAA4AAA4AAA480A4057E0200 +99D5:100010007E7C124422442A7C44009FF011001FF011001FF011001FFC2A44492C +99D6:00107F1048287F2848447F92480848007FBC0084AA88AAA8AA90808805040200 +99D7:00107F1048287F2848447F92482048407F880090AAA0AA84AA88809005200240 +99D8:00087F0848107F1048247F7E482248007FBC00A4AAA4AAA4AAA480A4053C0224 +99D9:00487E4848487E8848FE7E88498848887EC802A8AAA8AA88AA88828814A80890 +99DA:00207C2050207DFC51247D24512451247D2407FE542054505450848815040A02 +99DB:00087F0848087F3E482A7F2A482A482A7FBE0088AAC8AAA8AA90809805240242 +99DC:00107E0848087E0248227E24482448A87EAC02B2AB32AA20AA6282A2151E0800 +99DD:00107F0848087F7E48427F42482048247FA800B0AAA0AAA2AAA280A2051E0200 +99DE:00407C40507E7C8051207CA050AC50B47DE404A454B454A854A28482147E0800 +99DF:00007E0048FE7EAA48AA7EAA48AA48AA7EAA02AAAAAEAAC2AA82828214FE0882 +99E0:00007E2048CE7EAA48AA7EAA48AA48AA7EAA02AAAAEAAAACAA28824814480888 +99E1:00003EF822883EF800001FF811001FF011001FF011001FFC0004292444940008 +99E2:00847E4848007EFC48487E48484848487FFE0248AA48AA48AA48828814880908 +99E3:00507E5048507F5248D47E58485048587ED40352AA50AA50AA92829215120A0E +99E4:00007F7E48107F1048247F22487E480A7F880088AABEAA88AA888088057E0200 +99E5:00147E1248127E1048FE7E10485248527E5202F4AA54AA54AA8A828A15160822 +99E6:111009207FFC0200FFFE08203018DFF611001FF011001FF011001FFC2A44492C +99E7:00007EFE48827E8248BA7E82488248BA7EAA02AAAAAAAABAAA828282148A0884 +99E8:00107F1048107F3E48227F42483A482A7FAA00BAAAAAAAAAAABA808205140208 +99E9:00087F0848147F1448227F40483E48087F880088AABEAA88AA888088057E0200 +99EA:00107E5048507E7C48907E10481048FE7E280228AA28AA28AA4A824A14860900 +99EB:00207E2049247EA448A87E2049FE48507E500250AA50AA52AA528292148E0900 +99EC:00007F7E48247F2448247F3C482448247FBC00A4AAA4AAAEAAF4808405040204 +99ED:00207C1050107DFE50207C24504450F87C120422544455885410842814440982 +99EE:00207E1048107EFE48007E44488249007E440244AA28AA28AA10822814440982 +99EF:00107E5048507E7C48907E10481048FE7E100238AA38AA54AA54829214100810 +99F0:00007EFE48827E9248927E9248FE48927E9202AAAAA6AAC6AA82828214FE0882 +99F1:00407E4048787E8849507E20485048887F0602F8AA88AA88AA88828814F80888 +99F2:00827C9250927C9250927C9252DA52B67C920492549254925492851215020A02 +99F3:0004F80EA3B8F888A088F928A12EA3A8F8A80AA8AAA8A93EA9008A800C7E3800 +99F4:0010F814A012F810A3FEF810A150A154FFF40954A954A948AA4A8A5A0C263042 +99F5:00007EFE48287E2848287EEE48AA48AA7EAA02AAAAEEAA28AA28822814480888 +99F6:00007EFC48847E8448FC7E8048FE48827EBA02AAAAAAAABAAA82828214940908 +99F7:00107E1048FE7E1048107EFE489248927EFE0210AA38AA54AA92831014100810 +99F8:00007EFC48047E7C48047EFC480049FE7F0202FCAA44AA44AA28821014680986 +99F9:00487E4448407EFE48507E54485848527E540258AA52AA54AA9A8292152E0A40 +99FA:00207E1048FC7E8448847EFC488448847EFC02A2AAA4AA98AA90828814C40882 +99FB:00007F3E48227F3E48227F3E480048007FBE0088AA88AAFEAA88808805080208 +99FC:00107E1048287E2848447EBA481048107EFE0210AA58AA54AA92831214500820 +99FD:00007F3E48227F22483E7F00483E48227FA200BEAAA2AABEAAA280A2052A0224 +99FE:00847E4448487E0048FC7E84488448847EFC0248AA48AA48AA48828A148A0906 +99FF:00107E1048207E4448FE7E28484448A27E3C0244AA44AAA8AA10822814440882 +9A00:0010F8D8A394F894A090FBFEA090A094F89408D8AB98A890A8AA88CA0A863102 +9A01:00107E1048FC7E9448FC7E9448FC48007FFE0240AA80AAFCAA04820414280810 +9A02:00207F1048107F7C48007F28481048FE7F900090AAFCAA90AA90809005100210 +9A03:00107E2048447E8248FE7E004840487E7E900210AAFEAA10AA28824414820900 +9A04:00007EFC48047E04487C7E04480448FE7E100292AA54AA38AA54829214500820 +9A05:00507E4848807EFE49907E9048FC48907E9002FCAA90AA90AA9082FE14800880 +9A06:00007EFE48927E9248BA7E9248FE48827EBA02AAAAAAAABAAA828282148A0904 +9A07:0020F820A050F888A104FAFAA020A020FBFE0820A820A9FCA904890409FC3104 +9A08:00227E2248447EEE48447E44484448447EEE0244AA44AA44AA44824414440884 +9A09:00007EFC48847E8448FC7E84488448FC7E000290AA92AAF4AA98829214D2088E +9A0A:00407E4048FE7E8249427E7A48A248227EFA0222AAAAAAAAAAFA820214140808 +9A0B:00107E1048107EFE48107E54485448547EBA0210AA38AA54AA92821014100810 +9A0C:00207E1048FE7E8248007E7C480048007EFE0210AA10AA54AA52829214500820 +9A0D:00007E7C48547E54487C7E544854487C7E1002FEAA10AA38AA54829214100810 +9A0E:00207E2049FC7E2048507E8849FE48087EE802A8AAA8AAE8AAA8820814280810 +9A0F:00247F24487E7F2448247F3C482448247FBC00A4AAA4AAFEAA8080A405220242 +9A10:0020F820A050F888A144FA22A1F8A008F8500820A8A4AA82AA8A8A8A0C783000 +9A11:00287E2848287EEE48287E28482848EE7E280228AA28AAEEAA28822814280828 +9A12:00007EFC48447E2848107E68499648107EFE0292AA92AAFEAA10821415FE0882 +9A13:00107E2848447E82487C7E10481048FE7E920292AAFEAA10AA28822814440882 +9A14:00007EFC48847EFC48847EFC484048FE7F120292AAAAAA82AAFA820214140808 +9A15:00007EFE48287E2848FE7EAA48AA48FE7E1003FEAA24AA44AA68821814640982 +9A16:7E20243E1848FFA829104A2898461FF011001FF011001FF011001FFC2A44492C +9A17:1000087C7E50427C42507E7C425040507F7C550455547F54D554558455144308 +9A18:00407E40487E7EAA496A7E5A489649227E4A0284AA20AA94AB428244143C0800 +9A19:00407C2051FE7D0251027DFE510051007DFE05AA56AA56FE54AA84AA14A20886 +9A1A:00847C4450487DFE50007DE2512A512A7DEA052A552A55EA552A8522152A0964 +9A1B:00007DFA500C7C4A51887CAA50A650A27DF804AA54AC54AA54A8852A15260A22 +9A1C:00107E20487C7E44487C7E44487C48007EFE0210AA10AA7CAA10821014FE0800 +9A1D:0010F810A03CFB94A0FEF894A13CA110FBBC0890A8FEAA90A91089800A7E3400 +9A1E:00107E1048FE7E1048FC7E1048FE48107EFE0220AA40AAFCAB448244147C0844 +9A1F:00207C5050887D0452FA7C0051E2512A7D2A05EA552A552A55EA8522152A0964 +9A20:00007EFC48847E8448FC7E84488448FC7E0003FEAA20AAA0AABC82A015600A3E +9A21:00107E2048FE7E8248FE7E8248FE48107E1202D4AA58AA54AA94829215500820 +9A22:00007DDC51447D4451447DDC510051007DDC0514551455D45508850815140922 +9A23:00287E9248AA7E8248FE7E28484448A27E3C0244AA44AAA8AA10822814440882 +9A24:00107ED448487F4A48847E84490248F87E200220ABFCAA20AA50824814840904 +9A25:00007CFC50487C3051FE7C52509451107E30042055FE547054A8852416220820 +9A26:00007DFC51247D2451FC7D24512451FC7C200410545455425542854A16380800 +9A27:00007E7C48447E4448747E54485448FE7E8202BAAAAAAAAAAABA8282148A0884 +9A28:02427D2450007DFC51247D2451FC51247D2405FC5420542057FE842014200820 +9A29:00107E2048FE7E9248927EFE489248927EFE0220AA24AA5AAA5E82901492090E +9A2A:00507E9648927E9248D67E92489248FE7E1002FCAA44AA44AA288210142808C6 +9A2B:01007FFE44429FF404403FF80440FFFE09201FF02908CFE609000FF800081558 +9A2C:001CF9E0A020FBFEA0A8F8AAA3ACA0AAF9AA0AA6A870A8A8A9248A220C203020 +9A2D:0020793C492053FE48A46B285070438000003FF821003FF821003FFE29224496 +9A2E:00207EDE488A7ECA48AA7ED248A648007EFE0292AA92AAFEAA92829214FE0882 +9A2F:00207E1048FE7E0048447E2848FE48A27E1002FEAA20AA3CAA24824414540888 +9A30:012478A849FC48404BFE79084BFC4D2249FC792049FC492049FE48024AAA9804 +9A31:000E7EF048227E9248447E20484448F87E100224AAFEAA10AAFE822814440882 +9A32:00887C8853FE7C8850007DFC510451FC7D0405FC5524542057FE842014200820 +9A33:00007EFE48907EFC48907EFC489048907EFE0202AAAAAAAAAAAA828214140808 +9A34:00007E7C48447E7C48447E7C481048FE7E820220AAFEAA44AA68821014280844 +9A35:00007EFE48887E9048BE7EA248BE48A27EBE0288AAACAAAAAACA828A15280A10 +9A36:00407E4048FE7F2248AA7EFA484248947F4802FEAB22AAAAAAFA824214940908 +9A37:00007DFC50A47C8850507C2050D853267C2005FC5524552455FC842217FE0802 +9A38:00207C1051FE7D0251027DFE510051EE7D2205AA55665522556686AA16220C66 +9A39:00887C8853FE7C8850F87C2051FC51247DFC042055FC542055FC842017FE0800 +9A3A:08207E2008F8FF2814287F6A082AFF5608823FF821003FF821003FFE29224496 +9A3B:00107E1048FE7E1048BA7E5448BA48107EBA0254AABAAA10AA28822814440882 +9A3C:00207E1048FE7EA848A87EFE48AA48AA7EFE0280AACAAAECAB48824A146A0846 +9A3D:00007DDE50427D5250CA7D52504250207CFC0484548454FC5484848414FC0884 +9A3E:00007DFC51247DFC51247DFC504050887DF00420544457FE5422852416220860 +9A3F:00107EFE48447E2848FE7E00487C48447E7C0244AA7CAA10AAFE821014100810 +9A40:0820FFFE08201FF010101FF01010FFFE08203FF8D1061FF011001FFC2A44452C +9A41:08207F20087E7E4408A4FF2810101E2822447FFAA1003FF821003FFE29224496 +9A42:00107E2048447EFE48447EAA48EE48107E280254AAAAAA50AA24824814100860 +9A43:00007EFE48287EFE48AA7EAA48FE48007E7C0200AAFEAA10AA54829214500820 +9A44:00207C4051FC7D24517C7D8C515451247D5405FC5420541055548542154A0A38 +9A45:0000FBFEA200FA7CA244FA44A27CA200FAEE0AAAAAAAAAAAAAEE8A000BFE3000 +9A46:00007EFE48927EFE48927EFE485448547EFE0254AA54AAFEAA1082FE14100810 +9A47:08203E2008F87F282A685D2A08563E8200003FF821003FF821003FFE29224496 +9A48:00FC7E2848107FFE48527E94495048207EFE02AAAAC6AABAAAAA82BA14820886 +9A49:00207C3C50207DFE51227D3851E4511C7D00052855AA556C5528862814FE0800 +9A4A:00447EFE48447E0048FE7E54485448FE7E540254AAFEAA10AAFE821014100810 +9A4B:0024FBA8A092FD14A208FC04A3BAA0A8F8C60B80AA3CAB84A8A888900AA83144 +9A4C:0020F9FCA024FBFEA024F9FCA020A2AAFBAE0A22ABFEAA22ABAE8AAA0AAA3422 +9A4D:0020F820A1FCF820A3FEF908A39CA108F9880E3EA800ABFEA89088900912320E +9A4E:0020F924A0A8FBFEA0A8F924A222A104F90409DEAA44AD54A89E89040A043404 +9A4F:03FEFA02A3FEFA00A2FCFA08A3FEA210FA300BCEAA42AA84ACEE8F840884318C +9A50:0108F888A3C8F810A3DEFA64A3D4A014FBD40854A894A8E8AB8888940A943122 +9A51:00007EFE48287EEE48AA7EAA48EE48287EFE0292AA92AAFEAA92829214FE0882 +9A52:00007EEE48AA7EAA48EE7E0048FE48927EFE0292AAFEAA10ABFE821014100810 +9A53:00447E2448287EFE48927ED648BA48927EFE0200AA7CAA44AA7C8244147C0844 +9A54:00007EFE48287EFE48AA7EFE4800487C7E44027CAA44AA7CAA1082FE14100810 +9A55:0018F9E0A040FBFEA088F974A252A070F80009FCA904A974A95489740904310C +9A56:008CFBEAA088FBFEA008FBE8A22AA3EAF80A0BECA88CABECA88A88EA0B963022 +9A57:00207C2050507C8851047EFA500050007DDC0554555455DC5488848815540A22 +9A58:0100FFFE20003FF800003FF820083FF8000077DC551477D4551C77D65056B562 +9A59:00107EFE48007EFE48827EBA48AA48FE7E00027CAA44AA7CAA44827C140008FE +9A5A:2420FF20247E7EC482287A104A287AC604003FF821003FF821003FFE29224496 +9A5B:00007DFC51547DFC50207DFC502053FE7C88045055FC542057FE842014200820 +9A5C:00507D5250D47C5051FE7C88505051FE7C2004FC542055FE54A8852416220820 +9A5D:00107EFE48107E7C48007EFE4882487C7E20027CAAC4AB7CAA1082FE14540992 +9A5E:0040F820A3FEFA02A1FCF948A250A1FCFB0409FCA904A9FCA90489FC08883104 +9A5F:03F07D2E51E27D2A51E47D3453EA50327C1E07E054A25534546884A417220820 +9A60:0110F910A7FCF910A1F0FA08A2EAA6ACFAA80AAAAEEAAA06A8008AA40A523452 +9A61:10407E7C2440FF7C42047E7C42407E7842423FFE21003FF821003FFE29224496 +9A62:0040F87CA040FBFCA244FBF0A244A2FCFAA80AF8AAA8AAF8AA008DFC095433FE +9A63:01247CA851FC7C4053FE7D0853FC55227DFC052055FC552055FE840216AA0804 +9A64:00107EFE48007EEE48AA7EEE484448FE7E4402FEAA44AAFEAA5082CA15640842 +9A65:0094FB98A092F98EA280F9FCA124A1FCF92409FCA888A9FCA8888BFE08883104 +9A66:01FCF820A3FEFA22A1ACF820A1ACA000F89E0BF2A89EA9D2AABE8C92089E3092 +9A67:0290FA90A7D0FABEA3CAF92EA7DAA54AFD7E0FCAA91EAFEAA90A8902090A3104 +9A68:0222FBFEA090F9FEA310FDFEA110A1FEF91009FEA900ABFEAA8A8B760A523276 +9A69:0088FBFEA088FBDEA252FBDEA0A0A090F9FE0920ABFCAD20A9FC892009FE3100 +9A6A:03DEF800A3DEFA52A35AFA52A020A3FEFA500BFEAA52ABFEAA928ADC0A9234CE +9A6B:7FF842007FF042007FFC5244892C7E7E48487E7E48487E7E48487E7E02029696 +9A6C:00007FE0002000201020102010201FFC000400040004FFE40004000400280010 +9A6D:00007C0005FC24842484248424883E88025002501A20E2204250028815040A02 +9A6E:00207C2004202420242025FE24203E20022002501A50E2504288028815040A02 +9A6F:0104F924092449244924492449247D24052405241D24E524452406242A041404 +9A70:0020F82008204920492C493449647FA4052405341D28E5224522050228FE1000 +9A71:0000F9FE090049044944492849287D10051005281D28E5444584050029FE1000 +9A72:00007CFC048424842484248424843EFC028402841A84E2844284028414FC0884 +9A73:0008F888085048204850488849007C08048804881C50E4504420045028881306 +9A74:0040F820082048FC4884488448847CFC048404801C80E4804480050029001200 +9A75:0000F8F808884888488848F848887C88048804F81C88E488448804882BFE1000 +9A76:0020F820082049FC4924492449247D2405FC04201CA0E4604460049029081206 +9A77:0000F9FC095449544954495449547D540594058C1D04E504450405FC29041000 +9A78:0088F88808884908497E4B084D087D48052805281D08E5084508050829281110 +9A79:0080F880090049FC4A044C0449E47D24052405241DE4E5244404040428281010 +9A7A:0080F88008F849084A104C204BFC7C04040404041DFCE404440404042BFC1004 +9A7B:0040F82008004BFE4820482048207C2005FC04201C20E420442004202BFE1000 +9A7C:0020F810081049FE49024A0448807C88049004A01CC0E48244820482287E1000 +9A7D:08007F7C114432280C10122861461FE00020082008200FFC00047FC400140008 +9A7E:080008007F7C11441144257C42001FE00020082008200FFC00047FC400140008 +9A7F:0000FBFC090448884850482048D87F26042005FC1C20E42047FE042028201020 +9A80:0020F8200840488849044BFE48027C0005FC05041D04E5044504050429FC1104 +9A81:0080F88008BC4BC04850482448D47F0C040007FE1C90E490451205122A0E1400 +9A82:00007CF8448844887CF800003FE00020082008200FFC00047FE4000400280010 +9A83:0000F9FC090449244924492449FC7D24052405541D4CE58C4504050429FC1104 +9A84:0008F83C09E0482048204BFE48507C880504068A1C88E4884488050829081208 +9A85:0090F894091449184B104D3249527D0E052004201FFEE4204420042028201020 +9A86:0080F88008F849084B104CA048407CA0051806061DF8E5084508050829F81108 +9A87:0020F810081049FE4820482448447CF8041204221C44E5884410042828441182 +9A88:0084F8440848480049FE484848487C48044807FE1C48E4484448044828881108 +9A89:3FF0001010101FFC00047FE400280010FCFC040444447E7E0202F2F20A0A0404 +9A8A:0000F3FE1000500053DE525252527A520B5A0AD63A52CA520A520A522A5212D6 +9A8B:0020F82009FC492449FC492449FC7C0007FE04801D00E5FC4404040428281010 +9A8C:0020F82008504850488849044AFA7C00044404241D24E4A8448804102BFE1000 +9A8D:0040F82009FC4800488848504BFE7C20042004201DFCE4204420042028201020 +9A8E:0000F8FC0804487C480448FC48007DFE050204FC1C44E4444428041028681186 +9A8F:0040F840088849044BFE480248887D44064204F81D88E6504420045029881606 +9A90:0088F8880BFE4888488848F848887C8804F804881C88E7FE4400048828841104 +9A91:0020F82009FC4850488849044BFE7C0805E805281D28E5E84528040828281010 +9A92:0000F9FC0924492449FC492449247DFC042007FE1C70E4A84524062228201020 +9A93:0050F848088048FE49904A9048FC7C90049004FC1C90E490449004FE28801080 +9A94:0040F8200BFE4A024C0448F848007C0005FE04201CA8E4A44522062228A01040 +9A95:0020F82009FC48244BFE482449FC7C20052405241D74E5AC452405242A241424 +9A96:0040F848088449FE48204BFE48887D24064205881C10E4624584041828601380 +9A97:0040F82009FE4902490249FE49007D0005FE05AA1EAAE6FE44AA04AA28A21086 +9A98:0020793C492053FE48A46B28507043801FE0002008200FFC00047FC400140008 +9A99:0010FBD408584A52498C488849047EFA042004201DFEE4204450048829041202 +9A9A:0000F9FC08A448884850482048D87F26042005FC1D24E52445FC04222BFE1002 +9A9B:7E20243E1848FFA829104A28984600001FE0002008200FFC00047FC400140008 +9A9C:08207F20087E7E4408A4FF2810101E2822445FE2802008200FFC00047FD40008 +9A9D:0040F9BC09144994495449A4494C7C0005FC05241D24E5FC4524052429FC1104 +9A9E:01007FFE44429FF404403FF80440FFFE08201FD02048C8460FF800087FA80010 +9A9F:0020F81009FE4902490249FE49007DEE052205AA1D66E522456606AA2A221466 +9AA0:0000FBFE085049FC4954495449FC7C0005FC04001FFEE42044A805242AA21040 +9AA1:0000F9FC092449FC492449FC48407C8805F004201C44E7FE442205242A221060 +9AA2:0020F84009FC4924497C498C49547D24055405FC1C20E41045540542294A1238 +9AA3:03FEF20213FE520052FC520853FE7A100A300BCE3A42CA840CEE0F842884118C +9AA4:07E0F25C13C4525453C8526857D47864083C0FC03944CA6808D009482E461040 +9AA5:0094FB980892498E4A8049FC49247DFC052405FC1C88E5FC448807FE28881104 +9AA6:01FCF8200BFE4A2249AC482049AC7C00049E07F21C9EE5D246BE0492289E1092 +9AA7:0020F3FE100051DC515451DC50887BFE08880BFE3888CBFE089409882AA410C2 +9AA8:1FF010101F90109010907FFE40029FF410101FF010101FF01010101010501020 +9AA9:00407C404440744055F8FE4882487C4844487C4844487C4A448A448A55064A00 +9AAA:00007C0044F074905490FE9082907CD044B07C9044907C9244924512550E4A00 +9AAB:00407C40444075F85448FE4882487D4844C87C4844A87CA8448A450A55064A02 +9AAC:00007CFC442074205420FE2082207DFE44207C2044207C204420442054A04840 +9AAD:00007CFC442074205420FE2082207DFE44207C2044207C204420442054204820 +9AAE:3F1021143D12251225107F9640B8BF1021103F1021103F10210A210A25062202 +9AAF:00407C20440075FC5400FE0082F07C9044907C9044907C9244924512550E4A00 +9AB0:00007CF8448874885488FF0682007DFC44847C8444487C504420445054884B06 +9AB1:00207C20442074505450FE8883067C4844487C4844487C484448448854884908 +9AB2:00407C4044FC74845504FEF482947C9444F47C8444947C8844824482547E4800 +9AB3:00107C10441074FE5492FE9482907CFC44A47CA444A87CA84490452855444A82 +9AB4:00087C284428742854A8FEAA82BC7CA844A87CA844A87CA844AA44BA54EA4986 +9AB5:00207C204420742055FEFE7082A87CA845247D2446227CF84420442054204820 +9AB6:00047C1E44F074905490FE9082907CFE44907C9044907C88448A44AA54D6488A +9AB7:00207C204420742055FEFE2082207C2044FC7C8444847C844484448454FC4884 +9AB8:00207C10441075FE5420FE2482447CF844127C2244447D884410442854444982 +9AB9:00207C10441074FE5400FE4482827D0044447C4444287C284410442854444882 +9ABA:00087C1C44E074805480FEFE82807C8044BC7CA444A47CA444A4453C55244A00 +9ABB:00207C2045FC74505488FF0482FA7C0047FE7C4044807DFC4404440454284810 +9ABC:00407C40447874885550FE2082507C8845067CF844887C884488448854F84888 +9ABD:00047C1E45E074225512FE9482807C2045FE7C4444847DC84430442854C44B02 +9ABE:00007DFE4420742055FCFF2483247DFC45247D2445FC7D2044A0444054B04B0E +9ABF:00847C48440074FC5448FE4882487C4845FE7C4844487C484448448854884908 +9AC0:00207C4044FE74925492FEFE82927CA244FE7C4844887DFE4408440854084808 +9AC1:00007CF844A874A854F8FEA882A87CF844207DFC44207C7044A8452654204820 +9AC2:00407C2045FC75045440FE7882887D5044207CD847067CF84488448854F84888 +9AC3:00FC7CA444A474FC54A4FEA482FC7C2044207DFE45227D2A45FA450A55024906 +9AC4:00087C0844FE751054A0FE7E82A27C2245BE7CA244BE7CA244AA44A455404A3E +9AC5:00207D2444A8742055FEFE6882A47D0244207DFE44487C8844D04430544C4982 +9AC6:00147C1245FE741054FEFE9282FE7C9244FE7C9244047DFE444444245424480C +9AC7:00207C1045FE740054FCFE8482FC7C0045FE7D02457A7D4A457A4502550A4904 +9AC8:00207C1044FE74005444FE2882FE7CA244107CFE44207C3C4424444454544888 +9AC9:00207C2045FE75525448FEFE82907D9044FE7C9044907CFE4490449054FE4880 +9ACA:00847C44444875FE5420FEFC82207DFE44407C8044FE7D104610441055FE4800 +9ACB:00207C1045FE75025448FEFC82487C0044FC7C8444A47CA444A4445054924B0E +9ACC:00407C2045FE75025418FEE082807CFC44907C9044907DFE4400448855044A02 +9ACD:00207C1045FE75485548FF4883FE7D4845487DEC455A7D684548454856484848 +9ACE:00007CEE442274AA5466FEAA82107C2844447D9244207CC8443244C4541848E0 +9ACF:00207DFC452477FE5524FFFC82207DFC45247DFC44407DFE448845D054704B8C +9AD0:00207C2044FC742055FEFE8883DC7C8844C87DBC44007DFE445044505494490C +9AD1:00007CFE44AA74AA54FEFE4082FE7D2244FA7CAA44AA7CFA442244FA540A4804 +9AD2:00487DFE4448740055FEFE8882EA7D2C44CA7C8645487DFE4448444854884908 +9AD3:00107C7E452074BC54C8FEBE82007DBC44A47CBC44A47CBC44A444AC55404A3E +9AD4:00507DFC455475FC5554FFFC82007DFC44007DFC45047DFC4488445057FE4800 +9AD5:00207C1045FE750254FCFEA883307CFC45847CFC44847CFC448444FC54484884 +9AD6:00207DFE454A74FC5448FEFC82847CFC44847CFC44847CFC445044545492490E +9AD7:00207C3E442075FE5522FFF883227D7E45547D7C45547D7C450046FE54AA49FE +9AD8:02000100FFFE00000FE0082008200FE000007FFC40044FE4482448244FE4400C +9AD9:020001007FFC10101FF010101FF010107FFC40044FE4482448244FE44004400C +9ADA:20201010FE1001FE7C0044007C780048FE488248BA48AA4AAA4ABA8A82868700 +9ADB:200010FCFE8400847CFC44A07CA000A0FEF882A8BAA8AAA8AAA8BAAA834A8686 +9ADC:2000107EFE42007E7C42447E7C000014FE648224BA24AAFEAA24BA2482448684 +9ADD:2048116AFEDC00487CB445227DFE0102FE208220BAFCAA24AA44BA4482948708 +9ADE:207C1044FE44007C7C0044EE7CAA00AAFEEE8210BAFEAA38AA54BA9283108610 +9ADF:3F04200420083E10202020443E0420082010FF22104224044208FF10412000C0 +9AE0:3E0420183E6020043E182062FF0422187F6000000FE00820082010222022C01E +9AE1:3E0420183E6020043E182062FF0422187F6000007FFC0440044008423042C03E +9AE2:3E0420183E6020043E182062FF0422187F60013011D01F107152112210020FFE +9AE3:3E0420183E6020043E182062FF0422187F6002007FFC040007F0081010A06040 +9AE4:3E0420183E6020043E182062FF0422187F6001007FFC0380054009203118C106 +9AE5:3F0820303EC42018FF62220C7F7000000FF008107FFE08107FFE081008500820 +9AE6:3E0420183E6020043E182062FF0422187F6001F03E0003F03E0003FA7E0201FE +9AE7:3E0420183E6020043E182062FF0422187F6001007FFC4104028004821882E07E +9AE8:3E0420183E6020043E182062FF0422187F6000003FF80000FFFE04401842E03E +9AE9:3F0820303EC42018FF62220C7F700000FFFE010021FC21043FFC000400280010 +9AEA:3E0420183E6020043E182062FF0422187F600100FFFE04000FF0122061C00E3C +9AEB:3E0420183E6020043E182062FF0422187F6000007FF8080810303FF8D0081FF8 +9AEC:3E0420183E6020043E182062FF0422187F6000007FFC03000D70710C0100FFFE +9AED:3E0420183E6020043E182062FF0422187F60088008882E9028E028842E84F07C +9AEE:3E0420183E6020043E182062FF0422187F600110FFFE04000FF0122061C00E3C +9AEF:3F0820303EC42018FF62220C7F7001003FF821083FF82108FFFE200820282010 +9AF0:3E0420183E6020043E182062FF0422187F6000001220FFFE122013E010001FFC +9AF1:3F0820303EC42018FF62220C7F7008001FF020105F9010901FD0102010040FFC +9AF2:3E0420183E6020043E182062FF0422187F6000803FFC208427F0222041C09E3C +9AF3:3E0420183E6020043E182062FF0422187F6000003FE00440FFFC04841888E180 +9AF4:3F0820303EC42018FF62220C7F7004407FF804483FF824403FFC084410542048 +9AF5:3E0420183E6020043E182062FF0422187F600000FFFE02003FF8248824A82010 +9AF6:3F0820303EC42018FF62220C7F7000003FF808200FE008200FE0083EFFE00020 +9AF7:3E0420183E6020043E182062FF0422187F6004403FF824483FF824483FF82008 +9AF8:3E0420183E6020043E182062FF0422187F6004403FF80440FFFE082010102008 +9AF9:3E0420183E6020043E182062FF0422187F600840104037FCD0E013581C461040 +9AFA:3F0820303EC42018FF62220C7F70000000F83F000100FFFE01001FF010101FF0 +9AFB:3F0820303EC42018FF62220C7F700100FFFE01003FF800003FF820083FF82008 +9AFC:3F042018FF62220C7F7008001FF0282007C01830E10E1FF001007FFC01000100 +9AFD:3E0420183E6020043E182062FF0422187F6011101110292845443FF80100FFFE +9AFE:3F0820303EC42018FF62220C7F70111009203FF820083FF820083FF820082018 +9AFF:3E0420183E6020043E182062FF0422187F60102048A825240A227028103017C0 +9B00:3F042018FF62220C7F70082004407FF801083FF821003FFC0304051419086100 +9B01:3E0420183E6020043E182062FF0422187F6000083E4808487F481C482A084918 +9B02:3F0820303EC42018FF62220C7F7000201FC010001FF810801080FFFE10202010 +9B03:3F0820303EC42018FF62220C7F7001007FFC40041FF000007FFC111025084204 +9B04:3F0820303EC42018FF62220C7F7000001FF010101FF010101FFC644408943308 +9B05:3F0820303EC42018FF62220C7F7000003E7C22443E7C22443E7C22444A948508 +9B06:3E0420183E6020043E182062FF0422187F6010101088FD443242589095F81008 +9B07:3F042018FF62220C7F7008001FF020205FF80108FFFE01081FF8010805000200 +9B08:3F042018FF62220C7F70111009207FFC0400FFFE10102FE8C82608A0084807F8 +9B09:3F0820303EC42018FF62220C7F700440238824483FF814102FE8144003807C78 +9B0A:3F042018FF62220C7F7001007FFC01003FF80200FFFE08201FF02828CFE60820 +9B0B:3F042018FF62220C7F7010100820FFFE00003E0822483E4822483E4822082618 +9B0C:3F042018FF62220C7F7004007FFC08801FFC28104FF088100FF0081008500820 +9B0D:3E0420183E6020043E182062FF0422187F60107CFF44107C7E44427C7E44428C +9B0E:3F0820303EC42018FF62220C7F7004047FC404243FA424A43FA4150424944408 +9B0F:3E0420183E6020043E182062FF0422187F6000007C101052FE94382854449282 +9B10:3F042018FF62220C7F7001081FD001207FFC06201C4463FC00001FF811081FF8 +9B11:3F042018FF62220C7F7008407FFC04803FF00490FFFE04903FF00CA03498C486 +9B12:3F042018FF62220C7F7001007FFC01001FF0101011101110FFFE082010102008 +9B13:3F042018FF62220C7F70020001007FFE40229FC410001FF81080FFFE10202010 +9B14:3F042018FF62220C7F70210013F0151000E0775C11F0104013FC284047FE0000 +9B15:3F042018FF62220C7F700820FFFE08201FF010101FF01010FFFE08203018C006 +9B16:3F042018FF62220C7F7008201FF0102025487EFC044018B0E30E0C6003801C00 +9B17:3F042018FF62220C7F7008207FFC08200FE001007FFC5144492455546184410C +9B18:3F042018FF62220C7F7000001FF010101FF010107FFC44447FFC082007C0F83E +9B19:3F042018FF62220C7F7008207FFC511449247FFC00001FF010101FF010101FF0 +9B1A:3F042018FF62220C7F7000000BFE104061FC090411FC610405FC090431FCC088 +9B1B:3F042018FF62220C7F7002003FF82448238824483FF829482528294A25263182 +9B1C:3F042018FF62220C7F7000007C7C44447C7C47C47C7C47C4444447C4444448CC +9B1D:3F042018FF62220C7F7C44447C7C44447C7C40044FE448244FE448244FE4400C +9B1E:3F042018FF62220C7F7002401FF812481FF812483FFC20003FFC28884A708C0E +9B1F:3F0820303EC42018FF62220C7F7001003FF82448FFFE10101FF00C883470C60E +9B20:3F0820303EC42018FF62220C7F7002800C603FF8D55613901FF00A2009200FE0 +9B21:3F042018FF62220C7F7001007FFC4204A92847E400003FF82448FFFE01000300 +9B22:3F042018FF62220C7F7001007FFE40029FF4092011C00FF818886FF804100808 +9B23:3F042018FF62220C7F701084210810843FF82448238824483FF8294A25263182 +9B24:3F042018FF62220C7F700100FFFE22883EF804403FF80440FFFE04901C60671C +9B25:00005E7A44225E7A44225E7A40024002400240024002400240024002400A4004 +9B26:00005E7A44225E7A44225E7A4082448242824882448240F25F824082408A4084 +9B27:00005E7A44225E7A44225E7A420241025FF241024FE2492249A24942410A4104 +9B28:00005E7A44225E7A44225E7A4002444244424FE2444244425FF24442482A4004 +9B29:00005E7A44225E7A44225E7A42024CE248224EE248224FE242824492587A4004 +9B2A:BEFA8822BEFA8822BEFA8002BF1280129EFE921292929E5292128F12B8529026 +9B2B:BEFA8822BEFA8822BEFA80029C42847ABF5292929E1292529E2293A2FE528296 +9B2C:BEFA8822BEFA8822BEFA8806B3BAAAA2BBA28A3EBBAAA0AABBAA8A2A8BAABC46 +9B2D:BEFA8822BEFA8822BEFA8006BBBAAAA2BBA28A3EBBAAA0AABBAA8A2A8BAABC46 +9B2E:BEFA8822BEFA8822BEFA8102BFF2A012BCF28482B4F29492FCF29482B49283F6 +9B2F:09202448228829282288244829283FF81000103811C01E04100410040FFC0000 +9B30:2288F93E2288729CA92A228800007FFE4A12A4A42AC83F9010241F4810101F20 +9B31:2208F3BC2508739CAD6A27C800007FFE4A12A4A42AC83F9010241F4810101F20 +9B32:0000FFFE00001FF0101010101FF000007FFC482444445FF44104410441144008 +9B33:01FC01003FFE210221F02F0420FC20003FFE220823F820002FFE29124BFA8842 +9B34:0014FE1200FE7C1044107CFE0092FE9282FEAA929292FEFE9292929292928686 +9B35:3E7C48907EFC142A66C60400FFFE00001FF010101FF000007FFC44444FE4410C +9B36:10F87CA810A8FE52288E4500FFFE00001FF010101FF000007FFC44444FE4410C +9B37:0028FE9200AA7C8244FE7C280044FEA2823CAA449244FEA89210922892448682 +9B38:0020FEDE008A7CCA44AA7CD200A6FE0082FEAA929292FEFE9292929292FE8682 +9B39:08F83E8808F87E8808F81452228E4100FFFE10101FF000007FFC44444FE4410C +9B3A:0040FE7E00807D7C44447C7C0044FE7C8200AAFE9240FEFE932A924A92928626 +9B3B:711C1544711C47D0739C1544310C0000FFFE10101FF000007FFC44444FE4410C +9B3C:020004003FF8210821083FF8220822083FF8051009200948117C2102410280FE +9B3D:080410047F08491049247F04490849107F2210021A042C882F904820480287FE +9B3E:081010107F7E491049107F10497C49047F4410281A102CA82FC44884480287FE +9B3F:0808101C7F60494049407F7E494849487F4810481A482C882F884800480287FE +9B40:081010107F28492849447F82492849287F2810281A282CA82FA84848480287FE +9B41:080810487F28492849087F48492849287F0E10F81A082C882F884808480287FE +9B42:002000407DFC0124012401FCFF24212421FC2040486844B2FCBE45200122021E +9B43:102820247C2055FE54207C20547C54447C5410882A942D244F40480287FE0000 +9B44:1020104021FC7D24452445FC45247D2445FC4440446844B27CBE45200122021E +9B45:081010107F10497C49107F1049FE49107F3810541A922C902F904810480287FE +9B46:101420127C1054FE54907C94549454887C8A10DA2AA62D424F00480287FE0000 +9B47:3FFC20903FFC21402630388C21002FF828882FF828882FF8415042FA8C8A307E +9B48:081010547F384910497C7F444944497C7F4410441A7C2CC42FC4484C480287FE +9B49:100021FC7C50545055FC7D54555455547DAC11042B042D144F08480287FE0000 +9B4A:101020147C1257FE54107DD4555455D47C1810CA2B162D224F40480287FE0000 +9B4B:082810247F40497E49C87F48497E49487F48107E1A482CC82FFE4840480287FE +9B4C:082410247F7E492449247F3C4924493C7F2410241A7E2C802FA84844480287FE +9B4D:100021FC7D04558C55547DFC554455247DFC11442B742D044F0C480287FE0000 +9B4E:23FE4020F820ABFEAA22FB32AAAAAB76FA66222256225A2A5E0450024FFE8000 +9B4F:0C20704011FCFF24392455FC9324012411FCFC40246844B228BE11202922C61E +9B50:108820507DFE545055FC7C5457FE54547DFC10502AD82D544F52485287FE0000 +9B51:104020207DFC545055247D5455FC54207DFC11442B542D744F0C480287FE0000 +9B52:100021FC7C5055FC55547DFC540054F87C0011FC2AA82D244F60480287FE0000 +9B53:11FC21247DFC552455FC7CA855FC54A87CA811FC2A202DFC4F20482287FE0000 +9B54:00803FFE24103F7C26382D5435122FF828882FF828882FF8215042F84C8AB07E +9B55:109421187DDE5494555A7DDE549455FE7C9010D42AAA2D164F20480287FE0000 +9B56:1020203E7C2055FE55227D3C55E2551E7D2811AA2A6C2D284F7C480287FE0000 +9B57:1020FE4010FC7C940094FEFC02A47CA410FCFE200044FF6A026EFFA0AAA2E71E +9B58:3FFE28882F8A20082FBE28882F88289429A227F8248827F8248847F842528C3E +9B59:42043FD88A904F9E2A945FD482241FF011101FF012101FF004A808BA3082C07E +9B5A:040004000FE0102020407FF8A10821083FF8210821083FF80000488844448444 +9B5B:200020007CFE442288227E22522252227E22522252227E420042AA82AA940108 +9B5C:202020207C20442088207E20522052207E50525052507E500048AA88AA840102 +9B5D:100410043E04422484247F24492449247F24492449247F24000455044A948A88 +9B5E:208020407C20442088107E10521052287E28522852287E480044AA44AA840102 +9B5F:200020007C7C441088107E10521052107E10521052107E100010AA10AAFE0000 +9B60:2008203C79E0482090207C205420543E7DE0542054207C220022AA22AA1E0000 +9B61:204020407C40447C88847E84530452447E24522452047E040004AA04AA280010 +9B62:200020007CFC440488047E04520452FC7E84528052807E800082AA82AA7E0000 +9B63:200021F87C08445088207E1053FE52227E24522052207E200020AA20AAA00040 +9B64:205020507850489290927D94569854907CB054D054907C900092AA92AA8E0080 +9B65:200020FC7C44444888487E50525C52447E44524452687EA80090AA98AB240042 +9B66:201020107C10441088547E52525252907E10521452047E080008AA10AA2000C0 +9B67:202020107C1044FE88007E00527852487E48524852487E4A004AAA8AAA860100 +9B68:202020207C2045FC88207EA852A852A87EA852A852F87E220022AA22AA1E0000 +9B69:204020407C40447E88AA7F2A522A524A7E4A529253127E220022AA42AA940008 +9B6A:201020107C10442888287E44528252487E48524852487E480048AA88AA880108 +9B6B:201020107C10441088FE7E92529252107E28522852287E280048AA4AAA8A0106 +9B6C:2008201C79E0490091007DFC554455447D44552855287D100110AA28AA440482 +9B6D:200020FC7C00440088007EFE525052507E50525052507E520052AA92AA8E0100 +9B6E:201020907C90449288927E9452F452987E90529052907E9200B2AAD2AA8E0000 +9B6F:08001FE020207FF8A1083FF821083FF8444482221FF010101FF010101FF01010 +9B70:204020207C2045FE88887E88528852887E88525052507E200020AA50AA880106 +9B71:200021FE7C20442088207E3C524452447E44528452FC7E080008AA08ABFE0000 +9B72:202020107C10447E88427E425242527E7E42524052407E400040AA80AA800100 +9B73:200023FE7820482090207DFC552455247D24552455247D340128AA20AA200020 +9B74:202020107C1045FE88407E405240527C7E44524452447E440044AA44AAA80110 +9B75:200820287C28442888447E445282537C7E24522452247E240044AA44AA940108 +9B76:201020107C1044FE88927E92529252AA7EAA52CA52827E820082AA82AA8A0084 +9B77:204820447844484091FE7C50545054507C50545054507C520052AA92AA8E0100 +9B78:201020907890489090907CFE548054807C8054F854887C880088AA88AA880108 +9B79:2008201C7CE0442088207E3C52E052207E20523E53E07E200022AA22AA22001E +9B7A:200020007DFE440488047EF4529452947E94529452F47E940004AA04AA140008 +9B7B:200021FC7924492491247DFC552455247D2455FC55247C200020AA20AA200020 +9B7C:20202020782049FC90207C20542055FE7C20542054407C480084ABFEAA820000 +9B7D:204420447C44444488FE7E44524452447E44527C52447E440044AA44AA7C0044 +9B7E:200021FE7C10441088207E20526852A47F22522252207E200020AA00ABFE0000 +9B7F:202020207850485090887D24561254107DFC540454087C880050AA20AA100010 +9B80:202020107C1044FE88827E84524052447E48525052607E420042AA42AA3E0000 +9B81:205020487848484091FE7C405440547C7CA454A454A87D280110AA28AA440082 +9B82:200020FE7C82449288927E92529252927E9252AA52A67EC60082AA82AAFE0082 +9B83:200021FC7C20442089247EA452A852207FFE522052207E200020AA20AA200020 +9B84:20502050785049FC90547C5455FC55507D5055FE54527C52005AAA94AA900110 +9B85:201020087C08440288227E24522452A87EAC52B253327E200062AAA2AB1E0000 +9B86:088028882EF028842E84F07C08000FE010403FF051101FF011101FF024884244 +9B87:20202020782049FC90207C20542057FE7C7054A854A87D240124AA22AA200020 +9B88:204020407C4044FC88847F0452F452947E94529452947EF40094AA04AA280010 +9B89:200021FC7C44444488447E44529452887F0052FC52847E840084AA84AAFC0084 +9B8A:201020107C2044FE88827E82528252827EFE528252827E820082AA82AAFE0082 +9B8B:201020107C10441088FE7E92529252927E9252FE52927E920092AA92AAFE0082 +9B8C:201020087C0844FE88107E10522052427EFC524852107E200044AAFEAA420000 +9B8D:20102010781049FE91127D14551055FC7D44554455287D280110AA28AA440482 +9B8E:201020107C104410881E7E10521052107EFE528252827E820082AA82AAFE0082 +9B8F:202020207920492091FC7D20562054207C2055FC54207C200020AA20ABFE0000 +9B90:202020207C20444088487E8453FE52827E0052FC52847E840084AA84AAFC0084 +9B91:204020407CFC448489047EF4529452947EF4528452947E880082AA82AA7E0000 +9B92:204420447844488490BE7D84568454A47C94549454847C840084AA84AA940088 +9B93:204020407C40447E88A07EA05320523C7E20522052207E3E0020AA20AA200020 +9B94:200020FE7C80448088807EFC528452847E84528452FC7E800080AA80AAFE0000 +9B95:201020107C10441088FE7E10521052107E7C524452447E440044AA44AA7C0044 +9B96:200020007DFE441088107E205220527C7E4452C453447E440044AA44AA7C0044 +9B97:20402040787C488491887E50542054507C88570654607C100008AAC0AA200010 +9B98:205020547852489290907D9655F856907C90549054907C90008AAA8AAA860082 +9B99:200020EE7C22442288AA7E66522252227E26526A52B27E220022AA22AAAA0044 +9B9A:201020107C1044FE88107E10527C52007E00527C52447E440044AA44AA7C0044 +9B9B:202020207820483C90207C2055FE54007C20542054A87CA40122AA22AAA00040 +9B9C:2008201C79E0490091007DFE550055007D7C554455447D440144AA7CAA440400 +9B9D:111009207FFC0200FFFE08203418CFE610403FF051101FF011101FF024884244 +9B9E:200020FE7C10441088207EFE52AA52AA7EAA52AA52AA7EAA00AAAAA2AA8A0084 +9B9F:2040202078204BFE92027C44544057FE7C88548855087CD00020AA50AA880304 +9BA0:2040204078FC490492087DFE5500557C7D44554455547D480142AA42AA3E0400 +9BA1:205020507850495290D47C58545054587CD4555254507C500092AA92AB12020E +9BA2:20202120792049FC91207E20542057FE7C7054A854A87D240124AA22AA200020 +9BA3:20002040799E491291127D1255D255127D125512555A7D940110AA10AA100010 +9BA4:7F8408241F24212456241804E4140FE810403FF051101FF011101FF024884244 +9BA5:204020407C78448889507E20525052887F0652F852887E880088AA88AAF80088 +9BA6:200020FE7C82448288BA7E82528252BA7EAA52AA52AA7EBA0082AA82AA8A0084 +9BA7:202020207BFE482091FC7C2455FC55207DFE5422542A7C540050AA88AB040202 +9BA8:20802084789848E090827C82547E54007CFC548454847CFC0084AA84AAFC0084 +9BA9:208420487C0044FC88487E48524852487FFE524852487E480048AA88AA880108 +9BAA:2020202079FE484090407CFC548455847EFC548454847CFC0084AA84AA940088 +9BAB:20402020782049FC90007C88550456027C88548854507C500020AA50AA880104 +9BAC:201020107CFE442888447E82527C52007EFE522052407E7C0004AA04AA280010 +9BAD:201020107C7C441088107E1052FE52007E105210527C7E100010AA10AAFE0000 +9BAE:208420447848480091FE7C20542054FC7C20542055FE7C200020AA20AA200020 +9BAF:202020207850485090887D0456FA54007C0054F854887C880088AA88AAF80088 +9BB0:200020007CFE448288827EBA52AA52AA7EAA52AA52BA7E820082AAFEAA820000 +9BB1:20402040784449F490487C5057FE54407C80558456987CE00082AA82AA7E0000 +9BB2:205020547852489290907DBE569054907C9054A854A87CA800A8AAA4AAA400C2 +9BB3:2040204479F4484890507DFE544054807DFE564054807CFC0004AA04AA280010 +9BB4:204820487848488890FE7D885688549C7C9C54AA54AA7CC80088AA88AA880088 +9BB5:208420447C48440088FC7E84528452847EFC524852487E480048AA8AAA8A0106 +9BB6:200020FC7C24442489FE7E24522452FC7E40524052FC7EC40144AA44AA7C0044 +9BB7:20882048785049FC90247C2455FC55207D2055FE54227C22006AAAA4AB200020 +9BB8:2080208078F8490892107DFC552455247D2455FC54507C500090AA92AB12020E +9BB9:201020927C52445488107EFE528252827EFE528252827EFE0082AA82AA8A0084 +9BBA:04407FFC01003FF80400FFFE14002FE0D0403FF051101FF011101FF024884244 +9BBB:201020107C20444488FE7E28524452A27E3C524452447EA80010AA28AA440082 +9BBC:200020FC7804487C90047CFC540055FE7D0254FC54447C440028AA10AA680186 +9BBD:201020107C28442888447EBA521052107EFE521052587E540092AB12AA500020 +9BBE:2004201E79E0482291127C94548054207DFE544454847DC80030AA28AAC40302 +9BBF:200023FE7920492891287DE8552855287D2855E855287D2A013AABEAAA260020 +9BC0:200C21F07820484490887DF0542054447DFE542254207CA80124AA22AAA00040 +9BC1:200021FE7820482091FC7D24552455FC7D24552455FC7D2000A0AA40AAB0030E +9BC2:200021FE7C28442888FE7EAA52AA52AA7EC6528252827EFE0082AA82AAFE0082 +9BC3:200021FE7820482090FC7C44544455FE7C00540054FC7C840084AA84AAFC0084 +9BC4:202820247824482091FE7C20552054B27CB4546854A87D240222AA20AAA00040 +9BC5:2004200E7BB8488890887D28552E57A87CA856A856A87D3E0100AA80AA7E0000 +9BC6:201420127CFE441088107EFE529252927EFE529252927EFE0092AA92AA920086 +9BC7:2020201079FE490292047CF8540054007DFE545054507C500092AA92AB0E0200 +9BC8:108011F8128820702B8E688068F8A9102BFC2D2429FC292429FC20002154222A +9BC9:200021FC7924492491FC7D24552455FC7C20542055FC7C200020AA20ABFE0000 +9BCA:20401248444420140860738028000FE010403FF051101FF011101FF024884244 +9BCB:2008210878884808912C7CAA54AA54487C48548A558A7C840084AA88AA900060 +9BCC:201020507C50447C88507E90521052FE7E005200527C7E440044AA44AA7C0044 +9BCD:2020201079FE482090487C8455FE54027CA854A854A87CA800A8AAAAAB2A0206 +9BCE:201020147812481091FC7D10551055D47D54555455547D48014AAA9AAA260442 +9BCF:2002203278C2484A904A7C4A55FA544A7CCA54EA555A7D420242AA42AA4A0044 +9BD0:201020107C7C441088107E1052FE52107E105250525C7E500070AA90AA8E0100 +9BD1:20C220347818486491827C2055FE54507C9055FE56927C92009AAA94AA100010 +9BD2:200020FC7C04446888107EFE529252927EFE529252927EFE0092AA92AA920086 +9BD3:2020204078F8488890F87C8854F8548A7C8C55F854187C280048AA88AB280010 +9BD4:200020927C92452489247E92529252007EFE529252927EFE0092AA92AAFE0082 +9BD5:2088208879FC488890887CF8548854887CF8548854887DFE0000AA50AA880104 +9BD6:2020202079FE482090FC7C2055FE54007CFC548454FC7C8400FCAA84AA940088 +9BD7:04407FFC01003FF80400FFFE14102FE8D0463FF051101FF011101FF024884244 +9BD8:201C21E07820482093FE7CA8552456427C4057FE54887D0800D0AA30AA480184 +9BD9:2020201079FE480090FC7C8454FC54007CFC540854107DFE0010AA10AA500020 +9BDA:201C20E0782049FE90707CA8552456227CF8541054207DFE0020AA20AAA00040 +9BDB:200020FE7C92449288BA7E9252FE52827EBA52AA52AA7EBA0082AA82AA8A0104 +9BDC:202020107CFE440088447E2853FE52207E2053FE52447EC40028AA18AA640182 +9BDD:200020FE7C82449288927EFE529252927EBA52AA52AA7EBA0082AA82AAFE0082 +9BDE:200020FC7804487C90047CFC540055FE7D22542054FC7CA400A4AAB4AAA80020 +9BDF:201020107CFE441088107EFE529252FE7E9252FE52107E380054AA92AA100010 +9BE0:201020107C1044FE88107E54525452547EBA521052387E540092AA10AA100010 +9BE1:2050205078504BDE90507C50545055DC7C50545054507C5003DEAA50AA500050 +9BE2:200020207CCE448288827EEE528252827EFE522852287E280048AA4AAA8A0106 +9BE3:200020FC7C84448488FC7E84528452FC7E4052FE532A7E4A0092AB22AA4A0084 +9BE4:200020FC7884488490FC7C84548454FC7C00549054927CF40098AA92AAD2008E +9BE5:2020202078FC482090207DFE544854847D22542054FC7C200020AA20ABFE0000 +9BE6:2088208878E8492C912A7EA8544854A07D1E560054FC7C840084AA84AAFC0084 +9BE7:207C20447C44447C88447E44527C52007EFE528252827EFE0082AA82AAFE0082 +9BE8:204020207DFE440088007EF8528852887E8852F852207EA80124AA22AAA00040 +9BE9:201020107C28444488827F7C520052FE7EAA52AA52FE7EAA00AAAAAAAA820086 +9BEA:2020202078FC482090207DFE544854847D22547854887D480050AA20AA50018C +9BEB:200023E0795C495491547DD4555455547DD4555455487D6803C8AA54AA540062 +9BEC:0640387C08947E241C442A9448080FE010403FF051101FF011101FF024884244 +9BED:200020FC7C08441088FE7E10521052507E2052FE52AA7EAA00AAAAAAABFE0000 +9BEE:202020107CFE448288007E7C520052007EFE521052107E540052AA92AA500020 +9BEF:20822082728293EA248AF88AAFFAA88AFBEAAAAAAAAAFAAA02A2AAE2A88A0084 +9BF0:201020107C28444488A27F1052FC52047E08522052107E0400A2AAA2AAAA0118 +9BF1:201020107C1E441088FE7E92529852F07E92528E52807EB800A8AAAAAB4A0286 +9BF2:2088204878084BF491147D22550055E87D24552455207D300128AA24AAA40440 +9BF3:2040202073FE9200221CFAF0AA90AA90FAFEAA90AA90FA9002AAAACAACA60812 +9BF4:200021FC7804483491C47C44544455F47D54555455F47C440054AA76AB960002 +9BF5:20402048788449FE90207DFE548855247E42558854107C2200C4AA18AA600180 +9BF6:200020FE7C92441088FE7E10527C52547E7C5254527C7E1000FEAA10AA100010 +9BF7:2000207C7C44447C88447E7C520053FE7E105210525E7E500050AAB0AA9E0100 +9BF8:2040205C7C44448488BE7E905390529E7EA8528852BE7E880088AA94AA9400A2 +9BF9:200021FC790449FC91047DFC542055207DFE562054207DFC0020AA20ABFE0000 +9BFA:2020202479F4482890287DFE542054407CFC558456847CFC0084AA84AAFC0084 +9BFB:2082208273E29082208AFBEAAAAAAAAAFBEAA88AA9CAFAAA04A2A882A88A0084 +9BFC:202820927CAA448288FE7E28524452A27E3C524452447EA80010AA28AA440082 +9BFD:200020EE7CAA44AA88AA7EEA52AA52AA7EEA528A52CA7EAE00D8AA88AA080008 +9BFE:2040207E784848BE90AA7DAA56BE54AA7CAA54BE54C87CA80090AA98AAA400C2 +9BFF:2020201079FE490291027DFE550055007DFE55AA56AA7CFE00AAAAAAAAAA0086 +9C00:201E23E07844492490887DFC544054407DFE548054FC7D440128AA10AA680186 +9C01:201020207CFE448288FE7E8252FE52107E1252D452587E540094AA92AB500020 +9C02:200221E27922492A91EA7D2A552A55EA7D2A552A55EA7C0200C2AAA2AB2A0204 +9C03:200020FC78A448A490FC7CA454A454FC7C0055FE54907C940088AAA8AAC40082 +9C04:200C200A700893FE2208FBF8AA4AAA4AFBEAAAACAAACFA4C02AAAB0AAA160422 +9C05:2000207C7C544454887C7E545254527C7E1052FE52927E9600BEAA82AA8A0084 +9C06:2020202079FE482090FC7C4055FE54887D0456FA54887C8800F8AA88AA8800F8 +9C07:200020FC7848483091FE7C52549455107E30542055FE7C7000A8AB24AA220020 +9C08:201420547C5444FE88547E54525C52407E7E521052FE7E100038AA54AA920010 +9C09:201020207C7C4444887C7E44527C52007EFE521052107E7C0010AA10AAFE0000 +9C0A:202020207BFE482091FC7D2455AC55747D2455FC54207C7000A8AB24AA220020 +9C0B:200021FE7900497E91427D7E5542557E7D1055FE55247D640118AB24AB4201FE +9C0C:204420247C2844FE88287E2852FE52AA7EAA52C652827EFE0082AA82AAFE0082 +9C0D:200820687988488890AA7CAC55E854A87C8855C856A87C880094AA94AA9400A2 +9C0E:20102010783C4B9490FE7C94553C55107FBC549054FE7E900190AAC0AABE0100 +9C0F:200020FE7C00447C88447E44527C52007EFE529252927EFE0092AA92AAFE0082 +9C10:200021DC7954495491DC7C0055FC54007DFE548054FC7C040004AA04AA280010 +9C11:200020FC788448FC90847CFC540055FE7C8054FE552A7E4A0092AB22AA540088 +9C12:204020407CFE448089FC7E8452FC52847EFC5240527C7EC40128AA10AA680186 +9C13:200021FC7924492491FC7D24552455FC7C20541054547D420142AB4AAA380000 +9C14:2008200C700A93FE2208FA08AAE8AA0AFA0AAAECAAACFAA802EAAA1AAA260442 +9C15:200021DC7944494491447DDC550055007DDC551455147DD40108AB08AB140122 +9C16:2020202079FE484090FE7D1056FE54007CFE548254FE7C8200FEAA82AA8A0084 +9C17:2080209E78924BF290927C9E549255D27D52555E55527D5201D2AA22AA2A0044 +9C18:2040202079FE490292047DFC544054887DFC542454207DFC0020AA20ABFE0000 +9C19:2084208479FE488490A47C2055FE54407C8054FC55847E840084AA84AAFC0084 +9C1A:2020201079FE490292047CFC540054FC7C8454FC54847CFC0084AA00AAFE0000 +9C1B:200020F87888488890F87C88548854F87C0055FC55547D540154AB54ABFE0000 +9C1C:20882050780049FE90507DFC545457FE7C5455FC54507CD80154AA52AA500050 +9C1D:202020107CFE4400887C7E44527C52007EFE528252BA7EAA00BAAA82AA8A0084 +9C1E:202020407CFC448488847EFC528052FE7E8052FE52027EAA00AAAA02AA140008 +9C1F:202020107CFE440088447E2852FE52A27E1052FE52207E3C0024AA44AA540088 +9C20:200021FC78A4488890507C2054D857267C2055FC55247D2401FCAA22ABFE0002 +9C21:202020DE7C8A44CA88AA7ED252A652007EFE529252927EFE0092AA92AAFE0082 +9C22:200020FE789048FC90907CFC549054907CFE540254AA7CAA00AAAA82AA140008 +9C23:2008200879C8497E91487D48557E55C47D44557E55447D6401D4AA04AA140008 +9C24:2100227E7388928822BEFAAAABAAAA2AFA2AABAAAAAAFAAE0288AB88AA880008 +9C25:200020FE7CAA44AA88AA7EFE521052547E52529252107E540052AA92AA100010 +9C26:2084204478484BFE90847C845508554A7E52579C54847D080108AA52ABDE0042 +9C27:012478A849FC48404BFE79084A844CFA49107BFC4D2449FC492449FC48009954 +9C28:200021F8790849F891087DF8540054007DDC544455547CCC0154AA44AA5400C8 +9C29:2004201E79E0480291227C9454FE55107C1055FE54107C920092AA92AAFE0002 +9C2A:201020107C7E441088107EFE522052427EFE520052FE7EAA00AAAAAAABFE0000 +9C2B:2040202079FE490290507C88552454507C88550456FA7C880088AA88AAF80088 +9C2C:2020203C782049FE91227D3855E4551C7D20551055FE7D440128AA10AA2804C6 +9C2D:2020202478F4482891FE7C20547854C27D3E560054FC7C8400FCAA84AAFC0084 +9C2E:200020F878A848A890D87C8854F854007C0055FC55547D540154AB54ABFE0000 +9C2F:200021DC7844484491DC7D10551055DC7C44555454CC7CCC0154AA44AA5400C8 +9C30:220821087908483E93AA7CAA54BE552A7DAA576A553E7D2A0108AB08AB080108 +9C31:201020107AFE4910917C7C54547C57547D7C551055FE7D100110AA90AA7E0000 +9C32:08207E20087EFEC410281E102A284FE690403FF051101FF011101FF024884244 +9C33:2148214873E8914821DEF88AABEAAAAAFAAAABEAA88AFBEA0092A892A8AA00C4 +9C34:11101550255047D0903E17A422546394A49427D42D5427C8254827D420142AA2 +9C35:20203F20403EBE482AA8FF284A107FE810463FF051101FF011101FF024884244 +9C36:2080208879EE492A92AA7D445484557A7E00540055FE7C2000A8AB24AAA20040 +9C37:2110211E712292542208FE94AAE2AA88FA88AABEAA88FAAC022AAA4AAA280210 +9C38:200023FE7200927C2244FA44AA7CAA00FAEEAAAAAAAAFAAA02EEAA00ABFE0000 +9C39:200021EE794A49EA912A7DE45544554A7DF0540054107CFE0010AA10ABFE0000 +9C3A:201020207C4444FE88447EAA52EE52107E28525452AA7E500024AA48AA100060 +9C3B:207C20447C7C4444887C7E0052FE52AA7EFE520052FC7E440028AA10AA680186 +9C3C:200021DE7842495290CA7D52544254207CFC548454847CFC0084AA84AAFC0084 +9C3D:2050205079FE485091FC7D5455FC55547DFC540054F87C8800F8AA88AAF80088 +9C3E:200023FE785049FC91547D5455FC54007DFC540057FE7C2000A8AB24AAA20040 +9C3F:201021FE781048FC90107DFE540054FC7C8454FC54847CFC0084AAFCAA480084 +9C40:7DFC44207D2045FE7C50485254926FEE10403FF051101FF011101FF024884244 +9C41:2000213E78884890902A7C4A571C552C7D4A551A552A7D480128AA90AA7E0000 +9C42:20482148795E496A91547DC8545054647FC4557E55447D640154AB44AA540448 +9C43:2084204879FE481090FC7C2055FE54407C7C54A455247CFC0044AA44ABFE0000 +9C44:202023FE782049FC91247DFC552455FC7C2255FE54087DFE0108AA88AA280010 +9C45:201021FE7910497C91147DFE5514557C7D10557C55547D7C0154AA7CAA54044C +9C46:201020FE7C44442888FE7E00527C52447E7C5244527C7E1000FEAA10AA100010 +9C47:2020201079FE4910917C7D1455FE55147D7C551055927D540138AA54AA920430 +9C48:200021FC78204BFE92227DAC542055AC7C0055FC54047DFC0004AA04ABFC0004 +9C49:49202A3E7F4849485DA86B1049284FE610403FF051101FF011101FF024884244 +9C4A:20FC2028781049FE90527C94555054207CFE54AA54C67CBA00AAAABAAA820086 +9C4B:2020203C782049FE91227D3855E4551C7D00552855AA7D6C0128AA28AAFE0000 +9C4C:208020F0791049FC93247D2455FC54407CA4555854987D340054AA92AB500020 +9C4D:201221D478484A8A91047E0255DC54547C6255C0551E7DC20054AA48AB5400A2 +9C4E:201821E078404BFE90887D74565254707C0055FC55047D740154AB74AB04010C +9C4F:200020FE7C2844FE88AA7EFE5200527C7E44527C52447E7C0010AAFEAA100010 +9C50:202021FC702493FE2024F9FCA820AAAAFBAEAA22ABFEFA2203AEAAAAAAAA0422 +9C51:2048204878FC484890487DFE542054FC7CA454FC54A47CFC0000AA48AA840102 +9C52:2088205079FE485091FC7D54559C55047DFC550455FC7C0801FEAA88AA480018 +9C53:200021DC7954495491DC7C0055FC55247DFC552455FC7C2003FEAA20AA200020 +9C54:2044202879FE481090FE7C1055FE54927C5455FE54007CFE0082AA82AAFE0082 +9C55:201C21E078A4486891FE7CA8552456027CFC54A454A47CFC00A4AAA4AAFC0084 +9C56:200023FE7200931422A4FBF6AA4AAA42FB50AB54ABF4FA44024AAA8AAC920920 +9C57:201020927854481091FE7C54549255107C8454EE55247CB4005EAA44AA840104 +9C58:200021FE780249FE90027DFE540055DE7C9257DE54047DFE0084AA44AA540008 +9C59:2020202078FC482091FE7C8855DC54887CC855BC54007DFE0050AA50AA94010C +9C5A:201020107CFE4410887C7E00527C52447E7C522852FE7E00007CAA44AA7C0044 +9C5B:204420247C2844FE88927ED652BA52927EFE5200527C7E44007CAA44AA7C0044 +9C5C:2280224E74EA95AA29AAFEEAAAACACAAFDEAAF8AAA8AFAAA04ACACE8A8A80008 +9C5D:202021FC7820488893FE7C8855FC55047DFC550455FC7D0401FCAA88AB040202 +9C5E:200021FC7954495491FC7C0057FE54007DFC550455FC7C620094AB88AAA400C2 +9C5F:0A803138228839382288FFFE88020FE010403FF051101FF011101FF024884244 +9C60:202020507888497492027DFC552455AC7D2455FC54007CF80088AAF8AA8800F8 +9C61:2008200C738A92FE2288FBA8AAA8AAAAFBFAAAAAAAACFBAC002AAAAAAC560022 +9C62:20F82088788848F890007DDC555455547DDC542057FE7C7000A8AB24AA220020 +9C63:201021FE780049FE91027D7A554A55FE7C0054FC54847CFC0084AAFCAA0001FE +9C64:2014201273FE921022F0FA14AAF4AAB8FAEAAA16AC42F82402A2AA8AAC780000 +9C65:2020213879204BFE90107C1455FE55107DF0555455547DD40168AA4AAA960122 +9C66:200021FC7954495491DC7C5055DC55547D5455DC55547D5401DCAB50AA52003E +9C67:205021FC795449FC91547DFC540055FC7C0055FC55047DFC0088AA50ABFE0000 +9C68:212420A87BFE4A8A90F87D0C55F055027CFE540055FC7D0401FCAB04ABFC0104 +9C69:200021FC78204BFE92227DAC542055AC7C0055FC55247D2401FCAB24AB2401FC +9C6A:21FC210479FC490491FC7C2255FC54287FFE544055FC7E8400FCAA84AAFC0084 +9C6B:200E21F078A2485491FE7D22541455527D4A563854407C7C0084AB48AA3001CE +9C6C:200021FC78204BFE92227DAC542055AC7C0057FE54207DFC0154AB54AB54010C +9C6D:2040202073FE90882052FFACAAAAAAA8FDACA800A904F9FC0104A9FCA9040204 +9C6E:20A0212C7934492491AC7D34555455DC7D54555457FE7C000048AA44AA820102 +9C6F:204421FE7854484890FE7D9054FE54907CFE549054FE7C8001FEAA44AA3801C6 +9C70:200023FE7A524A5293FE7C2455FC54287FFE542054FC7D8402FCAA84AAFC0084 +9C71:200021FE792849FE91287D7C5554557C7D54557C55107DFE0192AABAAA8A0484 +9C72:212422487124900023FCFA94AA64AA94FBFCAA48AB68FA48036AAA4AAA460362 +9C73:21242174725892DA23FEF954AADAABFEF8A2A820ABFEF87000A8A924AA220020 +9C74:204421FE7C44440088FE7EAA52AA52FE7E1452FE52907ED200ACAAAAAA960122 +9C75:2110211071DE92A82454F812ABFEAA10FAF4AA14AAF4FAA802AAAAFAAA160422 +9C76:208823FE782049FC90407FFE548855247EFA548854F87C8800FAAA94AAA800C4 +9C77:200023FE702093AE22AAFAAAABAEA820FBFEA820ABAEFAAA02AAABAEA82003FE +9C78:2020203E782049FE91227DF85522557E7D54557C55547D7C0100AAFEAAAA05FE +9C79:208823FE7888480091DC7D5455DC54887DFE569054FC7C9000FCAA90AAFE0080 +9C7A:20EE20007CEE44AA88EE7EAA521052FE7EA852FE52AA7EFE00AAAABCAAAA0136 +9C7B:0FE010403FF051101FF011101FF024A85E3424507EFC2A543E7C2A54BE7C95AA +9C7C:040004000FE0102020407FF8A10821083FF8210821083FF800000000FFFE0000 +9C7D:200020007DFC444488447C44544454447C44544454447C8400841D04E1284210 +9C7E:100010001EF8220824087E08AA082AF83E882A802A803E8000820E82707E2000 +9C7F:204020507C48444888407DFE545054507C50545054907C9000921D12E10E4200 +9C80:202020207C2045FE88207D24552455247D2455FC54247C2000221C22E01E4000 +9C81:08001FE020207FF8A1083FF821083FF80000FFFE00001FF010101FF010101FF0 +9C82:102010101E1023FE24407E40AA402A7C3E442A442A443E4400840E8471282210 +9C83:200020007DFC452489247D24552455247DFC550055007D0001021D02E0FE4000 +9C84:200020007DFE440888087DE8552855287D28552855E87D2800081C08E0284010 +9C85:205020487C48444089FE7C405440547C7CA454A454A87D2801101E28E0444082 +9C86:200020007DFC442088207D2454A454A87C2057FE54207C2000201C20E0204020 +9C87:101010101E102210241E7E10AA102A103EFC2A842A843E8400840E8470FC2084 +9C88:101010101E1E221024107EFEAA822A823E822AFE2A823E8000800F0071002200 +9C89:202020207C20442089FC7D24552455247D2455FC55247D2401241D24E1FC4104 +9C8A:104010401E40227E24A07EA0AB202A3E3E202A202A203E3E00200E2070202020 +9C8B:204420447C44448488BE7D84568454A47C94549454847C8400841C84E0944088 +9C8C:101010101E2022FC24847E84AA842A843EFC2A842A843E8400840E8470FC2084 +9C8D:204020407CFC448489047EF4549454947CF4548454947C8800821C82E07E4000 +9C8E:2208111000207FFC440484080FC010403FF051101FF011101FF00000FFFE0000 +9C8F:201020107C1045FE89127D14551055FC7D44554455287D2801101E28E2444482 +9C90:102010201E20224024487E84ABFE2A823E002AFC2A843E8400840E8470FC2084 +9C91:202020207DFC442088207C2057FE54007C20542055FC7C2000201C20E3FE4000 +9C92:202020207C2047FE88207C2055FC54007C0055FC55047D0401041D04E1FC4104 +9C93:204020447DF4444888507DFE544054807DFE564054807CFC00041C04E0284010 +9C94:202020207DFE444088407CFC548455847EFC548454847CFC00841C84E0944088 +9C95:200021FE7C20442088407DFC555455547D54555455547D5401541D54E104410C +9C96:200021FC7D04450489747D04550455747D54555455547D7401041D04E1144108 +9C97:400243E27A228A2A12AAFAAAAAAAAAAAFAAAAAAAAAAAF88201421922E20A4404 +9C98:2008201C7DE0450089007DFE550055007D7C554455447D4401441E7CE2444400 +9C99:202020207C50448889047E0254F854007C0057FE54207C4000881D04E3FE4102 +9C9A:204020207DFE448888507C20545054887D06548854887C8800881D08E1084208 +9C9B:204020207C2045FE88007C88550456027C88548854507C5000201C50E0884306 +9C9C:108210441E2822FE24107E10AA102A7C3E102A102A103EFE00100E1070102010 +9C9D:04407FFC01003FF80400FFFE14002FC0D0403FF051101FF011101FF00000FFFE +9C9E:111009207FFC0200FFFE08203418CFC610403FF051101FF011101FF00000FFFE +9C9F:200021FC7C04440488FC7C04540455FC7C08540855FE7C8800481C48E0084018 +9CA0:200021FE7C20442089FC7D24552455FC7D24552455FC7D2000A01C40E0B0430E +9CA1:400043FE7800880013DEFA52AA52AA52FB5AAAD6AA52FA5202521A52E25242D6 +9CA2:401042107910897E1020F828AF48A97EF908A908A9FEF90801081A88E47E4000 +9CA3:2040217E7D52455289547D48555454627C10541054FE7C1000101C10E1FE4000 +9CA4:200021FC7D24452489FC7D24552455FC7C20542055FC7C2000201C20E3FE4000 +9CA5:400440047BC48A44127EFA44AA44ABE4FA54AA54AA44FA4403C41A44E0144008 +9CA6:204020407CF8448889507C2054D857267C2055FC54207D2801241E24E0A04040 +9CA7:200C21F07C20444488887DF0542054447DFE542254207CA801241E22E0A04040 +9CA8:20401248444420140860738028000FC010403FF051101FF011101FF00000FFFE +9CA9:202020107DFE45028A047CF8540054007DFE545054507C5000921C92E10E4200 +9CAA:100010FC1E24222425FE7E24AA242AFC3E402A402AFC3EC401440E44707C2044 +9CAB:400043DE7A528A521252FBD2AA52AA52FA52ABD2AA1AFA9402501AB0E3104010 +9CAC:200021F87C0844D088207DFC552455247DFC552455247DFC01241D24E124410C +9CAD:202020207DFE442088FC7C2055FE54007CFC548454FC7C8400FC1C84E0944088 +9CAE:202020207CFC442088207DFE544854847D22547854887D4800501C20E050418C +9CAF:208820887DFC448888887CF8548854887CF8548854887DFE00001C88E1044202 +9CB0:200023E07D5C455489547DD4555455547DD4555455487D6803C81C54E0544062 +9CB1:205020507C5047DE88507C50545055DC7C50545054507C5003DE1C50E0504050 +9CB2:200021FC7D04450489FC7D04550455FC7C00551255D47D1801101D52E192410E +9CB3:20FC20847C8444FC88847C8454FC54007DFE550255027DFE01021D02E1FE4102 +9CB4:200021FC7D04452489247DFC552455247D74555455547D7401041D04E1FC4104 +9CB5:200020407D9C450489047DDC550455047DFC545054507C5000901C92E112420E +9CB6:40204020785088881144FA22A9F8A808F850A820A8A4FA82028A1A8AE4784000 +9CB7:200021FC7D24452489747D2455FC55047D74555455547D7401041E04E2144408 +9CB8:204020207DFE440088007CF8548854887C8854F854207CA801241E22E0A04040 +9CB9:204020487C8445FE88207FFE548855247E42558854107C6201841C18E0604380 +9CBA:200021FC7C04443489C47C44544455F47D54555455F47C4400541C76E1964002 +9CBB:209220927D24464889247C92549254007DFE552255227DFE01221D22E1FE4102 +9CBC:202021FC7C2044888BFE7C88540055FC7D04552455247D2401241C50E0884304 +9CBD:4048414879488BFE1148F948A978A900F9FEA820ABFEF87000A81924E6224020 +9CBE:100010FE1E00227C24447E44AA7C2A003EFE2A922A923EFE00920E9270FE2082 +9CBF:202021247CA8442089FE7D02540054F87C00540055FE7C2000401C88E1FC4084 +9CC0:100010FC1E84228424FC7E84AA842AFC3E002BFE2A203EA000BC0EA07160223E +9CC1:200020F87C88448888F87C88548854F87C0055FC55547D5401541D54E3FE4000 +9CC2:200021FC7D24452489FC7D24552455FC7C0057FE55207D2201141D48E1844102 +9CC3:200021FC7D24452489FC7D24552455FC7C20541054547D4201421D4AE2384000 +9CC4:200021DC7D54455489DC7C0055FC54007DFE548054FC7C0400041C04E0284010 +9CC5:400840C87B088908112AF92AABACA948F908AB88AD54F91401141924E1244142 +9CC6:204020407CFE448089FC7E8454FC54847CFC5440547C7CC401281C10E0684186 +9CC7:202020407DFC450489FC7D0455FC54007FFE542054207DFC00201C20E3FE4000 +9CC8:204020807DFC450489FC7D0455FC54207C3257B454A87D2801241E24E4A24040 +9CC9:209020907C9E46A289D47C88549454A47DFE568454A47C9400941C84E0944088 +9CCA:202020107DFE450289027DFE550055007DFE55AA56AA7CFE00AA1CAAE0AA4086 +9CCB:200021FC7CA4448888507C2054D857267C2055FC55247D2401FC1C22E3FE4002 +9CCC:08207E20087EFEC410281E1022284FC690403FF051101FF011101FF00000FFFE +9CCD:204020447DF844508BFE7C4054F855827E7E540055FC7D0401FC1D04E1FC4104 +9CCE:200020FC7C8444FC88847CFC540054007DDC544455547CCC01541C44E1544088 +9CCF:200021FC7D54455489547DFC542054A87CA4552454207CA800A41D24E0204020 +9CD0:2004201E7DE0440289227C9454FE55107C1055FE54107C9200921C92E0FE4002 +9CD1:202020107DFE448488487DFE550256247C1055FE54407C7C00441C84E0944108 +9CD2:208820507C0045FE88507DFC545457FE7C5455FC54507CD801541E52E0504050 +9CD3:414841487BE8894811DEF88AABEAAAAAFAAAABEAA88AFBEA00921892E0AA40C4 +9CD4:200023FE7C5045FC89547D5455FC54007DFC540057FE7C2000A81D24E2A24040 +9CD5:200021FC7C2047FE8A227DAC542055AC7C0055FC54047DFC00041C04E1FC4004 +9CD6:49202A3E7F4849485DA86B1049284FC610403FF051101FF011101FF00000FFFE +9CD7:400041F8790889F81108F9F8A800ABFCFA94ABFCA800F9F800901860E1984606 +9CD8:20203F20407EBEA82A28FF104A287FC610403FF051101FF011101FF00000FFFE +9CD9:201021FE7D10457C89147DFE5514557C7D10557C55547D7C01541E7CE254444C +9CDA:400443E47A248A2413EEFA04AAE4AA04FA0CABF4AA44FA6405541D44EA5440C8 +9CDB:200021DE7C42455288CA7D52544254207CFC548454847CFC00841C84E0FC4084 +9CDC:400043FE7A008B1412A4FBF6AA4AAA42FB50AB54ABF4FA44024A1A8AE4924920 +9CDD:408840507BFE882011FCF820ABFEA924F8A8ABFEA800F9FC01041904E1FC4104 +9CDE:4020412478A88BFE10A8F924AA22A904F904A9DEAA44FD54009E1904E2044404 +9CDF:208820507DFE445089FC7D54559C55047DFC550455FC7C0801FE1C88E0484018 +9CE0:208823FE7CA8449089FE7F2055FC55207DFC552055FE7D0003FC1C88E070438E +9CE1:401440127BFE8A1012F0FA14AAF4AAB8FAEAAA16AC42F82402A21A8AE4784000 +9CE2:205021FC7D5445FC89547DFC540055FC7C0055FC55047DFC00881C50E3FE4000 +9CE3:201021FE7C0045FE89027D7A554A55FE7C0054FC54847CFC00841CFCE00041FE +9CE4:210821087DEE469488427C1055FE55027CF8548854F87C8000FC1C84E0FC4084 +9CE5:020004001FF010101FF010101FF010001FFC10001FFC09242494249440280010 +9CE6:100020007F3E41027F0441047F0840087F9040107FA000A2AAA2AAA2811E0600 +9CE7:08003FE020203FE020203FE020003FF820003FF8524889281FD810422042C03E +9CE8:101020107F1041107F7E41127F1240127F9240127F920092AAA2AAA2814A0684 +9CE9:2040208021FC2104F9FC290429FC290029FE29002BFE2C024AAA42AA8202000C +9CEA:2040208021FC210421FC290425FC250025FE210021FE200222AA22AA2202200C +9CEB:00003FFE2100220027F0241027F0241027F0240027FC240027FC40044AA48AAC +9CEC:04001FF010101FF010101FF010001FFC10001FFC00040F94088808821082607E +9CED:00400080F9FC290429FC290429FC290029FE290029FE28024AAA4AAA9A02000C +9CEE:0040008001FCFD0405FC050449FC290011FE110029FE240246AA82AA0202000C +9CEF:00007FF844085FC850485FC850485FC850085FE850085FEA402AAAAAAAA60042 +9CF0:0040008081FC410421FC210411FC110029FE290025FE240242AA42AA8202000C +9CF1:00407C8011FC110411FC110411FCFF0011FE110011FE100212AA12AA1202100C +9CF2:004000803DFC250425FC25043DFC250021FE210021FE200222AA42AA4202800C +9CF3:3FF820082FE822082FE828282FE828282FE828082FF828082FFA401A55568032 +9CF4:0040008079FC490449FC490449FC490049FE490049FE78024AAA02AA0202000C +9CF5:0040F88049FC490449FC490449FCF90049FE490049FE48024AAA4AAA4602420C +9CF6:04200210013EFFC002221FFA10161FF010101FF010001FFC10001FFC2A44452C +9CF7:1040108011FCFF0411FC1104FDFC050005FE490029FE10022AAA46AA8202000C +9CF8:01007FFC40047FFC42005FF050105FF050105FF050005FFC50005FFCAA44452C +9CF9:1040108029FC290445FCA50411FC110001FEFD0005FE08020AAA12AA1202000C +9CFA:1040108011FC7D0411FC110411FCFD0011FE110011FE280226AA42AA8202000C +9CFB:0020284024FC248442FC428480FC7C8024FE248024FE240244AA44AA9502080C +9CFC:0040208011FC0104FDFC090409FC490029FE110011FE28022AAA4AAA8202000C +9CFD:00407C8029FC290429FC290429FCFF0029FE290029FE28022AAA2AAA4A02880C +9CFE:0040FE8011FC11047DFC550455FC550055FE550055FE5C0212AA12AA1202100C +9CFF:004000807DFC110411FC11047DFC110011FE110011FE1C02E2AA42AA0202000C +9D00:0040FC8011FC110421FC310469FC6500A5FE210021FE200222AA22AA2202200C +9D01:00400C8071FC110411FC1104FDFC110011FE110029FE280242AA42AA8202000C +9D02:2040208021FCF90429FC290429FC2900FDFE210021FE200232AA4AAA4A02800C +9D03:101020107F1041107F7C41147F1440147F94407E7F900090AAA8AAA881440682 +9D04:00200040FEFCA884A8FCA884A8FCA880AAFEAA80A6FEC00282AAFAAA0202000C +9D05:0040788049FC490469FC590449FCFD0049FE490049FE48024AAA4AAA4A02980C +9D06:1040108011FC7D0455FC910411FC290029FE290029FE2C024AAA42AA8202000C +9D07:4040488051FC610445FC45043DFC110011FE1100FDFE100212AA12AA1202100C +9D08:00007FFE444045FC490449FC590469FC490049FE490049FE48024AAA8AAA0804 +9D09:0040FC8009FC490449FC490489FCFF0019FE190029FE28024AAA8AAA2A02100C +9D0A:00400080FDFC110411FC110451FC5D0051FE510051FE50025EAAF2AA0202000C +9D0B:2020104000FCFE8420FC20843CFC248024FE248024FE240244AA54AA8902000C +9D0C:00003FF801007FFC04401830E20E1FF010101FF010101FFC10001FFC0004492C +9D0D:020001007FFC082007C01830E20E1FF010101FF010101FFC10001FFC0004492C +9D0E:0040FC8081FC8904C9FCA90491FC9100A9FEA900C9FE800282AAFEAA0202000C +9D0F:105020547C5244927C90459E7DF042907E9040907E900290AA8AAA8A82860C82 +9D10:10007E7812482678C2001FF010101FF010101FF010001FFC10001FFC2A44452C +9D11:08007E7812480C3032CEDFF010101FF010101FF010001FFC10001FFC2A44452C +9D12:1040108029FC250443FC910409FC0100FDFE050009FE500222AA12AA1202000C +9D13:2020104014FC048424FC2484AAFCAA80A8FE308032FE220222AA5EAA8102000C +9D14:08401C80E1FC010421FC1104FDFC050009FE090011FE200242AAA2AA1E02000C +9D15:101020087F08417E7F4241427F2040247FA840307FA000A2AAA2AAA2811E0600 +9D16:00207E4042FC42847EFC488448FC48807EFE488048FE48024AAA4AAA6702420C +9D17:2040108011FCFD0401FC090489FC890049FE490051FE50021EAAE2AA4202000C +9D18:1040108021FC4904FDFC050429FC290029FEFD0029FE28022AAA4AAA4A02880C +9D19:2040208021FC7D0451FC910411FC1100FDFE110011FE280226AA42AA8202000C +9D1A:100020007DFE44047C0444F47C9440947E9440947EF40294AA04AA0482140C08 +9D1B:20F83E88449AA882127E3FF0D0101FF010101FF010001FFC10001FFC2A44452C +9D1C:08442F7828422F3EF2001FF010101FF010101FF010001FFC10001FFC2A44452C +9D1D:2020204020FC7E8442FC82847AFC4A804AFE4A807AFE4A0202AA02AA1502080C +9D1E:0040788049FC490449FC790401FCFD0021FE410079FE08020AAA0AAA5202200C +9D1F:04400E80F1FC910491FC9104FDFC910091FE910091FE88028AAAC6AA9202080C +9D20:004000807DFC450445FC7D0445FC45007DFE010001FE1C02E2AA42AA0202000C +9D21:0040788049FC490449FC790449FC490079FE490049FE48024EAAF2AA0202000C +9D22:04082410243C44245FBC94A4E4BC24A044BE44A094BEF48218AA08AA1282210C +9D23:1020104010FC1084FEFC108410FC10807CFE448044FE440244AA7CAA4502000C +9D24:102020207F3C41447F6841A87F1040287FC440827FA00090AA88AAA081100608 +9D25:102020107C1044FE7C8245047C0040287E2840287E280228AA44AA4482440C82 +9D26:01001FF01110FFFE02801C70E20E1FF010101FF010101FFC10001FFC0004492C +9D27:2020104010FCFE8482FC848400FC788048FE488048FE4A024EAA4AAA8202000C +9D28:00407C8055FC550455FC7D0455FC550055FE7D0055FE100212AA12AA1202100C +9D29:1040108051FC51047DFC910411FC1100FDFE110011FE280226AA42AA8202000C +9D2A:2020104010FCFE8482FC828428FC288024FE248044FE400242AA82AA0202000C +9D2B:00400080F9FCA904A9FCA904A9FCF900A9FEA900A9FEA802FAAA8AAA0202000C +9D2C:2208111000207FFE42029FF410101FF010101FF010001FFC10001FFC2A44452C +9D2D:1040208079FC490449FC490479FC410041FE790049FE48024AAA7AAA4A02000C +9D2E:10201040FEFC288444FC82847CFC0080FEFE208040FE7C0204AA04AA2902100C +9D2F:0020FE4010FC108420FCFE84AAFCAA80AAFEAA80AAFEAA02AAAAA2AA8B02840C +9D30:08201C4070FC108410FCFC8410FC10807CFE448044FE440244AA7CAA4502000C +9D31:28402880FDFC290429FC010405FC450029FE290011FE10022AAA2AAA4A02800C +9D32:80208840B0FCC08484FC84847CFC0080F8FE888088FEF8028AAA8AAAFA02880C +9D33:102008407EFC428494FC108410FCFE8024FE248048FE280212AA2AAA4602800C +9D34:10101020277C4044907C10442FFC6240A27E2240227E220222AA22AA2B02240C +9D35:2820284028FC2884AAFC6C8428FC28806CFEAA8028FE28022AAA4CAA4902800C +9D36:1020104010FCFE8410FC10847CFC008000FE7C8044FE440244AA7CAA4502000C +9D37:7F0408441E44224454440844320CDFF010101FF010101FFC10001FFC0004492C +9D38:1040508051FC7D0491FC110411FCFF0031FE390055FE540292AA12AA1202100C +9D39:4440248029FCFF0411FC11047DFC110011FEFF0011FE100222AA22AA4202800C +9D3A:10201040FEFC10847CFC14847CFC50807EFE128012FE160228AA24AA4502800C +9D3B:0020804040FC1F8484FC448444FC048024FE4480C4FE47025CAA48AA4102000C +9D3C:101020107F3C41247F4441287F1040287FC640007FBC00A4AAA4AAA4813C0624 +9D3D:1000FE7C22441C7CE2001FF010101FF010101FF010001FFC10001FFC2A44452C +9D3E:1040108021FC4904FDFC450411FC51007DFE910011FEFC0212AA12AA1202100C +9D3F:2040208051FC490485FC0104F9FC010001FEF90089FE88028AAAFAAA8A02000C +9D40:081813E0304057FC904013F802001FF010101FF010101FFC10001FFC0004492C +9D41:2040108001FCFD0401FC290445FC830009FE490029FE10022AAA4AAA8202000C +9D42:12081210123C22242FBC6224A63C27202ABE2AA0323E2202222A222A2202220C +9D43:1040208079FC490469FC590449FCF90049FE490069FE58024AAA4AAA4A02980C +9D44:0040FE8021FC290445FCFD0415FC110011FE7D0011FE10021EAAE2AA4202000C +9D45:2040208039FC490449FCA90411FC290045FE850079FE48024AAA4AAA7A02480C +9D46:11001200279C44808780148027BE6408A7C8240827C820482548254828682190 +9D47:202020403EFC288448FC08843CFC288028FE2880FEFE08020AAA0AAA0A02080C +9D48:0040FC8049FC490479FC490449FC790049FE49004DFE7802CAAA0AAA0A02080C +9D49:02000100FFFE04401450244842041FF010101FF010101FFC10001FFC0004492C +9D4A:10201040FEFC108410FC548454FC5480BAFE118010FE280228AA44AA8502000C +9D4B:00107E20027C02447E7C4044417C41403F7E1040087E2902A2AAA2AA1F02000C +9D4C:101020107C2844287C4444BA7C1040107EFE40107E580254AA92AB1282500C20 +9D4D:20201040FEFC828400FC7C8400FC0080FEFE288028FE280228AA4AAA4D02800C +9D4E:04201E40E0FC228492FC548448FC1080FCFE248044FE280210AA28AA4502800C +9D4F:1020144010FCFE8410FC7C8454FC54807CFE548054FE7C0254AA54AA55024C0C +9D50:002000407CFC108410FC548454FC5480BAFE108010FE1C02E2AA42AA0202000C +9D51:0040F88089FC8904F9FC0104F9FC890089FEF90089FE8802FAAA8AAA8A02980C +9D52:0040488045FC950411FC290445FC810079FE490049FE48024AAA7AAA4A02000C +9D53:10201040FEFC108410FCFE8482FC048078FE088010FE1E02F0AA10AA5102200C +9D54:101020107C2044447CFE44287C4440A27E3C40447E4402A8AA10AA2882440C82 +9D55:1020104020FC4484FEFC288444FCA2803CFE448044FEA80212AA2AAA4602800C +9D56:004000807DFC450445FC7D0445FC45007DFE410051FE480256AA62AA4202000C +9D57:42102420187C2444527C1044FF7C2040287E7E40AA7E2A022AAA2EAA0902080C +9D58:00107E20127C1244FF7C1244127C7E40207E20407E7E6202A2AA22AA3F02220C +9D59:0040788049FC490479FC490449FC790049FE490079FE000252AA4AAA8A02000C +9D5A:0C20704010FCFE8410FC388454FC928000FE388028FE28022AAA4CAA4902800C +9D5B:0020FE4054FC5484A8FC548454FC0080FEFE108010FE10021EAAF2AA4202000C +9D5C:4420244028FCFC8414FC1484FCFC908090FEFE8032FE320252AA96AA1102100C +9D5D:04103620E57C2544247CFFC4247C2540257E3640E67E24022AAA32AAA1C2408C +9D5E:02403C500848FFFE08480E50782408541A8C1FF010101FF010101FFC5244892C +9D5F:280011FC682014F82420D5FC0A001FF010101FF010101FFC10001FFC0004492C +9D60:1020504050FC7C8490FC1084FEFC008000FE7C8044FE440244AA7CAA4502000C +9D61:04100620757C0544047CFF44047C1440147E5C40547E5402552A5D2AE342410C +9D62:1040208079FC490479FC490479FC490049FEF90019FE28024AAA8AAA2A02100C +9D63:10201040FEFC108410FC7C8454FC548054FE7C8010FE380256AA92AA1202100C +9D64:202020403CFC448448FCBE842AFC2A803EFE2A802AFE3E022AAA2AAA2B02440C +9D65:49042A247F240824FFA4080C02001FF010101FF010101FFC10001FFC0004492C +9D66:100020FC7C0444047C7C44047C0440FE7E1040927E540238AA54AA9282500C20 +9D67:4440288001FC7D0429FC290429FC2900FDFE290029FE28022AAA4AAA4A02880C +9D68:1020104028FC248442FCB88410FC1080FEFE108010FE7C0244AA44AA7D02440C +9D69:0008779054BC54A454BC75A4543C57A054BE74A056BE5502552A56AA5482B40C +9D6A:10201040FEFC288454FC92847CFC54807CFE54807CFE100216AA1AAA1202000C +9D6B:102010401EFC10847CFC44847CFC44807CFE548010FEFE0212AA12AA1202100C +9D6C:00107720557C5544557C7744557C5540557E7740557E5502552AB52A8942130C +9D6D:1020104028FC248442FCBC8410FC1080FEFE108094FE580252AA1EAAF202400C +9D6E:102010403EFC228444FC808410FC668042FE428066FE420242AA7EAA4302000C +9D6F:104020807DFC550455FC7D0455FC55007DFE210051FEFC0212AA12AA1202100C +9D70:00107F20497C49445D7C49447F7C41405D7E5540557E5D02412A412A4542820C +9D71:102010407CFC108410FCFE8400FC448092FE10807CFE100212AA1EAAE202400C +9D72:2820284028FCFC8428FC2884FEFC00807CFE448044FE7C0244AA44AA7D02440C +9D73:102008407EFC428442FC7E8440FC5E8052FE5E8052FE5E0252AA52AA9302160C +9D74:402040407EFC828422FCAA8472FC2280FEFE228072FEAA0222AA22AA0B02040C +9D75:202020403CFC448488FC7E8452FC52807EFE10802CFE2A0228AA4AAA4B02860C +9D76:0020FE4028FC288428FCEE8482FC828082FEEE8028FE28022EAAF0AA4102000C +9D77:10100820FF7C8144407C7744557C5540557EB540977E1402242A252A4642840C +9D78:10201040FEFC108428FC4484FEFC048074FE548054FE740254AA04AA1502080C +9D79:0640387C08947E241C442A944A081FF010101FF010101FFC10001FFC0004492C +9D7A:20201040FEFC288428FC4E8452FCDA8056FE628054FE4C0248AA54AA6502400C +9D7B:105020487C8044FE7D9046907CFC40907E9040FC7E900290AA90AAFE82800C80 +9D7C:20201040FEFC828428FC448482FC00807CFE108010FE10021EAAF2AA4202000C +9D7D:0010F720117C5544227C5544897C1040007EF740117E5502222A552A8942100C +9D7E:0020FC4084FC8484FCFC848484FCFC8000FE8880EEFE880288AAAAAACD02880C +9D7F:100020FE7C8244FE7C8244FE7C0040147EE440447E4403FEAA44AA4482840D04 +9D80:102420247F7E41247F24413C7F2440247FBC40247FA400FEAA80AAA481220642 +9D81:20201040FEFC008400FC7C8444FC44807CFE108054FE520292AA10AA5102200C +9D82:2020CE4082FC8284EEFC828482FCFE8028FE288028FE28024AAA4CAA8902000C +9D83:100020207CCE44827C8244EE7C8240827EFE40287E280228AA48AA4A828A0D06 +9D84:10201040FEFC10847CFC1084FEFC00807CFE44807CFE44027CAA44AA5502480C +9D85:0040548055FCA904A9FC550455FC0100F9FEA900A9FEF802AAAAAAAAFA02880C +9D86:1040108011FC7D0411FC550455FC5500BBFE110039FE540292AA12AA1202100C +9D87:10201040FEFC10847CFC54847CFC54807CFE108038FE540292AA12AA1202100C +9D88:10201040FEFC10847CFC1484FEFC14807CFE1080FCFE240244AA28AA3102C80C +9D89:20201040FEFC00847CFC44847CFC00807CFE048008FE1E02F2AA12AA5202200C +9D8A:101008207F7C48445E7C4A444A7C7F404A7E4A405E7E4802542A922A2242400C +9D8B:00207E4042FC42847EFC488448FC7E8048FE48805CFE540254AA54AA5D02940C +9D8C:00107F20417C41447F7C4444557C5540557E5F40447E5502552A572A9D42000C +9D8D:00207C4044FC7C8444FC44847CFC20807EFEAA802AFE4A0292AA22AA4B02040C +9D8E:20201040FEFC828400FC7C8400FC0080FEFE108010FE540252AA92AA5102200C +9D8F:0E20F04022FC928444FC108410FC7C8010FE1080FCFE10022AAA26AA4202800C +9D90:08208C404AFC48843EFC0884C8FC5C806AFE488048FE48024AAA62AA9A02000C +9D91:2AA42CA84920145022885FF410101FF010101FF010001FFC10001FFC2A44452C +9D92:22082210FA3C222427BCFAA4AABCAAA0FABE22A072BEAA822AAA24AA2482298C +9D93:50405080F9FC510451FC0104F9FCA900A9FEA900F9FEA802AAAAAAAAFA02880C +9D94:00107E20247C18447F7C29444A7CA840107E0840FF7E1C022A2A492A8842080C +9D95:2040108079FC010449FC3104FDFC010079FE490049FE78024AAA4AAA7A02480C +9D96:0610381008527E5408901C282A2848440A821FF010101FF010101FFC5244892C +9D97:00407CFC44847CFC44847CFC0080FEFE108010FE5E0252AA52AAB0049FFE0000 +9D98:20102720257C7544257C2744257C7540557E5740557E5502752A492A0942130C +9D99:20201040FEFC008444FC2884FEFC828010FE7C8054FE540254AA5CAA1102100C +9D9A:0020EE40AAFCAA84EEFC008478FC0080FCFE208040FE78020AAA0AAA2A02100C +9D9B:48204A406CFC48844AFC6A8456FC20807EFE428042FE7E0242AA42AA7F02420C +9D9C:4420FE4044FC00847CFC048428FC1080FEFE328054FE900212AA12AA5202200C +9D9D:0020FE4000FC7C8444FC44847CFC0080FEFE928092FEFE0292AA92AAFF02820C +9D9E:021007203C7C2444247C3F44247C2F40297E2F40297E2F02292A492A4F42890C +9D9F:20201040FEFC828428FC448492FC148012FEFE8010FE10022AAA26AA4202800C +9DA0:0010FFA0807CBF44A17CBF44A17CBF40887EFFC0927EB2028CAA92AAA102FF8C +9DA1:00207C4044FC7C8444FC7C8420FC7E8092FE52806AFE42027AAA02AA1502080C +9DA2:0E20F04022FC928454FC48847CFC1080FEFE20803EFE420254AA88AA1502620C +9DA3:101008207E7C4244427C7E44427C40407F7E5540557E7F02D52A552A5542430C +9DA4:0020FE4092FC1084FEFC10847CFC54807CFE54807CFE1002FEAA12AA1202100C +9DA5:00107F20497C49447F7C40445F7C5140517E5F40517E5F02512A512A9F42110C +9DA6:107CFF44107C7E44427C7E44028C1FF010101FF010101FFC10001FFC0004492C +9DA7:221022207F7C22442A7C08443E7C2A402A7E2A40FF7E0802142A122A2242400C +9DA8:20203C4044FC788408FCFE8420FC52809CFE2C804AFE98022AAA4AAAAA02100C +9DA9:00207E20247E18A4FF2829104A2898C602001FF010101FF010101FFC5244892C +9DAA:00207E4042FC7E8442FC7E8442FC7E8014FE1280FEFE10022AAA26AA4202800C +9DAB:10201040FEFC1084FEFC9284D6FCBA8092FEFE8010FE380254AA92AA1102100C +9DAC:08100C20127C294444FCBF44217C3F40217E3F40207E3F02512A512A9F42110C +9DAD:20204410F9FE1040247CFE840084551482081FF010101FF010101FFC5244892C +9DAE:20201040FEFC00847CFC44847CFC0080FEFE8280BAFEAA02BAAA82AA8B02840C +9DAF:08202AA44D28145022887FFE42029FF410101FF010101FFC10001FFC0004492C +9DB0:00207C4044FC44847CFC0084FEFC8280FEFE8280FEFE8202FEAA28AA4502840C +9DB1:01007FFE44429FF404403FF80440FFFE0A201FF02828CFE608200FF800081558 +9DB2:2820444092FC208448FCFC8404FC0080EEFE2280AAFE6602AAAA22AAAB02440C +9DB3:2100427EF3889288F2BE92AAF3AA822AFA2A83AAFAAA0AAEAA88AB888A883008 +9DB4:081008207F7C5544127C3F44647CA4403F7E2440247E3F0224AA24AA3F02200C +9DB5:201020207F7C9144557C7D44217C4A40A47E7F40917E55027D2A212A4A42840C +9DB6:101008207F7C48445E7C4A447F7C4A405E7E48405E7E520252AA52AA5F02920C +9DB7:20201040FEFC828410FC7C8410FC7C8010FEFE8010FE7C0244AA44AA7D02440C +9DB8:0020EE4022FC2284EEFC888488FCEE8022FEAA8066FE6602AAAA22AAAB02440C +9DB9:2020DE408AFCCA84AAFCD284A6FC0080FEFE928092FEFE0292AA92AAFF02820C +9DBA:1020924054FCAA8444FC82847CFC448044FE7C8044FE44027CAA44AA45024C0C +9DBB:00207C4044FC748454FCFE8482FC7C8044FE7C8044FE7C0244AA44AA5502480C +9DBC:22101420007C7FC4147C7F44157CFFC0157E7F40147E3602552A94AA1442140C +9DBD:282024407EFCC8847EFC48847EFC48807EFE508010FEFE0212AA12AA1202100C +9DBE:108010FE1140FEFC10847CFC44847CFC44807CFE1080FEFE100212AA12AA1004 +9DBF:082004407FFC12483CF0082014503EF802001FF010101FF010101FFC5244892C +9DC0:21081110123CFFE4213C2124423C52A094BEE720213E4202422A94AAF782108C +9DC1:22101420007C7F44007C1444227C4140007E7F40557E5502552A57AAFC42000C +9DC2:0E20F04022FC928444FC20843CFC508010FEFE8010FE540254AA5CAA6502000C +9DC3:00107E20427C7E44427C7E44087CFF40817E1040FF7E220264AA18AA2502C20C +9DC4:0E20F04022FC928444FC208444FCF88010FE2480FEFE1002FEAA28AA4502820C +9DC5:0020FE4028FC2884FEFCAA84AAFCFE8010FE1080FEFE380254AA92AA1102100C +9DC6:4610782040FC3FC4007C5F44517C5F40517E5F40517E5F02402A7FAA2242410C +9DC7:1000FE7810487C480048FE8692007CFC44447C4444287E2840107F280144AB82 +9DC8:2004401EF3F0921EF21092FEF2928298FAF2828EFA800AB8AAA8ACAA8D4A3A86 +9DC9:03107C20477C44445F7C5544567C5C40557E5340507E5702552A552AA9C2000C +9DCA:0020FE4000FC7C8444FC7C8400FCFE8082FEAA8092FEFE0292AA92AA9302860C +9DCB:22082210FFBC22242A3C1424223C5D2088BE08207F3E08022A2A492AA882100C +9DCC:100020FE7C9044FC7C9044FC7C9040907EFE40027EAA02AAAAAAAA8282140C08 +9DCD:104020807DFC45047DFC45047DFC45007DFE1100FDFE10023AAA56AA9202100C +9DCE:102020407CFC44847CFC44847CFC1080FEFE288054FE92027CAA10AA1102100C +9DCF:10201040FEFC10847CFC44847CFC44807CFE44807CFE4402FEAA28AA4502820C +9DD0:00107E20427C7E44427C7E44007C7F40407E5E40407E7F02552A522A5942910C +9DD1:44104420777CAA44117C2044107CFF40007E0440447E240228AA0EAAF102400C +9DD2:10201040FEFC10847CFC54847CFC54807CFE1280FEFE0802FEAA48AA2902180C +9DD3:101008207F7C4044527C52447F7C5240527E5E40407E5502552A552A8042000C +9DD4:08207F20087E7E4408A4FF2810101E2822445FF290101FF010101FFC5244892C +9DD5:009079FE4B204DFC492049FC792001FE02001FF010101FF010101FFC5244892C +9DD6:7F7848485F4C64805F784A4851307F4C02001FF010101FF010101FFC5244892C +9DD7:0020FE4080FC8084BCFCA484A4FCBC8080FEEE80AAFEAA02EEAA80AAFF02000C +9DD8:0820FFA0083E7F4449A87F102A28494682001FF010101FF010101FFC5244892C +9DD9:08207E2008F8FF2814287F6A082AFF560A821FF010101FF010101FFC5244892C +9DDA:0020EE4022FCAA8466FCAA8410FC288044FE928020FEC80232AAC4AA1902E00C +9DDB:02083FD0223C2FA422BC3FE422BC2FA0223E2FA02ABE2F824AAA4FAA8A82098C +9DDC:08107F20497CFFC4497C7F44087C7F40497E7F40107EFF02212A722A0C42F30C +9DDD:0020FE4092FCFE8492FCFE8454FC5480FEFE548054FEFE0210AAFEAA1102100C +9DDE:10201040FEFC1084BAFC5484BAFC1080BAFE5480BAFE10022AAA26AA4202800C +9DDF:208010FCFD4020F83D2024FC445055888A041FF010101FF010101FFC5244892C +9DE0:2040208079FC490491FC7D0455FC55007DFE550055FE7C0202AAAAAAAA02000C +9DE1:200820107FBCD524553C5524FFBC5520553E5520FFBE00026A2A552A9502000C +9DE2:3FFE289025103FDE22222A882F88229425222FF0241027F0241047FC40048AAC +9DE3:0020FE4028FCFE84AAFCFE8400FC7C8044FE7C8044FE7C0210AAFEAA1102100C +9DE4:0020EE40AAFCAA84EEFC00847CFC54807CFE54807CFE1002FEAA12AA1202100C +9DE5:1020244878F014287EFC002054A8556402001FF010101FF010101FFC5244892C +9DE6:282024407EFCC88448FC7E8448FC48807EFE488048FE7E0240AAAAAAAB02000C +9DE7:1020FE4010FC7C8400FCFE8482FC7C8000FE7C8044FE7C0244AA28AA0F02F00C +9DE8:44204440FEFC448400FCFE8454FC5480FEFE548054FEFE0210AAFEAA1102100C +9DE9:49202A3E7F4849485DA86B104928414602001FF010101FF010101FFC5244892C +9DEA:00003EF822883EF822883EF822887FFE42029FF410101FF010101FFC5244892C +9DEB:08087F10093CFFA4093C7F24083CAAA0EBBE88A0FFBE8882EBAAAAAAAA82088C +9DEC:282028407CFC288428FCFE8410FC7C8054FE7C8054FE7C0200AA28AA4502820C +9DED:0E20F04092FC5484FEFC388454FC82807CFE548054FE7C0254AA54AA7D02440C +9DEE:06107820107CFFC4227C5D4494FC1C40007E7F40417E5D02552A5D2A4142430C +9DEF:081008207F7C0844557C2244417CBEC0227E3E40227E3E0208AA2AAA4902180C +9DF0:0440FFFE044017D2F01C17D03452D7CE02001FF010101FF010101FFC5244892C +9DF1:2020FE4082FCFE8482FCFE8482FCFE8010FE928054FE920210AAFEAA1102100C +9DF2:08287F2400FE3E2022503E504952988E02001FF010101FF010101FFC5244892C +9DF3:EE20AA40EEFCAA84EEFC8284BAFCAA80BAFEAA80BAFEAA02AAAADAAA8302860C +9DF4:0020EE40AAFCEE84AAFCEE8492FC9280FEFE9280BAFED60292AA92AA8B02840C +9DF5:00107F20417C41447F7C48445D7C4A407F7E48405E7E72025EAA52AA5F02920C +9DF6:0020FE40AAFCAA84FEFC00847CFC44807CFE44807CFE44027CAA00AA2902440C +9DF7:22101420FF7C14447F7C5544637C5D40417E7F40047EFF0244AA24AA25020C0C +9DF8:7E101420087CFF44297C4A44A87C10407F7E5540637E5D02552A5D2A4142430C +9DF9:00803FFE225024FC2D9036FC249024FC210027F0241027F0441047FC80040AAC +9DFA:00403EFC23483E3009CE2E7828487E7802001FF010101FF010101FFC5244892C +9DFB:21084088F3C89010F3DE9264F3D48014FBD48054F89408E8AB88A8948A943122 +9DFC:0020EE40AAFCEE84AAFCEE8482FCBA80AAFEBA80AAFEBA02AAAA82AA8B02840C +9DFD:0A803138228838382288393822887FFE42029FF410101FF010101FFC5244892C +9DFE:1020FE4044FC2884FEFC00847CFC44807CFE44807CFE10020AAAA9AAA5021C0C +9DFF:3E1022FE3E4420287EFEA2103EFC221002001FF010101FF010101FFC5244892C +9E00:00107F20557C55447F7C20447F7C91407D7E5540557E7D02112A7D2A0542020C +9E01:0100FFFE20003FF800003FF820083FF80200779C54947794549C77D65056B562 +9E02:0310BC2044FC1144847C49445E7C0440297E5F40C47E5F0244AA4AAA5102208C +9E03:21044088F3FE9020F1FC9020F3FE8054F9928090FBFE0890A8D4AB8A889631A2 +9E04:10207E204A7E7EC41028FF1020283EC642001FF010101FF010101FFC5244892C +9E05:00107F20557C7F44087C7F44087CFFC0227E14407F7E0802FFAA08AA0902080C +9E06:08100F20087C7F44497C7C44497C5F40527E5E40407E5E02482A7F2A5242A10C +9E07:1020FE4000FCFE8482FCBA84AAFCFE8000FE7C8044FE7C0244AA7CAA0102FE0C +9E08:14105520367C1444FF7C2244147C7F40087E7F40087EFF021CAA2AAA4902080C +9E09:11FC1104FDFC310459FC948011FE125202AA1FF410101FF010101FFC5244892C +9E0A:02087910493C4BA4483C7AA4413C47E0793E6920ABBEA902292A392A2902010C +9E0B:0810FF20917C4A44A57C1C44007C7F40557EFFC0007E7F0208AA08AA2902100C +9E0C:104421FE7C5444487CFE45907CFE40907EFE40907EFE0280ABFEAA4482380DC6 +9E0D:0008FF90493C88A4FFFC88A4DDBCAAA0DDBE88A0DDBEAA82DDAA88AA8A82810C +9E0E:3EF822883EF822883EF822883EF8145022881FF010101FF010101FFC5244892C +9E0F:2410FF20247CFF44817C7E44007CFF40107E28C0D57E2E02D5AA24AAD502080C +9E10:0010EE20227CAA44667CAA44007C24407F7EC8407E7E48027EAA48AA7F02400C +9E11:510C278A500897BE30085788949457A422021FF010101FF010101FFC5244892C +9E12:1A3823883A38238838B82288FFFE10102208DFF610101FF010101FFC5244892C +9E13:00087F10493C7F24493C7F24413C0020FFBEAAA0AABEFF82AAAAAAAAFF82888C +9E14:21FC4104F9FC8904F9FC8888F9FC8088FDFE8088FD2406AA547054A885241860 +9E15:08080F90083C7FA448BC7E2448BC5FA0553E5F20553E5F02402ABFAA2A827FCC +9E16:7F080810FFBC88A46B3C08246B3C24207FBEC8207F3E48027F2A482A7F82400C +9E17:08403E7C1440FF7822083E782242263E02001FF010101FF010101FFC5244892C +9E18:FE201040FEFC928454FC108454FC00802EFEFA802EFE7A02AEAA2AAA2F022A0C +9E19:1020284044FCBA8400FCFE84AAFCFE8000FEFE80AAFEAA02FEAAAAAAAB02860C +9E1A:00107720557C7744557C7744557C7740227E5540107EFF0222AA64AA1D02E30C +9E1B:4420FE4044FC0084EEFCAA84EEFC24807EFEC8807EFE48027EAA48AA7F02400C +9E1C:77105520777C5544777C5544777C22407FFEA4403F7E24023F2A242A3FC2200C +9E1D:77100020777C5544777C5544087C7F40547E7F40557E7F02552A5E2A55429B0C +9E1E:21084FD2F03C23884812FBBE0280ABAA02001FF010101FF010101FFC5244892C +9E1F:010002001FF01010121011101150102010001FFC000400047FE4000400280010 +9E20:2020204020FC2084FCA4248424942488248024FE2502260245FA400280140008 +9E21:0020004000FCFC8404A4048448942888108010FE2802240245FA800200140008 +9E22:04200410023EFFC00080004202321FEE1420126010001FF800087F8800280010 +9E23:0020004079FC4904494449244924490C490049FE7802480203FA000200140008 +9E24:002000403EFC228422A422843E942288208020FE2002200221FA400240148008 +9E25:00207E4040FC448464A4548448944888548054FE6402400241FA7E0200140008 +9E26:00207E4004FC248424A4248444947F880C8014FE1402240245FA840214140808 +9E27:08100820147C124421644054BE44224C2240227E2A022402217A21021F0A0004 +9E28:4020484050FC608444A444843C941088108010FEFE02100211FA100210141008 +9E29:08100820087C7F44496408540844144C1440147E14022502267A4402800A0004 +9E2A:1020104010FC1084FEA41084109410887C8044FE4402440245FA7C0244140008 +9E2B:10101020107CFF44206428544844484C7E40087E2C022A02497A8902280A1004 +9E2C:102010401EFC108410A47C844494448844807CFE4402400241FA400280140008 +9E2D:0020FE4092FC928492A4FE84929492889280FEFE9202100211FA100210141008 +9E2E:00207E4042FC428442A47E840094FF88208040FE7E02020203FA020214140808 +9E2F:01001FF011101110FFFE02801C70E20E04001FE0122011601FFC00047FD40008 +9E30:1020104028FC248442A4918408940888FE8002FE4402280211FA080208140008 +9E31:011007A07C7C44444464445444447F4C4440447E4402420242FA5282698A4484 +9E32:2020204040FC7E8482A402847A944A884A804AFE7A024A0203FA020214140808 +9E33:10003EF84288A2AA1492187EE2001FE01420126010001FF800087F8800280010 +9E34:2208111000207FFE410282041FF010101210115010201FFC000400047FD40008 +9E35:102020107C1044FE548245045440484840507E6002400242FA420242143E0800 +9E36:1020244878F010207EFC0000FFFE020004001FE0122011601FFC00047FD40008 +9E37:10801080FBF010901990F0941154520C24041FE0122011601FFC00047FD40008 +9E38:00107F20087C084410647F545544554C5540557E55025502557A5102450A4204 +9E39:04200E4038FC088408A4FF84089408883E8022FE2202220223FA3E0222140008 +9E3A:12081210123E22222FB2622AA62227262AA02ABE32022202227A2202220A2204 +9E3B:10101020277C4044906410542FC4624CA240227E22022202227A22022A0A2404 +9E3C:082010403EFC228432A42A842A94FE88228032FE2A022A0223FA42024A148408 +9E3D:1020104028FC248442A480847C94008800807CFE4402440245FA7C0244140008 +9E3E:02000100FFFE04401450244842041FE01420126010001FF800087F8800280010 +9E3F:00108020407C1F44846444544444044C2440447EC40247025C7A4802400A0004 +9E40:001000207F7C084408642A542A442A4C5D40497E880208020F7AF002400A0004 +9E41:10201040FEFC108410A4FE8482940488788008FE10021E02F1FA100250142008 +9E42:0008FF90003E0022F7B294AA94A294A6D6A0B5BE9482948294FA9482948AB584 +9E43:00103E20227C22443E6400547F44414C41407F7E410241027F7A4102450A4204 +9E44:08104820487C7F44886408540844FF4C0040007E7E024202427A42027E0A4204 +9E45:04103620E57C25442464FFD42444254C2540367EE60224022AFA3282A18A4084 +9E46:2820244042FC928410A42884449482887C8044FE4402440245FA7C0244140008 +9E47:40102F20017C4944496449547F44494C5D406B7E49024902497A4102450A4204 +9E48:4420244028FCFC8414A41484FC9490889080FEFE3202320253FA960210141008 +9E49:04100620757C05440464FF540444144C14405C7E54025402557A5D02E30A4104 +9E4A:24102420247CFF4424642454FFC4004C7E40427E42027E02427A42027E0A4204 +9E4B:22082210FFBE22222232002A7F2249264920493E7F024902497A49027F0A4104 +9E4C:08080810FFBE14222232492A88A27F2649207F3E49027F02087A0A020C0A0804 +9E4D:00107E20427C42447E64425442447E4C0040447E77024402447A5502660A4404 +9E4E:101020207F7C494449647F544944514C7F40247E4402FF82047A0402040A0404 +9E4F:00107720557C5544556477545544554C5540777E55025502557AB502890A1304 +9E50:102010403EFC228444A4808410946688428042FE6602420243FA7E0242140008 +9E51:10100820FF7C00447E6442547E44004C7E40047E08020F02F87A0802280A1004 +9E52:101008207F7C48445E644A544A447F4C4A404A7E5E024802547A9202220A4004 +9E53:10100820FF7C8144406477545544554C5540B57E97021402247A2502460A8404 +9E54:081008207F7C0944FFE409547F44084C4940497E5D026B02497A4902890A0904 +9E55:2008279024BEFCA224B227AA24A274A654A057BE5482548274FA08820A8A1104 +9E56:00107E20427C7E4442647E5420447F4C8940497E550241027D7A01020A0A0404 +9E57:00107720557C5544776400547F44004CFFC0207E3F020102017A01020A0A0404 +9E58:00207C4044FC748454A4FE9482947C8C44807CFE44027C0245FA440254144808 +9E59:0620382008A47EA819202C504A881FE41420126010001FF800087F8800280010 +9E5A:21081110123EFFE22132212A422252A694A0E73E21024202427A9482F78A1084 +9E5B:00107F20497C49447F6440545F44514C51405F7E51025F02517A51029F0A1104 +9E5C:00207E20247E18A4FF2829104A289AC604001FE0122011601FFC00047FD40008 +9E5D:0020FE4000FC7C8444A47C840094FE888280AAFE9202FE0293FA920292148608 +9E5E:0E20F04022FC928444A420843C9450881080FEFE1002540255FA5C0264140008 +9E5F:2820444092FC208448A4FC8404940088EE8022FEAA026602ABFA2202AA144408 +9E60:2020DE408AFCCA84AAA4D284A6940088FE8092FE9202FE0293FA9202FE148208 +9E61:1020924054FCAA8444A482847C94448844807CFE440244027DFA440244144C08 +9E62:22101420007C7F44006414542244414C00407F7E55025502557A5782FC0A0004 +9E63:22101420007C7FC414647F541544FFCC15407F7E14023602557A9482140A1404 +9E64:081008207F7C554412643F546444A44C3F40247E24023F02247A24023F0A2004 +9E65:7F7848485F4C64805F784A4851307F4C04001FE0122011601FFC00047FD40008 +9E66:00107720557C5544556455542244554C0840FF7E12022202347A0C02320AC104 +9E67:101008207F7C4044526452547F44524C52405E7E40025502557A5502800A0004 +9E68:00107720117C5544336455540C44334CC4C0187E62020C82717A0602180AE004 +9E69:081008207F7C0844556422544144BECC22403E7E22023E02087A2A02490A1804 +9E6A:282024407EFCC88448A47E84489448887E8048FE48027E0241FAAA02AA140008 +9E6B:08287F2400FE3E2022503E5049529A8E04001FE0122011601FFC00047FD40008 +9E6C:7E101420087CFF4429644A54A844104C7F40557E63025D02557A5D02410A4304 +9E6D:00403EFC23483E3009CE2E7828487E7804001FE0122011601FFC00047FD40008 +9E6E:0020FE40AAFCAA84FEA40084FE9400887C8044FE7C022A0265FAA20231142008 +9E6F:1020FE4000FCFE8482A4BA84AA94FE8800807CFE44027C0245FA7C020014FE08 +9E70:00803FFE225024FC2D9036FC249024FC210027F02490242047FC40049FD40008 +9E71:104421FE7C54444864FE559044FE4C9040FE7C9004FE0480F5FE0444143809C6 +9E72:2410FF20247CFF4481647E540044FF4C104028FED5022E02D57A2482D40A0804 +9E73:2208FF90223EF7A294B2F7AA282224267FA0483EFF0248027F7A48027F8A4004 +9E74:7F1008207F7C49442A6408542A44004C2740FD7E27027502AF7A2502270A2504 +9E75:0100010001FE010001003FF8200829282448228829282288244829283FF82008 +9E76:102010201E2010501050FE889344C622AA20D6F8AA08C6089210FE1082200020 +9E77:102010201E5010501088FF249212C610ABFCD604AA08C6889250FE2082100010 +9E78:101010281E441082107CFE109210C6FEAA92D692AAFEC6109228FE2882440082 +9E79:100C100A1E0810FE1088FE8892FAC68AAA8AD6ECAAACC6AC92EAFE8A82960122 +9E7A:104410241E2810FE1010FE7C9210C6FEAA20D620AA7CC6509290FF1082FE0000 +9E7B:108810501E0011FE1050FEFC9254C7FEAA54D6FCAA50C6D89354FE5282500050 +9E7C:101010101E2810441082FE7C9200C6EEAAAAD6AAAAEEC6449244FEAA82AA0112 +9E7D:0100F9FEA220A43EF8208BFE8AAAFA52A326A252A2AAFBFE00003FF82448FFFE +9E7E:208420443C4821FE2020FCFC842095FED440A480D4FE95108610FC1085FE0000 +9E7F:010000803FFE222022203FFC222422243FFC284028442F58486048448B440C3C +9E80:010000803FFE22203FFC22243FFC28402F7828422F3E200028784F82480287FE +9E81:010002000FF0706003801D00E0803FFC22403FF822483FF828442F7848428F3E +9E82:010000803FFE22203FFC22243FFC28402F7828422F3E200023F042104412980E +9E83:010000803FFE22203FFC22243FFC28442F4828742B442C3C40004A4889241124 +9E84:044008203018DFF60410095010A03FFC22403FF822483FF828442F7848428F3E +9E85:00803FFE22203FFC22243FFC242227BE24002FF830082FC828684FD0480287FE +9E86:00803FFE22203FFC22243FFC242227BE200027F8240827F8240847F84408BFFE +9E87:00803FFE22203FFC22243FFC242027BC2422279E200823F020404FFE41508E4E +9E88:00803FFE22203FFC22243FFC242027BC2422279E20802FFE204047FC40409FFE +9E89:00007C7C10101010FEFE111010903FFC22403FF822483FF828442F7848428F3E +9E8A:111009207FFC05401930610C00803FFC22403FF822483FF828442F7848428F3E +9E8B:00803FFE22203FFC22243FFC242027BC2422279E224821502FFE415042488C46 +9E8C:00803FFE22203FFC22243FFC200027F0241027F020002FF820805FFC42209C1C +9E8D:00803FFE22203FFC22243FFC242227BE20403FFE220024082FFC44944892908E +9E8E:00803FFE22203FFC22243FFC242227BE20002FFC28002BFC28004FFE4A28939E +9E8F:00803FFE22203FFC22243FFC20002FFC21043FFE21042FFC220047FC4A0493FC +9E90:00803FFE22203FFC22243FFC242227BE20402FFE211020E02F1E43F8420883F8 +9E91:00803FFE22203FFC22243FFC242227BE21002E7828082F7828084FF842229C1E +9E92:08447F4455FE54447F44557C55447F44547C54445E4455FE54005C2856448082 +9E93:082008207EFC1C702AA8C92608A03FFC22403FF822483FF828442F7848428F3E +9E94:00803FFE22203FFC22243FFC222027B02D2832242DFE300027F84408440887F8 +9E95:00803FFE22203FFC22243FFC20002FFC28242BC428842FF42AA44C944FFC8804 +9E96:00803FFE22203FFC22243FFC20803FFE20002FF828082FF82080488852848100 +9E97:3F7E00003E7C224432642B5400803FFC22403FF822483FF828442F7848428F3E +9E98:00803FFE22203FFC22243FFC20102FE020803FFC24902FF8341647F0441087F0 +9E99:00803FFE22203FFC22243FFC200020282FFE28202BA428282BAC4A944BAC9044 +9E9A:00803FFE22203FFC22243FFC20002F7C29042F7C28002F7C28444F28483088CE +9E9B:00803FFE22203FFC22243FFC20002F7E21242F3C28242F3C2126417C45048204 +9E9C:00803FFE22203FFC22243FFC20002FFE211027FC251427FC20404FFE4150864C +9E9D:00803FFE22203FFC22243FFC242027BC24222F9E29082F7E29485F2845089B18 +9E9E:00803FFE22203FFC22243FFC204027FC21102FFE220823F822084FFE40408040 +9E9F:08107F54543854FE7F10553855567F90548454EE5EA454B4555E5C4456848104 +9EA0:00803FFE22203FFC22243FFC28882FF828883FFE20002FF828884FF84888BFFE +9EA1:00803FFE22203FFC22243FFC20402FFE20A02F5E255425542B5A440847F88808 +9EA2:00803FFE22203FFC22243FFC200027FC20402FFE2842235820004EEE4AAA8EEE +9EA3:13DEFE52ABDEA800FFFEAA00AAC8FE4EABEAAAB2BEEAAAAAAAEABAB4ADE4002A +9EA4:00803FFE22203FFC22243FFC4810FF7E54487F7E554A7F7E52645B7652A49B36 +9EA5:01007FFC0920092015502388054009203218C7E6082013400080014006203800 +9EA6:010001007FFC010001003FF801000100FFFE08001FF02820444003801C70E00E +9EA7:08200820FF402A7E2A805D00887C1C042A0850101E20224054420842143E6000 +9EA8:08100810FF102A102A545D5288521C902A1050141E04220854080810142060C0 +9EA9:10201020FE20542055FCBA201020382055FEA2203C504450A88810882904C202 +9EAA:100011FEFE20542054A0BABC10A438A454A4A2FC3C044404A80410042828C010 +9EAB:080008FEFF102A102A505D5E88501C502A50507E1E0222025402080214146008 +9EAC:10101010FE1054FE5492BA94109038FC54A4A2A43CA844A8A89011282944C282 +9EAD:10401040FEFC54845504BAF41094389454F4A2843C944488A8821082287EC000 +9EAE:08100810FF102A7E2A105D1088101CFE2A1050101E202228544408FE14426000 +9EAF:10501050FE50545055FCBB54115439545554A3FC3D544554A954115429FCC104 +9EB0:10201020FE48548455FEBA121090389054FEA3103C1045FEA81010102810C010 +9EB1:10141012FEFE54105410BAFE1092389254FEA2923C9244FEA89210922892C086 +9EB2:080008FCFF842A842AFC5D8488841CFC2A8450841EFC2250545008521492610E +9EB3:08100810FF102AFE2A105D5488541C542ABA50101E3822545492081014106010 +9EB4:10801080FEFE55025622BAAA1072382255FEA2223C7244AAA9221022280AC004 +9EB5:080008FEFF102A202AFE5DAA88AA1CBA2AAA50AA1EBA22AA54AA08AA14FE6082 +9EB6:10201010FEFE54285492BAAA108238FE5410A2FE3CA244AAA8BA1082288AC084 +9EB7:10A811FCFEAA57FE56AABBFE12AA3BFE5400A3FE3C0045FCA90411FC2888C3FE +9EB8:10201020FE2010207DFC1020FE2020203DFE44204850A8501088288841048202 +9EB9:10801080FEFE11027E2210AAFE7220223DFE44224872A8AA11222822400A8004 +9EBA:100011FEFE2010407DFC1154FF5421743D5445544974A9541154295441FC8104 +9EBB:010000803FFE2210221022103FBE2210261027382AB42A545292421082100210 +9EBC:010000803FFE221022102FBC231826B42A522100221027E040C043088FFC0004 +9EBD:010000803FFE221022102FBC231826B42A522100224024804910420887FC0004 +9EBE:010000803FFE22102F7C26382B54329220782F8020F82F8020FC5F824082807E +9EBF:00803FFE24103F7C26382D543412200027F8240827F820002FFC480448048FFC +9EC0:010000803FFE22102F7C26382B5432923F80297C2F2429242F2849905F288146 +9EC1:00803FFE24103F7C26382D5434122FE020803FFC24902FF8341647F0441087F0 +9EC2:00803FFE24103F7C26382D5434922FF822A02FFC22202FF828884FF844108808 +9EC3:08207FFC08200FE00000FFFE01001FF0111011101FF0111011101FF008201010 +9EC4:044004403FF804400440FFFE01001FF011101FF011101FF0000008201010600C +9EC5:221022107F1022282228FFC408447FA249107F10497C7F040008220821104110 +9EC6:221022107F10221022FEFF9208927F1049287F2849287F280048224A218A4106 +9EC7:221022107F102210221EFF9008107F10497C7F4449447F4400442244217C4144 +9EC8:222022107F0022FE2210FF9008107F10497C7F1049107F100010221021FE4100 +9EC9:110808907FFE44429FF404407FFC01001FF011101FF011101FF0044008201010 +9ECA:282028207CF828202820FE2011FC7C00542054207CF8542054207C2029FC4400 +9ECB:1088108895FC5488588813FEFC2029FC292429FC292429FC288849044A0287FE +9ECC:0A803138228839382288FFFE84423FF80440FFFE11101FF011101FF008201010 +9ECD:00F83F0001007FFC092011102288C44409203118CB2605C01930610805000200 +9ECE:0640387C08947E241C442A94490802800C603118C92605400920111025080200 +9ECF:0C2070201020FE20383E54209020282055FC9104550439045504930451FC2104 +9ED0:0C40702011FCFE5039245554910429FC542091FC554439545574930451142108 +9ED1:00003FF82108292825483FF8010001003FF801000100FFFE0000488844448444 +9ED2:00003FF821083FF821083FF801003FF801000100FFFE00002488224442448004 +9ED3:00287F2449246B205D2E49F07F2008207F2008200FA0F0100012550A4A868002 +9ED4:0020FE209220D650BA509288FF441222FE2010F81E08E0080210AA10A8208020 +9ED5:0010FE109210D610BAFE9292FE921010FE2810281E28E0280248AA4AA88A8106 +9ED6:0000FEFE9210D610BA909290FE9010FEFE1010101E28E0280248AA4AA88A8106 +9ED7:0020FE209220D7FCBA2092A8FEA810A8FEA810A81EF8E0220222AA22A81E8000 +9ED8:0020FE289224D624BA2093FEFE201020FE2010501E50E0500288AA88A9048202 +9ED9:00107F1449127F10497E7F1008287F2808440F44F08200002488224442448004 +9EDA:0044FE449244D644BAFE9244FE441044FE44107C1E44E0440244AA44A87C8044 +9EDB:08901088307ED7C01022101A00063FF8292825483FF801007FFC0100FFFE4444 +9EDC:0010FE109292D692BA929292FEFE1010FE1010921E92E0920292AA92A8FE8002 +9EDD:0010FE509250D690BAFC9354FFD41094FE9411141F54E1D40254AA24A8348048 +9EDE:0010FE109210D610BA1E9210FE101010FEFE10821E82E0820282AA82A8FE8082 +9EDF:0020FE20927CD684BB489230FE201048FE90103E1E42E0A40218AA10A82080C0 +9EE0:0020FE209220D7FEBA209220FEFC1000FE0010FC1E84E0840284AA84A8FC8084 +9EE1:3FFC20903FFC21402630380C2FF82AA829C82FF820802FF840805FFC8A481124 +9EE2:0010FE109220D644BAFE9228FE4410A2FE3C10441E44E0A80210AA28A8448082 +9EE3:0040FE40927ED680BB7C9244FE641054FEFE10441EA4E09402FEAA04A8288010 +9EE4:0020FE2093FED650BAA89326FEF810A8FEA810F81EA8E0A802F8AAAAA822801E +9EE5:0020FE1092FED600BA00927CFE441044FE7C10101E54E0520292AA10A8508020 +9EE6:0020FE1092FED682BA40924EFE6A10AAFEAA10AA1F6CE028024AAA4AA88A8106 +9EE7:0640387C08947E241C442A9448083FF8292825483FF801007FFC0100FFFE4444 +9EE8:111009207FFE40029FF410103FF8292825483FF801003FF80100FFFE24484224 +9EE9:0010FE1092FCD610BA1093FEFE021054FE3010901E50E1FE0228AA44A8828102 +9EEA:0020FE289244D6FEBA2093FEFE881114FE2210481E10E02202C4AA18A8608180 +9EEB:0000FEFE9228D628BAFE92AAFEAA10AAFEFE10101E10E0FE0210AA10A9FE8000 +9EEC:000CFE0A9208D6FEBA889288FEFA108AFE8A10EC1EACE0AC02EAAA8AA8968122 +9EED:0020FE309248D684BB7A9200FEFC1084FE8410FC1E48E04803FEAA48A8888108 +9EEE:0048FE4893FCD648BA789248FE781048FE4811FE1E80E0A802C4AA80A8FE8000 +9EEF:0020FE1092FED600BA449228FEFE1000FE7C10441E44E07C0244AA44A87C8044 +9EF0:0010FE1092FED610BA7C9244FE7C1044FE7C10441E7CE04402FEAA28A8448082 +9EF1:012478A849FC48404BFE79084BFC4DAE497479FC482049FC48204BFE49549A2A +9EF2:0010FE209244D6FEBA4492AAFEEE1010FE2810541EAAE0500224AA48A8108060 +9EF3:7F7848485E8664785F484A307F4C00003FF8292825483FF80100FFFE24484224 +9EF4:11101550255047D0903E17A420546FD4A9542DD42B542FC821082FD420142AA2 +9EF5:0040FE7C9284D7FEBAA292C8FEFE1080FEBE10801EBEE08002BEAAA2A8BE8122 +9EF6:3FFE28882F8A20082FBE28882F88289429A220002FFE29522FFE40405FFE8924 +9EF7:0010FEFE9210D67CBA0092FEFEAA10FEFE44107C1E44E07C0244AA7CA8288044 +9EF8:0040F87CA840ABFCFA44ABF0FA4422FCFAA822F83AA8E2F80A00A5FCA5540BFE +9EF9:0440244814500440FFFE0100111009203FF82108254825282928210821282110 +9EFA:1408552836281428FF4449442A827F7C492449245D246B244944494449944B08 +9EFB:1428552436241420FF7E49202A207F3C493449545D546B544988498849144B22 +9EFC:14145512367E1410FF10497E2A527F52497E49525D526B7E4952495249524B46 +9EFD:00003FF8228822883EF802803EF8228822883EF8228822883EF8228A028201FE +9EFE:1FF0101010101FF001003FF8210821083FF8210821083FF8210A0102010200FE +9EFF:1FF00000FFFE0844303CDFF012901EF002803EF822883EF822883EFA028201FE +9F00:01003FF80100FFFE10103FF852941EF002803EF822883EF822883EFA028201FE +9F01:01003FF80100FFFE04201FF000001FF012903EF822883EF822883EF8028201FE +9F02:00001FF010101FF01010FFFE00001FF012903EF822883EF822883EF8028201FE +9F03:01003FF80100FFFE01003FF80100FFFE12903EF822883EF822883EF8028201FE +9F04:09000FF011007FFC05401930E10E1FF012903EF822883EF822883EF8028201FE +9F05:20003F7C4844FFC4147C224441001FF012903EF822883EF822883EF8028201FE +9F06:0000FDFC8554015479DC485079DC4954795421DC1154FD5401DC51504852883E +9F07:08207E20087EFEC410281E1022285FF692903EF822883EF822883EF8028201FE +9F08:49202A3E7F4849485DA86B1049285FF612903EF822883EF822883EF8028201FE +9F09:00003EF822883FF811101FF01110FFFE12903EF822883EF822883EF8028201FE +9F0A:00107E7C42287EFE40107E7CA2103FF012903EF822883EF822883EF8028201FE +9F0B:1FF00000FFFE0844303CDFF010101FF001003FF821083FF821083FFA010200FE +9F0C:00001FF010101FF01010FFFE00001FF010103FF821083FF821083FFA010200FE +9F0D:00003EF822883FF811101FF01110FFFE01003FF821083FF821083FFA010200FE +9F0E:0FE008200FE048244FE448244FE440047C7C04400440FC7C2444244444448444 +9F0F:7FFE40028FE408200FE008204FE448244FE440047C7C0440FC7C244444448444 +9F10:7FF81008101E2FE2482A8FE408204FE448244FE440047C7C0440FC7C24444444 +9F11:010001FC01001FF010101FF010105FF450145FF440047C7C0440FC7C24444444 +9F12:00807FFC048019806FE008200FE048244FE448244FE47C7C0440FC7C2444C444 +9F13:08100810FF1008FE08107E1000FC7E44424442447E28422824100F28F0444082 +9F14:08100810FF10081E08107E1000FC7E44424442447E28422824100F28F0444082 +9F15:0810FF7E08107E7C42047E4824381E44E8001FF0282007C01830E18E0C400300 +9F16:01007FFC0920FFFE08200810FF1008FE7E1000FC7E4442487E2824101E28E0C6 +9F17:249014A024940884707C0810FF1008FE7E1000FC7E4442487E2824101E28E0C6 +9F18:0810FF7E08107E7C42447E282418FEE624483C7820083FF820083C7824484448 +9F19:0810FF7E08107F7C41447F2822101F28FFF611101FF012101FF004407FFC0040 +9F1A:0810FF7E08107E7C42047E4824381E44EFF008000FF00800FFFE111014E0181C +9F1B:0810FF7E08107E7C42447E3824447EA222385424082037FEC0001FF010101FF0 +9F1C:0810FF7E08107E7C42447E3824447FF2092007C0F93E1FF011101FF001087FFC +9F1D:24A414A487BC440417FC24044FBC90A40810FF7E08107E7C42447E282418FEE6 +9F1E:0810FF7E08107E7C42447E282418FEE611107FFE48228FE401001FF001007FFC +9F1F:0810FF7E08107E7C42447E3824D47EA204442BA810102FE8C8260FE004407FFC +9F20:060038F820083EF8200820083FF800002948252821082948252A210A2D663182 +9F21:22081108111000003FF8210821083FF8210821083FF82108210A410A41068002 +9F22:2008CE288228EE2882448244FE82017C92249224DA249224DA4492449394D908 +9F23:2010CE148212EE12821082FEFE10001092109228DA289228DA2892449344D982 +9F24:2020CE108210EEFE82448244FE44004492449228DA289210DA1092289344D982 +9F25:2028CE248224EE2082FE8220FE20003C92349254DA549254DA8892889314D922 +9F26:2000CEFC8224EE2482248224FE5400489280927CDA449244DA449244937CD944 +9F27:2020CE108210EEFE82828284FE40004492489250DA609242DA429242933ED900 +9F28:2020CE20823EEE4282C48328FE10002892449382DA309208DA0492609310D908 +9F29:2040CE408240EEFC82848304FEF4009492949294DA9492F4DA9492049328D910 +9F2A:2010CE108250EE50827C8250FE9000109210927CDA109210DA10921093FED900 +9F2B:2000CE0082FEEE1082108220FE20007C924492C4DB449244DA449244937CD944 +9F2C:2010CE108210EE1082FE8292FE920092929292FEDA929292DA92929293FED982 +9F2D:2010CE108210EE7C82108210FEFE0008920892FEDA089248DA2892089328D910 +9F2E:2000CC0685D8EC4884488488FC9E01C8A848F948A948F89EA880A940FA3EA400 +9F2F:2000CEFE8210EE10827C8224FE2400FE92009200DA7C9244DA449244937CD944 +9F30:2000CE7C8244EE44827C8244FE44007C92449244DA7C9200DA2892249342D982 +9F31:2010CE1082FEEE10827C8210FEFE0000927C9244DA7C9244DA7C92449354D948 +9F32:2000CEFE8292EE1082FE8210FE7C0054927C9254DA7C9210DAFE92109310D910 +9F33:2000CEFE8282EEFE828282FEFE8200FE92149212DAFE9210DA2892289344D982 +9F34:2000CDFE8500ED7E8542857EFD42017EA910F9FEA924F964A918A924FB42A5FE +9F35:2020CE1082FEEE8282448292FE14001292FE9210DA289228DA2892449344D982 +9F36:2008CC3C85D0ED1C8510857CFD540158A970F954A94CF940AA78A8A8FA2AA446 +9F37:200ECEF08222EE9282448220FE4400F892109224DAFE9210DAFE92289344D982 +9F38:2088CC508400EDFE845085FCFC5403FEA854F9FCA850F8D8A954AA52FA50A450 +9F39:2000CE7C8244EE7C8244827CFE1000FE92829210DAFE9224DA6892109328D944 +9F3A:2000CDFC8524EDFC852485FCFD040000ABFEFAAAAAAAFBFEAAAAAAAAFBFEA622 +9F3B:02001FF010101FF010101FF000003FF821083FF821083FF80000FFFE08201020 +9F3C:10043E0422443E4422443E4400447F4449447F4C49747F440004FF8422044204 +9F3D:10203E2022203E2022F83E2800287F2849287F2849287F2A002AFFCA22464280 +9F3E:10003E00227C3E1022103E1000107F1049FE7F1049107F100010FF9022104210 +9F3F:10003E00227C3E2822283E2800287F2849287F2849287F2A002AFFAA22464280 +9F40:10003E7C22203E2022203E3800287F2849587F4849487F48005AFFEA224A4206 +9F41:10403E4022403EFC22843F0400747F5449547F5449747F540004FF8422284210 +9F42:20207C2044FC7C2445FE7C2400FCFE209324FEA89270FEA80124FE2244A08440 +9F43:20007CFC44847CFC44847CFC0040FEFE9312FE9292AAFE8200FAFE0244148408 +9F44:10103E1022FE3E3822543E9200007F7C49447F7C49447F7C0044FF8022FE4200 +9F45:20207C4044FC7C8444FC7C8400FCFE8492FCFE289224FEFE0020FE5044888506 +9F46:20927D2444927C00447C7C44007CFE0092FEFE929292FEFE0080FE824482847E +9F47:20207C3C44207CFE44A27CB800E4FE9C9280FEBC92A4FEBC00A4FEBC44A4857E +9F48:20287CFE44AA7CFE44AA7CFE0000FEFE9280FEBE9280FEFE00A8FEAA44A48532 +9F49:2020FBFE8924F9FC8820FBFE0356F9DCA888FBFEA888FBFE0094F98852A490C2 +9F4A:020001007FFC0440028C7D702550255045488D6610101FF010101FF010102010 +9F4B:0100FFFE02847D78255025484D6420083FF820083FF821082548252849288108 +9F4C:0100FFFE02847D78255025484D6420083FF820083FF820082528294842888C48 +9F4D:0100FFFE02847D78255025484D6420083FF820083FF840083FF824482448FFFE +9F4E:0100FFFE02847D78255025484D6420083FF820082FE828282FE828284FE88448 +9F4F:0100FFFE02887D7025484D66A0083FF822882EE822882EE822884EE842888FE8 +9F50:020001007FFC0820044003800C603018C8260820082008200820102010202020 +9F51:020001007FFC0820044003801C70E28E2EE822882EE822882EE822885FF88008 +9F52:0100110011F811001100FFFE044024482AA831183FF824482AA831183FF80008 +9F53:082028202F202820FF20142055206B2041207F20552055226B224F22711E0100 +9F54:082028202F202820FF22142455286B3041207F6055A055226B224F22711E0100 +9F55:082028202F20287EFF401480553C6B0441087F10552055406B424F42713E0100 +9F56:100050FC5C085048FE482848AA88D6FE8218FE28AA28AA48D6889F08E2280210 +9F57:0800280C2F702840FF401440557E6B4841487F48554855486B484F4871480188 +9F58:081028102F102828FF28144455AA6B2841287F28552855286B284F4871480188 +9F59:104050405CFC5084FF042AF4AA94D69482F4FE84AA94AA88D6829E82E27E0200 +9F5A:082028202F20283EFF50145055906B1E41107F105510551E6B104F1071100110 +9F5B:102850A85CA850A8FEA829FEAAA8D6A882A8FEA8AAB8AA80D6809E80E2FE0200 +9F5C:100850285C285028FEA828AAAABCD6A882A8FEA8AAA8AAA8D6AA9EBAE2EA0386 +9F5D:102050205C205040FE482884ABFED6828200FEFCAA84AA84D6849E84E2FC0284 +9F5E:080028002F7C2844FF44144455446B44417C7F44550055286B244F4471420182 +9F5F:0800287C2F442844FF44147C55446B4441447F7C554455446B444F4471FE0100 +9F60:080028FC2F242824FF24142455546B4841807F7C554455446B444F44717C0144 +9F61:081028102F102828FF281454558A6B08417C7F04550855286B104F1071080108 +9F62:081028102E1028282828FF54008A49086B7C49047F085D286B104F1079080008 +9F63:082028202F20287CFF44148455746B5441547F54557455546B044F0471280110 +9F64:111009207FFC0400FFFE111029E8C9067FFC04402AA83FF824482AA83FF80008 +9F65:102050205CFC50A4FEA428FCAAA4D6A482FCFE20AA24AA18D6129E6AE3860202 +9F66:0800087C2F442844FF7C144455446B7C41507F52555455486B5441667F420000 +9F67:08007F7C08243E2408447F5409E809007FFC04402AA83FF824482AA83FF80008 +9F68:080028202F4C2844FF44144455446B6C41447F44554455446B444F7C71440100 +9F69:102050105C1050FEFE002844AA82D7008244FE44AA28AA28D6109E28E2440282 +9F6A:0800287C2F442844FF441444557C6B1041107F50555E55506B504F70719E0100 +9F6B:100050FE5C925092FE9228FEAA92D6B282BAFED6AA92AA92D6929E82E2FE0282 +9F6C:080028FC2F102810FF7C142455246BFE41007F00557C55446B444F44717C0144 +9F6D:100050325CCC5088FE8828E8AAAED6AA82AAFEEAAA8AAA8AD68A9E8AE3120222 +9F6E:102050205DFC5020FE502888ABFED60882E8FEA8AAA8AAE8D6A89E08E2280210 +9F6F:100050205CCE5082FE8228EEAA82D68282FEFE28AA28AA28D6489E4AE28A0306 +9F70:104850485C4851FEFE482848ABFED60082FCFE84AA84AAFCD6849E84E2FC0284 +9F71:100051F05CAE50AAFEEA28AAAAAAD6EA82AAFEAAAAB4ABE4D6249E2AE22A0230 +9F72:100E51F05C1050FEFE922892AAFED61082FEFE92AA9AAA96D6FE9E82E28A0284 +9F73:100050FE5C925010FEFE2810AA7CD654827CFE54AA7CAA10D6FE9E10E2100210 +9F74:102050105CFE5044FE2828FEAA88D69082A4FE88AA90AAA2D6849E88E3100260 +9F75:1000507C5C545054FE7C2854AA54D67C8210FEFEAA92AA96D6BE9E82E28A0284 +9F76:100050EE5CAA50AAFEEE2800AA7CD60082FEFE20AA40AA7CD6049E04E2280210 +9F77:100050FE5C825082FEFE2880AABED6908294FEBEAA8AAA88D6BE9E88E308027E +9F78:104450285C0050FEFE002828AA44D6828200FEFEAAAAAAAAD6AA9EAAE3FE0200 +9F79:082004407FFC0100FFFE04001FF8E0801FFC010009F009007FFC24482AA83FF8 +9F7A:104050405CFE5122FEAA28FAAA42D6948348FEFEAB22AAAAD6FA9E42E2940308 +9F7B:101050105CFE5010FE7C2844AA7CD644827CFE44AA7CAA44D6FE9E28E2440282 +9F7C:108850885DFE5088FEDC29AAAA88D60083FEFE22AAA0AABCD6A09F60E23E0200 +9F7D:104450445DEE5044FEEE2954AA44D600827CFE00AAFEAA10D6549E92E2500220 +9F7E:0F1408127F10497E7E1049287F2852449EFA04807FFE04402AA431143FFC0004 +9F7F:0100010011F8110011001100FFFE00002108210822882448282820083FF80008 +9F80:0820082028202F2228222824FF2800304920496055A0632241224722791E0100 +9F81:0820082028202F7E28402880FF3C0004490849105520634041424742793E0100 +9F82:0800080C28702F4028402840FF7E004849484948554863484148474879480188 +9F83:0800087C28442F442844287CFF4400444944497C554463444144474479FE0100 +9F84:1020102050505E5050885124FE12001093FC9204AA08C68882508E20F2100210 +9F85:10401040507C5E84508451F4FE940094929492F4AA84C6A882928E82F27E0200 +9F86:080008FE28222F2228222822FF4A00444980497E5542634241424742797E0142 +9F87:1008102850285E2850A850AAFEBC00A892A892A8AAA8C6A882AA8EBAF2EA0386 +9F88:100010FC50845E8450FC5084FE8400FC92A292A4AA98C69082888EA4F2C20280 +9F89:100011FC50205E2050FC5044FE4401FE92009200AAFCC68482848E84F2FC0284 +9F8A:0800087C28442F4428442844FF7C001049104950555E635041504770799E0100 +9F8B:100E11F050105EFE50925092FEFE001092FE9292AA9AC69682FE8E82F28A0284 +9F8C:100010FE50825E8250FE5080FEFE009092A492FEAA92C69082FC8E90F31002FE +9F8D:104008407E7E2440187EFF02007E7E40427E7E40427E7E40427E42404A42443E +9F8E:00003FFE22202FBC2520223C3F84203C2FA028BC2FA028BC2FA048BC48A2899E +9F8F:08407F7C1440FF7C22043E7C22403E782242263E08200820FFFE082010202020 +9F90:00807FFE42205FBC4920463C7F84403C5FA050BC5FA050BC5FA050BC52A2911E +9F91:08407F7C1440FF7C22043E7C22403E782242263E00003FF80200FFFE0860701C +9F92:08407F7C1440FF7C22043E7C22403E7C2242263E00003FF80000FFFE11102308 +9F93:21102090FBDE2010425E79824BDEC8107BDE4A504BDE7A504BDE4A504A525ACE +9F94:08407F7C1440FF7C22043E7C22403E782242263E04403FF80440FFFE08201010 +9F95:010006C01830EFEE00001FF010101FF008403E7C1440FF7822083E782242263E +9F96:88884E4EF8F8A8A84E4EF2F20E0EE8E8AEAEA8A8EEEEA8A8EEEEA8A8AAAAA6A6 +9F97:3FF801007FFE492284143BB82AA83BB808403E7C1440FF7822083E782242263E +9F98:08403E7C1440FF7822083E782242487EE8E8AEAEF8F80E0EE2E2AEAEE8E8AEAE +9F99:0420041004100400FFFE048004880488049008A008C0108211822282447E8000 +9F9A:042004107FFC092009C4170420FCC44004403FF804400440FFFE082010102008 +9F9B:010006C01830EFEE00001FF010101FF004400420FFFE0910116021844F0480FC +9F9C:04003FF820083EF802807A800AFCFE940AD47AA402A47AD40A94FEFC0A8279FE +9F9D:1080E7FC240427BC20A0FEBE22A237B66AAA66AAA0B626A222BE27A022A2267E +9F9E:49202A3E7F485DA86B10456E3FF820083EF802807AF80AD8FEA80AD87A8A01FE +9F9F:040004000FE0102020407FF8A10821083FF8210821083FF821080102010200FE +9FA0:010002800C603018DFF600003BB82AA83BB800003FF824883FF8248824A82010 +9FA1:08100810141022105D3E80A27F4455907F1000107F1055287F28552455444382 +9FA2:0808081C14F022105D1080907F7C55107F3800347F5455547F92551055104310 +9FA3:080008FC140422045D7C80847F0455FE7F1000927F5455387F54559255504320 +9FA4:0848084A146C22485D4A80EA7F5655207F7E00427F42557E7F425542557E4342 +9FA5:0800087E140822105D7C80C47F44557C7F44007C7F4455447F7C552855444382 +9FA6:112410A410A813FE16025AFA508890F8102011FC112429242524452C40208020 +9FA7:01FC010479FC490449FC484479F848504FFF48804BFC7D0449FC010401FC0104 +9FA8:00003FFC228024402FFC3440244027F8244027F82440244027FC24003FFC0000 +9FA9:04200420FFFF0420240CFF7024403C40087F7E484A487E480848FF8808880908 +9FAA:0820082008207E2008200820FF20085008500E502848288828845B02480087FF +9FAB:10101010FF1010287E445282537C7E10521052107EFE1010FF10101010101010 +9FAC:100013FE1A02268A22527FFE924212227FFE128216825A8232FA1E02E20A0204 +9FAD:7DFE51227DFE512251227DFE504850487EFC0248564853FE8200024814840902 +9FAE:7FDE514A7CC6514A52527CFC50A450FC7EA402FC564852FE824803FE14840902 +9FAF:10281024282025FE4120B920112411247D28111815105910312A1E2AF2464482 +9FB0:0000000000000100010001000100010011F011001100110011002D00430080FC +9FB1:00007FFC4004402448244424424441444084414442244414581440047FFC4004 +9FB2:1020101029FE251041FEBD10117C11547D7C1154157C591031FE1E10E2104410 +9FB3:101010107EFC10101010FEFE2448529410107E7C1010101010101E10E1FE0000 +9FB4:00000000000000007FFC00080010032000C00020001000000000000000000000 +9FB5:00F87F0001003FF80100FFFE0200040008003000C00000000000000000000000 +9FB6:010001007FFC01003FF80100FFFE000000000000000000000000000000000000 +9FB7:082008207FFC08200820FFFE0000000000000000000000000000000000000000 +9FB8:01001110092001007FFE40048008000000000000000000000000000000000000 +9FB9:1110092001003FFC010002007FFE082010102008C00600000000000000000000 +9FBA:10001000FE0010007C00440044007C0044007C0054001000FE00100010001000 +9FBB:208827E84812F3DC20084BD2F83E03C0AA52ABD2000000000000000000000000 +9FBC:0040207C204027FE240223FCFA642492210823FC250A21F83908C1F8010801F8 +9FBD:1080108010FC1108561055FC5524992411FC1124112429FC24004554412A822A +9FBE:08400840087E7F424AA248AA48727EFE4222627254AA4D2288229402220A4004 +9FBF:08200820FFFE0820044008400BF81040304057FC904013F81040104017FE1000 +9FC0:0420FFFE04207F7850485E8665784A487F3000C8FFFE04403FF824482BA83FF8 +9FC1:209010900090FC9003FC78900090789000907BFE48004800489079084A040404 +9FC2:10201040FEFC10847CFC54847CFC548054FE7C8054FE1002FEAA10AE1152100C +9FC3:00400040F7FC90409250F148914892D4F460904090A090A0F110920804040802 +9FC4:10000BF840882288098850C82108222825100100FFFE05400920111C61080100 +9FC5:21FC102003FEFA2209AC1020118C382054509188162611F8100810D010201010 +9FC6:404020400040FBFE0880108020F830886948A150215022202220245028882104 +9FC7:088008F81110122035FC5044904417FE1044104413FC10441040104011401080 +9FC8:080009FC11042104490409FC1124312051209110111011101208120814041802 +9FC9:08000BFE104020404840084013F8304850489088108810881088108817FE1000 +9FCA:08200820FFFE082008204000202090204120293C11201120E1202120212027FE +9FCB:204017FE0040FBFC08001BF816083BF855109FFE100013F81208120813F81208 +9FCC:008040402FFE2000800043F84A080BF8120813F8E04022482244244229420080 +9FCD:2080208020FC21082290F86021982626202021FC3C20E22043FE002000200020 +9FCE:00100010FA102110217E401078104F28C92849244944494279024A80447E0000 +9FCF:102010203DFE202041FCBC20102013FEFC40107C108411481450182010D80706 +9FD0:200024FE72285228A0FE74AA52AA53AA79AE52C256827AFE0282AA82AAFE0082 +9FD1:000047FE2040204000400840084013FC1040E040204820442044204027FE0000 +9FD2:08200820FFFE08207FFC02001FF0101011101110111012100280046018106008 +9FD3:08200820FFFE08207FFC04001FF010101FF010101FF010101FF0082010102008 +9FD4:200023FE3C0821E841287DE8900013FEFC0811E81128112815E8180810280010 +9FD5:200020FC7C84448488A47C94549454847FFE548454847C8401041D04E2144408 +9FD6:010001000280044008203018CFE600001FF01010101010101FF010100000FFFE +9FD7:01000280044008203018C8060BF0089017FE309053F09080110012000000FFFE +9FD8:10101F101528252825447F44A5BA250025002F7C2544244424442844287C3044 +9FD9:10101F1015FE2510257C7FC4A5442544257C2F28252824282448284A288A3306 +9FDA:20503E502A5C4A544AF4FF484A484A744AD45F624A5C485448545054505C6054 +9FDB:040084FE5E54449205FE3E924AD651BA68D6CE9252D66ABA44D64C92529A2184 +9FDC:480044FE44544092FFFE409272D652BA52D6CA924AD64ABA44D644925F9AC084 +9FDD:40005FFE55545592F5FE5F9248D6C4BAFFD6C8924ED64ABA4AD652925A9A6484 +9FDE:0200E2FE42544A926BFEAA92AAD6AABAEAD6AA922AD62ABA42D642924A9A8484 +9FDF:11203920E120253E25422544FD902510655475546D52A592A192211025502220 +9FE0:120032FEE2542A922BFE2A92FAD62ABA6AD67A926AD6AABAA2D622922A9A2484 +9FE1:0000FEFEAA54AA92FFFE24922AD65FBADAD62F925AD6FFBA0AD6AA92AF9A8884 +9FE2:0010FF10552855287544564456BA75005500557C55447D44D6441444147C1444 +9FE3:0010FF1055FE5510757C564456447544557C552855287D28D648144A148A1506 +9FE4:0050FF50555C555475F456485648757455D45562555C7D54D6541454145C1454 +9FE5:40002EFEEA54AA92ABFEEC92ACD6AABAEAD69A92EAD6AABA9CD6B892D89A8884 +9FE6:51445154FA54525425FEF91AAA0AAAFAAE0AFAEA22AA22A452B44AAA4B0A820A +9FE7:0400EEFEAA54BA92A4FECA92D1D6AEBAA4D6A492BFD6C4BA8ED684929F9A8084 +9FE8:00007EFE1054FE9291FE569210D6D6BA00D67E924AD64ABA7ED64A924A9A7E84 +9FE9:20003CFE24547E92D3FE7E9252D67EBA2AD6D5927ED642BA7ED642927E9A4284 +9FEA:211010A017FC0080F14816D0116816A8112416A4284047FE0000244422224222 +9FEB:20003FFC40009FF000007FF008107FD055504E507FD04E52554AFFEA0A06F1E2 +9FEC:000000007DFF1111111121113D1165FFA5112511251125113DFF210100000000 +9FED:104010401C7F208121127A1090101054FC521092109111111410181010500020 +9FEE:00803FFE200024442FFE244427FC200027FE284223FC2244424C424080400040 +9FEF:000050807EFE50AA952A384AD11212860C603118C92605407FFC03800D60711C +9FF0:01082108110817DF810847C8545E17C8244827DFC10947C9410D410A41080108 +9FF1:00000000FDFC11241124112411247DFC11041100110011001D02E10240FE0000 +9FF2:0044FDFF004400007CFF4511441044FE7C120012441228222E42F08441080000 +9FF3:204420823DE2452F49297DAAD56855E97D2A55AC55687D295529B2292AA70040 +9FF4:102010201E7E228225447E28AA182A243E422A812A303E0800040E6070102008 +9FF5:202020203C2045FE48207C20D42055FC7C00542054127D5101451A45E03C4000 +9FF6:204020203DF8450849087DF8D50855087DF8554455487D3001101D48E1864100 +9FF7:102010101E7C220024443E286AFE2A003E7C2A442A443E7C00440E44707C2044 +9FF8:204420823DE2452F49297DAAD56855E97D2A55AC55687D2901291E29E2A74040 +9FF9:202020103CFF4481494A7C28D55256657CC4553C54107C9200921C92E0FE4002 +9FFA:081008207F7C08443E6408547F44104C1E40227E24025402087A1402200A4004 +9FFB:2010CE108210EEFE82208248FE48008892FF92C9DB499249DA4D924A9308D908 +9FFC:2040CE408240EE4782F58255FE55005592559255DA559255DA9592D793A5D900 +9FFD:00007FFE73866DBE718E7DBE73BE7FFE7FFE618E6FB663B66FB66F8E7FFE0000 +9FFE:00007FFE73866DBE718E7DBE73BE7FFE7FFE61866FBE638E6FBE6F867FFE0000 +9FFF:00007FFE73866DBE718E7DBE73BE7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +A000:000000000000000010101FF010101010101010107C101010082007C000000000 +A001:000003800440000010101FF010107C10121012107C101010082007C000000000 +A002:000000000000000010101FF010107C10121012107C101010082007C000000000 +A003:000000000000000000600050004800403BC004400A400A4004403BC000000000 +A004:0000000000000000139014500C6007C0044004400E4004400440038000000000 +A005:0000038004400000018001600100038004400440038001000D00030000000000 +A006:0000000000000000018001600100038004400440038001000D00030000000000 +A007:0000000000000000071008F009900A800A800A800A80099008F0071000000000 +A008:000000000000000000080008018831680D180300010001000100010000000000 +A009:000003800440000001A0016001200D2003200120012001200D20032000000000 +A00A:000000000000000001A0016001200D2003200120012001200D20032000000000 +A00B:0000000000300040034002C002401A3006000200020002001A00060000000000 +A00C:0000038004400000101011101110111010101FF0101011101110111000000000 +A00D:0000000000000000101011101110111010101FF0101011101110111000000000 +A00E:00000000000004200A500A50042004200420042004200420042003C000000000 +A00F:00000000000000000FE0111011100FE001000700080007000800070000000000 +A010:00000380044000000C700A880988088808A808A808A848882888187000000000 +A011:00000000000000000C700A880988088808A808A808A848882888187000000000 +A012:00000000000000000C700A880988088808880888088848882888187000000000 +A013:000003800440000000603858044008401FC0084004403840034000C000000000 +A014:000000000000000000603858044008401FC0084004403840034000C000000000 +A015:00000000000000001110111011100EE000000000044004400440044000000000 +A016:0000000000000000038004400440055004E004E0055004400440038000000000 +A017:000003800440000010F011001200120012001FF012001200110010F000000000 +A018:000000000000000010F011001200120012001FF012001200110010F000000000 +A019:0000000000000000062005A00460040004F0050007F0050004F0040000000000 +A01A:00000000000000001C18222022402240224023F82240224022201C1800000000 +A01B:000003800440000007D00820105010901110111012101410082007C000000000 +A01C:000000000000000007D00820105010901110111012101410082007C000000000 +A01D:00000000000000000700089008880888089008E0089008880888071000000000 +A01E:0000000000000000082008200FE0082008200380044004400440038000000000 +A01F:0000038004400000082008200FE00820082000001110111011100EE000000000 +A020:0000000000000000082008200FE00820082000001110111011100EE000000000 +A021:0000000000000000082008200FE0082008200000000004400820101000000000 +A022:000003800440000003E0041009D00090009001D000100E100990086000000000 +A023:000000000000000003E0041009D00090009001D000100E100990086000000000 +A024:00000000000000000FE0010001000100010001000100010001000FE000000000 +A025:000000000000000000F01700090014801070148009001700010000F000000000 +A026:000003800440000007C0082008200BA0092009200BA00820082007C000000000 +A027:000000000000000007C0082008200BA0092009200BA00820082007C000000000 +A028:00000000000000001FF0010001001FF0000000001FF0010001001FF000000000 +A029:00000380044000000EE01110111001000100000011101110082007C000000000 +A02A:00000000000000000EE01110111001000100000011101110082007C000000000 +A02B:00000000000000000FE0010009200540038003800540092001000FE000000000 +A02C:00000000000000000FE01010101010100FE00100012001200100010000000000 +A02D:0000038004400000010001000100010001200120012001200D20030000000000 +A02E:0000000000000000010001000100010001200120012001200D20030000000000 +A02F:000000000000000001E0020004E0050005000500050004E0020001E000000000 +A030:00000380044000000860088008800BE008800BE0088008800880070000000000 +A031:00000000000000000860088008800BE008800BE0088008800880070000000000 +A032:0000000000000000030002C00200039002500220022002501B90060000000000 +A033:0000038004400000018001600100016001800160011001600D80036000000000 +A034:0000000000000000018001600100016001800160011001600D80036000000000 +A035:00000000000000000CC00AA00990088008801C800880088022801C8000000000 +A036:00000380044000000030002800241FE022204AA042204AA022201FE000000000 +A037:00000000000000000030002800241FE022204AA042204AA022201FE000000000 +A038:00000000000000000060005000480FC010403FC020403FC010400FC000000000 +A039:000003800440000001C002201220122012E017201A200220022001C000000000 +A03A:000000000000000001C002201220122012E017201A200220022001C000000000 +A03B:00000000000000000000110011000A500A5004500A500A501100110000000000 +A03C:00000380044000000E0011001100115011501F501150115011000E0000000000 +A03D:00000000000000000E0011001100115011501F501150115011000E0000000000 +A03E:000000000000000007C0082011101110082007C00100111011100EE000000000 +A03F:0000000000000000000010101010101010101FF0101010101010101000000000 +A040:00000380044000001110111011101FF01110111011101110092007C000000000 +A041:00000000000000001110111011101FF01110111011101110092007C000000000 +A042:0000000000000000088008900890089008F00890089008900880070000000000 +A043:000003800440000007F008000FF0080007F000800AA00AA00AA0008000000000 +A044:000000000000000007F008000FF0080007F000800AA00AA00AA0008000000000 +A045:000000000000000007F009100FF0091007F0001008100810042003C000000000 +A046:0000000000000000070008A0089008901CA008C01CA008900890072000000000 +A047:00000380044000000920092009200540038000000FE0000000000FE000000000 +A048:00000000000000000920092009200540038000000FE0000000000FE000000000 +A049:000000000000000007F008000FF0080007F0008007F0008007F0008000000000 +A04A:0000000000000000062005A004600400040004000400046005A0062000000000 +A04B:00000380044000000FE0102010200FE0102010200FE0102010200FE000000000 +A04C:000000000000000007F00810081007F00810081007F00810081007F000000000 +A04D:00000000000000C000B0078008800A800A800880078000800680018000000000 +A04E:00000380044000000E0011001150155015F015501150110011000E0000000000 +A04F:00000000000000000E0011001150155015F015501150110011000E0000000000 +A050:000000000000000000C000A00090078008801080108010800880078000000000 +A051:0000038004400000000030182828244822A8212822A824482828301800000000 +A052:0000000000000000000030182828244822A8212822A824482828301800000000 +A053:00000000000000000CC00AA0099008801CA008A008A008A022801C8000000000 +A054:000003800440000008C008A00890008007800890109010900880078000000000 +A055:000000000000000008C008A00890008007800890109010900880078000000000 +A056:00000000000000000380044007C0044007C004400380111011100EE000000000 +A057:0000038004400000010011100920054003800380054009201110010000000000 +A058:0000000000000000010011100920054003800380054009201110010000000000 +A059:000000000000000037D80820145012901290129012901450082037D800000000 +A05A:000000000000000007C008200820082007C011100EE000000100010001000000 +A05B:00000380044000000000007800800D180B200978092009186880187800000000 +A05C:0000000000000000003C0040008C069005BC0490048C0440343C0C0000000000 +A05D:0000000000000000181804200240024002400FF0024002400420181800000000 +A05E:00000000000000000000300C0FF00420024003C0024004200FF0300C00000000 +A05F:000003800440000000000406020A47122AA212422AA24712020A040600000000 +A060:000000000000000000000406020A47122AA212422AA24712020A040600000000 +A061:00000000000000001110111011100EE0000000000FE0000000001FF000000000 +A062:00000380044000000CA00AA009A000200FA000200FA0002001A0006000000000 +A063:00000000000000000CA00AA009A000200FA000200FA0002001A0006000000000 +A064:0000000000000000038014501450145004400440145014501450038000000000 +A065:0000000000000000008000800790089010901090089007900080008000000000 +A066:000003800440000001000920054003800540092001000FE001000FE000000000 +A067:000000000000000001000920054003800540092001000FE001000FE000000000 +A068:00000000000000000EE01110010007C00820111011100100082007C000000000 +A069:00000380044000000640054034D02C10231020D0203007800000078000000000 +A06A:0000000000000000032002A01A68160811881068101803C0000003C000000000 +A06B:0000000000000000314029442548235000603F4000400240014000C000000000 +A06C:0000000000000000304C08500850304C034002C0320C0A100A10320C00000000 +A06D:00000380044000000010019001500D300B000920092029201900010000000000 +A06E:0000000000000000000800C800A8069805800490049014900C80008000000000 +A06F:000000000000000000C018B01688118000900090189016801180100000000000 +A070:0000038004400000002000201820162011A0106001C0022002A002A000000000 +A071:0000000000000000002000201820162011A0106001C0022002A002A000000000 +A072:0000000000000000066005D0044005400540044007C0044015400CC000000000 +A073:0000038004400000019001700110010001000100010011001D00130000000000 +A074:0000000000000000019001700110010001000100010011001D00130000000000 +A075:0000000000000000018001600D00030001000100018001600D00030000000000 +A076:000000000000000003000AC00A300A0002A002A00BE00AA00AA0020000000000 +A077:000003800440000007C009200FE0092007C0010001400150011000E000000000 +A078:000000000000000007C009200FE0092007C0010001400150011000E000000000 +A079:00000000000000001860165011C81040104011F0104011F01040104000000000 +A07A:00000700088000001FC00220021002001FC0020002001FC00200020000000000 +A07B:00000000000000001FC00220021002001FC0020002001FC00200020000000000 +A07C:0000000000000000010001000FE001000100010001000FE00100010000000000 +A07D:00000000000000000E0011141114208420FC20842094249424801B0000000000 +A07E:00000380044000000000044004401FF00280010002801FF00440044000000000 +A07F:00000000000000000000044004401FF00280010002801FF00440044000000000 +A080:0000000000001010145014501290129011101290129014501450101000000000 +A081:0000000000000000038802680E18124022402240224002180268038800000000 +A082:038004400000111011100EE000000100010007C00100010010100FE000000000 +A083:000000000000111011100EE000000100010007C00100010010100FE000000000 +A084:00000000000000001110111011100EE0000001000100111010100FE000000000 +A085:000000000000000003D005300910090009F0090009000910052003C000000000 +A086:000003800440000009C00A2002200E20122012200E2002200A2009C000000000 +A087:000000000000000009C00A2002200E20122012200E2002200A2009C000000000 +A088:0000000000000000010007C009201110115011501110092007C0010000000000 +A089:00000380044000003838454445444444444447C4444444444544393800000000 +A08A:00000000000000003838454445444444444447C4444444444544393800000000 +A08B:0000000000000770088009A00AA00A800BE00A800AA009A00880077000000000 +A08C:000003800440000011501150111011501F50111011501150092007C000000000 +A08D:000000000000000011501150111011501F50111011501150092007C000000000 +A08E:00000000000000006360145813461440634000400C400B4008C0080000000000 +A08F:000003800440000031182928254823883FF82388254829283118010000000000 +A090:000000000000010031182928254823883FF82388254829283118010000000000 +A091:0000000000000000018001600100092009200920092001000D00030000000000 +A092:00000380044000001110092007C001001FF0010007C009201110111000000000 +A093:00000000000011101110092007C001001FF0010007C009201110111000000000 +A094:000000000000000007C00920111012901290129013901450082007C000000000 +A095:0000038004400000155015501110092007C001000100110011000E0000000000 +A096:0000000000000000155015501110092007C001000100110011000E0000000000 +A097:0000000000000000001001900150013001000920092009200100010000000000 +A098:00000000000000000600058004000400058004200710048034480C4800000000 +A099:0000038004400000001030102C10231020D02038204400440044003800000000 +A09A:0000000000000000001030102C10231020D02038204400440044003800000000 +A09B:000000000000000000C030B0088C048004803F80048004800880308000000000 +A09C:00000380044000000240024012480A50046000400C400B4008C0080000000000 +A09D:00000000000000000240024012480A50046000400C400B4008C0080000000000 +A09E:000000000000000009800960091809000180016031182D002300200000000000 +A09F:000000000000000000600050004807C00840124015401240084007C000000000 +A0A0:000003800440000001801160111801000F8811482520250011000F0000000000 +A0A1:000000000000000001801160111801000F8811482520250011000F0000000000 +A0A2:000000000000000003C004200400020001800040012002A0092007C000000000 +A0A3:0000000000000FE008200440028002A0012002A00280044008200FE000000000 +A0A4:00000380044000000020092009200020092009200020062001A0006000000000 +A0A5:00000000000000000020092009200020092009200020062001A0006000000000 +A0A6:000000000000000007C00920155015501110111015501550092007C000000000 +A0A7:0000038004400000111011101010082007C00000082008200820082000000000 +A0A8:0000000000000000111011101010082007C00000082008200820082000000000 +A0A9:000003800440000001000100012009200920090001C001200D10031000000000 +A0AA:000000000000000001000100012009200920090001C001200D10031000000000 +A0AB:00000000000008500850001008500850001008500850031002D0023000000000 +A0AC:000003800440000007C009200FE0092007C001000540155011100EE000000000 +A0AD:000000000000000007C009200FE0092007C001000540155011100EE000000000 +A0AE:000000000000000007C0082016D01290111017D010101390082007C000000000 +A0AF:0000038004400000031002D002300200023002C0030012C00A30060000000000 +A0B0:0000000000000000031002D002300200023002C0030012C00A30060000000000 +A0B1:00000000000000C800A8009800800FF800800FF8008018800680018000000000 +A0B2:000003800440000007C00820145022882128212822881450082007C000000000 +A0B3:000000000000000007C00820145022882128212822881450082007C000000000 +A0B4:0000000000000000000800C800A8109810801090009018900680018000000000 +A0B5:00000000000000001860175012C81240124012401FC012401240124000000000 +A0B6:0000038004400000038004400440044004401FF0044004400440038000000000 +A0B7:0000000000000000038004400440044004401FF0044004400440038000000000 +A0B8:00000000000000001110111011100EE00000010007C0010007C0010000000000 +A0B9:000000000000121011101090121011101090121011101090082007C000000000 +A0BA:000003800440000000C006B0058004C004B014800CC000B00680018000000000 +A0BB:000000000000000000C006B0058004C004B014800CC000B00680018000000000 +A0BC:00000000000000000638054404C404541F5404541F54044434440C3800000000 +A0BD:000000000000000000C000A00090008007800880128012800880078000000000 +A0BE:000003800440000001800160011801C0012001C0010007C00920092000000000 +A0BF:000000000000000001800160011801C0012001C0010007C00920092000000000 +A0C0:000000000000000003C00420081000100010001000100E100990086000000000 +A0C1:000003800440000001000118012401240FE40124012431180D00030000000000 +A0C2:000000000000000001000118012401240FE40124012431180D00030000000000 +A0C3:0000000000000000009000880A880A900AE00090008818880690018000000000 +A0C4:0000038004400000042004200420042007E004200420242014200C2000000000 +A0C5:0000000000000000021002100210021003F00210021012100A10061000000000 +A0C6:00000000000000000388045003E0004001F0024801F018400640018000000000 +A0C7:00000380044000000080008008F008800880008000F018800680018000000000 +A0C8:00000000000000000080008008F008800880008000F018800680018000000000 +A0C9:00000000000000000C200B2008E008000F700880094008800F70080000000000 +A0CA:0000038004400000101010101010082007C00000082008200820082000000000 +A0CB:0000000000000000101010101010082007C00000082008200820082000000000 +A0CC:0000000000000000020002200220022002000FF0020002200220022000000000 +A0CD:00000000000000000380044004401EF008201EF008200920092006C000000000 +A0CE:000003800440000000C000B00480078004800080008000800680018000000000 +A0CF:0000000000000000018000B00480078004800080008000800680018000000000 +A0D0:000000000000000000C000B008800F800880008000800E800980080000000000 +A0D1:00000000000009200AB00AAC092008200FE0082009200AA06AA0192000000000 +A0D2:000003800440000018081608118810681018014009480948041003E000000000 +A0D3:000000000000000018081608118810681018014009480948041003E000000000 +A0D4:00000000000000001808160811881068101802200AA80888041003E000000000 +A0D5:0000038004400000012000A018E0052002200220052018E000A0012000000000 +A0D6:0000000000000000009000500C7002900110011002900C700050009000000000 +A0D7:0000000000000000092005200720090011F01100092007200520090000000000 +A0D8:0000000000000000030012C01230120002200220122012001200020000000000 +A0D9:00000380044000000820282828282828183008200FE008200820082000000000 +A0DA:00000000000000000820282828282828183008200FE008200820082000000000 +A0DB:0000000000000000000002400240181016601180166018100240024000000000 +A0DC:0000038004400000000801883968051823002300050039000100010000000000 +A0DD:0000000000000000000801883968051823002300050039000100010000000000 +A0DE:0000000000000000009000A000C0009000A000C0188016801180100000000000 +A0DF:0000038004400000111011101510092017C0010031002D002300200000000000 +A0E0:0000000000000000111011101510092017C0010031002D002300200000000000 +A0E1:000000000000000010101010082007C00100012031402D802300200000000000 +A0E2:000000000000000011101110082007C001001900150013001000000000000000 +A0E3:0000038004400000001800200040064005C004400440044034200C1800000000 +A0E4:0000000000000000001800200040064005C004400440044034200C1800000000 +A0E5:00000000000000001C1013901170010001C009200920092001C0010000000000 +A0E6:000000000000000011101110111011100110012001C031000D00030000000000 +A0E7:000003800440000009200540139013900540092001000FE001000FE000000000 +A0E8:000000000000000009200540139013900540092001000FE001000FE000000000 +A0E9:00000000000000003FF80100010009C00920092009C0010001003FF800000000 +A0EA:000000000000000007C0082010101FF0101010101FF01010082007C000000000 +A0EB:0000038004400000101010101390145008201450139010101010101000000000 +A0EC:0000000000000000101010101390145008201450139010101010101000000000 +A0ED:0000000000000000030002C0020032380EC803080EC832381A00060000000000 +A0EE:0000000000000000024002401A48164813C81268125802400240018000000000 +A0EF:000003800440000000800C88129012A012C00C80008018800680018000000000 +A0F0:000000000000000000800C88129012A012C00C80008018800680018000000000 +A0F1:000000000000002401A41F74212C212011000F001100210021001F0000000000 +A0F2:000003800440000001E000100C10102011C010200C100010001001E000000000 +A0F3:000000000000000001E000100C10102011C010200C100010001001E000000000 +A0F4:0000000000000000003000280224142008A015202220052008A0004000000000 +A0F5:0380044000001C700380044008203E2008203E200820044003801C7000000000 +A0F6:0000000000001C700380044008203E2008203E200820044003801C7000000000 +A0F7:000000000000008000400FE00820044002800100028004400920111000000000 +A0F8:000003800440000000200020002001E002201F2004201F20022001E000000000 +A0F9:000000000000000000200020002001E002201F2004201F20022001E000000000 +A0FA:000000000000018001402128210811104FE441044FE411102108210800000000 +A0FB:000003800440000010101010082007C000000820082009200100010000000000 +A0FC:000000000000000010101010082007C000000820082009200100010000000000 +A0FD:000000000000000001802148210811100FE401040FE411102508230800000000 +A0FE:000003800440000011101110092007C01110111001001FF001001FF000000000 +A0FF:000000000000000011101110092007C01110111001001FF001001FF000000000 +A100:0000000000000000008832842A84268800F0008832842A842688008000000000 +A101:000003800440000000C004A0029012800C800080188016801180100000000000 +A102:000000000000000000C004A0029012800C800080188016801180100000000000 +A103:000000000100020001000080111011100EE00440054005400440038000000000 +A104:0000038004400000001C0020004C065005D004500450044C34200C1C00000000 +A105:0000000000000000001C0020004C065005D004500450044C34200C1C00000000 +A106:00000000000000000420042072424E4241824272424E04200420042000000000 +A107:0000000000000000110011201120112011001FF81100112011200E2000000000 +A108:0000000003800440000010180828044812881108128804480828101800000000 +A109:0000000000000000000010180828044812881108128804480828101800000000 +A10A:00000000000000000000080C04141A2415441084514432240414080C00000000 +A10B:0000038004400000002000A000A008A00EA009A00020062001A0006000000000 +A10C:0000000000000000002000A000A008A00EA009A00020062001A0006000000000 +A10D:00000000000000000100010007C009200920082008200820082007C000000000 +A10E:000003800440000001800160011801001FF0010031002D002300200000000000 +A10F:000000000000000001800160011801001FF0010031002D002300200000000000 +A110:000000000000000001800160011801001FF00100010031000D00030000000000 +A111:03800440000001C00130010007C0054003800380054007C00100190007000000 +A112:0000000001C00130010007C0054003800380054007C001001900070000000000 +A113:000000000000000018081608118810E81098008003E004900888088800000000 +A114:0000000000000000041008900910071009100890041000100190007000000000 +A115:00000380044000001E20212021C01E8000F0088008F008800088007000000000 +A116:00000000000000001E20212021C01E8000F0088008F008800088007000000000 +A117:00000000000000000FE01010101010100FE0010001F00100010000F000000000 +A118:000003800440000001800160011801001FF00100050005000500010000000000 +A119:000000000000000001800160011801001FF00100050005000500010000000000 +A11A:000000000FE0000001800160011801001FF00100010031000D00030000000000 +A11B:00000380044000000080008027F02080208027F0008018800680018000000000 +A11C:00000000000000000040004013F81040104013F800400C40034000C000000000 +A11D:00000000000000000008018801680118010001001FF001000100010000000000 +A11E:000003800440000008C004B024801880008007F0008000800680018000000000 +A11F:000000000000000008C004B024801880008007F0008000800680018000000000 +A120:00000000000000000850085007900010079008500850031000D0003000000000 +A121:00000000000000000FE0001003900410041004100410039000100FE000000000 +A122:00000380044000000820082000001FE0001000101FE000000840084000000000 +A123:00000000000000000820082000001FE0001000101FE000000840084000000000 +A124:0000000000000FE0001000100F9000100F9000100F90001000100FE000000000 +A125:0000000000000000711C092009201010600C1010092009200920701C00000000 +A126:03800440000000100FF000100FF000100FF00010031002D00230020000000000 +A127:00000000000000100FF000100FF000100FF00010031002D00230020000000000 +A128:000000000000000008040AC40AB4088C0A800A8008804A802A80188000000000 +A129:0000000000000000018001600100018001600100018001600D00030000000000 +A12A:000003800440000001801160111811800160011831802D602318200000000000 +A12B:000000000000000001801160111811800160011831802D602318200000000000 +A12C:00000000000000003C78410441043C78410441043C78410441043C7800000000 +A12D:000003800440000012480A88070807080A8812480F8802080788007800000000 +A12E:000000000000000012480A88070807080A8812480F8802080788007800000000 +A12F:0000000000000000030002C00230030002C0023002000F801240124000000000 +A130:00000000000000000E00117011801100112011201100118011700E0000000000 +A131:000003800440000007C00820101010101010101010101010082007C000000000 +A132:000000000000000007C00820101010101010101010101010082007C000000000 +A133:000000000000000007F008080808080807F000401650155014D0040000000000 +A134:000003800440000001800D600B000928092829F8192801280D00030000000000 +A135:000000000000000001800D600B000928092829F8192801280D00030000000000 +A136:000000000000000018081608118810E810980080049004900490008000000000 +A137:000003800440000010C008B00480108008800480008000800680018000000000 +A138:000000000000000010C008B00480108008800480008000800680018000000000 +A139:000000000000000018881688118810E8109800800FF8008000800FF800000000 +A13A:0000038004400000210821083FF82108210801000FE0010001000FE000000000 +A13B:0000000000000000210821083FF82108210801000FE0010001000FE000000000 +A13C:0000000000000000010021083FF82108010007C0092011101110111000000000 +A13D:00000000000000001FF0010007C0092009200920092007C001001FF000000000 +A13E:0380044000001FF00100311C0D6403840D64311C01001FF001001FF000000000 +A13F:0000000000001FF00100311C0D6403840D64311C01001FF001001FF000000000 +A140:000000000FE001000FE001003908270821C8213801000FE001000FE000000000 +A141:00000380044000000FE001000380054009200920092009200540038000000000 +A142:00000000000000000FE001000380054009200920092009200540038000000000 +A143:00000000000000000FE001000FE0082004400280010002800440082000000000 +A144:000000000000000001800140012001000100092007C000000920092000000000 +A145:0000038004400000111011101FF011101110092007C000000920092000000000 +A146:0000000000000000111011101FF011101110092007C000000920092000000000 +A147:000000000000031002D002300F800200020010400F8000001240124000000000 +A148:00000380044000000EE0010002800440054005400440028001000EE000000000 +A149:00000000000000000EE0010002800440054005400440028001000EE000000000 +A14A:000000000000000008600FD02848184003C0044008400840044003C000000000 +A14B:0000000000001FC0104008800510051003F005100510088010401FC000000000 +A14C:0000038004400000111011101110092007C00100110011001100010000000000 +A14D:0000000000000000111011101110092007C00100110011001100010000000000 +A14E:00000000000000000F8010801088088807F808881088108010800F8000000000 +A14F:000003800440000011101110111011101110111011101110092007C000000000 +A150:000000000000000011101110111011101110111011101110092007C000000000 +A151:0000000000000000008000801808160811881068101800000490049000000000 +A152:0000038004400000002008200FE008200020002008200E2009A0006000000000 +A153:0000000000000000002008200FE008200020002008200E2009A0006000000000 +A154:000000000000000003800440044009200920082008200920092006C000000000 +A155:000003800440000001800160210817D0111017D0210801000D00030000000000 +A156:000000000000000001800160210817D0111017D0210801000D00030000000000 +A157:00000000000000000C60125013C812400C4000400C400B4008C0080000000000 +A158:00000380044000000C60125012480C4000401FF80040074004C0040000000000 +A159:00000000000000000C60125012480C4000401FF80040074004C0040000000000 +A15A:0000000000000000188824A824A824A818A800F000A018A006A0018000000000 +A15B:0000000000000000004007F008400FF0084007F000400E4009C0080000000000 +A15C:0380044000000400099012501250125011900810031002D00230020000000000 +A15D:0000000000000400099012501250125011900810031002D00230020000000000 +A15E:0000000004000800101014501450111011100810031002D00230020000000000 +A15F:0000038004400000183024282424242019E0022004200420022001E000000000 +A160:0000000000000000183024282424242019E0022004200420022001E000000000 +A161:00000000000000000660095829402940264010400FC00040034000C000000000 +A162:00000000000000000000088008800520052003E0052005200880088000000000 +A163:00000380044000000120012001200120012001C00100111011100FE000000000 +A164:00000000000000000120012001200120012001C00100111011100FE000000000 +A165:00000000000000000FE01010101010100FE001001FF001001FF0010000000000 +A166:00000380044000000FE01010101010100FE001001F2001201F20010000000000 +A167:00000000000000000FE01010101010100FE001001F2001201F20010000000000 +A168:0000000000000000098011601118090001001FF001001FF00100010000000000 +A169:0000038004400000018001600118010001001FF001001FF00100010000000000 +A16A:0000000000000000018001600118010001001FF001001FF00100010000000000 +A16B:0000000000000000018001402128210811100FE001000FE01110210821080000 +A16C:000000000000000001800140012001001FF001000FE010102108210800000000 +A16D:000003800440000011101110092007C001001900150013401040018000000000 +A16E:000000000000000011101110092007C001001900150013401040018000000000 +A16F:000000000000046025582546044064401C4000400C400B4008C0080000000000 +A170:00000000000000000010031002D0023002001FC802081FC80200020000000000 +A171:000003800440000000080188016801180D000B80296019180100010000000000 +A172:000000000000000000080188016801180D000B80296019180100010000000000 +A173:00000000000000000FE008200440038004400820018001400500030000000000 +A174:000003800440000003800540054035482F4825E8255805400540038000000000 +A175:000000000000000003800540054035482F4825E8255805400540038000000000 +A176:0000000000000000223055285524222008201420142009A00160010000000000 +A177:000003800440000000C022B0228C088008800080188016801180100000000000 +A178:000000000000000000C022B0228C088008800080188016801180100000000000 +A179:03800440000001800540030000000EE00100028001000EE00000018005400300 +A17A:000001800540030000000EE00100028001000EE0000001800540030000000000 +A17B:0000000000000000000020C412A8118808100FF0081010C812A8218400000000 +A17C:00000000000003600458334640403340044003401840164011C0100000000000 +A17D:0000000000000000006000500048004023C8244808400840244823C800000000 +A17E:000003800440000000900A900A900A9000F00E90009004900290019000000000 +A17F:000000000000000000900A900A900A9000F00E90009004900290019000000000 +A180:000000000000000000C000A00090008007A008C0118012800C80078000000000 +A181:000003800440000000E0011001100710059015500D300110011000E000000000 +A182:000000000000000000E0011001100710059015500D300110011000E000000000 +A183:00000000000000000600058004000798046005C00640078034000C0000000000 +A184:0380044000000660055014C80C600050004001F00C400B4008C0080000000000 +A185:0000000000000660055014C80C600050004001F00C400B4008C0080000000000 +A186:000000000000000001800160011817C0110017C001000D000B00080000000000 +A187:00000380044000001D8003600118010003001D00010031000D00030000000000 +A188:00000000000000001D8003600118010003001D00010031000D00030000000000 +A189:000000000000000008E00910091009500950095009500910091008E000000000 +A18A:00000000000000000700089008900FF0089008900FF008900890070000000000 +A18B:0380044000003E60415808463E40084041403E4000400E4009C0080000000000 +A18C:0000000000003E60415808463E40084041403E4000400E4009C0080000000000 +A18D:000000000000000024C018B0008C248018800080188016801180100000000000 +A18E:0000038004400000018001600D00030001000D00030001000D00030000000000 +A18F:0000000000000000018001600D00030001000D00030001000D00030000000000 +A190:000000000000000031800D60031831000D00030031002D002300200000000000 +A191:000000000000000000C000B000800A800A800A80008000800680018000000000 +A192:03800440000012C00CB0008012800C80008012800C8000801C80038000000000 +A193:00000000000012C00CB0008012800C80008012800C8000801C80038000000000 +A194:000000000000000000600A580A400A40004011400E400040034000C000000000 +A195:000003800440000000C014B01480148000E01C90009000900680018000000000 +A196:000000000000000000C014B01480148000E01C90009000900680018000000000 +A197:000000000410041003E018881688118810E81098008003E00490049000000000 +A198:0380044000000820082007C001100FF0110011000FF0010007C0082008200000 +A199:000000000820082007C001100FF0110011000FF0010007C00820082000000000 +A19A:000000000000000017D0082017D0101010101010082007C010100FE000000000 +A19B:038004400000038004400440038031102D10231021D021300380054005400000 +A19C:0000000001C00220022001C018881688118810E8109801C002A002A000000000 +A19D:0000000000000000089007100010031002D00230020007000A800A8000000000 +A19E:000000000000000007000880088008800B900AD00AB008800880070000000000 +A19F:0000038004400000008007900890108010901090108008900790008000000000 +A1A0:0000000000000000008007900890108010901090108008900790008000000000 +A1A1:000000000000000007800840102000A800A800A800701C20132010C000000000 +A1A2:0380044000000EE001000280044004400FE0044005400540028001000EE00000 +A1A3:000000000EE001000280044004400FE0044005400540028001000EE000000000 +A1A4:000000000000000027C828281010183017D0101011101110082007C000000000 +A1A5:000003800440000001000124012401F801200124012431F80D20032000000000 +A1A6:000000000000000001000124012401F801200124012431F80D20032000000000 +A1A7:000000000000000027C828281010183017D0101010101010082007C000000000 +A1A8:03800440000007C0082010101E1011D0103011D01E101010082007C000000000 +A1A9:00000000000007C0082010101E1011D0103011D01E101010082007C000000000 +A1AA:000000000000000007C008201010101010101FF010101010082007C000000000 +A1AB:00000000000001800160011801001FF001001FF001001D001300100000000000 +A1AC:000003800440000004F00900090004800070048009000900090004F000000000 +A1AD:000000000000000004F00900090004800070048009000900090004F000000000 +A1AE:00000000000000000FE0101010100FE00100090008E00100090008E000000000 +A1AF:000003800440000007C00820101010101010101010101450082017D020080000 +A1B0:000000000000000007C00820101010101010101010101450082017D020080000 +A1B1:00000000000000000110011000E00040034002C0020007000880088000000000 +A1B2:0000038004400000111011101110092007C00100390027002100210000000000 +A1B3:0000000000000000088808880888049003E000801C8013801080108000000000 +A1B4:000000000000000001C0022006300528042004200420042014A00C6000000000 +A1B5:000003800440000002C01AB0168C538032800280188016801180100000000000 +A1B6:000000000000000002C01AB0168C538032800280188016801180100000000000 +A1B7:0000000000000000001001900170010031482D4823C821780140010000000000 +A1B8:000003800440000000400440044004400440044000400C40034000C000000000 +A1B9:000000000000000000400440044004400440044000400C40034000C000000000 +A1BA:000000000000000007C009201110111011101FF011101110092007C000000000 +A1BB:00000000000000000020022002200AA008A008A00020062001A0006000000000 +A1BC:00000380044000000040044004400440004004400A400A400640098000000000 +A1BD:00000000000000000040044004400440004004400A400A400640098000000000 +A1BE:00000000000000000020062009200920092006200020062001A0006000000000 +A1BF:0000000000000000102010281028102010281FE8102010281028102000000000 +A1C0:00000380044000000C200A2009200820082008200820092008A0086000000000 +A1C1:00000000000000000C200A2009200820082008200820092008A0086000000000 +A1C2:00000000000000C000B0188C23E0188023E0188000800E800980080000000000 +A1C3:000005500550001003D00430081008000800080008000810042003C000000000 +A1C4:000003800440000001800160011803800540054013901110092007C000000000 +A1C5:000000000000000001800160011803800540054013901110092007C000000000 +A1C6:0000000000000000044004400FE01450244824480FE014502448238800000000 +A1C7:0000000000000000145015501110082007C001000FE001000900060000000000 +A1C8:000003800440000001800160010007C00920092007C001000D00030000000000 +A1C9:000000000000000001800160010007C00920092007C001000D00030000000000 +A1CA:000000000000000003800540054009200FE009200FE00920092006C000000000 +A1CB:0000038004400000042009200920082004200020062005A00460040000000000 +A1CC:0000000000000000042009200920082004200020062005A00460040000000000 +A1CD:00000000000000001808170810E81018010001000000111011100EE000000000 +A1CE:000000000000000007C00820129012901010101011101110082007C000000000 +A1CF:00000380044000001110111011100EE004400440054005400440038000000000 +A1D0:00000000000000001110111011100EE004400440054005400440038000000000 +A1D1:000000000000100408081C10222049404880494022201C100808100400000000 +A1D2:0000038004402008111009200440028001000280044009201110200800000000 +A1D3:0000000000002008111009200440028001000280044009201110200800000000 +A1D4:000000000000000010841084088807F000800C800B8008806A801A8000000000 +A1D5:000003800440000018081608118810E81098008000800000041003E000000000 +A1D6:000000000000000018081608118810E81098008000800000041003E000000000 +A1D7:000000000000000018081608118810E810980080008006800580040000000000 +A1D8:000003C00420000003C00420040004000200018000400020042003C000000000 +A1D9:000000000000000003C00420040004000200018000400020042003C000000000 +A1DA:00000000000000000F0010802048004800480078004838482648218000000000 +A1DB:000007C00820000003C00420081001100110011000100E100990086000000000 +A1DC:000000000000000003C00420081001100110011000100E100990086000000000 +A1DD:00000000000000000008018801680118010007C02108210810100FE000000000 +A1DE:000000000000000007C0092011101110010007C011101110092007C000000000 +A1DF:0000038004400000145014501390082007C00100010001000900060000000000 +A1E0:0000000000000000145014501390082007C00100010001000900060000000000 +A1E1:000000000000000001880168011801001FF001002548254810100FE000000000 +A1E2:000000000000000014501390082007C00000000007C008201390145000000000 +A1E3:000003800440000010101010082007C00000000007C008201010101000000000 +A1E4:000000000000000010101010082007C00000000007C008201010101000000000 +A1E5:00000000000007C008201010145013901010139014501010082007C000000000 +A1E6:00000000000000000000406020A0112C0A3004300A30113020AC406000000000 +A1E7:00000380044000000000406C20B011300A2C04200A2C113020B0406C00000000 +A1E8:00000000000000000000406C20B011300A2C04200A2C113020B0406C00000000 +A1E9:00000000000007C008201290129010101FF0101011101110082007C000000000 +A1EA:000000000000000044444444444444443BB811101550155011100EE000000000 +A1EB:000003800440000031000D08011031200D400180010031000D00030000000000 +A1EC:000000000000000031000D08011031200D400180010031000D00030000000000 +A1ED:0000000000000000000008200820082000001FF0000001000100010000000000 +A1EE:00000000000000000180016001180100011001F031102D002300200000000000 +A1EF:0000038004400000018001600100090009000900010001000D00030000000000 +A1F0:0000000000000000018001600100090009000900010001000D00030000000000 +A1F1:000000000000000001800960091809000100010031002D002300200000000000 +A1F2:00000000000000E0191005500350031003F0031003500550191000E000000000 +A1F3:0000038004400000101010101FF010101010101010101010082007C000000000 +A1F4:0000000000000000101010101FF010101010101010101010082007C000000000 +A1F5:000000000000000007C008201010145017D0145014501390082007C000000000 +A1F6:0000038004400000101010101FF010101010101010101450082017D020080000 +A1F7:0000000000000000101010101FF010101010101010101450082017D020080000 +A1F8:0000000000000000040005E0040005E0040005E0040004600580060000000000 +A1F9:000003800440000001C00220022004101F100410041004900490036000000000 +A1FA:000000000000000001C00220022004100F100410041004900490036000000000 +A1FB:0000000000001FF01010092005400280010002800540092010101FF000000000 +A1FC:0000038004400000000801880168011831002D08238821682118010000000000 +A1FD:0000000000000000000801880168011831002D08238821682118010000000000 +A1FE:0000000000000000010031182928254823882388254829283118010000000000 +A1FF:0000000000000000038002601218124012401E40124012181260038000000000 +A200:0000000003800440000010180828044802881FF8028804480828101800000000 +A201:0000000000000000000010180828044802881FF8028804480828101800000000 +A202:00000000000000000180096009180900011001F031102D002300200000000000 +A203:000003800440000000601158114011400440047004480048034800C000000000 +A204:000000000000000000601158114011400440047004480048034800C000000000 +A205:0000000001800160010003800540038001000D00030007C00820082000000000 +A206:0000000000000000031002D01E300200020003C002001E000200020000000000 +A207:038004400000180006C000B018800680008018E0069000900690018000000000 +A208:000000000000180006C000B018800680008018E0069000900690018000000000 +A209:000000000000030002C0023002000FF01200120012000FF00200020000000000 +A20A:0000000000000000044004401390111011100EE0044004400440038000000000 +A20B:0000038004400000082008200820082000000000010001000100010000000000 +A20C:0000000000000000082008200820082000000000010001000100010000000000 +A20D:0000000000000000101010101010082007C00000111011101110111000000000 +A20E:0000000000000000111011101110092007C0010001001FF00100010000000000 +A20F:000003800440000000101A5016501250135012D00010031000D0003000000000 +A210:00000000000002101A5016501250135012D002100010031000D0003000000000 +A211:000000000000000003E004900490008000800080188016801180100000000000 +A212:03800440000000400640054004401F40044014400C400040034000C000000000 +A213:0000000000000020032002A002200FA002200A200620002001A0006000000000 +A214:00000000000007C008201010101010100C601010111011100D60010000000000 +A215:0000038004400000002008A005200520052008A00020062001A0006000000000 +A216:0000000000000000002008A005200520052008A00020062001A0006000000000 +A217:00000380044000000F6010D01648094016401040164009401640004000000000 +A218:00000000000000000F6010D01648094016401040164009401640004000000000 +A219:00000000000000000400040004001C0816081188106810380020002000000000 +A21A:0000000000000000020802080208020803F8020802081A081608100800000000 +A21B:03800440000007E00810080007E00010081007E0008007F0008007F000800000 +A21C:00000000000007E00810080007E00010081007E0008007F0008007F000800000 +A21D:000000000000000021382140218021800180014031382D002300200000000000 +A21E:000000000000000008400840084000400C40034000C001E00210021000000000 +A21F:00000380044000001830244804400440044004400FE014502448238800000000 +A220:00000000000000001830244804400440044004400FE014502448238800000000 +A221:000000000FE010101110111010100FE001001FF001001FF00500030000000000 +A222:00000000000000000180016031082D0823882168211801000D00030000000000 +A223:000003800440000000200020002000200020082008200E2009A0086000000000 +A224:000000000000000000200020002000200020082008200E2009A0086000000000 +A225:00000000000000000840084008400840004000400C400B4008C0080000000000 +A226:00000000000000000AC00AB000801F8000800A800A8000800680018000000000 +A227:0000038004400000111011101010101011101110101010101110111000000000 +A228:0000000000000000111011101010101011101110101010101110111000000000 +A229:000000000000000019602558244027C02440254025401840034000C000000000 +A22A:0000000000000000000809881568151815000F00050009001100010000000000 +A22B:038004400000183006D0011006D018300000183006D0011006D0183000000000 +A22C:000000000000183006D0011006D018300000183006D0011006D0183000000000 +A22D:0000000000000000183006D0011006D01830010001001FF00100010000000000 +A22E:0380044000000FE01010101010100FE000000FE01010101010100FE000000000 +A22F:0000000000000FE01010101010100FE000000FE01010101010100FE000000000 +A230:000003800440000006183D944472441024101C102410441044103C1000000000 +A231:000000000000000006183D944472441024101C102410441044103C1000000000 +A232:000000000000000003E00410041007F00410051006100C10141003E000000000 +A233:0000038004400000186016581040104010401FC0124012401240124000000000 +A234:0000000000000000186016581040104010401FC0124012401240124000000000 +A235:0000000000000000010C01100120012001E0012031202D10230C200000000000 +A236:0380044001000FE0111011100FE0210821080FE0111011100FE0010000000000 +A237:0000000001000FE0111011100FE0210821080FE0111011100FE0010000000000 +A238:0000000000000000000007C008200820082007C0010007C00920092000000000 +A239:0000000000000000000007C009200FE0092007C0010007C00920092000000000 +A23A:03800440000003E004100410041003E00080038002000F801240124000000000 +A23B:00000000000003E004100410041003E00080038002000F801240124000000000 +A23C:000000000000000000780080038004401E380440038000800080007800000000 +A23D:0380044000000070008000900790088012701200127008800790009000800070 +A23E:0000007000800090079008801270120012700880079000900080007000000000 +A23F:00000000000000000FB8104020A020A020B820A020A020A010400FB800000000 +A240:000000000000000008202AA81AB0193018301AB01AB02928082007C000000000 +A241:0000000003800440000006E0010002C002000FE0020002C0010006E000000000 +A242:0000000000000000000006E0010002C002000FE0020002C0010006E000000000 +A243:00000000000000000410041003E0008007F0008007F0108010800F0000000000 +A244:00000380044000001410141014101590169014901090109008A007C000000000 +A245:00000000000000001410141014101590169014901090109008A007C000000000 +A246:000000000000000000000E1009900870000000000E1009900870000000000000 +A247:0380044000000100311829282448228821082288244829283118010000000000 +A248:0000000000000100311829282448228821082288244829283118010000000000 +A249:0000000000001FF0004007C008400840084007C008400840084007C000000000 +A24A:0000000000000000004009400940094000400F4000400C40034000C000000000 +A24B:0000038004400000003000400090039002F00280028002401A30060000000000 +A24C:0000000000000000003000400090039002F00280028002401A30060000000000 +A24D:0000000000000000070008A008A0088008F0088008A008A00880070000000000 +A24E:000000000000000010C020B0248C22801180008007E008800880070000000000 +A24F:000003800440000010C020B0248C228011800080008018800680018000000000 +A250:000000000000000010C020B0248C228011800080008018800680018000000000 +A251:000000000000000012C022B0248C228011800280028018800680018000000000 +A252:00000000000000002288228822881C7000000820082008200440038000000000 +A253:000003800440000001E00200040004000400040004000400020001E000000000 +A254:000000000000000001E00200040004000400040004000400020001E000000000 +A255:00000000000000001110111011100EE000000380044004400440038000000000 +A256:00000000000000000FC0002007A00820072000A00F20002000200FC000000000 +A257:0000038004400000018001600900050003000100010001000D00030000000000 +A258:0000000000000000018001600900050003000100010001000D00030000000000 +A259:0000000000000000000030182828244822882108228824482828301800000000 +A25A:0380044000000920092007C00FE01110111011100FE007C00920092000000000 +A25B:0000000000000920092007C00FE01110111011100FE007C00920092000000000 +A25C:0000000000000000018031602D1823002100010031002D002300210000000000 +A25D:00000380044000000180056005180500014009400540131011100FE000000000 +A25E:00000000000000000180056005180500014009400540131011100FE000000000 +A25F:000000000000000001800160110811087D3E1108110801000D00030000000000 +A260:0000000000000000202020203828262821A820702020202010400F8000000000 +A261:000003800440000018881688118810E810980080008006800580040000000000 +A262:000000000000000018881688118810E810980080008006800580040000000000 +A263:0000000000000000008008E008903E8808880888009018E00680018000000000 +A264:00000000000000000FE0101024482288010001002288244810100FE000000000 +A265:0380044000000380044005400540044007C00440028001000280044000000000 +A266:0000000000000380044005400540044007C00440028001000280044000000000 +A267:00000000000000001C70028001000100010001000100010002801C7000000000 +A268:0000038004400000038004400440044007C0082009200920082007C000000000 +A269:0000000000000000038004400440044007C0082009200920082007C000000000 +A26A:00000000000000000088029002A002C012E00C900090189006E0018000000000 +A26B:00000380044000000020022002200FA0022002200020062001A0006000000000 +A26C:00000000000000000020022002200FA0022002200020062001A0006000000000 +A26D:00000000000000000E00110011001F2011501FD011501F2011000E0000000000 +A26E:0000000000000000098011601118090007000900110011000900010000000000 +A26F:0000038004400000118011600918070009001100110001000D00030000000000 +A270:0000000000000000118011600918070009001100110001000D00030000000000 +A271:00000000000000000050035002D002700240024002000F801240124000000000 +A272:000003800440000001C002A003E002A031C02C8023C002200490049000000000 +A273:000000000000000000E0015001F0015018E0164011E001100248024800000000 +A274:000000000000000000E001100110011018E0164011E001100248024800000000 +A275:0000000000000000098015601518090001001FF001001FF00100010000000000 +A276:000003800440000001801960051813002B002B00130005001900010000000000 +A277:000000000000000001801960051813002B002B00130005001900010000000000 +A278:000000000000000001001FE00910151009101FE0010007C00920092000000000 +A279:00000000000000000F00103810400880078008801040103810000F0000000000 +A27A:000003800440000007C00820139014501450145014501390082007C000000000 +A27B:000000000000000007C00820139014501450145014501390082007C000000000 +A27C:0000000000000000000020201040089005280228052808901040202000000000 +A27D:00000380044000000C300B2808E4082008201C202A202A202A20082000000000 +A27E:00000000000000000C300B2808E4082008201C202A202A202A20082000000000 +A27F:0000000000000000038004400E4004400E400440038004400920092000000000 +A280:0000000000000000022002200E240BA42A741A2C02A002A0022001C000000000 +A281:000003800440000018081608118810681018000007E00000000007E000000000 +A282:000000000000000018081608118810681018000007E00000000007E000000000 +A283:0000000000000000180816081188106810180000042004200420042000000000 +A284:00000380044000000E70018001800250025002500180058002400D3000000000 +A285:00000000000000000E70018001800250025002500180058002400D3000000000 +A286:00000000000001C001300F8001400F4001400F80010003800540054000000000 +A287:00000380044000000710089008A007C0008003E000800BE00880070000000000 +A288:00000000000000000710089008A007C0008003E000800BE00880070000000000 +A289:0000000000000000000004400440028002A001200AA006800640054000000000 +A28A:038004400000180006C000B01888068000801880068003E00490049000000000 +A28B:00000000180006C000B018880680008018800680008003E00490049000000000 +A28C:0000000000000000018001600118014001401D10139011700100010000000000 +A28D:00000000000011101110092007C00100150015001F0015001500010000000000 +A28E:00000380044000000440044004401390111011100EE004400AA00AA000000000 +A28F:00000000000000000440044004401390111011100EE004400AA00AA000000000 +A290:000000000000000003D00430081009000900090009000810042003C000000000 +A291:00000380044000001440144014401FF814401440144001F0004001F000000000 +A292:00000000000000001440144014401FF814401440144001F0004001F000000000 +A293:000000000000000001801560151815001FE01500150001000100010000000000 +A294:000000000000000801881D6803180B000B7003801DA001A00180017000000000 +A295:0000038004400000007807800880107814801480107808800780007800000000 +A296:0000000000000000007807800880107814801480107808800780007800000000 +A297:00000000000000000440044004401390111011100EE0000000000EE000000000 +A298:00000380044000000380044004400E40044004400E4004400440038000000000 +A299:00000000000000000380044004400E40044004400E4004400440038000000000 +A29A:0000000000000000010001180124013C012401FC012431180D00030000000000 +A29B:000000000000000001000280044008200FE001000280044008200FE000000000 +A29C:00000380044000000804087408AC09200A200C200A20692058A0406000000000 +A29D:00000000000000000804087408AC09200A200C200A20692058A0406000000000 +A29E:00000000000000000FE0101010100FE0101010100FE0101010100FE000000000 +A29F:0000038004400000018001600118010017D01110111017D00100010000000000 +A2A0:0000000000000000018001600118010017D01110111017D00100010000000000 +A2A1:00000000000000400C400B4008C008000BE00A20094008800940022000000000 +A2A2:0000000000000000070008A008A008C0088008A008A008C00880070000000000 +A2A3:00000000038004400000064001C0064001C00000064001C0064001C000000000 +A2A4:00000000000000000000064001C0064001C00000064001C0064001C000000000 +A2A5:000000000000000007C00820111011100000000007C008201110111000000000 +A2A6:0000000003800440000060305054489405180210051408941058203000000000 +A2A7:0000000000000000000060305054489405180210051408941058203000000000 +A2A8:0000000000000248015000E001500248034012C00A8007000A80124000000000 +A2A9:000000000380044000000440044002800280010002800A800840074000000000 +A2AA:000000000000000000000440044002800280010002800A800840074000000000 +A2AB:000000000000000000F00900090000F00900090000F00900090000F000000000 +A2AC:000003800440000003C0240C2410022021E022200410240C240003C000000000 +A2AD:000000000000000003C0240C2410022021E022200410240C240003C000000000 +A2AE:00000000000000001860165011C8104012401240124010401040104000000000 +A2AF:0000038004400000030002C002300200020002001FC002000200020000000000 +A2B0:0000000000000000030002C002300200020002001FC002000200020000000000 +A2B1:0000000000000FE00820044002800280010002800280044008200FE000000000 +A2B2:0000000000001E0811CC103A1188114811081108110815085308300000000000 +A2B3:0000038004400000038004400450045004500460044004400440038000000000 +A2B4:0000000000000000038004400450045004500460044004400440038000000000 +A2B5:0000000000000000030002C00230020002000F8010401FC010400F8000000000 +A2B6:000000000000000007C00820109016901190109016901190082007C000000000 +A2B7:000003800440000007C00820101011901150111015101310082007C000000000 +A2B8:000000000000000007C00820101011901150111015101310082007C000000000 +A2B9:000000000000000007800840132802A802280A3006201C20132010C000000000 +A2BA:03800440000001C00130010001C0012007C00900070001001900070000000000 +A2BB:00000000000001C00130010001C0012007C00900070001001900070000000000 +A2BC:00000000000000000C6002800100028002800440044009200920092000000000 +A2BD:000000000000000002200220022802280F282AE81A380228022801C000000000 +A2BE:000003800440000001C00220022802280F282AE81A380228022801C000000000 +A2BF:000000000000000001C00220022802280F282AE81A380228022801C000000000 +A2C0:0000000000000000071008900890089008901FF0089008900890071000000000 +A2C1:000003800440000007C00820139010501390105013901010082007C000000000 +A2C2:000000000000000007C00820139010501390105013901010082007C000000000 +A2C3:00000000000000001110111011100EE0000004401550155011100EE000000000 +A2C4:000000000000000011C42224222412240E3C122422242224122401C400000000 +A2C5:00000000038004400000406020A011244A24443C4A24112420A0406000000000 +A2C6:00000000000000000000406020A011244A24443C4A24112420A0406000000000 +A2C7:000000000000000010C013B01080088007800080188016801180100000000000 +A2C8:0000038004400000070008900890089008F00890089008900880070000000000 +A2C9:0000000000000000070008900890089008F00890089008900880070000000000 +A2CA:000000000000000008200420022001200CA00A60090008800840082000000000 +A2CB:0000000003800440000004400440028002A0012002A002800440044000000000 +A2CC:0000000000000000000004400440028002A0012002A002800440044000000000 +A2CD:0000000000000000018001600100010001000100010001000D00030000000000 +A2CE:0000038004400000183006C0010006C018300100010007C00100010000000000 +A2CF:0000000000000000183006C0010006C018300100010007C00100010000000000 +A2D0:000000000000000018081608158814681458044007C004400440044000000000 +A2D1:0000038004401000086024501048084003C0044008400840044003C000000000 +A2D2:0000000000001000086024501048084003C0044008400840044003C000000000 +A2D3:00000000000000000020062005A0046004000520052004000520052000000000 +A2D4:0000000000000FE0010011400920051011400920051011400920051000000000 +A2D5:000003800440000007C00820101017D001000100054005400540010000000000 +A2D6:000000000000000007C00820101017D001000100054005400540010000000000 +A2D7:0000000000000000180816081188106811180100010004400440044000000000 +A2D8:00000000000000001FC00200020012680AA807380AA8126802001FC000000000 +A2D9:00000000038004400000110011000A500A5004000A500A501100110000000000 +A2DA:00000000000000000000110011000A500A5004000A500A501100110000000000 +A2DB:00000000000000000000110011000A500A5004000A700A001100110000000000 +A2DC:038004400010031002D002300F8002000F800200070008800880070000000000 +A2DD:000000000010031002D002300F8002000F800200070008800880070000000000 +A2DE:00000000000000000100010007C011101110092007C004400820082000000000 +A2DF:000003800440000007C008200FE008200FE0082007C00100011000E000000000 +A2E0:000000000000000007C008200FE008200FE0082007C00100011000E000000000 +A2E1:00000000000000000F00114011400F40114011000F000110011000E000000000 +A2E2:0000038004400000030002C002300200070008800880070010400F8000000000 +A2E3:0000000000000000030002C002300200070008800880070010400F8000000000 +A2E4:000000000180016001000F28112811F811280F28010001000D00030000000000 +A2E5:0000038004400000060005800460040004A004A007E004A004A0040000000000 +A2E6:0000000000000000060005800460040004A004A007E004A004A0040000000000 +A2E7:0000000000000000000004400820101004400820101004400820101000000000 +A2E8:0380044000000010031002D0023002000A6006A0032006A00A60020000000000 +A2E9:0000000000000010031002D0023002000A6006A0032006A00A60020000000000 +A2EA:000000000000000001E0022004200420022001E0006009A00E20082000000000 +A2EB:000003800440000003800440044004400FC01440144014401440044000000000 +A2EC:000000000000000001C002200220022007E00A200A200A200A20022000000000 +A2ED:000000000000000007F0008001C0013001000120012001200D00030000000000 +A2EE:0000000003800440000004400440044000000FE0000004400440044000000000 +A2EF:0000000000000000000004400440044000000FE0000004400440044000000000 +A2F0:0000000000000000012009100910092001C00120091009100920010000000000 +A2F1:000003800440000011201510151011201FC011201510151011200E0000000000 +A2F2:000000000000000011201510151011201FC011201510151011200E0000000000 +A2F3:0000000000000000112011101110112011C011201110111011200E0000000000 +A2F4:0000000000000000010007C00100000001800160010001000D00030000000000 +A2F5:000003800440010007C00100000001800160010007C001000D00030000000000 +A2F6:000000000000010007C00100000001800160010007C001000D00030000000000 +A2F7:0000000000000000098011601118090007480948110011480948010000000000 +A2F8:0000038004400000044004400380111013900D6001000D6003800D6000000000 +A2F9:0000000000000000044004400380111013900D6001000D6003800D6000000000 +A2FA:00000380044000000010031002D0023002000F801240124012400F8000000000 +A2FB:00000000000000000010031002D0023002000F801240124012400F8000000000 +A2FC:0000038004400000008003E00080060005800460040004400440040000000000 +A2FD:0000000000000000008003E00080060005800460040004400440040000000000 +A2FE:0000038004400000010007C00100111011100EE00000010007C0010000000000 +A2FF:0000000000000000010007C00100111011100EE00000010007C0010000000000 +A300:00000000010007C041044C64345804400380010007C0010007C0010000000000 +A301:0000038004400000101010101FF011101110111011101110092007C000000000 +A302:0000000000000000101010101FF011101110111011101110092007C000000000 +A303:0000000000000000000009F012101210091000F009101210121009F000000000 +A304:000003800440000002400280030003C00220022003C003000280024000000000 +A305:000000000000000002400280030003C00220022003C003000280024000000000 +A306:000000000000000007C0082014501FF0145014501FF01450082007C000000000 +A307:000003800440000010101450145014501010111011101110082007C000000000 +A308:000000000000000010101450145014501010111011101110082007C000000000 +A309:000000000000000000880088008800880C8810F8208824882288118800000000 +A30A:000003800440000007C008201FF010101FF0082007C008201110111000000000 +A30B:000000000000000007C008201FF010101FF0082007C008201110111000000000 +A30C:0000000000000000030012C01230120002000200120012001200020000000000 +A30D:000003800440000004440444024801F018402040404048404640218000000000 +A30E:000000000000000004440444024801F018402040404048404640218000000000 +A30F:000000000000000011101110092007C001000100078009400640004000000000 +A310:000000000000000000B808C008C008B8088000B800C018C006B8018000000000 +A311:00000380044000000080089008F0089008800080009018F00690018000000000 +A312:00000000000000000080089008F0089008800080009018F00690018000000000 +A313:00000F901050001003D00430081008000800080008000810042003C000000000 +A314:0000038004400000060005800460040005200520052005200400040000000000 +A315:0000000000000000060005800460040005200520052005200400040000000000 +A316:00000000000000000C000B0008C008000A200940088009400A20080000000000 +A317:00000000000003C004200500048002000180004002200120042003C000000000 +A318:0000038004400000118009600500110009400520011001400D20031000000000 +A319:0000000000000000118009600500110009400520011001400D20031000000000 +A31A:00000000000007C008200A800A80080007C0002002A002A0082007C000000000 +A31B:000003800440000008C008A00090078008800880078000800880088000000000 +A31C:000000000000000008C008A00090078008800880078000800880088000000000 +A31D:0000000000000000004010501050135002C00200121012101210020000000000 +A31E:0000000000000820082007C00000111011100EE0000007C00820082000000000 +A31F:0000038004400000024002400240020003E00200024002401A40060000000000 +A320:0000000000000000012001200120010001F00100012001200D20030000000000 +A321:000000000000000003C00420081008103E10081008100810042003C000000000 +A322:00000380044000000100092009201D20090009F0010001200D20032000000000 +A323:00000000000000000100092009201D20090009F0010001200D20032000000000 +A324:00000000000000001010101010101010082007C00000010007C0010000000000 +A325:00000380044000001010101010101010082007C00100110011000E0000000000 +A326:00000000000000001010101010101010082007C00100110011000E0000000000 +A327:0000000000000000008007F00080008007F00080188016801180100000000000 +A328:0000038004400000101010101010082007C00000010001000100010000000000 +A329:0000000000000000101010101010082007C00000010001000100010000000000 +A32A:0000000000000000000811881F6811180100011011101F101110010000000000 +A32B:00000380044000000020062005A0046004000440044005F00440044000000000 +A32C:00000000000000000020062005A0046004000440044005F00440044000000000 +A32D:0000000000000000001003101ED002300200022002201EF80220022000000000 +A32E:000003800440000018081608118811681518054001400540051000E000000000 +A32F:000000000000000018081608118811681518054001400540051000E000000000 +A330:000000000000000018081608118810E81098008002A002A0008007F000000000 +A331:00000000000000001110111013900D60010005401550155011100EE000000000 +A332:00000380044000000FE0101010100FE0210821080FE0101010100FE000000000 +A333:00000000000000000FE0101010100FE0210821080FE0101010100FE000000000 +A334:0000000000000FE0101010100FE001001FF001000FE0101010100FE000000000 +A335:0000000000000000000811881F681118110011001F0011000100010000000000 +A336:000003800440000007C00820101010101FF0111011101110092007C000000000 +A337:000000000000000007C00820101010101FF0111011101110092007C000000000 +A338:00000000000000001860165011C0104012401540154015401240104000000000 +A339:00000380044000000180016001000100010001C0012001200D20030000000000 +A33A:00000000000000000180016001000100010001C0012001200D20030000000000 +A33B:000000000000000007C00820119011501110119015501350082007C000000000 +A33C:000000000000000000401FF800400440047800400C400B4008C0080000000000 +A33D:00000380044000001C60135010C002400FC002400C400B4008C0080000000000 +A33E:00000000000000001C60135010C002400FC002400C400B4008C0080000000000 +A33F:000000000000049003E00080049003E01880168013E014100490049000000000 +A340:0000000000000000112015101510112015C01520111015101510112000000000 +A341:00000380044000000180016007D8090009C0090037C02D002300200000000000 +A342:00000000000000000180016007D8090009C0090037C02D002300200000000000 +A343:00000000000000000F001088224802400FC80248024038482648218000000000 +A344:0380044000000EE0111011101110010001000FE0000009200920092000000000 +A345:0000000000000EE0111011101110010001000FE0000009200920092000000000 +A346:0000000000700E8011A011A01180157015001570118011A011A00E8000700000 +A347:03800440010001000440044018101610111010D0103004400540010000000000 +A348:00000000010001000440044018101610111010D0103004400540010000000000 +A349:000000000000000003883A680618120012001200120006183A68038800000000 +A34A:00000380044000000580056025181900010001003FF801000100010000000000 +A34B:00000000000000000580056025181900010001003FF801000100010000000000 +A34C:000000000000000007E008200820082007E0002001200920082007C000000000 +A34D:000000000000000005800560251819000100010007C009201110111000000000 +A34E:00000380044000001860165011C010401240124010401FC01040104000000000 +A34F:00000000000000001860165011C010401240124010401FC01040104000000000 +A350:000000000000000001000540044002801E90111012F002800440054001000000 +A351:00000000000000000008018801680118010005402548210811100FE000000000 +A352:00000380044000000100010001000100054005402548210811100FE000000000 +A353:00000000000000000100010001000100054005402548210811100FE000000000 +A354:000000000000000015501550155011101550155015501110092007C000000000 +A355:00000000000000000638054404C40444044404440444245414540C3800100000 +A356:000003800440000001900F6811281128091007000900110011000F0000000000 +A357:000000000000000001900F6811281128091007000900110011000F0000000000 +A358:000000000000000000000100028002800100000004400AA00AA0044000000000 +A359:0000038004400000031002E81A28062802101A00060002001A00060000000000 +A35A:0000000000000000031002E81A28062802101A00060002001A00060000000000 +A35B:00000000000007C00820080007C00020082007C000000FE000000FE000000000 +A35C:000003800440000011101110092007C00110011007C009201110111000000000 +A35D:000000000000000011101110092007C00110011007C009201110111000000000 +A35E:0000000000000E100990087000000E100990087000000E100990087000000000 +A35F:0000038004400000038002601218120013E01200120012180260038000000000 +A360:0000000000000000038002601218120013E01200120012180260038000000000 +A361:00000000000000000180016001000FE009200540038003800540092000000000 +A362:000003800440000001800160010007C0092007C0010007C00920092000000000 +A363:000000000000000001800160010007C0092007C0010007C00920092000000000 +A364:0000000000000100038005400440054003800100038005400920092000000000 +A365:000000000000000030C02CA8239820882480248020803F802080208000000000 +A366:00000380044000000C300A280820282018A00C600A20082028A0186000000000 +A367:00000000000000000C300A280820282018A00C600A20082028A0186000000000 +A368:000000000000000000002230125008900510021C051008901250223000000000 +A369:000000000000000018181514111210101FF01010111091105050303000000000 +A36A:03800440000018081608118810E81098008018881688118810E8109800000000 +A36B:00000000000018081608118810E81098008018881688118810E8109800000000 +A36C:00000000000000000C300B2C082008200FE008200820082069A0186000000000 +A36D:00000000000000001FF011100920054013901110139005400920111000000000 +A36E:00000380044000001FF011100920054003801FF0028004400920111000000000 +A36F:00000000000000001FF011100920054003801FF0028004400920111000000000 +A370:00000000000000001FF01110092005403B8827C822B804400920111000000000 +A371:00000380044000000E001128112815F8152815F81528112811000E0000000000 +A372:00000000000000000E001128112815F8152815F81528112811000E0000000000 +A373:0000000000000000072008A008800AF00A800A800AF0088008A0072000000000 +A374:00000380044000000C040B34082C082008203E200820082C6834180400000000 +A375:00000000000000000C040B34082C082008203E200820082C6834180400000000 +A376:000000001C1001C805A8059801800E8000800FF8008018800680018000000000 +A377:000003800440000018081608118810E81098008001C00220022001C000000000 +A378:000000000000000018081608118810E81098008001C00220022001C000000000 +A379:000000000000000005500550011007D00110055004500C100390007000000000 +A37A:0380044000001C0803880B680B1803001D0001001FF001001FF0010000000000 +A37B:0000000000001C0803880B680B1803001D0001001FF001001FF0010000000000 +A37C:0000038004400000033012E812243A2012201220022002201A20062000000000 +A37D:0000000000000000033012E812243A2012201220022002201A20062000000000 +A37E:0000038004400000010001200920150015F01500092001200D00030000000000 +A37F:0000000000000000010001200920150015F01500092001200D00030000000000 +A380:0000000000000000014811481130110011F80100013031480D48030000000000 +A381:00000380044000000380044007C008200FE0082008200920092006C000000000 +A382:00000000000000000380044007C008200FE0082008200920092006C000000000 +A383:00000000000007C008201010045004500110011000100E100990086000000000 +A384:0000000000000000000801880168011801003FF8010011007D00110000000000 +A385:00000380044000000FC00020002000200FE000200020002000200FC000000000 +A386:00000000000000000FC00020002000200FE000200020002000200FC000000000 +A387:000000000000000018081608118810E81098008003E008800880070000000000 +A388:0000000000000000181014101210101011101110101010901050103000000000 +A389:0000038004400000082014501450145008200540028002800280010000000000 +A38A:0000000000000000082014501450145008200540028002800280010000000000 +A38B:000000000000000036D808201450145014503FF814501450082036D800000000 +A38C:0000038004400000018000400620082009200920082006200040018000000000 +A38D:0000000000000000018000400620082009200920082006200040018000000000 +A38E:0000000000000000008000A800A800A800F800A818A816A81180100000000000 +A38F:00000380044000000040004000400040004000500C500B5008D0080000000000 +A390:00000000000000000040004000400040004000500C500B5008D0080000000000 +A391:000000000000000000C007A00890088004A003A004A008800880078000000000 +A392:0000038004400000080809881D6809180900010007C009201110111000000000 +A393:0000000000000000080809881D6809180900010007C009201110111000000000 +A394:00000000000007C008201110111010101FF0101011101110082007C000000000 +A395:000003800440000003801450145004400FE00440145014500440038000000000 +A396:000000000000000003801450145004400FE00440145014500440038000000000 +A397:0000000000000000024002500260024002400240024006400A40024000000000 +A398:000003800440000003C004200910011007D0011001100E100990086000000000 +A399:000000000000000003C004200910011007D0011001100E100990086000000000 +A39A:000000000220022003E006300A3001D00010001000100E100990086000000000 +A39B:0000000000000000000801880168011801001FF0010009200920010000000000 +A39C:000003800440000004040434042C0420042007E0042034202C20202000000000 +A39D:000000000000000004040434042C0420042007E0042034202C20202000000000 +A39E:000000000000000000C000A00090008007B008C010F010C008B0078000000000 +A39F:0000000000000000070008800BA00AE0088008800BA00AE00880070000000000 +A3A0:000003800440100028C02FB0288C10800080108028802F802880108000000000 +A3A1:000000000000100028C02FB0288C10800080108028802F802880108000000000 +A3A2:000000000000082008200440139011107D7C111011100D000B00080000000000 +A3A3:00000380044000000FE01010101010100FE001000100110011000E0000000000 +A3A4:00000000000000000FE01010101010100FE001000100110011000E0000000000 +A3A5:000000000000000009300550039003900550093001000D000B00080000000000 +A3A6:00000380044000000810081008100FF008100A100C1018102810081000000000 +A3A7:00000000000000000810081008100FF008100A100C1018102810081000000000 +A3A8:00000000000000000080088008800F80088008800080008000800FF800000000 +A3A9:0000038004400000030002C00200020003E00210024802A81AA0064000000000 +A3AA:0000000000000000030002C00200020003E00210024802A81AA0064000000000 +A3AB:0000000000000000000010180828044802880108028804480828101800000000 +A3AC:0000038004400000018001602918290029003F00290029002900010000000000 +A3AD:0000000000000000018001602918290029003F00290029002900010000000000 +A3AE:0000000000000000093009280FE40920092009200FE049202920192000000000 +A3AF:00000380044000000FE001000FE0010009200540038003800540092000000000 +A3B0:00000000000000000FE001000FE0010009200540038003800540092000000000 +A3B1:000000000000000018081608118810E81098008002A001C001C002A000000000 +A3B2:000000000000000009C01130110009200720092011201100093001C000000000 +A3B3:0380044000000540054004401390111011100EE0054005400440038000000000 +A3B4:0000000000000540054004401390111011100EE0054005400440038000000000 +A3B5:00000000000000000000190C251422241D4400841D4422242514190C00000000 +A3B6:0000000000000000008002A002A002A01880168011C012200490049000000000 +A3B7:000003800440100011801F601118114001401950171011D01130010000000000 +A3B8:000000000000100011801F601118114001401950171011D01130010000000000 +A3B9:0000000000001C0003800B600B1803401D4001401910171011D0113000000000 +A3BA:0000000000000000010009200540038009200540038009200540038000000000 +A3BB:0000038004400000012801280128012801280128013031E00D20032000000000 +A3BC:0000000000000000012801280128012801280128013031E00D20032000000000 +A3BD:000000000000000007E008100810081007E00080068009000680008000000000 +A3BE:000003800440000007900860086007A00020002007A008600860079000000000 +A3BF:000000000000000007900860086007A00020002007A008600860079000000000 +A3C0:0000000000000000022002201A28162813A81268123802200220022000000000 +A3C1:000003800440000003E004000400020001E0020004000400040003E000000000 +A3C2:000000000000000003E004000400020001E0020004000400040003E000000000 +A3C3:0000000000000490049002A001C0008000801880168011801000100000000000 +A3C4:000003800440100011E012000400140017E0140004001400120011E000000000 +A3C5:000000000000080008F0090002000A000BF00A0002000A00090008F000000000 +A3C6:000000000000018001600118010007C00920111017D011101110010000000000 +A3C7:00000380044000000E0011481148113011F811301148114811000E0000000000 +A3C8:00000000000000000E0011481148113011F811301148114811000E0000000000 +A3C9:00000000000000000760088009800A800A800A800A8009800880076000000000 +A3CA:00000380044000000C200A20082009200AA00AA00920082008A0086000000000 +A3CB:00000000000000000C200A20082009200AA00AA00920082008A0086000000000 +A3CC:000000000000000010001210112010C01FF010C0112012101000100000000000 +A3CD:0000000000000440028001002288145008201450228801000280044000000000 +A3CE:00000380044000000700088009C00AA00AA00AA00AA009C00880070000000000 +A3CF:00000000000000000700088009C00AA00AA00AA00AA009C00880070000000000 +A3D0:000000000000000000000440044012902AA829282AA812900440044000000000 +A3D1:0000038004400000038004400440038009300550039003900550093000000000 +A3D2:0000000000000000038004400440038009300550039003900550093000000000 +A3D3:000000000000000001E00210021012D00B5006500B5012D0021001E000000000 +A3D4:000000000920054003800380054009200540054001000FE001000FE000000000 +A3D5:000003800440000007C031102D10231021D02130010005400540010000000000 +A3D6:000000000000000003E018881688118810E81098008002A002A0008000000000 +A3D7:00000000000000001E00010009300550039003900550093001001E0000000000 +A3D8:0000038004400000092005400380038005400920010005400540010000000000 +A3D9:0000000000000000092005400380038005400920010005400540010000000000 +A3DA:000000000000000002480248015000E0034002C007000A801240124000000000 +A3DB:0000038004400000062005A004600400052007F00520052007F0052000000000 +A3DC:0000000000000000062005A004600400052007F00520052007F0052000000000 +A3DD:000000000000000000300028262415200CA03FA00620052004A0006000000000 +A3DE:0000038004400000007818800480027802800280027804801880007800000000 +A3DF:0000000000000000007818800480027802800280027804801880007800000000 +A3E0:000000000000000007C0082001000D200B2009A009600100082007C000000000 +A3E1:00000380044000000100010031102C10231020D0203001000100010000000000 +A3E2:0000000000000000008000801888160811881068101800800080008000000000 +A3E3:000000001FF8002000A000A0062005A0046004000480048004001FF800000000 +A3E4:000000000000073004E8042435A00C60042035A00C60042035A00C6000000000 +A3E5:000003800440000008040934092C08200FE00820092069205820402000000000 +A3E6:000000000000000008040934092C08200FE00820092069205820402000000000 +A3E7:00000000000000000EF0010002800FE0028002800FE0028001000EF000000000 +A3E8:00000000101017D0082017D0101011101110101017D0082017D0101000000000 +A3E9:0000038004400000044004401390111011100EE0000001000100010000000000 +A3EA:0000000000000000044004401390111011100EE0000001000100010000000000 +A3EB:00000000000000000F801058136012C0124012401A40166010580F8000000000 +A3EC:00000000000000001110111011100EE000000100010007C00100010000000000 +A3ED:00000380044000001110111011100EE000000100010009000900060000000000 +A3EE:00000000000000001110111011100EE000000100010009000900060000000000 +A3EF:000000000000044004400380111011100EE000000100110011000E0000000000 +A3F0:00000000000007C0082011901150111017D0111015101310082007C000000000 +A3F1:000003800440000001E00200044004A004A004A004A00440020001E000000000 +A3F2:000000000000000001E00200044004A004A004A004A00440020001E000000000 +A3F3:000000000000000003D0043009100A800A800A800A800910042003C000000000 +A3F4:000003800440000010101190115011101110111015101310082007C000000000 +A3F5:000000000000000010101190115011101110111015101310082007C000000000 +A3F6:00000000000000000180016009181100110017C0110011000900010000000000 +A3F7:00000380044000000380026002000A000A000A000A000A000260038000000000 +A3F8:00000000000000000380026002000A000A000A000A000A000260038000000000 +A3F9:0000000000000E0009C00800088008800BE008800880080009C00E0000000000 +A3FA:0000038004400000000801880968111811001700110011000900010000000000 +A3FB:0000000000000000000801880968111811001700110011000900010000000000 +A3FC:0000000000000000003000280024102023E024201CA024A0242013E000000000 +A3FD:000000000380044000000440044002800AA009200AA002800440044000000000 +A3FE:000000000000000000000440044002800AA009200AA002800440044000000000 +A3FF:000000000000000007C00820101010101110111010101010082007C000000000 +A400:000000000000000000003F8020A411240A1807F80A18112420A43F8000000000 +A401:00000380044000000400048804880450042007F80420245014880C8800000000 +A402:00000000000000000400048804880450042007F80420245014880C8800000000 +A403:000000000000000000001100114811480A3007F80A3011481148110000000000 +A404:000000000000000003F00410041003F0001003F000100BF0081007E000000000 +A405:000003800440000010101010101011F010101F101010101011F0101000000000 +A406:000000000000000010101010101011F010101F101010101011F0101000000000 +A407:00000000000000001010101011F010101F10101011F01010082007C000000000 +A408:0000000000000000010011001100111001100110111011001100010000000000 +A409:00000380044000000E00190015001120115017D01150152019000E0000000000 +A40A:00000000000000000E00190015001120115017D01150152019000E0000000000 +A40B:000000000000000007C00920111010101010101012901450082007C000000000 +A40C:00000000000000000700088008F0088008F0088008F008800880070000000000 +A40D:000003800440000007C00820101010101010101010101110092007C000000000 +A40E:000000000000000007C00820101010101010101010101110092007C000000000 +A40F:000000000000000000100810101010900E90109010100B1000D0003000000000 +A410:000003800440000007C008201010101010101010101012900AA007C000000000 +A411:000000000000000007C008201010101010101010101012900AA007C000000000 +A412:0000000000000000010011180928054803880388054809281118010000000000 +A413:0000038004400000082008200440038001000D000B0008000800080000000000 +A414:0000000000000000082008200440038001000D000B0008000800080000000000 +A415:00000000000009200AA009200440038001000D000B0008000800080000000000 +A416:0380044000001830145013901390155019300100092005400380054009200000 +A417:0000000018301450139013901550193001000920054003800540092000000000 +A418:0000000000000000082008200440038009200920038004400820082000000000 +A419:0000038004400000044004401FF004400440044004401FF00440044000000000 +A41A:0000000000000000044004401FF004400440044004401FF00440044000000000 +A41B:000000000000180004C01FA00490188000800F801080108010800F8000000000 +A41C:00000000000000000820082004400380010005400540110011000E0000000000 +A41D:0000038004400000183024480440044003800FE0010001000900060000000000 +A41E:0000000000000000183024480440044003800FE0010001000900060000000000 +A41F:0000000000000000092009200440038001000920092009200100010000000000 +A420:0380044000001830044012901290129004401830038004400920092000000000 +A421:0000000000001830044012901290129004401830038004400920092000000000 +A422:000000000000000002080208011008E01400140008E001100208020800000000 +A423:00000000000000000C040AC409B41C8C2A802A8008801C802A802A8000000000 +A424:000003800440000018C016B0118C10807C8010807C8010801080108000000000 +A425:000000000000000018C016B0118C10807C8010807C8010801080108000000000 +A426:0000000000001830044002800280028004401830038004400820082000000000 +A427:00000000000000000FE01010101010100FE0010007000800082007C000000000 +A428:038004400000001007F008800FF0088007F0010001C002A00490049000000000 +A429:000000000000001007F008800FF0088007F0008001C002A00490049000000000 +A42A:0000000000000000000007C0082009200920044009200920082007C000000000 +A42B:0000038004400000008007F00880088007F0008001C002A00490049000000000 +A42C:0000000000000000008007F00880088007F0008001C002A00490049000000000 +A42D:00000000000000003808260821C82538050001403948270821C8203800000000 +A42E:00000380044000000EE00440044004400380010007C001000900060000000000 +A42F:00000000000000000EE00440044004400380010007C001000900060000000000 +A430:000000000AC00AA00F900A800A8000800A800A800F800A800A80008000000000 +A431:00000000000000000FF01080108010800FF00080008008800880070000000000 +A432:000003800440000011101110092007C0010001000100110011000E0000000000 +A433:000000000000000011101110092007C0010001000100110011000E0000000000 +A434:0000000000000000202020203FF82024202420382020202010400F8000000000 +A435:00000000000000001110111011100EE0000009200920092000000FE000000000 +A436:03800440000003800440054005401E50155014F0054005400440038000000000 +A437:00000000000003800440054005401E50155014F0054005400440038000000000 +A438:00000000000007C00820082007C001000FE001000540155010100FE000000000 +A439:0000038004400000066005D00440044007C004400000111011100EE000000000 +A43A:0000000000000000066005D00440044007C004400000111011100EE000000000 +A43B:0000000000000000000060305054489445104214451448905054603400000000 +A43C:000000000380044000006030505448924512421C451248925054603000000000 +A43D:000000000000000000006030505448924512421C451248925054603000000000 +A43E:00000000000000000EE00100028002800EA00BA00AE0028001000EE000000000 +A43F:03800440000001E0020004400440040007E0040004400440020001E000000000 +A440:00000000000001E0020004400440040007E0040004400440020001E000000000 +A441:000000000000000003C00400082008100F90081008200800040003C000000000 +A442:000003800440000000600058004003F8184020404C404B4008C0080000000000 +A443:00000000000000000030002C002001FC0C201020262025A00460040000000000 +A444:00000000000000000F2010D010501020080006000100008010800F0000000000 +A445:038004400000049002A001C001C002A004900080188016801180100000000000 +A446:000000000000049002A001C001C002A004900080188016801180100000000000 +A447:0000000000000000082008200180014001200100010009000500030000000000 +A448:03800440000002C01AA0069002801A8006800080188016801180100000000000 +A449:00000000000002C01AA0069002801A8006800080188016801180100000000000 +A44A:000000000000111011100FE001000FE01110111001000D000B00080000000000 +A44B:000003800440000001800160011801001FF001001FF001001FF0010000000000 +A44C:000000000000000001800160011801001FF001001FF001001FF0010000000000 +A44D:00000000000000000C000B0008C0080008400840084008400800080000000000 +A44E:0000000000000000600612480A50099008100FF0081009901248624600000000 +A44F:0000038004400000088608880890081008100FF0081049902A481A4600000000 +A450:0000000000000000088608880890081008100FF0081049902A481A4600000000 +A451:0000000000000000610C11100920082008200FE0082009201110610C00000000 +A452:03800440000003800440092009200440038000000FF00060018006000FF00000 +A453:0000000003800440092009200440038000000FF00060018006000FF000000000 +A454:00000000082028282448238810100FE0210821083FF821082108010000000000 +A455:0000000000000000311809200540054005400540054005400920311800000000 +A456:00000380044000000D200BA0096001000D200BA0096001001900070000000000 +A457:00000180016001000D200BA0096001000D200BA0096001001900070000000000 +A458:000000000000000003800440044008200820082008200920092006C000000000 +A459:000000000000000007C00820111011101FF0111011101010082007C000000000 +A45A:0000038004400000088008800E8009C008B00880089008900890088000000000 +A45B:0000000000000000088008800E8009C008B00880089008900890088000000000 +A45C:0000000000000000008007F008800880088007F0008000900090009000000000 +A45D:00000000000000001110111011100EE000000440028001000280044000000000 +A45E:00000000038004400000110811080A080A0804680A580A401140114000000000 +A45F:00000000000000000000110811080A080A0804680A580A401140114000000000 +A460:00000000000006200920062000200620092006200020062001A0006000000000 +A461:00000000000000001110111011100EE004400540038001000900060000000000 +A462:00000380044000001110111011100EE004400440044015401540088000000000 +A463:00000000000000001110111011100EE004400440044015401540088000000000 +A464:000000000000000000002208220814681458084014E0144022E0224000000000 +A465:00000380044000000920092004400380044008200FE008200440038000000000 +A466:00000000000000000920092004400380044008200FE008200440038000000000 +A467:000000000000111011100EE0000004400380000014501390082007C000000000 +A468:00000380044000000660055004C804400E40154015400E400440044000000000 +A469:00000000000000000660055004C804400E40154015400E400440044000000000 +A46A:00000000000000001860165811C6104096405A4032405A409640104000000000 +A46B:000000000000000004400440038001000D200BA00960010001000FE000000000 +A46C:00000380044000000100010031102D10231021D0213001000100010000000000 +A46D:00000000000000000080008018881688118810E8109800800080008000000000 +A46E:00000000000000000220022001C018881688118810E810980080008000000000 +A46F:0000038004400000111011101110092007C031102D10231021D0213000000000 +A470:0000000000000000088808880888049003E018881688118810E8109800000000 +A471:0000000000000000000800C800A8009800801F8024803F8024801F8000000000 +A472:000003800440000028F029083A04280428040004000403840264021800000000 +A473:000000000000000028F029083A04280428040004000403840264021800000000 +A474:0000000000000180016001000920054003800540092001000D00030000000000 +A475:0000000000000000000400640054004C0FC038E01540154038E007C000000000 +A476:00000380044000000010031002D0023002001FC002001FC00200020000000000 +A477:00000000000000000010031002D0023002001FC002001FC00200020000000000 +A478:000001C00130010007C00920155013901550092007C001001900070000000000 +A479:000000000000000012C012B00C8000C00CB0128012C000B00680018000000000 +A47A:00000380044000000CC012B012801E80128012E00C9000900690018000000000 +A47B:00000000000000000CC012B012801E80128012E00C9000900690018000000000 +A47C:00000000000002000FA0022000200FA0106010001F00102010400F8000000000 +A47D:00000000000000000CC012B012800080128012800C8000800680018000000000 +A47E:000003800440000003D00430081008000F80080008000810042003C000000000 +A47F:000000000000000003D00430081008000F80080008000810042003C000000000 +A480:000000000000000008200820044003800120014001800110011000E000000000 +A481:000000000180016001000D200BA00960010007C001000D000B00080000000000 +A482:0380044000001110111017D011101110082007C00100111011100EE000000000 +A483:0000000000001110111017D011101110082007C00100111011100EE000000000 +A484:00000000000000000020092009200FE0092009200020062001A0006000000000 +A485:0380044000000180016001000D200BA00960010007C001000D00030000000000 +A486:0000000000000180016001000D200BA00960010007C001000D00030000000000 +A487:000000000000092009200440038000000FE00000038004400920092000000000 +A488:00000380044000000040004003C0044008400840044003C00040004000000000 +A489:00000000000000000040004003C0044008400840044003C00040004000000000 +A48A:000000000000000000F00700090010801070108009000700010000F000000000 +A48B:038004400000393805400540393801001FF00100393805400540393800000000 +A48C:000000000000393805400540393801001FF00100393805400540393800000000 +A48D:00007FFE61B66DB661866DF66DF67FFE7FFE738E6DB673B66DB6738E7FFE0000 +A48E:00007FFE61B66DB661866DF66DF67FFE7FFE73866DBE738E6DBE73867FFE0000 +A48F:00007FFE61B66DB661866DF66DF67FFE7FFE73866DBE738E6DBE73BE7FFE0000 +A490:0000000000000000010001000100010001000100010001000100010000000000 +A491:000000000000000000400040004000400040004000400C40034000C000000000 +A492:0000000000000000040004000400040004000400040004600580060000000000 +A493:0000000000000000060005800460040004000400040004000400040000000000 +A494:0000000000000000018001600100010001000100010001000D00030000000000 +A495:00000000000000000020062005A0046004000400040004000400040000000000 +A496:00000000000000000040004000400040004000400C400B4008C0080000000000 +A497:000000000000000001800160011801000100010031002D002300200000000000 +A498:000000000000000000C800A80098008000800080008018800680018000000000 +A499:0000000000000000180816081188106810180000000000000000000000000000 +A49A:000000000000000003C00420040004000200018000400020042003C000000000 +A49B:0000000000000000004000400040034002C00200020002000200020000000000 +A49C:000000000000000003C00420081000100010001000100E100990086000000000 +A49D:000000000000000003D00430081008000800080008000810042003C000000000 +A49E:00000000000000000E2009A008600800080008000800086009A00E2000000000 +A49F:000000000000000001E00200040004000400040004000400020001E000000000 +A4A0:00000000000000000FC0002000200020002000200020002000200FC000000000 +A4A1:0000000000000000082008200440038000000000000000000000000000000000 +A4A2:0000000000000000000000000000000000000000038004400820082000000000 +A4A3:0000000000000000180806080188006800180000000000000000000000000000 +A4A4:000000000000000010101010101010101010101010101010082007C000000000 +A4A5:0000000000000000086008800880088008800880088008800880070000000000 +A4A6:0000000000000000183024480440044004400440044004400440038000000000 +A4A7:000000000000000003800440044008200820082008200920092006C000000000 +A4A8:000000000000000007C00820101010101010101010101010082007C000000000 +A4A9:0000000000000000038004400440044004400440044004400440038000000000 +A4AA:00000000000000000FE01010101010100FE00000000000000000000000000000 +A4AB:000000000000000001000280044008200FE00000000000000000000000000000 +A4AC:000000000000000000C000A00090008007800880108010800880078000000000 +A4AD:000000000000000000C000A00090008007C008A0109010800880078000000000 +A4AE:0000000000000000000800C800A8009807800880108010800880078000000000 +A4AF:0000000000000000002000200020002001E0022004200420022001E000000000 +A4B0:000000000000000003C004000400020001C0020004000400040003C000000000 +A4B1:0000000000000000078000400040008007000080004000400040078000000000 +A4B2:000000000000000003E00400040003E00400040003E00400040003E000000000 +A4B3:00000000000000001110111011100EE000000000000000000000000000000000 +A4B4:0000000000000000444444444C64345804400440038000000000000000000000 +A4B5:00000000000000001C7008200820044003800000000000000000000000000000 +A4B6:00000000000000004444444444443BB800000000000000000000000000000000 +A4B7:0000000000000000183024480440044003800000000000000000000000000000 +A4B8:00000000000000000710089008A007C000800080008000800C80030000000000 +A4B9:00000000000000000E20112011400F800100010001000120012000C000000000 +A4BA:000000000000000007900860086007A00020002007A008600860079000000000 +A4BB:000000000000000000200020002000200020022005200520032004C000000000 +A4BC:0000000000000000000004400440028002800100028002800440044000000000 +A4BD:00000000000000000C6002800100028002800440044008200820082000000000 +A4BE:0000000000000FE00820044002800280010002800280044008200FE000000000 +A4BF:0000000000000000000030182828244822882108228824482828301800000000 +A4C0:0000000000000000000010180828044802880108028804480828101800000000 +A4C1:0000000000000000000030182828244802880108028804480828101800000000 +A4C2:00000000000000000000190C251422241D4400841D4422242514190C00000000 +A4C3:0000000000000FE0082004400440028002800100028002800440044000000000 +A4C4:00000000000000000FE001000100010001000100010001000100010000000000 +A4C5:00000000000000001FC002200210020002000200020002000200020000000000 +A4C6:0000000000000000000004400440044000000000000000000000000000000000 +A4C7:00007FFE61B66DB661866DF66DF67FFE7FFE71866FF66FEE6FDE71DE7FFE0000 +A4C8:00007FFE61B66DB661866DF66DF67FFE7FFE71CE6FB66FCE6FB671CE7FFE0000 +A4C9:00007FFE61B66DB661866DF66DF67FFE7FFE71CE6FB66FC66FF671CE7FFE0000 +A4CA:00007FFE61B66DB661866DF66DF67FFE7FFE71866FB66F866FB671B67FFE0000 +A4CB:00007FFE61B66DB661866DF66DF67FFE7FFE718E6FB66F8E6FB6718E7FFE0000 +A4CC:00007FFE61B66DB661866DF66DF67FFE7FFE71C66FBE6FBE6FBE71C67FFE0000 +A4CD:00007FFE61B66DB661866DF66DF67FFE7FFE718E6FB66FB66FB6718E7FFE0000 +A4CE:00007FFE61B66DB661866DF66DF67FFE7FFE71866FBE6F8E6FBE71867FFE0000 +A4CF:00007FFE61B66DB661866DF66DF67FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +A4D0:000000007C4242427C424242427C0000 +A4D1:000000007C4242427C40404040400000 +A4D2:0000000002020202023E4242423E0000 +A4D3:00000000784442424242424244780000 +A4D4:000000007F0808080808080808080000 +A4D5:000000000808080808080808087F0000 +A4D6:000000003C424240404E4242463A0000 +A4D7:00000000424448506060504844420000 +A4D8:000000004222120A06060A1222420000 +A4D9:00000000040404040404044444380000 +A4DA:000000003C42424040404042423C0000 +A4DB:000000003C42420202020242423C0000 +A4DC:000000007E02020408102040407E0000 +A4DD:000000007E4040407C40404040400000 +A4DE:0000000002020202023E0202027E0000 +A4DF:00000000424266665A5A424242420000 +A4E0:0000000042626252524A4A4646420000 +A4E1:000000004040404040404040407E0000 +A4E2:000000003C424240300C0242423C0000 +A4E3:000000007C4242427C48444442420000 +A4E4:0000000042422222123E4242423E0000 +A4E5:00000000080814142222224141410000 +A4E6:00000000414141222222141408080000 +A4E7:00000000424242427E42424242420000 +A4E8:000000005C62424272020242423C0000 +A4E9:00000000384444404040404040400000 +A4EA:00000000424242425A5A666642420000 +A4EB:00000000424224241818242442420000 +A4EC:00000000414122221408080808080000 +A4ED:000000003E424242423E4242423E0000 +A4EE:0000000018242442427E424242420000 +A4EF:00000000424242427E42422424180000 +A4F0:000000007E4040407C404040407E0000 +A4F1:000000007E0202023E020202027E0000 +A4F2:00000000080808080808080808080000 +A4F3:000000003C42424242424242423C0000 +A4F4:000000004242424242424242423C0000 +A4F5:000000003C4242424242424242420000 +A4F6:000000007E0202020202020202020000 +A4F7:000000001E22424242424242221E0000 +A4F8:00000000000000000000000018180000 +A4F9:00000000000000000000000018080810 +A4FA:00000000000000000000000066660000 +A4FB:00000000000000000000000066620204 +A4FC:00000000000018180000001808081000 +A4FD:00000000000018180000001818000000 +A4FE:00000000000000000070000006060000 +A4FF:000000000000007E0000007E00000000 +A500:0000000000000FE00100010001001930254825481930010001000FE000000000 +A501:0000000000000FE001000FE0010019302548193001000FE001000FE000000000 +A502:000000000000242024401A800100010002000200022001480090016000000000 +A503:0000000000003E0008000800046003A0012001E000200020002000F800000000 +A504:0000000000003E0008003E00046003A0012001E0002000F8002000F800000000 +A505:0000000000003838444447C44544393801000380044004400440038000000000 +A506:0000000000000380044004400440139001003938454447C44444383800000000 +A507:00000000000004200860086004A003200020002000200020002000F800000000 +A508:00000000000004200860086004A003200020002000A80020002000F800000000 +A509:0000000000001FF0010001000540010001000100010001000100010000000000 +A50A:0000000000001FF0010001000540010001000FE0010001000100010000000000 +A50B:0000000000001FF0010001000100010001000100010001000100010000000000 +A50C:000000000000038004400440044003800100010001000100010007C000000000 +A50D:0000000000000380044004400440038001000100010007C0010007C000000000 +A50E:000000000000124012400DC00040004000400078004000400040007800000000 +A50F:000000000000124012400DF80040004000400078004000400040007800000000 +A510:00000000000049004900370001000150015403A8050009000900060000000000 +A511:00000000000049004900372001000150015403A8050009200900060000000000 +A512:000000000000124012400DC00040004000480078004800400040004000000000 +A513:000000000000124012400DC0004000480078004800400040071008E000000000 +A514:00000000000006180A2812482288020802080208020802080208020800000000 +A515:0000000000001F800080008000800080008007F8088808880888070800000000 +A516:0000000000000920092009200920092009200920092009200920092000000000 +A517:00000000000009200920092009200920092009200920092000000FE000000000 +A518:0000000000001010101010100000010001000100000010101010101000000000 +A519:00000000000010101FF010100000010001000100000010101FF0101000000000 +A51A:000000000000000000001C703EF83EF83EF83EF83EF81C70482437D800000000 +A51B:000000000000000000001C70228822882288228822881450482437D800000000 +A51C:00000000000000002000204020003FE020083FE0200020402000000000000000 +A51D:000000000000000020002000204020003FE82000204020002000000000000000 +A51E:000000000000A00AA00AA00AA44AAAAAAAAAAAAAA44AFBBEA00AA00A00000000 +A51F:0000000000002008200820082C68329821082288228822882108200800000000 +A520:000000000000042004200420042004203FFC0420042004200420042000000000 +A521:000000000000062009600A6004A0032000200020002000200020007800000000 +A522:0000000000000810142822440990024002400240024002400240018000000000 +A523:000000000000082000001C70228822882288228822881450482437D800000000 +A524:000000000000124012400DC0004000480078004800400040004001F000000000 +A525:000000000000124012400DC000500044007C004400500040004001F000000000 +A526:000000000000124012400DC00040044407FC044400400040004001F000000000 +A527:000000000000000003800440004001800240024001800200022001C000000000 +A528:000000000000124012400DC00040124012400DC0007000C80548023001000000 +A529:000000000000124012400DC00040124012400DC0007000CA0532020C01000000 +A52A:0000000000000E000F800FE00F800E000C000E000F800FE00F800E0000000000 +A52B:000000000000308C49523E3C0410041004100410041004100808100400000000 +A52C:0000000000000E001100110011100A100FF00A101110110011000E0000000000 +A52D:0000000000000E001100110011500A100FF00A101150110011000E0000000000 +A52E:00000000000003800D6011101390244824482388145018300C60038000000000 +A52F:0000000000003FF801000100054001000FE00100054001000100010000000000 +A530:000000000000010001000100054001003FF80100054001000100010000000000 +A531:0000000000001110111011101EE01000100010001110111011100EE000000000 +A532:00000000000000C00100111011101EE01000111011100EE00080030000000000 +A533:000000000000121012200DC00080008001100100012401040088007000000000 +A534:000000000000121012200DC00088008001100100012401040088007000000000 +A535:00000000000008000800080009E00A500C900860080008000800080000000000 +A536:00000000000008000A00080009E00A500C9008600A0008000800080000000000 +A537:00000000000000000000018003C007E007E003C0018000000000000000000000 +A538:00000000000000000000018003C007E007E003C001800000071008E000000000 +A539:00000000000000000000018003C007E017E803C0018000000000000000000000 +A53A:00000000000001000200010044A245223BDC0100008001000200010000000000 +A53B:0000000000001C0022002200222814281FE814282228220022001C0000000000 +A53C:0000000000001C002200220022A814281FE8142822A8220022001C0000000000 +A53D:0000000000000060018006000180186024101860018006000180006000000000 +A53E:0000000000000060018006000180186024141860018006000180006000000000 +A53F:00000000000003E004000FC008000800080009800A400C400440038000000000 +A540:00000000000000000000000004404C6433980000000000000000000000000000 +A541:0000000000000000000004400000000004404C64339800000000000000000000 +A542:00000000000000000100000004404C6433980000000001000000000000000000 +A543:00000000000001000200040004000800080009C00A200C20042003C000000000 +A544:00000000000001000200040004000800080009C00A200CA0042003C000000000 +A545:000000000000248024801B80008000A8008801F8028804A80480030000000000 +A546:0000000000000738084010801080210021002100108010800840073800000000 +A547:00000000000007E0001007E00400043005D00610001003F0040003F000000000 +A548:00000000000000800080008000800080008007F8088808880888070800000000 +A549:0000000000000380044004400440038001000540010005400100010000000000 +A54A:00000000000000000380044004400440044004402288210812900C6000000000 +A54B:00000000000000000380044004400444044004402288210812900C6400000000 +A54C:000000000000442244224E7235AC042004200420042004200420042000000000 +A54D:00000000000000000100444444444EE437D80440044005400440044000000000 +A54E:000000000000121012200DC00080008001000100010401040088007000000000 +A54F:000000000000248024801B8000800080008000B000C8008000B000C800000000 +A550:000000000000222022201DE00020002000A80020002000200020002000000000 +A551:000000000000380E44104220424032400FF0024C024204420822701C00000000 +A552:0000000000003FE020202020203C202422242024203C202020203FE000000000 +A553:00000000000000003FF02088208824B0208020803FF000080008003000000000 +A554:00000000000001000100028002800440044008200820101010101FF000000000 +A555:0000000003800C6018301450228821082288145018300C600380000000000000 +A556:00000000000001000100028012900440044008200820101010101FF000000000 +A557:0000000000000FC008200810081008200FC008200810081008200FC000000000 +A558:00000000000003C00420082001C001000100010001C00820042003C000000000 +A559:00000000000010F011081208107010401FC0104010701208110810F000000000 +A55A:0000000000001110111013900D60010001000100010001000100010000000000 +A55B:00000000000017D0111013900D6001000100010001000100010007C000000000 +A55C:0000000000000008010800081108110812980C68000801080008000800000000 +A55D:00000000000000140214001422142214253418D4001402140014001400000000 +A55E:0000000000000A000A000A000BF00A000A000BF00A000A000A000A0000000000 +A55F:0000000000000A000A000A000BF00A000A000BF00A000200071008E000000000 +A560:0000000000000030000800083FF02220222022202220222022203FE000000000 +A561:0000000000000030008800083FF02220222422202220222022203FE000000000 +A562:0000000000000EE01110111011100FE003800440044004400380000000000000 +A563:0000000000000EE01110111011100FE003800440044014500380000000000000 +A564:000000000000000000000EE0111011100FE0111011100EE00000000000000000 +A565:000000000000010000000EE0111011104FE4111011100EE00000010000000000 +A566:000000000000003001C006401880010007001930014801880088007000000000 +A567:0000000000001FF0038003800540054009200920111011102108210800000000 +A568:0000000000000EE0111011101FF0038005400540092009201110111000000000 +A569:000000000000121012200DC00080488049003700010401040088007000000000 +A56A:00000000000004000800086004A0032000200020002000200020002000000000 +A56B:0000000000000E00110011000100010002000C3810443FC40044003800000000 +A56C:0000000000001FF022882288228822881FF022882288228822881FF000000000 +A56D:000000000000442244224E7235AC042004200420442244224A52318C00000000 +A56E:0000000000003018482444443FF8044004400440044008200820101000000000 +A56F:0000000000000FE00100010001000100010001000100010001000FE000000000 +A570:000000000000444044403BC000400040007C0044004400440044007C00000000 +A571:00000000000010001F8010800080008800F8008800800080008001C000000000 +A572:00000000000010001F80108000A0008800F8008800A00080008001C000000000 +A573:00000000000010001F801080008008880FF8088800800080008001C000000000 +A574:0000000000001C0008000800080008080FF8008800800080008001C000000000 +A575:0000000000001C0008000800082008080FF8008800A00080008001C000000000 +A576:0000000000000390045008300810040003800040002008200C400B8000000000 +A577:0000000000000390045009300810040003800040002009200C400B8000000000 +A578:0000000000000000006001900610186010001200106011901610186000000000 +A579:000000000000000000000000381C7C3E7FFE7C3C381C00000000000000000000 +A57A:0000000000000100028002800440044008200440044002800280010000000000 +A57B:0000000000000100028002800440044028280440044002800280010000000000 +A57C:000000000000002000200FE0082008200820082008200FE00020002000000000 +A57D:0000000000002108210823881D70010001000FE0010001000100010000000000 +A57E:0000000000002108210823881D70010001000FE001000FE00100010000000000 +A57F:00000000000000E011000200020002001200020002000200110000E000000000 +A580:00000000000000E011000200020002001220020002000200110000E000000000 +A581:000000000000442244224E7235AC0420042004200420042004200E7000000000 +A582:000000000000442244224E7235AC0420042004A00420042004200E7000000000 +A583:000000000000248024801B80009800A800C80188028004800480030000000000 +A584:000000000000248024981BA800C8018802800480048003001C40238000000000 +A585:0000000000000FE001004104410441047FFC41044104410401000FE000000000 +A586:000000000000248024801B800080008000F001A802A804900480030000000000 +A587:000000000000222022202220222022203FE0002000200020002000F800000000 +A588:000000000000222022202220222022203FE00020002000A8002000F800000000 +A589:0000000000000380044004400440028001000280044004400440038000000000 +A58A:0000000000000380044014500440028001000280044014500440038000000000 +A58B:0000000000000100010001000920010001000100092001000100010000000000 +A58C:0000000000000100010001000100010009200100010001000100010000000000 +A58D:0000000000001040104010401040104012481040104010401040104000000000 +A58E:0000000000000400040004000480040004000400048004000400040000000000 +A58F:0000000000003018482444443FF80440044004400440082008201FF000000000 +A590:0000000000003018482444443FF8044004400440082008281FF8000800000000 +A591:0000000000003F800080008007F8008800880088008800880008000800000000 +A592:00000000000000000000010038387C7C7FFC7C7C383801000000000000000000 +A593:0000000000004900490037200100017801840324050809000900060000000000 +A594:0000000000000FE00100010009200100010001000920010001000FE000000000 +A595:0000000000002108210823881D700100010005F4001000100010001000000000 +A596:0000000000004210421047103AE0020002000BE8002000F8002000F800000000 +A597:0000000000004210421047103AE00200020003E000200020002000F800000000 +A598:00000000000003800C6010101390244824482288911292924C64339800000000 +A599:0000000000002108210823881D700100010001F0001000100010001000000000 +A59A:0000000000004210421047103AE00200020003E0002000F8002000F800000000 +A59B:0000000000000420042004203FFC0420042004203FFC04200420042000000000 +A59C:0000000000003838444444444444383800000380044004400440038000000000 +A59D:0000000000000E001100110011000A0007F00A081108111011000E0000000000 +A59E:0000000000000E001100110011400A0007F00A081148111011000E0000000000 +A59F:000000000000100029082B881D700100010001000100010001000FE000000000 +A5A0:000000000000100029082B881D700100010001000540010001000FE000000000 +A5A1:000000000000101029282BA81D700100010001000100010001000FE000000000 +A5A2:0000000000000060008001003938454447C445443938010002000C0000000000 +A5A3:000000000000001800200040385C446247E246623A5C024004801B0000000000 +A5A4:000000000000070008800880088007000240020003E002000240020000000000 +A5A5:0000000000000E001100110011000E0004A0042007E0042004A0040000000000 +A5A6:0000000000001130115011501190119011101310131015101510191000000000 +A5A7:0000000000001130115011501190119051141310131015101510191000000000 +A5A8:000000000000000000001000100010001FF01008100810080030000000000000 +A5A9:0000000000001000100010001FF010081008100800300000071008E000000000 +A5AA:000000000000000000001000120010001FF01008120810080030000000000000 +A5AB:000000000000000000001000100010001FF01008100810480070004000000000 +A5AC:0000000000000C30145004100410041000000080008000800080008000000000 +A5AD:0000000000000C30145004100410041000000080008002A00080008000000000 +A5AE:0000000000000C3014500410041004100000008000800080008003E000000000 +A5AF:0000000000000C30145004100410041000000080008002A0008003E000000000 +A5B0:000000000000000000001100150011001FF01108150811080030000000000000 +A5B1:000000000000000000001100110011001FF01108110811080030000000000000 +A5B2:000000000000000000001500150015001FF01508150815080030000000000000 +A5B3:000000000000000000001400150014001FF01408150814080030000000000000 +A5B4:00000000000003800C6010101010200821082008101010100C60038000000000 +A5B5:000000000000038004400540044003800100010005400100010007C000000000 +A5B6:000000000000038004400540044003800100010001000100010007C000000000 +A5B7:00000000000004000860086004A0032004200420042004200420042000000000 +A5B8:0000000000001FF0111011101110111011F011101110111011101FF000000000 +A5B9:0000000000000820082008200920082008200920082008200440038000000000 +A5BA:000000000000111011101EE01000111011101EE01000111011100EE000000000 +A5BB:0000000000003838044002800280028022900280028002800440383800000000 +A5BC:0000000000003938044002800280028002800280028002800440393800000000 +A5BD:00000000000022301DD022301DD022301DD00010001000100010007C00000000 +A5BE:0000000000007C7C044004400440044007C004400440044004407C7C00000000 +A5BF:000000000000111011100EE00000111011100EE00000111011100EE000000000 +A5C0:00000000000022301DD022301DD022301DD000100010007C0010007C00000000 +A5C1:000000000000000000000000381C442247E246623A5C024004801B0000000000 +A5C2:00000000000000D8012002403A5C466247E246623A5C024004801B0000000000 +A5C3:0000000000000030004800880110020007000F801FC00F800700020000000000 +A5C4:0000000000000030004800880110124007000F801FC00F800700020000000000 +A5C5:000000000000221022301DD00010221022301DD0001000100010007C00000000 +A5C6:000000000000221022301DD00010221022301DD0001000540010007C00000000 +A5C7:0000000000000FE002800280044004400820482430181FF00820044000000000 +A5C8:00000000000007C0000007C001000280044028285FF428281450082000000000 +A5C9:000000000000000003C004200FF0042003C004200420042003C0000000000000 +A5CA:000000000000000003C004200FF0042003C004200FF0042003C0000000000000 +A5CB:0000000000001FF010001000100010001FF010001000100010001FF000000000 +A5CC:000000000000124012400DC000480050006000C0014002400240018000000000 +A5CD:0000000000001FF010001080100010001FF010001080100010001FF000000000 +A5CE:000000000000124012400DC000480050006004C8014002400240018000000000 +A5CF:000000000000000003C004200400040003C004200420042003C0000000000000 +A5D0:00000000000003C004200400040003C00420042003C00000071008E000000000 +A5D1:0000000000000C6012902108228802800280010001000100010007C000000000 +A5D2:0000000000000C6012902108228802800280010001000540010007C000000000 +A5D3:00000000000000E001300230020002E0033002300200020002000F8000000000 +A5D4:00000000000000E001300230020002E00B3402300200020002000F8000000000 +A5D5:00000000000000E001300230020002E00330023002000F8002000F8000000000 +A5D6:00000000000000E001300230020002E00B34023002000F8002000F8000000000 +A5D7:00000000000003E00210021003E00210021003E002000A8002000F8000000000 +A5D8:00000000000007F00508050805F00508050805F00500050005001FC000000000 +A5D9:00000000000007F00508050805F00508050805F00500154005001FC000000000 +A5DA:000000000000000003E004100490041003E004100490041003E0000000000000 +A5DB:00000000000001E006100860080009C00E2008C0080008F00B080C3000000000 +A5DC:00000000000000000000044040044444644C5BB4400444200000000000000000 +A5DD:0000000000000000010000000380044008200820082004400380101000000000 +A5DE:0000000000001FF00000038004400820082008200440038000001FF000000000 +A5DF:00000000000003D00450087008500400038000400A200A200E400B8000000000 +A5E0:0000000000003870448842840204020407F808101020204059B266CC00000000 +A5E1:000000000000044004A004A004A004C807500C20145014501450082000000000 +A5E2:000000000000000000020002309248924C924B6E300200020002000000000000 +A5E3:0000000000003E100808083408C00B000C000B0008C0083408083E1000000000 +A5E4:000000000000084014A014A014A008C8155026200A500A500A50042000000000 +A5E5:000000000000084014A014A014A048CA155026200A500A500A50042000000000 +A5E6:0000000000000C6012902108228802800280010001000120012000C000000000 +A5E7:0000000000000C6012902108228802800280010001000128013000C000000000 +A5E8:00000000000000C003000C00030000C0002000C003000C00030000C000000000 +A5E9:00000000000000C003000C00030000C0082400C003000C00030000C000000000 +A5EA:00000000000010E011001200120012001200120012001200110010E000000000 +A5EB:0000000000001070148011001100110011001100110011001480107000000000 +A5EC:000000000000000000000000381C442247E24422381C00000000000000000000 +A5ED:000000000000000000000000381C442247E24422381C00000240000000000000 +A5EE:0000000000000000000001003838444447C44444383801000000000000000000 +A5EF:000000000000000C0014002470444C8443844264441C48005000600000000000 +A5F0:000000000000000C0114002470444C8443844264441C48005100600000000000 +A5F1:00000000000000F0030804300800080008000800080008F00B080C3000000000 +A5F2:00000000000000F0030806300A000A000A000A000A000AF00B080C3000000000 +A5F3:000000000000038004400440428441047FFC4104428404400440038000000000 +A5F4:000000000000038004400440529441047FFC4104529404400440038000000000 +A5F5:000000000000000003C014281FF8142803C014281FF8142803C0000000000000 +A5F6:000000000000000003C044227FFE442213C844227FFE442203C0000000000000 +A5F7:0000000000001010101010101010101000000100010001000100010000000000 +A5F8:000000000000101010101010101001000100010001000000071008E000000000 +A5F9:0000000000001010101010101010101000000100010009200100010000000000 +A5FA:0000000000000100010001001110101010101010111001000100010000000000 +A5FB:0000000000000100010001000100454445443BB8010001000100010000000000 +A5FC:0000000000000100010001000100454445443BB8010011100100010000000000 +A5FD:0000000000000100010011100100454445443BB8010011100100010000000000 +A5FE:00000000000007C0010011100100454405443BB801001110010007C000000000 +A5FF:0000000000000F00108020800700040007F804000700208010800F0000000000 +A600:0000000000000F00108020800720040007E804000720208010800F0000000000 +A601:0000000000000F00108020800728040807F804080728208010800F0000000000 +A602:0000000000000F00108020880708040807F804080708208810800F0000000000 +A603:0000000000002108210813900D6001000100010001000100010007C000000000 +A604:0000000000002108210813900D6001000100010005400100010007C000000000 +A605:0000000000002108210813900D60010001000540010007C0010007C000000000 +A606:0000000000002108210813900D6001000100010007C00100010007C000000000 +A607:0000000000002108210813900D60010001000100010009200FE0082000000000 +A608:0000000000001248124812481248124812481248124812481248124800000000 +A609:0000000000001EF00100028002800280028002800280028001001EF000000000 +A60A:0000000000002108210813900D600100010001F0015001F0015001F000000000 +A60B:000000000000121012200DC00080008001000138014401440088007000000000 +A60C:0000000000000000000000003FFC0000000000003FFC00000000000000000000 +A60D:0000000000000000000000000000000001000100028002800440044000000000 +A60E:000000000000000000000420024001800FF00180024004200000000000000000 +A60F:0000000000000000000000000000000000003A884694438452C422B800000000 +A610:00000000000001C002200410641064161C1E04100410041002D601CE00000000 +A611:000000000000111011100EE004400440044004400440155015500EE000000000 +A612:000000000000060C183060C01830060C01FE060C183060C01830060C00000000 +A613:00000000000003C004200400040004000380040004000400042003C000000000 +A614:000000000000222022601DA00020002000E40138002000200020002000000000 +A615:0000000000000014071408940894089445144214251418FC0014001400000000 +A616:0000000000000FE00820092008200820092008200820092008200FE000000000 +A617:0000000000000218022802480288020802080208220812080A08060800000000 +A618:00000000000003700D983118010001700198011801000100010007C000000000 +A619:0000000000000FE001000100010001F0010801080130010001000FE000000000 +A61A:0000000000001110000019982220222022202220222019980000111000000000 +A61B:000000000000121012200DC0008000800100010001FC01040088007000000000 +A61C:0000000000003FF8210811101110092009200540054003800380010000000000 +A61D:0000000000000FF008900C900B600800080008000800080008003E0000000000 +A61E:000000000000442044603BA000240020003E0020002400200020002000000000 +A61F:0000000000001C00220022001C6008900510031004E004000200018000000000 +A620:000000000000111011100EE0000007C00820101010101010082007C000000000 +A621:0000000000000080008000800080008000800080008000800080008000000000 +A622:0000000000000380044004400380010005400100054001000164019800000000 +A623:0000000000003800440047804440384003800040004003800200020000000000 +A624:0000000000000C000A00090008000900090009000FE001200120012000000000 +A625:0000000000000C000A00090008000800080009C00A200C100C10082000000000 +A626:00000000000001C002001F8004000400040004C005200620022001C000000000 +A627:0000000000000CC01340004000400040004000E001100110011000E000000000 +A628:00000000000004200000000004200420042003C004200420042003C000000000 +A629:0000000000000070008800880C701220114011800E4000400080030000000000 +A62A:0000000000003018482444443FF8044004400440044048242828101000000000 +A62B:000000000000038004400440044003800100010001000110011000E000000000 +A62C:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE61C67DBE61BE6FBE61C67FFE0000 +A62D:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE618E7DB661B66FB6618E7FFE0000 +A62E:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE61867DBE618E6FBE61867FFE0000 +A62F:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE61867DBE618E6FBE61BE7FFE0000 +A630:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE63CE7DB671B67DB663CE7FFE0000 +A631:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE63EE7DCE71EE7DEE63C67FFE0000 +A632:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE63867DF671867DBE63867FFE0000 +A633:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE638E7DF671C67DF6638E7FFE0000 +A634:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE63B67DB671867DF663F67FFE0000 +A635:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE63867DBE71867DF663867FFE0000 +A636:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE63CE7DBE718E7DB663CE7FFE0000 +A637:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE63867DF671EE7DDE63DE7FFE0000 +A638:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE63CE7DB671CE7DB663CE7FFE0000 +A639:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE63CE7DB671C67DF663CE7FFE0000 +A63A:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE63867DB671867DB663B67FFE0000 +A63B:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE638E7DB6718E7DB6638E7FFE0000 +A63C:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE63C67DBE71BE7DBE63C67FFE0000 +A63D:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE638E7DB671B67DB6638E7FFE0000 +A63E:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE63867DBE718E7DBE63867FFE0000 +A63F:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE63867DBE718E7DBE63BE7FFE0000 +A640:000000007E02020408102040407E3A44 +A641:0000000000007E0204081020407E3A44 +A642:000000007E020204087C2040407E3A44 +A643:0000000000007E02047E1020407E3A44 +A644:000000003C4242020C304042423C0000 +A645:0000000000003C42020C3040423C0000 +A646:00000000202020202020202024180000 +A647:00000000000020202020202024180000 +A648:00000000103810103844828282820000 +A649:00000000000010381038444444440000 +A64A:000000000000424224183C4A524A423C +A64B:00000000020244442810282828100000 +A64C:00000000000000003C78428442844004400440044004410442843C7800000000 +A64D:00000000000000000000000030184004400440044004410442843C7800000000 +A64E:00000000205050101E111111111E0000 +A64F:0000000000002050501E1111111E0000 +A650:00000000E2222222322A2A2A2A320000 +A651:000000000000E22222322A2A2A320000 +A652:00000000507E50505C525252525C0000 +A653:000000000000507E50505C52525C0000 +A654:00000000324A4A4A4E4A4A4A4A320000 +A655:000000000000324A4A4E4A4A4A320000 +A656:000000008894A2A2FEA2A2A2A2A20000 +A657:0000000000004C42424E7252524E0000 +A658:0000000008081414223E2241417F0000 +A659:000000000000081414223E41417F0000 +A65A:000000003E222214081C227F49490000 +A65B:0000000000003E22143E417F49490000 +A65C:0000000048485454527E6241417F0000 +A65D:000000000000444A4A517F51515F0000 +A65E:0000000000000100038005400540092009202910111001000100010000000000 +A65F:0000000000081C2A2AA9490808080000 +A660:000000002121212121212121217F4040 +A661:000000000000222222222222227E4040 +A662:000000000000000003FC048004800480088008800880108010803FC020402040 +A663:00000000000000000000000007F80480088008801080108010801FC010400000 +A664:00000000000000000FFC08800880088008800880088010801080208000000000 +A665:0000000000000000000000000FF8088008800880088010801080208000000000 +A666:000000000000000021FC2100330033002D002D00210021002100210000000000 +A667:00000000000000000000000021F8330033002D002D0021002100210000000000 +A668:000000003C4242425A5A4242423C0000 +A669:0000000000003C42425A5A42423C0000 +A66A:000000007C82828282AA8282827C0000 +A66B:0000000000003E4141415541413E0000 +A66C:00000000000000001E782184218421842DB42DB42184218421841E7800000000 +A66D:0000000000000000000000001E78218421842DB42DB4218421841E7800000000 +A66E:0E70118815A811880E7039CE463156B5463139CE0E70118815A811880E700000 +A66F:007E4200000000000000000000000000 +A670:0000028001002AA8101028280000A0144008A014000000002828129029280280 +A671:007E420000000000000000000000427E +A672:0100010007C0010001000000F01E00000000F01E00000000F01E054005400540 +A673:1028EE824482EE281000000000000000 +A674:001C2238221C00000000000000000000 +A675:0022262A322200000000000000000000 +A676:00140008080800000000000000000000 +A677:00221408102000000000000000000000 +A678:0030101C121C00000000000000000000 +A679:004242724A7200000000000000000000 +A67A:00202038243800000000000000000000 +A67B:00545454280000000000000000000000 +A67C:00242418000000000000000000000000 +A67D:000A0A06020000000000000000000000 +A67E:00242418000000000000000000000000 +A67F:000A0A06020000000000000000000000 +A680:001010101E1212122222224242FF8181 +A681:0000000010101E1222224242427F4100 +A682:000000003C424240201008040242423C +A683:00000000182424201010080804242418 +A684:00000000000000003C464248024802503FE004600250024842443C4200000000 +A685:0000000000000000000000003C46424802503FE00450024842443C4200000000 +A686:0000000092929292926E020202020000 +A687:000000000000929292926E0202020000 +A688:000000001C1414142424244649FA8186 +A689:0000000000001C1424244446497A4106 +A68A:00000000FE1010101619111111110502 +A68B:000000000000FE101016191111110502 +A68C:00000000FE10101010101010120C0000 +A68D:000000000000FE1010101010120C0000 +A68E:0000000042424242424242427E39413E +A68F:0000000000004242424242427E39413E +A690:000000007F0808080808080808384030 +A691:0000000000007F080808080808384030 +A692:00000000FA22222222261A0202020000 +A693:000000000000FA222222261A02020000 +A694:00000000304840405864424242420000 +A695:00000000000030484040586444440000 +A696:000000009292929292929292FE39413E +A697:000000000000929292929292FE39413E +A698:00000000000000001E78218421842184218421842184218421841E7800000000 +A699:0000000000000000000000001E782184218421842184218421841E7800000000 +A69A:000000007C929292FE929292927C0000 +A69B:0000000000003E49497F4949493E0000 +A69C:0070501C121C00000000000000000000 +A69D:00202038243800000000000000000000 +A69E:081C2A2A2A1C08000000000000000000 +A69F:004C507C504C00000000000000000000 +A6A0:00000000080C0A080808084848300000 +A6A1:000000004246464A4A52526262420000 +A6A2:0000007C007C00384482828244380000 +A6A3:00000000043448485250202040400000 +A6A4:000000000020000020242262528C0000 +A6A5:00000000404040404048407C00080000 +A6A6:000000000020007C02027C0020000000 +A6A7:000000007C0408081010303048460000 +A6A8:000000007E0204040408080808040000 +A6A9:00000000408C92A2A284780000100000 +A6AA:000000001C2222A47820242024200000 +A6AB:00000000103054901050102020200000 +A6AC:00000000401C22222A2A242020200000 +A6AD:0000000002020202027E2212227E0000 +A6AE:00000000405040780404784050400000 +A6AF:00000000001860004860504840400000 +A6B0:00000000704C424C7040404040400000 +A6B1:00000000404040407C40404040400000 +A6B2:00000000928244442828101010100000 +A6B3:000000004444444444444440407E0000 +A6B4:000000008888888A888E505220200000 +A6B5:00000000828282443810101010100000 +A6B6:00000000484848484A48484A48784800 +A6B7:0000000002002C3464A6202820200000 +A6B8:00000000304080988442320204180000 +A6B9:00000000201008041210101010100000 +A6BA:00000000601218244444241810600000 +A6BB:000000004000007848484E4040400000 +A6BC:000000000010C0300C020C30C0100000 +A6BD:00000002040818240202024244380000 +A6BE:00000000505050507C14141414140000 +A6BF:00000000182442422272020204040000 +A6C0:00000000182442427E02020204040000 +A6C1:00000000182442424202020204040000 +A6C2:00000000405E405E4040404040400000 +A6C3:00000000000202020204545428280000 +A6C4:00000000465A62625A46404040400000 +A6C5:0000000008084A485868484840400000 +A6C6:0000000002020202027A0606067A0000 +A6C7:00000002040810204220100804020000 +A6C8:00000000384492925410101010100000 +A6C9:000000007C04080810102020407C0000 +A6CA:0000000010101010242A22524C800000 +A6CB:000000003E1828480808080808080000 +A6CC:00000000100038441804443800100000 +A6CD:0000000070080404083020F820200000 +A6CE:00000000102828284444444482820000 +A6CF:00000000380082C6AAAA920010100000 +A6D0:000000003E4040403E00080808080000 +A6D1:00000000320804040404080810600000 +A6D2:00000000384402020204042810080000 +A6D3:000000001C2222A47820242424240000 +A6D4:00000000101210103854929292920000 +A6D5:00000000605048444040444850600000 +A6D6:00000000404040407848484848440000 +A6D7:00000000385492929280808080800000 +A6D8:00000000C2A29286864A4A5252220000 +A6D9:0000000018284A0C1828480808080000 +A6DA:000000004040404040404840407E0000 +A6DB:000000007E4242424242424242420000 +A6DC:00000000100018244454542404040000 +A6DD:000000003048888A4838080808100000 +A6DE:000000007E0202027E40404040400000 +A6DF:00000000828244444444282828100000 +A6E0:000000003028242224283060A0200000 +A6E1:00000000006294888A7400007E000000 +A6E2:000000201008102020404040221C0000 +A6E3:00000000407C44040404040404040000 +A6E4:000000046211090A0808101020C00000 +A6E5:000000000E1070504E40404040400000 +A6E6:000000003E0808780402020204080000 +A6E7:00000000380808780402020204080000 +A6E8:000000007050501010101010107C0000 +A6E9:00000000080808780402020204080000 +A6EA:00000000182848083C02020204080000 +A6EB:00000000700804040830202020200000 +A6EC:000000001018141210101010107C0000 +A6ED:00000000700804044830282420200000 +A6EE:000000001E1212121212121212720000 +A6EF:000000003844422204182042423C0000 +A6F0:00102844000000000000000000000000 +A6F1:003E0000000000000000000000000000 +A6F2:00000000200008040402020244380000 +A6F3:00000000040408081010242040400000 +A6F4:00000000222222224455448888880000 +A6F5:00000000000000003E08101020200000 +A6F6:0000000000000000F424484A90900000 +A6F7:00000000101010109254381000100000 +A6F8:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE61CE6FB663CE6FB66FCE7FFE0000 +A6F9:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE61CE6FB663C66FF66FCE7FFE0000 +A6FA:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE61866FB663866FB66FB67FFE0000 +A6FB:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +A6FC:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +A6FD:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE618E6FB663B66FB66F8E7FFE0000 +A6FE:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE61866FBE638E6FBE6F867FFE0000 +A6FF:00007FFE61CE6DBE618E6DB66DCE7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +A700:0000000000000000001C20201C000000 +A701:0000000000000000001C20201C003C00 +A702:000000001C20201C0000000000000000 +A703:000000001C20201C003C000000000000 +A704:00000000380404380000000000000000 +A705:0000000038040438003C000000000000 +A706:00000000000000000038040438000000 +A707:00000000000000000038040438003C00 +A708:00000000501010101010101010100000 +A709:00000000101050101010101010100000 +A70A:00000000101010105010101010100000 +A70B:00000000101010101010105010100000 +A70C:00000000101010101010101010500000 +A70D:00000000141010101010101010100000 +A70E:00000000101014101010101010100000 +A70F:00000000101010101410101010100000 +A710:00000000101010101010101410100000 +A711:00000000101010101010101010140000 +A712:000000001E1010101010101010100000 +A713:0000000010101E101010101010100000 +A714:00000000101010101E10101010100000 +A715:00000000101010101010101E10100000 +A716:000000001010101010101010101E0000 +A717:00000000101050101000000000000000 +A718:00000000001204081000000000000000 +A719:00000000000010007C00000000000000 +A71A:00000000000004047C00000000000000 +A71B:0000000010387C101010000000000000 +A71C:000000001010107C3810000000000000 +A71D:00000000101010100010000000000000 +A71E:00000000100010101010000000000000 +A71F:00000000000000001000101010100000 +A720:007E5050000000000000000000000000 +A721:00000000000000000000000050507E00 +A722:00007078040438000070780404380000 +A723:00000030380404180030380404180000 +A724:00000000387C604040403C0000000000 +A725:000000000000387C604040403C000000 +A726:00000000424242427E4242424242120C +A727:0000004040405C62424242424242120C +A728:00000000000000003F800400040007F8041004200440047004080008010800F0 +A729:00000000000000000800080008003FFC08080810082008380804060400840078 +A72A:000000003C424850304C4040423C0000 +A72B:000000001C22202018202020221C0000 +A72C:00000000040C1424447C040424180000 +A72D:000000000000040C14247C0404042418 +A72E:000000000818284888FE08084B310102 +A72F:00000000000008182848FE080B094932 +A730:0000000000007C404078404040400000 +A731:0000000000003C4240300C02423C0000 +A732:00000000000000000C6012901290210821083FF8210821082108210800000000 +A733:0000000000000000000000001EF0210801081FF82108210823181DE800000000 +A734:00000000000000000CF013081308210821083F0821082108210820F000000000 +A735:0000000000000000000000001EF0210801081F082108210823081CF000000000 +A736:00000000000000000C0812081208210821083F0821082108210820F000000000 +A737:0000000000000000000000001E08210801081F082108210823181CE800000000 +A738:00000000000000000E0812081208211021103F1020A020A02040204000000000 +A739:0000000000000000000000001E08210801081F902190219022601C6000000000 +A73A:00000000000000000E0812081208211021103FF820A020A02040204000000000 +A73B:0000000000000000000000001E08210801081FFC2190219022601C6000000000 +A73C:00000000000000000E0812081208211021103F1020A020A02040204004800300 +A73D:0000000000000000000000001E08210801081F902190219022601C60012000C0 +A73E:000000003C4242021A1A0242423C0000 +A73F:0000000000003C42021A1A02423C0000 +A740:0000000042E448506060504844420000 +A741:00000040F04044485060504844420000 +A742:00000000424448506060544854420000 +A743:00000040404044485060544854420000 +A744:0000000042E448506060544854420000 +A745:00000040F04044485060544854420000 +A746:000000004040404040202020203E0000 +A747:000000301010101008080808083E0000 +A748:0000000040F0404040404040407E0000 +A749:0000001808081C0808080808083E0000 +A74A:000000003C424242FF424242423C0000 +A74B:0000000000003C4242FF4242423C0000 +A74C:0000000275898E888888888888700000 +A74D:00000000000275898E88888888700000 +A74E:00000000000000001EF0210821082108210821082108210821081EF000000000 +A74F:0000000000000000000000001EF02108210821082108210821081EF000000000 +A750:000000007C4242427C404040F0400000 +A751:0000000000005C6242424242625CF040 +A752:000000001E1111117E90909050100000 +A753:00000000000016191111111179969050 +A754:000000004EA929291E08080808080000 +A755:0000000000004AAD292929291D0A0808 +A756:000000003C4242424242425A643D0205 +A757:0000000000003A4642424242463A0702 +A758:00000000000000000F00108010901088108810881090169019200F4000800140 +A759:0000000000000000000000000E901188108810881090109011A00EC001800280 +A75A:000000003C4242020408080404020000 +A75B:0000000000003C4202021C1008040000 +A75C:00000000788404040810224284FE0408 +A75D:000000000000384404081222447E0408 +A75E:00000000494949323222545488880000 +A75F:0000000000004A4A5234646498980000 +A760:00000000424242425A5A66664242020C +A761:00000000000041494949494949370106 +A762:0000003C4040403E0408101C0202423C +A763:00000000003040403C08102038044438 +A764:00005060C07844424244784040400000 +A765:000000506040DC6242424242625C4040 +A766:000000404078444242447840F0400000 +A767:0000004040405C6242424242625CF040 +A768:00000000444444484850506040400000 +A769:00000000000022222424283020200000 +A76A:00000000384404041804040404380000 +A76B:00000000000038440404180404040438 +A76C:0000000C1212127C1010101050200000 +A76D:0000000C1212127C1010101010105020 +A76E:00000000182442424A32020204380000 +A76F:000000000000182442424A3202020438 +A770:00001824424A32020438000000000000 +A771:0000000000000100010001001D002300210021082108211023241DF800400080 +A772:00000000000018000800080008000800080008100810082008483FF000800100 +A773:000000000000000000000000760049004900490849084910492449F800400080 +A774:0000000000000000000000005C0062004200421042104220424843F000800100 +A775:00000000002000200040009017E0190012001000100010001000100000000000 +A776:0000000000000000000000007C00420042007C1050104820444843F000800100 +A777:00000000000000201020104010907FE0110012001000100010000C0000000000 +A778:0000000038444444381C224202FC0000 +A779:00000000FC22424242424242423C0000 +A77A:000040300804023E42424242423C0000 +A77B:000000005C6240404040407840404040 +A77C:0000000000002C322020202038202020 +A77D:000000007E0408101008384444443800 +A77E:000000001C2222221C10080810207E00 +A77F:0000000000003C42423C10080810207E +A780:000000007E0202020202020202020000 +A781:00000000003E0808080808080808080C +A782:000000005C6242424242414040400000 +A783:00000000000058644444424040404040 +A784:000000002E3020202020202020202020 +A785:0000000000002E302020202020202020 +A786:000000007E10204040404040221C0000 +A787:0000000000007E1020404040221C0000 +A788:00000000000000000000000000182442 +A789:00000000000000181800001818000000 +A78A:00000000000000003C00003C00000000 +A78B:00000000080808080808080000000000 +A78C:00000000080808080800000000000000 +A78D:00000000424242427E02020202020000 +A78E:00000018080838483E08080808080600 +A78F:0000000000183C3C1800000000000000 +A790:0000000044646454544C4C4444460202 +A791:00000000000058644444444444460202 +A792:000000001C22222070202022221C0000 +A793:0000000000001C2220702020221C0000 +A794:0000000000003C4240404040423E020C +A795:0000004040405C624242424242430106 +A796:000000001C1212123C525252121C0000 +A797:00000000101010101C325252525C4030 +A798:000000001E1010107C10101010101060 +A799:0000000C1010107C107C101010100000 +A79A:000000003A46422212224242463A0000 +A79B:0000000000003A4642322242463A0000 +A79C:00000000384442221222424244380000 +A79D:00000000000038444232224244380000 +A79E:000000004242422212224242463A0000 +A79F:000000000000424242322242463A0000 +A7A0:000000003D424648506642C2463A0000 +A7A1:0000000000023A477CC438203C42423C +A7A2:000000004244485062645868C4420000 +A7A3:000000404040444850605678C4420000 +A7A4:00000000426263565A6ACA4646420000 +A7A5:0000000000005C634E72C24242420000 +A7A6:000000007C475AE27C48444442420000 +A7A7:0000000000005C6242506040C0400000 +A7A8:000000003C42404C30CC0242423C0000 +A7A9:0000000000001E2026186601211E0000 +A7AA:0000000062A2A2223E22222222220000 +A7AB:000000003C4202021C020202423C0000 +A7AC:000000003C424242424242464A320478 +A7AD:000000001010103050543810101E0000 +A7AE:000000007F49490808080849497F0000 +A7AF:0000000000003C424242425A663C0300 +A7B0:000000004222120A06060A1222420000 +A7B1:000000000808080808080808087F0000 +A7B2:000000001F040404040424544C380400 +A7B3:00000000424224241818182424424200 +A7B4:000000007C4242427C424242427C4040 +A7B5:000000003844444858444242524C4040 +A7B6:00000000225541414141494949360000 +A7B7:00000000000022554141494949360000 +A7B8:0000000042424342464A526242BC0000 +A7B9:0000000000004342464A526246BA0000 +A7BA:0000006028541422223E222222220000 +A7BB:0000180810003C42023E4242463A0000 +A7BC:000000603E48080808080808083E0000 +A7BD:000018081000180808080808083E0000 +A7BE:000000C062A2222222222222221C0000 +A7BF:000018081000424242424242463A0000 +A7C0:00007FFE61866DF661EE6DDE6DDE7FFE7FFE71CE6FB66FB66FB671CE7FFE0000 +A7C1:00007FFE61866DF661EE6DDE6DDE7FFE7FFE71EE6FCE6FEE6FEE71C67FFE0000 +A7C2:0000000000800100417041884108220822702208150815080888087000000000 +A7C3:00000000000000000100020042F0430842082670250825081888187000000000 +A7C4:000000003C42424040404042463A020C +A7C5:000000003C424240300C0242625C4030 +A7C6:000000007E02020408102040427E020C +A7C7:00000000784442427E42424244780000 +A7C8:0000000202023A46427E4242463A0000 +A7C9:000000003C424220107E0442423C0000 +A7CA:0000000000003C42307E0C02423C0000 +A7CB:00007FFE61866DF661EE6DDE6DDE7FFE7FFE718E6FB66F8E6FB6718E7FFE0000 +A7CC:00007FFE61866DF661EE6DDE6DDE7FFE7FFE71C66FBE6FBE6FBE71C67FFE0000 +A7CD:00007FFE61866DF661EE6DDE6DDE7FFE7FFE718E6FB66FB66FB6718E7FFE0000 +A7CE:00007FFE61866DF661EE6DDE6DDE7FFE7FFE71866FBE6F8E6FBE71867FFE0000 +A7CF:00007FFE61866DF661EE6DDE6DDE7FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +A7D0:00007FFE61866DF661EE6DDE6DDE7FFE7FFE63CE6DB66DB66DB663CE7FFE0000 +A7D1:00007FFE61866DF661EE6DDE6DDE7FFE7FFE63EE6DCE6DEE6DEE63C67FFE0000 +A7D2:00007FFE61866DF661EE6DDE6DDE7FFE7FFE63866DF66D866DBE63867FFE0000 +A7D3:00007FFE61866DF661EE6DDE6DDE7FFE7FFE638E6DF66DC66DF6638E7FFE0000 +A7D4:00007FFE61866DF661EE6DDE6DDE7FFE7FFE63B66DB66D866DF663F67FFE0000 +A7D5:00007FFE61866DF661EE6DDE6DDE7FFE7FFE63866DBE6D866DF663867FFE0000 +A7D6:00007FFE61866DF661EE6DDE6DDE7FFE7FFE63CE6DBE6D8E6DB663CE7FFE0000 +A7D7:00007FFE61866DF661EE6DDE6DDE7FFE7FFE63866DF66DEE6DDE63DE7FFE0000 +A7D8:00007FFE61866DF661EE6DDE6DDE7FFE7FFE63CE6DB66DCE6DB663CE7FFE0000 +A7D9:00007FFE61866DF661EE6DDE6DDE7FFE7FFE63CE6DB66DC66DF663CE7FFE0000 +A7DA:00007FFE61866DF661EE6DDE6DDE7FFE7FFE63866DB66D866DB663B67FFE0000 +A7DB:00007FFE61866DF661EE6DDE6DDE7FFE7FFE638E6DB66D8E6DB6638E7FFE0000 +A7DC:00007FFE61866DF661EE6DDE6DDE7FFE7FFE63C66DBE6DBE6DBE63C67FFE0000 +A7DD:00007FFE61866DF661EE6DDE6DDE7FFE7FFE638E6DB66DB66DB6638E7FFE0000 +A7DE:00007FFE61866DF661EE6DDE6DDE7FFE7FFE63866DBE6D8E6DBE63867FFE0000 +A7DF:00007FFE61866DF661EE6DDE6DDE7FFE7FFE63866DBE6D8E6DBE63BE7FFE0000 +A7E0:00007FFE61866DF661EE6DDE6DDE7FFE7FFE61CE6FB663B66FB661CE7FFE0000 +A7E1:00007FFE61866DF661EE6DDE6DDE7FFE7FFE61EE6FCE63EE6FEE61C67FFE0000 +A7E2:00007FFE61866DF661EE6DDE6DDE7FFE7FFE61866FF663866FBE61867FFE0000 +A7E3:00007FFE61866DF661EE6DDE6DDE7FFE7FFE618E6FF663C66FF6618E7FFE0000 +A7E4:00007FFE61866DF661EE6DDE6DDE7FFE7FFE61B66FB663866FF661F67FFE0000 +A7E5:00007FFE61866DF661EE6DDE6DDE7FFE7FFE61866FBE63866FF661867FFE0000 +A7E6:00007FFE61866DF661EE6DDE6DDE7FFE7FFE61CE6FBE638E6FB661CE7FFE0000 +A7E7:00007FFE61866DF661EE6DDE6DDE7FFE7FFE61866FF663EE6FDE61DE7FFE0000 +A7E8:00007FFE61866DF661EE6DDE6DDE7FFE7FFE61CE6FB663CE6FB661CE7FFE0000 +A7E9:00007FFE61866DF661EE6DDE6DDE7FFE7FFE61CE6FB663C66FF661CE7FFE0000 +A7EA:00007FFE61866DF661EE6DDE6DDE7FFE7FFE61866FB663866FB661B67FFE0000 +A7EB:00007FFE61866DF661EE6DDE6DDE7FFE7FFE618E6FB6638E6FB6618E7FFE0000 +A7EC:00007FFE61866DF661EE6DDE6DDE7FFE7FFE61C66FBE63BE6FBE61C67FFE0000 +A7ED:00007FFE61866DF661EE6DDE6DDE7FFE7FFE618E6FB663B66FB6618E7FFE0000 +A7EE:00007FFE61866DF661EE6DDE6DDE7FFE7FFE61866FBE638E6FBE61867FFE0000 +A7EF:00007FFE61866DF661EE6DDE6DDE7FFE7FFE61866FBE638E6FBE61BE7FFE0000 +A7F0:00007FFE61866DF661EE6DDE6DDE7FFE7FFE61CE6FB663B66FB66FCE7FFE0000 +A7F1:00007FFE61866DF661EE6DDE6DDE7FFE7FFE61EE6FCE63EE6FEE6FC67FFE0000 +A7F2:00007FFE61866DF661EE6DDE6DDE7FFE7FFE61866FF663866FBE6F867FFE0000 +A7F3:00007FFE61866DF661EE6DDE6DDE7FFE7FFE618E6FF663C66FF66F8E7FFE0000 +A7F4:00007FFE61866DF661EE6DDE6DDE7FFE7FFE61B66FB663866FF66FF67FFE0000 +A7F5:00000000040404043C04040404040000 +A7F6:0000000000000404043C040404040000 +A7F7:0000000000000000427E420000000000 +A7F8:00000042FF427E424242000000000000 +A7F9:000000000036494F4837000000000000 +A7FA:000000000000494949494949497F0000 +A7FB:000000007E0202023E02020202020000 +A7FC:000000003E4242423E02020202020000 +A7FD:00000000424242425A5A666642420000 +A7FE:00003E080808080808080808083E0000 +A7FF:000000000000000010411041104128A228A228A2451445148208820800000000 +A800:000000000000FFFF003000500090011002100410081010106008000000000000 +A801:000000000000FFFF040005000680048001000600010000800040000000000000 +A802:0480024001200000000000000000000000000000000000000000000000000000 +A803:000000000000FFFF080011E02210241020E02110201010200FC0000000000000 +A804:0E0001000080FFFF10801080108011001E001000100010000800000000000000 +A805:000000000000FFFF0040034004C00840084004C0034018401840000000000000 +A806:004000A001100000000000000000000000000000000000000000000000000000 +A807:000000000000FFFF226022A023202E2032200220022002200110000000000000 +A808:000000000000FFFF26602AA03320222000200020002000200010000000000000 +A809:000000000000FFFF0840084004400C4014401440084000400020000000000000 +A80A:000000000000FFFF00C003400440034000C003400440034000E0000000000000 +A80B:0030004800300000000000000000000000000000000000000000000000000000 +A80C:000000000000FFFF004000C00140024004400840064001C00020000000000000 +A80D:000000000000FFFF100011801280148019E00290046008000800000000000000 +A80E:000000000000FFFF0820102021E0212011200E20002000200010000000000000 +A80F:000000000000FFFF200026002A28322802480248029002900320000000000000 +A810:000000000000FFFF0700088008400480010002400420082007C0000000000000 +A811:000000000000FFFF080008000B000C800880088009000A000C00000000000000 +A812:000000000000FFFF010001000960119011101010102008400780000000000000 +A813:000000000000FFFF0800080009800A400A400880088009000600000000000000 +A814:000000000000FFFF0040004018C01F4008400840084010402020000000000000 +A815:000000000000FFFF0020026006A02B2012200020002000200010000000000000 +A816:000000000000FFFF100011801280148018800080008000400030000000000000 +A817:000000000000FFFF2010203013500D9001100010001000100008000000000000 +A818:000000000000FFFF006000A00120022005200520052002200010000000000000 +A819:000000000000FFFF206020A02120222024202820302020200010000000000000 +A81A:000000000000FFFF40C041704248445048605050604840400020000000000000 +A81B:000000000000FFFF00400040074008C008C00740004000400020000000000000 +A81C:000000000000FFFF01E0022004201E2025200220002000200010000000000000 +A81D:000000000000FFFF406020A011200A2004200A200A2004200010000000000000 +A81E:000000000000FFFF006000A0012012200C200020002000200010000000000000 +A81F:000000000000FFFF006000A0012012200C2000A0012002200190000000000000 +A820:000000000000FFFF010001000160019001100010002000400780000000000000 +A821:000000000000FFFF00100E301150119002100510009000900008000000000000 +A822:000000000000FFFF206020A021202220242028A0312022200190000000000000 +A823:000000000000000F000200020002000200020002000200020001000000000000 +A824:000C00120002000F000200020002000200020002000200020001000000000000 +A825:0000000000000000000000000000000000000000000000080008001001E00000 +A826:0200010000800000000000000000000000000000000000000000000000000000 +A827:000800040002000F000200020002000200020002000200020001000000000000 +A828:00000000000030484830000000000000 +A829:00000000304848300030484830000000 +A82A:0000000000000000301848244824301800000180024002400180000000000000 +A82B:00000000000000000C60129012900C6000000C60129012900C60000000000000 +A82C:0000000000000000000000000000000000000000000000000000018000400020 +A82D:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE618E7DB661B66FB6618E7FFE0000 +A82E:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE61867DBE618E6FBE61867FFE0000 +A82F:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE61867DBE618E6FBE61BE7FFE0000 +A830:0000000000000080008000800080008000800080008000800080000000000000 +A831:0000000000000120012001200120012001200120012001200120012000000000 +A832:0000000000000920092009200920092009200920092009200920092000000000 +A833:00000000000000000000000000000000007003801C0000000000000000000000 +A834:000000000000000000000000007003801C000000007003801C00000000000000 +A835:0000000000000000007003801C00007003801C00007003801C00000000000000 +A836:00000000000001C002200220022001C000000000000000000000000000000000 +A837:0000000000000000004000800100020004000E001100110011000E0000000000 +A838:000000000000001000100010001000100010001000100010002001C000000000 +A839:00000000000000700080008000800040004000400040004001800E0000000000 +A83A:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE63867DB671867DB663B67FFE0000 +A83B:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE638E7DB6718E7DB6638E7FFE0000 +A83C:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE63C67DBE71BE7DBE63C67FFE0000 +A83D:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE638E7DB671B67DB6638E7FFE0000 +A83E:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE63867DBE718E7DBE63867FFE0000 +A83F:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE63867DBE718E7DBE63BE7FFE0000 +A840:0000000000007FFF400040007FFE400040007FFE408040804080000000000000 +A841:0000000000004FF84808480848087808480848084FF840007FFE000000000000 +A842:0000000000007FFF40004FF84808480878084808480848084FF8000000000000 +A843:0000000000007F044104410441044104410441044104410441FC000000000000 +A844:0000000000007FFC4104410441044104410441044104410441FC000000000000 +A845:00000000000041FC41044104410441047F0441044104410441FC000000000000 +A846:0000000000004104410441044104410441044104410441047FFC000000000000 +A847:0000000000007FFC4100408040404020401C4000400040004000000000000000 +A848:000000000000407440884100410040C07FFC4000400040007FFE000000000000 +A849:0000000000007FFF41044104410471C449244514430C430C4104000000000000 +A84A:0000000000004060408041004100710049004500430043004100000000000000 +A84B:0000000000007FF0406040804100428044404440444044404380000000000000 +A84C:0000000000007FFC0004000400047F04410441044104410441FC000000000000 +A84D:0000000000007FFC0004000400047E04010401040104010400F8000000000000 +A84E:0000000000007FFC4004400440047F04410441044104410441FC000000000000 +A84F:0000000000007FF0006000807F00428044404440444044404380000000000000 +A850:0000000000007FFF4080408041E042107E0842484188401047E0000000000000 +A851:0000000000007FFF40404080410043E0401040084008401043E0000000000000 +A852:0000000000007FFF40024002400241FE410241027F0241024102000000000000 +A853:0000000000004000443044D047107C10471044D0443040007FFF000000000000 +A854:0000000000007C1F43604080414042204220422041C040007FFE000000000000 +A855:0000000000007FFC410441044104410441044104410441044104000000000000 +A856:0000000000007F04410441044104410441FC4000400040004000000000000000 +A857:0000000000001FF80010002000401FE000100008000800101FE0000000000000 +A858:0000000000000410041004100410041007F00410041004100410000000000000 +A859:0000000000007FFC000400047F044104410441FC400040007FFC000000000000 +A85A:0000000000007FFC40004000400041FC41044104410441047F04000000000000 +A85B:0000000000007FFF003000C023002C0030002800244022802100000000000000 +A85C:00000000000041E242144408440042004100608051004A004400000000000000 +A85D:0000000000007FF8003000C023002C0030F02B08240800087FF0000000000000 +A85E:0000000000007FF0418042004400484048204820482044404380000000000000 +A85F:000000000000400041E0421044087C08440843884008401040E0000000000000 +A860:0000000000007FFF410041004100410041104120414041804100000000000000 +A861:0000000000004008403043C04C00700070004C0043C040304008000000000000 +A862:0000000000007FF0401040107810471040F04000400040007FFF000000000000 +A863:0000000000007FFF41044104410471C449244514430C40007FFF000000000000 +A864:00000000000043CF44314411440942094105608551034A034401000000000000 +A865:0000000000007FFF40004000400040F047107810401040107FF0000000000000 +A866:0000000000004003400440084008401040104010401040107FF0000000000000 +A867:0000000000001FFC08040404020401040084004400240014000C000000000000 +A868:0000000000000804040404040208020802080410041008203FC0000000000000 +A869:0000000000007FFE4000400040007FFC40C04100410040884074000000000000 +A86A:0000000000004104430C430C4514492471C44104410441047FFF000000000000 +A86B:0000000000004100430043004500490071004100410040804060000000000000 +A86C:0000000000004380444044404440444042804100408040607FF0000000000000 +A86D:0000000000007FFE000600180860068001FC00020002000201FC060008000000 +A86E:0000000000007FFC40004000400041FC41044104460458046004000000000000 +A86F:00000000000041E042104408440442004100608051004A004400000000000000 +A870:000000000000403F43514491440942094105608551034A034401000000000000 +A871:0000000000007FFF000600180060008001000100020002000200000000000000 +A872:000000000000080008000800080008000FE00800080008000800000000000000 +A873:00000000000000000040002006101F183F181F18061000200040000000000000 +A874:0000000000007FFF400140014101410141017F01000100017FFF000000000000 +A875:000000007FFF400141017F0100017FFF400141017F0100017FFF000000000000 +A876:0000000000000080008000800080008000800080008000800080000000000000 +A877:0000000000000220022002200220022002200220022002200220000000000000 +A878:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE61CE7DB67BCE77B677CE7FFE0000 +A879:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE61CE7DB67BC677F677CE7FFE0000 +A87A:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE61867DB67B8677B677B67FFE0000 +A87B:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE618E7DB67B8E77B6778E7FFE0000 +A87C:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE61C67DBE7BBE77BE77C67FFE0000 +A87D:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE618E7DB67BB677B6778E7FFE0000 +A87E:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE61867DBE7B8E77BE77867FFE0000 +A87F:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE61867DBE7B8E77BE77BE7FFE0000 +A880:000000000000000000000004000A000A00040000000000000000000000000000 +A881:00000000000000000004000A000A000400000004000A000A0004000000000000 +A882:000000000000000036004900490002007C008000808081007E00000000000000 +A883:000000000000000036004900490002007C008100808081407E00000000000000 +A884:000000000000000063009480A400820061008100810082007C00000000000000 +A885:000000000000000063009480A700820061008100810082007C00000000000000 +A886:0000000000000000CF00308029004C0092008200820084007800000000000000 +A887:0000000000000000CE00310028804C8092808280828084807880000000000000 +A888:00000000000000004C8092809280628004807880808081007E00000000000000 +A889:00000000000000004C0092009200620004007900808081407E00000000000000 +A88A:000000000000000077008880888080808080BE80848088804700000000000000 +A88B:000000000000000077008880888080808080BE80848088804700060021001E00 +A88C:00000000000000003F00408080009300948094808F0044003800000000000000 +A88D:00000000000000003F0040808080A480AA80AA809C8048803080000000000000 +A88E:00000000000000003F0040808000A900AA80AA80970042003C00000000000000 +A88F:00000000000000003F0040809E00A10091008600990041003E00000000000000 +A890:00000000000000003F0040809C80A280928084809A8042803C80000000000000 +A891:00000000000000003F0040809000A9008A80B2808F8049803180000000000000 +A892:0000000000000000270058805080288008800880088008800880000000000000 +A893:000000000000000084404AA027C02440484049209220922061C0000000000000 +A894:0000000000000000670088808880888088808880888088807300000000000000 +A895:000000000000000062009500A500820065008500888088807300000000000000 +A896:00000000000000007F0080808080B8804480B880808080804300000000000000 +A897:00000000000000006100928050801080F8804100810082007C00000000000000 +A898:000000000000000063009480A280808070808100810082007C00000000000000 +A899:00000000000000007700888088808080A080D080908094806300000000000000 +A89A:0000000000000000770088809480A280A2809480888094804900000000000000 +A89B:00000000000000003C0042008900950095008F80910092004C00000000000000 +A89C:0000000000000000FF8040003800060071008880908081007E00000000000000 +A89D:00000000000000003E0041008080808080808080808041003E00000000000000 +A89E:00000000000000007F8001002200470088808080808041003E00000000000000 +A89F:0000000000000000020085004480258052804080408021001E00000000000000 +A8A0:00000000000000003E0041008C8092809280BA80828044803900000000000000 +A8A1:00000000000000003E0041008080808080808080808040803080000000000000 +A8A2:0000000000000000330048801080210042003400080014000800000000000000 +A8A3:0000000000000000780084008400480010006200810083007C80000000000000 +A8A4:000000000000000063009480A080808060808080808081007E00000000000000 +A8A5:00000000000000003D004280830082008200A200520052002200000000000000 +A8A6:00000000000000004300A0801080110021002200420044003800000000000000 +A8A7:0000000000000000180025804380420084009480888041003E00000000000000 +A8A8:0000000000000000B600B900610002007C008100808080807F00000000000000 +A8A9:00000000000000004D8092409240904090409040904090406180000000000000 +A8AA:00000000000000006C80928092804480188060808080B8804700000000000000 +A8AB:00000000000000004300A0805080110021002200420044003800000000000000 +A8AC:0000000000000000F780140012002200210041004080F880C700000000000000 +A8AD:0000000000000000770088808880808080808080808080806300000000000000 +A8AE:0000000000000000E30080804100220014000800140014000800000000000000 +A8AF:00000000000000003900448084809480A8809480848084806300000000000000 +A8B0:000000000000000061009280D280A10082808280848044803900000000000000 +A8B1:00000000000000004880B5009900910088808880848084808300000000000000 +A8B2:0000000000000000FF00100020007100A8809080808041003E00000000000000 +A8B3:00000000000000006B0094809480808080808080808081006600000000000000 +A8B4:00000000000000000012001200120012000E0002000200020002000000000000 +A8B5:0000000000000000002E0012001400040008000800100010000C000000000000 +A8B6:003C004200240000000000000000000000000000000000000000000000000000 +A8B7:00700088000800080008000800080008000800080008000A0004000000000000 +A8B8:00000000000000000044002A003A003400100028002800280010000000000000 +A8B9:000000000000000800500034003A003400100028002800280010000000000000 +A8BA:0000000000000000001C002A00240020001C000200020022001C000000000000 +A8BB:0000000000000000001C002A00240020001C000200020022001C0040003C0002 +A8BC:000000000000000000DC0122012201220126012A012A012A00A4000000000000 +A8BD:000000000000000000DC0122012201220126012A012A012A00A4020001F00008 +A8BE:0000000000000000000C001200120016000A0002000200040008000000000000 +A8BF:0000000000000000003E0022001400040008000800120012000C000000000000 +A8C0:0000000000000000001800240026001A00020002000A0016000C000000000000 +A8C1:0000000000000000003E002200120004003800080008000A0004000000000000 +A8C2:0000000000000000007E0046002A000A0072000A000A000A0004000000000000 +A8C3:000000000000000000E4009A001A001C001800180038005A0024000000000000 +A8C4:0000000000000000000000000000000000000000000000000000002000100008 +A8C5:00000004000A000A00040011000E000000000000000000000000000000000000 +A8C6:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE71CE6FBE6F8E6FB671CE7FFE0000 +A8C7:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE71866FF66FEE6FDE71DE7FFE0000 +A8C8:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE71CE6FB66FCE6FB671CE7FFE0000 +A8C9:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE71CE6FB66FC66FF671CE7FFE0000 +A8CA:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE71866FB66F866FB671B67FFE0000 +A8CB:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE718E6FB66F8E6FB6718E7FFE0000 +A8CC:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE71C66FBE6FBE6FBE71C67FFE0000 +A8CD:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE718E6FB66FB66FB6718E7FFE0000 +A8CE:0000000000000000008000800080008000800080008000800080000000000000 +A8CF:0000000000000000024002400240024002400240024002400240000000000000 +A8D0:000000000000000003C0042008100810081008100810042003C0000000000000 +A8D1:000000000000000001C00220022001C000400080008000800060000000000000 +A8D2:000000000000000007C008200020022001C00100008000400030000000000000 +A8D3:0000000000000000038004400040018000400040084008400780000000000000 +A8D4:00000000000000000140022002200140008001400220022001C0000000000000 +A8D5:0000000000000000062008200840087007880088010801080110000000000000 +A8D6:000000000000000003C004200400030002000400040002400180000000000000 +A8D7:0000000000000000024004A004A0046004200220024001400080000000000000 +A8D8:0000000000000000010002800240044004200620052005200240000000000000 +A8D9:00000000000000000800040004000440088009400820042003C0000000000000 +A8DA:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE63866DB66D866DB663B67FFE0000 +A8DB:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE638E6DB66D8E6DB6638E7FFE0000 +A8DC:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE63C66DBE6DBE6DBE63C67FFE0000 +A8DD:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE638E6DB66DB66DB6638E7FFE0000 +A8DE:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE63866DBE6D8E6DBE63867FFE0000 +A8DF:00007FFE61CE6DB661CE6DB66DCE7FFE7FFE63866DBE6D8E6DBE63BE7FFE0000 +A8E0:0000018002400240018000000000000000000000000000000000000000000000 +A8E1:0180024001800300008000400000000000000000000000000000000000000000 +A8E2:0180024000800100008000400000000000000000000000000000000000000000 +A8E3:0180004001800040018000400020000000000000000000000000000000000000 +A8E4:0000044002800100028001000000000000000000000000000000000000000000 +A8E5:01000100012000E0002000100010000800080000000000000000000000000000 +A8E6:00C0010000C0010000E000200010000000000000000000000000000000000000 +A8E7:044004A00460022001C000000000000000000000000000000000000000000000 +A8E8:004000800100012000C000000000000000000000000000000000000000000000 +A8E9:00C0012000C00040002000200000000000000000000000000000000000000000 +A8EA:1CE002400C4023C01C4000000000000000000000000000000000000000000000 +A8EB:07E0004004800240018000000000000000000000000000000000000000000000 +A8EC:0FF00080038004E0039000900000000000000000000000000000000000000000 +A8ED:07E0004003C00440004000400040000000000000000000000000000000000000 +A8EE:0FC0048004800380008000800000000000000000000000000000000000000000 +A8EF:07E0008001800100008000400000000000000000000000000000000000000000 +A8F0:030004000FE004C0054004C00440000000000000000000000000000000000000 +A8F1:007000800040012000C000000000000000000000000000000000000000000000 +A8F2:000000000000000008900410031000E000000000000000000000000000000000 +A8F3:000000000000000008900410031000E0000000E0001000080008000800000000 +A8F4:00000000000000000450031000E000000450031000E000000060001000080008 +A8F5:000000000000000008900410031000E0000000E0001000100060001000080000 +A8F6:000000000000000008900410031000E0000000E0001000E0001000E000400020 +A8F7:000000000000000008900410031000E0000000E0010000800240018000000000 +A8F8:00000000000000000718082408240714080C08040808041003E0000000000000 +A8F9:00000000000000000038004400040004070408040808041003E0000000000000 +A8FA:0000000002200140008000000000000000000000000000000000000000000000 +A8FB:000000000000FFFF000000000000000000000000000000000000000000000000 +A8FC:0000000000000000000000000078008C60E618E60C06060C03F801F000000000 +A8FD:0000253811640E6400601FE0006000601FE01860186008600060406030600F80 +A8FE:13E0081007F8FFFF0C300C300C300C300C600400020001800060001000180018 +A8FF:13E0081007F80000000000000000000000000000000000000000000000000000 +A900:00000000000000001FF820042004200420042004200420041FF8000000000000 +A901:00000000000000003FFC000400041FFC20042000203C20441FF8000000000000 +A902:0000000000000000101010100820082004400440028002800100000000000000 +A903:00000000000000000FF8081008200040008001180228044807F0000000000000 +A904:0000000000000000107011901610181010101010001000100060000000000000 +A905:00000000000000001FF810001000100010001000100010001C00000000000000 +A906:0000000000000000101810681188160818081038104810481030000000000000 +A907:0000000000000000003800081008100810081008100810080FF0000000000000 +A908:0000000000000000100010001000100010001000100810081FF8000000000000 +A909:00000000000000001C0010001000100410041004100410040FF8000000000000 +A90A:00000000000000003C780488050806080C081408240824083808000000000000 +A90B:00000000000000001FF82004200420043FFC0004000420041FF8000000000000 +A90C:000000000000000011F01210141018101FF01010101010101010000000000000 +A90D:00000000000000001FF820042004200020002000200420041FF8000000000000 +A90E:00000000000000000FF0100810080B0804880B08100820083E08000000000000 +A90F:00000000000000001FF800080008038802480228022802180C08000000000000 +A910:0000000000000000106011901610182010401020101010701000000000000000 +A911:00000000000000001FF820040004000420043FF8200020041FF8000000000000 +A912:00000000000000000C000B0008C0083009800A400CC009400880000000000000 +A913:0000000000000000000800080008103810081008100810080FF0000000000000 +A914:00000000000000000FF010080F0000F0180810081FF010000F80000000000000 +A915:00000000000000001FF820042018206021802600380420041FF8000000000000 +A916:00000000000000000FC010201020100013E01420182010201010000000000000 +A917:0000000000000000200820082008210822882448282830181FF0000000000000 +A918:00000000000000000FF8001000200040008001180228044807F0000000000000 +A919:000000000000000008F009100A100C1008100870089008900860000000000000 +A91A:000000000000000008F009100A100C1008100810081008100810001000100060 +A91B:000000000000000020F021082108210821082108210821081E08000000000000 +A91C:000000000000000020F021082108210821081E08000820081FF0000000000000 +A91D:00000000000000001000100010001C0810081008100810080FF0000000000000 +A91E:00000000000000001FF820042000200020041FFC000420041FF8000000000000 +A91F:00000000000000000E1012101410183010501F90001000100060000000000000 +A920:0000000000000000600C583446C4410400040004400440043FF8000000000000 +A921:00000000000000000FF010081008000818081608118810681018000000000000 +A922:00000000000000001FF82004200420001E002000200420041FF8000000000000 +A923:000000000000000010081008100810081018102810C813081C08000000000000 +A924:00000000000000001FF8200C20340044018402040C0430041FF8000000000000 +A925:00000000000000001FF82004300C2C3423C42004200420041FF8000000000000 +A926:0000010000000000000000000000000000000000000000000000000000000000 +A927:0C00030000C00000000000000000000000000000000000000000000000000000 +A928:010006C018300000000000000000000000000000000000000000000000000000 +A929:0820082007C00000000000000000000000000000000000000000000000000000 +A92A:0920082007C00000000000000000000000000000000000000000000000000000 +A92B:0000000000000000000000000000000000000000000000000000000001000000 +A92C:0000000000000000000000000000000000000000000000000000080010200FC0 +A92D:0000000000000000000000000000000000000000000000000000090010200FC0 +A92E:000000000000000000000000000003C00C301008000000000000000000000000 +A92F:0000000000000000008000800080008000800080008000800080000000000000 +A930:0000000000000000010002800240052004800800080010001000000000000000 +A931:0000000000000000010002800240042004000800080010001000000000000000 +A932:000000000000000004440A880A881110111022A022A044404440000000000000 +A933:0000000000000000010002800240062005400880080010001000000000000000 +A934:00000000000000000180024002200610054008A0080010001000000000000000 +A935:0000000000000000030C05140514092409241144114421842184000000000000 +A936:0000000000000000001000100020002000400840048002800100000000000000 +A937:0000000000000000001000200040008001000200040008001000000000000000 +A938:000000000000000004400440028002800100210812900AA00440000000000000 +A939:0000000000000000008001400120029002480620051008A00840000000000000 +A93A:000000000000000004200A500948148412802100200040004000000000000000 +A93B:000000000000000004440AA80AA8111010002000200040004000000000000000 +A93C:00000000000000000210052804E4084008401080108021002100000000000000 +A93D:00000000000000000210052804E4084008401080188025002300000000000000 +A93E:0000000000000000018802880290049004A008A008C010C01080000000000000 +A93F:00000000000000004004400420082008101011100AA00AA00440000000000000 +A940:00000000000000000210052004E0084008401080108021002100000000000000 +A941:0000000000000000004000A0009001080100220012000C000400000000000000 +A942:00000000000000000108021002100420042008400C4012801180000000000000 +A943:0000000000000080014002200220041004900948094812241224000000000000 +A944:00000000000000000D4415441484148815481548262826282410000000000000 +A945:000000000000000004440AA80AA811101100220032004C004400000000000000 +A946:0000000000000000011002A002A0044006000A00090011001000000000000000 +A947:0000000000000000000000000000000000008000000000000000000000000000 +A948:0000000000000000000000000000000000000000000000000000800000000000 +A949:0000000000000000000000000000800080008000800000000000000000000000 +A94A:0008001400220000000000000000000000000000000000000000000000000000 +A94B:0000000000000000000000000000800080008000800000000000000080000000 +A94C:0000000000000000000000000000000000000000000000000000800080006000 +A94D:0000000000000000000000000000000000000000000000000000A000A000A000 +A94E:0000000000000000000000000000000000000000000000000000000A000A000A +A94F:0002000400000000000000000000000000000000000000000000000000000000 +A950:0012002400000000000000000000000000000000000000000000000000000000 +A951:0022001400080000000000000000000000000000000000000000000000000000 +A952:0000000000000000000000000000000000000000000000000000000200000002 +A953:0004000A00040000000000000000000000000000000000000000000000000000 +A954:00007FFE61CE6DB661C66DF66DCE7FFE7FFE61B66FB661867DF661F67FFE0000 +A955:00007FFE61CE6DB661C66DF66DCE7FFE7FFE61866FBE61867DF661867FFE0000 +A956:00007FFE61CE6DB661C66DF66DCE7FFE7FFE61CE6FBE618E7DB661CE7FFE0000 +A957:00007FFE61CE6DB661C66DF66DCE7FFE7FFE61866FF661EE7DDE61DE7FFE0000 +A958:00007FFE61CE6DB661C66DF66DCE7FFE7FFE61CE6FB661CE7DB661CE7FFE0000 +A959:00007FFE61CE6DB661C66DF66DCE7FFE7FFE61CE6FB661C67DF661CE7FFE0000 +A95A:00007FFE61CE6DB661C66DF66DCE7FFE7FFE61866FB661867DB661B67FFE0000 +A95B:00007FFE61CE6DB661C66DF66DCE7FFE7FFE618E6FB6618E7DB6618E7FFE0000 +A95C:00007FFE61CE6DB661C66DF66DCE7FFE7FFE61C66FBE61BE7DBE61C67FFE0000 +A95D:00007FFE61CE6DB661C66DF66DCE7FFE7FFE618E6FB661B67DB6618E7FFE0000 +A95E:00007FFE61CE6DB661C66DF66DCE7FFE7FFE61866FBE618E7DBE61867FFE0000 +A95F:0000000000000000008009300940058012700E4801A002900C90010000000000 +A960:00003E7C2044204420443E7C0000000000000000000000000000000000000000 +A961:00003E442044207C20443E7C0000000000000000000000000000000000000000 +A962:00003E102010201020283E440000000000000000000000000000000000000000 +A963:00003E7C2008201020283E440000000000000000000000000000000000000000 +A964:00007CF804087C0840087C080000000000000000000000000000000000000000 +A965:00003DDC04443C4420443C440000000000000000000000000000000000000000 +A966:00003E7C02403E4020403E7C0000000000000000000000000000000000000000 +A967:00003DDC05103D1021103DDC0000000000000000000000000000000000000000 +A968:00003E7C02443E4420443E7C0000000000000000000000000000000000000000 +A969:00003E4402443E7C20443E7C0000000000000000000000000000000000000000 +A96A:00003D5405543DDC21543DDC0000000000000000000000000000000000000000 +A96B:00443E7C02443E7C20383E440038000000000000000000000000000000000000 +A96C:00003E1002103E1020283E440000000000000000000000000000000000000000 +A96D:00003E7C02083E1020283E440000000000000000000000000000000000000000 +A96E:00003E7C02043E7C20043E040000000000000000000000000000000000000000 +A96F:00003E7C2204220422043E040000000000000000000000000000000000000000 +A970:00003E7C2240224022403E7C0000000000000000000000000000000000000000 +A971:00003E102210221022283E440000000000000000000000000000000000000000 +A972:0000293C2920393C2AA03C7C0000000000000000000000000000000000000000 +A973:0000227C22043E7C22043E040000000000000000000000000000000000000000 +A974:0000223022FC3E3022483E300000000000000000000000000000000000000000 +A975:000008920892089E1552223E0000000000000000000000000000000000000000 +A976:00000E3E1102113E11200E3E0000000000000000000000000000000000000000 +A977:00001C3022FC223022481C300000000000000000000000000000000000000000 +A978:00003FEC047F088C1552222C0000000000000000000000000000000000000000 +A979:00003E7C20403E7C20403E7C0000000000000000000000000000000000000000 +A97A:00003E3014FC143014483E300000000000000000000000000000000000000000 +A97B:00000C103F100C1012280C440000000000000000000000000000000000000000 +A97C:00003EFC00000C3012480C300000000000000000000000000000000000000000 +A97D:00007FFE61CE6DB661C66DF66DCE7FFE7FFE618E7DB67BB677B6778E7FFE0000 +A97E:00007FFE61CE6DB661C66DF66DCE7FFE7FFE61867DBE7B8E77BE77867FFE0000 +A97F:00007FFE61CE6DB661C66DF66DCE7FFE7FFE61867DBE7B8E77BE77BE7FFE0000 +A980:11880A5007E00000000000000000000000000000000000000000000000000000 +A981:0240038000000000000000000000000000000000000000000000000000000000 +A982:0040008001000200000000000000000000000000000000000000000000000000 +A983:0000000000000000000600090009000500020006000100010001000100010002 +A984:0000000000000000300040008000B03C88A4B0FE882489A47264000000000000 +A985:000000000000000038D845244524440444044404450424842784018002600010 +A986:0000000000000000228855545554505450545054545452545E74060009800040 +A987:0000000000000000228855545554505450545054545458545B74040002000C00 +A988:000000000000000038D845244524440444044404450424842788003000460078 +A989:000000000000000030C049204920492049204920492049204E2004000F000080 +A98A:000000000000000031B04A484A4848084A08491C4F2800480788080809880670 +A98B:000000000000000031B04A484A4848084A0C491A4F2A004C078A080A098C0670 +A98C:000000000000000000000000000007800A401180100010700F88000000000000 +A98D:000003000400038000400180000007800A401180100010700F88000000000000 +A98E:000000000000000039C0492090909090909090904F2000400380043809C00E00 +A98F:00000000000000002388545454545454545454545E5455545574020000000000 +A990:00000000000000002388545454545454545454545E5455545574060009800040 +A991:00000000000000002384544854505450545054505E5055505560020000000000 +A992:000000000000000031104AA84AA84AA84AA82AA80AA80AA80EE8000000000000 +A993:0000000000000000231855145514551455145514555455545CA0000000000000 +A994:000000000000000038D8452445244404440444044484244427C4000000000000 +A995:0000000000000000387044484448444844484E485548554848C8000000000000 +A996:000000000000000010002200452049524A55529654A5552A2210000000000000 +A997:000000000000000038784484451C45E045C04530450824882780000000000000 +A998:000000000000000038784484451C45E045C04530450824882780018002600010 +A999:000800140014000E31454AA54AA648244A2449244F2400440784080808C80730 +A99A:0000000000008000457EAADAAADAA0DAA8DAA4DABCDA00000000000000000000 +A99B:000000000000000031B04A484A484808480848084B084C884708084008400780 +A99C:000000000000000031B04A484A4848084808480849884A484F88000000000000 +A99D:000000000000000038F048909050905090509050925092504D90000000000000 +A99E:0000000000000000398048409040904090409040924092404D80000000000000 +A99F:0000000000000000224855B455B455B455B435B415B415B41DB4000000000000 +A9A0:000000000000000027CC543454345434533450B450B450B45F34000000000000 +A9A1:000000000000000038F048909050905090509250955091504F90010001400080 +A9A2:000000000000000039E04A109210921092109210939096504990000000000000 +A9A3:000000000000000038F048909050905090509050925092504D90000000000000 +A9A4:000000000000000039E04A109210921092109F10929092905110000000000000 +A9A5:0000000000000000387044484448444844484448444844482388000000000000 +A9A6:0000000000000000386048909090905090209030924892484D90000000000000 +A9A7:0000000000000000629C95549554905490549054945492545F64000000000000 +A9A8:00000000000000003C782448244804404F4074E00258014400C0000000000000 +A9A9:00000000000000003F18482448244824472448244824482427C4000000000000 +A9AA:000000000000000039CE494A494A494A494A494A494A494A2E32000000000000 +A9AB:00000000000000003C78228412840284048408841C8402840184000000000000 +A9AC:000C0012000E000264929B6A9B6A9B6A5B6A1B6A1B6A1B6A1B6E000000000000 +A9AD:000000000000000039DC4A549254925492549254925492544E64000000000000 +A9AE:00000000000000001CF024884848484848484848484848482788000000000000 +A9AF:0000000000000000233054C854C854C855C836C817FC14CA1CC8000000000000 +A9B0:00000000000000003878484890489148924893FC904A90484F88000000000000 +A9B1:00000000000000003C3C44248424842484248E249524952448C4000000000000 +A9B2:000000000000000039FC49649164916491649164916491644E64000000000000 +A9B3:0000024001802424181800000000000000000000000000000000000000000000 +A9B4:0000000000000000000600090009000100020002000400050007000000000000 +A9B5:0000000000000000000000040004000200020001000900060000000000000000 +A9B6:01E0021004100410047003900000000000000000000000000000000000000000 +A9B7:01E00210053004D0047003900000000000000000000000000000000000000000 +A9B8:000000000000000000000000000000050005000500050005000500050019003E +A9B9:000000000000000000000004000F00140014000E00050005000500050019003E +A9BA:00000000000000004800B400B400B400B400B400B400B4003400040004000300 +A9BB:1800200010000800300000004800B400B400B400B400B4003400040004000300 +A9BC:0780084008200610000000000000000000000000000000000000000000000000 +A9BD:0000000000000000000000000000000100060002000100010001003200340058 +A9BE:000E000A000A000A000A000A000A000A000A002A002A00CA030A040A04CA0331 +A9BF:180020004000800080008000800080008000800080048008401C2002180207FC +A9C0:000E000A000A000A000A000A000A000A000A000A000A030A048A040A04CA0331 +A9C1:00000006060A04080408020861E04004206A1F8400100612042203C2000A000C +A9C2:00003000500043C044204860080021F856042002078610401020102050606000 +A9C3:2800D586C586C586D586F58601861D8621862F86A5E6999F818781C741D73EA9 +A9C4:6800D586C586C586D586F58681869D86A186AF86A5E6999F818781C741D73EA9 +A9C5:30004006E806D586C586F58681869D86A186AF86A5E6999F818781C741D73EA9 +A9C6:0000000000000000000001C0022002200220022001C000000000000000000000 +A9C7:0000000000000000000000000240038000000000024003800000000000000000 +A9C8:00000000000000001800040002000100008000800040034000C0000000000000 +A9C9:0000000000000000330008800440022001100110008806E80198000000000000 +A9CA:00000000000000000600010001000100010001000100010001000100010000C0 +A9CB:0000000000000000198004400440044004400440044004400440044004400330 +A9CC:0000001000200140010000C006000100010001000100010001000100010000C0 +A9CD:0000018000400040004000400040004000400040003001800040014002000400 +A9CE:00007FFE61CE6DB661C66DF66DCE7FFE7FFE71866FBE6F8E6FBE71867FFE0000 +A9CF:0000000000000000000000000820072002C00200010001000100000000000000 +A9D0:0000000000000000000001C0022002200220022001C000000000000000000000 +A9D1:000000000000000031104AA84AA84AA84AA82AA80AA80AA80EE8000000000000 +A9D2:000000000000000031B04A484A4848084A08491C4F2800480788080809880670 +A9D3:00000000000000002367549554955015541552255E4500850F05100511850E79 +A9D4:000000000000000000C00100020002C0022002C00220022001C0000000000000 +A9D5:00000000000000000380044008200B2008A00B2008A008A00720002000200018 +A9D6:000000000000000000000000000007800A401180100010700F88000000000000 +A9D7:000000000000000039DC4A549254925492549254925492544E64000000000000 +A9D8:0000000000000000386048909090905090209030924892484D90000000000000 +A9D9:000000000000000039CE494A494A494A494A494A494A494A2E32000000000000 +A9DA:00007FFE61CE6DB661C66DF66DCE7FFE7FFE63866DB66D866DB663B67FFE0000 +A9DB:00007FFE61CE6DB661C66DF66DCE7FFE7FFE638E6DB66D8E6DB6638E7FFE0000 +A9DC:00007FFE61CE6DB661C66DF66DCE7FFE7FFE63C66DBE6DBE6DBE63C67FFE0000 +A9DD:00007FFE61CE6DB661C66DF66DCE7FFE7FFE638E6DB66DB66DB6638E7FFE0000 +A9DE:000000000000000000800140022002200220022001C000000000000000000000 +A9DF:00000000000000001C7022882288228822882288228822882388000000000000 +A9E0:0000000000000000000000F801440082000200F2008C00780000000000000000 +A9E1:00000000000000000000018C024203A1002100210252018C0000000000000000 +A9E2:00000000000000000000018C024A0029002500230252018C0000000000000000 +A9E3:00000000000000000000018C02D20120002001FC0252018C0000000000000000 +A9E4:0000000000000000000000C60108021002100216012900C60000000000000000 +A9E5:0070008800800070008800000000000000000000000000000000000000000000 +A9E6:0000000000900120024004800000000000000000000000000000000000000000 +A9E7:00000000000000000000018C02520421042102210122062C0020002000200038 +A9E8:0000000000180020002001AC0232042104210421027201AC00200020002000E0 +A9E9:00000000000000000000018C02520421042D04210242000C0000000000000000 +A9EA:00000000000000000000018C02120421042D04210242018C0000000000000000 +A9EB:00000000000000000000018C02520421042D04210212018C0000000000000000 +A9EC:00000000000000000000000001020201022502510251018E0000000000000000 +A9ED:00000000000000000000018C0252042105AD04210242018C0000000000000000 +A9EE:00000000000000000000018C0252042105AD04210252018C0000000000000000 +A9EF:0000000000000000000000380244028201CA00A2004400000000000000000000 +A9F0:000003C00420081008100810081008100810081008100810042003C000000000 +A9F1:000003C004200E1009100620000003C004200E10091006200040007000000000 +A9F2:0000081008100810042003D0001003D00420080008000800042003C000000000 +A9F3:000003E0041000100010061005E0040005E0061000100010041003E000000000 +A9F4:000007C0082008000800086007A0002007A0086008000800082007C000000000 +A9F5:000003C0042008100800080008000BC00C200810081008100420024000000000 +A9F6:0000000002400420081008100810043003D00010001000100810042003C00000 +A9F7:000000000780084010201C2012200C2000200020002000200020003800000000 +A9F8:000003C00420080008000800040003C00420081008100810042003C000000000 +A9F9:000000000000000000000070008841044104410422881C700000000000000000 +A9FA:00000000000000000000018C0242042105A104210212018C0000000000000000 +A9FB:00000000000000000000018C02520421042D04210242018C0000000000000000 +A9FC:00000000000000000000018C02520421042D04210252018C0000000000000000 +A9FD:0000000000000000000000480084010201320102008400780000000000000000 +A9FE:0000000000180020002001AC02320421042D04210252018C0000000000000000 +A9FF:00007FFE61CE6DB661C66DF66DCE7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +AA00:00000000000000000E0611C9222929323480188013C004A00300000000000000 +AA01:00000000000000000CC013201020282050400780082008500790000000000000 +AA02:0000000000000000038004400820082004400180020002400180000000000000 +AA03:00380044004400480E20111011080928025804300420024001E0000000000000 +AA04:00000000000000000E70118818081408083000C00110011000E0000000000000 +AA05:00000000000000000380044008201C200AC0042000F0012800C0000000000000 +AA06:00000000000000000EE011101110102008000800080008001000000000000000 +AA07:00000000000000001B0C24922452206411C01280148015002200000000000000 +AA08:000000000000000007700888108810101000100011000A800700000000000000 +AA09:0000000000000000186C24922492148404800880090006000200000000000000 +AA0A:00000000000000001C2822502230161001100120014003800400000000000000 +AA0B:00000000000000001C2822502230161001100120014003800430044804900300 +AA0C:00000000000000001C3022482248114001800F00120012000C00000000000000 +AA0D:00000000000000001886254925491544064C1C94248828901060000000000000 +AA0E:000000000000000038D8452445242C8802800280028007000800000000000000 +AA0F:0000000000000000031804A404A404A8052013902B5027301CE0000000000000 +AA10:00000000000000001986264940314022406040A02920152028C0000000000000 +AA11:00000000000000001986264940314022406040A02920152028C4004A00480030 +AA12:00000000000000001986264940314022406040A02920152029C4024A01480230 +AA13:0000000000000000077008880888101010001600190009000600000000000000 +AA14:00000000000000000E0C111211120928025804300420024001C0000000000000 +AA15:00000000000000001C7022882288165001400140014003800400000000000000 +AA16:00000000000000000C70128812880A5002400440048003000100000000000000 +AA17:00000000000000001C0C22122212110801080F08129012600C40000000000000 +AA18:00000000000000001C0C22122212110801080F08129012600C48009400900060 +AA19:00000000000000001C0C22122212110801080F08129012600C0008C009200600 +AA1A:0000000000000000077008880888040004002400540048003000000000000000 +AA1B:00000000000000001C1822242224162801200120014003800400000000000000 +AA1C:00000000000000000E0C1112111209080A284A58AA30911060E0000000000000 +AA1D:0000000000000000183024482448085010401040104008400780000000000000 +AA1E:0000000000000000306C48924892108020802080208010800F00000000000000 +AA1F:0000000000000000306C4892489228840A80110012800C800400000000000000 +AA20:0000000000000000183824442444144805400880094006400248009400900060 +AA21:0000000000000000183824442444144805400880095006200250005000200000 +AA22:0000000000000000306C48924892248404400240024002800700000000000000 +AA23:000000000000000000F001080108009000800680098009000600000000000000 +AA24:0000000000000000073808C4080410041008101012000D000600000000000000 +AA25:00000000000000001838244424441448044008D0092006500250002000000000 +AA26:00000000000000000C1C12222A22522402200440048003000100000000000000 +AA27:0000000000000000073808C408040408020012002A0024001800000000000000 +AA28:00000000000000000770088808980428021412002A0024001800000000000000 +AA29:0038004400480020001800040004000000000000000000000000000000000000 +AA2A:001C00220041004D003200040000000000000000000000000000000000000000 +AA2B:001C002200490041004D00320004000000000000000000000000000000000000 +AA2C:00380045008E009A006400080000000000000000000000000000000000000000 +AA2D:00000000000000000000000000000000000000000000000000000002001C0020 +AA2E:00000011000E0000000000000000000000000000000000000000000000000000 +AA2F:0000000000000000000000006000900090008000A0005000A000000000000000 +AA30:0000000000000000000000006000900090008000A00050002000080070008000 +AA31:0002001C00200024001800100020000000000000000000000000000000000000 +AA32:0000000000000000000000000000000000000000000000000000000C00040008 +AA33:0000000000000000000000000000000600090009000800040032000A0012003C +AA34:5800A8008800100020004000800080008000800080008000800082004A003400 +AA35:000000000000000000000000000000000000000000000000000000040008000C +AA36:0000000000000000000000000000000000000008000500020005000500050002 +AA37:00007FFE61866DB661866DB66DB67FFE7FFE63867DF671EE7DDE63DE7FFE0000 +AA38:00007FFE61866DB661866DB66DB67FFE7FFE63CE7DB671CE7DB663CE7FFE0000 +AA39:00007FFE61866DB661866DB66DB67FFE7FFE63CE7DB671C67DF663CE7FFE0000 +AA3A:00007FFE61866DB661866DB66DB67FFE7FFE63867DB671867DB663B67FFE0000 +AA3B:00007FFE61866DB661866DB66DB67FFE7FFE638E7DB6718E7DB6638E7FFE0000 +AA3C:00007FFE61866DB661866DB66DB67FFE7FFE63C67DBE71BE7DBE63C67FFE0000 +AA3D:00007FFE61866DB661866DB66DB67FFE7FFE638E7DB671B67DB6638E7FFE0000 +AA3E:00007FFE61866DB661866DB66DB67FFE7FFE63867DBE718E7DBE63867FFE0000 +AA3F:00007FFE61866DB661866DB66DB67FFE7FFE63867DBE718E7DBE63BE7FFE0000 +AA40:00000000000000000EE011101110101008100820082008401080000000000000 +AA41:00000000000000000EE01110111020102010202020202C401C80000000000000 +AA42:00000000000000001C2022502250163001180124014403880410000000000000 +AA43:0004000800300000000000000000000000000000000000000000000000000000 +AA44:00000000000000001C3822442244114401840F08120812100C20000000000000 +AA45:0000000000000000077008880888100810081610191009200640000000000000 +AA46:0000000000000000381C44224422221202121E14252424C81890000000000000 +AA47:00000000000000000770088808880408020812102A1024201840000000000000 +AA48:0000000000000000306C48924892248204420244024402880710000000000000 +AA49:000000000000000000F801040104008400840688098809100620000000000000 +AA4A:00000000000000000E701188100820082008201024102A201C40000000000000 +AA4B:00000000000000001C7812842A84524402440448048803100120000000000000 +AA4C:0000002000000000000000000000000000000000000000000000000000000000 +AA4D:0000000000000000000000000006000900050001000200040004000000000000 +AA4E:00007FFE61866DB661866DB66DB67FFE7FFE6D866DBE618E7DBE7D867FFE0000 +AA4F:00007FFE61866DB661866DB66DB67FFE7FFE6D866DBE618E7DBE7DBE7FFE0000 +AA50:000000000000000003C0042008100810081008100810042003C0000000000000 +AA51:00000000000000000FE0101010103C200CC00100010001000100000000000000 +AA52:000203840478080013B824442444280429042A88270810100FE0000000000000 +AA53:00000000000000000E7011881008200820102024244A2A4A1C30000000000000 +AA54:0000000000000000000406080908109020507C20220022001C00000000000000 +AA55:00000000000000000F0010801080090002800040034004800340000000000000 +AA56:000000000000000000F001080108009000800680098009000600000000000000 +AA57:000000000000000000F801040104008400840688098809100660008800940060 +AA58:00000000000000001C3822442244114401840F08120812100C60008800940060 +AA59:0000000000000000183824442444084410841088108809100660008800940060 +AA5A:00007FFE61866DB661866DB66DB67FFE7FFE61866FB661867DB661B67FFE0000 +AA5B:00007FFE61866DB661866DB66DB67FFE7FFE618E6FB6618E7DB6618E7FFE0000 +AA5C:0000000000000000000001C00220041024101310082007C00000000000000000 +AA5D:0000000000000000008000800080008000800080008000800080000000000000 +AA5E:0000000000000000024002400240024002400240024000400040000000000000 +AA5F:0000000000000000049004900490049004900090009000100010000000000000 +AA60:00000000000000000000018C0252042304250429024A000C0000000000000000 +AA61:00000000000000000000018C02520421042102210152060C0000000000000000 +AA62:000000000000000000000118010401020102014201A401180000000000000000 +AA63:00000000000000000000018C025204A104A104A10252060C0000000000000000 +AA64:00000000000000000000000C02520421042104210252018C0000000000000000 +AA65:00000000000000000000010C0212042104210421026201AC00200020002000E0 +AA66:00000000000000000000018C0252042105A104210242018C0000000000000000 +AA67:00000000000000000000018C0252042105A104210252018C0000000000000000 +AA68:00000000000000000000018C0252042305A50429024A018C0000000000000000 +AA69:00000000000000000000018C0252042105B904250252018C0000000000000000 +AA6A:00000000000000000000018C02520421043904250252018C0000000000000000 +AA6B:0000000000000000000000380244028201C200A2004400000000000000000000 +AA6C:0000000000000000000000000102020102310249024901860000000000000000 +AA6D:00000000000000000000000C005200A1006100210022002C00200020012000C0 +AA6E:00000000000000000000018C02420621052104A10292018C0000000000000000 +AA6F:00000000000000000000011801A4014201420142012401180000000000000000 +AA70:000003E00410000003E004100000000000000000000000000000000000000000 +AA71:00000000000000000000018C02520521052105210242000C0000000000000000 +AA72:00000000000000000000004C00B2011101110711052A030C0000000000000000 +AA73:00000000000000000000010C01820181014101210112010C0000000000000000 +AA74:00300048004000200010040808C810A810A810A808C807880088038804C80330 +AA75:0018002400200010000818C42524421442142214142460C40084038404E40318 +AA76:000C001200100008000438E24512020A020A020A020A02320222326242B23C4C +AA77:000006000900080004000FF0109020502050205010500F5C0040004000400070 +AA78:000000000000000C001208A02720102010401040274008C00000000000000000 +AA79:0000000000000000000007800840102010201020082007A00020002000200038 +AA7A:00000000002007C00800098C0A420C210C210C210A12099C08100810081007E0 +AA7B:0000000000000000000000000000000000000100028003000200010000000000 +AA7C:00000000000001FE000000000000000000000000000000000000000000000000 +AA7D:0000000000000000000000000000000007E00000000000000000000000000000 +AA7E:0000000000000000000000710089000501E501150089007900090009000D001A +AA7F:00000000000000000000011102A90045074504C502AD011500050005000D001A +AA80:00000000000000001830085008900890091009100A100C100000000000000000 +AA81:000000000000000003E00410082808480888090806101E200000000000000000 +AA82:0000000000000E04110820882088208820882088110809F00008000800880070 +AA83:000000000000661C222222422242224222422242224C1D82000200020022001C +AA84:0000000000000E0811102090209020907110291C293210CC0000000000000000 +AA85:00000000000008F00508020802080208000800080030000800080208010800F0 +AA86:000000000000038004400820082008201C200A200A2004200020002004400380 +AA87:000000000000038004400820082008200820046003A000200020002004400380 +AA88:00060008000EDB094C86488848884888488849EA4A95310A0000000000000000 +AA89:02000400080013C0142014101010101010100810042003C00000000000000000 +AA8A:000000300048008000801880248004800480048004E003D00060000000000000 +AA8B:0000000000000210052804F0042004200420042004200820002000200012000C +AA8C:0000003C0042008000803060488008800880088008C0092006C0000000000000 +AA8D:0000003C00420080008030604880088008800880088008800700008000800300 +AA8E:0000000000003008081004200240018001802240142008180000000000000000 +AA8F:0007000800100E1011102090209020907110291C293210CC0000000000000000 +AA90:00000000000066D823242224222422242224222422241C240004000400840078 +AA91:0000000000000770088810881008780814080C080008000800080008010800F0 +AA92:000000000000000003E00410080808080808080804101E200000000000000000 +AA93:00000000000060E021102210221022102210239026501990001000100012000C +AA94:0000000000000770088810881008780814080C10000000000000000000000000 +AA95:0000000000003040484008400840084008400840084807B00000000000000000 +AA96:0000000000000E00110020802080208070802880288010800080008800880070 +AA97:0000000000000C1004100410041004100410043004500390001000100012000C +AA98:000200040008DB084C88488848884888488849EA4A95310A0000000000000000 +AA99:000000000000000018202440048004800480048004E003D00060000000000000 +AA9A:0000002000400080008018802480048004800480048003000000000000000000 +AA9B:000400080008000832481248124812481248124812480DB00000000000000000 +AA9C:0018002400403040084008400840084008400840048003000000000000000000 +AA9D:000800100010001031101110111011101110111011100EE00000000000000000 +AA9E:0000003C004200800080606014801A801080108010C011200EC0000000000000 +AA9F:000400080008010862882288228822882288228822881C700008000800300000 +AAA0:0000042004401B80308008800900090009000960089007600000000000000000 +AAA1:0000001C00220020632025202520292029203138316420980000000000000000 +AAA2:0000000000016D822644244424442444244224E22552188C0000000000000000 +AAA3:0000000000043808441004100410041004080E08150808F00000000000000000 +AAA4:020C02120DA03820442004200420042004200420024001800000000000000000 +AAA5:020802100DA03820442004200420042004200420024001800000000000000000 +AAA6:0000000000002300148008400840084008400840102420180000000000000000 +AAA7:0000000000002300148008400840084008400858103420380010000800000000 +AAA8:000000000000CDC046204420442044204420442044203820002000200012000C +AAA9:0000000000000780084008400090012000C000800D0002000000000000000000 +AAAA:000000000000DB704C884884488448844884488448A430980000000000000000 +AAAB:00000000000003C0042004100010001000100810042003C00000000000000000 +AAAC:000000000000CCC055204E104410441044104422442438180000000000000000 +AAAD:00000000000030E0111012081208120814081408144808300000000000000000 +AAAE:00000000000003C0042004100250019000100410042003C00000000000000000 +AAAF:000003C004200410021001F800140414042403C4000400040004000400880070 +AAB0:0000042008400880070000000000000000000000000000000000000000000000 +AAB1:0000000000000780044000400040004000400040004000400000000000000000 +AAB2:00000100010006C0000000000000000000000000000000000000000000000000 +AAB3:080014E017100800100008000000000000000000000000000000000000000000 +AAB4:0000000000000000000000000000000000000000000C0012000E0022001C0000 +AAB5:000000000000042008401080108010801080108010800C600000000000000000 +AAB6:000001E002100400040004000400040004000400040003000000000000000000 +AAB7:0010002000400280010000000000000000000000000000000000000000000000 +AAB8:001000A0004002A0010000000000000000000000000000000000000000000000 +AAB9:0000000000000080010002000200020002000200020001800000000000000000 +AABA:0000000000E0010002000200010000C0010001C002A004400000000000000000 +AABB:00000600090008800880049003E0008000800080008003000000000000000000 +AABC:00000000000001C00220040004000400020001C0008001000200020004000600 +AABD:0000002000400080009031E04A8008800880088008C0092006C0000000000000 +AABE:038802700E2009C0388027000000000000000000000000000000000000000000 +AABF:0040004000400080008000800000000000000000000000000000000000000000 +AAC0:0000000000000180024004400440048007000420044003800000000000000000 +AAC1:0000003006400980030004000000000000000000000000000000000000000000 +AAC2:0000000000000780044000400040004000400040004000400040008001000200 +AAC3:00007FFE61866DB661866DB66DB67FFE7FFE718E6FF66FC66FF6718E7FFE0000 +AAC4:00007FFE61866DB661866DB66DB67FFE7FFE71B66FB66F866FF671F67FFE0000 +AAC5:00007FFE61866DB661866DB66DB67FFE7FFE71866FBE6F866FF671867FFE0000 +AAC6:00007FFE61866DB661866DB66DB67FFE7FFE71CE6FBE6F8E6FB671CE7FFE0000 +AAC7:00007FFE61866DB661866DB66DB67FFE7FFE71866FF66FEE6FDE71DE7FFE0000 +AAC8:00007FFE61866DB661866DB66DB67FFE7FFE71CE6FB66FCE6FB671CE7FFE0000 +AAC9:00007FFE61866DB661866DB66DB67FFE7FFE71CE6FB66FC66FF671CE7FFE0000 +AACA:00007FFE61866DB661866DB66DB67FFE7FFE71866FB66F866FB671B67FFE0000 +AACB:00007FFE61866DB661866DB66DB67FFE7FFE718E6FB66F8E6FB6718E7FFE0000 +AACC:00007FFE61866DB661866DB66DB67FFE7FFE71C66FBE6FBE6FBE71C67FFE0000 +AACD:00007FFE61866DB661866DB66DB67FFE7FFE718E6FB66FB66FB6718E7FFE0000 +AACE:00007FFE61866DB661866DB66DB67FFE7FFE71866FBE6F8E6FBE71867FFE0000 +AACF:00007FFE61866DB661866DB66DB67FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +AAD0:00007FFE61866DB661866DB66DB67FFE7FFE63CE6DB66DB66DB663CE7FFE0000 +AAD1:00007FFE61866DB661866DB66DB67FFE7FFE63EE6DCE6DEE6DEE63C67FFE0000 +AAD2:00007FFE61866DB661866DB66DB67FFE7FFE63866DF66D866DBE63867FFE0000 +AAD3:00007FFE61866DB661866DB66DB67FFE7FFE638E6DF66DC66DF6638E7FFE0000 +AAD4:00007FFE61866DB661866DB66DB67FFE7FFE63B66DB66D866DF663F67FFE0000 +AAD5:00007FFE61866DB661866DB66DB67FFE7FFE63866DBE6D866DF663867FFE0000 +AAD6:00007FFE61866DB661866DB66DB67FFE7FFE63CE6DBE6D8E6DB663CE7FFE0000 +AAD7:00007FFE61866DB661866DB66DB67FFE7FFE63866DF66DEE6DDE63DE7FFE0000 +AAD8:00007FFE61866DB661866DB66DB67FFE7FFE63CE6DB66DCE6DB663CE7FFE0000 +AAD9:00007FFE61866DB661866DB66DB67FFE7FFE63CE6DB66DC66DF663CE7FFE0000 +AADA:00007FFE61866DB661866DB66DB67FFE7FFE63866DB66D866DB663B67FFE0000 +AADB:0007000800100E12110C208420B823C87D08291C292A10CC0000000000000000 +AADC:0007000800100E12110C2084208820887108291C292A10CC0000000000000000 +AADD:02000400080008000B8004400A20092008E01C500A480A480430000000000000 +AADE:1F7C21844508105001020A0405545AAC4AA44AA464980000145041043EF80000 +AADF:0000007000800100012000C00040008000801FE0209007E0088011C00EA000C0 +AAE0:000000000000000001C002200410081008100010001013900C70000000000000 +AAE1:00000000000000001FF008000800080008100810082004400380000000000000 +AAE2:00000000000000001CE0249017A0102010200840084008403030000000000000 +AAE3:000000000000000001900190016002000200020034004C004C00000000000000 +AAE4:0000000000000000070C089210A2204250A28912850A48923062000000000000 +AAE5:00000000000000001FF00100010001000FE009200FE009200FE0000000000000 +AAE6:00000000000000000700088018C0252042104010202020201040000000000000 +AAE7:0000000000000000183024482288210822882448282824482388000000000000 +AAE8:00000000000000003FF0100013F0101010201040104010801080000000000000 +AAE9:00000000000000007FFC22881450082014502288228814500820000000000000 +AAEA:000000000000000007C00820082008200FE00820082008200FE0000000000000 +AAEB:00006000900090007C0020002000200020002000200020002000000000000000 +AAEC:0000000000000000000000000000000000000000000000000490049003600000 +AAED:008000400020006000A000400000000000000000000000000000000000000000 +AAEE:0000600090007000200020003800200020002000200020002000000000000000 +AAEF:0000000C0012001C000800080038000800080008000800080008000000000000 +AAF0:0000000000000000008000800080008000800080008000800080000000000000 +AAF1:000000000000000010100C600380000003800C60101000000000000000000000 +AAF2:00000080022001C0000001C002200020004001800200022001C0000000000000 +AAF3:000000000000000007C008200820044002800100028004400820000000000000 +AAF4:0000000000000000038000400020002000400080010000800060000000000000 +AAF5:000000000000000000000004000A000A00040004000400000000000000000000 +AAF6:0000000000000000000000000000000000000000000000000000008001C00080 +AAF7:00007FFE61866DB661866DB66DB67FFE7FFE61866FF663EE6FDE6FDE7FFE0000 +AAF8:00007FFE61866DB661866DB66DB67FFE7FFE61CE6FB663CE6FB66FCE7FFE0000 +AAF9:00007FFE61866DB661866DB66DB67FFE7FFE61CE6FB663C66FF66FCE7FFE0000 +AAFA:00007FFE61866DB661866DB66DB67FFE7FFE61866FB663866FB66FB67FFE0000 +AAFB:00007FFE61866DB661866DB66DB67FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +AAFC:00007FFE61866DB661866DB66DB67FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +AAFD:00007FFE61866DB661866DB66DB67FFE7FFE618E6FB663B66FB66F8E7FFE0000 +AAFE:00007FFE61866DB661866DB66DB67FFE7FFE61866FBE638E6FBE6F867FFE0000 +AAFF:00007FFE61866DB661866DB66DB67FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +AB00:00007FFE618E6DB6618E6DB66D8E7FFE7FFE73CE6DB66DB66DB673CE7FFE0000 +AB01:000000000600060007000F8018C018C01FC01FFC18CC18C018C018C000000000 +AB02:000000000600060007000F8018C018C01FC01FC018C018C018CC18FC00000000 +AB03:000000000180018001C003E00630063007F007F0063000300030003000000000 +AB04:000000000600060007000F8018C018C01FC01FC018C018F818CC18F800000000 +AB05:000000000300038001C003E00630063007F007F0063006300630063000000000 +AB06:000000000180018001C003E00630063007F007F0063006000600060000000000 +AB07:00007FFE618E6DB6618E6DB66D8E7FFE7FFE73866DF66DEE6DDE73DE7FFE0000 +AB08:00007FFE618E6DB6618E6DB66D8E7FFE7FFE73CE6DB66DCE6DB673CE7FFE0000 +AB09:0600060007000F8018801F8018800D0006001FC030C030FC018C018000000000 +AB0A:0600060007000F8018801F8018800D0006001FC030C030C0019801F800000000 +AB0B:03000300038007C00C400FC00C40068003000FF00C300C300030003000000000 +AB0C:0600060007000F8018801F8018800D0006000600060003F03F9830F000000000 +AB0D:0600060007000F8018801FF818980D0006000600060003003FF0303000000000 +AB0E:0300038007C00C400FC00C400680030007F00C30180018001800180000000000 +AB0F:00007FFE618E6DB6618E6DB66D8E7FFE7FFE73866DBE6D8E6DBE73BE7FFE0000 +AB10:00007FFE618E6DB6618E6DB66D8E7FFE7FFE7BCE73B67BB67BB671CE7FFE0000 +AB11:60307FF0401018C018C018C018C01FC01FC018FC18CC18CC18C018C000000000 +AB12:60307FF0401018C018C018C018C01FC01FC018C018C018C018CC18FC00000000 +AB13:30183FF820080C600C600C600C600FE00FE00C600C6000600060006000000000 +AB14:60307FF0401018C018C018C018C01FC01FC018C018C018F818CC18F800000000 +AB15:30183FF8200800001C3036303630063007F007F0063006300630063000000000 +AB16:30183FF820080C600C600C600C600FE00FE00C600C600C000C000C0000000000 +AB17:00007FFE618E6DB6618E6DB66D8E7FFE7FFE7B8673F67BEE7BDE71DE7FFE0000 +AB18:00007FFE618E6DB6618E6DB66D8E7FFE7FFE7BCE73B67BCE7BB671CE7FFE0000 +AB19:00007FFE618E6DB6618E6DB66D8E7FFE7FFE7BCE73B67BC67BF671CE7FFE0000 +AB1A:00007FFE618E6DB6618E6DB66D8E7FFE7FFE7B8673B67B867BB671B67FFE0000 +AB1B:00007FFE618E6DB6618E6DB66D8E7FFE7FFE7B8E73B67B8E7BB6718E7FFE0000 +AB1C:00007FFE618E6DB6618E6DB66D8E7FFE7FFE7BC673BE7BBE7BBE71C67FFE0000 +AB1D:00007FFE618E6DB6618E6DB66D8E7FFE7FFE7B8E73B67BB67BB6718E7FFE0000 +AB1E:00007FFE618E6DB6618E6DB66D8E7FFE7FFE7B8673BE7B8E7BBE71867FFE0000 +AB1F:00007FFE618E6DB6618E6DB66D8E7FFE7FFE7B8673BE7B8E7BBE71BE7FFE0000 +AB20:60307FF0401000001F803FC06260C230C230C230F338DAB6CAB2FBBE00000000 +AB21:60307FF0401000001F803FC06260C230C23FC233F338DAB4CAB2FBBE00000000 +AB22:60307FF0401000001F803FC06260C230C230C230F330DAB0CAB3FBBF00000000 +AB23:30183FF820080FE01FF031186118799865587DD8001800340032003E00000000 +AB24:60307FF0401000001F803FC06260C23FC239C237F330DABCCAB2FBBE00000000 +AB25:60307FF040101FC07FE0C630E6389724F33C030003800340032003E000000000 +AB26:30183FF820080FE01FF01A183218231862946252739C680064007C0000000000 +AB27:00007FFE618E6DB6618E6DB66D8E7FFE7FFE61867DF661EE6FDE61DE7FFE0000 +AB28:000018181FF81008018003C00660066003C007E00E700C300C300C3000000000 +AB29:000060607FE0402006000F00198019800F001F8039C030FC30CC30C000000000 +AB2A:000060607FE0402006000F00198019800F001F8039C030C030CC30FC00000000 +AB2B:30303FF02010030007800CC00CC007800FC01CC018E018600060006000000000 +AB2C:000030603FE02020030007800CC00CC007800FC01CE01878186C187800000000 +AB2D:000030603FE0202006000F0019F819980F001F8039C030C030C030C000000000 +AB2E:30603FE02020030007800CC00CC007800FC01CE0186018601800180000000000 +AB2F:00007FFE618E6DB6618E6DB66D8E7FFE7FFE61867DBE618E6FBE61BE7FFE0000 +AB30:000000000000344C44FE44444C340000 +AB31:0000000000007C9210709E92927C0000 +AB32:00000000000018244244485224180000 +AB33:0000000000003C42427E40FE403E0000 +AB34:0000000000001C22227EA0A0A21C0000 +AB35:0000000C1010107C1010101010000000 +AB36:0000000000003A4642423E02122A1C08 +AB37:00000000301014127C905010107C0000 +AB38:000000003010127C90127C90107C0000 +AB39:000000003010103854543810107C0000 +AB3A:0000000000006C52525252575A540000 +AB3B:0000000000005C62424242474A440000 +AB3C:0000000000005C6242424244444E1408 +AB3D:00000000000010284444444428100000 +AB3E:00000000000014284C54546428500000 +AB3F:0000000000023C460A0A1212623C4000 +AB40:0000000000006C9290909E92926C0000 +AB41:0000000000025CA6262AEAB2B25C0000 +AB42:0000000000006C921212FE92926C0000 +AB43:0000000000004C9292929292926C0000 +AB44:0000000000429CA6A6AAAAB2A25C0000 +AB45:00000000000010101038444444440000 +AB46:0000000000007C42427C505048480906 +AB47:00000000000028302020202020200000 +AB48:000000000000546A4A40404040400000 +AB49:0000000000002C3222202070A0A04000 +AB4A:0000000000002A3525202070A0A04000 +AB4B:000000000000665A4202020202020000 +AB4C:000000000000CCB48406050505020000 +AB4D:0000000C101010101010101010600000 +AB4E:000000000000404040424242463A0000 +AB4F:000000000000404040FE44444C340000 +AB50:000000000000928282929292926E0000 +AB51:000000000000EC929292928282920000 +AB52:00000000000042A2A2222222261A0000 +AB53:00000000000042422424181824244242 +AB54:0000000000008484484830304C4A8A84 +AB55:00000000000042422424181824A4C282 +AB56:00000000000084844830304A85850200 +AB57:0000000000002121120C0C1221418000 +AB58:000000000000424224181A2545820000 +AB59:0000000000002121120C0C1221A1C080 +AB5A:0000000000004040424242261A02023C +AB5B:00000000000044380038440000000000 +AB5C:00000020203824242424040800000000 +AB5D:0000007014127C9050107C0000000000 +AB5E:0000003808083A4C08083E0000000000 +AB5F:000000000042A222261A000000000000 +AB60:0000000000007050505C5252525C0000 +AB61:0000000000004C52527E5050524C0000 +AB62:0000000000006C92121E1010926C0000 +AB63:0000000000008C9292929292926C0000 +AB64:000000000000324A46424242463A0000 +AB65:0000000000007C828282442828EE0000 +AB66:0000000000000200020002003BF84608421042204240428047083BF800080006 +AB67:00000000000000001000100010F07F08110010C01030100813080DF0010000C0 +AB68:00000000000004051E2404444C340000 +AB69:00000000002236554949000000000000 +AB6A:0000000000000404047C040404000000 +AB6B:0000000000004040407C404040000000 +AB6C:00007FFE618E6DB6618E6DB66D8E7FFE7FFE73C66FBE63BE6DBE73C67FFE0000 +AB6D:00007FFE618E6DB6618E6DB66D8E7FFE7FFE738E6FB663B66DB6738E7FFE0000 +AB6E:00007FFE618E6DB6618E6DB66D8E7FFE7FFE73866FBE638E6DBE73867FFE0000 +AB6F:00007FFE618E6DB6618E6DB66D8E7FFE7FFE73866FBE638E6DBE73BE7FFE0000 +AB70:00000000000078444242424244780000 +AB71:0000000000007C42427C504844430000 +AB72:0000000000007F080808080808080000 +AB73:0000000000001C081412215155260000 +AB74:00000000000030484B494E4848300000 +AB75:00000000000008080008080808080000 +AB76:0000000000003C42207F0442423C0000 +AB77:0000000000001C0222525262423C0000 +AB78:000000000000404C5476404040400000 +AB79:00000000000042424242261A023C0000 +AB7A:000000000000182442427E4242420000 +AB7B:00000000000004040404044444380000 +AB7C:0000000000007E40407C4040407E0000 +AB7D:000000000000080848A8BB490A0C0000 +AB7E:0000000000003C0202427C4040400000 +AB7F:0000000000001C22223E2222AACC0000 +AB80:0000000000002020203E202020200000 +AB81:0000000000007E424040404040400000 +AB82:0000000000003048484830B7B4480000 +AB83:0000000000004242425A5A6666420000 +AB84:00000000000006090838444444380000 +AB85:0000000000003C42524C404040400000 +AB86:0000000000001E2040505C5244380000 +AB87:0000000000004266665A5A4242420000 +AB88:00000000000038440202721E02020000 +AB89:000000000000180A15203C52520C0000 +AB8A:000000000000324A4A4E4A4A4A320000 +AB8B:0000000000004242427E424242420000 +AB8C:000000000000381038440202423C0000 +AB8D:000000000000474242261A02E2443800 +AB8E:0000000000003C4242427E42423C0000 +AB8F:0000000000004040F040404E443C0418 +AB90:000000000000788480809E8484780000 +AB91:0000000000000C12121222A2A2420000 +AB92:0000000000004040405C624242420000 +AB93:0000000000007E0204081020407E0000 +AB94:0000000000003844E404E4443C040400 +AB95:0000000000003048484A4D4948300000 +AB96:000000000000FE101010101010FE0000 +AB97:0000000000000C1202424A4A4A340000 +AB98:0000000000006619292A484848300000 +AB99:000000000000F1A12222242428100000 +AB9A:0000000000001C22029AA2A2A25C0000 +AB9B:0000000000003C42403C4042423C0000 +AB9C:000000000000424242427E42423C0000 +AB9D:0000000000001C2222021AD2B26C0000 +AB9E:000000000000040C1424447E04040000 +AB9F:000000000000404040407C42427C0000 +ABA0:0000000000000808080B5D6808080000 +ABA1:000000000000649AE240988484780000 +ABA2:0000000000007C42425C484442420000 +ABA3:000000000000202020202022221C0000 +ABA4:000000000000AAAA92B2CACA86820000 +ABA5:0000000000003C4247201F44423C0000 +ABA6:000000000000F09010101211110E0000 +ABA7:000000000000040404040C1424440000 +ABA8:0000000000007C0404040C1424440000 +ABA9:00000000000082824444282810100000 +ABAA:0000000000003C4240300C02423C0000 +ABAB:00000000000036494260504848300000 +ABAC:00000000000018241824225555220000 +ABAD:0000000000001C2242404040407E0000 +ABAE:000000000000404040404040407E0000 +ABAF:0000000000003C4240404040423C0000 +ABB0:0000000000000444A47E242424180000 +ABB1:00000000000066999A28444444380000 +ABB2:0000000000007C42427C404040400000 +ABB3:0000000000003C4247404042423C0000 +ABB4:000000000000F1911212141418100000 +ABB5:0000000000404040434D744444440000 +ABB6:00000000000044485060605048440000 +ABB7:0000000000000202023E4242423C0000 +ABB8:000000000000304A454040454A300000 +ABB9:00000000000038444440404E443B0000 +ABBA:00000000000022555351311995620000 +ABBB:0000000000003C4272525E42423C0000 +ABBC:000000000000324949714141221C0000 +ABBD:0000000000000C12120A064244380000 +ABBE:0000000000003C4240407C42423C0000 +ABBF:0000000000001E2101015D4949360000 +ABC0:00000000000000007FF824B024D02590269024902C9034903FF0000000000000 +ABC1:0000000000000000063009481084100410040808080804100220000000000000 +ABC2:00000000000000001FF80020002007A008601000100008400780000000000000 +ABC3:00000000000000007FF82400240024003FE024C02500251024E0000000000000 +ABC4:00000000000000007FF844882490249014A014A014A054A86498000000000000 +ABC5:00000000000000001FFC041008100820104010080810042003C0000000000000 +ABC6:00000000000000003FF020101020102008400FC0084028503030000000000000 +ABC7:00000000008001001FF011080890086004000400240024001800000000000000 +ABC8:00000000000000001FF8100008C0052006280410040004001800000000000000 +ABC9:000000000000000007F004900490049064909490149024907FF0000000000000 +ABCA:00000000000000001FFC00800080008008881084108409480630000000000000 +ABCB:00000000000000003FF8200810101010092008A0086008203018000000000000 +ABCC:00000000000000007FFF0808100413640D580240042008241018000000000000 +ABCD:00000000000000007FFC000001800240042008200920112060C0000000000000 +ABCE:00000000000000003FFC10001070089007E00010088815481230000000000000 +ABCF:00000000000000001FF8100008000600058004600410051018E0000000000000 +ABD0:00000000000000001FF01000102010401F801000101010201FC0000000000000 +ABD1:00000000000000003FF8124012401240124012400A480A5007E0000000000000 +ABD2:00000000000000001FF009200924092409180900090009000900000000000000 +ABD3:00000000000000000FF800100020004000800100020004300FC0004000300000 +ABD4:00000000000000000E70118810881F8010801080108010801F80000000000000 +ABD5:00000000000000000FE004400280010002800440082004400380000000000000 +ABD6:00000000000000001FF0001000E0030004000820082004400380000000000000 +ABD7:00000000000000000FFC04480288011002900450083004480384000000000000 +ABD8:00000000000000001FF004000400040004001FC0248024901860000000000000 +ABD9:00000000000000001FFC0040004000400840104010C009400640000000000000 +ABDA:00000000000000001FF00220022012200C200020002000200020000000000000 +ABDB:00000000000000003FF812481248124012401240124012401FC0000000000000 +ABDC:00000000000000000FF80010001000100010071000D000300010000000000000 +ABDD:00000000000000003FF8108010801FE010801080108010801080000000000000 +ABDE:00000000000000003FF821081110111009200920092029283118000000000000 +ABDF:00000000000000003FF8049009201200122011C00808081007E0000000000000 +ABE0:000000000000000020402080210022003F800240024002400180000000000000 +ABE1:00000000000000001FF009200920092009200920092009200FE0000000000000 +ABE2:00000000000000001FF01000080007C0042004100910092010C0000000000000 +ABE3:00180004001C0024002400180000000000000000000000000000000000000000 +ABE4:0000000600090009003E00080008000800080008000800080008000000000000 +ABE5:0040002000100000000000000000000000000000000000000000000000000000 +ABE6:0000000000000000000000000006000900090006000000000000000000000000 +ABE7:00020015000E0004000C00000000000000000000000000000000000000000000 +ABE8:0000000000000000000000000000000000000000000000000360049004100220 +ABE9:000200250015000E000400000000000000000000000000000000000000000000 +ABEA:0002000500050003000100020004000000000000000000000000000000000000 +ABEB:0000000000000000044004400440044004400440044004400440000000000000 +ABEC:0000000000000000000000000000000000000000000000060006000000000000 +ABED:000000000000000000000000000000000000000000000000000000007FFE0000 +ABEE:00007FFE618E6DB6618E6DB66D8E7FFE7FFE61866FBE638E6FBE61867FFE0000 +ABEF:00007FFE618E6DB6618E6DB66D8E7FFE7FFE61866FBE638E6FBE61BE7FFE0000 +ABF0:0000000003000CC01020102020102010102010200CC003000000000000000000 +ABF1:000000000000000003800440082008C004000300008004400380000000000000 +ABF2:000000000000000003800440082008C004000360049004500390000000000000 +ABF3:000000000000000003800440082008CC0412036A04A804A80310000000000000 +ABF4:00000000000000000380044000800300040008C0082004400380000000000000 +ABF5:00000000000000000FC010202210251015000E00040004000400000000000000 +ABF6:00000000000000000FC010202210252015000E00048005000600040000000000 +ABF7:00000000000000000C3011480950012003D00508088809100620000000000000 +ABF8:00000000000000000FC010202210252015000E00040014000C00040000000000 +ABF9:00000000000000000FC010202210252015000E0004001F802400180000000000 +ABFA:00007FFE618E6DB6618E6DB66D8E7FFE7FFE61866FB663866FB66FB67FFE0000 +ABFB:00007FFE618E6DB6618E6DB66D8E7FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +ABFC:00007FFE618E6DB6618E6DB66D8E7FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +ABFD:00007FFE618E6DB6618E6DB66D8E7FFE7FFE618E6FB663B66FB66F8E7FFE0000 +ABFE:00007FFE618E6DB6618E6DB66D8E7FFE7FFE61866FBE638E6FBE6F867FFE0000 +ABFF:00007FFE618E6DB6618E6DB66D8E7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +AC00:00000000001000101F9000900090009E01100110021004101810001000100000 +AC01:000000083E0802080208040E080830080008000007F800080008000800080000 +AC02:000000083E0802080208040E080830080008000000003EF80208020802080000 +AC03:000000083E0802080208040E080830080008000000001F080108011401620000 +AC04:000000083E0802080208040E080830080008000808000800080008000FF80000 +AC05:000000083E0802080208040E0808300800080000000010F8101010301ECC0000 +AC06:000000083E0802080208040E08083008000800000808087F081C08220F9C0000 +AC07:000000083E0802080208040E080830080008000003F802000200020003F80000 +AC08:000000083E0802080208040E080830080008000007F8000807F8040007F80000 +AC09:000000083E0802080208040E08083008000800003EF802083E0820083E080000 +AC0A:000000083E0802080208040E08083008000800003EF802883E8820883EF80000 +AC0B:000000083E0802080208040E08083008000800003E8802883EF820883EF80000 +AC0C:000000083E0802080208040E08083008000800001F0801081F0810141F620000 +AC0D:000000083E0802080208040E08083008000800003EF802803EF820803EF80000 +AC0E:000000083E0802080208040E08083008000800003EFC02483E4820483EFC0000 +AC0F:000000083E0802080208040E08083008000800001F08017F1F1C10221F1C0000 +AC10:000000083E0802080208040E080830080008000003F802080208020803F80000 +AC11:000000083E0802080208040E08083008000800000208020803F8020803F80000 +AC12:000000083E0802080208040E0808300800080000110811081F0811141F620000 +AC13:000000083E0802080208040E0808300800080000001000100010006801840000 +AC14:000000083E0802080208040E08083008000800000048004800A8011406620000 +AC15:000000083E0802080208040E0808300800080000000003F00408040803F00000 +AC16:000000083E0802080208040E080830080008000003F80020002000D003080000 +AC17:000000083E0802080208040E0808300800080000004003F8004000A003180000 +AC18:000000083E0802080208040E080830080008000003F8000803F8000800080000 +AC19:000000083E0802080208040E080830080008000003F8020003F8020003F80000 +AC1A:000000083E0802080208040E080830080008000000000FF8022002200FF80000 +AC1B:000000083E0802080208040E080830080008000000800FF803E0041003E00000 +AC1C:00000000001200121F9200920092009E01120112021204121812001200120000 +AC1D:000000283E28022802280438082830280028000007F800080008000800080000 +AC1E:000000283E28022802280438082830280028000000003EF80208020802080000 +AC1F:000000283E28022802280438082830280028000000003E100210022802C40000 +AC20:000000283E28022802280438082830280028002808000800080008000FF80000 +AC21:000000283E280228022804380828302800280000000020F8201020303ECC0000 +AC22:000000283E280228022804380828302800280000202021FC207020883E700000 +AC23:000000283E28022802280438082830280028000003F802000200020003F80000 +AC24:000000283E28022802280438082830280028000007F8000807F8040007F80000 +AC25:000000283E2802280228043808283028002800003EF802083E0820083E080000 +AC26:000000283E2802280228043808283028002800003EF802883E8820883EF80000 +AC27:000000283E2802280228043808283028002800003E8802883EF820883EF80000 +AC28:000000283E2802280228043808283028002800001F0801081F0810141F620000 +AC29:000000283E2802280228043808283028002800003EF802803EF820803EF80000 +AC2A:000000283E2802280228043808283028002800003EFC02483E4820483EFC0000 +AC2B:000000283E2802280228043808283028002800003E1002FE3E3820443E380000 +AC2C:000000283E28022802280438082830280028000003F802080208020803F80000 +AC2D:000000283E2802280228043808283028002800000208020803F8020803F80000 +AC2E:000000283E280228022804380828302800280000110811081F0811141F620000 +AC2F:000000283E280228022804380828302800280000000800080008003400C20000 +AC30:000000283E2802280228043808283028002800000048004800A8011406620000 +AC31:000000283E280228022804380828302800280000000001F00208020801F00000 +AC32:000000283E28022802280438082830280028000003F80020002000D003080000 +AC33:000000283E280228022804380828302800280000004003F8004000A003180000 +AC34:000000283E28022802280438082830280028000003F8000803F8000800080000 +AC35:000000283E28022802280438082830280028000003F8020003F8020003F80000 +AC36:000000283E28022802280438082830280028000000000FF8022002200FF80000 +AC37:000000283E28022802280438082830280028000000800FF803E0041003E00000 +AC38:00000000001000101F900090009E00900110011E021004101810001000100000 +AC39:000000083E080208020E0408080E30080008000007F800080008000800080000 +AC3A:000000083E080208020E0408080E30080008000000003EF80208020802080000 +AC3B:000000083E080208020E0408080E30080008000000001F080108011401620000 +AC3C:000000083E080208020E0408080E30080008000008000800080008000FF80000 +AC3D:000000083E080208020E0408080E300800080000000010F8101010301ECC0000 +AC3E:000000083E080208020E0408080E3008000800000808087F081C08220F9C0000 +AC3F:000000083E080208020E0408080E30080008000003F802000200020003F80000 +AC40:000000083E080208020E0408080E30080008000007F8000807F8040007F80000 +AC41:000000083E080208020E0408080E3008000800003EF802083E0820083E080000 +AC42:000000083E080208020E0408080E3008000800003EF802883E8820883EF80000 +AC43:000000083E080208020E0408080E3008000800003E8802883EF820883EF80000 +AC44:000000083E080208020E0408080E3008000800001F0801081F0810141F620000 +AC45:000000083E080208020E0408080E3008000800003EF802803EF820803EF80000 +AC46:000000083E080208020E0408080E3008000800003EFC02483E4820483EFC0000 +AC47:000000083E080208020E0408080E3008000800001F08017F1F1C10221F1C0000 +AC48:000000083E080208020E0408080E30080008000003F802080208020803F80000 +AC49:000000083E080208020E0408080E3008000800000208020803F8020803F80000 +AC4A:000000083E080208020E0408080E300800080000110811081F0811141F620000 +AC4B:000000083E080208020E0408080E300800080000001000100010006801840000 +AC4C:000000083E080208020E0408080E3008000800000048004800A8011406620000 +AC4D:000000083E080208020E0408080E300800080000000003F00408040803F00000 +AC4E:000000083E080208020E0408080E30080008000003F80020002000D003080000 +AC4F:000000083E080208020E0408080E300800080000004003F8004000A003180000 +AC50:000000083E080208020E0408080E30080008000003F8000803F8000800080000 +AC51:000000083E080208020E0408080E30080008000003F8020003F8020003F80000 +AC52:000000083E080208020E0408080E30080008000000000FF8022002200FF80000 +AC53:000000083E080208020E0408080E30080008000000800FF803E0041003E00000 +AC54:00000000001200121F920092009E00920112011E021204121812001200120000 +AC55:000000283E28022802380428083830280028000007F800080008000800080000 +AC56:000000283E28022802380428083830280028000000003EF80208020802080000 +AC57:000000283E28022802380428083830280028000000003E100210022802C40000 +AC58:000000283E28022802380428083830280028002808000800080008000FF80000 +AC59:000000283E280228023804280838302800280000000020F8201020303ECC0000 +AC5A:000000283E280228023804280838302800280000202021FC207020883E700000 +AC5B:000000283E28022802380428083830280028000003F802000200020003F80000 +AC5C:000000283E28022802380428083830280028000007F8000807F8040007F80000 +AC5D:000000283E2802280238042808383028002800003EF802083E0820083E080000 +AC5E:000000283E2802280238042808383028002800003EF802883E8820883EF80000 +AC5F:000000283E2802280238042808383028002800003E8802883EF820883EF80000 +AC60:000000283E2802280238042808383028002800001F0801081F0810141F620000 +AC61:000000283E2802280238042808383028002800003EF802803EF820803EF80000 +AC62:000000283E2802280238042808383028002800003EFC02483E4820483EFC0000 +AC63:000000283E2802280238042808383028002800003E1002FE3E3820443E380000 +AC64:000000283E28022802380428083830280028000003F802080208020803F80000 +AC65:000000283E2802280238042808383028002800000208020803F8020803F80000 +AC66:000000283E280228023804280838302800280000110811081F0811141F620000 +AC67:000000283E280228023804280838302800280000000800080008003400C20000 +AC68:000000283E2802280238042808383028002800000048004800A8011406620000 +AC69:000000283E280228023804280838302800280000000001F00208020801F00000 +AC6A:000000283E28022802380428083830280028000003F80020002000D003080000 +AC6B:000000283E280228023804280838302800280000004003F8004000A003180000 +AC6C:000000283E28022802380428083830280028000003F8000803F8000800080000 +AC6D:000000283E28022802380428083830280028000003F8020003F8020003F80000 +AC6E:000000283E28022802380428083830280028000000000FF8022002200FF80000 +AC6F:000000283E28022802380428083830280028000000800FF803E0041003E00000 +AC70:00000000000200021F8200820082009E01020102020204021802000200020000 +AC71:000000083E080208020804380808300800080000000007F80008000800080000 +AC72:000000083E08020802080438080830080008000000003EF80208020802080000 +AC73:000000083E08020802080438080830080008000000001F080108011401620000 +AC74:000000083E08020802080438080830080008000000001000100010001FF80000 +AC75:000000083E080208020804380808300800080000000020F8201020303ECC0000 +AC76:000000083E080208020804380808300800080000202021FC207020883E700000 +AC77:000000083E08020802080438080830080008000003F802000200020003F80000 +AC78:000000083E08020802080438080830080008000007F8000807F8040007F80000 +AC79:000000083E0802080208043808083008000800003EF802083E0820083E080000 +AC7A:000000083E0802080208043808083008000800003EF802883E8820883EF80000 +AC7B:000000083E0802080208043808083008000800003E8802883EF820883EF80000 +AC7C:000000083E0802080208043808083008000800000F8800880F8808140FA20000 +AC7D:000000083E0802080208043808083008000800003EF802803EF820803EF80000 +AC7E:000000083E0802080208043808083008000800003EFC02483E4820483EFC0000 +AC7F:000000083E0802080208043808083008000800003E1002FE3E3820443E380000 +AC80:000000083E08020802080438080830080008000003F802080208020803F80000 +AC81:000000083E0802080208043808083008000800000208020803F8020803F80000 +AC82:000000083E080208020804380808300800080000210821083F0821143F620000 +AC83:000000083E080208020804380808300800080000001000100010006801840000 +AC84:000000083E0802080208043808083008000800000048004800A8011406620000 +AC85:000000083E080208020804380808300800080000000003F00408040803F00000 +AC86:000000083E08020802080438080830080008000003F80020002000D003080000 +AC87:000000083E080208020804380808300800080000004003F8004000A003180000 +AC88:000000083E08020802080438080830080008000003F8000803F8000800080000 +AC89:000000083E08020802080438080830080008000003F8020003F8020003F80000 +AC8A:000000083E08020802080438080830080008000000000FF8022002200FF80000 +AC8B:000000083E08020802080438080830080008000000800FF803E0041003E00000 +AC8C:00000000000A000A1F8A008A008A00BA010A010A020A040A180A000A000A0000 +AC8D:000000283E280228022804E8082830280028000007F800080008000800080000 +AC8E:000000283E280228022804E8082830280028000000003EF80208020802080000 +AC8F:000000283E280228022804E8082830280028000000003E100210022802C40000 +AC90:000000283E280228022804E8082830280028000008000800080008000FF80000 +AC91:000000283E280228022804E80828302800280000000020F8201020303ECC0000 +AC92:000000283E280228022804E80828302800280000202021FC207020883E700000 +AC93:000000283E280228022804E8082830280028000003F802000200020003F80000 +AC94:000000283E280228022804E8082830280028000007F8000807F8040007F80000 +AC95:000000283E280228022804E808283028002800003EF802083E0820083E080000 +AC96:000000283E280228022804E808283028002800003EF802883E8820883EF80000 +AC97:000000283E280228022804E808283028002800003E8802883EF820883EF80000 +AC98:000000283E280228022804E808283028002800001F0801081F0810141F620000 +AC99:000000283E280228022804E808283028002800003EF802803EF820803EF80000 +AC9A:000000283E280228022804E808283028002800003EFC02483E4820483EFC0000 +AC9B:000000283E280228022804E808283028002800003E1002FE3E3820443E380000 +AC9C:000000283E280228022804E8082830280028000003F802080208020803F80000 +AC9D:000000283E280228022804E808283028002800000208020803F8020803F80000 +AC9E:000000283E280228022804E80828302800280000110811081F0811141F620000 +AC9F:000000283E280228022804E80828302800280000000800080008003400C20000 +ACA0:000000283E280228022804E808283028002800000048004800A8011406620000 +ACA1:000000283E280228022804E80828302800280000000001F00208020801F00000 +ACA2:000000283E280228022804E8082830280028000003F80020002000D003080000 +ACA3:000000283E280228022804E80828302800280000004003F8004000A003180000 +ACA4:000000283E280228022804E8082830280028000003F8000803F8000800080000 +ACA5:000000283E280228022804E8082830280028000003F8020003F8020003F80000 +ACA6:000000283E280228022804E8082830280028000000000FF8022002200FF80000 +ACA7:000000283E280228022804E8082830280028000000800FF803E0041003E00000 +ACA8:00000000000200021F820082009E00820102011E020204021802000200020000 +ACA9:000000083E080208023804080838300800080000000007F80008000800080000 +ACAA:000000083E08020802380408083830080008000000003EF80208020802080000 +ACAB:000000083E08020802380408083830080008000000001F080108011401620000 +ACAC:000000083E08020802380408083830080008000800001000100010001FF80000 +ACAD:000000083E080208023804080838300800080000000020F8201020303ECC0000 +ACAE:000000083E080208023804080838300800080000202021FC207020883E700000 +ACAF:000000083E08020802380408083830080008000003F802000200020003F80000 +ACB0:000000083E08020802380408083830080008000007F8000807F8040007F80000 +ACB1:000000083E0802080238040808383008000800003EF802083E0820083E080000 +ACB2:000000083E0802080238040808383008000800003EF802883E8820883EF80000 +ACB3:000000083E0802080238040808383008000800003E8802883EF820883EF80000 +ACB4:000000083E0802080238040808383008000800000F8800880F8808140FA20000 +ACB5:000000083E0802080238040808383008000800003EF802803EF820803EF80000 +ACB6:000000083E0802080238040808383008000800003EFC02483E4820483EFC0000 +ACB7:000000083E0802080238040808383008000800003E1002FE3E3820443E380000 +ACB8:000000083E08020802380408083830080008000003F802080208020803F80000 +ACB9:000000083E0802080238040808383008000800000208020803F8020803F80000 +ACBA:000000083E080208023804080838300800080000210821083F0821143F620000 +ACBB:000000083E080208023804080838300800080000001000100010006801840000 +ACBC:000000083E0802080238040808383008000800000048004800A8011406620000 +ACBD:000000083E080208023804080838300800080000000003F00408040803F00000 +ACBE:000000083E08020802380408083830080008000003F80020002000D003080000 +ACBF:000000083E080208023804080838300800080000004003F8004000A003180000 +ACC0:000000083E08020802380408083830080008000003F8000803F8000800080000 +ACC1:000000083E08020802380408083830080008000003F8020003F8020003F80000 +ACC2:000000083E08020802380408083830080008000000000FF8022002200FF80000 +ACC3:000000083E08020802380408083830080008000000800FF803E0041003E00000 +ACC4:00000000000A000A1F8A008A00BA008A010A013A020A040A180A000A000A0000 +ACC5:000000283E28022802E8042808E830280028000007F800080008000800080000 +ACC6:000000283E28022802E8042808E830280028000000003EF80208020802080000 +ACC7:000000283E28022802E8042808E830280028000000003E100210022802C40000 +ACC8:000000283E28022802E8042808E830280028002808000800080008000FF80000 +ACC9:000000283E28022802E8042808E8302800280000000020F8201020303ECC0000 +ACCA:000000283E28022802E8042808E8302800280000202021FC207020883E700000 +ACCB:000000283E28022802E8042808E830280028000003F802000200020003F80000 +ACCC:000000283E28022802E8042808E830280028000007F8000807F8040007F80000 +ACCD:000000283E28022802E8042808E83028002800003EF802083E0820083E080000 +ACCE:000000283E28022802E8042808E83028002800003EF802883E8820883EF80000 +ACCF:000000283E28022802E8042808E83028002800003E8802883EF820883EF80000 +ACD0:000000283E28022802E8042808E83028002800001F0801081F0810141F620000 +ACD1:000000283E28022802E8042808E83028002800003EF802803EF820803EF80000 +ACD2:000000283E28022802E8042808E83028002800003EFC02483E4820483EFC0000 +ACD3:000000283E28022802E8042808E83028002800003E1002FE3E3820443E380000 +ACD4:000000283E28022802E8042808E830280028000003F802080208020803F80000 +ACD5:000000283E28022802E8042808E83028002800000208020803F8020803F80000 +ACD6:000000283E28022802E8042808E8302800280000110811081F0811141F620000 +ACD7:000000283E28022802E8042808E8302800280000000800080008003400C20000 +ACD8:000000283E28022802E8042808E83028002800000048004800A8011406620000 +ACD9:000000283E28022802E8042808E8302800280000000001F00208020801F00000 +ACDA:000000283E28022802E8042808E830280028000003F80020002000D003080000 +ACDB:000000283E28022802E8042808E8302800280000004003F8004000A003180000 +ACDC:000000283E28022802E8042808E830280028000003F8000803F8000800080000 +ACDD:000000283E28022802E8042808E830280028000003F8020003F8020003F80000 +ACDE:000000283E28022802E8042808E830280028000000000FF8022002200FF80000 +ACDF:000000283E28022802E8042808E830280028000000800FF803E0041003E00000 +ACE0:00000000000000003FF0001000100010001002100200020002007FFC00000000 +ACE1:000000001FF0001000100010011001007FFC00001FF000100010001000100000 +ACE2:000000001FF0001000100010011001007FFC000000003EF80208020802080000 +ACE3:000000001FF0001000100010011001007FFC000000001E100210022802C40000 +ACE4:000000001FF0001000100010011001007FFC000000001000100010001FF00000 +ACE5:000000001FF0001000100010011001007FFC0000000020F8201020303ECC0000 +ACE6:000000001FF0001000100010011001007FFC0000202021FC207020883E700000 +ACE7:000000001FF0001000100010011001007FFC00001FF01000100010001FF00000 +ACE8:000000001FF0001000100010011001007FFC00001FF000101FF010001FF00000 +ACE9:000000001FF0001000100010011001007FFC00003EF802083E0820083E080000 +ACEA:000000001FF0001000100010011001007FFC00003EF802883E8820883EF80000 +ACEB:000000001FF0001000100010011001007FFC00003E8802883EF820883EF80000 +ACEC:000000001FF0001000100010011001007FFC00003E1002103E1020283EC40000 +ACED:000000001FF0001000100010011001007FFC00003EF802803EF820803EF80000 +ACEE:000000001FF0001000100010011001007FFC00003EFC02483E4820483EFC0000 +ACEF:000000001FF0001000100010011001007FFC00003E2003FC3E7020883E700000 +ACF0:000000001FF0001000100010011001007FFC00001FF01010101010101FF00000 +ACF1:000000001FF0001000100010011001007FFC0000101010101FF010101FF00000 +ACF2:000000001FF0001000100010011001007FFC0000222022203E2022503E880000 +ACF3:000000001FF0001000100010011001007FFC000000000100010002800C400000 +ACF4:000000001FF0001000100010011001007FFC00000000024002400DA033100000 +ACF5:000000001FF0001000100010011001007FFC0000000007C00820082007C00000 +ACF6:000000001FF0001000100010011001007FFC0000000007E00080014006200000 +ACF7:000000001FF0001000100010011001007FFC0000008007E00080014006200000 +ACF8:000000001FF0001000100010011001007FFC00001FF000101FF0001000100000 +ACF9:000000001FF0001000100010011001007FFC00001FF010001FF010001FF00000 +ACFA:000000001FF0001000100010011001007FFC000000001FF0044004401FF00000 +ACFB:000000001FF0001000100010011001007FFC000001001FF007C0082007C00000 +ACFC:00000000001000103FD000500050005E0450041004107FD00010001000100000 +ACFD:000000081F880088008E0088048804087FE8000007F800080008000800080000 +ACFE:000000081F880088008E0088048804087FE8000000003EF80208020802080000 +ACFF:000000081F880088008E0088048804087FE8000000001F080108011401620000 +AD00:000000081F880088008E0088048804087FE8000008000800080008000FF80000 +AD01:000000081F880088008E0088048804087FE80000000010F8101010301ECC0000 +AD02:000000081F880088008E0088048804087FE800000808087F081C08220F9C0000 +AD03:000000081F880088008E0088048804087FE8000003F802000200020003F80000 +AD04:000000081F880088008E0088048804087FE8000007F8000807F8040007F80000 +AD05:000000081F880088008E0088048804087FE800003EF802083E0820083E080000 +AD06:000000081F880088008E0088048804087FE800003EF802883E8820883EF80000 +AD07:000000081F880088008E0088048804087FE800003E8802883EF820883EF80000 +AD08:000000081F880088008E0088048804087FE800001F0801081F0810141F620000 +AD09:000000081F880088008E0088048804087FE800003EF802803EF820803EF80000 +AD0A:000000081F880088008E0088048804087FE800003EFC02483E4820483EFC0000 +AD0B:000000081F880088008E0088048804087FE800001F08017F1F1C10221F1C0000 +AD0C:000000081F880088008E0088048804087FE8000003F802080208020803F80000 +AD0D:000000081F880088008E0088048804087FE800000208020803F8020803F80000 +AD0E:000000081F880088008E0088048804087FE80000110811081F0811141F620000 +AD0F:000000081F880088008E0088048804087FE80000001000100010006801840000 +AD10:000000081F880088008E0088048804087FE800000048004800A8011406620000 +AD11:000000081F880088008E0088048804087FE80000000003F00408040803F00000 +AD12:000000081F880088008E0088048804087FE8000003F80020002000D003080000 +AD13:000000081F880088008E0088048804087FE80000004003F8004000A003180000 +AD14:000000081F880088008E0088048804087FE8000003F8000803F8000800080000 +AD15:000000081F880088008E0088048804087FE8000003F8020003F8020003F80000 +AD16:000000081F880088008E0088048804087FE8000000000FF8022002200FF80000 +AD17:000000081F880088008E0088048804087FE8000000800FF803E0041003E00000 +AD18:00000000001200123FD200520052005E0452041204127FD20012001200120000 +AD19:000000281FA800A800B800A804A804287FA8000007F800080008000800080000 +AD1A:000000281FA800A800B800A804A804287FA8000000003EF80208020802080000 +AD1B:000000281FA800A800B800A804A804287FA8000000001F080108011401620000 +AD1C:000000281FA800A800B800A804A804287FA8000008000800080008000FF80000 +AD1D:000000281FA800A800B800A804A804287FA80000000010F8101010301ECC0000 +AD1E:000000281FA800A800B800A804A804287FA800000808087F081C08220F9C0000 +AD1F:000000281FA800A800B800A804A804287FA8000003F802000200020003F80000 +AD20:000000281FA800A800B800A804A804287FA8000007F8000807F8040007F80000 +AD21:000000281FA800A800B800A804A804287FA800003EF802083E0820083E080000 +AD22:000000281FA800A800B800A804A804287FA800003EF802883E8820883EF80000 +AD23:000000281FA800A800B800A804A804287FA800003E8802883EF820883EF80000 +AD24:000000281FA800A800B800A804A804287FA800001F0801081F0810141F620000 +AD25:000000281FA800A800B800A804A804287FA800003EF802803EF820803EF80000 +AD26:000000281FA800A800B800A804A804287FA800003EFC02483E4820483EFC0000 +AD27:000000281FA800A800B800A804A804287FA800001F08017F1F1C10221F1C0000 +AD28:000000281FA800A800B800A804A804287FA8000003F802080208020803F80000 +AD29:000000281FA800A800B800A804A804287FA800000208020803F8020803F80000 +AD2A:000000281FA800A800B800A804A804287FA80000110811081F0811141F620000 +AD2B:000000281FA800A800B800A804A804287FA80000001000100010006801840000 +AD2C:000000281FA800A800B800A804A804287FA800000048004800A8011406620000 +AD2D:000000281FA800A800B800A804A804287FA80000000003F00408040803F00000 +AD2E:000000281FA800A800B800A804A804287FA8000003F80020002000D003080000 +AD2F:000000281FA800A800B800A804A804287FA80000004003F8004000A003180000 +AD30:000000281FA800A800B800A804A804287FA8000003F8000803F8000800080000 +AD31:000000281FA800A800B800A804A804287FA8000003F8020003F8020003F80000 +AD32:000000281FA800A800B800A804A804287FA8000000000FF8022002200FF80000 +AD33:000000281FA800A800B800A804A804287FA8000000800FF803E0041003E00000 +AD34:00000000000400043FC40044004400440444040404047FF40004000400040000 +AD35:000000081F88008800880088048804087FE8000007F800080008000800080000 +AD36:000000081F88008800880088048804087FE8000000003EF80208020802080000 +AD37:000000081F88008800880088048804087FE8000000001F080108011401620000 +AD38:000000081F88008800880088048804087FE8000008000800080008000FF80000 +AD39:000000081F88008800880088048804087FE80000000010F8101010301ECC0000 +AD3A:000000081F88008800880088048804087FE800000808087F081C08220F9C0000 +AD3B:000000081F88008800880088048804087FE8000003F802000200020003F80000 +AD3C:000000081F88008800880088048804087FE8000007F8000807F8040007F80000 +AD3D:000000081F88008800880088048804087FE800003EF802083E0820083E080000 +AD3E:000000081F88008800880088048804087FE800003EF802883E8820883EF80000 +AD3F:000000081F88008800880088048804087FE800003E8802883EF820883EF80000 +AD40:000000081F88008800880088048804087FE800001F0801081F0810141F620000 +AD41:000000081F88008800880088048804087FE800003EF802803EF820803EF80000 +AD42:000000081F88008800880088048804087FE800003EFC02483E4820483EFC0000 +AD43:000000081F88008800880088048804087FE800001F08017F1F1C10221F1C0000 +AD44:000000081F88008800880088048804087FE8000003F802080208020803F80000 +AD45:000000081F88008800880088048804087FE800000208020803F8020803F80000 +AD46:000000081F88008800880088048804087FE80000110811081F0811141F620000 +AD47:000000081F88008800880088048804087FE80000001000100010006801840000 +AD48:000000081F88008800880088048804087FE800000048004800A8011406620000 +AD49:000000081F88008800880088048804087FE80000000003F00408040803F00000 +AD4A:000000081F88008800880088048804087FE8000003F80020002000D003080000 +AD4B:000000081F88008800880088048804087FE80000004003F8004000A003180000 +AD4C:000000081F88008800880088048804087FE8000003F8000803F8000800080000 +AD4D:000000081F88008800880088048804087FE8000003F8020003F8020003F80000 +AD4E:000000081F88008800880088048804087FE8000000000FF8022002200FF80000 +AD4F:000000081F88008800880088048804087FE8000000800FF803E0041003E00000 +AD50:00000000000000003FF0001000100010001008900880088008807FFC00000000 +AD51:000000001FF0001000100010049004807FFC00001FF000100010001000100000 +AD52:000000001FF0001000100010049004807FFC000000003EF80208020802080000 +AD53:000000001FF0001000100010049004807FFC000000001E100210022802C40000 +AD54:000000001FF0001000100010049004807FFC000000001000100010001FF00000 +AD55:000000001FF0001000100010049004807FFC0000000020F8201020303ECC0000 +AD56:000000001FF0001000100010049004807FFC0000202021FC207020883E700000 +AD57:000000001FF0001000100010049004807FFC00001FF01000100010001FF00000 +AD58:000000001FF0001000100010049004807FFC00001FF000101FF010001FF00000 +AD59:000000001FF0001000100010049004807FFC00003EF802083E0820083E080000 +AD5A:000000001FF0001000100010049004807FFC00003EF802883E8820883EF80000 +AD5B:000000001FF0001000100010049004807FFC00003E8802883EF820883EF80000 +AD5C:000000001FF0001000100010049004807FFC00003E1002103E1020283EC40000 +AD5D:000000001FF0001000100010049004807FFC00003EF802803EF820803EF80000 +AD5E:000000001FF0001000100010049004807FFC00003EFC02483E4820483EFC0000 +AD5F:000000001FF0001000100010049004807FFC00003E2003FC3E7020883E700000 +AD60:000000001FF0001000100010049004807FFC00001FF01010101010101FF00000 +AD61:000000001FF0001000100010049004807FFC0000101010101FF010101FF00000 +AD62:000000001FF0001000100010049004807FFC0000222022203E2022503E880000 +AD63:000000001FF0001000100010049004807FFC000000000100010002800C400000 +AD64:000000001FF0001000100010049004807FFC00000000024002400DA033100000 +AD65:000000001FF0001000100010049004807FFC0000000007C00820082007C00000 +AD66:000000001FF0001000100010049004807FFC0000000007E00080014006200000 +AD67:000000001FF0001000100010049004807FFC0000008007E00080014006200000 +AD68:000000001FF0001000100010049004807FFC00001FF000101FF0001000100000 +AD69:000000001FF0001000100010049004807FFC00001FF010001FF010001FF00000 +AD6A:000000001FF0001000100010049004807FFC000000001FF0044004401FF00000 +AD6B:000000001FF0001000100010049004807FFC000001001FF007C0082007C00000 +AD6C:0000000000003FE00020002000200020002000003FF801000100010001000000 +AD6D:000000001FF000100010001000007FFC010001001FF000100010001000100000 +AD6E:000000001FF000100010001000007FFC0100010000003EF80208020802080000 +AD6F:000000001FF000100010001000007FFC0100010000001E100210022802C40000 +AD70:000000001FF0001000100010000000007FFC010001001100100010001FF00000 +AD71:000000001FF000100010001000007FFC01000100000020F8201020303ECC0000 +AD72:000000001FF000100010001000007FFC01000100202021FC207020883E700000 +AD73:000000001FF000100010001000007FFC010001001FF01000100010001FF00000 +AD74:000000001FF000100010001000007FFC010001001FF000101FF010001FF00000 +AD75:000000001FF000100010001000007FFC010001003EF802083E0820083E080000 +AD76:000000001FF000100010001000007FFC010001003EF802883E8820883EF80000 +AD77:000000001FF000100010001000007FFC010001003E8802883EF820883EF80000 +AD78:000000001FF000100010001000007FFC010001003E1002103E1020283EC40000 +AD79:000000001FF000100010001000007FFC010001003EF802803EF820803EF80000 +AD7A:000000001FF000100010001000007FFC010001003EFC02483E4820483EFC0000 +AD7B:000000001FF000100010001000007FFC010001003E2003FC3E7020883E700000 +AD7C:000000001FF000100010001000007FFC010001001FF01010101010101FF00000 +AD7D:000000001FF000100010001000007FFC01000100101010101FF010101FF00000 +AD7E:000000001FF000100010001000007FFC01000100222022203E2022503E880000 +AD7F:000000001FF000100010001000007FFC0100010000000100010002800C400000 +AD80:000000001FF000100010001000007FFC010001000000024002400DA033100000 +AD81:000000001FF000100010001000007FFC01000100000007C00820082007C00000 +AD82:000000001FF000100010001000007FFC01000100000007E00080014006200000 +AD83:000000001FF000100010001000007FFC01000100008007E00080014006200000 +AD84:000000001FF000100010001000007FFC010001001FF000101FF0001000100000 +AD85:000000001FF000100010001000007FFC010001001FF010001FF010001FF00000 +AD86:000000001FF000100010001000007FFC0100010000001FF0044004401FF00000 +AD87:000000001FF000100010001000007FFC0100010001001FF007C0082007C00000 +AD88:00000008000800083FE8002800280028002800087FE8040804F8040804080000 +AD89:000800083F080108010801087FE8027802080000000007F80008000800080000 +AD8A:000800083F080108010801087FE802780208000000003EF80208020802080000 +AD8B:000800083F080108010801087FE802780208000000001F080108011401620000 +AD8C:000800083F0801080108010800087FE80278020802081000100010001FF80000 +AD8D:000800083F080108010801087FE8027802080000000020F8201020303ECC0000 +AD8E:000800083F080108010801087FE8027802080000202021FC207020883E700000 +AD8F:000800083F080108010801087FE802780208000003F802000200020003F80000 +AD90:000800083F080108010801087FE802780208000007F8000807F8040007F80000 +AD91:000800083F080108010801087FE80278020800003EF802083E0820083E080000 +AD92:000800083F080108010801087FE80278020800003EF802883E8820883EF80000 +AD93:000800083F080108010801087FE80278020800003E8802883EF820883EF80000 +AD94:000800083F080108010801087FE80278020800000F8800880F8808140FA20000 +AD95:000800083F080108010801087FE80278020800003EF802803EF820803EF80000 +AD96:000800083F080108010801087FE80278020800003EFC02483E4820483EFC0000 +AD97:000800083F080108010801087FE80278020800003E1002FE3E3820443E380000 +AD98:000800083F080108010801087FE802780208000003F802080208020803F80000 +AD99:000800083F080108010801087FE80278020800000208020803F8020803F80000 +AD9A:000800083F080108010801087FE8027802080000210821083F0821143F620000 +AD9B:000800083F080108010801087FE8027802080000001000100010006801840000 +AD9C:000800083F080108010801087FE80278020800000048004800A8011406620000 +AD9D:000800083F080108010801087FE8027802080000000003F00408040803F00000 +AD9E:000800083F080108010801087FE802780208000003F80020002000D003080000 +AD9F:000800083F080108010801087FE8027802080000004003F8004000A003180000 +ADA0:000800083F080108010801087FE802780208000003F8000803F8000800080000 +ADA1:000800083F080108010801087FE802780208000003F8020003F8020003F80000 +ADA2:000800083F080108010801087FE802780208000000000FF8022002200FF80000 +ADA3:000800083F080108010801087FE802780208000000800FF803E0041003E00000 +ADA4:0000000A000A000A3FEA002A002A002A002A000A7FEA040A047A040A040A0000 +ADA5:002800283F280128012801287FA805E804280000000007F80008000800080000 +ADA6:002800283F280128012801287FA805E80428000000003EF80208020802080000 +ADA7:002800283F280128012801287FA805E80428000000001F080108011401620000 +ADA8:002800283F2801280128012800287FA8042805E804281428100010001FF80000 +ADA9:002800283F280128012801287FA805E804280000000020F8201020303ECC0000 +ADAA:002800283F280128012801287FA805E804280000202021FC207020883E700000 +ADAB:002800283F280128012801287FA805E80428000003F802000200020003F80000 +ADAC:002800283F280128012801287FA805E80428000007F8000807F8040007F80000 +ADAD:002800283F280128012801287FA805E8042800003EF802083E0820083E080000 +ADAE:002800283F280128012801287FA805E8042800003EF802883E8820883EF80000 +ADAF:002800283F280128012801287FA805E8042800003E8802883EF820883EF80000 +ADB0:002800283F280128012801287FA805E8042800000F8800880F8808140FA20000 +ADB1:002800283F280128012801287FA805E8042800003EF802803EF820803EF80000 +ADB2:002800283F280128012801287FA805E8042800003EFC02483E4820483EFC0000 +ADB3:002800283F280128012801287FA805E8042800003E1002FE3E3820443E380000 +ADB4:002800283F280128012801287FA805E80428000003F802080208020803F80000 +ADB5:002800283F280128012801287FA805E8042800000208020803F8020803F80000 +ADB6:002800283F280128012801287FA805E804280000210821083F0821143F620000 +ADB7:002800283F280128012801287FA805E804280000001000100010006801840000 +ADB8:002800283F280128012801287FA805E8042800000048004800A8011406620000 +ADB9:002800283F280128012801287FA805E804280000000003F00408040803F00000 +ADBA:002800283F280128012801287FA805E80428000003F80020002000D003080000 +ADBB:002800283F280128012801287FA805E804280000004003F8004000A003180000 +ADBC:002800283F280128012801287FA805E80428000003F8000803F8000800080000 +ADBD:002800283F280128012801287FA805E80428000003F8020003F8020003F80000 +ADBE:002800283F280128012801287FA805E80428000000000FF8022002200FF80000 +ADBF:002800283F280128012801287FA805E80428000000800FF803E0041003E00000 +ADC0:00000008000800083FE8002800280028002800087FE804080408040804080000 +ADC1:000800083F080108010801087FE8020802000000000007F80008000800080000 +ADC2:000800083F080108010801087FE802080200000000003EF80208020802080000 +ADC3:000800083F080108010801087FE802080200000000001F080108011401620000 +ADC4:000800083F0801080108010800087FE80208020802081008100010001FF80000 +ADC5:000800083F080108010801087FE8020802000000000020F8201020303ECC0000 +ADC6:000800083F080108010801087FE8020802000000202021FC207020883E700000 +ADC7:000800083F080108010801087FE802080200000003F802000200020003F80000 +ADC8:000800083F080108010801087FE802080200000007F8000807F8040007F80000 +ADC9:000800083F080108010801087FE80208020000003EF802083E0820083E080000 +ADCA:000800083F080108010801087FE80208020000003EF802883E8820883EF80000 +ADCB:000800083F080108010801087FE80208020000003E8802883EF820883EF80000 +ADCC:000800083F080108010801087FE80208020000000F8800880F8808140FA20000 +ADCD:000800083F080108010801087FE80208020000003EF802803EF820803EF80000 +ADCE:000800083F080108010801087FE80208020000003EFC02483E4820483EFC0000 +ADCF:000800083F080108010801087FE80208020000003E1002FE3E3820443E380000 +ADD0:000800083F080108010801087FE802080200000003F802080208020803F80000 +ADD1:000800083F080108010801087FE80208020000000208020803F8020803F80000 +ADD2:000800083F080108010801087FE8020802000000210821083F0821143F620000 +ADD3:000800083F080108010801087FE8020802000000001000100010006801840000 +ADD4:000800083F080108010801087FE80208020000000048004800A8011406620000 +ADD5:000800083F080108010801087FE8020802000000000003F00408040803F00000 +ADD6:000800083F080108010801087FE802080200000003F80020002000D003080000 +ADD7:000800083F080108010801087FE8020802000000004003F8004000A003180000 +ADD8:000800083F080108010801087FE802080200000003F8000803F8000800080000 +ADD9:000800083F080108010801087FE802080200000003F8020003F8020003F80000 +ADDA:000800083F080108010801087FE802080200000000000FF8022002200FF80000 +ADDB:000800083F080108010801087FE802080200000000800FF803E0041003E00000 +ADDC:0000000000003FE00020002000200020002000007FFC04400440044004400000 +ADDD:000000001FF000100010001000007FFC044004401FF000100010001000100000 +ADDE:000000001FF000100010001000007FFC0440044000003EF80208020802080000 +ADDF:000000001FF000100010001000007FFC0440044000001E100210022802C40000 +ADE0:000000001FF0001000100010000000007FFC044004401440100010001FF00000 +ADE1:000000001FF000100010001000007FFC04400440000020F8201020303ECC0000 +ADE2:000000001FF000100010001000007FFC04400440202021FC207020883E700000 +ADE3:000000001FF000100010001000007FFC044004401FF01000100010001FF00000 +ADE4:000000001FF000100010001000007FFC044004401FF000101FF010001FF00000 +ADE5:000000001FF000100010001000007FFC044004403EF802083E0820083E080000 +ADE6:000000001FF000100010001000007FFC044004403EF802883E8820883EF80000 +ADE7:000000001FF000100010001000007FFC044004403E8802883EF820883EF80000 +ADE8:000000001FF000100010001000007FFC044004403E1002103E1020283EC40000 +ADE9:000000001FF000100010001000007FFC044004403EF802803EF820803EF80000 +ADEA:000000001FF000100010001000007FFC044004403EFC02483E4820483EFC0000 +ADEB:000000001FF000100010001000007FFC044004403E2003FC3E7020883E700000 +ADEC:000000001FF000100010001000007FFC044004401FF01010101010101FF00000 +ADED:000000001FF000100010001000007FFC04400440101010101FF010101FF00000 +ADEE:000000001FF000100010001000007FFC04400440222022203E2022503E880000 +ADEF:000000001FF000100010001000007FFC0440044000000100010002800C400000 +ADF0:000000001FF000100010001000007FFC044004400000024002400DA033100000 +ADF1:000000001FF000100010001000007FFC04400440000007C00820082007C00000 +ADF2:000000001FF000100010001000007FFC04400440000007E00080014006200000 +ADF3:000000001FF000100010001000007FFC04400440008007E00080014006200000 +ADF4:000000001FF000100010001000007FFC044004401FF000101FF0001000100000 +ADF5:000000001FF000100010001000007FFC044004401FF010001FF010001FF00000 +ADF6:000000001FF000100010001000007FFC0440044000001FF0044004401FF00000 +ADF7:000000001FF000100010001000007FFC0440044001001FF007C0082007C00000 +ADF8:00000000000000003FF00010001000100010001000007FFC0000000000000000 +ADF9:000000001FF0001000100010001000007FFC00001FF000100010001000100000 +ADFA:000000001FF0001000100010001000007FFC000000003EF80208020802080000 +ADFB:000000001FF0001000100010001000007FFC000000001E100210022802C40000 +ADFC:000000001FF0001000100010001000007FFC000000001000100010001FF00000 +ADFD:000000001FF0001000100010001000007FFC0000000020F8201020303ECC0000 +ADFE:000000001FF0001000100010001000007FFC0000202021FC207020883E700000 +ADFF:000000001FF0001000100010001000007FFC00001FF01000100010001FF00000 +AE00:000000001FF0001000100010001000007FFC00001FF000101FF010001FF00000 +AE01:000000001FF0001000100010001000007FFC00003EF802083E0820083E080000 +AE02:000000001FF0001000100010001000007FFC00003EF802883E8820883EF80000 +AE03:000000001FF0001000100010001000007FFC00003E8802883EF820883EF80000 +AE04:000000001FF0001000100010001000007FFC00003E1002103E1020283EC40000 +AE05:000000001FF0001000100010001000007FFC00003EF802803EF820803EF80000 +AE06:000000001FF0001000100010001000007FFC00003EFC02483E4820483EFC0000 +AE07:000000001FF0001000100010001000007FFC00003E2003FC3E7020883E700000 +AE08:000000001FF0001000100010001000007FFC00001FF01010101010101FF00000 +AE09:000000001FF0001000100010001000007FFC0000101010101FF010101FF00000 +AE0A:000000001FF0001000100010001000007FFC0000222022203E2022503E880000 +AE0B:000000001FF0001000100010001000007FFC000000000100010002800C400000 +AE0C:000000001FF0001000100010001000007FFC00000000024002400DA033100000 +AE0D:000000001FF0001000100010001000007FFC0000000007C00820082007C00000 +AE0E:000000001FF0001000100010001000007FFC0000000007E00080014006200000 +AE0F:000000001FF0001000100010001000007FFC0000008007E00080014006200000 +AE10:000000001FF0001000100010001000007FFC00001FF000101FF0001000100000 +AE11:000000001FF0001000100010001000007FFC00001FF010001FF010001FF00000 +AE12:000000001FF0001000100010001000007FFC000000001FF0044004401FF00000 +AE13:000000001FF0001000100010001000007FFC000001001FF007C0082007C00000 +AE14:00000000000800083FC80048004800480048000800087FE80008000800080000 +AE15:000000081F88008800880088008800087FE8000007F800080008000800080000 +AE16:000000081F88008800880088008800087FE8000000003EF80208020802080000 +AE17:000000081F88008800880088008800087FE8000000001F080108011401620000 +AE18:000000081F88008800880088008800087FE8000008000800080008000FF80000 +AE19:000000081F88008800880088008800087FE80000000010F8101010301ECC0000 +AE1A:000000081F88008800880088008800087FE800000808087F081C08220F9C0000 +AE1B:000000081F88008800880088008800087FE8000003F802000200020003F80000 +AE1C:000000081F88008800880088008800087FE8000007F8000807F8040007F80000 +AE1D:000000081F88008800880088008800087FE800003EF802083E0820083E080000 +AE1E:000000081F88008800880088008800087FE800003EF802883E8820883EF80000 +AE1F:000000081F88008800880088008800087FE800003E8802883EF820883EF80000 +AE20:000000081F88008800880088008800087FE800001F0801081F0810141F620000 +AE21:000000081F88008800880088008800087FE800003EF802803EF820803EF80000 +AE22:000000081F88008800880088008800087FE800003EFC02483E4820483EFC0000 +AE23:000000081F88008800880088008800087FE800001F08017F1F1C10221F1C0000 +AE24:000000081F88008800880088008800087FE8000003F802080208020803F80000 +AE25:000000081F88008800880088008800087FE800000208020803F8020803F80000 +AE26:000000081F88008800880088008800087FE80000110811081F0811141F620000 +AE27:000000081F88008800880088008800087FE80000001000100010006801840000 +AE28:000000081F88008800880088008800087FE800000048004800A8011406620000 +AE29:000000081F88008800880088008800087FE80000000003F00408040803F00000 +AE2A:000000081F88008800880088008800087FE8000003F80020002000D003080000 +AE2B:000000081F88008800880088008800087FE80000004003F8004000A003180000 +AE2C:000000081F88008800880088008800087FE8000003F8000803F8000800080000 +AE2D:000000081F88008800880088008800087FE8000003F8020003F8020003F80000 +AE2E:000000081F88008800880088008800087FE8000000000FF8022002200FF80000 +AE2F:000000081F88008800880088008800087FE8000000800FF803E0041003E00000 +AE30:00000000000800081F8800880088008801080108020804081808000800080000 +AE31:000000083E080208020804080808300800080000000007F80008000800080000 +AE32:000000083E08020802080408080830080008000000003EF80208020802080000 +AE33:000000083E08020802080408080830080008000000001F080108011401620000 +AE34:000000083E08020802080408080830080008000800001000100010001FF80000 +AE35:000000083E080208020804080808300800080000000020F8201020303ECC0000 +AE36:000000083E080208020804080808300800080000202021FC207020883E700000 +AE37:000000083E08020802080408080830080008000003F802000200020003F80000 +AE38:000000083E08020802080408080830080008000007F8000807F8040007F80000 +AE39:000000083E0802080208040808083008000800003EF802083E0820083E080000 +AE3A:000000083E0802080208040808083008000800003EF802883E8820883EF80000 +AE3B:000000083E0802080208040808083008000800003E8802883EF820883EF80000 +AE3C:000000083E0802080208040808083008000800000F8800880F8808140FA20000 +AE3D:000000083E0802080208040808083008000800003EF802803EF820803EF80000 +AE3E:000000083E0802080208040808083008000800003EFC02483E4820483EFC0000 +AE3F:000000083E0802080208040808083008000800003E1002FE3E3820443E380000 +AE40:000000083E08020802080408080830080008000003F802080208020803F80000 +AE41:000000083E0802080208040808083008000800000208020803F8020803F80000 +AE42:000000083E080208020804080808300800080000210821083F0821143F620000 +AE43:000000083E080208020804080808300800080000001000100010006801840000 +AE44:000000083E0802080208040808083008000800000048004800A8011406620000 +AE45:000000083E080208020804080808300800080000000003F00408040803F00000 +AE46:000000083E08020802080408080830080008000003F80020002000D003080000 +AE47:000000083E080208020804080808300800080000004003F8004000A003180000 +AE48:000000083E08020802080408080830080008000003F8000803F8000800080000 +AE49:000000083E08020802080408080830080008000003F8020003F8020003F80000 +AE4A:000000083E08020802080408080830080008000000000FF8022002200FF80000 +AE4B:000000083E08020802080408080830080008000000800FF803E0041003E00000 +AE4C:00000000001000107B9008900890089E11101110221044100810001000100000 +AE4D:00000008F78810881088108E2108C6080008000007F800080008000800080000 +AE4E:00000008F78810881088108E2108C6080008000000003EF80208020802080000 +AE4F:00000008F78810881088108E2108C6080008000000001F080108011401620000 +AE50:00000008F78810881088108E2108C6080008000808000800080008000FF80000 +AE51:00000008F78810881088108E2108C60800080000000010F8101010301ECC0000 +AE52:00000008F78810881088108E2108C608000800000808087F081C08220F9C0000 +AE53:00000008F78810881088108E2108C6080008000003F802000200020003F80000 +AE54:00000008F78810881088108E2108C6080008000007F8000807F8040007F80000 +AE55:00000008F78810881088108E2108C608000800003EF802083E0820083E080000 +AE56:00000008F78810881088108E2108C608000800003EF802883E8820883EF80000 +AE57:00000008F78810881088108E2108C608000800003E8802883EF820883EF80000 +AE58:00000008F78810881088108E2108C608000800001F0801081F0810141F620000 +AE59:00000008F78810881088108E2108C608000800003EF802803EF820803EF80000 +AE5A:00000008F78810881088108E2108C608000800003EFC02483E4820483EFC0000 +AE5B:00000008F78810881088108E2108C608000800001F08017F1F1C10221F1C0000 +AE5C:00000008F78810881088108E2108C6080008000003F802080208020803F80000 +AE5D:00000008F78810881088108E2108C608000800000208020803F8020803F80000 +AE5E:00000008F78810881088108E2108C60800080000110811081F0811141F620000 +AE5F:00000008F78810881088108E2108C60800080000001000100010006801840000 +AE60:00000008F78810881088108E2108C608000800000048004800A8011406620000 +AE61:00000008F78810881088108E2108C60800080000000003F00408040803F00000 +AE62:00000008F78810881088108E2108C6080008000003F80020002000D003080000 +AE63:00000008F78810881088108E2108C60800080000004003F8004000A003180000 +AE64:00000008F78810881088108E2108C6080008000003F8000803F8000800080000 +AE65:00000008F78810881088108E2108C6080008000003F8020003F8020003F80000 +AE66:00000008F78810881088108E2108C6080008000000000FF8022002200FF80000 +AE67:00000008F78810881088108E2108C6080008000000800FF803E0041003E00000 +AE68:00000000001200127B9208920892089E11121112221244120812001200120000 +AE69:00000028F7A810A810A810B82128C6280028000007F800080008000800080000 +AE6A:00000028F7A810A810A810B82128C6280028000000003EF80208020802080000 +AE6B:00000028F7A810A810A810B82128C6280028000000003E100210022802C40000 +AE6C:00000028F7A810A810A810B82128C6280028002808000800080008000FF80000 +AE6D:00000028F7A810A810A810B82128C62800280000000020F8201020303ECC0000 +AE6E:00000028F7A810A810A810B82128C62800280000202021FC207020883E700000 +AE6F:00000028F7A810A810A810B82128C6280028000003F802000200020003F80000 +AE70:00000028F7A810A810A810B82128C6280028000007F8000807F8040007F80000 +AE71:00000028F7A810A810A810B82128C628002800003EF802083E0820083E080000 +AE72:00000028F7A810A810A810B82128C628002800003EF802883E8820883EF80000 +AE73:00000028F7A810A810A810B82128C628002800003E8802883EF820883EF80000 +AE74:00000028F7A810A810A810B82128C628002800001F0801081F0810141F620000 +AE75:00000028F7A810A810A810B82128C628002800003EF802803EF820803EF80000 +AE76:00000028F7A810A810A810B82128C628002800003EFC02483E4820483EFC0000 +AE77:00000028F7A810A810A810B82128C628002800003E1002FE3E3820443E380000 +AE78:00000028F7A810A810A810B82128C6280028000003F802080208020803F80000 +AE79:00000028F7A810A810A810B82128C628002800000208020803F8020803F80000 +AE7A:00000028F7A810A810A810B82128C62800280000110811081F0811141F620000 +AE7B:00000028F7A810A810A810B82128C62800280000000800080008003400C20000 +AE7C:00000028F7A810A810A810B82128C628002800000048004800A8011406620000 +AE7D:00000028F7A810A810A810B82128C62800280000000001F00208020801F00000 +AE7E:00000028F7A810A810A810B82128C6280028000003F80020002000D003080000 +AE7F:00000028F7A810A810A810B82128C62800280000004003F8004000A003180000 +AE80:00000028F7A810A810A810B82128C6280028000003F8000803F8000800080000 +AE81:00000028F7A810A810A810B82128C6280028000003F8020003F8020003F80000 +AE82:00000028F7A810A810A810B82128C6280028000000000FF8022002200FF80000 +AE83:00000028F7A810A810A810B82128C6280028000000800FF803E0041003E00000 +AE84:00000000001000107B900890089E08901110111E221044100810001000100000 +AE85:00000008F7881088108E1088210EC6080008000007F800080008000800080000 +AE86:00000008F7881088108E1088210EC6080008000000003EF80208020802080000 +AE87:00000008F7881088108E1088210EC6080008000000001F080108011401620000 +AE88:00000008F7881088108E1088210EC6080008000008000800080008000FF80000 +AE89:00000008F7881088108E1088210EC60800080000000010F8101010301ECC0000 +AE8A:00000008F7881088108E1088210EC608000800000808087F081C08220F9C0000 +AE8B:00000008F7881088108E1088210EC6080008000003F802000200020003F80000 +AE8C:00000008F7881088108E1088210EC6080008000007F8000807F8040007F80000 +AE8D:00000008F7881088108E1088210EC608000800003EF802083E0820083E080000 +AE8E:00000008F7881088108E1088210EC608000800003EF802883E8820883EF80000 +AE8F:00000008F7881088108E1088210EC608000800003E8802883EF820883EF80000 +AE90:00000008F7881088108E1088210EC608000800001F0801081F0810141F620000 +AE91:00000008F7881088108E1088210EC608000800003EF802803EF820803EF80000 +AE92:00000008F7881088108E1088210EC608000800003EFC02483E4820483EFC0000 +AE93:00000008F7881088108E1088210EC608000800001F08017F1F1C10221F1C0000 +AE94:00000008F7881088108E1088210EC6080008000003F802080208020803F80000 +AE95:00000008F7881088108E1088210EC608000800000208020803F8020803F80000 +AE96:00000008F7881088108E1088210EC60800080000110811081F0811141F620000 +AE97:00000008F7881088108E1088210EC60800080000001000100010006801840000 +AE98:00000008F7881088108E1088210EC608000800000048004800A8011406620000 +AE99:00000008F7881088108E1088210EC60800080000000003F00408040803F00000 +AE9A:00000008F7881088108E1088210EC6080008000003F80020002000D003080000 +AE9B:00000008F7881088108E1088210EC60800080000004003F8004000A003180000 +AE9C:00000008F7881088108E1088210EC6080008000003F8000803F8000800080000 +AE9D:00000008F7881088108E1088210EC6080008000003F8020003F8020003F80000 +AE9E:00000008F7881088108E1088210EC6080008000000000FF8022002200FF80000 +AE9F:00000008F7881088108E1088210EC6080008000000800FF803E0041003E00000 +AEA0:00000000001200127B920892089E08921112111E221244120812001200120000 +AEA1:00000028F7A810A810B810A82138C6280028000007F800080008000800080000 +AEA2:00000028F7A810A810B810A82138C6280028000000003EF80208020802080000 +AEA3:00000028F7A810A810B810A82138C6280028000000003E100210022802C40000 +AEA4:00000028F7A810A810B810A82138C6280028002808000800080008000FF80000 +AEA5:00000028F7A810A810B810A82138C62800280000000020F8201020303ECC0000 +AEA6:00000028F7A810A810B810A82138C62800280000202021FC207020883E700000 +AEA7:00000028F7A810A810B810A82138C6280028000003F802000200020003F80000 +AEA8:00000028F7A810A810B810A82138C6280028000007F8000807F8040007F80000 +AEA9:00000028F7A810A810B810A82138C628002800003EF802083E0820083E080000 +AEAA:00000028F7A810A810B810A82138C628002800003EF802883E8820883EF80000 +AEAB:00000028F7A810A810B810A82138C628002800003E8802883EF820883EF80000 +AEAC:00000028F7A810A810B810A82138C628002800001F0801081F0810141F620000 +AEAD:00000028F7A810A810B810A82138C628002800003EF802803EF820803EF80000 +AEAE:00000028F7A810A810B810A82138C628002800003EFC02483E4820483EFC0000 +AEAF:00000028F7A810A810B810A82138C628002800003E1002FE3E3820443E380000 +AEB0:00000028F7A810A810B810A82138C6280028000003F802080208020803F80000 +AEB1:00000028F7A810A810B810A82138C628002800000208020803F8020803F80000 +AEB2:00000028F7A810A810B810A82138C62800280000110811081F0811141F620000 +AEB3:00000028F7A810A810B810A82138C62800280000000800080008003400C20000 +AEB4:00000028F7A810A810B810A82138C628002800000048004800A8011406620000 +AEB5:00000028F7A810A810B810A82138C62800280000000001F00208020801F00000 +AEB6:00000028F7A810A810B810A82138C6280028000003F80020002000D003080000 +AEB7:00000028F7A810A810B810A82138C62800280000004003F8004000A003180000 +AEB8:00000028F7A810A810B810A82138C6280028000003F8000803F8000800080000 +AEB9:00000028F7A810A810B810A82138C6280028000003F8020003F8020003F80000 +AEBA:00000028F7A810A810B810A82138C6280028000000000FF8022002200FF80000 +AEBB:00000028F7A810A810B810A82138C6280028000000800FF803E0041003E00000 +AEBC:00000000000200027B8208820882089E11021102220244020802000200020000 +AEBD:00000008F7881088108810B82108C60800080000000007F80008000800080000 +AEBE:00000008F7881088108810B82108C6080008000000003EF80208020802080000 +AEBF:00000008F7881088108810B82108C6080008000000001F080108011401620000 +AEC0:00000008F7881088108810B82108C6080008000000001000100010001FF80000 +AEC1:00000008F7881088108810B82108C60800080000000020F8201020303ECC0000 +AEC2:00000008F7881088108810B82108C60800080000202021FC207020883E700000 +AEC3:00000008F7881088108810B82108C6080008000003F802000200020003F80000 +AEC4:00000008F7881088108810B82108C6080008000007F8000807F8040007F80000 +AEC5:00000008F7881088108810B82108C608000800003EF802083E0820083E080000 +AEC6:00000008F7881088108810B82108C608000800003EF802883E8820883EF80000 +AEC7:00000008F7881088108810B82108C608000800003E8802883EF820883EF80000 +AEC8:00000008F7881088108810B82108C608000800000F8800880F8808140FA20000 +AEC9:00000008F7881088108810B82108C608000800003EF802803EF820803EF80000 +AECA:00000008F7881088108810B82108C608000800003EFC02483E4820483EFC0000 +AECB:00000008F7881088108810B82108C608000800003E1002FE3E3820443E380000 +AECC:00000008F7881088108810B82108C6080008000003F802080208020803F80000 +AECD:00000008F7881088108810B82108C608000800000208020803F8020803F80000 +AECE:00000008F7881088108810B82108C60800080000210821083F0821143F620000 +AECF:00000008F7881088108810B82108C60800080000001000100010006801840000 +AED0:00000008F7881088108810B82108C608000800000048004800A8011406620000 +AED1:00000008F7881088108810B82108C60800080000000003F00408040803F00000 +AED2:00000008F7881088108810B82108C6080008000003F80020002000D003080000 +AED3:00000008F7881088108810B82108C60800080000004003F8004000A003180000 +AED4:00000008F7881088108810B82108C6080008000003F8000803F8000800080000 +AED5:00000008F7881088108810B82108C6080008000003F8020003F8020003F80000 +AED6:00000008F7881088108810B82108C6080008000000000FF8022002200FF80000 +AED7:00000008F7881088108810B82108C6080008000000800FF803E0041003E00000 +AED8:00000000000A000A7B8A088A088A08BA110A110A220A440A080A000A000A0000 +AED9:00000028F7A810A810A810E82128C6280028000007F800080008000800080000 +AEDA:00000028F7A810A810A810E82128C6280028000000003EF80208020802080000 +AEDB:00000028F7A810A810A810E82128C6280028000000003E100210022802C40000 +AEDC:00000028F7A810A810A810E82128C6280028000008000800080008000FF80000 +AEDD:00000028F7A810A810A810E82128C62800280000000020F8201020303ECC0000 +AEDE:00000028F7A810A810A810E82128C62800280000202021FC207020883E700000 +AEDF:00000028F7A810A810A810E82128C6280028000003F802000200020003F80000 +AEE0:00000028F7A810A810A810E82128C6280028000007F8000807F8040007F80000 +AEE1:00000028F7A810A810A810E82128C628002800003EF802083E0820083E080000 +AEE2:00000028F7A810A810A810E82128C628002800003EF802883E8820883EF80000 +AEE3:00000028F7A810A810A810E82128C628002800003E8802883EF820883EF80000 +AEE4:00000028F7A810A810A810E82128C628002800001F0801081F0810141F620000 +AEE5:00000028F7A810A810A810E82128C628002800003EF802803EF820803EF80000 +AEE6:00000028F7A810A810A810E82128C628002800003EFC02483E4820483EFC0000 +AEE7:00000028F7A810A810A810E82128C628002800003E1002FE3E3820443E380000 +AEE8:00000028F7A810A810A810E82128C6280028000003F802080208020803F80000 +AEE9:00000028F7A810A810A810E82128C628002800000208020803F8020803F80000 +AEEA:00000028F7A810A810A810E82128C62800280000110811081F0811141F620000 +AEEB:00000028F7A810A810A810E82128C62800280000000800080008003400C20000 +AEEC:00000028F7A810A810A810E82128C628002800000048004800A8011406620000 +AEED:00000028F7A810A810A810E82128C62800280000000001F00208020801F00000 +AEEE:00000028F7A810A810A810E82128C6280028000003F80020002000D003080000 +AEEF:00000028F7A810A810A810E82128C62800280000004003F8004000A003180000 +AEF0:00000028F7A810A810A810E82128C6280028000003F8000803F8000800080000 +AEF1:00000028F7A810A810A810E82128C6280028000003F8020003F8020003F80000 +AEF2:00000028F7A810A810A810E82128C6280028000000000FF8022002200FF80000 +AEF3:00000028F7A810A810A810E82128C6280028000000800FF803E0041003E00000 +AEF4:00000000000200027B820882089E08821102111E220244020802000200020000 +AEF5:00000008F788108810B810882138C60800080000000007F80008000800080000 +AEF6:00000008F788108810B810882138C6080008000000003EF80208020802080000 +AEF7:00000008F788108810B810882138C6080008000000001F080108011401620000 +AEF8:00000008F788108810B810882138C6080008000800001000100010001FF80000 +AEF9:00000008F788108810B810882138C60800080000000020F8201020303ECC0000 +AEFA:00000008F788108810B810882138C60800080000202021FC207020883E700000 +AEFB:00000008F788108810B810882138C6080008000003F802000200020003F80000 +AEFC:00000008F788108810B810882138C6080008000007F8000807F8040007F80000 +AEFD:00000008F788108810B810882138C608000800003EF802083E0820083E080000 +AEFE:00000008F788108810B810882138C608000800003EF802883E8820883EF80000 +AEFF:00000008F788108810B810882138C608000800003E8802883EF820883EF80000 +AF00:00000008F788108810B810882138C608000800000F8800880F8808140FA20000 +AF01:00000008F788108810B810882138C608000800003EF802803EF820803EF80000 +AF02:00000008F788108810B810882138C608000800003EFC02483E4820483EFC0000 +AF03:00000008F788108810B810882138C608000800003E1002FE3E3820443E380000 +AF04:00000008F788108810B810882138C6080008000003F802080208020803F80000 +AF05:00000008F788108810B810882138C608000800000208020803F8020803F80000 +AF06:00000008F788108810B810882138C60800080000210821083F0821143F620000 +AF07:00000008F788108810B810882138C60800080000001000100010006801840000 +AF08:00000008F788108810B810882138C608000800000048004800A8011406620000 +AF09:00000008F788108810B810882138C60800080000000003F00408040803F00000 +AF0A:00000008F788108810B810882138C6080008000003F80020002000D003080000 +AF0B:00000008F788108810B810882138C60800080000004003F8004000A003180000 +AF0C:00000008F788108810B810882138C6080008000003F8000803F8000800080000 +AF0D:00000008F788108810B810882138C6080008000003F8020003F8020003F80000 +AF0E:00000008F788108810B810882138C6080008000000000FF8022002200FF80000 +AF0F:00000008F788108810B810882138C6080008000000800FF803E0041003E00000 +AF10:00000000000A000A7B8A088A08BA088A110A113A220A440A080A000A000A0000 +AF11:00000028F7A810A810E810A821E8C6280028000007F800080008000800080000 +AF12:00000028F7A810A810E810A821E8C6280028000000003EF80208020802080000 +AF13:00000028F7A810A810E810A821E8C6280028000000003E100210022802C40000 +AF14:00000028F7A810A810E810A821E8C6280028002808000800080008000FF80000 +AF15:00000028F7A810A810E810A821E8C62800280000000020F8201020303ECC0000 +AF16:00000028F7A810A810E810A821E8C62800280000202021FC207020883E700000 +AF17:00000028F7A810A810E810A821E8C6280028000003F802000200020003F80000 +AF18:00000028F7A810A810E810A821E8C6280028000007F8000807F8040007F80000 +AF19:00000028F7A810A810E810A821E8C628002800003EF802083E0820083E080000 +AF1A:00000028F7A810A810E810A821E8C628002800003EF802883E8820883EF80000 +AF1B:00000028F7A810A810E810A821E8C628002800003E8802883EF820883EF80000 +AF1C:00000028F7A810A810E810A821E8C628002800001F0801081F0810141F620000 +AF1D:00000028F7A810A810E810A821E8C628002800003EF802803EF820803EF80000 +AF1E:00000028F7A810A810E810A821E8C628002800003EFC02483E4820483EFC0000 +AF1F:00000028F7A810A810E810A821E8C628002800003E1002FE3E3820443E380000 +AF20:00000028F7A810A810E810A821E8C6280028000003F802080208020803F80000 +AF21:00000028F7A810A810E810A821E8C628002800000208020803F8020803F80000 +AF22:00000028F7A810A810E810A821E8C62800280000110811081F0811141F620000 +AF23:00000028F7A810A810E810A821E8C62800280000000800080008003400C20000 +AF24:00000028F7A810A810E810A821E8C628002800000048004800A8011406620000 +AF25:00000028F7A810A810E810A821E8C62800280000000001F00208020801F00000 +AF26:00000028F7A810A810E810A821E8C6280028000003F80020002000D003080000 +AF27:00000028F7A810A810E810A821E8C62800280000004003F8004000A003180000 +AF28:00000028F7A810A810E810A821E8C6280028000003F8000803F8000800080000 +AF29:00000028F7A810A810E810A821E8C6280028000003F8020003F8020003F80000 +AF2A:00000028F7A810A810E810A821E8C6280028000000000FF8022002200FF80000 +AF2B:00000028F7A810A810E810A821E8C6280028000000800FF803E0041003E00000 +AF2C:00000000000000003EF8020802080208020800000100010001007FFC00000000 +AF2D:000000003EF8020802080208010001007FFC00001FF000100010001000100000 +AF2E:000000003EF8020802080208010001007FFC000000003EF80208020802080000 +AF2F:000000003EF8020802080208010001007FFC000000001E100210022802C40000 +AF30:000000003EF8020802080208010001007FFC000000001000100010001FF00000 +AF31:000000003EF8020802080208010001007FFC0000000020F8201020303ECC0000 +AF32:000000003EF8020802080208010001007FFC0000202021FC207020883E700000 +AF33:000000003EF8020802080208010001007FFC00001FF01000100010001FF00000 +AF34:000000003EF8020802080208010001007FFC00001FF000101FF010001FF00000 +AF35:000000003EF8020802080208010001007FFC00003EF802083E0820083E080000 +AF36:000000003EF8020802080208010001007FFC00003EF802883E8820883EF80000 +AF37:000000003EF8020802080208010001007FFC00003E8802883EF820883EF80000 +AF38:000000003EF8020802080208010001007FFC00003E1002103E1020283EC40000 +AF39:000000003EF8020802080208010001007FFC00003EF802803EF820803EF80000 +AF3A:000000003EF8020802080208010001007FFC00003EFC02483E4820483EFC0000 +AF3B:000000003EF8020802080208010001007FFC00003E2003FC3E7020883E700000 +AF3C:000000003EF8020802080208010001007FFC00001FF01010101010101FF00000 +AF3D:000000003EF8020802080208010001007FFC0000101010101FF010101FF00000 +AF3E:000000003EF8020802080208010001007FFC0000222022203E2022503E880000 +AF3F:000000003EF8020802080208010001007FFC000000000100010002800C400000 +AF40:000000003EF8020802080208010001007FFC00000000024002400DA033100000 +AF41:000000003EF8020802080208010001007FFC0000000007C00820082007C00000 +AF42:000000003EF8020802080208010001007FFC0000000007E00080014006200000 +AF43:000000003EF8020802080208010001007FFC0000008007E00080014006200000 +AF44:000000003EF8020802080208010001007FFC00001FF000101FF0001000100000 +AF45:000000003EF8020802080208010001007FFC00001FF010001FF010001FF00000 +AF46:000000003EF8020802080208010001007FFC000000001FF0044004401FF00000 +AF47:000000003EF8020802080208010001007FFC000001001FF007C0082007C00000 +AF48:00000010001000107BD008500850085E08500010041004107FD0001000100000 +AF49:00000008F7881088108E1088148804087FE8000007F800080008000800080000 +AF4A:00000008F7881088108E1088148804087FE8000000003EF80208020802080000 +AF4B:00000008F7881088108E1088148804087FE8000000001F080108011401620000 +AF4C:00000008F7881088108E1088148804087FE8000008000800080008000FF80000 +AF4D:00000008F7881088108E1088148804087FE80000000010F8101010301ECC0000 +AF4E:00000008F7881088108E1088148804087FE800000808087F081C08220F9C0000 +AF4F:00000008F7881088108E1088148804087FE8000003F802000200020003F80000 +AF50:00000008F7881088108E1088148804087FE8000007F8000807F8040007F80000 +AF51:00000008F7881088108E1088148804087FE800003EF802083E0820083E080000 +AF52:00000008F7881088108E1088148804087FE800003EF802883E8820883EF80000 +AF53:00000008F7881088108E1088148804087FE800003E8802883EF820883EF80000 +AF54:00000008F7881088108E1088148804087FE800001F0801081F0810141F620000 +AF55:00000008F7881088108E1088148804087FE800003EF802803EF820803EF80000 +AF56:00000008F7881088108E1088148804087FE800003EFC02483E4820483EFC0000 +AF57:00000008F7881088108E1088148804087FE800001F08017F1F1C10221F1C0000 +AF58:00000008F7881088108E1088148804087FE8000003F802080208020803F80000 +AF59:00000008F7881088108E1088148804087FE800000208020803F8020803F80000 +AF5A:00000008F7881088108E1088148804087FE80000110811081F0811141F620000 +AF5B:00000008F7881088108E1088148804087FE80000001000100010006801840000 +AF5C:00000008F7881088108E1088148804087FE800000048004800A8011406620000 +AF5D:00000008F7881088108E1088148804087FE80000000003F00408040803F00000 +AF5E:00000008F7881088108E1088148804087FE8000003F80020002000D003080000 +AF5F:00000008F7881088108E1088148804087FE80000004003F8004000A003180000 +AF60:00000008F7881088108E1088148804087FE8000003F8000803F8000800080000 +AF61:00000008F7881088108E1088148804087FE8000003F8020003F8020003F80000 +AF62:00000008F7881088108E1088148804087FE8000000000FF8022002200FF80000 +AF63:00000008F7881088108E1088148804087FE8000000800FF803E0041003E00000 +AF64:00000012001200127BD208520852085E08520012041204127FD2001200120000 +AF65:00000028F7A810A810B810A814A804287FA8000007F800080008000800080000 +AF66:00000028F7A810A810B810A814A804287FA8000000003EF80208020802080000 +AF67:00000028F7A810A810B810A814A804287FA8000000001F080108011401620000 +AF68:00000028F7A810A810B810A814A804287FA8000008000800080008000FF80000 +AF69:00000028F7A810A810B810A814A804287FA80000000010F8101010301ECC0000 +AF6A:00000028F7A810A810B810A814A804287FA800000808087F081C08220F9C0000 +AF6B:00000028F7A810A810B810A814A804287FA8000003F802000200020003F80000 +AF6C:00000028F7A810A810B810A814A804287FA8000007F8000807F8040007F80000 +AF6D:00000028F7A810A810B810A814A804287FA800003EF802083E0820083E080000 +AF6E:00000028F7A810A810B810A814A804287FA800003EF802883E8820883EF80000 +AF6F:00000028F7A810A810B810A814A804287FA800003E8802883EF820883EF80000 +AF70:00000028F7A810A810B810A814A804287FA800001F0801081F0810141F620000 +AF71:00000028F7A810A810B810A814A804287FA800003EF802803EF820803EF80000 +AF72:00000028F7A810A810B810A814A804287FA800003EFC02483E4820483EFC0000 +AF73:00000028F7A810A810B810A814A804287FA800001F08017F1F1C10221F1C0000 +AF74:00000028F7A810A810B810A814A804287FA8000003F802080208020803F80000 +AF75:00000028F7A810A810B810A814A804287FA800000208020803F8020803F80000 +AF76:00000028F7A810A810B810A814A804287FA80000110811081F0811141F620000 +AF77:00000028F7A810A810B810A814A804287FA80000001000100010006801840000 +AF78:00000028F7A810A810B810A814A804287FA800000048004800A8011406620000 +AF79:00000028F7A810A810B810A814A804287FA80000000003F00408040803F00000 +AF7A:00000028F7A810A810B810A814A804287FA8000003F80020002000D003080000 +AF7B:00000028F7A810A810B810A814A804287FA80000004003F8004000A003180000 +AF7C:00000028F7A810A810B810A814A804287FA8000003F8000803F8000800080000 +AF7D:00000028F7A810A810B810A814A804287FA8000003F8020003F8020003F80000 +AF7E:00000028F7A810A810B810A814A804287FA8000000000FF8022002200FF80000 +AF7F:00000028F7A810A810B810A814A804287FA8000000800FF803E0041003E00000 +AF80:00000008000800087BC808480848084808480008040804087FE8000800080000 +AF81:00000008F788108810881088148804087FE8000007F800080008000800080000 +AF82:00000008F788108810881088148804087FE8000000003EF80208020802080000 +AF83:00000008F788108810881088148804087FE8000000001F080108011401620000 +AF84:00000008F788108810881088148804087FE8000008000800080008000FF80000 +AF85:00000008F788108810881088148804087FE80000000010F8101010301ECC0000 +AF86:00000008F788108810881088148804087FE800000808087F081C08220F9C0000 +AF87:00000008F788108810881088148804087FE8000003F802000200020003F80000 +AF88:00000008F788108810881088148804087FE8000007F8000807F8040007F80000 +AF89:00000008F788108810881088148804087FE800003EF802083E0820083E080000 +AF8A:00000008F788108810881088148804087FE800003EF802883E8820883EF80000 +AF8B:00000008F788108810881088148804087FE800003E8802883EF820883EF80000 +AF8C:00000008F788108810881088148804087FE800001F0801081F0810141F620000 +AF8D:00000008F788108810881088148804087FE800003EF802803EF820803EF80000 +AF8E:00000008F788108810881088148804087FE800003EFC02483E4820483EFC0000 +AF8F:00000008F788108810881088148804087FE800001F08017F1F1C10221F1C0000 +AF90:00000008F788108810881088148804087FE8000003F802080208020803F80000 +AF91:00000008F788108810881088148804087FE800000208020803F8020803F80000 +AF92:00000008F788108810881088148804087FE80000110811081F0811141F620000 +AF93:00000008F788108810881088148804087FE80000001000100010006801840000 +AF94:00000008F788108810881088148804087FE800000048004800A8011406620000 +AF95:00000008F788108810881088148804087FE80000000003F00408040803F00000 +AF96:00000008F788108810881088148804087FE8000003F80020002000D003080000 +AF97:00000008F788108810881088148804087FE80000004003F8004000A003180000 +AF98:00000008F788108810881088148804087FE8000003F8000803F8000800080000 +AF99:00000008F788108810881088148804087FE8000003F8020003F8020003F80000 +AF9A:00000008F788108810881088148804087FE8000000000FF8022002200FF80000 +AF9B:00000008F788108810881088148804087FE8000000800FF803E0041003E00000 +AF9C:00000000000000003EF8020802080208020804400440044004407FFC00000000 +AF9D:000000003EF8020802080208044004407FFC00001FF000100010001000100000 +AF9E:000000003EF8020802080208044004407FFC000000003EF80208020802080000 +AF9F:000000003EF8020802080208044004407FFC000000001E100210022802C40000 +AFA0:000000003EF8020802080208044004407FFC000000001000100010001FF00000 +AFA1:000000003EF8020802080208044004407FFC0000000020F8201020303ECC0000 +AFA2:000000003EF8020802080208044004407FFC0000202021FC207020883E700000 +AFA3:000000003EF8020802080208044004407FFC00001FF01000100010001FF00000 +AFA4:000000003EF8020802080208044004407FFC00001FF000101FF010001FF00000 +AFA5:000000003EF8020802080208044004407FFC00003EF802083E0820083E080000 +AFA6:000000003EF8020802080208044004407FFC00003EF802883E8820883EF80000 +AFA7:000000003EF8020802080208044004407FFC00003E8802883EF820883EF80000 +AFA8:000000003EF8020802080208044004407FFC00003E1002103E1020283EC40000 +AFA9:000000003EF8020802080208044004407FFC00003EF802803EF820803EF80000 +AFAA:000000003EF8020802080208044004407FFC00003EFC02483E4820483EFC0000 +AFAB:000000003EF8020802080208044004407FFC00003E2003FC3E7020883E700000 +AFAC:000000003EF8020802080208044004407FFC00001FF01010101010101FF00000 +AFAD:000000003EF8020802080208044004407FFC0000101010101FF010101FF00000 +AFAE:000000003EF8020802080208044004407FFC0000222022203E2022503E880000 +AFAF:000000003EF8020802080208044004407FFC000000000100010002800C400000 +AFB0:000000003EF8020802080208044004407FFC00000000024002400DA033100000 +AFB1:000000003EF8020802080208044004407FFC0000000007C00820082007C00000 +AFB2:000000003EF8020802080208044004407FFC0000000007E00080014006200000 +AFB3:000000003EF8020802080208044004407FFC0000008007E00080014006200000 +AFB4:000000003EF8020802080208044004407FFC00001FF000101FF0001000100000 +AFB5:000000003EF8020802080208044004407FFC00001FF010001FF010001FF00000 +AFB6:000000003EF8020802080208044004407FFC000000001FF0044004401FF00000 +AFB7:000000003EF8020802080208044004407FFC000001001FF007C0082007C00000 +AFB8:00000000000000007DF0041004100410041000003FF801000100010001000000 +AFB9:000000003EF802080208020800007FFC010001001FF000100010001000100000 +AFBA:000000003EF802080208020800007FFC0100010000003EF80208020802080000 +AFBB:000000003EF802080208020800007FFC0100010000001E100210022802C40000 +AFBC:000000003EF8020802080208000000007FFC010001001100100010001FF00000 +AFBD:000000003EF802080208020800007FFC01000100000020F8201020303ECC0000 +AFBE:000000003EF802080208020800007FFC01000100202021FC207020883E700000 +AFBF:000000003EF802080208020800007FFC010001001FF01000100010001FF00000 +AFC0:000000003EF802080208020800007FFC010001001FF000101FF010001FF00000 +AFC1:000000003EF802080208020800007FFC010001003EF802083E0820083E080000 +AFC2:000000003EF802080208020800007FFC010001003EF802883E8820883EF80000 +AFC3:000000003EF802080208020800007FFC010001003E8802883EF820883EF80000 +AFC4:000000003EF802080208020800007FFC010001003E1002103E1020283EC40000 +AFC5:000000003EF802080208020800007FFC010001003EF802803EF820803EF80000 +AFC6:000000003EF802080208020800007FFC010001003EFC02483E4820483EFC0000 +AFC7:000000003EF802080208020800007FFC010001003E2003FC3E7020883E700000 +AFC8:000000003EF802080208020800007FFC010001001FF01010101010101FF00000 +AFC9:000000003EF802080208020800007FFC01000100101010101FF010101FF00000 +AFCA:000000003EF802080208020800007FFC01000100222022203E2022503E880000 +AFCB:000000003EF802080208020800007FFC0100010000000100010002800C400000 +AFCC:000000003EF802080208020800007FFC010001000000024002400DA033100000 +AFCD:000000003EF802080208020800007FFC01000100000007C00820082007C00000 +AFCE:000000003EF802080208020800007FFC01000100000007E00080014006200000 +AFCF:000000003EF802080208020800007FFC01000100008007E00080014006200000 +AFD0:000000003EF802080208020800007FFC010001001FF000101FF0001000100000 +AFD1:000000003EF802080208020800007FFC010001001FF010001FF010001FF00000 +AFD2:000000003EF802080208020800007FFC0100010000001FF0044004401FF00000 +AFD3:000000003EF802080208020800007FFC0100010001001FF007C0082007C00000 +AFD4:00000008000800087BC8084808480848000800087FE8040804F8040804080000 +AFD5:00080008F7881088108810887FE8027802080000000007F80008000800080000 +AFD6:00080008F7881088108810887FE802780208000000003EF80208020802080000 +AFD7:00080008F7881088108810887FE802780208000000001F080108011401620000 +AFD8:00080008F78810881088108800087FE80278020802081000100010001FF80000 +AFD9:00080008F7881088108810887FE8027802080000000020F8201020303ECC0000 +AFDA:00080008F7881088108810887FE8027802080000202021FC207020883E700000 +AFDB:00080008F7881088108810887FE802780208000003F802000200020003F80000 +AFDC:00080008F7881088108810887FE802780208000007F8000807F8040007F80000 +AFDD:00080008F7881088108810887FE80278020800003EF802083E0820083E080000 +AFDE:00080008F7881088108810887FE80278020800003EF802883E8820883EF80000 +AFDF:00080008F7881088108810887FE80278020800003E8802883EF820883EF80000 +AFE0:00080008F7881088108810887FE80278020800000F8800880F8808140FA20000 +AFE1:00080008F7881088108810887FE80278020800003EF802803EF820803EF80000 +AFE2:00080008F7881088108810887FE80278020800003EFC02483E4820483EFC0000 +AFE3:00080008F7881088108810887FE80278020800003E1002FE3E3820443E380000 +AFE4:00080008F7881088108810887FE802780208000003F802080208020803F80000 +AFE5:00080008F7881088108810887FE80278020800000208020803F8020803F80000 +AFE6:00080008F7881088108810887FE8027802080000210821083F0821143F620000 +AFE7:00080008F7881088108810887FE8027802080000001000100010006801840000 +AFE8:00080008F7881088108810887FE80278020800000048004800A8011406620000 +AFE9:00080008F7881088108810887FE8027802080000000003F00408040803F00000 +AFEA:00080008F7881088108810887FE802780208000003F80020002000D003080000 +AFEB:00080008F7881088108810887FE8027802080000004003F8004000A003180000 +AFEC:00080008F7881088108810887FE802780208000003F8000803F8000800080000 +AFED:00080008F7881088108810887FE802780208000003F8020003F8020003F80000 +AFEE:00080008F7881088108810887FE802780208000000000FF8022002200FF80000 +AFEF:00080008F7881088108810887FE802780208000000800FF803E0041003E00000 +AFF0:0000000A000A000A7BCA084A084A084A000A000A7FEA040A047A040A040A0000 +AFF1:00280028F7A810A810A810A87FA805E804280000000007F80008000800080000 +AFF2:00280028F7A810A810A810A87FA805E80428000000003EF80208020802080000 +AFF3:00280028F7A810A810A810A87FA805E80428000000001F080108011401620000 +AFF4:00280028F7A810A810A810A800287FA8042805E804281428100010001FF80000 +AFF5:00280028F7A810A810A810A87FA805E804280000000020F8201020303ECC0000 +AFF6:00280028F7A810A810A810A87FA805E804280000202021FC207020883E700000 +AFF7:00280028F7A810A810A810A87FA805E80428000003F802000200020003F80000 +AFF8:00280028F7A810A810A810A87FA805E80428000007F8000807F8040007F80000 +AFF9:00280028F7A810A810A810A87FA805E8042800003EF802083E0820083E080000 +AFFA:00280028F7A810A810A810A87FA805E8042800003EF802883E8820883EF80000 +AFFB:00280028F7A810A810A810A87FA805E8042800003E8802883EF820883EF80000 +AFFC:00280028F7A810A810A810A87FA805E8042800000F8800880F8808140FA20000 +AFFD:00280028F7A810A810A810A87FA805E8042800003EF802803EF820803EF80000 +AFFE:00280028F7A810A810A810A87FA805E8042800003EFC02483E4820483EFC0000 +AFFF:00280028F7A810A810A810A87FA805E8042800003E1002FE3E3820443E380000 +B000:00280028F7A810A810A810A87FA805E80428000003F802080208020803F80000 +B001:00280028F7A810A810A810A87FA805E8042800000208020803F8020803F80000 +B002:00280028F7A810A810A810A87FA805E804280000210821083F0821143F620000 +B003:00280028F7A810A810A810A87FA805E804280000001000100010006801840000 +B004:00280028F7A810A810A810A87FA805E8042800000048004800A8011406620000 +B005:00280028F7A810A810A810A87FA805E804280000000003F00408040803F00000 +B006:00280028F7A810A810A810A87FA805E80428000003F80020002000D003080000 +B007:00280028F7A810A810A810A87FA805E804280000004003F8004000A003180000 +B008:00280028F7A810A810A810A87FA805E80428000003F8000803F8000800080000 +B009:00280028F7A810A810A810A87FA805E80428000003F8020003F8020003F80000 +B00A:00280028F7A810A810A810A87FA805E80428000000000FF8022002200FF80000 +B00B:00280028F7A810A810A810A87FA805E80428000000800FF803E0041003E00000 +B00C:00000008000800087BC8084808480848000800087FE804080408040804080000 +B00D:00080008F7881088108810887FE8020802000000000007F80008000800080000 +B00E:00080008F7881088108810887FE802080200000000003EF80208020802080000 +B00F:00080008F7881088108810887FE802080200000000001F080108011401620000 +B010:00080008F78810881088108800087FE80208020802081008100010001FF80000 +B011:00080008F7881088108810887FE8020802000000000020F8201020303ECC0000 +B012:00080008F7881088108810887FE8020802000000202021FC207020883E700000 +B013:00080008F7881088108810887FE802080200000003F802000200020003F80000 +B014:00080008F7881088108810887FE802080200000007F8000807F8040007F80000 +B015:00080008F7881088108810887FE80208020000003EF802083E0820083E080000 +B016:00080008F7881088108810887FE80208020000003EF802883E8820883EF80000 +B017:00080008F7881088108810887FE80208020000003E8802883EF820883EF80000 +B018:00080008F7881088108810887FE80208020000000F8800880F8808140FA20000 +B019:00080008F7881088108810887FE80208020000003EF802803EF820803EF80000 +B01A:00080008F7881088108810887FE80208020000003EFC02483E4820483EFC0000 +B01B:00080008F7881088108810887FE80208020000003E1002FE3E3820443E380000 +B01C:00080008F7881088108810887FE802080200000003F802080208020803F80000 +B01D:00080008F7881088108810887FE80208020000000208020803F8020803F80000 +B01E:00080008F7881088108810887FE8020802000000210821083F0821143F620000 +B01F:00080008F7881088108810887FE8020802000000001000100010006801840000 +B020:00080008F7881088108810887FE80208020000000048004800A8011406620000 +B021:00080008F7881088108810887FE8020802000000000003F00408040803F00000 +B022:00080008F7881088108810887FE802080200000003F80020002000D003080000 +B023:00080008F7881088108810887FE8020802000000004003F8004000A003180000 +B024:00080008F7881088108810887FE802080200000003F8000803F8000800080000 +B025:00080008F7881088108810887FE802080200000003F8020003F8020003F80000 +B026:00080008F7881088108810887FE802080200000000000FF8022002200FF80000 +B027:00080008F7881088108810887FE802080200000000800FF803E0041003E00000 +B028:00000000000000007DF0041004100410041000007FFC04400440044004400000 +B029:000000003EF802080208020800007FFC044004401FF000100010001000100000 +B02A:000000003EF802080208020800007FFC0440044000003EF80208020802080000 +B02B:000000003EF802080208020800007FFC0440044000001E100210022802C40000 +B02C:000000003EF8020802080208000000007FFC044004401440100010001FF00000 +B02D:000000003EF802080208020800007FFC04400440000020F8201020303ECC0000 +B02E:000000003EF802080208020800007FFC04400440202021FC207020883E700000 +B02F:000000003EF802080208020800007FFC044004401FF01000100010001FF00000 +B030:000000003EF802080208020800007FFC044004401FF000101FF010001FF00000 +B031:000000003EF802080208020800007FFC044004403EF802083E0820083E080000 +B032:000000003EF802080208020800007FFC044004403EF802883E8820883EF80000 +B033:000000003EF802080208020800007FFC044004403E8802883EF820883EF80000 +B034:000000003EF802080208020800007FFC044004403E1002103E1020283EC40000 +B035:000000003EF802080208020800007FFC044004403EF802803EF820803EF80000 +B036:000000003EF802080208020800007FFC044004403EFC02483E4820483EFC0000 +B037:000000003EF802080208020800007FFC044004403E2003FC3E7020883E700000 +B038:000000003EF802080208020800007FFC044004401FF01010101010101FF00000 +B039:000000003EF802080208020800007FFC04400440101010101FF010101FF00000 +B03A:000000003EF802080208020800007FFC04400440222022203E2022503E880000 +B03B:000000003EF802080208020800007FFC0440044000000100010002800C400000 +B03C:000000003EF802080208020800007FFC044004400000024002400DA033100000 +B03D:000000003EF802080208020800007FFC04400440000007C00820082007C00000 +B03E:000000003EF802080208020800007FFC04400440000007E00080014006200000 +B03F:000000003EF802080208020800007FFC04400440008007E00080014006200000 +B040:000000003EF802080208020800007FFC044004401FF000101FF0001000100000 +B041:000000003EF802080208020800007FFC044004401FF010001FF010001FF00000 +B042:000000003EF802080208020800007FFC0440044000001FF0044004401FF00000 +B043:000000003EF802080208020800007FFC0440044001001FF007C0082007C00000 +B044:00000000000000003EF80208020802080208000000007FFC0000000000000000 +B045:000000003EF8020802080208000000007FFC00001FF000100010001000100000 +B046:000000003EF8020802080208000000007FFC000000003EF80208020802080000 +B047:000000003EF8020802080208000000007FFC000000001E100210022802C40000 +B048:000000003EF8020802080208000000007FFC000000001000100010001FF00000 +B049:000000003EF8020802080208000000007FFC0000000020F8201020303ECC0000 +B04A:000000003EF8020802080208000000007FFC0000202021FC207020883E700000 +B04B:000000003EF8020802080208000000007FFC00001FF01000100010001FF00000 +B04C:000000003EF8020802080208000000007FFC00001FF000101FF010001FF00000 +B04D:000000003EF8020802080208000000007FFC00003EF802083E0820083E080000 +B04E:000000003EF8020802080208000000007FFC00003EF802883E8820883EF80000 +B04F:000000003EF8020802080208000000007FFC00003E8802883EF820883EF80000 +B050:000000003EF8020802080208000000007FFC00003E1002103E1020283EC40000 +B051:000000003EF8020802080208000000007FFC00003EF802803EF820803EF80000 +B052:000000003EF8020802080208000000007FFC00003EFC02483E4820483EFC0000 +B053:000000003EF8020802080208000000007FFC00003E2003FC3E7020883E700000 +B054:000000003EF8020802080208000000007FFC00001FF01010101010101FF00000 +B055:000000003EF8020802080208000000007FFC0000101010101FF010101FF00000 +B056:000000003EF8020802080208000000007FFC0000222022203E2022503E880000 +B057:000000003EF8020802080208000000007FFC000000000100010002800C400000 +B058:000000003EF8020802080208000000007FFC00000000024002400DA033100000 +B059:000000003EF8020802080208000000007FFC0000000007C00820082007C00000 +B05A:000000003EF8020802080208000000007FFC0000000007E00080014006200000 +B05B:000000003EF8020802080208000000007FFC0000008007E00080014006200000 +B05C:000000003EF8020802080208000000007FFC00001FF000101FF0001000100000 +B05D:000000003EF8020802080208000000007FFC00001FF010001FF010001FF00000 +B05E:000000003EF8020802080208000000007FFC000000001FF0044004401FF00000 +B05F:000000003EF8020802080208000000007FFC000001001FF007C0082007C00000 +B060:00000008000800087BC80848084808480848000800087FE80008000800080000 +B061:00000008F788108810881088108800087FE8000007F800080008000800080000 +B062:00000008F788108810881088108800087FE8000000003EF80208020802080000 +B063:00000008F788108810881088108800087FE8000000001F080108011401620000 +B064:00000008F788108810881088108800087FE8000008000800080008000FF80000 +B065:00000008F788108810881088108800087FE80000000010F8101010301ECC0000 +B066:00000008F788108810881088108800087FE800000808087F081C08220F9C0000 +B067:00000008F788108810881088108800087FE8000003F802000200020003F80000 +B068:00000008F788108810881088108800087FE8000007F8000807F8040007F80000 +B069:00000008F788108810881088108800087FE800003EF802083E0820083E080000 +B06A:00000008F788108810881088108800087FE800003EF802883E8820883EF80000 +B06B:00000008F788108810881088108800087FE800003E8802883EF820883EF80000 +B06C:00000008F788108810881088108800087FE800001F0801081F0810141F620000 +B06D:00000008F788108810881088108800087FE800003EF802803EF820803EF80000 +B06E:00000008F788108810881088108800087FE800003EFC02483E4820483EFC0000 +B06F:00000008F788108810881088108800087FE800001F08017F1F1C10221F1C0000 +B070:00000008F788108810881088108800087FE8000003F802080208020803F80000 +B071:00000008F788108810881088108800087FE800000208020803F8020803F80000 +B072:00000008F788108810881088108800087FE80000110811081F0811141F620000 +B073:00000008F788108810881088108800087FE80000001000100010006801840000 +B074:00000008F788108810881088108800087FE800000048004800A8011406620000 +B075:00000008F788108810881088108800087FE80000000003F00408040803F00000 +B076:00000008F788108810881088108800087FE8000003F80020002000D003080000 +B077:00000008F788108810881088108800087FE80000004003F8004000A003180000 +B078:00000008F788108810881088108800087FE8000003F8000803F8000800080000 +B079:00000008F788108810881088108800087FE8000003F8020003F8020003F80000 +B07A:00000008F788108810881088108800087FE8000000000FF8022002200FF80000 +B07B:00000008F788108810881088108800087FE8000000800FF803E0041003E00000 +B07C:00000000000800087B8808880888088811081108220844080808000800080000 +B07D:00000008F7881088108810882108C60800080000000007F80008000800080000 +B07E:00000008F7881088108810882108C6080008000000003EF80208020802080000 +B07F:00000008F7881088108810882108C6080008000000001F080108011401620000 +B080:00000008F7881088108810882108C6080008000800001000100010001FF80000 +B081:00000008F7881088108810882108C60800080000000020F8201020303ECC0000 +B082:00000008F7881088108810882108C60800080000202021FC207020883E700000 +B083:00000008F7881088108810882108C6080008000003F802000200020003F80000 +B084:00000008F7881088108810882108C6080008000007F8000807F8040007F80000 +B085:00000008F7881088108810882108C608000800003EF802083E0820083E080000 +B086:00000008F7881088108810882108C608000800003EF802883E8820883EF80000 +B087:00000008F7881088108810882108C608000800003E8802883EF820883EF80000 +B088:00000008F7881088108810882108C608000800000F8800880F8808140FA20000 +B089:00000008F7881088108810882108C608000800003EF802803EF820803EF80000 +B08A:00000008F7881088108810882108C608000800003EFC02483E4820483EFC0000 +B08B:00000008F7881088108810882108C608000800003E1002FE3E3820443E380000 +B08C:00000008F7881088108810882108C6080008000003F802080208020803F80000 +B08D:00000008F7881088108810882108C608000800000208020803F8020803F80000 +B08E:00000008F7881088108810882108C60800080000210821083F0821143F620000 +B08F:00000008F7881088108810882108C60800080000001000100010006801840000 +B090:00000008F7881088108810882108C608000800000048004800A8011406620000 +B091:00000008F7881088108810882108C60800080000000003F00408040803F00000 +B092:00000008F7881088108810882108C6080008000003F80020002000D003080000 +B093:00000008F7881088108810882108C60800080000004003F8004000A003180000 +B094:00000008F7881088108810882108C6080008000003F8000803F8000800080000 +B095:00000008F7881088108810882108C6080008000003F8020003F8020003F80000 +B096:00000008F7881088108810882108C6080008000000000FF8022002200FF80000 +B097:00000008F7881088108810882108C6080008000000800FF803E0041003E00000 +B098:0000000000100010001040104010401E4010401040107F900010001000100000 +B099:00000008000800084008400E400840087E08000007F800080008000800080000 +B09A:00000008000800084008400E400840087E08000000003EF80208020802080000 +B09B:00000008000800084008400E400840087E08000000001F080108011401620000 +B09C:00000008000800084008400E400840087E08000808000800080008000FF80000 +B09D:00000008000800084008400E400840087E080000000010F8101010301ECC0000 +B09E:00000008000800084008400E400840087E0800000808087F081C08220F9C0000 +B09F:00000008000800084008400E400840087E08000003F802000200020003F80000 +B0A0:00000008000800084008400E400840087E08000007F8000807F8040007F80000 +B0A1:00000008000800084008400E400840087E0800003EF802083E0820083E080000 +B0A2:00000008000800084008400E400840087E0800003EF802883E8820883EF80000 +B0A3:00000008000800084008400E400840087E0800003E8802883EF820883EF80000 +B0A4:00000008000800084008400E400840087E0800001F0801081F0810141F620000 +B0A5:00000008000800084008400E400840087E0800003EF802803EF820803EF80000 +B0A6:00000008000800084008400E400840087E0800003EFC02483E4820483EFC0000 +B0A7:00000008000800084008400E400840087E0800001F08017F1F1C10221F1C0000 +B0A8:00000008000800084008400E400840087E08000003F802080208020803F80000 +B0A9:00000008000800084008400E400840087E0800000208020803F8020803F80000 +B0AA:00000008000800084008400E400840087E080000110811081F0811141F620000 +B0AB:00000008000800084008400E400840087E080000001000100010006801840000 +B0AC:00000008000800084008400E400840087E0800000048004800A8011406620000 +B0AD:00000008000800084008400E400840087E080000000003F00408040803F00000 +B0AE:00000008000800084008400E400840087E08000003F80020002000D003080000 +B0AF:00000008000800084008400E400840087E080000004003F8004000A003180000 +B0B0:00000008000800084008400E400840087E08000003F8000803F8000800080000 +B0B1:00000008000800084008400E400840087E08000003F8020003F8020003F80000 +B0B2:00000008000800084008400E400840087E08000000000FF8022002200FF80000 +B0B3:00000008000800084008400E400840087E08000000800FF803E0041003E00000 +B0B4:0000000000120012001240124012401E4012401240127F920012001200120000 +B0B5:000000280028002840284038402840287E28000007F800080008000800080000 +B0B6:000000280028002840284038402840287E28000000003EF80208020802080000 +B0B7:000000280028002840284038402840287E28000000003E100210022802C40000 +B0B8:000000280028002840284038402840287E28002808000800080008000FF80000 +B0B9:000000280028002840284038402840287E280000000020F8201020303ECC0000 +B0BA:000000280028002840284038402840287E280000202021FC207020883E700000 +B0BB:000000280028002840284038402840287E28000003F802000200020003F80000 +B0BC:000000280028002840284038402840287E28000007F8000807F8040007F80000 +B0BD:000000280028002840284038402840287E2800003EF802083E0820083E080000 +B0BE:000000280028002840284038402840287E2800003EF802883E8820883EF80000 +B0BF:000000280028002840284038402840287E2800003E8802883EF820883EF80000 +B0C0:000000280028002840284038402840287E2800001F0801081F0810141F620000 +B0C1:000000280028002840284038402840287E2800003EF802803EF820803EF80000 +B0C2:000000280028002840284038402840287E2800003EFC02483E4820483EFC0000 +B0C3:000000280028002840284038402840287E2800003E1002FE3E3820443E380000 +B0C4:000000280028002840284038402840287E28000003F802080208020803F80000 +B0C5:000000280028002840284038402840287E2800000208020803F8020803F80000 +B0C6:000000280028002840284038402840287E280000110811081F0811141F620000 +B0C7:000000280028002840284038402840287E280000000800080008003400C20000 +B0C8:000000280028002840284038402840287E2800000048004800A8011406620000 +B0C9:000000280028002840284038402840287E280000000001F00208020801F00000 +B0CA:000000280028002840284038402840287E28000003F80020002000D003080000 +B0CB:000000280028002840284038402840287E280000004003F8004000A003180000 +B0CC:000000280028002840284038402840287E28000003F8000803F8000800080000 +B0CD:000000280028002840284038402840287E28000003F8020003F8020003F80000 +B0CE:000000280028002840284038402840287E28000000000FF8022002200FF80000 +B0CF:000000280028002840284038402840287E28000000800FF803E0041003E00000 +B0D0:000000000010001000104010401E40104010401E40107F900010001000100000 +B0D1:0000000800080008400E4008400E40087E08000007F800080008000800080000 +B0D2:0000000800080008400E4008400E40087E08000000003EF80208020802080000 +B0D3:0000000800080008400E4008400E40087E08000000001F080108011401620000 +B0D4:0000000800080008400E4008400E40087E08000008000800080008000FF80000 +B0D5:0000000800080008400E4008400E40087E080000000010F8101010301ECC0000 +B0D6:0000000800080008400E4008400E40087E0800000808087F081C08220F9C0000 +B0D7:0000000800080008400E4008400E40087E08000003F802000200020003F80000 +B0D8:0000000800080008400E4008400E40087E08000007F8000807F8040007F80000 +B0D9:0000000800080008400E4008400E40087E0800003EF802083E0820083E080000 +B0DA:0000000800080008400E4008400E40087E0800003EF802883E8820883EF80000 +B0DB:0000000800080008400E4008400E40087E0800003E8802883EF820883EF80000 +B0DC:0000000800080008400E4008400E40087E0800001F0801081F0810141F620000 +B0DD:0000000800080008400E4008400E40087E0800003EF802803EF820803EF80000 +B0DE:0000000800080008400E4008400E40087E0800003EFC02483E4820483EFC0000 +B0DF:0000000800080008400E4008400E40087E0800001F08017F1F1C10221F1C0000 +B0E0:0000000800080008400E4008400E40087E08000003F802080208020803F80000 +B0E1:0000000800080008400E4008400E40087E0800000208020803F8020803F80000 +B0E2:0000000800080008400E4008400E40087E080000110811081F0811141F620000 +B0E3:0000000800080008400E4008400E40087E080000001000100010006801840000 +B0E4:0000000800080008400E4008400E40087E0800000048004800A8011406620000 +B0E5:0000000800080008400E4008400E40087E080000000003F00408040803F00000 +B0E6:0000000800080008400E4008400E40087E08000003F80020002000D003080000 +B0E7:0000000800080008400E4008400E40087E080000004003F8004000A003180000 +B0E8:0000000800080008400E4008400E40087E08000003F8000803F8000800080000 +B0E9:0000000800080008400E4008400E40087E08000003F8020003F8020003F80000 +B0EA:0000000800080008400E4008400E40087E08000000000FF8022002200FF80000 +B0EB:0000000800080008400E4008400E40087E08000000800FF803E0041003E00000 +B0EC:000000000012001200124012401E40124012401E40127F920012001200120000 +B0ED:000000280028002840384028403840287E28000007F800080008000800080000 +B0EE:000000280028002840384028403840287E28000000003EF80208020802080000 +B0EF:000000280028002840384028403840287E28000000003E100210022802C40000 +B0F0:000000280028002840384028403840287E28002808000800080008000FF80000 +B0F1:000000280028002840384028403840287E280000000020F8201020303ECC0000 +B0F2:000000280028002840384028403840287E280000202021FC207020883E700000 +B0F3:000000280028002840384028403840287E28000003F802000200020003F80000 +B0F4:000000280028002840384028403840287E28000007F8000807F8040007F80000 +B0F5:000000280028002840384028403840287E2800003EF802083E0820083E080000 +B0F6:000000280028002840384028403840287E2800003EF802883E8820883EF80000 +B0F7:000000280028002840384028403840287E2800003E8802883EF820883EF80000 +B0F8:000000280028002840384028403840287E2800001F0801081F0810141F620000 +B0F9:000000280028002840384028403840287E2800003EF802803EF820803EF80000 +B0FA:000000280028002840384028403840287E2800003EFC02483E4820483EFC0000 +B0FB:000000280028002840384028403840287E2800003E1002FE3E3820443E380000 +B0FC:000000280028002840384028403840287E28000003F802080208020803F80000 +B0FD:000000280028002840384028403840287E2800000208020803F8020803F80000 +B0FE:000000280028002840384028403840287E280000110811081F0811141F620000 +B0FF:000000280028002840384028403840287E280000000800080008003400C20000 +B100:000000280028002840384028403840287E2800000048004800A8011406620000 +B101:000000280028002840384028403840287E280000000001F00208020801F00000 +B102:000000280028002840384028403840287E28000003F80020002000D003080000 +B103:000000280028002840384028403840287E280000004003F8004000A003180000 +B104:000000280028002840384028403840287E28000003F8000803F8000800080000 +B105:000000280028002840384028403840287E28000003F8020003F8020003F80000 +B106:000000280028002840384028403840287E28000000000FF8022002200FF80000 +B107:000000280028002840384028403840287E28000000800FF803E0041003E00000 +B108:0000000000020002000240024002401E4002400240027F820002000200020000 +B109:000000080008000840084038400840087E080000000007F80008000800080000 +B10A:000000080008000840084038400840087E08000000003EF80208020802080000 +B10B:000000080008000840084038400840087E08000000001F080108011401620000 +B10C:000000080008000840084038400840087E08000000001000100010001FF80000 +B10D:000000080008000840084038400840087E080000000020F8201020303ECC0000 +B10E:000000080008000840084038400840087E080000202021FC207020883E700000 +B10F:000000080008000840084038400840087E08000003F802000200020003F80000 +B110:000000080008000840084038400840087E08000007F8000807F8040007F80000 +B111:000000080008000840084038400840087E0800003EF802083E0820083E080000 +B112:000000080008000840084038400840087E0800003EF802883E8820883EF80000 +B113:000000080008000840084038400840087E0800003E8802883EF820883EF80000 +B114:000000080008000840084038400840087E0800000F8800880F8808140FA20000 +B115:000000080008000840084038400840087E0800003EF802803EF820803EF80000 +B116:000000080008000840084038400840087E0800003EFC02483E4820483EFC0000 +B117:000000080008000840084038400840087E0800003E1002FE3E3820443E380000 +B118:000000080008000840084038400840087E08000003F802080208020803F80000 +B119:000000080008000840084038400840087E0800000208020803F8020803F80000 +B11A:000000080008000840084038400840087E080000210821083F0821143F620000 +B11B:000000080008000840084038400840087E080000001000100010006801840000 +B11C:000000080008000840084038400840087E0800000048004800A8011406620000 +B11D:000000080008000840084038400840087E080000000003F00408040803F00000 +B11E:000000080008000840084038400840087E08000003F80020002000D003080000 +B11F:000000080008000840084038400840087E080000004003F8004000A003180000 +B120:000000080008000840084038400840087E08000003F8000803F8000800080000 +B121:000000080008000840084038400840087E08000003F8020003F8020003F80000 +B122:000000080008000840084038400840087E08000000000FF8022002200FF80000 +B123:000000080008000840084038400840087E08000000800FF803E0041003E00000 +B124:00000000000A000A000A400A400A403A400A400A400A7F8A000A000A000A0000 +B125:0000002800280028402840E8402840287E28000007F800080008000800080000 +B126:0000002800280028402840E8402840287E28000000003EF80208020802080000 +B127:0000002800280028402840E8402840287E28000000003E100210022802C40000 +B128:0000002800280028402840E8402840287E28000008000800080008000FF80000 +B129:0000002800280028402840E8402840287E280000000020F8201020303ECC0000 +B12A:0000002800280028402840E8402840287E280000202021FC207020883E700000 +B12B:0000002800280028402840E8402840287E28000003F802000200020003F80000 +B12C:0000002800280028402840E8402840287E28000007F8000807F8040007F80000 +B12D:0000002800280028402840E8402840287E2800003EF802083E0820083E080000 +B12E:0000002800280028402840E8402840287E2800003EF802883E8820883EF80000 +B12F:0000002800280028402840E8402840287E2800003E8802883EF820883EF80000 +B130:0000002800280028402840E8402840287E2800001F0801081F0810141F620000 +B131:0000002800280028402840E8402840287E2800003EF802803EF820803EF80000 +B132:0000002800280028402840E8402840287E2800003EFC02483E4820483EFC0000 +B133:0000002800280028402840E8402840287E2800003E1002FE3E3820443E380000 +B134:0000002800280028402840E8402840287E28000003F802080208020803F80000 +B135:0000002800280028402840E8402840287E2800000208020803F8020803F80000 +B136:0000002800280028402840E8402840287E280000110811081F0811141F620000 +B137:0000002800280028402840E8402840287E280000000800080008003400C20000 +B138:0000002800280028402840E8402840287E2800000048004800A8011406620000 +B139:0000002800280028402840E8402840287E280000000001F00208020801F00000 +B13A:0000002800280028402840E8402840287E28000003F80020002000D003080000 +B13B:0000002800280028402840E8402840287E280000004003F8004000A003180000 +B13C:0000002800280028402840E8402840287E28000003F8000803F8000800080000 +B13D:0000002800280028402840E8402840287E28000003F8020003F8020003F80000 +B13E:0000002800280028402840E8402840287E28000000000FF8022002200FF80000 +B13F:0000002800280028402840E8402840287E28000000800FF803E0041003E00000 +B140:000000000002000200024002401E40024002401E40027F820002000200020000 +B141:000000080008000840384008403840087E080000000007F80008000800080000 +B142:000000080008000840384008403840087E08000000003EF80208020802080000 +B143:000000080008000840384008403840087E08000000001F080108011401620000 +B144:000000080008000840384008403840087E08000800001000100010001FF80000 +B145:000000080008000840384008403840087E080000000020F8201020303ECC0000 +B146:000000080008000840384008403840087E080000202021FC207020883E700000 +B147:000000080008000840384008403840087E08000003F802000200020003F80000 +B148:000000080008000840384008403840087E08000007F8000807F8040007F80000 +B149:000000080008000840384008403840087E0800003EF802083E0820083E080000 +B14A:000000080008000840384008403840087E0800003EF802883E8820883EF80000 +B14B:000000080008000840384008403840087E0800003E8802883EF820883EF80000 +B14C:000000080008000840384008403840087E0800000F8800880F8808140FA20000 +B14D:000000080008000840384008403840087E0800003EF802803EF820803EF80000 +B14E:000000080008000840384008403840087E0800003EFC02483E4820483EFC0000 +B14F:000000080008000840384008403840087E0800003E1002FE3E3820443E380000 +B150:000000080008000840384008403840087E08000003F802080208020803F80000 +B151:000000080008000840384008403840087E0800000208020803F8020803F80000 +B152:000000080008000840384008403840087E080000210821083F0821143F620000 +B153:000000080008000840384008403840087E080000001000100010006801840000 +B154:000000080008000840384008403840087E0800000048004800A8011406620000 +B155:000000080008000840384008403840087E080000000003F00408040803F00000 +B156:000000080008000840384008403840087E08000003F80020002000D003080000 +B157:000000080008000840384008403840087E080000004003F8004000A003180000 +B158:000000080008000840384008403840087E08000003F8000803F8000800080000 +B159:000000080008000840384008403840087E08000003F8020003F8020003F80000 +B15A:000000080008000840384008403840087E08000000000FF8022002200FF80000 +B15B:000000080008000840384008403840087E08000000800FF803E0041003E00000 +B15C:00000000000A000A000A400A403A400A400A403A400A7F8A000A000A000A0000 +B15D:000000280028002840E8402840E840287E28000007F800080008000800080000 +B15E:000000280028002840E8402840E840287E28000000003EF80208020802080000 +B15F:000000280028002840E8402840E840287E28000000003E100210022802C40000 +B160:000000280028002840E8402840E840287E28002808000800080008000FF80000 +B161:000000280028002840E8402840E840287E280000000020F8201020303ECC0000 +B162:000000280028002840E8402840E840287E280000202021FC207020883E700000 +B163:000000280028002840E8402840E840287E28000003F802000200020003F80000 +B164:000000280028002840E8402840E840287E28000007F8000807F8040007F80000 +B165:000000280028002840E8402840E840287E2800003EF802083E0820083E080000 +B166:000000280028002840E8402840E840287E2800003EF802883E8820883EF80000 +B167:000000280028002840E8402840E840287E2800003E8802883EF820883EF80000 +B168:000000280028002840E8402840E840287E2800001F0801081F0810141F620000 +B169:000000280028002840E8402840E840287E2800003EF802803EF820803EF80000 +B16A:000000280028002840E8402840E840287E2800003EFC02483E4820483EFC0000 +B16B:000000280028002840E8402840E840287E2800003E1002FE3E3820443E380000 +B16C:000000280028002840E8402840E840287E28000003F802080208020803F80000 +B16D:000000280028002840E8402840E840287E2800000208020803F8020803F80000 +B16E:000000280028002840E8402840E840287E280000110811081F0811141F620000 +B16F:000000280028002840E8402840E840287E280000000800080008003400C20000 +B170:000000280028002840E8402840E840287E2800000048004800A8011406620000 +B171:000000280028002840E8402840E840287E280000000001F00208020801F00000 +B172:000000280028002840E8402840E840287E28000003F80020002000D003080000 +B173:000000280028002840E8402840E840287E280000004003F8004000A003180000 +B174:000000280028002840E8402840E840287E28000003F8000803F8000800080000 +B175:000000280028002840E8402840E840287E28000003F8020003F8020003F80000 +B176:000000280028002840E8402840E840287E28000000000FF8022002200FF80000 +B177:000000280028002840E8402840E840287E28000000800FF803E0041003E00000 +B178:00000000200020002000200020003FF8000000000100010001007FFC00000000 +B179:000000001000100010001FF0010001007FFC00001FF000100010001000100000 +B17A:000000001000100010001FF0010001007FFC000000003EF80208020802080000 +B17B:000000001000100010001FF0010001007FFC000000001E100210022802C40000 +B17C:000000001000100010001FF0010001007FFC000000001000100010001FF00000 +B17D:000000001000100010001FF0010001007FFC0000000020F8201020303ECC0000 +B17E:000000001000100010001FF0010001007FFC0000202021FC207020883E700000 +B17F:000000001000100010001FF0010001007FFC00001FF01000100010001FF00000 +B180:000000001000100010001FF0010001007FFC00001FF000101FF010001FF00000 +B181:000000001000100010001FF0010001007FFC00003EF802083E0820083E080000 +B182:000000001000100010001FF0010001007FFC00003EF802883E8820883EF80000 +B183:000000001000100010001FF0010001007FFC00003E8802883EF820883EF80000 +B184:000000001000100010001FF0010001007FFC00003E1002103E1020283EC40000 +B185:000000001000100010001FF0010001007FFC00003EF802803EF820803EF80000 +B186:000000001000100010001FF0010001007FFC00003EFC02483E4820483EFC0000 +B187:000000001000100010001FF0010001007FFC00003E2003FC3E7020883E700000 +B188:000000001000100010001FF0010001007FFC00001FF01010101010101FF00000 +B189:000000001000100010001FF0010001007FFC0000101010101FF010101FF00000 +B18A:000000001000100010001FF0010001007FFC0000222022203E2022503E880000 +B18B:000000001000100010001FF0010001007FFC000000000100010002800C400000 +B18C:000000001000100010001FF0010001007FFC00000000024002400DA033100000 +B18D:000000001000100010001FF0010001007FFC0000000007C00820082007C00000 +B18E:000000001000100010001FF0010001007FFC0000000007E00080014006200000 +B18F:000000001000100010001FF0010001007FFC0000008007E00080014006200000 +B190:000000001000100010001FF0010001007FFC00001FF000101FF0001000100000 +B191:000000001000100010001FF0010001007FFC00001FF010001FF010001FF00000 +B192:000000001000100010001FF0010001007FFC000000001FF0044004401FF00000 +B193:000000001000100010001FF0010001007FFC000001001FF007C0082007C00000 +B194:0000001000104010401040104010401E7F900010041004107FD0001000100000 +B195:0000000820082008200E20083F8804087FE8000007F800080008000800080000 +B196:0000000820082008200E20083F8804087FE8000000003EF80208020802080000 +B197:0000000820082008200E20083F8804087FE8000000001F080108011401620000 +B198:0000000820082008200E20083F8804087FE8000008000800080008000FF80000 +B199:0000000820082008200E20083F8804087FE80000000010F8101010301ECC0000 +B19A:0000000820082008200E20083F8804087FE800000808087F081C08220F9C0000 +B19B:0000000820082008200E20083F8804087FE8000003F802000200020003F80000 +B19C:0000000820082008200E20083F8804087FE8000007F8000807F8040007F80000 +B19D:0000000820082008200E20083F8804087FE800003EF802083E0820083E080000 +B19E:0000000820082008200E20083F8804087FE800003EF802883E8820883EF80000 +B19F:0000000820082008200E20083F8804087FE800003E8802883EF820883EF80000 +B1A0:0000000820082008200E20083F8804087FE800001F0801081F0810141F620000 +B1A1:0000000820082008200E20083F8804087FE800003EF802803EF820803EF80000 +B1A2:0000000820082008200E20083F8804087FE800003EFC02483E4820483EFC0000 +B1A3:0000000820082008200E20083F8804087FE800001F08017F1F1C10221F1C0000 +B1A4:0000000820082008200E20083F8804087FE8000003F802080208020803F80000 +B1A5:0000000820082008200E20083F8804087FE800000208020803F8020803F80000 +B1A6:0000000820082008200E20083F8804087FE80000110811081F0811141F620000 +B1A7:0000000820082008200E20083F8804087FE80000001000100010006801840000 +B1A8:0000000820082008200E20083F8804087FE800000048004800A8011406620000 +B1A9:0000000820082008200E20083F8804087FE80000000003F00408040803F00000 +B1AA:0000000820082008200E20083F8804087FE8000003F80020002000D003080000 +B1AB:0000000820082008200E20083F8804087FE80000004003F8004000A003180000 +B1AC:0000000820082008200E20083F8804087FE8000003F8000803F8000800080000 +B1AD:0000000820082008200E20083F8804087FE8000003F8020003F8020003F80000 +B1AE:0000000820082008200E20083F8804087FE8000000000FF8022002200FF80000 +B1AF:0000000820082008200E20083F8804087FE8000000800FF803E0041003E00000 +B1B0:0000001200124012401240124012401E7F920012041204127FD2001200120000 +B1B1:0000002820282028203820283FA804287FA8000007F800080008000800080000 +B1B2:0000002820282028203820283FA804287FA8000000003EF80208020802080000 +B1B3:0000002820282028203820283FA804287FA8000000001F080108011401620000 +B1B4:0000002820282028203820283FA804287FA8000008000800080008000FF80000 +B1B5:0000002820282028203820283FA804287FA80000000010F8101010301ECC0000 +B1B6:0000002820282028203820283FA804287FA800000808087F081C08220F9C0000 +B1B7:0000002820282028203820283FA804287FA8000003F802000200020003F80000 +B1B8:0000002820282028203820283FA804287FA8000007F8000807F8040007F80000 +B1B9:0000002820282028203820283FA804287FA800003EF802083E0820083E080000 +B1BA:0000002820282028203820283FA804287FA800003EF802883E8820883EF80000 +B1BB:0000002820282028203820283FA804287FA800003E8802883EF820883EF80000 +B1BC:0000002820282028203820283FA804287FA800001F0801081F0810141F620000 +B1BD:0000002820282028203820283FA804287FA800003EF802803EF820803EF80000 +B1BE:0000002820282028203820283FA804287FA800003EFC02483E4820483EFC0000 +B1BF:0000002820282028203820283FA804287FA800001F08017F1F1C10221F1C0000 +B1C0:0000002820282028203820283FA804287FA8000003F802080208020803F80000 +B1C1:0000002820282028203820283FA804287FA800000208020803F8020803F80000 +B1C2:0000002820282028203820283FA804287FA80000110811081F0811141F620000 +B1C3:0000002820282028203820283FA804287FA80000001000100010006801840000 +B1C4:0000002820282028203820283FA804287FA800000048004800A8011406620000 +B1C5:0000002820282028203820283FA804287FA80000000003F00408040803F00000 +B1C6:0000002820282028203820283FA804287FA8000003F80020002000D003080000 +B1C7:0000002820282028203820283FA804287FA80000004003F8004000A003180000 +B1C8:0000002820282028203820283FA804287FA8000003F8000803F8000800080000 +B1C9:0000002820282028203820283FA804287FA8000003F8020003F8020003F80000 +B1CA:0000002820282028203820283FA804287FA8000000000FF8022002200FF80000 +B1CB:0000002820282028203820283FA804287FA8000000800FF803E0041003E00000 +B1CC:000000080008400840084008400840087F880008040804087FE8000800080000 +B1CD:0000000820082008200820083F8804087FE8000007F800080008000800080000 +B1CE:0000000820082008200820083F8804087FE8000000003EF80208020802080000 +B1CF:0000000820082008200820083F8804087FE8000000001F080108011401620000 +B1D0:0000000820082008200820083F8804087FE8000008000800080008000FF80000 +B1D1:0000000820082008200820083F8804087FE80000000010F8101010301ECC0000 +B1D2:0000000820082008200820083F8804087FE800000808087F081C08220F9C0000 +B1D3:0000000820082008200820083F8804087FE8000003F802000200020003F80000 +B1D4:0000000820082008200820083F8804087FE8000007F8000807F8040007F80000 +B1D5:0000000820082008200820083F8804087FE800003EF802083E0820083E080000 +B1D6:0000000820082008200820083F8804087FE800003EF802883E8820883EF80000 +B1D7:0000000820082008200820083F8804087FE800003E8802883EF820883EF80000 +B1D8:0000000820082008200820083F8804087FE800001F0801081F0810141F620000 +B1D9:0000000820082008200820083F8804087FE800003EF802803EF820803EF80000 +B1DA:0000000820082008200820083F8804087FE800003EFC02483E4820483EFC0000 +B1DB:0000000820082008200820083F8804087FE800001F08017F1F1C10221F1C0000 +B1DC:0000000820082008200820083F8804087FE8000003F802080208020803F80000 +B1DD:0000000820082008200820083F8804087FE800000208020803F8020803F80000 +B1DE:0000000820082008200820083F8804087FE80000110811081F0811141F620000 +B1DF:0000000820082008200820083F8804087FE80000001000100010006801840000 +B1E0:0000000820082008200820083F8804087FE800000048004800A8011406620000 +B1E1:0000000820082008200820083F8804087FE80000000003F00408040803F00000 +B1E2:0000000820082008200820083F8804087FE8000003F80020002000D003080000 +B1E3:0000000820082008200820083F8804087FE80000004003F8004000A003180000 +B1E4:0000000820082008200820083F8804087FE8000003F8000803F8000800080000 +B1E5:0000000820082008200820083F8804087FE8000003F8020003F8020003F80000 +B1E6:0000000820082008200820083F8804087FE8000000000FF8022002200FF80000 +B1E7:0000000820082008200820083F8804087FE8000000800FF803E0041003E00000 +B1E8:00000000200020002000200020003FF8000004400440044004407FFC00000000 +B1E9:000000001000100010001FF0044004407FFC00001FF000100010001000100000 +B1EA:000000001000100010001FF0044004407FFC000000003EF80208020802080000 +B1EB:000000001000100010001FF0044004407FFC000000001E100210022802C40000 +B1EC:000000001000100010001FF0044004407FFC000000001000100010001FF00000 +B1ED:000000001000100010001FF0044004407FFC0000000020F8201020303ECC0000 +B1EE:000000001000100010001FF0044004407FFC0000202021FC207020883E700000 +B1EF:000000001000100010001FF0044004407FFC00001FF01000100010001FF00000 +B1F0:000000001000100010001FF0044004407FFC00001FF000101FF010001FF00000 +B1F1:000000001000100010001FF0044004407FFC00003EF802083E0820083E080000 +B1F2:000000001000100010001FF0044004407FFC00003EF802883E8820883EF80000 +B1F3:000000001000100010001FF0044004407FFC00003E8802883EF820883EF80000 +B1F4:000000001000100010001FF0044004407FFC00003E1002103E1020283EC40000 +B1F5:000000001000100010001FF0044004407FFC00003EF802803EF820803EF80000 +B1F6:000000001000100010001FF0044004407FFC00003EFC02483E4820483EFC0000 +B1F7:000000001000100010001FF0044004407FFC00003E2003FC3E7020883E700000 +B1F8:000000001000100010001FF0044004407FFC00001FF01010101010101FF00000 +B1F9:000000001000100010001FF0044004407FFC0000101010101FF010101FF00000 +B1FA:000000001000100010001FF0044004407FFC0000222022203E2022503E880000 +B1FB:000000001000100010001FF0044004407FFC000000000100010002800C400000 +B1FC:000000001000100010001FF0044004407FFC00000000024002400DA033100000 +B1FD:000000001000100010001FF0044004407FFC0000000007C00820082007C00000 +B1FE:000000001000100010001FF0044004407FFC0000000007E00080014006200000 +B1FF:000000001000100010001FF0044004407FFC0000008007E00080014006200000 +B200:000000001000100010001FF0044004407FFC00001FF000101FF0001000100000 +B201:000000001000100010001FF0044004407FFC00001FF010001FF010001FF00000 +B202:000000001000100010001FF0044004407FFC000000001FF0044004401FF00000 +B203:000000001000100010001FF0044004407FFC000001001FF007C0082007C00000 +B204:00000000200020002000200020003FF8000000003FF801000100010001000000 +B205:000000001000100010001FF000007FFC010001001FF000100010001000100000 +B206:000000001000100010001FF000007FFC0100010000003EF80208020802080000 +B207:000000001000100010001FF000007FFC0100010000001E100210022802C40000 +B208:000000001000100010001FF0000000007FFC010001001100100010001FF00000 +B209:000000001000100010001FF000007FFC01000100000020F8201020303ECC0000 +B20A:000000001000100010001FF000007FFC01000100202021FC207020883E700000 +B20B:000000001000100010001FF000007FFC010001001FF01000100010001FF00000 +B20C:000000001000100010001FF000007FFC010001001FF000101FF010001FF00000 +B20D:000000001000100010001FF000007FFC010001003EF802083E0820083E080000 +B20E:000000001000100010001FF000007FFC010001003EF802883E8820883EF80000 +B20F:000000001000100010001FF000007FFC010001003E8802883EF820883EF80000 +B210:000000001000100010001FF000007FFC010001003E1002103E1020283EC40000 +B211:000000001000100010001FF000007FFC010001003EF802803EF820803EF80000 +B212:000000001000100010001FF000007FFC010001003EFC02483E4820483EFC0000 +B213:000000001000100010001FF000007FFC010001003E2003FC3E7020883E700000 +B214:000000001000100010001FF000007FFC010001001FF01010101010101FF00000 +B215:000000001000100010001FF000007FFC01000100101010101FF010101FF00000 +B216:000000001000100010001FF000007FFC01000100222022203E2022503E880000 +B217:000000001000100010001FF000007FFC0100010000000100010002800C400000 +B218:000000001000100010001FF000007FFC010001000000024002400DA033100000 +B219:000000001000100010001FF000007FFC01000100000007C00820082007C00000 +B21A:000000001000100010001FF000007FFC01000100000007E00080014006200000 +B21B:000000001000100010001FF000007FFC01000100008007E00080014006200000 +B21C:000000001000100010001FF000007FFC010001001FF000101FF0001000100000 +B21D:000000001000100010001FF000007FFC010001001FF010001FF010001FF00000 +B21E:000000001000100010001FF000007FFC0100010000001FF0044004401FF00000 +B21F:000000001000100010001FF000007FFC0100010001001FF007C0082007C00000 +B220:00000008000840084008400840087F88000800087FE8040804F8040804080000 +B221:00082008200820083F8800087FE8027802080000000007F80008000800080000 +B222:00082008200820083F8800087FE802780208000000003EF80208020802080000 +B223:00082008200820083F8800087FE802780208000000001F080108011401620000 +B224:00082008200820083F88000800087FE80278020802081000100010001FF80000 +B225:00082008200820083F8800087FE8027802080000000020F8201020303ECC0000 +B226:00082008200820083F8800087FE8027802080000202021FC207020883E700000 +B227:00082008200820083F8800087FE802780208000003F802000200020003F80000 +B228:00082008200820083F8800087FE802780208000007F8000807F8040007F80000 +B229:00082008200820083F8800087FE80278020800003EF802083E0820083E080000 +B22A:00082008200820083F8800087FE80278020800003EF802883E8820883EF80000 +B22B:00082008200820083F8800087FE80278020800003E8802883EF820883EF80000 +B22C:00082008200820083F8800087FE80278020800000F8800880F8808140FA20000 +B22D:00082008200820083F8800087FE80278020800003EF802803EF820803EF80000 +B22E:00082008200820083F8800087FE80278020800003EFC02483E4820483EFC0000 +B22F:00082008200820083F8800087FE80278020800003E1002FE3E3820443E380000 +B230:00082008200820083F8800087FE802780208000003F802080208020803F80000 +B231:00082008200820083F8800087FE80278020800000208020803F8020803F80000 +B232:00082008200820083F8800087FE8027802080000210821083F0821143F620000 +B233:00082008200820083F8800087FE8027802080000001000100010006801840000 +B234:00082008200820083F8800087FE80278020800000048004800A8011406620000 +B235:00082008200820083F8800087FE8027802080000000003F00408040803F00000 +B236:00082008200820083F8800087FE802780208000003F80020002000D003080000 +B237:00082008200820083F8800087FE8027802080000004003F8004000A003180000 +B238:00082008200820083F8800087FE802780208000003F8000803F8000800080000 +B239:00082008200820083F8800087FE802780208000003F8020003F8020003F80000 +B23A:00082008200820083F8800087FE802780208000000000FF8022002200FF80000 +B23B:00082008200820083F8800087FE802780208000000800FF803E0041003E00000 +B23C:0000000A000A400A400A400A400A7F8A000A000A7FEA040A047A040A040A0000 +B23D:00282028202820283FA800287FA805E804280000000007F80008000800080000 +B23E:00282028202820283FA800287FA805E80428000000003EF80208020802080000 +B23F:00282028202820283FA800287FA805E80428000000001F080108011401620000 +B240:00282028202820283FA8002800287FA8042805E804281428100010001FF80000 +B241:00282028202820283FA800287FA805E804280000000020F8201020303ECC0000 +B242:00282028202820283FA800287FA805E804280000202021FC207020883E700000 +B243:00282028202820283FA800287FA805E80428000003F802000200020003F80000 +B244:00282028202820283FA800287FA805E80428000007F8000807F8040007F80000 +B245:00282028202820283FA800287FA805E8042800003EF802083E0820083E080000 +B246:00282028202820283FA800287FA805E8042800003EF802883E8820883EF80000 +B247:00282028202820283FA800287FA805E8042800003E8802883EF820883EF80000 +B248:00282028202820283FA800287FA805E8042800000F8800880F8808140FA20000 +B249:00282028202820283FA800287FA805E8042800003EF802803EF820803EF80000 +B24A:00282028202820283FA800287FA805E8042800003EFC02483E4820483EFC0000 +B24B:00282028202820283FA800287FA805E8042800003E1002FE3E3820443E380000 +B24C:00282028202820283FA800287FA805E80428000003F802080208020803F80000 +B24D:00282028202820283FA800287FA805E8042800000208020803F8020803F80000 +B24E:00282028202820283FA800287FA805E804280000210821083F0821143F620000 +B24F:00282028202820283FA800287FA805E804280000001000100010006801840000 +B250:00282028202820283FA800287FA805E8042800000048004800A8011406620000 +B251:00282028202820283FA800287FA805E804280000000003F00408040803F00000 +B252:00282028202820283FA800287FA805E80428000003F80020002000D003080000 +B253:00282028202820283FA800287FA805E804280000004003F8004000A003180000 +B254:00282028202820283FA800287FA805E80428000003F8000803F8000800080000 +B255:00282028202820283FA800287FA805E80428000003F8020003F8020003F80000 +B256:00282028202820283FA800287FA805E80428000000000FF8022002200FF80000 +B257:00282028202820283FA800287FA805E80428000000800FF803E0041003E00000 +B258:00000008000840084008400840087F88000800087FE804080408040804080000 +B259:00082008200820083F8800087FE8020802000000000007F80008000800080000 +B25A:00082008200820083F8800087FE802080200000000003EF80208020802080000 +B25B:00082008200820083F8800087FE802080200000000001F080108011401620000 +B25C:00082008200820083F88000800087FE80208020802081008100010001FF80000 +B25D:00082008200820083F8800087FE8020802000000000020F8201020303ECC0000 +B25E:00082008200820083F8800087FE8020802000000202021FC207020883E700000 +B25F:00082008200820083F8800087FE802080200000003F802000200020003F80000 +B260:00082008200820083F8800087FE802080200000007F8000807F8040007F80000 +B261:00082008200820083F8800087FE80208020000003EF802083E0820083E080000 +B262:00082008200820083F8800087FE80208020000003EF802883E8820883EF80000 +B263:00082008200820083F8800087FE80208020000003E8802883EF820883EF80000 +B264:00082008200820083F8800087FE80208020000000F8800880F8808140FA20000 +B265:00082008200820083F8800087FE80208020000003EF802803EF820803EF80000 +B266:00082008200820083F8800087FE80208020000003EFC02483E4820483EFC0000 +B267:00082008200820083F8800087FE80208020000003E1002FE3E3820443E380000 +B268:00082008200820083F8800087FE802080200000003F802080208020803F80000 +B269:00082008200820083F8800087FE80208020000000208020803F8020803F80000 +B26A:00082008200820083F8800087FE8020802000000210821083F0821143F620000 +B26B:00082008200820083F8800087FE8020802000000001000100010006801840000 +B26C:00082008200820083F8800087FE80208020000000048004800A8011406620000 +B26D:00082008200820083F8800087FE8020802000000000003F00408040803F00000 +B26E:00082008200820083F8800087FE802080200000003F80020002000D003080000 +B26F:00082008200820083F8800087FE8020802000000004003F8004000A003180000 +B270:00082008200820083F8800087FE802080200000003F8000803F8000800080000 +B271:00082008200820083F8800087FE802080200000003F8020003F8020003F80000 +B272:00082008200820083F8800087FE802080200000000000FF8022002200FF80000 +B273:00082008200820083F8800087FE802080200000000800FF803E0041003E00000 +B274:00000000200020002000200020003FF8000000007FFC04400440044004400000 +B275:000000001000100010001FF000007FFC044004401FF000100010001000100000 +B276:000000001000100010001FF000007FFC0440044000003EF80208020802080000 +B277:000000001000100010001FF000007FFC0440044000001E100210022802C40000 +B278:000000001000100010001FF0000000007FFC044004401440100010001FF00000 +B279:000000001000100010001FF000007FFC04400440000020F8201020303ECC0000 +B27A:000000001000100010001FF000007FFC04400440202021FC207020883E700000 +B27B:000000001000100010001FF000007FFC044004401FF01000100010001FF00000 +B27C:000000001000100010001FF000007FFC044004401FF000101FF010001FF00000 +B27D:000000001000100010001FF000007FFC044004403EF802083E0820083E080000 +B27E:000000001000100010001FF000007FFC044004403EF802883E8820883EF80000 +B27F:000000001000100010001FF000007FFC044004403E8802883EF820883EF80000 +B280:000000001000100010001FF000007FFC044004403E1002103E1020283EC40000 +B281:000000001000100010001FF000007FFC044004403EF802803EF820803EF80000 +B282:000000001000100010001FF000007FFC044004403EFC02483E4820483EFC0000 +B283:000000001000100010001FF000007FFC044004403E2003FC3E7020883E700000 +B284:000000001000100010001FF000007FFC044004401FF01010101010101FF00000 +B285:000000001000100010001FF000007FFC04400440101010101FF010101FF00000 +B286:000000001000100010001FF000007FFC04400440222022203E2022503E880000 +B287:000000001000100010001FF000007FFC0440044000000100010002800C400000 +B288:000000001000100010001FF000007FFC044004400000024002400DA033100000 +B289:000000001000100010001FF000007FFC04400440000007C00820082007C00000 +B28A:000000001000100010001FF000007FFC04400440000007E00080014006200000 +B28B:000000001000100010001FF000007FFC04400440008007E00080014006200000 +B28C:000000001000100010001FF000007FFC044004401FF000101FF0001000100000 +B28D:000000001000100010001FF000007FFC044004401FF010001FF010001FF00000 +B28E:000000001000100010001FF000007FFC0440044000001FF0044004401FF00000 +B28F:000000001000100010001FF000007FFC0440044001001FF007C0082007C00000 +B290:00000000200020002000200020003FF80000000000007FFC0000000000000000 +B291:000000001000100010001FF0000000007FFC00001FF000100010001000100000 +B292:000000001000100010001FF0000000007FFC000000003EF80208020802080000 +B293:000000001000100010001FF0000000007FFC000000001E100210022802C40000 +B294:000000001000100010001FF0000000007FFC000000001000100010001FF00000 +B295:000000001000100010001FF0000000007FFC0000000020F8201020303ECC0000 +B296:000000001000100010001FF0000000007FFC0000202021FC207020883E700000 +B297:000000001000100010001FF0000000007FFC00001FF01000100010001FF00000 +B298:000000001000100010001FF0000000007FFC00001FF000101FF010001FF00000 +B299:000000001000100010001FF0000000007FFC00003EF802083E0820083E080000 +B29A:000000001000100010001FF0000000007FFC00003EF802883E8820883EF80000 +B29B:000000001000100010001FF0000000007FFC00003E8802883EF820883EF80000 +B29C:000000001000100010001FF0000000007FFC00003E1002103E1020283EC40000 +B29D:000000001000100010001FF0000000007FFC00003EF802803EF820803EF80000 +B29E:000000001000100010001FF0000000007FFC00003EFC02483E4820483EFC0000 +B29F:000000001000100010001FF0000000007FFC00003E2003FC3E7020883E700000 +B2A0:000000001000100010001FF0000000007FFC00001FF01010101010101FF00000 +B2A1:000000001000100010001FF0000000007FFC0000101010101FF010101FF00000 +B2A2:000000001000100010001FF0000000007FFC0000222022203E2022503E880000 +B2A3:000000001000100010001FF0000000007FFC000000000100010002800C400000 +B2A4:000000001000100010001FF0000000007FFC00000000024002400DA033100000 +B2A5:000000001000100010001FF0000000007FFC0000000007C00820082007C00000 +B2A6:000000001000100010001FF0000000007FFC0000000007E00080014006200000 +B2A7:000000001000100010001FF0000000007FFC0000008007E00080014006200000 +B2A8:000000001000100010001FF0000000007FFC00001FF000101FF0001000100000 +B2A9:000000001000100010001FF0000000007FFC00001FF010001FF010001FF00000 +B2AA:000000001000100010001FF0000000007FFC000000001FF0044004401FF00000 +B2AB:000000001000100010001FF0000000007FFC000001001FF007C0082007C00000 +B2AC:000000080008400840084008400840087F88000800087FE80008000800080000 +B2AD:0000000820082008200820083F8800087FE8000007F800080008000800080000 +B2AE:0000000820082008200820083F8800087FE8000000003EF80208020802080000 +B2AF:0000000820082008200820083F8800087FE8000000001F080108011401620000 +B2B0:0000000820082008200820083F8800087FE8000008000800080008000FF80000 +B2B1:0000000820082008200820083F8800087FE80000000010F8101010301ECC0000 +B2B2:0000000820082008200820083F8800087FE800000808087F081C08220F9C0000 +B2B3:0000000820082008200820083F8800087FE8000003F802000200020003F80000 +B2B4:0000000820082008200820083F8800087FE8000007F8000807F8040007F80000 +B2B5:0000000820082008200820083F8800087FE800003EF802083E0820083E080000 +B2B6:0000000820082008200820083F8800087FE800003EF802883E8820883EF80000 +B2B7:0000000820082008200820083F8800087FE800003E8802883EF820883EF80000 +B2B8:0000000820082008200820083F8800087FE800001F0801081F0810141F620000 +B2B9:0000000820082008200820083F8800087FE800003EF802803EF820803EF80000 +B2BA:0000000820082008200820083F8800087FE800003EFC02483E4820483EFC0000 +B2BB:0000000820082008200820083F8800087FE800001F08017F1F1C10221F1C0000 +B2BC:0000000820082008200820083F8800087FE8000003F802080208020803F80000 +B2BD:0000000820082008200820083F8800087FE800000208020803F8020803F80000 +B2BE:0000000820082008200820083F8800087FE80000110811081F0811141F620000 +B2BF:0000000820082008200820083F8800087FE80000001000100010006801840000 +B2C0:0000000820082008200820083F8800087FE800000048004800A8011406620000 +B2C1:0000000820082008200820083F8800087FE80000000003F00408040803F00000 +B2C2:0000000820082008200820083F8800087FE8000003F80020002000D003080000 +B2C3:0000000820082008200820083F8800087FE80000004003F8004000A003180000 +B2C4:0000000820082008200820083F8800087FE8000003F8000803F8000800080000 +B2C5:0000000820082008200820083F8800087FE8000003F8020003F8020003F80000 +B2C6:0000000820082008200820083F8800087FE8000000000FF8022002200FF80000 +B2C7:0000000820082008200820083F8800087FE8000000800FF803E0041003E00000 +B2C8:000000000008000800084008400840084008400840087F880008000800080000 +B2C9:000000080008000840084008400840087E080000000007F80008000800080000 +B2CA:000000080008000840084008400840087E08000000003EF80208020802080000 +B2CB:000000080008000840084008400840087E08000000001F080108011401620000 +B2CC:000000080008000840084008400840087E08000800001000100010001FF80000 +B2CD:000000080008000840084008400840087E080000000020F8201020303ECC0000 +B2CE:000000080008000840084008400840087E080000202021FC207020883E700000 +B2CF:000000080008000840084008400840087E08000003F802000200020003F80000 +B2D0:000000080008000840084008400840087E08000007F8000807F8040007F80000 +B2D1:000000080008000840084008400840087E0800003EF802083E0820083E080000 +B2D2:000000080008000840084008400840087E0800003EF802883E8820883EF80000 +B2D3:000000080008000840084008400840087E0800003E8802883EF820883EF80000 +B2D4:000000080008000840084008400840087E0800000F8800880F8808140FA20000 +B2D5:000000080008000840084008400840087E0800003EF802803EF820803EF80000 +B2D6:000000080008000840084008400840087E0800003EFC02483E4820483EFC0000 +B2D7:000000080008000840084008400840087E0800003E1002FE3E3820443E380000 +B2D8:000000080008000840084008400840087E08000003F802080208020803F80000 +B2D9:000000080008000840084008400840087E0800000208020803F8020803F80000 +B2DA:000000080008000840084008400840087E080000210821083F0821143F620000 +B2DB:000000080008000840084008400840087E080000001000100010006801840000 +B2DC:000000080008000840084008400840087E0800000048004800A8011406620000 +B2DD:000000080008000840084008400840087E080000000003F00408040803F00000 +B2DE:000000080008000840084008400840087E08000003F80020002000D003080000 +B2DF:000000080008000840084008400840087E080000004003F8004000A003180000 +B2E0:000000080008000840084008400840087E08000003F8000803F8000800080000 +B2E1:000000080008000840084008400840087E08000003F8020003F8020003F80000 +B2E2:000000080008000840084008400840087E08000000000FF8022002200FF80000 +B2E3:000000080008000840084008400840087E08000000800FF803E0041003E00000 +B2E4:00000000001000107F9040104010401E401040107F9000100010001000100000 +B2E5:0000000800087E084008400E40087E080008000007F800080008000800080000 +B2E6:0000000800087E084008400E40087E080008000000003EF80208020802080000 +B2E7:0000000800087E084008400E40087E080008000000001F080108011401620000 +B2E8:0000000800087E084008400E40087E080008000808000800080008000FF80000 +B2E9:0000000800087E084008400E40087E0800080000000010F8101010301ECC0000 +B2EA:0000000800087E084008400E40087E08000800000808087F081C08220F9C0000 +B2EB:0000000800087E084008400E40087E080008000003F802000200020003F80000 +B2EC:0000000800087E084008400E40087E080008000007F8000807F8040007F80000 +B2ED:0000000800087E084008400E40087E08000800003EF802083E0820083E080000 +B2EE:0000000800087E084008400E40087E08000800003EF802883E8820883EF80000 +B2EF:0000000800087E084008400E40087E08000800003E8802883EF820883EF80000 +B2F0:0000000800087E084008400E40087E08000800001F0801081F0810141F620000 +B2F1:0000000800087E084008400E40087E08000800003EF802803EF820803EF80000 +B2F2:0000000800087E084008400E40087E08000800003EFC02483E4820483EFC0000 +B2F3:0000000800087E084008400E40087E08000800001F08017F1F1C10221F1C0000 +B2F4:0000000800087E084008400E40087E080008000003F802080208020803F80000 +B2F5:0000000800087E084008400E40087E08000800000208020803F8020803F80000 +B2F6:0000000800087E084008400E40087E0800080000110811081F0811141F620000 +B2F7:0000000800087E084008400E40087E0800080000001000100010006801840000 +B2F8:0000000800087E084008400E40087E08000800000048004800A8011406620000 +B2F9:0000000800087E084008400E40087E0800080000000003F00408040803F00000 +B2FA:0000000800087E084008400E40087E080008000003F80020002000D003080000 +B2FB:0000000800087E084008400E40087E0800080000004003F8004000A003180000 +B2FC:0000000800087E084008400E40087E080008000003F8000803F8000800080000 +B2FD:0000000800087E084008400E40087E080008000003F8020003F8020003F80000 +B2FE:0000000800087E084008400E40087E080008000000000FF8022002200FF80000 +B2FF:0000000800087E084008400E40087E080008000000800FF803E0041003E00000 +B300:00000000001200127F9240124012401E401240127F9200120012001200120000 +B301:0000002800287E284028403840287E280028000007F800080008000800080000 +B302:0000002800287E284028403840287E280028000000003EF80208020802080000 +B303:0000002800287E284028403840287E280028000000003E100210022802C40000 +B304:0000002800287E284028403840287E280028002808000800080008000FF80000 +B305:0000002800287E284028403840287E2800280000000020F8201020303ECC0000 +B306:0000002800287E284028403840287E2800280000202021FC207020883E700000 +B307:0000002800287E284028403840287E280028000003F802000200020003F80000 +B308:0000002800287E284028403840287E280028000007F8000807F8040007F80000 +B309:0000002800287E284028403840287E28002800003EF802083E0820083E080000 +B30A:0000002800287E284028403840287E28002800003EF802883E8820883EF80000 +B30B:0000002800287E284028403840287E28002800003E8802883EF820883EF80000 +B30C:0000002800287E284028403840287E28002800001F0801081F0810141F620000 +B30D:0000002800287E284028403840287E28002800003EF802803EF820803EF80000 +B30E:0000002800287E284028403840287E28002800003EFC02483E4820483EFC0000 +B30F:0000002800287E284028403840287E28002800003E1002FE3E3820443E380000 +B310:0000002800287E284028403840287E280028000003F802080208020803F80000 +B311:0000002800287E284028403840287E28002800000208020803F8020803F80000 +B312:0000002800287E284028403840287E2800280000110811081F0811141F620000 +B313:0000002800287E284028403840287E2800280000000800080008003400C20000 +B314:0000002800287E284028403840287E28002800000048004800A8011406620000 +B315:0000002800287E284028403840287E2800280000000001F00208020801F00000 +B316:0000002800287E284028403840287E280028000003F80020002000D003080000 +B317:0000002800287E284028403840287E2800280000004003F8004000A003180000 +B318:0000002800287E284028403840287E280028000003F8000803F8000800080000 +B319:0000002800287E284028403840287E280028000003F8020003F8020003F80000 +B31A:0000002800287E284028403840287E280028000000000FF8022002200FF80000 +B31B:0000002800287E284028403840287E280028000000800FF803E0041003E00000 +B31C:00000000001000107F904010401E40104010401E7F9000100010001000100000 +B31D:0000000800087E08400E4008400E7E080008000007F800080008000800080000 +B31E:0000000800087E08400E4008400E7E080008000000003EF80208020802080000 +B31F:0000000800087E08400E4008400E7E080008000000001F080108011401620000 +B320:0000000800087E08400E4008400E7E080008000008000800080008000FF80000 +B321:0000000800087E08400E4008400E7E0800080000000010F8101010301ECC0000 +B322:0000000800087E08400E4008400E7E08000800000808087F081C08220F9C0000 +B323:0000000800087E08400E4008400E7E080008000003F802000200020003F80000 +B324:0000000800087E08400E4008400E7E080008000007F8000807F8040007F80000 +B325:0000000800087E08400E4008400E7E08000800003EF802083E0820083E080000 +B326:0000000800087E08400E4008400E7E08000800003EF802883E8820883EF80000 +B327:0000000800087E08400E4008400E7E08000800003E8802883EF820883EF80000 +B328:0000000800087E08400E4008400E7E08000800001F0801081F0810141F620000 +B329:0000000800087E08400E4008400E7E08000800003EF802803EF820803EF80000 +B32A:0000000800087E08400E4008400E7E08000800003EFC02483E4820483EFC0000 +B32B:0000000800087E08400E4008400E7E08000800001F08017F1F1C10221F1C0000 +B32C:0000000800087E08400E4008400E7E080008000003F802080208020803F80000 +B32D:0000000800087E08400E4008400E7E08000800000208020803F8020803F80000 +B32E:0000000800087E08400E4008400E7E0800080000110811081F0811141F620000 +B32F:0000000800087E08400E4008400E7E0800080000001000100010006801840000 +B330:0000000800087E08400E4008400E7E08000800000048004800A8011406620000 +B331:0000000800087E08400E4008400E7E0800080000000003F00408040803F00000 +B332:0000000800087E08400E4008400E7E080008000003F80020002000D003080000 +B333:0000000800087E08400E4008400E7E0800080000004003F8004000A003180000 +B334:0000000800087E08400E4008400E7E080008000003F8000803F8000800080000 +B335:0000000800087E08400E4008400E7E080008000003F8020003F8020003F80000 +B336:0000000800087E08400E4008400E7E080008000000000FF8022002200FF80000 +B337:0000000800087E08400E4008400E7E080008000000800FF803E0041003E00000 +B338:00000000001200127F924012401E40124012401E7F9200120012001200120000 +B339:0000002800287E284038402840387E280028000007F800080008000800080000 +B33A:0000002800287E284038402840387E280028000000003EF80208020802080000 +B33B:0000002800287E284038402840387E280028000000003E100210022802C40000 +B33C:0000002800287E284038402840387E280028002808000800080008000FF80000 +B33D:0000002800287E284038402840387E2800280000000020F8201020303ECC0000 +B33E:0000002800287E284038402840387E2800280000202021FC207020883E700000 +B33F:0000002800287E284038402840387E280028000003F802000200020003F80000 +B340:0000002800287E284038402840387E280028000007F8000807F8040007F80000 +B341:0000002800287E284038402840387E28002800003EF802083E0820083E080000 +B342:0000002800287E284038402840387E28002800003EF802883E8820883EF80000 +B343:0000002800287E284038402840387E28002800003E8802883EF820883EF80000 +B344:0000002800287E284038402840387E28002800001F0801081F0810141F620000 +B345:0000002800287E284038402840387E28002800003EF802803EF820803EF80000 +B346:0000002800287E284038402840387E28002800003EFC02483E4820483EFC0000 +B347:0000002800287E284038402840387E28002800003E1002FE3E3820443E380000 +B348:0000002800287E284038402840387E280028000003F802080208020803F80000 +B349:0000002800287E284038402840387E28002800000208020803F8020803F80000 +B34A:0000002800287E284038402840387E2800280000110811081F0811141F620000 +B34B:0000002800287E284038402840387E2800280000000800080008003400C20000 +B34C:0000002800287E284038402840387E28002800000048004800A8011406620000 +B34D:0000002800287E284038402840387E2800280000000001F00208020801F00000 +B34E:0000002800287E284038402840387E280028000003F80020002000D003080000 +B34F:0000002800287E284038402840387E2800280000004003F8004000A003180000 +B350:0000002800287E284038402840387E280028000003F8000803F8000800080000 +B351:0000002800287E284038402840387E280028000003F8020003F8020003F80000 +B352:0000002800287E284038402840387E280028000000000FF8022002200FF80000 +B353:0000002800287E284038402840387E280028000000800FF803E0041003E00000 +B354:00000000000200027F8240024002401E400240027F8200020002000200020000 +B355:0000000800087E084008403840087E0800080000000007F80008000800080000 +B356:0000000800087E084008403840087E080008000000003EF80208020802080000 +B357:0000000800087E084008403840087E080008000000001F080108011401620000 +B358:0000000800087E084008403840087E080008000000001000100010001FF80000 +B359:0000000800087E084008403840087E0800080000000020F8201020303ECC0000 +B35A:0000000800087E084008403840087E0800080000202021FC207020883E700000 +B35B:0000000800087E084008403840087E080008000003F802000200020003F80000 +B35C:0000000800087E084008403840087E080008000007F8000807F8040007F80000 +B35D:0000000800087E084008403840087E08000800003EF802083E0820083E080000 +B35E:0000000800087E084008403840087E08000800003EF802883E8820883EF80000 +B35F:0000000800087E084008403840087E08000800003E8802883EF820883EF80000 +B360:0000000800087E084008403840087E08000800000F8800880F8808140FA20000 +B361:0000000800087E084008403840087E08000800003EF802803EF820803EF80000 +B362:0000000800087E084008403840087E08000800003EFC02483E4820483EFC0000 +B363:0000000800087E084008403840087E08000800003E1002FE3E3820443E380000 +B364:0000000800087E084008403840087E080008000003F802080208020803F80000 +B365:0000000800087E084008403840087E08000800000208020803F8020803F80000 +B366:0000000800087E084008403840087E0800080000210821083F0821143F620000 +B367:0000000800087E084008403840087E0800080000001000100010006801840000 +B368:0000000800087E084008403840087E08000800000048004800A8011406620000 +B369:0000000800087E084008403840087E0800080000000003F00408040803F00000 +B36A:0000000800087E084008403840087E080008000003F80020002000D003080000 +B36B:0000000800087E084008403840087E0800080000004003F8004000A003180000 +B36C:0000000800087E084008403840087E080008000003F8000803F8000800080000 +B36D:0000000800087E084008403840087E080008000003F8020003F8020003F80000 +B36E:0000000800087E084008403840087E080008000000000FF8022002200FF80000 +B36F:0000000800087E084008403840087E080008000000800FF803E0041003E00000 +B370:00000000000A000A7F8A400A400A403A400A400A7F8A000A000A000A000A0000 +B371:0000002800287E28402840E840287E280028000007F800080008000800080000 +B372:0000002800287E28402840E840287E280028000000003EF80208020802080000 +B373:0000002800287E28402840E840287E280028000000003E100210022802C40000 +B374:0000002800287E28402840E840287E280028000008000800080008000FF80000 +B375:0000002800287E28402840E840287E2800280000000020F8201020303ECC0000 +B376:0000002800287E28402840E840287E2800280000202021FC207020883E700000 +B377:0000002800287E28402840E840287E280028000003F802000200020003F80000 +B378:0000002800287E28402840E840287E280028000007F8000807F8040007F80000 +B379:0000002800287E28402840E840287E28002800003EF802083E0820083E080000 +B37A:0000002800287E28402840E840287E28002800003EF802883E8820883EF80000 +B37B:0000002800287E28402840E840287E28002800003E8802883EF820883EF80000 +B37C:0000002800287E28402840E840287E28002800001F0801081F0810141F620000 +B37D:0000002800287E28402840E840287E28002800003EF802803EF820803EF80000 +B37E:0000002800287E28402840E840287E28002800003EFC02483E4820483EFC0000 +B37F:0000002800287E28402840E840287E28002800003E1002FE3E3820443E380000 +B380:0000002800287E28402840E840287E280028000003F802080208020803F80000 +B381:0000002800287E28402840E840287E28002800000208020803F8020803F80000 +B382:0000002800287E28402840E840287E2800280000110811081F0811141F620000 +B383:0000002800287E28402840E840287E2800280000000800080008003400C20000 +B384:0000002800287E28402840E840287E28002800000048004800A8011406620000 +B385:0000002800287E28402840E840287E2800280000000001F00208020801F00000 +B386:0000002800287E28402840E840287E280028000003F80020002000D003080000 +B387:0000002800287E28402840E840287E2800280000004003F8004000A003180000 +B388:0000002800287E28402840E840287E280028000003F8000803F8000800080000 +B389:0000002800287E28402840E840287E280028000003F8020003F8020003F80000 +B38A:0000002800287E28402840E840287E280028000000000FF8022002200FF80000 +B38B:0000002800287E28402840E840287E280028000000800FF803E0041003E00000 +B38C:00000000000200027F824002401E40024002401E7F8200020002000200020000 +B38D:0000000800087E084038400840387E0800080000000007F80008000800080000 +B38E:0000000800087E084038400840387E080008000000003EF80208020802080000 +B38F:0000000800087E084038400840387E080008000000001F080108011401620000 +B390:0000000800087E084038400840387E080008000800001000100010001FF80000 +B391:0000000800087E084038400840387E0800080000000020F8201020303ECC0000 +B392:0000000800087E084038400840387E0800080000202021FC207020883E700000 +B393:0000000800087E084038400840387E080008000003F802000200020003F80000 +B394:0000000800087E084038400840387E080008000007F8000807F8040007F80000 +B395:0000000800087E084038400840387E08000800003EF802083E0820083E080000 +B396:0000000800087E084038400840387E08000800003EF802883E8820883EF80000 +B397:0000000800087E084038400840387E08000800003E8802883EF820883EF80000 +B398:0000000800087E084038400840387E08000800000F8800880F8808140FA20000 +B399:0000000800087E084038400840387E08000800003EF802803EF820803EF80000 +B39A:0000000800087E084038400840387E08000800003EFC02483E4820483EFC0000 +B39B:0000000800087E084038400840387E08000800003E1002FE3E3820443E380000 +B39C:0000000800087E084038400840387E080008000003F802080208020803F80000 +B39D:0000000800087E084038400840387E08000800000208020803F8020803F80000 +B39E:0000000800087E084038400840387E0800080000210821083F0821143F620000 +B39F:0000000800087E084038400840387E0800080000001000100010006801840000 +B3A0:0000000800087E084038400840387E08000800000048004800A8011406620000 +B3A1:0000000800087E084038400840387E0800080000000003F00408040803F00000 +B3A2:0000000800087E084038400840387E080008000003F80020002000D003080000 +B3A3:0000000800087E084038400840387E0800080000004003F8004000A003180000 +B3A4:0000000800087E084038400840387E080008000003F8000803F8000800080000 +B3A5:0000000800087E084038400840387E080008000003F8020003F8020003F80000 +B3A6:0000000800087E084038400840387E080008000000000FF8022002200FF80000 +B3A7:0000000800087E084038400840387E080008000000800FF803E0041003E00000 +B3A8:00000000000A000A7F8A400A403A400A400A403A7F8A000A000A000A000A0000 +B3A9:0000002800287E2840E8402840E87E280028000007F800080008000800080000 +B3AA:0000002800287E2840E8402840E87E280028000000003EF80208020802080000 +B3AB:0000002800287E2840E8402840E87E280028000000003E100210022802C40000 +B3AC:0000002800287E2840E8402840E87E280028002808000800080008000FF80000 +B3AD:0000002800287E2840E8402840E87E2800280000000020F8201020303ECC0000 +B3AE:0000002800287E2840E8402840E87E2800280000202021FC207020883E700000 +B3AF:0000002800287E2840E8402840E87E280028000003F802000200020003F80000 +B3B0:0000002800287E2840E8402840E87E280028000007F8000807F8040007F80000 +B3B1:0000002800287E2840E8402840E87E28002800003EF802083E0820083E080000 +B3B2:0000002800287E2840E8402840E87E28002800003EF802883E8820883EF80000 +B3B3:0000002800287E2840E8402840E87E28002800003E8802883EF820883EF80000 +B3B4:0000002800287E2840E8402840E87E28002800001F0801081F0810141F620000 +B3B5:0000002800287E2840E8402840E87E28002800003EF802803EF820803EF80000 +B3B6:0000002800287E2840E8402840E87E28002800003EFC02483E4820483EFC0000 +B3B7:0000002800287E2840E8402840E87E28002800003E1002FE3E3820443E380000 +B3B8:0000002800287E2840E8402840E87E280028000003F802080208020803F80000 +B3B9:0000002800287E2840E8402840E87E28002800000208020803F8020803F80000 +B3BA:0000002800287E2840E8402840E87E2800280000110811081F0811141F620000 +B3BB:0000002800287E2840E8402840E87E2800280000000800080008003400C20000 +B3BC:0000002800287E2840E8402840E87E28002800000048004800A8011406620000 +B3BD:0000002800287E2840E8402840E87E2800280000000001F00208020801F00000 +B3BE:0000002800287E2840E8402840E87E280028000003F80020002000D003080000 +B3BF:0000002800287E2840E8402840E87E2800280000004003F8004000A003180000 +B3C0:0000002800287E2840E8402840E87E280028000003F8000803F8000800080000 +B3C1:0000002800287E2840E8402840E87E280028000003F8020003F8020003F80000 +B3C2:0000002800287E2840E8402840E87E280028000000000FF8022002200FF80000 +B3C3:0000002800287E2840E8402840E87E280028000000800FF803E0041003E00000 +B3C4:000000003FF820002000200020003FF8000000000100010001007FFC00000000 +B3C5:000000001FF0100010001FF0010001007FFC00001FF000100010001000100000 +B3C6:000000001FF0100010001FF0010001007FFC000000003EF80208020802080000 +B3C7:000000001FF0100010001FF0010001007FFC000000001E100210022802C40000 +B3C8:000000001FF0100010001FF0010001007FFC000000001000100010001FF00000 +B3C9:000000001FF0100010001FF0010001007FFC0000000020F8201020303ECC0000 +B3CA:000000001FF0100010001FF0010001007FFC0000202021FC207020883E700000 +B3CB:000000001FF0100010001FF0010001007FFC00001FF01000100010001FF00000 +B3CC:000000001FF0100010001FF0010001007FFC00001FF000101FF010001FF00000 +B3CD:000000001FF0100010001FF0010001007FFC00003EF802083E0820083E080000 +B3CE:000000001FF0100010001FF0010001007FFC00003EF802883E8820883EF80000 +B3CF:000000001FF0100010001FF0010001007FFC00003E8802883EF820883EF80000 +B3D0:000000001FF0100010001FF0010001007FFC00003E1002103E1020283EC40000 +B3D1:000000001FF0100010001FF0010001007FFC00003EF802803EF820803EF80000 +B3D2:000000001FF0100010001FF0010001007FFC00003EFC02483E4820483EFC0000 +B3D3:000000001FF0100010001FF0010001007FFC00003E2003FC3E7020883E700000 +B3D4:000000001FF0100010001FF0010001007FFC00001FF01010101010101FF00000 +B3D5:000000001FF0100010001FF0010001007FFC0000101010101FF010101FF00000 +B3D6:000000001FF0100010001FF0010001007FFC0000222022203E2022503E880000 +B3D7:000000001FF0100010001FF0010001007FFC000000000100010002800C400000 +B3D8:000000001FF0100010001FF0010001007FFC00000000024002400DA033100000 +B3D9:000000001FF0100010001FF0010001007FFC0000000007C00820082007C00000 +B3DA:000000001FF0100010001FF0010001007FFC0000000007E00080014006200000 +B3DB:000000001FF0100010001FF0010001007FFC0000008007E00080014006200000 +B3DC:000000001FF0100010001FF0010001007FFC00001FF000101FF0001000100000 +B3DD:000000001FF0100010001FF0010001007FFC00001FF010001FF010001FF00000 +B3DE:000000001FF0100010001FF0010001007FFC000000001FF0044004401FF00000 +B3DF:000000001FF0100010001FF0010001007FFC000001001FF007C0082007C00000 +B3E0:0000001000107F904010401040107F9E00100010041004107FD0001000100000 +B3E1:000000083F882008200E3F88040804087FE8000007F800080008000800080000 +B3E2:000000083F882008200E3F88040804087FE8000000003EF80208020802080000 +B3E3:000000083F882008200E3F88040804087FE8000000001F080108011401620000 +B3E4:000000083F882008200E3F88040804087FE8000008000800080008000FF80000 +B3E5:000000083F882008200E3F88040804087FE80000000010F8101010301ECC0000 +B3E6:000000083F882008200E3F88040804087FE800000808087F081C08220F9C0000 +B3E7:000000083F882008200E3F88040804087FE8000003F802000200020003F80000 +B3E8:000000083F882008200E3F88040804087FE8000007F8000807F8040007F80000 +B3E9:000000083F882008200E3F88040804087FE800003EF802083E0820083E080000 +B3EA:000000083F882008200E3F88040804087FE800003EF802883E8820883EF80000 +B3EB:000000083F882008200E3F88040804087FE800003E8802883EF820883EF80000 +B3EC:000000083F882008200E3F88040804087FE800001F0801081F0810141F620000 +B3ED:000000083F882008200E3F88040804087FE800003EF802803EF820803EF80000 +B3EE:000000083F882008200E3F88040804087FE800003EFC02483E4820483EFC0000 +B3EF:000000083F882008200E3F88040804087FE800001F08017F1F1C10221F1C0000 +B3F0:000000083F882008200E3F88040804087FE8000003F802080208020803F80000 +B3F1:000000083F882008200E3F88040804087FE800000208020803F8020803F80000 +B3F2:000000083F882008200E3F88040804087FE80000110811081F0811141F620000 +B3F3:000000083F882008200E3F88040804087FE80000001000100010006801840000 +B3F4:000000083F882008200E3F88040804087FE800000048004800A8011406620000 +B3F5:000000083F882008200E3F88040804087FE80000000003F00408040803F00000 +B3F6:000000083F882008200E3F88040804087FE8000003F80020002000D003080000 +B3F7:000000083F882008200E3F88040804087FE80000004003F8004000A003180000 +B3F8:000000083F882008200E3F88040804087FE8000003F8000803F8000800080000 +B3F9:000000083F882008200E3F88040804087FE8000003F8020003F8020003F80000 +B3FA:000000083F882008200E3F88040804087FE8000000000FF8022002200FF80000 +B3FB:000000083F882008200E3F88040804087FE8000000800FF803E0041003E00000 +B3FC:0000001200127F924012401240127F9E00120012041204127FD2001200120000 +B3FD:000000283FA8202820383FA8042804287FA8000007F800080008000800080000 +B3FE:000000283FA8202820383FA8042804287FA8000000003EF80208020802080000 +B3FF:000000283FA8202820383FA8042804287FA8000000001F080108011401620000 +B400:000000283FA8202820383FA8042804287FA8000008000800080008000FF80000 +B401:000000283FA8202820383FA8042804287FA80000000010F8101010301ECC0000 +B402:000000283FA8202820383FA8042804287FA800000808087F081C08220F9C0000 +B403:000000283FA8202820383FA8042804287FA8000003F802000200020003F80000 +B404:000000283FA8202820383FA8042804287FA8000007F8000807F8040007F80000 +B405:000000283FA8202820383FA8042804287FA800003EF802083E0820083E080000 +B406:000000283FA8202820383FA8042804287FA800003EF802883E8820883EF80000 +B407:000000283FA8202820383FA8042804287FA800003E8802883EF820883EF80000 +B408:000000283FA8202820383FA8042804287FA800001F0801081F0810141F620000 +B409:000000283FA8202820383FA8042804287FA800003EF802803EF820803EF80000 +B40A:000000283FA8202820383FA8042804287FA800003EFC02483E4820483EFC0000 +B40B:000000283FA8202820383FA8042804287FA800001F08017F1F1C10221F1C0000 +B40C:000000283FA8202820383FA8042804287FA8000003F802080208020803F80000 +B40D:000000283FA8202820383FA8042804287FA800000208020803F8020803F80000 +B40E:000000283FA8202820383FA8042804287FA80000110811081F0811141F620000 +B40F:000000283FA8202820383FA8042804287FA80000001000100010006801840000 +B410:000000283FA8202820383FA8042804287FA800000048004800A8011406620000 +B411:000000283FA8202820383FA8042804287FA80000000003F00408040803F00000 +B412:000000283FA8202820383FA8042804287FA8000003F80020002000D003080000 +B413:000000283FA8202820383FA8042804287FA80000004003F8004000A003180000 +B414:000000283FA8202820383FA8042804287FA8000003F8000803F8000800080000 +B415:000000283FA8202820383FA8042804287FA8000003F8020003F8020003F80000 +B416:000000283FA8202820383FA8042804287FA8000000000FF8022002200FF80000 +B417:000000283FA8202820383FA8042804287FA8000000800FF803E0041003E00000 +B418:0000000800087F884008400840087F8800080008040804087FE8000800080000 +B419:000000083F88200820083F88040804087FE8000007F800080008000800080000 +B41A:000000083F88200820083F88040804087FE8000000003EF80208020802080000 +B41B:000000083F88200820083F88040804087FE8000000001F080108011401620000 +B41C:000000083F88200820083F88040804087FE8000008000800080008000FF80000 +B41D:000000083F88200820083F88040804087FE80000000010F8101010301ECC0000 +B41E:000000083F88200820083F88040804087FE800000808087F081C08220F9C0000 +B41F:000000083F88200820083F88040804087FE8000003F802000200020003F80000 +B420:000000083F88200820083F88040804087FE8000007F8000807F8040007F80000 +B421:000000083F88200820083F88040804087FE800003EF802083E0820083E080000 +B422:000000083F88200820083F88040804087FE800003EF802883E8820883EF80000 +B423:000000083F88200820083F88040804087FE800003E8802883EF820883EF80000 +B424:000000083F88200820083F88040804087FE800001F0801081F0810141F620000 +B425:000000083F88200820083F88040804087FE800003EF802803EF820803EF80000 +B426:000000083F88200820083F88040804087FE800003EFC02483E4820483EFC0000 +B427:000000083F88200820083F88040804087FE800001F08017F1F1C10221F1C0000 +B428:000000083F88200820083F88040804087FE8000003F802080208020803F80000 +B429:000000083F88200820083F88040804087FE800000208020803F8020803F80000 +B42A:000000083F88200820083F88040804087FE80000110811081F0811141F620000 +B42B:000000083F88200820083F88040804087FE80000001000100010006801840000 +B42C:000000083F88200820083F88040804087FE800000048004800A8011406620000 +B42D:000000083F88200820083F88040804087FE80000000003F00408040803F00000 +B42E:000000083F88200820083F88040804087FE8000003F80020002000D003080000 +B42F:000000083F88200820083F88040804087FE80000004003F8004000A003180000 +B430:000000083F88200820083F88040804087FE8000003F8000803F8000800080000 +B431:000000083F88200820083F88040804087FE8000003F8020003F8020003F80000 +B432:000000083F88200820083F88040804087FE8000000000FF8022002200FF80000 +B433:000000083F88200820083F88040804087FE8000000800FF803E0041003E00000 +B434:000000003FF820002000200020003FF8000004400440044004407FFC00000000 +B435:000000001FF0100010001FF0044004407FFC00001FF000100010001000100000 +B436:000000001FF0100010001FF0044004407FFC000000003EF80208020802080000 +B437:000000001FF0100010001FF0044004407FFC000000001E100210022802C40000 +B438:000000001FF0100010001FF0044004407FFC000000001000100010001FF00000 +B439:000000001FF0100010001FF0044004407FFC0000000020F8201020303ECC0000 +B43A:000000001FF0100010001FF0044004407FFC0000202021FC207020883E700000 +B43B:000000001FF0100010001FF0044004407FFC00001FF01000100010001FF00000 +B43C:000000001FF0100010001FF0044004407FFC00001FF000101FF010001FF00000 +B43D:000000001FF0100010001FF0044004407FFC00003EF802083E0820083E080000 +B43E:000000001FF0100010001FF0044004407FFC00003EF802883E8820883EF80000 +B43F:000000001FF0100010001FF0044004407FFC00003E8802883EF820883EF80000 +B440:000000001FF0100010001FF0044004407FFC00003E1002103E1020283EC40000 +B441:000000001FF0100010001FF0044004407FFC00003EF802803EF820803EF80000 +B442:000000001FF0100010001FF0044004407FFC00003EFC02483E4820483EFC0000 +B443:000000001FF0100010001FF0044004407FFC00003E2003FC3E7020883E700000 +B444:000000001FF0100010001FF0044004407FFC00001FF01010101010101FF00000 +B445:000000001FF0100010001FF0044004407FFC0000101010101FF010101FF00000 +B446:000000001FF0100010001FF0044004407FFC0000222022203E2022503E880000 +B447:000000001FF0100010001FF0044004407FFC000000000100010002800C400000 +B448:000000001FF0100010001FF0044004407FFC00000000024002400DA033100000 +B449:000000001FF0100010001FF0044004407FFC0000000007C00820082007C00000 +B44A:000000001FF0100010001FF0044004407FFC0000000007E00080014006200000 +B44B:000000001FF0100010001FF0044004407FFC0000008007E00080014006200000 +B44C:000000001FF0100010001FF0044004407FFC00001FF000101FF0001000100000 +B44D:000000001FF0100010001FF0044004407FFC00001FF010001FF010001FF00000 +B44E:000000001FF0100010001FF0044004407FFC000000001FF0044004401FF00000 +B44F:000000001FF0100010001FF0044004407FFC000001001FF007C0082007C00000 +B450:000000003FF820002000200020003FF8000000003FF801000100010001000000 +B451:000000001FF0100010001FF000007FFC010001001FF000100010001000100000 +B452:000000001FF0100010001FF000007FFC0100010000003EF80208020802080000 +B453:000000001FF0100010001FF000007FFC0100010000001E100210022802C40000 +B454:000000001FF0100010001FF0000000007FFC010001001100100010001FF00000 +B455:000000001FF0100010001FF000007FFC01000100000020F8201020303ECC0000 +B456:000000001FF0100010001FF000007FFC01000100202021FC207020883E700000 +B457:000000001FF0100010001FF000007FFC010001001FF01000100010001FF00000 +B458:000000001FF0100010001FF000007FFC010001001FF000101FF010001FF00000 +B459:000000001FF0100010001FF000007FFC010001003EF802083E0820083E080000 +B45A:000000001FF0100010001FF000007FFC010001003EF802883E8820883EF80000 +B45B:000000001FF0100010001FF000007FFC010001003E8802883EF820883EF80000 +B45C:000000001FF0100010001FF000007FFC010001003E1002103E1020283EC40000 +B45D:000000001FF0100010001FF000007FFC010001003EF802803EF820803EF80000 +B45E:000000001FF0100010001FF000007FFC010001003EFC02483E4820483EFC0000 +B45F:000000001FF0100010001FF000007FFC010001003E2003FC3E7020883E700000 +B460:000000001FF0100010001FF000007FFC010001001FF01010101010101FF00000 +B461:000000001FF0100010001FF000007FFC01000100101010101FF010101FF00000 +B462:000000001FF0100010001FF000007FFC01000100222022203E2022503E880000 +B463:000000001FF0100010001FF000007FFC0100010000000100010002800C400000 +B464:000000001FF0100010001FF000007FFC010001000000024002400DA033100000 +B465:000000001FF0100010001FF000007FFC01000100000007C00820082007C00000 +B466:000000001FF0100010001FF000007FFC01000100000007E00080014006200000 +B467:000000001FF0100010001FF000007FFC01000100008007E00080014006200000 +B468:000000001FF0100010001FF000007FFC010001001FF000101FF0001000100000 +B469:000000001FF0100010001FF000007FFC010001001FF010001FF010001FF00000 +B46A:000000001FF0100010001FF000007FFC0100010000001FF0044004401FF00000 +B46B:000000001FF0100010001FF000007FFC0100010001001FF007C0082007C00000 +B46C:0000000800087FC84008400840087FC8000800087FE8040804F8040804080000 +B46D:00083F88200820083F8800087FE8027802080000000007F80008000800080000 +B46E:00083F88200820083F8800087FE802780208000000003EF80208020802080000 +B46F:00083F88200820083F8800087FE802780208000000001F080108011401620000 +B470:00083F88200820083F88000800087FE80278020802081000100010001FF80000 +B471:00083F88200820083F8800087FE8027802080000000020F8201020303ECC0000 +B472:00083F88200820083F8800087FE8027802080000202021FC207020883E700000 +B473:00083F88200820083F8800087FE802780208000003F802000200020003F80000 +B474:00083F88200820083F8800087FE802780208000007F8000807F8040007F80000 +B475:00083F88200820083F8800087FE80278020800003EF802083E0820083E080000 +B476:00083F88200820083F8800087FE80278020800003EF802883E8820883EF80000 +B477:00083F88200820083F8800087FE80278020800003E8802883EF820883EF80000 +B478:00083F88200820083F8800087FE80278020800000F8800880F8808140FA20000 +B479:00083F88200820083F8800087FE80278020800003EF802803EF820803EF80000 +B47A:00083F88200820083F8800087FE80278020800003EFC02483E4820483EFC0000 +B47B:00083F88200820083F8800087FE80278020800003E1002FE3E3820443E380000 +B47C:00083F88200820083F8800087FE802780208000003F802080208020803F80000 +B47D:00083F88200820083F8800087FE80278020800000208020803F8020803F80000 +B47E:00083F88200820083F8800087FE8027802080000210821083F0821143F620000 +B47F:00083F88200820083F8800087FE8027802080000001000100010006801840000 +B480:00083F88200820083F8800087FE80278020800000048004800A8011406620000 +B481:00083F88200820083F8800087FE8027802080000000003F00408040803F00000 +B482:00083F88200820083F8800087FE802780208000003F80020002000D003080000 +B483:00083F88200820083F8800087FE8027802080000004003F8004000A003180000 +B484:00083F88200820083F8800087FE802780208000003F8000803F8000800080000 +B485:00083F88200820083F8800087FE802780208000003F8020003F8020003F80000 +B486:00083F88200820083F8800087FE802780208000000000FF8022002200FF80000 +B487:00083F88200820083F8800087FE802780208000000800FF803E0041003E00000 +B488:0000000A000A7FCA400A400A400A7FCA000A000A7FEA040A047A040A040A0000 +B489:00283FA8202820283FA800287FA805E804280000000007F80008000800080000 +B48A:00283FA8202820283FA800287FA805E80428000000003EF80208020802080000 +B48B:00283FA8202820283FA800287FA805E80428000000001F080108011401620000 +B48C:00283FA8202820283FA8002800287FA8042805E804281428100010001FF80000 +B48D:00283FA8202820283FA800287FA805E804280000000020F8201020303ECC0000 +B48E:00283FA8202820283FA800287FA805E804280000202021FC207020883E700000 +B48F:00283FA8202820283FA800287FA805E80428000003F802000200020003F80000 +B490:00283FA8202820283FA800287FA805E80428000007F8000807F8040007F80000 +B491:00283FA8202820283FA800287FA805E8042800003EF802083E0820083E080000 +B492:00283FA8202820283FA800287FA805E8042800003EF802883E8820883EF80000 +B493:00283FA8202820283FA800287FA805E8042800003E8802883EF820883EF80000 +B494:00283FA8202820283FA800287FA805E8042800000F8800880F8808140FA20000 +B495:00283FA8202820283FA800287FA805E8042800003EF802803EF820803EF80000 +B496:00283FA8202820283FA800287FA805E8042800003EFC02483E4820483EFC0000 +B497:00283FA8202820283FA800287FA805E8042800003E1002FE3E3820443E380000 +B498:00283FA8202820283FA800287FA805E80428000003F802080208020803F80000 +B499:00283FA8202820283FA800287FA805E8042800000208020803F8020803F80000 +B49A:00283FA8202820283FA800287FA805E804280000210821083F0821143F620000 +B49B:00283FA8202820283FA800287FA805E804280000001000100010006801840000 +B49C:00283FA8202820283FA800287FA805E8042800000048004800A8011406620000 +B49D:00283FA8202820283FA800287FA805E804280000000003F00408040803F00000 +B49E:00283FA8202820283FA800287FA805E80428000003F80020002000D003080000 +B49F:00283FA8202820283FA800287FA805E804280000004003F8004000A003180000 +B4A0:00283FA8202820283FA800287FA805E80428000003F8000803F8000800080000 +B4A1:00283FA8202820283FA800287FA805E80428000003F8020003F8020003F80000 +B4A2:00283FA8202820283FA800287FA805E80428000000000FF8022002200FF80000 +B4A3:00283FA8202820283FA800287FA805E80428000000800FF803E0041003E00000 +B4A4:0000000800087FC84008400840087FC8000800087FE804080408040804080000 +B4A5:00083F88200820083F8800087FE8020802000000000007F80008000800080000 +B4A6:00083F88200820083F8800087FE802080200000000003EF80208020802080000 +B4A7:00083F88200820083F8800087FE802080200000000001F080108011401620000 +B4A8:00083F88200820083F88000800087FE80208020802081008100010001FF80000 +B4A9:00083F88200820083F8800087FE8020802000000000020F8201020303ECC0000 +B4AA:00083F88200820083F8800087FE8020802000000202021FC207020883E700000 +B4AB:00083F88200820083F8800087FE802080200000003F802000200020003F80000 +B4AC:00083F88200820083F8800087FE802080200000007F8000807F8040007F80000 +B4AD:00083F88200820083F8800087FE80208020000003EF802083E0820083E080000 +B4AE:00083F88200820083F8800087FE80208020000003EF802883E8820883EF80000 +B4AF:00083F88200820083F8800087FE80208020000003E8802883EF820883EF80000 +B4B0:00083F88200820083F8800087FE80208020000000F8800880F8808140FA20000 +B4B1:00083F88200820083F8800087FE80208020000003EF802803EF820803EF80000 +B4B2:00083F88200820083F8800087FE80208020000003EFC02483E4820483EFC0000 +B4B3:00083F88200820083F8800087FE80208020000003E1002FE3E3820443E380000 +B4B4:00083F88200820083F8800087FE802080200000003F802080208020803F80000 +B4B5:00083F88200820083F8800087FE80208020000000208020803F8020803F80000 +B4B6:00083F88200820083F8800087FE8020802000000210821083F0821143F620000 +B4B7:00083F88200820083F8800087FE8020802000000001000100010006801840000 +B4B8:00083F88200820083F8800087FE80208020000000048004800A8011406620000 +B4B9:00083F88200820083F8800087FE8020802000000000003F00408040803F00000 +B4BA:00083F88200820083F8800087FE802080200000003F80020002000D003080000 +B4BB:00083F88200820083F8800087FE8020802000000004003F8004000A003180000 +B4BC:00083F88200820083F8800087FE802080200000003F8000803F8000800080000 +B4BD:00083F88200820083F8800087FE802080200000003F8020003F8020003F80000 +B4BE:00083F88200820083F8800087FE802080200000000000FF8022002200FF80000 +B4BF:00083F88200820083F8800087FE802080200000000800FF803E0041003E00000 +B4C0:000000003FF820002000200020003FF8000000007FFC04400440044004400000 +B4C1:000000001FF0100010001FF000007FFC044004401FF000100010001000100000 +B4C2:000000001FF0100010001FF000007FFC0440044000003EF80208020802080000 +B4C3:000000001FF0100010001FF000007FFC0440044000001E100210022802C40000 +B4C4:000000001FF0100010001FF0000000007FFC044004401440100010001FF00000 +B4C5:000000001FF0100010001FF000007FFC04400440000020F8201020303ECC0000 +B4C6:000000001FF0100010001FF000007FFC04400440202021FC207020883E700000 +B4C7:000000001FF0100010001FF000007FFC044004401FF01000100010001FF00000 +B4C8:000000001FF0100010001FF000007FFC044004401FF000101FF010001FF00000 +B4C9:000000001FF0100010001FF000007FFC044004403EF802083E0820083E080000 +B4CA:000000001FF0100010001FF000007FFC044004403EF802883E8820883EF80000 +B4CB:000000001FF0100010001FF000007FFC044004403E8802883EF820883EF80000 +B4CC:000000001FF0100010001FF000007FFC044004403E1002103E1020283EC40000 +B4CD:000000001FF0100010001FF000007FFC044004403EF802803EF820803EF80000 +B4CE:000000001FF0100010001FF000007FFC044004403EFC02483E4820483EFC0000 +B4CF:000000001FF0100010001FF000007FFC044004403E2003FC3E7020883E700000 +B4D0:000000001FF0100010001FF000007FFC044004401FF01010101010101FF00000 +B4D1:000000001FF0100010001FF000007FFC04400440101010101FF010101FF00000 +B4D2:000000001FF0100010001FF000007FFC04400440222022203E2022503E880000 +B4D3:000000001FF0100010001FF000007FFC0440044000000100010002800C400000 +B4D4:000000001FF0100010001FF000007FFC044004400000024002400DA033100000 +B4D5:000000001FF0100010001FF000007FFC04400440000007C00820082007C00000 +B4D6:000000001FF0100010001FF000007FFC04400440000007E00080014006200000 +B4D7:000000001FF0100010001FF000007FFC04400440008007E00080014006200000 +B4D8:000000001FF0100010001FF000007FFC044004401FF000101FF0001000100000 +B4D9:000000001FF0100010001FF000007FFC044004401FF010001FF010001FF00000 +B4DA:000000001FF0100010001FF000007FFC0440044000001FF0044004401FF00000 +B4DB:000000001FF0100010001FF000007FFC0440044001001FF007C0082007C00000 +B4DC:000000003FF820002000200020003FF80000000000007FFC0000000000000000 +B4DD:000000001FF0100010001FF0000000007FFC00001FF000100010001000100000 +B4DE:000000001FF0100010001FF0000000007FFC000000003EF80208020802080000 +B4DF:000000001FF0100010001FF0000000007FFC000000001E100210022802C40000 +B4E0:000000001FF0100010001FF0000000007FFC000000001000100010001FF00000 +B4E1:000000001FF0100010001FF0000000007FFC0000000020F8201020303ECC0000 +B4E2:000000001FF0100010001FF0000000007FFC0000202021FC207020883E700000 +B4E3:000000001FF0100010001FF0000000007FFC00001FF01000100010001FF00000 +B4E4:000000001FF0100010001FF0000000007FFC00001FF000101FF010001FF00000 +B4E5:000000001FF0100010001FF0000000007FFC00003EF802083E0820083E080000 +B4E6:000000001FF0100010001FF0000000007FFC00003EF802883E8820883EF80000 +B4E7:000000001FF0100010001FF0000000007FFC00003E8802883EF820883EF80000 +B4E8:000000001FF0100010001FF0000000007FFC00003E1002103E1020283EC40000 +B4E9:000000001FF0100010001FF0000000007FFC00003EF802803EF820803EF80000 +B4EA:000000001FF0100010001FF0000000007FFC00003EFC02483E4820483EFC0000 +B4EB:000000001FF0100010001FF0000000007FFC00003E2003FC3E7020883E700000 +B4EC:000000001FF0100010001FF0000000007FFC00001FF01010101010101FF00000 +B4ED:000000001FF0100010001FF0000000007FFC0000101010101FF010101FF00000 +B4EE:000000001FF0100010001FF0000000007FFC0000222022203E2022503E880000 +B4EF:000000001FF0100010001FF0000000007FFC000000000100010002800C400000 +B4F0:000000001FF0100010001FF0000000007FFC00000000024002400DA033100000 +B4F1:000000001FF0100010001FF0000000007FFC0000000007C00820082007C00000 +B4F2:000000001FF0100010001FF0000000007FFC0000000007E00080014006200000 +B4F3:000000001FF0100010001FF0000000007FFC0000008007E00080014006200000 +B4F4:000000001FF0100010001FF0000000007FFC00001FF000101FF0001000100000 +B4F5:000000001FF0100010001FF0000000007FFC00001FF010001FF010001FF00000 +B4F6:000000001FF0100010001FF0000000007FFC000000001FF0044004401FF00000 +B4F7:000000001FF0100010001FF0000000007FFC000001001FF007C0082007C00000 +B4F8:0000000800087F884008400840087F880008000800087FE80008000800080000 +B4F9:000000083F88200820083F88000800087FE8000007F800080008000800080000 +B4FA:000000083F88200820083F88000800087FE8000000003EF80208020802080000 +B4FB:000000083F88200820083F88000800087FE8000000001F080108011401620000 +B4FC:000000083F88200820083F88000800087FE8000008000800080008000FF80000 +B4FD:000000083F88200820083F88000800087FE80000000010F8101010301ECC0000 +B4FE:000000083F88200820083F88000800087FE800000808087F081C08220F9C0000 +B4FF:000000083F88200820083F88000800087FE8000003F802000200020003F80000 +B500:000000083F88200820083F88000800087FE8000007F8000807F8040007F80000 +B501:000000083F88200820083F88000800087FE800003EF802083E0820083E080000 +B502:000000083F88200820083F88000800087FE800003EF802883E8820883EF80000 +B503:000000083F88200820083F88000800087FE800003E8802883EF820883EF80000 +B504:000000083F88200820083F88000800087FE800001F0801081F0810141F620000 +B505:000000083F88200820083F88000800087FE800003EF802803EF820803EF80000 +B506:000000083F88200820083F88000800087FE800003EFC02483E4820483EFC0000 +B507:000000083F88200820083F88000800087FE800001F08017F1F1C10221F1C0000 +B508:000000083F88200820083F88000800087FE8000003F802080208020803F80000 +B509:000000083F88200820083F88000800087FE800000208020803F8020803F80000 +B50A:000000083F88200820083F88000800087FE80000110811081F0811141F620000 +B50B:000000083F88200820083F88000800087FE80000001000100010006801840000 +B50C:000000083F88200820083F88000800087FE800000048004800A8011406620000 +B50D:000000083F88200820083F88000800087FE80000000003F00408040803F00000 +B50E:000000083F88200820083F88000800087FE8000003F80020002000D003080000 +B50F:000000083F88200820083F88000800087FE80000004003F8004000A003180000 +B510:000000083F88200820083F88000800087FE8000003F8000803F8000800080000 +B511:000000083F88200820083F88000800087FE8000003F8020003F8020003F80000 +B512:000000083F88200820083F88000800087FE8000000000FF8022002200FF80000 +B513:000000083F88200820083F88000800087FE8000000800FF803E0041003E00000 +B514:00000000000800087F88400840084008400840087F8800080008000800080000 +B515:0000000800087E084008400840087E0800080000000007F80008000800080000 +B516:0000000800087E084008400840087E080008000000003EF80208020802080000 +B517:0000000800087E084008400840087E080008000000001F080108011401620000 +B518:0000000800087E084008400840087E080008000800001000100010001FF80000 +B519:0000000800087E084008400840087E0800080000000020F8201020303ECC0000 +B51A:0000000800087E084008400840087E0800080000202021FC207020883E700000 +B51B:0000000800087E084008400840087E080008000003F802000200020003F80000 +B51C:0000000800087E084008400840087E080008000007F8000807F8040007F80000 +B51D:0000000800087E084008400840087E08000800003EF802083E0820083E080000 +B51E:0000000800087E084008400840087E08000800003EF802883E8820883EF80000 +B51F:0000000800087E084008400840087E08000800003E8802883EF820883EF80000 +B520:0000000800087E084008400840087E08000800000F8800880F8808140FA20000 +B521:0000000800087E084008400840087E08000800003EF802803EF820803EF80000 +B522:0000000800087E084008400840087E08000800003EFC02483E4820483EFC0000 +B523:0000000800087E084008400840087E08000800003E1002FE3E3820443E380000 +B524:0000000800087E084008400840087E080008000003F802080208020803F80000 +B525:0000000800087E084008400840087E08000800000208020803F8020803F80000 +B526:0000000800087E084008400840087E0800080000210821083F0821143F620000 +B527:0000000800087E084008400840087E0800080000001000100010006801840000 +B528:0000000800087E084008400840087E08000800000048004800A8011406620000 +B529:0000000800087E084008400840087E0800080000000003F00408040803F00000 +B52A:0000000800087E084008400840087E080008000003F80020002000D003080000 +B52B:0000000800087E084008400840087E0800080000004003F8004000A003180000 +B52C:0000000800087E084008400840087E080008000003F8000803F8000800080000 +B52D:0000000800087E084008400840087E080008000003F8020003F8020003F80000 +B52E:0000000800087E084008400840087E080008000000000FF8022002200FF80000 +B52F:0000000800087E084008400840087E080008000000800FF803E0041003E00000 +B530:00000000001000107BD042104210421E421042107BD000100010001000100000 +B531:00000008000877084408440E440877080008000007F800080008000800080000 +B532:00000008000877084408440E440877080008000000003EF80208020802080000 +B533:00000008000877084408440E440877080008000000001F080108011401620000 +B534:00000008000877084408440E440877080008000808000800080008000FF80000 +B535:00000008000877084408440E4408770800080000000010F8101010301ECC0000 +B536:00000008000877084408440E44087708000800000808087F081C08220F9C0000 +B537:00000008000877084408440E440877080008000003F802000200020003F80000 +B538:00000008000877084408440E440877080008000007F8000807F8040007F80000 +B539:00000008000877084408440E44087708000800003EF802083E0820083E080000 +B53A:00000008000877084408440E44087708000800003EF802883E8820883EF80000 +B53B:00000008000877084408440E44087708000800003E8802883EF820883EF80000 +B53C:00000008000877084408440E44087708000800001F0801081F0810141F620000 +B53D:00000008000877084408440E44087708000800003EF802803EF820803EF80000 +B53E:00000008000877084408440E44087708000800003EFC02483E4820483EFC0000 +B53F:00000008000877084408440E44087708000800001F08017F1F1C10221F1C0000 +B540:00000008000877084408440E440877080008000003F802080208020803F80000 +B541:00000008000877084408440E44087708000800000208020803F8020803F80000 +B542:00000008000877084408440E4408770800080000110811081F0811141F620000 +B543:00000008000877084408440E4408770800080000001000100010006801840000 +B544:00000008000877084408440E44087708000800000048004800A8011406620000 +B545:00000008000877084408440E4408770800080000000003F00408040803F00000 +B546:00000008000877084408440E440877080008000003F80020002000D003080000 +B547:00000008000877084408440E4408770800080000004003F8004000A003180000 +B548:00000008000877084408440E440877080008000003F8000803F8000800080000 +B549:00000008000877084408440E440877080008000003F8020003F8020003F80000 +B54A:00000008000877084408440E440877080008000000000FF8022002200FF80000 +B54B:00000008000877084408440E440877080008000000800FF803E0041003E00000 +B54C:00000000001200127BD242124212421E421242127BD200120012001200120000 +B54D:000000280028772844284438442877280028000007F800080008000800080000 +B54E:000000280028772844284438442877280028000000003EF80208020802080000 +B54F:000000280028772844284438442877280028000000003E100210022802C40000 +B550:000000280028772844284438442877280028002808000800080008000FF80000 +B551:0000002800287728442844384428772800280000000020F8201020303ECC0000 +B552:0000002800287728442844384428772800280000202021FC207020883E700000 +B553:000000280028772844284438442877280028000003F802000200020003F80000 +B554:000000280028772844284438442877280028000007F8000807F8040007F80000 +B555:00000028002877284428443844287728002800003EF802083E0820083E080000 +B556:00000028002877284428443844287728002800003EF802883E8820883EF80000 +B557:00000028002877284428443844287728002800003E8802883EF820883EF80000 +B558:00000028002877284428443844287728002800001F0801081F0810141F620000 +B559:00000028002877284428443844287728002800003EF802803EF820803EF80000 +B55A:00000028002877284428443844287728002800003EFC02483E4820483EFC0000 +B55B:00000028002877284428443844287728002800003E1002FE3E3820443E380000 +B55C:000000280028772844284438442877280028000003F802080208020803F80000 +B55D:00000028002877284428443844287728002800000208020803F8020803F80000 +B55E:0000002800287728442844384428772800280000110811081F0811141F620000 +B55F:0000002800287728442844384428772800280000000800080008003400C20000 +B560:00000028002877284428443844287728002800000048004800A8011406620000 +B561:0000002800287728442844384428772800280000000001F00208020801F00000 +B562:000000280028772844284438442877280028000003F80020002000D003080000 +B563:0000002800287728442844384428772800280000004003F8004000A003180000 +B564:000000280028772844284438442877280028000003F8000803F8000800080000 +B565:000000280028772844284438442877280028000003F8020003F8020003F80000 +B566:000000280028772844284438442877280028000000000FF8022002200FF80000 +B567:000000280028772844284438442877280028000000800FF803E0041003E00000 +B568:00000000001000107BD04210421E42104210421E7BD000100010001000100000 +B569:0000000800087708440E4408440E77080008000007F800080008000800080000 +B56A:0000000800087708440E4408440E77080008000000003EF80208020802080000 +B56B:0000000800087708440E4408440E77080008000000001F080108011401620000 +B56C:0000000800087708440E4408440E77080008000008000800080008000FF80000 +B56D:0000000800087708440E4408440E770800080000000010F8101010301ECC0000 +B56E:0000000800087708440E4408440E7708000800000808087F081C08220F9C0000 +B56F:0000000800087708440E4408440E77080008000003F802000200020003F80000 +B570:0000000800087708440E4408440E77080008000007F8000807F8040007F80000 +B571:0000000800087708440E4408440E7708000800003EF802083E0820083E080000 +B572:0000000800087708440E4408440E7708000800003EF802883E8820883EF80000 +B573:0000000800087708440E4408440E7708000800003E8802883EF820883EF80000 +B574:0000000800087708440E4408440E7708000800001F0801081F0810141F620000 +B575:0000000800087708440E4408440E7708000800003EF802803EF820803EF80000 +B576:0000000800087708440E4408440E7708000800003EFC02483E4820483EFC0000 +B577:0000000800087708440E4408440E7708000800001F08017F1F1C10221F1C0000 +B578:0000000800087708440E4408440E77080008000003F802080208020803F80000 +B579:0000000800087708440E4408440E7708000800000208020803F8020803F80000 +B57A:0000000800087708440E4408440E770800080000110811081F0811141F620000 +B57B:0000000800087708440E4408440E770800080000001000100010006801840000 +B57C:0000000800087708440E4408440E7708000800000048004800A8011406620000 +B57D:0000000800087708440E4408440E770800080000000003F00408040803F00000 +B57E:0000000800087708440E4408440E77080008000003F80020002000D003080000 +B57F:0000000800087708440E4408440E770800080000004003F8004000A003180000 +B580:0000000800087708440E4408440E77080008000003F8000803F8000800080000 +B581:0000000800087708440E4408440E77080008000003F8020003F8020003F80000 +B582:0000000800087708440E4408440E77080008000000000FF8022002200FF80000 +B583:0000000800087708440E4408440E77080008000000800FF803E0041003E00000 +B584:00000000001200127BD24212421E42124212421E7BD200120012001200120000 +B585:000000280028772844384428443877280028000007F800080008000800080000 +B586:000000280028772844384428443877280028000000003EF80208020802080000 +B587:000000280028772844384428443877280028000000003E100210022802C40000 +B588:000000280028772844384428443877280028002808000800080008000FF80000 +B589:0000002800287728443844284438772800280000000020F8201020303ECC0000 +B58A:0000002800287728443844284438772800280000202021FC207020883E700000 +B58B:000000280028772844384428443877280028000003F802000200020003F80000 +B58C:000000280028772844384428443877280028000007F8000807F8040007F80000 +B58D:00000028002877284438442844387728002800003EF802083E0820083E080000 +B58E:00000028002877284438442844387728002800003EF802883E8820883EF80000 +B58F:00000028002877284438442844387728002800003E8802883EF820883EF80000 +B590:00000028002877284438442844387728002800001F0801081F0810141F620000 +B591:00000028002877284438442844387728002800003EF802803EF820803EF80000 +B592:00000028002877284438442844387728002800003EFC02483E4820483EFC0000 +B593:00000028002877284438442844387728002800003E1002FE3E3820443E380000 +B594:000000280028772844384428443877280028000003F802080208020803F80000 +B595:00000028002877284438442844387728002800000208020803F8020803F80000 +B596:0000002800287728443844284438772800280000110811081F0811141F620000 +B597:0000002800287728443844284438772800280000000800080008003400C20000 +B598:00000028002877284438442844387728002800000048004800A8011406620000 +B599:0000002800287728443844284438772800280000000001F00208020801F00000 +B59A:000000280028772844384428443877280028000003F80020002000D003080000 +B59B:0000002800287728443844284438772800280000004003F8004000A003180000 +B59C:000000280028772844384428443877280028000003F8000803F8000800080000 +B59D:000000280028772844384428443877280028000003F8020003F8020003F80000 +B59E:000000280028772844384428443877280028000000000FF8022002200FF80000 +B59F:000000280028772844384428443877280028000000800FF803E0041003E00000 +B5A0:00000000000200027BC242024202421E420242027BC200020002000200020000 +B5A1:0000000800087708440844384408770800080000000007F80008000800080000 +B5A2:000000080008770844084438440877080008000000003EF80208020802080000 +B5A3:000000080008770844084438440877080008000000001F080108011401620000 +B5A4:000000080008770844084438440877080008000000001000100010001FF80000 +B5A5:0000000800087708440844384408770800080000000020F8201020303ECC0000 +B5A6:0000000800087708440844384408770800080000202021FC207020883E700000 +B5A7:000000080008770844084438440877080008000003F802000200020003F80000 +B5A8:000000080008770844084438440877080008000007F8000807F8040007F80000 +B5A9:00000008000877084408443844087708000800003EF802083E0820083E080000 +B5AA:00000008000877084408443844087708000800003EF802883E8820883EF80000 +B5AB:00000008000877084408443844087708000800003E8802883EF820883EF80000 +B5AC:00000008000877084408443844087708000800000F8800880F8808140FA20000 +B5AD:00000008000877084408443844087708000800003EF802803EF820803EF80000 +B5AE:00000008000877084408443844087708000800003EFC02483E4820483EFC0000 +B5AF:00000008000877084408443844087708000800003E1002FE3E3820443E380000 +B5B0:000000080008770844084438440877080008000003F802080208020803F80000 +B5B1:00000008000877084408443844087708000800000208020803F8020803F80000 +B5B2:0000000800087708440844384408770800080000210821083F0821143F620000 +B5B3:0000000800087708440844384408770800080000001000100010006801840000 +B5B4:00000008000877084408443844087708000800000048004800A8011406620000 +B5B5:0000000800087708440844384408770800080000000003F00408040803F00000 +B5B6:000000080008770844084438440877080008000003F80020002000D003080000 +B5B7:0000000800087708440844384408770800080000004003F8004000A003180000 +B5B8:000000080008770844084438440877080008000003F8000803F8000800080000 +B5B9:000000080008770844084438440877080008000003F8020003F8020003F80000 +B5BA:000000080008770844084438440877080008000000000FF8022002200FF80000 +B5BB:000000080008770844084438440877080008000000800FF803E0041003E00000 +B5BC:00000000000A000A7BCA420A420A423A420A420A7BCA000A000A000A000A0000 +B5BD:0000002800287728442844E8442877280028000007F800080008000800080000 +B5BE:0000002800287728442844E8442877280028000000003EF80208020802080000 +B5BF:0000002800287728442844E8442877280028000000003E100210022802C40000 +B5C0:0000002800287728442844E8442877280028000008000800080008000FF80000 +B5C1:0000002800287728442844E84428772800280000000020F8201020303ECC0000 +B5C2:0000002800287728442844E84428772800280000202021FC207020883E700000 +B5C3:0000002800287728442844E8442877280028000003F802000200020003F80000 +B5C4:0000002800287728442844E8442877280028000007F8000807F8040007F80000 +B5C5:0000002800287728442844E844287728002800003EF802083E0820083E080000 +B5C6:0000002800287728442844E844287728002800003EF802883E8820883EF80000 +B5C7:0000002800287728442844E844287728002800003E8802883EF820883EF80000 +B5C8:0000002800287728442844E844287728002800001F0801081F0810141F620000 +B5C9:0000002800287728442844E844287728002800003EF802803EF820803EF80000 +B5CA:0000002800287728442844E844287728002800003EFC02483E4820483EFC0000 +B5CB:0000002800287728442844E844287728002800003E1002FE3E3820443E380000 +B5CC:0000002800287728442844E8442877280028000003F802080208020803F80000 +B5CD:0000002800287728442844E844287728002800000208020803F8020803F80000 +B5CE:0000002800287728442844E84428772800280000110811081F0811141F620000 +B5CF:0000002800287728442844E84428772800280000000800080008003400C20000 +B5D0:0000002800287728442844E844287728002800000048004800A8011406620000 +B5D1:0000002800287728442844E84428772800280000000001F00208020801F00000 +B5D2:0000002800287728442844E8442877280028000003F80020002000D003080000 +B5D3:0000002800287728442844E84428772800280000004003F8004000A003180000 +B5D4:0000002800287728442844E8442877280028000003F8000803F8000800080000 +B5D5:0000002800287728442844E8442877280028000003F8020003F8020003F80000 +B5D6:0000002800287728442844E8442877280028000000000FF8022002200FF80000 +B5D7:0000002800287728442844E8442877280028000000800FF803E0041003E00000 +B5D8:00000000000200027BC24202421E42024202421E7BC200020002000200020000 +B5D9:0000000800087708443844084438770800080000000007F80008000800080000 +B5DA:000000080008770844384408443877080008000000003EF80208020802080000 +B5DB:000000080008770844384408443877080008000000001F080108011401620000 +B5DC:000000080008770844384408443877080008000800001000100010001FF80000 +B5DD:0000000800087708443844084438770800080000000020F8201020303ECC0000 +B5DE:0000000800087708443844084438770800080000202021FC207020883E700000 +B5DF:000000080008770844384408443877080008000003F802000200020003F80000 +B5E0:000000080008770844384408443877080008000007F8000807F8040007F80000 +B5E1:00000008000877084438440844387708000800003EF802083E0820083E080000 +B5E2:00000008000877084438440844387708000800003EF802883E8820883EF80000 +B5E3:00000008000877084438440844387708000800003E8802883EF820883EF80000 +B5E4:00000008000877084438440844387708000800000F8800880F8808140FA20000 +B5E5:00000008000877084438440844387708000800003EF802803EF820803EF80000 +B5E6:00000008000877084438440844387708000800003EFC02483E4820483EFC0000 +B5E7:00000008000877084438440844387708000800003E1002FE3E3820443E380000 +B5E8:000000080008770844384408443877080008000003F802080208020803F80000 +B5E9:00000008000877084438440844387708000800000208020803F8020803F80000 +B5EA:0000000800087708443844084438770800080000210821083F0821143F620000 +B5EB:0000000800087708443844084438770800080000001000100010006801840000 +B5EC:00000008000877084438440844387708000800000048004800A8011406620000 +B5ED:0000000800087708443844084438770800080000000003F00408040803F00000 +B5EE:000000080008770844384408443877080008000003F80020002000D003080000 +B5EF:0000000800087708443844084438770800080000004003F8004000A003180000 +B5F0:000000080008770844384408443877080008000003F8000803F8000800080000 +B5F1:000000080008770844384408443877080008000003F8020003F8020003F80000 +B5F2:000000080008770844384408443877080008000000000FF8022002200FF80000 +B5F3:000000080008770844384408443877080008000000800FF803E0041003E00000 +B5F4:00000000000A000A7BCA420A423A420A420A423A7BCA000A000A000A000A0000 +B5F5:000000280028772844E8442844E877280028000007F800080008000800080000 +B5F6:000000280028772844E8442844E877280028000000003EF80208020802080000 +B5F7:000000280028772844E8442844E877280028000000003E100210022802C40000 +B5F8:000000280028772844E8442844E877280028002808000800080008000FF80000 +B5F9:000000280028772844E8442844E8772800280000000020F8201020303ECC0000 +B5FA:000000280028772844E8442844E8772800280000202021FC207020883E700000 +B5FB:000000280028772844E8442844E877280028000003F802000200020003F80000 +B5FC:000000280028772844E8442844E877280028000007F8000807F8040007F80000 +B5FD:000000280028772844E8442844E87728002800003EF802083E0820083E080000 +B5FE:000000280028772844E8442844E87728002800003EF802883E8820883EF80000 +B5FF:000000280028772844E8442844E87728002800003E8802883EF820883EF80000 +B600:000000280028772844E8442844E87728002800001F0801081F0810141F620000 +B601:000000280028772844E8442844E87728002800003EF802803EF820803EF80000 +B602:000000280028772844E8442844E87728002800003EFC02483E4820483EFC0000 +B603:000000280028772844E8442844E87728002800003E1002FE3E3820443E380000 +B604:000000280028772844E8442844E877280028000003F802080208020803F80000 +B605:000000280028772844E8442844E87728002800000208020803F8020803F80000 +B606:000000280028772844E8442844E8772800280000110811081F0811141F620000 +B607:000000280028772844E8442844E8772800280000000800080008003400C20000 +B608:000000280028772844E8442844E87728002800000048004800A8011406620000 +B609:000000280028772844E8442844E8772800280000000001F00208020801F00000 +B60A:000000280028772844E8442844E877280028000003F80020002000D003080000 +B60B:000000280028772844E8442844E8772800280000004003F8004000A003180000 +B60C:000000280028772844E8442844E877280028000003F8000803F8000800080000 +B60D:000000280028772844E8442844E877280028000003F8020003F8020003F80000 +B60E:000000280028772844E8442844E877280028000000000FF8022002200FF80000 +B60F:000000280028772844E8442844E877280028000000800FF803E0041003E00000 +B610:000000003EF820802080208020803EF8000000000100010001007FFC00000000 +B611:000000001EF0108010801EF0010001007FFC00001FF000100010001000100000 +B612:000000001EF0108010801EF0010001007FFC000000003EF80208020802080000 +B613:000000001EF0108010801EF0010001007FFC000000001E100210022802C40000 +B614:000000001EF0108010801EF0010001007FFC000000001000100010001FF00000 +B615:000000001EF0108010801EF0010001007FFC0000000020F8201020303ECC0000 +B616:000000001EF0108010801EF0010001007FFC0000202021FC207020883E700000 +B617:000000001EF0108010801EF0010001007FFC00001FF01000100010001FF00000 +B618:000000001EF0108010801EF0010001007FFC00001FF000101FF010001FF00000 +B619:000000001EF0108010801EF0010001007FFC00003EF802083E0820083E080000 +B61A:000000001EF0108010801EF0010001007FFC00003EF802883E8820883EF80000 +B61B:000000001EF0108010801EF0010001007FFC00003E8802883EF820883EF80000 +B61C:000000001EF0108010801EF0010001007FFC00003E1002103E1020283EC40000 +B61D:000000001EF0108010801EF0010001007FFC00003EF802803EF820803EF80000 +B61E:000000001EF0108010801EF0010001007FFC00003EFC02483E4820483EFC0000 +B61F:000000001EF0108010801EF0010001007FFC00003E2003FC3E7020883E700000 +B620:000000001EF0108010801EF0010001007FFC00001FF01010101010101FF00000 +B621:000000001EF0108010801EF0010001007FFC0000101010101FF010101FF00000 +B622:000000001EF0108010801EF0010001007FFC0000222022203E2022503E880000 +B623:000000001EF0108010801EF0010001007FFC000000000100010002800C400000 +B624:000000001EF0108010801EF0010001007FFC00000000024002400DA033100000 +B625:000000001EF0108010801EF0010001007FFC0000000007C00820082007C00000 +B626:000000001EF0108010801EF0010001007FFC0000000007E00080014006200000 +B627:000000001EF0108010801EF0010001007FFC0000008007E00080014006200000 +B628:000000001EF0108010801EF0010001007FFC00001FF000101FF0001000100000 +B629:000000001EF0108010801EF0010001007FFC00001FF010001FF010001FF00000 +B62A:000000001EF0108010801EF0010001007FFC000000001FF0044004401FF00000 +B62B:000000001EF0108010801EF0010001007FFC000001001FF007C0082007C00000 +B62C:0000001000107BD0421042104210421E7BD00010041004107FD0001000100000 +B62D:000000083B882208220E3B88040804087FE8000007F800080008000800080000 +B62E:000000083B882208220E3B88040804087FE8000000003EF80208020802080000 +B62F:000000083B882208220E3B88040804087FE8000000001F080108011401620000 +B630:000000083B882208220E3B88040804087FE8000008000800080008000FF80000 +B631:000000083B882208220E3B88040804087FE80000000010F8101010301ECC0000 +B632:000000083B882208220E3B88040804087FE800000808087F081C08220F9C0000 +B633:000000083B882208220E3B88040804087FE8000003F802000200020003F80000 +B634:000000083B882208220E3B88040804087FE8000007F8000807F8040007F80000 +B635:000000083B882208220E3B88040804087FE800003EF802083E0820083E080000 +B636:000000083B882208220E3B88040804087FE800003EF802883E8820883EF80000 +B637:000000083B882208220E3B88040804087FE800003E8802883EF820883EF80000 +B638:000000083B882208220E3B88040804087FE800001F0801081F0810141F620000 +B639:000000083B882208220E3B88040804087FE800003EF802803EF820803EF80000 +B63A:000000083B882208220E3B88040804087FE800003EFC02483E4820483EFC0000 +B63B:000000083B882208220E3B88040804087FE800001F08017F1F1C10221F1C0000 +B63C:000000083B882208220E3B88040804087FE8000003F802080208020803F80000 +B63D:000000083B882208220E3B88040804087FE800000208020803F8020803F80000 +B63E:000000083B882208220E3B88040804087FE80000110811081F0811141F620000 +B63F:000000083B882208220E3B88040804087FE80000001000100010006801840000 +B640:000000083B882208220E3B88040804087FE800000048004800A8011406620000 +B641:000000083B882208220E3B88040804087FE80000000003F00408040803F00000 +B642:000000083B882208220E3B88040804087FE8000003F80020002000D003080000 +B643:000000083B882208220E3B88040804087FE80000004003F8004000A003180000 +B644:000000083B882208220E3B88040804087FE8000003F8000803F8000800080000 +B645:000000083B882208220E3B88040804087FE8000003F8020003F8020003F80000 +B646:000000083B882208220E3B88040804087FE8000000000FF8022002200FF80000 +B647:000000083B882208220E3B88040804087FE8000000800FF803E0041003E00000 +B648:0000001200127BD2421242124212421E7BD20012041204127FD2001200120000 +B649:000000283BA8222822383BA8042804287FA8000007F800080008000800080000 +B64A:000000283BA8222822383BA8042804287FA8000000003EF80208020802080000 +B64B:000000283BA8222822383BA8042804287FA8000000001F080108011401620000 +B64C:000000283BA8222822383BA8042804287FA8000008000800080008000FF80000 +B64D:000000283BA8222822383BA8042804287FA80000000010F8101010301ECC0000 +B64E:000000283BA8222822383BA8042804287FA800000808087F081C08220F9C0000 +B64F:000000283BA8222822383BA8042804287FA8000003F802000200020003F80000 +B650:000000283BA8222822383BA8042804287FA8000007F8000807F8040007F80000 +B651:000000283BA8222822383BA8042804287FA800003EF802083E0820083E080000 +B652:000000283BA8222822383BA8042804287FA800003EF802883E8820883EF80000 +B653:000000283BA8222822383BA8042804287FA800003E8802883EF820883EF80000 +B654:000000283BA8222822383BA8042804287FA800001F0801081F0810141F620000 +B655:000000283BA8222822383BA8042804287FA800003EF802803EF820803EF80000 +B656:000000283BA8222822383BA8042804287FA800003EFC02483E4820483EFC0000 +B657:000000283BA8222822383BA8042804287FA800001F08017F1F1C10221F1C0000 +B658:000000283BA8222822383BA8042804287FA8000003F802080208020803F80000 +B659:000000283BA8222822383BA8042804287FA800000208020803F8020803F80000 +B65A:000000283BA8222822383BA8042804287FA80000110811081F0811141F620000 +B65B:000000283BA8222822383BA8042804287FA80000001000100010006801840000 +B65C:000000283BA8222822383BA8042804287FA800000048004800A8011406620000 +B65D:000000283BA8222822383BA8042804287FA80000000003F00408040803F00000 +B65E:000000283BA8222822383BA8042804287FA8000003F80020002000D003080000 +B65F:000000283BA8222822383BA8042804287FA80000004003F8004000A003180000 +B660:000000283BA8222822383BA8042804287FA8000003F8000803F8000800080000 +B661:000000283BA8222822383BA8042804287FA8000003F8020003F8020003F80000 +B662:000000283BA8222822383BA8042804287FA8000000000FF8022002200FF80000 +B663:000000283BA8222822383BA8042804287FA8000000800FF803E0041003E00000 +B664:0000000800087BC842084208420842087BC80008040804087FE8000800080000 +B665:000000083B88220822083B88040804087FE8000007F800080008000800080000 +B666:000000083B88220822083B88040804087FE8000000003EF80208020802080000 +B667:000000083B88220822083B88040804087FE8000000001F080108011401620000 +B668:000000083B88220822083B88040804087FE8000008000800080008000FF80000 +B669:000000083B88220822083B88040804087FE80000000010F8101010301ECC0000 +B66A:000000083B88220822083B88040804087FE800000808087F081C08220F9C0000 +B66B:000000083B88220822083B88040804087FE8000003F802000200020003F80000 +B66C:000000083B88220822083B88040804087FE8000007F8000807F8040007F80000 +B66D:000000083B88220822083B88040804087FE800003EF802083E0820083E080000 +B66E:000000083B88220822083B88040804087FE800003EF802883E8820883EF80000 +B66F:000000083B88220822083B88040804087FE800003E8802883EF820883EF80000 +B670:000000083B88220822083B88040804087FE800001F0801081F0810141F620000 +B671:000000083B88220822083B88040804087FE800003EF802803EF820803EF80000 +B672:000000083B88220822083B88040804087FE800003EFC02483E4820483EFC0000 +B673:000000083B88220822083B88040804087FE800001F08017F1F1C10221F1C0000 +B674:000000083B88220822083B88040804087FE8000003F802080208020803F80000 +B675:000000083B88220822083B88040804087FE800000208020803F8020803F80000 +B676:000000083B88220822083B88040804087FE80000110811081F0811141F620000 +B677:000000083B88220822083B88040804087FE80000001000100010006801840000 +B678:000000083B88220822083B88040804087FE800000048004800A8011406620000 +B679:000000083B88220822083B88040804087FE80000000003F00408040803F00000 +B67A:000000083B88220822083B88040804087FE8000003F80020002000D003080000 +B67B:000000083B88220822083B88040804087FE80000004003F8004000A003180000 +B67C:000000083B88220822083B88040804087FE8000003F8000803F8000800080000 +B67D:000000083B88220822083B88040804087FE8000003F8020003F8020003F80000 +B67E:000000083B88220822083B88040804087FE8000000000FF8022002200FF80000 +B67F:000000083B88220822083B88040804087FE8000000800FF803E0041003E00000 +B680:000000003EF820802080208020803EF8000004400440044004407FFC00000000 +B681:000000001EF0108010801EF0044004407FFC00001FF000100010001000100000 +B682:000000001EF0108010801EF0044004407FFC000000003EF80208020802080000 +B683:000000001EF0108010801EF0044004407FFC000000001E100210022802C40000 +B684:000000001EF0108010801EF0044004407FFC000000001000100010001FF00000 +B685:000000001EF0108010801EF0044004407FFC0000000020F8201020303ECC0000 +B686:000000001EF0108010801EF0044004407FFC0000202021FC207020883E700000 +B687:000000001EF0108010801EF0044004407FFC00001FF01000100010001FF00000 +B688:000000001EF0108010801EF0044004407FFC00001FF000101FF010001FF00000 +B689:000000001EF0108010801EF0044004407FFC00003EF802083E0820083E080000 +B68A:000000001EF0108010801EF0044004407FFC00003EF802883E8820883EF80000 +B68B:000000001EF0108010801EF0044004407FFC00003E8802883EF820883EF80000 +B68C:000000001EF0108010801EF0044004407FFC00003E1002103E1020283EC40000 +B68D:000000001EF0108010801EF0044004407FFC00003EF802803EF820803EF80000 +B68E:000000001EF0108010801EF0044004407FFC00003EFC02483E4820483EFC0000 +B68F:000000001EF0108010801EF0044004407FFC00003E2003FC3E7020883E700000 +B690:000000001EF0108010801EF0044004407FFC00001FF01010101010101FF00000 +B691:000000001EF0108010801EF0044004407FFC0000101010101FF010101FF00000 +B692:000000001EF0108010801EF0044004407FFC0000222022203E2022503E880000 +B693:000000001EF0108010801EF0044004407FFC000000000100010002800C400000 +B694:000000001EF0108010801EF0044004407FFC00000000024002400DA033100000 +B695:000000001EF0108010801EF0044004407FFC0000000007C00820082007C00000 +B696:000000001EF0108010801EF0044004407FFC0000000007E00080014006200000 +B697:000000001EF0108010801EF0044004407FFC0000008007E00080014006200000 +B698:000000001EF0108010801EF0044004407FFC00001FF000101FF0001000100000 +B699:000000001EF0108010801EF0044004407FFC00001FF010001FF010001FF00000 +B69A:000000001EF0108010801EF0044004407FFC000000001FF0044004401FF00000 +B69B:000000001EF0108010801EF0044004407FFC000001001FF007C0082007C00000 +B69C:000000003EF820802080208020803EF8000000003FF801000100010001000000 +B69D:000000001EF0108010801EF000007FFC010001001FF000100010001000100000 +B69E:000000001EF0108010801EF000007FFC0100010000003EF80208020802080000 +B69F:000000001EF0108010801EF000007FFC0100010000001E100210022802C40000 +B6A0:000000001EF0108010801EF0000000007FFC010001001100100010001FF00000 +B6A1:000000001EF0108010801EF000007FFC01000100000020F8201020303ECC0000 +B6A2:000000001EF0108010801EF000007FFC01000100202021FC207020883E700000 +B6A3:000000001EF0108010801EF000007FFC010001001FF01000100010001FF00000 +B6A4:000000001EF0108010801EF000007FFC010001001FF000101FF010001FF00000 +B6A5:000000001EF0108010801EF000007FFC010001003EF802083E0820083E080000 +B6A6:000000001EF0108010801EF000007FFC010001003EF802883E8820883EF80000 +B6A7:000000001EF0108010801EF000007FFC010001003E8802883EF820883EF80000 +B6A8:000000001EF0108010801EF000007FFC010001003E1002103E1020283EC40000 +B6A9:000000001EF0108010801EF000007FFC010001003EF802803EF820803EF80000 +B6AA:000000001EF0108010801EF000007FFC010001003EFC02483E4820483EFC0000 +B6AB:000000001EF0108010801EF000007FFC010001003E2003FC3E7020883E700000 +B6AC:000000001EF0108010801EF000007FFC010001001FF01010101010101FF00000 +B6AD:000000001EF0108010801EF000007FFC01000100101010101FF010101FF00000 +B6AE:000000001EF0108010801EF000007FFC01000100222022203E2022503E880000 +B6AF:000000001EF0108010801EF000007FFC0100010000000100010002800C400000 +B6B0:000000001EF0108010801EF000007FFC010001000000024002400DA033100000 +B6B1:000000001EF0108010801EF000007FFC01000100000007C00820082007C00000 +B6B2:000000001EF0108010801EF000007FFC01000100000007E00080014006200000 +B6B3:000000001EF0108010801EF000007FFC01000100008007E00080014006200000 +B6B4:000000001EF0108010801EF000007FFC010001001FF000101FF0001000100000 +B6B5:000000001EF0108010801EF000007FFC010001001FF010001FF010001FF00000 +B6B6:000000001EF0108010801EF000007FFC0100010000001FF0044004401FF00000 +B6B7:000000001EF0108010801EF000007FFC0100010001001FF007C0082007C00000 +B6B8:000000087BC842084208420842087BC8000800087FE8040804F8040804080000 +B6B9:0008770844084408770800087FE8027802080000000007F80008000800080000 +B6BA:0008770844084408770800087FE802780208000000003EF80208020802080000 +B6BB:0008770844084408770800087FE802780208000000001F080108011401620000 +B6BC:00087708440844087708000800087FE80278020802081000100010001FF80000 +B6BD:0008770844084408770800087FE8027802080000000020F8201020303ECC0000 +B6BE:0008770844084408770800087FE8027802080000202021FC207020883E700000 +B6BF:0008770844084408770800087FE802780208000003F802000200020003F80000 +B6C0:0008770844084408770800087FE802780208000007F8000807F8040007F80000 +B6C1:0008770844084408770800087FE80278020800003EF802083E0820083E080000 +B6C2:0008770844084408770800087FE80278020800003EF802883E8820883EF80000 +B6C3:0008770844084408770800087FE80278020800003E8802883EF820883EF80000 +B6C4:0008770844084408770800087FE80278020800000F8800880F8808140FA20000 +B6C5:0008770844084408770800087FE80278020800003EF802803EF820803EF80000 +B6C6:0008770844084408770800087FE80278020800003EFC02483E4820483EFC0000 +B6C7:0008770844084408770800087FE80278020800003E1002FE3E3820443E380000 +B6C8:0008770844084408770800087FE802780208000003F802080208020803F80000 +B6C9:0008770844084408770800087FE80278020800000208020803F8020803F80000 +B6CA:0008770844084408770800087FE8027802080000210821083F0821143F620000 +B6CB:0008770844084408770800087FE8027802080000001000100010006801840000 +B6CC:0008770844084408770800087FE80278020800000048004800A8011406620000 +B6CD:0008770844084408770800087FE8027802080000000003F00408040803F00000 +B6CE:0008770844084408770800087FE802780208000003F80020002000D003080000 +B6CF:0008770844084408770800087FE8027802080000004003F8004000A003180000 +B6D0:0008770844084408770800087FE802780208000003F8000803F8000800080000 +B6D1:0008770844084408770800087FE802780208000003F8020003F8020003F80000 +B6D2:0008770844084408770800087FE802780208000000000FF8022002200FF80000 +B6D3:0008770844084408770800087FE802780208000000800FF803E0041003E00000 +B6D4:0000000A7BCA420A420A420A420A7BCA000A000A7FEA040A047A040A040A0000 +B6D5:0028772844284428772800287FA805E804280000000007F80008000800080000 +B6D6:0028772844284428772800287FA805E80428000000003EF80208020802080000 +B6D7:0028772844284428772800287FA805E80428000000001F080108011401620000 +B6D8:00287728442844287728002800287FA8042805E804281428100010001FF80000 +B6D9:0028772844284428772800287FA805E804280000000020F8201020303ECC0000 +B6DA:0028772844284428772800287FA805E804280000202021FC207020883E700000 +B6DB:0028772844284428772800287FA805E80428000003F802000200020003F80000 +B6DC:0028772844284428772800287FA805E80428000007F8000807F8040007F80000 +B6DD:0028772844284428772800287FA805E8042800003EF802083E0820083E080000 +B6DE:0028772844284428772800287FA805E8042800003EF802883E8820883EF80000 +B6DF:0028772844284428772800287FA805E8042800003E8802883EF820883EF80000 +B6E0:0028772844284428772800287FA805E8042800000F8800880F8808140FA20000 +B6E1:0028772844284428772800287FA805E8042800003EF802803EF820803EF80000 +B6E2:0028772844284428772800287FA805E8042800003EFC02483E4820483EFC0000 +B6E3:0028772844284428772800287FA805E8042800003E1002FE3E3820443E380000 +B6E4:0028772844284428772800287FA805E80428000003F802080208020803F80000 +B6E5:0028772844284428772800287FA805E8042800000208020803F8020803F80000 +B6E6:0028772844284428772800287FA805E804280000210821083F0821143F620000 +B6E7:0028772844284428772800287FA805E804280000001000100010006801840000 +B6E8:0028772844284428772800287FA805E8042800000048004800A8011406620000 +B6E9:0028772844284428772800287FA805E804280000000003F00408040803F00000 +B6EA:0028772844284428772800287FA805E80428000003F80020002000D003080000 +B6EB:0028772844284428772800287FA805E804280000004003F8004000A003180000 +B6EC:0028772844284428772800287FA805E80428000003F8000803F8000800080000 +B6ED:0028772844284428772800287FA805E80428000003F8020003F8020003F80000 +B6EE:0028772844284428772800287FA805E80428000000000FF8022002200FF80000 +B6EF:0028772844284428772800287FA805E80428000000800FF803E0041003E00000 +B6F0:000000087BC842084208420842087BC8000800087FE804080408040804080000 +B6F1:0008770844084408770800087FE8020802000000000007F80008000800080000 +B6F2:0008770844084408770800087FE802080200000000003EF80208020802080000 +B6F3:0008770844084408770800087FE802080200000000001F080108011401620000 +B6F4:00087708440844087708000800087FE80208020802081008100010001FF80000 +B6F5:0008770844084408770800087FE8020802000000000020F8201020303ECC0000 +B6F6:0008770844084408770800087FE8020802000000202021FC207020883E700000 +B6F7:0008770844084408770800087FE802080200000003F802000200020003F80000 +B6F8:0008770844084408770800087FE802080200000007F8000807F8040007F80000 +B6F9:0008770844084408770800087FE80208020000003EF802083E0820083E080000 +B6FA:0008770844084408770800087FE80208020000003EF802883E8820883EF80000 +B6FB:0008770844084408770800087FE80208020000003E8802883EF820883EF80000 +B6FC:0008770844084408770800087FE80208020000000F8800880F8808140FA20000 +B6FD:0008770844084408770800087FE80208020000003EF802803EF820803EF80000 +B6FE:0008770844084408770800087FE80208020000003EFC02483E4820483EFC0000 +B6FF:0008770844084408770800087FE80208020000003E1002FE3E3820443E380000 +B700:0008770844084408770800087FE802080200000003F802080208020803F80000 +B701:0008770844084408770800087FE80208020000000208020803F8020803F80000 +B702:0008770844084408770800087FE8020802000000210821083F0821143F620000 +B703:0008770844084408770800087FE8020802000000001000100010006801840000 +B704:0008770844084408770800087FE80208020000000048004800A8011406620000 +B705:0008770844084408770800087FE8020802000000000003F00408040803F00000 +B706:0008770844084408770800087FE802080200000003F80020002000D003080000 +B707:0008770844084408770800087FE8020802000000004003F8004000A003180000 +B708:0008770844084408770800087FE802080200000003F8000803F8000800080000 +B709:0008770844084408770800087FE802080200000003F8020003F8020003F80000 +B70A:0008770844084408770800087FE802080200000000000FF8022002200FF80000 +B70B:0008770844084408770800087FE802080200000000800FF803E0041003E00000 +B70C:000000003EF820802080208020803EF8000000007FFC04400440044004400000 +B70D:000000001EF0108010801EF000007FFC044004401FF000100010001000100000 +B70E:000000001EF0108010801EF000007FFC0440044000003EF80208020802080000 +B70F:000000001EF0108010801EF000007FFC0440044000001E100210022802C40000 +B710:000000001EF0108010801EF0000000007FFC044004401440100010001FF00000 +B711:000000001EF0108010801EF000007FFC04400440000020F8201020303ECC0000 +B712:000000001EF0108010801EF000007FFC04400440202021FC207020883E700000 +B713:000000001EF0108010801EF000007FFC044004401FF01000100010001FF00000 +B714:000000001EF0108010801EF000007FFC044004401FF000101FF010001FF00000 +B715:000000001EF0108010801EF000007FFC044004403EF802083E0820083E080000 +B716:000000001EF0108010801EF000007FFC044004403EF802883E8820883EF80000 +B717:000000001EF0108010801EF000007FFC044004403E8802883EF820883EF80000 +B718:000000001EF0108010801EF000007FFC044004403E1002103E1020283EC40000 +B719:000000001EF0108010801EF000007FFC044004403EF802803EF820803EF80000 +B71A:000000001EF0108010801EF000007FFC044004403EFC02483E4820483EFC0000 +B71B:000000001EF0108010801EF000007FFC044004403E2003FC3E7020883E700000 +B71C:000000001EF0108010801EF000007FFC044004401FF01010101010101FF00000 +B71D:000000001EF0108010801EF000007FFC04400440101010101FF010101FF00000 +B71E:000000001EF0108010801EF000007FFC04400440222022203E2022503E880000 +B71F:000000001EF0108010801EF000007FFC0440044000000100010002800C400000 +B720:000000001EF0108010801EF000007FFC044004400000024002400DA033100000 +B721:000000001EF0108010801EF000007FFC04400440000007C00820082007C00000 +B722:000000001EF0108010801EF000007FFC04400440000007E00080014006200000 +B723:000000001EF0108010801EF000007FFC04400440008007E00080014006200000 +B724:000000001EF0108010801EF000007FFC044004401FF000101FF0001000100000 +B725:000000001EF0108010801EF000007FFC044004401FF010001FF010001FF00000 +B726:000000001EF0108010801EF000007FFC0440044000001FF0044004401FF00000 +B727:000000001EF0108010801EF000007FFC0440044001001FF007C0082007C00000 +B728:000000003EF820802080208020803EF80000000000007FFC0000000000000000 +B729:000000001EF0108010801EF0000000007FFC00001FF000100010001000100000 +B72A:000000001EF0108010801EF0000000007FFC000000003EF80208020802080000 +B72B:000000001EF0108010801EF0000000007FFC000000001E100210022802C40000 +B72C:000000001EF0108010801EF0000000007FFC000000001000100010001FF00000 +B72D:000000001EF0108010801EF0000000007FFC0000000020F8201020303ECC0000 +B72E:000000001EF0108010801EF0000000007FFC0000202021FC207020883E700000 +B72F:000000001EF0108010801EF0000000007FFC00001FF01000100010001FF00000 +B730:000000001EF0108010801EF0000000007FFC00001FF000101FF010001FF00000 +B731:000000001EF0108010801EF0000000007FFC00003EF802083E0820083E080000 +B732:000000001EF0108010801EF0000000007FFC00003EF802883E8820883EF80000 +B733:000000001EF0108010801EF0000000007FFC00003E8802883EF820883EF80000 +B734:000000001EF0108010801EF0000000007FFC00003E1002103E1020283EC40000 +B735:000000001EF0108010801EF0000000007FFC00003EF802803EF820803EF80000 +B736:000000001EF0108010801EF0000000007FFC00003EFC02483E4820483EFC0000 +B737:000000001EF0108010801EF0000000007FFC00003E2003FC3E7020883E700000 +B738:000000001EF0108010801EF0000000007FFC00001FF01010101010101FF00000 +B739:000000001EF0108010801EF0000000007FFC0000101010101FF010101FF00000 +B73A:000000001EF0108010801EF0000000007FFC0000222022203E2022503E880000 +B73B:000000001EF0108010801EF0000000007FFC000000000100010002800C400000 +B73C:000000001EF0108010801EF0000000007FFC00000000024002400DA033100000 +B73D:000000001EF0108010801EF0000000007FFC0000000007C00820082007C00000 +B73E:000000001EF0108010801EF0000000007FFC0000000007E00080014006200000 +B73F:000000001EF0108010801EF0000000007FFC0000008007E00080014006200000 +B740:000000001EF0108010801EF0000000007FFC00001FF000101FF0001000100000 +B741:000000001EF0108010801EF0000000007FFC00001FF010001FF010001FF00000 +B742:000000001EF0108010801EF0000000007FFC000000001FF0044004401FF00000 +B743:000000001EF0108010801EF0000000007FFC000001001FF007C0082007C00000 +B744:0000000800087BC842084208420842087BC8000800087FE80008000800080000 +B745:000000083B88220822083B88000800087FE8000007F800080008000800080000 +B746:000000083B88220822083B88000800087FE8000000003EF80208020802080000 +B747:000000083B88220822083B88000800087FE8000000001F080108011401620000 +B748:000000083B88220822083B88000800087FE8000008000800080008000FF80000 +B749:000000083B88220822083B88000800087FE80000000010F8101010301ECC0000 +B74A:000000083B88220822083B88000800087FE800000808087F081C08220F9C0000 +B74B:000000083B88220822083B88000800087FE8000003F802000200020003F80000 +B74C:000000083B88220822083B88000800087FE8000007F8000807F8040007F80000 +B74D:000000083B88220822083B88000800087FE800003EF802083E0820083E080000 +B74E:000000083B88220822083B88000800087FE800003EF802883E8820883EF80000 +B74F:000000083B88220822083B88000800087FE800003E8802883EF820883EF80000 +B750:000000083B88220822083B88000800087FE800001F0801081F0810141F620000 +B751:000000083B88220822083B88000800087FE800003EF802803EF820803EF80000 +B752:000000083B88220822083B88000800087FE800003EFC02483E4820483EFC0000 +B753:000000083B88220822083B88000800087FE800001F08017F1F1C10221F1C0000 +B754:000000083B88220822083B88000800087FE8000003F802080208020803F80000 +B755:000000083B88220822083B88000800087FE800000208020803F8020803F80000 +B756:000000083B88220822083B88000800087FE80000110811081F0811141F620000 +B757:000000083B88220822083B88000800087FE80000001000100010006801840000 +B758:000000083B88220822083B88000800087FE800000048004800A8011406620000 +B759:000000083B88220822083B88000800087FE80000000003F00408040803F00000 +B75A:000000083B88220822083B88000800087FE8000003F80020002000D003080000 +B75B:000000083B88220822083B88000800087FE80000004003F8004000A003180000 +B75C:000000083B88220822083B88000800087FE8000003F8000803F8000800080000 +B75D:000000083B88220822083B88000800087FE8000003F8020003F8020003F80000 +B75E:000000083B88220822083B88000800087FE8000000000FF8022002200FF80000 +B75F:000000083B88220822083B88000800087FE8000000800FF803E0041003E00000 +B760:00000000000800087BC8420842084208420842087BC800080008000800080000 +B761:0000000800087708440844084408770800080000000007F80008000800080000 +B762:000000080008770844084408440877080008000000003EF80208020802080000 +B763:000000080008770844084408440877080008000000001F080108011401620000 +B764:000000080008770844084408440877080008000800001000100010001FF80000 +B765:0000000800087708440844084408770800080000000020F8201020303ECC0000 +B766:0000000800087708440844084408770800080000202021FC207020883E700000 +B767:000000080008770844084408440877080008000003F802000200020003F80000 +B768:000000080008770844084408440877080008000007F8000807F8040007F80000 +B769:00000008000877084408440844087708000800003EF802083E0820083E080000 +B76A:00000008000877084408440844087708000800003EF802883E8820883EF80000 +B76B:00000008000877084408440844087708000800003E8802883EF820883EF80000 +B76C:00000008000877084408440844087708000800000F8800880F8808140FA20000 +B76D:00000008000877084408440844087708000800003EF802803EF820803EF80000 +B76E:00000008000877084408440844087708000800003EFC02483E4820483EFC0000 +B76F:00000008000877084408440844087708000800003E1002FE3E3820443E380000 +B770:000000080008770844084408440877080008000003F802080208020803F80000 +B771:00000008000877084408440844087708000800000208020803F8020803F80000 +B772:0000000800087708440844084408770800080000210821083F0821143F620000 +B773:0000000800087708440844084408770800080000001000100010006801840000 +B774:00000008000877084408440844087708000800000048004800A8011406620000 +B775:0000000800087708440844084408770800080000000003F00408040803F00000 +B776:000000080008770844084408440877080008000003F80020002000D003080000 +B777:0000000800087708440844084408770800080000004003F8004000A003180000 +B778:000000080008770844084408440877080008000003F8000803F8000800080000 +B779:000000080008770844084408440877080008000003F8020003F8020003F80000 +B77A:000000080008770844084408440877080008000000000FF8022002200FF80000 +B77B:000000080008770844084408440877080008000000800FF803E0041003E00000 +B77C:00000000001000103F90009000903F9E2010201020103F900010001000100000 +B77D:0000000800083F0801083F0E20083F080008000007F800080008000800080000 +B77E:0000000800083F0801083F0E20083F080008000000003EF80208020802080000 +B77F:0000000800083F0801083F0E20083F080008000000001F080108011401620000 +B780:0000000800083F0801083F0E20083F080008000808000800080008000FF80000 +B781:0000000800083F0801083F0E20083F0800080000000010F8101010301ECC0000 +B782:0000000800083F0801083F0E20083F08000800000808087F081C08220F9C0000 +B783:0000000800083F0801083F0E20083F080008000003F802000200020003F80000 +B784:0000000800083F0801083F0E20083F080008000007F8000807F8040007F80000 +B785:0000000800083F0801083F0E20083F08000800003EF802083E0820083E080000 +B786:0000000800083F0801083F0E20083F08000800003EF802883E8820883EF80000 +B787:0000000800083F0801083F0E20083F08000800003E8802883EF820883EF80000 +B788:0000000800083F0801083F0E20083F08000800001F0801081F0810141F620000 +B789:0000000800083F0801083F0E20083F08000800003EF802803EF820803EF80000 +B78A:0000000800083F0801083F0E20083F08000800003EFC02483E4820483EFC0000 +B78B:0000000800083F0801083F0E20083F08000800001F08017F1F1C10221F1C0000 +B78C:0000000800083F0801083F0E20083F080008000003F802080208020803F80000 +B78D:0000000800083F0801083F0E20083F08000800000208020803F8020803F80000 +B78E:0000000800083F0801083F0E20083F0800080000110811081F0811141F620000 +B78F:0000000800083F0801083F0E20083F0800080000001000100010006801840000 +B790:0000000800083F0801083F0E20083F08000800000048004800A8011406620000 +B791:0000000800083F0801083F0E20083F0800080000000003F00408040803F00000 +B792:0000000800083F0801083F0E20083F080008000003F80020002000D003080000 +B793:0000000800083F0801083F0E20083F0800080000004003F8004000A003180000 +B794:0000000800083F0801083F0E20083F080008000003F8000803F8000800080000 +B795:0000000800083F0801083F0E20083F080008000003F8020003F8020003F80000 +B796:0000000800083F0801083F0E20083F080008000000000FF8022002200FF80000 +B797:0000000800083F0801083F0E20083F080008000000800FF803E0041003E00000 +B798:00000000001200123F92009200923F9E2012201220123F920012001200120000 +B799:0000002800283F2801283F3820283F280028000007F800080008000800080000 +B79A:0000002800283F2801283F3820283F280028000000003EF80208020802080000 +B79B:0000002800283F2801283F3820283F280028000000003E100210022802C40000 +B79C:0000002800283F2801283F3820283F280028002808000800080008000FF80000 +B79D:0000002800283F2801283F3820283F2800280000000020F8201020303ECC0000 +B79E:0000002800283F2801283F3820283F2800280000202021FC207020883E700000 +B79F:0000002800283F2801283F3820283F280028000003F802000200020003F80000 +B7A0:0000002800283F2801283F3820283F280028000007F8000807F8040007F80000 +B7A1:0000002800283F2801283F3820283F28002800003EF802083E0820083E080000 +B7A2:0000002800283F2801283F3820283F28002800003EF802883E8820883EF80000 +B7A3:0000002800283F2801283F3820283F28002800003E8802883EF820883EF80000 +B7A4:0000002800283F2801283F3820283F28002800001F0801081F0810141F620000 +B7A5:0000002800283F2801283F3820283F28002800003EF802803EF820803EF80000 +B7A6:0000002800283F2801283F3820283F28002800003EFC02483E4820483EFC0000 +B7A7:0000002800283F2801283F3820283F28002800003E1002FE3E3820443E380000 +B7A8:0000002800283F2801283F3820283F280028000003F802080208020803F80000 +B7A9:0000002800283F2801283F3820283F28002800000208020803F8020803F80000 +B7AA:0000002800283F2801283F3820283F2800280000110811081F0811141F620000 +B7AB:0000002800283F2801283F3820283F2800280000000800080008003400C20000 +B7AC:0000002800283F2801283F3820283F28002800000048004800A8011406620000 +B7AD:0000002800283F2801283F3820283F2800280000000001F00208020801F00000 +B7AE:0000002800283F2801283F3820283F280028000003F80020002000D003080000 +B7AF:0000002800283F2801283F3820283F2800280000004003F8004000A003180000 +B7B0:0000002800283F2801283F3820283F280028000003F8000803F8000800080000 +B7B1:0000002800283F2801283F3820283F280028000003F8020003F8020003F80000 +B7B2:0000002800283F2801283F3820283F280028000000000FF8022002200FF80000 +B7B3:0000002800283F2801283F3820283F280028000000800FF803E0041003E00000 +B7B4:00000000001000103F900090009E3F902010201E20103F900010001000100000 +B7B5:0000000800083F08010E3F08200E3F080008000007F800080008000800080000 +B7B6:0000000800083F08010E3F08200E3F080008000000003EF80208020802080000 +B7B7:0000000800083F08010E3F08200E3F080008000000001F080108011401620000 +B7B8:0000000800083F08010E3F08200E3F080008000008000800080008000FF80000 +B7B9:0000000800083F08010E3F08200E3F0800080000000010F8101010301ECC0000 +B7BA:0000000800083F08010E3F08200E3F08000800000808087F081C08220F9C0000 +B7BB:0000000800083F08010E3F08200E3F080008000003F802000200020003F80000 +B7BC:0000000800083F08010E3F08200E3F080008000007F8000807F8040007F80000 +B7BD:0000000800083F08010E3F08200E3F08000800003EF802083E0820083E080000 +B7BE:0000000800083F08010E3F08200E3F08000800003EF802883E8820883EF80000 +B7BF:0000000800083F08010E3F08200E3F08000800003E8802883EF820883EF80000 +B7C0:0000000800083F08010E3F08200E3F08000800001F0801081F0810141F620000 +B7C1:0000000800083F08010E3F08200E3F08000800003EF802803EF820803EF80000 +B7C2:0000000800083F08010E3F08200E3F08000800003EFC02483E4820483EFC0000 +B7C3:0000000800083F08010E3F08200E3F08000800001F08017F1F1C10221F1C0000 +B7C4:0000000800083F08010E3F08200E3F080008000003F802080208020803F80000 +B7C5:0000000800083F08010E3F08200E3F08000800000208020803F8020803F80000 +B7C6:0000000800083F08010E3F08200E3F0800080000110811081F0811141F620000 +B7C7:0000000800083F08010E3F08200E3F0800080000001000100010006801840000 +B7C8:0000000800083F08010E3F08200E3F08000800000048004800A8011406620000 +B7C9:0000000800083F08010E3F08200E3F0800080000000003F00408040803F00000 +B7CA:0000000800083F08010E3F08200E3F080008000003F80020002000D003080000 +B7CB:0000000800083F08010E3F08200E3F0800080000004003F8004000A003180000 +B7CC:0000000800083F08010E3F08200E3F080008000003F8000803F8000800080000 +B7CD:0000000800083F08010E3F08200E3F080008000003F8020003F8020003F80000 +B7CE:0000000800083F08010E3F08200E3F080008000000000FF8022002200FF80000 +B7CF:0000000800083F08010E3F08200E3F080008000000800FF803E0041003E00000 +B7D0:00000000001200123F920092009E3F922012201E20123F920012001200120000 +B7D1:0000002800283F2801383F2820383F280028000007F800080008000800080000 +B7D2:0000002800283F2801383F2820383F280028000000003EF80208020802080000 +B7D3:0000002800283F2801383F2820383F280028000000003E100210022802C40000 +B7D4:0000002800283F2801383F2820383F280028002808000800080008000FF80000 +B7D5:0000002800283F2801383F2820383F2800280000000020F8201020303ECC0000 +B7D6:0000002800283F2801383F2820383F2800280000202021FC207020883E700000 +B7D7:0000002800283F2801383F2820383F280028000003F802000200020003F80000 +B7D8:0000002800283F2801383F2820383F280028000007F8000807F8040007F80000 +B7D9:0000002800283F2801383F2820383F28002800003EF802083E0820083E080000 +B7DA:0000002800283F2801383F2820383F28002800003EF802883E8820883EF80000 +B7DB:0000002800283F2801383F2820383F28002800003E8802883EF820883EF80000 +B7DC:0000002800283F2801383F2820383F28002800001F0801081F0810141F620000 +B7DD:0000002800283F2801383F2820383F28002800003EF802803EF820803EF80000 +B7DE:0000002800283F2801383F2820383F28002800003EFC02483E4820483EFC0000 +B7DF:0000002800283F2801383F2820383F28002800003E1002FE3E3820443E380000 +B7E0:0000002800283F2801383F2820383F280028000003F802080208020803F80000 +B7E1:0000002800283F2801383F2820383F28002800000208020803F8020803F80000 +B7E2:0000002800283F2801383F2820383F2800280000110811081F0811141F620000 +B7E3:0000002800283F2801383F2820383F2800280000000800080008003400C20000 +B7E4:0000002800283F2801383F2820383F28002800000048004800A8011406620000 +B7E5:0000002800283F2801383F2820383F2800280000000001F00208020801F00000 +B7E6:0000002800283F2801383F2820383F280028000003F80020002000D003080000 +B7E7:0000002800283F2801383F2820383F2800280000004003F8004000A003180000 +B7E8:0000002800283F2801383F2820383F280028000003F8000803F8000800080000 +B7E9:0000002800283F2801383F2820383F280028000003F8020003F8020003F80000 +B7EA:0000002800283F2801383F2820383F280028000000000FF8022002200FF80000 +B7EB:0000002800283F2801383F2820383F280028000000800FF803E0041003E00000 +B7EC:00000000000200023F82008200823F9E2002200220023F820002000200020000 +B7ED:0000000800083F0801083F3820083F0800080000000007F80008000800080000 +B7EE:0000000800083F0801083F3820083F080008000000003EF80208020802080000 +B7EF:0000000800083F0801083F3820083F080008000000001F080108011401620000 +B7F0:0000000800083F0801083F3820083F080008000000001000100010001FF80000 +B7F1:0000000800083F0801083F3820083F0800080000000020F8201020303ECC0000 +B7F2:0000000800083F0801083F3820083F0800080000202021FC207020883E700000 +B7F3:0000000800083F0801083F3820083F080008000003F802000200020003F80000 +B7F4:0000000800083F0801083F3820083F080008000007F8000807F8040007F80000 +B7F5:0000000800083F0801083F3820083F08000800003EF802083E0820083E080000 +B7F6:0000000800083F0801083F3820083F08000800003EF802883E8820883EF80000 +B7F7:0000000800083F0801083F3820083F08000800003E8802883EF820883EF80000 +B7F8:0000000800083F0801083F3820083F08000800000F8800880F8808140FA20000 +B7F9:0000000800083F0801083F3820083F08000800003EF802803EF820803EF80000 +B7FA:0000000800083F0801083F3820083F08000800003EFC02483E4820483EFC0000 +B7FB:0000000800083F0801083F3820083F08000800003E1002FE3E3820443E380000 +B7FC:0000000800083F0801083F3820083F080008000003F802080208020803F80000 +B7FD:0000000800083F0801083F3820083F08000800000208020803F8020803F80000 +B7FE:0000000800083F0801083F3820083F0800080000210821083F0821143F620000 +B7FF:0000000800083F0801083F3820083F0800080000001000100010006801840000 +B800:0000000800083F0801083F3820083F08000800000048004800A8011406620000 +B801:0000000800083F0801083F3820083F0800080000000003F00408040803F00000 +B802:0000000800083F0801083F3820083F080008000003F80020002000D003080000 +B803:0000000800083F0801083F3820083F0800080000004003F8004000A003180000 +B804:0000000800083F0801083F3820083F080008000003F8000803F8000800080000 +B805:0000000800083F0801083F3820083F080008000003F8020003F8020003F80000 +B806:0000000800083F0801083F3820083F080008000000000FF8022002200FF80000 +B807:0000000800083F0801083F3820083F080008000000800FF803E0041003E00000 +B808:00000000000A000A3F8A008A008A3FBA200A200A200A3F8A000A000A000A0000 +B809:0000002800283F2801283FE820283F280028000007F800080008000800080000 +B80A:0000002800283F2801283FE820283F280028000000003EF80208020802080000 +B80B:0000002800283F2801283FE820283F280028000000003E100210022802C40000 +B80C:0000002800283F2801283FE820283F280028000008000800080008000FF80000 +B80D:0000002800283F2801283FE820283F2800280000000020F8201020303ECC0000 +B80E:0000002800283F2801283FE820283F2800280000202021FC207020883E700000 +B80F:0000002800283F2801283FE820283F280028000003F802000200020003F80000 +B810:0000002800283F2801283FE820283F280028000007F8000807F8040007F80000 +B811:0000002800283F2801283FE820283F28002800003EF802083E0820083E080000 +B812:0000002800283F2801283FE820283F28002800003EF802883E8820883EF80000 +B813:0000002800283F2801283FE820283F28002800003E8802883EF820883EF80000 +B814:0000002800283F2801283FE820283F28002800001F0801081F0810141F620000 +B815:0000002800283F2801283FE820283F28002800003EF802803EF820803EF80000 +B816:0000002800283F2801283FE820283F28002800003EFC02483E4820483EFC0000 +B817:0000002800283F2801283FE820283F28002800003E1002FE3E3820443E380000 +B818:0000002800283F2801283FE820283F280028000003F802080208020803F80000 +B819:0000002800283F2801283FE820283F28002800000208020803F8020803F80000 +B81A:0000002800283F2801283FE820283F2800280000110811081F0811141F620000 +B81B:0000002800283F2801283FE820283F2800280000000800080008003400C20000 +B81C:0000002800283F2801283FE820283F28002800000048004800A8011406620000 +B81D:0000002800283F2801283FE820283F2800280000000001F00208020801F00000 +B81E:0000002800283F2801283FE820283F280028000003F80020002000D003080000 +B81F:0000002800283F2801283FE820283F2800280000004003F8004000A003180000 +B820:0000002800283F2801283FE820283F280028000003F8000803F8000800080000 +B821:0000002800283F2801283FE820283F280028000003F8020003F8020003F80000 +B822:0000002800283F2801283FE820283F280028000000000FF8022002200FF80000 +B823:0000002800283F2801283FE820283F280028000000800FF803E0041003E00000 +B824:00000000000200023F820082009E3F822002201E20023F820002000200020000 +B825:0000000800083F0801383F0820383F0800080000000007F80008000800080000 +B826:0000000800083F0801383F0820383F080008000000003EF80208020802080000 +B827:0000000800083F0801383F0820383F080008000000001F080108011401620000 +B828:0000000800083F0801383F0820383F080008000800001000100010001FF80000 +B829:0000000800083F0801383F0820383F0800080000000020F8201020303ECC0000 +B82A:0000000800083F0801383F0820383F0800080000202021FC207020883E700000 +B82B:0000000800083F0801383F0820383F080008000003F802000200020003F80000 +B82C:0000000800083F0801383F0820383F080008000007F8000807F8040007F80000 +B82D:0000000800083F0801383F0820383F08000800003EF802083E0820083E080000 +B82E:0000000800083F0801383F0820383F08000800003EF802883E8820883EF80000 +B82F:0000000800083F0801383F0820383F08000800003E8802883EF820883EF80000 +B830:0000000800083F0801383F0820383F08000800000F8800880F8808140FA20000 +B831:0000000800083F0801383F0820383F08000800003EF802803EF820803EF80000 +B832:0000000800083F0801383F0820383F08000800003EFC02483E4820483EFC0000 +B833:0000000800083F0801383F0820383F08000800003E1002FE3E3820443E380000 +B834:0000000800083F0801383F0820383F080008000003F802080208020803F80000 +B835:0000000800083F0801383F0820383F08000800000208020803F8020803F80000 +B836:0000000800083F0801383F0820383F0800080000210821083F0821143F620000 +B837:0000000800083F0801383F0820383F0800080000001000100010006801840000 +B838:0000000800083F0801383F0820383F08000800000048004800A8011406620000 +B839:0000000800083F0801383F0820383F0800080000000003F00408040803F00000 +B83A:0000000800083F0801383F0820383F080008000003F80020002000D003080000 +B83B:0000000800083F0801383F0820383F0800080000004003F8004000A003180000 +B83C:0000000800083F0801383F0820383F080008000003F8000803F8000800080000 +B83D:0000000800083F0801383F0820383F080008000003F8020003F8020003F80000 +B83E:0000000800083F0801383F0820383F080008000000000FF8022002200FF80000 +B83F:0000000800083F0801383F0820383F080008000000800FF803E0041003E00000 +B840:00000000000A000A3F8A008A00BA3F8A200A203A200A3F8A000A000A000A0000 +B841:0000002800283F2801E83F2820E83F280028000007F800080008000800080000 +B842:0000002800283F2801E83F2820E83F280028000000003EF80208020802080000 +B843:0000002800283F2801E83F2820E83F280028000000003E100210022802C40000 +B844:0000002800283F2801E83F2820E83F280028002808000800080008000FF80000 +B845:0000002800283F2801E83F2820E83F2800280000000020F8201020303ECC0000 +B846:0000002800283F2801E83F2820E83F2800280000202021FC207020883E700000 +B847:0000002800283F2801E83F2820E83F280028000003F802000200020003F80000 +B848:0000002800283F2801E83F2820E83F280028000007F8000807F8040007F80000 +B849:0000002800283F2801E83F2820E83F28002800003EF802083E0820083E080000 +B84A:0000002800283F2801E83F2820E83F28002800003EF802883E8820883EF80000 +B84B:0000002800283F2801E83F2820E83F28002800003E8802883EF820883EF80000 +B84C:0000002800283F2801E83F2820E83F28002800001F0801081F0810141F620000 +B84D:0000002800283F2801E83F2820E83F28002800003EF802803EF820803EF80000 +B84E:0000002800283F2801E83F2820E83F28002800003EFC02483E4820483EFC0000 +B84F:0000002800283F2801E83F2820E83F28002800003E1002FE3E3820443E380000 +B850:0000002800283F2801E83F2820E83F280028000003F802080208020803F80000 +B851:0000002800283F2801E83F2820E83F28002800000208020803F8020803F80000 +B852:0000002800283F2801E83F2820E83F2800280000110811081F0811141F620000 +B853:0000002800283F2801E83F2820E83F2800280000000800080008003400C20000 +B854:0000002800283F2801E83F2820E83F28002800000048004800A8011406620000 +B855:0000002800283F2801E83F2820E83F2800280000000001F00208020801F00000 +B856:0000002800283F2801E83F2820E83F280028000003F80020002000D003080000 +B857:0000002800283F2801E83F2820E83F2800280000004003F8004000A003180000 +B858:0000002800283F2801E83F2820E83F280028000003F8000803F8000800080000 +B859:0000002800283F2801E83F2820E83F280028000003F8020003F8020003F80000 +B85A:0000002800283F2801E83F2820E83F280028000000000FF8022002200FF80000 +B85B:0000002800283F2801E83F2820E83F280028000000800FF803E0041003E00000 +B85C:000000001FF0001000101FF0100010001FF000000100010001007FFC00000000 +B85D:00001FF000101FF010001FF0010001007FFC00001FF000100010001000100000 +B85E:00001FF000101FF010001FF0010001007FFC000000003EF80208020802080000 +B85F:00001FF000101FF010001FF0010001007FFC000000001E100210022802C40000 +B860:00001FF000101FF010001FF0010001007FFC000000001000100010001FF00000 +B861:00001FF000101FF010001FF0010001007FFC0000000020F8201020303ECC0000 +B862:00001FF000101FF010001FF0010001007FFC0000202021FC207020883E700000 +B863:00001FF000101FF010001FF0010001007FFC00001FF01000100010001FF00000 +B864:00001FF000101FF010001FF0010001007FFC00001FF000101FF010001FF00000 +B865:00001FF000101FF010001FF0010001007FFC00003EF802083E0820083E080000 +B866:00001FF000101FF010001FF0010001007FFC00003EF802883E8820883EF80000 +B867:00001FF000101FF010001FF0010001007FFC00003E8802883EF820883EF80000 +B868:00001FF000101FF010001FF0010001007FFC00003E1002103E1020283EC40000 +B869:00001FF000101FF010001FF0010001007FFC00003EF802803EF820803EF80000 +B86A:00001FF000101FF010001FF0010001007FFC00003EFC02483E4820483EFC0000 +B86B:00001FF000101FF010001FF0010001007FFC00003E2003FC3E7020883E700000 +B86C:00001FF000101FF010001FF0010001007FFC00001FF01010101010101FF00000 +B86D:00001FF000101FF010001FF0010001007FFC0000101010101FF010101FF00000 +B86E:00001FF000101FF010001FF0010001007FFC0000222022203E2022503E880000 +B86F:00001FF000101FF010001FF0010001007FFC000000000100010002800C400000 +B870:00001FF000101FF010001FF0010001007FFC00000000024002400DA033100000 +B871:00001FF000101FF010001FF0010001007FFC0000000007C00820082007C00000 +B872:00001FF000101FF010001FF0010001007FFC0000000007E00080014006200000 +B873:00001FF000101FF010001FF0010001007FFC0000008007E00080014006200000 +B874:00001FF000101FF010001FF0010001007FFC00001FF000101FF0001000100000 +B875:00001FF000101FF010001FF0010001007FFC00001FF010001FF010001FF00000 +B876:00001FF000101FF010001FF0010001007FFC000000001FF0044004401FF00000 +B877:00001FF000101FF010001FF0010001007FFC000001001FF007C0082007C00000 +B878:0000001000103F90009000903F90201E20103F90041004107FD0001000100000 +B879:000000083F8800883F8E20083F8804087FE8000007F800080008000800080000 +B87A:000000083F8800883F8E20083F8804087FE8000000003EF80208020802080000 +B87B:000000083F8800883F8E20083F8804087FE8000000001F080108011401620000 +B87C:000000083F8800883F8E20083F8804087FE8000008000800080008000FF80000 +B87D:000000083F8800883F8E20083F8804087FE80000000010F8101010301ECC0000 +B87E:000000083F8800883F8E20083F8804087FE800000808087F081C08220F9C0000 +B87F:000000083F8800883F8E20083F8804087FE8000003F802000200020003F80000 +B880:000000083F8800883F8E20083F8804087FE8000007F8000807F8040007F80000 +B881:000000083F8800883F8E20083F8804087FE800003EF802083E0820083E080000 +B882:000000083F8800883F8E20083F8804087FE800003EF802883E8820883EF80000 +B883:000000083F8800883F8E20083F8804087FE800003E8802883EF820883EF80000 +B884:000000083F8800883F8E20083F8804087FE800001F0801081F0810141F620000 +B885:000000083F8800883F8E20083F8804087FE800003EF802803EF820803EF80000 +B886:000000083F8800883F8E20083F8804087FE800003EFC02483E4820483EFC0000 +B887:000000083F8800883F8E20083F8804087FE800001F08017F1F1C10221F1C0000 +B888:000000083F8800883F8E20083F8804087FE8000003F802080208020803F80000 +B889:000000083F8800883F8E20083F8804087FE800000208020803F8020803F80000 +B88A:000000083F8800883F8E20083F8804087FE80000110811081F0811141F620000 +B88B:000000083F8800883F8E20083F8804087FE80000001000100010006801840000 +B88C:000000083F8800883F8E20083F8804087FE800000048004800A8011406620000 +B88D:000000083F8800883F8E20083F8804087FE80000000003F00408040803F00000 +B88E:000000083F8800883F8E20083F8804087FE8000003F80020002000D003080000 +B88F:000000083F8800883F8E20083F8804087FE80000004003F8004000A003180000 +B890:000000083F8800883F8E20083F8804087FE8000003F8000803F8000800080000 +B891:000000083F8800883F8E20083F8804087FE8000003F8020003F8020003F80000 +B892:000000083F8800883F8E20083F8804087FE8000000000FF8022002200FF80000 +B893:000000083F8800883F8E20083F8804087FE8000000800FF803E0041003E00000 +B894:0000001200123F92009200923F92201E20123F92041204127FD2001200120000 +B895:000000283FA800A83FB820283FA804287FA8000007F800080008000800080000 +B896:000000283FA800A83FB820283FA804287FA8000000003EF80208020802080000 +B897:000000283FA800A83FB820283FA804287FA8000000001F080108011401620000 +B898:000000283FA800A83FB820283FA804287FA8000008000800080008000FF80000 +B899:000000283FA800A83FB820283FA804287FA80000000010F8101010301ECC0000 +B89A:000000283FA800A83FB820283FA804287FA800000808087F081C08220F9C0000 +B89B:000000283FA800A83FB820283FA804287FA8000003F802000200020003F80000 +B89C:000000283FA800A83FB820283FA804287FA8000007F8000807F8040007F80000 +B89D:000000283FA800A83FB820283FA804287FA800003EF802083E0820083E080000 +B89E:000000283FA800A83FB820283FA804287FA800003EF802883E8820883EF80000 +B89F:000000283FA800A83FB820283FA804287FA800003E8802883EF820883EF80000 +B8A0:000000283FA800A83FB820283FA804287FA800001F0801081F0810141F620000 +B8A1:000000283FA800A83FB820283FA804287FA800003EF802803EF820803EF80000 +B8A2:000000283FA800A83FB820283FA804287FA800003EFC02483E4820483EFC0000 +B8A3:000000283FA800A83FB820283FA804287FA800001F08017F1F1C10221F1C0000 +B8A4:000000283FA800A83FB820283FA804287FA8000003F802080208020803F80000 +B8A5:000000283FA800A83FB820283FA804287FA800000208020803F8020803F80000 +B8A6:000000283FA800A83FB820283FA804287FA80000110811081F0811141F620000 +B8A7:000000283FA800A83FB820283FA804287FA80000001000100010006801840000 +B8A8:000000283FA800A83FB820283FA804287FA800000048004800A8011406620000 +B8A9:000000283FA800A83FB820283FA804287FA80000000003F00408040803F00000 +B8AA:000000283FA800A83FB820283FA804287FA8000003F80020002000D003080000 +B8AB:000000283FA800A83FB820283FA804287FA80000004003F8004000A003180000 +B8AC:000000283FA800A83FB820283FA804287FA8000003F8000803F8000800080000 +B8AD:000000283FA800A83FB820283FA804287FA8000003F8020003F8020003F80000 +B8AE:000000283FA800A83FB820283FA804287FA8000000000FF8022002200FF80000 +B8AF:000000283FA800A83FB820283FA804287FA8000000800FF803E0041003E00000 +B8B0:0000000800083F88008800883F88200820083F88040804087FE8000800080000 +B8B1:000000083F8800883F8820083F8804087FE8000007F800080008000800080000 +B8B2:000000083F8800883F8820083F8804087FE8000000003EF80208020802080000 +B8B3:000000083F8800883F8820083F8804087FE8000000001F080108011401620000 +B8B4:000000083F8800883F8820083F8804087FE8000008000800080008000FF80000 +B8B5:000000083F8800883F8820083F8804087FE80000000010F8101010301ECC0000 +B8B6:000000083F8800883F8820083F8804087FE800000808087F081C08220F9C0000 +B8B7:000000083F8800883F8820083F8804087FE8000003F802000200020003F80000 +B8B8:000000083F8800883F8820083F8804087FE8000007F8000807F8040007F80000 +B8B9:000000083F8800883F8820083F8804087FE800003EF802083E0820083E080000 +B8BA:000000083F8800883F8820083F8804087FE800003EF802883E8820883EF80000 +B8BB:000000083F8800883F8820083F8804087FE800003E8802883EF820883EF80000 +B8BC:000000083F8800883F8820083F8804087FE800001F0801081F0810141F620000 +B8BD:000000083F8800883F8820083F8804087FE800003EF802803EF820803EF80000 +B8BE:000000083F8800883F8820083F8804087FE800003EFC02483E4820483EFC0000 +B8BF:000000083F8800883F8820083F8804087FE800001F08017F1F1C10221F1C0000 +B8C0:000000083F8800883F8820083F8804087FE8000003F802080208020803F80000 +B8C1:000000083F8800883F8820083F8804087FE800000208020803F8020803F80000 +B8C2:000000083F8800883F8820083F8804087FE80000110811081F0811141F620000 +B8C3:000000083F8800883F8820083F8804087FE80000001000100010006801840000 +B8C4:000000083F8800883F8820083F8804087FE800000048004800A8011406620000 +B8C5:000000083F8800883F8820083F8804087FE80000000003F00408040803F00000 +B8C6:000000083F8800883F8820083F8804087FE8000003F80020002000D003080000 +B8C7:000000083F8800883F8820083F8804087FE80000004003F8004000A003180000 +B8C8:000000083F8800883F8820083F8804087FE8000003F8000803F8000800080000 +B8C9:000000083F8800883F8820083F8804087FE8000003F8020003F8020003F80000 +B8CA:000000083F8800883F8820083F8804087FE8000000000FF8022002200FF80000 +B8CB:000000083F8800883F8820083F8804087FE8000000800FF803E0041003E00000 +B8CC:000000001FF0001000101FF0100010001FF004400440044004407FFC00000000 +B8CD:00001FF000101FF010001FF0044004407FFC00001FF000100010001000100000 +B8CE:00001FF000101FF010001FF0044004407FFC000000003EF80208020802080000 +B8CF:00001FF000101FF010001FF0044004407FFC000000001E100210022802C40000 +B8D0:00001FF000101FF010001FF0044004407FFC000000001000100010001FF00000 +B8D1:00001FF000101FF010001FF0044004407FFC0000000020F8201020303ECC0000 +B8D2:00001FF000101FF010001FF0044004407FFC0000202021FC207020883E700000 +B8D3:00001FF000101FF010001FF0044004407FFC00001FF01000100010001FF00000 +B8D4:00001FF000101FF010001FF0044004407FFC00001FF000101FF010001FF00000 +B8D5:00001FF000101FF010001FF0044004407FFC00003EF802083E0820083E080000 +B8D6:00001FF000101FF010001FF0044004407FFC00003EF802883E8820883EF80000 +B8D7:00001FF000101FF010001FF0044004407FFC00003E8802883EF820883EF80000 +B8D8:00001FF000101FF010001FF0044004407FFC00003E1002103E1020283EC40000 +B8D9:00001FF000101FF010001FF0044004407FFC00003EF802803EF820803EF80000 +B8DA:00001FF000101FF010001FF0044004407FFC00003EFC02483E4820483EFC0000 +B8DB:00001FF000101FF010001FF0044004407FFC00003E2003FC3E7020883E700000 +B8DC:00001FF000101FF010001FF0044004407FFC00001FF01010101010101FF00000 +B8DD:00001FF000101FF010001FF0044004407FFC0000101010101FF010101FF00000 +B8DE:00001FF000101FF010001FF0044004407FFC0000222022203E2022503E880000 +B8DF:00001FF000101FF010001FF0044004407FFC000000000100010002800C400000 +B8E0:00001FF000101FF010001FF0044004407FFC00000000024002400DA033100000 +B8E1:00001FF000101FF010001FF0044004407FFC0000000007C00820082007C00000 +B8E2:00001FF000101FF010001FF0044004407FFC0000000007E00080014006200000 +B8E3:00001FF000101FF010001FF0044004407FFC0000008007E00080014006200000 +B8E4:00001FF000101FF010001FF0044004407FFC00001FF000101FF0001000100000 +B8E5:00001FF000101FF010001FF0044004407FFC00001FF010001FF010001FF00000 +B8E6:00001FF000101FF010001FF0044004407FFC000000001FF0044004401FF00000 +B8E7:00001FF000101FF010001FF0044004407FFC000001001FF007C0082007C00000 +B8E8:000000001FF0001000101FF0100010001FF000003FF801000100010001000000 +B8E9:00001FF000101FF010001FF000007FFC010001001FF000100010001000100000 +B8EA:00001FF000101FF010001FF000007FFC0100010000003EF80208020802080000 +B8EB:00001FF000101FF010001FF000007FFC0100010000001E100210022802C40000 +B8EC:00001FF000101FF010001FF0000000007FFC010001001100100010001FF00000 +B8ED:00001FF000101FF010001FF000007FFC01000100000020F8201020303ECC0000 +B8EE:00001FF000101FF010001FF000007FFC01000100202021FC207020883E700000 +B8EF:00001FF000101FF010001FF000007FFC010001001FF01000100010001FF00000 +B8F0:00001FF000101FF010001FF000007FFC010001001FF000101FF010001FF00000 +B8F1:00001FF000101FF010001FF000007FFC010001003EF802083E0820083E080000 +B8F2:00001FF000101FF010001FF000007FFC010001003EF802883E8820883EF80000 +B8F3:00001FF000101FF010001FF000007FFC010001003E8802883EF820883EF80000 +B8F4:00001FF000101FF010001FF000007FFC010001003E1002103E1020283EC40000 +B8F5:00001FF000101FF010001FF000007FFC010001003EF802803EF820803EF80000 +B8F6:00001FF000101FF010001FF000007FFC010001003EFC02483E4820483EFC0000 +B8F7:00001FF000101FF010001FF000007FFC010001003E2003FC3E7020883E700000 +B8F8:00001FF000101FF010001FF000007FFC010001001FF01010101010101FF00000 +B8F9:00001FF000101FF010001FF000007FFC01000100101010101FF010101FF00000 +B8FA:00001FF000101FF010001FF000007FFC01000100222022203E2022503E880000 +B8FB:00001FF000101FF010001FF000007FFC0100010000000100010002800C400000 +B8FC:00001FF000101FF010001FF000007FFC010001000000024002400DA033100000 +B8FD:00001FF000101FF010001FF000007FFC01000100000007C00820082007C00000 +B8FE:00001FF000101FF010001FF000007FFC01000100000007E00080014006200000 +B8FF:00001FF000101FF010001FF000007FFC01000100008007E00080014006200000 +B900:00001FF000101FF010001FF000007FFC010001001FF000101FF0001000100000 +B901:00001FF000101FF010001FF000007FFC010001001FF010001FF010001FF00000 +B902:00001FF000101FF010001FF000007FFC0100010000001FF0044004401FF00000 +B903:00001FF000101FF010001FF000007FFC0100010001001FF007C0082007C00000 +B904:000000083FC8004800483FC8200820083FC800087FE8040804F8040804080000 +B905:7F8800887F8840087F8800087FE8027802080000000007F80008000800080000 +B906:7F8800887F8840087F8800087FE802780208000000003EF80208020802080000 +B907:7F8800887F8840087F8800087FE802780208000000001F080108011401620000 +B908:7F8800887F8840087F88000800087FE80278020802081000100010001FF80000 +B909:7F8800887F8840087F8800087FE8027802080000000020F8201020303ECC0000 +B90A:7F8800887F8840087F8800087FE8027802080000202021FC207020883E700000 +B90B:7F8800887F8840087F8800087FE802780208000003F802000200020003F80000 +B90C:7F8800887F8840087F8800087FE802780208000007F8000807F8040007F80000 +B90D:7F8800887F8840087F8800087FE80278020800003EF802083E0820083E080000 +B90E:7F8800887F8840087F8800087FE80278020800003EF802883E8820883EF80000 +B90F:7F8800887F8840087F8800087FE80278020800003E8802883EF820883EF80000 +B910:7F8800887F8840087F8800087FE80278020800000F8800880F8808140FA20000 +B911:7F8800887F8840087F8800087FE80278020800003EF802803EF820803EF80000 +B912:7F8800887F8840087F8800087FE80278020800003EFC02483E4820483EFC0000 +B913:7F8800887F8840087F8800087FE80278020800003E1002FE3E3820443E380000 +B914:7F8800887F8840087F8800087FE802780208000003F802080208020803F80000 +B915:7F8800887F8840087F8800087FE80278020800000208020803F8020803F80000 +B916:7F8800887F8840087F8800087FE8027802080000210821083F0821143F620000 +B917:7F8800887F8840087F8800087FE8027802080000001000100010006801840000 +B918:7F8800887F8840087F8800087FE80278020800000048004800A8011406620000 +B919:7F8800887F8840087F8800087FE8027802080000000003F00408040803F00000 +B91A:7F8800887F8840087F8800087FE802780208000003F80020002000D003080000 +B91B:7F8800887F8840087F8800087FE8027802080000004003F8004000A003180000 +B91C:7F8800887F8840087F8800087FE802780208000003F8000803F8000800080000 +B91D:7F8800887F8840087F8800087FE802780208000003F8020003F8020003F80000 +B91E:7F8800887F8840087F8800087FE802780208000000000FF8022002200FF80000 +B91F:7F8800887F8840087F8800087FE802780208000000800FF803E0041003E00000 +B920:0000000A3FCA004A004A3FCA200A200A3FCA000A7FEA040A047A040A040A0000 +B921:7FA800A87FA840287FA800287FA805E804280000000007F80008000800080000 +B922:7FA800A87FA840287FA800287FA805E80428000000003EF80208020802080000 +B923:7FA800A87FA840287FA800287FA805E80428000000001F080108011401620000 +B924:7FA800A87FA840287FA8002800287FA8042805E804281428100010001FF80000 +B925:7FA800A87FA840287FA800287FA805E804280000000020F8201020303ECC0000 +B926:7FA800A87FA840287FA800287FA805E804280000202021FC207020883E700000 +B927:7FA800A87FA840287FA800287FA805E80428000003F802000200020003F80000 +B928:7FA800A87FA840287FA800287FA805E80428000007F8000807F8040007F80000 +B929:7FA800A87FA840287FA800287FA805E8042800003EF802083E0820083E080000 +B92A:7FA800A87FA840287FA800287FA805E8042800003EF802883E8820883EF80000 +B92B:7FA800A87FA840287FA800287FA805E8042800003E8802883EF820883EF80000 +B92C:7FA800A87FA840287FA800287FA805E8042800000F8800880F8808140FA20000 +B92D:7FA800A87FA840287FA800287FA805E8042800003EF802803EF820803EF80000 +B92E:7FA800A87FA840287FA800287FA805E8042800003EFC02483E4820483EFC0000 +B92F:7FA800A87FA840287FA800287FA805E8042800003E1002FE3E3820443E380000 +B930:7FA800A87FA840287FA800287FA805E80428000003F802080208020803F80000 +B931:7FA800A87FA840287FA800287FA805E8042800000208020803F8020803F80000 +B932:7FA800A87FA840287FA800287FA805E804280000210821083F0821143F620000 +B933:7FA800A87FA840287FA800287FA805E804280000001000100010006801840000 +B934:7FA800A87FA840287FA800287FA805E8042800000048004800A8011406620000 +B935:7FA800A87FA840287FA800287FA805E804280000000003F00408040803F00000 +B936:7FA800A87FA840287FA800287FA805E80428000003F80020002000D003080000 +B937:7FA800A87FA840287FA800287FA805E804280000004003F8004000A003180000 +B938:7FA800A87FA840287FA800287FA805E80428000003F8000803F8000800080000 +B939:7FA800A87FA840287FA800287FA805E80428000003F8020003F8020003F80000 +B93A:7FA800A87FA840287FA800287FA805E80428000000000FF8022002200FF80000 +B93B:7FA800A87FA840287FA800287FA805E80428000000800FF803E0041003E00000 +B93C:000000083FC8004800483FC8200820083FC800087FE804080408040804080000 +B93D:7F8800887F8840087F8800087FE8020802000000000007F80008000800080000 +B93E:7F8800887F8840087F8800087FE802080200000000003EF80208020802080000 +B93F:7F8800887F8840087F8800087FE802080200000000001F080108011401620000 +B940:7F8800887F8840087F88000800087FE80208020802081008100010001FF80000 +B941:7F8800887F8840087F8800087FE8020802000000000020F8201020303ECC0000 +B942:7F8800887F8840087F8800087FE8020802000000202021FC207020883E700000 +B943:7F8800887F8840087F8800087FE802080200000003F802000200020003F80000 +B944:7F8800887F8840087F8800087FE802080200000007F8000807F8040007F80000 +B945:7F8800887F8840087F8800087FE80208020000003EF802083E0820083E080000 +B946:7F8800887F8840087F8800087FE80208020000003EF802883E8820883EF80000 +B947:7F8800887F8840087F8800087FE80208020000003E8802883EF820883EF80000 +B948:7F8800887F8840087F8800087FE80208020000000F8800880F8808140FA20000 +B949:7F8800887F8840087F8800087FE80208020000003EF802803EF820803EF80000 +B94A:7F8800887F8840087F8800087FE80208020000003EFC02483E4820483EFC0000 +B94B:7F8800887F8840087F8800087FE80208020000003E1002FE3E3820443E380000 +B94C:7F8800887F8840087F8800087FE802080200000003F802080208020803F80000 +B94D:7F8800887F8840087F8800087FE80208020000000208020803F8020803F80000 +B94E:7F8800887F8840087F8800087FE8020802000000210821083F0821143F620000 +B94F:7F8800887F8840087F8800087FE8020802000000001000100010006801840000 +B950:7F8800887F8840087F8800087FE80208020000000048004800A8011406620000 +B951:7F8800887F8840087F8800087FE8020802000000000003F00408040803F00000 +B952:7F8800887F8840087F8800087FE802080200000003F80020002000D003080000 +B953:7F8800887F8840087F8800087FE8020802000000004003F8004000A003180000 +B954:7F8800887F8840087F8800087FE802080200000003F8000803F8000800080000 +B955:7F8800887F8840087F8800087FE802080200000003F8020003F8020003F80000 +B956:7F8800887F8840087F8800087FE802080200000000000FF8022002200FF80000 +B957:7F8800887F8840087F8800087FE802080200000000800FF803E0041003E00000 +B958:000000001FF0001000101FF0100010001FF000007FFC04400440044004400000 +B959:00001FF000101FF010001FF000007FFC044004401FF000100010001000100000 +B95A:00001FF000101FF010001FF000007FFC0440044000003EF80208020802080000 +B95B:00001FF000101FF010001FF000007FFC0440044000001E100210022802C40000 +B95C:00001FF000101FF010001FF0000000007FFC044004401440100010001FF00000 +B95D:00001FF000101FF010001FF000007FFC04400440000020F8201020303ECC0000 +B95E:00001FF000101FF010001FF000007FFC04400440202021FC207020883E700000 +B95F:00001FF000101FF010001FF000007FFC044004401FF01000100010001FF00000 +B960:00001FF000101FF010001FF000007FFC044004401FF000101FF010001FF00000 +B961:00001FF000101FF010001FF000007FFC044004403EF802083E0820083E080000 +B962:00001FF000101FF010001FF000007FFC044004403EF802883E8820883EF80000 +B963:00001FF000101FF010001FF000007FFC044004403E8802883EF820883EF80000 +B964:00001FF000101FF010001FF000007FFC044004403E1002103E1020283EC40000 +B965:00001FF000101FF010001FF000007FFC044004403EF802803EF820803EF80000 +B966:00001FF000101FF010001FF000007FFC044004403EFC02483E4820483EFC0000 +B967:00001FF000101FF010001FF000007FFC044004403E2003FC3E7020883E700000 +B968:00001FF000101FF010001FF000007FFC044004401FF01010101010101FF00000 +B969:00001FF000101FF010001FF000007FFC04400440101010101FF010101FF00000 +B96A:00001FF000101FF010001FF000007FFC04400440222022203E2022503E880000 +B96B:00001FF000101FF010001FF000007FFC0440044000000100010002800C400000 +B96C:00001FF000101FF010001FF000007FFC044004400000024002400DA033100000 +B96D:00001FF000101FF010001FF000007FFC04400440000007C00820082007C00000 +B96E:00001FF000101FF010001FF000007FFC04400440000007E00080014006200000 +B96F:00001FF000101FF010001FF000007FFC04400440008007E00080014006200000 +B970:00001FF000101FF010001FF000007FFC044004401FF000101FF0001000100000 +B971:00001FF000101FF010001FF000007FFC044004401FF010001FF010001FF00000 +B972:00001FF000101FF010001FF000007FFC0440044000001FF0044004401FF00000 +B973:00001FF000101FF010001FF000007FFC0440044001001FF007C0082007C00000 +B974:000000001FF0001000101FF0100010001FF0000000007FFC0000000000000000 +B975:00001FF000101FF010001FF0000000007FFC00001FF000100010001000100000 +B976:00001FF000101FF010001FF0000000007FFC000000003EF80208020802080000 +B977:00001FF000101FF010001FF0000000007FFC000000001E100210022802C40000 +B978:00001FF000101FF010001FF0000000007FFC000000001000100010001FF00000 +B979:00001FF000101FF010001FF0000000007FFC0000000020F8201020303ECC0000 +B97A:00001FF000101FF010001FF0000000007FFC0000202021FC207020883E700000 +B97B:00001FF000101FF010001FF0000000007FFC00001FF01000100010001FF00000 +B97C:00001FF000101FF010001FF0000000007FFC00001FF000101FF010001FF00000 +B97D:00001FF000101FF010001FF0000000007FFC00003EF802083E0820083E080000 +B97E:00001FF000101FF010001FF0000000007FFC00003EF802883E8820883EF80000 +B97F:00001FF000101FF010001FF0000000007FFC00003E8802883EF820883EF80000 +B980:00001FF000101FF010001FF0000000007FFC00003E1002103E1020283EC40000 +B981:00001FF000101FF010001FF0000000007FFC00003EF802803EF820803EF80000 +B982:00001FF000101FF010001FF0000000007FFC00003EFC02483E4820483EFC0000 +B983:00001FF000101FF010001FF0000000007FFC00003E2003FC3E7020883E700000 +B984:00001FF000101FF010001FF0000000007FFC00001FF01010101010101FF00000 +B985:00001FF000101FF010001FF0000000007FFC0000101010101FF010101FF00000 +B986:00001FF000101FF010001FF0000000007FFC0000222022203E2022503E880000 +B987:00001FF000101FF010001FF0000000007FFC000000000100010002800C400000 +B988:00001FF000101FF010001FF0000000007FFC00000000024002400DA033100000 +B989:00001FF000101FF010001FF0000000007FFC0000000007C00820082007C00000 +B98A:00001FF000101FF010001FF0000000007FFC0000000007E00080014006200000 +B98B:00001FF000101FF010001FF0000000007FFC0000008007E00080014006200000 +B98C:00001FF000101FF010001FF0000000007FFC00001FF000101FF0001000100000 +B98D:00001FF000101FF010001FF0000000007FFC00001FF010001FF010001FF00000 +B98E:00001FF000101FF010001FF0000000007FFC000000001FF0044004401FF00000 +B98F:00001FF000101FF010001FF0000000007FFC000001001FF007C0082007C00000 +B990:0000000800083F88008800883F88200820083F8800087FE80008000800080000 +B991:000000083F8800883F8820083F8800087FE8000007F800080008000800080000 +B992:000000083F8800883F8820083F8800087FE8000000003EF80208020802080000 +B993:000000083F8800883F8820083F8800087FE8000000001F080108011401620000 +B994:000000083F8800883F8820083F8800087FE8000008000800080008000FF80000 +B995:000000083F8800883F8820083F8800087FE80000000010F8101010301ECC0000 +B996:000000083F8800883F8820083F8800087FE800000808087F081C08220F9C0000 +B997:000000083F8800883F8820083F8800087FE8000003F802000200020003F80000 +B998:000000083F8800883F8820083F8800087FE8000007F8000807F8040007F80000 +B999:000000083F8800883F8820083F8800087FE800003EF802083E0820083E080000 +B99A:000000083F8800883F8820083F8800087FE800003EF802883E8820883EF80000 +B99B:000000083F8800883F8820083F8800087FE800003E8802883EF820883EF80000 +B99C:000000083F8800883F8820083F8800087FE800001F0801081F0810141F620000 +B99D:000000083F8800883F8820083F8800087FE800003EF802803EF820803EF80000 +B99E:000000083F8800883F8820083F8800087FE800003EFC02483E4820483EFC0000 +B99F:000000083F8800883F8820083F8800087FE800001F08017F1F1C10221F1C0000 +B9A0:000000083F8800883F8820083F8800087FE8000003F802080208020803F80000 +B9A1:000000083F8800883F8820083F8800087FE800000208020803F8020803F80000 +B9A2:000000083F8800883F8820083F8800087FE80000110811081F0811141F620000 +B9A3:000000083F8800883F8820083F8800087FE80000001000100010006801840000 +B9A4:000000083F8800883F8820083F8800087FE800000048004800A8011406620000 +B9A5:000000083F8800883F8820083F8800087FE80000000003F00408040803F00000 +B9A6:000000083F8800883F8820083F8800087FE8000003F80020002000D003080000 +B9A7:000000083F8800883F8820083F8800087FE80000004003F8004000A003180000 +B9A8:000000083F8800883F8820083F8800087FE8000003F8000803F8000800080000 +B9A9:000000083F8800883F8820083F8800087FE8000003F8020003F8020003F80000 +B9AA:000000083F8800883F8820083F8800087FE8000000000FF8022002200FF80000 +B9AB:000000083F8800883F8820083F8800087FE8000000800FF803E0041003E00000 +B9AC:00000000000800083F88008800883F882008200820083F880008000800080000 +B9AD:0000000800083F0801083F0820083F0800080000000007F80008000800080000 +B9AE:0000000800083F0801083F0820083F080008000000003EF80208020802080000 +B9AF:0000000800083F0801083F0820083F080008000000001F080108011401620000 +B9B0:0000000800083F0801083F0820083F080008000800001000100010001FF80000 +B9B1:0000000800083F0801083F0820083F0800080000000020F8201020303ECC0000 +B9B2:0000000800083F0801083F0820083F0800080000202021FC207020883E700000 +B9B3:0000000800083F0801083F0820083F080008000003F802000200020003F80000 +B9B4:0000000800083F0801083F0820083F080008000007F8000807F8040007F80000 +B9B5:0000000800083F0801083F0820083F08000800003EF802083E0820083E080000 +B9B6:0000000800083F0801083F0820083F08000800003EF802883E8820883EF80000 +B9B7:0000000800083F0801083F0820083F08000800003E8802883EF820883EF80000 +B9B8:0000000800083F0801083F0820083F08000800000F8800880F8808140FA20000 +B9B9:0000000800083F0801083F0820083F08000800003EF802803EF820803EF80000 +B9BA:0000000800083F0801083F0820083F08000800003EFC02483E4820483EFC0000 +B9BB:0000000800083F0801083F0820083F08000800003E1002FE3E3820443E380000 +B9BC:0000000800083F0801083F0820083F080008000003F802080208020803F80000 +B9BD:0000000800083F0801083F0820083F08000800000208020803F8020803F80000 +B9BE:0000000800083F0801083F0820083F0800080000210821083F0821143F620000 +B9BF:0000000800083F0801083F0820083F0800080000001000100010006801840000 +B9C0:0000000800083F0801083F0820083F08000800000048004800A8011406620000 +B9C1:0000000800083F0801083F0820083F0800080000000003F00408040803F00000 +B9C2:0000000800083F0801083F0820083F080008000003F80020002000D003080000 +B9C3:0000000800083F0801083F0820083F0800080000004003F8004000A003180000 +B9C4:0000000800083F0801083F0820083F080008000003F8000803F8000800080000 +B9C5:0000000800083F0801083F0820083F080008000003F8020003F8020003F80000 +B9C6:0000000800083F0801083F0820083F080008000000000FF8022002200FF80000 +B9C7:0000000800083F0801083F0820083F080008000000800FF803E0041003E00000 +B9C8:00000000001000107F9040904090409E4090409040907F900010001000100000 +B9C9:000000087E0842084208420E42087E080008000007F800080008000800080000 +B9CA:000000087E0842084208420E42087E080008000000003EF80208020802080000 +B9CB:000000087E0842084208420E42087E080008000000001F080108011401620000 +B9CC:000000087E0842084208420E42087E080008000808000800080008000FF80000 +B9CD:000000087E0842084208420E42087E0800080000000010F8101010301ECC0000 +B9CE:000000087E0842084208420E42087E08000800000808087F081C08220F9C0000 +B9CF:000000087E0842084208420E42087E080008000003F802000200020003F80000 +B9D0:000000087E0842084208420E42087E080008000007F8000807F8040007F80000 +B9D1:000000087E0842084208420E42087E08000800003EF802083E0820083E080000 +B9D2:000000087E0842084208420E42087E08000800003EF802883E8820883EF80000 +B9D3:000000087E0842084208420E42087E08000800003E8802883EF820883EF80000 +B9D4:000000087E0842084208420E42087E08000800001F0801081F0810141F620000 +B9D5:000000087E0842084208420E42087E08000800003EF802803EF820803EF80000 +B9D6:000000087E0842084208420E42087E08000800003EFC02483E4820483EFC0000 +B9D7:000000087E0842084208420E42087E08000800001F08017F1F1C10221F1C0000 +B9D8:000000087E0842084208420E42087E080008000003F802080208020803F80000 +B9D9:000000087E0842084208420E42087E08000800000208020803F8020803F80000 +B9DA:000000087E0842084208420E42087E0800080000110811081F0811141F620000 +B9DB:000000087E0842084208420E42087E0800080000001000100010006801840000 +B9DC:000000087E0842084208420E42087E08000800000048004800A8011406620000 +B9DD:000000087E0842084208420E42087E0800080000000003F00408040803F00000 +B9DE:000000087E0842084208420E42087E080008000003F80020002000D003080000 +B9DF:000000087E0842084208420E42087E0800080000004003F8004000A003180000 +B9E0:000000087E0842084208420E42087E080008000003F8000803F8000800080000 +B9E1:000000087E0842084208420E42087E080008000003F8020003F8020003F80000 +B9E2:000000087E0842084208420E42087E080008000000000FF8022002200FF80000 +B9E3:000000087E0842084208420E42087E080008000000800FF803E0041003E00000 +B9E4:00000000001200127F9240924092409E4092409240927F920012001200120000 +B9E5:000000287E2842284228423842287E280028000007F800080008000800080000 +B9E6:000000287E2842284228423842287E280028000000003EF80208020802080000 +B9E7:000000287E2842284228423842287E280028000000003E100210022802C40000 +B9E8:000000287E2842284228423842287E280028002808000800080008000FF80000 +B9E9:000000287E2842284228423842287E2800280000000020F8201020303ECC0000 +B9EA:000000287E2842284228423842287E2800280000202021FC207020883E700000 +B9EB:000000287E2842284228423842287E280028000003F802000200020003F80000 +B9EC:000000287E2842284228423842287E280028000007F8000807F8040007F80000 +B9ED:000000287E2842284228423842287E28002800003EF802083E0820083E080000 +B9EE:000000287E2842284228423842287E28002800003EF802883E8820883EF80000 +B9EF:000000287E2842284228423842287E28002800003E8802883EF820883EF80000 +B9F0:000000287E2842284228423842287E28002800001F0801081F0810141F620000 +B9F1:000000287E2842284228423842287E28002800003EF802803EF820803EF80000 +B9F2:000000287E2842284228423842287E28002800003EFC02483E4820483EFC0000 +B9F3:000000287E2842284228423842287E28002800003E1002FE3E3820443E380000 +B9F4:000000287E2842284228423842287E280028000003F802080208020803F80000 +B9F5:000000287E2842284228423842287E28002800000208020803F8020803F80000 +B9F6:000000287E2842284228423842287E2800280000110811081F0811141F620000 +B9F7:000000287E2842284228423842287E2800280000000800080008003400C20000 +B9F8:000000287E2842284228423842287E28002800000048004800A8011406620000 +B9F9:000000287E2842284228423842287E2800280000000001F00208020801F00000 +B9FA:000000287E2842284228423842287E280028000003F80020002000D003080000 +B9FB:000000287E2842284228423842287E2800280000004003F8004000A003180000 +B9FC:000000287E2842284228423842287E280028000003F8000803F8000800080000 +B9FD:000000287E2842284228423842287E280028000003F8020003F8020003F80000 +B9FE:000000287E2842284228423842287E280028000000000FF8022002200FF80000 +B9FF:000000287E2842284228423842287E280028000000800FF803E0041003E00000 +BA00:00000000001000107F904090409E40904090409E40907F900010001000100000 +BA01:000000087E084208420E4208420E7E080008000007F800080008000800080000 +BA02:000000087E084208420E4208420E7E080008000000003EF80208020802080000 +BA03:000000087E084208420E4208420E7E080008000000001F080108011401620000 +BA04:000000087E084208420E4208420E7E080008000008000800080008000FF80000 +BA05:000000087E084208420E4208420E7E0800080000000010F8101010301ECC0000 +BA06:000000087E084208420E4208420E7E08000800000808087F081C08220F9C0000 +BA07:000000087E084208420E4208420E7E080008000003F802000200020003F80000 +BA08:000000087E084208420E4208420E7E080008000007F8000807F8040007F80000 +BA09:000000087E084208420E4208420E7E08000800003EF802083E0820083E080000 +BA0A:000000087E084208420E4208420E7E08000800003EF802883E8820883EF80000 +BA0B:000000087E084208420E4208420E7E08000800003E8802883EF820883EF80000 +BA0C:000000087E084208420E4208420E7E08000800001F0801081F0810141F620000 +BA0D:000000087E084208420E4208420E7E08000800003EF802803EF820803EF80000 +BA0E:000000087E084208420E4208420E7E08000800003EFC02483E4820483EFC0000 +BA0F:000000087E084208420E4208420E7E08000800001F08017F1F1C10221F1C0000 +BA10:000000087E084208420E4208420E7E080008000003F802080208020803F80000 +BA11:000000087E084208420E4208420E7E08000800000208020803F8020803F80000 +BA12:000000087E084208420E4208420E7E0800080000110811081F0811141F620000 +BA13:000000087E084208420E4208420E7E0800080000001000100010006801840000 +BA14:000000087E084208420E4208420E7E08000800000048004800A8011406620000 +BA15:000000087E084208420E4208420E7E0800080000000003F00408040803F00000 +BA16:000000087E084208420E4208420E7E080008000003F80020002000D003080000 +BA17:000000087E084208420E4208420E7E0800080000004003F8004000A003180000 +BA18:000000087E084208420E4208420E7E080008000003F8000803F8000800080000 +BA19:000000087E084208420E4208420E7E080008000003F8020003F8020003F80000 +BA1A:000000087E084208420E4208420E7E080008000000000FF8022002200FF80000 +BA1B:000000087E084208420E4208420E7E080008000000800FF803E0041003E00000 +BA1C:00000000001200127F924092409E40924092409E40927F920012001200120000 +BA1D:000000287E2842284238422842387E280028000007F800080008000800080000 +BA1E:000000287E2842284238422842387E280028000000003EF80208020802080000 +BA1F:000000287E2842284238422842387E280028000000003E100210022802C40000 +BA20:000000287E2842284238422842387E280028002808000800080008000FF80000 +BA21:000000287E2842284238422842387E2800280000000020F8201020303ECC0000 +BA22:000000287E2842284238422842387E2800280000202021FC207020883E700000 +BA23:000000287E2842284238422842387E280028000003F802000200020003F80000 +BA24:000000287E2842284238422842387E280028000007F8000807F8040007F80000 +BA25:000000287E2842284238422842387E28002800003EF802083E0820083E080000 +BA26:000000287E2842284238422842387E28002800003EF802883E8820883EF80000 +BA27:000000287E2842284238422842387E28002800003E8802883EF820883EF80000 +BA28:000000287E2842284238422842387E28002800001F0801081F0810141F620000 +BA29:000000287E2842284238422842387E28002800003EF802803EF820803EF80000 +BA2A:000000287E2842284238422842387E28002800003EFC02483E4820483EFC0000 +BA2B:000000287E2842284238422842387E28002800003E1002FE3E3820443E380000 +BA2C:000000287E2842284238422842387E280028000003F802080208020803F80000 +BA2D:000000287E2842284238422842387E28002800000208020803F8020803F80000 +BA2E:000000287E2842284238422842387E2800280000110811081F0811141F620000 +BA2F:000000287E2842284238422842387E2800280000000800080008003400C20000 +BA30:000000287E2842284238422842387E28002800000048004800A8011406620000 +BA31:000000287E2842284238422842387E2800280000000001F00208020801F00000 +BA32:000000287E2842284238422842387E280028000003F80020002000D003080000 +BA33:000000287E2842284238422842387E2800280000004003F8004000A003180000 +BA34:000000287E2842284238422842387E280028000003F8000803F8000800080000 +BA35:000000287E2842284238422842387E280028000003F8020003F8020003F80000 +BA36:000000287E2842284238422842387E280028000000000FF8022002200FF80000 +BA37:000000287E2842284238422842387E280028000000800FF803E0041003E00000 +BA38:00000000000200027F8240824082409E4082408240827F820002000200020000 +BA39:000000087E0842084208423842087E0800080000000007F80008000800080000 +BA3A:000000087E0842084208423842087E080008000000003EF80208020802080000 +BA3B:000000087E0842084208423842087E080008000000001F080108011401620000 +BA3C:000000087E0842084208423842087E080008000000001000100010001FF80000 +BA3D:000000087E0842084208423842087E0800080000000020F8201020303ECC0000 +BA3E:000000087E0842084208423842087E0800080000202021FC207020883E700000 +BA3F:000000087E0842084208423842087E080008000003F802000200020003F80000 +BA40:000000087E0842084208423842087E080008000007F8000807F8040007F80000 +BA41:000000087E0842084208423842087E08000800003EF802083E0820083E080000 +BA42:000000087E0842084208423842087E08000800003EF802883E8820883EF80000 +BA43:000000087E0842084208423842087E08000800003E8802883EF820883EF80000 +BA44:000000087E0842084208423842087E08000800000F8800880F8808140FA20000 +BA45:000000087E0842084208423842087E08000800003EF802803EF820803EF80000 +BA46:000000087E0842084208423842087E08000800003EFC02483E4820483EFC0000 +BA47:000000087E0842084208423842087E08000800003E1002FE3E3820443E380000 +BA48:000000087E0842084208423842087E080008000003F802080208020803F80000 +BA49:000000087E0842084208423842087E08000800000208020803F8020803F80000 +BA4A:000000087E0842084208423842087E0800080000210821083F0821143F620000 +BA4B:000000087E0842084208423842087E0800080000001000100010006801840000 +BA4C:000000087E0842084208423842087E08000800000048004800A8011406620000 +BA4D:000000087E0842084208423842087E0800080000000003F00408040803F00000 +BA4E:000000087E0842084208423842087E080008000003F80020002000D003080000 +BA4F:000000087E0842084208423842087E0800080000004003F8004000A003180000 +BA50:000000087E0842084208423842087E080008000003F8000803F8000800080000 +BA51:000000087E0842084208423842087E080008000003F8020003F8020003F80000 +BA52:000000087E0842084208423842087E080008000000000FF8022002200FF80000 +BA53:000000087E0842084208423842087E080008000000800FF803E0041003E00000 +BA54:00000000000A000A7F8A408A408A40BA408A408A408A7F8A000A000A000A0000 +BA55:000000287E284228422842E842287E280028000007F800080008000800080000 +BA56:000000287E284228422842E842287E280028000000003EF80208020802080000 +BA57:000000287E284228422842E842287E280028000000003E100210022802C40000 +BA58:000000287E284228422842E842287E280028000008000800080008000FF80000 +BA59:000000287E284228422842E842287E2800280000000020F8201020303ECC0000 +BA5A:000000287E284228422842E842287E2800280000202021FC207020883E700000 +BA5B:000000287E284228422842E842287E280028000003F802000200020003F80000 +BA5C:000000287E284228422842E842287E280028000007F8000807F8040007F80000 +BA5D:000000287E284228422842E842287E28002800003EF802083E0820083E080000 +BA5E:000000287E284228422842E842287E28002800003EF802883E8820883EF80000 +BA5F:000000287E284228422842E842287E28002800003E8802883EF820883EF80000 +BA60:000000287E284228422842E842287E28002800001F0801081F0810141F620000 +BA61:000000287E284228422842E842287E28002800003EF802803EF820803EF80000 +BA62:000000287E284228422842E842287E28002800003EFC02483E4820483EFC0000 +BA63:000000287E284228422842E842287E28002800003E1002FE3E3820443E380000 +BA64:000000287E284228422842E842287E280028000003F802080208020803F80000 +BA65:000000287E284228422842E842287E28002800000208020803F8020803F80000 +BA66:000000287E284228422842E842287E2800280000110811081F0811141F620000 +BA67:000000287E284228422842E842287E2800280000000800080008003400C20000 +BA68:000000287E284228422842E842287E28002800000048004800A8011406620000 +BA69:000000287E284228422842E842287E2800280000000001F00208020801F00000 +BA6A:000000287E284228422842E842287E280028000003F80020002000D003080000 +BA6B:000000287E284228422842E842287E2800280000004003F8004000A003180000 +BA6C:000000287E284228422842E842287E280028000003F8000803F8000800080000 +BA6D:000000287E284228422842E842287E280028000003F8020003F8020003F80000 +BA6E:000000287E284228422842E842287E280028000000000FF8022002200FF80000 +BA6F:000000287E284228422842E842287E280028000000800FF803E0041003E00000 +BA70:00000000000200027F824082409E40824082409E40827F820002000200020000 +BA71:000000087E0842084238420842387E0800080000000007F80008000800080000 +BA72:000000087E0842084238420842387E080008000000003EF80208020802080000 +BA73:000000087E0842084238420842387E080008000000001F080108011401620000 +BA74:000000087E0842084238420842387E080008000800001000100010001FF80000 +BA75:000000087E0842084238420842387E0800080000000020F8201020303ECC0000 +BA76:000000087E0842084238420842387E0800080000202021FC207020883E700000 +BA77:000000087E0842084238420842387E080008000003F802000200020003F80000 +BA78:000000087E0842084238420842387E080008000007F8000807F8040007F80000 +BA79:000000087E0842084238420842387E08000800003EF802083E0820083E080000 +BA7A:000000087E0842084238420842387E08000800003EF802883E8820883EF80000 +BA7B:000000087E0842084238420842387E08000800003E8802883EF820883EF80000 +BA7C:000000087E0842084238420842387E08000800000F8800880F8808140FA20000 +BA7D:000000087E0842084238420842387E08000800003EF802803EF820803EF80000 +BA7E:000000087E0842084238420842387E08000800003EFC02483E4820483EFC0000 +BA7F:000000087E0842084238420842387E08000800003E1002FE3E3820443E380000 +BA80:000000087E0842084238420842387E080008000003F802080208020803F80000 +BA81:000000087E0842084238420842387E08000800000208020803F8020803F80000 +BA82:000000087E0842084238420842387E0800080000210821083F0821143F620000 +BA83:000000087E0842084238420842387E0800080000001000100010006801840000 +BA84:000000087E0842084238420842387E08000800000048004800A8011406620000 +BA85:000000087E0842084238420842387E0800080000000003F00408040803F00000 +BA86:000000087E0842084238420842387E080008000003F80020002000D003080000 +BA87:000000087E0842084238420842387E0800080000004003F8004000A003180000 +BA88:000000087E0842084238420842387E080008000003F8000803F8000800080000 +BA89:000000087E0842084238420842387E080008000003F8020003F8020003F80000 +BA8A:000000087E0842084238420842387E080008000000000FF8022002200FF80000 +BA8B:000000087E0842084238420842387E080008000000800FF803E0041003E00000 +BA8C:00000000000A000A7F8A408A40BA408A408A40BA408A7F8A000A000A000A0000 +BA8D:000000287E28422842E8422842E87E280028000007F800080008000800080000 +BA8E:000000287E28422842E8422842E87E280028000000003EF80208020802080000 +BA8F:000000287E28422842E8422842E87E280028000000003E100210022802C40000 +BA90:000000287E28422842E8422842E87E280028002808000800080008000FF80000 +BA91:000000287E28422842E8422842E87E2800280000000020F8201020303ECC0000 +BA92:000000287E28422842E8422842E87E2800280000202021FC207020883E700000 +BA93:000000287E28422842E8422842E87E280028000003F802000200020003F80000 +BA94:000000287E28422842E8422842E87E280028000007F8000807F8040007F80000 +BA95:000000287E28422842E8422842E87E28002800003EF802083E0820083E080000 +BA96:000000287E28422842E8422842E87E28002800003EF802883E8820883EF80000 +BA97:000000287E28422842E8422842E87E28002800003E8802883EF820883EF80000 +BA98:000000287E28422842E8422842E87E28002800001F0801081F0810141F620000 +BA99:000000287E28422842E8422842E87E28002800003EF802803EF820803EF80000 +BA9A:000000287E28422842E8422842E87E28002800003EFC02483E4820483EFC0000 +BA9B:000000287E28422842E8422842E87E28002800003E1002FE3E3820443E380000 +BA9C:000000287E28422842E8422842E87E280028000003F802080208020803F80000 +BA9D:000000287E28422842E8422842E87E28002800000208020803F8020803F80000 +BA9E:000000287E28422842E8422842E87E2800280000110811081F0811141F620000 +BA9F:000000287E28422842E8422842E87E2800280000000800080008003400C20000 +BAA0:000000287E28422842E8422842E87E28002800000048004800A8011406620000 +BAA1:000000287E28422842E8422842E87E2800280000000001F00208020801F00000 +BAA2:000000287E28422842E8422842E87E280028000003F80020002000D003080000 +BAA3:000000287E28422842E8422842E87E2800280000004003F8004000A003180000 +BAA4:000000287E28422842E8422842E87E280028000003F8000803F8000800080000 +BAA5:000000287E28422842E8422842E87E280028000003F8020003F8020003F80000 +BAA6:000000287E28422842E8422842E87E280028000000000FF8022002200FF80000 +BAA7:000000287E28422842E8422842E87E280028000000800FF803E0041003E00000 +BAA8:000000003FF820082008200820083FF8000000000100010001007FFC00000000 +BAA9:00001FF01010101010101FF0010001007FFC00001FF000100010001000100000 +BAAA:00001FF01010101010101FF0010001007FFC000000003EF80208020802080000 +BAAB:00001FF01010101010101FF0010001007FFC000000001E100210022802C40000 +BAAC:00001FF01010101010101FF0010001007FFC000000001000100010001FF00000 +BAAD:00001FF01010101010101FF0010001007FFC0000000020F8201020303ECC0000 +BAAE:00001FF01010101010101FF0010001007FFC0000202021FC207020883E700000 +BAAF:00001FF01010101010101FF0010001007FFC00001FF01000100010001FF00000 +BAB0:00001FF01010101010101FF0010001007FFC00001FF000101FF010001FF00000 +BAB1:00001FF01010101010101FF0010001007FFC00003EF802083E0820083E080000 +BAB2:00001FF01010101010101FF0010001007FFC00003EF802883E8820883EF80000 +BAB3:00001FF01010101010101FF0010001007FFC00003E8802883EF820883EF80000 +BAB4:00001FF01010101010101FF0010001007FFC00003E1002103E1020283EC40000 +BAB5:00001FF01010101010101FF0010001007FFC00003EF802803EF820803EF80000 +BAB6:00001FF01010101010101FF0010001007FFC00003EFC02483E4820483EFC0000 +BAB7:00001FF01010101010101FF0010001007FFC00003E2003FC3E7020883E700000 +BAB8:00001FF01010101010101FF0010001007FFC00001FF01010101010101FF00000 +BAB9:00001FF01010101010101FF0010001007FFC0000101010101FF010101FF00000 +BABA:00001FF01010101010101FF0010001007FFC0000222022203E2022503E880000 +BABB:00001FF01010101010101FF0010001007FFC000000000100010002800C400000 +BABC:00001FF01010101010101FF0010001007FFC00000000024002400DA033100000 +BABD:00001FF01010101010101FF0010001007FFC0000000007C00820082007C00000 +BABE:00001FF01010101010101FF0010001007FFC0000000007E00080014006200000 +BABF:00001FF01010101010101FF0010001007FFC0000008007E00080014006200000 +BAC0:00001FF01010101010101FF0010001007FFC00001FF000101FF0001000100000 +BAC1:00001FF01010101010101FF0010001007FFC00001FF010001FF010001FF00000 +BAC2:00001FF01010101010101FF0010001007FFC000000001FF0044004401FF00000 +BAC3:00001FF01010101010101FF0010001007FFC000001001FF007C0082007C00000 +BAC4:0000001000103F90209020902090209E20903F90041004107FD0001000100000 +BAC5:000000083F882088208E20883F8804087FE8000007F800080008000800080000 +BAC6:000000083F882088208E20883F8804087FE8000000003EF80208020802080000 +BAC7:000000083F882088208E20883F8804087FE8000000001F080108011401620000 +BAC8:000000083F882088208E20883F8804087FE8000008000800080008000FF80000 +BAC9:000000083F882088208E20883F8804087FE80000000010F8101010301ECC0000 +BACA:000000083F882088208E20883F8804087FE800000808087F081C08220F9C0000 +BACB:000000083F882088208E20883F8804087FE8000003F802000200020003F80000 +BACC:000000083F882088208E20883F8804087FE8000007F8000807F8040007F80000 +BACD:000000083F882088208E20883F8804087FE800003EF802083E0820083E080000 +BACE:000000083F882088208E20883F8804087FE800003EF802883E8820883EF80000 +BACF:000000083F882088208E20883F8804087FE800003E8802883EF820883EF80000 +BAD0:000000083F882088208E20883F8804087FE800001F0801081F0810141F620000 +BAD1:000000083F882088208E20883F8804087FE800003EF802803EF820803EF80000 +BAD2:000000083F882088208E20883F8804087FE800003EFC02483E4820483EFC0000 +BAD3:000000083F882088208E20883F8804087FE800001F08017F1F1C10221F1C0000 +BAD4:000000083F882088208E20883F8804087FE8000003F802080208020803F80000 +BAD5:000000083F882088208E20883F8804087FE800000208020803F8020803F80000 +BAD6:000000083F882088208E20883F8804087FE80000110811081F0811141F620000 +BAD7:000000083F882088208E20883F8804087FE80000001000100010006801840000 +BAD8:000000083F882088208E20883F8804087FE800000048004800A8011406620000 +BAD9:000000083F882088208E20883F8804087FE80000000003F00408040803F00000 +BADA:000000083F882088208E20883F8804087FE8000003F80020002000D003080000 +BADB:000000083F882088208E20883F8804087FE80000004003F8004000A003180000 +BADC:000000083F882088208E20883F8804087FE8000003F8000803F8000800080000 +BADD:000000083F882088208E20883F8804087FE8000003F8020003F8020003F80000 +BADE:000000083F882088208E20883F8804087FE8000000000FF8022002200FF80000 +BADF:000000083F882088208E20883F8804087FE8000000800FF803E0041003E00000 +BAE0:0000001200123F92209220922092209E20923F92041204127FD2001200120000 +BAE1:000000283FA820A820B820A83FA804287FA8000007F800080008000800080000 +BAE2:000000283FA820A820B820A83FA804287FA8000000003EF80208020802080000 +BAE3:000000283FA820A820B820A83FA804287FA8000000001F080108011401620000 +BAE4:000000283FA820A820B820A83FA804287FA8000008000800080008000FF80000 +BAE5:000000283FA820A820B820A83FA804287FA80000000010F8101010301ECC0000 +BAE6:000000283FA820A820B820A83FA804287FA800000808087F081C08220F9C0000 +BAE7:000000283FA820A820B820A83FA804287FA8000003F802000200020003F80000 +BAE8:000000283FA820A820B820A83FA804287FA8000007F8000807F8040007F80000 +BAE9:000000283FA820A820B820A83FA804287FA800003EF802083E0820083E080000 +BAEA:000000283FA820A820B820A83FA804287FA800003EF802883E8820883EF80000 +BAEB:000000283FA820A820B820A83FA804287FA800003E8802883EF820883EF80000 +BAEC:000000283FA820A820B820A83FA804287FA800001F0801081F0810141F620000 +BAED:000000283FA820A820B820A83FA804287FA800003EF802803EF820803EF80000 +BAEE:000000283FA820A820B820A83FA804287FA800003EFC02483E4820483EFC0000 +BAEF:000000283FA820A820B820A83FA804287FA800001F08017F1F1C10221F1C0000 +BAF0:000000283FA820A820B820A83FA804287FA8000003F802080208020803F80000 +BAF1:000000283FA820A820B820A83FA804287FA800000208020803F8020803F80000 +BAF2:000000283FA820A820B820A83FA804287FA80000110811081F0811141F620000 +BAF3:000000283FA820A820B820A83FA804287FA80000001000100010006801840000 +BAF4:000000283FA820A820B820A83FA804287FA800000048004800A8011406620000 +BAF5:000000283FA820A820B820A83FA804287FA80000000003F00408040803F00000 +BAF6:000000283FA820A820B820A83FA804287FA8000003F80020002000D003080000 +BAF7:000000283FA820A820B820A83FA804287FA80000004003F8004000A003180000 +BAF8:000000283FA820A820B820A83FA804287FA8000003F8000803F8000800080000 +BAF9:000000283FA820A820B820A83FA804287FA8000003F8020003F8020003F80000 +BAFA:000000283FA820A820B820A83FA804287FA8000000000FF8022002200FF80000 +BAFB:000000283FA820A820B820A83FA804287FA8000000800FF803E0041003E00000 +BAFC:0000000800083F88208820882088208820883F88040804087FE8000800080000 +BAFD:000000083F882088208820883F8804087FE8000007F800080008000800080000 +BAFE:000000083F882088208820883F8804087FE8000000003EF80208020802080000 +BAFF:000000083F882088208820883F8804087FE8000000001F080108011401620000 +BB00:000000083F882088208820883F8804087FE8000008000800080008000FF80000 +BB01:000000083F882088208820883F8804087FE80000000010F8101010301ECC0000 +BB02:000000083F882088208820883F8804087FE800000808087F081C08220F9C0000 +BB03:000000083F882088208820883F8804087FE8000003F802000200020003F80000 +BB04:000000083F882088208820883F8804087FE8000007F8000807F8040007F80000 +BB05:000000083F882088208820883F8804087FE800003EF802083E0820083E080000 +BB06:000000083F882088208820883F8804087FE800003EF802883E8820883EF80000 +BB07:000000083F882088208820883F8804087FE800003E8802883EF820883EF80000 +BB08:000000083F882088208820883F8804087FE800001F0801081F0810141F620000 +BB09:000000083F882088208820883F8804087FE800003EF802803EF820803EF80000 +BB0A:000000083F882088208820883F8804087FE800003EFC02483E4820483EFC0000 +BB0B:000000083F882088208820883F8804087FE800001F08017F1F1C10221F1C0000 +BB0C:000000083F882088208820883F8804087FE8000003F802080208020803F80000 +BB0D:000000083F882088208820883F8804087FE800000208020803F8020803F80000 +BB0E:000000083F882088208820883F8804087FE80000110811081F0811141F620000 +BB0F:000000083F882088208820883F8804087FE80000001000100010006801840000 +BB10:000000083F882088208820883F8804087FE800000048004800A8011406620000 +BB11:000000083F882088208820883F8804087FE80000000003F00408040803F00000 +BB12:000000083F882088208820883F8804087FE8000003F80020002000D003080000 +BB13:000000083F882088208820883F8804087FE80000004003F8004000A003180000 +BB14:000000083F882088208820883F8804087FE8000003F8000803F8000800080000 +BB15:000000083F882088208820883F8804087FE8000003F8020003F8020003F80000 +BB16:000000083F882088208820883F8804087FE8000000000FF8022002200FF80000 +BB17:000000083F882088208820883F8804087FE8000000800FF803E0041003E00000 +BB18:000000003FF820082008200820083FF8000004400440044004407FFC00000000 +BB19:00001FF01010101010101FF0044004407FFC00001FF000100010001000100000 +BB1A:00001FF01010101010101FF0044004407FFC000000003EF80208020802080000 +BB1B:00001FF01010101010101FF0044004407FFC000000001E100210022802C40000 +BB1C:00001FF01010101010101FF0044004407FFC000000001000100010001FF00000 +BB1D:00001FF01010101010101FF0044004407FFC0000000020F8201020303ECC0000 +BB1E:00001FF01010101010101FF0044004407FFC0000202021FC207020883E700000 +BB1F:00001FF01010101010101FF0044004407FFC00001FF01000100010001FF00000 +BB20:00001FF01010101010101FF0044004407FFC00001FF000101FF010001FF00000 +BB21:00001FF01010101010101FF0044004407FFC00003EF802083E0820083E080000 +BB22:00001FF01010101010101FF0044004407FFC00003EF802883E8820883EF80000 +BB23:00001FF01010101010101FF0044004407FFC00003E8802883EF820883EF80000 +BB24:00001FF01010101010101FF0044004407FFC00003E1002103E1020283EC40000 +BB25:00001FF01010101010101FF0044004407FFC00003EF802803EF820803EF80000 +BB26:00001FF01010101010101FF0044004407FFC00003EFC02483E4820483EFC0000 +BB27:00001FF01010101010101FF0044004407FFC00003E2003FC3E7020883E700000 +BB28:00001FF01010101010101FF0044004407FFC00001FF01010101010101FF00000 +BB29:00001FF01010101010101FF0044004407FFC0000101010101FF010101FF00000 +BB2A:00001FF01010101010101FF0044004407FFC0000222022203E2022503E880000 +BB2B:00001FF01010101010101FF0044004407FFC000000000100010002800C400000 +BB2C:00001FF01010101010101FF0044004407FFC00000000024002400DA033100000 +BB2D:00001FF01010101010101FF0044004407FFC0000000007C00820082007C00000 +BB2E:00001FF01010101010101FF0044004407FFC0000000007E00080014006200000 +BB2F:00001FF01010101010101FF0044004407FFC0000008007E00080014006200000 +BB30:00001FF01010101010101FF0044004407FFC00001FF000101FF0001000100000 +BB31:00001FF01010101010101FF0044004407FFC00001FF010001FF010001FF00000 +BB32:00001FF01010101010101FF0044004407FFC000000001FF0044004401FF00000 +BB33:00001FF01010101010101FF0044004407FFC000001001FF007C0082007C00000 +BB34:000000003FF8200820082008200820083FF800003FF801000100010001000000 +BB35:00001FF01010101010101FF000007FFC010001001FF000100010001000100000 +BB36:00001FF01010101010101FF000007FFC0100010000003EF80208020802080000 +BB37:00001FF01010101010101FF000007FFC0100010000001E100210022802C40000 +BB38:00001FF01010101010101FF0000000007FFC010001001100100010001FF00000 +BB39:00001FF01010101010101FF000007FFC01000100000020F8201020303ECC0000 +BB3A:00001FF01010101010101FF000007FFC01000100202021FC207020883E700000 +BB3B:00001FF01010101010101FF000007FFC010001001FF01000100010001FF00000 +BB3C:00001FF01010101010101FF000007FFC010001001FF000101FF010001FF00000 +BB3D:00001FF01010101010101FF000007FFC010001003EF802083E0820083E080000 +BB3E:00001FF01010101010101FF000007FFC010001003EF802883E8820883EF80000 +BB3F:00001FF01010101010101FF000007FFC010001003E8802883EF820883EF80000 +BB40:00001FF01010101010101FF000007FFC010001003E1002103E1020283EC40000 +BB41:00001FF01010101010101FF000007FFC010001003EF802803EF820803EF80000 +BB42:00001FF01010101010101FF000007FFC010001003EFC02483E4820483EFC0000 +BB43:00001FF01010101010101FF000007FFC010001003E2003FC3E7020883E700000 +BB44:00001FF01010101010101FF000007FFC010001001FF01010101010101FF00000 +BB45:00001FF01010101010101FF000007FFC01000100101010101FF010101FF00000 +BB46:00001FF01010101010101FF000007FFC01000100222022203E2022503E880000 +BB47:00001FF01010101010101FF000007FFC0100010000000100010002800C400000 +BB48:00001FF01010101010101FF000007FFC010001000000024002400DA033100000 +BB49:00001FF01010101010101FF000007FFC01000100000007C00820082007C00000 +BB4A:00001FF01010101010101FF000007FFC01000100000007E00080014006200000 +BB4B:00001FF01010101010101FF000007FFC01000100008007E00080014006200000 +BB4C:00001FF01010101010101FF000007FFC010001001FF000101FF0001000100000 +BB4D:00001FF01010101010101FF000007FFC010001001FF010001FF010001FF00000 +BB4E:00001FF01010101010101FF000007FFC0100010000001FF0044004401FF00000 +BB4F:00001FF01010101010101FF000007FFC0100010001001FF007C0082007C00000 +BB50:000000083FC8204820482048204820483FC800087FE8040804F8040804080000 +BB51:00083F88208820883F8800087FE8027802080000000007F80008000800080000 +BB52:00083F88208820883F8800087FE802780208000000003EF80208020802080000 +BB53:00083F88208820883F8800087FE802780208000000001F080108011401620000 +BB54:00083F88208820883F88000800087FE80278020802081000100010001FF80000 +BB55:00083F88208820883F8800087FE8027802080000000020F8201020303ECC0000 +BB56:00083F88208820883F8800087FE8027802080000202021FC207020883E700000 +BB57:00083F88208820883F8800087FE802780208000003F802000200020003F80000 +BB58:00083F88208820883F8800087FE802780208000007F8000807F8040007F80000 +BB59:00083F88208820883F8800087FE80278020800003EF802083E0820083E080000 +BB5A:00083F88208820883F8800087FE80278020800003EF802883E8820883EF80000 +BB5B:00083F88208820883F8800087FE80278020800003E8802883EF820883EF80000 +BB5C:00083F88208820883F8800087FE80278020800000F8800880F8808140FA20000 +BB5D:00083F88208820883F8800087FE80278020800003EF802803EF820803EF80000 +BB5E:00083F88208820883F8800087FE80278020800003EFC02483E4820483EFC0000 +BB5F:00083F88208820883F8800087FE80278020800003E1002FE3E3820443E380000 +BB60:00083F88208820883F8800087FE802780208000003F802080208020803F80000 +BB61:00083F88208820883F8800087FE80278020800000208020803F8020803F80000 +BB62:00083F88208820883F8800087FE8027802080000210821083F0821143F620000 +BB63:00083F88208820883F8800087FE8027802080000001000100010006801840000 +BB64:00083F88208820883F8800087FE80278020800000048004800A8011406620000 +BB65:00083F88208820883F8800087FE8027802080000000003F00408040803F00000 +BB66:00083F88208820883F8800087FE802780208000003F80020002000D003080000 +BB67:00083F88208820883F8800087FE8027802080000004003F8004000A003180000 +BB68:00083F88208820883F8800087FE802780208000003F8000803F8000800080000 +BB69:00083F88208820883F8800087FE802780208000003F8020003F8020003F80000 +BB6A:00083F88208820883F8800087FE802780208000000000FF8022002200FF80000 +BB6B:00083F88208820883F8800087FE802780208000000800FF803E0041003E00000 +BB6C:0000000A3FCA204A204A204A204A204A3FCA000A7FEA040A047A040A040A0000 +BB6D:00283FA820A820A83FA800287FA805E804280000000007F80008000800080000 +BB6E:00283FA820A820A83FA800287FA805E80428000000003EF80208020802080000 +BB6F:00283FA820A820A83FA800287FA805E80428000000001F080108011401620000 +BB70:00283FA820A820A83FA8002800287FA8042805E804281428100010001FF80000 +BB71:00283FA820A820A83FA800287FA805E804280000000020F8201020303ECC0000 +BB72:00283FA820A820A83FA800287FA805E804280000202021FC207020883E700000 +BB73:00283FA820A820A83FA800287FA805E80428000003F802000200020003F80000 +BB74:00283FA820A820A83FA800287FA805E80428000007F8000807F8040007F80000 +BB75:00283FA820A820A83FA800287FA805E8042800003EF802083E0820083E080000 +BB76:00283FA820A820A83FA800287FA805E8042800003EF802883E8820883EF80000 +BB77:00283FA820A820A83FA800287FA805E8042800003E8802883EF820883EF80000 +BB78:00283FA820A820A83FA800287FA805E8042800000F8800880F8808140FA20000 +BB79:00283FA820A820A83FA800287FA805E8042800003EF802803EF820803EF80000 +BB7A:00283FA820A820A83FA800287FA805E8042800003EFC02483E4820483EFC0000 +BB7B:00283FA820A820A83FA800287FA805E8042800003E1002FE3E3820443E380000 +BB7C:00283FA820A820A83FA800287FA805E80428000003F802080208020803F80000 +BB7D:00283FA820A820A83FA800287FA805E8042800000208020803F8020803F80000 +BB7E:00283FA820A820A83FA800287FA805E804280000210821083F0821143F620000 +BB7F:00283FA820A820A83FA800287FA805E804280000001000100010006801840000 +BB80:00283FA820A820A83FA800287FA805E8042800000048004800A8011406620000 +BB81:00283FA820A820A83FA800287FA805E804280000000003F00408040803F00000 +BB82:00283FA820A820A83FA800287FA805E80428000003F80020002000D003080000 +BB83:00283FA820A820A83FA800287FA805E804280000004003F8004000A003180000 +BB84:00283FA820A820A83FA800287FA805E80428000003F8000803F8000800080000 +BB85:00283FA820A820A83FA800287FA805E80428000003F8020003F8020003F80000 +BB86:00283FA820A820A83FA800287FA805E80428000000000FF8022002200FF80000 +BB87:00283FA820A820A83FA800287FA805E80428000000800FF803E0041003E00000 +BB88:000000083FC8204820482048204820483FC800087FE804080408040804080000 +BB89:00083F88208820883F8800087FE8020802000000000007F80008000800080000 +BB8A:00083F88208820883F8800087FE802080200000000003EF80208020802080000 +BB8B:00083F88208820883F8800087FE802080200000000001F080108011401620000 +BB8C:00083F88208820883F88000800087FE80208020802081008100010001FF80000 +BB8D:00083F88208820883F8800087FE8020802000000000020F8201020303ECC0000 +BB8E:00083F88208820883F8800087FE8020802000000202021FC207020883E700000 +BB8F:00083F88208820883F8800087FE802080200000003F802000200020003F80000 +BB90:00083F88208820883F8800087FE802080200000007F8000807F8040007F80000 +BB91:00083F88208820883F8800087FE80208020000003EF802083E0820083E080000 +BB92:00083F88208820883F8800087FE80208020000003EF802883E8820883EF80000 +BB93:00083F88208820883F8800087FE80208020000003E8802883EF820883EF80000 +BB94:00083F88208820883F8800087FE80208020000000F8800880F8808140FA20000 +BB95:00083F88208820883F8800087FE80208020000003EF802803EF820803EF80000 +BB96:00083F88208820883F8800087FE80208020000003EFC02483E4820483EFC0000 +BB97:00083F88208820883F8800087FE80208020000003E1002FE3E3820443E380000 +BB98:00083F88208820883F8800087FE802080200000003F802080208020803F80000 +BB99:00083F88208820883F8800087FE80208020000000208020803F8020803F80000 +BB9A:00083F88208820883F8800087FE8020802000000210821083F0821143F620000 +BB9B:00083F88208820883F8800087FE8020802000000001000100010006801840000 +BB9C:00083F88208820883F8800087FE80208020000000048004800A8011406620000 +BB9D:00083F88208820883F8800087FE8020802000000000003F00408040803F00000 +BB9E:00083F88208820883F8800087FE802080200000003F80020002000D003080000 +BB9F:00083F88208820883F8800087FE8020802000000004003F8004000A003180000 +BBA0:00083F88208820883F8800087FE802080200000003F8000803F8000800080000 +BBA1:00083F88208820883F8800087FE802080200000003F8020003F8020003F80000 +BBA2:00083F88208820883F8800087FE802080200000000000FF8022002200FF80000 +BBA3:00083F88208820883F8800087FE802080200000000800FF803E0041003E00000 +BBA4:000000003FF8200820082008200820083FF800007FFC04400440044004400000 +BBA5:00001FF01010101010101FF000007FFC044004401FF000100010001000100000 +BBA6:00001FF01010101010101FF000007FFC0440044000003EF80208020802080000 +BBA7:00001FF01010101010101FF000007FFC0440044000001E100210022802C40000 +BBA8:00001FF01010101010101FF0000000007FFC044004401440100010001FF00000 +BBA9:00001FF01010101010101FF000007FFC04400440000020F8201020303ECC0000 +BBAA:00001FF01010101010101FF000007FFC04400440202021FC207020883E700000 +BBAB:00001FF01010101010101FF000007FFC044004401FF01000100010001FF00000 +BBAC:00001FF01010101010101FF000007FFC044004401FF000101FF010001FF00000 +BBAD:00001FF01010101010101FF000007FFC044004403EF802083E0820083E080000 +BBAE:00001FF01010101010101FF000007FFC044004403EF802883E8820883EF80000 +BBAF:00001FF01010101010101FF000007FFC044004403E8802883EF820883EF80000 +BBB0:00001FF01010101010101FF000007FFC044004403E1002103E1020283EC40000 +BBB1:00001FF01010101010101FF000007FFC044004403EF802803EF820803EF80000 +BBB2:00001FF01010101010101FF000007FFC044004403EFC02483E4820483EFC0000 +BBB3:00001FF01010101010101FF000007FFC044004403E2003FC3E7020883E700000 +BBB4:00001FF01010101010101FF000007FFC044004401FF01010101010101FF00000 +BBB5:00001FF01010101010101FF000007FFC04400440101010101FF010101FF00000 +BBB6:00001FF01010101010101FF000007FFC04400440222022203E2022503E880000 +BBB7:00001FF01010101010101FF000007FFC0440044000000100010002800C400000 +BBB8:00001FF01010101010101FF000007FFC044004400000024002400DA033100000 +BBB9:00001FF01010101010101FF000007FFC04400440000007C00820082007C00000 +BBBA:00001FF01010101010101FF000007FFC04400440000007E00080014006200000 +BBBB:00001FF01010101010101FF000007FFC04400440008007E00080014006200000 +BBBC:00001FF01010101010101FF000007FFC044004401FF000101FF0001000100000 +BBBD:00001FF01010101010101FF000007FFC044004401FF010001FF010001FF00000 +BBBE:00001FF01010101010101FF000007FFC0440044000001FF0044004401FF00000 +BBBF:00001FF01010101010101FF000007FFC0440044001001FF007C0082007C00000 +BBC0:000000003FF820082008200820083FF80000000000007FFC0000000000000000 +BBC1:00001FF01010101010101FF0000000007FFC00001FF000100010001000100000 +BBC2:00001FF01010101010101FF0000000007FFC000000003EF80208020802080000 +BBC3:00001FF01010101010101FF0000000007FFC000000001E100210022802C40000 +BBC4:00001FF01010101010101FF0000000007FFC000000001000100010001FF00000 +BBC5:00001FF01010101010101FF0000000007FFC0000000020F8201020303ECC0000 +BBC6:00001FF01010101010101FF0000000007FFC0000202021FC207020883E700000 +BBC7:00001FF01010101010101FF0000000007FFC00001FF01000100010001FF00000 +BBC8:00001FF01010101010101FF0000000007FFC00001FF000101FF010001FF00000 +BBC9:00001FF01010101010101FF0000000007FFC00003EF802083E0820083E080000 +BBCA:00001FF01010101010101FF0000000007FFC00003EF802883E8820883EF80000 +BBCB:00001FF01010101010101FF0000000007FFC00003E8802883EF820883EF80000 +BBCC:00001FF01010101010101FF0000000007FFC00003E1002103E1020283EC40000 +BBCD:00001FF01010101010101FF0000000007FFC00003EF802803EF820803EF80000 +BBCE:00001FF01010101010101FF0000000007FFC00003EFC02483E4820483EFC0000 +BBCF:00001FF01010101010101FF0000000007FFC00003E2003FC3E7020883E700000 +BBD0:00001FF01010101010101FF0000000007FFC00001FF01010101010101FF00000 +BBD1:00001FF01010101010101FF0000000007FFC0000101010101FF010101FF00000 +BBD2:00001FF01010101010101FF0000000007FFC0000222022203E2022503E880000 +BBD3:00001FF01010101010101FF0000000007FFC000000000100010002800C400000 +BBD4:00001FF01010101010101FF0000000007FFC00000000024002400DA033100000 +BBD5:00001FF01010101010101FF0000000007FFC0000000007C00820082007C00000 +BBD6:00001FF01010101010101FF0000000007FFC0000000007E00080014006200000 +BBD7:00001FF01010101010101FF0000000007FFC0000008007E00080014006200000 +BBD8:00001FF01010101010101FF0000000007FFC00001FF000101FF0001000100000 +BBD9:00001FF01010101010101FF0000000007FFC00001FF010001FF010001FF00000 +BBDA:00001FF01010101010101FF0000000007FFC000000001FF0044004401FF00000 +BBDB:00001FF01010101010101FF0000000007FFC000001001FF007C0082007C00000 +BBDC:0000000800083F88208820882088208820883F8800087FE80008000800080000 +BBDD:000000083F882088208820883F8800087FE8000007F800080008000800080000 +BBDE:000000083F882088208820883F8800087FE8000000003EF80208020802080000 +BBDF:000000083F882088208820883F8800087FE8000000001F080108011401620000 +BBE0:000000083F882088208820883F8800087FE8000008000800080008000FF80000 +BBE1:000000083F882088208820883F8800087FE80000000010F8101010301ECC0000 +BBE2:000000083F882088208820883F8800087FE800000808087F081C08220F9C0000 +BBE3:000000083F882088208820883F8800087FE8000003F802000200020003F80000 +BBE4:000000083F882088208820883F8800087FE8000007F8000807F8040007F80000 +BBE5:000000083F882088208820883F8800087FE800003EF802083E0820083E080000 +BBE6:000000083F882088208820883F8800087FE800003EF802883E8820883EF80000 +BBE7:000000083F882088208820883F8800087FE800003E8802883EF820883EF80000 +BBE8:000000083F882088208820883F8800087FE800001F0801081F0810141F620000 +BBE9:000000083F882088208820883F8800087FE800003EF802803EF820803EF80000 +BBEA:000000083F882088208820883F8800087FE800003EFC02483E4820483EFC0000 +BBEB:000000083F882088208820883F8800087FE800001F08017F1F1C10221F1C0000 +BBEC:000000083F882088208820883F8800087FE8000003F802080208020803F80000 +BBED:000000083F882088208820883F8800087FE800000208020803F8020803F80000 +BBEE:000000083F882088208820883F8800087FE80000110811081F0811141F620000 +BBEF:000000083F882088208820883F8800087FE80000001000100010006801840000 +BBF0:000000083F882088208820883F8800087FE800000048004800A8011406620000 +BBF1:000000083F882088208820883F8800087FE80000000003F00408040803F00000 +BBF2:000000083F882088208820883F8800087FE8000003F80020002000D003080000 +BBF3:000000083F882088208820883F8800087FE80000004003F8004000A003180000 +BBF4:000000083F882088208820883F8800087FE8000003F8000803F8000800080000 +BBF5:000000083F882088208820883F8800087FE8000003F8020003F8020003F80000 +BBF6:000000083F882088208820883F8800087FE8000000000FF8022002200FF80000 +BBF7:000000083F882088208820883F8800087FE8000000800FF803E0041003E00000 +BBF8:00000000000800087F884088408840884088408840887F880008000800080000 +BBF9:000000087E0842084208420842087E0800080000000007F80008000800080000 +BBFA:000000087E0842084208420842087E080008000000003EF80208020802080000 +BBFB:000000087E0842084208420842087E080008000000001F080108011401620000 +BBFC:000000087E0842084208420842087E080008000800001000100010001FF80000 +BBFD:000000087E0842084208420842087E0800080000000020F8201020303ECC0000 +BBFE:000000087E0842084208420842087E0800080000202021FC207020883E700000 +BBFF:000000087E0842084208420842087E080008000003F802000200020003F80000 +BC00:000000087E0842084208420842087E080008000007F8000807F8040007F80000 +BC01:000000087E0842084208420842087E08000800003EF802083E0820083E080000 +BC02:000000087E0842084208420842087E08000800003EF802883E8820883EF80000 +BC03:000000087E0842084208420842087E08000800003E8802883EF820883EF80000 +BC04:000000087E0842084208420842087E08000800000F8800880F8808140FA20000 +BC05:000000087E0842084208420842087E08000800003EF802803EF820803EF80000 +BC06:000000087E0842084208420842087E08000800003EFC02483E4820483EFC0000 +BC07:000000087E0842084208420842087E08000800003E1002FE3E3820443E380000 +BC08:000000087E0842084208420842087E080008000003F802080208020803F80000 +BC09:000000087E0842084208420842087E08000800000208020803F8020803F80000 +BC0A:000000087E0842084208420842087E0800080000210821083F0821143F620000 +BC0B:000000087E0842084208420842087E0800080000001000100010006801840000 +BC0C:000000087E0842084208420842087E08000800000048004800A8011406620000 +BC0D:000000087E0842084208420842087E0800080000000003F00408040803F00000 +BC0E:000000087E0842084208420842087E080008000003F80020002000D003080000 +BC0F:000000087E0842084208420842087E0800080000004003F8004000A003180000 +BC10:000000087E0842084208420842087E080008000003F8000803F8000800080000 +BC11:000000087E0842084208420842087E080008000003F8020003F8020003F80000 +BC12:000000087E0842084208420842087E080008000000000FF8022002200FF80000 +BC13:000000087E0842084208420842087E080008000000800FF803E0041003E00000 +BC14:00000000001000102090209020903F9E2090209020903F900010001000100000 +BC15:000000080008420842087E0E42087E080008000007F800080008000800080000 +BC16:000000080008420842087E0E42087E080008000000003EF80208020802080000 +BC17:000000080008420842087E0E42087E080008000000001F080108011401620000 +BC18:000000080008420842087E0E42087E080008000808000800080008000FF80000 +BC19:000000080008420842087E0E42087E0800080000000010F8101010301ECC0000 +BC1A:000000080008420842087E0E42087E08000800000808087F081C08220F9C0000 +BC1B:000000080008420842087E0E42087E080008000003F802000200020003F80000 +BC1C:000000080008420842087E0E42087E080008000007F8000807F8040007F80000 +BC1D:000000080008420842087E0E42087E08000800003EF802083E0820083E080000 +BC1E:000000080008420842087E0E42087E08000800003EF802883E8820883EF80000 +BC1F:000000080008420842087E0E42087E08000800003E8802883EF820883EF80000 +BC20:000000080008420842087E0E42087E08000800001F0801081F0810141F620000 +BC21:000000080008420842087E0E42087E08000800003EF802803EF820803EF80000 +BC22:000000080008420842087E0E42087E08000800003EFC02483E4820483EFC0000 +BC23:000000080008420842087E0E42087E08000800001F08017F1F1C10221F1C0000 +BC24:000000080008420842087E0E42087E080008000003F802080208020803F80000 +BC25:000000080008420842087E0E42087E08000800000208020803F8020803F80000 +BC26:000000080008420842087E0E42087E0800080000110811081F0811141F620000 +BC27:000000080008420842087E0E42087E0800080000001000100010006801840000 +BC28:000000080008420842087E0E42087E08000800000048004800A8011406620000 +BC29:000000080008420842087E0E42087E0800080000000003F00408040803F00000 +BC2A:000000080008420842087E0E42087E080008000003F80020002000D003080000 +BC2B:000000080008420842087E0E42087E0800080000004003F8004000A003180000 +BC2C:000000080008420842087E0E42087E080008000003F8000803F8000800080000 +BC2D:000000080008420842087E0E42087E080008000003F8020003F8020003F80000 +BC2E:000000080008420842087E0E42087E080008000000000FF8022002200FF80000 +BC2F:000000080008420842087E0E42087E080008000000800FF803E0041003E00000 +BC30:00000000001200122092209220923F9E2092209220923F920012001200120000 +BC31:000000280028422842287E3842287E280028000007F800080008000800080000 +BC32:000000280028422842287E3842287E280028000000003EF80208020802080000 +BC33:000000280028422842287E3842287E280028000000003E100210022802C40000 +BC34:000000280028422842287E3842287E280028002808000800080008000FF80000 +BC35:000000280028422842287E3842287E2800280000000020F8201020303ECC0000 +BC36:000000280028422842287E3842287E2800280000202021FC207020883E700000 +BC37:000000280028422842287E3842287E280028000003F802000200020003F80000 +BC38:000000280028422842287E3842287E280028000007F8000807F8040007F80000 +BC39:000000280028422842287E3842287E28002800003EF802083E0820083E080000 +BC3A:000000280028422842287E3842287E28002800003EF802883E8820883EF80000 +BC3B:000000280028422842287E3842287E28002800003E8802883EF820883EF80000 +BC3C:000000280028422842287E3842287E28002800001F0801081F0810141F620000 +BC3D:000000280028422842287E3842287E28002800003EF802803EF820803EF80000 +BC3E:000000280028422842287E3842287E28002800003EFC02483E4820483EFC0000 +BC3F:000000280028422842287E3842287E28002800003E1002FE3E3820443E380000 +BC40:000000280028422842287E3842287E280028000003F802080208020803F80000 +BC41:000000280028422842287E3842287E28002800000208020803F8020803F80000 +BC42:000000280028422842287E3842287E2800280000110811081F0811141F620000 +BC43:000000280028422842287E3842287E2800280000000800080008003400C20000 +BC44:000000280028422842287E3842287E28002800000048004800A8011406620000 +BC45:000000280028422842287E3842287E2800280000000001F00208020801F00000 +BC46:000000280028422842287E3842287E280028000003F80020002000D003080000 +BC47:000000280028422842287E3842287E2800280000004003F8004000A003180000 +BC48:000000280028422842287E3842287E280028000003F8000803F8000800080000 +BC49:000000280028422842287E3842287E280028000003F8020003F8020003F80000 +BC4A:000000280028422842287E3842287E280028000000000FF8022002200FF80000 +BC4B:000000280028422842287E3842287E280028000000800FF803E0041003E00000 +BC4C:000000000010001020902090209E3F902090209E20903F900010001000100000 +BC4D:0000000800084208420E7E08420E7E080008000007F800080008000800080000 +BC4E:0000000800084208420E7E08420E7E080008000000003EF80208020802080000 +BC4F:0000000800084208420E7E08420E7E080008000000001F080108011401620000 +BC50:0000000800084208420E7E08420E7E080008000008000800080008000FF80000 +BC51:0000000800084208420E7E08420E7E0800080000000010F8101010301ECC0000 +BC52:0000000800084208420E7E08420E7E08000800000808087F081C08220F9C0000 +BC53:0000000800084208420E7E08420E7E080008000003F802000200020003F80000 +BC54:0000000800084208420E7E08420E7E080008000007F8000807F8040007F80000 +BC55:0000000800084208420E7E08420E7E08000800003EF802083E0820083E080000 +BC56:0000000800084208420E7E08420E7E08000800003EF802883E8820883EF80000 +BC57:0000000800084208420E7E08420E7E08000800003E8802883EF820883EF80000 +BC58:0000000800084208420E7E08420E7E08000800001F0801081F0810141F620000 +BC59:0000000800084208420E7E08420E7E08000800003EF802803EF820803EF80000 +BC5A:0000000800084208420E7E08420E7E08000800003EFC02483E4820483EFC0000 +BC5B:0000000800084208420E7E08420E7E08000800001F08017F1F1C10221F1C0000 +BC5C:0000000800084208420E7E08420E7E080008000003F802080208020803F80000 +BC5D:0000000800084208420E7E08420E7E08000800000208020803F8020803F80000 +BC5E:0000000800084208420E7E08420E7E0800080000110811081F0811141F620000 +BC5F:0000000800084208420E7E08420E7E0800080000001000100010006801840000 +BC60:0000000800084208420E7E08420E7E08000800000048004800A8011406620000 +BC61:0000000800084208420E7E08420E7E0800080000000003F00408040803F00000 +BC62:0000000800084208420E7E08420E7E080008000003F80020002000D003080000 +BC63:0000000800084208420E7E08420E7E0800080000004003F8004000A003180000 +BC64:0000000800084208420E7E08420E7E080008000003F8000803F8000800080000 +BC65:0000000800084208420E7E08420E7E080008000003F8020003F8020003F80000 +BC66:0000000800084208420E7E08420E7E080008000000000FF8022002200FF80000 +BC67:0000000800084208420E7E08420E7E080008000000800FF803E0041003E00000 +BC68:000000000012001220922092209E3F922092209E20923F920012001200120000 +BC69:000000280028422842387E2842387E280028000007F800080008000800080000 +BC6A:000000280028422842387E2842387E280028000000003EF80208020802080000 +BC6B:000000280028422842387E2842387E280028000000003E100210022802C40000 +BC6C:000000280028422842387E2842387E280028002808000800080008000FF80000 +BC6D:000000280028422842387E2842387E2800280000000020F8201020303ECC0000 +BC6E:000000280028422842387E2842387E2800280000202021FC207020883E700000 +BC6F:000000280028422842387E2842387E280028000003F802000200020003F80000 +BC70:000000280028422842387E2842387E280028000007F8000807F8040007F80000 +BC71:000000280028422842387E2842387E28002800003EF802083E0820083E080000 +BC72:000000280028422842387E2842387E28002800003EF802883E8820883EF80000 +BC73:000000280028422842387E2842387E28002800003E8802883EF820883EF80000 +BC74:000000280028422842387E2842387E28002800001F0801081F0810141F620000 +BC75:000000280028422842387E2842387E28002800003EF802803EF820803EF80000 +BC76:000000280028422842387E2842387E28002800003EFC02483E4820483EFC0000 +BC77:000000280028422842387E2842387E28002800003E1002FE3E3820443E380000 +BC78:000000280028422842387E2842387E280028000003F802080208020803F80000 +BC79:000000280028422842387E2842387E28002800000208020803F8020803F80000 +BC7A:000000280028422842387E2842387E2800280000110811081F0811141F620000 +BC7B:000000280028422842387E2842387E2800280000000800080008003400C20000 +BC7C:000000280028422842387E2842387E28002800000048004800A8011406620000 +BC7D:000000280028422842387E2842387E2800280000000001F00208020801F00000 +BC7E:000000280028422842387E2842387E280028000003F80020002000D003080000 +BC7F:000000280028422842387E2842387E2800280000004003F8004000A003180000 +BC80:000000280028422842387E2842387E280028000003F8000803F8000800080000 +BC81:000000280028422842387E2842387E280028000003F8020003F8020003F80000 +BC82:000000280028422842387E2842387E280028000000000FF8022002200FF80000 +BC83:000000280028422842387E2842387E280028000000800FF803E0041003E00000 +BC84:00000000000200022082208220823F9E2082208220823F820002000200020000 +BC85:000000080008420842087E3842087E0800080000000007F80008000800080000 +BC86:000000080008420842087E3842087E080008000000003EF80208020802080000 +BC87:000000080008420842087E3842087E080008000000001F080108011401620000 +BC88:000000080008420842087E3842087E080008000000001000100010001FF80000 +BC89:000000080008420842087E3842087E0800080000000020F8201020303ECC0000 +BC8A:000000080008420842087E3842087E0800080000202021FC207020883E700000 +BC8B:000000080008420842087E3842087E080008000003F802000200020003F80000 +BC8C:000000080008420842087E3842087E080008000007F8000807F8040007F80000 +BC8D:000000080008420842087E3842087E08000800003EF802083E0820083E080000 +BC8E:000000080008420842087E3842087E08000800003EF802883E8820883EF80000 +BC8F:000000080008420842087E3842087E08000800003E8802883EF820883EF80000 +BC90:000000080008420842087E3842087E08000800000F8800880F8808140FA20000 +BC91:000000080008420842087E3842087E08000800003EF802803EF820803EF80000 +BC92:000000080008420842087E3842087E08000800003EFC02483E4820483EFC0000 +BC93:000000080008420842087E3842087E08000800003E1002FE3E3820443E380000 +BC94:000000080008420842087E3842087E080008000003F802080208020803F80000 +BC95:000000080008420842087E3842087E08000800000208020803F8020803F80000 +BC96:000000080008420842087E3842087E0800080000210821083F0821143F620000 +BC97:000000080008420842087E3842087E0800080000001000100010006801840000 +BC98:000000080008420842087E3842087E08000800000048004800A8011406620000 +BC99:000000080008420842087E3842087E0800080000000003F00408040803F00000 +BC9A:000000080008420842087E3842087E080008000003F80020002000D003080000 +BC9B:000000080008420842087E3842087E0800080000004003F8004000A003180000 +BC9C:000000080008420842087E3842087E080008000003F8000803F8000800080000 +BC9D:000000080008420842087E3842087E080008000003F8020003F8020003F80000 +BC9E:000000080008420842087E3842087E080008000000000FF8022002200FF80000 +BC9F:000000080008420842087E3842087E080008000000800FF803E0041003E00000 +BCA0:00000000000A000A208A208A208A3FBA208A208A208A3F8A000A000A000A0000 +BCA1:000000280028422842287EE842287E280028000007F800080008000800080000 +BCA2:000000280028422842287EE842287E280028000000003EF80208020802080000 +BCA3:000000280028422842287EE842287E280028000000003E100210022802C40000 +BCA4:000000280028422842287EE842287E280028000008000800080008000FF80000 +BCA5:000000280028422842287EE842287E2800280000000020F8201020303ECC0000 +BCA6:000000280028422842287EE842287E2800280000202021FC207020883E700000 +BCA7:000000280028422842287EE842287E280028000003F802000200020003F80000 +BCA8:000000280028422842287EE842287E280028000007F8000807F8040007F80000 +BCA9:000000280028422842287EE842287E28002800003EF802083E0820083E080000 +BCAA:000000280028422842287EE842287E28002800003EF802883E8820883EF80000 +BCAB:000000280028422842287EE842287E28002800003E8802883EF820883EF80000 +BCAC:000000280028422842287EE842287E28002800001F0801081F0810141F620000 +BCAD:000000280028422842287EE842287E28002800003EF802803EF820803EF80000 +BCAE:000000280028422842287EE842287E28002800003EFC02483E4820483EFC0000 +BCAF:000000280028422842287EE842287E28002800003E1002FE3E3820443E380000 +BCB0:000000280028422842287EE842287E280028000003F802080208020803F80000 +BCB1:000000280028422842287EE842287E28002800000208020803F8020803F80000 +BCB2:000000280028422842287EE842287E2800280000110811081F0811141F620000 +BCB3:000000280028422842287EE842287E2800280000000800080008003400C20000 +BCB4:000000280028422842287EE842287E28002800000048004800A8011406620000 +BCB5:000000280028422842287EE842287E2800280000000001F00208020801F00000 +BCB6:000000280028422842287EE842287E280028000003F80020002000D003080000 +BCB7:000000280028422842287EE842287E2800280000004003F8004000A003180000 +BCB8:000000280028422842287EE842287E280028000003F8000803F8000800080000 +BCB9:000000280028422842287EE842287E280028000003F8020003F8020003F80000 +BCBA:000000280028422842287EE842287E280028000000000FF8022002200FF80000 +BCBB:000000280028422842287EE842287E280028000000800FF803E0041003E00000 +BCBC:000000000002000220822082209E3F822082209E20823F820002000200020000 +BCBD:000000080008420842387E0842387E0800080000000007F80008000800080000 +BCBE:000000080008420842387E0842387E080008000000003EF80208020802080000 +BCBF:000000080008420842387E0842387E080008000000001F080108011401620000 +BCC0:000000080008420842387E0842387E080008000800001000100010001FF80000 +BCC1:000000080008420842387E0842387E0800080000000020F8201020303ECC0000 +BCC2:000000080008420842387E0842387E0800080000202021FC207020883E700000 +BCC3:000000080008420842387E0842387E080008000003F802000200020003F80000 +BCC4:000000080008420842387E0842387E080008000007F8000807F8040007F80000 +BCC5:000000080008420842387E0842387E08000800003EF802083E0820083E080000 +BCC6:000000080008420842387E0842387E08000800003EF802883E8820883EF80000 +BCC7:000000080008420842387E0842387E08000800003E8802883EF820883EF80000 +BCC8:000000080008420842387E0842387E08000800000F8800880F8808140FA20000 +BCC9:000000080008420842387E0842387E08000800003EF802803EF820803EF80000 +BCCA:000000080008420842387E0842387E08000800003EFC02483E4820483EFC0000 +BCCB:000000080008420842387E0842387E08000800003E1002FE3E3820443E380000 +BCCC:000000080008420842387E0842387E080008000003F802080208020803F80000 +BCCD:000000080008420842387E0842387E08000800000208020803F8020803F80000 +BCCE:000000080008420842387E0842387E0800080000210821083F0821143F620000 +BCCF:000000080008420842387E0842387E0800080000001000100010006801840000 +BCD0:000000080008420842387E0842387E08000800000048004800A8011406620000 +BCD1:000000080008420842387E0842387E0800080000000003F00408040803F00000 +BCD2:000000080008420842387E0842387E080008000003F80020002000D003080000 +BCD3:000000080008420842387E0842387E0800080000004003F8004000A003180000 +BCD4:000000080008420842387E0842387E080008000003F8000803F8000800080000 +BCD5:000000080008420842387E0842387E080008000003F8020003F8020003F80000 +BCD6:000000080008420842387E0842387E080008000000000FF8022002200FF80000 +BCD7:000000080008420842387E0842387E080008000000800FF803E0041003E00000 +BCD8:00000000000A000A208A208A20BA3F8A208A20BA208A3F8A000A000A000A0000 +BCD9:000000280028422842E87E2842E87E280028000007F800080008000800080000 +BCDA:000000280028422842E87E2842E87E280028000000003EF80208020802080000 +BCDB:000000280028422842E87E2842E87E280028000000003E100210022802C40000 +BCDC:000000280028422842E87E2842E87E280028002808000800080008000FF80000 +BCDD:000000280028422842E87E2842E87E2800280000000020F8201020303ECC0000 +BCDE:000000280028422842E87E2842E87E2800280000202021FC207020883E700000 +BCDF:000000280028422842E87E2842E87E280028000003F802000200020003F80000 +BCE0:000000280028422842E87E2842E87E280028000007F8000807F8040007F80000 +BCE1:000000280028422842E87E2842E87E28002800003EF802083E0820083E080000 +BCE2:000000280028422842E87E2842E87E28002800003EF802883E8820883EF80000 +BCE3:000000280028422842E87E2842E87E28002800003E8802883EF820883EF80000 +BCE4:000000280028422842E87E2842E87E28002800001F0801081F0810141F620000 +BCE5:000000280028422842E87E2842E87E28002800003EF802803EF820803EF80000 +BCE6:000000280028422842E87E2842E87E28002800003EFC02483E4820483EFC0000 +BCE7:000000280028422842E87E2842E87E28002800003E1002FE3E3820443E380000 +BCE8:000000280028422842E87E2842E87E280028000003F802080208020803F80000 +BCE9:000000280028422842E87E2842E87E28002800000208020803F8020803F80000 +BCEA:000000280028422842E87E2842E87E2800280000110811081F0811141F620000 +BCEB:000000280028422842E87E2842E87E2800280000000800080008003400C20000 +BCEC:000000280028422842E87E2842E87E28002800000048004800A8011406620000 +BCED:000000280028422842E87E2842E87E2800280000000001F00208020801F00000 +BCEE:000000280028422842E87E2842E87E280028000003F80020002000D003080000 +BCEF:000000280028422842E87E2842E87E2800280000004003F8004000A003180000 +BCF0:000000280028422842E87E2842E87E280028000003F8000803F8000800080000 +BCF1:000000280028422842E87E2842E87E280028000003F8020003F8020003F80000 +BCF2:000000280028422842E87E2842E87E280028000000000FF8022002200FF80000 +BCF3:000000280028422842E87E2842E87E280028000000800FF803E0041003E00000 +BCF4:000000001010101010101FF0101010101FF000000100010001007FFC00000000 +BCF5:0000101010101FF010101FF0010001007FFC00001FF000100010001000100000 +BCF6:0000101010101FF010101FF0010001007FFC000000003EF80208020802080000 +BCF7:0000101010101FF010101FF0010001007FFC000000001E100210022802C40000 +BCF8:0000101010101FF010101FF0010001007FFC000000001000100010001FF00000 +BCF9:0000101010101FF010101FF0010001007FFC0000000020F8201020303ECC0000 +BCFA:0000101010101FF010101FF0010001007FFC0000202021FC207020883E700000 +BCFB:0000101010101FF010101FF0010001007FFC00001FF01000100010001FF00000 +BCFC:0000101010101FF010101FF0010001007FFC00001FF000101FF010001FF00000 +BCFD:0000101010101FF010101FF0010001007FFC00003EF802083E0820083E080000 +BCFE:0000101010101FF010101FF0010001007FFC00003EF802883E8820883EF80000 +BCFF:0000101010101FF010101FF0010001007FFC00003E8802883EF820883EF80000 +BD00:0000101010101FF010101FF0010001007FFC00003E1002103E1020283EC40000 +BD01:0000101010101FF010101FF0010001007FFC00003EF802803EF820803EF80000 +BD02:0000101010101FF010101FF0010001007FFC00003EFC02483E4820483EFC0000 +BD03:0000101010101FF010101FF0010001007FFC00003E2003FC3E7020883E700000 +BD04:0000101010101FF010101FF0010001007FFC00001FF01010101010101FF00000 +BD05:0000101010101FF010101FF0010001007FFC0000101010101FF010101FF00000 +BD06:0000101010101FF010101FF0010001007FFC0000222022203E2022503E880000 +BD07:0000101010101FF010101FF0010001007FFC000000000100010002800C400000 +BD08:0000101010101FF010101FF0010001007FFC00000000024002400DA033100000 +BD09:0000101010101FF010101FF0010001007FFC0000000007C00820082007C00000 +BD0A:0000101010101FF010101FF0010001007FFC0000000007E00080014006200000 +BD0B:0000101010101FF010101FF0010001007FFC0000008007E00080014006200000 +BD0C:0000101010101FF010101FF0010001007FFC00001FF000101FF0001000100000 +BD0D:0000101010101FF010101FF0010001007FFC00001FF010001FF010001FF00000 +BD0E:0000101010101FF010101FF0010001007FFC000000001FF0044004401FF00000 +BD0F:0000101010101FF010101FF0010001007FFC000001001FF007C0082007C00000 +BD10:0000001000102090209020903F90209E20903F90041004107FD0001000100000 +BD11:00000008208820883F8E20883F8804087FE8000007F800080008000800080000 +BD12:00000008208820883F8E20883F8804087FE8000000003EF80208020802080000 +BD13:00000008208820883F8E20883F8804087FE8000000001F080108011401620000 +BD14:00000008208820883F8E20883F8804087FE8000008000800080008000FF80000 +BD15:00000008208820883F8E20883F8804087FE80000000010F8101010301ECC0000 +BD16:00000008208820883F8E20883F8804087FE800000808087F081C08220F9C0000 +BD17:00000008208820883F8E20883F8804087FE8000003F802000200020003F80000 +BD18:00000008208820883F8E20883F8804087FE8000007F8000807F8040007F80000 +BD19:00000008208820883F8E20883F8804087FE800003EF802083E0820083E080000 +BD1A:00000008208820883F8E20883F8804087FE800003EF802883E8820883EF80000 +BD1B:00000008208820883F8E20883F8804087FE800003E8802883EF820883EF80000 +BD1C:00000008208820883F8E20883F8804087FE800001F0801081F0810141F620000 +BD1D:00000008208820883F8E20883F8804087FE800003EF802803EF820803EF80000 +BD1E:00000008208820883F8E20883F8804087FE800003EFC02483E4820483EFC0000 +BD1F:00000008208820883F8E20883F8804087FE800001F08017F1F1C10221F1C0000 +BD20:00000008208820883F8E20883F8804087FE8000003F802080208020803F80000 +BD21:00000008208820883F8E20883F8804087FE800000208020803F8020803F80000 +BD22:00000008208820883F8E20883F8804087FE80000110811081F0811141F620000 +BD23:00000008208820883F8E20883F8804087FE80000001000100010006801840000 +BD24:00000008208820883F8E20883F8804087FE800000048004800A8011406620000 +BD25:00000008208820883F8E20883F8804087FE80000000003F00408040803F00000 +BD26:00000008208820883F8E20883F8804087FE8000003F80020002000D003080000 +BD27:00000008208820883F8E20883F8804087FE80000004003F8004000A003180000 +BD28:00000008208820883F8E20883F8804087FE8000003F8000803F8000800080000 +BD29:00000008208820883F8E20883F8804087FE8000003F8020003F8020003F80000 +BD2A:00000008208820883F8E20883F8804087FE8000000000FF8022002200FF80000 +BD2B:00000008208820883F8E20883F8804087FE8000000800FF803E0041003E00000 +BD2C:0000001200122092209220923F92209E20923F92041204127FD2001200120000 +BD2D:0000002820A820A83FB820A83FA804287FA8000007F800080008000800080000 +BD2E:0000002820A820A83FB820A83FA804287FA8000000003EF80208020802080000 +BD2F:0000002820A820A83FB820A83FA804287FA8000000001F080108011401620000 +BD30:0000002820A820A83FB820A83FA804287FA8000008000800080008000FF80000 +BD31:0000002820A820A83FB820A83FA804287FA80000000010F8101010301ECC0000 +BD32:0000002820A820A83FB820A83FA804287FA800000808087F081C08220F9C0000 +BD33:0000002820A820A83FB820A83FA804287FA8000003F802000200020003F80000 +BD34:0000002820A820A83FB820A83FA804287FA8000007F8000807F8040007F80000 +BD35:0000002820A820A83FB820A83FA804287FA800003EF802083E0820083E080000 +BD36:0000002820A820A83FB820A83FA804287FA800003EF802883E8820883EF80000 +BD37:0000002820A820A83FB820A83FA804287FA800003E8802883EF820883EF80000 +BD38:0000002820A820A83FB820A83FA804287FA800001F0801081F0810141F620000 +BD39:0000002820A820A83FB820A83FA804287FA800003EF802803EF820803EF80000 +BD3A:0000002820A820A83FB820A83FA804287FA800003EFC02483E4820483EFC0000 +BD3B:0000002820A820A83FB820A83FA804287FA800001F08017F1F1C10221F1C0000 +BD3C:0000002820A820A83FB820A83FA804287FA8000003F802080208020803F80000 +BD3D:0000002820A820A83FB820A83FA804287FA800000208020803F8020803F80000 +BD3E:0000002820A820A83FB820A83FA804287FA80000110811081F0811141F620000 +BD3F:0000002820A820A83FB820A83FA804287FA80000001000100010006801840000 +BD40:0000002820A820A83FB820A83FA804287FA800000048004800A8011406620000 +BD41:0000002820A820A83FB820A83FA804287FA80000000003F00408040803F00000 +BD42:0000002820A820A83FB820A83FA804287FA8000003F80020002000D003080000 +BD43:0000002820A820A83FB820A83FA804287FA80000004003F8004000A003180000 +BD44:0000002820A820A83FB820A83FA804287FA8000003F8000803F8000800080000 +BD45:0000002820A820A83FB820A83FA804287FA8000003F8020003F8020003F80000 +BD46:0000002820A820A83FB820A83FA804287FA8000000000FF8022002200FF80000 +BD47:0000002820A820A83FB820A83FA804287FA8000000800FF803E0041003E00000 +BD48:0000000800082088208820883F88208820883F88040804087FE8000800080000 +BD49:00000008208820883F8820883F8804087FE8000007F800080008000800080000 +BD4A:00000008208820883F8820883F8804087FE8000000003EF80208020802080000 +BD4B:00000008208820883F8820883F8804087FE8000000001F080108011401620000 +BD4C:00000008208820883F8820883F8804087FE8000008000800080008000FF80000 +BD4D:00000008208820883F8820883F8804087FE80000000010F8101010301ECC0000 +BD4E:00000008208820883F8820883F8804087FE800000808087F081C08220F9C0000 +BD4F:00000008208820883F8820883F8804087FE8000003F802000200020003F80000 +BD50:00000008208820883F8820883F8804087FE8000007F8000807F8040007F80000 +BD51:00000008208820883F8820883F8804087FE800003EF802083E0820083E080000 +BD52:00000008208820883F8820883F8804087FE800003EF802883E8820883EF80000 +BD53:00000008208820883F8820883F8804087FE800003E8802883EF820883EF80000 +BD54:00000008208820883F8820883F8804087FE800001F0801081F0810141F620000 +BD55:00000008208820883F8820883F8804087FE800003EF802803EF820803EF80000 +BD56:00000008208820883F8820883F8804087FE800003EFC02483E4820483EFC0000 +BD57:00000008208820883F8820883F8804087FE800001F08017F1F1C10221F1C0000 +BD58:00000008208820883F8820883F8804087FE8000003F802080208020803F80000 +BD59:00000008208820883F8820883F8804087FE800000208020803F8020803F80000 +BD5A:00000008208820883F8820883F8804087FE80000110811081F0811141F620000 +BD5B:00000008208820883F8820883F8804087FE80000001000100010006801840000 +BD5C:00000008208820883F8820883F8804087FE800000048004800A8011406620000 +BD5D:00000008208820883F8820883F8804087FE80000000003F00408040803F00000 +BD5E:00000008208820883F8820883F8804087FE8000003F80020002000D003080000 +BD5F:00000008208820883F8820883F8804087FE80000004003F8004000A003180000 +BD60:00000008208820883F8820883F8804087FE8000003F8000803F8000800080000 +BD61:00000008208820883F8820883F8804087FE8000003F8020003F8020003F80000 +BD62:00000008208820883F8820883F8804087FE8000000000FF8022002200FF80000 +BD63:00000008208820883F8820883F8804087FE8000000800FF803E0041003E00000 +BD64:000000001010101010101FF0101010101FF004400440044004407FFC00000000 +BD65:0000101010101FF010101FF0044004407FFC00001FF000100010001000100000 +BD66:0000101010101FF010101FF0044004407FFC000000003EF80208020802080000 +BD67:0000101010101FF010101FF0044004407FFC000000001E100210022802C40000 +BD68:0000101010101FF010101FF0044004407FFC000000001000100010001FF00000 +BD69:0000101010101FF010101FF0044004407FFC0000000020F8201020303ECC0000 +BD6A:0000101010101FF010101FF0044004407FFC0000202021FC207020883E700000 +BD6B:0000101010101FF010101FF0044004407FFC00001FF01000100010001FF00000 +BD6C:0000101010101FF010101FF0044004407FFC00001FF000101FF010001FF00000 +BD6D:0000101010101FF010101FF0044004407FFC00003EF802083E0820083E080000 +BD6E:0000101010101FF010101FF0044004407FFC00003EF802883E8820883EF80000 +BD6F:0000101010101FF010101FF0044004407FFC00003E8802883EF820883EF80000 +BD70:0000101010101FF010101FF0044004407FFC00003E1002103E1020283EC40000 +BD71:0000101010101FF010101FF0044004407FFC00003EF802803EF820803EF80000 +BD72:0000101010101FF010101FF0044004407FFC00003EFC02483E4820483EFC0000 +BD73:0000101010101FF010101FF0044004407FFC00003E2003FC3E7020883E700000 +BD74:0000101010101FF010101FF0044004407FFC00001FF01010101010101FF00000 +BD75:0000101010101FF010101FF0044004407FFC0000101010101FF010101FF00000 +BD76:0000101010101FF010101FF0044004407FFC0000222022203E2022503E880000 +BD77:0000101010101FF010101FF0044004407FFC000000000100010002800C400000 +BD78:0000101010101FF010101FF0044004407FFC00000000024002400DA033100000 +BD79:0000101010101FF010101FF0044004407FFC0000000007C00820082007C00000 +BD7A:0000101010101FF010101FF0044004407FFC0000000007E00080014006200000 +BD7B:0000101010101FF010101FF0044004407FFC0000008007E00080014006200000 +BD7C:0000101010101FF010101FF0044004407FFC00001FF000101FF0001000100000 +BD7D:0000101010101FF010101FF0044004407FFC00001FF010001FF010001FF00000 +BD7E:0000101010101FF010101FF0044004407FFC000000001FF0044004401FF00000 +BD7F:0000101010101FF010101FF0044004407FFC000001001FF007C0082007C00000 +BD80:000000001010101010101FF0101010101FF000003FF801000100010001000000 +BD81:0000101010101FF010101FF000007FFC010001001FF000100010001000100000 +BD82:0000101010101FF010101FF000007FFC0100010000003EF80208020802080000 +BD83:0000101010101FF010101FF000007FFC0100010000001E100210022802C40000 +BD84:0000101010101FF010101FF0000000007FFC010001001100100010001FF00000 +BD85:0000101010101FF010101FF000007FFC01000100000020F8201020303ECC0000 +BD86:0000101010101FF010101FF000007FFC01000100202021FC207020883E700000 +BD87:0000101010101FF010101FF000007FFC010001001FF01000100010001FF00000 +BD88:0000101010101FF010101FF000007FFC010001001FF000101FF010001FF00000 +BD89:0000101010101FF010101FF000007FFC010001003EF802083E0820083E080000 +BD8A:0000101010101FF010101FF000007FFC010001003EF802883E8820883EF80000 +BD8B:0000101010101FF010101FF000007FFC010001003E8802883EF820883EF80000 +BD8C:0000101010101FF010101FF000007FFC010001003E1002103E1020283EC40000 +BD8D:0000101010101FF010101FF000007FFC010001003EF802803EF820803EF80000 +BD8E:0000101010101FF010101FF000007FFC010001003EFC02483E4820483EFC0000 +BD8F:0000101010101FF010101FF000007FFC010001003E2003FC3E7020883E700000 +BD90:0000101010101FF010101FF000007FFC010001001FF01010101010101FF00000 +BD91:0000101010101FF010101FF000007FFC01000100101010101FF010101FF00000 +BD92:0000101010101FF010101FF000007FFC01000100222022203E2022503E880000 +BD93:0000101010101FF010101FF000007FFC0100010000000100010002800C400000 +BD94:0000101010101FF010101FF000007FFC010001000000024002400DA033100000 +BD95:0000101010101FF010101FF000007FFC01000100000007C00820082007C00000 +BD96:0000101010101FF010101FF000007FFC01000100000007E00080014006200000 +BD97:0000101010101FF010101FF000007FFC01000100008007E00080014006200000 +BD98:0000101010101FF010101FF000007FFC010001001FF000101FF0001000100000 +BD99:0000101010101FF010101FF000007FFC010001001FF010001FF010001FF00000 +BD9A:0000101010101FF010101FF000007FFC0100010000001FF0044004401FF00000 +BD9B:0000101010101FF010101FF000007FFC0100010001001FF007C0082007C00000 +BD9C:000000082088208820883F88208820883F8800087FE8040804F8040804080000 +BD9D:208820883F8820883F8800087FE8027802080000000007F80008000800080000 +BD9E:208820883F8820883F8800087FE802780208000000003EF80208020802080000 +BD9F:208820883F8820883F8800087FE802780208000000001F080108011401620000 +BDA0:208820883F8820883F88000800087FE80278020802081000100010001FF80000 +BDA1:208820883F8820883F8800087FE8027802080000000020F8201020303ECC0000 +BDA2:208820883F8820883F8800087FE8027802080000202021FC207020883E700000 +BDA3:208820883F8820883F8800087FE802780208000003F802000200020003F80000 +BDA4:208820883F8820883F8800087FE802780208000007F8000807F8040007F80000 +BDA5:208820883F8820883F8800087FE80278020800003EF802083E0820083E080000 +BDA6:208820883F8820883F8800087FE80278020800003EF802883E8820883EF80000 +BDA7:208820883F8820883F8800087FE80278020800003E8802883EF820883EF80000 +BDA8:208820883F8820883F8800087FE80278020800000F8800880F8808140FA20000 +BDA9:208820883F8820883F8800087FE80278020800003EF802803EF820803EF80000 +BDAA:208820883F8820883F8800087FE80278020800003EFC02483E4820483EFC0000 +BDAB:208820883F8820883F8800087FE80278020800003E1002FE3E3820443E380000 +BDAC:208820883F8820883F8800087FE802780208000003F802080208020803F80000 +BDAD:208820883F8820883F8800087FE80278020800000208020803F8020803F80000 +BDAE:208820883F8820883F8800087FE8027802080000210821083F0821143F620000 +BDAF:208820883F8820883F8800087FE8027802080000001000100010006801840000 +BDB0:208820883F8820883F8800087FE80278020800000048004800A8011406620000 +BDB1:208820883F8820883F8800087FE8027802080000000003F00408040803F00000 +BDB2:208820883F8820883F8800087FE802780208000003F80020002000D003080000 +BDB3:208820883F8820883F8800087FE8027802080000004003F8004000A003180000 +BDB4:208820883F8820883F8800087FE802780208000003F8000803F8000800080000 +BDB5:208820883F8820883F8800087FE802780208000003F8020003F8020003F80000 +BDB6:208820883F8820883F8800087FE802780208000000000FF8022002200FF80000 +BDB7:208820883F8820883F8800087FE802780208000000800FF803E0041003E00000 +BDB8:0000000A208A208A208A3F8A208A208A3F8A000A7FEA040A047A040A040A0000 +BDB9:20A820A83FA820A83FA800287FA805E804280000000007F80008000800080000 +BDBA:20A820A83FA820A83FA800287FA805E80428000000003EF80208020802080000 +BDBB:20A820A83FA820A83FA800287FA805E80428000000001F080108011401620000 +BDBC:20A820A83FA820A83FA8002800287FA8042805E804281428100010001FF80000 +BDBD:20A820A83FA820A83FA800287FA805E804280000000020F8201020303ECC0000 +BDBE:20A820A83FA820A83FA800287FA805E804280000202021FC207020883E700000 +BDBF:20A820A83FA820A83FA800287FA805E80428000003F802000200020003F80000 +BDC0:20A820A83FA820A83FA800287FA805E80428000007F8000807F8040007F80000 +BDC1:20A820A83FA820A83FA800287FA805E8042800003EF802083E0820083E080000 +BDC2:20A820A83FA820A83FA800287FA805E8042800003EF802883E8820883EF80000 +BDC3:20A820A83FA820A83FA800287FA805E8042800003E8802883EF820883EF80000 +BDC4:20A820A83FA820A83FA800287FA805E8042800000F8800880F8808140FA20000 +BDC5:20A820A83FA820A83FA800287FA805E8042800003EF802803EF820803EF80000 +BDC6:20A820A83FA820A83FA800287FA805E8042800003EFC02483E4820483EFC0000 +BDC7:20A820A83FA820A83FA800287FA805E8042800003E1002FE3E3820443E380000 +BDC8:20A820A83FA820A83FA800287FA805E80428000003F802080208020803F80000 +BDC9:20A820A83FA820A83FA800287FA805E8042800000208020803F8020803F80000 +BDCA:20A820A83FA820A83FA800287FA805E804280000210821083F0821143F620000 +BDCB:20A820A83FA820A83FA800287FA805E804280000001000100010006801840000 +BDCC:20A820A83FA820A83FA800287FA805E8042800000048004800A8011406620000 +BDCD:20A820A83FA820A83FA800287FA805E804280000000003F00408040803F00000 +BDCE:20A820A83FA820A83FA800287FA805E80428000003F80020002000D003080000 +BDCF:20A820A83FA820A83FA800287FA805E804280000004003F8004000A003180000 +BDD0:20A820A83FA820A83FA800287FA805E80428000003F8000803F8000800080000 +BDD1:20A820A83FA820A83FA800287FA805E80428000003F8020003F8020003F80000 +BDD2:20A820A83FA820A83FA800287FA805E80428000000000FF8022002200FF80000 +BDD3:20A820A83FA820A83FA800287FA805E80428000000800FF803E0041003E00000 +BDD4:000000082088208820883F88208820883F8800087FE804080408040804080000 +BDD5:208820883F8820883F8800087FE8020802000000000007F80008000800080000 +BDD6:208820883F8820883F8800087FE802080200000000003EF80208020802080000 +BDD7:208820883F8820883F8800087FE802080200000000001F080108011401620000 +BDD8:208820883F8820883F88000800087FE80208020802081008100010001FF80000 +BDD9:208820883F8820883F8800087FE8020802000000000020F8201020303ECC0000 +BDDA:208820883F8820883F8800087FE8020802000000202021FC207020883E700000 +BDDB:208820883F8820883F8800087FE802080200000003F802000200020003F80000 +BDDC:208820883F8820883F8800087FE802080200000007F8000807F8040007F80000 +BDDD:208820883F8820883F8800087FE80208020000003EF802083E0820083E080000 +BDDE:208820883F8820883F8800087FE80208020000003EF802883E8820883EF80000 +BDDF:208820883F8820883F8800087FE80208020000003E8802883EF820883EF80000 +BDE0:208820883F8820883F8800087FE80208020000000F8800880F8808140FA20000 +BDE1:208820883F8820883F8800087FE80208020000003EF802803EF820803EF80000 +BDE2:208820883F8820883F8800087FE80208020000003EFC02483E4820483EFC0000 +BDE3:208820883F8820883F8800087FE80208020000003E1002FE3E3820443E380000 +BDE4:208820883F8820883F8800087FE802080200000003F802080208020803F80000 +BDE5:208820883F8820883F8800087FE80208020000000208020803F8020803F80000 +BDE6:208820883F8820883F8800087FE8020802000000210821083F0821143F620000 +BDE7:208820883F8820883F8800087FE8020802000000001000100010006801840000 +BDE8:208820883F8820883F8800087FE80208020000000048004800A8011406620000 +BDE9:208820883F8820883F8800087FE8020802000000000003F00408040803F00000 +BDEA:208820883F8820883F8800087FE802080200000003F80020002000D003080000 +BDEB:208820883F8820883F8800087FE8020802000000004003F8004000A003180000 +BDEC:208820883F8820883F8800087FE802080200000003F8000803F8000800080000 +BDED:208820883F8820883F8800087FE802080200000003F8020003F8020003F80000 +BDEE:208820883F8820883F8800087FE802080200000000000FF8022002200FF80000 +BDEF:208820883F8820883F8800087FE802080200000000800FF803E0041003E00000 +BDF0:000000001010101010101FF0101010101FF000007FFC04400440044004400000 +BDF1:0000101010101FF010101FF000007FFC044004401FF000100010001000100000 +BDF2:0000101010101FF010101FF000007FFC0440044000003EF80208020802080000 +BDF3:0000101010101FF010101FF000007FFC0440044000001E100210022802C40000 +BDF4:0000101010101FF010101FF0000000007FFC044004401440100010001FF00000 +BDF5:0000101010101FF010101FF000007FFC04400440000020F8201020303ECC0000 +BDF6:0000101010101FF010101FF000007FFC04400440202021FC207020883E700000 +BDF7:0000101010101FF010101FF000007FFC044004401FF01000100010001FF00000 +BDF8:0000101010101FF010101FF000007FFC044004401FF000101FF010001FF00000 +BDF9:0000101010101FF010101FF000007FFC044004403EF802083E0820083E080000 +BDFA:0000101010101FF010101FF000007FFC044004403EF802883E8820883EF80000 +BDFB:0000101010101FF010101FF000007FFC044004403E8802883EF820883EF80000 +BDFC:0000101010101FF010101FF000007FFC044004403E1002103E1020283EC40000 +BDFD:0000101010101FF010101FF000007FFC044004403EF802803EF820803EF80000 +BDFE:0000101010101FF010101FF000007FFC044004403EFC02483E4820483EFC0000 +BDFF:0000101010101FF010101FF000007FFC044004403E2003FC3E7020883E700000 +BE00:0000101010101FF010101FF000007FFC044004401FF01010101010101FF00000 +BE01:0000101010101FF010101FF000007FFC04400440101010101FF010101FF00000 +BE02:0000101010101FF010101FF000007FFC04400440222022203E2022503E880000 +BE03:0000101010101FF010101FF000007FFC0440044000000100010002800C400000 +BE04:0000101010101FF010101FF000007FFC044004400000024002400DA033100000 +BE05:0000101010101FF010101FF000007FFC04400440000007C00820082007C00000 +BE06:0000101010101FF010101FF000007FFC04400440000007E00080014006200000 +BE07:0000101010101FF010101FF000007FFC04400440008007E00080014006200000 +BE08:0000101010101FF010101FF000007FFC044004401FF000101FF0001000100000 +BE09:0000101010101FF010101FF000007FFC044004401FF010001FF010001FF00000 +BE0A:0000101010101FF010101FF000007FFC0440044000001FF0044004401FF00000 +BE0B:0000101010101FF010101FF000007FFC0440044001001FF007C0082007C00000 +BE0C:000000001010101010101FF0101010101FF0000000007FFC0000000000000000 +BE0D:0000101010101FF010101FF0000000007FFC00001FF000100010001000100000 +BE0E:0000101010101FF010101FF0000000007FFC000000003EF80208020802080000 +BE0F:0000101010101FF010101FF0000000007FFC000000001E100210022802C40000 +BE10:0000101010101FF010101FF0000000007FFC000000001000100010001FF00000 +BE11:0000101010101FF010101FF0000000007FFC0000000020F8201020303ECC0000 +BE12:0000101010101FF010101FF0000000007FFC0000202021FC207020883E700000 +BE13:0000101010101FF010101FF0000000007FFC00001FF01000100010001FF00000 +BE14:0000101010101FF010101FF0000000007FFC00001FF000101FF010001FF00000 +BE15:0000101010101FF010101FF0000000007FFC00003EF802083E0820083E080000 +BE16:0000101010101FF010101FF0000000007FFC00003EF802883E8820883EF80000 +BE17:0000101010101FF010101FF0000000007FFC00003E8802883EF820883EF80000 +BE18:0000101010101FF010101FF0000000007FFC00003E1002103E1020283EC40000 +BE19:0000101010101FF010101FF0000000007FFC00003EF802803EF820803EF80000 +BE1A:0000101010101FF010101FF0000000007FFC00003EFC02483E4820483EFC0000 +BE1B:0000101010101FF010101FF0000000007FFC00003E2003FC3E7020883E700000 +BE1C:0000101010101FF010101FF0000000007FFC00001FF01010101010101FF00000 +BE1D:0000101010101FF010101FF0000000007FFC0000101010101FF010101FF00000 +BE1E:0000101010101FF010101FF0000000007FFC0000222022203E2022503E880000 +BE1F:0000101010101FF010101FF0000000007FFC000000000100010002800C400000 +BE20:0000101010101FF010101FF0000000007FFC00000000024002400DA033100000 +BE21:0000101010101FF010101FF0000000007FFC0000000007C00820082007C00000 +BE22:0000101010101FF010101FF0000000007FFC0000000007E00080014006200000 +BE23:0000101010101FF010101FF0000000007FFC0000008007E00080014006200000 +BE24:0000101010101FF010101FF0000000007FFC00001FF000101FF0001000100000 +BE25:0000101010101FF010101FF0000000007FFC00001FF010001FF010001FF00000 +BE26:0000101010101FF010101FF0000000007FFC000000001FF0044004401FF00000 +BE27:0000101010101FF010101FF0000000007FFC000001001FF007C0082007C00000 +BE28:0000000800082088208820883F88208820883F8800087FE80008000800080000 +BE29:00000008208820883F8820883F8800087FE8000007F800080008000800080000 +BE2A:00000008208820883F8820883F8800087FE8000000003EF80208020802080000 +BE2B:00000008208820883F8820883F8800087FE8000000001F080108011401620000 +BE2C:00000008208820883F8820883F8800087FE8000008000800080008000FF80000 +BE2D:00000008208820883F8820883F8800087FE80000000010F8101010301ECC0000 +BE2E:00000008208820883F8820883F8800087FE800000808087F081C08220F9C0000 +BE2F:00000008208820883F8820883F8800087FE8000003F802000200020003F80000 +BE30:00000008208820883F8820883F8800087FE8000007F8000807F8040007F80000 +BE31:00000008208820883F8820883F8800087FE800003EF802083E0820083E080000 +BE32:00000008208820883F8820883F8800087FE800003EF802883E8820883EF80000 +BE33:00000008208820883F8820883F8800087FE800003E8802883EF820883EF80000 +BE34:00000008208820883F8820883F8800087FE800001F0801081F0810141F620000 +BE35:00000008208820883F8820883F8800087FE800003EF802803EF820803EF80000 +BE36:00000008208820883F8820883F8800087FE800003EFC02483E4820483EFC0000 +BE37:00000008208820883F8820883F8800087FE800001F08017F1F1C10221F1C0000 +BE38:00000008208820883F8820883F8800087FE8000003F802080208020803F80000 +BE39:00000008208820883F8820883F8800087FE800000208020803F8020803F80000 +BE3A:00000008208820883F8820883F8800087FE80000110811081F0811141F620000 +BE3B:00000008208820883F8820883F8800087FE80000001000100010006801840000 +BE3C:00000008208820883F8820883F8800087FE800000048004800A8011406620000 +BE3D:00000008208820883F8820883F8800087FE80000000003F00408040803F00000 +BE3E:00000008208820883F8820883F8800087FE8000003F80020002000D003080000 +BE3F:00000008208820883F8820883F8800087FE80000004003F8004000A003180000 +BE40:00000008208820883F8820883F8800087FE8000003F8000803F8000800080000 +BE41:00000008208820883F8820883F8800087FE8000003F8020003F8020003F80000 +BE42:00000008208820883F8820883F8800087FE8000000000FF8022002200FF80000 +BE43:00000008208820883F8820883F8800087FE8000000800FF803E0041003E00000 +BE44:00000000000800082088208820883F882088208820883F880008000800080000 +BE45:000000080008420842087E0842087E0800080000000007F80008000800080000 +BE46:000000080008420842087E0842087E080008000000003EF80208020802080000 +BE47:000000080008420842087E0842087E080008000000001F080108011401620000 +BE48:000000080008420842087E0842087E080008000800001000100010001FF80000 +BE49:000000080008420842087E0842087E0800080000000020F8201020303ECC0000 +BE4A:000000080008420842087E0842087E0800080000202021FC207020883E700000 +BE4B:000000080008420842087E0842087E080008000003F802000200020003F80000 +BE4C:000000080008420842087E0842087E080008000007F8000807F8040007F80000 +BE4D:000000080008420842087E0842087E08000800003EF802083E0820083E080000 +BE4E:000000080008420842087E0842087E08000800003EF802883E8820883EF80000 +BE4F:000000080008420842087E0842087E08000800003E8802883EF820883EF80000 +BE50:000000080008420842087E0842087E08000800000F8800880F8808140FA20000 +BE51:000000080008420842087E0842087E08000800003EF802803EF820803EF80000 +BE52:000000080008420842087E0842087E08000800003EFC02483E4820483EFC0000 +BE53:000000080008420842087E0842087E08000800003E1002FE3E3820443E380000 +BE54:000000080008420842087E0842087E080008000003F802080208020803F80000 +BE55:000000080008420842087E0842087E08000800000208020803F8020803F80000 +BE56:000000080008420842087E0842087E0800080000210821083F0821143F620000 +BE57:000000080008420842087E0842087E0800080000001000100010006801840000 +BE58:000000080008420842087E0842087E08000800000048004800A8011406620000 +BE59:000000080008420842087E0842087E0800080000000003F00408040803F00000 +BE5A:000000080008420842087E0842087E080008000003F80020002000D003080000 +BE5B:000000080008420842087E0842087E0800080000004003F8004000A003180000 +BE5C:000000080008420842087E0842087E080008000003F8000803F8000800080000 +BE5D:000000080008420842087E0842087E080008000003F8020003F8020003F80000 +BE5E:000000080008420842087E0842087E080008000000000FF8022002200FF80000 +BE5F:000000080008420842087E0842087E080008000000800FF803E0041003E00000 +BE60:00000000001000102490249024903F9E249024903F9000100010001000100000 +BE61:000000084908490849087F0E49087F080008000007F800080008000800080000 +BE62:000000084908490849087F0E49087F080008000000003EF80208020802080000 +BE63:000000084908490849087F0E49087F080008000000001F080108011401620000 +BE64:000000084908490849087F0E49087F080008000808000800080008000FF80000 +BE65:000000084908490849087F0E49087F0800080000000010F8101010301ECC0000 +BE66:000000084908490849087F0E49087F08000800000808087F081C08220F9C0000 +BE67:000000084908490849087F0E49087F080008000003F802000200020003F80000 +BE68:000000084908490849087F0E49087F080008000007F8000807F8040007F80000 +BE69:000000084908490849087F0E49087F08000800003EF802083E0820083E080000 +BE6A:000000084908490849087F0E49087F08000800003EF802883E8820883EF80000 +BE6B:000000084908490849087F0E49087F08000800003E8802883EF820883EF80000 +BE6C:000000084908490849087F0E49087F08000800001F0801081F0810141F620000 +BE6D:000000084908490849087F0E49087F08000800003EF802803EF820803EF80000 +BE6E:000000084908490849087F0E49087F08000800003EFC02483E4820483EFC0000 +BE6F:000000084908490849087F0E49087F08000800001F08017F1F1C10221F1C0000 +BE70:000000084908490849087F0E49087F080008000003F802080208020803F80000 +BE71:000000084908490849087F0E49087F08000800000208020803F8020803F80000 +BE72:000000084908490849087F0E49087F0800080000110811081F0811141F620000 +BE73:000000084908490849087F0E49087F0800080000001000100010006801840000 +BE74:000000084908490849087F0E49087F08000800000048004800A8011406620000 +BE75:000000084908490849087F0E49087F0800080000000003F00408040803F00000 +BE76:000000084908490849087F0E49087F080008000003F80020002000D003080000 +BE77:000000084908490849087F0E49087F0800080000004003F8004000A003180000 +BE78:000000084908490849087F0E49087F080008000003F8000803F8000800080000 +BE79:000000084908490849087F0E49087F080008000003F8020003F8020003F80000 +BE7A:000000084908490849087F0E49087F080008000000000FF8022002200FF80000 +BE7B:000000084908490849087F0E49087F080008000000800FF803E0041003E00000 +BE7C:00000000001200122492249224923F9E249224923F9200120012001200120000 +BE7D:000000284928492849287F3849287F280028000007F800080008000800080000 +BE7E:000000284928492849287F3849287F280028000000003EF80208020802080000 +BE7F:000000284928492849287F3849287F280028000000003E100210022802C40000 +BE80:000000284928492849287F3849287F280028002808000800080008000FF80000 +BE81:000000284928492849287F3849287F2800280000000020F8201020303ECC0000 +BE82:000000284928492849287F3849287F2800280000202021FC207020883E700000 +BE83:000000284928492849287F3849287F280028000003F802000200020003F80000 +BE84:000000284928492849287F3849287F280028000007F8000807F8040007F80000 +BE85:000000284928492849287F3849287F28002800003EF802083E0820083E080000 +BE86:000000284928492849287F3849287F28002800003EF802883E8820883EF80000 +BE87:000000284928492849287F3849287F28002800003E8802883EF820883EF80000 +BE88:000000284928492849287F3849287F28002800001F0801081F0810141F620000 +BE89:000000284928492849287F3849287F28002800003EF802803EF820803EF80000 +BE8A:000000284928492849287F3849287F28002800003EFC02483E4820483EFC0000 +BE8B:000000284928492849287F3849287F28002800003E1002FE3E3820443E380000 +BE8C:000000284928492849287F3849287F280028000003F802080208020803F80000 +BE8D:000000284928492849287F3849287F28002800000208020803F8020803F80000 +BE8E:000000284928492849287F3849287F2800280000110811081F0811141F620000 +BE8F:000000284928492849287F3849287F2800280000000800080008003400C20000 +BE90:000000284928492849287F3849287F28002800000048004800A8011406620000 +BE91:000000284928492849287F3849287F2800280000000001F00208020801F00000 +BE92:000000284928492849287F3849287F280028000003F80020002000D003080000 +BE93:000000284928492849287F3849287F2800280000004003F8004000A003180000 +BE94:000000284928492849287F3849287F280028000003F8000803F8000800080000 +BE95:000000284928492849287F3849287F280028000003F8020003F8020003F80000 +BE96:000000284928492849287F3849287F280028000000000FF8022002200FF80000 +BE97:000000284928492849287F3849287F280028000000800FF803E0041003E00000 +BE98:000000000010001024902490249E3F902490249E3F9000100010001000100000 +BE99:0000000849084908490E7F08490E7F080008000007F800080008000800080000 +BE9A:0000000849084908490E7F08490E7F080008000000003EF80208020802080000 +BE9B:0000000849084908490E7F08490E7F080008000000001F080108011401620000 +BE9C:0000000849084908490E7F08490E7F080008000008000800080008000FF80000 +BE9D:0000000849084908490E7F08490E7F0800080000000010F8101010301ECC0000 +BE9E:0000000849084908490E7F08490E7F08000800000808087F081C08220F9C0000 +BE9F:0000000849084908490E7F08490E7F080008000003F802000200020003F80000 +BEA0:0000000849084908490E7F08490E7F080008000007F8000807F8040007F80000 +BEA1:0000000849084908490E7F08490E7F08000800003EF802083E0820083E080000 +BEA2:0000000849084908490E7F08490E7F08000800003EF802883E8820883EF80000 +BEA3:0000000849084908490E7F08490E7F08000800003E8802883EF820883EF80000 +BEA4:0000000849084908490E7F08490E7F08000800001F0801081F0810141F620000 +BEA5:0000000849084908490E7F08490E7F08000800003EF802803EF820803EF80000 +BEA6:0000000849084908490E7F08490E7F08000800003EFC02483E4820483EFC0000 +BEA7:0000000849084908490E7F08490E7F08000800001F08017F1F1C10221F1C0000 +BEA8:0000000849084908490E7F08490E7F080008000003F802080208020803F80000 +BEA9:0000000849084908490E7F08490E7F08000800000208020803F8020803F80000 +BEAA:0000000849084908490E7F08490E7F0800080000110811081F0811141F620000 +BEAB:0000000849084908490E7F08490E7F0800080000001000100010006801840000 +BEAC:0000000849084908490E7F08490E7F08000800000048004800A8011406620000 +BEAD:0000000849084908490E7F08490E7F0800080000000003F00408040803F00000 +BEAE:0000000849084908490E7F08490E7F080008000003F80020002000D003080000 +BEAF:0000000849084908490E7F08490E7F0800080000004003F8004000A003180000 +BEB0:0000000849084908490E7F08490E7F080008000003F8000803F8000800080000 +BEB1:0000000849084908490E7F08490E7F080008000003F8020003F8020003F80000 +BEB2:0000000849084908490E7F08490E7F080008000000000FF8022002200FF80000 +BEB3:0000000849084908490E7F08490E7F080008000000800FF803E0041003E00000 +BEB4:000000000012001224922492249E3F922492249E3F9200120012001200120000 +BEB5:000000284928492849387F2849387F280028000007F800080008000800080000 +BEB6:000000284928492849387F2849387F280028000000003EF80208020802080000 +BEB7:000000284928492849387F2849387F280028000000003E100210022802C40000 +BEB8:000000284928492849387F2849387F280028002808000800080008000FF80000 +BEB9:000000284928492849387F2849387F2800280000000020F8201020303ECC0000 +BEBA:000000284928492849387F2849387F2800280000202021FC207020883E700000 +BEBB:000000284928492849387F2849387F280028000003F802000200020003F80000 +BEBC:000000284928492849387F2849387F280028000007F8000807F8040007F80000 +BEBD:000000284928492849387F2849387F28002800003EF802083E0820083E080000 +BEBE:000000284928492849387F2849387F28002800003EF802883E8820883EF80000 +BEBF:000000284928492849387F2849387F28002800003E8802883EF820883EF80000 +BEC0:000000284928492849387F2849387F28002800001F0801081F0810141F620000 +BEC1:000000284928492849387F2849387F28002800003EF802803EF820803EF80000 +BEC2:000000284928492849387F2849387F28002800003EFC02483E4820483EFC0000 +BEC3:000000284928492849387F2849387F28002800003E1002FE3E3820443E380000 +BEC4:000000284928492849387F2849387F280028000003F802080208020803F80000 +BEC5:000000284928492849387F2849387F28002800000208020803F8020803F80000 +BEC6:000000284928492849387F2849387F2800280000110811081F0811141F620000 +BEC7:000000284928492849387F2849387F2800280000000800080008003400C20000 +BEC8:000000284928492849387F2849387F28002800000048004800A8011406620000 +BEC9:000000284928492849387F2849387F2800280000000001F00208020801F00000 +BECA:000000284928492849387F2849387F280028000003F80020002000D003080000 +BECB:000000284928492849387F2849387F2800280000004003F8004000A003180000 +BECC:000000284928492849387F2849387F280028000003F8000803F8000800080000 +BECD:000000284928492849387F2849387F280028000003F8020003F8020003F80000 +BECE:000000284928492849387F2849387F280028000000000FF8022002200FF80000 +BECF:000000284928492849387F2849387F280028000000800FF803E0041003E00000 +BED0:00000000000200022482248224823F9E248224823F8200020002000200020000 +BED1:000000084908490849087F3849087F0800080000000007F80008000800080000 +BED2:000000084908490849087F3849087F080008000000003EF80208020802080000 +BED3:000000084908490849087F3849087F080008000000001F080108011401620000 +BED4:000000084908490849087F3849087F080008000000001000100010001FF80000 +BED5:000000084908490849087F3849087F0800080000000020F8201020303ECC0000 +BED6:000000084908490849087F3849087F0800080000202021FC207020883E700000 +BED7:000000084908490849087F3849087F080008000003F802000200020003F80000 +BED8:000000084908490849087F3849087F080008000007F8000807F8040007F80000 +BED9:000000084908490849087F3849087F08000800003EF802083E0820083E080000 +BEDA:000000084908490849087F3849087F08000800003EF802883E8820883EF80000 +BEDB:000000084908490849087F3849087F08000800003E8802883EF820883EF80000 +BEDC:000000084908490849087F3849087F08000800000F8800880F8808140FA20000 +BEDD:000000084908490849087F3849087F08000800003EF802803EF820803EF80000 +BEDE:000000084908490849087F3849087F08000800003EFC02483E4820483EFC0000 +BEDF:000000084908490849087F3849087F08000800003E1002FE3E3820443E380000 +BEE0:000000084908490849087F3849087F080008000003F802080208020803F80000 +BEE1:000000084908490849087F3849087F08000800000208020803F8020803F80000 +BEE2:000000084908490849087F3849087F0800080000210821083F0821143F620000 +BEE3:000000084908490849087F3849087F0800080000001000100010006801840000 +BEE4:000000084908490849087F3849087F08000800000048004800A8011406620000 +BEE5:000000084908490849087F3849087F0800080000000003F00408040803F00000 +BEE6:000000084908490849087F3849087F080008000003F80020002000D003080000 +BEE7:000000084908490849087F3849087F0800080000004003F8004000A003180000 +BEE8:000000084908490849087F3849087F080008000003F8000803F8000800080000 +BEE9:000000084908490849087F3849087F080008000003F8020003F8020003F80000 +BEEA:000000084908490849087F3849087F080008000000000FF8022002200FF80000 +BEEB:000000084908490849087F3849087F080008000000800FF803E0041003E00000 +BEEC:00000000000A000A248A248A248A3FBA248A248A3F8A000A000A000A000A0000 +BEED:000000284928492849287FE849287F280028000007F800080008000800080000 +BEEE:000000284928492849287FE849287F280028000000003EF80208020802080000 +BEEF:000000284928492849287FE849287F280028000000003E100210022802C40000 +BEF0:000000284928492849287FE849287F280028000008000800080008000FF80000 +BEF1:000000284928492849287FE849287F2800280000000020F8201020303ECC0000 +BEF2:000000284928492849287FE849287F2800280000202021FC207020883E700000 +BEF3:000000284928492849287FE849287F280028000003F802000200020003F80000 +BEF4:000000284928492849287FE849287F280028000007F8000807F8040007F80000 +BEF5:000000284928492849287FE849287F28002800003EF802083E0820083E080000 +BEF6:000000284928492849287FE849287F28002800003EF802883E8820883EF80000 +BEF7:000000284928492849287FE849287F28002800003E8802883EF820883EF80000 +BEF8:000000284928492849287FE849287F28002800001F0801081F0810141F620000 +BEF9:000000284928492849287FE849287F28002800003EF802803EF820803EF80000 +BEFA:000000284928492849287FE849287F28002800003EFC02483E4820483EFC0000 +BEFB:000000284928492849287FE849287F28002800003E1002FE3E3820443E380000 +BEFC:000000284928492849287FE849287F280028000003F802080208020803F80000 +BEFD:000000284928492849287FE849287F28002800000208020803F8020803F80000 +BEFE:000000284928492849287FE849287F2800280000110811081F0811141F620000 +BEFF:000000284928492849287FE849287F2800280000000800080008003400C20000 +BF00:000000284928492849287FE849287F28002800000048004800A8011406620000 +BF01:000000284928492849287FE849287F2800280000000001F00208020801F00000 +BF02:000000284928492849287FE849287F280028000003F80020002000D003080000 +BF03:000000284928492849287FE849287F2800280000004003F8004000A003180000 +BF04:000000284928492849287FE849287F280028000003F8000803F8000800080000 +BF05:000000284928492849287FE849287F280028000003F8020003F8020003F80000 +BF06:000000284928492849287FE849287F280028000000000FF8022002200FF80000 +BF07:000000284928492849287FE849287F280028000000800FF803E0041003E00000 +BF08:000000000002000224822482249E3F822482249E3F8200020002000200020000 +BF09:000000084908490849387F0849387F0800080000000007F80008000800080000 +BF0A:000000084908490849387F0849387F080008000000003EF80208020802080000 +BF0B:000000084908490849387F0849387F080008000000001F080108011401620000 +BF0C:000000084908490849387F0849387F080008000800001000100010001FF80000 +BF0D:000000084908490849387F0849387F0800080000000020F8201020303ECC0000 +BF0E:000000084908490849387F0849387F0800080000202021FC207020883E700000 +BF0F:000000084908490849387F0849387F080008000003F802000200020003F80000 +BF10:000000084908490849387F0849387F080008000007F8000807F8040007F80000 +BF11:000000084908490849387F0849387F08000800003EF802083E0820083E080000 +BF12:000000084908490849387F0849387F08000800003EF802883E8820883EF80000 +BF13:000000084908490849387F0849387F08000800003E8802883EF820883EF80000 +BF14:000000084908490849387F0849387F08000800000F8800880F8808140FA20000 +BF15:000000084908490849387F0849387F08000800003EF802803EF820803EF80000 +BF16:000000084908490849387F0849387F08000800003EFC02483E4820483EFC0000 +BF17:000000084908490849387F0849387F08000800003E1002FE3E3820443E380000 +BF18:000000084908490849387F0849387F080008000003F802080208020803F80000 +BF19:000000084908490849387F0849387F08000800000208020803F8020803F80000 +BF1A:000000084908490849387F0849387F0800080000210821083F0821143F620000 +BF1B:000000084908490849387F0849387F0800080000001000100010006801840000 +BF1C:000000084908490849387F0849387F08000800000048004800A8011406620000 +BF1D:000000084908490849387F0849387F0800080000000003F00408040803F00000 +BF1E:000000084908490849387F0849387F080008000003F80020002000D003080000 +BF1F:000000084908490849387F0849387F0800080000004003F8004000A003180000 +BF20:000000084908490849387F0849387F080008000003F8000803F8000800080000 +BF21:000000084908490849387F0849387F080008000003F8020003F8020003F80000 +BF22:000000084908490849387F0849387F080008000000000FF8022002200FF80000 +BF23:000000084908490849387F0849387F080008000000800FF803E0041003E00000 +BF24:00000000000A000A248A248A24BA3F8A248A24BA3F8A000A000A000A000A0000 +BF25:000000284928492849E87F2849E87F280028000007F800080008000800080000 +BF26:000000284928492849E87F2849E87F280028000000003EF80208020802080000 +BF27:000000284928492849E87F2849E87F280028000000003E100210022802C40000 +BF28:000000284928492849E87F2849E87F280028002808000800080008000FF80000 +BF29:000000284928492849E87F2849E87F2800280000000020F8201020303ECC0000 +BF2A:000000284928492849E87F2849E87F2800280000202021FC207020883E700000 +BF2B:000000284928492849E87F2849E87F280028000003F802000200020003F80000 +BF2C:000000284928492849E87F2849E87F280028000007F8000807F8040007F80000 +BF2D:000000284928492849E87F2849E87F28002800003EF802083E0820083E080000 +BF2E:000000284928492849E87F2849E87F28002800003EF802883E8820883EF80000 +BF2F:000000284928492849E87F2849E87F28002800003E8802883EF820883EF80000 +BF30:000000284928492849E87F2849E87F28002800001F0801081F0810141F620000 +BF31:000000284928492849E87F2849E87F28002800003EF802803EF820803EF80000 +BF32:000000284928492849E87F2849E87F28002800003EFC02483E4820483EFC0000 +BF33:000000284928492849E87F2849E87F28002800003E1002FE3E3820443E380000 +BF34:000000284928492849E87F2849E87F280028000003F802080208020803F80000 +BF35:000000284928492849E87F2849E87F28002800000208020803F8020803F80000 +BF36:000000284928492849E87F2849E87F2800280000110811081F0811141F620000 +BF37:000000284928492849E87F2849E87F2800280000000800080008003400C20000 +BF38:000000284928492849E87F2849E87F28002800000048004800A8011406620000 +BF39:000000284928492849E87F2849E87F2800280000000001F00208020801F00000 +BF3A:000000284928492849E87F2849E87F280028000003F80020002000D003080000 +BF3B:000000284928492849E87F2849E87F2800280000004003F8004000A003180000 +BF3C:000000284928492849E87F2849E87F280028000003F8000803F8000800080000 +BF3D:000000284928492849E87F2849E87F280028000003F8020003F8020003F80000 +BF3E:000000284928492849E87F2849E87F280028000000000FF8022002200FF80000 +BF3F:000000284928492849E87F2849E87F280028000000800FF803E0041003E00000 +BF40:000000002108210821083FF8210821083FF800000100010001007FFC00000000 +BF41:0000210821083FF821083FF8010001007FFC00001FF000100010001000100000 +BF42:0000210821083FF821083FF8010001007FFC000000003EF80208020802080000 +BF43:0000210821083FF821083FF8010001007FFC000000001E100210022802C40000 +BF44:0000210821083FF821083FF8010001007FFC000000001000100010001FF00000 +BF45:0000210821083FF821083FF8010001007FFC0000000020F8201020303ECC0000 +BF46:0000210821083FF821083FF8010001007FFC0000202021FC207020883E700000 +BF47:0000210821083FF821083FF8010001007FFC00001FF01000100010001FF00000 +BF48:0000210821083FF821083FF8010001007FFC00001FF000101FF010001FF00000 +BF49:0000210821083FF821083FF8010001007FFC00003EF802083E0820083E080000 +BF4A:0000210821083FF821083FF8010001007FFC00003EF802883E8820883EF80000 +BF4B:0000210821083FF821083FF8010001007FFC00003E8802883EF820883EF80000 +BF4C:0000210821083FF821083FF8010001007FFC00003E1002103E1020283EC40000 +BF4D:0000210821083FF821083FF8010001007FFC00003EF802803EF820803EF80000 +BF4E:0000210821083FF821083FF8010001007FFC00003EFC02483E4820483EFC0000 +BF4F:0000210821083FF821083FF8010001007FFC00003E2003FC3E7020883E700000 +BF50:0000210821083FF821083FF8010001007FFC00001FF01010101010101FF00000 +BF51:0000210821083FF821083FF8010001007FFC0000101010101FF010101FF00000 +BF52:0000210821083FF821083FF8010001007FFC0000222022203E2022503E880000 +BF53:0000210821083FF821083FF8010001007FFC000000000100010002800C400000 +BF54:0000210821083FF821083FF8010001007FFC00000000024002400DA033100000 +BF55:0000210821083FF821083FF8010001007FFC0000000007C00820082007C00000 +BF56:0000210821083FF821083FF8010001007FFC0000000007E00080014006200000 +BF57:0000210821083FF821083FF8010001007FFC0000008007E00080014006200000 +BF58:0000210821083FF821083FF8010001007FFC00001FF000101FF0001000100000 +BF59:0000210821083FF821083FF8010001007FFC00001FF010001FF010001FF00000 +BF5A:0000210821083FF821083FF8010001007FFC000000001FF0044004401FF00000 +BF5B:0000210821083FF821083FF8010001007FFC000001001FF007C0082007C00000 +BF5C:0000001000104450445044507FD0445E44507FD0041004107FD0001000100000 +BF5D:0000248824883F88248E3F88040804087FE8000007F800080008000800080000 +BF5E:0000248824883F88248E3F88040804087FE8000000003EF80208020802080000 +BF5F:0000248824883F88248E3F88040804087FE8000000001F080108011401620000 +BF60:0000248824883F88248E3F88040804087FE8000008000800080008000FF80000 +BF61:0000248824883F88248E3F88040804087FE80000000010F8101010301ECC0000 +BF62:0000248824883F88248E3F88040804087FE800000808087F081C08220F9C0000 +BF63:0000248824883F88248E3F88040804087FE8000003F802000200020003F80000 +BF64:0000248824883F88248E3F88040804087FE8000007F8000807F8040007F80000 +BF65:0000248824883F88248E3F88040804087FE800003EF802083E0820083E080000 +BF66:0000248824883F88248E3F88040804087FE800003EF802883E8820883EF80000 +BF67:0000248824883F88248E3F88040804087FE800003E8802883EF820883EF80000 +BF68:0000248824883F88248E3F88040804087FE800001F0801081F0810141F620000 +BF69:0000248824883F88248E3F88040804087FE800003EF802803EF820803EF80000 +BF6A:0000248824883F88248E3F88040804087FE800003EFC02483E4820483EFC0000 +BF6B:0000248824883F88248E3F88040804087FE800001F08017F1F1C10221F1C0000 +BF6C:0000248824883F88248E3F88040804087FE8000003F802080208020803F80000 +BF6D:0000248824883F88248E3F88040804087FE800000208020803F8020803F80000 +BF6E:0000248824883F88248E3F88040804087FE80000110811081F0811141F620000 +BF6F:0000248824883F88248E3F88040804087FE80000001000100010006801840000 +BF70:0000248824883F88248E3F88040804087FE800000048004800A8011406620000 +BF71:0000248824883F88248E3F88040804087FE80000000003F00408040803F00000 +BF72:0000248824883F88248E3F88040804087FE8000003F80020002000D003080000 +BF73:0000248824883F88248E3F88040804087FE80000004003F8004000A003180000 +BF74:0000248824883F88248E3F88040804087FE8000003F8000803F8000800080000 +BF75:0000248824883F88248E3F88040804087FE8000003F8020003F8020003F80000 +BF76:0000248824883F88248E3F88040804087FE8000000000FF8022002200FF80000 +BF77:0000248824883F88248E3F88040804087FE8000000800FF803E0041003E00000 +BF78:0000001200124452445244527FD2445E44527FD2041204127FD2001200120000 +BF79:000024A824A83FA824B83FA8042804287FA8000007F800080008000800080000 +BF7A:000024A824A83FA824B83FA8042804287FA8000000003EF80208020802080000 +BF7B:000024A824A83FA824B83FA8042804287FA8000000001F080108011401620000 +BF7C:000024A824A83FA824B83FA8042804287FA8000008000800080008000FF80000 +BF7D:000024A824A83FA824B83FA8042804287FA80000000010F8101010301ECC0000 +BF7E:000024A824A83FA824B83FA8042804287FA800000808087F081C08220F9C0000 +BF7F:000024A824A83FA824B83FA8042804287FA8000003F802000200020003F80000 +BF80:000024A824A83FA824B83FA8042804287FA8000007F8000807F8040007F80000 +BF81:000024A824A83FA824B83FA8042804287FA800003EF802083E0820083E080000 +BF82:000024A824A83FA824B83FA8042804287FA800003EF802883E8820883EF80000 +BF83:000024A824A83FA824B83FA8042804287FA800003E8802883EF820883EF80000 +BF84:000024A824A83FA824B83FA8042804287FA800001F0801081F0810141F620000 +BF85:000024A824A83FA824B83FA8042804287FA800003EF802803EF820803EF80000 +BF86:000024A824A83FA824B83FA8042804287FA800003EFC02483E4820483EFC0000 +BF87:000024A824A83FA824B83FA8042804287FA800001F08017F1F1C10221F1C0000 +BF88:000024A824A83FA824B83FA8042804287FA8000003F802080208020803F80000 +BF89:000024A824A83FA824B83FA8042804287FA800000208020803F8020803F80000 +BF8A:000024A824A83FA824B83FA8042804287FA80000110811081F0811141F620000 +BF8B:000024A824A83FA824B83FA8042804287FA80000001000100010006801840000 +BF8C:000024A824A83FA824B83FA8042804287FA800000048004800A8011406620000 +BF8D:000024A824A83FA824B83FA8042804287FA80000000003F00408040803F00000 +BF8E:000024A824A83FA824B83FA8042804287FA8000003F80020002000D003080000 +BF8F:000024A824A83FA824B83FA8042804287FA80000004003F8004000A003180000 +BF90:000024A824A83FA824B83FA8042804287FA8000003F8000803F8000800080000 +BF91:000024A824A83FA824B83FA8042804287FA8000003F8020003F8020003F80000 +BF92:000024A824A83FA824B83FA8042804287FA8000000000FF8022002200FF80000 +BF93:000024A824A83FA824B83FA8042804287FA8000000800FF803E0041003E00000 +BF94:0000000800084448444844487FC8444844487FC8040804087FE8000800080000 +BF95:0000248824883F8824883F88040804087FE8000007F800080008000800080000 +BF96:0000248824883F8824883F88040804087FE8000000003EF80208020802080000 +BF97:0000248824883F8824883F88040804087FE8000000001F080108011401620000 +BF98:0000248824883F8824883F88040804087FE8000008000800080008000FF80000 +BF99:0000248824883F8824883F88040804087FE80000000010F8101010301ECC0000 +BF9A:0000248824883F8824883F88040804087FE800000808087F081C08220F9C0000 +BF9B:0000248824883F8824883F88040804087FE8000003F802000200020003F80000 +BF9C:0000248824883F8824883F88040804087FE8000007F8000807F8040007F80000 +BF9D:0000248824883F8824883F88040804087FE800003EF802083E0820083E080000 +BF9E:0000248824883F8824883F88040804087FE800003EF802883E8820883EF80000 +BF9F:0000248824883F8824883F88040804087FE800003E8802883EF820883EF80000 +BFA0:0000248824883F8824883F88040804087FE800001F0801081F0810141F620000 +BFA1:0000248824883F8824883F88040804087FE800003EF802803EF820803EF80000 +BFA2:0000248824883F8824883F88040804087FE800003EFC02483E4820483EFC0000 +BFA3:0000248824883F8824883F88040804087FE800001F08017F1F1C10221F1C0000 +BFA4:0000248824883F8824883F88040804087FE8000003F802080208020803F80000 +BFA5:0000248824883F8824883F88040804087FE800000208020803F8020803F80000 +BFA6:0000248824883F8824883F88040804087FE80000110811081F0811141F620000 +BFA7:0000248824883F8824883F88040804087FE80000001000100010006801840000 +BFA8:0000248824883F8824883F88040804087FE800000048004800A8011406620000 +BFA9:0000248824883F8824883F88040804087FE80000000003F00408040803F00000 +BFAA:0000248824883F8824883F88040804087FE8000003F80020002000D003080000 +BFAB:0000248824883F8824883F88040804087FE80000004003F8004000A003180000 +BFAC:0000248824883F8824883F88040804087FE8000003F8000803F8000800080000 +BFAD:0000248824883F8824883F88040804087FE8000003F8020003F8020003F80000 +BFAE:0000248824883F8824883F88040804087FE8000000000FF8022002200FF80000 +BFAF:0000248824883F8824883F88040804087FE8000000800FF803E0041003E00000 +BFB0:000000002108210821083FF8210821083FF804400440044004407FFC00000000 +BFB1:0000210821083FF821083FF8044004407FFC00001FF000100010001000100000 +BFB2:0000210821083FF821083FF8044004407FFC000000003EF80208020802080000 +BFB3:0000210821083FF821083FF8044004407FFC000000001E100210022802C40000 +BFB4:0000210821083FF821083FF8044004407FFC000000001000100010001FF00000 +BFB5:0000210821083FF821083FF8044004407FFC0000000020F8201020303ECC0000 +BFB6:0000210821083FF821083FF8044004407FFC0000202021FC207020883E700000 +BFB7:0000210821083FF821083FF8044004407FFC00001FF01000100010001FF00000 +BFB8:0000210821083FF821083FF8044004407FFC00001FF000101FF010001FF00000 +BFB9:0000210821083FF821083FF8044004407FFC00003EF802083E0820083E080000 +BFBA:0000210821083FF821083FF8044004407FFC00003EF802883E8820883EF80000 +BFBB:0000210821083FF821083FF8044004407FFC00003E8802883EF820883EF80000 +BFBC:0000210821083FF821083FF8044004407FFC00003E1002103E1020283EC40000 +BFBD:0000210821083FF821083FF8044004407FFC00003EF802803EF820803EF80000 +BFBE:0000210821083FF821083FF8044004407FFC00003EFC02483E4820483EFC0000 +BFBF:0000210821083FF821083FF8044004407FFC00003E2003FC3E7020883E700000 +BFC0:0000210821083FF821083FF8044004407FFC00001FF01010101010101FF00000 +BFC1:0000210821083FF821083FF8044004407FFC0000101010101FF010101FF00000 +BFC2:0000210821083FF821083FF8044004407FFC0000222022203E2022503E880000 +BFC3:0000210821083FF821083FF8044004407FFC000000000100010002800C400000 +BFC4:0000210821083FF821083FF8044004407FFC00000000024002400DA033100000 +BFC5:0000210821083FF821083FF8044004407FFC0000000007C00820082007C00000 +BFC6:0000210821083FF821083FF8044004407FFC0000000007E00080014006200000 +BFC7:0000210821083FF821083FF8044004407FFC0000008007E00080014006200000 +BFC8:0000210821083FF821083FF8044004407FFC00001FF000101FF0001000100000 +BFC9:0000210821083FF821083FF8044004407FFC00001FF010001FF010001FF00000 +BFCA:0000210821083FF821083FF8044004407FFC000000001FF0044004401FF00000 +BFCB:0000210821083FF821083FF8044004407FFC000001001FF007C0082007C00000 +BFCC:000000002108210821083FF8210821083FF800003FF801000100010001000000 +BFCD:0000210821083FF821083FF800007FFC010001001FF000100010001000100000 +BFCE:0000210821083FF821083FF800007FFC0100010000003EF80208020802080000 +BFCF:0000210821083FF821083FF800007FFC0100010000001E100210022802C40000 +BFD0:0000210821083FF821083FF8000000007FFC010001001100100010001FF00000 +BFD1:0000210821083FF821083FF800007FFC01000100000020F8201020303ECC0000 +BFD2:0000210821083FF821083FF800007FFC01000100202021FC207020883E700000 +BFD3:0000210821083FF821083FF800007FFC010001001FF01000100010001FF00000 +BFD4:0000210821083FF821083FF800007FFC010001001FF000101FF010001FF00000 +BFD5:0000210821083FF821083FF800007FFC010001003EF802083E0820083E080000 +BFD6:0000210821083FF821083FF800007FFC010001003EF802883E8820883EF80000 +BFD7:0000210821083FF821083FF800007FFC010001003E8802883EF820883EF80000 +BFD8:0000210821083FF821083FF800007FFC010001003E1002103E1020283EC40000 +BFD9:0000210821083FF821083FF800007FFC010001003EF802803EF820803EF80000 +BFDA:0000210821083FF821083FF800007FFC010001003EFC02483E4820483EFC0000 +BFDB:0000210821083FF821083FF800007FFC010001003E2003FC3E7020883E700000 +BFDC:0000210821083FF821083FF800007FFC010001001FF01010101010101FF00000 +BFDD:0000210821083FF821083FF800007FFC01000100101010101FF010101FF00000 +BFDE:0000210821083FF821083FF800007FFC01000100222022203E2022503E880000 +BFDF:0000210821083FF821083FF800007FFC0100010000000100010002800C400000 +BFE0:0000210821083FF821083FF800007FFC010001000000024002400DA033100000 +BFE1:0000210821083FF821083FF800007FFC01000100000007C00820082007C00000 +BFE2:0000210821083FF821083FF800007FFC01000100000007E00080014006200000 +BFE3:0000210821083FF821083FF800007FFC01000100008007E00080014006200000 +BFE4:0000210821083FF821083FF800007FFC010001001FF000101FF0001000100000 +BFE5:0000210821083FF821083FF800007FFC010001001FF010001FF010001FF00000 +BFE6:0000210821083FF821083FF800007FFC0100010000001FF0044004401FF00000 +BFE7:0000210821083FF821083FF800007FFC0100010001001FF007C0082007C00000 +BFE8:000000084448444844487FC8444844487FC800087FE8040804F8040804080000 +BFE9:248824883F8824883F8800087FE8027802080000000007F80008000800080000 +BFEA:248824883F8824883F8800087FE802780208000000003EF80208020802080000 +BFEB:248824883F8824883F8800087FE802780208000000001F080108011401620000 +BFEC:248824883F8824883F88000800087FE80278020802081000100010001FF80000 +BFED:248824883F8824883F8800087FE8027802080000000020F8201020303ECC0000 +BFEE:248824883F8824883F8800087FE8027802080000202021FC207020883E700000 +BFEF:248824883F8824883F8800087FE802780208000003F802000200020003F80000 +BFF0:248824883F8824883F8800087FE802780208000007F8000807F8040007F80000 +BFF1:248824883F8824883F8800087FE80278020800003EF802083E0820083E080000 +BFF2:248824883F8824883F8800087FE80278020800003EF802883E8820883EF80000 +BFF3:248824883F8824883F8800087FE80278020800003E8802883EF820883EF80000 +BFF4:248824883F8824883F8800087FE80278020800000F8800880F8808140FA20000 +BFF5:248824883F8824883F8800087FE80278020800003EF802803EF820803EF80000 +BFF6:248824883F8824883F8800087FE80278020800003EFC02483E4820483EFC0000 +BFF7:248824883F8824883F8800087FE80278020800003E1002FE3E3820443E380000 +BFF8:248824883F8824883F8800087FE802780208000003F802080208020803F80000 +BFF9:248824883F8824883F8800087FE80278020800000208020803F8020803F80000 +BFFA:248824883F8824883F8800087FE8027802080000210821083F0821143F620000 +BFFB:248824883F8824883F8800087FE8027802080000001000100010006801840000 +BFFC:248824883F8824883F8800087FE80278020800000048004800A8011406620000 +BFFD:248824883F8824883F8800087FE8027802080000000003F00408040803F00000 +BFFE:248824883F8824883F8800087FE802780208000003F80020002000D003080000 +BFFF:248824883F8824883F8800087FE8027802080000004003F8004000A003180000 +C000:248824883F8824883F8800087FE802780208000003F8000803F8000800080000 +C001:248824883F8824883F8800087FE802780208000003F8020003F8020003F80000 +C002:248824883F8824883F8800087FE802780208000000000FF8022002200FF80000 +C003:248824883F8824883F8800087FE802780208000000800FF803E0041003E00000 +C004:0000000A444A444A444A7FCA444A444A7FCA000A7FEA040A047A040A040A0000 +C005:24A824A83FA824A83FA800287FA805E804280000000007F80008000800080000 +C006:24A824A83FA824A83FA800287FA805E80428000000003EF80208020802080000 +C007:24A824A83FA824A83FA800287FA805E80428000000001F080108011401620000 +C008:24A824A83FA824A83FA8002800287FA8042805E804281428100010001FF80000 +C009:24A824A83FA824A83FA800287FA805E804280000000020F8201020303ECC0000 +C00A:24A824A83FA824A83FA800287FA805E804280000202021FC207020883E700000 +C00B:24A824A83FA824A83FA800287FA805E80428000003F802000200020003F80000 +C00C:24A824A83FA824A83FA800287FA805E80428000007F8000807F8040007F80000 +C00D:24A824A83FA824A83FA800287FA805E8042800003EF802083E0820083E080000 +C00E:24A824A83FA824A83FA800287FA805E8042800003EF802883E8820883EF80000 +C00F:24A824A83FA824A83FA800287FA805E8042800003E8802883EF820883EF80000 +C010:24A824A83FA824A83FA800287FA805E8042800000F8800880F8808140FA20000 +C011:24A824A83FA824A83FA800287FA805E8042800003EF802803EF820803EF80000 +C012:24A824A83FA824A83FA800287FA805E8042800003EFC02483E4820483EFC0000 +C013:24A824A83FA824A83FA800287FA805E8042800003E1002FE3E3820443E380000 +C014:24A824A83FA824A83FA800287FA805E80428000003F802080208020803F80000 +C015:24A824A83FA824A83FA800287FA805E8042800000208020803F8020803F80000 +C016:24A824A83FA824A83FA800287FA805E804280000210821083F0821143F620000 +C017:24A824A83FA824A83FA800287FA805E804280000001000100010006801840000 +C018:24A824A83FA824A83FA800287FA805E8042800000048004800A8011406620000 +C019:24A824A83FA824A83FA800287FA805E804280000000003F00408040803F00000 +C01A:24A824A83FA824A83FA800287FA805E80428000003F80020002000D003080000 +C01B:24A824A83FA824A83FA800287FA805E804280000004003F8004000A003180000 +C01C:24A824A83FA824A83FA800287FA805E80428000003F8000803F8000800080000 +C01D:24A824A83FA824A83FA800287FA805E80428000003F8020003F8020003F80000 +C01E:24A824A83FA824A83FA800287FA805E80428000000000FF8022002200FF80000 +C01F:24A824A83FA824A83FA800287FA805E80428000000800FF803E0041003E00000 +C020:000000084448444844487FC8444844487FC800087FE804080408040804080000 +C021:248824883F8824883F8800087FE8020802000000000007F80008000800080000 +C022:248824883F8824883F8800087FE802080200000000003EF80208020802080000 +C023:248824883F8824883F8800087FE802080200000000001F080108011401620000 +C024:248824883F8824883F88000800087FE80208020802081008100010001FF80000 +C025:248824883F8824883F8800087FE8020802000000000020F8201020303ECC0000 +C026:248824883F8824883F8800087FE8020802000000202021FC207020883E700000 +C027:248824883F8824883F8800087FE802080200000003F802000200020003F80000 +C028:248824883F8824883F8800087FE802080200000007F8000807F8040007F80000 +C029:248824883F8824883F8800087FE80208020000003EF802083E0820083E080000 +C02A:248824883F8824883F8800087FE80208020000003EF802883E8820883EF80000 +C02B:248824883F8824883F8800087FE80208020000003E8802883EF820883EF80000 +C02C:248824883F8824883F8800087FE80208020000000F8800880F8808140FA20000 +C02D:248824883F8824883F8800087FE80208020000003EF802803EF820803EF80000 +C02E:248824883F8824883F8800087FE80208020000003EFC02483E4820483EFC0000 +C02F:248824883F8824883F8800087FE80208020000003E1002FE3E3820443E380000 +C030:248824883F8824883F8800087FE802080200000003F802080208020803F80000 +C031:248824883F8824883F8800087FE80208020000000208020803F8020803F80000 +C032:248824883F8824883F8800087FE8020802000000210821083F0821143F620000 +C033:248824883F8824883F8800087FE8020802000000001000100010006801840000 +C034:248824883F8824883F8800087FE80208020000000048004800A8011406620000 +C035:248824883F8824883F8800087FE8020802000000000003F00408040803F00000 +C036:248824883F8824883F8800087FE802080200000003F80020002000D003080000 +C037:248824883F8824883F8800087FE8020802000000004003F8004000A003180000 +C038:248824883F8824883F8800087FE802080200000003F8000803F8000800080000 +C039:248824883F8824883F8800087FE802080200000003F8020003F8020003F80000 +C03A:248824883F8824883F8800087FE802080200000000000FF8022002200FF80000 +C03B:248824883F8824883F8800087FE802080200000000800FF803E0041003E00000 +C03C:000000002108210821083FF8210821083FF800007FFC04400440044004400000 +C03D:0000210821083FF821083FF800007FFC044004401FF000100010001000100000 +C03E:0000210821083FF821083FF800007FFC0440044000003EF80208020802080000 +C03F:0000210821083FF821083FF800007FFC0440044000001E100210022802C40000 +C040:0000210821083FF821083FF8000000007FFC044004401440100010001FF00000 +C041:0000210821083FF821083FF800007FFC04400440000020F8201020303ECC0000 +C042:0000210821083FF821083FF800007FFC04400440202021FC207020883E700000 +C043:0000210821083FF821083FF800007FFC044004401FF01000100010001FF00000 +C044:0000210821083FF821083FF800007FFC044004401FF000101FF010001FF00000 +C045:0000210821083FF821083FF800007FFC044004403EF802083E0820083E080000 +C046:0000210821083FF821083FF800007FFC044004403EF802883E8820883EF80000 +C047:0000210821083FF821083FF800007FFC044004403E8802883EF820883EF80000 +C048:0000210821083FF821083FF800007FFC044004403E1002103E1020283EC40000 +C049:0000210821083FF821083FF800007FFC044004403EF802803EF820803EF80000 +C04A:0000210821083FF821083FF800007FFC044004403EFC02483E4820483EFC0000 +C04B:0000210821083FF821083FF800007FFC044004403E2003FC3E7020883E700000 +C04C:0000210821083FF821083FF800007FFC044004401FF01010101010101FF00000 +C04D:0000210821083FF821083FF800007FFC04400440101010101FF010101FF00000 +C04E:0000210821083FF821083FF800007FFC04400440222022203E2022503E880000 +C04F:0000210821083FF821083FF800007FFC0440044000000100010002800C400000 +C050:0000210821083FF821083FF800007FFC044004400000024002400DA033100000 +C051:0000210821083FF821083FF800007FFC04400440000007C00820082007C00000 +C052:0000210821083FF821083FF800007FFC04400440000007E00080014006200000 +C053:0000210821083FF821083FF800007FFC04400440008007E00080014006200000 +C054:0000210821083FF821083FF800007FFC044004401FF000101FF0001000100000 +C055:0000210821083FF821083FF800007FFC044004401FF010001FF010001FF00000 +C056:0000210821083FF821083FF800007FFC0440044000001FF0044004401FF00000 +C057:0000210821083FF821083FF800007FFC0440044001001FF007C0082007C00000 +C058:000000002108210821083FF8210821083FF8000000007FFC0000000000000000 +C059:0000210821083FF821083FF8000000007FFC00001FF000100010001000100000 +C05A:0000210821083FF821083FF8000000007FFC000000003EF80208020802080000 +C05B:0000210821083FF821083FF8000000007FFC000000001E100210022802C40000 +C05C:0000210821083FF821083FF8000000007FFC000000001000100010001FF00000 +C05D:0000210821083FF821083FF8000000007FFC0000000020F8201020303ECC0000 +C05E:0000210821083FF821083FF8000000007FFC0000202021FC207020883E700000 +C05F:0000210821083FF821083FF8000000007FFC00001FF01000100010001FF00000 +C060:0000210821083FF821083FF8000000007FFC00001FF000101FF010001FF00000 +C061:0000210821083FF821083FF8000000007FFC00003EF802083E0820083E080000 +C062:0000210821083FF821083FF8000000007FFC00003EF802883E8820883EF80000 +C063:0000210821083FF821083FF8000000007FFC00003E8802883EF820883EF80000 +C064:0000210821083FF821083FF8000000007FFC00003E1002103E1020283EC40000 +C065:0000210821083FF821083FF8000000007FFC00003EF802803EF820803EF80000 +C066:0000210821083FF821083FF8000000007FFC00003EFC02483E4820483EFC0000 +C067:0000210821083FF821083FF8000000007FFC00003E2003FC3E7020883E700000 +C068:0000210821083FF821083FF8000000007FFC00001FF01010101010101FF00000 +C069:0000210821083FF821083FF8000000007FFC0000101010101FF010101FF00000 +C06A:0000210821083FF821083FF8000000007FFC0000222022203E2022503E880000 +C06B:0000210821083FF821083FF8000000007FFC000000000100010002800C400000 +C06C:0000210821083FF821083FF8000000007FFC00000000024002400DA033100000 +C06D:0000210821083FF821083FF8000000007FFC0000000007C00820082007C00000 +C06E:0000210821083FF821083FF8000000007FFC0000000007E00080014006200000 +C06F:0000210821083FF821083FF8000000007FFC0000008007E00080014006200000 +C070:0000210821083FF821083FF8000000007FFC00001FF000101FF0001000100000 +C071:0000210821083FF821083FF8000000007FFC00001FF010001FF010001FF00000 +C072:0000210821083FF821083FF8000000007FFC000000001FF0044004401FF00000 +C073:0000210821083FF821083FF8000000007FFC000001001FF007C0082007C00000 +C074:0000000800084448444844487FC8444844487FC800087FE80008000800080000 +C075:0000248824883F8824883F88000800087FE8000007F800080008000800080000 +C076:0000248824883F8824883F88000800087FE8000000003EF80208020802080000 +C077:0000248824883F8824883F88000800087FE8000000001F080108011401620000 +C078:0000248824883F8824883F88000800087FE8000008000800080008000FF80000 +C079:0000248824883F8824883F88000800087FE80000000010F8101010301ECC0000 +C07A:0000248824883F8824883F88000800087FE800000808087F081C08220F9C0000 +C07B:0000248824883F8824883F88000800087FE8000003F802000200020003F80000 +C07C:0000248824883F8824883F88000800087FE8000007F8000807F8040007F80000 +C07D:0000248824883F8824883F88000800087FE800003EF802083E0820083E080000 +C07E:0000248824883F8824883F88000800087FE800003EF802883E8820883EF80000 +C07F:0000248824883F8824883F88000800087FE800003E8802883EF820883EF80000 +C080:0000248824883F8824883F88000800087FE800001F0801081F0810141F620000 +C081:0000248824883F8824883F88000800087FE800003EF802803EF820803EF80000 +C082:0000248824883F8824883F88000800087FE800003EFC02483E4820483EFC0000 +C083:0000248824883F8824883F88000800087FE800001F08017F1F1C10221F1C0000 +C084:0000248824883F8824883F88000800087FE8000003F802080208020803F80000 +C085:0000248824883F8824883F88000800087FE800000208020803F8020803F80000 +C086:0000248824883F8824883F88000800087FE80000110811081F0811141F620000 +C087:0000248824883F8824883F88000800087FE80000001000100010006801840000 +C088:0000248824883F8824883F88000800087FE800000048004800A8011406620000 +C089:0000248824883F8824883F88000800087FE80000000003F00408040803F00000 +C08A:0000248824883F8824883F88000800087FE8000003F80020002000D003080000 +C08B:0000248824883F8824883F88000800087FE80000004003F8004000A003180000 +C08C:0000248824883F8824883F88000800087FE8000003F8000803F8000800080000 +C08D:0000248824883F8824883F88000800087FE8000003F8020003F8020003F80000 +C08E:0000248824883F8824883F88000800087FE8000000000FF8022002200FF80000 +C08F:0000248824883F8824883F88000800087FE8000000800FF803E0041003E00000 +C090:00000000000800082488248824883F88248824883F8800080008000800080000 +C091:000000084908490849087F0849087F0800080000000007F80008000800080000 +C092:000000084908490849087F0849087F080008000000003EF80208020802080000 +C093:000000084908490849087F0849087F080008000000001F080108011401620000 +C094:000000084908490849087F0849087F080008000800001000100010001FF80000 +C095:000000084908490849087F0849087F0800080000000020F8201020303ECC0000 +C096:000000084908490849087F0849087F0800080000202021FC207020883E700000 +C097:000000084908490849087F0849087F080008000003F802000200020003F80000 +C098:000000084908490849087F0849087F080008000007F8000807F8040007F80000 +C099:000000084908490849087F0849087F08000800003EF802083E0820083E080000 +C09A:000000084908490849087F0849087F08000800003EF802883E8820883EF80000 +C09B:000000084908490849087F0849087F08000800003E8802883EF820883EF80000 +C09C:000000084908490849087F0849087F08000800000F8800880F8808140FA20000 +C09D:000000084908490849087F0849087F08000800003EF802803EF820803EF80000 +C09E:000000084908490849087F0849087F08000800003EFC02483E4820483EFC0000 +C09F:000000084908490849087F0849087F08000800003E1002FE3E3820443E380000 +C0A0:000000084908490849087F0849087F080008000003F802080208020803F80000 +C0A1:000000084908490849087F0849087F08000800000208020803F8020803F80000 +C0A2:000000084908490849087F0849087F0800080000210821083F0821143F620000 +C0A3:000000084908490849087F0849087F0800080000001000100010006801840000 +C0A4:000000084908490849087F0849087F08000800000048004800A8011406620000 +C0A5:000000084908490849087F0849087F0800080000000003F00408040803F00000 +C0A6:000000084908490849087F0849087F080008000003F80020002000D003080000 +C0A7:000000084908490849087F0849087F0800080000004003F8004000A003180000 +C0A8:000000084908490849087F0849087F080008000003F8000803F8000800080000 +C0A9:000000084908490849087F0849087F080008000003F8020003F8020003F80000 +C0AA:000000084908490849087F0849087F080008000000000FF8022002200FF80000 +C0AB:000000084908490849087F0849087F080008000000800FF803E0041003E00000 +C0AC:0000000000100010021002100410041E0A101110609000100010001000100000 +C0AD:000000080008040804080C0E120861080008000007F800080008000800080000 +C0AE:000000080008040804080C0E120861080008000000003EF80208020802080000 +C0AF:000000080008040804080C0E120861080008000000001F080108011401620000 +C0B0:000000080008040804080C0E120861080008000808000800080008000FF80000 +C0B1:000000080008040804080C0E1208610800080000000010F8101010301ECC0000 +C0B2:000000080008040804080C0E12086108000800000808087F081C08220F9C0000 +C0B3:000000080008040804080C0E120861080008000003F802000200020003F80000 +C0B4:000000080008040804080C0E120861080008000007F8000807F8040007F80000 +C0B5:000000080008040804080C0E12086108000800003EF802083E0820083E080000 +C0B6:000000080008040804080C0E12086108000800003EF802883E8820883EF80000 +C0B7:000000080008040804080C0E12086108000800003E8802883EF820883EF80000 +C0B8:000000080008040804080C0E12086108000800001F0801081F0810141F620000 +C0B9:000000080008040804080C0E12086108000800003EF802803EF820803EF80000 +C0BA:000000080008040804080C0E12086108000800003EFC02483E4820483EFC0000 +C0BB:000000080008040804080C0E12086108000800001F08017F1F1C10221F1C0000 +C0BC:000000080008040804080C0E120861080008000003F802080208020803F80000 +C0BD:000000080008040804080C0E12086108000800000208020803F8020803F80000 +C0BE:000000080008040804080C0E1208610800080000110811081F0811141F620000 +C0BF:000000080008040804080C0E1208610800080000001000100010006801840000 +C0C0:000000080008040804080C0E12086108000800000048004800A8011406620000 +C0C1:000000080008040804080C0E1208610800080000000003F00408040803F00000 +C0C2:000000080008040804080C0E120861080008000003F80020002000D003080000 +C0C3:000000080008040804080C0E1208610800080000004003F8004000A003180000 +C0C4:000000080008040804080C0E120861080008000003F8000803F8000800080000 +C0C5:000000080008040804080C0E120861080008000003F8020003F8020003F80000 +C0C6:000000080008040804080C0E120861080008000000000FF8022002200FF80000 +C0C7:000000080008040804080C0E120861080008000000800FF803E0041003E00000 +C0C8:0000000000120012021202120412041E0A121112609200120012001200120000 +C0C9:000000280028042804280C38122861280028000007F800080008000800080000 +C0CA:000000280028042804280C38122861280028000000003EF80208020802080000 +C0CB:000000280028042804280C38122861280028000000003E100210022802C40000 +C0CC:000000280028042804280C38122861280028002808000800080008000FF80000 +C0CD:000000280028042804280C381228612800280000000020F8201020303ECC0000 +C0CE:000000280028042804280C381228612800280000202021FC207020883E700000 +C0CF:000000280028042804280C38122861280028000003F802000200020003F80000 +C0D0:000000280028042804280C38122861280028000007F8000807F8040007F80000 +C0D1:000000280028042804280C3812286128002800003EF802083E0820083E080000 +C0D2:000000280028042804280C3812286128002800003EF802883E8820883EF80000 +C0D3:000000280028042804280C3812286128002800003E8802883EF820883EF80000 +C0D4:000000280028042804280C3812286128002800001F0801081F0810141F620000 +C0D5:000000280028042804280C3812286128002800003EF802803EF820803EF80000 +C0D6:000000280028042804280C3812286128002800003EFC02483E4820483EFC0000 +C0D7:000000280028042804280C3812286128002800003E1002FE3E3820443E380000 +C0D8:000000280028042804280C38122861280028000003F802080208020803F80000 +C0D9:000000280028042804280C3812286128002800000208020803F8020803F80000 +C0DA:000000280028042804280C381228612800280000110811081F0811141F620000 +C0DB:000000280028042804280C381228612800280000000800080008003400C20000 +C0DC:000000280028042804280C3812286128002800000048004800A8011406620000 +C0DD:000000280028042804280C381228612800280000000001F00208020801F00000 +C0DE:000000280028042804280C38122861280028000003F80020002000D003080000 +C0DF:000000280028042804280C381228612800280000004003F8004000A003180000 +C0E0:000000280028042804280C38122861280028000003F8000803F8000800080000 +C0E1:000000280028042804280C38122861280028000003F8020003F8020003F80000 +C0E2:000000280028042804280C38122861280028000000000FF8022002200FF80000 +C0E3:000000280028042804280C38122861280028000000800FF803E0041003E00000 +C0E4:000000000010001002100210041E04100A10111E609000100010001000100000 +C0E5:0000000800080408040E0C08120E61080008000007F800080008000800080000 +C0E6:0000000800080408040E0C08120E61080008000000003EF80208020802080000 +C0E7:0000000800080408040E0C08120E61080008000000001F080108011401620000 +C0E8:0000000800080408040E0C08120E61080008000008000800080008000FF80000 +C0E9:0000000800080408040E0C08120E610800080000000010F8101010301ECC0000 +C0EA:0000000800080408040E0C08120E6108000800000808087F081C08220F9C0000 +C0EB:0000000800080408040E0C08120E61080008000003F802000200020003F80000 +C0EC:0000000800080408040E0C08120E61080008000007F8000807F8040007F80000 +C0ED:0000000800080408040E0C08120E6108000800003EF802083E0820083E080000 +C0EE:0000000800080408040E0C08120E6108000800003EF802883E8820883EF80000 +C0EF:0000000800080408040E0C08120E6108000800003E8802883EF820883EF80000 +C0F0:0000000800080408040E0C08120E6108000800001F0801081F0810141F620000 +C0F1:0000000800080408040E0C08120E6108000800003EF802803EF820803EF80000 +C0F2:0000000800080408040E0C08120E6108000800003EFC02483E4820483EFC0000 +C0F3:0000000800080408040E0C08120E6108000800001F08017F1F1C10221F1C0000 +C0F4:0000000800080408040E0C08120E61080008000003F802080208020803F80000 +C0F5:0000000800080408040E0C08120E6108000800000208020803F8020803F80000 +C0F6:0000000800080408040E0C08120E610800080000110811081F0811141F620000 +C0F7:0000000800080408040E0C08120E610800080000001000100010006801840000 +C0F8:0000000800080408040E0C08120E6108000800000048004800A8011406620000 +C0F9:0000000800080408040E0C08120E610800080000000003F00408040803F00000 +C0FA:0000000800080408040E0C08120E61080008000003F80020002000D003080000 +C0FB:0000000800080408040E0C08120E610800080000004003F8004000A003180000 +C0FC:0000000800080408040E0C08120E61080008000003F8000803F8000800080000 +C0FD:0000000800080408040E0C08120E61080008000003F8020003F8020003F80000 +C0FE:0000000800080408040E0C08120E61080008000000000FF8022002200FF80000 +C0FF:0000000800080408040E0C08120E61080008000000800FF803E0041003E00000 +C100:000000000012001202120212041E04120A12111E609200120012001200120000 +C101:000000280028042804380C28123861280028000007F800080008000800080000 +C102:000000280028042804380C28123861280028000000003EF80208020802080000 +C103:000000280028042804380C28123861280028000000003E100210022802C40000 +C104:000000280028042804380C28123861280028002808000800080008000FF80000 +C105:000000280028042804380C281238612800280000000020F8201020303ECC0000 +C106:000000280028042804380C281238612800280000202021FC207020883E700000 +C107:000000280028042804380C28123861280028000003F802000200020003F80000 +C108:000000280028042804380C28123861280028000007F8000807F8040007F80000 +C109:000000280028042804380C2812386128002800003EF802083E0820083E080000 +C10A:000000280028042804380C2812386128002800003EF802883E8820883EF80000 +C10B:000000280028042804380C2812386128002800003E8802883EF820883EF80000 +C10C:000000280028042804380C2812386128002800001F0801081F0810141F620000 +C10D:000000280028042804380C2812386128002800003EF802803EF820803EF80000 +C10E:000000280028042804380C2812386128002800003EFC02483E4820483EFC0000 +C10F:000000280028042804380C2812386128002800003E1002FE3E3820443E380000 +C110:000000280028042804380C28123861280028000003F802080208020803F80000 +C111:000000280028042804380C2812386128002800000208020803F8020803F80000 +C112:000000280028042804380C281238612800280000110811081F0811141F620000 +C113:000000280028042804380C281238612800280000000800080008003400C20000 +C114:000000280028042804380C2812386128002800000048004800A8011406620000 +C115:000000280028042804380C281238612800280000000001F00208020801F00000 +C116:000000280028042804380C28123861280028000003F80020002000D003080000 +C117:000000280028042804380C281238612800280000004003F8004000A003180000 +C118:000000280028042804380C28123861280028000003F8000803F8000800080000 +C119:000000280028042804380C28123861280028000003F8020003F8020003F80000 +C11A:000000280028042804380C28123861280028000000000FF8022002200FF80000 +C11B:000000280028042804380C28123861280028000000800FF803E0041003E00000 +C11C:0000000000020002020202020402041E0A021102608200020002000200020000 +C11D:000000080008040804080C381208610800080000000007F80008000800080000 +C11E:000000080008040804080C38120861080008000000003EF80208020802080000 +C11F:000000080008040804080C38120861080008000000001F080108011401620000 +C120:000000080008040804080C38120861080008000000001000100010001FF80000 +C121:000000080008040804080C381208610800080000000020F8201020303ECC0000 +C122:000000080008040804080C381208610800080000202021FC207020883E700000 +C123:000000080008040804080C38120861080008000003F802000200020003F80000 +C124:000000080008040804080C38120861080008000007F8000807F8040007F80000 +C125:000000080008040804080C3812086108000800003EF802083E0820083E080000 +C126:000000080008040804080C3812086108000800003EF802883E8820883EF80000 +C127:000000080008040804080C3812086108000800003E8802883EF820883EF80000 +C128:000000080008040804080C3812086108000800000F8800880F8808140FA20000 +C129:000000080008040804080C3812086108000800003EF802803EF820803EF80000 +C12A:000000080008040804080C3812086108000800003EFC02483E4820483EFC0000 +C12B:000000080008040804080C3812086108000800003E1002FE3E3820443E380000 +C12C:000000080008040804080C38120861080008000003F802080208020803F80000 +C12D:000000080008040804080C3812086108000800000208020803F8020803F80000 +C12E:000000080008040804080C381208610800080000210821083F0821143F620000 +C12F:000000080008040804080C381208610800080000001000100010006801840000 +C130:000000080008040804080C3812086108000800000048004800A8011406620000 +C131:000000080008040804080C381208610800080000000003F00408040803F00000 +C132:000000080008040804080C38120861080008000003F80020002000D003080000 +C133:000000080008040804080C381208610800080000004003F8004000A003180000 +C134:000000080008040804080C38120861080008000003F8000803F8000800080000 +C135:000000080008040804080C38120861080008000003F8020003F8020003F80000 +C136:000000080008040804080C38120861080008000000000FF8022002200FF80000 +C137:000000080008040804080C38120861080008000000800FF803E0041003E00000 +C138:00000000000A000A020A020A040A043A0A0A110A608A000A000A000A000A0000 +C139:000000280028042804280CE8122861280028000007F800080008000800080000 +C13A:000000280028042804280CE8122861280028000000003EF80208020802080000 +C13B:000000280028042804280CE8122861280028000000003E100210022802C40000 +C13C:000000280028042804280CE8122861280028000008000800080008000FF80000 +C13D:000000280028042804280CE81228612800280000000020F8201020303ECC0000 +C13E:000000280028042804280CE81228612800280000202021FC207020883E700000 +C13F:000000280028042804280CE8122861280028000003F802000200020003F80000 +C140:000000280028042804280CE8122861280028000007F8000807F8040007F80000 +C141:000000280028042804280CE812286128002800003EF802083E0820083E080000 +C142:000000280028042804280CE812286128002800003EF802883E8820883EF80000 +C143:000000280028042804280CE812286128002800003E8802883EF820883EF80000 +C144:000000280028042804280CE812286128002800001F0801081F0810141F620000 +C145:000000280028042804280CE812286128002800003EF802803EF820803EF80000 +C146:000000280028042804280CE812286128002800003EFC02483E4820483EFC0000 +C147:000000280028042804280CE812286128002800003E1002FE3E3820443E380000 +C148:000000280028042804280CE8122861280028000003F802080208020803F80000 +C149:000000280028042804280CE812286128002800000208020803F8020803F80000 +C14A:000000280028042804280CE81228612800280000110811081F0811141F620000 +C14B:000000280028042804280CE81228612800280000000800080008003400C20000 +C14C:000000280028042804280CE812286128002800000048004800A8011406620000 +C14D:000000280028042804280CE81228612800280000000001F00208020801F00000 +C14E:000000280028042804280CE8122861280028000003F80020002000D003080000 +C14F:000000280028042804280CE81228612800280000004003F8004000A003180000 +C150:000000280028042804280CE8122861280028000003F8000803F8000800080000 +C151:000000280028042804280CE8122861280028000003F8020003F8020003F80000 +C152:000000280028042804280CE8122861280028000000000FF8022002200FF80000 +C153:000000280028042804280CE8122861280028000000800FF803E0041003E00000 +C154:000000000002000202020202041E04020A02111E608200020002000200020000 +C155:000000080008040804380C081238610800080000000007F80008000800080000 +C156:000000080008040804380C08123861080008000000003EF80208020802080000 +C157:000000080008040804380C08123861080008000000001F080108011401620000 +C158:000000080008040804380C08123861080008000800001000100010001FF80000 +C159:000000080008040804380C081238610800080000000020F8201020303ECC0000 +C15A:000000080008040804380C081238610800080000202021FC207020883E700000 +C15B:000000080008040804380C08123861080008000003F802000200020003F80000 +C15C:000000080008040804380C08123861080008000007F8000807F8040007F80000 +C15D:000000080008040804380C0812386108000800003EF802083E0820083E080000 +C15E:000000080008040804380C0812386108000800003EF802883E8820883EF80000 +C15F:000000080008040804380C0812386108000800003E8802883EF820883EF80000 +C160:000000080008040804380C0812386108000800000F8800880F8808140FA20000 +C161:000000080008040804380C0812386108000800003EF802803EF820803EF80000 +C162:000000080008040804380C0812386108000800003EFC02483E4820483EFC0000 +C163:000000080008040804380C0812386108000800003E1002FE3E3820443E380000 +C164:000000080008040804380C08123861080008000003F802080208020803F80000 +C165:000000080008040804380C0812386108000800000208020803F8020803F80000 +C166:000000080008040804380C081238610800080000210821083F0821143F620000 +C167:000000080008040804380C081238610800080000001000100010006801840000 +C168:000000080008040804380C0812386108000800000048004800A8011406620000 +C169:000000080008040804380C081238610800080000000003F00408040803F00000 +C16A:000000080008040804380C08123861080008000003F80020002000D003080000 +C16B:000000080008040804380C081238610800080000004003F8004000A003180000 +C16C:000000080008040804380C08123861080008000003F8000803F8000800080000 +C16D:000000080008040804380C08123861080008000003F8020003F8020003F80000 +C16E:000000080008040804380C08123861080008000000000FF8022002200FF80000 +C16F:000000080008040804380C08123861080008000000800FF803E0041003E00000 +C170:00000000000A000A020A020A043A040A0A0A113A608A000A000A000A000A0000 +C171:000000280028042804E80C2812E861280028000007F800080008000800080000 +C172:000000280028042804E80C2812E861280028000000003EF80208020802080000 +C173:000000280028042804E80C2812E861280028000000003E100210022802C40000 +C174:000000280028042804E80C2812E861280028002808000800080008000FF80000 +C175:000000280028042804E80C2812E8612800280000000020F8201020303ECC0000 +C176:000000280028042804E80C2812E8612800280000202021FC207020883E700000 +C177:000000280028042804E80C2812E861280028000003F802000200020003F80000 +C178:000000280028042804E80C2812E861280028000007F8000807F8040007F80000 +C179:000000280028042804E80C2812E86128002800003EF802083E0820083E080000 +C17A:000000280028042804E80C2812E86128002800003EF802883E8820883EF80000 +C17B:000000280028042804E80C2812E86128002800003E8802883EF820883EF80000 +C17C:000000280028042804E80C2812E86128002800001F0801081F0810141F620000 +C17D:000000280028042804E80C2812E86128002800003EF802803EF820803EF80000 +C17E:000000280028042804E80C2812E86128002800003EFC02483E4820483EFC0000 +C17F:000000280028042804E80C2812E86128002800003E1002FE3E3820443E380000 +C180:000000280028042804E80C2812E861280028000003F802080208020803F80000 +C181:000000280028042804E80C2812E86128002800000208020803F8020803F80000 +C182:000000280028042804E80C2812E8612800280000110811081F0811141F620000 +C183:000000280028042804E80C2812E8612800280000000800080008003400C20000 +C184:000000280028042804E80C2812E86128002800000048004800A8011406620000 +C185:000000280028042804E80C2812E8612800280000000001F00208020801F00000 +C186:000000280028042804E80C2812E861280028000003F80020002000D003080000 +C187:000000280028042804E80C2812E8612800280000004003F8004000A003180000 +C188:000000280028042804E80C2812E861280028000003F8000803F8000800080000 +C189:000000280028042804E80C2812E861280028000003F8020003F8020003F80000 +C18A:000000280028042804E80C2812E861280028000000000FF8022002200FF80000 +C18B:000000280028042804E80C2812E861280028000000800FF803E0041003E00000 +C18C:00000000008000800100010002800440182000000100010001007FFC00000000 +C18D:000000800080018002400C20010001007FFC00001FF000100010001000100000 +C18E:000000800080018002400C20010001007FFC000000003EF80208020802080000 +C18F:000000800080018002400C20010001007FFC000000001E100210022802C40000 +C190:000000800080018002400C20010001007FFC000000001000100010001FF00000 +C191:000000800080018002400C20010001007FFC0000000020F8201020303ECC0000 +C192:000000800080018002400C20010001007FFC0000202021FC207020883E700000 +C193:000000800080018002400C20010001007FFC00001FF01000100010001FF00000 +C194:000000800080018002400C20010001007FFC00001FF000101FF010001FF00000 +C195:000000800080018002400C20010001007FFC00003EF802083E0820083E080000 +C196:000000800080018002400C20010001007FFC00003EF802883E8820883EF80000 +C197:000000800080018002400C20010001007FFC00003E8802883EF820883EF80000 +C198:000000800080018002400C20010001007FFC00003E1002103E1020283EC40000 +C199:000000800080018002400C20010001007FFC00003EF802803EF820803EF80000 +C19A:000000800080018002400C20010001007FFC00003EFC02483E4820483EFC0000 +C19B:000000800080018002400C20010001007FFC00003E2003FC3E7020883E700000 +C19C:000000800080018002400C20010001007FFC00001FF01010101010101FF00000 +C19D:000000800080018002400C20010001007FFC0000101010101FF010101FF00000 +C19E:000000800080018002400C20010001007FFC0000222022203E2022503E880000 +C19F:000000800080018002400C20010001007FFC000000000100010002800C400000 +C1A0:000000800080018002400C20010001007FFC00000000024002400DA033100000 +C1A1:000000800080018002400C20010001007FFC0000000007C00820082007C00000 +C1A2:000000800080018002400C20010001007FFC0000000007E00080014006200000 +C1A3:000000800080018002400C20010001007FFC0000008007E00080014006200000 +C1A4:000000800080018002400C20010001007FFC00001FF000101FF0001000100000 +C1A5:000000800080018002400C20010001007FFC00001FF010001FF010001FF00000 +C1A6:000000800080018002400C20010001007FFC000000001FF0044004401FF00000 +C1A7:000000800080018002400C20010001007FFC000001001FF007C0082007C00000 +C1A8:00000010001002100210041004100A1E11106090041004107FD0001000100000 +C1A9:0000020802080608090E3088040804087FE8000007F800080008000800080000 +C1AA:0000020802080608090E3088040804087FE8000000003EF80208020802080000 +C1AB:0000020802080608090E3088040804087FE8000000001F080108011401620000 +C1AC:0000020802080608090E3088040804087FE8000008000800080008000FF80000 +C1AD:0000020802080608090E3088040804087FE80000000010F8101010301ECC0000 +C1AE:0000020802080608090E3088040804087FE800000808087F081C08220F9C0000 +C1AF:0000020802080608090E3088040804087FE8000003F802000200020003F80000 +C1B0:0000020802080608090E3088040804087FE8000007F8000807F8040007F80000 +C1B1:0000020802080608090E3088040804087FE800003EF802083E0820083E080000 +C1B2:0000020802080608090E3088040804087FE800003EF802883E8820883EF80000 +C1B3:0000020802080608090E3088040804087FE800003E8802883EF820883EF80000 +C1B4:0000020802080608090E3088040804087FE800001F0801081F0810141F620000 +C1B5:0000020802080608090E3088040804087FE800003EF802803EF820803EF80000 +C1B6:0000020802080608090E3088040804087FE800003EFC02483E4820483EFC0000 +C1B7:0000020802080608090E3088040804087FE800001F08017F1F1C10221F1C0000 +C1B8:0000020802080608090E3088040804087FE8000003F802080208020803F80000 +C1B9:0000020802080608090E3088040804087FE800000208020803F8020803F80000 +C1BA:0000020802080608090E3088040804087FE80000110811081F0811141F620000 +C1BB:0000020802080608090E3088040804087FE80000001000100010006801840000 +C1BC:0000020802080608090E3088040804087FE800000048004800A8011406620000 +C1BD:0000020802080608090E3088040804087FE80000000003F00408040803F00000 +C1BE:0000020802080608090E3088040804087FE8000003F80020002000D003080000 +C1BF:0000020802080608090E3088040804087FE80000004003F8004000A003180000 +C1C0:0000020802080608090E3088040804087FE8000003F8000803F8000800080000 +C1C1:0000020802080608090E3088040804087FE8000003F8020003F8020003F80000 +C1C2:0000020802080608090E3088040804087FE8000000000FF8022002200FF80000 +C1C3:0000020802080608090E3088040804087FE8000000800FF803E0041003E00000 +C1C4:00000012001202120212041204120A1E11126092041204127FD2001200120000 +C1C5:0000022802280628093830A8042804287FA8000007F800080008000800080000 +C1C6:0000022802280628093830A8042804287FA8000000003EF80208020802080000 +C1C7:0000022802280628093830A8042804287FA8000000001F080108011401620000 +C1C8:0000022802280628093830A8042804287FA8000008000800080008000FF80000 +C1C9:0000022802280628093830A8042804287FA80000000010F8101010301ECC0000 +C1CA:0000022802280628093830A8042804287FA800000808087F081C08220F9C0000 +C1CB:0000022802280628093830A8042804287FA8000003F802000200020003F80000 +C1CC:0000022802280628093830A8042804287FA8000007F8000807F8040007F80000 +C1CD:0000022802280628093830A8042804287FA800003EF802083E0820083E080000 +C1CE:0000022802280628093830A8042804287FA800003EF802883E8820883EF80000 +C1CF:0000022802280628093830A8042804287FA800003E8802883EF820883EF80000 +C1D0:0000022802280628093830A8042804287FA800001F0801081F0810141F620000 +C1D1:0000022802280628093830A8042804287FA800003EF802803EF820803EF80000 +C1D2:0000022802280628093830A8042804287FA800003EFC02483E4820483EFC0000 +C1D3:0000022802280628093830A8042804287FA800001F08017F1F1C10221F1C0000 +C1D4:0000022802280628093830A8042804287FA8000003F802080208020803F80000 +C1D5:0000022802280628093830A8042804287FA800000208020803F8020803F80000 +C1D6:0000022802280628093830A8042804287FA80000110811081F0811141F620000 +C1D7:0000022802280628093830A8042804287FA80000001000100010006801840000 +C1D8:0000022802280628093830A8042804287FA800000048004800A8011406620000 +C1D9:0000022802280628093830A8042804287FA80000000003F00408040803F00000 +C1DA:0000022802280628093830A8042804287FA8000003F80020002000D003080000 +C1DB:0000022802280628093830A8042804287FA80000004003F8004000A003180000 +C1DC:0000022802280628093830A8042804287FA8000003F8000803F8000800080000 +C1DD:0000022802280628093830A8042804287FA8000003F8020003F8020003F80000 +C1DE:0000022802280628093830A8042804287FA8000000000FF8022002200FF80000 +C1DF:0000022802280628093830A8042804287FA8000000800FF803E0041003E00000 +C1E0:00000008000802080208040804080A0811086088040804087FE8000800080000 +C1E1:000002080208060809083088040804087FE8000007F800080008000800080000 +C1E2:000002080208060809083088040804087FE8000000003EF80208020802080000 +C1E3:000002080208060809083088040804087FE8000000001F080108011401620000 +C1E4:000002080208060809083088040804087FE8000008000800080008000FF80000 +C1E5:000002080208060809083088040804087FE80000000010F8101010301ECC0000 +C1E6:000002080208060809083088040804087FE800000808087F081C08220F9C0000 +C1E7:000002080208060809083088040804087FE8000003F802000200020003F80000 +C1E8:000002080208060809083088040804087FE8000007F8000807F8040007F80000 +C1E9:000002080208060809083088040804087FE800003EF802083E0820083E080000 +C1EA:000002080208060809083088040804087FE800003EF802883E8820883EF80000 +C1EB:000002080208060809083088040804087FE800003E8802883EF820883EF80000 +C1EC:000002080208060809083088040804087FE800001F0801081F0810141F620000 +C1ED:000002080208060809083088040804087FE800003EF802803EF820803EF80000 +C1EE:000002080208060809083088040804087FE800003EFC02483E4820483EFC0000 +C1EF:000002080208060809083088040804087FE800001F08017F1F1C10221F1C0000 +C1F0:000002080208060809083088040804087FE8000003F802080208020803F80000 +C1F1:000002080208060809083088040804087FE800000208020803F8020803F80000 +C1F2:000002080208060809083088040804087FE80000110811081F0811141F620000 +C1F3:000002080208060809083088040804087FE80000001000100010006801840000 +C1F4:000002080208060809083088040804087FE800000048004800A8011406620000 +C1F5:000002080208060809083088040804087FE80000000003F00408040803F00000 +C1F6:000002080208060809083088040804087FE8000003F80020002000D003080000 +C1F7:000002080208060809083088040804087FE80000004003F8004000A003180000 +C1F8:000002080208060809083088040804087FE8000003F8000803F8000800080000 +C1F9:000002080208060809083088040804087FE8000003F8020003F8020003F80000 +C1FA:000002080208060809083088040804087FE8000000000FF8022002200FF80000 +C1FB:000002080208060809083088040804087FE8000000800FF803E0041003E00000 +C1FC:00000000008000800100010002800440182004400440044004407FFC00000000 +C1FD:000000800080018002400C20044004407FFC00001FF000100010001000100000 +C1FE:000000800080018002400C20044004407FFC000000003EF80208020802080000 +C1FF:000000800080018002400C20044004407FFC000000001E100210022802C40000 +C200:000000800080018002400C20044004407FFC000000001000100010001FF00000 +C201:000000800080018002400C20044004407FFC0000000020F8201020303ECC0000 +C202:000000800080018002400C20044004407FFC0000202021FC207020883E700000 +C203:000000800080018002400C20044004407FFC00001FF01000100010001FF00000 +C204:000000800080018002400C20044004407FFC00001FF000101FF010001FF00000 +C205:000000800080018002400C20044004407FFC00003EF802083E0820083E080000 +C206:000000800080018002400C20044004407FFC00003EF802883E8820883EF80000 +C207:000000800080018002400C20044004407FFC00003E8802883EF820883EF80000 +C208:000000800080018002400C20044004407FFC00003E1002103E1020283EC40000 +C209:000000800080018002400C20044004407FFC00003EF802803EF820803EF80000 +C20A:000000800080018002400C20044004407FFC00003EFC02483E4820483EFC0000 +C20B:000000800080018002400C20044004407FFC00003E2003FC3E7020883E700000 +C20C:000000800080018002400C20044004407FFC00001FF01010101010101FF00000 +C20D:000000800080018002400C20044004407FFC0000101010101FF010101FF00000 +C20E:000000800080018002400C20044004407FFC0000222022203E2022503E880000 +C20F:000000800080018002400C20044004407FFC000000000100010002800C400000 +C210:000000800080018002400C20044004407FFC00000000024002400DA033100000 +C211:000000800080018002400C20044004407FFC0000000007C00820082007C00000 +C212:000000800080018002400C20044004407FFC0000000007E00080014006200000 +C213:000000800080018002400C20044004407FFC0000008007E00080014006200000 +C214:000000800080018002400C20044004407FFC00001FF000101FF0001000100000 +C215:000000800080018002400C20044004407FFC00001FF010001FF010001FF00000 +C216:000000800080018002400C20044004407FFC000000001FF0044004401FF00000 +C217:000000800080018002400C20044004407FFC000001001FF007C0082007C00000 +C218:00000000008000800100010002800440182000003FF801000100010001000000 +C219:000000800080018002400C2000007FFC010001001FF000100010001000100000 +C21A:000000800080018002400C2000007FFC0100010000003EF80208020802080000 +C21B:000000800080018002400C2000007FFC0100010000001E100210022802C40000 +C21C:000000800080018002400C20000000007FFC010001001100100010001FF00000 +C21D:000000800080018002400C2000007FFC01000100000020F8201020303ECC0000 +C21E:000000800080018002400C2000007FFC01000100202021FC207020883E700000 +C21F:000000800080018002400C2000007FFC010001001FF01000100010001FF00000 +C220:000000800080018002400C2000007FFC010001001FF000101FF010001FF00000 +C221:000000800080018002400C2000007FFC010001003EF802083E0820083E080000 +C222:000000800080018002400C2000007FFC010001003EF802883E8820883EF80000 +C223:000000800080018002400C2000007FFC010001003E8802883EF820883EF80000 +C224:000000800080018002400C2000007FFC010001003E1002103E1020283EC40000 +C225:000000800080018002400C2000007FFC010001003EF802803EF820803EF80000 +C226:000000800080018002400C2000007FFC010001003EFC02483E4820483EFC0000 +C227:000000800080018002400C2000007FFC010001003E2003FC3E7020883E700000 +C228:000000800080018002400C2000007FFC010001001FF01010101010101FF00000 +C229:000000800080018002400C2000007FFC01000100101010101FF010101FF00000 +C22A:000000800080018002400C2000007FFC01000100222022203E2022503E880000 +C22B:000000800080018002400C2000007FFC0100010000000100010002800C400000 +C22C:000000800080018002400C2000007FFC010001000000024002400DA033100000 +C22D:000000800080018002400C2000007FFC01000100000007C00820082007C00000 +C22E:000000800080018002400C2000007FFC01000100000007E00080014006200000 +C22F:000000800080018002400C2000007FFC01000100008007E00080014006200000 +C230:000000800080018002400C2000007FFC010001001FF000101FF0001000100000 +C231:000000800080018002400C2000007FFC010001001FF010001FF010001FF00000 +C232:000000800080018002400C2000007FFC0100010000001FF0044004401FF00000 +C233:000000800080018002400C2000007FFC0100010001001FF007C0082007C00000 +C234:0000000802080208040804080A081108608800087FE8040804F8040804080000 +C235:0208020806080908308800087FE8027802080000000007F80008000800080000 +C236:0208020806080908308800087FE802780208000000003EF80208020802080000 +C237:0208020806080908308800087FE802780208000000001F080108011401620000 +C238:02080208060809083088000800087FE80278020802081000100010001FF80000 +C239:0208020806080908308800087FE8027802080000000020F8201020303ECC0000 +C23A:0208020806080908308800087FE8027802080000202021FC207020883E700000 +C23B:0208020806080908308800087FE802780208000003F802000200020003F80000 +C23C:0208020806080908308800087FE802780208000007F8000807F8040007F80000 +C23D:0208020806080908308800087FE80278020800003EF802083E0820083E080000 +C23E:0208020806080908308800087FE80278020800003EF802883E8820883EF80000 +C23F:0208020806080908308800087FE80278020800003E8802883EF820883EF80000 +C240:0208020806080908308800087FE80278020800000F8800880F8808140FA20000 +C241:0208020806080908308800087FE80278020800003EF802803EF820803EF80000 +C242:0208020806080908308800087FE80278020800003EFC02483E4820483EFC0000 +C243:0208020806080908308800087FE80278020800003E1002FE3E3820443E380000 +C244:0208020806080908308800087FE802780208000003F802080208020803F80000 +C245:0208020806080908308800087FE80278020800000208020803F8020803F80000 +C246:0208020806080908308800087FE8027802080000210821083F0821143F620000 +C247:0208020806080908308800087FE8027802080000001000100010006801840000 +C248:0208020806080908308800087FE80278020800000048004800A8011406620000 +C249:0208020806080908308800087FE8027802080000000003F00408040803F00000 +C24A:0208020806080908308800087FE802780208000003F80020002000D003080000 +C24B:0208020806080908308800087FE8027802080000004003F8004000A003180000 +C24C:0208020806080908308800087FE802780208000003F8000803F8000800080000 +C24D:0208020806080908308800087FE802780208000003F8020003F8020003F80000 +C24E:0208020806080908308800087FE802780208000000000FF8022002200FF80000 +C24F:0208020806080908308800087FE802780208000000800FF803E0041003E00000 +C250:0000000A020A020A040A040A0A0A110A608A000A7FEA040A047A040A040A0000 +C251:022802280628092830A800287FA805E804280000000007F80008000800080000 +C252:022802280628092830A800287FA805E80428000000003EF80208020802080000 +C253:022802280628092830A800287FA805E80428000000001F080108011401620000 +C254:022802280628092830A8002800287FA8042805E804281428100010001FF80000 +C255:022802280628092830A800287FA805E804280000000020F8201020303ECC0000 +C256:022802280628092830A800287FA805E804280000202021FC207020883E700000 +C257:022802280628092830A800287FA805E80428000003F802000200020003F80000 +C258:022802280628092830A800287FA805E80428000007F8000807F8040007F80000 +C259:022802280628092830A800287FA805E8042800003EF802083E0820083E080000 +C25A:022802280628092830A800287FA805E8042800003EF802883E8820883EF80000 +C25B:022802280628092830A800287FA805E8042800003E8802883EF820883EF80000 +C25C:022802280628092830A800287FA805E8042800000F8800880F8808140FA20000 +C25D:022802280628092830A800287FA805E8042800003EF802803EF820803EF80000 +C25E:022802280628092830A800287FA805E8042800003EFC02483E4820483EFC0000 +C25F:022802280628092830A800287FA805E8042800003E1002FE3E3820443E380000 +C260:022802280628092830A800287FA805E80428000003F802080208020803F80000 +C261:022802280628092830A800287FA805E8042800000208020803F8020803F80000 +C262:022802280628092830A800287FA805E804280000210821083F0821143F620000 +C263:022802280628092830A800287FA805E804280000001000100010006801840000 +C264:022802280628092830A800287FA805E8042800000048004800A8011406620000 +C265:022802280628092830A800287FA805E804280000000003F00408040803F00000 +C266:022802280628092830A800287FA805E80428000003F80020002000D003080000 +C267:022802280628092830A800287FA805E804280000004003F8004000A003180000 +C268:022802280628092830A800287FA805E80428000003F8000803F8000800080000 +C269:022802280628092830A800287FA805E80428000003F8020003F8020003F80000 +C26A:022802280628092830A800287FA805E80428000000000FF8022002200FF80000 +C26B:022802280628092830A800287FA805E80428000000800FF803E0041003E00000 +C26C:0000000802080208040804080A081108608800087FE804080408040804080000 +C26D:0208020806080908308800087FE8020802000000000007F80008000800080000 +C26E:0208020806080908308800087FE802080200000000003EF80208020802080000 +C26F:0208020806080908308800087FE802080200000000001F080108011401620000 +C270:02080208060809083088000800087FE80208020802081008100010001FF80000 +C271:0208020806080908308800087FE8020802000000000020F8201020303ECC0000 +C272:0208020806080908308800087FE8020802000000202021FC207020883E700000 +C273:0208020806080908308800087FE802080200000003F802000200020003F80000 +C274:0208020806080908308800087FE802080200000007F8000807F8040007F80000 +C275:0208020806080908308800087FE80208020000003EF802083E0820083E080000 +C276:0208020806080908308800087FE80208020000003EF802883E8820883EF80000 +C277:0208020806080908308800087FE80208020000003E8802883EF820883EF80000 +C278:0208020806080908308800087FE80208020000000F8800880F8808140FA20000 +C279:0208020806080908308800087FE80208020000003EF802803EF820803EF80000 +C27A:0208020806080908308800087FE80208020000003EFC02483E4820483EFC0000 +C27B:0208020806080908308800087FE80208020000003E1002FE3E3820443E380000 +C27C:0208020806080908308800087FE802080200000003F802080208020803F80000 +C27D:0208020806080908308800087FE80208020000000208020803F8020803F80000 +C27E:0208020806080908308800087FE8020802000000210821083F0821143F620000 +C27F:0208020806080908308800087FE8020802000000001000100010006801840000 +C280:0208020806080908308800087FE80208020000000048004800A8011406620000 +C281:0208020806080908308800087FE8020802000000000003F00408040803F00000 +C282:0208020806080908308800087FE802080200000003F80020002000D003080000 +C283:0208020806080908308800087FE8020802000000004003F8004000A003180000 +C284:0208020806080908308800087FE802080200000003F8000803F8000800080000 +C285:0208020806080908308800087FE802080200000003F8020003F8020003F80000 +C286:0208020806080908308800087FE802080200000000000FF8022002200FF80000 +C287:0208020806080908308800087FE802080200000000800FF803E0041003E00000 +C288:00000000008000800100010002800440182000007FFC04400440044004400000 +C289:000000800080018002400C2000007FFC044004401FF000100010001000100000 +C28A:000000800080018002400C2000007FFC0440044000003EF80208020802080000 +C28B:000000800080018002400C2000007FFC0440044000001E100210022802C40000 +C28C:000000800080018002400C20000000007FFC044004401440100010001FF00000 +C28D:000000800080018002400C2000007FFC04400440000020F8201020303ECC0000 +C28E:000000800080018002400C2000007FFC04400440202021FC207020883E700000 +C28F:000000800080018002400C2000007FFC044004401FF01000100010001FF00000 +C290:000000800080018002400C2000007FFC044004401FF000101FF010001FF00000 +C291:000000800080018002400C2000007FFC044004403EF802083E0820083E080000 +C292:000000800080018002400C2000007FFC044004403EF802883E8820883EF80000 +C293:000000800080018002400C2000007FFC044004403E8802883EF820883EF80000 +C294:000000800080018002400C2000007FFC044004403E1002103E1020283EC40000 +C295:000000800080018002400C2000007FFC044004403EF802803EF820803EF80000 +C296:000000800080018002400C2000007FFC044004403EFC02483E4820483EFC0000 +C297:000000800080018002400C2000007FFC044004403E2003FC3E7020883E700000 +C298:000000800080018002400C2000007FFC044004401FF01010101010101FF00000 +C299:000000800080018002400C2000007FFC04400440101010101FF010101FF00000 +C29A:000000800080018002400C2000007FFC04400440222022203E2022503E880000 +C29B:000000800080018002400C2000007FFC0440044000000100010002800C400000 +C29C:000000800080018002400C2000007FFC044004400000024002400DA033100000 +C29D:000000800080018002400C2000007FFC04400440000007C00820082007C00000 +C29E:000000800080018002400C2000007FFC04400440000007E00080014006200000 +C29F:000000800080018002400C2000007FFC04400440008007E00080014006200000 +C2A0:000000800080018002400C2000007FFC044004401FF000101FF0001000100000 +C2A1:000000800080018002400C2000007FFC044004401FF010001FF010001FF00000 +C2A2:000000800080018002400C2000007FFC0440044000001FF0044004401FF00000 +C2A3:000000800080018002400C2000007FFC0440044001001FF007C0082007C00000 +C2A4:000000000080008001000100028004401820000000007FFC0000000000000000 +C2A5:000000800080018002400C20000000007FFC00001FF000100010001000100000 +C2A6:000000800080018002400C20000000007FFC000000003EF80208020802080000 +C2A7:000000800080018002400C20000000007FFC000000001E100210022802C40000 +C2A8:000000800080018002400C20000000007FFC000000001000100010001FF00000 +C2A9:000000800080018002400C20000000007FFC0000000020F8201020303ECC0000 +C2AA:000000800080018002400C20000000007FFC0000202021FC207020883E700000 +C2AB:000000800080018002400C20000000007FFC00001FF01000100010001FF00000 +C2AC:000000800080018002400C20000000007FFC00001FF000101FF010001FF00000 +C2AD:000000800080018002400C20000000007FFC00003EF802083E0820083E080000 +C2AE:000000800080018002400C20000000007FFC00003EF802883E8820883EF80000 +C2AF:000000800080018002400C20000000007FFC00003E8802883EF820883EF80000 +C2B0:000000800080018002400C20000000007FFC00003E1002103E1020283EC40000 +C2B1:000000800080018002400C20000000007FFC00003EF802803EF820803EF80000 +C2B2:000000800080018002400C20000000007FFC00003EFC02483E4820483EFC0000 +C2B3:000000800080018002400C20000000007FFC00003E2003FC3E7020883E700000 +C2B4:000000800080018002400C20000000007FFC00001FF01010101010101FF00000 +C2B5:000000800080018002400C20000000007FFC0000101010101FF010101FF00000 +C2B6:000000800080018002400C20000000007FFC0000222022203E2022503E880000 +C2B7:000000800080018002400C20000000007FFC000000000100010002800C400000 +C2B8:000000800080018002400C20000000007FFC00000000024002400DA033100000 +C2B9:000000800080018002400C20000000007FFC0000000007C00820082007C00000 +C2BA:000000800080018002400C20000000007FFC0000000007E00080014006200000 +C2BB:000000800080018002400C20000000007FFC0000008007E00080014006200000 +C2BC:000000800080018002400C20000000007FFC00001FF000101FF0001000100000 +C2BD:000000800080018002400C20000000007FFC00001FF010001FF010001FF00000 +C2BE:000000800080018002400C20000000007FFC000000001FF0044004401FF00000 +C2BF:000000800080018002400C20000000007FFC000001001FF007C0082007C00000 +C2C0:00000008000802080208040804080A081108608800087FE80008000800080000 +C2C1:000002080208060809083088000800087FE8000007F800080008000800080000 +C2C2:000002080208060809083088000800087FE8000000003EF80208020802080000 +C2C3:000002080208060809083088000800087FE8000000001F080108011401620000 +C2C4:000002080208060809083088000800087FE8000008000800080008000FF80000 +C2C5:000002080208060809083088000800087FE80000000010F8101010301ECC0000 +C2C6:000002080208060809083088000800087FE800000808087F081C08220F9C0000 +C2C7:000002080208060809083088000800087FE8000003F802000200020003F80000 +C2C8:000002080208060809083088000800087FE8000007F8000807F8040007F80000 +C2C9:000002080208060809083088000800087FE800003EF802083E0820083E080000 +C2CA:000002080208060809083088000800087FE800003EF802883E8820883EF80000 +C2CB:000002080208060809083088000800087FE800003E8802883EF820883EF80000 +C2CC:000002080208060809083088000800087FE800001F0801081F0810141F620000 +C2CD:000002080208060809083088000800087FE800003EF802803EF820803EF80000 +C2CE:000002080208060809083088000800087FE800003EFC02483E4820483EFC0000 +C2CF:000002080208060809083088000800087FE800001F08017F1F1C10221F1C0000 +C2D0:000002080208060809083088000800087FE8000003F802080208020803F80000 +C2D1:000002080208060809083088000800087FE800000208020803F8020803F80000 +C2D2:000002080208060809083088000800087FE80000110811081F0811141F620000 +C2D3:000002080208060809083088000800087FE80000001000100010006801840000 +C2D4:000002080208060809083088000800087FE800000048004800A8011406620000 +C2D5:000002080208060809083088000800087FE80000000003F00408040803F00000 +C2D6:000002080208060809083088000800087FE8000003F80020002000D003080000 +C2D7:000002080208060809083088000800087FE80000004003F8004000A003180000 +C2D8:000002080208060809083088000800087FE8000003F8000803F8000800080000 +C2D9:000002080208060809083088000800087FE8000003F8020003F8020003F80000 +C2DA:000002080208060809083088000800087FE8000000000FF8022002200FF80000 +C2DB:000002080208060809083088000800087FE8000000800FF803E0041003E00000 +C2DC:000000000008000802080208040804080A081108608800080008000800080000 +C2DD:000000080008040804080C081208610800080000000007F80008000800080000 +C2DE:000000080008040804080C08120861080008000000003EF80208020802080000 +C2DF:000000080008040804080C08120861080008000000001F080108011401620000 +C2E0:000000080008040804080C08120861080008000800001000100010001FF80000 +C2E1:000000080008040804080C081208610800080000000020F8201020303ECC0000 +C2E2:000000080008040804080C081208610800080000202021FC207020883E700000 +C2E3:000000080008040804080C08120861080008000003F802000200020003F80000 +C2E4:000000080008040804080C08120861080008000007F8000807F8040007F80000 +C2E5:000000080008040804080C0812086108000800003EF802083E0820083E080000 +C2E6:000000080008040804080C0812086108000800003EF802883E8820883EF80000 +C2E7:000000080008040804080C0812086108000800003E8802883EF820883EF80000 +C2E8:000000080008040804080C0812086108000800000F8800880F8808140FA20000 +C2E9:000000080008040804080C0812086108000800003EF802803EF820803EF80000 +C2EA:000000080008040804080C0812086108000800003EFC02483E4820483EFC0000 +C2EB:000000080008040804080C0812086108000800003E1002FE3E3820443E380000 +C2EC:000000080008040804080C08120861080008000003F802080208020803F80000 +C2ED:000000080008040804080C0812086108000800000208020803F8020803F80000 +C2EE:000000080008040804080C081208610800080000210821083F0821143F620000 +C2EF:000000080008040804080C081208610800080000001000100010006801840000 +C2F0:000000080008040804080C0812086108000800000048004800A8011406620000 +C2F1:000000080008040804080C081208610800080000000003F00408040803F00000 +C2F2:000000080008040804080C08120861080008000003F80020002000D003080000 +C2F3:000000080008040804080C081208610800080000004003F8004000A003180000 +C2F4:000000080008040804080C08120861080008000003F8000803F8000800080000 +C2F5:000000080008040804080C08120861080008000003F8020003F8020003F80000 +C2F6:000000080008040804080C08120861080008000000000FF8022002200FF80000 +C2F7:000000080008040804080C08120861080008000000800FF803E0041003E00000 +C2F8:0000000000100010089008900890191E15102290CC5000100010001000100000 +C2F9:00000008000812081208340E2A0849080008000007F800080008000800080000 +C2FA:00000008000812081208340E2A0849080008000000003EF80208020802080000 +C2FB:00000008000812081208340E2A0849080008000000001F080108011401620000 +C2FC:00000008000812081208340E2A0849080008000808000800080008000FF80000 +C2FD:00000008000812081208340E2A08490800080000000010F8101010301ECC0000 +C2FE:00000008000812081208340E2A084908000800000808087F081C08220F9C0000 +C2FF:00000008000812081208340E2A0849080008000003F802000200020003F80000 +C300:00000008000812081208340E2A0849080008000007F8000807F8040007F80000 +C301:00000008000812081208340E2A084908000800003EF802083E0820083E080000 +C302:00000008000812081208340E2A084908000800003EF802883E8820883EF80000 +C303:00000008000812081208340E2A084908000800003E8802883EF820883EF80000 +C304:00000008000812081208340E2A084908000800001F0801081F0810141F620000 +C305:00000008000812081208340E2A084908000800003EF802803EF820803EF80000 +C306:00000008000812081208340E2A084908000800003EFC02483E4820483EFC0000 +C307:00000008000812081208340E2A084908000800001F08017F1F1C10221F1C0000 +C308:00000008000812081208340E2A0849080008000003F802080208020803F80000 +C309:00000008000812081208340E2A084908000800000208020803F8020803F80000 +C30A:00000008000812081208340E2A08490800080000110811081F0811141F620000 +C30B:00000008000812081208340E2A08490800080000001000100010006801840000 +C30C:00000008000812081208340E2A084908000800000048004800A8011406620000 +C30D:00000008000812081208340E2A08490800080000000003F00408040803F00000 +C30E:00000008000812081208340E2A0849080008000003F80020002000D003080000 +C30F:00000008000812081208340E2A08490800080000004003F8004000A003180000 +C310:00000008000812081208340E2A0849080008000003F8000803F8000800080000 +C311:00000008000812081208340E2A0849080008000003F8020003F8020003F80000 +C312:00000008000812081208340E2A0849080008000000000FF8022002200FF80000 +C313:00000008000812081208340E2A0849080008000000800FF803E0041003E00000 +C314:0000000000120012089208920892191E15122292CC5200120012001200120000 +C315:0000002800281228122834382A2849280028000007F800080008000800080000 +C316:0000002800281228122834382A2849280028000000003EF80208020802080000 +C317:0000002800281228122834382A2849280028000000003E100210022802C40000 +C318:0000002800281228122834382A2849280028002808000800080008000FF80000 +C319:0000002800281228122834382A28492800280000000020F8201020303ECC0000 +C31A:0000002800281228122834382A28492800280000202021FC207020883E700000 +C31B:0000002800281228122834382A2849280028000003F802000200020003F80000 +C31C:0000002800281228122834382A2849280028000007F8000807F8040007F80000 +C31D:0000002800281228122834382A284928002800003EF802083E0820083E080000 +C31E:0000002800281228122834382A284928002800003EF802883E8820883EF80000 +C31F:0000002800281228122834382A284928002800003E8802883EF820883EF80000 +C320:0000002800281228122834382A284928002800001F0801081F0810141F620000 +C321:0000002800281228122834382A284928002800003EF802803EF820803EF80000 +C322:0000002800281228122834382A284928002800003EFC02483E4820483EFC0000 +C323:0000002800281228122834382A284928002800003E1002FE3E3820443E380000 +C324:0000002800281228122834382A2849280028000003F802080208020803F80000 +C325:0000002800281228122834382A284928002800000208020803F8020803F80000 +C326:0000002800281228122834382A28492800280000110811081F0811141F620000 +C327:0000002800281228122834382A28492800280000000800080008003400C20000 +C328:0000002800281228122834382A284928002800000048004800A8011406620000 +C329:0000002800281228122834382A28492800280000000001F00208020801F00000 +C32A:0000002800281228122834382A2849280028000003F80020002000D003080000 +C32B:0000002800281228122834382A28492800280000004003F8004000A003180000 +C32C:0000002800281228122834382A2849280028000003F8000803F8000800080000 +C32D:0000002800281228122834382A2849280028000003F8020003F8020003F80000 +C32E:0000002800281228122834382A2849280028000000000FF8022002200FF80000 +C32F:0000002800281228122834382A2849280028000000800FF803E0041003E00000 +C330:000000000010001008900890089E19101510229ECC5000100010001000100000 +C331:0000000800081208120E34082A0E49080008000007F800080008000800080000 +C332:0000000800081208120E34082A0E49080008000000003EF80208020802080000 +C333:0000000800081208120E34082A0E49080008000000001F080108011401620000 +C334:0000000800081208120E34082A0E49080008000008000800080008000FF80000 +C335:0000000800081208120E34082A0E490800080000000010F8101010301ECC0000 +C336:0000000800081208120E34082A0E4908000800000808087F081C08220F9C0000 +C337:0000000800081208120E34082A0E49080008000003F802000200020003F80000 +C338:0000000800081208120E34082A0E49080008000007F8000807F8040007F80000 +C339:0000000800081208120E34082A0E4908000800003EF802083E0820083E080000 +C33A:0000000800081208120E34082A0E4908000800003EF802883E8820883EF80000 +C33B:0000000800081208120E34082A0E4908000800003E8802883EF820883EF80000 +C33C:0000000800081208120E34082A0E4908000800001F0801081F0810141F620000 +C33D:0000000800081208120E34082A0E4908000800003EF802803EF820803EF80000 +C33E:0000000800081208120E34082A0E4908000800003EFC02483E4820483EFC0000 +C33F:0000000800081208120E34082A0E4908000800001F08017F1F1C10221F1C0000 +C340:0000000800081208120E34082A0E49080008000003F802080208020803F80000 +C341:0000000800081208120E34082A0E4908000800000208020803F8020803F80000 +C342:0000000800081208120E34082A0E490800080000110811081F0811141F620000 +C343:0000000800081208120E34082A0E490800080000001000100010006801840000 +C344:0000000800081208120E34082A0E4908000800000048004800A8011406620000 +C345:0000000800081208120E34082A0E490800080000000003F00408040803F00000 +C346:0000000800081208120E34082A0E49080008000003F80020002000D003080000 +C347:0000000800081208120E34082A0E490800080000004003F8004000A003180000 +C348:0000000800081208120E34082A0E49080008000003F8000803F8000800080000 +C349:0000000800081208120E34082A0E49080008000003F8020003F8020003F80000 +C34A:0000000800081208120E34082A0E49080008000000000FF8022002200FF80000 +C34B:0000000800081208120E34082A0E49080008000000800FF803E0041003E00000 +C34C:000000000012001208920892089E19121512229ECC5200120012001200120000 +C34D:0000002800281228123834282A3849280028000007F800080008000800080000 +C34E:0000002800281228123834282A3849280028000000003EF80208020802080000 +C34F:0000002800281228123834282A3849280028000000003E100210022802C40000 +C350:0000002800281228123834282A3849280028002808000800080008000FF80000 +C351:0000002800281228123834282A38492800280000000020F8201020303ECC0000 +C352:0000002800281228123834282A38492800280000202021FC207020883E700000 +C353:0000002800281228123834282A3849280028000003F802000200020003F80000 +C354:0000002800281228123834282A3849280028000007F8000807F8040007F80000 +C355:0000002800281228123834282A384928002800003EF802083E0820083E080000 +C356:0000002800281228123834282A384928002800003EF802883E8820883EF80000 +C357:0000002800281228123834282A384928002800003E8802883EF820883EF80000 +C358:0000002800281228123834282A384928002800001F0801081F0810141F620000 +C359:0000002800281228123834282A384928002800003EF802803EF820803EF80000 +C35A:0000002800281228123834282A384928002800003EFC02483E4820483EFC0000 +C35B:0000002800281228123834282A384928002800003E1002FE3E3820443E380000 +C35C:0000002800281228123834282A3849280028000003F802080208020803F80000 +C35D:0000002800281228123834282A384928002800000208020803F8020803F80000 +C35E:0000002800281228123834282A38492800280000110811081F0811141F620000 +C35F:0000002800281228123834282A38492800280000000800080008003400C20000 +C360:0000002800281228123834282A384928002800000048004800A8011406620000 +C361:0000002800281228123834282A38492800280000000001F00208020801F00000 +C362:0000002800281228123834282A3849280028000003F80020002000D003080000 +C363:0000002800281228123834282A38492800280000004003F8004000A003180000 +C364:0000002800281228123834282A3849280028000003F8000803F8000800080000 +C365:0000002800281228123834282A3849280028000003F8020003F8020003F80000 +C366:0000002800281228123834282A3849280028000000000FF8022002200FF80000 +C367:0000002800281228123834282A3849280028000000800FF803E0041003E00000 +C368:0000000000020002088208820882191E15022282CC4200020002000200020000 +C369:0000000800081208120834382A08490800080000000007F80008000800080000 +C36A:0000000800081208120834382A0849080008000000003EF80208020802080000 +C36B:0000000800081208120834382A0849080008000000001F080108011401620000 +C36C:0000000800081208120834382A0849080008000000001000100010001FF80000 +C36D:0000000800081208120834382A08490800080000000020F8201020303ECC0000 +C36E:0000000800081208120834382A08490800080000202021FC207020883E700000 +C36F:0000000800081208120834382A0849080008000003F802000200020003F80000 +C370:0000000800081208120834382A0849080008000007F8000807F8040007F80000 +C371:0000000800081208120834382A084908000800003EF802083E0820083E080000 +C372:0000000800081208120834382A084908000800003EF802883E8820883EF80000 +C373:0000000800081208120834382A084908000800003E8802883EF820883EF80000 +C374:0000000800081208120834382A084908000800000F8800880F8808140FA20000 +C375:0000000800081208120834382A084908000800003EF802803EF820803EF80000 +C376:0000000800081208120834382A084908000800003EFC02483E4820483EFC0000 +C377:0000000800081208120834382A084908000800003E1002FE3E3820443E380000 +C378:0000000800081208120834382A0849080008000003F802080208020803F80000 +C379:0000000800081208120834382A084908000800000208020803F8020803F80000 +C37A:0000000800081208120834382A08490800080000210821083F0821143F620000 +C37B:0000000800081208120834382A08490800080000001000100010006801840000 +C37C:0000000800081208120834382A084908000800000048004800A8011406620000 +C37D:0000000800081208120834382A08490800080000000003F00408040803F00000 +C37E:0000000800081208120834382A0849080008000003F80020002000D003080000 +C37F:0000000800081208120834382A08490800080000004003F8004000A003180000 +C380:0000000800081208120834382A0849080008000003F8000803F8000800080000 +C381:0000000800081208120834382A0849080008000003F8020003F8020003F80000 +C382:0000000800081208120834382A0849080008000000000FF8022002200FF80000 +C383:0000000800081208120834382A0849080008000000800FF803E0041003E00000 +C384:00000000000A000A088A088A088A193A150A228ACC4A000A000A000A000A0000 +C385:0000002800281228122834E82A2849280028000007F800080008000800080000 +C386:0000002800281228122834E82A2849280028000000003EF80208020802080000 +C387:0000002800281228122834E82A2849280028000000003E100210022802C40000 +C388:0000002800281228122834E82A2849280028000008000800080008000FF80000 +C389:0000002800281228122834E82A28492800280000000020F8201020303ECC0000 +C38A:0000002800281228122834E82A28492800280000202021FC207020883E700000 +C38B:0000002800281228122834E82A2849280028000003F802000200020003F80000 +C38C:0000002800281228122834E82A2849280028000007F8000807F8040007F80000 +C38D:0000002800281228122834E82A284928002800003EF802083E0820083E080000 +C38E:0000002800281228122834E82A284928002800003EF802883E8820883EF80000 +C38F:0000002800281228122834E82A284928002800003E8802883EF820883EF80000 +C390:0000002800281228122834E82A284928002800001F0801081F0810141F620000 +C391:0000002800281228122834E82A284928002800003EF802803EF820803EF80000 +C392:0000002800281228122834E82A284928002800003EFC02483E4820483EFC0000 +C393:0000002800281228122834E82A284928002800003E1002FE3E3820443E380000 +C394:0000002800281228122834E82A2849280028000003F802080208020803F80000 +C395:0000002800281228122834E82A284928002800000208020803F8020803F80000 +C396:0000002800281228122834E82A28492800280000110811081F0811141F620000 +C397:0000002800281228122834E82A28492800280000000800080008003400C20000 +C398:0000002800281228122834E82A284928002800000048004800A8011406620000 +C399:0000002800281228122834E82A28492800280000000001F00208020801F00000 +C39A:0000002800281228122834E82A2849280028000003F80020002000D003080000 +C39B:0000002800281228122834E82A28492800280000004003F8004000A003180000 +C39C:0000002800281228122834E82A2849280028000003F8000803F8000800080000 +C39D:0000002800281228122834E82A2849280028000003F8020003F8020003F80000 +C39E:0000002800281228122834E82A2849280028000000000FF8022002200FF80000 +C39F:0000002800281228122834E82A2849280028000000800FF803E0041003E00000 +C3A0:000000000002000208820882089E19021502229ECC4200020002000200020000 +C3A1:0000000800081208123834082A38490800080000000007F80008000800080000 +C3A2:0000000800081208123834082A3849080008000000003EF80208020802080000 +C3A3:0000000800081208123834082A3849080008000000001F080108011401620000 +C3A4:0000000800081208123834082A3849080008000800001000100010001FF80000 +C3A5:0000000800081208123834082A38490800080000000020F8201020303ECC0000 +C3A6:0000000800081208123834082A38490800080000202021FC207020883E700000 +C3A7:0000000800081208123834082A3849080008000003F802000200020003F80000 +C3A8:0000000800081208123834082A3849080008000007F8000807F8040007F80000 +C3A9:0000000800081208123834082A384908000800003EF802083E0820083E080000 +C3AA:0000000800081208123834082A384908000800003EF802883E8820883EF80000 +C3AB:0000000800081208123834082A384908000800003E8802883EF820883EF80000 +C3AC:0000000800081208123834082A384908000800000F8800880F8808140FA20000 +C3AD:0000000800081208123834082A384908000800003EF802803EF820803EF80000 +C3AE:0000000800081208123834082A384908000800003EFC02483E4820483EFC0000 +C3AF:0000000800081208123834082A384908000800003E1002FE3E3820443E380000 +C3B0:0000000800081208123834082A3849080008000003F802080208020803F80000 +C3B1:0000000800081208123834082A384908000800000208020803F8020803F80000 +C3B2:0000000800081208123834082A38490800080000210821083F0821143F620000 +C3B3:0000000800081208123834082A38490800080000001000100010006801840000 +C3B4:0000000800081208123834082A384908000800000048004800A8011406620000 +C3B5:0000000800081208123834082A38490800080000000003F00408040803F00000 +C3B6:0000000800081208123834082A3849080008000003F80020002000D003080000 +C3B7:0000000800081208123834082A38490800080000004003F8004000A003180000 +C3B8:0000000800081208123834082A3849080008000003F8000803F8000800080000 +C3B9:0000000800081208123834082A3849080008000003F8020003F8020003F80000 +C3BA:0000000800081208123834082A3849080008000000000FF8022002200FF80000 +C3BB:0000000800081208123834082A3849080008000000800FF803E0041003E00000 +C3BC:00000000000A000A088A088A08BA190A150A22BACC4A000A000A000A000A0000 +C3BD:000000280028122812E834282AE849280028000007F800080008000800080000 +C3BE:000000280028122812E834282AE849280028000000003EF80208020802080000 +C3BF:000000280028122812E834282AE849280028000000003E100210022802C40000 +C3C0:000000280028122812E834282AE849280028002808000800080008000FF80000 +C3C1:000000280028122812E834282AE8492800280000000020F8201020303ECC0000 +C3C2:000000280028122812E834282AE8492800280000202021FC207020883E700000 +C3C3:000000280028122812E834282AE849280028000003F802000200020003F80000 +C3C4:000000280028122812E834282AE849280028000007F8000807F8040007F80000 +C3C5:000000280028122812E834282AE84928002800003EF802083E0820083E080000 +C3C6:000000280028122812E834282AE84928002800003EF802883E8820883EF80000 +C3C7:000000280028122812E834282AE84928002800003E8802883EF820883EF80000 +C3C8:000000280028122812E834282AE84928002800001F0801081F0810141F620000 +C3C9:000000280028122812E834282AE84928002800003EF802803EF820803EF80000 +C3CA:000000280028122812E834282AE84928002800003EFC02483E4820483EFC0000 +C3CB:000000280028122812E834282AE84928002800003E1002FE3E3820443E380000 +C3CC:000000280028122812E834282AE849280028000003F802080208020803F80000 +C3CD:000000280028122812E834282AE84928002800000208020803F8020803F80000 +C3CE:000000280028122812E834282AE8492800280000110811081F0811141F620000 +C3CF:000000280028122812E834282AE8492800280000000800080008003400C20000 +C3D0:000000280028122812E834282AE84928002800000048004800A8011406620000 +C3D1:000000280028122812E834282AE8492800280000000001F00208020801F00000 +C3D2:000000280028122812E834282AE849280028000003F80020002000D003080000 +C3D3:000000280028122812E834282AE8492800280000004003F8004000A003180000 +C3D4:000000280028122812E834282AE849280028000003F8000803F8000800080000 +C3D5:000000280028122812E834282AE849280028000003F8020003F8020003F80000 +C3D6:000000280028122812E834282AE849280028000000000FF8022002200FF80000 +C3D7:000000280028122812E834282AE849280028000000800FF803E0041003E00000 +C3D8:0000000000000220022002200640054008A033100100010001007FFC00000000 +C3D9:000000000220022004400AA0111001007FFC00001FF000100010001000100000 +C3DA:000000000220022004400AA0111001007FFC000000003EF80208020802080000 +C3DB:000000000220022004400AA0111001007FFC000000001E100210022802C40000 +C3DC:000000000220022004400AA0111001007FFC000000001000100010001FF00000 +C3DD:000000000220022004400AA0111001007FFC0000000020F8201020303ECC0000 +C3DE:000000000220022004400AA0111001007FFC0000202021FC207020883E700000 +C3DF:000000000220022004400AA0111001007FFC00001FF01000100010001FF00000 +C3E0:000000000220022004400AA0111001007FFC00001FF000101FF010001FF00000 +C3E1:000000000220022004400AA0111001007FFC00003EF802083E0820083E080000 +C3E2:000000000220022004400AA0111001007FFC00003EF802883E8820883EF80000 +C3E3:000000000220022004400AA0111001007FFC00003E8802883EF820883EF80000 +C3E4:000000000220022004400AA0111001007FFC00003E1002103E1020283EC40000 +C3E5:000000000220022004400AA0111001007FFC00003EF802803EF820803EF80000 +C3E6:000000000220022004400AA0111001007FFC00003EFC02483E4820483EFC0000 +C3E7:000000000220022004400AA0111001007FFC00003E2003FC3E7020883E700000 +C3E8:000000000220022004400AA0111001007FFC00001FF01010101010101FF00000 +C3E9:000000000220022004400AA0111001007FFC0000101010101FF010101FF00000 +C3EA:000000000220022004400AA0111001007FFC0000222022203E2022503E880000 +C3EB:000000000220022004400AA0111001007FFC000000000100010002800C400000 +C3EC:000000000220022004400AA0111001007FFC00000000024002400DA033100000 +C3ED:000000000220022004400AA0111001007FFC0000000007C00820082007C00000 +C3EE:000000000220022004400AA0111001007FFC0000000007E00080014006200000 +C3EF:000000000220022004400AA0111001007FFC0000008007E00080014006200000 +C3F0:000000000220022004400AA0111001007FFC00001FF000101FF0001000100000 +C3F1:000000000220022004400AA0111001007FFC00001FF010001FF010001FF00000 +C3F2:000000000220022004400AA0111001007FFC000000001FF0044004401FF00000 +C3F3:000000000220022004400AA0111001007FFC000001001FF007C0082007C00000 +C3F4:0000001000100890089008901910151E2290CC50041004107FD0001000100000 +C3F5:00000888088811082A8E4448040804087FE8000007F800080008000800080000 +C3F6:00000888088811082A8E4448040804087FE8000000003EF80208020802080000 +C3F7:00000888088811082A8E4448040804087FE8000000001F080108011401620000 +C3F8:00000888088811082A8E4448040804087FE8000008000800080008000FF80000 +C3F9:00000888088811082A8E4448040804087FE80000000010F8101010301ECC0000 +C3FA:00000888088811082A8E4448040804087FE800000808087F081C08220F9C0000 +C3FB:00000888088811082A8E4448040804087FE8000003F802000200020003F80000 +C3FC:00000888088811082A8E4448040804087FE8000007F8000807F8040007F80000 +C3FD:00000888088811082A8E4448040804087FE800003EF802083E0820083E080000 +C3FE:00000888088811082A8E4448040804087FE800003EF802883E8820883EF80000 +C3FF:00000888088811082A8E4448040804087FE800003E8802883EF820883EF80000 +C400:00000888088811082A8E4448040804087FE800001F0801081F0810141F620000 +C401:00000888088811082A8E4448040804087FE800003EF802803EF820803EF80000 +C402:00000888088811082A8E4448040804087FE800003EFC02483E4820483EFC0000 +C403:00000888088811082A8E4448040804087FE800001F08017F1F1C10221F1C0000 +C404:00000888088811082A8E4448040804087FE8000003F802080208020803F80000 +C405:00000888088811082A8E4448040804087FE800000208020803F8020803F80000 +C406:00000888088811082A8E4448040804087FE80000110811081F0811141F620000 +C407:00000888088811082A8E4448040804087FE80000001000100010006801840000 +C408:00000888088811082A8E4448040804087FE800000048004800A8011406620000 +C409:00000888088811082A8E4448040804087FE80000000003F00408040803F00000 +C40A:00000888088811082A8E4448040804087FE8000003F80020002000D003080000 +C40B:00000888088811082A8E4448040804087FE80000004003F8004000A003180000 +C40C:00000888088811082A8E4448040804087FE8000003F8000803F8000800080000 +C40D:00000888088811082A8E4448040804087FE8000003F8020003F8020003F80000 +C40E:00000888088811082A8E4448040804087FE8000000000FF8022002200FF80000 +C40F:00000888088811082A8E4448040804087FE8000000800FF803E0041003E00000 +C410:0000001200120892089208921912151E2292CC52041204127FD2001200120000 +C411:000008A808A811282AB84468042804287FA8000007F800080008000800080000 +C412:000008A808A811282AB84468042804287FA8000000003EF80208020802080000 +C413:000008A808A811282AB84468042804287FA8000000001F080108011401620000 +C414:000008A808A811282AB84468042804287FA8000008000800080008000FF80000 +C415:000008A808A811282AB84468042804287FA80000000010F8101010301ECC0000 +C416:000008A808A811282AB84468042804287FA800000808087F081C08220F9C0000 +C417:000008A808A811282AB84468042804287FA8000003F802000200020003F80000 +C418:000008A808A811282AB84468042804287FA8000007F8000807F8040007F80000 +C419:000008A808A811282AB84468042804287FA800003EF802083E0820083E080000 +C41A:000008A808A811282AB84468042804287FA800003EF802883E8820883EF80000 +C41B:000008A808A811282AB84468042804287FA800003E8802883EF820883EF80000 +C41C:000008A808A811282AB84468042804287FA800001F0801081F0810141F620000 +C41D:000008A808A811282AB84468042804287FA800003EF802803EF820803EF80000 +C41E:000008A808A811282AB84468042804287FA800003EFC02483E4820483EFC0000 +C41F:000008A808A811282AB84468042804287FA800001F08017F1F1C10221F1C0000 +C420:000008A808A811282AB84468042804287FA8000003F802080208020803F80000 +C421:000008A808A811282AB84468042804287FA800000208020803F8020803F80000 +C422:000008A808A811282AB84468042804287FA80000110811081F0811141F620000 +C423:000008A808A811282AB84468042804287FA80000001000100010006801840000 +C424:000008A808A811282AB84468042804287FA800000048004800A8011406620000 +C425:000008A808A811282AB84468042804287FA80000000003F00408040803F00000 +C426:000008A808A811282AB84468042804287FA8000003F80020002000D003080000 +C427:000008A808A811282AB84468042804287FA80000004003F8004000A003180000 +C428:000008A808A811282AB84468042804287FA8000003F8000803F8000800080000 +C429:000008A808A811282AB84468042804287FA8000003F8020003F8020003F80000 +C42A:000008A808A811282AB84468042804287FA8000000000FF8022002200FF80000 +C42B:000008A808A811282AB84468042804287FA8000000800FF803E0041003E00000 +C42C:000000080008088808880888190815082288CC48040804087FE8000800080000 +C42D:00000888088811082A884448040804087FE8000007F800080008000800080000 +C42E:00000888088811082A884448040804087FE8000000003EF80208020802080000 +C42F:00000888088811082A884448040804087FE8000000001F080108011401620000 +C430:00000888088811082A884448040804087FE8000008000800080008000FF80000 +C431:00000888088811082A884448040804087FE80000000010F8101010301ECC0000 +C432:00000888088811082A884448040804087FE800000808087F081C08220F9C0000 +C433:00000888088811082A884448040804087FE8000003F802000200020003F80000 +C434:00000888088811082A884448040804087FE8000007F8000807F8040007F80000 +C435:00000888088811082A884448040804087FE800003EF802083E0820083E080000 +C436:00000888088811082A884448040804087FE800003EF802883E8820883EF80000 +C437:00000888088811082A884448040804087FE800003E8802883EF820883EF80000 +C438:00000888088811082A884448040804087FE800001F0801081F0810141F620000 +C439:00000888088811082A884448040804087FE800003EF802803EF820803EF80000 +C43A:00000888088811082A884448040804087FE800003EFC02483E4820483EFC0000 +C43B:00000888088811082A884448040804087FE800001F08017F1F1C10221F1C0000 +C43C:00000888088811082A884448040804087FE8000003F802080208020803F80000 +C43D:00000888088811082A884448040804087FE800000208020803F8020803F80000 +C43E:00000888088811082A884448040804087FE80000110811081F0811141F620000 +C43F:00000888088811082A884448040804087FE80000001000100010006801840000 +C440:00000888088811082A884448040804087FE800000048004800A8011406620000 +C441:00000888088811082A884448040804087FE80000000003F00408040803F00000 +C442:00000888088811082A884448040804087FE8000003F80020002000D003080000 +C443:00000888088811082A884448040804087FE80000004003F8004000A003180000 +C444:00000888088811082A884448040804087FE8000003F8000803F8000800080000 +C445:00000888088811082A884448040804087FE8000003F8020003F8020003F80000 +C446:00000888088811082A884448040804087FE8000000000FF8022002200FF80000 +C447:00000888088811082A884448040804087FE8000000800FF803E0041003E00000 +C448:0000000000000220022002200640054008A037500440044004407FFC00000000 +C449:000000000220022004400AA0155004407FFC00001FF000100010001000100000 +C44A:000000000220022004400AA0155004407FFC000000003EF80208020802080000 +C44B:000000000220022004400AA0155004407FFC000000001E100210022802C40000 +C44C:000000000220022004400AA0155004407FFC000000001000100010001FF00000 +C44D:000000000220022004400AA0155004407FFC0000000020F8201020303ECC0000 +C44E:000000000220022004400AA0155004407FFC0000202021FC207020883E700000 +C44F:000000000220022004400AA0155004407FFC00001FF01000100010001FF00000 +C450:000000000220022004400AA0155004407FFC00001FF000101FF010001FF00000 +C451:000000000220022004400AA0155004407FFC00003EF802083E0820083E080000 +C452:000000000220022004400AA0155004407FFC00003EF802883E8820883EF80000 +C453:000000000220022004400AA0155004407FFC00003E8802883EF820883EF80000 +C454:000000000220022004400AA0155004407FFC00003E1002103E1020283EC40000 +C455:000000000220022004400AA0155004407FFC00003EF802803EF820803EF80000 +C456:000000000220022004400AA0155004407FFC00003EFC02483E4820483EFC0000 +C457:000000000220022004400AA0155004407FFC00003E2003FC3E7020883E700000 +C458:000000000220022004400AA0155004407FFC00001FF01010101010101FF00000 +C459:000000000220022004400AA0155004407FFC0000101010101FF010101FF00000 +C45A:000000000220022004400AA0155004407FFC0000222022203E2022503E880000 +C45B:000000000220022004400AA0155004407FFC000000000100010002800C400000 +C45C:000000000220022004400AA0155004407FFC00000000024002400DA033100000 +C45D:000000000220022004400AA0155004407FFC0000000007C00820082007C00000 +C45E:000000000220022004400AA0155004407FFC0000000007E00080014006200000 +C45F:000000000220022004400AA0155004407FFC0000008007E00080014006200000 +C460:000000000220022004400AA0155004407FFC00001FF000101FF0001000100000 +C461:000000000220022004400AA0155004407FFC00001FF010001FF010001FF00000 +C462:000000000220022004400AA0155004407FFC000000001FF0044004401FF00000 +C463:000000000220022004400AA0155004407FFC000001001FF007C0082007C00000 +C464:000000000220022002200640054008A0331000003FF801000100010001000000 +C465:000000000220022004400AA011107FFC010001001FF000100010001000100000 +C466:000000000220022004400AA011107FFC0100010000003EF80208020802080000 +C467:000000000220022004400AA011107FFC0100010000001E100210022802C40000 +C468:000000000220022004400AA0111000007FFC010001001100100010001FF00000 +C469:000000000220022004400AA011107FFC01000100000020F8201020303ECC0000 +C46A:000000000220022004400AA011107FFC01000100202021FC207020883E700000 +C46B:000000000220022004400AA011107FFC010001001FF01000100010001FF00000 +C46C:000000000220022004400AA011107FFC010001001FF000101FF010001FF00000 +C46D:000000000220022004400AA011107FFC010001003EF802083E0820083E080000 +C46E:000000000220022004400AA011107FFC010001003EF802883E8820883EF80000 +C46F:000000000220022004400AA011107FFC010001003E8802883EF820883EF80000 +C470:000000000220022004400AA011107FFC010001003E1002103E1020283EC40000 +C471:000000000220022004400AA011107FFC010001003EF802803EF820803EF80000 +C472:000000000220022004400AA011107FFC010001003EFC02483E4820483EFC0000 +C473:000000000220022004400AA011107FFC010001003E2003FC3E7020883E700000 +C474:000000000220022004400AA011107FFC010001001FF01010101010101FF00000 +C475:000000000220022004400AA011107FFC01000100101010101FF010101FF00000 +C476:000000000220022004400AA011107FFC01000100222022203E2022503E880000 +C477:000000000220022004400AA011107FFC0100010000000100010002800C400000 +C478:000000000220022004400AA011107FFC010001000000024002400DA033100000 +C479:000000000220022004400AA011107FFC01000100000007C00820082007C00000 +C47A:000000000220022004400AA011107FFC01000100000007E00080014006200000 +C47B:000000000220022004400AA011107FFC01000100008007E00080014006200000 +C47C:000000000220022004400AA011107FFC010001001FF000101FF0001000100000 +C47D:000000000220022004400AA011107FFC010001001FF010001FF010001FF00000 +C47E:000000000220022004400AA011107FFC0100010000001FF0044004401FF00000 +C47F:000000000220022004400AA011107FFC0100010001001FF007C0082007C00000 +C480:00000008088808880888190815082288CC4800087FE8040804F8040804080000 +C481:00080888088811082A8844487FE8027802080000000007F80008000800080000 +C482:00080888088811082A8844487FE802780208000000003EF80208020802080000 +C483:00080888088811082A8844487FE802780208000000001F080108011401620000 +C484:00080888088811082A88444800087FE80278020802081000100010001FF80000 +C485:00080888088811082A8844487FE8027802080000000020F8201020303ECC0000 +C486:00080888088811082A8844487FE8027802080000202021FC207020883E700000 +C487:00080888088811082A8844487FE802780208000003F802000200020003F80000 +C488:00080888088811082A8844487FE802780208000007F8000807F8040007F80000 +C489:00080888088811082A8844487FE80278020800003EF802083E0820083E080000 +C48A:00080888088811082A8844487FE80278020800003EF802883E8820883EF80000 +C48B:00080888088811082A8844487FE80278020800003E8802883EF820883EF80000 +C48C:00080888088811082A8844487FE80278020800000F8800880F8808140FA20000 +C48D:00080888088811082A8844487FE80278020800003EF802803EF820803EF80000 +C48E:00080888088811082A8844487FE80278020800003EFC02483E4820483EFC0000 +C48F:00080888088811082A8844487FE80278020800003E1002FE3E3820443E380000 +C490:00080888088811082A8844487FE802780208000003F802080208020803F80000 +C491:00080888088811082A8844487FE80278020800000208020803F8020803F80000 +C492:00080888088811082A8844487FE8027802080000210821083F0821143F620000 +C493:00080888088811082A8844487FE8027802080000001000100010006801840000 +C494:00080888088811082A8844487FE80278020800000048004800A8011406620000 +C495:00080888088811082A8844487FE8027802080000000003F00408040803F00000 +C496:00080888088811082A8844487FE802780208000003F80020002000D003080000 +C497:00080888088811082A8844487FE8027802080000004003F8004000A003180000 +C498:00080888088811082A8844487FE802780208000003F8000803F8000800080000 +C499:00080888088811082A8844487FE802780208000003F8020003F8020003F80000 +C49A:00080888088811082A8844487FE802780208000000000FF8022002200FF80000 +C49B:00080888088811082A8844487FE802780208000000800FF803E0041003E00000 +C49C:0000000A088A088A088A190A150A228ACC4A000A7FEA040A047A040A040A0000 +C49D:002808A808A811282AA844687FA805E804280000000007F80008000800080000 +C49E:002808A808A811282AA844687FA805E80428000000003EF80208020802080000 +C49F:002808A808A811282AA844687FA805E80428000000001F080108011401620000 +C4A0:002808A808A811282AA8446800287FA8042805E804281428100010001FF80000 +C4A1:002808A808A811282AA844687FA805E804280000000020F8201020303ECC0000 +C4A2:002808A808A811282AA844687FA805E804280000202021FC207020883E700000 +C4A3:002808A808A811282AA844687FA805E80428000003F802000200020003F80000 +C4A4:002808A808A811282AA844687FA805E80428000007F8000807F8040007F80000 +C4A5:002808A808A811282AA844687FA805E8042800003EF802083E0820083E080000 +C4A6:002808A808A811282AA844687FA805E8042800003EF802883E8820883EF80000 +C4A7:002808A808A811282AA844687FA805E8042800003E8802883EF820883EF80000 +C4A8:002808A808A811282AA844687FA805E8042800000F8800880F8808140FA20000 +C4A9:002808A808A811282AA844687FA805E8042800003EF802803EF820803EF80000 +C4AA:002808A808A811282AA844687FA805E8042800003EFC02483E4820483EFC0000 +C4AB:002808A808A811282AA844687FA805E8042800003E1002FE3E3820443E380000 +C4AC:002808A808A811282AA844687FA805E80428000003F802080208020803F80000 +C4AD:002808A808A811282AA844687FA805E8042800000208020803F8020803F80000 +C4AE:002808A808A811282AA844687FA805E804280000210821083F0821143F620000 +C4AF:002808A808A811282AA844687FA805E804280000001000100010006801840000 +C4B0:002808A808A811282AA844687FA805E8042800000048004800A8011406620000 +C4B1:002808A808A811282AA844687FA805E804280000000003F00408040803F00000 +C4B2:002808A808A811282AA844687FA805E80428000003F80020002000D003080000 +C4B3:002808A808A811282AA844687FA805E804280000004003F8004000A003180000 +C4B4:002808A808A811282AA844687FA805E80428000003F8000803F8000800080000 +C4B5:002808A808A811282AA844687FA805E80428000003F8020003F8020003F80000 +C4B6:002808A808A811282AA844687FA805E80428000000000FF8022002200FF80000 +C4B7:002808A808A811282AA844687FA805E80428000000800FF803E0041003E00000 +C4B8:00000008088808880888190815082288CC4800087FE804080408040804080000 +C4B9:00080888088811082A8844487FE8020802000000000007F80008000800080000 +C4BA:00080888088811082A8844487FE802080200000000003EF80208020802080000 +C4BB:00080888088811082A8844487FE802080200000000001F080108011401620000 +C4BC:00080888088811082A88444800087FE80208020802081008100010001FF80000 +C4BD:00080888088811082A8844487FE8020802000000000020F8201020303ECC0000 +C4BE:00080888088811082A8844487FE8020802000000202021FC207020883E700000 +C4BF:00080888088811082A8844487FE802080200000003F802000200020003F80000 +C4C0:00080888088811082A8844487FE802080200000007F8000807F8040007F80000 +C4C1:00080888088811082A8844487FE80208020000003EF802083E0820083E080000 +C4C2:00080888088811082A8844487FE80208020000003EF802883E8820883EF80000 +C4C3:00080888088811082A8844487FE80208020000003E8802883EF820883EF80000 +C4C4:00080888088811082A8844487FE80208020000000F8800880F8808140FA20000 +C4C5:00080888088811082A8844487FE80208020000003EF802803EF820803EF80000 +C4C6:00080888088811082A8844487FE80208020000003EFC02483E4820483EFC0000 +C4C7:00080888088811082A8844487FE80208020000003E1002FE3E3820443E380000 +C4C8:00080888088811082A8844487FE802080200000003F802080208020803F80000 +C4C9:00080888088811082A8844487FE80208020000000208020803F8020803F80000 +C4CA:00080888088811082A8844487FE8020802000000210821083F0821143F620000 +C4CB:00080888088811082A8844487FE8020802000000001000100010006801840000 +C4CC:00080888088811082A8844487FE80208020000000048004800A8011406620000 +C4CD:00080888088811082A8844487FE8020802000000000003F00408040803F00000 +C4CE:00080888088811082A8844487FE802080200000003F80020002000D003080000 +C4CF:00080888088811082A8844487FE8020802000000004003F8004000A003180000 +C4D0:00080888088811082A8844487FE802080200000003F8000803F8000800080000 +C4D1:00080888088811082A8844487FE802080200000003F8020003F8020003F80000 +C4D2:00080888088811082A8844487FE802080200000000000FF8022002200FF80000 +C4D3:00080888088811082A8844487FE802080200000000800FF803E0041003E00000 +C4D4:000000000220022002200640054008A0331000007FFC04400440044004400000 +C4D5:000000000220022004400AA011107FFC044004401FF000100010001000100000 +C4D6:000000000220022004400AA011107FFC0440044000003EF80208020802080000 +C4D7:000000000220022004400AA011107FFC0440044000001E100210022802C40000 +C4D8:000000000220022004400AA0111000007FFC044004401440100010001FF00000 +C4D9:000000000220022004400AA011107FFC04400440000020F8201020303ECC0000 +C4DA:000000000220022004400AA011107FFC04400440202021FC207020883E700000 +C4DB:000000000220022004400AA011107FFC044004401FF01000100010001FF00000 +C4DC:000000000220022004400AA011107FFC044004401FF000101FF010001FF00000 +C4DD:000000000220022004400AA011107FFC044004403EF802083E0820083E080000 +C4DE:000000000220022004400AA011107FFC044004403EF802883E8820883EF80000 +C4DF:000000000220022004400AA011107FFC044004403E8802883EF820883EF80000 +C4E0:000000000220022004400AA011107FFC044004403E1002103E1020283EC40000 +C4E1:000000000220022004400AA011107FFC044004403EF802803EF820803EF80000 +C4E2:000000000220022004400AA011107FFC044004403EFC02483E4820483EFC0000 +C4E3:000000000220022004400AA011107FFC044004403E2003FC3E7020883E700000 +C4E4:000000000220022004400AA011107FFC044004401FF01010101010101FF00000 +C4E5:000000000220022004400AA011107FFC04400440101010101FF010101FF00000 +C4E6:000000000220022004400AA011107FFC04400440222022203E2022503E880000 +C4E7:000000000220022004400AA011107FFC0440044000000100010002800C400000 +C4E8:000000000220022004400AA011107FFC044004400000024002400DA033100000 +C4E9:000000000220022004400AA011107FFC04400440000007C00820082007C00000 +C4EA:000000000220022004400AA011107FFC04400440000007E00080014006200000 +C4EB:000000000220022004400AA011107FFC04400440008007E00080014006200000 +C4EC:000000000220022004400AA011107FFC044004401FF000101FF0001000100000 +C4ED:000000000220022004400AA011107FFC044004401FF010001FF010001FF00000 +C4EE:000000000220022004400AA011107FFC0440044000001FF0044004401FF00000 +C4EF:000000000220022004400AA011107FFC0440044001001FF007C0082007C00000 +C4F0:0000000000000220022002200640054008A0331000007FFC0000000000000000 +C4F1:000000000220022004400AA0111000007FFC00001FF000100010001000100000 +C4F2:000000000220022004400AA0111000007FFC000000003EF80208020802080000 +C4F3:000000000220022004400AA0111000007FFC000000001E100210022802C40000 +C4F4:000000000220022004400AA0111000007FFC000000001000100010001FF00000 +C4F5:000000000220022004400AA0111000007FFC0000000020F8201020303ECC0000 +C4F6:000000000220022004400AA0111000007FFC0000202021FC207020883E700000 +C4F7:000000000220022004400AA0111000007FFC00001FF01000100010001FF00000 +C4F8:000000000220022004400AA0111000007FFC00001FF000101FF010001FF00000 +C4F9:000000000220022004400AA0111000007FFC00003EF802083E0820083E080000 +C4FA:000000000220022004400AA0111000007FFC00003EF802883E8820883EF80000 +C4FB:000000000220022004400AA0111000007FFC00003E8802883EF820883EF80000 +C4FC:000000000220022004400AA0111000007FFC00003E1002103E1020283EC40000 +C4FD:000000000220022004400AA0111000007FFC00003EF802803EF820803EF80000 +C4FE:000000000220022004400AA0111000007FFC00003EFC02483E4820483EFC0000 +C4FF:000000000220022004400AA0111000007FFC00003E2003FC3E7020883E700000 +C500:000000000220022004400AA0111000007FFC00001FF01010101010101FF00000 +C501:000000000220022004400AA0111000007FFC0000101010101FF010101FF00000 +C502:000000000220022004400AA0111000007FFC0000222022203E2022503E880000 +C503:000000000220022004400AA0111000007FFC000000000100010002800C400000 +C504:000000000220022004400AA0111000007FFC00000000024002400DA033100000 +C505:000000000220022004400AA0111000007FFC0000000007C00820082007C00000 +C506:000000000220022004400AA0111000007FFC0000000007E00080014006200000 +C507:000000000220022004400AA0111000007FFC0000008007E00080014006200000 +C508:000000000220022004400AA0111000007FFC00001FF000101FF0001000100000 +C509:000000000220022004400AA0111000007FFC00001FF010001FF010001FF00000 +C50A:000000000220022004400AA0111000007FFC000000001FF0044004401FF00000 +C50B:000000000220022004400AA0111000007FFC000001001FF007C0082007C00000 +C50C:000000080008088808880888190815082288CC4800087FE80008000800080000 +C50D:00000888088811082A884448000800087FE8000007F800080008000800080000 +C50E:00000888088811082A884448000800087FE8000000003EF80208020802080000 +C50F:00000888088811082A884448000800087FE8000000001F080108011401620000 +C510:00000888088811082A884448000800087FE8000008000800080008000FF80000 +C511:00000888088811082A884448000800087FE80000000010F8101010301ECC0000 +C512:00000888088811082A884448000800087FE800000808087F081C08220F9C0000 +C513:00000888088811082A884448000800087FE8000003F802000200020003F80000 +C514:00000888088811082A884448000800087FE8000007F8000807F8040007F80000 +C515:00000888088811082A884448000800087FE800003EF802083E0820083E080000 +C516:00000888088811082A884448000800087FE800003EF802883E8820883EF80000 +C517:00000888088811082A884448000800087FE800003E8802883EF820883EF80000 +C518:00000888088811082A884448000800087FE800001F0801081F0810141F620000 +C519:00000888088811082A884448000800087FE800003EF802803EF820803EF80000 +C51A:00000888088811082A884448000800087FE800003EFC02483E4820483EFC0000 +C51B:00000888088811082A884448000800087FE800001F08017F1F1C10221F1C0000 +C51C:00000888088811082A884448000800087FE8000003F802080208020803F80000 +C51D:00000888088811082A884448000800087FE800000208020803F8020803F80000 +C51E:00000888088811082A884448000800087FE80000110811081F0811141F620000 +C51F:00000888088811082A884448000800087FE80000001000100010006801840000 +C520:00000888088811082A884448000800087FE800000048004800A8011406620000 +C521:00000888088811082A884448000800087FE80000000003F00408040803F00000 +C522:00000888088811082A884448000800087FE8000003F80020002000D003080000 +C523:00000888088811082A884448000800087FE80000004003F8004000A003180000 +C524:00000888088811082A884448000800087FE8000003F8000803F8000800080000 +C525:00000888088811082A884448000800087FE8000003F8020003F8020003F80000 +C526:00000888088811082A884448000800087FE8000000000FF8022002200FF80000 +C527:00000888088811082A884448000800087FE8000000800FF803E0041003E00000 +C528:0000000000080008088808880888190815082288CC4800080008000800080000 +C529:0000000800081208120834082A08490800080000000007F80008000800080000 +C52A:0000000800081208120834082A0849080008000000003EF80208020802080000 +C52B:0000000800081208120834082A0849080008000000001F080108011401620000 +C52C:0000000800081208120834082A0849080008000800001000100010001FF80000 +C52D:0000000800081208120834082A08490800080000000020F8201020303ECC0000 +C52E:0000000800081208120834082A08490800080000202021FC207020883E700000 +C52F:0000000800081208120834082A0849080008000003F802000200020003F80000 +C530:0000000800081208120834082A0849080008000007F8000807F8040007F80000 +C531:0000000800081208120834082A084908000800003EF802083E0820083E080000 +C532:0000000800081208120834082A084908000800003EF802883E8820883EF80000 +C533:0000000800081208120834082A084908000800003E8802883EF820883EF80000 +C534:0000000800081208120834082A084908000800000F8800880F8808140FA20000 +C535:0000000800081208120834082A084908000800003EF802803EF820803EF80000 +C536:0000000800081208120834082A084908000800003EFC02483E4820483EFC0000 +C537:0000000800081208120834082A084908000800003E1002FE3E3820443E380000 +C538:0000000800081208120834082A0849080008000003F802080208020803F80000 +C539:0000000800081208120834082A084908000800000208020803F8020803F80000 +C53A:0000000800081208120834082A08490800080000210821083F0821143F620000 +C53B:0000000800081208120834082A08490800080000001000100010006801840000 +C53C:0000000800081208120834082A084908000800000048004800A8011406620000 +C53D:0000000800081208120834082A08490800080000000003F00408040803F00000 +C53E:0000000800081208120834082A0849080008000003F80020002000D003080000 +C53F:0000000800081208120834082A08490800080000004003F8004000A003180000 +C540:0000000800081208120834082A0849080008000003F8000803F8000800080000 +C541:0000000800081208120834082A0849080008000003F8020003F8020003F80000 +C542:0000000800081208120834082A0849080008000000000FF8022002200FF80000 +C543:0000000800081208120834082A0849080008000000800FF803E0041003E00000 +C544:00000000001000101E1021104090409E409021101E1000100010001000100000 +C545:000000081E0821082108210E21081E080008000007F800080008000800080000 +C546:000000081E0821082108210E21081E080008000000003EF80208020802080000 +C547:000000081E0821082108210E21081E080008000000001F080108011401620000 +C548:000000081E0821082108210E21081E080008000808000800080008000FF80000 +C549:000000081E0821082108210E21081E0800080000000010F8101010301ECC0000 +C54A:000000081E0821082108210E21081E08000800000808087F081C08220F9C0000 +C54B:000000081E0821082108210E21081E080008000003F802000200020003F80000 +C54C:000000081E0821082108210E21081E080008000007F8000807F8040007F80000 +C54D:000000081E0821082108210E21081E08000800003EF802083E0820083E080000 +C54E:000000081E0821082108210E21081E08000800003EF802883E8820883EF80000 +C54F:000000081E0821082108210E21081E08000800003E8802883EF820883EF80000 +C550:000000081E0821082108210E21081E08000800001F0801081F0810141F620000 +C551:000000081E0821082108210E21081E08000800003EF802803EF820803EF80000 +C552:000000081E0821082108210E21081E08000800003EFC02483E4820483EFC0000 +C553:000000081E0821082108210E21081E08000800001F08017F1F1C10221F1C0000 +C554:000000081E0821082108210E21081E080008000003F802080208020803F80000 +C555:000000081E0821082108210E21081E08000800000208020803F8020803F80000 +C556:000000081E0821082108210E21081E0800080000110811081F0811141F620000 +C557:000000081E0821082108210E21081E0800080000001000100010006801840000 +C558:000000081E0821082108210E21081E08000800000048004800A8011406620000 +C559:000000081E0821082108210E21081E0800080000000003F00408040803F00000 +C55A:000000081E0821082108210E21081E080008000003F80020002000D003080000 +C55B:000000081E0821082108210E21081E0800080000004003F8004000A003180000 +C55C:000000081E0821082108210E21081E080008000003F8000803F8000800080000 +C55D:000000081E0821082108210E21081E080008000003F8020003F8020003F80000 +C55E:000000081E0821082108210E21081E080008000000000FF8022002200FF80000 +C55F:000000081E0821082108210E21081E080008000000800FF803E0041003E00000 +C560:00000000001200121E1221124092409E409221121E1200120012001200120000 +C561:000000281E2821282128213821281E280028000007F800080008000800080000 +C562:000000281E2821282128213821281E280028000000003EF80208020802080000 +C563:000000281E2821282128213821281E280028000000003E100210022802C40000 +C564:000000281E2821282128213821281E280028002808000800080008000FF80000 +C565:000000281E2821282128213821281E2800280000000020F8201020303ECC0000 +C566:000000281E2821282128213821281E2800280000202021FC207020883E700000 +C567:000000281E2821282128213821281E280028000003F802000200020003F80000 +C568:000000281E2821282128213821281E280028000007F8000807F8040007F80000 +C569:000000281E2821282128213821281E28002800003EF802083E0820083E080000 +C56A:000000281E2821282128213821281E28002800003EF802883E8820883EF80000 +C56B:000000281E2821282128213821281E28002800003E8802883EF820883EF80000 +C56C:000000281E2821282128213821281E28002800001F0801081F0810141F620000 +C56D:000000281E2821282128213821281E28002800003EF802803EF820803EF80000 +C56E:000000281E2821282128213821281E28002800003EFC02483E4820483EFC0000 +C56F:000000281E2821282128213821281E28002800003E1002FE3E3820443E380000 +C570:000000281E2821282128213821281E280028000003F802080208020803F80000 +C571:000000281E2821282128213821281E28002800000208020803F8020803F80000 +C572:000000281E2821282128213821281E2800280000110811081F0811141F620000 +C573:000000281E2821282128213821281E2800280000000800080008003400C20000 +C574:000000281E2821282128213821281E28002800000048004800A8011406620000 +C575:000000281E2821282128213821281E2800280000000001F00208020801F00000 +C576:000000281E2821282128213821281E280028000003F80020002000D003080000 +C577:000000281E2821282128213821281E2800280000004003F8004000A003180000 +C578:000000281E2821282128213821281E280028000003F8000803F8000800080000 +C579:000000281E2821282128213821281E280028000003F8020003F8020003F80000 +C57A:000000281E2821282128213821281E280028000000000FF8022002200FF80000 +C57B:000000281E2821282128213821281E280028000000800FF803E0041003E00000 +C57C:00000000001000101E102110409E40904090211E1E1000100010001000100000 +C57D:000000081E082108210E2108210E1E080008000007F800080008000800080000 +C57E:000000081E082108210E2108210E1E080008000000003EF80208020802080000 +C57F:000000081E082108210E2108210E1E080008000000001F080108011401620000 +C580:000000081E082108210E2108210E1E080008000008000800080008000FF80000 +C581:000000081E082108210E2108210E1E0800080000000010F8101010301ECC0000 +C582:000000081E082108210E2108210E1E08000800000808087F081C08220F9C0000 +C583:000000081E082108210E2108210E1E080008000003F802000200020003F80000 +C584:000000081E082108210E2108210E1E080008000007F8000807F8040007F80000 +C585:000000081E082108210E2108210E1E08000800003EF802083E0820083E080000 +C586:000000081E082108210E2108210E1E08000800003EF802883E8820883EF80000 +C587:000000081E082108210E2108210E1E08000800003E8802883EF820883EF80000 +C588:000000081E082108210E2108210E1E08000800001F0801081F0810141F620000 +C589:000000081E082108210E2108210E1E08000800003EF802803EF820803EF80000 +C58A:000000081E082108210E2108210E1E08000800003EFC02483E4820483EFC0000 +C58B:000000081E082108210E2108210E1E08000800001F08017F1F1C10221F1C0000 +C58C:000000081E082108210E2108210E1E080008000003F802080208020803F80000 +C58D:000000081E082108210E2108210E1E08000800000208020803F8020803F80000 +C58E:000000081E082108210E2108210E1E0800080000110811081F0811141F620000 +C58F:000000081E082108210E2108210E1E0800080000001000100010006801840000 +C590:000000081E082108210E2108210E1E08000800000048004800A8011406620000 +C591:000000081E082108210E2108210E1E0800080000000003F00408040803F00000 +C592:000000081E082108210E2108210E1E080008000003F80020002000D003080000 +C593:000000081E082108210E2108210E1E0800080000004003F8004000A003180000 +C594:000000081E082108210E2108210E1E080008000003F8000803F8000800080000 +C595:000000081E082108210E2108210E1E080008000003F8020003F8020003F80000 +C596:000000081E082108210E2108210E1E080008000000000FF8022002200FF80000 +C597:000000081E082108210E2108210E1E080008000000800FF803E0041003E00000 +C598:00000000001200121E122112409E40924092211E1E1200120012001200120000 +C599:000000281E2821282138212821381E280028000007F800080008000800080000 +C59A:000000281E2821282138212821381E280028000000003EF80208020802080000 +C59B:000000281E2821282138212821381E280028000000003E100210022802C40000 +C59C:000000281E2821282138212821381E280028002808000800080008000FF80000 +C59D:000000281E2821282138212821381E2800280000000020F8201020303ECC0000 +C59E:000000281E2821282138212821381E2800280000202021FC207020883E700000 +C59F:000000281E2821282138212821381E280028000003F802000200020003F80000 +C5A0:000000281E2821282138212821381E280028000007F8000807F8040007F80000 +C5A1:000000281E2821282138212821381E28002800003EF802083E0820083E080000 +C5A2:000000281E2821282138212821381E28002800003EF802883E8820883EF80000 +C5A3:000000281E2821282138212821381E28002800003E8802883EF820883EF80000 +C5A4:000000281E2821282138212821381E28002800001F0801081F0810141F620000 +C5A5:000000281E2821282138212821381E28002800003EF802803EF820803EF80000 +C5A6:000000281E2821282138212821381E28002800003EFC02483E4820483EFC0000 +C5A7:000000281E2821282138212821381E28002800003E1002FE3E3820443E380000 +C5A8:000000281E2821282138212821381E280028000003F802080208020803F80000 +C5A9:000000281E2821282138212821381E28002800000208020803F8020803F80000 +C5AA:000000281E2821282138212821381E2800280000110811081F0811141F620000 +C5AB:000000281E2821282138212821381E2800280000000800080008003400C20000 +C5AC:000000281E2821282138212821381E28002800000048004800A8011406620000 +C5AD:000000281E2821282138212821381E2800280000000001F00208020801F00000 +C5AE:000000281E2821282138212821381E280028000003F80020002000D003080000 +C5AF:000000281E2821282138212821381E2800280000004003F8004000A003180000 +C5B0:000000281E2821282138212821381E280028000003F8000803F8000800080000 +C5B1:000000281E2821282138212821381E280028000003F8020003F8020003F80000 +C5B2:000000281E2821282138212821381E280028000000000FF8022002200FF80000 +C5B3:000000281E2821282138212821381E280028000000800FF803E0041003E00000 +C5B4:00000000000200021E0221024082409E408221021E0200020002000200020000 +C5B5:000000081E0821082108213821081E0800080000000007F80008000800080000 +C5B6:000000081E0821082108213821081E080008000000003EF80208020802080000 +C5B7:000000081E0821082108213821081E080008000000001F080108011401620000 +C5B8:000000081E0821082108213821081E080008000000001000100010001FF80000 +C5B9:000000081E0821082108213821081E0800080000000020F8201020303ECC0000 +C5BA:000000081E0821082108213821081E0800080000202021FC207020883E700000 +C5BB:000000081E0821082108213821081E080008000003F802000200020003F80000 +C5BC:000000081E0821082108213821081E080008000007F8000807F8040007F80000 +C5BD:000000081E0821082108213821081E08000800003EF802083E0820083E080000 +C5BE:000000081E0821082108213821081E08000800003EF802883E8820883EF80000 +C5BF:000000081E0821082108213821081E08000800003E8802883EF820883EF80000 +C5C0:000000081E0821082108213821081E08000800000F8800880F8808140FA20000 +C5C1:000000081E0821082108213821081E08000800003EF802803EF820803EF80000 +C5C2:000000081E0821082108213821081E08000800003EFC02483E4820483EFC0000 +C5C3:000000081E0821082108213821081E08000800003E1002FE3E3820443E380000 +C5C4:000000081E0821082108213821081E080008000003F802080208020803F80000 +C5C5:000000081E0821082108213821081E08000800000208020803F8020803F80000 +C5C6:000000081E0821082108213821081E0800080000210821083F0821143F620000 +C5C7:000000081E0821082108213821081E0800080000001000100010006801840000 +C5C8:000000081E0821082108213821081E08000800000048004800A8011406620000 +C5C9:000000081E0821082108213821081E0800080000000003F00408040803F00000 +C5CA:000000081E0821082108213821081E080008000003F80020002000D003080000 +C5CB:000000081E0821082108213821081E0800080000004003F8004000A003180000 +C5CC:000000081E0821082108213821081E080008000003F8000803F8000800080000 +C5CD:000000081E0821082108213821081E080008000003F8020003F8020003F80000 +C5CE:000000081E0821082108213821081E080008000000000FF8022002200FF80000 +C5CF:000000081E0821082108213821081E080008000000800FF803E0041003E00000 +C5D0:00000000000A000A1E0A210A408A40BA408A210A1E0A000A000A000A000A0000 +C5D1:000000281E282128212821E821281E280028000007F800080008000800080000 +C5D2:000000281E282128212821E821281E280028000000003EF80208020802080000 +C5D3:000000281E282128212821E821281E280028000000003E100210022802C40000 +C5D4:000000281E282128212821E821281E280028000008000800080008000FF80000 +C5D5:000000281E282128212821E821281E2800280000000020F8201020303ECC0000 +C5D6:000000281E282128212821E821281E2800280000202021FC207020883E700000 +C5D7:000000281E282128212821E821281E280028000003F802000200020003F80000 +C5D8:000000281E282128212821E821281E280028000007F8000807F8040007F80000 +C5D9:000000281E282128212821E821281E28002800003EF802083E0820083E080000 +C5DA:000000281E282128212821E821281E28002800003EF802883E8820883EF80000 +C5DB:000000281E282128212821E821281E28002800003E8802883EF820883EF80000 +C5DC:000000281E282128212821E821281E28002800001F0801081F0810141F620000 +C5DD:000000281E282128212821E821281E28002800003EF802803EF820803EF80000 +C5DE:000000281E282128212821E821281E28002800003EFC02483E4820483EFC0000 +C5DF:000000281E282128212821E821281E28002800003E1002FE3E3820443E380000 +C5E0:000000281E282128212821E821281E280028000003F802080208020803F80000 +C5E1:000000281E282128212821E821281E28002800000208020803F8020803F80000 +C5E2:000000281E282128212821E821281E2800280000110811081F0811141F620000 +C5E3:000000281E282128212821E821281E2800280000000800080008003400C20000 +C5E4:000000281E282128212821E821281E28002800000048004800A8011406620000 +C5E5:000000281E282128212821E821281E2800280000000001F00208020801F00000 +C5E6:000000281E282128212821E821281E280028000003F80020002000D003080000 +C5E7:000000281E282128212821E821281E2800280000004003F8004000A003180000 +C5E8:000000281E282128212821E821281E280028000003F8000803F8000800080000 +C5E9:000000281E282128212821E821281E280028000003F8020003F8020003F80000 +C5EA:000000281E282128212821E821281E280028000000000FF8022002200FF80000 +C5EB:000000281E282128212821E821281E280028000000800FF803E0041003E00000 +C5EC:00000000000200021E022102409E40824082211E1E0200020002000200020000 +C5ED:000000081E0821082138210821381E0800080000000007F80008000800080000 +C5EE:000000081E0821082138210821381E080008000000003EF80208020802080000 +C5EF:000000081E0821082138210821381E080008000000001F080108011401620000 +C5F0:000000081E0821082138210821381E080008000800001000100010001FF80000 +C5F1:000000081E0821082138210821381E0800080000000020F8201020303ECC0000 +C5F2:000000081E0821082138210821381E0800080000202021FC207020883E700000 +C5F3:000000081E0821082138210821381E080008000003F802000200020003F80000 +C5F4:000000081E0821082138210821381E080008000007F8000807F8040007F80000 +C5F5:000000081E0821082138210821381E08000800003EF802083E0820083E080000 +C5F6:000000081E0821082138210821381E08000800003EF802883E8820883EF80000 +C5F7:000000081E0821082138210821381E08000800003E8802883EF820883EF80000 +C5F8:000000081E0821082138210821381E08000800000F8800880F8808140FA20000 +C5F9:000000081E0821082138210821381E08000800003EF802803EF820803EF80000 +C5FA:000000081E0821082138210821381E08000800003EFC02483E4820483EFC0000 +C5FB:000000081E0821082138210821381E08000800003E1002FE3E3820443E380000 +C5FC:000000081E0821082138210821381E080008000003F802080208020803F80000 +C5FD:000000081E0821082138210821381E08000800000208020803F8020803F80000 +C5FE:000000081E0821082138210821381E0800080000210821083F0821143F620000 +C5FF:000000081E0821082138210821381E0800080000001000100010006801840000 +C600:000000081E0821082138210821381E08000800000048004800A8011406620000 +C601:000000081E0821082138210821381E0800080000000003F00408040803F00000 +C602:000000081E0821082138210821381E080008000003F80020002000D003080000 +C603:000000081E0821082138210821381E0800080000004003F8004000A003180000 +C604:000000081E0821082138210821381E080008000003F8000803F8000800080000 +C605:000000081E0821082138210821381E080008000003F8020003F8020003F80000 +C606:000000081E0821082138210821381E080008000000000FF8022002200FF80000 +C607:000000081E0821082138210821381E080008000000800FF803E0041003E00000 +C608:00000000000A000A1E0A210A40BA408A408A213A1E0A000A000A000A000A0000 +C609:000000281E28212821E8212821E81E280028000007F800080008000800080000 +C60A:000000281E28212821E8212821E81E280028000000003EF80208020802080000 +C60B:000000281E28212821E8212821E81E280028000000003E100210022802C40000 +C60C:000000281E28212821E8212821E81E280028002808000800080008000FF80000 +C60D:000000281E28212821E8212821E81E2800280000000020F8201020303ECC0000 +C60E:000000281E28212821E8212821E81E2800280000202021FC207020883E700000 +C60F:000000281E28212821E8212821E81E280028000003F802000200020003F80000 +C610:000000281E28212821E8212821E81E280028000007F8000807F8040007F80000 +C611:000000281E28212821E8212821E81E28002800003EF802083E0820083E080000 +C612:000000281E28212821E8212821E81E28002800003EF802883E8820883EF80000 +C613:000000281E28212821E8212821E81E28002800003E8802883EF820883EF80000 +C614:000000281E28212821E8212821E81E28002800001F0801081F0810141F620000 +C615:000000281E28212821E8212821E81E28002800003EF802803EF820803EF80000 +C616:000000281E28212821E8212821E81E28002800003EFC02483E4820483EFC0000 +C617:000000281E28212821E8212821E81E28002800003E1002FE3E3820443E380000 +C618:000000281E28212821E8212821E81E280028000003F802080208020803F80000 +C619:000000281E28212821E8212821E81E28002800000208020803F8020803F80000 +C61A:000000281E28212821E8212821E81E2800280000110811081F0811141F620000 +C61B:000000281E28212821E8212821E81E2800280000000800080008003400C20000 +C61C:000000281E28212821E8212821E81E28002800000048004800A8011406620000 +C61D:000000281E28212821E8212821E81E2800280000000001F00208020801F00000 +C61E:000000281E28212821E8212821E81E280028000003F80020002000D003080000 +C61F:000000281E28212821E8212821E81E2800280000004003F8004000A003180000 +C620:000000281E28212821E8212821E81E280028000003F8000803F8000800080000 +C621:000000281E28212821E8212821E81E280028000003F8020003F8020003F80000 +C622:000000281E28212821E8212821E81E280028000000000FF8022002200FF80000 +C623:000000281E28212821E8212821E81E280028000000800FF803E0041003E00000 +C624:000007C00820101010101010082007C0000000000100010001007FFC00000000 +C625:000007C008200820082007C0010001007FFC00001FF000100010001000100000 +C626:000007C008200820082007C0010001007FFC000000003EF80208020802080000 +C627:000007C008200820082007C0010001007FFC000000001E100210022802C40000 +C628:000007C008200820082007C0010001007FFC000000001000100010001FF00000 +C629:000007C008200820082007C0010001007FFC0000000020F8201020303ECC0000 +C62A:000007C008200820082007C0010001007FFC0000202021FC207020883E700000 +C62B:000007C008200820082007C0010001007FFC00001FF01000100010001FF00000 +C62C:000007C008200820082007C0010001007FFC00001FF000101FF010001FF00000 +C62D:000007C008200820082007C0010001007FFC00003EF802083E0820083E080000 +C62E:000007C008200820082007C0010001007FFC00003EF802883E8820883EF80000 +C62F:000007C008200820082007C0010001007FFC00003E8802883EF820883EF80000 +C630:000007C008200820082007C0010001007FFC00003E1002103E1020283EC40000 +C631:000007C008200820082007C0010001007FFC00003EF802803EF820803EF80000 +C632:000007C008200820082007C0010001007FFC00003EFC02483E4820483EFC0000 +C633:000007C008200820082007C0010001007FFC00003E2003FC3E7020883E700000 +C634:000007C008200820082007C0010001007FFC00001FF01010101010101FF00000 +C635:000007C008200820082007C0010001007FFC0000101010101FF010101FF00000 +C636:000007C008200820082007C0010001007FFC0000222022203E2022503E880000 +C637:000007C008200820082007C0010001007FFC000000000100010002800C400000 +C638:000007C008200820082007C0010001007FFC00000000024002400DA033100000 +C639:000007C008200820082007C0010001007FFC0000000007C00820082007C00000 +C63A:000007C008200820082007C0010001007FFC0000000007E00080014006200000 +C63B:000007C008200820082007C0010001007FFC0000008007E00080014006200000 +C63C:000007C008200820082007C0010001007FFC00001FF000101FF0001000100000 +C63D:000007C008200820082007C0010001007FFC00001FF010001FF010001FF00000 +C63E:000007C008200820082007C0010001007FFC000000001FF0044004401FF00000 +C63F:000007C008200820082007C0010001007FFC000001001FF007C0082007C00000 +C640:0000001000101F10209040504050405E20901F10041004107FD0001000100000 +C641:000000081F082088208E20881F0804087FE8000007F800080008000800080000 +C642:000000081F082088208E20881F0804087FE8000000003EF80208020802080000 +C643:000000081F082088208E20881F0804087FE8000000001F080108011401620000 +C644:000000081F082088208E20881F0804087FE8000008000800080008000FF80000 +C645:000000081F082088208E20881F0804087FE80000000010F8101010301ECC0000 +C646:000000081F082088208E20881F0804087FE800000808087F081C08220F9C0000 +C647:000000081F082088208E20881F0804087FE8000003F802000200020003F80000 +C648:000000081F082088208E20881F0804087FE8000007F8000807F8040007F80000 +C649:000000081F082088208E20881F0804087FE800003EF802083E0820083E080000 +C64A:000000081F082088208E20881F0804087FE800003EF802883E8820883EF80000 +C64B:000000081F082088208E20881F0804087FE800003E8802883EF820883EF80000 +C64C:000000081F082088208E20881F0804087FE800001F0801081F0810141F620000 +C64D:000000081F082088208E20881F0804087FE800003EF802803EF820803EF80000 +C64E:000000081F082088208E20881F0804087FE800003EFC02483E4820483EFC0000 +C64F:000000081F082088208E20881F0804087FE800001F08017F1F1C10221F1C0000 +C650:000000081F082088208E20881F0804087FE8000003F802080208020803F80000 +C651:000000081F082088208E20881F0804087FE800000208020803F8020803F80000 +C652:000000081F082088208E20881F0804087FE80000110811081F0811141F620000 +C653:000000081F082088208E20881F0804087FE80000001000100010006801840000 +C654:000000081F082088208E20881F0804087FE800000048004800A8011406620000 +C655:000000081F082088208E20881F0804087FE80000000003F00408040803F00000 +C656:000000081F082088208E20881F0804087FE8000003F80020002000D003080000 +C657:000000081F082088208E20881F0804087FE80000004003F8004000A003180000 +C658:000000081F082088208E20881F0804087FE8000003F8000803F8000800080000 +C659:000000081F082088208E20881F0804087FE8000003F8020003F8020003F80000 +C65A:000000081F082088208E20881F0804087FE8000000000FF8022002200FF80000 +C65B:000000081F082088208E20881F0804087FE8000000800FF803E0041003E00000 +C65C:0000001200121F12209240524052405E20921F12041204127FD2001200120000 +C65D:000000281F2820A820B820A81F2804287FA8000007F800080008000800080000 +C65E:000000281F2820A820B820A81F2804287FA8000000003EF80208020802080000 +C65F:000000281F2820A820B820A81F2804287FA8000000001F080108011401620000 +C660:000000281F2820A820B820A81F2804287FA8000008000800080008000FF80000 +C661:000000281F2820A820B820A81F2804287FA80000000010F8101010301ECC0000 +C662:000000281F2820A820B820A81F2804287FA800000808087F081C08220F9C0000 +C663:000000281F2820A820B820A81F2804287FA8000003F802000200020003F80000 +C664:000000281F2820A820B820A81F2804287FA8000007F8000807F8040007F80000 +C665:000000281F2820A820B820A81F2804287FA800003EF802083E0820083E080000 +C666:000000281F2820A820B820A81F2804287FA800003EF802883E8820883EF80000 +C667:000000281F2820A820B820A81F2804287FA800003E8802883EF820883EF80000 +C668:000000281F2820A820B820A81F2804287FA800001F0801081F0810141F620000 +C669:000000281F2820A820B820A81F2804287FA800003EF802803EF820803EF80000 +C66A:000000281F2820A820B820A81F2804287FA800003EFC02483E4820483EFC0000 +C66B:000000281F2820A820B820A81F2804287FA800001F08017F1F1C10221F1C0000 +C66C:000000281F2820A820B820A81F2804287FA8000003F802080208020803F80000 +C66D:000000281F2820A820B820A81F2804287FA800000208020803F8020803F80000 +C66E:000000281F2820A820B820A81F2804287FA80000110811081F0811141F620000 +C66F:000000281F2820A820B820A81F2804287FA80000001000100010006801840000 +C670:000000281F2820A820B820A81F2804287FA800000048004800A8011406620000 +C671:000000281F2820A820B820A81F2804287FA80000000003F00408040803F00000 +C672:000000281F2820A820B820A81F2804287FA8000003F80020002000D003080000 +C673:000000281F2820A820B820A81F2804287FA80000004003F8004000A003180000 +C674:000000281F2820A820B820A81F2804287FA8000003F8000803F8000800080000 +C675:000000281F2820A820B820A81F2804287FA8000003F8020003F8020003F80000 +C676:000000281F2820A820B820A81F2804287FA8000000000FF8022002200FF80000 +C677:000000281F2820A820B820A81F2804287FA8000000800FF803E0041003E00000 +C678:0000000800081F08208840484048404820881F08040804087FE8000800080000 +C679:000000081F082088208820881F0804087FE8000007F800080008000800080000 +C67A:000000081F082088208820881F0804087FE8000000003EF80208020802080000 +C67B:000000081F082088208820881F0804087FE8000000001F080108011401620000 +C67C:000000081F082088208820881F0804087FE8000008000800080008000FF80000 +C67D:000000081F082088208820881F0804087FE80000000010F8101010301ECC0000 +C67E:000000081F082088208820881F0804087FE800000808087F081C08220F9C0000 +C67F:000000081F082088208820881F0804087FE8000003F802000200020003F80000 +C680:000000081F082088208820881F0804087FE8000007F8000807F8040007F80000 +C681:000000081F082088208820881F0804087FE800003EF802083E0820083E080000 +C682:000000081F082088208820881F0804087FE800003EF802883E8820883EF80000 +C683:000000081F082088208820881F0804087FE800003E8802883EF820883EF80000 +C684:000000081F082088208820881F0804087FE800001F0801081F0810141F620000 +C685:000000081F082088208820881F0804087FE800003EF802803EF820803EF80000 +C686:000000081F082088208820881F0804087FE800003EFC02483E4820483EFC0000 +C687:000000081F082088208820881F0804087FE800001F08017F1F1C10221F1C0000 +C688:000000081F082088208820881F0804087FE8000003F802080208020803F80000 +C689:000000081F082088208820881F0804087FE800000208020803F8020803F80000 +C68A:000000081F082088208820881F0804087FE80000110811081F0811141F620000 +C68B:000000081F082088208820881F0804087FE80000001000100010006801840000 +C68C:000000081F082088208820881F0804087FE800000048004800A8011406620000 +C68D:000000081F082088208820881F0804087FE80000000003F00408040803F00000 +C68E:000000081F082088208820881F0804087FE8000003F80020002000D003080000 +C68F:000000081F082088208820881F0804087FE80000004003F8004000A003180000 +C690:000000081F082088208820881F0804087FE8000003F8000803F8000800080000 +C691:000000081F082088208820881F0804087FE8000003F8020003F8020003F80000 +C692:000000081F082088208820881F0804087FE8000000000FF8022002200FF80000 +C693:000000081F082088208820881F0804087FE8000000800FF803E0041003E00000 +C694:000007C00820101010101010082007C0000004400440044004407FFC00000000 +C695:000007C008200820082007C0044004407FFC00001FF000100010001000100000 +C696:000007C008200820082007C0044004407FFC000000003EF80208020802080000 +C697:000007C008200820082007C0044004407FFC000000001E100210022802C40000 +C698:000007C008200820082007C0044004407FFC000000001000100010001FF00000 +C699:000007C008200820082007C0044004407FFC0000000020F8201020303ECC0000 +C69A:000007C008200820082007C0044004407FFC0000202021FC207020883E700000 +C69B:000007C008200820082007C0044004407FFC00001FF01000100010001FF00000 +C69C:000007C008200820082007C0044004407FFC00001FF000101FF010001FF00000 +C69D:000007C008200820082007C0044004407FFC00003EF802083E0820083E080000 +C69E:000007C008200820082007C0044004407FFC00003EF802883E8820883EF80000 +C69F:000007C008200820082007C0044004407FFC00003E8802883EF820883EF80000 +C6A0:000007C008200820082007C0044004407FFC00003E1002103E1020283EC40000 +C6A1:000007C008200820082007C0044004407FFC00003EF802803EF820803EF80000 +C6A2:000007C008200820082007C0044004407FFC00003EFC02483E4820483EFC0000 +C6A3:000007C008200820082007C0044004407FFC00003E2003FC3E7020883E700000 +C6A4:000007C008200820082007C0044004407FFC00001FF01010101010101FF00000 +C6A5:000007C008200820082007C0044004407FFC0000101010101FF010101FF00000 +C6A6:000007C008200820082007C0044004407FFC0000222022203E2022503E880000 +C6A7:000007C008200820082007C0044004407FFC000000000100010002800C400000 +C6A8:000007C008200820082007C0044004407FFC00000000024002400DA033100000 +C6A9:000007C008200820082007C0044004407FFC0000000007C00820082007C00000 +C6AA:000007C008200820082007C0044004407FFC0000000007E00080014006200000 +C6AB:000007C008200820082007C0044004407FFC0000008007E00080014006200000 +C6AC:000007C008200820082007C0044004407FFC00001FF000101FF0001000100000 +C6AD:000007C008200820082007C0044004407FFC00001FF010001FF010001FF00000 +C6AE:000007C008200820082007C0044004407FFC000000001FF0044004401FF00000 +C6AF:000007C008200820082007C0044004407FFC000001001FF007C0082007C00000 +C6B0:0000000007C00820101010101010082007C000003FF801000100010001000000 +C6B1:000007C008200820082007C000007FFC010001001FF000100010001000100000 +C6B2:000007C008200820082007C000007FFC0100010000003EF80208020802080000 +C6B3:000007C008200820082007C000007FFC0100010000001E100210022802C40000 +C6B4:000007C008200820082007C0000000007FFC010001001100100010001FF00000 +C6B5:000007C008200820082007C000007FFC01000100000020F8201020303ECC0000 +C6B6:000007C008200820082007C000007FFC01000100202021FC207020883E700000 +C6B7:000007C008200820082007C000007FFC010001001FF01000100010001FF00000 +C6B8:000007C008200820082007C000007FFC010001001FF000101FF010001FF00000 +C6B9:000007C008200820082007C000007FFC010001003EF802083E0820083E080000 +C6BA:000007C008200820082007C000007FFC010001003EF802883E8820883EF80000 +C6BB:000007C008200820082007C000007FFC010001003E8802883EF820883EF80000 +C6BC:000007C008200820082007C000007FFC010001003E1002103E1020283EC40000 +C6BD:000007C008200820082007C000007FFC010001003EF802803EF820803EF80000 +C6BE:000007C008200820082007C000007FFC010001003EFC02483E4820483EFC0000 +C6BF:000007C008200820082007C000007FFC010001003E2003FC3E7020883E700000 +C6C0:000007C008200820082007C000007FFC010001001FF01010101010101FF00000 +C6C1:000007C008200820082007C000007FFC01000100101010101FF010101FF00000 +C6C2:000007C008200820082007C000007FFC01000100222022203E2022503E880000 +C6C3:000007C008200820082007C000007FFC0100010000000100010002800C400000 +C6C4:000007C008200820082007C000007FFC010001000000024002400DA033100000 +C6C5:000007C008200820082007C000007FFC01000100000007C00820082007C00000 +C6C6:000007C008200820082007C000007FFC01000100000007E00080014006200000 +C6C7:000007C008200820082007C000007FFC01000100008007E00080014006200000 +C6C8:000007C008200820082007C000007FFC010001001FF000101FF0001000100000 +C6C9:000007C008200820082007C000007FFC010001001FF010001FF010001FF00000 +C6CA:000007C008200820082007C000007FFC0100010000001FF0044004401FF00000 +C6CB:000007C008200820082007C000007FFC0100010001001FF007C0082007C00000 +C6CC:000000081F08208840484048404820881F0800087FE8040804F8040804080000 +C6CD:1F082088208820881F0800087FE8027802080000000007F80008000800080000 +C6CE:1F082088208820881F0800087FE802780208000000003EF80208020802080000 +C6CF:1F082088208820881F0800087FE802780208000000001F080108011401620000 +C6D0:1F082088208820881F08000800087FE80278020802081000100010001FF80000 +C6D1:1F082088208820881F0800087FE8027802080000000020F8201020303ECC0000 +C6D2:1F082088208820881F0800087FE8027802080000202021FC207020883E700000 +C6D3:1F082088208820881F0800087FE802780208000003F802000200020003F80000 +C6D4:1F082088208820881F0800087FE802780208000007F8000807F8040007F80000 +C6D5:1F082088208820881F0800087FE80278020800003EF802083E0820083E080000 +C6D6:1F082088208820881F0800087FE80278020800003EF802883E8820883EF80000 +C6D7:1F082088208820881F0800087FE80278020800003E8802883EF820883EF80000 +C6D8:1F082088208820881F0800087FE80278020800000F8800880F8808140FA20000 +C6D9:1F082088208820881F0800087FE80278020800003EF802803EF820803EF80000 +C6DA:1F082088208820881F0800087FE80278020800003EFC02483E4820483EFC0000 +C6DB:1F082088208820881F0800087FE80278020800003E1002FE3E3820443E380000 +C6DC:1F082088208820881F0800087FE802780208000003F802080208020803F80000 +C6DD:1F082088208820881F0800087FE80278020800000208020803F8020803F80000 +C6DE:1F082088208820881F0800087FE8027802080000210821083F0821143F620000 +C6DF:1F082088208820881F0800087FE8027802080000001000100010006801840000 +C6E0:1F082088208820881F0800087FE80278020800000048004800A8011406620000 +C6E1:1F082088208820881F0800087FE8027802080000000003F00408040803F00000 +C6E2:1F082088208820881F0800087FE802780208000003F80020002000D003080000 +C6E3:1F082088208820881F0800087FE8027802080000004003F8004000A003180000 +C6E4:1F082088208820881F0800087FE802780208000003F8000803F8000800080000 +C6E5:1F082088208820881F0800087FE802780208000003F8020003F8020003F80000 +C6E6:1F082088208820881F0800087FE802780208000000000FF8022002200FF80000 +C6E7:1F082088208820881F0800087FE802780208000000800FF803E0041003E00000 +C6E8:0000000A1F0A208A404A404A404A208A1F0A000A7FEA040A047A040A040A0000 +C6E9:1F2820A820A820A81F2800287FA805E804280000000007F80008000800080000 +C6EA:1F2820A820A820A81F2800287FA805E80428000000003EF80208020802080000 +C6EB:1F2820A820A820A81F2800287FA805E80428000000001F080108011401620000 +C6EC:1F2820A820A820A81F28002800287FA8042805E804281428100010001FF80000 +C6ED:1F2820A820A820A81F2800287FA805E804280000000020F8201020303ECC0000 +C6EE:1F2820A820A820A81F2800287FA805E804280000202021FC207020883E700000 +C6EF:1F2820A820A820A81F2800287FA805E80428000003F802000200020003F80000 +C6F0:1F2820A820A820A81F2800287FA805E80428000007F8000807F8040007F80000 +C6F1:1F2820A820A820A81F2800287FA805E8042800003EF802083E0820083E080000 +C6F2:1F2820A820A820A81F2800287FA805E8042800003EF802883E8820883EF80000 +C6F3:1F2820A820A820A81F2800287FA805E8042800003E8802883EF820883EF80000 +C6F4:1F2820A820A820A81F2800287FA805E8042800000F8800880F8808140FA20000 +C6F5:1F2820A820A820A81F2800287FA805E8042800003EF802803EF820803EF80000 +C6F6:1F2820A820A820A81F2800287FA805E8042800003EFC02483E4820483EFC0000 +C6F7:1F2820A820A820A81F2800287FA805E8042800003E1002FE3E3820443E380000 +C6F8:1F2820A820A820A81F2800287FA805E80428000003F802080208020803F80000 +C6F9:1F2820A820A820A81F2800287FA805E8042800000208020803F8020803F80000 +C6FA:1F2820A820A820A81F2800287FA805E804280000210821083F0821143F620000 +C6FB:1F2820A820A820A81F2800287FA805E804280000001000100010006801840000 +C6FC:1F2820A820A820A81F2800287FA805E8042800000048004800A8011406620000 +C6FD:1F2820A820A820A81F2800287FA805E804280000000003F00408040803F00000 +C6FE:1F2820A820A820A81F2800287FA805E80428000003F80020002000D003080000 +C6FF:1F2820A820A820A81F2800287FA805E804280000004003F8004000A003180000 +C700:1F2820A820A820A81F2800287FA805E80428000003F8000803F8000800080000 +C701:1F2820A820A820A81F2800287FA805E80428000003F8020003F8020003F80000 +C702:1F2820A820A820A81F2800287FA805E80428000000000FF8022002200FF80000 +C703:1F2820A820A820A81F2800287FA805E80428000000800FF803E0041003E00000 +C704:000000081F08208840484048404820881F0800087FE804080408040804080000 +C705:1F082088208820881F0800087FE8020802000000000007F80008000800080000 +C706:1F082088208820881F0800087FE802080200000000003EF80208020802080000 +C707:1F082088208820881F0800087FE802080200000000001F080108011401620000 +C708:1F082088208820881F08000800087FE80208020802081008100010001FF80000 +C709:1F082088208820881F0800087FE8020802000000000020F8201020303ECC0000 +C70A:1F082088208820881F0800087FE8020802000000202021FC207020883E700000 +C70B:1F082088208820881F0800087FE802080200000003F802000200020003F80000 +C70C:1F082088208820881F0800087FE802080200000007F8000807F8040007F80000 +C70D:1F082088208820881F0800087FE80208020000003EF802083E0820083E080000 +C70E:1F082088208820881F0800087FE80208020000003EF802883E8820883EF80000 +C70F:1F082088208820881F0800087FE80208020000003E8802883EF820883EF80000 +C710:1F082088208820881F0800087FE80208020000000F8800880F8808140FA20000 +C711:1F082088208820881F0800087FE80208020000003EF802803EF820803EF80000 +C712:1F082088208820881F0800087FE80208020000003EFC02483E4820483EFC0000 +C713:1F082088208820881F0800087FE80208020000003E1002FE3E3820443E380000 +C714:1F082088208820881F0800087FE802080200000003F802080208020803F80000 +C715:1F082088208820881F0800087FE80208020000000208020803F8020803F80000 +C716:1F082088208820881F0800087FE8020802000000210821083F0821143F620000 +C717:1F082088208820881F0800087FE8020802000000001000100010006801840000 +C718:1F082088208820881F0800087FE80208020000000048004800A8011406620000 +C719:1F082088208820881F0800087FE8020802000000000003F00408040803F00000 +C71A:1F082088208820881F0800087FE802080200000003F80020002000D003080000 +C71B:1F082088208820881F0800087FE8020802000000004003F8004000A003180000 +C71C:1F082088208820881F0800087FE802080200000003F8000803F8000800080000 +C71D:1F082088208820881F0800087FE802080200000003F8020003F8020003F80000 +C71E:1F082088208820881F0800087FE802080200000000000FF8022002200FF80000 +C71F:1F082088208820881F0800087FE802080200000000800FF803E0041003E00000 +C720:0000000007C00820101010101010082007C000007FFC04400440044004400000 +C721:000007C008200820082007C000007FFC044004401FF000100010001000100000 +C722:000007C008200820082007C000007FFC0440044000003EF80208020802080000 +C723:000007C008200820082007C000007FFC0440044000001E100210022802C40000 +C724:000007C008200820082007C0000000007FFC044004401440100010001FF00000 +C725:000007C008200820082007C000007FFC04400440000020F8201020303ECC0000 +C726:000007C008200820082007C000007FFC04400440202021FC207020883E700000 +C727:000007C008200820082007C000007FFC044004401FF01000100010001FF00000 +C728:000007C008200820082007C000007FFC044004401FF000101FF010001FF00000 +C729:000007C008200820082007C000007FFC044004403EF802083E0820083E080000 +C72A:000007C008200820082007C000007FFC044004403EF802883E8820883EF80000 +C72B:000007C008200820082007C000007FFC044004403E8802883EF820883EF80000 +C72C:000007C008200820082007C000007FFC044004403E1002103E1020283EC40000 +C72D:000007C008200820082007C000007FFC044004403EF802803EF820803EF80000 +C72E:000007C008200820082007C000007FFC044004403EFC02483E4820483EFC0000 +C72F:000007C008200820082007C000007FFC044004403E2003FC3E7020883E700000 +C730:000007C008200820082007C000007FFC044004401FF01010101010101FF00000 +C731:000007C008200820082007C000007FFC04400440101010101FF010101FF00000 +C732:000007C008200820082007C000007FFC04400440222022203E2022503E880000 +C733:000007C008200820082007C000007FFC0440044000000100010002800C400000 +C734:000007C008200820082007C000007FFC044004400000024002400DA033100000 +C735:000007C008200820082007C000007FFC04400440000007C00820082007C00000 +C736:000007C008200820082007C000007FFC04400440000007E00080014006200000 +C737:000007C008200820082007C000007FFC04400440008007E00080014006200000 +C738:000007C008200820082007C000007FFC044004401FF000101FF0001000100000 +C739:000007C008200820082007C000007FFC044004401FF010001FF010001FF00000 +C73A:000007C008200820082007C000007FFC0440044000001FF0044004401FF00000 +C73B:000007C008200820082007C000007FFC0440044001001FF007C0082007C00000 +C73C:000007C00820101010101010082007C00000000000007FFC0000000000000000 +C73D:000007C008200820082007C0000000007FFC00001FF000100010001000100000 +C73E:000007C008200820082007C0000000007FFC000000003EF80208020802080000 +C73F:000007C008200820082007C0000000007FFC000000001E100210022802C40000 +C740:000007C008200820082007C0000000007FFC000000001000100010001FF00000 +C741:000007C008200820082007C0000000007FFC0000000020F8201020303ECC0000 +C742:000007C008200820082007C0000000007FFC0000202021FC207020883E700000 +C743:000007C008200820082007C0000000007FFC00001FF01000100010001FF00000 +C744:000007C008200820082007C0000000007FFC00001FF000101FF010001FF00000 +C745:000007C008200820082007C0000000007FFC00003EF802083E0820083E080000 +C746:000007C008200820082007C0000000007FFC00003EF802883E8820883EF80000 +C747:000007C008200820082007C0000000007FFC00003E8802883EF820883EF80000 +C748:000007C008200820082007C0000000007FFC00003E1002103E1020283EC40000 +C749:000007C008200820082007C0000000007FFC00003EF802803EF820803EF80000 +C74A:000007C008200820082007C0000000007FFC00003EFC02483E4820483EFC0000 +C74B:000007C008200820082007C0000000007FFC00003E2003FC3E7020883E700000 +C74C:000007C008200820082007C0000000007FFC00001FF01010101010101FF00000 +C74D:000007C008200820082007C0000000007FFC0000101010101FF010101FF00000 +C74E:000007C008200820082007C0000000007FFC0000222022203E2022503E880000 +C74F:000007C008200820082007C0000000007FFC000000000100010002800C400000 +C750:000007C008200820082007C0000000007FFC00000000024002400DA033100000 +C751:000007C008200820082007C0000000007FFC0000000007C00820082007C00000 +C752:000007C008200820082007C0000000007FFC0000000007E00080014006200000 +C753:000007C008200820082007C0000000007FFC0000008007E00080014006200000 +C754:000007C008200820082007C0000000007FFC00001FF000101FF0001000100000 +C755:000007C008200820082007C0000000007FFC00001FF010001FF010001FF00000 +C756:000007C008200820082007C0000000007FFC000000001FF0044004401FF00000 +C757:000007C008200820082007C0000000007FFC000001001FF007C0082007C00000 +C758:0000000800081F08208840484048404820881F0800087FE80008000800080000 +C759:000000081F082088208820881F0800087FE8000007F800080008000800080000 +C75A:000000081F082088208820881F0800087FE8000000003EF80208020802080000 +C75B:000000081F082088208820881F0800087FE8000000001F080108011401620000 +C75C:000000081F082088208820881F0800087FE8000008000800080008000FF80000 +C75D:000000081F082088208820881F0800087FE80000000010F8101010301ECC0000 +C75E:000000081F082088208820881F0800087FE800000808087F081C08220F9C0000 +C75F:000000081F082088208820881F0800087FE8000003F802000200020003F80000 +C760:000000081F082088208820881F0800087FE8000007F8000807F8040007F80000 +C761:000000081F082088208820881F0800087FE800003EF802083E0820083E080000 +C762:000000081F082088208820881F0800087FE800003EF802883E8820883EF80000 +C763:000000081F082088208820881F0800087FE800003E8802883EF820883EF80000 +C764:000000081F082088208820881F0800087FE800001F0801081F0810141F620000 +C765:000000081F082088208820881F0800087FE800003EF802803EF820803EF80000 +C766:000000081F082088208820881F0800087FE800003EFC02483E4820483EFC0000 +C767:000000081F082088208820881F0800087FE800001F08017F1F1C10221F1C0000 +C768:000000081F082088208820881F0800087FE8000003F802080208020803F80000 +C769:000000081F082088208820881F0800087FE800000208020803F8020803F80000 +C76A:000000081F082088208820881F0800087FE80000110811081F0811141F620000 +C76B:000000081F082088208820881F0800087FE80000001000100010006801840000 +C76C:000000081F082088208820881F0800087FE800000048004800A8011406620000 +C76D:000000081F082088208820881F0800087FE80000000003F00408040803F00000 +C76E:000000081F082088208820881F0800087FE8000003F80020002000D003080000 +C76F:000000081F082088208820881F0800087FE80000004003F8004000A003180000 +C770:000000081F082088208820881F0800087FE8000003F8000803F8000800080000 +C771:000000081F082088208820881F0800087FE8000003F8020003F8020003F80000 +C772:000000081F082088208820881F0800087FE8000000000FF8022002200FF80000 +C773:000000081F082088208820881F0800087FE8000000800FF803E0041003E00000 +C774:00000000000800081E08210840884088408821081E0800080008000800080000 +C775:000000081E0821082108210821081E0800080000000007F80008000800080000 +C776:000000081E0821082108210821081E080008000000003EF80208020802080000 +C777:000000081E0821082108210821081E080008000000001F080108011401620000 +C778:000000081E0821082108210821081E080008000800001000100010001FF80000 +C779:000000081E0821082108210821081E0800080000000020F8201020303ECC0000 +C77A:000000081E0821082108210821081E0800080000202021FC207020883E700000 +C77B:000000081E0821082108210821081E080008000003F802000200020003F80000 +C77C:000000081E0821082108210821081E080008000007F8000807F8040007F80000 +C77D:000000081E0821082108210821081E08000800003EF802083E0820083E080000 +C77E:000000081E0821082108210821081E08000800003EF802883E8820883EF80000 +C77F:000000081E0821082108210821081E08000800003E8802883EF820883EF80000 +C780:000000081E0821082108210821081E08000800000F8800880F8808140FA20000 +C781:000000081E0821082108210821081E08000800003EF802803EF820803EF80000 +C782:000000081E0821082108210821081E08000800003EFC02483E4820483EFC0000 +C783:000000081E0821082108210821081E08000800003E1002FE3E3820443E380000 +C784:000000081E0821082108210821081E080008000003F802080208020803F80000 +C785:000000081E0821082108210821081E08000800000208020803F8020803F80000 +C786:000000081E0821082108210821081E0800080000210821083F0821143F620000 +C787:000000081E0821082108210821081E0800080000001000100010006801840000 +C788:000000081E0821082108210821081E08000800000048004800A8011406620000 +C789:000000081E0821082108210821081E0800080000000003F00408040803F00000 +C78A:000000081E0821082108210821081E080008000003F80020002000D003080000 +C78B:000000081E0821082108210821081E0800080000004003F8004000A003180000 +C78C:000000081E0821082108210821081E080008000003F8000803F8000800080000 +C78D:000000081E0821082108210821081E080008000003F8020003F8020003F80000 +C78E:000000081E0821082108210821081E080008000000000FF8022002200FF80000 +C78F:000000081E0821082108210821081E080008000000800FF803E0041003E00000 +C790:00000000001000103F9001100110021E06100910309000100010001000100000 +C791:0000000800087E080408040E1A0861080008000007F800080008000800080000 +C792:0000000800087E080408040E1A0861080008000000003EF80208020802080000 +C793:0000000800087E080408040E1A0861080008000000001F080108011401620000 +C794:0000000800087E080408040E1A0861080008000808000800080008000FF80000 +C795:0000000800087E080408040E1A08610800080000000010F8101010301ECC0000 +C796:0000000800087E080408040E1A086108000800000808087F081C08220F9C0000 +C797:0000000800087E080408040E1A0861080008000003F802000200020003F80000 +C798:0000000800087E080408040E1A0861080008000007F8000807F8040007F80000 +C799:0000000800087E080408040E1A086108000800003EF802083E0820083E080000 +C79A:0000000800087E080408040E1A086108000800003EF802883E8820883EF80000 +C79B:0000000800087E080408040E1A086108000800003E8802883EF820883EF80000 +C79C:0000000800087E080408040E1A086108000800001F0801081F0810141F620000 +C79D:0000000800087E080408040E1A086108000800003EF802803EF820803EF80000 +C79E:0000000800087E080408040E1A086108000800003EFC02483E4820483EFC0000 +C79F:0000000800087E080408040E1A086108000800001F08017F1F1C10221F1C0000 +C7A0:0000000800087E080408040E1A0861080008000003F802080208020803F80000 +C7A1:0000000800087E080408040E1A086108000800000208020803F8020803F80000 +C7A2:0000000800087E080408040E1A08610800080000110811081F0811141F620000 +C7A3:0000000800087E080408040E1A08610800080000001000100010006801840000 +C7A4:0000000800087E080408040E1A086108000800000048004800A8011406620000 +C7A5:0000000800087E080408040E1A08610800080000000003F00408040803F00000 +C7A6:0000000800087E080408040E1A0861080008000003F80020002000D003080000 +C7A7:0000000800087E080408040E1A08610800080000004003F8004000A003180000 +C7A8:0000000800087E080408040E1A0861080008000003F8000803F8000800080000 +C7A9:0000000800087E080408040E1A0861080008000003F8020003F8020003F80000 +C7AA:0000000800087E080408040E1A0861080008000000000FF8022002200FF80000 +C7AB:0000000800087E080408040E1A0861080008000000800FF803E0041003E00000 +C7AC:00000000001200123F9201120112021E06120912309200120012001200120000 +C7AD:0000002800287E28042804381A2861280028000007F800080008000800080000 +C7AE:0000002800287E28042804381A2861280028000000003EF80208020802080000 +C7AF:0000002800287E28042804381A2861280028000000003E100210022802C40000 +C7B0:0000002800287E28042804381A2861280028002808000800080008000FF80000 +C7B1:0000002800287E28042804381A28612800280000000020F8201020303ECC0000 +C7B2:0000002800287E28042804381A28612800280000202021FC207020883E700000 +C7B3:0000002800287E28042804381A2861280028000003F802000200020003F80000 +C7B4:0000002800287E28042804381A2861280028000007F8000807F8040007F80000 +C7B5:0000002800287E28042804381A286128002800003EF802083E0820083E080000 +C7B6:0000002800287E28042804381A286128002800003EF802883E8820883EF80000 +C7B7:0000002800287E28042804381A286128002800003E8802883EF820883EF80000 +C7B8:0000002800287E28042804381A286128002800001F0801081F0810141F620000 +C7B9:0000002800287E28042804381A286128002800003EF802803EF820803EF80000 +C7BA:0000002800287E28042804381A286128002800003EFC02483E4820483EFC0000 +C7BB:0000002800287E28042804381A286128002800003E1002FE3E3820443E380000 +C7BC:0000002800287E28042804381A2861280028000003F802080208020803F80000 +C7BD:0000002800287E28042804381A286128002800000208020803F8020803F80000 +C7BE:0000002800287E28042804381A28612800280000110811081F0811141F620000 +C7BF:0000002800287E28042804381A28612800280000000800080008003400C20000 +C7C0:0000002800287E28042804381A286128002800000048004800A8011406620000 +C7C1:0000002800287E28042804381A28612800280000000001F00208020801F00000 +C7C2:0000002800287E28042804381A2861280028000003F80020002000D003080000 +C7C3:0000002800287E28042804381A28612800280000004003F8004000A003180000 +C7C4:0000002800287E28042804381A2861280028000003F8000803F8000800080000 +C7C5:0000002800287E28042804381A2861280028000003F8020003F8020003F80000 +C7C6:0000002800287E28042804381A2861280028000000000FF8022002200FF80000 +C7C7:0000002800287E28042804381A2861280028000000800FF803E0041003E00000 +C7C8:00000000001000103F900110011E02100610091E309000100010001000100000 +C7C9:0000000800087E08040E04081A0E61080008000007F800080008000800080000 +C7CA:0000000800087E08040E04081A0E61080008000000003EF80208020802080000 +C7CB:0000000800087E08040E04081A0E61080008000000001F080108011401620000 +C7CC:0000000800087E08040E04081A0E61080008000008000800080008000FF80000 +C7CD:0000000800087E08040E04081A0E610800080000000010F8101010301ECC0000 +C7CE:0000000800087E08040E04081A0E6108000800000808087F081C08220F9C0000 +C7CF:0000000800087E08040E04081A0E61080008000003F802000200020003F80000 +C7D0:0000000800087E08040E04081A0E61080008000007F8000807F8040007F80000 +C7D1:0000000800087E08040E04081A0E6108000800003EF802083E0820083E080000 +C7D2:0000000800087E08040E04081A0E6108000800003EF802883E8820883EF80000 +C7D3:0000000800087E08040E04081A0E6108000800003E8802883EF820883EF80000 +C7D4:0000000800087E08040E04081A0E6108000800001F0801081F0810141F620000 +C7D5:0000000800087E08040E04081A0E6108000800003EF802803EF820803EF80000 +C7D6:0000000800087E08040E04081A0E6108000800003EFC02483E4820483EFC0000 +C7D7:0000000800087E08040E04081A0E6108000800001F08017F1F1C10221F1C0000 +C7D8:0000000800087E08040E04081A0E61080008000003F802080208020803F80000 +C7D9:0000000800087E08040E04081A0E6108000800000208020803F8020803F80000 +C7DA:0000000800087E08040E04081A0E610800080000110811081F0811141F620000 +C7DB:0000000800087E08040E04081A0E610800080000001000100010006801840000 +C7DC:0000000800087E08040E04081A0E6108000800000048004800A8011406620000 +C7DD:0000000800087E08040E04081A0E610800080000000003F00408040803F00000 +C7DE:0000000800087E08040E04081A0E61080008000003F80020002000D003080000 +C7DF:0000000800087E08040E04081A0E610800080000004003F8004000A003180000 +C7E0:0000000800087E08040E04081A0E61080008000003F8000803F8000800080000 +C7E1:0000000800087E08040E04081A0E61080008000003F8020003F8020003F80000 +C7E2:0000000800087E08040E04081A0E61080008000000000FF8022002200FF80000 +C7E3:0000000800087E08040E04081A0E61080008000000800FF803E0041003E00000 +C7E4:00000000001200123F920112011E02120612091E309200120012001200120000 +C7E5:0000002800287E28043804281A3861280028000007F800080008000800080000 +C7E6:0000002800287E28043804281A3861280028000000003EF80208020802080000 +C7E7:0000002800287E28043804281A3861280028000000003E100210022802C40000 +C7E8:0000002800287E28043804281A3861280028002808000800080008000FF80000 +C7E9:0000002800287E28043804281A38612800280000000020F8201020303ECC0000 +C7EA:0000002800287E28043804281A38612800280000202021FC207020883E700000 +C7EB:0000002800287E28043804281A3861280028000003F802000200020003F80000 +C7EC:0000002800287E28043804281A3861280028000007F8000807F8040007F80000 +C7ED:0000002800287E28043804281A386128002800003EF802083E0820083E080000 +C7EE:0000002800287E28043804281A386128002800003EF802883E8820883EF80000 +C7EF:0000002800287E28043804281A386128002800003E8802883EF820883EF80000 +C7F0:0000002800287E28043804281A386128002800001F0801081F0810141F620000 +C7F1:0000002800287E28043804281A386128002800003EF802803EF820803EF80000 +C7F2:0000002800287E28043804281A386128002800003EFC02483E4820483EFC0000 +C7F3:0000002800287E28043804281A386128002800003E1002FE3E3820443E380000 +C7F4:0000002800287E28043804281A3861280028000003F802080208020803F80000 +C7F5:0000002800287E28043804281A386128002800000208020803F8020803F80000 +C7F6:0000002800287E28043804281A38612800280000110811081F0811141F620000 +C7F7:0000002800287E28043804281A38612800280000000800080008003400C20000 +C7F8:0000002800287E28043804281A386128002800000048004800A8011406620000 +C7F9:0000002800287E28043804281A38612800280000000001F00208020801F00000 +C7FA:0000002800287E28043804281A3861280028000003F80020002000D003080000 +C7FB:0000002800287E28043804281A38612800280000004003F8004000A003180000 +C7FC:0000002800287E28043804281A3861280028000003F8000803F8000800080000 +C7FD:0000002800287E28043804281A3861280028000003F8020003F8020003F80000 +C7FE:0000002800287E28043804281A3861280028000000000FF8022002200FF80000 +C7FF:0000002800287E28043804281A3861280028000000800FF803E0041003E00000 +C800:00000000000200023F8201020102021E06020902308200020002000200020000 +C801:0000000800087E08040804381A08610800080000000007F80008000800080000 +C802:0000000800087E08040804381A0861080008000000003EF80208020802080000 +C803:0000000800087E08040804381A0861080008000000001F080108011401620000 +C804:0000000800087E08040804381A0861080008000000001000100010001FF80000 +C805:0000000800087E08040804381A08610800080000000020F8201020303ECC0000 +C806:0000000800087E08040804381A08610800080000202021FC207020883E700000 +C807:0000000800087E08040804381A0861080008000003F802000200020003F80000 +C808:0000000800087E08040804381A0861080008000007F8000807F8040007F80000 +C809:0000000800087E08040804381A086108000800003EF802083E0820083E080000 +C80A:0000000800087E08040804381A086108000800003EF802883E8820883EF80000 +C80B:0000000800087E08040804381A086108000800003E8802883EF820883EF80000 +C80C:0000000800087E08040804381A086108000800000F8800880F8808140FA20000 +C80D:0000000800087E08040804381A086108000800003EF802803EF820803EF80000 +C80E:0000000800087E08040804381A086108000800003EFC02483E4820483EFC0000 +C80F:0000000800087E08040804381A086108000800003E1002FE3E3820443E380000 +C810:0000000800087E08040804381A0861080008000003F802080208020803F80000 +C811:0000000800087E08040804381A086108000800000208020803F8020803F80000 +C812:0000000800087E08040804381A08610800080000210821083F0821143F620000 +C813:0000000800087E08040804381A08610800080000001000100010006801840000 +C814:0000000800087E08040804381A086108000800000048004800A8011406620000 +C815:0000000800087E08040804381A08610800080000000003F00408040803F00000 +C816:0000000800087E08040804381A0861080008000003F80020002000D003080000 +C817:0000000800087E08040804381A08610800080000004003F8004000A003180000 +C818:0000000800087E08040804381A0861080008000003F8000803F8000800080000 +C819:0000000800087E08040804381A0861080008000003F8020003F8020003F80000 +C81A:0000000800087E08040804381A0861080008000000000FF8022002200FF80000 +C81B:0000000800087E08040804381A0861080008000000800FF803E0041003E00000 +C81C:00000000000A000A3F8A010A010A023A060A090A308A000A000A000A000A0000 +C81D:0000002800287E28042804E81A2861280028000007F800080008000800080000 +C81E:0000002800287E28042804E81A2861280028000000003EF80208020802080000 +C81F:0000002800287E28042804E81A2861280028000000003E100210022802C40000 +C820:0000002800287E28042804E81A2861280028000008000800080008000FF80000 +C821:0000002800287E28042804E81A28612800280000000020F8201020303ECC0000 +C822:0000002800287E28042804E81A28612800280000202021FC207020883E700000 +C823:0000002800287E28042804E81A2861280028000003F802000200020003F80000 +C824:0000002800287E28042804E81A2861280028000007F8000807F8040007F80000 +C825:0000002800287E28042804E81A286128002800003EF802083E0820083E080000 +C826:0000002800287E28042804E81A286128002800003EF802883E8820883EF80000 +C827:0000002800287E28042804E81A286128002800003E8802883EF820883EF80000 +C828:0000002800287E28042804E81A286128002800001F0801081F0810141F620000 +C829:0000002800287E28042804E81A286128002800003EF802803EF820803EF80000 +C82A:0000002800287E28042804E81A286128002800003EFC02483E4820483EFC0000 +C82B:0000002800287E28042804E81A286128002800003E1002FE3E3820443E380000 +C82C:0000002800287E28042804E81A2861280028000003F802080208020803F80000 +C82D:0000002800287E28042804E81A286128002800000208020803F8020803F80000 +C82E:0000002800287E28042804E81A28612800280000110811081F0811141F620000 +C82F:0000002800287E28042804E81A28612800280000000800080008003400C20000 +C830:0000002800287E28042804E81A286128002800000048004800A8011406620000 +C831:0000002800287E28042804E81A28612800280000000001F00208020801F00000 +C832:0000002800287E28042804E81A2861280028000003F80020002000D003080000 +C833:0000002800287E28042804E81A28612800280000004003F8004000A003180000 +C834:0000002800287E28042804E81A2861280028000003F8000803F8000800080000 +C835:0000002800287E28042804E81A2861280028000003F8020003F8020003F80000 +C836:0000002800287E28042804E81A2861280028000000000FF8022002200FF80000 +C837:0000002800287E28042804E81A2861280028000000800FF803E0041003E00000 +C838:00000000000200023F820102011E02020602091E308200020002000200020000 +C839:0000000800087E08043804081A38610800080000000007F80008000800080000 +C83A:0000000800087E08043804081A3861080008000000003EF80208020802080000 +C83B:0000000800087E08043804081A3861080008000000001F080108011401620000 +C83C:0000000800087E08043804081A3861080008000800001000100010001FF80000 +C83D:0000000800087E08043804081A38610800080000000020F8201020303ECC0000 +C83E:0000000800087E08043804081A38610800080000202021FC207020883E700000 +C83F:0000000800087E08043804081A3861080008000003F802000200020003F80000 +C840:0000000800087E08043804081A3861080008000007F8000807F8040007F80000 +C841:0000000800087E08043804081A386108000800003EF802083E0820083E080000 +C842:0000000800087E08043804081A386108000800003EF802883E8820883EF80000 +C843:0000000800087E08043804081A386108000800003E8802883EF820883EF80000 +C844:0000000800087E08043804081A386108000800000F8800880F8808140FA20000 +C845:0000000800087E08043804081A386108000800003EF802803EF820803EF80000 +C846:0000000800087E08043804081A386108000800003EFC02483E4820483EFC0000 +C847:0000000800087E08043804081A386108000800003E1002FE3E3820443E380000 +C848:0000000800087E08043804081A3861080008000003F802080208020803F80000 +C849:0000000800087E08043804081A386108000800000208020803F8020803F80000 +C84A:0000000800087E08043804081A38610800080000210821083F0821143F620000 +C84B:0000000800087E08043804081A38610800080000001000100010006801840000 +C84C:0000000800087E08043804081A386108000800000048004800A8011406620000 +C84D:0000000800087E08043804081A38610800080000000003F00408040803F00000 +C84E:0000000800087E08043804081A3861080008000003F80020002000D003080000 +C84F:0000000800087E08043804081A38610800080000004003F8004000A003180000 +C850:0000000800087E08043804081A3861080008000003F8000803F8000800080000 +C851:0000000800087E08043804081A3861080008000003F8020003F8020003F80000 +C852:0000000800087E08043804081A3861080008000000000FF8022002200FF80000 +C853:0000000800087E08043804081A3861080008000000800FF803E0041003E00000 +C854:00000000000A000A3F8A010A013A020A060A093A308A000A000A000A000A0000 +C855:0000002800287E2804E804281AE861280028000007F800080008000800080000 +C856:0000002800287E2804E804281AE861280028000000003EF80208020802080000 +C857:0000002800287E2804E804281AE861280028000000003E100210022802C40000 +C858:0000002800287E2804E804281AE861280028002808000800080008000FF80000 +C859:0000002800287E2804E804281AE8612800280000000020F8201020303ECC0000 +C85A:0000002800287E2804E804281AE8612800280000202021FC207020883E700000 +C85B:0000002800287E2804E804281AE861280028000003F802000200020003F80000 +C85C:0000002800287E2804E804281AE861280028000007F8000807F8040007F80000 +C85D:0000002800287E2804E804281AE86128002800003EF802083E0820083E080000 +C85E:0000002800287E2804E804281AE86128002800003EF802883E8820883EF80000 +C85F:0000002800287E2804E804281AE86128002800003E8802883EF820883EF80000 +C860:0000002800287E2804E804281AE86128002800001F0801081F0810141F620000 +C861:0000002800287E2804E804281AE86128002800003EF802803EF820803EF80000 +C862:0000002800287E2804E804281AE86128002800003EFC02483E4820483EFC0000 +C863:0000002800287E2804E804281AE86128002800003E1002FE3E3820443E380000 +C864:0000002800287E2804E804281AE861280028000003F802080208020803F80000 +C865:0000002800287E2804E804281AE86128002800000208020803F8020803F80000 +C866:0000002800287E2804E804281AE8612800280000110811081F0811141F620000 +C867:0000002800287E2804E804281AE8612800280000000800080008003400C20000 +C868:0000002800287E2804E804281AE86128002800000048004800A8011406620000 +C869:0000002800287E2804E804281AE8612800280000000001F00208020801F00000 +C86A:0000002800287E2804E804281AE861280028000003F80020002000D003080000 +C86B:0000002800287E2804E804281AE8612800280000004003F8004000A003180000 +C86C:0000002800287E2804E804281AE861280028000003F8000803F8000800080000 +C86D:0000002800287E2804E804281AE861280028000003F8020003F8020003F80000 +C86E:0000002800287E2804E804281AE861280028000000000FF8022002200FF80000 +C86F:0000002800287E2804E804281AE861280028000000800FF803E0041003E00000 +C870:000000000FE0004000400080018002400C2000000100010001007FFC00000000 +C871:00000FC0008003400C200000010001007FFC00001FF000100010001000100000 +C872:00000FC0008003400C200000010001007FFC000000003EF80208020802080000 +C873:00000FC0008003400C200000010001007FFC000000001E100210022802C40000 +C874:00000FC0008003400C200000010001007FFC000000001000100010001FF00000 +C875:00000FC0008003400C200000010001007FFC0000000020F8201020303ECC0000 +C876:00000FC0008003400C200000010001007FFC0000202021FC207020883E700000 +C877:00000FC0008003400C200000010001007FFC00001FF01000100010001FF00000 +C878:00000FC0008003400C200000010001007FFC00001FF000101FF010001FF00000 +C879:00000FC0008003400C200000010001007FFC00003EF802083E0820083E080000 +C87A:00000FC0008003400C200000010001007FFC00003EF802883E8820883EF80000 +C87B:00000FC0008003400C200000010001007FFC00003E8802883EF820883EF80000 +C87C:00000FC0008003400C200000010001007FFC00003E1002103E1020283EC40000 +C87D:00000FC0008003400C200000010001007FFC00003EF802803EF820803EF80000 +C87E:00000FC0008003400C200000010001007FFC00003EFC02483E4820483EFC0000 +C87F:00000FC0008003400C200000010001007FFC00003E2003FC3E7020883E700000 +C880:00000FC0008003400C200000010001007FFC00001FF01010101010101FF00000 +C881:00000FC0008003400C200000010001007FFC0000101010101FF010101FF00000 +C882:00000FC0008003400C200000010001007FFC0000222022203E2022503E880000 +C883:00000FC0008003400C200000010001007FFC000000000100010002800C400000 +C884:00000FC0008003400C200000010001007FFC00000000024002400DA033100000 +C885:00000FC0008003400C200000010001007FFC0000000007C00820082007C00000 +C886:00000FC0008003400C200000010001007FFC0000000007E00080014006200000 +C887:00000FC0008003400C200000010001007FFC0000008007E00080014006200000 +C888:00000FC0008003400C200000010001007FFC00001FF000101FF0001000100000 +C889:00000FC0008003400C200000010001007FFC00001FF010001FF010001FF00000 +C88A:00000FC0008003400C200000010001007FFC000000001FF0044004401FF00000 +C88B:00000FC0008003400C200000010001007FFC000001001FF007C0082007C00000 +C88C:0000001000103F90011001100210061E09103090041004107FD0001000100000 +C88D:000000083F0802080D0E3088040804087FE8000007F800080008000800080000 +C88E:000000083F0802080D0E3088040804087FE8000000003EF80208020802080000 +C88F:000000083F0802080D0E3088040804087FE8000000001F080108011401620000 +C890:000000083F0802080D0E3088040804087FE8000008000800080008000FF80000 +C891:000000083F0802080D0E3088040804087FE80000000010F8101010301ECC0000 +C892:000000083F0802080D0E3088040804087FE800000808087F081C08220F9C0000 +C893:000000083F0802080D0E3088040804087FE8000003F802000200020003F80000 +C894:000000083F0802080D0E3088040804087FE8000007F8000807F8040007F80000 +C895:000000083F0802080D0E3088040804087FE800003EF802083E0820083E080000 +C896:000000083F0802080D0E3088040804087FE800003EF802883E8820883EF80000 +C897:000000083F0802080D0E3088040804087FE800003E8802883EF820883EF80000 +C898:000000083F0802080D0E3088040804087FE800001F0801081F0810141F620000 +C899:000000083F0802080D0E3088040804087FE800003EF802803EF820803EF80000 +C89A:000000083F0802080D0E3088040804087FE800003EFC02483E4820483EFC0000 +C89B:000000083F0802080D0E3088040804087FE800001F08017F1F1C10221F1C0000 +C89C:000000083F0802080D0E3088040804087FE8000003F802080208020803F80000 +C89D:000000083F0802080D0E3088040804087FE800000208020803F8020803F80000 +C89E:000000083F0802080D0E3088040804087FE80000110811081F0811141F620000 +C89F:000000083F0802080D0E3088040804087FE80000001000100010006801840000 +C8A0:000000083F0802080D0E3088040804087FE800000048004800A8011406620000 +C8A1:000000083F0802080D0E3088040804087FE80000000003F00408040803F00000 +C8A2:000000083F0802080D0E3088040804087FE8000003F80020002000D003080000 +C8A3:000000083F0802080D0E3088040804087FE80000004003F8004000A003180000 +C8A4:000000083F0802080D0E3088040804087FE8000003F8000803F8000800080000 +C8A5:000000083F0802080D0E3088040804087FE8000003F8020003F8020003F80000 +C8A6:000000083F0802080D0E3088040804087FE8000000000FF8022002200FF80000 +C8A7:000000083F0802080D0E3088040804087FE8000000800FF803E0041003E00000 +C8A8:0000001200123F92011201120212061E09123092041204127FD2001200120000 +C8A9:000000283F2802280D3830A8042804287FA8000007F800080008000800080000 +C8AA:000000283F2802280D3830A8042804287FA8000000003EF80208020802080000 +C8AB:000000283F2802280D3830A8042804287FA8000000001F080108011401620000 +C8AC:000000283F2802280D3830A8042804287FA8000008000800080008000FF80000 +C8AD:000000283F2802280D3830A8042804287FA80000000010F8101010301ECC0000 +C8AE:000000283F2802280D3830A8042804287FA800000808087F081C08220F9C0000 +C8AF:000000283F2802280D3830A8042804287FA8000003F802000200020003F80000 +C8B0:000000283F2802280D3830A8042804287FA8000007F8000807F8040007F80000 +C8B1:000000283F2802280D3830A8042804287FA800003EF802083E0820083E080000 +C8B2:000000283F2802280D3830A8042804287FA800003EF802883E8820883EF80000 +C8B3:000000283F2802280D3830A8042804287FA800003E8802883EF820883EF80000 +C8B4:000000283F2802280D3830A8042804287FA800001F0801081F0810141F620000 +C8B5:000000283F2802280D3830A8042804287FA800003EF802803EF820803EF80000 +C8B6:000000283F2802280D3830A8042804287FA800003EFC02483E4820483EFC0000 +C8B7:000000283F2802280D3830A8042804287FA800001F08017F1F1C10221F1C0000 +C8B8:000000283F2802280D3830A8042804287FA8000003F802080208020803F80000 +C8B9:000000283F2802280D3830A8042804287FA800000208020803F8020803F80000 +C8BA:000000283F2802280D3830A8042804287FA80000110811081F0811141F620000 +C8BB:000000283F2802280D3830A8042804287FA80000001000100010006801840000 +C8BC:000000283F2802280D3830A8042804287FA800000048004800A8011406620000 +C8BD:000000283F2802280D3830A8042804287FA80000000003F00408040803F00000 +C8BE:000000283F2802280D3830A8042804287FA8000003F80020002000D003080000 +C8BF:000000283F2802280D3830A8042804287FA80000004003F8004000A003180000 +C8C0:000000283F2802280D3830A8042804287FA8000003F8000803F8000800080000 +C8C1:000000283F2802280D3830A8042804287FA8000003F8020003F8020003F80000 +C8C2:000000283F2802280D3830A8042804287FA8000000000FF8022002200FF80000 +C8C3:000000283F2802280D3830A8042804287FA8000000800FF803E0041003E00000 +C8C4:0000000800083F88010801080208060809083088040804087FE8000800080000 +C8C5:000000083F0802080D083088040804087FE8000007F800080008000800080000 +C8C6:000000083F0802080D083088040804087FE8000000003EF80208020802080000 +C8C7:000000083F0802080D083088040804087FE8000000001F080108011401620000 +C8C8:000000083F0802080D083088040804087FE8000008000800080008000FF80000 +C8C9:000000083F0802080D083088040804087FE80000000010F8101010301ECC0000 +C8CA:000000083F0802080D083088040804087FE800000808087F081C08220F9C0000 +C8CB:000000083F0802080D083088040804087FE8000003F802000200020003F80000 +C8CC:000000083F0802080D083088040804087FE8000007F8000807F8040007F80000 +C8CD:000000083F0802080D083088040804087FE800003EF802083E0820083E080000 +C8CE:000000083F0802080D083088040804087FE800003EF802883E8820883EF80000 +C8CF:000000083F0802080D083088040804087FE800003E8802883EF820883EF80000 +C8D0:000000083F0802080D083088040804087FE800001F0801081F0810141F620000 +C8D1:000000083F0802080D083088040804087FE800003EF802803EF820803EF80000 +C8D2:000000083F0802080D083088040804087FE800003EFC02483E4820483EFC0000 +C8D3:000000083F0802080D083088040804087FE800001F08017F1F1C10221F1C0000 +C8D4:000000083F0802080D083088040804087FE8000003F802080208020803F80000 +C8D5:000000083F0802080D083088040804087FE800000208020803F8020803F80000 +C8D6:000000083F0802080D083088040804087FE80000110811081F0811141F620000 +C8D7:000000083F0802080D083088040804087FE80000001000100010006801840000 +C8D8:000000083F0802080D083088040804087FE800000048004800A8011406620000 +C8D9:000000083F0802080D083088040804087FE80000000003F00408040803F00000 +C8DA:000000083F0802080D083088040804087FE8000003F80020002000D003080000 +C8DB:000000083F0802080D083088040804087FE80000004003F8004000A003180000 +C8DC:000000083F0802080D083088040804087FE8000003F8000803F8000800080000 +C8DD:000000083F0802080D083088040804087FE8000003F8020003F8020003F80000 +C8DE:000000083F0802080D083088040804087FE8000000000FF8022002200FF80000 +C8DF:000000083F0802080D083088040804087FE8000000800FF803E0041003E00000 +C8E0:000000000FE0004000400080018002400C2004400440044004407FFC00000000 +C8E1:00000FC0008003400C200000044004407FFC00001FF000100010001000100000 +C8E2:00000FC0008003400C200000044004407FFC000000003EF80208020802080000 +C8E3:00000FC0008003400C200000044004407FFC000000001E100210022802C40000 +C8E4:00000FC0008003400C200000044004407FFC000000001000100010001FF00000 +C8E5:00000FC0008003400C200000044004407FFC0000000020F8201020303ECC0000 +C8E6:00000FC0008003400C200000044004407FFC0000202021FC207020883E700000 +C8E7:00000FC0008003400C200000044004407FFC00001FF01000100010001FF00000 +C8E8:00000FC0008003400C200000044004407FFC00001FF000101FF010001FF00000 +C8E9:00000FC0008003400C200000044004407FFC00003EF802083E0820083E080000 +C8EA:00000FC0008003400C200000044004407FFC00003EF802883E8820883EF80000 +C8EB:00000FC0008003400C200000044004407FFC00003E8802883EF820883EF80000 +C8EC:00000FC0008003400C200000044004407FFC00003E1002103E1020283EC40000 +C8ED:00000FC0008003400C200000044004407FFC00003EF802803EF820803EF80000 +C8EE:00000FC0008003400C200000044004407FFC00003EFC02483E4820483EFC0000 +C8EF:00000FC0008003400C200000044004407FFC00003E2003FC3E7020883E700000 +C8F0:00000FC0008003400C200000044004407FFC00001FF01010101010101FF00000 +C8F1:00000FC0008003400C200000044004407FFC0000101010101FF010101FF00000 +C8F2:00000FC0008003400C200000044004407FFC0000222022203E2022503E880000 +C8F3:00000FC0008003400C200000044004407FFC000000000100010002800C400000 +C8F4:00000FC0008003400C200000044004407FFC00000000024002400DA033100000 +C8F5:00000FC0008003400C200000044004407FFC0000000007C00820082007C00000 +C8F6:00000FC0008003400C200000044004407FFC0000000007E00080014006200000 +C8F7:00000FC0008003400C200000044004407FFC0000008007E00080014006200000 +C8F8:00000FC0008003400C200000044004407FFC00001FF000101FF0001000100000 +C8F9:00000FC0008003400C200000044004407FFC00001FF010001FF010001FF00000 +C8FA:00000FC0008003400C200000044004407FFC000000001FF0044004401FF00000 +C8FB:00000FC0008003400C200000044004407FFC000001001FF007C0082007C00000 +C8FC:000000000FE0004000400080018002400C2000003FF801000100010001000000 +C8FD:00000FC00080008003400C2000007FFC010001001FF000100010001000100000 +C8FE:00000FC00080008003400C2000007FFC0100010000003EF80208020802080000 +C8FF:00000FC00080008003400C2000007FFC0100010000001E100210022802C40000 +C900:00000FC00080008003400C20000000007FFC010001001100100010001FF00000 +C901:00000FC00080008003400C2000007FFC01000100000020F8201020303ECC0000 +C902:00000FC00080008003400C2000007FFC01000100202021FC207020883E700000 +C903:00000FC00080008003400C2000007FFC010001001FF01000100010001FF00000 +C904:00000FC00080008003400C2000007FFC010001001FF000101FF010001FF00000 +C905:00000FC00080008003400C2000007FFC010001003EF802083E0820083E080000 +C906:00000FC00080008003400C2000007FFC010001003EF802883E8820883EF80000 +C907:00000FC00080008003400C2000007FFC010001003E8802883EF820883EF80000 +C908:00000FC00080008003400C2000007FFC010001003E1002103E1020283EC40000 +C909:00000FC00080008003400C2000007FFC010001003EF802803EF820803EF80000 +C90A:00000FC00080008003400C2000007FFC010001003EFC02483E4820483EFC0000 +C90B:00000FC00080008003400C2000007FFC010001003E2003FC3E7020883E700000 +C90C:00000FC00080008003400C2000007FFC010001001FF01010101010101FF00000 +C90D:00000FC00080008003400C2000007FFC01000100101010101FF010101FF00000 +C90E:00000FC00080008003400C2000007FFC01000100222022203E2022503E880000 +C90F:00000FC00080008003400C2000007FFC0100010000000100010002800C400000 +C910:00000FC00080008003400C2000007FFC010001000000024002400DA033100000 +C911:00000FC00080008003400C2000007FFC01000100000007C00820082007C00000 +C912:00000FC00080008003400C2000007FFC01000100000007E00080014006200000 +C913:00000FC00080008003400C2000007FFC01000100008007E00080014006200000 +C914:00000FC00080008003400C2000007FFC010001001FF000101FF0001000100000 +C915:00000FC00080008003400C2000007FFC010001001FF010001FF010001FF00000 +C916:00000FC00080008003400C2000007FFC0100010000001FF0044004401FF00000 +C917:00000FC00080008003400C2000007FFC0100010001001FF007C0082007C00000 +C918:000000083F8801080108020806080908308800087FE8040804F8040804080000 +C919:3F08020802080D08308800087FE8027802080000000007F80008000800080000 +C91A:3F08020802080D08308800087FE802780208000000003EF80208020802080000 +C91B:3F08020802080D08308800087FE802780208000000001F080108011401620000 +C91C:3F08020802080D083088000800087FE80278020802081000100010001FF80000 +C91D:3F08020802080D08308800087FE8027802080000000020F8201020303ECC0000 +C91E:3F08020802080D08308800087FE8027802080000202021FC207020883E700000 +C91F:3F08020802080D08308800087FE802780208000003F802000200020003F80000 +C920:3F08020802080D08308800087FE802780208000007F8000807F8040007F80000 +C921:3F08020802080D08308800087FE80278020800003EF802083E0820083E080000 +C922:3F08020802080D08308800087FE80278020800003EF802883E8820883EF80000 +C923:3F08020802080D08308800087FE80278020800003E8802883EF820883EF80000 +C924:3F08020802080D08308800087FE80278020800000F8800880F8808140FA20000 +C925:3F08020802080D08308800087FE80278020800003EF802803EF820803EF80000 +C926:3F08020802080D08308800087FE80278020800003EFC02483E4820483EFC0000 +C927:3F08020802080D08308800087FE80278020800003E1002FE3E3820443E380000 +C928:3F08020802080D08308800087FE802780208000003F802080208020803F80000 +C929:3F08020802080D08308800087FE80278020800000208020803F8020803F80000 +C92A:3F08020802080D08308800087FE8027802080000210821083F0821143F620000 +C92B:3F08020802080D08308800087FE8027802080000001000100010006801840000 +C92C:3F08020802080D08308800087FE80278020800000048004800A8011406620000 +C92D:3F08020802080D08308800087FE8027802080000000003F00408040803F00000 +C92E:3F08020802080D08308800087FE802780208000003F80020002000D003080000 +C92F:3F08020802080D08308800087FE8027802080000004003F8004000A003180000 +C930:3F08020802080D08308800087FE802780208000003F8000803F8000800080000 +C931:3F08020802080D08308800087FE802780208000003F8020003F8020003F80000 +C932:3F08020802080D08308800087FE802780208000000000FF8022002200FF80000 +C933:3F08020802080D08308800087FE802780208000000800FF803E0041003E00000 +C934:0000000A3F8A010A010A020A060A090A308A000A7FEA040A047A040A040A0000 +C935:3F28022802280D2830A800287FA805E804280000000007F80008000800080000 +C936:3F28022802280D2830A800287FA805E80428000000003EF80208020802080000 +C937:3F28022802280D2830A800287FA805E80428000000001F080108011401620000 +C938:3F28022802280D2830A8002800287FA8042805E804281428100010001FF80000 +C939:3F28022802280D2830A800287FA805E804280000000020F8201020303ECC0000 +C93A:3F28022802280D2830A800287FA805E804280000202021FC207020883E700000 +C93B:3F28022802280D2830A800287FA805E80428000003F802000200020003F80000 +C93C:3F28022802280D2830A800287FA805E80428000007F8000807F8040007F80000 +C93D:3F28022802280D2830A800287FA805E8042800003EF802083E0820083E080000 +C93E:3F28022802280D2830A800287FA805E8042800003EF802883E8820883EF80000 +C93F:3F28022802280D2830A800287FA805E8042800003E8802883EF820883EF80000 +C940:3F28022802280D2830A800287FA805E8042800000F8800880F8808140FA20000 +C941:3F28022802280D2830A800287FA805E8042800003EF802803EF820803EF80000 +C942:3F28022802280D2830A800287FA805E8042800003EFC02483E4820483EFC0000 +C943:3F28022802280D2830A800287FA805E8042800003E1002FE3E3820443E380000 +C944:3F28022802280D2830A800287FA805E80428000003F802080208020803F80000 +C945:3F28022802280D2830A800287FA805E8042800000208020803F8020803F80000 +C946:3F28022802280D2830A800287FA805E804280000210821083F0821143F620000 +C947:3F28022802280D2830A800287FA805E804280000001000100010006801840000 +C948:3F28022802280D2830A800287FA805E8042800000048004800A8011406620000 +C949:3F28022802280D2830A800287FA805E804280000000003F00408040803F00000 +C94A:3F28022802280D2830A800287FA805E80428000003F80020002000D003080000 +C94B:3F28022802280D2830A800287FA805E804280000004003F8004000A003180000 +C94C:3F28022802280D2830A800287FA805E80428000003F8000803F8000800080000 +C94D:3F28022802280D2830A800287FA805E80428000003F8020003F8020003F80000 +C94E:3F28022802280D2830A800287FA805E80428000000000FF8022002200FF80000 +C94F:3F28022802280D2830A800287FA805E80428000000800FF803E0041003E00000 +C950:000000083F8801080108020806080908308800087FE804080408040804080000 +C951:3F08020802080D08308800087FE8020802000000000007F80008000800080000 +C952:3F08020802080D08308800087FE802080200000000003EF80208020802080000 +C953:3F08020802080D08308800087FE802080200000000001F080108011401620000 +C954:3F08020802080D083088000800087FE80208020802081008100010001FF80000 +C955:3F08020802080D08308800087FE8020802000000000020F8201020303ECC0000 +C956:3F08020802080D08308800087FE8020802000000202021FC207020883E700000 +C957:3F08020802080D08308800087FE802080200000003F802000200020003F80000 +C958:3F08020802080D08308800087FE802080200000007F8000807F8040007F80000 +C959:3F08020802080D08308800087FE80208020000003EF802083E0820083E080000 +C95A:3F08020802080D08308800087FE80208020000003EF802883E8820883EF80000 +C95B:3F08020802080D08308800087FE80208020000003E8802883EF820883EF80000 +C95C:3F08020802080D08308800087FE80208020000000F8800880F8808140FA20000 +C95D:3F08020802080D08308800087FE80208020000003EF802803EF820803EF80000 +C95E:3F08020802080D08308800087FE80208020000003EFC02483E4820483EFC0000 +C95F:3F08020802080D08308800087FE80208020000003E1002FE3E3820443E380000 +C960:3F08020802080D08308800087FE802080200000003F802080208020803F80000 +C961:3F08020802080D08308800087FE80208020000000208020803F8020803F80000 +C962:3F08020802080D08308800087FE8020802000000210821083F0821143F620000 +C963:3F08020802080D08308800087FE8020802000000001000100010006801840000 +C964:3F08020802080D08308800087FE80208020000000048004800A8011406620000 +C965:3F08020802080D08308800087FE8020802000000000003F00408040803F00000 +C966:3F08020802080D08308800087FE802080200000003F80020002000D003080000 +C967:3F08020802080D08308800087FE8020802000000004003F8004000A003180000 +C968:3F08020802080D08308800087FE802080200000003F8000803F8000800080000 +C969:3F08020802080D08308800087FE802080200000003F8020003F8020003F80000 +C96A:3F08020802080D08308800087FE802080200000000000FF8022002200FF80000 +C96B:3F08020802080D08308800087FE802080200000000800FF803E0041003E00000 +C96C:000000000FE0004000400080018002400C2000007FFC04400440044004400000 +C96D:00000FC00080008003400C2000007FFC044004401FF000100010001000100000 +C96E:00000FC00080008003400C2000007FFC0440044000003EF80208020802080000 +C96F:00000FC00080008003400C2000007FFC0440044000001E100210022802C40000 +C970:00000FC00080008003400C20000000007FFC044004401440100010001FF00000 +C971:00000FC00080008003400C2000007FFC04400440000020F8201020303ECC0000 +C972:00000FC00080008003400C2000007FFC04400440202021FC207020883E700000 +C973:00000FC00080008003400C2000007FFC044004401FF01000100010001FF00000 +C974:00000FC00080008003400C2000007FFC044004401FF000101FF010001FF00000 +C975:00000FC00080008003400C2000007FFC044004403EF802083E0820083E080000 +C976:00000FC00080008003400C2000007FFC044004403EF802883E8820883EF80000 +C977:00000FC00080008003400C2000007FFC044004403E8802883EF820883EF80000 +C978:00000FC00080008003400C2000007FFC044004403E1002103E1020283EC40000 +C979:00000FC00080008003400C2000007FFC044004403EF802803EF820803EF80000 +C97A:00000FC00080008003400C2000007FFC044004403EFC02483E4820483EFC0000 +C97B:00000FC00080008003400C2000007FFC044004403E2003FC3E7020883E700000 +C97C:00000FC00080008003400C2000007FFC044004401FF01010101010101FF00000 +C97D:00000FC00080008003400C2000007FFC04400440101010101FF010101FF00000 +C97E:00000FC00080008003400C2000007FFC04400440222022203E2022503E880000 +C97F:00000FC00080008003400C2000007FFC0440044000000100010002800C400000 +C980:00000FC00080008003400C2000007FFC044004400000024002400DA033100000 +C981:00000FC00080008003400C2000007FFC04400440000007C00820082007C00000 +C982:00000FC00080008003400C2000007FFC04400440000007E00080014006200000 +C983:00000FC00080008003400C2000007FFC04400440008007E00080014006200000 +C984:00000FC00080008003400C2000007FFC044004401FF000101FF0001000100000 +C985:00000FC00080008003400C2000007FFC044004401FF010001FF010001FF00000 +C986:00000FC00080008003400C2000007FFC0440044000001FF0044004401FF00000 +C987:00000FC00080008003400C2000007FFC0440044001001FF007C0082007C00000 +C988:000000000FE0004000400080018002400C20000000007FFC0000000000000000 +C989:00000FC0008003400C200000000000007FFC00001FF000100010001000100000 +C98A:00000FC0008003400C200000000000007FFC000000003EF80208020802080000 +C98B:00000FC0008003400C200000000000007FFC000000001E100210022802C40000 +C98C:00000FC0008003400C200000000000007FFC000000001000100010001FF00000 +C98D:00000FC0008003400C200000000000007FFC0000000020F8201020303ECC0000 +C98E:00000FC0008003400C200000000000007FFC0000202021FC207020883E700000 +C98F:00000FC0008003400C200000000000007FFC00001FF01000100010001FF00000 +C990:00000FC0008003400C200000000000007FFC00001FF000101FF010001FF00000 +C991:00000FC0008003400C200000000000007FFC00003EF802083E0820083E080000 +C992:00000FC0008003400C200000000000007FFC00003EF802883E8820883EF80000 +C993:00000FC0008003400C200000000000007FFC00003E8802883EF820883EF80000 +C994:00000FC0008003400C200000000000007FFC00003E1002103E1020283EC40000 +C995:00000FC0008003400C200000000000007FFC00003EF802803EF820803EF80000 +C996:00000FC0008003400C200000000000007FFC00003EFC02483E4820483EFC0000 +C997:00000FC0008003400C200000000000007FFC00003E2003FC3E7020883E700000 +C998:00000FC0008003400C200000000000007FFC00001FF01010101010101FF00000 +C999:00000FC0008003400C200000000000007FFC0000101010101FF010101FF00000 +C99A:00000FC0008003400C200000000000007FFC0000222022203E2022503E880000 +C99B:00000FC0008003400C200000000000007FFC000000000100010002800C400000 +C99C:00000FC0008003400C200000000000007FFC00000000024002400DA033100000 +C99D:00000FC0008003400C200000000000007FFC0000000007C00820082007C00000 +C99E:00000FC0008003400C200000000000007FFC0000000007E00080014006200000 +C99F:00000FC0008003400C200000000000007FFC0000008007E00080014006200000 +C9A0:00000FC0008003400C200000000000007FFC00001FF000101FF0001000100000 +C9A1:00000FC0008003400C200000000000007FFC00001FF010001FF010001FF00000 +C9A2:00000FC0008003400C200000000000007FFC000000001FF0044004401FF00000 +C9A3:00000FC0008003400C200000000000007FFC000001001FF007C0082007C00000 +C9A4:0000000800083F8801080108020806080908308800087FE80008000800080000 +C9A5:000000083F0802080D083088000800087FE8000007F800080008000800080000 +C9A6:000000083F0802080D083088000800087FE8000000003EF80208020802080000 +C9A7:000000083F0802080D083088000800087FE8000000001F080108011401620000 +C9A8:000000083F0802080D083088000800087FE8000008000800080008000FF80000 +C9A9:000000083F0802080D083088000800087FE80000000010F8101010301ECC0000 +C9AA:000000083F0802080D083088000800087FE800000808087F081C08220F9C0000 +C9AB:000000083F0802080D083088000800087FE8000003F802000200020003F80000 +C9AC:000000083F0802080D083088000800087FE8000007F8000807F8040007F80000 +C9AD:000000083F0802080D083088000800087FE800003EF802083E0820083E080000 +C9AE:000000083F0802080D083088000800087FE800003EF802883E8820883EF80000 +C9AF:000000083F0802080D083088000800087FE800003E8802883EF820883EF80000 +C9B0:000000083F0802080D083088000800087FE800001F0801081F0810141F620000 +C9B1:000000083F0802080D083088000800087FE800003EF802803EF820803EF80000 +C9B2:000000083F0802080D083088000800087FE800003EFC02483E4820483EFC0000 +C9B3:000000083F0802080D083088000800087FE800001F08017F1F1C10221F1C0000 +C9B4:000000083F0802080D083088000800087FE8000003F802080208020803F80000 +C9B5:000000083F0802080D083088000800087FE800000208020803F8020803F80000 +C9B6:000000083F0802080D083088000800087FE80000110811081F0811141F620000 +C9B7:000000083F0802080D083088000800087FE80000001000100010006801840000 +C9B8:000000083F0802080D083088000800087FE800000048004800A8011406620000 +C9B9:000000083F0802080D083088000800087FE80000000003F00408040803F00000 +C9BA:000000083F0802080D083088000800087FE8000003F80020002000D003080000 +C9BB:000000083F0802080D083088000800087FE80000004003F8004000A003180000 +C9BC:000000083F0802080D083088000800087FE8000003F8000803F8000800080000 +C9BD:000000083F0802080D083088000800087FE8000003F8020003F8020003F80000 +C9BE:000000083F0802080D083088000800087FE8000000000FF8022002200FF80000 +C9BF:000000083F0802080D083088000800087FE8000000800FF803E0041003E00000 +C9C0:00000000000800083F8801080108020806080908308800080008000800080000 +C9C1:0000000800087E08040804081A08610800080000000007F80008000800080000 +C9C2:0000000800087E08040804081A0861080008000000003EF80208020802080000 +C9C3:0000000800087E08040804081A0861080008000000001F080108011401620000 +C9C4:0000000800087E08040804081A0861080008000800001000100010001FF80000 +C9C5:0000000800087E08040804081A08610800080000000020F8201020303ECC0000 +C9C6:0000000800087E08040804081A08610800080000202021FC207020883E700000 +C9C7:0000000800087E08040804081A0861080008000003F802000200020003F80000 +C9C8:0000000800087E08040804081A0861080008000007F8000807F8040007F80000 +C9C9:0000000800087E08040804081A086108000800003EF802083E0820083E080000 +C9CA:0000000800087E08040804081A086108000800003EF802883E8820883EF80000 +C9CB:0000000800087E08040804081A086108000800003E8802883EF820883EF80000 +C9CC:0000000800087E08040804081A086108000800000F8800880F8808140FA20000 +C9CD:0000000800087E08040804081A086108000800003EF802803EF820803EF80000 +C9CE:0000000800087E08040804081A086108000800003EFC02483E4820483EFC0000 +C9CF:0000000800087E08040804081A086108000800003E1002FE3E3820443E380000 +C9D0:0000000800087E08040804081A0861080008000003F802080208020803F80000 +C9D1:0000000800087E08040804081A086108000800000208020803F8020803F80000 +C9D2:0000000800087E08040804081A08610800080000210821083F0821143F620000 +C9D3:0000000800087E08040804081A08610800080000001000100010006801840000 +C9D4:0000000800087E08040804081A086108000800000048004800A8011406620000 +C9D5:0000000800087E08040804081A08610800080000000003F00408040803F00000 +C9D6:0000000800087E08040804081A0861080008000003F80020002000D003080000 +C9D7:0000000800087E08040804081A08610800080000004003F8004000A003180000 +C9D8:0000000800087E08040804081A0861080008000003F8000803F8000800080000 +C9D9:0000000800087E08040804081A0861080008000003F8020003F8020003F80000 +C9DA:0000000800087E08040804081A0861080008000000000FF8022002200FF80000 +C9DB:0000000800087E08040804081A0861080008000000800FF803E0041003E00000 +C9DC:00000000001000107B9008900890191E15102290CC5000100010001000100000 +C9DD:00000008000877082208220E550888880008000007F800080008000800080000 +C9DE:00000008000877082208220E550888880008000000003EF80208020802080000 +C9DF:00000008000877082208220E550888880008000000001F080108011401620000 +C9E0:00000008000877082208220E550888880008000808000800080008000FF80000 +C9E1:00000008000877082208220E5508888800080000000010F8101010301ECC0000 +C9E2:00000008000877082208220E55088888000800000808087F081C08220F9C0000 +C9E3:00000008000877082208220E550888880008000003F802000200020003F80000 +C9E4:00000008000877082208220E550888880008000007F8000807F8040007F80000 +C9E5:00000008000877082208220E55088888000800003EF802083E0820083E080000 +C9E6:00000008000877082208220E55088888000800003EF802883E8820883EF80000 +C9E7:00000008000877082208220E55088888000800003E8802883EF820883EF80000 +C9E8:00000008000877082208220E55088888000800001F0801081F0810141F620000 +C9E9:00000008000877082208220E55088888000800003EF802803EF820803EF80000 +C9EA:00000008000877082208220E55088888000800003EFC02483E4820483EFC0000 +C9EB:00000008000877082208220E55088888000800001F08017F1F1C10221F1C0000 +C9EC:00000008000877082208220E550888880008000003F802080208020803F80000 +C9ED:00000008000877082208220E55088888000800000208020803F8020803F80000 +C9EE:00000008000877082208220E5508888800080000110811081F0811141F620000 +C9EF:00000008000877082208220E5508888800080000001000100010006801840000 +C9F0:00000008000877082208220E55088888000800000048004800A8011406620000 +C9F1:00000008000877082208220E5508888800080000000003F00408040803F00000 +C9F2:00000008000877082208220E550888880008000003F80020002000D003080000 +C9F3:00000008000877082208220E5508888800080000004003F8004000A003180000 +C9F4:00000008000877082208220E550888880008000003F8000803F8000800080000 +C9F5:00000008000877082208220E550888880008000003F8020003F8020003F80000 +C9F6:00000008000877082208220E550888880008000000000FF8022002200FF80000 +C9F7:00000008000877082208220E550888880008000000800FF803E0041003E00000 +C9F8:00000000001200127B9208920892191E15122292CC5200120012001200120000 +C9F9:000000280028772822282238552888A80028000007F800080008000800080000 +C9FA:000000280028772822282238552888A80028000000003EF80208020802080000 +C9FB:000000280028772822282238552888A80028000000003E100210022802C40000 +C9FC:000000280028772822282238552888A80028002808000800080008000FF80000 +C9FD:000000280028772822282238552888A800280000000020F8201020303ECC0000 +C9FE:000000280028772822282238552888A800280000202021FC207020883E700000 +C9FF:000000280028772822282238552888A80028000003F802000200020003F80000 +CA00:000000280028772822282238552888A80028000007F8000807F8040007F80000 +CA01:000000280028772822282238552888A8002800003EF802083E0820083E080000 +CA02:000000280028772822282238552888A8002800003EF802883E8820883EF80000 +CA03:000000280028772822282238552888A8002800003E8802883EF820883EF80000 +CA04:000000280028772822282238552888A8002800001F0801081F0810141F620000 +CA05:000000280028772822282238552888A8002800003EF802803EF820803EF80000 +CA06:000000280028772822282238552888A8002800003EFC02483E4820483EFC0000 +CA07:000000280028772822282238552888A8002800003E1002FE3E3820443E380000 +CA08:000000280028772822282238552888A80028000003F802080208020803F80000 +CA09:000000280028772822282238552888A8002800000208020803F8020803F80000 +CA0A:000000280028772822282238552888A800280000110811081F0811141F620000 +CA0B:000000280028772822282238552888A800280000000800080008003400C20000 +CA0C:000000280028772822282238552888A8002800000048004800A8011406620000 +CA0D:000000280028772822282238552888A800280000000001F00208020801F00000 +CA0E:000000280028772822282238552888A80028000003F80020002000D003080000 +CA0F:000000280028772822282238552888A800280000004003F8004000A003180000 +CA10:000000280028772822282238552888A80028000003F8000803F8000800080000 +CA11:000000280028772822282238552888A80028000003F8020003F8020003F80000 +CA12:000000280028772822282238552888A80028000000000FF8022002200FF80000 +CA13:000000280028772822282238552888A80028000000800FF803E0041003E00000 +CA14:00000000001000107B900890089E19101510229ECC5000100010001000100000 +CA15:0000000800087708220E2208550E88880008000007F800080008000800080000 +CA16:0000000800087708220E2208550E88880008000000003EF80208020802080000 +CA17:0000000800087708220E2208550E88880008000000001F080108011401620000 +CA18:0000000800087708220E2208550E88880008000008000800080008000FF80000 +CA19:0000000800087708220E2208550E888800080000000010F8101010301ECC0000 +CA1A:0000000800087708220E2208550E8888000800000808087F081C08220F9C0000 +CA1B:0000000800087708220E2208550E88880008000003F802000200020003F80000 +CA1C:0000000800087708220E2208550E88880008000007F8000807F8040007F80000 +CA1D:0000000800087708220E2208550E8888000800003EF802083E0820083E080000 +CA1E:0000000800087708220E2208550E8888000800003EF802883E8820883EF80000 +CA1F:0000000800087708220E2208550E8888000800003E8802883EF820883EF80000 +CA20:0000000800087708220E2208550E8888000800001F0801081F0810141F620000 +CA21:0000000800087708220E2208550E8888000800003EF802803EF820803EF80000 +CA22:0000000800087708220E2208550E8888000800003EFC02483E4820483EFC0000 +CA23:0000000800087708220E2208550E8888000800001F08017F1F1C10221F1C0000 +CA24:0000000800087708220E2208550E88880008000003F802080208020803F80000 +CA25:0000000800087708220E2208550E8888000800000208020803F8020803F80000 +CA26:0000000800087708220E2208550E888800080000110811081F0811141F620000 +CA27:0000000800087708220E2208550E888800080000001000100010006801840000 +CA28:0000000800087708220E2208550E8888000800000048004800A8011406620000 +CA29:0000000800087708220E2208550E888800080000000003F00408040803F00000 +CA2A:0000000800087708220E2208550E88880008000003F80020002000D003080000 +CA2B:0000000800087708220E2208550E888800080000004003F8004000A003180000 +CA2C:0000000800087708220E2208550E88880008000003F8000803F8000800080000 +CA2D:0000000800087708220E2208550E88880008000003F8020003F8020003F80000 +CA2E:0000000800087708220E2208550E88880008000000000FF8022002200FF80000 +CA2F:0000000800087708220E2208550E88880008000000800FF803E0041003E00000 +CA30:00000000001200127B920892089E19121512229ECC5200120012001200120000 +CA31:000000280028772822382228553888A80028000007F800080008000800080000 +CA32:000000280028772822382228553888A80028000000003EF80208020802080000 +CA33:000000280028772822382228553888A80028000000003E100210022802C40000 +CA34:000000280028772822382228553888A80028002808000800080008000FF80000 +CA35:000000280028772822382228553888A800280000000020F8201020303ECC0000 +CA36:000000280028772822382228553888A800280000202021FC207020883E700000 +CA37:000000280028772822382228553888A80028000003F802000200020003F80000 +CA38:000000280028772822382228553888A80028000007F8000807F8040007F80000 +CA39:000000280028772822382228553888A8002800003EF802083E0820083E080000 +CA3A:000000280028772822382228553888A8002800003EF802883E8820883EF80000 +CA3B:000000280028772822382228553888A8002800003E8802883EF820883EF80000 +CA3C:000000280028772822382228553888A8002800001F0801081F0810141F620000 +CA3D:000000280028772822382228553888A8002800003EF802803EF820803EF80000 +CA3E:000000280028772822382228553888A8002800003EFC02483E4820483EFC0000 +CA3F:000000280028772822382228553888A8002800003E1002FE3E3820443E380000 +CA40:000000280028772822382228553888A80028000003F802080208020803F80000 +CA41:000000280028772822382228553888A8002800000208020803F8020803F80000 +CA42:000000280028772822382228553888A800280000110811081F0811141F620000 +CA43:000000280028772822382228553888A800280000000800080008003400C20000 +CA44:000000280028772822382228553888A8002800000048004800A8011406620000 +CA45:000000280028772822382228553888A800280000000001F00208020801F00000 +CA46:000000280028772822382228553888A80028000003F80020002000D003080000 +CA47:000000280028772822382228553888A800280000004003F8004000A003180000 +CA48:000000280028772822382228553888A80028000003F8000803F8000800080000 +CA49:000000280028772822382228553888A80028000003F8020003F8020003F80000 +CA4A:000000280028772822382228553888A80028000000000FF8022002200FF80000 +CA4B:000000280028772822382228553888A80028000000800FF803E0041003E00000 +CA4C:00000000000200027B8208820882191E15022282CC4200020002000200020000 +CA4D:0000000800087708220822385508888800080000000007F80008000800080000 +CA4E:000000080008770822082238550888880008000000003EF80208020802080000 +CA4F:000000080008770822082238550888880008000000001F080108011401620000 +CA50:000000080008770822082238550888880008000000001000100010001FF80000 +CA51:0000000800087708220822385508888800080000000020F8201020303ECC0000 +CA52:0000000800087708220822385508888800080000202021FC207020883E700000 +CA53:000000080008770822082238550888880008000003F802000200020003F80000 +CA54:000000080008770822082238550888880008000007F8000807F8040007F80000 +CA55:00000008000877082208223855088888000800003EF802083E0820083E080000 +CA56:00000008000877082208223855088888000800003EF802883E8820883EF80000 +CA57:00000008000877082208223855088888000800003E8802883EF820883EF80000 +CA58:00000008000877082208223855088888000800000F8800880F8808140FA20000 +CA59:00000008000877082208223855088888000800003EF802803EF820803EF80000 +CA5A:00000008000877082208223855088888000800003EFC02483E4820483EFC0000 +CA5B:00000008000877082208223855088888000800003E1002FE3E3820443E380000 +CA5C:000000080008770822082238550888880008000003F802080208020803F80000 +CA5D:00000008000877082208223855088888000800000208020803F8020803F80000 +CA5E:0000000800087708220822385508888800080000210821083F0821143F620000 +CA5F:0000000800087708220822385508888800080000001000100010006801840000 +CA60:00000008000877082208223855088888000800000048004800A8011406620000 +CA61:0000000800087708220822385508888800080000000003F00408040803F00000 +CA62:000000080008770822082238550888880008000003F80020002000D003080000 +CA63:0000000800087708220822385508888800080000004003F8004000A003180000 +CA64:000000080008770822082238550888880008000003F8000803F8000800080000 +CA65:000000080008770822082238550888880008000003F8020003F8020003F80000 +CA66:000000080008770822082238550888880008000000000FF8022002200FF80000 +CA67:000000080008770822082238550888880008000000800FF803E0041003E00000 +CA68:00000000000A000A7B8A088A088A193A150A228ACC4A000A000A000A000A0000 +CA69:0000002800287728222822E8552888A80028000007F800080008000800080000 +CA6A:0000002800287728222822E8552888A80028000000003EF80208020802080000 +CA6B:0000002800287728222822E8552888A80028000000003E100210022802C40000 +CA6C:0000002800287728222822E8552888A80028000008000800080008000FF80000 +CA6D:0000002800287728222822E8552888A800280000000020F8201020303ECC0000 +CA6E:0000002800287728222822E8552888A800280000202021FC207020883E700000 +CA6F:0000002800287728222822E8552888A80028000003F802000200020003F80000 +CA70:0000002800287728222822E8552888A80028000007F8000807F8040007F80000 +CA71:0000002800287728222822E8552888A8002800003EF802083E0820083E080000 +CA72:0000002800287728222822E8552888A8002800003EF802883E8820883EF80000 +CA73:0000002800287728222822E8552888A8002800003E8802883EF820883EF80000 +CA74:0000002800287728222822E8552888A8002800001F0801081F0810141F620000 +CA75:0000002800287728222822E8552888A8002800003EF802803EF820803EF80000 +CA76:0000002800287728222822E8552888A8002800003EFC02483E4820483EFC0000 +CA77:0000002800287728222822E8552888A8002800003E1002FE3E3820443E380000 +CA78:0000002800287728222822E8552888A80028000003F802080208020803F80000 +CA79:0000002800287728222822E8552888A8002800000208020803F8020803F80000 +CA7A:0000002800287728222822E8552888A800280000110811081F0811141F620000 +CA7B:0000002800287728222822E8552888A800280000000800080008003400C20000 +CA7C:0000002800287728222822E8552888A8002800000048004800A8011406620000 +CA7D:0000002800287728222822E8552888A800280000000001F00208020801F00000 +CA7E:0000002800287728222822E8552888A80028000003F80020002000D003080000 +CA7F:0000002800287728222822E8552888A800280000004003F8004000A003180000 +CA80:0000002800287728222822E8552888A80028000003F8000803F8000800080000 +CA81:0000002800287728222822E8552888A80028000003F8020003F8020003F80000 +CA82:0000002800287728222822E8552888A80028000000000FF8022002200FF80000 +CA83:0000002800287728222822E8552888A80028000000800FF803E0041003E00000 +CA84:00000000000200027B820882089E19021502229ECC4200020002000200020000 +CA85:0000000800087708223822085538888800080000000007F80008000800080000 +CA86:000000080008770822382208553888880008000000003EF80208020802080000 +CA87:000000080008770822382208553888880008000000001F080108011401620000 +CA88:000000080008770822382208553888880008000800001000100010001FF80000 +CA89:0000000800087708223822085538888800080000000020F8201020303ECC0000 +CA8A:0000000800087708223822085538888800080000202021FC207020883E700000 +CA8B:000000080008770822382208553888880008000003F802000200020003F80000 +CA8C:000000080008770822382208553888880008000007F8000807F8040007F80000 +CA8D:00000008000877082238220855388888000800003EF802083E0820083E080000 +CA8E:00000008000877082238220855388888000800003EF802883E8820883EF80000 +CA8F:00000008000877082238220855388888000800003E8802883EF820883EF80000 +CA90:00000008000877082238220855388888000800000F8800880F8808140FA20000 +CA91:00000008000877082238220855388888000800003EF802803EF820803EF80000 +CA92:00000008000877082238220855388888000800003EFC02483E4820483EFC0000 +CA93:00000008000877082238220855388888000800003E1002FE3E3820443E380000 +CA94:000000080008770822382208553888880008000003F802080208020803F80000 +CA95:00000008000877082238220855388888000800000208020803F8020803F80000 +CA96:0000000800087708223822085538888800080000210821083F0821143F620000 +CA97:0000000800087708223822085538888800080000001000100010006801840000 +CA98:00000008000877082238220855388888000800000048004800A8011406620000 +CA99:0000000800087708223822085538888800080000000003F00408040803F00000 +CA9A:000000080008770822382208553888880008000003F80020002000D003080000 +CA9B:0000000800087708223822085538888800080000004003F8004000A003180000 +CA9C:000000080008770822382208553888880008000003F8000803F8000800080000 +CA9D:000000080008770822382208553888880008000003F8020003F8020003F80000 +CA9E:000000080008770822382208553888880008000000000FF8022002200FF80000 +CA9F:000000080008770822382208553888880008000000800FF803E0041003E00000 +CAA0:00000000000A000A7B8A088A08BA190A150A22BACC4A000A000A000A000A0000 +CAA1:000000280028772822E8222855E888A80028000007F800080008000800080000 +CAA2:000000280028772822E8222855E888A80028000000003EF80208020802080000 +CAA3:000000280028772822E8222855E888A80028000000003E100210022802C40000 +CAA4:000000280028772822E8222855E888A80028002808000800080008000FF80000 +CAA5:000000280028772822E8222855E888A800280000000020F8201020303ECC0000 +CAA6:000000280028772822E8222855E888A800280000202021FC207020883E700000 +CAA7:000000280028772822E8222855E888A80028000003F802000200020003F80000 +CAA8:000000280028772822E8222855E888A80028000007F8000807F8040007F80000 +CAA9:000000280028772822E8222855E888A8002800003EF802083E0820083E080000 +CAAA:000000280028772822E8222855E888A8002800003EF802883E8820883EF80000 +CAAB:000000280028772822E8222855E888A8002800003E8802883EF820883EF80000 +CAAC:000000280028772822E8222855E888A8002800001F0801081F0810141F620000 +CAAD:000000280028772822E8222855E888A8002800003EF802803EF820803EF80000 +CAAE:000000280028772822E8222855E888A8002800003EFC02483E4820483EFC0000 +CAAF:000000280028772822E8222855E888A8002800003E1002FE3E3820443E380000 +CAB0:000000280028772822E8222855E888A80028000003F802080208020803F80000 +CAB1:000000280028772822E8222855E888A8002800000208020803F8020803F80000 +CAB2:000000280028772822E8222855E888A800280000110811081F0811141F620000 +CAB3:000000280028772822E8222855E888A800280000000800080008003400C20000 +CAB4:000000280028772822E8222855E888A8002800000048004800A8011406620000 +CAB5:000000280028772822E8222855E888A800280000000001F00208020801F00000 +CAB6:000000280028772822E8222855E888A80028000003F80020002000D003080000 +CAB7:000000280028772822E8222855E888A800280000004003F8004000A003180000 +CAB8:000000280028772822E8222855E888A80028000003F8000803F8000800080000 +CAB9:000000280028772822E8222855E888A80028000003F8020003F8020003F80000 +CABA:000000280028772822E8222855E888A80028000000000FF8022002200FF80000 +CABB:000000280028772822E8222855E888A80028000000800FF803E0041003E00000 +CABC:0000000000001EE0022002200640054008A033100100010001007FFC00000000 +CABD:00003DE00440088015402220010001007FFC00001FF000100010001000100000 +CABE:00003DE00440088015402220010001007FFC000000003EF80208020802080000 +CABF:00003DE00440088015402220010001007FFC000000001E100210022802C40000 +CAC0:00003DE00440088015402220010001007FFC000000001000100010001FF00000 +CAC1:00003DE00440088015402220010001007FFC0000000020F8201020303ECC0000 +CAC2:00003DE00440088015402220010001007FFC0000202021FC207020883E700000 +CAC3:00003DE00440088015402220010001007FFC00001FF01000100010001FF00000 +CAC4:00003DE00440088015402220010001007FFC00001FF000101FF010001FF00000 +CAC5:00003DE00440088015402220010001007FFC00003EF802083E0820083E080000 +CAC6:00003DE00440088015402220010001007FFC00003EF802883E8820883EF80000 +CAC7:00003DE00440088015402220010001007FFC00003E8802883EF820883EF80000 +CAC8:00003DE00440088015402220010001007FFC00003E1002103E1020283EC40000 +CAC9:00003DE00440088015402220010001007FFC00003EF802803EF820803EF80000 +CACA:00003DE00440088015402220010001007FFC00003EFC02483E4820483EFC0000 +CACB:00003DE00440088015402220010001007FFC00003E2003FC3E7020883E700000 +CACC:00003DE00440088015402220010001007FFC00001FF01010101010101FF00000 +CACD:00003DE00440088015402220010001007FFC0000101010101FF010101FF00000 +CACE:00003DE00440088015402220010001007FFC0000222022203E2022503E880000 +CACF:00003DE00440088015402220010001007FFC000000000100010002800C400000 +CAD0:00003DE00440088015402220010001007FFC00000000024002400DA033100000 +CAD1:00003DE00440088015402220010001007FFC0000000007C00820082007C00000 +CAD2:00003DE00440088015402220010001007FFC0000000007E00080014006200000 +CAD3:00003DE00440088015402220010001007FFC0000008007E00080014006200000 +CAD4:00003DE00440088015402220010001007FFC00001FF000101FF0001000100000 +CAD5:00003DE00440088015402220010001007FFC00001FF010001FF010001FF00000 +CAD6:00003DE00440088015402220010001007FFC000000001FF0044004401FF00000 +CAD7:00003DE00440088015402220010001007FFC000001001FF007C0082007C00000 +CAD8:0000001000107B90089008901910151E2290CC50041004107FD0001000100000 +CAD9:00007BC8088811082A8E4448040804087FE8000007F800080008000800080000 +CADA:00007BC8088811082A8E4448040804087FE8000000003EF80208020802080000 +CADB:00007BC8088811082A8E4448040804087FE8000000001F080108011401620000 +CADC:00007BC8088811082A8E4448040804087FE8000008000800080008000FF80000 +CADD:00007BC8088811082A8E4448040804087FE80000000010F8101010301ECC0000 +CADE:00007BC8088811082A8E4448040804087FE800000808087F081C08220F9C0000 +CADF:00007BC8088811082A8E4448040804087FE8000003F802000200020003F80000 +CAE0:00007BC8088811082A8E4448040804087FE8000007F8000807F8040007F80000 +CAE1:00007BC8088811082A8E4448040804087FE800003EF802083E0820083E080000 +CAE2:00007BC8088811082A8E4448040804087FE800003EF802883E8820883EF80000 +CAE3:00007BC8088811082A8E4448040804087FE800003E8802883EF820883EF80000 +CAE4:00007BC8088811082A8E4448040804087FE800001F0801081F0810141F620000 +CAE5:00007BC8088811082A8E4448040804087FE800003EF802803EF820803EF80000 +CAE6:00007BC8088811082A8E4448040804087FE800003EFC02483E4820483EFC0000 +CAE7:00007BC8088811082A8E4448040804087FE800001F08017F1F1C10221F1C0000 +CAE8:00007BC8088811082A8E4448040804087FE8000003F802080208020803F80000 +CAE9:00007BC8088811082A8E4448040804087FE800000208020803F8020803F80000 +CAEA:00007BC8088811082A8E4448040804087FE80000110811081F0811141F620000 +CAEB:00007BC8088811082A8E4448040804087FE80000001000100010006801840000 +CAEC:00007BC8088811082A8E4448040804087FE800000048004800A8011406620000 +CAED:00007BC8088811082A8E4448040804087FE80000000003F00408040803F00000 +CAEE:00007BC8088811082A8E4448040804087FE8000003F80020002000D003080000 +CAEF:00007BC8088811082A8E4448040804087FE80000004003F8004000A003180000 +CAF0:00007BC8088811082A8E4448040804087FE8000003F8000803F8000800080000 +CAF1:00007BC8088811082A8E4448040804087FE8000003F8020003F8020003F80000 +CAF2:00007BC8088811082A8E4448040804087FE8000000000FF8022002200FF80000 +CAF3:00007BC8088811082A8E4448040804087FE8000000800FF803E0041003E00000 +CAF4:0000001200127B92089208921912151E2292CC52041204127FD2001200120000 +CAF5:00007BE808A811282AB84468042804287FA8000007F800080008000800080000 +CAF6:00007BE808A811282AB84468042804287FA8000000003EF80208020802080000 +CAF7:00007BE808A811282AB84468042804287FA8000000001F080108011401620000 +CAF8:00007BE808A811282AB84468042804287FA8000008000800080008000FF80000 +CAF9:00007BE808A811282AB84468042804287FA80000000010F8101010301ECC0000 +CAFA:00007BE808A811282AB84468042804287FA800000808087F081C08220F9C0000 +CAFB:00007BE808A811282AB84468042804287FA8000003F802000200020003F80000 +CAFC:00007BE808A811282AB84468042804287FA8000007F8000807F8040007F80000 +CAFD:00007BE808A811282AB84468042804287FA800003EF802083E0820083E080000 +CAFE:00007BE808A811282AB84468042804287FA800003EF802883E8820883EF80000 +CAFF:00007BE808A811282AB84468042804287FA800003E8802883EF820883EF80000 +CB00:00007BE808A811282AB84468042804287FA800001F0801081F0810141F620000 +CB01:00007BE808A811282AB84468042804287FA800003EF802803EF820803EF80000 +CB02:00007BE808A811282AB84468042804287FA800003EFC02483E4820483EFC0000 +CB03:00007BE808A811282AB84468042804287FA800001F08017F1F1C10221F1C0000 +CB04:00007BE808A811282AB84468042804287FA8000003F802080208020803F80000 +CB05:00007BE808A811282AB84468042804287FA800000208020803F8020803F80000 +CB06:00007BE808A811282AB84468042804287FA80000110811081F0811141F620000 +CB07:00007BE808A811282AB84468042804287FA80000001000100010006801840000 +CB08:00007BE808A811282AB84468042804287FA800000048004800A8011406620000 +CB09:00007BE808A811282AB84468042804287FA80000000003F00408040803F00000 +CB0A:00007BE808A811282AB84468042804287FA8000003F80020002000D003080000 +CB0B:00007BE808A811282AB84468042804287FA80000004003F8004000A003180000 +CB0C:00007BE808A811282AB84468042804287FA8000003F8000803F8000800080000 +CB0D:00007BE808A811282AB84468042804287FA8000003F8020003F8020003F80000 +CB0E:00007BE808A811282AB84468042804287FA8000000000FF8022002200FF80000 +CB0F:00007BE808A811282AB84468042804287FA8000000800FF803E0041003E00000 +CB10:0000000800087B8808880888190815082288CC48040804087FE8000800080000 +CB11:00007BC8088811082A884448040804087FE8000007F800080008000800080000 +CB12:00007BC8088811082A884448040804087FE8000000003EF80208020802080000 +CB13:00007BC8088811082A884448040804087FE8000000001F080108011401620000 +CB14:00007BC8088811082A884448040804087FE8000008000800080008000FF80000 +CB15:00007BC8088811082A884448040804087FE80000000010F8101010301ECC0000 +CB16:00007BC8088811082A884448040804087FE800000808087F081C08220F9C0000 +CB17:00007BC8088811082A884448040804087FE8000003F802000200020003F80000 +CB18:00007BC8088811082A884448040804087FE8000007F8000807F8040007F80000 +CB19:00007BC8088811082A884448040804087FE800003EF802083E0820083E080000 +CB1A:00007BC8088811082A884448040804087FE800003EF802883E8820883EF80000 +CB1B:00007BC8088811082A884448040804087FE800003E8802883EF820883EF80000 +CB1C:00007BC8088811082A884448040804087FE800001F0801081F0810141F620000 +CB1D:00007BC8088811082A884448040804087FE800003EF802803EF820803EF80000 +CB1E:00007BC8088811082A884448040804087FE800003EFC02483E4820483EFC0000 +CB1F:00007BC8088811082A884448040804087FE800001F08017F1F1C10221F1C0000 +CB20:00007BC8088811082A884448040804087FE8000003F802080208020803F80000 +CB21:00007BC8088811082A884448040804087FE800000208020803F8020803F80000 +CB22:00007BC8088811082A884448040804087FE80000110811081F0811141F620000 +CB23:00007BC8088811082A884448040804087FE80000001000100010006801840000 +CB24:00007BC8088811082A884448040804087FE800000048004800A8011406620000 +CB25:00007BC8088811082A884448040804087FE80000000003F00408040803F00000 +CB26:00007BC8088811082A884448040804087FE8000003F80020002000D003080000 +CB27:00007BC8088811082A884448040804087FE80000004003F8004000A003180000 +CB28:00007BC8088811082A884448040804087FE8000003F8000803F8000800080000 +CB29:00007BC8088811082A884448040804087FE8000003F8020003F8020003F80000 +CB2A:00007BC8088811082A884448040804087FE8000000000FF8022002200FF80000 +CB2B:00007BC8088811082A884448040804087FE8000000800FF803E0041003E00000 +CB2C:0000000000001EE0022002200640054008A037500440044004407FFC00000000 +CB2D:00003DE00440088015402220044004407FFC00001FF000100010001000100000 +CB2E:00003DE00440088015402220044004407FFC000000003EF80208020802080000 +CB2F:00003DE00440088015402220044004407FFC000000001E100210022802C40000 +CB30:00003DE00440088015402220044004407FFC000000001000100010001FF00000 +CB31:00003DE00440088015402220044004407FFC0000000020F8201020303ECC0000 +CB32:00003DE00440088015402220044004407FFC0000202021FC207020883E700000 +CB33:00003DE00440088015402220044004407FFC00001FF01000100010001FF00000 +CB34:00003DE00440088015402220044004407FFC00001FF000101FF010001FF00000 +CB35:00003DE00440088015402220044004407FFC00003EF802083E0820083E080000 +CB36:00003DE00440088015402220044004407FFC00003EF802883E8820883EF80000 +CB37:00003DE00440088015402220044004407FFC00003E8802883EF820883EF80000 +CB38:00003DE00440088015402220044004407FFC00003E1002103E1020283EC40000 +CB39:00003DE00440088015402220044004407FFC00003EF802803EF820803EF80000 +CB3A:00003DE00440088015402220044004407FFC00003EFC02483E4820483EFC0000 +CB3B:00003DE00440088015402220044004407FFC00003E2003FC3E7020883E700000 +CB3C:00003DE00440088015402220044004407FFC00001FF01010101010101FF00000 +CB3D:00003DE00440088015402220044004407FFC0000101010101FF010101FF00000 +CB3E:00003DE00440088015402220044004407FFC0000222022203E2022503E880000 +CB3F:00003DE00440088015402220044004407FFC000000000100010002800C400000 +CB40:00003DE00440088015402220044004407FFC00000000024002400DA033100000 +CB41:00003DE00440088015402220044004407FFC0000000007C00820082007C00000 +CB42:00003DE00440088015402220044004407FFC0000000007E00080014006200000 +CB43:00003DE00440088015402220044004407FFC0000008007E00080014006200000 +CB44:00003DE00440088015402220044004407FFC00001FF000101FF0001000100000 +CB45:00003DE00440088015402220044004407FFC00001FF010001FF010001FF00000 +CB46:00003DE00440088015402220044004407FFC000000001FF0044004401FF00000 +CB47:00003DE00440088015402220044004407FFC000001001FF007C0082007C00000 +CB48:000000001EE0022002200640054008A0331000003FF801000100010001000000 +CB49:00003DE0044008801540222000007FFC010001001FF000100010001000100000 +CB4A:00003DE0044008801540222000007FFC0100010000003EF80208020802080000 +CB4B:00003DE0044008801540222000007FFC0100010000001E100210022802C40000 +CB4C:00003DE00440088015402220000000007FFC010001001100100010001FF00000 +CB4D:00003DE0044008801540222000007FFC01000100000020F8201020303ECC0000 +CB4E:00003DE0044008801540222000007FFC01000100202021FC207020883E700000 +CB4F:00003DE0044008801540222000007FFC010001001FF01000100010001FF00000 +CB50:00003DE0044008801540222000007FFC010001001FF000101FF010001FF00000 +CB51:00003DE0044008801540222000007FFC010001003EF802083E0820083E080000 +CB52:00003DE0044008801540222000007FFC010001003EF802883E8820883EF80000 +CB53:00003DE0044008801540222000007FFC010001003E8802883EF820883EF80000 +CB54:00003DE0044008801540222000007FFC010001003E1002103E1020283EC40000 +CB55:00003DE0044008801540222000007FFC010001003EF802803EF820803EF80000 +CB56:00003DE0044008801540222000007FFC010001003EFC02483E4820483EFC0000 +CB57:00003DE0044008801540222000007FFC010001003E2003FC3E7020883E700000 +CB58:00003DE0044008801540222000007FFC010001001FF01010101010101FF00000 +CB59:00003DE0044008801540222000007FFC01000100101010101FF010101FF00000 +CB5A:00003DE0044008801540222000007FFC01000100222022203E2022503E880000 +CB5B:00003DE0044008801540222000007FFC0100010000000100010002800C400000 +CB5C:00003DE0044008801540222000007FFC010001000000024002400DA033100000 +CB5D:00003DE0044008801540222000007FFC01000100000007C00820082007C00000 +CB5E:00003DE0044008801540222000007FFC01000100000007E00080014006200000 +CB5F:00003DE0044008801540222000007FFC01000100008007E00080014006200000 +CB60:00003DE0044008801540222000007FFC010001001FF000101FF0001000100000 +CB61:00003DE0044008801540222000007FFC010001001FF010001FF010001FF00000 +CB62:00003DE0044008801540222000007FFC0100010000001FF0044004401FF00000 +CB63:00003DE0044008801540222000007FFC0100010001001FF007C0082007C00000 +CB64:000000087B8808880888190815082288CC4800087FE8040804F8040804080000 +CB65:7BC8088811082A88444800087FE8027802080000000007F80008000800080000 +CB66:7BC8088811082A88444800087FE802780208000000003EF80208020802080000 +CB67:7BC8088811082A88444800087FE802780208000000001F080108011401620000 +CB68:7BC8088811082A884448000800087FE80278020802081000100010001FF80000 +CB69:7BC8088811082A88444800087FE8027802080000000020F8201020303ECC0000 +CB6A:7BC8088811082A88444800087FE8027802080000202021FC207020883E700000 +CB6B:7BC8088811082A88444800087FE802780208000003F802000200020003F80000 +CB6C:7BC8088811082A88444800087FE802780208000007F8000807F8040007F80000 +CB6D:7BC8088811082A88444800087FE80278020800003EF802083E0820083E080000 +CB6E:7BC8088811082A88444800087FE80278020800003EF802883E8820883EF80000 +CB6F:7BC8088811082A88444800087FE80278020800003E8802883EF820883EF80000 +CB70:7BC8088811082A88444800087FE80278020800000F8800880F8808140FA20000 +CB71:7BC8088811082A88444800087FE80278020800003EF802803EF820803EF80000 +CB72:7BC8088811082A88444800087FE80278020800003EFC02483E4820483EFC0000 +CB73:7BC8088811082A88444800087FE80278020800003E1002FE3E3820443E380000 +CB74:7BC8088811082A88444800087FE802780208000003F802080208020803F80000 +CB75:7BC8088811082A88444800087FE80278020800000208020803F8020803F80000 +CB76:7BC8088811082A88444800087FE8027802080000210821083F0821143F620000 +CB77:7BC8088811082A88444800087FE8027802080000001000100010006801840000 +CB78:7BC8088811082A88444800087FE80278020800000048004800A8011406620000 +CB79:7BC8088811082A88444800087FE8027802080000000003F00408040803F00000 +CB7A:7BC8088811082A88444800087FE802780208000003F80020002000D003080000 +CB7B:7BC8088811082A88444800087FE8027802080000004003F8004000A003180000 +CB7C:7BC8088811082A88444800087FE802780208000003F8000803F8000800080000 +CB7D:7BC8088811082A88444800087FE802780208000003F8020003F8020003F80000 +CB7E:7BC8088811082A88444800087FE802780208000000000FF8022002200FF80000 +CB7F:7BC8088811082A88444800087FE802780208000000800FF803E0041003E00000 +CB80:0000000A7B8A088A088A190A150A228ACC4A000A7FEA040A047A040A040A0000 +CB81:7BE808A811282AA8446800287FA805E804280000000007F80008000800080000 +CB82:7BE808A811282AA8446800287FA805E80428000000003EF80208020802080000 +CB83:7BE808A811282AA8446800287FA805E80428000000001F080108011401620000 +CB84:7BE808A811282AA84468002800287FA8042805E804281428100010001FF80000 +CB85:7BE808A811282AA8446800287FA805E804280000000020F8201020303ECC0000 +CB86:7BE808A811282AA8446800287FA805E804280000202021FC207020883E700000 +CB87:7BE808A811282AA8446800287FA805E80428000003F802000200020003F80000 +CB88:7BE808A811282AA8446800287FA805E80428000007F8000807F8040007F80000 +CB89:7BE808A811282AA8446800287FA805E8042800003EF802083E0820083E080000 +CB8A:7BE808A811282AA8446800287FA805E8042800003EF802883E8820883EF80000 +CB8B:7BE808A811282AA8446800287FA805E8042800003E8802883EF820883EF80000 +CB8C:7BE808A811282AA8446800287FA805E8042800000F8800880F8808140FA20000 +CB8D:7BE808A811282AA8446800287FA805E8042800003EF802803EF820803EF80000 +CB8E:7BE808A811282AA8446800287FA805E8042800003EFC02483E4820483EFC0000 +CB8F:7BE808A811282AA8446800287FA805E8042800003E1002FE3E3820443E380000 +CB90:7BE808A811282AA8446800287FA805E80428000003F802080208020803F80000 +CB91:7BE808A811282AA8446800287FA805E8042800000208020803F8020803F80000 +CB92:7BE808A811282AA8446800287FA805E804280000210821083F0821143F620000 +CB93:7BE808A811282AA8446800287FA805E804280000001000100010006801840000 +CB94:7BE808A811282AA8446800287FA805E8042800000048004800A8011406620000 +CB95:7BE808A811282AA8446800287FA805E804280000000003F00408040803F00000 +CB96:7BE808A811282AA8446800287FA805E80428000003F80020002000D003080000 +CB97:7BE808A811282AA8446800287FA805E804280000004003F8004000A003180000 +CB98:7BE808A811282AA8446800287FA805E80428000003F8000803F8000800080000 +CB99:7BE808A811282AA8446800287FA805E80428000003F8020003F8020003F80000 +CB9A:7BE808A811282AA8446800287FA805E80428000000000FF8022002200FF80000 +CB9B:7BE808A811282AA8446800287FA805E80428000000800FF803E0041003E00000 +CB9C:000000087B8808880888190815082288CC4800087FE804080408040804080000 +CB9D:7BC8088811082A88444800087FE8020802000000000007F80008000800080000 +CB9E:7BC8088811082A88444800087FE802080200000000003EF80208020802080000 +CB9F:7BC8088811082A88444800087FE802080200000000001F080108011401620000 +CBA0:7BC8088811082A884448000800087FE80208020802081008100010001FF80000 +CBA1:7BC8088811082A88444800087FE8020802000000000020F8201020303ECC0000 +CBA2:7BC8088811082A88444800087FE8020802000000202021FC207020883E700000 +CBA3:7BC8088811082A88444800087FE802080200000003F802000200020003F80000 +CBA4:7BC8088811082A88444800087FE802080200000007F8000807F8040007F80000 +CBA5:7BC8088811082A88444800087FE80208020000003EF802083E0820083E080000 +CBA6:7BC8088811082A88444800087FE80208020000003EF802883E8820883EF80000 +CBA7:7BC8088811082A88444800087FE80208020000003E8802883EF820883EF80000 +CBA8:7BC8088811082A88444800087FE80208020000000F8800880F8808140FA20000 +CBA9:7BC8088811082A88444800087FE80208020000003EF802803EF820803EF80000 +CBAA:7BC8088811082A88444800087FE80208020000003EFC02483E4820483EFC0000 +CBAB:7BC8088811082A88444800087FE80208020000003E1002FE3E3820443E380000 +CBAC:7BC8088811082A88444800087FE802080200000003F802080208020803F80000 +CBAD:7BC8088811082A88444800087FE80208020000000208020803F8020803F80000 +CBAE:7BC8088811082A88444800087FE8020802000000210821083F0821143F620000 +CBAF:7BC8088811082A88444800087FE8020802000000001000100010006801840000 +CBB0:7BC8088811082A88444800087FE80208020000000048004800A8011406620000 +CBB1:7BC8088811082A88444800087FE8020802000000000003F00408040803F00000 +CBB2:7BC8088811082A88444800087FE802080200000003F80020002000D003080000 +CBB3:7BC8088811082A88444800087FE8020802000000004003F8004000A003180000 +CBB4:7BC8088811082A88444800087FE802080200000003F8000803F8000800080000 +CBB5:7BC8088811082A88444800087FE802080200000003F8020003F8020003F80000 +CBB6:7BC8088811082A88444800087FE802080200000000000FF8022002200FF80000 +CBB7:7BC8088811082A88444800087FE802080200000000800FF803E0041003E00000 +CBB8:000000001EE0022002200640054008A0331000007FFC04400440044004400000 +CBB9:00003DE0044008801540222000007FFC044004401FF000100010001000100000 +CBBA:00003DE0044008801540222000007FFC0440044000003EF80208020802080000 +CBBB:00003DE0044008801540222000007FFC0440044000001E100210022802C40000 +CBBC:00003DE00440088015402220000000007FFC044004401440100010001FF00000 +CBBD:00003DE0044008801540222000007FFC04400440000020F8201020303ECC0000 +CBBE:00003DE0044008801540222000007FFC04400440202021FC207020883E700000 +CBBF:00003DE0044008801540222000007FFC044004401FF01000100010001FF00000 +CBC0:00003DE0044008801540222000007FFC044004401FF000101FF010001FF00000 +CBC1:00003DE0044008801540222000007FFC044004403EF802083E0820083E080000 +CBC2:00003DE0044008801540222000007FFC044004403EF802883E8820883EF80000 +CBC3:00003DE0044008801540222000007FFC044004403E8802883EF820883EF80000 +CBC4:00003DE0044008801540222000007FFC044004403E1002103E1020283EC40000 +CBC5:00003DE0044008801540222000007FFC044004403EF802803EF820803EF80000 +CBC6:00003DE0044008801540222000007FFC044004403EFC02483E4820483EFC0000 +CBC7:00003DE0044008801540222000007FFC044004403E2003FC3E7020883E700000 +CBC8:00003DE0044008801540222000007FFC044004401FF01010101010101FF00000 +CBC9:00003DE0044008801540222000007FFC04400440101010101FF010101FF00000 +CBCA:00003DE0044008801540222000007FFC04400440222022203E2022503E880000 +CBCB:00003DE0044008801540222000007FFC0440044000000100010002800C400000 +CBCC:00003DE0044008801540222000007FFC044004400000024002400DA033100000 +CBCD:00003DE0044008801540222000007FFC04400440000007C00820082007C00000 +CBCE:00003DE0044008801540222000007FFC04400440000007E00080014006200000 +CBCF:00003DE0044008801540222000007FFC04400440008007E00080014006200000 +CBD0:00003DE0044008801540222000007FFC044004401FF000101FF0001000100000 +CBD1:00003DE0044008801540222000007FFC044004401FF010001FF010001FF00000 +CBD2:00003DE0044008801540222000007FFC0440044000001FF0044004401FF00000 +CBD3:00003DE0044008801540222000007FFC0440044001001FF007C0082007C00000 +CBD4:0000000000001EE0022002200640054008A0331000007FFC0000000000000000 +CBD5:00003DE00440088015402220000000007FFC00001FF000100010001000100000 +CBD6:00003DE00440088015402220000000007FFC000000003EF80208020802080000 +CBD7:00003DE00440088015402220000000007FFC000000001E100210022802C40000 +CBD8:00003DE00440088015402220000000007FFC000000001000100010001FF00000 +CBD9:00003DE00440088015402220000000007FFC0000000020F8201020303ECC0000 +CBDA:00003DE00440088015402220000000007FFC0000202021FC207020883E700000 +CBDB:00003DE00440088015402220000000007FFC00001FF01000100010001FF00000 +CBDC:00003DE00440088015402220000000007FFC00001FF000101FF010001FF00000 +CBDD:00003DE00440088015402220000000007FFC00003EF802083E0820083E080000 +CBDE:00003DE00440088015402220000000007FFC00003EF802883E8820883EF80000 +CBDF:00003DE00440088015402220000000007FFC00003E8802883EF820883EF80000 +CBE0:00003DE00440088015402220000000007FFC00003E1002103E1020283EC40000 +CBE1:00003DE00440088015402220000000007FFC00003EF802803EF820803EF80000 +CBE2:00003DE00440088015402220000000007FFC00003EFC02483E4820483EFC0000 +CBE3:00003DE00440088015402220000000007FFC00003E2003FC3E7020883E700000 +CBE4:00003DE00440088015402220000000007FFC00001FF01010101010101FF00000 +CBE5:00003DE00440088015402220000000007FFC0000101010101FF010101FF00000 +CBE6:00003DE00440088015402220000000007FFC0000222022203E2022503E880000 +CBE7:00003DE00440088015402220000000007FFC000000000100010002800C400000 +CBE8:00003DE00440088015402220000000007FFC00000000024002400DA033100000 +CBE9:00003DE00440088015402220000000007FFC0000000007C00820082007C00000 +CBEA:00003DE00440088015402220000000007FFC0000000007E00080014006200000 +CBEB:00003DE00440088015402220000000007FFC0000008007E00080014006200000 +CBEC:00003DE00440088015402220000000007FFC00001FF000101FF0001000100000 +CBED:00003DE00440088015402220000000007FFC00001FF010001FF010001FF00000 +CBEE:00003DE00440088015402220000000007FFC000000001FF0044004401FF00000 +CBEF:00003DE00440088015402220000000007FFC000001001FF007C0082007C00000 +CBF0:0000000800087B8808880888190815082288CC4800087FE80008000800080000 +CBF1:00007BC8088811082A884448000800087FE8000007F800080008000800080000 +CBF2:00007BC8088811082A884448000800087FE8000000003EF80208020802080000 +CBF3:00007BC8088811082A884448000800087FE8000000001F080108011401620000 +CBF4:00007BC8088811082A884448000800087FE8000008000800080008000FF80000 +CBF5:00007BC8088811082A884448000800087FE80000000010F8101010301ECC0000 +CBF6:00007BC8088811082A884448000800087FE800000808087F081C08220F9C0000 +CBF7:00007BC8088811082A884448000800087FE8000003F802000200020003F80000 +CBF8:00007BC8088811082A884448000800087FE8000007F8000807F8040007F80000 +CBF9:00007BC8088811082A884448000800087FE800003EF802083E0820083E080000 +CBFA:00007BC8088811082A884448000800087FE800003EF802883E8820883EF80000 +CBFB:00007BC8088811082A884448000800087FE800003E8802883EF820883EF80000 +CBFC:00007BC8088811082A884448000800087FE800001F0801081F0810141F620000 +CBFD:00007BC8088811082A884448000800087FE800003EF802803EF820803EF80000 +CBFE:00007BC8088811082A884448000800087FE800003EFC02483E4820483EFC0000 +CBFF:00007BC8088811082A884448000800087FE800001F08017F1F1C10221F1C0000 +CC00:00007BC8088811082A884448000800087FE8000003F802080208020803F80000 +CC01:00007BC8088811082A884448000800087FE800000208020803F8020803F80000 +CC02:00007BC8088811082A884448000800087FE80000110811081F0811141F620000 +CC03:00007BC8088811082A884448000800087FE80000001000100010006801840000 +CC04:00007BC8088811082A884448000800087FE800000048004800A8011406620000 +CC05:00007BC8088811082A884448000800087FE80000000003F00408040803F00000 +CC06:00007BC8088811082A884448000800087FE8000003F80020002000D003080000 +CC07:00007BC8088811082A884448000800087FE80000004003F8004000A003180000 +CC08:00007BC8088811082A884448000800087FE8000003F8000803F8000800080000 +CC09:00007BC8088811082A884448000800087FE8000003F8020003F8020003F80000 +CC0A:00007BC8088811082A884448000800087FE8000000000FF8022002200FF80000 +CC0B:00007BC8088811082A884448000800087FE8000000800FF803E0041003E00000 +CC0C:00000000000800087B8808880888190815082288CC4800080008000800080000 +CC0D:0000000800087708220822085508888800080000000007F80008000800080000 +CC0E:000000080008770822082208550888880008000000003EF80208020802080000 +CC0F:000000080008770822082208550888880008000000001F080108011401620000 +CC10:000000080008770822082208550888880008000800001000100010001FF80000 +CC11:0000000800087708220822085508888800080000000020F8201020303ECC0000 +CC12:0000000800087708220822085508888800080000202021FC207020883E700000 +CC13:000000080008770822082208550888880008000003F802000200020003F80000 +CC14:000000080008770822082208550888880008000007F8000807F8040007F80000 +CC15:00000008000877082208220855088888000800003EF802083E0820083E080000 +CC16:00000008000877082208220855088888000800003EF802883E8820883EF80000 +CC17:00000008000877082208220855088888000800003E8802883EF820883EF80000 +CC18:00000008000877082208220855088888000800000F8800880F8808140FA20000 +CC19:00000008000877082208220855088888000800003EF802803EF820803EF80000 +CC1A:00000008000877082208220855088888000800003EFC02483E4820483EFC0000 +CC1B:00000008000877082208220855088888000800003E1002FE3E3820443E380000 +CC1C:000000080008770822082208550888880008000003F802080208020803F80000 +CC1D:00000008000877082208220855088888000800000208020803F8020803F80000 +CC1E:0000000800087708220822085508888800080000210821083F0821143F620000 +CC1F:0000000800087708220822085508888800080000001000100010006801840000 +CC20:00000008000877082208220855088888000800000048004800A8011406620000 +CC21:0000000800087708220822085508888800080000000003F00408040803F00000 +CC22:000000080008770822082208550888880008000003F80020002000D003080000 +CC23:0000000800087708220822085508888800080000004003F8004000A003180000 +CC24:000000080008770822082208550888880008000003F8000803F8000800080000 +CC25:000000080008770822082208550888880008000003F8020003F8020003F80000 +CC26:000000080008770822082208550888880008000000000FF8022002200FF80000 +CC27:000000080008770822082208550888880008000000800FF803E0041003E00000 +CC28:000000000010041004103F900110021E06100910309000100010001000100000 +CC29:00000008000808087E08080E140862080008000007F800080008000800080000 +CC2A:00000008000808087E08080E140862080008000000003EF80208020802080000 +CC2B:00000008000808087E08080E140862080008000000001F080108011401620000 +CC2C:00000008000808087E08080E140862080008000808000800080008000FF80000 +CC2D:00000008000808087E08080E1408620800080000000010F8101010301ECC0000 +CC2E:00000008000808087E08080E14086208000800000808087F081C08220F9C0000 +CC2F:00000008000808087E08080E140862080008000003F802000200020003F80000 +CC30:00000008000808087E08080E140862080008000007F8000807F8040007F80000 +CC31:00000008000808087E08080E14086208000800003EF802083E0820083E080000 +CC32:00000008000808087E08080E14086208000800003EF802883E8820883EF80000 +CC33:00000008000808087E08080E14086208000800003E8802883EF820883EF80000 +CC34:00000008000808087E08080E14086208000800001F0801081F0810141F620000 +CC35:00000008000808087E08080E14086208000800003EF802803EF820803EF80000 +CC36:00000008000808087E08080E14086208000800003EFC02483E4820483EFC0000 +CC37:00000008000808087E08080E14086208000800001F08017F1F1C10221F1C0000 +CC38:00000008000808087E08080E140862080008000003F802080208020803F80000 +CC39:00000008000808087E08080E14086208000800000208020803F8020803F80000 +CC3A:00000008000808087E08080E1408620800080000110811081F0811141F620000 +CC3B:00000008000808087E08080E1408620800080000001000100010006801840000 +CC3C:00000008000808087E08080E14086208000800000048004800A8011406620000 +CC3D:00000008000808087E08080E1408620800080000000003F00408040803F00000 +CC3E:00000008000808087E08080E140862080008000003F80020002000D003080000 +CC3F:00000008000808087E08080E1408620800080000004003F8004000A003180000 +CC40:00000008000808087E08080E140862080008000003F8000803F8000800080000 +CC41:00000008000808087E08080E140862080008000003F8020003F8020003F80000 +CC42:00000008000808087E08080E140862080008000000000FF8022002200FF80000 +CC43:00000008000808087E08080E140862080008000000800FF803E0041003E00000 +CC44:000000000012041204123F920112021E06120912309200120012001200120000 +CC45:00000028002808287E280838142862280028000007F800080008000800080000 +CC46:00000028002808287E280838142862280028000000003EF80208020802080000 +CC47:00000028002808287E280838142862280028000000003E100210022802C40000 +CC48:00000028002808287E280838142862280028002808000800080008000FF80000 +CC49:00000028002808287E2808381428622800280000000020F8201020303ECC0000 +CC4A:00000028002808287E2808381428622800280000202021FC207020883E700000 +CC4B:00000028002808287E280838142862280028000003F802000200020003F80000 +CC4C:00000028002808287E280838142862280028000007F8000807F8040007F80000 +CC4D:00000028002808287E28083814286228002800003EF802083E0820083E080000 +CC4E:00000028002808287E28083814286228002800003EF802883E8820883EF80000 +CC4F:00000028002808287E28083814286228002800003E8802883EF820883EF80000 +CC50:00000028002808287E28083814286228002800001F0801081F0810141F620000 +CC51:00000028002808287E28083814286228002800003EF802803EF820803EF80000 +CC52:00000028002808287E28083814286228002800003EFC02483E4820483EFC0000 +CC53:00000028002808287E28083814286228002800003E1002FE3E3820443E380000 +CC54:00000028002808287E280838142862280028000003F802080208020803F80000 +CC55:00000028002808287E28083814286228002800000208020803F8020803F80000 +CC56:00000028002808287E2808381428622800280000110811081F0811141F620000 +CC57:00000028002808287E2808381428622800280000000800080008003400C20000 +CC58:00000028002808287E28083814286228002800000048004800A8011406620000 +CC59:00000028002808287E2808381428622800280000000001F00208020801F00000 +CC5A:00000028002808287E280838142862280028000003F80020002000D003080000 +CC5B:00000028002808287E2808381428622800280000004003F8004000A003180000 +CC5C:00000028002808287E280838142862280028000003F8000803F8000800080000 +CC5D:00000028002808287E280838142862280028000003F8020003F8020003F80000 +CC5E:00000028002808287E280838142862280028000000000FF8022002200FF80000 +CC5F:00000028002808287E280838142862280028000000800FF803E0041003E00000 +CC60:000000000010041004103F90011E02100610091E309000100010001000100000 +CC61:00000008000808087E0E0808140E62080008000007F800080008000800080000 +CC62:00000008000808087E0E0808140E62080008000000003EF80208020802080000 +CC63:00000008000808087E0E0808140E62080008000000001F080108011401620000 +CC64:00000008000808087E0E0808140E62080008000008000800080008000FF80000 +CC65:00000008000808087E0E0808140E620800080000000010F8101010301ECC0000 +CC66:00000008000808087E0E0808140E6208000800000808087F081C08220F9C0000 +CC67:00000008000808087E0E0808140E62080008000003F802000200020003F80000 +CC68:00000008000808087E0E0808140E62080008000007F8000807F8040007F80000 +CC69:00000008000808087E0E0808140E6208000800003EF802083E0820083E080000 +CC6A:00000008000808087E0E0808140E6208000800003EF802883E8820883EF80000 +CC6B:00000008000808087E0E0808140E6208000800003E8802883EF820883EF80000 +CC6C:00000008000808087E0E0808140E6208000800001F0801081F0810141F620000 +CC6D:00000008000808087E0E0808140E6208000800003EF802803EF820803EF80000 +CC6E:00000008000808087E0E0808140E6208000800003EFC02483E4820483EFC0000 +CC6F:00000008000808087E0E0808140E6208000800001F08017F1F1C10221F1C0000 +CC70:00000008000808087E0E0808140E62080008000003F802080208020803F80000 +CC71:00000008000808087E0E0808140E6208000800000208020803F8020803F80000 +CC72:00000008000808087E0E0808140E620800080000110811081F0811141F620000 +CC73:00000008000808087E0E0808140E620800080000001000100010006801840000 +CC74:00000008000808087E0E0808140E6208000800000048004800A8011406620000 +CC75:00000008000808087E0E0808140E620800080000000003F00408040803F00000 +CC76:00000008000808087E0E0808140E62080008000003F80020002000D003080000 +CC77:00000008000808087E0E0808140E620800080000004003F8004000A003180000 +CC78:00000008000808087E0E0808140E62080008000003F8000803F8000800080000 +CC79:00000008000808087E0E0808140E62080008000003F8020003F8020003F80000 +CC7A:00000008000808087E0E0808140E62080008000000000FF8022002200FF80000 +CC7B:00000008000808087E0E0808140E62080008000000800FF803E0041003E00000 +CC7C:000000000012041204123F92011E02120612091E309200120012001200120000 +CC7D:00000028002808287E380828143862280028000007F800080008000800080000 +CC7E:00000028002808287E380828143862280028000000003EF80208020802080000 +CC7F:00000028002808287E380828143862280028000000003E100210022802C40000 +CC80:00000028002808287E380828143862280028002808000800080008000FF80000 +CC81:00000028002808287E3808281438622800280000000020F8201020303ECC0000 +CC82:00000028002808287E3808281438622800280000202021FC207020883E700000 +CC83:00000028002808287E380828143862280028000003F802000200020003F80000 +CC84:00000028002808287E380828143862280028000007F8000807F8040007F80000 +CC85:00000028002808287E38082814386228002800003EF802083E0820083E080000 +CC86:00000028002808287E38082814386228002800003EF802883E8820883EF80000 +CC87:00000028002808287E38082814386228002800003E8802883EF820883EF80000 +CC88:00000028002808287E38082814386228002800001F0801081F0810141F620000 +CC89:00000028002808287E38082814386228002800003EF802803EF820803EF80000 +CC8A:00000028002808287E38082814386228002800003EFC02483E4820483EFC0000 +CC8B:00000028002808287E38082814386228002800003E1002FE3E3820443E380000 +CC8C:00000028002808287E380828143862280028000003F802080208020803F80000 +CC8D:00000028002808287E38082814386228002800000208020803F8020803F80000 +CC8E:00000028002808287E3808281438622800280000110811081F0811141F620000 +CC8F:00000028002808287E3808281438622800280000000800080008003400C20000 +CC90:00000028002808287E38082814386228002800000048004800A8011406620000 +CC91:00000028002808287E3808281438622800280000000001F00208020801F00000 +CC92:00000028002808287E380828143862280028000003F80020002000D003080000 +CC93:00000028002808287E3808281438622800280000004003F8004000A003180000 +CC94:00000028002808287E380828143862280028000003F8000803F8000800080000 +CC95:00000028002808287E380828143862280028000003F8020003F8020003F80000 +CC96:00000028002808287E380828143862280028000000000FF8022002200FF80000 +CC97:00000028002808287E380828143862280028000000800FF803E0041003E00000 +CC98:000000000002040204023F820102021E06020902308200020002000200020000 +CC99:00000008000808087E0808381408620800080000000007F80008000800080000 +CC9A:00000008000808087E080838140862080008000000003EF80208020802080000 +CC9B:00000008000808087E080838140862080008000000001F080108011401620000 +CC9C:00000008000808087E080838140862080008000000001000100010001FF80000 +CC9D:00000008000808087E0808381408620800080000000020F8201020303ECC0000 +CC9E:00000008000808087E0808381408620800080000202021FC207020883E700000 +CC9F:00000008000808087E080838140862080008000003F802000200020003F80000 +CCA0:00000008000808087E080838140862080008000007F8000807F8040007F80000 +CCA1:00000008000808087E08083814086208000800003EF802083E0820083E080000 +CCA2:00000008000808087E08083814086208000800003EF802883E8820883EF80000 +CCA3:00000008000808087E08083814086208000800003E8802883EF820883EF80000 +CCA4:00000008000808087E08083814086208000800000F8800880F8808140FA20000 +CCA5:00000008000808087E08083814086208000800003EF802803EF820803EF80000 +CCA6:00000008000808087E08083814086208000800003EFC02483E4820483EFC0000 +CCA7:00000008000808087E08083814086208000800003E1002FE3E3820443E380000 +CCA8:00000008000808087E080838140862080008000003F802080208020803F80000 +CCA9:00000008000808087E08083814086208000800000208020803F8020803F80000 +CCAA:00000008000808087E0808381408620800080000210821083F0821143F620000 +CCAB:00000008000808087E0808381408620800080000001000100010006801840000 +CCAC:00000008000808087E08083814086208000800000048004800A8011406620000 +CCAD:00000008000808087E0808381408620800080000000003F00408040803F00000 +CCAE:00000008000808087E080838140862080008000003F80020002000D003080000 +CCAF:00000008000808087E0808381408620800080000004003F8004000A003180000 +CCB0:00000008000808087E080838140862080008000003F8000803F8000800080000 +CCB1:00000008000808087E080838140862080008000003F8020003F8020003F80000 +CCB2:00000008000808087E080838140862080008000000000FF8022002200FF80000 +CCB3:00000008000808087E080838140862080008000000800FF803E0041003E00000 +CCB4:00000000000A040A040A3F8A010A023A060A090A308A000A000A000A000A0000 +CCB5:00000028002808287E2808E8142862280028000007F800080008000800080000 +CCB6:00000028002808287E2808E8142862280028000000003EF80208020802080000 +CCB7:00000028002808287E2808E8142862280028000000003E100210022802C40000 +CCB8:00000028002808287E2808E8142862280028000008000800080008000FF80000 +CCB9:00000028002808287E2808E81428622800280000000020F8201020303ECC0000 +CCBA:00000028002808287E2808E81428622800280000202021FC207020883E700000 +CCBB:00000028002808287E2808E8142862280028000003F802000200020003F80000 +CCBC:00000028002808287E2808E8142862280028000007F8000807F8040007F80000 +CCBD:00000028002808287E2808E814286228002800003EF802083E0820083E080000 +CCBE:00000028002808287E2808E814286228002800003EF802883E8820883EF80000 +CCBF:00000028002808287E2808E814286228002800003E8802883EF820883EF80000 +CCC0:00000028002808287E2808E814286228002800001F0801081F0810141F620000 +CCC1:00000028002808287E2808E814286228002800003EF802803EF820803EF80000 +CCC2:00000028002808287E2808E814286228002800003EFC02483E4820483EFC0000 +CCC3:00000028002808287E2808E814286228002800003E1002FE3E3820443E380000 +CCC4:00000028002808287E2808E8142862280028000003F802080208020803F80000 +CCC5:00000028002808287E2808E814286228002800000208020803F8020803F80000 +CCC6:00000028002808287E2808E81428622800280000110811081F0811141F620000 +CCC7:00000028002808287E2808E81428622800280000000800080008003400C20000 +CCC8:00000028002808287E2808E814286228002800000048004800A8011406620000 +CCC9:00000028002808287E2808E81428622800280000000001F00208020801F00000 +CCCA:00000028002808287E2808E8142862280028000003F80020002000D003080000 +CCCB:00000028002808287E2808E81428622800280000004003F8004000A003180000 +CCCC:00000028002808287E2808E8142862280028000003F8000803F8000800080000 +CCCD:00000028002808287E2808E8142862280028000003F8020003F8020003F80000 +CCCE:00000028002808287E2808E8142862280028000000000FF8022002200FF80000 +CCCF:00000028002808287E2808E8142862280028000000800FF803E0041003E00000 +CCD0:000000000002040204023F82011E02020602091E308200020002000200020000 +CCD1:00000008000808087E3808081438620800080000000007F80008000800080000 +CCD2:00000008000808087E380808143862080008000000003EF80208020802080000 +CCD3:00000008000808087E380808143862080008000000001F080108011401620000 +CCD4:00000008000808087E380808143862080008000800001000100010001FF80000 +CCD5:00000008000808087E3808081438620800080000000020F8201020303ECC0000 +CCD6:00000008000808087E3808081438620800080000202021FC207020883E700000 +CCD7:00000008000808087E380808143862080008000003F802000200020003F80000 +CCD8:00000008000808087E380808143862080008000007F8000807F8040007F80000 +CCD9:00000008000808087E38080814386208000800003EF802083E0820083E080000 +CCDA:00000008000808087E38080814386208000800003EF802883E8820883EF80000 +CCDB:00000008000808087E38080814386208000800003E8802883EF820883EF80000 +CCDC:00000008000808087E38080814386208000800000F8800880F8808140FA20000 +CCDD:00000008000808087E38080814386208000800003EF802803EF820803EF80000 +CCDE:00000008000808087E38080814386208000800003EFC02483E4820483EFC0000 +CCDF:00000008000808087E38080814386208000800003E1002FE3E3820443E380000 +CCE0:00000008000808087E380808143862080008000003F802080208020803F80000 +CCE1:00000008000808087E38080814386208000800000208020803F8020803F80000 +CCE2:00000008000808087E3808081438620800080000210821083F0821143F620000 +CCE3:00000008000808087E3808081438620800080000001000100010006801840000 +CCE4:00000008000808087E38080814386208000800000048004800A8011406620000 +CCE5:00000008000808087E3808081438620800080000000003F00408040803F00000 +CCE6:00000008000808087E380808143862080008000003F80020002000D003080000 +CCE7:00000008000808087E3808081438620800080000004003F8004000A003180000 +CCE8:00000008000808087E380808143862080008000003F8000803F8000800080000 +CCE9:00000008000808087E380808143862080008000003F8020003F8020003F80000 +CCEA:00000008000808087E380808143862080008000000000FF8022002200FF80000 +CCEB:00000008000808087E380808143862080008000000800FF803E0041003E00000 +CCEC:00000000000A040A040A3F8A013A020A060A093A308A000A000A000A000A0000 +CCED:00000028002808287EE8082814E862280028000007F800080008000800080000 +CCEE:00000028002808287EE8082814E862280028000000003EF80208020802080000 +CCEF:00000028002808287EE8082814E862280028000000003E100210022802C40000 +CCF0:00000028002808287EE8082814E862280028002808000800080008000FF80000 +CCF1:00000028002808287EE8082814E8622800280000000020F8201020303ECC0000 +CCF2:00000028002808287EE8082814E8622800280000202021FC207020883E700000 +CCF3:00000028002808287EE8082814E862280028000003F802000200020003F80000 +CCF4:00000028002808287EE8082814E862280028000007F8000807F8040007F80000 +CCF5:00000028002808287EE8082814E86228002800003EF802083E0820083E080000 +CCF6:00000028002808287EE8082814E86228002800003EF802883E8820883EF80000 +CCF7:00000028002808287EE8082814E86228002800003E8802883EF820883EF80000 +CCF8:00000028002808287EE8082814E86228002800001F0801081F0810141F620000 +CCF9:00000028002808287EE8082814E86228002800003EF802803EF820803EF80000 +CCFA:00000028002808287EE8082814E86228002800003EFC02483E4820483EFC0000 +CCFB:00000028002808287EE8082814E86228002800003E1002FE3E3820443E380000 +CCFC:00000028002808287EE8082814E862280028000003F802080208020803F80000 +CCFD:00000028002808287EE8082814E86228002800000208020803F8020803F80000 +CCFE:00000028002808287EE8082814E8622800280000110811081F0811141F620000 +CCFF:00000028002808287EE8082814E8622800280000000800080008003400C20000 +CD00:00000028002808287EE8082814E86228002800000048004800A8011406620000 +CD01:00000028002808287EE8082814E8622800280000000001F00208020801F00000 +CD02:00000028002808287EE8082814E862280028000003F80020002000D003080000 +CD03:00000028002808287EE8082814E8622800280000004003F8004000A003180000 +CD04:00000028002808287EE8082814E862280028000003F8000803F8000800080000 +CD05:00000028002808287EE8082814E862280028000003F8020003F8020003F80000 +CD06:00000028002808287EE8082814E862280028000000000FF8022002200FF80000 +CD07:00000028002808287EE8082814E862280028000000800FF803E0041003E00000 +CD08:0000010001000FE000400080018002400C2000000100010001007FFC00000000 +CD09:000001000FC0010002800C40010001007FFC00001FF000100010001000100000 +CD0A:000001000FC0010002800C40010001007FFC000000003EF80208020802080000 +CD0B:000001000FC0010002800C40010001007FFC000000001E100210022802C40000 +CD0C:000001000FC0010002800C40010001007FFC000000001000100010001FF00000 +CD0D:000001000FC0010002800C40010001007FFC0000000020F8201020303ECC0000 +CD0E:000001000FC0010002800C40010001007FFC0000202021FC207020883E700000 +CD0F:000001000FC0010002800C40010001007FFC00001FF01000100010001FF00000 +CD10:000001000FC0010002800C40010001007FFC00001FF000101FF010001FF00000 +CD11:000001000FC0010002800C40010001007FFC00003EF802083E0820083E080000 +CD12:000001000FC0010002800C40010001007FFC00003EF802883E8820883EF80000 +CD13:000001000FC0010002800C40010001007FFC00003E8802883EF820883EF80000 +CD14:000001000FC0010002800C40010001007FFC00003E1002103E1020283EC40000 +CD15:000001000FC0010002800C40010001007FFC00003EF802803EF820803EF80000 +CD16:000001000FC0010002800C40010001007FFC00003EFC02483E4820483EFC0000 +CD17:000001000FC0010002800C40010001007FFC00003E2003FC3E7020883E700000 +CD18:000001000FC0010002800C40010001007FFC00001FF01010101010101FF00000 +CD19:000001000FC0010002800C40010001007FFC0000101010101FF010101FF00000 +CD1A:000001000FC0010002800C40010001007FFC0000222022203E2022503E880000 +CD1B:000001000FC0010002800C40010001007FFC000000000100010002800C400000 +CD1C:000001000FC0010002800C40010001007FFC00000000024002400DA033100000 +CD1D:000001000FC0010002800C40010001007FFC0000000007C00820082007C00000 +CD1E:000001000FC0010002800C40010001007FFC0000000007E00080014006200000 +CD1F:000001000FC0010002800C40010001007FFC0000008007E00080014006200000 +CD20:000001000FC0010002800C40010001007FFC00001FF000101FF0001000100000 +CD21:000001000FC0010002800C40010001007FFC00001FF010001FF010001FF00000 +CD22:000001000FC0010002800C40010001007FFC000000001FF0044004401FF00000 +CD23:000001000FC0010002800C40010001007FFC000001001FF007C0082007C00000 +CD24:00000010041004103F9001100210061E09103090041004107FD0001000100000 +CD25:000002081F880208050E1888040804087FE8000007F800080008000800080000 +CD26:000002081F880208050E1888040804087FE8000000003EF80208020802080000 +CD27:000002081F880208050E1888040804087FE8000000001F080108011401620000 +CD28:000002081F880208050E1888040804087FE8000008000800080008000FF80000 +CD29:000002081F880208050E1888040804087FE80000000010F8101010301ECC0000 +CD2A:000002081F880208050E1888040804087FE800000808087F081C08220F9C0000 +CD2B:000002081F880208050E1888040804087FE8000003F802000200020003F80000 +CD2C:000002081F880208050E1888040804087FE8000007F8000807F8040007F80000 +CD2D:000002081F880208050E1888040804087FE800003EF802083E0820083E080000 +CD2E:000002081F880208050E1888040804087FE800003EF802883E8820883EF80000 +CD2F:000002081F880208050E1888040804087FE800003E8802883EF820883EF80000 +CD30:000002081F880208050E1888040804087FE800001F0801081F0810141F620000 +CD31:000002081F880208050E1888040804087FE800003EF802803EF820803EF80000 +CD32:000002081F880208050E1888040804087FE800003EFC02483E4820483EFC0000 +CD33:000002081F880208050E1888040804087FE800001F08017F1F1C10221F1C0000 +CD34:000002081F880208050E1888040804087FE8000003F802080208020803F80000 +CD35:000002081F880208050E1888040804087FE800000208020803F8020803F80000 +CD36:000002081F880208050E1888040804087FE80000110811081F0811141F620000 +CD37:000002081F880208050E1888040804087FE80000001000100010006801840000 +CD38:000002081F880208050E1888040804087FE800000048004800A8011406620000 +CD39:000002081F880208050E1888040804087FE80000000003F00408040803F00000 +CD3A:000002081F880208050E1888040804087FE8000003F80020002000D003080000 +CD3B:000002081F880208050E1888040804087FE80000004003F8004000A003180000 +CD3C:000002081F880208050E1888040804087FE8000003F8000803F8000800080000 +CD3D:000002081F880208050E1888040804087FE8000003F8020003F8020003F80000 +CD3E:000002081F880208050E1888040804087FE8000000000FF8022002200FF80000 +CD3F:000002081F880208050E1888040804087FE8000000800FF803E0041003E00000 +CD40:00000012041204123F9201120212061E09123092041204127FD2001200120000 +CD41:000002281FA80228053818A8042804287FA8000007F800080008000800080000 +CD42:000002281FA80228053818A8042804287FA8000000003EF80208020802080000 +CD43:000002281FA80228053818A8042804287FA8000000001F080108011401620000 +CD44:000002281FA80228053818A8042804287FA8000008000800080008000FF80000 +CD45:000002281FA80228053818A8042804287FA80000000010F8101010301ECC0000 +CD46:000002281FA80228053818A8042804287FA800000808087F081C08220F9C0000 +CD47:000002281FA80228053818A8042804287FA8000003F802000200020003F80000 +CD48:000002281FA80228053818A8042804287FA8000007F8000807F8040007F80000 +CD49:000002281FA80228053818A8042804287FA800003EF802083E0820083E080000 +CD4A:000002281FA80228053818A8042804287FA800003EF802883E8820883EF80000 +CD4B:000002281FA80228053818A8042804287FA800003E8802883EF820883EF80000 +CD4C:000002281FA80228053818A8042804287FA800001F0801081F0810141F620000 +CD4D:000002281FA80228053818A8042804287FA800003EF802803EF820803EF80000 +CD4E:000002281FA80228053818A8042804287FA800003EFC02483E4820483EFC0000 +CD4F:000002281FA80228053818A8042804287FA800001F08017F1F1C10221F1C0000 +CD50:000002281FA80228053818A8042804287FA8000003F802080208020803F80000 +CD51:000002281FA80228053818A8042804287FA800000208020803F8020803F80000 +CD52:000002281FA80228053818A8042804287FA80000110811081F0811141F620000 +CD53:000002281FA80228053818A8042804287FA80000001000100010006801840000 +CD54:000002281FA80228053818A8042804287FA800000048004800A8011406620000 +CD55:000002281FA80228053818A8042804287FA80000000003F00408040803F00000 +CD56:000002281FA80228053818A8042804287FA8000003F80020002000D003080000 +CD57:000002281FA80228053818A8042804287FA80000004003F8004000A003180000 +CD58:000002281FA80228053818A8042804287FA8000003F8000803F8000800080000 +CD59:000002281FA80228053818A8042804287FA8000003F8020003F8020003F80000 +CD5A:000002281FA80228053818A8042804287FA8000000000FF8022002200FF80000 +CD5B:000002281FA80228053818A8042804287FA8000000800FF803E0041003E00000 +CD5C:00000008040804083F8801080208060809083088040804087FE8000800080000 +CD5D:000002081F88020805081888040804087FE8000007F800080008000800080000 +CD5E:000002081F88020805081888040804087FE8000000003EF80208020802080000 +CD5F:000002081F88020805081888040804087FE8000000001F080108011401620000 +CD60:000002081F88020805081888040804087FE8000008000800080008000FF80000 +CD61:000002081F88020805081888040804087FE80000000010F8101010301ECC0000 +CD62:000002081F88020805081888040804087FE800000808087F081C08220F9C0000 +CD63:000002081F88020805081888040804087FE8000003F802000200020003F80000 +CD64:000002081F88020805081888040804087FE8000007F8000807F8040007F80000 +CD65:000002081F88020805081888040804087FE800003EF802083E0820083E080000 +CD66:000002081F88020805081888040804087FE800003EF802883E8820883EF80000 +CD67:000002081F88020805081888040804087FE800003E8802883EF820883EF80000 +CD68:000002081F88020805081888040804087FE800001F0801081F0810141F620000 +CD69:000002081F88020805081888040804087FE800003EF802803EF820803EF80000 +CD6A:000002081F88020805081888040804087FE800003EFC02483E4820483EFC0000 +CD6B:000002081F88020805081888040804087FE800001F08017F1F1C10221F1C0000 +CD6C:000002081F88020805081888040804087FE8000003F802080208020803F80000 +CD6D:000002081F88020805081888040804087FE800000208020803F8020803F80000 +CD6E:000002081F88020805081888040804087FE80000110811081F0811141F620000 +CD6F:000002081F88020805081888040804087FE80000001000100010006801840000 +CD70:000002081F88020805081888040804087FE800000048004800A8011406620000 +CD71:000002081F88020805081888040804087FE80000000003F00408040803F00000 +CD72:000002081F88020805081888040804087FE8000003F80020002000D003080000 +CD73:000002081F88020805081888040804087FE80000004003F8004000A003180000 +CD74:000002081F88020805081888040804087FE8000003F8000803F8000800080000 +CD75:000002081F88020805081888040804087FE8000003F8020003F8020003F80000 +CD76:000002081F88020805081888040804087FE8000000000FF8022002200FF80000 +CD77:000002081F88020805081888040804087FE8000000800FF803E0041003E00000 +CD78:0000010001000FE000400080018002400C2004400440044004407FFC00000000 +CD79:000001000FC0010002800C40044004407FFC00001FF000100010001000100000 +CD7A:000001000FC0010002800C40044004407FFC000000003EF80208020802080000 +CD7B:000001000FC0010002800C40044004407FFC000000001E100210022802C40000 +CD7C:000001000FC0010002800C40044004407FFC000000001000100010001FF00000 +CD7D:000001000FC0010002800C40044004407FFC0000000020F8201020303ECC0000 +CD7E:000001000FC0010002800C40044004407FFC0000202021FC207020883E700000 +CD7F:000001000FC0010002800C40044004407FFC00001FF01000100010001FF00000 +CD80:000001000FC0010002800C40044004407FFC00001FF000101FF010001FF00000 +CD81:000001000FC0010002800C40044004407FFC00003EF802083E0820083E080000 +CD82:000001000FC0010002800C40044004407FFC00003EF802883E8820883EF80000 +CD83:000001000FC0010002800C40044004407FFC00003E8802883EF820883EF80000 +CD84:000001000FC0010002800C40044004407FFC00003E1002103E1020283EC40000 +CD85:000001000FC0010002800C40044004407FFC00003EF802803EF820803EF80000 +CD86:000001000FC0010002800C40044004407FFC00003EFC02483E4820483EFC0000 +CD87:000001000FC0010002800C40044004407FFC00003E2003FC3E7020883E700000 +CD88:000001000FC0010002800C40044004407FFC00001FF01010101010101FF00000 +CD89:000001000FC0010002800C40044004407FFC0000101010101FF010101FF00000 +CD8A:000001000FC0010002800C40044004407FFC0000222022203E2022503E880000 +CD8B:000001000FC0010002800C40044004407FFC000000000100010002800C400000 +CD8C:000001000FC0010002800C40044004407FFC00000000024002400DA033100000 +CD8D:000001000FC0010002800C40044004407FFC0000000007C00820082007C00000 +CD8E:000001000FC0010002800C40044004407FFC0000000007E00080014006200000 +CD8F:000001000FC0010002800C40044004407FFC0000008007E00080014006200000 +CD90:000001000FC0010002800C40044004407FFC00001FF000101FF0001000100000 +CD91:000001000FC0010002800C40044004407FFC00001FF010001FF010001FF00000 +CD92:000001000FC0010002800C40044004407FFC000000001FF0044004401FF00000 +CD93:000001000FC0010002800C40044004407FFC000001001FF007C0082007C00000 +CD94:00000080008007F00020004000C00120061000003FF801000100010001000000 +CD95:000001000FC0010002800C4000007FFC010001001FF000100010001000100000 +CD96:000001000FC0010002800C4000007FFC0100010000003EF80208020802080000 +CD97:000001000FC0010002800C4000007FFC0100010000001E100210022802C40000 +CD98:000001000FC0010002800C40000000007FFC010001001100100010001FF00000 +CD99:000001000FC0010002800C4000007FFC01000100000020F8201020303ECC0000 +CD9A:000001000FC0010002800C4000007FFC01000100202021FC207020883E700000 +CD9B:000001000FC0010002800C4000007FFC010001001FF01000100010001FF00000 +CD9C:000001000FC0010002800C4000007FFC010001001FF000101FF010001FF00000 +CD9D:000001000FC0010002800C4000007FFC010001003EF802083E0820083E080000 +CD9E:000001000FC0010002800C4000007FFC010001003EF802883E8820883EF80000 +CD9F:000001000FC0010002800C4000007FFC010001003E8802883EF820883EF80000 +CDA0:000001000FC0010002800C4000007FFC010001003E1002103E1020283EC40000 +CDA1:000001000FC0010002800C4000007FFC010001003EF802803EF820803EF80000 +CDA2:000001000FC0010002800C4000007FFC010001003EFC02483E4820483EFC0000 +CDA3:000001000FC0010002800C4000007FFC010001003E2003FC3E7020883E700000 +CDA4:000001000FC0010002800C4000007FFC010001001FF01010101010101FF00000 +CDA5:000001000FC0010002800C4000007FFC01000100101010101FF010101FF00000 +CDA6:000001000FC0010002800C4000007FFC01000100222022203E2022503E880000 +CDA7:000001000FC0010002800C4000007FFC0100010000000100010002800C400000 +CDA8:000001000FC0010002800C4000007FFC010001000000024002400DA033100000 +CDA9:000001000FC0010002800C4000007FFC01000100000007C00820082007C00000 +CDAA:000001000FC0010002800C4000007FFC01000100000007E00080014006200000 +CDAB:000001000FC0010002800C4000007FFC01000100008007E00080014006200000 +CDAC:000001000FC0010002800C4000007FFC010001001FF000101FF0001000100000 +CDAD:000001000FC0010002800C4000007FFC010001001FF010001FF010001FF00000 +CDAE:000001000FC0010002800C4000007FFC0100010000001FF0044004401FF00000 +CDAF:000001000FC0010002800C4000007FFC0100010001001FF007C0082007C00000 +CDB0:0000040804083F880108020806080908308800087FE8040804F8040804080000 +CDB1:04083F0804080A08310800087FE8027802080000000007F80008000800080000 +CDB2:04083F0804080A08310800087FE802780208000000003EF80208020802080000 +CDB3:04083F0804080A08310800087FE802780208000000001F080108011401620000 +CDB4:04083F0804080A083108000800087FE80278020802081000100010001FF80000 +CDB5:04083F0804080A08310800087FE8027802080000000020F8201020303ECC0000 +CDB6:04083F0804080A08310800087FE8027802080000202021FC207020883E700000 +CDB7:04083F0804080A08310800087FE802780208000003F802000200020003F80000 +CDB8:04083F0804080A08310800087FE802780208000007F8000807F8040007F80000 +CDB9:04083F0804080A08310800087FE80278020800003EF802083E0820083E080000 +CDBA:04083F0804080A08310800087FE80278020800003EF802883E8820883EF80000 +CDBB:04083F0804080A08310800087FE80278020800003E8802883EF820883EF80000 +CDBC:04083F0804080A08310800087FE80278020800000F8800880F8808140FA20000 +CDBD:04083F0804080A08310800087FE80278020800003EF802803EF820803EF80000 +CDBE:04083F0804080A08310800087FE80278020800003EFC02483E4820483EFC0000 +CDBF:04083F0804080A08310800087FE80278020800003E1002FE3E3820443E380000 +CDC0:04083F0804080A08310800087FE802780208000003F802080208020803F80000 +CDC1:04083F0804080A08310800087FE80278020800000208020803F8020803F80000 +CDC2:04083F0804080A08310800087FE8027802080000210821083F0821143F620000 +CDC3:04083F0804080A08310800087FE8027802080000001000100010006801840000 +CDC4:04083F0804080A08310800087FE80278020800000048004800A8011406620000 +CDC5:04083F0804080A08310800087FE8027802080000000003F00408040803F00000 +CDC6:04083F0804080A08310800087FE802780208000003F80020002000D003080000 +CDC7:04083F0804080A08310800087FE8027802080000004003F8004000A003180000 +CDC8:04083F0804080A08310800087FE802780208000003F8000803F8000800080000 +CDC9:04083F0804080A08310800087FE802780208000003F8020003F8020003F80000 +CDCA:04083F0804080A08310800087FE802780208000000000FF8022002200FF80000 +CDCB:04083F0804080A08310800087FE802780208000000800FF803E0041003E00000 +CDCC:0000040A040A3F8A010A020A060A090A308A000A7FEA040A047A040A040A0000 +CDCD:04283F2804280A28312800287FA805E804280000000007F80008000800080000 +CDCE:04283F2804280A28312800287FA805E80428000000003EF80208020802080000 +CDCF:04283F2804280A28312800287FA805E80428000000001F080108011401620000 +CDD0:04283F2804280A283128002800287FA8042805E804281428100010001FF80000 +CDD1:04283F2804280A28312800287FA805E804280000000020F8201020303ECC0000 +CDD2:04283F2804280A28312800287FA805E804280000202021FC207020883E700000 +CDD3:04283F2804280A28312800287FA805E80428000003F802000200020003F80000 +CDD4:04283F2804280A28312800287FA805E80428000007F8000807F8040007F80000 +CDD5:04283F2804280A28312800287FA805E8042800003EF802083E0820083E080000 +CDD6:04283F2804280A28312800287FA805E8042800003EF802883E8820883EF80000 +CDD7:04283F2804280A28312800287FA805E8042800003E8802883EF820883EF80000 +CDD8:04283F2804280A28312800287FA805E8042800000F8800880F8808140FA20000 +CDD9:04283F2804280A28312800287FA805E8042800003EF802803EF820803EF80000 +CDDA:04283F2804280A28312800287FA805E8042800003EFC02483E4820483EFC0000 +CDDB:04283F2804280A28312800287FA805E8042800003E1002FE3E3820443E380000 +CDDC:04283F2804280A28312800287FA805E80428000003F802080208020803F80000 +CDDD:04283F2804280A28312800287FA805E8042800000208020803F8020803F80000 +CDDE:04283F2804280A28312800287FA805E804280000210821083F0821143F620000 +CDDF:04283F2804280A28312800287FA805E804280000001000100010006801840000 +CDE0:04283F2804280A28312800287FA805E8042800000048004800A8011406620000 +CDE1:04283F2804280A28312800287FA805E804280000000003F00408040803F00000 +CDE2:04283F2804280A28312800287FA805E80428000003F80020002000D003080000 +CDE3:04283F2804280A28312800287FA805E804280000004003F8004000A003180000 +CDE4:04283F2804280A28312800287FA805E80428000003F8000803F8000800080000 +CDE5:04283F2804280A28312800287FA805E80428000003F8020003F8020003F80000 +CDE6:04283F2804280A28312800287FA805E80428000000000FF8022002200FF80000 +CDE7:04283F2804280A28312800287FA805E80428000000800FF803E0041003E00000 +CDE8:0000040804083F880108020806080908308800087FE804080408040804080000 +CDE9:04083F0804080A08310800087FE8020802000000000007F80008000800080000 +CDEA:04083F0804080A08310800087FE802080200000000003EF80208020802080000 +CDEB:04083F0804080A08310800087FE802080200000000001F080108011401620000 +CDEC:04083F0804080A083108000800087FE80208020802081008100010001FF80000 +CDED:04083F0804080A08310800087FE8020802000000000020F8201020303ECC0000 +CDEE:04083F0804080A08310800087FE8020802000000202021FC207020883E700000 +CDEF:04083F0804080A08310800087FE802080200000003F802000200020003F80000 +CDF0:04083F0804080A08310800087FE802080200000007F8000807F8040007F80000 +CDF1:04083F0804080A08310800087FE80208020000003EF802083E0820083E080000 +CDF2:04083F0804080A08310800087FE80208020000003EF802883E8820883EF80000 +CDF3:04083F0804080A08310800087FE80208020000003E8802883EF820883EF80000 +CDF4:04083F0804080A08310800087FE80208020000000F8800880F8808140FA20000 +CDF5:04083F0804080A08310800087FE80208020000003EF802803EF820803EF80000 +CDF6:04083F0804080A08310800087FE80208020000003EFC02483E4820483EFC0000 +CDF7:04083F0804080A08310800087FE80208020000003E1002FE3E3820443E380000 +CDF8:04083F0804080A08310800087FE802080200000003F802080208020803F80000 +CDF9:04083F0804080A08310800087FE80208020000000208020803F8020803F80000 +CDFA:04083F0804080A08310800087FE8020802000000210821083F0821143F620000 +CDFB:04083F0804080A08310800087FE8020802000000001000100010006801840000 +CDFC:04083F0804080A08310800087FE80208020000000048004800A8011406620000 +CDFD:04083F0804080A08310800087FE8020802000000000003F00408040803F00000 +CDFE:04083F0804080A08310800087FE802080200000003F80020002000D003080000 +CDFF:04083F0804080A08310800087FE8020802000000004003F8004000A003180000 +CE00:04083F0804080A08310800087FE802080200000003F8000803F8000800080000 +CE01:04083F0804080A08310800087FE802080200000003F8020003F8020003F80000 +CE02:04083F0804080A08310800087FE802080200000000000FF8022002200FF80000 +CE03:04083F0804080A08310800087FE802080200000000800FF803E0041003E00000 +CE04:00000080008007F00020004000C00120061000007FFC04400440044004400000 +CE05:000001000FC0010002800C4000007FFC044004401FF000100010001000100000 +CE06:000001000FC0010002800C4000007FFC0440044000003EF80208020802080000 +CE07:000001000FC0010002800C4000007FFC0440044000001E100210022802C40000 +CE08:000001000FC0010002800C40000000007FFC044004401440100010001FF00000 +CE09:000001000FC0010002800C4000007FFC04400440000020F8201020303ECC0000 +CE0A:000001000FC0010002800C4000007FFC04400440202021FC207020883E700000 +CE0B:000001000FC0010002800C4000007FFC044004401FF01000100010001FF00000 +CE0C:000001000FC0010002800C4000007FFC044004401FF000101FF010001FF00000 +CE0D:000001000FC0010002800C4000007FFC044004403EF802083E0820083E080000 +CE0E:000001000FC0010002800C4000007FFC044004403EF802883E8820883EF80000 +CE0F:000001000FC0010002800C4000007FFC044004403E8802883EF820883EF80000 +CE10:000001000FC0010002800C4000007FFC044004403E1002103E1020283EC40000 +CE11:000001000FC0010002800C4000007FFC044004403EF802803EF820803EF80000 +CE12:000001000FC0010002800C4000007FFC044004403EFC02483E4820483EFC0000 +CE13:000001000FC0010002800C4000007FFC044004403E2003FC3E7020883E700000 +CE14:000001000FC0010002800C4000007FFC044004401FF01010101010101FF00000 +CE15:000001000FC0010002800C4000007FFC04400440101010101FF010101FF00000 +CE16:000001000FC0010002800C4000007FFC04400440222022203E2022503E880000 +CE17:000001000FC0010002800C4000007FFC0440044000000100010002800C400000 +CE18:000001000FC0010002800C4000007FFC044004400000024002400DA033100000 +CE19:000001000FC0010002800C4000007FFC04400440000007C00820082007C00000 +CE1A:000001000FC0010002800C4000007FFC04400440000007E00080014006200000 +CE1B:000001000FC0010002800C4000007FFC04400440008007E00080014006200000 +CE1C:000001000FC0010002800C4000007FFC044004401FF000101FF0001000100000 +CE1D:000001000FC0010002800C4000007FFC044004401FF010001FF010001FF00000 +CE1E:000001000FC0010002800C4000007FFC0440044000001FF0044004401FF00000 +CE1F:000001000FC0010002800C4000007FFC0440044001001FF007C0082007C00000 +CE20:0000010001000FE000400080018002400C20000000007FFC0000000000000000 +CE21:000001000FC0010002800C40000000007FFC00001FF000100010001000100000 +CE22:000001000FC0010002800C40000000007FFC000000003EF80208020802080000 +CE23:000001000FC0010002800C40000000007FFC000000001E100210022802C40000 +CE24:000001000FC0010002800C40000000007FFC000000001000100010001FF00000 +CE25:000001000FC0010002800C40000000007FFC0000000020F8201020303ECC0000 +CE26:000001000FC0010002800C40000000007FFC0000202021FC207020883E700000 +CE27:000001000FC0010002800C40000000007FFC00001FF01000100010001FF00000 +CE28:000001000FC0010002800C40000000007FFC00001FF000101FF010001FF00000 +CE29:000001000FC0010002800C40000000007FFC00003EF802083E0820083E080000 +CE2A:000001000FC0010002800C40000000007FFC00003EF802883E8820883EF80000 +CE2B:000001000FC0010002800C40000000007FFC00003E8802883EF820883EF80000 +CE2C:000001000FC0010002800C40000000007FFC00003E1002103E1020283EC40000 +CE2D:000001000FC0010002800C40000000007FFC00003EF802803EF820803EF80000 +CE2E:000001000FC0010002800C40000000007FFC00003EFC02483E4820483EFC0000 +CE2F:000001000FC0010002800C40000000007FFC00003E2003FC3E7020883E700000 +CE30:000001000FC0010002800C40000000007FFC00001FF01010101010101FF00000 +CE31:000001000FC0010002800C40000000007FFC0000101010101FF010101FF00000 +CE32:000001000FC0010002800C40000000007FFC0000222022203E2022503E880000 +CE33:000001000FC0010002800C40000000007FFC000000000100010002800C400000 +CE34:000001000FC0010002800C40000000007FFC00000000024002400DA033100000 +CE35:000001000FC0010002800C40000000007FFC0000000007C00820082007C00000 +CE36:000001000FC0010002800C40000000007FFC0000000007E00080014006200000 +CE37:000001000FC0010002800C40000000007FFC0000008007E00080014006200000 +CE38:000001000FC0010002800C40000000007FFC00001FF000101FF0001000100000 +CE39:000001000FC0010002800C40000000007FFC00001FF010001FF010001FF00000 +CE3A:000001000FC0010002800C40000000007FFC000000001FF0044004401FF00000 +CE3B:000001000FC0010002800C40000000007FFC000001001FF007C0082007C00000 +CE3C:00000008040804083F880108020806080908308800087FE80008000800080000 +CE3D:000002081F88020805081888000800087FE8000007F800080008000800080000 +CE3E:000002081F88020805081888000800087FE8000000003EF80208020802080000 +CE3F:000002081F88020805081888000800087FE8000000001F080108011401620000 +CE40:000002081F88020805081888000800087FE8000008000800080008000FF80000 +CE41:000002081F88020805081888000800087FE80000000010F8101010301ECC0000 +CE42:000002081F88020805081888000800087FE800000808087F081C08220F9C0000 +CE43:000002081F88020805081888000800087FE8000003F802000200020003F80000 +CE44:000002081F88020805081888000800087FE8000007F8000807F8040007F80000 +CE45:000002081F88020805081888000800087FE800003EF802083E0820083E080000 +CE46:000002081F88020805081888000800087FE800003EF802883E8820883EF80000 +CE47:000002081F88020805081888000800087FE800003E8802883EF820883EF80000 +CE48:000002081F88020805081888000800087FE800001F0801081F0810141F620000 +CE49:000002081F88020805081888000800087FE800003EF802803EF820803EF80000 +CE4A:000002081F88020805081888000800087FE800003EFC02483E4820483EFC0000 +CE4B:000002081F88020805081888000800087FE800001F08017F1F1C10221F1C0000 +CE4C:000002081F88020805081888000800087FE8000003F802080208020803F80000 +CE4D:000002081F88020805081888000800087FE800000208020803F8020803F80000 +CE4E:000002081F88020805081888000800087FE80000110811081F0811141F620000 +CE4F:000002081F88020805081888000800087FE80000001000100010006801840000 +CE50:000002081F88020805081888000800087FE800000048004800A8011406620000 +CE51:000002081F88020805081888000800087FE80000000003F00408040803F00000 +CE52:000002081F88020805081888000800087FE8000003F80020002000D003080000 +CE53:000002081F88020805081888000800087FE80000004003F8004000A003180000 +CE54:000002081F88020805081888000800087FE8000003F8000803F8000800080000 +CE55:000002081F88020805081888000800087FE8000003F8020003F8020003F80000 +CE56:000002081F88020805081888000800087FE8000000000FF8022002200FF80000 +CE57:000002081F88020805081888000800087FE8000000800FF803E0041003E00000 +CE58:000000000008040804083F880108020806080908308800080008000800080000 +CE59:00000008000808087E0808081408620800080000000007F80008000800080000 +CE5A:00000008000808087E080808140862080008000000003EF80208020802080000 +CE5B:00000008000808087E080808140862080008000000001F080108011401620000 +CE5C:00000008000808087E080808140862080008000800001000100010001FF80000 +CE5D:00000008000808087E0808081408620800080000000020F8201020303ECC0000 +CE5E:00000008000808087E0808081408620800080000202021FC207020883E700000 +CE5F:00000008000808087E080808140862080008000003F802000200020003F80000 +CE60:00000008000808087E080808140862080008000007F8000807F8040007F80000 +CE61:00000008000808087E08080814086208000800003EF802083E0820083E080000 +CE62:00000008000808087E08080814086208000800003EF802883E8820883EF80000 +CE63:00000008000808087E08080814086208000800003E8802883EF820883EF80000 +CE64:00000008000808087E08080814086208000800000F8800880F8808140FA20000 +CE65:00000008000808087E08080814086208000800003EF802803EF820803EF80000 +CE66:00000008000808087E08080814086208000800003EFC02483E4820483EFC0000 +CE67:00000008000808087E08080814086208000800003E1002FE3E3820443E380000 +CE68:00000008000808087E080808140862080008000003F802080208020803F80000 +CE69:00000008000808087E08080814086208000800000208020803F8020803F80000 +CE6A:00000008000808087E0808081408620800080000210821083F0821143F620000 +CE6B:00000008000808087E0808081408620800080000001000100010006801840000 +CE6C:00000008000808087E08080814086208000800000048004800A8011406620000 +CE6D:00000008000808087E0808081408620800080000000003F00408040803F00000 +CE6E:00000008000808087E080808140862080008000003F80020002000D003080000 +CE6F:00000008000808087E0808081408620800080000004003F8004000A003180000 +CE70:00000008000808087E080808140862080008000003F8000803F8000800080000 +CE71:00000008000808087E080808140862080008000003F8020003F8020003F80000 +CE72:00000008000808087E080808140862080008000000000FF8022002200FF80000 +CE73:00000008000808087E080808140862080008000000800FF803E0041003E00000 +CE74:00000000001000101F9000900090009E1F100110021004101810001000100000 +CE75:000000087E08020802087E0E040818086008000007F800080008000800080000 +CE76:000000087E08020802087E0E040818086008000000003EF80208020802080000 +CE77:000000087E08020802087E0E040818086008000000001F080108011401620000 +CE78:000000087E08020802087E0E040818086008000808000800080008000FF80000 +CE79:000000087E08020802087E0E0408180860080000000010F8101010301ECC0000 +CE7A:000000087E08020802087E0E04081808600800000808087F081C08220F9C0000 +CE7B:000000087E08020802087E0E040818086008000003F802000200020003F80000 +CE7C:000000087E08020802087E0E040818086008000007F8000807F8040007F80000 +CE7D:000000087E08020802087E0E04081808600800003EF802083E0820083E080000 +CE7E:000000087E08020802087E0E04081808600800003EF802883E8820883EF80000 +CE7F:000000087E08020802087E0E04081808600800003E8802883EF820883EF80000 +CE80:000000087E08020802087E0E04081808600800001F0801081F0810141F620000 +CE81:000000087E08020802087E0E04081808600800003EF802803EF820803EF80000 +CE82:000000087E08020802087E0E04081808600800003EFC02483E4820483EFC0000 +CE83:000000087E08020802087E0E04081808600800001F08017F1F1C10221F1C0000 +CE84:000000087E08020802087E0E040818086008000003F802080208020803F80000 +CE85:000000087E08020802087E0E04081808600800000208020803F8020803F80000 +CE86:000000087E08020802087E0E0408180860080000110811081F0811141F620000 +CE87:000000087E08020802087E0E0408180860080000001000100010006801840000 +CE88:000000087E08020802087E0E04081808600800000048004800A8011406620000 +CE89:000000087E08020802087E0E0408180860080000000003F00408040803F00000 +CE8A:000000087E08020802087E0E040818086008000003F80020002000D003080000 +CE8B:000000087E08020802087E0E0408180860080000004003F8004000A003180000 +CE8C:000000087E08020802087E0E040818086008000003F8000803F8000800080000 +CE8D:000000087E08020802087E0E040818086008000003F8020003F8020003F80000 +CE8E:000000087E08020802087E0E040818086008000000000FF8022002200FF80000 +CE8F:000000087E08020802087E0E040818086008000000800FF803E0041003E00000 +CE90:00000000001200121F9200920092009E1F120112021204121812001200120000 +CE91:000000287E28022802287E38042818286028000007F800080008000800080000 +CE92:000000287E28022802287E38042818286028000000003EF80208020802080000 +CE93:000000287E28022802287E38042818286028000000003E100210022802C40000 +CE94:000000287E28022802287E38042818286028002808000800080008000FF80000 +CE95:000000287E28022802287E380428182860280000000020F8201020303ECC0000 +CE96:000000287E28022802287E380428182860280000202021FC207020883E700000 +CE97:000000287E28022802287E38042818286028000003F802000200020003F80000 +CE98:000000287E28022802287E38042818286028000007F8000807F8040007F80000 +CE99:000000287E28022802287E3804281828602800003EF802083E0820083E080000 +CE9A:000000287E28022802287E3804281828602800003EF802883E8820883EF80000 +CE9B:000000287E28022802287E3804281828602800003E8802883EF820883EF80000 +CE9C:000000287E28022802287E3804281828602800001F0801081F0810141F620000 +CE9D:000000287E28022802287E3804281828602800003EF802803EF820803EF80000 +CE9E:000000287E28022802287E3804281828602800003EFC02483E4820483EFC0000 +CE9F:000000287E28022802287E3804281828602800003E1002FE3E3820443E380000 +CEA0:000000287E28022802287E38042818286028000003F802080208020803F80000 +CEA1:000000287E28022802287E3804281828602800000208020803F8020803F80000 +CEA2:000000287E28022802287E380428182860280000110811081F0811141F620000 +CEA3:000000287E28022802287E380428182860280000000800080008003400C20000 +CEA4:000000287E28022802287E3804281828602800000048004800A8011406620000 +CEA5:000000287E28022802287E380428182860280000000001F00208020801F00000 +CEA6:000000287E28022802287E38042818286028000003F80020002000D003080000 +CEA7:000000287E28022802287E380428182860280000004003F8004000A003180000 +CEA8:000000287E28022802287E38042818286028000003F8000803F8000800080000 +CEA9:000000287E28022802287E38042818286028000003F8020003F8020003F80000 +CEAA:000000287E28022802287E38042818286028000000000FF8022002200FF80000 +CEAB:000000287E28022802287E38042818286028000000800FF803E0041003E00000 +CEAC:00000000001000101F900090009E00901F10011E021004101810001000100000 +CEAD:000000087E080208020E7E08040E18086008000007F800080008000800080000 +CEAE:000000087E080208020E7E08040E18086008000000003EF80208020802080000 +CEAF:000000087E080208020E7E08040E18086008000000001F080108011401620000 +CEB0:000000087E080208020E7E08040E18086008000008000800080008000FF80000 +CEB1:000000087E080208020E7E08040E180860080000000010F8101010301ECC0000 +CEB2:000000087E080208020E7E08040E1808600800000808087F081C08220F9C0000 +CEB3:000000087E080208020E7E08040E18086008000003F802000200020003F80000 +CEB4:000000087E080208020E7E08040E18086008000007F8000807F8040007F80000 +CEB5:000000087E080208020E7E08040E1808600800003EF802083E0820083E080000 +CEB6:000000087E080208020E7E08040E1808600800003EF802883E8820883EF80000 +CEB7:000000087E080208020E7E08040E1808600800003E8802883EF820883EF80000 +CEB8:000000087E080208020E7E08040E1808600800001F0801081F0810141F620000 +CEB9:000000087E080208020E7E08040E1808600800003EF802803EF820803EF80000 +CEBA:000000087E080208020E7E08040E1808600800003EFC02483E4820483EFC0000 +CEBB:000000087E080208020E7E08040E1808600800001F08017F1F1C10221F1C0000 +CEBC:000000087E080208020E7E08040E18086008000003F802080208020803F80000 +CEBD:000000087E080208020E7E08040E1808600800000208020803F8020803F80000 +CEBE:000000087E080208020E7E08040E180860080000110811081F0811141F620000 +CEBF:000000087E080208020E7E08040E180860080000001000100010006801840000 +CEC0:000000087E080208020E7E08040E1808600800000048004800A8011406620000 +CEC1:000000087E080208020E7E08040E180860080000000003F00408040803F00000 +CEC2:000000087E080208020E7E08040E18086008000003F80020002000D003080000 +CEC3:000000087E080208020E7E08040E180860080000004003F8004000A003180000 +CEC4:000000087E080208020E7E08040E18086008000003F8000803F8000800080000 +CEC5:000000087E080208020E7E08040E18086008000003F8020003F8020003F80000 +CEC6:000000087E080208020E7E08040E18086008000000000FF8022002200FF80000 +CEC7:000000087E080208020E7E08040E18086008000000800FF803E0041003E00000 +CEC8:00000000001200121F920092009E00921F12011E021204121812001200120000 +CEC9:000000287E28022802387E28043818286028000007F800080008000800080000 +CECA:000000287E28022802387E28043818286028000000003EF80208020802080000 +CECB:000000287E28022802387E28043818286028000000003E100210022802C40000 +CECC:000000287E28022802387E28043818286028002808000800080008000FF80000 +CECD:000000287E28022802387E280438182860280000000020F8201020303ECC0000 +CECE:000000287E28022802387E280438182860280000202021FC207020883E700000 +CECF:000000287E28022802387E28043818286028000003F802000200020003F80000 +CED0:000000287E28022802387E28043818286028000007F8000807F8040007F80000 +CED1:000000287E28022802387E2804381828602800003EF802083E0820083E080000 +CED2:000000287E28022802387E2804381828602800003EF802883E8820883EF80000 +CED3:000000287E28022802387E2804381828602800003E8802883EF820883EF80000 +CED4:000000287E28022802387E2804381828602800001F0801081F0810141F620000 +CED5:000000287E28022802387E2804381828602800003EF802803EF820803EF80000 +CED6:000000287E28022802387E2804381828602800003EFC02483E4820483EFC0000 +CED7:000000287E28022802387E2804381828602800003E1002FE3E3820443E380000 +CED8:000000287E28022802387E28043818286028000003F802080208020803F80000 +CED9:000000287E28022802387E2804381828602800000208020803F8020803F80000 +CEDA:000000287E28022802387E280438182860280000110811081F0811141F620000 +CEDB:000000287E28022802387E280438182860280000000800080008003400C20000 +CEDC:000000287E28022802387E2804381828602800000048004800A8011406620000 +CEDD:000000287E28022802387E280438182860280000000001F00208020801F00000 +CEDE:000000287E28022802387E28043818286028000003F80020002000D003080000 +CEDF:000000287E28022802387E280438182860280000004003F8004000A003180000 +CEE0:000000287E28022802387E28043818286028000003F8000803F8000800080000 +CEE1:000000287E28022802387E28043818286028000003F8020003F8020003F80000 +CEE2:000000287E28022802387E28043818286028000000000FF8022002200FF80000 +CEE3:000000287E28022802387E28043818286028000000800FF803E0041003E00000 +CEE4:00000000000200021F8200820082009E1F020102020204021802000200020000 +CEE5:000000087E08020802087E380408180860080000000007F80008000800080000 +CEE6:000000087E08020802087E38040818086008000000003EF80208020802080000 +CEE7:000000087E08020802087E38040818086008000000001F080108011401620000 +CEE8:000000087E08020802087E38040818086008000000001000100010001FF80000 +CEE9:000000087E08020802087E380408180860080000000020F8201020303ECC0000 +CEEA:000000087E08020802087E380408180860080000202021FC207020883E700000 +CEEB:000000087E08020802087E38040818086008000003F802000200020003F80000 +CEEC:000000087E08020802087E38040818086008000007F8000807F8040007F80000 +CEED:000000087E08020802087E3804081808600800003EF802083E0820083E080000 +CEEE:000000087E08020802087E3804081808600800003EF802883E8820883EF80000 +CEEF:000000087E08020802087E3804081808600800003E8802883EF820883EF80000 +CEF0:000000087E08020802087E3804081808600800000F8800880F8808140FA20000 +CEF1:000000087E08020802087E3804081808600800003EF802803EF820803EF80000 +CEF2:000000087E08020802087E3804081808600800003EFC02483E4820483EFC0000 +CEF3:000000087E08020802087E3804081808600800003E1002FE3E3820443E380000 +CEF4:000000087E08020802087E38040818086008000003F802080208020803F80000 +CEF5:000000087E08020802087E3804081808600800000208020803F8020803F80000 +CEF6:000000087E08020802087E380408180860080000210821083F0821143F620000 +CEF7:000000087E08020802087E380408180860080000001000100010006801840000 +CEF8:000000087E08020802087E3804081808600800000048004800A8011406620000 +CEF9:000000087E08020802087E380408180860080000000003F00408040803F00000 +CEFA:000000087E08020802087E38040818086008000003F80020002000D003080000 +CEFB:000000087E08020802087E380408180860080000004003F8004000A003180000 +CEFC:000000087E08020802087E38040818086008000003F8000803F8000800080000 +CEFD:000000087E08020802087E38040818086008000003F8020003F8020003F80000 +CEFE:000000087E08020802087E38040818086008000000000FF8022002200FF80000 +CEFF:000000087E08020802087E38040818086008000000800FF803E0041003E00000 +CF00:00000000000A000A1F8A008A008A00BA1F0A010A020A040A180A000A000A0000 +CF01:000000287E28022802287EE8042818286028000007F800080008000800080000 +CF02:000000287E28022802287EE8042818286028000000003EF80208020802080000 +CF03:000000287E28022802287EE8042818286028000000003E100210022802C40000 +CF04:000000287E28022802287EE8042818286028000008000800080008000FF80000 +CF05:000000287E28022802287EE80428182860280000000020F8201020303ECC0000 +CF06:000000287E28022802287EE80428182860280000202021FC207020883E700000 +CF07:000000287E28022802287EE8042818286028000003F802000200020003F80000 +CF08:000000287E28022802287EE8042818286028000007F8000807F8040007F80000 +CF09:000000287E28022802287EE804281828602800003EF802083E0820083E080000 +CF0A:000000287E28022802287EE804281828602800003EF802883E8820883EF80000 +CF0B:000000287E28022802287EE804281828602800003E8802883EF820883EF80000 +CF0C:000000287E28022802287EE804281828602800001F0801081F0810141F620000 +CF0D:000000287E28022802287EE804281828602800003EF802803EF820803EF80000 +CF0E:000000287E28022802287EE804281828602800003EFC02483E4820483EFC0000 +CF0F:000000287E28022802287EE804281828602800003E1002FE3E3820443E380000 +CF10:000000287E28022802287EE8042818286028000003F802080208020803F80000 +CF11:000000287E28022802287EE804281828602800000208020803F8020803F80000 +CF12:000000287E28022802287EE80428182860280000110811081F0811141F620000 +CF13:000000287E28022802287EE80428182860280000000800080008003400C20000 +CF14:000000287E28022802287EE804281828602800000048004800A8011406620000 +CF15:000000287E28022802287EE80428182860280000000001F00208020801F00000 +CF16:000000287E28022802287EE8042818286028000003F80020002000D003080000 +CF17:000000287E28022802287EE80428182860280000004003F8004000A003180000 +CF18:000000287E28022802287EE8042818286028000003F8000803F8000800080000 +CF19:000000287E28022802287EE8042818286028000003F8020003F8020003F80000 +CF1A:000000287E28022802287EE8042818286028000000000FF8022002200FF80000 +CF1B:000000287E28022802287EE8042818286028000000800FF803E0041003E00000 +CF1C:00000000000200021F820082009E00821F02011E020204021802000200020000 +CF1D:000000087E08020802387E080438180860080000000007F80008000800080000 +CF1E:000000087E08020802387E08043818086008000000003EF80208020802080000 +CF1F:000000087E08020802387E08043818086008000000001F080108011401620000 +CF20:000000087E08020802387E08043818086008000800001000100010001FF80000 +CF21:000000087E08020802387E080438180860080000000020F8201020303ECC0000 +CF22:000000087E08020802387E080438180860080000202021FC207020883E700000 +CF23:000000087E08020802387E08043818086008000003F802000200020003F80000 +CF24:000000087E08020802387E08043818086008000007F8000807F8040007F80000 +CF25:000000087E08020802387E0804381808600800003EF802083E0820083E080000 +CF26:000000087E08020802387E0804381808600800003EF802883E8820883EF80000 +CF27:000000087E08020802387E0804381808600800003E8802883EF820883EF80000 +CF28:000000087E08020802387E0804381808600800000F8800880F8808140FA20000 +CF29:000000087E08020802387E0804381808600800003EF802803EF820803EF80000 +CF2A:000000087E08020802387E0804381808600800003EFC02483E4820483EFC0000 +CF2B:000000087E08020802387E0804381808600800003E1002FE3E3820443E380000 +CF2C:000000087E08020802387E08043818086008000003F802080208020803F80000 +CF2D:000000087E08020802387E0804381808600800000208020803F8020803F80000 +CF2E:000000087E08020802387E080438180860080000210821083F0821143F620000 +CF2F:000000087E08020802387E080438180860080000001000100010006801840000 +CF30:000000087E08020802387E0804381808600800000048004800A8011406620000 +CF31:000000087E08020802387E080438180860080000000003F00408040803F00000 +CF32:000000087E08020802387E08043818086008000003F80020002000D003080000 +CF33:000000087E08020802387E080438180860080000004003F8004000A003180000 +CF34:000000087E08020802387E08043818086008000003F8000803F8000800080000 +CF35:000000087E08020802387E08043818086008000003F8020003F8020003F80000 +CF36:000000087E08020802387E08043818086008000000000FF8022002200FF80000 +CF37:000000087E08020802387E08043818086008000000800FF803E0041003E00000 +CF38:00000000000A000A1F8A008A00BA008A1F0A013A020A040A180A000A000A0000 +CF39:000000287E28022802E87E2804E818286028000007F800080008000800080000 +CF3A:000000287E28022802E87E2804E818286028000000003EF80208020802080000 +CF3B:000000287E28022802E87E2804E818286028000000003E100210022802C40000 +CF3C:000000287E28022802E87E2804E818286028002808000800080008000FF80000 +CF3D:000000287E28022802E87E2804E8182860280000000020F8201020303ECC0000 +CF3E:000000287E28022802E87E2804E8182860280000202021FC207020883E700000 +CF3F:000000287E28022802E87E2804E818286028000003F802000200020003F80000 +CF40:000000287E28022802E87E2804E818286028000007F8000807F8040007F80000 +CF41:000000287E28022802E87E2804E81828602800003EF802083E0820083E080000 +CF42:000000287E28022802E87E2804E81828602800003EF802883E8820883EF80000 +CF43:000000287E28022802E87E2804E81828602800003E8802883EF820883EF80000 +CF44:000000287E28022802E87E2804E81828602800001F0801081F0810141F620000 +CF45:000000287E28022802E87E2804E81828602800003EF802803EF820803EF80000 +CF46:000000287E28022802E87E2804E81828602800003EFC02483E4820483EFC0000 +CF47:000000287E28022802E87E2804E81828602800003E1002FE3E3820443E380000 +CF48:000000287E28022802E87E2804E818286028000003F802080208020803F80000 +CF49:000000287E28022802E87E2804E81828602800000208020803F8020803F80000 +CF4A:000000287E28022802E87E2804E8182860280000110811081F0811141F620000 +CF4B:000000287E28022802E87E2804E8182860280000000800080008003400C20000 +CF4C:000000287E28022802E87E2804E81828602800000048004800A8011406620000 +CF4D:000000287E28022802E87E2804E8182860280000000001F00208020801F00000 +CF4E:000000287E28022802E87E2804E818286028000003F80020002000D003080000 +CF4F:000000287E28022802E87E2804E8182860280000004003F8004000A003180000 +CF50:000000287E28022802E87E2804E818286028000003F8000803F8000800080000 +CF51:000000287E28022802E87E2804E818286028000003F8020003F8020003F80000 +CF52:000000287E28022802E87E2804E818286028000000000FF8022002200FF80000 +CF53:000000287E28022802E87E2804E818286028000000800FF803E0041003E00000 +CF54:00000000000000003FF8000800083FF8000802080208020002007FFC00000000 +CF55:000000001FF000101FF00010011001007FFC00001FF000100010001000100000 +CF56:000000001FF000101FF00010011001007FFC000000003EF80208020802080000 +CF57:000000001FF000101FF00010011001007FFC000000001E100210022802C40000 +CF58:000000001FF000101FF00010011001007FFC000000001000100010001FF00000 +CF59:000000001FF000101FF00010011001007FFC0000000020F8201020303ECC0000 +CF5A:000000001FF000101FF00010011001007FFC0000202021FC207020883E700000 +CF5B:000000001FF000101FF00010011001007FFC00001FF01000100010001FF00000 +CF5C:000000001FF000101FF00010011001007FFC00001FF000101FF010001FF00000 +CF5D:000000001FF000101FF00010011001007FFC00003EF802083E0820083E080000 +CF5E:000000001FF000101FF00010011001007FFC00003EF802883E8820883EF80000 +CF5F:000000001FF000101FF00010011001007FFC00003E8802883EF820883EF80000 +CF60:000000001FF000101FF00010011001007FFC00003E1002103E1020283EC40000 +CF61:000000001FF000101FF00010011001007FFC00003EF802803EF820803EF80000 +CF62:000000001FF000101FF00010011001007FFC00003EFC02483E4820483EFC0000 +CF63:000000001FF000101FF00010011001007FFC00003E2003FC3E7020883E700000 +CF64:000000001FF000101FF00010011001007FFC00001FF01010101010101FF00000 +CF65:000000001FF000101FF00010011001007FFC0000101010101FF010101FF00000 +CF66:000000001FF000101FF00010011001007FFC0000222022203E2022503E880000 +CF67:000000001FF000101FF00010011001007FFC000000000100010002800C400000 +CF68:000000001FF000101FF00010011001007FFC00000000024002400DA033100000 +CF69:000000001FF000101FF00010011001007FFC0000000007C00820082007C00000 +CF6A:000000001FF000101FF00010011001007FFC0000000007E00080014006200000 +CF6B:000000001FF000101FF00010011001007FFC0000008007E00080014006200000 +CF6C:000000001FF000101FF00010011001007FFC00001FF000101FF0001000100000 +CF6D:000000001FF000101FF00010011001007FFC00001FF010001FF010001FF00000 +CF6E:000000001FF000101FF00010011001007FFC000000001FF0044004401FF00000 +CF6F:000000001FF000101FF00010011001007FFC000001001FF007C0082007C00000 +CF70:00000000001000103FD0005000503FDE0450045004107FD00010001000100000 +CF71:000000083F8800883F8E0088048804087FE8000007F800080008000800080000 +CF72:000000083F8800883F8E0088048804087FE8000000003EF80208020802080000 +CF73:000000083F8800883F8E0088048804087FE8000000001F080108011401620000 +CF74:000000083F8800883F8E0088048804087FE8000008000800080008000FF80000 +CF75:000000083F8800883F8E0088048804087FE80000000010F8101010301ECC0000 +CF76:000000083F8800883F8E0088048804087FE800000808087F081C08220F9C0000 +CF77:000000083F8800883F8E0088048804087FE8000003F802000200020003F80000 +CF78:000000083F8800883F8E0088048804087FE8000007F8000807F8040007F80000 +CF79:000000083F8800883F8E0088048804087FE800003EF802083E0820083E080000 +CF7A:000000083F8800883F8E0088048804087FE800003EF802883E8820883EF80000 +CF7B:000000083F8800883F8E0088048804087FE800003E8802883EF820883EF80000 +CF7C:000000083F8800883F8E0088048804087FE800001F0801081F0810141F620000 +CF7D:000000083F8800883F8E0088048804087FE800003EF802803EF820803EF80000 +CF7E:000000083F8800883F8E0088048804087FE800003EFC02483E4820483EFC0000 +CF7F:000000083F8800883F8E0088048804087FE800001F08017F1F1C10221F1C0000 +CF80:000000083F8800883F8E0088048804087FE8000003F802080208020803F80000 +CF81:000000083F8800883F8E0088048804087FE800000208020803F8020803F80000 +CF82:000000083F8800883F8E0088048804087FE80000110811081F0811141F620000 +CF83:000000083F8800883F8E0088048804087FE80000001000100010006801840000 +CF84:000000083F8800883F8E0088048804087FE800000048004800A8011406620000 +CF85:000000083F8800883F8E0088048804087FE80000000003F00408040803F00000 +CF86:000000083F8800883F8E0088048804087FE8000003F80020002000D003080000 +CF87:000000083F8800883F8E0088048804087FE80000004003F8004000A003180000 +CF88:000000083F8800883F8E0088048804087FE8000003F8000803F8000800080000 +CF89:000000083F8800883F8E0088048804087FE8000003F8020003F8020003F80000 +CF8A:000000083F8800883F8E0088048804087FE8000000000FF8022002200FF80000 +CF8B:000000083F8800883F8E0088048804087FE8000000800FF803E0041003E00000 +CF8C:00000000001200123FD2005200523FDE0452045204127FD20012001200120000 +CF8D:000000283FA800A83FB800A804A804287FA8000007F800080008000800080000 +CF8E:000000283FA800A83FB800A804A804287FA8000000003EF80208020802080000 +CF8F:000000283FA800A83FB800A804A804287FA8000000001F080108011401620000 +CF90:000000283FA800A83FB800A804A804287FA8000008000800080008000FF80000 +CF91:000000283FA800A83FB800A804A804287FA80000000010F8101010301ECC0000 +CF92:000000283FA800A83FB800A804A804287FA800000808087F081C08220F9C0000 +CF93:000000283FA800A83FB800A804A804287FA8000003F802000200020003F80000 +CF94:000000283FA800A83FB800A804A804287FA8000007F8000807F8040007F80000 +CF95:000000283FA800A83FB800A804A804287FA800003EF802083E0820083E080000 +CF96:000000283FA800A83FB800A804A804287FA800003EF802883E8820883EF80000 +CF97:000000283FA800A83FB800A804A804287FA800003E8802883EF820883EF80000 +CF98:000000283FA800A83FB800A804A804287FA800001F0801081F0810141F620000 +CF99:000000283FA800A83FB800A804A804287FA800003EF802803EF820803EF80000 +CF9A:000000283FA800A83FB800A804A804287FA800003EFC02483E4820483EFC0000 +CF9B:000000283FA800A83FB800A804A804287FA800001F08017F1F1C10221F1C0000 +CF9C:000000283FA800A83FB800A804A804287FA8000003F802080208020803F80000 +CF9D:000000283FA800A83FB800A804A804287FA800000208020803F8020803F80000 +CF9E:000000283FA800A83FB800A804A804287FA80000110811081F0811141F620000 +CF9F:000000283FA800A83FB800A804A804287FA80000001000100010006801840000 +CFA0:000000283FA800A83FB800A804A804287FA800000048004800A8011406620000 +CFA1:000000283FA800A83FB800A804A804287FA80000000003F00408040803F00000 +CFA2:000000283FA800A83FB800A804A804287FA8000003F80020002000D003080000 +CFA3:000000283FA800A83FB800A804A804287FA80000004003F8004000A003180000 +CFA4:000000283FA800A83FB800A804A804287FA8000003F8000803F8000800080000 +CFA5:000000283FA800A83FB800A804A804287FA8000003F8020003F8020003F80000 +CFA6:000000283FA800A83FB800A804A804287FA8000000000FF8022002200FF80000 +CFA7:000000283FA800A83FB800A804A804287FA8000000800FF803E0041003E00000 +CFA8:00000000000400043FC4004400443FC40444044404047FF40004000400040000 +CFA9:000000083F8800883F880088048804087FE8000007F800080008000800080000 +CFAA:000000083F8800883F880088048804087FE8000000003EF80208020802080000 +CFAB:000000083F8800883F880088048804087FE8000000001F080108011401620000 +CFAC:000000083F8800883F880088048804087FE8000008000800080008000FF80000 +CFAD:000000083F8800883F880088048804087FE80000000010F8101010301ECC0000 +CFAE:000000083F8800883F880088048804087FE800000808087F081C08220F9C0000 +CFAF:000000083F8800883F880088048804087FE8000003F802000200020003F80000 +CFB0:000000083F8800883F880088048804087FE8000007F8000807F8040007F80000 +CFB1:000000083F8800883F880088048804087FE800003EF802083E0820083E080000 +CFB2:000000083F8800883F880088048804087FE800003EF802883E8820883EF80000 +CFB3:000000083F8800883F880088048804087FE800003E8802883EF820883EF80000 +CFB4:000000083F8800883F880088048804087FE800001F0801081F0810141F620000 +CFB5:000000083F8800883F880088048804087FE800003EF802803EF820803EF80000 +CFB6:000000083F8800883F880088048804087FE800003EFC02483E4820483EFC0000 +CFB7:000000083F8800883F880088048804087FE800001F08017F1F1C10221F1C0000 +CFB8:000000083F8800883F880088048804087FE8000003F802080208020803F80000 +CFB9:000000083F8800883F880088048804087FE800000208020803F8020803F80000 +CFBA:000000083F8800883F880088048804087FE80000110811081F0811141F620000 +CFBB:000000083F8800883F880088048804087FE80000001000100010006801840000 +CFBC:000000083F8800883F880088048804087FE800000048004800A8011406620000 +CFBD:000000083F8800883F880088048804087FE80000000003F00408040803F00000 +CFBE:000000083F8800883F880088048804087FE8000003F80020002000D003080000 +CFBF:000000083F8800883F880088048804087FE80000004003F8004000A003180000 +CFC0:000000083F8800883F880088048804087FE8000003F8000803F8000800080000 +CFC1:000000083F8800883F880088048804087FE8000003F8020003F8020003F80000 +CFC2:000000083F8800883F880088048804087FE8000000000FF8022002200FF80000 +CFC3:000000083F8800883F880088048804087FE8000000800FF803E0041003E00000 +CFC4:00000000000000003FF8000800083FF8000808880888088008807FFC00000000 +CFC5:000000001FF000101FF00010049004807FFC00001FF000100010001000100000 +CFC6:000000001FF000101FF00010049004807FFC000000003EF80208020802080000 +CFC7:000000001FF000101FF00010049004807FFC000000001E100210022802C40000 +CFC8:000000001FF000101FF00010049004807FFC000000001000100010001FF00000 +CFC9:000000001FF000101FF00010049004807FFC0000000020F8201020303ECC0000 +CFCA:000000001FF000101FF00010049004807FFC0000202021FC207020883E700000 +CFCB:000000001FF000101FF00010049004807FFC00001FF01000100010001FF00000 +CFCC:000000001FF000101FF00010049004807FFC00001FF000101FF010001FF00000 +CFCD:000000001FF000101FF00010049004807FFC00003EF802083E0820083E080000 +CFCE:000000001FF000101FF00010049004807FFC00003EF802883E8820883EF80000 +CFCF:000000001FF000101FF00010049004807FFC00003E8802883EF820883EF80000 +CFD0:000000001FF000101FF00010049004807FFC00003E1002103E1020283EC40000 +CFD1:000000001FF000101FF00010049004807FFC00003EF802803EF820803EF80000 +CFD2:000000001FF000101FF00010049004807FFC00003EFC02483E4820483EFC0000 +CFD3:000000001FF000101FF00010049004807FFC00003E2003FC3E7020883E700000 +CFD4:000000001FF000101FF00010049004807FFC00001FF01010101010101FF00000 +CFD5:000000001FF000101FF00010049004807FFC0000101010101FF010101FF00000 +CFD6:000000001FF000101FF00010049004807FFC0000222022203E2022503E880000 +CFD7:000000001FF000101FF00010049004807FFC000000000100010002800C400000 +CFD8:000000001FF000101FF00010049004807FFC00000000024002400DA033100000 +CFD9:000000001FF000101FF00010049004807FFC0000000007C00820082007C00000 +CFDA:000000001FF000101FF00010049004807FFC0000000007E00080014006200000 +CFDB:000000001FF000101FF00010049004807FFC0000008007E00080014006200000 +CFDC:000000001FF000101FF00010049004807FFC00001FF000101FF0001000100000 +CFDD:000000001FF000101FF00010049004807FFC00001FF010001FF010001FF00000 +CFDE:000000001FF000101FF00010049004807FFC000000001FF0044004401FF00000 +CFDF:000000001FF000101FF00010049004807FFC000001001FF007C0082007C00000 +CFE0:0000000000003FF8000800083FF80008000800003FF801000100010001000000 +CFE1:000000001FF000101FF0001000107FFC010001001FF000100010001000100000 +CFE2:000000001FF000101FF0001000107FFC0100010000003EF80208020802080000 +CFE3:000000001FF000101FF0001000107FFC0100010000001E100210022802C40000 +CFE4:000000001FF000101FF00010001000007FFC010001001100100010001FF00000 +CFE5:000000001FF000101FF0001000107FFC01000100000020F8201020303ECC0000 +CFE6:000000001FF000101FF0001000107FFC01000100202021FC207020883E700000 +CFE7:000000001FF000101FF0001000107FFC010001001FF01000100010001FF00000 +CFE8:000000001FF000101FF0001000107FFC010001001FF000101FF010001FF00000 +CFE9:000000001FF000101FF0001000107FFC010001003EF802083E0820083E080000 +CFEA:000000001FF000101FF0001000107FFC010001003EF802883E8820883EF80000 +CFEB:000000001FF000101FF0001000107FFC010001003E8802883EF820883EF80000 +CFEC:000000001FF000101FF0001000107FFC010001003E1002103E1020283EC40000 +CFED:000000001FF000101FF0001000107FFC010001003EF802803EF820803EF80000 +CFEE:000000001FF000101FF0001000107FFC010001003EFC02483E4820483EFC0000 +CFEF:000000001FF000101FF0001000107FFC010001003E2003FC3E7020883E700000 +CFF0:000000001FF000101FF0001000107FFC010001001FF01010101010101FF00000 +CFF1:000000001FF000101FF0001000107FFC01000100101010101FF010101FF00000 +CFF2:000000001FF000101FF0001000107FFC01000100222022203E2022503E880000 +CFF3:000000001FF000101FF0001000107FFC0100010000000100010002800C400000 +CFF4:000000001FF000101FF0001000107FFC010001000000024002400DA033100000 +CFF5:000000001FF000101FF0001000107FFC01000100000007C00820082007C00000 +CFF6:000000001FF000101FF0001000107FFC01000100000007E00080014006200000 +CFF7:000000001FF000101FF0001000107FFC01000100008007E00080014006200000 +CFF8:000000001FF000101FF0001000107FFC010001001FF000101FF0001000100000 +CFF9:000000001FF000101FF0001000107FFC010001001FF010001FF010001FF00000 +CFFA:000000001FF000101FF0001000107FFC0100010000001FF0044004401FF00000 +CFFB:000000001FF000101FF0001000107FFC0100010001001FF007C0082007C00000 +CFFC:0000000800083FC8004800483FC80048004800087FE8040804F8040804080000 +CFFD:00083F8800883F88008800887FE8027802080000000007F80008000800080000 +CFFE:00083F8800883F88008800887FE802780208000000003EF80208020802080000 +CFFF:00083F8800883F88008800887FE802780208000000001F080108011401620000 +D000:00083F8800883F880088008800087FE80278020802081000100010001FF80000 +D001:00083F8800883F88008800887FE8027802080000000020F8201020303ECC0000 +D002:00083F8800883F88008800887FE8027802080000202021FC207020883E700000 +D003:00083F8800883F88008800887FE802780208000003F802000200020003F80000 +D004:00083F8800883F88008800887FE802780208000007F8000807F8040007F80000 +D005:00083F8800883F88008800887FE80278020800003EF802083E0820083E080000 +D006:00083F8800883F88008800887FE80278020800003EF802883E8820883EF80000 +D007:00083F8800883F88008800887FE80278020800003E8802883EF820883EF80000 +D008:00083F8800883F88008800887FE80278020800000F8800880F8808140FA20000 +D009:00083F8800883F88008800887FE80278020800003EF802803EF820803EF80000 +D00A:00083F8800883F88008800887FE80278020800003EFC02483E4820483EFC0000 +D00B:00083F8800883F88008800887FE80278020800003E1002FE3E3820443E380000 +D00C:00083F8800883F88008800887FE802780208000003F802080208020803F80000 +D00D:00083F8800883F88008800887FE80278020800000208020803F8020803F80000 +D00E:00083F8800883F88008800887FE8027802080000210821083F0821143F620000 +D00F:00083F8800883F88008800887FE8027802080000001000100010006801840000 +D010:00083F8800883F88008800887FE80278020800000048004800A8011406620000 +D011:00083F8800883F88008800887FE8027802080000000003F00408040803F00000 +D012:00083F8800883F88008800887FE802780208000003F80020002000D003080000 +D013:00083F8800883F88008800887FE8027802080000004003F8004000A003180000 +D014:00083F8800883F88008800887FE802780208000003F8000803F8000800080000 +D015:00083F8800883F88008800887FE802780208000003F8020003F8020003F80000 +D016:00083F8800883F88008800887FE802780208000000000FF8022002200FF80000 +D017:00083F8800883F88008800887FE802780208000000800FF803E0041003E00000 +D018:0000000A000A3FCA004A004A3FCA004A004A000A7FEA040A047A040A040A0000 +D019:00283FA800A83FA800A800A87FA805E804280000000007F80008000800080000 +D01A:00283FA800A83FA800A800A87FA805E80428000000003EF80208020802080000 +D01B:00283FA800A83FA800A800A87FA805E80428000000001F080108011401620000 +D01C:00283FA800A83FA800A800A800287FA8042805E804281428100010001FF80000 +D01D:00283FA800A83FA800A800A87FA805E804280000000020F8201020303ECC0000 +D01E:00283FA800A83FA800A800A87FA805E804280000202021FC207020883E700000 +D01F:00283FA800A83FA800A800A87FA805E80428000003F802000200020003F80000 +D020:00283FA800A83FA800A800A87FA805E80428000007F8000807F8040007F80000 +D021:00283FA800A83FA800A800A87FA805E8042800003EF802083E0820083E080000 +D022:00283FA800A83FA800A800A87FA805E8042800003EF802883E8820883EF80000 +D023:00283FA800A83FA800A800A87FA805E8042800003E8802883EF820883EF80000 +D024:00283FA800A83FA800A800A87FA805E8042800000F8800880F8808140FA20000 +D025:00283FA800A83FA800A800A87FA805E8042800003EF802803EF820803EF80000 +D026:00283FA800A83FA800A800A87FA805E8042800003EFC02483E4820483EFC0000 +D027:00283FA800A83FA800A800A87FA805E8042800003E1002FE3E3820443E380000 +D028:00283FA800A83FA800A800A87FA805E80428000003F802080208020803F80000 +D029:00283FA800A83FA800A800A87FA805E8042800000208020803F8020803F80000 +D02A:00283FA800A83FA800A800A87FA805E804280000210821083F0821143F620000 +D02B:00283FA800A83FA800A800A87FA805E804280000001000100010006801840000 +D02C:00283FA800A83FA800A800A87FA805E8042800000048004800A8011406620000 +D02D:00283FA800A83FA800A800A87FA805E804280000000003F00408040803F00000 +D02E:00283FA800A83FA800A800A87FA805E80428000003F80020002000D003080000 +D02F:00283FA800A83FA800A800A87FA805E804280000004003F8004000A003180000 +D030:00283FA800A83FA800A800A87FA805E80428000003F8000803F8000800080000 +D031:00283FA800A83FA800A800A87FA805E80428000003F8020003F8020003F80000 +D032:00283FA800A83FA800A800A87FA805E80428000000000FF8022002200FF80000 +D033:00283FA800A83FA800A800A87FA805E80428000000800FF803E0041003E00000 +D034:0000000800083FC8004800483FC80048004800087FE804080408040804080000 +D035:00083F8800883F88008800887FE8020802000000000007F80008000800080000 +D036:00083F8800883F88008800887FE802080200000000003EF80208020802080000 +D037:00083F8800883F88008800887FE802080200000000001F080108011401620000 +D038:00083F8800883F880088008800087FE80208020802081008100010001FF80000 +D039:00083F8800883F88008800887FE8020802000000000020F8201020303ECC0000 +D03A:00083F8800883F88008800887FE8020802000000202021FC207020883E700000 +D03B:00083F8800883F88008800887FE802080200000003F802000200020003F80000 +D03C:00083F8800883F88008800887FE802080200000007F8000807F8040007F80000 +D03D:00083F8800883F88008800887FE80208020000003EF802083E0820083E080000 +D03E:00083F8800883F88008800887FE80208020000003EF802883E8820883EF80000 +D03F:00083F8800883F88008800887FE80208020000003E8802883EF820883EF80000 +D040:00083F8800883F88008800887FE80208020000000F8800880F8808140FA20000 +D041:00083F8800883F88008800887FE80208020000003EF802803EF820803EF80000 +D042:00083F8800883F88008800887FE80208020000003EFC02483E4820483EFC0000 +D043:00083F8800883F88008800887FE80208020000003E1002FE3E3820443E380000 +D044:00083F8800883F88008800887FE802080200000003F802080208020803F80000 +D045:00083F8800883F88008800887FE80208020000000208020803F8020803F80000 +D046:00083F8800883F88008800887FE8020802000000210821083F0821143F620000 +D047:00083F8800883F88008800887FE8020802000000001000100010006801840000 +D048:00083F8800883F88008800887FE80208020000000048004800A8011406620000 +D049:00083F8800883F88008800887FE8020802000000000003F00408040803F00000 +D04A:00083F8800883F88008800887FE802080200000003F80020002000D003080000 +D04B:00083F8800883F88008800887FE8020802000000004003F8004000A003180000 +D04C:00083F8800883F88008800887FE802080200000003F8000803F8000800080000 +D04D:00083F8800883F88008800887FE802080200000003F8020003F8020003F80000 +D04E:00083F8800883F88008800887FE802080200000000000FF8022002200FF80000 +D04F:00083F8800883F88008800887FE802080200000000800FF803E0041003E00000 +D050:0000000000003FF8000800083FF80008000800007FFC04400440044004400000 +D051:000000001FF000101FF0001000107FFC044004401FF000100010001000100000 +D052:000000001FF000101FF0001000107FFC0440044000003EF80208020802080000 +D053:000000001FF000101FF0001000107FFC0440044000001E100210022802C40000 +D054:000000001FF000101FF00010001000007FFC044004401440100010001FF00000 +D055:000000001FF000101FF0001000107FFC04400440000020F8201020303ECC0000 +D056:000000001FF000101FF0001000107FFC04400440202021FC207020883E700000 +D057:000000001FF000101FF0001000107FFC044004401FF01000100010001FF00000 +D058:000000001FF000101FF0001000107FFC044004401FF000101FF010001FF00000 +D059:000000001FF000101FF0001000107FFC044004403EF802083E0820083E080000 +D05A:000000001FF000101FF0001000107FFC044004403EF802883E8820883EF80000 +D05B:000000001FF000101FF0001000107FFC044004403E8802883EF820883EF80000 +D05C:000000001FF000101FF0001000107FFC044004403E1002103E1020283EC40000 +D05D:000000001FF000101FF0001000107FFC044004403EF802803EF820803EF80000 +D05E:000000001FF000101FF0001000107FFC044004403EFC02483E4820483EFC0000 +D05F:000000001FF000101FF0001000107FFC044004403E2003FC3E7020883E700000 +D060:000000001FF000101FF0001000107FFC044004401FF01010101010101FF00000 +D061:000000001FF000101FF0001000107FFC04400440101010101FF010101FF00000 +D062:000000001FF000101FF0001000107FFC04400440222022203E2022503E880000 +D063:000000001FF000101FF0001000107FFC0440044000000100010002800C400000 +D064:000000001FF000101FF0001000107FFC044004400000024002400DA033100000 +D065:000000001FF000101FF0001000107FFC04400440000007C00820082007C00000 +D066:000000001FF000101FF0001000107FFC04400440000007E00080014006200000 +D067:000000001FF000101FF0001000107FFC04400440008007E00080014006200000 +D068:000000001FF000101FF0001000107FFC044004401FF000101FF0001000100000 +D069:000000001FF000101FF0001000107FFC044004401FF010001FF010001FF00000 +D06A:000000001FF000101FF0001000107FFC0440044000001FF0044004401FF00000 +D06B:000000001FF000101FF0001000107FFC0440044001001FF007C0082007C00000 +D06C:00000000000000003FF8000800083FF80008000800087FFC0000000000000000 +D06D:000000001FF000101FF00010001000007FFC00001FF000100010001000100000 +D06E:000000001FF000101FF00010001000007FFC000000003EF80208020802080000 +D06F:000000001FF000101FF00010001000007FFC000000001E100210022802C40000 +D070:000000001FF000101FF00010001000007FFC000000001000100010001FF00000 +D071:000000001FF000101FF00010001000007FFC0000000020F8201020303ECC0000 +D072:000000001FF000101FF00010001000007FFC0000202021FC207020883E700000 +D073:000000001FF000101FF00010001000007FFC00001FF01000100010001FF00000 +D074:000000001FF000101FF00010001000007FFC00001FF000101FF010001FF00000 +D075:000000001FF000101FF00010001000007FFC00003EF802083E0820083E080000 +D076:000000001FF000101FF00010001000007FFC00003EF802883E8820883EF80000 +D077:000000001FF000101FF00010001000007FFC00003E8802883EF820883EF80000 +D078:000000001FF000101FF00010001000007FFC00003E1002103E1020283EC40000 +D079:000000001FF000101FF00010001000007FFC00003EF802803EF820803EF80000 +D07A:000000001FF000101FF00010001000007FFC00003EFC02483E4820483EFC0000 +D07B:000000001FF000101FF00010001000007FFC00003E2003FC3E7020883E700000 +D07C:000000001FF000101FF00010001000007FFC00001FF01010101010101FF00000 +D07D:000000001FF000101FF00010001000007FFC0000101010101FF010101FF00000 +D07E:000000001FF000101FF00010001000007FFC0000222022203E2022503E880000 +D07F:000000001FF000101FF00010001000007FFC000000000100010002800C400000 +D080:000000001FF000101FF00010001000007FFC00000000024002400DA033100000 +D081:000000001FF000101FF00010001000007FFC0000000007C00820082007C00000 +D082:000000001FF000101FF00010001000007FFC0000000007E00080014006200000 +D083:000000001FF000101FF00010001000007FFC0000008007E00080014006200000 +D084:000000001FF000101FF00010001000007FFC00001FF000101FF0001000100000 +D085:000000001FF000101FF00010001000007FFC00001FF010001FF010001FF00000 +D086:000000001FF000101FF00010001000007FFC000000001FF0044004401FF00000 +D087:000000001FF000101FF00010001000007FFC000001001FF007C0082007C00000 +D088:00000000000800083FC8004800483FC80048004800087FE80008000800080000 +D089:000000083F8800883F880088008800087FE8000007F800080008000800080000 +D08A:000000083F8800883F880088008800087FE8000000003EF80208020802080000 +D08B:000000083F8800883F880088008800087FE8000000001F080108011401620000 +D08C:000000083F8800883F880088008800087FE8000008000800080008000FF80000 +D08D:000000083F8800883F880088008800087FE80000000010F8101010301ECC0000 +D08E:000000083F8800883F880088008800087FE800000808087F081C08220F9C0000 +D08F:000000083F8800883F880088008800087FE8000003F802000200020003F80000 +D090:000000083F8800883F880088008800087FE8000007F8000807F8040007F80000 +D091:000000083F8800883F880088008800087FE800003EF802083E0820083E080000 +D092:000000083F8800883F880088008800087FE800003EF802883E8820883EF80000 +D093:000000083F8800883F880088008800087FE800003E8802883EF820883EF80000 +D094:000000083F8800883F880088008800087FE800001F0801081F0810141F620000 +D095:000000083F8800883F880088008800087FE800003EF802803EF820803EF80000 +D096:000000083F8800883F880088008800087FE800003EFC02483E4820483EFC0000 +D097:000000083F8800883F880088008800087FE800001F08017F1F1C10221F1C0000 +D098:000000083F8800883F880088008800087FE8000003F802080208020803F80000 +D099:000000083F8800883F880088008800087FE800000208020803F8020803F80000 +D09A:000000083F8800883F880088008800087FE80000110811081F0811141F620000 +D09B:000000083F8800883F880088008800087FE80000001000100010006801840000 +D09C:000000083F8800883F880088008800087FE800000048004800A8011406620000 +D09D:000000083F8800883F880088008800087FE80000000003F00408040803F00000 +D09E:000000083F8800883F880088008800087FE8000003F80020002000D003080000 +D09F:000000083F8800883F880088008800087FE80000004003F8004000A003180000 +D0A0:000000083F8800883F880088008800087FE8000003F8000803F8000800080000 +D0A1:000000083F8800883F880088008800087FE8000003F8020003F8020003F80000 +D0A2:000000083F8800883F880088008800087FE8000000000FF8022002200FF80000 +D0A3:000000083F8800883F880088008800087FE8000000800FF803E0041003E00000 +D0A4:00000000000800081F880088008800881F080108020804081808000800080000 +D0A5:000000087E08020802087E080408180860080000000007F80008000800080000 +D0A6:000000087E08020802087E08040818086008000000003EF80208020802080000 +D0A7:000000087E08020802087E08040818086008000000001F080108011401620000 +D0A8:000000087E08020802087E08040818086008000800001000100010001FF80000 +D0A9:000000087E08020802087E080408180860080000000020F8201020303ECC0000 +D0AA:000000087E08020802087E080408180860080000202021FC207020883E700000 +D0AB:000000087E08020802087E08040818086008000003F802000200020003F80000 +D0AC:000000087E08020802087E08040818086008000007F8000807F8040007F80000 +D0AD:000000087E08020802087E0804081808600800003EF802083E0820083E080000 +D0AE:000000087E08020802087E0804081808600800003EF802883E8820883EF80000 +D0AF:000000087E08020802087E0804081808600800003E8802883EF820883EF80000 +D0B0:000000087E08020802087E0804081808600800000F8800880F8808140FA20000 +D0B1:000000087E08020802087E0804081808600800003EF802803EF820803EF80000 +D0B2:000000087E08020802087E0804081808600800003EFC02483E4820483EFC0000 +D0B3:000000087E08020802087E0804081808600800003E1002FE3E3820443E380000 +D0B4:000000087E08020802087E08040818086008000003F802080208020803F80000 +D0B5:000000087E08020802087E0804081808600800000208020803F8020803F80000 +D0B6:000000087E08020802087E080408180860080000210821083F0821143F620000 +D0B7:000000087E08020802087E080408180860080000001000100010006801840000 +D0B8:000000087E08020802087E0804081808600800000048004800A8011406620000 +D0B9:000000087E08020802087E080408180860080000000003F00408040803F00000 +D0BA:000000087E08020802087E08040818086008000003F80020002000D003080000 +D0BB:000000087E08020802087E080408180860080000004003F8004000A003180000 +D0BC:000000087E08020802087E08040818086008000003F8000803F8000800080000 +D0BD:000000087E08020802087E08040818086008000003F8020003F8020003F80000 +D0BE:000000087E08020802087E08040818086008000000000FF8022002200FF80000 +D0BF:000000087E08020802087E08040818086008000000800FF803E0041003E00000 +D0C0:00000000001000103F90201020103F9E201020103F9000100010001000100000 +D0C1:0000000800087E0840087E0E40087E080008000007F800080008000800080000 +D0C2:0000000800087E0840087E0E40087E080008000000003EF80208020802080000 +D0C3:0000000800087E0840087E0E40087E080008000000001F080108011401620000 +D0C4:0000000800087E0840087E0E40087E080008000808000800080008000FF80000 +D0C5:0000000800087E0840087E0E40087E0800080000000010F8101010301ECC0000 +D0C6:0000000800087E0840087E0E40087E08000800000808087F081C08220F9C0000 +D0C7:0000000800087E0840087E0E40087E080008000003F802000200020003F80000 +D0C8:0000000800087E0840087E0E40087E080008000007F8000807F8040007F80000 +D0C9:0000000800087E0840087E0E40087E08000800003EF802083E0820083E080000 +D0CA:0000000800087E0840087E0E40087E08000800003EF802883E8820883EF80000 +D0CB:0000000800087E0840087E0E40087E08000800003E8802883EF820883EF80000 +D0CC:0000000800087E0840087E0E40087E08000800001F0801081F0810141F620000 +D0CD:0000000800087E0840087E0E40087E08000800003EF802803EF820803EF80000 +D0CE:0000000800087E0840087E0E40087E08000800003EFC02483E4820483EFC0000 +D0CF:0000000800087E0840087E0E40087E08000800001F08017F1F1C10221F1C0000 +D0D0:0000000800087E0840087E0E40087E080008000003F802080208020803F80000 +D0D1:0000000800087E0840087E0E40087E08000800000208020803F8020803F80000 +D0D2:0000000800087E0840087E0E40087E0800080000110811081F0811141F620000 +D0D3:0000000800087E0840087E0E40087E0800080000001000100010006801840000 +D0D4:0000000800087E0840087E0E40087E08000800000048004800A8011406620000 +D0D5:0000000800087E0840087E0E40087E0800080000000003F00408040803F00000 +D0D6:0000000800087E0840087E0E40087E080008000003F80020002000D003080000 +D0D7:0000000800087E0840087E0E40087E0800080000004003F8004000A003180000 +D0D8:0000000800087E0840087E0E40087E080008000003F8000803F8000800080000 +D0D9:0000000800087E0840087E0E40087E080008000003F8020003F8020003F80000 +D0DA:0000000800087E0840087E0E40087E080008000000000FF8022002200FF80000 +D0DB:0000000800087E0840087E0E40087E080008000000800FF803E0041003E00000 +D0DC:00000000001200123F92201220123F9E201220123F9200120012001200120000 +D0DD:0000002800287E2840287E3840287E280028000007F800080008000800080000 +D0DE:0000002800287E2840287E3840287E280028000000003EF80208020802080000 +D0DF:0000002800287E2840287E3840287E280028000000003E100210022802C40000 +D0E0:0000002800287E2840287E3840287E280028002808000800080008000FF80000 +D0E1:0000002800287E2840287E3840287E2800280000000020F8201020303ECC0000 +D0E2:0000002800287E2840287E3840287E2800280000202021FC207020883E700000 +D0E3:0000002800287E2840287E3840287E280028000003F802000200020003F80000 +D0E4:0000002800287E2840287E3840287E280028000007F8000807F8040007F80000 +D0E5:0000002800287E2840287E3840287E28002800003EF802083E0820083E080000 +D0E6:0000002800287E2840287E3840287E28002800003EF802883E8820883EF80000 +D0E7:0000002800287E2840287E3840287E28002800003E8802883EF820883EF80000 +D0E8:0000002800287E2840287E3840287E28002800001F0801081F0810141F620000 +D0E9:0000002800287E2840287E3840287E28002800003EF802803EF820803EF80000 +D0EA:0000002800287E2840287E3840287E28002800003EFC02483E4820483EFC0000 +D0EB:0000002800287E2840287E3840287E28002800003E1002FE3E3820443E380000 +D0EC:0000002800287E2840287E3840287E280028000003F802080208020803F80000 +D0ED:0000002800287E2840287E3840287E28002800000208020803F8020803F80000 +D0EE:0000002800287E2840287E3840287E2800280000110811081F0811141F620000 +D0EF:0000002800287E2840287E3840287E2800280000000800080008003400C20000 +D0F0:0000002800287E2840287E3840287E28002800000048004800A8011406620000 +D0F1:0000002800287E2840287E3840287E2800280000000001F00208020801F00000 +D0F2:0000002800287E2840287E3840287E280028000003F80020002000D003080000 +D0F3:0000002800287E2840287E3840287E2800280000004003F8004000A003180000 +D0F4:0000002800287E2840287E3840287E280028000003F8000803F8000800080000 +D0F5:0000002800287E2840287E3840287E280028000003F8020003F8020003F80000 +D0F6:0000002800287E2840287E3840287E280028000000000FF8022002200FF80000 +D0F7:0000002800287E2840287E3840287E280028000000800FF803E0041003E00000 +D0F8:00000000001000103F902010201E3F902010201E3F9000100010001000100000 +D0F9:0000000800087E08400E7E08400E7E080008000007F800080008000800080000 +D0FA:0000000800087E08400E7E08400E7E080008000000003EF80208020802080000 +D0FB:0000000800087E08400E7E08400E7E080008000000001F080108011401620000 +D0FC:0000000800087E08400E7E08400E7E080008000008000800080008000FF80000 +D0FD:0000000800087E08400E7E08400E7E0800080000000010F8101010301ECC0000 +D0FE:0000000800087E08400E7E08400E7E08000800000808087F081C08220F9C0000 +D0FF:0000000800087E08400E7E08400E7E080008000003F802000200020003F80000 +D100:0000000800087E08400E7E08400E7E080008000007F8000807F8040007F80000 +D101:0000000800087E08400E7E08400E7E08000800003EF802083E0820083E080000 +D102:0000000800087E08400E7E08400E7E08000800003EF802883E8820883EF80000 +D103:0000000800087E08400E7E08400E7E08000800003E8802883EF820883EF80000 +D104:0000000800087E08400E7E08400E7E08000800001F0801081F0810141F620000 +D105:0000000800087E08400E7E08400E7E08000800003EF802803EF820803EF80000 +D106:0000000800087E08400E7E08400E7E08000800003EFC02483E4820483EFC0000 +D107:0000000800087E08400E7E08400E7E08000800001F08017F1F1C10221F1C0000 +D108:0000000800087E08400E7E08400E7E080008000003F802080208020803F80000 +D109:0000000800087E08400E7E08400E7E08000800000208020803F8020803F80000 +D10A:0000000800087E08400E7E08400E7E0800080000110811081F0811141F620000 +D10B:0000000800087E08400E7E08400E7E0800080000001000100010006801840000 +D10C:0000000800087E08400E7E08400E7E08000800000048004800A8011406620000 +D10D:0000000800087E08400E7E08400E7E0800080000000003F00408040803F00000 +D10E:0000000800087E08400E7E08400E7E080008000003F80020002000D003080000 +D10F:0000000800087E08400E7E08400E7E0800080000004003F8004000A003180000 +D110:0000000800087E08400E7E08400E7E080008000003F8000803F8000800080000 +D111:0000000800087E08400E7E08400E7E080008000003F8020003F8020003F80000 +D112:0000000800087E08400E7E08400E7E080008000000000FF8022002200FF80000 +D113:0000000800087E08400E7E08400E7E080008000000800FF803E0041003E00000 +D114:00000000001200123F922012201E3F922012201E3F9200120012001200120000 +D115:0000002800287E2840387E2840387E280028000007F800080008000800080000 +D116:0000002800287E2840387E2840387E280028000000003EF80208020802080000 +D117:0000002800287E2840387E2840387E280028000000003E100210022802C40000 +D118:0000002800287E2840387E2840387E280028002808000800080008000FF80000 +D119:0000002800287E2840387E2840387E2800280000000020F8201020303ECC0000 +D11A:0000002800287E2840387E2840387E2800280000202021FC207020883E700000 +D11B:0000002800287E2840387E2840387E280028000003F802000200020003F80000 +D11C:0000002800287E2840387E2840387E280028000007F8000807F8040007F80000 +D11D:0000002800287E2840387E2840387E28002800003EF802083E0820083E080000 +D11E:0000002800287E2840387E2840387E28002800003EF802883E8820883EF80000 +D11F:0000002800287E2840387E2840387E28002800003E8802883EF820883EF80000 +D120:0000002800287E2840387E2840387E28002800001F0801081F0810141F620000 +D121:0000002800287E2840387E2840387E28002800003EF802803EF820803EF80000 +D122:0000002800287E2840387E2840387E28002800003EFC02483E4820483EFC0000 +D123:0000002800287E2840387E2840387E28002800003E1002FE3E3820443E380000 +D124:0000002800287E2840387E2840387E280028000003F802080208020803F80000 +D125:0000002800287E2840387E2840387E28002800000208020803F8020803F80000 +D126:0000002800287E2840387E2840387E2800280000110811081F0811141F620000 +D127:0000002800287E2840387E2840387E2800280000000800080008003400C20000 +D128:0000002800287E2840387E2840387E28002800000048004800A8011406620000 +D129:0000002800287E2840387E2840387E2800280000000001F00208020801F00000 +D12A:0000002800287E2840387E2840387E280028000003F80020002000D003080000 +D12B:0000002800287E2840387E2840387E2800280000004003F8004000A003180000 +D12C:0000002800287E2840387E2840387E280028000003F8000803F8000800080000 +D12D:0000002800287E2840387E2840387E280028000003F8020003F8020003F80000 +D12E:0000002800287E2840387E2840387E280028000000000FF8022002200FF80000 +D12F:0000002800287E2840387E2840387E280028000000800FF803E0041003E00000 +D130:00000000000200023F82200220023F9E200220023F8200020002000200020000 +D131:0000000800087E0840087E3840087E0800080000000007F80008000800080000 +D132:0000000800087E0840087E3840087E080008000000003EF80208020802080000 +D133:0000000800087E0840087E3840087E080008000000001F080108011401620000 +D134:0000000800087E0840087E3840087E080008000000001000100010001FF80000 +D135:0000000800087E0840087E3840087E0800080000000020F8201020303ECC0000 +D136:0000000800087E0840087E3840087E0800080000202021FC207020883E700000 +D137:0000000800087E0840087E3840087E080008000003F802000200020003F80000 +D138:0000000800087E0840087E3840087E080008000007F8000807F8040007F80000 +D139:0000000800087E0840087E3840087E08000800003EF802083E0820083E080000 +D13A:0000000800087E0840087E3840087E08000800003EF802883E8820883EF80000 +D13B:0000000800087E0840087E3840087E08000800003E8802883EF820883EF80000 +D13C:0000000800087E0840087E3840087E08000800000F8800880F8808140FA20000 +D13D:0000000800087E0840087E3840087E08000800003EF802803EF820803EF80000 +D13E:0000000800087E0840087E3840087E08000800003EFC02483E4820483EFC0000 +D13F:0000000800087E0840087E3840087E08000800003E1002FE3E3820443E380000 +D140:0000000800087E0840087E3840087E080008000003F802080208020803F80000 +D141:0000000800087E0840087E3840087E08000800000208020803F8020803F80000 +D142:0000000800087E0840087E3840087E0800080000210821083F0821143F620000 +D143:0000000800087E0840087E3840087E0800080000001000100010006801840000 +D144:0000000800087E0840087E3840087E08000800000048004800A8011406620000 +D145:0000000800087E0840087E3840087E0800080000000003F00408040803F00000 +D146:0000000800087E0840087E3840087E080008000003F80020002000D003080000 +D147:0000000800087E0840087E3840087E0800080000004003F8004000A003180000 +D148:0000000800087E0840087E3840087E080008000003F8000803F8000800080000 +D149:0000000800087E0840087E3840087E080008000003F8020003F8020003F80000 +D14A:0000000800087E0840087E3840087E080008000000000FF8022002200FF80000 +D14B:0000000800087E0840087E3840087E080008000000800FF803E0041003E00000 +D14C:00000000000A000A3F8A200A200A3FBA200A200A3F8A000A000A000A000A0000 +D14D:0000002800287E2840287EE840287E280028000007F800080008000800080000 +D14E:0000002800287E2840287EE840287E280028000000003EF80208020802080000 +D14F:0000002800287E2840287EE840287E280028000000003E100210022802C40000 +D150:0000002800287E2840287EE840287E280028000008000800080008000FF80000 +D151:0000002800287E2840287EE840287E2800280000000020F8201020303ECC0000 +D152:0000002800287E2840287EE840287E2800280000202021FC207020883E700000 +D153:0000002800287E2840287EE840287E280028000003F802000200020003F80000 +D154:0000002800287E2840287EE840287E280028000007F8000807F8040007F80000 +D155:0000002800287E2840287EE840287E28002800003EF802083E0820083E080000 +D156:0000002800287E2840287EE840287E28002800003EF802883E8820883EF80000 +D157:0000002800287E2840287EE840287E28002800003E8802883EF820883EF80000 +D158:0000002800287E2840287EE840287E28002800001F0801081F0810141F620000 +D159:0000002800287E2840287EE840287E28002800003EF802803EF820803EF80000 +D15A:0000002800287E2840287EE840287E28002800003EFC02483E4820483EFC0000 +D15B:0000002800287E2840287EE840287E28002800003E1002FE3E3820443E380000 +D15C:0000002800287E2840287EE840287E280028000003F802080208020803F80000 +D15D:0000002800287E2840287EE840287E28002800000208020803F8020803F80000 +D15E:0000002800287E2840287EE840287E2800280000110811081F0811141F620000 +D15F:0000002800287E2840287EE840287E2800280000000800080008003400C20000 +D160:0000002800287E2840287EE840287E28002800000048004800A8011406620000 +D161:0000002800287E2840287EE840287E2800280000000001F00208020801F00000 +D162:0000002800287E2840287EE840287E280028000003F80020002000D003080000 +D163:0000002800287E2840287EE840287E2800280000004003F8004000A003180000 +D164:0000002800287E2840287EE840287E280028000003F8000803F8000800080000 +D165:0000002800287E2840287EE840287E280028000003F8020003F8020003F80000 +D166:0000002800287E2840287EE840287E280028000000000FF8022002200FF80000 +D167:0000002800287E2840287EE840287E280028000000800FF803E0041003E00000 +D168:00000000000200023F822002201E3F822002201E3F8200020002000200020000 +D169:0000000800087E0840387E0840387E0800080000000007F80008000800080000 +D16A:0000000800087E0840387E0840387E080008000000003EF80208020802080000 +D16B:0000000800087E0840387E0840387E080008000000001F080108011401620000 +D16C:0000000800087E0840387E0840387E080008000800001000100010001FF80000 +D16D:0000000800087E0840387E0840387E0800080000000020F8201020303ECC0000 +D16E:0000000800087E0840387E0840387E0800080000202021FC207020883E700000 +D16F:0000000800087E0840387E0840387E080008000003F802000200020003F80000 +D170:0000000800087E0840387E0840387E080008000007F8000807F8040007F80000 +D171:0000000800087E0840387E0840387E08000800003EF802083E0820083E080000 +D172:0000000800087E0840387E0840387E08000800003EF802883E8820883EF80000 +D173:0000000800087E0840387E0840387E08000800003E8802883EF820883EF80000 +D174:0000000800087E0840387E0840387E08000800000F8800880F8808140FA20000 +D175:0000000800087E0840387E0840387E08000800003EF802803EF820803EF80000 +D176:0000000800087E0840387E0840387E08000800003EFC02483E4820483EFC0000 +D177:0000000800087E0840387E0840387E08000800003E1002FE3E3820443E380000 +D178:0000000800087E0840387E0840387E080008000003F802080208020803F80000 +D179:0000000800087E0840387E0840387E08000800000208020803F8020803F80000 +D17A:0000000800087E0840387E0840387E0800080000210821083F0821143F620000 +D17B:0000000800087E0840387E0840387E0800080000001000100010006801840000 +D17C:0000000800087E0840387E0840387E08000800000048004800A8011406620000 +D17D:0000000800087E0840387E0840387E0800080000000003F00408040803F00000 +D17E:0000000800087E0840387E0840387E080008000003F80020002000D003080000 +D17F:0000000800087E0840387E0840387E0800080000004003F8004000A003180000 +D180:0000000800087E0840387E0840387E080008000003F8000803F8000800080000 +D181:0000000800087E0840387E0840387E080008000003F8020003F8020003F80000 +D182:0000000800087E0840387E0840387E080008000000000FF8022002200FF80000 +D183:0000000800087E0840387E0840387E080008000000800FF803E0041003E00000 +D184:00000000000A000A3F8A200A203A3F8A200A203A3F8A000A000A000A000A0000 +D185:0000002800287E2840E87E2840E87E280028000007F800080008000800080000 +D186:0000002800287E2840E87E2840E87E280028000000003EF80208020802080000 +D187:0000002800287E2840E87E2840E87E280028000000003E100210022802C40000 +D188:0000002800287E2840E87E2840E87E280028002808000800080008000FF80000 +D189:0000002800287E2840E87E2840E87E2800280000000020F8201020303ECC0000 +D18A:0000002800287E2840E87E2840E87E2800280000202021FC207020883E700000 +D18B:0000002800287E2840E87E2840E87E280028000003F802000200020003F80000 +D18C:0000002800287E2840E87E2840E87E280028000007F8000807F8040007F80000 +D18D:0000002800287E2840E87E2840E87E28002800003EF802083E0820083E080000 +D18E:0000002800287E2840E87E2840E87E28002800003EF802883E8820883EF80000 +D18F:0000002800287E2840E87E2840E87E28002800003E8802883EF820883EF80000 +D190:0000002800287E2840E87E2840E87E28002800001F0801081F0810141F620000 +D191:0000002800287E2840E87E2840E87E28002800003EF802803EF820803EF80000 +D192:0000002800287E2840E87E2840E87E28002800003EFC02483E4820483EFC0000 +D193:0000002800287E2840E87E2840E87E28002800003E1002FE3E3820443E380000 +D194:0000002800287E2840E87E2840E87E280028000003F802080208020803F80000 +D195:0000002800287E2840E87E2840E87E28002800000208020803F8020803F80000 +D196:0000002800287E2840E87E2840E87E2800280000110811081F0811141F620000 +D197:0000002800287E2840E87E2840E87E2800280000000800080008003400C20000 +D198:0000002800287E2840E87E2840E87E28002800000048004800A8011406620000 +D199:0000002800287E2840E87E2840E87E2800280000000001F00208020801F00000 +D19A:0000002800287E2840E87E2840E87E280028000003F80020002000D003080000 +D19B:0000002800287E2840E87E2840E87E2800280000004003F8004000A003180000 +D19C:0000002800287E2840E87E2840E87E280028000003F8000803F8000800080000 +D19D:0000002800287E2840E87E2840E87E280028000003F8020003F8020003F80000 +D19E:0000002800287E2840E87E2840E87E280028000000000FF8022002200FF80000 +D19F:0000002800287E2840E87E2840E87E280028000000800FF803E0041003E00000 +D1A0:00003FF8200020003FF8200020003FF8000000000100010001007FFC00000000 +D1A1:00001FF010001FF010001FF0010001007FFC00001FF000100010001000100000 +D1A2:00001FF010001FF010001FF0010001007FFC000000003EF80208020802080000 +D1A3:00001FF010001FF010001FF0010001007FFC000000001E100210022802C40000 +D1A4:00001FF010001FF010001FF0010001007FFC000000001000100010001FF00000 +D1A5:00001FF010001FF010001FF0010001007FFC0000000020F8201020303ECC0000 +D1A6:00001FF010001FF010001FF0010001007FFC0000202021FC207020883E700000 +D1A7:00001FF010001FF010001FF0010001007FFC00001FF01000100010001FF00000 +D1A8:00001FF010001FF010001FF0010001007FFC00001FF000101FF010001FF00000 +D1A9:00001FF010001FF010001FF0010001007FFC00003EF802083E0820083E080000 +D1AA:00001FF010001FF010001FF0010001007FFC00003EF802883E8820883EF80000 +D1AB:00001FF010001FF010001FF0010001007FFC00003E8802883EF820883EF80000 +D1AC:00001FF010001FF010001FF0010001007FFC00003E1002103E1020283EC40000 +D1AD:00001FF010001FF010001FF0010001007FFC00003EF802803EF820803EF80000 +D1AE:00001FF010001FF010001FF0010001007FFC00003EFC02483E4820483EFC0000 +D1AF:00001FF010001FF010001FF0010001007FFC00003E2003FC3E7020883E700000 +D1B0:00001FF010001FF010001FF0010001007FFC00001FF01010101010101FF00000 +D1B1:00001FF010001FF010001FF0010001007FFC0000101010101FF010101FF00000 +D1B2:00001FF010001FF010001FF0010001007FFC0000222022203E2022503E880000 +D1B3:00001FF010001FF010001FF0010001007FFC000000000100010002800C400000 +D1B4:00001FF010001FF010001FF0010001007FFC00000000024002400DA033100000 +D1B5:00001FF010001FF010001FF0010001007FFC0000000007C00820082007C00000 +D1B6:00001FF010001FF010001FF0010001007FFC0000000007E00080014006200000 +D1B7:00001FF010001FF010001FF0010001007FFC0000008007E00080014006200000 +D1B8:00001FF010001FF010001FF0010001007FFC00001FF000101FF0001000100000 +D1B9:00001FF010001FF010001FF0010001007FFC00001FF010001FF010001FF00000 +D1BA:00001FF010001FF010001FF0010001007FFC000000001FF0044004401FF00000 +D1BB:00001FF010001FF010001FF0010001007FFC000001001FF007C0082007C00000 +D1BC:000000103FD0201020103FD02010201E3FD00010041004107FD0001000100000 +D1BD:000000087F0840087F0E40087F0804087FE8000007F800080008000800080000 +D1BE:000000087F0840087F0E40087F0804087FE8000000003EF80208020802080000 +D1BF:000000087F0840087F0E40087F0804087FE8000000001F080108011401620000 +D1C0:000000087F0840087F0E40087F0804087FE8000008000800080008000FF80000 +D1C1:000000087F0840087F0E40087F0804087FE80000000010F8101010301ECC0000 +D1C2:000000087F0840087F0E40087F0804087FE800000808087F081C08220F9C0000 +D1C3:000000087F0840087F0E40087F0804087FE8000003F802000200020003F80000 +D1C4:000000087F0840087F0E40087F0804087FE8000007F8000807F8040007F80000 +D1C5:000000087F0840087F0E40087F0804087FE800003EF802083E0820083E080000 +D1C6:000000087F0840087F0E40087F0804087FE800003EF802883E8820883EF80000 +D1C7:000000087F0840087F0E40087F0804087FE800003E8802883EF820883EF80000 +D1C8:000000087F0840087F0E40087F0804087FE800001F0801081F0810141F620000 +D1C9:000000087F0840087F0E40087F0804087FE800003EF802803EF820803EF80000 +D1CA:000000087F0840087F0E40087F0804087FE800003EFC02483E4820483EFC0000 +D1CB:000000087F0840087F0E40087F0804087FE800001F08017F1F1C10221F1C0000 +D1CC:000000087F0840087F0E40087F0804087FE8000003F802080208020803F80000 +D1CD:000000087F0840087F0E40087F0804087FE800000208020803F8020803F80000 +D1CE:000000087F0840087F0E40087F0804087FE80000110811081F0811141F620000 +D1CF:000000087F0840087F0E40087F0804087FE80000001000100010006801840000 +D1D0:000000087F0840087F0E40087F0804087FE800000048004800A8011406620000 +D1D1:000000087F0840087F0E40087F0804087FE80000000003F00408040803F00000 +D1D2:000000087F0840087F0E40087F0804087FE8000003F80020002000D003080000 +D1D3:000000087F0840087F0E40087F0804087FE80000004003F8004000A003180000 +D1D4:000000087F0840087F0E40087F0804087FE8000003F8000803F8000800080000 +D1D5:000000087F0840087F0E40087F0804087FE8000003F8020003F8020003F80000 +D1D6:000000087F0840087F0E40087F0804087FE8000000000FF8022002200FF80000 +D1D7:000000087F0840087F0E40087F0804087FE8000000800FF803E0041003E00000 +D1D8:000000123FD2201220123FD22012201E3FD20012041204127FD2001200120000 +D1D9:000000287F2840287F3840287F2804287FA8000007F800080008000800080000 +D1DA:000000287F2840287F3840287F2804287FA8000000003EF80208020802080000 +D1DB:000000287F2840287F3840287F2804287FA8000000001F080108011401620000 +D1DC:000000287F2840287F3840287F2804287FA8000008000800080008000FF80000 +D1DD:000000287F2840287F3840287F2804287FA80000000010F8101010301ECC0000 +D1DE:000000287F2840287F3840287F2804287FA800000808087F081C08220F9C0000 +D1DF:000000287F2840287F3840287F2804287FA8000003F802000200020003F80000 +D1E0:000000287F2840287F3840287F2804287FA8000007F8000807F8040007F80000 +D1E1:000000287F2840287F3840287F2804287FA800003EF802083E0820083E080000 +D1E2:000000287F2840287F3840287F2804287FA800003EF802883E8820883EF80000 +D1E3:000000287F2840287F3840287F2804287FA800003E8802883EF820883EF80000 +D1E4:000000287F2840287F3840287F2804287FA800001F0801081F0810141F620000 +D1E5:000000287F2840287F3840287F2804287FA800003EF802803EF820803EF80000 +D1E6:000000287F2840287F3840287F2804287FA800003EFC02483E4820483EFC0000 +D1E7:000000287F2840287F3840287F2804287FA800001F08017F1F1C10221F1C0000 +D1E8:000000287F2840287F3840287F2804287FA8000003F802080208020803F80000 +D1E9:000000287F2840287F3840287F2804287FA800000208020803F8020803F80000 +D1EA:000000287F2840287F3840287F2804287FA80000110811081F0811141F620000 +D1EB:000000287F2840287F3840287F2804287FA80000001000100010006801840000 +D1EC:000000287F2840287F3840287F2804287FA800000048004800A8011406620000 +D1ED:000000287F2840287F3840287F2804287FA80000000003F00408040803F00000 +D1EE:000000287F2840287F3840287F2804287FA8000003F80020002000D003080000 +D1EF:000000287F2840287F3840287F2804287FA80000004003F8004000A003180000 +D1F0:000000287F2840287F3840287F2804287FA8000003F8000803F8000800080000 +D1F1:000000287F2840287F3840287F2804287FA8000003F8020003F8020003F80000 +D1F2:000000287F2840287F3840287F2804287FA8000000000FF8022002200FF80000 +D1F3:000000287F2840287F3840287F2804287FA8000000800FF803E0041003E00000 +D1F4:000000083FC8200820083FC8200820083FC80008040804087FE8000800080000 +D1F5:000000087F0840087F0840087F0804087FE8000007F800080008000800080000 +D1F6:000000087F0840087F0840087F0804087FE8000000003EF80208020802080000 +D1F7:000000087F0840087F0840087F0804087FE8000000001F080108011401620000 +D1F8:000000087F0840087F0840087F0804087FE8000008000800080008000FF80000 +D1F9:000000087F0840087F0840087F0804087FE80000000010F8101010301ECC0000 +D1FA:000000087F0840087F0840087F0804087FE800000808087F081C08220F9C0000 +D1FB:000000087F0840087F0840087F0804087FE8000003F802000200020003F80000 +D1FC:000000087F0840087F0840087F0804087FE8000007F8000807F8040007F80000 +D1FD:000000087F0840087F0840087F0804087FE800003EF802083E0820083E080000 +D1FE:000000087F0840087F0840087F0804087FE800003EF802883E8820883EF80000 +D1FF:000000087F0840087F0840087F0804087FE800003E8802883EF820883EF80000 +D200:000000087F0840087F0840087F0804087FE800001F0801081F0810141F620000 +D201:000000087F0840087F0840087F0804087FE800003EF802803EF820803EF80000 +D202:000000087F0840087F0840087F0804087FE800003EFC02483E4820483EFC0000 +D203:000000087F0840087F0840087F0804087FE800001F08017F1F1C10221F1C0000 +D204:000000087F0840087F0840087F0804087FE8000003F802080208020803F80000 +D205:000000087F0840087F0840087F0804087FE800000208020803F8020803F80000 +D206:000000087F0840087F0840087F0804087FE80000110811081F0811141F620000 +D207:000000087F0840087F0840087F0804087FE80000001000100010006801840000 +D208:000000087F0840087F0840087F0804087FE800000048004800A8011406620000 +D209:000000087F0840087F0840087F0804087FE80000000003F00408040803F00000 +D20A:000000087F0840087F0840087F0804087FE8000003F80020002000D003080000 +D20B:000000087F0840087F0840087F0804087FE80000004003F8004000A003180000 +D20C:000000087F0840087F0840087F0804087FE8000003F8000803F8000800080000 +D20D:000000087F0840087F0840087F0804087FE8000003F8020003F8020003F80000 +D20E:000000087F0840087F0840087F0804087FE8000000000FF8022002200FF80000 +D20F:000000087F0840087F0840087F0804087FE8000000800FF803E0041003E00000 +D210:00003FF8200020003FF8200020003FF8000004400440044004407FFC00000000 +D211:00001FF010001FF010001FF0044004407FFC00001FF000100010001000100000 +D212:00001FF010001FF010001FF0044004407FFC000000003EF80208020802080000 +D213:00001FF010001FF010001FF0044004407FFC000000001E100210022802C40000 +D214:00001FF010001FF010001FF0044004407FFC000000001000100010001FF00000 +D215:00001FF010001FF010001FF0044004407FFC0000000020F8201020303ECC0000 +D216:00001FF010001FF010001FF0044004407FFC0000202021FC207020883E700000 +D217:00001FF010001FF010001FF0044004407FFC00001FF01000100010001FF00000 +D218:00001FF010001FF010001FF0044004407FFC00001FF000101FF010001FF00000 +D219:00001FF010001FF010001FF0044004407FFC00003EF802083E0820083E080000 +D21A:00001FF010001FF010001FF0044004407FFC00003EF802883E8820883EF80000 +D21B:00001FF010001FF010001FF0044004407FFC00003E8802883EF820883EF80000 +D21C:00001FF010001FF010001FF0044004407FFC00003E1002103E1020283EC40000 +D21D:00001FF010001FF010001FF0044004407FFC00003EF802803EF820803EF80000 +D21E:00001FF010001FF010001FF0044004407FFC00003EFC02483E4820483EFC0000 +D21F:00001FF010001FF010001FF0044004407FFC00003E2003FC3E7020883E700000 +D220:00001FF010001FF010001FF0044004407FFC00001FF01010101010101FF00000 +D221:00001FF010001FF010001FF0044004407FFC0000101010101FF010101FF00000 +D222:00001FF010001FF010001FF0044004407FFC0000222022203E2022503E880000 +D223:00001FF010001FF010001FF0044004407FFC000000000100010002800C400000 +D224:00001FF010001FF010001FF0044004407FFC00000000024002400DA033100000 +D225:00001FF010001FF010001FF0044004407FFC0000000007C00820082007C00000 +D226:00001FF010001FF010001FF0044004407FFC0000000007E00080014006200000 +D227:00001FF010001FF010001FF0044004407FFC0000008007E00080014006200000 +D228:00001FF010001FF010001FF0044004407FFC00001FF000101FF0001000100000 +D229:00001FF010001FF010001FF0044004407FFC00001FF010001FF010001FF00000 +D22A:00001FF010001FF010001FF0044004407FFC000000001FF0044004401FF00000 +D22B:00001FF010001FF010001FF0044004407FFC000001001FF007C0082007C00000 +D22C:000000003FF8200020003FF8200020003FF800003FF801000100010001000000 +D22D:00001FF010001FF010001FF000007FFC010001001FF000100010001000100000 +D22E:00001FF010001FF010001FF000007FFC0100010000003EF80208020802080000 +D22F:00001FF010001FF010001FF000007FFC0100010000001E100210022802C40000 +D230:00001FF010001FF010001FF0000000007FFC010001001100100010001FF00000 +D231:00001FF010001FF010001FF000007FFC01000100000020F8201020303ECC0000 +D232:00001FF010001FF010001FF000007FFC01000100202021FC207020883E700000 +D233:00001FF010001FF010001FF000007FFC010001001FF01000100010001FF00000 +D234:00001FF010001FF010001FF000007FFC010001001FF000101FF010001FF00000 +D235:00001FF010001FF010001FF000007FFC010001003EF802083E0820083E080000 +D236:00001FF010001FF010001FF000007FFC010001003EF802883E8820883EF80000 +D237:00001FF010001FF010001FF000007FFC010001003E8802883EF820883EF80000 +D238:00001FF010001FF010001FF000007FFC010001003E1002103E1020283EC40000 +D239:00001FF010001FF010001FF000007FFC010001003EF802803EF820803EF80000 +D23A:00001FF010001FF010001FF000007FFC010001003EFC02483E4820483EFC0000 +D23B:00001FF010001FF010001FF000007FFC010001003E2003FC3E7020883E700000 +D23C:00001FF010001FF010001FF000007FFC010001001FF01010101010101FF00000 +D23D:00001FF010001FF010001FF000007FFC01000100101010101FF010101FF00000 +D23E:00001FF010001FF010001FF000007FFC01000100222022203E2022503E880000 +D23F:00001FF010001FF010001FF000007FFC0100010000000100010002800C400000 +D240:00001FF010001FF010001FF000007FFC010001000000024002400DA033100000 +D241:00001FF010001FF010001FF000007FFC01000100000007C00820082007C00000 +D242:00001FF010001FF010001FF000007FFC01000100000007E00080014006200000 +D243:00001FF010001FF010001FF000007FFC01000100008007E00080014006200000 +D244:00001FF010001FF010001FF000007FFC010001001FF000101FF0001000100000 +D245:00001FF010001FF010001FF000007FFC010001001FF010001FF010001FF00000 +D246:00001FF010001FF010001FF000007FFC0100010000001FF0044004401FF00000 +D247:00001FF010001FF010001FF000007FFC0100010001001FF007C0082007C00000 +D248:000000083FC8200820083FC8200820083FC800087FE8040804F8040804080000 +D249:7F8840087F8840087F8800087FE8027802080000000007F80008000800080000 +D24A:7F8840087F8840087F8800087FE802780208000000003EF80208020802080000 +D24B:7F8840087F8840087F8800087FE802780208000000001F080108011401620000 +D24C:7F8840087F8840087F88000800087FE80278020802081000100010001FF80000 +D24D:7F8840087F8840087F8800087FE8027802080000000020F8201020303ECC0000 +D24E:7F8840087F8840087F8800087FE8027802080000202021FC207020883E700000 +D24F:7F8840087F8840087F8800087FE802780208000003F802000200020003F80000 +D250:7F8840087F8840087F8800087FE802780208000007F8000807F8040007F80000 +D251:7F8840087F8840087F8800087FE80278020800003EF802083E0820083E080000 +D252:7F8840087F8840087F8800087FE80278020800003EF802883E8820883EF80000 +D253:7F8840087F8840087F8800087FE80278020800003E8802883EF820883EF80000 +D254:7F8840087F8840087F8800087FE80278020800000F8800880F8808140FA20000 +D255:7F8840087F8840087F8800087FE80278020800003EF802803EF820803EF80000 +D256:7F8840087F8840087F8800087FE80278020800003EFC02483E4820483EFC0000 +D257:7F8840087F8840087F8800087FE80278020800003E1002FE3E3820443E380000 +D258:7F8840087F8840087F8800087FE802780208000003F802080208020803F80000 +D259:7F8840087F8840087F8800087FE80278020800000208020803F8020803F80000 +D25A:7F8840087F8840087F8800087FE8027802080000210821083F0821143F620000 +D25B:7F8840087F8840087F8800087FE8027802080000001000100010006801840000 +D25C:7F8840087F8840087F8800087FE80278020800000048004800A8011406620000 +D25D:7F8840087F8840087F8800087FE8027802080000000003F00408040803F00000 +D25E:7F8840087F8840087F8800087FE802780208000003F80020002000D003080000 +D25F:7F8840087F8840087F8800087FE8027802080000004003F8004000A003180000 +D260:7F8840087F8840087F8800087FE802780208000003F8000803F8000800080000 +D261:7F8840087F8840087F8800087FE802780208000003F8020003F8020003F80000 +D262:7F8840087F8840087F8800087FE802780208000000000FF8022002200FF80000 +D263:7F8840087F8840087F8800087FE802780208000000800FF803E0041003E00000 +D264:0000000A3FCA200A200A3FCA200A200A3FCA000A7FEA040A047A040A040A0000 +D265:7FA840287FA840287FA800287FA805E804280000000007F80008000800080000 +D266:7FA840287FA840287FA800287FA805E80428000000003EF80208020802080000 +D267:7FA840287FA840287FA800287FA805E80428000000001F080108011401620000 +D268:7FA840287FA840287FA8002800287FA8042805E804281428100010001FF80000 +D269:7FA840287FA840287FA800287FA805E804280000000020F8201020303ECC0000 +D26A:7FA840287FA840287FA800287FA805E804280000202021FC207020883E700000 +D26B:7FA840287FA840287FA800287FA805E80428000003F802000200020003F80000 +D26C:7FA840287FA840287FA800287FA805E80428000007F8000807F8040007F80000 +D26D:7FA840287FA840287FA800287FA805E8042800003EF802083E0820083E080000 +D26E:7FA840287FA840287FA800287FA805E8042800003EF802883E8820883EF80000 +D26F:7FA840287FA840287FA800287FA805E8042800003E8802883EF820883EF80000 +D270:7FA840287FA840287FA800287FA805E8042800000F8800880F8808140FA20000 +D271:7FA840287FA840287FA800287FA805E8042800003EF802803EF820803EF80000 +D272:7FA840287FA840287FA800287FA805E8042800003EFC02483E4820483EFC0000 +D273:7FA840287FA840287FA800287FA805E8042800003E1002FE3E3820443E380000 +D274:7FA840287FA840287FA800287FA805E80428000003F802080208020803F80000 +D275:7FA840287FA840287FA800287FA805E8042800000208020803F8020803F80000 +D276:7FA840287FA840287FA800287FA805E804280000210821083F0821143F620000 +D277:7FA840287FA840287FA800287FA805E804280000001000100010006801840000 +D278:7FA840287FA840287FA800287FA805E8042800000048004800A8011406620000 +D279:7FA840287FA840287FA800287FA805E804280000000003F00408040803F00000 +D27A:7FA840287FA840287FA800287FA805E80428000003F80020002000D003080000 +D27B:7FA840287FA840287FA800287FA805E804280000004003F8004000A003180000 +D27C:7FA840287FA840287FA800287FA805E80428000003F8000803F8000800080000 +D27D:7FA840287FA840287FA800287FA805E80428000003F8020003F8020003F80000 +D27E:7FA840287FA840287FA800287FA805E80428000000000FF8022002200FF80000 +D27F:7FA840287FA840287FA800287FA805E80428000000800FF803E0041003E00000 +D280:000000083FC8200820083FC8200820083FC800087FE804080408040804080000 +D281:7F8840087F8840087F8800087FE8020802000000000007F80008000800080000 +D282:7F8840087F8840087F8800087FE802080200000000003EF80208020802080000 +D283:7F8840087F8840087F8800087FE802080200000000001F080108011401620000 +D284:7F8840087F8840087F88000800087FE80208020802081008100010001FF80000 +D285:7F8840087F8840087F8800087FE8020802000000000020F8201020303ECC0000 +D286:7F8840087F8840087F8800087FE8020802000000202021FC207020883E700000 +D287:7F8840087F8840087F8800087FE802080200000003F802000200020003F80000 +D288:7F8840087F8840087F8800087FE802080200000007F8000807F8040007F80000 +D289:7F8840087F8840087F8800087FE80208020000003EF802083E0820083E080000 +D28A:7F8840087F8840087F8800087FE80208020000003EF802883E8820883EF80000 +D28B:7F8840087F8840087F8800087FE80208020000003E8802883EF820883EF80000 +D28C:7F8840087F8840087F8800087FE80208020000000F8800880F8808140FA20000 +D28D:7F8840087F8840087F8800087FE80208020000003EF802803EF820803EF80000 +D28E:7F8840087F8840087F8800087FE80208020000003EFC02483E4820483EFC0000 +D28F:7F8840087F8840087F8800087FE80208020000003E1002FE3E3820443E380000 +D290:7F8840087F8840087F8800087FE802080200000003F802080208020803F80000 +D291:7F8840087F8840087F8800087FE80208020000000208020803F8020803F80000 +D292:7F8840087F8840087F8800087FE8020802000000210821083F0821143F620000 +D293:7F8840087F8840087F8800087FE8020802000000001000100010006801840000 +D294:7F8840087F8840087F8800087FE80208020000000048004800A8011406620000 +D295:7F8840087F8840087F8800087FE8020802000000000003F00408040803F00000 +D296:7F8840087F8840087F8800087FE802080200000003F80020002000D003080000 +D297:7F8840087F8840087F8800087FE8020802000000004003F8004000A003180000 +D298:7F8840087F8840087F8800087FE802080200000003F8000803F8000800080000 +D299:7F8840087F8840087F8800087FE802080200000003F8020003F8020003F80000 +D29A:7F8840087F8840087F8800087FE802080200000000000FF8022002200FF80000 +D29B:7F8840087F8840087F8800087FE802080200000000800FF803E0041003E00000 +D29C:000000003FF8200020003FF8200020003FF800007FFC04400440044004400000 +D29D:00001FF010001FF010001FF000007FFC044004401FF000100010001000100000 +D29E:00001FF010001FF010001FF000007FFC0440044000003EF80208020802080000 +D29F:00001FF010001FF010001FF000007FFC0440044000001E100210022802C40000 +D2A0:00001FF010001FF010001FF0000000007FFC044004401440100010001FF00000 +D2A1:00001FF010001FF010001FF000007FFC04400440000020F8201020303ECC0000 +D2A2:00001FF010001FF010001FF000007FFC04400440202021FC207020883E700000 +D2A3:00001FF010001FF010001FF000007FFC044004401FF01000100010001FF00000 +D2A4:00001FF010001FF010001FF000007FFC044004401FF000101FF010001FF00000 +D2A5:00001FF010001FF010001FF000007FFC044004403EF802083E0820083E080000 +D2A6:00001FF010001FF010001FF000007FFC044004403EF802883E8820883EF80000 +D2A7:00001FF010001FF010001FF000007FFC044004403E8802883EF820883EF80000 +D2A8:00001FF010001FF010001FF000007FFC044004403E1002103E1020283EC40000 +D2A9:00001FF010001FF010001FF000007FFC044004403EF802803EF820803EF80000 +D2AA:00001FF010001FF010001FF000007FFC044004403EFC02483E4820483EFC0000 +D2AB:00001FF010001FF010001FF000007FFC044004403E2003FC3E7020883E700000 +D2AC:00001FF010001FF010001FF000007FFC044004401FF01010101010101FF00000 +D2AD:00001FF010001FF010001FF000007FFC04400440101010101FF010101FF00000 +D2AE:00001FF010001FF010001FF000007FFC04400440222022203E2022503E880000 +D2AF:00001FF010001FF010001FF000007FFC0440044000000100010002800C400000 +D2B0:00001FF010001FF010001FF000007FFC044004400000024002400DA033100000 +D2B1:00001FF010001FF010001FF000007FFC04400440000007C00820082007C00000 +D2B2:00001FF010001FF010001FF000007FFC04400440000007E00080014006200000 +D2B3:00001FF010001FF010001FF000007FFC04400440008007E00080014006200000 +D2B4:00001FF010001FF010001FF000007FFC044004401FF000101FF0001000100000 +D2B5:00001FF010001FF010001FF000007FFC044004401FF010001FF010001FF00000 +D2B6:00001FF010001FF010001FF000007FFC0440044000001FF0044004401FF00000 +D2B7:00001FF010001FF010001FF000007FFC0440044001001FF007C0082007C00000 +D2B8:00003FF8200020003FF8200020003FF80000000000007FFC0000000000000000 +D2B9:00001FF010001FF010001FF0000000007FFC00001FF000100010001000100000 +D2BA:00001FF010001FF010001FF0000000007FFC000000003EF80208020802080000 +D2BB:00001FF010001FF010001FF0000000007FFC000000001E100210022802C40000 +D2BC:00001FF010001FF010001FF0000000007FFC000000001000100010001FF00000 +D2BD:00001FF010001FF010001FF0000000007FFC0000000020F8201020303ECC0000 +D2BE:00001FF010001FF010001FF0000000007FFC0000202021FC207020883E700000 +D2BF:00001FF010001FF010001FF0000000007FFC00001FF01000100010001FF00000 +D2C0:00001FF010001FF010001FF0000000007FFC00001FF000101FF010001FF00000 +D2C1:00001FF010001FF010001FF0000000007FFC00003EF802083E0820083E080000 +D2C2:00001FF010001FF010001FF0000000007FFC00003EF802883E8820883EF80000 +D2C3:00001FF010001FF010001FF0000000007FFC00003E8802883EF820883EF80000 +D2C4:00001FF010001FF010001FF0000000007FFC00003E1002103E1020283EC40000 +D2C5:00001FF010001FF010001FF0000000007FFC00003EF802803EF820803EF80000 +D2C6:00001FF010001FF010001FF0000000007FFC00003EFC02483E4820483EFC0000 +D2C7:00001FF010001FF010001FF0000000007FFC00003E2003FC3E7020883E700000 +D2C8:00001FF010001FF010001FF0000000007FFC00001FF01010101010101FF00000 +D2C9:00001FF010001FF010001FF0000000007FFC0000101010101FF010101FF00000 +D2CA:00001FF010001FF010001FF0000000007FFC0000222022203E2022503E880000 +D2CB:00001FF010001FF010001FF0000000007FFC000000000100010002800C400000 +D2CC:00001FF010001FF010001FF0000000007FFC00000000024002400DA033100000 +D2CD:00001FF010001FF010001FF0000000007FFC0000000007C00820082007C00000 +D2CE:00001FF010001FF010001FF0000000007FFC0000000007E00080014006200000 +D2CF:00001FF010001FF010001FF0000000007FFC0000008007E00080014006200000 +D2D0:00001FF010001FF010001FF0000000007FFC00001FF000101FF0001000100000 +D2D1:00001FF010001FF010001FF0000000007FFC00001FF010001FF010001FF00000 +D2D2:00001FF010001FF010001FF0000000007FFC000000001FF0044004401FF00000 +D2D3:00001FF010001FF010001FF0000000007FFC000001001FF007C0082007C00000 +D2D4:000000083FC8200820083FC8200820083FC8000800087FE80008000800080000 +D2D5:000000087F0840087F0840087F0800087FE8000007F800080008000800080000 +D2D6:000000087F0840087F0840087F0800087FE8000000003EF80208020802080000 +D2D7:000000087F0840087F0840087F0800087FE8000000001F080108011401620000 +D2D8:000000087F0840087F0840087F0800087FE8000008000800080008000FF80000 +D2D9:000000087F0840087F0840087F0800087FE80000000010F8101010301ECC0000 +D2DA:000000087F0840087F0840087F0800087FE800000808087F081C08220F9C0000 +D2DB:000000087F0840087F0840087F0800087FE8000003F802000200020003F80000 +D2DC:000000087F0840087F0840087F0800087FE8000007F8000807F8040007F80000 +D2DD:000000087F0840087F0840087F0800087FE800003EF802083E0820083E080000 +D2DE:000000087F0840087F0840087F0800087FE800003EF802883E8820883EF80000 +D2DF:000000087F0840087F0840087F0800087FE800003E8802883EF820883EF80000 +D2E0:000000087F0840087F0840087F0800087FE800001F0801081F0810141F620000 +D2E1:000000087F0840087F0840087F0800087FE800003EF802803EF820803EF80000 +D2E2:000000087F0840087F0840087F0800087FE800003EFC02483E4820483EFC0000 +D2E3:000000087F0840087F0840087F0800087FE800001F08017F1F1C10221F1C0000 +D2E4:000000087F0840087F0840087F0800087FE8000003F802080208020803F80000 +D2E5:000000087F0840087F0840087F0800087FE800000208020803F8020803F80000 +D2E6:000000087F0840087F0840087F0800087FE80000110811081F0811141F620000 +D2E7:000000087F0840087F0840087F0800087FE80000001000100010006801840000 +D2E8:000000087F0840087F0840087F0800087FE800000048004800A8011406620000 +D2E9:000000087F0840087F0840087F0800087FE80000000003F00408040803F00000 +D2EA:000000087F0840087F0840087F0800087FE8000003F80020002000D003080000 +D2EB:000000087F0840087F0840087F0800087FE80000004003F8004000A003180000 +D2EC:000000087F0840087F0840087F0800087FE8000003F8000803F8000800080000 +D2ED:000000087F0840087F0840087F0800087FE8000003F8020003F8020003F80000 +D2EE:000000087F0840087F0840087F0800087FE8000000000FF8022002200FF80000 +D2EF:000000087F0840087F0840087F0800087FE8000000800FF803E0041003E00000 +D2F0:00000000000800083F88200820083F88200820083F8800080008000800080000 +D2F1:0000000800087E0840087E0840087E0800080000000007F80008000800080000 +D2F2:0000000800087E0840087E0840087E080008000000003EF80208020802080000 +D2F3:0000000800087E0840087E0840087E080008000000001F080108011401620000 +D2F4:0000000800087E0840087E0840087E080008000800001000100010001FF80000 +D2F5:0000000800087E0840087E0840087E0800080000000020F8201020303ECC0000 +D2F6:0000000800087E0840087E0840087E0800080000202021FC207020883E700000 +D2F7:0000000800087E0840087E0840087E080008000003F802000200020003F80000 +D2F8:0000000800087E0840087E0840087E080008000007F8000807F8040007F80000 +D2F9:0000000800087E0840087E0840087E08000800003EF802083E0820083E080000 +D2FA:0000000800087E0840087E0840087E08000800003EF802883E8820883EF80000 +D2FB:0000000800087E0840087E0840087E08000800003E8802883EF820883EF80000 +D2FC:0000000800087E0840087E0840087E08000800000F8800880F8808140FA20000 +D2FD:0000000800087E0840087E0840087E08000800003EF802803EF820803EF80000 +D2FE:0000000800087E0840087E0840087E08000800003EFC02483E4820483EFC0000 +D2FF:0000000800087E0840087E0840087E08000800003E1002FE3E3820443E380000 +D300:0000000800087E0840087E0840087E080008000003F802080208020803F80000 +D301:0000000800087E0840087E0840087E08000800000208020803F8020803F80000 +D302:0000000800087E0840087E0840087E0800080000210821083F0821143F620000 +D303:0000000800087E0840087E0840087E0800080000001000100010006801840000 +D304:0000000800087E0840087E0840087E08000800000048004800A8011406620000 +D305:0000000800087E0840087E0840087E0800080000000003F00408040803F00000 +D306:0000000800087E0840087E0840087E080008000003F80020002000D003080000 +D307:0000000800087E0840087E0840087E0800080000004003F8004000A003180000 +D308:0000000800087E0840087E0840087E080008000003F8000803F8000800080000 +D309:0000000800087E0840087E0840087E080008000003F8020003F8020003F80000 +D30A:0000000800087E0840087E0840087E080008000000000FF8022002200FF80000 +D30B:0000000800087E0840087E0840087E080008000000800FF803E0041003E00000 +D30C:00000000001000107FD011101110111E111011107FD000100010001000100000 +D30D:0000000800087F881208120E12087F880008000007F800080008000800080000 +D30E:0000000800087F881208120E12087F880008000000003EF80208020802080000 +D30F:0000000800087F881208120E12087F880008000000001F080108011401620000 +D310:0000000800087F881208120E12087F880008000808000800080008000FF80000 +D311:0000000800087F881208120E12087F8800080000000010F8101010301ECC0000 +D312:0000000800087F881208120E12087F88000800000808087F081C08220F9C0000 +D313:0000000800087F881208120E12087F880008000003F802000200020003F80000 +D314:0000000800087F881208120E12087F880008000007F8000807F8040007F80000 +D315:0000000800087F881208120E12087F88000800003EF802083E0820083E080000 +D316:0000000800087F881208120E12087F88000800003EF802883E8820883EF80000 +D317:0000000800087F881208120E12087F88000800003E8802883EF820883EF80000 +D318:0000000800087F881208120E12087F88000800001F0801081F0810141F620000 +D319:0000000800087F881208120E12087F88000800003EF802803EF820803EF80000 +D31A:0000000800087F881208120E12087F88000800003EFC02483E4820483EFC0000 +D31B:0000000800087F881208120E12087F88000800001F08017F1F1C10221F1C0000 +D31C:0000000800087F881208120E12087F880008000003F802080208020803F80000 +D31D:0000000800087F881208120E12087F88000800000208020803F8020803F80000 +D31E:0000000800087F881208120E12087F8800080000110811081F0811141F620000 +D31F:0000000800087F881208120E12087F8800080000001000100010006801840000 +D320:0000000800087F881208120E12087F88000800000048004800A8011406620000 +D321:0000000800087F881208120E12087F8800080000000003F00408040803F00000 +D322:0000000800087F881208120E12087F880008000003F80020002000D003080000 +D323:0000000800087F881208120E12087F8800080000004003F8004000A003180000 +D324:0000000800087F881208120E12087F880008000003F8000803F8000800080000 +D325:0000000800087F881208120E12087F880008000003F8020003F8020003F80000 +D326:0000000800087F881208120E12087F880008000000000FF8022002200FF80000 +D327:0000000800087F881208120E12087F880008000000800FF803E0041003E00000 +D328:00000000001200127FD211121112111E111211127FD200120012001200120000 +D329:0000002800287FA81228123812287FA80028000007F800080008000800080000 +D32A:0000002800287FA81228123812287FA80028000000003EF80208020802080000 +D32B:0000002800287FA81228123812287FA80028000000003E100210022802C40000 +D32C:0000002800287FA81228123812287FA80028002808000800080008000FF80000 +D32D:0000002800287FA81228123812287FA800280000000020F8201020303ECC0000 +D32E:0000002800287FA81228123812287FA800280000202021FC207020883E700000 +D32F:0000002800287FA81228123812287FA80028000003F802000200020003F80000 +D330:0000002800287FA81228123812287FA80028000007F8000807F8040007F80000 +D331:0000002800287FA81228123812287FA8002800003EF802083E0820083E080000 +D332:0000002800287FA81228123812287FA8002800003EF802883E8820883EF80000 +D333:0000002800287FA81228123812287FA8002800003E8802883EF820883EF80000 +D334:0000002800287FA81228123812287FA8002800001F0801081F0810141F620000 +D335:0000002800287FA81228123812287FA8002800003EF802803EF820803EF80000 +D336:0000002800287FA81228123812287FA8002800003EFC02483E4820483EFC0000 +D337:0000002800287FA81228123812287FA8002800003E1002FE3E3820443E380000 +D338:0000002800287FA81228123812287FA80028000003F802080208020803F80000 +D339:0000002800287FA81228123812287FA8002800000208020803F8020803F80000 +D33A:0000002800287FA81228123812287FA800280000110811081F0811141F620000 +D33B:0000002800287FA81228123812287FA800280000000800080008003400C20000 +D33C:0000002800287FA81228123812287FA8002800000048004800A8011406620000 +D33D:0000002800287FA81228123812287FA800280000000001F00208020801F00000 +D33E:0000002800287FA81228123812287FA80028000003F80020002000D003080000 +D33F:0000002800287FA81228123812287FA800280000004003F8004000A003180000 +D340:0000002800287FA81228123812287FA80028000003F8000803F8000800080000 +D341:0000002800287FA81228123812287FA80028000003F8020003F8020003F80000 +D342:0000002800287FA81228123812287FA80028000000000FF8022002200FF80000 +D343:0000002800287FA81228123812287FA80028000000800FF803E0041003E00000 +D344:00000000001000107FD01110111E11101110111E7FD000100010001000100000 +D345:0000000800087F88120E1208120E7F880008000007F800080008000800080000 +D346:0000000800087F88120E1208120E7F880008000000003EF80208020802080000 +D347:0000000800087F88120E1208120E7F880008000000001F080108011401620000 +D348:0000000800087F88120E1208120E7F880008000008000800080008000FF80000 +D349:0000000800087F88120E1208120E7F8800080000000010F8101010301ECC0000 +D34A:0000000800087F88120E1208120E7F88000800000808087F081C08220F9C0000 +D34B:0000000800087F88120E1208120E7F880008000003F802000200020003F80000 +D34C:0000000800087F88120E1208120E7F880008000007F8000807F8040007F80000 +D34D:0000000800087F88120E1208120E7F88000800003EF802083E0820083E080000 +D34E:0000000800087F88120E1208120E7F88000800003EF802883E8820883EF80000 +D34F:0000000800087F88120E1208120E7F88000800003E8802883EF820883EF80000 +D350:0000000800087F88120E1208120E7F88000800001F0801081F0810141F620000 +D351:0000000800087F88120E1208120E7F88000800003EF802803EF820803EF80000 +D352:0000000800087F88120E1208120E7F88000800003EFC02483E4820483EFC0000 +D353:0000000800087F88120E1208120E7F88000800001F08017F1F1C10221F1C0000 +D354:0000000800087F88120E1208120E7F880008000003F802080208020803F80000 +D355:0000000800087F88120E1208120E7F88000800000208020803F8020803F80000 +D356:0000000800087F88120E1208120E7F8800080000110811081F0811141F620000 +D357:0000000800087F88120E1208120E7F8800080000001000100010006801840000 +D358:0000000800087F88120E1208120E7F88000800000048004800A8011406620000 +D359:0000000800087F88120E1208120E7F8800080000000003F00408040803F00000 +D35A:0000000800087F88120E1208120E7F880008000003F80020002000D003080000 +D35B:0000000800087F88120E1208120E7F8800080000004003F8004000A003180000 +D35C:0000000800087F88120E1208120E7F880008000003F8000803F8000800080000 +D35D:0000000800087F88120E1208120E7F880008000003F8020003F8020003F80000 +D35E:0000000800087F88120E1208120E7F880008000000000FF8022002200FF80000 +D35F:0000000800087F88120E1208120E7F880008000000800FF803E0041003E00000 +D360:00000000001200127FD21112111E11121112111E7FD200120012001200120000 +D361:0000002800287FA81238122812387FA80028000007F800080008000800080000 +D362:0000002800287FA81238122812387FA80028000000003EF80208020802080000 +D363:0000002800287FA81238122812387FA80028000000003E100210022802C40000 +D364:0000002800287FA81238122812387FA80028002808000800080008000FF80000 +D365:0000002800287FA81238122812387FA800280000000020F8201020303ECC0000 +D366:0000002800287FA81238122812387FA800280000202021FC207020883E700000 +D367:0000002800287FA81238122812387FA80028000003F802000200020003F80000 +D368:0000002800287FA81238122812387FA80028000007F8000807F8040007F80000 +D369:0000002800287FA81238122812387FA8002800003EF802083E0820083E080000 +D36A:0000002800287FA81238122812387FA8002800003EF802883E8820883EF80000 +D36B:0000002800287FA81238122812387FA8002800003E8802883EF820883EF80000 +D36C:0000002800287FA81238122812387FA8002800001F0801081F0810141F620000 +D36D:0000002800287FA81238122812387FA8002800003EF802803EF820803EF80000 +D36E:0000002800287FA81238122812387FA8002800003EFC02483E4820483EFC0000 +D36F:0000002800287FA81238122812387FA8002800003E1002FE3E3820443E380000 +D370:0000002800287FA81238122812387FA80028000003F802080208020803F80000 +D371:0000002800287FA81238122812387FA8002800000208020803F8020803F80000 +D372:0000002800287FA81238122812387FA800280000110811081F0811141F620000 +D373:0000002800287FA81238122812387FA800280000000800080008003400C20000 +D374:0000002800287FA81238122812387FA8002800000048004800A8011406620000 +D375:0000002800287FA81238122812387FA800280000000001F00208020801F00000 +D376:0000002800287FA81238122812387FA80028000003F80020002000D003080000 +D377:0000002800287FA81238122812387FA800280000004003F8004000A003180000 +D378:0000002800287FA81238122812387FA80028000003F8000803F8000800080000 +D379:0000002800287FA81238122812387FA80028000003F8020003F8020003F80000 +D37A:0000002800287FA81238122812387FA80028000000000FF8022002200FF80000 +D37B:0000002800287FA81238122812387FA80028000000800FF803E0041003E00000 +D37C:00000000000200027FC211021102111E110211027FC200020002000200020000 +D37D:0000000800087F881208123812087F8800080000000007F80008000800080000 +D37E:0000000800087F881208123812087F880008000000003EF80208020802080000 +D37F:0000000800087F881208123812087F880008000000001F080108011401620000 +D380:0000000800087F881208123812087F880008000000001000100010001FF80000 +D381:0000000800087F881208123812087F8800080000000020F8201020303ECC0000 +D382:0000000800087F881208123812087F8800080000202021FC207020883E700000 +D383:0000000800087F881208123812087F880008000003F802000200020003F80000 +D384:0000000800087F881208123812087F880008000007F8000807F8040007F80000 +D385:0000000800087F881208123812087F88000800003EF802083E0820083E080000 +D386:0000000800087F881208123812087F88000800003EF802883E8820883EF80000 +D387:0000000800087F881208123812087F88000800003E8802883EF820883EF80000 +D388:0000000800087F881208123812087F88000800000F8800880F8808140FA20000 +D389:0000000800087F881208123812087F88000800003EF802803EF820803EF80000 +D38A:0000000800087F881208123812087F88000800003EFC02483E4820483EFC0000 +D38B:0000000800087F881208123812087F88000800003E1002FE3E3820443E380000 +D38C:0000000800087F881208123812087F880008000003F802080208020803F80000 +D38D:0000000800087F881208123812087F88000800000208020803F8020803F80000 +D38E:0000000800087F881208123812087F8800080000210821083F0821143F620000 +D38F:0000000800087F881208123812087F8800080000001000100010006801840000 +D390:0000000800087F881208123812087F88000800000048004800A8011406620000 +D391:0000000800087F881208123812087F8800080000000003F00408040803F00000 +D392:0000000800087F881208123812087F880008000003F80020002000D003080000 +D393:0000000800087F881208123812087F8800080000004003F8004000A003180000 +D394:0000000800087F881208123812087F880008000003F8000803F8000800080000 +D395:0000000800087F881208123812087F880008000003F8020003F8020003F80000 +D396:0000000800087F881208123812087F880008000000000FF8022002200FF80000 +D397:0000000800087F881208123812087F880008000000800FF803E0041003E00000 +D398:00000000000A000A7FCA110A110A113A110A110A7FCA000A000A000A000A0000 +D399:0000002800287FA8122812E812287FA80028000007F800080008000800080000 +D39A:0000002800287FA8122812E812287FA80028000000003EF80208020802080000 +D39B:0000002800287FA8122812E812287FA80028000000003E100210022802C40000 +D39C:0000002800287FA8122812E812287FA80028000008000800080008000FF80000 +D39D:0000002800287FA8122812E812287FA800280000000020F8201020303ECC0000 +D39E:0000002800287FA8122812E812287FA800280000202021FC207020883E700000 +D39F:0000002800287FA8122812E812287FA80028000003F802000200020003F80000 +D3A0:0000002800287FA8122812E812287FA80028000007F8000807F8040007F80000 +D3A1:0000002800287FA8122812E812287FA8002800003EF802083E0820083E080000 +D3A2:0000002800287FA8122812E812287FA8002800003EF802883E8820883EF80000 +D3A3:0000002800287FA8122812E812287FA8002800003E8802883EF820883EF80000 +D3A4:0000002800287FA8122812E812287FA8002800001F0801081F0810141F620000 +D3A5:0000002800287FA8122812E812287FA8002800003EF802803EF820803EF80000 +D3A6:0000002800287FA8122812E812287FA8002800003EFC02483E4820483EFC0000 +D3A7:0000002800287FA8122812E812287FA8002800003E1002FE3E3820443E380000 +D3A8:0000002800287FA8122812E812287FA80028000003F802080208020803F80000 +D3A9:0000002800287FA8122812E812287FA8002800000208020803F8020803F80000 +D3AA:0000002800287FA8122812E812287FA800280000110811081F0811141F620000 +D3AB:0000002800287FA8122812E812287FA800280000000800080008003400C20000 +D3AC:0000002800287FA8122812E812287FA8002800000048004800A8011406620000 +D3AD:0000002800287FA8122812E812287FA800280000000001F00208020801F00000 +D3AE:0000002800287FA8122812E812287FA80028000003F80020002000D003080000 +D3AF:0000002800287FA8122812E812287FA800280000004003F8004000A003180000 +D3B0:0000002800287FA8122812E812287FA80028000003F8000803F8000800080000 +D3B1:0000002800287FA8122812E812287FA80028000003F8020003F8020003F80000 +D3B2:0000002800287FA8122812E812287FA80028000000000FF8022002200FF80000 +D3B3:0000002800287FA8122812E812287FA80028000000800FF803E0041003E00000 +D3B4:00000000000200027FC21102111E11021102111E7FC200020002000200020000 +D3B5:0000000800087F881238120812387F8800080000000007F80008000800080000 +D3B6:0000000800087F881238120812387F880008000000003EF80208020802080000 +D3B7:0000000800087F881238120812387F880008000000001F080108011401620000 +D3B8:0000000800087F881238120812387F880008000800001000100010001FF80000 +D3B9:0000000800087F881238120812387F8800080000000020F8201020303ECC0000 +D3BA:0000000800087F881238120812387F8800080000202021FC207020883E700000 +D3BB:0000000800087F881238120812387F880008000003F802000200020003F80000 +D3BC:0000000800087F881238120812387F880008000007F8000807F8040007F80000 +D3BD:0000000800087F881238120812387F88000800003EF802083E0820083E080000 +D3BE:0000000800087F881238120812387F88000800003EF802883E8820883EF80000 +D3BF:0000000800087F881238120812387F88000800003E8802883EF820883EF80000 +D3C0:0000000800087F881238120812387F88000800000F8800880F8808140FA20000 +D3C1:0000000800087F881238120812387F88000800003EF802803EF820803EF80000 +D3C2:0000000800087F881238120812387F88000800003EFC02483E4820483EFC0000 +D3C3:0000000800087F881238120812387F88000800003E1002FE3E3820443E380000 +D3C4:0000000800087F881238120812387F880008000003F802080208020803F80000 +D3C5:0000000800087F881238120812387F88000800000208020803F8020803F80000 +D3C6:0000000800087F881238120812387F8800080000210821083F0821143F620000 +D3C7:0000000800087F881238120812387F8800080000001000100010006801840000 +D3C8:0000000800087F881238120812387F88000800000048004800A8011406620000 +D3C9:0000000800087F881238120812387F8800080000000003F00408040803F00000 +D3CA:0000000800087F881238120812387F880008000003F80020002000D003080000 +D3CB:0000000800087F881238120812387F8800080000004003F8004000A003180000 +D3CC:0000000800087F881238120812387F880008000003F8000803F8000800080000 +D3CD:0000000800087F881238120812387F880008000003F8020003F8020003F80000 +D3CE:0000000800087F881238120812387F880008000000000FF8022002200FF80000 +D3CF:0000000800087F881238120812387F880008000000800FF803E0041003E00000 +D3D0:00000000000A000A7FCA110A113A110A110A113A7FCA000A000A000A000A0000 +D3D1:0000002800287FA812E8122812E87FA80028000007F800080008000800080000 +D3D2:0000002800287FA812E8122812E87FA80028000000003EF80208020802080000 +D3D3:0000002800287FA812E8122812E87FA80028000000003E100210022802C40000 +D3D4:0000002800287FA812E8122812E87FA80028002808000800080008000FF80000 +D3D5:0000002800287FA812E8122812E87FA800280000000020F8201020303ECC0000 +D3D6:0000002800287FA812E8122812E87FA800280000202021FC207020883E700000 +D3D7:0000002800287FA812E8122812E87FA80028000003F802000200020003F80000 +D3D8:0000002800287FA812E8122812E87FA80028000007F8000807F8040007F80000 +D3D9:0000002800287FA812E8122812E87FA8002800003EF802083E0820083E080000 +D3DA:0000002800287FA812E8122812E87FA8002800003EF802883E8820883EF80000 +D3DB:0000002800287FA812E8122812E87FA8002800003E8802883EF820883EF80000 +D3DC:0000002800287FA812E8122812E87FA8002800001F0801081F0810141F620000 +D3DD:0000002800287FA812E8122812E87FA8002800003EF802803EF820803EF80000 +D3DE:0000002800287FA812E8122812E87FA8002800003EFC02483E4820483EFC0000 +D3DF:0000002800287FA812E8122812E87FA8002800003E1002FE3E3820443E380000 +D3E0:0000002800287FA812E8122812E87FA80028000003F802080208020803F80000 +D3E1:0000002800287FA812E8122812E87FA8002800000208020803F8020803F80000 +D3E2:0000002800287FA812E8122812E87FA800280000110811081F0811141F620000 +D3E3:0000002800287FA812E8122812E87FA800280000000800080008003400C20000 +D3E4:0000002800287FA812E8122812E87FA8002800000048004800A8011406620000 +D3E5:0000002800287FA812E8122812E87FA800280000000001F00208020801F00000 +D3E6:0000002800287FA812E8122812E87FA80028000003F80020002000D003080000 +D3E7:0000002800287FA812E8122812E87FA800280000004003F8004000A003180000 +D3E8:0000002800287FA812E8122812E87FA80028000003F8000803F8000800080000 +D3E9:0000002800287FA812E8122812E87FA80028000003F8020003F8020003F80000 +D3EA:0000002800287FA812E8122812E87FA80028000000000FF8022002200FF80000 +D3EB:0000002800287FA812E8122812E87FA80028000000800FF803E0041003E00000 +D3EC:000000003FF808200820082008203FF8000000000100010001007FFC00000000 +D3ED:00001FF00440044004401FF0010001007FFC00001FF000100010001000100000 +D3EE:00001FF00440044004401FF0010001007FFC000000003EF80208020802080000 +D3EF:00001FF00440044004401FF0010001007FFC000000001E100210022802C40000 +D3F0:00001FF00440044004401FF0010001007FFC000000001000100010001FF00000 +D3F1:00001FF00440044004401FF0010001007FFC0000000020F8201020303ECC0000 +D3F2:00001FF00440044004401FF0010001007FFC0000202021FC207020883E700000 +D3F3:00001FF00440044004401FF0010001007FFC00001FF01000100010001FF00000 +D3F4:00001FF00440044004401FF0010001007FFC00001FF000101FF010001FF00000 +D3F5:00001FF00440044004401FF0010001007FFC00003EF802083E0820083E080000 +D3F6:00001FF00440044004401FF0010001007FFC00003EF802883E8820883EF80000 +D3F7:00001FF00440044004401FF0010001007FFC00003E8802883EF820883EF80000 +D3F8:00001FF00440044004401FF0010001007FFC00003E1002103E1020283EC40000 +D3F9:00001FF00440044004401FF0010001007FFC00003EF802803EF820803EF80000 +D3FA:00001FF00440044004401FF0010001007FFC00003EFC02483E4820483EFC0000 +D3FB:00001FF00440044004401FF0010001007FFC00003E2003FC3E7020883E700000 +D3FC:00001FF00440044004401FF0010001007FFC00001FF01010101010101FF00000 +D3FD:00001FF00440044004401FF0010001007FFC0000101010101FF010101FF00000 +D3FE:00001FF00440044004401FF0010001007FFC0000222022203E2022503E880000 +D3FF:00001FF00440044004401FF0010001007FFC000000000100010002800C400000 +D400:00001FF00440044004401FF0010001007FFC00000000024002400DA033100000 +D401:00001FF00440044004401FF0010001007FFC0000000007C00820082007C00000 +D402:00001FF00440044004401FF0010001007FFC0000000007E00080014006200000 +D403:00001FF00440044004401FF0010001007FFC0000008007E00080014006200000 +D404:00001FF00440044004401FF0010001007FFC00001FF000101FF0001000100000 +D405:00001FF00440044004401FF0010001007FFC00001FF010001FF010001FF00000 +D406:00001FF00440044004401FF0010001007FFC000000001FF0044004401FF00000 +D407:00001FF00440044004401FF0010001007FFC000001001FF007C0082007C00000 +D408:00000010001000107FD011101110111E11107FD0041004107FD0001000100000 +D409:000000083F881108110E3F88040804087FE8000007F800080008000800080000 +D40A:000000083F881108110E3F88040804087FE8000000003EF80208020802080000 +D40B:000000083F881108110E3F88040804087FE8000000001F080108011401620000 +D40C:000000083F881108110E3F88040804087FE8000008000800080008000FF80000 +D40D:000000083F881108110E3F88040804087FE80000000010F8101010301ECC0000 +D40E:000000083F881108110E3F88040804087FE800000808087F081C08220F9C0000 +D40F:000000083F881108110E3F88040804087FE8000003F802000200020003F80000 +D410:000000083F881108110E3F88040804087FE8000007F8000807F8040007F80000 +D411:000000083F881108110E3F88040804087FE800003EF802083E0820083E080000 +D412:000000083F881108110E3F88040804087FE800003EF802883E8820883EF80000 +D413:000000083F881108110E3F88040804087FE800003E8802883EF820883EF80000 +D414:000000083F881108110E3F88040804087FE800001F0801081F0810141F620000 +D415:000000083F881108110E3F88040804087FE800003EF802803EF820803EF80000 +D416:000000083F881108110E3F88040804087FE800003EFC02483E4820483EFC0000 +D417:000000083F881108110E3F88040804087FE800001F08017F1F1C10221F1C0000 +D418:000000083F881108110E3F88040804087FE8000003F802080208020803F80000 +D419:000000083F881108110E3F88040804087FE800000208020803F8020803F80000 +D41A:000000083F881108110E3F88040804087FE80000110811081F0811141F620000 +D41B:000000083F881108110E3F88040804087FE80000001000100010006801840000 +D41C:000000083F881108110E3F88040804087FE800000048004800A8011406620000 +D41D:000000083F881108110E3F88040804087FE80000000003F00408040803F00000 +D41E:000000083F881108110E3F88040804087FE8000003F80020002000D003080000 +D41F:000000083F881108110E3F88040804087FE80000004003F8004000A003180000 +D420:000000083F881108110E3F88040804087FE8000003F8000803F8000800080000 +D421:000000083F881108110E3F88040804087FE8000003F8020003F8020003F80000 +D422:000000083F881108110E3F88040804087FE8000000000FF8022002200FF80000 +D423:000000083F881108110E3F88040804087FE8000000800FF803E0041003E00000 +D424:00000012001200127FD211121112111E11127FD2041204127FD2001200120000 +D425:000000283FA8112811383FA8042804287FA8000007F800080008000800080000 +D426:000000283FA8112811383FA8042804287FA8000000003EF80208020802080000 +D427:000000283FA8112811383FA8042804287FA8000000001F080108011401620000 +D428:000000283FA8112811383FA8042804287FA8000008000800080008000FF80000 +D429:000000283FA8112811383FA8042804287FA80000000010F8101010301ECC0000 +D42A:000000283FA8112811383FA8042804287FA800000808087F081C08220F9C0000 +D42B:000000283FA8112811383FA8042804287FA8000003F802000200020003F80000 +D42C:000000283FA8112811383FA8042804287FA8000007F8000807F8040007F80000 +D42D:000000283FA8112811383FA8042804287FA800003EF802083E0820083E080000 +D42E:000000283FA8112811383FA8042804287FA800003EF802883E8820883EF80000 +D42F:000000283FA8112811383FA8042804287FA800003E8802883EF820883EF80000 +D430:000000283FA8112811383FA8042804287FA800001F0801081F0810141F620000 +D431:000000283FA8112811383FA8042804287FA800003EF802803EF820803EF80000 +D432:000000283FA8112811383FA8042804287FA800003EFC02483E4820483EFC0000 +D433:000000283FA8112811383FA8042804287FA800001F08017F1F1C10221F1C0000 +D434:000000283FA8112811383FA8042804287FA8000003F802080208020803F80000 +D435:000000283FA8112811383FA8042804287FA800000208020803F8020803F80000 +D436:000000283FA8112811383FA8042804287FA80000110811081F0811141F620000 +D437:000000283FA8112811383FA8042804287FA80000001000100010006801840000 +D438:000000283FA8112811383FA8042804287FA800000048004800A8011406620000 +D439:000000283FA8112811383FA8042804287FA80000000003F00408040803F00000 +D43A:000000283FA8112811383FA8042804287FA8000003F80020002000D003080000 +D43B:000000283FA8112811383FA8042804287FA80000004003F8004000A003180000 +D43C:000000283FA8112811383FA8042804287FA8000003F8000803F8000800080000 +D43D:000000283FA8112811383FA8042804287FA8000003F8020003F8020003F80000 +D43E:000000283FA8112811383FA8042804287FA8000000000FF8022002200FF80000 +D43F:000000283FA8112811383FA8042804287FA8000000800FF803E0041003E00000 +D440:00000008000800087FC811081108110811087FC8040804087FE8000800080000 +D441:000000083F88110811083F88040804087FE8000007F800080008000800080000 +D442:000000083F88110811083F88040804087FE8000000003EF80208020802080000 +D443:000000083F88110811083F88040804087FE8000000001F080108011401620000 +D444:000000083F88110811083F88040804087FE8000008000800080008000FF80000 +D445:000000083F88110811083F88040804087FE80000000010F8101010301ECC0000 +D446:000000083F88110811083F88040804087FE800000808087F081C08220F9C0000 +D447:000000083F88110811083F88040804087FE8000003F802000200020003F80000 +D448:000000083F88110811083F88040804087FE8000007F8000807F8040007F80000 +D449:000000083F88110811083F88040804087FE800003EF802083E0820083E080000 +D44A:000000083F88110811083F88040804087FE800003EF802883E8820883EF80000 +D44B:000000083F88110811083F88040804087FE800003E8802883EF820883EF80000 +D44C:000000083F88110811083F88040804087FE800001F0801081F0810141F620000 +D44D:000000083F88110811083F88040804087FE800003EF802803EF820803EF80000 +D44E:000000083F88110811083F88040804087FE800003EFC02483E4820483EFC0000 +D44F:000000083F88110811083F88040804087FE800001F08017F1F1C10221F1C0000 +D450:000000083F88110811083F88040804087FE8000003F802080208020803F80000 +D451:000000083F88110811083F88040804087FE800000208020803F8020803F80000 +D452:000000083F88110811083F88040804087FE80000110811081F0811141F620000 +D453:000000083F88110811083F88040804087FE80000001000100010006801840000 +D454:000000083F88110811083F88040804087FE800000048004800A8011406620000 +D455:000000083F88110811083F88040804087FE80000000003F00408040803F00000 +D456:000000083F88110811083F88040804087FE8000003F80020002000D003080000 +D457:000000083F88110811083F88040804087FE80000004003F8004000A003180000 +D458:000000083F88110811083F88040804087FE8000003F8000803F8000800080000 +D459:000000083F88110811083F88040804087FE8000003F8020003F8020003F80000 +D45A:000000083F88110811083F88040804087FE8000000000FF8022002200FF80000 +D45B:000000083F88110811083F88040804087FE8000000800FF803E0041003E00000 +D45C:000000003FF808200820082008203FF8000004400440044004407FFC00000000 +D45D:00001FF00440044004401FF0044004407FFC00001FF000100010001000100000 +D45E:00001FF00440044004401FF0044004407FFC000000003EF80208020802080000 +D45F:00001FF00440044004401FF0044004407FFC000000001E100210022802C40000 +D460:00001FF00440044004401FF0044004407FFC000000001000100010001FF00000 +D461:00001FF00440044004401FF0044004407FFC0000000020F8201020303ECC0000 +D462:00001FF00440044004401FF0044004407FFC0000202021FC207020883E700000 +D463:00001FF00440044004401FF0044004407FFC00001FF01000100010001FF00000 +D464:00001FF00440044004401FF0044004407FFC00001FF000101FF010001FF00000 +D465:00001FF00440044004401FF0044004407FFC00003EF802083E0820083E080000 +D466:00001FF00440044004401FF0044004407FFC00003EF802883E8820883EF80000 +D467:00001FF00440044004401FF0044004407FFC00003E8802883EF820883EF80000 +D468:00001FF00440044004401FF0044004407FFC00003E1002103E1020283EC40000 +D469:00001FF00440044004401FF0044004407FFC00003EF802803EF820803EF80000 +D46A:00001FF00440044004401FF0044004407FFC00003EFC02483E4820483EFC0000 +D46B:00001FF00440044004401FF0044004407FFC00003E2003FC3E7020883E700000 +D46C:00001FF00440044004401FF0044004407FFC00001FF01010101010101FF00000 +D46D:00001FF00440044004401FF0044004407FFC0000101010101FF010101FF00000 +D46E:00001FF00440044004401FF0044004407FFC0000222022203E2022503E880000 +D46F:00001FF00440044004401FF0044004407FFC000000000100010002800C400000 +D470:00001FF00440044004401FF0044004407FFC00000000024002400DA033100000 +D471:00001FF00440044004401FF0044004407FFC0000000007C00820082007C00000 +D472:00001FF00440044004401FF0044004407FFC0000000007E00080014006200000 +D473:00001FF00440044004401FF0044004407FFC0000008007E00080014006200000 +D474:00001FF00440044004401FF0044004407FFC00001FF000101FF0001000100000 +D475:00001FF00440044004401FF0044004407FFC00001FF010001FF010001FF00000 +D476:00001FF00440044004401FF0044004407FFC000000001FF0044004401FF00000 +D477:00001FF00440044004401FF0044004407FFC000001001FF007C0082007C00000 +D478:000000003FF808200820082008203FF8000000003FF801000100010001000000 +D479:00001FF00440044004401FF000007FFC010001001FF000100010001000100000 +D47A:00001FF00440044004401FF000007FFC0100010000003EF80208020802080000 +D47B:00001FF00440044004401FF000007FFC0100010000001E100210022802C40000 +D47C:00001FF00440044004401FF0000000007FFC010001001100100010001FF00000 +D47D:00001FF00440044004401FF000007FFC01000100000020F8201020303ECC0000 +D47E:00001FF00440044004401FF000007FFC01000100202021FC207020883E700000 +D47F:00001FF00440044004401FF000007FFC010001001FF01000100010001FF00000 +D480:00001FF00440044004401FF000007FFC010001001FF000101FF010001FF00000 +D481:00001FF00440044004401FF000007FFC010001003EF802083E0820083E080000 +D482:00001FF00440044004401FF000007FFC010001003EF802883E8820883EF80000 +D483:00001FF00440044004401FF000007FFC010001003E8802883EF820883EF80000 +D484:00001FF00440044004401FF000007FFC010001003E1002103E1020283EC40000 +D485:00001FF00440044004401FF000007FFC010001003EF802803EF820803EF80000 +D486:00001FF00440044004401FF000007FFC010001003EFC02483E4820483EFC0000 +D487:00001FF00440044004401FF000007FFC010001003E2003FC3E7020883E700000 +D488:00001FF00440044004401FF000007FFC010001001FF01010101010101FF00000 +D489:00001FF00440044004401FF000007FFC01000100101010101FF010101FF00000 +D48A:00001FF00440044004401FF000007FFC01000100222022203E2022503E880000 +D48B:00001FF00440044004401FF000007FFC0100010000000100010002800C400000 +D48C:00001FF00440044004401FF000007FFC010001000000024002400DA033100000 +D48D:00001FF00440044004401FF000007FFC01000100000007C00820082007C00000 +D48E:00001FF00440044004401FF000007FFC01000100000007E00080014006200000 +D48F:00001FF00440044004401FF000007FFC01000100008007E00080014006200000 +D490:00001FF00440044004401FF000007FFC010001001FF000101FF0001000100000 +D491:00001FF00440044004401FF000007FFC010001001FF010001FF010001FF00000 +D492:00001FF00440044004401FF000007FFC0100010000001FF0044004401FF00000 +D493:00001FF00440044004401FF000007FFC0100010001001FF007C0082007C00000 +D494:0000000800087FC811081108110811087FC800087FE8040804F8040804080000 +D495:00083F88110811083F8800087FE8027802080000000007F80008000800080000 +D496:00083F88110811083F8800087FE802780208000000003EF80208020802080000 +D497:00083F88110811083F8800087FE802780208000000001F080108011401620000 +D498:00083F88110811083F88000800087FE80278020802081000100010001FF80000 +D499:00083F88110811083F8800087FE8027802080000000020F8201020303ECC0000 +D49A:00083F88110811083F8800087FE8027802080000202021FC207020883E700000 +D49B:00083F88110811083F8800087FE802780208000003F802000200020003F80000 +D49C:00083F88110811083F8800087FE802780208000007F8000807F8040007F80000 +D49D:00083F88110811083F8800087FE80278020800003EF802083E0820083E080000 +D49E:00083F88110811083F8800087FE80278020800003EF802883E8820883EF80000 +D49F:00083F88110811083F8800087FE80278020800003E8802883EF820883EF80000 +D4A0:00083F88110811083F8800087FE80278020800000F8800880F8808140FA20000 +D4A1:00083F88110811083F8800087FE80278020800003EF802803EF820803EF80000 +D4A2:00083F88110811083F8800087FE80278020800003EFC02483E4820483EFC0000 +D4A3:00083F88110811083F8800087FE80278020800003E1002FE3E3820443E380000 +D4A4:00083F88110811083F8800087FE802780208000003F802080208020803F80000 +D4A5:00083F88110811083F8800087FE80278020800000208020803F8020803F80000 +D4A6:00083F88110811083F8800087FE8027802080000210821083F0821143F620000 +D4A7:00083F88110811083F8800087FE8027802080000001000100010006801840000 +D4A8:00083F88110811083F8800087FE80278020800000048004800A8011406620000 +D4A9:00083F88110811083F8800087FE8027802080000000003F00408040803F00000 +D4AA:00083F88110811083F8800087FE802780208000003F80020002000D003080000 +D4AB:00083F88110811083F8800087FE8027802080000004003F8004000A003180000 +D4AC:00083F88110811083F8800087FE802780208000003F8000803F8000800080000 +D4AD:00083F88110811083F8800087FE802780208000003F8020003F8020003F80000 +D4AE:00083F88110811083F8800087FE802780208000000000FF8022002200FF80000 +D4AF:00083F88110811083F8800087FE802780208000000800FF803E0041003E00000 +D4B0:0000000A000A7FCA110A110A110A110A7FCA000A7FEA040A047A040A040A0000 +D4B1:00283FA8112811283FA800287FA805E804280000000007F80008000800080000 +D4B2:00283FA8112811283FA800287FA805E80428000000003EF80208020802080000 +D4B3:00283FA8112811283FA800287FA805E80428000000001F080108011401620000 +D4B4:00283FA8112811283FA8002800287FA8042805E804281428100010001FF80000 +D4B5:00283FA8112811283FA800287FA805E804280000000020F8201020303ECC0000 +D4B6:00283FA8112811283FA800287FA805E804280000202021FC207020883E700000 +D4B7:00283FA8112811283FA800287FA805E80428000003F802000200020003F80000 +D4B8:00283FA8112811283FA800287FA805E80428000007F8000807F8040007F80000 +D4B9:00283FA8112811283FA800287FA805E8042800003EF802083E0820083E080000 +D4BA:00283FA8112811283FA800287FA805E8042800003EF802883E8820883EF80000 +D4BB:00283FA8112811283FA800287FA805E8042800003E8802883EF820883EF80000 +D4BC:00283FA8112811283FA800287FA805E8042800000F8800880F8808140FA20000 +D4BD:00283FA8112811283FA800287FA805E8042800003EF802803EF820803EF80000 +D4BE:00283FA8112811283FA800287FA805E8042800003EFC02483E4820483EFC0000 +D4BF:00283FA8112811283FA800287FA805E8042800003E1002FE3E3820443E380000 +D4C0:00283FA8112811283FA800287FA805E80428000003F802080208020803F80000 +D4C1:00283FA8112811283FA800287FA805E8042800000208020803F8020803F80000 +D4C2:00283FA8112811283FA800287FA805E804280000210821083F0821143F620000 +D4C3:00283FA8112811283FA800287FA805E804280000001000100010006801840000 +D4C4:00283FA8112811283FA800287FA805E8042800000048004800A8011406620000 +D4C5:00283FA8112811283FA800287FA805E804280000000003F00408040803F00000 +D4C6:00283FA8112811283FA800287FA805E80428000003F80020002000D003080000 +D4C7:00283FA8112811283FA800287FA805E804280000004003F8004000A003180000 +D4C8:00283FA8112811283FA800287FA805E80428000003F8000803F8000800080000 +D4C9:00283FA8112811283FA800287FA805E80428000003F8020003F8020003F80000 +D4CA:00283FA8112811283FA800287FA805E80428000000000FF8022002200FF80000 +D4CB:00283FA8112811283FA800287FA805E80428000000800FF803E0041003E00000 +D4CC:0000000800087FC811081108110811087FC800087FE804080408040804080000 +D4CD:00083F88110811083F8800087FE8020802000000000007F80008000800080000 +D4CE:00083F88110811083F8800087FE802080200000000003EF80208020802080000 +D4CF:00083F88110811083F8800087FE802080200000000001F080108011401620000 +D4D0:00083F88110811083F88000800087FE80208020802081008100010001FF80000 +D4D1:00083F88110811083F8800087FE8020802000000000020F8201020303ECC0000 +D4D2:00083F88110811083F8800087FE8020802000000202021FC207020883E700000 +D4D3:00083F88110811083F8800087FE802080200000003F802000200020003F80000 +D4D4:00083F88110811083F8800087FE802080200000007F8000807F8040007F80000 +D4D5:00083F88110811083F8800087FE80208020000003EF802083E0820083E080000 +D4D6:00083F88110811083F8800087FE80208020000003EF802883E8820883EF80000 +D4D7:00083F88110811083F8800087FE80208020000003E8802883EF820883EF80000 +D4D8:00083F88110811083F8800087FE80208020000000F8800880F8808140FA20000 +D4D9:00083F88110811083F8800087FE80208020000003EF802803EF820803EF80000 +D4DA:00083F88110811083F8800087FE80208020000003EFC02483E4820483EFC0000 +D4DB:00083F88110811083F8800087FE80208020000003E1002FE3E3820443E380000 +D4DC:00083F88110811083F8800087FE802080200000003F802080208020803F80000 +D4DD:00083F88110811083F8800087FE80208020000000208020803F8020803F80000 +D4DE:00083F88110811083F8800087FE8020802000000210821083F0821143F620000 +D4DF:00083F88110811083F8800087FE8020802000000001000100010006801840000 +D4E0:00083F88110811083F8800087FE80208020000000048004800A8011406620000 +D4E1:00083F88110811083F8800087FE8020802000000000003F00408040803F00000 +D4E2:00083F88110811083F8800087FE802080200000003F80020002000D003080000 +D4E3:00083F88110811083F8800087FE8020802000000004003F8004000A003180000 +D4E4:00083F88110811083F8800087FE802080200000003F8000803F8000800080000 +D4E5:00083F88110811083F8800087FE802080200000003F8020003F8020003F80000 +D4E6:00083F88110811083F8800087FE802080200000000000FF8022002200FF80000 +D4E7:00083F88110811083F8800087FE802080200000000800FF803E0041003E00000 +D4E8:000000003FF808200820082008203FF8000000007FFC04400440044004400000 +D4E9:00001FF00440044004401FF000007FFC044004401FF000100010001000100000 +D4EA:00001FF00440044004401FF000007FFC0440044000003EF80208020802080000 +D4EB:00001FF00440044004401FF000007FFC0440044000001E100210022802C40000 +D4EC:00001FF00440044004401FF0000000007FFC044004401440100010001FF00000 +D4ED:00001FF00440044004401FF000007FFC04400440000020F8201020303ECC0000 +D4EE:00001FF00440044004401FF000007FFC04400440202021FC207020883E700000 +D4EF:00001FF00440044004401FF000007FFC044004401FF01000100010001FF00000 +D4F0:00001FF00440044004401FF000007FFC044004401FF000101FF010001FF00000 +D4F1:00001FF00440044004401FF000007FFC044004403EF802083E0820083E080000 +D4F2:00001FF00440044004401FF000007FFC044004403EF802883E8820883EF80000 +D4F3:00001FF00440044004401FF000007FFC044004403E8802883EF820883EF80000 +D4F4:00001FF00440044004401FF000007FFC044004403E1002103E1020283EC40000 +D4F5:00001FF00440044004401FF000007FFC044004403EF802803EF820803EF80000 +D4F6:00001FF00440044004401FF000007FFC044004403EFC02483E4820483EFC0000 +D4F7:00001FF00440044004401FF000007FFC044004403E2003FC3E7020883E700000 +D4F8:00001FF00440044004401FF000007FFC044004401FF01010101010101FF00000 +D4F9:00001FF00440044004401FF000007FFC04400440101010101FF010101FF00000 +D4FA:00001FF00440044004401FF000007FFC04400440222022203E2022503E880000 +D4FB:00001FF00440044004401FF000007FFC0440044000000100010002800C400000 +D4FC:00001FF00440044004401FF000007FFC044004400000024002400DA033100000 +D4FD:00001FF00440044004401FF000007FFC04400440000007C00820082007C00000 +D4FE:00001FF00440044004401FF000007FFC04400440000007E00080014006200000 +D4FF:00001FF00440044004401FF000007FFC04400440008007E00080014006200000 +D500:00001FF00440044004401FF000007FFC044004401FF000101FF0001000100000 +D501:00001FF00440044004401FF000007FFC044004401FF010001FF010001FF00000 +D502:00001FF00440044004401FF000007FFC0440044000001FF0044004401FF00000 +D503:00001FF00440044004401FF000007FFC0440044001001FF007C0082007C00000 +D504:000000003FF808200820082008203FF80000000000007FFC0000000000000000 +D505:00001FF00440044004401FF0000000007FFC00001FF000100010001000100000 +D506:00001FF00440044004401FF0000000007FFC000000003EF80208020802080000 +D507:00001FF00440044004401FF0000000007FFC000000001E100210022802C40000 +D508:00001FF00440044004401FF0000000007FFC000000001000100010001FF00000 +D509:00001FF00440044004401FF0000000007FFC0000000020F8201020303ECC0000 +D50A:00001FF00440044004401FF0000000007FFC0000202021FC207020883E700000 +D50B:00001FF00440044004401FF0000000007FFC00001FF01000100010001FF00000 +D50C:00001FF00440044004401FF0000000007FFC00001FF000101FF010001FF00000 +D50D:00001FF00440044004401FF0000000007FFC00003EF802083E0820083E080000 +D50E:00001FF00440044004401FF0000000007FFC00003EF802883E8820883EF80000 +D50F:00001FF00440044004401FF0000000007FFC00003E8802883EF820883EF80000 +D510:00001FF00440044004401FF0000000007FFC00003E1002103E1020283EC40000 +D511:00001FF00440044004401FF0000000007FFC00003EF802803EF820803EF80000 +D512:00001FF00440044004401FF0000000007FFC00003EFC02483E4820483EFC0000 +D513:00001FF00440044004401FF0000000007FFC00003E2003FC3E7020883E700000 +D514:00001FF00440044004401FF0000000007FFC00001FF01010101010101FF00000 +D515:00001FF00440044004401FF0000000007FFC0000101010101FF010101FF00000 +D516:00001FF00440044004401FF0000000007FFC0000222022203E2022503E880000 +D517:00001FF00440044004401FF0000000007FFC000000000100010002800C400000 +D518:00001FF00440044004401FF0000000007FFC00000000024002400DA033100000 +D519:00001FF00440044004401FF0000000007FFC0000000007C00820082007C00000 +D51A:00001FF00440044004401FF0000000007FFC0000000007E00080014006200000 +D51B:00001FF00440044004401FF0000000007FFC0000008007E00080014006200000 +D51C:00001FF00440044004401FF0000000007FFC00001FF000101FF0001000100000 +D51D:00001FF00440044004401FF0000000007FFC00001FF010001FF010001FF00000 +D51E:00001FF00440044004401FF0000000007FFC000000001FF0044004401FF00000 +D51F:00001FF00440044004401FF0000000007FFC000001001FF007C0082007C00000 +D520:00000008000800087FC811081108110811087FC800087FE80008000800080000 +D521:000000083F88110811083F88000800087FE8000007F800080008000800080000 +D522:000000083F88110811083F88000800087FE8000000003EF80208020802080000 +D523:000000083F88110811083F88000800087FE8000000001F080108011401620000 +D524:000000083F88110811083F88000800087FE8000008000800080008000FF80000 +D525:000000083F88110811083F88000800087FE80000000010F8101010301ECC0000 +D526:000000083F88110811083F88000800087FE800000808087F081C08220F9C0000 +D527:000000083F88110811083F88000800087FE8000003F802000200020003F80000 +D528:000000083F88110811083F88000800087FE8000007F8000807F8040007F80000 +D529:000000083F88110811083F88000800087FE800003EF802083E0820083E080000 +D52A:000000083F88110811083F88000800087FE800003EF802883E8820883EF80000 +D52B:000000083F88110811083F88000800087FE800003E8802883EF820883EF80000 +D52C:000000083F88110811083F88000800087FE800001F0801081F0810141F620000 +D52D:000000083F88110811083F88000800087FE800003EF802803EF820803EF80000 +D52E:000000083F88110811083F88000800087FE800003EFC02483E4820483EFC0000 +D52F:000000083F88110811083F88000800087FE800001F08017F1F1C10221F1C0000 +D530:000000083F88110811083F88000800087FE8000003F802080208020803F80000 +D531:000000083F88110811083F88000800087FE800000208020803F8020803F80000 +D532:000000083F88110811083F88000800087FE80000110811081F0811141F620000 +D533:000000083F88110811083F88000800087FE80000001000100010006801840000 +D534:000000083F88110811083F88000800087FE800000048004800A8011406620000 +D535:000000083F88110811083F88000800087FE80000000003F00408040803F00000 +D536:000000083F88110811083F88000800087FE8000003F80020002000D003080000 +D537:000000083F88110811083F88000800087FE80000004003F8004000A003180000 +D538:000000083F88110811083F88000800087FE8000003F8000803F8000800080000 +D539:000000083F88110811083F88000800087FE8000003F8020003F8020003F80000 +D53A:000000083F88110811083F88000800087FE8000000000FF8022002200FF80000 +D53B:000000083F88110811083F88000800087FE8000000800FF803E0041003E00000 +D53C:00000000000800087FC8110811081108110811087FC800080008000800080000 +D53D:0000000800087F881208120812087F8800080000000007F80008000800080000 +D53E:0000000800087F881208120812087F880008000000003EF80208020802080000 +D53F:0000000800087F881208120812087F880008000000001F080108011401620000 +D540:0000000800087F881208120812087F880008000800001000100010001FF80000 +D541:0000000800087F881208120812087F8800080000000020F8201020303ECC0000 +D542:0000000800087F881208120812087F8800080000202021FC207020883E700000 +D543:0000000800087F881208120812087F880008000003F802000200020003F80000 +D544:0000000800087F881208120812087F880008000007F8000807F8040007F80000 +D545:0000000800087F881208120812087F88000800003EF802083E0820083E080000 +D546:0000000800087F881208120812087F88000800003EF802883E8820883EF80000 +D547:0000000800087F881208120812087F88000800003E8802883EF820883EF80000 +D548:0000000800087F881208120812087F88000800000F8800880F8808140FA20000 +D549:0000000800087F881208120812087F88000800003EF802803EF820803EF80000 +D54A:0000000800087F881208120812087F88000800003EFC02483E4820483EFC0000 +D54B:0000000800087F881208120812087F88000800003E1002FE3E3820443E380000 +D54C:0000000800087F881208120812087F880008000003F802080208020803F80000 +D54D:0000000800087F881208120812087F88000800000208020803F8020803F80000 +D54E:0000000800087F881208120812087F8800080000210821083F0821143F620000 +D54F:0000000800087F881208120812087F8800080000001000100010006801840000 +D550:0000000800087F881208120812087F88000800000048004800A8011406620000 +D551:0000000800087F881208120812087F8800080000000003F00408040803F00000 +D552:0000000800087F881208120812087F880008000003F80020002000D003080000 +D553:0000000800087F881208120812087F8800080000004003F8004000A003180000 +D554:0000000800087F881208120812087F880008000003F8000803F8000800080000 +D555:0000000800087F881208120812087F880008000003F8020003F8020003F80000 +D556:0000000800087F881208120812087F880008000000000FF8022002200FF80000 +D557:0000000800087F881208120812087F880008000000800FF803E0041003E00000 +D558:00000000041004103F900E101110209E2090209011100E100010001000100000 +D559:000008087F081C082208220E22081C080008000007F800080008000800080000 +D55A:000008087F081C082208220E22081C080008000000003EF80208020802080000 +D55B:000008087F081C082208220E22081C080008000000001F080108011401620000 +D55C:000008087F081C082208220E22081C080008000808000800080008000FF80000 +D55D:000008087F081C082208220E22081C0800080000000010F8101010301ECC0000 +D55E:000008087F081C082208220E22081C08000800000808087F081C08220F9C0000 +D55F:000008087F081C082208220E22081C080008000003F802000200020003F80000 +D560:000008087F081C082208220E22081C080008000007F8000807F8040007F80000 +D561:000008087F081C082208220E22081C08000800003EF802083E0820083E080000 +D562:000008087F081C082208220E22081C08000800003EF802883E8820883EF80000 +D563:000008087F081C082208220E22081C08000800003E8802883EF820883EF80000 +D564:000008087F081C082208220E22081C08000800001F0801081F0810141F620000 +D565:000008087F081C082208220E22081C08000800003EF802803EF820803EF80000 +D566:000008087F081C082208220E22081C08000800003EFC02483E4820483EFC0000 +D567:000008087F081C082208220E22081C08000800001F08017F1F1C10221F1C0000 +D568:000008087F081C082208220E22081C080008000003F802080208020803F80000 +D569:000008087F081C082208220E22081C08000800000208020803F8020803F80000 +D56A:000008087F081C082208220E22081C0800080000110811081F0811141F620000 +D56B:000008087F081C082208220E22081C0800080000001000100010006801840000 +D56C:000008087F081C082208220E22081C08000800000048004800A8011406620000 +D56D:000008087F081C082208220E22081C0800080000000003F00408040803F00000 +D56E:000008087F081C082208220E22081C080008000003F80020002000D003080000 +D56F:000008087F081C082208220E22081C0800080000004003F8004000A003180000 +D570:000008087F081C082208220E22081C080008000003F8000803F8000800080000 +D571:000008087F081C082208220E22081C080008000003F8020003F8020003F80000 +D572:000008087F081C082208220E22081C080008000000000FF8022002200FF80000 +D573:000008087F081C082208220E22081C080008000000800FF803E0041003E00000 +D574:00000000041204123F920E121112209E2092209211120E120012001200120000 +D575:000008287F281C282228223822281C280028000007F800080008000800080000 +D576:000008287F281C282228223822281C280028000000003EF80208020802080000 +D577:000008287F281C282228223822281C280028000000003E100210022802C40000 +D578:000008287F281C282228223822281C280028002808000800080008000FF80000 +D579:000008287F281C282228223822281C2800280000000020F8201020303ECC0000 +D57A:000008287F281C282228223822281C2800280000202021FC207020883E700000 +D57B:000008287F281C282228223822281C280028000003F802000200020003F80000 +D57C:000008287F281C282228223822281C280028000007F8000807F8040007F80000 +D57D:000008287F281C282228223822281C28002800003EF802083E0820083E080000 +D57E:000008287F281C282228223822281C28002800003EF802883E8820883EF80000 +D57F:000008287F281C282228223822281C28002800003E8802883EF820883EF80000 +D580:000008287F281C282228223822281C28002800001F0801081F0810141F620000 +D581:000008287F281C282228223822281C28002800003EF802803EF820803EF80000 +D582:000008287F281C282228223822281C28002800003EFC02483E4820483EFC0000 +D583:000008287F281C282228223822281C28002800003E1002FE3E3820443E380000 +D584:000008287F281C282228223822281C280028000003F802080208020803F80000 +D585:000008287F281C282228223822281C28002800000208020803F8020803F80000 +D586:000008287F281C282228223822281C2800280000110811081F0811141F620000 +D587:000008287F281C282228223822281C2800280000000800080008003400C20000 +D588:000008287F281C282228223822281C28002800000048004800A8011406620000 +D589:000008287F281C282228223822281C2800280000000001F00208020801F00000 +D58A:000008287F281C282228223822281C280028000003F80020002000D003080000 +D58B:000008287F281C282228223822281C2800280000004003F8004000A003180000 +D58C:000008287F281C282228223822281C280028000003F8000803F8000800080000 +D58D:000008287F281C282228223822281C280028000003F8020003F8020003F80000 +D58E:000008287F281C282228223822281C280028000000000FF8022002200FF80000 +D58F:000008287F281C282228223822281C280028000000800FF803E0041003E00000 +D590:00000000041004103F900E10111E20902090209E11100E100010001000100000 +D591:000008087F081C08220E2208220E1C080008000007F800080008000800080000 +D592:000008087F081C08220E2208220E1C080008000000003EF80208020802080000 +D593:000008087F081C08220E2208220E1C080008000000001F080108011401620000 +D594:000008087F081C08220E2208220E1C080008000008000800080008000FF80000 +D595:000008087F081C08220E2208220E1C0800080000000010F8101010301ECC0000 +D596:000008087F081C08220E2208220E1C08000800000808087F081C08220F9C0000 +D597:000008087F081C08220E2208220E1C080008000003F802000200020003F80000 +D598:000008087F081C08220E2208220E1C080008000007F8000807F8040007F80000 +D599:000008087F081C08220E2208220E1C08000800003EF802083E0820083E080000 +D59A:000008087F081C08220E2208220E1C08000800003EF802883E8820883EF80000 +D59B:000008087F081C08220E2208220E1C08000800003E8802883EF820883EF80000 +D59C:000008087F081C08220E2208220E1C08000800001F0801081F0810141F620000 +D59D:000008087F081C08220E2208220E1C08000800003EF802803EF820803EF80000 +D59E:000008087F081C08220E2208220E1C08000800003EFC02483E4820483EFC0000 +D59F:000008087F081C08220E2208220E1C08000800001F08017F1F1C10221F1C0000 +D5A0:000008087F081C08220E2208220E1C080008000003F802080208020803F80000 +D5A1:000008087F081C08220E2208220E1C08000800000208020803F8020803F80000 +D5A2:000008087F081C08220E2208220E1C0800080000110811081F0811141F620000 +D5A3:000008087F081C08220E2208220E1C0800080000001000100010006801840000 +D5A4:000008087F081C08220E2208220E1C08000800000048004800A8011406620000 +D5A5:000008087F081C08220E2208220E1C0800080000000003F00408040803F00000 +D5A6:000008087F081C08220E2208220E1C080008000003F80020002000D003080000 +D5A7:000008087F081C08220E2208220E1C0800080000004003F8004000A003180000 +D5A8:000008087F081C08220E2208220E1C080008000003F8000803F8000800080000 +D5A9:000008087F081C08220E2208220E1C080008000003F8020003F8020003F80000 +D5AA:000008087F081C08220E2208220E1C080008000000000FF8022002200FF80000 +D5AB:000008087F081C08220E2208220E1C080008000000800FF803E0041003E00000 +D5AC:00000000041204123F920E12111E20922092209E11120E120012001200120000 +D5AD:000008287F281C282238222822381C280028000007F800080008000800080000 +D5AE:000008287F281C282238222822381C280028000000003EF80208020802080000 +D5AF:000008287F281C282238222822381C280028000000003E100210022802C40000 +D5B0:000008287F281C282238222822381C280028002808000800080008000FF80000 +D5B1:000008287F281C282238222822381C2800280000000020F8201020303ECC0000 +D5B2:000008287F281C282238222822381C2800280000202021FC207020883E700000 +D5B3:000008287F281C282238222822381C280028000003F802000200020003F80000 +D5B4:000008287F281C282238222822381C280028000007F8000807F8040007F80000 +D5B5:000008287F281C282238222822381C28002800003EF802083E0820083E080000 +D5B6:000008287F281C282238222822381C28002800003EF802883E8820883EF80000 +D5B7:000008287F281C282238222822381C28002800003E8802883EF820883EF80000 +D5B8:000008287F281C282238222822381C28002800001F0801081F0810141F620000 +D5B9:000008287F281C282238222822381C28002800003EF802803EF820803EF80000 +D5BA:000008287F281C282238222822381C28002800003EFC02483E4820483EFC0000 +D5BB:000008287F281C282238222822381C28002800003E1002FE3E3820443E380000 +D5BC:000008287F281C282238222822381C280028000003F802080208020803F80000 +D5BD:000008287F281C282238222822381C28002800000208020803F8020803F80000 +D5BE:000008287F281C282238222822381C2800280000110811081F0811141F620000 +D5BF:000008287F281C282238222822381C2800280000000800080008003400C20000 +D5C0:000008287F281C282238222822381C28002800000048004800A8011406620000 +D5C1:000008287F281C282238222822381C2800280000000001F00208020801F00000 +D5C2:000008287F281C282238222822381C280028000003F80020002000D003080000 +D5C3:000008287F281C282238222822381C2800280000004003F8004000A003180000 +D5C4:000008287F281C282238222822381C280028000003F8000803F8000800080000 +D5C5:000008287F281C282238222822381C280028000003F8020003F8020003F80000 +D5C6:000008287F281C282238222822381C280028000000000FF8022002200FF80000 +D5C7:000008287F281C282238222822381C280028000000800FF803E0041003E00000 +D5C8:00000000040204023F820E021102209E2082208211020E020002000200020000 +D5C9:000008087F081C082208223822081C0800080000000007F80008000800080000 +D5CA:000008087F081C082208223822081C080008000000003EF80208020802080000 +D5CB:000008087F081C082208223822081C080008000000001F080108011401620000 +D5CC:000008087F081C082208223822081C080008000000001000100010001FF80000 +D5CD:000008087F081C082208223822081C0800080000000020F8201020303ECC0000 +D5CE:000008087F081C082208223822081C0800080000202021FC207020883E700000 +D5CF:000008087F081C082208223822081C080008000003F802000200020003F80000 +D5D0:000008087F081C082208223822081C080008000007F8000807F8040007F80000 +D5D1:000008087F081C082208223822081C08000800003EF802083E0820083E080000 +D5D2:000008087F081C082208223822081C08000800003EF802883E8820883EF80000 +D5D3:000008087F081C082208223822081C08000800003E8802883EF820883EF80000 +D5D4:000008087F081C082208223822081C08000800000F8800880F8808140FA20000 +D5D5:000008087F081C082208223822081C08000800003EF802803EF820803EF80000 +D5D6:000008087F081C082208223822081C08000800003EFC02483E4820483EFC0000 +D5D7:000008087F081C082208223822081C08000800003E1002FE3E3820443E380000 +D5D8:000008087F081C082208223822081C080008000003F802080208020803F80000 +D5D9:000008087F081C082208223822081C08000800000208020803F8020803F80000 +D5DA:000008087F081C082208223822081C0800080000210821083F0821143F620000 +D5DB:000008087F081C082208223822081C0800080000001000100010006801840000 +D5DC:000008087F081C082208223822081C08000800000048004800A8011406620000 +D5DD:000008087F081C082208223822081C0800080000000003F00408040803F00000 +D5DE:000008087F081C082208223822081C080008000003F80020002000D003080000 +D5DF:000008087F081C082208223822081C0800080000004003F8004000A003180000 +D5E0:000008087F081C082208223822081C080008000003F8000803F8000800080000 +D5E1:000008087F081C082208223822081C080008000003F8020003F8020003F80000 +D5E2:000008087F081C082208223822081C080008000000000FF8022002200FF80000 +D5E3:000008087F081C082208223822081C080008000000800FF803E0041003E00000 +D5E4:00000000040A040A3F8A0E0A110A20BA208A208A110A0E0A000A000A000A0000 +D5E5:000008287F281C28222822E822281C280028000007F800080008000800080000 +D5E6:000008287F281C28222822E822281C280028000000003EF80208020802080000 +D5E7:000008287F281C28222822E822281C280028000000003E100210022802C40000 +D5E8:000008287F281C28222822E822281C280028000008000800080008000FF80000 +D5E9:000008287F281C28222822E822281C2800280000000020F8201020303ECC0000 +D5EA:000008287F281C28222822E822281C2800280000202021FC207020883E700000 +D5EB:000008287F281C28222822E822281C280028000003F802000200020003F80000 +D5EC:000008287F281C28222822E822281C280028000007F8000807F8040007F80000 +D5ED:000008287F281C28222822E822281C28002800003EF802083E0820083E080000 +D5EE:000008287F281C28222822E822281C28002800003EF802883E8820883EF80000 +D5EF:000008287F281C28222822E822281C28002800003E8802883EF820883EF80000 +D5F0:000008287F281C28222822E822281C28002800001F0801081F0810141F620000 +D5F1:000008287F281C28222822E822281C28002800003EF802803EF820803EF80000 +D5F2:000008287F281C28222822E822281C28002800003EFC02483E4820483EFC0000 +D5F3:000008287F281C28222822E822281C28002800003E1002FE3E3820443E380000 +D5F4:000008287F281C28222822E822281C280028000003F802080208020803F80000 +D5F5:000008287F281C28222822E822281C28002800000208020803F8020803F80000 +D5F6:000008287F281C28222822E822281C2800280000110811081F0811141F620000 +D5F7:000008287F281C28222822E822281C2800280000000800080008003400C20000 +D5F8:000008287F281C28222822E822281C28002800000048004800A8011406620000 +D5F9:000008287F281C28222822E822281C2800280000000001F00208020801F00000 +D5FA:000008287F281C28222822E822281C280028000003F80020002000D003080000 +D5FB:000008287F281C28222822E822281C2800280000004003F8004000A003180000 +D5FC:000008287F281C28222822E822281C280028000003F8000803F8000800080000 +D5FD:000008287F281C28222822E822281C280028000003F8020003F8020003F80000 +D5FE:000008287F281C28222822E822281C280028000000000FF8022002200FF80000 +D5FF:000008287F281C28222822E822281C280028000000800FF803E0041003E00000 +D600:00000000040204023F820E02111E20822082209E11020E020002000200020000 +D601:000008087F081C082238220822381C0800080000000007F80008000800080000 +D602:000008087F081C082238220822381C080008000000003EF80208020802080000 +D603:000008087F081C082238220822381C080008000000001F080108011401620000 +D604:000008087F081C082238220822381C080008000800001000100010001FF80000 +D605:000008087F081C082238220822381C0800080000000020F8201020303ECC0000 +D606:000008087F081C082238220822381C0800080000202021FC207020883E700000 +D607:000008087F081C082238220822381C080008000003F802000200020003F80000 +D608:000008087F081C082238220822381C080008000007F8000807F8040007F80000 +D609:000008087F081C082238220822381C08000800003EF802083E0820083E080000 +D60A:000008087F081C082238220822381C08000800003EF802883E8820883EF80000 +D60B:000008087F081C082238220822381C08000800003E8802883EF820883EF80000 +D60C:000008087F081C082238220822381C08000800000F8800880F8808140FA20000 +D60D:000008087F081C082238220822381C08000800003EF802803EF820803EF80000 +D60E:000008087F081C082238220822381C08000800003EFC02483E4820483EFC0000 +D60F:000008087F081C082238220822381C08000800003E1002FE3E3820443E380000 +D610:000008087F081C082238220822381C080008000003F802080208020803F80000 +D611:000008087F081C082238220822381C08000800000208020803F8020803F80000 +D612:000008087F081C082238220822381C0800080000210821083F0821143F620000 +D613:000008087F081C082238220822381C0800080000001000100010006801840000 +D614:000008087F081C082238220822381C08000800000048004800A8011406620000 +D615:000008087F081C082238220822381C0800080000000003F00408040803F00000 +D616:000008087F081C082238220822381C080008000003F80020002000D003080000 +D617:000008087F081C082238220822381C0800080000004003F8004000A003180000 +D618:000008087F081C082238220822381C080008000003F8000803F8000800080000 +D619:000008087F081C082238220822381C080008000003F8020003F8020003F80000 +D61A:000008087F081C082238220822381C080008000000000FF8022002200FF80000 +D61B:000008087F081C082238220822381C080008000000800FF803E0041003E00000 +D61C:00000000040A040A3F8A0E0A113A208A208A20BA110A0E0A000A000A000A0000 +D61D:000008287F281C2822E8222822E81C280028000007F800080008000800080000 +D61E:000008287F281C2822E8222822E81C280028000000003EF80208020802080000 +D61F:000008287F281C2822E8222822E81C280028000000003E100210022802C40000 +D620:000008287F281C2822E8222822E81C280028002808000800080008000FF80000 +D621:000008287F281C2822E8222822E81C2800280000000020F8201020303ECC0000 +D622:000008287F281C2822E8222822E81C2800280000202021FC207020883E700000 +D623:000008287F281C2822E8222822E81C280028000003F802000200020003F80000 +D624:000008287F281C2822E8222822E81C280028000007F8000807F8040007F80000 +D625:000008287F281C2822E8222822E81C28002800003EF802083E0820083E080000 +D626:000008287F281C2822E8222822E81C28002800003EF802883E8820883EF80000 +D627:000008287F281C2822E8222822E81C28002800003E8802883EF820883EF80000 +D628:000008287F281C2822E8222822E81C28002800001F0801081F0810141F620000 +D629:000008287F281C2822E8222822E81C28002800003EF802803EF820803EF80000 +D62A:000008287F281C2822E8222822E81C28002800003EFC02483E4820483EFC0000 +D62B:000008287F281C2822E8222822E81C28002800003E1002FE3E3820443E380000 +D62C:000008287F281C2822E8222822E81C280028000003F802080208020803F80000 +D62D:000008287F281C2822E8222822E81C28002800000208020803F8020803F80000 +D62E:000008287F281C2822E8222822E81C2800280000110811081F0811141F620000 +D62F:000008287F281C2822E8222822E81C2800280000000800080008003400C20000 +D630:000008287F281C2822E8222822E81C28002800000048004800A8011406620000 +D631:000008287F281C2822E8222822E81C2800280000000001F00208020801F00000 +D632:000008287F281C2822E8222822E81C280028000003F80020002000D003080000 +D633:000008287F281C2822E8222822E81C2800280000004003F8004000A003180000 +D634:000008287F281C2822E8222822E81C280028000003F8000803F8000800080000 +D635:000008287F281C2822E8222822E81C280028000003F8020003F8020003F80000 +D636:000008287F281C2822E8222822E81C280028000000000FF8022002200FF80000 +D637:000008287F281C2822E8222822E81C280028000000800FF803E0041003E00000 +D638:0000010001000FE0000007C00820082007C000000100010001007FFC00000000 +D639:01000FE007C00820082007C0010001007FFC00001FF000100010001000100000 +D63A:01000FE007C00820082007C0010001007FFC000000003EF80208020802080000 +D63B:01000FE007C00820082007C0010001007FFC000000001E100210022802C40000 +D63C:01000FE007C00820082007C0010001007FFC000000001000100010001FF00000 +D63D:01000FE007C00820082007C0010001007FFC0000000020F8201020303ECC0000 +D63E:01000FE007C00820082007C0010001007FFC0000202021FC207020883E700000 +D63F:01000FE007C00820082007C0010001007FFC00001FF01000100010001FF00000 +D640:01000FE007C00820082007C0010001007FFC00001FF000101FF010001FF00000 +D641:01000FE007C00820082007C0010001007FFC00003EF802083E0820083E080000 +D642:01000FE007C00820082007C0010001007FFC00003EF802883E8820883EF80000 +D643:01000FE007C00820082007C0010001007FFC00003E8802883EF820883EF80000 +D644:01000FE007C00820082007C0010001007FFC00003E1002103E1020283EC40000 +D645:01000FE007C00820082007C0010001007FFC00003EF802803EF820803EF80000 +D646:01000FE007C00820082007C0010001007FFC00003EFC02483E4820483EFC0000 +D647:01000FE007C00820082007C0010001007FFC00003E2003FC3E7020883E700000 +D648:01000FE007C00820082007C0010001007FFC00001FF01010101010101FF00000 +D649:01000FE007C00820082007C0010001007FFC0000101010101FF010101FF00000 +D64A:01000FE007C00820082007C0010001007FFC0000222022203E2022503E880000 +D64B:01000FE007C00820082007C0010001007FFC000000000100010002800C400000 +D64C:01000FE007C00820082007C0010001007FFC00000000024002400DA033100000 +D64D:01000FE007C00820082007C0010001007FFC0000000007C00820082007C00000 +D64E:01000FE007C00820082007C0010001007FFC0000000007E00080014006200000 +D64F:01000FE007C00820082007C0010001007FFC0000008007E00080014006200000 +D650:01000FE007C00820082007C0010001007FFC00001FF000101FF0001000100000 +D651:01000FE007C00820082007C0010001007FFC00001FF010001FF010001FF00000 +D652:01000FE007C00820082007C0010001007FFC000000001FF0044004401FF00000 +D653:01000FE007C00820082007C0010001007FFC000001001FF007C0082007C00000 +D654:00000010041004103F9000101F10209E20901F10041004107FD0001000100000 +D655:000004083F880E08110E11080E0804087FE8000007F800080008000800080000 +D656:000004083F880E08110E11080E0804087FE8000000003EF80208020802080000 +D657:000004083F880E08110E11080E0804087FE8000000001F080108011401620000 +D658:000004083F880E08110E11080E0804087FE8000008000800080008000FF80000 +D659:000004083F880E08110E11080E0804087FE80000000010F8101010301ECC0000 +D65A:000004083F880E08110E11080E0804087FE800000808087F081C08220F9C0000 +D65B:000004083F880E08110E11080E0804087FE8000003F802000200020003F80000 +D65C:000004083F880E08110E11080E0804087FE8000007F8000807F8040007F80000 +D65D:000004083F880E08110E11080E0804087FE800003EF802083E0820083E080000 +D65E:000004083F880E08110E11080E0804087FE800003EF802883E8820883EF80000 +D65F:000004083F880E08110E11080E0804087FE800003E8802883EF820883EF80000 +D660:000004083F880E08110E11080E0804087FE800001F0801081F0810141F620000 +D661:000004083F880E08110E11080E0804087FE800003EF802803EF820803EF80000 +D662:000004083F880E08110E11080E0804087FE800003EFC02483E4820483EFC0000 +D663:000004083F880E08110E11080E0804087FE800001F08017F1F1C10221F1C0000 +D664:000004083F880E08110E11080E0804087FE8000003F802080208020803F80000 +D665:000004083F880E08110E11080E0804087FE800000208020803F8020803F80000 +D666:000004083F880E08110E11080E0804087FE80000110811081F0811141F620000 +D667:000004083F880E08110E11080E0804087FE80000001000100010006801840000 +D668:000004083F880E08110E11080E0804087FE800000048004800A8011406620000 +D669:000004083F880E08110E11080E0804087FE80000000003F00408040803F00000 +D66A:000004083F880E08110E11080E0804087FE8000003F80020002000D003080000 +D66B:000004083F880E08110E11080E0804087FE80000004003F8004000A003180000 +D66C:000004083F880E08110E11080E0804087FE8000003F8000803F8000800080000 +D66D:000004083F880E08110E11080E0804087FE8000003F8020003F8020003F80000 +D66E:000004083F880E08110E11080E0804087FE8000000000FF8022002200FF80000 +D66F:000004083F880E08110E11080E0804087FE8000000800FF803E0041003E00000 +D670:00000012041204123F9200121F12209E20921F12041204127FD2001200120000 +D671:000004283FA80E28113811280E2804287FA8000007F800080008000800080000 +D672:000004283FA80E28113811280E2804287FA8000000003EF80208020802080000 +D673:000004283FA80E28113811280E2804287FA8000000001F080108011401620000 +D674:000004283FA80E28113811280E2804287FA8000008000800080008000FF80000 +D675:000004283FA80E28113811280E2804287FA80000000010F8101010301ECC0000 +D676:000004283FA80E28113811280E2804287FA800000808087F081C08220F9C0000 +D677:000004283FA80E28113811280E2804287FA8000003F802000200020003F80000 +D678:000004283FA80E28113811280E2804287FA8000007F8000807F8040007F80000 +D679:000004283FA80E28113811280E2804287FA800003EF802083E0820083E080000 +D67A:000004283FA80E28113811280E2804287FA800003EF802883E8820883EF80000 +D67B:000004283FA80E28113811280E2804287FA800003E8802883EF820883EF80000 +D67C:000004283FA80E28113811280E2804287FA800001F0801081F0810141F620000 +D67D:000004283FA80E28113811280E2804287FA800003EF802803EF820803EF80000 +D67E:000004283FA80E28113811280E2804287FA800003EFC02483E4820483EFC0000 +D67F:000004283FA80E28113811280E2804287FA800001F08017F1F1C10221F1C0000 +D680:000004283FA80E28113811280E2804287FA8000003F802080208020803F80000 +D681:000004283FA80E28113811280E2804287FA800000208020803F8020803F80000 +D682:000004283FA80E28113811280E2804287FA80000110811081F0811141F620000 +D683:000004283FA80E28113811280E2804287FA80000001000100010006801840000 +D684:000004283FA80E28113811280E2804287FA800000048004800A8011406620000 +D685:000004283FA80E28113811280E2804287FA80000000003F00408040803F00000 +D686:000004283FA80E28113811280E2804287FA8000003F80020002000D003080000 +D687:000004283FA80E28113811280E2804287FA80000004003F8004000A003180000 +D688:000004283FA80E28113811280E2804287FA8000003F8000803F8000800080000 +D689:000004283FA80E28113811280E2804287FA8000003F8020003F8020003F80000 +D68A:000004283FA80E28113811280E2804287FA8000000000FF8022002200FF80000 +D68B:000004283FA80E28113811280E2804287FA8000000800FF803E0041003E00000 +D68C:00000008040804083F8800081F08208820881F08040804087FE8000800080000 +D68D:000004083F880E08110811080E0804087FE8000007F800080008000800080000 +D68E:000004083F880E08110811080E0804087FE8000000003EF80208020802080000 +D68F:000004083F880E08110811080E0804087FE8000000001F080108011401620000 +D690:000004083F880E08110811080E0804087FE8000008000800080008000FF80000 +D691:000004083F880E08110811080E0804087FE80000000010F8101010301ECC0000 +D692:000004083F880E08110811080E0804087FE800000808087F081C08220F9C0000 +D693:000004083F880E08110811080E0804087FE8000003F802000200020003F80000 +D694:000004083F880E08110811080E0804087FE8000007F8000807F8040007F80000 +D695:000004083F880E08110811080E0804087FE800003EF802083E0820083E080000 +D696:000004083F880E08110811080E0804087FE800003EF802883E8820883EF80000 +D697:000004083F880E08110811080E0804087FE800003E8802883EF820883EF80000 +D698:000004083F880E08110811080E0804087FE800001F0801081F0810141F620000 +D699:000004083F880E08110811080E0804087FE800003EF802803EF820803EF80000 +D69A:000004083F880E08110811080E0804087FE800003EFC02483E4820483EFC0000 +D69B:000004083F880E08110811080E0804087FE800001F08017F1F1C10221F1C0000 +D69C:000004083F880E08110811080E0804087FE8000003F802080208020803F80000 +D69D:000004083F880E08110811080E0804087FE800000208020803F8020803F80000 +D69E:000004083F880E08110811080E0804087FE80000110811081F0811141F620000 +D69F:000004083F880E08110811080E0804087FE80000001000100010006801840000 +D6A0:000004083F880E08110811080E0804087FE800000048004800A8011406620000 +D6A1:000004083F880E08110811080E0804087FE80000000003F00408040803F00000 +D6A2:000004083F880E08110811080E0804087FE8000003F80020002000D003080000 +D6A3:000004083F880E08110811080E0804087FE80000004003F8004000A003180000 +D6A4:000004083F880E08110811080E0804087FE8000003F8000803F8000800080000 +D6A5:000004083F880E08110811080E0804087FE8000003F8020003F8020003F80000 +D6A6:000004083F880E08110811080E0804087FE8000000000FF8022002200FF80000 +D6A7:000004083F880E08110811080E0804087FE8000000800FF803E0041003E00000 +D6A8:0000010001000FE0000007C00820082007C004400440044004407FFC00000000 +D6A9:01000FE007C00820082007C0044004407FFC00001FF000100010001000100000 +D6AA:01000FE007C00820082007C0044004407FFC000000003EF80208020802080000 +D6AB:01000FE007C00820082007C0044004407FFC000000001E100210022802C40000 +D6AC:01000FE007C00820082007C0044004407FFC000000001000100010001FF00000 +D6AD:01000FE007C00820082007C0044004407FFC0000000020F8201020303ECC0000 +D6AE:01000FE007C00820082007C0044004407FFC0000202021FC207020883E700000 +D6AF:01000FE007C00820082007C0044004407FFC00001FF01000100010001FF00000 +D6B0:01000FE007C00820082007C0044004407FFC00001FF000101FF010001FF00000 +D6B1:01000FE007C00820082007C0044004407FFC00003EF802083E0820083E080000 +D6B2:01000FE007C00820082007C0044004407FFC00003EF802883E8820883EF80000 +D6B3:01000FE007C00820082007C0044004407FFC00003E8802883EF820883EF80000 +D6B4:01000FE007C00820082007C0044004407FFC00003E1002103E1020283EC40000 +D6B5:01000FE007C00820082007C0044004407FFC00003EF802803EF820803EF80000 +D6B6:01000FE007C00820082007C0044004407FFC00003EFC02483E4820483EFC0000 +D6B7:01000FE007C00820082007C0044004407FFC00003E2003FC3E7020883E700000 +D6B8:01000FE007C00820082007C0044004407FFC00001FF01010101010101FF00000 +D6B9:01000FE007C00820082007C0044004407FFC0000101010101FF010101FF00000 +D6BA:01000FE007C00820082007C0044004407FFC0000222022203E2022503E880000 +D6BB:01000FE007C00820082007C0044004407FFC000000000100010002800C400000 +D6BC:01000FE007C00820082007C0044004407FFC00000000024002400DA033100000 +D6BD:01000FE007C00820082007C0044004407FFC0000000007C00820082007C00000 +D6BE:01000FE007C00820082007C0044004407FFC0000000007E00080014006200000 +D6BF:01000FE007C00820082007C0044004407FFC0000008007E00080014006200000 +D6C0:01000FE007C00820082007C0044004407FFC00001FF000101FF0001000100000 +D6C1:01000FE007C00820082007C0044004407FFC00001FF010001FF010001FF00000 +D6C2:01000FE007C00820082007C0044004407FFC000000001FF0044004401FF00000 +D6C3:01000FE007C00820082007C0044004407FFC000001001FF007C0082007C00000 +D6C4:0000010001000FE0000007C00820082007C000003FF801000100010001000000 +D6C5:01000FE007C00820082007C000007FFC010001001FF000100010001000100000 +D6C6:01000FE007C00820082007C000007FFC0100010000003EF80208020802080000 +D6C7:01000FE007C00820082007C000007FFC0100010000001E100210022802C40000 +D6C8:01000FE007C00820082007C0000000007FFC010001001100100010001FF00000 +D6C9:01000FE007C00820082007C000007FFC01000100000020F8201020303ECC0000 +D6CA:01000FE007C00820082007C000007FFC01000100202021FC207020883E700000 +D6CB:01000FE007C00820082007C000007FFC010001001FF01000100010001FF00000 +D6CC:01000FE007C00820082007C000007FFC010001001FF000101FF010001FF00000 +D6CD:01000FE007C00820082007C000007FFC010001003EF802083E0820083E080000 +D6CE:01000FE007C00820082007C000007FFC010001003EF802883E8820883EF80000 +D6CF:01000FE007C00820082007C000007FFC010001003E8802883EF820883EF80000 +D6D0:01000FE007C00820082007C000007FFC010001003E1002103E1020283EC40000 +D6D1:01000FE007C00820082007C000007FFC010001003EF802803EF820803EF80000 +D6D2:01000FE007C00820082007C000007FFC010001003EFC02483E4820483EFC0000 +D6D3:01000FE007C00820082007C000007FFC010001003E2003FC3E7020883E700000 +D6D4:01000FE007C00820082007C000007FFC010001001FF01010101010101FF00000 +D6D5:01000FE007C00820082007C000007FFC01000100101010101FF010101FF00000 +D6D6:01000FE007C00820082007C000007FFC01000100222022203E2022503E880000 +D6D7:01000FE007C00820082007C000007FFC0100010000000100010002800C400000 +D6D8:01000FE007C00820082007C000007FFC010001000000024002400DA033100000 +D6D9:01000FE007C00820082007C000007FFC01000100000007C00820082007C00000 +D6DA:01000FE007C00820082007C000007FFC01000100000007E00080014006200000 +D6DB:01000FE007C00820082007C000007FFC01000100008007E00080014006200000 +D6DC:01000FE007C00820082007C000007FFC010001001FF000101FF0001000100000 +D6DD:01000FE007C00820082007C000007FFC010001001FF010001FF010001FF00000 +D6DE:01000FE007C00820082007C000007FFC0100010000001FF0044004401FF00000 +D6DF:01000FE007C00820082007C000007FFC0100010001001FF007C0082007C00000 +D6E0:0000040804083F8800081F08208820881F0800087FE8040804F8040804080000 +D6E1:04083F880E0811080E0800087FE8027802080000000007F80008000800080000 +D6E2:04083F880E0811080E0800087FE802780208000000003EF80208020802080000 +D6E3:04083F880E0811080E0800087FE802780208000000001F080108011401620000 +D6E4:04083F880E0811080E08000800087FE80278020802081000100010001FF80000 +D6E5:04083F880E0811080E0800087FE8027802080000000020F8201020303ECC0000 +D6E6:04083F880E0811080E0800087FE8027802080000202021FC207020883E700000 +D6E7:04083F880E0811080E0800087FE802780208000003F802000200020003F80000 +D6E8:04083F880E0811080E0800087FE802780208000007F8000807F8040007F80000 +D6E9:04083F880E0811080E0800087FE80278020800003EF802083E0820083E080000 +D6EA:04083F880E0811080E0800087FE80278020800003EF802883E8820883EF80000 +D6EB:04083F880E0811080E0800087FE80278020800003E8802883EF820883EF80000 +D6EC:04083F880E0811080E0800087FE80278020800000F8800880F8808140FA20000 +D6ED:04083F880E0811080E0800087FE80278020800003EF802803EF820803EF80000 +D6EE:04083F880E0811080E0800087FE80278020800003EFC02483E4820483EFC0000 +D6EF:04083F880E0811080E0800087FE80278020800003E1002FE3E3820443E380000 +D6F0:04083F880E0811080E0800087FE802780208000003F802080208020803F80000 +D6F1:04083F880E0811080E0800087FE80278020800000208020803F8020803F80000 +D6F2:04083F880E0811080E0800087FE8027802080000210821083F0821143F620000 +D6F3:04083F880E0811080E0800087FE8027802080000001000100010006801840000 +D6F4:04083F880E0811080E0800087FE80278020800000048004800A8011406620000 +D6F5:04083F880E0811080E0800087FE8027802080000000003F00408040803F00000 +D6F6:04083F880E0811080E0800087FE802780208000003F80020002000D003080000 +D6F7:04083F880E0811080E0800087FE8027802080000004003F8004000A003180000 +D6F8:04083F880E0811080E0800087FE802780208000003F8000803F8000800080000 +D6F9:04083F880E0811080E0800087FE802780208000003F8020003F8020003F80000 +D6FA:04083F880E0811080E0800087FE802780208000000000FF8022002200FF80000 +D6FB:04083F880E0811080E0800087FE802780208000000800FF803E0041003E00000 +D6FC:0000040A040A3F8A000A1F0A208A208A1F0A000A7FEA040A047A040A040A0000 +D6FD:04283FA80E2811280E2800287FA805E804280000000007F80008000800080000 +D6FE:04283FA80E2811280E2800287FA805E80428000000003EF80208020802080000 +D6FF:04283FA80E2811280E2800287FA805E80428000000001F080108011401620000 +D700:04283FA80E2811280E28002800287FA8042805E804281428100010001FF80000 +D701:04283FA80E2811280E2800287FA805E804280000000020F8201020303ECC0000 +D702:04283FA80E2811280E2800287FA805E804280000202021FC207020883E700000 +D703:04283FA80E2811280E2800287FA805E80428000003F802000200020003F80000 +D704:04283FA80E2811280E2800287FA805E80428000007F8000807F8040007F80000 +D705:04283FA80E2811280E2800287FA805E8042800003EF802083E0820083E080000 +D706:04283FA80E2811280E2800287FA805E8042800003EF802883E8820883EF80000 +D707:04283FA80E2811280E2800287FA805E8042800003E8802883EF820883EF80000 +D708:04283FA80E2811280E2800287FA805E8042800000F8800880F8808140FA20000 +D709:04283FA80E2811280E2800287FA805E8042800003EF802803EF820803EF80000 +D70A:04283FA80E2811280E2800287FA805E8042800003EFC02483E4820483EFC0000 +D70B:04283FA80E2811280E2800287FA805E8042800003E1002FE3E3820443E380000 +D70C:04283FA80E2811280E2800287FA805E80428000003F802080208020803F80000 +D70D:04283FA80E2811280E2800287FA805E8042800000208020803F8020803F80000 +D70E:04283FA80E2811280E2800287FA805E804280000210821083F0821143F620000 +D70F:04283FA80E2811280E2800287FA805E804280000001000100010006801840000 +D710:04283FA80E2811280E2800287FA805E8042800000048004800A8011406620000 +D711:04283FA80E2811280E2800287FA805E804280000000003F00408040803F00000 +D712:04283FA80E2811280E2800287FA805E80428000003F80020002000D003080000 +D713:04283FA80E2811280E2800287FA805E804280000004003F8004000A003180000 +D714:04283FA80E2811280E2800287FA805E80428000003F8000803F8000800080000 +D715:04283FA80E2811280E2800287FA805E80428000003F8020003F8020003F80000 +D716:04283FA80E2811280E2800287FA805E80428000000000FF8022002200FF80000 +D717:04283FA80E2811280E2800287FA805E80428000000800FF803E0041003E00000 +D718:0000040804083F8800081F08208820881F0800087FE804080408040804080000 +D719:04083F880E0811080E0800087FE8020802000000000007F80008000800080000 +D71A:04083F880E0811080E0800087FE802080200000000003EF80208020802080000 +D71B:04083F880E0811080E0800087FE802080200000000001F080108011401620000 +D71C:04083F880E0811080E08000800087FE80208020802081008100010001FF80000 +D71D:04083F880E0811080E0800087FE8020802000000000020F8201020303ECC0000 +D71E:04083F880E0811080E0800087FE8020802000000202021FC207020883E700000 +D71F:04083F880E0811080E0800087FE802080200000003F802000200020003F80000 +D720:04083F880E0811080E0800087FE802080200000007F8000807F8040007F80000 +D721:04083F880E0811080E0800087FE80208020000003EF802083E0820083E080000 +D722:04083F880E0811080E0800087FE80208020000003EF802883E8820883EF80000 +D723:04083F880E0811080E0800087FE80208020000003E8802883EF820883EF80000 +D724:04083F880E0811080E0800087FE80208020000000F8800880F8808140FA20000 +D725:04083F880E0811080E0800087FE80208020000003EF802803EF820803EF80000 +D726:04083F880E0811080E0800087FE80208020000003EFC02483E4820483EFC0000 +D727:04083F880E0811080E0800087FE80208020000003E1002FE3E3820443E380000 +D728:04083F880E0811080E0800087FE802080200000003F802080208020803F80000 +D729:04083F880E0811080E0800087FE80208020000000208020803F8020803F80000 +D72A:04083F880E0811080E0800087FE8020802000000210821083F0821143F620000 +D72B:04083F880E0811080E0800087FE8020802000000001000100010006801840000 +D72C:04083F880E0811080E0800087FE80208020000000048004800A8011406620000 +D72D:04083F880E0811080E0800087FE8020802000000000003F00408040803F00000 +D72E:04083F880E0811080E0800087FE802080200000003F80020002000D003080000 +D72F:04083F880E0811080E0800087FE8020802000000004003F8004000A003180000 +D730:04083F880E0811080E0800087FE802080200000003F8000803F8000800080000 +D731:04083F880E0811080E0800087FE802080200000003F8020003F8020003F80000 +D732:04083F880E0811080E0800087FE802080200000000000FF8022002200FF80000 +D733:04083F880E0811080E0800087FE802080200000000800FF803E0041003E00000 +D734:0000010001000FE0000007C00820082007C000007FFC04400440044004400000 +D735:01000FE007C00820082007C000007FFC044004401FF000100010001000100000 +D736:01000FE007C00820082007C000007FFC0440044000003EF80208020802080000 +D737:01000FE007C00820082007C000007FFC0440044000001E100210022802C40000 +D738:01000FE007C00820082007C0000000007FFC044004401440100010001FF00000 +D739:01000FE007C00820082007C000007FFC04400440000020F8201020303ECC0000 +D73A:01000FE007C00820082007C000007FFC04400440202021FC207020883E700000 +D73B:01000FE007C00820082007C000007FFC044004401FF01000100010001FF00000 +D73C:01000FE007C00820082007C000007FFC044004401FF000101FF010001FF00000 +D73D:01000FE007C00820082007C000007FFC044004403EF802083E0820083E080000 +D73E:01000FE007C00820082007C000007FFC044004403EF802883E8820883EF80000 +D73F:01000FE007C00820082007C000007FFC044004403E8802883EF820883EF80000 +D740:01000FE007C00820082007C000007FFC044004403E1002103E1020283EC40000 +D741:01000FE007C00820082007C000007FFC044004403EF802803EF820803EF80000 +D742:01000FE007C00820082007C000007FFC044004403EFC02483E4820483EFC0000 +D743:01000FE007C00820082007C000007FFC044004403E2003FC3E7020883E700000 +D744:01000FE007C00820082007C000007FFC044004401FF01010101010101FF00000 +D745:01000FE007C00820082007C000007FFC04400440101010101FF010101FF00000 +D746:01000FE007C00820082007C000007FFC04400440222022203E2022503E880000 +D747:01000FE007C00820082007C000007FFC0440044000000100010002800C400000 +D748:01000FE007C00820082007C000007FFC044004400000024002400DA033100000 +D749:01000FE007C00820082007C000007FFC04400440000007C00820082007C00000 +D74A:01000FE007C00820082007C000007FFC04400440000007E00080014006200000 +D74B:01000FE007C00820082007C000007FFC04400440008007E00080014006200000 +D74C:01000FE007C00820082007C000007FFC044004401FF000101FF0001000100000 +D74D:01000FE007C00820082007C000007FFC044004401FF010001FF010001FF00000 +D74E:01000FE007C00820082007C000007FFC0440044000001FF0044004401FF00000 +D74F:01000FE007C00820082007C000007FFC0440044001001FF007C0082007C00000 +D750:0000010001000FE0000007C00820082007C0000000007FFC0000000000000000 +D751:01000FE007C00820082007C0000000007FFC00001FF000100010001000100000 +D752:01000FE007C00820082007C0000000007FFC000000003EF80208020802080000 +D753:01000FE007C00820082007C0000000007FFC000000001E100210022802C40000 +D754:01000FE007C00820082007C0000000007FFC000000001000100010001FF00000 +D755:01000FE007C00820082007C0000000007FFC0000000020F8201020303ECC0000 +D756:01000FE007C00820082007C0000000007FFC0000202021FC207020883E700000 +D757:01000FE007C00820082007C0000000007FFC00001FF01000100010001FF00000 +D758:01000FE007C00820082007C0000000007FFC00001FF000101FF010001FF00000 +D759:01000FE007C00820082007C0000000007FFC00003EF802083E0820083E080000 +D75A:01000FE007C00820082007C0000000007FFC00003EF802883E8820883EF80000 +D75B:01000FE007C00820082007C0000000007FFC00003E8802883EF820883EF80000 +D75C:01000FE007C00820082007C0000000007FFC00003E1002103E1020283EC40000 +D75D:01000FE007C00820082007C0000000007FFC00003EF802803EF820803EF80000 +D75E:01000FE007C00820082007C0000000007FFC00003EFC02483E4820483EFC0000 +D75F:01000FE007C00820082007C0000000007FFC00003E2003FC3E7020883E700000 +D760:01000FE007C00820082007C0000000007FFC00001FF01010101010101FF00000 +D761:01000FE007C00820082007C0000000007FFC0000101010101FF010101FF00000 +D762:01000FE007C00820082007C0000000007FFC0000222022203E2022503E880000 +D763:01000FE007C00820082007C0000000007FFC000000000100010002800C400000 +D764:01000FE007C00820082007C0000000007FFC00000000024002400DA033100000 +D765:01000FE007C00820082007C0000000007FFC0000000007C00820082007C00000 +D766:01000FE007C00820082007C0000000007FFC0000000007E00080014006200000 +D767:01000FE007C00820082007C0000000007FFC0000008007E00080014006200000 +D768:01000FE007C00820082007C0000000007FFC00001FF000101FF0001000100000 +D769:01000FE007C00820082007C0000000007FFC00001FF010001FF010001FF00000 +D76A:01000FE007C00820082007C0000000007FFC000000001FF0044004401FF00000 +D76B:01000FE007C00820082007C0000000007FFC000001001FF007C0082007C00000 +D76C:00000008040804083F8800081F08208820881F0800087FE80008000800080000 +D76D:000004083F880E08110811080E0800087FE8000007F800080008000800080000 +D76E:000004083F880E08110811080E0800087FE8000000003EF80208020802080000 +D76F:000004083F880E08110811080E0800087FE8000000001F080108011401620000 +D770:000004083F880E08110811080E0800087FE8000008000800080008000FF80000 +D771:000004083F880E08110811080E0800087FE80000000010F8101010301ECC0000 +D772:000004083F880E08110811080E0800087FE800000808087F081C08220F9C0000 +D773:000004083F880E08110811080E0800087FE8000003F802000200020003F80000 +D774:000004083F880E08110811080E0800087FE8000007F8000807F8040007F80000 +D775:000004083F880E08110811080E0800087FE800003EF802083E0820083E080000 +D776:000004083F880E08110811080E0800087FE800003EF802883E8820883EF80000 +D777:000004083F880E08110811080E0800087FE800003E8802883EF820883EF80000 +D778:000004083F880E08110811080E0800087FE800001F0801081F0810141F620000 +D779:000004083F880E08110811080E0800087FE800003EF802803EF820803EF80000 +D77A:000004083F880E08110811080E0800087FE800003EFC02483E4820483EFC0000 +D77B:000004083F880E08110811080E0800087FE800001F08017F1F1C10221F1C0000 +D77C:000004083F880E08110811080E0800087FE8000003F802080208020803F80000 +D77D:000004083F880E08110811080E0800087FE800000208020803F8020803F80000 +D77E:000004083F880E08110811080E0800087FE80000110811081F0811141F620000 +D77F:000004083F880E08110811080E0800087FE80000001000100010006801840000 +D780:000004083F880E08110811080E0800087FE800000048004800A8011406620000 +D781:000004083F880E08110811080E0800087FE80000000003F00408040803F00000 +D782:000004083F880E08110811080E0800087FE8000003F80020002000D003080000 +D783:000004083F880E08110811080E0800087FE80000004003F8004000A003180000 +D784:000004083F880E08110811080E0800087FE8000003F8000803F8000800080000 +D785:000004083F880E08110811080E0800087FE8000003F8020003F8020003F80000 +D786:000004083F880E08110811080E0800087FE8000000000FF8022002200FF80000 +D787:000004083F880E08110811080E0800087FE8000000800FF803E0041003E00000 +D788:00000000040804083F880E08110820882088208811080E080008000800080000 +D789:000008087F081C082208220822081C0800080000000007F80008000800080000 +D78A:000008087F081C082208220822081C080008000000003EF80208020802080000 +D78B:000008087F081C082208220822081C080008000000001F080108011401620000 +D78C:000008087F081C082208220822081C080008000800001000100010001FF80000 +D78D:000008087F081C082208220822081C0800080000000020F8201020303ECC0000 +D78E:000008087F081C082208220822081C0800080000202021FC207020883E700000 +D78F:000008087F081C082208220822081C080008000003F802000200020003F80000 +D790:000008087F081C082208220822081C080008000007F8000807F8040007F80000 +D791:000008087F081C082208220822081C08000800003EF802083E0820083E080000 +D792:000008087F081C082208220822081C08000800003EF802883E8820883EF80000 +D793:000008087F081C082208220822081C08000800003E8802883EF820883EF80000 +D794:000008087F081C082208220822081C08000800000F8800880F8808140FA20000 +D795:000008087F081C082208220822081C08000800003EF802803EF820803EF80000 +D796:000008087F081C082208220822081C08000800003EFC02483E4820483EFC0000 +D797:000008087F081C082208220822081C08000800003E1002FE3E3820443E380000 +D798:000008087F081C082208220822081C080008000003F802080208020803F80000 +D799:000008087F081C082208220822081C08000800000208020803F8020803F80000 +D79A:000008087F081C082208220822081C0800080000210821083F0821143F620000 +D79B:000008087F081C082208220822081C0800080000001000100010006801840000 +D79C:000008087F081C082208220822081C08000800000048004800A8011406620000 +D79D:000008087F081C082208220822081C0800080000000003F00408040803F00000 +D79E:000008087F081C082208220822081C080008000003F80020002000D003080000 +D79F:000008087F081C082208220822081C0800080000004003F8004000A003180000 +D7A0:000008087F081C082208220822081C080008000003F8000803F8000800080000 +D7A1:000008087F081C082208220822081C080008000003F8020003F8020003F80000 +D7A2:000008087F081C082208220822081C080008000000000FF8022002200FF80000 +D7A3:000008087F081C082208220822081C080008000000800FF803E0041003E00000 +D7A4:00007FFE63866DF66DEE6DDE63DE7FFE7FFE61B66DB661866DF66DF67FFE0000 +D7A5:00007FFE63866DF66DEE6DDE63DE7FFE7FFE61866DBE61866DF66D867FFE0000 +D7A6:00007FFE63866DF66DEE6DDE63DE7FFE7FFE61CE6DBE618E6DB66DCE7FFE0000 +D7A7:00007FFE63866DF66DEE6DDE63DE7FFE7FFE61866DF661EE6DDE6DDE7FFE0000 +D7A8:00007FFE63866DF66DEE6DDE63DE7FFE7FFE61CE6DB661CE6DB66DCE7FFE0000 +D7A9:00007FFE63866DF66DEE6DDE63DE7FFE7FFE61CE6DB661C66DF66DCE7FFE0000 +D7AA:00007FFE63866DF66DEE6DDE63DE7FFE7FFE61866DB661866DB66DB67FFE0000 +D7AB:00007FFE63866DF66DEE6DDE63DE7FFE7FFE618E6DB6618E6DB66D8E7FFE0000 +D7AC:00007FFE63866DF66DEE6DDE63DE7FFE7FFE61C66DBE61BE6DBE6DC67FFE0000 +D7AD:00007FFE63866DF66DEE6DDE63DE7FFE7FFE618E6DB661B66DB66D8E7FFE0000 +D7AE:00007FFE63866DF66DEE6DDE63DE7FFE7FFE61866DBE618E6DBE6D867FFE0000 +D7AF:00007FFE63866DF66DEE6DDE63DE7FFE7FFE61866DBE618E6DBE6DBE7FFE0000 +D7B0:0040003000100010001003F00110001003F0011000100C1004D0071078100000 +D7B1:00000000000000000000000000000000030001001FF001003FF8000003000100 +D7B2:004000300010001000100010001000100010001001900C9C04F0071078100000 +D7B3:0048003600120012001200120012001200120012031E191209F20F1278020000 +D7B4:00080006000200020002000200020002001E00020302193209C20F0278020000 +D7B5:0008000600020002000200020002000200023FF20202021E0202021E00020000 +D7B6:0010008C006400240024002400240024002400247FE404240424042400040000 +D7B7:00480036001200120012001200120012001E00127FF211121112111200020000 +D7B8:00000000000000000000000000000000000000003FF808200BA000803FFC0000 +D7B9:00800060002000200020002000200020003C00200020002000E0072078200000 +D7BA:00080006000200020002000200020002001E00020002000200E2070278020000 +D7BB:00480036001200120012001200120012007200120012001200D2071278020000 +D7BC:00000000000000000000000000000000000000003FF80000038000803FFC0000 +D7BD:00000040013000D000500050005C00500050005C005000500E1002003FFC0000 +D7BE:0090046C03240124013C01240124013C01240124012401240024000400000000 +D7BF:011000CC00440044005C00440044005C00440044004400440044000400000000 +D7C0:0410034C01340114011401740114011401740114011401140114001400040000 +D7C1:000000200018000800080008000800080008070801003FF80000070001000100 +D7C2:00000020001800080008000800080008000839C808403FF80000000000000000 +D7C3:000000200018000800080008000800080008000800003FF80840084000000000 +D7C4:0048003600120012001200120012001200120012001200120012001200020000 +D7C5:00800060002000200020002000200020003C0020302038200820002000200000 +D7C6:0010008C00640024002400240024002401E40024302438240824002400040000 +D7C7:00007FFE63866DF66DEE6DDE63DE7FFE7FFE71866FF66FEE6FDE71DE7FFE0000 +D7C8:00007FFE63866DF66DEE6DDE63DE7FFE7FFE71CE6FB66FCE6FB671CE7FFE0000 +D7C9:00007FFE63866DF66DEE6DDE63DE7FFE7FFE71CE6FB66FC66FF671CE7FFE0000 +D7CA:00007FFE63866DF66DEE6DDE63DE7FFE7FFE71866FB66F866FB671B67FFE0000 +D7CB:0000000000000000000000000000000060FE2002200220FE2080268038FE0000 +D7CC:000000000000000000000078C00043FE402040304C4871840000000000000000 +D7CD:000000000000000000000000000000000000FDF8208020802080268018780000 +D7CE:00000000000000000000000000000000FFB62212221E22122212265E19920000 +D7CF:00000000000000000000000000000000FD98208820F82088208826F818880000 +D7D0:0000000000000000000000000000000000007C38200820082018262438C20000 +D7D1:00000000000000000000000000000000000078EE2022202220622492390A0000 +D7D2:0000000000000000000000000000000000007C7E200820082018262438C20000 +D7D3:00000000000000000000000000000000003C7C00207E20082018262438C20000 +D7D4:00000000000000000000000000000000000000007EFC1040107C13400C3C0000 +D7D5:00000000000000000000000000000000000000003DDC04443C4420443C440000 +D7D6:0000000000000000000000000000001C3DC0047E04483C5C206220623C5C0000 +D7D7:00000000000000000000000000000000000000007BDC08447BDC42047BC40000 +D7D8:0000000000000000000000000000001C7BC00A7E0A487A5C426243E27A1C0000 +D7D9:000000000000000000000000000004807A5E0A480BC87A48424843C87A4E0000 +D7DA:0000000000000000000000000000049E7A440A420BD27A4A424243C47A5E0000 +D7DB:000000000000000000000000000000083C08041C04223C22202220223C1C0000 +D7DC:0000000000000000000000000000000EF780101F1304F48E84918491F30E0000 +D7DD:000000000000000000001FF800081FF810001FF8000003E00410041003E00000 +D7DE:0000000000000000000000000000000000007DC044404440444044407C3E4000 +D7DF:0000000000000000000000000000000000007B30491049104910491078CC4000 +D7E0:00000000000000000000000000000000000000003E7C2244224422443E7C2040 +D7E1:0000000000000000000000000000000000000480F4889784948C9492F7A18000 +D7E2:00000000000000000000000000000000000000003EFC2220223022483E842000 +D7E3:000000000000000000000000000000004400227C22203E20222022203E3C0000 +D7E4:0000000000000000000000000000000049DE244424523DCA250225043DDE0000 +D7E5:000000000000000000000000000000004400227C22443E44224422443E7C0040 +D7E6:000000000000000000000000000000004488224422443E7C224422443E7C0000 +D7E7:000000000000000000000000000000009000485E4848788849484A287A2E0000 +D7E8:000000000000000000000000000000004400220022FC3E20223022483E840000 +D7E9:000000000000000000000000000000004478220022FC3E20223022483E840000 +D7EA:0000000000000000000000000000000000000800047C04440C441244617C0040 +D7EB:00000000000000000000000000000044007C0844047C04000C38124461380000 +D7EC:000000000000000000000000000000000000123C0904090419042684CC440000 +D7ED:000000000000000000000000000000000000123E0910091019102690CC5E0000 +D7EE:00000000000000000000000000000000000010200810082818442482C2FE0000 +D7EF:000000000000000000000000000000000000000010FC082018302448C2840000 +D7F0:000000000000000000000000000000000078100008FC082018302448C2840000 +D7F1:000000000000000000000000000000000000100008FC0840187C2440C23C0000 +D7F2:000000000000000000000000000000380000107C0810083818442444C2380000 +D7F3:0000000000000000000000000000000001102088108828F844888288FEF80000 +D7F4:0000000000000000000000000210010801F8210811F8287044888270FE000000 +D7F5:000000000000000000000000000000000800087C1C442244224422441C7C0040 +D7F6:000000000000000000000000000000380800087C1C102238224422441C380000 +D7F7:00000000000000000000000000000000000000003F4404440C7C1244217C0040 +D7F8:000000000000000000000000000000000000000001297D2911EF292945EF0108 +D7F9:00000000000000000000000000000000000000007EFC08201830244842840000 +D7FA:000000000000000000000000000000007800104048202820086010907B080000 +D7FB:0000000000000000000000000000000078FC10404840287C08401040783C0000 +D7FC:00007FFE63866DF66DEE6DDE63DE7FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +D7FD:00007FFE63866DF66DEE6DDE63DE7FFE7FFE618E6FB663B66FB66F8E7FFE0000 +D7FE:00007FFE63866DF66DEE6DDE63DE7FFE7FFE61866FBE638E6FBE6F867FFE0000 +D7FF:00007FFE63866DF66DEE6DDE63DE7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +F900:0080108810881FF8100800007FFE00000FF008100FF00810042002447FFE0000 +F901:00047FFE008010841FFE10841FFC10841FFC10840880050003000CC0703E0000 +F902:010001047FFE010011081FFC11081FF811081FF8110801047FFE010001000000 +F903:FFFE04403FF824483FF800001FF010101FF010101FF010101FF00C60F01E0000 +F904:410821FC21080978894857FE540421F82108C1F8410841F8C108C13841100000 +F905:010001083FFC210821083FF8210801047FFE410441047FFC4104010001000000 +F906:0800080008041FFE200440041FC41044104410441FC410440044003800100000 +F907:08400FE0084010807FFC11447F7C05447F6C05547D6C05447F7E05027CFC0000 +F908:08400FE0084010807FFC11447F7C05447F6C05547D6C05447F7E05027CFC0000 +F909:080008027F7E08127F1208127F22084E098401007FFE020002C00C30700E0000 +F90A:0080018002400420081010086FF6010001083FFC01001118091009247FFE0000 +F90B:01029142FFE29112911297D29552955297D29552F39295420922111E01040000 +F90C:020002047FFE02400420181867E6000000083FFC00801890108C238441040000 +F90D:2214221E2FD42224B27EAFA2AABEAAA22FBE2222233E26A22A94222222422000 +F90E:010010841FFE92205FBC52481FBE12A232BEDFA2923E232226BE4A9492220000 +F90F:3FFC224422443FFC0844109024FE79900A9014FC7E9000FC34902A904AFE0000 +F910:04207FFE04201FF812481FF808A012903DFE0A9014FC7E9028FC549054FE0000 +F911:110411FE112455FC7F2455FC544455F87C2455FE109214101A94E37242220000 +F912:41FC21242924FDFC092411FC2524282073FEAC20247020A82126222220200000 +F913:07FE4492349217FE024804FE1748FAFE17C8107E15481AFE3040C80087FE0000 +F914:2108210847D05454E7F824485454FFFE45500104FFFE05200910310EC1040000 +F915:2100110811FC010842902C9028601198160661F821082108610861F821080000 +F916:1080108810FC108855505920523050C8930610FC18842484248440FC80840000 +F917:00800888FCFC1108129010601060FD98120611F815081908E10841F801080000 +F918:04407FFE0440244011F8150845902A600890110817FE6108210821F861080000 +F919:0420FE24283E2824FE44AAA8AA10AA28CE4482FEFE4482448244FE7C82440000 +F91A:44407E48487C48887F4848307E3048487E8643FC02845684AA84AAFC0C840000 +F91B:0720F92091204A20FF201420FFA092A0BDA080A0BEA094A28CA292A2A39E0000 +F91C:02002744387E224432442A542A54224C224426443A44225C0448084070400000 +F91D:13DE125213DEFE5213DE12223BFE562253FE92AA93FE1222127212AA13260000 +F91E:13DE125213DE125257DE5A2253FE522293FE12AA1BFE262222B2432E82240000 +F91F:04207FFE04207EFC42847EFC42847EFC41045FF44AA44FE441044544593C0000 +F920:1208110827D0783C2792783E2BA852940FE008200FF808000FFE292244940000 +F921:0080208420843FFC00003FF820282FC821082FE829282FEA410A41269FD20000 +F922:47D02510251407DE845057D85524252427C0C00047FC44A4C4A4C4A44FFE0000 +F923:04207FFE04203F0024243F3E21403F9024083F8800001FF8124812487FFE0000 +F924:43E822882A88FFCE0A5013E826842A8473E0A80027F822A822A822A827FE0000 +F925:100010401020FC2413FE1000140C1908F1085090109010909020702427FE0000 +F926:49247E484A4849244BFC7AA44A544BFC48407B684AD84B684ADABB6692420000 +F927:212422482248A924FFFCAAA4AA54ABFCF800AB6822D82B6836DAE26643420000 +F928:010020843FFE240022BE2FE428A42FA828A82FA428A229322BAC4CA088200000 +F929:10444A7E7F44424442447E7C424442447E444A7C44444A4452A4E11C42080000 +F92A:2080124813FC020842082BF82A08120813F86244224822306290670822060000 +F92B:00404C20292411FE310449FC890419FC294249448928091049483B8611020000 +F92C:1024093E3FA4212421283F28212821243F242122242222322D2C712020200000 +F92D:010001047FFE010011101110111029284384054009201110210C410401000000 +F92E:0040804060A02890090812461422282023FCC0084010402041C0402000100000 +F92F:04101554165824900A2811443FFE200241043FF8010802080488087030200000 +F930:107C124013FEFE4413FA124216FE1AA4F3FE52A412FC122095FE7842239C0000 +F931:109010F81110FFFC112411FC392455FC5554924A91FC110411FC110411FC0000 +F932:107C124013FE124457FA5A4252FE52A892F812A81AF8240025FC495497FE0000 +F933:011001F821003FFE21042FF8210223FE224823F822482FFC292449249FFE0000 +F934:01000100010C3FE8011001247FFE0080010006300CC017046404040603FC0000 +F935:04207FFE04A010F81FFE11041FF8110213FE124813F8124817F825285FFE0000 +F936:01F801003FFE21042FF0210227FE24483FFE244827F820802FFC41048E380000 +F937:00407C44447E448445487C305448108651025CFC508450845C84F0FC40840000 +F938:1FF841027FFE81043D7801403E7822483ED02B30084E2EF828887EF820880000 +F939:04400FE010883FFC51081FF811081FF8244422224FF208100FF008100FF00000 +F93A:3E7C22443EB808442EFA28887FF810101FF010101FFC10001FFE292244940000 +F93B:0044047CFE88108811F020103FFE6420A52224B4246827A43D2224E200400000 +F93C:208410FC1088FD0805F0081013FE3020592C94A8147010A8172612E210400000 +F93D:108810FC2088250845F0F81013FE2820FD2C44A8007028A8552656E280400000 +F93E:042004207FFE042003E0022007E000447FFE108808D006A00890738E21040000 +F93F:1044187C1444228840F8FC1011FE1020FF2694B4586851A81E26F0E240400000 +F940:010020843FFE222022243FFE22243FFC280428202FA4283829A25E22883E0000 +F941:202010201050FC88010602FA780003FE7A5202527BFE4A524A527A524A460000 +F942:087E7F40147C7F04227C3E40227C3E40227E2E42243E00801FF800847FFE0000 +F943:7FFC010001103FF8010001047FFE082008247FFE082008201020202040200000 +F944:10401F7E289045483F7E2240147C7F04227C3E40227C3E40227C2242263E0000 +F945:08807EFC14807FFC22043EFC22803EFE22827FFE08100FF008107FFE00100000 +F946:010020843FFE2004490809100FF81100210001047FFE01000100010001000000 +F947:00047FFE020007F00C10141067F002047F7E10201E3C326452A41E3C12240000 +F948:44807E8444FE44847D48463044487C86450244FC7C844484288444FC84840000 +F949:1FF841027FFE81043D7801003D78010020083FFC21083FF821083FF820080000 +F94A:1FF011101FF011101FF01010FEFE9292FEFE9292FEFE01103FF80104FFFE0000 +F94B:3FFC200420043FFC24883FFE24882FFC28842FFC21003FFE222041609F9E0000 +F94C:102011FC112413FEFD2411FC182035FC552451FC904097FE1090107017CE0000 +F94D:2080124413FE020442042BFC2A041228122463FE222024506488690632020000 +F94E:440427FE240407FC840057FE542027FE2622C73246AA4B32CAAAD2AA62260000 +F94F:1FFC10841FFC10841FFC1104022004601F8002083FFC108404A01B9861060000 +F950:1020102021FC252447FEF92413FE2A22FFFE442003FE288855905460839E0000 +F951:8804F9FE88109090A2FEA292929292928AAA8AC6CA82B29E8284820083FE0000 +F952:22202220FFA022243EFE08247F24492449247F240844FF44088408BC09080000 +F953:24203E202420242425FE3C242424242424243C242444244424A45D1C88080000 +F954:00408FFE60002BFC0A9412F4120423FC2000C3F840404FFE4248444408420000 +F955:0040804863FC2840084417FE11082204248AC1FC430844904860419E0E040000 +F956:04200E28F1FC102015FEFE481086194236785088914812301050118E16040000 +F957:102011FC2020242447FEF88811042A82FCF84508028828505460559886060000 +F958:042004207FFE05201FF801007FFE04201A1863F604201A4001800670780E0000 +F959:8848FBFC88409044A7FEA090910C928488F88988CA90B4A0806081988E060000 +F95A:202013FEFC2001FC00007BFE025203FE790401FC790449FC490479FC4B060000 +F95B:080408FE7F44122824101A2811C660381FC000881FFC00807FFE008007800000 +F95C:2108210847D05454E7F824485454FFFE45500104FFFE05200910310EC1040000 +F95D:2088108813FEFC8800A80020782403FE784000FC79844A844C8478FC48840000 +F95E:00100FF80810081009100890089008107FFE0810081010101090207040200000 +F95F:010020843FFE250454A827E400001FF812487FFE00003FFC0080078001000000 +F960:080008040BFE7E44124424481C300A48118660020500248824A6242243F00000 +F961:010000847FFE01042248179001001A5067EC452401007FFE0100010001000000 +F962:10081FFC11081FF811081FF8144804403FFC044004447FFE0420181860060000 +F963:088008800880088C0888F89008E008800880088008801884E8844886087C0000 +F964:000E09F0FC26212420A823FE3CA86524A62225FE252225FE3D2225FE21020000 +F965:100417FE1040244427FE244467FCA44427FC244422402140208021402E3E0000 +F966:190411FE220045FC990411FC210461FCA08021FC230824902060219826060000 +F967:00047FFE008000800100030005200910110C2106410201000100010001000000 +F968:20001040102404244488288828881290129464A224A220C061846284247E0000 +F969:08407F404940FFC4497E7FC808487F4849487F481028FF90222C1C46F3820000 +F96A:01083FFC010021043FFE210442281FC0011002083FF4008404A01B9861060000 +F96B:0100022007D0101024247B7E018202407CBC03001C4001981E6001801E000000 +F96C:010020823FFE42241FFC02201FFC02207FFE0490088817F6208200847FFE0000 +F96D:01000D10090811662142408001080FFC18086FF808080FF808080FF808080000 +F96E:04207FFE042009107FFE091009F008000FFC00807FFE02C004A0189860860000 +F96F:210810881090FE2001FC0104FD040104FDFC0154FC5084508492FD12860E0000 +F970:028842FC248818882688410E140012FCFF84104838485430922810C613020000 +F971:10041FFE1000101017F8100010041FFE124012481250222022904F0884060000 +F972:204010401040024443FE2A442C48104010406040204020A061226222241E0000 +F973:1040104010A0FD101208100615FA1800F10851FC11081108910871F821080000 +F974:042004207FFE04200420010001047FFE020004080FFC1408640807F804080000 +F975:104010201024FFFE100011FC15041904F1FC5124102011A8912472E224420000 +F976:008044847EFE54845548543054487C86550254FC54847C84448400FC00840000 +F977:020001047FFE00000FF008100FF000003FFE200247C4044004421842603E0000 +F978:00047FFE010001047FFE41045144492449245554659441044124411C40080000 +F979:00808040604427FE080013FC1204220423FCC22440204230452848E410440000 +F97A:10080BFC4048254C094A0A4A30B8131010847FFE02C004A00890108E60840000 +F97B:11FC110495FC550459FC1000FDFE112419FC352455FC902011FC102013FE0000 +F97C:010008900FF8081008100FF0081008100FF00900088C08700B203C1810060000 +F97D:204010201024FFFE000001FC7D0401047DFC01247CA844A445227EE244400000 +F97E:1FF010101FF010101FF000047FFE11101FF011101FF001003FF801007FFE0000 +F97F:7FD049107FD049125FFE52525FD252525FD242125FD2525253D29C6E90C40000 +F980:08100FF80810081008100FF00910010012081FFC1008100810081FF810080000 +F981:020003000200020002047FFE042004200820082010400E8001800670780E0000 +F982:21043FFE208020F828802FFE28842FF82A4A2BFE2A482FF82D285528AFFE0000 +F983:104008400844FEFE2080251C3EE024A624A424982490249024A85DC688820000 +F984:4048207C244007FE844457FA544225FE2524C5FC452445FCCA94CA8A44FA0000 +F985:03FE0A48FFFE224822FC22947AFCCA944AFC4A104AFE4A927AFA4C8608820000 +F986:7E7E42427E7E42427E7E400247E2442247E241024FF248124FF2481E40040000 +F987:89DCFC0093FE92AAFEAA9020FDFE9150FDFC855405FC5594AED8A49218EE0000 +F988:3E7C00003E7C2A542B5400803FFC22403FF822483FF828522F6248429F3E0000 +F989:0E407842087E7E920C221A42299E4A4404A01898649603E004903B8C11040000 +F98A:01000100010001083FFC01080108010801080208020804080888107060200000 +F98B:3FFE21082E7022143FFE221027382AD4329227F8240827F8240847F884080000 +F98C:20043FFE20842F7822103FFE221027382AD6321220402440247C44409FFE0000 +F98D:21242124FD7422DAFB74A954FAFAAF56F820A82423FEFEB02128222624220000 +F98E:0C0008080FFC1080208048880FFC0880088008847FFE00800080008000800000 +F98F:124C1148115017FE58D055485246920813BE14881AA8117E1108120814080000 +F990:1204110427C8701C23C84812FBFE5254AA6AABAA040025042492241243F80000 +F991:1210121413D2FA9012FE159012901990F12852461C8210009324749228920000 +F992:4020282427FE042081FC512455FC2F2425FCC42047FE4420C420DA2051FE0000 +F993:1020102413FE102057FE5A22532652AA93FE1222187024A82526422280200000 +F994:00101410FAFE2210207E2052207EFF52217E2152211039FEE1104690047E0000 +F995:002000F03F000104FFFE054009203118C0761F800108FFFC0100010001000000 +F996:102413FE202027FE4622FB2612AA2BFEFA224420007028A85526562280200000 +F997:0488FE88255227BC3C88255427DC3C22255427542D54F5DC4454049005100000 +F998:08103F7C08107F7E142822C440823FFE08880FF808880FF800807FFE00800000 +F999:04207FFE0420204017FC104003F8024873F8124813F8104017FC684047FE0000 +F99A:0040404437FE104003FC024413FCFA4413FC1244104017FE3040C84087FE0000 +F99B:1020182415FE222041FEFD2211A6116AFFFE9522587050A81F26F22240200000 +F99C:01027F820822082209220FA21122312249220A22042204020812100E60040000 +F99D:0100010019181106211A402001C00680188467FE0084010402240C1C30080000 +F99E:020293FEFA229222922293FA9222922292629252F28A930A020203FE02020000 +F99F:01047F84082408240FA41124312449240A04041C780800002444222242220000 +F9A0:01047FA408241F2431240A243D1C00887FFE028004480C50742007180C060000 +F9A1:210810881090FE2001FC0104FD040104FDFC0154FC5084508492FD12860E0000 +F9A2:21043FFE222021442FFE21402FF821483FFE21482FF8214023604550994C0000 +F9A3:01000280044008201110608C00000FE000200140048024842412441203F80000 +F9A4:102010201050FC881126121215FC1808F010501012C412A2928A7488207C0000 +F9A5:0420FE202050208825763E0225DC6554955415DC0800088810882156C2220000 +F9A6:10401F7E28907FFE24202FFC22402FF822483FFE22482FF826504A48B2460000 +F9A7:01244E482A48112433FC4A548AA41BFC28404B688AD80B6A4A5A3B6612420000 +F9A8:008001800240042009101088208640121FF8001000200640018000C000400000 +F9A9:20043FFE2104218422442524389C20042FF420442384208420843FFC20040000 +F9AA:010020843FFE250454A827E400001FF812487FFE00003FFC0080078001000000 +F9AB:108410841FFC00000BFE142022FC498404FC7F8402FC048438FC044805860000 +F9AC:1040104010A011105A0854465422902013FC1008101010A01060103010100000 +F9AD:00200860FC501088110412421022FC20100811FC14081810E0E0401000100000 +F9AE:08102A542C584890142822447FFE40043FF8010001001FF8012001147FFE0000 +F9AF:442024202850FE50108810A67D12101010FCFE04100810D02020401080100000 +F9B0:0220FF20245024503C88254626223C20240025FC2E08F4484430041004100000 +F9B1:10201820145022884106FE4210201020FE0495FE580850501E20F01040100000 +F9B2:1FF841027FFE81043D7801003D7806C01930E08E0FF000200040038000600000 +F9B3:1FF841027FFE81043D7801007BDE4A527BDE00007FFC091019302548FFFE0000 +F9B4:080409FE082014FC2284498484FC04847FFC0284248418FC0884085803860000 +F9B5:080008420FE21212125233F25452965219521092109211121102121E14040000 +F9B6:205011FC1154FDFC055409FC100033FE580095FC150411FC1088105013FE0000 +F9B7:0428FEFE28AA28FEFEAAAAFEAA00ABFECE0082FCFE8482FC8284FE4883FE0000 +F9B8:10201024FFFE18243424D3FE10247DFC0124FEA210B4586897A4B12210620000 +F9B9:00047FFE02403E7C200420043E7C02407FFE0000048024442452241243F80000 +F9BA:00083FFC00080010002000C00080008000800080008000800880078001000000 +F9BB:084008440FFE10A2151433F8560C9BFA120813F810401248144419C210420000 +F9BC:010020843FFE21045FFC24281FF028184FF608100FF000800CB0138C21040000 +F9BD:10041FFE100410041FFC104410401F4C1268125012502448244649C240800000 +F9BE:0808490849482A2828280A08FF4808280C281A0E2A3849C88888080808080000 +F9BF:2108210847D05454E7F824485454FFFE45500104FFFE05200910310EC1040000 +F9C0:1040104017FE14A2531455F85B0C55FA910811F818202528262444E288420000 +F9C1:008010441FFE90405FFE551413F8120C37FADA0893F82040225045C888860000 +F9C2:04207FFE042000007EFC12240E1C326403800C60771E00600F9800603F800000 +F9C3:0040404437FE1294010803FC150AF9F8110811F81128122634E2C84087FE0000 +F9C4:104008447F7E2240147C7F04007C3E40227C3E40227C3E40227E2E42243E0000 +F9C5:10101FF810101FF050127FFE81047FFC11101FF011101FF001007FFE01000000 +F9C6:44087DFC44004800500453FE48904890449044906490591242124412480E0000 +F9C7:180267C242524A525A5265929E122112DED204127F922492150217DE7C040000 +F9C8:100813FC10881088FC881088188837F854885088908890881088108817FE0000 +F9C9:104010D2131E1252FE5212521A523652525253D2925290561092111012100000 +F9CA:2080104417FE0040409029082BFC1004124862482248224A624A644A28460000 +F9CB:408025FE2612041284925562564E24842000C7FC444447FCC444C7FC44040000 +F9CC:00400824FDFE10201040108811FCFC041128112815281928E22A442A08260000 +F9CD:0200270438FE204422447D5C20881FF8108810881FF8108810881FF810080000 +F9CE:00400424FFFE1040108823FC3C846400A4A824A824A824A83D2A222A04260000 +F9CF:1000100423FE24444444F84410442844FDFC4484008428845484548487FE0000 +F9D0:49042AFE2A10087C7F441C442A7C49440A7C09447F44087C1444222842C60000 +F9D1:020001000180008000047FFE0000000004200420081008101008200640020000 +F9D2:F720112855243320552699F808201422E3A2082472280D12722A0C46F1820000 +F9D3:8840F8488BFC9040A044A7FE9090910C8A448840C848B3FC804080448FFE0000 +F9D4:0840086008901108121635FA500097FE1492149217FE14921492149214860000 +F9D5:0100210821083FF8210802800C60F7DE00003FF824483FF82448244824180000 +F9D6:204010C010A0011042082DF6280017FC14A464A427FC24A464A464BC24080000 +F9D7:10201020FE5010887D0656FA54007DFC55547D5455FC1154FF541154110C0000 +F9D8:184813FC204840489FFE104823F86048A04023FC2040204427FE204020400000 +F9D9:100417FE109013FE5A92569253FE9202102417FE102011B01128122614220000 +F9DA:00047FFE02401FF8124812481FF8108800847FFE02C004A00890108E60840000 +F9DB:010000847FFE01042248179001001A5067EC452401007FFE0100010001000000 +F9DC:8908FDFC8A089090A060A198960691F888008928CBFCB42081FC802087FE0000 +F9DD:010207827C1204120492FFD204120E1215122492449284020412040E04040000 +F9DE:008000847FFE008010841FFE108410841FFC108408800480030004C0783E0000 +F9DF:3FFC20043FFC208024FE298432FC228424FC2C40347C24C82530444885860000 +F9E0:08100FF808100FF008100FF0081004040FFE1124222444440884113802100000 +F9E1:010001047FFE05400920111861060FF0004000847FFE00800480038001000000 +F9E2:03043C2404247FA40C241624251C448800847FFE02C004A00890108E20840000 +F9E3:220413FE1204020443FC2A042A40124C124862502260244064426842303E0000 +F9E4:010409FEFD24112411FC11241124FDFC11241020142019FCE020402407FE0000 +F9E5:010010841FFE908051C25712111217D23112D192935225522902411E81040000 +F9E6:3FFC224422443FFC2044112011FE5B20552091FC112011FC1120112411FE0000 +F9E7:01047FFE00000FF808880FF808883FFC00807FFE028804501CA0651806060000 +F9E8:410421FE2924FD2409FC1124252429FC7124AC20242021FC2020202427FE0000 +F9E9:10081FFC110811081FF8110811081FF81108010001083FFC010001047FFE0000 +F9EA:10500848FFC8557E494849C8557E7F4808487F48497E55487B48417E47400000 +F9EB:40047FFE422042205FFC42A041045FFE420047F84A08520843F842087FFE0000 +F9EC:408227BE20820082879E5492541027BE28A2C4924186469AD8E2C71C42080000 +F9ED:010000847FFE08100420024001800E70700E1FF81008100810081FF810080000 +F9EE:1222112410A813FE54A859245222510891DE124819A824BE2508420884080000 +F9EF:02221124F8A823FE20A821242222FA0823BE228826A839FEE108420804080000 +F9F0:04207FFE04203E7C22443E7C22443E7C27E42C8437E4248427E4249C27E80000 +F9F1:8A4CF948895097FEA150A2489C4692088BBE8C88CAA8B13E8208840888080000 +F9F2:21243D2424A84BFCFCA8552456227D0855FE55487F4844E854BEAB08AA080000 +F9F3:08A444647F2854FE7F28556455A27F0454EE54A45D2456B4545E5D8497040000 +F9F4:08200820082008247FFE082008201CB02AA8292849244A240C22082208200000 +F9F5:42102210221002948FFE52105310229026B8CA5452525212C210C21042100000 +F9F6:8480FE8490FE910092F8FC88848884F88400FFDE925292529252FFDE82520000 +F9F7:02000100008000883FFC000008100810042004200240024000847FFE00000000 +F9F8:102010201F3E285044880100008000883FFC042004200240024000847FFE0000 +F9F9:104092209220540455FE1000FE84108418883448524852509010901013FE0000 +F9FA:044024502448244824403FFE045004507C502450244824482484450686020000 +F9FB:0200021007F80C203240088007000C807098089008A0114002200C1830060000 +F9FC:2110109013F4FD52015200907BFE00107BD202527BD44A484BCA7A5648220000 +F9FD:08400840084010401040304057FE904010401040104010401040104010400000 +F9FE:042004207FFE0420058002400420189860861FF8008004A00890108E60840000 +F9FF:08020882FFD208128892FFD2889288928B9288921C122A024992888E08040000 +FA00:2000200423FE204424442E44F044204422442444284430842144023804100000 +FA01:010020843FFE222022243FFE222023E0200027F82210212020C043309C0E0000 +FA02:1000100413FEFC4010401040148419FEF284548410841084908470FC20840000 +FA03:1040112495FE552059FC1124FDFE112419FC352055FC9284128414FC18840000 +FA04:020041087FFC4008809001C07E000410043807C0FC0004040404040603FC0000 +FA05:220413FE1204020446F42A042A0412F41294629422F422946204621C22080000 +FA06:1FF010101FF010101FF004403FFC04407FFE11102928474405C01930630C0000 +FA07:11FE1000FEFC10847C8454FC7C0055FE7D22552211FEFF22112211FE11020000 +FA08:180811FC200040000C040BFE1010301050109010101010101090107010200000 +FA09:44887CFC44884950502050504B8E482045FC44A065245BFE4020402040200000 +FA0A:00201FF0102010201FE0102010201FE0102010201FE014A408843086C07C0000 +FA0B:20843FFE22003FDE20122F9428942F9820143FD22112221A2F9442108E100000 +FA0C:0008FFFC08800880088008800880088008801080108420844086807C00000000 +FA0D:0848087C7F4808483F48008E7F0082FE3E4400443E28221022283E4622820000 +FA0E:10500848FEFE459026FC189008FC149024FEC0803FF00820044003800C60F01C +FA0F:2090208821042240F84020A020902108220425FA21083908C108010801F80108 +FA10:120213FE1404100013FEFC401086174412A811301EE8E0A84124062200C00000 +FA11:204020202BFEA800A908A890AFFEA808ABC8AA48AA48BBC8CA48000800280010 +FA12:00204BFE7C2049FC48204FFE780049FC490449FC490479FC4904011C01080000 +FA13:1088108813FE1088FC8810443884357E51045324951411141104110411141108 +FA14:12441124108813FEFC9011083A1434E2502051F8902013FC1020102010A01040 +FA15:8BD46A9E2A940A941BD42A5C2A54CBD04A92529263EE00002444222242220000 +FA16:00404C40284611F4304848508BFE184029FC4B04890409FC490439FC11040000 +FA17:08300420024002447FFE04200810100C60041FF812481248124812487FFE0000 +FA18:00403E40004000407F4008402A402A402A402A404A404A4008420842083E0000 +FA19:202010201124FDFE0524092411FC31245924952415FC11241020102010200000 +FA1A:210C10881050FFFE04200820102031FC58209420142413FE1020102010200000 +FA1B:200413FE1000FCF80488088810F8300059FC952415FC1124112411FC11040000 +FA1C:202023FE102011FCFC2003FE440045FC290429FC11041DFCE104411C01080000 +FA1D:102413FE922054FC542011FEFE0010FC188434FC528492FC1084109C10880000 +FA1E:02047FFE0E1C121422244244060C0A14122422444284020412240E1C04080000 +FA1F:0440FFFE044004403EFC228422FC3E8422FC22403EFE232222D2428A4AF2840C +FA20:0820FFFE08A01CF0F11012F810A8FCF810A831FC392455FC552491FC1022101E +FA21:202021202120F9FCAA20AC20A820A820A9FCF820A820202028203820CBFE0000 +FA22:204010401044FDF4004800507BFE004079FC0284788448FC488478FC48840000 +FA23:100810481028FE08108810481008FE0E11F810085C085008500870088C0083FE +FA24:000023FC10880888409020BC10840084F0C411481128121014282844448283FE +FA25:011041F83110122407FE02441244FBFC106010A811261622301EC80087FE0000 +FA26:082408BE3EA409240A287FE8042809241FA431225F221132112C1F2011200000 +FA27:1020102029FE4424B82813FE10207C4010FC1308541039FE10101C10E0500020 +FA28:1020102029FC4420B82017FE11047C8811FC102054203BFE10201C20E0200020 +FA29:00407C8045F8490849F8510851F8490045FE450045FC5884449447F440044018 +FA2A:1008189C14E02A804884BEFE22A43EA422A83EA820A8249026A87B4622820000 +FA2B:100019FE14022A0248FABE0222F23E9222923E9220F2249226027A1E20040000 +FA2C:1020181014922AFE4904BEF822883E8822F83E8020FC248426847AFC20840000 +FA2D:1030102092FCFE84A2FC28847EFC4880FEFE48807EFE480248AA7F5641540000 +FA2E:0800087C7E44424842487E50424842487E4451444A4444684450524062404040 +FA2F:10201020FCFC102411FE7C2400FC7C200124FCA8107054A85324922210A03040 +FA30:090009040BFE140013F83288524892081FFE12881248120817FE100810700000 +FA31:09080890081013FE1222332652AA93FE100011FC110411FC110411FC11040000 +FA32:080008801FC0108021107FF8A210221022103FF02290048408843086C07C0000 +FA33:202022203F20222444FEFF24492449247F24494408441884291A480287FE0000 +FA34:2220FFA022203E2408FE7F2449247F240824FFA408447F4408A40F9CF1080000 +FA35:010022083FFC208820883FF821083FF82288048008847FFE0080008000800000 +FA36:020893FCFA0893F8920893F89288910293FE9622FA229252028A03F2001C0000 +FA37:011097FEF91091F0904097FC944497FC904097FCF0409FFE00A003180C060000 +FA38:22443F7E224422443E7C012002147FFE081012087F7E224422443E7C22440000 +FA39:11FE1102110211FEFD44112811FE1148154819FEE24842480488090800000000 +FA3A:10081FFC14A812A81FF800801FFC00807FFE144812A620821FF800847FFE0000 +FA3B:3FFC200420043FFC222421402FFC2A9429242FFC240827F8440847F884080000 +FA3C:010001000100210421042104210421043FFC21040100010002000C0070000000 +FA3D:1200120413FE14005BF85288524892481FFE12881248124817FE100810700000 +FA3E:200424BE278824A8B4A8AFA8A4A827FE24102518249825A82E4A248A210E0000 +FA3F:110C1088109013FE5A22572652AA93FE120211FC110411FC110411FC11040000 +FA40:0110355027D4405E97B4201467D4A10827D421262FC204842452241243F80000 +FA41:202021203FA02024407E3EC82A482A48FFC852284A304A107FA802460C820000 +FA42:44047EFE441044507C50449044947DFE4410401048304C505492E112420E0000 +FA43:0FF008100FF008100FF409081FF001207FFE008007F87C0807F8040807F80000 +FA44:1100110413FE1000FDFC11441924352457FE52889248924817FE100810700000 +FA45:4200220423FE0C008BF85288524822482FFEC48844484448C7FEC01040E00000 +FA46:00402040104403F8405028642FFE108011FC23046DFC2104210421FC21040000 +FA47:41102FFE211001F0804057FC544427FC2040C7FC40404FFEC080C3304C0E0000 +FA48:01000FEC010801107FFE008007F00C1017F0641007F004102444222242220000 +FA49:001000F83F00010C108808900820000000000000000000000000000000000000 +FA4A:00040BFEFC401080114C124812B07D2012B0106814A81924E222452008C00000 +FA4B:012405FEFF24112411FC21243D2465FCA5442490251427FE3C10241000100000 +FA4C:202010201020FC200420082811FC302058209420142010201020102413FE0000 +FA4D:202010201020FC2005200924113E312059209520152011201120112417FE0000 +FA4E:2008109C10E0FC800480088410FE308858889488148811081108120814080000 +FA4F:204010401044FDFE044008401080308459FE968414841084108410FC10840000 +FA50:210811FC1108FD080508090811F831085908950815F811081108110817FE0000 +FA51:210411FE1104FD040504090411FC3154585094501450105210921112120E0000 +FA52:208810FC1088FC8804B808A810A833FE5A0296F2129212F21292120E12040000 +FA53:20201024103EFC2005FC090411FC310459FC950415FC11041050108813060000 +FA54:0848FFFC08487F4800487F8E81003EFC00487E4808487F302A30494889860000 +FA55:010020843FFE200444481830614C012001047FFE0100028004401830600E0000 +FA56:104010401F7E289045083E7C22443E4422443E44224424442E5C734821400000 +FA57:102413FE202027FE4622FB2612AA2BFEFA224420007028A85526562280200000 +FA58:100413FE208824884552FBDE10002BFEFC0045FC010429FC550455FC81040000 +FA59:20203FBE55443FA415181FA6014202101FE002107FFC208400A01B9861060000 +FA5A:3FFC224422443FFC21041FE801107FFE008007F80C0837F8040807F804080000 +FA5B:020002083FC802100224FFFE010002100FF818102810CFF008100FF008100000 +FA5C:09100FF808100FF008100FF008100FF0082000947FFE014002200C1E70040000 +FA5D:000000000000042004207FFE0420042000000000000000000000000000000000 +FA5E:000000000000042004207FFE0420042000000000000000000000000000000000 +FA5F:042004207FFE052001081FD001207FFE010007F81C0867F8040807F804080000 +FA60:41FC210429FCFD0409FC1124244028FE7122AF222552218A210221F2200C0000 +FA61:21FC1104110405FC7F04090411FC3904550495FC1154105010521092170E0000 +FA62:210411FE1104FDFC010401FC794000FE792203227952498A490279F2480C0000 +FA63:2088108813FEFC8800F8002079FC012479FC00207BFE482049FC78204BFE0000 +FA64:21043FFE20045FF40510092031400FF078100FF008100FF008100FF0381C0000 +FA65:890CFC8888508BFEFA228B268AAAFBFE880089FCF90489FC510489FC89040000 +FA66:400030001000000000001000F80010001000100010003000C80087FE00000000 +FA67:011041F83110122407FE02441244FBFC106010A811261622301EC80087FE0000 +FA68:22A0FF9022903EFE09907E904A907EFC08907E9008FCFF90149422FE42800000 +FA69:111E27D27A5413D82A567A92135C60901FF804447FFE08100FF008100FF00000 +FA6A:080409FE28202EFC28842884FFFC088428FC288449848AFC0484185861860000 +FA6B:01300108FFFE01003FF8210821083FF8210821083FF80100258C24966632C3E0 +FA6C:00007F7E480248027F02417E41407F40484248427F7E00002488224442448004 +FA6D:102038202DFE67024102FCF810881088FEF8008000807CFC4484448444847CFC +FA6E:00007FFE61866FB663866FB66FB67FFE7FFE73866FBE638E6DBE73867FFE0000 +FA6F:00007FFE61866FB663866FB66FB67FFE7FFE73866FBE638E6DBE73BE7FFE0000 +FA70:1010082004407FFC0440044004404444244414481450044004400440FFFE0000 +FA71:47F8240824080408040817F811202120E1202120222022222422281E10000000 +FA72:0100010002800440082010102FE8C106010001001FF00100010001007FFC0000 +FA73:10041FC414842494249464946494AFD424942494249424942484288428943088 +FA74:02000100FFFE04000400082010103FF80448044004400440084408441044603C +FA75:04447C7804421C3EE4003FF821083FF821083FF804403FF80440FFFE10102008 +FA76:3FF0066001803FF821083FF821083FF82108220802007FF80408080810506020 +FA77:0800080010001FF8200840088008040802080108010800080008000800500020 +FA78:03F87A084BF84A084BF849004BFC4C444A447AA44A0403F40004002800100000 +FA79:0100010079FC4A044D0449E44A8448844FF448847AA44AA403E4000400280010 +FA7A:010001F8F20893F0901097FE90809144966890B0F128966800A4012206A00040 +FA7B:01F87908490849F84908490849F848004BFC7A944A940294029407FE00000000 +FA7C:200027FE2402280427FEF8802184224426A821303AF0E4A8412802240CA20040 +FA7D:102011FC1020108813FEFC8811FC110411FC110411FC1D04E1FC408801040202 +FA7E:020002007FFC044009203118DFF6111011101FF0111011101FF40104010400FC +FA7F:020002007FFC044009203118CFE60100092008207FFC08200820102010202020 +FA80:1040108011FC1124FD2425FC2524254425FC4890291013FE2810441084100010 +FA81:2108209023FE2108F9084A524B9C49088A524BDE304010A42AAA4A8A84780000 +FA82:010000803FFE22102F90221E2FA422243FD4241427942488448848948AA41142 +FA83:010000803FFE200027FC244427FC244427FC211027FC21102FFE400042088404 +FA84:010007847804088844902522200204047F880C10162215022484440884100460 +FA85:0808083C13C020044A44092811FC3220502093FE102011241124112411FC1004 +FA86:100013FE1202128A1A5257FE5242522293FE12821282128212FA1202120A1204 +FA87:2040204027FC204033F8AA08A3F8A208A3F8220823F822082FFE211022082404 +FA88:010002800C6037D8C0063E0822483E4822483E482208261801004884481287F2 +FA89:11041088100013FE1A2256AA5272522293FE100011FC110411FC110411FC1104 +FA8A:21082108210827D0311EAF94A124AFD4A21423D422542248224824D424242842 +FA8B:22204AA08ABE1FC420A46F24A0282FA822102FA822442F8201004884481287F2 +FA8C:08207F280824FFFE00207F2049247F2449247F2822287F102212FFAA22464182 +FA8D:204020A021102208FDF6200023C42A543254E3D42254225423D42244A25442C8 +FA8E:10A0112C11241124FDAC1124112415FC182031FCD08810501020105050882306 +FA8F:200023FC22042204FBFC220022842A4832FCE248224823FE24482448A8885108 +FA90:0820082008207F3E08443E440844FFA410281E281210121022282A4844848102 +FA91:002000207BFE482049FC48204BFE780049FC490449FC490479FC490401140108 +FA92:1000087C7E44424442447E7C424442447E44407C484444445A84628441140208 +FA93:1000087CFF44207C2044267C3844209401087FFC010001003FF801000100FFFE +FA94:1010101010101010FDFE10103010391055105490909010501020105011881606 +FA95:FFFE02000200040007F8080810102410422001400080010002000C0070000000 +FA96:040044782848104828484486920010FCFE441044582854289210122850442182 +FA97:0080204017FE10808110420847FC100410002248E24822482248224A244A0846 +FA98:0004203E17C0124481244128420013FC14402040EFFE20402444244427FC0004 +FA99:01082088109017FE810841084210129414A42738E1082210221024A427BC0084 +FA9A:0110211017FE111081F040404BF80A4813F81040E7FC20402FFE20A02110060C +FA9B:022042202FB822480F90827C4F9450141FFE2894EF9428FC2F9428902A900930 +FA9C:020002083FD00220FFFE01000FF03810CFF0081008100FF00000488844448444 +FA9D:00A0009079FE49104B107DFE4910491079FE4910491049FE79004AA402520452 +FA9E:00FC7F00220811107FFC44447FFC00087E0842FE7E0842487E28480874284210 +FA9F:440029F81108290849088908090819282910490089020902090250FE20000000 +FAA0:0040884453F42048505097FE1040108031F85308950811F811081108A1F84108 +FAA1:00200020FBFE202021FC210421FCF90421FC210421FC3904E3FE408801040202 +FAA2:082004407FFC12483CF0082014503EF800007FFC08000FE0092010A41624181C +FAA3:FFFE000000004FE4492449244FE44924492449244FE4400440047FFC00040000 +FAA4:008000401FFE100097FC54A454A417FC30405150924814442150224844448040 +FAA5:010000803FFE200027F8A40867F8240827F86000AFFC2924292449247FFE8000 +FAA6:101008200000FFFE000008201010200840043FF82448244824482448FFFE0000 +FAA7:009000883FFC208020883E48225022244A54448C81043FF824482448FFFE0000 +FAA8:010001007FFC01001FF0101010101FF010101FF010101FF010101010FFFE0000 +FAA9:00FC7C84448444FC7C0045FE45027D0245FE450245027DFE4502010A01040000 +FAAA:082004407FFC01003FF80200FFFE04000FF018102FF0C8100FF008100FF00810 +FAAB:00200020FBFE202021FC410479FC4904C9FC490449FC49047BFE488801040202 +FAAC:020001007FFE4822909411F822886870ABAE282029FC282028A8292422A42040 +FAAD:104010403F7E4890850800007E7C42447E4442447E44484444545A4862404040 +FAAE:01001110092001007FFC05400920111060080100FFFE0280044008203018C006 +FAAF:108010F811082290206065986646A48825F02420244825FC2020212422A22040 +FAB0:1020102023FE242045FCF92411AC21744924FDFC0420007054A8552482220020 +FAB1:208420483C0050FC90481048FE48104811FE5448544854485C48648804880108 +FAB2:020002083FD002200240FFFE010002000FF0181028104FF0881008100FF00810 +FAB3:08200820FFFE0A200100FFFE100010001FF8000011101110111021124112810E +FAB4:04400440FFFE04407FFC11101110FFFE111011107FFC0100FFFE010001000100 +FAB5:100010F810887C8854F85488548854F87C0051FC115415541D54E55443FE0000 +FAB6:200013BE00A2F0A210BE238822086A3EB22A2BAA20AA20BE2088208A257E2202 +FAB7:FFFE04403FF824483FF8120027FC42088BF8120833F8510093F8151010E0171E +FAB8:200011FC1104F90409FC1104110439FC5504950411FC1050109010921112120E +FAB9:200011FC0124FD240174792401FC7904017479544954497449047A044A140408 +FABA:2020102201FAFC2400287BFE0020784000FC79844A8448FC4884788448FC0084 +FABB:2020102003FEFC2001FC782003FE780001FC790449FC490449FC790449140108 +FABC:200011FC1104FDFC01047DFC00807DFE02227D224552450245FA7C0244140008 +FABD:2088108803FEFC8800A8782003FE7840008078FC49844A844884788448FC0084 +FABE:204010A00110FA0805F6780003C47A5402547BD44A544A544BD47A444A5402C8 +FABF:2088108803FEFC8800F8782001FC792401FC78204BFE482049FC78204BFE0000 +FAC0:210447C88812F3BC20084B92F83E0380AAAAABAA08001FF8282007C01830E00E +FAC1:0104788848004BFE7A224AAA4A727A224BFE480079FC010451FC490489FC0104 +FAC2:204020A02110FA0825F6F800ABC4FA54AA54FBD42254FA5423D42244225422C8 +FAC3:07FC440427FC242004A80470E4A8250424A024FC252024202BFE282050208FFE +FAC4:0050FE9628922892FED6AA92AA92AAFEAE10C2FC8244FE4482288210FE2882C6 +FAC5:100213E22942254A414AB94A114A13EAFD4A114A954A594A51421E42E24A4444 +FAC6:00207C2245FA4824482853FE4820484044FC4584468468FC5084408440FC4084 +FAC7:22282224FF40227E3EC809487F7E49487F48087E7F480848FF48147E22404140 +FAC8:2020102013FEFC2001FC08208BFE880049FC490451FC51041DFCE10441140108 +FAC9:104410447DFE2444FE4401FE7C4044FE7D9212FE7C9210FE50927C9210921086 +FACA:110023DE7A5213D42A527BDA1294235001003FF80440FFFE10101FF010101FF0 +FACB:7EFE401040205EFC5284528452FC5A8454FC5084528454FC5848508481020000 +FACC:080008FE28102E2028FC2884FF8400FC08842AFC2A844C8484FC08483084C102 +FACD:3F042018FF62220C7F7001007FFC01001FF0101011101110FFFE082010102008 +FACE:04003FF820083EF802807A800AFCFE940AD47AA402A47AD40A94FEFC0A8279FE +FACF:20CC273021103110AFFEA110A2A824282844210222902A482A543214221021F0 +FAD0:20CC273021103110AFFEA110A2A82428284423FA220823F82208220823F82208 +FAD1:10281024102013FEFC2010A838A834A850A850A89128112A122A142610201020 +FAD2:2000229E22522252F5522112229272526C32A3D2A25A22542250225023D02250 +FAD3:03FC789048904890789048904FFE789048904890489079104910021004100000 +FAD4:0020002078204BFE482078204924492479244AAA482048507850488801040202 +FAD5:02200220F47C94449DA8F510952895D6F51095FE95109538F454949204100410 +FAD6:10401F7E28904508BEF822883EF822883EF820082EE824482EE8244828482018 +FAD7:1044108813DEFC881088108813DEFC88108810885C885108520870008C0083FE +FAD8:20007CFC44847CFC44847CFC0040FEFE9312FE9292AAFE8200FAFE0244148408 +FAD9:3FFE22202FBC2520223C3F84203C2FA028BC2FA028BC2FA048BC48A2899E0000 +FADA:00007FFE61866FB663866FB66FB67FFE7FFE63866DB66D866DB663B67FFE0000 +FADB:00007FFE61866FB663866FB66FB67FFE7FFE638E6DB66D8E6DB6638E7FFE0000 +FADC:00007FFE61866FB663866FB66FB67FFE7FFE63C66DBE6DBE6DBE63C67FFE0000 +FADD:00007FFE61866FB663866FB66FB67FFE7FFE638E6DB66DB66DB6638E7FFE0000 +FADE:00007FFE61866FB663866FB66FB67FFE7FFE63866DBE6D8E6DBE63867FFE0000 +FADF:00007FFE61866FB663866FB66FB67FFE7FFE63866DBE6D8E6DBE63BE7FFE0000 +FAE0:00007FFE61866FB663866FB66FB67FFE7FFE61CE6FB663B66FB661CE7FFE0000 +FAE1:00007FFE61866FB663866FB66FB67FFE7FFE61EE6FCE63EE6FEE61C67FFE0000 +FAE2:00007FFE61866FB663866FB66FB67FFE7FFE61866FF663866FBE61867FFE0000 +FAE3:00007FFE61866FB663866FB66FB67FFE7FFE618E6FF663C66FF6618E7FFE0000 +FAE4:00007FFE61866FB663866FB66FB67FFE7FFE61B66FB663866FF661F67FFE0000 +FAE5:00007FFE61866FB663866FB66FB67FFE7FFE61866FBE63866FF661867FFE0000 +FAE6:00007FFE61866FB663866FB66FB67FFE7FFE61CE6FBE638E6FB661CE7FFE0000 +FAE7:00007FFE61866FB663866FB66FB67FFE7FFE61866FF663EE6FDE61DE7FFE0000 +FAE8:00007FFE61866FB663866FB66FB67FFE7FFE61CE6FB663CE6FB661CE7FFE0000 +FAE9:00007FFE61866FB663866FB66FB67FFE7FFE61CE6FB663C66FF661CE7FFE0000 +FAEA:00007FFE61866FB663866FB66FB67FFE7FFE61866FB663866FB661B67FFE0000 +FAEB:00007FFE61866FB663866FB66FB67FFE7FFE618E6FB6638E6FB6618E7FFE0000 +FAEC:00007FFE61866FB663866FB66FB67FFE7FFE61C66FBE63BE6FBE61C67FFE0000 +FAED:00007FFE61866FB663866FB66FB67FFE7FFE618E6FB663B66FB6618E7FFE0000 +FAEE:00007FFE61866FB663866FB66FB67FFE7FFE61866FBE638E6FBE61867FFE0000 +FAEF:00007FFE61866FB663866FB66FB67FFE7FFE61866FBE638E6FBE61BE7FFE0000 +FAF0:00007FFE61866FB663866FB66FB67FFE7FFE61CE6FB663B66FB66FCE7FFE0000 +FAF1:00007FFE61866FB663866FB66FB67FFE7FFE61EE6FCE63EE6FEE6FC67FFE0000 +FAF2:00007FFE61866FB663866FB66FB67FFE7FFE61866FF663866FBE6F867FFE0000 +FAF3:00007FFE61866FB663866FB66FB67FFE7FFE618E6FF663C66FF66F8E7FFE0000 +FAF4:00007FFE61866FB663866FB66FB67FFE7FFE61B66FB663866FF66FF67FFE0000 +FAF5:00007FFE61866FB663866FB66FB67FFE7FFE61866FBE63866FF66F867FFE0000 +FAF6:00007FFE61866FB663866FB66FB67FFE7FFE61CE6FBE638E6FB66FCE7FFE0000 +FAF7:00007FFE61866FB663866FB66FB67FFE7FFE61866FF663EE6FDE6FDE7FFE0000 +FAF8:00007FFE61866FB663866FB66FB67FFE7FFE61CE6FB663CE6FB66FCE7FFE0000 +FAF9:00007FFE61866FB663866FB66FB67FFE7FFE61CE6FB663C66FF66FCE7FFE0000 +FAFA:00007FFE61866FB663866FB66FB67FFE7FFE61866FB663866FB66FB67FFE0000 +FAFB:00007FFE61866FB663866FB66FB67FFE7FFE618E6FB6638E6FB66F8E7FFE0000 +FAFC:00007FFE61866FB663866FB66FB67FFE7FFE61C66FBE63BE6FBE6FC67FFE0000 +FAFD:00007FFE61866FB663866FB66FB67FFE7FFE618E6FB663B66FB66F8E7FFE0000 +FAFE:00007FFE61866FB663866FB66FB67FFE7FFE61866FBE638E6FBE6F867FFE0000 +FAFF:00007FFE61866FB663866FB66FB67FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +FB00:0000001B2424247E2424242424240000 +FB01:0000001A2220207E2222222222220000 +FB02:0000001E2222227A2222222222220000 +FB03:000000162A28287E2A2A2A2A2A2A0000 +FB04:0000001E2A2A2A7E2A2A2A2A2A2A0000 +FB05:000000384848485E4848484848460000 +FB06:0000001C242424364444241414620000 +FB07:00007FFE618E6FB6638E6FB66F8E7FFE7FFE73866DF66DEE6DDE73DE7FFE0000 +FB08:00007FFE618E6FB6638E6FB66F8E7FFE7FFE73CE6DB66DCE6DB673CE7FFE0000 +FB09:00007FFE618E6FB6638E6FB66F8E7FFE7FFE73CE6DB66DC66DF673CE7FFE0000 +FB0A:00007FFE618E6FB6638E6FB66F8E7FFE7FFE73866DB66D866DB673B67FFE0000 +FB0B:00007FFE618E6FB6638E6FB66F8E7FFE7FFE738E6DB66D8E6DB6738E7FFE0000 +FB0C:00007FFE618E6FB6638E6FB66F8E7FFE7FFE73C66DBE6DBE6DBE73C67FFE0000 +FB0D:00007FFE618E6FB6638E6FB66F8E7FFE7FFE738E6DB66DB66DB6738E7FFE0000 +FB0E:00007FFE618E6FB6638E6FB66F8E7FFE7FFE73866DBE6D8E6DBE73867FFE0000 +FB0F:00007FFE618E6FB6638E6FB66F8E7FFE7FFE73866DBE6D8E6DBE73BE7FFE0000 +FB10:00007FFE618E6FB6638E6FB66F8E7FFE7FFE7BCE73B67BB67BB671CE7FFE0000 +FB11:00007FFE618E6FB6638E6FB66F8E7FFE7FFE7BEE73CE7BEE7BEE71C67FFE0000 +FB12:00007FFE618E6FB6638E6FB66F8E7FFE7FFE7B8673F67B867BBE71867FFE0000 +FB13:000000000814305D5555555555330000 +FB14:000000000C1414575454555555360000 +FB15:000000000C1414565555555555350404 +FB16:00000000503C1455555555555533101C +FB17:00000000182828ADADADADADAD6A0808 +FB18:00007FFE618E6FB6638E6FB66F8E7FFE7FFE7BCE73B67BCE7BB671CE7FFE0000 +FB19:00007FFE618E6FB6638E6FB66F8E7FFE7FFE7BCE73B67BC67BF671CE7FFE0000 +FB1A:00007FFE618E6FB6638E6FB66F8E7FFE7FFE7B8673B67B867BB671B67FFE0000 +FB1B:00007FFE618E6FB6638E6FB66F8E7FFE7FFE7B8E73B67B8E7BB6718E7FFE0000 +FB1C:00007FFE618E6FB6638E6FB66F8E7FFE7FFE7BC673BE7BBE7BBE71C67FFE0000 +FB1D:00000000001C04040400040000000000 +FB1E:0042423C000000000000000000000000 +FB1F:000000000077111111003E0000000000 +FB20:00000000001212121212121212FE0000 +FB21:00000000000000000000300C300C0C0C030C0CF030C03030300C300C00000000 +FB22:000000000000000000003FFC0030003000300030003000300030003000000000 +FB23:000000000000000000003FFC000C000C0C0C0C0C0C0C0C0C0C0C0C0C00000000 +FB24:000000000000000000003FFC000C000C000C000C000C000C000C3FF000000000 +FB25:0000000000000C000C000FFC000C000C000C000C0030003000C00F0000000000 +FB26:00000000000000000000FFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFC00000000 +FB27:000000000000000000003FFC000C000C000C000C000C000C000C000C00000000 +FB28:000000000000000000000FFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C3C0C00000000 +FB29:00000000000000080808087F00000000 +FB2A:000000010049494949494949497F0000 +FB2B:000000400049494949494949497F0000 +FB2C:0000000100494949494D4949497F0000 +FB2D:0000004000494949494D4949497F0000 +FB2E:0000000000464222122C484442411C00 +FB2F:0000000000464222122C484442411C08 +FB30:0000000000424222122C484442410800 +FB31:00000000007C040404240404047F0000 +FB32:000000000030080808440C1422420000 +FB33:00000000007E04040424040404040000 +FB34:00000000007E0202222A222222220000 +FB35:00000000003808080828080808080000 +FB36:0000000000300C0A0828080808080000 +FB37:00007FFE618E6FB6638E6FB66F8E7FFE7FFE63867DF671EE7DDE63DE7FFE0000 +FB38:0000000000464A4242524242427E0000 +FB39:00000000003808080820000000000000 +FB3A:00000000007E02020212020202020202 +FB3B:00000000007E020202120202027C0000 +FB3C:00000020203E02020212040408300000 +FB3D:00007FFE618E6FB6638E6FB66F8E7FFE7FFE638E7DB671B67DB6638E7FFE0000 +FB3E:00000000004E31214149414141470000 +FB3F:00007FFE618E6FB6638E6FB66F8E7FFE7FFE63867DBE718E7DBE63BE7FFE0000 +FB40:00000000001C040404240404043C0000 +FB41:00000000007E42424252424244780000 +FB42:00007FFE618E6FB6638E6FB66F8E7FFE7FFE6D866DF661867DBE7D867FFE0000 +FB43:00000000007E42424272020212020202 +FB44:00000000007E424242720212027E0000 +FB45:00007FFE618E6FB6638E6FB66F8E7FFE7FFE6D866DBE61867DF67D867FFE0000 +FB46:000000000042422418084402027E0000 +FB47:00000000007E222A2224282020202020 +FB48:00000000007E02020212020202020000 +FB49:0000000000494949494D4949497F0000 +FB4A:00000000003E2222222A222222620000 +FB4B:00000020003808080808080808080000 +FB4C:00000070007C040404040404047F0000 +FB4D:00000070007E020202020202027C0000 +FB4E:00000070007E424242720202027E0000 +FB4F:0000602020464222122C484442420000 +FB50:040A1E20080808080808080000000000 +FB51:102878802020202020201F0000000000 +FB52:000000000000000422423C0008000800 +FB53:000000000000000422423F0008000800 +FB54:00000000000000080404F80008000800 +FB55:00000000000000080404FF0008000800 +FB56:000000000000000422423C0014000800 +FB57:000000000000000422423F0014000800 +FB58:00000000000000080404F80014000800 +FB59:00000000000000080404FF0014000800 +FB5A:000000000000000422423C0014001400 +FB5B:000000000000000422423F0014001400 +FB5C:00000000000000080404F80014001400 +FB5D:00000000000000080404FF0014001400 +FB5E:000008000800000422423C0000000000 +FB5F:000008000800000422423F0000000000 +FB60:00000800080000080404F80000000000 +FB61:00000800080000080404FF0000000000 +FB62:000014001400000422423C0000000000 +FB63:000014001400000422423F0000000000 +FB64:00001400140000080404F80000000000 +FB65:00001400140000080404FF0000000000 +FB66:000020203838000422423C0000000000 +FB67:000020203838000422423F0000000000 +FB68:000010101C1C00080404F80000000000 +FB69:000010101C1C00080404FF0000000000 +FB6A:0008001200060A0642423C0000000000 +FB6B:0008001200060A0642423F0000000000 +FB6C:0010002400003824140CF80000000000 +FB6D:0010002400003824140CFB0000000000 +FB6E:000A000A00060A0642423C0000000000 +FB6F:000A000A00060A0642423F0000000000 +FB70:0028002800003824140CF80000000000 +FB71:0028002800003824140CFB0000000000 +FB72:00000000000000007E1020484048221C +FB73:00000000000000007E1423484048211E +FB74:0000000000000000700CFC0020002000 +FB75:0000000000000000700CFF0020002000 +FB76:00000000000000007E1020405440221C +FB77:00000000000000007E1423405440211E +FB78:0000000000000000700CFC0050000000 +FB79:0000000000000000700CFF0050000000 +FB7A:00000000000000007E2040544048221C +FB7B:00000000000000007E2241544048211E +FB7C:0000000000000000700CFC0028001000 +FB7D:0000000000000000700CFF0028001000 +FB7E:00000000000000007E2040544054221C +FB7F:00000000000000007E2443544054211E +FB80:0000000000000000700CFC0050005000 +FB81:0000000000000000700CFF0050005000 +FB82:000000000000080402427C0028000000 +FB83:000000000000080402427F0028000000 +FB84:000000280000080402427C0000000000 +FB85:000000280000080402427F0000000000 +FB86:000010002800080402427C0000000000 +FB87:000010002800080402427F0000000000 +FB88:002020383800080402427C0000000000 +FB89:002020383800080402427F0000000000 +FB8A:00000008001400000402020204483000 +FB8B:00000008001400000402030204483000 +FB8C:00000008080E0E000402020204483000 +FB8D:00000008080E0E000402030204483000 +FB8E:00000004081020403C827E0000000000 +FB8F:00000004081020403C827F0000000000 +FB90:00000004081020403C02FE0000000000 +FB91:00000004081020403C02FF0000000000 +FB92:00081024481020403C827E0000000000 +FB93:00081024481020403C827F0000000000 +FB94:00081024481020403C02FE0000000000 +FB95:00081024481020403C02FF0000000000 +FB96:00081024481020403C827E0010001000 +FB97:00081024481020403C827F0010001000 +FB98:00081024481020403C02FE0010001000 +FB99:00081024481020403C02FF0010001000 +FB9A:00500618620C30403C827E0000000000 +FB9B:00500618620C30403C827F0000000000 +FB9C:00500618620C30403C02FE0000000000 +FB9D:00500618620C30403C02FF0000000000 +FB9E:00000000000000000422424244380000 +FB9F:00000000000000000422434244380000 +FBA0:000010101C1C00000422424244380000 +FBA1:000010101C1C00000422434244380000 +FBA2:000010101C1C00080404F80000000000 +FBA3:000010101C1C00080404FB0000000000 +FBA4:001820182000101824243C0000000000 +FBA5:1820182004040C14243C070000000000 +FBA6:000000000000101824243C0000000000 +FBA7:000000000000000000102F4000000000 +FBA8:00000000000000000010F01010140800 +FBA9:00000000000000000010F31414140808 +FBAA:000000000000102C2A1A244000000000 +FBAB:000000000000102C2A1A274000000000 +FBAC:000000000000102C2A1AE40000000000 +FBAD:000000000000102C2A1AE70000000000 +FBAE:00000000000000000008141020407F00 +FBAF:000000000000000000000F1020407F00 +FBB0:00000000003040304008141020407F00 +FBB1:000000000030403040000F1020407F00 +FBB2:00001818000000000000000000000000 +FBB3:00000000000000000000000000001818 +FBB4:00000C6C600000000000000000000000 +FBB5:000000000000000000000000000C6C60 +FBB6:003030006C6C00000000000000000000 +FBB7:00000000000000000000003030006C6C +FBB8:006C6C00181800000000000000000000 +FBB9:00000000000000000000006C6C001818 +FBBA:000C6C60031B18000000000000000000 +FBBB:000000000000000000000C6C60031B18 +FBBC:00000000000000000000000024241212 +FBBD:003030000C0C00000000000000000000 +FBBE:000000000000000000003030000C0C00 +FBBF:00000000000000000000000814242810 +FBC0:0010101C1C0000000000000000000000 +FBC1:00000000000000000000000010101C1C +FBC2:00007FFE618E6FB6638E6FB66F8E7FFE7FFE71866FF66F866FBE71867FFE0000 +FBC3:00007FFE618E6FB6638E6FB66F8E7FFE7FFE718E6FF66FC66FF6718E7FFE0000 +FBC4:00007FFE618E6FB6638E6FB66F8E7FFE7FFE71B66FB66F866FF671F67FFE0000 +FBC5:00007FFE618E6FB6638E6FB66F8E7FFE7FFE71866FBE6F866FF671867FFE0000 +FBC6:00007FFE618E6FB6638E6FB66F8E7FFE7FFE71CE6FBE6F8E6FB671CE7FFE0000 +FBC7:00007FFE618E6FB6638E6FB66F8E7FFE7FFE71866FF66FEE6FDE71DE7FFE0000 +FBC8:00007FFE618E6FB6638E6FB66F8E7FFE7FFE71CE6FB66FCE6FB671CE7FFE0000 +FBC9:00007FFE618E6FB6638E6FB66F8E7FFE7FFE71CE6FB66FC66FF671CE7FFE0000 +FBCA:00007FFE618E6FB6638E6FB66F8E7FFE7FFE71866FB66F866FB671B67FFE0000 +FBCB:00007FFE618E6FB6638E6FB66F8E7FFE7FFE718E6FB66F8E6FB6718E7FFE0000 +FBCC:00007FFE618E6FB6638E6FB66F8E7FFE7FFE71C66FBE6FBE6FBE71C67FFE0000 +FBCD:00007FFE618E6FB6638E6FB66F8E7FFE7FFE718E6FB66FB66FB6718E7FFE0000 +FBCE:00007FFE618E6FB6638E6FB66F8E7FFE7FFE71866FBE6F8E6FBE71867FFE0000 +FBCF:00007FFE618E6FB6638E6FB66F8E7FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +FBD0:00007FFE618E6FB6638E6FB66F8E7FFE7FFE63CE6DB66DB66DB663CE7FFE0000 +FBD1:00007FFE618E6FB6638E6FB66F8E7FFE7FFE63EE6DCE6DEE6DEE63C67FFE0000 +FBD2:00007FFE618E6FB6638E6FB66F8E7FFE7FFE63866DF66D866DBE63867FFE0000 +FBD3:100028020A120A2242423C0000000000 +FBD4:100028020A120A2242423F0000000000 +FBD5:20005004081020403C02FE0000000000 +FBD6:20005004081020403C02FF0000000000 +FBD7:000018180810200C12121E0204483000 +FBD8:000018180810200C12121F0204483000 +FBD9:000000221408000C12121E0204483000 +FBDA:000000221408000C12121F0204483000 +FBDB:000000080404000C12121E0204483000 +FBDC:000000080404000C12121F0204483000 +FBDD:000033341324400C12121E0204483000 +FBDE:000008001200000C12121E0204483000 +FBDF:000008001200000C12121F0204483000 +FBE0:000000000000000C12121E021C483000 +FBE1:000000000000000C12121F021C483000 +FBE2:000000081422000C12121E0204483000 +FBE3:000000081422000C12121F0204483000 +FBE4:000000000000000C5248443800100010 +FBE5:00000000000000004C52493000100010 +FBE6:00000000000000080804F80008000800 +FBE7:00000000000000080804FB0008000800 +FBE8:00000000000000080804F80000000000 +FBE9:00000000000000080804FB0000000000 +FBEA:0000004C504C50404444380000000000 +FBEB:0000004C504C504044443B0000000000 +FBEC:000000060806080002122C4000000000 +FBED:000000060806080002122D4000000000 +FBEE:00000003040304102A2A3C0808106000 +FBEF:00000003040304102A2A3D0808106000 +FBF0:00003033142344102A2A3C0808106000 +FBF1:00003033142344102A2A3D0808106000 +FBF2:00008853242304102A2A3C0808106000 +FBF3:00008853242304102A2A3D0808106000 +FBF4:00000023141304102A2A3C0808106000 +FBF5:00000023141304102A2A3D0808106000 +FBF6:000C100C1004040C5048443800100010 +FBF7:00000C100C1000044C52493000100010 +FBF8:00000608060800222212EC0020002000 +FBF9:00000608060802020206484442423C00 +FBFA:00000608060800020205484442423C00 +FBFB:00000608060800222212EC0000000000 +FBFC:0000000000000000044A484442423C00 +FBFD:00000000000000000000434442423C00 +FBFE:00000000000000080804F80028000000 +FBFF:00000000000000080804FB0028000000 +FC00:0000006080608C30407E20404840221C +FC01:0000006080608C30407E20404040221C +FC02:000000182018230408083C4040404040 +FC03:000000304030440202224446221C0000 +FC04:000000304030440202224446221C0014 +FC05:0000000000000C30407E20424840221C +FC06:0000000000000C30407E20424040221C +FC07:0000000020000C30407E20424040221C +FC08:000000000000030408083C4140404040 +FC09:000000000000040202224446221C0100 +FC0A:000000000000040202224446221C0114 +FC0B:0000000028000C30407E20424040221C +FC0C:0000000028000C30407E20404040221C +FC0D:0000000028008C30407E20404040221C +FC0E:000000050000030408083C4040404040 +FC0F:000000001400040202224446221C0000 +FC10:000000001400040202224446221C0014 +FC11:0000004000A00C30407E20404840221C +FC12:000000100028030408083C4040404040 +FC13:000000200050040202224446221C0000 +FC14:000000200050040202224446221C0014 +FC15:000000700C020C30407822404040221C +FC16:000000300C02030408083C4140404040 +FC17:000000700C020C30407E20424040221C +FC18:000000300C02030408083C4040404040 +FC19:000004700C020C30407E20404840221C +FC1A:000004700C020C30407E20404040221C +FC1B:000000310C02030408083C4040404040 +FC1C:000000000000255A407E20424040221C +FC1D:000000000000255A407E20404040221C +FC1E:000000004000255A407E20404040221C +FC1F:00000000000000000000000001940268040004001E0020002000200020002000 +FC20:0000000006091E28407E20404040221C +FC21:00000000000000000038004401F80240040004001E0020002000200020002000 +FC22:0000000026091E28407E20404840221C +FC23:0000000026091E28407E20404040221C +FC24:0000000026891E28407E20404040221C +FC25:00000000000000000138004401F80240040004001E0020002000200020002000 +FC26:000000202C323C20407E20404040221C +FC27:0000000808080E0916103C4040404040 +FC28:000000080A080E0916103C4040404040 +FC29:0000003040381020407E20404840221C +FC2A:000000000C100F0408083C4040404040 +FC2B:0000803040381020407E20404840221C +FC2C:000008000C100F0408083C4040404040 +FC2D:00008020503010207E1020404840211E +FC2E:00008020503010207E1020404040211E +FC2F:00008020503090207E1020404040211E +FC30:00000040102818081020103840404040 +FC31:00000400000C0A0602464844423C0000 +FC32:00000400000C0A0602464844423C0028 +FC33:0000005000205030407E20404840221C +FC34:00002800102818081020103840404040 +FC35:00001400000C0A0602464844423C0000 +FC36:00001400000C0A0602464844423C0028 +FC37:000000048890A0C0BC827C0000000000 +FC38:0000000008102010207E20404840221C +FC39:0000000008102010207E20404040221C +FC3A:0000000008102090207E20404040221C +FC3B:000000101012141814121C9090909060 +FC3C:000000040810201008103C4040404040 +FC3D:0000000000000010002000400080008000400880110011800880070000000000 +FC3E:0000000000000010002000400080008000400880110011800880070000000500 +FC3F:00001010101010207E1020404840211E +FC40:00001010101010207E1020404040211E +FC41:00001010105010207E1020404040211E +FC42:000000080808080808083C4040404040 +FC43:00000002020202020206484442423C00 +FC44:000000020202020202064844423C0028 +FC45:0000000000000C30407E20404840221C +FC46:0000000000000C30407E20404040221C +FC47:0000000000200C30407E20404040221C +FC48:000000000000030408083C4040404040 +FC49:000000000000020204084442423C0000 +FC4A:000000000000020204084442423C0028 +FC4B:0000000008000C30407E20404840221C +FC4C:0000000008000C30407E20404040221C +FC4D:0000000008200C30407E20404040221C +FC4E:000000020000030408083C4040404040 +FC4F:000000000800040202224446221C0000 +FC50:000000000800040202224446221C0014 +FC51:000000103854523C407E20404840221C +FC52:000000201834543808103C4040404040 +FC53:00000000060D150E02224446221C0000 +FC54:00000000060D150E02224446221C0014 +FC55:0000000000000C30407E204A4048221C +FC56:0000000000000C30407E204A4040221C +FC57:0000000000200C30407E204A4040221C +FC58:000000000000030408083C4144404040 +FC59:0000000000000402224446221C010400 +FC5A:0000000000000402224446221C010450 +FC5B:101010002000080402427C0000000000 +FC5C:00000008080808000402020204483000 +FC5D:0000000010101000040A4844423C0000 +FC5E:00046A241800547C0000000000000000 +FC5F:0054547C061866186000000000000000 +FC60:000006186000547C0000000000000000 +FC61:00040A047A00547C0000000000000000 +FC62:0054547C000618600000000000000000 +FC63:000008080800547C0000000000000000 +FC64:000018201822060A120A090808106000 +FC65:000018209822060A120A090808106000 +FC66:000000182018230408083C4040404040 +FC67:00000018209802060A2A454448300000 +FC68:000000000C100C1000064944423C0000 +FC69:000000000C100C1000064944423C0028 +FC6A:000000000002060A120A090808126000 +FC6B:000000000012060A120A090808126000 +FC6C:000000000000030408083D4040404040 +FC6D:00000000001002060A2A454448320000 +FC6E:000000000000000000064944423C0100 +FC6F:000000000000000000064944423C0128 +FC70:000005000002060A120A090808106000 +FC71:000005002002060A120A090808106000 +FC72:00000000000014000C12394040404040 +FC73:00000005001002060A2A454448300000 +FC74:000000000000050000064944423C0000 +FC75:000000000000050000064944423C0028 +FC76:000200050002060A120A090808106000 +FC77:000200050022060A120A090808106000 +FC78:00000000080014000C12394040404040 +FC79:00000200050012060A2A454448300000 +FC7A:000000000002000500064944423C0000 +FC7B:000000000002000500064944423C0028 +FC7C:000000000008000C0A46898C44380000 +FC7D:000000000008000C0A46898C44380028 +FC7E:000000000A00040A07224446221C0000 +FC7F:000000000A00040A07224446221C0014 +FC80:00002122242830282C12010000000000 +FC81:00002122242830A8ACB2410000000000 +FC82:00010204081008040A11081C20202020 +FC83:00000102040810080446898C44380000 +FC84:00000102040810080446898C44380028 +FC85:000000000002020202020F080C101010 +FC86:00000000000202020242858844380000 +FC87:00000000000202020242858844380028 +FC88:0000404040404040402027180E000000 +FC89:0000000000000000000047B8AE808080 +FC8A:000000020002060A120A090808106000 +FC8B:000000021002060A120A090808106000 +FC8C:00000000020002060A12798080808080 +FC8D:00000002100002060A2A454448300000 +FC8E:000000000000020000064944423C0000 +FC8F:000000000000020000064944423C0028 +FC90:000000000010101000064944423C0000 +FC91:000000000002060A120A090808106500 +FC92:000000002002060A120A090808106500 +FC93:000000000000030408083C404A404040 +FC94:00000000001002060A2A454448300500 +FC95:000000000000000000064944423C0104 +FC96:000000000000000000064944423C0154 +FC97:02040608000C1420780CF00010000000 +FC98:02040608000C1420780CF00000000000 +FC99:02040608004C1420780CF00000000000 +FC9A:00020406080006081010F80000000000 +FC9B:00000004080C10002669E82824140C00 +FC9C:00000000000C1420780CF00004200000 +FC9D:00000000000C1420780CF00004000000 +FC9E:00000000200C1420780CF00004000000 +FC9F:00000000000006081010F80004000000 +FCA0:00000000000000002669E82825140C00 +FCA1:00000A00000C1420780CF00000200000 +FCA2:00000A00000C1420780CF00000000000 +FCA3:00000A00200C1420780CF00000000000 +FCA4:0000000A000006081010F80000000000 +FCA5:00000000000A00002669E82824140C00 +FCA6:0004000A000006081010F80000000000 +FCA7:006058041E20407E1862800000000000 +FCA8:0000000000001C021F28D80008000000 +FCA9:006058041E20407E1860801000000000 +FCAA:0000000000001C031F28D80000000000 +FCAB:086058041E20407E1860801000000000 +FCAC:0000000800001C031F28D80000000000 +FCAD:00000000000000001F94209440687E0018006000800010000000000000000000 +FCAE:00000000000000001F94209440687E0018006000800000000000000000000000 +FCAF:00000000000040001F94209440687E0018006000800000000000000000000000 +FCB0:00000000000115153E40E00000000000 +FCB1:0000000804140A24114820F040407E0018006000800000000000000000000000 +FCB2:0000000844140A24114820F040407E0018006000800000000000000000000000 +FCB3:00000000000000200050009011202FC021004000E00000000000000000000000 +FCB4:0080000804140A24114820F040407E0018006000800008000000000000000000 +FCB5:0080000804140A24114820F040407E0018006000800000000000000000000000 +FCB6:0080000844140A24114820F040407E0018006000800000000000000000000000 +FCB7:00000000000004200050009011202FC021004000E00000000000000000000000 +FCB8:101016191E2078061860800000000000 +FCB9:00000000121016193E40F04830000000 +FCBA:000030424C30407E1860801000000000 +FCBB:000000000030404C3040F04830000000 +FCBC:200030424C30407E1860801000000000 +FCBD:000000200030404C3040F04830000000 +FCBE:401028380810203E0C30C00800000000 +FCBF:401028380810203E0C30C00000000000 +FCC0:00401028388810203E0CF00000000000 +FCC1:00100010283808102020F02810000000 +FCC2:28001028380810203E0CF00008000000 +FCC3:00280010283808102020F02810000000 +FCC4:020408103008107E1860800800000000 +FCC5:020408103008107E1860800000000000 +FCC6:020408103088107E1860800000000000 +FCC7:00024448506078444424D80000000000 +FCC8:00040810204020101020F02810000000 +FCC9:0000101010101020780CF00000200000 +FCCA:0000101010101020780CF00000000000 +FCCB:0000101050101020780CF00000000000 +FCCC:00000008080808080808FC0200000000 +FCCD:000004040404041C2A3AF60000000000 +FCCE:00000000040A1C20780CF00000200000 +FCCF:00000000040A1C20780CF00000000000 +FCD0:00000000240A1C20780CF00000000000 +FCD1:0000000000040A1E2020F00000000000 +FCD2:00000400000C1420780CF00000200000 +FCD3:00000400000C1420780CF00000000000 +FCD4:00000400200C1420780CF00000000000 +FCD5:00000004000006081010F80000000000 +FCD6:0000000000000400266AE82824140C00 +FCD7:003C1229293E407E1860801000000000 +FCD8:003C1229291E08102040E05020000000 +FCD9:202000782452523C2040800000000000 +FCDA:00000000000C1420780CF0000A200000 +FCDB:00000000000C1420780CF0000A000000 +FCDC:00000000200C1420780CF0000A000000 +FCDD:00000000000006081010F8000A000000 +FCDE:000000000000000C1250D55048281800 +FCDF:00000C100C3000102824D30000000000 +FCE0:0000000608061800246AE92824140C00 +FCE1:00000000000000102824D30008000000 +FCE2:0000000000000000246AE92825140C00 +FCE3:00000000001400102824D30000000000 +FCE4:0000000000140000246AE92824140C00 +FCE5:00000008001400102824D30000000000 +FCE6:0000000800140000246AE92824140C00 +FCE7:0000000000000000000000000000180024122212D1ED00000000000000000000 +FCE8:0000000000000000000000000000000026126912E8ED2800240014000C000000 +FCE9:0000000000000010000000280000180024122212D1ED00000000000000000000 +FCEA:0000000000000010000000280000000024126A12E9ED2800240014000C000000 +FCEB:00024448506070484C4AB10000000000 +FCEC:00040810204020101824F32810000000 +FCED:00000808080808081824F32810000000 +FCEE:00000000100000102824D30000000000 +FCEF:000000000800000C1252D15048281800 +FCF0:00000000000000102824D3000A000000 +FCF1:00000000000000000856D150482B1800 +FCF2:000C30022A1400000000FF0000000000 +FCF3:040A040A30022A140000FF0000000000 +FCF4:000A54200C3000000000FF0000000000 +FCF5:000000000808080E090E4844423C0000 +FCF6:000000000808080E090E4844423C0028 +FCF7:000000000000000608064844423C0000 +FCF8:000000000000000608064844423C0028 +FCF9:000000000008000608064844423C0000 +FCFA:000000000008000608064844423C0028 +FCFB:00000000000000000000000000000612091208EC4800440042003C0000000000 +FCFC:00000000000000000000000000000612091208EC4800440042003C0000002800 +FCFD:00000000001000000028000000000612091208EC4800440042003C0000000000 +FCFE:00000000001000000028000000000612091208EC4800440042003C0000002800 +FCFF:000000006058040E10380844423C0000 +FD00:000000006058040E38080844423C0028 +FD01:000000006058040E38090844423C0000 +FD02:000000006058040E38090844423C0028 +FD03:000000046058040E38080844423C0000 +FD04:000000026058040E38080844423C0028 +FD05:000000000205051E14100844423C0000 +FD06:000000000205051E14100844423C0028 +FD07:000000080205051E14100844423C0000 +FD08:000000080205051E14100844423C0028 +FD09:000004000A00255A407E20404840221C +FD0A:000004000A00255A407E20404040221C +FD0B:000004000A80255A407E20404040221C +FD0C:000004000A00255A40603C4040404040 +FD0D:00000004000A00152A20202020408000 +FD0E:00000000000000152A20202020408000 +FD0F:0000000002050D162424202020408000 +FD10:0000000802050D162424202020408000 +FD11:000000000808080E090E4944423C0000 +FD12:000000000808080E090E4944423C0028 +FD13:000000000000000205064944423C0000 +FD14:000000000000000205064944423C0028 +FD15:000000000004000205064944423C0000 +FD16:000000000004000205064944423C0028 +FD17:000000000000000000000000000000000612091248ED440042003C0000000000 +FD18:000000000000000000000000000000000612091248ED440042003C0000002800 +FD19:000000000000001000000028000000000612091248ED440042003C0000000000 +FD1A:000000000000001000000028000000000612091248ED440042003C0000002800 +FD1B:000000000000000000000000000000000670090C08FF440042003C0000000000 +FD1C:000000000000000000000000000000000670090C08FF440042003C0000002800 +FD1D:000000000000000000000000000000000670090C08FF440042203C0000000000 +FD1E:000000000000000000000000000000000670090C08FF440042203C0000002800 +FD1F:000000000000000000000000004000000670090C08FF440042003C0000000000 +FD20:000000000000000000000000002000000670090C08FF440042003C0000002800 +FD21:0000000000040A0A3E29209088700000 +FD22:0000000000040A0A3E29209088700050 +FD23:0000000010040A0A3E29209088700000 +FD24:0000000010040A0A3E29209088700050 +FD25:000000001000280054AA81FC40904438 +FD26:000000001000280054AA81FC40804438 +FD27:000000001000A80054AA81FC40804438 +FD28:00000000080014004AB580C070808080 +FD29:00000000000004000A00152A20204080 +FD2A:00000000000000000000152A20204080 +FD2B:0000000000000002050D162424408000 +FD2C:0000000000000012050D162424408000 +FD2D:00200000005004000A2411D820007F8018006000800008000000000000000000 +FD2E:00200000005004000A2411D820007F8018006000800000000000000000000000 +FD2F:00200000005024000A2411D820007F8018006000800000000000000000000000 +FD30:0000000000200000005004000A2411D820007000880000000000000000000000 +FD31:0000000000000000000000000000002423D86400E8002800240014000C000000 +FD32:0000000000000020000000500000002423D86400E8002800240014000C000000 +FD33:00000010101016191E20D02000000000 +FD34:0000000000000000000000000000100028920492FFED00001000000000000000 +FD35:0000000000000000000000000000100028920492FFED00000000000000000000 +FD36:0000000000000000000010000000100028920492FFED00000000000000000000 +FD37:0000000000000000001000000028100028920492FFED00001000000000000000 +FD38:0000000000000000001000000028100028920492FFED00000000000000000000 +FD39:0000000000000000001010000028100028920492FFED00000000000000000000 +FD3A:00000010101016191E22D12000000000 +FD3B:00000010121016191E22D12000000000 +FD3C:010204111214101010100F0000000000 +FD3D:01020411121410101010100000000000 +FD3E:0000007E018C023004C00F000A0035806AC035800A000F0004C00230018C007E +FD3F:00007E0031800C40032000F0005001AC035601AC005000F003200C4031807E00 +FD40:00007FFE618E6FB663B66FB66F8E7FFE7FFE6DCE6DB661B67DB67DCE7FFE0000 +FD41:00007FFE618E6FB663B66FB66F8E7FFE7FFE6DEE6DCE61EE7DEE7DC67FFE0000 +FD42:00007FFE618E6FB663B66FB66F8E7FFE7FFE6D866DF661867DBE7D867FFE0000 +FD43:00007FFE618E6FB663B66FB66F8E7FFE7FFE6D8E6DF661C67DF67D8E7FFE0000 +FD44:00007FFE618E6FB663B66FB66F8E7FFE7FFE6DB66DB661867DF67DF67FFE0000 +FD45:00007FFE618E6FB663B66FB66F8E7FFE7FFE6D866DBE61867DF67D867FFE0000 +FD46:00007FFE618E6FB663B66FB66F8E7FFE7FFE6DCE6DBE618E7DB67DCE7FFE0000 +FD47:00007FFE618E6FB663B66FB66F8E7FFE7FFE6D866DF661EE7DDE7DDE7FFE0000 +FD48:00007FFE618E6FB663B66FB66F8E7FFE7FFE6DCE6DB661CE7DB67DCE7FFE0000 +FD49:00007FFE618E6FB663B66FB66F8E7FFE7FFE6DCE6DB661C67DF67DCE7FFE0000 +FD4A:00007FFE618E6FB663B66FB66F8E7FFE7FFE6D866DB661867DB67DB67FFE0000 +FD4B:00007FFE618E6FB663B66FB66F8E7FFE7FFE6D8E6DB6618E7DB67D8E7FFE0000 +FD4C:00007FFE618E6FB663B66FB66F8E7FFE7FFE6DC66DBE61BE7DBE7DC67FFE0000 +FD4D:00007FFE618E6FB663B66FB66F8E7FFE7FFE6D8E6DB661B67DB67D8E7FFE0000 +FD4E:00007FFE618E6FB663B66FB66F8E7FFE7FFE6D866DBE618E7DBE7D867FFE0000 +FD4F:00007FFE618E6FB663B66FB66F8E7FFE7FFE6D866DBE618E7DBE7DBE7FFE0000 +FD50:0000000000000000000000000028020005040084FFFC50002100000000000000 +FD51:00000000000000000000000000141080294204220BFF10002400200012000C00 +FD52:0000000000000000000000000028210052840844FFFC00002000000000000000 +FD53:0000000000000000000000000028020005040084FFFC50002000000000000000 +FD54:0000000000000000000002000028020005040084FFFC28001000000000000000 +FD55:0000000000000000000000000028200050040804FFFC02802100000000000000 +FD56:0000000000000000000000000028200050040804FFFC02800100000000000000 +FD57:0000000000000000000000000028200050040804FFFC02802100000000000000 +FD58:000000000000000000000000000020085014080217FF21404088400024001800 +FD59:0000000000000000000000000000201050280804FFFC02800110000000000000 +FD5A:000000000000000000000000000000084814540253FF48A04440380000002800 +FD5B:000000000000000000000000000000084814540253FF48A04440380000000000 +FD5C:0000000000000000000000000000210052950855FFFF00002000000000000000 +FD5D:0000000000000000000000000000210052950855FFFF00000100000000000000 +FD5E:000000000000000000000000000001009295A855A7FF90008900700000000000 +FD5F:00000000000000000000000000004000A02A102A2FFF45008200800048003000 +FD60:00000000000000000000000000002000502A082AFFFE02800100000000000000 +FD61:00000000000000000000000000002000502A082AFFFE02802100000000000000 +FD62:00000000000000000000000000002000502A082A7FFF42804100400040000000 +FD63:00000000000000000000000000000000002A002AFFFE2A801100000000000000 +FD64:00000000000000000000000000004204A52A10AA2FD740008000800048003000 +FD65:0000000000000000000000000000210252950855FFEE00000000000000000000 +FD66:00000000000000000000000000002004502A082A7FD742804100400040000000 +FD67:00000000000000000008000000144200A52A10AAFFFF80008000800080000000 +FD68:00000000000000000008000000140200052A00AAFFFE28001000000000000000 +FD69:000000000000000000040000000A01009295A855A7FF90008900700000005000 +FD6A:00000000000000000008200000142000502A082A17FF22804100400024001800 +FD6B:00000000000000000008200000142000502A082AFFFE02800100000000000000 +FD6C:00000000000000000008000000142000502A082A7FFF42804100400040000000 +FD6D:00000000000000000008000000140000002A002AFFFE2A801100000000000000 +FD6E:000000000000000000000002000001029295A855A7EB90008800700000000000 +FD6F:00000000000000000000000400004204A52A10AAFFD780008000800080000000 +FD70:00000000000000000000020400000204052A00AAFFD428001000000000000000 +FD71:00000000000000000000002000202020502C083217FF22804100400024001800 +FD72:00000000000000000000002000202020502C0832FFFC02800100000000000000 +FD73:00000000000000000000002000200020002C0032FFFC2A801100000000000000 +FD74:00000000000000000000002000200020902CA832A7FF92808900700000005000 +FD75:0000000000000000000000000000211E5292084C7FF340004100400040000000 +FD76:0000000000000000000000000000101E2812040C3FF321402080200020000000 +FD77:00000000000000000000000000000000000C0010FFFE52802100000000000000 +FD78:0000000000000000000000000000001E9012A80CA7F391408880700000000000 +FD79:0000000000000000000000080000101E2812040C3FF321402080200020000000 +FD7A:0000000000000000000000080000001E9012A80CA7F391408880700000005000 +FD7B:0000000000000000000000080000001E9012A80CA7F391408880700000000000 +FD7C:00000000000000000000010800002108529408547FEF40004000400040000000 +FD7D:00000000000000000008010000080114028C0044FFFC28001000000000000000 +FD7E:00000000000000000000000A00002004500A080A17F721404080400024001800 +FD7F:00000000000000000000001400002008501408147FEF42804100400040000000 +FD80:0000000000000000000000020002084214A202121FFD10001000100010000000 +FD81:0000000000000000000000020002004224A22A1229FD240022001C0000001400 +FD82:0000000000000000000000020002004224A22A1229FD240022001C0000000000 +FD83:0000000000000000000000080008210852880848FFF000002100000000000000 +FD84:000000000000000000000002000220825142082217FD20004880400024001800 +FD85:00000000000000000000008200022082514208227FFD40004000400040000000 +FD86:0000000000000000000001040004010402840044FFF828001000000000000000 +FD87:00000000000000000000000200021002280204020BFD10A02040200012000C00 +FD88:0000000000000000000000080008200850080808FFF002800100000000000000 +FD89:0000000000000000000000000000210052800848FFF400142008000000000000 +FD8A:0000000000000000000000000000020005000088FFF450142008000000000000 +FD8B:000000000000000000000000000001009280A840A7FF90148808700000005000 +FD8C:0000000000000000000000000000210052800848FFF400140108000000000000 +FD8D:0000000000000000000000000000010002800048FFF428141108000000000000 +FD8E:0000000000000000000001000000210052800848FFF400142008000000000000 +FD8F:0000000000000000000001000000010002800048FFF428141008000000000000 +FD90:00007FFE618E6FB663B66FB66F8E7FFE7FFE73CE6DB671B67DB673CE7FFE0000 +FD91:00007FFE618E6FB663B66FB66F8E7FFE7FFE73EE6DCE71EE7DEE73C67FFE0000 +FD92:0000000000000000000020000000210052800848FFF400140108000000000000 +FD93:00000000000000000000001800042012502A082AFFDC02802100000000000000 +FD94:00000000000000000000001800040012002A002AFFDC2A801100000000000000 +FD95:0000000000000000000000000008010002880048FFF028001000000000000000 +FD96:000000000000000000000000000400804944542453FB48004400380000000000 +FD97:00000000000000000000000000042080514408247FFB40004080400040000000 +FD98:0000000000000000000000000008010002880048FFF028001100000000000000 +FD99:000000000000000000000000000400809144A824A7FB90008880700000000000 +FD9A:000000000000000000000000000400004804540453FB48A04440380000002800 +FD9B:000000000000000000000000000400004804540453FB48A04440380000000000 +FD9C:00000000000000000000000000000800140402041FFB10A0104A100010000000 +FD9D:0000000000000000000000000000000000020002FFFC29401094000000000000 +FD9E:000000000000000000000080000000809142A822A7FD90008804700000005000 +FD9F:000000000000000000000000000A00809142A822A7FD90008840700000005000 +FDA0:000000000000000000000000000A00809142A822A7FD90008880700000000000 +FDA1:000000000000000000000080000A00809142A822A7FD90008800700000005000 +FDA2:000000000000000000000080000A00809142A822A7FD90008800700000000000 +FDA3:000000000000000000000000000A00004802540253FD48A04440380000002800 +FDA4:000000000000000000000000000A00004802540253FD48A04440380000000000 +FDA5:000000000000000000000000000000089014A802A7FF91408888700000005000 +FDA6:000000000000000000000000000001089294A842A7FF90008808700000000000 +FDA7:000000000000000000000000000000089014A802A7FF91408888700000000000 +FDA8:000000000000000000000100000001009295A855A7FF90008800700000000000 +FDA9:000000000000000000000000000001029295A855A7EF90008800700000005000 +FDAA:000000000000000000040000000A01009295A855A7FF90008800700000005000 +FDAB:000000000000000000000002000001029295A855A7FF90008800700000005000 +FDAC:000000000000000000000004000400844944542453FB48004480380000002800 +FDAD:000000000000000000000004000400044804540453FB48A04440380000002800 +FDAE:000000000000000000000000000000804944542453FB4800440A380000002800 +FDAF:000000000000000000000000000000804944542453FB4800448A380000002800 +FDB0:000000000000000000000000000000004804540453FB48A0444A380000002800 +FDB1:000000000000000000000000000000004800540053FF48AA4444380000002800 +FDB2:00000000000000000000000A00000004480A540A53F748A04440380000002800 +FDB3:000000000000000000000000000400804944542453FB48004400380000002800 +FDB4:00000000000000000014000000082014500C0804FFFC02800100000000000000 +FDB5:0000000000000000000000080008010802880048FFF828001000000000000000 +FDB6:0000000000000000000000000000001E9012A80CA7F391408880700000005000 +FDB7:000000000000000000000006001800209018A80EA7F192808900700000005000 +FDB8:0000000000000000000000000008210052880848FFF800000100000000000000 +FDB9:000000000000000000000080000000809140A820A7FF900A8804700000005000 +FDBA:0000000000000000000000080008010802880048FFF828001100000000000000 +FDBB:000000000000000000000006001820205018080E7FF142804100400040000000 +FDBC:00000000000000000000000400042084514408247FFB40004080400040000000 +FDBD:0000000000000000000000000002104028A204120BFD10002040200012000C00 +FDBE:000000000000000000000000000001089294A842A7FF90008808700000005000 +FDBF:000000000000000000000000000001089294A842A7FF90008900700000005000 +FDC0:000000000000000000000000000000809140A820A7FF900A8844700000005000 +FDC1:00000000000000000000000400000004480A540A53F748A04440380000002800 +FDC2:000000000000000000000000000000809142A822A7FF90008804700000005000 +FDC3:000000000000000000000003000C001000080004FFF829401080000000000000 +FDC4:0000000000000000000000000000010002860048FFFF28001100000000000000 +FDC5:00000000000000000000000000000004002A002AFFDC55002200000000000000 +FDC6:000000000000000000000100000001009295A855A7FF90008800700000005000 +FDC7:000000000000000000000000000400809144A824A7FB90008880700000005000 +FDC8:00007FFE618E6FB663B66FB66F8E7FFE7FFE71CE6FB66FCE6FB671CE7FFE0000 +FDC9:00007FFE618E6FB663B66FB66F8E7FFE7FFE71CE6FB66FC66FF671CE7FFE0000 +FDCA:00007FFE618E6FB663B66FB66F8E7FFE7FFE71866FB66F866FB671B67FFE0000 +FDCB:00007FFE618E6FB663B66FB66F8E7FFE7FFE718E6FB66F8E6FB6718E7FFE0000 +FDCC:00007FFE618E6FB663B66FB66F8E7FFE7FFE71C66FBE6FBE6FBE71C67FFE0000 +FDCD:00007FFE618E6FB663B66FB66F8E7FFE7FFE718E6FB66FB66FB6718E7FFE0000 +FDCE:00007FFE618E6FB663B66FB66F8E7FFE7FFE71866FBE6F8E6FBE71867FFE0000 +FDCF:00007FFE618E6FB663B66FB66F8E7FFE7FFE71866FBE6F8E6FBE71BE7FFE0000 +FDD0:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE3CFEDB7EDB7EDB7E3CFFFFFFFFF +FDD1:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE3DFED9FEDDFEDDFE38FFFFFFFFF +FDD2:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE387EDF7ED87EDBFE387FFFFFFFF +FDD3:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE38FEDF7EDC7EDF7E38FFFFFFFFF +FDD4:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE3AFEDAFED87EDEFE3EFFFFFFFFF +FDD5:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE387EDBFED87EDF7E387FFFFFFFF +FDD6:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE3CFEDBFED8FEDB7E3CFFFFFFFFF +FDD7:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE387EDF7EDEFEDDFE3DFFFFFFFFF +FDD8:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE3CFEDB7EDCFEDB7E3CFFFFFFFFF +FDD9:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE3CFEDB7EDC7EDF7E3CFFFFFFFFF +FDDA:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE3CFEDB7ED87EDB7E3B7FFFFFFFF +FDDB:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE38FEDB7ED8FEDB7E38FFFFFFFFF +FDDC:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE3CFEDB7EDBFEDB7E3CFFFFFFFFF +FDDD:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE38FEDB7EDB7EDB7E38FFFFFFFFF +FDDE:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE387EDBFED8FEDBFE387FFFFFFFF +FDDF:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE387EDBFED8FEDBFE3BFFFFFFFFF +FDE0:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE1CFEFB7E3B7EFB7E1CFFFFFFFFF +FDE1:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE1DFEF9FE3DFEFDFE18FFFFFFFFF +FDE2:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE187EFF7E387EFBFE187FFFFFFFF +FDE3:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE18FEFF7E3C7EFF7E18FFFFFFFFF +FDE4:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE1AFEFAFE387EFEFE1EFFFFFFFFF +FDE5:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE187EFBFE387EFF7E187FFFFFFFF +FDE6:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE1CFEFBFE38FEFB7E1CFFFFFFFFF +FDE7:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE187EFF7E3EFEFDFE1DFFFFFFFFF +FDE8:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE1CFEFB7E3CFEFB7E1CFFFFFFFFF +FDE9:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE1CFEFB7E3C7EFF7E1CFFFFFFFFF +FDEA:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE1CFEFB7E387EFB7E1B7FFFFFFFF +FDEB:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE18FEFB7E38FEFB7E18FFFFFFFFF +FDEC:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE1CFEFB7E3BFEFB7E1CFFFFFFFFF +FDED:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE18FEFB7E3B7EFB7E18FFFFFFFFF +FDEE:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE187EFBFE38FEFBFE187FFFFFFFF +FDEF:FFFFFFFFE18FEFB7E3B7EFB7EF8FFFFFFFFFE187EFBFE38FEFBFE1BFFFFFFFFF +FDF0:00000000040004000400040C049204A20B7C3020400040003FF0000000000000 +FDF1:0000000002500200022002500230021005E01800200020001FF8000000000000 +FDF2:020002000240014205820602009208921892289218920F600000000000000000 +FDF3:0000000C003000C40104010400C412241E14121411E424004000000000000000 +FDF4:06081814010815140A60000001880614003808C0090005FC24181A6001800060 +FDF5:00000000040004000400240C549234A22B7C4020380014002800200020000000 +FDF6:0000000010001000100010009254955563A901020E1C00000000000000000000 +FDF7:000000000020002010203020502633280CDE0000050000000000000000000000 +FDF8:00000000100010001000100012A412AA2D464002300428185000400040000000 +FDF9:00000000040004000400040C049204A20B7C082050004C004200240018000000 +FDFA:2AA06AA0AAAA6A2D145680C480287FC82029602ABFD7440204553D035351A0A6 +FDFB:000008000804480A480137FF000002A412A032A452AA32210CDF000000040000 +FDFC:0000028002800280028002A002A0224222021CA2000C00000000000000000000 +FDFD:70A95FFF7000C5D5145515D5557D75C0C03B50295FFF7000758554957F9DC030 +FDFE:00007FFE618E6FB663B66FB66F8E7FFE7FFE61866FBE638E6FBE6F867FFE0000 +FDFF:00007FFE618E6FB663B66FB66F8E7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 +FE00:AAAA00018000223DA2402239940408798000008181800281808003E180005555 +FE01:AAAA00018000223DA2402239940408798000038180400181820003C180005555 +FE02:AAAA00018000223DA24022399404087980000381804001818040038180005555 +FE03:AAAA00018000223DA24022399404087980000241824003C18040004180005555 +FE04:AAAA00018000223DA240223994040879800003C1820003818040038180005555 +FE05:AAAA00018000223DA240223994040879800001C1820003818240018180005555 +FE06:AAAA00018000223DA240223994040879800003C1804000818100010180005555 +FE07:AAAA00018000223DA24022399404087980000181824001818240018180005555 +FE08:AAAA00018000223DA24022399404087980000181824001C18040038180005555 +FE09:AAAA00018000223DA240223994040879800008319848284988483E3180005555 +FE0A:AAAA00018000223DA240223994040879800008119830285188103E7D80005555 +FE0B:AAAA00018000223DA240223994040879800008719808283188403E7980005555 +FE0C:AAAA00018000223DA240223994040879800008719808283188083E7180005555 +FE0D:AAAA00018000223DA240223994040879800008499848287988083E0980005555 +FE0E:AAAA00018000223DA240223994040879800008799840287188083E7180005555 +FE0F:AAAA00018000223DA240223994040879800008399840287188483E3180005555 +FE10:00000000000C0004000400080000000000000000000000000000000000000000 +FE11:0000000000200010000800080000000000000000000000000000000000000000 +FE12:0000000000000018002400240018000000000000000000000000000000000000 +FE13:00000000000C000C000000000000000C000C0000000000000000000000000000 +FE14:00000000000C000C000000000000000C00040004000800000000000000000000 +FE15:0000000000040004000400040004000400040000000400040000000000000000 +FE16:0000000000780084008400040008001000100000001000100000000000000000 +FE17:00000000000000000000000000007FFE400247E2581A60064002000000000000 +FE18:00000000000040026006581A47E240027FFE0000000000000000000000000000 +FE19:0000000001800180000000000000018001800000000000000180018000000000 +FE1A:00007FFE61866FBE638E6FBE6F867FFE7FFE7B8673B67B867BB671B67FFE0000 +FE1B:00007FFE61866FBE638E6FBE6F867FFE7FFE7B8E73B67B8E7BB6718E7FFE0000 +FE1C:00007FFE61866FBE638E6FBE6F867FFE7FFE7BC673BE7BBE7BBE71C67FFE0000 +FE1D:00007FFE61866FBE638E6FBE6F867FFE7FFE7B8E73B67BB67BB6718E7FFE0000 +FE1E:00007FFE61866FBE638E6FBE6F867FFE7FFE7B8673BE7B8E7BBE71867FFE0000 +FE1F:00007FFE61866FBE638E6FBE6F867FFE7FFE7B8673BE7B8E7BBE71BE7FFE0000 +FE20:000F3040000000000000000000000000 +FE21:00F00C02000000000000000000000000 +FE22:001E2140000000000000000000000000 +FE23:00028478000000000000000000000000 +FE24:00001F00000000000000000000000000 +FE25:0000F800000000000000000000000000 +FE26:0000FF00000000000000000000000000 +FE27:0000000000000000000000000040300F +FE28:00000000000000000000000000020CF0 +FE29:00000000000000000000000000000F30 +FE2A:00000000000000000000000000000CF0 +FE2B:0000000000000000000000000000001F +FE2C:000000000000000000000000000000F8 +FE2D:000000000000000000000000000000FF +FE2E:001F1800000000000000000000000000 +FE2F:0018F800000000000000000000000000 +FE30:0000000000000000018001800000000000000000018001800000000000000000 +FE31:0000000000800080008000800080008000800080008000800080008000000000 +FE32:0000000000000000008000800080008000800080008000800000000000000000 +FE33:0000400040004000400040004000400040004000400040004000400040000000 +FE34:2000400040002000100010002000400040002000100010002000400040002000 +FE35:0000000000000000000000000000000000000FF0100820044002000000000000 +FE36:0000000000004002200410080FF0000000000000000000000000000000000000 +FE37:000000000000000000000000000000000000000001803E7C4002000000000000 +FE38:00000000000040023E7C01800000000000000000000000000000000000000000 +FE39:00000000000000000000000000000000000000001FF820044002000000000000 +FE3A:000000000000400220041FF80000000000000000000000000000000000000000 +FE3B:000000000000000000000000000000007FFE7FFE781E60064002000000000000 +FE3C:00000000000040026006781E7FFE7FFE00000000000000000000000000000000 +FE3D:0000000000000000000000000180066018186186066018186006000000000000 +FE3E:0000000000006006181806606186181806600180000000000000000000000000 +FE3F:0000000000000000000000000000000000000180066018186006000000000000 +FE40:0000000000006006181806600180000000000000000000000000000000000000 +FE41:000000000000000000000000000000000FFE0002000200020002000000000000 +FE42:00000000000040004000400040007FF000000000000000000000000000000000 +FE43:00000000000000000000000000000FFE08020FFA000A000A000E000000000000 +FE44:0000000000007000500050005FF040107FF00000000000000000000000000000 +FE45:0000000000700038001800180000000000000000000000000000000000000000 +FE46:00000000007800240014000C0000000000000000000000000000000000000000 +FE47:000000000000000000000000000000007FFE4002400240024002000000000000 +FE48:00000000000040024002400240027FFE00000000000000000000000000000000 +FE49:000039CE00000000000000000000000000000000000000000000000000000000 +FE4A:00007DBE00000000000000000000000000000000000000000000000000000000 +FE4B:0C30924961860000000000000000000000000000000000000000000000000000 +FE4C:0C30924961860C30924961860000000000000000000000000000000000000000 +FE4D:0000000000000000000000000000000000000000000000000000000039CE0000 +FE4E:000000000000000000000000000000000000000000000000000000007DBE0000 +FE4F:00000000000000000000000000000000000000000000000000000C3092496186 +FE50:0000000000000000000000000000000000000000000000000180010002000000 +FE51:0000000000000000000000000000000000000000000000000200010001800000 +FE52:0000000000000000000000000000000000000000000000000180018000000000 +FE53:00007FFE61866FBE638E6FBE6F867FFE7FFE618E6FF661C67DF6618E7FFE0000 +FE54:0000000000000000000000000000000000000180018000000180010002000000 +FE55:0000000000000000000000000000000000000180018000000180018000000000 +FE56:0000000000000000000000000000000001000280008001000000010000000000 +FE57:0000000000000000000000000000000000800080008000800000008000000000 +FE58:0000000000000000000000000000000000000000000007C00000000000000000 +FE59:0000000000000000000000000000000000800100010001000100008000000000 +FE5A:0000000000000000000000000000000001000080008000800080010000000000 +FE5B:0000000000000000000000000000000000400080018000800080004000000000 +FE5C:0000000000000000000000000000000002000100018001000100020000000000 +FE5D:0000000000000000000000000000000001C0010001000100010001C000000000 +FE5E:0000000000000000000000000000000003800080008000800080038000000000 +FE5F:000000000000000000000000000000000000028007C0028007C0028000000000 +FE60:0000000000000000000000000000000000000100028001000280014000000000 +FE61:0000000000000000000000000000000000000280010003800100028000000000 +FE62:0000000000000000000000000000000000000100010007C00100010000000000 +FE63:0000000000000000000000000000000000000000000003C00000000000000000 +FE64:0000000000000000000000000000000000000040008001000080004000000000 +FE65:0000000000000000000000000000000000000200010000800100020000000000 +FE66:000000000000000000000000000000000000000003C0000003C0000000000000 +FE67:00007FFE61866FBE638E6FBE6F867FFE7FFE73866FF663EE6DDE73DE7FFE0000 +FE68:0000000000000000000000000000000000000200010000800040000000000000 +FE69:0000000000000000000000000000000000000380050003800140038000000000 +FE6A:0000000000000000000000000000000002000240008001000240004000000000 +FE6B:000000000000000000000000000000000180024002C002C00200018000000000 +FE6C:00007FFE61866FBE638E6FBE6F867FFE7FFE73C66FBE63BE6DBE73C67FFE0000 +FE6D:00007FFE61866FBE638E6FBE6F867FFE7FFE738E6FB663B66DB6738E7FFE0000 +FE6E:00007FFE61866FBE638E6FBE6F867FFE7FFE73866FBE638E6DBE73867FFE0000 +FE6F:00007FFE61866FBE638E6FBE6F867FFE7FFE73866FBE638E6DBE73BE7FFE0000 +FE70:000C300C300000000000000000000000 +FE71:000C300C300000000000FF0000000000 +FE72:0C0C6428700000000000000000000000 +FE73:00000000000000000000020404040300 +FE74:000000000000000000000C300C300000 +FE75:00007FFE61866FBE638E6FBE6F867FFE7FFE61867DBE7B8677F677867FFE0000 +FE76:0000000C300000000000000000000000 +FE77:0000000C300000000000FF0000000000 +FE78:0C0E0810200000000000000000000000 +FE79:0C0E0810200000000000FF0000000000 +FE7A:00000000000000000000000000000C30 +FE7B:00000000000000000000FF0000000C30 +FE7C:00000004145860000000000000000000 +FE7D:00000004145860000000FF0000000000 +FE7E:00000018242418000000000000000000 +FE7F:00000018242418000000FF0000000000 +FE80:000000000000001C203C102000000000 +FE81:00013E40080808080808080000000000 +FE82:000870802020202020201F0000000000 +FE83:18201820080808080808080000000000 +FE84:304030402020202020201F0000000000 +FE85:00000C100C10000C12121E0204483000 +FE86:00000C100C10000C12121F0204483000 +FE87:0000000008080808080808000C100C10 +FE88:000000002020202020201F0030403040 +FE89:00000000304030400046484846423C00 +FE8A:000000003040304000404342423C0000 +FE8B:0000000C100C10000404F80000000000 +FE8C:0000000C100C10000404FB0000000000 +FE8D:00000008080808080808080000000000 +FE8E:000000202020202020201F0000000000 +FE8F:000000000000000422423C0000080000 +FE90:000000000000000422423F0000080000 +FE91:00000000000000080404FC0000100000 +FE92:00000000000000080404FF0000100000 +FE93:000000002400101824243C0000000000 +FE94:0000001200040C14243C070000000000 +FE95:000000001400000422423C0000000000 +FE96:000000001400000422423F0000000000 +FE97:00000000280000080404F80000000000 +FE98:00000000280000080404FF0000000000 +FE99:000010002400000422423C0000000000 +FE9A:000010002400000422423F0000000000 +FE9B:00002000480000080404F80000000000 +FE9C:00002000480000080404FF0000000000 +FE9D:00000000000000007E1020404840221C +FE9E:00000000000000007E1423404840211E +FE9F:00000000000000003806FE0010000000 +FEA0:00000000000000003806FF0010000000 +FEA1:00000000000000007E1020404040221C +FEA2:00000000000000007E1423404040211E +FEA3:0000000000000000700CFC0000000000 +FEA4:0000000000000000700CFF0000000000 +FEA5:00000000001000007E1020404040221C +FEA6:00000000001000007E1423404040211E +FEA7:0000000000200000700CFC0000000000 +FEA8:0000000000200000700CFF0000000000 +FEA9:000000000000080402427C0000000000 +FEAA:000000000000080402427F0000000000 +FEAB:000000002000080402427C0000000000 +FEAC:000000002000080402427F0000000000 +FEAD:00000000000000000402020204483000 +FEAE:00000000000000000402030204483000 +FEAF:00000000001000000402020204483000 +FEB0:00000000001000000402030204483000 +FEB1:000000000000000115155E4848300000 +FEB2:000000000000000115155F4848300000 +FEB3:00000000000000022A2AFC0000000000 +FEB4:00000000000000022A2AFF0000000000 +FEB5:00000008001200000115155E48483000 +FEB6:000000080012000115155F4848300000 +FEB7:00000010002400022A2AFC0000000000 +FEB8:00000010002400022A2AFF0000000000 +FEB9:000000000000000006194E4848300000 +FEBA:000000000000000006194F4848300000 +FEBB:00000000000000000C52FC0000000000 +FEBC:00000000000000000C52FF0000000000 +FEBD:000000000004000006194E4848300000 +FEBE:000000000004000006194F4848300000 +FEBF:00000000000800000C52FC0000000000 +FEC0:00000000000800000C52FF0000000000 +FEC1:000000202020202C32227C0000000000 +FEC2:000000202020202C32227F0000000000 +FEC3:000000202020202C3222FC0000000000 +FEC4:000000202020202C3222FF0000000000 +FEC5:000000202420202C32227C0000000000 +FEC6:000000202420202C32227F0000000000 +FEC7:000000202420202C3222FC0000000000 +FEC8:000000202420202C3222FF0000000000 +FEC9:000000000000001824201C204040423C +FECA:000000000000000030301F204040423C +FECB:00000000000000182420FE0000000000 +FECC:00000000000000181808F70000000000 +FECD:000000000800001824201C204040423C +FECE:000000000010000030301F204040423C +FECF:00000000080000182420FE0000000000 +FED0:00000000080000181808F70000000000 +FED1:0000000800060A0642423C0000000000 +FED2:0000000800060A0642423F0000000000 +FED3:0000001000003824140CF80000000000 +FED4:0000001000003824140CFB0000000000 +FED5:000000002400001C120A264244380000 +FED6:000000002400001C120A274244380000 +FED7:0000004800003824140CF80000000000 +FED8:0000004800003824140CFB0000000000 +FED9:000000020A120A2242423C0000000000 +FEDA:000000020A120A2242423F0000000000 +FEDB:00000004081020403C02FE0000000000 +FEDC:00000004081020403C02FF0000000000 +FEDD:000000020202020202224242443C0000 +FEDE:000000020202020202234242443C0000 +FEDF:00000004040404040404F80000000000 +FEE0:00000004040404040404FB0000000000 +FEE1:00000000000000001C061E2020202020 +FEE2:00000000000000001C061F2020202020 +FEE3:00000000000000081432EE0000000000 +FEE4:00000000000000081432EF0000000000 +FEE5:00000000001000000422424244380000 +FEE6:00000000001000000422434244380000 +FEE7:00000000100000080404F80000000000 +FEE8:00000000100000080404FB0000000000 +FEE9:000000000000101824243C0000000000 +FEEA:0000000004040C14243C070000000000 +FEEB:000000000010083C2A3AF60000000000 +FEEC:000000000000000C1414FF140C000000 +FEED:000000000000000C12121E0204483000 +FEEE:000000000000000C12121F0204483000 +FEEF:0000000000000000044A484442423C00 +FEF0:00000000000000000000434442423C00 +FEF1:0000000000000000044A4844423C0028 +FEF2:000000000000000000004344423C0028 +FEF3:00000000000000080804F80028000000 +FEF4:00000000000000080804FB0028000000 +FEF5:000008728222120A040C141C00000000 +FEF6:000008728222120A0E0A136000000000 +FEF7:000030423242120A040C141C00000000 +FEF8:000030423242120A0E0A136000000000 +FEF9:0000020222120A040C141C000C100C10 +FEFA:000000020222120A0E0A13600C100C10 +FEFB:000000020222120A040C141C00000000 +FEFC:000000020222120A0E0A136000000000 +FEFD:00007FFE61866FBE638E6FBE6F867FFE7FFE618E6FB663B66FB66F8E7FFE0000 +FEFE:00007FFE61866FBE638E6FBE6F867FFE7FFE61866FBE638E6FBE6F867FFE0000 +FEFF:AAAA0001F4511458A55546D2F4510001F1DE4A10F19E4851F390000180005555 +FF00:00007FFE61866FBE638E6FBE6FBE7FFE7FFE73CE6DB66DB66DB673CE7FFE0000 +FF01:0000000000000000018001800180018001800180018000000180018000000000 +FF02:000000000C300C300C300C300000000000000000000000000000000000000000 +FF03:0000000000000000030C030C030C3FFC0C300C303FFC30C030C030C000000000 +FF04:000000000000000001801FF8618661801F8001F8018661861FF8018000000000 +FF05:00000000000000001E06619861981E6001800180067819861986607800000000 +FF06:000000000000000007E018181818181807E01F866066601860781F8600000000 +FF07:0000000001800180018001800000000000000000000000000000000000000000 +FF08:000000000000003000C000C003000300030003000300030000C000C000300000 +FF09:0000000000000C000300030000C000C000C000C000C000C0030003000C000000 +FF0A:00000000000000000000000001806186199807E0199861860180000000000000 +FF0B:0000000000000000000000000180018001807FFE018001800180000000000000 +FF0C:00000000000000000000000000000000000000000000000003C000C000C00300 +FF0D:0000000000000000000000000000000000003FFC000000000000000000000000 +FF0E:00000000000000000000000000000000000000000000000003C003C000000000 +FF0F:0000000000000000000C000C003000C000C0030003000C003000300000000000 +FF10:000000000000000003C00C30300C303C30CC330C3C0C300C0C3003C000000000 +FF11:00000000000000000180078019800180018001800180018001801FF800000000 +FF12:00000000000000000FF0300C300C000C00F003000C00300030003FFC00000000 +FF13:00000000000000000FF0300C300C000C03F0000C000C300C300C0FF000000000 +FF14:0000000000000000003000F003300C30303030303FFC00300030003000000000 +FF15:00000000000000003FFC3000300030003FF0000C000C000C300C0FF000000000 +FF16:000000000000000003F00C00300030003FF0300C300C300C300C0FF000000000 +FF17:00000000000000003FFC000C000C00300030003000C000C000C000C000000000 +FF18:00000000000000000FF0300C300C300C0FF0300C300C300C300C0FF000000000 +FF19:00000000000000000FF0300C300C300C0FFC000C000C000C00300FC000000000 +FF1A:00000000000000000000000003C003C000000000000003C003C0000000000000 +FF1B:00000000000000000000000003C003C000000000000003C000C000C003000000 +FF1C:0000000000000000000000180060018006001800060001800060001800000000 +FF1D:00000000000000000000000000003FFC0000000000003FFC0000000000000000 +FF1E:0000000000000000000018000600018000600018006001800600180000000000 +FF1F:00000000000000000FF0300C300C000C003000C000C0000000C000C000000000 +FF20:000000000000000003F00C0C30CC333C330C330C330C30FC0C0003FC00000000 +FF21:000000000000000003C00C300C30300C300C3FFC300C300C300C300C00000000 +FF22:00000000000000003FF0300C300C300C3FF0300C300C300C300C3FF000000000 +FF23:00000000000000000FF0300C300C3000300030003000300C300C0FF000000000 +FF24:00000000000000003FC03030300C300C300C300C300C300C30303FC000000000 +FF25:00000000000000003FFC3000300030003FF030003000300030003FFC00000000 +FF26:00000000000000003FFC3000300030003FF03000300030003000300000000000 +FF27:00000000000000000FF0300C300C3000300030FC300C300C303C0FCC00000000 +FF28:0000000000000000300C300C300C300C3FFC300C300C300C300C300C00000000 +FF29:00000000000000001FF8018001800180018001800180018001801FF800000000 +FF2A:000000000000000007FE006000600060006000600060606060601F8000000000 +FF2B:0000000000000000300C303030C033003C003C00330030C03030300C00000000 +FF2C:00000000000000003000300030003000300030003000300030003FFC00000000 +FF2D:0000000000000000300C300C3C3C3C3C33CC33CC300C300C300C300C00000000 +FF2E:0000000000000000300C3C0C3C0C330C330C30CC30CC303C303C300C00000000 +FF2F:00000000000000000FF0300C300C300C300C300C300C300C300C0FF000000000 +FF30:00000000000000003FF0300C300C300C3FF03000300030003000300000000000 +FF31:00000000000000000FF0300C300C300C300C300C300C33CC3C3C0FF0000F0000 +FF32:00000000000000003FF0300C300C300C3FF030C030303030300C300C00000000 +FF33:00000000000000000FF0300C300C30000F0000F0000C300C300C0FF000000000 +FF34:00000000000000007FFE01800180018001800180018001800180018000000000 +FF35:0000000000000000300C300C300C300C300C300C300C300C300C0FF000000000 +FF36:0000000000000000600660066006181818181818066006600180018000000000 +FF37:0000000000000000300C300C300C300C33CC33CC3C3C3C3C300C300C00000000 +FF38:0000000000000000300C300C0C300C3003C003C00C300C30300C300C00000000 +FF39:0000000000000000600660061818181806600180018001800180018000000000 +FF3A:00000000000000003FFC000C000C003000C003000C00300030003FFC00000000 +FF3B:00000000000003F0030003000300030003000300030003000300030003F00000 +FF3C:0000000000000000300030000C000300030000C000C00030000C000C00000000 +FF3D:0000000000000FC000C000C000C000C000C000C000C000C000C000C00FC00000 +FF3E:0000000003C00C30300C00000000000000000000000000000000000000000000 +FF3F:000000000000000000000000000000000000000000000000000000007FFE0000 +FF40:0000060001800060000000000000000000000000000000000000000000000000 +FF41:0000000000000000000000000FF0300C000C0FFC300C300C303C0FCC00000000 +FF42:00000000000030003000300033F03C0C300C300C300C300C3C0C33F000000000 +FF43:0000000000000000000000000FF0300C3000300030003000300C0FF000000000 +FF44:000000000000000C000C000C0FCC303C300C300C300C300C303C0FCC00000000 +FF45:0000000000000000000000000FF0300C300C3FFC30003000300C0FF000000000 +FF46:00000000000000780180018001801FF801800180018001800180018000000000 +FF47:00000000000000000000000C0FCC3030303030300FC00C000FF0300C300C0FF0 +FF48:00000000000030003000300033F03C0C300C300C300C300C300C300C00000000 +FF49:00000000000001800180000007800180018001800180018001801FF800000000 +FF4A:00000000000000300030000000F0003000300030003000300030003030C00F00 +FF4B:000000000000300030003000303030C033003C00330030C03030300C00000000 +FF4C:00000000000007800180018001800180018001800180018001801FF800000000 +FF4D:0000000000000000000000007E78618661866186618661866186618600000000 +FF4E:00000000000000000000000033F03C0C300C300C300C300C300C300C00000000 +FF4F:0000000000000000000000000FF0300C300C300C300C300C300C0FF000000000 +FF50:00000000000000000000000033F03C0C300C300C300C300C3C0C33F030003000 +FF51:0000000000000000000000000FCC303C300C300C300C300C303C0FCC000C000C +FF52:00000000000000000000000033F03C0C300C3000300030003000300000000000 +FF53:0000000000000000000000000FF0300C30000F0000F0000C300C0FF000000000 +FF54:00000000000000000180018001801FF801800180018001800180007800000000 +FF55:000000000000000000000000300C300C300C300C300C300C303C0FCC00000000 +FF56:000000000000000000000000300C300C300C0C300C300C3003C003C000000000 +FF57:00000000000000000000000060066186618661866186618661861E7800000000 +FF58:000000000000000000000000300C300C0C3003C003C00C30300C300C00000000 +FF59:000000000000000000000000300C300C300C300C300C0C3C03CC000C000C0FF0 +FF5A:0000000000000000000000003FFC000C003000C003000C0030003FFC00000000 +FF5B:00000000000000F00300030000C000C003000C00030000C000C00300030000F0 +FF5C:0000000001800180018001800180018001800180018001800180018001800180 +FF5D:0000000000000F0000C000C00300030000C0003000C00300030000C000C00F00 +FF5E:0000000000001E06618660780000000000000000000000000000000000000000 +FF5F:0000000000000186061806181860186018601860186018600618061801860000 +FF60:0000000000006180186018600618061806180618061806181860186061800000 +FF61:00000000000000000000000030484830 +FF62:3E202020202020202020200000000000 +FF63:0000000000020202020202020202023E +FF64:00000000000000000000000000402010 +FF65:00000000000000181800000000000000 +FF66:00007E0202027E020202040408106000 +FF67:00000000007E02041408080810102000 +FF68:00000000000204081868080808080800 +FF69:000000000808087F4141010202041800 +FF6A:000000000000003E0808080808087F00 +FF6B:000000000004047F040C142444040C00 +FF6C:000000002020207F1112100808080800 +FF6D:000000000000003C040404047F000000 +FF6E:0000000000007E02027E02027E000000 +FF6F:00000000000000292929020204083000 +FF70:000000000000403F0000000000000000 +FF71:00007F01090A0A080808081010202000 +FF72:000101010202040C1464040404040400 +FF73:000808087F4141410101010202041800 +FF74:0000003E0808080808080808087F0000 +FF75:0004047F040C0C141414242444040C00 +FF76:000808087F0909090911111222224400 +FF77:001010101E7008080F78080804040400 +FF78:0008080F111121410202040408106000 +FF79:002020203F2424440404040808102000 +FF7A:0000007E0202020202020202027E0000 +FF7B:001212127F1212121204040408081000 +FF7C:00003800000071010102020408106000 +FF7D:0000007E020404040808141222214100 +FF7E:00101010101779111212101010080700 +FF7F:00014141210102020204040808102000 +FF80:0008080F111129450202040408106000 +FF81:00020C384808087F0808080810106000 +FF82:00005252524202040404080810204000 +FF83:00003E0000007F080808080810102000 +FF84:00202020202038242220202020202000 +FF85:00080808087F08080808081010204000 +FF86:0000003E0000000000000000007F0000 +FF87:00007F010101221A04060A0911214000 +FF88:000808087F0204040A19294808080800 +FF89:00000202020202040404080810204000 +FF8A:00001212121212111121212121414000 +FF8B:00404040404046784040404040201E00 +FF8C:00007F01010102020204040808102000 +FF8D:00001028284444040202020101010000 +FF8E:000808087F08082A2A2A494949080800 +FF8F:00007E02020204242418181008080800 +FF90:000038060100300C0200700C02010000 +FF91:00080808080810101012222127394100 +FF92:0001010102320A04060A091111204000 +FF93:00003E080808087F0808080808080700 +FF94:00202020277921121210100808080800 +FF95:000000003C04040404040404047F0000 +FF96:0000007E020202027E02020202027E00 +FF97:00003C0000007E020202040408102000 +FF98:00022222222222220204040408081000 +FF99:000008282828282929292A2A4C4C4800 +FF9A:00004040404040424242444448506000 +FF9B:0000007E42424242424242427E420000 +FF9C:00007E42424242020404040808102000 +FF9D:00006010000101010102020408106000 +FF9E:00001048241000000000000000000000 +FF9F:00003048483000000000000000000000 +FFA0:00000000000000000000000000000000 +FFA1:0000000000000000007E020202020000 +FFA2:0000000000000000006C242424240000 +FFA3:00000000000000007414141A11000000 +FFA4:000000000000000000404040407E0000 +FFA5:0000000000000000002424242A390000 +FFA6:000000000000000000222722253A0000 +FFA7:0000000000000000007E4040407E0000 +FFA8:0000000000000000006C4848486C0000 +FFA9:0000000000000000003C043C203C0000 +FFAA:00000000000000000076127242720000 +FFAB:000000000000000000EE2AEA8AEE0000 +FFAC:000000000000000000EA2AEE8AEE0000 +FFAD:000000000000000000E424E48AEA0000 +FFAE:000000000000000000EE28EE88EE0000 +FFAF:000000000000000000FF2AEA8AFF0000 +FFB0:000000000000000000E42EE48AE40000 +FFB1:0000000000000000007C4444447C0000 +FFB2:00000000000000000042427E427E0000 +FFB3:000000000000000000AAAAEEAAEE0000 +FFB4:0000000000000000005454745A710000 +FFB5:00000000000000000010101028440000 +FFB6:0000000000000000002424245A910000 +FFB7:00000000000000101038444444380000 +FFB8:0000000000000000007C101028440000 +FFB9:0000000000000000007E24245A910000 +FFBA:000000000000000038007C1028440000 +FFBB:0000000000000000007E027E02020000 +FFBC:0000000000000000007E407E407E0000 +FFBD:0000000000000000007E2424247E0000 +FFBE:00000000000000000038FE3844380000 +FFBF:00007FFE61866FBE638E6FBE6FBE7FFE7FFE63866DBE638E6DBE63BE7FFE0000 +FFC0:00007FFE61866FBE638E6FBE6FBE7FFE7FFE71CE6FB66FB66FB671CE7FFE0000 +FFC1:00007FFE61866FBE638E6FBE6FBE7FFE7FFE71EE6FCE6FEE6FEE71C67FFE0000 +FFC2:00000000000000000020203820200000 +FFC3:00000000000000000028283828280000 +FFC4:00000000000000000020382038200000 +FFC5:00000000000000000028382838280000 +FFC6:00000000000000000008083808080000 +FFC7:00000000000000000014147414140000 +FFC8:00007FFE61866FBE638E6FBE6FBE7FFE7FFE71CE6FB66FCE6FB671CE7FFE0000 +FFC9:00007FFE61866FBE638E6FBE6FBE7FFE7FFE71CE6FB66FC66FF671CE7FFE0000 +FFCA:00000000000000000008380838080000 +FFCB:00000000000000000014741474140000 +FFCC:000000000000000000101010107C0000 +FFCD:000000000000000000040414147E0000 +FFCE:0000000000000000000A0A2A2AFE0000 +FFCF:000000000000000000040414147C0000 +FFD0:00007FFE61866FBE638E6FBE6FBE7FFE7FFE63CE6DB66DB66DB663CE7FFE0000 +FFD1:00007FFE61866FBE638E6FBE6FBE7FFE7FFE63EE6DCE6DEE6DEE63C67FFE0000 +FFD2:000000000000000000282828287C0000 +FFD3:0000000000000000007C101010100000 +FFD4:0000000000000004043C141C14140000 +FFD5:000000000000000A0A7A2A3A2A2A0000 +FFD6:0000000000000004043C141414140000 +FFD7:0000000000000000007C282828280000 +FFD8:00007FFE61866FBE638E6FBE6FBE7FFE7FFE63CE6DB66DCE6DB663CE7FFE0000 +FFD9:00007FFE61866FBE638E6FBE6FBE7FFE7FFE63CE6DB66DC66DF663CE7FFE0000 +FFDA:00000000000000000000007E00000000 +FFDB:00000000000000000008081828080000 +FFDC:00000000000000000008080808080000 +FFDD:00007FFE61866FBE638E6FBE6FBE7FFE7FFE638E6DB66DB66DB6638E7FFE0000 +FFDE:00007FFE61866FBE638E6FBE6FBE7FFE7FFE63866DBE6D8E6DBE63867FFE0000 +FFDF:00007FFE61866FBE638E6FBE6FBE7FFE7FFE63866DBE6D8E6DBE63BE7FFE0000 +FFE0:0000000000000000018001801FF861866180618061861FF80180018000000000 +FFE1:000000000000000001F80600060006007FE00600060006001FF8780600000000 +FFE2:00000000000000000000000000000000000000003FFC000C000C000C00000000 +FFE3:000000003FFC0000000000000000000000000000000000000000000000000000 +FFE4:0000000000000000018001800180018000000000018001800180018000000000 +FFE5:000000000000000060061818066001807FFE01807FFE01800180018000000000 +FFE6:00000000000000001818181818187FFE19987FFE1E781E781818181800000000 +FFE7:00007FFE61866FBE638E6FBE6FBE7FFE7FFE61866FF663EE6FDE61DE7FFE0000 +FFE8:08080808080808080808080808080808 +FFE9:000000000010207E2010000000000000 +FFEA:0000000000081C2A0808080000000000 +FFEB:00000000000008047E04080000000000 +FFEC:00000000000808082A1C080000000000 +FFED:000000000000007E7E7E7E7E7E000000 +FFEE:00000000000018244242241800000000 +FFEF:00007FFE61866FBE638E6FBE6FBE7FFE7FFE61866FBE638E6FBE61BE7FFE0000 +FFF0:00007FFE61866FBE638E6FBE6FBE7FFE7FFE61CE6FB663B66FB66FCE7FFE0000 +FFF1:00007FFE61866FBE638E6FBE6FBE7FFE7FFE61EE6FCE63EE6FEE6FC67FFE0000 +FFF2:00007FFE61866FBE638E6FBE6FBE7FFE7FFE61866FF663866FBE6F867FFE0000 +FFF3:00007FFE61866FBE638E6FBE6FBE7FFE7FFE618E6FF663C66FF66F8E7FFE0000 +FFF4:00007FFE61866FBE638E6FBE6FBE7FFE7FFE61B66FB663866FF66FF67FFE0000 +FFF5:00007FFE61866FBE638E6FBE6FBE7FFE7FFE61866FBE63866FF66F867FFE0000 +FFF6:00007FFE61866FBE638E6FBE6FBE7FFE7FFE61CE6FBE638E6FB66FCE7FFE0000 +FFF7:00007FFE61866FBE638E6FBE6FBE7FFE7FFE61866FF663EE6FDE6FDE7FFE0000 +FFF8:00007FFE61866FBE638E6FBE6FBE7FFE7FFE61CE6FB663CE6FB66FCE7FFE0000 +FFF9:AAAA000180003E118828083988443E4580000081814001C18220022180005555 +FFFA:AAAA000180003E118828083988443E45800001E1820001C1802003C180005555 +FFFB:AAAA000180003E118828083988443E45800003E1808000818080008180005555 +FFFC:5555800000018000000180001185A9442985A94411998000000180000001AAAA +FFFD:0000007E665A5A7A76767E76767E0000 diff --git a/vendor/sdl-3.0.0/test/utf8.txt b/vendor/sdl-3.0.0/test/utf8.txt new file mode 100644 index 0000000..aab22f1 --- /dev/null +++ b/vendor/sdl-3.0.0/test/utf8.txt @@ -0,0 +1,287 @@ +UTF-8 decoder capability and stress test +---------------------------------------- + +Markus Kuhn - 2003-02-19 + +This test file can help you examine, how your UTF-8 decoder handles +various types of correct, malformed, or otherwise interesting UTF-8 +sequences. This file is not meant to be a conformance test. It does +not prescribes any particular outcome and therefore there is no way to +"pass" or "fail" this test file, even though the texts suggests a +preferable decoder behaviour at some places. The aim is instead to +help you think about and test the behaviour of your UTF-8 on a +systematic collection of unusual inputs. Experience so far suggests +that most first-time authors of UTF-8 decoders find at least one +serious problem in their decoder by using this file. + +The test lines below cover boundary conditions, malformed UTF-8 +sequences as well as correctly encoded UTF-8 sequences of Unicode code +points that should never occur in a correct UTF-8 file. + +According to ISO 10646-1:2000, sections D.7 and 2.3c, a device +receiving UTF-8 shall interpret a "malformed sequence in the same way +that it interprets a character that is outside the adopted subset" and +"characters that are not within the adopted subset shall be indicated +to the user" by a receiving device. A quite commonly used approach in +UTF-8 decoders is to replace any malformed UTF-8 sequence by a +replacement character (U+FFFD), which looks a bit like an inverted +question mark, or a similar symbol. It might be a good idea to +visually distinguish a malformed UTF-8 sequence from a correctly +encoded Unicode character that is just not available in the current +font but otherwise fully legal, even though ISO 10646-1 doesn't +mandate this. In any case, just ignoring malformed sequences or +unavailable characters does not conform to ISO 10646, will make +debugging more difficult, and can lead to user confusion. + +Please check, whether a malformed UTF-8 sequence is (1) represented at +all, (2) represented by exactly one single replacement character (or +equivalent signal), and (3) the following quotation mark after an +illegal UTF-8 sequence is correctly displayed, i.e. proper +resynchronization takes place immageately after any malformed +sequence. This file says "THE END" in the last line, so if you don't +see that, your decoder crashed somehow before, which should always be +cause for concern. + +All lines in this file are exactly 79 characters long (plus the line +feed). In addition, all lines end with "|", except for the two test +lines 2.1.1 and 2.2.1, which contain non-printable ASCII controls +U+0000 and U+007F. If you display this file with a fixed-width font, +these "|" characters should all line up in column 79 (right margin). +This allows you to test quickly, whether your UTF-8 decoder finds the +correct number of characters in every line, that is whether each +malformed sequences is replaced by a single replacement character. + +Note that as an alternative to the notion of malformed sequence used +here, it is also a perfectly acceptable (and in some situations even +preferable) solution to represent each individual byte of a malformed +sequence by a replacement character. If you follow this strategy in +your decoder, then please ignore the "|" column. + + +Here come the tests: | + | +1 Some correct UTF-8 text | + | +(The codepoints for this test are: | + U+03BA U+1F79 U+03C3 U+03BC U+03B5 --ryan.) | + | +You should see the Greek word 'kosme': "κόσμε" | + | + | +2 Boundary condition test cases | + | +2.1 First possible sequence of a certain length | + | +(byte zero skipped...there's a null added at the end of the test. --ryan.) | + | +2.1.2 2 bytes (U-00000080): "€" | +2.1.3 3 bytes (U-00000800): "ࠀ" | +2.1.4 4 bytes (U-00010000): "𐀀" | + | +(5 and 6 byte sequences were made illegal in rfc3629. --ryan.) | +2.1.5 5 bytes (U-00200000): "" | +2.1.6 6 bytes (U-04000000): "" | + | +2.2 Last possible sequence of a certain length | + | +2.2.1 1 byte (U-0000007F): "" | +2.2.2 2 bytes (U-000007FF): "߿" | + | +(Section 5.3.2 below calls this illegal. --ryan.) | +2.2.3 3 bytes (U-0000FFFF): "￿" | + | +(5 and 6 bytes sequences, and 4 bytes sequences > 0x10FFFF were made illegal | + in rfc3629, so these next three should be replaced with a invalid | + character codepoint. --ryan.) | +2.2.4 4 bytes (U-001FFFFF): "" | +2.2.5 5 bytes (U-03FFFFFF): "" | +2.2.6 6 bytes (U-7FFFFFFF): "" | + | +2.3 Other boundary conditions | + | +2.3.1 U-0000D7FF = ed 9f bf = "퟿" | +2.3.2 U-0000E000 = ee 80 80 = "" | +2.3.3 U-0000FFFD = ef bf bd = "�" | +2.3.4 U-0010FFFF = f4 8f bf bf = "􏿿" | + | +(This one is bogus in rfc3629. --ryan.) | +2.3.5 U-00110000 = f4 90 80 80 = "" | + | +3 Malformed sequences | + | +3.1 Unexpected continuation bytes | + | +Each unexpected continuation byte should be separately signalled as a | +malformed sequence of its own. | + | +3.1.1 First continuation byte 0x80: "" | +3.1.2 Last continuation byte 0xbf: "" | + | +3.1.3 2 continuation bytes: "" | +3.1.4 3 continuation bytes: "" | +3.1.5 4 continuation bytes: "" | +3.1.6 5 continuation bytes: "" | +3.1.7 6 continuation bytes: "" | +3.1.8 7 continuation bytes: "" | + | +3.1.9 Sequence of all 64 possible continuation bytes (0x80-0xbf): | + | + " | + | + | + " | + | +3.2 Lonely start characters | + | +3.2.1 All 32 first bytes of 2-byte sequences (0xc0-0xdf), | + each followed by a space character: | + | + " | + " | + | +3.2.2 All 16 first bytes of 3-byte sequences (0xe0-0xef), | + each followed by a space character: | + | + " " | + | +3.2.3 All 8 first bytes of 4-byte sequences (0xf0-0xf7), | + each followed by a space character: | + | + " " | + | +3.2.4 All 4 first bytes of 5-byte sequences (0xf8-0xfb), | + each followed by a space character: | + | + " " | + | +3.2.5 All 2 first bytes of 6-byte sequences (0xfc-0xfd), | + each followed by a space character: | + | + " " | + | +3.3 Sequences with last continuation byte missing | + | +All bytes of an incomplete sequence should be signalled as a single | +malformed sequence, i.e., you should see only a single replacement | +character in each of the next 10 tests. (Characters as in section 2) | + | +3.3.1 2-byte sequence with last byte missing (U+0000): "" | +3.3.2 3-byte sequence with last byte missing (U+0000): "" | +3.3.3 4-byte sequence with last byte missing (U+0000): "" | +3.3.4 5-byte sequence with last byte missing (U+0000): "" | +3.3.5 6-byte sequence with last byte missing (U+0000): "" | +3.3.6 2-byte sequence with last byte missing (U-000007FF): "" | +3.3.7 3-byte sequence with last byte missing (U-0000FFFF): "" | +3.3.8 4-byte sequence with last byte missing (U-001FFFFF): "" | +3.3.9 5-byte sequence with last byte missing (U-03FFFFFF): "" | +3.3.10 6-byte sequence with last byte missing (U-7FFFFFFF): "" | + | +3.4 Concatenation of incomplete sequences | + | +All the 10 sequences of 3.3 concatenated, you should see 10 malformed | +sequences being signalled: | + | + "" | + | +3.5 Impossible bytes | + | +The following two bytes cannot appear in a correct UTF-8 string | + | +3.5.1 fe = "" | +3.5.2 ff = "" | +3.5.3 fe fe ff ff = "" | + | +4 Overlong sequences | + | +The following sequences are not malformed according to the letter of | +the Unicode 2.0 standard. However, they are longer then necessary and | +a correct UTF-8 encoder is not allowed to produce them. A "safe UTF-8 | +decoder" should reject them just like malformed sequences for two | +reasons: (1) It helps to debug applications if overlong sequences are | +not treated as valid representations of characters, because this helps | +to spot problems more quickly. (2) Overlong sequences provide | +alternative representations of characters, that could maliciously be | +used to bypass filters that check only for ASCII characters. For | +instance, a 2-byte encoded line feed (LF) would not be caught by a | +line counter that counts only 0x0a bytes, but it would still be | +processed as a line feed by an unsafe UTF-8 decoder later in the | +pipeline. From a security point of view, ASCII compatibility of UTF-8 | +sequences means also, that ASCII characters are *only* allowed to be | +represented by ASCII bytes in the range 0x00-0x7f. To ensure this | +aspect of ASCII compatibility, use only "safe UTF-8 decoders" that | +reject overlong UTF-8 sequences for which a shorter encoding exists. | + | +4.1 Examples of an overlong ASCII character | + | +With a safe UTF-8 decoder, all of the following five overlong | +representations of the ASCII character slash ("/") should be rejected | +like a malformed UTF-8 sequence, for instance by substituting it with | +a replacement character. If you see a slash below, you do not have a | +safe UTF-8 decoder! | + | +4.1.1 U+002F = c0 af = "" | +4.1.2 U+002F = e0 80 af = "" | +4.1.3 U+002F = f0 80 80 af = "" | +4.1.4 U+002F = f8 80 80 80 af = "" | +4.1.5 U+002F = fc 80 80 80 80 af = "" | + | +4.2 Maximum overlong sequences | + | +Below you see the highest Unicode value that is still resulting in an | +overlong sequence if represented with the given number of bytes. This | +is a boundary test for safe UTF-8 decoders. All five characters should | +be rejected like malformed UTF-8 sequences. | + | +4.2.1 U-0000007F = c1 bf = "" | +4.2.2 U-000007FF = e0 9f bf = "" | +4.2.3 U-0000FFFF = f0 8f bf bf = "" | +4.2.4 U-001FFFFF = f8 87 bf bf bf = "" | +4.2.5 U-03FFFFFF = fc 83 bf bf bf bf = "" | + | +4.3 Overlong representation of the NUL character | + | +The following five sequences should also be rejected like malformed | +UTF-8 sequences and should not be treated like the ASCII NUL | +character. | + | +4.3.1 U+0000 = c0 80 = "" | +4.3.2 U+0000 = e0 80 80 = "" | +4.3.3 U+0000 = f0 80 80 80 = "" | +4.3.4 U+0000 = f8 80 80 80 80 = "" | +4.3.5 U+0000 = fc 80 80 80 80 80 = "" | + | +5 Illegal code positions | + | +The following UTF-8 sequences should be rejected like malformed | +sequences, because they never represent valid ISO 10646 characters and | +a UTF-8 decoder that accepts them might introduce security problems | +comparable to overlong UTF-8 sequences. | + | +5.1 Single UTF-16 surrogates | + | +5.1.1 U+D800 = ed a0 80 = "" | +5.1.2 U+DB7F = ed ad bf = "" | +5.1.3 U+DB80 = ed ae 80 = "" | +5.1.4 U+DBFF = ed af bf = "" | +5.1.5 U+DC00 = ed b0 80 = "" | +5.1.6 U+DF80 = ed be 80 = "" | +5.1.7 U+DFFF = ed bf bf = "" | + | +5.2 Paired UTF-16 surrogates | + | +5.2.1 U+D800 U+DC00 = ed a0 80 ed b0 80 = "" | +5.2.2 U+D800 U+DFFF = ed a0 80 ed bf bf = "" | +5.2.3 U+DB7F U+DC00 = ed ad bf ed b0 80 = "" | +5.2.4 U+DB7F U+DFFF = ed ad bf ed bf bf = "" | +5.2.5 U+DB80 U+DC00 = ed ae 80 ed b0 80 = "" | +5.2.6 U+DB80 U+DFFF = ed ae 80 ed bf bf = "" | +5.2.7 U+DBFF U+DC00 = ed af bf ed b0 80 = "" | +5.2.8 U+DBFF U+DFFF = ed af bf ed bf bf = "" | + | +5.3 Other illegal code positions | + | +5.3.1 U+FFFE = ef bf be = "￾" | +5.3.2 U+FFFF = ef bf bf = "￿" | + | +THE END | + diff --git a/vendor/sdl-3.0.0/test/uwp/Package.appxmanifest.in b/vendor/sdl-3.0.0/test/uwp/Package.appxmanifest.in new file mode 100644 index 0000000..8a5d437 --- /dev/null +++ b/vendor/sdl-3.0.0/test/uwp/Package.appxmanifest.in @@ -0,0 +1,52 @@ + + + + + + + + + $ + libsdl.org + logo-50x50.png + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/sdl-3.0.0/test/uwp/logo-50x50.png b/vendor/sdl-3.0.0/test/uwp/logo-50x50.png new file mode 100644 index 0000000000000000000000000000000000000000..e7903b79f11b0d662db06725c36893dca3646544 GIT binary patch literal 2421 zcmV-*35xcKP)Ve=Y{T7k?QSBPYM5MeUg}|M_JHhJ*fy=R017JDO2FwX(AX13b0-eAp zRF47cu^gWVfNC%BG*A}KKx7b6{Sf#72n6p<;AP-vAu>KxJHwec^F%~Eh}<#2%tjy! zkyrp!w*ys(+%PP&LuD<=UhGJ5bX=_Hg@}=)s$F8RS55Q7#`4v*{pFK$7EQ*`DWPL2 z-AAK}eS6$FZ9dnO&emgbfv)+$B2?S@k$f7cNzE;I2eqfW&4BSz)qB^^Z1dd|46oB8 zk}|vKT2XmIA$fplRj2?SZ!BB2wvR||@n1w(7AkmO-8O1mF;vESahrbs#Lm`jw>4F@ zwYY8hbA7&!K0%Qm0G%m$MSnpl2Dtc0BPF{w{?w-a*9RjKHvOi~F3v}#RKtg#2;`!& zGMo*!>F0^B%4v-9P?|KJfCzwnhi7E=+X<<3*d6a{ZsEedl~vsa!0h5a8z00cBj|WU z5>RbHduLvsZ~VM-Zt8Qh+v8*M!OpNF?Q=y=fY- z9vH-P`^#1>4wV@-yWm_yY!iJON;?RH?DhlPRsVU*1GQUkLA3*5>a2y?Js8hj)$;Z9 zR-2O@(Idw;M!BB?ejd(F6y~MCxj-H8EbwW6nSn#gZzdw&+^Xnj{Y9ELt=R+Y0YF56 zOM%SP>G`hxu4n*0j!B}<8NFeu|H$o#ya?!axVqc0?S3?U>e!=(Jt42PnY5mx3l>bd za@H$5)>Vc+W5L0F%s;db!MqSyit0z<$PO6)ehoALeOW+MmZZ(OVcJQ8B6dV(0+X;p z#`~wbZ8Pm53FIf!=9OY?aEpNJflX0n;J&}7Oj-KcIb-;jcRUHbT{5S==@0$QS9{{9 zi1qRbDK`&BA}o>SikF(P%7x>|Fau^~a$fNhV=gL836k&vHvrXVOx&_roQC*JeyQuEAoBH*kpfS~UzywwxQe5qc$-m@Cqj5*WPW)o9F+RBo)jg+6 zBz!+&{c@K8-3_X*iOB1(<`iBhB2NNIha6E{cDTVa_2{8L1BcAiR^%%=EJZ{2*lECwVZG7_uByaKD`v?JnG z)fa%$)R~3l*p2N9aW9OXz+<~B79g?JeUZD0a|-9FNMCjP zRO$sA@2&eR36XeIkE|SZUX27d(}NBdF3j^9U7mvJvu=D3n>oeEEiM8rfN!>3g?nl? z{4;EdP06ZGNSk%jfYoh%<%&b!5V7`yUjR=6t4qD(me1%oczao#cS*pICF!|Eoy%&s z_O44v`=yG6=2q=CY|j9#KsNC1@d*K@cO2w%Pr{V7-i&`3wm=v+<>AJ%lCXs*fI8)X z;vZN$d$CiuJllIbv~~u+$D@O?%<6tC)3u{GG*CVnK>jZ-qj8dP| zGh@M_+G{q%C&vNyLyoB9I-LsZ4a|od%2$W>(5=AVR#t6@cAI|xm+tt$<7t^)%}%!o zm>@pT10cJAbqQ@fZ+!7ZX-^oxjsfk%Vi5DCLTFuQ<4QWYRVxpuHGGtKV#qDAT0JIl&;X)h|pk45Gno5x>!H+Qo08cAM%rL4B$Y z1Mz?Dx2b6}?bm5Q%M6j$fQ^8|?D^6(?O7^jJvK+8U9~G19-P=npJW7!kbA zR=82YJ{;ZDyu#dJJ>wKUqjQSq^&cDF*{{f4;5MvADjBFj^{+!Ko;eJC_G_KX<^!?7 zVPGYyUwzMhoiYX|B616G16E0LH>%ZV!l~22;Gt!;v6Hb@!8}t=oem=F|B-Kj$T-CQ n4se!8q~R=)NW)nok%s>Q9U2niUnbeS00000NkvXXu0mjfuSkNP literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/test/uwp/splash-620x300.png b/vendor/sdl-3.0.0/test/uwp/splash-620x300.png new file mode 100644 index 0000000000000000000000000000000000000000..0dde7737d6eb2aaa68d0eb795583d9875cb30445 GIT binary patch literal 30918 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 literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/test/uwp/square-44x44.png b/vendor/sdl-3.0.0/test/uwp/square-44x44.png new file mode 100644 index 0000000000000000000000000000000000000000..f0bdcd22488bbac7b2cb8a95c53fa439114eb01e GIT binary patch literal 2082 zcmV+-2;KLIP)h($8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H12d_y) zK~z|U?U;K|RQDCfKj+?MVOe11r3iv3s5Qj#k*Yv6qfULMlNwu11>@8t65Fx16BEbA zW}KL5o6e*U+l)11O~s<^nA+5-+GsLrO+{->9kE70OhH}?sQ3VdecaPOSaglMqM546 zjNh3%bAOL>&i8lj`Tg!WKT%b_NHFd6&mEQ;;Fo{` z<)|J7eh#caBs!Gn{qk@Y;0G3>+JHzpU16~v)q{xi2IA=Q_>EB2d;fq-;V%kBL49i! zqI;6PHz6T15|REvUb+bE0Ad2;0vrOK>QU9LvbB`q^PQ&CH`zk60fz|Hs#LfS4nCr~ z(h8oNnm_MJMX!a}z|OYFnJqQ;8Ru%!hFrN2V}t#u?g&~$4DfEHv)79ghtJ3~Ri*gk z-X|L4>`M!3YFh7@aO$H4^HBK}5P!22wIHuG94J|Lop50r-~@2_JQOvSbHLSyvk_5T zFzu}`)s+80YDaRcXek%V~u`aktJyZzl!KRa7|Q{y4Jj{JW^$ zu&KKdG9)B;HzVKgn_sXiE$``30goDp3CrL*pfV8AFAFvB^-Lwi6j9(1TMH?HL6om^5=ckKsNx1yW;!F zx7{ay8rW20ff1>mE7D+(CihY^k6mgU3hY6(1Ce)tSG*$6^zmFtZLvF8n>v)bDCh35 zN$)LiqlZNz5qTXb0lox`0iFYJmzHc7)mH)j9h<~}t8JOUi@V(R&Z z@j;ct0ig8llp(FJ4EVCKIxUB~NN1;oxr@<Y#tmJOM26irCln9jaw9@jqExdEg+h z9+7NRt5l2}P`qNWDP>@JVRO|HpaNC>QSMV7AmX?)o@CF}tiXa#_8T+b<+phwMP*92 zQH6Ex0~>ETV{e}@tN?}s>&s#jFSz`k?K=`OcBJO@uO4%`rD93_iS5tk&OMJ|AwI6|f&J5%!ueK!qQ ze5c{irjNP_djiHwAAfjy``qSJ%sgAe*5u60!?DSktNM?m(+IMuY;~u5N;pImP>4ve znLC%F#&RCJ=w@3|M)dFd49fVFNk6dOYByhSAKTb|3nz{W)oGdPg6kfB6PO6to9wl< z$D9dEm)Djp{cBQ&(<6qf(%}N=1U)Pm8yXG`+MowlT0ncCI(WULe4phLY5#G?h}PrI zcn^XPr3JK6g}pY7*j8IwT>ohzHnDsC_^NNQ00Km>b~)>M#=lr$QBZr9!u)=DvmFUz z3**964mk=X3i}lbv!_pw>>gvn1RIYOMRd1=$3i{X)2Bx!PnaFkQ^j#T9~K!xR{{9- zz;R>(OMo{+o|hsHU=Of+M?!k(b3?`t6V#_F7sSABSeC~Uvlo_rsD?gnh;#}xSkNDp z6NXBPirN^3^8nSs{X^0%{M0SB6d_gLG6A( zKB`*+Z4)rB%@IjN^;~-XoCH4+qy36g471Y2Hv_B+71K0)a##&(ykBfhrll7wv9b)+ z4h*9c)L|H=+wZqh1uM#raoL18OE{&Lks^lI5;X@2R+G=-MAM7AZ_rn56K5 z!r-1{a&l(d{~yIF6DHW0J=+W&65$~78Zd>fq9eNIl&lx^H*R8jS2ZZl79uU6U_`(tXA7#rjWNs035dZ)H M07*qoM6N<$f@+G`bpQYW literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/wayland-protocols/fractional-scale-v1.xml b/vendor/sdl-3.0.0/wayland-protocols/fractional-scale-v1.xml new file mode 100644 index 0000000..350bfc0 --- /dev/null +++ b/vendor/sdl-3.0.0/wayland-protocols/fractional-scale-v1.xml @@ -0,0 +1,102 @@ + + + + Copyright © 2022 Kenny Levinsen + + 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 (including the next + paragraph) 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. + + + + This protocol allows a compositor to suggest for surfaces to render at + fractional scales. + + A client can submit scaled content by utilizing wp_viewport. This is done by + creating a wp_viewport object for the surface and setting the destination + rectangle to the surface size before the scale factor is applied. + + The buffer size is calculated by multiplying the surface size by the + intended scale. + + The wl_surface buffer scale should remain set to 1. + + If a surface has a surface-local size of 100 px by 50 px and wishes to + submit buffers with a scale of 1.5, then a buffer of 150px by 75 px should + be used and the wp_viewport destination rectangle should be 100 px by 50 px. + + For toplevel surfaces, the size is rounded halfway away from zero. The + rounding algorithm for subsurface position and size is not defined. + + + + + A global interface for requesting surfaces to use fractional scales. + + + + + Informs the server that the client will not be using this protocol + object anymore. This does not affect any other objects, + wp_fractional_scale_v1 objects included. + + + + + + + + + + Create an add-on object for the the wl_surface to let the compositor + request fractional scales. If the given wl_surface already has a + wp_fractional_scale_v1 object associated, the fractional_scale_exists + protocol error is raised. + + + + + + + + + An additional interface to a wl_surface object which allows the compositor + to inform the client of the preferred scale. + + + + + Destroy the fractional scale object. When this object is destroyed, + preferred_scale events will no longer be sent. + + + + + + Notification of a new preferred scale for this surface that the + compositor suggests that the client should use. + + The sent scale is the numerator of a fraction with a denominator of 120. + + + + + diff --git a/vendor/sdl-3.0.0/wayland-protocols/idle-inhibit-unstable-v1.xml b/vendor/sdl-3.0.0/wayland-protocols/idle-inhibit-unstable-v1.xml new file mode 100644 index 0000000..9c06cdc --- /dev/null +++ b/vendor/sdl-3.0.0/wayland-protocols/idle-inhibit-unstable-v1.xml @@ -0,0 +1,83 @@ + + + + + Copyright © 2015 Samsung Electronics Co., Ltd + + 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 (including the next + paragraph) 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. + + + + + This interface permits inhibiting the idle behavior such as screen + blanking, locking, and screensaving. The client binds the idle manager + globally, then creates idle-inhibitor objects for each surface. + + Warning! The protocol described in this file is experimental and + backward incompatible changes may be made. Backward compatible changes + may be added together with the corresponding interface version bump. + Backward incompatible changes are done by bumping the version number in + the protocol and interface names and resetting the interface version. + Once the protocol is to be declared stable, the 'z' prefix and the + version number in the protocol and interface names are removed and the + interface version number is reset. + + + + + Destroy the inhibit manager. + + + + + + Create a new inhibitor object associated with the given surface. + + + + + + + + + + An idle inhibitor prevents the output that the associated surface is + visible on from being set to a state where it is not visually usable due + to lack of user interaction (e.g. blanked, dimmed, locked, set to power + save, etc.) Any screensaver processes are also blocked from displaying. + + If the surface is destroyed, unmapped, becomes occluded, loses + visibility, or otherwise becomes not visually relevant for the user, the + idle inhibitor will not be honored by the compositor; if the surface + subsequently regains visibility the inhibitor takes effect once again. + Likewise, the inhibitor isn't honored if the system was already idled at + the time the inhibitor was established, although if the system later + de-idles and re-idles the inhibitor will take effect. + + + + + Remove the inhibitor effect from the associated wl_surface. + + + + + diff --git a/vendor/sdl-3.0.0/wayland-protocols/input-timestamps-unstable-v1.xml b/vendor/sdl-3.0.0/wayland-protocols/input-timestamps-unstable-v1.xml new file mode 100644 index 0000000..7c5e082 --- /dev/null +++ b/vendor/sdl-3.0.0/wayland-protocols/input-timestamps-unstable-v1.xml @@ -0,0 +1,145 @@ + + + + + Copyright © 2017 Collabora, Ltd. + + 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 (including the next + paragraph) 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. + + + + This protocol specifies a way for a client to request and receive + high-resolution timestamps for input events. + + Warning! The protocol described in this file is experimental and + backward incompatible changes may be made. Backward compatible changes + may be added together with the corresponding interface version bump. + Backward incompatible changes are done by bumping the version number in + the protocol and interface names and resetting the interface version. + Once the protocol is to be declared stable, the 'z' prefix and the + version number in the protocol and interface names are removed and the + interface version number is reset. + + + + + A global interface used for requesting high-resolution timestamps + for input events. + + + + + Informs the server that the client will no longer be using this + protocol object. Existing objects created by this object are not + affected. + + + + + + Creates a new input timestamps object that represents a subscription + to high-resolution timestamp events for all wl_keyboard events that + carry a timestamp. + + If the associated wl_keyboard object is invalidated, either through + client action (e.g. release) or server-side changes, the input + timestamps object becomes inert and the client should destroy it + by calling zwp_input_timestamps_v1.destroy. + + + + + + + + Creates a new input timestamps object that represents a subscription + to high-resolution timestamp events for all wl_pointer events that + carry a timestamp. + + If the associated wl_pointer object is invalidated, either through + client action (e.g. release) or server-side changes, the input + timestamps object becomes inert and the client should destroy it + by calling zwp_input_timestamps_v1.destroy. + + + + + + + + Creates a new input timestamps object that represents a subscription + to high-resolution timestamp events for all wl_touch events that + carry a timestamp. + + If the associated wl_touch object becomes invalid, either through + client action (e.g. release) or server-side changes, the input + timestamps object becomes inert and the client should destroy it + by calling zwp_input_timestamps_v1.destroy. + + + + + + + + + Provides high-resolution timestamp events for a set of subscribed input + events. The set of subscribed input events is determined by the + zwp_input_timestamps_manager_v1 request used to create this object. + + + + + Informs the server that the client will no longer be using this + protocol object. After the server processes the request, no more + timestamp events will be emitted. + + + + + + The timestamp event is associated with the first subsequent input event + carrying a timestamp which belongs to the set of input events this + object is subscribed to. + + The timestamp provided by this event is a high-resolution version of + the timestamp argument of the associated input event. The provided + timestamp is in the same clock domain and is at least as accurate as + the associated input event timestamp. + + The timestamp is expressed as tv_sec_hi, tv_sec_lo, tv_nsec triples, + each component being an unsigned 32-bit value. Whole seconds are in + tv_sec which is a 64-bit value combined from tv_sec_hi and tv_sec_lo, + and the additional fractional part in tv_nsec as nanoseconds. Hence, + for valid timestamps tv_nsec must be in [0, 999999999]. + + + + + + + + diff --git a/vendor/sdl-3.0.0/wayland-protocols/keyboard-shortcuts-inhibit-unstable-v1.xml b/vendor/sdl-3.0.0/wayland-protocols/keyboard-shortcuts-inhibit-unstable-v1.xml new file mode 100644 index 0000000..2774876 --- /dev/null +++ b/vendor/sdl-3.0.0/wayland-protocols/keyboard-shortcuts-inhibit-unstable-v1.xml @@ -0,0 +1,143 @@ + + + + + Copyright © 2017 Red Hat Inc. + + 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 (including the next + paragraph) 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. + + + + This protocol specifies a way for a client to request the compositor + to ignore its own keyboard shortcuts for a given seat, so that all + key events from that seat get forwarded to a surface. + + Warning! The protocol described in this file is experimental and + backward incompatible changes may be made. Backward compatible + changes may be added together with the corresponding interface + version bump. + Backward incompatible changes are done by bumping the version + number in the protocol and interface names and resetting the + interface version. Once the protocol is to be declared stable, + the 'z' prefix and the version number in the protocol and + interface names are removed and the interface version number is + reset. + + + + + A global interface used for inhibiting the compositor keyboard shortcuts. + + + + + Destroy the keyboard shortcuts inhibitor manager. + + + + + + Create a new keyboard shortcuts inhibitor object associated with + the given surface for the given seat. + + If shortcuts are already inhibited for the specified seat and surface, + a protocol error "already_inhibited" is raised by the compositor. + + + + + + + + + + + + + + A keyboard shortcuts inhibitor instructs the compositor to ignore + its own keyboard shortcuts when the associated surface has keyboard + focus. As a result, when the surface has keyboard focus on the given + seat, it will receive all key events originating from the specified + seat, even those which would normally be caught by the compositor for + its own shortcuts. + + The Wayland compositor is however under no obligation to disable + all of its shortcuts, and may keep some special key combo for its own + use, including but not limited to one allowing the user to forcibly + restore normal keyboard events routing in the case of an unwilling + client. The compositor may also use the same key combo to reactivate + an existing shortcut inhibitor that was previously deactivated on + user request. + + When the compositor restores its own keyboard shortcuts, an + "inactive" event is emitted to notify the client that the keyboard + shortcuts inhibitor is not effectively active for the surface and + seat any more, and the client should not expect to receive all + keyboard events. + + When the keyboard shortcuts inhibitor is inactive, the client has + no way to forcibly reactivate the keyboard shortcuts inhibitor. + + The user can chose to re-enable a previously deactivated keyboard + shortcuts inhibitor using any mechanism the compositor may offer, + in which case the compositor will send an "active" event to notify + the client. + + If the surface is destroyed, unmapped, or loses the seat's keyboard + focus, the keyboard shortcuts inhibitor becomes irrelevant and the + compositor will restore its own keyboard shortcuts but no "inactive" + event is emitted in this case. + + + + + Remove the keyboard shortcuts inhibitor from the associated wl_surface. + + + + + + This event indicates that the shortcut inhibitor is active. + + The compositor sends this event every time compositor shortcuts + are inhibited on behalf of the surface. When active, the client + may receive input events normally reserved by the compositor + (see zwp_keyboard_shortcuts_inhibitor_v1). + + This occurs typically when the initial request "inhibit_shortcuts" + first becomes active or when the user instructs the compositor to + re-enable and existing shortcuts inhibitor using any mechanism + offered by the compositor. + + + + + + This event indicates that the shortcuts inhibitor is inactive, + normal shortcuts processing is restored by the compositor. + + + + diff --git a/vendor/sdl-3.0.0/wayland-protocols/pointer-constraints-unstable-v1.xml b/vendor/sdl-3.0.0/wayland-protocols/pointer-constraints-unstable-v1.xml new file mode 100644 index 0000000..4e67a13 --- /dev/null +++ b/vendor/sdl-3.0.0/wayland-protocols/pointer-constraints-unstable-v1.xml @@ -0,0 +1,339 @@ + + + + + Copyright © 2014 Jonas Ådahl + Copyright © 2015 Red Hat Inc. + + 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 (including the next + paragraph) 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. + + + + This protocol specifies a set of interfaces used for adding constraints to + the motion of a pointer. Possible constraints include confining pointer + motions to a given region, or locking it to its current position. + + In order to constrain the pointer, a client must first bind the global + interface "wp_pointer_constraints" which, if a compositor supports pointer + constraints, is exposed by the registry. Using the bound global object, the + client uses the request that corresponds to the type of constraint it wants + to make. See wp_pointer_constraints for more details. + + Warning! The protocol described in this file is experimental and backward + incompatible changes may be made. Backward compatible changes may be added + together with the corresponding interface version bump. Backward + incompatible changes are done by bumping the version number in the protocol + and interface names and resetting the interface version. Once the protocol + is to be declared stable, the 'z' prefix and the version number in the + protocol and interface names are removed and the interface version number is + reset. + + + + + The global interface exposing pointer constraining functionality. It + exposes two requests: lock_pointer for locking the pointer to its + position, and confine_pointer for locking the pointer to a region. + + The lock_pointer and confine_pointer requests create the objects + wp_locked_pointer and wp_confined_pointer respectively, and the client can + use these objects to interact with the lock. + + For any surface, only one lock or confinement may be active across all + wl_pointer objects of the same seat. If a lock or confinement is requested + when another lock or confinement is active or requested on the same surface + and with any of the wl_pointer objects of the same seat, an + 'already_constrained' error will be raised. + + + + + These errors can be emitted in response to wp_pointer_constraints + requests. + + + + + + + These values represent different lifetime semantics. They are passed + as arguments to the factory requests to specify how the constraint + lifetimes should be managed. + + + + A oneshot pointer constraint will never reactivate once it has been + deactivated. See the corresponding deactivation event + (wp_locked_pointer.unlocked and wp_confined_pointer.unconfined) for + details. + + + + + A persistent pointer constraint may again reactivate once it has + been deactivated. See the corresponding deactivation event + (wp_locked_pointer.unlocked and wp_confined_pointer.unconfined) for + details. + + + + + + + Used by the client to notify the server that it will no longer use this + pointer constraints object. + + + + + + The lock_pointer request lets the client request to disable movements of + the virtual pointer (i.e. the cursor), effectively locking the pointer + to a position. This request may not take effect immediately; in the + future, when the compositor deems implementation-specific constraints + are satisfied, the pointer lock will be activated and the compositor + sends a locked event. + + The protocol provides no guarantee that the constraints are ever + satisfied, and does not require the compositor to send an error if the + constraints cannot ever be satisfied. It is thus possible to request a + lock that will never activate. + + There may not be another pointer constraint of any kind requested or + active on the surface for any of the wl_pointer objects of the seat of + the passed pointer when requesting a lock. If there is, an error will be + raised. See general pointer lock documentation for more details. + + The intersection of the region passed with this request and the input + region of the surface is used to determine where the pointer must be + in order for the lock to activate. It is up to the compositor whether to + warp the pointer or require some kind of user interaction for the lock + to activate. If the region is null the surface input region is used. + + A surface may receive pointer focus without the lock being activated. + + The request creates a new object wp_locked_pointer which is used to + interact with the lock as well as receive updates about its state. See + the the description of wp_locked_pointer for further information. + + Note that while a pointer is locked, the wl_pointer objects of the + corresponding seat will not emit any wl_pointer.motion events, but + relative motion events will still be emitted via wp_relative_pointer + objects of the same seat. wl_pointer.axis and wl_pointer.button events + are unaffected. + + + + + + + + + + + The confine_pointer request lets the client request to confine the + pointer cursor to a given region. This request may not take effect + immediately; in the future, when the compositor deems implementation- + specific constraints are satisfied, the pointer confinement will be + activated and the compositor sends a confined event. + + The intersection of the region passed with this request and the input + region of the surface is used to determine where the pointer must be + in order for the confinement to activate. It is up to the compositor + whether to warp the pointer or require some kind of user interaction for + the confinement to activate. If the region is null the surface input + region is used. + + The request will create a new object wp_confined_pointer which is used + to interact with the confinement as well as receive updates about its + state. See the the description of wp_confined_pointer for further + information. + + + + + + + + + + + + The wp_locked_pointer interface represents a locked pointer state. + + While the lock of this object is active, the wl_pointer objects of the + associated seat will not emit any wl_pointer.motion events. + + This object will send the event 'locked' when the lock is activated. + Whenever the lock is activated, it is guaranteed that the locked surface + will already have received pointer focus and that the pointer will be + within the region passed to the request creating this object. + + To unlock the pointer, send the destroy request. This will also destroy + the wp_locked_pointer object. + + If the compositor decides to unlock the pointer the unlocked event is + sent. See wp_locked_pointer.unlock for details. + + When unlocking, the compositor may warp the cursor position to the set + cursor position hint. If it does, it will not result in any relative + motion events emitted via wp_relative_pointer. + + If the surface the lock was requested on is destroyed and the lock is not + yet activated, the wp_locked_pointer object is now defunct and must be + destroyed. + + + + + Destroy the locked pointer object. If applicable, the compositor will + unlock the pointer. + + + + + + Set the cursor position hint relative to the top left corner of the + surface. + + If the client is drawing its own cursor, it should update the position + hint to the position of its own cursor. A compositor may use this + information to warp the pointer upon unlock in order to avoid pointer + jumps. + + The cursor position hint is double buffered. The new hint will only take + effect when the associated surface gets it pending state applied. See + wl_surface.commit for details. + + + + + + + + Set a new region used to lock the pointer. + + The new lock region is double-buffered. The new lock region will + only take effect when the associated surface gets its pending state + applied. See wl_surface.commit for details. + + For details about the lock region, see wp_locked_pointer. + + + + + + + Notification that the pointer lock of the seat's pointer is activated. + + + + + + Notification that the pointer lock of the seat's pointer is no longer + active. If this is a oneshot pointer lock (see + wp_pointer_constraints.lifetime) this object is now defunct and should + be destroyed. If this is a persistent pointer lock (see + wp_pointer_constraints.lifetime) this pointer lock may again + reactivate in the future. + + + + + + + The wp_confined_pointer interface represents a confined pointer state. + + This object will send the event 'confined' when the confinement is + activated. Whenever the confinement is activated, it is guaranteed that + the surface the pointer is confined to will already have received pointer + focus and that the pointer will be within the region passed to the request + creating this object. It is up to the compositor to decide whether this + requires some user interaction and if the pointer will warp to within the + passed region if outside. + + To unconfine the pointer, send the destroy request. This will also destroy + the wp_confined_pointer object. + + If the compositor decides to unconfine the pointer the unconfined event is + sent. The wp_confined_pointer object is at this point defunct and should + be destroyed. + + + + + Destroy the confined pointer object. If applicable, the compositor will + unconfine the pointer. + + + + + + Set a new region used to confine the pointer. + + The new confine region is double-buffered. The new confine region will + only take effect when the associated surface gets its pending state + applied. See wl_surface.commit for details. + + If the confinement is active when the new confinement region is applied + and the pointer ends up outside of newly applied region, the pointer may + warped to a position within the new confinement region. If warped, a + wl_pointer.motion event will be emitted, but no + wp_relative_pointer.relative_motion event. + + The compositor may also, instead of using the new region, unconfine the + pointer. + + For details about the confine region, see wp_confined_pointer. + + + + + + + Notification that the pointer confinement of the seat's pointer is + activated. + + + + + + Notification that the pointer confinement of the seat's pointer is no + longer active. If this is a oneshot pointer confinement (see + wp_pointer_constraints.lifetime) this object is now defunct and should + be destroyed. If this is a persistent pointer confinement (see + wp_pointer_constraints.lifetime) this pointer confinement may again + reactivate in the future. + + + + + diff --git a/vendor/sdl-3.0.0/wayland-protocols/primary-selection-unstable-v1.xml b/vendor/sdl-3.0.0/wayland-protocols/primary-selection-unstable-v1.xml new file mode 100644 index 0000000..e5a39e3 --- /dev/null +++ b/vendor/sdl-3.0.0/wayland-protocols/primary-selection-unstable-v1.xml @@ -0,0 +1,225 @@ + + + + Copyright © 2015, 2016 Red Hat + + 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 (including the next + paragraph) 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. + + + + This protocol provides the ability to have a primary selection device to + match that of the X server. This primary selection is a shortcut to the + common clipboard selection, where text just needs to be selected in order + to allow copying it elsewhere. The de facto way to perform this action + is the middle mouse button, although it is not limited to this one. + + Clients wishing to honor primary selection should create a primary + selection source and set it as the selection through + wp_primary_selection_device.set_selection whenever the text selection + changes. In order to minimize calls in pointer-driven text selection, + it should happen only once after the operation finished. Similarly, + a NULL source should be set when text is unselected. + + wp_primary_selection_offer objects are first announced through the + wp_primary_selection_device.data_offer event. Immediately after this event, + the primary data offer will emit wp_primary_selection_offer.offer events + to let know of the mime types being offered. + + When the primary selection changes, the client with the keyboard focus + will receive wp_primary_selection_device.selection events. Only the client + with the keyboard focus will receive such events with a non-NULL + wp_primary_selection_offer. Across keyboard focus changes, previously + focused clients will receive wp_primary_selection_device.events with a + NULL wp_primary_selection_offer. + + In order to request the primary selection data, the client must pass + a recent serial pertaining to the press event that is triggering the + operation, if the compositor deems the serial valid and recent, the + wp_primary_selection_source.send event will happen in the other end + to let the transfer begin. The client owning the primary selection + should write the requested data, and close the file descriptor + immediately. + + If the primary selection owner client disappeared during the transfer, + the client reading the data will receive a + wp_primary_selection_device.selection event with a NULL + wp_primary_selection_offer, the client should take this as a hint + to finish the reads related to the no longer existing offer. + + The primary selection owner should be checking for errors during + writes, merely cancelling the ongoing transfer if any happened. + + + + + The primary selection device manager is a singleton global object that + provides access to the primary selection. It allows to create + wp_primary_selection_source objects, as well as retrieving the per-seat + wp_primary_selection_device objects. + + + + + Create a new primary selection source. + + + + + + + Create a new data device for a given seat. + + + + + + + + Destroy the primary selection device manager. + + + + + + + + Replaces the current selection. The previous owner of the primary + selection will receive a wp_primary_selection_source.cancelled event. + + To unset the selection, set the source to NULL. + + + + + + + + Introduces a new wp_primary_selection_offer object that may be used + to receive the current primary selection. Immediately following this + event, the new wp_primary_selection_offer object will send + wp_primary_selection_offer.offer events to describe the offered mime + types. + + + + + + + The wp_primary_selection_device.selection event is sent to notify the + client of a new primary selection. This event is sent after the + wp_primary_selection.data_offer event introducing this object, and after + the offer has announced its mimetypes through + wp_primary_selection_offer.offer. + + The data_offer is valid until a new offer or NULL is received + or until the client loses keyboard focus. The client must destroy the + previous selection data_offer, if any, upon receiving this event. + + + + + + + Destroy the primary selection device. + + + + + + + A wp_primary_selection_offer represents an offer to transfer the contents + of the primary selection clipboard to the client. Similar to + wl_data_offer, the offer also describes the mime types that the data can + be converted to and provides the mechanisms for transferring the data + directly to the client. + + + + + To transfer the contents of the primary selection clipboard, the client + issues this request and indicates the mime type that it wants to + receive. The transfer happens through the passed file descriptor + (typically created with the pipe system call). The source client writes + the data in the mime type representation requested and then closes the + file descriptor. + + The receiving client reads from the read end of the pipe until EOF and + closes its end, at which point the transfer is complete. + + + + + + + + Destroy the primary selection offer. + + + + + + Sent immediately after creating announcing the + wp_primary_selection_offer through + wp_primary_selection_device.data_offer. One event is sent per offered + mime type. + + + + + + + + The source side of a wp_primary_selection_offer, it provides a way to + describe the offered data and respond to requests to transfer the + requested contents of the primary selection clipboard. + + + + + This request adds a mime type to the set of mime types advertised to + targets. Can be called several times to offer multiple types. + + + + + + + Destroy the primary selection source. + + + + + + Request for the current primary selection contents from the client. + Send the specified mime type over the passed file descriptor, then + close it. + + + + + + + + This primary selection source is no longer valid. The client should + clean up and destroy this primary selection source. + + + + diff --git a/vendor/sdl-3.0.0/wayland-protocols/relative-pointer-unstable-v1.xml b/vendor/sdl-3.0.0/wayland-protocols/relative-pointer-unstable-v1.xml new file mode 100644 index 0000000..ca6f81d --- /dev/null +++ b/vendor/sdl-3.0.0/wayland-protocols/relative-pointer-unstable-v1.xml @@ -0,0 +1,136 @@ + + + + + Copyright © 2014 Jonas Ådahl + Copyright © 2015 Red Hat Inc. + + 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 (including the next + paragraph) 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. + + + + This protocol specifies a set of interfaces used for making clients able to + receive relative pointer events not obstructed by barriers (such as the + monitor edge or other pointer barriers). + + To start receiving relative pointer events, a client must first bind the + global interface "wp_relative_pointer_manager" which, if a compositor + supports relative pointer motion events, is exposed by the registry. After + having created the relative pointer manager proxy object, the client uses + it to create the actual relative pointer object using the + "get_relative_pointer" request given a wl_pointer. The relative pointer + motion events will then, when applicable, be transmitted via the proxy of + the newly created relative pointer object. See the documentation of the + relative pointer interface for more details. + + Warning! The protocol described in this file is experimental and backward + incompatible changes may be made. Backward compatible changes may be added + together with the corresponding interface version bump. Backward + incompatible changes are done by bumping the version number in the protocol + and interface names and resetting the interface version. Once the protocol + is to be declared stable, the 'z' prefix and the version number in the + protocol and interface names are removed and the interface version number is + reset. + + + + + A global interface used for getting the relative pointer object for a + given pointer. + + + + + Used by the client to notify the server that it will no longer use this + relative pointer manager object. + + + + + + Create a relative pointer interface given a wl_pointer object. See the + wp_relative_pointer interface for more details. + + + + + + + + + A wp_relative_pointer object is an extension to the wl_pointer interface + used for emitting relative pointer events. It shares the same focus as + wl_pointer objects of the same seat and will only emit events when it has + focus. + + + + + + + + + Relative x/y pointer motion from the pointer of the seat associated with + this object. + + A relative motion is in the same dimension as regular wl_pointer motion + events, except they do not represent an absolute position. For example, + moving a pointer from (x, y) to (x', y') would have the equivalent + relative motion (x' - x, y' - y). If a pointer motion caused the + absolute pointer position to be clipped by for example the edge of the + monitor, the relative motion is unaffected by the clipping and will + represent the unclipped motion. + + This event also contains non-accelerated motion deltas. The + non-accelerated delta is, when applicable, the regular pointer motion + delta as it was before having applied motion acceleration and other + transformations such as normalization. + + Note that the non-accelerated delta does not represent 'raw' events as + they were read from some device. Pointer motion acceleration is device- + and configuration-specific and non-accelerated deltas and accelerated + deltas may have the same value on some devices. + + Relative motions are not coupled to wl_pointer.motion events, and can be + sent in combination with such events, but also independently. There may + also be scenarios where wl_pointer.motion is sent, but there is no + relative motion. The order of an absolute and relative motion event + originating from the same physical motion is not guaranteed. + + If the client needs button events or focus state, it can receive them + from a wl_pointer object of the same seat that the wp_relative_pointer + object is associated with. + + + + + + + + + + + diff --git a/vendor/sdl-3.0.0/wayland-protocols/tablet-unstable-v2.xml b/vendor/sdl-3.0.0/wayland-protocols/tablet-unstable-v2.xml new file mode 100644 index 0000000..b286d96 --- /dev/null +++ b/vendor/sdl-3.0.0/wayland-protocols/tablet-unstable-v2.xml @@ -0,0 +1,1178 @@ + + + + + Copyright 2014 © Stephen "Lyude" Chandler Paul + Copyright 2015-2016 © Red Hat, Inc. + + 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 (including the + next paragraph) 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. + + + + This description provides a high-level overview of the interplay between + the interfaces defined this protocol. For details, see the protocol + specification. + + More than one tablet may exist, and device-specifics matter. Tablets are + not represented by a single virtual device like wl_pointer. A client + binds to the tablet manager object which is just a proxy object. From + that, the client requests wp_tablet_manager.get_tablet_seat(wl_seat) + and that returns the actual interface that has all the tablets. With + this indirection, we can avoid merging wp_tablet into the actual Wayland + protocol, a long-term benefit. + + The wp_tablet_seat sends a "tablet added" event for each tablet + connected. That event is followed by descriptive events about the + hardware; currently that includes events for name, vid/pid and + a wp_tablet.path event that describes a local path. This path can be + used to uniquely identify a tablet or get more information through + libwacom. Emulated or nested tablets can skip any of those, e.g. a + virtual tablet may not have a vid/pid. The sequence of descriptive + events is terminated by a wp_tablet.done event to signal that a client + may now finalize any initialization for that tablet. + + Events from tablets require a tool in proximity. Tools are also managed + by the tablet seat; a "tool added" event is sent whenever a tool is new + to the compositor. That event is followed by a number of descriptive + events about the hardware; currently that includes capabilities, + hardware id and serial number, and tool type. Similar to the tablet + interface, a wp_tablet_tool.done event is sent to terminate that initial + sequence. + + Any event from a tool happens on the wp_tablet_tool interface. When the + tool gets into proximity of the tablet, a proximity_in event is sent on + the wp_tablet_tool interface, listing the tablet and the surface. That + event is followed by a motion event with the coordinates. After that, + it's the usual motion, axis, button, etc. events. The protocol's + serialisation means events are grouped by wp_tablet_tool.frame events. + + Two special events (that don't exist in X) are down and up. They signal + "tip touching the surface". For tablets without real proximity + detection, the sequence is: proximity_in, motion, down, frame. + + When the tool leaves proximity, a proximity_out event is sent. If any + button is still down, a button release event is sent before this + proximity event. These button events are sent in the same frame as the + proximity event to signal to the client that the buttons were held when + the tool left proximity. + + If the tool moves out of the surface but stays in proximity (i.e. + between windows), compositor-specific grab policies apply. This usually + means that the proximity-out is delayed until all buttons are released. + + Moving a tool physically from one tablet to the other has no real effect + on the protocol, since we already have the tool object from the "tool + added" event. All the information is already there and the proximity + events on both tablets are all a client needs to reconstruct what + happened. + + Some extra axes are normalized, i.e. the client knows the range as + specified in the protocol (e.g. [0, 65535]), the granularity however is + unknown. The current normalized axes are pressure, distance, and slider. + + Other extra axes are in physical units as specified in the protocol. + The current extra axes with physical units are tilt, rotation and + wheel rotation. + + Since tablets work independently of the pointer controlled by the mouse, + the focus handling is independent too and controlled by proximity. + The wp_tablet_tool.set_cursor request sets a tool-specific cursor. + This cursor surface may be the same as the mouse cursor, and it may be + the same across tools but it is possible to be more fine-grained. For + example, a client may set different cursors for the pen and eraser. + + Tools are generally independent of tablets and it is + compositor-specific policy when a tool can be removed. Common approaches + will likely include some form of removing a tool when all tablets the + tool was used on are removed. + + Warning! The protocol described in this file is experimental and + backward incompatible changes may be made. Backward compatible changes + may be added together with the corresponding interface version bump. + Backward incompatible changes are done by bumping the version number in + the protocol and interface names and resetting the interface version. + Once the protocol is to be declared stable, the 'z' prefix and the + version number in the protocol and interface names are removed and the + interface version number is reset. + + + + + An object that provides access to the graphics tablets available on this + system. All tablets are associated with a seat, to get access to the + actual tablets, use wp_tablet_manager.get_tablet_seat. + + + + + Get the wp_tablet_seat object for the given seat. This object + provides access to all graphics tablets in this seat. + + + + + + + + Destroy the wp_tablet_manager object. Objects created from this + object are unaffected and should be destroyed separately. + + + + + + + An object that provides access to the graphics tablets available on this + seat. After binding to this interface, the compositor sends a set of + wp_tablet_seat.tablet_added and wp_tablet_seat.tool_added events. + + + + + Destroy the wp_tablet_seat object. Objects created from this + object are unaffected and should be destroyed separately. + + + + + + This event is sent whenever a new tablet becomes available on this + seat. This event only provides the object id of the tablet, any + static information about the tablet (device name, vid/pid, etc.) is + sent through the wp_tablet interface. + + + + + + + This event is sent whenever a tool that has not previously been used + with a tablet comes into use. This event only provides the object id + of the tool; any static information about the tool (capabilities, + type, etc.) is sent through the wp_tablet_tool interface. + + + + + + + This event is sent whenever a new pad is known to the system. Typically, + pads are physically attached to tablets and a pad_added event is + sent immediately after the wp_tablet_seat.tablet_added. + However, some standalone pad devices logically attach to tablets at + runtime, and the client must wait for wp_tablet_pad.enter to know + the tablet a pad is attached to. + + This event only provides the object id of the pad. All further + features (buttons, strips, rings) are sent through the wp_tablet_pad + interface. + + + + + + + + An object that represents a physical tool that has been, or is + currently in use with a tablet in this seat. Each wp_tablet_tool + object stays valid until the client destroys it; the compositor + reuses the wp_tablet_tool object to indicate that the object's + respective physical tool has come into proximity of a tablet again. + + A wp_tablet_tool object's relation to a physical tool depends on the + tablet's ability to report serial numbers. If the tablet supports + this capability, then the object represents a specific physical tool + and can be identified even when used on multiple tablets. + + A tablet tool has a number of static characteristics, e.g. tool type, + hardware_serial and capabilities. These capabilities are sent in an + event sequence after the wp_tablet_seat.tool_added event before any + actual events from this tool. This initial event sequence is + terminated by a wp_tablet_tool.done event. + + Tablet tool events are grouped by wp_tablet_tool.frame events. + Any events received before a wp_tablet_tool.frame event should be + considered part of the same hardware state change. + + + + + Sets the surface of the cursor used for this tool on the given + tablet. This request only takes effect if the tool is in proximity + of one of the requesting client's surfaces or the surface parameter + is the current pointer surface. If there was a previous surface set + with this request it is replaced. If surface is NULL, the cursor + image is hidden. + + The parameters hotspot_x and hotspot_y define the position of the + pointer surface relative to the pointer location. Its top-left corner + is always at (x, y) - (hotspot_x, hotspot_y), where (x, y) are the + coordinates of the pointer location, in surface-local coordinates. + + On surface.attach requests to the pointer surface, hotspot_x and + hotspot_y are decremented by the x and y parameters passed to the + request. Attach must be confirmed by wl_surface.commit as usual. + + The hotspot can also be updated by passing the currently set pointer + surface to this request with new values for hotspot_x and hotspot_y. + + The current and pending input regions of the wl_surface are cleared, + and wl_surface.set_input_region is ignored until the wl_surface is no + longer used as the cursor. When the use as a cursor ends, the current + and pending input regions become undefined, and the wl_surface is + unmapped. + + This request gives the surface the role of a wp_tablet_tool cursor. A + surface may only ever be used as the cursor surface for one + wp_tablet_tool. If the surface already has another role or has + previously been used as cursor surface for a different tool, a + protocol error is raised. + + + + + + + + + + This destroys the client's resource for this tool object. + + + + + + Describes the physical type of a tool. The physical type of a tool + generally defines its base usage. + + The mouse tool represents a mouse-shaped tool that is not a relative + device but bound to the tablet's surface, providing absolute + coordinates. + + The lens tool is a mouse-shaped tool with an attached lens to + provide precision focus. + + + + + + + + + + + + + + The tool type is the high-level type of the tool and usually decides + the interaction expected from this tool. + + This event is sent in the initial burst of events before the + wp_tablet_tool.done event. + + + + + + + If the physical tool can be identified by a unique 64-bit serial + number, this event notifies the client of this serial number. + + If multiple tablets are available in the same seat and the tool is + uniquely identifiable by the serial number, that tool may move + between tablets. + + Otherwise, if the tool has no serial number and this event is + missing, the tool is tied to the tablet it first comes into + proximity with. Even if the physical tool is used on multiple + tablets, separate wp_tablet_tool objects will be created, one per + tablet. + + This event is sent in the initial burst of events before the + wp_tablet_tool.done event. + + + + + + + + This event notifies the client of a hardware id available on this tool. + + The hardware id is a device-specific 64-bit id that provides extra + information about the tool in use, beyond the wl_tool.type + enumeration. The format of the id is specific to tablets made by + Wacom Inc. For example, the hardware id of a Wacom Grip + Pen (a stylus) is 0x802. + + This event is sent in the initial burst of events before the + wp_tablet_tool.done event. + + + + + + + + Describes extra capabilities on a tablet. + + Any tool must provide x and y values, extra axes are + device-specific. + + + + + + + + + + + + This event notifies the client of any capabilities of this tool, + beyond the main set of x/y axes and tip up/down detection. + + One event is sent for each extra capability available on this tool. + + This event is sent in the initial burst of events before the + wp_tablet_tool.done event. + + + + + + + This event signals the end of the initial burst of descriptive + events. A client may consider the static description of the tool to + be complete and finalize initialization of the tool. + + + + + + This event is sent when the tool is removed from the system and will + send no further events. Should the physical tool come back into + proximity later, a new wp_tablet_tool object will be created. + + It is compositor-dependent when a tool is removed. A compositor may + remove a tool on proximity out, tablet removal or any other reason. + A compositor may also keep a tool alive until shutdown. + + If the tool is currently in proximity, a proximity_out event will be + sent before the removed event. See wp_tablet_tool.proximity_out for + the handling of any buttons logically down. + + When this event is received, the client must wp_tablet_tool.destroy + the object. + + + + + + Notification that this tool is focused on a certain surface. + + This event can be received when the tool has moved from one surface to + another, or when the tool has come back into proximity above the + surface. + + If any button is logically down when the tool comes into proximity, + the respective button event is sent after the proximity_in event but + within the same frame as the proximity_in event. + + + + + + + + + Notification that this tool has either left proximity, or is no + longer focused on a certain surface. + + When the tablet tool leaves proximity of the tablet, button release + events are sent for each button that was held down at the time of + leaving proximity. These events are sent before the proximity_out + event but within the same wp_tablet.frame. + + If the tool stays within proximity of the tablet, but the focus + changes from one surface to another, a button release event may not + be sent until the button is actually released or the tool leaves the + proximity of the tablet. + + + + + + Sent whenever the tablet tool comes in contact with the surface of the + tablet. + + If the tool is already in contact with the tablet when entering the + input region, the client owning said region will receive a + wp_tablet.proximity_in event, followed by a wp_tablet.down + event and a wp_tablet.frame event. + + Note that this event describes logical contact, not physical + contact. On some devices, a compositor may not consider a tool in + logical contact until a minimum physical pressure threshold is + exceeded. + + + + + + + Sent whenever the tablet tool stops making contact with the surface of + the tablet, or when the tablet tool moves out of the input region + and the compositor grab (if any) is dismissed. + + If the tablet tool moves out of the input region while in contact + with the surface of the tablet and the compositor does not have an + ongoing grab on the surface, the client owning said region will + receive a wp_tablet.up event, followed by a wp_tablet.proximity_out + event and a wp_tablet.frame event. If the compositor has an ongoing + grab on this device, this event sequence is sent whenever the grab + is dismissed in the future. + + Note that this event describes logical contact, not physical + contact. On some devices, a compositor may not consider a tool out + of logical contact until physical pressure falls below a specific + threshold. + + + + + + Sent whenever a tablet tool moves. + + + + + + + + Sent whenever the pressure axis on a tool changes. The value of this + event is normalized to a value between 0 and 65535. + + Note that pressure may be nonzero even when a tool is not in logical + contact. See the down and up events for more details. + + + + + + + Sent whenever the distance axis on a tool changes. The value of this + event is normalized to a value between 0 and 65535. + + Note that distance may be nonzero even when a tool is not in logical + contact. See the down and up events for more details. + + + + + + + Sent whenever one or both of the tilt axes on a tool change. Each tilt + value is in degrees, relative to the z-axis of the tablet. + The angle is positive when the top of a tool tilts along the + positive x or y axis. + + + + + + + + Sent whenever the z-rotation axis on the tool changes. The + rotation value is in degrees clockwise from the tool's + logical neutral position. + + + + + + + Sent whenever the slider position on the tool changes. The + value is normalized between -65535 and 65535, with 0 as the logical + neutral position of the slider. + + The slider is available on e.g. the Wacom Airbrush tool. + + + + + + + Sent whenever the wheel on the tool emits an event. This event + contains two values for the same axis change. The degrees value is + in the same orientation as the wl_pointer.vertical_scroll axis. The + clicks value is in discrete logical clicks of the mouse wheel. This + value may be zero if the movement of the wheel was less + than one logical click. + + Clients should choose either value and avoid mixing degrees and + clicks. The compositor may accumulate values smaller than a logical + click and emulate click events when a certain threshold is met. + Thus, wl_tablet_tool.wheel events with non-zero clicks values may + have different degrees values. + + + + + + + + Describes the physical state of a button that produced the button event. + + + + + + + + Sent whenever a button on the tool is pressed or released. + + If a button is held down when the tool moves in or out of proximity, + button events are generated by the compositor. See + wp_tablet_tool.proximity_in and wp_tablet_tool.proximity_out for + details. + + + + + + + + + Marks the end of a series of axis and/or button updates from the + tablet. The Wayland protocol requires axis updates to be sent + sequentially, however all events within a frame should be considered + one hardware event. + + + + + + + + + + + + The wp_tablet interface represents one graphics tablet device. The + tablet interface itself does not generate events; all events are + generated by wp_tablet_tool objects when in proximity above a tablet. + + A tablet has a number of static characteristics, e.g. device name and + pid/vid. These capabilities are sent in an event sequence after the + wp_tablet_seat.tablet_added event. This initial event sequence is + terminated by a wp_tablet.done event. + + + + + This destroys the client's resource for this tablet object. + + + + + + This event is sent in the initial burst of events before the + wp_tablet.done event. + + + + + + + This event is sent in the initial burst of events before the + wp_tablet.done event. + + + + + + + + A system-specific device path that indicates which device is behind + this wp_tablet. This information may be used to gather additional + information about the device, e.g. through libwacom. + + A device may have more than one device path. If so, multiple + wp_tablet.path events are sent. A device may be emulated and not + have a device path, and in that case this event will not be sent. + + The format of the path is unspecified, it may be a device node, a + sysfs path, or some other identifier. It is up to the client to + identify the string provided. + + This event is sent in the initial burst of events before the + wp_tablet.done event. + + + + + + + This event is sent immediately to signal the end of the initial + burst of descriptive events. A client may consider the static + description of the tablet to be complete and finalize initialization + of the tablet. + + + + + + Sent when the tablet has been removed from the system. When a tablet + is removed, some tools may be removed. + + When this event is received, the client must wp_tablet.destroy + the object. + + + + + + + A circular interaction area, such as the touch ring on the Wacom Intuos + Pro series tablets. + + Events on a ring are logically grouped by the wl_tablet_pad_ring.frame + event. + + + + + Request that the compositor use the provided feedback string + associated with this ring. This request should be issued immediately + after a wp_tablet_pad_group.mode_switch event from the corresponding + group is received, or whenever the ring is mapped to a different + action. See wp_tablet_pad_group.mode_switch for more details. + + Clients are encouraged to provide context-aware descriptions for + the actions associated with the ring; compositors may use this + information to offer visual feedback about the button layout + (eg. on-screen displays). + + The provided string 'description' is a UTF-8 encoded string to be + associated with this ring, and is considered user-visible; general + internationalization rules apply. + + The serial argument will be that of the last + wp_tablet_pad_group.mode_switch event received for the group of this + ring. Requests providing other serials than the most recent one will be + ignored. + + + + + + + + This destroys the client's resource for this ring object. + + + + + + Describes the source types for ring events. This indicates to the + client how a ring event was physically generated; a client may + adjust the user interface accordingly. For example, events + from a "finger" source may trigger kinetic scrolling. + + + + + + + Source information for ring events. + + This event does not occur on its own. It is sent before a + wp_tablet_pad_ring.frame event and carries the source information + for all events within that frame. + + The source specifies how this event was generated. If the source is + wp_tablet_pad_ring.source.finger, a wp_tablet_pad_ring.stop event + will be sent when the user lifts the finger off the device. + + This event is optional. If the source is unknown for an interaction, + no event is sent. + + + + + + + Sent whenever the angle on a ring changes. + + The angle is provided in degrees clockwise from the logical + north of the ring in the pad's current rotation. + + + + + + + Stop notification for ring events. + + For some wp_tablet_pad_ring.source types, a wp_tablet_pad_ring.stop + event is sent to notify a client that the interaction with the ring + has terminated. This enables the client to implement kinetic scrolling. + See the wp_tablet_pad_ring.source documentation for information on + when this event may be generated. + + Any wp_tablet_pad_ring.angle events with the same source after this + event should be considered as the start of a new interaction. + + + + + + Indicates the end of a set of ring events that logically belong + together. A client is expected to accumulate the data in all events + within the frame before proceeding. + + All wp_tablet_pad_ring events before a wp_tablet_pad_ring.frame event belong + logically together. For example, on termination of a finger interaction + on a ring the compositor will send a wp_tablet_pad_ring.source event, + a wp_tablet_pad_ring.stop event and a wp_tablet_pad_ring.frame event. + + A wp_tablet_pad_ring.frame event is sent for every logical event + group, even if the group only contains a single wp_tablet_pad_ring + event. Specifically, a client may get a sequence: angle, frame, + angle, frame, etc. + + + + + + + + A linear interaction area, such as the strips found in Wacom Cintiq + models. + + Events on a strip are logically grouped by the wl_tablet_pad_strip.frame + event. + + + + + Requests the compositor to use the provided feedback string + associated with this strip. This request should be issued immediately + after a wp_tablet_pad_group.mode_switch event from the corresponding + group is received, or whenever the strip is mapped to a different + action. See wp_tablet_pad_group.mode_switch for more details. + + Clients are encouraged to provide context-aware descriptions for + the actions associated with the strip, and compositors may use this + information to offer visual feedback about the button layout + (eg. on-screen displays). + + The provided string 'description' is a UTF-8 encoded string to be + associated with this ring, and is considered user-visible; general + internationalization rules apply. + + The serial argument will be that of the last + wp_tablet_pad_group.mode_switch event received for the group of this + strip. Requests providing other serials than the most recent one will be + ignored. + + + + + + + + This destroys the client's resource for this strip object. + + + + + + Describes the source types for strip events. This indicates to the + client how a strip event was physically generated; a client may + adjust the user interface accordingly. For example, events + from a "finger" source may trigger kinetic scrolling. + + + + + + + Source information for strip events. + + This event does not occur on its own. It is sent before a + wp_tablet_pad_strip.frame event and carries the source information + for all events within that frame. + + The source specifies how this event was generated. If the source is + wp_tablet_pad_strip.source.finger, a wp_tablet_pad_strip.stop event + will be sent when the user lifts their finger off the device. + + This event is optional. If the source is unknown for an interaction, + no event is sent. + + + + + + + Sent whenever the position on a strip changes. + + The position is normalized to a range of [0, 65535], the 0-value + represents the top-most and/or left-most position of the strip in + the pad's current rotation. + + + + + + + Stop notification for strip events. + + For some wp_tablet_pad_strip.source types, a wp_tablet_pad_strip.stop + event is sent to notify a client that the interaction with the strip + has terminated. This enables the client to implement kinetic + scrolling. See the wp_tablet_pad_strip.source documentation for + information on when this event may be generated. + + Any wp_tablet_pad_strip.position events with the same source after this + event should be considered as the start of a new interaction. + + + + + + Indicates the end of a set of events that represent one logical + hardware strip event. A client is expected to accumulate the data + in all events within the frame before proceeding. + + All wp_tablet_pad_strip events before a wp_tablet_pad_strip.frame event belong + logically together. For example, on termination of a finger interaction + on a strip the compositor will send a wp_tablet_pad_strip.source event, + a wp_tablet_pad_strip.stop event and a wp_tablet_pad_strip.frame + event. + + A wp_tablet_pad_strip.frame event is sent for every logical event + group, even if the group only contains a single wp_tablet_pad_strip + event. Specifically, a client may get a sequence: position, frame, + position, frame, etc. + + + + + + + + A pad group describes a distinct (sub)set of buttons, rings and strips + present in the tablet. The criteria of this grouping is usually positional, + eg. if a tablet has buttons on the left and right side, 2 groups will be + presented. The physical arrangement of groups is undisclosed and may + change on the fly. + + Pad groups will announce their features during pad initialization. Between + the corresponding wp_tablet_pad.group event and wp_tablet_pad_group.done, the + pad group will announce the buttons, rings and strips contained in it, + plus the number of supported modes. + + Modes are a mechanism to allow multiple groups of actions for every element + in the pad group. The number of groups and available modes in each is + persistent across device plugs. The current mode is user-switchable, it + will be announced through the wp_tablet_pad_group.mode_switch event both + whenever it is switched, and after wp_tablet_pad.enter. + + The current mode logically applies to all elements in the pad group, + although it is at clients' discretion whether to actually perform different + actions, and/or issue the respective .set_feedback requests to notify the + compositor. See the wp_tablet_pad_group.mode_switch event for more details. + + + + + Destroy the wp_tablet_pad_group object. Objects created from this object + are unaffected and should be destroyed separately. + + + + + + Sent on wp_tablet_pad_group initialization to announce the available + buttons in the group. Button indices start at 0, a button may only be + in one group at a time. + + This event is first sent in the initial burst of events before the + wp_tablet_pad_group.done event. + + Some buttons are reserved by the compositor. These buttons may not be + assigned to any wp_tablet_pad_group. Compositors may broadcast this + event in the case of changes to the mapping of these reserved buttons. + If the compositor happens to reserve all buttons in a group, this event + will be sent with an empty array. + + + + + + + Sent on wp_tablet_pad_group initialization to announce available rings. + One event is sent for each ring available on this pad group. + + This event is sent in the initial burst of events before the + wp_tablet_pad_group.done event. + + + + + + + Sent on wp_tablet_pad initialization to announce available strips. + One event is sent for each strip available on this pad group. + + This event is sent in the initial burst of events before the + wp_tablet_pad_group.done event. + + + + + + + Sent on wp_tablet_pad_group initialization to announce that the pad + group may switch between modes. A client may use a mode to store a + specific configuration for buttons, rings and strips and use the + wl_tablet_pad_group.mode_switch event to toggle between these + configurations. Mode indices start at 0. + + Switching modes is compositor-dependent. See the + wp_tablet_pad_group.mode_switch event for more details. + + This event is sent in the initial burst of events before the + wp_tablet_pad_group.done event. This event is only sent when more than + more than one mode is available. + + + + + + + This event is sent immediately to signal the end of the initial + burst of descriptive events. A client may consider the static + description of the tablet to be complete and finalize initialization + of the tablet group. + + + + + + Notification that the mode was switched. + + A mode applies to all buttons, rings and strips in a group + simultaneously, but a client is not required to assign different actions + for each mode. For example, a client may have mode-specific button + mappings but map the ring to vertical scrolling in all modes. Mode + indices start at 0. + + Switching modes is compositor-dependent. The compositor may provide + visual cues to the client about the mode, e.g. by toggling LEDs on + the tablet device. Mode-switching may be software-controlled or + controlled by one or more physical buttons. For example, on a Wacom + Intuos Pro, the button inside the ring may be assigned to switch + between modes. + + The compositor will also send this event after wp_tablet_pad.enter on + each group in order to notify of the current mode. Groups that only + feature one mode will use mode=0 when emitting this event. + + If a button action in the new mode differs from the action in the + previous mode, the client should immediately issue a + wp_tablet_pad.set_feedback request for each changed button. + + If a ring or strip action in the new mode differs from the action + in the previous mode, the client should immediately issue a + wp_tablet_ring.set_feedback or wp_tablet_strip.set_feedback request + for each changed ring or strip. + + + + + + + + + + A pad device is a set of buttons, rings and strips + usually physically present on the tablet device itself. Some + exceptions exist where the pad device is physically detached, e.g. the + Wacom ExpressKey Remote. + + Pad devices have no axes that control the cursor and are generally + auxiliary devices to the tool devices used on the tablet surface. + + A pad device has a number of static characteristics, e.g. the number + of rings. These capabilities are sent in an event sequence after the + wp_tablet_seat.pad_added event before any actual events from this pad. + This initial event sequence is terminated by a wp_tablet_pad.done + event. + + All pad features (buttons, rings and strips) are logically divided into + groups and all pads have at least one group. The available groups are + notified through the wp_tablet_pad.group event; the compositor will + emit one event per group before emitting wp_tablet_pad.done. + + Groups may have multiple modes. Modes allow clients to map multiple + actions to a single pad feature. Only one mode can be active per group, + although different groups may have different active modes. + + + + + Requests the compositor to use the provided feedback string + associated with this button. This request should be issued immediately + after a wp_tablet_pad_group.mode_switch event from the corresponding + group is received, or whenever a button is mapped to a different + action. See wp_tablet_pad_group.mode_switch for more details. + + Clients are encouraged to provide context-aware descriptions for + the actions associated with each button, and compositors may use + this information to offer visual feedback on the button layout + (e.g. on-screen displays). + + Button indices start at 0. Setting the feedback string on a button + that is reserved by the compositor (i.e. not belonging to any + wp_tablet_pad_group) does not generate an error but the compositor + is free to ignore the request. + + The provided string 'description' is a UTF-8 encoded string to be + associated with this ring, and is considered user-visible; general + internationalization rules apply. + + The serial argument will be that of the last + wp_tablet_pad_group.mode_switch event received for the group of this + button. Requests providing other serials than the most recent one will + be ignored. + + + + + + + + + Destroy the wp_tablet_pad object. Objects created from this object + are unaffected and should be destroyed separately. + + + + + + Sent on wp_tablet_pad initialization to announce available groups. + One event is sent for each pad group available. + + This event is sent in the initial burst of events before the + wp_tablet_pad.done event. At least one group will be announced. + + + + + + + A system-specific device path that indicates which device is behind + this wp_tablet_pad. This information may be used to gather additional + information about the device, e.g. through libwacom. + + The format of the path is unspecified, it may be a device node, a + sysfs path, or some other identifier. It is up to the client to + identify the string provided. + + This event is sent in the initial burst of events before the + wp_tablet_pad.done event. + + + + + + + Sent on wp_tablet_pad initialization to announce the available + buttons. + + This event is sent in the initial burst of events before the + wp_tablet_pad.done event. This event is only sent when at least one + button is available. + + + + + + + This event signals the end of the initial burst of descriptive + events. A client may consider the static description of the pad to + be complete and finalize initialization of the pad. + + + + + + Describes the physical state of a button that caused the button + event. + + + + + + + + Sent whenever the physical state of a button changes. + + + + + + + + + Notification that this pad is focused on the specified surface. + + + + + + + + + Notification that this pad is no longer focused on the specified + surface. + + + + + + + + Sent when the pad has been removed from the system. When a tablet + is removed its pad(s) will be removed too. + + When this event is received, the client must destroy all rings, strips + and groups that were offered by this pad, and issue wp_tablet_pad.destroy + the pad itself. + + + + diff --git a/vendor/sdl-3.0.0/wayland-protocols/text-input-unstable-v3.xml b/vendor/sdl-3.0.0/wayland-protocols/text-input-unstable-v3.xml new file mode 100644 index 0000000..d5f6322 --- /dev/null +++ b/vendor/sdl-3.0.0/wayland-protocols/text-input-unstable-v3.xml @@ -0,0 +1,452 @@ + + + + + Copyright © 2012, 2013 Intel Corporation + Copyright © 2015, 2016 Jan Arne Petersen + Copyright © 2017, 2018 Red Hat, Inc. + Copyright © 2018 Purism SPC + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + the copyright holders not be used in advertising or publicity + pertaining to distribution of the software without specific, + written prior permission. The copyright holders make no + representations about the suitability of this software for any + purpose. It is provided "as is" without express or implied + warranty. + + THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + THIS SOFTWARE. + + + + This protocol allows compositors to act as input methods and to send text + to applications. A text input object is used to manage state of what are + typically text entry fields in the application. + + This document adheres to the RFC 2119 when using words like "must", + "should", "may", etc. + + Warning! The protocol described in this file is experimental and + backward incompatible changes may be made. Backward compatible changes + may be added together with the corresponding interface version bump. + Backward incompatible changes are done by bumping the version number in + the protocol and interface names and resetting the interface version. + Once the protocol is to be declared stable, the 'z' prefix and the + version number in the protocol and interface names are removed and the + interface version number is reset. + + + + + The zwp_text_input_v3 interface represents text input and input methods + associated with a seat. It provides enter/leave events to follow the + text input focus for a seat. + + Requests are used to enable/disable the text-input object and set + state information like surrounding and selected text or the content type. + The information about the entered text is sent to the text-input object + via the preedit_string and commit_string events. + + Text is valid UTF-8 encoded, indices and lengths are in bytes. Indices + must not point to middle bytes inside a code point: they must either + point to the first byte of a code point or to the end of the buffer. + Lengths must be measured between two valid indices. + + Focus moving throughout surfaces will result in the emission of + zwp_text_input_v3.enter and zwp_text_input_v3.leave events. The focused + surface must commit zwp_text_input_v3.enable and + zwp_text_input_v3.disable requests as the keyboard focus moves across + editable and non-editable elements of the UI. Those two requests are not + expected to be paired with each other, the compositor must be able to + handle consecutive series of the same request. + + State is sent by the state requests (set_surrounding_text, + set_content_type and set_cursor_rectangle) and a commit request. After an + enter event or disable request all state information is invalidated and + needs to be resent by the client. + + + + + Destroy the wp_text_input object. Also disables all surfaces enabled + through this wp_text_input object. + + + + + + Requests text input on the surface previously obtained from the enter + event. + + This request must be issued every time the active text input changes + to a new one, including within the current surface. Use + zwp_text_input_v3.disable when there is no longer any input focus on + the current surface. + + Clients must not enable more than one text input on the single seat + and should disable the current text input before enabling the new one. + At most one instance of text input may be in enabled state per instance, + Requests to enable the another text input when some text input is active + must be ignored by compositor. + + This request resets all state associated with previous enable, disable, + set_surrounding_text, set_text_change_cause, set_content_type, and + set_cursor_rectangle requests, as well as the state associated with + preedit_string, commit_string, and delete_surrounding_text events. + + The set_surrounding_text, set_content_type and set_cursor_rectangle + requests must follow if the text input supports the necessary + functionality. + + State set with this request is double-buffered. It will get applied on + the next zwp_text_input_v3.commit request, and stay valid until the + next committed enable or disable request. + + The changes must be applied by the compositor after issuing a + zwp_text_input_v3.commit request. + + + + + + Explicitly disable text input on the current surface (typically when + there is no focus on any text entry inside the surface). + + State set with this request is double-buffered. It will get applied on + the next zwp_text_input_v3.commit request. + + + + + + Sets the surrounding plain text around the input, excluding the preedit + text. + + The client should notify the compositor of any changes in any of the + values carried with this request, including changes caused by handling + incoming text-input events as well as changes caused by other + mechanisms like keyboard typing. + + If the client is unaware of the text around the cursor, it should not + issue this request, to signify lack of support to the compositor. + + Text is UTF-8 encoded, and should include the cursor position, the + complete selection and additional characters before and after them. + There is a maximum length of wayland messages, so text can not be + longer than 4000 bytes. + + Cursor is the byte offset of the cursor within text buffer. + + Anchor is the byte offset of the selection anchor within text buffer. + If there is no selected text, anchor is the same as cursor. + + If any preedit text is present, it is replaced with a cursor for the + purpose of this event. + + Values set with this request are double-buffered. They will get applied + on the next zwp_text_input_v3.commit request, and stay valid until the + next committed enable or disable request. + + The initial state for affected fields is empty, meaning that the text + input does not support sending surrounding text. If the empty values + get applied, subsequent attempts to change them may have no effect. + + + + + + + + + Reason for the change of surrounding text or cursor posision. + + + + + + + + Tells the compositor why the text surrounding the cursor changed. + + Whenever the client detects an external change in text, cursor, or + anchor posision, it must issue this request to the compositor. This + request is intended to give the input method a chance to update the + preedit text in an appropriate way, e.g. by removing it when the user + starts typing with a keyboard. + + cause describes the source of the change. + + The value set with this request is double-buffered. It must be applied + and reset to initial at the next zwp_text_input_v3.commit request. + + The initial value of cause is input_method. + + + + + + + Content hint is a bitmask to allow to modify the behavior of the text + input. + + + + + + + + + + + + + + + + + The content purpose allows to specify the primary purpose of a text + input. + + This allows an input method to show special purpose input panels with + extra characters or to disallow some characters. + + + + + + + + + + + + + + + + + + + + Sets the content purpose and content hint. While the purpose is the + basic purpose of an input field, the hint flags allow to modify some of + the behavior. + + Values set with this request are double-buffered. They will get applied + on the next zwp_text_input_v3.commit request. + Subsequent attempts to update them may have no effect. The values + remain valid until the next committed enable or disable request. + + The initial value for hint is none, and the initial value for purpose + is normal. + + + + + + + + Marks an area around the cursor as a x, y, width, height rectangle in + surface local coordinates. + + Allows the compositor to put a window with word suggestions near the + cursor, without obstructing the text being input. + + If the client is unaware of the position of edited text, it should not + issue this request, to signify lack of support to the compositor. + + Values set with this request are double-buffered. They will get applied + on the next zwp_text_input_v3.commit request, and stay valid until the + next committed enable or disable request. + + The initial values describing a cursor rectangle are empty. That means + the text input does not support describing the cursor area. If the + empty values get applied, subsequent attempts to change them may have + no effect. + + + + + + + + + + Atomically applies state changes recently sent to the compositor. + + The commit request establishes and updates the state of the client, and + must be issued after any changes to apply them. + + Text input state (enabled status, content purpose, content hint, + surrounding text and change cause, cursor rectangle) is conceptually + double-buffered within the context of a text input, i.e. between a + committed enable request and the following committed enable or disable + request. + + Protocol requests modify the pending state, as opposed to the current + state in use by the input method. A commit request atomically applies + all pending state, replacing the current state. After commit, the new + pending state is as documented for each related request. + + Requests are applied in the order of arrival. + + Neither current nor pending state are modified unless noted otherwise. + + The compositor must count the number of commit requests coming from + each zwp_text_input_v3 object and use the count as the serial in done + events. + + + + + + Notification that this seat's text-input focus is on a certain surface. + + If client has created multiple text input objects, compositor must send + this event to all of them. + + When the seat has the keyboard capability the text-input focus follows + the keyboard focus. This event sets the current surface for the + text-input object. + + + + + + + Notification that this seat's text-input focus is no longer on a + certain surface. The client should reset any preedit string previously + set. + + The leave notification clears the current surface. It is sent before + the enter notification for the new focus. After leave event, compositor + must ignore requests from any text input instances until next enter + event. + + When the seat has the keyboard capability the text-input focus follows + the keyboard focus. + + + + + + + Notify when a new composing text (pre-edit) should be set at the + current cursor position. Any previously set composing text must be + removed. Any previously existing selected text must be removed. + + The argument text contains the pre-edit string buffer. + + The parameters cursor_begin and cursor_end are counted in bytes + relative to the beginning of the submitted text buffer. Cursor should + be hidden when both are equal to -1. + + They could be represented by the client as a line if both values are + the same, or as a text highlight otherwise. + + Values set with this event are double-buffered. They must be applied + and reset to initial on the next zwp_text_input_v3.done event. + + The initial value of text is an empty string, and cursor_begin, + cursor_end and cursor_hidden are all 0. + + + + + + + + + Notify when text should be inserted into the editor widget. The text to + commit could be either just a single character after a key press or the + result of some composing (pre-edit). + + Values set with this event are double-buffered. They must be applied + and reset to initial on the next zwp_text_input_v3.done event. + + The initial value of text is an empty string. + + + + + + + Notify when the text around the current cursor position should be + deleted. + + Before_length and after_length are the number of bytes before and after + the current cursor index (excluding the selection) to delete. + + If a preedit text is present, in effect before_length is counted from + the beginning of it, and after_length from its end (see done event + sequence). + + Values set with this event are double-buffered. They must be applied + and reset to initial on the next zwp_text_input_v3.done event. + + The initial values of both before_length and after_length are 0. + + + + + + + + Instruct the application to apply changes to state requested by the + preedit_string, commit_string and delete_surrounding_text events. The + state relating to these events is double-buffered, and each one + modifies the pending state. This event replaces the current state with + the pending state. + + The application must proceed by evaluating the changes in the following + order: + + 1. Replace existing preedit string with the cursor. + 2. Delete requested surrounding text. + 3. Insert commit string with the cursor at its end. + 4. Calculate surrounding text to send. + 5. Insert new preedit text in cursor position. + 6. Place cursor inside preedit text. + + The serial number reflects the last state of the zwp_text_input_v3 + object known to the compositor. The value of the serial argument must + be equal to the number of commit requests already issued on that object. + When the client receives a done event with a serial different than the + number of past commit requests, it must proceed as normal, except it + should not change the current state of the zwp_text_input_v3 object. + + + + + + + + A factory for text-input objects. This object is a global singleton. + + + + + Destroy the wp_text_input_manager object. + + + + + + Creates a new text-input object for a given seat. + + + + + + diff --git a/vendor/sdl-3.0.0/wayland-protocols/viewporter.xml b/vendor/sdl-3.0.0/wayland-protocols/viewporter.xml new file mode 100644 index 0000000..c732d8c --- /dev/null +++ b/vendor/sdl-3.0.0/wayland-protocols/viewporter.xml @@ -0,0 +1,186 @@ + + + + + Copyright © 2013-2016 Collabora, Ltd. + + 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 (including the next + paragraph) 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. + + + + + The global interface exposing surface cropping and scaling + capabilities is used to instantiate an interface extension for a + wl_surface object. This extended interface will then allow + cropping and scaling the surface contents, effectively + disconnecting the direct relationship between the buffer and the + surface size. + + + + + Informs the server that the client will not be using this + protocol object anymore. This does not affect any other objects, + wp_viewport objects included. + + + + + + + + + + Instantiate an interface extension for the given wl_surface to + crop and scale its content. If the given wl_surface already has + a wp_viewport object associated, the viewport_exists + protocol error is raised. + + + + + + + + + An additional interface to a wl_surface object, which allows the + client to specify the cropping and scaling of the surface + contents. + + This interface works with two concepts: the source rectangle (src_x, + src_y, src_width, src_height), and the destination size (dst_width, + dst_height). The contents of the source rectangle are scaled to the + destination size, and content outside the source rectangle is ignored. + This state is double-buffered, and is applied on the next + wl_surface.commit. + + The two parts of crop and scale state are independent: the source + rectangle, and the destination size. Initially both are unset, that + is, no scaling is applied. The whole of the current wl_buffer is + used as the source, and the surface size is as defined in + wl_surface.attach. + + If the destination size is set, it causes the surface size to become + dst_width, dst_height. The source (rectangle) is scaled to exactly + this size. This overrides whatever the attached wl_buffer size is, + unless the wl_buffer is NULL. If the wl_buffer is NULL, the surface + has no content and therefore no size. Otherwise, the size is always + at least 1x1 in surface local coordinates. + + If the source rectangle is set, it defines what area of the wl_buffer is + taken as the source. If the source rectangle is set and the destination + size is not set, then src_width and src_height must be integers, and the + surface size becomes the source rectangle size. This results in cropping + without scaling. If src_width or src_height are not integers and + destination size is not set, the bad_size protocol error is raised when + the surface state is applied. + + The coordinate transformations from buffer pixel coordinates up to + the surface-local coordinates happen in the following order: + 1. buffer_transform (wl_surface.set_buffer_transform) + 2. buffer_scale (wl_surface.set_buffer_scale) + 3. crop and scale (wp_viewport.set*) + This means, that the source rectangle coordinates of crop and scale + are given in the coordinates after the buffer transform and scale, + i.e. in the coordinates that would be the surface-local coordinates + if the crop and scale was not applied. + + If src_x or src_y are negative, the bad_value protocol error is raised. + Otherwise, if the source rectangle is partially or completely outside of + the non-NULL wl_buffer, then the out_of_buffer protocol error is raised + when the surface state is applied. A NULL wl_buffer does not raise the + out_of_buffer error. + + The x, y arguments of wl_surface.attach are applied as normal to + the surface. They indicate how many pixels to remove from the + surface size from the left and the top. In other words, they are + still in the surface-local coordinate system, just like dst_width + and dst_height are. + + If the wl_surface associated with the wp_viewport is destroyed, + all wp_viewport requests except 'destroy' raise the protocol error + no_surface. + + If the wp_viewport object is destroyed, the crop and scale + state is removed from the wl_surface. The change will be applied + on the next wl_surface.commit. + + + + + The associated wl_surface's crop and scale state is removed. + The change is applied on the next wl_surface.commit. + + + + + + + + + + + + + Set the source rectangle of the associated wl_surface. See + wp_viewport for the description, and relation to the wl_buffer + size. + + If all of x, y, width and height are -1.0, the source rectangle is + unset instead. Any other set of values where width or height are zero + or negative, or x or y are negative, raise the bad_value protocol + error. + + The crop and scale state is double-buffered state, and will be + applied on the next wl_surface.commit. + + + + + + + + + + Set the destination size of the associated wl_surface. See + wp_viewport for the description, and relation to the wl_buffer + size. + + If width is -1 and height is -1, the destination size is unset + instead. Any other pair of values for width and height that + contains zero or negative values raises the bad_value protocol + error. + + The crop and scale state is double-buffered state, and will be + applied on the next wl_surface.commit. + + + + + + + diff --git a/vendor/sdl-3.0.0/wayland-protocols/wayland.xml b/vendor/sdl-3.0.0/wayland-protocols/wayland.xml new file mode 100644 index 0000000..10e039d --- /dev/null +++ b/vendor/sdl-3.0.0/wayland-protocols/wayland.xml @@ -0,0 +1,3151 @@ + + + + + Copyright © 2008-2011 Kristian Høgsberg + Copyright © 2010-2011 Intel Corporation + Copyright © 2012-2013 Collabora, Ltd. + + 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 (including the + next paragraph) 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. + + + + + The core global object. This is a special singleton object. It + is used for internal Wayland protocol features. + + + + + The sync request asks the server to emit the 'done' event + on the returned wl_callback object. Since requests are + handled in-order and events are delivered in-order, this can + be used as a barrier to ensure all previous requests and the + resulting events have been handled. + + The object returned by this request will be destroyed by the + compositor after the callback is fired and as such the client must not + attempt to use it after that point. + + The callback_data passed in the callback is the event serial. + + + + + + + This request creates a registry object that allows the client + to list and bind the global objects available from the + compositor. + + It should be noted that the server side resources consumed in + response to a get_registry request can only be released when the + client disconnects, not when the client side proxy is destroyed. + Therefore, clients should invoke get_registry as infrequently as + possible to avoid wasting memory. + + + + + + + The error event is sent out when a fatal (non-recoverable) + error has occurred. The object_id argument is the object + where the error occurred, most often in response to a request + to that object. The code identifies the error and is defined + by the object interface. As such, each interface defines its + own set of error codes. The message is a brief description + of the error, for (debugging) convenience. + + + + + + + + + These errors are global and can be emitted in response to any + server request. + + + + + + + + + + This event is used internally by the object ID management + logic. When a client deletes an object that it had created, + the server will send this event to acknowledge that it has + seen the delete request. When the client receives this event, + it will know that it can safely reuse the object ID. + + + + + + + + The singleton global registry object. The server has a number of + global objects that are available to all clients. These objects + typically represent an actual object in the server (for example, + an input device) or they are singleton objects that provide + extension functionality. + + When a client creates a registry object, the registry object + will emit a global event for each global currently in the + registry. Globals come and go as a result of device or + monitor hotplugs, reconfiguration or other events, and the + registry will send out global and global_remove events to + keep the client up to date with the changes. To mark the end + of the initial burst of events, the client can use the + wl_display.sync request immediately after calling + wl_display.get_registry. + + A client can bind to a global object by using the bind + request. This creates a client-side handle that lets the object + emit events to the client and lets the client invoke requests on + the object. + + + + + Binds a new, client-created object to the server using the + specified name as the identifier. + + + + + + + + Notify the client of global objects. + + The event notifies the client that a global object with + the given name is now available, and it implements the + given version of the given interface. + + + + + + + + + Notify the client of removed global objects. + + This event notifies the client that the global identified + by name is no longer available. If the client bound to + the global using the bind request, the client should now + destroy that object. + + The object remains valid and requests to the object will be + ignored until the client destroys it, to avoid races between + the global going away and a client sending a request to it. + + + + + + + + Clients can handle the 'done' event to get notified when + the related request is done. + + Note, because wl_callback objects are created from multiple independent + factory interfaces, the wl_callback interface is frozen at version 1. + + + + + Notify the client when the related request is done. + + + + + + + + A compositor. This object is a singleton global. The + compositor is in charge of combining the contents of multiple + surfaces into one displayable output. + + + + + Ask the compositor to create a new surface. + + + + + + + Ask the compositor to create a new region. + + + + + + + + The wl_shm_pool object encapsulates a piece of memory shared + between the compositor and client. Through the wl_shm_pool + object, the client can allocate shared memory wl_buffer objects. + All objects created through the same pool share the same + underlying mapped memory. Reusing the mapped memory avoids the + setup/teardown overhead and is useful when interactively resizing + a surface or for many small buffers. + + + + + Create a wl_buffer object from the pool. + + The buffer is created offset bytes into the pool and has + width and height as specified. The stride argument specifies + the number of bytes from the beginning of one row to the beginning + of the next. The format is the pixel format of the buffer and + must be one of those advertised through the wl_shm.format event. + + A buffer will keep a reference to the pool it was created from + so it is valid to destroy the pool immediately after creating + a buffer from it. + + + + + + + + + + + + Destroy the shared memory pool. + + The mmapped memory will be released when all + buffers that have been created from this pool + are gone. + + + + + + This request will cause the server to remap the backing memory + for the pool from the file descriptor passed when the pool was + created, but using the new size. This request can only be + used to make the pool bigger. + + This request only changes the amount of bytes that are mmapped + by the server and does not touch the file corresponding to the + file descriptor passed at creation time. It is the client's + responsibility to ensure that the file is at least as big as + the new pool size. + + + + + + + + A singleton global object that provides support for shared + memory. + + Clients can create wl_shm_pool objects using the create_pool + request. + + On binding the wl_shm object one or more format events + are emitted to inform clients about the valid pixel formats + that can be used for buffers. + + + + + These errors can be emitted in response to wl_shm requests. + + + + + + + + + This describes the memory layout of an individual pixel. + + All renderers should support argb8888 and xrgb8888 but any other + formats are optional and may not be supported by the particular + renderer in use. + + The drm format codes match the macros defined in drm_fourcc.h, except + argb8888 and xrgb8888. The formats actually supported by the compositor + will be reported by the format event. + + For all wl_shm formats and unless specified in another protocol + extension, pre-multiplied alpha is used for pixel values. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create a new wl_shm_pool object. + + The pool can be used to create shared memory based buffer + objects. The server will mmap size bytes of the passed file + descriptor, to use as backing memory for the pool. + + + + + + + + + Informs the client about a valid pixel format that + can be used for buffers. Known formats include + argb8888 and xrgb8888. + + + + + + + + A buffer provides the content for a wl_surface. Buffers are + created through factory interfaces such as wl_shm, wp_linux_buffer_params + (from the linux-dmabuf protocol extension) or similar. It has a width and + a height and can be attached to a wl_surface, but the mechanism by which a + client provides and updates the contents is defined by the buffer factory + interface. + + If the buffer uses a format that has an alpha channel, the alpha channel + is assumed to be premultiplied in the color channels unless otherwise + specified. + + Note, because wl_buffer objects are created from multiple independent + factory interfaces, the wl_buffer interface is frozen at version 1. + + + + + Destroy a buffer. If and how you need to release the backing + storage is defined by the buffer factory interface. + + For possible side-effects to a surface, see wl_surface.attach. + + + + + + Sent when this wl_buffer is no longer used by the compositor. + The client is now free to reuse or destroy this buffer and its + backing storage. + + If a client receives a release event before the frame callback + requested in the same wl_surface.commit that attaches this + wl_buffer to a surface, then the client is immediately free to + reuse the buffer and its backing storage, and does not need a + second buffer for the next surface content update. Typically + this is possible, when the compositor maintains a copy of the + wl_surface contents, e.g. as a GL texture. This is an important + optimization for GL(ES) compositors with wl_shm clients. + + + + + + + A wl_data_offer represents a piece of data offered for transfer + by another client (the source client). It is used by the + copy-and-paste and drag-and-drop mechanisms. The offer + describes the different mime types that the data can be + converted to and provides the mechanism for transferring the + data directly from the source client. + + + + + + + + + + + + Indicate that the client can accept the given mime type, or + NULL for not accepted. + + For objects of version 2 or older, this request is used by the + client to give feedback whether the client can receive the given + mime type, or NULL if none is accepted; the feedback does not + determine whether the drag-and-drop operation succeeds or not. + + For objects of version 3 or newer, this request determines the + final result of the drag-and-drop operation. If the end result + is that no mime types were accepted, the drag-and-drop operation + will be cancelled and the corresponding drag source will receive + wl_data_source.cancelled. Clients may still use this event in + conjunction with wl_data_source.action for feedback. + + + + + + + + To transfer the offered data, the client issues this request + and indicates the mime type it wants to receive. The transfer + happens through the passed file descriptor (typically created + with the pipe system call). The source client writes the data + in the mime type representation requested and then closes the + file descriptor. + + The receiving client reads from the read end of the pipe until + EOF and then closes its end, at which point the transfer is + complete. + + This request may happen multiple times for different mime types, + both before and after wl_data_device.drop. Drag-and-drop destination + clients may preemptively fetch data or examine it more closely to + determine acceptance. + + + + + + + + Destroy the data offer. + + + + + + Sent immediately after creating the wl_data_offer object. One + event per offered mime type. + + + + + + + + + Notifies the compositor that the drag destination successfully + finished the drag-and-drop operation. + + Upon receiving this request, the compositor will emit + wl_data_source.dnd_finished on the drag source client. + + It is a client error to perform other requests than + wl_data_offer.destroy after this one. It is also an error to perform + this request after a NULL mime type has been set in + wl_data_offer.accept or no action was received through + wl_data_offer.action. + + If wl_data_offer.finish request is received for a non drag and drop + operation, the invalid_finish protocol error is raised. + + + + + + Sets the actions that the destination side client supports for + this operation. This request may trigger the emission of + wl_data_source.action and wl_data_offer.action events if the compositor + needs to change the selected action. + + This request can be called multiple times throughout the + drag-and-drop operation, typically in response to wl_data_device.enter + or wl_data_device.motion events. + + This request determines the final result of the drag-and-drop + operation. If the end result is that no action is accepted, + the drag source will receive wl_data_source.cancelled. + + The dnd_actions argument must contain only values expressed in the + wl_data_device_manager.dnd_actions enum, and the preferred_action + argument must only contain one of those values set, otherwise it + will result in a protocol error. + + While managing an "ask" action, the destination drag-and-drop client + may perform further wl_data_offer.receive requests, and is expected + to perform one last wl_data_offer.set_actions request with a preferred + action other than "ask" (and optionally wl_data_offer.accept) before + requesting wl_data_offer.finish, in order to convey the action selected + by the user. If the preferred action is not in the + wl_data_offer.source_actions mask, an error will be raised. + + If the "ask" action is dismissed (e.g. user cancellation), the client + is expected to perform wl_data_offer.destroy right away. + + This request can only be made on drag-and-drop offers, a protocol error + will be raised otherwise. + + + + + + + + This event indicates the actions offered by the data source. It + will be sent immediately after creating the wl_data_offer object, + or anytime the source side changes its offered actions through + wl_data_source.set_actions. + + + + + + + This event indicates the action selected by the compositor after + matching the source/destination side actions. Only one action (or + none) will be offered here. + + This event can be emitted multiple times during the drag-and-drop + operation in response to destination side action changes through + wl_data_offer.set_actions. + + This event will no longer be emitted after wl_data_device.drop + happened on the drag-and-drop destination, the client must + honor the last action received, or the last preferred one set + through wl_data_offer.set_actions when handling an "ask" action. + + Compositors may also change the selected action on the fly, mainly + in response to keyboard modifier changes during the drag-and-drop + operation. + + The most recent action received is always the valid one. Prior to + receiving wl_data_device.drop, the chosen action may change (e.g. + due to keyboard modifiers being pressed). At the time of receiving + wl_data_device.drop the drag-and-drop destination must honor the + last action received. + + Action changes may still happen after wl_data_device.drop, + especially on "ask" actions, where the drag-and-drop destination + may choose another action afterwards. Action changes happening + at this stage are always the result of inter-client negotiation, the + compositor shall no longer be able to induce a different action. + + Upon "ask" actions, it is expected that the drag-and-drop destination + may potentially choose a different action and/or mime type, + based on wl_data_offer.source_actions and finally chosen by the + user (e.g. popping up a menu with the available options). The + final wl_data_offer.set_actions and wl_data_offer.accept requests + must happen before the call to wl_data_offer.finish. + + + + + + + + The wl_data_source object is the source side of a wl_data_offer. + It is created by the source client in a data transfer and + provides a way to describe the offered data and a way to respond + to requests to transfer the data. + + + + + + + + + + This request adds a mime type to the set of mime types + advertised to targets. Can be called several times to offer + multiple types. + + + + + + + Destroy the data source. + + + + + + Sent when a target accepts pointer_focus or motion events. If + a target does not accept any of the offered types, type is NULL. + + Used for feedback during drag-and-drop. + + + + + + + Request for data from the client. Send the data as the + specified mime type over the passed file descriptor, then + close it. + + + + + + + + This data source is no longer valid. There are several reasons why + this could happen: + + - The data source has been replaced by another data source. + - The drag-and-drop operation was performed, but the drop destination + did not accept any of the mime types offered through + wl_data_source.target. + - The drag-and-drop operation was performed, but the drop destination + did not select any of the actions present in the mask offered through + wl_data_source.action. + - The drag-and-drop operation was performed but didn't happen over a + surface. + - The compositor cancelled the drag-and-drop operation (e.g. compositor + dependent timeouts to avoid stale drag-and-drop transfers). + + The client should clean up and destroy this data source. + + For objects of version 2 or older, wl_data_source.cancelled will + only be emitted if the data source was replaced by another data + source. + + + + + + + + Sets the actions that the source side client supports for this + operation. This request may trigger wl_data_source.action and + wl_data_offer.action events if the compositor needs to change the + selected action. + + The dnd_actions argument must contain only values expressed in the + wl_data_device_manager.dnd_actions enum, otherwise it will result + in a protocol error. + + This request must be made once only, and can only be made on sources + used in drag-and-drop, so it must be performed before + wl_data_device.start_drag. Attempting to use the source other than + for drag-and-drop will raise a protocol error. + + + + + + + The user performed the drop action. This event does not indicate + acceptance, wl_data_source.cancelled may still be emitted afterwards + if the drop destination does not accept any mime type. + + However, this event might however not be received if the compositor + cancelled the drag-and-drop operation before this event could happen. + + Note that the data_source may still be used in the future and should + not be destroyed here. + + + + + + The drop destination finished interoperating with this data + source, so the client is now free to destroy this data source and + free all associated data. + + If the action used to perform the operation was "move", the + source can now delete the transferred data. + + + + + + This event indicates the action selected by the compositor after + matching the source/destination side actions. Only one action (or + none) will be offered here. + + This event can be emitted multiple times during the drag-and-drop + operation, mainly in response to destination side changes through + wl_data_offer.set_actions, and as the data device enters/leaves + surfaces. + + It is only possible to receive this event after + wl_data_source.dnd_drop_performed if the drag-and-drop operation + ended in an "ask" action, in which case the final wl_data_source.action + event will happen immediately before wl_data_source.dnd_finished. + + Compositors may also change the selected action on the fly, mainly + in response to keyboard modifier changes during the drag-and-drop + operation. + + The most recent action received is always the valid one. The chosen + action may change alongside negotiation (e.g. an "ask" action can turn + into a "move" operation), so the effects of the final action must + always be applied in wl_data_offer.dnd_finished. + + Clients can trigger cursor surface changes from this point, so + they reflect the current action. + + + + + + + + There is one wl_data_device per seat which can be obtained + from the global wl_data_device_manager singleton. + + A wl_data_device provides access to inter-client data transfer + mechanisms such as copy-and-paste and drag-and-drop. + + + + + + + + + This request asks the compositor to start a drag-and-drop + operation on behalf of the client. + + The source argument is the data source that provides the data + for the eventual data transfer. If source is NULL, enter, leave + and motion events are sent only to the client that initiated the + drag and the client is expected to handle the data passing + internally. If source is destroyed, the drag-and-drop session will be + cancelled. + + The origin surface is the surface where the drag originates and + the client must have an active implicit grab that matches the + serial. + + The icon surface is an optional (can be NULL) surface that + provides an icon to be moved around with the cursor. Initially, + the top-left corner of the icon surface is placed at the cursor + hotspot, but subsequent wl_surface.attach request can move the + relative position. Attach requests must be confirmed with + wl_surface.commit as usual. The icon surface is given the role of + a drag-and-drop icon. If the icon surface already has another role, + it raises a protocol error. + + The input region is ignored for wl_surfaces with the role of a + drag-and-drop icon. + + + + + + + + + + This request asks the compositor to set the selection + to the data from the source on behalf of the client. + + To unset the selection, set the source to NULL. + + + + + + + + The data_offer event introduces a new wl_data_offer object, + which will subsequently be used in either the + data_device.enter event (for drag-and-drop) or the + data_device.selection event (for selections). Immediately + following the data_device.data_offer event, the new data_offer + object will send out data_offer.offer events to describe the + mime types it offers. + + + + + + + This event is sent when an active drag-and-drop pointer enters + a surface owned by the client. The position of the pointer at + enter time is provided by the x and y arguments, in surface-local + coordinates. + + + + + + + + + + + This event is sent when the drag-and-drop pointer leaves the + surface and the session ends. The client must destroy the + wl_data_offer introduced at enter time at this point. + + + + + + This event is sent when the drag-and-drop pointer moves within + the currently focused surface. The new position of the pointer + is provided by the x and y arguments, in surface-local + coordinates. + + + + + + + + + The event is sent when a drag-and-drop operation is ended + because the implicit grab is removed. + + The drag-and-drop destination is expected to honor the last action + received through wl_data_offer.action, if the resulting action is + "copy" or "move", the destination can still perform + wl_data_offer.receive requests, and is expected to end all + transfers with a wl_data_offer.finish request. + + If the resulting action is "ask", the action will not be considered + final. The drag-and-drop destination is expected to perform one last + wl_data_offer.set_actions request, or wl_data_offer.destroy in order + to cancel the operation. + + + + + + The selection event is sent out to notify the client of a new + wl_data_offer for the selection for this device. The + data_device.data_offer and the data_offer.offer events are + sent out immediately before this event to introduce the data + offer object. The selection event is sent to a client + immediately before receiving keyboard focus and when a new + selection is set while the client has keyboard focus. The + data_offer is valid until a new data_offer or NULL is received + or until the client loses keyboard focus. Switching surface with + keyboard focus within the same client doesn't mean a new selection + will be sent. The client must destroy the previous selection + data_offer, if any, upon receiving this event. + + + + + + + + + This request destroys the data device. + + + + + + + The wl_data_device_manager is a singleton global object that + provides access to inter-client data transfer mechanisms such as + copy-and-paste and drag-and-drop. These mechanisms are tied to + a wl_seat and this interface lets a client get a wl_data_device + corresponding to a wl_seat. + + Depending on the version bound, the objects created from the bound + wl_data_device_manager object will have different requirements for + functioning properly. See wl_data_source.set_actions, + wl_data_offer.accept and wl_data_offer.finish for details. + + + + + Create a new data source. + + + + + + + Create a new data device for a given seat. + + + + + + + + + + This is a bitmask of the available/preferred actions in a + drag-and-drop operation. + + In the compositor, the selected action is a result of matching the + actions offered by the source and destination sides. "action" events + with a "none" action will be sent to both source and destination if + there is no match. All further checks will effectively happen on + (source actions ∩ destination actions). + + In addition, compositors may also pick different actions in + reaction to key modifiers being pressed. One common design that + is used in major toolkits (and the behavior recommended for + compositors) is: + + - If no modifiers are pressed, the first match (in bit order) + will be used. + - Pressing Shift selects "move", if enabled in the mask. + - Pressing Control selects "copy", if enabled in the mask. + + Behavior beyond that is considered implementation-dependent. + Compositors may for example bind other modifiers (like Alt/Meta) + or drags initiated with other buttons than BTN_LEFT to specific + actions (e.g. "ask"). + + + + + + + + + + + This interface is implemented by servers that provide + desktop-style user interfaces. + + It allows clients to associate a wl_shell_surface with + a basic surface. + + Note! This protocol is deprecated and not intended for production use. + For desktop-style user interfaces, use xdg_shell. Compositors and clients + should not implement this interface. + + + + + + + + + Create a shell surface for an existing surface. This gives + the wl_surface the role of a shell surface. If the wl_surface + already has another role, it raises a protocol error. + + Only one shell surface can be associated with a given surface. + + + + + + + + + An interface that may be implemented by a wl_surface, for + implementations that provide a desktop-style user interface. + + It provides requests to treat surfaces like toplevel, fullscreen + or popup windows, move, resize or maximize them, associate + metadata like title and class, etc. + + On the server side the object is automatically destroyed when + the related wl_surface is destroyed. On the client side, + wl_shell_surface_destroy() must be called before destroying + the wl_surface object. + + + + + A client must respond to a ping event with a pong request or + the client may be deemed unresponsive. + + + + + + + Start a pointer-driven move of the surface. + + This request must be used in response to a button press event. + The server may ignore move requests depending on the state of + the surface (e.g. fullscreen or maximized). + + + + + + + + These values are used to indicate which edge of a surface + is being dragged in a resize operation. The server may + use this information to adapt its behavior, e.g. choose + an appropriate cursor image. + + + + + + + + + + + + + + + Start a pointer-driven resizing of the surface. + + This request must be used in response to a button press event. + The server may ignore resize requests depending on the state of + the surface (e.g. fullscreen or maximized). + + + + + + + + + Map the surface as a toplevel surface. + + A toplevel surface is not fullscreen, maximized or transient. + + + + + + These flags specify details of the expected behaviour + of transient surfaces. Used in the set_transient request. + + + + + + + Map the surface relative to an existing surface. + + The x and y arguments specify the location of the upper left + corner of the surface relative to the upper left corner of the + parent surface, in surface-local coordinates. + + The flags argument controls details of the transient behaviour. + + + + + + + + + + Hints to indicate to the compositor how to deal with a conflict + between the dimensions of the surface and the dimensions of the + output. The compositor is free to ignore this parameter. + + + + + + + + + + Map the surface as a fullscreen surface. + + If an output parameter is given then the surface will be made + fullscreen on that output. If the client does not specify the + output then the compositor will apply its policy - usually + choosing the output on which the surface has the biggest surface + area. + + The client may specify a method to resolve a size conflict + between the output size and the surface size - this is provided + through the method parameter. + + The framerate parameter is used only when the method is set + to "driver", to indicate the preferred framerate. A value of 0 + indicates that the client does not care about framerate. The + framerate is specified in mHz, that is framerate of 60000 is 60Hz. + + A method of "scale" or "driver" implies a scaling operation of + the surface, either via a direct scaling operation or a change of + the output mode. This will override any kind of output scaling, so + that mapping a surface with a buffer size equal to the mode can + fill the screen independent of buffer_scale. + + A method of "fill" means we don't scale up the buffer, however + any output scale is applied. This means that you may run into + an edge case where the application maps a buffer with the same + size of the output mode but buffer_scale 1 (thus making a + surface larger than the output). In this case it is allowed to + downscale the results to fit the screen. + + The compositor must reply to this request with a configure event + with the dimensions for the output on which the surface will + be made fullscreen. + + + + + + + + + Map the surface as a popup. + + A popup surface is a transient surface with an added pointer + grab. + + An existing implicit grab will be changed to owner-events mode, + and the popup grab will continue after the implicit grab ends + (i.e. releasing the mouse button does not cause the popup to + be unmapped). + + The popup grab continues until the window is destroyed or a + mouse button is pressed in any other client's window. A click + in any of the client's surfaces is reported as normal, however, + clicks in other clients' surfaces will be discarded and trigger + the callback. + + The x and y arguments specify the location of the upper left + corner of the surface relative to the upper left corner of the + parent surface, in surface-local coordinates. + + + + + + + + + + + + Map the surface as a maximized surface. + + If an output parameter is given then the surface will be + maximized on that output. If the client does not specify the + output then the compositor will apply its policy - usually + choosing the output on which the surface has the biggest surface + area. + + The compositor will reply with a configure event telling + the expected new surface size. The operation is completed + on the next buffer attach to this surface. + + A maximized surface typically fills the entire output it is + bound to, except for desktop elements such as panels. This is + the main difference between a maximized shell surface and a + fullscreen shell surface. + + The details depend on the compositor implementation. + + + + + + + Set a short title for the surface. + + This string may be used to identify the surface in a task bar, + window list, or other user interface elements provided by the + compositor. + + The string must be encoded in UTF-8. + + + + + + + Set a class for the surface. + + The surface class identifies the general class of applications + to which the surface belongs. A common convention is to use the + file name (or the full path if it is a non-standard location) of + the application's .desktop file as the class. + + + + + + + Ping a client to check if it is receiving events and sending + requests. A client is expected to reply with a pong request. + + + + + + + The configure event asks the client to resize its surface. + + The size is a hint, in the sense that the client is free to + ignore it if it doesn't resize, pick a smaller size (to + satisfy aspect ratio or resize in steps of NxM pixels). + + The edges parameter provides a hint about how the surface + was resized. The client may use this information to decide + how to adjust its content to the new size (e.g. a scrolling + area might adjust its content position to leave the viewable + content unmoved). + + The client is free to dismiss all but the last configure + event it received. + + The width and height arguments specify the size of the window + in surface-local coordinates. + + + + + + + + + The popup_done event is sent out when a popup grab is broken, + that is, when the user clicks a surface that doesn't belong + to the client owning the popup surface. + + + + + + + A surface is a rectangular area that may be displayed on zero + or more outputs, and shown any number of times at the compositor's + discretion. They can present wl_buffers, receive user input, and + define a local coordinate system. + + The size of a surface (and relative positions on it) is described + in surface-local coordinates, which may differ from the buffer + coordinates of the pixel content, in case a buffer_transform + or a buffer_scale is used. + + A surface without a "role" is fairly useless: a compositor does + not know where, when or how to present it. The role is the + purpose of a wl_surface. Examples of roles are a cursor for a + pointer (as set by wl_pointer.set_cursor), a drag icon + (wl_data_device.start_drag), a sub-surface + (wl_subcompositor.get_subsurface), and a window as defined by a + shell protocol (e.g. wl_shell.get_shell_surface). + + A surface can have only one role at a time. Initially a + wl_surface does not have a role. Once a wl_surface is given a + role, it is set permanently for the whole lifetime of the + wl_surface object. Giving the current role again is allowed, + unless explicitly forbidden by the relevant interface + specification. + + Surface roles are given by requests in other interfaces such as + wl_pointer.set_cursor. The request should explicitly mention + that this request gives a role to a wl_surface. Often, this + request also creates a new protocol object that represents the + role and adds additional functionality to wl_surface. When a + client wants to destroy a wl_surface, they must destroy this role + object before the wl_surface, otherwise a defunct_role_object error is + sent. + + Destroying the role object does not remove the role from the + wl_surface, but it may stop the wl_surface from "playing the role". + For instance, if a wl_subsurface object is destroyed, the wl_surface + it was created for will be unmapped and forget its position and + z-order. It is allowed to create a wl_subsurface for the same + wl_surface again, but it is not allowed to use the wl_surface as + a cursor (cursor is a different role than sub-surface, and role + switching is not allowed). + + + + + These errors can be emitted in response to wl_surface requests. + + + + + + + + + + + Deletes the surface and invalidates its object ID. + + + + + + Set a buffer as the content of this surface. + + The new size of the surface is calculated based on the buffer + size transformed by the inverse buffer_transform and the + inverse buffer_scale. This means that at commit time the supplied + buffer size must be an integer multiple of the buffer_scale. If + that's not the case, an invalid_size error is sent. + + The x and y arguments specify the location of the new pending + buffer's upper left corner, relative to the current buffer's upper + left corner, in surface-local coordinates. In other words, the + x and y, combined with the new surface size define in which + directions the surface's size changes. Setting anything other than 0 + as x and y arguments is discouraged, and should instead be replaced + with using the separate wl_surface.offset request. + + When the bound wl_surface version is 5 or higher, passing any + non-zero x or y is a protocol violation, and will result in an + 'invalid_offset' error being raised. The x and y arguments are ignored + and do not change the pending state. To achieve equivalent semantics, + use wl_surface.offset. + + Surface contents are double-buffered state, see wl_surface.commit. + + The initial surface contents are void; there is no content. + wl_surface.attach assigns the given wl_buffer as the pending + wl_buffer. wl_surface.commit makes the pending wl_buffer the new + surface contents, and the size of the surface becomes the size + calculated from the wl_buffer, as described above. After commit, + there is no pending buffer until the next attach. + + Committing a pending wl_buffer allows the compositor to read the + pixels in the wl_buffer. The compositor may access the pixels at + any time after the wl_surface.commit request. When the compositor + will not access the pixels anymore, it will send the + wl_buffer.release event. Only after receiving wl_buffer.release, + the client may reuse the wl_buffer. A wl_buffer that has been + attached and then replaced by another attach instead of committed + will not receive a release event, and is not used by the + compositor. + + If a pending wl_buffer has been committed to more than one wl_surface, + the delivery of wl_buffer.release events becomes undefined. A well + behaved client should not rely on wl_buffer.release events in this + case. Alternatively, a client could create multiple wl_buffer objects + from the same backing storage or use wp_linux_buffer_release. + + Destroying the wl_buffer after wl_buffer.release does not change + the surface contents. Destroying the wl_buffer before wl_buffer.release + is allowed as long as the underlying buffer storage isn't re-used (this + can happen e.g. on client process termination). However, if the client + destroys the wl_buffer before receiving the wl_buffer.release event and + mutates the underlying buffer storage, the surface contents become + undefined immediately. + + If wl_surface.attach is sent with a NULL wl_buffer, the + following wl_surface.commit will remove the surface content. + + + + + + + + + This request is used to describe the regions where the pending + buffer is different from the current surface contents, and where + the surface therefore needs to be repainted. The compositor + ignores the parts of the damage that fall outside of the surface. + + Damage is double-buffered state, see wl_surface.commit. + + The damage rectangle is specified in surface-local coordinates, + where x and y specify the upper left corner of the damage rectangle. + + The initial value for pending damage is empty: no damage. + wl_surface.damage adds pending damage: the new pending damage + is the union of old pending damage and the given rectangle. + + wl_surface.commit assigns pending damage as the current damage, + and clears pending damage. The server will clear the current + damage as it repaints the surface. + + Note! New clients should not use this request. Instead damage can be + posted with wl_surface.damage_buffer which uses buffer coordinates + instead of surface coordinates. + + + + + + + + + + Request a notification when it is a good time to start drawing a new + frame, by creating a frame callback. This is useful for throttling + redrawing operations, and driving animations. + + When a client is animating on a wl_surface, it can use the 'frame' + request to get notified when it is a good time to draw and commit the + next frame of animation. If the client commits an update earlier than + that, it is likely that some updates will not make it to the display, + and the client is wasting resources by drawing too often. + + The frame request will take effect on the next wl_surface.commit. + The notification will only be posted for one frame unless + requested again. For a wl_surface, the notifications are posted in + the order the frame requests were committed. + + The server must send the notifications so that a client + will not send excessive updates, while still allowing + the highest possible update rate for clients that wait for the reply + before drawing again. The server should give some time for the client + to draw and commit after sending the frame callback events to let it + hit the next output refresh. + + A server should avoid signaling the frame callbacks if the + surface is not visible in any way, e.g. the surface is off-screen, + or completely obscured by other opaque surfaces. + + The object returned by this request will be destroyed by the + compositor after the callback is fired and as such the client must not + attempt to use it after that point. + + The callback_data passed in the callback is the current time, in + milliseconds, with an undefined base. + + + + + + + This request sets the region of the surface that contains + opaque content. + + The opaque region is an optimization hint for the compositor + that lets it optimize the redrawing of content behind opaque + regions. Setting an opaque region is not required for correct + behaviour, but marking transparent content as opaque will result + in repaint artifacts. + + The opaque region is specified in surface-local coordinates. + + The compositor ignores the parts of the opaque region that fall + outside of the surface. + + Opaque region is double-buffered state, see wl_surface.commit. + + wl_surface.set_opaque_region changes the pending opaque region. + wl_surface.commit copies the pending region to the current region. + Otherwise, the pending and current regions are never changed. + + The initial value for an opaque region is empty. Setting the pending + opaque region has copy semantics, and the wl_region object can be + destroyed immediately. A NULL wl_region causes the pending opaque + region to be set to empty. + + + + + + + This request sets the region of the surface that can receive + pointer and touch events. + + Input events happening outside of this region will try the next + surface in the server surface stack. The compositor ignores the + parts of the input region that fall outside of the surface. + + The input region is specified in surface-local coordinates. + + Input region is double-buffered state, see wl_surface.commit. + + wl_surface.set_input_region changes the pending input region. + wl_surface.commit copies the pending region to the current region. + Otherwise the pending and current regions are never changed, + except cursor and icon surfaces are special cases, see + wl_pointer.set_cursor and wl_data_device.start_drag. + + The initial value for an input region is infinite. That means the + whole surface will accept input. Setting the pending input region + has copy semantics, and the wl_region object can be destroyed + immediately. A NULL wl_region causes the input region to be set + to infinite. + + + + + + + Surface state (input, opaque, and damage regions, attached buffers, + etc.) is double-buffered. Protocol requests modify the pending state, + as opposed to the current state in use by the compositor. A commit + request atomically applies all pending state, replacing the current + state. After commit, the new pending state is as documented for each + related request. + + On commit, a pending wl_buffer is applied first, and all other state + second. This means that all coordinates in double-buffered state are + relative to the new wl_buffer coming into use, except for + wl_surface.attach itself. If there is no pending wl_buffer, the + coordinates are relative to the current surface contents. + + All requests that need a commit to become effective are documented + to affect double-buffered state. + + Other interfaces may add further double-buffered surface state. + + + + + + This is emitted whenever a surface's creation, movement, or resizing + results in some part of it being within the scanout region of an + output. + + Note that a surface may be overlapping with zero or more outputs. + + + + + + + This is emitted whenever a surface's creation, movement, or resizing + results in it no longer having any part of it within the scanout region + of an output. + + Clients should not use the number of outputs the surface is on for frame + throttling purposes. The surface might be hidden even if no leave event + has been sent, and the compositor might expect new surface content + updates even if no enter event has been sent. The frame event should be + used instead. + + + + + + + + + This request sets an optional transformation on how the compositor + interprets the contents of the buffer attached to the surface. The + accepted values for the transform parameter are the values for + wl_output.transform. + + Buffer transform is double-buffered state, see wl_surface.commit. + + A newly created surface has its buffer transformation set to normal. + + wl_surface.set_buffer_transform changes the pending buffer + transformation. wl_surface.commit copies the pending buffer + transformation to the current one. Otherwise, the pending and current + values are never changed. + + The purpose of this request is to allow clients to render content + according to the output transform, thus permitting the compositor to + use certain optimizations even if the display is rotated. Using + hardware overlays and scanning out a client buffer for fullscreen + surfaces are examples of such optimizations. Those optimizations are + highly dependent on the compositor implementation, so the use of this + request should be considered on a case-by-case basis. + + Note that if the transform value includes 90 or 270 degree rotation, + the width of the buffer will become the surface height and the height + of the buffer will become the surface width. + + If transform is not one of the values from the + wl_output.transform enum the invalid_transform protocol error + is raised. + + + + + + + + + This request sets an optional scaling factor on how the compositor + interprets the contents of the buffer attached to the window. + + Buffer scale is double-buffered state, see wl_surface.commit. + + A newly created surface has its buffer scale set to 1. + + wl_surface.set_buffer_scale changes the pending buffer scale. + wl_surface.commit copies the pending buffer scale to the current one. + Otherwise, the pending and current values are never changed. + + The purpose of this request is to allow clients to supply higher + resolution buffer data for use on high resolution outputs. It is + intended that you pick the same buffer scale as the scale of the + output that the surface is displayed on. This means the compositor + can avoid scaling when rendering the surface on that output. + + Note that if the scale is larger than 1, then you have to attach + a buffer that is larger (by a factor of scale in each dimension) + than the desired surface size. + + If scale is not positive the invalid_scale protocol error is + raised. + + + + + + + + This request is used to describe the regions where the pending + buffer is different from the current surface contents, and where + the surface therefore needs to be repainted. The compositor + ignores the parts of the damage that fall outside of the surface. + + Damage is double-buffered state, see wl_surface.commit. + + The damage rectangle is specified in buffer coordinates, + where x and y specify the upper left corner of the damage rectangle. + + The initial value for pending damage is empty: no damage. + wl_surface.damage_buffer adds pending damage: the new pending + damage is the union of old pending damage and the given rectangle. + + wl_surface.commit assigns pending damage as the current damage, + and clears pending damage. The server will clear the current + damage as it repaints the surface. + + This request differs from wl_surface.damage in only one way - it + takes damage in buffer coordinates instead of surface-local + coordinates. While this generally is more intuitive than surface + coordinates, it is especially desirable when using wp_viewport + or when a drawing library (like EGL) is unaware of buffer scale + and buffer transform. + + Note: Because buffer transformation changes and damage requests may + be interleaved in the protocol stream, it is impossible to determine + the actual mapping between surface and buffer damage until + wl_surface.commit time. Therefore, compositors wishing to take both + kinds of damage into account will have to accumulate damage from the + two requests separately and only transform from one to the other + after receiving the wl_surface.commit. + + + + + + + + + + + + The x and y arguments specify the location of the new pending + buffer's upper left corner, relative to the current buffer's upper + left corner, in surface-local coordinates. In other words, the + x and y, combined with the new surface size define in which + directions the surface's size changes. + + Surface location offset is double-buffered state, see + wl_surface.commit. + + This request is semantically equivalent to and the replaces the x and y + arguments in the wl_surface.attach request in wl_surface versions prior + to 5. See wl_surface.attach for details. + + + + + + + + + + This event indicates the preferred buffer scale for this surface. It is + sent whenever the compositor's preference changes. + + It is intended that scaling aware clients use this event to scale their + content and use wl_surface.set_buffer_scale to indicate the scale they + have rendered with. This allows clients to supply a higher detail + buffer. + + + + + + + This event indicates the preferred buffer transform for this surface. + It is sent whenever the compositor's preference changes. + + It is intended that transform aware clients use this event to apply the + transform to their content and use wl_surface.set_buffer_transform to + indicate the transform they have rendered with. + + + + + + + + A seat is a group of keyboards, pointer and touch devices. This + object is published as a global during start up, or when such a + device is hot plugged. A seat typically has a pointer and + maintains a keyboard focus and a pointer focus. + + + + + This is a bitmask of capabilities this seat has; if a member is + set, then it is present on the seat. + + + + + + + + + These errors can be emitted in response to wl_seat requests. + + + + + + + This is emitted whenever a seat gains or loses the pointer, + keyboard or touch capabilities. The argument is a capability + enum containing the complete set of capabilities this seat has. + + When the pointer capability is added, a client may create a + wl_pointer object using the wl_seat.get_pointer request. This object + will receive pointer events until the capability is removed in the + future. + + When the pointer capability is removed, a client should destroy the + wl_pointer objects associated with the seat where the capability was + removed, using the wl_pointer.release request. No further pointer + events will be received on these objects. + + In some compositors, if a seat regains the pointer capability and a + client has a previously obtained wl_pointer object of version 4 or + less, that object may start sending pointer events again. This + behavior is considered a misinterpretation of the intended behavior + and must not be relied upon by the client. wl_pointer objects of + version 5 or later must not send events if created before the most + recent event notifying the client of an added pointer capability. + + The above behavior also applies to wl_keyboard and wl_touch with the + keyboard and touch capabilities, respectively. + + + + + + + The ID provided will be initialized to the wl_pointer interface + for this seat. + + This request only takes effect if the seat has the pointer + capability, or has had the pointer capability in the past. + It is a protocol violation to issue this request on a seat that has + never had the pointer capability. The missing_capability error will + be sent in this case. + + + + + + + The ID provided will be initialized to the wl_keyboard interface + for this seat. + + This request only takes effect if the seat has the keyboard + capability, or has had the keyboard capability in the past. + It is a protocol violation to issue this request on a seat that has + never had the keyboard capability. The missing_capability error will + be sent in this case. + + + + + + + The ID provided will be initialized to the wl_touch interface + for this seat. + + This request only takes effect if the seat has the touch + capability, or has had the touch capability in the past. + It is a protocol violation to issue this request on a seat that has + never had the touch capability. The missing_capability error will + be sent in this case. + + + + + + + + + In a multi-seat configuration the seat name can be used by clients to + help identify which physical devices the seat represents. + + The seat name is a UTF-8 string with no convention defined for its + contents. Each name is unique among all wl_seat globals. The name is + only guaranteed to be unique for the current compositor instance. + + The same seat names are used for all clients. Thus, the name can be + shared across processes to refer to a specific wl_seat global. + + The name event is sent after binding to the seat global. This event is + only sent once per seat object, and the name does not change over the + lifetime of the wl_seat global. + + Compositors may re-use the same seat name if the wl_seat global is + destroyed and re-created later. + + + + + + + + + Using this request a client can tell the server that it is not going to + use the seat object anymore. + + + + + + + + The wl_pointer interface represents one or more input devices, + such as mice, which control the pointer location and pointer_focus + of a seat. + + The wl_pointer interface generates motion, enter and leave + events for the surfaces that the pointer is located over, + and button and axis events for button presses, button releases + and scrolling. + + + + + + + + + Set the pointer surface, i.e., the surface that contains the + pointer image (cursor). This request gives the surface the role + of a cursor. If the surface already has another role, it raises + a protocol error. + + The cursor actually changes only if the pointer + focus for this device is one of the requesting client's surfaces + or the surface parameter is the current pointer surface. If + there was a previous surface set with this request it is + replaced. If surface is NULL, the pointer image is hidden. + + The parameters hotspot_x and hotspot_y define the position of + the pointer surface relative to the pointer location. Its + top-left corner is always at (x, y) - (hotspot_x, hotspot_y), + where (x, y) are the coordinates of the pointer location, in + surface-local coordinates. + + On surface.attach requests to the pointer surface, hotspot_x + and hotspot_y are decremented by the x and y parameters + passed to the request. Attach must be confirmed by + wl_surface.commit as usual. + + The hotspot can also be updated by passing the currently set + pointer surface to this request with new values for hotspot_x + and hotspot_y. + + The input region is ignored for wl_surfaces with the role of + a cursor. When the use as a cursor ends, the wl_surface is + unmapped. + + The serial parameter must match the latest wl_pointer.enter + serial number sent to the client. Otherwise the request will be + ignored. + + + + + + + + + + Notification that this seat's pointer is focused on a certain + surface. + + When a seat's focus enters a surface, the pointer image + is undefined and a client should respond to this event by setting + an appropriate pointer image with the set_cursor request. + + + + + + + + + + Notification that this seat's pointer is no longer focused on + a certain surface. + + The leave notification is sent before the enter notification + for the new focus. + + + + + + + + Notification of pointer location change. The arguments + surface_x and surface_y are the location relative to the + focused surface. + + + + + + + + + Describes the physical state of a button that produced the button + event. + + + + + + + + Mouse button click and release notifications. + + The location of the click is given by the last motion or + enter event. + The time argument is a timestamp with millisecond + granularity, with an undefined base. + + The button is a button code as defined in the Linux kernel's + linux/input-event-codes.h header file, e.g. BTN_LEFT. + + Any 16-bit button code value is reserved for future additions to the + kernel's event code list. All other button codes above 0xFFFF are + currently undefined but may be used in future versions of this + protocol. + + + + + + + + + + Describes the axis types of scroll events. + + + + + + + + Scroll and other axis notifications. + + For scroll events (vertical and horizontal scroll axes), the + value parameter is the length of a vector along the specified + axis in a coordinate space identical to those of motion events, + representing a relative movement along the specified axis. + + For devices that support movements non-parallel to axes multiple + axis events will be emitted. + + When applicable, for example for touch pads, the server can + choose to emit scroll events where the motion vector is + equivalent to a motion event vector. + + When applicable, a client can transform its content relative to the + scroll distance. + + + + + + + + + + + Using this request a client can tell the server that it is not going to + use the pointer object anymore. + + This request destroys the pointer proxy object, so clients must not call + wl_pointer_destroy() after using this request. + + + + + + + + Indicates the end of a set of events that logically belong together. + A client is expected to accumulate the data in all events within the + frame before proceeding. + + All wl_pointer events before a wl_pointer.frame event belong + logically together. For example, in a diagonal scroll motion the + compositor will send an optional wl_pointer.axis_source event, two + wl_pointer.axis events (horizontal and vertical) and finally a + wl_pointer.frame event. The client may use this information to + calculate a diagonal vector for scrolling. + + When multiple wl_pointer.axis events occur within the same frame, + the motion vector is the combined motion of all events. + When a wl_pointer.axis and a wl_pointer.axis_stop event occur within + the same frame, this indicates that axis movement in one axis has + stopped but continues in the other axis. + When multiple wl_pointer.axis_stop events occur within the same + frame, this indicates that these axes stopped in the same instance. + + A wl_pointer.frame event is sent for every logical event group, + even if the group only contains a single wl_pointer event. + Specifically, a client may get a sequence: motion, frame, button, + frame, axis, frame, axis_stop, frame. + + The wl_pointer.enter and wl_pointer.leave events are logical events + generated by the compositor and not the hardware. These events are + also grouped by a wl_pointer.frame. When a pointer moves from one + surface to another, a compositor should group the + wl_pointer.leave event within the same wl_pointer.frame. + However, a client must not rely on wl_pointer.leave and + wl_pointer.enter being in the same wl_pointer.frame. + Compositor-specific policies may require the wl_pointer.leave and + wl_pointer.enter event being split across multiple wl_pointer.frame + groups. + + + + + + Describes the source types for axis events. This indicates to the + client how an axis event was physically generated; a client may + adjust the user interface accordingly. For example, scroll events + from a "finger" source may be in a smooth coordinate space with + kinetic scrolling whereas a "wheel" source may be in discrete steps + of a number of lines. + + The "continuous" axis source is a device generating events in a + continuous coordinate space, but using something other than a + finger. One example for this source is button-based scrolling where + the vertical motion of a device is converted to scroll events while + a button is held down. + + The "wheel tilt" axis source indicates that the actual device is a + wheel but the scroll event is not caused by a rotation but a + (usually sideways) tilt of the wheel. + + + + + + + + + + Source information for scroll and other axes. + + This event does not occur on its own. It is sent before a + wl_pointer.frame event and carries the source information for + all events within that frame. + + The source specifies how this event was generated. If the source is + wl_pointer.axis_source.finger, a wl_pointer.axis_stop event will be + sent when the user lifts the finger off the device. + + If the source is wl_pointer.axis_source.wheel, + wl_pointer.axis_source.wheel_tilt or + wl_pointer.axis_source.continuous, a wl_pointer.axis_stop event may + or may not be sent. Whether a compositor sends an axis_stop event + for these sources is hardware-specific and implementation-dependent; + clients must not rely on receiving an axis_stop event for these + scroll sources and should treat scroll sequences from these scroll + sources as unterminated by default. + + This event is optional. If the source is unknown for a particular + axis event sequence, no event is sent. + Only one wl_pointer.axis_source event is permitted per frame. + + The order of wl_pointer.axis_discrete and wl_pointer.axis_source is + not guaranteed. + + + + + + + Stop notification for scroll and other axes. + + For some wl_pointer.axis_source types, a wl_pointer.axis_stop event + is sent to notify a client that the axis sequence has terminated. + This enables the client to implement kinetic scrolling. + See the wl_pointer.axis_source documentation for information on when + this event may be generated. + + Any wl_pointer.axis events with the same axis_source after this + event should be considered as the start of a new axis motion. + + The timestamp is to be interpreted identical to the timestamp in the + wl_pointer.axis event. The timestamp value may be the same as a + preceding wl_pointer.axis event. + + + + + + + + Discrete step information for scroll and other axes. + + This event carries the axis value of the wl_pointer.axis event in + discrete steps (e.g. mouse wheel clicks). + + This event is deprecated with wl_pointer version 8 - this event is not + sent to clients supporting version 8 or later. + + This event does not occur on its own, it is coupled with a + wl_pointer.axis event that represents this axis value on a + continuous scale. The protocol guarantees that each axis_discrete + event is always followed by exactly one axis event with the same + axis number within the same wl_pointer.frame. Note that the protocol + allows for other events to occur between the axis_discrete and + its coupled axis event, including other axis_discrete or axis + events. A wl_pointer.frame must not contain more than one axis_discrete + event per axis type. + + This event is optional; continuous scrolling devices + like two-finger scrolling on touchpads do not have discrete + steps and do not generate this event. + + The discrete value carries the directional information. e.g. a value + of -2 is two steps towards the negative direction of this axis. + + The axis number is identical to the axis number in the associated + axis event. + + The order of wl_pointer.axis_discrete and wl_pointer.axis_source is + not guaranteed. + + + + + + + + Discrete high-resolution scroll information. + + This event carries high-resolution wheel scroll information, + with each multiple of 120 representing one logical scroll step + (a wheel detent). For example, an axis_value120 of 30 is one quarter of + a logical scroll step in the positive direction, a value120 of + -240 are two logical scroll steps in the negative direction within the + same hardware event. + Clients that rely on discrete scrolling should accumulate the + value120 to multiples of 120 before processing the event. + + The value120 must not be zero. + + This event replaces the wl_pointer.axis_discrete event in clients + supporting wl_pointer version 8 or later. + + Where a wl_pointer.axis_source event occurs in the same + wl_pointer.frame, the axis source applies to this event. + + The order of wl_pointer.axis_value120 and wl_pointer.axis_source is + not guaranteed. + + + + + + + + + + This specifies the direction of the physical motion that caused a + wl_pointer.axis event, relative to the wl_pointer.axis direction. + + + + + + + + Relative directional information of the entity causing the axis + motion. + + For a wl_pointer.axis event, the wl_pointer.axis_relative_direction + event specifies the movement direction of the entity causing the + wl_pointer.axis event. For example: + - if a user's fingers on a touchpad move down and this + causes a wl_pointer.axis vertical_scroll down event, the physical + direction is 'identical' + - if a user's fingers on a touchpad move down and this causes a + wl_pointer.axis vertical_scroll up scroll up event ('natural + scrolling'), the physical direction is 'inverted'. + + A client may use this information to adjust scroll motion of + components. Specifically, enabling natural scrolling causes the + content to change direction compared to traditional scrolling. + Some widgets like volume control sliders should usually match the + physical direction regardless of whether natural scrolling is + active. This event enables clients to match the scroll direction of + a widget to the physical direction. + + This event does not occur on its own, it is coupled with a + wl_pointer.axis event that represents this axis value. + The protocol guarantees that each axis_relative_direction event is + always followed by exactly one axis event with the same + axis number within the same wl_pointer.frame. Note that the protocol + allows for other events to occur between the axis_relative_direction + and its coupled axis event. + + The axis number is identical to the axis number in the associated + axis event. + + The order of wl_pointer.axis_relative_direction, + wl_pointer.axis_discrete and wl_pointer.axis_source is not + guaranteed. + + + + + + + + + The wl_keyboard interface represents one or more keyboards + associated with a seat. + + + + + This specifies the format of the keymap provided to the + client with the wl_keyboard.keymap event. + + + + + + + + This event provides a file descriptor to the client which can be + memory-mapped in read-only mode to provide a keyboard mapping + description. + + From version 7 onwards, the fd must be mapped with MAP_PRIVATE by + the recipient, as MAP_SHARED may fail. + + + + + + + + + Notification that this seat's keyboard focus is on a certain + surface. + + The compositor must send the wl_keyboard.modifiers event after this + event. + + + + + + + + + Notification that this seat's keyboard focus is no longer on + a certain surface. + + The leave notification is sent before the enter notification + for the new focus. + + After this event client must assume that all keys, including modifiers, + are lifted and also it must stop key repeating if there's some going on. + + + + + + + + Describes the physical state of a key that produced the key event. + + + + + + + + A key was pressed or released. + The time argument is a timestamp with millisecond + granularity, with an undefined base. + + The key is a platform-specific key code that can be interpreted + by feeding it to the keyboard mapping (see the keymap event). + + If this event produces a change in modifiers, then the resulting + wl_keyboard.modifiers event must be sent after this event. + + + + + + + + + + Notifies clients that the modifier and/or group state has + changed, and it should update its local state. + + + + + + + + + + + + + + + + + + + Informs the client about the keyboard's repeat rate and delay. + + This event is sent as soon as the wl_keyboard object has been created, + and is guaranteed to be received by the client before any key press + event. + + Negative values for either rate or delay are illegal. A rate of zero + will disable any repeating (regardless of the value of delay). + + This event can be sent later on as well with a new value if necessary, + so clients should continue listening for the event past the creation + of wl_keyboard. + + + + + + + + + The wl_touch interface represents a touchscreen + associated with a seat. + + Touch interactions can consist of one or more contacts. + For each contact, a series of events is generated, starting + with a down event, followed by zero or more motion events, + and ending with an up event. Events relating to the same + contact point can be identified by the ID of the sequence. + + + + + A new touch point has appeared on the surface. This touch point is + assigned a unique ID. Future events from this touch point reference + this ID. The ID ceases to be valid after a touch up event and may be + reused in the future. + + + + + + + + + + + + The touch point has disappeared. No further events will be sent for + this touch point and the touch point's ID is released and may be + reused in a future touch down event. + + + + + + + + + A touch point has changed coordinates. + + + + + + + + + + Indicates the end of a set of events that logically belong together. + A client is expected to accumulate the data in all events within the + frame before proceeding. + + A wl_touch.frame terminates at least one event but otherwise no + guarantee is provided about the set of events within a frame. A client + must assume that any state not updated in a frame is unchanged from the + previously known state. + + + + + + Sent if the compositor decides the touch stream is a global + gesture. No further events are sent to the clients from that + particular gesture. Touch cancellation applies to all touch points + currently active on this client's surface. The client is + responsible for finalizing the touch points, future touch points on + this surface may reuse the touch point ID. + + + + + + + + + + + + + + Sent when a touchpoint has changed its shape. + + This event does not occur on its own. It is sent before a + wl_touch.frame event and carries the new shape information for + any previously reported, or new touch points of that frame. + + Other events describing the touch point such as wl_touch.down, + wl_touch.motion or wl_touch.orientation may be sent within the + same wl_touch.frame. A client should treat these events as a single + logical touch point update. The order of wl_touch.shape, + wl_touch.orientation and wl_touch.motion is not guaranteed. + A wl_touch.down event is guaranteed to occur before the first + wl_touch.shape event for this touch ID but both events may occur within + the same wl_touch.frame. + + A touchpoint shape is approximated by an ellipse through the major and + minor axis length. The major axis length describes the longer diameter + of the ellipse, while the minor axis length describes the shorter + diameter. Major and minor are orthogonal and both are specified in + surface-local coordinates. The center of the ellipse is always at the + touchpoint location as reported by wl_touch.down or wl_touch.move. + + This event is only sent by the compositor if the touch device supports + shape reports. The client has to make reasonable assumptions about the + shape if it did not receive this event. + + + + + + + + + Sent when a touchpoint has changed its orientation. + + This event does not occur on its own. It is sent before a + wl_touch.frame event and carries the new shape information for + any previously reported, or new touch points of that frame. + + Other events describing the touch point such as wl_touch.down, + wl_touch.motion or wl_touch.shape may be sent within the + same wl_touch.frame. A client should treat these events as a single + logical touch point update. The order of wl_touch.shape, + wl_touch.orientation and wl_touch.motion is not guaranteed. + A wl_touch.down event is guaranteed to occur before the first + wl_touch.orientation event for this touch ID but both events may occur + within the same wl_touch.frame. + + The orientation describes the clockwise angle of a touchpoint's major + axis to the positive surface y-axis and is normalized to the -180 to + +180 degree range. The granularity of orientation depends on the touch + device, some devices only support binary rotation values between 0 and + 90 degrees. + + This event is only sent by the compositor if the touch device supports + orientation reports. + + + + + + + + + An output describes part of the compositor geometry. The + compositor works in the 'compositor coordinate system' and an + output corresponds to a rectangular area in that space that is + actually visible. This typically corresponds to a monitor that + displays part of the compositor space. This object is published + as global during start up, or when a monitor is hotplugged. + + + + + This enumeration describes how the physical + pixels on an output are laid out. + + + + + + + + + + + + This describes the transform that a compositor will apply to a + surface to compensate for the rotation or mirroring of an + output device. + + The flipped values correspond to an initial flip around a + vertical axis followed by rotation. + + The purpose is mainly to allow clients to render accordingly and + tell the compositor, so that for fullscreen surfaces, the + compositor will still be able to scan out directly from client + surfaces. + + + + + + + + + + + + + + The geometry event describes geometric properties of the output. + The event is sent when binding to the output object and whenever + any of the properties change. + + The physical size can be set to zero if it doesn't make sense for this + output (e.g. for projectors or virtual outputs). + + The geometry event will be followed by a done event (starting from + version 2). + + Note: wl_output only advertises partial information about the output + position and identification. Some compositors, for instance those not + implementing a desktop-style output layout or those exposing virtual + outputs, might fake this information. Instead of using x and y, clients + should use xdg_output.logical_position. Instead of using make and model, + clients should use name and description. + + + + + + + + + + + + + + These flags describe properties of an output mode. + They are used in the flags bitfield of the mode event. + + + + + + + + The mode event describes an available mode for the output. + + The event is sent when binding to the output object and there + will always be one mode, the current mode. The event is sent + again if an output changes mode, for the mode that is now + current. In other words, the current mode is always the last + mode that was received with the current flag set. + + Non-current modes are deprecated. A compositor can decide to only + advertise the current mode and never send other modes. Clients + should not rely on non-current modes. + + The size of a mode is given in physical hardware units of + the output device. This is not necessarily the same as + the output size in the global compositor space. For instance, + the output may be scaled, as described in wl_output.scale, + or transformed, as described in wl_output.transform. Clients + willing to retrieve the output size in the global compositor + space should use xdg_output.logical_size instead. + + The vertical refresh rate can be set to zero if it doesn't make + sense for this output (e.g. for virtual outputs). + + The mode event will be followed by a done event (starting from + version 2). + + Clients should not use the refresh rate to schedule frames. Instead, + they should use the wl_surface.frame event or the presentation-time + protocol. + + Note: this information is not always meaningful for all outputs. Some + compositors, such as those exposing virtual outputs, might fake the + refresh rate or the size. + + + + + + + + + + + + This event is sent after all other properties have been + sent after binding to the output object and after any + other property changes done after that. This allows + changes to the output properties to be seen as + atomic, even if they happen via multiple events. + + + + + + This event contains scaling geometry information + that is not in the geometry event. It may be sent after + binding the output object or if the output scale changes + later. If it is not sent, the client should assume a + scale of 1. + + A scale larger than 1 means that the compositor will + automatically scale surface buffers by this amount + when rendering. This is used for very high resolution + displays where applications rendering at the native + resolution would be too small to be legible. + + It is intended that scaling aware clients track the + current output of a surface, and if it is on a scaled + output it should use wl_surface.set_buffer_scale with + the scale of the output. That way the compositor can + avoid scaling the surface, and the client can supply + a higher detail image. + + The scale event will be followed by a done event. + + + + + + + + + Using this request a client can tell the server that it is not going to + use the output object anymore. + + + + + + + + Many compositors will assign user-friendly names to their outputs, show + them to the user, allow the user to refer to an output, etc. The client + may wish to know this name as well to offer the user similar behaviors. + + The name is a UTF-8 string with no convention defined for its contents. + Each name is unique among all wl_output globals. The name is only + guaranteed to be unique for the compositor instance. + + The same output name is used for all clients for a given wl_output + global. Thus, the name can be shared across processes to refer to a + specific wl_output global. + + The name is not guaranteed to be persistent across sessions, thus cannot + be used to reliably identify an output in e.g. configuration files. + + Examples of names include 'HDMI-A-1', 'WL-1', 'X11-1', etc. However, do + not assume that the name is a reflection of an underlying DRM connector, + X11 connection, etc. + + The name event is sent after binding the output object. This event is + only sent once per output object, and the name does not change over the + lifetime of the wl_output global. + + Compositors may re-use the same output name if the wl_output global is + destroyed and re-created later. Compositors should avoid re-using the + same name if possible. + + The name event will be followed by a done event. + + + + + + + Many compositors can produce human-readable descriptions of their + outputs. The client may wish to know this description as well, e.g. for + output selection purposes. + + The description is a UTF-8 string with no convention defined for its + contents. The description is not guaranteed to be unique among all + wl_output globals. Examples might include 'Foocorp 11" Display' or + 'Virtual X11 output via :1'. + + The description event is sent after binding the output object and + whenever the description changes. The description is optional, and may + not be sent at all. + + The description event will be followed by a done event. + + + + + + + + A region object describes an area. + + Region objects are used to describe the opaque and input + regions of a surface. + + + + + Destroy the region. This will invalidate the object ID. + + + + + + Add the specified rectangle to the region. + + + + + + + + + + Subtract the specified rectangle from the region. + + + + + + + + + + + The global interface exposing sub-surface compositing capabilities. + A wl_surface, that has sub-surfaces associated, is called the + parent surface. Sub-surfaces can be arbitrarily nested and create + a tree of sub-surfaces. + + The root surface in a tree of sub-surfaces is the main + surface. The main surface cannot be a sub-surface, because + sub-surfaces must always have a parent. + + A main surface with its sub-surfaces forms a (compound) window. + For window management purposes, this set of wl_surface objects is + to be considered as a single window, and it should also behave as + such. + + The aim of sub-surfaces is to offload some of the compositing work + within a window from clients to the compositor. A prime example is + a video player with decorations and video in separate wl_surface + objects. This should allow the compositor to pass YUV video buffer + processing to dedicated overlay hardware when possible. + + + + + Informs the server that the client will not be using this + protocol object anymore. This does not affect any other + objects, wl_subsurface objects included. + + + + + + + + + + + Create a sub-surface interface for the given surface, and + associate it with the given parent surface. This turns a + plain wl_surface into a sub-surface. + + The to-be sub-surface must not already have another role, and it + must not have an existing wl_subsurface object. Otherwise the + bad_surface protocol error is raised. + + Adding sub-surfaces to a parent is a double-buffered operation on the + parent (see wl_surface.commit). The effect of adding a sub-surface + becomes visible on the next time the state of the parent surface is + applied. + + The parent surface must not be one of the child surface's descendants, + and the parent must be different from the child surface, otherwise the + bad_parent protocol error is raised. + + This request modifies the behaviour of wl_surface.commit request on + the sub-surface, see the documentation on wl_subsurface interface. + + + + + + + + + + An additional interface to a wl_surface object, which has been + made a sub-surface. A sub-surface has one parent surface. A + sub-surface's size and position are not limited to that of the parent. + Particularly, a sub-surface is not automatically clipped to its + parent's area. + + A sub-surface becomes mapped, when a non-NULL wl_buffer is applied + and the parent surface is mapped. The order of which one happens + first is irrelevant. A sub-surface is hidden if the parent becomes + hidden, or if a NULL wl_buffer is applied. These rules apply + recursively through the tree of surfaces. + + The behaviour of a wl_surface.commit request on a sub-surface + depends on the sub-surface's mode. The possible modes are + synchronized and desynchronized, see methods + wl_subsurface.set_sync and wl_subsurface.set_desync. Synchronized + mode caches the wl_surface state to be applied when the parent's + state gets applied, and desynchronized mode applies the pending + wl_surface state directly. A sub-surface is initially in the + synchronized mode. + + Sub-surfaces also have another kind of state, which is managed by + wl_subsurface requests, as opposed to wl_surface requests. This + state includes the sub-surface position relative to the parent + surface (wl_subsurface.set_position), and the stacking order of + the parent and its sub-surfaces (wl_subsurface.place_above and + .place_below). This state is applied when the parent surface's + wl_surface state is applied, regardless of the sub-surface's mode. + As the exception, set_sync and set_desync are effective immediately. + + The main surface can be thought to be always in desynchronized mode, + since it does not have a parent in the sub-surfaces sense. + + Even if a sub-surface is in desynchronized mode, it will behave as + in synchronized mode, if its parent surface behaves as in + synchronized mode. This rule is applied recursively throughout the + tree of surfaces. This means, that one can set a sub-surface into + synchronized mode, and then assume that all its child and grand-child + sub-surfaces are synchronized, too, without explicitly setting them. + + Destroying a sub-surface takes effect immediately. If you need to + synchronize the removal of a sub-surface to the parent surface update, + unmap the sub-surface first by attaching a NULL wl_buffer, update parent, + and then destroy the sub-surface. + + If the parent wl_surface object is destroyed, the sub-surface is + unmapped. + + + + + The sub-surface interface is removed from the wl_surface object + that was turned into a sub-surface with a + wl_subcompositor.get_subsurface request. The wl_surface's association + to the parent is deleted. The wl_surface is unmapped immediately. + + + + + + + + + + This schedules a sub-surface position change. + The sub-surface will be moved so that its origin (top left + corner pixel) will be at the location x, y of the parent surface + coordinate system. The coordinates are not restricted to the parent + surface area. Negative values are allowed. + + The scheduled coordinates will take effect whenever the state of the + parent surface is applied. When this happens depends on whether the + parent surface is in synchronized mode or not. See + wl_subsurface.set_sync and wl_subsurface.set_desync for details. + + If more than one set_position request is invoked by the client before + the commit of the parent surface, the position of a new request always + replaces the scheduled position from any previous request. + + The initial position is 0, 0. + + + + + + + + This sub-surface is taken from the stack, and put back just + above the reference surface, changing the z-order of the sub-surfaces. + The reference surface must be one of the sibling surfaces, or the + parent surface. Using any other surface, including this sub-surface, + will cause a protocol error. + + The z-order is double-buffered. Requests are handled in order and + applied immediately to a pending state. The final pending state is + copied to the active state the next time the state of the parent + surface is applied. When this happens depends on whether the parent + surface is in synchronized mode or not. See wl_subsurface.set_sync and + wl_subsurface.set_desync for details. + + A new sub-surface is initially added as the top-most in the stack + of its siblings and parent. + + + + + + + The sub-surface is placed just below the reference surface. + See wl_subsurface.place_above. + + + + + + + Change the commit behaviour of the sub-surface to synchronized + mode, also described as the parent dependent mode. + + In synchronized mode, wl_surface.commit on a sub-surface will + accumulate the committed state in a cache, but the state will + not be applied and hence will not change the compositor output. + The cached state is applied to the sub-surface immediately after + the parent surface's state is applied. This ensures atomic + updates of the parent and all its synchronized sub-surfaces. + Applying the cached state will invalidate the cache, so further + parent surface commits do not (re-)apply old state. + + See wl_subsurface for the recursive effect of this mode. + + + + + + Change the commit behaviour of the sub-surface to desynchronized + mode, also described as independent or freely running mode. + + In desynchronized mode, wl_surface.commit on a sub-surface will + apply the pending state directly, without caching, as happens + normally with a wl_surface. Calling wl_surface.commit on the + parent surface has no effect on the sub-surface's wl_surface + state. This mode allows a sub-surface to be updated on its own. + + If cached state exists when wl_surface.commit is called in + desynchronized mode, the pending state is added to the cached + state, and applied as a whole. This invalidates the cache. + + Note: even if a sub-surface is set to desynchronized, a parent + sub-surface may override it to behave as synchronized. For details, + see wl_subsurface. + + If a surface's parent surface behaves as desynchronized, then + the cached state is applied on set_desync. + + + + + diff --git a/vendor/sdl-3.0.0/wayland-protocols/xdg-activation-v1.xml b/vendor/sdl-3.0.0/wayland-protocols/xdg-activation-v1.xml new file mode 100644 index 0000000..d87e633 --- /dev/null +++ b/vendor/sdl-3.0.0/wayland-protocols/xdg-activation-v1.xml @@ -0,0 +1,186 @@ + + + + + Copyright © 2020 Aleix Pol Gonzalez <aleixpol@kde.org> + Copyright © 2020 Carlos Garnacho <carlosg@gnome.org> + + 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 (including the next + paragraph) 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. + + + + The way for a client to pass focus to another toplevel is as follows. + + The client that intends to activate another toplevel uses the + xdg_activation_v1.get_activation_token request to get an activation token. + This token is then passed to the client to be activated through a separate + band of communication. The client to be activated will then pass the token + it received to the xdg_activation_v1.activate request. The compositor can + then use this token to decide how to react to the activation request. + + The token the activating client gets may be ineffective either already at + the time it receives it, for example if it was not focused, for focus + stealing prevention. The activating client will have no way to discover + the validity of the token, and may still forward it to the to be activated + client. + + The created activation token may optionally get information attached to it + that can be used by the compositor to identify the application that we + intend to activate. This can for example be used to display a visual hint + about what application is being started. + + Warning! The protocol described in this file is currently in the testing + phase. Backward compatible changes may be added together with the + corresponding interface version bump. Backward incompatible changes can + only be done by creating a new major version of the extension. + + + + + A global interface used for informing the compositor about applications + being activated or started, or for applications to request to be + activated. + + + + + Notify the compositor that the xdg_activation object will no longer be + used. + + The child objects created via this interface are unaffected and should + be destroyed separately. + + + + + + Creates an xdg_activation_token_v1 object that will provide + the initiating client with a unique token for this activation. This + token should be offered to the clients to be activated. + + + + + + + + Requests surface activation. It's up to the compositor to display + this information as desired, for example by placing the surface above + the rest. + + The compositor may know who requested this by checking the activation + token and might decide not to follow through with the activation if it's + considered unwanted. + + Compositors can ignore unknown presentation tokens when an invalid + token is passed. + + + + + + + + + An object for setting up a token and receiving a token handle that can + be passed as an activation token to another client. + + The object is created using the xdg_activation_v1.get_activation_token + request. This object should then be populated with the app_id, surface + and serial information and committed. The compositor shall then issue a + done event with the token. In case the request's parameters are invalid, + the compositor will provide an invalid token. + + + + + + + + + Provides information about the seat and serial event that requested the + token. + + Must be sent before commit. This information is optional. + + + + + + + + The requesting client can specify an app_id to associate the token + being created with it. + + Must be sent before commit. This information is optional. + + + + + + + The requesting client can specify a surface to associate the token + being created with it. + + Must be triggered before commit. This information is optional. + + + + + + + Requests an activation token based on the different parameters that + have been offered through set_serial, set_surface and set_app_id. + + + + + + The 'done' event contains the unique token of this activation request + and notifies that the provider is done. + + Applications will typically receive the token through the + XDG_ACTIVATION_TOKEN environment variable as set by its launcher, and + should unset the environment variable right after this request, in + order to avoid propagating it to child processes. + + Applications implementing the D-Bus interface org.freedesktop.Application + should get their token under XDG_ACTIVATION_TOKEN on their platform_data. + + Presentation tokens may be transferred across clients through means not + described in this protocol. + + + + + + + Notify the compositor that the xdg_activation_token_v1 object will no + longer be used. + + + + diff --git a/vendor/sdl-3.0.0/wayland-protocols/xdg-decoration-unstable-v1.xml b/vendor/sdl-3.0.0/wayland-protocols/xdg-decoration-unstable-v1.xml new file mode 100644 index 0000000..378e8ff --- /dev/null +++ b/vendor/sdl-3.0.0/wayland-protocols/xdg-decoration-unstable-v1.xml @@ -0,0 +1,156 @@ + + + + Copyright © 2018 Simon Ser + + 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 (including the next + paragraph) 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. + + + + + This interface allows a compositor to announce support for server-side + decorations. + + A window decoration is a set of window controls as deemed appropriate by + the party managing them, such as user interface components used to move, + resize and change a window's state. + + A client can use this protocol to request being decorated by a supporting + compositor. + + If compositor and client do not negotiate the use of a server-side + decoration using this protocol, clients continue to self-decorate as they + see fit. + + Warning! The protocol described in this file is experimental and + backward incompatible changes may be made. Backward compatible changes + may be added together with the corresponding interface version bump. + Backward incompatible changes are done by bumping the version number in + the protocol and interface names and resetting the interface version. + Once the protocol is to be declared stable, the 'z' prefix and the + version number in the protocol and interface names are removed and the + interface version number is reset. + + + + + Destroy the decoration manager. This doesn't destroy objects created + with the manager. + + + + + + Create a new decoration object associated with the given toplevel. + + Creating an xdg_toplevel_decoration from an xdg_toplevel which has a + buffer attached or committed is a client error, and any attempts by a + client to attach or manipulate a buffer prior to the first + xdg_toplevel_decoration.configure event must also be treated as + errors. + + + + + + + + + The decoration object allows the compositor to toggle server-side window + decorations for a toplevel surface. The client can request to switch to + another mode. + + The xdg_toplevel_decoration object must be destroyed before its + xdg_toplevel. + + + + + + + + + + + Switch back to a mode without any server-side decorations at the next + commit. + + + + + + These values describe window decoration modes. + + + + + + + + Set the toplevel surface decoration mode. This informs the compositor + that the client prefers the provided decoration mode. + + After requesting a decoration mode, the compositor will respond by + emitting a xdg_surface.configure event. The client should then update + its content, drawing it without decorations if the received mode is + server-side decorations. The client must also acknowledge the configure + when committing the new content (see xdg_surface.ack_configure). + + The compositor can decide not to use the client's mode and enforce a + different mode instead. + + Clients whose decoration mode depend on the xdg_toplevel state may send + a set_mode request in response to a xdg_surface.configure event and wait + for the next xdg_surface.configure event to prevent unwanted state. + Such clients are responsible for preventing configure loops and must + make sure not to send multiple successive set_mode requests with the + same decoration mode. + + + + + + + Unset the toplevel surface decoration mode. This informs the compositor + that the client doesn't prefer a particular decoration mode. + + This request has the same semantics as set_mode. + + + + + + The configure event asks the client to change its decoration mode. The + configured state should not be applied immediately. Clients must send an + ack_configure in response to this event. See xdg_surface.configure and + xdg_surface.ack_configure for details. + + A configure event can be sent at any time. The specified mode must be + obeyed by the client. + + + + + diff --git a/vendor/sdl-3.0.0/wayland-protocols/xdg-output-unstable-v1.xml b/vendor/sdl-3.0.0/wayland-protocols/xdg-output-unstable-v1.xml new file mode 100644 index 0000000..9a5b790 --- /dev/null +++ b/vendor/sdl-3.0.0/wayland-protocols/xdg-output-unstable-v1.xml @@ -0,0 +1,220 @@ + + + + + Copyright © 2017 Red Hat Inc. + + 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 (including the next + paragraph) 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. + + + + This protocol aims at describing outputs in a way which is more in line + with the concept of an output on desktop oriented systems. + + Some information are more specific to the concept of an output for + a desktop oriented system and may not make sense in other applications, + such as IVI systems for example. + + Typically, the global compositor space on a desktop system is made of + a contiguous or overlapping set of rectangular regions. + + Some of the information provided in this protocol might be identical + to their counterparts already available from wl_output, in which case + the information provided by this protocol should be preferred to their + equivalent in wl_output. The goal is to move the desktop specific + concepts (such as output location within the global compositor space, + the connector name and types, etc.) out of the core wl_output protocol. + + Warning! The protocol described in this file is experimental and + backward incompatible changes may be made. Backward compatible + changes may be added together with the corresponding interface + version bump. + Backward incompatible changes are done by bumping the version + number in the protocol and interface names and resetting the + interface version. Once the protocol is to be declared stable, + the 'z' prefix and the version number in the protocol and + interface names are removed and the interface version number is + reset. + + + + + A global factory interface for xdg_output objects. + + + + + Using this request a client can tell the server that it is not + going to use the xdg_output_manager object anymore. + + Any objects already created through this instance are not affected. + + + + + + This creates a new xdg_output object for the given wl_output. + + + + + + + + + An xdg_output describes part of the compositor geometry. + + This typically corresponds to a monitor that displays part of the + compositor space. + + For objects version 3 onwards, after all xdg_output properties have been + sent (when the object is created and when properties are updated), a + wl_output.done event is sent. This allows changes to the output + properties to be seen as atomic, even if they happen via multiple events. + + + + + Using this request a client can tell the server that it is not + going to use the xdg_output object anymore. + + + + + + The position event describes the location of the wl_output within + the global compositor space. + + The logical_position event is sent after creating an xdg_output + (see xdg_output_manager.get_xdg_output) and whenever the location + of the output changes within the global compositor space. + + + + + + + + The logical_size event describes the size of the output in the + global compositor space. + + For example, a surface without any buffer scale, transformation + nor rotation set, with the size matching the logical_size will + have the same size as the corresponding output when displayed. + + Most regular Wayland clients should not pay attention to the + logical size and would rather rely on xdg_shell interfaces. + + Some clients such as Xwayland, however, need this to configure + their surfaces in the global compositor space as the compositor + may apply a different scale from what is advertised by the output + scaling property (to achieve fractional scaling, for example). + + For example, for a wl_output mode 3840×2160 and a scale factor 2: + + - A compositor not scaling the surface buffers will advertise a + logical size of 3840×2160, + + - A compositor automatically scaling the surface buffers will + advertise a logical size of 1920×1080, + + - A compositor using a fractional scale of 1.5 will advertise a + logical size of 2560×1440. + + For example, for a wl_output mode 1920×1080 and a 90 degree rotation, + the compositor will advertise a logical size of 1080x1920. + + The logical_size event is sent after creating an xdg_output + (see xdg_output_manager.get_xdg_output) and whenever the logical + size of the output changes, either as a result of a change in the + applied scale or because of a change in the corresponding output + mode(see wl_output.mode) or transform (see wl_output.transform). + + + + + + + + This event is sent after all other properties of an xdg_output + have been sent. + + This allows changes to the xdg_output properties to be seen as + atomic, even if they happen via multiple events. + + For objects version 3 onwards, this event is deprecated. Compositors + are not required to send it anymore and must send wl_output.done + instead. + + + + + + + + Many compositors will assign names to their outputs, show them to the + user, allow them to be configured by name, etc. The client may wish to + know this name as well to offer the user similar behaviors. + + The naming convention is compositor defined, but limited to + alphanumeric characters and dashes (-). Each name is unique among all + wl_output globals, but if a wl_output global is destroyed the same name + may be reused later. The names will also remain consistent across + sessions with the same hardware and software configuration. + + Examples of names include 'HDMI-A-1', 'WL-1', 'X11-1', etc. However, do + not assume that the name is a reflection of an underlying DRM + connector, X11 connection, etc. + + The name event is sent after creating an xdg_output (see + xdg_output_manager.get_xdg_output). This event is only sent once per + xdg_output, and the name does not change over the lifetime of the + wl_output global. + + + + + + + Many compositors can produce human-readable descriptions of their + outputs. The client may wish to know this description as well, to + communicate the user for various purposes. + + The description is a UTF-8 string with no convention defined for its + contents. Examples might include 'Foocorp 11" Display' or 'Virtual X11 + output via :1'. + + The description event is sent after creating an xdg_output (see + xdg_output_manager.get_xdg_output) and whenever the description + changes. The description is optional, and may not be sent at all. + + For objects of version 2 and lower, this event is only sent once per + xdg_output, and the description does not change over the lifetime of + the wl_output global. + + + + + + diff --git a/vendor/sdl-3.0.0/wayland-protocols/xdg-shell.xml b/vendor/sdl-3.0.0/wayland-protocols/xdg-shell.xml new file mode 100644 index 0000000..777eaa7 --- /dev/null +++ b/vendor/sdl-3.0.0/wayland-protocols/xdg-shell.xml @@ -0,0 +1,1370 @@ + + + + + Copyright © 2008-2013 Kristian Høgsberg + Copyright © 2013 Rafael Antognolli + Copyright © 2013 Jasper St. Pierre + Copyright © 2010-2013 Intel Corporation + Copyright © 2015-2017 Samsung Electronics Co., Ltd + Copyright © 2015-2017 Red Hat Inc. + + 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 (including the next + paragraph) 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. + + + + + The xdg_wm_base interface is exposed as a global object enabling clients + to turn their wl_surfaces into windows in a desktop environment. It + defines the basic functionality needed for clients and the compositor to + create windows that can be dragged, resized, maximized, etc, as well as + creating transient windows such as popup menus. + + + + + + + + + + + + + + + Destroy this xdg_wm_base object. + + Destroying a bound xdg_wm_base object while there are surfaces + still alive created by this xdg_wm_base object instance is illegal + and will result in a defunct_surfaces error. + + + + + + Create a positioner object. A positioner object is used to position + surfaces relative to some parent surface. See the interface description + and xdg_surface.get_popup for details. + + + + + + + This creates an xdg_surface for the given surface. While xdg_surface + itself is not a role, the corresponding surface may only be assigned + a role extending xdg_surface, such as xdg_toplevel or xdg_popup. It is + illegal to create an xdg_surface for a wl_surface which already has an + assigned role and this will result in a role error. + + This creates an xdg_surface for the given surface. An xdg_surface is + used as basis to define a role to a given surface, such as xdg_toplevel + or xdg_popup. It also manages functionality shared between xdg_surface + based surface roles. + + See the documentation of xdg_surface for more details about what an + xdg_surface is and how it is used. + + + + + + + + A client must respond to a ping event with a pong request or + the client may be deemed unresponsive. See xdg_wm_base.ping + and xdg_wm_base.error.unresponsive. + + + + + + + The ping event asks the client if it's still alive. Pass the + serial specified in the event back to the compositor by sending + a "pong" request back with the specified serial. See xdg_wm_base.pong. + + Compositors can use this to determine if the client is still + alive. It's unspecified what will happen if the client doesn't + respond to the ping request, or in what timeframe. Clients should + try to respond in a reasonable amount of time. The “unresponsive” + error is provided for compositors that wish to disconnect unresponsive + clients. + + A compositor is free to ping in any way it wants, but a client must + always respond to any xdg_wm_base object it created. + + + + + + + + The xdg_positioner provides a collection of rules for the placement of a + child surface relative to a parent surface. Rules can be defined to ensure + the child surface remains within the visible area's borders, and to + specify how the child surface changes its position, such as sliding along + an axis, or flipping around a rectangle. These positioner-created rules are + constrained by the requirement that a child surface must intersect with or + be at least partially adjacent to its parent surface. + + See the various requests for details about possible rules. + + At the time of the request, the compositor makes a copy of the rules + specified by the xdg_positioner. Thus, after the request is complete the + xdg_positioner object can be destroyed or reused; further changes to the + object will have no effect on previous usages. + + For an xdg_positioner object to be considered complete, it must have a + non-zero size set by set_size, and a non-zero anchor rectangle set by + set_anchor_rect. Passing an incomplete xdg_positioner object when + positioning a surface raises an invalid_positioner error. + + + + + + + + + Notify the compositor that the xdg_positioner will no longer be used. + + + + + + Set the size of the surface that is to be positioned with the positioner + object. The size is in surface-local coordinates and corresponds to the + window geometry. See xdg_surface.set_window_geometry. + + If a zero or negative size is set the invalid_input error is raised. + + + + + + + + Specify the anchor rectangle within the parent surface that the child + surface will be placed relative to. The rectangle is relative to the + window geometry as defined by xdg_surface.set_window_geometry of the + parent surface. + + When the xdg_positioner object is used to position a child surface, the + anchor rectangle may not extend outside the window geometry of the + positioned child's parent surface. + + If a negative size is set the invalid_input error is raised. + + + + + + + + + + + + + + + + + + + + + + Defines the anchor point for the anchor rectangle. The specified anchor + is used derive an anchor point that the child surface will be + positioned relative to. If a corner anchor is set (e.g. 'top_left' or + 'bottom_right'), the anchor point will be at the specified corner; + otherwise, the derived anchor point will be centered on the specified + edge, or in the center of the anchor rectangle if no edge is specified. + + + + + + + + + + + + + + + + + + + Defines in what direction a surface should be positioned, relative to + the anchor point of the parent surface. If a corner gravity is + specified (e.g. 'bottom_right' or 'top_left'), then the child surface + will be placed towards the specified gravity; otherwise, the child + surface will be centered over the anchor point on any axis that had no + gravity specified. If the gravity is not in the ‘gravity’ enum, an + invalid_input error is raised. + + + + + + + The constraint adjustment value define ways the compositor will adjust + the position of the surface, if the unadjusted position would result + in the surface being partly constrained. + + Whether a surface is considered 'constrained' is left to the compositor + to determine. For example, the surface may be partly outside the + compositor's defined 'work area', thus necessitating the child surface's + position be adjusted until it is entirely inside the work area. + + The adjustments can be combined, according to a defined precedence: 1) + Flip, 2) Slide, 3) Resize. + + + + Don't alter the surface position even if it is constrained on some + axis, for example partially outside the edge of an output. + + + + + Slide the surface along the x axis until it is no longer constrained. + + First try to slide towards the direction of the gravity on the x axis + until either the edge in the opposite direction of the gravity is + unconstrained or the edge in the direction of the gravity is + constrained. + + Then try to slide towards the opposite direction of the gravity on the + x axis until either the edge in the direction of the gravity is + unconstrained or the edge in the opposite direction of the gravity is + constrained. + + + + + Slide the surface along the y axis until it is no longer constrained. + + First try to slide towards the direction of the gravity on the y axis + until either the edge in the opposite direction of the gravity is + unconstrained or the edge in the direction of the gravity is + constrained. + + Then try to slide towards the opposite direction of the gravity on the + y axis until either the edge in the direction of the gravity is + unconstrained or the edge in the opposite direction of the gravity is + constrained. + + + + + Invert the anchor and gravity on the x axis if the surface is + constrained on the x axis. For example, if the left edge of the + surface is constrained, the gravity is 'left' and the anchor is + 'left', change the gravity to 'right' and the anchor to 'right'. + + If the adjusted position also ends up being constrained, the resulting + position of the flip_x adjustment will be the one before the + adjustment. + + + + + Invert the anchor and gravity on the y axis if the surface is + constrained on the y axis. For example, if the bottom edge of the + surface is constrained, the gravity is 'bottom' and the anchor is + 'bottom', change the gravity to 'top' and the anchor to 'top'. + + The adjusted position is calculated given the original anchor + rectangle and offset, but with the new flipped anchor and gravity + values. + + If the adjusted position also ends up being constrained, the resulting + position of the flip_y adjustment will be the one before the + adjustment. + + + + + Resize the surface horizontally so that it is completely + unconstrained. + + + + + Resize the surface vertically so that it is completely unconstrained. + + + + + + + Specify how the window should be positioned if the originally intended + position caused the surface to be constrained, meaning at least + partially outside positioning boundaries set by the compositor. The + adjustment is set by constructing a bitmask describing the adjustment to + be made when the surface is constrained on that axis. + + If no bit for one axis is set, the compositor will assume that the child + surface should not change its position on that axis when constrained. + + If more than one bit for one axis is set, the order of how adjustments + are applied is specified in the corresponding adjustment descriptions. + + The default adjustment is none. + + + + + + + Specify the surface position offset relative to the position of the + anchor on the anchor rectangle and the anchor on the surface. For + example if the anchor of the anchor rectangle is at (x, y), the surface + has the gravity bottom|right, and the offset is (ox, oy), the calculated + surface position will be (x + ox, y + oy). The offset position of the + surface is the one used for constraint testing. See + set_constraint_adjustment. + + An example use case is placing a popup menu on top of a user interface + element, while aligning the user interface element of the parent surface + with some user interface element placed somewhere in the popup surface. + + + + + + + + + + When set reactive, the surface is reconstrained if the conditions used + for constraining changed, e.g. the parent window moved. + + If the conditions changed and the popup was reconstrained, an + xdg_popup.configure event is sent with updated geometry, followed by an + xdg_surface.configure event. + + + + + + Set the parent window geometry the compositor should use when + positioning the popup. The compositor may use this information to + determine the future state the popup should be constrained using. If + this doesn't match the dimension of the parent the popup is eventually + positioned against, the behavior is undefined. + + The arguments are given in the surface-local coordinate space. + + + + + + + + Set the serial of an xdg_surface.configure event this positioner will be + used in response to. The compositor may use this information together + with set_parent_size to determine what future state the popup should be + constrained using. + + + + + + + + An interface that may be implemented by a wl_surface, for + implementations that provide a desktop-style user interface. + + It provides a base set of functionality required to construct user + interface elements requiring management by the compositor, such as + toplevel windows, menus, etc. The types of functionality are split into + xdg_surface roles. + + Creating an xdg_surface does not set the role for a wl_surface. In order + to map an xdg_surface, the client must create a role-specific object + using, e.g., get_toplevel, get_popup. The wl_surface for any given + xdg_surface can have at most one role, and may not be assigned any role + not based on xdg_surface. + + A role must be assigned before any other requests are made to the + xdg_surface object. + + The client must call wl_surface.commit on the corresponding wl_surface + for the xdg_surface state to take effect. + + Creating an xdg_surface from a wl_surface which has a buffer attached or + committed is a client error, and any attempts by a client to attach or + manipulate a buffer prior to the first xdg_surface.configure call must + also be treated as errors. + + After creating a role-specific object and setting it up, the client must + perform an initial commit without any buffer attached. The compositor + will reply with initial wl_surface state such as + wl_surface.preferred_buffer_scale followed by an xdg_surface.configure + event. The client must acknowledge it and is then allowed to attach a + buffer to map the surface. + + Mapping an xdg_surface-based role surface is defined as making it + possible for the surface to be shown by the compositor. Note that + a mapped surface is not guaranteed to be visible once it is mapped. + + For an xdg_surface to be mapped by the compositor, the following + conditions must be met: + (1) the client has assigned an xdg_surface-based role to the surface + (2) the client has set and committed the xdg_surface state and the + role-dependent state to the surface + (3) the client has committed a buffer to the surface + + A newly-unmapped surface is considered to have met condition (1) out + of the 3 required conditions for mapping a surface if its role surface + has not been destroyed, i.e. the client must perform the initial commit + again before attaching a buffer. + + + + + + + + + + + + + + Destroy the xdg_surface object. An xdg_surface must only be destroyed + after its role object has been destroyed, otherwise + a defunct_role_object error is raised. + + + + + + This creates an xdg_toplevel object for the given xdg_surface and gives + the associated wl_surface the xdg_toplevel role. + + See the documentation of xdg_toplevel for more details about what an + xdg_toplevel is and how it is used. + + + + + + + This creates an xdg_popup object for the given xdg_surface and gives + the associated wl_surface the xdg_popup role. + + If null is passed as a parent, a parent surface must be specified using + some other protocol, before committing the initial state. + + See the documentation of xdg_popup for more details about what an + xdg_popup is and how it is used. + + + + + + + + + The window geometry of a surface is its "visible bounds" from the + user's perspective. Client-side decorations often have invisible + portions like drop-shadows which should be ignored for the + purposes of aligning, placing and constraining windows. + + The window geometry is double buffered, and will be applied at the + time wl_surface.commit of the corresponding wl_surface is called. + + When maintaining a position, the compositor should treat the (x, y) + coordinate of the window geometry as the top left corner of the window. + A client changing the (x, y) window geometry coordinate should in + general not alter the position of the window. + + Once the window geometry of the surface is set, it is not possible to + unset it, and it will remain the same until set_window_geometry is + called again, even if a new subsurface or buffer is attached. + + If never set, the value is the full bounds of the surface, + including any subsurfaces. This updates dynamically on every + commit. This unset is meant for extremely simple clients. + + The arguments are given in the surface-local coordinate space of + the wl_surface associated with this xdg_surface, and may extend outside + of the wl_surface itself to mark parts of the subsurface tree as part of + the window geometry. + + When applied, the effective window geometry will be the set window + geometry clamped to the bounding rectangle of the combined + geometry of the surface of the xdg_surface and the associated + subsurfaces. + + The effective geometry will not be recalculated unless a new call to + set_window_geometry is done and the new pending surface state is + subsequently applied. + + The width and height of the effective window geometry must be + greater than zero. Setting an invalid size will raise an + invalid_size error. + + + + + + + + + + When a configure event is received, if a client commits the + surface in response to the configure event, then the client + must make an ack_configure request sometime before the commit + request, passing along the serial of the configure event. + + For instance, for toplevel surfaces the compositor might use this + information to move a surface to the top left only when the client has + drawn itself for the maximized or fullscreen state. + + If the client receives multiple configure events before it + can respond to one, it only has to ack the last configure event. + Acking a configure event that was never sent raises an invalid_serial + error. + + A client is not required to commit immediately after sending + an ack_configure request - it may even ack_configure several times + before its next surface commit. + + A client may send multiple ack_configure requests before committing, but + only the last request sent before a commit indicates which configure + event the client really is responding to. + + Sending an ack_configure request consumes the serial number sent with + the request, as well as serial numbers sent by all configure events + sent on this xdg_surface prior to the configure event referenced by + the committed serial. + + It is an error to issue multiple ack_configure requests referencing a + serial from the same configure event, or to issue an ack_configure + request referencing a serial from a configure event issued before the + event identified by the last ack_configure request for the same + xdg_surface. Doing so will raise an invalid_serial error. + + + + + + + The configure event marks the end of a configure sequence. A configure + sequence is a set of one or more events configuring the state of the + xdg_surface, including the final xdg_surface.configure event. + + Where applicable, xdg_surface surface roles will during a configure + sequence extend this event as a latched state sent as events before the + xdg_surface.configure event. Such events should be considered to make up + a set of atomically applied configuration states, where the + xdg_surface.configure commits the accumulated state. + + Clients should arrange their surface for the new states, and then send + an ack_configure request with the serial sent in this configure event at + some point before committing the new surface. + + If the client receives multiple configure events before it can respond + to one, it is free to discard all but the last event it received. + + + + + + + + + This interface defines an xdg_surface role which allows a surface to, + among other things, set window-like properties such as maximize, + fullscreen, and minimize, set application-specific metadata like title and + id, and well as trigger user interactive operations such as interactive + resize and move. + + Unmapping an xdg_toplevel means that the surface cannot be shown + by the compositor until it is explicitly mapped again. + All active operations (e.g., move, resize) are canceled and all + attributes (e.g. title, state, stacking, ...) are discarded for + an xdg_toplevel surface when it is unmapped. The xdg_toplevel returns to + the state it had right after xdg_surface.get_toplevel. The client + can re-map the toplevel by perfoming a commit without any buffer + attached, waiting for a configure event and handling it as usual (see + xdg_surface description). + + Attaching a null buffer to a toplevel unmaps the surface. + + + + + This request destroys the role surface and unmaps the surface; + see "Unmapping" behavior in interface section for details. + + + + + + + + + + + + Set the "parent" of this surface. This surface should be stacked + above the parent surface and all other ancestor surfaces. + + Parent surfaces should be set on dialogs, toolboxes, or other + "auxiliary" surfaces, so that the parent is raised when the dialog + is raised. + + Setting a null parent for a child surface unsets its parent. Setting + a null parent for a surface which currently has no parent is a no-op. + + Only mapped surfaces can have child surfaces. Setting a parent which + is not mapped is equivalent to setting a null parent. If a surface + becomes unmapped, its children's parent is set to the parent of + the now-unmapped surface. If the now-unmapped surface has no parent, + its children's parent is unset. If the now-unmapped surface becomes + mapped again, its parent-child relationship is not restored. + + The parent toplevel must not be one of the child toplevel's + descendants, and the parent must be different from the child toplevel, + otherwise the invalid_parent protocol error is raised. + + + + + + + Set a short title for the surface. + + This string may be used to identify the surface in a task bar, + window list, or other user interface elements provided by the + compositor. + + The string must be encoded in UTF-8. + + + + + + + Set an application identifier for the surface. + + The app ID identifies the general class of applications to which + the surface belongs. The compositor can use this to group multiple + surfaces together, or to determine how to launch a new application. + + For D-Bus activatable applications, the app ID is used as the D-Bus + service name. + + The compositor shell will try to group application surfaces together + by their app ID. As a best practice, it is suggested to select app + ID's that match the basename of the application's .desktop file. + For example, "org.freedesktop.FooViewer" where the .desktop file is + "org.freedesktop.FooViewer.desktop". + + Like other properties, a set_app_id request can be sent after the + xdg_toplevel has been mapped to update the property. + + See the desktop-entry specification [0] for more details on + application identifiers and how they relate to well-known D-Bus + names and .desktop files. + + [0] https://standards.freedesktop.org/desktop-entry-spec/ + + + + + + + Clients implementing client-side decorations might want to show + a context menu when right-clicking on the decorations, giving the + user a menu that they can use to maximize or minimize the window. + + This request asks the compositor to pop up such a window menu at + the given position, relative to the local surface coordinates of + the parent surface. There are no guarantees as to what menu items + the window menu contains, or even if a window menu will be drawn + at all. + + This request must be used in response to some sort of user action + like a button press, key press, or touch down event. + + + + + + + + + + Start an interactive, user-driven move of the surface. + + This request must be used in response to some sort of user action + like a button press, key press, or touch down event. The passed + serial is used to determine the type of interactive move (touch, + pointer, etc). + + The server may ignore move requests depending on the state of + the surface (e.g. fullscreen or maximized), or if the passed serial + is no longer valid. + + If triggered, the surface will lose the focus of the device + (wl_pointer, wl_touch, etc) used for the move. It is up to the + compositor to visually indicate that the move is taking place, such as + updating a pointer cursor, during the move. There is no guarantee + that the device focus will return when the move is completed. + + + + + + + + These values are used to indicate which edge of a surface + is being dragged in a resize operation. + + + + + + + + + + + + + + + Start a user-driven, interactive resize of the surface. + + This request must be used in response to some sort of user action + like a button press, key press, or touch down event. The passed + serial is used to determine the type of interactive resize (touch, + pointer, etc). + + The server may ignore resize requests depending on the state of + the surface (e.g. fullscreen or maximized). + + If triggered, the client will receive configure events with the + "resize" state enum value and the expected sizes. See the "resize" + enum value for more details about what is required. The client + must also acknowledge configure events using "ack_configure". After + the resize is completed, the client will receive another "configure" + event without the resize state. + + If triggered, the surface also will lose the focus of the device + (wl_pointer, wl_touch, etc) used for the resize. It is up to the + compositor to visually indicate that the resize is taking place, + such as updating a pointer cursor, during the resize. There is no + guarantee that the device focus will return when the resize is + completed. + + The edges parameter specifies how the surface should be resized, and + is one of the values of the resize_edge enum. Values not matching + a variant of the enum will cause the invalid_resize_edge protocol error. + The compositor may use this information to update the surface position + for example when dragging the top left corner. The compositor may also + use this information to adapt its behavior, e.g. choose an appropriate + cursor image. + + + + + + + + + The different state values used on the surface. This is designed for + state values like maximized, fullscreen. It is paired with the + configure event to ensure that both the client and the compositor + setting the state can be synchronized. + + States set in this way are double-buffered. They will get applied on + the next commit. + + + + The surface is maximized. The window geometry specified in the configure + event must be obeyed by the client, or the xdg_wm_base.invalid_surface_state + error is raised. + + The client should draw without shadow or other + decoration outside of the window geometry. + + + + + The surface is fullscreen. The window geometry specified in the + configure event is a maximum; the client cannot resize beyond it. For + a surface to cover the whole fullscreened area, the geometry + dimensions must be obeyed by the client. For more details, see + xdg_toplevel.set_fullscreen. + + + + + The surface is being resized. The window geometry specified in the + configure event is a maximum; the client cannot resize beyond it. + Clients that have aspect ratio or cell sizing configuration can use + a smaller size, however. + + + + + Client window decorations should be painted as if the window is + active. Do not assume this means that the window actually has + keyboard or pointer focus. + + + + + The window is currently in a tiled layout and the left edge is + considered to be adjacent to another part of the tiling grid. + + + + + The window is currently in a tiled layout and the right edge is + considered to be adjacent to another part of the tiling grid. + + + + + The window is currently in a tiled layout and the top edge is + considered to be adjacent to another part of the tiling grid. + + + + + The window is currently in a tiled layout and the bottom edge is + considered to be adjacent to another part of the tiling grid. + + + + + The surface is currently not ordinarily being repainted; for + example because its content is occluded by another window, or its + outputs are switched off due to screen locking. + + + + + + + Set a maximum size for the window. + + The client can specify a maximum size so that the compositor does + not try to configure the window beyond this size. + + The width and height arguments are in window geometry coordinates. + See xdg_surface.set_window_geometry. + + Values set in this way are double-buffered. They will get applied + on the next commit. + + The compositor can use this information to allow or disallow + different states like maximize or fullscreen and draw accurate + animations. + + Similarly, a tiling window manager may use this information to + place and resize client windows in a more effective way. + + The client should not rely on the compositor to obey the maximum + size. The compositor may decide to ignore the values set by the + client and request a larger size. + + If never set, or a value of zero in the request, means that the + client has no expected maximum size in the given dimension. + As a result, a client wishing to reset the maximum size + to an unspecified state can use zero for width and height in the + request. + + Requesting a maximum size to be smaller than the minimum size of + a surface is illegal and will result in an invalid_size error. + + The width and height must be greater than or equal to zero. Using + strictly negative values for width or height will result in a + invalid_size error. + + + + + + + + Set a minimum size for the window. + + The client can specify a minimum size so that the compositor does + not try to configure the window below this size. + + The width and height arguments are in window geometry coordinates. + See xdg_surface.set_window_geometry. + + Values set in this way are double-buffered. They will get applied + on the next commit. + + The compositor can use this information to allow or disallow + different states like maximize or fullscreen and draw accurate + animations. + + Similarly, a tiling window manager may use this information to + place and resize client windows in a more effective way. + + The client should not rely on the compositor to obey the minimum + size. The compositor may decide to ignore the values set by the + client and request a smaller size. + + If never set, or a value of zero in the request, means that the + client has no expected minimum size in the given dimension. + As a result, a client wishing to reset the minimum size + to an unspecified state can use zero for width and height in the + request. + + Requesting a minimum size to be larger than the maximum size of + a surface is illegal and will result in an invalid_size error. + + The width and height must be greater than or equal to zero. Using + strictly negative values for width and height will result in a + invalid_size error. + + + + + + + + Maximize the surface. + + After requesting that the surface should be maximized, the compositor + will respond by emitting a configure event. Whether this configure + actually sets the window maximized is subject to compositor policies. + The client must then update its content, drawing in the configured + state. The client must also acknowledge the configure when committing + the new content (see ack_configure). + + It is up to the compositor to decide how and where to maximize the + surface, for example which output and what region of the screen should + be used. + + If the surface was already maximized, the compositor will still emit + a configure event with the "maximized" state. + + If the surface is in a fullscreen state, this request has no direct + effect. It may alter the state the surface is returned to when + unmaximized unless overridden by the compositor. + + + + + + Unmaximize the surface. + + After requesting that the surface should be unmaximized, the compositor + will respond by emitting a configure event. Whether this actually + un-maximizes the window is subject to compositor policies. + If available and applicable, the compositor will include the window + geometry dimensions the window had prior to being maximized in the + configure event. The client must then update its content, drawing it in + the configured state. The client must also acknowledge the configure + when committing the new content (see ack_configure). + + It is up to the compositor to position the surface after it was + unmaximized; usually the position the surface had before maximizing, if + applicable. + + If the surface was already not maximized, the compositor will still + emit a configure event without the "maximized" state. + + If the surface is in a fullscreen state, this request has no direct + effect. It may alter the state the surface is returned to when + unmaximized unless overridden by the compositor. + + + + + + Make the surface fullscreen. + + After requesting that the surface should be fullscreened, the + compositor will respond by emitting a configure event. Whether the + client is actually put into a fullscreen state is subject to compositor + policies. The client must also acknowledge the configure when + committing the new content (see ack_configure). + + The output passed by the request indicates the client's preference as + to which display it should be set fullscreen on. If this value is NULL, + it's up to the compositor to choose which display will be used to map + this surface. + + If the surface doesn't cover the whole output, the compositor will + position the surface in the center of the output and compensate with + with border fill covering the rest of the output. The content of the + border fill is undefined, but should be assumed to be in some way that + attempts to blend into the surrounding area (e.g. solid black). + + If the fullscreened surface is not opaque, the compositor must make + sure that other screen content not part of the same surface tree (made + up of subsurfaces, popups or similarly coupled surfaces) are not + visible below the fullscreened surface. + + + + + + + Make the surface no longer fullscreen. + + After requesting that the surface should be unfullscreened, the + compositor will respond by emitting a configure event. + Whether this actually removes the fullscreen state of the client is + subject to compositor policies. + + Making a surface unfullscreen sets states for the surface based on the following: + * the state(s) it may have had before becoming fullscreen + * any state(s) decided by the compositor + * any state(s) requested by the client while the surface was fullscreen + + The compositor may include the previous window geometry dimensions in + the configure event, if applicable. + + The client must also acknowledge the configure when committing the new + content (see ack_configure). + + + + + + Request that the compositor minimize your surface. There is no + way to know if the surface is currently minimized, nor is there + any way to unset minimization on this surface. + + If you are looking to throttle redrawing when minimized, please + instead use the wl_surface.frame event for this, as this will + also work with live previews on windows in Alt-Tab, Expose or + similar compositor features. + + + + + + This configure event asks the client to resize its toplevel surface or + to change its state. The configured state should not be applied + immediately. See xdg_surface.configure for details. + + The width and height arguments specify a hint to the window + about how its surface should be resized in window geometry + coordinates. See set_window_geometry. + + If the width or height arguments are zero, it means the client + should decide its own window dimension. This may happen when the + compositor needs to configure the state of the surface but doesn't + have any information about any previous or expected dimension. + + The states listed in the event specify how the width/height + arguments should be interpreted, and possibly how it should be + drawn. + + Clients must send an ack_configure in response to this event. See + xdg_surface.configure and xdg_surface.ack_configure for details. + + + + + + + + + The close event is sent by the compositor when the user + wants the surface to be closed. This should be equivalent to + the user clicking the close button in client-side decorations, + if your application has any. + + This is only a request that the user intends to close the + window. The client may choose to ignore this request, or show + a dialog to ask the user to save their data, etc. + + + + + + + + The configure_bounds event may be sent prior to a xdg_toplevel.configure + event to communicate the bounds a window geometry size is recommended + to constrain to. + + The passed width and height are in surface coordinate space. If width + and height are 0, it means bounds is unknown and equivalent to as if no + configure_bounds event was ever sent for this surface. + + The bounds can for example correspond to the size of a monitor excluding + any panels or other shell components, so that a surface isn't created in + a way that it cannot fit. + + The bounds may change at any point, and in such a case, a new + xdg_toplevel.configure_bounds will be sent, followed by + xdg_toplevel.configure and xdg_surface.configure. + + + + + + + + + + + + + + + + + This event advertises the capabilities supported by the compositor. If + a capability isn't supported, clients should hide or disable the UI + elements that expose this functionality. For instance, if the + compositor doesn't advertise support for minimized toplevels, a button + triggering the set_minimized request should not be displayed. + + The compositor will ignore requests it doesn't support. For instance, + a compositor which doesn't advertise support for minimized will ignore + set_minimized requests. + + Compositors must send this event once before the first + xdg_surface.configure event. When the capabilities change, compositors + must send this event again and then send an xdg_surface.configure + event. + + The configured state should not be applied immediately. See + xdg_surface.configure for details. + + The capabilities are sent as an array of 32-bit unsigned integers in + native endianness. + + + + + + + + A popup surface is a short-lived, temporary surface. It can be used to + implement for example menus, popovers, tooltips and other similar user + interface concepts. + + A popup can be made to take an explicit grab. See xdg_popup.grab for + details. + + When the popup is dismissed, a popup_done event will be sent out, and at + the same time the surface will be unmapped. See the xdg_popup.popup_done + event for details. + + Explicitly destroying the xdg_popup object will also dismiss the popup and + unmap the surface. Clients that want to dismiss the popup when another + surface of their own is clicked should dismiss the popup using the destroy + request. + + A newly created xdg_popup will be stacked on top of all previously created + xdg_popup surfaces associated with the same xdg_toplevel. + + The parent of an xdg_popup must be mapped (see the xdg_surface + description) before the xdg_popup itself. + + The client must call wl_surface.commit on the corresponding wl_surface + for the xdg_popup state to take effect. + + + + + + + + + This destroys the popup. Explicitly destroying the xdg_popup + object will also dismiss the popup, and unmap the surface. + + If this xdg_popup is not the "topmost" popup, the + xdg_wm_base.not_the_topmost_popup protocol error will be sent. + + + + + + This request makes the created popup take an explicit grab. An explicit + grab will be dismissed when the user dismisses the popup, or when the + client destroys the xdg_popup. This can be done by the user clicking + outside the surface, using the keyboard, or even locking the screen + through closing the lid or a timeout. + + If the compositor denies the grab, the popup will be immediately + dismissed. + + This request must be used in response to some sort of user action like a + button press, key press, or touch down event. The serial number of the + event should be passed as 'serial'. + + The parent of a grabbing popup must either be an xdg_toplevel surface or + another xdg_popup with an explicit grab. If the parent is another + xdg_popup it means that the popups are nested, with this popup now being + the topmost popup. + + Nested popups must be destroyed in the reverse order they were created + in, e.g. the only popup you are allowed to destroy at all times is the + topmost one. + + When compositors choose to dismiss a popup, they may dismiss every + nested grabbing popup as well. When a compositor dismisses popups, it + will follow the same dismissing order as required from the client. + + If the topmost grabbing popup is destroyed, the grab will be returned to + the parent of the popup, if that parent previously had an explicit grab. + + If the parent is a grabbing popup which has already been dismissed, this + popup will be immediately dismissed. If the parent is a popup that did + not take an explicit grab, an error will be raised. + + During a popup grab, the client owning the grab will receive pointer + and touch events for all their surfaces as normal (similar to an + "owner-events" grab in X11 parlance), while the top most grabbing popup + will always have keyboard focus. + + + + + + + + This event asks the popup surface to configure itself given the + configuration. The configured state should not be applied immediately. + See xdg_surface.configure for details. + + The x and y arguments represent the position the popup was placed at + given the xdg_positioner rule, relative to the upper left corner of the + window geometry of the parent surface. + + For version 2 or older, the configure event for an xdg_popup is only + ever sent once for the initial configuration. Starting with version 3, + it may be sent again if the popup is setup with an xdg_positioner with + set_reactive requested, or in response to xdg_popup.reposition requests. + + + + + + + + + + The popup_done event is sent out when a popup is dismissed by the + compositor. The client should destroy the xdg_popup object at this + point. + + + + + + + + Reposition an already-mapped popup. The popup will be placed given the + details in the passed xdg_positioner object, and a + xdg_popup.repositioned followed by xdg_popup.configure and + xdg_surface.configure will be emitted in response. Any parameters set + by the previous positioner will be discarded. + + The passed token will be sent in the corresponding + xdg_popup.repositioned event. The new popup position will not take + effect until the corresponding configure event is acknowledged by the + client. See xdg_popup.repositioned for details. The token itself is + opaque, and has no other special meaning. + + If multiple reposition requests are sent, the compositor may skip all + but the last one. + + If the popup is repositioned in response to a configure event for its + parent, the client should send an xdg_positioner.set_parent_configure + and possibly an xdg_positioner.set_parent_size request to allow the + compositor to properly constrain the popup. + + If the popup is repositioned together with a parent that is being + resized, but not in response to a configure event, the client should + send an xdg_positioner.set_parent_size request. + + + + + + + + The repositioned event is sent as part of a popup configuration + sequence, together with xdg_popup.configure and lastly + xdg_surface.configure to notify the completion of a reposition request. + + The repositioned event is to notify about the completion of a + xdg_popup.reposition request. The token argument is the token passed + in the xdg_popup.reposition request. + + Immediately after this event is emitted, xdg_popup.configure and + xdg_surface.configure will be sent with the updated size and position, + as well as a new configure serial. + + The client should optionally update the content of the popup, but must + acknowledge the new popup configuration for the new position to take + effect. See xdg_surface.ack_configure for details. + + + + + +

+ + + + + + + + +
+ + + + + + + +
Latest Release: 2.2.0

GLEW Logo

+ + + + + + + + + + + + + +
Download
Usage
Building
Installation
Source Generation
Change Log

GitHub
Issues
Pull Requests

SourceForge Page
+

+
+ + + + +
Last Update: 03-15-20
+ OpenGL Logo
+ GitHub Logo
+ Travis Logo
+ SourceForge Logo +
+
+
+ +

The OpenGL Extension Wrangler Library

+ + + + diff --git a/vendor/glew-cmake-2.2.0/auto/src/khronos_license.h b/vendor/glew-cmake-2.2.0/auto/src/khronos_license.h new file mode 100644 index 0000000..420cd72 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/khronos_license.h @@ -0,0 +1,23 @@ +/* +** Copyright (c) 2007 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. +*/ + diff --git a/vendor/glew-cmake-2.2.0/auto/src/mesa_license.h b/vendor/glew-cmake-2.2.0/auto/src/mesa_license.h new file mode 100644 index 0000000..3350cca --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/mesa_license.h @@ -0,0 +1,24 @@ +/* + * Mesa 3-D graphics library + * Version: 7.0 + * + * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + * + * 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 + * BRIAN PAUL 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/vendor/glew-cmake-2.2.0/auto/src/visualinfo.rc b/vendor/glew-cmake-2.2.0/auto/src/visualinfo.rc new file mode 100644 index 0000000..aefb05f --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/visualinfo.rc @@ -0,0 +1,124 @@ + +#include + +#ifdef _DEBUG +# define FILENAME "visualinfod.exe" +#else +# define FILENAME "visualinfo.exe" +#endif + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// +VS_VERSION_INFO VERSIONINFO +FILEVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 +PRODUCTVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 +FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG +FILEFLAGS VS_FF_DEBUG +#else +FILEFLAGS 0x0L +#endif +FILEOS VOS__WINDOWS32 +FILETYPE VFT_APP +FILESUBTYPE VFT2_UNKNOWN +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", + "The OpenGL Extension Wrangler Library\r\n" + "Copyright (C) 2008-2019, Nigel Stewart \r\n" + "Copyright (C) 2002-2008, Milan Ikits \r\n" + "Copyright (C) 2002-2008, Marcelo E. Magallon \r\n" + "Copyright (C) 2002, Lev Povalahev\r\n" + "All rights reserved.\r\n" + "\r\n" + "Redistribution and use in source and binary forms, with or without \r\n" + "modification, are permitted provided that the following conditions are met:\r\n" + "\r\n" + "* Redistributions of source code must retain the above copyright notice, \r\n" + " this list of conditions and the following disclaimer.\r\n" + "* Redistributions in binary form must reproduce the above copyright notice, \r\n" + " this list of conditions and the following disclaimer in the documentation \r\n" + " and/or other materials provided with the distribution.\r\n" + "* The name of the author may be used to endorse or promote products \r\n" + " derived from this software without specific prior written permission.\r\n" + "\r\n" + "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' \r\n" + "AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \r\n" + "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n" + "ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE \r\n" + "LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR \r\n" + "CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF \r\n" + "SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n" + "INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n" + "CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n" + "ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\r\n" + "THE POSSIBILITY OF SUCH DAMAGE.\r\n" + "\r\n" + "\r\n" + "Mesa 3-D graphics library\r\n" + "\r\n" + "Version: 7.0\r\n" + "\r\n" + "Copyright (C) 1999-2007 Brian Paul All Rights Reserved.\r\n" + "\r\n" + "Permission is hereby granted, free of charge, to any person obtaining a\r\n" + "copy of this software and associated documentation files (the ''Software''),\r\n" + "to deal in the Software without restriction, including without limitation\r\n" + "the rights to use, copy, modify, merge, publish, distribute, sublicense,\r\n" + "and/or sell copies of the Software, and to permit persons to whom the\r\n" + "Software is furnished to do so, subject to the following conditions:\r\n" + "\r\n" + "The above copyright notice and this permission notice shall be included\r\n" + "in all copies or substantial portions of the Software.\r\n" + "\r\n" + "THE SOFTWARE IS PROVIDED ''AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n" + "OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n" + "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r\n" + "BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\r\n" + "AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n" + "CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n" + "\r\n" + "\r\n" + "Copyright (c) 2007 The Khronos Group Inc.\r\n" + "\r\n" + "Permission is hereby granted, free of charge, to any person obtaining a\r\n" + "copy of this software and/or associated documentation files (the\r\n" + "''Materials''), to deal in the Materials without restriction, including\r\n" + "without limitation the rights to use, copy, modify, merge, publish,\r\n" + "distribute, sublicense, and/or sell copies of the Materials, and to\r\n" + "permit persons to whom the Materials are furnished to do so, subject to\r\n" + "the following conditions:\r\n" + "\r\n" + "The above copyright notice and this permission notice shall be included\r\n" + "in all copies or substantial portions of the Materials.\r\n" + "\r\n" + "THE MATERIALS ARE PROVIDED ''AS IS'', WITHOUT WARRANTY OF ANY KIND,\r\n" + "EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n" + "MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n" + "IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n" + "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n" + "TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n" + "MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.\0" + VALUE "CompanyName", "\0" + VALUE "FileDescription", "Utility for listing pixelformat capabilities\0" + VALUE "FileVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" + VALUE "InternalName", "visualinfo\0" + VALUE "LegalCopyright", "(C) 2002-2019 Nigel Stewart & Milan Ikits & Marcelo Magallon\0" + VALUE "LegalTrademarks", "\0" + VALUE "OriginalFilename", FILENAME "\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "The OpenGL Extension Wrangler Library\0" + VALUE "ProductVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END diff --git a/vendor/glew-cmake-2.2.0/auto/src/wglew_head.h b/vendor/glew-cmake-2.2.0/auto/src/wglew_head.h new file mode 100644 index 0000000..df88503 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/wglew_head.h @@ -0,0 +1,36 @@ +#ifndef __wglew_h__ +#define __wglew_h__ +#define __WGLEW_H__ + +#ifdef __wglext_h_ +#error wglext.h included before wglew.h +#endif + +#define __wglext_h_ + +#if !defined(WINAPI) +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN 1 +# endif +#include +# undef WIN32_LEAN_AND_MEAN +#endif + +/* + * GLEW_STATIC needs to be set when using the static version. + * GLEW_BUILD is set when building the DLL version. + */ +#ifdef GLEW_STATIC +# define GLEWAPI extern +#else +# ifdef GLEW_BUILD +# define GLEWAPI extern __declspec(dllexport) +# else +# define GLEWAPI extern __declspec(dllimport) +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + diff --git a/vendor/glew-cmake-2.2.0/auto/src/wglew_mid.h b/vendor/glew-cmake-2.2.0/auto/src/wglew_mid.h new file mode 100644 index 0000000..25b1037 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/wglew_mid.h @@ -0,0 +1,4 @@ +/* ------------------------------------------------------------------------- */ + +#define WGLEW_FUN_EXPORT GLEW_FUN_EXPORT +#define WGLEW_VAR_EXPORT GLEW_VAR_EXPORT diff --git a/vendor/glew-cmake-2.2.0/auto/src/wglew_tail.h b/vendor/glew-cmake-2.2.0/auto/src/wglew_tail.h new file mode 100644 index 0000000..8971158 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/auto/src/wglew_tail.h @@ -0,0 +1,22 @@ +/* ------------------------------------------------------------------------- */ + +GLEWAPI GLenum GLEWAPIENTRY wglewInit (); +GLEWAPI GLboolean GLEWAPIENTRY wglewIsSupported (const char *name); + +#ifndef WGLEW_GET_VAR +#define WGLEW_GET_VAR(x) (*(const GLboolean*)&x) +#endif + +#ifndef WGLEW_GET_FUN +#define WGLEW_GET_FUN(x) x +#endif + +GLEWAPI GLboolean GLEWAPIENTRY wglewGetExtension (const char *name); + +#ifdef __cplusplus +} +#endif + +#undef GLEWAPI + +#endif /* __wglew_h__ */ diff --git a/vendor/glew-cmake-2.2.0/azure-pipelines.yml b/vendor/glew-cmake-2.2.0/azure-pipelines.yml new file mode 100644 index 0000000..ce740ca --- /dev/null +++ b/vendor/glew-cmake-2.2.0/azure-pipelines.yml @@ -0,0 +1,22 @@ +schedules: + - cron: "0 0 * * *" + displayName: Daily midnight build + branches: + include: + - master + always: true + +jobs: +- job: NightlyUpdate + pool: + vmImage: 'ubuntu-latest' + container: perlmint/glew-cmake:20190922 + steps: + - checkout: self + persistCredentials: true + - bash: | + export TEST_MODE=false + git config --global user.email $GIT_USEREMAIL && + git config --global user.name $GIT_USERNAME && + unset SYSTEM # remove SYSTEM variable set by azure pipeline + ./glew-cmake/maintain.sh \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/build/cmake/CMakeLists.txt b/vendor/glew-cmake-2.2.0/build/cmake/CMakeLists.txt new file mode 100644 index 0000000..5649972 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/cmake/CMakeLists.txt @@ -0,0 +1,267 @@ +cmake_minimum_required(VERSION 3.16) +project(glew LANGUAGES C) + +if ( NOT DEFINED CMAKE_BUILD_TYPE ) + set( CMAKE_BUILD_TYPE Release CACHE STRING "Build type" ) +endif () + +include(GNUInstallDirs) + +set(CMAKE_DEBUG_POSTFIX d) + +option (BUILD_UTILS "utilities" ON) +option (GLEW_REGAL "Regal mode" OFF) +option (GLEW_OSMESA "OSMesa mode" OFF) +if (APPLE) + option (BUILD_FRAMEWORK "Build Framework bundle for OSX" OFF) +endif () +option (GLEW_X11 "X11 mode" ON) +option (GLEW_EGL "EGL mode" OFF) +option (BUILD_SHARED_LIBS "install/link shared instead of static libs" ON) + +set (GLEW_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../..) + +# get version from config/version +file (STRINGS ${GLEW_DIR}/config/version _VERSION_MAJOR_STRING REGEX "GLEW_MAJOR[ ]*=[ ]*[0-9]+.*") +string (REGEX REPLACE "GLEW_MAJOR[ ]*=[ ]*([0-9]+)" "\\1" CPACK_PACKAGE_VERSION_MAJOR ${_VERSION_MAJOR_STRING}) +file (STRINGS ${GLEW_DIR}/config/version _VERSION_MINOR_STRING REGEX "GLEW_MINOR[ ]*=[ ]*[0-9]+.*") +string (REGEX REPLACE "GLEW_MINOR[ ]*=[ ]*([0-9]+)" "\\1" CPACK_PACKAGE_VERSION_MINOR ${_VERSION_MINOR_STRING}) +file (STRINGS ${GLEW_DIR}/config/version _VERSION_PATCH_STRING REGEX "GLEW_MICRO[ ]*=[ ]*[0-9]+.*") +string (REGEX REPLACE "GLEW_MICRO[ ]*=[ ]*([0-9]+)" "\\1" CPACK_PACKAGE_VERSION_PATCH ${_VERSION_PATCH_STRING}) +set (GLEW_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}) + +if (NOT GLEW_CUSTOM_OUTPUT_DIRS) + set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +endif() + +find_package (OpenGL REQUIRED) + +# prefer GLVND +if (OPENGL_opengl_LIBRARY) + set (GLEW_LIBRARIES ${OPENGL_opengl_LIBRARY}) +else () + set (GLEW_LIBRARIES ${OPENGL_gl_LIBRARY}) +endif () + +# X11 required except for Windows and Apple OSX platforms +if (GLEW_X11 AND NOT WIN32 AND NOT APPLE) + find_package (X11) + list (APPEND GLEW_LIBRARIES ${OPENGL_glx_LIBRARY} ${X11_LIBRARIES}) +endif() + +if (WIN32) + set (GLEW_LIB_NAME glew32) +else () + set (GLEW_LIB_NAME GLEW) + set (DLL_PREFIX lib) +endif () + +add_definitions (-DGLEW_NO_GLU) + +#### Regal mode #### + +if (GLEW_REGAL) + if (WIN32) + set (REGAL_LIB_NAME regal32) + else () + set (REGAL_LIB_NAME Regal) + endif () + add_definitions (-DGLEW_REGAL) + set (GLEW_LIBRARIES ${REGAL_LIB_NAME}) +endif () + +#### OSMesa mode #### + +if (GLEW_OSMESA) + if (WIN32) + set (OSMESA_LIB_NAME osmesa) + else () + set (OSMESA_LIB_NAME OSMesa) + endif () + add_definitions (-DGLEW_OSMESA) + list (APPEND GLEW_LIBRARIES ${OSMESA_LIB_NAME}) + set (X11_LIBRARIES) +endif () + +#### EGL #### + +if (GLEW_EGL AND UNIX) + add_definitions (-DGLEW_EGL) + if (NOT OpenGL_EGL_FOUND) + message (FATAL_ERROR "EGL library set but not found.") + endif () + list (APPEND GLEW_LIBRARIES ${OPENGL_egl_LIBRARY}) +endif () + +#### GLEW #### + +include_directories (${GLEW_DIR}/include ${X11_INCLUDE_DIR}) + +set (GLEW_PUBLIC_HEADERS_FILES + ${GLEW_DIR}/include/GL/wglew.h + ${GLEW_DIR}/include/GL/glew.h + ${GLEW_DIR}/include/GL/glxew.h + ${GLEW_DIR}/include/GL/eglew.h +) +set (GLEW_SRC_FILES ${GLEW_DIR}/src/glew.c) + +if (WIN32) + list (APPEND GLEW_SRC_FILES ${GLEW_DIR}/build/glew.rc) +endif () + +add_library (glew SHARED ${GLEW_PUBLIC_HEADERS_FILES} ${GLEW_SRC_FILES}) +set_target_properties (glew PROPERTIES COMPILE_DEFINITIONS "GLEW_BUILD" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX "${DLL_PREFIX}" + VERSION ${GLEW_VERSION} + SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}) +add_library (glew_s STATIC ${GLEW_PUBLIC_HEADERS_FILES} ${GLEW_SRC_FILES}) +set_target_properties (glew_s PROPERTIES COMPILE_DEFINITIONS "GLEW_STATIC" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX lib) + +if (MSVC) + # add options from visual studio project + target_compile_definitions (glew PRIVATE "GLEW_BUILD;VC_EXTRALEAN") + target_compile_definitions (glew_s PRIVATE "GLEW_STATIC;VC_EXTRALEAN") + if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i?86|x86|x86_32)$") + target_link_libraries (glew LINK_PRIVATE -BASE:0x62AA0000) + endif() + # kill security checks which are dependent on stdlib + target_compile_options (glew PRIVATE -GS-) + target_compile_options (glew_s PRIVATE -GS-) + # remove stdlib dependency + target_link_libraries (glew LINK_PRIVATE -nodefaultlib -noentry) + target_link_libraries (glew LINK_PRIVATE libvcruntime.lib) + target_link_libraries (glew LINK_PRIVATE msvcrt.lib ) + string(REGEX REPLACE "/RTC(su|[1su])" "" CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG}) +elseif (WIN32 AND ((CMAKE_C_COMPILER_ID MATCHES "GNU") OR (CMAKE_C_COMPILER_ID MATCHES "Clang"))) + # remove stdlib dependency on windows with GCC and Clang (for similar reasons + # as to MSVC - to allow it to be used with any Windows compiler) + target_compile_options (glew PRIVATE -fno-builtin -fno-stack-protector) + target_compile_options (glew_s PRIVATE -fno-builtin -fno-stack-protector) + target_link_libraries (glew LINK_PRIVATE -nostdlib) +endif () + +if (BUILD_FRAMEWORK) + set_target_properties(glew PROPERTIES + FRAMEWORK TRUE + FRAMEWORK_VERSION ${GLEW_VERSION} + MACOSX_FRAMEWORK_IDENTIFIER net.sourceforge.glew + MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${GLEW_VERSION} + MACOSX_FRAMEWORK_BUNDLE_VERSION ${GLEW_VERSION} + XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" + PUBLIC_HEADER "${GLEW_PUBLIC_HEADERS_FILES}" + OUTPUT_NAME GLEW + ) +endif() + +target_link_libraries (glew LINK_PUBLIC ${GLEW_LIBRARIES}) +target_link_libraries (glew_s ${GLEW_LIBRARIES}) + +target_compile_definitions(glew_s INTERFACE "GLEW_STATIC") +foreach(t glew glew_s) + target_include_directories(${t} PUBLIC $) +endforeach() + +set(targets_to_install "") +if(BUILD_SHARED_LIBS) + list(APPEND targets_to_install glew) +else () + list(APPEND targets_to_install glew_s) +endif() + +install ( TARGETS ${targets_to_install} + EXPORT glew-targets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT Runtime + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Runtime + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Development + FRAMEWORK DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT Runtime +) + +if (BUILD_UTILS) + set (GLEWINFO_SRC_FILES ${GLEW_DIR}/src/glewinfo.c) + if (WIN32) + list (APPEND GLEWINFO_SRC_FILES ${GLEW_DIR}/build/glewinfo.rc) + endif () + add_executable (glewinfo ${GLEWINFO_SRC_FILES}) + if(BUILD_SHARED_LIBS) + target_link_libraries (glewinfo glew) + else() + target_link_libraries (glewinfo glew_s) + endif() + if (NOT WIN32) + target_link_libraries(glewinfo ${X11_LIBRARIES}) + endif () + + set (VISUALINFO_SRC_FILES ${GLEW_DIR}/src/visualinfo.c) + if (WIN32) + list (APPEND VISUALINFO_SRC_FILES ${GLEW_DIR}/build/visualinfo.rc) + endif () + add_executable (visualinfo ${VISUALINFO_SRC_FILES}) + if(BUILD_SHARED_LIBS) + target_link_libraries (visualinfo glew) + else() + target_link_libraries (visualinfo glew_s) + endif() + if (NOT WIN32) + target_link_libraries(visualinfo ${X11_LIBRARIES}) + endif () + + install ( TARGETS glewinfo visualinfo + DESTINATION ${CMAKE_INSTALL_BINDIR} + COMPONENT Runtime) +endif () + +set (prefix ${CMAKE_INSTALL_PREFIX}) +set (exec_prefix ${CMAKE_INSTALL_PREFIX}) +set (libdir ${CMAKE_INSTALL_FULL_LIBDIR}) +set (includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR}) +set (version ${GLEW_VERSION}) +set (libname ${GLEW_LIB_NAME}) +set (cflags) +set (requireslib glu) + +# Mac OSX has no glu.pc unless optional X11/GLX is installed +if (APPLE) + set (requireslib) +endif () + +configure_file (${GLEW_DIR}/glew.pc.in ${CMAKE_CURRENT_BINARY_DIR}/glew.pc @ONLY) + +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/glew.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + COMPONENT Development +) + +if(WIN32 AND MSVC AND (NOT MSVC_VERSION LESS 1600)) + install( + FILES $ + DESTINATION ${CMAKE_INSTALL_LIBDIR} + CONFIGURATIONS Debug RelWithDebInfo + COMPONENT Runtime + ) +endif() + +install ( + FILES ${GLEW_PUBLIC_HEADERS_FILES} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/GL + COMPONENT Development) + +install(EXPORT glew-targets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glew + COMPONENT Development + NAMESPACE GLEW::) +install(FILES + ${CMAKE_CURRENT_SOURCE_DIR}/glew-config.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/CopyImportedTargetProperties.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glew + COMPONENT Development) + +if(NOT TARGET uninstall) + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake + IMMEDIATE @ONLY) + + add_custom_target(uninstall + COMMAND ${CMAKE_COMMAND} -P + ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) +endif() diff --git a/vendor/glew-cmake-2.2.0/build/cmake/CopyImportedTargetProperties.cmake b/vendor/glew-cmake-2.2.0/build/cmake/CopyImportedTargetProperties.cmake new file mode 100644 index 0000000..a7ade98 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/cmake/CopyImportedTargetProperties.cmake @@ -0,0 +1,88 @@ +#.rst: +# CopyImportedTargetProperties +# -------------------------- +# +# Copies the `INTERFACE*` and `IMPORTED*` properties from a target +# to another one. +# This function can be used to duplicate an `IMPORTED` or an `ALIAS` library +# with a different name since ``add_library(... ALIAS ...)`` does not work +# for those targets. +# +# :: +# +# copy_imported_target_properties( ) +# +# The function copies all the `INTERFACE*` and `IMPORTED*` target +# properties from `` to ``. +# +# The function uses the `IMPORTED_CONFIGURATIONS` property to determine +# which configuration-dependent properties should be copied +# (`IMPORTED_LOCATION_`, etc...) +# +# Example: +# +# Internally the CMake project of ZLIB builds the ``zlib`` and +# ``zlibstatic`` targets which can be exported in the ``ZLIB::`` namespace +# with the ``install(EXPORT ...)`` command. +# +# The config-module will then create the import libraries ``ZLIB::zlib`` and +# ``ZLIB::zlibstatic``. To use ``ZLIB::zlibstatic`` under the standard +# ``ZLIB::ZLIB`` name we need to create the ``ZLIB::ZLIB`` imported library +# and copy the appropriate properties: +# +# add_library(ZLIB::ZLIB STATIC IMPORTED) +# copy_imported_target_properties(ZLIB::zlibstatic ZLIB::ZLIB) +# + +function(copy_imported_target_properties src_target dest_target) + + set(config_dependent_props + IMPORTED_IMPLIB + IMPORTED_LINK_DEPENDENT_LIBRARIES + IMPORTED_LINK_INTERFACE_LANGUAGES + IMPORTED_LINK_INTERFACE_LIBRARIES + IMPORTED_LINK_INTERFACE_MULTIPLICITY + IMPORTED_LOCATION + IMPORTED_NO_SONAME + IMPORTED_SONAME + ) + + # copy configuration-independent properties + foreach(prop + ${config_dependent_props} + IMPORTED_CONFIGURATIONS + INTERFACE_AUTOUIC_OPTIONS + INTERFACE_COMPILE_DEFINITIONS + INTERFACE_COMPILE_FEATURES + INTERFACE_COMPILE_OPTIONS + INTERFACE_INCLUDE_DIRECTORIES + INTERFACE_LINK_LIBRARIES + INTERFACE_POSITION_INDEPENDENT_CODE + INTERFACE_SOURCES + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES + ) + get_property(is_set TARGET ${src_target} PROPERTY ${prop} SET) + if(is_set) + get_target_property(v ${src_target} ${prop}) + set_target_properties(${dest_target} PROPERTIES ${prop} "${v}") + # message(STATUS "set_target_properties(${dest_target} PROPERTIES ${prop} ${v})") + endif() + endforeach() + + # copy configuration-dependent properties + get_target_property(imported_configs ${src_target} + IMPORTED_CONFIGURATIONS) + + foreach(config ${imported_configs}) + foreach(prop_prefix ${config_dependent_props}) + set(prop ${prop_prefix}_${config}) + get_property(is_set TARGET ${src_target} PROPERTY ${prop} SET) + if(is_set) + get_target_property(v ${src_target} ${prop}) + set_target_properties(${dest_target} + PROPERTIES ${prop} "${v}") + # message(STATUS "set_target_properties(${dest_target} PROPERTIES ${prop} ${v})") + endif() + endforeach() + endforeach() +endfunction() diff --git a/vendor/glew-cmake-2.2.0/build/cmake/cmake_uninstall.cmake.in b/vendor/glew-cmake-2.2.0/build/cmake/cmake_uninstall.cmake.in new file mode 100644 index 0000000..2517e99 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/cmake/cmake_uninstall.cmake.in @@ -0,0 +1,26 @@ +if(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") + message(FATAL_ERROR "Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt") +endif(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") + +if (NOT DEFINED CMAKE_INSTALL_PREFIX) + set (CMAKE_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@") +endif () + message(${CMAKE_INSTALL_PREFIX}) + +file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files) +string(REGEX REPLACE "\n" ";" files "${files}") +foreach(file ${files}) + message(STATUS "Uninstalling $ENV{DESTDIR}${file}") + if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + exec_program( + "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + if(NOT "${rm_retval}" STREQUAL 0) + message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") + endif(NOT "${rm_retval}" STREQUAL 0) + else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + message(STATUS "File $ENV{DESTDIR}${file} does not exist.") + endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") +endforeach(file) diff --git a/vendor/glew-cmake-2.2.0/build/cmake/glew-config.cmake b/vendor/glew-cmake-2.2.0/build/cmake/glew-config.cmake new file mode 100644 index 0000000..0b79c0b --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/cmake/glew-config.cmake @@ -0,0 +1,60 @@ +# This config-module creates the following import libraries: +# +# - GLEW::glew shared lib +# - GLEW::glew_s static lib +# +# Additionally GLEW::GLEW will be created as an +# copy of either the shared (default) or the static libs. +# +# Dependending on the setting of BUILD_SHARED_LIBS at GLEW build time +# either the static or shared versions may not be available. +# +# Set GLEW_USE_STATIC_LIBS to OFF or ON to force using the shared +# or static lib for GLEW::GLEW +# + +include(${CMAKE_CURRENT_LIST_DIR}/glew-targets.cmake) +include(${CMAKE_CURRENT_LIST_DIR}/CopyImportedTargetProperties.cmake) + +# decide which import library (glew/glew_s) +# needs to be copied to GLEW::GLEW +set(_glew_target_postfix "") +set(_glew_target_type SHARED) +if(DEFINED GLEW_USE_STATIC_LIBS) + # if defined, use only static or shared + if(GLEW_USE_STATIC_LIBS) + set(_glew_target_postfix "_s") + endif() + # else use static only if no shared +elseif(NOT TARGET GLEW::glew AND TARGET GLEW::glew_s) + set(_glew_target_postfix "_s") +endif() +if(_glew_target_postfix STREQUAL "") + set(_glew_target_type SHARED) +else() + set(_glew_target_type STATIC) +endif() + +# CMake doesn't allow creating ALIAS lib for an IMPORTED lib +# so create imported ones and copy the properties +foreach(_glew_target glew) + set(_glew_src_target "GLEW::${_glew_target}${_glew_target_postfix}") + string(TOUPPER "GLEW::${_glew_target}" _glew_dest_target) + if(TARGET ${_glew_dest_target}) + get_target_property(_glew_previous_src_target ${_glew_dest_target} + _GLEW_SRC_TARGET) + if(NOT _glew_previous_src_target STREQUAL _glew_src_target) + message(FATAL_ERROR "find_package(GLEW) was called the second time with " + "different GLEW_USE_STATIC_LIBS setting. Previously, " + "`glew-config.cmake` created ${_glew_dest_target} as a copy of " + "${_glew_previous_src_target}. Now it attempted to copy it from " + "${_glew_src_target}. ") + endif() + else() + add_library(${_glew_dest_target} ${_glew_target_type} IMPORTED) + # message(STATUS "add_library(${_glew_dest_target} ${_glew_target_type} IMPORTED)") + copy_imported_target_properties(${_glew_src_target} ${_glew_dest_target}) + set_target_properties(${_glew_dest_target} PROPERTIES + _GLEW_SRC_TARGET ${_glew_src_target}) + endif() +endforeach() diff --git a/vendor/glew-cmake-2.2.0/build/cmake/testbuild/CMakeLists.txt b/vendor/glew-cmake-2.2.0/build/cmake/testbuild/CMakeLists.txt new file mode 100644 index 0000000..1243478 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/cmake/testbuild/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 3.16) +project(glew-cmake-test LANGUAGES C) + +find_package(GLEW REQUIRED CONFIG) +find_package(GLEW REQUIRED CONFIG) # call twice to test multiple call +find_package(OpenGL REQUIRED) + +add_executable(cmake-test main.c) +set_target_properties(cmake-test PROPERTIES DEBUG_POSTFIX _d) +target_link_libraries(cmake-test PRIVATE GLEW::GLEW ${OPENGL_LIBRARIES}) +target_include_directories(cmake-test PRIVATE ${OPENGL_INCLUDE_DIR}) + +target_compile_definitions(cmake-test PRIVATE + -DGLEW_CMAKE_TEST_CONFIG=$ + -DGLEW_CMAKE_TEST_TARGET_FILE_NAME=$ + -DGLEW_CMAKE_TEST_TARGET_TYPE=$ + ) + +install(TARGETS cmake-test DESTINATION bin COMPONENT Runtime) diff --git a/vendor/glew-cmake-2.2.0/build/cmake/testbuild/main.c b/vendor/glew-cmake-2.2.0/build/cmake/testbuild/main.c new file mode 100644 index 0000000..5975817 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/cmake/testbuild/main.c @@ -0,0 +1,23 @@ +#include + +#include +#include + +#define S(x) SS(x) +#define SS(x) #x + +int main(int argc, char* argv[]) { + printf("GLEW CMake test, %s build\n", + S(GLEW_CMAKE_TEST_CONFIG)); + printf("-- linked to %s which is %s\n", + S(GLEW_CMAKE_TEST_TARGET_FILE_NAME), + S(GLEW_CMAKE_TEST_TARGET_TYPE)); + const GLubyte* v = glewGetString(GLEW_VERSION); + if(v) { + printf("-- glewGetString(GLEW_VERSION) returns %s\n-- test passed.\n", v); + return EXIT_SUCCESS; + } else { + printf("-- glewGetString(GLEW_VERSION) returns NULL\n-- test failed.\n"); + return EXIT_FAILURE; + } +} diff --git a/vendor/glew-cmake-2.2.0/build/vc10/common.props b/vendor/glew-cmake-2.2.0/build/vc10/common.props new file mode 100644 index 0000000..83ef102 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc10/common.props @@ -0,0 +1,29 @@ + + + + + ../../include + ../../lib + ../../bin + + + + + $(INCLUDE_DIR) + + + + + $(INCLUDE_DIR) + true + + + $(LIB_DIR) + true + + + $(BIN_DIR) + true + + + \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/build/vc10/glew.sln b/vendor/glew-cmake-2.2.0/build/vc10/glew.sln new file mode 100644 index 0000000..a3d671e --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc10/glew.sln @@ -0,0 +1,56 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glew_shared", "glew_shared.vcxproj", "{55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glew_static", "glew_static.vcxproj", "{664E6F0D-6784-4760-9565-D54F8EB1EDF4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glewinfo", "glewinfo.vcxproj", "{8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "visualinfo", "visualinfo.vcxproj", "{79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|Win32.ActiveCfg = Debug|Win32 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|Win32.Build.0 = Debug|Win32 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|x64.ActiveCfg = Debug|x64 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|x64.Build.0 = Debug|x64 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|Win32.ActiveCfg = Release|Win32 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|Win32.Build.0 = Release|Win32 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|x64.ActiveCfg = Release|x64 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|x64.Build.0 = Release|x64 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|Win32.ActiveCfg = Debug|Win32 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|Win32.Build.0 = Debug|Win32 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|x64.ActiveCfg = Debug|x64 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|x64.Build.0 = Debug|x64 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|Win32.ActiveCfg = Release|Win32 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|Win32.Build.0 = Release|Win32 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|x64.ActiveCfg = Release|x64 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|x64.Build.0 = Release|x64 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|Win32.ActiveCfg = Debug|Win32 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|Win32.Build.0 = Debug|Win32 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|x64.ActiveCfg = Debug|x64 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|x64.Build.0 = Debug|x64 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|Win32.ActiveCfg = Release|Win32 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|Win32.Build.0 = Release|Win32 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|x64.ActiveCfg = Release|x64 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|x64.Build.0 = Release|x64 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|Win32.ActiveCfg = Debug|Win32 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|Win32.Build.0 = Debug|Win32 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|x64.ActiveCfg = Debug|x64 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|x64.Build.0 = Debug|x64 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|Win32.ActiveCfg = Release|Win32 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|Win32.Build.0 = Release|Win32 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|x64.ActiveCfg = Release|x64 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/vendor/glew-cmake-2.2.0/build/vc10/glew_shared.vcxproj b/vendor/glew-cmake-2.2.0/build/vc10/glew_shared.vcxproj new file mode 100644 index 0000000..e1149d9 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc10/glew_shared.vcxproj @@ -0,0 +1,254 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D} + + + + DynamicLibrary + false + + + DynamicLibrary + false + + + DynamicLibrary + false + + + DynamicLibrary + false + + + + + + + + + + + + + + + + + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glew32 + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glew32 + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glew32d + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glew32d + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + $(INCLUDE_DIR) + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_BUILD;%(PreprocessorDefinitions) + false + + + true + NDEBUG;%(PreprocessorDefinitions) + true + Win32 + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib + 0x62AA0000 + opengl32.lib;%(AdditionalDependencies) + /ignore:4089 + + + true + true + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + $(INCLUDE_DIR) + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_BUILD;%(PreprocessorDefinitions) + false + + + true + NDEBUG;%(PreprocessorDefinitions) + true + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib + 0x62AA0000 + opengl32.lib;%(AdditionalDependencies) + /ignore:4089 + + + true + true + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + WIN32;WIN32_MEAN_AND_LEAN;VC_EXTRALEAN;GLEW_BUILD;%(PreprocessorDefinitions) + EnableFastChecks + Level3 + $(INCLUDE_DIR) + false + + + true + _DEBUG;%(PreprocessorDefinitions) + true + Win32 + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib + 0x62AA0000 + opengl32.lib;%(AdditionalDependencies) + + + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + WIN32;WIN32_LEAN_AND_MEAN;GLEW_BUILD;%(PreprocessorDefinitions) + EnableFastChecks + Level3 + $(INCLUDE_DIR) + false + + + true + _DEBUG;%(PreprocessorDefinitions) + true + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib + 0x62AA0000 + opengl32.lib;%(AdditionalDependencies) + + + + + + + + + + + + + + + + + + diff --git a/vendor/glew-cmake-2.2.0/build/vc10/glew_static.vcxproj b/vendor/glew-cmake-2.2.0/build/vc10/glew_static.vcxproj new file mode 100644 index 0000000..949db96 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc10/glew_static.vcxproj @@ -0,0 +1,228 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + {664E6F0D-6784-4760-9565-D54F8EB1EDF4} + + + + Application + + + Application + + + StaticLibrary + false + MultiByte + + + StaticLibrary + false + MultiByte + + + StaticLibrary + false + MultiByte + + + StaticLibrary + false + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + glew32s + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + glew32s + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + glew32sd + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + glew32sd + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + ../../include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + false + + + 0x0409 + NDEBUG;GLEW_STATIC;%(PreprocessorDefinitions) + + + true + + + true + $(OutDir)$(TargetName)$(TargetExt) + MachineX86 + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + ../../include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + false + + + 0x0409 + NDEBUG;GLEW_STATIC;%(PreprocessorDefinitions) + + + true + + + true + $(OutDir)$(TargetName)$(TargetExt) + MachineX64 + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + EnableFastChecks + false + + + 0x0409 + _DEBUG;GLEW_STATIC;%(PreprocessorDefinitions) + + + true + + + true + $(OutDir)$(TargetName)$(TargetExt) + MachineX86 + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + EnableFastChecks + false + + + 0x0409 + _DEBUG;GLEW_STATIC;%(PreprocessorDefinitions) + + + true + + + true + $(OutDir)$(TargetName)$(TargetExt) + MachineX64 + + + + + ../../include;%(AdditionalIncludeDirectories) + + + + + ../../include;%(AdditionalIncludeDirectories) + + + + + + + + + + + + + + + + diff --git a/vendor/glew-cmake-2.2.0/build/vc10/glewinfo.vcxproj b/vendor/glew-cmake-2.2.0/build/vc10/glewinfo.vcxproj new file mode 100644 index 0000000..5361664 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc10/glewinfo.vcxproj @@ -0,0 +1,252 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA} + + + + Application + + + Application + + + Application + false + + + Application + false + + + Application + false + + + Application + false + + + + + + + + + + + + + + + + + + + + + + + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glewinfod + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glewinfod + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glewinfo + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glewinfo + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + glewinfo + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + glewinfo + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + EnableFastChecks + + + .\..\..\bin\glewinfo.tlb + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + EnableFastChecks + + + .\..\..\bin\glewinfo.tlb + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + .\..\..\bin\glewinfo.tlb + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32s.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + .\..\..\bin\glewinfo.tlb + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32s.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + + + + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + + + + + + + {664e6f0d-6784-4760-9565-d54f8eb1edf4} + + + + + + diff --git a/vendor/glew-cmake-2.2.0/build/vc10/visualinfo.vcxproj b/vendor/glew-cmake-2.2.0/build/vc10/visualinfo.vcxproj new file mode 100644 index 0000000..f684265 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc10/visualinfo.vcxproj @@ -0,0 +1,251 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E} + + + + Application + + + Application + + + Application + false + + + Application + false + + + Application + false + + + Application + false + + + + + + + + + + + + + + + + + + + + + + + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + visualinfod + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + visualinfod + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + visualinfo + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + visualinfo + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + visualinfo + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + ..\..\bin/ + visualinfo + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + EnableFastChecks + + + .\..\..\bin\visualinfo.tlb + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + EnableFastChecks + + + .\..\..\bin\visualinfo.tlb + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + .\..\..\bin\visualinfo.tlb + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32s.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + .\..\..\bin\visualinfo.tlb + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32s.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + + + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + glew32sd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + + + + + + + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + + + + {664e6f0d-6784-4760-9565-d54f8eb1edf4} + + + + + + diff --git a/vendor/glew-cmake-2.2.0/build/vc12/common.props b/vendor/glew-cmake-2.2.0/build/vc12/common.props new file mode 100644 index 0000000..8d53675 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc12/common.props @@ -0,0 +1,29 @@ + + + + + ..\..\include + ..\..\lib + ..\..\bin + + + + + $(INCLUDE_DIR) + + + + + $(INCLUDE_DIR) + true + + + $(LIB_DIR) + true + + + $(BIN_DIR) + true + + + \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/build/vc12/glew.sln b/vendor/glew-cmake-2.2.0/build/vc12/glew.sln new file mode 100644 index 0000000..a3d671e --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc12/glew.sln @@ -0,0 +1,56 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glew_shared", "glew_shared.vcxproj", "{55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glew_static", "glew_static.vcxproj", "{664E6F0D-6784-4760-9565-D54F8EB1EDF4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glewinfo", "glewinfo.vcxproj", "{8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "visualinfo", "visualinfo.vcxproj", "{79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|Win32.ActiveCfg = Debug|Win32 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|Win32.Build.0 = Debug|Win32 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|x64.ActiveCfg = Debug|x64 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|x64.Build.0 = Debug|x64 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|Win32.ActiveCfg = Release|Win32 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|Win32.Build.0 = Release|Win32 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|x64.ActiveCfg = Release|x64 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|x64.Build.0 = Release|x64 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|Win32.ActiveCfg = Debug|Win32 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|Win32.Build.0 = Debug|Win32 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|x64.ActiveCfg = Debug|x64 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|x64.Build.0 = Debug|x64 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|Win32.ActiveCfg = Release|Win32 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|Win32.Build.0 = Release|Win32 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|x64.ActiveCfg = Release|x64 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|x64.Build.0 = Release|x64 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|Win32.ActiveCfg = Debug|Win32 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|Win32.Build.0 = Debug|Win32 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|x64.ActiveCfg = Debug|x64 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|x64.Build.0 = Debug|x64 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|Win32.ActiveCfg = Release|Win32 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|Win32.Build.0 = Release|Win32 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|x64.ActiveCfg = Release|x64 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|x64.Build.0 = Release|x64 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|Win32.ActiveCfg = Debug|Win32 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|Win32.Build.0 = Debug|Win32 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|x64.ActiveCfg = Debug|x64 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|x64.Build.0 = Debug|x64 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|Win32.ActiveCfg = Release|Win32 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|Win32.Build.0 = Release|Win32 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|x64.ActiveCfg = Release|x64 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/vendor/glew-cmake-2.2.0/build/vc12/glew_shared.vcxproj b/vendor/glew-cmake-2.2.0/build/vc12/glew_shared.vcxproj new file mode 100644 index 0000000..b52bcc4 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc12/glew_shared.vcxproj @@ -0,0 +1,258 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D} + + + + DynamicLibrary + false + v120 + + + DynamicLibrary + false + v120 + + + DynamicLibrary + false + v120 + + + DynamicLibrary + false + v120 + + + + + + + + + + + + + + + + + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glew32 + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glew32 + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glew32d + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glew32d + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + $(INCLUDE_DIR) + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_BUILD;%(PreprocessorDefinitions) + false + + + true + NDEBUG;%(PreprocessorDefinitions) + true + Win32 + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib + 0x62AA0000 + opengl32.lib;%(AdditionalDependencies) + /ignore:4089 + + + true + true + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + $(INCLUDE_DIR) + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_BUILD;%(PreprocessorDefinitions) + false + + + true + NDEBUG;%(PreprocessorDefinitions) + true + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib + 0x62AA0000 + opengl32.lib;%(AdditionalDependencies) + /ignore:4089 + + + true + true + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + WIN32;WIN32_MEAN_AND_LEAN;VC_EXTRALEAN;GLEW_BUILD;%(PreprocessorDefinitions) + EnableFastChecks + Level3 + $(INCLUDE_DIR) + false + + + true + _DEBUG;%(PreprocessorDefinitions) + true + Win32 + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib + 0x62AA0000 + opengl32.lib;%(AdditionalDependencies) + + + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + WIN32;WIN32_LEAN_AND_MEAN;GLEW_BUILD;%(PreprocessorDefinitions) + EnableFastChecks + Level3 + $(INCLUDE_DIR) + false + + + true + _DEBUG;%(PreprocessorDefinitions) + true + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib + 0x62AA0000 + opengl32.lib;%(AdditionalDependencies) + + + + + + + + + + + + + + + + + + diff --git a/vendor/glew-cmake-2.2.0/build/vc12/glew_static.vcxproj b/vendor/glew-cmake-2.2.0/build/vc12/glew_static.vcxproj new file mode 100644 index 0000000..61adc41 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc12/glew_static.vcxproj @@ -0,0 +1,232 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + {664E6F0D-6784-4760-9565-D54F8EB1EDF4} + + + + Application + + + Application + + + StaticLibrary + false + MultiByte + v120 + + + StaticLibrary + false + MultiByte + v120 + + + StaticLibrary + false + MultiByte + v120 + + + StaticLibrary + false + MultiByte + v120 + + + + + + + + + + + + + + + + + + + + + + + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + glew32s + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + glew32s + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + glew32sd + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + glew32sd + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + ../../include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + false + + + 0x0409 + NDEBUG;GLEW_STATIC;%(PreprocessorDefinitions) + + + true + + + true + $(OutDir)$(TargetName)$(TargetExt) + MachineX86 + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + ../../include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + false + + + 0x0409 + NDEBUG;GLEW_STATIC;%(PreprocessorDefinitions) + + + true + + + true + $(OutDir)$(TargetName)$(TargetExt) + MachineX64 + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + EnableFastChecks + false + + + 0x0409 + _DEBUG;GLEW_STATIC;%(PreprocessorDefinitions) + + + true + + + true + $(OutDir)$(TargetName)$(TargetExt) + MachineX86 + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + EnableFastChecks + false + + + 0x0409 + _DEBUG;GLEW_STATIC;%(PreprocessorDefinitions) + + + true + + + true + $(OutDir)$(TargetName)$(TargetExt) + MachineX64 + + + + + ../../include;%(AdditionalIncludeDirectories) + + + + + ../../include;%(AdditionalIncludeDirectories) + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/build/vc12/glewinfo.vcxproj b/vendor/glew-cmake-2.2.0/build/vc12/glewinfo.vcxproj new file mode 100644 index 0000000..8b38665 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc12/glewinfo.vcxproj @@ -0,0 +1,259 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA} + + + + Application + + + Application + + + Application + false + v120 + + + Application + false + v120 + + + Application + false + v120 + + + Application + false + v120 + + + + + + + + + + + + + + + + + + + + + + + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glewinfod + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glewinfod + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glewinfo + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glewinfo + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + glewinfo + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + glewinfo + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + EnableFastChecks + + + .\..\..\bin\glewinfo.tlb + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + EnableFastChecks + + + .\..\..\bin\glewinfo.tlb + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + .\..\..\bin\glewinfo.tlb + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32s.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + .\..\..\bin\glewinfo.tlb + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32s.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + + + + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + + + + + + + {664e6f0d-6784-4760-9565-d54f8eb1edf4} + + + + + + + + + \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/build/vc12/visualinfo.vcxproj b/vendor/glew-cmake-2.2.0/build/vc12/visualinfo.vcxproj new file mode 100644 index 0000000..20b9e6a --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc12/visualinfo.vcxproj @@ -0,0 +1,258 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E} + + + + Application + + + Application + + + Application + false + v120 + + + Application + false + v120 + + + Application + false + v120 + + + Application + false + v120 + + + + + + + + + + + + + + + + + + + + + + + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + visualinfod + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + visualinfod + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + visualinfo + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + visualinfo + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + visualinfo + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + ..\..\bin/ + visualinfo + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + EnableFastChecks + + + .\..\..\bin\visualinfo.tlb + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + EnableFastChecks + + + .\..\..\bin\visualinfo.tlb + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + .\..\..\bin\visualinfo.tlb + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32s.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + .\..\..\bin\visualinfo.tlb + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32s.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + + + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + glew32sd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + + + + + + + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + + + + {664e6f0d-6784-4760-9565-d54f8eb1edf4} + + + + + + + + + \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/build/vc14/common.props b/vendor/glew-cmake-2.2.0/build/vc14/common.props new file mode 100644 index 0000000..8d53675 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc14/common.props @@ -0,0 +1,29 @@ + + + + + ..\..\include + ..\..\lib + ..\..\bin + + + + + $(INCLUDE_DIR) + + + + + $(INCLUDE_DIR) + true + + + $(LIB_DIR) + true + + + $(BIN_DIR) + true + + + \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/build/vc14/glew.sln b/vendor/glew-cmake-2.2.0/build/vc14/glew.sln new file mode 100644 index 0000000..5ac822d --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc14/glew.sln @@ -0,0 +1,56 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glew_shared", "glew_shared.vcxproj", "{55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glew_static", "glew_static.vcxproj", "{664E6F0D-6784-4760-9565-D54F8EB1EDF4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glewinfo", "glewinfo.vcxproj", "{8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "visualinfo", "visualinfo.vcxproj", "{79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|Win32.ActiveCfg = Debug|Win32 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|Win32.Build.0 = Debug|Win32 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|x64.ActiveCfg = Debug|x64 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|x64.Build.0 = Debug|x64 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|Win32.ActiveCfg = Release|Win32 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|Win32.Build.0 = Release|Win32 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|x64.ActiveCfg = Release|x64 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|x64.Build.0 = Release|x64 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|Win32.ActiveCfg = Debug|Win32 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|Win32.Build.0 = Debug|Win32 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|x64.ActiveCfg = Debug|x64 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|x64.Build.0 = Debug|x64 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|Win32.ActiveCfg = Release|Win32 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|Win32.Build.0 = Release|Win32 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|x64.ActiveCfg = Release|x64 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|x64.Build.0 = Release|x64 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|Win32.ActiveCfg = Debug|Win32 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|Win32.Build.0 = Debug|Win32 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|x64.ActiveCfg = Debug|x64 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|x64.Build.0 = Debug|x64 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|Win32.ActiveCfg = Release|Win32 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|Win32.Build.0 = Release|Win32 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|x64.ActiveCfg = Release|x64 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|x64.Build.0 = Release|x64 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|Win32.ActiveCfg = Debug|Win32 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|Win32.Build.0 = Debug|Win32 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|x64.ActiveCfg = Debug|x64 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|x64.Build.0 = Debug|x64 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|Win32.ActiveCfg = Release|Win32 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|Win32.Build.0 = Release|Win32 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|x64.ActiveCfg = Release|x64 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/vendor/glew-cmake-2.2.0/build/vc14/glew_shared.vcxproj b/vendor/glew-cmake-2.2.0/build/vc14/glew_shared.vcxproj new file mode 100644 index 0000000..6015ff3 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc14/glew_shared.vcxproj @@ -0,0 +1,258 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D} + + + + DynamicLibrary + false + v140 + + + DynamicLibrary + false + v140 + + + DynamicLibrary + false + v140 + + + DynamicLibrary + false + v140 + + + + + + + + + + + + + + + + + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glew32 + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glew32 + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glew32d + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glew32d + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + $(INCLUDE_DIR) + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_BUILD;%(PreprocessorDefinitions) + false + + + true + NDEBUG;%(PreprocessorDefinitions) + true + Win32 + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib + 0x62AA0000 + opengl32.lib;%(AdditionalDependencies) + /ignore:4089 + + + true + true + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + $(INCLUDE_DIR) + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_BUILD;%(PreprocessorDefinitions) + false + + + true + NDEBUG;%(PreprocessorDefinitions) + true + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib + 0x62AA0000 + opengl32.lib;%(AdditionalDependencies) + /ignore:4089 + + + true + true + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + WIN32;WIN32_MEAN_AND_LEAN;VC_EXTRALEAN;GLEW_BUILD;%(PreprocessorDefinitions) + EnableFastChecks + Level3 + $(INCLUDE_DIR) + false + + + true + _DEBUG;%(PreprocessorDefinitions) + true + Win32 + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib + 0x62AA0000 + opengl32.lib;%(AdditionalDependencies) + + + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + WIN32;WIN32_LEAN_AND_MEAN;GLEW_BUILD;%(PreprocessorDefinitions) + EnableFastChecks + Level3 + $(INCLUDE_DIR) + false + + + true + _DEBUG;%(PreprocessorDefinitions) + true + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib + 0x62AA0000 + opengl32.lib;%(AdditionalDependencies) + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/build/vc14/glew_static.vcxproj b/vendor/glew-cmake-2.2.0/build/vc14/glew_static.vcxproj new file mode 100644 index 0000000..87be4c2 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc14/glew_static.vcxproj @@ -0,0 +1,232 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + {664E6F0D-6784-4760-9565-D54F8EB1EDF4} + + + + Application + + + Application + + + StaticLibrary + false + MultiByte + v140 + + + StaticLibrary + false + MultiByte + v140 + + + StaticLibrary + false + MultiByte + v140 + + + StaticLibrary + false + MultiByte + v140 + + + + + + + + + + + + + + + + + + + + + + + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + glew32s + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + glew32s + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + glew32sd + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + glew32sd + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + ../../include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + false + + + 0x0409 + NDEBUG;GLEW_STATIC;%(PreprocessorDefinitions) + + + true + + + true + $(OutDir)$(TargetName)$(TargetExt) + MachineX86 + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + ../../include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + false + + + 0x0409 + NDEBUG;GLEW_STATIC;%(PreprocessorDefinitions) + + + true + + + true + $(OutDir)$(TargetName)$(TargetExt) + MachineX64 + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + EnableFastChecks + false + + + 0x0409 + _DEBUG;GLEW_STATIC;%(PreprocessorDefinitions) + + + true + + + true + $(OutDir)$(TargetName)$(TargetExt) + MachineX86 + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + EnableFastChecks + false + + + 0x0409 + _DEBUG;GLEW_STATIC;%(PreprocessorDefinitions) + + + true + + + true + $(OutDir)$(TargetName)$(TargetExt) + MachineX64 + + + + + ../../include;%(AdditionalIncludeDirectories) + + + + + ../../include;%(AdditionalIncludeDirectories) + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/build/vc14/glewinfo.vcxproj b/vendor/glew-cmake-2.2.0/build/vc14/glewinfo.vcxproj new file mode 100644 index 0000000..ec051d9 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc14/glewinfo.vcxproj @@ -0,0 +1,259 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA} + + + + Application + + + Application + + + Application + false + v140 + + + Application + false + v140 + + + Application + false + v140 + + + Application + false + v140 + + + + + + + + + + + + + + + + + + + + + + + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glewinfod + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glewinfod + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glewinfo + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glewinfo + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + glewinfo + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + glewinfo + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + EnableFastChecks + + + .\..\..\bin\glewinfo.tlb + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + EnableFastChecks + + + .\..\..\bin\glewinfo.tlb + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + .\..\..\bin\glewinfo.tlb + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32s.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + .\..\..\bin\glewinfo.tlb + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32s.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + + + + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + + + + + + + {664e6f0d-6784-4760-9565-d54f8eb1edf4} + + + + + + + + + \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/build/vc14/visualinfo.vcxproj b/vendor/glew-cmake-2.2.0/build/vc14/visualinfo.vcxproj new file mode 100644 index 0000000..80b8d9d --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc14/visualinfo.vcxproj @@ -0,0 +1,258 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E} + + + + Application + + + Application + + + Application + false + v140 + + + Application + false + v140 + + + Application + false + v140 + + + Application + false + v140 + + + + + + + + + + + + + + + + + + + + + + + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + visualinfod + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + visualinfod + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + visualinfo + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + visualinfo + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + visualinfo + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + ..\..\bin/ + visualinfo + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + EnableFastChecks + + + .\..\..\bin\visualinfo.tlb + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + EnableFastChecks + + + .\..\..\bin\visualinfo.tlb + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + .\..\..\bin\visualinfo.tlb + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32s.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + .\..\..\bin\visualinfo.tlb + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32s.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + + + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + glew32sd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + + + + + + + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + + + + {664e6f0d-6784-4760-9565-d54f8eb1edf4} + + + + + + + + + \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/build/vc15/common.props b/vendor/glew-cmake-2.2.0/build/vc15/common.props new file mode 100644 index 0000000..8d53675 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc15/common.props @@ -0,0 +1,29 @@ + + + + + ..\..\include + ..\..\lib + ..\..\bin + + + + + $(INCLUDE_DIR) + + + + + $(INCLUDE_DIR) + true + + + $(LIB_DIR) + true + + + $(BIN_DIR) + true + + + \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/build/vc15/glew.sln b/vendor/glew-cmake-2.2.0/build/vc15/glew.sln new file mode 100644 index 0000000..fddec56 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc15/glew.sln @@ -0,0 +1,59 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glew_shared", "glew_shared.vcxproj", "{55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glew_static", "glew_static.vcxproj", "{664E6F0D-6784-4760-9565-D54F8EB1EDF4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glewinfo", "glewinfo.vcxproj", "{8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "visualinfo", "visualinfo.vcxproj", "{79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|Win32.ActiveCfg = Debug|Win32 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|Win32.Build.0 = Debug|Win32 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|x64.ActiveCfg = Debug|x64 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|x64.Build.0 = Debug|x64 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|Win32.ActiveCfg = Release|Win32 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|Win32.Build.0 = Release|Win32 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|x64.ActiveCfg = Release|x64 + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|x64.Build.0 = Release|x64 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|Win32.ActiveCfg = Debug|Win32 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|Win32.Build.0 = Debug|Win32 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|x64.ActiveCfg = Debug|x64 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|x64.Build.0 = Debug|x64 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|Win32.ActiveCfg = Release|Win32 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|Win32.Build.0 = Release|Win32 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|x64.ActiveCfg = Release|x64 + {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|x64.Build.0 = Release|x64 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|Win32.ActiveCfg = Debug|Win32 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|Win32.Build.0 = Debug|Win32 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|x64.ActiveCfg = Debug|x64 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|x64.Build.0 = Debug|x64 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|Win32.ActiveCfg = Release|Win32 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|Win32.Build.0 = Release|Win32 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|x64.ActiveCfg = Release|x64 + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|x64.Build.0 = Release|x64 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|Win32.ActiveCfg = Debug|Win32 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|Win32.Build.0 = Debug|Win32 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|x64.ActiveCfg = Debug|x64 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|x64.Build.0 = Debug|x64 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|Win32.ActiveCfg = Release|Win32 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|Win32.Build.0 = Release|Win32 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|x64.ActiveCfg = Release|x64 + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {9A5903BA-2749-477B-A225-BC8AB668C316} + EndGlobalSection +EndGlobal diff --git a/vendor/glew-cmake-2.2.0/build/vc15/glew_shared.vcxproj b/vendor/glew-cmake-2.2.0/build/vc15/glew_shared.vcxproj new file mode 100644 index 0000000..59f3089 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc15/glew_shared.vcxproj @@ -0,0 +1,258 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D} + + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + DynamicLibrary + false + v141 + + + + + + + + + + + + + + + + + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glew32 + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glew32 + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glew32d + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glew32d + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + $(INCLUDE_DIR) + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_BUILD;%(PreprocessorDefinitions) + false + + + true + NDEBUG;%(PreprocessorDefinitions) + true + Win32 + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib + 0x62AA0000 + opengl32.lib;libvcruntime.lib;msvcrt.lib;%(AdditionalDependencies) + /ignore:4089 + + + true + true + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + $(INCLUDE_DIR) + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_BUILD;%(PreprocessorDefinitions) + false + + + true + NDEBUG;%(PreprocessorDefinitions) + true + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib + 0x62AA0000 + opengl32.lib;libvcruntime.lib;msvcrt.lib;%(AdditionalDependencies) + /ignore:4089 + + + true + true + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + WIN32;WIN32_MEAN_AND_LEAN;VC_EXTRALEAN;GLEW_BUILD;%(PreprocessorDefinitions) + EnableFastChecks + Level3 + $(INCLUDE_DIR) + false + + + true + _DEBUG;%(PreprocessorDefinitions) + true + Win32 + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib + 0x62AA0000 + opengl32.lib;%(AdditionalDependencies) + + + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + WIN32;WIN32_LEAN_AND_MEAN;GLEW_BUILD;%(PreprocessorDefinitions) + EnableFastChecks + Level3 + $(INCLUDE_DIR) + false + + + true + _DEBUG;%(PreprocessorDefinitions) + true + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib + 0x62AA0000 + opengl32.lib;%(AdditionalDependencies) + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/build/vc15/glew_static.vcxproj b/vendor/glew-cmake-2.2.0/build/vc15/glew_static.vcxproj new file mode 100644 index 0000000..787fa4a --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc15/glew_static.vcxproj @@ -0,0 +1,232 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + {664E6F0D-6784-4760-9565-D54F8EB1EDF4} + + + + Application + + + Application + + + StaticLibrary + false + MultiByte + v141 + + + StaticLibrary + false + MultiByte + v141 + + + StaticLibrary + false + MultiByte + v141 + + + StaticLibrary + false + MultiByte + v141 + + + + + + + + + + + + + + + + + + + + + + + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + glew32s + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + glew32s + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + glew32sd + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + glew32sd + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + ../../include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + false + + + 0x0409 + NDEBUG;GLEW_STATIC;%(PreprocessorDefinitions) + + + true + + + true + $(OutDir)$(TargetName)$(TargetExt) + MachineX86 + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + ../../include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + false + + + 0x0409 + NDEBUG;GLEW_STATIC;%(PreprocessorDefinitions) + + + true + + + true + $(OutDir)$(TargetName)$(TargetExt) + MachineX64 + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + EnableFastChecks + false + + + 0x0409 + _DEBUG;GLEW_STATIC;%(PreprocessorDefinitions) + + + true + + + true + $(OutDir)$(TargetName)$(TargetExt) + MachineX86 + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + EnableFastChecks + false + + + 0x0409 + _DEBUG;GLEW_STATIC;%(PreprocessorDefinitions) + + + true + + + true + $(OutDir)$(TargetName)$(TargetExt) + MachineX64 + + + + + ../../include;%(AdditionalIncludeDirectories) + + + + + ../../include;%(AdditionalIncludeDirectories) + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/build/vc15/glewinfo.vcxproj b/vendor/glew-cmake-2.2.0/build/vc15/glewinfo.vcxproj new file mode 100644 index 0000000..3ee607c --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc15/glewinfo.vcxproj @@ -0,0 +1,261 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA} + + + + Application + + + Application + + + Application + false + v141 + + + Application + false + v141 + + + Application + false + v141 + + + Application + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glewinfod + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glewinfod + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glewinfo + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + glewinfo + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + glewinfo + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + glewinfo + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + EnableFastChecks + + + .\..\..\bin\glewinfo.tlb + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + EnableFastChecks + + + .\..\..\bin\glewinfo.tlb + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + .\..\..\bin\glewinfo.tlb + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32s.lib;opengl32.lib;libvcruntime.lib;msvcrt.lib;%(AdditionalDependencies) + libcmt + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + .\..\..\bin\glewinfo.tlb + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32s.lib;opengl32.lib;libvcruntime.lib;msvcrt.lib;%(AdditionalDependencies) + libcmt + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + + + + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + + + + + + + {664e6f0d-6784-4760-9565-d54f8eb1edf4} + + + + + + + + + \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/build/vc15/visualinfo.vcxproj b/vendor/glew-cmake-2.2.0/build/vc15/visualinfo.vcxproj new file mode 100644 index 0000000..e53e338 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc15/visualinfo.vcxproj @@ -0,0 +1,260 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E} + + + + Application + + + Application + + + Application + false + v141 + + + Application + false + v141 + + + Application + false + v141 + + + Application + false + v141 + + + + + + + + + + + + + + + + + + + + + + + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + visualinfod + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + visualinfod + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + visualinfo + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + false + visualinfo + + + $(BIN_DIR)\$(Configuration)\$(PlatformName)\ + visualinfo + tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ + + + ..\..\bin/ + visualinfo + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + EnableFastChecks + + + .\..\..\bin\visualinfo.tlb + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + EnableFastChecks + + + .\..\..\bin\visualinfo.tlb + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + + + true + + + true + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + .\..\..\bin\visualinfo.tlb + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32s.lib;glu32.lib;opengl32.lib;libvcruntime.lib;msvcrt.lib;%(AdditionalDependencies) + libcmt + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + MultiThreaded + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + WIN32;WIN32_LEAN_AND_MEAN;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + .\..\..\bin\visualinfo.tlb + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + + + true + + + true + Console + $(OutDir)$(TargetName)$(TargetExt) + glew32s.lib;glu32.lib;opengl32.lib;libvcruntime.lib;msvcrt.lib;%(AdditionalDependencies) + libcmt + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + + + $(OutDir)$(TargetName)$(TargetExt) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + glew32sd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + + + + + + + $(OutDir)$(TargetName)$(TargetExt) + glew32sd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) + $(LIB_DIR)\$(Configuration)\$(PlatformName)\ + + + + + + + + {664e6f0d-6784-4760-9565-d54f8eb1edf4} + + + + + + + + + \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/build/vc6/Makefile b/vendor/glew-cmake-2.2.0/build/vc6/Makefile new file mode 100644 index 0000000..5a4f5d6 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc6/Makefile @@ -0,0 +1,21 @@ +MSDEV := msdev +RM := rm -rf + +default: + $(MSDEV) glew.dsw /make \ + "glew_static - Win32 Release" \ + "glew_shared - Win32 Release" \ + "glewinfo - Win32 Release" \ + "visualinfo - Win32 Release" /build + +debug: + $(MSDEV) glew.dsw /make \ + "glew_static - Win32 Debug" \ + "glew_shared - Win32 Debug" \ + "glewinfo - Win32 Debug" \ + "visualinfo - Win32 Debug" /build + + +clean: + $(MSDEV) glew.dsw /make all /clean + $(RM) static shared *.plg *.ncb *.opt diff --git a/vendor/glew-cmake-2.2.0/build/vc6/glew.dsw b/vendor/glew-cmake-2.2.0/build/vc6/glew.dsw new file mode 100644 index 0000000..c201779 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc6/glew.dsw @@ -0,0 +1,71 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "glew_shared"=.\glew_shared.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "glew_static"=.\glew_static.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "glewinfo"=.\glewinfo.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name glew_static + End Project Dependency +}}} + +############################################################################### + +Project: "visualinfo"=.\visualinfo.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name glew_static + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/vendor/glew-cmake-2.2.0/build/vc6/glew_shared.dsp b/vendor/glew-cmake-2.2.0/build/vc6/glew_shared.dsp new file mode 100644 index 0000000..8b576b8 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc6/glew_shared.dsp @@ -0,0 +1,122 @@ +# Microsoft Developer Studio Project File - Name="glew_shared" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=glew_shared - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "glew_shared.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "glew_shared.mak" CFG="glew_shared - Win32 Debug MX" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "glew_shared - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "glew_shared - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "glew_shared - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "../../lib" +# PROP Intermediate_Dir "shared/release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GLEW_EXPORTS" /YX /FD /c /GS- +# ADD CPP /nologo /W3 /O2 /I "../../include" /D "WIN32" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRALEAN" /D "GLEW_BUILD" /YX /FD /c /GS- +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 opengl32.lib /nologo /dll /pdb:none /machine:I386 /out:"../../bin/glew32.dll" /ignore:4089 +# ADD LINK32 /base:0x62AA0000 /nodefaultlib /noentry + +!ELSEIF "$(CFG)" == "glew_shared - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "../../lib" +# PROP Intermediate_Dir "shared/debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GLEW_EXPORTS" /YX /FD /GZ /c /GS- +# ADD CPP /nologo /MDd /W3 /Zi /Od /I "../../include" /D "WIN32" /D "WIN32_MEAN_AND_LEAN" /D "VC_EXTRALEAN" /D "GLEW_BUILD" /YX /FD /GZ /c /GS- +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 opengl32.lib /nologo /dll /incremental:no /debug /machine:I386 /out:"../../bin/glew32d.dll" /pdbtype:sept +# SUBTRACT LINK32 /pdb:none +# ADD LINK32 /base:0x62AA0000 + +!ENDIF + +# Begin Target + +# Name "glew_shared - Win32 Release" +# Name "glew_shared - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\src\glew.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\GL\glew.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\GL\wglew.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\glew.rc +# End Source File +# End Group +# End Target +# End Project diff --git a/vendor/glew-cmake-2.2.0/build/vc6/glew_static.dsp b/vendor/glew-cmake-2.2.0/build/vc6/glew_static.dsp new file mode 100644 index 0000000..d6bd3d6 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc6/glew_static.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="glew_static" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=glew_static - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "glew_static.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "glew_static.mak" CFG="glew_static - Win32 Debug MX" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "glew_static - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "glew_static - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "glew_static - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "../../lib" +# PROP Intermediate_Dir "static/release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c /GS- +# ADD CPP /nologo /W3 /GX /O2 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRALEAN" /D "GLEW_STATIC" /YX /FD /c /GS- +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" /d "GLEW_STATIC" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"../../lib/glew32s.lib" + +!ELSEIF "$(CFG)" == "glew_static - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "../../lib" +# PROP Intermediate_Dir "static/debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRALEAN" /D "GLEW_STATIC" /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" /d "GLEW_STATIC" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"../../lib/glew32sd.lib" + +!ENDIF + +# Begin Target + +# Name "glew_static - Win32 Release" +# Name "glew_static - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\src\glew.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\GL\glew.h +# End Source File +# Begin Source File + +SOURCE=..\..\include\GL\wglew.h +# End Source File +# End Group +# Begin Group "Resources" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\glew.rc +# End Source File +# End Group +# End Target +# End Project diff --git a/vendor/glew-cmake-2.2.0/build/vc6/glewinfo.dsp b/vendor/glew-cmake-2.2.0/build/vc6/glewinfo.dsp new file mode 100644 index 0000000..95a599d --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc6/glewinfo.dsp @@ -0,0 +1,103 @@ +# Microsoft Developer Studio Project File - Name="glewinfo" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=glewinfo - Win32 Debug MX +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "glewinfo.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "glewinfo.mak" CFG="glewinfo - Win32 Debug MX" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "glewinfo - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "glewinfo - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "glewinfo - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "../../bin" +# PROP Intermediate_Dir "static/release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../../include" /D "WIN32" /D "WIN32_MEAN_AND_LEAN" /D "VC_EXTRALEAN" /D "GLEW_STATIC" /D "_CRT_SECURE_NO_WARNINGS" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 ../../lib/glew32s.lib opengl32.lib gdi32.lib user32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "glewinfo - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "../../bin" +# PROP Intermediate_Dir "static/debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /D "WIN32" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "GLEW_STATIC" /D "_CRT_SECURE_NO_WARNINGS" /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 ../../lib/glew32sd.lib opengl32.lib gdi32.lib user32.lib /nologo /subsystem:console /incremental:no /pdb:"static/debug/glewinfod.pdb" /debug /machine:I386 /out:"../../bin/glewinfod.exe" /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "glewinfo - Win32 Release" +# Name "glewinfo - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\src\glewinfo.c +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\glewinfo.rc +# End Source File +# End Group +# End Target +# End Project diff --git a/vendor/glew-cmake-2.2.0/build/vc6/visualinfo.dsp b/vendor/glew-cmake-2.2.0/build/vc6/visualinfo.dsp new file mode 100644 index 0000000..adcc814 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/build/vc6/visualinfo.dsp @@ -0,0 +1,103 @@ +# Microsoft Developer Studio Project File - Name="visualinfo" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=visualinfo - Win32 Debug MX +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "visualinfo.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "visualinfo.mak" CFG="visualinfo - Win32 Debug MX" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "visualinfo - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "visualinfo - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "visualinfo - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "../../bin" +# PROP Intermediate_Dir "static/release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../../include" /D "WIN32" /D "WIN32_MEAN_AND_LEAN" /D "VC_EXTRALEAN" /D "GLEW_STATIC" /D "_CRT_SECURE_NO_WARNINGS" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 ../../lib/glew32s.lib glu32.lib opengl32.lib gdi32.lib user32.lib kernel32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "visualinfo - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "../../bin" +# PROP Intermediate_Dir "static/debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /D "WIN32" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "GLEW_STATIC" /D "_CRT_SECURE_NO_WARNINGS" /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 ../../lib/glew32sd.lib glu32.lib opengl32.lib gdi32.lib user32.lib kernel32.lib /nologo /subsystem:console /incremental:no /pdb:"static/debug/visualinfod.pdb" /debug /machine:I386 /out:"../../bin/visualinfod.exe" /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "visualinfo - Win32 Release" +# Name "visualinfo - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\src\visualinfo.c +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\visualinfo.rc +# End Source File +# End Group +# End Target +# End Project diff --git a/vendor/glew-cmake-2.2.0/cmake-testbuild.sh b/vendor/glew-cmake-2.2.0/cmake-testbuild.sh new file mode 100644 index 0000000..fbbc339 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/cmake-testbuild.sh @@ -0,0 +1,71 @@ +#!/bin/sh + +# This script tests the CMake build: +# +# - builds the main CMakeLists.txt +# - builds and runs a small test app in a separate build tree so +# the config-module is tested, too +# +# Options (environment variables): +# +# - The variable BUILD_SHARED_LIBS will be forwarded to the CMake project +# that builds and installs the GLEW libraries. Set BUILD_SHARED_LIBS to +# ON or OFF to install only static or shared libs. Leave it unset to +# install both. +# +# Note: BUILD_SHARED_LIBS controls only what to install not what to build. +# +# - GLEW_USE_STATIC_LIBS will be forwarded to the test project that calls +# `find_package` to find GLEW. Set GLEW_USE_STATIC LIBS to ON or OFF force +# finding the shared or static versions of GLEW. Leave it unset to find +# the shared or what is available. +# +# Examples: +# +# Build & install shared + static, find default (shared) +# +# ./cmake-testbuild.sh +# +# Build & install shared + static, find static +# +# GLEW_USE_STATIC_LIBS=ON ./cmake-testbuild.sh +# +# Install static only (still build both) +# +# BUILD_SHARED_LIBS=OFF ./cmake-testbuild.sh +# + +set -ex + +rm -rf out/include +rm -rf out/lib* +rm -rf out/bin + +if [ -n "$BUILD_SHARED_LIBS" ]; then + bsl=-DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS +else + bsl=-UBUILD_SHARED_LIBS +fi + +if [ -n "$GLEW_USE_STATIC_LIBS" ]; then + gusl=-DGLEW_USE_STATIC_LIBS=$GLEW_USE_STATIC_LIBS +else + gusl=-UGLEW_USE_STATIC_LIBS +fi + +cmake -Hbuild/cmake -Bout/build/glew -DCMAKE_INSTALL_PREFIX=${PWD}/out -DCMAKE_BUILD_TYPE=Debug $bsl +cmake --build out/build/glew --target install --config Debug +cmake out/build/glew -DCMAKE_BUILD_TYPE=Release +cmake --build out/build/glew --target install --config Release --clean-first + +cmake -Hbuild/cmake/testbuild -Bout/build/cmake-testbuild -DCMAKE_INSTALL_PREFIX=${PWD}/out -DCMAKE_PREFIX_PATH=${PWD}/out -DCMAKE_BUILD_TYPE=Debug $gusl +cmake --build out/build/cmake-testbuild --target install --config Debug + +cmake out/build/cmake-testbuild -DCMAKE_BUILD_TYPE=Release +cmake --build out/build/cmake-testbuild --target install --config Release --clean-first + +export LD_LIBRARY_PATH=${PWD}/out/lib:$LD_LIBRARY_PATH +export DYLD_LIBRARY_PATH=${PWD}/out/lib:$DYLD_LIBRARY_PATH + +out/bin/cmake-test_d +out/bin/cmake-test diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.cygming b/vendor/glew-cmake-2.2.0/config/Makefile.cygming new file mode 100644 index 0000000..dcd7b21 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.cygming @@ -0,0 +1,21 @@ +NAME = glew32 +GLEW_DEST = /usr +BINDIR = /usr/bin +LIBDIR = /usr/lib/mingw +INCDIR = /usr/include/mingw/GL +# use gcc for linking, with ld it does not work +CC := gcc -mno-cygwin +LD := gcc -mno-cygwin +LN := +LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 +LDFLAGS.EXTRA = -L$(LIBDIR) +CFLAGS.EXTRA += -fno-builtin -fno-stack-protector +LDFLAGS.EXTRA += -nostdlib +WARN = -Wall -W +POPT = -O2 +BIN.SUFFIX = .exe +LIB.SONAME = lib$(NAME).dll +LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib +LIB.SHARED = $(NAME).dll +LIB.STATIC = lib$(NAME).a # the static lib will be broken +LDFLAGS.SO = -shared -Wl,-soname,$(LIB.SONAME) -Wl,--out-implib,lib/$(LIB.DEVLNK) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.cygwin b/vendor/glew-cmake-2.2.0/config/Makefile.cygwin new file mode 100644 index 0000000..f4be222 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.cygwin @@ -0,0 +1,20 @@ +NAME = GLEW +GLEW_DEST ?= /usr +# use gcc for linking, with ld it does not work +CC := cc +LD := cc +LN := +CFLAGS.EXTRA += -D_WIN32 +LDFLAGS.EXTRA = +LIBDIR = $(GLEW_DEST)/lib +LDFLAGS.GL = -lOpenGL32 -mwindows +LDFLAGS.STATIC = -Wl,-Bstatic +LDFLAGS.DYNAMIC = -Wl,-Bdynamic +WARN = -Wall -W +POPT = -O2 +BIN.SUFFIX = .exe +LIB.SONAME = cyg$(NAME)-$(GLEW_MAJOR)-$(GLEW_MINOR).dll +LIB.DEVLNK = lib$(NAME).dll.a +LIB.SHARED = cyg$(NAME)-$(GLEW_MAJOR)-$(GLEW_MINOR).dll +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -shared -Wl,--out-implib,lib/$(LIB.DEVLNK) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.cygwin-x11 b/vendor/glew-cmake-2.2.0/config/Makefile.cygwin-x11 new file mode 100644 index 0000000..bc7e2fd --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.cygwin-x11 @@ -0,0 +1,19 @@ +NAME = GLEW +GLEW_DEST ?= /usr +# use gcc for linking, with ld it does not work +CC := cc +LD := cc +LN := +LDFLAGS.EXTRA = +LIBDIR = $(GLEW_DEST)/lib +LDFLAGS.GL = -lGL -lX11 +LDFLAGS.STATIC = -Wl,-Bstatic +LDFLAGS.DYNAMIC = -Wl,-Bdynamic +WARN = -Wall -W +POPT = -O2 +BIN.SUFFIX = .exe +LIB.SONAME = cyg$(NAME)-$(GLEW_MAJOR)-$(GLEW_MINOR).dll +LIB.DEVLNK = lib$(NAME).dll.a +LIB.SHARED = cyg$(NAME)-$(GLEW_MAJOR)-$(GLEW_MINOR).dll +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -shared -Wl,--out-implib,lib/$(LIB.DEVLNK) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.darwin b/vendor/glew-cmake-2.2.0/config/Makefile.darwin new file mode 100644 index 0000000..8030f05 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.darwin @@ -0,0 +1,27 @@ +GLEW_DEST = /usr/local +NAME = $(GLEW_NAME) +CC = cc +LD = cc +CFLAGS.EXTRA += -dynamic -fno-common +CFLAGS.EXTRA += -pedantic +CFLAGS.EXTRA += -fPIC +LDFLAGS.EXTRA = +ifneq (undefined, $(origin GLEW_APPLE_GLX)) +CFLAGS.EXTRA += -std=c99 +CFLAGS.EXTRA += -I/usr/X11R6/include -D'GLEW_APPLE_GLX' +LDFLAGS.GL = -L/usr/X11R6/lib -lGL -lX11 +else +CFLAGS.EXTRA += -std=c89 +GLEW_NO_GLU = -DGLEW_NO_GLU +LDFLAGS.GL = -framework OpenGL +endif +LDFLAGS.STATIC = +LDFLAGS.DYNAMIC = +WARN = -Wall -W +POPT = -Os +BIN.SUFFIX = +LIB.SONAME = lib$(NAME).$(SO_MAJOR).dylib +LIB.DEVLNK = lib$(NAME).dylib +LIB.SHARED = lib$(NAME).$(SO_VERSION).dylib +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.darwin-gcc6 b/vendor/glew-cmake-2.2.0/config/Makefile.darwin-gcc6 new file mode 100644 index 0000000..ecb61b3 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.darwin-gcc6 @@ -0,0 +1,31 @@ +# For building with Brew gcc: +# $ brew install gcc +GLEW_DEST = /usr/local +NAME = $(GLEW_NAME) +CC = gcc-6 +LD = gcc-6 +CFLAGS.EXTRA += -dynamic -fno-common +CFLAGS.EXTRA += -fPIC +# Lots of warnings with -pedantic +# warning: ISO C forbids conversion of object pointer to function pointer type +#CFLAGS.EXTRA += -pedantic +LDFLAGS.EXTRA = +ifneq (undefined, $(origin GLEW_APPLE_GLX)) +CFLAGS.EXTRA += -std=c99 +CFLAGS.EXTRA += -I/usr/X11R6/include -D'GLEW_APPLE_GLX' +LDFLAGS.GL = -L/usr/X11R6/lib -lGL -lX11 +else +CFLAGS.EXTRA += -std=c89 +GLEW_NO_GLU = -DGLEW_NO_GLU +LDFLAGS.GL = -framework OpenGL +endif +LDFLAGS.STATIC = +LDFLAGS.DYNAMIC = +WARN = -Wall -W +POPT = -Os +BIN.SUFFIX = +LIB.SONAME = lib$(NAME).$(SO_MAJOR).dylib +LIB.DEVLNK = lib$(NAME).dylib +LIB.SHARED = lib$(NAME).$(SO_VERSION).dylib +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.darwin-ppc b/vendor/glew-cmake-2.2.0/config/Makefile.darwin-ppc new file mode 100644 index 0000000..7a41736 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.darwin-ppc @@ -0,0 +1,30 @@ +# Note: Mac PPC is obsolete but the configuration +# is here for reference. +GLEW_DEST = /usr/local +NAME = $(GLEW_NAME) +CC = cc +LD = cc +CFLAGS.EXTRA += -arch ppc +CFLAGS.EXTRA += -dynamic -fno-common +CFLAGS.EXTRA += -pedantic +CFLAGS.EXTRA += -fPIC +LDFLAGS.EXTRA = -arch ppc +ifneq (undefined, $(origin GLEW_APPLE_GLX)) +CFLAGS.EXTRA += -std=c99 +CFLAGS.EXTRA += -I/usr/X11R6/include -D'GLEW_APPLE_GLX' +LDFLAGS.GL = -L/usr/X11R6/lib -lGL -lX11 +else +CFLAGS.EXTRA += -std=c89 +GLEW_NO_GLU = -DGLEW_NO_GLU +LDFLAGS.GL = -framework OpenGL +endif +LDFLAGS.STATIC = +LDFLAGS.DYNAMIC = +WARN = -Wall -W +POPT = -Os +BIN.SUFFIX = +LIB.SONAME = lib$(NAME).$(SO_MAJOR).dylib +LIB.DEVLNK = lib$(NAME).dylib +LIB.SHARED = lib$(NAME).$(SO_VERSION).dylib +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.darwin-universal b/vendor/glew-cmake-2.2.0/config/Makefile.darwin-universal new file mode 100644 index 0000000..fdbf30a --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.darwin-universal @@ -0,0 +1,33 @@ +# +# Needs to be clang toolchain for universal: -arch x86_64 -arch arm64 +# +GLEW_DEST = /usr/local +NAME = $(GLEW_NAME) +CC = cc +LD = cc +AR = +LIBTOOL = libtool -static -o +STRIP = +CFLAGS.EXTRA = -dynamic -fno-common +CFLAGS.EXTRA += -pedantic +CFLAGS.EXTRA += -fPIC +CFLAGS.EXTRA += -arch x86_64 -arch arm64 +LDFLAGS.EXTRA = -arch x86_64 -arch arm64 +ifneq (undefined, $(origin GLEW_APPLE_GLX)) +CFLAGS.EXTRA += -std=c99 +CFLAGS.EXTRA += -I/usr/X11R6/include -D'GLEW_APPLE_GLX' +LDFLAGS.GL = -L/usr/X11R6/lib -lGL -lX11 +else +CFLAGS.EXTRA += -std=c89 +GLEW_NO_GLU = -DGLEW_NO_GLU +LDFLAGS.GL = -framework OpenGL +endif +LDFLAGS.DYNAMIC = +WARN = -Wall -W +POPT = -Os +BIN.SUFFIX = +LIB.SONAME = lib$(NAME).$(SO_MAJOR).dylib +LIB.DEVLNK = lib$(NAME).dylib +LIB.SHARED = lib$(NAME).$(SO_VERSION).dylib +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.darwin-x86_64 b/vendor/glew-cmake-2.2.0/config/Makefile.darwin-x86_64 new file mode 100644 index 0000000..dbed967 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.darwin-x86_64 @@ -0,0 +1,28 @@ +GLEW_DEST = /usr/local +NAME = $(GLEW_NAME) +CC = cc +LD = cc +CFLAGS.EXTRA += -arch x86_64 +CFLAGS.EXTRA += -dynamic -fno-common +CFLAGS.EXTRA += -pedantic +CFLAGS.EXTRA += -fPIC +LDFLAGS.EXTRA = -arch x86_64 +ifneq (undefined, $(origin GLEW_APPLE_GLX)) +CFLAGS.EXTRA += -std=c99 +CFLAGS.EXTRA += -I/usr/X11R6/include -D'GLEW_APPLE_GLX' +LDFLAGS.GL = -L/usr/X11R6/lib -lGL -lX11 +else +CFLAGS.EXTRA += -std=c89 +GLEW_NO_GLU = -DGLEW_NO_GLU +LDFLAGS.GL = -framework OpenGL +endif +LDFLAGS.STATIC = +LDFLAGS.DYNAMIC = +WARN = -Wall -W +POPT = -Os +BIN.SUFFIX = +LIB.SONAME = lib$(NAME).$(SO_MAJOR).dylib +LIB.DEVLNK = lib$(NAME).dylib +LIB.SHARED = lib$(NAME).$(SO_VERSION).dylib +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.fedora-mingw32 b/vendor/glew-cmake-2.2.0/config/Makefile.fedora-mingw32 new file mode 100644 index 0000000..9bad92a --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.fedora-mingw32 @@ -0,0 +1,12 @@ +# For cross-compiling from Linux to Windows x86 using mingw32 +# http://www.mingw.org/ +# +# $ make SYSTEM=fedora-mingw32 + +include config/Makefile.linux-mingw32 + +CC := i686-pc-mingw32-gcc +LD := i686-pc-mingw32-ld +LDFLAGS.GL += -L/usr/i686-pc-mingw32/sys-root/mingw/lib +CFLAGS.EXTRA += -fno-builtin -fno-stack-protector +LDFLAGS.EXTRA += -nostdlib diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.flatpak-32 b/vendor/glew-cmake-2.2.0/config/Makefile.flatpak-32 new file mode 100644 index 0000000..2c106de --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.flatpak-32 @@ -0,0 +1,24 @@ +NAME = $(GLEW_NAME) +CC = /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-gcc -m32 -L/lib/i386-linux-gnu +LD = /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-gcc -m32 -L/lib/i386-linux-gnu +LDFLAGS.EXTRA += -m32 +LDFLAGS.EXTRA += -L/lib/i386-linux-gnu +LIBDIR = $(GLEW_DEST)/lib32 +LDFLAGS.GL = -lGL -lX11 +LDFLAGS.STATIC = -Wl,-Bstatic +LDFLAGS.DYNAMIC = -Wl,-Bdynamic +WARN += -Wall -W +WARN += -Wshadow +WARN += -pedantic +POPT = -O2 +CFLAGS.EXTRA += -m32 +CFLAGS.EXTRA += -fPIC +CFLAGS.EXTRA += -Wcast-qual +CFLAGS.EXTRA += -ansi -pedantic +CFLAGS.EXTRA += -fno-stack-protector +BIN.SUFFIX = +LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) +LIB.DEVLNK = lib$(NAME).so +LIB.SHARED = lib$(NAME).so.$(SO_VERSION) +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -m32 -shared -Wl,-soname=$(LIB.SONAME) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.freebsd b/vendor/glew-cmake-2.2.0/config/Makefile.freebsd new file mode 100644 index 0000000..0ef81ce --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.freebsd @@ -0,0 +1,19 @@ +# As of FreeBSD12 X11 is in /usr/local + +NAME = $(GLEW_NAME) +CC = cc +LD = ld +LDFLAGS.EXTRA = -L/usr/local/lib +LDFLAGS.GL = -lGL -lX11 +LDFLAGS.STATIC = -Wl,-Bstatic +LDFLAGS.DYNAMIC = -Wl,-Bdynamic +CFLAGS.EXTRA += -I/usr/local/include -fPIC +NAME = GLEW +WARN = -Wall -W +POPT = -O2 +BIN.SUFFIX = +LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) +LIB.DEVLNK = lib$(NAME).so +LIB.SHARED = lib$(NAME).so.$(SO_VERSION) +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -shared -soname $(LIB.SONAME) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.gnu b/vendor/glew-cmake-2.2.0/config/Makefile.gnu new file mode 100644 index 0000000..8d4f07e --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.gnu @@ -0,0 +1,17 @@ +NAME = $(GLEW_NAME) +CC = cc +LD = cc +LDFLAGS.EXTRA = -L/usr/X11R6/lib +LDFLAGS.GL = -lGL -lX11 +LDFLAGS.STATIC = -Wl,-Bstatic +LDFLAGS.DYNAMIC = -Wl,-Bdynamic +NAME = GLEW +WARN = -Wall -W +POPT = -O2 +CFLAGS.EXTRA += -fPIC +BIN.SUFFIX = +LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) +LIB.DEVLNK = lib$(NAME).so +LIB.SHARED = lib$(NAME).so.$(SO_VERSION) +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.haiku b/vendor/glew-cmake-2.2.0/config/Makefile.haiku new file mode 100644 index 0000000..b8b7bd1 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.haiku @@ -0,0 +1,20 @@ +NAME = $(GLEW_NAME) +CC = cc +LD = cc + +LDFLAGS.GL = -lGL +LDFLAGS.STATIC = -Wl,-Bstatic +LDFLAGS.DYNAMIC = -Wl,-Bdynamic + +NAME = GLEW +WARN = -Wall -W +POPT = -O2 + +BIN.SUFFIX = + +LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) +LIB.DEVLNK = lib$(NAME).so +LIB.SHARED = lib$(NAME).so.$(SO_VERSION) +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) + diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.irix b/vendor/glew-cmake-2.2.0/config/Makefile.irix new file mode 100644 index 0000000..ef8f830 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.irix @@ -0,0 +1,17 @@ +NAME = $(GLEW_NAME) +CC = cc +LD = ld +ABI = -64# -n32 +CC += $(ABI) +LD += $(ABI) +LDFLAGS.EXTRA = +LDFLAGS.GL = -lGL -lXext -lX11 +NAME = GLEW +WARN = -fullwarn -woff 1110,1498 +POPT = -O2 -OPT:Olimit=0 +BIN.SUFFIX = +LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) +LIB.DEVLNK = lib$(NAME).so +LIB.SHARED = lib$(NAME).so.$(SO_VERSION) +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -shared -soname $(LIB.SONAME) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.kfreebsd b/vendor/glew-cmake-2.2.0/config/Makefile.kfreebsd new file mode 100644 index 0000000..e2ff5c3 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.kfreebsd @@ -0,0 +1,17 @@ +NAME = $(GLEW_NAME) +CC = cc +LD = cc +LDFLAGS.EXTRA = -L/usr/X11R6/lib +LDFLAGS.GL = -lGL -lX11 +LDFLAGS.STATIC = -Wl,-Bstatic +LDFLAGS.DYNAMIC = -Wl,-Bdynamic +NAME = GLEW +WARN = -Wall -W +POPT = -O2 +CFLAGS.EXTRA += -fPIC +BIN.SUFFIX = +LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) +LIB.DEVLNK = lib$(NAME).so +LIB.SHARED = lib$(NAME).so.$(SO_VERSION) +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -shared -Wl,-soname $(LIB.SONAME) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.linux b/vendor/glew-cmake-2.2.0/config/Makefile.linux new file mode 100644 index 0000000..694a98d --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.linux @@ -0,0 +1,39 @@ +NAME = $(GLEW_NAME) +CC = cc +LD = cc +M_ARCH ?= $(shell uname -m) +ARCH64 = false +ifeq (x86_64,${M_ARCH}) + ARCH64 = true +endif +ifeq (ppc64,${M_ARCH}) + ARCH64 = true +endif +ifeq (e2k,${M_ARCH}) + ARCH64 = true +endif +ifeq (${ARCH64},true) + LDFLAGS.EXTRA = -L/usr/X11R6/lib64 -L/usr/lib64 + LIBDIR = $(GLEW_DEST)/lib64 +else + LDFLAGS.EXTRA = -L/usr/X11R6/lib -L/usr/lib + LIBDIR = $(GLEW_DEST)/lib +endif +LDFLAGS.GL = -lGL -lX11 +LDFLAGS.STATIC = -Wl,-Bstatic +LDFLAGS.DYNAMIC = -Wl,-Bdynamic +NAME = GLEW +WARN += -Wall -W +WARN += -Wshadow +WARN += -pedantic +POPT = -O2 +CFLAGS.EXTRA += -fPIC +CFLAGS.EXTRA += -Wcast-qual +CFLAGS.EXTRA += -ansi -pedantic +CFLAGS.EXTRA += -fno-stack-protector +BIN.SUFFIX = +LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) +LIB.DEVLNK = lib$(NAME).so +LIB.SHARED = lib$(NAME).so.$(SO_VERSION) +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.linux-clang b/vendor/glew-cmake-2.2.0/config/Makefile.linux-clang new file mode 100644 index 0000000..75a43f8 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.linux-clang @@ -0,0 +1,34 @@ +NAME = $(GLEW_NAME) +CC = clang +LD = clang +M_ARCH ?= $(shell uname -m) +ARCH64 = false +ifeq (x86_64,${M_ARCH}) + ARCH64 = true +endif +ifeq (ppc64,${M_ARCH}) + ARCH64 = true +endif +ifeq (${ARCH64},true) + LDFLAGS.EXTRA = -L/usr/X11R6/lib64 -L/usr/lib64 + LIBDIR = $(GLEW_DEST)/lib64 +else + LDFLAGS.EXTRA = -L/usr/X11R6/lib -L/usr/lib + LIBDIR = $(GLEW_DEST)/lib +endif +LDFLAGS.GL = -lGL -lX11 +LDFLAGS.STATIC = -Wl,-Bstatic +LDFLAGS.DYNAMIC = -Wl,-Bdynamic +NAME = GLEW +WARN = -Wall -W +POPT = -O2 +CFLAGS.EXTRA += -fPIC +CFLAGS.EXTRA += -Wcast-qual +CFLAGS.EXTRA += -std=c89 -pedantic +CFLAGS.EXTRA += -fno-stack-protector +BIN.SUFFIX = +LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) +LIB.DEVLNK = lib$(NAME).so +LIB.SHARED = lib$(NAME).so.$(SO_VERSION) +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.linux-clang-egl b/vendor/glew-cmake-2.2.0/config/Makefile.linux-clang-egl new file mode 100644 index 0000000..ca06419 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.linux-clang-egl @@ -0,0 +1,4 @@ +include config/Makefile.linux-clang + +LDFLAGS.GL = -lEGL -lGL +CFLAGS.EXTRA += -DGLEW_EGL diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.linux-egl b/vendor/glew-cmake-2.2.0/config/Makefile.linux-egl new file mode 100644 index 0000000..bcdc3cb --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.linux-egl @@ -0,0 +1,4 @@ +include config/Makefile.linux + +LDFLAGS.GL = -lEGL -lGL +CFLAGS.EXTRA += -DGLEW_EGL diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.linux-egl-glvnd b/vendor/glew-cmake-2.2.0/config/Makefile.linux-egl-glvnd new file mode 100644 index 0000000..dbd6328 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.linux-egl-glvnd @@ -0,0 +1,5 @@ +include config/Makefile.linux + +LDFLAGS.GL = -lEGL -lOpenGL +CFLAGS.EXTRA += -DGLEW_EGL +GLEW_NO_GLU = -DGLEW_NO_GLU diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.linux-mingw32 b/vendor/glew-cmake-2.2.0/config/Makefile.linux-mingw32 new file mode 100644 index 0000000..5b298a5 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.linux-mingw32 @@ -0,0 +1,24 @@ +# For cross-compiling from Linux to Windows 32-bit using mingw32 +# http://mingw-w64.org/ +# +# Ubuntu/Debian: +# $ sudo apt install mingw-w64 +# $ make SYSTEM=linux-mingw32 + +NAME := glew32 +HOST := i686-w64-mingw32 +GLEW_DEST ?= /usr/local/$(HOST) +CC := $(HOST)-gcc +LD := $(HOST)-ld +LN := +STRIP := +LDFLAGS.GL = -L/usr/$(HOST)/lib -lopengl32 -lgdi32 -luser32 -lkernel32 +CFLAGS.EXTRA += -fno-builtin -fno-stack-protector -Wno-cast-function-type +WARN = -Wall -W +POPT = -O2 +BIN.SUFFIX = .exe +LIB.SONAME = lib$(NAME).dll +LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib +LIB.SHARED = $(NAME).dll +LIB.STATIC = lib$(NAME).a # the static lib will be broken +LDFLAGS.SO = -nostdlib -shared -soname $(LIB.SONAME) --out-implib lib/$(LIB.DEVLNK) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.linux-mingw64 b/vendor/glew-cmake-2.2.0/config/Makefile.linux-mingw64 new file mode 100644 index 0000000..4168df6 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.linux-mingw64 @@ -0,0 +1,24 @@ +# For cross-compiling from Linux to Windows 64-bit using mingw64 +# http://mingw-w64.org/ +# +# Ubuntu/Debian: +# $ sudo apt install mingw-w64 +# $ make SYSTEM=linux-mingw64 + +NAME := glew32 +HOST := x86_64-w64-mingw32 +GLEW_DEST ?= /usr/local/$(HOST) +CC := $(HOST)-gcc +LD := $(HOST)-ld +LN := +STRIP := +LDFLAGS.GL = -L/usr/$(HOST)/lib -lopengl32 -lgdi32 -luser32 -lkernel32 +CFLAGS.EXTRA += -fno-builtin -fno-stack-protector -Wno-cast-function-type +WARN = -Wall -W +POPT = -O2 +BIN.SUFFIX = .exe +LIB.SONAME = lib$(NAME).dll +LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib +LIB.SHARED = $(NAME).dll +LIB.STATIC = lib$(NAME).a # the static lib will be broken +LDFLAGS.SO = -nostdlib -shared -soname $(LIB.SONAME) --out-implib lib/$(LIB.DEVLNK) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.linux-osmesa b/vendor/glew-cmake-2.2.0/config/Makefile.linux-osmesa new file mode 100644 index 0000000..c957872 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.linux-osmesa @@ -0,0 +1,4 @@ +include config/Makefile.linux + +LDFLAGS.GL = -lOSMesa +CFLAGS.EXTRA += -DGLEW_OSMESA diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.mingw b/vendor/glew-cmake-2.2.0/config/Makefile.mingw new file mode 100644 index 0000000..3f413ee --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.mingw @@ -0,0 +1,17 @@ +NAME = glew32 +# use gcc for linking, with ld it does not work +CC := gcc -fno-builtin +LD := gcc +LN := +LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 +LDFLAGS.EXTRA = -L/mingw/lib +CFLAGS.EXTRA += -fno-builtin -fno-stack-protector +LDFLAGS.EXTRA += -nostdlib +WARN = -Wall -W +POPT = -O2 +BIN.SUFFIX = .exe +LIB.SONAME = lib$(NAME).dll +LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib +LIB.SHARED = $(NAME).dll +LIB.STATIC = lib$(NAME).a # the static lib will be broken +LDFLAGS.SO = -shared -Wl,-soname,$(LIB.SONAME) -Wl,--out-implib,lib/$(LIB.DEVLNK) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.mingw-win32 b/vendor/glew-cmake-2.2.0/config/Makefile.mingw-win32 new file mode 100644 index 0000000..347efd6 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.mingw-win32 @@ -0,0 +1,5 @@ +include config/Makefile.mingw + +POPT := -march=i686 -mtune=generic -O2 +CFLAGS.EXTRA += -m32 +LDFLAGS.EXTRA += -m32 diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.msys b/vendor/glew-cmake-2.2.0/config/Makefile.msys new file mode 100644 index 0000000..d6fc680 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.msys @@ -0,0 +1,20 @@ +NAME = glew32 +# use gcc for linking, with ld it does not work +CC := gcc +LD := gcc +LN := +CFLAGS.EXTRA += -D_WIN32 +LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 +LDFLAGS.EXTRA = +CFLAGS.EXTRA += -fno-builtin -fno-stack-protector +LIBDIR = $(GLEW_DEST)/bin +WARN += -Wall -W +WARN += -Wno-cast-function-type +POPT = -O2 +BIN.SUFFIX = .exe +LIB.SONAME = lib$(NAME).dll +LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib +LIB.SHARED = $(NAME).dll +LIB.SHARED.DIR = bin +LIB.STATIC = lib$(NAME).a # the static lib will be broken +LDFLAGS.SO = -shared -Wl,-soname,$(LIB.SONAME) -Wl,--out-implib,lib/$(LIB.DEVLNK) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.msys-win32 b/vendor/glew-cmake-2.2.0/config/Makefile.msys-win32 new file mode 100644 index 0000000..160d3eb --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.msys-win32 @@ -0,0 +1,5 @@ +include config/Makefile.msys + +POPT := -march=i686 -mtune=generic -O2 +CFLAGS.EXTRA += -m32 +LDFLAGS.EXTRA += -m32 diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.msys-win64 b/vendor/glew-cmake-2.2.0/config/Makefile.msys-win64 new file mode 100644 index 0000000..c1c785a --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.msys-win64 @@ -0,0 +1,5 @@ +include config/Makefile.msys + +POPT := -mtune=generic -O2 +CFLAGS.EXTRA += -m64 +LDFLAGS.EXTRA += -m64 diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.nacl-32 b/vendor/glew-cmake-2.2.0/config/Makefile.nacl-32 new file mode 100644 index 0000000..2182cee --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.nacl-32 @@ -0,0 +1,31 @@ +NAME = $(REGAL_NAME) + +M_PREFIX = i686 +M_NAME ?= $(shell uname -s) +ifeq (Linux,${M_NAME}) +M_PREFIX = i686 +endif + +CC = $(M_PREFIX)-nacl-gcc +CXX = $(M_PREFIX)-nacl-g++ +LD = $(M_PREFIX)-nacl-ld +STRIP ?= +EXT.DYNAMIC = so +LDFLAGS.EXTRA = +LIBDIR = +CFLAGS.EXTRA += -fPIC +CFLAGS.EXTRA += -m32 +LDFLAGS.EXTRA += -melf_nacl +LDFLAGS.GL = +LDFLAGS.GLU = -lRegalGLU +LDFLAGS.GLUT = -lRegalGLUT +LDFLAGS.STATIC = +LDFLAGS.DYNAMIC = -shared +WARN = -Wall -W -Wno-unused-parameter +POPT = -O2 +BIN.SUFFIX = +LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) +LIB.DEVLNK = lib$(NAME).so +LIB.SHARED = lib$(NAME).so.$(SO_VERSION) +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = $(LDFLAGS.DYNAMIC) -soname=$(LIB.SONAME) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.nacl-64 b/vendor/glew-cmake-2.2.0/config/Makefile.nacl-64 new file mode 100644 index 0000000..d6135ea --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.nacl-64 @@ -0,0 +1,31 @@ +NAME = $(REGAL_NAME) + +M_PREFIX = i686 +M_NAME ?= $(shell uname -s) +ifeq (Linux,${M_NAME}) +M_PREFIX = i686 +endif + +CC = $(M_PREFIX)-nacl-gcc +CXX = $(M_PREFIX)-nacl-g++ +LD = $(M_PREFIX)-nacl-ld +STRIP ?= +EXT.DYNAMIC = so +LDFLAGS.EXTRA = +LIBDIR = +CFLAGS.EXTRA += -fPIC +CFLAGS.EXTRA += -m64 +LDFLAGS.EXTRA += -melf64_nacl +LDFLAGS.GL = +LDFLAGS.GLU = -lRegalGLU +LDFLAGS.GLUT = -lRegalGLUT +LDFLAGS.STATIC = +LDFLAGS.DYNAMIC = -shared +WARN = -Wall -W -Wno-unused-parameter +POPT = -O2 +BIN.SUFFIX = +LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) +LIB.DEVLNK = lib$(NAME).so +LIB.SHARED = lib$(NAME).so.$(SO_VERSION) +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = $(LDFLAGS.DYNAMIC) -soname=$(LIB.SONAME) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.netbsd b/vendor/glew-cmake-2.2.0/config/Makefile.netbsd new file mode 100644 index 0000000..d2db8a9 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.netbsd @@ -0,0 +1,17 @@ +NAME = $(GLEW_NAME) +CC = cc +LD = ld +LDFLAGS.EXTRA = -L/usr/X11R7/lib -R /usr/X11R7/lib +LDFLAGS.GL = -lGL -lX11 +LDFLAGS.STATIC = -Wl,-Bstatic +LDFLAGS.DYNAMIC = -Wl,-Bdynamic +CFLAGS.EXTRA += -I/usr/X11R7/include -fPIC +NAME = GLEW +WARN = -Wall -W +POPT = -O2 +BIN.SUFFIX = +LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) +LIB.DEVLNK = lib$(NAME).so +LIB.SHARED = lib$(NAME).so.$(SO_VERSION) +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -shared -soname $(LIB.SONAME) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.openbsd b/vendor/glew-cmake-2.2.0/config/Makefile.openbsd new file mode 100644 index 0000000..b64910c --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.openbsd @@ -0,0 +1,17 @@ +NAME = $(GLEW_NAME) +CC = cc +LD = ld +LDFLAGS.EXTRA = -L/usr/X11R6/lib +LDFLAGS.GL = -lGLU -lGL -lX11 -lm +LDFLAGS.STATIC = -Wl,-Bstatic +LDFLAGS.DYNAMIC = -Wl,-Bdynamic +CFLAGS.EXTRA += -I/usr/X11R6/include +NAME = GLEW +WARN = -Wall -W +POPT = -O2 +BIN.SUFFIX = +LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) +LIB.DEVLNK = lib$(NAME).so +LIB.SHARED = lib$(NAME).so.$(SO_VERSION) +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -shared -soname $(LIB.SONAME) diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.solaris b/vendor/glew-cmake-2.2.0/config/Makefile.solaris new file mode 100644 index 0000000..bb2455f --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.solaris @@ -0,0 +1,14 @@ +NAME = $(GLEW_NAME) +CC = cc +LD = ld +CFLAGS.EXTRA = -I/usr/openwin/include -Kpic +LDFLAGS.SO = -G +LDFLAGS.EXTRA = -L/usr/openwin/lib +LDFLAGS.GL = -lGL -lX11 +NAME = GLEW +BIN.SUFFIX = +POPT = -xO2 +LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) +LIB.DEVLNK = lib$(NAME).so +LIB.SHARED = lib$(NAME).so.$(SO_VERSION) +LIB.STATIC = lib$(NAME).a diff --git a/vendor/glew-cmake-2.2.0/config/Makefile.solaris-gcc b/vendor/glew-cmake-2.2.0/config/Makefile.solaris-gcc new file mode 100644 index 0000000..24a8531 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/Makefile.solaris-gcc @@ -0,0 +1,15 @@ +NAME = $(GLEW_NAME) +CC = gcc +LD = ld +CFLAGS.EXTRA = -I/usr/openwin/include -fPIC +LDFLAGS.SO = -G +LDFLAGS.EXTRA = -L/usr/openwin/lib +LDFLAGS.GL = -lGL -lX11 +NAME = GLEW +BIN.SUFFIX = +POPT = -O2 +LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) +LIB.DEVLNK = lib$(NAME).so +LIB.SHARED = lib$(NAME).so.$(SO_VERSION) +LIB.STATIC = lib$(NAME).a +LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) diff --git a/vendor/glew-cmake-2.2.0/config/config.guess b/vendor/glew-cmake-2.2.0/config/config.guess new file mode 100644 index 0000000..1972fda --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/config.guess @@ -0,0 +1,1700 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2021 Free Software Foundation, Inc. + +timestamp='2021-01-25' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess +# +# Please send patches to . + + +me=$(echo "$0" | sed -e 's,.*/,,') + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2021 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 + +set_cc_for_build() { + # prevent multiple calls if $tmp is already set + test "$tmp" && return 0 + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039 + { tmp=$( (umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null) && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) echo "int x;" > "$dummy.c" + for driver in cc gcc c89 c99 ; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD="$driver" + break + fi + done + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; + esac +} + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if test -f /.attbin/uname ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=$( (uname -m) 2>/dev/null) || UNAME_MACHINE=unknown +UNAME_RELEASE=$( (uname -r) 2>/dev/null) || UNAME_RELEASE=unknown +UNAME_SYSTEM=$( (uname -s) 2>/dev/null) || UNAME_SYSTEM=unknown +UNAME_VERSION=$( (uname -v) 2>/dev/null) || UNAME_VERSION=unknown + +case "$UNAME_SYSTEM" in +Linux|GNU|GNU/*) + LIBC=unknown + + set_cc_for_build + cat <<-EOF > "$dummy.c" + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #elif defined(__GLIBC__) + LIBC=gnu + #else + #include + /* First heuristic to detect musl libc. */ + #ifdef __DEFINED_va_list + LIBC=musl + #endif + #endif + EOF + eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')" + + # Second heuristic to detect musl libc. + if [ "$LIBC" = unknown ] && + command -v ldd >/dev/null && + ldd --version 2>&1 | grep -q ^musl; then + LIBC=musl + fi + + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + if [ "$LIBC" = unknown ]; then + LIBC=gnu + fi + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || \ + /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + echo unknown)) + case "$UNAME_MACHINE_ARCH" in + aarch64eb) machine=aarch64_be-unknown ;; + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + earmv*) + arch=$(echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,') + endian=$(echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p') + machine="${arch}${endian}"-unknown + ;; + *) machine="$UNAME_MACHINE_ARCH"-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently (or will in the future) and ABI. + case "$UNAME_MACHINE_ARCH" in + earm*) + os=netbsdelf + ;; + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # Determine ABI tags. + case "$UNAME_MACHINE_ARCH" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr") + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "$UNAME_VERSION" in + Debian*) + release='-gnu' + ;; + *) + release=$(echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2) + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "$machine-${os}${release}${abi-}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//') + echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//') + echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" + exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//') + echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" + exit ;; + *:MidnightBSD:*:*) + echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" + exit ;; + *:ekkoBSD:*:*) + echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" + exit ;; + *:SolidBSD:*:*) + echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" + exit ;; + *:OS108:*:*) + echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE" + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:MirBSD:*:*) + echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:Sortix:*:*) + echo "$UNAME_MACHINE"-unknown-sortix + exit ;; + *:Twizzler:*:*) + echo "$UNAME_MACHINE"-unknown-twizzler + exit ;; + *:Redox:*:*) + echo "$UNAME_MACHINE"-unknown-redox + exit ;; + mips:OSF1:*.*) + echo mips-dec-osf1 + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $3}') + ;; + *5.*) + UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $4}') + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=$(/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1) + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE=alpha ;; + "EV4.5 (21064)") + UNAME_MACHINE=alpha ;; + "LCA4 (21066/21068)") + UNAME_MACHINE=alpha ;; + "EV5 (21164)") + UNAME_MACHINE=alphaev5 ;; + "EV5.6 (21164A)") + UNAME_MACHINE=alphaev56 ;; + "EV5.6 (21164PC)") + UNAME_MACHINE=alphapca56 ;; + "EV5.7 (21164PC)") + UNAME_MACHINE=alphapca57 ;; + "EV6 (21264)") + UNAME_MACHINE=alphaev6 ;; + "EV6.7 (21264A)") + UNAME_MACHINE=alphaev67 ;; + "EV6.8CB (21264C)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8AL (21264B)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8CX (21264D)") + UNAME_MACHINE=alphaev68 ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE=alphaev69 ;; + "EV7 (21364)") + UNAME_MACHINE=alphaev7 ;; + "EV7.9 (21364A)") + UNAME_MACHINE=alphaev79 ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo "$UNAME_MACHINE"-dec-osf"$(echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)" + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix"$UNAME_RELEASE" + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "$( (/bin/universe) 2>/dev/null)" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case $(/usr/bin/uname -p) in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo "$UNAME_MACHINE"-ibm-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux"$UNAME_RELEASE" + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + set_cc_for_build + SUN_ARCH=i386 + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH=x86_64 + fi + fi + echo "$SUN_ARCH"-pc-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" + exit ;; + sun4*:SunOS:*:*) + case "$(/usr/bin/arch -k)" in + Series*|S4*) + UNAME_RELEASE=$(uname -v) + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/')" + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos"$UNAME_RELEASE" + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=$( (sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null) + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 + case "$(/bin/arch)" in + sun3) + echo m68k-sun-sunos"$UNAME_RELEASE" + ;; + sun4) + echo sparc-sun-sunos"$UNAME_RELEASE" + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos"$UNAME_RELEASE" + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint"$UNAME_RELEASE" + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint"$UNAME_RELEASE" + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint"$UNAME_RELEASE" + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten"$UNAME_RELEASE" + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten"$UNAME_RELEASE" + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix"$UNAME_RELEASE" + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix"$UNAME_RELEASE" + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix"$UNAME_RELEASE" + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=$(echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p') && + SYSTEM_NAME=$("$dummy" "$dummyarg") && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos"$UNAME_RELEASE" + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=$(/usr/bin/uname -p) + if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 + then + if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ + test "$TARGET_BINARY_INTERFACE"x = x + then + echo m88k-dg-dgux"$UNAME_RELEASE" + else + echo m88k-dg-dguxbcs"$UNAME_RELEASE" + fi + else + echo i586-dg-dgux"$UNAME_RELEASE" + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/g')" + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'$(uname -s)'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if test -x /usr/bin/oslevel ; then + IBM_REV=$(/usr/bin/oslevel) + else + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + fi + echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=$(/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }') + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if test -x /usr/bin/lslpp ; then + IBM_REV=$(/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/) + else + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + fi + echo "$IBM_ARCH"-ibm-aix"$IBM_REV" + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//') + case "$UNAME_MACHINE" in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if test -x /usr/bin/getconf; then + sc_cpu_version=$(/usr/bin/getconf SC_CPU_VERSION 2>/dev/null) + sc_kernel_bits=$(/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null) + case "$sc_cpu_version" in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "$sc_kernel_bits" in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 + esac ;; + esac + fi + if test "$HP_ARCH" = ""; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=$("$dummy") + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if test "$HP_ARCH" = hppa2.0w + then + set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH=hppa2.0w + else + HP_ARCH=hppa64 + fi + fi + echo "$HP_ARCH"-hp-hpux"$HPUX_REV" + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//') + echo ia64-hp-hpux"$HPUX_REV" + exit ;; + 3050*:HI-UX:*:*) + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if test -x /usr/sbin/sysversion ; then + echo "$UNAME_MACHINE"-unknown-osf1mk + else + echo "$UNAME_MACHINE"-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=$(uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz) + FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///') + FUJITSU_REL=$(echo "$UNAME_RELEASE" | sed -e 's/ /_/') + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///') + FUJITSU_REL=$(echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/') + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi"$UNAME_RELEASE" + exit ;; + *:BSD/OS:*:*) + echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" + exit ;; + arm:FreeBSD:*:*) + UNAME_PROCESSOR=$(uname -p) + set_cc_for_build + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabi + else + echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabihf + fi + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=$(/usr/bin/uname -p) + case "$UNAME_PROCESSOR" in + amd64) + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; + esac + echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')" + exit ;; + i*:CYGWIN*:*) + echo "$UNAME_MACHINE"-pc-cygwin + exit ;; + *:MINGW64*:*) + echo "$UNAME_MACHINE"-pc-mingw64 + exit ;; + *:MINGW*:*) + echo "$UNAME_MACHINE"-pc-mingw32 + exit ;; + *:MSYS*:*) + echo "$UNAME_MACHINE"-pc-msys + exit ;; + i*:PW*:*) + echo "$UNAME_MACHINE"-pc-pw32 + exit ;; + *:Interix*:*) + case "$UNAME_MACHINE" in + x86) + echo i586-pc-interix"$UNAME_RELEASE" + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix"$UNAME_RELEASE" + exit ;; + IA64) + echo ia64-unknown-interix"$UNAME_RELEASE" + exit ;; + esac ;; + i*:UWIN*:*) + echo "$UNAME_MACHINE"-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-pc-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" + exit ;; + *:GNU:*:*) + # the GNU system + echo "$(echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE"|sed -e 's,/.*$,,')" + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')-$LIBC" + exit ;; + *:Minix:*:*) + echo "$UNAME_MACHINE"-unknown-minix + exit ;; + aarch64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + alpha:Linux:*:*) + case $(sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null) in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + arm*:Linux:*:*) + set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi + else + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + cris:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit ;; + crisv32:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit ;; + e2k:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + frv:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + hexagon:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + i*86:Linux:*:*) + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + exit ;; + ia64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + k1om:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + m32r*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + m68*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + set_cc_for_build + IS_GLIBC=0 + test x"${LIBC}" = xgnu && IS_GLIBC=1 + sed 's/^ //' << EOF > "$dummy.c" + #undef CPU + #undef mips + #undef mipsel + #undef mips64 + #undef mips64el + #if ${IS_GLIBC} && defined(_ABI64) + LIBCABI=gnuabi64 + #else + #if ${IS_GLIBC} && defined(_ABIN32) + LIBCABI=gnuabin32 + #else + LIBCABI=${LIBC} + #endif + #endif + + #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa64r6 + #else + #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa32r6 + #else + #if defined(__mips64) + CPU=mips64 + #else + CPU=mips + #endif + #endif + #endif + + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + MIPS_ENDIAN=el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + MIPS_ENDIAN= + #else + MIPS_ENDIAN= + #endif + #endif +EOF + eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')" + test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } + ;; + mips64el:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-"$LIBC" + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-"$LIBC" + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-"$LIBC" + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case $(grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2) in + PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; + PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; + *) echo hppa-unknown-linux-"$LIBC" ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-"$LIBC" + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-"$LIBC" + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-"$LIBC" + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-"$LIBC" + exit ;; + riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" + exit ;; + sh64*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + sh*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + tile*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + vax:Linux:*:*) + echo "$UNAME_MACHINE"-dec-linux-"$LIBC" + exit ;; + x86_64:Linux:*:*) + set_cc_for_build + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_X32 >/dev/null + then + LIBCABI="$LIBC"x32 + fi + fi + echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI" + exit ;; + xtensa*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo "$UNAME_MACHINE"-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo "$UNAME_MACHINE"-unknown-stop + exit ;; + i*86:atheos:*:*) + echo "$UNAME_MACHINE"-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo "$UNAME_MACHINE"-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos"$UNAME_RELEASE" + exit ;; + i*86:*DOS:*:*) + echo "$UNAME_MACHINE"-pc-msdosdjgpp + exit ;; + i*86:*:4.*:*) + UNAME_REL=$(echo "$UNAME_RELEASE" | sed 's/\/MP$//') + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" + else + echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case $(/bin/uname -X | grep "^Machine") in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}" + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=$(sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=$( (/bin/uname -X|grep Release|sed -e 's/.*= //')) + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" + else + echo "$UNAME_MACHINE"-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configure will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos"$UNAME_RELEASE" + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos"$UNAME_RELEASE" + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos"$UNAME_RELEASE" + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos"$UNAME_RELEASE" + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv"$UNAME_RELEASE" + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=$( (uname -p) 2>/dev/null) + echo "$UNAME_MACHINE"-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo "$UNAME_MACHINE"-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux"$UNAME_RELEASE" + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if test -d /usr/nec; then + echo mips-nec-sysv"$UNAME_RELEASE" + else + echo mips-unknown-sysv"$UNAME_RELEASE" + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux"$UNAME_RELEASE" + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux"$UNAME_RELEASE" + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux"$UNAME_RELEASE" + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux"$UNAME_RELEASE" + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux"$UNAME_RELEASE" + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux"$UNAME_RELEASE" + exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux"$UNAME_RELEASE" + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody"$UNAME_RELEASE" + exit ;; + *:Rhapsody:*:*) + echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" + exit ;; + arm64:Darwin:*:*) + echo aarch64-apple-darwin"$UNAME_RELEASE" + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=$(uname -p) + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + if command -v xcode-select > /dev/null 2> /dev/null && \ + ! xcode-select --print-path > /dev/null 2> /dev/null ; then + # Avoid executing cc if there is no toolchain installed as + # cc will be a stub that puts up a graphical alert + # prompting the user to install developer tools. + CC_FOR_BUILD=no_compiler_found + else + set_cc_for_build + fi + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # uname -m returns i386 or x86_64 + UNAME_PROCESSOR=$UNAME_MACHINE + fi + echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=$(uname -p) + if test "$UNAME_PROCESSOR" = x86; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-*:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSR-*:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSV-*:NONSTOP_KERNEL:*:*) + echo nsv-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk"$UNAME_RELEASE" + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + # shellcheck disable=SC2154 + if test "$cputype" = 386; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo "$UNAME_MACHINE"-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux"$UNAME_RELEASE" + exit ;; + *:DragonFly:*:*) + echo "$UNAME_MACHINE"-unknown-dragonfly"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')" + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=$( (uname -p) 2>/dev/null) + case "$UNAME_MACHINE" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo "$UNAME_MACHINE"-pc-skyos"$(echo "$UNAME_RELEASE" | sed -e 's/ .*$//')" + exit ;; + i*86:rdos:*:*) + echo "$UNAME_MACHINE"-pc-rdos + exit ;; + *:AROS:*:*) + echo "$UNAME_MACHINE"-unknown-aros + exit ;; + x86_64:VMkernel:*:*) + echo "$UNAME_MACHINE"-unknown-esx + exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; + *:Unleashed:*:*) + echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" + exit ;; +esac + +# No uname command or uname output not recognized. +set_cc_for_build +cat > "$dummy.c" < +#include +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#include +#if defined(_SIZE_T_) || defined(SIGLOST) +#include +#endif +#endif +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=$( (hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null); + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); +#endif + +#if defined (vax) +#if !defined (ultrix) +#include +#if defined (BSD) +#if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +#else +#if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#endif +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#else +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname un; + uname (&un); + printf ("vax-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname *un; + uname (&un); + printf ("mips-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("mips-dec-ultrix\n"); exit (0); +#endif +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=$($dummy) && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. +test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } + +echo "$0: unable to guess system type" >&2 + +case "$UNAME_MACHINE:$UNAME_SYSTEM" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 <&2 </dev/null || echo unknown) +uname -r = $( (uname -r) 2>/dev/null || echo unknown) +uname -s = $( (uname -s) 2>/dev/null || echo unknown) +uname -v = $( (uname -v) 2>/dev/null || echo unknown) + +/usr/bin/uname -p = $( (/usr/bin/uname -p) 2>/dev/null) +/bin/uname -X = $( (/bin/uname -X) 2>/dev/null) + +hostinfo = $( (hostinfo) 2>/dev/null) +/bin/universe = $( (/bin/universe) 2>/dev/null) +/usr/bin/arch -k = $( (/usr/bin/arch -k) 2>/dev/null) +/bin/arch = $( (/bin/arch) 2>/dev/null) +/usr/bin/oslevel = $( (/usr/bin/oslevel) 2>/dev/null) +/usr/convex/getsysinfo = $( (/usr/convex/getsysinfo) 2>/dev/null) + +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" +EOF +fi + +exit 1 + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/vendor/glew-cmake-2.2.0/config/version b/vendor/glew-cmake-2.2.0/config/version new file mode 100644 index 0000000..10f22c3 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/config/version @@ -0,0 +1,7 @@ +GLEW_MAJOR = 2 +GLEW_MINOR = 2 +GLEW_MICRO = 0 +GLEW_VERSION = $(GLEW_MAJOR).$(GLEW_MINOR).$(GLEW_MICRO) +GLEW_NAME = GLEW +SO_MAJOR = $(GLEW_MAJOR).$(GLEW_MINOR) +SO_VERSION = $(GLEW_VERSION) diff --git a/vendor/glew-cmake-2.2.0/doc/advanced.html b/vendor/glew-cmake-2.2.0/doc/advanced.html new file mode 100644 index 0000000..4c219fc --- /dev/null +++ b/vendor/glew-cmake-2.2.0/doc/advanced.html @@ -0,0 +1,230 @@ + + + + + +GLEW: The OpenGL Extension Wrangler Library + + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
Latest Release: 2.2.0

GLEW Logo

+ + + + + + + + + + + + + +
Download
Usage
Building
Installation
Source Generation
Change Log

GitHub
Issues
Pull Requests

SourceForge Page
+

+
+ + + + +
Last Update: 03-15-20
+ OpenGL Logo
+ GitHub Logo
+ Travis Logo
+ SourceForge Logo +
+
+
+ +

The OpenGL Extension Wrangler Library

+ + + + +

Automatic Code Generation

+ +

+Starting from release 1.1.0, the source code and parts of the +documentation are automatically generated from the extension +specifications in a two-step process. In the first step, +specification files from the OpenGL registry are downloaded and +parsed. Skeleton descriptors are created for each extension. These +descriptors contain all necessary information for creating the source +code and documentation in a simple and compact format, including the +name of the extension, url link to the specification, tokens, function +declarations, typedefs and struct definitions. In the second step, +the header files as well as the library and glewinfo source are +generated from the descriptor files. The code generation scripts are +located in the auto subdirectory. +

+ +

+The code generation scripts require GNU make, wget, and perl. On +Windows, the simplest way to get access to these tools is to install +Cygwin, but make sure that the +root directory is mounted in binary mode. The makefile in the +auto directory provides the following build targets: +

+ + + + + + + + + + + + +
makeCreate the source files from the descriptors.
If the +descriptors do not exist, create them from the spec files.
If the spec +files do not exist, download them from the OpenGL repository.
make cleanDelete the source files.
make clobberDelete the source files and the descriptors.
make destroyDelete the source files, the descriptors, and the spec files.
make customCreate the source files for the extensions +listed in auto/custom.txt.
See "Custom Code +Generation" below for more details.
+ +

Adding a New Extension

+ +

+To add a new extension, create a descriptor file for the extension in +auto/core and rerun the code generation scripts by typing +make clean; make in the auto directory. +

+ +

+The format of the descriptor file is given below. Items in +brackets are optional. +

+ +

+<Extension Name>
+[<URL of Specification File>]
+    [<Token Name> <Token Value>]
+    [<Token Name> <Token Value>]
+    ...
+    [<Typedef>]
+    [<Typedef>]
+    ...
+    [<Function Signature>]
+    [<Function Signature>]
+    ...
+ +

+ + + +

+Take a look at one of the files in auto/core for an +example. Note that typedefs and function signatures should not be +terminated with a semicolon. +

+ +

Custom Code Generation

+

+Starting from GLEW 1.3.0, it is possible to control which extensions +to include in the library by specifying a list in +auto/custom.txt. This is useful when you do not need all the +extensions and would like to reduce the size of the source files. +Type make clean; make custom in the auto directory +to rerun the scripts with the custom list of extensions. +

+ +

+For example, the following is the list of extensions needed to get GLEW and the +utilities to compile. +

+ +

+WGL_ARB_extensions_string
+WGL_ARB_multisample
+WGL_ARB_pixel_format
+WGL_ARB_pbuffer
+WGL_EXT_extensions_string
+WGL_ATI_pixel_format_float
+WGL_NV_float_buffer
+

+ +

Separate Namespace

+ +

+To avoid name clashes when linking with libraries that include the +same symbols, extension entry points are declared in a separate +namespace (release 1.1.0 and up). This is achieved by aliasing OpenGL +function names to their GLEW equivalents. For instance, +glFancyFunction is simply an alias to +glewFancyFunction. The separate namespace does not effect +token and function pointer definitions. +

+ +

Known Issues

+ +

+GLEW requires GLX 1.2 for compatibility with GLUT. +

+ + +
+ + diff --git a/vendor/glew-cmake-2.2.0/doc/basic.html b/vendor/glew-cmake-2.2.0/doc/basic.html new file mode 100644 index 0000000..2372118 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/doc/basic.html @@ -0,0 +1,280 @@ + + + + + +GLEW: The OpenGL Extension Wrangler Library + + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
Latest Release: 2.2.0

GLEW Logo

+ + + + + + + + + + + + + +
Download
Usage
Building
Installation
Source Generation
Change Log

GitHub
Issues
Pull Requests

SourceForge Page
+

+
+ + + + +
Last Update: 03-15-20
+ OpenGL Logo
+ GitHub Logo
+ Travis Logo
+ SourceForge Logo +
+
+
+ +

The OpenGL Extension Wrangler Library

+ + + + +

Initializing GLEW

+

+First you need to create a valid OpenGL rendering context and call +glewInit() to initialize the extension entry points. If +glewInit() returns GLEW_OK, the initialization +succeeded and you can use the available extensions as well as core +OpenGL functionality. For example: +

+ +

+#include <GL/glew.h>
+#include <GL/glut.h>
+...
+glutInit(&argc, argv);
+glutCreateWindow("GLEW Test");
+GLenum err = glewInit();
+if (GLEW_OK != err)
+{
+  /* Problem: glewInit failed, something is seriously wrong. */
+  fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
+  ...
+}
+fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
+

+ +

Checking for Extensions

+ +

+Starting from GLEW 1.1.0, you can find out if a particular extension +is available on your platform by querying globally defined variables +of the form GLEW_{extension_name}: +

+ +

+if (GLEW_ARB_vertex_program)
+{
+  /* It is safe to use the ARB_vertex_program extension here. */
+  glGenProgramsARB(...);
+}
+

+ +

+In GLEW 1.0.x, a global structure was used for this task. To ensure +binary compatibility between releases, the struct was replaced with a +set of variables. +

+ +

+You can also check for core OpenGL functionality. For example, to +see if OpenGL 1.3 is supported, do the following: +

+ +

+if (GLEW_VERSION_1_3)
+{
+  /* Yay! OpenGL 1.3 is supported! */
+}
+

+ +

+In general, you can check if GLEW_{extension_name} or +GLEW_VERSION_{version} is true or false. +

+ +

+It is also possible to perform extension checks from string +input. Starting from the 1.3.0 release, use glewIsSupported +to check if the required core or extension functionality is +available: +

+ +

+if (glewIsSupported("GL_VERSION_1_4  GL_ARB_point_sprite"))
+{
+  /* Great, we have OpenGL 1.4 + point sprites. */
+}
+

+ +

+For extensions only, glewGetExtension provides a slower alternative +(GLEW 1.0.x-1.2.x). Note that in the 1.3.0 release +glewGetExtension was replaced with +glewIsSupported. +

+ +

+if (glewGetExtension("GL_ARB_fragment_program"))
+{
+  /* Looks like ARB_fragment_program is supported. */
+}
+

+ +

Experimental Drivers

+ +

+GLEW obtains information on the supported extensions from the graphics +driver. Experimental or pre-release drivers, however, might not +report every available extension through the standard mechanism, in +which case GLEW will report it unsupported. To circumvent this +situation, the glewExperimental global switch can be turned +on by setting it to GL_TRUE before calling +glewInit(), which ensures that all extensions with valid +entry points will be exposed. +

+ +

Platform Specific Extensions

+ +

+Platform specific extensions are separated into two header files: +wglew.h and glxew.h, which define the available +WGL and GLX extensions. To determine if a certain +extension is supported, query WGLEW_{extension name} or +GLXEW_{extension_name}. For example: +

+ +

+#include <GL/wglew.h>
+
+if (WGLEW_ARB_pbuffer)
+{
+  /* OK, we can use pbuffers. */
+}
+else
+{
+  /* Sorry, pbuffers will not work on this platform. */
+}
+

+ +

+Alternatively, use wglewIsSupported or +glxewIsSupported to check for extensions from a string: +

+ +

+if (wglewIsSupported("WGL_ARB_pbuffer"))
+{
+  /* OK, we can use pbuffers. */
+}
+

+ +

Utilities

+ +

+GLEW provides two command-line utilities: one for creating a list of +available extensions and visuals; and another for verifying extension +entry points. +

+ +

visualinfo: extensions and visuals

+ +

+visualinfo is an extended version of glxinfo. The +Windows version creates a file called visualinfo.txt, which +contains a list of available OpenGL, WGL, and GLU extensions as well +as a table of visuals aka. pixel formats. Pbuffer and MRT capable +visuals are also included. For additional usage information, type +visualinfo -h. +

+ +

glewinfo: extension verification utility

+ +

+glewinfo allows you to verify the entry points for the +extensions supported on your platform. The Windows version +reports the results to a text file called glewinfo.txt. The +Unix version prints the results to stdout. +

+ +

Windows usage:

+
glewinfo [-pf <id>]
+ +

where <id> is the pixel format id for which the +capabilities are displayed.

+ +

Unix usage:

+
glewinfo [-display <dpy>] [-visual <id>]
+ +

where <dpy> is the X11 display and <id> is +the visual id for which the capabilities are displayed.

+ + +
+ + diff --git a/vendor/glew-cmake-2.2.0/doc/build.html b/vendor/glew-cmake-2.2.0/doc/build.html new file mode 100644 index 0000000..491c521 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/doc/build.html @@ -0,0 +1,149 @@ + + + + + +GLEW: The OpenGL Extension Wrangler Library + + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
Latest Release: 2.2.0

GLEW Logo

+ + + + + + + + + + + + + +
Download
Usage
Building
Installation
Source Generation
Change Log

GitHub
Issues
Pull Requests

SourceForge Page
+

+
+ + + + +
Last Update: 03-15-20
+ OpenGL Logo
+ GitHub Logo
+ Travis Logo
+ SourceForge Logo +
+
+
+ +

The OpenGL Extension Wrangler Library

+ + + + +

Building GLEW

+ +

Windows

+ +

A MS Visual Studio project is provided in the build/vc6 directory.

+

Pre-built shared and static libraries are also available for download.

+ +

Makefile

+ +

For platforms other than MS Windows, the provided Makefile is used.

+ +

Command-line variables

+ + + + + + +
SYSTEMautoTarget system to build: darwin, linux, solaris, etc.
For a full list of supported targets: ls config/Makefile.*
+config.guess is used to auto detect, as necessary.
GLEW_DEST/usrBase directory for installation.
+ +

Make targets

+ + + + + + + + + + + + +
allBuild everything.
glew.libBuild static and dynamic GLEW libraries.
glew.lib.mxBuild static and dynamic GLEWmx libraries.
glew.binBuild glewinfo and visualinfo utilities.
cleanDelete temporary and built files.
install.allInstall everything.
installInstall GLEW libraries.
install.mxInstall GLEWmx libraries.
install.binInstall glewinfo and visualinfo utilities.
uninstallDelete installed files.
+ +

Requirements

+ +
    +
  • GNU make
  • +
  • perl
  • +
  • wget
  • +
  • GNU sed
  • +
  • gcc compiler
  • +
  • git
  • +
+ +Ubuntu:
sudo apt-get install libXmu-dev libXi-dev libgl-dev dos2unix git wget
+Fedora:
sudo yum install libXmu-devel libXi-devel libGL-devel dos2unix git wget
+ +
+ + diff --git a/vendor/glew-cmake-2.2.0/doc/credits.html b/vendor/glew-cmake-2.2.0/doc/credits.html new file mode 100644 index 0000000..0f5c18e --- /dev/null +++ b/vendor/glew-cmake-2.2.0/doc/credits.html @@ -0,0 +1,102 @@ + + + + + +GLEW: The OpenGL Extension Wrangler Library + + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
Latest Release: 2.2.0

GLEW Logo

+ + + + + + + + + + + + + +
Download
Usage
Building
Installation
Source Generation
Change Log

GitHub
Issues
Pull Requests

SourceForge Page
+

+
+ + + + +
Last Update: 03-15-20
+ OpenGL Logo
+ GitHub Logo
+ Travis Logo
+ SourceForge Logo +
+
+
+ +

The OpenGL Extension Wrangler Library

+ + + + +

+Author, copyright and licensing information on github.

+ +
+ + diff --git a/vendor/glew-cmake-2.2.0/doc/github.png b/vendor/glew-cmake-2.2.0/doc/github.png new file mode 100644 index 0000000000000000000000000000000000000000..540f7c0b150fc74a9d6c5a3f624fb9db3e3a2941 GIT binary patch literal 1219 zcmV;!1U&nRP)8Mw00002VoOIv0RM-N z%)bBt010qNS#tmY3ljhU3ljkVnw%H_000McNliru-vJm5D>gTw!wvud1XM{xK~zY` z?bcg}UG)_P@ZUc7IcF|enbJ;eBx96`rdCZ$5g$?`N@=k#QWR0z5+xKWv>>G~rQ(ZF zLGYy&OCL%rw#C|e!3PD24{fPRy`f{GsS*<$P5fsZ%v{cyv-@!NoH=vJ1lkuLvi8f~ z|I0ex`qp>WTAa7@_J3P^>;P?x)+)Hz6lAP>k8=bR=L|U;+)jvZIp_l9mdyC2-=qa% z*heYvofx=La+%K=@=kgZV#w7#BQw+c-T)_aqcL66UQFF{Bqv(&Oyp~xS7I;m&3HZD zj;nhtMHX4XRWt63rO0Et@UbhNjy&>s<1D{15+@^%cKjrUH`}iavf^*{fhCK`lpXa- zOuEw)9xSCR3ms1F zST^H~ivM8P4}1f^cKbk@%j=R}K5GI>eOQAetOY}ao8>Ym+}G0y(NxAU4?C{zAuM=b zyT?V8S6uev%!`$rC@INxC)(l1t)(izawa!SPo zF>SxglyGHy&%CEBuCNgji+y<9<|1?c>@8g7>*nHLUMSd^a+lqPy%&$Cr`ItP5}}E< zmx#KZnng@AxYd`{T;hlaT%v@}yVN`0un2a>gKE*yw5JCy8t$;qtZ8p4xzZ1{{mir+ zHP^e&uuRAGaZh?|g`3KXVziXdb{ISS*j2jd`jell*{-Bv+@2zcnwpZ4B0=N6Q)s5# z*T#^Fk%IXOs_F%cnUTJiDc_Cf)0=ArMMVj@dDKj}$i*(U%Y;gi`EGj7L5Fnkj9VP= ztXAQ^rlzJkAkduR-g@hJ#JC|($Ypl<>;?hr=%Q>K9j6@kN!1Mn@=;T+!N1e*h=!^h zr~F>UvLV;H@SNp+!C|LUHy(4XrkZUVH8ZD!nmst~UOaAcgQJF~j6NehJDR@TYa)JS z$6!_8)G{??T`yYDRMK1nCc(QtLfI8Dnm+VA@!=K@7uVE_6{U=+uRFI4+8b88Xvm7f zX}xCt>2&+j73;l--}ImlgmUjl>Uh*2b z$;_q`#Hd?cW5Hk26ESSk`)MX7)tyQw<4bNb>dExm_04jN`71V==gv08#g_LrpYG!0 hH{_nT^Y*{me*tLCU3U + + + + +GLEW: The OpenGL Extension Wrangler Library + + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
Latest Release: 2.2.0

GLEW Logo

+ + + + + + + + + + + + + +
Download
Usage
Building
Installation
Source Generation
Change Log

GitHub
Issues
Pull Requests

SourceForge Page
+

+
+ + + + +
Last Update: 03-15-20
+ OpenGL Logo
+ GitHub Logo
+ Travis Logo
+ SourceForge Logo +
+
+
+ +

The OpenGL Extension Wrangler Library

+ + + + +

Supported OpenGL Extensions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1 3DFX_multisample
2 3DFX_tbuffer
3 3DFX_texture_compression_FXT1

4 AMD_blend_minmax_factor
5 AMD_compressed_3DC_texture
6 AMD_compressed_ATC_texture
7 AMD_conservative_depth
8 AMD_debug_output
9 AMD_depth_clamp_separate
10 AMD_draw_buffers_blend
11 AMD_framebuffer_multisample_advanced
12 AMD_framebuffer_sample_positions
13 AMD_gcn_shader
14 AMD_gpu_shader_half_float
15 AMD_gpu_shader_half_float_fetch
16 AMD_gpu_shader_int16
17 AMD_gpu_shader_int64
18 AMD_interleaved_elements
19 AMD_multi_draw_indirect
20 AMD_name_gen_delete
21 AMD_occlusion_query_event
22 AMD_performance_monitor
23 AMD_pinned_memory
24 AMD_program_binary_Z400
25 AMD_query_buffer_object
26 AMD_sample_positions
27 AMD_seamless_cubemap_per_texture
28 AMD_shader_atomic_counter_ops
29 AMD_shader_ballot
30 AMD_shader_explicit_vertex_parameter
31 AMD_shader_image_load_store_lod
32 AMD_shader_stencil_export
33 AMD_shader_stencil_value_export
34 AMD_shader_trinary_minmax
35 AMD_sparse_texture
36 AMD_stencil_operation_extended
37 AMD_texture_gather_bias_lod
38 AMD_texture_texture4
39 AMD_transform_feedback3_lines_triangles
40 AMD_transform_feedback4
41 AMD_vertex_shader_layer
42 AMD_vertex_shader_tessellator
43 AMD_vertex_shader_viewport_index

44 ANDROID_extension_pack_es31a

45 ANGLE_depth_texture
46 ANGLE_framebuffer_blit
47 ANGLE_framebuffer_multisample
48 ANGLE_instanced_arrays
49 ANGLE_pack_reverse_row_order
50 ANGLE_program_binary
51 ANGLE_texture_compression_dxt1
52 ANGLE_texture_compression_dxt3
53 ANGLE_texture_compression_dxt5
54 ANGLE_texture_usage
55 ANGLE_timer_query
56 ANGLE_translated_shader_source

57 APPLE_aux_depth_stencil
58 APPLE_client_storage
59 APPLE_clip_distance
60 APPLE_color_buffer_packed_float
61 APPLE_copy_texture_levels
62 APPLE_element_array
63 APPLE_fence
64 APPLE_float_pixels
65 APPLE_flush_buffer_range
66 APPLE_framebuffer_multisample
67 APPLE_object_purgeable
68 APPLE_pixel_buffer
69 APPLE_rgb_422
70 APPLE_row_bytes
71 APPLE_specular_vector
72 APPLE_sync
73 APPLE_texture_2D_limited_npot
74 APPLE_texture_format_BGRA8888
75 APPLE_texture_max_level
76 APPLE_texture_packed_float
77 APPLE_texture_range
78 APPLE_transform_hint
79 APPLE_vertex_array_object
80 APPLE_vertex_array_range
81 APPLE_vertex_program_evaluators
82 APPLE_ycbcr_422

83 ARB_ES2_compatibility
84 ARB_ES3_1_compatibility
85 ARB_ES3_2_compatibility
86 ARB_ES3_compatibility
87 ARB_arrays_of_arrays
88 ARB_base_instance
89 ARB_bindless_texture
90 ARB_blend_func_extended
91 ARB_buffer_storage
92 ARB_cl_event
93 ARB_clear_buffer_object
94 ARB_clear_texture
95 ARB_clip_control
96 ARB_color_buffer_float
97 ARB_compatibility
98 ARB_compressed_texture_pixel_storage
99 ARB_compute_shader
100 ARB_compute_variable_group_size
101 ARB_conditional_render_inverted
102 ARB_conservative_depth
103 ARB_copy_buffer
104 ARB_copy_image
105 ARB_cull_distance
106 ARB_debug_output
107 ARB_depth_buffer_float
108 ARB_depth_clamp
109 ARB_depth_texture
110 ARB_derivative_control
111 ARB_direct_state_access
112 ARB_draw_buffers
113 ARB_draw_buffers_blend
114 ARB_draw_elements_base_vertex
115 ARB_draw_indirect
116 ARB_draw_instanced
117 ARB_enhanced_layouts
118 ARB_explicit_attrib_location
119 ARB_explicit_uniform_location
120 ARB_fragment_coord_conventions
121 ARB_fragment_layer_viewport
122 ARB_fragment_program
123 ARB_fragment_program_shadow
124 ARB_fragment_shader
125 ARB_fragment_shader_interlock
126 ARB_framebuffer_no_attachments
127 ARB_framebuffer_object
128 ARB_framebuffer_sRGB
129 ARB_geometry_shader4
130 ARB_get_program_binary
131 ARB_get_texture_sub_image
132 ARB_gl_spirv
133 ARB_gpu_shader5
134 ARB_gpu_shader_fp64
135 ARB_gpu_shader_int64
136 ARB_half_float_pixel
137 ARB_half_float_vertex
138 ARB_imaging
139 ARB_indirect_parameters
140 ARB_instanced_arrays
141 ARB_internalformat_query
142 ARB_internalformat_query2
143 ARB_invalidate_subdata
144 ARB_map_buffer_alignment
145 ARB_map_buffer_range
146 ARB_matrix_palette
147 ARB_multi_bind
148 ARB_multi_draw_indirect
149 ARB_multisample
150 ARB_multitexture
151 ARB_occlusion_query
152 ARB_occlusion_query2
153 ARB_parallel_shader_compile
154 ARB_pipeline_statistics_query
155 ARB_pixel_buffer_object
156 ARB_point_parameters
157 ARB_point_sprite
158 ARB_polygon_offset_clamp
159 ARB_post_depth_coverage
160 ARB_program_interface_query
161 ARB_provoking_vertex
162 ARB_query_buffer_object
163 ARB_robust_buffer_access_behavior
164 ARB_robustness
165 ARB_robustness_application_isolation
166 ARB_robustness_share_group_isolation
167 ARB_sample_locations
168 ARB_sample_shading
169 ARB_sampler_objects
170 ARB_seamless_cube_map
171 ARB_seamless_cubemap_per_texture
172 ARB_separate_shader_objects
173 ARB_shader_atomic_counter_ops
174 ARB_shader_atomic_counters
175 ARB_shader_ballot
176 ARB_shader_bit_encoding
177 ARB_shader_clock
178 ARB_shader_draw_parameters
179 ARB_shader_group_vote
180 ARB_shader_image_load_store
181 ARB_shader_image_size
182 ARB_shader_objects
183 ARB_shader_precision
184 ARB_shader_stencil_export
185 ARB_shader_storage_buffer_object
186 ARB_shader_subroutine
187 ARB_shader_texture_image_samples
188 ARB_shader_texture_lod
189 ARB_shader_viewport_layer_array
190 ARB_shading_language_100
191 ARB_shading_language_420pack
192 ARB_shading_language_include
193 ARB_shading_language_packing
194 ARB_shadow
195 ARB_shadow_ambient
196 ARB_sparse_buffer
197 ARB_sparse_texture
198 ARB_sparse_texture2
199 ARB_sparse_texture_clamp
200 ARB_spirv_extensions
201 ARB_stencil_texturing
202 ARB_sync
203 ARB_tessellation_shader
204 ARB_texture_barrier
205 ARB_texture_border_clamp
206 ARB_texture_buffer_object
207 ARB_texture_buffer_object_rgb32
208 ARB_texture_buffer_range
209 ARB_texture_compression
210 ARB_texture_compression_bptc
211 ARB_texture_compression_rgtc
212 ARB_texture_cube_map
213 ARB_texture_cube_map_array
214 ARB_texture_env_add
215 ARB_texture_env_combine
216 ARB_texture_env_crossbar
217 ARB_texture_env_dot3
218 ARB_texture_filter_anisotropic
219 ARB_texture_filter_minmax
220 ARB_texture_float
221 ARB_texture_gather
222 ARB_texture_mirror_clamp_to_edge
223 ARB_texture_mirrored_repeat
224 ARB_texture_multisample
225 ARB_texture_non_power_of_two
226 ARB_texture_query_levels
227 ARB_texture_query_lod
228 ARB_texture_rectangle
229 ARB_texture_rg
230 ARB_texture_rgb10_a2ui
231 ARB_texture_stencil8
232 ARB_texture_storage
233 ARB_texture_storage_multisample
234 ARB_texture_swizzle
235 ARB_texture_view
236 ARB_timer_query
237 ARB_transform_feedback2
238 ARB_transform_feedback3
239 ARB_transform_feedback_instanced
240 ARB_transform_feedback_overflow_query
241 ARB_transpose_matrix
242 ARB_uniform_buffer_object
243 ARB_vertex_array_bgra
244 ARB_vertex_array_object
245 ARB_vertex_attrib_64bit
246 ARB_vertex_attrib_binding
247 ARB_vertex_blend
248 ARB_vertex_buffer_object
249 ARB_vertex_program
250 ARB_vertex_shader
251 ARB_vertex_type_10f_11f_11f_rev
252 ARB_vertex_type_2_10_10_10_rev
253 ARB_viewport_array
254 ARB_window_pos

255 ARM_mali_program_binary
256 ARM_mali_shader_binary
257 ARM_rgba8
258 ARM_shader_framebuffer_fetch
259 ARM_shader_framebuffer_fetch_depth_stencil
260 ARM_texture_unnormalized_coordinates

261 ATIX_point_sprites
262 ATIX_texture_env_combine3
263 ATIX_texture_env_route
264 ATIX_vertex_shader_output_point_size

265 ATI_draw_buffers
266 ATI_element_array
267 ATI_envmap_bumpmap
268 ATI_fragment_shader
269 ATI_map_object_buffer
270 ATI_meminfo
271 ATI_pn_triangles
272 ATI_separate_stencil
273 ATI_shader_texture_lod
274 ATI_text_fragment_shader
275 ATI_texture_compression_3dc
276 ATI_texture_env_combine3
277 ATI_texture_float
278 ATI_texture_mirror_once
279 ATI_vertex_array_object
280 ATI_vertex_attrib_array_object
281 ATI_vertex_streams

282 DMP_program_binary
283 DMP_shader_binary

284 EXT_422_pixels
285 EXT_Cg_shader
286 EXT_EGL_image_array
287 EXT_EGL_image_external_wrap_modes
288 EXT_EGL_image_storage
289 EXT_EGL_image_storage_compression
290 EXT_EGL_sync
291 EXT_YUV_target
292 EXT_abgr
293 EXT_base_instance
294 EXT_bgra
295 EXT_bindable_uniform
296 EXT_blend_color
297 EXT_blend_equation_separate
298 EXT_blend_func_extended
299 EXT_blend_func_separate
300 EXT_blend_logic_op
301 EXT_blend_minmax
302 EXT_blend_subtract
303 EXT_buffer_storage
304 EXT_clear_texture
305 EXT_clip_control
306 EXT_clip_cull_distance
307 EXT_clip_volume_hint
308 EXT_cmyka
309 EXT_color_buffer_float
310 EXT_color_buffer_half_float
311 EXT_color_subtable
312 EXT_compiled_vertex_array
313 EXT_compressed_ETC1_RGB8_sub_texture
314 EXT_conservative_depth
315 EXT_convolution
316 EXT_coordinate_frame
317 EXT_copy_image
318 EXT_copy_texture
319 EXT_cull_vertex
320 EXT_debug_label
321 EXT_debug_marker
322 EXT_depth_bounds_test
323 EXT_depth_clamp
324 EXT_direct_state_access
325 EXT_discard_framebuffer
326 EXT_disjoint_timer_query
327 EXT_draw_buffers
328 EXT_draw_buffers2
329 EXT_draw_buffers_indexed
330 EXT_draw_elements_base_vertex
331 EXT_draw_instanced
332 EXT_draw_range_elements
333 EXT_draw_transform_feedback
334 EXT_external_buffer
335 EXT_float_blend
336 EXT_fog_coord
337 EXT_frag_depth
338 EXT_fragment_lighting
339 EXT_framebuffer_blit
340 EXT_framebuffer_blit_layers
341 EXT_framebuffer_multisample
342 EXT_framebuffer_multisample_blit_scaled
343 EXT_framebuffer_object
344 EXT_framebuffer_sRGB
345 EXT_geometry_point_size
346 EXT_geometry_shader
347 EXT_geometry_shader4
348 EXT_gpu_program_parameters
349 EXT_gpu_shader4
350 EXT_gpu_shader5
351 EXT_histogram
352 EXT_index_array_formats
353 EXT_index_func
354 EXT_index_material
355 EXT_index_texture
356 EXT_instanced_arrays
357 EXT_light_texture
358 EXT_map_buffer_range
359 EXT_memory_object
360 EXT_memory_object_fd
361 EXT_memory_object_win32
362 EXT_misc_attribute
363 EXT_multi_draw_arrays
364 EXT_multi_draw_indirect
365 EXT_multiple_textures
366 EXT_multisample
367 EXT_multisample_compatibility
368 EXT_multisampled_render_to_texture
369 EXT_multisampled_render_to_texture2
370 EXT_multiview_draw_buffers
371 EXT_multiview_tessellation_geometry_shader
372 EXT_multiview_texture_multisample
373 EXT_multiview_timer_query
374 EXT_occlusion_query_boolean
375 EXT_packed_depth_stencil
376 EXT_packed_float
377 EXT_packed_pixels
378 EXT_paletted_texture
379 EXT_pixel_buffer_object
380 EXT_pixel_transform
381 EXT_pixel_transform_color_table
382 EXT_point_parameters
383 EXT_polygon_offset
384 EXT_polygon_offset_clamp
385 EXT_post_depth_coverage
386 EXT_primitive_bounding_box
387 EXT_protected_textures
388 EXT_provoking_vertex
389 EXT_pvrtc_sRGB
390 EXT_raster_multisample
391 EXT_read_format_bgra
392 EXT_render_snorm
393 EXT_rescale_normal
394 EXT_robustness
395 EXT_sRGB
396 EXT_sRGB_write_control
397 EXT_scene_marker
398 EXT_secondary_color
399 EXT_semaphore
400 EXT_semaphore_fd
401 EXT_semaphore_win32
402 EXT_separate_depth_stencil
403 EXT_separate_shader_objects
404 EXT_separate_specular_color
405 EXT_shader_framebuffer_fetch
406 EXT_shader_framebuffer_fetch_non_coherent
407 EXT_shader_group_vote
408 EXT_shader_image_load_formatted
409 EXT_shader_image_load_store
410 EXT_shader_implicit_conversions
411 EXT_shader_integer_mix
412 EXT_shader_io_blocks
413 EXT_shader_non_constant_global_initializers
414 EXT_shader_pixel_local_storage
415 EXT_shader_pixel_local_storage2
416 EXT_shader_samples_identical
417 EXT_shader_texture_lod
418 EXT_shadow_funcs
419 EXT_shadow_samplers
420 EXT_shared_texture_palette
421 EXT_sparse_texture
422 EXT_sparse_texture2
423 EXT_static_vertex_array
424 EXT_stencil_clear_tag
425 EXT_stencil_two_side
426 EXT_stencil_wrap
427 EXT_subtexture
428 EXT_tessellation_point_size
429 EXT_tessellation_shader
430 EXT_texture
431 EXT_texture3D
432 EXT_texture_array
433 EXT_texture_border_clamp
434 EXT_texture_buffer
435 EXT_texture_buffer_object
436 EXT_texture_compression_astc_decode_mode
437 EXT_texture_compression_astc_decode_mode_rgb9e5
438 EXT_texture_compression_bptc
439 EXT_texture_compression_dxt1
440 EXT_texture_compression_latc
441 EXT_texture_compression_rgtc
442 EXT_texture_compression_s3tc
443 EXT_texture_compression_s3tc_srgb
444 EXT_texture_cube_map
445 EXT_texture_cube_map_array
446 EXT_texture_edge_clamp
447 EXT_texture_env
448 EXT_texture_env_add
449 EXT_texture_env_combine
450 EXT_texture_env_dot3
451 EXT_texture_filter_anisotropic
452 EXT_texture_filter_minmax
453 EXT_texture_format_BGRA8888
454 EXT_texture_format_sRGB_override
455 EXT_texture_integer
456 EXT_texture_lod_bias
457 EXT_texture_mirror_clamp
458 EXT_texture_mirror_clamp_to_edge
459 EXT_texture_norm16
460 EXT_texture_object
461 EXT_texture_perturb_normal
462 EXT_texture_query_lod
463 EXT_texture_rectangle
464 EXT_texture_rg
465 EXT_texture_sRGB
466 EXT_texture_sRGB_R8
467 EXT_texture_sRGB_RG8
468 EXT_texture_sRGB_decode
469 EXT_texture_shadow_lod
470 EXT_texture_shared_exponent
471 EXT_texture_snorm
472 EXT_texture_storage
473 EXT_texture_storage_compression
474 EXT_texture_swizzle
475 EXT_texture_type_2_10_10_10_REV
476 EXT_texture_view
477 EXT_timer_query
478 EXT_transform_feedback
479 EXT_unpack_subimage
480 EXT_vertex_array
481 EXT_vertex_array_bgra
482 EXT_vertex_array_setXXX
483 EXT_vertex_attrib_64bit
484 EXT_vertex_shader
485 EXT_vertex_weighting
486 EXT_win32_keyed_mutex
487 EXT_window_rectangles
488 EXT_x11_sync_object

489 FJ_shader_binary_GCCSO

490 GREMEDY_frame_terminator
491 GREMEDY_string_marker

492 HP_convolution_border_modes
493 HP_image_transform
494 HP_occlusion_test
495 HP_texture_lighting

496 IBM_cull_vertex
497 IBM_multimode_draw_arrays
498 IBM_rasterpos_clip
499 IBM_static_data
500 IBM_texture_mirrored_repeat
501 IBM_vertex_array_lists

502 IMG_bindless_texture
503 IMG_framebuffer_downsample
504 IMG_multisampled_render_to_texture
505 IMG_program_binary
506 IMG_pvric_end_to_end_signature
507 IMG_read_format
508 IMG_shader_binary
509 IMG_texture_compression_pvrtc
510 IMG_texture_compression_pvrtc2
511 IMG_texture_env_enhanced_fixed_function
512 IMG_texture_filter_cubic
513 IMG_tile_region_protection

514 INGR_color_clamp
515 INGR_interlace_read

516 INTEL_blackhole_render
517 INTEL_conservative_rasterization
518 INTEL_fragment_shader_ordering
519 INTEL_framebuffer_CMAA
520 INTEL_map_texture
521 INTEL_parallel_arrays
522 INTEL_performance_query
523 INTEL_shader_integer_functions2
524 INTEL_texture_scissor

525 KHR_blend_equation_advanced
526 KHR_blend_equation_advanced_coherent
527 KHR_context_flush_control
528 KHR_debug
529 KHR_no_error
530 KHR_parallel_shader_compile
531 KHR_robust_buffer_access_behavior
532 KHR_robustness
533 KHR_shader_subgroup
534 KHR_texture_compression_astc_hdr
535 KHR_texture_compression_astc_ldr
536 KHR_texture_compression_astc_sliced_3d

537 KTX_buffer_region

538 MESAX_texture_stack

539 MESA_bgra
540 MESA_framebuffer_flip_x
541 MESA_framebuffer_flip_y
542 MESA_framebuffer_swap_xy
543 MESA_pack_invert
544 MESA_program_binary_formats
545 MESA_resize_buffers
546 MESA_shader_integer_functions
547 MESA_tile_raster_order
548 MESA_window_pos
549 MESA_ycbcr_texture

550 NVX_blend_equation_advanced_multi_draw_buffers
551 NVX_conditional_render
552 NVX_gpu_memory_info
553 NVX_gpu_multicast2
554 NVX_linked_gpu_multicast
555 NVX_progress_fence

556 NV_3dvision_settings
557 NV_EGL_stream_consumer_external
558 NV_alpha_to_coverage_dither_control
559 NV_bgr
560 NV_bindless_multi_draw_indirect
561 NV_bindless_multi_draw_indirect_count
562 NV_bindless_texture
563 NV_blend_equation_advanced
564 NV_blend_equation_advanced_coherent
565 NV_blend_minmax_factor
566 NV_blend_square
567 NV_clip_space_w_scaling
568 NV_command_list
569 NV_compute_program5
570 NV_compute_shader_derivatives
571 NV_conditional_render
572 NV_conservative_raster
573 NV_conservative_raster_dilate
574 NV_conservative_raster_pre_snap
575 NV_conservative_raster_pre_snap_triangles
576 NV_conservative_raster_underestimation
577 NV_copy_buffer
578 NV_copy_depth_to_color
579 NV_copy_image
580 NV_deep_texture3D
581 NV_depth_buffer_float
582 NV_depth_clamp
583 NV_depth_nonlinear
584 NV_depth_range_unclamped
585 NV_draw_buffers
586 NV_draw_instanced
587 NV_draw_texture
588 NV_draw_vulkan_image
589 NV_evaluators
590 NV_explicit_attrib_location
591 NV_explicit_multisample
592 NV_fbo_color_attachments
593 NV_fence
594 NV_fill_rectangle
595 NV_float_buffer
596 NV_fog_distance
597 NV_fragment_coverage_to_color
598 NV_fragment_program
599 NV_fragment_program2
600 NV_fragment_program4
601 NV_fragment_program_option
602 NV_fragment_shader_barycentric
603 NV_fragment_shader_interlock
604 NV_framebuffer_blit
605 NV_framebuffer_mixed_samples
606 NV_framebuffer_multisample
607 NV_framebuffer_multisample_coverage
608 NV_generate_mipmap_sRGB
609 NV_geometry_program4
610 NV_geometry_shader4
611 NV_geometry_shader_passthrough
612 NV_gpu_multicast
613 NV_gpu_program4
614 NV_gpu_program5
615 NV_gpu_program5_mem_extended
616 NV_gpu_program_fp64
617 NV_gpu_shader5
618 NV_half_float
619 NV_image_formats
620 NV_instanced_arrays
621 NV_internalformat_sample_query
622 NV_light_max_exponent
623 NV_memory_attachment
624 NV_memory_object_sparse
625 NV_mesh_shader
626 NV_multisample_coverage
627 NV_multisample_filter_hint
628 NV_non_square_matrices
629 NV_occlusion_query
630 NV_pack_subimage
631 NV_packed_depth_stencil
632 NV_packed_float
633 NV_packed_float_linear
634 NV_parameter_buffer_object
635 NV_parameter_buffer_object2
636 NV_path_rendering
637 NV_path_rendering_shared_edge
638 NV_pixel_buffer_object
639 NV_pixel_data_range
640 NV_platform_binary
641 NV_point_sprite
642 NV_polygon_mode
643 NV_present_video
644 NV_primitive_restart
645 NV_primitive_shading_rate
646 NV_query_resource_tag
647 NV_read_buffer
648 NV_read_buffer_front
649 NV_read_depth
650 NV_read_depth_stencil
651 NV_read_stencil
652 NV_register_combiners
653 NV_register_combiners2
654 NV_representative_fragment_test
655 NV_robustness_video_memory_purge
656 NV_sRGB_formats
657 NV_sample_locations
658 NV_sample_mask_override_coverage
659 NV_scissor_exclusive
660 NV_shader_atomic_counters
661 NV_shader_atomic_float
662 NV_shader_atomic_float64
663 NV_shader_atomic_fp16_vector
664 NV_shader_atomic_int64
665 NV_shader_buffer_load
666 NV_shader_noperspective_interpolation
667 NV_shader_storage_buffer_object
668 NV_shader_subgroup_partitioned
669 NV_shader_texture_footprint
670 NV_shader_thread_group
671 NV_shader_thread_shuffle
672 NV_shading_rate_image
673 NV_shadow_samplers_array
674 NV_shadow_samplers_cube
675 NV_stereo_view_rendering
676 NV_tessellation_program5
677 NV_texgen_emboss
678 NV_texgen_reflection
679 NV_texture_array
680 NV_texture_barrier
681 NV_texture_border_clamp
682 NV_texture_compression_latc
683 NV_texture_compression_s3tc
684 NV_texture_compression_s3tc_update
685 NV_texture_compression_vtc
686 NV_texture_env_combine4
687 NV_texture_expand_normal
688 NV_texture_multisample
689 NV_texture_npot_2D_mipmap
690 NV_texture_rectangle
691 NV_texture_rectangle_compressed
692 NV_texture_shader
693 NV_texture_shader2
694 NV_texture_shader3
695 NV_timeline_semaphore
696 NV_transform_feedback
697 NV_transform_feedback2
698 NV_uniform_buffer_std430_layout
699 NV_uniform_buffer_unified_memory
700 NV_vdpau_interop
701 NV_vdpau_interop2
702 NV_vertex_array_range
703 NV_vertex_array_range2
704 NV_vertex_attrib_integer_64bit
705 NV_vertex_buffer_unified_memory
706 NV_vertex_program
707 NV_vertex_program1_1
708 NV_vertex_program2
709 NV_vertex_program2_option
710 NV_vertex_program3
711 NV_vertex_program4
712 NV_video_capture
713 NV_viewport_array
714 NV_viewport_array2
715 NV_viewport_swizzle

716 OES_EGL_image
717 OES_EGL_image_external
718 OES_EGL_image_external_essl3
719 OES_blend_equation_separate
720 OES_blend_func_separate
721 OES_blend_subtract
722 OES_byte_coordinates
723 OES_compressed_ETC1_RGB8_texture
724 OES_compressed_paletted_texture
725 OES_copy_image
726 OES_depth24
727 OES_depth32
728 OES_depth_texture
729 OES_depth_texture_cube_map
730 OES_draw_buffers_indexed
731 OES_draw_texture
732 OES_element_index_uint
733 OES_extended_matrix_palette
734 OES_fbo_render_mipmap
735 OES_fragment_precision_high
736 OES_framebuffer_object
737 OES_geometry_point_size
738 OES_geometry_shader
739 OES_get_program_binary
740 OES_gpu_shader5
741 OES_mapbuffer
742 OES_matrix_get
743 OES_matrix_palette
744 OES_packed_depth_stencil
745 OES_point_size_array
746 OES_point_sprite
747 OES_read_format
748 OES_required_internalformat
749 OES_rgb8_rgba8
750 OES_sample_shading
751 OES_sample_variables
752 OES_shader_image_atomic
753 OES_shader_io_blocks
754 OES_shader_multisample_interpolation
755 OES_single_precision
756 OES_standard_derivatives
757 OES_stencil1
758 OES_stencil4
759 OES_stencil8
760 OES_surfaceless_context
761 OES_tessellation_point_size
762 OES_tessellation_shader
763 OES_texture_3D
764 OES_texture_border_clamp
765 OES_texture_buffer
766 OES_texture_compression_astc
767 OES_texture_cube_map
768 OES_texture_cube_map_array
769 OES_texture_env_crossbar
770 OES_texture_mirrored_repeat
771 OES_texture_npot
772 OES_texture_stencil8
773 OES_texture_storage_multisample_2d_array
774 OES_texture_view
775 OES_vertex_array_object
776 OES_vertex_half_float
777 OES_vertex_type_10_10_10_2

778 OML_interlace
779 OML_resample
780 OML_subsample

781 OVR_multiview
782 OVR_multiview2
783 OVR_multiview_multisampled_render_to_texture

784 PGI_misc_hints
785 PGI_vertex_hints

786 QCOM_YUV_texture_gather
787 QCOM_alpha_test
788 QCOM_binning_control
789 QCOM_driver_control
790 QCOM_extended_get
791 QCOM_extended_get2
792 QCOM_frame_extrapolation
793 QCOM_framebuffer_foveated
794 QCOM_motion_estimation
795 QCOM_perfmon_global_mode
796 QCOM_render_sRGB_R8_RG8
797 QCOM_render_shared_exponent
798 QCOM_shader_framebuffer_fetch_noncoherent
799 QCOM_shader_framebuffer_fetch_rate
800 QCOM_shading_rate
801 QCOM_texture_foveated
802 QCOM_texture_foveated2
803 QCOM_texture_foveated_subsampled_layout
804 QCOM_texture_lod_bias
805 QCOM_tiled_rendering
806 QCOM_writeonly_rendering

807 REGAL_ES1_0_compatibility
808 REGAL_ES1_1_compatibility
809 REGAL_enable
810 REGAL_error_string
811 REGAL_extension_query
812 REGAL_log
813 REGAL_proc_address

814 REND_screen_coordinates

815 S3_s3tc

816 SGIS_clip_band_hint
817 SGIS_color_range
818 SGIS_detail_texture
819 SGIS_fog_function
820 SGIS_generate_mipmap
821 SGIS_line_texgen
822 SGIS_multisample
823 SGIS_multitexture
824 SGIS_pixel_texture
825 SGIS_point_line_texgen
826 SGIS_shared_multisample
827 SGIS_sharpen_texture
828 SGIS_texture4D
829 SGIS_texture_border_clamp
830 SGIS_texture_edge_clamp
831 SGIS_texture_filter4
832 SGIS_texture_lod
833 SGIS_texture_select

834 SGIX_async
835 SGIX_async_histogram
836 SGIX_async_pixel
837 SGIX_bali_g_instruments
838 SGIX_bali_r_instruments
839 SGIX_bali_timer_instruments
840 SGIX_blend_alpha_minmax
841 SGIX_blend_cadd
842 SGIX_blend_cmultiply
843 SGIX_calligraphic_fragment
844 SGIX_clipmap
845 SGIX_color_matrix_accuracy
846 SGIX_color_table_index_mode
847 SGIX_complex_polar
848 SGIX_convolution_accuracy
849 SGIX_cube_map
850 SGIX_cylinder_texgen
851 SGIX_datapipe
852 SGIX_decimation
853 SGIX_depth_pass_instrument
854 SGIX_depth_texture
855 SGIX_dvc
856 SGIX_flush_raster
857 SGIX_fog_blend
858 SGIX_fog_factor_to_alpha
859 SGIX_fog_layers
860 SGIX_fog_offset
861 SGIX_fog_patchy
862 SGIX_fog_scale
863 SGIX_fog_texture
864 SGIX_fragment_lighting_space
865 SGIX_fragment_specular_lighting
866 SGIX_fragments_instrument
867 SGIX_framezoom
868 SGIX_icc_texture
869 SGIX_igloo_interface
870 SGIX_image_compression
871 SGIX_impact_pixel_texture
872 SGIX_instrument_error
873 SGIX_interlace
874 SGIX_ir_instrument1
875 SGIX_line_quality_hint
876 SGIX_list_priority
877 SGIX_mpeg1
878 SGIX_mpeg2
879 SGIX_nonlinear_lighting_pervertex
880 SGIX_nurbs_eval
881 SGIX_occlusion_instrument
882 SGIX_packed_6bytes
883 SGIX_pixel_texture
884 SGIX_pixel_texture_bits
885 SGIX_pixel_texture_lod
886 SGIX_pixel_tiles
887 SGIX_polynomial_ffd
888 SGIX_quad_mesh
889 SGIX_reference_plane
890 SGIX_resample
891 SGIX_scalebias_hint
892 SGIX_shadow
893 SGIX_shadow_ambient
894 SGIX_slim
895 SGIX_spotlight_cutoff
896 SGIX_sprite
897 SGIX_subdiv_patch
898 SGIX_subsample
899 SGIX_tag_sample_buffer
900 SGIX_texture_add_env
901 SGIX_texture_coordinate_clamp
902 SGIX_texture_lod_bias
903 SGIX_texture_mipmap_anisotropic
904 SGIX_texture_multi_buffer
905 SGIX_texture_phase
906 SGIX_texture_range
907 SGIX_texture_scale_bias
908 SGIX_texture_supersample
909 SGIX_vector_ops
910 SGIX_vertex_array_object
911 SGIX_vertex_preclip
912 SGIX_vertex_preclip_hint
913 SGIX_ycrcb
914 SGIX_ycrcb_subsample
915 SGIX_ycrcba

916 SGI_color_matrix
917 SGI_color_table
918 SGI_complex
919 SGI_complex_type
920 SGI_fft
921 SGI_texture_color_table

922 SUNX_constant_data

923 SUN_convolution_border_modes
924 SUN_global_alpha
925 SUN_mesh_array
926 SUN_read_video_pixels
927 SUN_slice_accum
928 SUN_triangle_list
929 SUN_vertex

930 VIV_shader_binary

931 WIN_phong_shading
932 WIN_scene_markerXXX
933 WIN_specular_fog
934 WIN_swap_hint
+ +
+ + diff --git a/vendor/glew-cmake-2.2.0/doc/glew.png b/vendor/glew-cmake-2.2.0/doc/glew.png new file mode 100644 index 0000000000000000000000000000000000000000..d46550f194988fe99362932b29f48aeded97111e GIT binary patch literal 9298 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 SQv}cd07nix*}k?RB>f+9$xcWB literal 0 HcmV?d00001 diff --git a/vendor/glew-cmake-2.2.0/doc/glew.txt b/vendor/glew-cmake-2.2.0/doc/glew.txt new file mode 100644 index 0000000..67b4aff --- /dev/null +++ b/vendor/glew-cmake-2.2.0/doc/glew.txt @@ -0,0 +1,29 @@ +The OpenGL Extension Wrangler Library +Copyright (C) 2008-2016, Nigel Stewart +Copyright (C) 2002-2008, Milan Ikits +Copyright (C) 2002-2008, Marcelo E. Magallon +Copyright (C) 2002, Lev Povalahev +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* The name of the author may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/glew-cmake-2.2.0/doc/glxew.html b/vendor/glew-cmake-2.2.0/doc/glxew.html new file mode 100644 index 0000000..6054051 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/doc/glxew.html @@ -0,0 +1,188 @@ + + + + + +GLEW: The OpenGL Extension Wrangler Library + + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
Latest Release: 2.2.0

GLEW Logo

+ + + + + + + + + + + + + +
Download
Usage
Building
Installation
Source Generation
Change Log

GitHub
Issues
Pull Requests

SourceForge Page
+

+
+ + + + +
Last Update: 03-15-20
+ OpenGL Logo
+ GitHub Logo
+ Travis Logo
+ SourceForge Logo +
+
+
+ +

The OpenGL Extension Wrangler Library

+ + + + +

Supported GLX Extensions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1 3DFX_multisample

2 AMD_gpu_association

3 ARB_context_flush_control
4 ARB_create_context
5 ARB_create_context_no_error
6 ARB_create_context_profile
7 ARB_create_context_robustness
8 ARB_fbconfig_float
9 ARB_framebuffer_sRGB
10 ARB_get_proc_address
11 ARB_multisample
12 ARB_robustness_application_isolation
13 ARB_robustness_share_group_isolation
14 ARB_vertex_buffer_object

15 ATI_pixel_format_float
16 ATI_render_texture

17 EXT_buffer_age
18 EXT_context_priority
19 EXT_create_context_es2_profile
20 EXT_create_context_es_profile
21 EXT_fbconfig_packed_float
22 EXT_framebuffer_sRGB
23 EXT_get_drawable_type
24 EXT_import_context
25 EXT_libglvnd
26 EXT_no_config_context
27 EXT_scene_marker
28 EXT_stereo_tree
29 EXT_swap_control
30 EXT_swap_control_tear
31 EXT_texture_from_pixmap
32 EXT_visual_info
33 EXT_visual_rating

34 INTEL_swap_event

35 MESA_agp_offset
36 MESA_copy_sub_buffer
37 MESA_pixmap_colormap
38 MESA_query_renderer
39 MESA_release_buffers
40 MESA_set_3dfx_mode
41 MESA_swap_control

42 NV_copy_buffer
43 NV_copy_image
44 NV_delay_before_swap
45 NV_float_buffer
46 NV_multigpu_context
47 NV_multisample_coverage
48 NV_present_video
49 NV_robustness_video_memory_purge
50 NV_swap_group
51 NV_vertex_array_range
52 NV_video_capture
53 NV_video_out

54 OML_swap_method
55 OML_sync_control

56 SGIS_blended_overlay
57 SGIS_color_range
58 SGIS_multisample
59 SGIS_shared_multisample

60 SGIX_fbconfig
61 SGIX_hyperpipe
62 SGIX_pbuffer
63 SGIX_swap_barrier
64 SGIX_swap_group
65 SGIX_video_resize
66 SGIX_visual_select_group

67 SGI_cushion
68 SGI_make_current_read
69 SGI_swap_control
70 SGI_video_sync

71 SUN_get_transparent_index
72 SUN_video_resize
+ +
+ + diff --git a/vendor/glew-cmake-2.2.0/doc/gpl.txt b/vendor/glew-cmake-2.2.0/doc/gpl.txt new file mode 100644 index 0000000..b7b5f53 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/doc/gpl.txt @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/vendor/glew-cmake-2.2.0/doc/index.html b/vendor/glew-cmake-2.2.0/doc/index.html new file mode 100644 index 0000000..78ce7a1 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/doc/index.html @@ -0,0 +1,213 @@ + + + + + +GLEW: The OpenGL Extension Wrangler Library + + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
Latest Release: 2.2.0

GLEW Logo

+ + + + + + + + + + + + + +
Download
Usage
Building
Installation
Source Generation
Change Log

GitHub
Issues
Pull Requests

SourceForge Page
+

+
+ + + + +
Last Update: 03-15-20
+ OpenGL Logo
+ GitHub Logo
+ Travis Logo
+ SourceForge Logo +
+
+
+ +

The OpenGL Extension Wrangler Library

+ + + + +

+The OpenGL Extension Wrangler Library (GLEW) is a cross-platform +open-source C/C++ extension loading library. GLEW provides efficient +run-time mechanisms for determining which OpenGL extensions are +supported on the target platform. OpenGL core and extension +functionality is exposed in a single header file. GLEW has been +tested on a variety of operating systems, including Windows, Linux, +Mac OS X, FreeBSD, Irix, and Solaris. +

+ +

Downloads

+

+GLEW is distributed +as source and precompiled binaries.
+The latest release is +2.2.0[03-15-20]: +

+

+

+

+ + + +
+ + + + + + + + + + + + + + + +
Source +ZIP |  +TGZ
Binaries +Windows 32-bit and 64-bit +
+
+ +

+

+An up-to-date copy is also available using git: +

+
    +
  • github
    +git clone https://github.com/nigels-com/glew.git glew
     
  • +
+ +

Supported Extensions

+

+The latest release contains support for OpenGL 4.6, compatibility and forward-compatible contexts and the following extensions: +

+ + +

News

+
    +
  • [03-15-20] GLEW 2.2.0 new extensions and minor bug fixes
  • +
  • [07-31-17] GLEW 2.1.0 adds support for OpenGL 4.6, new extensions and minor bug fixes
  • +
  • [07-24-16] GLEW 2.0.0 adds support for forward-compatible contexts, adds new extensions, OSMesa and EGL support, MX discontinued and minor bug fixes
  • +
  • [08-10-15] GLEW 1.13.0 adds support for new extensions, fixes minor bugs
  • +
  • [26-01-15] GLEW 1.12.0 fixes minor bugs and adds new extensions
  • +
  • [08-11-14] GLEW 1.11.0 adds support for OpenGL 4.5, new extensions
  • +
  • [07-22-13] GLEW 1.10.0 adds support for OpenGL 4.4, new extensions
  • +
  • [08-06-12] GLEW 1.9.0 adds support for OpenGL 4.3, new extensions
  • +
  • [07-17-12] GLEW 1.8.0 fixes minor bugs and adds new extensions
  • +
  • [08-26-11] GLEW 1.7.0 adds support for OpenGL 4.2, new extensions, fixes bugs
  • +
  • [04-27-11] GLEW 1.6.0 fixes minor bugs and adds eight new extensions
  • +
  • [01-31-11] GLEW 1.5.8 fixes minor bugs and adds two new extensions
  • +
  • [11-03-10] GLEW 1.5.7 fixes minor bugs and adds one new extension
  • +
  • [09-07-10] GLEW 1.5.6 adds support for OpenGL 4.1, fixes bugs
  • +
  • [07-13-10] GLEW 1.5.5 fixes minor bugs and adds new extensions
  • +
  • [04-21-10] GLEW 1.5.4 adds support for OpenGL 3.3, OpenGL 4.0 and new extensions, fixes bugs
  • +
  • [02-28-10] GLEW 1.5.3 fixes minor bugs and adds three new extensions
  • +
  • [12-31-09] GLEW 1.5.2 adds support for OpenGL 3.1, OpenGL 3.2 and new extensions
  • +
  • [11-03-08] GLEW 1.5.1 adds support for OpenGL 3.0 and 31 new extensions
  • +
  • [12-27-07] GLEW 1.5.0 is released under less restrictive licenses
  • +
  • [04-27-07] GLEW 1.4.0 is released
  • +
  • [03-08-07] GLEW is included in the NVIDIA OpenGL SDK
  • +
  • [03-04-07] GLEW 1.3.6 is released
  • +
  • [02-28-07] Repository is migrated to SVN
  • +
  • [02-25-07] GLEW is included in the OpenGL SDK
  • +
  • [11-21-06] GLEW 1.3.5 adds OpenGL 2.1 and NVIDIA G80 extensions
  • +
  • [03-04-06] GLEW 1.3.4 adds support for five new extensions
  • +
  • [05-16-05] GLEW 1.3.3 is released
  • +
  • [03-16-05] GLEW 1.3.2 adds support for GL_APPLE_pixel_buffer
  • +
  • [02-11-05] gljava and sdljava provide a Java binding to OpenGL via GLEW
  • +
  • [02-02-05] GLEW 1.3.1 adds support for GL_EXT_framebuffer_object
  • +
  • [01-04-05] GLEW 1.3.0 adds core OpenGL 2.0 support plus many enhancements
  • +
  • [12-22-04] GLEWpy Python wrapper announced
  • +
  • [12-12-04] Mailing lists created on sourceforge
  • +
  • [12-06-04] GLEW 1.2.5 adds new extensions and support for FreeBSD
  • +
+ +

Links

+ + + +
+ + diff --git a/vendor/glew-cmake-2.2.0/doc/install.html b/vendor/glew-cmake-2.2.0/doc/install.html new file mode 100644 index 0000000..0fe901a --- /dev/null +++ b/vendor/glew-cmake-2.2.0/doc/install.html @@ -0,0 +1,226 @@ + + + + + +GLEW: The OpenGL Extension Wrangler Library + + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
Latest Release: 2.2.0

GLEW Logo

+ + + + + + + + + + + + + +
Download
Usage
Building
Installation
Source Generation
Change Log

GitHub
Issues
Pull Requests

SourceForge Page
+

+
+ + + + +
Last Update: 03-15-20
+ OpenGL Logo
+ GitHub Logo
+ Travis Logo
+ SourceForge Logo +
+
+
+ +

The OpenGL Extension Wrangler Library

+ + + + +

Installation

+ +

+To use the shared library version of GLEW, you need to copy the +headers and libraries into their destination directories. On Windows +this typically boils down to copying: +

+ + + + + + + + + + +
bin/glew32.dll    to    %SystemRoot%/system32
lib/glew32.lib    to    {VC Root}/Lib
include/GL/glew.h    to    {VC Root}/Include/GL
include/GL/wglew.h    to    {VC Root}/Include/GL
+

+

+ +

+where {VC Root} is the Visual C++ root directory, typically +C:/Program Files/Microsoft Visual Studio/VC98 for Visual +Studio 6.0 or C:/Program Files/Microsoft Visual +Studio .NET 2003/Vc7/PlatformSDK for Visual Studio .NET. +

+ +

+On Unix, typing make install will attempt to install GLEW +into /usr/include/GL and /usr/lib. You can +customize the installation target via the GLEW_DEST +environment variable if you do not have write access to these +directories. +

+ +

Building Your Project with GLEW

+

+There are two ways to build your project with GLEW. +

+

Including the source files / project file

+

+The simpler but less flexible way is to include glew.h and +glew.c into your project. On Windows, you also need to +define the GLEW_STATIC preprocessor token when building a +static library or executable, and the GLEW_BUILD preprocessor +token when building a dll. You also need to replace +<GL/gl.h> and <GL/glu.h> with +<glew.h> in your code and set the appropriate include +flag (-I) to tell the compiler where to look for it. For +example: +

+

+#include <glew.h>
+#include <GL/glut.h>
+<gl, glu, and glut functionality is available here>
+

+

+Depending on where you put glew.h you may also need to change +the include directives in glew.c. Note that if you are using +GLEW together with GLUT, you have to include glew.h first. +In addition, glew.h includes glu.h, so you do not +need to include it separately. +

+

+On Windows, you also have the option of adding the supplied project +file glew_static.dsp to your workspace (solution) and compile +it together with your other projects. In this case you also need to +change the GLEW_BUILD preprocessor constant to +GLEW_STATIC when building a static library or executable, +otherwise you get build errors. +

+

+Note that GLEW does not use the C +runtime library, so it does not matter which version (single-threaded, +multi-threaded or multi-threaded DLL) it is linked with (without +debugging information). It is, however, always a good idea to compile all +your projects including GLEW with the same C runtime settings. +

+ +

Using GLEW as a shared library

+ +

+Alternatively, you can use the provided project files / makefile to +build a separate shared library you can link your projects with later. +In this case the best practice is to install glew.h, +glew32.lib, and glew32.dll / libGLEW.so to +where the OpenGL equivalents gl.h, opengl32.lib, and +opengl32.dll / libGL.so are located. Note that you +need administrative privileges to do this. If you do not have +administrator access and your system administrator will not do it for +you, you can install GLEW into your own lib and include subdirectories +and tell the compiler where to find it. Then you can just replace +<GL/gl.h> with <GL/glew.h> in your +program: +

+ +

+#include <GL/glew.h>
+#include <GL/glut.h>
+<gl, glu, and glut functionality is available here>
+

+ +

+or: +

+ +

+#include <GL/glew.h>
+<gl and glu functionality is available here>
+

+ +

+Remember to link your project with glew32.lib, +glu32.lib, and opengl32.lib on Windows and +libGLEW.so, libGLU.so, and libGL.so on +Unix (-lGLEW -lGLU -lGL). +

+ +

+It is important to keep in mind that glew.h includes neither +windows.h nor gl.h. Also, GLEW will warn you by +issuing a preprocessor error in case you have included gl.h, +glext.h, or glATI.h before glew.h. +

+ + +
+ + diff --git a/vendor/glew-cmake-2.2.0/doc/khronos.txt b/vendor/glew-cmake-2.2.0/doc/khronos.txt new file mode 100644 index 0000000..ffc271c --- /dev/null +++ b/vendor/glew-cmake-2.2.0/doc/khronos.txt @@ -0,0 +1,20 @@ +Copyright (c) 2007 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. diff --git a/vendor/glew-cmake-2.2.0/doc/log.html b/vendor/glew-cmake-2.2.0/doc/log.html new file mode 100644 index 0000000..939469b --- /dev/null +++ b/vendor/glew-cmake-2.2.0/doc/log.html @@ -0,0 +1,1419 @@ + + + + + +GLEW: The OpenGL Extension Wrangler Library + + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
Latest Release: 2.2.0

GLEW Logo

+ + + + + + + + + + + + + +
Download
Usage
Building
Installation
Source Generation
Change Log

GitHub
Issues
Pull Requests

SourceForge Page
+

+
+ + + + +
Last Update: 03-15-20
+ OpenGL Logo
+ GitHub Logo
+ Travis Logo
+ SourceForge Logo +
+
+
+ +

The OpenGL Extension Wrangler Library

+ + + + +

Change Log

+ +
+
    +
  • 2.2.0 [03-15-20] + +
      +
    • Bug fixes: +
        +
      • GL_EXT_semaphore constants +
      • Some const pointer fixups in OpenGL API +
      • Correction for GLEW_VERSION_4_5 +
      • Windows build updates and fixes +
      +
    + +
      +
    • New extensions: +
        +
      • GL_AMD_framebuffer_multisample_advanced +
      • GL_AMD_gpu_shader_half_float_fetch +
      • GL_AMD_shader_image_load_store_lod +
      • GL_ARM_texture_unnormalized_coordinates +
      • GL_DMP_program_binary +
      • GL_DMP_shader_binary +
      • GL_EXT_EGL_image_external_wrap_modes +
      • GL_EXT_EGL_image_storage +
      • GL_EXT_EGL_sync +
      • GL_EXT_clip_control +
      • GL_EXT_depth_clamp +
      • GL_EXT_disjoint_timer_query +
      • GL_EXT_draw_transform_feedback +
      • GL_EXT_multiview_tessellation_geometry_shader +
      • GL_EXT_multiview_texture_multisample +
      • GL_EXT_multiview_timer_query +
      • GL_EXT_occlusion_query_boolean +
      • GL_EXT_primitive_bounding_box +
      • GL_EXT_protected_textures +
      • GL_EXT_robustness +
      • GL_EXT_shader_framebuffer_fetch_non_coherent +
      • GL_EXT_static_vertex_array +
      • GL_EXT_tessellation_point_size +
      • GL_EXT_tessellation_shader +
      • GL_EXT_texture_border_clamp +
      • GL_EXT_texture_buffer +
      • GL_EXT_texture_compression_s3tc_srgb +
      • GL_EXT_texture_format_sRGB_override +
      • GL_EXT_texture_mirror_clamp_to_edge +
      • GL_EXT_texture_query_lod +
      • GL_EXT_texture_shadow_lod +
      • GL_FJ_shader_binary_GCCSO +
      • GL_IMG_bindless_texture +
      • GL_IMG_framebuffer_downsample +
      • GL_IMG_multisampled_render_to_texture +
      • GL_IMG_program_binary +
      • GL_IMG_read_format +
      • GL_IMG_shader_binary +
      • GL_IMG_texture_compression_pvrtc +
      • GL_IMG_texture_compression_pvrtc2 +
      • GL_IMG_texture_env_enhanced_fixed_function +
      • GL_IMG_texture_filter_cubic +
      • GL_INTEL_blackhole_render +
      • GL_INTEL_shader_integer_functions2 +
      • GL_KHR_shader_subgroup +
      • GL_MESA_framebuffer_flip_y +
      • GL_MESA_program_binary_formats +
      • GL_MESA_tile_raster_order +
      • GL_NVX_gpu_multicast2 +
      • GL_NVX_progress_fence +
      • GL_NV_compute_shader_derivatives +
      • GL_NV_conservative_raster_pre_snap +
      • GL_NV_conservative_raster_underestimation +
      • GL_NV_depth_nonlinear +
      • GL_NV_fragment_shader_barycentric +
      • GL_NV_memory_attachment +
      • GL_NV_mesh_shader +
      • GL_NV_query_resource_tag +
      • GL_NV_read_buffer +
      • GL_NV_read_buffer_front +
      • GL_NV_representative_fragment_test +
      • GL_NV_scissor_exclusive +
      • GL_NV_shader_subgroup_partitioned +
      • GL_NV_shader_texture_footprint +
      • GL_NV_shading_rate_image +
      • GL_NV_vdpau_interop2 +
      • GL_OES_EGL_image +
      • GL_OES_EGL_image_external +
      • GL_OES_EGL_image_external_essl3 +
      • GL_OES_blend_equation_separate +
      • GL_OES_blend_func_separate +
      • GL_OES_blend_subtract +
      • GL_OES_compressed_ETC1_RGB8_texture +
      • GL_OES_compressed_paletted_texture +
      • GL_OES_copy_image +
      • GL_OES_depth24 +
      • GL_OES_depth32 +
      • GL_OES_depth_texture +
      • GL_OES_depth_texture_cube_map +
      • GL_OES_draw_buffers_indexed +
      • GL_OES_draw_texture +
      • GL_OES_element_index_uint +
      • GL_OES_extended_matrix_palette +
      • GL_OES_fbo_render_mipmap +
      • GL_OES_fragment_precision_high +
      • GL_OES_framebuffer_object +
      • GL_OES_geometry_point_size +
      • GL_OES_geometry_shader +
      • GL_OES_get_program_binary +
      • GL_OES_gpu_shader5 +
      • GL_OES_mapbuffer +
      • GL_OES_matrix_get +
      • GL_OES_matrix_palette +
      • GL_OES_packed_depth_stencil +
      • GL_OES_point_size_array +
      • GL_OES_point_sprite +
      • GL_OES_read_format +
      • GL_OES_required_internalformat +
      • GL_OES_rgb8_rgba8 +
      • GL_OES_sample_shading +
      • GL_OES_sample_variables +
      • GL_OES_shader_image_atomic +
      • GL_OES_shader_io_blocks +
      • GL_OES_shader_multisample_interpolation +
      • GL_OES_single_precision +
      • GL_OES_standard_derivatives +
      • GL_OES_stencil1 +
      • GL_OES_stencil4 +
      • GL_OES_stencil8 +
      • GL_OES_surfaceless_context +
      • GL_OES_tessellation_point_size +
      • GL_OES_tessellation_shader +
      • GL_OES_texture_3D +
      • GL_OES_texture_border_clamp +
      • GL_OES_texture_buffer +
      • GL_OES_texture_compression_astc +
      • GL_OES_texture_cube_map +
      • GL_OES_texture_cube_map_array +
      • GL_OES_texture_env_crossbar +
      • GL_OES_texture_mirrored_repeat +
      • GL_OES_texture_npot +
      • GL_OES_texture_stencil8 +
      • GL_OES_texture_storage_multisample_2d_array +
      • GL_OES_texture_view +
      • GL_OES_vertex_array_object +
      • GL_OES_vertex_half_float +
      • GL_OES_vertex_type_10_10_10_2 +
      • GL_QCOM_YUV_texture_gather +
      • GL_QCOM_shader_framebuffer_fetch_rate +
      • GL_QCOM_texture_foveated +
      • GL_QCOM_texture_foveated_subsampled_layout +
      • GL_VIV_shader_binary +
      • EGL_ANDROID_GLES_layers +
      • EGL_ANDROID_get_frame_timestamps +
      • EGL_ANDROID_get_native_client_buffer +
      • EGL_ARM_image_format +
      • EGL_EXT_bind_to_front +
      • EGL_EXT_client_sync +
      • EGL_EXT_compositor +
      • EGL_EXT_gl_colorspace_display_p3 +
      • EGL_EXT_gl_colorspace_display_p3_linear +
      • EGL_EXT_gl_colorspace_display_p3_passthrough +
      • EGL_EXT_gl_colorspace_scrgb +
      • EGL_EXT_image_gl_colorspace +
      • EGL_EXT_image_implicit_sync_control +
      • EGL_EXT_surface_CTA861_3_metadata +
      • EGL_EXT_sync_reuse +
      • EGL_KHR_display_reference +
      • EGL_MESA_query_driver +
      • EGL_NV_context_priority_realtime +
      • EGL_NV_quadruple_buffer +
      • EGL_NV_stream_dma +
      • EGL_NV_stream_flush +
      • EGL_NV_stream_origin +
      • EGL_NV_triple_buffer +
      • EGL_WL_bind_wayland_display +
      • EGL_WL_create_wayland_buffer_from_image +
      • GLX_EXT_context_priority +
      • GLX_EXT_no_config_context +
      • GLX_NV_multigpu_context +
      • WGL_NV_multigpu_context +
      +
    + +
+ +
+
    +
  • 2.1.0 [07-31-17] +
      +
    • Enhancements: +
        +
      • OpenGL 4.6 support added +
      • Improved Mac OSX build support +
      • Improved cmake build support +
      +
    + +
      +
    • Bug fixes: +
        +
      • Resolved crash when glXGetCurrentDisplay() is NULL +
      • CMake: only install PDB files with MSVC +
      • wglGetProcAddress crash with NOGDI defined +
      • Mac: using -Os rather than -O2 +
      +
    + +
      +
    • New extensions: +
        +
      • GL_AMD_gpu_shader_half_float +
      • GL_AMD_shader_ballot +
      • GL_ARB_gl_spirv +
      • GL_EGL_KHR_context_flush_control +
      • GL_INTEL_conservative_rasterization +
      • GL_MESA_shader_integer_functions +
      • GL_NVX_blend_equation_advanced_multi_draw_buffers +
      • GL_NV_gpu_multicast +
      • EGL_ARM_implicit_external_sync +
      • EGL_EXT_gl_colorspace_bt2020_linear +
      • EGL_EXT_gl_colorspace_bt2020_pq +
      • EGL_EXT_gl_colorspace_scrgb_linear +
      • EGL_EXT_image_dma_buf_import_modifiers +
      • EGL_EXT_pixel_format_float +
      • EGL_EXT_surface_SMPTE2086_metadata +
      • EGL_KHR_context_flush_control +
      • EGL_KHR_no_config_context +
      • EGL_KHR_stream_attrib +
      • EGL_MESA_platform_surfaceless +
      • EGL_NV_stream_cross_display +
      • EGL_NV_stream_cross_object +
      • EGL_NV_stream_cross_partition +
      • EGL_NV_stream_cross_process +
      • EGL_NV_stream_cross_system +
      • EGL_NV_stream_fifo_next +
      • EGL_NV_stream_fifo_synchronous +
      • EGL_NV_stream_frame_limits +
      • EGL_NV_stream_remote +
      • EGL_NV_stream_reset +
      • EGL_NV_stream_socket +
      • EGL_NV_stream_socket_inet +
      • EGL_NV_stream_socket_unix +
      • WGL_EXT_colorspace +
      +
    + +
+ +
+
    +
  • 2.0.0 [07-24-16] +
      +
    • Enhancements: +
        +
      • Forward context support added +
      • OSMesa support added +
      • EGL support added +
      • MX support discontinued +
      • Improved cmake build support +
      +
    +
      +
    • New extensions: +
        +
      • GL_AMD_shader_explicit_vertex_parameter +
      • GL_ARB_gl_spirv +
      • GL_EGL_NV_robustness_video_memory_purge +
      • GL_EXT_window_rectangles +
      • GL_INTEL_conservative_rasterization +
      • GL_KHR_texture_compression_astc_sliced_3d +
      • GL_MESA_shader_integer_functions +
      • GL_NVX_blend_equation_advanced_multi_draw_buffers +
      • GL_NVX_linked_gpu_multicast +
      • GL_NV_clip_space_w_scaling +
      • GL_NV_command_list +
      • GL_NV_conservative_raster_pre_snap_triangles +
      • GL_NV_draw_vulkan_image +
      • GL_NV_gpu_multicast +
      • GL_NV_robustness_video_memory_purge +
      • GL_NV_shader_atomic_float64 +
      • GL_NV_stereo_view_rendering +
      • GL_NV_viewport_swizzle +
      • GLX_EXT_libglvnd +
      • GLX_NV_robustness_video_memory_purge +
      +
    +
+ +
+
    +
  • 1.13.0 [08-10-15] +
      +
    • Enhancements: +
        +
      • glxewInit, wglewInit +
      • glewinfo adds support for -version, -profile core|compatibility and -flag debug|forward parameters +
      • Improved cmake build support +
      +
    +
      +
    • New extensions: +
        +
      • GL_ARB_ES3_2_compatibility +
      • GL_ARB_fragment_shader_interlock +
      • GL_ARB_gpu_shader_int64 +
      • GL_ARB_parallel_shader_compile +
      • GL_ARB_post_depth_coverage +
      • GL_ARB_sample_locations +
      • GL_ARB_shader_atomic_counter_ops +
      • GL_ARB_shader_ballot +
      • GL_ARB_shader_clock +
      • GL_ARB_shader_viewport_layer_array +
      • GL_ARB_sparse_texture2 +
      • GL_ARB_sparse_texture_clamp +
      • GL_ARB_texture_filter_minmax +
      • GL_INTEL_framebuffer_CMAA +
      • GL_KHR_no_error +
      • GL_NV_conservative_raster_dilate +
      • GL_OVR_multiview +
      • GL_OVR_multiview2 +
      +
    • Bug fixes +
    +
+ +
+
    +
  • 1.12.0 [01-26-15] +
      +
    • New extensions: +
        +
      • GL_EXT_polygon_offset_clamp +
      • GL_EXT_post_depth_coverage +
      • GL_EXT_raster_multisample +
      • GL_EXT_sparse_texture2 +
      • GL_EXT_texture_filter_minmax +
      • GL_NV_conservative_raster +
      • GL_NV_fill_rectangle +
      • GL_NV_fragment_coverage_to_color +
      • GL_NV_fragment_shader_interlock +
      • GL_NV_framebuffer_mixed_samples +
      • GL_NV_geometry_shader_passthrough +
      • GL_NV_internalformat_sample_query +
      • GL_NV_sample_locations +
      • GL_NV_sample_mask_override_coverage +
      • GL_NV_shader_atomic_fp16_vector +
      • GL_NV_uniform_buffer_unified_memory +
      • GL_NV_viewport_array2 +
      +
    • Bug fixes +
    +
+ +
+
    +
  • 1.11.0 [08-11-14] +
      +
    • New features: +
        +
      • Support for OpenGL 4.5 +
      +
    • New extensions: +
        +
      • GL_AMD_gcn_shader +
      • GL_AMD_gpu_shader_int64 +
      • GL_AMD_occlusion_query_event +
      • GL_AMD_shader_atomic_counter_ops +
      • GL_AMD_shader_stencil_value_export +
      • GL_AMD_transform_feedback4 +
      • GL_ARB_ES3_1_compatibility +
      • GL_ARB_clip_control +
      • GL_ARB_conditional_render_inverted +
      • GL_ARB_cull_distance +
      • GL_ARB_derivative_control +
      • GL_ARB_direct_state_access +
      • GL_ARB_get_texture_sub_image +
      • GL_ARB_pipeline_statistics_query +
      • GL_ARB_shader_texture_image_samples +
      • GL_ARB_sparse_buffer +
      • GL_ARB_texture_barrier +
      • GL_ARB_transform_feedback_overflow_query +
      • GL_EXT_debug_label +
      • GL_EXT_shader_image_load_formatted +
      • GL_EXT_shader_integer_mix +
      • GL_INTEL_fragment_shader_ordering +
      • GL_INTEL_performance_query +
      • GL_KHR_blend_equation_advanced +
      • GL_KHR_blend_equation_advanced_coherent +
      • GL_KHR_context_flush_control +
      • GL_KHR_robust_buffer_access_behavior +
      • GL_KHR_robustness +
      • GL_KHR_texture_compression_astc_hdr +
      • GL_NV_bindless_multi_draw_indirect_count +
      • GL_NV_shader_atomic_int64 +
      • GL_NV_shader_thread_group +
      • GL_NV_shader_thread_shuffle +
      • GL_REGAL_proc_address +
      • GLX_ARB_context_flush_control +
      • GLX_EXT_stereo_tree +
      • GLX_MESA_query_renderer +
      • GLX_NV_copy_buffer +
      • GLX_NV_delay_before_swap +
      • WGL_ARB_context_flush_control +
      • WGL_NV_delay_before_swap +
      +
    • Bug fixes +
    +
+ +
+
    +
  • 1.10.0 [07-22-13] +
      +
    • New features: +
        +
      • Support for OpenGL 4.4 +
      +
    • New extensions: +
        +
      • GL_AMD_interleaved_elements +
      • GL_AMD_shader_trinary_minmax +
      • GL_AMD_sparse_texture +
      • GL_ANGLE_depth_texture +
      • GL_ANGLE_framebuffer_blit +
      • GL_ANGLE_framebuffer_multisample +
      • GL_ANGLE_instanced_arrays +
      • GL_ANGLE_pack_reverse_row_order +
      • GL_ANGLE_program_binary +
      • GL_ANGLE_texture_compression_dxt1 +
      • GL_ANGLE_texture_compression_dxt3 +
      • GL_ANGLE_texture_compression_dxt5 +
      • GL_ANGLE_texture_usage +
      • GL_ANGLE_timer_query +
      • GL_ANGLE_translated_shader_source +
      • GL_ARB_bindless_texture +
      • GL_ARB_buffer_storage +
      • GL_ARB_clear_texture +
      • GL_ARB_compute_variable_group_size +
      • GL_ARB_enhanced_layouts +
      • GL_ARB_indirect_parameters +
      • GL_ARB_multi_bind +
      • GL_ARB_query_buffer_object +
      • GL_ARB_seamless_cubemap_per_texture +
      • GL_ARB_shader_draw_parameters +
      • GL_ARB_shader_group_vote +
      • GL_ARB_sparse_texture +
      • GL_ARB_texture_mirror_clamp_to_edge +
      • GL_ARB_texture_stencil8 +
      • GL_ARB_vertex_type_10f_11f_11f_rev +
      • GL_INTEL_map_texture +
      • GL_NVX_conditional_render +
      • GL_NV_bindless_multi_draw_indirect +
      • GL_NV_blend_equation_advanced +
      • GL_NV_compute_program5 +
      • GL_NV_deep_texture3D +
      • GL_NV_draw_texture +
      • GL_NV_shader_atomic_counters +
      • GL_NV_shader_storage_buffer_object +
      • GL_REGAL_ES1_0_compatibility +
      • GL_REGAL_ES1_1_compatibility +
      • GL_REGAL_enable +
      • GLX_EXT_buffer_age +
      • WGL_ARB_robustness_application_isolation +
      • WGL_ARB_robustness_share_group_isolation +
      +
    • Bug fixes +
    +
+ +
+
    +
  • 1.9.0 [08-06-12] +
      +
    • New features: + +
    • New extensions: +
        +
      • GL_ARB_ES3_compatibility +
      • GL_ARB_clear_buffer_object +
      • GL_ARB_compute_shader +
      • GL_ARB_copy_image +
      • GL_ARB_explicit_uniform_location +
      • GL_ARB_fragment_layer_viewport +
      • GL_ARB_framebuffer_no_attachments +
      • GL_ARB_internalformat_query2 +
      • GL_ARB_multi_draw_indirect +
      • GL_ARB_program_interface_query +
      • GL_ARB_robust_buffer_access_behavior +
      • GL_ARB_robustness_application_isolation +
      • GL_ARB_robustness_share_group_isolation +
      • GL_ARB_shader_image_size +
      • GL_ARB_shader_storage_buffer_object +
      • GL_ARB_stencil_texturing +
      • GL_ARB_texture_buffer_range +
      • GL_ARB_texture_query_levels +
      • GL_ARB_texture_storage_multisample +
      • GL_ARB_texture_view +
      • GL_ARB_vertex_attrib_binding +
      • GL_EXT_debug_marker +
      • GL_KHR_debug +
      • GL_REGAL_error_string +
      • GL_REGAL_extension_query +
      • GL_REGAL_log +
      • GLX_ARB_robustness_application_isolation +
      • GLX_ARB_robustness_share_group_isolation +
      • GLX_EXT_create_context_es_profile +
      • WGL_EXT_create_context_es_profile +
      +
    • Bug fixes: +
        +
      • Not using GLU library for Makefile builds. +
      +
    +
+ +
+
    +
  • 1.8.0 [07-17-12] +
      +
    • New extensions: +
        +
      • GL_AMD_pinned_memory +
      • GL_AMD_query_buffer_object +
      • GL_AMD_stencil_operation_extended +
      • GL_AMD_vertex_shader_layer +
      • GL_AMD_vertex_shader_viewport_index +
      • GL_NV_bindless_texture +
      • GL_NV_shader_atomic_float +
      • GLX_EXT_swap_control_tear +
      • WGL_EXT_swap_control_tear +
      • WGL_NV_DX_interop2 +
      +
    • Bug fixes: +
        +
      • MS Visual Studio 2010 projects added +
      • GLX_NV_video_out replaces GLX_NV_video_output +
      • ANSI C prototype for glewInit +
      • Improved CentOS build support +
      • Improved GL_ARB_gpu_shader_fp64 support +
      • ARB_texture_compression_bptc and ARB_copy_buffer constants +
      • Linux needs to define GLEW_STATIC for static library builds +
      • Custom code generation problem resolved +
      • GLEWAPIENTRY added to glew.h for calling convention customization +
      • Correction for glPathStencilDepthOffsetNV +
      • Resolve OSX gcc warnings +
      • Added build support for NetBSD +
      +
    +
+ +
+
    +
  • 1.7.0 [08-26-11] +
      +
    • New features: +
        +
      • Support for OpenGL 4.2 +
      +
    • New extensions: +
        +
      • GL_AMD_multi_draw_indirect +
      • GL_ARB_base_instance +
      • GL_ARB_compressed_texture_pixel_storage +
      • GL_ARB_conservative_depth +
      • GL_ARB_internalformat_query +
      • GL_ARB_map_buffer_alignment +
      • GL_ARB_shader_atomic_counters +
      • GL_ARB_shader_image_load_store +
      • GL_ARB_shading_language_420pack +
      • GL_ARB_shading_language_packing +
      • GL_ARB_texture_storage +
      • GL_ARB_transform_feedback_instanced +
      • GL_EXT_framebuffer_multisample_blit_scaled +
      • GL_NV_path_rendering +
      • GL_NV_path_rendering +
      • GLX_MESA_swap_control +
      +
    • Bug fixes: +
        +
      • const qualifiers for GL 1.4 MultiDrawArrays, MultiDrawElements +
      • Add glGetGraphicsResetStatusARB to GL_ARB_robustness +
      • Remove EXT suffix from GL_KTX_buffer_region entry points +
      • Solaris needs inttypes.h +
      • Add ERROR_INVALID_VERSION_ARB and ERROR_INVALID_PROFILE_ARB to WGL_ARB_create_context +
      • Add GLX_MESA_swap_control +
      • Set -install_name for OSX +
      • Add 64-bit darwin build option (SYSTEM=darwin_x86-64) +
      • Add GL_NV_path_rendering +
      +
    +
+ +
+
    +
  • 1.6.0 [04-27-11] +
      +
    • New extensions: +
        +
      • GL_AMD_blend_minmax_factor +
      • GL_AMD_sample_positions +
      • GL_EXT_x11_sync_object +
      • GL_NV_texture_multisample +
      • GL_NV_video_capture +
      • GLX_NV_video_capture +
      • WGL_NV_DX_interop +
      • WGL_NV_video_capture +
      +
    • Bug fixes: +
        +
      • Define GLEW_NO_GLU for no glu dependency. +
      • mx suffix for GLEW MX libraries, build both libraries by default. +
      • Cygwin build improvements +
      • Soname of GLEWmx shared libraries +
      • Query GL extension string only once +
      • GLX_OML_sync_control no longer requires C99 +
      • glDraw*InstancedARB moved from GL_ARB_draw_instanced to GL_ARB_instanced_arrays +
      • glFramebufferTextureLayerEXT moved from GL_EXT_geometry_shader4 to GL_EXT_texture_array +
      • Fixes for BSD build +
      +
    +
+ +
+
    +
  • 1.5.8 [01-31-11] +
      +
    • New extensions: +
        +
      • GL_AMD_depth_clamp_separate +
      • GL_EXT_texture_sRGB_decode +
      +
    • Bug fixes: +
        +
      • Borland C++ fix for __int64 +
      • GL_DOUBLE_MATNxM enumerants for OpenGL 4.0 +
      • Correction to glGetTransformFeedbackVarying +
      • Correction to glSecondaryColorPointer +
      • Corrections to glGetVertexAttribPointerv and glGetShaderSource +
      • Switched code repository from svn to git +
      +
    +
+ +
+
    +
  • 1.5.7 [11-03-10] +
      +
    • New extension: +
        +
      • GL_NVX_gpu_memory_info +
      +
    • Bug fixes: +
        +
      • Improved mingw32 build support +
      • Improved cygwin build support +
      • glGetPointervEXT fix +
      • Add GLEW_VERSION_1_2_1 +
      +
    +
+ +
+
    +
  • 1.5.6 [09-07-10] +
      +
    • New features: +
        +
      • Support for OpenGL 4.1 +
      +
    • New extensions: +
        +
      • GL_ARB_ES2_compatibility +
      • GL_ARB_cl_event +
      • GL_ARB_debug_output +
      • GL_ARB_get_program_binary +
      • GL_ARB_robustness +
      • GL_ARB_separate_shader_objects +
      • GL_ARB_shader_precision +
      • GL_ARB_shader_stencil_export +
      • GL_ARB_vertex_attrib_64bit +
      • GL_ARB_viewport_array +
      • GLX_ARB_create_context_robustness +
      • GLX_EXT_create_context_es2_profile +
      • WGL_ARB_create_context_robustness +
      • WGL_EXT_create_context_es2_profile +
      +
    +
+ +
+
    +
  • 1.5.5 [07-13-10] +
      +
    • New extensions: +
        +
      • GL_AMD_debug_output +
      • GL_AMD_name_gen_delete +
      • GL_AMD_transform_feedback3_lines_triangles +
      • GL_NV_multisample_coverage +
      • GL_NV_vdpau_interop +
      • GLX_AMD_gpu_association +
      • GLX_NV_multisample_coverage +
      • WGL_NV_multisample_coverage +
      +
    • Bug fixes: +
        +
      • Compilation issue with GLX_SGI_video_sync +
      • OpenGL 4.0 double-precision uniform functions added +
      • Constness of glPointParameterfvARB and glPointParameterfvEXT +
      • Added glVertexAttribDivisor +
      • Compilation issue with Nvidia GLX headers +
      +
    +
+ +
+
    +
  • 1.5.4 [04-21-10] +
      +
    • New features: +
        +
      • Support for OpenGL 3.3 +
      • Support for OpenGL 4.0 +
      +
    • New extensions: +
        +
      • GL_AMD_conservative_depth +
      • GL_ARB_blend_func_extended +
      • GL_ARB_draw_indirect +
      • GL_ARB_explicit_attrib_location +
      • GL_ARB_gpu_shader5 +
      • GL_ARB_gpu_shader_fp64 +
      • GL_ARB_occlusion_query2 +
      • GL_ARB_sampler_objects +
      • GL_ARB_shader_bit_encoding +
      • GL_ARB_shader_subroutine +
      • GL_ARB_shading_language_include +
      • GL_ARB_tessellation_shader +
      • GL_ARB_texture_buffer_object_rgb32 +
      • GL_ARB_texture_compression_bptc +
      • GL_ARB_texture_rgb10_a2ui +
      • GL_ARB_texture_swizzle +
      • GL_ARB_timer_query +
      • GL_ARB_transform_feedback2 +
      • GL_ARB_transform_feedback3 +
      • GL_ARB_vertex_type_2_10_10_10_rev +
      • GL_EXT_shader_image_load_store +
      • GL_EXT_vertex_attrib_64bit +
      • GL_NV_gpu_program5 +
      • GL_NV_gpu_program_fp64 +
      • GL_NV_gpu_shader5 +
      • GL_NV_tessellation_program5 +
      • GL_NV_vertex_attrib_integer_64bit +
      • GLX_ARB_vertex_buffer_object +
      +
    • Bug fixes: +
        +
      • Parameter constness fix for glPointParameteriv and glPointParameterfv +
      +
    +
+ +
+
    +
  • 1.5.3 [02-28-10] +
      +
    • New extensions: +
        +
      • GLX_INTEL_swap_event +
      • GL_AMD_seamless_cubemap_per_texture +
      • GL_AMD_shader_stencil_export +
      +
    • Bug fixes: +
        +
      • Correct version detection for GL 3.1 and 3.2 +
      • Missing 3.1 enumerants +
      • Add glew.pc +
      +
    +
+ +
+
    +
  • 1.5.2 [12-31-09] +
      +
    • New features: +
        +
      • Support for OpenGL 3.1 +
      • Support for OpenGL 3.2 +
      +
    • New extensions: +
        +
      • GL_AMD_draw_buffers_blend +
      • GL_AMD_performance_monitor +
      • GL_AMD_texture_texture4 +
      • GL_AMD_vertex_shader_tessellator +
      • GL_APPLE_aux_depth_stencil +
      • GL_APPLE_object_purgeable +
      • GL_APPLE_rgb_422 +
      • GL_APPLE_row_bytes +
      • GL_APPLE_vertex_program_evaluators +
      • GL_ARB_compatibility +
      • GL_ARB_copy_buffer +
      • GL_ARB_depth_clamp +
      • GL_ARB_draw_buffers_blend +
      • GL_ARB_draw_elements_base_vertex +
      • GL_ARB_fragment_coord_conventions +
      • GL_ARB_provoking_vertex +
      • GL_ARB_sample_shading +
      • GL_ARB_seamless_cube_map +
      • GL_ARB_shader_texture_lod +
      • GL_ARB_sync +
      • GL_ARB_texture_cube_map_array +
      • GL_ARB_texture_gather +
      • GL_ARB_texture_multisample +
      • GL_ARB_texture_query_lod +
      • GL_ARB_uniform_buffer_object +
      • GL_ARB_vertex_array_bgra +
      • GL_ATI_meminfo +
      • GL_EXT_provoking_vertex +
      • GL_EXT_separate_shader_objects +
      • GL_EXT_texture_snorm +
      • GL_NV_copy_image +
      • GL_NV_parameter_buffer_object2 +
      • GL_NV_shader_buffer_load +
      • GL_NV_texture_barrier +
      • GL_NV_transform_feedback2 +
      • GL_NV_vertex_buffer_unified_memory +
      • WGL_AMD_gpu_association +
      • WGL_ARB_create_context_profile +
      • WGL_NV_copy_image +
      • GLX_ARB_create_context_profile +
      • GLX_EXT_swap_control +
      • GLX_NV_copy_image +
      +
    • Bug fixes: +
        +
      • DOS line endings for windows .zip archives only. +
      • glTransformFeedbackVaryings arguments. +
      • Resource leak in glewinfo and visualinfo tools. +
      • WIN32_LEAN_AND_MEAN preprocessor pollution. +
      • Fixed version detection for GLEW_VERSION_2_1 and GLEW_VERSION_3_0. +
      • MesaGLUT glut.h GLAPIENTRY dependency. +
      • glFramebufferTextureLayer correction. +
      • OSX compiler warnings resolved. +
      • Cygwin linking to opengl32 by default, rather than X11 OpenGL. +
      • SnowLeopard (OSX 10.6) gl.h detection. +
      • Use $(STRIP) consistently. +
      +
    +
+ +
+
    +
  • 1.5.1 [11-03-08] +
      +
    • New features: +
        +
      • Support for OpenGL 3.0 +
      +
    • New extensions: +
        +
      • GL_ARB_depth_buffer_float +
      • GL_ARB_draw_instance, +
      • GL_ARB_framebuffer_object +
      • GL_ARB_framebuffer_sRGB +
      • GL_ARB_geometry_shader4 +
      • GL_ARB_half_float_pixel +
      • GL_ARB_half_float_vertex +
      • GL_ARB_instanced_arrays +
      • GL_ARB_map_buffer_range +
      • GL_ARB_texture_buffer_object +
      • GL_ARB_texture_compression_rgtc +
      • GL_ARB_vertex_array_object +
      • GL_EXT_direct_state_access +
      • GL_EXT_texture_swizzle +
      • GL_EXT_transform_feedback +
      • GL_EXT_vertex_array_bgra +
      • GL_NV_conditional_render +
      • GL_NV_explicit_multisample +
      • GL_NV_present_video +
      • GL_SGIS_point_line_texgen +
      • GL_SGIX_convolution_accuracy +
      • WGL_ARB_create_context +
      • WGL_ARB_framebuffer_sRGB +
      • WGL_NV_present_video +
      • WGL_NV_swap_group +
      • WGL_NV_video_output +
      • GLX_ARB_create_context +
      • GLX_ARB_framebuffer_sRGB +
      • GLX_NV_present_video +
      • GLX_NV_swap_group +
      • GLX_NV_video_output +
      +
    • Bug fixes: +
        +
      • Licensing issues with documentation +
      • Problems with long long and _MSC_VER on MINGW +
      • Incorrect parameter for glGetUniformLocation +
      • glewGetExtension fails on last entry +
      • Incomplete GL_NV_texture_shader tokens +
      • Scripting problems on Cygwin +
      • Incorrect definition for GLint on OS X +
      +
    +
+ +
+
    +
  • 1.5.0 [12-27-07] +
      +
    • New features: +
        +
      • Licensing change (BSD, Mesa 3-D, Khronos) +
      • Switch to using registry on www.opengl.org +
      • Support for major and minor version strings +
      +
    • New extensions: +
        +
      • GL_APPLE_flush_buffer_range +
      • GL_GREMEDY_frame_terminator +
      • GLX_EXT_texture_from_pixmap +
      +
    • Bug fixes: +
        +
      • Incorrect 64-bit type definitions +
      • Do not strip static library on install +
      • Missing tokens in GL_ATI_fragment_shader and WGL_{ARB,EXT}_make_current_read +
      • Missing tokens in GL_VERSION_2_1 +
      • Missing functions in GL_VERSION_1_4 +
      • Incorrect parameter type for glXCopyContext +
      +
    +
+
+
    +
  • 1.4.0 [04-27-07] +
      +
    • New features: +
        +
      • Extension variables are declared const to avoid possible +corruption of their values +
      +
    • New extensions: +
        +
      • GL_NV_depth_range_unclamped +
      +
    • Bug fixes: +
        +
      • Incorrect tokens in GL_NV_transform_feedback and GL_NV_framebuffer_multisample_coverage +
      • Incorrect function names in GL_EXT_gpu_program_parameters +
      • Missing tokens in GL_EXT_framebuffer_multisample +
      • GLEW_MX initialization problem for WGL_{ARB,EXT}_extensions_string +
      +
    +
+
+
    +
  • 1.3.6 [03-04-07] +
      +
    • New extensions: +
        +
      • GL_ATI_shader_texture_lod +
      • GL_EXT_gpu_program_parameters +
      • GL_NV_geometry_shader4 +
      • WGL_NV_gpu_affinity +
      • GLX_SGIX_hyperpipe +
      +
    • Bug fixes: +
        +
      • Missing include guards in glxew.h +
      • Makefile and install problems for Cygwin builds +
      • Install problem for Linux AMD64 builds +
      • Incorrect token in GL_ATI_texture_compression_3dc +
      • Missing tokens from GL_ATIX_point_sprites +
      +
    +
+
+
    +
  • 1.3.5 [11-21-06] +
      +
    • New features: +
        +
      • Support for core OpenGL 2.1 +
      • Debug support for glewIsSupported +
      +
    • New extensions: +
        +
      • GL_EXT_bindable_uniform +
      • GL_EXT_draw_buffers2 +
      • GL_EXT_draw_instanced +
      • GL_EXT_framebuffer_sRGB +
      • GL_EXT_geometry_shader4 +
      • GL_EXT_gpu_shader4 +
      • GL_EXT_packed_float +
      • GL_EXT_texture_array +
      • GL_EXT_texture_buffer_object +
      • GL_EXT_texture_compression_latc +
      • GL_EXT_texture_compression_rgtc +
      • GL_EXT_texture_integer +
      • GL_EXT_texture_shared_exponent +
      • GL_EXT_timer_query +
      • GL_NV_depth_buffer_float +
      • GL_NV_fragment_program4 +
      • GL_NV_framebuffer_multisample_coverage +
      • GL_NV_geometry_program4 +
      • GL_NV_gpu_program4 +
      • GL_NV_parameter_buffer_object +
      • GL_NV_transform_feedback +
      • GL_NV_vertex_program4 +
      • GL_OES_byte_coordinates +
      • GL_OES_compressed_paletted_texture +
      • GL_OES_read_format +
      • GL_OES_single_precision +
      • WGL_EXT_pixel_format_packed_float +
      • WGL_EXT_framebuffer_sRGB +
      • GLX_EXT_fbconfig_packed_float +
      • GLX_EXT_framebuffer_sRGB +
      +
    • Bug fixes: +
        +
      • Wrong GLXContext definition on Solaris +
      • Makefile problem for parallel builds +
      +
    +
+
+
    +
  • 1.3.4 [03-04-06] +
      +
    • New extensions: +
        +
      • GL_EXT_framebuffer_blit +
      • GL_EXT_framebuffer_multisample +
      • GL_EXT_packed_depth_stencil +
      • GL_MESAX_texture_stack +
      • WGL_3DL_stereo_control +
      +
    +
      +
    • Bug fixes: +
        +
      • glBlendEquation missing from GL_ARB_imaging +
      • Wrong APIENTRY definition for Cygwin +
      • Incorrect OS X OpenGL types +
      • Unix 64-bit installation patch +
      +
    +
+
+
    +
  • 1.3.3 [05-16-05] +
      +
    • New feature: +
        +
      • Code generation option to split source into multiple files +
      +
    +
      +
    • Bug fixes: +
        +
      • OpenGL 2.0 core initialization problems +
      • Wrong value for token GL_SHADER_TYPE +
      • Missing tokens in GL_ATI_fragment_shader +
      • Missing entry points in GL_ARB_transpose_matrix +
      +
    +
+
+
    +
  • 1.3.2 [03-16-05] +
      +
    • New extension: +
        +
      • GL_APPLE_pixel_buffer +
      +
    • Bug fixes: +
        +
      • Missing OpenGL 2.0 entry points +
      • Missing tokens in GL_SGIX_shadow +
      • MinGW makefile problem +
      • Check for incorrect OpenGL version string on SiS hardware +
      • Documentation update to meet the HTML 4.01 Transitional specification +
      +
    +
+
+
    +
  • 1.3.1 [02-02-05] +
      +
    • New features: +
        +
      • Consistent Unix and Windows versioning +
      +
    • New extensions: +
        +
      • GL_EXT_framebuffer_object +
      • GL_ARB_pixel_buffer_object +
      +
    • Bug fixes: +
        +
      • Missing OpenGL 2.0 tokens +
      • Incorrect typedefs (GLhandleARB and GLhalf) +
      • Borland compiler problems +
      +
    +
+
+
    +
  • 1.3.0 [01-04-05] +
      +
    • New features: +
        +
      • Support for core OpenGL 2.0 +
      • glewIsSupported provides efficient string-based extension checks +
      • Custom code generation from a list of extensions +
      • Makefile changes +
      +
    • New extensions: +
        +
      • WGL_ATI_render_texture_rectangle +
      +
    • Bug fixes: +
        +
      • Incorrect function signature in OpenGL 1.5 core +
      +
    +
+
+
    +
  • 1.2.5 [12-06-04] +
      +
    • New extensions: +
        +
      • GL_ATI_texture_compression_3dc +
      • GL_EXT_Cg_shader +
      • GL_EXT_draw_range_elements +
      • GL_KTX_buffer_region +
      +
    • Bug fixes: +
        +
      • OpenGL version detection bug +
      • Problems with wxWindows and MinGW compilation +
      • visualinfo compilation problem with GLEW_MX specified +
      • Wrong token name in OpenGL 1.5 core +
      +
    • Support for FreeBSD +
    +
+
+
    +
  • 1.2.4 [09-06-04] +
      +
    • Added ARB_draw_buffers and ARB_texture_rectangle +
    • Fixed bug in ARB_shader_objects +
    • Replaced wglinfo with visualinfo +
    +
+
+
    +
  • 1.2.3 [06-10-04] +
      +
    • Added GL_NV_fragment_program2, GL_NV_fragment_program_option, GL_NV_vertex_program2_option, GL_NV_vertex_program3 +
    • Bug fix in GL_ARB_vertex_blend +
    +
+
+
    +
  • 1.2.2 [05-08-04] +
      +
    • Added GL_EXT_pixel_buffer_object, removed GL_NV_element_array +
    • Fixed GLEW_MX problems +
    • Bug fix in GL_EXT_texture_rectangle and wglinfo +
    +
+
+
    +
  • 1.2.1 [03-18-04] +
      +
    • Bug fix in OpenGL version query (early release of 1.2.0 contained this bug) +
    • Bug fix in GL_ARB_shader_objects and temporary bug fix in GL_ARB_vertex_shader +
    • Added flags on GDI support and multisampling to wglinfo +
    +
+
+
    +
  • 1.2.0 [02-19-04] +
      +
    • Added full OpenGL 1.5 support +
    • Added support for multiple rendering contexts with different capabilities +
    • Added command line flags to glewinfo for selecting displays and visuals +
    • Added GLX_SGIS_multisample, GLX_SUN_video_resize, and GL_SUN_read_video_pixels +
    • Added MinGW/MSYS support +
    • Bug fixes in GL_ARB_shader_objects and the OS X build +
    +
+
+
    +
  • 1.1.4 [12-15-03] +
      +
    • Added GL_APPLE_float_pixels, GL_APPLE_texture_range, +GL_EXT_texture_cube_map, GL_EXT_texture_edge_clamp, +GLX_ATI_pixel_format_float, and GLX_ATI_render_texture +
    • Bug fixes in GL_ATI_map_object_buffer and GL_ATI_fragment_shader +
    +
+
+
    +
  • 1.1.3 [10-28-03] +
      +
    • Added Solaris and Darwin support +
    • Added GL_ARB_fragment_shader, GL_ARB_shader_objects, and GL_ARB_vertex_shader +
    • Fixed bug in GL_WIN_swap_hint +
    • Removed glewinfo's dependency on GLUT +
    +
+
+
    +
  • 1.1.2 [09-15-03] +
      +
    • Removed dependency on WGL_{ARB,EXT}_extensions_string to make GLEW run on Matrox cards +
    • Added glewGetString for querying the GLEW version string +
    +
+
+
    +
  • 1.1.1 [08-11-03] +
      +
    • Added GLX_NV_float_buffer, GL_ARB_shading_language_100, and GL_ARB_texture_non_power_of_two +
    • Fixed bug in GL_ARB_vertex_buffer_object +
    • Minor updates in documentation +
    +
+
+
    +
  • 1.1.0 [07-08-03] +
      +
    • Added automatic code generation +
    • Added almost every extension in the registry +
    • Added separate namespace +
    • Added Irix support +
    • Updated documentation +
    +
+
+
    +
  • 1.0.7 [06-29-03] +
      +
    • Added GL_EXT_depth_bounds_test +
    • Fixed typos +
    +
+
+
    +
  • 1.0.6 [05-05-03] +
      +
    • Added ARB_vertex_buffer_object and NV_half_float +
    • Updated wglinfo +
    • Temporary Linux bug fixes (problems with SDL and MESA) +
    +
+
+
    +
  • 1.0.5 [02-17-03] +
      +
    • Bug fixes +
    • Added wglinfo +
    • Updated documentation +
    +
+
+
    +
  • 1.0.4 [02-02-03] +
      +
    • Added NV_texture_expand_normal +
    • Added mingw support +
    • Updated documentation +
    +
+
+
    +
  • 1.0.3 [01-09-03] +
      +
    • Cleaned up ATI extensions +
    • Changed function prototypes to match glext.h +
    • Added EXT_texture3D +
    • Fixed typos in ATI_vertex_attrib_array_object and ATI_draw_buffers +
    +
+
+
    +
  • 1.0.2 [12-21-02] +
      +
    • Added list of supported extensions to documentation +
    • Added NV_half_float and NV_texgen_emboss +
    +
+
+
    +
  • 1.0.1 [12-17-02] +
      +
    • Bug fixes +
    • Added glewGetExtension +
    +
+
+
    +
  • 1.0.0 [12-12-02] +
      +
    • Initial release +
    +
+
+ + +
+ + diff --git a/vendor/glew-cmake-2.2.0/doc/mesa.txt b/vendor/glew-cmake-2.2.0/doc/mesa.txt new file mode 100644 index 0000000..a82dd4b --- /dev/null +++ b/vendor/glew-cmake-2.2.0/doc/mesa.txt @@ -0,0 +1,21 @@ +Mesa 3-D graphics library +Version: 7.0 + +Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + +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 +BRIAN PAUL 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/vendor/glew-cmake-2.2.0/doc/new.png b/vendor/glew-cmake-2.2.0/doc/new.png new file mode 100644 index 0000000000000000000000000000000000000000..7ce2b47960a7085d7e599044ae16187cdd79153a GIT binary patch literal 1180 zcmeAS@N?(olHy`uVBq!ia0vp^l0eME!3-o9=sc?gQk(@Ik;M!Q+`=Ht$S`Y;1W=GA z-O<;Pfnj4`&F{d;K)yn~JGFCa<74&D@oYeyX$c9*zYc!<&#ugD zEX;h`K5fE3d!7AtAbrBj%8&UMxaGCg^YE;B^S_bhGyeiTHjt*I2Wij#@s`{#4`Wk1 zcAm$Fr+$BdfkAy*0t1JF+Jam2V}O}iVy5K2zYp1VP2u#YVZOw`c!VS5Vy&Rj?)<-SyMXD!>frJ-_3sASzYj7t}CiK1p=3en~oMXMs0 zp<*ct%eofjl3TJ-(qdI^m2LK5SM7iMo##By?|HxX{oe2Ue&+~!1;YTbG`BDZ5C#BG z^Z|kiKrsvUV21$+U;zMzC^Q9>j6DP0y?|#8ia;VF-fI{{IaegvG-cAr$-% zyi7#UDPi1KI0RrU1%pFmWT|v@8d?~_U@-(7?w?{11_l&a4J!7qoUyIjV@;Yo9g$Iw zwoA&XHPNDe?Ybnep+RT?ECyP2fR@y#5;=^jl5$F?YX$v)1fw(xOhH%vF~{!Kxt)s! z?%_keW6F^I80R_JiZSj!yu+@s%A>_gC*>(!?^49Er%`#T7;Q9&4Uw z-EIlfky)}8LTeJxnIIg-y2UN(Ramxv8>^DkK%xQ=`xS0V{X=6p_H^~XW^`TSKPWN)tgl3YJ<~ubbI;-Vdj4CXCJwVady>xra zWO-bIaf9DJezwZYvKeN{Y>%_OxVSEq)8$u&oGBaVJCs-P>Ev=6UP{|LCtKbuuCsYb zwrcIZCe7;iKX5a-ePBh8!80*>E8H(f2trZ5ZBbvR1FLx?Cep3^o7pM8W1yVqJ;&VP zxuC_&2d{_Lf9$Aww>3yM182byPn0$qh<80wNYD-;>8IAc9ez4u`zii@+Gve>{khq$ z>G5AK9Q|WqyYh4~xi2D*^_k(Ly&s9lqx9v<^(L{2#--+t@6xRN%su9{9W+|Ks91BC z39Sda0z3w;C)+Y^&QP_oJ9s_D{_I%W_<-~mi7|fKMaSdGY~RNL0TNdU75ZmY%lw#( zllY9a?gx1#8^gF2ao%d>e(KHl3ZC>`R^_^cDE>6vm^%2E%kr=g3^8R>YMt0FKHaB1 zW>hs}f-J|pg_)d6Id<;xb&HZ8bqCVG0~J-*Zs(j<#}uTJWY3u*XPYPbpx#jvR$LA4Pc<>()X8nt`|KPF>{P;;dAT~9_is`OE)U>Od*|$Lt~cMlxqRfd zOjS~u*^y%P{tKGi zxAIr+b%`2l7=CRb>V&wl&l$rfPWVM(Q%zny9}ZOaeLHr>CTsVC<=7hmK>1((2_$yc zC?{l=;wf!lLZw(C7DIg`$M^!SzkT$|cdU_yaEySHfAJ9MAl{-{U?PU|tUl?g>!nO-738Ql%gH zTo<-ge()QhXCy`ef zqflsIxci3Yjr@#CFDbs(hM{>8iHSsr9!1Kqd>DF^R2HtmQ+;tPa^*XN(d8o?14x#X&d7--kaK%y3_cy2dRU7~S literal 0 HcmV?d00001 diff --git a/vendor/glew-cmake-2.2.0/doc/travis.png b/vendor/glew-cmake-2.2.0/doc/travis.png new file mode 100644 index 0000000000000000000000000000000000000000..caf2607e2e344c84da434397c060c406673bf39f GIT binary patch literal 2541 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 Dhk(Rc literal 0 HcmV?d00001 diff --git a/vendor/glew-cmake-2.2.0/doc/wglew.html b/vendor/glew-cmake-2.2.0/doc/wglew.html new file mode 100644 index 0000000..1826b01 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/doc/wglew.html @@ -0,0 +1,169 @@ + + + + + +GLEW: The OpenGL Extension Wrangler Library + + + + + + + + +
+ + + + + + + + +
+ + + + + + + +
Latest Release: 2.2.0

GLEW Logo

+ + + + + + + + + + + + + +
Download
Usage
Building
Installation
Source Generation
Change Log

GitHub
Issues
Pull Requests

SourceForge Page
+

+
+ + + + +
Last Update: 03-15-20
+ OpenGL Logo
+ GitHub Logo
+ Travis Logo
+ SourceForge Logo +
+
+
+ +

The OpenGL Extension Wrangler Library

+ + + + +

Supported WGL Extensions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1 3DFX_multisample

2 3DL_stereo_control

3 AMD_gpu_association

4 ARB_buffer_region
5 ARB_context_flush_control
6 ARB_create_context
7 ARB_create_context_no_error
8 ARB_create_context_profile
9 ARB_create_context_robustness
10 ARB_extensions_string
11 ARB_framebuffer_sRGB
12 ARB_make_current_read
13 ARB_multisample
14 ARB_pbuffer
15 ARB_pixel_format
16 ARB_pixel_format_float
17 ARB_render_texture
18 ARB_robustness_application_isolation
19 ARB_robustness_share_group_isolation

20 ATI_pixel_format_float
21 ATI_render_texture_rectangle

22 EXT_colorspace
23 EXT_create_context_es2_profile
24 EXT_create_context_es_profile
25 EXT_depth_float
26 EXT_display_color_table
27 EXT_extensions_string
28 EXT_framebuffer_sRGB
29 EXT_make_current_read
30 EXT_multisample
31 EXT_pbuffer
32 EXT_pixel_format
33 EXT_pixel_format_packed_float
34 EXT_swap_control
35 EXT_swap_control_tear

36 I3D_digital_video_control
37 I3D_gamma
38 I3D_genlock
39 I3D_image_buffer
40 I3D_swap_frame_lock
41 I3D_swap_frame_usage

42 NV_DX_interop
43 NV_DX_interop2
44 NV_copy_image
45 NV_delay_before_swap
46 NV_float_buffer
47 NV_gpu_affinity
48 NV_multigpu_context
49 NV_multisample_coverage
50 NV_present_video
51 NV_render_depth_texture
52 NV_render_texture_rectangle
53 NV_swap_group
54 NV_vertex_array_range
55 NV_video_capture
56 NV_video_output

57 OML_sync_control
+ +
+ + diff --git a/vendor/glew-cmake-2.2.0/glew-cmake/Dockerfile b/vendor/glew-cmake-2.2.0/glew-cmake/Dockerfile new file mode 100644 index 0000000..9fc0db8 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/glew-cmake/Dockerfile @@ -0,0 +1,10 @@ +# Azure pipeline require glibc based image +FROM debian:buster-slim + +RUN apt update && \ + apt install -y git make gcc python && \ + apt clean && \ + rm -rf /var/lib/apt/lists/* + +RUN mkdir -p ~/.ssh && \ + ssh-keyscan github.com >> ~/.ssh/known_hosts \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/glew-cmake/cmake-install-test.cmake b/vendor/glew-cmake-2.2.0/glew-cmake/cmake-install-test.cmake new file mode 100644 index 0000000..600f781 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/glew-cmake/cmake-install-test.cmake @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 2.8.12) +project(cmake_install_test) + +# Dependencies of glew. +# These are referenced in glewConfig.cmake. but, not automatically found. +find_package(OpenGL REQUIRED) +find_package(X11 REQUIRED) + +find_package(glew) +add_executable(glewinfo glewinfo.c) +target_link_libraries(glewinfo PRIVATE libglew_static) diff --git a/vendor/glew-cmake-2.2.0/glew-cmake/fetch-content.cmake b/vendor/glew-cmake-2.2.0/glew-cmake/fetch-content.cmake new file mode 100644 index 0000000..274370a --- /dev/null +++ b/vendor/glew-cmake-2.2.0/glew-cmake/fetch-content.cmake @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.4) +project(fetch_content) + +include(FetchContent) +FetchContent_Declare( + glew + GIT_REPOSITORY https://github.com/Perlmint/glew-cmake.git + GIT_TAG origin/master +) +FetchContent_GetProperties(glew) +if(NOT glew_POPULATED) + FetchContent_Populate(glew) + + add_subdirectory(${glew_SOURCE_DIR} ${glew_BINARY_DIR} EXCLUDE_FROM_ALL) +endif() + +add_executable(glewinfo glewinfo.c) +target_link_libraries(glewinfo PRIVATE libglew_static) diff --git a/vendor/glew-cmake-2.2.0/glew-cmake/maintain.sh b/vendor/glew-cmake-2.2.0/glew-cmake/maintain.sh new file mode 100644 index 0000000..9eba428 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/glew-cmake/maintain.sh @@ -0,0 +1,240 @@ +#!/bin/bash +# +# This script is used for auto maintaining +# - merging with original repo +# - regenerating sources and headers +# - push changes to repository +# +set -euxo pipefail + +ORIGINAL_REPO_URL=https://github.com/nigels-com/glew.git +absolute_path () { + local TARGET_FILE=$1 + shift + local OUT=$1 + shift + pushd `dirname $TARGET_FILE` + TARGET_FILE=`basename $TARGET_FILE` + + # Iterate down a (possible) chain of symlinks + while [ -L "$TARGET_FILE" ] + do + TARGET_FILE=`readlink $TARGET_FILE` + cd `dirname $TARGET_FILE` + TARGET_FILE=`basename $TARGET_FILE` + done + + # Compute the canonicalized name by finding the physical path + # for the directory we're in and appending the target file. + PHYS_DIR=`pwd -P` + RESULT=$PHYS_DIR/$TARGET_FILE + eval "$OUT=\"${RESULT}\"" + popd +} + +if [ -z "${WORKSPACE:-}" ]; then + echo "Set WORKSPACE as default value" + absolute_path "$0" SCRIPT_PATH + WORKSPACE=$(dirname "$SCRIPT_PATH") + WORKSPACE=$(dirname "$WORKSPACE") + echo "WORKSPACE=$WORKSPACE" +fi + +if [ -z "${TEST_MODE:-}" -o "${TEST_MODE:-}" != "false" ]; then + PUSH_ARG="--dry-run" +else + PUSH_ARG="" +fi + +source_update () { + GIT_BRANCH_NAME=$1 + # for recovery when test mode. + PUSH_COUNT=0 + + echo "Checkout branch ${GIT_BRANCH_NAME}" + git reset --hard + git clean -f . + if [ `git branch | grep ${GIT_BRANCH_NAME} | wc -l` = 0 ]; then + git checkout origin/${GIT_BRANCH_NAME} -b ${GIT_BRANCH_NAME} + else + git checkout -f $GIT_BRANCH_NAME + git pull -s recursive -X theirs --no-edit --progress origin + fi + echo "Pull from origin repository(${ORIGINAL_REPO_URL})" + BEFORE_COMMIT=`git rev-parse HEAD` + git pull -s recursive -X theirs --no-edit --commit --progress original_repo ${GIT_BRANCH_NAME} + AFTER_COMMIT=`git rev-parse HEAD` + if [ "$BEFORE_COMMIT" != "$AFTER_COMMIT" ]; then + echo "Source Updated" + git checkout "original_repo/${GIT_BRANCH_NAME}" -- README.md + git mv -f README.md README_glew.md + git checkout $BEFORE_COMMIT -- README.md + git add -f README.md README_glew.md + git commit --amend -m "Merge ${ORIGINAL_REPO_URL} into ${GIT_BRANCH_NAME} HEAD at $(TZ=GMT date)" + git push ${PUSH_ARG} origin $GIT_BRANCH_NAME:$GIT_BRANCH_NAME + PUSH_COUNT=$((PUSH_COUNT + 1)) + fi + + cd "$WORKSPACE/auto" + echo "CleanUp" + make clean + cd "$WORKSPACE/auto" + REGISTRIES=`find . -name .git -type d -exec dirname {} \;` + for REGISTRY in $REGISTRIES + do + rm -rf $REGISTRY + done + cd "$WORKSPACE" + echo "Generated Source Update" + make extensions + echo "Diff sources" + git add --force src/glew.c src/glewinfo.c include/GL/* doc/* build/*.rc + # Check is there any staged changes? + if [ `git diff --cached | wc -c` -ne 0 ]; then + # Commit and push it + echo "Sources updated" + git commit -m"Generate Sources of ${GIT_BRANCH_NAME} updated at $(TZ=GMT date)" + echo "Push to repository" + git push ${PUSH_ARG} origin ${GIT_BRANCH_NAME}:${GIT_BRANCH_NAME} + PUSH_COUNT=$((PUSH_COUNT + 1)) + else + echo "Differences Not found" + fi + + # when test mode, reset created commits + if [ -n "$PUSH_ARG" ]; then + echo "Reset commits" + git reset --hard HEAD~${PUSH_COUNT} + fi +} + +import_tags () { + echo "Fetch tags from origin repository(${ORIGINAL_REPO_URL})" + BEFORE_TAG_COUNT=`git tag | wc -l | sed "s/^ \+//"` + git fetch --tags --progress original_repo + AFTER_TAG_COUNT=`git tag | wc -l | sed "s/^ \+//"` + NEW_VERSION_TAGS=`diff -u <(git tag | grep glew-cmake- | sed s/glew-cmake/glew/) <(git tag | grep "glew-[0-9]") | grep ^+ | sed 1d | sed s/^+// || true` + if [ ! $BEFORE_TAG_COUNT -eq $AFTER_TAG_COUNT -o ! -z "$NEW_VERSION_TAGS" ]; then + echo "Tags updated" + git push ${PUSH_ARG} --tags origin + + git checkout glew-cmake-release + for TAG in $NEW_VERSION_TAGS + do + echo "Import $TAG" + git checkout $TAG -- . + git mv -f README.md README_glew.md + git checkout master -- CMakeLists.txt GeneratePkgConfig.cmake README.md + cd "$WORKSPACE/auto" + COMMIT_TIME=`git log -1 $TAG --format=%ct` + echo "Patch perl scripts for new version" + find bin -name '*.pl' -exec sed -i "s/do 'bin/use lib '.';\ndo 'bin/" {} \; + echo "Remove registries" + REGISTRIES=`find . -name .git -type d -exec dirname {} \;` + for REGISTRY in $REGISTRIES + do + rm -rf $REGISTRY + done + echo "Run code generation to download registries" + make clean + cd "$WORKSPACE" + make extensions + echo "Rewind registry repos" + cd "$WORKSPACE/auto" + make clean + REGISTRIES=`find . -name .git -type d -exec dirname {} \;` + for REGISTRY in $REGISTRIES + do + cd "$WORKSPACE/auto/$REGISTRY" + PROPER_COMMIT=`git log --until=$COMMIT_TIME -1 --format=%H` + git checkout --force $PROPER_COMMIT + find . -name .dummy -exec touch {} \; + done + echo "CleanUp for tag" + cd "$WORKSPACE/auto" + # remove previous data + rm -rf extensions + echo "Generate source code" + make + cd "$WORKSPACE" + git reset + git add --force src include doc CMakeLists.txt GeneratePkgConfig.cmake build/*.rc config/version + if [ `git diff --cached | wc -c` -ne 0 ]; then + git commit -m"glew-cmake release from $TAG" + NEW_TAG=`echo $TAG | sed s/glew-/glew-cmake-/` + git tag $NEW_TAG + else + echo "No difference! something wrong" + fi + done + + git push ${PUSH_ARG} origin glew-cmake-release + if [ -z "$PUSH_ARG" ]; then + git push --tags ${PUSH_ARG} origin + fi + + # when test mode, reset created commits + if [ -n "$PUSH_ARG" ]; then + echo "Reset commits for tags" + for TAG in $NEW_VERSION_TAGS + do + NEW_TAG=`echo $TAG | sed s/glew-/glew-cmake-/` + git tag -d $NEW_TAG + git reset --hard HEAD~1 + done + fi + fi +} + +# add remote when original repo is not found in local repo +if [ `git remote | grep original_repo | wc -l` = 0 ]; then + git remote add original_repo ${ORIGINAL_REPO_URL} +fi + +git fetch -n original_repo + +branch_list () { + eval "$2=\"`git branch -r | grep $1 | sed "s/\s\+$1\///g" | sed ':a;N;$!ba;s/\n/ /g'`\"" +} + +contains () { + local OUT=$1 + shift + local seeking=$1 + shift + local in=1 + for element in $*; do + if [ $element = $seeking ]; then + in=0 + break + fi + done + eval "$OUT=\"${in}\"" +} + +#branch_list original_repo ORIGINAL_REPO_BRANCH_LIST +#branch_list origin ORIGIN_REPO_BRANCH_LIST + +join () { + local OUT=$1 + shift + local value="`echo $* | sed "s/ /\n/g" | sort -u | sed ':a;N;$!ba;s/\n/ /g'`" + eval "$OUT=\"${value}\"" +} + +#join ALL_BRANCH_LIST $ORIGINAL_REPO_BRANCH_LIST $ORIGIN_REPO_BRANCH_LIST +# +#for branch in $ALL_BRANCH_LIST; do +# contains IN_ORIGINAL_REPO $branch $ORIGINAL_REPO_BRANCH_LIST +# if [ $IN_ORIGINAL_REPO = 1 ]; then +# if [ $branch != "glew-cmake-release" ]; then +# git push ${PUSH_ARG} origin :$branch +# fi +# else +# source_update $branch +# fi +#done + +source_update master + +import_tags \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/glew-cmake/mingw.cmake b/vendor/glew-cmake-2.2.0/glew-cmake/mingw.cmake new file mode 100644 index 0000000..d834751 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/glew-cmake/mingw.cmake @@ -0,0 +1,16 @@ +set(CMAKE_SYSTEM_NAME Windows) +set(TOOLCHAIN_PREFIX x86_64-w64-mingw32) + +# cross compilers to use for C, C++ and Fortran +set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) +set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) + +# target environment on the build host system +set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) + +# modify default behavior of FIND_XXX() commands +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + diff --git a/vendor/glew-cmake-2.2.0/glew-cmake/sub-directory-test.cmake b/vendor/glew-cmake-2.2.0/glew-cmake/sub-directory-test.cmake new file mode 100644 index 0000000..f2c51fc --- /dev/null +++ b/vendor/glew-cmake-2.2.0/glew-cmake/sub-directory-test.cmake @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 2.8.12) +project(sub_test) + +add_subdirectory($ENV{GITHUB_WORKSPACE}/ glew_sub) +add_executable(glewinfo glewinfo.c) +target_link_libraries(glewinfo PRIVATE libglew_static) \ No newline at end of file diff --git a/vendor/glew-cmake-2.2.0/glew.pc.in b/vendor/glew-cmake-2.2.0/glew.pc.in new file mode 100644 index 0000000..a892540 --- /dev/null +++ b/vendor/glew-cmake-2.2.0/glew.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=${prefix} +libdir=@libdir@ +includedir=${prefix}/include + +Name: glew +Description: The OpenGL Extension Wrangler library +Version: @version@ +Cflags: -I${includedir} @cflags@ +Libs: -L${libdir} -l@libname@ @libgl@ +Requires: @requireslib@ diff --git a/vendor/sdl-3.0.0/.clang-format b/vendor/sdl-3.0.0/.clang-format new file mode 100644 index 0000000..e98e5cd --- /dev/null +++ b/vendor/sdl-3.0.0/.clang-format @@ -0,0 +1,90 @@ +--- +AlignConsecutiveMacros: Consecutive +AlignConsecutiveAssignments: None +AlignConsecutiveBitFields: None +AlignConsecutiveDeclarations: None +AlignEscapedNewlines: Right +AlignOperands: Align +AlignTrailingComments: true + +AllowAllArgumentsOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortEnumsOnASingleLine: true +AllowShortBlocksOnASingleLine: Never +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Never +AllowShortLoopsOnASingleLine: false + +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: MultiLine + +# Custom brace breaking +BreakBeforeBraces: Custom +BraceWrapping: + AfterCaseLabel: true + AfterClass: true + AfterControlStatement: Never + AfterEnum: true + AfterFunction: true + AfterNamespace: true + AfterObjCDeclaration: true + AfterStruct: true + AfterUnion: true + AfterExternBlock: false + BeforeElse: false + BeforeWhile: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + +# Make the closing brace of container literals go to a new line +Cpp11BracedListStyle: false + +# Never format includes +IncludeBlocks: Preserve +# clang-format version 4.0 through 12.0: +#SortIncludes: false +# clang-format version 13.0+: +#SortIncludes: Never + +# No length limit, in case it breaks macros, you can +# disable it with /* clang-format off/on */ comments +ColumnLimit: 0 + +IndentWidth: 4 +ContinuationIndentWidth: 4 +IndentCaseLabels: false +IndentCaseBlocks: false +IndentGotoLabels: true +IndentPPDirectives: None +IndentExternBlock: NoIndent + +PointerAlignment: Right +SpaceAfterCStyleCast: false +SpacesInCStyleCastParentheses: false +SpacesInConditionalStatement: false +SpacesInContainerLiterals: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeCaseColon: false +SpaceBeforeParens: ControlStatements +SpaceAroundPointerQualifiers: Default +SpaceInEmptyBlock: false +SpaceInEmptyParentheses: false + +UseCRLF: false +UseTab: Never + +ForEachMacros: + [ + "spa_list_for_each", + "spa_list_for_each_safe", + "wl_list_for_each", + "wl_array_for_each", + "udev_list_entry_foreach", + ] + +--- + diff --git a/vendor/sdl-3.0.0/.clang-tidy b/vendor/sdl-3.0.0/.clang-tidy new file mode 100644 index 0000000..b46d0de --- /dev/null +++ b/vendor/sdl-3.0.0/.clang-tidy @@ -0,0 +1,59 @@ +--- +Checks: > + -*, + bugprone-assert-side-effect, + bugprone-assignment-in-if-condition, + bugprone-bool-pointer-implicit-conversion, + bugprone-dangling-handle, + bugprone-dynamic-static-initializers, + bugprone-infinite-loop, + bugprone-integer-division, + bugprone-macro-repeated-side-effects, + bugprone-misplaced-operator-in-strlen-in-alloc, + bugprone-misplaced-pointer-arithmetic-in-alloc, + bugprone-misplaced-widening-cast, + bugprone-not-null-terminated-result, + bugprone-posix-return, + bugprone-redundant-branch-condition, + bugprone-string-literal-with-embedded-nul, + bugprone-suspicious-memset-usage, + bugprone-suspicious-semicolon, + bugprone-suspicious-string-compare, + bugprone-too-small-loop-variable, + bugprone-unused-return-value, + cert-err33-c, + clang-analyzer-core.*, + clang-analyzer-valist.*, + clang-analyzer-unix.Malloc, + clang-diagnostic-*, + google-readability-casting, + misc-misleading-bidirectional, + misc-misleading-identifier, + misc-misplaced-const, + misc-redundant-expression, + objc-*, + performance-type-promotion-in-math-fn, + readability-avoid-const-params-in-decls, + readability-braces-around-statements, + readability-const-return-type, + readability-duplicate-include, + readability-inconsistent-declaration-parameter-name, + readability-misplaced-array-index, + readability-non-const-parameter, + readability-redundant-control-flow, + readability-redundant-declaration, + readability-redundant-function-ptr-dereference, + readability-redundant-preprocessor, + readability-simplify-boolean-expr + +CheckOptions: + - key: bugprone-assert-side-effect.AssertMacros + value: "SDL_assert, SDL_assert_release, SDL_assert_paranoid, SDL_assert_always, SDL_COMPILE_TIME_ASSERT" + - key: bugprone-misplaced-widening-cast.CheckImplicitCasts + value: true + - key: bugprone-not-null-terminated-result.WantToUseSafeFunctions + value: false # Do not recommend _s functions + +FormatStyle: "file" +HeaderFilterRegex: "*.h$" +WarningsAsErrors: "" diff --git a/vendor/sdl-3.0.0/.editorconfig b/vendor/sdl-3.0.0/.editorconfig new file mode 100644 index 0000000..de2d6de --- /dev/null +++ b/vendor/sdl-3.0.0/.editorconfig @@ -0,0 +1,69 @@ +# For format see editorconfig.org +# Copyright 2022 Collabora Ltd. +# SPDX-License-Identifier: Zlib + +root = true + +[*.{c,cc,cg,cpp,gradle,h,java,m,metal,pl,py,S,sh,txt}] +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{html,js,json,m4,yml,yaml,vcxproj,vcxproj.filters}] +indent_size = 2 +indent_style = space +trim_tailing_whitespace = true + +[*.xml] +indent_size = 4 +indent_style = space + +[{CMakeLists.txt,cmake/*.cmake}] +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[{cmake/cmake_uninstall.cmake.in,test/CMakeLists.txt,cmake/SDL3Config.cmake.in}] +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[{Makefile.*,*.mk,*.sln,*.pbxproj,*.plist}] +indent_size = 8 +indent_style = tab +tab_width = 8 + +[src/joystick/controller_type.*] +indent_style = tab + +[src/joystick/hidapi/steam/*.h] +indent_style = tab + +[src/libm/*.c] +indent_style = tab + +[src/test/SDL_test_{crc32,md5,random}.c] +indent_size = 2 +indent_style = space + +[src/video/yuv2rgb/*.{c,h}] +indent_style = tab + +[wayland-protocols/*.xml] +indent_size = 2 +indent_style = space + +[*.{markdown,md}] +indent_size = 4 +indent_style = space +# Markdown syntax treats tabs as 4 spaces +tab_width = 4 + +[{*.bat,*.rc}] +end_of_line = crlf + +[*.cocci]' +insert_final_newline = true diff --git a/vendor/sdl-3.0.0/.github/PULL_REQUEST_TEMPLATE.md b/vendor/sdl-3.0.0/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..533be85 --- /dev/null +++ b/vendor/sdl-3.0.0/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,7 @@ + + +## Description + + +## Existing Issue(s) + diff --git a/vendor/sdl-3.0.0/.github/cmake/CMakeLists.txt b/vendor/sdl-3.0.0/.github/cmake/CMakeLists.txt new file mode 100644 index 0000000..39ebaf8 --- /dev/null +++ b/vendor/sdl-3.0.0/.github/cmake/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.0) +project(ci_utils C CXX) + +set(txt "CC=${CMAKE_C_COMPILER} +CXX=${CMAKE_CXX_COMPILER} +CFLAGS=${CMAKE_C_FLAGS} +CXXFLAGS=${CMAKE_CXX_FLAGS} +LDFLAGS=${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_C_STANDARD_LIBRARIES} +") + +message("${txt}") + +set(VAR_PATH "/tmp/env.txt" CACHE PATH "Where to write environment file") +message(STATUS "Writing CC/CXX/CFLAGS/CXXFLAGS/LDFLAGS environment to ${VAR_PATH}") + +file(WRITE "${VAR_PATH}" "${txt}") diff --git a/vendor/sdl-3.0.0/.github/workflows/android.yml b/vendor/sdl-3.0.0/.github/workflows/android.yml new file mode 100644 index 0000000..20a09fe --- /dev/null +++ b/vendor/sdl-3.0.0/.github/workflows/android.yml @@ -0,0 +1,105 @@ +name: Build (Android) + +on: [push, pull_request] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +jobs: + android: + name: ${{ matrix.platform.name }} + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + platform: + - { name: Android.mk } + - { name: CMake, cmake: 1, android_abi: "arm64-v8a", android_platform: 23, arch: "aarch64", artifact: "SDL-android-arm64", apk-artifact: "SDL-android-apks-arm64" } + + steps: + - uses: actions/checkout@v3 + - uses: nttld/setup-ndk@v1 + id: setup_ndk + with: + ndk-version: r21e + - name: Build (Android.mk) + if: ${{ matrix.platform.name == 'Android.mk' }} + run: | + ./build-scripts/androidbuildlibs.sh + - uses: actions/setup-java@v3 + if: ${{ matrix.platform.name == 'CMake' }} + with: + distribution: 'temurin' + java-version: '11' + - name: Setup (CMake) + if: ${{ matrix.platform.name == 'CMake' }} + run: | + sudo apt-get update + sudo apt-get install ninja-build pkg-config + - name: Configure (CMake) + if: ${{ matrix.platform.name == 'CMake' }} + run: | + cmake -S . -B build \ + -Wdeprecated -Wdev -Werror \ + -DCMAKE_TOOLCHAIN_FILE=${{ steps.setup_ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake \ + -DSDL_WERROR=ON \ + -DSDL_TESTS=ON \ + -DSDL_INSTALL_TESTS=ON \ + -DSDL_CLANG_TIDY=ON \ + -DANDROID_PLATFORM=${{ matrix.platform.android_platform }} \ + -DANDROID_ABI=${{ matrix.platform.android_abi }} \ + -DSDL_SHARED=ON \ + -DSDL_STATIC=ON \ + -DSDL_STATIC_PIC=ON \ + -DSDL_VENDOR_INFO="Github Workflow" \ + -DCMAKE_INSTALL_PREFIX=prefix \ + -DCMAKE_BUILD_TYPE=Release \ + -GNinja + - name: Build (CMake) + if: ${{ matrix.platform.name == 'CMake' }} + run: | + cmake --build build --config Release --parallel --verbose + - name: Build test apk's (CMake) + if: ${{ matrix.platform.name == 'CMake' }} + run: | + cmake --build build --config Release --parallel --verbose --target testaudiocapture-apk testcontroller-apk testmultiaudio-apk testsprite-apk + - name: Install (CMake) + if: ${{ matrix.platform.name == 'CMake' }} + run: | + cmake --install build --config Release + echo "SDL3_DIR=$(pwd)/prefix" >> $GITHUB_ENV + ( cd prefix; find ) | LC_ALL=C sort -u + - name: Package (CPack) + if: ${{ matrix.platform.name == 'CMake' }} + run: | + cmake --build build/ --config Release --target package + - name: Verify CMake configuration files + if: ${{ matrix.platform.name == 'CMake' }} + run: | + cmake -S cmake/test -B cmake_config_build -G Ninja \ + -DCMAKE_TOOLCHAIN_FILE=${{ steps.setup_ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake \ + -DANDROID_PLATFORM=${{ matrix.platform.android_platform }} \ + -DANDROID_ABI=${{ matrix.platform.android_abi }} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_PREFIX_PATH=${{ env.SDL3_DIR }} + cmake --build cmake_config_build --verbose + - name: Verify sdl3.pc + if: ${{ matrix.platform.name == 'CMake' }} + run: | + export CC="${{ steps.setup_ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=${{ matrix.platform.arch }}-none-linux-androideabi${{ matrix.platform.android_platform }}" + export PKG_CONFIG_PATH=${{ env.SDL3_DIR }}/lib/pkgconfig + cmake/test/test_pkgconfig.sh + - uses: actions/upload-artifact@v3 + if: ${{ matrix.platform.name == 'CMake' }} + with: + if-no-files-found: error + name: ${{ matrix.platform.artifact }} + path: build/dist/SDL3* + - uses: actions/upload-artifact@v3 + if: ${{ matrix.platform.name == 'CMake' }} + with: + if-no-files-found: error + name: ${{ matrix.platform.apk-artifact }} + path: build/test/*.apk diff --git a/vendor/sdl-3.0.0/.github/workflows/cpactions.yml b/vendor/sdl-3.0.0/.github/workflows/cpactions.yml new file mode 100644 index 0000000..b4ebb38 --- /dev/null +++ b/vendor/sdl-3.0.0/.github/workflows/cpactions.yml @@ -0,0 +1,69 @@ +name: Build (C/P Actions) + +on: [push, pull_request] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +jobs: + freebsd: + runs-on: ubuntu-latest + name: FreeBSD + timeout-minutes: 30 + steps: + - uses: actions/checkout@v3 + - name: Build + uses: cross-platform-actions/action@v0.19.1 + with: + operating_system: freebsd + version: '13.2' + run: | + sudo pkg update + sudo pkg install -y \ + cmake \ + ninja \ + pkgconf \ + libXcursor \ + libXext \ + libXinerama \ + libXi \ + libXfixes \ + libXrandr \ + libXScrnSaver \ + libXxf86vm \ + wayland \ + wayland-protocols \ + libxkbcommon \ + mesa-libs \ + libglvnd \ + evdev-proto \ + libinotify \ + alsa-lib \ + jackit \ + pipewire \ + pulseaudio \ + sndio \ + dbus \ + zh-fcitx \ + ibus \ + libudev-devd + cmake -S . -B build -GNinja \ + -Wdeprecated -Wdev -Werror \ + -DCMAKE_BUILD_TYPE=Release \ + -DSDL_HIDAPI_LIBUSB=OFF \ + -DSDL_CHECK_REQUIRED_INCLUDES="/usr/local/include" \ + -DSDL_CHECK_REQUIRED_LINK_OPTIONS="-L/usr/local/lib" + cmake --build build/ --config Release --verbose -- -j`sysctl -n hw.ncpu` + cmake --build build/ --config Release --target package + + cmake --build build/ --config Release --target clean + rm -rf build/dist/_CPack_Packages + rm -rf build/CMakeFiles + rm -rf build/docs + + - uses: actions/upload-artifact@v3 + with: + if-no-files-found: error + name: SDL-freebsd + path: build/dist/SDL3* diff --git a/vendor/sdl-3.0.0/.github/workflows/emscripten.yml b/vendor/sdl-3.0.0/.github/workflows/emscripten.yml new file mode 100644 index 0000000..116b811 --- /dev/null +++ b/vendor/sdl-3.0.0/.github/workflows/emscripten.yml @@ -0,0 +1,58 @@ +name: Build (Emscripten) + +on: [push, pull_request] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +jobs: + emscripten: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: mymindstorm/setup-emsdk@v12 + with: + version: 3.1.35 + - name: Install ninja + run: | + sudo apt-get -y update + sudo apt-get install -y ninja-build + - name: Configure (CMake) + run: | + emcmake cmake -S . -B build \ + -Wdeprecated -Wdev -Werror \ + -DSDL_WERROR=ON \ + -DSDL_TESTS=ON \ + -DSDL_INSTALL_TESTS=ON \ + -DCMAKE_BUILD_TYPE=Debug \ + -DCMAKE_INSTALL_PREFIX=prefix \ + -GNinja + - name: Build (CMake) + run: cmake --build build/ --verbose + - name: Run build-time tests + run: | + set -eu + export SDL_TESTS_QUICK=1 + # FIXME: enable Emscripten build time tests + # ctest -VV --test-dir build/ + - name: Install (CMake) + run: | + echo "SDL3_DIR=$(pwd)/prefix" >> $GITHUB_ENV + cmake --install build/ + - name: Package (CPack) + run: | + cmake --build build/ --config Debug --target package + - name: Verify CMake configuration files + run: | + emcmake cmake -S cmake/test -B cmake_config_build \ + -DCMAKE_BUILD_TYPE=Debug \ + -DSDL_VENDOR_INFO="Github Workflow" \ + -DTEST_SHARED=FALSE \ + -DCMAKE_PREFIX_PATH=${{ env.SDL3_DIR }} + cmake --build cmake_config_build --verbose + - uses: actions/upload-artifact@v3 + with: + if-no-files-found: error + name: SDL-emscripten + path: build/dist/SDL3* diff --git a/vendor/sdl-3.0.0/.github/workflows/haiku.yml b/vendor/sdl-3.0.0/.github/workflows/haiku.yml new file mode 100644 index 0000000..468d281 --- /dev/null +++ b/vendor/sdl-3.0.0/.github/workflows/haiku.yml @@ -0,0 +1,57 @@ +name: Build (Haiku) + +on: [push, pull_request] + +jobs: + haiku: + runs-on: ubuntu-latest + name: Haiku + container: haiku/cross-compiler:x86_64-r1beta4 + steps: + - uses: actions/checkout@v3 + - name: Setup dependencies + run: | + apt-get install pkg-config -y + - name: Configure Haiku environment variables + run: | + echo "CC=x86_64-unknown-haiku-gcc" >> $GITHUB_ENV + echo "CXX=x86_64-unknown-haiku-g++" >> $GITHUB_ENV + - name: Configure (CMake) + run: | + cmake -S . -B build -GNinja \ + -Wdeprecated -Wdev -Werror \ + -DSDL_SHARED=ON \ + -DSDL_STATIC=ON \ + -DSDL_TESTS=ON \ + -DSDL_WERROR=ON \ + -DSDL_INSTALL_TESTS=ON \ + -DSDL_VENDOR_INFO=Github_Workflow \ + -DCMAKE_INSTALL_PREFIX=cmake_prefix \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_SYSTEM_NAME=Haiku + - name: Build (CMake) + run: | + cmake --build build/ --config Release --verbose --parallel + - name: Install (CMake) + run: | + echo "SDL3_DIR=$(pwd)/cmake_prefix" >> $GITHUB_ENV + cmake --install build/ --config Release + - name: Package (CPack) + run: | + cmake --build build/ --config Release --target package + - name: Verify CMake configuration files + run: | + cmake -S cmake/test -B cmake_config_build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_PREFIX_PATH=${{ env.SDL3_DIR }} \ + -DCMAKE_SYSTEM_NAME=Haiku + cmake --build ./cmake_config_build --verbose + - name: Verify sdl3.pc + run: | + export PKG_CONFIG_PATH=${{ env.SDL3_DIR }}/lib/pkgconfig + cmake/test/test_pkgconfig.sh + - uses: actions/upload-artifact@v3 + with: + if-no-files-found: error + name: SDL-haiku + path: build/dist/SDL3* diff --git a/vendor/sdl-3.0.0/.github/workflows/ios.yml b/vendor/sdl-3.0.0/.github/workflows/ios.yml new file mode 100644 index 0000000..b36f29d --- /dev/null +++ b/vendor/sdl-3.0.0/.github/workflows/ios.yml @@ -0,0 +1,24 @@ +name: Build (iOS/tvOS) + +on: [push, pull_request] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +jobs: + Build: + name: ${{ matrix.platform.name }} + runs-on: macos-latest + + strategy: + fail-fast: false + matrix: + platform: + - { name: iOS, target: SDL3, sdk: iphoneos } + - { name: tvOS, target: SDL3, sdk: appletvos } + + steps: + - uses: actions/checkout@v3 + - name: Build + run: xcodebuild -project Xcode/SDL/SDL.xcodeproj -target '${{ matrix.platform.target }}' -configuration Release -sdk ${{ matrix.platform.sdk }} clean build diff --git a/vendor/sdl-3.0.0/.github/workflows/loongarch64.yml b/vendor/sdl-3.0.0/.github/workflows/loongarch64.yml new file mode 100644 index 0000000..f45e1fa --- /dev/null +++ b/vendor/sdl-3.0.0/.github/workflows/loongarch64.yml @@ -0,0 +1,92 @@ +name: Build (LoongArch64) + +on: [push, pull_request] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +jobs: + loongarch64: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + platform: + - { toolchain-version: 2022.09.06 } + steps: + - uses: actions/checkout@v3 + - name: Install build requirements + run: | + sudo apt-get update -y + sudo apt-get install -y --no-install-recommends cmake ninja-build pkg-config tar wget + + - uses: actions/cache/restore@v3 + id: restore-cache + with: + path: /opt/cross-tools + key: loongarch64-${{ matrix.platform.toolchain-version }} + + - name: Download LoongArch64 gcc+glibc toolchain + if: ${{ !steps.restore-cache.outputs.cache-hit }} + run: | + url="https://github.com/loongson/build-tools/releases/download/${{ matrix.platform.toolchain-version }}/loongarch64-clfs-6.3-cross-tools-gcc-glibc.tar.xz" + + wget "$url" -O /tmp/toolchain.tar.xz + + mkdir -p /opt + tar -C /opt -x -f /tmp/toolchain.tar.xz + + - uses: actions/cache/save@v3 + if: ${{ !steps.restore-cache.outputs.cache-hit }} + with: + path: /opt/cross-tools + key: loongarch64-${{ matrix.platform.toolchain-version }} + + - name: Set-up Loongarch64 build environment + run: | + echo "/opt/cross-tools/bin" >> $GITHUB_PATH + echo "CC=loongarch64-unknown-linux-gnu-gcc" >> $GITHUB_ENV + echo "CXX=loongarch64-unknown-linux-gnu-g++" >> $GITHUB_ENV + + - name: Configure (CMake) + run: | + cmake -S . -B build -G Ninja \ + -Wdeprecated -Wdev -Werror \ + -DSDL_SHARED=ON \ + -DSDL_STATIC=ON \ + -DSDL_TESTS=ON \ + -DSDL_WERROR=ON \ + -DSDL_TESTS=ON \ + -DSDL_INSTALL_TESTS=ON \ + -DSDL_VENDOR_INFO="Github Workflow" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=prefix + - name: Build (CMake) + run: | + cmake --build build --verbose + - name: Install (CMake) + run: | + echo "SDL3_DIR=$(pwd)/prefix" >> $GITHUB_ENV + cmake --install build/ + ( cd prefix; find ) | LC_ALL=C sort -u + - name: Package (CPack) + run: | + cmake --build build/ --config Release --target package + - name: Verify CMake configuration files + run: | + cmake -S cmake/test -B cmake_config_build -G Ninja \ + -DTEST_SHARED=TRUE \ + -DTEST_STATIC=TRUE \ + -DCMAKE_PREFIX_PATH=${{ env.SDL3_DIR }} \ + -DCMAKE_BUILD_TYPE=Release + cmake --build cmake_config_build --verbose + - name: Verify sdl3.pc + run: | + export PKG_CONFIG_PATH=${{ env.SDL3_DIR }}/lib/pkgconfig + cmake/test/test_pkgconfig.sh + - uses: actions/upload-artifact@v3 + with: + if-no-files-found: error + name: SDL-loongarch64 + path: build/dist/SDL3* diff --git a/vendor/sdl-3.0.0/.github/workflows/main.yml b/vendor/sdl-3.0.0/.github/workflows/main.yml new file mode 100644 index 0000000..62b0e9b --- /dev/null +++ b/vendor/sdl-3.0.0/.github/workflows/main.yml @@ -0,0 +1,151 @@ +name: Build + +on: [push, pull_request] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +jobs: + Build: + name: ${{ matrix.platform.name }} + runs-on: ${{ matrix.platform.os }} + + defaults: + run: + shell: ${{ matrix.platform.shell }} + + strategy: + fail-fast: false + matrix: + platform: + - { name: Windows (mingw32), os: windows-latest, shell: 'msys2 {0}', msystem: mingw32, msys-env: mingw-w64-i686, artifact: 'SDL-mingw32' } + - { name: Windows (mingw64), os: windows-latest, shell: 'msys2 {0}', msystem: mingw64, msys-env: mingw-w64-x86_64, artifact: 'SDL-mingw64' } + - { name: Windows (clang32), os: windows-latest, shell: 'msys2 {0}', msystem: clang32, msys-env: mingw-w64-clang-i686, artifact: 'SDL-msys2-clang32' } + - { name: Windows (clang64), os: windows-latest, shell: 'msys2 {0}', msystem: clang64, msys-env: mingw-w64-clang-x86_64, artifact: 'SDL-msys2-clang64' } + - { name: Windows (ucrt64), os: windows-latest, shell: 'msys2 {0}', msystem: ucrt64, msys-env: mingw-w64-ucrt-x86_64, artifact: 'SDL-msys2-ucrt64' } + - { name: Ubuntu 20.04, os: ubuntu-20.04, shell: sh, artifact: 'SDL-ubuntu20.04' } + #- { name: Intel oneAPI (Ubuntu 20.04), os: ubuntu-20.04, shell: bash, artifact: 'SDL-ubuntu20.04-oneapi', intel: true, + # source_cmd: 'source /opt/intel/oneapi/setvars.sh; export CC=icx; export CXX=icx;'} + #- { name: Intel Compiler (Ubuntu 20.04), os: ubuntu-20.04, shell: bash, artifact: 'SDL-ubuntu20.04-icc', intel: true, cmake: '-DSDL_CLANG_TIDY=OFF', + # source_cmd: 'source /opt/intel/oneapi/setvars.sh; export CC=icc; export CXX=icpc; export CFLAGS=-diag-disable=10441; export CXXFLAGS=-diag-disable=10441; '} + - { name: Ubuntu 22.04, os: ubuntu-22.04, shell: sh, artifact: 'SDL-ubuntu22.04' } + - { name: MacOS (Framework), os: macos-latest, shell: sh, cmake: '-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DSDL_FRAMEWORK=ON -DSDL_CLANG_TIDY=OFF', skip_test_pkgconfig: true, artifact: 'SDL-macos-framework', no-static: true } + - { name: MacOS (GNU prefix), os: macos-latest, shell: sh, cmake: '-DCMAKE_OSX_ARCHITECTURES="x86_64" -DCLANG_TIDY_BINARY="$(brew --prefix llvm)/bin/clang-tidy"', artifact: 'SDL-macos-gnu' } + + steps: + - name: Set up MSYS2 + if: matrix.platform.shell == 'msys2 {0}' + uses: msys2/setup-msys2@v2 + with: + msystem: ${{ matrix.platform.msystem }} + install: >- + ${{ matrix.platform.msys-env }}-cc + ${{ matrix.platform.msys-env }}-cmake + ${{ matrix.platform.msys-env }}-ninja + ${{ matrix.platform.msys-env }}-perl + ${{ matrix.platform.msys-env }}-pkg-config + ${{ matrix.platform.msys-env }}-clang-tools-extra + + - name: Setup Linux dependencies + if: runner.os == 'Linux' + run: | + sudo apt-get update + sudo apt-get install build-essential git \ + pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ + libaudio-dev libjack-dev libsndio-dev libusb-1.0-0-dev libx11-dev libxext-dev \ + libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev \ + libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ + libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev + + - name: Setup extra Ubuntu 22.04 dependencies + if: matrix.platform.os == 'ubuntu-22.04' + run: | + sudo apt-get install libpipewire-0.3-dev libdecor-0-dev + + - name: Setup Macos dependencies + if: runner.os == 'macOS' + run: | + brew install \ + ninja \ + pkg-config \ + llvm + + - name: Setup Intel oneAPI + if: matrix.platform.intel + run: | + # Setup oneAPI repo + wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB + sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB + sudo echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list + sudo apt-get update -y + + # Install oneAPI + sudo apt-get install -y intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic + + - uses: actions/checkout@v3 + - name: Check that versioning is consistent + # We only need to run this once: arbitrarily use the Linux/CMake build + if: "runner.os == 'Linux'" + run: ./build-scripts/test-versioning.sh + - name: Configure (CMake) + run: | + ${{ matrix.platform.source_cmd }} + cmake -S . -B build -G Ninja \ + -Wdeprecated -Wdev -Werror \ + -DSDL_SHARED=ON \ + -DSDL_STATIC=ON \ + -DSDL_TESTS=ON \ + -DSDL_WERROR=ON \ + -DSDL_INSTALL_TESTS=ON \ + -DSDL_VENDOR_INFO="Github Workflow" \ + -DSDL_CLANG_TIDY=ON \ + -DCMAKE_INSTALL_PREFIX=cmake_prefix \ + -DCMAKE_BUILD_TYPE=Release \ + ${{ matrix.platform.cmake }} + - name: Build (CMake) + id: build + run: | + ${{ matrix.platform.source_cmd }} + cmake --build build/ --config Release --verbose --parallel + - name: Run build-time tests (CMake) + run: | + ${{ matrix.platform.source_cmd }} + set -eu + export SDL_TESTS_QUICK=1 + ctest -VV --test-dir build/ -j2 + if test "${{ runner.os }}" = "Linux"; then + # This should show us the SDL_REVISION + strings build/libSDL3.so.0 | grep SDL- + fi + - name: Install (CMake) + run: | + ${{ matrix.platform.source_cmd }} + set -eu + cmake --install build/ --config Release + ( cd cmake_prefix; find . ) | LC_ALL=C sort -u + - name: Package (CPack) + if: ${{ always() && steps.build.outcome == 'success' }} + run: | + cmake --build build/ --config Release --target package + - name: Verify CMake configuration files + run: | + ${{ matrix.platform.source_cmd }} + cmake -S cmake/test -B cmake_config_build -G Ninja \ + -DTEST_SHARED=ON \ + -DTEST_STATIC=${{ !matrix.platform.no-static }} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_PREFIX_PATH=$(echo "${{ github.workspace }}/cmake_prefix" | sed -e 's#\\#/#g') + cmake --build cmake_config_build --verbose + - name: Verify sdl3.pc + if: ${{ !matrix.platform.skip_test_pkgconfig }} + run: | + ${{ matrix.platform.source_cmd }} + export PKG_CONFIG_PATH=$(echo "${{ github.workspace }}/cmake_prefix/lib/pkgconfig" | sed -e 's#\\#/#g') + cmake/test/test_pkgconfig.sh + - uses: actions/upload-artifact@v3 + if: ${{ always() && steps.build.outcome == 'success' }} + with: + if-no-files-found: error + name: ${{ matrix.platform.artifact }} + path: build/dist/SDL3* diff --git a/vendor/sdl-3.0.0/.github/workflows/msvc.yml b/vendor/sdl-3.0.0/.github/workflows/msvc.yml new file mode 100644 index 0000000..9195a94 --- /dev/null +++ b/vendor/sdl-3.0.0/.github/workflows/msvc.yml @@ -0,0 +1,102 @@ +name: Build (MSVC) + +on: [push, pull_request] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +jobs: + Build: + name: ${{ matrix.platform.name }} + runs-on: windows-latest + + strategy: + fail-fast: false + matrix: + platform: + - { name: Windows (x64), flags: -A x64, project: VisualC/SDL.sln, projectflags: '/p:Platform=x64', artifact: 'SDL-VC-x64' } + - { name: Windows (x86), flags: -A Win32, project: VisualC/SDL.sln, projectflags: '/p:Platform=Win32', artifact: 'SDL-VC-x86' } + - { name: Windows static VCRT (x64), flags: -A x64 -DSDL_FORCE_STATIC_VCRT=ON, artifact: 'SDL-VC-static-VCRT-x64' } + - { name: Windows static VCRT (x86), flags: -A Win32 -DSDL_FORCE_STATIC_VCRT=ON, artifact: 'SDL-VC-static-VCRT-x86' } + - { name: Windows (clang-cl x64), flags: -T ClangCL -A x64, artifact: 'SDL-clang-cl-x64' } + - { name: Windows (clang-cl x86), flags: -T ClangCL -A Win32, artifact: 'SDL-clang-cl-x86' } + - { name: Windows (ARM), flags: -A ARM, artifact: 'SDL-VC-arm32', notests: true } + - { name: Windows (ARM64), flags: -A ARM64, artifact: 'SDL-VC-arm64', notests: true } + - { name: UWP (x64), flags: -A x64 -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0", nowerror: true, notests: true, + project: VisualC-WinRT/SDL-UWP.sln, projectflags: '/p:Platform=x64 /p:WindowsTargetPlatformVersion=10.0.17763.0', artifact: 'SDL-VC-UWP' } + + steps: + - uses: actions/checkout@v3 + - name: Create CMake project using SDL as a subproject + shell: python + run: | + import os + import textwrap + srcdir = r"${{ github.workspace }}".replace("\\", "/") + builddir = f"{ srcdir }/build" + os.makedirs(builddir) + cmakelists_txt = textwrap.dedent(f"""\ + # Always build .PDB symbol file + set(CMAKE_POLICY_DEFAULT_CMP0141 "NEW" CACHE STRING "MSVC debug information format flags are selected by an abstraction") + set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "ProgramDatabase" CACHE STRING "MSVC debug information format") + set(CMAKE_EXE_LINKER_FLAGS "-DEBUG" CACHE STRING "Linker flags for executables") + set(CMAKE_SHARED_LINKER_FLAGS "-DEBUG" CACHE STRING "Linker flag for shared libraries") + cmake_minimum_required(VERSION 3.0...3.25) + project(sdl_user) + enable_testing() + add_subdirectory("{ srcdir }" SDL) + """) + print(cmakelists_txt) + with open(f"{ builddir }/CMakeLists.txt", "w") as f: + f.write(cmakelists_txt) + - name: Configure (CMake) + run: cmake -S build -B build ` + -Wdeprecated -Wdev -Werror ` + -DSDL_WERROR=${{ !matrix.platform.nowerror }} ` + -DSDL_SHARED=ON ` + -DSDL_STATIC=ON ` + -DSDL_TESTS=ON ` + -DSDL_INSTALL_TESTS=ON ` + -DSDL_VENDOR_INFO="Github Workflow" ` + -DSDL_DISABLE_INSTALL=OFF ` + -DSDL_DISABLE_INSTALL_CPACK=OFF ` + -DSDL_DISABLE_INSTALL_DOCS=OFF ` + ${{ matrix.platform.flags }} ` + -DCMAKE_INSTALL_PREFIX=prefix + - name: Build (CMake) + id: build + run: | + cmake --build build/ --config Release --parallel + - name: Run build-time tests + if: ${{ !matrix.platform.notests }} + run: | + $env:SDL_TESTS_QUICK=1 + ctest -VV --test-dir build/ -C Release -j2 + - name: Install (CMake) + run: | + echo "SDL3_DIR=$Env:GITHUB_WORKSPACE/prefix" >> $Env:GITHUB_ENV + cmake --install build/ + - name: Package (CPack) + if: ${{ always() && steps.build.outcome == 'success' }} + run: | + cmake --build build/ --config Release --target PACKAGE + - name: Verify CMake configuration files + run: | + cmake -S cmake/test -B cmake_config_build ` + -DCMAKE_PREFIX_PATH=${{ env.SDL3_DIR }} ` + ${{ matrix.platform.flags }} + cmake --build cmake_config_build --config Release + + - name: Add msbuild to PATH + if: ${{ matrix.platform.project != '' }} + uses: microsoft/setup-msbuild@v1.1.3 + - name: Build msbuild + if: ${{ matrix.platform.project != '' }} + run: msbuild ${{ matrix.platform.project }} /m /p:BuildInParallel=true /p:Configuration=Release ${{ matrix.platform.projectflags }} + - uses: actions/upload-artifact@v3 + if: ${{ always() && steps.build.outcome == 'success' }} + with: + if-no-files-found: error + name: ${{ matrix.platform.artifact }} + path: build/dist/SDL3* diff --git a/vendor/sdl-3.0.0/.github/workflows/n3ds.yml b/vendor/sdl-3.0.0/.github/workflows/n3ds.yml new file mode 100644 index 0000000..42d6dd4 --- /dev/null +++ b/vendor/sdl-3.0.0/.github/workflows/n3ds.yml @@ -0,0 +1,65 @@ +name: Build (Nintendo 3DS) + +on: [push, pull_request] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +jobs: + n3ds: + runs-on: ubuntu-latest + container: + image: devkitpro/devkitarm:latest + steps: + - uses: actions/checkout@v3 + - name: Install build requirements + run: | + apt update + apt install ninja-build + - name: Configure (CMake) + run: | + cmake -S . -B build -G Ninja \ + -Wdeprecated -Wdev -Werror \ + -DCMAKE_TOOLCHAIN_FILE=${DEVKITPRO}/cmake/3DS.cmake \ + -DSDL_WERROR=ON \ + -DSDL_TESTS=ON \ + -DSDL_INSTALL_TESTS=ON \ + -DSDL_VENDOR_INFO="Github Workflow" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=prefix + - name: Build (CMake) + run: | + cmake --build build --verbose + - name: Install (CMake) + run: | + echo "SDL3_DIR=$(pwd)/prefix" >> $GITHUB_ENV + cmake --install build/ + ( cd prefix; find ) | LC_ALL=C sort -u + - name: Package (CPack) + run: | + cmake --build build/ --config Release --target package + - name: Verify CMake configuration files + run: | + cmake -S cmake/test -B cmake_config_build -G Ninja \ + -DCMAKE_TOOLCHAIN_FILE=${DEVKITPRO}/cmake/3DS.cmake \ + -DTEST_SHARED=FALSE \ + -DCMAKE_PREFIX_PATH=${{ env.SDL3_DIR }} \ + -DCMAKE_BUILD_TYPE=Release + cmake --build cmake_config_build --verbose + - name: Extract CC/CXX/CFLAGS/CXXFLAGS from CMake toolchain + run: | + cmake -S .github/cmake -B /tmp/cmake_extract \ + -DCMAKE_TOOLCHAIN_FILE=${DEVKITPRO}/cmake/3DS.cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DVAR_PATH=/tmp/n3ds_env.txt + cat /tmp/n3ds_env.txt >> $GITHUB_ENV + - name: Verify sdl3.pc + run: | + export PKG_CONFIG_PATH=${{ env.SDL3_DIR }}/lib/pkgconfig + cmake/test/test_pkgconfig.sh + - uses: actions/upload-artifact@v3 + with: + if-no-files-found: error + name: SDL-n3ds + path: build/dist/SDL3* diff --git a/vendor/sdl-3.0.0/.github/workflows/ppc64le.yml b/vendor/sdl-3.0.0/.github/workflows/ppc64le.yml new file mode 100644 index 0000000..36be9b2 --- /dev/null +++ b/vendor/sdl-3.0.0/.github/workflows/ppc64le.yml @@ -0,0 +1,61 @@ +name: Build (PowerPC64) + +on: [push, pull_request] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +jobs: + ppc64le: + runs-on: ubuntu-latest + container: + image: dockcross/linux-ppc64le:latest + steps: + - uses: actions/checkout@v3 + - name: Install build requirements + run: | + apt-get update -y + apt-get install -y cmake ninja-build + - name: Configure (CMake) + run: | + # FIXME: Enable SDL_WERROR + cmake -S . -B build -G Ninja \ + -Wdeprecated -Wdev -Werror \ + -DSDL_SHARED=ON \ + -DSDL_STATIC=ON \ + -DSDL_TESTS=ON \ + -DSDL_WERROR=OFF \ + -DSDL_TESTS=ON \ + -DSDL_INSTALL_TESTS=ON \ + -DSDL_VENDOR_INFO="Github Workflow" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=prefix + - name: Build (CMake) + run: | + cmake --build build --verbose + - name: Install (CMake) + run: | + echo "SDL3_DIR=$(pwd)/prefix" >> $GITHUB_ENV + cmake --install build/ + ( cd prefix; find ) | LC_ALL=C sort -u + - name: Package (CPack) + run: | + cmake --build build/ --config Release --target package + - name: Verify CMake configuration files + run: | + cmake -S cmake/test -B cmake_config_build -G Ninja \ + -DTEST_SHARED=TRUE \ + -DTEST_STATIC=TRUE \ + -DCMAKE_PREFIX_PATH=${{ env.SDL3_DIR }} \ + -DCMAKE_BUILD_TYPE=Release + cmake --build cmake_config_build --verbose + - name: Verify sdl3.pc + run: | + export PKG_CONFIG_PATH=${{ env.SDL3_DIR }}/lib/pkgconfig + cmake/test/test_pkgconfig.sh + - uses: actions/upload-artifact@v3 + with: + if-no-files-found: error + name: SDL-ppc64le + path: build/dist/SDL3* diff --git a/vendor/sdl-3.0.0/.github/workflows/ps2.yml b/vendor/sdl-3.0.0/.github/workflows/ps2.yml new file mode 100644 index 0000000..f1c349b --- /dev/null +++ b/vendor/sdl-3.0.0/.github/workflows/ps2.yml @@ -0,0 +1,69 @@ +name: Build (Sony Playstation 2) + +on: [push, pull_request] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +jobs: + ps2: + runs-on: ubuntu-latest + container: ps2dev/ps2dev:latest + steps: + - uses: actions/checkout@v3 + - name: Setup dependencies + run: | + apk update + apk add cmake gmp mpc1 mpfr4 ninja pkgconf make git + + # To be removed once ps2_drivers is part of PS2DEV + - name: Install ps2_drivers lib + run: | + git clone https://github.com/fjtrujy/ps2_drivers.git + cd ps2_drivers + make -j $(getconf _NPROCESSORS_ONLN) clean + make -j $(getconf _NPROCESSORS_ONLN) + make -j $(getconf _NPROCESSORS_ONLN) install + + - name: Configure (CMake) + run: | + cmake -S . -B build -G Ninja \ + -DCMAKE_TOOLCHAIN_FILE=$PS2DEV/ps2sdk/ps2dev.cmake \ + -DSDL_WERROR=ON \ + -DSDL_TESTS=ON \ + -DSDL_INSTALL_TESTS=ON \ + -DCMAKE_INSTALL_PREFIX=cmake_prefix \ + -DCMAKE_BUILD_TYPE=Release + - name: Build (CMake) + run: cmake --build build --config Release --verbose -- -j 1 + - name: Install (CMake) + run: | + set -eu + cmake --install build/ --config Release + echo "SDL3_DIR=$(pwd)/cmake_prefix" >> $GITHUB_ENV + ( cd cmake_prefix; find ) | LC_ALL=C sort -u + - name: Package (CPack) + run: | + cmake --build build/ --config Release --target package -- -j 1 + + - name: Verify CMake configuration files + run: | + cmake -S cmake/test -B cmake_config_build -G Ninja \ + -Wdeprecated -Wdev -Werror \ + -DCMAKE_TOOLCHAIN_FILE=$PS2DEV/ps2sdk/ps2dev.cmake \ + -DTEST_SHARED=FALSE \ + -DCMAKE_PREFIX_PATH=${{ env.SDL3_DIR }} \ + -DCMAKE_BUILD_TYPE=Release + cmake --build cmake_config_build --verbose -- -j 1 + - name: Verify sdl3.pc + run: | + export CC=mips64r5900el-ps2-elf-gcc + export LDFLAGS="-L$PS2DEV/ps2sdk/ee/lib -L$PS2DEV/gsKit/lib -L$PS2DEV/ps2sdk/ports/lib" + export PKG_CONFIG_PATH=${{ env.SDL3_DIR }}/lib/pkgconfig + cmake/test/test_pkgconfig.sh + - uses: actions/upload-artifact@v3 + with: + if-no-files-found: error + name: SDL-ps2 + path: build/dist/SDL3* diff --git a/vendor/sdl-3.0.0/.github/workflows/psp.yml b/vendor/sdl-3.0.0/.github/workflows/psp.yml new file mode 100644 index 0000000..333bd64 --- /dev/null +++ b/vendor/sdl-3.0.0/.github/workflows/psp.yml @@ -0,0 +1,61 @@ +name: Build (Sony Playstation Portable) + +on: [push, pull_request] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +jobs: + psp: + runs-on: ubuntu-latest + container: pspdev/pspdev:latest + steps: + - uses: actions/checkout@v3 + - name: Setup dependencies + run: | + apk update + apk add cmake gmp mpc1 mpfr4 make pkgconf + - name: Patch the pspdev toolchain to use -isystem instead of -I + run: | + # https://github.com/pspdev/pspsdk/issues/123 + sed -E s/-I/-isystem/g -i $PSPDEV/psp/share/pspdev.cmake + - name: Configure (CMake) + run: | + cmake -S . -B build \ + -Wdeprecated -Wdev -Werror \ + -DCMAKE_TOOLCHAIN_FILE=$PSPDEV/psp/share/pspdev.cmake \ + -DSDL_WERROR=ON \ + -DSDL_TESTS=ON \ + -DSDL_INSTALL_TESTS=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=prefix + - name: Build (CMake) + run: cmake --build build --config Release --verbose + - name: Install (CMake) + run: | + echo "SDL3_DIR=$(pwd)/prefix" >> $GITHUB_ENV + cmake --install build --config Release + ( cd prefix; find ) | LC_ALL=C sort -u + - name: Package (CPack) + run: | + cmake --build build/ --config Release --target package + - name: Verify CMake configuration files + run: | + cmake -S cmake/test -B cmake_config_build \ + -DCMAKE_TOOLCHAIN_FILE=$PSPDEV/psp/share/pspdev.cmake \ + -DCMAKE_PREFIX_PATH=${{ env.SDL3_DIR }} \ + -DTEST_SHARED=FALSE \ + -DCMAKE_BUILD_TYPE=Release + cmake --build cmake_config_build --verbose + - name: Verify sdl3.pc + run: | + export CC=psp-gcc + export LDFLAGS="-L$PSPDEV/lib -L$PSPDEV/psp/lib -L$PSPDEV/psp/sdk/lib" + export PKG_CONFIG_PATH=${{ env.SDL3_DIR }}/lib/pkgconfig + cmake/test/test_pkgconfig.sh + - uses: actions/upload-artifact@v3 + with: + if-no-files-found: error + name: SDL-psp + path: build/dist/SDL3* diff --git a/vendor/sdl-3.0.0/.github/workflows/riscos.yml b/vendor/sdl-3.0.0/.github/workflows/riscos.yml new file mode 100644 index 0000000..2f1869e --- /dev/null +++ b/vendor/sdl-3.0.0/.github/workflows/riscos.yml @@ -0,0 +1,64 @@ +name: Build (RISC OS) + +on: [push, pull_request] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +jobs: + Build: + name: ${{ matrix.platform.name }} + runs-on: ubuntu-latest + container: riscosdotinfo/riscos-gccsdk-4.7:latest + + strategy: + fail-fast: false + matrix: + platform: + - { name: CMake } + + steps: + - name: Setup dependencies + run: apt-get update && apt-get install -y cmake ninja-build + - uses: actions/checkout@v3 + - name: Configure (CMake) + if: ${{ contains(matrix.platform.name, 'CMake') }} + run: | + cmake -S . -B build -G Ninja \ + -Wdeprecated -Wdev -Werror \ + -DCMAKE_TOOLCHAIN_FILE=/home/riscos/env/toolchain-riscos.cmake \ + -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON \ + -DRISCOS:BOOL=ON \ + -DSDL_GCC_ATOMICS=OFF \ + -DSDL_TESTS=ON \ + -DSDL_INSTALL_TESTS=ON \ + -DSDL_VENDOR_INFO="Github Workflow" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/prefix_cmake + - name: Build (CMake) + if: ${{ contains(matrix.platform.name, 'CMake') }} + run: cmake --build build --verbose + - name: Install (CMake) + if: ${{ contains(matrix.platform.name, 'CMake') }} + run: | + echo "SDL3_DIR=${{ github.workspace }}/prefix_cmake" >> $GITHUB_ENV + cmake --install build/ + ( cd ${{ github.workspace }}/prefix_cmake; find ) | LC_ALL=C sort -u + - name: Package (CPack) + run: | + cmake --build build/ --config Release --target package + - name: Verify CMake configuration files + run: | + cmake -S cmake/test -B cmake_config_build -G Ninja \ + -DTEST_SHARED=OFF \ + -DCMAKE_TOOLCHAIN_FILE=/home/riscos/env/toolchain-riscos.cmake \ + -DCMAKE_PREFIX_PATH=${{ env.SDL3_DIR }} \ + -DCMAKE_BUILD_TYPE=Release \ + ${{ matrix.platform.test_args }} + cmake --build cmake_config_build --verbose + - uses: actions/upload-artifact@v3 + with: + if-no-files-found: error + name: SDL-riscos + path: build/dist/SDL3* diff --git a/vendor/sdl-3.0.0/.github/workflows/visionos.yml.disabled b/vendor/sdl-3.0.0/.github/workflows/visionos.yml.disabled new file mode 100644 index 0000000..f697543 --- /dev/null +++ b/vendor/sdl-3.0.0/.github/workflows/visionos.yml.disabled @@ -0,0 +1,22 @@ +name: Build (visionOS) + +# FIXME: Enable this workflow once CMake 3.28 becomes available on GitHub +on: [push, pull_request] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +jobs: + Build: + name: visionOS + runs-on: macos-latest + + steps: + - uses: actions/checkout@v3 + - name: Configure + run: | + cmake -B build -GXcode -DCMAKE_SYSTEM_NAME=visionOS + - name: Build + run: | + cmake --build build diff --git a/vendor/sdl-3.0.0/.github/workflows/vita.yml b/vendor/sdl-3.0.0/.github/workflows/vita.yml new file mode 100644 index 0000000..6c8f14a --- /dev/null +++ b/vendor/sdl-3.0.0/.github/workflows/vita.yml @@ -0,0 +1,136 @@ +name: Build (Sony Playstation Vita) + +on: [push, pull_request] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +defaults: + run: + shell: sh + +jobs: + vita: + name: ${{ matrix.platform.name }} + runs-on: ubuntu-latest + container: + image: vitasdk/vitasdk:latest + strategy: + fail-fast: false + matrix: + platform: + - { name: Vita (GLES w/ pib), pib: true, version: 1.1.4, artifact: SDL-vita-pib } + - { name: Vita (GLES w/ PVR_PSP2 + gles4vita), pvr: true, version: 3.9, artifact: SDL-vita-pvr } + + steps: + - uses: actions/checkout@v3 + - name: Install build requirements + run: | + apk update + apk add cmake ninja pkgconf bash tar + + - uses: actions/cache/restore@v3 + id: restore-cache + with: + path: /vita/dependencies + key: ${{ matrix.platform.artifact }}-${{ matrix.platform.version }} + + - name: Download PVR_PSP2 (GLES) + if: ${{ !!matrix.platform.pvr && !steps.restore-cache.outputs.cache-hit }} + run: | + pvr_psp2_version=${{ matrix.platform.version }} + + mkdir -p /vita/dependencies/include + mkdir -p /vita/dependencies/lib + + # Configure PVR_PSP2 headers + wget https://github.com/GrapheneCt/PVR_PSP2/archive/refs/tags/v$pvr_psp2_version.zip -P/tmp + unzip /tmp/v$pvr_psp2_version.zip -d/tmp + cp -r /tmp/PVR_PSP2-$pvr_psp2_version/include/* /vita/dependencies/include + rm /tmp/v$pvr_psp2_version.zip + + # include guard of PVR_PSP2's khrplatform.h does not match the usual one + sed -i -e s/__drvkhrplatform_h_/__khrplatform_h_/ /vita/dependencies/include/KHR/khrplatform.h + + # Configure PVR_PSP2 stub libraries + wget https://github.com/GrapheneCt/PVR_PSP2/releases/download/v$pvr_psp2_version/vitasdk_stubs.zip -P/tmp + unzip /tmp/vitasdk_stubs.zip -d/tmp/pvr_psp2_stubs + find /tmp/pvr_psp2_stubs -type f -name "*.a" -exec cp {} /vita/dependencies/lib \; + rm /tmp/vitasdk_stubs.zip + rm -rf /tmp/pvr_psp2_stubs + + - name: Download gl4es4vita (OpenGL) + if: ${{ !!matrix.platform.pib && !steps.restore-cache.outputs.cache-hit }} + run: | + gl4es4vita_version=${{ matrix.platform.version }} + + mkdir -p /vita/dependencies/include + mkdir -p /vita/dependencies/lib + + # Configure gl4es4vita headers + wget https://github.com/SonicMastr/gl4es4vita/releases/download/v$gl4es4vita_version-vita/include.zip -P/tmp + unzip -o /tmp/include.zip -d/vita/dependencies/include + rm /tmp/include.zip + + # Configure gl4es4vita stub libraries + wget https://github.com/SonicMastr/gl4es4vita/releases/download/v$gl4es4vita_version-vita/vitasdk_stubs.zip -P/tmp + unzip /tmp/vitasdk_stubs.zip -d/vita/dependencies/lib + + - uses: actions/cache/save@v3 + if: ${{ !steps.restore-cache.outputs.cache-hit }} + with: + path: /vita/dependencies + key: ${{ matrix.platform.artifact }}-${{ matrix.platform.version }} + + - name: Copy PVR_PSP2 (GLES) or gl4es4vita (OpenGL) to vita toolchain dir + run: | + cp -rv /vita/dependencies/* ${VITASDK}/arm-vita-eabi + + - name: Fix vita.toolchain.cmake + run: | + # cache PKG_CONFIG_PATH + sed -i -E 's/set\( PKG_CONFIG_EXECUTABLE "\$\{VITASDK}\/bin\/arm-vita-eabi-pkg-config" )/set( PKG_CONFIG_EXECUTABLE "${VITASDK}\/bin\/arm-vita-eabi-pkg-config" CACHE PATH "Path of pkg-config executable" )/' ${VITASDK}/share/vita.toolchain.cmake + + - name: Configure (CMake) + run: | + cmake -S . -B build -G Ninja \ + -Wdeprecated -Wdev -Werror \ + -DCMAKE_TOOLCHAIN_FILE=${VITASDK}/share/vita.toolchain.cmake \ + -DVIDEO_VITA_PIB=${{ !!matrix.platform.pib }} \ + -DVIDEO_VITA_PVR=${{ !!matrix.platform.pvr }} \ + -DSDL_ARMNEON=ON \ + -DSDL_ARMSIMD=ON \ + -DSDL_WERROR=ON \ + -DSDL_TESTS=ON \ + -DSDL_INSTALL_TESTS=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=prefix + - name: Build (CMake) + run: cmake --build build --verbose + - name: Install (CMake) + run: | + echo "SDL3_DIR=$(pwd)/prefix" >> $GITHUB_ENV + cmake --install build/ + ( cd prefix; find ) | LC_ALL=C sort -u + - name: Package (CPack) + run: | + cmake --build build/ --config Release --target package + - name: Verify CMake configuration files + run: | + cmake -S cmake/test -B cmake_config_build -G Ninja \ + -DCMAKE_TOOLCHAIN_FILE=${VITASDK}/share/vita.toolchain.cmake \ + -DTEST_SHARED=FALSE \ + -DCMAKE_PREFIX_PATH=${{ env.SDL3_DIR }} \ + -DCMAKE_BUILD_TYPE=Release + cmake --build cmake_config_build --verbose + - name: Verify sdl3.pc + run: | + export CC=arm-vita-eabi-gcc + export PKG_CONFIG_PATH=${{ env.SDL3_DIR }}/lib/pkgconfig + cmake/test/test_pkgconfig.sh + - uses: actions/upload-artifact@v3 + with: + if-no-files-found: error + name: ${{ matrix.platform.artifact }} + path: build/dist/SDL3* diff --git a/vendor/sdl-3.0.0/.gitignore b/vendor/sdl-3.0.0/.gitignore new file mode 100644 index 0000000..93ee540 --- /dev/null +++ b/vendor/sdl-3.0.0/.gitignore @@ -0,0 +1,160 @@ +build/ +build-*/ +!build-scripts/ +buildbot/ +/VERSION.txt +__pycache__ + +*.so +*.so.* +*.dll +*.exe +*.o +*.obj +*.res +*.lib +*.a +*.la +*.dSYM +*,e1f +*,ff8 +*.lnk +*.err +*.exp +*.map +*.orig +*~ +*.swp +*.tmp +*.rej + +# for CMake +CMakeFiles/ +CMakeCache.txt +cmake_install.cmake +cmake_uninstall.cmake +SDL3ConfigVersion.cmake +.ninja_* +*.ninja + +# for CLion +.idea +cmake-build-* + +# for Xcode +*.mode1* +*.perspective* +*.pbxuser +(^|/)build($|/) +.DS_Store +xcuserdata +*.xcworkspace + +# for Visual Studio Code +.vscode/ + +# for Visual C++ +.vs +Debug +Release +*.user +*.ncb +*.suo +*.sdf +VisualC/tests/gamepadmap/axis.bmp +VisualC/tests/gamepadmap/button.bmp +VisualC/tests/gamepadmap/gamepadmap.bmp +VisualC/tests/gamepadmap/gamepadmap_back.bmp +VisualC/tests/loopwave/sample.wav +VisualC/tests/testautomation/CompareSurfaces0001_Reference.bmp +VisualC/tests/testautomation/CompareSurfaces0001_TestOutput.bmp +VisualC/tests/testgamepad/axis.bmp +VisualC/tests/testgamepad/button.bmp +VisualC/tests/testgamepad/gamepadmap.bmp +VisualC/tests/testgamepad/gamepadmap_back.bmp +VisualC/tests/testoverlay/moose.dat +VisualC/tests/testrendertarget/icon.bmp +VisualC/tests/testrendertarget/sample.bmp +VisualC/tests/testscale/icon.bmp +VisualC/tests/testscale/sample.bmp +VisualC/tests/testsprite/icon.bmp +VisualC/tests/testyuv/testyuv.bmp +VisualC-GDK/**/Layout + +# for Android +android-project/local.properties +android-project/.gradle/ + +test/checkkeys +test/checkkeysthreads +test/gamepadmap +test/loopwave +test/loopwavequeue +test/testatomic +test/testaudiocapture +test/testaudiohotplug +test/testaudioinfo +test/testautomation +test/testbounds +test/testcustomcursor +test/testdisplayinfo +test/testdraw +test/testdrawchessboard +test/testdropfile +test/testerror +test/testevdev +test/testfile +test/testfilesystem +test/testgamepad +test/testgeometry +test/testgesture +test/testgl +test/testgles +test/testgles2 +test/testhaptic +test/testhittesting +test/testhotplug +test/testiconv +test/testime +test/testintersections +test/testjoystick +test/testkeys +test/testloadso +test/testlocale +test/testlock +test/testmessage +test/testmouse +test/testmultiaudio +test/testnative +test/testoverlay +test/testplatform +test/testpower +test/testqsort +test/testrelative +test/testrendercopyex +test/testrendertarget +test/testresample +test/testrumble +test/testscale +test/testsem +test/testsensor +test/testshader +test/testshape +test/testsprite +test/testspriteminimal +test/teststreaming +test/testsurround +test/testthread +test/testtimer +test/testurl +test/testver +test/testviewport +test/testvulkan +test/testwm +test/testyuv +test/torturethread + +# for Doxygen +docs/output +SDL.tag +doxygen_warn.txt diff --git a/vendor/sdl-3.0.0/.wikiheaders-options b/vendor/sdl-3.0.0/.wikiheaders-options new file mode 100644 index 0000000..e11b0a7 --- /dev/null +++ b/vendor/sdl-3.0.0/.wikiheaders-options @@ -0,0 +1,17 @@ +projectfullname = SDL +projectshortname = SDL +incsubdir = include/SDL3 +wikisubdir = +readmesubdir = docs +apiprefixregex = (SDL_|SDLK_|KMOD_|AUDIO_) +mainincludefname = SDL3/SDL.h +versionfname = include/SDL3/SDL_version.h +versionmajorregex = \A\#define\s+SDL_MAJOR_VERSION\s+(\d+)\Z +versionminorregex = \A\#define\s+SDL_MINOR_VERSION\s+(\d+)\Z +versionpatchregex = \A\#define\s+SDL_PATCHLEVEL\s+(\d+)\Z +selectheaderregex = \ASDL.*?\.h\Z +projecturl = https://libsdl.org/ +wikiurl = https://wiki.libsdl.org +bugreporturl = https://github.com/libsdl-org/sdlwiki/issues/new +warn_about_missing = 0 +wikipreamble = (This is the documentation for SDL3, which is under heavy development and the API is changing! [SDL2](https://wiki.libsdl.org/SDL2/) is the current stable version!) diff --git a/vendor/sdl-3.0.0/Android.mk b/vendor/sdl-3.0.0/Android.mk new file mode 100644 index 0000000..3779eb5 --- /dev/null +++ b/vendor/sdl-3.0.0/Android.mk @@ -0,0 +1,136 @@ +LOCAL_PATH := $(call my-dir) + +########################### +# +# SDL shared library +# +########################### + +include $(CLEAR_VARS) + +LOCAL_MODULE := SDL3 + +LOCAL_C_INCLUDES := $(LOCAL_PATH)/include $(LOCAL_PATH)/src + +LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES) + +LOCAL_SRC_FILES := \ + $(subst $(LOCAL_PATH)/,, \ + $(wildcard $(LOCAL_PATH)/src/*.c) \ + $(wildcard $(LOCAL_PATH)/src/audio/*.c) \ + $(wildcard $(LOCAL_PATH)/src/audio/android/*.c) \ + $(wildcard $(LOCAL_PATH)/src/audio/dummy/*.c) \ + $(wildcard $(LOCAL_PATH)/src/audio/aaudio/*.c) \ + $(wildcard $(LOCAL_PATH)/src/audio/openslES/*.c) \ + $(LOCAL_PATH)/src/atomic/SDL_atomic.c.arm \ + $(LOCAL_PATH)/src/atomic/SDL_spinlock.c.arm \ + $(wildcard $(LOCAL_PATH)/src/core/*.c) \ + $(wildcard $(LOCAL_PATH)/src/core/android/*.c) \ + $(wildcard $(LOCAL_PATH)/src/cpuinfo/*.c) \ + $(wildcard $(LOCAL_PATH)/src/dynapi/*.c) \ + $(wildcard $(LOCAL_PATH)/src/events/*.c) \ + $(wildcard $(LOCAL_PATH)/src/file/*.c) \ + $(wildcard $(LOCAL_PATH)/src/haptic/*.c) \ + $(wildcard $(LOCAL_PATH)/src/haptic/android/*.c) \ + $(wildcard $(LOCAL_PATH)/src/hidapi/*.c) \ + $(wildcard $(LOCAL_PATH)/src/hidapi/android/*.cpp) \ + $(wildcard $(LOCAL_PATH)/src/joystick/*.c) \ + $(wildcard $(LOCAL_PATH)/src/joystick/android/*.c) \ + $(wildcard $(LOCAL_PATH)/src/joystick/hidapi/*.c) \ + $(wildcard $(LOCAL_PATH)/src/joystick/virtual/*.c) \ + $(wildcard $(LOCAL_PATH)/src/loadso/dlopen/*.c) \ + $(wildcard $(LOCAL_PATH)/src/locale/*.c) \ + $(wildcard $(LOCAL_PATH)/src/locale/android/*.c) \ + $(wildcard $(LOCAL_PATH)/src/misc/*.c) \ + $(wildcard $(LOCAL_PATH)/src/misc/android/*.c) \ + $(wildcard $(LOCAL_PATH)/src/power/*.c) \ + $(wildcard $(LOCAL_PATH)/src/power/android/*.c) \ + $(wildcard $(LOCAL_PATH)/src/filesystem/android/*.c) \ + $(wildcard $(LOCAL_PATH)/src/sensor/*.c) \ + $(wildcard $(LOCAL_PATH)/src/sensor/android/*.c) \ + $(wildcard $(LOCAL_PATH)/src/render/*.c) \ + $(wildcard $(LOCAL_PATH)/src/render/*/*.c) \ + $(wildcard $(LOCAL_PATH)/src/stdlib/*.c) \ + $(wildcard $(LOCAL_PATH)/src/thread/*.c) \ + $(wildcard $(LOCAL_PATH)/src/thread/pthread/*.c) \ + $(wildcard $(LOCAL_PATH)/src/timer/*.c) \ + $(wildcard $(LOCAL_PATH)/src/timer/unix/*.c) \ + $(wildcard $(LOCAL_PATH)/src/video/*.c) \ + $(wildcard $(LOCAL_PATH)/src/video/android/*.c) \ + $(wildcard $(LOCAL_PATH)/src/video/yuv2rgb/*.c)) + +LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES +LOCAL_CFLAGS += \ + -Wall -Wextra \ + -Wmissing-prototypes \ + -Wunreachable-code-break \ + -Wunneeded-internal-declaration \ + -Wmissing-variable-declarations \ + -Wfloat-conversion \ + -Wshorten-64-to-32 \ + -Wunreachable-code-return \ + -Wshift-sign-overflow \ + -Wstrict-prototypes \ + -Wkeyword-macro \ + +# Warnings we haven't fixed (yet) +LOCAL_CFLAGS += -Wno-unused-parameter -Wno-sign-compare + +LOCAL_CXXFLAGS += -std=gnu++11 + +LOCAL_LDLIBS := -ldl -lGLESv1_CM -lGLESv2 -lOpenSLES -llog -landroid + +LOCAL_LDFLAGS := -Wl,--no-undefined -Wl,--version-script=$(LOCAL_PATH)/src/dynapi/SDL_dynapi.sym + +ifeq ($(NDK_DEBUG),1) + cmd-strip := +endif + +LOCAL_STATIC_LIBRARIES := cpufeatures + +include $(BUILD_SHARED_LIBRARY) + + +########################### +# +# SDL_test static library +# +########################### + +LOCAL_MODULE := SDL3_test + +LOCAL_MODULE_FILENAME := libSDL3_test + +LOCAL_SRC_FILES := \ + $(subst $(LOCAL_PATH)/,, \ + $(wildcard $(LOCAL_PATH)/src/test/*.c)) + +LOCAL_LDLIBS := + +LOCAL_LDFLAGS := + +LOCAL_EXPORT_LDLIBS := + +include $(BUILD_STATIC_LIBRARY) + + +########################### +# +# SDL static library +# +########################### + +LOCAL_MODULE := SDL3_static + +LOCAL_MODULE_FILENAME := libSDL3 + +LOCAL_LDLIBS := + +LOCAL_LDFLAGS := + +LOCAL_EXPORT_LDLIBS := -ldl -lGLESv1_CM -lGLESv2 -llog -landroid + +include $(BUILD_STATIC_LIBRARY) + +$(call import-module,android/cpufeatures) + diff --git a/vendor/sdl-3.0.0/BUGS.txt b/vendor/sdl-3.0.0/BUGS.txt new file mode 100644 index 0000000..eb973d5 --- /dev/null +++ b/vendor/sdl-3.0.0/BUGS.txt @@ -0,0 +1,16 @@ + +Bugs are now managed in the SDL issue tracker, here: + + https://github.com/libsdl-org/SDL/issues + +You may report bugs there, and search to see if a given issue has already + been reported, discussed, and maybe even fixed. + + +You may also find help at the SDL forums/mailing list: + + https://discourse.libsdl.org/ + +Bug reports are welcome here, but we really appreciate if you use the issue + tracker, as bugs discussed on the mailing list may be forgotten or missed. + diff --git a/vendor/sdl-3.0.0/CMakeLists.txt b/vendor/sdl-3.0.0/CMakeLists.txt new file mode 100644 index 0000000..6edba99 --- /dev/null +++ b/vendor/sdl-3.0.0/CMakeLists.txt @@ -0,0 +1,3427 @@ +cmake_minimum_required(VERSION 3.16) + +if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) + message(FATAL_ERROR "Prevented in-tree build. Please create a build directory outside of the SDL source code and run \"cmake -S ${CMAKE_SOURCE_DIR} -B .\" from there") +endif() + +# MSVC runtime library flags are selected by an abstraction. +set(CMAKE_POLICY_DEFAULT_CMP0091 NEW) + +# See docs/release_checklist.md +project(SDL3 LANGUAGES C CXX VERSION "3.0.0") + +if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) + set(SDL3_SUBPROJECT OFF) +else() + set(SDL3_SUBPROJECT ON) +endif() + +# CMake 3.0 expands the "if(${A})" in "set(OFF 1);set(A OFF);if(${A})" to "if(1)" +# CMake 3.24+ emits a warning when not set. +unset(OFF) +unset(ON) +if(POLICY CMP0054) + cmake_policy(SET CMP0054 NEW) +endif() + +include(CheckLibraryExists) +include(CheckIncludeFile) +include(CheckLanguage) +include(CheckSymbolExists) +include(CheckCSourceCompiles) +include(CheckCSourceRuns) +include(CheckCCompilerFlag) +include(CheckCXXCompilerFlag) +include(CheckStructHasMember) +include(CMakeDependentOption) +include(CMakeParseArguments) +include(CMakePushCheckState) +include(GNUInstallDirs) + +if(NOT DEFINED OpenGL_GL_PREFERENCE) + set(OpenGL_GL_PREFERENCE GLVND) +endif() + +find_package(PkgConfig) + +list(APPEND CMAKE_MODULE_PATH "${SDL3_SOURCE_DIR}/cmake") +include("${SDL3_SOURCE_DIR}/cmake/macros.cmake") +include("${SDL3_SOURCE_DIR}/cmake/sdlchecks.cmake") +include("${SDL3_SOURCE_DIR}/cmake/sdlcompilers.cmake") +include("${SDL3_SOURCE_DIR}/cmake/sdlmanpages.cmake") +include("${SDL3_SOURCE_DIR}/cmake/sdlplatform.cmake") +include("${SDL3_SOURCE_DIR}/cmake/sdltargets.cmake") +include("${SDL3_SOURCE_DIR}/cmake/CheckCPUArchitecture.cmake") +include("${SDL3_SOURCE_DIR}/cmake/GetGitRevisionDescription.cmake") +include("${SDL3_SOURCE_DIR}/cmake/3rdparty.cmake") + +SDL_DetectCompiler() +SDL_DetectCPUArchitecture() + +# Increment this if there is an incompatible change - but if that happens, +# we should rename the library from SDL3 to SDL4, at which point this would +# reset to 0 anyway. +set(SDL_SO_VERSION_MAJOR "0") +set(SDL_SO_VERSION_MINOR "${PROJECT_VERSION_MINOR}") +set(SDL_SO_VERSION_PATCH "${PROJECT_VERSION_PATCH}") +set(SDL_SO_VERSION "${SDL_SO_VERSION_MAJOR}.${SDL_SO_VERSION_MINOR}.${SDL_SO_VERSION_PATCH}") + +if(PROJECT_VERSION_MINOR MATCHES "[02468]$") + math(EXPR SDL_DYLIB_COMPAT_VERSION_MAJOR "100 * ${PROJECT_VERSION_MINOR} + 1") + set(SDL_DYLIB_COMPAT_VERSION_MINOR "0") + math(EXPR SDL_DYLIB_CURRENT_VERSION_MAJOR "${SDL_DYLIB_COMPAT_VERSION_MAJOR}") + set(SDL_DYLIB_CURRENT_VERSION_MINOR "${PROJECT_VERSION_PATCH}") +else() + math(EXPR SDL_DYLIB_COMPAT_VERSION_MAJOR "100 * ${PROJECT_VERSION_MINOR} + ${PROJECT_VERSION_PATCH} + 1") + set(SDL_DYLIB_COMPAT_VERSION_MINOR "0") + math(EXPR SDL_DYLIB_CURRENT_VERSION_MAJOR "${SDL_DYLIB_COMPAT_VERSION_MAJOR}") + set(SDL_DYLIB_CURRENT_VERSION_MINOR "0") +endif() +set(SDL_DYLIB_CURRENT_VERSION_PATCH "0") +set(SDL_DYLIB_COMPAT_VERSION_PATCH "0") + +set(SDL_DYLIB_CURRENT_VERSION "${SDL_DYLIB_CURRENT_VERSION_MAJOR}.${SDL_DYLIB_CURRENT_VERSION_MINOR}.${SDL_DYLIB_CURRENT_VERSION_PATCH}") +set(SDL_DYLIB_COMPAT_VERSION "${SDL_DYLIB_COMPAT_VERSION_MAJOR}.${SDL_DYLIB_COMPAT_VERSION_MINOR}.${SDL_DYLIB_COMPAT_VERSION_PATCH}") + +message(DEBUG "SDL_SO_VERSION=${SDL_SO_VERSION} SDL_DYLIB_CURRENT_VERSION=${SDL_DYLIB_CURRENT_VERSION} SDL_DYLIB_COMPAT_VERSION=${SDL_DYLIB_COMPAT_VERSION}") + +set(SDL_FRAMEWORK_VERSION "A") + +set(SDL_CHECK_REQUIRED_INCLUDES "" CACHE STRING "Extra includes (for CMAKE_REQUIRED_INCLUDES)") +set(SDL_CHECK_REQUIRED_LINK_OPTIONS "" CACHE STRING "Extra link options (for CMAKE_REQUIRED_LINK_OPTIONS)") +mark_as_advanced(SDL_CHECK_REQUIRED_INCLUDES SDL_CHECK_REQUIRED_LINK_OPTIONS) + +string(APPEND CMAKE_REQUIRED_FLAGS " -D_GNU_SOURCE=1") +list(APPEND CMAKE_REQUIRED_INCLUDES ${SDL_CHECK_REQUIRED_INCLUDES}) +list(APPEND CMAKE_REQUIRED_LINK_OPTIONS ${SDL_CHECK_REQUIRED_LINK_OPTIONS}) + +# Get the platform +SDL_DetectCMakePlatform() + +# Don't mistake macOS for unix +if(UNIX AND NOT ANDROID AND NOT APPLE AND NOT RISCOS) + set(UNIX_SYS ON) +else() + set(UNIX_SYS OFF) +endif() + +if(UNIX OR APPLE) + set(UNIX_OR_MAC_SYS ON) +else() + set(UNIX_OR_MAC_SYS OFF) +endif() + +# Emscripten pthreads work, but you need to have a non-pthread fallback build +# for systems without support. It's not currently enough to not use +# pthread functions in a pthread-build; it won't start up on unsupported +# browsers. As such, you have to explicitly enable it on Emscripten builds +# for the time being. This default will change to ON once this becomes +# commonly supported in browsers or the Emscripten team makes a single +# binary work everywhere. +if (UNIX_OR_MAC_SYS AND NOT EMSCRIPTEN) + set(SDL_PTHREADS_DEFAULT ON) +else() + set(SDL_PTHREADS_DEFAULT OFF) +endif() + +if(UNIX_SYS OR ANDROID) + set(SDL_CLOCK_GETTIME_DEFAULT ON) +else() + set(SDL_CLOCK_GETTIME_DEFAULT OFF) +endif() + +# The hidraw support doesn't catch Xbox, PS4 and Nintendo controllers, +# so we'll just use libusb when it's available. libusb does not support iOS, +# so we default to yes on iOS. +# TODO: Windows can support libusb, the hid.c file just depends on Unix APIs +if((WINDOWS AND NOT WINDOWS_STORE) OR IOS OR TVOS OR VISIONOS OR ANDROID) + set(SDL_HIDAPI_LIBUSB_AVAILABLE FALSE) +else() + set(SDL_HIDAPI_LIBUSB_AVAILABLE TRUE) +endif() + +set(SDL_ASSEMBLY_DEFAULT OFF) +if(USE_CLANG OR USE_GCC OR USE_INTELCC OR MSVC_VERSION GREATER 1400) + set(SDL_ASSEMBLY_DEFAULT ON) +endif() + +set(SDL_GCC_ATOMICS_DEFAULT OFF) +if(USE_GCC OR USE_CLANG OR USE_INTELCC OR USE_QCC) + set(SDL_GCC_ATOMICS_DEFAULT ON) +endif() + +# Default option knobs +set(SDL_LIBC_DEFAULT ON) +set(SDL_SYSTEM_ICONV_DEFAULT ON) +if(WINDOWS) + set(SDL_LIBC_DEFAULT OFF) + set(SDL_SYSTEM_ICONV_DEFAULT OFF) +endif() + +if(MSVC) + option(SDL_FORCE_STATIC_VCRT "Force /MT for static VC runtimes" OFF) + if(SDL_FORCE_STATIC_VCRT) + if(NOT DEFINED CMAKE_MSVC_RUNTIME_LIBRARY) + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + endif() + foreach(flag_var + CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE + CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO) + if(${flag_var} MATCHES "/MD") + string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") + endif() + endforeach() + endif() + + if(NOT SDL_LIBC) + # Make sure /RTC1 is disabled, otherwise it will use functions from the CRT + foreach(flag_var + CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE + CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO) + string(REGEX REPLACE "/RTC(su|[1su])" "" ${flag_var} "${${flag_var}}") + endforeach(flag_var) + endif() + + if(MSVC_CLANG) + # clang-cl treats /W4 as '-Wall -Wextra' -- we don't need -Wextra + foreach(flag_var + CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE + CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO) + string(REGEX REPLACE "/W4" "/W3" ${flag_var} "${${flag_var}}") + endforeach(flag_var) + endif() +endif() + +set(SDL_SHARED_DEFAULT ON) +set(SDL_STATIC_DEFAULT ON) + +set(SDL_SHARED_AVAILABLE ON) +set(SDL_STATIC_AVAILABLE ON) + +# All these *_DEFAULT vars will default to ON if not specified, +# so you only need to override them if they need to be disabled. +if(EMSCRIPTEN) + # Set up default values for the currently supported set of subsystems: + # Emscripten/Javascript does not have assembly support, a dynamic library + # loading architecture, or low-level CPU inspection. + + # SDL_THREADS_DEFAULT now defaults to ON, but pthread support might be disabled by default. + # !!! FIXME: most of these subsystems should default to ON if there are dummy implementations to be used. + + set(SDL_ASSEMBLY_DEFAULT OFF) + set(SDL_SHARED_AVAILABLE OFF) + set(SDL_ATOMIC_DEFAULT OFF) + set(SDL_LOADSO_DEFAULT OFF) + set(SDL_CPUINFO_DEFAULT OFF) +endif() + +if(VITA OR PSP OR PS2 OR N3DS OR RISCOS) + set(SDL_SHARED_AVAILABLE OFF) + set(SDL_LOADSO_DEFAULT OFF) +endif() + +if(SDL_SHARED_DEFAULT AND SDL_STATIC_DEFAULT AND SDL_SHARED_AVAILABLE) + if(DEFINED BUILD_SHARED_LIBS) + # When defined, use BUILD_SHARED_LIBS as default + if(BUILD_SHARED_LIBS) + set(SDL_STATIC_DEFAULT OFF) + else() + set(SDL_SHARED_DEFAULT OFF) + endif() + else() + # Default to just building the shared library + set(SDL_STATIC_DEFAULT OFF) + endif() +endif() + +set(SDL_SUBSYSTEMS + Atomic + Audio + Video + Render + Events + Joystick + Haptic + Hidapi + Power + Threads + Timers + File + Loadso + CPUinfo + Filesystem + Sensor + Locale + Misc +) +foreach(_SUB IN LISTS SDL_SUBSYSTEMS) + string(TOUPPER ${_SUB} _OPT) + if(NOT DEFINED SDL_${_OPT}_DEFAULT) + set(SDL_${_OPT}_DEFAULT ON) + endif() + option(SDL_${_OPT} "Enable the ${_SUB} subsystem" ${SDL_${_OPT}_DEFAULT}) +endforeach() + +cmake_dependent_option(SDL_FRAMEWORK "Build SDL libraries as Apple Framework" OFF "APPLE" OFF) +if(SDL_FRAMEWORK) + set(SDL_STATIC_AVAILABLE FALSE) +endif() + +# Allow some projects to be built conditionally. +set_option(SDL_DISABLE_INSTALL "Disable installation of SDL3" ${SDL3_SUBPROJECT}) +cmake_dependent_option(SDL_DISABLE_INSTALL_CPACK "Create binary SDL3 archive using CPack" ${SDL3_SUBPROJECT} "NOT SDL_DISABLE_INSTALL" ON) +cmake_dependent_option(SDL_DISABLE_INSTALL_DOCS "Install docs for SDL3" ${SDL3_SUBPROJECT} "NOT SDL_DISABLE_INSTALL;NOT SDL_FRAMEWORK" ON) +set_option(SDL_DISABLE_UNINSTALL "Disable uninstallation of SDL3" OFF) + +cmake_dependent_option(SDL_DISABLE_ANDROID_JAR "Disable creation of SDL3.jar" ${SDL3_SUBPROJECT} "ANDROID" ON) + +option_string(SDL_ASSERTIONS "Enable internal sanity checks (auto/disabled/release/enabled/paranoid)" "auto") +set_option(SDL_ASSEMBLY "Enable assembly routines" ${SDL_ASSEMBLY_DEFAULT}) +dep_option(SDL_AVX "Use AVX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF) +dep_option(SDL_AVX2 "Use AVX2 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF) +dep_option(SDL_AVX512F "Use AVX512F assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF) +dep_option(SDL_SSE "Use SSE assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF) +dep_option(SDL_SSE2 "Use SSE2 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF) +dep_option(SDL_SSE3 "Use SSE3 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF) +dep_option(SDL_SSE4_1 "Use SSE4.1 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF) +dep_option(SDL_SSE4_2 "Use SSE4.2 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF) +dep_option(SDL_MMX "Use MMX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF) +dep_option(SDL_ALTIVEC "Use Altivec assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_POWERPC32 OR SDL_CPU_POWERPC64" OFF) +dep_option(SDL_ARMSIMD "Use SIMD assembly blitters on ARM" OFF "SDL_ASSEMBLY;SDL_CPU_ARM32" OFF) +dep_option(SDL_ARMNEON "Use NEON assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_ARM32 OR SDL_CPU_ARM64" OFF) +dep_option(SDL_ARMNEON_BLITTERS "Use NEON assembly blitters on ARM32" OFF "SDL_VIDEO;SDL_ASSEMBLY;SDL_ARMNEON;SDL_CPU_ARM32" OFF) +dep_option(SDL_LSX "Use LSX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_LOONGARCH64" OFF) +dep_option(SDL_LASX "Use LASX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_LOONGARCH64" OFF) + +set_option(SDL_LIBC "Use the system C library" ${SDL_LIBC_DEFAULT}) +set_option(SDL_SYSTEM_ICONV "Use iconv() from system-installed libraries" ${SDL_SYSTEM_ICONV_DEFAULT}) +set_option(SDL_GCC_ATOMICS "Use gcc builtin atomics" ${SDL_GCC_ATOMICS_DEFAULT}) +dep_option(SDL_DBUS "Enable D-Bus support" ON ${UNIX_SYS} OFF) +set_option(SDL_DISKAUDIO "Support the disk writer audio driver" ON) +set_option(SDL_DUMMYAUDIO "Support the dummy audio driver" ON) +set_option(SDL_DUMMYVIDEO "Use dummy video driver" ON) +dep_option(SDL_IBUS "Enable IBus support" ON ${UNIX_SYS} OFF) +dep_option(SDL_OPENGL "Include OpenGL support" ON "NOT VISIONOS" OFF) +dep_option(SDL_OPENGLES "Include OpenGL ES support" ON "NOT VISIONOS" OFF) +set_option(SDL_PTHREADS "Use POSIX threads for multi-threading" ${SDL_PTHREADS_DEFAULT}) +dep_option(SDL_PTHREADS_SEM "Use pthread semaphores" ON "SDL_PTHREADS" OFF) +dep_option(SDL_OSS "Support the OSS audio API" ON "UNIX_SYS OR RISCOS" OFF) +set_option(SDL_ALSA "Support the ALSA audio API" ${UNIX_SYS}) +dep_option(SDL_ALSA_SHARED "Dynamically load ALSA audio support" ON "SDL_ALSA" OFF) +set_option(SDL_JACK "Support the JACK audio API" ${UNIX_SYS}) +dep_option(SDL_JACK_SHARED "Dynamically load JACK audio support" ON "SDL_JACK" OFF) +set_option(SDL_PIPEWIRE "Use Pipewire audio" ${UNIX_SYS}) +dep_option(SDL_PIPEWIRE_SHARED "Dynamically load Pipewire support" ON "SDL_PIPEWIRE" OFF) +set_option(SDL_PULSEAUDIO "Use PulseAudio" ${UNIX_SYS}) +dep_option(SDL_PULSEAUDIO_SHARED "Dynamically load PulseAudio support" ON "SDL_PULSEAUDIO" OFF) +set_option(SDL_SNDIO "Support the sndio audio API" ${UNIX_SYS}) +dep_option(SDL_SNDIO_SHARED "Dynamically load the sndio audio API" ON "SDL_SNDIO" OFF) +set_option(SDL_RPATH "Use an rpath when linking SDL" ${UNIX_SYS}) +set_option(SDL_CLOCK_GETTIME "Use clock_gettime() instead of gettimeofday()" ${SDL_CLOCK_GETTIME_DEFAULT}) +set_option(SDL_X11 "Use X11 video driver" ${UNIX_SYS}) +dep_option(SDL_X11_SHARED "Dynamically load X11 support" ON "SDL_X11" OFF) +set(SDL_X11_OPTIONS Xcursor Xdbe XInput Xfixes Xrandr Xscrnsaver XShape) +foreach(_SUB ${SDL_X11_OPTIONS}) + string(TOUPPER "SDL_X11_${_SUB}" _OPT) + dep_option(${_OPT} "Enable ${_SUB} support" ON "SDL_X11" OFF) +endforeach() +set_option(SDL_WAYLAND "Use Wayland video driver" ${UNIX_SYS}) +dep_option(SDL_WAYLAND_SHARED "Dynamically load Wayland support" ON "SDL_WAYLAND" OFF) +dep_option(SDL_WAYLAND_LIBDECOR "Use client-side window decorations on Wayland" ON "SDL_WAYLAND" OFF) +dep_option(SDL_WAYLAND_LIBDECOR_SHARED "Dynamically load libdecor support" ON "SDL_WAYLAND_LIBDECOR;SDL_WAYLAND_SHARED" OFF) +dep_option(SDL_WAYLAND_QT_TOUCH "QtWayland server support for Wayland video driver" ON "SDL_WAYLAND" OFF) +dep_option(SDL_RPI "Use Raspberry Pi video driver" ON "UNIX_SYS;SDL_CPU_ARM32 OR SDL_CPU_ARM64" OFF) +dep_option(SDL_ROCKCHIP "Use ROCKCHIP Hardware Acceleration video driver" ON "UNIX_SYS;SDL_CPU_ARM32 OR SDL_CPU_ARM64" OFF) +set_option(SDL_COCOA "Use Cocoa video driver" ${APPLE}) +set_option(SDL_DIRECTX "Use DirectX for Windows audio/video" ${WINDOWS}) +set_option(SDL_XINPUT "Use Xinput for Windows" ${WINDOWS}) +set_option(SDL_WASAPI "Use the Windows WASAPI audio driver" ${WINDOWS}) +set_option(SDL_RENDER_D3D "Enable the Direct3D render driver" ${WINDOWS}) +set_option(SDL_RENDER_METAL "Enable the Metal render driver" ${APPLE}) +dep_option(SDL_VIVANTE "Use Vivante EGL video driver" ON "${UNIX_SYS};SDL_CPU_ARM32" OFF) +dep_option(SDL_VULKAN "Enable Vulkan support" ON "ANDROID OR APPLE OR LINUX OR WINDOWS" OFF) +set_option(SDL_METAL "Enable Metal support" ${APPLE}) +set_option(SDL_KMSDRM "Use KMS DRM video driver" ${UNIX_SYS}) +dep_option(SDL_KMSDRM_SHARED "Dynamically load KMS DRM support" ON "SDL_KMSDRM" OFF) +set_option(SDL_OFFSCREEN "Use offscreen video driver" ON) +option_string(SDL_BACKGROUNDING_SIGNAL "number to use for magic backgrounding signal or 'OFF'" OFF) +option_string(SDL_FOREGROUNDING_SIGNAL "number to use for magic foregrounding signal or 'OFF'" OFF) +dep_option(SDL_HIDAPI "Enable the HIDAPI subsystem" ON "NOT VISIONOS" OFF) +dep_option(SDL_HIDAPI_LIBUSB "Use libusb for low level joystick drivers" ON SDL_HIDAPI_LIBUSB_AVAILABLE OFF) +dep_option(SDL_HIDAPI_LIBUSB_SHARED "Dynamically load libusb support" ON SDL_HIDAPI_LIBUSB OFF) +dep_option(SDL_HIDAPI_JOYSTICK "Use HIDAPI for low level joystick drivers" ON SDL_HIDAPI OFF) +dep_option(SDL_VIRTUAL_JOYSTICK "Enable the virtual-joystick driver" ON SDL_HIDAPI OFF) +set_option(SDL_LIBUDEV "Enable libudev support" ON) +set_option(SDL_ASAN "Use AddressSanitizer to detect memory errors" OFF) +set_option(SDL_CCACHE "Use Ccache to speed up build" OFF) +set_option(SDL_CLANG_TIDY "Run clang-tidy static analysis" OFF) + +set(SDL_VENDOR_INFO "" CACHE STRING "Vendor name and/or version to add to SDL_REVISION") + +cmake_dependent_option(SDL_SHARED "Build a shared version of the library" ${SDL_SHARED_DEFAULT} ${SDL_SHARED_AVAILABLE} OFF) +cmake_dependent_option(SDL_STATIC "Build a static version of the library" ${SDL_STATIC_DEFAULT} ${SDL_STATIC_AVAILABLE} OFF) +option(SDL_TEST_LIBRARY "Build the SDL3_test library" ON) + +dep_option(SDL_STATIC_PIC "Static version of the library should be built with Position Independent Code" "${CMAKE_POSITION_INDEPENDENT_CODE}" "SDL_STATIC" OFF) +dep_option(SDL_TESTS "Build the test directory" OFF SDL_TEST_LIBRARY OFF) +dep_option(SDL_INSTALL_TESTS "Install test-cases" OFF "NOT SDL_DISABLE_INSTALL;NOT SDL_FRAMEWORK;NOT WINDOWS_STORE" OFF) +dep_option(SDL_TESTS_LINK_SHARED "link tests to shared SDL library" "${SDL_SHARED}" "SDL_SHARED;SDL_STATIC" "${SDL_SHARED}") +set(SDL_TESTS_TIMEOUT_MULTIPLIER "1" CACHE STRING "Timeout multiplier to account for really slow machines") + +if(VITA) + set_option(VIDEO_VITA_PIB "Build with PSVita piglet gles2 support" OFF) + set_option(VIDEO_VITA_PVR "Build with PSVita PVR gles/gles2 support" OFF) +endif() + +set(HAVE_STATIC_PIC "${SDL_STATIC_PIC}") + +if(NOT (SDL_SHARED OR SDL_STATIC)) + message(FATAL_ERROR "SDL_SHARED and SDL_STATIC cannot both be disabled") +endif() + +if(SDL_SHARED) + add_library(SDL3-shared SHARED) + add_library(SDL3::SDL3-shared ALIAS SDL3-shared) + SDL_AddCommonCompilerFlags(SDL3-shared) + target_compile_features(SDL3-shared PRIVATE c_std_99) +endif() + +if(SDL_STATIC) + add_library(SDL3-static STATIC) + add_library(SDL3::SDL3-static ALIAS SDL3-static) + SDL_AddCommonCompilerFlags(SDL3-static) + target_compile_features(SDL3-static PRIVATE c_std_99) +endif() + +if(SDL_TEST_LIBRARY) + add_library(SDL3_test STATIC) + add_library(SDL3::SDL3_test ALIAS SDL3_test) + SDL_AddCommonCompilerFlags(SDL3_test) +endif() + +# Make sure SDL3::SDL3 always exists +if(TARGET SDL3::SDL3-shared) + add_library(SDL3::SDL3 ALIAS SDL3-shared) +else() + add_library(SDL3::SDL3 ALIAS SDL3-static) +endif() + +sdl_pc_link_options("-lSDL3") + +# Enable large file support on 32-bit glibc, so that we can access files +# with large inode numbers +check_symbol_exists("__GLIBC__" "stdlib.h" LIBC_IS_GLIBC) +if (LIBC_IS_GLIBC AND CMAKE_SIZEOF_VOID_P EQUAL 4) + # Enable large file support on 32-bit glibc, so that we can access files with large inode numbers + sdl_compile_definitions(PRIVATE "_FILE_OFFSET_BITS=64") + # Enable 64-bit time_t on 32-bit glibc, so that time stamps remain correct beyond January 2038 + sdl_compile_definitions(PRIVATE "_TIME_BITS=64") +endif() + +if(WINDOWS_STORE) + sdl_compile_definitions(PRIVATE "SDL_BUILDING_WINRT=1") + sdl_compile_options(PRIVATE "-ZW") +endif() + +check_linker_supports_version_file(HAVE_WL_VERSION_SCRIPT) +if(HAVE_WL_VERSION_SCRIPT) + sdl_shared_link_options("-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/src/dynapi/SDL_dynapi.sym") +else() + if((LINUX AND LIBC_IS_GLIBC) OR ANDROID) + message(FATAL_ERROR "Linker does not support '-Wl,--version-script=xxx.sym'. This is required on the current host platform (${SDL_CMAKE_PLATFORM}).") + endif() +endif() + +if(CYGWIN) + # We build SDL on cygwin without the UNIX emulation layer + sdl_include_directories(PUBLIC SYSTEM "/usr/include/mingw") + cmake_push_check_state() + string(APPEND CMAKE_REQUIRED_FLAGS " -mno-cygwin") + check_c_source_compiles("int main(int argc, char **argv) { return 0; }" + HAVE_GCC_NO_CYGWIN) + cmake_pop_check_state() + if(HAVE_GCC_NO_CYGWIN) + sdl_shared_link_options("-mno-cygwin") + endif() +endif() + +# General includes +sdl_compile_definitions(PRIVATE "USING_GENERATED_CONFIG_H") +sdl_include_directories( + PRIVATE + "${SDL3_BINARY_DIR}/include-config-$>" + "${SDL3_BINARY_DIR}/include" + "${SDL3_SOURCE_DIR}/include" +) +# Note: The clang toolset for Visual Studio does not support the '-idirafter' option. +if(USE_GCC OR USE_INTELCC OR (USE_CLANG AND NOT MSVC_CLANG)) + sdl_compile_options(NO_EXPORT PUBLIC "$") +else() + sdl_include_directories(NO_EXPORT SYSTEM PUBLIC "$") +endif() + +# General source files +sdl_glob_sources( + "${SDL3_SOURCE_DIR}/src/*.c" + "${SDL3_SOURCE_DIR}/src/atomic/*.c" + "${SDL3_SOURCE_DIR}/src/audio/*.c" + "${SDL3_SOURCE_DIR}/src/core/*.c" + "${SDL3_SOURCE_DIR}/src/cpuinfo/*.c" + "${SDL3_SOURCE_DIR}/src/dynapi/*.c" + "${SDL3_SOURCE_DIR}/src/events/*.c" + "${SDL3_SOURCE_DIR}/src/file/*.c" + "${SDL3_SOURCE_DIR}/src/joystick/*.c" + "${SDL3_SOURCE_DIR}/src/haptic/*.c" + "${SDL3_SOURCE_DIR}/src/hidapi/*.c" + "${SDL3_SOURCE_DIR}/src/libm/*.c" + "${SDL3_SOURCE_DIR}/src/locale/*.c" + "${SDL3_SOURCE_DIR}/src/misc/*.c" + "${SDL3_SOURCE_DIR}/src/power/*.c" + "${SDL3_SOURCE_DIR}/src/render/*.c" + "${SDL3_SOURCE_DIR}/src/render/*/*.c" + "${SDL3_SOURCE_DIR}/src/sensor/*.c" + "${SDL3_SOURCE_DIR}/src/stdlib/*.c" + "${SDL3_SOURCE_DIR}/src/thread/*.c" + "${SDL3_SOURCE_DIR}/src/timer/*.c" + "${SDL3_SOURCE_DIR}/src/video/*.c" + "${SDL3_SOURCE_DIR}/src/video/yuv2rgb/*.c" +) +if(MSVC AND TARGET SDL3-shared) + if(SDL_CPU_X64) + enable_language(ASM_MASM) + set(asm_src "${SDL3_SOURCE_DIR}/src/stdlib/SDL_mslibc_x64.asm") + target_compile_options(SDL3-shared PRIVATE "$<$:/nologo>") + set_property(SOURCE "${asm_src}" PROPERTY LANGUAGE "ASM_MASM") + target_sources(SDL3-shared PRIVATE "${asm_src}") + elseif(SDL_CPU_ARM32 OR DL_CPU_ARM64) + # FIXME: ARM assembler (armasm.exe/armasm64.exe) is NOT ASM_MASM, and does currently not work with CMake + # (https://gitlab.kitware.com/cmake/cmake/-/issues/18912) + endif() +endif() + +if(USE_INTELCC) + # warning #39: division by zero + # warning #239: floating point underflow + # warning #264: floating-point value does not fit in required floating-point type + set_property(SOURCE "${SDL3_SOURCE_DIR}/src/libm/e_exp.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -wd239 -wd264") + set_property(SOURCE "${SDL3_SOURCE_DIR}/src/libm/e_log.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -wd39") + set_property(SOURCE "${SDL3_SOURCE_DIR}/src/libm/e_log10.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -wd39") + set_property(SOURCE + "${SDL3_SOURCE_DIR}/src/libm/e_exp.c" + "${SDL3_SOURCE_DIR}/src/libm/e_log.c" + "${SDL3_SOURCE_DIR}/src/libm/e_log10.c" + PROPERTY SKIP_PRECOMPILE_HEADERS 1) +endif() + +set(SDL_DEFAULT_ASSERT_LEVEL_CONFIGURED 1) +if(SDL_ASSERTIONS MATCHES "^(auto|)$") + # Do nada - use optimization settings to determine the assertion level + set(SDL_DEFAULT_ASSERT_LEVEL ) + set(SDL_DEFAULT_ASSERT_LEVEL_CONFIGURED 0) +elseif(SDL_ASSERTIONS MATCHES "^(disabled|0)$") + set(SDL_DEFAULT_ASSERT_LEVEL 0) +elseif(SDL_ASSERTIONS MATCHES "^(release|1)$") + set(SDL_DEFAULT_ASSERT_LEVEL 1) +elseif(SDL_ASSERTIONS MATCHES "^(enabled|2)$") + set(SDL_DEFAULT_ASSERT_LEVEL 2) +elseif(SDL_ASSERTIONS MATCHES "^(paranoid|3)$") + set(SDL_DEFAULT_ASSERT_LEVEL 3) +else() + message(FATAL_ERROR "unknown assertion level") +endif() +set(HAVE_ASSERTIONS ${SDL_ASSERTIONS}) + +if(NOT SDL_BACKGROUNDING_SIGNAL STREQUAL "OFF") + sdl_compile_definitions(PRIVATE "SDL_BACKGROUNDING_SIGNAL=${SDL_BACKGROUNDING_SIGNAL}") +endif() + +if(NOT SDL_FOREGROUNDING_SIGNAL STREQUAL "OFF") + sdl_compile_definitions(PRIVATE "SDL_FOREGROUNDING_SIGNAL=${SDL_FOREGROUNDING_SIGNAL}") +endif() + +# Compiler option evaluation +if(USE_GCC OR USE_CLANG OR USE_INTELCC OR USE_QCC) + if(SDL_GCC_ATOMICS) + check_c_source_compiles("int main(int argc, char **argv) { + int a; + void *x, *y, *z; + __sync_lock_test_and_set(&a, 4); + __sync_lock_test_and_set(&x, y); + __sync_fetch_and_add(&a, 1); + __sync_bool_compare_and_swap(&a, 5, 10); + __sync_bool_compare_and_swap(&x, y, z); + return 0; }" COMPILER_SUPPORTS_GCC_ATOMICS) + set(HAVE_GCC_ATOMICS ${COMPILER_SUPPORTS_GCC_ATOMICS}) + if(NOT HAVE_GCC_ATOMICS) + check_c_source_compiles("int main(int argc, char **argv) { + int a; + __sync_lock_test_and_set(&a, 1); + __sync_lock_release(&a); + return 0; }" COMPILER_SUPPORTS_SYNC_LOCK_TEST_AND_SET) + set(HAVE_GCC_SYNC_LOCK_TEST_AND_SET ${COMPILER_SUPPORTS_SYNC_LOCK_TEST_AND_SET}) + endif() + endif() + + cmake_push_check_state() + string(APPEND CMAKE_REQUIRED_FLAGS " -fvisibility=hidden -Werror") + check_c_source_compiles(" + #if !defined(__GNUC__) || __GNUC__ < 4 + #error SDL only uses visibility attributes in GCC 4 or newer + #endif + __attribute__((visibility(\"default\"))) int foo(void); + __attribute__((visibility(\"hidden\"))) int bar(void); + int foo(void) { return 0; } + int bar(void) { return 1; } + int main(void) { return 0; }" HAVE_GCC_FVISIBILITY) + cmake_pop_check_state() + + if(APPLE) + # FIXME: don't use deprecated declarations + check_c_compiler_flag(-Wno-error=deprecated-declarations COMPILER_SUPPORTS_WNO_ERROR_DEPRECATED_DECLARATIONS) + if(COMPILER_SUPPORTS_WNO_ERROR_DEPRECATED_DECLARATIONS) + sdl_compile_options(PRIVATE "-Wno-error=deprecated-declarations") + endif() + endif() + + if(APPLE) + check_linker_flag(C "-Wl,-undefined,error" LINKER_SUPPORTS_WL_UNDEFINED_ERROR) + if(LINKER_SUPPORTS_WL_UNDEFINED_ERROR) + sdl_shared_link_options("-Wl,-undefined,error") + endif() + elseif(NOT OPENBSD) + cmake_push_check_state() + check_linker_flag(C "-Wl,--no-undefined" LINKER_SUPPORTS_WL_NO_UNDEFINED) + #FIXME: originally this if had an additional "AND NOT (USE_CLANG AND WINDOWS)" + if(LINKER_SUPPORTS_WL_NO_UNDEFINED) + sdl_shared_link_options("-Wl,--no-undefined") + endif() + endif() +endif() + +if(MSVC) + sdl_compile_definitions( + PRIVATE + "_CRT_SECURE_NO_DEPRECATE" + "_CRT_NONSTDC_NO_DEPRECATE" + "_CRT_SECURE_NO_WARNINGS" + ) + + # CET support was added in VS 2019 16.7 + if(MSVC_VERSION GREATER 1926 AND CMAKE_GENERATOR_PLATFORM MATCHES "Win32|x64") + # Mark SDL3.dll as compatible with Control-flow Enforcement Technology (CET) + sdl_shared_link_options("-CETCOMPAT") + endif() +endif() + +if(CMAKE_C_COMPILER_ID STREQUAL "MSVC") + # Due to a limitation of Microsoft's LTO implementation, LTO must be disabled for memcpy and memset. + # The same applies to various functions normally belonging in the C library (for x86 architecture). + set_property(SOURCE "${SDL3_SOURCE_DIR}/src/stdlib/SDL_mslibc.c" APPEND_STRING PROPERTY COMPILE_FLAGS " /GL-") +endif() + +if(SDL_ASSEMBLY) + set(HAVE_ASSEMBLY TRUE) + + if(SDL_MMX) + cmake_push_check_state() + if(USE_GCC OR USE_CLANG OR USE_INTELCC) + string(APPEND CMAKE_REQUIRED_FLAGS " -mmmx") + endif() + check_c_source_compiles(" + #include + void ints_add(int *dest, int *a, int *b, unsigned size) { + for (; size >= 2; size -= 2, dest += 2, a += 2, b += 2) { + *(__m64*)dest = _mm_add_pi32(*(__m64*)a, *(__m64*)b); + } + } + int main(int argc, char *argv[]) { + ints_add((int*)0, (int*)0, (int*)0, 0); + return 0; + }" COMPILER_SUPPORTS_MMX) + cmake_pop_check_state() + if(COMPILER_SUPPORTS_MMX) + set(HAVE_MMX TRUE) + endif() + endif() + if(SDL_SSE) + cmake_push_check_state() + if(USE_GCC OR USE_CLANG OR USE_INTELCC) + string(APPEND CMAKE_REQUIRED_FLAGS " -msse") + endif() + check_c_source_compiles(" + #include + void floats_add(float *dest, float *a, float *b, unsigned size) { + for (; size >= 4; size -= 4, dest += 4, a += 4, b += 4) { + _mm_storeu_ps(dest, _mm_add_ps(_mm_loadu_ps(a), _mm_loadu_ps (b))); + } + } + int main(int argc, char **argv) { + floats_add((float*)0, (float*)0, (float*)0, 0); + return 0; + }" COMPILER_SUPPORTS_SSE) + cmake_pop_check_state() + if(COMPILER_SUPPORTS_SSE) + set(HAVE_SSE TRUE) + endif() + endif() + if(SDL_SSE2) + cmake_push_check_state() + if(USE_GCC OR USE_CLANG OR USE_INTELCC) + string(APPEND CMAKE_REQUIRED_FLAGS " -msse2") + endif() + check_c_source_compiles(" + #include + void doubles_add(double *dest, double *a, double *b, unsigned size) { + for (; size >= 4; size -= 4, dest += 4, a += 4, b += 4) { + _mm_store_pd(dest, _mm_add_pd(_mm_loadu_pd(a), _mm_loadu_pd(b))); + } + } + int main(int argc, char **argv) { + doubles_add((double*)0, (double*)0, (double*)0, 0); + return 0; + }" COMPILER_SUPPORTS_SSE2) + cmake_pop_check_state() + if(COMPILER_SUPPORTS_SSE2) + set(HAVE_SSE2 TRUE) + endif() + endif() + if(SDL_SSE3) + cmake_push_check_state() + if(USE_GCC OR USE_CLANG OR USE_INTELCC) + string(APPEND CMAKE_REQUIRED_FLAGS " -msse3") + endif() + check_c_source_compiles(" + #include + void ints_add(int *dest, int *a, int *b, unsigned size) { + for (; size >= 4; size -= 4, dest += 4, a += 4, b += 4) { + _mm_storeu_si128((__m128i*)dest, _mm_add_epi32(_mm_lddqu_si128((__m128i*)a), _mm_lddqu_si128((__m128i*)b))); + } + } + int main(int argc, char **argv) { + ints_add((int*)0, (int*)0, (int*)0, 0); + return 0; + }" COMPILER_SUPPORTS_SSE3) + cmake_pop_check_state() + if(COMPILER_SUPPORTS_SSE3) + set(HAVE_SSE3 TRUE) + endif() + endif() + if(SDL_SSE4_1) + cmake_push_check_state() + if(USE_GCC OR USE_CLANG OR USE_INTELCC) + string(APPEND CMAKE_REQUIRED_FLAGS " -msse4.1") + endif() + check_c_source_compiles(" + #include + void ints_mul(int *dest, int *a, int *b, unsigned size) { + for (; size >= 4; size -= 4, dest += 4, a += 4, b += 4) { + _mm_storeu_si128((__m128i*)dest, _mm_mullo_epi32(_mm_lddqu_si128((__m128i*)a), _mm_lddqu_si128((__m128i*)b))); + } + } + int main(int argc, char **argv) { + ints_mul((int*)0, (int*)0, (int*)0, 0); + return 0; + }" COMPILER_SUPPORTS_SSE4_1) + cmake_pop_check_state() + if(COMPILER_SUPPORTS_SSE4_1) + set(HAVE_SSE4_1 TRUE) + endif() + endif() + if(SDL_SSE4_2) + cmake_push_check_state() + if(USE_GCC OR USE_CLANG OR USE_INTELCC) + string(APPEND CMAKE_REQUIRED_FLAGS " -msse4.2") + endif() + check_c_source_compiles(" + #include + unsigned calc_crc32c(const char *text, unsigned len) { + unsigned crc32c = ~0; + for (; len >= 4; len -= 4, text += 4) { + crc32c = (unsigned)_mm_crc32_u32(crc32c, *(unsigned*)text); + } + return crc32c; + } + int main(int argc, char **argv) { + calc_crc32c(\"SDL_SSE4\",8); + return 0; + }" COMPILER_SUPPORTS_SSE4_2) + cmake_pop_check_state() + if(COMPILER_SUPPORTS_SSE4_2) + set(HAVE_SSE4_2 TRUE) + endif() + endif() + if(SDL_AVX) + cmake_push_check_state() + if(USE_GCC OR USE_CLANG OR USE_INTELCC) + string(APPEND CMAKE_REQUIRED_FLAGS " -mavx") + endif() + check_c_source_compiles(" + #include + void floats_add(float *dest, float *a, float *b, unsigned size) { + for (; size >= 8; size -= 8, dest += 8, a += 8, b += 8) { + _mm256_storeu_ps(dest, _mm256_add_ps(_mm256_loadu_ps(a), _mm256_loadu_ps(b))); + } + } + int main(int argc, char **argv) { + floats_add((float*)0, (float*)0, (float*)0, 0); + return 0; + }" COMPILER_SUPPORTS_AVX) + cmake_pop_check_state() + if(COMPILER_SUPPORTS_AVX) + set(HAVE_AVX TRUE) + endif() + endif() + if(SDL_AVX2) + cmake_push_check_state() + if(USE_GCC OR USE_CLANG OR USE_INTELCC) + string(APPEND CMAKE_REQUIRED_FLAGS " -mavx2") + endif() + check_c_source_compiles(" + #include + void ints_add(int *dest, int *a, int *b, unsigned size) { + for (; size >= 8; size -= 8, dest += 8, a += 8, b += 8) { + _mm256_storeu_si256((__m256i*)dest, _mm256_add_epi32(_mm256_loadu_si256((__m256i*)a), _mm256_loadu_si256((__m256i*)b))); + } + } + int main(int argc, char **argv) { + ints_add((int*)0, (int*)0, (int*)0, 0); + return 0; + }" COMPILER_SUPPORTS_AVX2) + cmake_pop_check_state() + if(COMPILER_SUPPORTS_AVX2) + set(HAVE_AVX2 TRUE) + endif() + endif() + if(SDL_AVX512F) + cmake_push_check_state() + if(USE_GCC OR USE_CLANG OR USE_INTELCC) + string(APPEND CMAKE_REQUIRED_FLAGS " -mavx512f") + endif() + check_c_source_compiles(" + #include + void floats_add(float *dest, float *a, float *b, unsigned size) { + for (; size >= 16; size -= 16, dest += 16, a += 16, b += 16) { + _mm512_storeu_ps(dest, _mm512_add_ps(_mm512_loadu_ps(a), _mm512_loadu_ps(b))); + } + } + int main(int argc, char **argv) { + floats_add((float*)0, (float*)0, (float*)0, 0); + return 0; + }" COMPILER_SUPPORTS_AVX512F) + cmake_pop_check_state() + if(COMPILER_SUPPORTS_AVX512F) + set(HAVE_AVX512F TRUE) + endif() + endif() + + if(USE_GCC OR USE_CLANG) + # TODO: Those all seem to be quite GCC specific - needs to be + # reworked for better compiler support + + if(SDL_ALTIVEC) + cmake_push_check_state() + string(APPEND CMAKE_REQUIRED_FLAGS " -maltivec") + check_c_source_compiles(" + #include + vector unsigned int vzero() { + return vec_splat_u32(0); + } + int main(int argc, char **argv) { return 0; }" COMPILER_SUPPORTS_ALTIVEC) + cmake_pop_check_state() + if(COMPILER_SUPPORTS_ALTIVEC) + set(HAVE_ALTIVEC TRUE) + set(SDL_ALTIVEC_BLITTERS 1) + sdl_compile_options(PRIVATE "-maltivec") + set_property(SOURCE "${SDL3_SOURCE_DIR}/src/video/SDL_blit_N.c" APPEND PROPERTY COMPILE_DEFINITIONS "SDL_ENABLE_ALTIVEC") + set_property(SOURCE "${SDL3_SOURCE_DIR}/src/video/SDL_blit_N.c" PROPERTY SKIP_PRECOMPILE_HEADERS 1) + endif() + endif() + + if(SDL_LSX) + cmake_push_check_state() + string(APPEND CMAKE_REQUIRED_FLAGS " -mlsx") + check_c_source_compiles(" + #ifndef __loongarch_sx + #error Assembler CPP flag not enabled + #endif + int main(int argc, char **argv) { return 0; }" COMPILER_SUPPORTS_LSX) + check_include_file("lsxintrin.h" HAVE_LSXINTRIN_H) + cmake_pop_check_state() + + if(COMPILER_SUPPORTS_LSX AND HAVE_LSXINTRIN_H) + set(HAVE_LSX TRUE) + endif() + endif() + + if(SDL_LASX) + cmake_push_check_state() + string(APPEND CMAKE_REQUIRED_FLAGS " -mlasx") + check_c_source_compiles(" + #ifndef __loongarch_asx + #error Assembler CPP flag not enabled + #endif + int main(int argc, char **argv) { return 0; }" COMPILER_SUPPORTS_LASX) + check_include_file("lasxintrin.h" HAVE_LASXINTRIN_H) + cmake_pop_check_state() + if(COMPILER_SUPPORTS_LASX AND HAVE_LASXINTRIN_H) + set(HAVE_LASX TRUE) + endif() + endif() + + if(SDL_ARMSIMD) + cmake_push_check_state() + string(APPEND CMAKE_REQUIRED_FLAGS " -x assembler-with-cpp") + list(APPEND CMAKE_REQUIRED_LINK_OPTIONS -x none) + check_c_source_compiles(" + .text + .arch armv6 + .object_arch armv4 + .arm + .altmacro + #ifndef __ARM_EABI__ + #error EABI is required (to be sure that calling conventions are compatible) + #endif + main: + .global main + pld [r0] + uqadd8 r0, r0, r0 + " ARMSIMD_FOUND) + cmake_pop_check_state() + + if(ARMSIMD_FOUND) + set(HAVE_ARMSIMD TRUE) + set(SDL_ARM_SIMD_BLITTERS 1) + enable_language(ASM) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/arm/pixman-arm-simd*.S") + set_property(SOURCE ${ARMSIMD_SOURCES} APPEND PROPERTY COMPILE_OPTIONS -x assembler-with-cpp) + set(WARN_ABOUT_ARM_SIMD_ASM_MIT TRUE) + endif() + endif() + + if(SDL_ARMNEON_BLITTERS) + cmake_push_check_state() + string(APPEND CMAKE_REQUIRED_FLAGS " -x assembler-with-cpp") + list(APPEND CMAKE_REQUIRED_LINK_OPTIONS -x none) + check_c_source_compiles(" + .text + .fpu neon + .arch armv7a + .object_arch armv4 + .eabi_attribute 10, 0 + .arm + .altmacro + #ifndef __ARM_EABI__ + #error EABI is required (to be sure that calling conventions are compatible) + #endif + main: + .global main + pld [r0] + vmovn.u16 d0, q0 + " COMPILER_SUPPORTS_ARMNEON_ASSEMBLY) + cmake_pop_check_state() + if(COMPILER_SUPPORTS_ARMNEON_ASSEMBLY) + set(HAVE_ARMNEON_BLITTERS TRUE) + set(SDL_ARM_NEON_BLITTERS 1) + enable_language(ASM) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/arm/pixman-arm-neon*.S") + set_property(SOURCE ${ARMNEON_SOURCES} APPEND PROPERTY COMPILE_OPTIONS -x assembler-with-cpp) + set(WARN_ABOUT_ARM_NEON_ASM_MIT TRUE) + endif() + endif() + + if(SDL_ARMNEON) + check_c_source_compiles(" + #include + void floats_add(float *dest, float *a, float *b, unsigned size) { + for (; size >= 4; size -= 4, dest += 4, a += 4, b += 4) { + vst1q_f32(dest, vaddq_f32(vld1q_f32(a), vld1q_f32(b))); + } + } + int main(int argc, char *argv[]) { + floats_add((float*)0, (float*)0, (float*)0, 0); + return 0; + }" COMPILER_SUPPORTS_ARMNEON) + + if(COMPILER_SUPPORTS_ARMNEON) + set(HAVE_ARMNEON TRUE) + endif() + endif() + endif() +endif() + +if(NOT HAVE_MMX) + set(SDL_DISABLE_MMX 1) +endif() + +if(NOT HAVE_SSE) + set(SDL_DISABLE_SSE 1) +endif() + +if(NOT HAVE_SSE2) + set(SDL_DISABLE_SSE2 1) +endif() + +if(NOT HAVE_SSE3) + set(SDL_DISABLE_SSE3 1) +endif() + +if(NOT HAVE_SSE4_1) + set(SDL_DISABLE_SSE4_1 1) +endif() + +if(NOT HAVE_SSE4_2) + set(SDL_DISABLE_SSE4_2 1) +endif() + +if(NOT HAVE_AVX) + set(SDL_DISABLE_AVX 1) +endif() + +if(NOT HAVE_AVX2) + set(SDL_DISABLE_AVX2 1) +endif() + +if(NOT HAVE_AVX512F) + set(SDL_DISABLE_AVX512F 1) +endif() + +if(NOT HAVE_LSX) + set(SDL_DISABLE_LSX 1) +endif() + +if(NOT HAVE_LASX) + set(SDL_DISABLE_LASX 1) +endif() + +if(NOT HAVE_ARMNEON) + set(SDL_DISABLE_NEON 1) +endif() + +set(SDL_DISABLE_ALLOCA 0) +check_include_file("alloca.h" "HAVE_ALLOCA_H") +if(MSVC) + check_include_file("malloc.h" "HAVE_MALLOC") + check_symbol_exists("_alloca" "malloc.h" _ALLOCA_IN_MALLOC_H) + if(NOT HAVE_ALLOCA_H AND NOT _ALLOCA_IN_MALLOC_H) + set(SDL_DISABLE_ALLOCA 1) + endif() +endif() + +# TODO: Can't deactivate on FreeBSD? w/o LIBC, SDL_stdinc.h can't define anything. +if(SDL_LIBC) + set(available_headers) + set(HAVE_LIBC TRUE) + set(headers_to_check + ctype.h + float.h + iconv.h + inttypes.h + limits.h + malloc.h + math.h + memory.h + signal.h + stdarg.h + stddef.h + stdint.h + stdio.h + stdlib.h + string.h + strings.h + sys/types.h + wchar.h + ) + foreach(_HEADER IN LISTS headers_to_check) + string(TOUPPER "${_HEADER}" HEADER_IDENTIFIER) + string(REGEX REPLACE "[./]" "_" HEADER_IDENTIFIER "${HEADER_IDENTIFIER}") + set(LIBC_HAS_VAR "LIBC_HAS_${HEADER_IDENTIFIER}") + check_include_file("${_HEADER}" "${LIBC_HAS_VAR}") + set(HAVE_${HEADER_IDENTIFIER} ${${LIBC_HAS_VAR}}) + if(HAVE_${HEADER_IDENTIFIER}) + list(APPEND available_headers "${_HEADER}") + endif() + endforeach() + + set(symbols_to_check + abs acos acosf asin asinf atan atan2 atan2f atanf atof atoi + bcopy bsearch + calloc ceil ceilf copysign copysignf cos cosf + _Exit exp expf + fabs fabsf floor floorf fmod fmodf fopen64 free fseeko fseeko64 + getenv + _i64toa index itoa + log log10 log10f logf lround lroundf _ltoa + malloc memcmp memcpy memmove memset modf modff + pow powf putenv + qsort + realloc rindex round roundf + scalbn scalbnf setenv sin sinf sqr sqrt sqrtf sscanf strchr + strcmp strlcat strlcpy strlen strncmp strnlen + strrchr strstr strtod strtok_r strtol strtoll strtoul strtoull + tan tanf trunc truncf + unsetenv + vsnprintf vsscanf + wcsnlen wcscmp wcsdup wcslcat wcslcpy wcslen wcsncmp wcsstr wcstol + ) + if(WINDOWS) + list(APPEND symbols_to_check + _stricmp _strlwr _strnicmp _strrev _strupr _ui64toa _uitoa _ultoa _wcsdup _wcsicmp _wcsnicmp + ) + else() + list(APPEND symbols_to_check + strcasecmp strcasestr strncasecmp wcscasecmp wcsncasecmp + ) + endif() + check_library_exists(m pow "" HAVE_LIBM) + cmake_push_check_state() + if(HAVE_LIBM) + sdl_link_dependency(math LIBS m) + list(APPEND CMAKE_REQUIRED_LIBRARIES m) + endif() + foreach(_FN IN LISTS symbols_to_check) + string(TOUPPER ${_FN} _UPPER) + set(LIBC_HAS_VAR "LIBC_HAS_${_UPPER}") + check_symbol_exists("${_FN}" "${available_headers}" ${LIBC_HAS_VAR}) + set(HAVE_${_UPPER} ${${LIBC_HAS_VAR}}) + endforeach() + cmake_pop_check_state() + + if(NOT WINDOWS) + check_include_file(linux/input.h HAVE_LINUX_INPUT_H) + + check_symbol_exists(getpagesize "unistd.h" HAVE_GETPAGESIZE) + check_symbol_exists(sigaction "signal.h" HAVE_SIGACTION) + check_symbol_exists(setjmp "setjmp.h" HAVE_SETJMP) + check_symbol_exists(nanosleep "time.h" HAVE_NANOSLEEP) + check_symbol_exists(sysconf "unistd.h" HAVE_SYSCONF) + check_symbol_exists(sysctlbyname "sys/types.h;sys/sysctl.h" HAVE_SYSCTLBYNAME) + check_symbol_exists(getauxval "sys/auxv.h" HAVE_GETAUXVAL) + check_symbol_exists(elf_aux_info "sys/auxv.h" HAVE_ELF_AUX_INFO) + check_symbol_exists(poll "poll.h" HAVE_POLL) + + if(SDL_SYSTEM_ICONV) + check_library_exists(iconv iconv_open "" HAVE_LIBICONV) + if(HAVE_LIBICONV) + find_package(Iconv) + if(Iconv_FOUND AND NOT Iconv_IS_BUILT_IN) + set(HAVE_ICONV 1) + set(HAVE_SYSTEM_ICONV TRUE) + pkg_check_modules(PC_ICONV iconv) + if(PC_ICONV_FOUND) + sdl_link_dependency(iconv LIBS Iconv::Iconv CMAKE_MODULE Iconv PKG_CONFIG_SPECS iconv) + else() + sdl_link_dependency(iconv LIBS Iconv::Iconv CMAKE_MODULE Iconv PKG_CONFIG_LIBS iconv) + endif() + endif() + else() + check_library_exists(c iconv_open "" HAVE_BUILTIN_ICONV) + if(HAVE_BUILTIN_ICONV) + set(HAVE_ICONV 1) + set(HAVE_SYSTEM_ICONV TRUE) + endif() + endif() + endif() + + check_struct_has_member("struct sigaction" "sa_sigaction" "signal.h" HAVE_SA_SIGACTION) + endif() +else() + set(headers + stdarg.h + stddef.h + stdint.h + ) + foreach(_HEADER ${headers}) + string(TOUPPER "${_HEADER}" HEADER_IDENTIFIER) + string(REGEX REPLACE "[./]" "_" HEADER_IDENTIFIER "${HEADER_IDENTIFIER}") + set(LIBC_HAS_VAR "LIBC_HAS_${HEADER_IDENTIFIER}") + check_include_file("${_HEADER}" "${LIBC_HAS_VAR}") + set(HAVE_${HEADER_IDENTIFIER} ${${LIBC_HAS_VAR}}) + endforeach() + + if(MSVC AND USE_CLANG) + check_c_compiler_flag("/Q_no-use-libirc" HAS_Q_NO_USE_LIBIRC) + endif() +endif() + + +# Enable/disable various subsystems of the SDL library +foreach(_SUB ${SDL_SUBSYSTEMS}) + string(TOUPPER ${_SUB} _OPT) + if(NOT SDL_${_OPT}) + set(SDL_${_OPT}_DISABLED 1) + endif() +endforeach() +if(SDL_HAPTIC) + if(NOT SDL_JOYSTICK) + # Haptic requires some private functions from the joystick subsystem. + message(FATAL_ERROR "SDL_HAPTIC requires SDL_JOYSTICK, which is not enabled") + endif() +endif() + + +# General SDL subsystem options, valid for all platforms +if(SDL_AUDIO) + # CheckDummyAudio/CheckDiskAudio - valid for all platforms + if(SDL_DUMMYAUDIO) + set(SDL_AUDIO_DRIVER_DUMMY 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/dummy/*.c") + set(HAVE_DUMMYAUDIO TRUE) + set(HAVE_SDL_AUDIO TRUE) + endif() + if(SDL_DISKAUDIO) + set(SDL_AUDIO_DRIVER_DISK 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/disk/*.c") + set(HAVE_DISKAUDIO TRUE) + set(HAVE_SDL_AUDIO TRUE) + endif() +endif() + +if(UNIX OR APPLE) + # Relevant for Unix/Darwin only + set(DYNAPI_NEEDS_DLOPEN 1) + CheckDLOPEN() + if(SDL_LOADSO AND HAVE_DLOPEN) + set(SDL_LOADSO_DLOPEN 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/loadso/dlopen/*.c") + set(HAVE_SDL_LOADSO TRUE) + endif() +endif() + +if(UNIX OR APPLE OR HAIKU OR RISCOS) + CheckO_CLOEXEC() +endif() + +if(SDL_JOYSTICK) + if(SDL_VIRTUAL_JOYSTICK) + set(HAVE_VIRTUAL_JOYSTICK TRUE) + set(SDL_JOYSTICK_VIRTUAL 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/virtual/*.c") + endif() +endif() + +if(SDL_VIDEO) + if(SDL_DUMMYVIDEO) + set(SDL_VIDEO_DRIVER_DUMMY 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/dummy/*.c") + set(HAVE_DUMMYVIDEO TRUE) + set(HAVE_SDL_VIDEO TRUE) + endif() +endif() + +# Platform-specific options and settings +if(ANDROID) + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/android") + + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/android/*.c") + sdl_sources("${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c") + set_property(SOURCE "${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-declaration-after-statement") + + if(SDL_MISC) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/android/*.c") + set(HAVE_SDL_MISC TRUE) + endif() + + # SDL_spinlock.c Needs to be compiled in ARM mode. + # There seems to be no better way currently to set the ARM mode. + # see: https://issuetracker.google.com/issues/62264618 + # Another option would be to set ARM mode to all compiled files + cmake_push_check_state() + string(APPEND CMAKE_REQUIRED_FLAGS " -Werror=unused-command-line-argument") + check_c_compiler_flag(-marm HAVE_ARM_MODE) + cmake_pop_check_state() + if(HAVE_ARM_MODE) + set_property(SOURCE "${SDL3_SOURCE_DIR}/src/atomic/SDL_spinlock.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -marm") + set_source_files_properties(src/atomic/SDL_spinlock.c PROPERTIES SKIP_PRECOMPILE_HEADERS 1) + endif() + + if(SDL_AUDIO) + set(SDL_AUDIO_DRIVER_ANDROID 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/android/*.c") + + set(SDL_AUDIO_DRIVER_OPENSLES 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/openslES/*.c") + + sdl_link_dependency(opensles LIBS ${ANDROID_DL_LIBRARY} OpenSLES) + + set(SDL_AUDIO_DRIVER_AAUDIO 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/aaudio/*.c") + + set(HAVE_SDL_AUDIO TRUE) + endif() + if(SDL_FILESYSTEM) + set(SDL_FILESYSTEM_ANDROID 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/android/*.c") + set(HAVE_SDL_FILESYSTEM TRUE) + endif() + if(SDL_HAPTIC) + set(SDL_HAPTIC_ANDROID 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/haptic/android/*.c") + set(HAVE_SDL_HAPTIC TRUE) + endif() + if(SDL_HIDAPI) + CheckHIDAPI() + endif() + if(SDL_JOYSTICK) + set(SDL_JOYSTICK_ANDROID 1) + sdl_glob_sources( + "${SDL3_SOURCE_DIR}/src/joystick/android/*.c" + "${SDL3_SOURCE_DIR}/src/joystick/steam/*.c" + ) + set(HAVE_SDL_JOYSTICK TRUE) + endif() + if(SDL_LOADSO) + set(SDL_LOADSO_DLOPEN 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/loadso/dlopen/*.c") + set(HAVE_SDL_LOADSO TRUE) + endif() + if(SDL_POWER) + set(SDL_POWER_ANDROID 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/android/*.c") + set(HAVE_SDL_POWER TRUE) + endif() + if(SDL_LOCALE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/android/*.c") + set(HAVE_SDL_LOCALE TRUE) + endif() + if(SDL_TIMERS) + set(SDL_TIMER_UNIX 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/unix/*.c") + set(HAVE_SDL_TIMERS TRUE) + endif() + if(SDL_SENSOR) + set(SDL_SENSOR_ANDROID 1) + set(HAVE_SDL_SENSORS TRUE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/sensor/android/*.c") + endif() + if(SDL_VIDEO) + set(SDL_VIDEO_DRIVER_ANDROID 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/android/*.c") + set(HAVE_SDL_VIDEO TRUE) + + # Core stuff + # find_library(ANDROID_DL_LIBRARY dl) + # FIXME failing dlopen https://github.com/android-ndk/ndk/issues/929 + sdl_link_dependency(android_video LIBS dl log android) + sdl_compile_definitions(PRIVATE "GL_GLEXT_PROTOTYPES") + + #enable gles + if(SDL_OPENGLES) + set(SDL_VIDEO_OPENGL_EGL 1) + set(HAVE_OPENGLES TRUE) + set(SDL_VIDEO_OPENGL_ES 1) + set(SDL_VIDEO_OPENGL_ES2 1) + set(SDL_VIDEO_RENDER_OGL_ES2 1) + + sdl_link_dependency(opengles LIBS GLESv1_CM GLESv2) + endif() + + if(SDL_VULKAN) + check_c_source_compiles(" + #if defined(__ARM_ARCH) && __ARM_ARCH < 7 + #error Vulkan doesn't work on this configuration + #endif + int main(int argc, char **argv) { return 0; } + " VULKAN_PASSED_ANDROID_CHECKS) + if(VULKAN_PASSED_ANDROID_CHECKS) + set(SDL_VIDEO_VULKAN 1) + set(HAVE_VULKAN TRUE) + endif() + endif() + endif() + + CheckPTHREAD() + if(SDL_CLOCK_GETTIME) + set(HAVE_CLOCK_GETTIME 1) + endif() + + if(NOT SDL_DISABLE_ANDROID_JAR) + find_package(Java) + find_package(SdlAndroidPlatform MODULE) + + if(Java_FOUND AND SdlAndroidPlatform_FOUND) + include(UseJava) + set(path_android_jar "${SDL_ANDROID_PLATFORM_ROOT}/android.jar") + set(android_java_sources_root "${SDL3_SOURCE_DIR}/android-project/app/src/main/java") + file(GLOB SDL_JAVA_SOURCES "${android_java_sources_root}/org/libsdl/app/*.java") + set(CMAKE_JAVA_COMPILE_FLAGS "-encoding;utf-8") + add_jar(SDL3-jar + SOURCES ${SDL_JAVA_SOURCES} + INCLUDE_JARS "${path_android_jar}" + OUTPUT_NAME "SDL3" + VERSION "${SDL3_VERSION}" + ) + set_property(TARGET SDL3-jar PROPERTY OUTPUT "${SDL3_BINARY_DIR}/SDL3-${SDL3_VERSION}.jar") + set(javasourcesjar "${SDL3_BINARY_DIR}/SDL3-${SDL3_VERSION}-sources.jar") + string(REGEX REPLACE "${android_java_sources_root}/" "" sdl_relative_java_sources "${SDL_JAVA_SOURCES}") + add_custom_command( + OUTPUT "${javasourcesjar}" + COMMAND ${Java_JAR_EXECUTABLE} cf "${javasourcesjar}" ${sdl_relative_java_sources} + WORKING_DIRECTORY "${android_java_sources_root}" + DEPENDS ${SDL_JAVA_SOURCES} + ) + add_custom_target(SDL3-javasources ALL DEPENDS "${javasourcesjar}") + if(NOT SDL_DISABLE_INSTALL_DOCS) + set(javadocdir "${SDL3_BINARY_DIR}/docs/javadoc") + set(javadocjar "${SDL3_BINARY_DIR}/SDL3-${SDL3_VERSION}-javadoc.jar") + set(javadoc_index_html "${javadocdir}/index.html") + add_custom_command( + OUTPUT "${javadoc_index_html}" + COMMAND ${CMAKE_COMMAND} -E rm -rf "${javadocdir}" + COMMAND ${Java_JAVADOC_EXECUTABLE} -encoding utf8 -d "${javadocdir}" + -classpath "${path_android_jar}" + -author -use -version ${SDL_JAVA_SOURCES} + DEPENDS ${SDL_JAVA_SOURCES} "${path_android_jar}" + ) + add_custom_target(SDL3-javadoc ALL DEPENDS "${javadoc_index_html}") + set_property(TARGET SDL3-javadoc PROPERTY OUTPUT_DIR "${javadocdir}") + endif() + endif() + endif() + +elseif(EMSCRIPTEN) + # Hide noisy warnings that intend to aid mostly during initial stages of porting a new + # project. Uncomment at will for verbose cross-compiling -I/../ path info. + sdl_compile_options(PRIVATE "-Wno-warn-absolute-paths") + + if(SDL_MISC) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/emscripten/*.c") + set(HAVE_SDL_MISC TRUE) + endif() + if(SDL_AUDIO) + set(SDL_AUDIO_DRIVER_EMSCRIPTEN 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/emscripten/*.c") + set(HAVE_SDL_AUDIO TRUE) + endif() + if(SDL_FILESYSTEM) + set(SDL_FILESYSTEM_EMSCRIPTEN 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/emscripten/*.c") + set(HAVE_SDL_FILESYSTEM TRUE) + endif() + if(SDL_JOYSTICK) + set(SDL_JOYSTICK_EMSCRIPTEN 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/emscripten/*.c") + set(HAVE_SDL_JOYSTICK TRUE) + endif() + if(SDL_POWER) + set(SDL_POWER_EMSCRIPTEN 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/emscripten/*.c") + set(HAVE_SDL_POWER TRUE) + endif() + if(SDL_LOCALE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/emscripten/*.c") + set(HAVE_SDL_LOCALE TRUE) + endif() + if(SDL_TIMERS) + set(SDL_TIMER_UNIX 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/unix/*.c") + set(HAVE_SDL_TIMERS TRUE) + + if(SDL_CLOCK_GETTIME) + set(HAVE_CLOCK_GETTIME 1) + endif() + endif() + if(SDL_VIDEO) + set(SDL_VIDEO_DRIVER_EMSCRIPTEN 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/emscripten/*.c") + set(HAVE_SDL_VIDEO TRUE) + + #enable gles + if(SDL_OPENGLES) + set(SDL_VIDEO_OPENGL_EGL 1) + set(HAVE_OPENGLES TRUE) + set(SDL_VIDEO_OPENGL_ES2 1) + set(SDL_VIDEO_RENDER_OGL_ES2 1) + endif() + endif() + + CheckPTHREAD() + CheckLibUnwind() + +elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU) + if(SDL_AUDIO) + if(NETBSD) + set(SDL_AUDIO_DRIVER_NETBSD 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/netbsd/*.c") + set(HAVE_SDL_AUDIO TRUE) + elseif(QNX) + set(SDL_AUDIO_DRIVER_QNX 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/qnx/*.c") + sdl_link_dependency(asound LIBS asound) + set(HAVE_SDL_AUDIO TRUE) + endif() + CheckOSS() + CheckALSA() + CheckJACK() + CheckPipewire() + CheckPulseAudio() + CheckSNDIO() + endif() + + if(SDL_VIDEO) + # Need to check for Raspberry PI first and add platform specific compiler flags, otherwise the test for GLES fails! + CheckRPI() + # Need to check for ROCKCHIP platform and get rid of "Can't window GBM/EGL surfaces on window creation." + CheckROCKCHIP() + CheckX11() + # Need to check for EGL first because KMSDRM and Wayland depend on it. + CheckEGL() + CheckKMSDRM() + CheckGLX() + CheckOpenGL() + CheckOpenGLES() + CheckWayland() + CheckVivante() + CheckVulkan() + CheckQNXScreen() + endif() + + if(UNIX) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/unix/*.c") + + if (HAVE_LINUX_INPUT_H) + check_c_source_compiles(" + #include + #ifndef EVIOCGNAME + #error EVIOCGNAME() ioctl not available + #endif + int main(int argc, char** argv) { return 0; }" HAVE_INPUT_EVENTS) + endif() + + if(LINUX) + check_c_source_compiles(" + #include + #include + #include + int main(int argc, char **argv) { + struct kbentry kbe; + kbe.kb_table = KG_CTRL; + ioctl(0, KDGKBENT, &kbe); + return 0; + }" HAVE_INPUT_KD) + elseif(FREEBSD) + check_c_source_compiles(" + #include + #include + int main(int argc, char **argv) { + accentmap_t accTable; + ioctl(0, KDENABIO, 1); + return 0; + }" HAVE_INPUT_KBIO) + elseif(OPENBSD OR NETBSD) + check_c_source_compiles(" + #include + #include + #include + #include + #include + int main(int argc, char **argv) { + struct wskbd_map_data data; + ioctl(0, WSKBDIO_GETMAP, &data); + return 0; + }" HAVE_INPUT_WSCONS) + endif() + + if(HAVE_INPUT_EVENTS) + set(SDL_INPUT_LINUXEV 1) + endif() + + if(SDL_HAPTIC AND HAVE_INPUT_EVENTS) + set(SDL_HAPTIC_LINUX 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/haptic/linux/*.c") + set(HAVE_SDL_HAPTIC TRUE) + endif() + + if(HAVE_INPUT_KD) + set(SDL_INPUT_LINUXKD 1) + endif() + + if(HAVE_INPUT_KBIO) + set(SDL_INPUT_FBSDKBIO 1) + endif() + + if(HAVE_INPUT_WSCONS) + set(SDL_INPUT_WSCONS 1) + endif() + + CheckLibUDev() + check_include_file("sys/inotify.h" HAVE_SYS_INOTIFY_H) + check_symbol_exists(inotify_init "sys/inotify.h" HAVE_INOTIFY_INIT) + check_symbol_exists(inotify_init1 "sys/inotify.h" HAVE_INOTIFY_INIT1) + + if(HAVE_SYS_INOTIFY_H AND HAVE_INOTIFY_INIT) + set(HAVE_INOTIFY 1) + endif() + + if(PKG_CONFIG_FOUND) + if(SDL_DBUS) + pkg_search_module(DBUS dbus-1 dbus) + if(DBUS_FOUND) + set(HAVE_DBUS_DBUS_H TRUE) + sdl_include_directories(PRIVATE SYSTEM ${DBUS_INCLUDE_DIRS}) + # Fcitx need only dbus. + set(HAVE_FCITX TRUE) + set(HAVE_DBUS TRUE) + endif() + endif() + + if(SDL_IBUS) + pkg_search_module(IBUS ibus-1.0 ibus) + find_path(HAVE_SYS_INOTIFY_H NAMES sys/inotify.h) + if(IBUS_FOUND AND HAVE_SYS_INOTIFY_H) + set(HAVE_IBUS_IBUS_H TRUE) + sdl_include_directories(PRIVATE SYSTEM ${IBUS_INCLUDE_DIRS}) + set(HAVE_IBUS TRUE) + endif() + endif() + + if (HAVE_IBUS_IBUS_H OR HAVE_FCITX) + set(SDL_USE_IME 1) + endif() + + if(FREEBSD AND NOT HAVE_INOTIFY) + set(LibInotify_PKG_CONFIG_SPEC libinotify) + pkg_check_modules(PC_LIBINOTIFY IMPORTED_TARGET ${LibInotify_PKG_CONFIG_SPEC}) + if(PC_LIBINOTIFY_FOUND) + set(HAVE_INOTIFY 1) + sdl_link_dependency(libinotify LIBS PkgConfig::PC_LIBINOTIFY PKG_CONFIG_PREFIX PC_LIBINOTIFY PKG_CONFIG_SPECS ${LibInotify_PKG_CONFIG_SPEC}) + endif() + endif() + + CheckLibUnwind() + endif() + + if(HAVE_DBUS_DBUS_H) + sdl_sources( + "${SDL3_SOURCE_DIR}/src/core/linux/SDL_dbus.c" + "${SDL3_SOURCE_DIR}/src/core/linux/SDL_system_theme.c" + ) + endif() + + if(SDL_USE_IME) + sdl_sources("${SDL3_SOURCE_DIR}/src/core/linux/SDL_ime.c") + endif() + + if(HAVE_IBUS_IBUS_H) + sdl_sources("${SDL3_SOURCE_DIR}/src/core/linux/SDL_ibus.c") + endif() + + if(HAVE_FCITX) + sdl_sources("${SDL3_SOURCE_DIR}/src/core/linux/SDL_fcitx.c") + endif() + + if(HAVE_LIBUDEV_H) + sdl_sources("${SDL3_SOURCE_DIR}/src/core/linux/SDL_udev.c") + endif() + + if(HAVE_INPUT_EVENTS) + sdl_sources( + "${SDL3_SOURCE_DIR}/src/core/linux/SDL_evdev.c" + "${SDL3_SOURCE_DIR}/src/core/linux/SDL_evdev_kbd.c" + ) + endif() + + if(HAVE_INPUT_KBIO) + sdl_sources("${SDL3_SOURCE_DIR}/src/core/freebsd/SDL_evdev_kbd_freebsd.c") + endif() + + # Always compiled for Linux, unconditionally: + sdl_sources( + "${SDL3_SOURCE_DIR}/src/core/linux/SDL_evdev_capabilities.c" + "${SDL3_SOURCE_DIR}/src/core/linux/SDL_threadprio.c" + "${SDL3_SOURCE_DIR}/src/core/linux/SDL_sandbox.c" + ) + + # src/core/unix/*.c is included in a generic if(UNIX) section, elsewhere. + endif() + + if(SDL_HIDAPI) + CheckHIDAPI() + endif() + + if(SDL_JOYSTICK) + if(FREEBSD OR NETBSD OR OPENBSD OR BSDI) + CheckUSBHID() + endif() + if(LINUX AND HAVE_LINUX_INPUT_H AND NOT ANDROID) + set(SDL_JOYSTICK_LINUX 1) + sdl_glob_sources( + "${SDL3_SOURCE_DIR}/src/joystick/linux/*.c" + "${SDL3_SOURCE_DIR}/src/joystick/steam/*.c" + ) + set(HAVE_SDL_JOYSTICK TRUE) + endif() + endif() + + CheckPTHREAD() + + if(SDL_CLOCK_GETTIME) + check_library_exists(c clock_gettime "" FOUND_CLOCK_GETTIME_LIBC) + if(FOUND_CLOCK_GETTIME_LIBC) + set(HAVE_CLOCK_GETTIME 1) + else() + check_library_exists(rt clock_gettime "" FOUND_CLOCK_GETTIME_LIBRT) + if(FOUND_CLOCK_GETTIME_LIBRT) + set(HAVE_CLOCK_GETTIME 1) + sdl_link_dependency(clock LIBS rt) + endif() + endif() + endif() + + if(SDL_MISC) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/unix/*.c") + set(HAVE_SDL_MISC TRUE) + endif() + + if(SDL_POWER) + if(LINUX) + set(SDL_POWER_LINUX 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/linux/*.c") + set(HAVE_SDL_POWER TRUE) + endif() + endif() + + if(SDL_LOCALE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/unix/*.c") + set(HAVE_SDL_LOCALE TRUE) + endif() + + if(SDL_FILESYSTEM) + set(SDL_FILESYSTEM_UNIX 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/unix/*.c") + set(HAVE_SDL_FILESYSTEM TRUE) + endif() + + if(SDL_TIMERS) + set(SDL_TIMER_UNIX 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/unix/*.c") + set(HAVE_SDL_TIMERS TRUE) + endif() + + set(SDL_RLD_FLAGS "") + if(SDL_RPATH AND SDL_SHARED) + if(BSDI OR FREEBSD OR LINUX OR NETBSD) + cmake_push_check_state() + string(APPEND CMAKE_REQUIRED_FLAGS " -Wl,--enable-new-dtags") + check_c_compiler_flag("" HAVE_ENABLE_NEW_DTAGS) + cmake_pop_check_state() + if(HAVE_ENABLE_NEW_DTAGS) + set(SDL_RLD_FLAGS "-Wl,-rpath,\${libdir} -Wl,--enable-new-dtags") + else() + set(SDL_RLD_FLAGS "-Wl,-rpath,\${libdir}") + endif() + elseif(SOLARIS) + set(SDL_RLD_FLAGS "-R\${libdir}") + endif() + set(HAVE_RPATH TRUE) + endif() + + if(QNX) + # QNX's *printf() family generates a SIGSEGV if NULL is passed for a string + # specifier (on purpose), but SDL expects "(null)". Use the built-in + # implementation. + set (HAVE_VSNPRINTF 0) + set (USE_POSIX_SPAWN 1) + endif() +elseif(WINDOWS) + check_c_source_compiles(" + #include + int main(int argc, char **argv) { return 0; }" HAVE_WIN32_CC) + + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/windows/*.c") + + if(WINDOWS_STORE) + sdl_glob_sources( + "${SDL3_SOURCE_DIR}/src/core/winrt/*.c" + "${SDL3_SOURCE_DIR}/src/core/winrt/*.cpp" + ) + endif() + + if(TARGET SDL3-shared AND MSVC AND NOT SDL_LIBC) + # Prevent codegen that would use the VC runtime libraries. + target_compile_options(SDL3-shared PRIVATE $<$:/GS-> $<$:/Gs1048576>) + if(SDL_CPU_X86) + target_compile_options(SDL3-shared PRIVATE "/arch:SSE") + endif() + endif() + + if(SDL_MISC) + if(WINDOWS_STORE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/winrt/*.cpp") + else() + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/windows/*.c") + endif() + set(HAVE_SDL_MISC TRUE) + endif() + + # Check for DirectX + if(SDL_DIRECTX) + cmake_push_check_state() + if(DEFINED MSVC_VERSION AND NOT ${MSVC_VERSION} LESS 1700) + set(USE_WINSDK_DIRECTX TRUE) + endif() + if(NOT MINGW AND NOT USE_WINSDK_DIRECTX) + if("$ENV{DXSDK_DIR}" STREQUAL "") + message(FATAL_ERROR "DIRECTX requires the \$DXSDK_DIR environment variable to be set") + endif() + string(APPEND CMAKE_REQUIRED_FLAGS " /I\"$ENV{DXSDK_DIR}\\Include\"") + endif() + + check_include_file(d3d9.h HAVE_D3D_H) + check_include_file(d3d11_1.h HAVE_D3D11_H) + check_c_source_compiles(" + #include + #include + #include + ID3D12Device1 *device; + #if WDK_NTDDI_VERSION > 0x0A000008 + int main(int argc, char **argv) { return 0; } + #endif" HAVE_D3D12_H) + check_include_file(ddraw.h HAVE_DDRAW_H) + check_include_file(dsound.h HAVE_DSOUND_H) + check_include_file(dinput.h HAVE_DINPUT_H) + if(WINDOWS_STORE OR SDL_CPU_ARM32) + set(HAVE_DINPUT_H 0) + endif() + check_include_file(dxgi.h HAVE_DXGI_H) + cmake_pop_check_state() + if(HAVE_D3D_H OR HAVE_D3D11_H OR HAVE_D3D12_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR HAVE_DINPUT_H) + set(HAVE_DIRECTX TRUE) + if(NOT MINGW AND NOT USE_WINSDK_DIRECTX) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(PROCESSOR_ARCH "x64") + else() + set(PROCESSOR_ARCH "x86") + endif() + sdl_link_directories("$") + sdl_include_directories(PRIVATE SYSTEM "$") + endif() + endif() + endif() + + if(SDL_XINPUT) + # xinput.h may need windows.h, but does not include it itself. + check_c_source_compiles(" + #include + #include + int main(int argc, char **argv) { return 0; }" HAVE_XINPUT_H) + check_c_source_compiles(" + #include + #include + XINPUT_GAMEPAD_EX x1; + int main(int argc, char **argv) { return 0; }" HAVE_XINPUT_GAMEPAD_EX) + check_c_source_compiles(" + #include + #include + XINPUT_STATE_EX s1; + int main(int argc, char **argv) { return 0; }" HAVE_XINPUT_STATE_EX) + check_c_source_compiles(" + #define COBJMACROS + #include + __x_ABI_CWindows_CGaming_CInput_CIGamepadStatics2 *s2; + int main(int argc, char **argv) { return 0; }" HAVE_WINDOWS_GAMING_INPUT_H) + endif() + + # headers needed elsewhere + check_include_file(tpcshrd.h HAVE_TPCSHRD_H) + check_include_file(roapi.h HAVE_ROAPI_H) + check_include_file(mmdeviceapi.h HAVE_MMDEVICEAPI_H) + check_include_file(audioclient.h HAVE_AUDIOCLIENT_H) + check_include_file(sensorsapi.h HAVE_SENSORSAPI_H) + check_include_file(shellscalingapi.h HAVE_SHELLSCALINGAPI_H) + + if(SDL_AUDIO) + if(HAVE_DSOUND_H AND NOT WINDOWS_STORE) + set(SDL_AUDIO_DRIVER_DSOUND 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/directsound/*.c") + set(HAVE_SDL_AUDIO TRUE) + endif() + + if(SDL_WASAPI AND HAVE_AUDIOCLIENT_H AND HAVE_MMDEVICEAPI_H) + set(SDL_AUDIO_DRIVER_WASAPI 1) + set(HAVE_WASAPI TRUE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/wasapi/*.c") + if(WINDOWS_STORE) + sdl_sources("${SDL3_SOURCE_DIR}/src/audio/wasapi/SDL_wasapi_winrt.cpp") + endif() + set(HAVE_SDL_AUDIO TRUE) + endif() + endif() + + if(SDL_VIDEO) + # requires SDL_LOADSO on Windows (IME, DX, etc.) + if(NOT SDL_LOADSO) + message(FATAL_ERROR "SDL_VIDEO requires SDL_LOADSO, which is not enabled") + endif() + if(WINDOWS_STORE) + set(SDL_VIDEO_DRIVER_WINRT 1) + sdl_glob_sources( + "${SDL3_SOURCE_DIR}/src/video/winrt/*.c" + "${SDL3_SOURCE_DIR}/src/video/winrt/*.cpp" + "${SDL3_SOURCE_DIR}/src/render/direct3d11/*.cpp" + ) + else() + set(SDL_VIDEO_DRIVER_WINDOWS 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/windows/*.c") + endif() + + if(SDL_RENDER_D3D AND HAVE_D3D_H AND NOT WINDOWS_STORE) + set(SDL_VIDEO_RENDER_D3D 1) + set(HAVE_RENDER_D3D TRUE) + endif() + if(SDL_RENDER_D3D AND HAVE_D3D11_H) + set(SDL_VIDEO_RENDER_D3D11 1) + set(HAVE_RENDER_D3D TRUE) + endif() + if(SDL_RENDER_D3D AND HAVE_D3D12_H AND NOT WINDOWS_STORE) + set(SDL_VIDEO_RENDER_D3D12 1) + set(HAVE_RENDER_D3D TRUE) + endif() + set(HAVE_SDL_VIDEO TRUE) + endif() + + if(SDL_THREADS) + set(SDL_THREAD_GENERIC_COND_SUFFIX 1) + set(SDL_THREAD_GENERIC_RWLOCK_SUFFIX 1) + set(SDL_THREAD_WINDOWS 1) + sdl_sources( + "${SDL3_SOURCE_DIR}/src/thread/generic/SDL_syscond.c" + "${SDL3_SOURCE_DIR}/src/thread/generic/SDL_sysrwlock.c" + "${SDL3_SOURCE_DIR}/src/thread/windows/SDL_syscond_cv.c" + "${SDL3_SOURCE_DIR}/src/thread/windows/SDL_sysmutex.c" + "${SDL3_SOURCE_DIR}/src/thread/windows/SDL_sysrwlock_srw.c" + "${SDL3_SOURCE_DIR}/src/thread/windows/SDL_syssem.c" + "${SDL3_SOURCE_DIR}/src/thread/windows/SDL_systhread.c" + "${SDL3_SOURCE_DIR}/src/thread/windows/SDL_systls.c" + ) + set(HAVE_SDL_THREADS TRUE) + endif() + + if(SDL_SENSOR AND HAVE_SENSORSAPI_H AND NOT WINDOWS_STORE) + set(SDL_SENSOR_WINDOWS 1) + set(HAVE_SDL_SENSORS TRUE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/sensor/windows/*.c") + endif() + + if(SDL_POWER) + if(WINDOWS_STORE) + set(SDL_POWER_WINRT 1) + sdl_sources("${SDL3_SOURCE_DIR}/src/power/winrt/SDL_syspower.cpp") + else() + set(SDL_POWER_WINDOWS 1) + sdl_sources("${SDL3_SOURCE_DIR}/src/power/windows/SDL_syspower.c") + set(HAVE_SDL_POWER TRUE) + endif() + endif() + + if(SDL_LOCALE) + if(WINDOWS_STORE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/winrt/*.c") + else() + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/windows/*.c") + endif() + set(HAVE_SDL_LOCALE TRUE) + endif() + + if(SDL_FILESYSTEM) + set(SDL_FILESYSTEM_WINDOWS 1) + if(WINDOWS_STORE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/winrt/*.cpp") + else() + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/windows/*.c") + endif() + set(HAVE_SDL_FILESYSTEM TRUE) + endif() + + # Libraries for Win32 native and MinGW + if(NOT WINDOWS_STORE) + sdl_link_dependency(base LIBS kernel32 user32 gdi32 winmm imm32 ole32 oleaut32 version uuid advapi32 setupapi shell32) + endif() + + if(WINDOWS_STORE) + sdl_link_dependency(windows + LIBS + vccorlib$<$:d>.lib + msvcrt$<$:d>.lib + LINK_OPTIONS + -nodefaultlib:vccorlib$<$:d> + -nodefaultlib:msvcrt$<$:d> + ) + endif() + + if(SDL_TIMERS) + set(SDL_TIMER_WINDOWS 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/windows/*.c") + set(HAVE_SDL_TIMERS TRUE) + endif() + + if(SDL_LOADSO) + set(SDL_LOADSO_WINDOWS 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/loadso/windows/*.c") + set(HAVE_SDL_LOADSO TRUE) + endif() + + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/windows/*.c") + + if(SDL_VIDEO) + if(SDL_OPENGL AND NOT WINDOWS_STORE) + set(SDL_VIDEO_OPENGL 1) + set(SDL_VIDEO_OPENGL_WGL 1) + set(SDL_VIDEO_RENDER_OGL 1) + set(HAVE_OPENGL TRUE) + endif() + + if(SDL_OPENGLES) + set(SDL_VIDEO_OPENGL_EGL 1) + set(SDL_VIDEO_OPENGL_ES2 1) + set(SDL_VIDEO_RENDER_OGL_ES2 1) + set(HAVE_OPENGLES TRUE) + endif() + + if(SDL_VULKAN) + set(SDL_VIDEO_VULKAN 1) + set(HAVE_VULKAN TRUE) + endif() + endif() + + if(SDL_HIDAPI) + CheckHIDAPI() + endif() + + if(SDL_JOYSTICK) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/windows/*.c") + + if(NOT WINDOWS_STORE) + set(SDL_JOYSTICK_RAWINPUT 1) + endif() + if(HAVE_DINPUT_H) + set(SDL_JOYSTICK_DINPUT 1) + sdl_link_dependency(joystick LIBS dinput8) + endif() + if(HAVE_XINPUT_H) + if(NOT WINDOWS_STORE) + set(SDL_JOYSTICK_XINPUT 1) + set(HAVE_XINPUT TRUE) + endif() + if(HAVE_WINDOWS_GAMING_INPUT_H) + set(SDL_JOYSTICK_WGI 1) + endif() + endif() + set(HAVE_SDL_JOYSTICK TRUE) + + if(SDL_HAPTIC) + if((HAVE_DINPUT_H OR HAVE_XINPUT_H) AND NOT WINDOWS_STORE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/haptic/windows/*.c") + if(HAVE_DINPUT_H) + set(SDL_HAPTIC_DINPUT 1) + endif() + if(HAVE_XINPUT_H) + set(SDL_HAPTIC_XINPUT 1) + endif() + else() + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/haptic/dummy/*.c") + set(SDL_HAPTIC_DUMMY 1) + endif() + set(HAVE_SDL_HAPTIC TRUE) + endif() + endif() + + sdl_glob_sources(SHARED "${SDL3_SOURCE_DIR}/src/core/windows/*.rc") + if(MINGW OR CYGWIN) + sdl_pc_link_options("-mwindows") + endif() + +elseif(APPLE) + # TODO: rework this all for proper macOS, iOS and Darwin support + + # We always need these libs on macOS at the moment. + # !!! FIXME: we need Carbon for some very old API calls in + # !!! FIXME: src/video/cocoa/SDL_cocoakeyboard.c, but we should figure out + # !!! FIXME: how to dump those. + if(DARWIN OR MACOSX) + set(SDL_FRAMEWORK_COCOA 1) + set(SDL_FRAMEWORK_CARBON 1) + endif() + set(SDL_FRAMEWORK_FOUNDATION 1) + set(SDL_FRAMEWORK_COREVIDEO 1) + + # Requires the darwin file implementation + if(SDL_FILE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/file/cocoa/*.m") + set(HAVE_SDL_FILE TRUE) + endif() + + if(SDL_MISC) + if(IOS OR TVOS OR VISIONOS) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/ios/*.m") + else() + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/macos/*.m") + endif() + set(HAVE_SDL_MISC TRUE) + endif() + + if(SDL_AUDIO) + set(SDL_AUDIO_DRIVER_COREAUDIO 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/coreaudio/*.m") + set(HAVE_SDL_AUDIO TRUE) + set(SDL_FRAMEWORK_COREAUDIO 1) + set(SDL_FRAMEWORK_AUDIOTOOLBOX 1) + set(SDL_FRAMEWORK_AVFOUNDATION 1) + endif() + + if(SDL_HIDAPI) + CheckHIDAPI() + endif() + + if(SDL_JOYSTICK) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/apple/*.m") + if(IOS OR TVOS OR VISIONOS) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/steam/*.c") + set(SDL_JOYSTICK_MFI 1) + if(IOS OR VISIONOS) + set(SDL_FRAMEWORK_COREMOTION 1) + endif() + set(SDL_FRAMEWORK_GAMECONTROLLER 1) + set(SDL_FRAMEWORK_COREHAPTICS 1) + else() + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/darwin/*.c") + set_property(SOURCE ${MFI_JOYSTICK_SOURCES} APPEND_STRING PROPERTY COMPILE_FLAGS " -fobjc-weak") + check_objc_source_compiles(" + #include + #include + #import + #import + #if MAC_OS_X_VERSION_MIN_REQUIRED < 1080 + #error GameController framework doesn't work on this configuration + #endif + #if TARGET_CPU_X86 + #error GameController framework doesn't work on this configuration + #endif + int main() { return 0; }" HAVE_FRAMEWORK_GAMECONTROLLER) + check_objc_source_compiles(" + #include + #include + #import + #import + int main() { return 0; }" HAVE_FRAMEWORK_COREHAPTICS) + if(HAVE_FRAMEWORK_GAMECONTROLLER AND HAVE_FRAMEWORK_COREHAPTICS) + # Only enable MFI if we also have CoreHaptics to ensure rumble works + set(SDL_JOYSTICK_MFI 1) + set(SDL_FRAMEWORK_GAMECONTROLLER 1) + set(SDL_FRAMEWORK_COREHAPTICS 1) + endif() + if(NOT VISIONOS) + set(SDL_JOYSTICK_IOKIT 1) + set(SDL_FRAMEWORK_IOKIT 1) + endif() + set(SDL_FRAMEWORK_FF 1) + endif() + set(HAVE_SDL_JOYSTICK TRUE) + endif() + + if(SDL_HAPTIC) + if (IOS OR TVOS OR VISIONOS) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/haptic/dummy/*.c") + set(SDL_HAPTIC_DUMMY 1) + else() + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/haptic/darwin/*.c") + set(SDL_HAPTIC_IOKIT 1) + set(SDL_FRAMEWORK_IOKIT 1) + set(SDL_FRAMEWORK_FF 1) + endif() + set(HAVE_SDL_HAPTIC TRUE) + endif() + + if(SDL_POWER) + if (IOS OR TVOS OR VISIONOS) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/uikit/*.m") + set(SDL_POWER_UIKIT 1) + else() + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/macos/*.c") + set(SDL_POWER_MACOSX 1) + set(SDL_FRAMEWORK_IOKIT 1) + endif() + set(HAVE_SDL_POWER TRUE) + endif() + + if(SDL_LOCALE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/macos/*.m") + set(HAVE_SDL_LOCALE TRUE) + endif() + + if(SDL_TIMERS) + set(SDL_TIMER_UNIX 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/unix/*.c") + set(HAVE_SDL_TIMERS TRUE) + endif(SDL_TIMERS) + + if(SDL_FILESYSTEM) + set(SDL_FILESYSTEM_COCOA 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/cocoa/*.m") + set(HAVE_SDL_FILESYSTEM TRUE) + endif() + + if(SDL_SENSOR) + if(IOS OR VISIONOS) + set(SDL_SENSOR_COREMOTION 1) + set(HAVE_SDL_SENSORS TRUE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/sensor/coremotion/*.m") + endif() + endif() + + # iOS hack needed - http://code.google.com/p/ios-cmake/ ? + if(SDL_VIDEO) + if (IOS OR TVOS OR VISIONOS) + set(SDL_VIDEO_DRIVER_UIKIT 1) + set(SDL_FRAMEWORK_COREGRAPHICS 1) + set(SDL_FRAMEWORK_QUARTZCORE 1) + set(SDL_FRAMEWORK_UIKIT 1) + set(SDL_IPHONE_KEYBOARD 1) + set(SDL_IPHONE_LAUNCHSCREEN 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/uikit/*.m") + set(HAVE_SDL_VIDEO TRUE) + else() + CheckCOCOA() + if(SDL_OPENGL) + set(SDL_VIDEO_OPENGL 1) + set(SDL_VIDEO_OPENGL_CGL 1) + set(SDL_VIDEO_RENDER_OGL 1) + set(HAVE_OPENGL TRUE) + endif() + endif() + + if(SDL_OPENGLES) + if(IOS OR TVOS OR VISIONOS) + set(SDL_FRAMEWORK_OPENGLES 1) + set(SDL_VIDEO_OPENGL_ES 1) + else() + set(SDL_VIDEO_OPENGL_EGL 1) + endif() + set(SDL_VIDEO_OPENGL_ES2 1) + set(SDL_VIDEO_RENDER_OGL_ES2 1) + set(HAVE_OPENGLES TRUE) + endif() + + if(SDL_VULKAN OR SDL_METAL OR SDL_RENDER_METAL) + check_objc_source_compiles(" + #include + #import + #import + + #if (!TARGET_CPU_X86_64 && !TARGET_CPU_ARM64) + #error Metal doesn't work on this configuration + #endif + int main(int argc, char **argv) { return 0; }" HAVE_FRAMEWORK_METAL) + if(HAVE_FRAMEWORK_METAL) + set(SDL_FRAMEWORK_METAL 1) + set(SDL_FRAMEWORK_QUARTZCORE 1) + if(SDL_VULKAN) + set(SDL_VIDEO_VULKAN 1) + set(HAVE_VULKAN TRUE) + endif() + if(SDL_METAL) + set(SDL_VIDEO_METAL 1) + set(HAVE_METAL TRUE) + endif() + if(SDL_RENDER_METAL) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/render/metal/*.m") + set(SDL_VIDEO_RENDER_METAL 1) + set(HAVE_RENDER_METAL TRUE) + endif() + endif() + endif() + endif() + + # Actually load the frameworks at the end so we don't duplicate include. + if(SDL_FRAMEWORK_COREVIDEO) + sdl_link_dependency(corevideo LINK_OPTIONS "-Wl,-framework,CoreVideo") + endif() + if(SDL_FRAMEWORK_COCOA) + sdl_link_dependency(cocoa LINK_OPTIONS "-Wl,-framework,Cocoa") + endif() + if(SDL_FRAMEWORK_IOKIT) + sdl_link_dependency(iokit LINK_OPTIONS "-Wl,-framework,IOKit") + endif() + if(SDL_FRAMEWORK_FF) + sdl_link_dependency(ff LINK_OPTIONS "-Wl,-framework,ForceFeedback") + endif() + if(SDL_FRAMEWORK_CARBON) + sdl_link_dependency(carbon LINK_OPTIONS "-Wl,-framework,Carbon") + endif() + if(SDL_FRAMEWORK_COREAUDIO) + sdl_link_dependency(core_audio LINK_OPTIONS "-Wl,-framework,CoreAudio") + endif() + if(SDL_FRAMEWORK_AUDIOTOOLBOX) + sdl_link_dependency(audio_toolbox LINK_OPTIONS "-Wl,-framework,AudioToolbox") + endif() + if(SDL_FRAMEWORK_AVFOUNDATION) + sdl_link_dependency(av_foundation LINK_OPTIONS "-Wl,-framework,AVFoundation") + endif() + if(SDL_FRAMEWORK_COREBLUETOOTH) + sdl_link_dependency(core_bluetooth LINK_OPTIONS "-Wl,-framework,CoreBluetooth") + endif() + if(SDL_FRAMEWORK_COREGRAPHICS) + sdl_link_dependency(core_graphics LINK_OPTIONS "-Wl,-framework,CoreGraphics") + endif() + if(SDL_FRAMEWORK_COREMOTION) + sdl_link_dependency(core_motion LINK_OPTIONS "-Wl,-framework,CoreMotion") + endif() + if(SDL_FRAMEWORK_FOUNDATION) + sdl_link_dependency(foundation LINK_OPTIONS "-Wl,-framework,Foundation") + endif() + if(SDL_FRAMEWORK_GAMECONTROLLER) + find_library(GAMECONTROLLER GameController) + if(GAMECONTROLLER) + sdl_link_dependency(game_controller LINK_OPTIONS "-Wl,-weak_framework,GameController") + endif() + endif() + if(SDL_FRAMEWORK_METAL) + if(IOS OR TVOS OR VISIONOS) + sdl_link_dependency(metal LINK_OPTIONS "-Wl,-framework,Metal") + else() + sdl_link_dependency(metal LINK_OPTIONS "-Wl,-weak_framework,Metal") + endif() + endif() + if(SDL_FRAMEWORK_OPENGLES) + sdl_link_dependency(opengles LINK_OPTIONS "-Wl,-framework,OpenGLES") + endif() + if(SDL_FRAMEWORK_QUARTZCORE) + if(IOS OR TVOS OR VISIONOS) + sdl_link_dependency(quartz_core LINK_OPTIONS "-Wl,-framework,QuartzCore") + else() + sdl_link_dependency(metal LINK_OPTIONS "-Wl,-weak_framework,QuartzCore") + endif() + endif() + if(SDL_FRAMEWORK_UIKIT) + sdl_link_dependency(ui_kit LINK_OPTIONS "-Wl,-framework,UIKit") + endif() + if(SDL_FRAMEWORK_COREHAPTICS) + find_library(COREHAPTICS CoreHaptics) + if(COREHAPTICS) + sdl_link_dependency(core_haptics LINK_OPTIONS "-Wl,-framework,CoreHaptics") + endif() + endif() + + CheckPTHREAD() + +elseif(HAIKU) + if(SDL_AUDIO) + set(SDL_AUDIO_DRIVER_HAIKU 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/haiku/*.cc") + set(HAVE_SDL_AUDIO TRUE) + endif() + + if(SDL_JOYSTICK) + set(SDL_JOYSTICK_HAIKU 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/haiku/*.cc") + set(HAVE_SDL_JOYSTICK TRUE) + endif() + + if(SDL_MISC) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/haiku/*.cc") + set(HAVE_SDL_MISC TRUE) + endif() + + if(SDL_VIDEO) + set(SDL_VIDEO_DRIVER_HAIKU 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/haiku/*.cc") + set(HAVE_SDL_VIDEO TRUE) + + if(SDL_OPENGL) + # TODO: Use FIND_PACKAGE(OpenGL) instead + set(SDL_VIDEO_OPENGL 1) + set(SDL_VIDEO_OPENGL_HAIKU 1) + set(SDL_VIDEO_RENDER_OGL 1) + sdl_link_dependency(opengl LIBS GL) + set(HAVE_OPENGL TRUE) + endif() + endif() + + if(SDL_FILESYSTEM) + set(SDL_FILESYSTEM_HAIKU 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/haiku/*.cc") + set(HAVE_SDL_FILESYSTEM TRUE) + endif() + + if(SDL_TIMERS) + set(SDL_TIMER_HAIKU 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/haiku/*.c") + set(HAVE_SDL_TIMERS TRUE) + endif() + + if(SDL_POWER) + set(SDL_POWER_HAIKU 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/haiku/*.c") + set(HAVE_SDL_POWER TRUE) + endif() + + if(SDL_LOCALE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/haiku/*.cc") + set(HAVE_SDL_LOCALE TRUE) + endif() + + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/haiku/*.cc") + + CheckPTHREAD() + sdl_link_dependency(base LIBS root be media game device textencoding) + +elseif(RISCOS) + if(SDL_MISC) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/riscos/*.c") + set(HAVE_SDL_MISC TRUE) + endif() + + if(SDL_VIDEO) + set(SDL_VIDEO_DRIVER_RISCOS 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/riscos/*.c") + set(HAVE_SDL_VIDEO TRUE) + endif() + + if(SDL_FILESYSTEM) + set(SDL_FILESYSTEM_RISCOS 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/riscos/*.c") + set(HAVE_SDL_FILESYSTEM TRUE) + endif() + + if(SDL_TIMERS) + set(SDL_TIMER_UNIX 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/unix/*.c") + set(HAVE_SDL_TIMERS TRUE) + + if(SDL_CLOCK_GETTIME) + set(HAVE_CLOCK_GETTIME 1) + endif() + endif() + + CheckPTHREAD() + + if(SDL_AUDIO) + CheckOSS() + endif() + +elseif(VITA) + # SDL_spinlock.c Needs to be compiled in ARM mode. + cmake_push_check_state() + string(APPEND CMAKE_REQUIRED_FLAGS " -Werror=unused-command-line-argument") + check_c_compiler_flag(-marm HAVE_ARM_MODE) + cmake_pop_check_state() + if(HAVE_ARM_MODE) + set_property(SOURCE "${SDL3_SOURCE_DIR}/src/atomic/SDL_spinlock.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -marm") + endif() + + if(SDL_MISC) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/vita/*.c") + set(HAVE_SDL_MISC TRUE) + endif() + + if(SDL_AUDIO) + set(SDL_AUDIO_DRIVER_VITA 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/vita/*.c") + set(HAVE_SDL_AUDIO TRUE) + endif() + if(SDL_FILESYSTEM) + set(SDL_FILESYSTEM_VITA 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/vita/*.c") + set(HAVE_SDL_FILESYSTEM TRUE) + endif() + if(SDL_JOYSTICK) + set(SDL_JOYSTICK_VITA 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/vita/*.c") + set(HAVE_SDL_JOYSTICK TRUE) + endif() + if(SDL_POWER) + set(SDL_POWER_VITA 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/vita/*.c") + set(HAVE_SDL_POWER TRUE) + endif() + if(SDL_THREADS) + set(SDL_THREAD_VITA 1) + sdl_sources( + "${SDL3_SOURCE_DIR}/src/thread/vita/SDL_sysmutex.c" + "${SDL3_SOURCE_DIR}/src/thread/vita/SDL_syssem.c" + "${SDL3_SOURCE_DIR}/src/thread/vita/SDL_systhread.c" + "${SDL3_SOURCE_DIR}/src/thread/vita/SDL_syscond.c" + "${SDL3_SOURCE_DIR}/src/thread/generic/SDL_sysrwlock.c" + "${SDL3_SOURCE_DIR}/src/thread/generic/SDL_systls.c" + ) + set(HAVE_SDL_THREADS TRUE) + endif() + if(SDL_LOCALE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/vita/*.c") + set(HAVE_SDL_LOCALE TRUE) + endif() + if(SDL_TIMERS) + set(SDL_TIMER_VITA 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/vita/*.c") + set(HAVE_SDL_TIMERS TRUE) + endif() + if(SDL_SENSOR) + set(SDL_SENSOR_VITA 1) + set(HAVE_SDL_SENSORS TRUE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/sensor/vita/*.c") + endif() + if(SDL_VIDEO) + set(SDL_VIDEO_DRIVER_VITA 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/vita/*.c") + set(HAVE_SDL_VIDEO TRUE) + + if(VIDEO_VITA_PIB) + check_include_file(pib.h HAVE_PIGS_IN_BLANKET_H) + + if(HAVE_PIGS_IN_BLANKET_H) + set(SDL_VIDEO_OPENGL_ES2 1) + sdl_link_dependency(pib + LIBS + pib + libScePiglet_stub_weak + taihen_stub_weak + SceShaccCg_stub_weak + ) + set(HAVE_VIDEO_VITA_PIB ON) + set(SDL_VIDEO_VITA_PIB 1) + else() + set(HAVE_VIDEO_VITA_PIB OFF) + endif() + endif() + + if(VIDEO_VITA_PVR) + check_include_file(gpu_es4/psp2_pvr_hint.h HAVE_PVR_H) + if(HAVE_PVR_H) + sdl_compile_definitions(PRIVATE "__psp2__") + set(SDL_VIDEO_OPENGL_EGL 1) + set(HAVE_OPENGLES TRUE) + set(SDL_VIDEO_OPENGL_ES 1) + set(SDL_VIDEO_OPENGL_ES2 1) + set(SDL_VIDEO_RENDER_OGL_ES2 1) + + sdl_link_dependency(pvr + LIBS + libgpu_es4_ext_stub_weak + libIMGEGL_stub_weak + SceIme_stub + ) + + set(HAVE_VIDEO_VITA_PVR ON) + set(SDL_VIDEO_VITA_PVR 1) + + if(SDL_OPENGL) + check_include_file(gl4esinit.h HAVE_GL4ES_H) + if(HAVE_GL4ES_H) + set(HAVE_OPENGL TRUE) + set(SDL_VIDEO_OPENGL 1) + set(SDL_VIDEO_RENDER_OGL 1) + sdl_link_dependency(opengl LIBS libGL_stub) + set(SDL_VIDEO_VITA_PVR_OGL 1) + endif() + endif() + + else() + set(HAVE_VIDEO_VITA_PVR OFF) + endif() + endif() + + set(SDL_VIDEO_RENDER_VITA_GXM 1) + sdl_link_dependency(base + LIBS + SceGxm_stub + SceDisplay_stub + SceCtrl_stub + SceAppMgr_stub + SceAppUtil_stub + SceAudio_stub + SceAudioIn_stub + SceSysmodule_stub + SceDisplay_stub + SceCtrl_stub + SceIofilemgr_stub + SceCommonDialog_stub + SceTouch_stub + SceHid_stub + SceMotion_stub + ScePower_stub + SceProcessmgr_stub + ) + endif() + + sdl_compile_definitions(PRIVATE "__VITA__") + +elseif(PSP) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/psp/*.c") + + if(SDL_AUDIO) + set(SDL_AUDIO_DRIVER_PSP 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/psp/*.c") + set(HAVE_SDL_AUDIO TRUE) + endif() + if(SDL_FILESYSTEM) + set(SDL_FILESYSTEM_PSP 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/psp/*.c") + set(HAVE_SDL_FILESYSTEM TRUE) + endif() + if(SDL_JOYSTICK) + set(SDL_JOYSTICK_PSP 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/psp/*.c") + set(HAVE_SDL_JOYSTICK TRUE) + endif() + if(SDL_POWER) + set(SDL_POWER_PSP 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/psp/*.c") + set(HAVE_SDL_POWER TRUE) + endif() + if(SDL_THREADS) + set(SDL_THREAD_PSP 1) + sdl_glob_sources( + "${SDL3_SOURCE_DIR}/src/thread/generic/SDL_systls.c" + "${SDL3_SOURCE_DIR}/src/thread/generic/SDL_sysrwlock.c" + "${SDL3_SOURCE_DIR}/src/thread/psp/*.c" + ) + set(HAVE_SDL_THREADS TRUE) + endif() + if(SDL_TIMERS) + set(SDL_TIMER_PSP 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/psp/*.c") + set(HAVE_SDL_TIMERS TRUE) + endif() + if(SDL_VIDEO) + set(SDL_VIDEO_DRIVER_PSP 1) + set(SDL_VIDEO_RENDER_PSP 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/psp/*.c") + set(SDL_VIDEO_OPENGL 1) + set(HAVE_SDL_VIDEO TRUE) + endif() + sdl_link_dependency(base + LIBS + GL + pspvram + pspaudio + pspvfpu + pspdisplay + pspgu + pspge + psphprm + pspctrl + psppower + ) + +elseif(PS2) + sdl_compile_definitions(PRIVATE "PS2" "__PS2__") + sdl_include_directories(PRIVATE SYSTEM "$ENV{PS2SDK}/ports/include" "$ENV{PS2DEV}/gsKit/include") + + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/ps2/*.c") + + if(SDL_AUDIO) + set(SDL_AUDIO_DRIVER_PS2 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/ps2/*.c") + set(HAVE_SDL_AUDIO TRUE) + endif() + if(SDL_FILESYSTEM) + set(SDL_FILESYSTEM_PS2 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/ps2/*.c") + set(HAVE_SDL_FILESYSTEM TRUE) + endif() + if(SDL_JOYSTICK) + set(SDL_JOYSTICK_PS2 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/ps2/*.c") + set(HAVE_SDL_JOYSTICK TRUE) + endif() + if(SDL_THREADS) + set(SDL_THREAD_PS2 1) + sdl_glob_sources( + "${SDL3_SOURCE_DIR}/src/thread/generic/SDL_syscond.c" + "${SDL3_SOURCE_DIR}/src/thread/generic/SDL_sysmutex.c" + "${SDL3_SOURCE_DIR}/src/thread/generic/SDL_sysrwlock.c" + "${SDL3_SOURCE_DIR}/src/thread/generic/SDL_systls.c" + "${SDL3_SOURCE_DIR}/src/thread/ps2/*.c" + ) + set(HAVE_SDL_THREADS TRUE) + endif() + if(SDL_TIMERS) + set(SDL_TIMER_PS2 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/ps2/*.c") + set(HAVE_SDL_TIMERS TRUE) + endif() + if(SDL_VIDEO) + set(SDL_VIDEO_DRIVER_PS2 1) + set(SDL_VIDEO_RENDER_PS2 1) + sdl_glob_sources( + "${SDL3_SOURCE_DIR}/src/video/ps2/*.c" + "${SDL3_SOURCE_DIR}/src/render/ps2/*.c" + ) + set(SDL_VIDEO_OPENGL 0) + set(HAVE_SDL_VIDEO TRUE) + endif() + + sdl_link_dependency(base + LIBS + patches + gskit + dmakit + ps2_drivers + ) +elseif(N3DS) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/n3ds/*.c") + + if(SDL_AUDIO) + set(SDL_AUDIO_DRIVER_N3DS 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/n3ds/*.c") + set(HAVE_SDL_AUDIO TRUE) + endif() + + if(SDL_FILESYSTEM) + set(SDL_FILESYSTEM_N3DS 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/n3ds/*.c") + set(HAVE_SDL_FILESYSTEM TRUE) + endif() + + if(SDL_JOYSTICK) + set(SDL_JOYSTICK_N3DS 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/n3ds/*.c") + set(HAVE_SDL_JOYSTICK TRUE) + endif() + + if(SDL_POWER) + set(SDL_POWER_N3DS 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/power/n3ds/*.c") + set(HAVE_SDL_POWER TRUE) + endif() + + if(SDL_THREADS) + set(SDL_THREAD_N3DS 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/thread/n3ds/*.c") + sdl_sources( + "${SDL3_SOURCE_DIR}/src/thread/generic/SDL_systls.c" + "${SDL3_SOURCE_DIR}/src/thread/generic/SDL_sysrwlock.c" + ) + set(HAVE_SDL_THREADS TRUE) + endif() + + if(SDL_TIMERS) + set(SDL_TIMER_N3DS 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/n3ds/*.c") + set(HAVE_SDL_TIMERS TRUE) + endif() + + if(SDL_SENSOR) + set(SDL_SENSOR_N3DS 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/sensor/n3ds/*.c") + set(HAVE_SDL_SENSORS TRUE) + endif() + + if(SDL_VIDEO) + set(SDL_VIDEO_DRIVER_N3DS 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/n3ds/*.c") + set(HAVE_SDL_VIDEO TRUE) + endif() + + if(SDL_LOCALE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/n3ds/*.c") + set(HAVE_SDL_LOCALE TRUE) + endif() + + # Requires the n3ds file implementation + if(SDL_FILE) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/file/n3ds/*.c") + set(HAVE_SDL_FILE TRUE) + else() + message(FATAL_ERROR "SDL_FILE must be enabled to build on N3DS") + endif() +endif() + +if(HAVE_VULKAN AND NOT SDL_LOADSO) + message(STATUS "Vulkan support is available, but disabled because there's no loadso.") + set(HAVE_VULKAN FALSE) + set(SDL_VIDEO_VULKAN 0) +endif() + +# Platform-independent options + +if(SDL_VIDEO) + if(SDL_OFFSCREEN AND SDL_VIDEO_OPENGL_EGL) + set(SDL_VIDEO_DRIVER_OFFSCREEN 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/offscreen/*.c") + set(HAVE_OFFSCREEN TRUE) + set(HAVE_SDL_VIDEO TRUE) + endif() +endif() + +# Dummies +# configure.ac does it differently: +# if not have X +# if enable_X { SDL_X_DISABLED = 1 } +# [add dummy sources] +# so it always adds a dummy, without checking, if it was actually requested. +# This leads to missing internal references on building, since the +# src/X/*.c does not get included. +if(NOT HAVE_SDL_AUDIO) + set(SDL_AUDIO_DRIVER_DUMMY 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/audio/dummy/*.c") +endif() +if(NOT HAVE_SDL_VIDEO) + set(SDL_VIDEO_DRIVER_DUMMY 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/dummy/*.c") +endif() +if(NOT HAVE_SDL_JOYSTICK) + set(SDL_JOYSTICK_DUMMY 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/dummy/*.c") +endif() +if(NOT HAVE_SDL_HAPTIC) + set(SDL_HAPTIC_DUMMY 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/haptic/dummy/*.c") +endif() +if(NOT HAVE_SDL_SENSORS) + set(SDL_SENSOR_DUMMY 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/sensor/dummy/*.c") +endif() +if(NOT HAVE_SDL_LOADSO) + set(SDL_LOADSO_DUMMY 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/loadso/dummy/*.c") +endif() +if(NOT HAVE_SDL_FILESYSTEM) + set(SDL_FILESYSTEM_DUMMY 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/filesystem/dummy/*.c") +endif() +if(NOT HAVE_SDL_LOCALE) + set(SDL_LOCALE_DUMMY 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/locale/dummy/*.c") +endif() +if(NOT HAVE_SDL_MISC) + set(SDL_MISC_DUMMY 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/misc/dummy/*.c") +endif() + +# We always need to have threads and timers around +if(NOT HAVE_SDL_THREADS) + # The emscripten platform has been carefully vetted to work without threads + if(EMSCRIPTEN) + set(SDL_THREADS_DISABLED 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/thread/generic/*.c") + else() + message(FATAL_ERROR "Threads are needed by many SDL subsystems and may not be disabled") + endif() +endif() +if(NOT HAVE_SDL_TIMERS) + set(SDL_TIMER_DUMMY 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/timer/dummy/*.c") +endif() + +# config variables may contain generator expression, so we need to generate SDL_build_config.h in 2 steps: +# 1. replace all `#cmakedefine`'s and `@abc@` +configure_file("${SDL3_SOURCE_DIR}/include/build_config/SDL_build_config.h.cmake" + "${SDL3_BINARY_DIR}/SDL_build_config.h.intermediate") +# 2. generate SDL_build_config.h in an build_type-dependent folder (which should be first in the include search path) +file(GENERATE + OUTPUT "${SDL3_BINARY_DIR}/include-config-$>/build_config/SDL_build_config.h" + INPUT "${SDL3_BINARY_DIR}/SDL_build_config.h.intermediate" +) + +file(GLOB SDL3_INCLUDE_FILES "${SDL3_SOURCE_DIR}/include/SDL3/*.h") +file(GLOB SDL3_TEST_INCLUDE_FILES "${SDL3_SOURCE_DIR}/include/SDL3/SDL_test*.h") +foreach(_hdr IN LISTS SDL3_INCLUDE_FILES) + if(_hdr MATCHES ".*SDL_revision\\.h" OR _hdr MATCHES ".*SDL_test.*\\.h") + list(REMOVE_ITEM SDL3_INCLUDE_FILES "${_hdr}") + endif() +endforeach() + +set(SDL_REVISION "" CACHE STRING "Custom SDL revision (overrides SDL_REVISION_SUFFIX)") +if(NOT SDL_REVISION) + set(SDL_REVISION_SUFFIX "" CACHE STRING "Suffix for the SDL revision") + if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION.txt") + # If VERSION.txt exists, it contains the SDL version + file(READ "${CMAKE_CURRENT_SOURCE_DIR}/VERSION.txt" SDL_REVISION_CENTER) + string(STRIP "${SDL_REVISION_CENTER}" SDL_REVISION_CENTER) + else() + # If VERSION does not exist, use git to calculate a version + git_describe(SDL_REVISION_CENTER) + if(NOT SDL_REVISION_CENTER) + set(SDL_REVISION_CENTER "${SDL3_VERSION}-no-vcs") + endif() + endif() + set(SDL_REVISION "SDL-${SDL_REVISION_CENTER}${SDL_REVISION_SUFFIX}") +endif() + +execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory "${SDL3_BINARY_DIR}/include/SDL3") +configure_file(include/build_config/SDL_revision.h.cmake include/SDL3/SDL_revision.h @ONLY) +list(APPEND SDL3_INCLUDE_FILES "${SDL3_BINARY_DIR}/include/SDL3/SDL_revision.h") + +if(SDL_FRAMEWORK) + # With Apple frameworks, headers in the PUBLIC_HEADER property also need to be added as sources + list(APPEND SDL3_INCLUDE_FILES ${SDL3_TEST_INCLUDE_FILES}) + sdl_sources(${SDL3_INCLUDE_FILES}) +endif() + +if((CMAKE_STATIC_LIBRARY_PREFIX STREQUAL "" AND CMAKE_STATIC_LIBRARY_SUFFIX STREQUAL ".lib") OR SDL_FRAMEWORK) + # - Avoid conflict between the dll import library and the static library + # - Create SDL3-static Apple Framework + set(sdl_static_libname "SDL3-static") +else() + set(sdl_static_libname "SDL3") +endif() + +macro(check_add_debug_flag FLAG SUFFIX) + check_c_compiler_flag(${FLAG} HAS_C_FLAG_${SUFFIX}) + if(HAS_C_FLAG_${SUFFIX}) + string(APPEND CMAKE_C_FLAGS_DEBUG " ${FLAG}") + endif() + + check_cxx_compiler_flag(${FLAG} HAS_CXX_${SUFFIX}) + if(HAS_CXX_${SUFFIX}) + string(APPEND CMAKE_CXX_FLAGS_DEBUG " ${FLAG}") + endif() +endmacro() + +macro(asan_check_add_debug_flag ASAN_FLAG) + check_add_debug_flag("-fsanitize=${ASAN_FLAG}" "${ASAN_FLAG}") + if(HAS_C_${ASAN_FLAG} OR HAS_CXX_${ASAN_FLAG}) + set(HAVE_ASAN ON) + endif() +endmacro() + +macro(asan_check_add_debug_flag2 ASAN_FLAG) + # for some sanitize flags we have to manipulate the CMAKE_REQUIRED_LIBRARIES: + # http://cmake.3232098.n2.nabble.com/CHECK-CXX-COMPILER-FLAG-doesn-t-give-correct-result-for-fsanitize-address-tp7600216p7600217.html + + set(FLAG "-fsanitize=${ASAN_FLAG}") + + cmake_push_check_state() + list(APPEND CMAKE_REQUIRED_LIBRARIES ${FLAG} asan) + check_c_compiler_flag (${FLAG} HAS_C_FLAG_${ASAN_FLAG}) + check_cxx_compiler_flag (${FLAG} HAS_CXX_FLAG_${ASAN_FLAG}) + cmake_pop_check_state() + + if (HAS_C_FLAG_${ASAN_FLAG}) + string(APPEND CMAKE_C_FLAGS_DEBUG " ${FLAG}") + endif() + + if (HAS_CXX_${ASAN_FLAG}) + string(APPEND CMAKE_CXX_FLAGS_DEBUG " ${FLAG}") + endif() + + if(HAS_C_${ASAN_FLAG} OR HAS_CXX_${ASAN_FLAG}) + set(HAVE_ASAN ON) + endif() +endmacro() + +# enable AddressSanitizer if supported +if(SDL_ASAN) + asan_check_add_debug_flag2("address") + asan_check_add_debug_flag("bool") + asan_check_add_debug_flag("bounds") + asan_check_add_debug_flag("enum") + asan_check_add_debug_flag("float-cast-overflow") + asan_check_add_debug_flag("float-divide-by-zero") + asan_check_add_debug_flag("nonnull-attribute") + asan_check_add_debug_flag("returns-nonnull-attribute") + asan_check_add_debug_flag("signed-integer-overflow") + asan_check_add_debug_flag("undefined") + asan_check_add_debug_flag("vla-bound") + asan_check_add_debug_flag("leak") + # The object size sanitizer has no effect on unoptimized builds on Clang, + # but causes warnings. + if(NOT USE_CLANG OR CMAKE_BUILD_TYPE STREQUAL "") + asan_check_add_debug_flag("object-size") + endif() +endif() + +if(SDL_CCACHE) + find_program(CCACHE_BINARY ccache) + if(CCACHE_BINARY) + set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_BINARY}) + set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_BINARY}) + set(CMAKE_OBJC_COMPILER_LAUNCHER ${CCACHE_BINARY}) + set(HAVE_CCACHE ON) + else() + set(HAVE_CCACHE OFF) + endif() +else() + set(HAVE_CCACHE OFF) +endif() + +if(SDL_CLANG_TIDY) + cmake_minimum_required(VERSION 3.6) + find_program(CLANG_TIDY_BINARY clang-tidy) + + if(CLANG_TIDY_BINARY) + set(HAVE_CLANG_TIDY ON) + get_clang_tidy_ignored_files(CLANG_TIDY_IGNORED_FILES) + set(CLANG_TIDY_COMMAND "${CLANG_TIDY_BINARY}" "-extra-arg=-Wno-unknown-warning-option" "--line-filter=[${CLANG_TIDY_IGNORED_FILES}]") + if(SDL_WERROR) + list(APPEND CLANG_TIDY_COMMAND "--warnings-as-errors=*") + endif() + set(CMAKE_C_CLANG_TIDY ${CLANG_TIDY_COMMAND}) + set(CMAKE_CXX_CLANG_TIDY ${CLANG_TIDY_COMMAND}) + set(CMAKE_OBJC_CLANG_TIDY ${CLANG_TIDY_COMMAND}) + get_property(shared_sources TARGET SDL3-collector PROPERTY INTERFACE_SOURCES) + set_source_files_properties(${shared_sources} PROPERTIES SKIP_PRECOMPILE_HEADERS TRUE) + file(GLOB STDLIB_SOURCES "${SDL3_SOURCE_DIR}/src/stdlib/*.c") + set_property(SOURCE ${STDLIB_SOURCES} APPEND PROPERTY COMPILE_DEFINITIONS "SDL_DISABLE_ANALYZE_MACROS") + else() + set(HAVE_CLANG_TIDY OFF) + endif() +endif() + +if(SDL_TESTS) + set(HAVE_TESTS ON) +endif() + +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ARCH_64 TRUE) +else() + set(ARCH_64 FALSE) +endif() + +if(ANDROID) + sdl_include_directories(PRIVATE SYSTEM "${ANDROID_NDK}/sources/android/cpufeatures") +endif() + +if(APPLE) + sdl_compile_options(PRIVATE "-fobjc-arc") +endif() + +if(PS2) + sdl_compile_options(PRIVATE "-Wno-error=declaration-after-statement") +endif() + +if(APPLE) + get_property(sources TARGET SDL3-collector PROPERTY INTERFACE_SOURCES) + foreach(SOURCE_FILE IN LISTS sources) + get_filename_component(FILE_EXTENSION ${SOURCE_FILE} EXT) + if(FILE_EXTENSION STREQUAL ".m") + set_property(SOURCE ${SOURCE_FILE} APPEND_STRING PROPERTY COMPILE_FLAGS " -x objective-c") + endif() + if(NOT FILE_EXTENSION STREQUAL ".c" AND NOT FILE_EXTENSION STREQUAL ".cpp") + set_property(SOURCE ${SOURCE_FILE} PROPERTY SKIP_PRECOMPILE_HEADERS 1) + endif() + endforeach() +endif() + +# Disable precompiled headers on SDL_dynapi.c to avoid applying dynapi overrides +set_source_files_properties(src/dynapi/SDL_dynapi.c PROPERTIES SKIP_PRECOMPILE_HEADERS 1) + +set(SDL_FRAMEWORK_RESOURCES + Xcode/SDL/pkg-support/resources/ReadMe.txt + LICENSE.txt +) +if(SDL_FRAMEWORK) + sdl_sources(${SDL_FRAMEWORK_RESOURCES}) +endif() + +add_library(SDL3_Headers INTERFACE) +add_library(SDL3::Headers ALIAS SDL3_Headers) +set_target_properties(SDL3_Headers PROPERTIES + EXPORT_NAME "Headers" +) +target_include_directories(SDL3_Headers + INTERFACE + "$" + "$" + "$" +) +if(SDL_FRAMEWORK) + target_include_directories(SDL3_Headers + INTERFACE + "$/SDL3.framework/Headers>" + ) + # Add `-F ` to make sure `#include "SDL3/..."` works. + target_compile_options(SDL3_Headers + INTERFACE + "$>" + ) +else() + target_include_directories(SDL3_Headers + INTERFACE + "$" + "$" + ) +endif() + +if(SDL_SHARED) + set_target_properties(SDL3-shared PROPERTIES + OUTPUT_NAME "SDL3" + POSITION_INDEPENDENT_CODE TRUE + LINK_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/dynapi/SDL_dynapi.sym" + INTERFACE_LINK_DEPENDS "$" + WINDOWS_EXPORT_ALL_SYMBOLS FALSE + DEFINE_SYMBOL "DLL_EXPORT" + ) + if(HAVE_GCC_FVISIBILITY) + set_target_properties(SDL3-shared PROPERTIES + C_VISIBILITY_PRESET "hidden" + CXX_VISIBILITY_PRESET "hidden" + OBJC_VISIBILITY_PRESET "hidden" + ) + endif() + if(NOT SDL_LIBC) + if(MSVC AND SDL_CPU_X86) + # FIXME: should be added for all architectures (missing symbols for ARM) + target_link_libraries(SDL3-shared PRIVATE "-nodefaultlib:MSVCRT") + endif() + if(HAS_Q_NO_USE_LIBIRC) + target_compile_options(SDL3-shared PRIVATE /Q_no-use-libirc) + endif() + endif() + if(APPLE) + set_target_properties(SDL3-shared PROPERTIES + MACOSX_RPATH TRUE + FRAMEWORK "${SDL_FRAMEWORK}" + ) + if(SDL_FRAMEWORK) + set_target_properties(SDL3-shared PROPERTIES + PUBLIC_HEADER "${SDL3_INCLUDE_FILES}" + FRAMEWORK_VERSION "${SDL_FRAMEWORK_VERSION}" + MACOSX_FRAMEWORK_IDENTIFIER "org.libsdl.SDL3" + RESOURCE "${SDL_FRAMEWORK_RESOURCES}" + ) + endif() + set_target_properties(SDL3-shared PROPERTIES + SOVERSION "${SDL_DYLIB_COMPAT_VERSION}" # SOVERSION corresponds to compatibility version + VERSION "${SDL_DYLIB_CURRENT_VERSION}" # VERSION corresponds to the current version + ) + elseif(UNIX AND NOT ANDROID) + set_target_properties(SDL3-shared PROPERTIES + VERSION "${SDL_SO_VERSION}" + SOVERSION "${SDL_SO_VERSION_MAJOR}" + ) + else() + if(WINDOWS OR CYGWIN) + set_target_properties(SDL3-shared PROPERTIES + PREFIX "" + ) + endif() + endif() + # Note: The clang toolset for Visual Studio does not support /NODEFAULTLIB. + if(MSVC AND NOT SDL_LIBC AND NOT MSVC_CLANG AND NOT SDL_CPU_ARM32) + # Don't try to link with the default set of libraries. + if(NOT WINDOWS_STORE) + # FIXME: is this needed? "-nodefaultlib:MSVCRT" ia already added when SDL_LIBC is false + target_link_options(SDL3-shared PRIVATE "/NODEFAULTLIB") + endif() + endif() + target_link_libraries(SDL3-shared PRIVATE ${SDL_CMAKE_DEPENDS}) + target_include_directories(SDL3-shared + PRIVATE + "$>>" + "$" + ) + target_link_libraries(SDL3-shared PUBLIC $) + if(MINGW OR CYGWIN) + target_link_options(SDL3-shared PRIVATE -static-libgcc) + endif() + # Use `Compatible Interface Properties` to: + # - allow consumers to enforce a shared/static library + # - block linking to SDL libraries of different major version + set_property(TARGET SDL3-shared APPEND PROPERTY COMPATIBLE_INTERFACE_BOOL SDL3_SHARED) + set_property(TARGET SDL3-shared PROPERTY INTERFACE_SDL3_SHARED TRUE) + set_property(TARGET SDL3-shared APPEND PROPERTY COMPATIBLE_INTERFACE_STRING "SDL_VERSION") + set_property(TARGET SDL3-shared PROPERTY INTERFACE_SDL_VERSION "SDL${SDL3_VERSION_MAJOR}") + if(NOT CMAKE_VERSION VERSION_LESS "3.16") + target_precompile_headers(SDL3-shared PRIVATE "$<$,$>:${PROJECT_SOURCE_DIR}/src/SDL_internal.h>") + endif() +endif() + +if(SDL_STATIC) + set_target_properties(SDL3-static PROPERTIES + OUTPUT_NAME "${sdl_static_libname}" + POSITION_INDEPENDENT_CODE "${SDL_STATIC_PIC}" + ) + target_compile_definitions(SDL3-static PRIVATE SDL_STATIC_LIB) + target_link_libraries(SDL3-static PRIVATE ${SDL_CMAKE_DEPENDS}) + target_include_directories(SDL3-static + PRIVATE + "$>>" + "$" + ) + target_link_libraries(SDL3-static PUBLIC $) + # Use `Compatible Interface Properties` to: + # - allow consumers to enforce a shared/static library + # - block linking to SDL libraries of different major version + set_property(TARGET SDL3-static APPEND PROPERTY COMPATIBLE_INTERFACE_BOOL SDL3_SHARED) + set_property(TARGET SDL3-static PROPERTY INTERFACE_SDL3_SHARED FALSE) + set_property(TARGET SDL3-static APPEND PROPERTY COMPATIBLE_INTERFACE_STRING "SDL_VERSION") + set_property(TARGET SDL3-static PROPERTY INTERFACE_SDL_VERSION "SDL${SDL3_VERSION_MAJOR}") + if(NOT CMAKE_VERSION VERSION_LESS "3.16") + target_precompile_headers(SDL3-static PRIVATE "$<$,$>:${PROJECT_SOURCE_DIR}/src/SDL_internal.h>") + endif() +endif() + +sdl_compile_definitions( + PRIVATE + "SDL_BUILD_MAJOR_VERSION=${PROJECT_VERSION_MAJOR}" + "SDL_BUILD_MINOR_VERSION=${PROJECT_VERSION_MINOR}" + "SDL_BUILD_MICRO_VERSION=${PROJECT_VERSION_PATCH}" +) + +##### Tests ##### + +if(SDL_TEST_LIBRARY) + file(GLOB TEST_SOURCES "${SDL3_SOURCE_DIR}/src/test/*.c") + target_sources(SDL3_test PRIVATE ${TEST_SOURCES}) + if(APPLE) + set_target_properties(SDL3_test PROPERTIES + FRAMEWORK "${SDL_FRAMEWORK}" + ) + if(SDL_FRAMEWORK) + set_target_properties(SDL3_test PROPERTIES + FRAMEWORK_VERSION "${SDL_FRAMEWORK_VERSION}" + MACOSX_FRAMEWORK_IDENTIFIER "org.libsdl.SDL3_test" + RESOURCE "${SDL_FRAMEWORK_RESOURCES}" + ) + endif() + endif() + target_link_libraries(SDL3_test PUBLIC $) + # FIXME: get rid of EXTRA_TEST_LIBS variable + target_link_libraries(SDL3_test PRIVATE ${EXTRA_TEST_LIBS}) + set_property(TARGET SDL3_test APPEND PROPERTY COMPATIBLE_INTERFACE_STRING "SDL_VERSION") + set_property(TARGET SDL3_test PROPERTY INTERFACE_SDL_VERSION "SDL${SDL3_VERSION_MAJOR}") +endif() + +##### Configure installation folders ##### + +if(WINDOWS AND NOT MINGW) + set(SDL_INSTALL_CMAKEDIR_ROOT_DEFAULT "cmake") +else() + set(SDL_INSTALL_CMAKEDIR_ROOT_DEFAULT "${CMAKE_INSTALL_LIBDIR}/cmake") +endif() +set(SDL_INSTALL_CMAKEDIR_ROOT "${SDL_INSTALL_CMAKEDIR_ROOT_DEFAULT}" CACHE STRING "Root folder where to install SDL3Config.cmake related files (SDL3 subfolder for MSVC projects)") + +if(FREEBSD) + # FreeBSD uses ${PREFIX}/libdata/pkgconfig + set(SDL_PKGCONFIG_INSTALLDIR "libdata/pkgconfig") +else() + set(SDL_PKGCONFIG_INSTALLDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig") +endif() + +if(WINDOWS AND NOT MINGW) + set(SDL_INSTALL_CMAKEDIR "${SDL_INSTALL_CMAKEDIR_ROOT}") + set(SDL_INSTALL_LICENSEDIR "licenses/SDL3") + set(SDL_INSTALL_HEADERSDIR "${CMAKE_INSTALL_INCLUDEDIR}/SDL3") +elseif(SDL_FRAMEWORK) + set(SDL_INSTALL_CMAKEDIR "SDL3.framework/Versions/${SDL_FRAMEWORK_VERSION}/Resources/CMake") + set(SDL_INSTALL_LICENSEDIR "Resources") + set(SDL_INSTALL_HEADERSDIR "Headers") +else() + set(SDL_INSTALL_CMAKEDIR "${SDL_INSTALL_CMAKEDIR_ROOT}/SDL3") + set(SDL_INSTALL_LICENSEDIR "${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME}") + set(SDL_INSTALL_HEADERSDIR "${CMAKE_INSTALL_INCLUDEDIR}/SDL3") +endif() + +if(SDL_FRAMEWORK) + set(SDL_SDL_INSTALL_RESOURCEDIR "SDL3.framework/Resources") + set(SDL_SDL_INSTALL_CMAKEDIR "${SDL_SDL_INSTALL_RESOURCEDIR}/CMake") + set(SDL_SDL_INSTALL_REAL_RESOURCEDIR "SDL3.framework/Versions/${SDL_FRAMEWORK_VERSION}/Resources") + set(SDL_SDL_INSTALL_REAL_CMAKEDIR "${SDL_SDL_INSTALL_REAL_RESOURCEDIR}/CMake") + + set(SDL_SDLtest_INSTALL_RESOURCEDIR "SDL3_test.framework/Resources") + set(SDL_SDLtest_INSTALL_CMAKEDIR "${SDL_SDLtest_INSTALL_RESOURCEDIR}/CMake") + set(SDL_SDLtest_INSTALL_CMAKEFILENAME "SDL3_testConfig.cmake") +else() + set(SDL_SDL_INSTALL_RESOURCEDIR ".") + set(SDL_SDL_INSTALL_CMAKEDIR ${SDL_INSTALL_CMAKEDIR}) + set(SDL_SDL_INSTALL_REAL_CMAKEDIR ${SDL_INSTALL_CMAKEDIR}) + + # Install SDL3*Targets.cmake files in lib/cmake/SDL3 + set(SDL_SDLstatic_INSTALL_RESOURCEDIR ".") + set(SDL_SDLstatic_INSTALL_CMAKEDIR "${SDL_SDL_INSTALL_CMAKEDIR}") + set(SDL_SDLstatic_INSTALL_CMAKEFILENAME "SDL3staticTargets.cmake") + + set(SDL_SDLtest_INSTALL_RESOURCEDIR ".") + set(SDL_SDLtest_INSTALL_CMAKEDIR "${SDL_SDL_INSTALL_CMAKEDIR}") + set(SDL_SDLtest_INSTALL_CMAKEFILENAME "SDL3testTargets.cmake") +endif() + +export(TARGETS SDL3_Headers NAMESPACE "SDL3::" FILE "SDL3headersTargets.cmake") + +if(SDL_SHARED) + export(TARGETS SDL3-shared NAMESPACE "SDL3::" FILE "SDL3sharedTargets.cmake") +endif() + +if(SDL_STATIC) + export(TARGETS SDL3-static NAMESPACE "SDL3::" FILE "SDL3staticTargets.cmake") +endif() + +if(SDL_TEST_LIBRARY) + export(TARGETS SDL3_test NAMESPACE "SDL3::" FILE "SDL3testTargets.cmake") +endif() + +sdl_cmake_config_find_pkg_config_commands(SDL_FIND_PKG_CONFIG_COMMANDS + COLLECTOR SDL3-collector + CONFIG_COMPONENT_FOUND_NAME SDL3_SDL3-static_FOUND +) +sdl_cmake_config_find_pkg_config_commands(SDL_TEST_FIND_PKG_CONFIG_COMMANDS + COLLECTOR SDL3_test-collector + CONFIG_COMPONENT_FOUND_NAME SDL3_SDL3_test_FOUND +) + +include(CMakePackageConfigHelpers) +configure_package_config_file(cmake/SDL3Config.cmake.in SDL3Config.cmake + PATH_VARS CMAKE_INSTALL_PREFIX + INSTALL_DESTINATION "${SDL_SDL_INSTALL_CMAKEDIR}" +) +write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/SDL3ConfigVersion.cmake" + COMPATIBILITY AnyNewerVersion +) + +sdl_cmake_config_required_modules(sdl_cmake_modules) +if(sdl_cmake_modules) + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${sdl_cmake_modules} "${SDL3_BINARY_DIR}") +endif() + +if(NOT SDL_DISABLE_INSTALL) + + ##### sdl3.pc ##### + configure_sdl3_pc() + if(NOT SDL_FRAMEWORK) + install(FILES ${SDL3_BINARY_DIR}/sdl3.pc DESTINATION "${SDL_PKGCONFIG_INSTALLDIR}") + endif() + + ##### Installation targets #####() + + install(TARGETS SDL3_Headers EXPORT SDL3headersTargets) + + if(SDL_SHARED) + install(TARGETS SDL3-shared EXPORT SDL3sharedTargets + PUBLIC_HEADER DESTINATION "${SDL_INSTALL_HEADERSDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + FRAMEWORK DESTINATION "." + RESOURCE DESTINATION "${SDL_SDL_INSTALL_RESOURCEDIR}" + ) + if(MSVC) + install(FILES $ DESTINATION "${CMAKE_INSTALL_BINDIR}" OPTIONAL) + endif() + endif() + + if(SDL_STATIC) + install(TARGETS SDL3-static EXPORT SDL3staticTargets + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + FRAMEWORK DESTINATION "." + RESOURCE DESTINATION "${SDL_SDLstatic_INSTALL_RESOURCEDIR}" + ) + endif() + + if(SDL_TEST_LIBRARY) + install(TARGETS SDL3_test EXPORT SDL3testTargets + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + FRAMEWORK DESTINATION "." + RESOURCE DESTINATION "${SDL_SDLtest_INSTALL_RESOURCEDIR}" + ) + endif() + + ##### Install CMake Targets ##### + + install(EXPORT SDL3headersTargets + FILE "SDL3headersTargets.cmake" + NAMESPACE SDL3:: + DESTINATION "${SDL_SDL_INSTALL_CMAKEDIR}" + ) + + if(SDL_SHARED) + install(EXPORT SDL3sharedTargets + FILE "SDL3sharedTargets.cmake" + NAMESPACE SDL3:: + DESTINATION "${SDL_SDL_INSTALL_CMAKEDIR}" + ) + endif() + + if(SDL_STATIC) + install(EXPORT SDL3staticTargets + FILE "${SDL_SDLstatic_INSTALL_CMAKEFILENAME}" + NAMESPACE SDL3:: + DESTINATION "${SDL_SDLstatic_INSTALL_CMAKEDIR}" + ) + endif() + + if(SDL_TEST_LIBRARY) + install(EXPORT SDL3testTargets + FILE "${SDL_SDLtest_INSTALL_CMAKEFILENAME}" + NAMESPACE SDL3:: + DESTINATION "${SDL_SDLtest_INSTALL_CMAKEDIR}" + ) + endif() + + install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/SDL3Config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/SDL3ConfigVersion.cmake + ${sdl_cmake_modules} + DESTINATION "${SDL_SDL_INSTALL_REAL_CMAKEDIR}" + ) + + if(NOT SDL_FRAMEWORK) + install(FILES ${SDL3_INCLUDE_FILES} + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/SDL3" + ) + if(SDL_TEST_LIBRARY) + install(FILES ${SDL3_TEST_INCLUDE_FILES} + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/SDL3" + ) + endif() + + install(FILES "LICENSE.txt" DESTINATION "${SDL_INSTALL_LICENSEDIR}") + endif() + + if(NOT SDL_DISABLE_INSTALL_CPACK) + if(SDL_FRAMEWORK) + set(CPACK_GENERATOR "DragNDrop") + elseif(MSVC) + set(CPACK_GENERATOR "ZIP") + else() + set(CPACK_GENERATOR "TGZ") + endif() + configure_file(cmake/CPackProjectConfig.cmake.in CPackProjectConfig.cmake @ONLY) + set(CPACK_PROJECT_CONFIG_FILE "${SDL3_BINARY_DIR}/CPackProjectConfig.cmake") + # CPACK_SOURCE_PACKAGE_FILE_NAME must end with "-src" (so we can block creating a source archive) + set(CPACK_SOURCE_PACKAGE_FILE_NAME "SDL${PROJECT_VERSION_MAJOR}-${PROJECT_VERSION}-src") + set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}/dist") + include(CPack) + endif() + + if(ANDROID) + set(SDL_INSTALL_JAVADIR "${CMAKE_INSTALL_DATAROOTDIR}/java" CACHE PATH "Path where to install java clases + java sources") + if(TARGET SDL3-jar) + install(FILES "${SDL3_BINARY_DIR}/SDL3.jar" "${SDL3_BINARY_DIR}/SDL3-${SDL3_VERSION}.jar" + DESTINATION "${SDL_INSTALL_JAVADIR}/SDL3") + endif() + if(TARGET SDL3-javasources) + install(FILES "${SDL3_BINARY_DIR}/SDL3-${SDL3_VERSION}-sources.jar" + DESTINATION "${SDL_INSTALL_JAVADIR}/SDL3") + endif() + endif() + + if(NOT SDL_DISABLE_INSTALL_DOCS) + SDL_generate_manpages( + HEADERS_DIR "${PROJECT_SOURCE_DIR}/include/SDL3" + SYMBOL "SDL_Init" + WIKIHEADERS_PL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/build-scripts/wikiheaders.pl" + REVISION "${SDL_REVISION}" + ) + if(TARGET SDL3-javadoc) + set(SDL_INSTALL_JAVADOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/javadoc" CACHE PATH "Path where to install SDL3 javadoc") + install(DIRECTORY "${SDL3_BINARY_DIR}/docs/javadoc/" + DESTINATION "${SDL_INSTALL_JAVADOCDIR}/SDL3") + endif() + endif() +endif() + +##### Uninstall target ##### + +if(NOT SDL_DISABLE_UNINSTALL) + if(NOT TARGET uninstall) + configure_file(cmake/cmake_uninstall.cmake.in cmake_uninstall.cmake IMMEDIATE @ONLY) + + add_custom_target(uninstall + COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") + endif() +endif() + +##### Tests subproject (must appear after the install/uninstall targets) ##### + +if(SDL_TESTS) + set(HAVE_TESTS ON) + enable_testing() + add_subdirectory(test) +endif() + +##### Fix Objective C builds ##### +string(APPEND CMAKE_OBJC_FLAGS " ${CMAKE_C_FLAGS}") + +SDL_PrintSummary() +debug_show_sdl_deps() diff --git a/vendor/sdl-3.0.0/CREDITS.txt b/vendor/sdl-3.0.0/CREDITS.txt new file mode 100644 index 0000000..3243318 --- /dev/null +++ b/vendor/sdl-3.0.0/CREDITS.txt @@ -0,0 +1,53 @@ + +Simple DirectMedia Layer CREDITS +Thanks to everyone who made this possible, including: + +* Cliff Matthews, for giving me a reason to start this project. :) + -- Executor rocks! *grin* + +* Ryan Gordon for helping everybody out and keeping the dream alive. :) + +* Gabriel Jacobo for his work on the Android port and generally helping out all around. + +* Philipp Wiesemann for his attention to detail reviewing the entire SDL code base and proposes patches. + +* Andreas Schiffler for his dedication to unit tests, Visual Studio projects, and managing the Google Summer of Code. + +* Mike Sartain for incorporating SDL into Team Fortress 2 and cheering me on at Valve. + +* Alfred Reynolds for the game controller API and general (in)sanity + +* Jørgen Tjernø for numerous magical macOS fixes. + +* Pierre-Loup Griffais for his deep knowledge of OpenGL drivers. + +* Julian Winter for the SDL 2.0 website. + +* Sheena Smith for many months of great work on the SDL wiki creating the API documentation and style guides. + +* Paul Hunkin for his port of SDL to Android during the Google Summer of Code 2010. + +* Eli Gottlieb for his work on shaped windows during the Google Summer of Code 2010. + +* Jim Grandpre for his work on multi-touch and gesture recognition during + the Google Summer of Code 2010. + +* Edgar "bobbens" Simo for his force feedback API development during the + Google Summer of Code 2008. + +* Aaron Wishnick for his work on audio resampling and pitch shifting during + the Google Summer of Code 2008. + +* Holmes Futrell for his port of SDL to the iPhone and iPod Touch during the + Google Summer of Code 2008. + +* Jon Atkins for SDL_image, SDL_mixer and SDL_net documentation. + +* Everybody at Loki Software, Inc. for their great contributions! + + And a big hand to everyone else who has contributed over the years. + +THANKS! :) + + -- Sam Lantinga + diff --git a/vendor/sdl-3.0.0/INSTALL.txt b/vendor/sdl-3.0.0/INSTALL.txt new file mode 100644 index 0000000..9faadeb --- /dev/null +++ b/vendor/sdl-3.0.0/INSTALL.txt @@ -0,0 +1,43 @@ + +To compile and install SDL: + + 1. Windows with Visual Studio: + * Read ./docs/README-visualc.md + + Windows building with mingw-w64 for x86: + * Run: cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=build-scripts/cmake-toolchain-mingw64-i686.cmake && cmake --build build && cmake --install build + + Windows building with mingw-w64 for x64: + * Run: cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=build-scripts/cmake-toolchain-mingw64-x86_64.cmake && cmake --build build && cmake --install build + + macOS with Xcode: + * Read docs/README-macos.md + + macOS from the command line: + * Run: cmake -S . -B build && cmake --build build && cmake --install build + + Linux and other UNIX systems: + * Run: cmake -S . -B build && cmake --build build && cmake --install build + + Android: + * Read docs/README-android.md + + iOS: + * Read docs/README-ios.md + + Using Cmake: + * Read docs/README-cmake.md + + 2. Look at the example programs in ./test, and check out the online + documentation at https://wiki.libsdl.org/ + + 3. Join the SDL developer discussions, sign up on + https://discourse.libsdl.org/ + and go to the development forum + https://discourse.libsdl.org/c/sdl-development/6 + + 4. Sign up for the announcement list through the web interface: + https://www.libsdl.org/mailing-list.php + +That's it! +Sam Lantinga diff --git a/vendor/sdl-3.0.0/LICENSE.txt b/vendor/sdl-3.0.0/LICENSE.txt new file mode 100644 index 0000000..83d8937 --- /dev/null +++ b/vendor/sdl-3.0.0/LICENSE.txt @@ -0,0 +1,18 @@ +Copyright (C) 1997-2023 Sam Lantinga + +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/vendor/sdl-3.0.0/README-SDL.txt b/vendor/sdl-3.0.0/README-SDL.txt new file mode 100644 index 0000000..2984b14 --- /dev/null +++ b/vendor/sdl-3.0.0/README-SDL.txt @@ -0,0 +1,13 @@ + +Please distribute this file with the SDL runtime environment: + +The Simple DirectMedia Layer (SDL for short) is a cross-platform library +designed to make it easy to write multi-media software, such as games +and emulators. + +The Simple DirectMedia Layer library source code is available from: +https://www.libsdl.org/ + +This library is distributed under the terms of the zlib license: +http://www.zlib.net/zlib_license.html + diff --git a/vendor/sdl-3.0.0/README.md b/vendor/sdl-3.0.0/README.md new file mode 100644 index 0000000..ce500fa --- /dev/null +++ b/vendor/sdl-3.0.0/README.md @@ -0,0 +1,18 @@ + +# Simple DirectMedia Layer (SDL) Version 3.0 + +https://www.libsdl.org/ + +Simple DirectMedia Layer is a cross-platform development library designed +to provide low level access to audio, keyboard, mouse, joystick, and graphics +hardware via OpenGL and Direct3D. It is used by video playback software, +emulators, and popular games including Valve's award winning catalog +and many Humble Bundle games. + +More extensive documentation is available in the docs directory, starting +with [README.md](docs/README.md). If you are migrating to SDL 3.0 from SDL 2.0, +the changes are extensively documented in [README-migration.md](docs/README-migration.md). + +Enjoy! + +Sam Lantinga (slouken@libsdl.org) diff --git a/vendor/sdl-3.0.0/TODO.txt b/vendor/sdl-3.0.0/TODO.txt new file mode 100644 index 0000000..20b205f --- /dev/null +++ b/vendor/sdl-3.0.0/TODO.txt @@ -0,0 +1,10 @@ +Future work roadmap: + * http://wiki.libsdl.org/Roadmap + + * Check 1.2 revisions: + 3554 - Need to resolve semantics for locking keys on different platforms + 4874 - Do we want screen rotation? At what level? + 4974 - Windows file code needs to convert UTF-8 to Unicode, but we don't need to tap dance for Windows 95/98 + 4865 - See if this is still needed (mouse coordinate clamping) + 4866 - See if this is still needed (blocking window repositioning) + diff --git a/vendor/sdl-3.0.0/VisualC-GDK/SDL.sln b/vendor/sdl-3.0.0/VisualC-GDK/SDL.sln new file mode 100644 index 0000000..2cdfa0b --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/SDL.sln @@ -0,0 +1,117 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.1.32414.318 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{D69D5741-611F-4E14-8541-1FEE94F50B5A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDL3", "SDL\SDL.vcxproj", "{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testsprite", "tests\testsprite\testsprite.vcxproj", "{40FB7794-D3C3-4CFE-BCF4-A80C96635682}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDL3_test", "SDL_test\SDL_test.vcxproj", "{DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testcontroller", "tests\testcontroller\testcontroller.vcxproj", "{55812185-D13C-4022-9C81-32E0F4A08305}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testgdk", "tests\testgdk\testgdk.vcxproj", "{1C9A3F71-35A5-4C56-B292-F4375B3C3649}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Gaming.Desktop.x64 = Debug|Gaming.Desktop.x64 + Debug|Gaming.Xbox.Scarlett.x64 = Debug|Gaming.Xbox.Scarlett.x64 + Debug|Gaming.Xbox.XboxOne.x64 = Debug|Gaming.Xbox.XboxOne.x64 + Release|Gaming.Desktop.x64 = Release|Gaming.Desktop.x64 + Release|Gaming.Xbox.Scarlett.x64 = Release|Gaming.Xbox.Scarlett.x64 + Release|Gaming.Xbox.XboxOne.x64 = Release|Gaming.Xbox.XboxOne.x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Gaming.Desktop.x64.ActiveCfg = Debug|Gaming.Desktop.x64 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Gaming.Desktop.x64.Build.0 = Debug|Gaming.Desktop.x64 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Gaming.Xbox.Scarlett.x64.ActiveCfg = Debug|Gaming.Xbox.Scarlett.x64 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Gaming.Xbox.Scarlett.x64.Build.0 = Debug|Gaming.Xbox.Scarlett.x64 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Gaming.Xbox.XboxOne.x64.ActiveCfg = Debug|Gaming.Xbox.XboxOne.x64 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Gaming.Xbox.XboxOne.x64.Build.0 = Debug|Gaming.Xbox.XboxOne.x64 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Gaming.Desktop.x64.ActiveCfg = Release|Gaming.Desktop.x64 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Gaming.Desktop.x64.Build.0 = Release|Gaming.Desktop.x64 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Gaming.Xbox.Scarlett.x64 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Gaming.Xbox.Scarlett.x64.Build.0 = Release|Gaming.Xbox.Scarlett.x64 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Gaming.Xbox.XboxOne.x64 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Gaming.Xbox.XboxOne.x64.Build.0 = Release|Gaming.Xbox.XboxOne.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Debug|Gaming.Desktop.x64.ActiveCfg = Debug|Gaming.Desktop.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Debug|Gaming.Desktop.x64.Build.0 = Debug|Gaming.Desktop.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Debug|Gaming.Desktop.x64.Deploy.0 = Debug|Gaming.Desktop.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Debug|Gaming.Xbox.Scarlett.x64.ActiveCfg = Debug|Gaming.Xbox.Scarlett.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Debug|Gaming.Xbox.Scarlett.x64.Build.0 = Debug|Gaming.Xbox.Scarlett.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Debug|Gaming.Xbox.Scarlett.x64.Deploy.0 = Debug|Gaming.Xbox.Scarlett.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Debug|Gaming.Xbox.XboxOne.x64.ActiveCfg = Debug|Gaming.Xbox.XboxOne.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Debug|Gaming.Xbox.XboxOne.x64.Build.0 = Debug|Gaming.Xbox.XboxOne.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Debug|Gaming.Xbox.XboxOne.x64.Deploy.0 = Debug|Gaming.Xbox.XboxOne.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Release|Gaming.Desktop.x64.ActiveCfg = Release|Gaming.Desktop.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Release|Gaming.Desktop.x64.Build.0 = Release|Gaming.Desktop.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Release|Gaming.Desktop.x64.Deploy.0 = Release|Gaming.Desktop.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Release|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Gaming.Xbox.Scarlett.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Release|Gaming.Xbox.Scarlett.x64.Build.0 = Release|Gaming.Xbox.Scarlett.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Release|Gaming.Xbox.Scarlett.x64.Deploy.0 = Release|Gaming.Xbox.Scarlett.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Release|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Gaming.Xbox.XboxOne.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Release|Gaming.Xbox.XboxOne.x64.Build.0 = Release|Gaming.Xbox.XboxOne.x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Release|Gaming.Xbox.XboxOne.x64.Deploy.0 = Release|Gaming.Xbox.XboxOne.x64 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Debug|Gaming.Desktop.x64.ActiveCfg = Debug|Gaming.Desktop.x64 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Debug|Gaming.Desktop.x64.Build.0 = Debug|Gaming.Desktop.x64 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Debug|Gaming.Xbox.Scarlett.x64.ActiveCfg = Debug|Gaming.Xbox.Scarlett.x64 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Debug|Gaming.Xbox.Scarlett.x64.Build.0 = Debug|Gaming.Xbox.Scarlett.x64 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Debug|Gaming.Xbox.XboxOne.x64.ActiveCfg = Debug|Gaming.Xbox.XboxOne.x64 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Debug|Gaming.Xbox.XboxOne.x64.Build.0 = Debug|Gaming.Xbox.XboxOne.x64 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Release|Gaming.Desktop.x64.ActiveCfg = Release|Gaming.Desktop.x64 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Release|Gaming.Desktop.x64.Build.0 = Release|Gaming.Desktop.x64 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Release|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Gaming.Xbox.Scarlett.x64 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Release|Gaming.Xbox.Scarlett.x64.Build.0 = Release|Gaming.Xbox.Scarlett.x64 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Release|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Gaming.Xbox.XboxOne.x64 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Release|Gaming.Xbox.XboxOne.x64.Build.0 = Release|Gaming.Xbox.XboxOne.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Debug|Gaming.Desktop.x64.ActiveCfg = Debug|Gaming.Desktop.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Debug|Gaming.Desktop.x64.Build.0 = Debug|Gaming.Desktop.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Debug|Gaming.Desktop.x64.Deploy.0 = Debug|Gaming.Desktop.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Debug|Gaming.Xbox.Scarlett.x64.ActiveCfg = Debug|Gaming.Xbox.Scarlett.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Debug|Gaming.Xbox.Scarlett.x64.Build.0 = Debug|Gaming.Xbox.Scarlett.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Debug|Gaming.Xbox.Scarlett.x64.Deploy.0 = Debug|Gaming.Xbox.Scarlett.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Debug|Gaming.Xbox.XboxOne.x64.ActiveCfg = Debug|Gaming.Xbox.XboxOne.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Debug|Gaming.Xbox.XboxOne.x64.Build.0 = Debug|Gaming.Xbox.XboxOne.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Debug|Gaming.Xbox.XboxOne.x64.Deploy.0 = Debug|Gaming.Xbox.XboxOne.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Release|Gaming.Desktop.x64.ActiveCfg = Release|Gaming.Desktop.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Release|Gaming.Desktop.x64.Build.0 = Release|Gaming.Desktop.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Release|Gaming.Desktop.x64.Deploy.0 = Release|Gaming.Desktop.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Release|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Gaming.Xbox.Scarlett.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Release|Gaming.Xbox.Scarlett.x64.Build.0 = Release|Gaming.Xbox.Scarlett.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Release|Gaming.Xbox.Scarlett.x64.Deploy.0 = Release|Gaming.Xbox.Scarlett.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Release|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Gaming.Xbox.XboxOne.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Release|Gaming.Xbox.XboxOne.x64.Build.0 = Release|Gaming.Xbox.XboxOne.x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Release|Gaming.Xbox.XboxOne.x64.Deploy.0 = Release|Gaming.Xbox.XboxOne.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Debug|Gaming.Desktop.x64.ActiveCfg = Debug|Gaming.Desktop.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Debug|Gaming.Desktop.x64.Build.0 = Debug|Gaming.Desktop.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Debug|Gaming.Desktop.x64.Deploy.0 = Debug|Gaming.Desktop.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Debug|Gaming.Xbox.Scarlett.x64.ActiveCfg = Debug|Gaming.Xbox.Scarlett.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Debug|Gaming.Xbox.Scarlett.x64.Build.0 = Debug|Gaming.Xbox.Scarlett.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Debug|Gaming.Xbox.Scarlett.x64.Deploy.0 = Debug|Gaming.Xbox.Scarlett.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Debug|Gaming.Xbox.XboxOne.x64.ActiveCfg = Debug|Gaming.Xbox.XboxOne.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Debug|Gaming.Xbox.XboxOne.x64.Build.0 = Debug|Gaming.Xbox.XboxOne.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Debug|Gaming.Xbox.XboxOne.x64.Deploy.0 = Debug|Gaming.Xbox.XboxOne.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Release|Gaming.Desktop.x64.ActiveCfg = Release|Gaming.Desktop.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Release|Gaming.Desktop.x64.Build.0 = Release|Gaming.Desktop.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Release|Gaming.Desktop.x64.Deploy.0 = Release|Gaming.Desktop.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Release|Gaming.Xbox.Scarlett.x64.ActiveCfg = Release|Gaming.Xbox.Scarlett.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Release|Gaming.Xbox.Scarlett.x64.Build.0 = Release|Gaming.Xbox.Scarlett.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Release|Gaming.Xbox.Scarlett.x64.Deploy.0 = Release|Gaming.Xbox.Scarlett.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Release|Gaming.Xbox.XboxOne.x64.ActiveCfg = Release|Gaming.Xbox.XboxOne.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Release|Gaming.Xbox.XboxOne.x64.Build.0 = Release|Gaming.Xbox.XboxOne.x64 + {1C9A3F71-35A5-4C56-B292-F4375B3C3649}.Release|Gaming.Xbox.XboxOne.x64.Deploy.0 = Release|Gaming.Xbox.XboxOne.x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {40FB7794-D3C3-4CFE-BCF4-A80C96635682} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {55812185-D13C-4022-9C81-32E0F4A08305} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {1C9A3F71-35A5-4C56-B292-F4375B3C3649} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {C320C9F2-1A8F-41D7-B02B-6338F872BCAD} + EndGlobalSection +EndGlobal diff --git a/vendor/sdl-3.0.0/VisualC-GDK/SDL/SDL.vcxproj b/vendor/sdl-3.0.0/VisualC-GDK/SDL/SDL.vcxproj new file mode 100644 index 0000000..70b625b --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/SDL/SDL.vcxproj @@ -0,0 +1,802 @@ + + + + + Debug + Gaming.Desktop.x64 + + + Debug + Gaming.Xbox.Scarlett.x64 + + + Debug + Gaming.Xbox.XboxOne.x64 + + + Release + Gaming.Desktop.x64 + + + Release + Gaming.Xbox.Scarlett.x64 + + + Release + Gaming.Xbox.XboxOne.x64 + + + + SDL3 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68} + SDL + 10.0 + + + + DynamicLibrary + $(DefaultPlatformToolset) + + + DynamicLibrary + $(DefaultPlatformToolset) + + + DynamicLibrary + $(DefaultPlatformToolset) + + + DynamicLibrary + $(DefaultPlatformToolset) + + + DynamicLibrary + $(DefaultPlatformToolset) + + + DynamicLibrary + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + $(SolutionDir)/../src;$(IncludePath) + + + $(SolutionDir)/../src;$(IncludePath) + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + .\Debug/SDL.tlb + + + Disabled + $(ProjectDir)\..\..\include;$(ProjectDir)\..\..\src;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + DLL_EXPORT;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + Level3 + OldStyle + OnlyExplicitInline + true + Use + SDL_internal.h + + + _DEBUG;%(PreprocessorDefinitions) + + + setupapi.lib;winmm.lib;imm32.lib;version.lib;xgameruntime.lib;vcruntimed.lib;msvcrtd.lib;ucrtd.lib;msvcprtd.lib;%(AdditionalDependencies) + true + Windows + true + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + .\Debug/SDL.tlb + + + Disabled + $(ProjectDir)\..\..\include;$(ProjectDir)\..\..\src;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + DLL_EXPORT;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + Level3 + OldStyle + OnlyExplicitInline + true + + + _DEBUG;%(PreprocessorDefinitions) + + + setupapi.lib;winmm.lib;imm32.lib;version.lib;xgameruntime.lib;d3d12_xs.lib;uuid.lib;vcruntimed.lib;msvcrtd.lib;ucrtd.lib;msvcprtd.lib;%(AdditionalDependencies) + true + Windows + true + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + .\Debug/SDL.tlb + + + Disabled + $(ProjectDir)\..\..\include;$(ProjectDir)\..\..\src;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + DLL_EXPORT;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + Level3 + OldStyle + OnlyExplicitInline + true + + + _DEBUG;%(PreprocessorDefinitions) + + + setupapi.lib;winmm.lib;imm32.lib;version.lib;xgameruntime.lib;d3d12_x.lib;uuid.lib;vcruntimed.lib;msvcrtd.lib;ucrtd.lib;msvcprtd.lib;%(AdditionalDependencies) + true + Windows + true + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + .\Release/SDL.tlb + + + $(ProjectDir)\..\..\include;$(ProjectDir)\..\..\src;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + DLL_EXPORT;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + Level3 + ProgramDatabase + OnlyExplicitInline + true + Use + SDL_internal.h + + + NDEBUG;%(PreprocessorDefinitions) + + + setupapi.lib;winmm.lib;imm32.lib;version.lib;xgameruntime.lib;vcruntime.lib;msvcrt.lib;ucrt.lib;msvcprt.lib;%(AdditionalDependencies) + true + Windows + true + true + true + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + .\Release/SDL.tlb + + + $(ProjectDir)\..\..\include;$(ProjectDir)\..\..\src;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + DLL_EXPORT;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + Level3 + ProgramDatabase + OnlyExplicitInline + true + + + NDEBUG;%(PreprocessorDefinitions) + + + setupapi.lib;winmm.lib;imm32.lib;version.lib;xgameruntime.lib;d3d12_xs.lib;uuid.lib;vcruntime.lib;msvcrt.lib;ucrt.lib;msvcprt.lib;%(AdditionalDependencies) + true + Windows + true + true + true + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + .\Release/SDL.tlb + + + $(ProjectDir)\..\..\include;$(ProjectDir)\..\..\src;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + DLL_EXPORT;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + Level3 + ProgramDatabase + OnlyExplicitInline + true + + + NDEBUG;%(PreprocessorDefinitions) + + + setupapi.lib;winmm.lib;imm32.lib;version.lib;xgameruntime.lib;d3d12_x.lib;uuid.lib;vcruntime.lib;msvcrt.lib;ucrt.lib;msvcprt.lib;%(AdditionalDependencies) + true + Windows + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + Create + Create + + + Create + $(IntDir)$(TargetName)_cpp.pch + Create + $(IntDir)$(TargetName)_cpp.pch + + + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CompileAsCpp + CompileAsCpp + CompileAsCpp + CompileAsCpp + stdcpp17 + stdcpp17 + stdcpp17 + stdcpp17 + + + + NotUsing + NotUsing + + + + + + + + + + + + + + + + + CompileAsCpp + CompileAsCpp + CompileAsCpp + CompileAsCpp + stdcpp17 + stdcpp17 + stdcpp17 + stdcpp17 + + + stdcpp17 + stdcpp17 + stdcpp17 + stdcpp17 + CompileAsCpp + CompileAsCpp + CompileAsCpp + CompileAsCpp + + + + + + + + + + + + + + + + + + + + + + + + + + + CompileAsCpp + CompileAsCpp + CompileAsCpp + CompileAsCpp + stdcpp17 + stdcpp17 + stdcpp17 + stdcpp17 + + + + stdcpp17 + stdcpp17 + stdcpp17 + stdcpp17 + CompileAsCpp + CompileAsCpp + CompileAsCpp + CompileAsCpp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CompileAsCpp + CompileAsCpp + CompileAsCpp + CompileAsCpp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NotUsing + + + + + + + + + + + + + + + + + + + + + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/sdl-3.0.0/VisualC-GDK/SDL/SDL.vcxproj.filters b/vendor/sdl-3.0.0/VisualC-GDK/SDL/SDL.vcxproj.filters new file mode 100644 index 0000000..a530ef1 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/SDL/SDL.vcxproj.filters @@ -0,0 +1,1425 @@ + + + + + {395b3af0-33d0-411b-b153-de1676bf1ef8} + + + {5a3e3167-75be-414f-8947-a5306df372b2} + + + {546d9ed1-988e-49d3-b1a5-e5b3d19de6c1} + + + {a56247ff-5108-4960-ba6a-6814fd1554ec} + + + {8880dfad-2a06-4e84-ab6e-6583641ad2d1} + + + {2b996a7f-f3e9-4300-a97f-2c907bcd89a9} + + + {5713d682-2bc7-4da4-bcf0-262a98f142eb} + + + {5e27e19f-b3f8-4e2d-b323-b00b2040ec86} + + + {a3ab9cff-8495-4a5c-8af6-27e43199a712} + + + {377061e4-3856-4f05-b916-0d3b360df0f6} + + + {226a6643-1c65-4c7f-92aa-861313d974bb} + + + {ef859522-a7fe-4a00-a511-d6a9896adf5b} + + + {01fd2642-4493-4316-b548-fb829f4c9125} + + + {cce7558f-590a-4f0a-ac0d-e579f76e588e} + + + {7a53c9e4-d4bd-40ed-9265-1625df685121} + + + {4c7a051c-ce7c-426c-bf8c-9187827f9052} + + + {97e2f79f-311b-42ea-81b2-e801649fdd93} + + + {baf97c8c-7e90-41e5-bff8-14051b8d3956} + + + {45e50d3a-56c9-4352-b811-0c60c49a2431} + + + {9d86e0ef-d6f6-4db2-bfc5-b3529406fa8d} + + + {b35fa13c-6ed2-4680-8c56-c7d71b76ceab} + + + {61b61b31-9e26-4171-a3bb-b969f1889726} + + + {f63aa216-6ee7-4143-90d3-32be3787f276} + + + {90bee923-89df-417f-a6c3-3e260a7dd54d} + + + {4c8ad943-c2fb-4014-9ca3-041e0ad08426} + + + {3d68ae70-a9ff-46cf-be69-069f0b02aca0} + + + {ebc2fca3-3c26-45e3-815e-3e0581d5e226} + + + {47c445a2-7014-4e15-9660-7c89a27dddcf} + + + {d008487d-6ed0-4251-848b-79a68e3c1459} + + + {c9e8273e-13ae-47dc-bef8-8ad8e64c9a3d} + + + {0b8e136d-56ae-47e7-9981-e863a57ac616} + + + {bf3febd3-9328-43e8-b196-0fd3be8177dd} + + + {1a62dc68-52d2-4c07-9d81-d94dfe1d0d12} + + + {e9f01b22-34b3-4380-ade6-0e96c74e9c90} + + + {f674f22f-7841-4f3a-974e-c36b2d4823fc} + + + {d7ad92de-4e55-4202-9b2b-1bd9a35fe4dc} + + + {8311d79d-9ad5-4369-99fe-b2fb2659d402} + + + {6c4dfb80-fdf9-497c-a6ff-3cd8f22efde9} + + + {4810e35c-33cb-4da2-bfaf-452da20d3c9a} + + + {2cf93f1d-81fd-4bdc-998c-5e2fa43988bc} + + + {5752b7ab-2344-4f38-95ab-b5d3bc150315} + + + {7a0eae3d-f113-4914-b926-6816d1929250} + + + {ee602cbf-96a2-4b0b-92a9-51d38a727411} + + + {a812185b-9060-4a1c-8431-be4f66894626} + + + {31c16cdf-adc4-4950-8293-28ba530f3882} + + + {add61b53-8144-47d6-bd67-3420a87c4905} + + + {e7cdcf36-b462-49c7-98b7-07ea7b3687f4} + + + {82588eef-dcaa-4f69-b2a9-e675940ce54c} + + + {560239c3-8fa1-4d23-a81a-b8408b2f7d3f} + + + {81711059-7575-4ece-9e68-333b63e992c4} + + + {1e44970f-7535-4bfb-b8a5-ea0cea0349e0} + + + {1dd91224-1176-492b-a2cb-e26153394db0} + + + {e3ecfe50-cf22-41d3-8983-2fead5164b47} + + + {5521d22f-1e52-47a6-8c52-06a3b6bdefd7} + + + {4755f3a6-49ac-46d6-86be-21f5c21f2197} + + + {f48c2b17-1bee-4fec-a7c8-24cf619abe08} + + + {3ab60a46-e18e-450a-a916-328fb8547e59} + + + {3ad16a8a-0ed8-439c-a771-383af2e2867f} + + + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + + + + API Headers + + + API Headers + + + API Headers + + + audio + + + audio + + + audio + + + audio + + + audio + + + audio + + + core\windows + + + core\windows + + + core\windows + + + core\windows + + + core\windows + + + dynapi + + + dynapi + + + dynapi + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + haptic + + + haptic + + + joystick + + + joystick + + + joystick + + + joystick + + + joystick + + + joystick + + + libm + + + libm + + + hidapi\hidapi + + + locale + + + misc + + + audio\directsound + + + audio\disk + + + audio\dummy + + + audio\wasapi + + + haptic\windows + + + haptic\windows + + + haptic\windows + + + joystick\hidapi + + + joystick\hidapi + + + joystick\windows + + + joystick\windows + + + joystick\windows + + + joystick\windows + + + joystick\virtual + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video\dummy + + + video\dummy + + + video\dummy + + + video\yuv2rgb + + + video\yuv2rgb + + + video\yuv2rgb + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + timer + + + thread + + + thread + + + thread\windows + + + thread\windows + + + thread\generic + + + sensor + + + sensor + + + sensor\dummy + + + sensor\windows + + + render + + + render + + + render + + + render\direct3d + + + render\direct3d11 + + + render\opengl + + + render\opengl + + + render\opengles2 + + + render\opengles2 + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + power + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + + + + + + render\direct3d12 + + + + core\gdk + + + render\direct3d12 + + + video\gdk + + + thread\generic + + + + + + + + + + + + + + + audio + + + audio + + + audio + + + audio + + + audio + + + audio + + + audio + + + audio + + + atomic + + + atomic + + + core + + + core + + + core\windows + + + core\windows + + + core\windows + + + core\windows + + + cpuinfo + + + dynapi + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + file + + + filesystem\gdk + + + haptic + + + hidapi + + + joystick + + + joystick + + + joystick + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + loadso\windows + + + misc + + + misc\windows + + + locale\windows + + + locale + + + audio\directsound + + + audio\disk + + + audio\dummy + + + audio\wasapi + + + audio\wasapi + + + haptic\windows + + + haptic\windows + + + haptic\windows + + + haptic\dummy + + + joystick\dummy + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\windows + + + joystick\windows + + + joystick\windows + + + joystick\windows + + + joystick\windows + + + joystick\virtual + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video\dummy + + + video\dummy + + + video\dummy + + + video\yuv2rgb + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + timer + + + timer\windows + + + thread + + + thread\windows + + + thread\windows + + + thread\windows + + + thread\windows + + + thread\windows + + + thread\generic + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + sensor + + + sensor\dummy + + + sensor\windows + + + render + + + render + + + render + + + render + + + render\direct3d + + + render\direct3d + + + render\direct3d11 + + + render\direct3d11 + + + render\opengl + + + render\opengl + + + render\opengles2 + + + render\opengles2 + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + power + + + + power\windows + + + render\direct3d12 + + + render\direct3d12 + + + stdlib + + + stdlib + + + core\gdk + + + render\direct3d12 + + + render\direct3d12 + + + render\direct3d12 + + + core\windows + + + core\windows + + + video\gdk + + + thread\windows + + + thread\generic + + + + + + diff --git a/vendor/sdl-3.0.0/VisualC-GDK/SDL_test/SDL_test.vcxproj b/vendor/sdl-3.0.0/VisualC-GDK/SDL_test/SDL_test.vcxproj new file mode 100644 index 0000000..136a461 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/SDL_test/SDL_test.vcxproj @@ -0,0 +1,209 @@ + + + + + Debug + Gaming.Desktop.x64 + + + Debug + Gaming.Xbox.Scarlett.x64 + + + Debug + Gaming.Xbox.XboxOne.x64 + + + Release + Gaming.Desktop.x64 + + + Release + Gaming.Xbox.Scarlett.x64 + + + Release + Gaming.Xbox.XboxOne.x64 + + + + SDL3_test + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A} + SDL_test + 10.0 + + + + StaticLibrary + $(DefaultPlatformToolset) + + + StaticLibrary + $(DefaultPlatformToolset) + + + StaticLibrary + $(DefaultPlatformToolset) + + + StaticLibrary + $(DefaultPlatformToolset) + + + StaticLibrary + $(DefaultPlatformToolset) + + + StaticLibrary + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + + + $(ProjectDir)/../../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MultiThreadedDLL + false + Level3 + OldStyle + true + + + + + + $(ProjectDir)/../../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MultiThreadedDLL + false + Level3 + OldStyle + true + + + + + + $(ProjectDir)/../../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MultiThreadedDLL + false + Level3 + OldStyle + true + + + + + + Disabled + $(ProjectDir)/../../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + false + Level3 + OldStyle + true + + + + + + Disabled + $(ProjectDir)/../../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + false + Level3 + OldStyle + true + + + + + + Disabled + $(ProjectDir)/../../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + false + Level3 + OldStyle + true + + + + + + + + + + + + + + + + + + + diff --git a/vendor/sdl-3.0.0/VisualC-GDK/clean.sh b/vendor/sdl-3.0.0/VisualC-GDK/clean.sh new file mode 100644 index 0000000..a026b71 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/clean.sh @@ -0,0 +1,6 @@ +#!/bin/sh +find . -type f \( -name '*.user' -o -name '*.sdf' -o -name '*.ncb' -o -name '*.suo' \) -print -delete +find . -type f \( -name '*.bmp' -o -name '*.wav' -o -name '*.dat' \) -print -delete +find . -depth -type d \( -name Gaming.Desktop.x64 \) -exec rm -rv {} \; +find . -depth -type d \( -name Gaming.Xbox.Scarlett.x64 \) -exec rm -rv {} \; +find . -depth -type d \( -name Gaming.Xbox.XboxOne.x64 \) -exec rm -rv {} \; diff --git a/vendor/sdl-3.0.0/VisualC-GDK/logos/Logo100x100.png b/vendor/sdl-3.0.0/VisualC-GDK/logos/Logo100x100.png new file mode 100644 index 0000000000000000000000000000000000000000..2d0333dbd273699a1513b8d2afaa40555bff986b GIT binary patch literal 10832 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 literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/VisualC-GDK/logos/Logo150x150.png b/vendor/sdl-3.0.0/VisualC-GDK/logos/Logo150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..046a8fb142c1bd3c161f5640e534c3215a348103 GIT binary patch literal 12709 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 literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/VisualC-GDK/logos/Logo44x44.png b/vendor/sdl-3.0.0/VisualC-GDK/logos/Logo44x44.png new file mode 100644 index 0000000000000000000000000000000000000000..3ca25b565e0073f90af055eb44e449cf42aec262 GIT binary patch literal 7460 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 iL=s6Pkwg-oUHli9?UpW?NmoYz0000 literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/VisualC-GDK/logos/Logo480x480.png b/vendor/sdl-3.0.0/VisualC-GDK/logos/Logo480x480.png new file mode 100644 index 0000000000000000000000000000000000000000..11231500eb28e235b4b344ef60b4080c6bd38a52 GIT binary patch literal 28677 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 literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/VisualC-GDK/logos/SplashScreenImage.png b/vendor/sdl-3.0.0/VisualC-GDK/logos/SplashScreenImage.png new file mode 100644 index 0000000000000000000000000000000000000000..def578f665e3ae62954bc864dd7f564641866681 GIT binary patch literal 6599 zcmeAS@N?(olHy`uVBq!ia0y~yU~gbxV6os}0*a(>3=?5sU~J8Fb`J1#c2+1T%1_J8 zNo8Qrm{>c}*5h!1NUMKvwyPGOn4sXvfVnyyT^3%V-3be~h(?tfRKD!Lutd?buuvq1 zo9~}am~70P($WG^mV@#F?&|8U;+h}#ExDj{jD7m|!h6>3zuz&pRLxwOcHCk?*0hOT z$B*RXx$^8=Bz!o8@r(DFE5a{Zd2Fst!-~CDFeRcghIn{il1L{KOjqYyfxZb(k zTzBqgyTTb$Ra$?{sW`KMty6xd-tIrgcD~qf!1%D6nyI^tnpk(P&UQm>Nv)3}g)V`n zr^GkuY0ueivHGc2_P3Mq5~s3HXRZt8RqS(Bnb5)^8Je?zhdc0=X^_v77dFox%9s4{ zEIRq*7K8F}8?69E%eoKtKWw8n8(2P6YfW-^aCDo!Tf+mr3oCAZ`@S*P+>hbEalz89 zf2LX)eD;a={8N4u7utUmCR&)~xn@3to%by^Dp819{aF}uj&zV3y+ugeuddDee=qagdv@!uMH9a^ec20)7tR8Y$YKTtJ!KGP ztXOJa1{7p3@$_|Nf5s-q#>Oe(@?EZzkx!g~L41R!i(^Q|tv3f58G%|FCj49fjsuh&M!{$ZjE2By2#kinXb6mkz-S1J zhQMeDjE2By2#kinXb6mkz_1R1hTF}|LLeVH{*V8z95Sr^I_kO65Eu=C(GVC7fzc2c c3L&tA^Xo1KMnOeOSCDHxUHx3vIVCg!0PLmbtpET3 literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/PackageLayout.xml b/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/PackageLayout.xml new file mode 100644 index 0000000..2fc9a76 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/PackageLayout.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/testcontroller.vcxproj b/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/testcontroller.vcxproj new file mode 100644 index 0000000..3f01561 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/testcontroller.vcxproj @@ -0,0 +1,333 @@ + + + + + Debug + Gaming.Desktop.x64 + + + Debug + Gaming.Xbox.Scarlett.x64 + + + Debug + Gaming.Xbox.XboxOne.x64 + + + Release + Gaming.Desktop.x64 + + + Release + Gaming.Xbox.Scarlett.x64 + + + Release + Gaming.Xbox.XboxOne.x64 + + + + {55812185-D13C-4022-9C81-32E0F4A08305} + testcontroller + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + true + + + Application + $(DefaultPlatformToolset) + true + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + .\Release/testcontroller.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + xgameruntime.lib;../Microsoft.Xbox.Services.141.GDK.C.Thunks.lib;%(AdditionalDependencies) + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + .\Release/testcontroller.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + xgameruntime.lib;%(AdditionalDependencies) + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + .\Release/testcontroller.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + xgameruntime.lib;%(AdditionalDependencies) + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + .\Debug/testcontroller.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + xgameruntime.lib;../Microsoft.Xbox.Services.141.GDK.C.Thunks.lib;%(AdditionalDependencies) + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + .\Debug/testcontroller.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + xgameruntime.lib;%(AdditionalDependencies) + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + .\Debug/testcontroller.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + xgameruntime.lib;%(AdditionalDependencies) + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + + + + + + + + Document + true + true + true + true + + + + + + + + + + + + + + Document + true + true + true + true + + + + + Document + true + true + true + true + + + + + Document + true + true + true + true + + + + + + + + + diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/testcontroller.vcxproj.filters b/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/testcontroller.vcxproj.filters new file mode 100644 index 0000000..e4e2413 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/testcontroller.vcxproj.filters @@ -0,0 +1,52 @@ + + + + + + + + + + logos + + + logos + + + logos + + + logos + + + wingdk + + + wingdk + + + xboxseries + + + xboxone + + + logos + + + + + + {5e858cf0-6fba-498d-b33d-11c8ecbb79c7} + + + {5790a250-283e-4f51-8f28-6a977d3c7a6c} + + + {a4d235e4-4017-4193-af62-ecb2ac249be4} + + + {e704dcb9-c83c-4c94-a139-b0f3e3f428f2} + + + diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/wingdk/MicrosoftGame.config b/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/wingdk/MicrosoftGame.config new file mode 100644 index 0000000..162624a --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/wingdk/MicrosoftGame.config @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + PleaseChangeMe + FFFFFFFF + + + diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/xboxone/MicrosoftGame.config b/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/xboxone/MicrosoftGame.config new file mode 100644 index 0000000..9d908c9 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/xboxone/MicrosoftGame.config @@ -0,0 +1,29 @@ + + + + + + + + + + + + PleaseChangeMe + FFFFFFFF + + + diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/xboxseries/MicrosoftGame.config b/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/xboxseries/MicrosoftGame.config new file mode 100644 index 0000000..6d1829b --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testcontroller/xboxseries/MicrosoftGame.config @@ -0,0 +1,29 @@ + + + + + + + + + + + + PleaseChangeMe + FFFFFFFF + + + diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/PackageLayout.xml b/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/PackageLayout.xml new file mode 100644 index 0000000..abee981 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/PackageLayout.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/src/testgdk.cpp b/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/src/testgdk.cpp new file mode 100644 index 0000000..1a962a4 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/src/testgdk.cpp @@ -0,0 +1,503 @@ +/* + Copyright (C) 1997-2023 Sam Lantinga + + 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. +*/ +/* testgdk: Basic tests of using task queue/xbl (with simple drawing) in GDK. + * NOTE: As of June 2022 GDK, login will only work if MicrosoftGame.config is + * configured properly. See README-gdk.md. + */ + +#include +#include +#include + +#include +#include +#include "../src/core/windows/SDL_windows.h" +#include + +extern "C" { +#include "../test/testutils.h" +} + +#include + +#define NUM_SPRITES 100 +#define MAX_SPEED 1 + +static SDLTest_CommonState *state; +static int num_sprites; +static SDL_Texture **sprites; +static SDL_bool cycle_color; +static SDL_bool cycle_alpha; +static int cycle_direction = 1; +static int current_alpha = 0; +static int current_color = 0; +static int sprite_w, sprite_h; +static SDL_BlendMode blendMode = SDL_BLENDMODE_BLEND; + +int done; + +static struct +{ + SDL_AudioSpec spec; + Uint8 *sound; /* Pointer to wave data */ + Uint32 soundlen; /* Length of wave data */ + int soundpos; /* Current play position */ +} wave; + +static SDL_AudioDeviceID device; + +static void +close_audio() +{ + if (device != 0) { + SDL_CloseAudioDevice(device); + device = 0; + } +} + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_free(sprites); + close_audio(); + SDL_free(wave.sound); + SDLTest_CommonQuit(state); + /* If rc is 0, just let main return normally rather than calling exit. + * This allows testing of platforms where SDL_main is required and does meaningful cleanup. + */ + if (rc != 0) { + exit(rc); + } +} + +static void +open_audio() +{ + /* Initialize fillerup() variables */ + device = SDL_OpenAudioDevice(NULL, SDL_FALSE, &wave.spec, NULL, 0); + if (!device) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open audio: %s\n", SDL_GetError()); + SDL_free(wave.sound); + quit(2); + } + + /* Let the audio run */ + SDL_PlayAudioDevice(device); +} + +static void +reopen_audio() +{ + close_audio(); + open_audio(); +} + +void SDLCALL +fillerup(void *unused, Uint8 *stream, int len) +{ + Uint8 *waveptr; + int waveleft; + + /* Set up the pointers */ + waveptr = wave.sound + wave.soundpos; + waveleft = wave.soundlen - wave.soundpos; + + /* Go! */ + while (waveleft <= len) { + SDL_memcpy(stream, waveptr, waveleft); + stream += waveleft; + len -= waveleft; + waveptr = wave.sound; + waveleft = wave.soundlen; + wave.soundpos = 0; + } + SDL_memcpy(stream, waveptr, len); + wave.soundpos += len; +} + +void +UserLoggedIn(XUserHandle user) +{ + HRESULT hr; + char gamertag[128]; + hr = XUserGetGamertag(user, XUserGamertagComponent::UniqueModern, sizeof(gamertag), gamertag, NULL); + + if (SUCCEEDED(hr)) { + SDL_Log("User logged in: %s", gamertag); + } else { + SDL_Log("[GDK] UserLoggedIn -- XUserGetGamertag failed: 0x%08x.", hr); + } + + XUserCloseHandle(user); +} + +void +AddUserUICallback(XAsyncBlock *asyncBlock) +{ + HRESULT hr; + XUserHandle user = NULL; + + hr = XUserAddResult(asyncBlock, &user); + if (SUCCEEDED(hr)) { + uint64_t userId; + + hr = XUserGetId(user, &userId); + if (FAILED(hr)) { + /* If unable to get the user ID, it means the account is banned, etc. */ + SDL_Log("[GDK] AddUserSilentCallback -- XUserGetId failed: 0x%08x.", hr); + XUserCloseHandle(user); + + /* Per the docs, likely should call XUserResolveIssueWithUiAsync here. */ + } else { + UserLoggedIn(user); + } + } else { + SDL_Log("[GDK] AddUserUICallback -- XUserAddAsync failed: 0x%08x.", hr); + } + + delete asyncBlock; +} + +void +AddUserUI() +{ + HRESULT hr; + XAsyncBlock *asyncBlock = new XAsyncBlock; + + asyncBlock->context = NULL; + asyncBlock->queue = NULL; /* A null queue will use the global process task queue */ + asyncBlock->callback = &AddUserUICallback; + + hr = XUserAddAsync(XUserAddOptions::None, asyncBlock); + + if (FAILED(hr)) { + delete asyncBlock; + SDL_Log("[GDK] AddUserSilent -- failed: 0x%08x", hr); + } +} + +void +AddUserSilentCallback(XAsyncBlock *asyncBlock) +{ + HRESULT hr; + XUserHandle user = NULL; + + hr = XUserAddResult(asyncBlock, &user); + if (SUCCEEDED(hr)) { + uint64_t userId; + + hr = XUserGetId(user, &userId); + if (FAILED(hr)) { + /* If unable to get the user ID, it means the account is banned, etc. */ + SDL_Log("[GDK] AddUserSilentCallback -- XUserGetId failed: 0x%08x. Trying with UI.", hr); + XUserCloseHandle(user); + AddUserUI(); + } else { + UserLoggedIn(user); + } + } else { + SDL_Log("[GDK] AddUserSilentCallback -- XUserAddAsync failed: 0x%08x. Trying with UI.", hr); + AddUserUI(); + } + + delete asyncBlock; +} + +void +AddUserSilent() +{ + HRESULT hr; + XAsyncBlock *asyncBlock = new XAsyncBlock; + + asyncBlock->context = NULL; + asyncBlock->queue = NULL; /* A null queue will use the global process task queue */ + asyncBlock->callback = &AddUserSilentCallback; + + hr = XUserAddAsync(XUserAddOptions::AddDefaultUserSilently, asyncBlock); + + if (FAILED(hr)) { + delete asyncBlock; + SDL_Log("[GDK] AddUserSilent -- failed: 0x%08x", hr); + } +} + +int +LoadSprite(const char *file) +{ + int i; + + for (i = 0; i < state->num_windows; ++i) { + /* This does the SDL_LoadBMP step repeatedly, but that's OK for test code. */ + sprites[i] = LoadTexture(state->renderers[i], file, SDL_TRUE, &sprite_w, &sprite_h); + if (!sprites[i]) { + return -1; + } + if (SDL_SetTextureBlendMode(sprites[i], blendMode) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set blend mode: %s\n", SDL_GetError()); + SDL_DestroyTexture(sprites[i]); + return -1; + } + } + + /* We're ready to roll. :) */ + return 0; +} + +void +DrawSprites(SDL_Renderer * renderer, SDL_Texture * sprite) +{ + SDL_Rect viewport; + SDL_FRect temp; + + /* Query the sizes */ + SDL_GetRenderViewport(renderer, &viewport); + + /* Cycle the color and alpha, if desired */ + if (cycle_color) { + current_color += cycle_direction; + if (current_color < 0) { + current_color = 0; + cycle_direction = -cycle_direction; + } + if (current_color > 255) { + current_color = 255; + cycle_direction = -cycle_direction; + } + SDL_SetTextureColorMod(sprite, 255, (Uint8) current_color, + (Uint8) current_color); + } + if (cycle_alpha) { + current_alpha += cycle_direction; + if (current_alpha < 0) { + current_alpha = 0; + cycle_direction = -cycle_direction; + } + if (current_alpha > 255) { + current_alpha = 255; + cycle_direction = -cycle_direction; + } + SDL_SetTextureAlphaMod(sprite, (Uint8) current_alpha); + } + + /* Draw a gray background */ + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + /* Test points */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0x00, 0x00, 0xFF); + SDL_RenderPoint(renderer, 0.0f, 0.0f); + SDL_RenderPoint(renderer, (float)(viewport.w - 1), 0.0f); + SDL_RenderPoint(renderer, 0.0f, (float)(viewport.h - 1)); + SDL_RenderPoint(renderer, (float)(viewport.w - 1), (float)(viewport.h - 1)); + + /* Test horizontal and vertical lines */ + SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF); + SDL_RenderLine(renderer, 1.0f, 0.0f, (float)(viewport.w - 2), 0.0f); + SDL_RenderLine(renderer, 1.0f, (float)(viewport.h - 1), (float)(viewport.w - 2), (float)(viewport.h - 1)); + SDL_RenderLine(renderer, 0.0f, 1.0f, 0.0f, (float)(viewport.h - 2)); + SDL_RenderLine(renderer, (float)(viewport.w - 1), 1, (float)(viewport.w - 1), (float)(viewport.h - 2)); + + /* Test fill and copy */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); + temp.x = 1.0f; + temp.y = 1.0f; + temp.w = (float)sprite_w; + temp.h = (float)sprite_h; + SDL_RenderFillRect(renderer, &temp); + SDL_RenderTexture(renderer, sprite, NULL, &temp); + temp.x = (float)(viewport.w-sprite_w-1); + temp.y = 1.0f; + temp.w = (float)sprite_w; + temp.h = (float)sprite_h; + SDL_RenderFillRect(renderer, &temp); + SDL_RenderTexture(renderer, sprite, NULL, &temp); + temp.x = 1.0f; + temp.y = (float)(viewport.h-sprite_h-1); + temp.w = (float)sprite_w; + temp.h = (float)sprite_h; + SDL_RenderFillRect(renderer, &temp); + SDL_RenderTexture(renderer, sprite, NULL, &temp); + temp.x = (float)(viewport.w-sprite_w-1); + temp.y = (float)(viewport.h-sprite_h-1); + temp.w = (float)(sprite_w); + temp.h = (float)(sprite_h); + SDL_RenderFillRect(renderer, &temp); + SDL_RenderTexture(renderer, sprite, NULL, &temp); + + /* Test diagonal lines */ + SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF); + SDL_RenderLine(renderer, (float)sprite_w, (float)sprite_h, + (float)(viewport.w-sprite_w-2), (float)(viewport.h-sprite_h-2)); + SDL_RenderLine(renderer, (float)(viewport.w-sprite_w-2), (float)sprite_h, + (float)sprite_w, (float)(viewport.h-sprite_h-2)); + + /* Update the screen! */ + SDL_RenderPresent(renderer); +} + +void +loop() +{ + int i; + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + if (event.type == SDL_EVENT_KEY_DOWN && !event.key.repeat) { + SDL_Log("Initial SDL_EVENT_KEY_DOWN: %s", SDL_GetScancodeName(event.key.keysym.scancode)); + } +#if defined(__XBOXONE__) || defined(__XBOXSERIES__) + /* On Xbox, ignore the keydown event because the features aren't supported */ + if (event.type != SDL_EVENT_KEY_DOWN) { + SDLTest_CommonEvent(state, &event, &done); + } +#else + SDLTest_CommonEvent(state, &event, &done); +#endif + } + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) { + continue; + } + DrawSprites(state->renderers[i], sprites[i]); + } +} + +int +main(int argc, char *argv[]) +{ + int i; + const char *icon = "icon.bmp"; + char *soundname = NULL; + + /* Initialize parameters */ + num_sprites = NUM_SPRITES; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO | SDL_INIT_AUDIO); + if (state == NULL) { + return 1; + } + + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--blend") == 0) { + if (argv[i + 1]) { + if (SDL_strcasecmp(argv[i + 1], "none") == 0) { + blendMode = SDL_BLENDMODE_NONE; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "blend") == 0) { + blendMode = SDL_BLENDMODE_BLEND; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "add") == 0) { + blendMode = SDL_BLENDMODE_ADD; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "mod") == 0) { + blendMode = SDL_BLENDMODE_MOD; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "sub") == 0) { + blendMode = SDL_ComposeCustomBlendMode(SDL_BLENDFACTOR_SRC_ALPHA, SDL_BLENDFACTOR_ONE, SDL_BLENDOPERATION_SUBTRACT, SDL_BLENDFACTOR_ZERO, SDL_BLENDFACTOR_ONE, SDL_BLENDOPERATION_SUBTRACT); + consumed = 2; + } + } + } else if (SDL_strcasecmp(argv[i], "--cyclecolor") == 0) { + cycle_color = SDL_TRUE; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--cyclealpha") == 0) { + cycle_alpha = SDL_TRUE; + consumed = 1; + } else if (SDL_isdigit(*argv[i])) { + num_sprites = SDL_atoi(argv[i]); + consumed = 1; + } else if (argv[i][0] != '-') { + icon = argv[i]; + consumed = 1; + } + } + if (consumed < 0) { + static const char *options[] = { + "[--blend none|blend|add|mod]", + "[--cyclecolor]", + "[--cyclealpha]", + "[num_sprites]", + "[icon.bmp]", + NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + quit(1); + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + /* Create the windows, initialize the renderers, and load the textures */ + sprites = + (SDL_Texture **) SDL_malloc(state->num_windows * sizeof(*sprites)); + if (sprites == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!\n"); + quit(2); + } + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + if (LoadSprite(icon) < 0) { + quit(2); + } + + soundname = GetResourceFilename(argc > 1 ? argv[1] : NULL, "sample.wav"); + + if (soundname == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s\n", SDL_GetError()); + quit(1); + } + + /* Load the wave file into memory */ + if (SDL_LoadWAV(soundname, &wave.spec, &wave.sound, &wave.soundlen) == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", soundname, SDL_GetError()); + quit(1); + } + + wave.spec.callback = fillerup; + + /* Show the list of available drivers */ + SDL_Log("Available audio drivers:"); + for (i = 0; i < SDL_GetNumAudioDrivers(); ++i) { + SDL_Log("%i: %s", i, SDL_GetAudioDriver(i)); + } + + SDL_Log("Using audio driver: %s\n", SDL_GetCurrentAudioDriver()); + + open_audio(); + + /* Main render loop */ + done = 0; + + /* Try to add the default user silently */ + AddUserSilent(); + + while (!done) { + loop(); + } + + quit(0); + + SDL_free(soundname); + return 0; +} diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/testgdk.vcxproj b/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/testgdk.vcxproj new file mode 100644 index 0000000..c0e74e2 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/testgdk.vcxproj @@ -0,0 +1,395 @@ + + + + + Debug + Gaming.Desktop.x64 + + + Debug + Gaming.Xbox.Scarlett.x64 + + + Debug + Gaming.Xbox.XboxOne.x64 + + + Release + Gaming.Desktop.x64 + + + Release + Gaming.Xbox.Scarlett.x64 + + + Release + Gaming.Xbox.XboxOne.x64 + + + + {1C9A3F71-35A5-4C56-B292-F4375B3C3649} + testsprite + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + true + + + Application + $(DefaultPlatformToolset) + true + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + .\Release/testsprite.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + xgameruntime.lib;../Microsoft.Xbox.Services.141.GDK.C.Thunks.lib;%(AdditionalDependencies) + + + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + .\Release/testsprite.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + xgameruntime.lib;%(AdditionalDependencies) + + + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + .\Release/testsprite.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + xgameruntime.lib;%(AdditionalDependencies) + + + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + .\Debug/testsprite.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + xgameruntime.lib;../Microsoft.Xbox.Services.141.GDK.C.Thunks.lib;%(AdditionalDependencies) + + + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + .\Debug/testsprite.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + xgameruntime.lib;%(AdditionalDependencies) + + + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + .\Debug/testsprite.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + xgameruntime.lib;%(AdditionalDependencies) + + + + + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + Copying %(Filename)%(Extension) + Copying %(Filename)%(Extension) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" +copy "%(FullPath)" "$(OutDir)\" + copy "%(FullPath)" "$(ProjectDir)\" +copy "%(FullPath)" "$(OutDir)\" + copy "%(FullPath)" "$(ProjectDir)\" +copy "%(FullPath)" "$(OutDir)\" + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + Copying %(Filename)%(Extension) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" +copy "%(FullPath)" "$(OutDir)\" + copy "%(FullPath)" "$(ProjectDir)\" +copy "%(FullPath)" "$(OutDir)\" + copy "%(FullPath)" "$(ProjectDir)\" +copy "%(FullPath)" "$(OutDir)\" + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + + + + + + + + + Document + true + true + true + true + + + + + Document + true + true + true + true + + + + + + + + + + + + + + Document + true + true + true + true + + + + + Document + + + + + Document + true + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/testgdk.vcxproj.filters b/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/testgdk.vcxproj.filters new file mode 100644 index 0000000..b82a989 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/testgdk.vcxproj.filters @@ -0,0 +1,53 @@ + + + + + + + + + + logos + + + logos + + + logos + + + logos + + + wingdk + + + wingdk + + + xboxseries + + + + xboxone + + + logos + + + + + + {c3c871f2-c7b7-4025-8ba4-037dde717fe1} + + + {1678a80d-0ee8-4f48-bf89-9462d82dd98a} + + + {1b47b96b-507e-40ec-9c25-99b1a4d5b575} + + + {ac7aa2d5-f0f7-46eb-a548-5b6316f3b63b} + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/wingdk/MicrosoftGame.config b/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/wingdk/MicrosoftGame.config new file mode 100644 index 0000000..afd57d6 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/wingdk/MicrosoftGame.config @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + PleaseChangeMe + FFFFFFFF + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/xboxone/MicrosoftGame.config b/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/xboxone/MicrosoftGame.config new file mode 100644 index 0000000..a593bd1 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/xboxone/MicrosoftGame.config @@ -0,0 +1,29 @@ + + + + + + + + + + + + PleaseChangeMe + FFFFFFFF + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/xboxseries/MicrosoftGame.config b/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/xboxseries/MicrosoftGame.config new file mode 100644 index 0000000..1ab7c17 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testgdk/xboxseries/MicrosoftGame.config @@ -0,0 +1,29 @@ + + + + + + + + + + + + PleaseChangeMe + FFFFFFFF + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/PackageLayout.xml b/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/PackageLayout.xml new file mode 100644 index 0000000..60a8378 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/PackageLayout.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/testsprite.vcxproj b/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/testsprite.vcxproj new file mode 100644 index 0000000..211f14c --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/testsprite.vcxproj @@ -0,0 +1,389 @@ + + + + + Debug + Gaming.Desktop.x64 + + + Debug + Gaming.Xbox.Scarlett.x64 + + + Debug + Gaming.Xbox.XboxOne.x64 + + + Release + Gaming.Desktop.x64 + + + Release + Gaming.Xbox.Scarlett.x64 + + + Release + Gaming.Xbox.XboxOne.x64 + + + + {40FB7794-D3C3-4CFE-BCF4-A80C96635682} + testsprite + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + true + + + Application + $(DefaultPlatformToolset) + true + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + .\Release/testsprite.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + xgameruntime.lib;../Microsoft.Xbox.Services.141.GDK.C.Thunks.lib;%(AdditionalDependencies) + + + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + .\Release/testsprite.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + xgameruntime.lib;%(AdditionalDependencies) + + + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + .\Release/testsprite.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + xgameruntime.lib;%(AdditionalDependencies) + + + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + .\Debug/testsprite.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + xgameruntime.lib;../Microsoft.Xbox.Services.141.GDK.C.Thunks.lib;%(AdditionalDependencies) + + + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + .\Debug/testsprite.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + xgameruntime.lib;%(AdditionalDependencies) + + + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + .\Debug/testsprite.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + xgameruntime.lib;%(AdditionalDependencies) + + + + + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + Copying %(Filename)%(Extension) + Copying %(Filename)%(Extension) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" +copy "%(FullPath)" "$(OutDir)\" + copy "%(FullPath)" "$(ProjectDir)\" +copy "%(FullPath)" "$(OutDir)\" + copy "%(FullPath)" "$(ProjectDir)\" +copy "%(FullPath)" "$(OutDir)\" + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + Copying %(Filename)%(Extension) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" +copy "%(FullPath)" "$(OutDir)\" + copy "%(FullPath)" "$(ProjectDir)\" +copy "%(FullPath)" "$(OutDir)\" + copy "%(FullPath)" "$(ProjectDir)\" +copy "%(FullPath)" "$(OutDir)\" + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + + + + + + + + + Document + true + true + true + true + + + + + Document + true + true + true + true + + + + + + + + + + + + + + Document + true + true + true + true + + + + + true + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/testsprite.vcxproj.filters b/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/testsprite.vcxproj.filters new file mode 100644 index 0000000..3e0399e --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/testsprite.vcxproj.filters @@ -0,0 +1,52 @@ + + + + + + + + + + logos + + + logos + + + logos + + + logos + + + wingdk + + + xboxseries + + + xboxone + + + wingdk + + + logos + + + + + + {c3c871f2-c7b7-4025-8ba4-037dde717fe1} + + + {c862dfc3-7803-4359-a31e-9dcda37e641a} + + + {1671e83d-25b3-4eb5-bed0-5c52c80f4e49} + + + {9bf62acf-6661-43f9-bde3-0de9e1db4290} + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/wingdk/MicrosoftGame.config b/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/wingdk/MicrosoftGame.config new file mode 100644 index 0000000..bbb839c --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/wingdk/MicrosoftGame.config @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + PleaseChangeMe + FFFFFFFF + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/xboxone/MicrosoftGame.config b/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/xboxone/MicrosoftGame.config new file mode 100644 index 0000000..14fbf7d --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/xboxone/MicrosoftGame.config @@ -0,0 +1,29 @@ + + + + + + + + + + + + PleaseChangeMe + FFFFFFFF + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/xboxseries/MicrosoftGame.config b/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/xboxseries/MicrosoftGame.config new file mode 100644 index 0000000..402b89e --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-GDK/tests/testsprite/xboxseries/MicrosoftGame.config @@ -0,0 +1,29 @@ + + + + + + + + + + + + PleaseChangeMe + FFFFFFFF + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC-WinRT/SDL-UWP.sln b/vendor/sdl-3.0.0/VisualC-WinRT/SDL-UWP.sln new file mode 100644 index 0000000..86bd92d --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-WinRT/SDL-UWP.sln @@ -0,0 +1,69 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.33027.164 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDL3-UWP", "SDL-UWP.vcxproj", "{89E9B32E-A86A-47C3-A948-D2B1622925CE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testdraw", "testdraw\testdraw.vcxproj", "{95943BBE-F378-4068-A3FD-DAE1B8309B6E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM + Debug|ARM64 = Debug|ARM64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|ARM = Release|ARM + Release|ARM64 = Release|ARM64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|ARM.ActiveCfg = Debug|ARM + {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|ARM.Build.0 = Debug|ARM + {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|ARM64.Build.0 = Debug|ARM64 + {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|x64.ActiveCfg = Debug|x64 + {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|x64.Build.0 = Debug|x64 + {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|x86.ActiveCfg = Debug|Win32 + {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|x86.Build.0 = Debug|Win32 + {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|ARM.ActiveCfg = Release|ARM + {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|ARM.Build.0 = Release|ARM + {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|ARM64.ActiveCfg = Release|ARM64 + {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|ARM64.Build.0 = Release|ARM64 + {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|x64.ActiveCfg = Release|x64 + {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|x64.Build.0 = Release|x64 + {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|x86.ActiveCfg = Release|Win32 + {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|x86.Build.0 = Release|Win32 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Debug|ARM.ActiveCfg = Debug|ARM + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Debug|ARM.Build.0 = Debug|ARM + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Debug|ARM.Deploy.0 = Debug|ARM + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Debug|ARM64.Build.0 = Debug|ARM64 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Debug|x64.ActiveCfg = Debug|x64 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Debug|x64.Build.0 = Debug|x64 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Debug|x64.Deploy.0 = Debug|x64 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Debug|x86.ActiveCfg = Debug|Win32 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Debug|x86.Build.0 = Debug|Win32 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Debug|x86.Deploy.0 = Debug|Win32 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Release|ARM.ActiveCfg = Release|ARM + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Release|ARM.Build.0 = Release|ARM + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Release|ARM.Deploy.0 = Release|ARM + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Release|ARM64.ActiveCfg = Release|ARM64 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Release|ARM64.Build.0 = Release|ARM64 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Release|ARM64.Deploy.0 = Release|ARM64 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Release|x64.ActiveCfg = Release|x64 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Release|x64.Build.0 = Release|x64 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Release|x64.Deploy.0 = Release|x64 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Release|x86.ActiveCfg = Release|Win32 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Release|x86.Build.0 = Release|Win32 + {95943BBE-F378-4068-A3FD-DAE1B8309B6E}.Release|x86.Deploy.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {30680F51-7BB9-41D0-A0D6-BC44A1557D87} + EndGlobalSection +EndGlobal diff --git a/vendor/sdl-3.0.0/VisualC-WinRT/SDL-UWP.vcxproj b/vendor/sdl-3.0.0/VisualC-WinRT/SDL-UWP.vcxproj new file mode 100644 index 0000000..21c5e7e --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-WinRT/SDL-UWP.vcxproj @@ -0,0 +1,876 @@ + + + + + Debug + ARM64 + + + Debug + ARM + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + Create + Create + Create + Create + Create + Create + Create + Create + + + Create + $(IntDir)$(TargetName)_cpp.pch + Create + $(IntDir)$(TargetName)_cpp.pch + Create + $(IntDir)$(TargetName)_cpp.pch + Create + $(IntDir)$(TargetName)_cpp.pch + Create + $(IntDir)$(TargetName)_cpp.pch + Create + $(IntDir)$(TargetName)_cpp.pch + Create + $(IntDir)$(TargetName)_cpp.pch + Create + $(IntDir)$(TargetName)_cpp.pch + true + true + true + true + true + true + true + true + + + + + + + true + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + true + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + true + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + NotUsing + + + + + + + + + + + + true + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + + + + + + + + + + + + + + + + + + + + + true + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + true + true + true + true + true + true + true + true + + + + true + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NotUsing + + + + + + + + + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + true + true + true + true + true + true + true + true + + + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + true + true + true + true + true + true + true + true + + + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + true + true + true + true + true + true + true + true + + + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + true + true + true + true + true + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + true + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + true + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + true + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + true + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + true + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + true + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + true + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + $(IntDir)$(TargetName)_cpp.pch + + + + + {89e9b32e-a86a-47c3-a948-d2b1622925ce} + DynamicLibrary + SDL3-UWP + SDL3 + en-US + 14.0 + true + Windows Store + 8.2 + 10.0.16299.0 + 10.0.16299.0 + 10.0 + + + + DynamicLibrary + true + v142 + + + DynamicLibrary + true + v142 + + + DynamicLibrary + true + v142 + + + DynamicLibrary + true + v142 + + + DynamicLibrary + false + true + v142 + + + DynamicLibrary + false + true + v142 + + + DynamicLibrary + false + true + v142 + + + DynamicLibrary + false + true + v142 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + false + SDL3 + $(SolutionDir)/../src;$(IncludePath) + + + false + false + SDL3 + $(SolutionDir)/../src;$(IncludePath) + + + false + false + SDL3 + $(SolutionDir)/../src;$(IncludePath) + + + false + false + SDL3 + $(SolutionDir)/../src;$(IncludePath) + + + false + false + SDL3 + $(SolutionDir)/../src;$(IncludePath) + + + false + false + SDL3 + $(SolutionDir)/../src;$(IncludePath) + + + false + false + SDL3 + $(SolutionDir)/../src;$(IncludePath) + + + false + false + SDL3 + $(SolutionDir)/../src;$(IncludePath) + + + + Use + false + ..\include;%(AdditionalIncludeDirectories) + DLL_EXPORT;_CRT_SECURE_NO_WARNINGS;SDL_BUILDING_WINRT=1;%(PreprocessorDefinitions) + SDL_internal.h + + + Console + false + false + /nodefaultlib:vccorlibd /nodefaultlib:msvcrtd vccorlibd.lib msvcrtd.lib %(AdditionalOptions) + + + + + Use + false + ..\include;%(AdditionalIncludeDirectories) + DLL_EXPORT;_CRT_SECURE_NO_WARNINGS;SDL_BUILDING_WINRT=1;%(PreprocessorDefinitions) + SDL_internal.h + + + Console + false + false + /nodefaultlib:vccorlib /nodefaultlib:msvcrt vccorlib.lib msvcrt.lib %(AdditionalOptions) + + + + + Use + false + ..\include;%(AdditionalIncludeDirectories) + DLL_EXPORT;_CRT_SECURE_NO_WARNINGS;SDL_BUILDING_WINRT=1;%(PreprocessorDefinitions) + SDL_internal.h + + + Console + false + false + /nodefaultlib:vccorlibd /nodefaultlib:msvcrtd vccorlibd.lib msvcrtd.lib %(AdditionalOptions) + + + + + Use + false + ..\include;%(AdditionalIncludeDirectories) + DLL_EXPORT;_CRT_SECURE_NO_WARNINGS;SDL_BUILDING_WINRT=1;%(PreprocessorDefinitions) + SDL_internal.h + + + Console + false + false + /nodefaultlib:vccorlib /nodefaultlib:msvcrt vccorlib.lib msvcrt.lib %(AdditionalOptions) + + + + + Use + false + ..\include;%(AdditionalIncludeDirectories) + DLL_EXPORT;_CRT_SECURE_NO_WARNINGS;SDL_BUILDING_WINRT=1;%(PreprocessorDefinitions) + SDL_internal.h + + + Console + false + false + /nodefaultlib:vccorlibd /nodefaultlib:msvcrtd vccorlibd.lib msvcrtd.lib %(AdditionalOptions) + + + + + Use + false + ..\include;%(AdditionalIncludeDirectories) + DLL_EXPORT;_CRT_SECURE_NO_WARNINGS;SDL_BUILDING_WINRT=1;%(PreprocessorDefinitions) + SDL_internal.h + + + Console + false + false + /nodefaultlib:vccorlib /nodefaultlib:msvcrt vccorlib.lib msvcrt.lib %(AdditionalOptions) + + + + + Use + false + ..\include;%(AdditionalIncludeDirectories) + DLL_EXPORT;_CRT_SECURE_NO_WARNINGS;SDL_BUILDING_WINRT=1;%(PreprocessorDefinitions) + SDL_internal.h + + + Console + false + false + /nodefaultlib:vccorlibd /nodefaultlib:msvcrtd vccorlibd.lib msvcrtd.lib %(AdditionalOptions) + + + + + Use + false + ..\include;%(AdditionalIncludeDirectories) + DLL_EXPORT;_CRT_SECURE_NO_WARNINGS;SDL_BUILDING_WINRT=1;%(PreprocessorDefinitions) + SDL_internal.h + + + Console + false + false + /nodefaultlib:vccorlib /nodefaultlib:msvcrt vccorlib.lib msvcrt.lib %(AdditionalOptions) + + + + + + + diff --git a/vendor/sdl-3.0.0/VisualC-WinRT/SDL-UWP.vcxproj.filters b/vendor/sdl-3.0.0/VisualC-WinRT/SDL-UWP.vcxproj.filters new file mode 100644 index 0000000..430babc --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-WinRT/SDL-UWP.vcxproj.filters @@ -0,0 +1,888 @@ + + + + + {fa0ff2df-c3d6-498a-96f1-1f88e7ce0da3} + + + {68e1b30b-19ed-4612-93e4-6260c5a979e5} + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + video + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Header Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Header Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + stdlib + + + Source Files + + + Source Files + + + diff --git a/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/LockScreenLogo.scale-200.png b/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/LockScreenLogo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..735f57adb5dfc01886d137b4e493d7e97cf13af3 GIT binary patch literal 1430 zcmaJ>TTC2P7~aKltDttVHYH6u8Io4i*}3fO&d$gd*bA_<3j~&e7%8(eXJLfhS!M@! zKrliY>>6yT4+Kr95$!DoD(Qn-5TP|{V_KS`k~E6(LGS@#`v$hQo&^^BKsw3HIsZBT z_y6C2n`lK@apunKojRQ^(_P}Mgewt$(^BBKCTZ;*xa?J3wQ7~@S0lUvbcLeq1Bg4o zH-bvQi|wt~L7q$~a-gDFP!{&TQfc3fX*6=uHv* zT&1&U(-)L%Xp^djI2?~eBF2cxC@YOP$+9d?P&h?lPy-9M2UT9fg5jKm1t$m#iWE{M zIf%q9@;fyT?0UP>tcw-bLkz;s2LlKl2qeP0w zECS7Ate+Awk|KQ+DOk;fl}Xsy4o^CY=pwq%QAAKKl628_yNPsK>?A>%D8fQG6IgdJ ztnxttBz#NI_a@fk7SU`WtrpsfZsNs9^0(2a z@C3#YO3>k~w7?2hipBf{#b6`}Xw1hlG$yi?;1dDs7k~xDAw@jiI*+tc;t2Lflg&bM)0!Y;0_@=w%`LW^8DsYpS#-bLOklX9r?Ei}TScw|4DbpW%+7 zFgAI)f51s}{y-eWb|vrU-Ya!GuYKP)J7z#*V_k^Xo>4!1Yqj*m)x&0L^tg3GJbVAJ zJ-Pl$R=NAabouV=^z_t;^K*0AvFs!vYU>_<|I^#c?>>CR<(T?=%{;U=aI*SbZADLH z&(f2wz_Y0??Tf|g;?|1Znw6}6U43Q#qNRwv1vp9uFn1)V#*4p&%$mP9x&15^OaBiDS(XppT|z^>;B{PLVEbS3IFYV yGvCsSX*m literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/SplashScreen.scale-200.png b/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/SplashScreen.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..023e7f1feda78d5100569825acedfd213a0d84e9 GIT binary patch literal 7700 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 literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/Square150x150Logo.scale-200.png b/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/Square150x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..af49fec1a5484db1d52a7f9b5ec90a27c7030186 GIT binary patch literal 2937 zcma)84OCO-8BSud5)jwMLRVKgX(S?$n?Ld|vrsm<$CF7)&zTbyy1FE5bU`Q17MRv`9ue$;R(@8kR;#vJ*IM0>cJIAOte!d7oRgdH zd%ySjdB6L9=gX^A6)VzH7p2l@v~3zJAMw|DFy#^)F@@F*`mqUn=Il>l)8_+ab;nOW{%+iPx z+s{Eu|&pIs)Z7{La9~?xKfyl z#43?gjEL15d4WbOZo#SiP%>DB^+BcnJ=7dHEe;r#G=tuw|ka z%q@}##Uh7;tc%L_64m(kHtw74ty%BJMb)_1)#S0j`)F8_1jF7vScpsnH=0V19bO8y zR`0SjIdCUo&=>JwMQF8KHA<{ODHTiQh}0^@5QRmCA?gOH6_H3K^-_sNB^RrdNuK-R zOO*vOrKCVvDwgUck`kF(E7j{I#iiN;b*ZdCt4m@HPA`EuEqGGf4%!K<;(=I=&Vyrw z%TwcWtxa}8mCZ%Cyf&ActJ6_$ox5z6-D!0-dvnRx6t7y3d+h6QYpKWO;8OdnvERo7 zuEf>ih5`wqY)~o@OeVt-wM?Q!>QzdGRj!bz6fzYrfw$hZfAKzr2-M+D+R>}~oT574c;_3zquHcElqKIsryILt3g8n3jcMb+j?i?-L3FpZJ z2WRVBRdDPc+G5aaYg#5hpE+6nQ|(VSoxT3|biF;BUq#==-27Xi=gihDPYP$7?=9cP zYKE$jeQ|3~_L0VG-(F~2ZPyD0=k{J4Q~h(t__{-mz_w8{JDY9{`1ouzz!Vr5!ECdE z6U~O1k8c}24V7~zzXWTV-Pe4)y}wQJS&q%H5`Fo_f_JvIU489aCX$;P`u#!I-=^4ijC2{&9!O&h>mi?9oYD=GC#%)6{GzN6nQYw+Fal50!#x^asjBBR50i`+mho*ttoqV)ubM2KD9S~k7+FR4>{29?6 z{!l6kDdyTN0YJ9LgkPWeXm|gyi@zM3?0@{&pXT12w|78&W-q!RRF)&iLCEZVH<|fR zN0fr2^t8H(>L?>K#>^+jWROLral(Qy-xoBq1U7A&DV||wClb)Otd9?(gZ|8znMF}D zf<1haWz^s0qgecz;RFGt0C-B4g`jNGHsFU+;{<%t65v^sjk^h$lmWn#B0#_)9ij&d z-~lc`A)YYExi^7sBuPM^Y|wA2g*5?`K?#7tzELQYNxGo$UB$4J8RJp1k(8Jj+~hMT zlN~>M@KTTh^--8y3PK_NZ@AC!{PT=CziBzGd+wTJ^@icH!Bd}%)g8V)%K?|c&WTUk zy}qv1C%(fjRoZ4ozC3{O%@5?)XzH35zHns$pgU*Q?fj4v?fp1Qbm+j;3l;9jam9Da zXVcKjPlQ73x78QPu|Ffm6x?`~e3oD=gl=4kYK?={kD5j~QCXU)`HSdduNNENzA*2$ zOm3PzF!lN5e*06-f1Uot67wY#{o-S1!KZ7E=!~7ynnk9_iJR#kFoNbAOT#^2Gd17F zMmvU6>lndZQGd|ax9kUoXXO+$N?|j@6qpsF&_j7YXvwo_C{JpmLw5&#e6k>atv%es z5)7r*Wvv_JkUpT}M!_o!nVlEk1Zbl=a*2hQ*<|%*K1Glj^FcF`6kTzGQ3lz~2tCc@ z&x|tj;aH&1&9HwcJBcT`;{?a+pnej;M1HO(6Z{#J!cZA04hnFl;NXA+&`=7bjW_^o zfC40u3LMG?NdPtwGl>Tq6u}*QG)}-y;)lu-_>ee3kibW(69n0$0Zy!}9rQz%*v1iO zT9_H>99yIrSPYVy6^);rR}7Yo=J_T@hi+qhTZXnVWyf;JDYm5#eYLTxr*?kiNn!+Y zQ+LUkBafNJ#rH#C(?d5^;gw9o#%daEI{mA*LHPIHPU`#|H$hD zwm>0&+kahQ)E#%~k>&5@&#Vg82H?s%71=)(soi@174pi9--2{w{1$}Sz4zGn3Du&x bht0Iza^2ykEt4(epJ78uh5nDlX8(TxzDYwP literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/Square44x44Logo.scale-200.png b/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/Square44x44Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..ce342a2ec8a61291ba76c54604aea7e9d20af11b GIT binary patch literal 1647 zcmaJ?eM}Q)7(e+G1Q(|`V9JhTI2>MkceK4;p;PR&$Pi?ejk3YQ_3o`S&|W_dsOZ8# zWPTt69g`t$ab`0cj-Y0yiBSOqmd)tG7G(}M5aP0_%&9TijB#&)I{zSE^4@#z^FF`l z`8{8`o%wlL(UI|y2!cdsuVamHH~H86F!*-15em4)NqUpCQM5?aoC_eCf@lV4wvF2a zjDQn1JBL69f&@2M3rvzJcfE!eZ8FZUBlFlC5RD)it33{mF9#B82AiyQE%w)`vlwa> zv{<1sm&kSKK$&%2jSFn7$t&P%%6Ue>R=EAnG8N7fqynWG8L3p!4801a;8{+nliO(qd(jNJ_?+9W3#hLIDLoT6~3fx9=`CC-D}-AMrpEO7HK zt3$GicGPc?GmDjy7K2P@La;eu4!$zWCZ`ym{Z$b zu-O6RM&K4JT|BIZB`E-gxqG%FzanI#+2FFmqHqXG7yxWB=w55RGOM)$xMb(>kSNR z2w=1AZi%z=AmG~yea~XaXJR!v7vLn(RUnELfiB1|6D84ICOS}^Zo2AdN}<&*h}G_u z{xZ!(%>tLT3J3<5XhWy-tg+6)0nmUUENLW8TWA{R6bgVd3X;anYFZ^IRis*_P-C-r z;i>%1^eL3UI2-{w8nuFFcs0e~7J{O2k^~Ce%+Ly4U?|=!0LH=t6()xi<^I-rs+9sF z*q{E-CxZbGPeu#a;XJwE;9S1?#R&uns>^0G3p`hEUF*v`M?@h%T%J%RChmD|EVydq zmHWh*_=S%emRC*mhxaVLzT@>Z2SX0u9v*DIJ@WC^kLVdlGV6LpK$KIrlJqc zpJ921)+3JJdTx|<`G&kXpKkjGJv=76R`yYIQ{#c-`%+`#V(7}Q;&@6U8!Td1`d;?N z_9mnI#?AA}4J!r)LN4!E-@H5eXauuB7TOawS>Y|{-P?NNx-lq+z1W-+y(;39P&&LP zL{N80?&=C*qKmdA^moMZRuPcD!B<*mq$ch=0Cnlitw#txRWhb3%TQvPqjkC`F69G4b! ze7z9MZ#+;_#l?H37UqUhDFb^l&s2{oM$3I0o^Q!yx;;V)QmCMo)Tb_ui|mit8MS?U zm##6$sZZ1$@|s%?l@>4Z<*Q}sRBSKMhb4I{e5LdEhsHIHTe8Bod5c>6QtT>$XgUBz z6MK`kO$=jmt@FqggOhJ5j~e@ygRbG;<{Vu)*+nn9aQeo0;$#j;|MS=S$&L?BeV25z xs3B`@=#`5TF{^6(A1rvdY@|-RtQ|iS5{tyX+wH?;n8E)G$kykv-D^wh{{!TZT%7;_ literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/Square44x44Logo.targetsize-24_altform-unplated.png new file mode 100644 index 0000000000000000000000000000000000000000..f6c02ce97e0a802b85f6021e822c89f8bf57d5cd GIT binary patch literal 1255 zcmaJ>TWs4@7*5+{G#S+&C!qC#> zf>5N3P6jO*Cz>ug*(_DmW=)kea&m$gZ^+nyiF`;j%w@}y8)>p*SH}C`m?DXeieF2U zyQHecc_L%Gh!7GMt+hG06y;+|p4>m~}PjA}rKViGiEnn7G0ZO<>G|7q;2?NwGCM3s?eued6%hd$B+ z*kQJ{#~$S=DFE(%=E+UkmlEI*%3llUf~8Ja9YU1Vui0IbGBkW_gHB%Rd&!!ioX zs40O?i9I{};kle7GMvE7(rk`la=gTI)47=>%?q@^iL-nUo3}h4S}N-KHn8t5mVP8w z&bSErwp+37 zNJJ8?a|{r5Q3R0Z5s-LB1WHOwYC@7pCHWND#cL1cZ?{kJ368_*(UDWUDyb<}0y@o# zfMF016iMWPCb6obAxT$JlB6(2DrlXDTB&!0`!m??4F(qWMhjVZo?JXQmz`1*58Z=& zcDmB|S-E@j?BoFGix0flckqdS4jsPNzhfWyWIM98GxcLs89C(~dw%$_t;JjX-SD}E zfiGV;{8Q%8r}w9x>EEigW81>`kvnU@pK)4+xk9@+bNj9L!AAZ@SZ@q|)&BmY3+HZx zul~BeG4|}-;L%cHViQGQX?^zFfO0&#cHwel=d`lH9sJ-@Sl@n*(8J2>%Ac`IxyY?Q z{=GhWvC#gu-~Ia7*n{=+;qM?Ul_wy1+u7ho;=`>EwP^g~R@{unBds`!#@}tluZQpS zm)M~nYEifJWJGx?_6DcTy>#uh%>!H9=hb^(v`=m3F1{L>db=<5_tm+_&knAQ2EU$s Mu9UqpbNZeC0BbUo^Z)<= literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/StoreLogo.png b/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..7385b56c0e4d3c6b0efe3324aa1194157d837826 GIT binary patch literal 1451 zcmaJ>eN5D57_Z|bH;{0+1#mbl)eTU3{h)Wf7EZV?;HD@XL@{B`Ui%(2aMxQ~xdXSv z5nzWi(LW)U2=Vc-cY@s7nPt{i0hc6!7xN4NNHI#EQl>YNBy8l4%x9gr_W-j zEZMQmmTIy(>;lblRfh`dIyTgc9W5d!VP$L4(kKrN1c5G~(O_#xG zAJCNTstD^5SeXFB+&$h=ToJP2H>xr$iqPs-#O*;4(!Fjw25-!gEb*)mU}=)J;Iu>w zxK(5XoD0wrPSKQ~rbL^Cw6O_03*l*}i=ydbu7adJ6y;%@tjFeXIXT+ms30pmbOP%Q zX}S;+LBh8Tea~TSkHzvX6$rYb)+n&{kSbIqh|c7hmlxmwSiq5iVhU#iEQ<>a18|O^Sln-8t&+t`*{qBWo5M?wFM(JuimAOb5!K#D}XbslM@#1ZVz_;!9U zpfEpLAOz=0g@bd6Xj_ILi-x^!M}73h^o@}hM$1jflTs|Yuj9AL@A3<-?MV4!^4q`e z)fO@A;{9K^?W?DbnesnPr6kK>$zaKo&;FhFd(GYFCIU^T+OIMb%Tqo+P%oq(IdX7S zf6+HLO?7o0m+p>~Tp5UrXWh!UH!wZ5kv!E`_w)PTpI(#Iw{AS`gH4^b(bm^ZCq^FZ zY9DD7bH}rq9mg88+KgA$Zp!iWncuU2n1AuIa@=sWvUR-s`Qb{R*kk(SPU^`$6BXz8 zn#7yaFOIK%qGxyi`dYtm#&qqox0$h=pNi#u=M8zUG@bpiZ=3sT=1}Trr}39cC)H|v zbL?W)=&s4zrh)7>L(|cc%$1#!zfL?HjpeP%T+x_a+jZ16b^iKOHxFEX$7d|8${H-* zIrOJ5w&i$>*D>AKaIoYg`;{L@jM((Kt?$N$5OnuPqVvq**Nm}(f0wwOF%iX_Pba;V z;m@wxX&NcV3?<1+u?A{y_DIj7#m3Af1rCE)o`D&Y3}0%7E;iX1yMDiS)sh0wKi!36 zL!Wmq?P^Ku&rK~HJd97KkLTRl>ScGFYZNlYytWnhmuu|)L&ND8_PmkayQb{HOY640 bno1(wj@u8DCVuFR|31B*4ek@pZJqxCDDe1x literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/Wide310x150Logo.scale-200.png b/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/Assets/Wide310x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..288995b397fdbef1fb7e85afd71445d5de1952c5 GIT binary patch literal 3204 zcmbVPeQXow8NYmBd90>}0NP?GhXW~VaeThm=a0tV#EwJMI!)6M3}|c4_Bl3=Kd>G0 z(GHx1wl<7(tP?FsOQkTilSo*iIvF%uArExJ73~P zSv1xEy!U(Wd4A9D`FQV@W3@F^qJ@PEF$@z`Z!*BbFsS(^?B zyiAzJ+q})bkgiQHWqEb*jJD-coHYr1^iocg)l!Qa{Xqs-l~6J}p-|##ZHYofskQ3$ zI0;xzXyhazBeXhIsg5A=%ufo@f)1yy&ScKS0;HF^!r_2UE^lpZEom(+@duma3awTv zCrCL-%D_SvYWIcdHkmI}#50(fkUi)Qgx!80ju>g1za^}ff>JI8Z@^-iCiaCgg@TgF z+vtE?Q9{VQUX&MW9SYYmGcxA14%N2@7FwBTD4N<(2{nWgV8$e3?-F=L^&FrtWn~(U_Q~~^uYiyeY6-KoTnfh9AWz@ zIKje0)u!_Lw)E}G!#kEfwKVdNt(UAf9*f>tEL_(=xco-T%jTi@7YlC3hs2ik%Le0H ztj}RTeCF(5mwvi3_56>-yB?l;J>-1%!9~=fs|QcNG3J~a@JCu`4SB460s0ZO+##4fFUSGLcj_ja^fL4&BKALfb#$6$O?>P@qx2Agl^x0i&ugt zsy5Pyu=()`7HRMG3IB7F1@`_ z+-!J%#i6e^U$e#+C%Q>_qVRzWRsG^W_n+@OcX@vzI&z;mzHNb!GQ?LWA(wtpqHqTM z1OFw_{Zn?fD)p)`c`kOgv{de=v@suGRqY{N^U7gI1VF3*F=obwaXI6ob5__Yn zVTguS!%(NI09J8x#AO_aW!9W7k*UvB;IWDFC3srwftr{kHj%g)fvnAm;&h_dnl~

MY- zf+K}sCe8qU6Ujs`3ua{U0Of$R_gVQBuUA za0v=mu#vIOqiiAZOr&h*$WyOw&k-xr$;G4Ixa!#TJNr>95(h>l%)PUy4p+^SgR(uR zta%k*?ny-+nAr8spEk1fo{J4i!b^Fia`N{_F6@zidA2ZTTrjl#^5Z-2KfB@Cu}l9s z(*|Z2jc?p~vn2f)3y9i*7zJV1L{$?|&q)4oaT;uXi6>1GkRXVTOzAz(RHEmr=eFIi z`}<>-Q?K0GN8!IYxeP1XKXO+jsJbp~o^);Bc;%b7Flpe7;1`Ny@3r7ZR;?R)aJt8C ziNlEC<@3f_lIV4TwV}&e;D!Ee5_|e#g0LUh=5vmYWYm7&2h*M>QPKvGh9-)wfMMW3 z8J9b%1k7dzPzO0_NGQy92BZ^FR6R~6;^6?lqO;-QUP4BY%cG%3vEhbm#>4vIhPBh3 z-+pZGjh$x%Hp{?=FHsMp0&wNPlj00us{&`1ZOZTqs8%4X&xH=UDr*xyBW(Zp&Em94 zf)ZSfn#yg0N)>!1kWdkqJ^S*z0FF5|fj&qcE#Na|%OY0$uO>!&hP+1ywfD_WXk@4J(?MBftK7>$Nvqh@tDuarN%PrTLQ2Uzysx>UV=V zk^RrDSvdQ?0;=hY67EgII-f4`t=+i*yS=Y~!XlqIy_4x&%+OdfbKOFPXS2X5%4R{N z$SQMX^AK6(fA + + + + + + + + + testdraw + Daniel + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/testdraw.vcxproj b/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/testdraw.vcxproj new file mode 100644 index 0000000..f612acf --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/testdraw.vcxproj @@ -0,0 +1,331 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + Debug + ARM + + + Release + ARM + + + Debug + ARM64 + + + Release + ARM64 + + + + {95943bbe-f378-4068-a3fd-dae1b8309b6e} + DirectXApp + testdraw + en-US + 14.0 + true + Windows Store + 10.0.19041.0 + 10.0.17763.0 + 10.0 + false + + + + Application + true + v142 + + + Application + true + v142 + + + Application + true + v142 + true + + + Application + true + v142 + + + Application + false + true + v142 + true + + + Application + false + true + v142 + true + + + Application + false + true + v142 + true + + + Application + false + true + v142 + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\arm; $(VCInstallDir)\lib\arm + /nodefaultlib:vccorlibd /nodefaultlib:msvcrtd vccorlibd.lib msvcrtd.lib %(AdditionalOptions) + + + pch.h + $(IntDir)pch.pch + $(ProjectDir);$(IntermediateOutputPath);..\..\include + /bigobj %(AdditionalOptions) + 4453;28204 + _DEBUG;%(PreprocessorDefinitions) + false + NotUsing + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\arm; $(VCInstallDir)\lib\arm + /nodefaultlib:vccorlib /nodefaultlib:msvcrt vccorlib.lib msvcrt.lib %(AdditionalOptions) + + + pch.h + $(IntDir)pch.pch + $(ProjectDir);$(IntermediateOutputPath);..\..\include + /bigobj %(AdditionalOptions) + 4453;28204 + NDEBUG;%(PreprocessorDefinitions) + false + NotUsing + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\arm64; $(VCInstallDir)\lib\arm64 + /nodefaultlib:vccorlibd /nodefaultlib:msvcrtd vccorlibd.lib msvcrtd.lib %(AdditionalOptions) + + + pch.h + $(IntDir)pch.pch + $(ProjectDir);$(IntermediateOutputPath);..\..\include + /bigobj %(AdditionalOptions) + 4453;28204 + _DEBUG;%(PreprocessorDefinitions) + false + NotUsing + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\arm64; $(VCInstallDir)\lib\arm64 + /nodefaultlib:vccorlib /nodefaultlib:msvcrt vccorlib.lib msvcrt.lib %(AdditionalOptions) + + + pch.h + $(IntDir)pch.pch + $(ProjectDir);$(IntermediateOutputPath);..\..\include + /bigobj %(AdditionalOptions) + 4453;28204 + NDEBUG;%(PreprocessorDefinitions) + false + NotUsing + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store; $(VCInstallDir)\lib + /nodefaultlib:vccorlibd /nodefaultlib:msvcrtd vccorlibd.lib msvcrtd.lib %(AdditionalOptions) + + + pch.h + $(IntDir)pch.pch + $(ProjectDir);$(IntermediateOutputPath);..\..\include + /bigobj %(AdditionalOptions) + 4453;28204 + _DEBUG;%(PreprocessorDefinitions) + false + NotUsing + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store; $(VCInstallDir)\lib + /nodefaultlib:vccorlib /nodefaultlib:msvcrt vccorlib.lib msvcrt.lib %(AdditionalOptions) + + + pch.h + $(IntDir)pch.pch + $(ProjectDir);$(IntermediateOutputPath);..\..\include + /bigobj %(AdditionalOptions) + 4453;28204 + NDEBUG;%(PreprocessorDefinitions) + false + NotUsing + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\amd64; $(VCInstallDir)\lib\amd64 + /nodefaultlib:vccorlibd /nodefaultlib:msvcrtd vccorlibd.lib msvcrtd.lib %(AdditionalOptions) + + + pch.h + $(IntDir)pch.pch + $(ProjectDir);$(IntermediateOutputPath);..\..\include + /bigobj %(AdditionalOptions) + 4453;28204 + _DEBUG;%(PreprocessorDefinitions) + false + NotUsing + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\amd64; $(VCInstallDir)\lib\amd64 + /nodefaultlib:vccorlib /nodefaultlib:msvcrt vccorlib.lib msvcrt.lib %(AdditionalOptions) + + + pch.h + $(IntDir)pch.pch + $(ProjectDir);$(IntermediateOutputPath);..\..\include + /bigobj %(AdditionalOptions) + 4453;28204 + NDEBUG;%(PreprocessorDefinitions) + false + NotUsing + + + + + + + + + + + + + + Designer + + + + + {89e9b32e-a86a-47c3-a948-d2b1622925ce} + + + + + + + + + + + + + + + + true + true + true + true + true + true + true + true + + + false + false + false + false + false + false + false + false + + + + + + + + + + + + + + + diff --git a/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/testdraw.vcxproj.filters b/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/testdraw.vcxproj.filters new file mode 100644 index 0000000..d41d939 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC-WinRT/testdraw/testdraw.vcxproj.filters @@ -0,0 +1,88 @@ + + + + + 95943bbe-f378-4068-a3fd-dae1b8309b6e + + + dad3d573-ab33-428d-ae70-6098066c27e7 + bmp;fbx;gif;jpg;jpeg;tga;tiff;tif;png + + + e4caa635-e149-44c2-8915-48ffa6ac48f7 + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + + + Assets + + + + + + + + Content + + + Content + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + Common + + + + + + + + + diff --git a/vendor/sdl-3.0.0/VisualC/SDL.sln b/vendor/sdl-3.0.0/VisualC/SDL.sln new file mode 100644 index 0000000..ff6a2b4 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/SDL.sln @@ -0,0 +1,284 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{D69D5741-611F-4E14-8541-1FEE94F50B5A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDL3", "SDL\SDL.vcxproj", "{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "checkkeys", "tests\checkkeys\checkkeys.vcxproj", "{26828762-C95D-4637-9CB1-7F0979523813}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "loopwave", "tests\loopwave\loopwave.vcxproj", "{AAAD1CB5-7ADA-47AE-85A0-08A6EC48FAFB}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testatomic", "tests\testatomic\testatomic.vcxproj", "{66B32F7E-5716-48D0-B5B9-D832FD052DD5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testautomation", "tests\testautomation\testautomation.vcxproj", "{9C7E8C03-3130-436D-A97E-E8F8ED1AC4EA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testdraw", "tests\testdraw\testdraw.vcxproj", "{8682FE1E-0CF6-4EDD-9BB5-1733D8C8B4DF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testfile", "tests\testfile\testfile.vcxproj", "{CAE4F1D0-314F-4B10-805B-0EFD670133A0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testgl", "tests\testgl\testgl.vcxproj", "{8B5CFB38-CCBA-40A8-AD7A-89C57B070884}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testoverlay", "tests\testoverlay\testoverlay.vcxproj", "{B51E0D74-F0A2-45A2-BD2A-8B7D95B8204A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testplatform", "tests\testplatform\testplatform.vcxproj", "{26932B24-EFC6-4E3A-B277-ED653DA37968}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testpower", "tests\testpower\testpower.vcxproj", "{C4E04D18-EF76-4B42-B4C2-16A1BACDC0A3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testrendertarget", "tests\testrendertarget\testrendertarget.vcxproj", "{2D17C1EB-1157-460E-9A99-A82BFC1F9D1E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testrumble", "tests\testrumble\testrumble.vcxproj", "{BFF40245-E9A6-4297-A425-A554E5D767E8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testscale", "tests\testscale\testscale.vcxproj", "{5D0930C0-7C91-4ECE-9014-7B7DDE9502E6}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testshape", "tests\testshape\testshape.vcxproj", "{31A3E4E1-AAE9-4EF3-9B23-18D0924BE4D2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testsprite", "tests\testsprite\testsprite.vcxproj", "{40FB7794-D3C3-4CFE-BCF4-A80C96635682}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDL3_test", "SDL_test\SDL_test.vcxproj", "{DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testcontroller", "tests\testcontroller\testcontroller.vcxproj", "{55812185-D13C-4022-9C81-32E0F4A08305}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testgles2", "tests\testgles2\testgles2.vcxproj", "{E9558DFE-1961-4DD4-B09B-DD0EEFD5C315}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testvulkan", "tests\testvulkan\testvulkan.vcxproj", "{0D604DFD-AAB6-442C-9368-F91A344146AB}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testwm", "tests\testwm\testwm.vcxproj", "{C4E04D18-EF76-4B42-B4C2-16A1BACDC0A5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testyuv", "tests\testyuv\testyuv.vcxproj", "{40FB7794-D3C3-4CFE-BCF4-A80C97635682}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testsensor", "tests\testsensor\testsensor.vcxproj", "{C4E04D18-EF76-4B42-B4C2-16A1BACDC0A4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testsurround", "tests\testsurround\testsurround.vcxproj", "{70B894A9-E306-49E8-ABC2-932A952A5E5F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Win32.ActiveCfg = Debug|Win32 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Win32.Build.0 = Debug|Win32 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|x64.ActiveCfg = Debug|x64 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|x64.Build.0 = Debug|x64 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Win32.ActiveCfg = Release|Win32 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Win32.Build.0 = Release|Win32 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|x64.ActiveCfg = Release|x64 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|x64.Build.0 = Release|x64 + {26828762-C95D-4637-9CB1-7F0979523813}.Debug|Win32.ActiveCfg = Debug|Win32 + {26828762-C95D-4637-9CB1-7F0979523813}.Debug|Win32.Build.0 = Debug|Win32 + {26828762-C95D-4637-9CB1-7F0979523813}.Debug|x64.ActiveCfg = Debug|x64 + {26828762-C95D-4637-9CB1-7F0979523813}.Debug|x64.Build.0 = Debug|x64 + {26828762-C95D-4637-9CB1-7F0979523813}.Release|Win32.ActiveCfg = Release|Win32 + {26828762-C95D-4637-9CB1-7F0979523813}.Release|Win32.Build.0 = Release|Win32 + {26828762-C95D-4637-9CB1-7F0979523813}.Release|x64.ActiveCfg = Release|x64 + {26828762-C95D-4637-9CB1-7F0979523813}.Release|x64.Build.0 = Release|x64 + {AAAD1CB5-7ADA-47AE-85A0-08A6EC48FAFB}.Debug|Win32.ActiveCfg = Debug|Win32 + {AAAD1CB5-7ADA-47AE-85A0-08A6EC48FAFB}.Debug|Win32.Build.0 = Debug|Win32 + {AAAD1CB5-7ADA-47AE-85A0-08A6EC48FAFB}.Debug|x64.ActiveCfg = Debug|x64 + {AAAD1CB5-7ADA-47AE-85A0-08A6EC48FAFB}.Debug|x64.Build.0 = Debug|x64 + {AAAD1CB5-7ADA-47AE-85A0-08A6EC48FAFB}.Release|Win32.ActiveCfg = Release|Win32 + {AAAD1CB5-7ADA-47AE-85A0-08A6EC48FAFB}.Release|Win32.Build.0 = Release|Win32 + {AAAD1CB5-7ADA-47AE-85A0-08A6EC48FAFB}.Release|x64.ActiveCfg = Release|x64 + {AAAD1CB5-7ADA-47AE-85A0-08A6EC48FAFB}.Release|x64.Build.0 = Release|x64 + {66B32F7E-5716-48D0-B5B9-D832FD052DD5}.Debug|Win32.ActiveCfg = Debug|Win32 + {66B32F7E-5716-48D0-B5B9-D832FD052DD5}.Debug|Win32.Build.0 = Debug|Win32 + {66B32F7E-5716-48D0-B5B9-D832FD052DD5}.Debug|x64.ActiveCfg = Debug|x64 + {66B32F7E-5716-48D0-B5B9-D832FD052DD5}.Debug|x64.Build.0 = Debug|x64 + {66B32F7E-5716-48D0-B5B9-D832FD052DD5}.Release|Win32.ActiveCfg = Release|Win32 + {66B32F7E-5716-48D0-B5B9-D832FD052DD5}.Release|Win32.Build.0 = Release|Win32 + {66B32F7E-5716-48D0-B5B9-D832FD052DD5}.Release|x64.ActiveCfg = Release|x64 + {66B32F7E-5716-48D0-B5B9-D832FD052DD5}.Release|x64.Build.0 = Release|x64 + {9C7E8C03-3130-436D-A97E-E8F8ED1AC4EA}.Debug|Win32.ActiveCfg = Debug|Win32 + {9C7E8C03-3130-436D-A97E-E8F8ED1AC4EA}.Debug|Win32.Build.0 = Debug|Win32 + {9C7E8C03-3130-436D-A97E-E8F8ED1AC4EA}.Debug|x64.ActiveCfg = Debug|x64 + {9C7E8C03-3130-436D-A97E-E8F8ED1AC4EA}.Debug|x64.Build.0 = Debug|x64 + {9C7E8C03-3130-436D-A97E-E8F8ED1AC4EA}.Release|Win32.ActiveCfg = Release|Win32 + {9C7E8C03-3130-436D-A97E-E8F8ED1AC4EA}.Release|Win32.Build.0 = Release|Win32 + {9C7E8C03-3130-436D-A97E-E8F8ED1AC4EA}.Release|x64.ActiveCfg = Release|x64 + {9C7E8C03-3130-436D-A97E-E8F8ED1AC4EA}.Release|x64.Build.0 = Release|x64 + {8682FE1E-0CF6-4EDD-9BB5-1733D8C8B4DF}.Debug|Win32.ActiveCfg = Debug|Win32 + {8682FE1E-0CF6-4EDD-9BB5-1733D8C8B4DF}.Debug|Win32.Build.0 = Debug|Win32 + {8682FE1E-0CF6-4EDD-9BB5-1733D8C8B4DF}.Debug|x64.ActiveCfg = Debug|x64 + {8682FE1E-0CF6-4EDD-9BB5-1733D8C8B4DF}.Debug|x64.Build.0 = Debug|x64 + {8682FE1E-0CF6-4EDD-9BB5-1733D8C8B4DF}.Release|Win32.ActiveCfg = Release|Win32 + {8682FE1E-0CF6-4EDD-9BB5-1733D8C8B4DF}.Release|Win32.Build.0 = Release|Win32 + {8682FE1E-0CF6-4EDD-9BB5-1733D8C8B4DF}.Release|x64.ActiveCfg = Release|x64 + {8682FE1E-0CF6-4EDD-9BB5-1733D8C8B4DF}.Release|x64.Build.0 = Release|x64 + {CAE4F1D0-314F-4B10-805B-0EFD670133A0}.Debug|Win32.ActiveCfg = Debug|Win32 + {CAE4F1D0-314F-4B10-805B-0EFD670133A0}.Debug|Win32.Build.0 = Debug|Win32 + {CAE4F1D0-314F-4B10-805B-0EFD670133A0}.Debug|x64.ActiveCfg = Debug|x64 + {CAE4F1D0-314F-4B10-805B-0EFD670133A0}.Debug|x64.Build.0 = Debug|x64 + {CAE4F1D0-314F-4B10-805B-0EFD670133A0}.Release|Win32.ActiveCfg = Release|Win32 + {CAE4F1D0-314F-4B10-805B-0EFD670133A0}.Release|Win32.Build.0 = Release|Win32 + {CAE4F1D0-314F-4B10-805B-0EFD670133A0}.Release|x64.ActiveCfg = Release|x64 + {CAE4F1D0-314F-4B10-805B-0EFD670133A0}.Release|x64.Build.0 = Release|x64 + {8B5CFB38-CCBA-40A8-AD7A-89C57B070884}.Debug|Win32.ActiveCfg = Debug|Win32 + {8B5CFB38-CCBA-40A8-AD7A-89C57B070884}.Debug|Win32.Build.0 = Debug|Win32 + {8B5CFB38-CCBA-40A8-AD7A-89C57B070884}.Debug|x64.ActiveCfg = Debug|x64 + {8B5CFB38-CCBA-40A8-AD7A-89C57B070884}.Debug|x64.Build.0 = Debug|x64 + {8B5CFB38-CCBA-40A8-AD7A-89C57B070884}.Release|Win32.ActiveCfg = Release|Win32 + {8B5CFB38-CCBA-40A8-AD7A-89C57B070884}.Release|Win32.Build.0 = Release|Win32 + {8B5CFB38-CCBA-40A8-AD7A-89C57B070884}.Release|x64.ActiveCfg = Release|x64 + {8B5CFB38-CCBA-40A8-AD7A-89C57B070884}.Release|x64.Build.0 = Release|x64 + {B51E0D74-F0A2-45A2-BD2A-8B7D95B8204A}.Debug|Win32.ActiveCfg = Debug|Win32 + {B51E0D74-F0A2-45A2-BD2A-8B7D95B8204A}.Debug|Win32.Build.0 = Debug|Win32 + {B51E0D74-F0A2-45A2-BD2A-8B7D95B8204A}.Debug|x64.ActiveCfg = Debug|x64 + {B51E0D74-F0A2-45A2-BD2A-8B7D95B8204A}.Debug|x64.Build.0 = Debug|x64 + {B51E0D74-F0A2-45A2-BD2A-8B7D95B8204A}.Release|Win32.ActiveCfg = Release|Win32 + {B51E0D74-F0A2-45A2-BD2A-8B7D95B8204A}.Release|Win32.Build.0 = Release|Win32 + {B51E0D74-F0A2-45A2-BD2A-8B7D95B8204A}.Release|x64.ActiveCfg = Release|x64 + {B51E0D74-F0A2-45A2-BD2A-8B7D95B8204A}.Release|x64.Build.0 = Release|x64 + {26932B24-EFC6-4E3A-B277-ED653DA37968}.Debug|Win32.ActiveCfg = Debug|Win32 + {26932B24-EFC6-4E3A-B277-ED653DA37968}.Debug|Win32.Build.0 = Debug|Win32 + {26932B24-EFC6-4E3A-B277-ED653DA37968}.Debug|x64.ActiveCfg = Debug|x64 + {26932B24-EFC6-4E3A-B277-ED653DA37968}.Debug|x64.Build.0 = Debug|x64 + {26932B24-EFC6-4E3A-B277-ED653DA37968}.Release|Win32.ActiveCfg = Release|Win32 + {26932B24-EFC6-4E3A-B277-ED653DA37968}.Release|Win32.Build.0 = Release|Win32 + {26932B24-EFC6-4E3A-B277-ED653DA37968}.Release|x64.ActiveCfg = Release|x64 + {26932B24-EFC6-4E3A-B277-ED653DA37968}.Release|x64.Build.0 = Release|x64 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A3}.Debug|Win32.ActiveCfg = Debug|Win32 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A3}.Debug|Win32.Build.0 = Debug|Win32 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A3}.Debug|x64.ActiveCfg = Debug|x64 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A3}.Debug|x64.Build.0 = Debug|x64 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A3}.Release|Win32.ActiveCfg = Release|Win32 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A3}.Release|Win32.Build.0 = Release|Win32 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A3}.Release|x64.ActiveCfg = Release|x64 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A3}.Release|x64.Build.0 = Release|x64 + {2D17C1EB-1157-460E-9A99-A82BFC1F9D1E}.Debug|Win32.ActiveCfg = Debug|Win32 + {2D17C1EB-1157-460E-9A99-A82BFC1F9D1E}.Debug|Win32.Build.0 = Debug|Win32 + {2D17C1EB-1157-460E-9A99-A82BFC1F9D1E}.Debug|x64.ActiveCfg = Debug|x64 + {2D17C1EB-1157-460E-9A99-A82BFC1F9D1E}.Debug|x64.Build.0 = Debug|x64 + {2D17C1EB-1157-460E-9A99-A82BFC1F9D1E}.Release|Win32.ActiveCfg = Release|Win32 + {2D17C1EB-1157-460E-9A99-A82BFC1F9D1E}.Release|Win32.Build.0 = Release|Win32 + {2D17C1EB-1157-460E-9A99-A82BFC1F9D1E}.Release|x64.ActiveCfg = Release|x64 + {2D17C1EB-1157-460E-9A99-A82BFC1F9D1E}.Release|x64.Build.0 = Release|x64 + {BFF40245-E9A6-4297-A425-A554E5D767E8}.Debug|Win32.ActiveCfg = Debug|Win32 + {BFF40245-E9A6-4297-A425-A554E5D767E8}.Debug|Win32.Build.0 = Debug|Win32 + {BFF40245-E9A6-4297-A425-A554E5D767E8}.Debug|x64.ActiveCfg = Debug|x64 + {BFF40245-E9A6-4297-A425-A554E5D767E8}.Debug|x64.Build.0 = Debug|x64 + {BFF40245-E9A6-4297-A425-A554E5D767E8}.Release|Win32.ActiveCfg = Release|Win32 + {BFF40245-E9A6-4297-A425-A554E5D767E8}.Release|Win32.Build.0 = Release|Win32 + {BFF40245-E9A6-4297-A425-A554E5D767E8}.Release|x64.ActiveCfg = Release|x64 + {BFF40245-E9A6-4297-A425-A554E5D767E8}.Release|x64.Build.0 = Release|x64 + {5D0930C0-7C91-4ECE-9014-7B7DDE9502E6}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D0930C0-7C91-4ECE-9014-7B7DDE9502E6}.Debug|Win32.Build.0 = Debug|Win32 + {5D0930C0-7C91-4ECE-9014-7B7DDE9502E6}.Debug|x64.ActiveCfg = Debug|x64 + {5D0930C0-7C91-4ECE-9014-7B7DDE9502E6}.Debug|x64.Build.0 = Debug|x64 + {5D0930C0-7C91-4ECE-9014-7B7DDE9502E6}.Release|Win32.ActiveCfg = Release|Win32 + {5D0930C0-7C91-4ECE-9014-7B7DDE9502E6}.Release|Win32.Build.0 = Release|Win32 + {5D0930C0-7C91-4ECE-9014-7B7DDE9502E6}.Release|x64.ActiveCfg = Release|x64 + {5D0930C0-7C91-4ECE-9014-7B7DDE9502E6}.Release|x64.Build.0 = Release|x64 + {31A3E4E1-AAE9-4EF3-9B23-18D0924BE4D2}.Debug|Win32.ActiveCfg = Debug|Win32 + {31A3E4E1-AAE9-4EF3-9B23-18D0924BE4D2}.Debug|Win32.Build.0 = Debug|Win32 + {31A3E4E1-AAE9-4EF3-9B23-18D0924BE4D2}.Debug|x64.ActiveCfg = Debug|x64 + {31A3E4E1-AAE9-4EF3-9B23-18D0924BE4D2}.Debug|x64.Build.0 = Debug|x64 + {31A3E4E1-AAE9-4EF3-9B23-18D0924BE4D2}.Release|Win32.ActiveCfg = Release|Win32 + {31A3E4E1-AAE9-4EF3-9B23-18D0924BE4D2}.Release|Win32.Build.0 = Release|Win32 + {31A3E4E1-AAE9-4EF3-9B23-18D0924BE4D2}.Release|x64.ActiveCfg = Release|x64 + {31A3E4E1-AAE9-4EF3-9B23-18D0924BE4D2}.Release|x64.Build.0 = Release|x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Debug|Win32.ActiveCfg = Debug|Win32 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Debug|Win32.Build.0 = Debug|Win32 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Debug|x64.ActiveCfg = Debug|x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Debug|x64.Build.0 = Debug|x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Release|Win32.ActiveCfg = Release|Win32 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Release|Win32.Build.0 = Release|Win32 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Release|x64.ActiveCfg = Release|x64 + {40FB7794-D3C3-4CFE-BCF4-A80C96635682}.Release|x64.Build.0 = Release|x64 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Debug|Win32.ActiveCfg = Debug|Win32 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Debug|Win32.Build.0 = Debug|Win32 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Debug|x64.ActiveCfg = Debug|x64 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Debug|x64.Build.0 = Debug|x64 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Release|Win32.ActiveCfg = Release|Win32 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Release|Win32.Build.0 = Release|Win32 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Release|x64.ActiveCfg = Release|x64 + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A}.Release|x64.Build.0 = Release|x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Debug|Win32.ActiveCfg = Debug|Win32 + {55812185-D13C-4022-9C81-32E0F4A08305}.Debug|Win32.Build.0 = Debug|Win32 + {55812185-D13C-4022-9C81-32E0F4A08305}.Debug|x64.ActiveCfg = Debug|x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Debug|x64.Build.0 = Debug|x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Release|Win32.ActiveCfg = Release|Win32 + {55812185-D13C-4022-9C81-32E0F4A08305}.Release|Win32.Build.0 = Release|Win32 + {55812185-D13C-4022-9C81-32E0F4A08305}.Release|x64.ActiveCfg = Release|x64 + {55812185-D13C-4022-9C81-32E0F4A08305}.Release|x64.Build.0 = Release|x64 + {E9558DFE-1961-4DD4-B09B-DD0EEFD5C315}.Debug|Win32.ActiveCfg = Debug|Win32 + {E9558DFE-1961-4DD4-B09B-DD0EEFD5C315}.Debug|Win32.Build.0 = Debug|Win32 + {E9558DFE-1961-4DD4-B09B-DD0EEFD5C315}.Debug|x64.ActiveCfg = Debug|x64 + {E9558DFE-1961-4DD4-B09B-DD0EEFD5C315}.Debug|x64.Build.0 = Debug|x64 + {E9558DFE-1961-4DD4-B09B-DD0EEFD5C315}.Release|Win32.ActiveCfg = Release|Win32 + {E9558DFE-1961-4DD4-B09B-DD0EEFD5C315}.Release|Win32.Build.0 = Release|Win32 + {E9558DFE-1961-4DD4-B09B-DD0EEFD5C315}.Release|x64.ActiveCfg = Release|x64 + {E9558DFE-1961-4DD4-B09B-DD0EEFD5C315}.Release|x64.Build.0 = Release|x64 + {0D604DFD-AAB6-442C-9368-F91A344146AB}.Debug|Win32.ActiveCfg = Debug|Win32 + {0D604DFD-AAB6-442C-9368-F91A344146AB}.Debug|Win32.Build.0 = Debug|Win32 + {0D604DFD-AAB6-442C-9368-F91A344146AB}.Debug|x64.ActiveCfg = Debug|x64 + {0D604DFD-AAB6-442C-9368-F91A344146AB}.Debug|x64.Build.0 = Debug|x64 + {0D604DFD-AAB6-442C-9368-F91A344146AB}.Release|Win32.ActiveCfg = Release|Win32 + {0D604DFD-AAB6-442C-9368-F91A344146AB}.Release|Win32.Build.0 = Release|Win32 + {0D604DFD-AAB6-442C-9368-F91A344146AB}.Release|x64.ActiveCfg = Release|x64 + {0D604DFD-AAB6-442C-9368-F91A344146AB}.Release|x64.Build.0 = Release|x64 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A5}.Debug|Win32.ActiveCfg = Debug|Win32 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A5}.Debug|Win32.Build.0 = Debug|Win32 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A5}.Debug|x64.ActiveCfg = Debug|x64 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A5}.Debug|x64.Build.0 = Debug|x64 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A5}.Release|Win32.ActiveCfg = Release|Win32 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A5}.Release|Win32.Build.0 = Release|Win32 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A5}.Release|x64.ActiveCfg = Release|x64 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A5}.Release|x64.Build.0 = Release|x64 + {40FB7794-D3C3-4CFE-BCF4-A80C97635682}.Debug|Win32.ActiveCfg = Debug|Win32 + {40FB7794-D3C3-4CFE-BCF4-A80C97635682}.Debug|Win32.Build.0 = Debug|Win32 + {40FB7794-D3C3-4CFE-BCF4-A80C97635682}.Debug|x64.ActiveCfg = Debug|x64 + {40FB7794-D3C3-4CFE-BCF4-A80C97635682}.Debug|x64.Build.0 = Debug|x64 + {40FB7794-D3C3-4CFE-BCF4-A80C97635682}.Release|Win32.ActiveCfg = Release|Win32 + {40FB7794-D3C3-4CFE-BCF4-A80C97635682}.Release|Win32.Build.0 = Release|Win32 + {40FB7794-D3C3-4CFE-BCF4-A80C97635682}.Release|x64.ActiveCfg = Release|x64 + {40FB7794-D3C3-4CFE-BCF4-A80C97635682}.Release|x64.Build.0 = Release|x64 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A4}.Debug|Win32.ActiveCfg = Debug|Win32 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A4}.Debug|Win32.Build.0 = Debug|Win32 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A4}.Debug|x64.ActiveCfg = Debug|x64 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A4}.Debug|x64.Build.0 = Debug|x64 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A4}.Release|Win32.ActiveCfg = Release|Win32 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A4}.Release|Win32.Build.0 = Release|Win32 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A4}.Release|x64.ActiveCfg = Release|x64 + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A4}.Release|x64.Build.0 = Release|x64 + {70B894A9-E306-49E8-ABC2-932A952A5E5F}.Debug|Win32.ActiveCfg = Debug|Win32 + {70B894A9-E306-49E8-ABC2-932A952A5E5F}.Debug|Win32.Build.0 = Debug|Win32 + {70B894A9-E306-49E8-ABC2-932A952A5E5F}.Debug|x64.ActiveCfg = Debug|x64 + {70B894A9-E306-49E8-ABC2-932A952A5E5F}.Debug|x64.Build.0 = Debug|x64 + {70B894A9-E306-49E8-ABC2-932A952A5E5F}.Release|Win32.ActiveCfg = Release|Win32 + {70B894A9-E306-49E8-ABC2-932A952A5E5F}.Release|Win32.Build.0 = Release|Win32 + {70B894A9-E306-49E8-ABC2-932A952A5E5F}.Release|x64.ActiveCfg = Release|x64 + {70B894A9-E306-49E8-ABC2-932A952A5E5F}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {26828762-C95D-4637-9CB1-7F0979523813} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {AAAD1CB5-7ADA-47AE-85A0-08A6EC48FAFB} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {66B32F7E-5716-48D0-B5B9-D832FD052DD5} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {9C7E8C03-3130-436D-A97E-E8F8ED1AC4EA} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {8682FE1E-0CF6-4EDD-9BB5-1733D8C8B4DF} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {CAE4F1D0-314F-4B10-805B-0EFD670133A0} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {8B5CFB38-CCBA-40A8-AD7A-89C57B070884} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {B51E0D74-F0A2-45A2-BD2A-8B7D95B8204A} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {26932B24-EFC6-4E3A-B277-ED653DA37968} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A3} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {2D17C1EB-1157-460E-9A99-A82BFC1F9D1E} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {BFF40245-E9A6-4297-A425-A554E5D767E8} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {5D0930C0-7C91-4ECE-9014-7B7DDE9502E6} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {31A3E4E1-AAE9-4EF3-9B23-18D0924BE4D2} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {40FB7794-D3C3-4CFE-BCF4-A80C96635682} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {55812185-D13C-4022-9C81-32E0F4A08305} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {E9558DFE-1961-4DD4-B09B-DD0EEFD5C315} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {0D604DFD-AAB6-442C-9368-F91A344146AB} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A5} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {40FB7794-D3C3-4CFE-BCF4-A80C97635682} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A4} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + {70B894A9-E306-49E8-ABC2-932A952A5E5F} = {D69D5741-611F-4E14-8541-1FEE94F50B5A} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {C320C9F2-1A8F-41D7-B02B-6338F872BCAD} + EndGlobalSection +EndGlobal diff --git a/vendor/sdl-3.0.0/VisualC/SDL/SDL.vcxproj b/vendor/sdl-3.0.0/VisualC/SDL/SDL.vcxproj new file mode 100644 index 0000000..84e7745 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/SDL/SDL.vcxproj @@ -0,0 +1,678 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + SDL3 + {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68} + SDL + 10.0 + + + + DynamicLibrary + $(DefaultPlatformToolset) + + + DynamicLibrary + $(DefaultPlatformToolset) + + + DynamicLibrary + $(DefaultPlatformToolset) + + + DynamicLibrary + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Lib\x86;$(LibraryPath) + + + $(ProjectDir)/../../src;$(IncludePath) + + + $(ProjectDir)/../../src;$(IncludePath) + + + $(ProjectDir)/../../src;$(IncludePath) + + + $(ProjectDir)/../../src;$(IncludePath) + + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/SDL.tlb + + + Disabled + $(ProjectDir)/../../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + DLL_EXPORT;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + StreamingSIMDExtensions + Level3 + OldStyle + true + OnlyExplicitInline + Use + SDL_internal.h + true + + + _DEBUG;%(PreprocessorDefinitions) + + + setupapi.lib;winmm.lib;imm32.lib;version.lib;%(AdditionalDependencies) + true + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/SDL.tlb + + + Disabled + $(ProjectDir)/../../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + DLL_EXPORT;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + Level3 + OldStyle + true + OnlyExplicitInline + Use + SDL_internal.h + true + + + _DEBUG;%(PreprocessorDefinitions) + + + setupapi.lib;winmm.lib;imm32.lib;version.lib;%(AdditionalDependencies) + true + true + Windows + + + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/SDL.tlb + + + $(ProjectDir)/../../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + DLL_EXPORT;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + StreamingSIMDExtensions + Level3 + ProgramDatabase + true + OnlyExplicitInline + Use + SDL_internal.h + true + + + NDEBUG;%(PreprocessorDefinitions) + + + setupapi.lib;winmm.lib;imm32.lib;version.lib;%(AdditionalDependencies) + true + true + Windows + true + true + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/SDL.tlb + + + $(ProjectDir)/../../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + DLL_EXPORT;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + Level3 + ProgramDatabase + true + OnlyExplicitInline + Use + SDL_internal.h + true + + + NDEBUG;%(PreprocessorDefinitions) + + + setupapi.lib;winmm.lib;imm32.lib;version.lib;%(AdditionalDependencies) + true + true + Windows + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NotUsing + NotUsing + NotUsing + NotUsing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NotUsing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/sdl-3.0.0/VisualC/SDL/SDL.vcxproj.filters b/vendor/sdl-3.0.0/VisualC/SDL/SDL.vcxproj.filters new file mode 100644 index 0000000..23fa7b2 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/SDL/SDL.vcxproj.filters @@ -0,0 +1,1385 @@ + + + + + {395b3af0-33d0-411b-b153-de1676bf1ef8} + + + {5a3e3167-75be-414f-8947-a5306df372b2} + + + {546d9ed1-988e-49d3-b1a5-e5b3d19de6c1} + + + {a56247ff-5108-4960-ba6a-6814fd1554ec} + + + {8880dfad-2a06-4e84-ab6e-6583641ad2d1} + + + {2b996a7f-f3e9-4300-a97f-2c907bcd89a9} + + + {5713d682-2bc7-4da4-bcf0-262a98f142eb} + + + {5e27e19f-b3f8-4e2d-b323-b00b2040ec86} + + + {a3ab9cff-8495-4a5c-8af6-27e43199a712} + + + {377061e4-3856-4f05-b916-0d3b360df0f6} + + + {226a6643-1c65-4c7f-92aa-861313d974bb} + + + {ef859522-a7fe-4a00-a511-d6a9896adf5b} + + + {01fd2642-4493-4316-b548-fb829f4c9125} + + + {cce7558f-590a-4f0a-ac0d-e579f76e588e} + + + {7a53c9e4-d4bd-40ed-9265-1625df685121} + + + {4c7a051c-ce7c-426c-bf8c-9187827f9052} + + + {97e2f79f-311b-42ea-81b2-e801649fdd93} + + + {baf97c8c-7e90-41e5-bff8-14051b8d3956} + + + {45e50d3a-56c9-4352-b811-0c60c49a2431} + + + {9d86e0ef-d6f6-4db2-bfc5-b3529406fa8d} + + + {b35fa13c-6ed2-4680-8c56-c7d71b76ceab} + + + {61b61b31-9e26-4171-a3bb-b969f1889726} + + + {f63aa216-6ee7-4143-90d3-32be3787f276} + + + {90bee923-89df-417f-a6c3-3e260a7dd54d} + + + {4c8ad943-c2fb-4014-9ca3-041e0ad08426} + + + {3d68ae70-a9ff-46cf-be69-069f0b02aca0} + + + {ebc2fca3-3c26-45e3-815e-3e0581d5e226} + + + {47c445a2-7014-4e15-9660-7c89a27dddcf} + + + {d008487d-6ed0-4251-848b-79a68e3c1459} + + + {c9e8273e-13ae-47dc-bef8-8ad8e64c9a3d} + + + {0b8e136d-56ae-47e7-9981-e863a57ac616} + + + {bf3febd3-9328-43e8-b196-0fd3be8177dd} + + + {1a62dc68-52d2-4c07-9d81-d94dfe1d0d12} + + + {e9f01b22-34b3-4380-ade6-0e96c74e9c90} + + + {f674f22f-7841-4f3a-974e-c36b2d4823fc} + + + {d7ad92de-4e55-4202-9b2b-1bd9a35fe4dc} + + + {8311d79d-9ad5-4369-99fe-b2fb2659d402} + + + {6c4dfb80-fdf9-497c-a6ff-3cd8f22efde9} + + + {4810e35c-33cb-4da2-bfaf-452da20d3c9a} + + + {2cf93f1d-81fd-4bdc-998c-5e2fa43988bc} + + + {5752b7ab-2344-4f38-95ab-b5d3bc150315} + + + {7a0eae3d-f113-4914-b926-6816d1929250} + + + {ee602cbf-96a2-4b0b-92a9-51d38a727411} + + + {a812185b-9060-4a1c-8431-be4f66894626} + + + {31c16cdf-adc4-4950-8293-28ba530f3882} + + + {add61b53-8144-47d6-bd67-3420a87c4905} + + + {e7cdcf36-b462-49c7-98b7-07ea7b3687f4} + + + {82588eef-dcaa-4f69-b2a9-e675940ce54c} + + + {560239c3-8fa1-4d23-a81a-b8408b2f7d3f} + + + {81711059-7575-4ece-9e68-333b63e992c4} + + + {1e44970f-7535-4bfb-b8a5-ea0cea0349e0} + + + {1dd91224-1176-492b-a2cb-e26153394db0} + + + {e3ecfe50-cf22-41d3-8983-2fead5164b47} + + + {5521d22f-1e52-47a6-8c52-06a3b6bdefd7} + + + {4755f3a6-49ac-46d6-86be-21f5c21f2197} + + + {f48c2b17-1bee-4fec-a7c8-24cf619abe08} + + + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + + + + API Headers + + + API Headers + + + API Headers + + + audio + + + audio + + + audio + + + audio + + + audio + + + audio + + + core\windows + + + core\windows + + + core\windows + + + core\windows + + + core\windows + + + dynapi + + + dynapi + + + dynapi + + + dynapi + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + haptic + + + haptic + + + joystick + + + joystick + + + joystick + + + joystick + + + joystick + + + joystick + + + libm + + + libm + + + hidapi\hidapi + + + locale + + + misc + + + audio\directsound + + + audio\disk + + + audio\dummy + + + audio\wasapi + + + haptic\windows + + + haptic\windows + + + haptic\windows + + + joystick\hidapi + + + joystick\hidapi + + + joystick\windows + + + joystick\windows + + + joystick\windows + + + joystick\windows + + + joystick\virtual + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video\dummy + + + video\dummy + + + video\dummy + + + video\yuv2rgb + + + video\yuv2rgb + + + video\yuv2rgb + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + timer + + + thread + + + thread + + + thread\windows + + + thread\windows + + + thread\generic + + + sensor + + + sensor + + + sensor\dummy + + + sensor\windows + + + render + + + render + + + render + + + render\direct3d + + + render\direct3d11 + + + render\opengl + + + render\opengl + + + render\opengles2 + + + render\opengles2 + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + power + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + + + + + + render\direct3d12 + + + + + + + + + + + + + + + + audio + + + audio + + + audio + + + audio + + + audio + + + audio + + + audio + + + audio + + + atomic + + + atomic + + + core + + + core + + + core\windows + + + core\windows + + + core\windows + + + core\windows + + + cpuinfo + + + dynapi + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + file + + + filesystem\windows + + + haptic + + + hidapi + + + joystick + + + joystick + + + joystick + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + libm + + + loadso\windows + + + misc + + + misc\windows + + + locale\windows + + + locale + + + audio\directsound + + + audio\disk + + + audio\dummy + + + audio\wasapi + + + audio\wasapi + + + haptic\windows + + + haptic\windows + + + haptic\windows + + + haptic\dummy + + + joystick\dummy + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\windows + + + joystick\windows + + + joystick\windows + + + joystick\windows + + + joystick\windows + + + joystick\virtual + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video\dummy + + + video\dummy + + + video\dummy + + + video\yuv2rgb + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + timer + + + timer\windows + + + thread + + + thread\windows + + + thread\windows + + + thread\windows + + + thread\windows + + + thread\windows + + + thread\windows + + + thread\generic + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + sensor + + + sensor\dummy + + + sensor\windows + + + render + + + render + + + render + + + render + + + render\direct3d + + + render\direct3d + + + render\direct3d11 + + + render\direct3d11 + + + render\opengl + + + render\opengl + + + render\opengles2 + + + render\opengles2 + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + power + + + + power\windows + + + render\direct3d12 + + + render\direct3d12 + + + core\windows + + + stdlib + + + stdlib + + + + + + diff --git a/vendor/sdl-3.0.0/VisualC/SDL_test/SDL_test.vcxproj b/vendor/sdl-3.0.0/VisualC/SDL_test/SDL_test.vcxproj new file mode 100644 index 0000000..f69b2e5 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/SDL_test/SDL_test.vcxproj @@ -0,0 +1,175 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + SDL3_test + {DA956FD3-E143-46F2-9FE5-C77BEBC56B1A} + SDL_test + 10.0 + + + + StaticLibrary + $(DefaultPlatformToolset) + + + StaticLibrary + $(DefaultPlatformToolset) + + + StaticLibrary + $(DefaultPlatformToolset) + + + StaticLibrary + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + + + + + $(ProjectDir)/../../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MultiThreadedDLL + false + StreamingSIMDExtensions + Level3 + OldStyle + true + true + + + + + X64 + + + $(ProjectDir)/../../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MultiThreadedDLL + false + Level3 + OldStyle + true + true + + + + + + + + + Disabled + $(ProjectDir)/../../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + false + StreamingSIMDExtensions + Level3 + OldStyle + true + true + + + + + X64 + + + Disabled + $(ProjectDir)/../../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + false + Level3 + OldStyle + true + true + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/clean.sh b/vendor/sdl-3.0.0/VisualC/clean.sh new file mode 100644 index 0000000..fd16f9a --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/clean.sh @@ -0,0 +1,4 @@ +#!/bin/sh +find . -type f \( -name '*.user' -o -name '*.sdf' -o -name '*.ncb' -o -name '*.suo' \) -print -delete +find . -type f \( -name '*.bmp' -o -name '*.wav' -o -name '*.dat' \) -print -delete +find . -depth -type d \( -name Win32 -o -name x64 \) -exec rm -rv {} \; diff --git a/vendor/sdl-3.0.0/VisualC/pkg-support/cmake/sdl3-config-version.cmake b/vendor/sdl-3.0.0/VisualC/pkg-support/cmake/sdl3-config-version.cmake new file mode 100644 index 0000000..3c455dc --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/pkg-support/cmake/sdl3-config-version.cmake @@ -0,0 +1,54 @@ +# based on the files generated by CMake's write_basic_package_version_file + +# SDL CMake version configuration file: +# This file is meant to be placed in a cmake subfolder of SDL3-devel-3.x.y-VC + +if(NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/../include/SDL3/SDL_version.h") + message(AUTHOR_WARNING "Could not find SDL3/SDL_version.h. This script is meant to be placed in the root of SDL3-devel-3.x.y-VC") + return() +endif() + +file(READ "${CMAKE_CURRENT_LIST_DIR}/../include/SDL3/SDL_version.h" _sdl_version_h) +string(REGEX MATCH "#define[ \t]+SDL_MAJOR_VERSION[ \t]+([0-9]+)" _sdl_major_re "${_sdl_version_h}") +set(_sdl_major "${CMAKE_MATCH_1}") +string(REGEX MATCH "#define[ \t]+SDL_MINOR_VERSION[ \t]+([0-9]+)" _sdl_minor_re "${_sdl_version_h}") +set(_sdl_minor "${CMAKE_MATCH_1}") +string(REGEX MATCH "#define[ \t]+SDL_PATCHLEVEL[ \t]+([0-9]+)" _sdl_patch_re "${_sdl_version_h}") +set(_sdl_patch "${CMAKE_MATCH_1}") +if(_sdl_major_re AND _sdl_minor_re AND _sdl_patch_re) + set(PACKAGE_VERSION "${_sdl_major}.${_sdl_minor}.${_sdl_patch}") +else() + message(AUTHOR_WARNING "Could not extract version from SDL3/SDL_version.h.") + return() +endif() + +if(PACKAGE_FIND_VERSION_RANGE) + # Package version must be in the requested version range + if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN) + OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX))) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + endif() +else() + if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() + endif() +endif() + +# if the using project doesn't have CMAKE_SIZEOF_VOID_P set, fail. +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT (CMAKE_SIZEOF_VOID_P STREQUAL "8" OR CMAKE_SIZEOF_VOID_P STREQUAL "4")) + set(PACKAGE_VERSION "${PACKAGE_VERSION} (32+64bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/vendor/sdl-3.0.0/VisualC/pkg-support/cmake/sdl3-config.cmake b/vendor/sdl-3.0.0/VisualC/pkg-support/cmake/sdl3-config.cmake new file mode 100644 index 0000000..4a9b4ac --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/pkg-support/cmake/sdl3-config.cmake @@ -0,0 +1,129 @@ +# SDL CMake configuration file: +# This file is meant to be placed in a cmake subfolder of SDL3-devel-3.x.y-VC + +cmake_minimum_required(VERSION 3.0) + +include(FeatureSummary) +set_package_properties(SDL3 PROPERTIES + URL "https://www.libsdl.org/" + DESCRIPTION "low level access to audio, keyboard, mouse, joystick, and graphics hardware" +) + +# Copied from `configure_package_config_file` +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +# Copied from `configure_package_config_file` +macro(check_required_components _NAME) + foreach(comp ${${_NAME}_FIND_COMPONENTS}) + if(NOT ${_NAME}_${comp}_FOUND) + if(${_NAME}_FIND_REQUIRED_${comp}) + set(${_NAME}_FOUND FALSE) + endif() + endif() + endforeach() +endmacro() + +set(SDL3_FOUND TRUE) + +if(CMAKE_SIZEOF_VOID_P STREQUAL "4") + set(_sdl_arch_subdir "x86") +elseif(CMAKE_SIZEOF_VOID_P STREQUAL "8") + set(_sdl_arch_subdir "x64") +else() + set(SDL3_FOUND FALSE) + return() +endif() + +set_and_check(_sdl3_prefix "${CMAKE_CURRENT_LIST_DIR}/..") +set(_sdl3_include_dirs "${_sdl3_prefix}/include") +unset(_sdl3_prefix) + +set(SDL3_LIBRARIES SDL3::SDL3) +set(SDL3TEST_LIBRARY SDL3::SDL3_test) + + +# All targets are created, even when some might not be requested though COMPONENTS. +# This is done for compatibility with CMake generated SDL3-target.cmake files. + +if(NOT TARGET SDL3::Headers) + add_library(SDL3::Headers INTERFACE IMPORTED) + set_target_properties(SDL3::SDL3 + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_sdl3_include_dirs}" + ) +endif() +set(SDL3_Headers_FOUND TRUE) +unset(_sdl3_include_dirs) + +set(_sdl3_library "${SDL3_LIBDIR}/SDL3.lib") +set(_sdl3_dll_library "${SDL3_BINDIR}/SDL3.dll") +if(EXISTS "${_sdl3_library}" AND EXISTS "${_sdl3_dll_library}") + if(NOT TARGET SDL3::SDL3-shared) + add_library(SDL3::SDL3-shared SHARED IMPORTED) + set_target_properties(SDL3::SDL3-shared + PROPERTIES + INTERFACE_LINK_LIBRARIES "SDL3::Headers" + IMPORTED_IMPLIB "${_sdl3_library}" + IMPORTED_LOCATION "${_sdl3_dll_library}" + COMPATIBLE_INTERFACE_BOOL "SDL3_SHARED" + INTERFACE_SDL3_SHARED "ON" + COMPATIBLE_INTERFACE_STRING "SDL_VERSION" + INTERFACE_SDL_VERSION "SDL3" + ) + endif() + set(SDL3_SDL3-shared_FOUND TRUE) +else() + set(SDL3_SDL3-shared_FOUND FALSE) +endif() +unset(_sdl3_library) +unset(_sdl3_dll_library) + +set(SDL3_SDL3-static_FOUND FALSE) + +set(_sdl3test_library "${SDL3_LIBDIR}/SDL3_test.lib") +if(EXISTS "${_sdl3test_library}") + if(NOT TARGET SDL3::SDL3_test) + add_library(SDL3::SDL3_test STATIC IMPORTED) + set_target_properties(SDL3::SDL3_test + PROPERTIES + INTERFACE_LINK_LIBRARIES "SDL3::Headers" + IMPORTED_LOCATION "${_sdl3test_library}" + COMPATIBLE_INTERFACE_STRING "SDL_VERSION" + INTERFACE_SDL_VERSION "SDL3" + ) + endif() + set(SDL3_SDL3_test_FOUND TRUE) +else() + set(SDL3_SDL3_test_FOUND FALSE) +endif() +unset(_sdl3test_library) + +if(SDL3_SDL3-shared_FOUND OR SDL3_SDL3-static_FOUND) + set(SDL3_SDL3_FOUND TRUE) +endif() + +function(_sdl_create_target_alias_compat NEW_TARGET TARGET) + if(CMAKE_VERSION VERSION_LESS "3.18") + # Aliasing local targets is not supported on CMake < 3.18, so make it global. + add_library(${NEW_TARGET} INTERFACE IMPORTED) + set_target_properties(${NEW_TARGET} PROPERTIES INTERFACE_LINK_LIBRARIES "${TARGET}") + else() + add_library(${NEW_TARGET} ALIAS ${TARGET}) + endif() +endfunction() + +# Make sure SDL3::SDL3 always exists +if(NOT TARGET SDL3::SDL3) + if(TARGET SDL3::SDL3-shared) + _sdl_create_target_alias_compat(SDL3::SDL3 SDL3::SDL3-shared) + else() + _sdl_create_target_alias_compat(SDL3::SDL3 SDL3::SDL3-static) + endif() +endif() + +check_required_components(SDL3) diff --git a/vendor/sdl-3.0.0/VisualC/tests/checkkeys/checkkeys.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/checkkeys/checkkeys.vcxproj new file mode 100644 index 0000000..cb3f0ee --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/checkkeys/checkkeys.vcxproj @@ -0,0 +1,219 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {26828762-C95D-4637-9CB1-7F0979523813} + checkkeys + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/checkkeys.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/checkkeys.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/checkkeys.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + + + .\Release/checkkeys.pch + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/checkkeys.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + + + .\Release/checkkeys.pch + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + $(SolutionDir)$(Platform)\$(Configuration);%(AdditionalIncludeDirectories) + $(Platform)\$(Configuration)\;%(AdditionalUsingDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + $(SolutionDir)$(Platform)\$(Configuration);%(AdditionalIncludeDirectories) + $(Platform)\$(Configuration)\;%(AdditionalUsingDirectories) + $(SolutionDir)$(Platform)\$(Configuration);%(AdditionalIncludeDirectories) + $(Platform)\$(Configuration)\;%(AdditionalUsingDirectories) + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/loopwave/loopwave.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/loopwave/loopwave.vcxproj new file mode 100644 index 0000000..d755abe --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/loopwave/loopwave.vcxproj @@ -0,0 +1,231 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {AAAD1CB5-7ADA-47AE-85A0-08A6EC48FAFB} + loopwave + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/loopwave.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + + + .\Release/loopwave.pch + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/loopwave.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + + + .\Release/loopwave.pch + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/loopwave.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/loopwave.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + + + + + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testatomic/testatomic.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testatomic/testatomic.vcxproj new file mode 100644 index 0000000..d8b7bf9 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testatomic/testatomic.vcxproj @@ -0,0 +1,204 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {66B32F7E-5716-48D0-B5B9-D832FD052DD5} + testatomic + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testatomic.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testatomic.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testatomic.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testatomic.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testautomation/testautomation.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testautomation/testautomation.vcxproj new file mode 100644 index 0000000..fd1f86c --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testautomation/testautomation.vcxproj @@ -0,0 +1,231 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {9C7E8C03-3130-436D-A97E-E8F8ED1AC4EA} + testautomation + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testautomation.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testautomation.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testautomation.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testautomation.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/sdl-3.0.0/VisualC/tests/testcontroller/testcontroller.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testcontroller/testcontroller.vcxproj new file mode 100644 index 0000000..5bdcc3b --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testcontroller/testcontroller.vcxproj @@ -0,0 +1,206 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {55812185-D13C-4022-9C81-32E0F4A08305} + testcontroller + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testcontroller.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testcontroller.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testcontroller.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testcontroller.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + + + + + + + diff --git a/vendor/sdl-3.0.0/VisualC/tests/testdraw/testdraw.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testdraw/testdraw.vcxproj new file mode 100644 index 0000000..9e985c3 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testdraw/testdraw.vcxproj @@ -0,0 +1,204 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {8682FE1E-0CF6-4EDD-9BB5-1733D8C8B4DF} + testdraw + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testdraw.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testdraw.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testdraw.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testdraw.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testfile/testfile.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testfile/testfile.vcxproj new file mode 100644 index 0000000..f0e138e --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testfile/testfile.vcxproj @@ -0,0 +1,204 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {CAE4F1D0-314F-4B10-805B-0EFD670133A0} + testfile + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testfile.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testfile.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testfile.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testfile.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testgl/testgl.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testgl/testgl.vcxproj new file mode 100644 index 0000000..02dc5c6 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testgl/testgl.vcxproj @@ -0,0 +1,208 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {8B5CFB38-CCBA-40A8-AD7A-89C57B070884} + testgl + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testgl.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + _DEBUG;WIN32;_WINDOWS;HAVE_OPENGL;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + opengl32.lib;%(AdditionalDependencies) + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testgl.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + _DEBUG;WIN32;_WINDOWS;HAVE_OPENGL;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + opengl32.lib;%(AdditionalDependencies) + true + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testgl.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + NDEBUG;WIN32;_WINDOWS;HAVE_OPENGL;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + opengl32.lib;%(AdditionalDependencies) + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testgl.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + NDEBUG;WIN32;_WINDOWS;HAVE_OPENGL;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + opengl32.lib;%(AdditionalDependencies) + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testgles2/testgles2.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testgles2/testgles2.vcxproj new file mode 100644 index 0000000..153b64f --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testgles2/testgles2.vcxproj @@ -0,0 +1,204 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {E9558DFE-1961-4DD4-B09B-DD0EEFD5C315} + testgles2 + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testgles2.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_WINDOWS;HAVE_OPENGL;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + opengl32.lib;%(AdditionalDependencies) + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testgles2.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_WINDOWS;HAVE_OPENGL;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + opengl32.lib;%(AdditionalDependencies) + true + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testgles2.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;HAVE_OPENGL;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + opengl32.lib;%(AdditionalDependencies) + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testgles2.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;HAVE_OPENGL;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + opengl32.lib;%(AdditionalDependencies) + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testoverlay/testoverlay.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testoverlay/testoverlay.vcxproj new file mode 100644 index 0000000..851bc2f --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testoverlay/testoverlay.vcxproj @@ -0,0 +1,225 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {B51E0D74-F0A2-45A2-BD2A-8B7D95B8204A} + testoverlay + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testoverlay.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testoverlay.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testoverlay.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testoverlay.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testplatform/testplatform.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testplatform/testplatform.vcxproj new file mode 100644 index 0000000..b88aa4f --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testplatform/testplatform.vcxproj @@ -0,0 +1,232 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {26932B24-EFC6-4E3A-B277-ED653DA37968} + testplatform + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testplatform.tlb + + + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + .\Debug/testplatform.pch + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + true + .\Debug/testplatform.bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testplatform.tlb + + + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + .\Debug/testplatform.pch + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + true + .\Debug/testplatform.bsc + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testplatform.tlb + + + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + .\Release/testplatform.pch + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + true + .\Release/testplatform.bsc + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testplatform.tlb + + + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + .\Release/testplatform.pch + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + true + .\Release/testplatform.bsc + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testpower/testpower.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testpower/testpower.vcxproj new file mode 100644 index 0000000..308555f --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testpower/testpower.vcxproj @@ -0,0 +1,204 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A3} + testpower + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testpower.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testpower.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testpower.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testpower.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testrendertarget/testrendertarget.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testrendertarget/testrendertarget.vcxproj new file mode 100644 index 0000000..23f4466 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testrendertarget/testrendertarget.vcxproj @@ -0,0 +1,243 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {2D17C1EB-1157-460E-9A99-A82BFC1F9D1E} + testrendertarget + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testrendertarget.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testrendertarget.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testrendertarget.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testrendertarget.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + + + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testrumble/testrumble.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testrumble/testrumble.vcxproj new file mode 100644 index 0000000..6fab2f9 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testrumble/testrumble.vcxproj @@ -0,0 +1,204 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {BFF40245-E9A6-4297-A425-A554E5D767E8} + testrumble + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testrumble.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testrumble.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testrumble.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testrumble.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testscale/testscale.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testscale/testscale.vcxproj new file mode 100644 index 0000000..4e4c6f5 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testscale/testscale.vcxproj @@ -0,0 +1,243 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {5D0930C0-7C91-4ECE-9014-7B7DDE9502E6} + testscale + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testscale.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testscale.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testscale.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testscale.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + + + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testsensor/testsensor.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testsensor/testsensor.vcxproj new file mode 100644 index 0000000..cf480e5 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testsensor/testsensor.vcxproj @@ -0,0 +1,204 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A4} + testsensor + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testsensor.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testsensor.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testsensor.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testsensor.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testshape/testshape.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testshape/testshape.vcxproj new file mode 100644 index 0000000..1c59aa4 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testshape/testshape.vcxproj @@ -0,0 +1,204 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {31A3E4E1-AAE9-4EF3-9B23-18D0924BE4D2} + testshape + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testshape.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testshape.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testshape.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testshape.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testsprite/testsprite.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testsprite/testsprite.vcxproj new file mode 100644 index 0000000..fa00f8e --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testsprite/testsprite.vcxproj @@ -0,0 +1,225 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {40FB7794-D3C3-4CFE-BCF4-A80C96635682} + testsprite + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testsprite.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testsprite.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testsprite.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testsprite.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testsurround/testsurround.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testsurround/testsurround.vcxproj new file mode 100644 index 0000000..47c5cff --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testsurround/testsurround.vcxproj @@ -0,0 +1,210 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {70B894A9-E306-49E8-ABC2-932A952A5E5F} + testsurround + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testsurround.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + + + .\Release/testsurround.pch + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Console + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testsurround.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + + + .\Release/testsurround.pch + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Console + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testsurround.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Console + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testsurround.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Console + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testvulkan/testvulkan.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testvulkan/testvulkan.vcxproj new file mode 100644 index 0000000..3fb60d7 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testvulkan/testvulkan.vcxproj @@ -0,0 +1,200 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {0D604DFD-AAB6-442C-9368-F91A344146AB} + testvulkan + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testvulkan.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + _DEBUG;WIN32;_WINDOWS;HAVE_OPENGL;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testvulkan.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + _DEBUG;WIN32;_WINDOWS;HAVE_OPENGL;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testvulkan.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + NDEBUG;WIN32;_WINDOWS;HAVE_OPENGL;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testvulkan.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + NDEBUG;WIN32;_WINDOWS;HAVE_OPENGL;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testwm/testwm.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testwm/testwm.vcxproj new file mode 100644 index 0000000..cbff837 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testwm/testwm.vcxproj @@ -0,0 +1,204 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {C4E04D18-EF76-4B42-B4C2-16A1BACDC0A5} + testwm + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testwm.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testwm.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testwm.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testwm.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/VisualC/tests/testyuv/testyuv.vcxproj b/vendor/sdl-3.0.0/VisualC/tests/testyuv/testyuv.vcxproj new file mode 100644 index 0000000..9df29c3 --- /dev/null +++ b/vendor/sdl-3.0.0/VisualC/tests/testyuv/testyuv.vcxproj @@ -0,0 +1,229 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {40FB7794-D3C3-4CFE-BCF4-A80C97635682} + testyuv + 10.0 + + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + Application + $(DefaultPlatformToolset) + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/testyuv.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/testyuv.tlb + + + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/testyuv.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/testyuv.tlb + + + Disabled + $(SolutionDir)/../include;%(AdditionalIncludeDirectories) + %(AdditionalUsingDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + OldStyle + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + Windows + + + + + {81ce8daf-ebb2-4761-8e45-b71abcca8c68} + false + false + true + + + {da956fd3-e143-46f2-9fe5-c77bebc56b1a} + false + false + true + + + + + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + Copying %(Filename)%(Extension) + copy "%(FullPath)" "$(ProjectDir)\" + + $(ProjectDir)\%(Filename)%(Extension);%(Outputs) + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/sdl-3.0.0/WhatsNew.txt b/vendor/sdl-3.0.0/WhatsNew.txt new file mode 100644 index 0000000..1b84c49 --- /dev/null +++ b/vendor/sdl-3.0.0/WhatsNew.txt @@ -0,0 +1,32 @@ + +This is a list of major changes in SDL's version history. + +--------------------------------------------------------------------------- +3.2.0: +--------------------------------------------------------------------------- + +General: +* SDL headers should now be included as `#include ` +* Many functions and symbols have changed since SDL 2.0, see the [migration guide](docs/README-migration.md) for details +* The preprocessor symbol __MACOSX__ has been renamed __MACOS__ +* The preprocessor symbol __IPHONEOS__ has been renamed __IOS__ +* SDL_stdinc.h no longer includes stdio.h, stdlib.h, etc., it only provides the SDL C runtime functionality +* SDL_intrin.h now includes the intrinsics headers that were in SDL_cpuinfo.h +* Added SDL_GetSystemTheme() to return whether the system is using a dark or light color theme, and SDL_EVENT_SYSTEM_THEME_CHANGED is sent when this changes +* Added SDL_GetDisplays() to return a list of connected displays +* Added SDL_GetPrimaryDisplay() to get the instance ID of the primary display +* Added SDL_GetWindowParent() to get the parent of popup windows +* Added SDL_CreateSurface() and SDL_CreateSurfaceFrom() which replace SDL_CreateRGBSurface*(), and can also be used to create YUV surfaces +* Added SDL_GetJoysticks(), SDL_GetJoystickInstanceName(), SDL_GetJoystickInstancePath(), SDL_GetJoystickInstancePlayerIndex(), SDL_GetJoystickInstanceGUID(), SDL_GetJoystickInstanceVendor(), SDL_GetJoystickInstanceProduct(), SDL_GetJoystickInstanceProductVersion(), and SDL_GetJoystickInstanceType() to directly query the list of available joysticks +* Added SDL_GetGamepads(), SDL_GetGamepadInstanceName(), SDL_GetGamepadInstancePath(), SDL_GetGamepadInstancePlayerIndex(), SDL_GetGamepadInstanceGUID(), SDL_GetGamepadInstanceVendor(), SDL_GetGamepadInstanceProduct(), SDL_GetGamepadInstanceProductVersion(), and SDL_GetGamepadInstanceType() to directly query the list of available gamepads +* Added SDL_GetSensors(), SDL_GetSensorInstanceName(), SDL_GetSensorInstanceType(), and SDL_GetSensorInstanceNonPortableType() to directly query the list of available sensors +* SDL_GetTicks() now returns a 64-bit value and the tick values should be directly compared instead of using the SDL_TICKS_PASSED macro +* Added SDL_GetTicksNS() to return the number of nanoseconds since the SDL library initialized +* Added SDL_DelayNS() to specify a delay in nanoseconds, to the highest precision the system will support +* The timestamp member of the SDL_Event structure is now in nanoseconds, filled in with the time the event was generated, or the time it was queued if that's not available +* Added SDL_modf() and SDL_modff() to separate the whole and fractional portions of a floating point number +* Added SDL_aligned_alloc() and SDL_aligned_free() to allocate and free memory with a given alignment +* Added SDL_GetRenderVSync() to get vsync of the given renderer +* Added SDL_PlayAudioDevice() to start audio playback +* Added SDL_ConvertAudioSamples() to convert audio samples from one format to another +* Added the hint SDL_HINT_ANDROID_ALLOW_RECREATE_ACTIVITY to control re-creation of Android SDL activity. diff --git a/vendor/sdl-3.0.0/Xcode/SDL/Info-Framework.plist b/vendor/sdl-3.0.0/Xcode/SDL/Info-Framework.plist new file mode 100644 index 0000000..65acdef --- /dev/null +++ b/vendor/sdl-3.0.0/Xcode/SDL/Info-Framework.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleGetInfoString + http://www.libsdl.org + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Simple DirectMedia Layer + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.0.0 + CFBundleSignature + SDLX + CFBundleVersion + 3.0.0 + + diff --git a/vendor/sdl-3.0.0/Xcode/SDL/SDL.xcodeproj/project.pbxproj b/vendor/sdl-3.0.0/Xcode/SDL/SDL.xcodeproj/project.pbxproj new file mode 100644 index 0000000..279a748 --- /dev/null +++ b/vendor/sdl-3.0.0/Xcode/SDL/SDL.xcodeproj/project.pbxproj @@ -0,0 +1,2811 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXAggregateTarget section */ + F3676F582A7885080091160D /* SDL3.dmg */ = { + isa = PBXAggregateTarget; + buildConfigurationList = F3676F592A7885080091160D /* Build configuration list for PBXAggregateTarget "SDL3.dmg" */; + buildPhases = ( + F3676F5E2A78852D0091160D /* ShellScript */, + ); + dependencies = ( + F3676F5D2A7885130091160D /* PBXTargetDependency */, + ); + name = SDL3.dmg; + productName = "Create DMG"; + }; + F3B38CEC296F63B6005DA6D3 /* SDL3.xcframework */ = { + isa = PBXAggregateTarget; + buildConfigurationList = F3B38CED296F63B6005DA6D3 /* Build configuration list for PBXAggregateTarget "SDL3.xcframework" */; + buildPhases = ( + F3B38CF0296F63D1005DA6D3 /* ShellScript */, + ); + dependencies = ( + ); + name = SDL3.xcframework; + productName = xcFramework; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 000040E76FDC6AE48CBF0000 /* SDL_hashtable.c in Sources */ = {isa = PBXBuildFile; fileRef = 000078E1881E857EBB6C0000 /* SDL_hashtable.c */; }; + 007317A40858DECD00B2BC32 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179D0858DECD00B2BC32 /* Cocoa.framework */; platformFilters = (macos, ); }; + 007317A60858DECD00B2BC32 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179F0858DECD00B2BC32 /* IOKit.framework */; platformFilters = (ios, maccatalyst, macos, ); }; + 00CFA89D106B4BA100758660 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00CFA89C106B4BA100758660 /* ForceFeedback.framework */; platformFilters = (macos, ); }; + 00D0D08410675DD9004B05EF /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00D0D08310675DD9004B05EF /* CoreFoundation.framework */; platformFilters = (ios, maccatalyst, macos, tvos, watchos, ); }; + 00D0D0D810675E46004B05EF /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 007317C10858E15000B2BC32 /* Carbon.framework */; platformFilters = (macos, ); }; + 557D0CFA254586CA003913E3 /* CoreHaptics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F37DC5F225350EBC0002E6F7 /* CoreHaptics.framework */; platformFilters = (ios, maccatalyst, macos, tvos, ); }; + 557D0CFB254586D7003913E3 /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDABD23E28B6200529352 /* GameController.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + 5616CA4C252BB2A6005D5928 /* SDL_url.c in Sources */ = {isa = PBXBuildFile; fileRef = 5616CA49252BB2A5005D5928 /* SDL_url.c */; }; + 5616CA4D252BB2A6005D5928 /* SDL_sysurl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5616CA4A252BB2A6005D5928 /* SDL_sysurl.h */; }; + 5616CA4E252BB2A6005D5928 /* SDL_sysurl.m in Sources */ = {isa = PBXBuildFile; fileRef = 5616CA4B252BB2A6005D5928 /* SDL_sysurl.m */; }; + 564624361FF821C20074AC87 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564624351FF821B80074AC87 /* QuartzCore.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + 564624381FF821DA0074AC87 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564624371FF821CB0074AC87 /* Metal.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + 566E26CF246274CC00718109 /* SDL_syslocale.m in Sources */ = {isa = PBXBuildFile; fileRef = 566E26CC246274CB00718109 /* SDL_syslocale.m */; }; + 566E26D8246274CC00718109 /* SDL_locale.c in Sources */ = {isa = PBXBuildFile; fileRef = 566E26CD246274CB00718109 /* SDL_locale.c */; }; + 566E26E1246274CC00718109 /* SDL_syslocale.h in Headers */ = {isa = PBXBuildFile; fileRef = 566E26CE246274CC00718109 /* SDL_syslocale.h */; }; + 56A2373329F9C113003CCA5F /* SDL_sysrwlock.c in Sources */ = {isa = PBXBuildFile; fileRef = 56A2373229F9C113003CCA5F /* SDL_sysrwlock.c */; }; + 75E0915A241EA924004729E1 /* SDL_virtualjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = 75E09158241EA924004729E1 /* SDL_virtualjoystick.c */; }; + 75E09163241EA924004729E1 /* SDL_virtualjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 75E09159241EA924004729E1 /* SDL_virtualjoystick_c.h */; }; + 9846B07C287A9020000C35C8 /* SDL_hidapi_shield.c in Sources */ = {isa = PBXBuildFile; fileRef = 9846B07B287A9020000C35C8 /* SDL_hidapi_shield.c */; }; + A1626A3E2617006A003F1973 /* SDL_triangle.c in Sources */ = {isa = PBXBuildFile; fileRef = A1626A3D2617006A003F1973 /* SDL_triangle.c */; }; + A1626A522617008D003F1973 /* SDL_triangle.h in Headers */ = {isa = PBXBuildFile; fileRef = A1626A512617008C003F1973 /* SDL_triangle.h */; }; + A1BB8B6327F6CF330057CFA8 /* SDL_list.c in Sources */ = {isa = PBXBuildFile; fileRef = A1BB8B6127F6CF320057CFA8 /* SDL_list.c */; }; + A1BB8B6C27F6CF330057CFA8 /* SDL_list.h in Headers */ = {isa = PBXBuildFile; fileRef = A1BB8B6227F6CF330057CFA8 /* SDL_list.h */; }; + A7381E961D8B69D600B177DD /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7381E951D8B69D600B177DD /* CoreAudio.framework */; platformFilters = (ios, maccatalyst, macos, tvos, watchos, ); }; + A7381E971D8B6A0300B177DD /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7381E931D8B69C300B177DD /* AudioToolbox.framework */; platformFilters = (ios, maccatalyst, macos, tvos, ); }; + A75FDB5823E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; }; + A75FDBB723E4CBC700529352 /* License.txt in Resources */ = {isa = PBXBuildFile; fileRef = 00794D3F09D0C461003FC8A1 /* License.txt */; }; + A75FDBB823E4CBC700529352 /* ReadMe.txt in Resources */ = {isa = PBXBuildFile; fileRef = F59C710300D5CB5801000001 /* ReadMe.txt */; }; + A75FDBC523EA380300529352 /* SDL_hidapi_rumble.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDBC323EA380300529352 /* SDL_hidapi_rumble.h */; }; + A75FDBCE23EA380300529352 /* SDL_hidapi_rumble.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDBC423EA380300529352 /* SDL_hidapi_rumble.c */; }; + A7D8A94B23E2514000DCD162 /* SDL.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57123E2513D00DCD162 /* SDL.c */; }; + A7D8A95123E2514000DCD162 /* SDL_spinlock.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57323E2513D00DCD162 /* SDL_spinlock.c */; }; + A7D8A95723E2514000DCD162 /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57423E2513D00DCD162 /* SDL_atomic.c */; }; + A7D8A95D23E2514000DCD162 /* SDL_error_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57523E2513D00DCD162 /* SDL_error_c.h */; }; + A7D8A96323E2514000DCD162 /* SDL_dummysensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57823E2513D00DCD162 /* SDL_dummysensor.h */; }; + A7D8A96923E2514000DCD162 /* SDL_dummysensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57923E2513D00DCD162 /* SDL_dummysensor.c */; }; + A7D8A96F23E2514000DCD162 /* SDL_coremotionsensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57B23E2513D00DCD162 /* SDL_coremotionsensor.h */; }; + A7D8A97523E2514000DCD162 /* SDL_coremotionsensor.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57C23E2513D00DCD162 /* SDL_coremotionsensor.m */; }; + A7D8A97B23E2514000DCD162 /* SDL_syssensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57D23E2513D00DCD162 /* SDL_syssensor.h */; }; + A7D8A98D23E2514000DCD162 /* SDL_sensor_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58123E2513D00DCD162 /* SDL_sensor_c.h */; }; + A7D8A99323E2514000DCD162 /* SDL_sensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A58223E2513D00DCD162 /* SDL_sensor.c */; }; + A7D8A99923E2514000DCD162 /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58323E2513D00DCD162 /* SDL_internal.h */; }; + A7D8AA6523E2514000DCD162 /* SDL_hints.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5AB23E2513D00DCD162 /* SDL_hints.c */; }; + A7D8AAB023E2514100DCD162 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C423E2513D00DCD162 /* SDL_syshaptic.c */; }; + A7D8AAB623E2514100DCD162 /* SDL_haptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C523E2513D00DCD162 /* SDL_haptic.c */; }; + A7D8AABC23E2514100DCD162 /* SDL_haptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5C623E2513D00DCD162 /* SDL_haptic_c.h */; }; + A7D8AAD423E2514100DCD162 /* SDL_syshaptic.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CC23E2513D00DCD162 /* SDL_syshaptic.h */; }; + A7D8AADA23E2514100DCD162 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5CE23E2513D00DCD162 /* SDL_syshaptic.c */; }; + A7D8AAE023E2514100DCD162 /* SDL_syshaptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CF23E2513D00DCD162 /* SDL_syshaptic_c.h */; }; + A7D8AB0A23E2514100DCD162 /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D823E2513D00DCD162 /* SDL_dynapi.h */; }; + A7D8AB1023E2514100DCD162 /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D923E2513D00DCD162 /* SDL_dynapi_overrides.h */; }; + A7D8AB1623E2514100DCD162 /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DA23E2513D00DCD162 /* SDL_dynapi.c */; }; + A7D8AB1C23E2514100DCD162 /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5DB23E2513D00DCD162 /* SDL_dynapi_procs.h */; }; + A7D8AB2523E2514100DCD162 /* SDL_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DD23E2513D00DCD162 /* SDL_log.c */; }; + A7D8AB2B23E2514100DCD162 /* SDL_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DF23E2513D00DCD162 /* SDL_timer.c */; }; + A7D8AB3123E2514100DCD162 /* SDL_timer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5E023E2513D00DCD162 /* SDL_timer_c.h */; }; + A7D8AB3723E2514100DCD162 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E223E2513D00DCD162 /* SDL_systimer.c */; }; + A7D8AB4923E2514100DCD162 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E823E2513D00DCD162 /* SDL_systimer.c */; }; + A7D8AB5B23E2514100DCD162 /* SDL_offscreenevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5EE23E2513D00DCD162 /* SDL_offscreenevents_c.h */; }; + A7D8AB6123E2514100DCD162 /* SDL_offscreenwindow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5EF23E2513D00DCD162 /* SDL_offscreenwindow.c */; }; + A7D8AB6723E2514100DCD162 /* SDL_offscreenevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F023E2513D00DCD162 /* SDL_offscreenevents.c */; }; + A7D8AB6D23E2514100DCD162 /* SDL_offscreenvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F123E2513D00DCD162 /* SDL_offscreenvideo.h */; }; + A7D8AB7323E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F223E2513D00DCD162 /* SDL_offscreenframebuffer.c */; }; + A7D8AB7F23E2514100DCD162 /* SDL_offscreenframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F423E2513D00DCD162 /* SDL_offscreenframebuffer_c.h */; }; + A7D8AB8523E2514100DCD162 /* SDL_offscreenwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F523E2513D00DCD162 /* SDL_offscreenwindow.h */; }; + A7D8AB8B23E2514100DCD162 /* SDL_offscreenvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F623E2513D00DCD162 /* SDL_offscreenvideo.c */; }; + A7D8ABCD23E2514100DCD162 /* SDL_blit_slow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60223E2513D00DCD162 /* SDL_blit_slow.c */; }; + A7D8ABD323E2514100DCD162 /* SDL_stretch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60323E2513D00DCD162 /* SDL_stretch.c */; }; + A7D8ABD923E2514100DCD162 /* SDL_egl_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60423E2513D00DCD162 /* SDL_egl_c.h */; }; + A7D8ABDF23E2514100DCD162 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60623E2513D00DCD162 /* SDL_nullframebuffer.c */; }; + A7D8ABE523E2514100DCD162 /* SDL_nullframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60723E2513D00DCD162 /* SDL_nullframebuffer_c.h */; }; + A7D8ABEB23E2514100DCD162 /* SDL_nullvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60823E2513D00DCD162 /* SDL_nullvideo.c */; }; + A7D8ABF123E2514100DCD162 /* SDL_nullevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60923E2513D00DCD162 /* SDL_nullevents.c */; }; + A7D8ABF723E2514100DCD162 /* SDL_nullvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60A23E2513D00DCD162 /* SDL_nullvideo.h */; }; + A7D8ABFD23E2514100DCD162 /* SDL_nullevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60B23E2513D00DCD162 /* SDL_nullevents_c.h */; }; + A7D8AC0323E2514100DCD162 /* SDL_rect_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60C23E2513D00DCD162 /* SDL_rect_c.h */; }; + A7D8AC0923E2514100DCD162 /* SDL_shape_internals.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60D23E2513D00DCD162 /* SDL_shape_internals.h */; }; + A7D8AC0F23E2514100DCD162 /* SDL_video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60E23E2513D00DCD162 /* SDL_video.c */; }; + A7D8AC2D23E2514100DCD162 /* SDL_surface.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61423E2513D00DCD162 /* SDL_surface.c */; }; + A7D8AC3323E2514100DCD162 /* SDL_RLEaccel.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61523E2513D00DCD162 /* SDL_RLEaccel.c */; }; + A7D8AC3923E2514100DCD162 /* SDL_blit_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61623E2513D00DCD162 /* SDL_blit_copy.c */; }; + A7D8AC3F23E2514100DCD162 /* SDL_sysvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61723E2513D00DCD162 /* SDL_sysvideo.h */; }; + A7D8ACE723E2514100DCD162 /* SDL_rect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63423E2513D00DCD162 /* SDL_rect.c */; }; + A7D8AD1D23E2514100DCD162 /* SDL_vulkan_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63E23E2513D00DCD162 /* SDL_vulkan_internal.h */; }; + A7D8AD2323E2514100DCD162 /* SDL_blit_auto.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63F23E2513D00DCD162 /* SDL_blit_auto.c */; }; + A7D8AD2923E2514100DCD162 /* SDL_vulkan_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64023E2513D00DCD162 /* SDL_vulkan_utils.c */; }; + A7D8AD3223E2514100DCD162 /* SDL_blit_N.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64223E2513D00DCD162 /* SDL_blit_N.c */; }; + A7D8AD6823E2514100DCD162 /* SDL_blit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64C23E2513D00DCD162 /* SDL_blit.c */; }; + A7D8AD6E23E2514100DCD162 /* SDL_pixels.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64D23E2513D00DCD162 /* SDL_pixels.c */; }; + A7D8ADE623E2514100DCD162 /* SDL_blit_0.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66223E2513E00DCD162 /* SDL_blit_0.c */; }; + A7D8ADEC23E2514100DCD162 /* SDL_blit_slow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A66323E2513E00DCD162 /* SDL_blit_slow.h */; }; + A7D8ADF223E2514100DCD162 /* SDL_blit_A.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66423E2513E00DCD162 /* SDL_blit_A.c */; }; + A7D8AE7623E2514100DCD162 /* SDL_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67B23E2513E00DCD162 /* SDL_clipboard.c */; }; + A7D8AE7C23E2514100DCD162 /* SDL_yuv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67C23E2513E00DCD162 /* SDL_yuv.c */; }; + A7D8AE8223E2514100DCD162 /* SDL_cocoashape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A67E23E2513E00DCD162 /* SDL_cocoashape.h */; }; + A7D8AE8823E2514100DCD162 /* SDL_cocoaopengl.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */; }; + A7D8AE8E23E2514100DCD162 /* SDL_cocoakeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68023E2513E00DCD162 /* SDL_cocoakeyboard.h */; }; + A7D8AE9423E2514100DCD162 /* SDL_cocoamodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68123E2513E00DCD162 /* SDL_cocoamodes.m */; }; + A7D8AE9A23E2514100DCD162 /* SDL_cocoaopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68223E2513E00DCD162 /* SDL_cocoaopengles.m */; }; + A7D8AEA023E2514100DCD162 /* SDL_cocoavulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68323E2513E00DCD162 /* SDL_cocoavulkan.m */; }; + A7D8AEA623E2514100DCD162 /* SDL_cocoawindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68423E2513E00DCD162 /* SDL_cocoawindow.m */; }; + A7D8AEAC23E2514100DCD162 /* SDL_cocoavideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68523E2513E00DCD162 /* SDL_cocoavideo.m */; }; + A7D8AEB223E2514100DCD162 /* SDL_cocoametalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */; }; + A7D8AEB823E2514100DCD162 /* SDL_cocoamouse.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */; }; + A7D8AEC423E2514100DCD162 /* SDL_cocoaevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */; }; + A7D8AECA23E2514100DCD162 /* SDL_cocoaclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68A23E2513E00DCD162 /* SDL_cocoaclipboard.h */; }; + A7D8AED023E2514100DCD162 /* SDL_cocoamessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68B23E2513E00DCD162 /* SDL_cocoamessagebox.m */; }; + A7D8AED623E2514100DCD162 /* SDL_cocoakeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68C23E2513E00DCD162 /* SDL_cocoakeyboard.m */; }; + A7D8AEDC23E2514100DCD162 /* SDL_cocoaopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68D23E2513E00DCD162 /* SDL_cocoaopengl.h */; }; + A7D8AEE223E2514100DCD162 /* SDL_cocoashape.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68E23E2513E00DCD162 /* SDL_cocoashape.m */; }; + A7D8AEE823E2514100DCD162 /* SDL_cocoavulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68F23E2513E00DCD162 /* SDL_cocoavulkan.h */; }; + A7D8AEEE23E2514100DCD162 /* SDL_cocoaopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */; }; + A7D8AEF423E2514100DCD162 /* SDL_cocoamodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69123E2513E00DCD162 /* SDL_cocoamodes.h */; }; + A7D8AEFA23E2514100DCD162 /* SDL_cocoawindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69223E2513E00DCD162 /* SDL_cocoawindow.h */; }; + A7D8AF0023E2514100DCD162 /* SDL_cocoavideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69323E2513E00DCD162 /* SDL_cocoavideo.h */; }; + A7D8AF0623E2514100DCD162 /* SDL_cocoamessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69423E2513E00DCD162 /* SDL_cocoamessagebox.h */; }; + A7D8AF0C23E2514100DCD162 /* SDL_cocoaclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69523E2513E00DCD162 /* SDL_cocoaclipboard.m */; }; + A7D8AF1223E2514100DCD162 /* SDL_cocoaevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */; }; + A7D8AF1E23E2514100DCD162 /* SDL_cocoamouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */; }; + A7D8AF2423E2514100DCD162 /* SDL_cocoametalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69923E2513E00DCD162 /* SDL_cocoametalview.m */; }; + A7D8AFC023E2514200DCD162 /* SDL_egl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6B623E2513E00DCD162 /* SDL_egl.c */; }; + A7D8B14023E2514200DCD162 /* SDL_blit_1.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FA23E2513E00DCD162 /* SDL_blit_1.c */; }; + A7D8B22423E2514200DCD162 /* gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72323E2513E00DCD162 /* gl2ext.h */; }; + A7D8B22A23E2514200DCD162 /* gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72423E2513E00DCD162 /* gl2.h */; }; + A7D8B23023E2514200DCD162 /* gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72523E2513E00DCD162 /* gl2platform.h */; }; + A7D8B23623E2514200DCD162 /* khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72723E2513E00DCD162 /* khrplatform.h */; }; + A7D8B23C23E2514200DCD162 /* egl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72923E2513E00DCD162 /* egl.h */; }; + A7D8B24223E2514200DCD162 /* eglext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72A23E2513E00DCD162 /* eglext.h */; }; + A7D8B24823E2514200DCD162 /* eglplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72B23E2513E00DCD162 /* eglplatform.h */; }; + A7D8B24E23E2514200DCD162 /* vk_layer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72D23E2513E00DCD162 /* vk_layer.h */; }; + A7D8B25423E2514200DCD162 /* vk_icd.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72E23E2513E00DCD162 /* vk_icd.h */; }; + A7D8B25A23E2514200DCD162 /* vulkan_vi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72F23E2513E00DCD162 /* vulkan_vi.h */; }; + A7D8B26023E2514200DCD162 /* vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73023E2513E00DCD162 /* vulkan.h */; }; + A7D8B26623E2514200DCD162 /* vk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73123E2513E00DCD162 /* vk_platform.h */; }; + A7D8B26C23E2514200DCD162 /* vulkan.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73223E2513E00DCD162 /* vulkan.hpp */; }; + A7D8B27223E2514200DCD162 /* vulkan_fuchsia.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73323E2513E00DCD162 /* vulkan_fuchsia.h */; }; + A7D8B27823E2514200DCD162 /* vulkan_wayland.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73423E2513E00DCD162 /* vulkan_wayland.h */; }; + A7D8B27E23E2514200DCD162 /* vulkan_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73523E2513E00DCD162 /* vulkan_win32.h */; }; + A7D8B28423E2514200DCD162 /* vulkan_macos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73623E2513E00DCD162 /* vulkan_macos.h */; }; + A7D8B28A23E2514200DCD162 /* vulkan_xlib_xrandr.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73723E2513E00DCD162 /* vulkan_xlib_xrandr.h */; }; + A7D8B29023E2514200DCD162 /* vulkan_xcb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73823E2513E00DCD162 /* vulkan_xcb.h */; }; + A7D8B29623E2514200DCD162 /* vulkan_mir.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73923E2513E00DCD162 /* vulkan_mir.h */; }; + A7D8B29C23E2514200DCD162 /* vulkan_xlib.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73A23E2513E00DCD162 /* vulkan_xlib.h */; }; + A7D8B2A223E2514200DCD162 /* vulkan_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73B23E2513E00DCD162 /* vulkan_ios.h */; }; + A7D8B2A823E2514200DCD162 /* vulkan_core.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73C23E2513E00DCD162 /* vulkan_core.h */; }; + A7D8B2AE23E2514200DCD162 /* vk_sdk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73D23E2513E00DCD162 /* vk_sdk_platform.h */; }; + A7D8B2B423E2514200DCD162 /* vulkan_android.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73E23E2513E00DCD162 /* vulkan_android.h */; }; + A7D8B2BA23E2514200DCD162 /* SDL_blit_auto.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73F23E2513E00DCD162 /* SDL_blit_auto.h */; }; + A7D8B2C023E2514200DCD162 /* SDL_pixels_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A74023E2513E00DCD162 /* SDL_pixels_c.h */; }; + A7D8B39823E2514200DCD162 /* SDL_blit_copy.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76623E2513E00DCD162 /* SDL_blit_copy.h */; }; + A7D8B39E23E2514200DCD162 /* SDL_RLEaccel_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76723E2513E00DCD162 /* SDL_RLEaccel_c.h */; }; + A7D8B3A423E2514200DCD162 /* SDL_fillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76823E2513E00DCD162 /* SDL_fillrect.c */; }; + A7D8B3AA23E2514200DCD162 /* SDL_shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76923E2513E00DCD162 /* SDL_shape.c */; }; + A7D8B3B023E2514200DCD162 /* SDL_yuv_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76A23E2513E00DCD162 /* SDL_yuv_c.h */; }; + A7D8B3B623E2514200DCD162 /* SDL_blit.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76B23E2513E00DCD162 /* SDL_blit.h */; }; + A7D8B3BF23E2514200DCD162 /* yuv_rgb.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76E23E2513E00DCD162 /* yuv_rgb.c */; }; + A7D8B3C823E2514200DCD162 /* yuv_rgb_sse_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77023E2513E00DCD162 /* yuv_rgb_sse_func.h */; }; + A7D8B3CE23E2514300DCD162 /* yuv_rgb_std_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77123E2513E00DCD162 /* yuv_rgb_std_func.h */; }; + A7D8B3D423E2514300DCD162 /* yuv_rgb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77223E2513E00DCD162 /* yuv_rgb.h */; }; + A7D8B3DA23E2514300DCD162 /* SDL_bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77323E2513E00DCD162 /* SDL_bmp.c */; }; + A7D8B3E023E2514300DCD162 /* SDL_cpuinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77523E2513E00DCD162 /* SDL_cpuinfo.c */; }; + A7D8B3E623E2514300DCD162 /* SDL_systhread.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77723E2513E00DCD162 /* SDL_systhread.h */; }; + A7D8B3EC23E2514300DCD162 /* SDL_thread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77823E2513E00DCD162 /* SDL_thread_c.h */; }; + A7D8B3F223E2514300DCD162 /* SDL_thread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77923E2513E00DCD162 /* SDL_thread.c */; }; + A7D8B41C23E2514300DCD162 /* SDL_systls.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78223E2513E00DCD162 /* SDL_systls.c */; }; + A7D8B42223E2514300DCD162 /* SDL_syssem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78323E2513E00DCD162 /* SDL_syssem.c */; }; + A7D8B42823E2514300DCD162 /* SDL_systhread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78423E2513E00DCD162 /* SDL_systhread_c.h */; }; + A7D8B42E23E2514300DCD162 /* SDL_syscond.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78523E2513E00DCD162 /* SDL_syscond.c */; }; + A7D8B43423E2514300DCD162 /* SDL_systhread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78623E2513E00DCD162 /* SDL_systhread.c */; }; + A7D8B43A23E2514300DCD162 /* SDL_sysmutex.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78723E2513E00DCD162 /* SDL_sysmutex.c */; }; + A7D8B44023E2514300DCD162 /* SDL_sysmutex_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78823E2513E00DCD162 /* SDL_sysmutex_c.h */; }; + A7D8B4AC23E2514300DCD162 /* SDL_gamepad_db.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A79E23E2513E00DCD162 /* SDL_gamepad_db.h */; }; + A7D8B4B223E2514300DCD162 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A023E2513E00DCD162 /* SDL_sysjoystick.c */; }; + A7D8B4DC23E2514300DCD162 /* SDL_joystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A923E2513E00DCD162 /* SDL_joystick.c */; }; + A7D8B4EE23E2514300DCD162 /* SDL_gamepad.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7AD23E2513E00DCD162 /* SDL_gamepad.c */; }; + A7D8B53923E2514300DCD162 /* SDL_hidapi_xbox360.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C223E2513E00DCD162 /* SDL_hidapi_xbox360.c */; }; + A7D8B53F23E2514300DCD162 /* SDL_hidapi_ps4.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C323E2513E00DCD162 /* SDL_hidapi_ps4.c */; }; + A7D8B54523E2514300DCD162 /* SDL_hidapijoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C423E2513E00DCD162 /* SDL_hidapijoystick.c */; }; + A7D8B54B23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C523E2513E00DCD162 /* SDL_hidapi_xboxone.c */; }; + A7D8B55123E2514300DCD162 /* SDL_hidapi_switch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C623E2513E00DCD162 /* SDL_hidapi_switch.c */; }; + A7D8B55723E2514300DCD162 /* SDL_hidapijoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7C723E2513E00DCD162 /* SDL_hidapijoystick_c.h */; }; + A7D8B55D23E2514300DCD162 /* SDL_hidapi_xbox360w.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C823E2513E00DCD162 /* SDL_hidapi_xbox360w.c */; }; + A7D8B56323E2514300DCD162 /* SDL_hidapi_gamecube.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C923E2513E00DCD162 /* SDL_hidapi_gamecube.c */; }; + A7D8B56F23E2514300DCD162 /* usb_ids.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CB23E2513E00DCD162 /* usb_ids.h */; }; + A7D8B58123E2514300DCD162 /* SDL_sysjoystick.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CF23E2513E00DCD162 /* SDL_sysjoystick.h */; }; + A7D8B58723E2514300DCD162 /* SDL_joystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D023E2513E00DCD162 /* SDL_joystick_c.h */; }; + A7D8B5B723E2514300DCD162 /* controller_type.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D923E2513E00DCD162 /* controller_type.h */; }; + A7D8B5BD23E2514300DCD162 /* SDL_rwops.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DB23E2513F00DCD162 /* SDL_rwops.c */; }; + A7D8B5C323E2514300DCD162 /* SDL_rwopsbundlesupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7DD23E2513F00DCD162 /* SDL_rwopsbundlesupport.h */; }; + A7D8B5C923E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DE23E2513F00DCD162 /* SDL_rwopsbundlesupport.m */; }; + A7D8B5CF23E2514300DCD162 /* SDL_syspower.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E123E2513F00DCD162 /* SDL_syspower.m */; }; + A7D8B5D523E2514300DCD162 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7E223E2513F00DCD162 /* SDL_syspower.h */; }; + A7D8B5E723E2514300DCD162 /* SDL_power.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E723E2513F00DCD162 /* SDL_power.c */; }; + A7D8B5F323E2514300DCD162 /* SDL_syspower.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7EB23E2513F00DCD162 /* SDL_syspower.c */; }; + A7D8B61123E2514300DCD162 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F423E2513F00DCD162 /* SDL_syspower.h */; }; + A7D8B61723E2514300DCD162 /* SDL_assert_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F523E2513F00DCD162 /* SDL_assert_c.h */; }; + A7D8B61D23E2514300DCD162 /* SDL_sysfilesystem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7F823E2513F00DCD162 /* SDL_sysfilesystem.c */; }; + A7D8B62F23E2514300DCD162 /* SDL_sysfilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7FE23E2513F00DCD162 /* SDL_sysfilesystem.m */; }; + A7D8B75223E2514300DCD162 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A85F23E2513F00DCD162 /* SDL_sysloadso.c */; }; + A7D8B75E23E2514300DCD162 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86323E2513F00DCD162 /* SDL_sysloadso.c */; }; + A7D8B76423E2514300DCD162 /* SDL_mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86523E2513F00DCD162 /* SDL_mixer.c */; }; + A7D8B76A23E2514300DCD162 /* SDL_wave.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86623E2513F00DCD162 /* SDL_wave.c */; }; + A7D8B79423E2514400DCD162 /* SDL_dummyaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87123E2513F00DCD162 /* SDL_dummyaudio.h */; }; + A7D8B79A23E2514400DCD162 /* SDL_dummyaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A87223E2513F00DCD162 /* SDL_dummyaudio.c */; }; + A7D8B7A023E2514400DCD162 /* SDL_audio_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87323E2513F00DCD162 /* SDL_audio_c.h */; }; + A7D8B7B223E2514400DCD162 /* SDL_audiodev_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87723E2513F00DCD162 /* SDL_audiodev_c.h */; }; + A7D8B81823E2514400DCD162 /* SDL_audiodev.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A88F23E2513F00DCD162 /* SDL_audiodev.c */; }; + A7D8B85A23E2514400DCD162 /* SDL_sysaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A89F23E2513F00DCD162 /* SDL_sysaudio.h */; }; + A7D8B86023E2514400DCD162 /* SDL_audiotypecvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A023E2513F00DCD162 /* SDL_audiotypecvt.c */; }; + A7D8B86623E2514400DCD162 /* SDL_audiocvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A123E2513F00DCD162 /* SDL_audiocvt.c */; }; + A7D8B86C23E2514400DCD162 /* SDL_wave.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8A223E2513F00DCD162 /* SDL_wave.h */; }; + A7D8B8A223E2514400DCD162 /* SDL_diskaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8B023E2513F00DCD162 /* SDL_diskaudio.h */; }; + A7D8B8A823E2514400DCD162 /* SDL_diskaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B123E2513F00DCD162 /* SDL_diskaudio.c */; }; + A7D8B8C623E2514400DCD162 /* SDL_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B823E2513F00DCD162 /* SDL_audio.c */; }; + A7D8B8CC23E2514400DCD162 /* SDL_coreaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8BA23E2513F00DCD162 /* SDL_coreaudio.h */; }; + A7D8B8D223E2514400DCD162 /* SDL_coreaudio.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BB23E2513F00DCD162 /* SDL_coreaudio.m */; }; + A7D8B8E423E2514400DCD162 /* SDL_error.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BF23E2513F00DCD162 /* SDL_error.c */; }; + A7D8B94A23E2514400DCD162 /* SDL_hints_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8D123E2514000DCD162 /* SDL_hints_c.h */; }; + A7D8B95023E2514400DCD162 /* SDL_iconv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D323E2514000DCD162 /* SDL_iconv.c */; }; + A7D8B95623E2514400DCD162 /* SDL_getenv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D423E2514000DCD162 /* SDL_getenv.c */; }; + A7D8B95C23E2514400DCD162 /* SDL_string.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D523E2514000DCD162 /* SDL_string.c */; }; + A7D8B96223E2514400DCD162 /* SDL_strtokr.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D623E2514000DCD162 /* SDL_strtokr.c */; }; + A7D8B96823E2514400DCD162 /* SDL_qsort.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D723E2514000DCD162 /* SDL_qsort.c */; }; + A7D8B96E23E2514400DCD162 /* SDL_stdlib.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D823E2514000DCD162 /* SDL_stdlib.c */; }; + A7D8B97423E2514400DCD162 /* SDL_malloc.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D923E2514000DCD162 /* SDL_malloc.c */; }; + A7D8B97A23E2514400DCD162 /* SDL_render.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DB23E2514000DCD162 /* SDL_render.c */; }; + A7D8B98023E2514400DCD162 /* SDL_d3dmath.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DC23E2514000DCD162 /* SDL_d3dmath.h */; }; + A7D8B98623E2514400DCD162 /* SDL_render_metal.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DE23E2514000DCD162 /* SDL_render_metal.m */; }; + A7D8B98C23E2514400DCD162 /* SDL_shaders_metal_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DF23E2514000DCD162 /* SDL_shaders_metal_ios.h */; }; + A7D8B99223E2514400DCD162 /* SDL_shaders_metal.metal in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8E023E2514000DCD162 /* SDL_shaders_metal.metal */; }; + A7D8B99B23E2514400DCD162 /* SDL_shaders_metal_macos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E223E2514000DCD162 /* SDL_shaders_metal_macos.h */; }; + A7D8B9A123E2514400DCD162 /* SDL_shaders_metal_tvos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E323E2514000DCD162 /* SDL_shaders_metal_tvos.h */; }; + A7D8B9CB23E2514400DCD162 /* SDL_yuv_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EC23E2514000DCD162 /* SDL_yuv_sw_c.h */; }; + A7D8B9D123E2514400DCD162 /* SDL_yuv_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8ED23E2514000DCD162 /* SDL_yuv_sw.c */; }; + A7D8B9D723E2514400DCD162 /* SDL_sysrender.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EE23E2514000DCD162 /* SDL_sysrender.h */; }; + A7D8B9DD23E2514400DCD162 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F023E2514000DCD162 /* SDL_blendpoint.c */; }; + A7D8B9E323E2514400DCD162 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F123E2514000DCD162 /* SDL_drawline.c */; }; + A7D8B9E923E2514400DCD162 /* SDL_blendline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F223E2514000DCD162 /* SDL_blendline.h */; }; + A7D8B9EF23E2514400DCD162 /* SDL_drawpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F323E2514000DCD162 /* SDL_drawpoint.h */; }; + A7D8B9F523E2514400DCD162 /* SDL_rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F423E2514000DCD162 /* SDL_rotate.c */; }; + A7D8B9FB23E2514400DCD162 /* SDL_render_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F523E2514000DCD162 /* SDL_render_sw_c.h */; }; + A7D8BA0123E2514400DCD162 /* SDL_blendfillrect.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F623E2514000DCD162 /* SDL_blendfillrect.h */; }; + A7D8BA0723E2514400DCD162 /* SDL_drawline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F723E2514000DCD162 /* SDL_drawline.h */; }; + A7D8BA0D23E2514400DCD162 /* SDL_blendpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F823E2514000DCD162 /* SDL_blendpoint.h */; }; + A7D8BA1323E2514400DCD162 /* SDL_render_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F923E2514000DCD162 /* SDL_render_sw.c */; }; + A7D8BA1923E2514400DCD162 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FA23E2514000DCD162 /* SDL_draw.h */; }; + A7D8BA1F23E2514400DCD162 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FB23E2514000DCD162 /* SDL_blendline.c */; }; + A7D8BA2523E2514400DCD162 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */; }; + A7D8BA2B23E2514400DCD162 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */; }; + A7D8BA3123E2514400DCD162 /* SDL_rotate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */; }; + A7D8BA3723E2514400DCD162 /* SDL_d3dmath.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FF23E2514000DCD162 /* SDL_d3dmath.c */; }; + A7D8BA4923E2514400DCD162 /* SDL_render_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */; }; + A7D8BA4F23E2514400DCD162 /* SDL_shaders_gles2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */; }; + A7D8BA5523E2514400DCD162 /* SDL_gles2funcs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */; }; + A7D8BA5B23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90723E2514000DCD162 /* SDL_shaders_gles2.c */; }; + A7D8BA7323E2514400DCD162 /* SDL_shaders_gl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90D23E2514000DCD162 /* SDL_shaders_gl.h */; }; + A7D8BA7923E2514400DCD162 /* SDL_glfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90E23E2514000DCD162 /* SDL_glfuncs.h */; }; + A7D8BA7F23E2514400DCD162 /* SDL_render_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90F23E2514000DCD162 /* SDL_render_gl.c */; }; + A7D8BA8523E2514400DCD162 /* SDL_shaders_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91023E2514000DCD162 /* SDL_shaders_gl.c */; }; + A7D8BA8B23E2514400DCD162 /* s_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91223E2514000DCD162 /* s_sin.c */; }; + A7D8BA9123E2514400DCD162 /* s_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91323E2514000DCD162 /* s_cos.c */; }; + A7D8BA9723E2514400DCD162 /* s_copysign.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91423E2514000DCD162 /* s_copysign.c */; }; + A7D8BA9D23E2514400DCD162 /* s_fabs.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91523E2514000DCD162 /* s_fabs.c */; }; + A7D8BAA323E2514400DCD162 /* k_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91623E2514000DCD162 /* k_rem_pio2.c */; }; + A7D8BAA923E2514400DCD162 /* k_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91723E2514000DCD162 /* k_sin.c */; }; + A7D8BAAF23E2514400DCD162 /* s_atan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91823E2514000DCD162 /* s_atan.c */; }; + A7D8BAB523E2514400DCD162 /* k_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91923E2514000DCD162 /* k_cos.c */; }; + A7D8BABB23E2514400DCD162 /* s_scalbn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91A23E2514000DCD162 /* s_scalbn.c */; }; + A7D8BAC123E2514500DCD162 /* math_private.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A91B23E2514000DCD162 /* math_private.h */; }; + A7D8BAC723E2514500DCD162 /* e_pow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91C23E2514000DCD162 /* e_pow.c */; }; + A7D8BACD23E2514500DCD162 /* e_atan2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91D23E2514000DCD162 /* e_atan2.c */; }; + A7D8BAD323E2514500DCD162 /* s_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91E23E2514000DCD162 /* s_tan.c */; }; + A7D8BAD923E2514500DCD162 /* e_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91F23E2514000DCD162 /* e_rem_pio2.c */; }; + A7D8BADF23E2514500DCD162 /* e_fmod.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92023E2514000DCD162 /* e_fmod.c */; }; + A7D8BAE523E2514500DCD162 /* e_exp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92123E2514000DCD162 /* e_exp.c */; }; + A7D8BAEB23E2514500DCD162 /* e_log10.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92223E2514000DCD162 /* e_log10.c */; }; + A7D8BAF123E2514500DCD162 /* e_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92323E2514000DCD162 /* e_log.c */; }; + A7D8BAF723E2514500DCD162 /* e_sqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92423E2514000DCD162 /* e_sqrt.c */; }; + A7D8BAFD23E2514500DCD162 /* s_floor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92523E2514000DCD162 /* s_floor.c */; }; + A7D8BB0323E2514500DCD162 /* math_libm.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92623E2514000DCD162 /* math_libm.h */; }; + A7D8BB0923E2514500DCD162 /* k_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92723E2514000DCD162 /* k_tan.c */; }; + A7D8BB1523E2514500DCD162 /* SDL_mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92A23E2514000DCD162 /* SDL_mouse.c */; }; + A7D8BB1B23E2514500DCD162 /* SDL_mouse_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92B23E2514000DCD162 /* SDL_mouse_c.h */; }; + A7D8BB2123E2514500DCD162 /* scancodes_windows.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92C23E2514000DCD162 /* scancodes_windows.h */; }; + A7D8BB2723E2514500DCD162 /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92D23E2514000DCD162 /* SDL_displayevents.c */; }; + A7D8BB2D23E2514500DCD162 /* SDL_dropevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92E23E2514000DCD162 /* SDL_dropevents_c.h */; }; + A7D8BB3323E2514500DCD162 /* SDL_windowevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92F23E2514000DCD162 /* SDL_windowevents.c */; }; + A7D8BB3F23E2514500DCD162 /* SDL_displayevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93123E2514000DCD162 /* SDL_displayevents_c.h */; }; + A7D8BB4523E2514500DCD162 /* blank_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93223E2514000DCD162 /* blank_cursor.h */; }; + A7D8BB4B23E2514500DCD162 /* default_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93323E2514000DCD162 /* default_cursor.h */; }; + A7D8BB5123E2514500DCD162 /* scancodes_darwin.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93423E2514000DCD162 /* scancodes_darwin.h */; }; + A7D8BB5723E2514500DCD162 /* SDL_events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93523E2514000DCD162 /* SDL_events.c */; }; + A7D8BB5D23E2514500DCD162 /* scancodes_linux.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93623E2514000DCD162 /* scancodes_linux.h */; }; + A7D8BB6323E2514500DCD162 /* SDL_touch_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93723E2514000DCD162 /* SDL_touch_c.h */; }; + A7D8BB6923E2514500DCD162 /* SDL_keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93823E2514000DCD162 /* SDL_keyboard.c */; }; + A7D8BB6F23E2514500DCD162 /* SDL_clipboardevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93923E2514000DCD162 /* SDL_clipboardevents_c.h */; }; + A7D8BB7523E2514500DCD162 /* SDL_clipboardevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93A23E2514000DCD162 /* SDL_clipboardevents.c */; }; + A7D8BB7B23E2514500DCD162 /* SDL_dropevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93B23E2514000DCD162 /* SDL_dropevents.c */; }; + A7D8BB8123E2514500DCD162 /* SDL_quit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93C23E2514000DCD162 /* SDL_quit.c */; }; + A7D8BB8723E2514500DCD162 /* SDL_keyboard_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93D23E2514000DCD162 /* SDL_keyboard_c.h */; }; + A7D8BB8D23E2514500DCD162 /* SDL_touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93E23E2514000DCD162 /* SDL_touch.c */; }; + A7D8BB9F23E2514500DCD162 /* scancodes_xfree86.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94123E2514000DCD162 /* scancodes_xfree86.h */; }; + A7D8BBA523E2514500DCD162 /* SDL_events_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94223E2514000DCD162 /* SDL_events_c.h */; }; + A7D8BBAB23E2514500DCD162 /* SDL_windowevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94323E2514000DCD162 /* SDL_windowevents_c.h */; }; + A7D8BBB123E2514500DCD162 /* SDL_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94423E2514000DCD162 /* SDL_assert.c */; }; + A7D8BBC523E2561500DCD162 /* SDL_steamcontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A723E2513E00DCD162 /* SDL_steamcontroller.c */; }; + A7D8BBC723E2561500DCD162 /* SDL_steamcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7A523E2513E00DCD162 /* SDL_steamcontroller.h */; }; + A7D8BBD223E2574800DCD162 /* SDL_uikitappdelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62F23E2513D00DCD162 /* SDL_uikitappdelegate.h */; }; + A7D8BBD323E2574800DCD162 /* SDL_uikitappdelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61E23E2513D00DCD162 /* SDL_uikitappdelegate.m */; }; + A7D8BBD423E2574800DCD162 /* SDL_uikitclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62123E2513D00DCD162 /* SDL_uikitclipboard.h */; }; + A7D8BBD523E2574800DCD162 /* SDL_uikitclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62A23E2513D00DCD162 /* SDL_uikitclipboard.m */; }; + A7D8BBD623E2574800DCD162 /* SDL_uikitevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62D23E2513D00DCD162 /* SDL_uikitevents.h */; }; + A7D8BBD723E2574800DCD162 /* SDL_uikitevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61C23E2513D00DCD162 /* SDL_uikitevents.m */; }; + A7D8BBD823E2574800DCD162 /* SDL_uikitmessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62623E2513D00DCD162 /* SDL_uikitmessagebox.h */; }; + A7D8BBD923E2574800DCD162 /* SDL_uikitmessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61B23E2513D00DCD162 /* SDL_uikitmessagebox.m */; }; + A7D8BBDA23E2574800DCD162 /* SDL_uikitmetalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61D23E2513D00DCD162 /* SDL_uikitmetalview.h */; }; + A7D8BBDB23E2574800DCD162 /* SDL_uikitmetalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62E23E2513D00DCD162 /* SDL_uikitmetalview.m */; }; + A7D8BBDC23E2574800DCD162 /* SDL_uikitmodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61F23E2513D00DCD162 /* SDL_uikitmodes.h */; }; + A7D8BBDD23E2574800DCD162 /* SDL_uikitmodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62C23E2513D00DCD162 /* SDL_uikitmodes.m */; }; + A7D8BBDE23E2574800DCD162 /* SDL_uikitopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63123E2513D00DCD162 /* SDL_uikitopengles.h */; }; + A7D8BBDF23E2574800DCD162 /* SDL_uikitopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62323E2513D00DCD162 /* SDL_uikitopengles.m */; }; + A7D8BBE023E2574800DCD162 /* SDL_uikitopenglview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62B23E2513D00DCD162 /* SDL_uikitopenglview.h */; }; + A7D8BBE123E2574800DCD162 /* SDL_uikitopenglview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62023E2513D00DCD162 /* SDL_uikitopenglview.m */; }; + A7D8BBE223E2574800DCD162 /* SDL_uikitvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62223E2513D00DCD162 /* SDL_uikitvideo.h */; }; + A7D8BBE323E2574800DCD162 /* SDL_uikitvideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63223E2513D00DCD162 /* SDL_uikitvideo.m */; }; + A7D8BBE423E2574800DCD162 /* SDL_uikitview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61923E2513D00DCD162 /* SDL_uikitview.h */; }; + A7D8BBE523E2574800DCD162 /* SDL_uikitview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62923E2513D00DCD162 /* SDL_uikitview.m */; }; + A7D8BBE623E2574800DCD162 /* SDL_uikitviewcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62423E2513D00DCD162 /* SDL_uikitviewcontroller.h */; }; + A7D8BBE723E2574800DCD162 /* SDL_uikitviewcontroller.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63023E2513D00DCD162 /* SDL_uikitviewcontroller.m */; }; + A7D8BBE823E2574800DCD162 /* SDL_uikitvulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63323E2513D00DCD162 /* SDL_uikitvulkan.h */; }; + A7D8BBE923E2574800DCD162 /* SDL_uikitvulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62523E2513D00DCD162 /* SDL_uikitvulkan.m */; }; + A7D8BBEA23E2574800DCD162 /* SDL_uikitwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62723E2513D00DCD162 /* SDL_uikitwindow.h */; }; + A7D8BBEB23E2574800DCD162 /* SDL_uikitwindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61A23E2513D00DCD162 /* SDL_uikitwindow.m */; }; + E4F7981A2AD8D84800669F54 /* SDL_core_unsupported.c in Sources */ = {isa = PBXBuildFile; fileRef = E4F798192AD8D84800669F54 /* SDL_core_unsupported.c */; }; + E4F7981C2AD8D85500669F54 /* SDL_dynapi_unsupported.h in Headers */ = {isa = PBXBuildFile; fileRef = E4F7981B2AD8D85500669F54 /* SDL_dynapi_unsupported.h */; }; + E4F7981E2AD8D86A00669F54 /* SDL_render_unsupported.c in Sources */ = {isa = PBXBuildFile; fileRef = E4F7981D2AD8D86A00669F54 /* SDL_render_unsupported.c */; }; + E4F798202AD8D87F00669F54 /* SDL_video_unsupported.c in Sources */ = {isa = PBXBuildFile; fileRef = E4F7981F2AD8D87F00669F54 /* SDL_video_unsupported.c */; }; + F31A92C828D4CB39003BFD6A /* SDL_offscreenopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = F31A92C628D4CB39003BFD6A /* SDL_offscreenopengles.h */; }; + F31A92D228D4CB39003BFD6A /* SDL_offscreenopengles.c in Sources */ = {isa = PBXBuildFile; fileRef = F31A92C728D4CB39003BFD6A /* SDL_offscreenopengles.c */; }; + F32305FF28939F6400E66D30 /* SDL_hidapi_combined.c in Sources */ = {isa = PBXBuildFile; fileRef = F32305FE28939F6400E66D30 /* SDL_hidapi_combined.c */; }; + F32DDACF2AB795A30041EAA5 /* SDL_audio_channel_converters.h in Headers */ = {isa = PBXBuildFile; fileRef = F32DDAC92AB795A30041EAA5 /* SDL_audio_channel_converters.h */; }; + F32DDAD02AB795A30041EAA5 /* SDL_audioresample.h in Headers */ = {isa = PBXBuildFile; fileRef = F32DDACA2AB795A30041EAA5 /* SDL_audioresample.h */; }; + F32DDAD12AB795A30041EAA5 /* SDL_audioqueue.c in Sources */ = {isa = PBXBuildFile; fileRef = F32DDACB2AB795A30041EAA5 /* SDL_audioqueue.c */; }; + F32DDAD22AB795A30041EAA5 /* SDL_audio_resampler_filter.h in Headers */ = {isa = PBXBuildFile; fileRef = F32DDACC2AB795A30041EAA5 /* SDL_audio_resampler_filter.h */; }; + F32DDAD32AB795A30041EAA5 /* SDL_audioqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = F32DDACD2AB795A30041EAA5 /* SDL_audioqueue.h */; }; + F32DDAD42AB795A30041EAA5 /* SDL_audioresample.c in Sources */ = {isa = PBXBuildFile; fileRef = F32DDACE2AB795A30041EAA5 /* SDL_audioresample.c */; }; + F34B9895291DEFF500AAC96E /* SDL_hidapi_steam.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAAC23E2795C00529352 /* SDL_hidapi_steam.c */; }; + F36C7AD1294BA009004D61C3 /* SDL_runapp.c in Sources */ = {isa = PBXBuildFile; fileRef = F36C7AD0294BA009004D61C3 /* SDL_runapp.c */; }; + F376F6552559B4E300CFC0BC /* SDL_hidapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */; }; + F37A8E1A28405AA100C38E95 /* CMake in Resources */ = {isa = PBXBuildFile; fileRef = F37A8E1928405AA100C38E95 /* CMake */; }; + F3820713284F3609004DD584 /* controller_type.c in Sources */ = {isa = PBXBuildFile; fileRef = F3820712284F3609004DD584 /* controller_type.c */; }; + F382071D284F362F004DD584 /* SDL_guid.c in Sources */ = {isa = PBXBuildFile; fileRef = F382071C284F362F004DD584 /* SDL_guid.c */; }; + F386F6E72884663E001840AA /* SDL_log_c.h in Headers */ = {isa = PBXBuildFile; fileRef = F386F6E42884663E001840AA /* SDL_log_c.h */; }; + F386F6F02884663E001840AA /* SDL_utils_c.h in Headers */ = {isa = PBXBuildFile; fileRef = F386F6E52884663E001840AA /* SDL_utils_c.h */; }; + F386F6F92884663E001840AA /* SDL_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = F386F6E62884663E001840AA /* SDL_utils.c */; }; + F388C95528B5F6F700661ECF /* SDL_hidapi_ps3.c in Sources */ = {isa = PBXBuildFile; fileRef = F388C95428B5F6F600661ECF /* SDL_hidapi_ps3.c */; }; + F395BF6525633B2400942BFF /* SDL_crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = F395BF6425633B2400942BFF /* SDL_crc32.c */; }; + F395C1932569C68F00942BFF /* SDL_iokitjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = F395C1912569C68E00942BFF /* SDL_iokitjoystick_c.h */; }; + F395C19C2569C68F00942BFF /* SDL_iokitjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = F395C1922569C68E00942BFF /* SDL_iokitjoystick.c */; }; + F395C1B12569C6A000942BFF /* SDL_mfijoystick.m in Sources */ = {isa = PBXBuildFile; fileRef = F395C1AF2569C6A000942BFF /* SDL_mfijoystick.m */; }; + F395C1BA2569C6A000942BFF /* SDL_mfijoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = F395C1B02569C6A000942BFF /* SDL_mfijoystick_c.h */; }; + F3973FA228A59BDD00B84553 /* SDL_vacopy.h in Headers */ = {isa = PBXBuildFile; fileRef = F3973FA028A59BDD00B84553 /* SDL_vacopy.h */; }; + F3973FAB28A59BDD00B84553 /* SDL_crc16.c in Sources */ = {isa = PBXBuildFile; fileRef = F3973FA128A59BDD00B84553 /* SDL_crc16.c */; }; + F3984CD025BCC92900374F43 /* SDL_hidapi_stadia.c in Sources */ = {isa = PBXBuildFile; fileRef = F3984CCF25BCC92800374F43 /* SDL_hidapi_stadia.c */; }; + F3990DF52A787C10000D8759 /* SDL_sysurl.m in Sources */ = {isa = PBXBuildFile; fileRef = F3ADAB8D2576F0B300A6B1D9 /* SDL_sysurl.m */; }; + F3990E042A788303000D8759 /* SDL_hidapi_c.h in Headers */ = {isa = PBXBuildFile; fileRef = F3990E012A788303000D8759 /* SDL_hidapi_c.h */; }; + F3990E052A788303000D8759 /* SDL_hidapi_mac.h in Headers */ = {isa = PBXBuildFile; fileRef = F3990E022A788303000D8759 /* SDL_hidapi_mac.h */; }; + F3990E062A788303000D8759 /* SDL_hidapi_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = F3990E032A788303000D8759 /* SDL_hidapi_ios.h */; }; + F3990E072A78833C000D8759 /* hid.m in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAA523E2792500529352 /* hid.m */; }; + F3A4909E2554D38600E92A8B /* SDL_hidapi_ps5.c in Sources */ = {isa = PBXBuildFile; fileRef = F3A4909D2554D38500E92A8B /* SDL_hidapi_ps5.c */; }; + F3B38CCF296E2E52005DA6D3 /* SDL_main_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = F3B38CCA296E2E52005DA6D3 /* SDL_main_impl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3B38CD3296E2E52005DA6D3 /* SDL_platform_defines.h in Headers */ = {isa = PBXBuildFile; fileRef = F3B38CCB296E2E52005DA6D3 /* SDL_platform_defines.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3B38CD7296E2E52005DA6D3 /* SDL_init.h in Headers */ = {isa = PBXBuildFile; fileRef = F3B38CCC296E2E52005DA6D3 /* SDL_init.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3B38CDB296E2E52005DA6D3 /* SDL_oldnames.h in Headers */ = {isa = PBXBuildFile; fileRef = F3B38CCD296E2E52005DA6D3 /* SDL_oldnames.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3B38CDF296E2E52005DA6D3 /* SDL_intrin.h in Headers */ = {isa = PBXBuildFile; fileRef = F3B38CCE296E2E52005DA6D3 /* SDL_intrin.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3D60A8328C16A1900788A3A /* SDL_hidapi_wii.c in Sources */ = {isa = PBXBuildFile; fileRef = F3D60A8228C16A1800788A3A /* SDL_hidapi_wii.c */; }; + F3E5A6EB2AD5E0E600293D83 /* SDL_properties.c in Sources */ = {isa = PBXBuildFile; fileRef = F3E5A6EA2AD5E0E600293D83 /* SDL_properties.c */; }; + F3E5A6ED2AD5E10800293D83 /* SDL_properties.h in Headers */ = {isa = PBXBuildFile; fileRef = F3E5A6EC2AD5E10800293D83 /* SDL_properties.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F07D5A269640160074468B /* SDL_hidapi_luna.c in Sources */ = {isa = PBXBuildFile; fileRef = F3F07D59269640160074468B /* SDL_hidapi_luna.c */; }; + F3F7D8ED2933074E00816151 /* SDL_audio.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8AA2933074900816151 /* SDL_audio.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D8F12933074E00816151 /* SDL_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8AB2933074900816151 /* SDL_platform.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D8F52933074E00816151 /* SDL_stdinc.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8AC2933074900816151 /* SDL_stdinc.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D8F92933074E00816151 /* SDL_haptic.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8AD2933074900816151 /* SDL_haptic.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D8FD2933074E00816151 /* SDL_opengles2_gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8AE2933074900816151 /* SDL_opengles2_gl2.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9012933074E00816151 /* SDL_touch.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8AF2933074900816151 /* SDL_touch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9052933074E00816151 /* SDL_main.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8B02933074900816151 /* SDL_main.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9092933074E00816151 /* SDL_opengles2_khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8B12933074900816151 /* SDL_opengles2_khrplatform.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D90D2933074E00816151 /* SDL_timer.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8B22933074900816151 /* SDL_timer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9112933074E00816151 /* SDL_hints.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8B32933074900816151 /* SDL_hints.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9152933074E00816151 /* SDL_revision.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8B42933074900816151 /* SDL_revision.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9192933074E00816151 /* SDL_pixels.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8B52933074A00816151 /* SDL_pixels.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D91D2933074E00816151 /* SDL_messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8B62933074A00816151 /* SDL_messagebox.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9212933074E00816151 /* SDL_log.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8B72933074A00816151 /* SDL_log.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9252933074E00816151 /* SDL_egl.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8B82933074A00816151 /* SDL_egl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9292933074E00816151 /* SDL_atomic.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8B92933074A00816151 /* SDL_atomic.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D92D2933074E00816151 /* SDL_shape.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8BA2933074A00816151 /* SDL_shape.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9312933074E00816151 /* SDL_surface.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8BB2933074A00816151 /* SDL_surface.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9352933074E00816151 /* SDL_error.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8BC2933074A00816151 /* SDL_error.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9392933074E00816151 /* SDL_opengles2_gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8BD2933074A00816151 /* SDL_opengles2_gl2ext.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D93D2933074E00816151 /* SDL_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8BE2933074A00816151 /* SDL_endian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9412933074E00816151 /* SDL_syswm.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8BF2933074A00816151 /* SDL_syswm.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9452933074E00816151 /* SDL_opengl_glext.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8C02933074A00816151 /* SDL_opengl_glext.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9492933074E00816151 /* SDL_scancode.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8C12933074B00816151 /* SDL_scancode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D94D2933074E00816151 /* SDL_sensor.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8C22933074B00816151 /* SDL_sensor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9512933074E00816151 /* SDL_keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8C32933074B00816151 /* SDL_keyboard.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9552933074E00816151 /* SDL_locale.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8C42933074B00816151 /* SDL_locale.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9592933074E00816151 /* SDL_video.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8C52933074B00816151 /* SDL_video.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D95D2933074E00816151 /* SDL_opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8C62933074B00816151 /* SDL_opengles.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9612933074E00816151 /* SDL_opengles2.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8C72933074B00816151 /* SDL_opengles2.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9652933074E00816151 /* SDL_rwops.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8C82933074B00816151 /* SDL_rwops.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9692933074E00816151 /* SDL_opengles2_gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8C92933074B00816151 /* SDL_opengles2_gl2platform.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D96D2933074E00816151 /* SDL_hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8CA2933074B00816151 /* SDL_hidapi.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9712933074E00816151 /* SDL_events.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8CB2933074B00816151 /* SDL_events.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9752933074E00816151 /* SDL_keycode.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8CC2933074B00816151 /* SDL_keycode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9792933074E00816151 /* SDL_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8CD2933074C00816151 /* SDL_thread.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D97D2933074E00816151 /* SDL_blendmode.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8CE2933074C00816151 /* SDL_blendmode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9812933074E00816151 /* SDL.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8CF2933074C00816151 /* SDL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9852933074E00816151 /* SDL_gamepad.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8D02933074C00816151 /* SDL_gamepad.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9892933074E00816151 /* SDL_guid.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8D12933074C00816151 /* SDL_guid.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D98D2933074E00816151 /* SDL_metal.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8D22933074C00816151 /* SDL_metal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9912933074E00816151 /* SDL_joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8D32933074C00816151 /* SDL_joystick.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9952933074E00816151 /* SDL_vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8D42933074C00816151 /* SDL_vulkan.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9992933074E00816151 /* SDL_misc.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8D52933074C00816151 /* SDL_misc.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D99D2933074E00816151 /* SDL_filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8D62933074C00816151 /* SDL_filesystem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9A12933074E00816151 /* SDL_clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8D72933074C00816151 /* SDL_clipboard.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9A52933074E00816151 /* SDL_bits.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8D82933074C00816151 /* SDL_bits.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9A92933074E00816151 /* SDL_loadso.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8D92933074C00816151 /* SDL_loadso.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9AD2933074E00816151 /* SDL_mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8DA2933074D00816151 /* SDL_mouse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9B12933074E00816151 /* SDL_power.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8DB2933074D00816151 /* SDL_power.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9B92933074E00816151 /* SDL_cpuinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8DD2933074D00816151 /* SDL_cpuinfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9BD2933074E00816151 /* SDL_render.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8DE2933074D00816151 /* SDL_render.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9C12933074E00816151 /* SDL_quit.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8DF2933074D00816151 /* SDL_quit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9C52933074E00816151 /* SDL_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8E02933074D00816151 /* SDL_assert.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9C92933074E00816151 /* SDL_opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8E12933074D00816151 /* SDL_opengl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9CD2933074E00816151 /* SDL_rect.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8E22933074D00816151 /* SDL_rect.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9D12933074E00816151 /* SDL_copying.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8E32933074D00816151 /* SDL_copying.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9D52933074E00816151 /* SDL_version.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8E42933074D00816151 /* SDL_version.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9D92933074E00816151 /* SDL_close_code.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8E52933074D00816151 /* SDL_close_code.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9DD2933074E00816151 /* SDL_mutex.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8E62933074E00816151 /* SDL_mutex.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9E12933074E00816151 /* SDL_begin_code.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8E72933074E00816151 /* SDL_begin_code.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3F7D9E52933074E00816151 /* SDL_system.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7D8E82933074E00816151 /* SDL_system.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FA73671D19A540EF004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73671C19A540EF004122E4 /* CoreVideo.framework */; platformFilters = (ios, maccatalyst, macos, tvos, watchos, ); }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + F3676F5C2A7885130091160D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F3B38CEC296F63B6005DA6D3; + remoteInfo = SDL.xcframework; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + A75FDB9C23E4CAEF00529352 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 000078E1881E857EBB6C0000 /* SDL_hashtable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hashtable.c; sourceTree = ""; }; + 0000B6ADCD88CAD6610F0000 /* SDL_hashtable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_hashtable.h; sourceTree = ""; }; + 0073179D0858DECD00B2BC32 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 0073179F0858DECD00B2BC32 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; + 007317C10858E15000B2BC32 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; + 00794D3F09D0C461003FC8A1 /* License.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = License.txt; sourceTree = ""; }; + 00CFA89C106B4BA100758660 /* ForceFeedback.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ForceFeedback.framework; path = System/Library/Frameworks/ForceFeedback.framework; sourceTree = SDKROOT; }; + 00D0D08310675DD9004B05EF /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 5616CA49252BB2A5005D5928 /* SDL_url.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_url.c; sourceTree = ""; }; + 5616CA4A252BB2A6005D5928 /* SDL_sysurl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysurl.h; sourceTree = ""; }; + 5616CA4B252BB2A6005D5928 /* SDL_sysurl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_sysurl.m; sourceTree = ""; }; + 564624351FF821B80074AC87 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + 564624371FF821CB0074AC87 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; }; + 566E26CC246274CB00718109 /* SDL_syslocale.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDL_syslocale.m; path = locale/macos/SDL_syslocale.m; sourceTree = ""; }; + 566E26CD246274CB00718109 /* SDL_locale.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_locale.c; path = locale/SDL_locale.c; sourceTree = ""; }; + 566E26CE246274CC00718109 /* SDL_syslocale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_syslocale.h; path = locale/SDL_syslocale.h; sourceTree = ""; }; + 56A2373229F9C113003CCA5F /* SDL_sysrwlock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysrwlock.c; sourceTree = ""; }; + 75E09158241EA924004729E1 /* SDL_virtualjoystick.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_virtualjoystick.c; sourceTree = ""; }; + 75E09159241EA924004729E1 /* SDL_virtualjoystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_virtualjoystick_c.h; sourceTree = ""; }; + 9846B07B287A9020000C35C8 /* SDL_hidapi_shield.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_shield.c; sourceTree = ""; }; + A1626A3D2617006A003F1973 /* SDL_triangle.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_triangle.c; sourceTree = ""; }; + A1626A512617008C003F1973 /* SDL_triangle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_triangle.h; sourceTree = ""; }; + A1BB8B6127F6CF320057CFA8 /* SDL_list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_list.c; sourceTree = ""; }; + A1BB8B6227F6CF330057CFA8 /* SDL_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_list.h; sourceTree = ""; }; + A7381E931D8B69C300B177DD /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; + A7381E951D8B69D600B177DD /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; + A75FDAA523E2792500529352 /* hid.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = hid.m; sourceTree = ""; }; + A75FDAAC23E2795C00529352 /* SDL_hidapi_steam.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_steam.c; sourceTree = ""; }; + A75FDAB923E28A7A00529352 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; + A75FDABD23E28B6200529352 /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; }; + A75FDABF23E28B8000529352 /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; }; + A75FDAC123E28B9600529352 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + A75FDAC323E28BA700529352 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; }; + A75FDB5723E39E6100529352 /* hidapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hidapi.h; path = hidapi/hidapi.h; sourceTree = ""; }; + A75FDB9223E4C8DB00529352 /* hid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hid.c; sourceTree = ""; }; + A75FDBA323E4CB6F00529352 /* LICENSE-bsd.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "LICENSE-bsd.txt"; sourceTree = ""; }; + A75FDBA423E4CB6F00529352 /* AUTHORS.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS.txt; sourceTree = ""; }; + A75FDBA523E4CB6F00529352 /* LICENSE-orig.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "LICENSE-orig.txt"; sourceTree = ""; }; + A75FDBA623E4CB6F00529352 /* LICENSE-gpl3.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "LICENSE-gpl3.txt"; sourceTree = ""; }; + A75FDBA723E4CB6F00529352 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; + A75FDBC323EA380300529352 /* SDL_hidapi_rumble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_hidapi_rumble.h; sourceTree = ""; }; + A75FDBC423EA380300529352 /* SDL_hidapi_rumble.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_rumble.c; sourceTree = ""; }; + A7D8A57123E2513D00DCD162 /* SDL.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL.c; sourceTree = ""; }; + A7D8A57323E2513D00DCD162 /* SDL_spinlock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_spinlock.c; sourceTree = ""; }; + A7D8A57423E2513D00DCD162 /* SDL_atomic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_atomic.c; sourceTree = ""; }; + A7D8A57523E2513D00DCD162 /* SDL_error_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_error_c.h; sourceTree = ""; }; + A7D8A57823E2513D00DCD162 /* SDL_dummysensor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dummysensor.h; sourceTree = ""; }; + A7D8A57923E2513D00DCD162 /* SDL_dummysensor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_dummysensor.c; sourceTree = ""; }; + A7D8A57B23E2513D00DCD162 /* SDL_coremotionsensor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_coremotionsensor.h; sourceTree = ""; }; + A7D8A57C23E2513D00DCD162 /* SDL_coremotionsensor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_coremotionsensor.m; sourceTree = ""; }; + A7D8A57D23E2513D00DCD162 /* SDL_syssensor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_syssensor.h; sourceTree = ""; }; + A7D8A58123E2513D00DCD162 /* SDL_sensor_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sensor_c.h; sourceTree = ""; }; + A7D8A58223E2513D00DCD162 /* SDL_sensor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sensor.c; sourceTree = ""; }; + A7D8A58323E2513D00DCD162 /* SDL_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_internal.h; sourceTree = ""; }; + A7D8A5AB23E2513D00DCD162 /* SDL_hints.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hints.c; sourceTree = ""; }; + A7D8A5C423E2513D00DCD162 /* SDL_syshaptic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syshaptic.c; sourceTree = ""; }; + A7D8A5C523E2513D00DCD162 /* SDL_haptic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_haptic.c; sourceTree = ""; }; + A7D8A5C623E2513D00DCD162 /* SDL_haptic_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_haptic_c.h; sourceTree = ""; }; + A7D8A5CC23E2513D00DCD162 /* SDL_syshaptic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_syshaptic.h; sourceTree = ""; }; + A7D8A5CE23E2513D00DCD162 /* SDL_syshaptic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syshaptic.c; sourceTree = ""; }; + A7D8A5CF23E2513D00DCD162 /* SDL_syshaptic_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_syshaptic_c.h; sourceTree = ""; }; + A7D8A5D823E2513D00DCD162 /* SDL_dynapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dynapi.h; sourceTree = ""; }; + A7D8A5D923E2513D00DCD162 /* SDL_dynapi_overrides.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dynapi_overrides.h; sourceTree = ""; }; + A7D8A5DA23E2513D00DCD162 /* SDL_dynapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_dynapi.c; sourceTree = ""; }; + A7D8A5DB23E2513D00DCD162 /* SDL_dynapi_procs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dynapi_procs.h; sourceTree = ""; }; + A7D8A5DD23E2513D00DCD162 /* SDL_log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_log.c; sourceTree = ""; }; + A7D8A5DF23E2513D00DCD162 /* SDL_timer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_timer.c; sourceTree = ""; }; + A7D8A5E023E2513D00DCD162 /* SDL_timer_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_timer_c.h; sourceTree = ""; }; + A7D8A5E223E2513D00DCD162 /* SDL_systimer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_systimer.c; sourceTree = ""; }; + A7D8A5E823E2513D00DCD162 /* SDL_systimer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_systimer.c; sourceTree = ""; }; + A7D8A5EE23E2513D00DCD162 /* SDL_offscreenevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_offscreenevents_c.h; sourceTree = ""; }; + A7D8A5EF23E2513D00DCD162 /* SDL_offscreenwindow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_offscreenwindow.c; sourceTree = ""; }; + A7D8A5F023E2513D00DCD162 /* SDL_offscreenevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_offscreenevents.c; sourceTree = ""; }; + A7D8A5F123E2513D00DCD162 /* SDL_offscreenvideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_offscreenvideo.h; sourceTree = ""; }; + A7D8A5F223E2513D00DCD162 /* SDL_offscreenframebuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_offscreenframebuffer.c; sourceTree = ""; }; + A7D8A5F423E2513D00DCD162 /* SDL_offscreenframebuffer_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_offscreenframebuffer_c.h; sourceTree = ""; }; + A7D8A5F523E2513D00DCD162 /* SDL_offscreenwindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_offscreenwindow.h; sourceTree = ""; }; + A7D8A5F623E2513D00DCD162 /* SDL_offscreenvideo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_offscreenvideo.c; sourceTree = ""; }; + A7D8A60223E2513D00DCD162 /* SDL_blit_slow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_slow.c; sourceTree = ""; }; + A7D8A60323E2513D00DCD162 /* SDL_stretch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_stretch.c; sourceTree = ""; }; + A7D8A60423E2513D00DCD162 /* SDL_egl_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_egl_c.h; sourceTree = ""; }; + A7D8A60623E2513D00DCD162 /* SDL_nullframebuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_nullframebuffer.c; sourceTree = ""; }; + A7D8A60723E2513D00DCD162 /* SDL_nullframebuffer_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_nullframebuffer_c.h; sourceTree = ""; }; + A7D8A60823E2513D00DCD162 /* SDL_nullvideo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_nullvideo.c; sourceTree = ""; }; + A7D8A60923E2513D00DCD162 /* SDL_nullevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_nullevents.c; sourceTree = ""; }; + A7D8A60A23E2513D00DCD162 /* SDL_nullvideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_nullvideo.h; sourceTree = ""; }; + A7D8A60B23E2513D00DCD162 /* SDL_nullevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_nullevents_c.h; sourceTree = ""; }; + A7D8A60C23E2513D00DCD162 /* SDL_rect_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_rect_c.h; sourceTree = ""; }; + A7D8A60D23E2513D00DCD162 /* SDL_shape_internals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shape_internals.h; sourceTree = ""; }; + A7D8A60E23E2513D00DCD162 /* SDL_video.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_video.c; sourceTree = ""; }; + A7D8A61423E2513D00DCD162 /* SDL_surface.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_surface.c; sourceTree = ""; }; + A7D8A61523E2513D00DCD162 /* SDL_RLEaccel.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_RLEaccel.c; sourceTree = ""; }; + A7D8A61623E2513D00DCD162 /* SDL_blit_copy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_copy.c; sourceTree = ""; }; + A7D8A61723E2513D00DCD162 /* SDL_sysvideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysvideo.h; sourceTree = ""; }; + A7D8A61923E2513D00DCD162 /* SDL_uikitview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitview.h; sourceTree = ""; }; + A7D8A61A23E2513D00DCD162 /* SDL_uikitwindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitwindow.m; sourceTree = ""; }; + A7D8A61B23E2513D00DCD162 /* SDL_uikitmessagebox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitmessagebox.m; sourceTree = ""; }; + A7D8A61C23E2513D00DCD162 /* SDL_uikitevents.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitevents.m; sourceTree = ""; }; + A7D8A61D23E2513D00DCD162 /* SDL_uikitmetalview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitmetalview.h; sourceTree = ""; }; + A7D8A61E23E2513D00DCD162 /* SDL_uikitappdelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitappdelegate.m; sourceTree = ""; }; + A7D8A61F23E2513D00DCD162 /* SDL_uikitmodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitmodes.h; sourceTree = ""; }; + A7D8A62023E2513D00DCD162 /* SDL_uikitopenglview.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitopenglview.m; sourceTree = ""; }; + A7D8A62123E2513D00DCD162 /* SDL_uikitclipboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitclipboard.h; sourceTree = ""; }; + A7D8A62223E2513D00DCD162 /* SDL_uikitvideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitvideo.h; sourceTree = ""; }; + A7D8A62323E2513D00DCD162 /* SDL_uikitopengles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitopengles.m; sourceTree = ""; }; + A7D8A62423E2513D00DCD162 /* SDL_uikitviewcontroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitviewcontroller.h; sourceTree = ""; }; + A7D8A62523E2513D00DCD162 /* SDL_uikitvulkan.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitvulkan.m; sourceTree = ""; }; + A7D8A62623E2513D00DCD162 /* SDL_uikitmessagebox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitmessagebox.h; sourceTree = ""; }; + A7D8A62723E2513D00DCD162 /* SDL_uikitwindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitwindow.h; sourceTree = ""; }; + A7D8A62923E2513D00DCD162 /* SDL_uikitview.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitview.m; sourceTree = ""; }; + A7D8A62A23E2513D00DCD162 /* SDL_uikitclipboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitclipboard.m; sourceTree = ""; }; + A7D8A62B23E2513D00DCD162 /* SDL_uikitopenglview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitopenglview.h; sourceTree = ""; }; + A7D8A62C23E2513D00DCD162 /* SDL_uikitmodes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitmodes.m; sourceTree = ""; }; + A7D8A62D23E2513D00DCD162 /* SDL_uikitevents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitevents.h; sourceTree = ""; }; + A7D8A62E23E2513D00DCD162 /* SDL_uikitmetalview.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitmetalview.m; sourceTree = ""; }; + A7D8A62F23E2513D00DCD162 /* SDL_uikitappdelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitappdelegate.h; sourceTree = ""; }; + A7D8A63023E2513D00DCD162 /* SDL_uikitviewcontroller.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitviewcontroller.m; sourceTree = ""; }; + A7D8A63123E2513D00DCD162 /* SDL_uikitopengles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitopengles.h; sourceTree = ""; }; + A7D8A63223E2513D00DCD162 /* SDL_uikitvideo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitvideo.m; sourceTree = ""; }; + A7D8A63323E2513D00DCD162 /* SDL_uikitvulkan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitvulkan.h; sourceTree = ""; }; + A7D8A63423E2513D00DCD162 /* SDL_rect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_rect.c; sourceTree = ""; }; + A7D8A63E23E2513D00DCD162 /* SDL_vulkan_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_vulkan_internal.h; sourceTree = ""; }; + A7D8A63F23E2513D00DCD162 /* SDL_blit_auto.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_auto.c; sourceTree = ""; }; + A7D8A64023E2513D00DCD162 /* SDL_vulkan_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_vulkan_utils.c; sourceTree = ""; }; + A7D8A64223E2513D00DCD162 /* SDL_blit_N.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_N.c; sourceTree = ""; }; + A7D8A64C23E2513D00DCD162 /* SDL_blit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit.c; sourceTree = ""; }; + A7D8A64D23E2513D00DCD162 /* SDL_pixels.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_pixels.c; sourceTree = ""; }; + A7D8A66223E2513E00DCD162 /* SDL_blit_0.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_0.c; sourceTree = ""; }; + A7D8A66323E2513E00DCD162 /* SDL_blit_slow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit_slow.h; sourceTree = ""; }; + A7D8A66423E2513E00DCD162 /* SDL_blit_A.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_A.c; sourceTree = ""; }; + A7D8A67B23E2513E00DCD162 /* SDL_clipboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_clipboard.c; sourceTree = ""; }; + A7D8A67C23E2513E00DCD162 /* SDL_yuv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_yuv.c; sourceTree = ""; }; + A7D8A67E23E2513E00DCD162 /* SDL_cocoashape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoashape.h; sourceTree = ""; }; + A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoaopengl.m; sourceTree = ""; }; + A7D8A68023E2513E00DCD162 /* SDL_cocoakeyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoakeyboard.h; sourceTree = ""; }; + A7D8A68123E2513E00DCD162 /* SDL_cocoamodes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoamodes.m; sourceTree = ""; }; + A7D8A68223E2513E00DCD162 /* SDL_cocoaopengles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoaopengles.m; sourceTree = ""; }; + A7D8A68323E2513E00DCD162 /* SDL_cocoavulkan.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoavulkan.m; sourceTree = ""; }; + A7D8A68423E2513E00DCD162 /* SDL_cocoawindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoawindow.m; sourceTree = ""; }; + A7D8A68523E2513E00DCD162 /* SDL_cocoavideo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoavideo.m; sourceTree = ""; }; + A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoametalview.h; sourceTree = ""; }; + A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoamouse.m; sourceTree = ""; }; + A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoaevents.m; sourceTree = ""; }; + A7D8A68A23E2513E00DCD162 /* SDL_cocoaclipboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoaclipboard.h; sourceTree = ""; }; + A7D8A68B23E2513E00DCD162 /* SDL_cocoamessagebox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoamessagebox.m; sourceTree = ""; }; + A7D8A68C23E2513E00DCD162 /* SDL_cocoakeyboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoakeyboard.m; sourceTree = ""; }; + A7D8A68D23E2513E00DCD162 /* SDL_cocoaopengl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoaopengl.h; sourceTree = ""; }; + A7D8A68E23E2513E00DCD162 /* SDL_cocoashape.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoashape.m; sourceTree = ""; }; + A7D8A68F23E2513E00DCD162 /* SDL_cocoavulkan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoavulkan.h; sourceTree = ""; }; + A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoaopengles.h; sourceTree = ""; }; + A7D8A69123E2513E00DCD162 /* SDL_cocoamodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoamodes.h; sourceTree = ""; }; + A7D8A69223E2513E00DCD162 /* SDL_cocoawindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoawindow.h; sourceTree = ""; }; + A7D8A69323E2513E00DCD162 /* SDL_cocoavideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoavideo.h; sourceTree = ""; }; + A7D8A69423E2513E00DCD162 /* SDL_cocoamessagebox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoamessagebox.h; sourceTree = ""; }; + A7D8A69523E2513E00DCD162 /* SDL_cocoaclipboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoaclipboard.m; sourceTree = ""; }; + A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoaevents.h; sourceTree = ""; }; + A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoamouse.h; sourceTree = ""; }; + A7D8A69923E2513E00DCD162 /* SDL_cocoametalview.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoametalview.m; sourceTree = ""; }; + A7D8A6B623E2513E00DCD162 /* SDL_egl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_egl.c; sourceTree = ""; }; + A7D8A6FA23E2513E00DCD162 /* SDL_blit_1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_1.c; sourceTree = ""; }; + A7D8A72323E2513E00DCD162 /* gl2ext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gl2ext.h; sourceTree = ""; }; + A7D8A72423E2513E00DCD162 /* gl2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gl2.h; sourceTree = ""; }; + A7D8A72523E2513E00DCD162 /* gl2platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gl2platform.h; sourceTree = ""; }; + A7D8A72723E2513E00DCD162 /* khrplatform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = khrplatform.h; sourceTree = ""; }; + A7D8A72923E2513E00DCD162 /* egl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = egl.h; sourceTree = ""; }; + A7D8A72A23E2513E00DCD162 /* eglext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eglext.h; sourceTree = ""; }; + A7D8A72B23E2513E00DCD162 /* eglplatform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eglplatform.h; sourceTree = ""; }; + A7D8A72D23E2513E00DCD162 /* vk_layer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vk_layer.h; sourceTree = ""; }; + A7D8A72E23E2513E00DCD162 /* vk_icd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vk_icd.h; sourceTree = ""; }; + A7D8A72F23E2513E00DCD162 /* vulkan_vi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_vi.h; sourceTree = ""; }; + A7D8A73023E2513E00DCD162 /* vulkan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan.h; sourceTree = ""; }; + A7D8A73123E2513E00DCD162 /* vk_platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vk_platform.h; sourceTree = ""; }; + A7D8A73223E2513E00DCD162 /* vulkan.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = vulkan.hpp; sourceTree = ""; }; + A7D8A73323E2513E00DCD162 /* vulkan_fuchsia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_fuchsia.h; sourceTree = ""; }; + A7D8A73423E2513E00DCD162 /* vulkan_wayland.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_wayland.h; sourceTree = ""; }; + A7D8A73523E2513E00DCD162 /* vulkan_win32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_win32.h; sourceTree = ""; }; + A7D8A73623E2513E00DCD162 /* vulkan_macos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_macos.h; sourceTree = ""; }; + A7D8A73723E2513E00DCD162 /* vulkan_xlib_xrandr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_xlib_xrandr.h; sourceTree = ""; }; + A7D8A73823E2513E00DCD162 /* vulkan_xcb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_xcb.h; sourceTree = ""; }; + A7D8A73923E2513E00DCD162 /* vulkan_mir.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_mir.h; sourceTree = ""; }; + A7D8A73A23E2513E00DCD162 /* vulkan_xlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_xlib.h; sourceTree = ""; }; + A7D8A73B23E2513E00DCD162 /* vulkan_ios.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_ios.h; sourceTree = ""; }; + A7D8A73C23E2513E00DCD162 /* vulkan_core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_core.h; sourceTree = ""; }; + A7D8A73D23E2513E00DCD162 /* vk_sdk_platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vk_sdk_platform.h; sourceTree = ""; }; + A7D8A73E23E2513E00DCD162 /* vulkan_android.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_android.h; sourceTree = ""; }; + A7D8A73F23E2513E00DCD162 /* SDL_blit_auto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit_auto.h; sourceTree = ""; }; + A7D8A74023E2513E00DCD162 /* SDL_pixels_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_pixels_c.h; sourceTree = ""; }; + A7D8A76623E2513E00DCD162 /* SDL_blit_copy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit_copy.h; sourceTree = ""; }; + A7D8A76723E2513E00DCD162 /* SDL_RLEaccel_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_RLEaccel_c.h; sourceTree = ""; }; + A7D8A76823E2513E00DCD162 /* SDL_fillrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_fillrect.c; sourceTree = ""; }; + A7D8A76923E2513E00DCD162 /* SDL_shape.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_shape.c; sourceTree = ""; }; + A7D8A76A23E2513E00DCD162 /* SDL_yuv_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_yuv_c.h; sourceTree = ""; }; + A7D8A76B23E2513E00DCD162 /* SDL_blit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit.h; sourceTree = ""; }; + A7D8A76E23E2513E00DCD162 /* yuv_rgb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = yuv_rgb.c; sourceTree = ""; }; + A7D8A77023E2513E00DCD162 /* yuv_rgb_sse_func.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = yuv_rgb_sse_func.h; sourceTree = ""; }; + A7D8A77123E2513E00DCD162 /* yuv_rgb_std_func.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = yuv_rgb_std_func.h; sourceTree = ""; }; + A7D8A77223E2513E00DCD162 /* yuv_rgb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = yuv_rgb.h; sourceTree = ""; }; + A7D8A77323E2513E00DCD162 /* SDL_bmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_bmp.c; sourceTree = ""; }; + A7D8A77523E2513E00DCD162 /* SDL_cpuinfo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_cpuinfo.c; sourceTree = ""; }; + A7D8A77723E2513E00DCD162 /* SDL_systhread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_systhread.h; sourceTree = ""; }; + A7D8A77823E2513E00DCD162 /* SDL_thread_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_thread_c.h; sourceTree = ""; }; + A7D8A77923E2513E00DCD162 /* SDL_thread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_thread.c; sourceTree = ""; }; + A7D8A78223E2513E00DCD162 /* SDL_systls.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_systls.c; sourceTree = ""; }; + A7D8A78323E2513E00DCD162 /* SDL_syssem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syssem.c; sourceTree = ""; }; + A7D8A78423E2513E00DCD162 /* SDL_systhread_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_systhread_c.h; sourceTree = ""; }; + A7D8A78523E2513E00DCD162 /* SDL_syscond.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syscond.c; sourceTree = ""; }; + A7D8A78623E2513E00DCD162 /* SDL_systhread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_systhread.c; sourceTree = ""; }; + A7D8A78723E2513E00DCD162 /* SDL_sysmutex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysmutex.c; sourceTree = ""; }; + A7D8A78823E2513E00DCD162 /* SDL_sysmutex_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysmutex_c.h; sourceTree = ""; }; + A7D8A79E23E2513E00DCD162 /* SDL_gamepad_db.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_gamepad_db.h; sourceTree = ""; }; + A7D8A7A023E2513E00DCD162 /* SDL_sysjoystick.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysjoystick.c; sourceTree = ""; }; + A7D8A7A523E2513E00DCD162 /* SDL_steamcontroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_steamcontroller.h; sourceTree = ""; }; + A7D8A7A723E2513E00DCD162 /* SDL_steamcontroller.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_steamcontroller.c; sourceTree = ""; }; + A7D8A7A923E2513E00DCD162 /* SDL_joystick.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_joystick.c; sourceTree = ""; }; + A7D8A7AD23E2513E00DCD162 /* SDL_gamepad.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_gamepad.c; sourceTree = ""; }; + A7D8A7C223E2513E00DCD162 /* SDL_hidapi_xbox360.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_xbox360.c; sourceTree = ""; }; + A7D8A7C323E2513E00DCD162 /* SDL_hidapi_ps4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_ps4.c; sourceTree = ""; }; + A7D8A7C423E2513E00DCD162 /* SDL_hidapijoystick.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapijoystick.c; sourceTree = ""; }; + A7D8A7C523E2513E00DCD162 /* SDL_hidapi_xboxone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_xboxone.c; sourceTree = ""; }; + A7D8A7C623E2513E00DCD162 /* SDL_hidapi_switch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_switch.c; sourceTree = ""; }; + A7D8A7C723E2513E00DCD162 /* SDL_hidapijoystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_hidapijoystick_c.h; sourceTree = ""; }; + A7D8A7C823E2513E00DCD162 /* SDL_hidapi_xbox360w.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_xbox360w.c; sourceTree = ""; }; + A7D8A7C923E2513E00DCD162 /* SDL_hidapi_gamecube.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_gamecube.c; sourceTree = ""; }; + A7D8A7CB23E2513E00DCD162 /* usb_ids.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = usb_ids.h; sourceTree = ""; }; + A7D8A7CF23E2513E00DCD162 /* SDL_sysjoystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysjoystick.h; sourceTree = ""; }; + A7D8A7D023E2513E00DCD162 /* SDL_joystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_joystick_c.h; sourceTree = ""; }; + A7D8A7D923E2513E00DCD162 /* controller_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = controller_type.h; sourceTree = ""; }; + A7D8A7DB23E2513F00DCD162 /* SDL_rwops.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_rwops.c; sourceTree = ""; }; + A7D8A7DD23E2513F00DCD162 /* SDL_rwopsbundlesupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_rwopsbundlesupport.h; sourceTree = ""; }; + A7D8A7DE23E2513F00DCD162 /* SDL_rwopsbundlesupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_rwopsbundlesupport.m; sourceTree = ""; }; + A7D8A7E123E2513F00DCD162 /* SDL_syspower.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_syspower.m; sourceTree = ""; }; + A7D8A7E223E2513F00DCD162 /* SDL_syspower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_syspower.h; sourceTree = ""; }; + A7D8A7E723E2513F00DCD162 /* SDL_power.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_power.c; sourceTree = ""; }; + A7D8A7EB23E2513F00DCD162 /* SDL_syspower.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syspower.c; sourceTree = ""; }; + A7D8A7F423E2513F00DCD162 /* SDL_syspower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_syspower.h; sourceTree = ""; }; + A7D8A7F523E2513F00DCD162 /* SDL_assert_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_assert_c.h; sourceTree = ""; }; + A7D8A7F823E2513F00DCD162 /* SDL_sysfilesystem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysfilesystem.c; sourceTree = ""; }; + A7D8A7FE23E2513F00DCD162 /* SDL_sysfilesystem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_sysfilesystem.m; sourceTree = ""; }; + A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi.c; sourceTree = ""; }; + A7D8A85F23E2513F00DCD162 /* SDL_sysloadso.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysloadso.c; sourceTree = ""; }; + A7D8A86323E2513F00DCD162 /* SDL_sysloadso.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysloadso.c; sourceTree = ""; }; + A7D8A86523E2513F00DCD162 /* SDL_mixer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_mixer.c; sourceTree = ""; }; + A7D8A86623E2513F00DCD162 /* SDL_wave.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_wave.c; sourceTree = ""; }; + A7D8A87123E2513F00DCD162 /* SDL_dummyaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dummyaudio.h; sourceTree = ""; }; + A7D8A87223E2513F00DCD162 /* SDL_dummyaudio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_dummyaudio.c; sourceTree = ""; }; + A7D8A87323E2513F00DCD162 /* SDL_audio_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_audio_c.h; sourceTree = ""; }; + A7D8A87723E2513F00DCD162 /* SDL_audiodev_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_audiodev_c.h; sourceTree = ""; }; + A7D8A88F23E2513F00DCD162 /* SDL_audiodev.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_audiodev.c; sourceTree = ""; }; + A7D8A89F23E2513F00DCD162 /* SDL_sysaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysaudio.h; sourceTree = ""; }; + A7D8A8A023E2513F00DCD162 /* SDL_audiotypecvt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_audiotypecvt.c; sourceTree = ""; }; + A7D8A8A123E2513F00DCD162 /* SDL_audiocvt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_audiocvt.c; sourceTree = ""; }; + A7D8A8A223E2513F00DCD162 /* SDL_wave.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_wave.h; sourceTree = ""; }; + A7D8A8B023E2513F00DCD162 /* SDL_diskaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_diskaudio.h; sourceTree = ""; }; + A7D8A8B123E2513F00DCD162 /* SDL_diskaudio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_diskaudio.c; sourceTree = ""; }; + A7D8A8B823E2513F00DCD162 /* SDL_audio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_audio.c; sourceTree = ""; }; + A7D8A8BA23E2513F00DCD162 /* SDL_coreaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_coreaudio.h; sourceTree = ""; }; + A7D8A8BB23E2513F00DCD162 /* SDL_coreaudio.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_coreaudio.m; sourceTree = ""; }; + A7D8A8BF23E2513F00DCD162 /* SDL_error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_error.c; sourceTree = ""; }; + A7D8A8D123E2514000DCD162 /* SDL_hints_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_hints_c.h; sourceTree = ""; }; + A7D8A8D323E2514000DCD162 /* SDL_iconv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_iconv.c; sourceTree = ""; }; + A7D8A8D423E2514000DCD162 /* SDL_getenv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_getenv.c; sourceTree = ""; }; + A7D8A8D523E2514000DCD162 /* SDL_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_string.c; sourceTree = ""; }; + A7D8A8D623E2514000DCD162 /* SDL_strtokr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_strtokr.c; sourceTree = ""; }; + A7D8A8D723E2514000DCD162 /* SDL_qsort.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_qsort.c; sourceTree = ""; }; + A7D8A8D823E2514000DCD162 /* SDL_stdlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_stdlib.c; sourceTree = ""; }; + A7D8A8D923E2514000DCD162 /* SDL_malloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_malloc.c; sourceTree = ""; }; + A7D8A8DB23E2514000DCD162 /* SDL_render.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render.c; sourceTree = ""; }; + A7D8A8DC23E2514000DCD162 /* SDL_d3dmath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_d3dmath.h; sourceTree = ""; }; + A7D8A8DE23E2514000DCD162 /* SDL_render_metal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_render_metal.m; sourceTree = ""; }; + A7D8A8DF23E2514000DCD162 /* SDL_shaders_metal_ios.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_metal_ios.h; sourceTree = ""; }; + A7D8A8E023E2514000DCD162 /* SDL_shaders_metal.metal */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.metal; path = SDL_shaders_metal.metal; sourceTree = ""; }; + A7D8A8E223E2514000DCD162 /* SDL_shaders_metal_macos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_metal_macos.h; sourceTree = ""; }; + A7D8A8E323E2514000DCD162 /* SDL_shaders_metal_tvos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_metal_tvos.h; sourceTree = ""; }; + A7D8A8EC23E2514000DCD162 /* SDL_yuv_sw_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_yuv_sw_c.h; sourceTree = ""; }; + A7D8A8ED23E2514000DCD162 /* SDL_yuv_sw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_yuv_sw.c; sourceTree = ""; }; + A7D8A8EE23E2514000DCD162 /* SDL_sysrender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysrender.h; sourceTree = ""; }; + A7D8A8F023E2514000DCD162 /* SDL_blendpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendpoint.c; sourceTree = ""; }; + A7D8A8F123E2514000DCD162 /* SDL_drawline.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawline.c; sourceTree = ""; }; + A7D8A8F223E2514000DCD162 /* SDL_blendline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendline.h; sourceTree = ""; }; + A7D8A8F323E2514000DCD162 /* SDL_drawpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_drawpoint.h; sourceTree = ""; }; + A7D8A8F423E2514000DCD162 /* SDL_rotate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_rotate.c; sourceTree = ""; }; + A7D8A8F523E2514000DCD162 /* SDL_render_sw_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_render_sw_c.h; sourceTree = ""; }; + A7D8A8F623E2514000DCD162 /* SDL_blendfillrect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendfillrect.h; sourceTree = ""; }; + A7D8A8F723E2514000DCD162 /* SDL_drawline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_drawline.h; sourceTree = ""; }; + A7D8A8F823E2514000DCD162 /* SDL_blendpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendpoint.h; sourceTree = ""; }; + A7D8A8F923E2514000DCD162 /* SDL_render_sw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render_sw.c; sourceTree = ""; }; + A7D8A8FA23E2514000DCD162 /* SDL_draw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_draw.h; sourceTree = ""; }; + A7D8A8FB23E2514000DCD162 /* SDL_blendline.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendline.c; sourceTree = ""; }; + A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawpoint.c; sourceTree = ""; }; + A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendfillrect.c; sourceTree = ""; }; + A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_rotate.h; sourceTree = ""; }; + A7D8A8FF23E2514000DCD162 /* SDL_d3dmath.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_d3dmath.c; sourceTree = ""; }; + A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render_gles2.c; sourceTree = ""; }; + A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_gles2.h; sourceTree = ""; }; + A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_gles2funcs.h; sourceTree = ""; }; + A7D8A90723E2514000DCD162 /* SDL_shaders_gles2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_shaders_gles2.c; sourceTree = ""; }; + A7D8A90D23E2514000DCD162 /* SDL_shaders_gl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_gl.h; sourceTree = ""; }; + A7D8A90E23E2514000DCD162 /* SDL_glfuncs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_glfuncs.h; sourceTree = ""; }; + A7D8A90F23E2514000DCD162 /* SDL_render_gl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render_gl.c; sourceTree = ""; }; + A7D8A91023E2514000DCD162 /* SDL_shaders_gl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_shaders_gl.c; sourceTree = ""; }; + A7D8A91223E2514000DCD162 /* s_sin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s_sin.c; sourceTree = ""; }; + A7D8A91323E2514000DCD162 /* s_cos.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s_cos.c; sourceTree = ""; }; + A7D8A91423E2514000DCD162 /* s_copysign.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s_copysign.c; sourceTree = ""; }; + A7D8A91523E2514000DCD162 /* s_fabs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s_fabs.c; sourceTree = ""; }; + A7D8A91623E2514000DCD162 /* k_rem_pio2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = k_rem_pio2.c; sourceTree = ""; }; + A7D8A91723E2514000DCD162 /* k_sin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = k_sin.c; sourceTree = ""; }; + A7D8A91823E2514000DCD162 /* s_atan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s_atan.c; sourceTree = ""; }; + A7D8A91923E2514000DCD162 /* k_cos.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = k_cos.c; sourceTree = ""; }; + A7D8A91A23E2514000DCD162 /* s_scalbn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s_scalbn.c; sourceTree = ""; }; + A7D8A91B23E2514000DCD162 /* math_private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = math_private.h; sourceTree = ""; }; + A7D8A91C23E2514000DCD162 /* e_pow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = e_pow.c; sourceTree = ""; }; + A7D8A91D23E2514000DCD162 /* e_atan2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = e_atan2.c; sourceTree = ""; }; + A7D8A91E23E2514000DCD162 /* s_tan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s_tan.c; sourceTree = ""; }; + A7D8A91F23E2514000DCD162 /* e_rem_pio2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = e_rem_pio2.c; sourceTree = ""; }; + A7D8A92023E2514000DCD162 /* e_fmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = e_fmod.c; sourceTree = ""; }; + A7D8A92123E2514000DCD162 /* e_exp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = e_exp.c; sourceTree = ""; }; + A7D8A92223E2514000DCD162 /* e_log10.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = e_log10.c; sourceTree = ""; }; + A7D8A92323E2514000DCD162 /* e_log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = e_log.c; sourceTree = ""; }; + A7D8A92423E2514000DCD162 /* e_sqrt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = e_sqrt.c; sourceTree = ""; }; + A7D8A92523E2514000DCD162 /* s_floor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s_floor.c; sourceTree = ""; }; + A7D8A92623E2514000DCD162 /* math_libm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = math_libm.h; sourceTree = ""; }; + A7D8A92723E2514000DCD162 /* k_tan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = k_tan.c; sourceTree = ""; }; + A7D8A92A23E2514000DCD162 /* SDL_mouse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_mouse.c; sourceTree = ""; }; + A7D8A92B23E2514000DCD162 /* SDL_mouse_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_mouse_c.h; sourceTree = ""; }; + A7D8A92C23E2514000DCD162 /* scancodes_windows.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scancodes_windows.h; sourceTree = ""; }; + A7D8A92D23E2514000DCD162 /* SDL_displayevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_displayevents.c; sourceTree = ""; }; + A7D8A92E23E2514000DCD162 /* SDL_dropevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dropevents_c.h; sourceTree = ""; }; + A7D8A92F23E2514000DCD162 /* SDL_windowevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_windowevents.c; sourceTree = ""; }; + A7D8A93123E2514000DCD162 /* SDL_displayevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_displayevents_c.h; sourceTree = ""; }; + A7D8A93223E2514000DCD162 /* blank_cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blank_cursor.h; sourceTree = ""; }; + A7D8A93323E2514000DCD162 /* default_cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = default_cursor.h; sourceTree = ""; }; + A7D8A93423E2514000DCD162 /* scancodes_darwin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scancodes_darwin.h; sourceTree = ""; }; + A7D8A93523E2514000DCD162 /* SDL_events.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_events.c; sourceTree = ""; }; + A7D8A93623E2514000DCD162 /* scancodes_linux.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scancodes_linux.h; sourceTree = ""; }; + A7D8A93723E2514000DCD162 /* SDL_touch_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_touch_c.h; sourceTree = ""; }; + A7D8A93823E2514000DCD162 /* SDL_keyboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_keyboard.c; sourceTree = ""; }; + A7D8A93923E2514000DCD162 /* SDL_clipboardevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_clipboardevents_c.h; sourceTree = ""; }; + A7D8A93A23E2514000DCD162 /* SDL_clipboardevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_clipboardevents.c; sourceTree = ""; }; + A7D8A93B23E2514000DCD162 /* SDL_dropevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_dropevents.c; sourceTree = ""; }; + A7D8A93C23E2514000DCD162 /* SDL_quit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_quit.c; sourceTree = ""; }; + A7D8A93D23E2514000DCD162 /* SDL_keyboard_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_keyboard_c.h; sourceTree = ""; }; + A7D8A93E23E2514000DCD162 /* SDL_touch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_touch.c; sourceTree = ""; }; + A7D8A94123E2514000DCD162 /* scancodes_xfree86.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scancodes_xfree86.h; sourceTree = ""; }; + A7D8A94223E2514000DCD162 /* SDL_events_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_events_c.h; sourceTree = ""; }; + A7D8A94323E2514000DCD162 /* SDL_windowevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_windowevents_c.h; sourceTree = ""; }; + A7D8A94423E2514000DCD162 /* SDL_assert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_assert.c; sourceTree = ""; }; + BECDF66B0761BA81005FE872 /* Info-Framework.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Framework.plist"; sourceTree = ""; }; + BECDF66C0761BA81005FE872 /* SDL3.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDL3.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E2D187D228A5673500D2B4F1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E4F798192AD8D84800669F54 /* SDL_core_unsupported.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_core_unsupported.c; sourceTree = ""; }; + E4F7981B2AD8D85500669F54 /* SDL_dynapi_unsupported.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dynapi_unsupported.h; sourceTree = ""; }; + E4F7981D2AD8D86A00669F54 /* SDL_render_unsupported.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render_unsupported.c; sourceTree = ""; }; + E4F7981F2AD8D87F00669F54 /* SDL_video_unsupported.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_video_unsupported.c; sourceTree = ""; }; + F31A92C628D4CB39003BFD6A /* SDL_offscreenopengles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_offscreenopengles.h; sourceTree = ""; }; + F31A92C728D4CB39003BFD6A /* SDL_offscreenopengles.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_offscreenopengles.c; sourceTree = ""; }; + F32305FE28939F6400E66D30 /* SDL_hidapi_combined.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_combined.c; sourceTree = ""; }; + F32DDAC92AB795A30041EAA5 /* SDL_audio_channel_converters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_audio_channel_converters.h; sourceTree = ""; }; + F32DDACA2AB795A30041EAA5 /* SDL_audioresample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_audioresample.h; sourceTree = ""; }; + F32DDACB2AB795A30041EAA5 /* SDL_audioqueue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_audioqueue.c; sourceTree = ""; }; + F32DDACC2AB795A30041EAA5 /* SDL_audio_resampler_filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_audio_resampler_filter.h; sourceTree = ""; }; + F32DDACD2AB795A30041EAA5 /* SDL_audioqueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_audioqueue.h; sourceTree = ""; }; + F32DDACE2AB795A30041EAA5 /* SDL_audioresample.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_audioresample.c; sourceTree = ""; }; + F36C7AD0294BA009004D61C3 /* SDL_runapp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_runapp.c; sourceTree = ""; }; + F376F6182559B29300CFC0BC /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.1.sdk/System/Library/Frameworks/OpenGLES.framework; sourceTree = DEVELOPER_DIR; }; + F376F61A2559B2AF00CFC0BC /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/iOSSupport/System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + F376F6312559B31D00CFC0BC /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/iOSSupport/System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; }; + F376F6CC2559B54500CFC0BC /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + F376F6D82559B59600CFC0BC /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; + F376F6DA2559B5A000CFC0BC /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/AVFoundation.framework; sourceTree = DEVELOPER_DIR; }; + F376F6DC2559B5A900CFC0BC /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/OpenGLES.framework; sourceTree = DEVELOPER_DIR; }; + F376F6DE2559B5BA00CFC0BC /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/GameController.framework; sourceTree = DEVELOPER_DIR; }; + F376F6E02559B5CA00CFC0BC /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/CoreVideo.framework; sourceTree = DEVELOPER_DIR; }; + F376F6F72559B5EC00CFC0BC /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + F376F71E2559B73A00CFC0BC /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + F376F7212559B74900CFC0BC /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/Metal.framework; sourceTree = DEVELOPER_DIR; }; + F376F7252559B76800CFC0BC /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; }; + F376F7272559B77100CFC0BC /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/CoreAudio.framework; sourceTree = DEVELOPER_DIR; }; + F37A8E1928405AA100C38E95 /* CMake */ = {isa = PBXFileReference; lastKnownFileType = folder; path = CMake; sourceTree = ""; }; + F37DC5F225350EBC0002E6F7 /* CoreHaptics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreHaptics.framework; path = System/Library/Frameworks/CoreHaptics.framework; sourceTree = SDKROOT; }; + F37DC5F425350ECC0002E6F7 /* CoreHaptics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreHaptics.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/CoreHaptics.framework; sourceTree = DEVELOPER_DIR; }; + F3820712284F3609004DD584 /* controller_type.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = controller_type.c; sourceTree = ""; }; + F382071C284F362F004DD584 /* SDL_guid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_guid.c; sourceTree = ""; }; + F382339B2738ED6600F7F527 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.0.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; + F386F6E42884663E001840AA /* SDL_log_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_log_c.h; sourceTree = ""; }; + F386F6E52884663E001840AA /* SDL_utils_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_utils_c.h; sourceTree = ""; }; + F386F6E62884663E001840AA /* SDL_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_utils.c; sourceTree = ""; }; + F388C95428B5F6F600661ECF /* SDL_hidapi_ps3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_ps3.c; sourceTree = ""; }; + F395BF6425633B2400942BFF /* SDL_crc32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_crc32.c; sourceTree = ""; }; + F395C1912569C68E00942BFF /* SDL_iokitjoystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_iokitjoystick_c.h; sourceTree = ""; }; + F395C1922569C68E00942BFF /* SDL_iokitjoystick.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_iokitjoystick.c; sourceTree = ""; }; + F395C1AF2569C6A000942BFF /* SDL_mfijoystick.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_mfijoystick.m; sourceTree = ""; }; + F395C1B02569C6A000942BFF /* SDL_mfijoystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_mfijoystick_c.h; sourceTree = ""; }; + F3973FA028A59BDD00B84553 /* SDL_vacopy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_vacopy.h; sourceTree = ""; }; + F3973FA128A59BDD00B84553 /* SDL_crc16.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_crc16.c; sourceTree = ""; }; + F3984CCF25BCC92800374F43 /* SDL_hidapi_stadia.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_stadia.c; sourceTree = ""; }; + F3990E012A788303000D8759 /* SDL_hidapi_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_hidapi_c.h; sourceTree = ""; }; + F3990E022A788303000D8759 /* SDL_hidapi_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_hidapi_mac.h; sourceTree = ""; }; + F3990E032A788303000D8759 /* SDL_hidapi_ios.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_hidapi_ios.h; sourceTree = ""; }; + F3A4909D2554D38500E92A8B /* SDL_hidapi_ps5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_ps5.c; sourceTree = ""; }; + F3ADAB8D2576F0B300A6B1D9 /* SDL_sysurl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_sysurl.m; sourceTree = ""; }; + F3B38CCA296E2E52005DA6D3 /* SDL_main_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_main_impl.h; path = SDL3/SDL_main_impl.h; sourceTree = ""; }; + F3B38CCB296E2E52005DA6D3 /* SDL_platform_defines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_platform_defines.h; path = SDL3/SDL_platform_defines.h; sourceTree = ""; }; + F3B38CCC296E2E52005DA6D3 /* SDL_init.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_init.h; path = SDL3/SDL_init.h; sourceTree = ""; }; + F3B38CCD296E2E52005DA6D3 /* SDL_oldnames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_oldnames.h; path = SDL3/SDL_oldnames.h; sourceTree = ""; }; + F3B38CCE296E2E52005DA6D3 /* SDL_intrin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_intrin.h; path = SDL3/SDL_intrin.h; sourceTree = ""; }; + F3D60A8228C16A1800788A3A /* SDL_hidapi_wii.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_wii.c; sourceTree = ""; }; + F3E5A6EA2AD5E0E600293D83 /* SDL_properties.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_properties.c; sourceTree = ""; }; + F3E5A6EC2AD5E10800293D83 /* SDL_properties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_properties.h; path = SDL3/SDL_properties.h; sourceTree = ""; }; + F3F07D59269640160074468B /* SDL_hidapi_luna.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_luna.c; sourceTree = ""; }; + F3F7D8AA2933074900816151 /* SDL_audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_audio.h; path = SDL3/SDL_audio.h; sourceTree = ""; }; + F3F7D8AB2933074900816151 /* SDL_platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_platform.h; path = SDL3/SDL_platform.h; sourceTree = ""; }; + F3F7D8AC2933074900816151 /* SDL_stdinc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_stdinc.h; path = SDL3/SDL_stdinc.h; sourceTree = ""; }; + F3F7D8AD2933074900816151 /* SDL_haptic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_haptic.h; path = SDL3/SDL_haptic.h; sourceTree = ""; }; + F3F7D8AE2933074900816151 /* SDL_opengles2_gl2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_opengles2_gl2.h; path = SDL3/SDL_opengles2_gl2.h; sourceTree = ""; }; + F3F7D8AF2933074900816151 /* SDL_touch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_touch.h; path = SDL3/SDL_touch.h; sourceTree = ""; }; + F3F7D8B02933074900816151 /* SDL_main.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_main.h; path = SDL3/SDL_main.h; sourceTree = ""; }; + F3F7D8B12933074900816151 /* SDL_opengles2_khrplatform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_opengles2_khrplatform.h; path = SDL3/SDL_opengles2_khrplatform.h; sourceTree = ""; }; + F3F7D8B22933074900816151 /* SDL_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_timer.h; path = SDL3/SDL_timer.h; sourceTree = ""; }; + F3F7D8B32933074900816151 /* SDL_hints.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_hints.h; path = SDL3/SDL_hints.h; sourceTree = ""; }; + F3F7D8B42933074900816151 /* SDL_revision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_revision.h; path = SDL3/SDL_revision.h; sourceTree = ""; }; + F3F7D8B52933074A00816151 /* SDL_pixels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_pixels.h; path = SDL3/SDL_pixels.h; sourceTree = ""; }; + F3F7D8B62933074A00816151 /* SDL_messagebox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_messagebox.h; path = SDL3/SDL_messagebox.h; sourceTree = ""; }; + F3F7D8B72933074A00816151 /* SDL_log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_log.h; path = SDL3/SDL_log.h; sourceTree = ""; }; + F3F7D8B82933074A00816151 /* SDL_egl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_egl.h; path = SDL3/SDL_egl.h; sourceTree = ""; }; + F3F7D8B92933074A00816151 /* SDL_atomic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_atomic.h; path = SDL3/SDL_atomic.h; sourceTree = ""; }; + F3F7D8BA2933074A00816151 /* SDL_shape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_shape.h; path = SDL3/SDL_shape.h; sourceTree = ""; }; + F3F7D8BB2933074A00816151 /* SDL_surface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_surface.h; path = SDL3/SDL_surface.h; sourceTree = ""; }; + F3F7D8BC2933074A00816151 /* SDL_error.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_error.h; path = SDL3/SDL_error.h; sourceTree = ""; }; + F3F7D8BD2933074A00816151 /* SDL_opengles2_gl2ext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_opengles2_gl2ext.h; path = SDL3/SDL_opengles2_gl2ext.h; sourceTree = ""; }; + F3F7D8BE2933074A00816151 /* SDL_endian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_endian.h; path = SDL3/SDL_endian.h; sourceTree = ""; }; + F3F7D8BF2933074A00816151 /* SDL_syswm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_syswm.h; path = SDL3/SDL_syswm.h; sourceTree = ""; }; + F3F7D8C02933074A00816151 /* SDL_opengl_glext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_opengl_glext.h; path = SDL3/SDL_opengl_glext.h; sourceTree = ""; }; + F3F7D8C12933074B00816151 /* SDL_scancode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_scancode.h; path = SDL3/SDL_scancode.h; sourceTree = ""; }; + F3F7D8C22933074B00816151 /* SDL_sensor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_sensor.h; path = SDL3/SDL_sensor.h; sourceTree = ""; }; + F3F7D8C32933074B00816151 /* SDL_keyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_keyboard.h; path = SDL3/SDL_keyboard.h; sourceTree = ""; }; + F3F7D8C42933074B00816151 /* SDL_locale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_locale.h; path = SDL3/SDL_locale.h; sourceTree = ""; }; + F3F7D8C52933074B00816151 /* SDL_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_video.h; path = SDL3/SDL_video.h; sourceTree = ""; }; + F3F7D8C62933074B00816151 /* SDL_opengles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_opengles.h; path = SDL3/SDL_opengles.h; sourceTree = ""; }; + F3F7D8C72933074B00816151 /* SDL_opengles2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_opengles2.h; path = SDL3/SDL_opengles2.h; sourceTree = ""; }; + F3F7D8C82933074B00816151 /* SDL_rwops.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_rwops.h; path = SDL3/SDL_rwops.h; sourceTree = ""; }; + F3F7D8C92933074B00816151 /* SDL_opengles2_gl2platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_opengles2_gl2platform.h; path = SDL3/SDL_opengles2_gl2platform.h; sourceTree = ""; }; + F3F7D8CA2933074B00816151 /* SDL_hidapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_hidapi.h; path = SDL3/SDL_hidapi.h; sourceTree = ""; }; + F3F7D8CB2933074B00816151 /* SDL_events.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_events.h; path = SDL3/SDL_events.h; sourceTree = ""; }; + F3F7D8CC2933074B00816151 /* SDL_keycode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_keycode.h; path = SDL3/SDL_keycode.h; sourceTree = ""; }; + F3F7D8CD2933074C00816151 /* SDL_thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_thread.h; path = SDL3/SDL_thread.h; sourceTree = ""; }; + F3F7D8CE2933074C00816151 /* SDL_blendmode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_blendmode.h; path = SDL3/SDL_blendmode.h; sourceTree = ""; }; + F3F7D8CF2933074C00816151 /* SDL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL.h; path = SDL3/SDL.h; sourceTree = ""; }; + F3F7D8D02933074C00816151 /* SDL_gamepad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_gamepad.h; path = SDL3/SDL_gamepad.h; sourceTree = ""; }; + F3F7D8D12933074C00816151 /* SDL_guid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_guid.h; path = SDL3/SDL_guid.h; sourceTree = ""; }; + F3F7D8D22933074C00816151 /* SDL_metal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_metal.h; path = SDL3/SDL_metal.h; sourceTree = ""; }; + F3F7D8D32933074C00816151 /* SDL_joystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_joystick.h; path = SDL3/SDL_joystick.h; sourceTree = ""; }; + F3F7D8D42933074C00816151 /* SDL_vulkan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_vulkan.h; path = SDL3/SDL_vulkan.h; sourceTree = ""; }; + F3F7D8D52933074C00816151 /* SDL_misc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_misc.h; path = SDL3/SDL_misc.h; sourceTree = ""; }; + F3F7D8D62933074C00816151 /* SDL_filesystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_filesystem.h; path = SDL3/SDL_filesystem.h; sourceTree = ""; }; + F3F7D8D72933074C00816151 /* SDL_clipboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_clipboard.h; path = SDL3/SDL_clipboard.h; sourceTree = ""; }; + F3F7D8D82933074C00816151 /* SDL_bits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_bits.h; path = SDL3/SDL_bits.h; sourceTree = ""; }; + F3F7D8D92933074C00816151 /* SDL_loadso.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_loadso.h; path = SDL3/SDL_loadso.h; sourceTree = ""; }; + F3F7D8DA2933074D00816151 /* SDL_mouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_mouse.h; path = SDL3/SDL_mouse.h; sourceTree = ""; }; + F3F7D8DB2933074D00816151 /* SDL_power.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_power.h; path = SDL3/SDL_power.h; sourceTree = ""; }; + F3F7D8DD2933074D00816151 /* SDL_cpuinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_cpuinfo.h; path = SDL3/SDL_cpuinfo.h; sourceTree = ""; }; + F3F7D8DE2933074D00816151 /* SDL_render.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_render.h; path = SDL3/SDL_render.h; sourceTree = ""; }; + F3F7D8DF2933074D00816151 /* SDL_quit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_quit.h; path = SDL3/SDL_quit.h; sourceTree = ""; }; + F3F7D8E02933074D00816151 /* SDL_assert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_assert.h; path = SDL3/SDL_assert.h; sourceTree = ""; }; + F3F7D8E12933074D00816151 /* SDL_opengl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_opengl.h; path = SDL3/SDL_opengl.h; sourceTree = ""; }; + F3F7D8E22933074D00816151 /* SDL_rect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_rect.h; path = SDL3/SDL_rect.h; sourceTree = ""; }; + F3F7D8E32933074D00816151 /* SDL_copying.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_copying.h; path = SDL3/SDL_copying.h; sourceTree = ""; }; + F3F7D8E42933074D00816151 /* SDL_version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_version.h; path = SDL3/SDL_version.h; sourceTree = ""; }; + F3F7D8E52933074D00816151 /* SDL_close_code.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_close_code.h; path = SDL3/SDL_close_code.h; sourceTree = ""; }; + F3F7D8E62933074E00816151 /* SDL_mutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_mutex.h; path = SDL3/SDL_mutex.h; sourceTree = ""; }; + F3F7D8E72933074E00816151 /* SDL_begin_code.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_begin_code.h; path = SDL3/SDL_begin_code.h; sourceTree = ""; }; + F3F7D8E82933074E00816151 /* SDL_system.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_system.h; path = SDL3/SDL_system.h; sourceTree = ""; }; + F59C710300D5CB5801000001 /* ReadMe.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = ReadMe.txt; sourceTree = ""; }; + F59C710600D5CB5801000001 /* SDL.info */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SDL.info; sourceTree = ""; }; + F5A2EF3900C6A39A01000001 /* BUGS.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = BUGS.txt; path = ../../BUGS.txt; sourceTree = SOURCE_ROOT; }; + FA73671C19A540EF004122E4 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = System/Library/Frameworks/CoreVideo.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + BECDF6680761BA81005FE872 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A7381E971D8B6A0300B177DD /* AudioToolbox.framework in Frameworks */, + 00D0D0D810675E46004B05EF /* Carbon.framework in Frameworks */, + 007317A40858DECD00B2BC32 /* Cocoa.framework in Frameworks */, + A7381E961D8B69D600B177DD /* CoreAudio.framework in Frameworks */, + 557D0CFA254586CA003913E3 /* CoreHaptics.framework in Frameworks */, + 00D0D08410675DD9004B05EF /* CoreFoundation.framework in Frameworks */, + FA73671D19A540EF004122E4 /* CoreVideo.framework in Frameworks */, + 00CFA89D106B4BA100758660 /* ForceFeedback.framework in Frameworks */, + 557D0CFB254586D7003913E3 /* GameController.framework in Frameworks */, + 007317A60858DECD00B2BC32 /* IOKit.framework in Frameworks */, + 564624381FF821DA0074AC87 /* Metal.framework in Frameworks */, + 564624361FF821C20074AC87 /* QuartzCore.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0153844A006D81B07F000001 /* Public Headers */ = { + isa = PBXGroup; + children = ( + F3F7D8E02933074D00816151 /* SDL_assert.h */, + F3F7D8B92933074A00816151 /* SDL_atomic.h */, + F3F7D8AA2933074900816151 /* SDL_audio.h */, + F3F7D8E72933074E00816151 /* SDL_begin_code.h */, + F3F7D8D82933074C00816151 /* SDL_bits.h */, + F3F7D8CE2933074C00816151 /* SDL_blendmode.h */, + F3F7D8D72933074C00816151 /* SDL_clipboard.h */, + F3F7D8E52933074D00816151 /* SDL_close_code.h */, + F3F7D8E32933074D00816151 /* SDL_copying.h */, + F3F7D8DD2933074D00816151 /* SDL_cpuinfo.h */, + F3F7D8B82933074A00816151 /* SDL_egl.h */, + F3F7D8BE2933074A00816151 /* SDL_endian.h */, + F3F7D8BC2933074A00816151 /* SDL_error.h */, + F3F7D8CB2933074B00816151 /* SDL_events.h */, + F3F7D8D62933074C00816151 /* SDL_filesystem.h */, + F3F7D8D02933074C00816151 /* SDL_gamepad.h */, + F3F7D8D12933074C00816151 /* SDL_guid.h */, + F3F7D8AD2933074900816151 /* SDL_haptic.h */, + F3F7D8CA2933074B00816151 /* SDL_hidapi.h */, + F3F7D8B32933074900816151 /* SDL_hints.h */, + F3B38CCC296E2E52005DA6D3 /* SDL_init.h */, + F3B38CCE296E2E52005DA6D3 /* SDL_intrin.h */, + F3F7D8D32933074C00816151 /* SDL_joystick.h */, + F3F7D8C32933074B00816151 /* SDL_keyboard.h */, + F3F7D8CC2933074B00816151 /* SDL_keycode.h */, + F3F7D8D92933074C00816151 /* SDL_loadso.h */, + F3F7D8C42933074B00816151 /* SDL_locale.h */, + F3F7D8B72933074A00816151 /* SDL_log.h */, + F3B38CCA296E2E52005DA6D3 /* SDL_main_impl.h */, + F3F7D8B02933074900816151 /* SDL_main.h */, + F3F7D8B62933074A00816151 /* SDL_messagebox.h */, + F3F7D8D22933074C00816151 /* SDL_metal.h */, + F3F7D8D52933074C00816151 /* SDL_misc.h */, + F3F7D8DA2933074D00816151 /* SDL_mouse.h */, + F3F7D8E62933074E00816151 /* SDL_mutex.h */, + F3B38CCD296E2E52005DA6D3 /* SDL_oldnames.h */, + F3F7D8C02933074A00816151 /* SDL_opengl_glext.h */, + F3F7D8E12933074D00816151 /* SDL_opengl.h */, + F3F7D8C62933074B00816151 /* SDL_opengles.h */, + F3F7D8AE2933074900816151 /* SDL_opengles2_gl2.h */, + F3F7D8BD2933074A00816151 /* SDL_opengles2_gl2ext.h */, + F3F7D8C92933074B00816151 /* SDL_opengles2_gl2platform.h */, + F3F7D8B12933074900816151 /* SDL_opengles2_khrplatform.h */, + F3F7D8C72933074B00816151 /* SDL_opengles2.h */, + F3F7D8B52933074A00816151 /* SDL_pixels.h */, + F3B38CCB296E2E52005DA6D3 /* SDL_platform_defines.h */, + F3F7D8AB2933074900816151 /* SDL_platform.h */, + F3F7D8DB2933074D00816151 /* SDL_power.h */, + F3E5A6EC2AD5E10800293D83 /* SDL_properties.h */, + F3F7D8DF2933074D00816151 /* SDL_quit.h */, + F3F7D8E22933074D00816151 /* SDL_rect.h */, + F3F7D8DE2933074D00816151 /* SDL_render.h */, + F3F7D8B42933074900816151 /* SDL_revision.h */, + F3F7D8C82933074B00816151 /* SDL_rwops.h */, + F3F7D8C12933074B00816151 /* SDL_scancode.h */, + F3F7D8C22933074B00816151 /* SDL_sensor.h */, + F3F7D8BA2933074A00816151 /* SDL_shape.h */, + F3F7D8AC2933074900816151 /* SDL_stdinc.h */, + F3F7D8BB2933074A00816151 /* SDL_surface.h */, + F3F7D8E82933074E00816151 /* SDL_system.h */, + F3F7D8BF2933074A00816151 /* SDL_syswm.h */, + F3F7D8CD2933074C00816151 /* SDL_thread.h */, + F3F7D8B22933074900816151 /* SDL_timer.h */, + F3F7D8AF2933074900816151 /* SDL_touch.h */, + F3F7D8E42933074D00816151 /* SDL_version.h */, + F3F7D8C52933074B00816151 /* SDL_video.h */, + F3F7D8D42933074C00816151 /* SDL_vulkan.h */, + F3F7D8CF2933074C00816151 /* SDL.h */, + ); + name = "Public Headers"; + path = ../../include; + sourceTree = ""; + }; + 034768DDFF38A45A11DB9C8B /* Products */ = { + isa = PBXGroup; + children = ( + BECDF66C0761BA81005FE872 /* SDL3.framework */, + ); + name = Products; + sourceTree = ""; + }; + 0867D691FE84028FC02AAC07 /* SDLFramework */ = { + isa = PBXGroup; + children = ( + F5A2EF3900C6A39A01000001 /* BUGS.txt */, + F59C70FC00D5CB5801000001 /* pkg-support */, + 0153844A006D81B07F000001 /* Public Headers */, + 08FB77ACFE841707C02AAC07 /* Library Source */, + E2D187D028A5673500D2B4F1 /* SDL3 */, + 034768DDFF38A45A11DB9C8B /* Products */, + BECDF66B0761BA81005FE872 /* Info-Framework.plist */, + 564624341FF821B70074AC87 /* Frameworks */, + ); + comments = "To build Universal Binaries, we have experimented with a variety of different options.\nThe complication is that we must retain compatibility with at least 10.2. \nThe Universal Binary defaults only work for > 10.3.9\n\nSo far, we have found:\ngcc 4.0.0 with Xcode 2.1 always links against libgcc_s. gcc 4.0.1 from Xcode 2.2 fixes this problem.\n\nBut gcc 4.0 will not work with < 10.3.9 because we continue to get an undefined symbol to _fprintf$LDBL128.\nSo we must use gcc 3.3 on PPC to accomplish 10.2 support. (But 4.0 is required for i386.)\n\nSetting the deployment target to 10.4 will disable prebinding, so for PPC, we set it less than 10.4 to preserve prebinding for legacy support.\n\nSetting the PPC SDKROOT to /Developers/SDKs/MacOSX10.2.8.sdk will link to 63.0.0 libSystem.B.dylib. Leaving it at current or 10.4u links to 88.1.2. However, as long as we are using gcc 3.3, it doesn't seem to matter as testing has demonstrated both will run. We have decided not to invoke the 10.2.8 SDK because it is not a default installed component with Xcode which will probably cause most people problems. However, rather than deleting the SDKROOT_ppc entry entirely, we have mapped it to 10.4u in case we decide we need to change this setting.\n\nTo use Altivec or SSE, we needed architecture specific flags:\nOTHER_CFLAGS_ppc\nOTHER_CFLAGS_i386\nOTHER_CFLAGS=$(OTHER_CFLAGS_($CURRENT_ARCH))\n\nThe general OTHER_CFLAGS needed to be manually mapped to architecture specific options because Xcode didn't do this automatically for us.\n\n\n"; + indentWidth = 4; + name = SDLFramework; + sourceTree = ""; + tabWidth = 4; + usesTabs = 0; + }; + 08FB77ACFE841707C02AAC07 /* Library Source */ = { + isa = PBXGroup; + children = ( + A7D8A57223E2513D00DCD162 /* atomic */, + A7D8A86423E2513F00DCD162 /* audio */, + F36C7ACF294B9F5E004D61C3 /* core */, + A7D8A77423E2513E00DCD162 /* cpuinfo */, + A7D8A5D723E2513D00DCD162 /* dynapi */, + A7D8A92923E2514000DCD162 /* events */, + A7D8A7DA23E2513E00DCD162 /* file */, + A7D8A7F623E2513F00DCD162 /* filesystem */, + A7D8A5C223E2513D00DCD162 /* haptic */, + A7D8A80923E2513F00DCD162 /* hidapi */, + A7D8A79D23E2513E00DCD162 /* joystick */, + A7D8A91123E2514000DCD162 /* libm */, + A7D8A85D23E2513F00DCD162 /* loadso */, + 566E26CB246274AE00718109 /* locale */, + 5616CA47252BB278005D5928 /* misc */, + A7D8A7DF23E2513F00DCD162 /* power */, + A7D8A8DA23E2514000DCD162 /* render */, + A7D8A57623E2513D00DCD162 /* sensor */, + A7D8A8D223E2514000DCD162 /* stdlib */, + A7D8A77623E2513E00DCD162 /* thread */, + A7D8A5DE23E2513D00DCD162 /* timer */, + A7D8A5EB23E2513D00DCD162 /* video */, + A7D8A7F523E2513F00DCD162 /* SDL_assert_c.h */, + A7D8A94423E2514000DCD162 /* SDL_assert.c */, + A7D8A57523E2513D00DCD162 /* SDL_error_c.h */, + A7D8A8BF23E2513F00DCD162 /* SDL_error.c */, + F382071C284F362F004DD584 /* SDL_guid.c */, + 000078E1881E857EBB6C0000 /* SDL_hashtable.c */, + 0000B6ADCD88CAD6610F0000 /* SDL_hashtable.h */, + A7D8A8D123E2514000DCD162 /* SDL_hints_c.h */, + A7D8A5AB23E2513D00DCD162 /* SDL_hints.c */, + A7D8A58323E2513D00DCD162 /* SDL_internal.h */, + A1BB8B6127F6CF320057CFA8 /* SDL_list.c */, + A1BB8B6227F6CF330057CFA8 /* SDL_list.h */, + F386F6E42884663E001840AA /* SDL_log_c.h */, + A7D8A5DD23E2513D00DCD162 /* SDL_log.c */, + F3E5A6EA2AD5E0E600293D83 /* SDL_properties.c */, + F386F6E52884663E001840AA /* SDL_utils_c.h */, + F386F6E62884663E001840AA /* SDL_utils.c */, + A7D8A57123E2513D00DCD162 /* SDL.c */, + ); + name = "Library Source"; + path = ../../src; + sourceTree = ""; + }; + 5616CA47252BB278005D5928 /* misc */ = { + isa = PBXGroup; + children = ( + F3ADAB8C2576F08500A6B1D9 /* ios */, + 5616CA48252BB285005D5928 /* macos */, + 5616CA4A252BB2A6005D5928 /* SDL_sysurl.h */, + 5616CA49252BB2A5005D5928 /* SDL_url.c */, + ); + path = misc; + sourceTree = ""; + }; + 5616CA48252BB285005D5928 /* macos */ = { + isa = PBXGroup; + children = ( + 5616CA4B252BB2A6005D5928 /* SDL_sysurl.m */, + ); + path = macos; + sourceTree = ""; + }; + 564624341FF821B70074AC87 /* Frameworks */ = { + isa = PBXGroup; + children = ( + F382339B2738ED6600F7F527 /* CoreBluetooth.framework */, + F376F7272559B77100CFC0BC /* CoreAudio.framework */, + F376F7252559B76800CFC0BC /* CoreFoundation.framework */, + F376F7212559B74900CFC0BC /* Metal.framework */, + F376F71E2559B73A00CFC0BC /* QuartzCore.framework */, + F376F6F72559B5EC00CFC0BC /* CoreGraphics.framework */, + F376F6E02559B5CA00CFC0BC /* CoreVideo.framework */, + F376F6DE2559B5BA00CFC0BC /* GameController.framework */, + F376F6DC2559B5A900CFC0BC /* OpenGLES.framework */, + F376F6DA2559B5A000CFC0BC /* AVFoundation.framework */, + F376F6D82559B59600CFC0BC /* AudioToolbox.framework */, + F376F6CC2559B54500CFC0BC /* UIKit.framework */, + F376F6312559B31D00CFC0BC /* GameController.framework */, + F376F61A2559B2AF00CFC0BC /* UIKit.framework */, + F376F6182559B29300CFC0BC /* OpenGLES.framework */, + F37DC5F225350EBC0002E6F7 /* CoreHaptics.framework */, + F37DC5F425350ECC0002E6F7 /* CoreHaptics.framework */, + A75FDAC323E28BA700529352 /* CoreBluetooth.framework */, + A75FDAC123E28B9600529352 /* CoreGraphics.framework */, + A75FDABF23E28B8000529352 /* CoreMotion.framework */, + A75FDABD23E28B6200529352 /* GameController.framework */, + A75FDAB923E28A7A00529352 /* AVFoundation.framework */, + A7381E931D8B69C300B177DD /* AudioToolbox.framework */, + 007317C10858E15000B2BC32 /* Carbon.framework */, + 0073179D0858DECD00B2BC32 /* Cocoa.framework */, + A7381E951D8B69D600B177DD /* CoreAudio.framework */, + 00D0D08310675DD9004B05EF /* CoreFoundation.framework */, + FA73671C19A540EF004122E4 /* CoreVideo.framework */, + 00CFA89C106B4BA100758660 /* ForceFeedback.framework */, + 0073179F0858DECD00B2BC32 /* IOKit.framework */, + 564624371FF821CB0074AC87 /* Metal.framework */, + 564624351FF821B80074AC87 /* QuartzCore.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 566E26CB246274AE00718109 /* locale */ = { + isa = PBXGroup; + children = ( + 566E26EA246274E800718109 /* macos */, + 566E26CD246274CB00718109 /* SDL_locale.c */, + 566E26CE246274CC00718109 /* SDL_syslocale.h */, + ); + name = locale; + sourceTree = ""; + }; + 566E26EA246274E800718109 /* macos */ = { + isa = PBXGroup; + children = ( + 566E26CC246274CB00718109 /* SDL_syslocale.m */, + ); + name = macos; + sourceTree = ""; + }; + 75E09157241EA924004729E1 /* virtual */ = { + isa = PBXGroup; + children = ( + 75E09158241EA924004729E1 /* SDL_virtualjoystick.c */, + 75E09159241EA924004729E1 /* SDL_virtualjoystick_c.h */, + ); + path = virtual; + sourceTree = ""; + }; + A75FDAA423E2790500529352 /* ios */ = { + isa = PBXGroup; + children = ( + A75FDAA523E2792500529352 /* hid.m */, + ); + path = ios; + sourceTree = ""; + }; + A75FDB9123E4C8B800529352 /* mac */ = { + isa = PBXGroup; + children = ( + A75FDB9223E4C8DB00529352 /* hid.c */, + ); + path = mac; + sourceTree = ""; + }; + A7D8A57223E2513D00DCD162 /* atomic */ = { + isa = PBXGroup; + children = ( + A7D8A57423E2513D00DCD162 /* SDL_atomic.c */, + A7D8A57323E2513D00DCD162 /* SDL_spinlock.c */, + ); + path = atomic; + sourceTree = ""; + }; + A7D8A57623E2513D00DCD162 /* sensor */ = { + isa = PBXGroup; + children = ( + A7D8A57A23E2513D00DCD162 /* coremotion */, + A7D8A57723E2513D00DCD162 /* dummy */, + A7D8A58123E2513D00DCD162 /* SDL_sensor_c.h */, + A7D8A58223E2513D00DCD162 /* SDL_sensor.c */, + A7D8A57D23E2513D00DCD162 /* SDL_syssensor.h */, + ); + path = sensor; + sourceTree = ""; + }; + A7D8A57723E2513D00DCD162 /* dummy */ = { + isa = PBXGroup; + children = ( + A7D8A57923E2513D00DCD162 /* SDL_dummysensor.c */, + A7D8A57823E2513D00DCD162 /* SDL_dummysensor.h */, + ); + path = dummy; + sourceTree = ""; + }; + A7D8A57A23E2513D00DCD162 /* coremotion */ = { + isa = PBXGroup; + children = ( + A7D8A57B23E2513D00DCD162 /* SDL_coremotionsensor.h */, + A7D8A57C23E2513D00DCD162 /* SDL_coremotionsensor.m */, + ); + path = coremotion; + sourceTree = ""; + }; + A7D8A5C223E2513D00DCD162 /* haptic */ = { + isa = PBXGroup; + children = ( + A7D8A5CD23E2513D00DCD162 /* darwin */, + A7D8A5C323E2513D00DCD162 /* dummy */, + A7D8A5C623E2513D00DCD162 /* SDL_haptic_c.h */, + A7D8A5C523E2513D00DCD162 /* SDL_haptic.c */, + A7D8A5CC23E2513D00DCD162 /* SDL_syshaptic.h */, + ); + path = haptic; + sourceTree = ""; + }; + A7D8A5C323E2513D00DCD162 /* dummy */ = { + isa = PBXGroup; + children = ( + A7D8A5C423E2513D00DCD162 /* SDL_syshaptic.c */, + ); + path = dummy; + sourceTree = ""; + }; + A7D8A5CD23E2513D00DCD162 /* darwin */ = { + isa = PBXGroup; + children = ( + A7D8A5CF23E2513D00DCD162 /* SDL_syshaptic_c.h */, + A7D8A5CE23E2513D00DCD162 /* SDL_syshaptic.c */, + ); + path = darwin; + sourceTree = ""; + }; + A7D8A5D723E2513D00DCD162 /* dynapi */ = { + isa = PBXGroup; + children = ( + A7D8A5D923E2513D00DCD162 /* SDL_dynapi_overrides.h */, + A7D8A5DB23E2513D00DCD162 /* SDL_dynapi_procs.h */, + A7D8A5DA23E2513D00DCD162 /* SDL_dynapi.c */, + A7D8A5D823E2513D00DCD162 /* SDL_dynapi.h */, + E4F7981B2AD8D85500669F54 /* SDL_dynapi_unsupported.h */, + ); + path = dynapi; + sourceTree = ""; + }; + A7D8A5DE23E2513D00DCD162 /* timer */ = { + isa = PBXGroup; + children = ( + A7D8A5E123E2513D00DCD162 /* dummy */, + A7D8A5E723E2513D00DCD162 /* unix */, + A7D8A5E023E2513D00DCD162 /* SDL_timer_c.h */, + A7D8A5DF23E2513D00DCD162 /* SDL_timer.c */, + ); + path = timer; + sourceTree = ""; + }; + A7D8A5E123E2513D00DCD162 /* dummy */ = { + isa = PBXGroup; + children = ( + A7D8A5E223E2513D00DCD162 /* SDL_systimer.c */, + ); + path = dummy; + sourceTree = ""; + }; + A7D8A5E723E2513D00DCD162 /* unix */ = { + isa = PBXGroup; + children = ( + A7D8A5E823E2513D00DCD162 /* SDL_systimer.c */, + ); + path = unix; + sourceTree = ""; + }; + A7D8A5EB23E2513D00DCD162 /* video */ = { + isa = PBXGroup; + children = ( + A7D8A67D23E2513E00DCD162 /* cocoa */, + A7D8A60523E2513D00DCD162 /* dummy */, + A7D8A72123E2513E00DCD162 /* khronos */, + A7D8A5EC23E2513D00DCD162 /* offscreen */, + A7D8A61823E2513D00DCD162 /* uikit */, + A7D8A76C23E2513E00DCD162 /* yuv2rgb */, + A7D8A66223E2513E00DCD162 /* SDL_blit_0.c */, + A7D8A6FA23E2513E00DCD162 /* SDL_blit_1.c */, + A7D8A66423E2513E00DCD162 /* SDL_blit_A.c */, + A7D8A63F23E2513D00DCD162 /* SDL_blit_auto.c */, + A7D8A73F23E2513E00DCD162 /* SDL_blit_auto.h */, + A7D8A61623E2513D00DCD162 /* SDL_blit_copy.c */, + A7D8A76623E2513E00DCD162 /* SDL_blit_copy.h */, + A7D8A64223E2513D00DCD162 /* SDL_blit_N.c */, + A7D8A60223E2513D00DCD162 /* SDL_blit_slow.c */, + A7D8A66323E2513E00DCD162 /* SDL_blit_slow.h */, + A7D8A64C23E2513D00DCD162 /* SDL_blit.c */, + A7D8A76B23E2513E00DCD162 /* SDL_blit.h */, + A7D8A77323E2513E00DCD162 /* SDL_bmp.c */, + A7D8A67B23E2513E00DCD162 /* SDL_clipboard.c */, + A7D8A60423E2513D00DCD162 /* SDL_egl_c.h */, + A7D8A6B623E2513E00DCD162 /* SDL_egl.c */, + A7D8A76823E2513E00DCD162 /* SDL_fillrect.c */, + A7D8A74023E2513E00DCD162 /* SDL_pixels_c.h */, + A7D8A64D23E2513D00DCD162 /* SDL_pixels.c */, + A7D8A60C23E2513D00DCD162 /* SDL_rect_c.h */, + A7D8A63423E2513D00DCD162 /* SDL_rect.c */, + A7D8A76723E2513E00DCD162 /* SDL_RLEaccel_c.h */, + A7D8A61523E2513D00DCD162 /* SDL_RLEaccel.c */, + A7D8A60D23E2513D00DCD162 /* SDL_shape_internals.h */, + A7D8A76923E2513E00DCD162 /* SDL_shape.c */, + A7D8A60323E2513D00DCD162 /* SDL_stretch.c */, + A7D8A61423E2513D00DCD162 /* SDL_surface.c */, + A7D8A61723E2513D00DCD162 /* SDL_sysvideo.h */, + A7D8A60E23E2513D00DCD162 /* SDL_video.c */, + E4F7981F2AD8D87F00669F54 /* SDL_video_unsupported.c */, + A7D8A63E23E2513D00DCD162 /* SDL_vulkan_internal.h */, + A7D8A64023E2513D00DCD162 /* SDL_vulkan_utils.c */, + A7D8A76A23E2513E00DCD162 /* SDL_yuv_c.h */, + A7D8A67C23E2513E00DCD162 /* SDL_yuv.c */, + ); + path = video; + sourceTree = ""; + }; + A7D8A5EC23E2513D00DCD162 /* offscreen */ = { + isa = PBXGroup; + children = ( + A7D8A5EE23E2513D00DCD162 /* SDL_offscreenevents_c.h */, + A7D8A5F023E2513D00DCD162 /* SDL_offscreenevents.c */, + A7D8A5F423E2513D00DCD162 /* SDL_offscreenframebuffer_c.h */, + A7D8A5F223E2513D00DCD162 /* SDL_offscreenframebuffer.c */, + F31A92C728D4CB39003BFD6A /* SDL_offscreenopengles.c */, + F31A92C628D4CB39003BFD6A /* SDL_offscreenopengles.h */, + A7D8A5F623E2513D00DCD162 /* SDL_offscreenvideo.c */, + A7D8A5F123E2513D00DCD162 /* SDL_offscreenvideo.h */, + A7D8A5EF23E2513D00DCD162 /* SDL_offscreenwindow.c */, + A7D8A5F523E2513D00DCD162 /* SDL_offscreenwindow.h */, + ); + path = offscreen; + sourceTree = ""; + }; + A7D8A60523E2513D00DCD162 /* dummy */ = { + isa = PBXGroup; + children = ( + A7D8A60B23E2513D00DCD162 /* SDL_nullevents_c.h */, + A7D8A60923E2513D00DCD162 /* SDL_nullevents.c */, + A7D8A60723E2513D00DCD162 /* SDL_nullframebuffer_c.h */, + A7D8A60623E2513D00DCD162 /* SDL_nullframebuffer.c */, + A7D8A60823E2513D00DCD162 /* SDL_nullvideo.c */, + A7D8A60A23E2513D00DCD162 /* SDL_nullvideo.h */, + ); + path = dummy; + sourceTree = ""; + }; + A7D8A61823E2513D00DCD162 /* uikit */ = { + isa = PBXGroup; + children = ( + A7D8A62F23E2513D00DCD162 /* SDL_uikitappdelegate.h */, + A7D8A61E23E2513D00DCD162 /* SDL_uikitappdelegate.m */, + A7D8A62123E2513D00DCD162 /* SDL_uikitclipboard.h */, + A7D8A62A23E2513D00DCD162 /* SDL_uikitclipboard.m */, + A7D8A62D23E2513D00DCD162 /* SDL_uikitevents.h */, + A7D8A61C23E2513D00DCD162 /* SDL_uikitevents.m */, + A7D8A62623E2513D00DCD162 /* SDL_uikitmessagebox.h */, + A7D8A61B23E2513D00DCD162 /* SDL_uikitmessagebox.m */, + A7D8A61D23E2513D00DCD162 /* SDL_uikitmetalview.h */, + A7D8A62E23E2513D00DCD162 /* SDL_uikitmetalview.m */, + A7D8A61F23E2513D00DCD162 /* SDL_uikitmodes.h */, + A7D8A62C23E2513D00DCD162 /* SDL_uikitmodes.m */, + A7D8A63123E2513D00DCD162 /* SDL_uikitopengles.h */, + A7D8A62323E2513D00DCD162 /* SDL_uikitopengles.m */, + A7D8A62B23E2513D00DCD162 /* SDL_uikitopenglview.h */, + A7D8A62023E2513D00DCD162 /* SDL_uikitopenglview.m */, + A7D8A62223E2513D00DCD162 /* SDL_uikitvideo.h */, + A7D8A63223E2513D00DCD162 /* SDL_uikitvideo.m */, + A7D8A61923E2513D00DCD162 /* SDL_uikitview.h */, + A7D8A62923E2513D00DCD162 /* SDL_uikitview.m */, + A7D8A62423E2513D00DCD162 /* SDL_uikitviewcontroller.h */, + A7D8A63023E2513D00DCD162 /* SDL_uikitviewcontroller.m */, + A7D8A63323E2513D00DCD162 /* SDL_uikitvulkan.h */, + A7D8A62523E2513D00DCD162 /* SDL_uikitvulkan.m */, + A7D8A62723E2513D00DCD162 /* SDL_uikitwindow.h */, + A7D8A61A23E2513D00DCD162 /* SDL_uikitwindow.m */, + ); + path = uikit; + sourceTree = ""; + }; + A7D8A67D23E2513E00DCD162 /* cocoa */ = { + isa = PBXGroup; + children = ( + A7D8A68A23E2513E00DCD162 /* SDL_cocoaclipboard.h */, + A7D8A69523E2513E00DCD162 /* SDL_cocoaclipboard.m */, + A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */, + A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */, + A7D8A68023E2513E00DCD162 /* SDL_cocoakeyboard.h */, + A7D8A68C23E2513E00DCD162 /* SDL_cocoakeyboard.m */, + A7D8A69423E2513E00DCD162 /* SDL_cocoamessagebox.h */, + A7D8A68B23E2513E00DCD162 /* SDL_cocoamessagebox.m */, + A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */, + A7D8A69923E2513E00DCD162 /* SDL_cocoametalview.m */, + A7D8A69123E2513E00DCD162 /* SDL_cocoamodes.h */, + A7D8A68123E2513E00DCD162 /* SDL_cocoamodes.m */, + A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */, + A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */, + A7D8A68D23E2513E00DCD162 /* SDL_cocoaopengl.h */, + A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */, + A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */, + A7D8A68223E2513E00DCD162 /* SDL_cocoaopengles.m */, + A7D8A67E23E2513E00DCD162 /* SDL_cocoashape.h */, + A7D8A68E23E2513E00DCD162 /* SDL_cocoashape.m */, + A7D8A69323E2513E00DCD162 /* SDL_cocoavideo.h */, + A7D8A68523E2513E00DCD162 /* SDL_cocoavideo.m */, + A7D8A68F23E2513E00DCD162 /* SDL_cocoavulkan.h */, + A7D8A68323E2513E00DCD162 /* SDL_cocoavulkan.m */, + A7D8A69223E2513E00DCD162 /* SDL_cocoawindow.h */, + A7D8A68423E2513E00DCD162 /* SDL_cocoawindow.m */, + ); + path = cocoa; + sourceTree = ""; + }; + A7D8A72123E2513E00DCD162 /* khronos */ = { + isa = PBXGroup; + children = ( + A7D8A72823E2513E00DCD162 /* EGL */, + A7D8A72223E2513E00DCD162 /* GLES2 */, + A7D8A72623E2513E00DCD162 /* KHR */, + A7D8A72C23E2513E00DCD162 /* vulkan */, + ); + path = khronos; + sourceTree = ""; + }; + A7D8A72223E2513E00DCD162 /* GLES2 */ = { + isa = PBXGroup; + children = ( + A7D8A72423E2513E00DCD162 /* gl2.h */, + A7D8A72323E2513E00DCD162 /* gl2ext.h */, + A7D8A72523E2513E00DCD162 /* gl2platform.h */, + ); + path = GLES2; + sourceTree = ""; + }; + A7D8A72623E2513E00DCD162 /* KHR */ = { + isa = PBXGroup; + children = ( + A7D8A72723E2513E00DCD162 /* khrplatform.h */, + ); + path = KHR; + sourceTree = ""; + }; + A7D8A72823E2513E00DCD162 /* EGL */ = { + isa = PBXGroup; + children = ( + A7D8A72923E2513E00DCD162 /* egl.h */, + A7D8A72A23E2513E00DCD162 /* eglext.h */, + A7D8A72B23E2513E00DCD162 /* eglplatform.h */, + ); + path = EGL; + sourceTree = ""; + }; + A7D8A72C23E2513E00DCD162 /* vulkan */ = { + isa = PBXGroup; + children = ( + A7D8A72E23E2513E00DCD162 /* vk_icd.h */, + A7D8A72D23E2513E00DCD162 /* vk_layer.h */, + A7D8A73123E2513E00DCD162 /* vk_platform.h */, + A7D8A73D23E2513E00DCD162 /* vk_sdk_platform.h */, + A7D8A73E23E2513E00DCD162 /* vulkan_android.h */, + A7D8A73C23E2513E00DCD162 /* vulkan_core.h */, + A7D8A73323E2513E00DCD162 /* vulkan_fuchsia.h */, + A7D8A73B23E2513E00DCD162 /* vulkan_ios.h */, + A7D8A73623E2513E00DCD162 /* vulkan_macos.h */, + A7D8A73923E2513E00DCD162 /* vulkan_mir.h */, + A7D8A72F23E2513E00DCD162 /* vulkan_vi.h */, + A7D8A73423E2513E00DCD162 /* vulkan_wayland.h */, + A7D8A73523E2513E00DCD162 /* vulkan_win32.h */, + A7D8A73823E2513E00DCD162 /* vulkan_xcb.h */, + A7D8A73723E2513E00DCD162 /* vulkan_xlib_xrandr.h */, + A7D8A73A23E2513E00DCD162 /* vulkan_xlib.h */, + A7D8A73023E2513E00DCD162 /* vulkan.h */, + A7D8A73223E2513E00DCD162 /* vulkan.hpp */, + ); + path = vulkan; + sourceTree = ""; + }; + A7D8A76C23E2513E00DCD162 /* yuv2rgb */ = { + isa = PBXGroup; + children = ( + A7D8A77023E2513E00DCD162 /* yuv_rgb_sse_func.h */, + A7D8A77123E2513E00DCD162 /* yuv_rgb_std_func.h */, + A7D8A76E23E2513E00DCD162 /* yuv_rgb.c */, + A7D8A77223E2513E00DCD162 /* yuv_rgb.h */, + ); + path = yuv2rgb; + sourceTree = ""; + }; + A7D8A77423E2513E00DCD162 /* cpuinfo */ = { + isa = PBXGroup; + children = ( + A7D8A77523E2513E00DCD162 /* SDL_cpuinfo.c */, + ); + path = cpuinfo; + sourceTree = ""; + }; + A7D8A77623E2513E00DCD162 /* thread */ = { + isa = PBXGroup; + children = ( + A7D8A78123E2513E00DCD162 /* pthread */, + A7D8A77723E2513E00DCD162 /* SDL_systhread.h */, + A7D8A77823E2513E00DCD162 /* SDL_thread_c.h */, + A7D8A77923E2513E00DCD162 /* SDL_thread.c */, + ); + path = thread; + sourceTree = ""; + }; + A7D8A78123E2513E00DCD162 /* pthread */ = { + isa = PBXGroup; + children = ( + 56A2373229F9C113003CCA5F /* SDL_sysrwlock.c */, + A7D8A78523E2513E00DCD162 /* SDL_syscond.c */, + A7D8A78823E2513E00DCD162 /* SDL_sysmutex_c.h */, + A7D8A78723E2513E00DCD162 /* SDL_sysmutex.c */, + A7D8A78323E2513E00DCD162 /* SDL_syssem.c */, + A7D8A78423E2513E00DCD162 /* SDL_systhread_c.h */, + A7D8A78623E2513E00DCD162 /* SDL_systhread.c */, + A7D8A78223E2513E00DCD162 /* SDL_systls.c */, + ); + path = pthread; + sourceTree = ""; + }; + A7D8A79D23E2513E00DCD162 /* joystick */ = { + isa = PBXGroup; + children = ( + A7D8A7AA23E2513E00DCD162 /* apple */, + A7D8A7CC23E2513E00DCD162 /* darwin */, + A7D8A79F23E2513E00DCD162 /* dummy */, + A7D8A7BE23E2513E00DCD162 /* hidapi */, + A7D8A7A123E2513E00DCD162 /* steam */, + 75E09157241EA924004729E1 /* virtual */, + A7D8A7AD23E2513E00DCD162 /* SDL_gamepad.c */, + A7D8A7A923E2513E00DCD162 /* SDL_joystick.c */, + F3820712284F3609004DD584 /* controller_type.c */, + A7D8A7D923E2513E00DCD162 /* controller_type.h */, + A7D8A79E23E2513E00DCD162 /* SDL_gamepad_db.h */, + A7D8A7D023E2513E00DCD162 /* SDL_joystick_c.h */, + A7D8A7CF23E2513E00DCD162 /* SDL_sysjoystick.h */, + A7D8A7CB23E2513E00DCD162 /* usb_ids.h */, + ); + path = joystick; + sourceTree = ""; + }; + A7D8A79F23E2513E00DCD162 /* dummy */ = { + isa = PBXGroup; + children = ( + A7D8A7A023E2513E00DCD162 /* SDL_sysjoystick.c */, + ); + path = dummy; + sourceTree = ""; + }; + A7D8A7A123E2513E00DCD162 /* steam */ = { + isa = PBXGroup; + children = ( + A7D8A7A723E2513E00DCD162 /* SDL_steamcontroller.c */, + A7D8A7A523E2513E00DCD162 /* SDL_steamcontroller.h */, + ); + path = steam; + sourceTree = ""; + }; + A7D8A7AA23E2513E00DCD162 /* apple */ = { + isa = PBXGroup; + children = ( + F395C1B02569C6A000942BFF /* SDL_mfijoystick_c.h */, + F395C1AF2569C6A000942BFF /* SDL_mfijoystick.m */, + ); + path = apple; + sourceTree = ""; + }; + A7D8A7BE23E2513E00DCD162 /* hidapi */ = { + isa = PBXGroup; + children = ( + F32305FE28939F6400E66D30 /* SDL_hidapi_combined.c */, + A7D8A7C923E2513E00DCD162 /* SDL_hidapi_gamecube.c */, + F3F07D59269640160074468B /* SDL_hidapi_luna.c */, + F388C95428B5F6F600661ECF /* SDL_hidapi_ps3.c */, + A7D8A7C323E2513E00DCD162 /* SDL_hidapi_ps4.c */, + F3A4909D2554D38500E92A8B /* SDL_hidapi_ps5.c */, + A75FDBC423EA380300529352 /* SDL_hidapi_rumble.c */, + A75FDBC323EA380300529352 /* SDL_hidapi_rumble.h */, + 9846B07B287A9020000C35C8 /* SDL_hidapi_shield.c */, + F3984CCF25BCC92800374F43 /* SDL_hidapi_stadia.c */, + A75FDAAC23E2795C00529352 /* SDL_hidapi_steam.c */, + A7D8A7C623E2513E00DCD162 /* SDL_hidapi_switch.c */, + F3D60A8228C16A1800788A3A /* SDL_hidapi_wii.c */, + A7D8A7C223E2513E00DCD162 /* SDL_hidapi_xbox360.c */, + A7D8A7C823E2513E00DCD162 /* SDL_hidapi_xbox360w.c */, + A7D8A7C523E2513E00DCD162 /* SDL_hidapi_xboxone.c */, + A7D8A7C723E2513E00DCD162 /* SDL_hidapijoystick_c.h */, + A7D8A7C423E2513E00DCD162 /* SDL_hidapijoystick.c */, + ); + path = hidapi; + sourceTree = ""; + }; + A7D8A7CC23E2513E00DCD162 /* darwin */ = { + isa = PBXGroup; + children = ( + F395C1912569C68E00942BFF /* SDL_iokitjoystick_c.h */, + F395C1922569C68E00942BFF /* SDL_iokitjoystick.c */, + ); + path = darwin; + sourceTree = ""; + }; + A7D8A7DA23E2513E00DCD162 /* file */ = { + isa = PBXGroup; + children = ( + A7D8A7DC23E2513F00DCD162 /* cocoa */, + A7D8A7DB23E2513F00DCD162 /* SDL_rwops.c */, + ); + path = file; + sourceTree = ""; + }; + A7D8A7DC23E2513F00DCD162 /* cocoa */ = { + isa = PBXGroup; + children = ( + A7D8A7DD23E2513F00DCD162 /* SDL_rwopsbundlesupport.h */, + A7D8A7DE23E2513F00DCD162 /* SDL_rwopsbundlesupport.m */, + ); + path = cocoa; + sourceTree = ""; + }; + A7D8A7DF23E2513F00DCD162 /* power */ = { + isa = PBXGroup; + children = ( + A7D8A7EA23E2513F00DCD162 /* macos */, + A7D8A7E023E2513F00DCD162 /* uikit */, + A7D8A7E723E2513F00DCD162 /* SDL_power.c */, + A7D8A7F423E2513F00DCD162 /* SDL_syspower.h */, + ); + path = power; + sourceTree = ""; + }; + A7D8A7E023E2513F00DCD162 /* uikit */ = { + isa = PBXGroup; + children = ( + A7D8A7E123E2513F00DCD162 /* SDL_syspower.m */, + A7D8A7E223E2513F00DCD162 /* SDL_syspower.h */, + ); + path = uikit; + sourceTree = ""; + }; + A7D8A7EA23E2513F00DCD162 /* macos */ = { + isa = PBXGroup; + children = ( + A7D8A7EB23E2513F00DCD162 /* SDL_syspower.c */, + ); + path = macos; + sourceTree = ""; + }; + A7D8A7F623E2513F00DCD162 /* filesystem */ = { + isa = PBXGroup; + children = ( + A7D8A7FD23E2513F00DCD162 /* cocoa */, + A7D8A7F723E2513F00DCD162 /* dummy */, + ); + path = filesystem; + sourceTree = ""; + }; + A7D8A7F723E2513F00DCD162 /* dummy */ = { + isa = PBXGroup; + children = ( + A7D8A7F823E2513F00DCD162 /* SDL_sysfilesystem.c */, + ); + path = dummy; + sourceTree = ""; + }; + A7D8A7FD23E2513F00DCD162 /* cocoa */ = { + isa = PBXGroup; + children = ( + A7D8A7FE23E2513F00DCD162 /* SDL_sysfilesystem.m */, + ); + path = cocoa; + sourceTree = ""; + }; + A7D8A80923E2513F00DCD162 /* hidapi */ = { + isa = PBXGroup; + children = ( + A75FDAA423E2790500529352 /* ios */, + A75FDB9123E4C8B800529352 /* mac */, + A75FDBA423E4CB6F00529352 /* AUTHORS.txt */, + A75FDB5723E39E6100529352 /* hidapi.h */, + A75FDBA323E4CB6F00529352 /* LICENSE-bsd.txt */, + A75FDBA623E4CB6F00529352 /* LICENSE-gpl3.txt */, + A75FDBA523E4CB6F00529352 /* LICENSE-orig.txt */, + A75FDBA723E4CB6F00529352 /* LICENSE.txt */, + F3990E012A788303000D8759 /* SDL_hidapi_c.h */, + F3990E032A788303000D8759 /* SDL_hidapi_ios.h */, + F3990E022A788303000D8759 /* SDL_hidapi_mac.h */, + A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */, + ); + path = hidapi; + sourceTree = ""; + }; + A7D8A85D23E2513F00DCD162 /* loadso */ = { + isa = PBXGroup; + children = ( + A7D8A86223E2513F00DCD162 /* dlopen */, + A7D8A85E23E2513F00DCD162 /* dummy */, + ); + path = loadso; + sourceTree = ""; + }; + A7D8A85E23E2513F00DCD162 /* dummy */ = { + isa = PBXGroup; + children = ( + A7D8A85F23E2513F00DCD162 /* SDL_sysloadso.c */, + ); + path = dummy; + sourceTree = ""; + }; + A7D8A86223E2513F00DCD162 /* dlopen */ = { + isa = PBXGroup; + children = ( + A7D8A86323E2513F00DCD162 /* SDL_sysloadso.c */, + ); + path = dlopen; + sourceTree = ""; + }; + A7D8A86423E2513F00DCD162 /* audio */ = { + isa = PBXGroup; + children = ( + A7D8A8B923E2513F00DCD162 /* coreaudio */, + A7D8A8AF23E2513F00DCD162 /* disk */, + A7D8A87023E2513F00DCD162 /* dummy */, + A7D8A87323E2513F00DCD162 /* SDL_audio_c.h */, + F32DDAC92AB795A30041EAA5 /* SDL_audio_channel_converters.h */, + F32DDACC2AB795A30041EAA5 /* SDL_audio_resampler_filter.h */, + A7D8A8B823E2513F00DCD162 /* SDL_audio.c */, + A7D8A8A123E2513F00DCD162 /* SDL_audiocvt.c */, + A7D8A87723E2513F00DCD162 /* SDL_audiodev_c.h */, + A7D8A88F23E2513F00DCD162 /* SDL_audiodev.c */, + F32DDACB2AB795A30041EAA5 /* SDL_audioqueue.c */, + F32DDACD2AB795A30041EAA5 /* SDL_audioqueue.h */, + F32DDACE2AB795A30041EAA5 /* SDL_audioresample.c */, + F32DDACA2AB795A30041EAA5 /* SDL_audioresample.h */, + A7D8A8A023E2513F00DCD162 /* SDL_audiotypecvt.c */, + A7D8A86523E2513F00DCD162 /* SDL_mixer.c */, + A7D8A89F23E2513F00DCD162 /* SDL_sysaudio.h */, + A7D8A86623E2513F00DCD162 /* SDL_wave.c */, + A7D8A8A223E2513F00DCD162 /* SDL_wave.h */, + ); + path = audio; + sourceTree = ""; + }; + A7D8A87023E2513F00DCD162 /* dummy */ = { + isa = PBXGroup; + children = ( + A7D8A87123E2513F00DCD162 /* SDL_dummyaudio.h */, + A7D8A87223E2513F00DCD162 /* SDL_dummyaudio.c */, + ); + path = dummy; + sourceTree = ""; + }; + A7D8A8AF23E2513F00DCD162 /* disk */ = { + isa = PBXGroup; + children = ( + A7D8A8B023E2513F00DCD162 /* SDL_diskaudio.h */, + A7D8A8B123E2513F00DCD162 /* SDL_diskaudio.c */, + ); + path = disk; + sourceTree = ""; + }; + A7D8A8B923E2513F00DCD162 /* coreaudio */ = { + isa = PBXGroup; + children = ( + A7D8A8BA23E2513F00DCD162 /* SDL_coreaudio.h */, + A7D8A8BB23E2513F00DCD162 /* SDL_coreaudio.m */, + ); + path = coreaudio; + sourceTree = ""; + }; + A7D8A8D223E2514000DCD162 /* stdlib */ = { + isa = PBXGroup; + children = ( + F3973FA128A59BDD00B84553 /* SDL_crc16.c */, + F395BF6425633B2400942BFF /* SDL_crc32.c */, + A7D8A8D423E2514000DCD162 /* SDL_getenv.c */, + A7D8A8D323E2514000DCD162 /* SDL_iconv.c */, + A7D8A8D923E2514000DCD162 /* SDL_malloc.c */, + A7D8A8D723E2514000DCD162 /* SDL_qsort.c */, + A7D8A8D823E2514000DCD162 /* SDL_stdlib.c */, + A7D8A8D523E2514000DCD162 /* SDL_string.c */, + A7D8A8D623E2514000DCD162 /* SDL_strtokr.c */, + F3973FA028A59BDD00B84553 /* SDL_vacopy.h */, + ); + path = stdlib; + sourceTree = ""; + }; + A7D8A8DA23E2514000DCD162 /* render */ = { + isa = PBXGroup; + children = ( + A7D8A8DD23E2514000DCD162 /* metal */, + A7D8A90C23E2514000DCD162 /* opengl */, + A7D8A90323E2514000DCD162 /* opengles2 */, + A7D8A8EF23E2514000DCD162 /* software */, + A7D8A8FF23E2514000DCD162 /* SDL_d3dmath.c */, + A7D8A8DC23E2514000DCD162 /* SDL_d3dmath.h */, + A7D8A8DB23E2514000DCD162 /* SDL_render.c */, + E4F7981D2AD8D86A00669F54 /* SDL_render_unsupported.c */, + A7D8A8EE23E2514000DCD162 /* SDL_sysrender.h */, + A7D8A8EC23E2514000DCD162 /* SDL_yuv_sw_c.h */, + A7D8A8ED23E2514000DCD162 /* SDL_yuv_sw.c */, + ); + path = render; + sourceTree = ""; + }; + A7D8A8DD23E2514000DCD162 /* metal */ = { + isa = PBXGroup; + children = ( + A7D8A8DE23E2514000DCD162 /* SDL_render_metal.m */, + A7D8A8DF23E2514000DCD162 /* SDL_shaders_metal_ios.h */, + A7D8A8E223E2514000DCD162 /* SDL_shaders_metal_macos.h */, + A7D8A8E323E2514000DCD162 /* SDL_shaders_metal_tvos.h */, + A7D8A8E023E2514000DCD162 /* SDL_shaders_metal.metal */, + ); + path = metal; + sourceTree = ""; + }; + A7D8A8EF23E2514000DCD162 /* software */ = { + isa = PBXGroup; + children = ( + A1626A512617008C003F1973 /* SDL_triangle.h */, + A1626A3D2617006A003F1973 /* SDL_triangle.c */, + A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */, + A7D8A8F623E2514000DCD162 /* SDL_blendfillrect.h */, + A7D8A8FB23E2514000DCD162 /* SDL_blendline.c */, + A7D8A8F223E2514000DCD162 /* SDL_blendline.h */, + A7D8A8F023E2514000DCD162 /* SDL_blendpoint.c */, + A7D8A8F823E2514000DCD162 /* SDL_blendpoint.h */, + A7D8A8FA23E2514000DCD162 /* SDL_draw.h */, + A7D8A8F123E2514000DCD162 /* SDL_drawline.c */, + A7D8A8F723E2514000DCD162 /* SDL_drawline.h */, + A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */, + A7D8A8F323E2514000DCD162 /* SDL_drawpoint.h */, + A7D8A8F523E2514000DCD162 /* SDL_render_sw_c.h */, + A7D8A8F923E2514000DCD162 /* SDL_render_sw.c */, + A7D8A8F423E2514000DCD162 /* SDL_rotate.c */, + A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */, + ); + path = software; + sourceTree = ""; + }; + A7D8A90323E2514000DCD162 /* opengles2 */ = { + isa = PBXGroup; + children = ( + A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */, + A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */, + A7D8A90723E2514000DCD162 /* SDL_shaders_gles2.c */, + A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */, + ); + path = opengles2; + sourceTree = ""; + }; + A7D8A90C23E2514000DCD162 /* opengl */ = { + isa = PBXGroup; + children = ( + A7D8A90E23E2514000DCD162 /* SDL_glfuncs.h */, + A7D8A90F23E2514000DCD162 /* SDL_render_gl.c */, + A7D8A91023E2514000DCD162 /* SDL_shaders_gl.c */, + A7D8A90D23E2514000DCD162 /* SDL_shaders_gl.h */, + ); + path = opengl; + sourceTree = ""; + }; + A7D8A91123E2514000DCD162 /* libm */ = { + isa = PBXGroup; + children = ( + A7D8A91D23E2514000DCD162 /* e_atan2.c */, + A7D8A92123E2514000DCD162 /* e_exp.c */, + A7D8A92023E2514000DCD162 /* e_fmod.c */, + A7D8A92323E2514000DCD162 /* e_log.c */, + A7D8A92223E2514000DCD162 /* e_log10.c */, + A7D8A91C23E2514000DCD162 /* e_pow.c */, + A7D8A91F23E2514000DCD162 /* e_rem_pio2.c */, + A7D8A92423E2514000DCD162 /* e_sqrt.c */, + A7D8A91923E2514000DCD162 /* k_cos.c */, + A7D8A91623E2514000DCD162 /* k_rem_pio2.c */, + A7D8A91723E2514000DCD162 /* k_sin.c */, + A7D8A92723E2514000DCD162 /* k_tan.c */, + A7D8A92623E2514000DCD162 /* math_libm.h */, + A7D8A91B23E2514000DCD162 /* math_private.h */, + A7D8A91823E2514000DCD162 /* s_atan.c */, + A7D8A91423E2514000DCD162 /* s_copysign.c */, + A7D8A91323E2514000DCD162 /* s_cos.c */, + A7D8A91523E2514000DCD162 /* s_fabs.c */, + A7D8A92523E2514000DCD162 /* s_floor.c */, + A7D8A91A23E2514000DCD162 /* s_scalbn.c */, + A7D8A91223E2514000DCD162 /* s_sin.c */, + A7D8A91E23E2514000DCD162 /* s_tan.c */, + ); + path = libm; + sourceTree = ""; + }; + A7D8A92923E2514000DCD162 /* events */ = { + isa = PBXGroup; + children = ( + A7D8A93223E2514000DCD162 /* blank_cursor.h */, + A7D8A93323E2514000DCD162 /* default_cursor.h */, + A7D8A93423E2514000DCD162 /* scancodes_darwin.h */, + A7D8A93623E2514000DCD162 /* scancodes_linux.h */, + A7D8A92C23E2514000DCD162 /* scancodes_windows.h */, + A7D8A94123E2514000DCD162 /* scancodes_xfree86.h */, + A7D8A93923E2514000DCD162 /* SDL_clipboardevents_c.h */, + A7D8A93A23E2514000DCD162 /* SDL_clipboardevents.c */, + A7D8A93123E2514000DCD162 /* SDL_displayevents_c.h */, + A7D8A92D23E2514000DCD162 /* SDL_displayevents.c */, + A7D8A92E23E2514000DCD162 /* SDL_dropevents_c.h */, + A7D8A93B23E2514000DCD162 /* SDL_dropevents.c */, + A7D8A94223E2514000DCD162 /* SDL_events_c.h */, + A7D8A93523E2514000DCD162 /* SDL_events.c */, + A7D8A93D23E2514000DCD162 /* SDL_keyboard_c.h */, + A7D8A93823E2514000DCD162 /* SDL_keyboard.c */, + A7D8A92B23E2514000DCD162 /* SDL_mouse_c.h */, + A7D8A92A23E2514000DCD162 /* SDL_mouse.c */, + A7D8A93C23E2514000DCD162 /* SDL_quit.c */, + A7D8A93723E2514000DCD162 /* SDL_touch_c.h */, + A7D8A93E23E2514000DCD162 /* SDL_touch.c */, + A7D8A94323E2514000DCD162 /* SDL_windowevents_c.h */, + A7D8A92F23E2514000DCD162 /* SDL_windowevents.c */, + ); + path = events; + sourceTree = ""; + }; + E2D187D028A5673500D2B4F1 /* SDL3 */ = { + isa = PBXGroup; + children = ( + E2D187D228A5673500D2B4F1 /* Info.plist */, + ); + path = SDL3; + sourceTree = ""; + }; + F36C7ACF294B9F5E004D61C3 /* core */ = { + isa = PBXGroup; + children = ( + E4F798192AD8D84800669F54 /* SDL_core_unsupported.c */, + F36C7AD0294BA009004D61C3 /* SDL_runapp.c */, + ); + path = core; + sourceTree = ""; + }; + F3ADAB8C2576F08500A6B1D9 /* ios */ = { + isa = PBXGroup; + children = ( + F3ADAB8D2576F0B300A6B1D9 /* SDL_sysurl.m */, + ); + path = ios; + sourceTree = ""; + }; + F59C70FC00D5CB5801000001 /* pkg-support */ = { + isa = PBXGroup; + children = ( + F59C710100D5CB5801000001 /* resources */, + F59C710600D5CB5801000001 /* SDL.info */, + ); + path = "pkg-support"; + sourceTree = SOURCE_ROOT; + }; + F59C710100D5CB5801000001 /* resources */ = { + isa = PBXGroup; + children = ( + F37A8E1928405AA100C38E95 /* CMake */, + 00794D3F09D0C461003FC8A1 /* License.txt */, + F59C710300D5CB5801000001 /* ReadMe.txt */, + ); + path = resources; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + BECDF5FF0761BA81005FE872 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + F3F7D9812933074E00816151 /* SDL.h in Headers */, + A7D8B39E23E2514200DCD162 /* SDL_RLEaccel_c.h in Headers */, + F3F7D9C52933074E00816151 /* SDL_assert.h in Headers */, + A7D8B61723E2514300DCD162 /* SDL_assert_c.h in Headers */, + F3F7D9292933074E00816151 /* SDL_atomic.h in Headers */, + F3F7D8ED2933074E00816151 /* SDL_audio.h in Headers */, + A7D8B7A023E2514400DCD162 /* SDL_audio_c.h in Headers */, + A7D8B7B223E2514400DCD162 /* SDL_audiodev_c.h in Headers */, + F3F7D9E12933074E00816151 /* SDL_begin_code.h in Headers */, + F3F7D9A52933074E00816151 /* SDL_bits.h in Headers */, + A7D8BA0123E2514400DCD162 /* SDL_blendfillrect.h in Headers */, + A7D8B9E923E2514400DCD162 /* SDL_blendline.h in Headers */, + F3F7D97D2933074E00816151 /* SDL_blendmode.h in Headers */, + A7D8BA0D23E2514400DCD162 /* SDL_blendpoint.h in Headers */, + A7D8B3B623E2514200DCD162 /* SDL_blit.h in Headers */, + A7D8B2BA23E2514200DCD162 /* SDL_blit_auto.h in Headers */, + A7D8B39823E2514200DCD162 /* SDL_blit_copy.h in Headers */, + A7D8ADEC23E2514100DCD162 /* SDL_blit_slow.h in Headers */, + F3F7D9A12933074E00816151 /* SDL_clipboard.h in Headers */, + A7D8BB6F23E2514500DCD162 /* SDL_clipboardevents_c.h in Headers */, + F3F7D9D92933074E00816151 /* SDL_close_code.h in Headers */, + A7D8AECA23E2514100DCD162 /* SDL_cocoaclipboard.h in Headers */, + A7D8AF1223E2514100DCD162 /* SDL_cocoaevents.h in Headers */, + A7D8AE8E23E2514100DCD162 /* SDL_cocoakeyboard.h in Headers */, + A7D8AF0623E2514100DCD162 /* SDL_cocoamessagebox.h in Headers */, + A7D8AEB223E2514100DCD162 /* SDL_cocoametalview.h in Headers */, + A7D8AEF423E2514100DCD162 /* SDL_cocoamodes.h in Headers */, + A7D8AF1E23E2514100DCD162 /* SDL_cocoamouse.h in Headers */, + A7D8AEDC23E2514100DCD162 /* SDL_cocoaopengl.h in Headers */, + A7D8AEEE23E2514100DCD162 /* SDL_cocoaopengles.h in Headers */, + A7D8AE8223E2514100DCD162 /* SDL_cocoashape.h in Headers */, + A7D8AF0023E2514100DCD162 /* SDL_cocoavideo.h in Headers */, + A7D8AEE823E2514100DCD162 /* SDL_cocoavulkan.h in Headers */, + A7D8AEFA23E2514100DCD162 /* SDL_cocoawindow.h in Headers */, + F32DDACF2AB795A30041EAA5 /* SDL_audio_channel_converters.h in Headers */, + F3F7D9D12933074E00816151 /* SDL_copying.h in Headers */, + A7D8B8CC23E2514400DCD162 /* SDL_coreaudio.h in Headers */, + A7D8A96F23E2514000DCD162 /* SDL_coremotionsensor.h in Headers */, + F3F7D9B92933074E00816151 /* SDL_cpuinfo.h in Headers */, + F3990E062A788303000D8759 /* SDL_hidapi_ios.h in Headers */, + A7D8B98023E2514400DCD162 /* SDL_d3dmath.h in Headers */, + A7D8B8A223E2514400DCD162 /* SDL_diskaudio.h in Headers */, + A7D8BB3F23E2514500DCD162 /* SDL_displayevents_c.h in Headers */, + A7D8BA1923E2514400DCD162 /* SDL_draw.h in Headers */, + A7D8BA0723E2514400DCD162 /* SDL_drawline.h in Headers */, + A7D8B9EF23E2514400DCD162 /* SDL_drawpoint.h in Headers */, + A7D8BB2D23E2514500DCD162 /* SDL_dropevents_c.h in Headers */, + A7D8B79423E2514400DCD162 /* SDL_dummyaudio.h in Headers */, + A7D8A96323E2514000DCD162 /* SDL_dummysensor.h in Headers */, + A7D8AB0A23E2514100DCD162 /* SDL_dynapi.h in Headers */, + F32DDAD02AB795A30041EAA5 /* SDL_audioresample.h in Headers */, + A7D8AB1023E2514100DCD162 /* SDL_dynapi_overrides.h in Headers */, + A7D8AB1C23E2514100DCD162 /* SDL_dynapi_procs.h in Headers */, + F3F7D9252933074E00816151 /* SDL_egl.h in Headers */, + A7D8ABD923E2514100DCD162 /* SDL_egl_c.h in Headers */, + F3F7D93D2933074E00816151 /* SDL_endian.h in Headers */, + F3F7D9352933074E00816151 /* SDL_error.h in Headers */, + A7D8A95D23E2514000DCD162 /* SDL_error_c.h in Headers */, + F3F7D9712933074E00816151 /* SDL_events.h in Headers */, + A7D8BBA523E2514500DCD162 /* SDL_events_c.h in Headers */, + F3F7D99D2933074E00816151 /* SDL_filesystem.h in Headers */, + F3F7D9852933074E00816151 /* SDL_gamepad.h in Headers */, + A7D8B4AC23E2514300DCD162 /* SDL_gamepad_db.h in Headers */, + A7D8BA5523E2514400DCD162 /* SDL_gles2funcs.h in Headers */, + A7D8BA7923E2514400DCD162 /* SDL_glfuncs.h in Headers */, + F3F7D9892933074E00816151 /* SDL_guid.h in Headers */, + F3F7D8F92933074E00816151 /* SDL_haptic.h in Headers */, + A7D8AABC23E2514100DCD162 /* SDL_haptic_c.h in Headers */, + F3F7D96D2933074E00816151 /* SDL_hidapi.h in Headers */, + A75FDBC523EA380300529352 /* SDL_hidapi_rumble.h in Headers */, + A7D8B55723E2514300DCD162 /* SDL_hidapijoystick_c.h in Headers */, + F3F7D9112933074E00816151 /* SDL_hints.h in Headers */, + A7D8B94A23E2514400DCD162 /* SDL_hints_c.h in Headers */, + F3B38CD7296E2E52005DA6D3 /* SDL_init.h in Headers */, + A7D8A99923E2514000DCD162 /* SDL_internal.h in Headers */, + F3B38CDF296E2E52005DA6D3 /* SDL_intrin.h in Headers */, + F395C1932569C68F00942BFF /* SDL_iokitjoystick_c.h in Headers */, + F3990E052A788303000D8759 /* SDL_hidapi_mac.h in Headers */, + F3F7D9912933074E00816151 /* SDL_joystick.h in Headers */, + A7D8B58723E2514300DCD162 /* SDL_joystick_c.h in Headers */, + F3F7D9512933074E00816151 /* SDL_keyboard.h in Headers */, + A7D8BB8723E2514500DCD162 /* SDL_keyboard_c.h in Headers */, + F3F7D9752933074E00816151 /* SDL_keycode.h in Headers */, + A1BB8B6C27F6CF330057CFA8 /* SDL_list.h in Headers */, + F3F7D9A92933074E00816151 /* SDL_loadso.h in Headers */, + F3F7D9552933074E00816151 /* SDL_locale.h in Headers */, + F3F7D9212933074E00816151 /* SDL_log.h in Headers */, + F386F6E72884663E001840AA /* SDL_log_c.h in Headers */, + F3F7D9052933074E00816151 /* SDL_main.h in Headers */, + F3B38CCF296E2E52005DA6D3 /* SDL_main_impl.h in Headers */, + F3F7D91D2933074E00816151 /* SDL_messagebox.h in Headers */, + F3F7D98D2933074E00816151 /* SDL_metal.h in Headers */, + F395C1BA2569C6A000942BFF /* SDL_mfijoystick_c.h in Headers */, + F3F7D9992933074E00816151 /* SDL_misc.h in Headers */, + F3F7D9AD2933074E00816151 /* SDL_mouse.h in Headers */, + A7D8BB1B23E2514500DCD162 /* SDL_mouse_c.h in Headers */, + F3F7D9DD2933074E00816151 /* SDL_mutex.h in Headers */, + A7D8ABFD23E2514100DCD162 /* SDL_nullevents_c.h in Headers */, + A7D8ABE523E2514100DCD162 /* SDL_nullframebuffer_c.h in Headers */, + A7D8ABF723E2514100DCD162 /* SDL_nullvideo.h in Headers */, + A7D8AB5B23E2514100DCD162 /* SDL_offscreenevents_c.h in Headers */, + A7D8AB7F23E2514100DCD162 /* SDL_offscreenframebuffer_c.h in Headers */, + F31A92C828D4CB39003BFD6A /* SDL_offscreenopengles.h in Headers */, + A7D8AB6D23E2514100DCD162 /* SDL_offscreenvideo.h in Headers */, + A7D8AB8523E2514100DCD162 /* SDL_offscreenwindow.h in Headers */, + F3B38CDB296E2E52005DA6D3 /* SDL_oldnames.h in Headers */, + F3F7D9C92933074E00816151 /* SDL_opengl.h in Headers */, + F3F7D9452933074E00816151 /* SDL_opengl_glext.h in Headers */, + F3E5A6ED2AD5E10800293D83 /* SDL_properties.h in Headers */, + E4F7981C2AD8D85500669F54 /* SDL_dynapi_unsupported.h in Headers */, + F3F7D95D2933074E00816151 /* SDL_opengles.h in Headers */, + F3F7D9612933074E00816151 /* SDL_opengles2.h in Headers */, + F3F7D8FD2933074E00816151 /* SDL_opengles2_gl2.h in Headers */, + F3F7D9392933074E00816151 /* SDL_opengles2_gl2ext.h in Headers */, + F3F7D9692933074E00816151 /* SDL_opengles2_gl2platform.h in Headers */, + F3F7D9092933074E00816151 /* SDL_opengles2_khrplatform.h in Headers */, + F32DDAD22AB795A30041EAA5 /* SDL_audio_resampler_filter.h in Headers */, + F3F7D9192933074E00816151 /* SDL_pixels.h in Headers */, + A7D8B2C023E2514200DCD162 /* SDL_pixels_c.h in Headers */, + F3F7D8F12933074E00816151 /* SDL_platform.h in Headers */, + F3B38CD3296E2E52005DA6D3 /* SDL_platform_defines.h in Headers */, + F3F7D9B12933074E00816151 /* SDL_power.h in Headers */, + F3F7D9C12933074E00816151 /* SDL_quit.h in Headers */, + F3F7D9CD2933074E00816151 /* SDL_rect.h in Headers */, + A7D8AC0323E2514100DCD162 /* SDL_rect_c.h in Headers */, + F3F7D9BD2933074E00816151 /* SDL_render.h in Headers */, + A7D8B9FB23E2514400DCD162 /* SDL_render_sw_c.h in Headers */, + F3F7D9152933074E00816151 /* SDL_revision.h in Headers */, + A7D8BA3123E2514400DCD162 /* SDL_rotate.h in Headers */, + F3F7D9652933074E00816151 /* SDL_rwops.h in Headers */, + A7D8B5C323E2514300DCD162 /* SDL_rwopsbundlesupport.h in Headers */, + F3F7D9492933074E00816151 /* SDL_scancode.h in Headers */, + F3F7D94D2933074E00816151 /* SDL_sensor.h in Headers */, + A7D8A98D23E2514000DCD162 /* SDL_sensor_c.h in Headers */, + A7D8BA7323E2514400DCD162 /* SDL_shaders_gl.h in Headers */, + A7D8BA4F23E2514400DCD162 /* SDL_shaders_gles2.h in Headers */, + A7D8B98C23E2514400DCD162 /* SDL_shaders_metal_ios.h in Headers */, + A7D8B99B23E2514400DCD162 /* SDL_shaders_metal_macos.h in Headers */, + A7D8B9A123E2514400DCD162 /* SDL_shaders_metal_tvos.h in Headers */, + F3F7D92D2933074E00816151 /* SDL_shape.h in Headers */, + A7D8AC0923E2514100DCD162 /* SDL_shape_internals.h in Headers */, + F3F7D8F52933074E00816151 /* SDL_stdinc.h in Headers */, + A7D8BBC723E2561500DCD162 /* SDL_steamcontroller.h in Headers */, + F3F7D9312933074E00816151 /* SDL_surface.h in Headers */, + A7D8B85A23E2514400DCD162 /* SDL_sysaudio.h in Headers */, + A7D8AAD423E2514100DCD162 /* SDL_syshaptic.h in Headers */, + A7D8AAE023E2514100DCD162 /* SDL_syshaptic_c.h in Headers */, + A7D8B58123E2514300DCD162 /* SDL_sysjoystick.h in Headers */, + 566E26E1246274CC00718109 /* SDL_syslocale.h in Headers */, + A7D8B44023E2514300DCD162 /* SDL_sysmutex_c.h in Headers */, + A7D8B5D523E2514300DCD162 /* SDL_syspower.h in Headers */, + A7D8B61123E2514300DCD162 /* SDL_syspower.h in Headers */, + A7D8B9D723E2514400DCD162 /* SDL_sysrender.h in Headers */, + A7D8A97B23E2514000DCD162 /* SDL_syssensor.h in Headers */, + F3F7D9E52933074E00816151 /* SDL_system.h in Headers */, + A7D8B3E623E2514300DCD162 /* SDL_systhread.h in Headers */, + A7D8B42823E2514300DCD162 /* SDL_systhread_c.h in Headers */, + 5616CA4D252BB2A6005D5928 /* SDL_sysurl.h in Headers */, + A7D8AC3F23E2514100DCD162 /* SDL_sysvideo.h in Headers */, + F3F7D9412933074E00816151 /* SDL_syswm.h in Headers */, + F3F7D9792933074E00816151 /* SDL_thread.h in Headers */, + A7D8B3EC23E2514300DCD162 /* SDL_thread_c.h in Headers */, + F3F7D90D2933074E00816151 /* SDL_timer.h in Headers */, + A7D8AB3123E2514100DCD162 /* SDL_timer_c.h in Headers */, + F3F7D9012933074E00816151 /* SDL_touch.h in Headers */, + A7D8BB6323E2514500DCD162 /* SDL_touch_c.h in Headers */, + A1626A522617008D003F1973 /* SDL_triangle.h in Headers */, + A7D8BBD223E2574800DCD162 /* SDL_uikitappdelegate.h in Headers */, + A7D8BBD423E2574800DCD162 /* SDL_uikitclipboard.h in Headers */, + A7D8BBD623E2574800DCD162 /* SDL_uikitevents.h in Headers */, + A7D8BBD823E2574800DCD162 /* SDL_uikitmessagebox.h in Headers */, + A7D8BBDA23E2574800DCD162 /* SDL_uikitmetalview.h in Headers */, + F3990E042A788303000D8759 /* SDL_hidapi_c.h in Headers */, + A7D8BBDC23E2574800DCD162 /* SDL_uikitmodes.h in Headers */, + A7D8BBDE23E2574800DCD162 /* SDL_uikitopengles.h in Headers */, + A7D8BBE023E2574800DCD162 /* SDL_uikitopenglview.h in Headers */, + A7D8BBE223E2574800DCD162 /* SDL_uikitvideo.h in Headers */, + A7D8BBE423E2574800DCD162 /* SDL_uikitview.h in Headers */, + A7D8BBE623E2574800DCD162 /* SDL_uikitviewcontroller.h in Headers */, + A7D8BBE823E2574800DCD162 /* SDL_uikitvulkan.h in Headers */, + A7D8BBEA23E2574800DCD162 /* SDL_uikitwindow.h in Headers */, + F386F6F02884663E001840AA /* SDL_utils_c.h in Headers */, + F3973FA228A59BDD00B84553 /* SDL_vacopy.h in Headers */, + F3F7D9D52933074E00816151 /* SDL_version.h in Headers */, + F3F7D9592933074E00816151 /* SDL_video.h in Headers */, + 75E09163241EA924004729E1 /* SDL_virtualjoystick_c.h in Headers */, + F3F7D9952933074E00816151 /* SDL_vulkan.h in Headers */, + A7D8AD1D23E2514100DCD162 /* SDL_vulkan_internal.h in Headers */, + A7D8B86C23E2514400DCD162 /* SDL_wave.h in Headers */, + A7D8BBAB23E2514500DCD162 /* SDL_windowevents_c.h in Headers */, + A7D8B3B023E2514200DCD162 /* SDL_yuv_c.h in Headers */, + A7D8B9CB23E2514400DCD162 /* SDL_yuv_sw_c.h in Headers */, + A7D8BB4523E2514500DCD162 /* blank_cursor.h in Headers */, + A7D8B5B723E2514300DCD162 /* controller_type.h in Headers */, + A7D8BB4B23E2514500DCD162 /* default_cursor.h in Headers */, + A7D8B23C23E2514200DCD162 /* egl.h in Headers */, + A7D8B24223E2514200DCD162 /* eglext.h in Headers */, + A7D8B24823E2514200DCD162 /* eglplatform.h in Headers */, + A7D8B22A23E2514200DCD162 /* gl2.h in Headers */, + A7D8B22423E2514200DCD162 /* gl2ext.h in Headers */, + A7D8B23023E2514200DCD162 /* gl2platform.h in Headers */, + A75FDB5823E39E6100529352 /* hidapi.h in Headers */, + A7D8B23623E2514200DCD162 /* khrplatform.h in Headers */, + A7D8BB0323E2514500DCD162 /* math_libm.h in Headers */, + A7D8BAC123E2514500DCD162 /* math_private.h in Headers */, + A7D8BB5123E2514500DCD162 /* scancodes_darwin.h in Headers */, + A7D8BB5D23E2514500DCD162 /* scancodes_linux.h in Headers */, + A7D8BB2123E2514500DCD162 /* scancodes_windows.h in Headers */, + A7D8BB9F23E2514500DCD162 /* scancodes_xfree86.h in Headers */, + A7D8B56F23E2514300DCD162 /* usb_ids.h in Headers */, + A7D8B25423E2514200DCD162 /* vk_icd.h in Headers */, + A7D8B24E23E2514200DCD162 /* vk_layer.h in Headers */, + A7D8B26623E2514200DCD162 /* vk_platform.h in Headers */, + A7D8B2AE23E2514200DCD162 /* vk_sdk_platform.h in Headers */, + A7D8B26023E2514200DCD162 /* vulkan.h in Headers */, + A7D8B26C23E2514200DCD162 /* vulkan.hpp in Headers */, + A7D8B2B423E2514200DCD162 /* vulkan_android.h in Headers */, + A7D8B2A823E2514200DCD162 /* vulkan_core.h in Headers */, + A7D8B27223E2514200DCD162 /* vulkan_fuchsia.h in Headers */, + A7D8B2A223E2514200DCD162 /* vulkan_ios.h in Headers */, + A7D8B28423E2514200DCD162 /* vulkan_macos.h in Headers */, + A7D8B29623E2514200DCD162 /* vulkan_mir.h in Headers */, + A7D8B25A23E2514200DCD162 /* vulkan_vi.h in Headers */, + F32DDAD32AB795A30041EAA5 /* SDL_audioqueue.h in Headers */, + A7D8B27823E2514200DCD162 /* vulkan_wayland.h in Headers */, + A7D8B27E23E2514200DCD162 /* vulkan_win32.h in Headers */, + A7D8B29023E2514200DCD162 /* vulkan_xcb.h in Headers */, + A7D8B29C23E2514200DCD162 /* vulkan_xlib.h in Headers */, + A7D8B28A23E2514200DCD162 /* vulkan_xlib_xrandr.h in Headers */, + A7D8B3D423E2514300DCD162 /* yuv_rgb.h in Headers */, + A7D8B3C823E2514200DCD162 /* yuv_rgb_sse_func.h in Headers */, + A7D8B3CE23E2514300DCD162 /* yuv_rgb_std_func.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + BECDF5FE0761BA81005FE872 /* SDL3 */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0073177A0858DB0500B2BC32 /* Build configuration list for PBXNativeTarget "SDL3" */; + buildPhases = ( + BECDF5FF0761BA81005FE872 /* Headers */, + BECDF62A0761BA81005FE872 /* Resources */, + BECDF62C0761BA81005FE872 /* Sources */, + BECDF6680761BA81005FE872 /* Frameworks */, + A75FDB9C23E4CAEF00529352 /* Embed Frameworks */, + ); + buildRules = ( + ); + comments = "We recommend installing to /Library/Frameworks\nAn alternative is $(HOME)/Library/Frameworks for per-user if permissions are an issue.\n\nAdd the framework to the Groups & Files panel (under Linked Frameworks is a good place) and enable the check box for the targets that need to link to it. You can also manually add \"-framework SDL\" to your linker flags if you don't like the check box system.\n\nAdd /Library/Frameworks/SDL.framework/Headers to your header search path\nAdd /Library/Frameworks to your library search path\n(Adjust the two above if installed in $(HOME)/Library/Frameworks. You can also list both paths if you want robustness.)\n\nWe used to use an exports file. It was becoming a maintenance issue we kept neglecting, so we have removed it.\n\n"; + dependencies = ( + ); + name = SDL3; + productInstallPath = "@executable_path/../Frameworks"; + productName = SDL; + productReference = BECDF66C0761BA81005FE872 /* SDL3.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 0867D690FE84028FC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1130; + TargetAttributes = { + F3676F582A7885080091160D = { + CreatedOnToolsVersion = 14.3.1; + }; + F3B38CEC296F63B6005DA6D3 = { + CreatedOnToolsVersion = 14.2; + }; + }; + }; + buildConfigurationList = 0073178E0858DB0500B2BC32 /* Build configuration list for PBXProject "SDL" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + en, + Base, + ); + mainGroup = 0867D691FE84028FC02AAC07 /* SDLFramework */; + productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + BECDF5FE0761BA81005FE872 /* SDL3 */, + F3B38CEC296F63B6005DA6D3 /* SDL3.xcframework */, + F3676F582A7885080091160D /* SDL3.dmg */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + BECDF62A0761BA81005FE872 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F37A8E1A28405AA100C38E95 /* CMake in Resources */, + A75FDBB823E4CBC700529352 /* ReadMe.txt in Resources */, + A75FDBB723E4CBC700529352 /* License.txt in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + F3676F5E2A78852D0091160D /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "mkdir -p build/dmg-tmp\ncp -a build/SDL3.xcframework build/dmg-tmp/\n\ncp pkg-support/resources/License.txt build/dmg-tmp\ncp pkg-support/resources/ReadMe.txt build/dmg-tmp\n\n# remove the .DS_Store files if any (we may want to provide one in the future for fancy .dmgs)\nfind build/dmg-tmp -name .DS_Store -exec rm -f \"{}\" \\;\n\n# for fancy .dmg\nmkdir -p build/dmg-tmp/.logo\ncp pkg-support/resources/SDL_DS_Store build/dmg-tmp/.DS_Store\ncp pkg-support/sdl_logo.pdf build/dmg-tmp/.logo\n\n# create the dmg\nhdiutil create -ov -fs HFS+ -volname SDL3 -srcfolder build/dmg-tmp build/SDL3.dmg\n\n# clean up\nrm -rf build/dmg-tmp\n"; + }; + F3B38CF0296F63D1005DA6D3 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Build an xcframework with both device and simulator files for all platforms.\n# Adapted from an answer in\n# https://developer.apple.com/forums/thread/666335?answerId=685927022#685927022\n\nif [ \"$XCODE_VERSION_ACTUAL\" -lt 1100 ]\nthen\n echo \"error: Building an xcframework requires Xcode 11 minimum.\"\n exit 1\nfi\n\nFRAMEWORK_NAME=\"SDL3\"\nPROJECT_NAME=\"SDL\"\nSCHEME=\"SDL3\"\n\nMACOS_ARCHIVE_PATH=\"${BUILD_DIR}/${CONFIGURATION}/${FRAMEWORK_NAME}-macosx.xcarchive\"\nIOS_SIMULATOR_ARCHIVE_PATH=\"${BUILD_DIR}/${CONFIGURATION}/${FRAMEWORK_NAME}-iphonesimulator.xcarchive\"\nIOS_DEVICE_ARCHIVE_PATH=\"${BUILD_DIR}/${CONFIGURATION}/${FRAMEWORK_NAME}-iphoneos.xcarchive\"\nTVOS_SIMULATOR_ARCHIVE_PATH=\"${BUILD_DIR}/${CONFIGURATION}/${FRAMEWORK_NAME}-appletvsimulator.xcarchive\"\nTVOS_DEVICE_ARCHIVE_PATH=\"${BUILD_DIR}/${CONFIGURATION}/${FRAMEWORK_NAME}-appletvos.xcarchive\"\n\nOUTPUT_DIR=\"./build/\"\n\n# macOS\nxcodebuild archive \\\n ONLY_ACTIVE_ARCH=NO \\\n -scheme \"${SCHEME}\" \\\n -project \"${PROJECT_NAME}.xcodeproj\" \\\n -archivePath ${MACOS_ARCHIVE_PATH} \\\n -destination 'generic/platform=macOS,name=Any Mac' \\\n BUILD_LIBRARY_FOR_DISTRIBUTION=YES \\\n SKIP_INSTALL=NO || exit $?\n \n# iOS simulator\nxcodebuild archive \\\n ONLY_ACTIVE_ARCH=NO \\\n -scheme \"${SCHEME}\" \\\n -project \"${PROJECT_NAME}.xcodeproj\" \\\n -archivePath ${IOS_SIMULATOR_ARCHIVE_PATH} \\\n -destination 'generic/platform=iOS Simulator' \\\n BUILD_LIBRARY_FOR_DISTRIBUTION=YES \\\n SKIP_INSTALL=NO || exit $?\n\n# iOS device\nxcodebuild archive \\\n -scheme \"${SCHEME}\" \\\n -project \"${PROJECT_NAME}.xcodeproj\" \\\n -archivePath ${IOS_DEVICE_ARCHIVE_PATH} \\\n -destination 'generic/platform=iOS' \\\n BUILD_LIBRARY_FOR_DISTRIBUTION=YES \\\n SKIP_INSTALL=NO || exit $?\n\n# tvOS simulator\nxcodebuild archive \\\n ONLY_ACTIVE_ARCH=NO \\\n -scheme \"${SCHEME}\" \\\n -project \"${PROJECT_NAME}.xcodeproj\" \\\n -archivePath ${TVOS_SIMULATOR_ARCHIVE_PATH} \\\n -destination 'generic/platform=tvOS Simulator' \\\n BUILD_LIBRARY_FOR_DISTRIBUTION=YES \\\n SKIP_INSTALL=NO || exit $?\n\n# tvOS device\nxcodebuild archive \\\n -scheme \"${SCHEME}\" \\\n -project \"${PROJECT_NAME}.xcodeproj\" \\\n -archivePath ${TVOS_DEVICE_ARCHIVE_PATH} \\\n -destination 'generic/platform=tvOS' \\\n BUILD_LIBRARY_FOR_DISTRIBUTION=YES \\\n SKIP_INSTALL=NO || exit $?\n\n# Clean-up any existing instance of this xcframework from the Products directory\nrm -rf \"${OUTPUT_DIR}${FRAMEWORK_NAME}.xcframework\"\n\n# Create final xcframework\nxcodebuild -create-xcframework \\\n -framework \"${MACOS_ARCHIVE_PATH}\"/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework \\\n -framework \"${IOS_DEVICE_ARCHIVE_PATH}\"/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework \\\n -framework \"${IOS_SIMULATOR_ARCHIVE_PATH}\"/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework \\\n -framework \"${TVOS_DEVICE_ARCHIVE_PATH}\"/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework \\\n -framework \"${TVOS_SIMULATOR_ARCHIVE_PATH}\"/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework \\\n -output ${OUTPUT_DIR}/${FRAMEWORK_NAME}.xcframework\n\n# Ensure git doesn't pick up on our Products folder. \nrm -rf ${OUTPUT_DIR}/.gitignore\necho \"*\" >> ${OUTPUT_DIR}/.gitignore\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + BECDF62C0761BA81005FE872 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A7D8B9E323E2514400DCD162 /* SDL_drawline.c in Sources */, + A7D8AE7C23E2514100DCD162 /* SDL_yuv.c in Sources */, + A7D8B62F23E2514300DCD162 /* SDL_sysfilesystem.m in Sources */, + A7D8BAC723E2514500DCD162 /* e_pow.c in Sources */, + A7D8B41C23E2514300DCD162 /* SDL_systls.c in Sources */, + 9846B07C287A9020000C35C8 /* SDL_hidapi_shield.c in Sources */, + A7D8BBD923E2574800DCD162 /* SDL_uikitmessagebox.m in Sources */, + F32DDAD42AB795A30041EAA5 /* SDL_audioresample.c in Sources */, + A7D8AD2923E2514100DCD162 /* SDL_vulkan_utils.c in Sources */, + A7D8A95123E2514000DCD162 /* SDL_spinlock.c in Sources */, + F34B9895291DEFF500AAC96E /* SDL_hidapi_steam.c in Sources */, + A7D8BAAF23E2514400DCD162 /* s_atan.c in Sources */, + A7D8B75223E2514300DCD162 /* SDL_sysloadso.c in Sources */, + A7D8BBE123E2574800DCD162 /* SDL_uikitopenglview.m in Sources */, + A7D8B98623E2514400DCD162 /* SDL_render_metal.m in Sources */, + A7D8AE7623E2514100DCD162 /* SDL_clipboard.c in Sources */, + A7D8AEC423E2514100DCD162 /* SDL_cocoaevents.m in Sources */, + A7D8B86623E2514400DCD162 /* SDL_audiocvt.c in Sources */, + A7D8B3AA23E2514200DCD162 /* SDL_shape.c in Sources */, + A7D8B9F523E2514400DCD162 /* SDL_rotate.c in Sources */, + A7D8BBE323E2574800DCD162 /* SDL_uikitvideo.m in Sources */, + 5616CA4E252BB2A6005D5928 /* SDL_sysurl.m in Sources */, + A7D8A97523E2514000DCD162 /* SDL_coremotionsensor.m in Sources */, + F382071D284F362F004DD584 /* SDL_guid.c in Sources */, + A7D8BB8D23E2514500DCD162 /* SDL_touch.c in Sources */, + F31A92D228D4CB39003BFD6A /* SDL_offscreenopengles.c in Sources */, + A1626A3E2617006A003F1973 /* SDL_triangle.c in Sources */, + A7D8B3F223E2514300DCD162 /* SDL_thread.c in Sources */, + A7D8B55D23E2514300DCD162 /* SDL_hidapi_xbox360w.c in Sources */, + A7D8A95723E2514000DCD162 /* SDL_atomic.c in Sources */, + A75FDBCE23EA380300529352 /* SDL_hidapi_rumble.c in Sources */, + A7D8BB2723E2514500DCD162 /* SDL_displayevents.c in Sources */, + A7D8AB2523E2514100DCD162 /* SDL_log.c in Sources */, + A7D8AE8823E2514100DCD162 /* SDL_cocoaopengl.m in Sources */, + A7D8AB7323E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */, + A7D8B3BF23E2514200DCD162 /* yuv_rgb.c in Sources */, + A7D8B43423E2514300DCD162 /* SDL_systhread.c in Sources */, + A7D8BB3323E2514500DCD162 /* SDL_windowevents.c in Sources */, + A7D8BABB23E2514400DCD162 /* s_scalbn.c in Sources */, + F3973FAB28A59BDD00B84553 /* SDL_crc16.c in Sources */, + A7D8AB2B23E2514100DCD162 /* SDL_timer.c in Sources */, + F3D60A8328C16A1900788A3A /* SDL_hidapi_wii.c in Sources */, + A7D8B9DD23E2514400DCD162 /* SDL_blendpoint.c in Sources */, + A7D8B4EE23E2514300DCD162 /* SDL_gamepad.c in Sources */, + A7D8AB3723E2514100DCD162 /* SDL_systimer.c in Sources */, + A7D8BA1323E2514400DCD162 /* SDL_render_sw.c in Sources */, + A7D8B42223E2514300DCD162 /* SDL_syssem.c in Sources */, + A7D8B53923E2514300DCD162 /* SDL_hidapi_xbox360.c in Sources */, + A7D8B8D223E2514400DCD162 /* SDL_coreaudio.m in Sources */, + A7D8BA1F23E2514400DCD162 /* SDL_blendline.c in Sources */, + A7D8BBE723E2574800DCD162 /* SDL_uikitviewcontroller.m in Sources */, + A7D8ADF223E2514100DCD162 /* SDL_blit_A.c in Sources */, + A7D8BBDD23E2574800DCD162 /* SDL_uikitmodes.m in Sources */, + A7D8BA3723E2514400DCD162 /* SDL_d3dmath.c in Sources */, + 75E0915A241EA924004729E1 /* SDL_virtualjoystick.c in Sources */, + A7D8ABEB23E2514100DCD162 /* SDL_nullvideo.c in Sources */, + F3990E072A78833C000D8759 /* hid.m in Sources */, + A7D8AB6723E2514100DCD162 /* SDL_offscreenevents.c in Sources */, + A7D8ABF123E2514100DCD162 /* SDL_nullevents.c in Sources */, + A7D8B81823E2514400DCD162 /* SDL_audiodev.c in Sources */, + A7D8AF0C23E2514100DCD162 /* SDL_cocoaclipboard.m in Sources */, + A7D8BBE523E2574800DCD162 /* SDL_uikitview.m in Sources */, + A7D8BBE923E2574800DCD162 /* SDL_uikitvulkan.m in Sources */, + A7D8ABCD23E2514100DCD162 /* SDL_blit_slow.c in Sources */, + A7D8BA9723E2514400DCD162 /* s_copysign.c in Sources */, + F3984CD025BCC92900374F43 /* SDL_hidapi_stadia.c in Sources */, + A7D8AAB623E2514100DCD162 /* SDL_haptic.c in Sources */, + A7D8AF2423E2514100DCD162 /* SDL_cocoametalview.m in Sources */, + A7D8B86023E2514400DCD162 /* SDL_audiotypecvt.c in Sources */, + A7D8BBC523E2561500DCD162 /* SDL_steamcontroller.c in Sources */, + A7D8AD3223E2514100DCD162 /* SDL_blit_N.c in Sources */, + A7D8BB7B23E2514500DCD162 /* SDL_dropevents.c in Sources */, + A7D8BACD23E2514500DCD162 /* e_atan2.c in Sources */, + A7D8BA8B23E2514400DCD162 /* s_sin.c in Sources */, + A7D8BBEB23E2574800DCD162 /* SDL_uikitwindow.m in Sources */, + F395BF6525633B2400942BFF /* SDL_crc32.c in Sources */, + A7D8B5E723E2514300DCD162 /* SDL_power.c in Sources */, + A7D8AED623E2514100DCD162 /* SDL_cocoakeyboard.m in Sources */, + A7D8AB1623E2514100DCD162 /* SDL_dynapi.c in Sources */, + A7D8BA8523E2514400DCD162 /* SDL_shaders_gl.c in Sources */, + A7D8BAF123E2514500DCD162 /* e_log.c in Sources */, + A7D8AED023E2514100DCD162 /* SDL_cocoamessagebox.m in Sources */, + F376F6552559B4E300CFC0BC /* SDL_hidapi.c in Sources */, + A7D8BA2B23E2514400DCD162 /* SDL_blendfillrect.c in Sources */, + A7D8AEE223E2514100DCD162 /* SDL_cocoashape.m in Sources */, + A7D8BBD323E2574800DCD162 /* SDL_uikitappdelegate.m in Sources */, + A7D8AEB823E2514100DCD162 /* SDL_cocoamouse.m in Sources */, + F32DDAD12AB795A30041EAA5 /* SDL_audioqueue.c in Sources */, + A7D8B8E423E2514400DCD162 /* SDL_error.c in Sources */, + A7D8AD6823E2514100DCD162 /* SDL_blit.c in Sources */, + A7D8B5BD23E2514300DCD162 /* SDL_rwops.c in Sources */, + A7D8BA9123E2514400DCD162 /* s_cos.c in Sources */, + A7D8B9D123E2514400DCD162 /* SDL_yuv_sw.c in Sources */, + A7D8B76A23E2514300DCD162 /* SDL_wave.c in Sources */, + 5616CA4C252BB2A6005D5928 /* SDL_url.c in Sources */, + A7D8BAD323E2514500DCD162 /* s_tan.c in Sources */, + A7D8AA6523E2514000DCD162 /* SDL_hints.c in Sources */, + A7D8B53F23E2514300DCD162 /* SDL_hidapi_ps4.c in Sources */, + A7D8AD6E23E2514100DCD162 /* SDL_pixels.c in Sources */, + A7D8B75E23E2514300DCD162 /* SDL_sysloadso.c in Sources */, + A7D8BBD723E2574800DCD162 /* SDL_uikitevents.m in Sources */, + A7D8B5F323E2514300DCD162 /* SDL_syspower.c in Sources */, + A7D8B95023E2514400DCD162 /* SDL_iconv.c in Sources */, + F3E5A6EB2AD5E0E600293D83 /* SDL_properties.c in Sources */, + A7D8BA9D23E2514400DCD162 /* s_fabs.c in Sources */, + F395C1B12569C6A000942BFF /* SDL_mfijoystick.m in Sources */, + A7D8B99223E2514400DCD162 /* SDL_shaders_metal.metal in Sources */, + F3990DF52A787C10000D8759 /* SDL_sysurl.m in Sources */, + A7D8B97A23E2514400DCD162 /* SDL_render.c in Sources */, + A7D8ABD323E2514100DCD162 /* SDL_stretch.c in Sources */, + A7D8BAFD23E2514500DCD162 /* s_floor.c in Sources */, + A7D8AC3923E2514100DCD162 /* SDL_blit_copy.c in Sources */, + A7D8BADF23E2514500DCD162 /* e_fmod.c in Sources */, + A7D8B5CF23E2514300DCD162 /* SDL_syspower.m in Sources */, + A7D8BAEB23E2514500DCD162 /* e_log10.c in Sources */, + A7D8B76423E2514300DCD162 /* SDL_mixer.c in Sources */, + A7D8BB5723E2514500DCD162 /* SDL_events.c in Sources */, + A7D8ADE623E2514100DCD162 /* SDL_blit_0.c in Sources */, + A7D8BB0923E2514500DCD162 /* k_tan.c in Sources */, + A7D8B8A823E2514400DCD162 /* SDL_diskaudio.c in Sources */, + 56A2373329F9C113003CCA5F /* SDL_sysrwlock.c in Sources */, + 566E26CF246274CC00718109 /* SDL_syslocale.m in Sources */, + A7D8AFC023E2514200DCD162 /* SDL_egl.c in Sources */, + A7D8AC3323E2514100DCD162 /* SDL_RLEaccel.c in Sources */, + A7D8BBB123E2514500DCD162 /* SDL_assert.c in Sources */, + A7D8B3DA23E2514300DCD162 /* SDL_bmp.c in Sources */, + A7D8B96E23E2514400DCD162 /* SDL_stdlib.c in Sources */, + A7D8BBDF23E2574800DCD162 /* SDL_uikitopengles.m in Sources */, + F32305FF28939F6400E66D30 /* SDL_hidapi_combined.c in Sources */, + A7D8B79A23E2514400DCD162 /* SDL_dummyaudio.c in Sources */, + A7D8B3A423E2514200DCD162 /* SDL_fillrect.c in Sources */, + A7D8ABDF23E2514100DCD162 /* SDL_nullframebuffer.c in Sources */, + E4F7981A2AD8D84800669F54 /* SDL_core_unsupported.c in Sources */, + A7D8A96923E2514000DCD162 /* SDL_dummysensor.c in Sources */, + A7D8B95C23E2514400DCD162 /* SDL_string.c in Sources */, + A7D8BA7F23E2514400DCD162 /* SDL_render_gl.c in Sources */, + A7D8AE9423E2514100DCD162 /* SDL_cocoamodes.m in Sources */, + A7D8BAA323E2514400DCD162 /* k_rem_pio2.c in Sources */, + A7D8B95623E2514400DCD162 /* SDL_getenv.c in Sources */, + A7D8B56323E2514300DCD162 /* SDL_hidapi_gamecube.c in Sources */, + A7D8B4DC23E2514300DCD162 /* SDL_joystick.c in Sources */, + A7D8BA4923E2514400DCD162 /* SDL_render_gles2.c in Sources */, + A7D8AC2D23E2514100DCD162 /* SDL_surface.c in Sources */, + A7D8B54B23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */, + A7D8AD2323E2514100DCD162 /* SDL_blit_auto.c in Sources */, + F3A4909E2554D38600E92A8B /* SDL_hidapi_ps5.c in Sources */, + A7D8BB6923E2514500DCD162 /* SDL_keyboard.c in Sources */, + A7D8ACE723E2514100DCD162 /* SDL_rect.c in Sources */, + A7D8AE9A23E2514100DCD162 /* SDL_cocoaopengles.m in Sources */, + A7D8B96823E2514400DCD162 /* SDL_qsort.c in Sources */, + A7D8B55123E2514300DCD162 /* SDL_hidapi_switch.c in Sources */, + A7D8B96223E2514400DCD162 /* SDL_strtokr.c in Sources */, + A7D8BB7523E2514500DCD162 /* SDL_clipboardevents.c in Sources */, + E4F798202AD8D87F00669F54 /* SDL_video_unsupported.c in Sources */, + A1BB8B6327F6CF330057CFA8 /* SDL_list.c in Sources */, + A7D8BAB523E2514400DCD162 /* k_cos.c in Sources */, + A7D8B54523E2514300DCD162 /* SDL_hidapijoystick.c in Sources */, + A7D8B97423E2514400DCD162 /* SDL_malloc.c in Sources */, + A7D8B8C623E2514400DCD162 /* SDL_audio.c in Sources */, + A7D8B61D23E2514300DCD162 /* SDL_sysfilesystem.c in Sources */, + F3820713284F3609004DD584 /* controller_type.c in Sources */, + A7D8AB8B23E2514100DCD162 /* SDL_offscreenvideo.c in Sources */, + A7D8B42E23E2514300DCD162 /* SDL_syscond.c in Sources */, + A7D8AADA23E2514100DCD162 /* SDL_syshaptic.c in Sources */, + A7D8BAE523E2514500DCD162 /* e_exp.c in Sources */, + A7D8BB8123E2514500DCD162 /* SDL_quit.c in Sources */, + A7D8AEA623E2514100DCD162 /* SDL_cocoawindow.m in Sources */, + A7D8B43A23E2514300DCD162 /* SDL_sysmutex.c in Sources */, + A7D8AAB023E2514100DCD162 /* SDL_syshaptic.c in Sources */, + F3F07D5A269640160074468B /* SDL_hidapi_luna.c in Sources */, + A7D8BBD523E2574800DCD162 /* SDL_uikitclipboard.m in Sources */, + A7D8B5C923E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */, + F386F6F92884663E001840AA /* SDL_utils.c in Sources */, + E4F7981E2AD8D86A00669F54 /* SDL_render_unsupported.c in Sources */, + A7D8AC0F23E2514100DCD162 /* SDL_video.c in Sources */, + A7D8BA5B23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */, + A7D8B14023E2514200DCD162 /* SDL_blit_1.c in Sources */, + A7D8BBDB23E2574800DCD162 /* SDL_uikitmetalview.m in Sources */, + A7D8BB1523E2514500DCD162 /* SDL_mouse.c in Sources */, + A7D8BAD923E2514500DCD162 /* e_rem_pio2.c in Sources */, + F395C19C2569C68F00942BFF /* SDL_iokitjoystick.c in Sources */, + A7D8B4B223E2514300DCD162 /* SDL_sysjoystick.c in Sources */, + A7D8B3E023E2514300DCD162 /* SDL_cpuinfo.c in Sources */, + A7D8A99323E2514000DCD162 /* SDL_sensor.c in Sources */, + A7D8BAA923E2514400DCD162 /* k_sin.c in Sources */, + A7D8AB4923E2514100DCD162 /* SDL_systimer.c in Sources */, + A7D8BA2523E2514400DCD162 /* SDL_drawpoint.c in Sources */, + F388C95528B5F6F700661ECF /* SDL_hidapi_ps3.c in Sources */, + A7D8BAF723E2514500DCD162 /* e_sqrt.c in Sources */, + F36C7AD1294BA009004D61C3 /* SDL_runapp.c in Sources */, + A7D8AEAC23E2514100DCD162 /* SDL_cocoavideo.m in Sources */, + A7D8A94B23E2514000DCD162 /* SDL.c in Sources */, + A7D8AEA023E2514100DCD162 /* SDL_cocoavulkan.m in Sources */, + A7D8AB6123E2514100DCD162 /* SDL_offscreenwindow.c in Sources */, + 566E26D8246274CC00718109 /* SDL_locale.c in Sources */, + 000040E76FDC6AE48CBF0000 /* SDL_hashtable.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + F3676F5D2A7885130091160D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F3B38CEC296F63B6005DA6D3 /* SDL3.xcframework */; + targetProxy = F3676F5C2A7885130091160D /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 00CFA621106A567900758660 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + DEPLOYMENT_POSTPROCESSING = YES; + DYLIB_COMPATIBILITY_VERSION = 1.0.0; + DYLIB_CURRENT_VERSION = 1.0.0; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_ALTIVEC_EXTENSIONS = YES; + GCC_AUTO_VECTORIZATION = YES; + GCC_ENABLE_SSE3_EXTENSIONS = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + ../../include, + ../../src, + ../../src/hidapi/hidapi, + ../../src/video/khronos, + "$(VULKAN_SDK)/include", + /usr/X11R6/include, + ); + INFOPLIST_FILE = "Info-Framework.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + MARKETING_VERSION = 3.0.0; + PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.SDL3; + PRODUCT_NAME = SDL3; + STRIP_STYLE = "non-global"; + SUPPORTED_PLATFORMS = "watchsimulator watchos macosx iphonesimulator iphoneos driverkit appletvsimulator appletvos"; + SUPPORTS_MACCATALYST = YES; + TVOS_DEPLOYMENT_TARGET = 9.0; + }; + name = Release; + }; + 00CFA622106A567900758660 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_LINK_OBJC_RUNTIME = NO; + OTHER_LDFLAGS = "-liconv"; + SUPPORTS_MACCATALYST = YES; + }; + name = Release; + }; + 00CFA627106A568900758660 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + DYLIB_COMPATIBILITY_VERSION = 1.0.0; + DYLIB_CURRENT_VERSION = 1.0.0; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_ALTIVEC_EXTENSIONS = YES; + GCC_AUTO_VECTORIZATION = YES; + GCC_ENABLE_SSE3_EXTENSIONS = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + ../../include, + ../../src, + ../../src/hidapi/hidapi, + ../../src/video/khronos, + "$(VULKAN_SDK)/include", + /usr/X11R6/include, + ); + INFOPLIST_FILE = "Info-Framework.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + MARKETING_VERSION = 3.0.0; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.SDL3; + PRODUCT_NAME = SDL3; + STRIP_INSTALLED_PRODUCT = NO; + SUPPORTED_PLATFORMS = "watchsimulator watchos macosx iphonesimulator iphoneos driverkit appletvsimulator appletvos"; + SUPPORTS_MACCATALYST = YES; + TVOS_DEPLOYMENT_TARGET = 9.0; + }; + name = Debug; + }; + 00CFA628106A568900758660 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_LINK_OBJC_RUNTIME = NO; + OTHER_LDFLAGS = "-liconv"; + SUPPORTS_MACCATALYST = YES; + }; + name = Debug; + }; + F3676F5A2A7885080091160D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Debug; + }; + F3676F5B2A7885080091160D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Release; + }; + F3B38CEE296F63B6005DA6D3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Debug; + }; + F3B38CEF296F63B6005DA6D3 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 0073177A0858DB0500B2BC32 /* Build configuration list for PBXNativeTarget "SDL3" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 00CFA628106A568900758660 /* Debug */, + 00CFA622106A567900758660 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 0073178E0858DB0500B2BC32 /* Build configuration list for PBXProject "SDL" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 00CFA627106A568900758660 /* Debug */, + 00CFA621106A567900758660 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + F3676F592A7885080091160D /* Build configuration list for PBXAggregateTarget "SDL3.dmg" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F3676F5A2A7885080091160D /* Debug */, + F3676F5B2A7885080091160D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + F3B38CED296F63B6005DA6D3 /* Build configuration list for PBXAggregateTarget "SDL3.xcframework" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F3B38CEE296F63B6005DA6D3 /* Debug */, + F3B38CEF296F63B6005DA6D3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = 0867D690FE84028FC02AAC07 /* Project object */; +} diff --git a/vendor/sdl-3.0.0/Xcode/SDL/SDL3/Info.plist b/vendor/sdl-3.0.0/Xcode/SDL/SDL3/Info.plist new file mode 100644 index 0000000..9bcb244 --- /dev/null +++ b/vendor/sdl-3.0.0/Xcode/SDL/SDL3/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/vendor/sdl-3.0.0/Xcode/SDL/pkg-support/SDL.info b/vendor/sdl-3.0.0/Xcode/SDL/pkg-support/SDL.info new file mode 100644 index 0000000..66ba170 --- /dev/null +++ b/vendor/sdl-3.0.0/Xcode/SDL/pkg-support/SDL.info @@ -0,0 +1,15 @@ +Title SDL 3.0.0 +Version 1 +Description SDL Library for macOS (http://www.libsdl.org) +DefaultLocation /Library/Frameworks +Diskname (null) +DeleteWarning +NeedsAuthorization NO +DisableStop NO +UseUserMask NO +Application NO +Relocatable YES +Required NO +InstallOnly NO +RequiresReboot NO +InstallFat NO diff --git a/vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/CMake/sdl3-config-version.cmake b/vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/CMake/sdl3-config-version.cmake new file mode 100644 index 0000000..6dbcf12 --- /dev/null +++ b/vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/CMake/sdl3-config-version.cmake @@ -0,0 +1,48 @@ +# based on the files generated by CMake's write_basic_package_version_file + +# SDL CMake version configuration file: +# This file is meant to be placed in Resources/CMake of a SDL3 framework + +if(NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/../../Headers/SDL_version.h") + message(AUTHOR_WARNING "Could not find SDL_version.h. This script is meant to be placed in the Resources/CMake directory of SDL3.framework") + return() +endif() + +file(READ "${CMAKE_CURRENT_LIST_DIR}/../../Headers/SDL_version.h" _sdl_version_h) +string(REGEX MATCH "#define[ \t]+SDL_MAJOR_VERSION[ \t]+([0-9]+)" _sdl_major_re "${_sdl_version_h}") +set(_sdl_major "${CMAKE_MATCH_1}") +string(REGEX MATCH "#define[ \t]+SDL_MINOR_VERSION[ \t]+([0-9]+)" _sdl_minor_re "${_sdl_version_h}") +set(_sdl_minor "${CMAKE_MATCH_1}") +string(REGEX MATCH "#define[ \t]+SDL_PATCHLEVEL[ \t]+([0-9]+)" _sdl_patch_re "${_sdl_version_h}") +set(_sdl_patch "${CMAKE_MATCH_1}") +if(_sdl_major_re AND _sdl_minor_re AND _sdl_patch_re) + set(PACKAGE_VERSION "${_sdl_major}.${_sdl_minor}.${_sdl_patch}") +else() + message(AUTHOR_WARNING "Could not extract version from SDL_version.h.") + return() +endif() + +if(PACKAGE_FIND_VERSION_RANGE) + # Package version must be in the requested version range + if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN) + OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX))) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + endif() +else() + if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() + endif() +endif() + +# if the using project doesn't have CMAKE_SIZEOF_VOID_P set, fail. +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/CMake/sdl3-config.cmake b/vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/CMake/sdl3-config.cmake new file mode 100644 index 0000000..5a4e7b4 --- /dev/null +++ b/vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/CMake/sdl3-config.cmake @@ -0,0 +1,104 @@ +# SDL CMake configuration file: +# This file is meant to be placed in Resources/CMake of a SDL3 framework + +# INTERFACE_LINK_OPTIONS needs CMake 3.12 +cmake_minimum_required(VERSION 3.12) + +include(FeatureSummary) +set_package_properties(SDL3 PROPERTIES + URL "https://www.libsdl.org/" + DESCRIPTION "low level access to audio, keyboard, mouse, joystick, and graphics hardware" +) + +# Copied from `configure_package_config_file` +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +# Copied from `configure_package_config_file` +macro(check_required_components _NAME) + foreach(comp ${${_NAME}_FIND_COMPONENTS}) + if(NOT ${_NAME}_${comp}_FOUND) + if(${_NAME}_FIND_REQUIRED_${comp}) + set(${_NAME}_FOUND FALSE) + endif() + endif() + endforeach() +endmacro() + +set(SDL3_FOUND TRUE) + +# Compute the installation prefix relative to this file. +get_filename_component(_sdl3_framework_path "${CMAKE_CURRENT_LIST_FILE}" PATH) # /SDL3.framework/Resources/CMake/ +get_filename_component(_sdl3_framework_path "${_IMPORT_PREFIX}" PATH) # /SDL3.framework/Resources/ +get_filename_component(_sdl3_framework_path "${_IMPORT_PREFIX}" PATH) # /SDL3.framework/ +get_filename_component(_sdl3_framework_parent_path "${_sdl3_framework_path}" PATH) # / + +set_and_check(_sdl3_include_dirs "${_sdl3_framework_path}/Headers") + +set(SDL3_LIBRARIES "SDL3::SDL3") + +# All targets are created, even when some might not be requested though COMPONENTS. +# This is done for compatibility with CMake generated SDL3-target.cmake files. + +if(NOT TARGET SDL3::Headers) + add_library(SDL3::Headers INTERFACE IMPORTED) + set_target_properties(SDL3::Headers + PROPERTIES + INTERFACE_COMPILE_OPTIONS "SHELL:-F \"${_sdl3_framework_parent_path}\"" + INTERFACE_INCLUDE_DIRECTORIES "${_sdl3_include_dirs}" + ) +endif() +set(SDL3_Headers_FOUND TRUE) +unset(_sdl3_include_dirs) + +if(NOT TARGET SDL3::SDL3-shared) + add_library(SDL3::SDL3-shared SHARED IMPORTED) + set_target_properties(SDL3::SDL3-shared + PROPERTIES + FRAMEWORK "TRUE" + INTERFACE_LINK_LIBRARIES "SDL3::Headers" + IMPORTED_LOCATION "${_sdl3_framework_path}/SDL3" + IMPORTED_SONAME "${_sdl3_framework_path}/SDL3" + COMPATIBLE_INTERFACE_BOOL "SDL3_SHARED" + INTERFACE_SDL3_SHARED "ON" + COMPATIBLE_INTERFACE_STRING "SDL_VERSION" + INTERFACE_SDL_VERSION "SDL3" + ) +endif() +set(SDL3_SDL3-shared_FOUND TRUE) + +set(SDL3_SDL3-static FALSE) + +set(SDL3_SDL3_test FALSE) + +unset(_sdl3_framework_parent_path) +unset(_sdl3_framework_path) + +if(SDL3_SDL3-shared_FOUND OR SDL3_SDL3-static_FOUND) + set(SDL3_SDL3_FOUND TRUE) +endif() + +function(_sdl_create_target_alias_compat NEW_TARGET TARGET) + if(CMAKE_VERSION VERSION_LESS "3.18") + # Aliasing local targets is not supported on CMake < 3.18, so make it global. + add_library(${NEW_TARGET} INTERFACE IMPORTED) + set_target_properties(${NEW_TARGET} PROPERTIES INTERFACE_LINK_LIBRARIES "${TARGET}") + else() + add_library(${NEW_TARGET} ALIAS ${TARGET}) + endif() +endfunction() + +# Make sure SDL3::SDL3 always exists +if(NOT TARGET SDL3::SDL3) + if(TARGET SDL3::SDL3-shared) + _sdl_create_target_alias_compat(SDL3::SDL3 SDL3::SDL3-shared) + else() + _sdl_create_target_alias_compat(SDL3::SDL3 SDL3::SDL3-static) + endif() +endif() + +check_required_components(SDL3) diff --git a/vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/License.txt b/vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/License.txt new file mode 100644 index 0000000..523c51e --- /dev/null +++ b/vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/License.txt @@ -0,0 +1,19 @@ + +Simple DirectMedia Layer +Copyright (C) 1997-2023 Sam Lantinga + +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/vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/ReadMe.txt b/vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/ReadMe.txt new file mode 100644 index 0000000..2713088 --- /dev/null +++ b/vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/ReadMe.txt @@ -0,0 +1,44 @@ +The Simple DirectMedia Layer (SDL for short) is a cross-platform +library designed to make it easy to write multi-media software, +such as games and emulators. + +The Simple DirectMedia Layer library source code is available from: +http://www.libsdl.org/ + +This library is distributed under the terms of the zlib license: +http://zlib.net/zlib_license.html + + +This packages contains the SDL framework for macOS. +Conforming with Apple guidelines, this framework +contains both the SDL runtime component and development header files. + + +To Install: +Copy the SDL3.framework to /Library/Frameworks + +You may alternatively install it in /Library/Frameworks +if your access privileges are not high enough. + + +Use in CMake projects: +SDL3.framework can be used in CMake projects using the following pattern: +``` +find_package(SDL3 REQUIRED COMPONENTS SDL3) +add_executable(my_game ${MY_SOURCES}) +target_link_libraries(my_game PRIVATE SDL3::SDL3) +``` +If SDL3.framework is installed in a non-standard location, +please refer to the following link for ways to configure CMake: +https://cmake.org/cmake/help/latest/command/find_package.html#config-mode-search-procedure + + +Additional References: + + - Screencast tutorials for getting started with OpenSceneGraph/macOS are + available at: + http://www.openscenegraph.org/projects/osg/wiki/Support/Tutorials/MacOSXTips + Though these are OpenSceneGraph centric, the same exact concepts apply to + SDL, thus the videos are recommended for everybody getting started with + developing on macOS. (You can skim over the PlugIns stuff since SDL + doesn't have any PlugIns to worry about.) diff --git a/vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/SDL_DS_Store b/vendor/sdl-3.0.0/Xcode/SDL/pkg-support/resources/SDL_DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..15519334371b712cc92952247564dbf6835bc7da GIT binary patch literal 10244 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 tEoYq39Hd|Co#requ7Ty+ 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�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 K{S$ATfB8RpYXpJ- literal 0 HcmV?d00001 diff --git a/vendor/sdl-3.0.0/Xcode/SDLTest/SDLTest.xcodeproj/project.pbxproj b/vendor/sdl-3.0.0/Xcode/SDLTest/SDLTest.xcodeproj/project.pbxproj new file mode 100644 index 0000000..2642bca --- /dev/null +++ b/vendor/sdl-3.0.0/Xcode/SDLTest/SDLTest.xcodeproj/project.pbxproj @@ -0,0 +1,5069 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 52; + objects = { + +/* Begin PBXAggregateTarget section */ + BEC566920761D90300A33029 /* All */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 001B599808BDB826006539E9 /* Build configuration list for PBXAggregateTarget "All" */; + buildPhases = ( + ); + dependencies = ( + F3E1F8032A78C3C500AC76D3 /* PBXTargetDependency */, + F3E1F8012A78C3BE00AC76D3 /* PBXTargetDependency */, + F3E1F7FF2A78C3AD00AC76D3 /* PBXTargetDependency */, + F35E56E72983133F00A43A5F /* PBXTargetDependency */, + DB0F490517CA5249008798C5 /* PBXTargetDependency */, + DB0F490717CA5249008798C5 /* PBXTargetDependency */, + DB166E9816A1D7CF00A1396C /* PBXTargetDependency */, + DB166E9616A1D7CD00A1396C /* PBXTargetDependency */, + DB166E6C16A1D72000A1396C /* PBXTargetDependency */, + DB166E5616A1D6B800A1396C /* PBXTargetDependency */, + DB166E3B16A1D65A00A1396C /* PBXTargetDependency */, + DB166E2016A1D5D000A1396C /* PBXTargetDependency */, + DB166E0916A1D5A400A1396C /* PBXTargetDependency */, + DB166DF216A1D53700A1396C /* PBXTargetDependency */, + DB166DD916A1D38900A1396C /* PBXTargetDependency */, + 001799481074403E00F5D044 /* PBXTargetDependency */, + 0017994C1074403E00F5D044 /* PBXTargetDependency */, + 001799501074403E00F5D044 /* PBXTargetDependency */, + 001799521074403E00F5D044 /* PBXTargetDependency */, + 0017995A1074403E00F5D044 /* PBXTargetDependency */, + 0017995E1074403E00F5D044 /* PBXTargetDependency */, + 001799601074403E00F5D044 /* PBXTargetDependency */, + 001799661074403E00F5D044 /* PBXTargetDependency */, + 001799681074403E00F5D044 /* PBXTargetDependency */, + 0017996A1074403E00F5D044 /* PBXTargetDependency */, + 0017996C1074403E00F5D044 /* PBXTargetDependency */, + 0017996E1074403E00F5D044 /* PBXTargetDependency */, + 001799701074403E00F5D044 /* PBXTargetDependency */, + 001799741074403E00F5D044 /* PBXTargetDependency */, + 001799761074403E00F5D044 /* PBXTargetDependency */, + 001799781074403E00F5D044 /* PBXTargetDependency */, + 0017997C1074403E00F5D044 /* PBXTargetDependency */, + 001799801074403E00F5D044 /* PBXTargetDependency */, + 001799841074403E00F5D044 /* PBXTargetDependency */, + 001799881074403E00F5D044 /* PBXTargetDependency */, + 0017998A1074403E00F5D044 /* PBXTargetDependency */, + 0017998C1074403E00F5D044 /* PBXTargetDependency */, + 0017998E1074403E00F5D044 /* PBXTargetDependency */, + 001799921074403E00F5D044 /* PBXTargetDependency */, + 001799941074403E00F5D044 /* PBXTargetDependency */, + 001799961074403E00F5D044 /* PBXTargetDependency */, + 0017999E1074403E00F5D044 /* PBXTargetDependency */, + 001799A21074403E00F5D044 /* PBXTargetDependency */, + DB166D7016A1CEAF00A1396C /* PBXTargetDependency */, + DB166D6E16A1CEAA00A1396C /* PBXTargetDependency */, + ); + name = All; + productName = "Build All"; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 001795901074216E00F5D044 /* testatomic.c in Sources */ = {isa = PBXBuildFile; fileRef = 0017958F1074216E00F5D044 /* testatomic.c */; }; + 001795B11074222D00F5D044 /* testaudioinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = 001795B01074222D00F5D044 /* testaudioinfo.c */; }; + 0017972810742FB900F5D044 /* testgl.c in Sources */ = {isa = PBXBuildFile; fileRef = 0017972710742FB900F5D044 /* testgl.c */; }; + 0017974F1074315700F5D044 /* testhaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = 0017974E1074315700F5D044 /* testhaptic.c */; }; + 001797721074320D00F5D044 /* testdraw.c in Sources */ = {isa = PBXBuildFile; fileRef = 001797711074320D00F5D044 /* testdraw.c */; }; + 00179792107432FA00F5D044 /* testime.c in Sources */ = {isa = PBXBuildFile; fileRef = 00179791107432FA00F5D044 /* testime.c */; }; + 001797B41074339C00F5D044 /* testintersections.c in Sources */ = {isa = PBXBuildFile; fileRef = 001797B31074339C00F5D044 /* testintersections.c */; }; + 001797D41074343E00F5D044 /* testloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = 001797D31074343E00F5D044 /* testloadso.c */; }; + 001798161074359B00F5D044 /* testmultiaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = 001798151074359B00F5D044 /* testmultiaudio.c */; }; + 0017987F1074392D00F5D044 /* testnative.c in Sources */ = {isa = PBXBuildFile; fileRef = 0017985A107436ED00F5D044 /* testnative.c */; }; + 001798801074392D00F5D044 /* testnativecocoa.m in Sources */ = {isa = PBXBuildFile; fileRef = 0017985C107436ED00F5D044 /* testnativecocoa.m */; }; + 001798BA10743A4900F5D044 /* testpower.c in Sources */ = {isa = PBXBuildFile; fileRef = 001798B910743A4900F5D044 /* testpower.c */; }; + 001798FA10743E9200F5D044 /* testresample.c in Sources */ = {isa = PBXBuildFile; fileRef = 001798F910743E9200F5D044 /* testresample.c */; }; + 0017991A10743F5300F5D044 /* testsprite.c in Sources */ = {isa = PBXBuildFile; fileRef = 0017991910743F5300F5D044 /* testsprite.c */; }; + 0017993C10743FEF00F5D044 /* testwm.c in Sources */ = {isa = PBXBuildFile; fileRef = 0017993B10743FEF00F5D044 /* testwm.c */; }; + 002F341809CA1C5B00EBEB88 /* testfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 002F341709CA1C5B00EBEB88 /* testfile.c */; }; + 002F343709CA1F6F00EBEB88 /* testiconv.c in Sources */ = {isa = PBXBuildFile; fileRef = 002F343609CA1F6F00EBEB88 /* testiconv.c */; }; + 002F345409CA202000EBEB88 /* testoverlay.c in Sources */ = {isa = PBXBuildFile; fileRef = 002F345209CA201C00EBEB88 /* testoverlay.c */; }; + 002F347009CA20A600EBEB88 /* testplatform.c in Sources */ = {isa = PBXBuildFile; fileRef = 002F346F09CA20A600EBEB88 /* testplatform.c */; }; + 00794E6609D20865003FC8A1 /* sample.wav in CopyFiles */ = {isa = PBXBuildFile; fileRef = 00794E6209D20839003FC8A1 /* sample.wav */; }; + 00794EF009D23739003FC8A1 /* utf8.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 00794E6309D20839003FC8A1 /* utf8.txt */; }; + 00794EF709D237DE003FC8A1 /* moose.dat in CopyFiles */ = {isa = PBXBuildFile; fileRef = 00794E5E09D20839003FC8A1 /* moose.dat */; }; + 453774A5120915E3002F0F45 /* testshape.c in Sources */ = {isa = PBXBuildFile; fileRef = 453774A4120915E3002F0F45 /* testshape.c */; }; + 66E88E8B203B778F0004D44E /* testyuv_cvt.c in Sources */ = {isa = PBXBuildFile; fileRef = 66E88E8A203B778F0004D44E /* testyuv_cvt.c */; }; + AAF02FFA1F90092700B9A9FB /* SDL_test_memory.c in Sources */ = {isa = PBXBuildFile; fileRef = AAF02FF41F90089800B9A9FB /* SDL_test_memory.c */; }; + BBFC08D0164C6876003E6A99 /* testcontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = BBFC088E164C6820003E6A99 /* testcontroller.c */; }; + BEC566B10761D90300A33029 /* checkkeys.c in Sources */ = {isa = PBXBuildFile; fileRef = 092D6D10FFB30A2C7F000001 /* checkkeys.c */; }; + BEC566CB0761D90300A33029 /* loopwave.c in Sources */ = {isa = PBXBuildFile; fileRef = 083E4872006D84C97F000001 /* loopwave.c */; }; + BEC567010761D90300A33029 /* testerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 083E4878006D85357F000001 /* testerror.c */; }; + BEC567290761D90400A33029 /* testthread.c in Sources */ = {isa = PBXBuildFile; fileRef = 092D6D58FFB311A97F000001 /* testthread.c */; }; + BEC567430761D90400A33029 /* testkeys.c in Sources */ = {isa = PBXBuildFile; fileRef = 092D6D6CFFB313437F000001 /* testkeys.c */; }; + BEC567500761D90400A33029 /* testlock.c in Sources */ = {isa = PBXBuildFile; fileRef = 092D6D75FFB313BB7F000001 /* testlock.c */; }; + BEC567780761D90500A33029 /* testsem.c in Sources */ = {isa = PBXBuildFile; fileRef = 083E487E006D86A17F000001 /* testsem.c */; }; + BEC567930761D90500A33029 /* testtimer.c in Sources */ = {isa = PBXBuildFile; fileRef = 083E4880006D86A17F000001 /* testtimer.c */; }; + BEC567AD0761D90500A33029 /* testver.c in Sources */ = {isa = PBXBuildFile; fileRef = 083E4882006D86A17F000001 /* testver.c */; }; + BEC567F00761D90600A33029 /* torturethread.c in Sources */ = {isa = PBXBuildFile; fileRef = 083E4887006D86A17F000001 /* torturethread.c */; }; + DB0F48EE17CA51F8008798C5 /* testdrawchessboard.c in Sources */ = {isa = PBXBuildFile; fileRef = DB0F48D717CA51D2008798C5 /* testdrawchessboard.c */; }; + DB0F490317CA5225008798C5 /* testfilesystem.c in Sources */ = {isa = PBXBuildFile; fileRef = DB0F48D817CA51D2008798C5 /* testfilesystem.c */; }; + DB166D9316A1D1A500A1396C /* SDL_test_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166D8416A1D1A500A1396C /* SDL_test_assert.c */; }; + DB166D9416A1D1A500A1396C /* SDL_test_common.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166D8516A1D1A500A1396C /* SDL_test_common.c */; }; + DB166D9516A1D1A500A1396C /* SDL_test_compare.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166D8616A1D1A500A1396C /* SDL_test_compare.c */; }; + DB166D9616A1D1A500A1396C /* SDL_test_crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166D8716A1D1A500A1396C /* SDL_test_crc32.c */; }; + DB166D9716A1D1A500A1396C /* SDL_test_font.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166D8816A1D1A500A1396C /* SDL_test_font.c */; }; + DB166D9816A1D1A500A1396C /* SDL_test_fuzzer.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166D8916A1D1A500A1396C /* SDL_test_fuzzer.c */; }; + DB166D9916A1D1A500A1396C /* SDL_test_harness.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166D8A16A1D1A500A1396C /* SDL_test_harness.c */; }; + DB166D9F16A1D1A500A1396C /* SDL_test_log.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166D9016A1D1A500A1396C /* SDL_test_log.c */; }; + DB166DA016A1D1A500A1396C /* SDL_test_md5.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166D9116A1D1A500A1396C /* SDL_test_md5.c */; }; + DB166DA116A1D1A500A1396C /* SDL_test_random.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166D9216A1D1A500A1396C /* SDL_test_random.c */; }; + DB166DD716A1D37800A1396C /* testmessage.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166CBD16A1C74100A1396C /* testmessage.c */; }; + DB166DDB16A1D42F00A1396C /* icon.bmp in CopyFiles */ = {isa = PBXBuildFile; fileRef = 00794E5D09D20839003FC8A1 /* icon.bmp */; }; + DB166DF016A1D52500A1396C /* testrelative.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166CBF16A1C74100A1396C /* testrelative.c */; }; + DB166E0716A1D59400A1396C /* testrendercopyex.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166CC016A1C74100A1396C /* testrendercopyex.c */; }; + DB166E1E16A1D5C300A1396C /* testrendertarget.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166CC116A1C74100A1396C /* testrendertarget.c */; }; + DB166E2216A1D5EC00A1396C /* sample.bmp in CopyFiles */ = {isa = PBXBuildFile; fileRef = 00794E6109D20839003FC8A1 /* sample.bmp */; }; + DB166E2316A1D60B00A1396C /* icon.bmp in CopyFiles */ = {isa = PBXBuildFile; fileRef = 00794E5D09D20839003FC8A1 /* icon.bmp */; }; + DB166E2516A1D61900A1396C /* icon.bmp in CopyFiles */ = {isa = PBXBuildFile; fileRef = 00794E5D09D20839003FC8A1 /* icon.bmp */; }; + DB166E2616A1D61900A1396C /* sample.bmp in CopyFiles */ = {isa = PBXBuildFile; fileRef = 00794E6109D20839003FC8A1 /* sample.bmp */; }; + DB166E3C16A1D66500A1396C /* testrumble.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166CC216A1C74100A1396C /* testrumble.c */; }; + DB166E4D16A1D69000A1396C /* icon.bmp in CopyFiles */ = {isa = PBXBuildFile; fileRef = 00794E5D09D20839003FC8A1 /* icon.bmp */; }; + DB166E4E16A1D69000A1396C /* sample.bmp in CopyFiles */ = {isa = PBXBuildFile; fileRef = 00794E6109D20839003FC8A1 /* sample.bmp */; }; + DB166E5416A1D6A300A1396C /* testscale.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166CC316A1C74100A1396C /* testscale.c */; }; + DB166E6A16A1D70C00A1396C /* testshader.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166CC416A1C74100A1396C /* testshader.c */; }; + DB166E9316A1D7BC00A1396C /* testspriteminimal.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166CC516A1C74100A1396C /* testspriteminimal.c */; }; + DB166E9416A1D7C700A1396C /* teststreaming.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166CC616A1C74100A1396C /* teststreaming.c */; }; + DB166E9A16A1D7F700A1396C /* moose.dat in CopyFiles */ = {isa = PBXBuildFile; fileRef = 00794E5E09D20839003FC8A1 /* moose.dat */; }; + DB166E9C16A1D80900A1396C /* icon.bmp in CopyFiles */ = {isa = PBXBuildFile; fileRef = 00794E5D09D20839003FC8A1 /* icon.bmp */; }; + DB166ED016A1D88100A1396C /* shapes in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB166ECF16A1D87000A1396C /* shapes */; }; + DB445EFB18184BB600B306B0 /* testdropfile.c in Sources */ = {isa = PBXBuildFile; fileRef = DB445EFA18184BB600B306B0 /* testdropfile.c */; }; + DB89958418A19B130092407C /* testhotplug.c in Sources */ = {isa = PBXBuildFile; fileRef = DB89958318A19B130092407C /* testhotplug.c */; }; + F35E56CF2983130F00A43A5F /* testautomation_main.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56B62983130A00A43A5F /* testautomation_main.c */; }; + F35E56D02983130F00A43A5F /* testautomation_hints.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56B72983130A00A43A5F /* testautomation_hints.c */; }; + F35E56D12983130F00A43A5F /* testautomation_render.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56B82983130A00A43A5F /* testautomation_render.c */; }; + F35E56D22983130F00A43A5F /* testautomation_rwops.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56B92983130B00A43A5F /* testautomation_rwops.c */; }; + F35E56D32983130F00A43A5F /* testautomation_math.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56BA2983130B00A43A5F /* testautomation_math.c */; }; + F35E56D42983130F00A43A5F /* testautomation_events.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56BB2983130B00A43A5F /* testautomation_events.c */; }; + F35E56D52983130F00A43A5F /* testautomation_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56BC2983130B00A43A5F /* testautomation_clipboard.c */; }; + F35E56D62983130F00A43A5F /* testautomation_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56BD2983130B00A43A5F /* testautomation_timer.c */; }; + F35E56D72983130F00A43A5F /* testautomation_stdlib.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56BE2983130C00A43A5F /* testautomation_stdlib.c */; }; + F35E56D82983130F00A43A5F /* testautomation_images.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56BF2983130C00A43A5F /* testautomation_images.c */; }; + F35E56D92983130F00A43A5F /* testautomation_pixels.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56C02983130C00A43A5F /* testautomation_pixels.c */; }; + F35E56DA2983130F00A43A5F /* testautomation_video.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56C12983130C00A43A5F /* testautomation_video.c */; }; + F35E56DB2983130F00A43A5F /* testautomation_platform.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56C32983130D00A43A5F /* testautomation_platform.c */; }; + F35E56DC2983130F00A43A5F /* testautomation_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56C42983130D00A43A5F /* testautomation_audio.c */; }; + F35E56DD2983130F00A43A5F /* testautomation_rect.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56C52983130D00A43A5F /* testautomation_rect.c */; }; + F35E56DE2983130F00A43A5F /* testautomation_joystick.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56C62983130D00A43A5F /* testautomation_joystick.c */; }; + F35E56DF2983130F00A43A5F /* testautomation_keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56C72983130E00A43A5F /* testautomation_keyboard.c */; }; + F35E56E02983130F00A43A5F /* testautomation_sdltest.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56C82983130E00A43A5F /* testautomation_sdltest.c */; }; + F35E56E12983130F00A43A5F /* testautomation_guid.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56C92983130E00A43A5F /* testautomation_guid.c */; }; + F35E56E22983130F00A43A5F /* testautomation_syswm.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56CA2983130E00A43A5F /* testautomation_syswm.c */; }; + F35E56E32983130F00A43A5F /* testautomation_surface.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56CB2983130F00A43A5F /* testautomation_surface.c */; }; + F35E56E42983130F00A43A5F /* testautomation.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56CC2983130F00A43A5F /* testautomation.c */; }; + F35E56E52983130F00A43A5F /* testautomation_mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = F35E56CD2983130F00A43A5F /* testautomation_mouse.c */; }; + F399C64E2A78929400C86979 /* gamepadutils.c in Sources */ = {isa = PBXBuildFile; fileRef = F399C6492A78929400C86979 /* gamepadutils.c */; }; + F399C64F2A78929400C86979 /* gamepadutils.c in Sources */ = {isa = PBXBuildFile; fileRef = F399C6492A78929400C86979 /* gamepadutils.c */; }; + F399C6512A7892D800C86979 /* testautomation_intrinsics.c in Sources */ = {isa = PBXBuildFile; fileRef = F399C6502A7892D800C86979 /* testautomation_intrinsics.c */; }; + F399C6522A7892D800C86979 /* testautomation_intrinsics.c in Sources */ = {isa = PBXBuildFile; fileRef = F399C6502A7892D800C86979 /* testautomation_intrinsics.c */; }; + F399C6552A78933100C86979 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F399C6542A78933000C86979 /* Cocoa.framework */; }; + F3C17C7728E40BC800E1A26D /* testutils.c in Sources */ = {isa = PBXBuildFile; fileRef = F3C17C7328E40ADE00E1A26D /* testutils.c */; }; + F3C17C7928E40C6E00E1A26D /* testutils.c in Sources */ = {isa = PBXBuildFile; fileRef = F3C17C7328E40ADE00E1A26D /* testutils.c */; }; + F3C17C7B28E40D4E00E1A26D /* testutils.c in Sources */ = {isa = PBXBuildFile; fileRef = F3C17C7328E40ADE00E1A26D /* testutils.c */; }; + F3C17C7C28E40D7400E1A26D /* testutils.c in Sources */ = {isa = PBXBuildFile; fileRef = F3C17C7328E40ADE00E1A26D /* testutils.c */; }; + F3C17C7D28E40F9D00E1A26D /* testutils.c in Sources */ = {isa = PBXBuildFile; fileRef = F3C17C7328E40ADE00E1A26D /* testutils.c */; }; + F3C17C7E28E40FDD00E1A26D /* testutils.c in Sources */ = {isa = PBXBuildFile; fileRef = F3C17C7328E40ADE00E1A26D /* testutils.c */; }; + F3C17C7F28E4101000E1A26D /* testutils.c in Sources */ = {isa = PBXBuildFile; fileRef = F3C17C7328E40ADE00E1A26D /* testutils.c */; }; + F3C17C8028E410A400E1A26D /* testutils.c in Sources */ = {isa = PBXBuildFile; fileRef = F3C17C7328E40ADE00E1A26D /* testutils.c */; }; + F3C17C8128E410C900E1A26D /* testutils.c in Sources */ = {isa = PBXBuildFile; fileRef = F3C17C7328E40ADE00E1A26D /* testutils.c */; }; + F3C17C8228E4112900E1A26D /* testutils.c in Sources */ = {isa = PBXBuildFile; fileRef = F3C17C7328E40ADE00E1A26D /* testutils.c */; }; + F3C17C8328E4124400E1A26D /* testutils.c in Sources */ = {isa = PBXBuildFile; fileRef = F3C17C7328E40ADE00E1A26D /* testutils.c */; }; + F3C17C8428E4126400E1A26D /* testutils.c in Sources */ = {isa = PBXBuildFile; fileRef = F3C17C7328E40ADE00E1A26D /* testutils.c */; }; + F3C17C8528E4127D00E1A26D /* testutils.c in Sources */ = {isa = PBXBuildFile; fileRef = F3C17C7328E40ADE00E1A26D /* testutils.c */; }; + F3C17CEB28E4177600E1A26D /* testgeometry.c in Sources */ = {isa = PBXBuildFile; fileRef = F3C17CD628E416AC00E1A26D /* testgeometry.c */; }; + F3C17CEC28E417EB00E1A26D /* testutils.c in Sources */ = {isa = PBXBuildFile; fileRef = F3C17C7328E40ADE00E1A26D /* testutils.c */; }; + F3C17D3928E424B800E1A26D /* sample.wav in Resources */ = {isa = PBXBuildFile; fileRef = 00794E6209D20839003FC8A1 /* sample.wav */; }; + F3C17D3B28E4252900E1A26D /* icon.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 00794E5D09D20839003FC8A1 /* icon.bmp */; }; + F3CB56892A7895F800766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB568A2A7895F800766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB568C2A7896BF00766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB568D2A7896BF00766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56902A7896F900766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56912A7896F900766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56932A78971600766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56942A78971600766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56962A78971F00766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56972A78971F00766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56992A78972700766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB569A2A78972700766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB569C2A78972F00766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB569D2A78972F00766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB569F2A78973700766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56A02A78973700766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56A22A78974000766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56A32A78974000766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56A52A78974800766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56A62A78974800766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56A82A78975100766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56A92A78975100766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56AB2A78975A00766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56AC2A78975A00766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56AE2A78976200766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56AF2A78976200766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56B12A78976800766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56B22A78976800766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56B42A78977000766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56B52A78977000766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56B72A78977D00766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56B82A78977D00766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56BA2A78978700766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56BB2A78978700766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56BD2A78979000766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56BE2A78979000766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56C02A78979600766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56C12A78979600766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56C32A78979C00766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56C42A78979C00766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56C62A7897A500766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56C72A7897A500766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56C92A7897AE00766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56CA2A7897AE00766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56CC2A7897B500766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56CD2A7897B500766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56CF2A7897BE00766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56D02A7897BE00766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56D22A7897C600766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56D32A7897C600766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56D52A7897CD00766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56D62A7897CD00766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56D92A7897E200766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56DA2A7897E200766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56DC2A7897E900766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56DD2A7897E900766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56DF2A7897F000766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56E02A7897F000766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56E22A7897F800766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56E32A7897F800766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56E52A7897FE00766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56E62A7897FE00766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56E82A78980600766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56E92A78980600766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56EB2A78980D00766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56EC2A78980D00766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56EE2A78981500766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56EF2A78981500766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56F12A78981C00766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56F22A78981C00766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56F42A78982300766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56F52A78982300766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56F72A78982B00766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56F82A78982B00766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56FA2A78983200766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56FB2A78983200766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB56FD2A78983C00766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB56FE2A78983C00766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB57002A78984300766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB57012A78984300766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB57032A78984A00766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB57042A78984A00766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB57062A78985400766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB57072A78985400766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB57092A78985A00766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB570A2A78985A00766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB570C2A78986000766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB570D2A78986000766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F3CB570F2A78986700766177 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; }; + F3CB57102A78986700766177 /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA643093FFD41000C53B3 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 001799471074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = BEC566AB0761D90300A33029; + remoteInfo = checkkeys; + }; + 0017994B1074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = BEC566C50761D90300A33029; + remoteInfo = loopwave; + }; + 0017994F1074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0017957410741F7900F5D044; + remoteInfo = testatomic; + }; + 001799511074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 00179595107421BF00F5D044; + remoteInfo = testaudioinfo; + }; + 001799591074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 00179756107431B300F5D044; + remoteInfo = testdraw; + }; + 0017995D1074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = BEC566FB0761D90300A33029; + remoteInfo = testerror; + }; + 0017995F1074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 002F340109CA1BFF00EBEB88; + remoteInfo = testfile; + }; + 001799651074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0017970910742F3200F5D044; + remoteInfo = testgl; + }; + 001799671074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 00179730107430D600F5D044; + remoteInfo = testhaptic; + }; + 001799691074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = BEC567230761D90400A33029; + remoteInfo = testthread; + }; + 0017996B1074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 002F342009CA1F0300EBEB88; + remoteInfo = testiconv; + }; + 0017996D1074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 00179776107432AE00F5D044; + remoteInfo = testime; + }; + 0017996F1074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 001797961074334C00F5D044; + remoteInfo = testintersections; + }; + 001799731074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = BEC5673D0761D90400A33029; + remoteInfo = testkeys; + }; + 001799751074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 001797B8107433C600F5D044; + remoteInfo = testloadso; + }; + 001799771074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = BEC5674A0761D90400A33029; + remoteInfo = testlock; + }; + 0017997B1074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 001797FA1074355200F5D044; + remoteInfo = testmultiaudio; + }; + 0017997F1074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 001798781074392D00F5D044; + remoteInfo = testnativex11; + }; + 001799831074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 002F343C09CA1FB300EBEB88; + remoteInfo = testoverlay; + }; + 001799871074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 002F345909CA204F00EBEB88; + remoteInfo = testplatform; + }; + 001799891074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0017989D107439DF00F5D044; + remoteInfo = testpower; + }; + 0017998B1074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 001798DA10743BEC00F5D044; + remoteInfo = testresample; + }; + 0017998D1074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = BEC567720761D90500A33029; + remoteInfo = testsem; + }; + 001799911074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 001798FE10743F1000F5D044; + remoteInfo = testsprite; + }; + 001799931074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = BEC5678D0761D90500A33029; + remoteInfo = testtimer; + }; + 001799951074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = BEC567A70761D90500A33029; + remoteInfo = testversion; + }; + 0017999D1074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0017992010743FB700F5D044; + remoteInfo = testwm; + }; + 001799A11074403E00F5D044 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = BEC567EA0761D90600A33029; + remoteInfo = torturethread; + }; + 003FA642093FFD41000C53B3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 003FA63A093FFD41000C53B3 /* SDL.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = BECDF66C0761BA81005FE872; + remoteInfo = Framework; + }; + DB0F490417CA5249008798C5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB0F48D917CA51E5008798C5; + remoteInfo = testdrawchessboard; + }; + DB0F490617CA5249008798C5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB0F48EF17CA5212008798C5; + remoteInfo = testfilesystem; + }; + DB166D6D16A1CEAA00A1396C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = BBFC08B7164C6862003E6A99; + remoteInfo = testcontroller; + }; + DB166D6F16A1CEAF00A1396C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4537749112091504002F0F45; + remoteInfo = testshape; + }; + DB166DD816A1D38900A1396C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB166DC416A1D36A00A1396C; + remoteInfo = testmessage; + }; + DB166DF116A1D53700A1396C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB166DDC16A1D50C00A1396C; + remoteInfo = testrelative; + }; + DB166E0816A1D5A400A1396C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB166DF316A1D57C00A1396C; + remoteInfo = testrendercopyex; + }; + DB166E1F16A1D5D000A1396C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB166E0A16A1D5AD00A1396C; + remoteInfo = testrendertarget; + }; + DB166E3A16A1D65A00A1396C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB166E2716A1D64D00A1396C; + remoteInfo = testrumble; + }; + DB166E5516A1D6B800A1396C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB166E3D16A1D69000A1396C; + remoteInfo = testscale; + }; + DB166E6B16A1D72000A1396C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB166E5716A1D6F300A1396C; + remoteInfo = testshader; + }; + DB166E9516A1D7CD00A1396C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB166E6D16A1D78400A1396C; + remoteInfo = testspriteminimal; + }; + DB166E9716A1D7CF00A1396C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB166E8016A1D78C00A1396C; + remoteInfo = teststreaming; + }; + F35E56E62983133F00A43A5F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F35E56A2298312CB00A43A5F; + remoteInfo = testautomation; + }; + F3E1F7FE2A78C3AD00AC76D3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB89956D18A19ABA0092407C; + remoteInfo = testhotplug; + }; + F3E1F8002A78C3BE00AC76D3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB445EE618184B7000B306B0; + remoteInfo = testdropfile; + }; + F3E1F8022A78C3C500AC76D3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F3C17CDB28E416CF00E1A26D; + remoteInfo = testgeometry; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 00794E6409D2084F003FC8A1 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 7; + files = ( + 00794E6609D20865003FC8A1 /* sample.wav in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 00794EEC09D2371F003FC8A1 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 7; + files = ( + 00794EF009D23739003FC8A1 /* utf8.txt in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 00794EF409D237C7003FC8A1 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 7; + files = ( + 00794EF709D237DE003FC8A1 /* moose.dat in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166DDA16A1D40F00A1396C /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 7; + files = ( + DB166DDB16A1D42F00A1396C /* icon.bmp in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166E2116A1D5DF00A1396C /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 7; + files = ( + DB166E2316A1D60B00A1396C /* icon.bmp in CopyFiles */, + DB166E2216A1D5EC00A1396C /* sample.bmp in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166E2416A1D61000A1396C /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 7; + files = ( + DB166E2516A1D61900A1396C /* icon.bmp in CopyFiles */, + DB166E2616A1D61900A1396C /* sample.bmp in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166E4C16A1D69000A1396C /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 7; + files = ( + DB166E4D16A1D69000A1396C /* icon.bmp in CopyFiles */, + DB166E4E16A1D69000A1396C /* sample.bmp in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166E9916A1D7EE00A1396C /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 7; + files = ( + DB166E9A16A1D7F700A1396C /* moose.dat in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166E9B16A1D7FC00A1396C /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 7; + files = ( + DB166E9C16A1D80900A1396C /* icon.bmp in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166ECE16A1D85400A1396C /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 7; + files = ( + DB166ED016A1D88100A1396C /* shapes in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB568B2A7895F800766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB568A2A7895F800766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB568E2A7896BF00766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB568D2A7896BF00766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56922A7896F900766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56912A7896F900766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56952A78971600766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56942A78971600766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56982A78971F00766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56972A78971F00766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB569B2A78972700766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB569A2A78972700766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB569E2A78973000766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB569D2A78972F00766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56A12A78973700766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56A02A78973700766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56A42A78974000766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56A32A78974000766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56A72A78974800766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56A62A78974800766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56AA2A78975100766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56A92A78975100766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56AD2A78975A00766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56AC2A78975A00766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56B02A78976200766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56AF2A78976200766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56B32A78976900766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56B22A78976800766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56B62A78977000766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56B52A78977000766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56B92A78977D00766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56B82A78977D00766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56BC2A78978800766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56BB2A78978700766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56BF2A78979000766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56BE2A78979000766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56C22A78979600766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56C12A78979600766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56C52A78979C00766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56C42A78979C00766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56C82A7897A500766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56C72A7897A500766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56CB2A7897AE00766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56CA2A7897AE00766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56CE2A7897B500766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56CD2A7897B500766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56D12A7897BE00766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56D02A7897BE00766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56D42A7897C600766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56D32A7897C600766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56D72A7897CE00766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56D62A7897CD00766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56DB2A7897E200766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56DA2A7897E200766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56DE2A7897E900766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56DD2A7897E900766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56E12A7897F000766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56E02A7897F000766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56E42A7897F800766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56E32A7897F800766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56E72A7897FE00766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56E62A7897FE00766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56EA2A78980600766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56E92A78980600766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56ED2A78980D00766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56EC2A78980D00766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56F02A78981500766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56EF2A78981500766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56F32A78981C00766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56F22A78981C00766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56F62A78982400766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56F52A78982300766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56F92A78982B00766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56F82A78982B00766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56FC2A78983200766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56FB2A78983200766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB56FF2A78983C00766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB56FE2A78983C00766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB57022A78984300766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB57012A78984300766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB57052A78984A00766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB57042A78984A00766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB57082A78985400766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB57072A78985400766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB570B2A78985A00766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB570A2A78985A00766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB570E2A78986000766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB570D2A78986000766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F3CB57112A78986700766177 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F3CB57102A78986700766177 /* SDL3.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0017958C10741F7900F5D044 /* testatomic.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testatomic.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 0017958F1074216E00F5D044 /* testatomic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testatomic.c; sourceTree = ""; }; + 001795AD107421BF00F5D044 /* testaudioinfo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testaudioinfo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 001795B01074222D00F5D044 /* testaudioinfo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testaudioinfo.c; sourceTree = ""; }; + 0017972110742F3200F5D044 /* testgl.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testgl.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 0017972710742FB900F5D044 /* testgl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testgl.c; sourceTree = ""; }; + 00179748107430D600F5D044 /* testhaptic.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testhaptic.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 0017974E1074315700F5D044 /* testhaptic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testhaptic.c; sourceTree = ""; }; + 0017976E107431B300F5D044 /* testdraw.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testdraw.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 001797711074320D00F5D044 /* testdraw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testdraw.c; sourceTree = ""; }; + 0017978E107432AE00F5D044 /* testime.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testime.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 00179791107432FA00F5D044 /* testime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testime.c; sourceTree = ""; }; + 001797AE1074334C00F5D044 /* testintersections.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testintersections.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 001797B31074339C00F5D044 /* testintersections.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testintersections.c; sourceTree = ""; }; + 001797D0107433C600F5D044 /* testloadso.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testloadso.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 001797D31074343E00F5D044 /* testloadso.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testloadso.c; sourceTree = ""; }; + 001798121074355200F5D044 /* testmultiaudio.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testmultiaudio.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 001798151074359B00F5D044 /* testmultiaudio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testmultiaudio.c; sourceTree = ""; }; + 0017985A107436ED00F5D044 /* testnative.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testnative.c; sourceTree = ""; }; + 0017985B107436ED00F5D044 /* testnative.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = testnative.h; sourceTree = ""; }; + 0017985C107436ED00F5D044 /* testnativecocoa.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = testnativecocoa.m; sourceTree = ""; }; + 00179872107438D000F5D044 /* testnativex11.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testnativex11.c; sourceTree = ""; }; + 001798941074392D00F5D044 /* testnative.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testnative.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 001798B5107439DF00F5D044 /* testpower.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testpower.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 001798B910743A4900F5D044 /* testpower.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testpower.c; sourceTree = ""; }; + 001798F210743BEC00F5D044 /* testresample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testresample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 001798F910743E9200F5D044 /* testresample.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testresample.c; sourceTree = ""; }; + 0017991610743F1000F5D044 /* testsprite.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testsprite.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 0017991910743F5300F5D044 /* testsprite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testsprite.c; sourceTree = ""; }; + 0017993810743FB700F5D044 /* testwm.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testwm.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 0017993B10743FEF00F5D044 /* testwm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testwm.c; sourceTree = ""; }; + 002F341209CA1BFF00EBEB88 /* testfile.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testfile.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 002F341709CA1C5B00EBEB88 /* testfile.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = testfile.c; sourceTree = ""; }; + 002F343109CA1F0300EBEB88 /* testiconv.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testiconv.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 002F343609CA1F6F00EBEB88 /* testiconv.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = testiconv.c; sourceTree = ""; }; + 002F344D09CA1FB300EBEB88 /* testoverlay.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testoverlay.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 002F345209CA201C00EBEB88 /* testoverlay.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = testoverlay.c; sourceTree = ""; }; + 002F346A09CA204F00EBEB88 /* testplatform.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testplatform.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 002F346F09CA20A600EBEB88 /* testplatform.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = testplatform.c; sourceTree = ""; }; + 003FA63A093FFD41000C53B3 /* SDL.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL.xcodeproj; path = ../SDL/SDL.xcodeproj; sourceTree = SOURCE_ROOT; }; + 00794E5D09D20839003FC8A1 /* icon.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; path = icon.bmp; sourceTree = ""; }; + 00794E5E09D20839003FC8A1 /* moose.dat */ = {isa = PBXFileReference; lastKnownFileType = file; path = moose.dat; sourceTree = ""; }; + 00794E5F09D20839003FC8A1 /* picture.xbm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = picture.xbm; sourceTree = ""; }; + 00794E6109D20839003FC8A1 /* sample.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; path = sample.bmp; sourceTree = ""; }; + 00794E6209D20839003FC8A1 /* sample.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = sample.wav; sourceTree = ""; }; + 00794E6309D20839003FC8A1 /* utf8.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = utf8.txt; sourceTree = ""; }; + 083E4872006D84C97F000001 /* loopwave.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = loopwave.c; sourceTree = ""; }; + 083E4878006D85357F000001 /* testerror.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = testerror.c; sourceTree = ""; }; + 083E487E006D86A17F000001 /* testsem.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = testsem.c; sourceTree = ""; }; + 083E4880006D86A17F000001 /* testtimer.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = testtimer.c; sourceTree = ""; }; + 083E4882006D86A17F000001 /* testver.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = testver.c; sourceTree = ""; }; + 083E4887006D86A17F000001 /* torturethread.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = torturethread.c; sourceTree = ""; }; + 092D6D10FFB30A2C7F000001 /* checkkeys.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = checkkeys.c; sourceTree = ""; }; + 092D6D58FFB311A97F000001 /* testthread.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = testthread.c; sourceTree = ""; }; + 092D6D6CFFB313437F000001 /* testkeys.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = testkeys.c; sourceTree = ""; }; + 092D6D75FFB313BB7F000001 /* testlock.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = testlock.c; sourceTree = ""; }; + 4537749212091504002F0F45 /* testshape.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testshape.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 453774A4120915E3002F0F45 /* testshape.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testshape.c; sourceTree = ""; }; + 66E88E8A203B778F0004D44E /* testyuv_cvt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = testyuv_cvt.c; sourceTree = ""; }; + AAF02FF41F90089800B9A9FB /* SDL_test_memory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_test_memory.c; sourceTree = ""; }; + BBFC088E164C6820003E6A99 /* testcontroller.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testcontroller.c; sourceTree = ""; }; + BBFC08CD164C6862003E6A99 /* testcontroller.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testcontroller.app; sourceTree = BUILT_PRODUCTS_DIR; }; + BEC566B60761D90300A33029 /* checkkeys.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = checkkeys.app; sourceTree = BUILT_PRODUCTS_DIR; }; + BEC566D10761D90300A33029 /* loopwave.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = loopwave.app; sourceTree = BUILT_PRODUCTS_DIR; }; + BEC567060761D90400A33029 /* testerror.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testerror.app; sourceTree = BUILT_PRODUCTS_DIR; }; + BEC5672E0761D90400A33029 /* testthread.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testthread.app; sourceTree = BUILT_PRODUCTS_DIR; }; + BEC567480761D90400A33029 /* testkeys.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testkeys.app; sourceTree = BUILT_PRODUCTS_DIR; }; + BEC567550761D90400A33029 /* testlock.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testlock.app; sourceTree = BUILT_PRODUCTS_DIR; }; + BEC5677D0761D90500A33029 /* testsem.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testsem.app; sourceTree = BUILT_PRODUCTS_DIR; }; + BEC567980761D90500A33029 /* testtimer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testtimer.app; sourceTree = BUILT_PRODUCTS_DIR; }; + BEC567B20761D90500A33029 /* testversion.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testversion.app; sourceTree = BUILT_PRODUCTS_DIR; }; + BEC567F50761D90600A33029 /* torturethread.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = torturethread.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DB0F48D717CA51D2008798C5 /* testdrawchessboard.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = testdrawchessboard.c; sourceTree = ""; }; + DB0F48D817CA51D2008798C5 /* testfilesystem.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = testfilesystem.c; sourceTree = ""; }; + DB0F48EC17CA51E5008798C5 /* testdrawchessboard.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testdrawchessboard.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DB0F490117CA5212008798C5 /* testfilesystem.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testfilesystem.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DB166CBC16A1C74100A1396C /* testgles.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = testgles.c; sourceTree = ""; }; + DB166CBD16A1C74100A1396C /* testmessage.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = testmessage.c; sourceTree = ""; }; + DB166CBF16A1C74100A1396C /* testrelative.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = testrelative.c; sourceTree = ""; }; + DB166CC016A1C74100A1396C /* testrendercopyex.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = testrendercopyex.c; sourceTree = ""; }; + DB166CC116A1C74100A1396C /* testrendertarget.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = testrendertarget.c; sourceTree = ""; }; + DB166CC216A1C74100A1396C /* testrumble.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = testrumble.c; sourceTree = ""; }; + DB166CC316A1C74100A1396C /* testscale.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = testscale.c; sourceTree = ""; }; + DB166CC416A1C74100A1396C /* testshader.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = testshader.c; sourceTree = ""; }; + DB166CC516A1C74100A1396C /* testspriteminimal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = testspriteminimal.c; sourceTree = ""; }; + DB166CC616A1C74100A1396C /* teststreaming.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = teststreaming.c; sourceTree = ""; }; + DB166D7F16A1D12400A1396C /* libSDL3_test.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSDL3_test.a; sourceTree = BUILT_PRODUCTS_DIR; }; + DB166D8416A1D1A500A1396C /* SDL_test_assert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_test_assert.c; sourceTree = ""; }; + DB166D8516A1D1A500A1396C /* SDL_test_common.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_test_common.c; sourceTree = ""; }; + DB166D8616A1D1A500A1396C /* SDL_test_compare.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_test_compare.c; sourceTree = ""; }; + DB166D8716A1D1A500A1396C /* SDL_test_crc32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_test_crc32.c; sourceTree = ""; }; + DB166D8816A1D1A500A1396C /* SDL_test_font.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_test_font.c; sourceTree = ""; }; + DB166D8916A1D1A500A1396C /* SDL_test_fuzzer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_test_fuzzer.c; sourceTree = ""; }; + DB166D8A16A1D1A500A1396C /* SDL_test_harness.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_test_harness.c; sourceTree = ""; }; + DB166D9016A1D1A500A1396C /* SDL_test_log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_test_log.c; sourceTree = ""; }; + DB166D9116A1D1A500A1396C /* SDL_test_md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_test_md5.c; sourceTree = ""; }; + DB166D9216A1D1A500A1396C /* SDL_test_random.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_test_random.c; sourceTree = ""; }; + DB166DD516A1D36A00A1396C /* testmessage.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testmessage.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DB166DEE16A1D50C00A1396C /* testrelative.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testrelative.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DB166E0516A1D57C00A1396C /* testrendercopyex.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testrendercopyex.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DB166E1C16A1D5AD00A1396C /* testrendertarget.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testrendertarget.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DB166E3816A1D64D00A1396C /* testrumble.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testrumble.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DB166E5216A1D69000A1396C /* testscale.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testscale.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DB166E6816A1D6F300A1396C /* testshader.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testshader.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DB166E7E16A1D78400A1396C /* testspriteminimal.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testspriteminimal.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DB166E9116A1D78C00A1396C /* teststreaming.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = teststreaming.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DB166ECF16A1D87000A1396C /* shapes */ = {isa = PBXFileReference; lastKnownFileType = folder; path = shapes; sourceTree = ""; }; + DB445EF818184B7000B306B0 /* testdropfile.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testdropfile.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DB445EFA18184BB600B306B0 /* testdropfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testdropfile.c; sourceTree = ""; }; + DB89957E18A19ABA0092407C /* testhotplug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testhotplug.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DB89958318A19B130092407C /* testhotplug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testhotplug.c; sourceTree = ""; }; + F35E56AA298312CB00A43A5F /* testautomation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testautomation.app; sourceTree = BUILT_PRODUCTS_DIR; }; + F35E56B62983130A00A43A5F /* testautomation_main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_main.c; sourceTree = ""; }; + F35E56B72983130A00A43A5F /* testautomation_hints.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_hints.c; sourceTree = ""; }; + F35E56B82983130A00A43A5F /* testautomation_render.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_render.c; sourceTree = ""; }; + F35E56B92983130B00A43A5F /* testautomation_rwops.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_rwops.c; sourceTree = ""; }; + F35E56BA2983130B00A43A5F /* testautomation_math.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_math.c; sourceTree = ""; }; + F35E56BB2983130B00A43A5F /* testautomation_events.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_events.c; sourceTree = ""; }; + F35E56BC2983130B00A43A5F /* testautomation_clipboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_clipboard.c; sourceTree = ""; }; + F35E56BD2983130B00A43A5F /* testautomation_timer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_timer.c; sourceTree = ""; }; + F35E56BE2983130C00A43A5F /* testautomation_stdlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_stdlib.c; sourceTree = ""; }; + F35E56BF2983130C00A43A5F /* testautomation_images.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_images.c; sourceTree = ""; }; + F35E56C02983130C00A43A5F /* testautomation_pixels.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_pixels.c; sourceTree = ""; }; + F35E56C12983130C00A43A5F /* testautomation_video.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_video.c; sourceTree = ""; }; + F35E56C32983130D00A43A5F /* testautomation_platform.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_platform.c; sourceTree = ""; }; + F35E56C42983130D00A43A5F /* testautomation_audio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_audio.c; sourceTree = ""; }; + F35E56C52983130D00A43A5F /* testautomation_rect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_rect.c; sourceTree = ""; }; + F35E56C62983130D00A43A5F /* testautomation_joystick.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_joystick.c; sourceTree = ""; }; + F35E56C72983130E00A43A5F /* testautomation_keyboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_keyboard.c; sourceTree = ""; }; + F35E56C82983130E00A43A5F /* testautomation_sdltest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_sdltest.c; sourceTree = ""; }; + F35E56C92983130E00A43A5F /* testautomation_guid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_guid.c; sourceTree = ""; }; + F35E56CA2983130E00A43A5F /* testautomation_syswm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_syswm.c; sourceTree = ""; }; + F35E56CB2983130F00A43A5F /* testautomation_surface.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_surface.c; sourceTree = ""; }; + F35E56CC2983130F00A43A5F /* testautomation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation.c; sourceTree = ""; }; + F35E56CD2983130F00A43A5F /* testautomation_mouse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_mouse.c; sourceTree = ""; }; + F399C6492A78929400C86979 /* gamepadutils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gamepadutils.c; sourceTree = ""; }; + F399C6502A7892D800C86979 /* testautomation_intrinsics.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testautomation_intrinsics.c; sourceTree = ""; }; + F399C6542A78933000C86979 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + F3C17C6A28E3FD4400E1A26D /* config.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = ""; }; + F3C17C7328E40ADE00E1A26D /* testutils.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = testutils.c; sourceTree = ""; }; + F3C17CD628E416AC00E1A26D /* testgeometry.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testgeometry.c; sourceTree = ""; }; + F3C17CDC28E416CF00E1A26D /* testgeometry.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testgeometry.app; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 0017957A10741F7900F5D044 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56932A78971600766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0017959B107421BF00F5D044 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56962A78971F00766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0017970F10742F3200F5D044 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56B42A78977000766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 00179736107430D600F5D044 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56B72A78977D00766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0017975C107431B300F5D044 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB569F2A78973700766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0017977C107432AE00F5D044 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56C02A78979600766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0017979C1074334C00F5D044 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56C32A78979C00766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 001797BE107433C600F5D044 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56C92A7897AE00766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 001798001074355200F5D044 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56D22A7897C600766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 001798821074392D00F5D044 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56D52A7897CD00766177 /* SDL3.framework in Frameworks */, + F399C6552A78933100C86979 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 001798A3107439DF00F5D044 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56DF2A7897F000766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 001798E010743BEC00F5D044 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56EB2A78980D00766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0017990410743F1000F5D044 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56892A7895F800766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0017992610743FB700F5D044 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB570C2A78986000766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 002F340809CA1BFF00EBEB88 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56AB2A78975A00766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 002F342709CA1F0300EBEB88 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56BD2A78979000766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 002F344309CA1FB300EBEB88 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56D92A7897E200766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 002F346009CA204F00EBEB88 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56DC2A7897E900766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4537749012091504002F0F45 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56FA2A78983200766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BBFC08BE164C6862003E6A99 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB569C2A78972F00766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC566B20761D90300A33029 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB568C2A7896BF00766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC566CC0761D90300A33029 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56902A7896F900766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC567020761D90300A33029 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56A82A78975100766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC5672A0761D90400A33029 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB57032A78984A00766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC567440761D90400A33029 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56C62A7897A500766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC567510761D90400A33029 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56CC2A7897B500766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC567790761D90500A33029 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56F42A78982300766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC567940761D90500A33029 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB57062A78985400766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC567AE0761D90500A33029 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB57092A78985A00766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC567F10761D90600A33029 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB570F2A78986700766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB0F48DC17CA51E5008798C5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56A22A78974000766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB0F48F217CA5212008798C5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56AE2A78976200766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166D7C16A1D12400A1396C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166DC716A1D36A00A1396C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56CF2A7897BE00766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166DDF16A1D50C00A1396C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56E22A7897F800766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166DF616A1D57C00A1396C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56E52A7897FE00766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166E0D16A1D5AD00A1396C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56E82A78980600766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166E2A16A1D64D00A1396C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56EE2A78981500766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166E4016A1D69000A1396C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56F12A78981C00766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166E5A16A1D6F300A1396C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56F72A78982B00766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166E7016A1D78400A1396C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56FD2A78983C00766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166E8316A1D78C00A1396C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB57002A78984300766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB445EE918184B7000B306B0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56A52A78974800766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB89957018A19ABA0092407C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56BA2A78978700766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F35E56A5298312CB00A43A5F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56992A78972700766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F3C17CD928E416CF00E1A26D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3CB56B12A78976800766177 /* SDL3.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 003FA63B093FFD41000C53B3 /* Products */ = { + isa = PBXGroup; + children = ( + 003FA643093FFD41000C53B3 /* SDL3.framework */, + ); + name = Products; + sourceTree = ""; + }; + 00794E4609D207B4003FC8A1 /* Resources */ = { + isa = PBXGroup; + children = ( + 00794E5D09D20839003FC8A1 /* icon.bmp */, + 00794E5E09D20839003FC8A1 /* moose.dat */, + 00794E5F09D20839003FC8A1 /* picture.xbm */, + 00794E6109D20839003FC8A1 /* sample.bmp */, + 00794E6209D20839003FC8A1 /* sample.wav */, + DB166ECF16A1D87000A1396C /* shapes */, + 00794E6309D20839003FC8A1 /* utf8.txt */, + ); + name = Resources; + path = ../../test; + sourceTree = ""; + }; + 08FB7794FE84155DC02AAC07 /* SDLTest */ = { + isa = PBXGroup; + children = ( + F3C17C6A28E3FD4400E1A26D /* config.xcconfig */, + 003FA63A093FFD41000C53B3 /* SDL.xcodeproj */, + 08FB7795FE84155DC02AAC07 /* Source */, + DB166D8316A1D17E00A1396C /* SDL_Test */, + 00794E4609D207B4003FC8A1 /* Resources */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + F399C6532A78933000C86979 /* Frameworks */, + ); + comments = "I made these tests link against our \"default\" framework which includes X11 stuff. If you didn't install the X11 headers with Xcode, you might have problems building the SDL.framework (which is a dependency). You can swap the dependencies around to get around this, or you can modify the default SDL.framework target to not include X11 stuff. (Go into its target build options and remove all the Preprocessor macros.)\n\n\n\nWe are sort of in a half-way state at the moment. Going \"all-the-way\" means we copy the SDL.framework inside the app bundle so we can run the test without the step of the user \"installing\" the framework. But there is an oversight/bug in Xcode that doesn't correctly find the location of the framework when in an embedded/nested Xcode project. We could probably try to hack this with a shell script that checks multiple directories for existence, but this is messier and more work than I prefer, so I rather just wait for Apple to fix this. In the meantime...\n\nThe \"All\" target will build the SDL framework from the Xcode project. The other targets do not have this dependency set (for flexibility reasons in case we make changes). If you have not built the framework, you will probably be unable to link. You will either need to build the framework, or you need to add \"-framework SDL\" to the link options and make sure you have the SDL.framework installed somewhere where it can be seen (like /Library/Frameworks...I think we already set this one up.) \n\nTo run though, you should have a copy of the SDL.framework in /Library/Frameworks or ~/Library/Frameworks.\n\n\n\n\ntestgl and testdyngl need -DHAVE_OPENGL\ntestgl needs to link against OpenGL.framework\n\n"; + name = SDLTest; + sourceTree = ""; + }; + 08FB7795FE84155DC02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + 092D6D10FFB30A2C7F000001 /* checkkeys.c */, + F399C6492A78929400C86979 /* gamepadutils.c */, + 083E4872006D84C97F000001 /* loopwave.c */, + 0017958F1074216E00F5D044 /* testatomic.c */, + 001795B01074222D00F5D044 /* testaudioinfo.c */, + F35E56C42983130D00A43A5F /* testautomation_audio.c */, + F35E56BC2983130B00A43A5F /* testautomation_clipboard.c */, + F35E56BB2983130B00A43A5F /* testautomation_events.c */, + F35E56C92983130E00A43A5F /* testautomation_guid.c */, + F35E56B72983130A00A43A5F /* testautomation_hints.c */, + F35E56BF2983130C00A43A5F /* testautomation_images.c */, + F399C6502A7892D800C86979 /* testautomation_intrinsics.c */, + F35E56C62983130D00A43A5F /* testautomation_joystick.c */, + F35E56C72983130E00A43A5F /* testautomation_keyboard.c */, + F35E56B62983130A00A43A5F /* testautomation_main.c */, + F35E56BA2983130B00A43A5F /* testautomation_math.c */, + F35E56CD2983130F00A43A5F /* testautomation_mouse.c */, + F35E56C02983130C00A43A5F /* testautomation_pixels.c */, + F35E56C32983130D00A43A5F /* testautomation_platform.c */, + F35E56C52983130D00A43A5F /* testautomation_rect.c */, + F35E56B82983130A00A43A5F /* testautomation_render.c */, + F35E56B92983130B00A43A5F /* testautomation_rwops.c */, + F35E56C82983130E00A43A5F /* testautomation_sdltest.c */, + F35E56BE2983130C00A43A5F /* testautomation_stdlib.c */, + F35E56CB2983130F00A43A5F /* testautomation_surface.c */, + F35E56CA2983130E00A43A5F /* testautomation_syswm.c */, + F35E56BD2983130B00A43A5F /* testautomation_timer.c */, + F35E56C12983130C00A43A5F /* testautomation_video.c */, + F35E56CC2983130F00A43A5F /* testautomation.c */, + BBFC088E164C6820003E6A99 /* testcontroller.c */, + 001797711074320D00F5D044 /* testdraw.c */, + DB0F48D717CA51D2008798C5 /* testdrawchessboard.c */, + DB445EFA18184BB600B306B0 /* testdropfile.c */, + 083E4878006D85357F000001 /* testerror.c */, + 002F341709CA1C5B00EBEB88 /* testfile.c */, + DB0F48D817CA51D2008798C5 /* testfilesystem.c */, + F3C17CD628E416AC00E1A26D /* testgeometry.c */, + 0017972710742FB900F5D044 /* testgl.c */, + DB166CBC16A1C74100A1396C /* testgles.c */, + 0017974E1074315700F5D044 /* testhaptic.c */, + DB89958318A19B130092407C /* testhotplug.c */, + 002F343609CA1F6F00EBEB88 /* testiconv.c */, + 00179791107432FA00F5D044 /* testime.c */, + 001797B31074339C00F5D044 /* testintersections.c */, + 092D6D6CFFB313437F000001 /* testkeys.c */, + 001797D31074343E00F5D044 /* testloadso.c */, + 092D6D75FFB313BB7F000001 /* testlock.c */, + DB166CBD16A1C74100A1396C /* testmessage.c */, + 001798151074359B00F5D044 /* testmultiaudio.c */, + 0017985A107436ED00F5D044 /* testnative.c */, + 0017985B107436ED00F5D044 /* testnative.h */, + 0017985C107436ED00F5D044 /* testnativecocoa.m */, + 00179872107438D000F5D044 /* testnativex11.c */, + 002F345209CA201C00EBEB88 /* testoverlay.c */, + 002F346F09CA20A600EBEB88 /* testplatform.c */, + 001798B910743A4900F5D044 /* testpower.c */, + DB166CBF16A1C74100A1396C /* testrelative.c */, + DB166CC016A1C74100A1396C /* testrendercopyex.c */, + DB166CC116A1C74100A1396C /* testrendertarget.c */, + 001798F910743E9200F5D044 /* testresample.c */, + DB166CC216A1C74100A1396C /* testrumble.c */, + DB166CC316A1C74100A1396C /* testscale.c */, + 083E487E006D86A17F000001 /* testsem.c */, + DB166CC416A1C74100A1396C /* testshader.c */, + 453774A4120915E3002F0F45 /* testshape.c */, + 0017991910743F5300F5D044 /* testsprite.c */, + DB166CC516A1C74100A1396C /* testspriteminimal.c */, + DB166CC616A1C74100A1396C /* teststreaming.c */, + 092D6D58FFB311A97F000001 /* testthread.c */, + 083E4880006D86A17F000001 /* testtimer.c */, + F3C17C7328E40ADE00E1A26D /* testutils.c */, + 083E4882006D86A17F000001 /* testver.c */, + 0017993B10743FEF00F5D044 /* testwm.c */, + 66E88E8A203B778F0004D44E /* testyuv_cvt.c */, + 083E4887006D86A17F000001 /* torturethread.c */, + ); + name = Source; + path = ../../test; + sourceTree = ""; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + BEC566B60761D90300A33029 /* checkkeys.app */, + BEC566D10761D90300A33029 /* loopwave.app */, + BEC567060761D90400A33029 /* testerror.app */, + BEC5672E0761D90400A33029 /* testthread.app */, + BEC567480761D90400A33029 /* testkeys.app */, + BEC567550761D90400A33029 /* testlock.app */, + BEC5677D0761D90500A33029 /* testsem.app */, + BEC567980761D90500A33029 /* testtimer.app */, + BEC567B20761D90500A33029 /* testversion.app */, + BEC567F50761D90600A33029 /* torturethread.app */, + 002F341209CA1BFF00EBEB88 /* testfile.app */, + 002F343109CA1F0300EBEB88 /* testiconv.app */, + 002F344D09CA1FB300EBEB88 /* testoverlay.app */, + 002F346A09CA204F00EBEB88 /* testplatform.app */, + 0017958C10741F7900F5D044 /* testatomic.app */, + 001795AD107421BF00F5D044 /* testaudioinfo.app */, + 0017972110742F3200F5D044 /* testgl.app */, + 00179748107430D600F5D044 /* testhaptic.app */, + 0017976E107431B300F5D044 /* testdraw.app */, + 0017978E107432AE00F5D044 /* testime.app */, + 001797AE1074334C00F5D044 /* testintersections.app */, + 001797D0107433C600F5D044 /* testloadso.app */, + 001798121074355200F5D044 /* testmultiaudio.app */, + 001798941074392D00F5D044 /* testnative.app */, + 001798B5107439DF00F5D044 /* testpower.app */, + 001798F210743BEC00F5D044 /* testresample.app */, + 0017991610743F1000F5D044 /* testsprite.app */, + 0017993810743FB700F5D044 /* testwm.app */, + 4537749212091504002F0F45 /* testshape.app */, + BBFC08CD164C6862003E6A99 /* testcontroller.app */, + DB166D7F16A1D12400A1396C /* libSDL3_test.a */, + DB166DD516A1D36A00A1396C /* testmessage.app */, + DB166DEE16A1D50C00A1396C /* testrelative.app */, + DB166E0516A1D57C00A1396C /* testrendercopyex.app */, + DB166E1C16A1D5AD00A1396C /* testrendertarget.app */, + DB166E3816A1D64D00A1396C /* testrumble.app */, + DB166E5216A1D69000A1396C /* testscale.app */, + DB166E6816A1D6F300A1396C /* testshader.app */, + DB166E7E16A1D78400A1396C /* testspriteminimal.app */, + DB166E9116A1D78C00A1396C /* teststreaming.app */, + DB0F48EC17CA51E5008798C5 /* testdrawchessboard.app */, + DB0F490117CA5212008798C5 /* testfilesystem.app */, + DB89957E18A19ABA0092407C /* testhotplug.app */, + DB445EF818184B7000B306B0 /* testdropfile.app */, + F3C17CDC28E416CF00E1A26D /* testgeometry.app */, + F35E56AA298312CB00A43A5F /* testautomation.app */, + ); + name = Products; + sourceTree = ""; + }; + DB166D8316A1D17E00A1396C /* SDL_Test */ = { + isa = PBXGroup; + children = ( + DB166D8416A1D1A500A1396C /* SDL_test_assert.c */, + DB166D8516A1D1A500A1396C /* SDL_test_common.c */, + DB166D8616A1D1A500A1396C /* SDL_test_compare.c */, + DB166D8716A1D1A500A1396C /* SDL_test_crc32.c */, + DB166D8816A1D1A500A1396C /* SDL_test_font.c */, + DB166D8916A1D1A500A1396C /* SDL_test_fuzzer.c */, + DB166D8A16A1D1A500A1396C /* SDL_test_harness.c */, + DB166D9016A1D1A500A1396C /* SDL_test_log.c */, + DB166D9116A1D1A500A1396C /* SDL_test_md5.c */, + AAF02FF41F90089800B9A9FB /* SDL_test_memory.c */, + DB166D9216A1D1A500A1396C /* SDL_test_random.c */, + ); + name = SDL_Test; + path = ../../src/test; + sourceTree = ""; + }; + F399C6532A78933000C86979 /* Frameworks */ = { + isa = PBXGroup; + children = ( + F399C6542A78933000C86979 /* Cocoa.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + DB166D7D16A1D12400A1396C /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 0017957410741F7900F5D044 /* testatomic */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0017958610741F7900F5D044 /* Build configuration list for PBXNativeTarget "testatomic" */; + buildPhases = ( + 0017957910741F7900F5D044 /* Sources */, + 0017957A10741F7900F5D044 /* Frameworks */, + F3CB56952A78971600766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testatomic; + productName = testalpha; + productReference = 0017958C10741F7900F5D044 /* testatomic.app */; + productType = "com.apple.product-type.application"; + }; + 00179595107421BF00F5D044 /* testaudioinfo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 001795A7107421BF00F5D044 /* Build configuration list for PBXNativeTarget "testaudioinfo" */; + buildPhases = ( + 0017959A107421BF00F5D044 /* Sources */, + 0017959B107421BF00F5D044 /* Frameworks */, + F3CB56982A78971F00766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testaudioinfo; + productName = testalpha; + productReference = 001795AD107421BF00F5D044 /* testaudioinfo.app */; + productType = "com.apple.product-type.application"; + }; + 0017970910742F3200F5D044 /* testgl */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0017971B10742F3200F5D044 /* Build configuration list for PBXNativeTarget "testgl" */; + buildPhases = ( + 0017970E10742F3200F5D044 /* Sources */, + 0017970F10742F3200F5D044 /* Frameworks */, + F3CB56B62A78977000766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testgl; + productName = testalpha; + productReference = 0017972110742F3200F5D044 /* testgl.app */; + productType = "com.apple.product-type.application"; + }; + 00179730107430D600F5D044 /* testhaptic */ = { + isa = PBXNativeTarget; + buildConfigurationList = 00179742107430D600F5D044 /* Build configuration list for PBXNativeTarget "testhaptic" */; + buildPhases = ( + 00179735107430D600F5D044 /* Sources */, + 00179736107430D600F5D044 /* Frameworks */, + F3CB56B92A78977D00766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testhaptic; + productName = testalpha; + productReference = 00179748107430D600F5D044 /* testhaptic.app */; + productType = "com.apple.product-type.application"; + }; + 00179756107431B300F5D044 /* testdraw */ = { + isa = PBXNativeTarget; + buildConfigurationList = 00179768107431B300F5D044 /* Build configuration list for PBXNativeTarget "testdraw" */; + buildPhases = ( + 0017975B107431B300F5D044 /* Sources */, + 0017975C107431B300F5D044 /* Frameworks */, + F3CB56A12A78973700766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testdraw; + productName = testalpha; + productReference = 0017976E107431B300F5D044 /* testdraw.app */; + productType = "com.apple.product-type.application"; + }; + 00179776107432AE00F5D044 /* testime */ = { + isa = PBXNativeTarget; + buildConfigurationList = 00179788107432AE00F5D044 /* Build configuration list for PBXNativeTarget "testime" */; + buildPhases = ( + 0017977B107432AE00F5D044 /* Sources */, + 0017977C107432AE00F5D044 /* Frameworks */, + F3CB56C22A78979600766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testime; + productName = testalpha; + productReference = 0017978E107432AE00F5D044 /* testime.app */; + productType = "com.apple.product-type.application"; + }; + 001797961074334C00F5D044 /* testintersections */ = { + isa = PBXNativeTarget; + buildConfigurationList = 001797A81074334C00F5D044 /* Build configuration list for PBXNativeTarget "testintersections" */; + buildPhases = ( + 0017979B1074334C00F5D044 /* Sources */, + 0017979C1074334C00F5D044 /* Frameworks */, + F3CB56C52A78979C00766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testintersections; + productName = testalpha; + productReference = 001797AE1074334C00F5D044 /* testintersections.app */; + productType = "com.apple.product-type.application"; + }; + 001797B8107433C600F5D044 /* testloadso */ = { + isa = PBXNativeTarget; + buildConfigurationList = 001797CA107433C600F5D044 /* Build configuration list for PBXNativeTarget "testloadso" */; + buildPhases = ( + 001797BD107433C600F5D044 /* Sources */, + 001797BE107433C600F5D044 /* Frameworks */, + F3CB56CB2A7897AE00766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testloadso; + productName = testalpha; + productReference = 001797D0107433C600F5D044 /* testloadso.app */; + productType = "com.apple.product-type.application"; + }; + 001797FA1074355200F5D044 /* testmultiaudio */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0017980C1074355200F5D044 /* Build configuration list for PBXNativeTarget "testmultiaudio" */; + buildPhases = ( + 001797FF1074355200F5D044 /* Sources */, + 001798001074355200F5D044 /* Frameworks */, + F3C17D3828E424B100E1A26D /* Resources */, + F3CB56D42A7897C600766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testmultiaudio; + productName = testalpha; + productReference = 001798121074355200F5D044 /* testmultiaudio.app */; + productType = "com.apple.product-type.application"; + }; + 001798781074392D00F5D044 /* testnative */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0017988E1074392D00F5D044 /* Build configuration list for PBXNativeTarget "testnative" */; + buildPhases = ( + 0017987E1074392D00F5D044 /* Sources */, + 001798821074392D00F5D044 /* Frameworks */, + DB166DDA16A1D40F00A1396C /* CopyFiles */, + F3CB56D72A7897CE00766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testnative; + productName = testalpha; + productReference = 001798941074392D00F5D044 /* testnative.app */; + productType = "com.apple.product-type.application"; + }; + 0017989D107439DF00F5D044 /* testpower */ = { + isa = PBXNativeTarget; + buildConfigurationList = 001798AF107439DF00F5D044 /* Build configuration list for PBXNativeTarget "testpower" */; + buildPhases = ( + 001798A2107439DF00F5D044 /* Sources */, + 001798A3107439DF00F5D044 /* Frameworks */, + F3CB56E12A7897F000766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testpower; + productName = testalpha; + productReference = 001798B5107439DF00F5D044 /* testpower.app */; + productType = "com.apple.product-type.application"; + }; + 001798DA10743BEC00F5D044 /* testresample */ = { + isa = PBXNativeTarget; + buildConfigurationList = 001798EC10743BEC00F5D044 /* Build configuration list for PBXNativeTarget "testresample" */; + buildPhases = ( + 001798DF10743BEC00F5D044 /* Sources */, + 001798E010743BEC00F5D044 /* Frameworks */, + F3CB56ED2A78980D00766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testresample; + productName = testalpha; + productReference = 001798F210743BEC00F5D044 /* testresample.app */; + productType = "com.apple.product-type.application"; + }; + 001798FE10743F1000F5D044 /* testsprite */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0017991010743F1000F5D044 /* Build configuration list for PBXNativeTarget "testsprite" */; + buildPhases = ( + 0017990310743F1000F5D044 /* Sources */, + 0017990410743F1000F5D044 /* Frameworks */, + F3C17D3A28E4252200E1A26D /* Resources */, + F3CB568B2A7895F800766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testsprite; + productName = testalpha; + productReference = 0017991610743F1000F5D044 /* testsprite.app */; + productType = "com.apple.product-type.application"; + }; + 0017992010743FB700F5D044 /* testwm */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0017993210743FB700F5D044 /* Build configuration list for PBXNativeTarget "testwm" */; + buildPhases = ( + 0017992510743FB700F5D044 /* Sources */, + 0017992610743FB700F5D044 /* Frameworks */, + F3CB570E2A78986000766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testwm; + productName = testalpha; + productReference = 0017993810743FB700F5D044 /* testwm.app */; + productType = "com.apple.product-type.application"; + }; + 002F340109CA1BFF00EBEB88 /* testfile */ = { + isa = PBXNativeTarget; + buildConfigurationList = 002F340E09CA1BFF00EBEB88 /* Build configuration list for PBXNativeTarget "testfile" */; + buildPhases = ( + 002F340709CA1BFF00EBEB88 /* Sources */, + 002F340809CA1BFF00EBEB88 /* Frameworks */, + F3CB56AD2A78975A00766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testfile; + productName = testalpha; + productReference = 002F341209CA1BFF00EBEB88 /* testfile.app */; + productType = "com.apple.product-type.application"; + }; + 002F342009CA1F0300EBEB88 /* testiconv */ = { + isa = PBXNativeTarget; + buildConfigurationList = 002F342D09CA1F0300EBEB88 /* Build configuration list for PBXNativeTarget "testiconv" */; + buildPhases = ( + 002F342609CA1F0300EBEB88 /* Sources */, + 002F342709CA1F0300EBEB88 /* Frameworks */, + 00794EEC09D2371F003FC8A1 /* CopyFiles */, + F3CB56BF2A78979000766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testiconv; + productName = testalpha; + productReference = 002F343109CA1F0300EBEB88 /* testiconv.app */; + productType = "com.apple.product-type.application"; + }; + 002F343C09CA1FB300EBEB88 /* testoverlay */ = { + isa = PBXNativeTarget; + buildConfigurationList = 002F344909CA1FB300EBEB88 /* Build configuration list for PBXNativeTarget "testoverlay" */; + buildPhases = ( + 002F344209CA1FB300EBEB88 /* Sources */, + 002F344309CA1FB300EBEB88 /* Frameworks */, + 00794EF409D237C7003FC8A1 /* CopyFiles */, + F3CB56DB2A7897E200766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testoverlay; + productName = testalpha; + productReference = 002F344D09CA1FB300EBEB88 /* testoverlay.app */; + productType = "com.apple.product-type.application"; + }; + 002F345909CA204F00EBEB88 /* testplatform */ = { + isa = PBXNativeTarget; + buildConfigurationList = 002F346609CA204F00EBEB88 /* Build configuration list for PBXNativeTarget "testplatform" */; + buildPhases = ( + 002F345F09CA204F00EBEB88 /* Sources */, + 002F346009CA204F00EBEB88 /* Frameworks */, + F3CB56DE2A7897E900766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testplatform; + productName = testalpha; + productReference = 002F346A09CA204F00EBEB88 /* testplatform.app */; + productType = "com.apple.product-type.application"; + }; + 4537749112091504002F0F45 /* testshape */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4537749A1209150C002F0F45 /* Build configuration list for PBXNativeTarget "testshape" */; + buildPhases = ( + 4537748F12091504002F0F45 /* Sources */, + 4537749012091504002F0F45 /* Frameworks */, + DB166ECE16A1D85400A1396C /* CopyFiles */, + F3CB56FC2A78983200766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testshape; + productName = testshape; + productReference = 4537749212091504002F0F45 /* testshape.app */; + productType = "com.apple.product-type.application"; + }; + BBFC08B7164C6862003E6A99 /* testcontroller */ = { + isa = PBXNativeTarget; + buildConfigurationList = BBFC08CA164C6862003E6A99 /* Build configuration list for PBXNativeTarget "testcontroller" */; + buildPhases = ( + BBFC08BC164C6862003E6A99 /* Sources */, + BBFC08BE164C6862003E6A99 /* Frameworks */, + F3CB569E2A78973000766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testcontroller; + productName = testjoystick; + productReference = BBFC08CD164C6862003E6A99 /* testcontroller.app */; + productType = "com.apple.product-type.application"; + }; + BEC566AB0761D90300A33029 /* checkkeys */ = { + isa = PBXNativeTarget; + buildConfigurationList = 001B593808BDB826006539E9 /* Build configuration list for PBXNativeTarget "checkkeys" */; + buildPhases = ( + BEC566B00761D90300A33029 /* Sources */, + BEC566B20761D90300A33029 /* Frameworks */, + F3CB568E2A7896BF00766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = checkkeys; + productName = checkkeys; + productReference = BEC566B60761D90300A33029 /* checkkeys.app */; + productType = "com.apple.product-type.application"; + }; + BEC566C50761D90300A33029 /* loopwave */ = { + isa = PBXNativeTarget; + buildConfigurationList = 001B594008BDB826006539E9 /* Build configuration list for PBXNativeTarget "loopwave" */; + buildPhases = ( + BEC566CA0761D90300A33029 /* Sources */, + BEC566CC0761D90300A33029 /* Frameworks */, + 00794E6409D2084F003FC8A1 /* CopyFiles */, + F3CB56922A7896F900766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = loopwave; + productName = loopwave; + productReference = BEC566D10761D90300A33029 /* loopwave.app */; + productType = "com.apple.product-type.application"; + }; + BEC566FB0761D90300A33029 /* testerror */ = { + isa = PBXNativeTarget; + buildConfigurationList = 001B595008BDB826006539E9 /* Build configuration list for PBXNativeTarget "testerror" */; + buildPhases = ( + BEC567000761D90300A33029 /* Sources */, + BEC567020761D90300A33029 /* Frameworks */, + F3CB56AA2A78975100766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testerror; + productName = testerror; + productReference = BEC567060761D90400A33029 /* testerror.app */; + productType = "com.apple.product-type.application"; + }; + BEC567230761D90400A33029 /* testthread */ = { + isa = PBXNativeTarget; + buildConfigurationList = 001B595C08BDB826006539E9 /* Build configuration list for PBXNativeTarget "testthread" */; + buildPhases = ( + BEC567280761D90400A33029 /* Sources */, + BEC5672A0761D90400A33029 /* Frameworks */, + F3CB57052A78984A00766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testthread; + productName = testthread; + productReference = BEC5672E0761D90400A33029 /* testthread.app */; + productType = "com.apple.product-type.application"; + }; + BEC5673D0761D90400A33029 /* testkeys */ = { + isa = PBXNativeTarget; + buildConfigurationList = 001B596408BDB826006539E9 /* Build configuration list for PBXNativeTarget "testkeys" */; + buildPhases = ( + BEC567420761D90400A33029 /* Sources */, + BEC567440761D90400A33029 /* Frameworks */, + F3CB56C82A7897A500766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testkeys; + productName = testkeys; + productReference = BEC567480761D90400A33029 /* testkeys.app */; + productType = "com.apple.product-type.application"; + }; + BEC5674A0761D90400A33029 /* testlock */ = { + isa = PBXNativeTarget; + buildConfigurationList = 001B596808BDB826006539E9 /* Build configuration list for PBXNativeTarget "testlock" */; + buildPhases = ( + BEC5674F0761D90400A33029 /* Sources */, + BEC567510761D90400A33029 /* Frameworks */, + F3CB56CE2A7897B500766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testlock; + productName = testlock; + productReference = BEC567550761D90400A33029 /* testlock.app */; + productType = "com.apple.product-type.application"; + }; + BEC567720761D90500A33029 /* testsem */ = { + isa = PBXNativeTarget; + buildConfigurationList = 001B597008BDB826006539E9 /* Build configuration list for PBXNativeTarget "testsem" */; + buildPhases = ( + BEC567770761D90500A33029 /* Sources */, + BEC567790761D90500A33029 /* Frameworks */, + F3CB56F62A78982400766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testsem; + productName = testsem; + productReference = BEC5677D0761D90500A33029 /* testsem.app */; + productType = "com.apple.product-type.application"; + }; + BEC5678D0761D90500A33029 /* testtimer */ = { + isa = PBXNativeTarget; + buildConfigurationList = 001B597808BDB826006539E9 /* Build configuration list for PBXNativeTarget "testtimer" */; + buildPhases = ( + BEC567920761D90500A33029 /* Sources */, + BEC567940761D90500A33029 /* Frameworks */, + F3CB57082A78985400766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testtimer; + productName = testtimer; + productReference = BEC567980761D90500A33029 /* testtimer.app */; + productType = "com.apple.product-type.application"; + }; + BEC567A70761D90500A33029 /* testversion */ = { + isa = PBXNativeTarget; + buildConfigurationList = 001B598008BDB826006539E9 /* Build configuration list for PBXNativeTarget "testversion" */; + buildPhases = ( + BEC567AC0761D90500A33029 /* Sources */, + BEC567AE0761D90500A33029 /* Frameworks */, + F3CB570B2A78985A00766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testversion; + productName = testversion; + productReference = BEC567B20761D90500A33029 /* testversion.app */; + productType = "com.apple.product-type.application"; + }; + BEC567EA0761D90600A33029 /* torturethread */ = { + isa = PBXNativeTarget; + buildConfigurationList = 001B599408BDB826006539E9 /* Build configuration list for PBXNativeTarget "torturethread" */; + buildPhases = ( + BEC567EF0761D90600A33029 /* Sources */, + BEC567F10761D90600A33029 /* Frameworks */, + F3CB57112A78986700766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = torturethread; + productName = torturethread; + productReference = BEC567F50761D90600A33029 /* torturethread.app */; + productType = "com.apple.product-type.application"; + }; + DB0F48D917CA51E5008798C5 /* testdrawchessboard */ = { + isa = PBXNativeTarget; + buildConfigurationList = DB0F48E917CA51E5008798C5 /* Build configuration list for PBXNativeTarget "testdrawchessboard" */; + buildPhases = ( + DB0F48DA17CA51E5008798C5 /* Sources */, + DB0F48DC17CA51E5008798C5 /* Frameworks */, + F3CB56A42A78974000766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testdrawchessboard; + productName = testalpha; + productReference = DB0F48EC17CA51E5008798C5 /* testdrawchessboard.app */; + productType = "com.apple.product-type.application"; + }; + DB0F48EF17CA5212008798C5 /* testfilesystem */ = { + isa = PBXNativeTarget; + buildConfigurationList = DB0F48FE17CA5212008798C5 /* Build configuration list for PBXNativeTarget "testfilesystem" */; + buildPhases = ( + DB0F48F017CA5212008798C5 /* Sources */, + DB0F48F217CA5212008798C5 /* Frameworks */, + F3CB56B02A78976200766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testfilesystem; + productName = testalpha; + productReference = DB0F490117CA5212008798C5 /* testfilesystem.app */; + productType = "com.apple.product-type.application"; + }; + DB166D7E16A1D12400A1396C /* SDL3_test */ = { + isa = PBXNativeTarget; + buildConfigurationList = DB166D8016A1D12400A1396C /* Build configuration list for PBXNativeTarget "SDL3_test" */; + buildPhases = ( + DB166D7B16A1D12400A1396C /* Sources */, + DB166D7C16A1D12400A1396C /* Frameworks */, + DB166D7D16A1D12400A1396C /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SDL3_test; + productName = SDL_test; + productReference = DB166D7F16A1D12400A1396C /* libSDL3_test.a */; + productType = "com.apple.product-type.library.static"; + }; + DB166DC416A1D36A00A1396C /* testmessage */ = { + isa = PBXNativeTarget; + buildConfigurationList = DB166DD216A1D36A00A1396C /* Build configuration list for PBXNativeTarget "testmessage" */; + buildPhases = ( + DB166DC516A1D36A00A1396C /* Sources */, + DB166DC716A1D36A00A1396C /* Frameworks */, + F3CB56D12A7897BE00766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testmessage; + productName = testalpha; + productReference = DB166DD516A1D36A00A1396C /* testmessage.app */; + productType = "com.apple.product-type.application"; + }; + DB166DDC16A1D50C00A1396C /* testrelative */ = { + isa = PBXNativeTarget; + buildConfigurationList = DB166DEB16A1D50C00A1396C /* Build configuration list for PBXNativeTarget "testrelative" */; + buildPhases = ( + DB166DDD16A1D50C00A1396C /* Sources */, + DB166DDF16A1D50C00A1396C /* Frameworks */, + F3CB56E42A7897F800766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testrelative; + productName = testalpha; + productReference = DB166DEE16A1D50C00A1396C /* testrelative.app */; + productType = "com.apple.product-type.application"; + }; + DB166DF316A1D57C00A1396C /* testrendercopyex */ = { + isa = PBXNativeTarget; + buildConfigurationList = DB166E0216A1D57C00A1396C /* Build configuration list for PBXNativeTarget "testrendercopyex" */; + buildPhases = ( + DB166DF416A1D57C00A1396C /* Sources */, + DB166DF616A1D57C00A1396C /* Frameworks */, + DB166E2116A1D5DF00A1396C /* CopyFiles */, + F3CB56E72A7897FE00766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testrendercopyex; + productName = testalpha; + productReference = DB166E0516A1D57C00A1396C /* testrendercopyex.app */; + productType = "com.apple.product-type.application"; + }; + DB166E0A16A1D5AD00A1396C /* testrendertarget */ = { + isa = PBXNativeTarget; + buildConfigurationList = DB166E1916A1D5AD00A1396C /* Build configuration list for PBXNativeTarget "testrendertarget" */; + buildPhases = ( + DB166E0B16A1D5AD00A1396C /* Sources */, + DB166E0D16A1D5AD00A1396C /* Frameworks */, + DB166E2416A1D61000A1396C /* CopyFiles */, + F3CB56EA2A78980600766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testrendertarget; + productName = testalpha; + productReference = DB166E1C16A1D5AD00A1396C /* testrendertarget.app */; + productType = "com.apple.product-type.application"; + }; + DB166E2716A1D64D00A1396C /* testrumble */ = { + isa = PBXNativeTarget; + buildConfigurationList = DB166E3516A1D64D00A1396C /* Build configuration list for PBXNativeTarget "testrumble" */; + buildPhases = ( + DB166E2816A1D64D00A1396C /* Sources */, + DB166E2A16A1D64D00A1396C /* Frameworks */, + F3CB56F02A78981500766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testrumble; + productName = testalpha; + productReference = DB166E3816A1D64D00A1396C /* testrumble.app */; + productType = "com.apple.product-type.application"; + }; + DB166E3D16A1D69000A1396C /* testscale */ = { + isa = PBXNativeTarget; + buildConfigurationList = DB166E4F16A1D69000A1396C /* Build configuration list for PBXNativeTarget "testscale" */; + buildPhases = ( + DB166E3E16A1D69000A1396C /* Sources */, + DB166E4016A1D69000A1396C /* Frameworks */, + DB166E4C16A1D69000A1396C /* CopyFiles */, + F3CB56F32A78981C00766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testscale; + productName = testalpha; + productReference = DB166E5216A1D69000A1396C /* testscale.app */; + productType = "com.apple.product-type.application"; + }; + DB166E5716A1D6F300A1396C /* testshader */ = { + isa = PBXNativeTarget; + buildConfigurationList = DB166E6516A1D6F300A1396C /* Build configuration list for PBXNativeTarget "testshader" */; + buildPhases = ( + DB166E5816A1D6F300A1396C /* Sources */, + DB166E5A16A1D6F300A1396C /* Frameworks */, + F3CB56F92A78982B00766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testshader; + productName = testsem; + productReference = DB166E6816A1D6F300A1396C /* testshader.app */; + productType = "com.apple.product-type.application"; + }; + DB166E6D16A1D78400A1396C /* testspriteminimal */ = { + isa = PBXNativeTarget; + buildConfigurationList = DB166E7B16A1D78400A1396C /* Build configuration list for PBXNativeTarget "testspriteminimal" */; + buildPhases = ( + DB166E6E16A1D78400A1396C /* Sources */, + DB166E7016A1D78400A1396C /* Frameworks */, + DB166E9B16A1D7FC00A1396C /* CopyFiles */, + F3CB56FF2A78983C00766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testspriteminimal; + productName = testspriteminimal; + productReference = DB166E7E16A1D78400A1396C /* testspriteminimal.app */; + productType = "com.apple.product-type.application"; + }; + DB166E8016A1D78C00A1396C /* teststreaming */ = { + isa = PBXNativeTarget; + buildConfigurationList = DB166E8E16A1D78C00A1396C /* Build configuration list for PBXNativeTarget "teststreaming" */; + buildPhases = ( + DB166E8116A1D78C00A1396C /* Sources */, + DB166E8316A1D78C00A1396C /* Frameworks */, + DB166E9916A1D7EE00A1396C /* CopyFiles */, + F3CB57022A78984300766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = teststreaming; + productName = teststreaming; + productReference = DB166E9116A1D78C00A1396C /* teststreaming.app */; + productType = "com.apple.product-type.application"; + }; + DB445EE618184B7000B306B0 /* testdropfile */ = { + isa = PBXNativeTarget; + buildConfigurationList = DB445EF518184B7000B306B0 /* Build configuration list for PBXNativeTarget "testdropfile" */; + buildPhases = ( + DB445EE718184B7000B306B0 /* Sources */, + DB445EE918184B7000B306B0 /* Frameworks */, + F3CB56A72A78974800766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testdropfile; + productName = testdropfile; + productReference = DB445EF818184B7000B306B0 /* testdropfile.app */; + productType = "com.apple.product-type.application"; + }; + DB89956D18A19ABA0092407C /* testhotplug */ = { + isa = PBXNativeTarget; + buildConfigurationList = DB89957B18A19ABA0092407C /* Build configuration list for PBXNativeTarget "testhotplug" */; + buildPhases = ( + DB89956E18A19ABA0092407C /* Sources */, + DB89957018A19ABA0092407C /* Frameworks */, + F3CB56BC2A78978800766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testhotplug; + productName = testalpha; + productReference = DB89957E18A19ABA0092407C /* testhotplug.app */; + productType = "com.apple.product-type.application"; + }; + F35E56A2298312CB00A43A5F /* testautomation */ = { + isa = PBXNativeTarget; + buildConfigurationList = F35E56A7298312CB00A43A5F /* Build configuration list for PBXNativeTarget "testautomation" */; + buildPhases = ( + F35E56A3298312CB00A43A5F /* Sources */, + F35E56A5298312CB00A43A5F /* Frameworks */, + F3CB569B2A78972700766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testautomation; + productName = testalpha; + productReference = F35E56AA298312CB00A43A5F /* testautomation.app */; + productType = "com.apple.product-type.application"; + }; + F3C17CDB28E416CF00E1A26D /* testgeometry */ = { + isa = PBXNativeTarget; + buildConfigurationList = F3C17CE828E416D000E1A26D /* Build configuration list for PBXNativeTarget "testgeometry" */; + buildPhases = ( + F3C17CD828E416CF00E1A26D /* Sources */, + F3C17CD928E416CF00E1A26D /* Frameworks */, + F3CB56B32A78976900766177 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testgeometry; + productName = testgeometry; + productReference = F3C17CDC28E416CF00E1A26D /* testgeometry.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1400; + LastUpgradeCheck = 0420; + TargetAttributes = { + 0017957410741F7900F5D044 = { + ProvisioningStyle = Automatic; + }; + 00179595107421BF00F5D044 = { + ProvisioningStyle = Automatic; + }; + 0017970910742F3200F5D044 = { + ProvisioningStyle = Automatic; + }; + 00179730107430D600F5D044 = { + ProvisioningStyle = Automatic; + }; + 00179756107431B300F5D044 = { + ProvisioningStyle = Automatic; + }; + 00179776107432AE00F5D044 = { + ProvisioningStyle = Automatic; + }; + 001797961074334C00F5D044 = { + ProvisioningStyle = Automatic; + }; + 001797B8107433C600F5D044 = { + ProvisioningStyle = Automatic; + }; + 001797FA1074355200F5D044 = { + ProvisioningStyle = Automatic; + }; + 001798781074392D00F5D044 = { + ProvisioningStyle = Automatic; + }; + 0017989D107439DF00F5D044 = { + ProvisioningStyle = Automatic; + }; + 001798DA10743BEC00F5D044 = { + ProvisioningStyle = Automatic; + }; + 001798FE10743F1000F5D044 = { + ProvisioningStyle = Automatic; + }; + 0017992010743FB700F5D044 = { + ProvisioningStyle = Automatic; + }; + 002F340109CA1BFF00EBEB88 = { + ProvisioningStyle = Automatic; + }; + 002F342009CA1F0300EBEB88 = { + ProvisioningStyle = Automatic; + }; + 002F343C09CA1FB300EBEB88 = { + ProvisioningStyle = Automatic; + }; + 002F345909CA204F00EBEB88 = { + ProvisioningStyle = Automatic; + }; + 4537749112091504002F0F45 = { + ProvisioningStyle = Automatic; + }; + BBFC08B7164C6862003E6A99 = { + ProvisioningStyle = Automatic; + }; + BEC566AB0761D90300A33029 = { + ProvisioningStyle = Automatic; + }; + BEC566C50761D90300A33029 = { + ProvisioningStyle = Automatic; + }; + BEC566FB0761D90300A33029 = { + ProvisioningStyle = Automatic; + }; + BEC567230761D90400A33029 = { + ProvisioningStyle = Automatic; + }; + BEC5673D0761D90400A33029 = { + ProvisioningStyle = Automatic; + }; + BEC5674A0761D90400A33029 = { + ProvisioningStyle = Automatic; + }; + BEC567720761D90500A33029 = { + ProvisioningStyle = Automatic; + }; + BEC5678D0761D90500A33029 = { + ProvisioningStyle = Automatic; + }; + BEC567A70761D90500A33029 = { + ProvisioningStyle = Automatic; + }; + BEC567EA0761D90600A33029 = { + ProvisioningStyle = Automatic; + }; + DB0F48D917CA51E5008798C5 = { + ProvisioningStyle = Automatic; + }; + DB0F48EF17CA5212008798C5 = { + ProvisioningStyle = Automatic; + }; + DB166DC416A1D36A00A1396C = { + ProvisioningStyle = Automatic; + }; + DB166DDC16A1D50C00A1396C = { + ProvisioningStyle = Automatic; + }; + DB166DF316A1D57C00A1396C = { + ProvisioningStyle = Automatic; + }; + DB166E0A16A1D5AD00A1396C = { + ProvisioningStyle = Automatic; + }; + DB166E2716A1D64D00A1396C = { + ProvisioningStyle = Automatic; + }; + DB166E3D16A1D69000A1396C = { + ProvisioningStyle = Automatic; + }; + DB166E5716A1D6F300A1396C = { + ProvisioningStyle = Automatic; + }; + DB166E6D16A1D78400A1396C = { + ProvisioningStyle = Automatic; + }; + DB166E8016A1D78C00A1396C = { + ProvisioningStyle = Automatic; + }; + DB445EE618184B7000B306B0 = { + ProvisioningStyle = Automatic; + }; + DB89956D18A19ABA0092407C = { + ProvisioningStyle = Automatic; + }; + F35E56A2298312CB00A43A5F = { + ProvisioningStyle = Automatic; + }; + F3C17CDB28E416CF00E1A26D = { + CreatedOnToolsVersion = 14.0.1; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = 001B5A0C08BDB826006539E9 /* Build configuration list for PBXProject "SDLTest" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + en, + Base, + ); + mainGroup = 08FB7794FE84155DC02AAC07 /* SDLTest */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 003FA63B093FFD41000C53B3 /* Products */; + ProjectRef = 003FA63A093FFD41000C53B3 /* SDL.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + BEC566920761D90300A33029 /* All */, + DB166D7E16A1D12400A1396C /* SDL3_test */, + BEC566AB0761D90300A33029 /* checkkeys */, + BEC566C50761D90300A33029 /* loopwave */, + 0017957410741F7900F5D044 /* testatomic */, + 00179595107421BF00F5D044 /* testaudioinfo */, + F35E56A2298312CB00A43A5F /* testautomation */, + BBFC08B7164C6862003E6A99 /* testcontroller */, + 00179756107431B300F5D044 /* testdraw */, + DB0F48D917CA51E5008798C5 /* testdrawchessboard */, + DB445EE618184B7000B306B0 /* testdropfile */, + BEC566FB0761D90300A33029 /* testerror */, + 002F340109CA1BFF00EBEB88 /* testfile */, + DB0F48EF17CA5212008798C5 /* testfilesystem */, + F3C17CDB28E416CF00E1A26D /* testgeometry */, + 0017970910742F3200F5D044 /* testgl */, + 00179730107430D600F5D044 /* testhaptic */, + DB89956D18A19ABA0092407C /* testhotplug */, + 002F342009CA1F0300EBEB88 /* testiconv */, + 00179776107432AE00F5D044 /* testime */, + 001797961074334C00F5D044 /* testintersections */, + BEC5673D0761D90400A33029 /* testkeys */, + 001797B8107433C600F5D044 /* testloadso */, + BEC5674A0761D90400A33029 /* testlock */, + DB166DC416A1D36A00A1396C /* testmessage */, + 001797FA1074355200F5D044 /* testmultiaudio */, + 001798781074392D00F5D044 /* testnative */, + 002F343C09CA1FB300EBEB88 /* testoverlay */, + 002F345909CA204F00EBEB88 /* testplatform */, + 0017989D107439DF00F5D044 /* testpower */, + DB166DDC16A1D50C00A1396C /* testrelative */, + DB166DF316A1D57C00A1396C /* testrendercopyex */, + DB166E0A16A1D5AD00A1396C /* testrendertarget */, + 001798DA10743BEC00F5D044 /* testresample */, + DB166E2716A1D64D00A1396C /* testrumble */, + DB166E3D16A1D69000A1396C /* testscale */, + BEC567720761D90500A33029 /* testsem */, + DB166E5716A1D6F300A1396C /* testshader */, + 4537749112091504002F0F45 /* testshape */, + 001798FE10743F1000F5D044 /* testsprite */, + DB166E6D16A1D78400A1396C /* testspriteminimal */, + DB166E8016A1D78C00A1396C /* teststreaming */, + BEC567230761D90400A33029 /* testthread */, + BEC5678D0761D90500A33029 /* testtimer */, + BEC567A70761D90500A33029 /* testversion */, + 0017992010743FB700F5D044 /* testwm */, + BEC567EA0761D90600A33029 /* torturethread */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + 003FA643093FFD41000C53B3 /* SDL3.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = SDL3.framework; + remoteRef = 003FA642093FFD41000C53B3 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + F3C17D3828E424B100E1A26D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F3C17D3928E424B800E1A26D /* sample.wav in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F3C17D3A28E4252200E1A26D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F3C17D3B28E4252900E1A26D /* icon.bmp in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 0017957910741F7900F5D044 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 001795901074216E00F5D044 /* testatomic.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0017959A107421BF00F5D044 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 001795B11074222D00F5D044 /* testaudioinfo.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0017970E10742F3200F5D044 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0017972810742FB900F5D044 /* testgl.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 00179735107430D600F5D044 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0017974F1074315700F5D044 /* testhaptic.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0017975B107431B300F5D044 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 001797721074320D00F5D044 /* testdraw.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0017977B107432AE00F5D044 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 00179792107432FA00F5D044 /* testime.c in Sources */, + F3C17C7C28E40D7400E1A26D /* testutils.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0017979B1074334C00F5D044 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 001797B41074339C00F5D044 /* testintersections.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 001797BD107433C600F5D044 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 001797D41074343E00F5D044 /* testloadso.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 001797FF1074355200F5D044 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 001798161074359B00F5D044 /* testmultiaudio.c in Sources */, + F3C17C7D28E40F9D00E1A26D /* testutils.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0017987E1074392D00F5D044 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0017987F1074392D00F5D044 /* testnative.c in Sources */, + 001798801074392D00F5D044 /* testnativecocoa.m in Sources */, + F3C17C7E28E40FDD00E1A26D /* testutils.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 001798A2107439DF00F5D044 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 001798BA10743A4900F5D044 /* testpower.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 001798DF10743BEC00F5D044 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 001798FA10743E9200F5D044 /* testresample.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0017990310743F1000F5D044 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0017991A10743F5300F5D044 /* testsprite.c in Sources */, + F3C17C8328E4124400E1A26D /* testutils.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0017992510743FB700F5D044 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0017993C10743FEF00F5D044 /* testwm.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 002F340709CA1BFF00EBEB88 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 002F341809CA1C5B00EBEB88 /* testfile.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 002F342609CA1F0300EBEB88 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 002F343709CA1F6F00EBEB88 /* testiconv.c in Sources */, + F3C17C7B28E40D4E00E1A26D /* testutils.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 002F344209CA1FB300EBEB88 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 002F345409CA202000EBEB88 /* testoverlay.c in Sources */, + 66E88E8B203B778F0004D44E /* testyuv_cvt.c in Sources */, + F3C17C7F28E4101000E1A26D /* testutils.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 002F345F09CA204F00EBEB88 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 002F347009CA20A600EBEB88 /* testplatform.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4537748F12091504002F0F45 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 453774A5120915E3002F0F45 /* testshape.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BBFC08BC164C6862003E6A99 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BBFC08D0164C6876003E6A99 /* testcontroller.c in Sources */, + F3C17C7928E40C6E00E1A26D /* testutils.c in Sources */, + F399C64E2A78929400C86979 /* gamepadutils.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC566B00761D90300A33029 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BEC566B10761D90300A33029 /* checkkeys.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC566CA0761D90300A33029 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BEC566CB0761D90300A33029 /* loopwave.c in Sources */, + F3C17C7728E40BC800E1A26D /* testutils.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC567000761D90300A33029 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BEC567010761D90300A33029 /* testerror.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC567280761D90400A33029 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BEC567290761D90400A33029 /* testthread.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC567420761D90400A33029 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BEC567430761D90400A33029 /* testkeys.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC5674F0761D90400A33029 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BEC567500761D90400A33029 /* testlock.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC567770761D90500A33029 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BEC567780761D90500A33029 /* testsem.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC567920761D90500A33029 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BEC567930761D90500A33029 /* testtimer.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC567AC0761D90500A33029 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BEC567AD0761D90500A33029 /* testver.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEC567EF0761D90600A33029 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BEC567F00761D90600A33029 /* torturethread.c in Sources */, + F399C64F2A78929400C86979 /* gamepadutils.c in Sources */, + F399C6522A7892D800C86979 /* testautomation_intrinsics.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB0F48DA17CA51E5008798C5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB0F48EE17CA51F8008798C5 /* testdrawchessboard.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB0F48F017CA5212008798C5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB0F490317CA5225008798C5 /* testfilesystem.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166D7B16A1D12400A1396C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB166D9316A1D1A500A1396C /* SDL_test_assert.c in Sources */, + DB166D9416A1D1A500A1396C /* SDL_test_common.c in Sources */, + DB166D9516A1D1A500A1396C /* SDL_test_compare.c in Sources */, + DB166D9616A1D1A500A1396C /* SDL_test_crc32.c in Sources */, + DB166D9716A1D1A500A1396C /* SDL_test_font.c in Sources */, + DB166D9816A1D1A500A1396C /* SDL_test_fuzzer.c in Sources */, + DB166D9916A1D1A500A1396C /* SDL_test_harness.c in Sources */, + DB166D9F16A1D1A500A1396C /* SDL_test_log.c in Sources */, + DB166DA016A1D1A500A1396C /* SDL_test_md5.c in Sources */, + AAF02FFA1F90092700B9A9FB /* SDL_test_memory.c in Sources */, + DB166DA116A1D1A500A1396C /* SDL_test_random.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166DC516A1D36A00A1396C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB166DD716A1D37800A1396C /* testmessage.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166DDD16A1D50C00A1396C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB166DF016A1D52500A1396C /* testrelative.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166DF416A1D57C00A1396C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB166E0716A1D59400A1396C /* testrendercopyex.c in Sources */, + F3C17C8028E410A400E1A26D /* testutils.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166E0B16A1D5AD00A1396C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB166E1E16A1D5C300A1396C /* testrendertarget.c in Sources */, + F3C17C8128E410C900E1A26D /* testutils.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166E2816A1D64D00A1396C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB166E3C16A1D66500A1396C /* testrumble.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166E3E16A1D69000A1396C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB166E5416A1D6A300A1396C /* testscale.c in Sources */, + F3C17C8228E4112900E1A26D /* testutils.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166E5816A1D6F300A1396C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB166E6A16A1D70C00A1396C /* testshader.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166E6E16A1D78400A1396C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB166E9316A1D7BC00A1396C /* testspriteminimal.c in Sources */, + F3C17C8428E4126400E1A26D /* testutils.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB166E8116A1D78C00A1396C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB166E9416A1D7C700A1396C /* teststreaming.c in Sources */, + F3C17C8528E4127D00E1A26D /* testutils.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB445EE718184B7000B306B0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB445EFB18184BB600B306B0 /* testdropfile.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB89956E18A19ABA0092407C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB89958418A19B130092407C /* testhotplug.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F35E56A3298312CB00A43A5F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F35E56D12983130F00A43A5F /* testautomation_render.c in Sources */, + F35E56E22983130F00A43A5F /* testautomation_syswm.c in Sources */, + F399C6512A7892D800C86979 /* testautomation_intrinsics.c in Sources */, + F35E56D22983130F00A43A5F /* testautomation_rwops.c in Sources */, + F35E56E32983130F00A43A5F /* testautomation_surface.c in Sources */, + F35E56DB2983130F00A43A5F /* testautomation_platform.c in Sources */, + F35E56DD2983130F00A43A5F /* testautomation_rect.c in Sources */, + F35E56D52983130F00A43A5F /* testautomation_clipboard.c in Sources */, + F35E56E52983130F00A43A5F /* testautomation_mouse.c in Sources */, + F35E56D72983130F00A43A5F /* testautomation_stdlib.c in Sources */, + F35E56D92983130F00A43A5F /* testautomation_pixels.c in Sources */, + F35E56E42983130F00A43A5F /* testautomation.c in Sources */, + F35E56CF2983130F00A43A5F /* testautomation_main.c in Sources */, + F35E56DE2983130F00A43A5F /* testautomation_joystick.c in Sources */, + F35E56D82983130F00A43A5F /* testautomation_images.c in Sources */, + F35E56DC2983130F00A43A5F /* testautomation_audio.c in Sources */, + F35E56D32983130F00A43A5F /* testautomation_math.c in Sources */, + F35E56E02983130F00A43A5F /* testautomation_sdltest.c in Sources */, + F35E56D42983130F00A43A5F /* testautomation_events.c in Sources */, + F35E56E12983130F00A43A5F /* testautomation_guid.c in Sources */, + F35E56D62983130F00A43A5F /* testautomation_timer.c in Sources */, + F35E56DA2983130F00A43A5F /* testautomation_video.c in Sources */, + F35E56D02983130F00A43A5F /* testautomation_hints.c in Sources */, + F35E56DF2983130F00A43A5F /* testautomation_keyboard.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F3C17CD828E416CF00E1A26D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F3C17CEB28E4177600E1A26D /* testgeometry.c in Sources */, + F3C17CEC28E417EB00E1A26D /* testutils.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 001799481074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = BEC566AB0761D90300A33029 /* checkkeys */; + targetProxy = 001799471074403E00F5D044 /* PBXContainerItemProxy */; + }; + 0017994C1074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = BEC566C50761D90300A33029 /* loopwave */; + targetProxy = 0017994B1074403E00F5D044 /* PBXContainerItemProxy */; + }; + 001799501074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 0017957410741F7900F5D044 /* testatomic */; + targetProxy = 0017994F1074403E00F5D044 /* PBXContainerItemProxy */; + }; + 001799521074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 00179595107421BF00F5D044 /* testaudioinfo */; + targetProxy = 001799511074403E00F5D044 /* PBXContainerItemProxy */; + }; + 0017995A1074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 00179756107431B300F5D044 /* testdraw */; + targetProxy = 001799591074403E00F5D044 /* PBXContainerItemProxy */; + }; + 0017995E1074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = BEC566FB0761D90300A33029 /* testerror */; + targetProxy = 0017995D1074403E00F5D044 /* PBXContainerItemProxy */; + }; + 001799601074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 002F340109CA1BFF00EBEB88 /* testfile */; + targetProxy = 0017995F1074403E00F5D044 /* PBXContainerItemProxy */; + }; + 001799661074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + platformFilters = ( + macos, + ); + target = 0017970910742F3200F5D044 /* testgl */; + targetProxy = 001799651074403E00F5D044 /* PBXContainerItemProxy */; + }; + 001799681074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 00179730107430D600F5D044 /* testhaptic */; + targetProxy = 001799671074403E00F5D044 /* PBXContainerItemProxy */; + }; + 0017996A1074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = BEC567230761D90400A33029 /* testthread */; + targetProxy = 001799691074403E00F5D044 /* PBXContainerItemProxy */; + }; + 0017996C1074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 002F342009CA1F0300EBEB88 /* testiconv */; + targetProxy = 0017996B1074403E00F5D044 /* PBXContainerItemProxy */; + }; + 0017996E1074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 00179776107432AE00F5D044 /* testime */; + targetProxy = 0017996D1074403E00F5D044 /* PBXContainerItemProxy */; + }; + 001799701074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 001797961074334C00F5D044 /* testintersections */; + targetProxy = 0017996F1074403E00F5D044 /* PBXContainerItemProxy */; + }; + 001799741074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = BEC5673D0761D90400A33029 /* testkeys */; + targetProxy = 001799731074403E00F5D044 /* PBXContainerItemProxy */; + }; + 001799761074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 001797B8107433C600F5D044 /* testloadso */; + targetProxy = 001799751074403E00F5D044 /* PBXContainerItemProxy */; + }; + 001799781074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = BEC5674A0761D90400A33029 /* testlock */; + targetProxy = 001799771074403E00F5D044 /* PBXContainerItemProxy */; + }; + 0017997C1074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 001797FA1074355200F5D044 /* testmultiaudio */; + targetProxy = 0017997B1074403E00F5D044 /* PBXContainerItemProxy */; + }; + 001799801074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + platformFilters = ( + macos, + ); + target = 001798781074392D00F5D044 /* testnative */; + targetProxy = 0017997F1074403E00F5D044 /* PBXContainerItemProxy */; + }; + 001799841074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 002F343C09CA1FB300EBEB88 /* testoverlay */; + targetProxy = 001799831074403E00F5D044 /* PBXContainerItemProxy */; + }; + 001799881074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 002F345909CA204F00EBEB88 /* testplatform */; + targetProxy = 001799871074403E00F5D044 /* PBXContainerItemProxy */; + }; + 0017998A1074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 0017989D107439DF00F5D044 /* testpower */; + targetProxy = 001799891074403E00F5D044 /* PBXContainerItemProxy */; + }; + 0017998C1074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 001798DA10743BEC00F5D044 /* testresample */; + targetProxy = 0017998B1074403E00F5D044 /* PBXContainerItemProxy */; + }; + 0017998E1074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = BEC567720761D90500A33029 /* testsem */; + targetProxy = 0017998D1074403E00F5D044 /* PBXContainerItemProxy */; + }; + 001799921074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 001798FE10743F1000F5D044 /* testsprite */; + targetProxy = 001799911074403E00F5D044 /* PBXContainerItemProxy */; + }; + 001799941074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = BEC5678D0761D90500A33029 /* testtimer */; + targetProxy = 001799931074403E00F5D044 /* PBXContainerItemProxy */; + }; + 001799961074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = BEC567A70761D90500A33029 /* testversion */; + targetProxy = 001799951074403E00F5D044 /* PBXContainerItemProxy */; + }; + 0017999E1074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 0017992010743FB700F5D044 /* testwm */; + targetProxy = 0017999D1074403E00F5D044 /* PBXContainerItemProxy */; + }; + 001799A21074403E00F5D044 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = BEC567EA0761D90600A33029 /* torturethread */; + targetProxy = 001799A11074403E00F5D044 /* PBXContainerItemProxy */; + }; + DB0F490517CA5249008798C5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = DB0F48D917CA51E5008798C5 /* testdrawchessboard */; + targetProxy = DB0F490417CA5249008798C5 /* PBXContainerItemProxy */; + }; + DB0F490717CA5249008798C5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = DB0F48EF17CA5212008798C5 /* testfilesystem */; + targetProxy = DB0F490617CA5249008798C5 /* PBXContainerItemProxy */; + }; + DB166D6E16A1CEAA00A1396C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = BBFC08B7164C6862003E6A99 /* testcontroller */; + targetProxy = DB166D6D16A1CEAA00A1396C /* PBXContainerItemProxy */; + }; + DB166D7016A1CEAF00A1396C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4537749112091504002F0F45 /* testshape */; + targetProxy = DB166D6F16A1CEAF00A1396C /* PBXContainerItemProxy */; + }; + DB166DD916A1D38900A1396C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = DB166DC416A1D36A00A1396C /* testmessage */; + targetProxy = DB166DD816A1D38900A1396C /* PBXContainerItemProxy */; + }; + DB166DF216A1D53700A1396C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = DB166DDC16A1D50C00A1396C /* testrelative */; + targetProxy = DB166DF116A1D53700A1396C /* PBXContainerItemProxy */; + }; + DB166E0916A1D5A400A1396C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = DB166DF316A1D57C00A1396C /* testrendercopyex */; + targetProxy = DB166E0816A1D5A400A1396C /* PBXContainerItemProxy */; + }; + DB166E2016A1D5D000A1396C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = DB166E0A16A1D5AD00A1396C /* testrendertarget */; + targetProxy = DB166E1F16A1D5D000A1396C /* PBXContainerItemProxy */; + }; + DB166E3B16A1D65A00A1396C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = DB166E2716A1D64D00A1396C /* testrumble */; + targetProxy = DB166E3A16A1D65A00A1396C /* PBXContainerItemProxy */; + }; + DB166E5616A1D6B800A1396C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = DB166E3D16A1D69000A1396C /* testscale */; + targetProxy = DB166E5516A1D6B800A1396C /* PBXContainerItemProxy */; + }; + DB166E6C16A1D72000A1396C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = DB166E5716A1D6F300A1396C /* testshader */; + targetProxy = DB166E6B16A1D72000A1396C /* PBXContainerItemProxy */; + }; + DB166E9616A1D7CD00A1396C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = DB166E6D16A1D78400A1396C /* testspriteminimal */; + targetProxy = DB166E9516A1D7CD00A1396C /* PBXContainerItemProxy */; + }; + DB166E9816A1D7CF00A1396C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = DB166E8016A1D78C00A1396C /* teststreaming */; + targetProxy = DB166E9716A1D7CF00A1396C /* PBXContainerItemProxy */; + }; + F35E56E72983133F00A43A5F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F35E56A2298312CB00A43A5F /* testautomation */; + targetProxy = F35E56E62983133F00A43A5F /* PBXContainerItemProxy */; + }; + F3E1F7FF2A78C3AD00AC76D3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = DB89956D18A19ABA0092407C /* testhotplug */; + targetProxy = F3E1F7FE2A78C3AD00AC76D3 /* PBXContainerItemProxy */; + }; + F3E1F8012A78C3BE00AC76D3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = DB445EE618184B7000B306B0 /* testdropfile */; + targetProxy = F3E1F8002A78C3BE00AC76D3 /* PBXContainerItemProxy */; + }; + F3E1F8032A78C3C500AC76D3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F3C17CDB28E416CF00E1A26D /* testgeometry */; + targetProxy = F3E1F8022A78C3C500AC76D3 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 0017958910741F7900F5D044 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testatomic; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 0017958A10741F7900F5D044 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testatomic; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 001795AA107421BF00F5D044 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testaudioinfo; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 001795AB107421BF00F5D044 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testaudioinfo; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 0017971E10742F3200F5D044 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + GCC_PREPROCESSOR_DEFINITIONS = HAVE_OPENGL; + PRODUCT_NAME = testgl; + PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTED_PLATFORMS = macosx; + }; + name = Debug; + }; + 0017971F10742F3200F5D044 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + GCC_PREPROCESSOR_DEFINITIONS = HAVE_OPENGL; + PRODUCT_NAME = testgl; + PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTED_PLATFORMS = macosx; + }; + name = Release; + }; + 00179745107430D600F5D044 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testhaptic; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 00179746107430D600F5D044 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testhaptic; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 0017976B107431B300F5D044 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testdraw; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 0017976C107431B300F5D044 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testdraw; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 0017978B107432AE00F5D044 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testime; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 0017978C107432AE00F5D044 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testime; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 001797AB1074334C00F5D044 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testintersections; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 001797AC1074334C00F5D044 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testintersections; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 001797CD107433C600F5D044 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testloadso; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 001797CE107433C600F5D044 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testloadso; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 0017980F1074355200F5D044 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testmultiaudio; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 001798101074355200F5D044 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testmultiaudio; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 001798911074392D00F5D044 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testnative; + PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTED_PLATFORMS = macosx; + }; + name = Debug; + }; + 001798921074392D00F5D044 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testnative; + PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTED_PLATFORMS = macosx; + }; + name = Release; + }; + 001798B2107439DF00F5D044 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testpower; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 001798B3107439DF00F5D044 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testpower; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 001798EF10743BEC00F5D044 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testresample; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 001798F010743BEC00F5D044 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testresample; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 0017991310743F1000F5D044 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testsprite; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 0017991410743F1000F5D044 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testsprite; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 0017993510743FB700F5D044 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testwm; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 0017993610743FB700F5D044 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testwm; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 002A85B21073008E007319AE /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F3C17C6A28E3FD4400E1A26D /* config.xcconfig */; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + GENERATE_INFOPLIST_FILE = YES; + HEADER_SEARCH_PATHS = ../../include; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + MARKETING_VERSION = 1.0; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = "$(CONFIG_FRAMEWORK_LDFLAGS)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.libsdl.$(PRODUCT_NAME)"; + SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvsimulator appletvos"; + SUPPORTS_MACCATALYST = NO; + TARGETED_DEVICE_FAMILY = "1,2,3"; + TVOS_DEPLOYMENT_TARGET = 9.0; + }; + name = Debug; + }; + 002A85B31073008E007319AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "Build All"; + }; + name = Debug; + }; + 002A85B41073008E007319AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = checkkeys; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 002A85B61073008E007319AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = loopwave; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 002A85BC1073008E007319AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testerror; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 002A85BD1073008E007319AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testfile; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 002A85C01073008E007319AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testiconv; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 002A85C21073008E007319AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testkeys; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 002A85C31073008E007319AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testlock; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 002A85C51073008E007319AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testoverlay; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 002A85C71073008E007319AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testplatform; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 002A85C81073008E007319AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testsem; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 002A85CA1073008E007319AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testthread; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 002A85CB1073008E007319AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testtimer; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 002A85CC1073008E007319AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testversion; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 002A85D11073008E007319AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = torturethread; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 002A85D41073009D007319AE /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F3C17C6A28E3FD4400E1A26D /* config.xcconfig */; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEPLOYMENT_POSTPROCESSING = YES; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + GENERATE_INFOPLIST_FILE = YES; + HEADER_SEARCH_PATHS = ../../include; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = "$(CONFIG_FRAMEWORK_LDFLAGS)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.libsdl.$(PRODUCT_NAME)"; + SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvsimulator appletvos"; + SUPPORTS_MACCATALYST = NO; + TARGETED_DEVICE_FAMILY = "1,2,3"; + TVOS_DEPLOYMENT_TARGET = 9.0; + }; + name = Release; + }; + 002A85D51073009D007319AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "Build All"; + }; + name = Release; + }; + 002A85D61073009D007319AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = checkkeys; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 002A85D81073009D007319AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = loopwave; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 002A85DE1073009D007319AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testerror; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 002A85DF1073009D007319AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testfile; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 002A85E21073009D007319AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testiconv; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 002A85E41073009D007319AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testkeys; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 002A85E51073009D007319AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testlock; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 002A85E71073009D007319AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testoverlay; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 002A85E91073009D007319AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testplatform; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 002A85EA1073009D007319AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testsem; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 002A85EC1073009D007319AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testthread; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 002A85ED1073009D007319AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testtimer; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 002A85EE1073009D007319AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testversion; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 002A85F31073009D007319AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = torturethread; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + 4537749712091509002F0F45 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testshape; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + 4537749812091509002F0F45 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testshape; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + BBFC08CB164C6862003E6A99 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_KEY_NSBluetoothAlwaysUsageDescription = "Steam Controller support"; + PRODUCT_NAME = testcontroller; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + BBFC08CC164C6862003E6A99 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_KEY_NSBluetoothAlwaysUsageDescription = "Steam Controller support"; + PRODUCT_NAME = testcontroller; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + DB0F48EA17CA51E5008798C5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testdrawchessboard; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + DB0F48EB17CA51E5008798C5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testdrawchessboard; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + DB0F48FF17CA5212008798C5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testfilesystem; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + DB0F490017CA5212008798C5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testfilesystem; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + DB166D8116A1D12400A1396C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + EXECUTABLE_PREFIX = lib; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "watchsimulator watchos macosx iphonesimulator iphoneos driverkit appletvsimulator appletvos"; + SUPPORTS_MACCATALYST = YES; + }; + name = Debug; + }; + DB166D8216A1D12400A1396C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + EXECUTABLE_PREFIX = lib; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "watchsimulator watchos macosx iphonesimulator iphoneos driverkit appletvsimulator appletvos"; + SUPPORTS_MACCATALYST = YES; + }; + name = Release; + }; + DB166DD316A1D36A00A1396C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testmessage; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + DB166DD416A1D36A00A1396C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testmessage; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + DB166DEC16A1D50C00A1396C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testrelative; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + DB166DED16A1D50C00A1396C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testrelative; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + DB166E0316A1D57C00A1396C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testrendercopyex; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + DB166E0416A1D57C00A1396C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testrendercopyex; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + DB166E1A16A1D5AD00A1396C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testrendertarget; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + DB166E1B16A1D5AD00A1396C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testrendertarget; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + DB166E3616A1D64D00A1396C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testrumble; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + DB166E3716A1D64D00A1396C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testrumble; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + DB166E5016A1D69000A1396C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testscale; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + DB166E5116A1D69000A1396C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testscale; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + DB166E6616A1D6F300A1396C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testshader; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + DB166E6716A1D6F300A1396C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testshader; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + DB166E7C16A1D78400A1396C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testspriteminimal; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + DB166E7D16A1D78400A1396C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testspriteminimal; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + DB166E8F16A1D78C00A1396C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = teststreaming; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + DB166E9016A1D78C00A1396C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = teststreaming; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + DB445EF618184B7000B306B0 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testdropfile; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + DB445EF718184B7000B306B0 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testdropfile; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + DB89957C18A19ABA0092407C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testhotplug; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + DB89957D18A19ABA0092407C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = testhotplug; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + F35E56A8298312CB00A43A5F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + F35E56A9298312CB00A43A5F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; + F3C17CE928E416D000E1A26D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Debug; + }; + F3C17CEA28E416D000E1A26D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 0017958610741F7900F5D044 /* Build configuration list for PBXNativeTarget "testatomic" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0017958910741F7900F5D044 /* Debug */, + 0017958A10741F7900F5D044 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 001795A7107421BF00F5D044 /* Build configuration list for PBXNativeTarget "testaudioinfo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 001795AA107421BF00F5D044 /* Debug */, + 001795AB107421BF00F5D044 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 0017971B10742F3200F5D044 /* Build configuration list for PBXNativeTarget "testgl" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0017971E10742F3200F5D044 /* Debug */, + 0017971F10742F3200F5D044 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 00179742107430D600F5D044 /* Build configuration list for PBXNativeTarget "testhaptic" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 00179745107430D600F5D044 /* Debug */, + 00179746107430D600F5D044 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 00179768107431B300F5D044 /* Build configuration list for PBXNativeTarget "testdraw" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0017976B107431B300F5D044 /* Debug */, + 0017976C107431B300F5D044 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 00179788107432AE00F5D044 /* Build configuration list for PBXNativeTarget "testime" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0017978B107432AE00F5D044 /* Debug */, + 0017978C107432AE00F5D044 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 001797A81074334C00F5D044 /* Build configuration list for PBXNativeTarget "testintersections" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 001797AB1074334C00F5D044 /* Debug */, + 001797AC1074334C00F5D044 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 001797CA107433C600F5D044 /* Build configuration list for PBXNativeTarget "testloadso" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 001797CD107433C600F5D044 /* Debug */, + 001797CE107433C600F5D044 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 0017980C1074355200F5D044 /* Build configuration list for PBXNativeTarget "testmultiaudio" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0017980F1074355200F5D044 /* Debug */, + 001798101074355200F5D044 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 0017988E1074392D00F5D044 /* Build configuration list for PBXNativeTarget "testnative" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 001798911074392D00F5D044 /* Debug */, + 001798921074392D00F5D044 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 001798AF107439DF00F5D044 /* Build configuration list for PBXNativeTarget "testpower" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 001798B2107439DF00F5D044 /* Debug */, + 001798B3107439DF00F5D044 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 001798EC10743BEC00F5D044 /* Build configuration list for PBXNativeTarget "testresample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 001798EF10743BEC00F5D044 /* Debug */, + 001798F010743BEC00F5D044 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 0017991010743F1000F5D044 /* Build configuration list for PBXNativeTarget "testsprite" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0017991310743F1000F5D044 /* Debug */, + 0017991410743F1000F5D044 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 0017993210743FB700F5D044 /* Build configuration list for PBXNativeTarget "testwm" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0017993510743FB700F5D044 /* Debug */, + 0017993610743FB700F5D044 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 001B593808BDB826006539E9 /* Build configuration list for PBXNativeTarget "checkkeys" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 002A85B41073008E007319AE /* Debug */, + 002A85D61073009D007319AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 001B594008BDB826006539E9 /* Build configuration list for PBXNativeTarget "loopwave" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 002A85B61073008E007319AE /* Debug */, + 002A85D81073009D007319AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 001B595008BDB826006539E9 /* Build configuration list for PBXNativeTarget "testerror" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 002A85BC1073008E007319AE /* Debug */, + 002A85DE1073009D007319AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 001B595C08BDB826006539E9 /* Build configuration list for PBXNativeTarget "testthread" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 002A85CA1073008E007319AE /* Debug */, + 002A85EC1073009D007319AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 001B596408BDB826006539E9 /* Build configuration list for PBXNativeTarget "testkeys" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 002A85C21073008E007319AE /* Debug */, + 002A85E41073009D007319AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 001B596808BDB826006539E9 /* Build configuration list for PBXNativeTarget "testlock" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 002A85C31073008E007319AE /* Debug */, + 002A85E51073009D007319AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 001B597008BDB826006539E9 /* Build configuration list for PBXNativeTarget "testsem" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 002A85C81073008E007319AE /* Debug */, + 002A85EA1073009D007319AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 001B597808BDB826006539E9 /* Build configuration list for PBXNativeTarget "testtimer" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 002A85CB1073008E007319AE /* Debug */, + 002A85ED1073009D007319AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 001B598008BDB826006539E9 /* Build configuration list for PBXNativeTarget "testversion" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 002A85CC1073008E007319AE /* Debug */, + 002A85EE1073009D007319AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 001B599408BDB826006539E9 /* Build configuration list for PBXNativeTarget "torturethread" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 002A85D11073008E007319AE /* Debug */, + 002A85F31073009D007319AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 001B599808BDB826006539E9 /* Build configuration list for PBXAggregateTarget "All" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 002A85B31073008E007319AE /* Debug */, + 002A85D51073009D007319AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 001B5A0C08BDB826006539E9 /* Build configuration list for PBXProject "SDLTest" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 002A85B21073008E007319AE /* Debug */, + 002A85D41073009D007319AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 002F340E09CA1BFF00EBEB88 /* Build configuration list for PBXNativeTarget "testfile" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 002A85BD1073008E007319AE /* Debug */, + 002A85DF1073009D007319AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 002F342D09CA1F0300EBEB88 /* Build configuration list for PBXNativeTarget "testiconv" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 002A85C01073008E007319AE /* Debug */, + 002A85E21073009D007319AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 002F344909CA1FB300EBEB88 /* Build configuration list for PBXNativeTarget "testoverlay" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 002A85C51073008E007319AE /* Debug */, + 002A85E71073009D007319AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 002F346609CA204F00EBEB88 /* Build configuration list for PBXNativeTarget "testplatform" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 002A85C71073008E007319AE /* Debug */, + 002A85E91073009D007319AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 4537749A1209150C002F0F45 /* Build configuration list for PBXNativeTarget "testshape" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4537749712091509002F0F45 /* Debug */, + 4537749812091509002F0F45 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + BBFC08CA164C6862003E6A99 /* Build configuration list for PBXNativeTarget "testcontroller" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BBFC08CB164C6862003E6A99 /* Debug */, + BBFC08CC164C6862003E6A99 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DB0F48E917CA51E5008798C5 /* Build configuration list for PBXNativeTarget "testdrawchessboard" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DB0F48EA17CA51E5008798C5 /* Debug */, + DB0F48EB17CA51E5008798C5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DB0F48FE17CA5212008798C5 /* Build configuration list for PBXNativeTarget "testfilesystem" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DB0F48FF17CA5212008798C5 /* Debug */, + DB0F490017CA5212008798C5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DB166D8016A1D12400A1396C /* Build configuration list for PBXNativeTarget "SDL3_test" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DB166D8116A1D12400A1396C /* Debug */, + DB166D8216A1D12400A1396C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DB166DD216A1D36A00A1396C /* Build configuration list for PBXNativeTarget "testmessage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DB166DD316A1D36A00A1396C /* Debug */, + DB166DD416A1D36A00A1396C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DB166DEB16A1D50C00A1396C /* Build configuration list for PBXNativeTarget "testrelative" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DB166DEC16A1D50C00A1396C /* Debug */, + DB166DED16A1D50C00A1396C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DB166E0216A1D57C00A1396C /* Build configuration list for PBXNativeTarget "testrendercopyex" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DB166E0316A1D57C00A1396C /* Debug */, + DB166E0416A1D57C00A1396C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DB166E1916A1D5AD00A1396C /* Build configuration list for PBXNativeTarget "testrendertarget" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DB166E1A16A1D5AD00A1396C /* Debug */, + DB166E1B16A1D5AD00A1396C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DB166E3516A1D64D00A1396C /* Build configuration list for PBXNativeTarget "testrumble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DB166E3616A1D64D00A1396C /* Debug */, + DB166E3716A1D64D00A1396C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DB166E4F16A1D69000A1396C /* Build configuration list for PBXNativeTarget "testscale" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DB166E5016A1D69000A1396C /* Debug */, + DB166E5116A1D69000A1396C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DB166E6516A1D6F300A1396C /* Build configuration list for PBXNativeTarget "testshader" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DB166E6616A1D6F300A1396C /* Debug */, + DB166E6716A1D6F300A1396C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DB166E7B16A1D78400A1396C /* Build configuration list for PBXNativeTarget "testspriteminimal" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DB166E7C16A1D78400A1396C /* Debug */, + DB166E7D16A1D78400A1396C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DB166E8E16A1D78C00A1396C /* Build configuration list for PBXNativeTarget "teststreaming" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DB166E8F16A1D78C00A1396C /* Debug */, + DB166E9016A1D78C00A1396C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DB445EF518184B7000B306B0 /* Build configuration list for PBXNativeTarget "testdropfile" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DB445EF618184B7000B306B0 /* Debug */, + DB445EF718184B7000B306B0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DB89957B18A19ABA0092407C /* Build configuration list for PBXNativeTarget "testhotplug" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DB89957C18A19ABA0092407C /* Debug */, + DB89957D18A19ABA0092407C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + F35E56A7298312CB00A43A5F /* Build configuration list for PBXNativeTarget "testautomation" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F35E56A8298312CB00A43A5F /* Debug */, + F35E56A9298312CB00A43A5F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + F3C17CE828E416D000E1A26D /* Build configuration list for PBXNativeTarget "testgeometry" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F3C17CE928E416D000E1A26D /* Debug */, + F3C17CEA28E416D000E1A26D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} diff --git a/vendor/sdl-3.0.0/Xcode/SDLTest/config.xcconfig b/vendor/sdl-3.0.0/Xcode/SDLTest/config.xcconfig new file mode 100644 index 0000000..6447922 --- /dev/null +++ b/vendor/sdl-3.0.0/Xcode/SDLTest/config.xcconfig @@ -0,0 +1,14 @@ +// +// config.xcconfig +// SDL tests +// + +// Configuration settings file format documentation can be found at: +// https://help.apple.com/xcode/#/dev745c5c974 + +// Include any optional config for this build +// This allows you to set DEVELOPMENT_TEAM for all targets, for example. +#include? "build.xcconfig" + +CONFIG_FRAMEWORK_LDFLAGS = -lSDL3_test + diff --git a/vendor/sdl-3.0.0/Xcode/XcodeDocSet/Doxyfile b/vendor/sdl-3.0.0/Xcode/XcodeDocSet/Doxyfile new file mode 100644 index 0000000..961ac98 --- /dev/null +++ b/vendor/sdl-3.0.0/Xcode/XcodeDocSet/Doxyfile @@ -0,0 +1,1558 @@ +# Doxyfile 1.6.1 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = SDL + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = 1.3.0 + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = YES + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it parses. +# With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this tag. +# The format is ext=language, where ext is a file extension, and language is one of +# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, +# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. Note that for custom extensions you also need to set +# FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen to replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = YES + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penality. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will rougly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = NO + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by +# doxygen. The layout file controls the global structure of the generated output files +# in an output format independent way. The create the layout file that represents +# doxygen's defaults, run doxygen with the -l option. You can optionally specify a +# file name after the option, if omitted DoxygenLayout.xml will be used as the name +# of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../../include + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.py \ + *.f90 \ + *.f \ + *.vhd \ + *.vhdl + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. + +GENERATE_DOCSET = YES + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs for SDL" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.libsdl.sdl + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = SDL.chm + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = "C:/Program Files/HTML Help Workshop/hhc.exe" + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = YES + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER +# are set, an additional index file will be generated that can be used as input for +# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated +# HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. +# For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's +# filter section matches. +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list. + +USE_INLINE_TREES = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# When the SEARCHENGINE tag is enable doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) +# there is already a search function so this one should typically +# be disabled. + +SEARCHENGINE = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = YES + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = NO + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = DECLSPEC \ + SDLCALL + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = NO + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# By default doxygen will write a font called FreeSans.ttf to the output +# directory and reference it in all dot files that doxygen generates. This +# font does not include all possible unicode characters however, so when you need +# these (or just want a differently looking font) you can specify the font name +# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = /Applications/Graphviz.app/Contents/MacOS + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 67 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 2 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/vendor/sdl-3.0.0/android-project/app/build.gradle b/vendor/sdl-3.0.0/android-project/app/build.gradle new file mode 100644 index 0000000..a158bbf --- /dev/null +++ b/vendor/sdl-3.0.0/android-project/app/build.gradle @@ -0,0 +1,76 @@ +def buildAsLibrary = project.hasProperty('BUILD_AS_LIBRARY'); +def buildAsApplication = !buildAsLibrary +if (buildAsApplication) { + apply plugin: 'com.android.application' +} +else { + apply plugin: 'com.android.library' +} + +android { + if (buildAsApplication) { + namespace "org.libsdl.app" + } + compileSdkVersion 34 + defaultConfig { + minSdkVersion 19 + targetSdkVersion 34 + versionCode 1 + versionName "1.0" + externalNativeBuild { + ndkBuild { + arguments "APP_PLATFORM=android-19" + // abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' + abiFilters 'arm64-v8a' + } + cmake { + arguments "-DANDROID_APP_PLATFORM=android-19", "-DANDROID_STL=c++_static" + // abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' + abiFilters 'arm64-v8a' + } + } + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + applicationVariants.all { variant -> + tasks["merge${variant.name.capitalize()}Assets"] + .dependsOn("externalNativeBuild${variant.name.capitalize()}") + } + if (!project.hasProperty('EXCLUDE_NATIVE_LIBS')) { + sourceSets.main { + jniLibs.srcDir 'libs' + } + externalNativeBuild { + ndkBuild { + path 'jni/Android.mk' + } + // cmake { + // path 'jni/CMakeLists.txt' + // } + } + + } + lint { + abortOnError false + } + + if (buildAsLibrary) { + libraryVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = output.outputFile + if (outputFile != null && outputFile.name.endsWith(".aar")) { + def fileName = "org.libsdl.app.aar"; + output.outputFile = new File(outputFile.parent, fileName); + } + } + } + } +} + +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') +} diff --git a/vendor/sdl-3.0.0/android-project/app/jni/Android.mk b/vendor/sdl-3.0.0/android-project/app/jni/Android.mk new file mode 100644 index 0000000..5053e7d --- /dev/null +++ b/vendor/sdl-3.0.0/android-project/app/jni/Android.mk @@ -0,0 +1 @@ +include $(call all-subdir-makefiles) diff --git a/vendor/sdl-3.0.0/android-project/app/jni/Application.mk b/vendor/sdl-3.0.0/android-project/app/jni/Application.mk new file mode 100644 index 0000000..023bc20 --- /dev/null +++ b/vendor/sdl-3.0.0/android-project/app/jni/Application.mk @@ -0,0 +1,10 @@ + +# Uncomment this if you're using STL in your project +# You can find more information here: +# https://developer.android.com/ndk/guides/cpp-support +# APP_STL := c++_shared + +APP_ABI := armeabi-v7a arm64-v8a x86 x86_64 + +# Min runtime API level +APP_PLATFORM=android-16 diff --git a/vendor/sdl-3.0.0/android-project/app/jni/CMakeLists.txt b/vendor/sdl-3.0.0/android-project/app/jni/CMakeLists.txt new file mode 100644 index 0000000..3d49cf3 --- /dev/null +++ b/vendor/sdl-3.0.0/android-project/app/jni/CMakeLists.txt @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 3.6) + +project(GAME) + +# armeabi-v7a requires cpufeatures library +# include(AndroidNdkModules) +# android_ndk_import_module_cpufeatures() + + +# SDL sources are in a subfolder named "SDL" +add_subdirectory(SDL) + +# Compilation of companion libraries +#add_subdirectory(SDL_image) +#add_subdirectory(SDL_mixer) +#add_subdirectory(SDL_ttf) + +# Your game and its CMakeLists.txt are in a subfolder named "src" +add_subdirectory(src) + diff --git a/vendor/sdl-3.0.0/android-project/app/jni/src/Android.mk b/vendor/sdl-3.0.0/android-project/app/jni/src/Android.mk new file mode 100644 index 0000000..982f661 --- /dev/null +++ b/vendor/sdl-3.0.0/android-project/app/jni/src/Android.mk @@ -0,0 +1,18 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := main + +SDL_PATH := ../SDL + +LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include + +# Add your application source files here... +LOCAL_SRC_FILES := YourSourceHere.c + +LOCAL_SHARED_LIBRARIES := SDL3 + +LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -lOpenSLES -llog -landroid + +include $(BUILD_SHARED_LIBRARY) diff --git a/vendor/sdl-3.0.0/android-project/app/jni/src/CMakeLists.txt b/vendor/sdl-3.0.0/android-project/app/jni/src/CMakeLists.txt new file mode 100644 index 0000000..aaac0c8 --- /dev/null +++ b/vendor/sdl-3.0.0/android-project/app/jni/src/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.6) + +project(MY_APP) + +find_library(SDL3 SDL3) + +add_library(main SHARED) + +target_sources(main PRIVATE YourSourceHere.c) + +target_link_libraries(main SDL3) + + diff --git a/vendor/sdl-3.0.0/android-project/app/proguard-rules.pro b/vendor/sdl-3.0.0/android-project/app/proguard-rules.pro new file mode 100644 index 0000000..eaf0e91 --- /dev/null +++ b/vendor/sdl-3.0.0/android-project/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in [sdk]/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/vendor/sdl-3.0.0/android-project/app/src/main/AndroidManifest.xml b/vendor/sdl-3.0.0/android-project/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e0d0334 --- /dev/null +++ b/vendor/sdl-3.0.0/android-project/app/src/main/AndroidManifest.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/HIDDevice.java b/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/HIDDevice.java new file mode 100644 index 0000000..f960953 --- /dev/null +++ b/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/HIDDevice.java @@ -0,0 +1,21 @@ +package org.libsdl.app; + +import android.hardware.usb.UsbDevice; + +interface HIDDevice +{ + public int getId(); + public int getVendorId(); + public int getProductId(); + public String getSerialNumber(); + public int getVersion(); + public String getManufacturerName(); + public String getProductName(); + public UsbDevice getDevice(); + public boolean open(); + public int writeReport(byte[] report, boolean feature); + public boolean readReport(byte[] report, boolean feature); + public void setFrozen(boolean frozen); + public void close(); + public void shutdown(); +} diff --git a/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/HIDDeviceBLESteamController.java b/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/HIDDeviceBLESteamController.java new file mode 100644 index 0000000..a7b85d0 --- /dev/null +++ b/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/HIDDeviceBLESteamController.java @@ -0,0 +1,645 @@ +package org.libsdl.app; + +import android.content.Context; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothGatt; +import android.bluetooth.BluetoothGattCallback; +import android.bluetooth.BluetoothGattCharacteristic; +import android.bluetooth.BluetoothGattDescriptor; +import android.bluetooth.BluetoothManager; +import android.bluetooth.BluetoothProfile; +import android.bluetooth.BluetoothGattService; +import android.hardware.usb.UsbDevice; +import android.os.Handler; +import android.os.Looper; +import android.util.Log; +import android.os.*; + +//import com.android.internal.util.HexDump; + +import java.lang.Runnable; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.UUID; + +class HIDDeviceBLESteamController extends BluetoothGattCallback implements HIDDevice { + + private static final String TAG = "hidapi"; + private HIDDeviceManager mManager; + private BluetoothDevice mDevice; + private int mDeviceId; + private BluetoothGatt mGatt; + private boolean mIsRegistered = false; + private boolean mIsConnected = false; + private boolean mIsChromebook = false; + private boolean mIsReconnecting = false; + private boolean mFrozen = false; + private LinkedList mOperations; + GattOperation mCurrentOperation = null; + private Handler mHandler; + + private static final int TRANSPORT_AUTO = 0; + private static final int TRANSPORT_BREDR = 1; + private static final int TRANSPORT_LE = 2; + + private static final int CHROMEBOOK_CONNECTION_CHECK_INTERVAL = 10000; + + static public final UUID steamControllerService = UUID.fromString("100F6C32-1735-4313-B402-38567131E5F3"); + static public final UUID inputCharacteristic = UUID.fromString("100F6C33-1735-4313-B402-38567131E5F3"); + static public final UUID reportCharacteristic = UUID.fromString("100F6C34-1735-4313-B402-38567131E5F3"); + static private final byte[] enterValveMode = new byte[] { (byte)0xC0, (byte)0x87, 0x03, 0x08, 0x07, 0x00 }; + + static class GattOperation { + private enum Operation { + CHR_READ, + CHR_WRITE, + ENABLE_NOTIFICATION + } + + Operation mOp; + UUID mUuid; + byte[] mValue; + BluetoothGatt mGatt; + boolean mResult = true; + + private GattOperation(BluetoothGatt gatt, GattOperation.Operation operation, UUID uuid) { + mGatt = gatt; + mOp = operation; + mUuid = uuid; + } + + private GattOperation(BluetoothGatt gatt, GattOperation.Operation operation, UUID uuid, byte[] value) { + mGatt = gatt; + mOp = operation; + mUuid = uuid; + mValue = value; + } + + public void run() { + // This is executed in main thread + BluetoothGattCharacteristic chr; + + switch (mOp) { + case CHR_READ: + chr = getCharacteristic(mUuid); + //Log.v(TAG, "Reading characteristic " + chr.getUuid()); + if (!mGatt.readCharacteristic(chr)) { + Log.e(TAG, "Unable to read characteristic " + mUuid.toString()); + mResult = false; + break; + } + mResult = true; + break; + case CHR_WRITE: + chr = getCharacteristic(mUuid); + //Log.v(TAG, "Writing characteristic " + chr.getUuid() + " value=" + HexDump.toHexString(value)); + chr.setValue(mValue); + if (!mGatt.writeCharacteristic(chr)) { + Log.e(TAG, "Unable to write characteristic " + mUuid.toString()); + mResult = false; + break; + } + mResult = true; + break; + case ENABLE_NOTIFICATION: + chr = getCharacteristic(mUuid); + //Log.v(TAG, "Writing descriptor of " + chr.getUuid()); + if (chr != null) { + BluetoothGattDescriptor cccd = chr.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb")); + if (cccd != null) { + int properties = chr.getProperties(); + byte[] value; + if ((properties & BluetoothGattCharacteristic.PROPERTY_NOTIFY) == BluetoothGattCharacteristic.PROPERTY_NOTIFY) { + value = BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE; + } else if ((properties & BluetoothGattCharacteristic.PROPERTY_INDICATE) == BluetoothGattCharacteristic.PROPERTY_INDICATE) { + value = BluetoothGattDescriptor.ENABLE_INDICATION_VALUE; + } else { + Log.e(TAG, "Unable to start notifications on input characteristic"); + mResult = false; + return; + } + + mGatt.setCharacteristicNotification(chr, true); + cccd.setValue(value); + if (!mGatt.writeDescriptor(cccd)) { + Log.e(TAG, "Unable to write descriptor " + mUuid.toString()); + mResult = false; + return; + } + mResult = true; + } + } + } + } + + public boolean finish() { + return mResult; + } + + private BluetoothGattCharacteristic getCharacteristic(UUID uuid) { + BluetoothGattService valveService = mGatt.getService(steamControllerService); + if (valveService == null) + return null; + return valveService.getCharacteristic(uuid); + } + + static public GattOperation readCharacteristic(BluetoothGatt gatt, UUID uuid) { + return new GattOperation(gatt, Operation.CHR_READ, uuid); + } + + static public GattOperation writeCharacteristic(BluetoothGatt gatt, UUID uuid, byte[] value) { + return new GattOperation(gatt, Operation.CHR_WRITE, uuid, value); + } + + static public GattOperation enableNotification(BluetoothGatt gatt, UUID uuid) { + return new GattOperation(gatt, Operation.ENABLE_NOTIFICATION, uuid); + } + } + + public HIDDeviceBLESteamController(HIDDeviceManager manager, BluetoothDevice device) { + mManager = manager; + mDevice = device; + mDeviceId = mManager.getDeviceIDForIdentifier(getIdentifier()); + mIsRegistered = false; + mIsChromebook = mManager.getContext().getPackageManager().hasSystemFeature("org.chromium.arc.device_management"); + mOperations = new LinkedList(); + mHandler = new Handler(Looper.getMainLooper()); + + mGatt = connectGatt(); + // final HIDDeviceBLESteamController finalThis = this; + // mHandler.postDelayed(new Runnable() { + // @Override + // public void run() { + // finalThis.checkConnectionForChromebookIssue(); + // } + // }, CHROMEBOOK_CONNECTION_CHECK_INTERVAL); + } + + public String getIdentifier() { + return String.format("SteamController.%s", mDevice.getAddress()); + } + + public BluetoothGatt getGatt() { + return mGatt; + } + + // Because on Chromebooks we show up as a dual-mode device, it will attempt to connect TRANSPORT_AUTO, which will use TRANSPORT_BREDR instead + // of TRANSPORT_LE. Let's force ourselves to connect low energy. + private BluetoothGatt connectGatt(boolean managed) { + if (Build.VERSION.SDK_INT >= 23 /* Android 6.0 (M) */) { + try { + return mDevice.connectGatt(mManager.getContext(), managed, this, TRANSPORT_LE); + } catch (Exception e) { + return mDevice.connectGatt(mManager.getContext(), managed, this); + } + } else { + return mDevice.connectGatt(mManager.getContext(), managed, this); + } + } + + private BluetoothGatt connectGatt() { + return connectGatt(false); + } + + protected int getConnectionState() { + + Context context = mManager.getContext(); + if (context == null) { + // We are lacking any context to get our Bluetooth information. We'll just assume disconnected. + return BluetoothProfile.STATE_DISCONNECTED; + } + + BluetoothManager btManager = (BluetoothManager)context.getSystemService(Context.BLUETOOTH_SERVICE); + if (btManager == null) { + // This device doesn't support Bluetooth. We should never be here, because how did + // we instantiate a device to start with? + return BluetoothProfile.STATE_DISCONNECTED; + } + + return btManager.getConnectionState(mDevice, BluetoothProfile.GATT); + } + + public void reconnect() { + + if (getConnectionState() != BluetoothProfile.STATE_CONNECTED) { + mGatt.disconnect(); + mGatt = connectGatt(); + } + + } + + protected void checkConnectionForChromebookIssue() { + if (!mIsChromebook) { + // We only do this on Chromebooks, because otherwise it's really annoying to just attempt + // over and over. + return; + } + + int connectionState = getConnectionState(); + + switch (connectionState) { + case BluetoothProfile.STATE_CONNECTED: + if (!mIsConnected) { + // We are in the Bad Chromebook Place. We can force a disconnect + // to try to recover. + Log.v(TAG, "Chromebook: We are in a very bad state; the controller shows as connected in the underlying Bluetooth layer, but we never received a callback. Forcing a reconnect."); + mIsReconnecting = true; + mGatt.disconnect(); + mGatt = connectGatt(false); + break; + } + else if (!isRegistered()) { + if (mGatt.getServices().size() > 0) { + Log.v(TAG, "Chromebook: We are connected to a controller, but never got our registration. Trying to recover."); + probeService(this); + } + else { + Log.v(TAG, "Chromebook: We are connected to a controller, but never discovered services. Trying to recover."); + mIsReconnecting = true; + mGatt.disconnect(); + mGatt = connectGatt(false); + break; + } + } + else { + Log.v(TAG, "Chromebook: We are connected, and registered. Everything's good!"); + return; + } + break; + + case BluetoothProfile.STATE_DISCONNECTED: + Log.v(TAG, "Chromebook: We have either been disconnected, or the Chromebook BtGatt.ContextMap bug has bitten us. Attempting a disconnect/reconnect, but we may not be able to recover."); + + mIsReconnecting = true; + mGatt.disconnect(); + mGatt = connectGatt(false); + break; + + case BluetoothProfile.STATE_CONNECTING: + Log.v(TAG, "Chromebook: We're still trying to connect. Waiting a bit longer."); + break; + } + + final HIDDeviceBLESteamController finalThis = this; + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finalThis.checkConnectionForChromebookIssue(); + } + }, CHROMEBOOK_CONNECTION_CHECK_INTERVAL); + } + + private boolean isRegistered() { + return mIsRegistered; + } + + private void setRegistered() { + mIsRegistered = true; + } + + private boolean probeService(HIDDeviceBLESteamController controller) { + + if (isRegistered()) { + return true; + } + + if (!mIsConnected) { + return false; + } + + Log.v(TAG, "probeService controller=" + controller); + + for (BluetoothGattService service : mGatt.getServices()) { + if (service.getUuid().equals(steamControllerService)) { + Log.v(TAG, "Found Valve steam controller service " + service.getUuid()); + + for (BluetoothGattCharacteristic chr : service.getCharacteristics()) { + if (chr.getUuid().equals(inputCharacteristic)) { + Log.v(TAG, "Found input characteristic"); + // Start notifications + BluetoothGattDescriptor cccd = chr.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb")); + if (cccd != null) { + enableNotification(chr.getUuid()); + } + } + } + return true; + } + } + + if ((mGatt.getServices().size() == 0) && mIsChromebook && !mIsReconnecting) { + Log.e(TAG, "Chromebook: Discovered services were empty; this almost certainly means the BtGatt.ContextMap bug has bitten us."); + mIsConnected = false; + mIsReconnecting = true; + mGatt.disconnect(); + mGatt = connectGatt(false); + } + + return false; + } + + ////////////////////////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////////////////////////// + + private void finishCurrentGattOperation() { + GattOperation op = null; + synchronized (mOperations) { + if (mCurrentOperation != null) { + op = mCurrentOperation; + mCurrentOperation = null; + } + } + if (op != null) { + boolean result = op.finish(); // TODO: Maybe in main thread as well? + + // Our operation failed, let's add it back to the beginning of our queue. + if (!result) { + mOperations.addFirst(op); + } + } + executeNextGattOperation(); + } + + private void executeNextGattOperation() { + synchronized (mOperations) { + if (mCurrentOperation != null) + return; + + if (mOperations.isEmpty()) + return; + + mCurrentOperation = mOperations.removeFirst(); + } + + // Run in main thread + mHandler.post(new Runnable() { + @Override + public void run() { + synchronized (mOperations) { + if (mCurrentOperation == null) { + Log.e(TAG, "Current operation null in executor?"); + return; + } + + mCurrentOperation.run(); + // now wait for the GATT callback and when it comes, finish this operation + } + } + }); + } + + private void queueGattOperation(GattOperation op) { + synchronized (mOperations) { + mOperations.add(op); + } + executeNextGattOperation(); + } + + private void enableNotification(UUID chrUuid) { + GattOperation op = HIDDeviceBLESteamController.GattOperation.enableNotification(mGatt, chrUuid); + queueGattOperation(op); + } + + public void writeCharacteristic(UUID uuid, byte[] value) { + GattOperation op = HIDDeviceBLESteamController.GattOperation.writeCharacteristic(mGatt, uuid, value); + queueGattOperation(op); + } + + public void readCharacteristic(UUID uuid) { + GattOperation op = HIDDeviceBLESteamController.GattOperation.readCharacteristic(mGatt, uuid); + queueGattOperation(op); + } + + ////////////////////////////////////////////////////////////////////////////////////////////////////// + ////////////// BluetoothGattCallback overridden methods + ////////////////////////////////////////////////////////////////////////////////////////////////////// + + public void onConnectionStateChange(BluetoothGatt g, int status, int newState) { + //Log.v(TAG, "onConnectionStateChange status=" + status + " newState=" + newState); + mIsReconnecting = false; + if (newState == 2) { + mIsConnected = true; + // Run directly, without GattOperation + if (!isRegistered()) { + mHandler.post(new Runnable() { + @Override + public void run() { + mGatt.discoverServices(); + } + }); + } + } + else if (newState == 0) { + mIsConnected = false; + } + + // Disconnection is handled in SteamLink using the ACTION_ACL_DISCONNECTED Intent. + } + + public void onServicesDiscovered(BluetoothGatt gatt, int status) { + //Log.v(TAG, "onServicesDiscovered status=" + status); + if (status == 0) { + if (gatt.getServices().size() == 0) { + Log.v(TAG, "onServicesDiscovered returned zero services; something has gone horribly wrong down in Android's Bluetooth stack."); + mIsReconnecting = true; + mIsConnected = false; + gatt.disconnect(); + mGatt = connectGatt(false); + } + else { + probeService(this); + } + } + } + + public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { + //Log.v(TAG, "onCharacteristicRead status=" + status + " uuid=" + characteristic.getUuid()); + + if (characteristic.getUuid().equals(reportCharacteristic) && !mFrozen) { + mManager.HIDDeviceReportResponse(getId(), characteristic.getValue()); + } + + finishCurrentGattOperation(); + } + + public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { + //Log.v(TAG, "onCharacteristicWrite status=" + status + " uuid=" + characteristic.getUuid()); + + if (characteristic.getUuid().equals(reportCharacteristic)) { + // Only register controller with the native side once it has been fully configured + if (!isRegistered()) { + Log.v(TAG, "Registering Steam Controller with ID: " + getId()); + mManager.HIDDeviceConnected(getId(), getIdentifier(), getVendorId(), getProductId(), getSerialNumber(), getVersion(), getManufacturerName(), getProductName(), 0, 0, 0, 0); + setRegistered(); + } + } + + finishCurrentGattOperation(); + } + + public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { + // Enable this for verbose logging of controller input reports + //Log.v(TAG, "onCharacteristicChanged uuid=" + characteristic.getUuid() + " data=" + HexDump.dumpHexString(characteristic.getValue())); + + if (characteristic.getUuid().equals(inputCharacteristic) && !mFrozen) { + mManager.HIDDeviceInputReport(getId(), characteristic.getValue()); + } + } + + public void onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) { + //Log.v(TAG, "onDescriptorRead status=" + status); + } + + public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) { + BluetoothGattCharacteristic chr = descriptor.getCharacteristic(); + //Log.v(TAG, "onDescriptorWrite status=" + status + " uuid=" + chr.getUuid() + " descriptor=" + descriptor.getUuid()); + + if (chr.getUuid().equals(inputCharacteristic)) { + boolean hasWrittenInputDescriptor = true; + BluetoothGattCharacteristic reportChr = chr.getService().getCharacteristic(reportCharacteristic); + if (reportChr != null) { + Log.v(TAG, "Writing report characteristic to enter valve mode"); + reportChr.setValue(enterValveMode); + gatt.writeCharacteristic(reportChr); + } + } + + finishCurrentGattOperation(); + } + + public void onReliableWriteCompleted(BluetoothGatt gatt, int status) { + //Log.v(TAG, "onReliableWriteCompleted status=" + status); + } + + public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) { + //Log.v(TAG, "onReadRemoteRssi status=" + status); + } + + public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) { + //Log.v(TAG, "onMtuChanged status=" + status); + } + + ////////////////////////////////////////////////////////////////////////////////////////////////////// + //////// Public API + ////////////////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public int getId() { + return mDeviceId; + } + + @Override + public int getVendorId() { + // Valve Corporation + final int VALVE_USB_VID = 0x28DE; + return VALVE_USB_VID; + } + + @Override + public int getProductId() { + // We don't have an easy way to query from the Bluetooth device, but we know what it is + final int D0G_BLE2_PID = 0x1106; + return D0G_BLE2_PID; + } + + @Override + public String getSerialNumber() { + // This will be read later via feature report by Steam + return "12345"; + } + + @Override + public int getVersion() { + return 0; + } + + @Override + public String getManufacturerName() { + return "Valve Corporation"; + } + + @Override + public String getProductName() { + return "Steam Controller"; + } + + @Override + public UsbDevice getDevice() { + return null; + } + + @Override + public boolean open() { + return true; + } + + @Override + public int writeReport(byte[] report, boolean feature) { + if (!isRegistered()) { + Log.e(TAG, "Attempted writeReport before Steam Controller is registered!"); + if (mIsConnected) { + probeService(this); + } + return -1; + } + + if (feature) { + // We need to skip the first byte, as that doesn't go over the air + byte[] actual_report = Arrays.copyOfRange(report, 1, report.length - 1); + //Log.v(TAG, "writeFeatureReport " + HexDump.dumpHexString(actual_report)); + writeCharacteristic(reportCharacteristic, actual_report); + return report.length; + } else { + //Log.v(TAG, "writeOutputReport " + HexDump.dumpHexString(report)); + writeCharacteristic(reportCharacteristic, report); + return report.length; + } + } + + @Override + public boolean readReport(byte[] report, boolean feature) { + if (!isRegistered()) { + Log.e(TAG, "Attempted readReport before Steam Controller is registered!"); + if (mIsConnected) { + probeService(this); + } + return false; + } + + if (feature) { + readCharacteristic(reportCharacteristic); + return true; + } else { + // Not implemented + return false; + } + } + + @Override + public void close() { + } + + @Override + public void setFrozen(boolean frozen) { + mFrozen = frozen; + } + + @Override + public void shutdown() { + close(); + + BluetoothGatt g = mGatt; + if (g != null) { + g.disconnect(); + g.close(); + mGatt = null; + } + mManager = null; + mIsRegistered = false; + mIsConnected = false; + mOperations.clear(); + } + +} + diff --git a/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java b/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java new file mode 100644 index 0000000..42e6694 --- /dev/null +++ b/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java @@ -0,0 +1,668 @@ +package org.libsdl.app; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.PendingIntent; +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothManager; +import android.bluetooth.BluetoothProfile; +import android.os.Build; +import android.util.Log; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.hardware.usb.*; +import android.os.Handler; +import android.os.Looper; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +public class HIDDeviceManager { + private static final String TAG = "hidapi"; + private static final String ACTION_USB_PERMISSION = "org.libsdl.app.USB_PERMISSION"; + + private static HIDDeviceManager sManager; + private static int sManagerRefCount = 0; + + public static HIDDeviceManager acquire(Context context) { + if (sManagerRefCount == 0) { + sManager = new HIDDeviceManager(context); + } + ++sManagerRefCount; + return sManager; + } + + public static void release(HIDDeviceManager manager) { + if (manager == sManager) { + --sManagerRefCount; + if (sManagerRefCount == 0) { + sManager.close(); + sManager = null; + } + } + } + + private Context mContext; + private HashMap mDevicesById = new HashMap(); + private HashMap mBluetoothDevices = new HashMap(); + private int mNextDeviceId = 0; + private SharedPreferences mSharedPreferences = null; + private boolean mIsChromebook = false; + private UsbManager mUsbManager; + private Handler mHandler; + private BluetoothManager mBluetoothManager; + private List mLastBluetoothDevices; + + private final BroadcastReceiver mUsbBroadcast = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action.equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) { + UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); + handleUsbDeviceAttached(usbDevice); + } else if (action.equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) { + UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); + handleUsbDeviceDetached(usbDevice); + } else if (action.equals(HIDDeviceManager.ACTION_USB_PERMISSION)) { + UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); + handleUsbDevicePermission(usbDevice, intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)); + } + } + }; + + private final BroadcastReceiver mBluetoothBroadcast = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + // Bluetooth device was connected. If it was a Steam Controller, handle it + if (action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)) { + BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); + Log.d(TAG, "Bluetooth device connected: " + device); + + if (isSteamController(device)) { + connectBluetoothDevice(device); + } + } + + // Bluetooth device was disconnected, remove from controller manager (if any) + if (action.equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)) { + BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); + Log.d(TAG, "Bluetooth device disconnected: " + device); + + disconnectBluetoothDevice(device); + } + } + }; + + private HIDDeviceManager(final Context context) { + mContext = context; + + HIDDeviceRegisterCallback(); + + mSharedPreferences = mContext.getSharedPreferences("hidapi", Context.MODE_PRIVATE); + mIsChromebook = mContext.getPackageManager().hasSystemFeature("org.chromium.arc.device_management"); + +// if (shouldClear) { +// SharedPreferences.Editor spedit = mSharedPreferences.edit(); +// spedit.clear(); +// spedit.commit(); +// } +// else + { + mNextDeviceId = mSharedPreferences.getInt("next_device_id", 0); + } + } + + public Context getContext() { + return mContext; + } + + public int getDeviceIDForIdentifier(String identifier) { + SharedPreferences.Editor spedit = mSharedPreferences.edit(); + + int result = mSharedPreferences.getInt(identifier, 0); + if (result == 0) { + result = mNextDeviceId++; + spedit.putInt("next_device_id", mNextDeviceId); + } + + spedit.putInt(identifier, result); + spedit.commit(); + return result; + } + + private void initializeUSB() { + mUsbManager = (UsbManager)mContext.getSystemService(Context.USB_SERVICE); + if (mUsbManager == null) { + return; + } + + /* + // Logging + for (UsbDevice device : mUsbManager.getDeviceList().values()) { + Log.i(TAG,"Path: " + device.getDeviceName()); + Log.i(TAG,"Manufacturer: " + device.getManufacturerName()); + Log.i(TAG,"Product: " + device.getProductName()); + Log.i(TAG,"ID: " + device.getDeviceId()); + Log.i(TAG,"Class: " + device.getDeviceClass()); + Log.i(TAG,"Protocol: " + device.getDeviceProtocol()); + Log.i(TAG,"Vendor ID " + device.getVendorId()); + Log.i(TAG,"Product ID: " + device.getProductId()); + Log.i(TAG,"Interface count: " + device.getInterfaceCount()); + Log.i(TAG,"---------------------------------------"); + + // Get interface details + for (int index = 0; index < device.getInterfaceCount(); index++) { + UsbInterface mUsbInterface = device.getInterface(index); + Log.i(TAG," ***** *****"); + Log.i(TAG," Interface index: " + index); + Log.i(TAG," Interface ID: " + mUsbInterface.getId()); + Log.i(TAG," Interface class: " + mUsbInterface.getInterfaceClass()); + Log.i(TAG," Interface subclass: " + mUsbInterface.getInterfaceSubclass()); + Log.i(TAG," Interface protocol: " + mUsbInterface.getInterfaceProtocol()); + Log.i(TAG," Endpoint count: " + mUsbInterface.getEndpointCount()); + + // Get endpoint details + for (int epi = 0; epi < mUsbInterface.getEndpointCount(); epi++) + { + UsbEndpoint mEndpoint = mUsbInterface.getEndpoint(epi); + Log.i(TAG," ++++ ++++ ++++"); + Log.i(TAG," Endpoint index: " + epi); + Log.i(TAG," Attributes: " + mEndpoint.getAttributes()); + Log.i(TAG," Direction: " + mEndpoint.getDirection()); + Log.i(TAG," Number: " + mEndpoint.getEndpointNumber()); + Log.i(TAG," Interval: " + mEndpoint.getInterval()); + Log.i(TAG," Packet size: " + mEndpoint.getMaxPacketSize()); + Log.i(TAG," Type: " + mEndpoint.getType()); + } + } + } + Log.i(TAG," No more devices connected."); + */ + + // Register for USB broadcasts and permission completions + IntentFilter filter = new IntentFilter(); + filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED); + filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED); + filter.addAction(HIDDeviceManager.ACTION_USB_PERMISSION); + mContext.registerReceiver(mUsbBroadcast, filter); + + for (UsbDevice usbDevice : mUsbManager.getDeviceList().values()) { + handleUsbDeviceAttached(usbDevice); + } + } + + UsbManager getUSBManager() { + return mUsbManager; + } + + private void shutdownUSB() { + try { + mContext.unregisterReceiver(mUsbBroadcast); + } catch (Exception e) { + // We may not have registered, that's okay + } + } + + private boolean isHIDDeviceInterface(UsbDevice usbDevice, UsbInterface usbInterface) { + if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_HID) { + return true; + } + if (isXbox360Controller(usbDevice, usbInterface) || isXboxOneController(usbDevice, usbInterface)) { + return true; + } + return false; + } + + private boolean isXbox360Controller(UsbDevice usbDevice, UsbInterface usbInterface) { + final int XB360_IFACE_SUBCLASS = 93; + final int XB360_IFACE_PROTOCOL = 1; // Wired + final int XB360W_IFACE_PROTOCOL = 129; // Wireless + final int[] SUPPORTED_VENDORS = { + 0x0079, // GPD Win 2 + 0x044f, // Thrustmaster + 0x045e, // Microsoft + 0x046d, // Logitech + 0x056e, // Elecom + 0x06a3, // Saitek + 0x0738, // Mad Catz + 0x07ff, // Mad Catz + 0x0e6f, // PDP + 0x0f0d, // Hori + 0x1038, // SteelSeries + 0x11c9, // Nacon + 0x12ab, // Unknown + 0x1430, // RedOctane + 0x146b, // BigBen + 0x1532, // Razer Sabertooth + 0x15e4, // Numark + 0x162e, // Joytech + 0x1689, // Razer Onza + 0x1949, // Lab126, Inc. + 0x1bad, // Harmonix + 0x20d6, // PowerA + 0x24c6, // PowerA + 0x2c22, // Qanba + 0x2dc8, // 8BitDo + 0x9886, // ASTRO Gaming + }; + + if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_VENDOR_SPEC && + usbInterface.getInterfaceSubclass() == XB360_IFACE_SUBCLASS && + (usbInterface.getInterfaceProtocol() == XB360_IFACE_PROTOCOL || + usbInterface.getInterfaceProtocol() == XB360W_IFACE_PROTOCOL)) { + int vendor_id = usbDevice.getVendorId(); + for (int supportedVid : SUPPORTED_VENDORS) { + if (vendor_id == supportedVid) { + return true; + } + } + } + return false; + } + + private boolean isXboxOneController(UsbDevice usbDevice, UsbInterface usbInterface) { + final int XB1_IFACE_SUBCLASS = 71; + final int XB1_IFACE_PROTOCOL = 208; + final int[] SUPPORTED_VENDORS = { + 0x03f0, // HP + 0x044f, // Thrustmaster + 0x045e, // Microsoft + 0x0738, // Mad Catz + 0x0e6f, // PDP + 0x0f0d, // Hori + 0x10f5, // Turtle Beach + 0x1532, // Razer Wildcat + 0x20d6, // PowerA + 0x24c6, // PowerA + 0x2dc8, // 8BitDo + 0x2e24, // Hyperkin + 0x3537, // GameSir + }; + + if (usbInterface.getId() == 0 && + usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_VENDOR_SPEC && + usbInterface.getInterfaceSubclass() == XB1_IFACE_SUBCLASS && + usbInterface.getInterfaceProtocol() == XB1_IFACE_PROTOCOL) { + int vendor_id = usbDevice.getVendorId(); + for (int supportedVid : SUPPORTED_VENDORS) { + if (vendor_id == supportedVid) { + return true; + } + } + } + return false; + } + + private void handleUsbDeviceAttached(UsbDevice usbDevice) { + connectHIDDeviceUSB(usbDevice); + } + + private void handleUsbDeviceDetached(UsbDevice usbDevice) { + List devices = new ArrayList(); + for (HIDDevice device : mDevicesById.values()) { + if (usbDevice.equals(device.getDevice())) { + devices.add(device.getId()); + } + } + for (int id : devices) { + HIDDevice device = mDevicesById.get(id); + mDevicesById.remove(id); + device.shutdown(); + HIDDeviceDisconnected(id); + } + } + + private void handleUsbDevicePermission(UsbDevice usbDevice, boolean permission_granted) { + for (HIDDevice device : mDevicesById.values()) { + if (usbDevice.equals(device.getDevice())) { + boolean opened = false; + if (permission_granted) { + opened = device.open(); + } + HIDDeviceOpenResult(device.getId(), opened); + } + } + } + + private void connectHIDDeviceUSB(UsbDevice usbDevice) { + synchronized (this) { + int interface_mask = 0; + for (int interface_index = 0; interface_index < usbDevice.getInterfaceCount(); interface_index++) { + UsbInterface usbInterface = usbDevice.getInterface(interface_index); + if (isHIDDeviceInterface(usbDevice, usbInterface)) { + // Check to see if we've already added this interface + // This happens with the Xbox Series X controller which has a duplicate interface 0, which is inactive + int interface_id = usbInterface.getId(); + if ((interface_mask & (1 << interface_id)) != 0) { + continue; + } + interface_mask |= (1 << interface_id); + + HIDDeviceUSB device = new HIDDeviceUSB(this, usbDevice, interface_index); + int id = device.getId(); + mDevicesById.put(id, device); + HIDDeviceConnected(id, device.getIdentifier(), device.getVendorId(), device.getProductId(), device.getSerialNumber(), device.getVersion(), device.getManufacturerName(), device.getProductName(), usbInterface.getId(), usbInterface.getInterfaceClass(), usbInterface.getInterfaceSubclass(), usbInterface.getInterfaceProtocol()); + } + } + } + } + + private void initializeBluetooth() { + Log.d(TAG, "Initializing Bluetooth"); + + if (Build.VERSION.SDK_INT <= 30 /* Android 11.0 (R) */ && + mContext.getPackageManager().checkPermission(android.Manifest.permission.BLUETOOTH, mContext.getPackageName()) != PackageManager.PERMISSION_GRANTED) { + Log.d(TAG, "Couldn't initialize Bluetooth, missing android.permission.BLUETOOTH"); + return; + } + + if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE) || (Build.VERSION.SDK_INT < 18 /* Android 4.3 (JELLY_BEAN_MR2) */)) { + Log.d(TAG, "Couldn't initialize Bluetooth, this version of Android does not support Bluetooth LE"); + return; + } + + // Find bonded bluetooth controllers and create SteamControllers for them + mBluetoothManager = (BluetoothManager)mContext.getSystemService(Context.BLUETOOTH_SERVICE); + if (mBluetoothManager == null) { + // This device doesn't support Bluetooth. + return; + } + + BluetoothAdapter btAdapter = mBluetoothManager.getAdapter(); + if (btAdapter == null) { + // This device has Bluetooth support in the codebase, but has no available adapters. + return; + } + + // Get our bonded devices. + for (BluetoothDevice device : btAdapter.getBondedDevices()) { + + Log.d(TAG, "Bluetooth device available: " + device); + if (isSteamController(device)) { + connectBluetoothDevice(device); + } + + } + + // NOTE: These don't work on Chromebooks, to my undying dismay. + IntentFilter filter = new IntentFilter(); + filter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED); + filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED); + mContext.registerReceiver(mBluetoothBroadcast, filter); + + if (mIsChromebook) { + mHandler = new Handler(Looper.getMainLooper()); + mLastBluetoothDevices = new ArrayList(); + + // final HIDDeviceManager finalThis = this; + // mHandler.postDelayed(new Runnable() { + // @Override + // public void run() { + // finalThis.chromebookConnectionHandler(); + // } + // }, 5000); + } + } + + private void shutdownBluetooth() { + try { + mContext.unregisterReceiver(mBluetoothBroadcast); + } catch (Exception e) { + // We may not have registered, that's okay + } + } + + // Chromebooks do not pass along ACTION_ACL_CONNECTED / ACTION_ACL_DISCONNECTED properly. + // This function provides a sort of dummy version of that, watching for changes in the + // connected devices and attempting to add controllers as things change. + public void chromebookConnectionHandler() { + if (!mIsChromebook) { + return; + } + + ArrayList disconnected = new ArrayList(); + ArrayList connected = new ArrayList(); + + List currentConnected = mBluetoothManager.getConnectedDevices(BluetoothProfile.GATT); + + for (BluetoothDevice bluetoothDevice : currentConnected) { + if (!mLastBluetoothDevices.contains(bluetoothDevice)) { + connected.add(bluetoothDevice); + } + } + for (BluetoothDevice bluetoothDevice : mLastBluetoothDevices) { + if (!currentConnected.contains(bluetoothDevice)) { + disconnected.add(bluetoothDevice); + } + } + + mLastBluetoothDevices = currentConnected; + + for (BluetoothDevice bluetoothDevice : disconnected) { + disconnectBluetoothDevice(bluetoothDevice); + } + for (BluetoothDevice bluetoothDevice : connected) { + connectBluetoothDevice(bluetoothDevice); + } + + final HIDDeviceManager finalThis = this; + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finalThis.chromebookConnectionHandler(); + } + }, 10000); + } + + public boolean connectBluetoothDevice(BluetoothDevice bluetoothDevice) { + Log.v(TAG, "connectBluetoothDevice device=" + bluetoothDevice); + synchronized (this) { + if (mBluetoothDevices.containsKey(bluetoothDevice)) { + Log.v(TAG, "Steam controller with address " + bluetoothDevice + " already exists, attempting reconnect"); + + HIDDeviceBLESteamController device = mBluetoothDevices.get(bluetoothDevice); + device.reconnect(); + + return false; + } + HIDDeviceBLESteamController device = new HIDDeviceBLESteamController(this, bluetoothDevice); + int id = device.getId(); + mBluetoothDevices.put(bluetoothDevice, device); + mDevicesById.put(id, device); + + // The Steam Controller will mark itself connected once initialization is complete + } + return true; + } + + public void disconnectBluetoothDevice(BluetoothDevice bluetoothDevice) { + synchronized (this) { + HIDDeviceBLESteamController device = mBluetoothDevices.get(bluetoothDevice); + if (device == null) + return; + + int id = device.getId(); + mBluetoothDevices.remove(bluetoothDevice); + mDevicesById.remove(id); + device.shutdown(); + HIDDeviceDisconnected(id); + } + } + + public boolean isSteamController(BluetoothDevice bluetoothDevice) { + // Sanity check. If you pass in a null device, by definition it is never a Steam Controller. + if (bluetoothDevice == null) { + return false; + } + + // If the device has no local name, we really don't want to try an equality check against it. + if (bluetoothDevice.getName() == null) { + return false; + } + + return bluetoothDevice.getName().equals("SteamController") && ((bluetoothDevice.getType() & BluetoothDevice.DEVICE_TYPE_LE) != 0); + } + + private void close() { + shutdownUSB(); + shutdownBluetooth(); + synchronized (this) { + for (HIDDevice device : mDevicesById.values()) { + device.shutdown(); + } + mDevicesById.clear(); + mBluetoothDevices.clear(); + HIDDeviceReleaseCallback(); + } + } + + public void setFrozen(boolean frozen) { + synchronized (this) { + for (HIDDevice device : mDevicesById.values()) { + device.setFrozen(frozen); + } + } + } + + ////////////////////////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////////////////////////// + + private HIDDevice getDevice(int id) { + synchronized (this) { + HIDDevice result = mDevicesById.get(id); + if (result == null) { + Log.v(TAG, "No device for id: " + id); + Log.v(TAG, "Available devices: " + mDevicesById.keySet()); + } + return result; + } + } + + ////////////////////////////////////////////////////////////////////////////////////////////////////// + ////////// JNI interface functions + ////////////////////////////////////////////////////////////////////////////////////////////////////// + + public boolean initialize(boolean usb, boolean bluetooth) { + Log.v(TAG, "initialize(" + usb + ", " + bluetooth + ")"); + + if (usb) { + initializeUSB(); + } + if (bluetooth) { + initializeBluetooth(); + } + return true; + } + + public boolean openDevice(int deviceID) { + Log.v(TAG, "openDevice deviceID=" + deviceID); + HIDDevice device = getDevice(deviceID); + if (device == null) { + HIDDeviceDisconnected(deviceID); + return false; + } + + // Look to see if this is a USB device and we have permission to access it + UsbDevice usbDevice = device.getDevice(); + if (usbDevice != null && !mUsbManager.hasPermission(usbDevice)) { + HIDDeviceOpenPending(deviceID); + try { + final int FLAG_MUTABLE = 0x02000000; // PendingIntent.FLAG_MUTABLE, but don't require SDK 31 + int flags; + if (Build.VERSION.SDK_INT >= 31 /* Android 12.0 (S) */) { + flags = FLAG_MUTABLE; + } else { + flags = 0; + } + mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, new Intent(HIDDeviceManager.ACTION_USB_PERMISSION), flags)); + } catch (Exception e) { + Log.v(TAG, "Couldn't request permission for USB device " + usbDevice); + HIDDeviceOpenResult(deviceID, false); + } + return false; + } + + try { + return device.open(); + } catch (Exception e) { + Log.e(TAG, "Got exception: " + Log.getStackTraceString(e)); + } + return false; + } + + public int writeReport(int deviceID, byte[] report, boolean feature) { + try { + //Log.v(TAG, "writeReport deviceID=" + deviceID + " length=" + report.length); + HIDDevice device; + device = getDevice(deviceID); + if (device == null) { + HIDDeviceDisconnected(deviceID); + return -1; + } + + return device.writeReport(report, feature); + } catch (Exception e) { + Log.e(TAG, "Got exception: " + Log.getStackTraceString(e)); + } + return -1; + } + + public boolean readReport(int deviceID, byte[] report, boolean feature) { + try { + //Log.v(TAG, "readReport deviceID=" + deviceID); + HIDDevice device; + device = getDevice(deviceID); + if (device == null) { + HIDDeviceDisconnected(deviceID); + return false; + } + + return device.readReport(report, feature); + } catch (Exception e) { + Log.e(TAG, "Got exception: " + Log.getStackTraceString(e)); + } + return false; + } + + public void closeDevice(int deviceID) { + try { + Log.v(TAG, "closeDevice deviceID=" + deviceID); + HIDDevice device; + device = getDevice(deviceID); + if (device == null) { + HIDDeviceDisconnected(deviceID); + return; + } + + device.close(); + } catch (Exception e) { + Log.e(TAG, "Got exception: " + Log.getStackTraceString(e)); + } + } + + + ////////////////////////////////////////////////////////////////////////////////////////////////////// + /////////////// Native methods + ////////////////////////////////////////////////////////////////////////////////////////////////////// + + private native void HIDDeviceRegisterCallback(); + private native void HIDDeviceReleaseCallback(); + + native void HIDDeviceConnected(int deviceID, String identifier, int vendorId, int productId, String serial_number, int release_number, String manufacturer_string, String product_string, int interface_number, int interface_class, int interface_subclass, int interface_protocol); + native void HIDDeviceOpenPending(int deviceID); + native void HIDDeviceOpenResult(int deviceID, boolean opened); + native void HIDDeviceDisconnected(int deviceID); + + native void HIDDeviceInputReport(int deviceID, byte[] report); + native void HIDDeviceReportResponse(int deviceID, byte[] report); +} diff --git a/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/HIDDeviceUSB.java b/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/HIDDeviceUSB.java new file mode 100644 index 0000000..5b5d201 --- /dev/null +++ b/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/HIDDeviceUSB.java @@ -0,0 +1,308 @@ +package org.libsdl.app; + +import android.hardware.usb.*; +import android.os.Build; +import android.util.Log; +import java.util.Arrays; + +class HIDDeviceUSB implements HIDDevice { + + private static final String TAG = "hidapi"; + + protected HIDDeviceManager mManager; + protected UsbDevice mDevice; + protected int mInterfaceIndex; + protected int mInterface; + protected int mDeviceId; + protected UsbDeviceConnection mConnection; + protected UsbEndpoint mInputEndpoint; + protected UsbEndpoint mOutputEndpoint; + protected InputThread mInputThread; + protected boolean mRunning; + protected boolean mFrozen; + + public HIDDeviceUSB(HIDDeviceManager manager, UsbDevice usbDevice, int interface_index) { + mManager = manager; + mDevice = usbDevice; + mInterfaceIndex = interface_index; + mInterface = mDevice.getInterface(mInterfaceIndex).getId(); + mDeviceId = manager.getDeviceIDForIdentifier(getIdentifier()); + mRunning = false; + } + + public String getIdentifier() { + return String.format("%s/%x/%x/%d", mDevice.getDeviceName(), mDevice.getVendorId(), mDevice.getProductId(), mInterfaceIndex); + } + + @Override + public int getId() { + return mDeviceId; + } + + @Override + public int getVendorId() { + return mDevice.getVendorId(); + } + + @Override + public int getProductId() { + return mDevice.getProductId(); + } + + @Override + public String getSerialNumber() { + String result = null; + if (Build.VERSION.SDK_INT >= 21 /* Android 5.0 (LOLLIPOP) */) { + try { + result = mDevice.getSerialNumber(); + } + catch (SecurityException exception) { + //Log.w(TAG, "App permissions mean we cannot get serial number for device " + getDeviceName() + " message: " + exception.getMessage()); + } + } + if (result == null) { + result = ""; + } + return result; + } + + @Override + public int getVersion() { + return 0; + } + + @Override + public String getManufacturerName() { + String result = null; + if (Build.VERSION.SDK_INT >= 21 /* Android 5.0 (LOLLIPOP) */) { + result = mDevice.getManufacturerName(); + } + if (result == null) { + result = String.format("%x", getVendorId()); + } + return result; + } + + @Override + public String getProductName() { + String result = null; + if (Build.VERSION.SDK_INT >= 21 /* Android 5.0 (LOLLIPOP) */) { + result = mDevice.getProductName(); + } + if (result == null) { + result = String.format("%x", getProductId()); + } + return result; + } + + @Override + public UsbDevice getDevice() { + return mDevice; + } + + public String getDeviceName() { + return getManufacturerName() + " " + getProductName() + "(0x" + String.format("%x", getVendorId()) + "/0x" + String.format("%x", getProductId()) + ")"; + } + + @Override + public boolean open() { + mConnection = mManager.getUSBManager().openDevice(mDevice); + if (mConnection == null) { + Log.w(TAG, "Unable to open USB device " + getDeviceName()); + return false; + } + + // Force claim our interface + UsbInterface iface = mDevice.getInterface(mInterfaceIndex); + if (!mConnection.claimInterface(iface, true)) { + Log.w(TAG, "Failed to claim interfaces on USB device " + getDeviceName()); + close(); + return false; + } + + // Find the endpoints + for (int j = 0; j < iface.getEndpointCount(); j++) { + UsbEndpoint endpt = iface.getEndpoint(j); + switch (endpt.getDirection()) { + case UsbConstants.USB_DIR_IN: + if (mInputEndpoint == null) { + mInputEndpoint = endpt; + } + break; + case UsbConstants.USB_DIR_OUT: + if (mOutputEndpoint == null) { + mOutputEndpoint = endpt; + } + break; + } + } + + // Make sure the required endpoints were present + if (mInputEndpoint == null || mOutputEndpoint == null) { + Log.w(TAG, "Missing required endpoint on USB device " + getDeviceName()); + close(); + return false; + } + + // Start listening for input + mRunning = true; + mInputThread = new InputThread(); + mInputThread.start(); + + return true; + } + + @Override + public int writeReport(byte[] report, boolean feature) { + if (feature) { + int res = -1; + int offset = 0; + int length = report.length; + boolean skipped_report_id = false; + byte report_number = report[0]; + + if (report_number == 0x0) { + ++offset; + --length; + skipped_report_id = true; + } + + res = mConnection.controlTransfer( + UsbConstants.USB_TYPE_CLASS | 0x01 /*RECIPIENT_INTERFACE*/ | UsbConstants.USB_DIR_OUT, + 0x09/*HID set_report*/, + (3/*HID feature*/ << 8) | report_number, + mInterface, + report, offset, length, + 1000/*timeout millis*/); + + if (res < 0) { + Log.w(TAG, "writeFeatureReport() returned " + res + " on device " + getDeviceName()); + return -1; + } + + if (skipped_report_id) { + ++length; + } + return length; + } else { + int res = mConnection.bulkTransfer(mOutputEndpoint, report, report.length, 1000); + if (res != report.length) { + Log.w(TAG, "writeOutputReport() returned " + res + " on device " + getDeviceName()); + } + return res; + } + } + + @Override + public boolean readReport(byte[] report, boolean feature) { + int res = -1; + int offset = 0; + int length = report.length; + boolean skipped_report_id = false; + byte report_number = report[0]; + + if (report_number == 0x0) { + /* Offset the return buffer by 1, so that the report ID + will remain in byte 0. */ + ++offset; + --length; + skipped_report_id = true; + } + + res = mConnection.controlTransfer( + UsbConstants.USB_TYPE_CLASS | 0x01 /*RECIPIENT_INTERFACE*/ | UsbConstants.USB_DIR_IN, + 0x01/*HID get_report*/, + ((feature ? 3/*HID feature*/ : 1/*HID Input*/) << 8) | report_number, + mInterface, + report, offset, length, + 1000/*timeout millis*/); + + if (res < 0) { + Log.w(TAG, "getFeatureReport() returned " + res + " on device " + getDeviceName()); + return false; + } + + if (skipped_report_id) { + ++res; + ++length; + } + + byte[] data; + if (res == length) { + data = report; + } else { + data = Arrays.copyOfRange(report, 0, res); + } + mManager.HIDDeviceReportResponse(mDeviceId, data); + + return true; + } + + @Override + public void close() { + mRunning = false; + if (mInputThread != null) { + while (mInputThread.isAlive()) { + mInputThread.interrupt(); + try { + mInputThread.join(); + } catch (InterruptedException e) { + // Keep trying until we're done + } + } + mInputThread = null; + } + if (mConnection != null) { + UsbInterface iface = mDevice.getInterface(mInterfaceIndex); + mConnection.releaseInterface(iface); + mConnection.close(); + mConnection = null; + } + } + + @Override + public void shutdown() { + close(); + mManager = null; + } + + @Override + public void setFrozen(boolean frozen) { + mFrozen = frozen; + } + + protected class InputThread extends Thread { + @Override + public void run() { + int packetSize = mInputEndpoint.getMaxPacketSize(); + byte[] packet = new byte[packetSize]; + while (mRunning) { + int r; + try + { + r = mConnection.bulkTransfer(mInputEndpoint, packet, packetSize, 1000); + } + catch (Exception e) + { + Log.v(TAG, "Exception in UsbDeviceConnection bulktransfer: " + e); + break; + } + if (r < 0) { + // Could be a timeout or an I/O error + } + if (r > 0) { + byte[] data; + if (r == packetSize) { + data = packet; + } else { + data = Arrays.copyOfRange(packet, 0, r); + } + + if (!mFrozen) { + mManager.HIDDeviceInputReport(mDeviceId, data); + } + } + } + } + } +} diff --git a/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/SDL.java b/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/SDL.java new file mode 100644 index 0000000..44c21c1 --- /dev/null +++ b/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/SDL.java @@ -0,0 +1,86 @@ +package org.libsdl.app; + +import android.content.Context; + +import java.lang.Class; +import java.lang.reflect.Method; + +/** + SDL library initialization +*/ +public class SDL { + + // This function should be called first and sets up the native code + // so it can call into the Java classes + public static void setupJNI() { + SDLActivity.nativeSetupJNI(); + SDLAudioManager.nativeSetupJNI(); + SDLControllerManager.nativeSetupJNI(); + } + + // This function should be called each time the activity is started + public static void initialize() { + setContext(null); + + SDLActivity.initialize(); + SDLAudioManager.initialize(); + SDLControllerManager.initialize(); + } + + // This function stores the current activity (SDL or not) + public static void setContext(Context context) { + SDLAudioManager.setContext(context); + mContext = context; + } + + public static Context getContext() { + return mContext; + } + + public static void loadLibrary(String libraryName) throws UnsatisfiedLinkError, SecurityException, NullPointerException { + + if (libraryName == null) { + throw new NullPointerException("No library name provided."); + } + + try { + // Let's see if we have ReLinker available in the project. This is necessary for + // some projects that have huge numbers of local libraries bundled, and thus may + // trip a bug in Android's native library loader which ReLinker works around. (If + // loadLibrary works properly, ReLinker will simply use the normal Android method + // internally.) + // + // To use ReLinker, just add it as a dependency. For more information, see + // https://github.com/KeepSafe/ReLinker for ReLinker's repository. + // + Class relinkClass = mContext.getClassLoader().loadClass("com.getkeepsafe.relinker.ReLinker"); + Class relinkListenerClass = mContext.getClassLoader().loadClass("com.getkeepsafe.relinker.ReLinker$LoadListener"); + Class contextClass = mContext.getClassLoader().loadClass("android.content.Context"); + Class stringClass = mContext.getClassLoader().loadClass("java.lang.String"); + + // Get a 'force' instance of the ReLinker, so we can ensure libraries are reinstalled if + // they've changed during updates. + Method forceMethod = relinkClass.getDeclaredMethod("force"); + Object relinkInstance = forceMethod.invoke(null); + Class relinkInstanceClass = relinkInstance.getClass(); + + // Actually load the library! + Method loadMethod = relinkInstanceClass.getDeclaredMethod("loadLibrary", contextClass, stringClass, stringClass, relinkListenerClass); + loadMethod.invoke(relinkInstance, mContext, libraryName, null, null); + } + catch (final Throwable e) { + // Fall back + try { + System.loadLibrary(libraryName); + } + catch (final UnsatisfiedLinkError ule) { + throw ule; + } + catch (final SecurityException se) { + throw se; + } + } + } + + protected static Context mContext; +} diff --git a/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java b/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java new file mode 100644 index 0000000..a80b494 --- /dev/null +++ b/vendor/sdl-3.0.0/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java @@ -0,0 +1,2189 @@ +package org.libsdl.app; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.UiModeManager; +import android.content.ClipboardManager; +import android.content.ClipData; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.res.Configuration; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.graphics.PorterDuff; +import android.graphics.drawable.Drawable; +import android.hardware.Sensor; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.Editable; +import android.text.InputType; +import android.text.Selection; +import android.util.DisplayMetrics; +import android.util.Log; +import android.util.SparseArray; +import android.view.Display; +import android.view.Gravity; +import android.view.InputDevice; +import android.view.KeyEvent; +import android.view.PointerIcon; +import android.view.Surface; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.BaseInputConnection; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputConnection; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import java.util.Hashtable; +import java.util.Locale; + + +/** + SDL Activity +*/ +public class SDLActivity extends Activity implements View.OnSystemUiVisibilityChangeListener { + private static final String TAG = "SDL"; + private static final int SDL_MAJOR_VERSION = 3; + private static final int SDL_MINOR_VERSION = 0; + private static final int SDL_MICRO_VERSION = 0; +/* + // Display InputType.SOURCE/CLASS of events and devices + // + // SDLActivity.debugSource(device.getSources(), "device[" + device.getName() + "]"); + // SDLActivity.debugSource(event.getSource(), "event"); + public static void debugSource(int sources, String prefix) { + int s = sources; + int s_copy = sources; + String cls = ""; + String src = ""; + int tst = 0; + int FLAG_TAINTED = 0x80000000; + + if ((s & InputDevice.SOURCE_CLASS_BUTTON) != 0) cls += " BUTTON"; + if ((s & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) cls += " JOYSTICK"; + if ((s & InputDevice.SOURCE_CLASS_POINTER) != 0) cls += " POINTER"; + if ((s & InputDevice.SOURCE_CLASS_POSITION) != 0) cls += " POSITION"; + if ((s & InputDevice.SOURCE_CLASS_TRACKBALL) != 0) cls += " TRACKBALL"; + + + int s2 = s_copy & ~InputDevice.SOURCE_ANY; // keep class bits + s2 &= ~( InputDevice.SOURCE_CLASS_BUTTON + | InputDevice.SOURCE_CLASS_JOYSTICK + | InputDevice.SOURCE_CLASS_POINTER + | InputDevice.SOURCE_CLASS_POSITION + | InputDevice.SOURCE_CLASS_TRACKBALL); + + if (s2 != 0) cls += "Some_Unkown"; + + s2 = s_copy & InputDevice.SOURCE_ANY; // keep source only, no class; + + if (Build.VERSION.SDK_INT >= 23) { + tst = InputDevice.SOURCE_BLUETOOTH_STYLUS; + if ((s & tst) == tst) src += " BLUETOOTH_STYLUS"; + s2 &= ~tst; + } + + tst = InputDevice.SOURCE_DPAD; + if ((s & tst) == tst) src += " DPAD"; + s2 &= ~tst; + + tst = InputDevice.SOURCE_GAMEPAD; + if ((s & tst) == tst) src += " GAMEPAD"; + s2 &= ~tst; + + if (Build.VERSION.SDK_INT >= 21) { + tst = InputDevice.SOURCE_HDMI; + if ((s & tst) == tst) src += " HDMI"; + s2 &= ~tst; + } + + tst = InputDevice.SOURCE_JOYSTICK; + if ((s & tst) == tst) src += " JOYSTICK"; + s2 &= ~tst; + + tst = InputDevice.SOURCE_KEYBOARD; + if ((s & tst) == tst) src += " KEYBOARD"; + s2 &= ~tst; + + tst = InputDevice.SOURCE_MOUSE; + if ((s & tst) == tst) src += " MOUSE"; + s2 &= ~tst; + + if (Build.VERSION.SDK_INT >= 26) { + tst = InputDevice.SOURCE_MOUSE_RELATIVE; + if ((s & tst) == tst) src += " MOUSE_RELATIVE"; + s2 &= ~tst; + + tst = InputDevice.SOURCE_ROTARY_ENCODER; + if ((s & tst) == tst) src += " ROTARY_ENCODER"; + s2 &= ~tst; + } + tst = InputDevice.SOURCE_STYLUS; + if ((s & tst) == tst) src += " STYLUS"; + s2 &= ~tst; + + tst = InputDevice.SOURCE_TOUCHPAD; + if ((s & tst) == tst) src += " TOUCHPAD"; + s2 &= ~tst; + + tst = InputDevice.SOURCE_TOUCHSCREEN; + if ((s & tst) == tst) src += " TOUCHSCREEN"; + s2 &= ~tst; + + if (Build.VERSION.SDK_INT >= 18) { + tst = InputDevice.SOURCE_TOUCH_NAVIGATION; + if ((s & tst) == tst) src += " TOUCH_NAVIGATION"; + s2 &= ~tst; + } + + tst = InputDevice.SOURCE_TRACKBALL; + if ((s & tst) == tst) src += " TRACKBALL"; + s2 &= ~tst; + + tst = InputDevice.SOURCE_ANY; + if ((s & tst) == tst) src += " ANY"; + s2 &= ~tst; + + if (s == FLAG_TAINTED) src += " FLAG_TAINTED"; + s2 &= ~FLAG_TAINTED; + + if (s2 != 0) src += " Some_Unkown"; + + Log.v(TAG, prefix + "int=" + s_copy + " CLASS={" + cls + " } source(s):" + src); + } +*/ + + public static boolean mIsResumedCalled, mHasFocus; + public static final boolean mHasMultiWindow = (Build.VERSION.SDK_INT >= 24 /* Android 7.0 (N) */); + + // Cursor types + // private static final int SDL_SYSTEM_CURSOR_NONE = -1; + private static final int SDL_SYSTEM_CURSOR_ARROW = 0; + private static final int SDL_SYSTEM_CURSOR_IBEAM = 1; + private static final int SDL_SYSTEM_CURSOR_WAIT = 2; + private static final int SDL_SYSTEM_CURSOR_CROSSHAIR = 3; + private static final int SDL_SYSTEM_CURSOR_WAITARROW = 4; + private static final int SDL_SYSTEM_CURSOR_SIZENWSE = 5; + private static final int SDL_SYSTEM_CURSOR_SIZENESW = 6; + private static final int SDL_SYSTEM_CURSOR_SIZEWE = 7; + private static final int SDL_SYSTEM_CURSOR_SIZENS = 8; + private static final int SDL_SYSTEM_CURSOR_SIZEALL = 9; + private static final int SDL_SYSTEM_CURSOR_NO = 10; + private static final int SDL_SYSTEM_CURSOR_HAND = 11; + + protected static final int SDL_ORIENTATION_UNKNOWN = 0; + protected static final int SDL_ORIENTATION_LANDSCAPE = 1; + protected static final int SDL_ORIENTATION_LANDSCAPE_FLIPPED = 2; + protected static final int SDL_ORIENTATION_PORTRAIT = 3; + protected static final int SDL_ORIENTATION_PORTRAIT_FLIPPED = 4; + + protected static int mCurrentRotation; + protected static Locale mCurrentLocale; + + // Handle the state of the native layer + public enum NativeState { + INIT, RESUMED, PAUSED + } + + public static NativeState mNextNativeState; + public static NativeState mCurrentNativeState; + + /** If shared libraries (e.g. SDL or the native application) could not be loaded. */ + public static boolean mBrokenLibraries = true; + + // Main components + protected static SDLActivity mSingleton; + protected static SDLSurface mSurface; + protected static DummyEdit mTextEdit; + protected static boolean mScreenKeyboardShown; + protected static ViewGroup mLayout; + protected static SDLClipboardHandler mClipboardHandler; + protected static Hashtable mCursors; + protected static int mLastCursorID; + protected static SDLGenericMotionListener_API12 mMotionListener; + protected static HIDDeviceManager mHIDDeviceManager; + + // This is what SDL runs in. It invokes SDL_main(), eventually + protected static Thread mSDLThread; + protected static boolean mSDLMainFinished = false; + protected static boolean mActivityCreated = false; + + protected static SDLGenericMotionListener_API12 getMotionListener() { + if (mMotionListener == null) { + if (Build.VERSION.SDK_INT >= 26 /* Android 8.0 (O) */) { + mMotionListener = new SDLGenericMotionListener_API26(); + } else if (Build.VERSION.SDK_INT >= 24 /* Android 7.0 (N) */) { + mMotionListener = new SDLGenericMotionListener_API24(); + } else { + mMotionListener = new SDLGenericMotionListener_API12(); + } + } + + return mMotionListener; + } + + /** + * This method returns the name of the shared object with the application entry point + * It can be overridden by derived classes. + */ + protected String getMainSharedObject() { + String library; + String[] libraries = SDLActivity.mSingleton.getLibraries(); + if (libraries.length > 0) { + library = "lib" + libraries[libraries.length - 1] + ".so"; + } else { + library = "libmain.so"; + } + return getContext().getApplicationInfo().nativeLibraryDir + "/" + library; + } + + /** + * This method returns the name of the application entry point + * It can be overridden by derived classes. + */ + protected String getMainFunction() { + return "SDL_main"; + } + + /** + * This method is called by SDL before loading the native shared libraries. + * It can be overridden to provide names of shared libraries to be loaded. + * The default implementation returns the defaults. It never returns null. + * An array returned by a new implementation must at least contain "SDL3". + * Also keep in mind that the order the libraries are loaded may matter. + * @return names of shared libraries to be loaded (e.g. "SDL3", "main"). + */ + protected String[] getLibraries() { + return new String[] { + "SDL3", + // "SDL3_image", + // "SDL3_mixer", + // "SDL3_net", + // "SDL3_ttf", + "main" + }; + } + + // Load the .so + public void loadLibraries() { + for (String lib : getLibraries()) { + SDL.loadLibrary(lib); + } + } + + /** + * This method is called by SDL before starting the native application thread. + * It can be overridden to provide the arguments after the application name. + * The default implementation returns an empty array. It never returns null. + * @return arguments for the native application. + */ + protected String[] getArguments() { + return new String[0]; + } + + public static void initialize() { + // The static nature of the singleton and Android quirkyness force us to initialize everything here + // Otherwise, when exiting the app and returning to it, these variables *keep* their pre exit values + mSingleton = null; + mSurface = null; + mTextEdit = null; + mLayout = null; + mClipboardHandler = null; + mCursors = new Hashtable(); + mLastCursorID = 0; + mSDLThread = null; + mIsResumedCalled = false; + mHasFocus = true; + mNextNativeState = NativeState.INIT; + mCurrentNativeState = NativeState.INIT; + } + + protected SDLSurface createSDLSurface(Context context) { + return new SDLSurface(context); + } + + // Setup + @Override + protected void onCreate(Bundle savedInstanceState) { + Log.v(TAG, "Device: " + Build.DEVICE); + Log.v(TAG, "Model: " + Build.MODEL); + Log.v(TAG, "onCreate()"); + super.onCreate(savedInstanceState); + + + /* Control activity re-creation */ + if (mSDLMainFinished || mActivityCreated) { + boolean allow_recreate = SDLActivity.nativeAllowRecreateActivity(); + if (mSDLMainFinished) { + Log.v(TAG, "SDL main() finished"); + } + if (allow_recreate) { + Log.v(TAG, "activity re-created"); + } else { + Log.v(TAG, "activity finished"); + System.exit(0); + return; + } + } + + mActivityCreated = true; + + try { + Thread.currentThread().setName("SDLActivity"); + } catch (Exception e) { + Log.v(TAG, "modify thread properties failed " + e.toString()); + } + + // Load shared libraries + String errorMsgBrokenLib = ""; + try { + loadLibraries(); + mBrokenLibraries = false; /* success */ + } catch(UnsatisfiedLinkError e) { + System.err.println(e.getMessage()); + mBrokenLibraries = true; + errorMsgBrokenLib = e.getMessage(); + } catch(Exception e) { + System.err.println(e.getMessage()); + mBrokenLibraries = true; + errorMsgBrokenLib = e.getMessage(); + } + + if (!mBrokenLibraries) { + String expected_version = String.valueOf(SDL_MAJOR_VERSION) + "." + + String.valueOf(SDL_MINOR_VERSION) + "." + + String.valueOf(SDL_MICRO_VERSION); + String version = nativeGetVersion(); + if (!version.equals(expected_version)) { + mBrokenLibraries = true; + errorMsgBrokenLib = "SDL C/Java version mismatch (expected " + expected_version + ", got " + version + ")"; + } + } + + if (mBrokenLibraries) { + mSingleton = this; + AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this); + dlgAlert.setMessage("An error occurred while trying to start the application. Please try again and/or reinstall." + + System.getProperty("line.separator") + + System.getProperty("line.separator") + + "Error: " + errorMsgBrokenLib); + dlgAlert.setTitle("SDL Error"); + dlgAlert.setPositiveButton("Exit", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog,int id) { + // if this button is clicked, close current activity + SDLActivity.mSingleton.finish(); + } + }); + dlgAlert.setCancelable(false); + dlgAlert.create().show(); + + return; + } + + + /* Control activity re-creation */ + /* Robustness: check that the native code is run for the first time. + * (Maybe Activity was reset, but not the native code.) */ + { + int run_count = SDLActivity.nativeCheckSDLThreadCounter(); /* get and increment a native counter */ + if (run_count != 0) { + boolean allow_recreate = SDLActivity.nativeAllowRecreateActivity(); + if (allow_recreate) { + Log.v(TAG, "activity re-created // run_count: " + run_count); + } else { + Log.v(TAG, "activity finished // run_count: " + run_count); + System.exit(0); + return; + } + } + } + + // Set up JNI + SDL.setupJNI(); + + // Initialize state + SDL.initialize(); + + // So we can call stuff from static callbacks + mSingleton = this; + SDL.setContext(this); + + mClipboardHandler = new SDLClipboardHandler(); + + mHIDDeviceManager = HIDDeviceManager.acquire(this); + + // Set up the surface + mSurface = createSDLSurface(this); + + mLayout = new RelativeLayout(this); + mLayout.addView(mSurface); + + // Get our current screen orientation and pass it down. + SDLActivity.nativeSetNaturalOrientation(SDLActivity.getNaturalOrientation()); + mCurrentRotation = SDLActivity.getCurrentRotation(); + SDLActivity.onNativeRotationChanged(mCurrentRotation); + + try { + if (Build.VERSION.SDK_INT < 24 /* Android 7.0 (N) */) { + mCurrentLocale = getContext().getResources().getConfiguration().locale; + } else { + mCurrentLocale = getContext().getResources().getConfiguration().getLocales().get(0); + } + } catch(Exception ignored) { + } + + switch (getContext().getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) { + case Configuration.UI_MODE_NIGHT_NO: + SDLActivity.onNativeDarkModeChanged(false); + break; + case Configuration.UI_MODE_NIGHT_YES: + SDLActivity.onNativeDarkModeChanged(true); + break; + } + + setContentView(mLayout); + + setWindowStyle(false); + + getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(this); + + // Get filename from "Open with" of another application + Intent intent = getIntent(); + if (intent != null && intent.getData() != null) { + String filename = intent.getData().getPath(); + if (filename != null) { + Log.v(TAG, "Got filename: " + filename); + SDLActivity.onNativeDropFile(filename); + } + } + } + + protected void pauseNativeThread() { + mNextNativeState = NativeState.PAUSED; + mIsResumedCalled = false; + + if (SDLActivity.mBrokenLibraries) { + return; + } + + SDLActivity.handleNativeState(); + } + + protected void resumeNativeThread() { + mNextNativeState = NativeState.RESUMED; + mIsResumedCalled = true; + + if (SDLActivity.mBrokenLibraries) { + return; + } + + SDLActivity.handleNativeState(); + } + + // Events + @Override + protected void onPause() { + Log.v(TAG, "onPause()"); + super.onPause(); + + if (mHIDDeviceManager != null) { + mHIDDeviceManager.setFrozen(true); + } + if (!mHasMultiWindow) { + pauseNativeThread(); + } + } + + @Override + protected void onResume() { + Log.v(TAG, "onResume()"); + super.onResume(); + + if (mHIDDeviceManager != null) { + mHIDDeviceManager.setFrozen(false); + } + if (!mHasMultiWindow) { + resumeNativeThread(); + } + } + + @Override + protected void onStop() { + Log.v(TAG, "onStop()"); + super.onStop(); + if (mHasMultiWindow) { + pauseNativeThread(); + } + } + + @Override + protected void onStart() { + Log.v(TAG, "onStart()"); + super.onStart(); + if (mHasMultiWindow) { + resumeNativeThread(); + } + } + + public static int getNaturalOrientation() { + int result = SDL_ORIENTATION_UNKNOWN; + + Activity activity = (Activity)getContext(); + if (activity != null) { + Configuration config = activity.getResources().getConfiguration(); + Display display = activity.getWindowManager().getDefaultDisplay(); + int rotation = display.getRotation(); + if (((rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) && + config.orientation == Configuration.ORIENTATION_LANDSCAPE) || + ((rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) && + config.orientation == Configuration.ORIENTATION_PORTRAIT)) { + result = SDL_ORIENTATION_LANDSCAPE; + } else { + result = SDL_ORIENTATION_PORTRAIT; + } + } + return result; + } + + public static int getCurrentRotation() { + int result = 0; + + Activity activity = (Activity)getContext(); + if (activity != null) { + Display display = activity.getWindowManager().getDefaultDisplay(); + switch (display.getRotation()) { + case Surface.ROTATION_0: + result = 0; + break; + case Surface.ROTATION_90: + result = 90; + break; + case Surface.ROTATION_180: + result = 180; + break; + case Surface.ROTATION_270: + result = 270; + break; + } + } + return result; + } + + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + Log.v(TAG, "onWindowFocusChanged(): " + hasFocus); + + if (SDLActivity.mBrokenLibraries) { + return; + } + + mHasFocus = hasFocus; + if (hasFocus) { + mNextNativeState = NativeState.RESUMED; + SDLActivity.getMotionListener().reclaimRelativeMouseModeIfNeeded(); + + SDLActivity.handleNativeState(); + nativeFocusChanged(true); + + } else { + nativeFocusChanged(false); + if (!mHasMultiWindow) { + mNextNativeState = NativeState.PAUSED; + SDLActivity.handleNativeState(); + } + } + } + + @Override + public void onLowMemory() { + Log.v(TAG, "onLowMemory()"); + super.onLowMemory(); + + if (SDLActivity.mBrokenLibraries) { + return; + } + + SDLActivity.nativeLowMemory(); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + Log.v(TAG, "onConfigurationChanged()"); + super.onConfigurationChanged(newConfig); + + if (SDLActivity.mBrokenLibraries) { + return; + } + + if (mCurrentLocale == null || !mCurrentLocale.equals(newConfig.locale)) { + mCurrentLocale = newConfig.locale; + SDLActivity.onNativeLocaleChanged(); + } + + switch (newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK) { + case Configuration.UI_MODE_NIGHT_NO: + SDLActivity.onNativeDarkModeChanged(false); + break; + case Configuration.UI_MODE_NIGHT_YES: + SDLActivity.onNativeDarkModeChanged(true); + break; + } + } + + @Override + protected void onDestroy() { + Log.v(TAG, "onDestroy()"); + + if (mHIDDeviceManager != null) { + HIDDeviceManager.release(mHIDDeviceManager); + mHIDDeviceManager = null; + } + + SDLAudioManager.release(this); + + if (SDLActivity.mBrokenLibraries) { + super.onDestroy(); + return; + } + + if (SDLActivity.mSDLThread != null) { + + // Send Quit event to "SDLThread" thread + SDLActivity.nativeSendQuit(); + + // Wait for "SDLThread" thread to end + try { + // 500ms timeout, because: + // C SDLmain() thread might have started (mSDLThread.start() called) + // while the SDL_Init() might not have been called yet, + // and so the previous QUIT event will be discarded by SDL_Init() and app is running, not exiting. + SDLActivity.mSDLThread.join(500); + } catch(Exception e) { + Log.v(TAG, "Problem stopping SDLThread: " + e); + } + } + + SDLActivity.nativeQuit(); + + super.onDestroy(); + } + + @Override + public void onBackPressed() { + // Check if we want to block the back button in case of mouse right click. + // + // If we do, the normal hardware back button will no longer work and people have to use home, + // but the mouse right click will work. + // + boolean trapBack = SDLActivity.nativeGetHintBoolean("SDL_ANDROID_TRAP_BACK_BUTTON", false); + if (trapBack) { + // Exit and let the mouse handler handle this button (if appropriate) + return; + } + + // Default system back button behavior. + if (!isFinishing()) { + super.onBackPressed(); + } + } + + // Called by JNI from SDL. + public static void manualBackButton() { + mSingleton.pressBackButton(); + } + + // Used to get us onto the activity's main thread + public void pressBackButton() { + runOnUiThread(new Runnable() { + @Override + public void run() { + if (!SDLActivity.this.isFinishing()) { + SDLActivity.this.superOnBackPressed(); + } + } + }); + } + + // Used to access the system back behavior. + public void superOnBackPressed() { + super.onBackPressed(); + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + + if (SDLActivity.mBrokenLibraries) { + return false; + } + + int keyCode = event.getKeyCode(); + // Ignore certain special keys so they're handled by Android + if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || + keyCode == KeyEvent.KEYCODE_VOLUME_UP || + keyCode == KeyEvent.KEYCODE_CAMERA || + keyCode == KeyEvent.KEYCODE_ZOOM_IN || /* API 11 */ + keyCode == KeyEvent.KEYCODE_ZOOM_OUT /* API 11 */ + ) { + return false; + } + return super.dispatchKeyEvent(event); + } + + /* Transition to next state */ + public static void handleNativeState() { + + if (mNextNativeState == mCurrentNativeState) { + // Already in same state, discard. + return; + } + + // Try a transition to init state + if (mNextNativeState == NativeState.INIT) { + + mCurrentNativeState = mNextNativeState; + return; + } + + // Try a transition to paused state + if (mNextNativeState == NativeState.PAUSED) { + if (mSDLThread != null) { + nativePause(); + } + if (mSurface != null) { + mSurface.handlePause(); + } + mCurrentNativeState = mNextNativeState; + return; + } + + // Try a transition to resumed state + if (mNextNativeState == NativeState.RESUMED) { + if (mSurface.mIsSurfaceReady && mHasFocus && mIsResumedCalled) { + if (mSDLThread == null) { + // This is the entry point to the C app. + // Start up the C app thread and enable sensor input for the first time + // FIXME: Why aren't we enabling sensor input at start? + + mSDLThread = new Thread(new SDLMain(), "SDLThread"); + mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, true); + mSDLThread.start(); + + // No nativeResume(), don't signal Android_ResumeSem + } else { + nativeResume(); + } + mSurface.handleResume(); + + mCurrentNativeState = mNextNativeState; + } + } + } + + // Messages from the SDLMain thread + static final int COMMAND_CHANGE_TITLE = 1; + static final int COMMAND_CHANGE_WINDOW_STYLE = 2; + static final int COMMAND_TEXTEDIT_HIDE = 3; + static final int COMMAND_SET_KEEP_SCREEN_ON = 5; + + protected static final int COMMAND_USER = 0x8000; + + protected static boolean mFullscreenModeActive; + + /** + * This method is called by SDL if SDL did not handle a message itself. + * This happens if a received message contains an unsupported command. + * Method can be overwritten to handle Messages in a different class. + * @param command the command of the message. + * @param param the parameter of the message. May be null. + * @return if the message was handled in overridden method. + */ + protected boolean onUnhandledMessage(int command, Object param) { + return false; + } + + /** + * A Handler class for Messages from native SDL applications. + * It uses current Activities as target (e.g. for the title). + * static to prevent implicit references to enclosing object. + */ + protected static class SDLCommandHandler extends Handler { + @Override + public void handleMessage(Message msg) { + Context context = SDL.getContext(); + if (context == null) { + Log.e(TAG, "error handling message, getContext() returned null"); + return; + } + switch (msg.arg1) { + case COMMAND_CHANGE_TITLE: + if (context instanceof Activity) { + ((Activity) context).setTitle((String)msg.obj); + } else { + Log.e(TAG, "error handling message, getContext() returned no Activity"); + } + break; + case COMMAND_CHANGE_WINDOW_STYLE: + if (Build.VERSION.SDK_INT >= 19 /* Android 4.4 (KITKAT) */) { + if (context instanceof Activity) { + Window window = ((Activity) context).getWindow(); + if (window != null) { + if ((msg.obj instanceof Integer) && ((Integer) msg.obj != 0)) { + int flags = View.SYSTEM_UI_FLAG_FULLSCREEN | + View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | + View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | + View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | + View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | + View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.INVISIBLE; + window.getDecorView().setSystemUiVisibility(flags); + window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); + SDLActivity.mFullscreenModeActive = true; + } else { + int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_VISIBLE; + window.getDecorView().setSystemUiVisibility(flags); + window.addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); + window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + SDLActivity.mFullscreenModeActive = false; + } + } + } else { + Log.e(TAG, "error handling message, getContext() returned no Activity"); + } + } + break; + case COMMAND_TEXTEDIT_HIDE: + if (mTextEdit != null) { + // Note: On some devices setting view to GONE creates a flicker in landscape. + // Setting the View's sizes to 0 is similar to GONE but without the flicker. + // The sizes will be set to useful values when the keyboard is shown again. + mTextEdit.setLayoutParams(new RelativeLayout.LayoutParams(0, 0)); + + InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(mTextEdit.getWindowToken(), 0); + + mScreenKeyboardShown = false; + + mSurface.requestFocus(); + } + break; + case COMMAND_SET_KEEP_SCREEN_ON: + { + if (context instanceof Activity) { + Window window = ((Activity) context).getWindow(); + if (window != null) { + if ((msg.obj instanceof Integer) && ((Integer) msg.obj != 0)) { + window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } else { + window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + } + } + break; + } + default: + if ((context instanceof SDLActivity) && !((SDLActivity) context).onUnhandledMessage(msg.arg1, msg.obj)) { + Log.e(TAG, "error handling message, command is " + msg.arg1); + } + } + } + } + + // Handler for the messages + Handler commandHandler = new SDLCommandHandler(); + + // Send a message from the SDLMain thread + boolean sendCommand(int command, Object data) { + Message msg = commandHandler.obtainMessage(); + msg.arg1 = command; + msg.obj = data; + boolean result = commandHandler.sendMessage(msg); + + if (Build.VERSION.SDK_INT >= 19 /* Android 4.4 (KITKAT) */) { + if (command == COMMAND_CHANGE_WINDOW_STYLE) { + // Ensure we don't return until the resize has actually happened, + // or 500ms have passed. + + boolean bShouldWait = false; + + if (data instanceof Integer) { + // Let's figure out if we're already laid out fullscreen or not. + Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); + DisplayMetrics realMetrics = new DisplayMetrics(); + display.getRealMetrics(realMetrics); + + boolean bFullscreenLayout = ((realMetrics.widthPixels == mSurface.getWidth()) && + (realMetrics.heightPixels == mSurface.getHeight())); + + if ((Integer) data == 1) { + // If we aren't laid out fullscreen or actively in fullscreen mode already, we're going + // to change size and should wait for surfaceChanged() before we return, so the size + // is right back in native code. If we're already laid out fullscreen, though, we're + // not going to change size even if we change decor modes, so we shouldn't wait for + // surfaceChanged() -- which may not even happen -- and should return immediately. + bShouldWait = !bFullscreenLayout; + } else { + // If we're laid out fullscreen (even if the status bar and nav bar are present), + // or are actively in fullscreen, we're going to change size and should wait for + // surfaceChanged before we return, so the size is right back in native code. + bShouldWait = bFullscreenLayout; + } + } + + if (bShouldWait && (SDLActivity.getContext() != null)) { + // We'll wait for the surfaceChanged() method, which will notify us + // when called. That way, we know our current size is really the + // size we need, instead of grabbing a size that's still got + // the navigation and/or status bars before they're hidden. + // + // We'll wait for up to half a second, because some devices + // take a surprisingly long time for the surface resize, but + // then we'll just give up and return. + // + synchronized (SDLActivity.getContext()) { + try { + SDLActivity.getContext().wait(500); + } catch (InterruptedException ie) { + ie.printStackTrace(); + } + } + } + } + } + + return result; + } + + // C functions we call + public static native String nativeGetVersion(); + public static native int nativeSetupJNI(); + public static native int nativeRunMain(String library, String function, Object arguments); + public static native void nativeLowMemory(); + public static native void nativeSendQuit(); + public static native void nativeQuit(); + public static native void nativePause(); + public static native void nativeResume(); + public static native void nativeFocusChanged(boolean hasFocus); + public static native void onNativeDropFile(String filename); + public static native void nativeSetScreenResolution(int surfaceWidth, int surfaceHeight, int deviceWidth, int deviceHeight, float density, float rate); + public static native void onNativeResize(); + public static native void onNativeKeyDown(int keycode); + public static native void onNativeKeyUp(int keycode); + public static native boolean onNativeSoftReturnKey(); + public static native void onNativeKeyboardFocusLost(); + public static native void onNativeMouse(int button, int action, float x, float y, boolean relative); + public static native void onNativeTouch(int touchDevId, int pointerFingerId, + int action, float x, + float y, float p); + public static native void onNativeAccel(float x, float y, float z); + public static native void onNativeClipboardChanged(); + public static native void onNativeSurfaceCreated(); + public static native void onNativeSurfaceChanged(); + public static native void onNativeSurfaceDestroyed(); + public static native String nativeGetHint(String name); + public static native boolean nativeGetHintBoolean(String name, boolean default_value); + public static native void nativeSetenv(String name, String value); + public static native void nativeSetNaturalOrientation(int orientation); + public static native void onNativeRotationChanged(int rotation); + public static native void nativeAddTouch(int touchId, String name); + public static native void nativePermissionResult(int requestCode, boolean result); + public static native void onNativeLocaleChanged(); + public static native void onNativeDarkModeChanged(boolean enabled); + public static native boolean nativeAllowRecreateActivity(); + public static native int nativeCheckSDLThreadCounter(); + + /** + * This method is called by SDL using JNI. + */ + public static boolean setActivityTitle(String title) { + // Called from SDLMain() thread and can't directly affect the view + return mSingleton.sendCommand(COMMAND_CHANGE_TITLE, title); + } + + /** + * This method is called by SDL using JNI. + */ + public static void setWindowStyle(boolean fullscreen) { + // Called from SDLMain() thread and can't directly affect the view + mSingleton.sendCommand(COMMAND_CHANGE_WINDOW_STYLE, fullscreen ? 1 : 0); + } + + /** + * This method is called by SDL using JNI. + * This is a static method for JNI convenience, it calls a non-static method + * so that is can be overridden + */ + public static void setOrientation(int w, int h, boolean resizable, String hint) + { + if (mSingleton != null) { + mSingleton.setOrientationBis(w, h, resizable, hint); + } + } + + /** + * This can be overridden + */ + public void setOrientationBis(int w, int h, boolean resizable, String hint) + { + int orientation_landscape = -1; + int orientation_portrait = -1; + + /* If set, hint "explicitly controls which UI orientations are allowed". */ + if (hint.contains("LandscapeRight") && hint.contains("LandscapeLeft")) { + orientation_landscape = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE; + } else if (hint.contains("LandscapeLeft")) { + orientation_landscape = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; + } else if (hint.contains("LandscapeRight")) { + orientation_landscape = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE; + } + + /* exact match to 'Portrait' to distinguish with PortraitUpsideDown */ + boolean contains_Portrait = hint.contains("Portrait ") || hint.endsWith("Portrait"); + + if (contains_Portrait && hint.contains("PortraitUpsideDown")) { + orientation_portrait = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT; + } else if (contains_Portrait) { + orientation_portrait = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; + } else if (hint.contains("PortraitUpsideDown")) { + orientation_portrait = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT; + } + + boolean is_landscape_allowed = (orientation_landscape != -1); + boolean is_portrait_allowed = (orientation_portrait != -1); + int req; /* Requested orientation */ + + /* No valid hint, nothing is explicitly allowed */ + if (!is_portrait_allowed && !is_landscape_allowed) { + if (resizable) { + /* All orientations are allowed */ + req = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR; + } else { + /* Fixed window and nothing specified. Get orientation from w/h of created window */ + req = (w > h ? ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); + } + } else { + /* At least one orientation is allowed */ + if (resizable) { + if (is_portrait_allowed && is_landscape_allowed) { + /* hint allows both landscape and portrait, promote to full sensor */ + req = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR; + } else { + /* Use the only one allowed "orientation" */ + req = (is_landscape_allowed ? orientation_landscape : orientation_portrait); + } + } else { + /* Fixed window and both orientations are allowed. Choose one. */ + if (is_portrait_allowed && is_landscape_allowed) { + req = (w > h ? orientation_landscape : orientation_portrait); + } else { + /* Use the only one allowed "orientation" */ + req = (is_landscape_allowed ? orientation_landscape : orientation_portrait); + } + } + } + + Log.v(TAG, "setOrientation() requestedOrientation=" + req + " width=" + w +" height="+ h +" resizable=" + resizable + " hint=" + hint); + mSingleton.setRequestedOrientation(req); + } + + /** + * This method is called by SDL using JNI. + */ + public static void minimizeWindow() { + + if (mSingleton == null) { + return; + } + + Intent startMain = new Intent(Intent.ACTION_MAIN); + startMain.addCategory(Intent.CATEGORY_HOME); + startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mSingleton.startActivity(startMain); + } + + /** + * This method is called by SDL using JNI. + */ + public static boolean shouldMinimizeOnFocusLoss() { +/* + if (Build.VERSION.SDK_INT >= 24) { + if (mSingleton == null) { + return true; + } + + if (mSingleton.isInMultiWindowMode()) { + return false; + } + + if (mSingleton.isInPictureInPictureMode()) { + return false; + } + } + + return true; +*/ + return false; + } + + /** + * This method is called by SDL using JNI. + */ + public static boolean isScreenKeyboardShown() + { + if (mTextEdit == null) { + return false; + } + + if (!mScreenKeyboardShown) { + return false; + } + + InputMethodManager imm = (InputMethodManager) SDL.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + return imm.isAcceptingText(); + + } + + /** + * This method is called by SDL using JNI. + */ + public static boolean supportsRelativeMouse() + { + // DeX mode in Samsung Experience 9.0 and earlier doesn't support relative mice properly under + // Android 7 APIs, and simply returns no data under Android 8 APIs. + // + // This is fixed in Samsung Experience 9.5, which corresponds to Android 8.1.0, and + // thus SDK version 27. If we are in DeX mode and not API 27 or higher, as a result, + // we should stick to relative mode. + // + if (Build.VERSION.SDK_INT < 27 /* Android 8.1 (O_MR1) */ && isDeXMode()) { + return false; + } + + return SDLActivity.getMotionListener().supportsRelativeMouse(); + } + + /** + * This method is called by SDL using JNI. + */ + public static boolean setRelativeMouseEnabled(boolean enabled) + { + if (enabled && !supportsRelativeMouse()) { + return false; + } + + return SDLActivity.getMotionListener().setRelativeMouseEnabled(enabled); + } + + /** + * This method is called by SDL using JNI. + */ + public static boolean sendMessage(int command, int param) { + if (mSingleton == null) { + return false; + } + return mSingleton.sendCommand(command, param); + } + + /** + * This method is called by SDL using JNI. + */ + public static Context getContext() { + return SDL.getContext(); + } + + /** + * This method is called by SDL using JNI. + */ + public static boolean isAndroidTV() { + UiModeManager uiModeManager = (UiModeManager) getContext().getSystemService(UI_MODE_SERVICE); + if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) { + return true; + } + if (Build.MANUFACTURER.equals("MINIX") && Build.MODEL.equals("NEO-U1")) { + return true; + } + if (Build.MANUFACTURER.equals("Amlogic") && Build.MODEL.equals("X96-W")) { + return true; + } + return Build.MANUFACTURER.equals("Amlogic") && Build.MODEL.startsWith("TV"); + } + + public static double getDiagonal() + { + DisplayMetrics metrics = new DisplayMetrics(); + Activity activity = (Activity)getContext(); + if (activity == null) { + return 0.0; + } + activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); + + double dWidthInches = metrics.widthPixels / (double)metrics.xdpi; + double dHeightInches = metrics.heightPixels / (double)metrics.ydpi; + + return Math.sqrt((dWidthInches * dWidthInches) + (dHeightInches * dHeightInches)); + } + + /** + * This method is called by SDL using JNI. + */ + public static boolean isTablet() { + // If our diagonal size is seven inches or greater, we consider ourselves a tablet. + return (getDiagonal() >= 7.0); + } + + /** + * This method is called by SDL using JNI. + */ + public static boolean isChromebook() { + if (getContext() == null) { + return false; + } + return getContext().getPackageManager().hasSystemFeature("org.chromium.arc.device_management"); + } + + /** + * This method is called by SDL using JNI. + */ + public static boolean isDeXMode() { + if (Build.VERSION.SDK_INT < 24 /* Android 7.0 (N) */) { + return false; + } + try { + final Configuration config = getContext().getResources().getConfiguration(); + final Class configClass = config.getClass(); + return configClass.getField("SEM_DESKTOP_MODE_ENABLED").getInt(configClass) + == configClass.getField("semDesktopModeEnabled").getInt(config); + } catch(Exception ignored) { + return false; + } + } + + /** + * This method is called by SDL using JNI. + */ + public static boolean getManifestEnvironmentVariables() { + try { + if (getContext() == null) { + return false; + } + + ApplicationInfo applicationInfo = getContext().getPackageManager().getApplicationInfo(getContext().getPackageName(), PackageManager.GET_META_DATA); + Bundle bundle = applicationInfo.metaData; + if (bundle == null) { + return false; + } + String prefix = "SDL_ENV."; + final int trimLength = prefix.length(); + for (String key : bundle.keySet()) { + if (key.startsWith(prefix)) { + String name = key.substring(trimLength); + String value = bundle.get(key).toString(); + nativeSetenv(name, value); + } + } + /* environment variables set! */ + return true; + } catch (Exception e) { + Log.v(TAG, "exception " + e.toString()); + } + return false; + } + + // This method is called by SDLControllerManager's API 26 Generic Motion Handler. + public static View getContentView() { + return mLayout; + } + + static class ShowTextInputTask implements Runnable { + /* + * This is used to regulate the pan&scan method to have some offset from + * the bottom edge of the input region and the top edge of an input + * method (soft keyboard) + */ + static final int HEIGHT_PADDING = 15; + + public int x, y, w, h; + + public ShowTextInputTask(int x, int y, int w, int h) { + this.x = x; + this.y = y; + this.w = w; + this.h = h; + + /* Minimum size of 1 pixel, so it takes focus. */ + if (this.w <= 0) { + this.w = 1; + } + if (this.h + HEIGHT_PADDING <= 0) { + this.h = 1 - HEIGHT_PADDING; + } + } + + @Override + public void run() { + RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(w, h + HEIGHT_PADDING); + params.leftMargin = x; + params.topMargin = y; + + if (mTextEdit == null) { + mTextEdit = new DummyEdit(SDL.getContext()); + + mLayout.addView(mTextEdit, params); + } else { + mTextEdit.setLayoutParams(params); + } + + mTextEdit.setVisibility(View.VISIBLE); + mTextEdit.requestFocus(); + + InputMethodManager imm = (InputMethodManager) SDL.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.showSoftInput(mTextEdit, 0); + + mScreenKeyboardShown = true; + } + } + + /** + * This method is called by SDL using JNI. + */ + public static boolean showTextInput(int x, int y, int w, int h) { + // Transfer the task to the main thread as a Runnable + return mSingleton.commandHandler.post(new ShowTextInputTask(x, y, w, h)); + } + + public static boolean isTextInputEvent(KeyEvent event) { + + // Key pressed with Ctrl should be sent as SDL_KEYDOWN/SDL_KEYUP and not SDL_TEXTINPUT + if (event.isCtrlPressed()) { + return false; + } + + return event.isPrintingKey() || event.getKeyCode() == KeyEvent.KEYCODE_SPACE; + } + + public static boolean handleKeyEvent(View v, int keyCode, KeyEvent event, InputConnection ic) { + int deviceId = event.getDeviceId(); + int source = event.getSource(); + + if (source == InputDevice.SOURCE_UNKNOWN) { + InputDevice device = InputDevice.getDevice(deviceId); + if (device != null) { + source = device.getSources(); + } + } + +// if (event.getAction() == KeyEvent.ACTION_DOWN) { +// Log.v("SDL", "key down: " + keyCode + ", deviceId = " + deviceId + ", source = " + source); +// } else if (event.getAction() == KeyEvent.ACTION_UP) { +// Log.v("SDL", "key up: " + keyCode + ", deviceId = " + deviceId + ", source = " + source); +// } + + // Dispatch the different events depending on where they come from + // Some SOURCE_JOYSTICK, SOURCE_DPAD or SOURCE_GAMEPAD are also SOURCE_KEYBOARD + // So, we try to process them as JOYSTICK/DPAD/GAMEPAD events first, if that fails we try them as KEYBOARD + // + // Furthermore, it's possible a game controller has SOURCE_KEYBOARD and + // SOURCE_JOYSTICK, while its key events arrive from the keyboard source + // So, retrieve the device itself and check all of its sources + if (SDLControllerManager.isDeviceSDLJoystick(deviceId)) { + // Note that we process events with specific key codes here + if (event.getAction() == KeyEvent.ACTION_DOWN) { + if (SDLControllerManager.onNativePadDown(deviceId, keyCode) == 0) { + return true; + } + } else if (event.getAction() == KeyEvent.ACTION_UP) { + if (SDLControllerManager.onNativePadUp(deviceId, keyCode) == 0) { + return true; + } + } + } + + if ((source & InputDevice.SOURCE_MOUSE) == InputDevice.SOURCE_MOUSE) { + // on some devices key events are sent for mouse BUTTON_BACK/FORWARD presses + // they are ignored here because sending them as mouse input to SDL is messy + if ((keyCode == KeyEvent.KEYCODE_BACK) || (keyCode == KeyEvent.KEYCODE_FORWARD)) { + switch (event.getAction()) { + case KeyEvent.ACTION_DOWN: + case KeyEvent.ACTION_UP: + // mark the event as handled or it will be handled by system + // handling KEYCODE_BACK by system will call onBackPressed() + return true; + } + } + } + + if (event.getAction() == KeyEvent.ACTION_DOWN) { + if (isTextInputEvent(event)) { + if (ic != null) { + ic.commitText(String.valueOf((char) event.getUnicodeChar()), 1); + } else { + SDLInputConnection.nativeCommitText(String.valueOf((char) event.getUnicodeChar()), 1); + } + } + onNativeKeyDown(keyCode); + return true; + } else if (event.getAction() == KeyEvent.ACTION_UP) { + onNativeKeyUp(keyCode); + return true; + } + + return false; + } + + /** + * This method is called by SDL using JNI. + */ + public static Surface getNativeSurface() { + if (SDLActivity.mSurface == null) { + return null; + } + return SDLActivity.mSurface.getNativeSurface(); + } + + // Input + + /** + * This method is called by SDL using JNI. + */ + public static void initTouch() { + int[] ids = InputDevice.getDeviceIds(); + + for (int id : ids) { + InputDevice device = InputDevice.getDevice(id); + /* Allow SOURCE_TOUCHSCREEN and also Virtual InputDevices because they can send TOUCHSCREEN events */ + if (device != null && ((device.getSources() & InputDevice.SOURCE_TOUCHSCREEN) == InputDevice.SOURCE_TOUCHSCREEN + || device.isVirtual())) { + + int touchDevId = device.getId(); + /* + * Prevent id to be -1, since it's used in SDL internal for synthetic events + * Appears when using Android emulator, eg: + * adb shell input mouse tap 100 100 + * adb shell input touchscreen tap 100 100 + */ + if (touchDevId < 0) { + touchDevId -= 1; + } + nativeAddTouch(touchDevId, device.getName()); + } + } + } + + // Messagebox + + /** Result of current messagebox. Also used for blocking the calling thread. */ + protected final int[] messageboxSelection = new int[1]; + + /** + * This method is called by SDL using JNI. + * Shows the messagebox from UI thread and block calling thread. + * buttonFlags, buttonIds and buttonTexts must have same length. + * @param buttonFlags array containing flags for every button. + * @param buttonIds array containing id for every button. + * @param buttonTexts array containing text for every button. + * @param colors null for default or array of length 5 containing colors. + * @return button id or -1. + */ + public int messageboxShowMessageBox( + final int flags, + final String title, + final String message, + final int[] buttonFlags, + final int[] buttonIds, + final String[] buttonTexts, + final int[] colors) { + + messageboxSelection[0] = -1; + + // sanity checks + + if ((buttonFlags.length != buttonIds.length) && (buttonIds.length != buttonTexts.length)) { + return -1; // implementation broken + } + + // collect arguments for Dialog + + final Bundle args = new Bundle(); + args.putInt("flags", flags); + args.putString("title", title); + args.putString("message", message); + args.putIntArray("buttonFlags", buttonFlags); + args.putIntArray("buttonIds", buttonIds); + args.putStringArray("buttonTexts", buttonTexts); + args.putIntArray("colors", colors); + + // trigger Dialog creation on UI thread + + runOnUiThread(new Runnable() { + @Override + public void run() { + messageboxCreateAndShow(args); + } + }); + + // block the calling thread + + synchronized (messageboxSelection) { + try { + messageboxSelection.wait(); + } catch (InterruptedException ex) { + ex.printStackTrace(); + return -1; + } + } + + // return selected value + + return messageboxSelection[0]; + } + + protected void messageboxCreateAndShow(Bundle args) { + + // TODO set values from "flags" to messagebox dialog + + // get colors + + int[] colors = args.getIntArray("colors"); + int backgroundColor; + int textColor; + int buttonBorderColor; + int buttonBackgroundColor; + int buttonSelectedColor; + if (colors != null) { + int i = -1; + backgroundColor = colors[++i]; + textColor = colors[++i]; + buttonBorderColor = colors[++i]; + buttonBackgroundColor = colors[++i]; + buttonSelectedColor = colors[++i]; + } else { + backgroundColor = Color.TRANSPARENT; + textColor = Color.TRANSPARENT; + buttonBorderColor = Color.TRANSPARENT; + buttonBackgroundColor = Color.TRANSPARENT; + buttonSelectedColor = Color.TRANSPARENT; + } + + // create dialog with title and a listener to wake up calling thread + + final AlertDialog dialog = new AlertDialog.Builder(this).create(); + dialog.setTitle(args.getString("title")); + dialog.setCancelable(false); + dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface unused) { + synchronized (messageboxSelection) { + messageboxSelection.notify(); + } + } + }); + + // create text + + TextView message = new TextView(this); + message.setGravity(Gravity.CENTER); + message.setText(args.getString("message")); + if (textColor != Color.TRANSPARENT) { + message.setTextColor(textColor); + } + + // create buttons + + int[] buttonFlags = args.getIntArray("buttonFlags"); + int[] buttonIds = args.getIntArray("buttonIds"); + String[] buttonTexts = args.getStringArray("buttonTexts"); + + final SparseArray