From cb1d89065f7732dd239bdc89cf7e917e1b653d7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ram=C3=ADrez?= Date: Wed, 21 May 2025 03:23:47 +0200 Subject: [PATCH] Implement runtime texture loading --- engine/components/mesh_filter.cpp | 25 +- engine/core/engine.cpp | 15 +- engine/graphics/renderer.cpp | 58 ++-- engine/input/input.cpp | 18 +- engine/resources/mesh.cpp | 11 +- engine/resources/texture.cpp | 27 ++ engine/utils/file.cpp | 41 +-- include/tinyobjloader/tiny_obj_loader.h | 283 +++++++++--------- include/xrbds/core/types.h | 19 ++ include/xrbds/input/input.h | 55 ++-- include/xrbds/resources/mesh.h | 20 +- include/xrbds/resources/texture.h | 46 +++ include/xrbds/utils/file.h | 37 ++- .../assets/meshes/cube/cube-tex.obj | 98 ++++++ .../hello_world/assets/meshes/cube/cube.mtl | 7 + .../assets/meshes/cube/texture.img.bin | 1 + .../assets/meshes/cube/texture.png | Bin 0 -> 1911 bytes .../assets/meshes/mococo/ATTRIBUTION.txt | 6 + .../hello_world/assets/meshes/mococo/cube.obj | 46 --- .../meshes/mococo/mococotexture_face1.img.bin | 27 ++ .../meshes/mococo/mococotexture_face1.png | Bin 0 -> 33873 bytes .../mococo/textures/mococotexture_face1.png | Bin 34313 -> 0 bytes .../hello_world/assets/meshes/quad/quad.mtl | 7 + .../hello_world/assets/meshes/quad/quad.obj | 15 + .../assets/meshes/quad/texture.img.bin | Bin 0 -> 32768 bytes .../assets/meshes/quad/texture.png | Bin 0 -> 3586 bytes 26 files changed, 590 insertions(+), 272 deletions(-) create mode 100644 engine/resources/texture.cpp create mode 100644 include/xrbds/resources/texture.h create mode 100644 samples/hello_world/assets/meshes/cube/cube-tex.obj create mode 100644 samples/hello_world/assets/meshes/cube/cube.mtl create mode 100644 samples/hello_world/assets/meshes/cube/texture.img.bin create mode 100644 samples/hello_world/assets/meshes/cube/texture.png create mode 100644 samples/hello_world/assets/meshes/mococo/ATTRIBUTION.txt delete mode 100644 samples/hello_world/assets/meshes/mococo/cube.obj create mode 100644 samples/hello_world/assets/meshes/mococo/mococotexture_face1.img.bin create mode 100644 samples/hello_world/assets/meshes/mococo/mococotexture_face1.png delete mode 100644 samples/hello_world/assets/meshes/mococo/textures/mococotexture_face1.png create mode 100644 samples/hello_world/assets/meshes/quad/quad.mtl create mode 100644 samples/hello_world/assets/meshes/quad/quad.obj create mode 100644 samples/hello_world/assets/meshes/quad/texture.img.bin create mode 100644 samples/hello_world/assets/meshes/quad/texture.png diff --git a/engine/components/mesh_filter.cpp b/engine/components/mesh_filter.cpp index 97e6e77..e232824 100644 --- a/engine/components/mesh_filter.cpp +++ b/engine/components/mesh_filter.cpp @@ -5,9 +5,30 @@ MeshFilter::MeshFilter(const FString &path) { // Load the mesh from the file - auto vertices = Utils::File::ReadObjFile(path); + auto [shapes, materials] = Utils::File::ReadObjFile(path); - mesh = LoadResource(vertices); + TVector> textures; + for (const auto &material : materials) { + auto texture_binary = Utils::File::ReadBinaryFile( + path.substr(0, path.find_last_of("/")) + .append("/") + .append(material.diffuse_texname.substr( + 0, material.diffuse_texname.find_last_of("."))) + .append(".img.bin")); + + // auto palette_binary = Utils::File::ReadBinaryFile( + // path.substr(0, path.find_last_of("/")) + // .append("/") + // .append(material.diffuse_texname.substr( + // 0, material.diffuse_texname.find_last_of("."))) + // .append(".pal.bin")); + + auto palette_binary = TVector(); + + textures.push_back(LoadResource(texture_binary, palette_binary)); + } + + mesh = LoadResource(shapes, materials, textures); } PtrUnq MeshFilter::Initialize(const FString &path) { diff --git a/engine/core/engine.cpp b/engine/core/engine.cpp index f72abac..45a38b6 100644 --- a/engine/core/engine.cpp +++ b/engine/core/engine.cpp @@ -44,12 +44,19 @@ PtrUnq &Engine::GetInstance() { } void Engine::run() { - // TEST ------------------------ + Renderer::GetInstance(); + // TEST ------------------------ // Create a MeshInstance3D PtrShr meshInstance = NewNode("meshes/mococo/mococo.obj"); + // PtrShr meshIPnstance = + // NewNode("meshes/cube/cube-tex.obj"); + + // PtrShr meshInstance = + // NewNode("meshes/quad/quad.obj"); + // ----------------------------- while (pmMainLoop()) { @@ -63,6 +70,9 @@ void Engine::processInput() { Input::Update(); } void Engine::update() { // Update + if (Input::IsButtonDown(EButton::A)) { + iprintf("A button pressed\n"); + } } void Engine::render() { @@ -84,8 +94,7 @@ void Engine::render() { Engine::Engine() { // Initialize nitroFS - char nitroFSPath[32]; - strcpy(nitroFSPath, "assets"); + char nitroFSPath[] = {"assets"}; char *nitroFSPathptr = nitroFSPath; if (!nitroFSInit(&nitroFSPathptr)) exit(-1); diff --git a/engine/graphics/renderer.cpp b/engine/graphics/renderer.cpp index 5588e29..1d211e8 100644 --- a/engine/graphics/renderer.cpp +++ b/engine/graphics/renderer.cpp @@ -7,6 +7,8 @@ #include #include +#include "input/input.h" + PtrUnq Renderer::Instance; PtrUnq &Renderer::GetInstance() { @@ -16,34 +18,45 @@ PtrUnq &Renderer::GetInstance() { return Instance; } +// TEST ------------------- +float rotation = 45.f; +// TEST ------------------- void Renderer::beginFrame() { glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(70, 256.0 / 192.0, 0.1, 100); + // glPolyFmt(POLY_ALPHA(31) | POLY_CULL_BACK); + + // glMatrixMode(GL_TEXTURE); + // glLoadIdentity(); glMatrixMode(GL_MODELVIEW); - glPushMatrix(); // Save the current matrix state - - glPolyFmt(POLY_ALPHA(31) | POLY_CULL_BACK); - glLoadIdentity(); // Load the identity matrix + // TEST ------------------- + if (Input::IsButtonHeld(EButton::LEFT)) + rotation++; + if (Input::IsButtonHeld(EButton::RIGHT)) + rotation--; + // TEST ------------------- + // Render scene - glTranslatef(0.f, 0.f, -4.f); // Move the camera back - glRotatef(45, 1, 1, 0); // Rotation + glTranslatef(0.f, -.75f, -2.f); // Move the camera back + glRotatef(rotation, 1, 1, 0); // Rotation } void Renderer::render(const Transform &transform, const MeshFilter &meshFilter) { - // drawCube(1.0f); // Draw a cube + glPolyFmt(POLY_ALPHA(31) | POLY_CULL_BACK); + glBindTexture(0, meshFilter.getMesh()->getTextures()[0]->getId()); glBegin(GL_TRIANGLES); - for (const auto &shapes : meshFilter.getMesh()->getVertices()) { - for (const auto &vertex : shapes) { - glColor3f(1.0, 0.0, 0.0); // Red - glVertex3f(vertex.position.x, vertex.position.y, vertex.position.z); - glNormal3f(vertex.normal.x, vertex.normal.y, vertex.normal.z); + glColor3b(255, 255, 255); + for (const auto &shape : meshFilter.getMesh()->getShapes()) { + for (const auto &vertex : shape.vertices) { + // glNormal3f(vertex.normal.x, vertex.normal.y, vertex.normal.z); glTexCoord2f(vertex.texCoords.x, vertex.texCoords.y); + glVertex3f(vertex.position.x, vertex.position.y, vertex.position.z); } } @@ -110,19 +123,30 @@ void Renderer::drawCube(float size) { Renderer::Renderer() { // Initialize the video subsystem - lcdMainOnTop(); // Set the main screen on top - videoSetMode(MODE_0_3D); // Set 3D rendering mode - videoSetModeSub(MODE_5_2D); // Set 2D rendering mode for the sub-screen - vramSetBankA(VRAM_A_MAIN_BG); // Allocate VRAM for textures + lcdMainOnTop(); // Set the main screen on top + videoSetMode(MODE_0_3D); // Set 3D rendering mode + videoSetModeSub(MODE_5_2D); // Set 2D rendering mode for the sub-screen + vramSetBankB(VRAM_B_TEXTURE); + vramSetBankC(VRAM_C_TEXTURE); + vramSetBankD(VRAM_D_TEXTURE); + vramSetBankE(VRAM_E_TEX_PALETTE); + vramSetBankF(VRAM_F_LCD); + // vramSetBankG(VRAM_G_TEX_PALETTE); // Initialize the 3D engine glInit(); + glEnable(GL_TEXTURE_2D); + glViewport(0, 0, 255, 191); // Set viewport glEnable(GL_ANTIALIAS); glClearColor(0, 0, 0, 31); // Set clear color (black) glClearPolyID(63); // Set default polygon ID glClearDepth(GL_MAX_DEPTH); // Set clear depth - glViewport(0, 0, 255, 191); // Set viewport + glEnable(GL_BLEND); + + vramSetBankA(VRAM_A_TEXTURE); // Allocate VRAM for textures + vramSetBankB(VRAM_B_LCD); // Debug + consoleInit(NULL, 0, BgType_Text4bpp, BgSize_T_256x256, 23, 2, false, true); consoleDemoInit(); } diff --git a/engine/input/input.cpp b/engine/input/input.cpp index 3047930..cb10cf6 100644 --- a/engine/input/input.cpp +++ b/engine/input/input.cpp @@ -4,20 +4,20 @@ #include // Static members -u32 Input::KeysHeldState = 0; -u32 Input::KeysDownState = 0; -u32 Input::KeysUpState = 0; +u32 Input::ButtonsHeldState = 0; +u32 Input::ButtonsDownState = 0; +u32 Input::ButtonsUpState = 0; void Input::Update() { // Update key states scanKeys(); - KeysHeldState = keysHeld(); - KeysDownState = keysDown(); - KeysUpState = keysUp(); + ButtonsHeldState = keysHeld(); + ButtonsDownState = keysDown(); + ButtonsUpState = keysUp(); } -bool Input::IsKeyHeld(EKey key) { return KeysHeldState & key; } +bool Input::IsButtonHeld(EButton key) { return ButtonsHeldState & key; } -bool Input::IsKeyDown(EKey key) { return KeysDownState & key; } +bool Input::IsButtonDown(EButton key) { return ButtonsDownState & key; } -bool Input::IsKeyUp(EKey key) { return KeysUpState & key; } +bool Input::IsButtonUp(EButton key) { return ButtonsUpState & key; } diff --git a/engine/resources/mesh.cpp b/engine/resources/mesh.cpp index b98f9e5..bc1ad56 100644 --- a/engine/resources/mesh.cpp +++ b/engine/resources/mesh.cpp @@ -1,8 +1,11 @@ #include "resources/mesh.h" -Mesh Mesh::Load(const TVector> &vertices) { - return std::move(Mesh(vertices)); +Mesh Mesh::Load(const TVector &shapes, + const TVector &materials, + const TVector> &textures) { + return std::move(Mesh(shapes, materials, textures)); } -Mesh::Mesh(const TVector> &vertices) - : Super(), vertices(vertices) {} \ No newline at end of file +Mesh::Mesh(const TVector &shapes, const TVector &materials, + const TVector> &textures) + : Super(), shapes(shapes), materials(materials), textures(textures) {} \ No newline at end of file diff --git a/engine/resources/texture.cpp b/engine/resources/texture.cpp new file mode 100644 index 0000000..3024ef9 --- /dev/null +++ b/engine/resources/texture.cpp @@ -0,0 +1,27 @@ +#include "resources/texture.h" + +#include + +Texture::~Texture() { + // TODO: Check what the hell is happening here + // glBindTexture(0, id); + // glColorTableEXT(0, 0, 0, 0, 0, nullptr); + // glDeleteTextures(1, &id); + + // iprintf("Texture %d deleted\n", id); +} + +Texture Texture::Load(TVector &data, + TVector &palette) { + return Texture(data, palette); +} + +Texture::Texture(TVector &data, TVector &palette) + : Super() { + glGenTextures(1, &id); + glBindTexture(0, id); + // TODO: Manage different texture formats + glTexImage2D(0, 0, GL_RGBA, TEXTURE_SIZE_128, TEXTURE_SIZE_128, 0, + TEXGEN_TEXCOORD, (u8 *)data.data()); + // glColorTableEXT(0, 0, 32, 0, 0, (u16 *)palette.data()); +} \ No newline at end of file diff --git a/engine/utils/file.cpp b/engine/utils/file.cpp index 4b22362..1d55d69 100644 --- a/engine/utils/file.cpp +++ b/engine/utils/file.cpp @@ -2,6 +2,7 @@ #define TINYOBJLOADER_IMPLEMENTATION #include "tiny_obj_loader.h" +#include namespace Utils::File { @@ -11,15 +12,13 @@ FString ReadTextFile(const FString &path) { FString result; FILE *f = fopen(AssetPath(path).c_str(), "rb"); if (!f) { - iprintf("No se pudo abrir el archivo\n"); + // TODO: iprintf("No se pudo abrir el archivo\n"); } else { - iprintf("Archivo abierto\n"); - fseek(f, 0, SEEK_END); size_t size = ftell(f); rewind(f); - TVector buffer(size); + TVector buffer(size); fread(buffer.data(), 1, size, f); fclose(f); @@ -30,28 +29,29 @@ FString ReadTextFile(const FString &path) { return std::move(result); } -TVector> ReadObjFile(const FString &path) { +TTuple, TVector> ReadObjFile(const FString &path) { + FString nitroPath = AssetPath(path); + FString baseFolder = + nitroPath.substr(0, nitroPath.find_last_of("/")).append("/"); + tinyobj::attrib_t attrib; TVector shapes; TVector materials; FString err; bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &err, - AssetPath(path).c_str(), - AssetPath(path + "/..").c_str(), true); + nitroPath.c_str(), baseFolder.c_str(), true); - if (ret) - iprintf("Cargado correctamente\n"); - else - iprintf("Error al cargar el archivo: %s\n", err.c_str()); + if (!ret) { + // TODO: print error + return {TVector(), TVector()}; + } - iprintf("Numero de materiales: %d\n", materials.size()); - - TVector> vertices; + TVector shape_vertices; // Loop over shapes for (size_t s = 0; s < shapes.size(); s++) { - vertices.push_back({}); + shape_vertices.push_back({}); // Loop over faces(polygon) size_t index_offset = 0; for (size_t f = 0; f < shapes[s].mesh.num_face_vertices.size(); f++) { @@ -88,20 +88,23 @@ TVector> ReadObjFile(const FString &path) { tinyobj::real_t ty = attrib.texcoords[2 * size_t(idx.texcoord_index) + 1]; + // I lost 3 days bacause of this :') + ty = 1.0f - std::clamp(ty, 0.0f, 1.0f); + texCoords = FVector2(tx, ty); } - vertices[s].push_back(FVertex(positions, normals, texCoords)); + shape_vertices[s].vertices.push_back( + FVertex(positions, normals, texCoords)); } index_offset += fv; // per-face material - // shapes[s].mesh.material_ids[f]; + // shape_materials.push_back(materials[shapes[s].mesh.material_ids[f]]); } } - return std::move(vertices); + return {shape_vertices, materials}; } - } // namespace Utils::File diff --git a/include/tinyobjloader/tiny_obj_loader.h b/include/tinyobjloader/tiny_obj_loader.h index ee44076..e2f0ea1 100644 --- a/include/tinyobjloader/tiny_obj_loader.h +++ b/include/tinyobjloader/tiny_obj_loader.h @@ -23,6 +23,7 @@ THE SOFTWARE. */ // +// xrbDS 0.1 : Change TINYOBJ_SSCANF_BUFFER_SIZE to 512 // version 1.0.6 : Add TINYOBJLOADER_USE_DOUBLE option(#124) // version 1.0.5 : Ignore `Tr` when `d` exists in MTL(#43) // version 1.0.4 : Support multiple filenames for 'mtllib'(#112) @@ -98,15 +99,15 @@ namespace tinyobj { // cube_left | cube_right #ifdef TINYOBJLOADER_USE_DOUBLE - //#pragma message "using double" - typedef double real_t; +// #pragma message "using double" +typedef double real_t; #else - //#pragma message "using float" - typedef float real_t; +// #pragma message "using float" +typedef float real_t; #endif typedef enum { - TEXTURE_TYPE_NONE, // default + TEXTURE_TYPE_NONE, // default TEXTURE_TYPE_SPHERE, TEXTURE_TYPE_CUBE_TOP, TEXTURE_TYPE_CUBE_BOTTOM, @@ -118,18 +119,18 @@ typedef enum { typedef struct { texture_type_t type; // -type (default TEXTURE_TYPE_NONE) - real_t sharpness; // -boost (default 1.0?) - real_t brightness; // base_value in -mm option (default 0) - real_t contrast; // gain_value in -mm option (default 1) - real_t origin_offset[3]; // -o u [v [w]] (default 0 0 0) - real_t scale[3]; // -s u [v [w]] (default 1 1 1) - real_t turbulence[3]; // -t u [v [w]] (default 0 0 0) + real_t sharpness; // -boost (default 1.0?) + real_t brightness; // base_value in -mm option (default 0) + real_t contrast; // gain_value in -mm option (default 1) + real_t origin_offset[3]; // -o u [v [w]] (default 0 0 0) + real_t scale[3]; // -s u [v [w]] (default 1 1 1) + real_t turbulence[3]; // -t u [v [w]] (default 0 0 0) // int texture_resolution; // -texres resolution (default = ?) TODO - bool clamp; // -clamp (default false) - char imfchan; // -imfchan (the default for bump is 'l' and for decal is 'm') - bool blendu; // -blendu (default on) - bool blendv; // -blendv (default on) - real_t bump_multiplier; // -bm (for bump maps only, default 1.0) + bool clamp; // -clamp (default false) + char imfchan; // -imfchan (the default for bump is 'l' and for decal is 'm') + bool blendu; // -blendu (default on) + bool blendv; // -blendv (default on) + real_t bump_multiplier; // -bm (for bump maps only, default 1.0) } texture_option_t; typedef struct { @@ -141,20 +142,20 @@ typedef struct { real_t transmittance[3]; real_t emission[3]; real_t shininess; - real_t ior; // index of refraction - real_t dissolve; // 1 == opaque; 0 == fully transparent + real_t ior; // index of refraction + real_t dissolve; // 1 == opaque; 0 == fully transparent // illumination model (see http://www.fileformat.info/format/material/) int illum; - int dummy; // Suppress padding warning. + int dummy; // Suppress padding warning. - std::string ambient_texname; // map_Ka - std::string diffuse_texname; // map_Kd - std::string specular_texname; // map_Ks - std::string specular_highlight_texname; // map_Ns - std::string bump_texname; // map_bump, bump - std::string displacement_texname; // disp - std::string alpha_texname; // map_d + std::string ambient_texname; // map_Ka + std::string diffuse_texname; // map_Kd + std::string specular_texname; // map_Ks + std::string specular_highlight_texname; // map_Ns + std::string bump_texname; // map_bump, bump + std::string displacement_texname; // disp + std::string alpha_texname; // map_d texture_option_t ambient_texopt; texture_option_t diffuse_texopt; @@ -166,20 +167,20 @@ typedef struct { // PBR extension // http://exocortex.com/blog/extending_wavefront_mtl_to_support_pbr - real_t roughness; // [0, 1] default 0 - real_t metallic; // [0, 1] default 0 - real_t sheen; // [0, 1] default 0 - real_t clearcoat_thickness; // [0, 1] default 0 - real_t clearcoat_roughness; // [0, 1] default 0 - real_t anisotropy; // aniso. [0, 1] default 0 - real_t anisotropy_rotation; // anisor. [0, 1] default 0 + real_t roughness; // [0, 1] default 0 + real_t metallic; // [0, 1] default 0 + real_t sheen; // [0, 1] default 0 + real_t clearcoat_thickness; // [0, 1] default 0 + real_t clearcoat_roughness; // [0, 1] default 0 + real_t anisotropy; // aniso. [0, 1] default 0 + real_t anisotropy_rotation; // anisor. [0, 1] default 0 real_t pad0; real_t pad1; - std::string roughness_texname; // map_Pr - std::string metallic_texname; // map_Pm - std::string sheen_texname; // map_Ps - std::string emissive_texname; // map_Ke - std::string normal_texname; // norm. For normal mapping. + std::string roughness_texname; // map_Pr + std::string metallic_texname; // map_Pm + std::string sheen_texname; // map_Ps + std::string emissive_texname; // map_Ke + std::string normal_texname; // norm. For normal mapping. texture_option_t roughness_texopt; texture_option_t metallic_texopt; @@ -210,11 +211,11 @@ typedef struct { typedef struct { std::vector indices; - std::vector num_face_vertices; // The number of vertices per - // face. 3 = polygon, 4 = quad, - // ... Up to 255. - std::vector material_ids; // per-face material ID - std::vector tags; // SubD tag + std::vector num_face_vertices; // The number of vertices per + // face. 3 = polygon, 4 = quad, + // ... Up to 255. + std::vector material_ids; // per-face material ID + std::vector tags; // SubD tag } mesh_t; typedef struct { @@ -224,9 +225,9 @@ typedef struct { // Vertex attributes typedef struct { - std::vector vertices; // 'v' - std::vector normals; // 'vn' - std::vector texcoords; // 'vt' + std::vector vertices; // 'v' + std::vector normals; // 'vn' + std::vector texcoords; // 'vt' } attrib_t; typedef struct callback_t_ { @@ -254,18 +255,12 @@ typedef struct callback_t_ { void (*object_cb)(void *user_data, const char *name); callback_t_() - : vertex_cb(NULL), - normal_cb(NULL), - texcoord_cb(NULL), - index_cb(NULL), - usemtl_cb(NULL), - mtllib_cb(NULL), - group_cb(NULL), - object_cb(NULL) {} + : vertex_cb(NULL), normal_cb(NULL), texcoord_cb(NULL), index_cb(NULL), + usemtl_cb(NULL), mtllib_cb(NULL), group_cb(NULL), object_cb(NULL) {} } callback_t; class MaterialReader { - public: +public: MaterialReader() {} virtual ~MaterialReader(); @@ -276,7 +271,7 @@ class MaterialReader { }; class MaterialFileReader : public MaterialReader { - public: +public: explicit MaterialFileReader(const std::string &mtl_basedir) : m_mtlBaseDir(mtl_basedir) {} virtual ~MaterialFileReader() {} @@ -284,12 +279,12 @@ class MaterialFileReader : public MaterialReader { std::vector *materials, std::map *matMap, std::string *err); - private: +private: std::string m_mtlBaseDir; }; class MaterialStreamReader : public MaterialReader { - public: +public: explicit MaterialStreamReader(std::istream &inStream) : m_inStream(inStream) {} virtual ~MaterialStreamReader() {} @@ -297,7 +292,7 @@ class MaterialStreamReader : public MaterialReader { std::vector *materials, std::map *matMap, std::string *err); - private: +private: std::istream &m_inStream; }; @@ -341,9 +336,9 @@ void LoadMtl(std::map *material_map, std::vector *materials, std::istream *inStream, std::string *warning); -} // namespace tinyobj +} // namespace tinyobj -#endif // TINY_OBJ_LOADER_H_ +#endif // TINY_OBJ_LOADER_H_ #ifdef TINYOBJLOADER_IMPLEMENTATION #include @@ -361,7 +356,7 @@ namespace tinyobj { MaterialReader::~MaterialReader() {} -#define TINYOBJ_SSCANF_BUFFER_SIZE (4096) +#define TINYOBJ_SSCANF_BUFFER_SIZE (512) struct vertex_index { int v_idx, vt_idx, vn_idx; @@ -401,31 +396,35 @@ static std::istream &safeGetline(std::istream &is, std::string &t) { for (;;) { int c = sb->sbumpc(); switch (c) { - case '\n': - return is; - case '\r': - if (sb->sgetc() == '\n') sb->sbumpc(); - return is; - case EOF: - // Also handle the case when the last line has no line ending - if (t.empty()) is.setstate(std::ios::eofbit); - return is; - default: - t += static_cast(c); + case '\n': + return is; + case '\r': + if (sb->sgetc() == '\n') + sb->sbumpc(); + return is; + case EOF: + // Also handle the case when the last line has no line ending + if (t.empty()) + is.setstate(std::ios::eofbit); + return is; + default: + t += static_cast(c); } } } #define IS_SPACE(x) (((x) == ' ') || ((x) == '\t')) -#define IS_DIGIT(x) \ +#define IS_DIGIT(x) \ (static_cast((x) - '0') < static_cast(10)) #define IS_NEW_LINE(x) (((x) == '\r') || ((x) == '\n') || ((x) == '\0')) // Make index zero-base, and also support relative index. static inline int fixIndex(int idx, int n) { - if (idx > 0) return idx - 1; - if (idx == 0) return 0; - return n + idx; // negative value = relative + if (idx > 0) + return idx - 1; + if (idx == 0) + return 0; + return n + idx; // negative value = relative } static inline std::string parseString(const char **token) { @@ -521,9 +520,11 @@ static bool tryParseDouble(const char *s, const char *s_end, double *result) { } // We must make sure we actually got something. - if (read == 0) goto fail; + if (read == 0) + goto fail; // We allow numbers of form "#", "###" etc. - if (!end_not_reached) goto assemble; + if (!end_not_reached) + goto assemble; // Read the decimal part. if (*curr == '.') { @@ -548,7 +549,8 @@ static bool tryParseDouble(const char *s, const char *s_end, double *result) { goto assemble; } - if (!end_not_reached) goto assemble; + if (!end_not_reached) + goto assemble; // Read the exponent part. if (*curr == 'e' || *curr == 'E') { @@ -574,13 +576,14 @@ static bool tryParseDouble(const char *s, const char *s_end, double *result) { end_not_reached = (curr != s_end); } exponent *= (exp_sign == '+' ? 1 : -1); - if (read == 0) goto fail; + if (read == 0) + goto fail; } assemble: - *result = - (sign == '+' ? 1 : -1) * - (exponent ? std::ldexp(mantissa * std::pow(5.0, exponent), exponent) : mantissa); + *result = (sign == '+' ? 1 : -1) * + (exponent ? std::ldexp(mantissa * std::pow(5.0, exponent), exponent) + : mantissa); return true; fail: return false; @@ -597,16 +600,16 @@ static inline real_t parseReal(const char **token, double default_value = 0.0) { } static inline void parseReal2(real_t *x, real_t *y, const char **token, - const double default_x = 0.0, - const double default_y = 0.0) { + const double default_x = 0.0, + const double default_y = 0.0) { (*x) = parseReal(token, default_x); (*y) = parseReal(token, default_y); } -static inline void parseReal3(real_t *x, real_t *y, real_t *z, const char **token, - const double default_x = 0.0, - const double default_y = 0.0, - const double default_z = 0.0) { +static inline void parseReal3(real_t *x, real_t *y, real_t *z, + const char **token, const double default_x = 0.0, + const double default_y = 0.0, + const double default_z = 0.0) { (*x) = parseReal(token, default_x); (*y) = parseReal(token, default_y); (*z) = parseReal(token, default_z); @@ -638,8 +641,9 @@ static inline bool parseOnOff(const char **token, bool default_value = true) { return ret; } -static inline texture_type_t parseTextureType( - const char **token, texture_type_t default_value = TEXTURE_TYPE_NONE) { +static inline texture_type_t +parseTextureType(const char **token, + texture_type_t default_value = TEXTURE_TYPE_NONE) { (*token) += strspn((*token), " \t"); const char *end = (*token) + strcspn((*token), " \t\r"); texture_type_t ty = default_value; @@ -715,7 +719,7 @@ static vertex_index parseTriple(const char **token, int vsize, int vnsize, } // i/j/k - (*token)++; // skip '/' + (*token)++; // skip '/' vi.vn_idx = fixIndex(atoi((*token)), vnsize); (*token) += strcspn((*token), "/ \t\r"); return vi; @@ -723,7 +727,7 @@ static vertex_index parseTriple(const char **token, int vsize, int vnsize, // Parse raw triples: i, i/j/k, i//k, i/j static vertex_index parseRawTriple(const char **token) { - vertex_index vi(static_cast(0)); // 0 is an invalid index in OBJ + vertex_index vi(static_cast(0)); // 0 is an invalid index in OBJ vi.v_idx = atoi((*token)); (*token) += strcspn((*token), "/ \t\r"); @@ -748,7 +752,7 @@ static vertex_index parseRawTriple(const char **token) { } // i/j/k - (*token)++; // skip '/' + (*token)++; // skip '/' vi.vn_idx = atoi((*token)); (*token) += strcspn((*token), "/ \t\r"); return vi; @@ -785,7 +789,7 @@ static bool ParseTextureNameAndOption(std::string *texname, texopt->turbulence[2] = 0.0f; texopt->type = TEXTURE_TYPE_NONE; - const char *token = linebuf; // Assume line ends with NULL + const char *token = linebuf; // Assume line ends with NULL while (!IS_NEW_LINE((*token))) { if ((0 == strncmp(token, "-blendu", 7)) && IS_SPACE((token[7]))) { @@ -806,15 +810,15 @@ static bool ParseTextureNameAndOption(std::string *texname, } else if ((0 == strncmp(token, "-o", 2)) && IS_SPACE((token[2]))) { token += 3; parseReal3(&(texopt->origin_offset[0]), &(texopt->origin_offset[1]), - &(texopt->origin_offset[2]), &token); + &(texopt->origin_offset[2]), &token); } else if ((0 == strncmp(token, "-s", 2)) && IS_SPACE((token[2]))) { token += 3; parseReal3(&(texopt->scale[0]), &(texopt->scale[1]), &(texopt->scale[2]), - &token, 1.0, 1.0, 1.0); + &token, 1.0, 1.0, 1.0); } else if ((0 == strncmp(token, "-t", 2)) && IS_SPACE((token[2]))) { token += 3; parseReal3(&(texopt->turbulence[0]), &(texopt->turbulence[1]), - &(texopt->turbulence[2]), &token); + &(texopt->turbulence[2]), &token); } else if ((0 == strncmp(token, "-type", 5)) && IS_SPACE((token[5]))) { token += 5; texopt->type = parseTextureType((&token), TEXTURE_TYPE_NONE); @@ -822,7 +826,7 @@ static bool ParseTextureNameAndOption(std::string *texname, token += 9; token += strspn(token, " \t"); const char *end = token + strcspn(token, " \t\r"); - if ((end - token) == 1) { // Assume one char for -imfchan + if ((end - token) == 1) { // Assume one char for -imfchan texopt->imfchan = (*token); } token = end; @@ -831,12 +835,12 @@ static bool ParseTextureNameAndOption(std::string *texname, parseReal2(&(texopt->brightness), &(texopt->contrast), &token, 0.0, 1.0); } else { // Assume texture filename - token += strspn(token, " \t"); // skip space - size_t len = strcspn(token, " \t\r"); // untile next space + token += strspn(token, " \t"); // skip space + size_t len = strcspn(token, " \t\r"); // untile next space texture_name = std::string(token, token + len); token += len; - token += strspn(token, " \t"); // skip space + token += strspn(token, " \t"); // skip space found_texname = true; } @@ -887,10 +891,11 @@ static void InitMaterial(material_t *material) { material->unknown_parameter.clear(); } -static bool exportFaceGroupToShape( - shape_t *shape, const std::vector > &faceGroup, - const std::vector &tags, const int material_id, - const std::string &name, bool triangulate) { +static bool +exportFaceGroupToShape(shape_t *shape, + const std::vector> &faceGroup, + const std::vector &tags, const int material_id, + const std::string &name, bool triangulate) { if (faceGroup.empty()) { return false; } @@ -940,7 +945,7 @@ static bool exportFaceGroupToShape( shape->mesh.num_face_vertices.push_back( static_cast(npolys)); - shape->mesh.material_ids.push_back(material_id); // per face + shape->mesh.material_ids.push_back(material_id); // per face } } @@ -1004,9 +1009,11 @@ void LoadMtl(std::map *material_map, token += strspn(token, " \t"); assert(token); - if (token[0] == '\0') continue; // empty line + if (token[0] == '\0') + continue; // empty line - if (token[0] == '#') continue; // comment line + if (token[0] == '#') + continue; // comment line // new mtl if ((0 == strncmp(token, "newmtl", 6)) && IS_SPACE((token[6]))) { @@ -1305,7 +1312,7 @@ void LoadMtl(std::map *material_map, token += 5; ParseTextureNameAndOption( &(material.normal_texname), &(material.normal_texopt), token, - /* is_bump */ false); // @fixme { is_bump will be true? } + /* is_bump */ false); // @fixme { is_bump will be true? } continue; } @@ -1431,7 +1438,7 @@ bool LoadObj(attrib_t *attrib, std::vector *shapes, std::vector vn; std::vector vt; std::vector tags; - std::vector > faceGroup; + std::vector> faceGroup; std::string name; // material @@ -1464,9 +1471,11 @@ bool LoadObj(attrib_t *attrib, std::vector *shapes, token += strspn(token, " \t"); assert(token); - if (token[0] == '\0') continue; // empty line + if (token[0] == '\0') + continue; // empty line - if (token[0] == '#') continue; // comment line + if (token[0] == '#') + continue; // comment line // vertex if (token[0] == 'v' && IS_SPACE((token[1]))) { @@ -1564,9 +1573,8 @@ bool LoadObj(attrib_t *attrib, std::vector *shapes, if (filenames.empty()) { if (err) { - (*err) += - "WARN: Looks like empty filename for mtllib. Use default " - "material. \n"; + (*err) += "WARN: Looks like empty filename for mtllib. Use default " + "material. \n"; } } else { bool found = false; @@ -1575,7 +1583,7 @@ bool LoadObj(attrib_t *attrib, std::vector *shapes, bool ok = (*readMatFn)(filenames[s].c_str(), materials, &material_map, &err_mtl); if (err && (!err_mtl.empty())) { - (*err) += err_mtl; // This should be warn message. + (*err) += err_mtl; // This should be warn message. } if (ok) { @@ -1586,9 +1594,8 @@ bool LoadObj(attrib_t *attrib, std::vector *shapes, if (!found) { if (err) { - (*err) += - "WARN: Failed to load material file(s). Use default " - "material.\n"; + (*err) += "WARN: Failed to load material file(s). Use default " + "material.\n"; } } } @@ -1617,7 +1624,7 @@ bool LoadObj(attrib_t *attrib, std::vector *shapes, while (!IS_NEW_LINE(token[0])) { std::string str = parseString(&token); names.push_back(str); - token += strspn(token, " \t\r"); // skip tag + token += strspn(token, " \t\r"); // skip tag } assert(names.size() > 0); @@ -1716,7 +1723,7 @@ bool LoadObj(attrib_t *attrib, std::vector *shapes, if (ret || shape.mesh.indices.size()) { shapes->push_back(shape); } - faceGroup.clear(); // for safety + faceGroup.clear(); // for safety if (err) { (*err) += errss.str(); @@ -1737,7 +1744,7 @@ bool LoadObjWithCallback(std::istream &inStream, const callback_t &callback, // material std::map material_map; - int material_id = -1; // -1 = invalid + int material_id = -1; // -1 = invalid std::vector indices; std::vector materials; @@ -1770,14 +1777,16 @@ bool LoadObjWithCallback(std::istream &inStream, const callback_t &callback, token += strspn(token, " \t"); assert(token); - if (token[0] == '\0') continue; // empty line + if (token[0] == '\0') + continue; // empty line - if (token[0] == '#') continue; // comment line + if (token[0] == '#') + continue; // comment line // vertex if (token[0] == 'v' && IS_SPACE((token[1]))) { token += 2; - real_t x, y, z, w; // w is optional. default = 1.0 + real_t x, y, z, w; // w is optional. default = 1.0 parseV(&x, &y, &z, &w, &token); if (callback.vertex_cb) { callback.vertex_cb(user_data, x, y, z, w); @@ -1799,7 +1808,7 @@ bool LoadObjWithCallback(std::istream &inStream, const callback_t &callback, // texcoord if (token[0] == 'v' && token[1] == 't' && IS_SPACE((token[2]))) { token += 3; - real_t x, y, z; // y and z are optional. default = 0.0 + real_t x, y, z; // y and z are optional. default = 0.0 parseReal3(&x, &y, &z, &token); if (callback.texcoord_cb) { callback.texcoord_cb(user_data, x, y, z); @@ -1873,9 +1882,8 @@ bool LoadObjWithCallback(std::istream &inStream, const callback_t &callback, if (filenames.empty()) { if (err) { - (*err) += - "WARN: Looks like empty filename for mtllib. Use default " - "material. \n"; + (*err) += "WARN: Looks like empty filename for mtllib. Use default " + "material. \n"; } } else { bool found = false; @@ -1884,7 +1892,7 @@ bool LoadObjWithCallback(std::istream &inStream, const callback_t &callback, bool ok = (*readMatFn)(filenames[s].c_str(), &materials, &material_map, &err_mtl); if (err && (!err_mtl.empty())) { - (*err) += err_mtl; // This should be warn message. + (*err) += err_mtl; // This should be warn message. } if (ok) { @@ -1895,9 +1903,8 @@ bool LoadObjWithCallback(std::istream &inStream, const callback_t &callback, if (!found) { if (err) { - (*err) += - "WARN: Failed to load material file(s). Use default " - "material.\n"; + (*err) += "WARN: Failed to load material file(s). Use default " + "material.\n"; } } else { if (callback.mtllib_cb) { @@ -1918,7 +1925,7 @@ bool LoadObjWithCallback(std::istream &inStream, const callback_t &callback, while (!IS_NEW_LINE(token[0])) { std::string str = parseString(&token); names.push_back(str); - token += strspn(token, " \t\r"); // skip tag + token += strspn(token, " \t\r"); // skip tag } assert(names.size() > 0); @@ -1967,7 +1974,7 @@ bool LoadObjWithCallback(std::istream &inStream, const callback_t &callback, continue; } -#if 0 // @todo +#if 0 // @todo if (token[0] == 't' && IS_SPACE(token[1])) { tag_t tag; @@ -2024,6 +2031,6 @@ bool LoadObjWithCallback(std::istream &inStream, const callback_t &callback, return true; } -} // namespace tinyobj +} // namespace tinyobj #endif diff --git a/include/xrbds/core/types.h b/include/xrbds/core/types.h index 44c0402..ffd09dc 100644 --- a/include/xrbds/core/types.h +++ b/include/xrbds/core/types.h @@ -19,9 +19,11 @@ #include #include #include +#include #include #include #include +#include ///////////////////////////////////// // MEMORY @@ -71,6 +73,17 @@ template using TVector = std::vector; * @tparam S The size of the array. */ template using TArray = std::array; +/** + * @brief Alias template for creating a std::tuple with a variadic list of + * types. + * + * This alias simplifies the usage of std::tuple by allowing the user to write + * TTuple instead of std::tuple. + * + * @tparam T... Variadic template parameter pack representing the types to be + * included in the tuple. + */ +template using TTuple = std::tuple; ///////////////////////////////////// // BASIC TYPES @@ -141,4 +154,10 @@ using FVector3 = glm::vec3; */ using FVector3Int = glm::ivec3; +///////////////////////////////////// +// SHAPES +///////////////////////////////////// + +using FMaterial = tinyobj::material_t; + #endif // XRBDS_CORE_TYPES_H \ No newline at end of file diff --git a/include/xrbds/input/input.h b/include/xrbds/input/input.h index 81a1561..1d14d0d 100644 --- a/include/xrbds/input/input.h +++ b/include/xrbds/input/input.h @@ -6,7 +6,7 @@ * * This header defines the Input class, which provides static methods to query * the state of keys (held, pressed, or released) on the system. It also defines - * the EKey enumeration for representing individual keys. + * the EButton enumeration for representing individual keys. * * The Input class is designed as a utility class and cannot be instantiated. * It maintains internal states for keys and provides methods to update and @@ -14,8 +14,8 @@ * * Usage: * - Call Input::Update() periodically to refresh the key states. - * - Use Input::IsKeyHeld(), Input::IsKeyDown(), or Input::IsKeyUp() to query - * the state of specific keys. + * - Use Input::IsButtonHeld(), Input::IsButtonDown(), or Input::IsButtonUp() to + * query the state of specific keys. * * @author Daniel Ramirez Morilla * @date 2025-04-19 @@ -33,7 +33,7 @@ #include /** - * @enum EKey + * @enum EButton * @brief Represents the keys available on the NDS platform. * * This enumeration defines constants for each key on the NDS system, mapping @@ -44,7 +44,7 @@ * * Example usage: * @code - * if (Input::IsKeyDown(EKey::A)) { + * if (Input::IsButtonDown(EButton::A)) { * // Handle A button press * } * @endcode @@ -52,7 +52,7 @@ * @note These key codes are specific to the NDS platform and rely on the * platform's key definitions. */ -enum EKey : u16 { +enum EButton : u16 { A = KEY_A, B = KEY_B, X = KEY_X, @@ -70,9 +70,9 @@ enum EKey : u16 { /** * @class Input - * @brief Provides static methods to handle input states for keys. + * @brief Provides static methods to handle input states for buttons. * - * The Input class is a utility class that allows querying the state of keys + * The Input class is a utility class that allows querying the state of buttons * (held, pressed, or released) using static methods. It is not meant to be * instantiated. */ @@ -81,46 +81,47 @@ public: /** * @brief Updates the internal state of the input system. * - * This method should be called periodically to refresh the key states. + * This method should be called periodically to refresh the button states. */ static void Update(); /** - * @brief Checks if a specific key is currently being held down. - * @param key The key to check. - * @return True if the key is held down, false otherwise. + * @brief Checks if a specific button is currently being held down. + * @param button The button to check. + * @return True if the button is held down, false otherwise. */ - static bool IsKeyHeld(EKey key); + static bool IsButtonHeld(EButton button); /** - * @brief Checks if a specific key was pressed in the current update cycle. - * @param key The key to check. - * @return True if the key was pressed, false otherwise. + * @brief Checks if a specific button was pressed in the current update cycle. + * @param button The button to check. + * @return True if the button was pressed, false otherwise. */ - static bool IsKeyDown(EKey key); + static bool IsButtonDown(EButton button); /** - * @brief Checks if a specific key was released in the current update cycle. - * @param key The key to check. - * @return True if the key was released, false otherwise. + * @brief Checks if a specific button was released in the current update + * cycle. + * @param button The button to check. + * @return True if the button was released, false otherwise. */ - static bool IsKeyUp(EKey key); + static bool IsButtonUp(EButton button); private: /** - * @brief Stores the state of keys currently being held down. + * @brief Stores the state of buttons currently being held down. */ - static u32 KeysHeldState; + static u32 ButtonsHeldState; /** - * @brief Stores the state of keys pressed in the current update cycle. + * @brief Stores the state of buttons pressed in the current update cycle. */ - static u32 KeysDownState; + static u32 ButtonsDownState; /** - * @brief Stores the state of keys released in the current update cycle. + * @brief Stores the state of buttons released in the current update cycle. */ - static u32 KeysUpState; + static u32 ButtonsUpState; /** * @brief Deleted constructor to prevent instantiation of the Input class. diff --git a/include/xrbds/resources/mesh.h b/include/xrbds/resources/mesh.h index 4d590ff..5f5c242 100644 --- a/include/xrbds/resources/mesh.h +++ b/include/xrbds/resources/mesh.h @@ -3,6 +3,7 @@ #include "resource.h" #include "core/types.h" +#include "resources/texture.h" #include @@ -15,19 +16,30 @@ struct FVertex { : position(pos), normal(norm), texCoords(tex) {} }; +struct FShape { + TVector vertices; +}; + class Mesh : public Resource { using Super = Resource; public: - static Mesh Load(const TVector> &vertices); + static Mesh Load(const TVector &shapes, + const TVector &materials, + const TVector> &textures); - TVector> getVertices() const { return vertices; } + const TVector &getShapes() const { return shapes; } + const TVector &getMaterials() const { return materials; } + const TVector> &getTextures() const { return textures; } private: - TVector> vertices; + TVector shapes; + TVector materials; + TVector> textures; Mesh() = default; - Mesh(const TVector> &vertices); + Mesh(const TVector &shapes, const TVector &materials, + const TVector> &textures); }; #endif // XRBDS_RESOURCES_MESH_H \ No newline at end of file diff --git a/include/xrbds/resources/texture.h b/include/xrbds/resources/texture.h new file mode 100644 index 0000000..af174e6 --- /dev/null +++ b/include/xrbds/resources/texture.h @@ -0,0 +1,46 @@ +#ifndef XRBDS_RESOURCES_TEXTURE_H +#define XRBDS_RESOURCES_TEXTURE_H + +#include "resource.h" +#include "core/types.h" + +/** + * @class Texture + * @brief Represents a texture resource that includes pixel data and a color + * palette. + * + * The Texture class is derived from the Resource class and provides + * functionality to load and manage texture data and its associated palette. It + * also provides access to the texture's unique identifier. + */ +class Texture : public Resource { + using Super = Resource; + +public: + virtual ~Texture(); + + /** + * @brief Loads a texture from the given pixel data and palette. + * + * @param data A reference to a vector containing the texture's pixel data. + * @param palette A reference to a vector containing the texture's color + * palette. + * @return A Texture object initialized with the provided data and palette. + */ + static Texture Load(TVector &data, + TVector &palette); + + /** + * @brief Retrieves the unique identifier of the texture. + * + * @return The unique identifier of the texture as an unsigned 8-bit integer. + */ + const u8 getId() { return id; } + +private: + Texture(TVector &data, TVector &palette); + + int id; +}; + +#endif // XRBDS_RESOURCES_TEXTURE_H \ No newline at end of file diff --git a/include/xrbds/utils/file.h b/include/xrbds/utils/file.h index 376115c..32da646 100644 --- a/include/xrbds/utils/file.h +++ b/include/xrbds/utils/file.h @@ -4,8 +4,14 @@ #include "core/types.h" #include "resources/mesh.h" +struct FObjData { + TVector> vertices; +}; + namespace Utils::File { +FString AssetPath(const FString &path); + /** * @brief Reads the contents of a text file and returns it as a string. * @@ -20,13 +26,38 @@ FString ReadTextFile(const FString &path); * vector of vertices. * * @param path The file path to the OBJ file as an FString. - * @return A TVector of TVector of FVertex, where each inner vector represents a - * group of vertices. + * @return A TVector of TVector of FVertex, where each inner vector represents + * a group of vertices. * * @note Ensure the file at the specified path exists and is in a valid OBJ * format. */ -TVector> ReadObjFile(const FString &path); +TTuple, TVector> ReadObjFile(const FString &path); + +/** + * @brief Reads a binary file and returns its contents as a TVector of type T. + * + * @tparam T The type of data to read from the binary file. + * @param path The file path to the binary file to be read. + * @return TVector A vector containing the contents of the binary file. + */ +template TVector ReadBinaryFile(const FString &path) { + FILE *file = fopen(AssetPath(path).c_str(), "rb"); + if (!file) { + // TODO: iprintf("Error abriendo: %s\n", path.c_str()); + return {}; + } + + fseek(file, 0, SEEK_END); + size_t size = ftell(file); + rewind(file); + + TVector buffer(size); + fread(buffer.data(), 1, size, file); + fclose(file); + + return buffer; +} } // namespace Utils::File diff --git a/samples/hello_world/assets/meshes/cube/cube-tex.obj b/samples/hello_world/assets/meshes/cube/cube-tex.obj new file mode 100644 index 0000000..44283ee --- /dev/null +++ b/samples/hello_world/assets/meshes/cube/cube-tex.obj @@ -0,0 +1,98 @@ +# cube-tex.obj +# Import into Blender with Y-forward, Z-up +# +# Vertices: Faces: +# f-------g +-------+ +# /. /| /. 5 /| 3 back +# / . / | / . / | +# e-------h | 2 +-------+ 1| +# | b . .|. c z right | . . .|. + +# | . | / | /y | . 4 | / +# |. |/ |/ |. |/ +# a-------d +---- x +-------+ +# 6 +# bottom + +# Material defined in separate file. +mtllib cube.mtl + +g cube + +# Vertices +v 0.0 0.0 0.0 # 1 a +v 0.0 1.0 0.0 # 2 b +v 1.0 1.0 0.0 # 3 c +v 1.0 0.0 0.0 # 4 d +v 0.0 0.0 1.0 # 5 e +v 0.0 1.0 1.0 # 6 f +v 1.0 1.0 1.0 # 7 g +v 1.0 0.0 1.0 # 8 h + +# Normal vectors +# One for each face. Shared by all vertices in that face. +vn 1.0 0.0 0.0 # 1 cghd +vn -1.0 0.0 0.0 # 2 aefb +vn 0.0 1.0 0.0 # 3 gcbf +vn 0.0 -1.0 0.0 # 4 dhea +vn 0.0 0.0 1.0 # 5 hgfe +vn 0.0 0.0 -1.0 # 6 cdab + +# Texture +# (u,v) coordinate into texture map image, ranging from 0.0 - 1.0. +# +---f---g---+---+ +# | | 5 | | | +# f---e---h---g---+ +# | 2 | 4 | 1 | | v +# b---a---d---c---+ | +# | | 6 | | | | +# +---b---c---+---+ +---- u +# | | 3 | | | +# +---f---g---+---+ +vt 0.25 1.00 # 1 f(5) = f for face 5 +vt 0.50 1.00 # 2 g(5) +vt 0 0.75 # 3 f(2) +vt 0.25 0.75 # 4 e(2,4,5) +vt 0.50 0.75 # 5 h(1,4,5) +vt 0.75 0.75 # 6 g(1) +vt 0 0.50 # 7 b(2) +vt 0.25 0.50 # 8 a(2,4,6) +vt 0.50 0.50 # 9 d(1,4,6) +vt 0.75 0.50 # 10 c(1) +vt 0.25 0.25 # 11 b(3,6) +vt 0.50 0.25 # 12 c(3,6) +vt 0.25 0 # 13 f(3) +vt 0.50 0 # 14 g(3) + +# Define material for the following faces +usemtl texture + +# Faces v/vt/vn +# 3-------2 +# | - | +# | # | Each face = 2 triangles (ccw) +# | - | = 1-2-3 + 1-3-4 +# 4-------1 + +# Face 1: cghd = cgh + chd +f 3/10/1 7/6/1 8/5/1 +f 3/10/1 8/5/1 4/9/1 + +# Face 2: aefb = aef + afb +f 1/8/2 5/4/2 6/3/2 +f 1/8/2 6/3/2 2/7/2 + +# Face 3: gcbf = gcb + gbf +f 7/14/3 3/12/3 2/11/3 +f 7/14/3 2/11/3 6/13/3 + +# Face 4: dhea = dhe + dea +f 4/9/4 8/5/4 5/4/4 +f 4/9/4 5/4/4 1/8/4 + +# Face 5: hgfe = hgf + hfe +f 8/5/5 7/2/5 6/1/5 +f 8/5/5 6/1/5 5/4/5 + +# Face 6: cdab = cda + cab +f 3/12/6 4/9/6 1/8/6 +f 3/12/6 1/8/6 2/11/6 diff --git a/samples/hello_world/assets/meshes/cube/cube.mtl b/samples/hello_world/assets/meshes/cube/cube.mtl new file mode 100644 index 0000000..dcd20c5 --- /dev/null +++ b/samples/hello_world/assets/meshes/cube/cube.mtl @@ -0,0 +1,7 @@ +newmtl texture +Ka 0.0 0.0 0.0 +Kd 0.5 0.5 0.5 +Ks 0.0 0.0 0.0 +Ns 10.0 +illum 2 +map_Kd texture.png diff --git a/samples/hello_world/assets/meshes/cube/texture.img.bin b/samples/hello_world/assets/meshes/cube/texture.img.bin new file mode 100644 index 0000000..06fa6ec --- /dev/null +++ b/samples/hello_world/assets/meshes/cube/texture.img.bin @@ -0,0 +1 @@ +BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)%)%)%)%ÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB \ No newline at end of file diff --git a/samples/hello_world/assets/meshes/cube/texture.png b/samples/hello_world/assets/meshes/cube/texture.png new file mode 100644 index 0000000000000000000000000000000000000000..d7eb856303b7f266f91149aac1e87f05b8376a97 GIT binary patch literal 1911 zcmbVNT}<0n6m|f$qbsx$51l{=%Siio?AS>l9tJYP3R1%m%?f+i#*KXm7Kv?ahXf`B z>ci+B(6+ZRv4=fuedvUcDs8k>B^p(wwv*7*2Zpv3wufcy%1{5s80_ad*eR{(sx^}1 zd+zpAW#-g&$C3zyt%b~G3O%Zq&V)XEY-wcR% z1Y7Y2MT5A{=^_Q1X7DPX6L^7_^?6^$8JclZG)uV{lCI+1)f~g(){j8pG_i|o3%q6p zLl#eT8-~hJR3edZCRnGUMJSig=c8zbVi*!3NWEV+K$4X8N}C}7bwQIh!>HE0kR ziWX9osNJbnJ7t{lI9)FM`F2Sbm4yDn4i6Xr2IL9UHV;XANQMs4E{=6^ZqG|J!_o9M zG^mJDSO2ci>W86d(}=(Tj|GbY*QIDNfD}tH5P_5`M+iJuN3KDMDjEumvSYJZ1cO|& ztQ$ZUU~_;ckZ7kQiJai^dEG3{kStvlCZXVFNS_C(0dCPNdaJuY7`Sc!fFi`r*4qB! z|MY)dlhD}$(I@6HPn@|YxF$(Q-RifF#8KF5jiM5s-3A;G%{#<`XBAyhUrR|kpLR>M^LpMzn>_SJ!PK6Z6Vad8nbIVPOS|`SAjXqT|&snU1Ly2 zcbA4PDaYOqH!&=aY!3KC$?@g1UoQ0@tpBe1_VsT*+do2NuDtlsanT?C)%nNj^0~>* zTW`FzpZ)!ZTgjTC%HK9us#0&SPA{gEii(Q5W9P43H~u_x``#Cf7wZPJ$K$+Tm9 zV;$sOD8yT^ULk?4=YRPKs}GyIv23pm^$n-zGV|{Y9V#&$^G5H|5adUEp8y7_5rZfprmyxMvE EU$&f;ÚžÚ>ÖýÕÜћ͙ÉwÅxÅXÉXÉzÍ»ÑÜÕú¸½ü¼ü¼û¼½½“ÉòÑÒRÚµÞµâµâµâµâµâÖæÖæÖæÖâÕâµâµÞ”Þ”ÞµÞ2ÖÎÅßÑÿÙÿÙ¿û?ÞÚ¿Í<Á×Þ•ÖÿÕßÕŸæ¿Ñ¿Ñ|ŕֶÖ=ÅÚÿÙÿÕßÕ¿ÑŸÍŸÍë]ÅÁÁÁ=Á=Á^Å^ÉŸÍ?ï_ó¿ÑÉÉ^Å=Žâü¼ú¸ù¸ù¸»Éú¸û¸ú¸ú¸ú¸ü¼d"ˆ"ˆBŒCŒBŒCŒCŒCŒ"ˆBŒ[ÅÇœ¦œ8½T¹í¨Ê ~ÉÎ~ÎÎÎνÒÎÎÒ½Ò¾ÒÝÖœÎ|ÊÂÂ:Æ;ÆÂÂÂÂZÊ|ÎÒû¸û¸ú¸û¸ú¸û¼Á½û¸û¼YÁôÑVÚUÚSÚµÞµâµâ”ÞsÚsÚRÚ1Ö1ÒÒïÍÎÍ­ÅŒÁ?ÞÚÚ?Þ?Þ?Þ?ޞɶڶÖ;ÒÚßê_â[Ö¾û;çÿÿŸÍÚ¿ûÿÕ¿ÑŸÍÉ^ÉŸÍ^Å=ÁÁÁÁÁ=Á>Å^Å_ÉÉÍÉ^É^É^Å=ÁÁû¸ú¸ú¸ú¸ú¸ú¸ù¸›Åù¸[Ád"Œ"ˆCŒBŒCŒBŒBŒCŒBŒ!ˆ[ÅÇœ¦œ6¹U½­Ë¤|Ê|Ê[ƞΞÎ|ξҾҾξҿÒßÖÞ֞οÒßÖ¿Ò~Ê\Ê9Æ÷½Â9Æ:Æ[Ê|Îû¸û¸û¸ú¸ûÍú¸û¸½=Å_É^É=Á<ÁÁ½<ÁÁÁ½½½Á<Á]Å}É}É]Å]ÅžÉ_óÿÕÚÚÞ?ÞÞûŸÍ˜ÚãYÒ_ÞµÚç¾÷ãÛÉž÷¿ÑÿÕßÕßÕßÕßÑŸÍ^É]Å=Á=Á=Á^Å^Å^Å^É_ÉÉÉÍÍÍÍÉÍ~É^É^Å=Å=Á=ÁÁü¼û¸û¸û¸û¸d"Œ"ˆCŒCŒBŒBŒ"ŒCŒBŒˆ[ÅÇœ¦œU¹V½­ì¤:Æ[ÊÂ|ÊÎ|ʾÒßÖ¿Ò¿ÒßÒßÖßÖßÖ?ãëëßÖ~Ê\ÊÂÂ9Æ:Æ9Æ:Æ¿ó=ÅÁü¼û¸ú¸û¸û¸\Ú=Å^ÅÁÁ½=Á>Å^Å^Å^Å~ÉŸÍŸÍ¿ÑßÕßÕßÕßÕ¿ÑŸÍÉßêŸæßÕÿÕÿÕ?Þ¿Ñ\ÚÞûùÞ?Þ_âßê_ÞßÑÒ¾û?Ú_ÞâââŸæŸæ]Þ:ÚÖ8ÖÒÖ5ÖUÚVÚUÚTÚTÚSÚSÚsÚ1Ö1ÒÒïÍñÑóѲɕÉxÅYÅ[Å^Å=ÅÁÿÿd"Œ"ˆCŒCŒBŒ"ˆ"ˆ"ˆBŒˆZÁ¦œÇœW½U¹±ì¨:Æ[Ê{Ê}ÎΞʿÒßÖßÖßÒßÖßÖßÖß_çïëÿڿΞÊ;ÆÂ9ÆÂÂ9ÆZÊ1ÒñÍ•É|É<ÁÁÁ<ÁÁ=ÁÁ]ÚÁ=Á=Å^Å^Å~ÉŸÍßÑ_ÞŸ÷Ÿ÷â?Þ?ÞÚßÑŸÍ~É]Å¿æâÚÿÕÿÕßÕÿÿ|ïÚâ?óâÚßû[ï¿æ¿æ|ÞzÞvÚSÚ”Þ”ÞÕâ÷êëëëëëëë÷æ×æÖâÖâÖâÖâµâµâµâµÞµÞ“ÚsÚRÚRÚRÖ1ÒÒôÑÿÿd"Œ!ˆCŒCŒ"ˆ"ˆ!ˆ"ˆ!ˆˆ"ˆ¦œ¦œU½U½±í¨ZÊ[Ê|ÊžÎΞÎßÖßÖßÖßÖßÖßÖßÖÿÚ?ãë_ëßßÒžÎ}Ê:Æ:ÆÂ9Æ9ÆZÆÖâÖâÖâtÖ4ÒüÑŸÉ^É>Å=Á=Á=Á=Å]Å=Å=Å]Å]Å]Å~Å~É¿ÍÿÕÚ?Þ?Þ?Þ?ÞÿÕßÑŸÍ]Åû¸âŸæ¿æâó¾ûŸÞÛÞóÿÿÿÿ{ïÖâ9ëœó½ûÿÿÿÿ¾÷óœóœó|ó|ó|ó{ó[ï[ï:ëëçùæØâØâØâØâ×â×â×âÖâÖâÖâÖâÖâÖâÖâÖâÕâÿÿÿÿc"Œ"ˆCŒBŒ"Œ"ˆˆˆ!ˆ"ˆ"ˆ¦œ¦œT¹S¹±9Æ9Æ[ÊœÎÎξÒßÒßÖßÖßÖßÖßÖÿÖÿÚ?ã_ë_ç?ãßֿΞÎ[Ê:Æ9ÆÂ8Æ8Æ¿ó¿ÒžÎžÎžÎžÎžÎ~οɞÉ=Á½ÁÁ½½½ÁÁ=Á=Á]Å^Å~ɞͿÍßÑÿÕÿÙ?ÞÿÙŸæŸæ_Þ?Ö¿ÚÿÞÿÿÿÿ_çÿÿÿÿ_ç_ç?ã?ã?ãßÿÚßÖÞÖ¾Ò½Ò½ÒÒÎÎÎÎÎΞÎΞΞΞΞξҾҾҞοҿÖßÖßÖßÖ¿Ò¾ÒÒžÒ¿ÒÿÿÿÿcCŒ"ˆCŒBŒ"ˆˆˆˆˆˆ"ˆ¦œ¦œ3µ3¹­8Æ9Æ{ÊΞνҾÒßÖÿÖÿÚÿÚÿÚÿÚÿÚÿÚß?ã?ãßßֿΞÎ|Ê[Æ9ÆÆÂ8Æ9Æß֞ΞξҿҿҞΞΞÎÊÞŽŽÁÁÁ|Á|Á\Á<Á½ÁÁ<Á=Á]Å~ɞͿÍßÕŸæâÿæ?ã?çëëŸïŸïŸïŸïŸïŸïŸïëë_ç?ãßßÚ½Ò½Ò|Ê|Ê|Ê|Ê}Ê}Ê}Ê}ÊžÊÊ}ʞʞʞΞΞξξξҿҿҿÒßÖ¿Ö¾ÒÎ~ΞÎßÖÿÿÿÿcBŒ"ˆCBŒ!ˆˆˆˆˆˆ"ˆ¦˜¦œ2µ2µ±ÆYÆ|ʞΞξҾÒßÖÿÚÿÚÛÛÿÚÛßßßßßß֞ΞÎ|ÊZÊ9ÆÆÂÂÆÒÎ~ʞοҾҿҿҞÎ}Ê|Ê\Ê|Ê|Ê\Ê[Æ[Ê[Æ[Æ[Æ[Æ[Ê[Ê[Ê[Ê[Ê[Ê[ÊZÆ[ÊœÎҾΞÎßÒëŸïŸïŸïŸóŸï¿óŸïŸïë¾ÒΞҽÎ|Î|Ê}Ê}ÎÎÎ}ÊžÎ~ÊžÊ~Ê~Ê~Ê~ʞʞʞʞʞΞΞΞΞοξҞÎ~Ê~Ê}Ê|ÊÿñÿñÿÿcBŒ"ŒcBŒ!ˆˆˆˆˆˆ„”…˜ÇœU¹2µÔÁÆ9Æ|ʞΞξҾÒßÖÿÚÿÚÿÚÿÚÿÚßÿÚßßßÿÚ¾ÒžÎ|ÊZÆ8ÆÂõÁÕÁõÁöÁÆ|Ê}Ê}Ê~Î~ΞΞΞÎ\Ê{Ê[Ê[Ê{Ê{Ê{Ê{Ê{Ê{Ê{Ê[Ê{Ê{Ê{Ê{Ê{Ê{Ê{Ê{Ê[Ê|Ê|Ê|Ê}ÊžÊëŸïëëß_ç¿óŸïŸï_çžÎZÊZÊZÊ:Æ[Æ|Ê}Ê}ÊʞʞʞʞʞʞʞʞʞʞʞʞʞÊ~Ê~ʞʞΞΞÎ~Ê~Ê}Ê}Ê{ÊÿñÿñÿÿcCŒBŒcBŒ"ˆ!ˆˆˆˆ„ˆ„”Çœ\Å2µÓÁõÁ8ÆZÊ|Ê|Î|ʾҾÒÞÒ¾Ò¾Ò¾ÒßÒßÖÿÚÿÚÿÚÿÖßÖ¾ÎÊZÆö½õ½Ô½Ó½Ó½³ÁÓÁÕÁÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñ¿÷?ãÿÚßÖßÖßÖßÖßÖßÖßÖßÖßÖßÖßÖßÖø½÷½Â;ÆÂ\Êß_çë_ç_çëŸïë?ãÿÚœÎÂÖ½÷½÷½¾Â:Â[Æ\Æ\Æ}Ê~Ê~Ê~Ê}Ê~Ê~Ê~Ê~Ê~Ê~Ê~Ê}Ê}Ê~Ê~Ê}Î}Ê}Ê}Ê\Ê}ÊZÆÿñÿñÿÿcCŒBŒcCŒBŒˆˆˆˆ„ˆ„”Çœ}ÉT¹²½³ÁõÁÆ9Æ9Æ8ÆYÆ{Ê|Ê[ÊZÆ{Ê[Ê|Ê|ÊξҾÒÎ{Ê9Âõ½²¹²¹±¹’¹‘½‘½²½±½ÿñÿñÿñÿñÿñÿñÿñÿÿÿÿÿÿ¿÷ãßÖßÖßÖßÖßÖßÖßÖßÖßÖßÖßÖßÖßÖßÖÿÿÿÿÖ¹Ö¹Ö¹ø½:Â:Æ|ʾÒÞÖÿÚÿÚÿÚÿÚÞÒ½Ò{ÊÂö½µ¹Ö¹Ö¹Ö¹÷¹÷½ø½ø½ÂÂ:Â:Â:Â:Â;Æ[Æ\Æ\Æ\Æ\Æ[Æ[Æ\Ê}Ê\Ê\Ê\Ê\Æ\Æ;ÆÂÿñÿñÿÿÿÿcBŒBŒdBŒ"ˆˆˆˆˆˆˆ„”è¤}É}ɹ‘½Ó½öÁXÊXÊ7ÆXÆYÊYÊXÊYÊ7ÆÂ8Æ8ÆYÊZÊZÊ7Æõ½Ô½Ó¹²¹M­‘¹‘¹‘¹‘½‘½‘½ÿÿÿÿÿÿÿÿÿÿ¿óãßÖßÖßÖßÖßÖßÖßÖßÖßÖßÖßÖßÖßÖßÖßÖÿÚÿÿÿÿÿÿÿÿÿÿÿÿÊRÒsÖïÍïÍ2ÖøêZó{÷{÷{÷{÷[óÖâRÖ2ÒÎïÍÓÁÓÁÓÁÒÁÓÁÔ¹Õ¹Õ¹Ö¹ö¹÷½÷½¾ÂÂÂÂÂÂÂÂ:Â:Æ:Â:Æ:Â:ÂÂÂ÷½ÿÿÿÿÿÿÿÿcCŒBŒcCŒBŒ"ˆˆˆˆˆˆ…”6¹}Éÿÿÿÿî¨í¨ÿÿÿÿ½÷÷ÞÞÿ*­¹Ž½Ž½¹ +­”ÚsÖRÖLµŽ½m¹+±´ÞsÚsÖȤC"Œ"Œ"Œ"ˆÿÿÿÚßÖßÖßÖßÖßÖßÖžÍ}É\Å\Å[Á\Å\Å\Å\Å[Å[Å[ÁZÁ8½7½9Á9Á:ÁZÁ[Å\Å\ÅïÍïÍïÍïÍïÍÒ¥Zó{÷œ÷¥:ïZó”ÞÒÎïÍïÍïÍïÍïÍïÉðÉñÅòÅÓÁÕ¹Ö¹Ö¹Ö¹ö¹Ö¹Ö½ö½ö½ö½Õ¹´¹Ö½÷½¾ÂøÁø½ø½÷½ö½Ö¹ÿÿÿÿÿÿÿÿcCŒBŒcdCBŒ"ˆ"ˆ"ˆ"ˆ"ˆ"ˆ;Á}Éÿÿÿÿ³Áî¨Þûž÷9ç ©è¨+­®½¯ÁÏÁ®Á*­œ÷ZïZï +­¹m¹*­9ë÷æµÞè dˆˆˆˆˆÿÿßÖßÖßÖßÖßÖßÖ}É}Å|Å\Å\Å\Å\Å\Å\Å[Å[ÁZÁ:Á9Á8½7½9½9Á:ÁZÁ[Å\ÅïÍïÍïÍïÍïÍÒ÷æ¥{÷ZóK­¥{ó”ÞÎïÍÎïÍïÍïÍïÍïÉïÉðÉðÉðÅòÅÒÁóÁÓ½Ô½´¹´µ´µ³µ³µ²µ³µ´µ´µ´µ´µ´µ³µ´µ´¹Ó¹yÎÿÿÿÿÿÿÿÿdCCŒd”…˜…”d”cCŒBŒBŒ"ˆ"Œÿÿÿÿÿÿÿÿÿÿÿÿ=ï9Òd”d”È  ©Ž½¯Á¯Á¹ ©§ ¦œè¤è¤lµ¹K±Ç Ç Ç Ç è BŒˆˆˆˆˆÿÿßÖßÖßÖßÖßÖzÅ~ÉǠȠǜǜǜǠ¦œÇ Ç Ç ÆœÇ Ç È Ç ÇœÇœ¦œ¦œÿÿïÍïÍïÍïÍïÍÎÖâ ¥¥øêë¥ ¥ÖâïÍÎÎïÍïÍïÍïÉïÉïÍïÍïÍïÍïÍïÉïÉÏÉïÉïÉÏÉÎÉÎÅÎÅÎÅÏÉÏÉïÉïÉïÉïÉïÉÏÉÎÉÎÅÿÿÿÿÿÿÿÿÿÿdcBŒ…”¦œÆœ¦œ…”dCBŒ"ŒCŒÿÿÿÿÿÿÿÿÿÿCŒ"ˆT¹…”d”¦œè¤m¹ © +­mµ ©{óë{óé¤K±m¹+±§œ…˜¦œ¦œÇ ¦œ"ˆˆˆˆˆˆÿÿÿÿààà~É~ÉÆœ¦œÇœÇœÆœÇ ¦œÇœ¦œ¦˜¦œÈ Ç È È È È ¦œ§œïÍïÍïÍïÍïÍ¥ÒµÞ9ï¥_Å¿î ¥¥×æÎÒïÍïÍïÍïÍïÍïÉïÍïÍïÉïÉïÉïÉîÉîÉÎÉÎÉÎÉÎÅ­Å­ÅÎÅÎÉÎÉÎÉÎÉÎÉÎÉÎÉÎÅÎÉÎÉÿÿÿÿÿÿÿÿÿÿd„”BŒ¥˜Çœè¤Ç ¦œ…”cBŒCŒCŒÿÿÿÿÿÿÿÿ"ˆ"ˆ"ˆU¹†˜D†œÇ K±ÇœÇœ¦œÇ :ïëZóÈ  +­lµ+±Zïëë©Ç Ç c"Œˆˆˆˆˆÿÿààà~É~ÉÇ Çœ}É}Å]Å]Å\Å[Å:Á9½7½6¹5¹4¹T¹T¹V½U¹U¹ïÍïÍïÍïÍïÍ¥¥µÞëÞßÙê¿î¥*­ÎÎïÍïÍïÍïÍïÉÎÅÎÉÎÉÎÉÎÉÎÉÎÉÎÉÎÉÎÉÍÅ­Å­Á­Á­ÅÎÅÎÅÎÉÎÅÎÉÎÉÎÉÎÉÎÅÍÅÎÅsÚ”Þÿÿÿÿÿÿd„”BŒÇ CŒ…˜d3µ±cCŒCŒcÿÿÿÿÿÿ!ˆ"ˆ"ˆ"ˆU¹¦œD…˜¦œ +©è¤È ¦œ¦œ:ïøê9ï ©é¨L± +­{óë÷æ©¥˜è cBŒBŒˆˆˆˆˆààà~É~ÉÇ Çœ~É~É}É}Å\ÅZÁ8½5¹4¹3¹4µ4¹4¹2µ3µ2µ2µïÍïÍïÍïÍïÍïÍ¥K±?Å_ÍÿÙ?æâ?â ¥ÒïÍïÉïÍïÍïÍÎÉÎÅ­Å­Å­ÅÎÅÎÅÍÅÎÅÎÅ­Å­Á¬ÁŒÁ­Á­Å­Å­Å­ÅÎÅÍÅ­ÅÎÅ­ÅÍÅ­ÅÍÅ1ÒRÖÿÿÿÿÿÿdd”BŒè¤d”è¤ÆœU½…˜„”Ccd”ÿÿÿÿˆ"ˆˆ"Œ#ŒT¹¦œD…˜†˜è¤ +­é¨Ç ¦˜{óøê8ò ©è¤+±è¤ÓÝÖæ³Ý„”…”¦œdBŒ"ˆˆˆˆˆ"ˆàààžÉžÉÇ ÆœžÍžÉ}É}Å[Å9½5¹3µ1±±±±1±2µ­î¨ÿÿïÍïÍïÍïÍïÍïÍÎÉ¥?÷ÿîêÿÿßÿ_÷ ¥sÚïÉïÍïÍïÍïÍÎÉ­Å­Å­Á­Á­Á­Á­Á­Á­Á¬Á¬ÁŒ½ŒÁ¬Á­Á­Å­Á­Å­Å­Å­Å­Å­Á­Å­Å­Å1ÒRÖÿÿÿÿÿÿdcBŒè¤d” ©ýÍ™Å+­¦œcÿÿÿÿÿÿÿÿ!„ˆ„„"ˆ3µ†˜C…˜†˜Çœè¤è¤Ç †˜9ïôáyöÇ Ç  ©¥˜Yö³ÝXò…˜…”„”CCŒ!ˆˆˆˆˆˆàààžÍžÍÇ Æœ¿ÍžÍžÍ\Å;Á7½3µ±­­í¨í¨í¨í¨í¨Ë¤ÿÿïÍïÍïÍÎÎïÍÒ¥øæ_÷?æ¿û÷륔ÚÎïÍïÍïÍïÍ­Å­Å­ÁŒÁŒ½Œ½Œ½Œ½Œ½Œ½Œ½‹½Œ½Œ½¬Á¬ÁŒÁ­Á­Á­Á­Á­Á­Á¬Á­Á­Á÷æsÚsÚÿÿÿÿÿÿddCŒè¤„”*­ ©ÝÍÐÅ ©¦œÿÿÿÿÿÿ„„„„„#ˆ±…˜De”†˜¦œ¦œ¦œÇœ…˜÷æ”ÞÔᦜ…˜Ç d”´áÖâqÕC„”dCCŒˆˆˆˆˆˆàààÉ¿ÑÇ Çœ¿Í¿Í¾ÍÉ8½4¹1±±­í¨í¨ì¨ì¨ì¨í¨ì¨ïÍïÍïÍïÍïÍïÍïÍÞû÷â ¥Zï_æ¿û{ï|÷”Ö ¥RÖïÍïÍïÍïÍïͬÁŒÁŒ½‹½‹½‹½k¹k½k¹k¹j¹j¹j¹k¹k¹k½‹½‹½‹½k½k½k½k½k½k½øêÖâµÞÿÿÿÿÿÿd„”dÇ …”è  ©?Ö^Ö*­K±¦œÿÿ„„ˆ„„ˆ"Œð¬…˜De”…˜¦œ¦œ¦œ¦œ…”µÞsÚµÞ…˜…˜¥˜d”1ÖRÚÒCŒddCŒCŒ!ˆˆˆˆˆˆààà¾Í¿ÑÇ Ç ßÑßÑßѽÍW½2µ±­­­í¨í¨í¨ÿÿÿÿÿÿ1ÖïÍïÍ{ó½ûÞûÿÿÿÿÿÿνœ÷÷âœóSÎÞÿœó¥”ÖÿÿÞû{÷ïÍïͬÁŒ½‹½k½k¹k¹j¹k¹k¹J¹J¹J¹J¹J¹J¹j¹j¹k¹j¹j¹j¹j¹j¹j¹­Á9ï9ëëÿÿÿÿÿÿÆœµÞ”Þ”ÞÖæëœó½÷÷œó{ï ©ÿÿ„"ˆ"ˆˆ„!ˆ"ˆî¨…˜Ce”…˜¦œ¦˜…˜…˜e”SÖRÖ”Þ…”…˜dcÎÉÒïÉCccCŒ"Œ!ˆˆˆˆˆˆààà½ÍßÑÇ ç ÿÕÿÕÿÕ½ÍW½2µ±­àààààÿÿÿÿ:óï:óœ÷ÞûßÿßÿÿÿÿÿÿÿÿÿZó½÷RÎJ­{÷ÿÿÊŒµÿÿÿÿßÿœ÷ëRÖŒ½‹½k¹k¹J¹J¹J¹J¹J¹JµJµJµJ¹j¹j¹j¹j¹j¹j¹J¹J¹J¹j¹k¹½û:ï{óÿÿÿÿÿÿdd”c¦œè¤*­K±ÏÅñÍvÞÑÉ*­…˜!ˆ"Œ"ˆ„„ˆ"ˆÎ¨†˜Cd”d”…˜…”…”e”dRÖRÖsÚd”d”CcÎÒÎÉCŒCCŒBŒ"ˆˆˆˆˆˆˆàààÞÍÖç ç ÚÿÙÿÕ½ÍV½2µàààààààÿÿÿÿï9ïû½û½ûÞû½û½û½ûœ÷œ÷œ÷µÖœó­¹Þû[óûlµÿÿÞÿÞÿ½û9óZó9ïÿÿk¹j¹j¹J¹J¹JµJµJ¹JµJµj¹JµJµJµJµJµJµJµJµJµJ¹ÿÿÿÿ[ó{÷ÿÿÿÿÿÿ‡˜X½XÁZÁ|Å¿Í?ÖŸÚßâçßâÚ¥˜CŒ#Œ"ˆ„ˆ"ˆ"ˆÍ¤†˜Cd”d”d”…˜…”d”dRÖ1Ò1ÒCdCBŒÒ1ÒïÉBŒCŒBŒ"ˆ!ˆˆˆˆˆˆÿÿàààßÑ?Úç è ?ÚÚÚ½ÍV½2µààààÿÿÿÿÿÿÿÿïï{ó½û½ûœ÷\ë=ç^ëëë_ç?ãZë”Ö½û¾ûÿÿœ÷çÿÿÞÿ½û½û{÷9ï9ïëÿÿÿÿÿÿÿÿJ¹j¹J¹J¹J¹J¹JµJµJµJµJµJµJµJ¹J¹k¹RÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿdd”„”…˜…˜…˜¥˜¥˜¦œÇœ¦œ…˜…”d"Œ„„"ˆ"ˆ"ˆÍ¨…˜Cdd”d”…”…”d”D1ÖÎ1ÒCŒCCŒBŒÒÒÎÅBŒBŒBŒ"ˆ!ˆˆˆ!ˆˆˆÿÿàààÿÕ_Úç è ?Ú?ÞÚ½ÍW½S¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖæ÷ê9ó{÷{óãß_çë¿ó¿ó¿ó¿ó_ã¶Öóß>ç{÷œ÷{ó½ûÞûœ÷{÷œ÷Zó9ï÷êÖæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾ó<ßààßïààààúÒûÒ×àààààßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿCˆ€„"ŒˆˆÎ¨…˜Cddd”dd”d”d1Ò1Ò1ÒCCŒBŒCŒÎÒ­ÁBŒBŒCŒBŒ"ˆˆˆˆˆˆˆàààÿÕ_Úè¤ ©_Ú?ÞÚ½ÉW½S¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿµâ÷êZó[ïÝÖß?ã_çëŸï¿ó¿óŸï?ã}ï•Ò?ãŸï_ç>ç{÷{÷½û½û{÷Zó{ó9ï÷êÖæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}ë<ßàààààààààà×=ßààààÚÒÿÿÿÿÿÿ!„!„!„!ˆ!„!„„„„„„„€ˆˆˆˆÎ¨…˜CCCCŒBŒCCC1ÒÒRÖ…˜"Œ"ŒBŒïÉÒ­Á"ˆCŒBŒ"Œ"ˆˆˆˆˆˆˆˆààÿÙ_Ú¥ ©_Ú?ÞÚÍX½S¹ÿÿÿÿÿÿÿÿÿÿÿÿµâÖæ:ó;ëÝÖþÚß?ã_çëëë_ç?ãÿÚuÒ|ïÛ_ç_çë?ã>ã{÷œ÷œ÷Zó9ïZóëÖæµâÿÿÿÿÿÿÿÿÿÿÿÿÿÿ\ã\ãàààààààààààà=ß]ßàà¹ÊBŒ!ˆ„ëë_ç?ã?ãÞÖ[Ê{ÎRÖÎÅœ8„„„„ˆÍ¤e”CCCŒ"ŒBŒ"ŒCŒCŒ1Ò1ÒQÖBŒ"ˆ"ˆBŒÎÉÒ­Á"Œ"ˆ"ˆ"ˆˆˆˆˆˆˆˆˆˆàd_Ú ©*­_Ú?ÞÚÍXÁÿÿÿÿÿÿÿÿÿÿÿÿµâµâï<ëþÚßßß?ã_ç?ã?ãÛÿÚßÖÞÒ|ïtÒÞÖß?ß?ã_ç_çß[ó{÷{÷9ïZó9ïÖæµâ”âÿÿÿÿÿÿÿÿÿÿÿÿ<ß}ç]ãàààààààààààà=Û^ßààëŸïŸïë_çëë_çÞÖÒZÆUÒRÖJ± ˆ€„„ˆ"ˆï¨…”CŒCŒCŒ"Œ"Œ"ˆ"ŒCŒÎîÉ1ÒBŒ"ˆˆBŒÎÉÎÉ­ÁBŒ"ˆ"ˆ"ˆ"ˆˆˆˆˆˆˆˆˆàÚ_Ú*­*­_Ú?ÞÖÉ9ÁÿÿÿÿÿÿÿÿÿÿÖæ”âÖæ:ïÝÖÿÚÿÚÿÚÿÚßßÿÚßÖ¾Î{ÊZÆ9ÆvÎ<ç|Ê|ʞξÎÞÖß?ã?ã[ó[ó[ó9ï9ó÷æµâ•â”âÿÿÿÿÿÿÿÿÿÿÛ¾ëžëààààààààààààúÒ>Û^ßàëëëë_ç?ã_çßÖßÖÞÖ|Î9ÂSÒʈ€„ˆˆ„ï¨e”DCCd”d”d”d”…”1ÖÎRÖC"ˆ!ˆd”ïÍÎÉ­ÁBŒ"ˆ"Œ"Œ"ˆ"ˆ"ˆˆˆˆˆˆˆ"ˆÚÚK±K±_Ú_ÞÿÕÉ9ÁÿÿÿÿÿÿÿÿÿÿµâµâøêÜÚþÚþÚþÚþÚÿÚÞÖÞÖÎ9Æ÷½´¹µ¹÷Á:Â[ÆÂÕ½µ¹÷½9ÆÎÞÒÞÖþÚß[óZó9ó÷êµâ”â”âÿÿÿÿÿÿÿÿÿÿúÖ}çßó\ßààààààààààà<ÛÛ=ÛàÞÒžÎÞÖÿÚÿÚßÖ¾Ò¾ÒßÖßÖ¾Ò:Æ8ÆïÉ ˆ€„ˆ„„˜DdC…˜¦œ…˜d”…˜0ÒïÍRÖDCŒ"ŒcRÖïÍÎBŒ"ˆBŒCŒ"Œ"ˆ"ˆˆ"ˆˆˆˆˆ"ˆÚÚlµK±Ú_ÚÿÑÉZÁÿÿÿÿÿÿÿÿÿÿµâ÷êëÝÖþÚþÚÞÖþÖ¾Ò¾Î:ÆÖ½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö½‘¹µ’¹Ö½:ƽÎÞÖÞÖã[óZóïÖæ•â”âÿÿÿÿÿÿÿÿÿÿúÒ<ßßó¾ëààààààààààà^ã×=Ûàëëë_ç?ã?ã߾ξҾÒÒ9ÆÂîÅb„„„„„ͤe”Dd”…”†˜Ç Ç ¦œ…˜1ÖïÍRÖd”dd”d””Þ1ÖRÖBŒCŒCCCŒ"Œ"ˆ!ˆˆˆˆˆˆ"ˆÚÚlµlµÚ_ÚÿÑÉZÁÿÿÿÿÿÿÿÿµâµâøêšÎÝÖÞÖÞÖÝÖ¼Òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø½Ö½³¹[ÆÎ½ÒÝÖ[óZóïÖæ•â”â”âÿÿÿÿÿÿÿÿÙÎûÖ¾ïþó}çàààààààààà~ã×<Ûà¾ÎžÎ¾ÒÞÒßÖ¾Ò¾ÒÎ|Ê|Ê[Ê[ÆÂðÉc€„„„ˆÍ¨d”d”†œÇ Ç Ç È È¤ÇœRÚ1ÖRÖd”…˜¦œ…˜ÖâRÖ”Þc…”„”dCŒCŒ"ˆ"ˆˆˆˆˆˆ"Œ?ÞŸÞlµlµŸÚ_ÖßÑÉ[ÅÿÿÿÿÿÿÿÿµâµæøêZʽÒÝÖ¼Ò›Îÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ¹ö½|Ê|ΜÎüâZóïÖæ•â”â”âÿÿÿÿÿÿÿÿà¸Ê<ß¿ïßóëàààààààà~ç~ãúÒààëë_ç_ç?ãÿÚÞÖ¾ÎÎ[Æ}Î|ÊZÊRÚb€„„ˆˆÎ¨…”d”†˜è¤è¤è¤è¤ ©è¤µÞtÚsÚ…˜¦œÇ †˜÷æsÚ”Þd…˜¥˜…”CCŒˆ"ŒˆˆˆˆˆCŒ?Þ¿âlµlµ¿Þ_ÖßÍÉ|ÅÿÿÿÿÿÿÿÿÖæµâøæ9ÆzÊœÎ{Î{ÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕ?Ñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾´¹:Æ|ʛΛÎZóøêÖæ”â”â”ÞÿÿÿÿÿÿÿÿààúÒžë¾ïÞó¾ë}çààààà~ã~ç<ÛÚÎàà¾Î¾Î¾Ò¿Ò¾ÒžÎÞÖ?ãÞÒÎÞÖ¾Ò[ÊRÖƒ˜€„ˆˆˆÍ¨…˜d”†œé¨è¤é¨ +©+±é¨•Þ•ÞÖæ…˜Ç Ç ¦œøêtÚµâd”¦œ¦œ…”c"Œˆˆˆˆˆˆˆà_Þßâ¹¹ßâ_Ö¿ÍÉÿÿÿÿÿÿÿÿÿÿ÷æ”ÞÎïÉÂ9ÆYÆÿÿÿÿÿÿÿÿ—ÞXÉZÍ=Í>Ñ?Ñ>Ñ=Ñ:ÉÅÅ—Þ?ÑÿÿÿÿÿÿÖ¹ö½ZÊ[ÊZÊëÖæµâµâµâ”ÞÿÿÿÿÿÿÿÿïààúÖ}ãžëÞï¾ë¾ï¾ëžëžç~ç~ç<ÛúÒààà_ç_ç?ã?ãÿÚßÞÖ_ç?ãßþÚÞÖ|ÎRÖc€€„ˆˆÍ¤¦œe”§  © +­*­Lµlµè¤×æÖâøê¦œè¤è¤Ç ë׿넔ǠǠ„”C"ˆˆˆˆˆˆˆˆà_Þÿæ®½Ž½ßâ_Ö¿ÍžÉÿÿÿÿÿÿÿÿÿÿÿÿÊ÷½¾9Æ9ÆÊÿÿÿÿÿÿò¸Á6Å:É~ÕŸÙßÝŸÙ^Ñ\Í7ÅÁ½XÉ?Ñÿÿÿÿø½Ö½ZÆ9Â9ÆWÎ÷êÖæµâµâÿÿÿÿÿÿÿÿÿÿàààààÛ;ß\ãëžç}ã}ã;ÛúÒààààà_ç_çBŒBŒßÖÞÖ_ç_ç?ãßþÚÞ֜ΔÞAŒ€€€„ˆÍ¤¦œ…˜Ç  ©K±¹ÐÅTÖÇ ï÷æYöÇ è¤è¤*­8öëYö…”è Çœ„”CŒˆˆˆˆˆˆˆ"ˆà_ÞÿæÐÅ®½ßâÚ¿ÍžÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷½÷½Â¾ÿÿÿÿï´ñ¸Á]Í^Ñ¿Ùÿá?æê?æâßÝžÕ9É8Åò¸ñ¸—Þ?Ñø½Â¾·Ú÷êÖæÿÿÿÿÿÿÿÿÿÿÿÿàààààààààààààààààààcŒBŒ„ÿÚÞÖ¾ÒÞÖßÖßÖßÖÿÞþÚ½ÒµÞ!ˆ„€€„„ΨǠ¦œè¤ ©¹ñÉ3ÒLµ†˜{÷Xöÿè¤é¨è¨*­ÿXöÿ¥˜è ¦œ„”BŒˆˆˆˆˆˆˆDà_âçñͯÅßâÚ¿ÍžÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾÷½ÂÖдÁÉ\Í ©ßÝ¿î_æè¤è¤ ©_æŸêÕé¤=ÍÁó¼ð´[Í?Ñ÷½×¹Ö¹Ö¹×¹¹Ú:óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààààààààààààààààà!„BŒß?ã?ã_ç_çëëë_çß½ÒµÞAŒˆ„€„„ï¨Ç ¦œ ©*­¯ÁÎÎÇ È ½ûïYö © © ©*­8öÞûzö¦œÇ …˜c"ˆˆˆˆˆˆˆˆàà_ÞëòÍÐÉÿâŸÚ¿ÍžÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂдñ¸ò¸:ÉþÙsÞ9ï:ïêzóÞûÞûÞû9ïê÷æµÞóÍ\Ñ:Éò¸ò¸Ï´–ÞÍ×¹Ö¹Ö¹Ö¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßûàààààààààààààààààà"ˆ?ã_çëëŸïŸïŸïŸïë_çÿÚ¼ÒµÞ¤˜ˆ„„„„ï¬è¤¦œ +­+­ÐÅÎñÉ +­ +©ÿÿZóœ÷*­*­*­K±ÞÿßÿÞÿ¦˜¦œ„”"ˆˆˆˆˆˆˆˆˆàà_âëñÍÑÉßޟڞ͞ÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXÉϴд÷ÀÉÑŸêë{óœ÷œ÷ÿÿÿÿÿÿÿÿÿÿ{óZóëµÞ_æ;ÉÅÅð´Ï´6Å?ÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍààààààààààààààààààà_çëŸïŸï¿óŸïŸïŸïŸïë?ãÿÚÙâ”Úbˆ„„„ˆ­È ¦œ*­K±ÑÅÐůÁLµ+­ÿÿ½ûÞûK±m¹m¹¹½ûœ÷½û¦œ…”BŒˆˆˆˆˆˆˆˆˆààüÑÿæÐɯÁŸÞ?ÒžÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿδдñ¸ó¼ÉœÕ1ÖçZóœ÷½÷ÿÿ*­óíóíîJ­ÿÿ½ûœ÷ZïÖâQÖ¾ÙÉõ¼ñ¸Ð´Î°—Þ?Ñÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?Ñ?Ñààààààààààààààààààà_çëŸïŸï¿óŸïŸïŸïŸïë?ãþÚçÖÞ„”ˆ„ˆˆˆ±È †˜ +­K±¯Á¯Á¯Á޽K±ÿÿÿÿÿÿmµŽ½®½Ž½œ÷{ó9列dˆˆˆˆˆˆˆˆˆˆàà?Úßâ¯Á޽_Ö¿ÍžÍÿÿÿÿÿÿÿÿÿÿÿÿëΰò¸õÀÅÉ:É_æ”Úë{ó½÷½ûÿÿ4ê)©{ïK­4îÿÿ¼÷œ÷Zó9ëÖâêÉÉ÷Àô¼Ï´Î°|Ñ?Ñÿÿÿÿÿÿΰΰ×â_Ñ_Ñààààààààààààààààààà¾Ò¾ÒÿÚ?ãë¿óŸïŸïŸïë?ãþÚ9ë÷楜!ˆ„ˆˆˆ3µÈ †œ +©+­®½ÐÅÐůÁ¯Áÿÿÿÿÿÿm¹¯ÁÐÁ޽{ó9ïë…”"ŒˆˆˆˆˆˆˆˆBŒààà?Ú¿Þm¹Ž¹ÿѾÍÿÿÿÿÿÿÿÿÿÿÿÿî´Î°Î´ÁÅZÍšÑýÙÖ´Þ9ë ©è¨)©*­½ñÉÒñÉðɹ ¥Ç Æœ8ëëRÖÞ|Ñ:ÍÁô¼Ï´Î°Î°—Þ_Ñ­°­°­°Î°Ñ¸Á_Õàààààààààà;ßàààààà?ãëŸïŸïŸï¿ó¿óŸïŸïŸïë?ãÞÖ:ëçÆœˆ„ˆˆˆ4µ¦œ†œ +©K±®½òÍñÉÏÁ¯ÁK±+­K±lµŽ½ÐÅm¹è¤†˜¦œdd"ˆˆˆˆˆˆˆ!ˆ"ˆààà_âŸÞ+­K±ÿÍ¿ÍÿÿÿÿÿÿÿÿδΰΰΰдõÀ÷ÀÅÿÝâQÖsÚÕâ褩½ûÞûÿÿÿÿÿÿÿÿÿÿœ÷Zó)©Ç µÞÕâµÞ_æÿÝÅöÀô¼ô¼ó¼Ï´Î°®°­°­¬­°­°Î°ò¸8Å[Í9É_Ñ?ÑÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„?ã¾ÒÞÖß_çë¿óŸïŸïŸïë?ãÞÖ9ëçÆ !ˆ„ˆˆˆ4µ…”…˜ ©K±®ÁÎÎÐůÁ +©Lµè¤lµm¹¯Á+±Ç …˜…˜dcBŒˆˆˆˆˆˆ!ˆ"ˆààà_âÚ*­K±ßÑÿÿÿÿÿÿÿÿð´Î´Î´Ð´ó¼õÀÅÅÅYÍŸêsÚ{óœóÒéœ÷½ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½÷œ÷ê{ó{ó”Þê9ÉXÉÅXÉÅô¼Ó¼Ï´Î°­°­¬­¬­°­°®°ó¼9É[Í_Ñ?ÑÍÿÿÖ¹Ö¹ÿÿÖ¹RÎ!„!„"ˆ€€€?ãëŸïŸï¿óŸï¿óŸïŸïŸïë?ãÞÖë÷âæ !ˆ„ˆˆˆ4¹e”…˜ ©m¹¯ÁÒÎñÉÐÅßÿœ÷½ûK±¹¯Áé¨:ï÷êµâdBŒCŒ!ˆˆˆˆˆˆˆˆààà_ÞÞ*© +©ÿÑÿÿÿÿÿÿÿÿ0¹Î´Ï´Ó¼ÁYÍÛÕ­ÉîÍQÖµÞ´ÞsÚ”Þ¥)©œ÷ÿÿ¿ÝÿÿRÒÿÿßáÿÿ½û*­è¤sÚ”Þ”ÞÖâsÚïÉÎÅœÕ{ÑÅô¼Ï´Î´­°­¬­¬­¬­°­°Ð´Á9É_Ñ_ÑÍÿÿÖ¹Ö¹Ö¹Ö¹Ö¹!„!„!„€€€_çÿÚÿÚß?ã_ç¿óŸïŸïŸïë?ãÝÖëöâÅœˆ„„ˆˆCe”…˜¦œ¦œ§œÇ È é¤ +©½û{óœ÷†˜…˜…˜†œœ÷9ïµâdBŒ"Œ"ˆ!ˆˆˆˆˆˆˆààà_ÞÚÈ  ©ŸÞÿÿÿÿÿÿÿÿÿÿÓ¼ô¼õ¼öÀXÉüÙÎÉïÍsÚsÖ1ÒZïZïZïK±ƵÞÿÿ÷æ¿áµÞÿÿtÖïÁJ­9ëZïëRÖsÚsÚ1ÒïÉ_æšÑöÀõÀó¼Ð¸Ð´­°­¬­¬­¬­°®°ó¼Å_Ñ_Ñ?ÍÿÿÿÿÖ¹Ö¹Ö¹Ö¹€„!„€€€_çëŸïŸï¿óŸï¿óŸïŸïŸïë?ãÝÖçÖÞÅœˆ„„„ˆd”…”e˜È¤È è¤ © +© +­*­{ó:ï{÷È è¤è¤è¤{ó9óÖædBŒ"Œ"Œ"ˆˆˆˆˆˆˆàààŸâ_Ö…˜ÿÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÀõÀ­ÅÎÉÏÉÒRÖRÖëZïZïÖZï”ÞZïœ÷9ë9ë¿Ý¿Ý9ëZóZïsÚ9ëüÑZï{ï÷âQÖ2ÒRÒÎÒñÍ5ÁõÀó¼Ò¸Ð´­°­¬­¬­¬­°Ð´ó¼_Ñ?ÑÍÿÿÿÿÿÿÖ¹Ö¹Ö¹€J¤!„„€€_çß_çëëëëëë_ç?ãþÖxÒ÷æ´Ú¤˜ˆ„„„ˆCŒde”褹®ÁÐÅÐÅŽ½ +©:ïÖâZóK±Ž¹mµÈ œ÷ZóÖâd”CŒ"Œ"Œ"ˆ"ˆˆˆˆˆˆàààÖÒ†˜¿ÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎÉÎÉïÍ1ÒQÒRÖëZïœóœ÷½÷½û”Þ½ûÿÿÿÿ ¥¿á*­ÿÿÿÿœ÷sÚœ÷ZïZïZï{óçQÒ1Ò1ÒîÉÎÉŒÅ6ÅõÀó¼Ò¸Ð´­°­¬­¬­°­°®°_Ñ?ÑÍÿÿßóßóÖ¹Ö¹Ö¹€€!„€€cBŒ„„„ÞÖ_çë_ç_ç?ãÞÖ[ÊuÖÕâîÅ ˆ!ˆ„„ˆˆU¹¦˜e” ©®½ÐÅ4ÖίÁÇ Zï×â9ï +­Ž½¹È œó{ó류CŒ"Œ"Œ"Œ"ˆˆˆˆˆˆàààßÑßÍßÍÿÿÿÿ]ç]ã}çÿÿÿÿÿÿÿÿÿÿ1ÒÎÎ1ÒçZïœóààÿÿÞû8ëÿÿÞûÿÿÿÿÿÿÿÿÿÿÞûœ÷”ÚZï)©ÿÿÿÿ{óZïç0ÒÒ1ÒïÍïͬÅVÉôÀó¼Ò¸Ð¸­°­¬­¬­°­°?ÑÿÿÿÿÿÿßóßóýÚÖ¹Ö¹d€€€€cBˆÿÿÿÿÿÿ„€€€€„ZÆ[ÊSÒ1Ò©„!ˆ„„ˆˆU¹¦œd”餮½ÏÁÎñÉŽ¹ +©[ó÷æ9ï*­¹¹è¤œ÷œ÷œ÷è dCŒBŒBŒ"Œ"ˆˆˆ!ˆ"ˆààà¿Í¿Íÿÿÿÿ\ãà}ë¿ïžïžëžëÿÿÿÿÖâsÚ”Ú÷æZï{óÿÿààààÊK­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ©)©)©)©)© ¥ÿÿ{óZï÷â”ÚtÚïÍ1ÒάÅVÉÕÀó¼Ò¸Î´Î°­°­°­°ÿÿÿÿÿÿßóßóßóÛ!„Ö¹dK¨!„€€cÿÿÿÿÿÿÿÿœ÷ÿÿÿÿÿÿëÿÿˆ„ˆ„BBŒBŒˆ#Œ"ŒˆT¹¦œe”騹¯ÁÎñÉŽ½lµ[óëZó*­m¹m¹+±œ÷œ÷ZïsÒç dCcè ç ÆœÇœÿÿÿÿààà¿Íÿÿ¿æøê;ïàààà¿ó¿óßóÿÿÿÿ×â×â9ë{ó¿óààààààà׿2ÒÊJ­ÿÿÿÿ ¥ ¥ ©]Å]Å¥ ¥¦˜ÿÿ{ïëÖÞtÚ0ÒSÖ2ÒïÍ­ÅÁô¼ó¼Î´<Í?ÑÿÿÿÿÿÿÿÿÿÿßóßóÛß¿ïcc!„!„€€cÿÿÿÿÿÿÿÿœ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"Œ"ˆè¤"ˆ"Œ!ˆT¹…˜d”é¨lµ¯Á¯ÁðÉŽ½¹{ó÷ê[ólµm¹ +©…˜œ÷½û½ûààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿßæ÷êë:ï[ïàààààßóÿÿÿÿÿÿZïzó¿óRÚààþÿààààààë÷æ”Ú¥ ¥ ¥¥]Å]ÅÇœ¦œ¦˜¦˜ÿÿZï8ëÖâsÖ1ÒSÖ2ÒïÍ­ÅõÀÓ¼ÑÍÿÿÿÿÿÿÿÿÿÿ_ãŸë¿óßß¿ïcccBˆ€„"ˆÿÿÿÿÿÿÿÿœ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè¤"ˆ"ŒT¹…˜d”é¨Lµ®½®½¯Á޽¹{ó9ïRÖ*­ààà÷½û½ûàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿààŸÚ;ï9ï9ï:ï|ïZïZóààààßóÿÿÿÿÿÿÿÿÿÿÿÿàà{óÿÿœ÷àààààà9ï ¥ ¥¥¥è¤}É~É¥˜„”ddBŒ¶Þ{ï9ÉxÍsÖÒïÍïÍïÉ?Ñçÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ã?ãß_çß¿ïccn°CŒ€„cÿÿÿÿÿÿÿÿœ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè¤Ç Ê î¨e”d”é¨K±®½Ž½®½m¹m¹Î1Ò{óàààà½ûßÀ½ûààÿÿÿÿÿÿÿÿÿÿÿÿ}ë]ãÿÿàÖ[ï{ïZï|ï¿ó¿ó¿óÿÿàààßóÿÿÿÿÿÿÿÿÿÿÿÿsÞà:ïœ÷ÿÿÿÿ½ûàZóœ÷àààà¥\Å\Å ­~É~ÉÊ ]Å]ÅBŒBŒ9ïZó{ï9ÅÖâsÖsÖÎ{óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ã?ã?ãßßßÛcccc€€cÿÿÿÿÿÿÿÿœ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇ È ¨œ"ˆCè¤LµŽ½Ž½¹K± ¥ÎÅøê{óàààà½û½ûÞÿààÿÿÿÿÿÿÿÿÿÿ~ã}ç]ç<ß¿÷ó|ï¾û[óžïßûÿÿ¿÷àààß÷ß÷ÿÿÿÿÿÿÿÿÿÿsÚZï{ó9ïœ÷ÿÿÿÿÞûZïœ÷ÿÿààààè¤\Å]Å­~É~Éí¨]Å]ÅBŒœ÷¾ûÞûÞû;ï9ëÖâRÒëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ß>ãßßßßÛdccc€€c×ÿÿÿÿÿÿ{óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇ Çœd!ˆcè¤lµ¹¹¹+±Ç {óZï½ûààààÿÿÞûÿÿààÿÿÿÿÿÿÿÿ~ç~ã~ç¿óßûžó¿÷ÿÿÿÿÿÿß÷ß÷ÿÿÿÿàààß÷ÿÿÿÿÿÿÿÿÿÿ÷êœ÷œ÷½ûZóœ÷ÿÿÿÿßÿ½ûÿÿ½ûààààè¤è¤ç Æœ}É]ÅBŒBŒBŒBŒÿÿÿÿÿÿÿÿÿÿzó9ëÞûëÚÒ×Û<Û<ß\ã}çÿÿ?ß?ß?ß?ßßßßýÖè „”ßüd„€c×ÿÿÞûÞÿZïÞÿÞûÞûÞûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇœd!ˆ…”è¤lµ¹¹¹àà¾ûÅÿÿààààÿÿÞûÿÿààÿÿÿÿÿÿžë~çžç¾ïßû¿û¿ûÿÿÿÿßûÿÿÿÿÿêúÒàààß÷ÿÿÿÿÿÿÿÿïÍ÷æœ÷œ÷½ûÞû½û½÷ÿÿÿÿÿÿÞûÿÿœ÷Þûÿÿààç ç Æœ¥˜]Å]ÅBŒBˆBŒBŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ<ß<ß]ã}ã]ã]ß<ß}çžë¿ï¿ó¿ó¿óžëþÚÜÒ*¥¦œ¦œÆœ€€cÛÿÿœ÷½û÷ê½û½û½ûœ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ©K±lµlµ¹¹àààßÿ½ûÿÿààààÿÿÞÿÿÿàÿÿÿÿÿÿžëžëžë¾ï¾ó¾ïžëžï¿û¿ûßêßÿ¿æŸæ<ßàààß÷ÿÿÿÿÿÿÒëœ÷½ûÞûÞÿÿÿÿÿÞûÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààœ÷Æœ¥˜„”]Å]ÅBŒBŒBŒÿÿÿÿÿÿÿÿÿÿÿÿÞûÿÿÿÿÿÿÿÿ~çžë¾ï¿ï¾ëžë~ëžë¿ï¿ó¿ó¾ïžë~ã^ã]ãç ç ç €€cÛÿÿZï{óÖæœ÷œ÷{ó9ïÿÿÿÿÿÿ}çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®½ààààÿÿ½ûÿÿààààÿÿÞûÞûàÿÿÿÿ¾ïžë¾ï¿ó¾ó¾ï~ç~ëžëžï¾ï_ó¿æâ?Þ~çààß÷ÿÿÿÿÿÿRÖ{ó½ûÞûÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿààà½û¥˜„”cBŒBŒBŒBŒBŒÞÿÿÿÿÿ½ûœ÷½û½ûœ÷ÿÿÿÿÿÿÿÿžë¾ïÞï¾ïžïžëžï¿ï¿ó¿ó¿óžë~ã]ã\ߥßü褀€cÛÿÿë9ï”Þ9ïë÷æÖâÿÿÿÿžëÚÎÿÿÿÿÿÿÿÿÿÙ¿Ñ¿Ñÿÿÿÿÿÿÿÿÿÿÿÿàààààÿÿÿÿÿÿàààà½ûÿÿ{÷àÿÿ¾ïžï¾ï¾ó¿ó¾óžë~ç~ëžëžï¾ï¾ó¿óŸ÷ÿêŸïààß÷ÿÿÿÿïÍÒÖâ9ï¼ûÞûÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÿÿÿÿÿàààÿÿÞÿœ÷½û½ûÞûÿÿÞû½ûÿÿÿÿZï÷ê÷ê9ïœ÷{óZïÿÿÿÿÿÿÿÿÿÿžë¿ëžëžëžë¿ï¿ï¿ó¿ó¿ë~ã^ã<ߥè¤è¤€€cÛÿÿÖæ÷æRÚÖæ¶â”ÞsÚÿÿÿÿ~ççÿÿÿÿÿÿÿÙ¿ÑÿÙ?Þÿÿÿÿÿÿÿÿÿÿÿÿàààààÿÿÿÿÿÿàààààààà¾ï¾ï¾ï¾ó¿ó¿ó¾ïžë~ç~ëžëžïžï¾ï¾ó¾ó¿óß÷àß÷ÿÿRÖsÞµâ÷ê{ó½ûÞûÿÿÞÿÿÿÿÿÿÿÿÿÿÿÞÿÞÿÞûÞû½ûÿÿÞûààÿÿÿÿßÿ½û½ûÞûÞûÿÿÞÿÿÿœ÷ÖâsÚRÚÕâ9ï9ï÷æÿÿÿÿÿÿÿÿÿÿÿÿ~ëžï¾ï¿ó¿ï¿ï¾ïžë~ç}ã]ß<ß÷âÖÞœó€€cÛÿÿµâµâRÚ”ÞsÚRÚRÖÿÿÿÿ¾ï¾ëÿÿÿÿßÑ¿Õ_Þ¿Õ?Úÿÿÿÿÿÿÿÿÿÿÿÿààààà½ûÿÿ½÷ààààààÿÿžï¾ï¾ï¾ó¿óßó¾ó¾ïžë~çžëžëžïžï¾ï¾ï¾ó¾ó¾ó¾óß÷RÚµâ÷æ9ï½û½ûœ÷ÞÿÞûÞûÿÿÞû½û½û½û¼ûœ÷½÷½÷½û÷¾ûààßÿÿÿÿÿÞÿ½û¾ûÞûÞÿÿÿÞûZïÖâRÚRÚÖâ÷êÖâ”Þÿÿÿÿÿÿÿÿÿÿÿÿÿÿžïß÷ßóßóß÷¿ï¿ï¿ëžç~ã]ßsÒÇ µÚ€€dûÖÿÿsÚsÞRÚRÚRÖRÖ1Öÿÿ~çþóþóÿÿÿÿÿÿ¿Ñ_âßÑ?ãÿÿÿÿßûÿÿÿÿÿÿàààààààààààÿÿÿÿÿÿžë¾ï¿ï¾ï¾óÞó¾ó¾ó¾ïžë}ç~ëžëžïžï¾ï¾ï¾ó¾ó¾ï¾ï1Ú”â÷æZóZó{óZó½û{óœ÷œ÷{ó:ó9ï9ï9ïë÷ê÷æë9ï9ï9ï9ïà½ûÞÿÿÿÿÿÞûÞûÞûÞÿÿÿ½ûœ÷öæ”Þ”ÞÖæµÞ•ÚRÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß÷ÿûÿÿß÷¿ïŸë}ã]ß;ßSÎJ­µÖ„€cûÖÿÿ”Þ”ÞRÚrÚRÖQÖRÖÿÿžëžç]ãÿÿÿÿÿÿÿÿÿÿÿÿãÿÿÿÿÿÿÿÿÿÿÿÿàààààààà½÷ÿÿÿÿÿÿÿÿÿÿžëžë¾ï¿ï¾ó¿ó¿ó¾ï¾ï~ë}ç~çžëžëžï¾ï¾ï¾ó¾ïžïß÷1Ö1ÖsÞ”Þµâ÷æ÷æ{ó÷êÖâsÚµâ”âRÚ1ÖsÞ•ÞµâÖæ÷æëëëïë÷êÖæµâÿÿÿÿÞûßÿÞÿÿÿÿÿ{ó9ï÷æµâsÚRÚTÖÿÿÿÿÿÿÿÿÿÿÿÿþÚÿÚ~ç¾ïÞóßûÿÿßû¿ó¿ïžë]ã]ãÚÎÚÎúÒÛÛûÖúÒÿÿÖâ׿RÚÖâ”ÞsÚ–Öÿÿžë<ß<ÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààààÿÿµÞ”ÞÿÿÿÿÿÿÿÿÿÿþóÞóžë¾ï¾ï¾ï¾ï¾ï¾ï¾ï~ç}ç}ç~ëžëžëžï¾ï¾ïžëžëßó1ÚRÚRÚRÚ1ÖsÞ”Þ”â”â”ÞRÚRÖÒÎÉîÍ1Ö1ÖÒRÖtÞµâÖâëëëë÷êÖæÕâ”Þ\ãÞûÞûßûÿÿ9ëÖâ”ÞRÚQÖ1Ö1Öÿÿÿÿÿÿ~ãžë¿ï¾ï~ç¾óß÷ß÷ÿÿÿû¿ó¿ï¿ïžë^ã~çÚÎÚÒúÒ<ÛÛ×ÚÎÿÿë9ïsÞ9ë÷êÖâµÞÿÿÿÿÙÎÚÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸ÆwÂvÂV¾ÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷þóÞó¾ï¾ïžïžë¾ï¾ïžë~ë}ç}ç~ç~ëžëžëžëžïžëžëßóRÚRÚRÚRÚ1Ö­ÅîÍÍÅÎÉîÉÍÅÍÅ­Å­ÅîÉîÍ­ÅÎÉ­Å­ÅÒsÞµâsÞ”Þµâµâ´Þµâ”ÞsÚ1ÖÒÞûÿÿÿûÿÿÿÿÿÿÿÿÿÿÚÎúÒÛ~ã¾ëßï¾ë]ã¾ó¾óÞóßóÞóžë]ߟë¿ëžë]ç~çÚÎúÒúÒÛ<ÛÛÚÎÿÿ{ó{óµâ{óZï9ë÷æÿÿÿÿ˜ÆvÂÿÿÿÿÿÿÿÿÿÿÙÎÙθʗÆvÂV¾U¾¶²ó±ò±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßûÿÿÿûþó¾ï¾ï¾ïžë¾ï¾ïžë~ç}ç}ç}ç}ç~ç~ëžëžë~ëžëßóRÚRÖRÖRÖ1Ö1Ö­ÅŒ½­ÁŒ½Œ½Œ½ŒÁ­Á­Å­Á­ÅŒÁŒ½Œ½ŒÁ­Å­ÁïÍïÍÒîÍ1Ò1Ò1ÖÒÒïÍ­Å­Å\ãÿÿÿÿÿÿÿÿÿÿÙÎÚÎ<Û~ç¾ë¾ï<ß¾ï¾ï¾ï¾óžïžëÛ4¶¸Ê~ç~çžïžëÚÎûÖÛ<ÛÛ×úÎÿÿœ÷½÷Öæ½ûœ÷{óZïÿÿÿÿ¿ïûÖÿÿÿÿÿÿÿÿúÖúÖÙθʘƗÆvÂV¾4ºó±ó±ò±ò±ò±ò±ò±ò±ÿÿÿÿÿÿ<ß}ã¾óßû¾ó}çÞóÞóÞó¾ï¾ïžç}ç}ç}çžëžëžëžë~ë}ã]ã¿ïßóRÚQÖ1Ö1Ö1ÒÒk¹k¹k¹Œ½ŒÁŒ½Œ½Œ½Œ½Œ½Œ½Œ½Œ½ŒÁ­ÁŒÁ­ÅÎÉ­ÅŒ½ŒÁ­ÅÎÉŒÁ­ÁÎÉ­ÅÍÅïÍÎÍ­Å­ÅÿÿÿÿÿÿÙÎûÖ]ãžëžë<Ûžçžï¾ï¾ï¾ïŸë]ãV¾×;ßÛ~ç¿ïÚÎÚÎúÒÛ<ß<ß×úÒÿÿ½û¾ûë¾û½û½ûœ÷ÿÿÿÿÿÿÿÿÿÿÿÿ¼î\ã<ßúÖ×úÖúҸΗÆvÂ5º¶ó±ò±ò±ò±ò±ò±ò±ÿÿÿÿÿÿ<Û<Û<Û}ã]ãžçÿûÿûÿ÷¾ï¾ïžë}ç}ç}ç~ëžëžëžë}ç\ß<ß}çÿÿ1ÖÎÎïÍïÍïÉÎɽû½÷Þû½÷ÿÿÎîÉ­Å­Á­Á­Á­ÁŒÁŒÁŒ½ŒÁŒ½Œ½Œ½ŒÁ­ÁŒ½ŒÁ­Å­Á­ÅÎÉÒÒîÍ­Á­ÁÎÍÚÒúÒ<Û}ã]ãÛŸë¾ï¿óŸë¿ïžëžëÙÊ]ãžëžï¾óß÷ß÷ÚÎÚÎÚÒûÖ\ã]ãÛúÒÿÿÞÿÞÿZóÿÿÞÿÞûÞûÿÿÿÿÿÿÿÿÿÿžïžïï<ã<ßÛÛ×ÙθÊvÂU¾4¶¶ó±ò±ò±ò±ò±ò±ÿÿÿÿ<ÛÛÛÛ<Û\ß}çëžëëžë¾ë}ã]ã]ã<ß=ß~ç~ç~ç]ã<ß\ã]ãÿÿRÚÒïÉîÉÎÉÎÉÎŽû½ûÞÿ½ûÿÿÿÿÿÿ¥¿ó¿óÿÿ­Å­ÅŒÁŒÁŒ½Œ½Œ½ŒÁŒ½Œ½ŒÁŒÁ­Å­Å¬Á­ÁÍÉÎÉÍÉ­ÅÍÉ­ÅÚÎûÖ]ãÛÚΟë¿ïßó¿ï¿ï¿óžë×]ç?ëÿêâŸæŸæŸæÛÒÛÒûÖúÒ]ã]ã<ßûÖÿÿÿÿÿÿ{óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾ï¾ï¾ï}ç\ãÛ<ßÛûÖÚÎÙΗÆU¾4º¶ò±ò±ò±ò±ò±ÿÿÿÿÿÿÛÛÛÛ<ß<ßÛ×ûÖÛ<ß<ÛÛÛûÖúÒÛ<ß]ß]ß<Û¹ÊÛ\ãRÚRÚÎÎÉÎÉÎÉÎÅÎŽû½û¾û½ûÿÿÿÿÿÿ¥¿ó¿óÿÿÿÿÿÿŒÁŒ½Œ½ŒÁ­ÅÎÉŒÁŒÁÎÉ­ÁŒÁŒÁŒÁŒÁ­Á­ÁÎÉÎÉîÍÿÿÚÎÛúҹʟë¿ïÞïßï¿ëÿû¿ó\ã~ë¿æâ?ÞÿÙÿÕÿÙÿÙÛÒûÒÛ×ûÖ]ã\ã×ÿÿÿÿÿÿ½ûÿÿÿÿÿÿÿÿÿÿÿÿ¾ï¾ï¾ï¾ï½ï}ç<ß}ç\ã<ßúÒÚҹΗÆV¾¶ó±ò±ò±ò±ò±ò±ÿÿÿÿûÖûÖ×ÛÛ<Û<ßÛ××××Û×ûÖûÒúÒûÖ××ÛûÒÚÎúÒ]ãRÚRÚÎÎÉÎÉÎÉÎÅÞû½û½û½û½ûÞÿÿÿÿÿ¥ÿÿ¿óÿÿÿÿÿÿÿÿÿÿÎÉÒÒÍÉ­ÅŒÁŒÁŒÁŒÁŒ½ŒÁŒÁŒÁÍÉïÑÒÿÿÚÎúÒÚΘÆ~ç¾ëÞï¿ïŸëß÷ßû}ç}ã¾ïßóßóß÷ß÷ß÷ß÷ß÷ÛÎûÒÛ<ÛúÒ]ã]ã;Ûÿÿÿÿÿÿÿÿ¿óà¿ó¿óÿÿÞÿžë¾ï¾ï¾ï}ë}ç}ë|ç}ã;ÛúÒÚÒ¹ÊwÂ5º²ó±ò±ò±ò±ò±ò±ÿÿÿÿûÒûÖûÖ×ÛÛÛ××××××ûÒúÒúÒûÒúÒÚÎûÖúÒúÒúÒúÒ]ãRÚRÚÎÎÉÎÉÎÉÎÅÿÿÞÿÞû½ûÞÿÿÿÿÿàßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ1ÖÒÍÅ­ÁŒÁ­ÁÎÍ­Å­Å­Å­ÅÎÉÖ1ÖÿÿÿÿÙÎÙÎwÂ<ÛŸë¿ï¿ïŸëßïßóžï<Ûžëß÷ÿ÷ßóßóßóßóß÷ß÷ÚÎûÖÛ<ßúÒ<ß\ã<ßÿÿÿÿÿÿ¿ó¿óàà¿óÿÿžëë¾ï¾ëëëžï}çžë}çûÖúҹʘÆwÂ4¶²ó±ò±ò±ò±ò±ÿÿÿÿúÒûÒûÒûÒûÖ×××××××ûÒûÒúÒúÒúÒúÒúÒúÒûÖûÒûÖúÒúÖ]ãRÚRÚÒÎÉïÉÎÉÿÿÿÿÿÿÞûÞûÿÿÿÿ¿ûààÿÿÿÿßÿÿÿÿÿàÿÿÿÿÿÿÿÿÒïÍïÍ1Ò1Ö1ÖÒÎÉÍÅÒ1ÖÿÿÿÿÚιÊw¸ƟëŸëŸëŸë¿ëÞïŸë<Û^ß~ã¾ëÿÿÿ÷ÿóþóÿ÷ßóÿóÚÎúÒÛ<ß××]ã<ßÿÿÿÿÿÿ¿ó¿óàà¿óÿÿëçžëžë}ç¾ïë¾ï¾ï<ßûֹΘƗÆV¾¶ó±ó±ó±ò±ó±ò±ÞûÿÿûÒûÒúÒûÒúÒûÖ×××××ûÖûÒúÒúÒÚÎûÒúÒûÒúÒûÒûÒ×úÒúÒ\ãRÖ1ÖÒïÉ1ÒÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸû÷ÿÿÿÿï¿êÿêÿÿÿÿÿÿÿÿÿÿÿÿÿÿ1Ö1Ö1Ö1Ö1ÖÖÒÖ1Öß÷ÿÿÿÿÚÎwÂV¾Û~çžçŸëŸëŸëŸë~ã×~ã^ãžçßïÿÿÿÿßóÿÿÿûßóÿûÛ<Û<ß<ß×]ãžïÿÿÿÿÿÿ¿óààà¿óÿÿççžëžë}ç¾ï}çžë}ç×úҹʸÊwÂUº¶ó±ó±ó±ò±ò±ò±ÿÿÿÿûÒûÒúÒúÒûÒûÖûÖ××ûÖ×ûÒûÒúÒúÒÚÎûÒûÒúÒûÒûÖûÖûÖûÒúÒ\ãRÚ1ÖÒÎsÚRÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸû¿ûÿÿÿÿßêÿî¿æÿÿÿÿßÿÿÿÿÿÿÿÿÿÿÿ1Ö1Ö1Ö1Ö1Ö1Ò1Öÿÿÿÿÿÿÿÿ˜ÆU¾¹Ê=ß~ç~çžçŸëŸëŸç=Û^ß^ã=ß~ã¿ë¾ïÞóÞóÿÿÿÿßóÿÿÿÿÞóÞó¾ï¾ïžï]ã<Ûÿÿÿÿ¿óààà¿óÿÿžçç}ç~ç}ãë}ç~ç<ßûÖÙθʗÆvÂU¾¶¶ó±ó±ó±ò±ò±ÿÿúÒúÒúÒÚÎÚÎûÖûÖûÖ×ûÖûÖ×ûÖúÒÚÎÚÎÚÎúÒûÒûÒûÒûÖûÖûÖúÒÙÎ\ãRÚRÖ1ÖÒµâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ûààÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ1Ö1Ö1Ö1Ö¥ÿÿÿÿ¿óÿÿwÂv¾ûÒ=Û~ã~ã~ç~çç]ã×^ß]ßÛ<Ûžë¾ï¿ï¾ï¾ïßï¿ïÞï¾ï¿ï¾ëŸëžë~çwÂÿÿÿÿÿÿÿÿàààÿÿÿÿëç}ç}ã}ç}ç]ã}ç<ßúҸʸʗÆV¾Uº4º¶4ºó±ó±ó±ÿÿÿÿúÒúÒÚÒÚÎÚÎûÒûÒûÖûÖûÖûÖûÖûÒÚÎÚÎÚÎÚÎúÒûÒúÒûÒûÖ×ûÖÚθÊ\ã”âsÞRÖ1ÖÒÎÉÎÉÿÿ¥¥è ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè è 1Ö1Ö¥¥¥ÿÿ¿ó˜Æv¾¸Æ×=ß]ß^ã~ç~ã~ã<Û×=ÛûÖÙÎûÒ]ãžëžë}ã~çžëŸëžëžëžëžëžç~ç]ãV¾ÿÿÿÿÿÿààààÿÿÿÿëžç]ã]ã}ç\ã]ã]ã×ÚÒÙʸʸÊvÂV¾4º¶¶²ó±ó±ÿÿÿÿúÒúÒÚÎÚÎÚÒûÒúÒûÒûÖûÖûÖûÒúÒÚÎÚÎÚÎÚÎúÒûÒúÒúÒûÖ×úÒúÒ¸ÆU¾<ßµâsÞRÚ1ÖÒÎÉÎÅ¥¥¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè ¥¥¥¥¥¿ó¿óvÂvÂÚÎÛ]ã=ß^ã~ç~ã~ç˜Æ=ÛûÒ¹ÊÚÎûÒ=ßžëžë\ã~ã~ç~çžç~ç]ã~ã~ã~ãûÖ×ÿÿÿÿÿÿààààÿÿ¿óëë]ã]ã}ç<ß]ã<ßúÒÙÎÙÎÙÊÙÎwÂV¾5º5º¶¶²ó±ÿÿÿÿúÒÚÒÚÎÚÒúÒúÒÚÒûÒûÖûÖûÖûÒÚÎÚÎÙÎÚÎÚÎúÒÚÒûÒÚÎ×ûÖÚÎúÒ—ÆU¾<ßµæµæ”Þ1ÖÒÎÎÉ­Á­Á¥¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÛ\ã\ãÛ\ãÿû¥¥¥¥ÿÿ]ãŸï¹Ê˜ÆûÒÛ]ã=ß^ã~ç^ã~ãxÂûҹʹÊÙÎúÎ×~ãžëžëÛ~ç~ã~ã^ã<Û~ã^ã<ÛûÒÚÎÿÿÿÿÿÿà?ÞXÁÿÿÿÿ¿óï}ç]ã}ç}ç]ã]ã<ßúÒÙÎÚÎÚÎÙΗÆwÂV¾U¾4º¶¶ÿÿÿÿúÒúÒÚÎÚÎúÒúÒÚÎÚÎûÒûÖûÒûÖúÒÚÎÚÎÚÎÚÎÚÎúÒÚÎúÒÚÒ×ûÒÚιÊv¾<ßÿÿÿÿÖæÖæsÚ1Ö1ÖÒïÉ­Á‹½k¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ\ãÛÛ\ßÛÛÛÛÛÛÛ<Û;Û\ß¿ó¹ÊÚÎûÖÛ=ß]ß^ã~ç^ã^ã˜ÆÙÎÚÎÿÿÿÿwÂ×=ß~ãŸë~çûÖÛ^ãÛ]ß^ã=Û¹ÊûÖÿÿÿÿÿÿÿÿààààÿÿÞû¾÷}ë]ã}ç]ã]ã<ãÛúÒÙÎÙÎÚιθʗÆwÂvÂ5¾¶¶ÿÿÿÿúÒúÒÚÎúÒûÒúÒÚÎÚÎúÒûÒûÒûÒÚÎÚÎÚÎÚÎÙÎÚÎûÒÚÎÙÎûÒûÖÚθÆwÂÛÿÿÿÿÿÿÖæÖæ÷êµâsÞRÚ1ÖÒÍÅk¹JµJµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ<Û;ÛÛÛÛÛÛÛÛÛÛ<Û}ç}ã»ÎûÖüÖÛ=ß^ã~ç^ã~ç=ß¹Êàÿÿÿÿ¿óßwÆ=Û^ß~çŸë~ç^ãûÖûÒûÒûֹʘÆß÷ÿÿÿÿÿÿÿÿÿÿàààÿÿÞûÞûï}ç}ç]ã]ç<ß×úÖÙÎÚÎÙʹʹʘƘÆwÆV¾4º¶ÿÿÿÿûÒúÒúÒûÒûÒûÒûÒúÒúÒûÒûÒÚÒÚÎÚÎÚÎÚÎÙÎÚÎûÒÚÒÙÎûÖûÒ¹ÊwÂûÖÿÿÿÿÿÿÿÿÖæÖæZóZó9ïÖæsÞRÖÒïÉŒ½JµIµIµÿÿÿÿÿÿÿÿÿÿÿÿ¿ó¿ó¿ó¿ó<Û]ã<ßÛÛÛÛÛ;Û<ß<Û\ß¾ÖüÖÛÛ=ã~ç~ç>ã^çÛÚÎàÿÿÿÿÿÿ¿óÚÎ×Û=Û~ã~ëëëç=ßüÖÚÎÚÎß÷ÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÞûÞû¾÷ï}çïžó\çúÖÚÒÚÒÚθʸʸʘƘƘÆvÂ5º5¶ÿÿûÒûÒûÒûÒûÒûÖûÒÙÊÚÒúÒúÒúÒÚÎÚÎÚÎÚÎÚÎÙÊÚÎÚÒ¹ÊúÒûÒÚÎv¾ûÖÿÿÿÿÿÿÿÿÿÿÿÿ÷ê{÷œ÷{ó9ïëÖæµâ1ÒÎÎÅk¹IµIµJµÿÿÿÿÿÿÿÿ¿ó¿ó¿ó¿ó¾ïÛÚÎúÒ]ãÛÛÛ<Û<Û<ß<ßÝÖ×=Û=ß^ã~ç~çß^çÛÒààÿÿÿÿÿÿÿÿÛÒÚÎÛüÖ=Û^ãÛw˜ÆwÂüÖÚÎß÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞûÞÿÞûï½óÞûÞûœóÙÎÙÎÚÎÙָθʘƘƘƘÆwÂU¾ÿÿÿÿ××ûÒûÒûÒûÖúÒ˜ÆÚÎúÒÚÎÚÎÚÎÚÎÙÎÚÎÚιÊúÒÙÎÚÎûÒÙÎwÂV¾úÒÿÿÿÿÿÿÿÿÿÿÿÿÖêœ÷Þû½ûÞûZóÖæSÚsÚ1ÒÒïÍŒ½JµJµIµ‹½ÿÿÿÿ¿ó¿ó¿ó¿óžïÚÎúÎ}ç<ßÚÎÚÎÛ\ß<ß<Û}çûÒ]ß]ß=ß^çë~ë¿Ú~çÚÒààÿÿÿÿÿÿÿÿÛÚÎ<ߺιÊ×>ßüֹʘÆ>ßûÖß÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞûÞÿÞûÞÿ¾÷ÞÿÞÿœ÷ZóØÖØÒØÖ¸Ò¸Î¸Î—Æ—Æ—Ê—ÆvÂV¾ÿÿûÒ××ÚÎÙÎûÒ×¹ÊwÂûÖúÒÚÎÚÎÚÒÚιÊÙÎÚÎÙÎûָʹÊÚÎw˜ÆûÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿZóÞûÞû½÷œ÷ë÷êÖæ”Þ1Ò0Ò1ÖŒÁk¹JµJ¹J¹ÿÿÿÿ¿ó¿ó¿óžë×\ã\ãúÒúÒÚÎ×\ß<Û]ãýÚ]ß~ã=ß=ß^çŸëëÚ?çÛààßûÿÿÿÿÿÿÿÿüÒÛÛÚΘƘÆûÒ=ß×ÚÎ>ãß÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞûÞûÞÿÞûßÿÞÿÞÿœ÷{ó9ï×â¶Ú·ÖvÆ×Ú×ڷҗΗÎwÆvÂv˜ÆûÖûÒ¹ÊvÂÚÎúҘƶÙÎúҹʹÊÚÒúҹʸƹιÊúÒ׸ÊúÒv˜ÆûÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ê½÷ÞûÞûÞÿÞÿï÷êsÚsÚ1Ò0ÒïÍ­Á‹½k¹j¹ÿÿÿÿ¿ó¿ó¿ó<ß<ß]çúÒ<ßúÒÚÎ×<Û^ã~ã~ã~ã~ãÛ=ß^çŸëŸëÞßæ]ãààßÿÿÿÿÿÿÿÿÛ^ß>ß>ßÛýÖüÖûÒüÖýÖÛÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞûÞûÞÿÞÿßÿÞÿÞÿÞû{÷ïÖæÖâµâ×â÷ê÷ê÷â·Ö—ΖÊvÂvÂÿÿ—ƹÊV¾óµ˜Æ˜Æ˜ÆàV¾ÙΗÆU¾ÚÎûÒÚΘÆwƹʹÊúÒûÖÙÎV¾V¾ûÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœ÷ÿÿœ÷Þû¾û½ûZó9ï÷êÖæRÚRÚ”ÞRÖïͭŬÁŒ½¿ó¿ó¿ó¿ó¿ó}ç]ã<ß}ç}ëúÒÚÎÛ~ã~ã}ã=ÛûÒûÒÛÒÛ]ãŸëŸëÞÍ¿æëûÖà>ßßêÿî?óóÛÛÛ]çÛÛÛûÖûÖÛüÚ<ß\ãÿÿÿÿÿÿÿÿÿÿÿÿÞÿÞÿÞÿÞÿ½û½û½ûZó9ï9ïë÷æ÷ê÷ê÷ê÷ê×â·Ö—ΖÊÿÿÿÿV¾vÂU¾àvÂvÂààv˜ƗƶV¾ûÒÚΘÆU¾v¸ÆÙÎûÒûÒwÂV¾wÂÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞû{÷9ï[óœ÷ZóÖæ÷êÖæ”Þ”âµâRÖsÚµâ1ÖïÉÒÎÉß÷¿ó¿ó¿ó¿ó}ã}çë¾ó¾ï×ÚÎÚÎÚÎÚÎÙÊÚÊÚÎÚÎÚÎÛÒ<ßžëëÿѾÍâŸï=ßןâÚ޺κÎ\ã}çÛ\ãÛÛûÖúÒûÒûÖÛ\ãÿÿÿÿÿÿÿÿÿÿÞÿÞÿßÿÞÿÞÿÞû½ûœ÷{÷Zó{÷Zó9ï÷ê÷ê÷ê÷ê×Þ×Ú·Îÿÿÿÿÿÿ5¾¶àºàààw˜ÆwÂ5ºà˜Æ¹ÊàV¾òµU¾—ƸÊûÒÚÒv˜ÆÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÿœ÷:ï9ï9ïRÖRÖ1ÖRÚ”ÞRÚRÚsÞµâsÞsÞÒRÚÒß÷ß÷ß÷¿ó¿ó}çžï¾ó¾óžïÚÎÚÎ×<ßÛûÖÚÎÚÎÚÎÚÎÚÎûÒ=ãë?Öÿî¿âŸâŸï^çÚŸÚÚºÎÚÎ<ß<ßÛ<ß\ãÛúÒÚÎÚÎÚÒÿÿÿÿÿÿÿÿÿÿÿÿ¾ûÞÿÞÿÞû¾û½ûÞûÞû½û{÷{÷Zó9ïë÷ê÷ê÷æÖÞÖÚÿÿÿÿÿÿÿÿàààààààwÂUºóµàààwÂààààV¾V˜ÆúҸʸÊ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½û[ó:ï9ï9ïÿÿÿÿ1ÖRÖRÚRÚsÞsÞsÞRÚRÚ1Öß÷ß÷ß÷ß÷ß÷¿óžï¾ï¿ó¾ó<ÛÛ}çÿÚÿÚžï}ç\ã]ã=ãºÎÙÎÛÒüÖ~çßâßêÿî×ÛÛÚÎÚÎÚÎÚÎ]ç}ëÚÎúÖÛÛúÖÚÎÚÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½û½û½ûœ÷{÷{óZó9ó9ïïï÷ê÷ê÷ê÷êÖâÖÞ¶ÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿU¾ààà˜ÆwÂààààààààUº¸ÊúÖûÖ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞû½û½û{÷[óÿÿÿÿÿÿ1Ö1ÖRÚRÚRÚRÚRÚ1Öß÷ß÷ß÷ß÷ß÷}çžï¾ï¾ï}ë<Û]ãßßÖÞÒœÎ{Ê]ç\ãÚÎÙÎÙÎÙÎÛÒüÖ~ëŸâÿî×úÖúÒ×ÚÎÚÎ\ãÿÿÿÿÿÿÚÎ;ÛûÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ó¿ó{÷{÷{óZó9ï9ï÷ê÷ê÷æ×æÖâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿv¾5ºV¾;çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞûÿÿÿÿÿÿÿÿÿÿß÷1ÖRÚRÚ1Ö1Öß÷ß÷ß÷ß÷ß÷ßûÞ÷úÒÚÎÚÎÚÎ×ÿÚßÖ½Ò|ÊZÆ:ÆÚÒÙÎÙÎÚÎÚÎÚÎÛÒ=Û}çŸÞÿêúÒÚÎ<ÛÚÎ<ß\ãÿÿÿÿÿÿ¾÷ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿öŸöŸöŸöŸöŸöö_òòîÿíÿí¿åŸåÝ÷æ÷æÕÕÕÕÕÕÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞßÚãÞûÞûÿÿÿÿÿÿÿÿß÷ß÷ß÷ß÷1Ö1Öß÷ß÷ß÷ß÷ß÷ßû¾÷Û}ç}ë<ÛßÖßÖÞÒœÎ{ÊZÆÂÂ÷½ÙÎÚÎÛÚÎÙÎÙÎ]ß}ãÿæÚÎÙÎÚÎÚÎÛ]ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿößößö¿ö¿ö?û¿ößö¿ö_ò?ò?òÿí¿éŸá_Ý?ÙÕÕÕÕÕÕÕÕÕÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_Ê_Ê?ÆÞûÞûÿÿÿÿÿÿÿÿÿÿß÷ß÷ß÷ß÷ß÷ß÷ß÷ß÷ß÷ß÷]ã}ëÚξ÷ß÷Þ÷ßÖßÖ½Î|Ê[Æ:ÆÂ¾Ö¹Ö¹×ÛÙÎÙÎÙÎ<Û=ßýÚÚÎÙÎÙÎúÒ×]ãÿÿÿÿÿÿ~ç~çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòÿú?û?û?ûŸÿßÿÿÿÿÿŸÿ?ûÿú¿öòîßåŸÝ_Ý?ÙÕÕÕÕÕÕÕÕÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿÷:ÆžóÿÿÿÿÿÖÿÖÿÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààààààÿÿÿÿÿÿÿÿÿÿß÷ß÷ß÷ß÷ß÷ß÷ß÷ß÷ß÷ß÷ß÷\ãÚÎ<ßžïÿÚßÒßÖÎ{ÊZÆ:ÆÂø½Ö¹Ö¹×¹÷½ÙÎÙιÊÛúÖÚÎÚÎÙÎúÒúÒúÒ¿óÿÿÿÿ]ãÛÛ¾óÿÿ¿óÿÿÿÿÿÿÿÿÿÿòöûûÿößö?û¿ÿ?ûßöö_ò?òßé¿åŸåŸá_ÙÕÕÕÕÕÕÕÕÕÕÿÿÿÿÿÿÿÿÿÿ¾¾¾Â:Æ[Æ{Ê|ΡصþÖÿÚÿÚÿÚÿÚßÖßÖßÖßÖßÖßÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿààà¿Öàààÿÿÿÿè¤è¤è¤è¤è¤è¤è¤è¤è¤è¤è¤è¤è¤ß÷]ã]ãÛÎ<ßÿÖßÖßÖ¾Ò|Ê[Ê:ÆÂø½Ö¹Ö¹Ö¹Ö¹ø½ÙÎ×úÒÚÎÚÎÚÎúÒúÒúÒ¹ÊÚÎÚÎ]ãÛ<ß¹Ê<ßß÷ß÷ÿÿÿÿÿÿÿÿÿÿò?òŸöÿößö¿ö¿ö_ûòò?òîÿí¿é¿å¿åŸá?ÙÕÕÕÕÕÕÕÕÿñÿñÿñÿÿÿÿÿÿÿÿ¾Â:Æ[Ê|ÊξÒÞ֡ȘÛ?ßßßÿÚßÒ¿Ò¿Ò¿Ò¿ÖßÖßÖßÖÿÿÿÿÿÿÿÿã?ÆàààÿÞààà_ÊŸÒÿÿÿÿÿÿß÷ß÷è¤è¤è¤è¤è¤è¤è¤è¤ß÷ß÷]ãÚÎÝÒÿÖÿÖßÖÞÖÎ|Ê[Ê9¾׹ֹ÷½ø½ÂÂúÒÚÎúÒúÒúÒúÒ¹ÊÙÎÙÎÙιÊ۹ʹʹÊÚÎß÷ß÷ß÷ÿÿÿÿÿÿÿÿÿÿÿÿò¿öŸöŸöòò_ò?ò?îò?òÿí¿åá?ÙÕÕÕÕÿñÿñÿñÿñÿñÿñÿñÿñÿñÿñÿÿÿñ¾:Æ{ʜνÒÞÖÿÚù½È˜ù½?ã_ã_ã?ã?ãßÿÖßÒ¿Ò¿Ò¿ÒßÒßÖßÖßÖÿÿÿÿ¿óÿÞ_ÊàÎßÚãßÚŸÒà_Ê_Êÿÿÿÿÿÿÿÿß÷è¤è¤:ÆZÊ9Âè¤è¤è¤ß÷ß÷]ãúÒþÖÿÖÿÚÿÖÿÖ¾ÒÎ{Ê:ÆÂø½ø½ÂÂ:Â:Æ:ÆúÒúÒ¹ÊÙÎÙÎÙÎÙιʹÊÙÊÚÎÙʹÊÙÊÛß÷ß÷ß÷ß÷ÿÿÿÿÿÿÿÿÿÿ_òßöÿúû_û_ûŸÿŸÿ?ûûßöò?ê_ÙÕÕÕÕÕÿñÿñÿñÿñÿñÿñÿñÿñÿÿÿÿÿÿÿÿZÆ|ʜξþÚßß¡îœ?ã_çë_ç_ã?ãßÿÚÿÖßÖßÖßÖßÖßÖßÖßÖÿÿ¿ó¿óßÚ?ÆàààÎààà_Ê_Êÿÿÿÿÿÿÿÿß÷è¤:Æ:Â:ÆÂè¤è¤è¤ß÷ß÷ÿÿ\ãÿÖÛßÿÚÿÚÞÖ¾Ò|Ê[Æ9¾Â9Â:Æ:Æ:Æ:ÆZÆÙÎÙÎÙÎÙÎúÒúÒÙιÊúÒÚÎÚÎÙʹÊÚÎß÷ß÷ß÷ÿÿddÿÿÿÿÿÿÿÿòßöÿöû?û?û?ûÿúßößöòîÿå_Ù?ÕÕÕÕÕÿñÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[Ê|Îô¹›Îß?ãߢµµ¦Õ¥Õ¥Õ +ÞÎîÐê_ãßÿÚÿÚÿÚÿÚÛÿÚßÖßÖÿÿÿÿÿÿÿÿÿÿààà_Êàààÿÿè¤è¤è¤è¤è¤è¤:Æ9ÆÂ9ÆÂè¤è¤è¤ß÷ÿÿÿÿ}çÿÚß?ßßÛÿÖÞÒÎ{Ê:ÆÂ:Â:Æ:Æ:Æ:Æ:ÆZÆÝÖ5¶úÒûÖûÖúÖúÒûÖúÒúÒÚÎÚÊÙÎ}çß÷ß÷ddddÿÿÿÿÿÿÿÿÿÿò¿öÿú¿öò_ò?òÿéÿå¿áŸÝ_Ù?ÙÕÕÕÕÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ:Æ|ÊÓµÿÖß_ç½Òɘ¥Õ¥Õ Þªêkû“ûrû2ó?ãßßßß?ãßÿÚßÖÿÿÿÿÿÿÿÿÿÿàààààààè¤è¤è¤è¤è¤¹ÎZÆ9ÂÂÂÂÂè¤è¤è¤ÿÿÿÿÿÿÿÿÿÚßßßßÿÚßÖ½Ò|Ê[Æ:Æ:Æ:Æ:Æ:Æ:ÆÝÖÝÖ5¶5¶5¶5¶ûÖÛ<ßÛûÒúÒúÒÚιÊÚÎß÷dddddÿÿÿÿÿÿÿÿÿÿ_òŸöÿöÿö¿ö_îîÿéßåŸáÝ?Ù?ÙÕÕÕÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø½:ÆÒ±ÞÖß?ãœÒɘþÿÿÿ ÷iæÉê0ó¶ÿüÿ_ç?ã?ã?ã?ã?ã?ãßßÖÿÚÿÿÿÿÿÿÿÿÿÿÿÿ_Æ?Æ_Æè¤è¤è¤è¤è¤è¤ÙιÊ9ÆÂ¾¾ø½ø½è¤è¤ÿÿÿÿœÎÞÖÿÖßßßßÛÿÖÞÒÎ{ÊZÆZÆZÆ:ƽҽÒ5¶5¶5¶5¶5¶5¶U¾wÆ]ã<ÛÛûÖúÒÚÎ]ç„”…”…”dd”ddÿÿÿÿÿÿÿÿÿÿÿÿ_ò¿öÿö¿ö_òîêÿé¿åŸá_Ù?ÕÕÿñÿñÿñÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×¹÷½‘­ÎÿÚ?ãßȘÞÿ·û ÷Iâ©ê0óØÿÜÿë_ç_çë_ë_ë_çßÿÚßÖÿÿÿÿÿÿÿÿÿÿÿÿ_Æ?çÿÞÿÿÿÿÿÿÿÿÿÿ—ÆvÂwÂ7Â÷½÷½ø½÷½×¹[Æß÷ÿÿÿÿ{ʜνÒÞÖÞÖÞÖÞÖþÖÞÖÞÖÞÒ½ÒœÎ[Ê[ƜΜÒ5¶5¶5¶5¶5¶5¶5ºv˜ÆÚÎÚÎÚÒÛ××úÒ…”¦˜¦œ¦œd”Cd”dÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_òßö¿ö_ò_ò?ò?òÿé¿áÿñÿñÿñÿñÿñÿñÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×¹Ö¹’­9½Òß?ßɘ¥Õ¦Ù Þ Þg÷“ûR÷1÷ïëëëïëë?ãÿÚßÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØÎV¾V¾V¾8Â÷½÷½÷½Â|Êÿÿ[Æ[Æ{ʜνҽҽҽҽҽÒÝҽҽνÒÎ|Ê{Ê5º5º5¶5¶5¶5¶5¶UºV¾wÂÙÎÚÒûÒÚÎÛÛd…”¦œÇ è ¦œ…”CŒd”dÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ò_òö_ò_òÿñÿñÿñÿñÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾×¹‘­×¹9½ÒþÚ•­Ì˜¥Õ¦ÕÆÙ ÞÐêÑê¿óŸóŸïŸïŸïŸïŸïï_çßßÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙΘÆvÂV¾V¾7¾¾ö¹ÂÂÂÂZÆ[Æ|ΜΜÎÎÎΜÎνҽÎÎ[Ê5º5º5º5º5º5º5º5º5¶5ºw˜ƘƹÊ<ßÛd„”¦œÇ Ç È Ç …˜CŒd”dÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂø½³±Ö¹ø½ZÆÎ½Ò”±T©>ãŸïŸó¿ó¿÷¿÷¿ó¿ó¿ó¿ó¿ó¿óŸóëßßÖÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè è è è è ÙÎÙιʘÂwÂV¾6¾º÷¹÷½Â9ÂZÆ[Æ{Ê|Î|Ê|ÎÎÒ>Ò:Æ6¾5º5º5º5º5º5º5ºU¾V¾VÂwÂwÂw˜ƘÆ<ßÛ<Ûd”É  ©Ö¾Í ©Ç ¦˜CŒd”dÿÿÿÿÿÿÿÿÿÿÿÿè ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂÂÕ¹÷½ÂZÆ{ʽÒþÚ?ãëŸï¿ó¿÷ß÷ß÷ß÷¿÷¿÷¿÷¿÷ß÷¿óë?ãßÖ½Òÿÿÿÿÿÿÿÿÿÿ¥¥¥¥¥¥¥¥¥¥wƘƹʸƘƹʘÆV¾UºVºV¾V¾vÂV¾V¾V¾WÂ9ÆÒ^ÖþÑ_Ú\Ò7¾7Â9Â8Â6¾5º5º5ºV¾WÂw˜ƹÊÙÎ<ßÛ;Ûd”ÇœûÑ_â_âÚÞÍ ¥¦œCŒddÿÿÿÿÿÿÿÿÿÿÿÿè è è è è è è è è è ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9ÂÂÂÂ:Æ[Æ{ÊÎÞÖß_çïŸó¿÷ß÷ßûß÷ß÷ß÷ß÷ß÷ßû¿÷Ÿï?ãÿÚ¾Òÿÿÿÿÿÿÿÿÿÿ¥¥¥¥¥¥¥¥¥¥¥wÂwÂv¾˜Â¹Ê¹ÆwÂV¾V¾—ƸÊÙÎÚΙÆWÂX½ɾÉßÑ?Þâ_âÚÖ:Ê9Æ6¾6º7¾6¾V¾WÂxƘƘÆwÆ<ÛÛÛÇ lµŽ½¯Á޽_ÞÿÕÞÑÇœCŒd”dÿÿÿÿÿÿÿÿ¥ ¥ ±±±±±ç¬Æ Æ¤Æ Æ Æ ç¨±¥ Å ±(±(±±±­¥ ¥ ÿÿÿÿÿÿÿÿÿÿ9ÂÂÂÂ:Æ[Ê|ΜνÒÿÚ?ãëŸï¿÷ß÷ßûßûßûßûßûßûßûŸï_çß¾Òÿÿÿÿÿÿÿÿÿÿ¥¥¥¥¥¥¥¥¥¥¥¥L­wÆwÂV¾V¾V¾˜Â˜Æ˜Æ¹ÊÙÊwÂV¾6º5º5º5ºÂþÑÿÕÿÕÿÑßÑÞÑÞÑÿÕ8Â5º5º6º6¾V¾wÂVÂ<ßÛßóÇ lµ¯ÁÐÅÑÅ_â_Þ“½è ¦œCddÿÿÿÿÿÿÿÿ­¥ ¥ ¥ ¥ ¥ ¥ ¥ Å Å Å Æ Æ¤Æ Æ Æ Å ¥ Å Å ¥ ¥ ¥ ¥ Æ¤ÿÿÿÿÿÿÿÿÿÿ:Æ9ÆÂÂ9Â{ʜνҽÒþÚ?ã_çŸï¿÷ßûßûßûßûßûßûßûßûß÷^Ê_ç?ãÞÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥¥¥¥¥¥¥¥¥ ¥Ñµ˜Æ˜ÆwÂwÂw˜ÆwÂwÂ5ºV¾vÂV¾5º5º8ÂÖÖÚ?Þ?Þ?Þ_Þ_â_Þ8Â5º5º5º5ºßóÿÿÿÿÿÿ騜÷ÿÿÿÿÞû½ûœ÷9ë÷æ÷æXÁ?Þk±ÿÿÿÿÿÿÖâïÍJ¹k½Œ½Œ½ŒÁÎÉîÍ­Á­Å­ÅîÉÎÍÎÍŒÁÎÉ­ÁŒÁ¬ÁŒÁ­Á­Å­Å­ÁïÍ÷æÿÿÿÿÿÿZÆZÆZÆ9ÆÂ9Â{ÊνҾÒÿÚ?ã_çï¿óßûßûßûßûßûßûßûßûß÷¿Öç?ãßÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥¥¥¥¥¥¥¥¥¥¥¥¥Ñµv¹ÊwÂwÂw¾w——ÂwÂwÂUº5º6¾7Â9ÆZÊ[Î\Ò>Ö_Ú?Þ_âÖ6º6ºÿÿÿÿÿÿÿÿè è¤3Ò–âTÖÎÏÅlµ ©Ç ¦˜CŒddÿÿÿÿÿÿµÞ9ësÖúÄúÄÖâ9ëçµÞRÖsÚµÞ9ëÖæ”ÞÖâ÷ærÚ{óëµÞ”ÞÖâ÷æøæë÷æÿÿÿÿÿÿÿÿ[ÆZÆ9ÆÂ9Â[ÊξÒÞÒÿÚ?ã_çë¿óßûßûßûßûßûßûßûßûÿÞŸóë?ãßÖ[Êÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥¥¥¥¥¥¥¥¥¥¥¥¥¥ÿÿÿÿÚÎÚÎv¸ʗÆwÂw˜ÆV¾U¾V¾w—ƘƗÆvÂwÆœÖ_ââÖžÚÿÿÿÿÿÿÿÿê¤ÚßâçÿæßâŸÞ?ÖÿѽÉ[Á8½5¹dÿÿÿÿÿÿî͔ޓÚïÍÎÉïÍ´Þ9ë÷æRÚsÚÖâZï1ÖRÚRÚRÚïÍ1Ò÷æµÞ”Þ´ÞÖâµÞ”ÚïÍÿÿÿÿÿÿÿÿÿÿÿÿßßÛÿÖßÖßÖÿÖß_ç¿óï¿óßûßûßûßûßûßûßûßûß÷¿ó_ç?ãßÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}ç}ç}ç]ã\ß<Û\ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…”¦œÇ Ç §œ¦œ…˜…˜…˜…”d”ddÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}ç]ã}çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/samples/hello_world/assets/meshes/mococo/mococotexture_face1.png b/samples/hello_world/assets/meshes/mococo/mococotexture_face1.png new file mode 100644 index 0000000000000000000000000000000000000000..a51855350e1e143409f99dbe18fb61f89f484d4d GIT binary patch literal 33873 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 N002ovPDHLkV1i=201W^D diff --git a/samples/hello_world/assets/meshes/quad/quad.mtl b/samples/hello_world/assets/meshes/quad/quad.mtl new file mode 100644 index 0000000..dcd20c5 --- /dev/null +++ b/samples/hello_world/assets/meshes/quad/quad.mtl @@ -0,0 +1,7 @@ +newmtl texture +Ka 0.0 0.0 0.0 +Kd 0.5 0.5 0.5 +Ks 0.0 0.0 0.0 +Ns 10.0 +illum 2 +map_Kd texture.png diff --git a/samples/hello_world/assets/meshes/quad/quad.obj b/samples/hello_world/assets/meshes/quad/quad.obj new file mode 100644 index 0000000..3e35ab4 --- /dev/null +++ b/samples/hello_world/assets/meshes/quad/quad.obj @@ -0,0 +1,15 @@ +# Blender v2.57 (sub 0) OBJ File: '' +# www.blender.org +mtllib quad.mtl +o Cube_Cube.001 +v -1.000000 1.000000 0.000000 +v 1.000000 1.000000 0.000000 +v -1.000000 -1.000000 0.000000 +v 1.000000 -1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +s off +f 4/4 3/3 1/2 +f 2/1 4/4 1/2 diff --git a/samples/hello_world/assets/meshes/quad/texture.img.bin b/samples/hello_world/assets/meshes/quad/texture.img.bin new file mode 100644 index 0000000000000000000000000000000000000000..b29fa9c886d9be8e7d8de9207d616c6e216bd6a0 GIT binary patch literal 32768 zcmeI4J94W$6o6TZZywio4JjxnLSmAkpm5=Wf`WqiEqf>^D7*(hmJ&a@Y{QsB8-e^% zd@(i;BVoz$%ss<+02w&vd=k=;bi~)>3pOAC1b_e#00KY&2mk>f00e*l5C8%|00;m9 zAOHk_01yBIKmZ5;0U!VbfWSXWAPFOXQEomzoK9A# z*T>qY`uViqu&U@?YwARSObSW3^xg&?13zO8tK>&E#pw0t?k>o+lYO)cdi~7q;vTC; zKl0^hutpD7QC@bg=rcD7<;XpK>MrOQnbhh%*5S@l?v$>mFdF}{nD^$L_ZAv;p_Bm;X|I`n!tqhj?l8_}A z_S)Q=;!5K#V3n&F;-r>|Z2SZ1zx96oIab%gO27)`Els_|{XZhhU6H`lX_9{Y|JW(s z-}anGF0$K7X}+(%-8;5BJASd6pU8H_`yhK}^Zrqo)Us~B%x3xd6^c=QLc5d~hBhaY zD^6-zSJql+uZyCWpU^I)!@*sg)UvKWWL~_IEh);q&Q1 zSWR@#QT~6KWxYkEJaW`S#2X!mlFQTX{3lFmS$m##=<{jmm7mZqWyI$Fe*0wNq?UDM z_5NvHq!_WV{wVSP8vV`v6VWDZ02aSDjaEIq@pgda6mp&;!J(%)U>?V~v{L0c4BJ`%LcAYmz$`_{L>YtM(he z-Vaa=S$U9779M`i-t*#~j=5FoDkm)oXKuMhQuMJSBjI- z%Pt-z;o2WNul$_k4RMv#psx?{jsz4Q(-M_(MmW60zd!= z00AHX1b_e#00KY&2mk>f00e*l5C8)I27z=UJGSmtIi{1yUwC6@WY67=FL#7jG=p>! z2a&)1j?ZrQ?3j*qALjk>^U#j27;D^4=j^U17(2f$I#T>#B72Sa$BC10>=fr+9xPcA z&Y9j~_AB&g<+BA??U)OXmq2yY@q>AdvHr^_Y$_s#d1t4Rux`Fr?ELO!mR8+e7pKjq zH;Hwxjl4n9W38*~VojUX#Az$~mSd*ueAM~qW(m~K(qoM$KBg(|nv{VXoOw$pZ?*BV zm@7g)37aCmuCeBVwajPNkw}5^9P!_%9p0$)abv`H*ShA~qs+$oJ$Yx(#0n`opSJaH z(qZ=fNzr-Usd~*t{1cz4v8l#y170tlCFTvQ$i4-SAZ}Ql#9R7lj-;VcyV@-;1D{VF zX^}6i$H7Cb7jR4ftM3E8w~N&>mg}P6u0czzwe{Q2`9a47$jUcu zWXC_yKU$%4wccLGOCmB^;_osNG!E*T48HqlwJlzzRoA+#=N>iGteKqs9&1CJ#3hlp zNA5;fBG>!qxlW4Sw(RHn?}GaEx4ESJ2&<14U70M8Lgc><>V2JKO~kB=jL)om&ZV6m zVXfEy@I+HcCtH6wD2_~=O3u&5!dBxZA+lMB=d$-lSnFCdcPn7@ES>CvxqCdaQIu6Y z7we;^WDPJY_o61`D*?vaVBtmNs|ERc#deg2aj-^X=g#Dl&e!8-(`D;7wY5ddPtWPs z5+1GLVCt?=M9KsmTQ1fTBqgL@m{_5ii|p6FV({6$m)Pse@k^6%WVg}hlmk7Z-*HfM z8p}$zd-INL-VK(b73i9x1-IKSd|@({WYnM18<|P=zFk6 z#(E|D9{W-d2c$({UKJ$T&g$oN%x=$I>XopN8* zQbxhZZtjPP&F}naiawRR{-nz0Vp<%2crVtqYXqzz`{%|UiVVn%aWHj>r*={6o#*WN zBii4-9ousjbl!aCb|sbt+N)SxW!+J375~vLSbFaR;=hV34Jv+qAz%HH`?WECOV8aw zeEDEOICMz=r7a2Ce|oXT&I(;~eCeE3{Qr@NjBw-6NuQ?IzoVeb;muvTeRxZ6O?rku^L4*l<^{R|0U!VbfB+Bx Y0zd!=00AHX1b_e#00KY&2(%^eKhApgmjD0& literal 0 HcmV?d00001 diff --git a/samples/hello_world/assets/meshes/quad/texture.png b/samples/hello_world/assets/meshes/quad/texture.png new file mode 100644 index 0000000000000000000000000000000000000000..e26ad67608ac3ec085c5eb465ff1bbdb028ae8ad GIT binary patch literal 3586 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 literal 0 HcmV?d00001