diff --git a/example/example.mk b/example/example.mk index 0618a8a..b91839a 100644 --- a/example/example.mk +++ b/example/example.mk @@ -804,7 +804,8 @@ TESTSCENE_OBJ = \ holly/background.o \ holly/ta_fifo_polygon_converter.o \ holly/video_output.o \ - sh7091/serial.o + sh7091/serial.o \ + model/testscene/texture/texBrick.data.o example/testscene.elf: LDSCRIPT = $(LIB)/main.lds example/testscene.elf: $(START_OBJ) $(TESTSCENE_OBJ) diff --git a/example/testscene.cpp b/example/testscene.cpp index cea1af9..4f52c10 100644 --- a/example/testscene.cpp +++ b/example/testscene.cpp @@ -20,10 +20,21 @@ #include "systembus.hpp" #include "systembus_bits.hpp" +#include "memory.hpp" + #include "model/model.h" +#include "model/material.h" +#include "model/testscene/texture/texBrick.data.h" +#include "model/testscene/texture/texFoliage.data.h" +#include "model/testscene/texture/texGrass.data.h" +#include "model/testscene/texture/texGrassClump.data.h" +#include "model/testscene/texture/texRock.data.h" +#include "model/testscene/texture/texWater.data.h" +#include "model/testscene/material.h" #include "model/testscene/model.h" using vec3 = vec<3, float>; +using vec2 = vec<2, float>; static float theta = 0; @@ -58,82 +69,96 @@ static inline vec3 transform_vertex(vec3 vec) static uint32_t base_color = 0xffc0c000; -static inline void transfer_triangle(vertex_position * position, union triangle * triangle) +static inline void transfer_triangle(const vertex_position * position, + const vertex_texture * texture, + const union triangle * triangle) { base_color ^= base_color << 13; base_color ^= base_color >> 17; base_color ^= base_color << 5; vec3 v1 = transform_vertex(position[triangle->a.position]); - *reinterpret_cast(store_queue) = - ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false), + vec2 uv1 = texture[triangle->a.texture]; + *reinterpret_cast(store_queue) = + ta_vertex_parameter::polygon_type_3(polygon_vertex_parameter_control_word(false), v1.x, v1.y, v1.z, - base_color); + uv1.x, uv1.y, + base_color, + 0); // offset_color sq_transfer_32byte(ta_fifo_polygon_converter); vec3 v2 = transform_vertex(position[triangle->b.position]); - *reinterpret_cast(store_queue) = - ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false), + vec2 uv2 = texture[triangle->a.texture]; + *reinterpret_cast(store_queue) = + ta_vertex_parameter::polygon_type_3(polygon_vertex_parameter_control_word(false), v2.x, v2.y, v2.z, - 0xffc0c000); + uv2.x, uv2.y, + base_color, + 0); // offset_color sq_transfer_32byte(ta_fifo_polygon_converter); vec3 v3 = transform_vertex(position[triangle->c.position]); - *reinterpret_cast(store_queue) = - ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(true), + vec2 uv3 = texture[triangle->c.texture]; + *reinterpret_cast(store_queue) = + ta_vertex_parameter::polygon_type_3(polygon_vertex_parameter_control_word(true), v3.x, v3.y, v3.z, - base_color); + uv3.x, uv3.y, + base_color, + 0); // offset_color sq_transfer_32byte(ta_fifo_polygon_converter); } -static inline void transfer_quadrilateral(vertex_position * position, union quadrilateral * quadrilateral) +static inline void transfer_quadrilateral(const vertex_position * position, + const vertex_texture * texture, + const union quadrilateral * quadrilateral) { base_color ^= base_color << 13; base_color ^= base_color >> 17; base_color ^= base_color << 5; vec3 v1 = transform_vertex(position[quadrilateral->a.position]); - *reinterpret_cast(store_queue) = - ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false), + vec2 uv1 = texture[quadrilateral->a.texture]; + *reinterpret_cast(store_queue) = + ta_vertex_parameter::polygon_type_3(polygon_vertex_parameter_control_word(false), v1.x, v1.y, v1.z, - base_color); + uv1.x, uv1.y, + base_color, + 0); // offset_color sq_transfer_32byte(ta_fifo_polygon_converter); vec3 v2 = transform_vertex(position[quadrilateral->b.position]); - *reinterpret_cast(store_queue) = - ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false), + vec2 uv2 = texture[quadrilateral->b.texture]; + *reinterpret_cast(store_queue) = + ta_vertex_parameter::polygon_type_3(polygon_vertex_parameter_control_word(false), v2.x, v2.y, v2.z, - base_color); - sq_transfer_32byte(ta_fifo_polygon_converter); - - vec3 v3 = transform_vertex(position[quadrilateral->c.position]); - *reinterpret_cast(store_queue) = - ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(true), - v3.x, v3.y, v3.z, - base_color); - sq_transfer_32byte(ta_fifo_polygon_converter); - - *reinterpret_cast(store_queue) = - ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false), - v1.x, v1.y, v1.z, - base_color); - sq_transfer_32byte(ta_fifo_polygon_converter); - - *reinterpret_cast(store_queue) = - ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false), - v3.x, v3.y, v3.z, - base_color); + uv2.x, uv2.y, + base_color, + 0); // offset_color sq_transfer_32byte(ta_fifo_polygon_converter); vec3 v4 = transform_vertex(position[quadrilateral->d.position]); - *reinterpret_cast(store_queue) = - ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(true), + vec2 uv4 = texture[quadrilateral->d.texture]; + *reinterpret_cast(store_queue) = + ta_vertex_parameter::polygon_type_3(polygon_vertex_parameter_control_word(false), v4.x, v4.y, v4.z, - base_color); + uv4.x, uv4.y, + base_color, + 0); // offset_color sq_transfer_32byte(ta_fifo_polygon_converter); + + vec3 v3 = transform_vertex(position[quadrilateral->c.position]); + vec2 uv3 = texture[quadrilateral->c.texture]; + *reinterpret_cast(store_queue) = + ta_vertex_parameter::polygon_type_3(polygon_vertex_parameter_control_word(true), + v3.x, v3.y, v3.z, + uv3.x, uv3.y, + base_color, + 0); // offset_color + sq_transfer_32byte(ta_fifo_polygon_converter); + } -static inline void transfer_triangles(struct model * model, struct object * object) +static inline void transfer_triangles(const struct model * model, const struct object * object) { if (object->triangle_count == 0) return; @@ -141,16 +166,21 @@ static inline void transfer_triangles(struct model * model, struct object * obje const uint32_t parameter_control_word = para_control::para_type::polygon_or_modifier_volume | para_control::list_type::opaque | obj_control::col_type::packed_color - | obj_control::gouraud; + | obj_control::texture; const uint32_t isp_tsp_instruction_word = isp_tsp_instruction_word::depth_compare_mode::greater | isp_tsp_instruction_word::culling_mode::no_culling; const uint32_t tsp_instruction_word = tsp_instruction_word::src_alpha_instr::one | tsp_instruction_word::dst_alpha_instr::zero - | tsp_instruction_word::fog_control::no_fog; + | tsp_instruction_word::fog_control::no_fog + | tsp_instruction_word::texture_u_size::from_int(128) + | tsp_instruction_word::texture_v_size::from_int(128); - const uint32_t texture_control_word = 0; + const uint32_t texture_address = texture_memory_alloc.texture.start; + const uint32_t texture_control_word = texture_control_word::pixel_format::_565 + | texture_control_word::scan_order::twiddled + | texture_control_word::texture_address(texture_address / 8); *reinterpret_cast(store_queue) = ta_global_parameter::polygon_type_0(parameter_control_word, @@ -163,17 +193,17 @@ static inline void transfer_triangles(struct model * model, struct object * obje sq_transfer_32byte(ta_fifo_polygon_converter); for (int i = 0; i < object->triangle_count; i++) { - transfer_triangle(model->position, &object->triangle[i]); + transfer_triangle(model->position, model->texture, &object->triangle[i]); } for (int i = 0; i < object->quadrilateral_count; i++) { - transfer_quadrilateral(model->position, &object->quadrilateral[i]); + transfer_quadrilateral(model->position, model->texture, &object->quadrilateral[i]); } } void transfer_scene() { - struct model * model = &testscene_model; - struct object * object = &testscene_Waterfall; + const struct model * model = &testscene_model; + const struct object * object = &testscene_Waterfall; transfer_triangles(model, object); *reinterpret_cast(store_queue) = @@ -181,8 +211,53 @@ void transfer_scene() sq_transfer_32byte(ta_fifo_polygon_converter); } +void transfer_ta_fifo_texture_memory_32byte(void * dst, void * src, int length) +{ + sh7091.CCN.QACR0 = ((reinterpret_cast(dst) >> 24) & 0b11100); + sh7091.CCN.QACR1 = ((reinterpret_cast(dst) >> 24) & 0b11100); + + volatile uint32_t * base = &store_queue[texture_memory_alloc.texture.start / 4]; + uint32_t * src32 = reinterpret_cast(src); + + length = (length + 31) & ~31; // round up to nearest multiple of 32 + while (length > 0) { + base[0] = src32[0]; + base[1] = src32[1]; + base[2] = src32[2]; + base[3] = src32[3]; + base[4] = src32[4]; + base[5] = src32[5]; + base[6] = src32[6]; + base[7] = src32[7]; + asm volatile ("pref @%0" + : // output + : "r" (&base[0]) // input + : "memory"); + serial::integer((uint32_t)base, ' '); + serial::integer((uint32_t)src32, ' '); + serial::integer(length); + length -= 32; + base += 8; + src32 += 8; + } +} + +void transfer_textures() +{ + system.LMMODE0 = 0; // 64-bit address space + system.LMMODE1 = 0; // 64-bit address space + + void * dst = reinterpret_cast(ta_fifo_texture_memory); + void * src = reinterpret_cast(&_binary_model_testscene_texture_texBrick_data_start); + transfer_ta_fifo_texture_memory_32byte(dst, src, 128 * 128 * 2); + + //memory::copy(&texture_memory64[texture_memory_alloc.texture.start / 4], reinterpret_cast(src), 128 * 128 * 2); +} + void main() { + transfer_textures(); + constexpr uint32_t ta_alloc = ta_alloc_ctrl::pt_opb::no_list | ta_alloc_ctrl::tm_opb::no_list | ta_alloc_ctrl::t_opb::no_list diff --git a/memorymap.hpp b/memorymap.hpp index d1535fc..1f6bcaa 100644 --- a/memorymap.hpp +++ b/memorymap.hpp @@ -7,7 +7,7 @@ extern volatile uint32_t texture_memory32[0x800000] __asm("texture_memory32"); extern volatile uint32_t system_memory[0x1000000] __asm("system_memory"); extern volatile uint32_t ta_fifo_polygon_converter[0x800000] __asm("ta_fifo_polygon_converter"); extern volatile uint32_t ta_fifo_yuv_converter[0x800000] __asm("ta_fifo_yuv_converter"); -extern volatile uint32_t ta_fifo_texture_memory[0x800000] __asm("ta_fifo_texture_memory"); +extern uint32_t ta_fifo_texture_memory[0x800000] __asm("ta_fifo_texture_memory"); extern volatile uint32_t ta_fifo_polygon_converter_mirror[0x800000] __asm("ta_fifo_polygon_converter_mirror"); extern volatile uint32_t ta_fifo_yuv_converter_mirror[0x800000] __asm("ta_fifo_yuv_converter_mirror"); extern volatile uint32_t ta_fifo_texture_memory_mirror[0x800000] __asm("ta_fifo_texture_memory_mirror"); diff --git a/model/model.h b/model/model.h index 6bf88b2..c90a718 100644 --- a/model/model.h +++ b/model/model.h @@ -35,19 +35,17 @@ using vertex_normal = vec<3, float>; using vertex_texture = vec<2, float>; struct object { - union triangle * triangle; - union quadrilateral * quadrilateral; - int triangle_count; - int quadrilateral_count; - - int material; + const union triangle * triangle; + const union quadrilateral * quadrilateral; + const int triangle_count; + const int quadrilateral_count; + const int material; }; struct model { - vertex_position * position; - vertex_texture * texture; - vertex_normal * normal; - - struct object ** object; - int object_count; + const vertex_position * position; + const vertex_texture * texture; + const vertex_normal * normal; + const struct object ** object; + const int object_count; }; diff --git a/model/testscene/material.h b/model/testscene/material.h new file mode 100644 index 0000000..ff7aaee --- /dev/null +++ b/model/testscene/material.h @@ -0,0 +1,62 @@ +#pragma once + +#include + +#include "model/material.h" + +enum material { + testscene_matBrick, + testscene_matFoliage, + testscene_matGrass, + testscene_matGrassClump, + testscene_matWater, +}; + +const struct material_descriptor testscene_material[] = { + [testscene_matBrick] = { + .pixel = { + .start = (uint8_t *)&_binary_model_testscene_texture_texBrick_data_start, + .size = (int)&_binary_model_testscene_texture_texBrick_data_size, + .vram_offset = 0, + .width = 128, + .height = 128, + }, + }, + [testscene_matFoliage] = { + .pixel = { + .start = (uint8_t *)&_binary_model_testscene_texture_texFoliage_data_start, + .size = (int)&_binary_model_testscene_texture_texFoliage_data_size, + .vram_offset = 32768, + .width = 128, + .height = 128, + }, + }, + [testscene_matGrass] = { + .pixel = { + .start = (uint8_t *)&_binary_model_testscene_texture_texGrass_data_start, + .size = (int)&_binary_model_testscene_texture_texGrass_data_size, + .vram_offset = 65536, + .width = 128, + .height = 128, + }, + }, + [testscene_matGrassClump] = { + .pixel = { + .start = (uint8_t *)&_binary_model_testscene_texture_texGrassClump_data_start, + .size = (int)&_binary_model_testscene_texture_texGrassClump_data_size, + .vram_offset = 98304, + .width = 128, + .height = 128, + }, + }, + [testscene_matWater] = { + .pixel = { + .start = (uint8_t *)&_binary_model_testscene_texture_texWater_data_start, + .size = (int)&_binary_model_testscene_texture_texWater_data_size, + .vram_offset = 131072, + .width = 128, + .height = 128, + }, + }, +}; + diff --git a/model/testscene/model.h b/model/testscene/model.h index 25fa4b1..f38b1cb 100644 --- a/model/testscene/model.h +++ b/model/testscene/model.h @@ -1,4 +1,4 @@ -vertex_position testscene_position[] = { +const vertex_position testscene_position[] = { {-2.726302f, 0.000000f, 2.726302f}, {2.726302f, 0.000000f, 2.726302f}, {-2.726302f, 0.000000f, -2.726302f}, @@ -1124,7 +1124,7 @@ vertex_position testscene_position[] = { {3.346258f, 0.354088f, 0.984101f}, }; -vertex_texture testscene_texture[] = { +const vertex_texture testscene_texture[] = { {-2.025739f, -2.025739f}, {-0.870555f, -2.711017f}, {0.500000f, 0.500000f}, @@ -1181,7 +1181,7 @@ vertex_texture testscene_texture[] = { {0.000000f, 1.000000f}, }; -vertex_normal testscene_normal[] = { +const vertex_normal testscene_normal[] = { {-0.000000f, 1.000000f, -0.000000f}, {-0.000000f, 1.000000f, -0.000000f}, {0.157200f, 0.911500f, 0.380100f}, @@ -1563,7 +1563,7 @@ vertex_normal testscene_normal[] = { {-0.833900f, -0.091000f, -0.544300f}, }; -union triangle testscene_Ground_triangle[] = { +const union triangle testscene_Ground_triangle[] = { { .v = { {7, 1, 0}, {8, 4, 0}, @@ -1606,7 +1606,7 @@ union triangle testscene_Ground_triangle[] = { }}, }; -union quadrilateral testscene_Ground_quadrilateral[] = { +const union quadrilateral testscene_Ground_quadrilateral[] = { { .v = { {0, 0, 0}, {7, 1, 0}, @@ -1633,15 +1633,15 @@ union quadrilateral testscene_Ground_quadrilateral[] = { }}, }; -struct object testscene_Ground = { +const struct object testscene_Ground = { .triangle = &testscene_Ground_triangle[0], .quadrilateral = &testscene_Ground_quadrilateral[0], .triangle_count = 8, .quadrilateral_count = 4, - .material = 0, + .material = testscene_matGrass, }; -union triangle testscene_Waterfall_triangle[] = { +const union triangle testscene_Waterfall_triangle[] = { { .v = { {17, 17, 1}, {25, 18, 9}, @@ -1684,7 +1684,7 @@ union triangle testscene_Waterfall_triangle[] = { }}, }; -union quadrilateral testscene_Waterfall_quadrilateral[] = { +const union quadrilateral testscene_Waterfall_quadrilateral[] = { { .v = { {25, 20, 9}, {18, 17, 2}, @@ -2071,15 +2071,15 @@ union quadrilateral testscene_Waterfall_quadrilateral[] = { }}, }; -struct object testscene_Waterfall = { +const struct object testscene_Waterfall = { .triangle = &testscene_Waterfall_triangle[0], .quadrilateral = &testscene_Waterfall_quadrilateral[0], .triangle_count = 8, .quadrilateral_count = 64, - .material = 0, + .material = testscene_matWater, }; -union triangle testscene_Pole_triangle[] = { +const union triangle testscene_Pole_triangle[] = { { .v = { {201, 25, 185}, {202, 30, 186}, @@ -2122,7 +2122,7 @@ union triangle testscene_Pole_triangle[] = { }}, }; -union quadrilateral testscene_Pole_quadrilateral[] = { +const union quadrilateral testscene_Pole_quadrilateral[] = { { .v = { {109, 25, 93}, {106, 26, 90}, @@ -2701,18 +2701,18 @@ union quadrilateral testscene_Pole_quadrilateral[] = { }}, }; -struct object testscene_Pole = { +const struct object testscene_Pole = { .triangle = &testscene_Pole_triangle[0], .quadrilateral = &testscene_Pole_quadrilateral[0], .triangle_count = 8, .quadrilateral_count = 96, - .material = 0, + .material = testscene_matBrick, }; -union triangle testscene_Foliage_triangle[] = { +const union triangle testscene_Foliage_triangle[] = { }; -union quadrilateral testscene_Foliage_quadrilateral[] = { +const union quadrilateral testscene_Foliage_quadrilateral[] = { { .v = { {211, 50, 195}, {212, 51, 195}, @@ -3001,6 +3001,20 @@ union quadrilateral testscene_Foliage_quadrilateral[] = { {942, 52, 338}, {940, 51, 338}, }}, +}; + +const struct object testscene_Foliage = { + .triangle = &testscene_Foliage_triangle[0], + .quadrilateral = &testscene_Foliage_quadrilateral[0], + .triangle_count = 0, + .quadrilateral_count = 48, + .material = testscene_matFoliage, +}; + +const union triangle testscene_Foliage_mtl_matGrassClump_triangle[] = { +}; + +const union quadrilateral testscene_Foliage_mtl_matGrassClump_quadrilateral[] = { { .v = { {259, 50, 201}, {260, 51, 201}, @@ -4083,26 +4097,27 @@ union quadrilateral testscene_Foliage_quadrilateral[] = { }}, }; -struct object testscene_Foliage = { - .triangle = &testscene_Foliage_triangle[0], - .quadrilateral = &testscene_Foliage_quadrilateral[0], +const struct object testscene_Foliage_mtl_matGrassClump = { + .triangle = &testscene_Foliage_mtl_matGrassClump_triangle[0], + .quadrilateral = &testscene_Foliage_mtl_matGrassClump_quadrilateral[0], .triangle_count = 0, - .quadrilateral_count = 228, - .material = 0, + .quadrilateral_count = 180, + .material = testscene_matGrassClump, }; -struct object * testscene_object[] = { +const struct object * testscene_object[] = { &testscene_Ground, &testscene_Waterfall, &testscene_Pole, &testscene_Foliage, + &testscene_Foliage_mtl_matGrassClump, }; -struct model testscene_model = { +const struct model testscene_model = { .position = testscene_position, .texture = testscene_texture, .normal = testscene_normal, .object = testscene_object, - .object_count = 4 + .object_count = 5 }; diff --git a/model/testscene/texture/texBrick.data b/model/testscene/texture/texBrick.data new file mode 100644 index 0000000..2a95417 --- /dev/null +++ b/model/testscene/texture/texBrick.data @@ -0,0 +1,1895 @@ +/40<+3P + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_model_testscene_texture_texBrick_data_start __asm("_binary_model_testscene_texture_texBrick_data_start"); +extern uint32_t _binary_model_testscene_texture_texBrick_data_end __asm("_binary_model_testscene_texture_texBrick_data_end"); +extern uint32_t _binary_model_testscene_texture_texBrick_data_size __asm("_binary_model_testscene_texture_texBrick_data_size"); + +#ifdef __cplusplus +} +#endif diff --git a/model/testscene/texture/texFoliage.data b/model/testscene/texture/texFoliage.data new file mode 100644 index 0000000..e0eb489 Binary files /dev/null and b/model/testscene/texture/texFoliage.data differ diff --git a/model/testscene/texture/texFoliage.data.h b/model/testscene/texture/texFoliage.data.h new file mode 100644 index 0000000..a5409b3 --- /dev/null +++ b/model/testscene/texture/texFoliage.data.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_model_testscene_texture_texFoliage_data_start __asm("_binary_model_testscene_texture_texFoliage_data_start"); +extern uint32_t _binary_model_testscene_texture_texFoliage_data_end __asm("_binary_model_testscene_texture_texFoliage_data_end"); +extern uint32_t _binary_model_testscene_texture_texFoliage_data_size __asm("_binary_model_testscene_texture_texFoliage_data_size"); + +#ifdef __cplusplus +} +#endif diff --git a/model/testscene/texture/texGrass.data b/model/testscene/texture/texGrass.data new file mode 100644 index 0000000..a1da3fb --- /dev/null +++ b/model/testscene/texture/texGrass.data @@ -0,0 +1,5332 @@ + + + + + + + + +! +! +" + + + + +" + + + + + +! + + + + +"" + + + + + + + + + +  + + + + + + + + + + " +" + + + + + +  + +" + +! + + + + +""" +" + +B" + + + + + + + + + +" + + +  + + + + + +" +" + + +  + +  + + "" + + +" + + + + +  + +  + +  +  + + + + + + + + + +  + +  + +  + +  + + + + + + + + + + + + + + + + + + + +  +  +  + + + + + +  +  +  + +  + + + + + + +  +  +  +" +BBc  + ! +B +" + + + +  + + +  +  + +    + + +  + + + +"" + + + +  +  + + + + + + + + + + + + + +" + + + + + +"  +  + +  +  + + + + + + +" + +"BCB"" +B"BBBCc + +"" +"C"! +B"B""CBB""""""""CB"cCBC + +" + + + +" +" +"""""B +" +"BBCB"""""BBBB"""" +""""! +! +! + +" +" + +BBBc""BBCB""""""CC"""BBCCCCCCCCCBBB"BB"BB"CBBC"BB"B"BBB""B"B""BB"C"BBCBB"BB"BB"B + +  + + + + +  + + + + + + +  + +  +  + + + + +  + + + +  + + + + + + + +  + + + + + +  +  +  +  + " + + + + + +"  + "! +"""""""! +" +"" " +" +""""" +""! +"""C"""""""" +""""B"""" + +  + +   + +  + +! + + + "  +  +  + +  +  +" +" +B"! +! +! + +" +"" +" +""BB"CB + + + + + + +" + +"" + + +""C" +" +""! +"! +" +"""BBB"""B""C"""BBBBC""""""BBBBC"CB"B"C"BB" + +B" +""BBBBC +"BB""CB"BCCCCBC"B""BC""""BcB"CBCCBBBC"""CBCcccc""BBBBBBCCcc"BCCB"" +"B""" +" + + +""ccBCCBcCC"C"BB"B"" +"B"""B"BBBBB"B""""BC"B""BB"""BCBCBCcBCBBCcCcCBBBB"BB"BBBcCBBCCCCCCccCcBCCCcccccCcCCBCCcCCCCcBBBBcCBBBBccCcCCcCCCcCBBcccCccCCCCBBBCCCCCCBC"CC""BCBCCcCCBCBBCCBCCCCcCBccBBCCBBCB""""BCBCCCccCCcCcCCCCCCBCBCB" +"BCB"CB""CCBCBBC"B"B"cc"ccc"B""BC"BcCBC"BBB"BBBCCBCcBCcBBccCCCCccBcBCB"CB""BBB"B"BBBB""BCBBBCBBCBBCBBBBB"CCBB"""BBB"""! +""! + +B"""""BBCCCcCCccBBCBCcBBBCccCcccccCCccCBBB +BccCB"B""""""B"BB""B""B"" +"B""ccBBcBBcCCCCCCccBBcC"""" +CBCCB"CBccccBBCcccCccccccccBBB"cBcB" +" +""""""""""""""""""""""""""" +" +"""" +"""" +" + +""" +"""""""" +""! +"" +" +" +"" +" +" +""" + +CccccccCCCBCCBB"cCBB""BB""""BB"""""""""BBB"BBBBC""B"""""""B"""""""B""" +""BB"""" +"" + + + + + + + + + + +" + +" + + +"""B"! +""""B"B" +""" +! + +" + + + + + + + + + + + + +"B"BCBBB" +"""""""""BB""B""B" +"CB"B""""""""B"B""""""BBCB"BB""""BB"""""BB"B"""BBB"" +" +" +" +"""""" +! + +"""""""C"" +"" +CB""" +" + + +" +"" +""""" + +"" + +CBCCB"CBCCCBBBB"""""""B"""""B"""CCCCB"BBB"""BB""""""""""B"B"" +"""""""" +""""""" + + + + +" + +" + +" +" + + + +"" + +""" + + + + +" +"" + + + + + + + + +  + + + + + + + + + BB""B""B"""" +""! +""""""" +" +""""""" + + + +"" +"""""" +""""""""" +" + + +" + + + + + """"""" +"" + + + + + +" +! + + + + + + +  + +  + + +  + +" + + + + +  + " + + + + + + + +  +  + + + +" +"" +" +"""" + +" +" +! + + +" + +  + + +  + +  + + + + + + +! + + + + + + + + + + + +"" + +  +! + + + + + + + + +  +  + +  + + + + + + +  + + +" + + +  + +" +" +"  + + + + + + + + + + +" + +! +""""C"CBB! +BB"B"" +"" +CB"BBBC""CCBC"BB"BBBBC"BBB"Bc"B"CBBBB"B""CC"BBBCC"cB"BBCC"BBBBCBCCBBB""BB"BCC"B""""BBB"ccBBCCccBBcBccBBCBCCBB"BCBCcBCccBCcCcc"B"BBCBCCBCCCBCCCCBBBBB"BBcB" +"BBB"B"B""BCCcCcBCB"""""CB"BBCB""BCCB""CCBB"! +B"" +B""CBC"BBCC"B""BB" +"CB""B"""""CC""CCBB""B""B""B""BB""B"""""""""B"B"B"C""BC"B"""B""BBcccccCccBCCBCcCCB"cCBCCBCBCBBBBCCcCCcCcc"CBBCCBBCCBB""""C"BB""B"BBBBBBBCBBB"B"""BBB""""""""B""""CCCCCCccBCCCCccCCCCCB"BBccCCC"BB"BBBCCCCBCBCCCCc""BBBB""CCcC""CBB""""B"B""""B"""B"BB" +""""""B"""""""""""""BB"""""""""""""""""B" +CCCBCCCCCCccCCcCBBBB"BB"CCBBBBCCccCcCCccBC"BcccCBCccB"CCcccccCcCBCCCCCCCB"CCCCBBcCCCCCccCBCCCCBBBCB"CCCccCCcCBcCBCcCCC"BCCBCBBCC""""BCBB""""BB"BBBBCccCcBB""BCBC"" + +""""""! +""B""""""BBBB"" + +"" + +CccccCCBCCCCcBCCBBBCBBB"CBBB"""""""B""B"""" +"BB +" +BB""B"""B"B"" +" +"" +CCCBBcBBCCCCBBCCcCCCCBBBCCBCBBBCB"BB""C""""""""""B" +"BB""""""""""BB""" +"! +""CB""""" +" + + + + + +"" + +" +" +""BB""B""""""""" +B""""""""" +! +"""""""" +"" +" + +" + +" + +"" + +" + +! + +" +" +B""" +" +" +""" + +" +! +! +! + +" +" +" +"" + +"" +"""""" +""""""""""""""" + +"" +"! +""""""""""""""""" +"" + +" + + +""""""""""""""""""! + +"" +! + + + + + + + + +" + +"""""""! +"" +"" +""""" +" + + +"" + + + + + + +"""""""" +" +" + +" +" + + +" + +" + + + + + + + + +  + " + + + + +  + + + +  + + + + + + + +  +  +  +  + +  +  + +  + + +  + + + + + + + + +  + +"" +"""" +""  +  + + +"" +  + +"""" +"""""" +" +""" +"" +""""""""""""""  + +  + +  + + + +  +  + + +  + +  + +" +"" + + + + +"" +"" + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + +  +" + + + + + + + +" +" +" + + + + + + +" + + + + +""""""B"""B"BBCBCBB" +" + +B + +CB"B"BCCBB""BBCCCCCBB"CCBCBBCCCCBcCCBCCCCBCCcCBBBBcCBBBC""" +"""BBBB +""""""BBB"CBBB"BCBcBBcB + + +" +" + +"" + +"C"C"C"CBBBBCCCBBCBCCCBCBCCBcCBCBCB""BC"CB" +" +BB"BBB"B" +B"BBCCBCBBBC""ccB""B"! +"B""CBBBBB + +"" +" +""""""""""""""" +"""""""""""""""""""""""""" +""""""""" +""" +" +" + + +"" +"" + + +" +"""""BBB +! +""""""BBBB""CC""""""BC" +" + +"B"B""BBCCccBCCCccCC""""" +" +" + +" +" + + + +! + +! + + + + + + + + + + + + + + + " + +! +! + + + + + + + + + + + + + + + + + +" +"B + + + +"""" + + +" +"""B + + +C"BCCBB""BBBBBCCCCBBC"B""BB"""""" +B"""BBBBCCBBBBB"BB"BBC"CCCcCBBCCBCCccccCccCCCcCBCCBCCCCCCCCCcccCCBCBCCBCCBBBBCB"BB""ccccccCcccCCccCCcCcCBCCBccCcCCCCBBBCBBBCBB""CC"B"CBBCcCCCCCCCCCCCCCCBCCBCBcccCcCB"CBB"B"CBcCB"BBccCCCcCCCcCcCBCBcCCCCCCCCcBcCCcCB"B"""""""BB""""BB"BBBCC""! +"BBBBCCCCCBCCccCcccccB"C"BBBCcCB"BB""B"""""""""" + +" +"! + + + + + +  + + +" + + + +  + +"" + + + + + + + + + +  + + + + + + + + + +  + + +  + + ! + + + + +" + +" +  + + + + + + +" +" + + +"" +! +" + + +"! +! +" + +  + +  +  +  + + + +  + +  +  +  + + + +  + + + + + + + + + +! + + + + + + +  + + + + + + + + +  + + + + + + + +  + +  + + + + + + +  + +  +   + +" + + + + + + + + + + + + + + + + + + + + + + + + + + + +" +"  + + " + + + + +" + + +" +"BBBC""BC"CB +"B"" +" +"! + +"" + +  + +  + + + + +" + + +" +! + +""" +"" + ! + + + + +  + + + + +"B" + +B" + + + +  + + +" +" + +" +"" +"B"B" + +B"! +"B""B"""BBBB""BBB"! + +" +""""""""BB"""B""BCBB"""""""" " + + +" +" +" + +! + + "" +""B"BBBBC""CCBC" +""" +"""""" +! +"" + +"" +""B +"""""BB" +BB +""BCcCCccCB"" +CB"""" +cc"BB"BCBBCBBC""""BB""BBBBBCBBB""B"B"""" + +  +  +  + + " +""  + + " +"" +"""""" +" + +BB + +  +" + +"""! + +B + +" +"""""""" + +" +" +""B"B"C" +"""""BB""""""""" +"""""""BB"BBBBC"BccCcB""B""""CCcCBBCB"C" +CCCCC""BC""CCC"CC"BcBBBCBBCBcCCBcCCCBBC"BcCCCBCCCCcCBCCCCCCCB""BCBBCBCCCBCcBBCCBCBCCccCBCCCCBC"C""""BCBBB""BBBB""BB! +" +"B"B"" +"""B! +" +CB""""""""""""""BB"B""B"""" +"" +""" +"""B"B""B""BB" +""""" +CBCB"" +""""""" +""! +"" + +! +" +""""" +"B""" +" +"" +! + + +" +""" +"" + +"" + + + +""" +"! +" +""! +"" +" +"""B""B"B"B""" +""CCBB"BB"" +""! +" +" +! +" +""B"" +! +"" +"B""""" +" +" +" + + + + + + +"""""! +" +" + + +! +""""" +""! +" +B"""! + + + +" +"! +""""""""" +" +" +" +" +" +" +" +" +" + +"" + +""! +! +" + +""" +" +" +"""" + +" +" +"""BC""CBBBBCBBcCB"BCCCCCCBBBBCBBBBBBBBBBBBBB"BCcCCBB"B"BBCcCBBBBBBCCBBCBCCBBCCCcCCBBCBBBB"cCccC"CBCCcCCCCBBBcCCCCCCCBCCBCCCCBBC"B"" + + +" +" + + +" +! +B"" +" +"""B +" +BBBB! +! +""! +""" +CB""""""" +B" + + + +"" +"""""" +" + +""" +"BBBBCBBBBC"BBBBCB"BB"BBBBBCBBBBB""""""""""""BB"""BB""""BCBB"BB""""""BB"""""""""" +"""" +"" +""""""""""""B"" + +""""B""" +""""""""""! + +"" + +" + + +" + +! + + + + + +! + +" +! +  + + + + +" + + + + + + + + +"" +"" + +"" + + + + +"" + +"" + + + + + + + + +  + + + + + + + +BBB"BB""""BB" +" +"""" +" +" + + +! +" +"" + +" +""""BBBBB"BB""B""""" +"B +""""""""""" + +" + + +  +  + +" +" + +"" + +  + +  + + + +"" + +"" +" + + + +" + + +" +"" + +" + + +! +! + + +" + + +" +" + + + + + + +"""" +""! +! + +" +"" + +"""" +" +""""" +" +""" +""""B" +"""BB" +" +"" +""""""""""" +"" +""""""""""" +" +""""""""""""""""""" +"""" +""""""B""" +" +""""""BB""BCBB""BCBB"""""""""" +" +" +""" +""""""""""""""""""" +""""""""" +" +"B"B""""""""""B""""""""""" +"""""""" +""B"BBB""""""""""""""" +" +"""""""" + +"""B""""""""""""""""""" +"""BB! +"""""""""BBB"""""""BB""""B"CB"""""" + +"! + +! +""" +"" + +" + +"" + +""" + +" + +"" +! + + + +" +" +" + + + +  +  +  + ! +" + + + +  + + + + + + + + +  + +  +  + BB""" +" +"""""" +""  +  + + +  + + + + + + + +"""""" +" +""""" +"" + + + + + +  + + + + +  +  + +  + +  + +  +  + + + +  + +  +  + + + +  +  + + +  + +  +   +  + +CBcCCcCccCCcCCcCCBccBCCCccCccccCBCBBccccCBBBBcBCCccccccccCccccccC"B"""""CCCCBBBBBB"""""" +B"BB"" +B"CCBBBBCBCBcCCC"CBBB"""""BBCB""""BCCCBCCBBC""CCBBCcCcCBcCCCBBCC""" +""BB"B""BBB""CCBB""""""""BBBBBBCCBCBBB""B""B"BBCC"B""B"""B""""""""""B""""BBBBCCBB"CBBCBB"CCBBB"" +" +"" +" +" +" +! +" +" +" +" +"" +"" + +! + + +" +" +"" +! +" +! + +! +" +! +""""""""" +! +""" +" +"! +"""" +"""""" +" +" +""! + +"" + +" +" +"" + +"" +" +""" +" +" + +""""""""""" + +"" + +""""" +"" +! + +" +" + +"" +"""""""""""""B"BB"""""" +B"""""""""" +" + +"" + +""B"""""B"""""" +"""""" +"" + + + +"" + +" +"" + +"" +""! +" +""! +" + + +"" + + + + +""""" + +"! +! +! +"" + +"! +""" +"""" +! + + +"" + + + + +"! +"" + +  + +B"BB"B""CCCcB"CBBBBB"C""BCCCCBCCCCCCCCCBCCCBCCCCBB"BCBCCCBB"B"""CCBCCCCCBBCCBBBCCCCBCBBBCBCC""B"CCCCCBBBBBBBBCBBBBBBB"""BBBB""""CCCCCCBBBBB"B"BCC""""" + +B"BB" +""BCCCBCCCCCBBCCCBCBC"B"""B""""" +"B""" +""B"B" +"""""""BBBB""""""""""" +! +""""""""""B""B"""""! +" +" + + +"""" + + + + +""""" +" + +"""" + + + +  +" + +" +" +" + + + + + + + + +""""" +" + +" +! + +  + + + + + ! + +  + + + + + + + + +  + + +" + + + + +  + + +  + + + + +! + + +" +" + + + + + + + + + + + +  + +  + + + + + + + +  +  +! + +" +" + + + +" + + + + + + +  + + + +  + + + + + + + + + + + + + + + + + + + + + +! + +  + + +" +" + +"" +" +" + +" +" + + +  + + +  + +  +" + + + + +" + +    +   + +" + + + + + +"" +! + + + + +  + + + + + + + + + + + + + +" +"" +! +"""""""""B"BBB"B""B"""B""""! +"""""B"""" +""" +"""BB"B""""""! +" +""" +"""""B""" +""" +"""""""""""""""""""" +""B"" +"BB"" +" +""! + +""""" + +"! +" + + + +  +  +! + + +! +" + +! + +  + +  + +! + + + + +" + + + + + + + + + +  + +  + + +  +  +  +  + + +" +" + + + + + + +  + + + + + + + + + + " + +" + + + + + + + + + +  + + + + + + + + + + +"" + + + + + + + + + + + +  + +"B""""""""! + +"" + +" +"" +  + +""!" + + + + " +" + + " + +  + + + + +  + + + +  + +    +  +  + + +"""     + +" +  + " +"""! +B! + +""""  + + + +  + + + + + +"" +! + + +! + + + + + +"" + +! +"B +C + + + + +" +C +  +  + +  +" +! +  + +" + + + + +  + + + + + +""""CcBBBB"BBcBCBBB"BB"CCCcCCCC"B""c"" + + + + + +"""CBB"CCBB"B"""BCc + + +" + + +"" + + + + + + + + + + + + + + +! + + + + + + + + + + +" +  +! + + +  + +  + + ! +! +! +"" +! +" + + + + + + +  + +" + +"! +! + + + + + + + + + + + + +  + + + +  + + + +" +" +"" + + + + + +" +! +"! +! + +  + " + + + + +"! +   +   + + + +  + + + +  + + + +  + + + + + + + +" +" + + + + + + + + + + +  +  +  + + + + +  + + + +! +" +  +  +  + +! + + + +"" + + +  +   +   +  + +" ! + +c + +B +  +B  +C + +  +" + +" + + +"" + + + +B"B + +  +  +  + +  + + + +! +! + +! +! +""B +" +" + +! +"! +"" +BBccBcCCB"CBBCBB""BcBcCcCCccccB"BB""CCCcCcCBB"CCCCCcCB""B""C"B + +" +" + + +" + +" +""B"""B"B""BBBBBCBCB""""B""BB +" +! +"B +"BCBcB""BCC"BBCcC"C""B"""BBCC"""""" + +"" +" + +" + + +" + + +""BBB"B""B" +""! +B"" +" +""""""B""""BBcc""CCCCBBCBBC" +"BB""BBBB""CBBBCBCC""B"""CBB""" +""" +""""""" + +""" +"""BB! + +""BB"B""BB +" + + + + + + +" + +" + + + +""B""B""""""""""""""" + + +""" +"""""""B! +! + + + + +"""" +"! + +"""""" +"" +" +"! +""""""! +" +! +" + +! + + +B +"" + +" +" + + + + + + + + + + +"" +! +"" +"""""""""" +" +! +! +"" +! +"""" +""! + +""" +" +""! +! + +! + +""! +""""""" + +"" + +" +"! +! +"! +"""" +"! + + + +" +""" +" + + + +" + + +"""""""" + + + + +! + + +" + +B" + +"" + +""""" +"" + +" +! +" +" + +" +" +""""""""""""""" +""""""" + +"! + + + + +! + + + + + + + +""""""B""""""""" + + + + + + + + + +" + + +  +"""B"BBC""" +""B""BCCCCCCCBB""BCBB""""""""! +" + +" +""""BB"B"""B"" +! +""""CBCB""B"BBBBB"B"" +" + + + + + + + + +  + ""BB""""BBB"B"B" +  + " + +" + +  + """" + + + +""" +" +"" +" + + + +! + + +" + +"" +" + +"" +! +"""" + +""B"B"" +"" + +" +! +! + + + +" +" + + + + +" +""""""B"""""""""! +""! +" +" + +""""" + +" +! + + + +"" +""" + +" +""B"""" +"" + +""BB"""" +" +B""" +"! + + +"" +"""" +" + +"""" + +""" + + + + +" + + +"""""! +" +""" +" + +"" + + + + + + + +" +" + + + + " +"""""""" + + + +"" + +"""" +"" + + +" + + +""""" + + + + + + +! +  + +" + +! +""""" +""" + + + +"" + +" + + + + + + +" +" +! +""""" + +""" +""""B""""B"" + +! + +"" +" + + + +"" + +"""""" +"""""! +" + + + +""""""""BB"B"""" + + +  + "" +" +"! + +" +""""" +" + + + +  + + + + +" +! +"""" + + + +" +" + + + + +  + +  + +" + + + + + +  +  + +  + + + + + + + + + + + + +  + +"" + + +"" +" + + + + + + + +"""""" +"" +  + +  + + + + + + + + + + + +! + + +" +"" + + + +"" +" + +" + +" + +" + + +"" +""" + +! + +" +" +"! + +"" + + + + + + + + + + + + + + + + + + + + + + + + +"""" +! + + +"B! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  +  +""""""""""" + +"" +"""""""""c +"BB"" +" +"""" +  +  +""BC""! +! +"""""""""! +"" + + + + + + + + + + + + +  + +" +" + + + + + + +  + +  + +   +  +  + + + + + + ! +""" + + + +""""  + BB"" " +"""B""B"BB"B""""B"BB""B"BB"B"BB""""BCCCCCCCB"""BCBBB"CB"CCccCBBBCCBBBBCCCCBCCCBBBBBB"CBBCBCB"B"BCCCCBBCC"BcCCCBBCCCCCCCBCCBCCCBCBCCCCBCCCCBCCCCCCB""CCBCCCcCCCBCccCCCCBBBB""CBBC""BCBBBBCCCC""CBCcCCccccCCccccccccccCCCcccccBBBCCCCCccccccccCCCccCcCCCcccCCCCCcCBBCBBCB"BBB"""""""""cccCCBCCCCCCC"BBB""""" +"""""B""""  + + + + + +  + + +  + + +" +"! +B + + +"" +""" + + +! + + + + + +" + + + +  +  + +" + +"" +" +  + + + +" + +""""""B"BBC" +"cccCCCcCCcBCcccCcc""""Bc""" +" + + +! +" +cc""cc"" +! +" +C"Bcc" + +"" + + + +! +"" +" + + + + + +" + + +" +" + + +  + + + +"""" + + + + + + + + +  +  + +  + +  + ""! +! +! +" +"C + + +"BcCcCCCCCCccCCC +! +  +""! +" + +  +! + + +"""" +"" +" +"B +"Bc"Cc"CBCBBCcCCccCcccCcccCcccccccddccBccdcCCccCccCcccccdccccccdcdccCcccCCCCccdccCcCCC"BBBBB"""""" + + +ccccC"CBdcccCBCB" +" + + +" + +! +" + +" + + + + + +CccccCBCCCcccCCcCBccccccCCcCBccBCcCccCCCCCBCB""ccCccCcCCdBBcCCBcccCCBCBCCCCCBBB" +"" + +" + +B"B"""""B""""B""CCBBCCCBBBBB""B"BBBB""B" + +" + +"! + + +" +! +" + + + + +  +  +  + + + +! +  + + + +" +! +" +"""""! +" +"""""" +! +" +" + +"" +" + + +"""" + + + + + + + + + + + +! +" +" + +" +"! +" + + +" +! +! +" + + +""! +" + + + +" +! + +" + + + + + + + + + +"" +"""" + + + +" +" +" +" +""""""""" +"""""" +""! +" + +"""" +" + +" + +""B"""""""""" +" +""""""" + +" +" + + +" +! + + +! +"""! + + + + + + + + +" + + +" + + + + + +" +""" + + + +"" +" + + + +" +"" +" + + +" +" +" + +"""" +""" +""" +""""" +"" + +! +! + + + + +"""""""""" +"" +! +""""""""BB""""""""" +"" +""""""""""""" +"""""" +"" +""" +" +"" + +! + +B" + +" +""! +"! + +" +! + + +  +"! + + +"" + +"" +"" + + + + + + +""""" +"" +" + + +" +" + +" + +""""""""" +"""""""""""B""""""""""" +"""""""BBB""B"""""""""BB""""BB"! +""! + +"""""""""" + + + + + +""""" +"" + +""""""""" +""" +"" +"" + +"" + + + """" +"" +" +B"""" +"""""" +"""""""" +! +"""""" +""" + +"" +""" +" +" +"" +" +"" + +""""" +""""" + +""""""""""""""" +"! + +"" +""""""B"""""""""""" +"" + +""""" +"" + + +"" + +"""B + +" + +"""" +"" + +"""" + +" +" + +""""" + +""! +"" +" +" +! + +! +"" + + " +" +" + + + + + + + +""" +""""" + + + +" +" + +""""" + +"" +"""" + +"! + + + + +" +" + + + + + + +  + +""""""" + + + +! + + + +! +! + + + +  + + +  +  + + B"""B"""" +B"" +""" +" +" +""""" +""! + +"" + +""""""" +"""""""! + + + + + + + + + + + +! + + + + +""" +""""" +"""""" + + +" + + + " +" + + + + + + + + + +" +" + + + + + + + + + + + + + + + + + + + + + +" +  + +"" + + + + + +  +  + + + + + + + + + + + + + +  +  + + + + +  + + +  +  + +  + +  + +  + +  + + + + +" + + + + + + + + +" +! +! +! + + +! +! + +" + + +" +" + + +" + +  +  + + + + + + + + + +! + + +" + +! +"! + +" +" +" +"" +  +  + +! +! + + + + +  +  + + + +! +! + +" +"" + + + + +"" + + + + + + + + + + + + + + + + +" +" +" +""  + +""B"B + + + + + + +! +CBCccB" +"!!"" +" + + + + + + + +  +! +! +"" +! +! +" + + + +  + + + +  + +" + + + + +" + + + +! + + + + +" + +"" + + + + +" + + +" +! + +  + +  + + + + + + + + + +  + + +  + +  + + + + +" +  +  + + + + + + + + + +  + + + +" +  + +  + +" + + +  + + +  +  + +  + + + ! + + + + + +  +  + "" +"""""" + + + +! +"""""""" +"" +! +"B""BB"" + + ! + +! +" + ! + +" +! +"! + +" +" +"""""B" +"BB""B"! +"""""BBCC""CB"B"B""B""B"""" +"""B""BB""CC" +BCCCcBBBcCBB"CCcCCBBB""" + + +! + + + +! +" +BB"  +"B""B""""BBCCB +" + +"B"c +! +  + +" + + B"" +"C"B + + +""BB"BB"BBCCCccBCcccccCccCCcCCCcccCCCBBCBCC"CCC""BCBCCCCcccccBcccCCCc +  +  + + +  + +  + + +  + + + + + + + +  + + +  +  + + +  + + + +  + + + + +  +  + +  + +  + + +  +  + +  + + + + +! + + + + +  +  + + +! + + + + + + + + + + +  +  + + + +! + + +" + +" + +"" +" +" +" +" + +"! + + + +"! +! +! + + + + +! + + + + +" +! + + + + +""B""""""" +" +"B""CB""" +"""cC"BBBBBB" + + + + + +"" +! +"B""CC + +"""""BB"ccBBcc""CB""CC"""""CBB"BCCccCcccBBccBc + + +  +! + +" + +"B""BB"BBBBBcc"B"BBBCcBBBBBBCBBCBBCBB"BBBBBCBB"B""BB"BBCCcBBCcCccCcBBBCccccCcBBBBCcBCCCBBBBCC"BBBBBBBCcccCcCcB""BBC""""BB""""CcccBBccBB""B"""B"CB""""cccccccccccccccccB"""cBcB"B""""""""""BB""BBBC"B" +"BBCCB"CcBCCC"""""""""""""""BBC""CBB"""""BBB"CCCCCCCC"""""B"BBBCC""""B"""""" +"BB""BB""""CBB"B"B"""""""" +"""""" +""! + + + + + +"" + +! + + + + + + + + + + + +! + + + + + + + +" +B" + +" + +"" + + +" +" + + + + + + + + + +" + + + + CBB""""""B""B" +"" +""! + +"" + + + +" +" + + + + +"""""! +" + +"""B" +" + +" + +"""" + + + +" +" + +" +"" + +" + + + + + + + + + + + + + +  + + + + + + +  + +"! +"! + + + + +" +" +! + + + + +" +" + + +""" +" + + + + +" + + + + + + + + + + +  +  + + + + + + + + + +  + +  +  +  + + + + + + + + + + + + +  + +  + + +  + + +" +" + +  + +  +  +  +  + + + + +  + + + + + +  +  + +  + " +"" + + + + +"" + + +" + + + + +! + + + + + +"" + +! + +  +  + + + + + + + +  ! + +     +    B"BB""BB" +""" +"B +""""B! + +B"""""""! + +""""" + +"" +" + +BB""" +"""" +""""""B""B + +" + +  + +"" +" +! + + + +" + + + + + + + + + + +"" + +" + + + +" + + + + + +" + +"" + +"" + + + + + +" + + + + +! +" + + + +" +"" +"! +! +" +" +"" +"""" +"""""" +""" +"""""""BB"""BBBBB"""""B""BBBBBCBCBBBBB"CB""" +""""" +""BBBBBB" +" +"""""""" +"" + +" +" +CBCCBBCBBCBBCCBC"BBB""""BBBB"""B + + + +" +" +"! +" +! +""""B" +" +" +"" + +"""""""""! +" +"! + +" +"" +"" +" +" +""""""B""" +"""""""""" + " + + + + + ! + + + +  +   + +  + +  +  +! +  + +! + + + " + +"! +B" +" + +"  + + + + + + + +! +" + +" +" +""" + +""""" +"" +" +""""""""B""""B""B""""""""""""""""""""""""""B""""""""""B"" +! + + +""""" +" +" +" +" + + + + + +" + +" +"! +" +B"BB"" +B""B""B"B" + +" + +"" + + +" +"" + +" + + + + + + + + + + + + + + + +! + + + + + + +  +  +! + + + + " + +  + +  +  +  + + +  + + +  + +     + B +B"" +"  + + +"B +" + + + + " +  +  +  + + "" +""" +""""""C""CB     +  + + +  + +  +  + +   + +  + + + + + +  + +" + + + + +! +" +" +! +" +"C""CCBC"""""BBB" +" +"" +" + + +! + " +! + +"" +""""BB"B +" +"BB""""B""BC"B""Cc"" +! +B""C! +"ccBcBBcC""CC"" +BBccC"BB""BBCB""B"Cc"BcCccCBBC""cB"BBCBBcB"B""B"CCCBBC"BcBB"""BC""CCBBBBBCCCB"cc"B"BB"B""BB"CC"BBc""B"BB""""CB"BBBB"B"Bc""CcCCcBcCC"CC"BBBCBCBB"B"BBBB"" +"BB"B" +" +" + +" +CBBBB""B"B"BccBB + +B" +"! +! +"! +""! +" +" +! +" +BB"""B""" +" +B"BBB"B""" +"  +  + + + +"" + + + + + + + + + + + + + +" + + + + + +B +" + + + + + + + +" +"""" +" + + +  + + +  +  + + +" + + + +! +""""BcCBBB"CCcBcCBcCBCCBB"B""" +"  +BB +B + + +! +"CBB""B""""! +B"BB""BB"! +" + + + +  + + + +  + +  + + + +" + " +" + + +! +  +  + +  + +  + + + + +"B +"  + + + +! + +B" +"BCBBCC"CB"cCBCCCBCcccCCCCccCccBCBCCcBC""c"B""CCccCcCCCcCcccc"B""CB" + +! + + +" +" +! +" +CB" +"BB""! +" +""! + +""" + +" +! +"" +"" +"""""" + +""! +" +" + +BBBB""CCcB""BCBc + + + +"B +" +cCcCB"BBB"""""""BB +"""BB""BB"B""""B""""""B""BBBBBBCB""""CBCCBBCC"""""""""" +B""""BcCcc"BcBcccccCcCB""B"B"BCCCBBBBB""" +B""""" +B"! +""""""""B"""" +""""! +"CBBB""BB"B""BB"B""""" +" +" +B"BBBB""""""BB" +" +""B"B""BBBBCCCCBB +"BC"B" + +! + +" +" +"""BB""B"""""""BB""""""""CBCCBBBBCCBBCBBBB"B""B"BB""""""""BBBBBB"""B"B"! +" +""B"BB""""""BB""CcBCCBCBCCCCCCccBBBCB"B"BCBBCCCCccCCccCcCCCCccCcCBccCCCBccccC"CC +" +" +"""""""BBBBB"""""""""BC""C""" +C"B"""""""""" +""""" +"" + + + +"" +"" + +"" +B"B"""""B""""" +"! +"" +""" +"" +"" +" + +""" +"""""" + +! +""""! +! +! + + + + + +" + + + +" + + + + + + + +"""" +""! + +""""" + +"" +! + + + + + +  +" +"" + +  + + + + + + + + + + + +  +  + +" +  + + + +  + + +  + + + +" +! +" + + + + + + ! + +  + +  + + + +  +  + +" + + + + +! +" + + + + + + +  + +  + " +" + +" + + +  + + + + +   + + + +  + +  +  + + +! +  + + + + + + +" +! + +  + + + + + +" + +" +" + +"" +"CBccCcCBcccCCcCcCcBcB"CBccB""BBBcBcB""""cC"""B""""""BB""B"""BBBB"" +" +"B +"BB"""""B""""""""" + +B"" +""B"""""""""B"""BB""B"""" + +BB"B"" +"" +"" +C"! +! +" +"cBB"""""""" +" +""""! +" +" +""""""""""""" +""B""" +"""" +""" +B"" +"" + + + + + +"""B""""""B"! + +" +""""""""""! +"""""""" + +"" + +  + + + +" +! +""""""B"" +" +" +""""" + + + + + +! + + + + + + +  + + +" + + + + + + + + +" + + + + +" +" + + + + + + + + + + +! + + + + + + + +" +" + + + + +" + + + + + +! + + + + + +! + + + +" + + + + +" +" +" +""" +" + +""" +"" + +" + + + + + + + + + +" + + + + + +! +""" +"" +" + +" +"" +! + + +"! + +" +" + +"" + + + +" + +" + +"""! +" + +""""B"B""""""" +" +" + +" + +"""""" +" +"! +! + + + + +" + + +" + + +" +" +" + +"" + +! + + +" +"""" +!"" +"" + + +" + +" + + +  +" +  + + +" +"B""""""B"BBB"C"BBBCc  + +  +  + +  + + B +"B"C" +"" +B""CC + + + + + + +" + + + + + +""""CCc"BBcCBCBBCB"cCCccBCc"CBBcBCCccccccccCcccCCCCccccBCBCCBCcccdcCdcCcCdccc + + + + +" +  + +" + + + + + +BC +BB"BB! +""""BCB + +" + +""B"B"CCCCB"BCCCCcCBCBCCcCC"BBCCCCCBBBCCCBBCCCcCccCBB"BCCBBBCBCBBCcccCBcBCCcCC"CBCC""BB"BcccCCCccccCCCCCB"B"CCBCCCCBBCB"BcBCcBCBcCccCCBCCBBB""B"CBB"" +" +BBBB""""B"""""B"""""""""B""" +"" + +"" +""""B"" + +""""BBB"" +""""" +"" +"ccCcCBCCCCB"BB""""BBB"""B"""" + + +""C"""""BBB"B""B""""" + + +"! +"" + + + +"" + +"" + + + + + + + + + +" +! +" + +" +"! +" +! +" +" +"" + + + + + + + + + + + + + + + + + + + +"" +" + + +" +""""Bc"Bcccc"BBCCcCBccccccCB"ccBBBC""ccBC""B""BBBcccccBCBCccCCCBdcCcccccBBccccB"CB"""! +cCcBB""BCBcBBccccCBccBCBBCB""""ccccCCcc" +" +"CC""""BB"CBBccBCccCcCCBCCCB"BBB"B"""B"CB""""""""BB""""""""BBCBccB"cBBBB"BBB"""" +BC +"BCBBCBCCB"B"" + +"""" +B""""B +"""CC" +""BCBB"B"BB! +"" +"! +" +! +B" +" +"! + + + + +""""" + +" + +" + + +" +"""""""C"cC""CB"""""""""B""B"""" +! +" +" + + +! + +"" +" +! +" + +" +" + + + + +B +" +! +"" +" +"""""" + +"! +" +""! +"B" +"" +" +" +""""""" +"""""CCBCBBBBB"CCBBBCB"""""""""B"""B"CCBCBBCC"BBBCCCCBBBB"BBBBBCB"""" +"" +"" + +" + + +"""" + +" + + + + +" +" + +" +" +" +" +" +" +" +"" +B"" + +" +! +""" +""! + + +  + + + + +  + + + + + + + diff --git a/model/testscene/texture/texGrass.data.h b/model/testscene/texture/texGrass.data.h new file mode 100644 index 0000000..ae560fb --- /dev/null +++ b/model/testscene/texture/texGrass.data.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_model_testscene_texture_texGrass_data_start __asm("_binary_model_testscene_texture_texGrass_data_start"); +extern uint32_t _binary_model_testscene_texture_texGrass_data_end __asm("_binary_model_testscene_texture_texGrass_data_end"); +extern uint32_t _binary_model_testscene_texture_texGrass_data_size __asm("_binary_model_testscene_texture_texGrass_data_size"); + +#ifdef __cplusplus +} +#endif diff --git a/model/testscene/texture/texGrassClump.data b/model/testscene/texture/texGrassClump.data new file mode 100644 index 0000000..cd956e3 Binary files /dev/null and b/model/testscene/texture/texGrassClump.data differ diff --git a/model/testscene/texture/texGrassClump.data.h b/model/testscene/texture/texGrassClump.data.h new file mode 100644 index 0000000..aaa0d87 --- /dev/null +++ b/model/testscene/texture/texGrassClump.data.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_model_testscene_texture_texGrassClump_data_start __asm("_binary_model_testscene_texture_texGrassClump_data_start"); +extern uint32_t _binary_model_testscene_texture_texGrassClump_data_end __asm("_binary_model_testscene_texture_texGrassClump_data_end"); +extern uint32_t _binary_model_testscene_texture_texGrassClump_data_size __asm("_binary_model_testscene_texture_texGrassClump_data_size"); + +#ifdef __cplusplus +} +#endif diff --git a/model/testscene/texture/texRock.data b/model/testscene/texture/texRock.data new file mode 100644 index 0000000..ce5dcb0 --- /dev/null +++ b/model/testscene/texture/texRock.data @@ -0,0 +1 @@ +::::p:p::p::::::q:::P:/2/2/22)22p::q:p:q:p:p:P::::::::B::::B:B:p:p:q:BBBJB:J:BB:::)2/2P:2/2p:p:::p:p:p:p:p:P:P:)/2)/2O2)22)/222)**p:p:p:p:p:P:P:P:p:p::p:p:p:p:p:P2)/2))2))2)2))*)O2p::p::BB:BP:p:p:p:::p:::q:B:q::::BBBB::::p:p:p:p:p::p::::p:::::::B::Bp:P:/2:p::p:p:/2P:P::q:::p:22):/2:222222*22/2p:p:p:2/2/2::::p:022*)/2/2P::2P:p:p:p::p:::::::p::p::::B:p:::O2/2**/2/2/2O2**)*/2O2/2O2O2O2O2O2o:p:O2o2O2p:O2o:o2p:p:p:).2/2.2/2O2O2O2O2O2p2O2O2p:p:p:p:p:p:p:p::p:p:p:p::::::BO2O2p:o:o2o2o2o2p:p:p:p:o2o2o:O2o2O2o2O2O2O2O2o2o2o2O2o2O2O2o2*:p:p::p2O2::BJKJBJJJo2O2o2o2O2*O22:p:B:p:)p:)p:p:::p:p::::p:p:p:::p:p::::::J:J:::::BBBp:p:p:p:p::p::p:p:p:p:::p:::::::BBB::::::::KKSJKBB:JBBBB:BB:::p::*P2)::::/2)*)BBB:BBBB:::::::p::P2B/2))))p:*/2*)*)/2/2p:P2/2::/2::*q:22p:2/2:p::p:P:P:P:P2::::P:O2p:/2B2B22222B/2BP:2222:::Bp:P::P:P::02p:p:p:q:p:p:p:P2p:p:p:BJO2B:JKKJJ::B:::::KBJB:::p:BJq:BJJBB:Bp:P:BBp:p:J:Bq::P::2::q::p:22)B/2:22))1P:)2))2)02P:p:P:p:q:p:q:p:p:p:p:p:p:p:p:p:)2))2P:P2p:)P:/2p:p:P:p:P:P:P:P:P2P:P:P:P:02020202P:P:P:p:p:P:p:P:P:P:P:P:p:P:P:P:P:P2P:P:p:p:P:/21))/20202P:p:/2p:p:p:P:P:0202P:p:P:p:P:P2p:P:P:p:p:p:p:p:p::p::p::::::q::::p:p:p:p:p:p:p:q:p:p:p::q::::p:q:p:p:::::p:q::::q:q:p:/2:2:::::2B/2JJB4SJP:P2P:)p:p:/202p:2:))*)):::q::2p:2:p:q:q:p:p:p:p:2)/2))/2/2P:p:P:p:P:P:P:P:P:p:p:p:p::::q:p:p:/2p::::B:p:::p:*/2)::BBO2)O2):JJJKKSJBB::JB:p::*/2)))))2))))*)):::::p::/2:::::)P2)*))*)))/2))))2O2/2O2/2p:2P:::p:p:2p:/2p:p:p:p:p:::p:p:P:2p:)p:p:p:p::P:p:/2O2p:/2O2p:p:p::/2O2/2/2o2p:O2p:p:p:p:p:p:O2p:p:p:p:p:p:p:O2P:2.*.*O2N2.**.**O2O2/2/2N2.*.2.2****.*O2.*o2.*.2N2O2N2O2O2:)))!.2/2)*)!)!!)!)/2O2O2O2O2BO2:O2O2o2O2o:p:p:p::B:BBBKSBKJJSKKJB:JBBBBBJBJ:BB::KKJBJB::p:p:p:p:::p:::::::B:::::::P2P:O2!!))!))))))))))/2O2O2/2o2O2p:O2p:O2O2o2o2o2P2o2o:))))/2p:O2O2)/22p:p:P2P2P2O2O2O2O2o2o:p:o:p:p:p:::p:::p:p:p:p:p::p:p:p:p:p:p:p:P2P2)::p:*/22)22))))))/2o2/2O2/2))))p2O2p:o:O2/2O2O2))).2/2O2O2O2/2O2O2O2O2o2O2O202/2/22::2:p:2:2/2P:2/2:BBBBB::BB::::::/222*2/22p:22/2/2p::::::::::p:q::p::p:p:p:p:p:BB:BBBBBBB:BBBBBBBBBBBBBBBBBBBBB:Bq:::B:Bp:p:p:p::Bq::BBBBBBBBBBq::B:::*P:/2p:::::P2p:p:p:::p:::p:::p:p:p:p::p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:o2P:p:p:P:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:P:p:p:P:P:p:P:p:P:P:P:P:P:p:q:p:q:q:q::q:p::P:p:q:q:::p:p:p:p:p:P:p:p:p:p:p:p:p:p:p:p:P:P:P:P:p:p:P:2P:P:p:p:p:/2P:P:p:P:p:P:p:p:p:p:P:P:P2P2p:p:p:Bp::p::::::p::BB:::p:)2)):B::))))*p:)P2B:::p:p:p:p:::::p::p:p::p:::o2O2p:o2p:p:p:p:p:o:p:p:O2O2O2O2O2o2O2O2o:O2p:O2O2O2O2O2p:p:p:p::p:P:/2p:p:p:2)/2))O2O2)O2O2O2O2O2)p:)p:O2P2p:p:)))))/2)22))))*)2q::p::p:p:p:2::222)2*)))))))**)*))*)/2)222)*/2/2O2p:O2O2p:p:O2O2/2)*))))2*)*2)p:O2:)p:/2p:p:p::B:JBKK4SS3S2O2p:p:::p:o2p:p:O2o2o2O2o2o2JKBBJ:p:p:o2p:p:p:p:p:p:O2o2O:O2O2O2O2O2O2O2O2O2/2/2/2/2/2P2P:O2O2O2p:O2O2/2O2O2O2O2O2/2O2O2P:P2p:p:p:p:p:p:p:p:P:P:p:p:p:p:p::p:P2O2P:/2p:p:p:p:P:P:P:P:p:p2O:O2p:p:O2p:O2O2O2O2O2p:O2/2p:p:P:p:P:P:P:P2p:P2O2O2O2/2/2/2/2/2*2/2/2/2/22/202P:/2O2P:P:/2O2/2O2O2O2O2O2O2p:p:p:O2O2p:O2P:p:::p:p:q:q:BBBBBBBBp:p:::p:P::p:::B:p:p::::::::::2p:P:*O22)22P2q:)p:::::2:/2::::BP:p:::p::::::::::B::p::p:p:p:p:p:::::p:p:::::::::B:BKSJJ:BB:::B::::::B::::P::p:q:p:P:P2P:P2p:p:p:p:p:P2BBP2P:P2P:p:p:::P:BJKB:J:p:Bp::JJKJp:JO2BJJBKKJJJJBJ:KKKBB:::q:p:::p::/2p:::::/22P22::p::::B:/2p:)*::p:::B::P22p:/2:::::2:P2**22p:BP2B2222/2:2P2O2P2/2P2BBp::/2P:O2p:p::p::::::::::::::::BBP2p:O2p::B::O2p:/2P::::::BB::B::::::::::::::::::::::::::22/22/2/2)P22)/2)*/22*B::::q::::::B::B/22222))**2))2*2*/2B:::P:2:p:p::p::::::102p:P2/2/2/2/2p:P::p:/2/2/22:p:p:P:::p:p::p::p:P:p:p:p:p:P:p:P:P2/2/2/2p:p:p:p:P2O2p:p:.2.2.2.2O2O2/2O2/2/2/2*.2/2**o2p:/2O2O2)/2/2/2O2*2O2O2/2O2))/22*))!O2/2p:O2**/2*)*)*/2O2O2O2)***.2O2.2O2:p::P:p:p:p:::p:p:p:P:p:P:p::p:p::p:p:p:B:BJKBKJKp:p:p:p:P::::p::p::::::JJp:p:::P:P:p:p:::p:p:::p:P2:P:/2O2O2O2Jp:Jp:O2P2p:p:O2/2o:/2.2.2.2.*p:/2P22))))p:p:p:p:p:p:p:p:p:p:p:p:p:P:p:P:O2*P2)))))O2*/2)))))/2P2O2p:p::p::p:p:p:p:p::p::::::::::::::::::p::p:p:p::p::p:p:B::p:p:p:::p::::p:p:p:p:p:p:222)BBB:p:2P:2BP:B/2/2*2222222p:2:22*P2P::::p:222*22222222:P2:2:P:::::::B:B:BBBJKKKBp:Bp:KBp:p:p:p:p:p:p:p:p:/22*2)P:*O2))*))p:p::p:p:p:p:p:p:p:::p:)p:/2/2))))))2)))*)*/2O2P::P::::::/2:/2p::p:q:p:::::BB:Bp:q:P:p::Bq:BP2p:P2p:p:P:p:p:p:p:P:p::q:p:p:P:P:p:p:p:Bp::p:p:p:::BBBp::p::::::::::::::::::::::::::::::::B:::::BBB:::::::::::::::::::::p:p::p:p:P:p:p::p:::p:P:p:22)22))))****)))):::::/2O22:::/2*2**2))*)*22*2/2O22p:p::B:BB::BBBJJ3SKKK4S::BBB:BBKB4SKBBBBSKBKS4S3SSBBBBBBBB3SKJBBBBBBBBBBBB:B:::p::p:/2::::*)2)::p::::::*p:)2::p:::::p:2)*):p::/2*))))*))/2:2P:)))))p:):*/2p2p:O2O2o2O2o2o2O2O2O2O2O2/2O2/2O2/2O2O2O2O2/2O2/2O2O2O2O2O2O2O2O2O2/2O2O2O2O2o2O2O2O2O2.2.2/2/2O2O2O2/2/2/2O2O2O2O2/2/2/2/2O2O2O2O2o2o2O2o2O2O2/2/2O2O2O2O2o22O2)))))O2o2O2O2/2/2p2p:/2O2/2O2O2/2O2/2O2/2/2/2O2O2O2O2/2O2O2O2o2p:o2p:O2O2O2p:o:p:p::.*N2.*.2.2.2.2.*.*.**.2.*.*.*.*/2O2.2O2O2O2O2O2.*.2.*.*/2O2.*O2) *)!.*.*.**)))).***: **.*.**.*.*.*O2:BBBO2BBO2O2O2O2O2o2o2o2O2O2O2O2o2p:o:p:p:p:p::p:p:p:p::p:p:p::::p:.2O2.*O2O2p:O2O2O2/2p:/2/2O2)/2p:p:P2p:p:p:p:p:O2P22O2P:p:O2O2/222)*2)/2/2/2p:p:O2p:p:p:p:p:p:p::B::P:P:p:P:p::P::p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:P2p:p:p:p:p::p:p:p:p:p:p:p:p:BB::BBB:::::::::B:::P222):2/2)))2)::p:p::/2P:)/2)2))))*)2)2))))))*))))/2p::::p:p::p:::p::p::::p:p:p:p:p:p:P:p::p:::p:p:::p::P:p:::p::P:P:P2P:p:p:p:p::::::BBB::::BB::O2)p:O2))/2)p:p:::p:O2p:P:**2/2O2:::p::p::::::B:B:p:p:::::::::::p:::::BBB:B:BBBBB)!))/2B:J)))O2/2BO2p:JKKKJJJJJB::Bp:p:p:2O2p:p:o2p:p:::p:::p::p:::::B:::B:B:BBBBB:2p:2))))p:02p:02)!))!)!)/2/2*2!!)!*/2*/2q:02B/2)))):2P22))))))))/2O2O2/2)))2/2/22/2:::::::::::::::::B:BBBBP:::p:p:P2/2/2/2:p::p:p:p:p:p:::JJp:p:B:p:P:p:p:2/2p::p::p::::::/2/2222)2*222222/2:)2/2p:2/2P:O2p:::::p:::2/2::p:::::::B:JJS::BBp::B:KKKKKBKB/2P:/2O2p:p:P:p:/2/2O2O2O2P:O2O2p::p::::::p::P:p:::::/2/2/2O2O2O2O2O2/2/2O2/2O2O2O2O2p2p:O2p:p::p:p:O2O2O2O2p:p:O2o::::p:p:p:p:p::p::p:p:p:p:p:::p:::B::p::p:p:p::p:p::p:p:p:p:p:p:p:p:p:p:p2p:p:O2O2o2p:o2O2p:p:P:p:O2O2O2/2O2p:O2p:O2O2O2O2O2/2O2O2p:o2::O2O2O2O2O2O2O2O2O2O2O2O2O2.2O2.2O2/2.2.2::::o2O2o2O2::::p:O2p:O2.2O2N2N2.2.2O2N2N2O2.2.2O2O2N2O2O2O2O2O2O2O2/2/2O2O2.2O2O2/2O2/2/2/2.2.2/2O2/2O2.2.2.2.2/2O2/2O2.2O2.2O2O2O2O2O2O2O2O2O2O2O2O2O2/2.2O2O2/2O2O2O2O2O2O2O2O2O2O2O2BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB:BBJJBBSBJKKKKJJSBBq::::B:B:BBB:BBBBBB:::p:BBBB::::2*2/22O2P2::::::::BBBBBB:BB:B:02:B2/2::B:B:BBBB:BB:BB:Bp:p:J:p:p:p:p:p:p:p:p:p:P2BB:BB:BP2p::22P22/2*p:p:))/2)))))02)))))))))***2)*2/2*/2p:p:/2*)))**22*2/2/2P22p:::::BB:JB:B::B:B2/222/2Bp:B02p::::BBBB:::q:B:B::BB::BBP2p:p:p:p:p:p:p::p::p:p:p:p:p:p:p::p:p:O2p:O2p:p:p:p:p:p:p:p:::BBp::BBBBBKBBB::p:::::p:p::::p::::p:/2.2O2O2O2O2O2O2o:o2:p:o2O2O2O2::::::::p::p::::::p:o2p:p:o:o2p:p::p:p:p:p:p:p:p:o2p:p:p:::::p:p:p:p:::o2p:JSJKJBJBJJB:::::B:BB:p::O2BBBp:/2*O2*::B::p:P2/2Bp:2/222/2P:p:2/22/2/2p::/2p::::BBBp:p:o2p:p:p::p:/2p:p::p::q::::p:p:o:O2P:O2p:p:p:p:P2O2P2p::BB:::::B:BBBB::q:p:q::p:p:p:p::::Bp:p::p:P2P2P2O2P2O2O2O2/2O22/2O2O2O2O2p:p:O2p:::p::O2o2O2o2p::p::/2*.2.*.2N2.*N2.2.*O2.2.*.2N2O2/2O2O2O2O2p:O2p:O2O2o2o2O2p:o2p:B::BBBBBB:::BB:BBBBBB:B:BBBBB:::::::::B:::::B:B:B::BB:B:::::::::o2O2p:o2O2O2o2o2p:p:p::p:p:::o:p:p:p::::::::::::::p::2p::/2:/2*22/2p:*P2:::::::::::::::::::::::p::::::p:::p:p::p::::::p:p:p:::p:p::::p::p:p:p::p:p:p:p:p:p:p:p:p:p:p:p:O2O2/2p:p:p:p:O2/2O2/2:::B:::::B::::::::::BBBB::::BBBB::::::::::JJ:::::p:::BBBB:p::::B:BBBBBBBB:BBBB::Bq:BBBBB:BBBBBBBBBBJSJKKBB:BB:::::BBBBBBBBBBBBBBp::P2BB:::::::::::::::::p::B:p::p:p:2/2))*p::O2/2p:P2*2/2*/2.2)**O2/2*/2))2*p:/22O2O2P2P:O2O2:::BBB:Bp::P2p:B:P22BBp:/20222*/22*222P::O2/2/22/2*/2/2/2/2/2/2/2O2P2P:/2:P2p:::::P2p:P:p:p::p:p::2:*)))*P2*2))/2/2P:O2.*O2/2**.*.*O2/2O2O2/2/2/2/2/2/2O2/2/2p::::p:p:p::p:p:p:P2O2p:p:O2/2O2/2p:p:p:p:O2/2O2O2*2*2/2p:P2p:/22/2O2P2p:p:p:::::B:::::::::::/2O2/2O2p:p:p:p:/2O2/2O2O2P:p2p:::p:p:p:p:p:p:p:p:p:p:p:p:p:p:O2o2O2O2O2o2o2o2O2O2O2O2o2O2o2o2p:p:p:p:p:P2p:P:p:p:p::p:p:::o2o2p:o:o2O2o2o:O2o2O2O2o2o:o2o:p::p::::::::::::::P2p:p:p:p::p::p::p::p::p:p::::::p::::::::BBK:::::p::::::::::::::JJ4SKKBJBJKKJBB::::::::::::p::/2q:/2P2/22/2)02/22*202P2P2P:p:p:p:P:P2222p:P:p::P:P:::*/202p:p:p:p:p::::p::p:/2P:/2:P:p:p:o2p:O2p:p:p:p:p:O2p:O2O2o:O2o:p:p:p::O2O2O2O2p::o:p:p:P:P:P2P2O2P2O2p:02p:P:P2O2O2P2O2O2O2O2o2p:o2p:O2O2P2O2O2p:O2o:p::::::::BB3SB:::B/22/2*22))/2*P22*/2/2)4SBBBBBBBBBBB:BBB:/2P:*))))2*2*)))))P:2P2p:p:P:p:2)))/2p:/2p:p:P2p:p:O2o2O2O2p:p:p:p:p:O2p:p:)))*/2:/2p:)*))O2:O2p:p:p::p:p:p::p::::p:::p::p:o::p:O2o2O2O2Bp:B/2O2/2p:O2p::p2:::::P2p:P2p:::p::p:2/22/2P:2P:222/2/2p:p:p:p:p:p::p:p:::p:p:p:p::::::::::::::p::p::::p::B:BBBBB::p::BB:Bp:p:p:p:p:p:p:O2:p:p:o2O2O2O2O2p:p:p:p:P2/2*2O2o:O2p:O2O2p:p:2O2/2p::p:::::::::::p:p:::p::p:::p::::p:p::::::::::p:::::B::::::::::::p:p:::::p:O2:o2O2O2O2O2::::p:p:::p:p:p:p:p:p:p:p::::::::::p::p:::p:::::::::::::::p::p::::::::p:BBBBBP2:P:BBBB:P:P:22222*2*22*222*2*P20222/22222*O2P:2/2/2/2222/22/2/202/2/2/2P:/2Bp:B*/22P2p:p:p:p:2P:/2p:q:JBJp::q::::B:JJJKBBBBp:q::BBKJS:B::JSBJJJ4SKBBBBSBBBBBBBp::p:p:P:p:p:p:p:p:::o2O2o2O2::::B:::p2p:O2o2::p:p:p:p:p:p:O2O2P2O2p:o:p:O2o:O2p:O2O2O2/2O2O2O2/2O2/2O2/2/2/2O2/2O2p:p:p:p:q:Bq::p:p:p:p:::::BBBBBB::BBBB:::q:O2p:O2p:::p::O2p:O2p:p::p::BB:BB02P:*2/2222222*)))2p:/2:))))*:P2:::p:p:::p::::::p:p:p::)))/2::q::/2::::q::::q::q:q::q::::::::::::::p:p:p:O2p:p:p:p:o:O2O2O2p2O2O2/2O2O2O2o2/2/2/2/2O2o2O2O2:p:::p:P2p:p:::q:q:p:p:p:p:/2O2P:P:O2o2p:p::p::p:p::O2p::B:B::BJBJJ4SSK4S4S::B:::::J:KB::::JKBJKJJBB:B:BB::BBBBB:BBBBB:BBBB:q:::p:q:q:p::::::p::2:/2P22)p:)/2*))))2)*::::/2)2):p::P2**)))))))*)2)))*)/22P:/2.2O2.*.2.* *)O2.*O2.2 *) * **.2**/2O2.2O2***.*.2O2/2/2o2.2o2O2 * ** *p:O2p:O2.**.***.2.*/2/2/2O2/2.2O2O2O2P2p:p:p:/2/2/2/2P:P:P:P:/202/202P2P:0202P:p:P:P:p:p:p:p:P:P:P:02P:P:02P:/2020202P:02P:P:p:P:p:p:P:P::p:0202P:0202P:P:p:p:P:p:P:P:p:02P:p:O2p:O2.2.*O2/2p:p::p:O2O2p:P:O2p:O2P2p:p:p:p:O2P2P:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:q::p::p:p:p:p:p:p::p:p:p:p:p:p:p:p:p:p:p:P::p:P:p:P:p:p:p:p:P:p:p:P:O2p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:P2P:P2O2/2O2O2p:P:p:p:O2/2O2/2::::::::p:p:p:::::::::::::::::::::P2:::p::::p:p:p:p:p:p:p:p:*p:p:p:P:p:)2)/2))))))*:*p:2)***P222****2*22/2/2:P:p:2/22/2P::P:p:2)*2)))))**))2*p:/2/2/2p:::::p::::::::p:p:p:p:P2)p2*O2O2O2/2p:P2/2O2)))*)2*/2p:O2O2O2O2O2/2O2O2/2O2/2/2.2/22O2O2O2O2/2/2O2/2/2/2/2.2/2/2.2*/2.2/2.2.*****2O2p:P:p:p::o:p:O2p:p:p:p:p:::p:p:::p::p:p:p:Bp:BJSO2O2/2O2p:p:p:p:*/2**O2p:/2O2:KBBKJ::Bp:p::p:p:::p:p::q:p:q:q::p:p:q:q:p:p:p:q:p:::::p::::::B:::::::::::::B:BBBBB:BBB::B:BBBB::::p:p::p:p:p:p:p::::::p::p:p:p:p:P:O2/2O2/2p:p:P:P:P2/2P2O2::::::::::::::::p:P::p:P:O2p:P2::::p:p:p:p::BBBBBBBBBJB::::B:p:02P:02/22/2P2P:22*2*:B:BB::::::::::::2p:/2/222):P::P:222)P::2P2::p::)2))p:p:/2p::::p::p:p:p:p:p:P:p:p:P:P:P2))))2p:2P:)))))2)2p:p:p:P:P2O2/2/2P:p:P:P2P2O2p:O2:p::p:::::p::p::::BBp:p:p:p:P::p:p:p:p:q:p:p:p:p:::B::B:::p:p:p:q:::q:B:q:B::p:B:BBKSBBB:::::p:p:p:p::p:p:p:p:p:p:p:p::p:p::p::p:p:p:p:p::p:p:p:p:P::p:p:o2o2/2:p:::o2/2p:O2o2o2O2O2O2o2/2O2/2/2/2/2/2/2/2/2p:p:p:p:p:JBJp:p:p:p::p:p:p:KJBp:::::P:p:P:p:::::O2P2O2O2O2p:))/2/2/2/2))2)P:P:p:P:p::P:p:)/2))*))):::::p::::::p:::p:2/2/2p:O2/2/2/2/2P:P22P:O2/2P2O2:P22*222)))))*/22p:/2P:P:P:P:P:P:p:p:p:p:p:p:p:p:p:p:p::p:O2O2p:O2p:p:O2P2p:p:p:p:O2O2o2O2O2O2O2O2O2O2o:o2O2O2O2O2o2O2O2O2p:p:O2o:/2/2/2/2O2O2O2O2o:O2o:O2O2O2O2.2o2O2O2.*.2.* * *o2p:O2O2::p::O2o2.2/2p::O2p::p:::q:q:::::::::::.2.2.*.*/2O2*/2** * *)*) *p:p:p:p:p::p:p:/2O2*/2P:P2/2O2/2/2/2O2/2/2/2/2O2O2O2O2O2O2O2O2.2.*.*.*)) * ".2.*/2.* * * * *P:O2p:p2o2O2o2o2p:o:p:o2O2o:p:o2O2.*O2.* ** **O2.*O2.2*.*o2B *) *))))) * *.**)**.**.2*.2/2/2/2/2*.*.*.2/2/2/2/2.*.*.2.2.2.*.2.2.2O2BO2O2/2O2/2.2.2)*2/2/2/2))*)/2/2*/2/2/2/2/2/22/2/2/2/2/2/2/2/2/2/2))/22)))2O2/2O2/2O2O2O2/2/2*/2)/2/2/2O2/22O2/2/2o2O2O2O2O2o2O2O2O2O2O2p:o2p:O2O2O2O2O2))P:p:P:P:P:P:O2P:/2/2P2/2/2/2p:p:p:p:p:p:p:p:P:p:P2p:p:p::p:O2O2O2O2/2/2/2/2/2O2O2o2p2p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:p:O2O2O2O2O2p:O2O2O2O2O2/2O2O2O2O2o2O2O2O2O2O2/2/2O2/2O2/2/2/2/2O22/2/2/2/2O2O2O2/2/2/2/2O2O2O2O2O2/2O2O2O2O2O2O2O2O2O2/2O2O2/2O2O2o2O2o2p:p:o:p:o2o2o2o2o2p:p:p:p:p:p:p:p:p:p::p:p:p:p:p:p::p:o:o:O2o2o2p:o:p:O2o2P2p:p:p:p:p::p::p:p:p:p:p::p::p:O2O2p:O2p:p:p:p:p:O2p2o2p:p:p:p:p:o2p:o2O2O2O2O2:BO2p:o2o2O2o2O2O2O2P2p:p:p:p:p:p:p:p:p:p:p:p:p:p2:p:o2o2p:P2P2P2P2P2P2p:P:P:P2/2O2/2BO2P:P2P2O2P2O2O2P2/2P2/2/2/2)*))!*/22/2)))/2P2p:p:p:/2P2O2P2/2)P2/2/2/2/2/2P2P2P2p:)p:P:p:p:p:p::p:P:p:P2p:p:p::p:p::p:p:p:p:p:p:p:p:p:p2p:p:o:p:P2p:p:P2/2p:p:p:p:p:p:p:p:::o:O2p:p2o:p:p2p:O2O2O2O2p:p:O2p:p::p::::::p:p:p:p:::::/2P:p::p:p:::::::::::p:p:p:p:p:Bp:J:p::p:BKBB:::::::B:::::BBB::BB::::B::B::::::::p:P::p:::P2:::::O2O2p:O2O2O2O2O2p:p::p:O2P:p:p:/2:2:::::/2:/2::B:B:::::p:::BBB:::::P:p:P:p:p:q:p:p:p:p:p:p::p::p:p:q:p:p::B:Bp:p:p:p:BBBB:q::q:p:p:p:p::q:::q:p::q:p:p:p:p:::p:/2p:p:q:p:p:2p:/2p::BBBB::B::::B:B::::q::q::::B:q:q::::::::BBB:p:p:p::::BBBBB:q::q:B::B:q:BB::::::B:p::q:q:::::::::::::q:q:q:p:::p:::q:::q:q:q:q::BBBB:BBp:p:p:2p:p:2p:p:P:BP2P:p:2P2BBBBBBBBBBB::B::BBBB::::BB:B::p:/2B:::::::2/2)202/222:P:p:22)220222*2)))p:2O2)))))))))))))))**/2KBS*2*/2JJ:B))*))2)2)))))/2/2:2p:p:BBBBB:B:::B::P21:P:)22/2::p:p:::q::2*22))22p:p:B:p:p:q:p:p:P:p:P:p::P:p:p:P:P:P:P:p:P:p:::::q:p::p:p::p:p::P:p:P:2P:p:p:p::p:p:p:p:::p:p::p:::p::::::p:p:P:p:::p:2p::p::p:p:p:p:p:p:P:P:p:P2P2/2P:p:P2p:/2)p:p:/2P:2/2p::P:p:::::::::::::B:BB:::B:B::BBBB::BB:B::BBBB:::BBBBBBBBBBBBBBBBBBBBBBBBBBBB:BBBB:22)02222)P22p:)2/2p:p:q::q:BBBBB:BBBBBBBBBB::BB::BBBBBBBBBB:B:BBBBB:B::BBBBBBBBBBBBBBBBBBBB:::::B::::p:p:::::BBBBBBBBB::BBB:BBBBBBBBBBBBBBBBBBBBB::q:p:B:B:p:P:p:P:BBBBBBBBBBBBBBBJBBB::::q:BBJJq:::p:P:P:P:P:p:p:p:p:P:p:p:p:p:p:p:p:p:p:p:P:p:P:p:p:p:P2p:O2O2o2O2O2p:p::p:p:p:p:p::p::p:p:p:p:p:p:P2p:P:O2O2o2O2p:p:p:p:p:o2p:p:P2P2p:p:P:P2p:p:p:p:O2O2:p:o2o:/2/2p:O2O2P:p:O2p:p:o:p:p:P:p:p:O2O2O2/2O2O2/2O2O2/2O2/2/2O2/2O2o:p:p:p:p:p:p:p:p:p:P:p:::p:p:p:p:p:P:p:p:P2P:P:P:P:P:/2P2P2O2p::p:p:p:P:p:P:P2P:P2P:p:p:p:p:p:P:p:p:02/2P:)p:p:p:p:P:)/22P:p:2P2p:p:p:p:)/2*/2p:p:p:p:P2/2P2O2/2O2/2/2p:O2p:p:O2/2/2/2P2p:O2P2p:p:O2O22/2**O2P2/2O2p:p:p:P2/2O2/2/2P:O2P2P2/2/2O2/2*).*))/2))/2!/2!!)!)4SKSKBBBBJBB:B::p:/22O222p:2P2P2/2/222022/2BBBB:P2:/2BB:::/20222*222/22/222*22P:2:::BBBB::p:B:BB:B:BB::BBBBB:BBBBBp:::BB:BBB:B:::BBBBBBB:P2BP2:B:Bp:2/2/2:/2p:2*)*2/22*2)22/2)2*2/2B:B/2P:p::B:::)2/2P:/2p:::::p:p::p:P:p:::p:p:p:p:p:p:P:p2o:o:p:p:p:p:BBBB:BBBBB:BBP:P22BP2p:122/2/22222/2/2P:P2:B::/22Bp:p::p:p:::::/2/2p::::::::::::p:::/2p:2/2p:2/2O22/2/2222*O2.2O2.2.2O2.2N2O2N2p:O2.*.2.*N222/2*2**/222*22p:2p:p:O2p:o2.2.2N2.2p:o2p:O2O2.2O2.2.2.2N2.2N2O2.2N2N2.2N2N2.2.2.2.2O2O2O2O2O2O2o2O2N2O2.2O2O2O2O2O2.2N2N2.2N2N2O2O2N2O2O2O2O2O2O2O2N2.2.2.2.2/2.*.2O2.2O2/2.*.*.**222p:/2p::p:/2p::::p:::P2O2P2P2O2/2O2/2p:P:p:p:O2O2P:O2:::::::p::::B::B:p:p:p:p:p:o:p:p:::::p::::/2/2/2/2O2O2O2O2O2O2O2O2O2O2O2O2O2O2O2O2/2.*/2.2O2O2O2O2O2/2/2O2O2O2p:p:O2O2p:O2p:p::p:p:p:p:p:O2O2O2O2O2O2O2O2O2o2P2o:O2O2p:p:O2/2/22/2o2/2O2O2/2P2O2/2O2O2O2o2o2o2O2o2O2O2O2O2o2O2o2O2O2o2o2p:P2p:p:p:o2p:p:p:p:p:p:p:p:p:P2O2O2o:O2p:o:o:p:p2p:O2P2p:p:p:p:O2o:O2o2p::p::O2O2o2o2p::p:p:p:p::p:o::o2p::o:p:o2O2p:O2O2o:o:p:p:p:p:p:p:p:p:p:::p::p:p:o2p:O2O2O2O2o2p:o2p:o2o2o2O2O2P2P2/2O2P2O2O2O2O2P2O2p:p:P2p:P:P2p:P2p:p:p:p::P:p:P:p:p::p::O2O2/2O2p:p:P2p:.*O2O2p:P:p:p::p:p:::p:::::::::B:Jp:p:::::::::::::::p:p::p:O2O2O2O2:p:::O2/2p:/2::BJBBJ3SKKKKKSBB::B::P::P:BBB:BP::2BKBJJBKJKJ:BKBB:::::::::::p:::2P:)p::p:::::p:p:o2O2o2**O2p::p:p:22/22:*2p:p:p::p:::::p:p:p:p:p:p:p:p:::p:p:p:O2O2O2O2p:P2O2O2p:O2p:p:O2O2p2O2:::::p::p:::::::::o:p:p:p:p:p2p:p:::::p:p:::o2p:O2O2p:p:P2P2O2O2O2P:p:p:p:p:p:p:p::p:p:::p::::::::2:/2p:::p:p:P2222p:P:2O2::p::::::O2p:O2P2p::p:::::::::::::::p::p:::p:p:::p::p:p:p:p:p::p:p:::p:::p:::p:p::p:p:p:p:p:::::p::p::::p:p:::::p:p:p:p:p::p:p:p:p:p:p:p::p:::B:::BBB::::BBBBp:p:p:p:p::p:::q::02q::2P::B::B::BB::::::BBBBBB4SJ4SBBBBJBB:4SJJ:Bp::q:::::BBBBBBBBBBBB:BBBBBBB:BBBBBBBBBBBB::/20222))/2)02)))))P:2p:p:p:p:q::B:Bq:q::B:BBB2)2/2p::::2:P::::p:::BBBBBBBB::BBBBBBBBB:B:BBBBBB:B:P:P:p:/2/22/2/2B:::p:BBBBBBB::::BBBBB:B::::::::::::::BBJp:p:q::/2*2)B:BP22*222P2/2p::p:p:p:P2:p:::B:JB02P:22022p:222/2P:B:BB:BB:B::BBB:::::P:P:p::P:P:p:p:JBJB:p:::O2)p:O2)))):P:p:p:*)/2)B::::::::::BB:BB:p:p::p:*p:2::::P:2/22/2:p::BB::B:::::BBBBBB::BBBBBBBBBB:::BBBBBBKS4SB:JBBBB:B:/2p::P:p:O2/2**):BBB:BBBB::BB::B:p::p:*2/22:p::/222))::::::p::P::P2:P:/2/2)P:2P2**)**2))))**/2q:p:p:P:p:p:O2p:P2O2O2O2O2O2O2p:::::BB::::::::::P2O2P2p:p:p:p::p:p:p::::B::::::BBBBBBBBKS4SBBBBBBBB::::BBB:::B::K:BBBBBBBBB:BBBB:B:JBKB:::::B:02p:B/2Bp:/2/22p:BP2:p::::BBBB::::BB:BBKBBKKBBBBBBBBBB::p:p::B::p:p:p:p:::p::BBBB:B:::::p:::p:2BBBBBp::P:BBBB:)P22*))*/2:2:*22)2p:/2p:Bp:P:2/22))*)))))/2)*/2)/2P2p:P:p:2/22p:p:O2p:O2SSBBBBB:BBBB:/2p:2P:22*)**p:*)2*/2J:J/2p::P2/222/2B:::Bp:::2P:P2:q:Bp:p:p:p:p:P:P:P2P:02BBKKBP:KBSK3SKKBKJp::::p:p:p:):::p:/2)/2)JJp:p:JB/2/2P:p:P:P22)O2/2:22)))))))/2/2*2O2/2:::p:p:p:P:P:p:P2P:P2P2P2O2/2p:P:p:P2P:p:P2P:p:P2P:P2O2O2O2O2O2/2O2/2/2/2/2/2/22/22*/2/2/2P:P2O2P2p:O2p:O2/2p:O2p:p:O2p:o2P2P2p:P:O2O2P2O2p:p:o2p:o2O2p:O2O2p:O2o:p:O2o:O2O2O2O2O2o:O2o2o2O2o2O2O2o:O2O2o:O2O2O2O2O2o2O2o:O2o2O2O2O2O2O2O2o:O2o2o2/2N2O2N2)/2*2::::)2))/2:2:::::BBBB::::::::*2)22P22P22)**2P22/2::::::::::::::p::JBBBBB:B:B::BBBBB:B:p:2P:)BBB:P2*02*:::::BBB::p::BB:BBP::/2222/2P:p::BP::B:**)2*/2)2)))))O:2p:p:p:p:p:p:p:p:p:p:p:p:p:p:P:p:P2)2)/2p:p:p:o2*o2O2O2O2O2O2O2p::p::p:p:::p::P2:BB:Bp::p::::B::JBJKBKBB:B::::::::::::p:BJ::B:BBBBBBBBBB:::::::p:BBBBBP2:22))))/2)/2)22P2P2P2p:P:O2P2/202p:p:p::/2P:/2p:p::::2P:p:p:P:P:P:P:p:p::p:p:P:p:P:P2p:P:p:p::::P:p:P2p:p:p:p:p::p:::p:p:p:p:::::p:p::p:p::p2p:::::p:p:p:p:::p::::p:::p:p:p:p::::p:p:p:p:p:p:P:P:p:p:p:p:P:P2p:O2p:p:P:p::p:/22p:P:P:p:2/22*/2P:)*P:p:p:p:p:p:p:p:p:p:p:p:p:p:p::/2)2))))))))))22P:P:p:P:p:p:p:p:p:P:p:p::p:p:p:p:::p::p:p:p:p:p::p:p:p:O2p:O2O2O2O2O2p:p:p:p:O2O2O2O2O2o2O2p:p:p:p:p:O2O2O2/2p:O2p:O2O2.2/2.2O2O2O2O2o2p:O2p:/2O2/2O2O2p:P2P:O2O2/2O2/2/2O2/2)/2)/2/2O2/2O2p::p:::B::p::p::BB:B)O2*/2o2P:O2P2/2O2/2/2O2p:O2o:p::p::BBBBp::p:p:BB::BB:BBBBBBBBBBBB:BBBp:02221:/2/222)))BBBq:B/2P:02B:::::::)2202)/2P::B:B::::B/2/2O2.2O2o2/2O2O2*O2.2.2O2.*.*p:p:O2p:::p::O2O2.2/2p:p:p:p:/2.2.2.*.*.**.*.**.* * ** *.*.2O2.2N2o2p:o2p:.*.2**O2p:.2o2:::q::::::::::B:BBBB:::q::BBBB:::::BBB::B::::B:q:::BBBBBBBB:::BBBBB)))))p:02P:)12P:P:p:q::p::p::::::p::::::::q:q::::::::::::::::::::::::p::p:p:p:::p:P::p:/2.2/2/2:p::p:O2/2p:/2/2O2/2/2O2P:O2P2*/2**O2P:O2p:::p:p:p:O2p:p:p:::::p:::*)/2)/2P2*P2P2*p:/2)/2/2P:::BB::::B:BB::::p:p:p:::::B:::::BBBB:BB::::BB::::::::::BBBBBBBBBBBB::BB::B:BBBBBBBB:p:::p::::BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBO2O2O2O2/2/2O2/2O2O2O2/2/2/2/2O2/2/2/2O2.**.2*/2/2O2/2.2*.2*O2/2/2/2/2O2/2O2*****/2**/2/2/2/2.2*.2.*/2/2.2.2.2.2.2.2)*)*/2O2.2O2****.2O2*/2p::p::::::p::P:p::::p:*****/2*/2.2*.*/2*/2O2O2O2p:O2P:p:p:p:p:O2P:O2P:P:p:/2P:**.2*****N2.*O2.**.**.*.*.*.*.*.*.*.**.*.*.*.*.*.*.*.2O2.*O2.2****O2/2O2O2.**/2.2.*.*.2N2.2O2:BN2p:O2:JKJJ.*O2.*O2O2O2p:p:.2O2O2O2p:p:p:p:P2P:p:p:*)p:/2p:p:p:p:p:P:p:P2O2P2JJp:::p:JJJBJp:J:p:p:p:p:P2O2P:p:p:p:O:P:p:p:O2O2:::::::::::::::::/2:)))))p:2P:))2)):::::p::p:p::p:p::22)2))))))))))))))))))**2)22))))/2)/2P2P2P2O2O2O2/2/2P:P2p:P2/2O2O2O2)*)*2P:P:p:*/2/2P:p:p:P:p:p:P:p:P:P2/2O2/2P2P20202/2/2P:P:22))2)))P2O2O2O2P2p:O2O2))/2*)/2/2p:p:p:P2p:p:p:p:O2O2O2p:O2O2O2O2O2/2/2))O2.2.*.*O2O2/2.2O2O2/2O2.22*2/2/2/2O2P:p:P:P2P:p:O2O2p:P2O2O2O2/2/2/2P2P2P2P:P:P:p:p:P2P:P2P:p:p:p:p:O2O2O2O2O2/2O2O2O2O2O2O2O2O2O2O2p:P2P2P:P:p:p::P2p:P2p::J:JO2/2O2/2/2/2/2O2/2*O2*/2O2/2P:o2p:p:p:JJ:p:p:p:p:p:p:p:p:p:O2O2p:O2O2p:p:p::p::::p:p:p::p::p:p:p::p:p:p:p:p:::p:p:JBp:p::P2p:p:P:p:p:p:p:P:p:p:O2O2O2/2O2O2/2*O2O2O2O2O2).2.*P:P:p:P2p:p:P2O2p:P2p:p:O2/2O2)o2O2o2/2*)))*)))))))::::p:p:p:p:::::p:p:::p:p:p:p:p:p:P:O2p:p:p:p:p:O2o:O2::::::::B:BB::::p:p::p:p:p:p:p::p:::::::p:/22)))*)/2/2o2o22/2o2o:))***.*O2o2O2o2o:p:o:O2o:o2p:p:p::p:p:::::q::BJJKp:p:::o:o2p:p:BB4SK::B:)!!!)*!*!!!!!.2!.**/2*/2/2/2/2/2*/2.*/2/2O2O2O2)!!)**.2.2).**O2/2.*O2/2.2/2.2/2/2/22/2/2/2/2/2/2P2P2p:O2O2O2/2O2O2O2P2O2P2/2P2p::p::p:p:p:p:p:B:p:::::p:p:::P2P2P2P:P:p:P:p:P:p:p:p:P:P:p:P:::::::::p::p::::::o2O2O2O2O2O2O2O2O2O2o2o2o2O2o2O2O2O2O2p:p:p:p:p:p:p:p::::::o:p:p:p:o2o2o2p:p:p::p:p:p:p:p:p:p:p:p:::::p:p:p:p::::::p:p:p:p:p:p:P::p::p:P:P:P:02p:p:P:p:::p:p:02P:0202p::p:p::p::p:p:p:p:q:::::BJJJP:p::p::::p:KKKK:/2:/2O2O2/2/2/2O2O2O2/2O2/2/2O2/2/2O2/2O2O2O2O2O2P2P:P2p:P:p:p:p:p:p:/2/22/2/2P202P2/202P:P:P:P:P:p:p:p:P:p:p:p:p:P:P:P:p:P:P:P:P:P:p:p:p:p::p:p:p:p:p:P:p:p:p:p:p:p:p:p:p:p:p:p:P:p:p:p:p:p:p:p:p:P2P:P:P:p:p:p::P:p:p:p:p::p::p:p:p:p:p::::p:p:p:p:::p::p:P:p:P:P:p:P:p:P:p:p:p:P:p:p:p:p:p:p:p:P:p:p:P:p:p:p:p:p:0:p:P:::B:::B:KKJJKBB::p:::q:P::q:BBBB:BBBp:p:P:P:p:p:p:p:P:P:P:p:p:p:q::p:p:p:p:p::p:Bp:p:q::p:JBKp::q::::BBBBBBB::p:BB/2/2BJ/2B2222/2:2P2O2O2P2P:O2P:P2P:p:p:p:p:P:P:P:P:p:p:p:p:::::p::p:p:::::p:p:::p:p:p:p::::::::::p:::p:Bp::::p:O2p:p:p:p::::::B:B::BB:B:B:::P:::P2::p::/222))JJB::B::p:p:p:::BB:B/2:/2**22Bp::p:2222:p:JB::::JJJJ:::p:P:/22)O2p:*p:/2)p:)/2O2)/2Bp::p:p:p:p:p::::p:p:p:p:p:p:*p:/2))))O2O2O2*!)!!p::p:p:::::p:p:p::p:p:p:p::::p:2/22/2:/2O2*2/22p:p:p:/2P2p:O2O2)*O2).2)O2O2.2)))P2P::p:p:O2o2/2O2p:p:p:p:Bp:p:p:p::p:q:p:p:::p:p::p::B::BBB:p:q:::::B:p:p:p:p:p::p:p::p:p::p:p:p:P:::p::BB::p:p:P:O2p:O22)B:q:::p::/2q::::P:*O2222)22/2*/2*)))*O2)/2Bp:p:22)))*)))))))))!!)/2.22)*O2/2/2*/2/2:O2:/2/2*2)p:p:p:p:/2)p:p:*)))))))))/2O2))/2*p:p:p:p:P2p:p:O22/2*)O2/2))o2O2O2.22**)**))))))))2.2*.2/2*2***)))).2/2)*O2O2/2O2)*)).2O2.*.***))))))))))))))))))****)))) ****:p:p:P2p:p:p:p:P:p:P2p:p:p:p:p:O2!O2!!!/2!*)!!!!O2p:/2O2:o2o:/22/2*2*)/2O2*)).2!.2*O2)/2O2/2.2.2.2.*!.* * *.*.**.2)***.*.2.2O2/2O2O2O2p:p:p::O2O2O2o2p:p::p:.*.2.2.2O2O2/2O2.*.*.**.2O2.*/2O2p:p:p:p::::o:p:O2p:p:p::p:/2/2O2O2O2O2O2/2.2O2.*.2O2/2O2O2O2/2O2.2.*.*.*.*O2.2O2.2.*.*.*.*.*.*.2.2.2/2.2.2.*O2.2O2O2.2/2O2.*.*.2.*.**.**.2.*.2.2*** *.**.**.*.2.*.2.***.*.2.2*.*O2O2O2O2p:p:p:p:O2o:O2O2o2p:p:p: * * * **.*.*.* * * *.*.*.2N2O2O2O2O2O2p:p:p2p:O2O2O2O2O2p:p:p:BBB::::::::::p::p:::::::::p::p:p::::::::::p:p:p:p:p:p:p:p:p:p:p:p:p:p:p::::Bp:p:p:p::B::::::JK:B::::::::SKB:::B::BB:BBBB::BB:B:BBBBBB::BB::B:::q:B::::2P2)P:p:p:p:::::p:p:p:p:::p::::::::::::::::::p:p:p:p:::p::p:p:p:p::::::::::B::::B::::p:BBBB::B::Bp:02:2p:2:020221*))2222)202p:Bp:BBP:P:JKBBp::JJ:BBBKKq:p:Bp:JJBBBp::p::p:::p:p:/2p:BO2B2)P2)O2p::p::::::p::::::::P:222)p:*p:2)))2p:P2p:::p::BBB:p::p::::::::::BJ:B:::B:::BJJBB:p:::::BBB:::BBBBBBBB::::BB::BB:::::B::::::::1/2/2p:p::::p::q:::::::::::::B::p:B:BJBp::p:p:p:p:p:p:p:/2p:)/2p:2p:p:J:BB:p:p:p::p:::p::p::::B:::02BBB::2q:/2p:p:02p:p:P:p:p:2p:/2p:p:P2p:p::B::p:02q:2p::p:p::2:21/2)2p:p:p:p:)2)*p:p:p::p::p:B:BJKp:Bp:JSKKJBBJBp:2P22JBB:P2222::p:p:::P:p:P:/2p::22/22:2222222222/2/202P:J20222p::::2222::p:::::::::p::p::P2p:/22)2P:P::2):P:B:JJ::Jp:))02P:22p:P:q:q:P:p::p:p:p:::BBBBBBBBBBBBBBBBBBKKKKBBBBJKJSBBBBB:BBBBBBBBBBBBBBBJBBBBBBBBBBJKJSKBSJ4S4S4SKSJBBp:P:p:p:p:P:p:P2::::p:P2p:/2KBB:::::B:BB:::::p::p:P:)O2):p:p:/2*)))/2)22/2:O2:2/22p:p:p:p:p:p:::::::p:p::p::::::p:p:P:p:p:p:p::p:O2P2/2O2o2/22p::p::::::O2p:)/2p:p:p:p:p::p::p:/2p:2p:p:p::P:2P222/2)O2p:p:O2O2)/2*O2O2O2O2N2::p:p:P2)/2*p:p:p:22/2)/22O2/2O2.2.2.2.**o22O2N2*.2*)/2))/2/2/2O2!!))*o2/2O2))O2*2/2.2)o2O2O2O2O2)O2.*))))O2o2/2o2**2/2O2o2p:p:O2O2o2O2/2.*O2.2o2O2p:p:O2O2o:O2**)*)*).2!) *).*.*) *O2.2.2.*.*.*.2N2.*O2.*o2o2O2B:* *.* *) * * *.*.*.2.* **.*O2O2B:KJ:B:BJBB::::/2)p:2))2):/2:2)))))))))))))*)2).*/2:p:2/2*))*)/222)*2)/2*/2O2/2:BO2:P2O2p:O2o2B.2O2))/2o2))p:.*:BBB::BB))***.*.*.2.2.*:O2N2.2O2.2BBBBBBB:B::p:Bp:O2O2:O2:O2O2O2O2O2O2O2O2o2O2O2O2O2*)/2/2)P22p:2/2p:p:O2p:p:o2p:O2O2O2N2.2O2N2O2O2O2O2O2O2O2O2p:p:p::p:o2BBBJBJKJJKO2O2:O2O2O2O2O2J:JBO2O2O2O2.2/2/2/2O2O2O2O2.2/2O2/2/2O2/2O2O2p2O2p:o2O2P2p:p:p:p:p:p:p:p:p:O2/2O2/2O2O2O2O2O2O2O2O2O2O2O2O2O2p:O2p:p:p:p:p:O2O2O2O2p:p:p:p:.2.2*.*.2/2.2.2.*).2)).2!).2.2.2N2.**.2.*.2O2.2O2O2O2O2O2O2.*O2/2!!*)O2O2O2O2*!)).*O2).2O2O2O2O2)*)/2O2O2O2O2.*.2N2O2O2o:o2p:O2O2O2O2p:p:o:p:o2p:p:p:p:p:p:p:p:p:p:P:P:p:p:p:O2O2O2/2O2O2/2/2O2/2O2p:p:BBJO2p:O2P:p:p:p:p:p:p:JB::::p:/2p:/2))))p:2p:*)))))/2)*O2O2O2P2!/2)/2O2p:P2p:p:)P2)))))/2)/2))/2)p:)O22p:p:p:p:p:P:p:p:p:p:p:p:p:P:Bp:BJJJJp:Bp::JJ:BKJJB:q::q:JBB::P2p:2p::p::::::::p::::::::::02222:02P:222)2BJBBJJJBO2:O2o2Bp:p:p:Jp:Bp:O2O2O2/2p:p:p:p:P2O2p:p:O2O2*.2o2o2O2o2*.**.*O2O2N2O2P2P:p:o2p:p:p:p:p:O2o:o:O2O2o2*O2p:O2p:O2O2o:*P2p:p:O2*)))O2O2)/2p:p:p:2))))22)p:p:)/2))))))))))))))))))P:)O2)))))p:/2p:* *.2.*.*.2.*.2O2O2p:p:O2.2o2N2O2o2N2.2o2)/2).*.2.*.*!!*!:O2:/2/2O2**:/2:2)/2)).*.*N2.*****.2 *.2.*****))))))))))!))))O2)**/2p::p::O2::::B:B*/2*2O2P:/2P:***/2/2p:/2p:p::p::::::::::::B:))22/2p:p:p:O2p::::p:::p:p:p:p::p:::p:p:p:q::::::p::p:p:p::::::B:::B:p::p:p::p:p::p::p:P2:/2/2p:p::p:p:p:22:::p:P2P:p:p:22)2*P:P2p:/2P:p:P2P:P:O2P2:p:p:p::p:p:p::p:p:p:p:p:p:p:p:P2p:P2P2P2P2P2p:p:p:p:P2P2p:p:BJKSKJ4SK4S4SKKKJSJB:B:2/2P:)B::::*:2BJ::B::B:::::::B::B:p:2:*:::p:P:2/22P2p:2p:p:p:p:p:/2O2/22p:p:o2o2P:P:p:p:p:p:p:p:p:p:p2p:p::p:p:/2***O2o2O2O2)/2*p:o2O2o:O2o2p:o2p:p:p:p:p:O2p:O2p:p:p:p:p: \ No newline at end of file diff --git a/model/testscene/texture/texRock.data.h b/model/testscene/texture/texRock.data.h new file mode 100644 index 0000000..258b713 --- /dev/null +++ b/model/testscene/texture/texRock.data.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_model_testscene_texture_texRock_data_start __asm("_binary_model_testscene_texture_texRock_data_start"); +extern uint32_t _binary_model_testscene_texture_texRock_data_end __asm("_binary_model_testscene_texture_texRock_data_end"); +extern uint32_t _binary_model_testscene_texture_texRock_data_size __asm("_binary_model_testscene_texture_texRock_data_size"); + +#ifdef __cplusplus +} +#endif diff --git a/model/testscene/texture/texWater.data b/model/testscene/texture/texWater.data new file mode 100644 index 0000000..71bda2f --- /dev/null +++ b/model/testscene/texture/texWater.data @@ -0,0 +1,8192 @@ +t +T +T +t +t +T +t +t +t +t +t +t +t +t +t +t +T +t +T +T +t +t +T +T +t +t +t +t +T +T +t +T + +t +t + +t +t +T +T +t +T +t +t +t +t +t + +t +t +t +t +T +t +t +T +T +T +T +t +T +4 +T +T +T +t +T +T +T +t +t +T +T +4 +T +T +T +T +T +t +t +t +t +t +t + +t + +t +t + +t +t +t +t + +t + + + + + + +t +t +t +t +t + +t +T +T + +t +T +4 +4 +4 +4 +T +T +4 +T +T +T +T +T +T +T +T +T +T +T +T +T +4 +t +T +T +T +T +T +4 +4 +4 +T + +t + +t +t +t +t +t + + +t +t + +t +t +t +T +t +T +t +t +t +T +T +T +T +T +t +T +t +4 +4 +4 +T +4 +t +t +4 +T +T + +t +t +t +t +T + +T +T +T +t +t +T +t +t +t +t +T +t +t + + +t +t +T +t +t +t + +t +t +t +t +t +t + + + +t +t + + + + +t +t +t + + +t +t +t +t +t +t +T + +t +t +t +t + +t +t +T +t +T +t +t +t +t +t +t + +t +T +T +T +T +T +t +t +T +t +T +t +t +t +t +t +T +T + +t +t +t + +t + + +t + + + + + + + +t +t + +t + +t +66t + +t + +t +t +t +t + +t + +t +t +t + + + +t + + + + + +t +t +t +t +T + +t +t +t +T +t +t +t +t +t +T +t + +t +t +t + +t +t +t +t +t +t +T +T +T +t +t +t +t +t +T +t +t +T +t +T +t + +t +t +t +T +T +t +t +T +t +t +t +t + +T +t +t +t +t + + +t +t + +t +t +t +t +t + +T +T +t +t +t +t +t +T +t +t +T +t +T +t +t +t + +t +t +t +t +t + + + + +T +T + +T +T + +t +t + +t +T +t +T +t +t + +t +t + +t +t +t + + +t +t + +t +t +t + + + + +t +T +t +t + + + +t + + +t + +t + +t +t + + + + +t +t +t +T +T +T +T +t +t + + +t +t +t +t + + + +t +t +t +t + +t + +t +t +t +T +t +T + + + + + + + +T +t +t +t + + + + + + + +V66#w#66VV#vt + +t + +t +t +t + +t +t + +t + +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t + +t +t +t +t +t +t + +t +t +t + +t + +t +T +t +t +t +t +t +t +t + +t +t + +t +t +t +T +t + +t +t +t +t +t + +t +T +t +T +t +t +T +t +t + +t +t +T +t +T +t +t +t +t + +t +t + + +T +T +t +t +T +T +T +t +t +t + + +t +t + +t +t + +t +t + +t +t +t +t +t + +t + + +t +t +t + +t +t +T +t + + +t +t + + +t +t + +t + +t +t + +t +t +t +t +t +t +t +t +T +t +T +T + +t + + +t + + +66666VV6VVV#VVVVV6##66##66VV6V6w##6t +t + + +t +t + +t + +t + + + +t +t +t +t +T +t +t +T +t +t + + +t +t +t +T +t +t +t +t +t + +t +t +t + +t +t +t +t +T +t +t +t + +t +T +T +t +t +t +t +t +t +T +T +t +t +t +t +t +t +t +t + + +t +t +t +t +t +t +t +t +t +t +t +t +t +t + +t +t +t +t +t +t +t +t +t +t +tt + +t +t + + +t +t +t +t +t +t +t +t +T +t +t +t +t +t +t +t +t +T +t +t +T +t +T +t +t +t +t +t +T +t +T +t +t +t +t + +t +t + + +t +T +t +T +T +t +T +T +T +T +T +T + +t +t +t +T +T +t +t +t +t +T +T +t +t +t +t +t +t + +t +T +t +t +t +t +t +t +T +t +T +t +t + +t +T +t +t +t +t +T +T + +t +t +t +T +t +t +T +T +4 +t +T +t +t + +t + + +t +t +T +t +t +t +t +T +T +T +4 +T +t +t +t +t +t +T +T +t +t +T +T +4 +T +t +T +T +T +t +T +T +4 +T +T +t +T +T +4 +T + + +T +t + +t +t +t + +T +T +t +T +T +t +T +t +t +t + +T +t +t +t + +t +t +t +t + + + +t + +t +t +t +t + +t + + +6 +t +t +T +T +t +t +t +t +t +T + +t +t +t +t +t +t +T +T +T +4 +t +t +T +t +T +T +t +t +t +t +t +t + +t + + +t +t +t +t +t +T +T +T +T +t +t +t +T +T +4 +T +T +4 +T +T +4 +T +t +t +t +t +t +t + +t + +t +t +t +T +t +T +t +t +T +4 +T +4 +t +t +T +T +T +4 +t +T +t +t + +t +t + +t +T +t +t +t +t +t +T +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +3 +3 +4 +4 +4 +4 +4 +4 +4 +4 +4 +T +4 +4 +4 +T + +T +3 +T +T + + +T +T +t +t + +t +4 +T +T +T +4 + +3 +t +T +T +T +4 +3 +4 +4 +t +t +t +t +T +t +T +t +t +t + +T +T +T +T +T +t +T +T +T +T +t +t +T +t +t + +t +T +t +T +t +t +T +T +T +T +T +T +T +T +T +4 +t +t +T +T +t +t +t +T +T +4 +4 +T +T +4 +4 + +t + +t + + +t +t + +t + +t + +T +t +4 +3 +t +t +4 +4 + + +t +T +4 +4 +T +t +4 +T +4 +3 +4 + +3 +3 + + + + +4 +4 +3 +4 +4 +4 +4 +4 +4 + +4 +4 +4 + +3 + + + +4 + +4 +T +T +T +T + +4 +4 +4 +T +4 +4 +4 +4 + +4 + + + + +3 +3 + +4 + + + +4 + + + + +4 + +T +4 +4 +4 +4 +4 +4 +T +4 +T +T +T +T +T +4 +T +4 +4 +4 +4 +4 + +3 + + +3 +4 +3 +4 +t +t +4 +T +t +T +T +T +4 +4 + +4 +4 +4 +4 +t +t +t +t + +t + +t +T +t +t +T + +t + +t + +t +t +t +t +t +t +t +T +t +t +t +t +t +t +t + + +t +T + + + +t + +t +t +t +T +t +t +t +t +t +t + +t +t +t + +t + + + +t +t +t +t +t +t + +t + + +t +t +t +T +T +T +t +t +t +t + +t +t +t +t + + + +t +T + +t +t + +t +t + +t + +t +t + +t +6666vV66V666V666V6VVvV666VVV6t +T + + +t + + +t + +t + +t +t +t +t +T +t +t +T +t +T +t +t + + + +t +t +t +t + +T +4 +4 +4 +T +4 +4 +4 +4 +4 +4 +T +4 +T +T +4 +4 +T +4 +T +T +T +t +T +T +T +T +T +T +t +T +T +T +T +4 +T +T +T +4 +4 +4 + + + +T +T +t +T +T +T +T +T +4 +4 + +T +4 + +T +T +T +T +T +T +T +T +4 +T +T +T +T +T +T +T +T +T +t +t +T +T +t + +t +t +T +T +t +t + +T +t +T +T +T +T +T +3 + + + +3 +4 + +t +T +T +4 +T +T +t +T +T +4 +3 +T +3 +3 +4 +4 +T +66VvV6V6VV6VVVvVvv#v6v666Vvw#V#w####6666V6#v###v666V6t +t +t + +t +t +t +t +t +T +t +t +t +T +t +T +T + + +t +t +6666 +t +66 + +66666 +t + + +t +t + +tt +t +t +T + +t +t +T + +t +t +t +t +t + +t + +t +T +t +T +t +t +t +T +4 +6V6w#6666V6VVVw666#V66666 +t +T +t +T +3 +4 +4 +4 +t +T +t +t +4 +4 +T +T + +t + +t +t +t +t + +t + +t +t +t +T +T +t +T +T +T +t +T +T +T +T +T +T +T +t +T +T +T +T +T +T +4 +T +4 +4 +T +4 +T +4 +4 +4 +t +t +T +t +T +T +t +T +T +T +T +T +t +T +4 +4 +T +4 +T +4 +T +4 +3 + +3 + +4 + + +3 + + +4 +4 +4 +T +T +T +T +T +4 +3 +4 +3 + + +4 + +3 + + + + +4 + + + + +3 + + + +T +T +T +t +T +4 +T +T +T +T +t +t +T +T +t +t +4 +3 +4 +4 +4 +3 +4 +4 +T +4 +T +T +T +T +T +T + + +t +t +t +t +t + +t +t +t +T +t +T +T +4 +T +t +4 +T +4 +4 +4 +4 +4 +4 +4 +3 + +4 +T +T +T +T +4 +4 +4 +4 + + + +T +T +T +t +T +4 + +T +4 +T +4 +T +t +t +t +t + +T +T + +T +t +T +T +T +4 +4 +4 + + +66 +t +t + +t +t +t +T +t + + + +t + +T +t +t +t +t +t +t +T +T +T +t +T +t +t + +t + +T + +t +T +4 +t +T +T +T +4 +T +t +w#Vvv#+V6666VVVv666666 +Vt +4 +t +t +4 +T +t +t +6 +t +t +T + +T +T +t +T +T +4 +4 +3 +4 +4 +4 +T +4 +4 +4 +3 +3 + +T +T +4 +4 +T +T +4 +4 +4 + +T +4 +4 +4 +T +t +4 +t +4 +T +T +T +T +4 +4 +3 + +t +t +T +4 +T +4 + +4 +4 +T +T +T +t +t +3 +4 +3 +4 +t +T +t +t +4 +t +4 +4 +t +T +T +4 +4 + +4 +T +4 +t +t +4 +4 +3 +3 + +3 +T +4 + + +t +t +T +T +T +T +T +T +t +t +T +T + + +4 +4 +4 +3 +T +4 +3 +T +3 +t +t +T +T + + +t +t +t +t +t +4 +4 + +t +3 + +4 +4 + +4 +4 +t +4 +4 +t +T + +4 +4 + + + +4 +4 +T +T +3 + +T +4 +4 +T +4 +T + + +t +t +t +t + + +T +T + + + + +t +T +T +T +t +4 +T +3 + + +4 + +4 +3 + + + + + +4 +4 +3 + +4 +4 +3 + + + + + +3 +4 + +4 +4 +T +T +4 + + + + +3 + + + + +3 +3 +3 + + + + + + +4 +4 + +4 +4 +t +T + + +4 +4 +4 +3 +3 + +4 + +4 + + +4 +T +T +T +T +t +t +t +T +T +t +T + + + + +4 + + + +4 + +3 + + +3 +4 +4 +3 + +T +T + +T +t +t +T +t +T +4 +T +4 +4 +4 +4 +t +t +3 +3 + +t +T +T +T +t +T +t + + + +4 +4 +4 +T +3 +4 +4 +4 +4 +4 +4 +T +4 +4 +T +T +4 +T +3 +4 +4 +4 +4 +4 + + +4 +3 + + +4 +4 +4 +4 + + +4 +4 +4 + +4 +T +4 +4 +T +T +T +T +4 +4 +4 +4 +4 +T +4 +4 +T +T +T +T +T +T +T +T +T +T +t +t +t + +4 +T + +4 +4 +T +T +t + +4 +4 +T + +T +t +T +t +t +t +t + + + + +4 +4 +4 +4 + + +4 +3 +4 +4 +4 +4 +4 +4 +4 +4 +4 + +3 + +t + + +t + +t +t + +t +4 +4 +t +t +t +T + +T +T +t +t +4 +4 +4 +4 +T +t +T +t +3 +4 +4 +4 +T +t +T +T +t +t +t + +t +t +T +T +t +t +4 +T +t +t +T +T +t +t +t +t +t + +t +t +T +t + +t +t +4 + + +T +t +4 +4 +4 +3 +4 + + +T +T +t + +t + +3 +3 +4 +3 +T +t +4 +T + + + +4 + +4 + +4 + +4 + +4 + + +3 + + +t +T +T +t +T +t +T +4 +4 +T +4 +4 +4 +T +T +4 +T +t +t +T +t +4 +4 +4 +4 +4 +T +T +T + + + + + +3 + + + + +4 + + +3 +3 +4 +4 +4 +4 +4 +3 + + +3 +4 +4 +T +T +3 +t +4 +t +T +T +4 +4 + +4 +34 +T +T +t +4 +T +T + +4 + +3 +3 +4 +4 +3 +3 +4 +4 + + +4 +4 +3 +T +T + + +T +4 +T +T +T +T +T +T +t +T +T +T +4 +T +t +t +T +t +T +T +T +T +T +T +t +t +T +T +T +4 +T +t +4 +T + +t +t +T +t +t +t +t +t +4 +4 +t +t +T +T + +t +t +t +T +T +t +T +T +T +4 +4 + + +4 +4 + + +3 +3 + +4 +4 +T +T +T +T +T +4 +4 +T + +T +4 + +t +t +t +t +t +4 +T +T +T + +t +t +t +t + + + + +4 +T +4 +T +T +T +T +T +4 +4 +3 +4 +T +t +T +T +t + +t +t +t +t +t +t +t +t +T +T +t + +t +t +4 + + +3 +4 + + +4 +4 +T +4 +4 +4 +4 +4 +3 +4 +4 +4 +T +4 +4 +4 +4 +T +T +T +T +T +T +t +t +T +t +t +T +T +t +t +t +t +t +t +t +T +t +T +T +T +T +T +t +t +T +T +t +T +T +T +T +t +T +T +3 +4 +3 +4 +T +T +4 +T +T +T +t +T +t +T +T +t +t +T +T +T +t +T +t +T +T +t +t +t + +t +T +T +t +t +t +t +t +t +t +T +T +t +t +t +t + + + + + +t +t +t +6666 +t +t + + +t +t +t +t +t +t +t +t +t + +t + + +t + +t +t + + +t +666vVv6VV6#vvV66t + + +6V6V6VwwVV6666t +t +t + +T +T +t +4 +4 +T +3 +4 +t +t +T +T +T +4 +T +T +t +T +t +T +4 +t +T +T +T +t +t +t +tt +t +t +T +t +t +T +t +t +t +t +t +T +4 +t +T +T +t +T +t +t +t +t +T +T +3 +t + +T +T +T +4 +4 +T +t +4 +4 +T +4 +3 + +t +t +t +4 +4 +T +4 +t +t + +t +T + +t +4 +4 +T +T +3 +T +t +t +4 +t +T +T +T +t +T +T + +t +t +t +T +t +t + + +t + +T +t +T +t +T +T +T +T +t + +t +t +T +T +t +t +t +t +T +t +T +4 + +t +4 +t +t +4 +4 +T +T +T +t +t +T + +t +t +t +T +t +T +4 +4 +T +T +3 +4 +T +T +4 +T +T +t +t +t +6wv####66w6##6V#vV66VvVV66VVVVV6VV6v6666V66t +T +T + +t +t +t +T +66V6t + +66t +t +T + + +T +t + +t +t + +t +t +t +t +t +t +t +t + +t +t + +t +T +4 +t +t +t +t +t +T +T +t +t +T +4 +4 +4 +4 + + +t +tt +t +t +t +t +t +t +t +t +t +t +t + +t +t +t +t +t +4 +T +4 +t +t +T +T +T +T +T +4 +t +t +T +T +T +4 +T +T +4 +4 +4 +T +t +t +4 +T +t +4 +t +T +4 +4 +4 +4 +4 +t +T +t + +T +4 + +4 + + +t +T +t +T +T +4 +4 + +4 +3 +t +t +T +T +T +T +T +t +T +T +T +4 + +t +T +T +4 +4 +T +4 +T +T +T +T +T +4 +T +t +t +t +t +3 +T + +t +t +T +4 +T +T +4 +T +T +4 + +t + +t +T +t +T +4 +4 +t + +3 + + +t +T +t +T +4 +T +t +4 +4 +T +t + +4 +T +4 + +4 +4 +4 +4 + +T +T +4 +4 +t +t +4 +4 +T +4 +4 +4 +4 +T +T +t +T +4 +4 +4 +4 +4 +4 +4 +3 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +T +4 +4 +4 +4 +4 + +4 + + +4 +4 +4 +4 +4 +T +4 +4 +T +4 +4 +4 + +3 +T +T +3 +4 +4 +4 +4 +4 +4 +4 +3 +3 +T +T +4 +4 +4 +T +3 +4 +T +T +4 +4 +4 +4 +4 +4 +T +T +4 +4 + +4 + + +3 + +T +4 +4 +T +4 + +T +4 +3 +4 +3 +4 +T +T +T +4 +T +t +T +T +T +T +T +3 +t +T + +t +4 +3 +4 +4 +4 +T + +4 +T +t +T +t +3 +T +4 +T +T + +t +t +t +t +t +t +T +T +t +t +t +t +t + +t +t +T +T +t +T +4 +T +T +t +t +t +t +T +t +t + +t +t + +t + + +t +t +t +t + + +T + +4 +T +4 +T + +t +t + +T +T +4 +4 +T +T +3 +4 +4 +4 + +4 +4 +T +4 +t +t +T +T +T +T +T +T +T +T +T +t +t +T +T +t +t + +4 +T +T +T +T +T +T +T +T +T +4 +T +T +4 +T +t +t +T +T +T +T +T +T +T +T +T +T +T +T +T +t + +T +t +t +t +T +T +t +t +t + +t +t + +t +t +t +t + +t +t +T +T +T +T +T +t +T +t +t + + +t +t +t +T + +T +4 + +T +4 +4 +t +t +t +t +t +T +t +T +T +T +4 +T +t +t +t +t +4 +T +T +t +t +t +t +t + + +t +t +T +T +T +T +T +T +t +t +t +t + +t +T +t +t +t +t +t +t +t + + + + +t +t +t +t +t +t + + +t +t + + +t +t +t +t +t + + +t +t +t +t +t +t +t +t +T +T +t +t +T +t +t +t +T +T +T +t +t +T +t +T +t +T +t +T +T +4 +T +4 +4 + +4 +4 +3 +3 +4 +T +t +T +t +t +t +T +t +t +T +4 +T +4 +T +t + +T +t + +t +T +t +T +T +t +T +T +T +T +t +4 +T +4 +T +t +t +t +t +3 +T +T +t +4 +4 +T +T +t +T +T +T +T +t +T +t +T +T +t +T +t + +t +t +t +T +T +t +t + +T +T +t +t +t +t + +t +T +T +t +t + +t + +T +T +t +T +T +T +T +t +t +T +tT +t +t +t +t +t +t +t + +t +t + +t +t +t + + + + + + + + + +t +t +T +T +t +T +T +t +t +t + +t +t + +t +t +T +t +t +T +T +t +t +t +t +t +t +t +t + + +t +t +t +t +t +t +t + +t + + +T +t +t + + + +t + +t +T +t +t + + +t +4 +t +T +T +t +T +t +t +t +T +T +T +T + +t + +t +t +T +t +t +T +T +t +t +t +t +T +4 +T + + +t +T +T +4 +3 +4 +4 + + +t +t +t +t + +t + + + + +t +t +t +T +t +T +T +T +T +T +T +t +t +T +t +T +T +T +T +t +T +T +t +T +4 +T +t +t +t +T +t +T +t +t +T +t + + + +t +t +t +t +t +t +T +t +t +t +tt +t +t +T +T +t +T +T +T +t +T +t +T +T +T +t +t +T +4 +T +T +4 +4 +4 +T +T +T +T +T +T +T +t +t +T +T +t +t +T + +T + +t +t +t + +T + +T +T +4 +4 +t +t +T +T +4 +t +T +t +T +T +T +t +T +t +t +t +T +3 +t +4 +T +T +t +T +4 +4 +T +T + +3 + + +4 +4 + + +4 +T +4 +4 + + + +4 +4 +4 +4 +4 +3 +T +t +4 +T +3 +T +T +t +4 +4 +t +T +t +t +4 +T +t +T +T +t +3 + +4 +4 +4 +T +4 +T +T +4 +T +t +4 +T +t +T +T +T +T +T +T +4 +4 +T +T +T +T +T +4 +T +T +T +T +T +T +T +T +t +T +T +T +T +T +T +T +T +T +T +T +T +T +T +T +T +T +T +T +4 +t +T + +4 +4 +3 +T +T +4 +4 +T +T +4 +4 +4 +4 +4 +T +3 +4 +T +4 +T +4 +T +4 +3 +4 +4 +T +T +4 +4 +4 +4 +T +4 +4 +4 +4 +T +4 +4 +3 +4 +4 +T +t +T +T +t +T +T +T +4 +4 +4 +4 + +4 +3 + +4 +4 +4 +T +4 +4 +t +T +4 +T +4 +4 +T +4 +T +4 +4 +T +4 +4 +4 +4 +T +4 +t + + + +t +t + +t +t +t + +t +t +t +T +T +t +T +T +t +T +t +T +T +t +T +T +t + +T +T +t +t +t +t +t +t + +T +T +t +t + +t +T +t + +T +t +T +T +t +t +T +T +t +T +t +t +t +T +T +4 +T +t +T +4 +t +4 +3 +4 +3 +4 +t +T +T +t +T +t +t +T +3 +4 +4 + +4 +3 +T +4 +4 +T +4 +T +T +4 +T + +t + +t +t +T +t +t +T +T +T +T +t +t +t +t + +t +t +t +t +t +t +t +t +t +t +t +T +T +T +t +T +T +t +t +t +t +t +t + + + +t +T +T +t +T +T +T +T +T +t +t +t +T +t +t +T +t +T +T +T +T +t +t +T +4 +t +T +T +t +4 +3 +4 +3 +T +T +T +T +4 +4 +T +4 +4 +4 + +4 +T + +T +T +T +4 +4 +4 + +3 +t +T +t +T +T +T +4 +4 +4 +4 +4 +3 + +4 +4 +4 +4 +4 +4 +4 +T +T +T +T +4 +3 +3 +T +T +T +T +t +t +t +T +T +T +4 +T +T +t +T +4 +t +T +T +T +T +T +T +T +4 +4 +T +T +4 +4 +T +T +T +T +4 + +4 + + + +T +T +t +t +T +T +T +T +t + +4 +4 +T +4 +4 +T +T +T +T +T +T +T +T +T +T +T +T +T +T +T +T +4 +T +T +4 +4 +4 +4 +4 +4 +4 +4 +4 +3 +4 +4 +4 +4 +t +T +T +t +t +t +T +T +4 +4 +T +T +4 +3 +T +T +T +t + +T +4 +T +t +4 +T +t +T +t +4 +T +4 +4 +4 +4 +4 +T +t +T +4 + + +T +T +4 +T +3 +4 +4 + +4 +3 +4 +T +4 +T +4 +3 +4 + +3 +3 +4 +4 +4 +T +T +T +T +T +T +T +T +T +T +T +4 +T +4 +4 +4 +3 + +T +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 + +T +4 +4 +T +T +T +4 +4 +4 +4 +4 +3 +T +T +t +t +T +4 +t +4 +T +t +4 +4 +t +T +T +T + +3 + +3 +4 +4 +4 +4 + +4 +4 +4 +T +T +4 +T + +4 +3 +4 +4 +4 +4 +4 +T +T +T +4 +4 +T + + +3 + +4 + +T +3 +4 + +4 + +T +T +4 +T +t +4 +4 +4 +T +t +T +t +T +4 +T + +4 +t +T +4 +4 +t +t +T +T +T +T +T +t + +4 +4 +3 + +t +4 +4 +T +T +3 +t +t +t + + + +4 +4 +T +T +t +4 +4 +T +t +4 +t +T + +T + +4 +t + +T +T + +t + +4 + +3 +4 + +4 +T +T +4 + +t +t +T +4 +T +T +T +T +4 +T +4 +T +T +4 +4 +T +T +T +T +T +T +T +T +T +4 +T +T +4 +4 +T +T +T +T +T +T +T +T +t +t +T +t +t +t +t +t +T +T +T +t +T +T +t +T +4 +T +4 +4 +T +T +4 +4 +4 +4 +4 +4 +4 +T +4 +4 +T +T +4 +4 +4 +3 +4 +3 +T +T +t +t +T +T +t +T +t +t +T +T +t +t +T + +4 +T +T +4 +T +t +T +T + +t +t +t +t +T +T +T +t +t +T +T +T +T +4 +T +4 +3 + + +4 +4 +4 +T +4 +4 +4 +4 +4 +4 +4 +4 +T +T +T +t +T +T +T +T +T +T +4 +4 +T +T +4 +T +t +T +t +T +T +t +t +4 +T +T +T +6 + +4 +t +4 +T +t + +t +T + + +t +t +66 +V6t + + + +t +T +T + +t +t +t +t +t +t +t +t +T +T +t +t +t +t +4 +T +T +4 +T +T +4 +T +T +4 +T +T +4 +4 +T +T +t +t +T +t +T +T +T +T +T +t +t +T +t +t +t +t +t +t +t +t +6t +t + +t + +t + +4 +4 +3 + +T +T +4 +4 + +4 +4 +4 +T +T +4 +T +T +t +T +t +t +T +T +T +t +t + + + +t +4 +4 +T +t +4 +4 +t + +T +t +3 +T +t + +4 +T +t +T +4 + + +t +4 +t +T +4 + +4 +T +T +T +4 +4 +T +4 +t +T +T +T +t +t + +4 +4 +4 +4 +T +T +T +t +T +T +t +t +t +t +t + +4 +T +t +4 +T +t +T +4 + +4 +t +t +T +t +t + +t +4 +t + +T + +T +4 +4 +4 +4 + +t +t +T +T +4 +4 +T +4 +4 +4 + +3 +3 +4 +3 +T +T + +4 + +T +t +T +t +T +4 +t +4 + +4 + +4 +3 +4 +4 +4 + + + + +3 +3 + +3 +4 +t + +4 +T + + +4 +4 +4 +T +4 +T + +t +t +T +T +T +t +T +t +t +T +4 +T +T +4 +4 +4 +4 +4 +T +4 +T +T +T +4 +T +T +t +4 +T +t +t +t +t +T +T +T +t +t +t +t + +t +T +T +t +T +T +T +T +T + +t + + +t +4 +t +4 +T +T +T +T +T +t +t +t +t +6V666V6666V6V6V#Vt + +t +4 +T +T +t +t +tt +t +t +t +t +t +t +t +t +t +t +t + +t +t +t +t + +t + +t + +t +t +t + +t + +t + +t +6T +t +t +t +t +t +t +t +t +t + +t +t +t + +T +T +t +t +T +T +t +t + +t +t +t +t +t +t +t +t +t +t +T +T +t +T +t +T +T +T +T +t +t +T +t +T +T +t +T +t +T +T +t +t +4 +4 +T +T +t +t +t +t +4 +4 +4 +4 +T + +4 +4 +T +4 +t + +4 + +4 +t + + +t +T +T +T +T +t +t +T +T +t +T +t +T +t +t +t +t +t +T +t +T +t + +t +t +t +t +t +t +T +t +T +t +t +t +T +t +t +T +t +T + + +t +t +t +t +T +T +T +T +T +T +T +T +T +t +t + + +T +T +T +t +t +t +t + +T +4 +t +t +T +T +t +T +t +t +t +T +t +t + +T +T +t +t +T +t +T +4 + +t +T +T +t +4 +T +t +T +t +4 +4 +T +4 +4 +t + +4 +T +T +T +t +t +T +T + + +t +t +3 +4 +4 +T +3 +4 +4 +4 +4 +4 +4 +4 +T +t +4 +T +3 +3 +4 +4 +3 +3 +3 +T +T +T +4 +4 +4 +4 +4 +4 +4 +T +T +T +t +T +t +4 +T +T +T +T +T +T +T +t +t +t +T +T +T +T +T +T +T +T +T +T +4 +T +4 + + +3 + + + +3 +4 + +4 +4 +4 +4 +T + +4 +T +3 +4 +T + +T +T +4 + +T +T +T +t +T +t +4 +4 +4 +4 +T +t +T +t +t +4 +t +T +4 +T +4 +t +T +t +T +T +4 +4 + +t +T +t +4 +T +t + +T +t +T +3 +4 +4 +T +4 +T +t +t +T +T +T +T +T +T +t +t +T +t +T +T +T +4 +T +T +T +T +4 +4 +T +T +T +T +T +T +4 +4 +4 +4 +4 +T +4 +T +T +T +T +T +t +t +T +T +t +t +T +T +T +T +t +T +T +T +4 +T + +4 +T +3 +T +t +t +T +3 +T +T +T +T +t +t +T +T +t +t +T +T +T +T +t +T +T +T +T +T +t +t +t +T +4 +4 + +t +t +t +t +4 +4 +4 +4 +t +T +t +T +T +t +t +t +t +t +t + +t +T +t + +t +t +t + +T +t +T +T +t +T +T +t +t +t +T +t +T +t +t +t +t +t +t +t +T + +t + +t +t +t +t +T +t +T +T +T +t +t +T +T +T +4 +T +T +T +T +T +T +t +T +T +t +t +T +T +T +t +T +t +t +T +t +t +T +t + +t + +T +T +t +t +t + +t +t +t +T +T +t +t + +t +t + + +t +t +t +t + +t +t +t + +t +t +t +t +t +t + +t +t +T +t +T + +T +t +t + +t + +t +t +t +t +t +t +t + +t +t +t + +t +T +T +4 + +t +T + +t +T +T +4 +4 +T +t +T +T +4 +4 +4 +4 +4 +T +4 +T +t +T +T +t +T +T +T +T +T +T +T +T +T +T +4 +4 + +4 +4 +T +4 +4 +4 +4 +t +T +4 +T +T +t +4 +T +4 +T +T +T +t +t +T +T + +T +4 +T +T +T +t +T +4 +4 +4 +4 +T +T +T +4 +T +T +4 +T +T +4 +4 +4 +T +T +T +T +t +t +T +t +t +t +t +t +T +4 +t +t +4 +T +t + +t + +t + + +t +t +t + +T +T +T +4 + + +T +4 +T +T +T +4 +4 +3 +4 +4 +3 + +T +T +T +T +4 + +T +4 +4 +4 + + +T +t +4 +4 +3 + +3 +4 +3 +4 +T +T +T +t +t +t +t +t +T +t +T + +t +t +T +4 +T +T +4 +T +T +t +t +t +t +t +T +t +t +T +t +t +T +4 + +t +4 +4 +3 +4 +T +T +3 +4 +T +T +t +t +4 +4 +T +T + +3 +4 +4 +T +4 +3 + + + +4 +4 +T +3 +4 +T +3 +4 +4 +4 +4 + +4 +4 +4 +T +T +T +T +T +4 + +4 +4 +T +T +4 +T +4 +4 +T +T +t +t +3 +T +T +T +T +T + +3 +4 +T +4 +4 +T +T +T +t +4 +T +T +T +T +T +T +T +T + +t +T +3 +4 +4 +4 +T +4 +4 +4 +4 +4 +T +T +4 +T +4 +T +4 +t +T +T +t +t +T +T +t +t +T +T +t +T + +T +4 +t +t +T +t + +3 +T +T +T +t +T +4 +T + +T + +4 +3 +t +T +4 +4 +4 +T +4 +4 +4 +T +T + +4 + +4 +4 + +4 +3 + +T +3 +t +t +t +t +T +4 +4 +T +4 +T +T +T +4 +4 +4 +t +4 +T +T +t +4 +T +t +t +T +T +t +T +T +t +T +t +T +T +t +T +T +t +T +t +T +T +t +T +t +4 +4 +3 +T +t +t +T +T + +T +T +t +3 +4 + +4 +t + +3 +4 +3 +4 +4 + + +T + +4 + +t + +T +t +4 +T +4 +3 +4 +3 +t +t +3 +3 +T +T +T +t +T +T +t +T +T +4 +4 +4 +T +t +t +t +t +T +4 +T +T +t + +t + +t +t +3 +T +t +T +t +t +T +T +4 +4 + +T +4 +T +3 +4 +3 +4 +t +T +4 +t +T +4 +t +t +T +4 + +t +4 +4 + +3 +4 +t +4 +t +4 +4 +4 +T +t +T +T +t +t +t +t +T +t +t +t +t +T +4 +T +T +T +T +T +T +T +4 +T +T +t + + +T + + +t + + +4 + +T + +t +66666t +t +T +t +t +t +t +t +t +T +t +T +T +T +T +t +t +T +T +T +t +t +T +t +666666 +66t +t +4 +4 +4 +3 +3 +4 +T +T +t +T +4 +t +t +4 +T +3 +3 +4 + +3 + +4 +T +t +T +4 +4 +T +T +t +t +t +t + +t +t +t +t +t +T +t +t +t +t +t +t +t +T +T +t +tT + +t +t +t +t +T + +t + +4 +3 +4 +4 +4 +4 +4 +T +T +T +t +t +t +t +t +T +T +T +T +4 +3 +T +T +t +t +t +t +t +t + + +t + + + +t +t +t +t + +t +T +T +T +T +t +t +T +4 +T +T +t +t +T +4 +t +T +T +T +4 +T +t +t +T +t +T +t +t + +t +t + + +t +t +T +T +T +T +T +T +T +T +T +T +T +T +t +T +T +T +t +t + +t +t +t +t +t +t +t +t +t + + + +t +t + +t +t +t +t +t + +t +t +t +t + +t + +t +t +t +t +t +t +t + + + + +t +4 +T +T +t +T +T +t +4 +t + +t +T +T +T +4 +t +t +t +t +t +T + + +t + + + +t +t +t + +t +66666V66V##6VV##6Vv666V66V6V666VV6##vV66#6w66Vt +6t +6666666666666666VVVV6666666V6666666666666Vv66VV6T +T +t +4 +4 +t +T +t +T +t +T +t +t +T + + +T +T +t +4 +T +T +4 +t +t +4 +t +T +4 +t +T + + + +t +t +T +t +t +t +t +T +t +t +t +t +T +4 + +t +T +T +t +t +T +t +t +T +t +t +T +T + + + +t +t +T +t +t +T +t +t + +t + +t +6t +t +t +6 +t +t + +t + +VV6v###w#V#w#6V6#66v#w#vvvVvvww#66V6VVvvw##V6#wwv#V######V#w#######6#V#V#w6v6#w##VV#vV6VV6VVV6V6V66666VVVw#Vw#66vw##6V66##6V66V6VV66Vvw#6vVvw#w#wwvw#ww##w#vVw#wvVvv#+v#,+##vwv#ww###+##8,#,,vw#######+###8,#+#####w##w,8,+,#w###66666666V66vVwV66 + + + +t +t +t +w#VvVV6#w#V666V666wVwV6vVv#####v#Vvw#w66vvV66t + +t +6Vt +t + + +t +4 +t +T +t +t +t + +T +T +t +t +4 +T +T +t +T +T +T +4 +T +T +t +T +T +T +T +t + +t + +t +T +T +t + + +T +T +T +t +T +T +t +T +T +4 +T +t +t +T +t +T +T +t +t +t +T +T +t + + + +t +t +t +t +t + + + + +t + +t +t +t + + +t + +t +T + + +T +T +t + + + +t +t + +t +t + + +t + + +T +t + + + +t +t + +t +t +t +t +t +T +t +t +t + +t +t +t +t +t +t +t +t + + +t +t +t +T +t +T +T +T +T +4 +t +t +t +T +t +t +t +t +t +t +t +t +T +T +t +T +t +t +t +t +t +T +T +T +T +t +T +t +t +t +t +t +T +T +T +t +T +t +T +T + +t +t +t +t +t +t + +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t + + + + +t +t +t +t +t +t +t + + + + + +t +t + + +t + +t +t +t +t +t + +t +t +t +T +t +t +T +t +t + + +t +t +t +t +t +t +t +t + + +t +t +t +t +t + + +t +t + +t +T +T +T +t +t +t +t + +T + +t +t +t +t +t + +t +T +T +T + + + + +t +t +t +T +T +t +T +t +T +T +T +T +t + +t +t +t +t +t +T +t +t +T +T +T +t + + + + + +T +4 +T +t + + +6t +t +T +t +t + + +T +T +t +T +t +t +t +t +t +t +t +t +t +T +T +t +t +t +t +t +T +t + +t +t +t +t +t +t +t +t +t +t +t +t +T + + +t +t +t +t +t + +t +t +t + +t +t + + +t +t +t +T +t +t +t +t +t + +t +T + +t + + +t +t +t +t +t + +t +t +t + + +t +T +T +T +t +t +T +t +t +t + + +T + +T +T + +T +t +t +t +t +t + + +t + + +t +t +t +t +t + + +t + + + + + +t + +t + +6t + + +t +t + +t +t +t + +t + +t + +t + +t +6vw6V6666VVwVVVVvvvVw#w######VVV#VV##VV6VVVV6w##w######w########w#######+####,8,##++#+####+#w#v#vvv#################w#wVvvV#w#v#ww#w#66VV6VVV666V6VVv##########v#vVvV66VV6V666vvV6V666##6######vvVV6666#vVVvV6666##w#Vv6vvVVVw#vw#V66VV6w##w#vVv6vVV666666666V6VV66VVvVVV66V66 +t +t + +t + +t + +t + + +t + +t +t +t +t +T +T +T + +t +t +t + + +T +t +T +T +t +t +666666V6VV#V6V6#V66t +t +t +T + +t +T +t +t +6666t +6#6V##V6w#VVV66#w#VV66V66666Vv# + + + +t +t +t +t + +t + +t +T +T +t +t +t +4 +T +T +t +t +t +t +t +t +t + +t +t +t +T +t +t +t +T +T +4 +4 +4 +4 +T +4 +T +T + +t +t +t +T +4 +t +T +4 +T +4 +T + +T +t +T +t +T +T +4 +4 +T +3 +4 +4 +4 +T +4 +3 +T +4 +4 +t +T +T +t +T +T +T +T +t +4 +T +T +4 +4 +t +t +T + + +T +4 +4 + +t + +t +t +t +4 +t +t + +4 +T +T + + +4 +4 +T +T +t +4 +T +T +T +t +T +t +t +t +t +t +T +T +t +t +T +T + + +t +T +t +T +t +t +T +t +t +T +t +T +T +T +T +T +T +T +4 +3 +4 +4 +4 +T +4 +4 +4 +T +T + +4 +T +T +T +T +4 +4 +4 +4 +4 +4 +4 +t +t +4 +T +t +T +T +T +T +T +T +T + +T +t +T +3 +T +T +4 +3 +4 +3 +t +t +T +T +T +T +T +4 +T +4 +T +4 +4 +T +4 +4 +4 +4 +4 +T +4 +4 +T +4 +T +T +4 +4 +T +4 +T +T +4 +4 + +3 + +3 +4 +6V666 +t +t +t + + + +t +t +t +t +t +t + +t +t +t +t +t +t +t +t +t +t +t + +t + + +t + +t +t + + +t +t + + +t + +t +t + +t +t +t +t +T +T +t + +T +T + +t +t +T +t +t +t +T +t + +T +T +t +T +t +t +t +t +t + +t + +t + +t +t +t +t +T +t + +4 +t +T +t +T +t +t +t +t +t +T +t +T +t +t +t +T +T +t +t +t + +t +t +t +t + +t +t +t +t +t +t +t +T +T +T +t +t + +t +t +t + +t +t +t +t +t + +t + +t +t +t +t +T +T +T +t +T +t +t +t +t + + +t + +t +t +t +t +t + +t + +t +t +t +t +t +t +t + +t + + +t + +t +t +T +t +t +T +t +t +t + + +T +t + +t +t +t +t +t +t +t +t + +t +t +t +t +t +t +t +t +t +T +t +t +t +t +T +T +t +T +T +t +T +t + +t +t +t +t +t +t +t +t +t +T +t +T +T +t +t +t +t +t +t +t +t +t + +t +t +T + + +t +t +t +t +T +t +t +t + + +t +T +t +t +T +t +t +T +T +t +t +t +t +T +T +T +t +t +t +T +t +t +t + +t +T +T +T +T +t +t +T +4 +4 +T +t +4 +3 +T + +t +T +4 +3 +T +T +4 +T + + +4 +T +3 +3 +t +t +T +4 +t +T +T +t +t +T +t +t + +3 +T +4 +T +3 +4 +T +4 +T +T +T +T +T +T +T +t +t +t +t +t +T +T +3 +4 +T +T +T +T +T +T +T +T +t +t +t +T +T +t +t +T +T +T +3 +4 + +4 + + +t +T +T +T +4 +T +T +T +T +t +T +T +T +3 +4 + +t +t +t +t +T + +T +3 +4 +T + +3 +4 +4 +3 +4 +4 +4 +4 +4 +4 +T +4 +t +4 +4 +3 +3 +4 +4 +4 +4 +T +T +T +T +4 +4 +4 +4 +4 +4 + +4 +4 +4 +T + +4 +4 + +3 +4 + +4 +T +T +T +T +T +4 +T +4 + + + +4 + +4 +4 +4 +4 +3 +4 +4 +T +T +T +T +t +t +T +t +4 +T +T +T +T +4 +T +T +t +t +t +t +T +T +T +4 +T +T +T +t +T +T +4 +4 +3 +3 + +t +t +4 +4 +T +4 +4 +T + + +t +T +4 +T +t +T +t + + + +4 +3 +4 +4 +T + + +t +t +t +t +t +t +T +T +T +T +T +T +T +t +4 +t +4 +T +t +t +T +T + + +4 +T +4 +T +4 +4 +t +t +T + +t +t +t +t +T + +t +t +t +t +t +T +T +T +T +T +T + +t + +T + +T +t +T +T +t +T +t + +t +t +t + +t +t +t +t + +t +tt +3 +4 +4 + +4 +4 +4 +t +3 +4 +4 +4 +T +t +T +t +T +t +t +T +T +t +T +T +t +T +t +T +T +t +t +t +4 +T +4 +4 +t +t +T + + +4 + +4 +T +t +T +T +t +t +t +t + +t +t +t +T +T +t +t +T +T + +T +T +t +t +t +T +T + +t + +t +t +t +t +t +t + +T +T +T +t +t +t +t +t +T +t +T +t +t +t +t +T +t +t +t +T +t +t +T +T +T +T +T +t + \ No newline at end of file diff --git a/model/testscene/texture/texWater.data.h b/model/testscene/texture/texWater.data.h new file mode 100644 index 0000000..f938225 --- /dev/null +++ b/model/testscene/texture/texWater.data.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_model_testscene_texture_texWater_data_start __asm("_binary_model_testscene_texture_texWater_data_start"); +extern uint32_t _binary_model_testscene_texture_texWater_data_end __asm("_binary_model_testscene_texture_texWater_data_end"); +extern uint32_t _binary_model_testscene_texture_texWater_data_size __asm("_binary_model_testscene_texture_texWater_data_size"); + +#ifdef __cplusplus +} +#endif diff --git a/sh7091/store_queue.hpp b/sh7091/store_queue.hpp index 5194be5..4593d30 100644 --- a/sh7091/store_queue.hpp +++ b/sh7091/store_queue.hpp @@ -6,7 +6,7 @@ static inline void sq_transfer_32byte(volatile void * dst) { // dst typically 0x10000000 (ta polygon converter) - sh7091.CCN.QACR0 = ((reinterpret_cast(dst) >> 26) & 0b111) << 2; + sh7091.CCN.QACR0 = ((reinterpret_cast(dst) >> 24) & 0b11100); // start 32-byte transfer from store queue 0 (SQ0) to QACR0 asm volatile ("pref @%0" @@ -19,8 +19,8 @@ static inline void sq_transfer_32byte(volatile void * dst) static inline void sq_transfer_64byte(volatile void * dst) { // dst typically 0x10000000 (ta polygon converter) - sh7091.CCN.QACR0 = ((reinterpret_cast(dst) >> 26) & 0b111) << 2; - sh7091.CCN.QACR1 = ((reinterpret_cast(dst) >> 26) & 0b111) << 2; + sh7091.CCN.QACR0 = ((reinterpret_cast(dst) >> 24) & 0b11100); + sh7091.CCN.QACR1 = ((reinterpret_cast(dst) >> 24) & 0b11100); // start 32-byte transfer from store queue 0 (SQ0) to QACR0 asm volatile ("pref @%0"