diff --git a/CMakeLists.txt b/CMakeLists.txt index 8384687..833dd06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,6 +70,7 @@ endfunction() add_shader(basic) add_shader(world) +add_shader(gui_tile) add_executable(mikemon src/log.cpp @@ -88,4 +89,5 @@ target_link_libraries(mikemon add_dependencies(mikemon SHADER_basic SHADER_world + SHADER_gui_tile ) diff --git a/assets/shader/gui_tile.h b/assets/shader/gui_tile.h new file mode 100644 index 0000000..1c2bbdb --- /dev/null +++ b/assets/shader/gui_tile.h @@ -0,0 +1,118 @@ +const unsigned char SPIRV_gui_tile[] = +{ + 0x03, 0x02, 0x23, 0x07, 0x00, 0x05, 0x01, 0x00, 0x28, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x0f, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x5f, + 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0c, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, + 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x61, 0x50, 0x6f, 0x73, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x55, + 0x56, 0x00, 0x05, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x61, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x05, + 0x00, 0x0c, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x4c, 0x41, 0x4e, 0x47, 0x5f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x5f, + 0x73, 0x74, 0x64, 0x31, 0x34, 0x30, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x75, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x75, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0b, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x2e, 0x43, 0x6f, 0x6c, 0x6f, 0x72, + 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x05, 0x00, 0x00, 0x00, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x2e, 0x55, 0x56, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x76, + 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72, + 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x75, 0x76, 0x00, 0x00, 0x05, 0x00, 0x0e, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x53, 0x4c, 0x41, 0x4e, 0x47, 0x5f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x74, 0x73, 0x5f, 0x73, 0x74, 0x64, 0x31, 0x34, 0x30, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x00, 0x00, + 0x05, 0x00, 0x07, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x74, 0x69, + 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x11, + 0x00, 0x00, 0x00, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x64, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x61, 0x69, + 0x6e, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x09, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x0f, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, + 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x1e, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, + 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, + 0x00, 0x0a, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0b, 0x00, + 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x22, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x12, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x13, 0x00, 0x00, + 0x00, 0x12, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x14, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, + 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x16, + 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x15, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, + 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, + 0x2b, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x20, 0x00, 0x04, + 0x00, 0x21, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x22, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, 0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, + 0x00, 0x25, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x26, 0x00, + 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x27, 0x00, 0x00, 0x00, 0x14, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x28, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3b, 0x00, + 0x04, 0x00, 0x17, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x17, + 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, + 0x00, 0x04, 0x00, 0x22, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, + 0x00, 0xf8, 0x00, 0x02, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x2b, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x07, + 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, + 0x00, 0x3d, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x85, 0x00, + 0x05, 0x00, 0x16, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x41, + 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, + 0x00, 0x16, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x50, 0x00, + 0x06, 0x00, 0x15, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1f, + 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x14, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x14, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x52, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x36, 0x00, + 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x37, + 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, + 0x00, 0x12, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xf8, 0x00, + 0x02, 0x00, 0x38, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x0d, + 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, + 0x00, 0x3d, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x26, + 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00, + 0x00, 0x11, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, + 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x3e, + 0x00, 0x03, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, +}; + +const size_t SPIRV_gui_tile_sizeInBytes = 2128; + diff --git a/assets/shader/gui_tile.slang b/assets/shader/gui_tile.slang new file mode 100644 index 0000000..d96b4cc --- /dev/null +++ b/assets/shader/gui_tile.slang @@ -0,0 +1,47 @@ +struct VertexShaderInput { + float2 aPos; + float2 aUV; + float4 aColor; +}; + +struct VertexShaderOutput { + float4 Pos : SV_POSITION; + float4 Color; + float2 UV; +}; + +[[vk::binding(0, 1)]] +cbuffer constants { + float2 uScale; + float2 uTranslate; +}; + +[shader("vertex")] +VertexShaderOutput main_vertex(float2 aPos, float2 aUV, float4 aColor) +{ + VertexShaderOutput Out; + Out.Color = aColor; + Out.UV = aUV; + Out.Pos = float4(aPos * uScale + uTranslate, 0, 1); + Out.Pos.y *= -1.0f; + return Out; +} + +struct PixelShaderOutput { + float4 color : SV_TARGET; +}; + +[[vk::binding(0, 2)]] +Sampler2DArray tile_textures; + +[[vk::binding(0, 3)]] +cbuffer fragment_constants { + uint tile_index; +} + +[shader("fragment")] +PixelShaderOutput main_fragment(float4 color, float2 uv) { + PixelShaderOutput Out; + Out.color = color * tile_textures.Sample(float3(uv, tile_index)); + return Out; +} diff --git a/assets/shader/world.h b/assets/shader/world.h index c73eca8..5a4a59a 100644 --- a/assets/shader/world.h +++ b/assets/shader/world.h @@ -1,299 +1,311 @@ const unsigned char SPIRV_world[] = { - 0x03, 0x02, 0x23, 0x07, 0x00, 0x05, 0x01, 0x00, 0x28, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x02, 0x23, 0x07, 0x00, 0x05, 0x01, 0x00, 0x28, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x4b, 0x11, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x32, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0b, 0x00, 0x53, 0x50, 0x56, 0x5f, 0x4b, 0x48, 0x52, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0a, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x70, 0x6f, 0x73, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x09, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x74, 0x69, 0x6c, - 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x53, 0x4c, 0x41, 0x4e, - 0x47, 0x5f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x5f, 0x73, 0x74, 0x64, 0x31, 0x34, 0x30, 0x00, 0x00, 0x00, 0x06, 0x00, - 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x66, 0x6f, 0x76, 0x79, 0x5f, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, 0x73, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, - 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x78, 0x00, 0x00, - 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x63, 0x61, 0x6d, 0x65, 0x72, - 0x61, 0x5f, 0x79, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x00, 0x06, 0x00, 0x06, - 0x00, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x74, 0x69, 0x6c, - 0x74, 0x00, 0x06, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x70, 0x5f, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x74, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6c, - 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x74, 0x69, - 0x6c, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x74, - 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x72, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, - 0x00, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x04, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, - 0x73, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x06, 0x00, 0x00, 0x00, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x2e, 0x75, 0x76, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x76, - 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x2e, 0x75, 0x76, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x74, 0x65, 0x78, 0x31, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00, 0x76, 0x65, 0x63, 0x53, 0x69, 0x7a, 0x65, 0x00, 0x05, 0x00, - 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x19, - 0x00, 0x00, 0x00, 0x63, 0x5f, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, - 0x1a, 0x00, 0x00, 0x00, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x00, 0x05, 0x00, 0x05, 0x00, 0x1b, 0x00, 0x00, - 0x00, 0x63, 0x5f, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x1c, 0x00, - 0x00, 0x00, 0x75, 0x76, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x75, 0x76, 0x00, 0x00, 0x05, - 0x00, 0x03, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x75, 0x76, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x64, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x65, 0x6e, 0x74, - 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, - 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x05, 0x00, 0x06, 0x00, 0x0c, - 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, - 0x00, 0x08, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0b, 0x00, - 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x49, 0x11, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0b, - 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, - 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, - 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, - 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, - 0x00, 0x48, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x14, - 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x03, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x47, 0x00, 0x04, 0x00, 0x03, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, - 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x15, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x05, - 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, - 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x22, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, - 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x23, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, - 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x29, 0x00, - 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x09, 0x00, 0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, - 0x00, 0x23, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x28, 0x00, - 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2b, - 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x2e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, - 0x00, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x2c, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0x30, 0x00, - 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x31, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x2b, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, - 0x04, 0x00, 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x26, - 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, - 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, - 0x26, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, - 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x3e, 0x00, - 0x00, 0x00, 0x0a, 0xd7, 0x23, 0x3c, 0x20, 0x00, 0x04, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x24, - 0x00, 0x00, 0x00, 0x1d, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, - 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x41, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x24, 0x00, - 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x42, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x04, 0x00, 0x43, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, - 0x44, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x45, 0x00, - 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, - 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x47, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x2c, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, - 0x00, 0x3b, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, - 0x04, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x27, - 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, - 0x00, 0x04, 0x00, 0x41, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x42, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x43, 0x00, 0x00, - 0x00, 0x0f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x46, 0x00, 0x00, 0x00, 0x0d, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x41, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x25, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, - 0x24, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, - 0x00, 0x3b, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x24, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x37, 0x00, - 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x24, - 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x21, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x22, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x26, 0x00, - 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x4f, - 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, - 0x00, 0x3d, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x82, 0x00, - 0x05, 0x00, 0x26, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x7c, - 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x2e, 0x00, 0x00, - 0x00, 0x56, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x28, 0x00, - 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x89, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x58, - 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x70, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x59, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x86, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, - 0x00, 0x54, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x70, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x5b, 0x00, - 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x59, - 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, - 0x00, 0x55, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x5c, 0x00, - 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x14, - 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x35, 0x00, 0x00, 0x00, - 0x5d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, - 0x00, 0x5e, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x35, 0x00, 0x00, 0x00, 0x5f, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, - 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x35, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, - 0x00, 0x61, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x23, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x35, 0x00, 0x00, 0x00, 0x64, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, - 0x00, 0x63, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x23, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x23, 0x00, 0x00, 0x00, 0x68, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, - 0x00, 0x6a, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x23, 0x00, 0x00, 0x00, 0x6b, 0x00, - 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x6c, - 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x23, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, - 0x67, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x23, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, - 0x00, 0x6d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x24, 0x00, 0x00, 0x00, 0x6f, 0x00, - 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x50, - 0x00, 0x07, 0x00, 0x24, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, - 0x67, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x24, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, - 0x00, 0x37, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x50, 0x00, - 0x07, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x71, - 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x35, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, - 0x00, 0x73, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x23, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x35, 0x00, 0x00, 0x00, 0x76, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x77, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x23, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, - 0x00, 0x75, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x23, 0x00, 0x00, 0x00, 0x79, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x23, - 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, - 0x00, 0x24, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x37, 0x00, - 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x24, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x37, - 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, - 0x3a, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, - 0x00, 0x4c, 0x00, 0x00, 0x00, 0x92, 0x00, 0x05, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x72, 0x00, - 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x25, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x50, - 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, - 0x25, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, - 0x00, 0x24, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x3b, 0x00, - 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x24, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x7f, - 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, - 0x00, 0x84, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, - 0x0b, 0x00, 0x14, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x8b, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x8b, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x8c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x0b, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x91, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x07, 0x00, 0x25, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x8c, 0x00, 0x00, 0x00, 0xf8, 0x00, - 0x02, 0x00, 0x90, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x25, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x85, - 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, - 0x8c, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x25, 0x00, 0x00, - 0x00, 0x94, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x8c, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x4f, - 0x00, 0x07, 0x00, 0x25, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x8c, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, - 0x00, 0x8d, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x8c, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x8c, 0x00, - 0x00, 0x00, 0xf5, 0x00, 0x0d, 0x00, 0x25, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x91, - 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, - 0x95, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, - 0x00, 0x86, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x8a, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x97, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x0b, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x9b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x9c, 0x00, 0x00, - 0x00, 0x4f, 0x00, 0x07, 0x00, 0x25, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x85, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x97, 0x00, 0x00, 0x00, 0xf8, - 0x00, 0x02, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x25, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, - 0x00, 0x97, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x25, 0x00, - 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x97, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x99, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x07, 0x00, 0x25, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x97, 0x00, 0x00, 0x00, 0xf8, 0x00, - 0x02, 0x00, 0x98, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x97, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x97, - 0x00, 0x00, 0x00, 0xf5, 0x00, 0x0d, 0x00, 0x25, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, - 0x9c, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, - 0x00, 0xa0, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0xf9, 0x00, - 0x02, 0x00, 0x86, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x89, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xa2, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x0b, 0x00, 0x4f, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0xa6, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa7, 0x00, - 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x25, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x85, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xa2, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0xa6, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x25, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, - 0x00, 0x85, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, - 0x02, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x25, - 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa4, 0x00, 0x00, - 0x00, 0x4f, 0x00, 0x07, 0x00, 0x25, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x85, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xf8, - 0x00, 0x02, 0x00, 0xa3, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0xa2, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x0d, 0x00, 0x25, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, - 0x00, 0xa7, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0xa5, 0x00, - 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0xf9, - 0x00, 0x02, 0x00, 0x86, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x88, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, - 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x0b, 0x00, 0x4f, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb2, - 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x25, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xad, 0x00, 0x00, - 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb1, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x25, 0x00, 0x00, 0x00, 0xb4, 0x00, - 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, - 0x00, 0x02, 0x00, 0xad, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, - 0x25, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xad, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xaf, 0x00, - 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x25, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x85, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xad, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0xae, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xad, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, - 0x00, 0xad, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x0d, 0x00, 0x25, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0xb3, 0x00, - 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, 0xb0, - 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, - 0xf9, 0x00, 0x02, 0x00, 0x86, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x87, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, - 0x00, 0x86, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x86, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x0d, 0x00, 0x25, 0x00, - 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x97, - 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, - 0x49, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, - 0x00, 0x3e, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, - 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x21, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, - 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb9, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, - 0xba, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x45, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, - 0x00, 0x0d, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x44, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xbb, 0x00, - 0x00, 0x00, 0x67, 0x00, 0x05, 0x00, 0x47, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x3d, - 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, - 0x00, 0x51, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x50, - 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x06, 0x00, 0x25, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x25, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, - 0xbf, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x00, 0xbe, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x25, 0x00, 0x00, 0x00, 0xc1, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x81, - 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, - 0x83, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x00, 0x88, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xbc, 0x00, - 0x00, 0x00, 0x57, 0x00, 0x06, 0x00, 0x24, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x1e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0f, 0x00, + 0x0b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x72, 0x61, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, + 0x00, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x69, 0x6e, + 0x70, 0x75, 0x74, 0x2e, 0x70, 0x6f, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x69, + 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x00, 0x05, 0x00, 0x0c, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x53, 0x4c, 0x41, 0x4e, 0x47, 0x5f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x5f, 0x73, 0x74, 0x64, + 0x31, 0x34, 0x30, 0x00, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, + 0x73, 0x70, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x76, 0x79, 0x5f, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, + 0x73, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x63, 0x61, + 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x78, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x12, 0x00, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x79, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x64, 0x69, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x00, 0x06, 0x00, 0x06, 0x00, 0x12, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x63, 0x61, + 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x74, 0x69, 0x6c, 0x74, 0x00, 0x06, 0x00, 0x06, 0x00, 0x12, 0x00, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x6d, 0x61, 0x70, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, + 0x00, 0x13, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x05, 0x00, 0x14, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x00, 0x00, 0x00, 0x00, 0x05, + 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x05, 0x00, 0x16, 0x00, 0x00, 0x00, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, + 0x00, 0x05, 0x00, 0x07, 0x00, 0x17, 0x00, 0x00, 0x00, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, + 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x04, 0x00, 0x00, 0x00, 0x74, + 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x61, 0x69, + 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x2e, 0x75, 0x76, 0x00, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6d, + 0x61, 0x69, 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x2e, 0x74, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x00, 0x05, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x75, 0x76, 0x00, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x74, 0x69, 0x6c, + 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x74, 0x65, 0x78, 0x31, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, + 0x00, 0x19, 0x00, 0x00, 0x00, 0x76, 0x65, 0x63, 0x53, 0x69, 0x7a, 0x65, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1a, 0x00, + 0x00, 0x00, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x63, + 0x5f, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x00, 0x05, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x63, 0x5f, 0x5f, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x75, 0x76, + 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x75, 0x76, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x75, 0x76, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x73, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x64, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x05, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x6d, + 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x00, + 0x00, 0x00, 0x49, 0x11, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x2b, + 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x03, 0x00, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x12, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x12, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, + 0x00, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, + 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x48, + 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x04, 0x00, 0x03, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x22, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x47, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, + 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0b, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x47, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, + 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x11, + 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x47, 0x00, 0x04, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, + 0x02, 0x00, 0x23, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x24, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x16, + 0x00, 0x03, 0x00, 0x25, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x04, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, + 0x2b, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x09, 0x00, 0x12, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x25, + 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, + 0x00, 0x2b, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x04, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x25, + 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x2c, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, + 0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x34, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x04, 0x00, 0x37, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, + 0x00, 0x29, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x25, 0x00, + 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x3a, + 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x2b, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, + 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x29, + 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0x0a, 0xd7, 0x23, 0x3c, 0x20, 0x00, 0x04, 0x00, 0x41, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, + 0x00, 0x26, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x03, 0x00, 0x22, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x1e, 0x00, + 0x03, 0x00, 0x17, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x42, 0x00, 0x00, 0x00, 0x0c, + 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x43, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x04, 0x00, 0x45, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x04, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x47, + 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x48, 0x00, 0x00, + 0x00, 0x47, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, + 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, + 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, + 0x00, 0x2c, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2a, 0x00, + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x0b, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x3b, 0x00, 0x04, 0x00, 0x42, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, + 0x04, 0x00, 0x43, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x44, + 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x45, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x46, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x49, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, + 0x00, 0x04, 0x00, 0x43, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, + 0x27, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x26, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x39, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x2c, 0x00, + 0x07, 0x00, 0x26, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x39, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x26, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, + 0x39, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, + 0x00, 0x23, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xf8, 0x00, + 0x02, 0x00, 0x50, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, + 0x00, 0x29, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x29, 0x00, + 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, 0x29, 0x00, 0x00, 0x00, 0x56, + 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x57, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x30, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x59, + 0x00, 0x00, 0x00, 0x89, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x70, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, + 0x00, 0x86, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x5a, 0x00, + 0x00, 0x00, 0x70, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x50, + 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, + 0x83, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, + 0x00, 0xc7, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x33, 0x00, + 0x00, 0x00, 0xc2, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x34, + 0x00, 0x00, 0x00, 0xc7, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, + 0x35, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x37, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x00, 0x36, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x60, 0x00, + 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x37, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x37, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, + 0x00, 0x3d, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x06, 0x00, 0x25, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x65, + 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x37, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, + 0x00, 0x7f, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x06, 0x00, 0x25, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x69, + 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x25, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, + 0x00, 0x61, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x63, 0x00, + 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x6d, + 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, + 0x00, 0x81, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x68, 0x00, + 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x26, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x39, + 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x26, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, + 0x00, 0x50, 0x00, 0x07, 0x00, 0x26, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x6f, 0x00, + 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x75, + 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x37, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, + 0x00, 0x3d, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x06, 0x00, 0x25, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x77, + 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x37, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, + 0x00, 0x85, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x31, 0x00, + 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x25, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, + 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, + 0x00, 0x7d, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x26, 0x00, 0x00, 0x00, 0x7f, 0x00, + 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x50, + 0x00, 0x07, 0x00, 0x26, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, + 0x39, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, + 0x00, 0x7f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x92, 0x00, + 0x05, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x4f, + 0x00, 0x07, 0x00, 0x27, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x26, 0x00, 0x00, 0x00, 0x85, 0x00, + 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x26, + 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, + 0x41, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, + 0x00, 0x3d, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0xf7, 0x00, + 0x03, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x0b, 0x00, 0x16, 0x00, 0x00, 0x00, 0x8a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, + 0x00, 0x8e, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, + 0x0b, 0x00, 0x52, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x94, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x94, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x27, 0x00, 0x00, + 0x00, 0x95, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x8f, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x93, 0x00, 0x00, 0x00, 0x4f, + 0x00, 0x07, 0x00, 0x27, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x8f, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, + 0x00, 0x92, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x27, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x88, 0x00, + 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x8f, + 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x91, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x98, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x00, 0xf9, 0x00, 0x02, 0x00, 0x8f, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x90, 0x00, 0x00, 0x00, 0xf9, 0x00, + 0x02, 0x00, 0x8f, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x8f, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x0d, 0x00, 0x27, + 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, + 0x93, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, + 0x00, 0x4c, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x89, 0x00, 0x00, 0x00, 0xf8, 0x00, + 0x02, 0x00, 0x8d, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, + 0x00, 0x0b, 0x00, 0x52, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x00, 0x9f, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x27, 0x00, + 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x9a, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x9e, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x07, 0x00, 0x27, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x9a, 0x00, 0x00, 0x00, 0xf8, 0x00, + 0x02, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x27, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x88, + 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, + 0x9a, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x27, 0x00, 0x00, + 0x00, 0xa3, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x9a, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x9b, 0x00, 0x00, 0x00, 0xf9, + 0x00, 0x02, 0x00, 0x9a, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x9a, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x0d, 0x00, + 0x27, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, + 0x00, 0x9e, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x9c, 0x00, + 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x89, 0x00, 0x00, 0x00, 0xf8, + 0x00, 0x02, 0x00, 0x8c, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfb, 0x00, 0x0b, 0x00, 0x52, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x27, + 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xa5, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa9, 0x00, 0x00, + 0x00, 0x4f, 0x00, 0x07, 0x00, 0x27, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x88, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xa5, 0x00, 0x00, 0x00, 0xf8, + 0x00, 0x02, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x27, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, + 0x00, 0xa5, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x27, 0x00, + 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xa5, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa6, 0x00, 0x00, 0x00, + 0xf9, 0x00, 0x02, 0x00, 0xa5, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa5, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x0d, + 0x00, 0x27, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0xac, 0x00, + 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, 0xa7, + 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x89, 0x00, 0x00, 0x00, + 0xf8, 0x00, 0x02, 0x00, 0x8b, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xfb, 0x00, 0x0b, 0x00, 0x52, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb5, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, + 0x27, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xb0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb4, 0x00, + 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x27, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x88, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xb0, 0x00, 0x00, 0x00, + 0xf8, 0x00, 0x02, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x27, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, + 0x00, 0x88, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, + 0x02, 0x00, 0xb0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x27, + 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xb0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb1, 0x00, 0x00, + 0x00, 0xf9, 0x00, 0x02, 0x00, 0xb0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb0, 0x00, 0x00, 0x00, 0xf5, 0x00, + 0x0d, 0x00, 0x27, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, 0xb7, + 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00, + 0xb2, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x89, 0x00, 0x00, + 0x00, 0xf8, 0x00, 0x02, 0x00, 0x8a, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x89, 0x00, 0x00, 0x00, 0xf8, 0x00, + 0x02, 0x00, 0x89, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x0d, 0x00, 0x27, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x99, + 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, + 0xa5, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, + 0x00, 0x3e, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x06, 0x00, + 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x07, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0xfd, + 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x23, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, + 0x00, 0x27, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x28, 0x00, + 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x48, 0x00, 0x00, 0x00, 0xbf, + 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x47, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xbf, 0x00, 0x00, 0x00, 0x67, 0x00, 0x05, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x3f, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1a, + 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x70, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x50, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1d, 0x00, + 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00, 0xc0, + 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x27, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x27, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x04, 0x00, 0x27, 0x00, + 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, 0xc4, + 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x27, 0x00, 0x00, 0x00, + 0xc5, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, + 0x00, 0x81, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0xc5, 0x00, + 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x32, + 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, + 0x00, 0x50, 0x00, 0x05, 0x00, 0x2b, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xc7, 0x00, + 0x00, 0x00, 0x57, 0x00, 0x06, 0x00, 0x26, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0xc8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, }; -const size_t SPIRV_world_sizeInBytes = 5556; +const size_t SPIRV_world_sizeInBytes = 5784; diff --git a/assets/shader/world.slang b/assets/shader/world.slang index aea28de..8f7a6db 100644 --- a/assets/shader/world.slang +++ b/assets/shader/world.slang @@ -13,6 +13,7 @@ struct VertexShaderInput { struct VertexShaderOutput { float4 pos : SV_POSITION; float2 uv; + uint tile; }; struct PixelShaderOutput { @@ -31,6 +32,8 @@ VertexShaderOutput main_vertex(VertexShaderInput input) { uint tile_type = input.tile_info & 0xffff; uint rotation = (input.tile_info >> 16) & 0x3; + output.tile = tile_type; + float4x4 view_matrix = view(float3(camera_x, camera_y, 0), radians(camera_tilt), camera_distance); float4x4 projection_matrix = projection(radians(fovy_degrees), aspect_ratio, NEAR_PLANE); float4x4 view_projection_matrix = mul(projection_matrix, view_matrix); @@ -73,20 +76,21 @@ VertexShaderOutput main_vertex(VertexShaderInput input) { } [[vk::binding(0, 2)]] -Sampler2D tex1; +Sampler2DArray tex1; [shader("fragment")] PixelShaderOutput main_fragment(VertexShaderOutput input) { PixelShaderOutput output; float2 texture_size; - tex1.GetDimensions(texture_size.x, texture_size.y); + float texture_layers; + tex1.GetDimensions(texture_size.x, texture_size.y, texture_layers); float2 uv = input.uv * texture_size; uv = floor(uv) + min(fract(uv) / fwidth(uv), 1.0) - 0.5; uv /= texture_size; - output.color = tex1.Sample(uv); + output.color = tex1.Sample(float3(uv, input.tile)); return output; } diff --git a/libs/imgui/backends/imgui_impl_sdlgpu3.cpp b/libs/imgui/backends/imgui_impl_sdlgpu3.cpp index 74b9662..e399974 100644 --- a/libs/imgui/backends/imgui_impl_sdlgpu3.cpp +++ b/libs/imgui/backends/imgui_impl_sdlgpu3.cpp @@ -220,6 +220,13 @@ void ImGui_ImplSDLGPU3_RenderDrawData(ImDrawData* draw_data, SDL_GPUCommandBuffe ImGui_ImplSDLGPU3_SetupRenderState(draw_data, pipeline, command_buffer, render_pass, fd, fb_width, fb_height); + // Setup render state structure (for callbacks and custom texture bindings) + ImGuiPlatformIO& platform_io = ImGui::GetPlatformIO(); + ImGui_ImplSDLGPU3_RenderState render_state; + render_state.command_buffer = command_buffer; + render_state.render_pass = render_pass; + platform_io.Renderer_RenderState = &render_state; + // Will project scissor/clipping rectangles into framebuffer space ImVec2 clip_off = draw_data->DisplayPos; // (0,0) unless using multi-viewports ImVec2 clip_scale = draw_data->FramebufferScale; // (1,1) unless using retina display which are often (2,2) @@ -236,7 +243,10 @@ void ImGui_ImplSDLGPU3_RenderDrawData(ImDrawData* draw_data, SDL_GPUCommandBuffe const ImDrawCmd* pcmd = &draw_list->CmdBuffer[cmd_i]; if (pcmd->UserCallback != nullptr) { - pcmd->UserCallback(draw_list, pcmd); + if (pcmd->UserCallback == ImDrawCallback_ResetRenderState) + ImGui_ImplSDLGPU3_SetupRenderState(draw_data, pipeline, command_buffer, render_pass, fd, fb_width, fb_height); + else + pcmd->UserCallback(draw_list, pcmd); } else { diff --git a/libs/imgui/backends/imgui_impl_sdlgpu3.h b/libs/imgui/backends/imgui_impl_sdlgpu3.h index 865139e..2cc032d 100644 --- a/libs/imgui/backends/imgui_impl_sdlgpu3.h +++ b/libs/imgui/backends/imgui_impl_sdlgpu3.h @@ -46,4 +46,13 @@ IMGUI_IMPL_API void ImGui_ImplSDLGPU3_DestroyDeviceObjects(); IMGUI_IMPL_API void ImGui_ImplSDLGPU3_CreateFontsTexture(); IMGUI_IMPL_API void ImGui_ImplSDLGPU3_DestroyFontsTexture(); +// [BETA] Selected render state data shared with callbacks. +// This is temporarily stored in GetPlatformIO().Renderer_RenderState during the ImGui_ImplSDLGPU3_RenderDrawData() call. +// (Please open an issue if you feel you need access to more data) +struct ImGui_ImplSDLGPU3_RenderState +{ + SDL_GPUCommandBuffer* command_buffer; + SDL_GPURenderPass* render_pass; +}; + #endif // #ifndef IMGUI_DISABLE diff --git a/patches/0002-imgui-add-callback-support-for-sdlgpu3-backend.patch b/patches/0002-imgui-add-callback-support-for-sdlgpu3-backend.patch new file mode 100644 index 0000000..c44a1b8 --- /dev/null +++ b/patches/0002-imgui-add-callback-support-for-sdlgpu3-backend.patch @@ -0,0 +1,60 @@ +From 3c421b0502a4fed7fcc72cce6e99e40986cdb9a7 Mon Sep 17 00:00:00 2001 +From: Sven Balzer <4653051+Kyuusokuna@users.noreply.github.com> +Date: Thu, 20 Mar 2025 12:10:23 +0100 +Subject: [PATCH] add callback support for imgui sdlgpu3 backend +--- + libs/imgui/backends/imgui_impl_sdlgpu3.cpp | 12 +++++++++++- + libs/imgui/backends/imgui_impl_sdlgpu3.h | 9 +++++++++ + 2 files changed, 20 insertions(+), 1 deletion(-) + +diff --git a/libs/imgui/backends/imgui_impl_sdlgpu3.cpp b/libs/imgui/backends/imgui_impl_sdlgpu3.cpp +index 74b9662..e399974 100644 +--- a/libs/imgui/backends/imgui_impl_sdlgpu3.cpp ++++ b/libs/imgui/backends/imgui_impl_sdlgpu3.cpp +@@ -220,6 +220,13 @@ void ImGui_ImplSDLGPU3_RenderDrawData(ImDrawData* draw_data, SDL_GPUCommandBuffe + + ImGui_ImplSDLGPU3_SetupRenderState(draw_data, pipeline, command_buffer, render_pass, fd, fb_width, fb_height); + ++ // Setup render state structure (for callbacks and custom texture bindings) ++ ImGuiPlatformIO& platform_io = ImGui::GetPlatformIO(); ++ ImGui_ImplSDLGPU3_RenderState render_state; ++ render_state.command_buffer = command_buffer; ++ render_state.render_pass = render_pass; ++ platform_io.Renderer_RenderState = &render_state; ++ + // Will project scissor/clipping rectangles into framebuffer space + ImVec2 clip_off = draw_data->DisplayPos; // (0,0) unless using multi-viewports + ImVec2 clip_scale = draw_data->FramebufferScale; // (1,1) unless using retina display which are often (2,2) +@@ -236,7 +243,10 @@ void ImGui_ImplSDLGPU3_RenderDrawData(ImDrawData* draw_data, SDL_GPUCommandBuffe + const ImDrawCmd* pcmd = &draw_list->CmdBuffer[cmd_i]; + if (pcmd->UserCallback != nullptr) + { +- pcmd->UserCallback(draw_list, pcmd); ++ if (pcmd->UserCallback == ImDrawCallback_ResetRenderState) ++ ImGui_ImplSDLGPU3_SetupRenderState(draw_data, pipeline, command_buffer, render_pass, fd, fb_width, fb_height); ++ else ++ pcmd->UserCallback(draw_list, pcmd); + } + else + { +diff --git a/libs/imgui/backends/imgui_impl_sdlgpu3.h b/libs/imgui/backends/imgui_impl_sdlgpu3.h +index 865139e..2cc032d 100644 +--- a/libs/imgui/backends/imgui_impl_sdlgpu3.h ++++ b/libs/imgui/backends/imgui_impl_sdlgpu3.h +@@ -46,4 +46,13 @@ IMGUI_IMPL_API void ImGui_ImplSDLGPU3_DestroyDeviceObjects(); + IMGUI_IMPL_API void ImGui_ImplSDLGPU3_CreateFontsTexture(); + IMGUI_IMPL_API void ImGui_ImplSDLGPU3_DestroyFontsTexture(); + ++// [BETA] Selected render state data shared with callbacks. ++// This is temporarily stored in GetPlatformIO().Renderer_RenderState during the ImGui_ImplSDLGPU3_RenderDrawData() call. ++// (Please open an issue if you feel you need access to more data) ++struct ImGui_ImplSDLGPU3_RenderState ++{ ++ SDL_GPUCommandBuffer* command_buffer; ++ SDL_GPURenderPass* render_pass; ++}; ++ + #endif // #ifndef IMGUI_DISABLE +-- +2.49.0 + diff --git a/src/main.cpp b/src/main.cpp index e70382c..d1199c1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,7 +8,6 @@ #include #include -#include "smol-atlas.h" #include "defer.h" #include "log.h" #include "m_string.h" @@ -18,18 +17,23 @@ #include "../assets/shader/basic.h" #include "../assets/shader/world.h" +#include "../assets/shader/gui_tile.h" using namespace M; #define NEAR_PLANE (0.01f) +#define TILE_SIZE (32) static SDL_GPUDevice *device; static SDL_Window *window; static SDL_GPUGraphicsPipeline *basic_graphics_pipeline; static SDL_GPUGraphicsPipeline *world_graphics_pipeline; +static SDL_GPUGraphicsPipeline *gui_tile_graphics_pipeline; static SDL_GPUSampler *pixel_sampler; +SDL_GPUTexture *tile_textures_array; + static SDL_GPUBuffer *vertex_buffer; static SDL_GPUBuffer *index_buffer; static SDL_GPUBuffer *player_instance_buffer; @@ -128,9 +132,6 @@ static TileInfo tile_infos[] = { { 0x0402, "../assets/tiles/grass_ground_inner_corner.png" }, }; -static int tile_atlas_size = 256; -static smol_atlas_t *tile_atlas; - static V4 cpu_tile_infos_buffer[SDL_arraysize(tile_infos)]; static Sint32 selected_tile = -1; @@ -490,7 +491,15 @@ static void blit(char *dst, Sint32 dst_pitch, Sint32 dst_x, Sint32 dst_y, char * memmove(&dst[((dst_y + y) * dst_pitch + dst_x) * components], &src[y * src_pitch * components], width * components); } -static bool SelectableImage(const char *label, bool selected, SDL_GPUTextureSamplerBinding *image, const ImVec2& image_size, const ImVec2& uv0 = ImVec2(0, 0), const ImVec2& uv1 = ImVec2(1, 1), Uint8 orientation = 0) { +static void imgui_tiles_draw_callback(const ImDrawList *parent_list, const ImDrawCmd *cmd) { + ImGui_ImplSDLGPU3_RenderState *render_state = (ImGui_ImplSDLGPU3_RenderState *)ImGui::GetPlatformIO().Renderer_RenderState; + SDL_BindGPUGraphicsPipeline(render_state->render_pass, gui_tile_graphics_pipeline); + + Uint32 tile_index = *(Uint32 *)cmd->UserCallbackData; + SDL_PushGPUFragmentUniformData(render_state->command_buffer, 0, &tile_index, sizeof(Uint32)); +} + +static bool SelectableTile(const char *label, bool selected, SDL_GPUTextureSamplerBinding *image, Uint32 tile_index, const ImVec2& image_size, const ImVec2& uv0 = ImVec2(0, 0), const ImVec2& uv1 = ImVec2(1, 1), Uint8 orientation = 0) { const ImGuiContext *context = ImGui::GetCurrentContext(); const ImVec2 padding = context->Style.FramePadding; @@ -500,6 +509,7 @@ static bool SelectableImage(const char *label, bool selected, SDL_GPUTextureSamp ImVec2 max = ImGui::GetItemRectMax(); if (image) { + context->CurrentWindow->DrawList->AddCallback(imgui_tiles_draw_callback, (void *)&tile_index, sizeof(Uint32)); switch (orientation) { case 0: context->CurrentWindow->DrawList->AddImageQuad((ImTextureID)image, min + padding, ImVec2(max.x - padding.x, min.y + padding.y), max - padding, ImVec2(min.x + padding.x, max.y - padding.y), ImVec2(uv0.x, uv0.y), ImVec2(uv1.x, uv0.y), ImVec2(uv1.x, uv1.y), ImVec2(uv0.x, uv1.y)); break; case 1: context->CurrentWindow->DrawList->AddImageQuad((ImTextureID)image, min + padding, ImVec2(max.x - padding.x, min.y + padding.y), max - padding, ImVec2(min.x + padding.x, max.y - padding.y), ImVec2(uv1.x, uv0.y), ImVec2(uv1.x, uv1.y), ImVec2(uv0.x, uv1.y), ImVec2(uv0.x, uv0.y)); break; @@ -507,6 +517,7 @@ static bool SelectableImage(const char *label, bool selected, SDL_GPUTextureSamp case 3: context->CurrentWindow->DrawList->AddImageQuad((ImTextureID)image, min + padding, ImVec2(max.x - padding.x, min.y + padding.y), max - padding, ImVec2(min.x + padding.x, max.y - padding.y), ImVec2(uv0.x, uv1.y), ImVec2(uv0.x, uv0.y), ImVec2(uv1.x, uv0.y), ImVec2(uv1.x, uv1.y)); break; default: SDL_assert_always(false); break; } + context->CurrentWindow->DrawList->AddCallback(ImDrawCallback_ResetRenderState, NULL); } return pressed; @@ -593,7 +604,7 @@ static bool recreate_graphics_pipelines() { { .format = SDL_GetGPUSwapchainTextureFormat(device, window), .blend_state = { - .src_color_blendfactor = SDL_GPU_BLENDFACTOR_ONE, + .src_color_blendfactor = SDL_GPU_BLENDFACTOR_SRC_ALPHA, .dst_color_blendfactor = SDL_GPU_BLENDFACTOR_ONE_MINUS_SRC_ALPHA, .color_blend_op = SDL_GPU_BLENDOP_ADD, @@ -825,6 +836,217 @@ static bool recreate_graphics_pipelines() { SDL_ReleaseGPUShader(device, world_pixel_shader); } + { // gui_tile_graphics_pipeline + SDL_GPUShaderCreateInfo gui_tile_vertex_shader_info = { + .code_size = SDL_arraysize(SPIRV_gui_tile), + .code = SPIRV_gui_tile, + .entrypoint = "main_vertex", + .format = SDL_GPU_SHADERFORMAT_SPIRV, + .stage = SDL_GPU_SHADERSTAGE_VERTEX, + + .num_uniform_buffers = 1, + }; + + SDL_GPUShader *gui_tile_vertex_shader = SDL_CreateGPUShader(device, &gui_tile_vertex_shader_info); + if (!gui_tile_vertex_shader) { + log_error("Failed to create gui_tile vertex shader. Exiting."); + return false; + } + + SDL_GPUShaderCreateInfo gui_tile_pixel_shader_info = { + .code_size = SDL_arraysize(SPIRV_gui_tile), + .code = SPIRV_gui_tile, + .entrypoint = "main_fragment", + .format = SDL_GPU_SHADERFORMAT_SPIRV, + .stage = SDL_GPU_SHADERSTAGE_FRAGMENT, + + .num_samplers = 1, + .num_uniform_buffers = 1, + }; + + SDL_GPUShader *gui_tile_pixel_shader = SDL_CreateGPUShader(device, &gui_tile_pixel_shader_info); + if (!gui_tile_pixel_shader) { + log_error("Failed to create gui_tile pixel shader. Exiting."); + return false; + } + + SDL_GPUVertexBufferDescription vertex_buffer_descriptions[] = { + { + .slot = 0, + .pitch = sizeof(ImDrawVert), + .input_rate = SDL_GPU_VERTEXINPUTRATE_VERTEX, + }, + { + .slot = 1, + .pitch = sizeof(Uint32), + .input_rate = SDL_GPU_VERTEXINPUTRATE_INSTANCE, + .instance_step_rate = 1, + }, + }; + + SDL_GPUVertexAttribute vertex_attributes[] = { + { + .location = 0, + .buffer_slot = 0, + .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT2, + .offset = offsetof(ImDrawVert, pos), + }, + { + .location = 1, + .buffer_slot = 0, + .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT2, + .offset = offsetof(ImDrawVert, uv), + }, + { + .location = 2, + .buffer_slot = 0, + .format = SDL_GPU_VERTEXELEMENTFORMAT_UBYTE4_NORM, + .offset = offsetof(ImDrawVert, col), + }, + }; + + SDL_GPUGraphicsPipelineCreateInfo gui_tile_graphics_pipeline_info = { + .vertex_shader = gui_tile_vertex_shader, + .fragment_shader = gui_tile_pixel_shader, + .vertex_input_state = { + .vertex_buffer_descriptions = vertex_buffer_descriptions, + .num_vertex_buffers = SDL_arraysize(vertex_buffer_descriptions), + .vertex_attributes = vertex_attributes, + .num_vertex_attributes = SDL_arraysize(vertex_attributes), + }, + .primitive_type = SDL_GPU_PRIMITIVETYPE_TRIANGLELIST, + .rasterizer_state = { + .fill_mode = SDL_GPU_FILLMODE_FILL, + .cull_mode = SDL_GPU_CULLMODE_NONE, + .front_face = SDL_GPU_FRONTFACE_COUNTER_CLOCKWISE, + }, + .target_info = { + .color_target_descriptions = color_target_descriptions, + .num_color_targets = SDL_arraysize(color_target_descriptions), + }, + }; + + if (gui_tile_graphics_pipeline) { + SDL_ReleaseGPUGraphicsPipeline(device, gui_tile_graphics_pipeline); + gui_tile_graphics_pipeline = NULL; + } + + gui_tile_graphics_pipeline = SDL_CreateGPUGraphicsPipeline(device, &gui_tile_graphics_pipeline_info); + if (!gui_tile_graphics_pipeline) { + log_error("Failed to create world graphics pipeline. Exiting."); + return 1; + } + + SDL_ReleaseGPUShader(device, gui_tile_vertex_shader); + SDL_ReleaseGPUShader(device, gui_tile_pixel_shader); + } + + return true; +} + +bool recreate_tile_textures() { + SDL_PropertiesID tile_textures_array_properties = SDL_CreateProperties(); + defer(SDL_DestroyProperties(tile_textures_array_properties)); + + SDL_SetStringProperty(tile_textures_array_properties, SDL_PROP_GPU_TEXTURE_CREATE_NAME_STRING, "tile_textures_array"); + + SDL_GPUTextureCreateInfo tile_textures_array_info = { + .type = SDL_GPU_TEXTURETYPE_2D_ARRAY, + .format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM_SRGB, + .usage = SDL_GPU_TEXTUREUSAGE_SAMPLER, + .width = TILE_SIZE, + .height = TILE_SIZE, + + .layer_count_or_depth = SDL_arraysize(tile_infos), + .num_levels = 1, + + .props = tile_textures_array_properties, + }; + + tile_textures_array = SDL_CreateGPUTexture(device, &tile_textures_array_info); + if (!tile_textures_array) { + log_error("Failed to create gpu tiles_texture (%s).", SDL_GetError()); + return 1; + } + + Uint32 transfer_buffer_size = TILE_SIZE * TILE_SIZE * 4 * SDL_arraysize(tile_infos); + SDL_GPUTransferBufferCreateInfo transfer_buffer_info = { + .usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD, + .size = transfer_buffer_size, + }; + + SDL_GPUTransferBuffer *transfer_buffer = SDL_CreateGPUTransferBuffer(device, &transfer_buffer_info); + if (!transfer_buffer) { + log_error("Failed to create gpu transfer buffer (%s).", SDL_GetError()); + SDL_ReleaseGPUTexture(device, tile_textures_array); + return false; + } + defer(SDL_ReleaseGPUTransferBuffer(device, transfer_buffer)); + + SDL_GPUCommandBuffer *command_buffer = SDL_AcquireGPUCommandBuffer(device); + if (!command_buffer) { + log_error("Failed to acquire gpu command buffer (%s).", SDL_GetError()); + SDL_ReleaseGPUTexture(device, tile_textures_array); + return false; + } + + SDL_GPUCopyPass *copy_pass = SDL_BeginGPUCopyPass(command_buffer); + + void *transfer_data = SDL_MapGPUTransferBuffer(device, transfer_buffer, false); + if (!transfer_data) { + log_error("Failed to map gpu transfer buffer (%s).", SDL_GetError()); + SDL_ReleaseGPUTexture(device, tile_textures_array); + return false; + } + + for (Uint32 i = 0; i < SDL_arraysize(tile_infos); i++) { + int width = 0, height = 0; + stbi_uc *data = stbi_load(tile_infos[i].asset_path, &width, &height, NULL, 4); + if (!data) { + log_error("Failed to load texture (\"%s\"). Exiting.", tile_infos[i].asset_path); + SDL_ReleaseGPUTexture(device, tile_textures_array); + SDL_CancelGPUCommandBuffer(command_buffer); + return false; + } + + SDL_assert_always(width == TILE_SIZE); + SDL_assert_always(height == TILE_SIZE); + + tile_infos[i].uv_min = V2_(0, 0); + tile_infos[i].uv_max = V2_(1, 1); + + cpu_tile_infos_buffer[i] = V4_(tile_infos[i].uv_min, tile_infos[i].uv_max); + + memmove((char *)transfer_data + i * width * height * 4, data, width * height * 4); + stbi_image_free(data); + + SDL_GPUTextureTransferInfo transfer_info = { + .transfer_buffer = transfer_buffer, + .offset = i * width * height * 4, + .pixels_per_row = (Uint32)width, + }; + + SDL_GPUTextureRegion tetxure_region = { + .texture = tile_textures_array, + .layer = i, + .w = (Uint32)width, + .h = (Uint32)height, + .d = 1, + }; + + SDL_UploadToGPUTexture(copy_pass, &transfer_info, &tetxure_region, false); + } + + SDL_UnmapGPUTransferBuffer(device, transfer_buffer); + SDL_EndGPUCopyPass(copy_pass); + + if (!SDL_SubmitGPUCommandBuffer(command_buffer)) { + log_error("Failed to submit gpu command buffer (%s).", SDL_GetError()); + SDL_ReleaseGPUTexture(device, tile_textures_array); + SDL_CancelGPUCommandBuffer(command_buffer); + return false; + } + return true; } @@ -867,7 +1089,10 @@ int main(int argc, char **argv) { highest_supported_sample_count = SDL_GPUTextureSupportsSampleCount(device, swapchain_format, SDL_GPU_SAMPLECOUNT_4) ? SDL_GPU_SAMPLECOUNT_4 : highest_supported_sample_count; highest_supported_sample_count = SDL_GPUTextureSupportsSampleCount(device, swapchain_format, SDL_GPU_SAMPLECOUNT_8) ? SDL_GPU_SAMPLECOUNT_8 : highest_supported_sample_count; - recreate_graphics_pipelines(); + if (!recreate_graphics_pipelines()) { + log_error("Failed to create graphics pipelines. Exiting."); + return 1; + } SDL_GPUTexture *player_texture = create_shader_texture("../assets/decorations/strawberry.png"); if (!player_texture) { @@ -875,60 +1100,8 @@ int main(int argc, char **argv) { return 1; } - int tile_border_size = 4; - tile_atlas = sma_atlas_create(tile_atlas_size, tile_atlas_size); - char *tile_atlas_texture_cpu = (char *)calloc(1, tile_atlas_size * tile_atlas_size * 4); - for (int i = 0; i < SDL_arraysize(tile_infos); i++) { - int width = 0, height = 0; - stbi_uc *data = stbi_load(tile_infos[i].asset_path, &width, &height, NULL, 4); - if (!data) { - log_error("Failed to load texture (\"%s\"). Exiting.", tile_infos[i].asset_path); - return 1; - } - - smol_atlas_item_t *atlas_item = sma_item_add(tile_atlas, width + 2 * tile_border_size, height + 2 * tile_border_size); - if (!atlas_item) { - log_error("Failed to add tile texture to atlas. Exiting."); - return 1; - } - int item_x = sma_item_x(atlas_item); - int item_y = sma_item_y(atlas_item); - - tile_infos[i].uv_min = V2_((item_x + tile_border_size) / (float)tile_atlas_size, (item_y + tile_border_size) / (float)tile_atlas_size); - tile_infos[i].uv_max = V2_((item_x + tile_border_size + width) / (float)tile_atlas_size, (item_y + tile_border_size + height) / (float)tile_atlas_size); - - cpu_tile_infos_buffer[i] = V4_(tile_infos[i].uv_min, tile_infos[i].uv_max); - - blit(tile_atlas_texture_cpu, tile_atlas_size, item_x + tile_border_size, item_y + tile_border_size, (char *)data, width, width, height); - - #define image_index(image, width, components, x, y) (*(((char *)(image)) + (((y) * (width) + (x)) * (components)))) - for (int j = 0; j < tile_border_size; j++) { - // HORIZONTAL EDGES - blit(tile_atlas_texture_cpu, tile_atlas_size, item_x + tile_border_size, item_y + j, &image_index(data, width, 4, 0, 0), width, width, 1); - blit(tile_atlas_texture_cpu, tile_atlas_size, item_x + tile_border_size, item_y + tile_border_size + height + j, &image_index(data, width, 4, 0, height - 1), width, width, 1); - // VERTICAL EDGES - blit(tile_atlas_texture_cpu, tile_atlas_size, item_x + j, item_y + tile_border_size, &image_index(data, width, 4, 0, 0), width, 1, height); - blit(tile_atlas_texture_cpu, tile_atlas_size, item_x + tile_border_size + width + j, item_y + tile_border_size, &image_index(data, width, 4, width - 1, 0), width, 1, height); - } - - for (int y = 0; y < tile_border_size; y++) { - for (int x = 0; x < tile_border_size; x++) { - // TOP CORNERS - *(Uint32 *)&image_index(tile_atlas_texture_cpu, tile_atlas_size, 4, item_x + x, item_y + y) = *(Uint32 *)&image_index(data, width, 4, 0, 0); - *(Uint32 *)&image_index(tile_atlas_texture_cpu, tile_atlas_size, 4, item_x + tile_border_size + width + x, item_y + y) = *(Uint32 *)&image_index(data, width, 4, width - 1, 0); - // BOTTOM CORNERS - *(Uint32 *)&image_index(tile_atlas_texture_cpu, tile_atlas_size, 4, item_x + x, item_y + tile_border_size + height + y) = *(Uint32 *)&image_index(data, width, 4, 0, height - 1); - *(Uint32 *)&image_index(tile_atlas_texture_cpu, tile_atlas_size, 4, item_x + tile_border_size + width + x, item_y + tile_border_size + height + y) = *(Uint32 *)&image_index(data, width, 4, width - 1, height - 1); - } - } - stbi_image_free(data); - } - sma_atlas_destroy(tile_atlas); - - SDL_GPUTexture *tile_atlas_texture = create_shader_texture("tile_atlas", tile_atlas_texture_cpu, tile_atlas_size, tile_atlas_size, 4); - free(tile_atlas_texture_cpu); - if (!tile_atlas_texture) { - log_error("Failed to create tile atlas texture. Exiting."); + if (!recreate_tile_textures()) { + log_error("Failed to create tile textures. Exiting."); return 1; } @@ -946,7 +1119,7 @@ int main(int argc, char **argv) { }; pixel_sampler = SDL_CreateGPUSampler(device, &pixel_sampler_info); - SDL_GPUTextureSamplerBinding tile_atlas_texture_binding = { .texture = tile_atlas_texture, .sampler = pixel_sampler }; + SDL_GPUTextureSamplerBinding tile_atlas_texture_binding = { .texture = tile_textures_array, .sampler = pixel_sampler }; vertex_buffer = create_buffer(SDL_GPU_BUFFERUSAGE_VERTEX, sizeof(vertices), vertices, "vertex_buffer"); if (!vertex_buffer) { @@ -1017,7 +1190,7 @@ int main(int argc, char **argv) { ImGui::SetNextWindowSizeConstraints(ImVec2(0, window_height), ImVec2(window_width, window_height)); ImGui::SetNextWindowSize(ImVec2(0.2 * window_width, window_height), ImGuiCond_FirstUseEver); if (ImGui::Begin("Tile Picker", NULL, ImGuiWindowFlags_NoFocusOnAppearing)) { - if (SelectableImage("##tile", selected_tile == -1, NULL, ImVec2(32, 32))) { + if (SelectableTile("##tile", selected_tile == -1, NULL, 0, ImVec2(32, 32))) { selected_tile = -1; } @@ -1031,7 +1204,7 @@ int main(int argc, char **argv) { if (available >= 32) ImGui::SameLine(); - if (SelectableImage("##tile", selected_tile == i, &tile_atlas_texture_binding, ImVec2(32, 32), uv0, uv1, SDL_max(selected_rotation, 0))) + if (SelectableTile("##tile", selected_tile == i, &tile_atlas_texture_binding, i, ImVec2(32, 32), uv0, uv1, SDL_max(selected_rotation, 0))) selected_tile = i; ImGui::PopID(); @@ -1043,25 +1216,25 @@ int main(int argc, char **argv) { ImVec2 uv0 = ImVec2(tile_infos[selected_tile].uv_min.x, tile_infos[selected_tile].uv_min.y); ImVec2 uv1 = ImVec2(tile_infos[selected_tile].uv_max.x, tile_infos[selected_tile].uv_max.y); - if (SelectableImage("##None", selected_rotation == 0, &tile_atlas_texture_binding, ImVec2(32, 32), uv0, uv1, 0)) + if (SelectableTile("##None", selected_rotation == 0, &tile_atlas_texture_binding, selected_tile, ImVec2(32, 32), uv0, uv1, 0)) selected_rotation = 0; if (ImGui::GetContentRegionAvail().x - ImGui::GetItemRectMax().x >= 32) ImGui::SameLine(); - if (SelectableImage("##90", selected_rotation == 1, &tile_atlas_texture_binding, ImVec2(32, 32), uv0, uv1, 1)) + if (SelectableTile("##90", selected_rotation == 1, &tile_atlas_texture_binding, selected_tile, ImVec2(32, 32), uv0, uv1, 1)) selected_rotation = 1; if (ImGui::GetContentRegionAvail().x - ImGui::GetItemRectMax().x >= 32) ImGui::SameLine(); - if (SelectableImage("##180", selected_rotation == 2, &tile_atlas_texture_binding, ImVec2(32, 32), uv0, uv1, 2)) + if (SelectableTile("##180", selected_rotation == 2, &tile_atlas_texture_binding, selected_tile, ImVec2(32, 32), uv0, uv1, 2)) selected_rotation = 2; if (ImGui::GetContentRegionAvail().x - ImGui::GetItemRectMax().x >= 32) ImGui::SameLine(); - if (SelectableImage("##270", selected_rotation == 3, &tile_atlas_texture_binding, ImVec2(32, 32), uv0, uv1, 3)) + if (SelectableTile("##270", selected_rotation == 3, &tile_atlas_texture_binding, selected_tile, ImVec2(32, 32), uv0, uv1, 3)) selected_rotation = 3; if (ImGui::Selectable("Random", selected_rotation == -1)) @@ -1341,7 +1514,7 @@ int main(int argc, char **argv) { { .buffer = world_buffer, .offset = 0 }, }; SDL_GPUTextureSamplerBinding texture_bindings[] = { - { .texture = tile_atlas_texture, .sampler = pixel_sampler }, + { .texture = tile_textures_array, .sampler = pixel_sampler }, }; SDL_BindGPUGraphicsPipeline(render_pass, world_graphics_pipeline);