mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-15 22:54:00 +00:00
Merge pull request #2897 from DarkLordZach/oss-ext-fonts-1
pl_u: Move open source font archives and fix NAND error
This commit is contained in:
commit
0378babd15
33 changed files with 73480 additions and 111852 deletions
3
externals/CMakeLists.txt
vendored
3
externals/CMakeLists.txt
vendored
|
@ -42,9 +42,6 @@ target_include_directories(mbedtls PUBLIC ./mbedtls/include)
|
||||||
add_library(microprofile INTERFACE)
|
add_library(microprofile INTERFACE)
|
||||||
target_include_directories(microprofile INTERFACE ./microprofile)
|
target_include_directories(microprofile INTERFACE ./microprofile)
|
||||||
|
|
||||||
# Open Source Archives
|
|
||||||
add_subdirectory(open_source_archives EXCLUDE_FROM_ALL)
|
|
||||||
|
|
||||||
# Unicorn
|
# Unicorn
|
||||||
add_library(unicorn-headers INTERFACE)
|
add_library(unicorn-headers INTERFACE)
|
||||||
target_include_directories(unicorn-headers INTERFACE ./unicorn/include)
|
target_include_directories(unicorn-headers INTERFACE ./unicorn/include)
|
||||||
|
|
16
externals/open_source_archives/CMakeLists.txt
vendored
16
externals/open_source_archives/CMakeLists.txt
vendored
|
@ -1,16 +0,0 @@
|
||||||
add_library(open_source_archives
|
|
||||||
src/FontChineseSimplified.cpp
|
|
||||||
src/FontChineseTraditional.cpp
|
|
||||||
src/FontExtendedChineseSimplified.cpp
|
|
||||||
src/FontKorean.cpp
|
|
||||||
src/FontNintendoExtended.cpp
|
|
||||||
src/FontStandard.cpp
|
|
||||||
include/FontChineseSimplified.h
|
|
||||||
include/FontChineseTraditional.h
|
|
||||||
include/FontExtendedChineseSimplified.h
|
|
||||||
include/FontKorean.h
|
|
||||||
include/FontNintendoExtended.h
|
|
||||||
include/FontStandard.h
|
|
||||||
)
|
|
||||||
|
|
||||||
target_include_directories(open_source_archives PUBLIC include)
|
|
4
externals/open_source_archives/Readme.md
vendored
4
externals/open_source_archives/Readme.md
vendored
|
@ -1,4 +0,0 @@
|
||||||
These files were generated by https://github.com/FearlessTobi/yuzu_system_archives at git commit 0a24b0c9f38d71fb2c4bba5645a39029e539a5ec. To generate the files use the run.sh inside that repository.
|
|
||||||
|
|
||||||
The follwing system archives are currently included:
|
|
||||||
- JPN/EUR/USA System Font
|
|
|
@ -1,6 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <array>
|
|
||||||
|
|
||||||
extern const std::array<unsigned char, 217276> FontChineseSimplified;
|
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <array>
|
|
||||||
|
|
||||||
extern const std::array<unsigned char, 222236> FontChineseTraditional;
|
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <array>
|
|
||||||
|
|
||||||
extern const std::array<unsigned char, 293516> FontExtendedChineseSimplified;
|
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <array>
|
|
||||||
|
|
||||||
extern const std::array<unsigned char, 217276> FontKorean;
|
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <array>
|
|
||||||
|
|
||||||
extern const std::array<unsigned char, 172064> FontNintendoExtended;
|
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <array>
|
|
||||||
|
|
||||||
extern const std::array<unsigned char, 217276> FontStandard;
|
|
||||||
|
|
18112
externals/open_source_archives/src/FontChineseSimplified.cpp
vendored
18112
externals/open_source_archives/src/FontChineseSimplified.cpp
vendored
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
18112
externals/open_source_archives/src/FontKorean.cpp
vendored
18112
externals/open_source_archives/src/FontKorean.cpp
vendored
File diff suppressed because it is too large
Load diff
14344
externals/open_source_archives/src/FontNintendoExtended.cpp
vendored
14344
externals/open_source_archives/src/FontNintendoExtended.cpp
vendored
File diff suppressed because it is too large
Load diff
18112
externals/open_source_archives/src/FontStandard.cpp
vendored
18112
externals/open_source_archives/src/FontStandard.cpp
vendored
File diff suppressed because it is too large
Load diff
|
@ -74,10 +74,24 @@ add_library(core STATIC
|
||||||
file_sys/sdmc_factory.h
|
file_sys/sdmc_factory.h
|
||||||
file_sys/submission_package.cpp
|
file_sys/submission_package.cpp
|
||||||
file_sys/submission_package.h
|
file_sys/submission_package.h
|
||||||
|
file_sys/system_archive/data/font_chinese_simplified.cpp
|
||||||
|
file_sys/system_archive/data/font_chinese_simplified.h
|
||||||
|
file_sys/system_archive/data/font_chinese_traditional.cpp
|
||||||
|
file_sys/system_archive/data/font_chinese_traditional.h
|
||||||
|
file_sys/system_archive/data/font_extended_chinese_simplified.cpp
|
||||||
|
file_sys/system_archive/data/font_extended_chinese_simplified.h
|
||||||
|
file_sys/system_archive/data/font_korean.cpp
|
||||||
|
file_sys/system_archive/data/font_korean.h
|
||||||
|
file_sys/system_archive/data/font_nintendo_extended.cpp
|
||||||
|
file_sys/system_archive/data/font_nintendo_extended.h
|
||||||
|
file_sys/system_archive/data/font_standard.cpp
|
||||||
|
file_sys/system_archive/data/font_standard.h
|
||||||
file_sys/system_archive/mii_model.cpp
|
file_sys/system_archive/mii_model.cpp
|
||||||
file_sys/system_archive/mii_model.h
|
file_sys/system_archive/mii_model.h
|
||||||
file_sys/system_archive/ng_word.cpp
|
file_sys/system_archive/ng_word.cpp
|
||||||
file_sys/system_archive/ng_word.h
|
file_sys/system_archive/ng_word.h
|
||||||
|
file_sys/system_archive/shared_font.cpp
|
||||||
|
file_sys/system_archive/shared_font.h
|
||||||
file_sys/system_archive/system_archive.cpp
|
file_sys/system_archive/system_archive.cpp
|
||||||
file_sys/system_archive/system_archive.h
|
file_sys/system_archive/system_archive.h
|
||||||
file_sys/system_archive/system_version.cpp
|
file_sys/system_archive/system_version.cpp
|
||||||
|
@ -511,7 +525,7 @@ add_library(core STATIC
|
||||||
create_target_directory_groups(core)
|
create_target_directory_groups(core)
|
||||||
|
|
||||||
target_link_libraries(core PUBLIC common PRIVATE audio_core video_core)
|
target_link_libraries(core PUBLIC common PRIVATE audio_core video_core)
|
||||||
target_link_libraries(core PUBLIC Boost::boost PRIVATE fmt json-headers mbedtls opus unicorn open_source_archives)
|
target_link_libraries(core PUBLIC Boost::boost PRIVATE fmt json-headers mbedtls opus unicorn)
|
||||||
|
|
||||||
if (YUZU_ENABLE_BOXCAT)
|
if (YUZU_ENABLE_BOXCAT)
|
||||||
get_directory_property(OPENSSL_LIBS
|
get_directory_property(OPENSSL_LIBS
|
||||||
|
|
13592
src/core/file_sys/system_archive/data/font_chinese_simplified.cpp
Normal file
13592
src/core/file_sys/system_archive/data/font_chinese_simplified.cpp
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,13 @@
|
||||||
|
// Copyright 2019 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
namespace FileSys::SystemArchive::SharedFontData {
|
||||||
|
|
||||||
|
extern const std::array<unsigned char, 217276> FONT_CHINESE_SIMPLIFIED;
|
||||||
|
|
||||||
|
} // namespace FileSys::SystemArchive::SharedFontData
|
13902
src/core/file_sys/system_archive/data/font_chinese_traditional.cpp
Normal file
13902
src/core/file_sys/system_archive/data/font_chinese_traditional.cpp
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,13 @@
|
||||||
|
// Copyright 2019 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
namespace FileSys::SystemArchive::SharedFontData {
|
||||||
|
|
||||||
|
extern const std::array<unsigned char, 222236> FONT_CHINESE_TRADITIONAL;
|
||||||
|
|
||||||
|
} // namespace FileSys::SystemArchive::SharedFontData
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,13 @@
|
||||||
|
// Copyright 2019 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
namespace FileSys::SystemArchive::SharedFontData {
|
||||||
|
|
||||||
|
extern const std::array<unsigned char, 293516> FONT_EXTENDED_CHINESE_SIMPLIFIED;
|
||||||
|
|
||||||
|
} // namespace FileSys::SystemArchive::SharedFontData
|
13592
src/core/file_sys/system_archive/data/font_korean.cpp
Normal file
13592
src/core/file_sys/system_archive/data/font_korean.cpp
Normal file
File diff suppressed because it is too large
Load diff
13
src/core/file_sys/system_archive/data/font_korean.h
Normal file
13
src/core/file_sys/system_archive/data/font_korean.h
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
// Copyright 2019 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
namespace FileSys::SystemArchive::SharedFontData {
|
||||||
|
|
||||||
|
extern const std::array<unsigned char, 217276> FONT_KOREAN;
|
||||||
|
|
||||||
|
} // namespace FileSys::SystemArchive::SharedFontData
|
196
src/core/file_sys/system_archive/data/font_nintendo_extended.cpp
Normal file
196
src/core/file_sys/system_archive/data/font_nintendo_extended.cpp
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
// Copyright 2019 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#include "core/file_sys/system_archive/data/font_nintendo_extended.h"
|
||||||
|
|
||||||
|
namespace FileSys::SystemArchive::SharedFontData {
|
||||||
|
|
||||||
|
const std::array<unsigned char, 2932> FONT_NINTENDO_EXTENDED{{
|
||||||
|
0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x00, 0x03, 0x00, 0x70, 0x44, 0x53, 0x49, 0x47,
|
||||||
|
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0b, 0x6c, 0x00, 0x00, 0x00, 0x08, 0x4f, 0x53, 0x2f, 0x32,
|
||||||
|
0x33, 0x86, 0x1d, 0x9b, 0x00, 0x00, 0x01, 0x78, 0x00, 0x00, 0x00, 0x60, 0x63, 0x6d, 0x61, 0x70,
|
||||||
|
0xc2, 0x06, 0x20, 0xde, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x63, 0x76, 0x74, 0x20,
|
||||||
|
0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x04, 0x2c, 0x00, 0x00, 0x00, 0x06, 0x66, 0x70, 0x67, 0x6d,
|
||||||
|
0x06, 0x59, 0x9c, 0x37, 0x00, 0x00, 0x02, 0xa0, 0x00, 0x00, 0x01, 0x73, 0x67, 0x61, 0x73, 0x70,
|
||||||
|
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0b, 0x64, 0x00, 0x00, 0x00, 0x08, 0x67, 0x6c, 0x79, 0x66,
|
||||||
|
0x10, 0x31, 0x88, 0x00, 0x00, 0x00, 0x04, 0x34, 0x00, 0x00, 0x04, 0x64, 0x68, 0x65, 0x61, 0x64,
|
||||||
|
0x15, 0x9d, 0xef, 0x91, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x36, 0x68, 0x68, 0x65, 0x61,
|
||||||
|
0x09, 0x60, 0x03, 0x71, 0x00, 0x00, 0x01, 0x34, 0x00, 0x00, 0x00, 0x24, 0x68, 0x6d, 0x74, 0x78,
|
||||||
|
0x0d, 0x2e, 0x03, 0xa7, 0x00, 0x00, 0x01, 0xd8, 0x00, 0x00, 0x00, 0x26, 0x6c, 0x6f, 0x63, 0x61,
|
||||||
|
0x05, 0xc0, 0x04, 0x6c, 0x00, 0x00, 0x08, 0x98, 0x00, 0x00, 0x00, 0x1e, 0x6d, 0x61, 0x78, 0x70,
|
||||||
|
0x02, 0x1c, 0x00, 0x5f, 0x00, 0x00, 0x01, 0x58, 0x00, 0x00, 0x00, 0x20, 0x6e, 0x61, 0x6d, 0x65,
|
||||||
|
0x7c, 0xe0, 0x84, 0x5c, 0x00, 0x00, 0x08, 0xb8, 0x00, 0x00, 0x02, 0x09, 0x70, 0x6f, 0x73, 0x74,
|
||||||
|
0x47, 0x4e, 0x74, 0x19, 0x00, 0x00, 0x0a, 0xc4, 0x00, 0x00, 0x00, 0x9e, 0x70, 0x72, 0x65, 0x70,
|
||||||
|
0x1c, 0xfc, 0x7d, 0x9c, 0x00, 0x00, 0x04, 0x14, 0x00, 0x00, 0x00, 0x16, 0x00, 0x01, 0x00, 0x00,
|
||||||
|
0x00, 0x01, 0x00, 0x00, 0x7c, 0xc7, 0xb1, 0x63, 0x5f, 0x0f, 0x3c, 0xf5, 0x00, 0x1b, 0x03, 0xe8,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0xd9, 0x44, 0x2f, 0x5d, 0x00, 0x00, 0x00, 0x00, 0xd9, 0x45, 0x7b, 0x69,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x03, 0xe6, 0x03, 0xe8, 0x00, 0x00, 0x00, 0x06, 0x00, 0x02, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x84, 0xff, 0x83, 0x01, 0xf4, 0x03, 0xe8,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x03, 0xe6, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x5e,
|
||||||
|
0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00,
|
||||||
|
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x74, 0x01, 0x90, 0x00, 0x05,
|
||||||
|
0x00, 0x04, 0x00, 0xcd, 0x00, 0xcd, 0x00, 0x00, 0x01, 0x1f, 0x00, 0xcd, 0x00, 0xcd, 0x00, 0x00,
|
||||||
|
0x03, 0xc3, 0x00, 0x66, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x00, 0xc0, 0x00, 0x00, 0xe0, 0xe9, 0x03, 0x84, 0xff, 0x83,
|
||||||
|
0x01, 0xf4, 0x02, 0xee, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe8,
|
||||||
|
0x02, 0xbc, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x03, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0xfa, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x03, 0xe8, 0x00, 0xeb, 0x01, 0x21, 0x00, 0xff,
|
||||||
|
0x00, 0xff, 0x01, 0x3d, 0x01, 0x17, 0x00, 0x42, 0x00, 0x1c, 0x00, 0x3e, 0x00, 0x17, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x68, 0x00, 0x01, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x1c, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x06, 0x00, 0x4c,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00, 0x38, 0x00, 0x00, 0x00, 0x0a,
|
||||||
|
0x00, 0x08, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x20, 0xe0, 0xe9, 0xff, 0xff,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x20, 0xe0, 0xe0, 0xff, 0xff, 0x00, 0x01, 0xff, 0xf5,
|
||||||
|
0xff, 0xe3, 0x1f, 0x24, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0xb8, 0x00, 0x00, 0x2c, 0x4b, 0xb8, 0x00, 0x09, 0x50, 0x58, 0xb1, 0x01, 0x01, 0x8e, 0x59, 0xb8,
|
||||||
|
0x01, 0xff, 0x85, 0xb8, 0x00, 0x44, 0x1d, 0xb9, 0x00, 0x09, 0x00, 0x03, 0x5f, 0x5e, 0x2d, 0xb8,
|
||||||
|
0x00, 0x01, 0x2c, 0x20, 0x20, 0x45, 0x69, 0x44, 0xb0, 0x01, 0x60, 0x2d, 0xb8, 0x00, 0x02, 0x2c,
|
||||||
|
0xb8, 0x00, 0x01, 0x2a, 0x21, 0x2d, 0xb8, 0x00, 0x03, 0x2c, 0x20, 0x46, 0xb0, 0x03, 0x25, 0x46,
|
||||||
|
0x52, 0x58, 0x23, 0x59, 0x20, 0x8a, 0x20, 0x8a, 0x49, 0x64, 0x8a, 0x20, 0x46, 0x20, 0x68, 0x61,
|
||||||
|
0x64, 0xb0, 0x04, 0x25, 0x46, 0x20, 0x68, 0x61, 0x64, 0x52, 0x58, 0x23, 0x65, 0x8a, 0x59, 0x2f,
|
||||||
|
0x20, 0xb0, 0x00, 0x53, 0x58, 0x69, 0x20, 0xb0, 0x00, 0x54, 0x58, 0x21, 0xb0, 0x40, 0x59, 0x1b,
|
||||||
|
0x69, 0x20, 0xb0, 0x00, 0x54, 0x58, 0x21, 0xb0, 0x40, 0x65, 0x59, 0x59, 0x3a, 0x2d, 0xb8, 0x00,
|
||||||
|
0x04, 0x2c, 0x20, 0x46, 0xb0, 0x04, 0x25, 0x46, 0x52, 0x58, 0x23, 0x8a, 0x59, 0x20, 0x46, 0x20,
|
||||||
|
0x6a, 0x61, 0x64, 0xb0, 0x04, 0x25, 0x46, 0x20, 0x6a, 0x61, 0x64, 0x52, 0x58, 0x23, 0x8a, 0x59,
|
||||||
|
0x2f, 0xfd, 0x2d, 0xb8, 0x00, 0x05, 0x2c, 0x4b, 0x20, 0xb0, 0x03, 0x26, 0x50, 0x58, 0x51, 0x58,
|
||||||
|
0xb0, 0x80, 0x44, 0x1b, 0xb0, 0x40, 0x44, 0x59, 0x1b, 0x21, 0x21, 0x20, 0x45, 0xb0, 0xc0, 0x50,
|
||||||
|
0x58, 0xb0, 0xc0, 0x44, 0x1b, 0x21, 0x59, 0x59, 0x2d, 0xb8, 0x00, 0x06, 0x2c, 0x20, 0x20, 0x45,
|
||||||
|
0x69, 0x44, 0xb0, 0x01, 0x60, 0x20, 0x20, 0x45, 0x7d, 0x69, 0x18, 0x44, 0xb0, 0x01, 0x60, 0x2d,
|
||||||
|
0xb8, 0x00, 0x07, 0x2c, 0xb8, 0x00, 0x06, 0x2a, 0x2d, 0xb8, 0x00, 0x08, 0x2c, 0x4b, 0x20, 0xb0,
|
||||||
|
0x03, 0x26, 0x53, 0x58, 0xb0, 0x40, 0x1b, 0xb0, 0x00, 0x59, 0x8a, 0x8a, 0x20, 0xb0, 0x03, 0x26,
|
||||||
|
0x53, 0x58, 0x23, 0x21, 0xb0, 0x80, 0x8a, 0x8a, 0x1b, 0x8a, 0x23, 0x59, 0x20, 0xb0, 0x03, 0x26,
|
||||||
|
0x53, 0x58, 0x23, 0x21, 0xb8, 0x00, 0xc0, 0x8a, 0x8a, 0x1b, 0x8a, 0x23, 0x59, 0x20, 0xb0, 0x03,
|
||||||
|
0x26, 0x53, 0x58, 0x23, 0x21, 0xb8, 0x01, 0x00, 0x8a, 0x8a, 0x1b, 0x8a, 0x23, 0x59, 0x20, 0xb0,
|
||||||
|
0x03, 0x26, 0x53, 0x58, 0x23, 0x21, 0xb8, 0x01, 0x40, 0x8a, 0x8a, 0x1b, 0x8a, 0x23, 0x59, 0x20,
|
||||||
|
0xb8, 0x00, 0x03, 0x26, 0x53, 0x58, 0xb0, 0x03, 0x25, 0x45, 0xb8, 0x01, 0x80, 0x50, 0x58, 0x23,
|
||||||
|
0x21, 0xb8, 0x01, 0x80, 0x23, 0x21, 0x1b, 0xb0, 0x03, 0x25, 0x45, 0x23, 0x21, 0x23, 0x21, 0x59,
|
||||||
|
0x1b, 0x21, 0x59, 0x44, 0x2d, 0xb8, 0x00, 0x09, 0x2c, 0x4b, 0x53, 0x58, 0x45, 0x44, 0x1b, 0x21,
|
||||||
|
0x21, 0x59, 0x2d, 0x00, 0xb8, 0x00, 0x00, 0x2b, 0x00, 0xba, 0x00, 0x01, 0x00, 0x01, 0x00, 0x07,
|
||||||
|
0x2b, 0xb8, 0x00, 0x00, 0x20, 0x45, 0x7d, 0x69, 0x18, 0x44, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x03, 0xe6, 0x03, 0xe8, 0x00, 0x06,
|
||||||
|
0x00, 0x00, 0x35, 0x01, 0x33, 0x15, 0x01, 0x23, 0x35, 0x03, 0x52, 0x94, 0xfc, 0xa6, 0x8c, 0x90,
|
||||||
|
0x03, 0x58, 0x86, 0xfc, 0xa0, 0x8e, 0x00, 0x00, 0x00, 0x02, 0x00, 0xeb, 0x00, 0xcc, 0x02, 0xfb,
|
||||||
|
0x03, 0x1e, 0x00, 0x08, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x33, 0x13, 0x23, 0x27, 0x23, 0x07, 0x23,
|
||||||
|
0x13, 0x17, 0x07, 0x06, 0x15, 0x33, 0x27, 0x07, 0x01, 0xbc, 0x6d, 0xd2, 0x7c, 0x26, 0xcc, 0x26,
|
||||||
|
0x7c, 0xd1, 0x35, 0x40, 0x02, 0x89, 0x45, 0x02, 0x03, 0x1e, 0xfd, 0xae, 0x77, 0x77, 0x02, 0x52,
|
||||||
|
0x9b, 0xcc, 0x08, 0x04, 0xda, 0x02, 0x00, 0x00, 0x00, 0x03, 0x01, 0x21, 0x00, 0xcc, 0x02, 0xc5,
|
||||||
|
0x03, 0x1e, 0x00, 0x15, 0x00, 0x1f, 0x00, 0x2b, 0x00, 0x00, 0x25, 0x11, 0x33, 0x32, 0x1e, 0x02,
|
||||||
|
0x15, 0x14, 0x0e, 0x02, 0x07, 0x1e, 0x01, 0x15, 0x14, 0x0e, 0x02, 0x2b, 0x01, 0x13, 0x33, 0x32,
|
||||||
|
0x36, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x1d, 0x01, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x2b,
|
||||||
|
0x01, 0x15, 0x01, 0x21, 0xea, 0x25, 0x3f, 0x2e, 0x1a, 0x0e, 0x15, 0x1b, 0x0e, 0x2d, 0x2d, 0x1a,
|
||||||
|
0x2e, 0x3f, 0x25, 0xf8, 0x76, 0x62, 0x20, 0x2a, 0x28, 0x22, 0x62, 0x76, 0x10, 0x18, 0x11, 0x09,
|
||||||
|
0x22, 0x22, 0x74, 0xcc, 0x02, 0x52, 0x18, 0x2b, 0x3c, 0x24, 0x1d, 0x1f, 0x17, 0x17, 0x14, 0x0f,
|
||||||
|
0x48, 0x2f, 0x24, 0x3f, 0x2e, 0x1a, 0x01, 0x5b, 0x29, 0x20, 0x20, 0x2b, 0x94, 0xf8, 0x0e, 0x16,
|
||||||
|
0x1c, 0x0e, 0x1f, 0x31, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0x00, 0xcc, 0x02, 0xe7,
|
||||||
|
0x03, 0x1e, 0x00, 0x0c, 0x00, 0x00, 0x01, 0x33, 0x17, 0x37, 0x33, 0x03, 0x13, 0x23, 0x27, 0x07,
|
||||||
|
0x23, 0x13, 0x03, 0x01, 0x04, 0x86, 0x69, 0x69, 0x86, 0xa3, 0xa8, 0x88, 0x6c, 0x6c, 0x88, 0xa8,
|
||||||
|
0xa3, 0x03, 0x1e, 0xcb, 0xcb, 0xfe, 0xda, 0xfe, 0xd4, 0xcf, 0xcf, 0x01, 0x2c, 0x01, 0x26, 0x00,
|
||||||
|
0x00, 0x01, 0x00, 0xff, 0x00, 0xcc, 0x02, 0xe7, 0x03, 0x1e, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x03,
|
||||||
|
0x33, 0x17, 0x32, 0x15, 0x1e, 0x01, 0x15, 0x1b, 0x01, 0x33, 0x03, 0x15, 0x23, 0x35, 0x01, 0xb8,
|
||||||
|
0xb9, 0x7e, 0x01, 0x01, 0x01, 0x03, 0x70, 0x75, 0x7f, 0xb9, 0x76, 0x01, 0xa3, 0x01, 0x7b, 0x01,
|
||||||
|
0x01, 0x01, 0x05, 0x02, 0xff, 0x00, 0x01, 0x0a, 0xfe, 0x85, 0xd7, 0xd7, 0x00, 0x01, 0x01, 0x3d,
|
||||||
|
0x00, 0xcc, 0x02, 0xa9, 0x03, 0x1e, 0x00, 0x06, 0x00, 0x00, 0x25, 0x11, 0x33, 0x11, 0x33, 0x15,
|
||||||
|
0x21, 0x01, 0x3d, 0x75, 0xf7, 0xfe, 0x94, 0xcc, 0x02, 0x52, 0xfe, 0x10, 0x62, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x02, 0x01, 0x17, 0x00, 0xbc, 0x02, 0xcf, 0x03, 0x0e, 0x00, 0x15, 0x00, 0x21, 0x00, 0x00,
|
||||||
|
0x25, 0x11, 0x33, 0x32, 0x1e, 0x02, 0x1d, 0x01, 0x0e, 0x03, 0x1d, 0x01, 0x17, 0x15, 0x23, 0x27,
|
||||||
|
0x23, 0x15, 0x23, 0x13, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x15, 0x01, 0x17,
|
||||||
|
0xf4, 0x27, 0x40, 0x2e, 0x19, 0x01, 0x1f, 0x24, 0x1e, 0x78, 0x7d, 0x6a, 0x5c, 0x75, 0x76, 0x72,
|
||||||
|
0x12, 0x19, 0x11, 0x08, 0x26, 0x26, 0x6a, 0xbc, 0x02, 0x52, 0x1d, 0x31, 0x42, 0x25, 0x16, 0x18,
|
||||||
|
0x32, 0x2a, 0x1b, 0x02, 0x01, 0xef, 0x06, 0xd7, 0xd7, 0x01, 0x3f, 0x10, 0x1a, 0x1e, 0x0f, 0x23,
|
||||||
|
0x36, 0xb0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x42, 0x00, 0xbc, 0x03, 0xa4, 0x03, 0x0e, 0x00, 0x0a,
|
||||||
|
0x00, 0x11, 0x00, 0x00, 0x13, 0x35, 0x21, 0x15, 0x01, 0x21, 0x15, 0x21, 0x35, 0x01, 0x21, 0x01,
|
||||||
|
0x11, 0x33, 0x11, 0x33, 0x15, 0x21, 0x42, 0x01, 0xa7, 0xfe, 0xeb, 0x01, 0x1b, 0xfe, 0x53, 0x01,
|
||||||
|
0x15, 0xfe, 0xeb, 0x01, 0xf7, 0x75, 0xf6, 0xfe, 0x95, 0x02, 0xac, 0x62, 0x45, 0xfe, 0x55, 0x62,
|
||||||
|
0x47, 0x01, 0xa9, 0xfe, 0x10, 0x02, 0x52, 0xfe, 0x10, 0x62, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1c,
|
||||||
|
0x00, 0xbc, 0x03, 0xca, 0x03, 0x0e, 0x00, 0x0a, 0x00, 0x21, 0x00, 0x2f, 0x00, 0x00, 0x13, 0x35,
|
||||||
|
0x21, 0x15, 0x01, 0x21, 0x15, 0x21, 0x35, 0x01, 0x21, 0x01, 0x11, 0x33, 0x32, 0x1e, 0x02, 0x15,
|
||||||
|
0x14, 0x06, 0x07, 0x0e, 0x03, 0x15, 0x17, 0x15, 0x23, 0x27, 0x23, 0x15, 0x23, 0x13, 0x33, 0x32,
|
||||||
|
0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x2b, 0x01, 0x15, 0x1c, 0x01, 0xa7, 0xfe, 0xeb, 0x01, 0x1b,
|
||||||
|
0xfe, 0x53, 0x01, 0x15, 0xfe, 0xeb, 0x01, 0xf7, 0xf3, 0x27, 0x41, 0x2d, 0x19, 0x1c, 0x20, 0x01,
|
||||||
|
0x0d, 0x0e, 0x0a, 0x78, 0x7d, 0x69, 0x5c, 0x75, 0x76, 0x71, 0x11, 0x1a, 0x12, 0x09, 0x0a, 0x14,
|
||||||
|
0x1d, 0x13, 0x69, 0x02, 0xac, 0x62, 0x45, 0xfe, 0x55, 0x62, 0x47, 0x01, 0xa9, 0xfe, 0x10, 0x02,
|
||||||
|
0x52, 0x1d, 0x31, 0x42, 0x25, 0x2b, 0x44, 0x1d, 0x01, 0x08, 0x09, 0x07, 0x01, 0xf1, 0x06, 0xd7,
|
||||||
|
0xd7, 0x01, 0x3f, 0x11, 0x19, 0x1f, 0x0e, 0x11, 0x20, 0x19, 0x0f, 0xb0, 0x00, 0x02, 0x00, 0x3e,
|
||||||
|
0x00, 0xb3, 0x03, 0xa8, 0x03, 0x17, 0x00, 0x3a, 0x00, 0x41, 0x00, 0x00, 0x13, 0x34, 0x3e, 0x02,
|
||||||
|
0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x27, 0x34, 0x27, 0x2e, 0x01, 0x23, 0x22, 0x0e, 0x02, 0x15,
|
||||||
|
0x14, 0x16, 0x15, 0x1e, 0x05, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x33, 0x1e,
|
||||||
|
0x01, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x04, 0x35, 0x01, 0x11, 0x33, 0x11, 0x33, 0x15,
|
||||||
|
0x21, 0x50, 0x24, 0x3b, 0x4a, 0x27, 0x28, 0x4b, 0x39, 0x22, 0x73, 0x01, 0x01, 0x08, 0x2b, 0x29,
|
||||||
|
0x10, 0x20, 0x19, 0x0f, 0x01, 0x0b, 0x35, 0x41, 0x46, 0x3b, 0x25, 0x23, 0x3a, 0x4b, 0x27, 0x2b,
|
||||||
|
0x50, 0x3f, 0x26, 0x74, 0x05, 0x34, 0x33, 0x10, 0x20, 0x1a, 0x11, 0x2c, 0x42, 0x4d, 0x42, 0x2c,
|
||||||
|
0x01, 0xef, 0x73, 0xf6, 0xfe, 0x97, 0x02, 0x70, 0x2a, 0x3f, 0x2a, 0x14, 0x18, 0x2e, 0x44, 0x2c,
|
||||||
|
0x02, 0x03, 0x01, 0x27, 0x27, 0x07, 0x10, 0x1a, 0x12, 0x02, 0x0b, 0x02, 0x1f, 0x22, 0x19, 0x17,
|
||||||
|
0x27, 0x3f, 0x34, 0x2c, 0x3e, 0x28, 0x13, 0x1a, 0x32, 0x48, 0x2e, 0x30, 0x30, 0x06, 0x0f, 0x1a,
|
||||||
|
0x13, 0x21, 0x27, 0x1e, 0x1b, 0x29, 0x3e, 0x31, 0xfe, 0x4c, 0x02, 0x53, 0xfe, 0x10, 0x63, 0x00,
|
||||||
|
0x00, 0x03, 0x00, 0x17, 0x00, 0xb3, 0x03, 0xce, 0x03, 0x17, 0x00, 0x38, 0x00, 0x4f, 0x00, 0x5d,
|
||||||
|
0x00, 0x00, 0x13, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x27, 0x34, 0x23, 0x2e,
|
||||||
|
0x01, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x04, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e,
|
||||||
|
0x02, 0x35, 0x33, 0x1e, 0x01, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x03, 0x35,
|
||||||
|
0x01, 0x11, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x06, 0x07, 0x30, 0x0e, 0x02, 0x31, 0x17, 0x15,
|
||||||
|
0x23, 0x27, 0x23, 0x15, 0x23, 0x13, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x2b, 0x01,
|
||||||
|
0x15, 0x2a, 0x24, 0x3a, 0x4a, 0x26, 0x29, 0x4b, 0x39, 0x23, 0x73, 0x01, 0x01, 0x08, 0x2a, 0x2a,
|
||||||
|
0x10, 0x1f, 0x1a, 0x10, 0x2c, 0x42, 0x4d, 0x42, 0x2c, 0x23, 0x39, 0x4b, 0x27, 0x2b, 0x51, 0x3f,
|
||||||
|
0x27, 0x75, 0x05, 0x34, 0x33, 0x10, 0x20, 0x1a, 0x10, 0x1f, 0x1c, 0x25, 0x53, 0x47, 0x2e, 0x01,
|
||||||
|
0xed, 0xf3, 0x27, 0x41, 0x2d, 0x19, 0x1c, 0x20, 0x0c, 0x0e, 0x0c, 0x78, 0x7d, 0x68, 0x5d, 0x75,
|
||||||
|
0x76, 0x71, 0x11, 0x1a, 0x12, 0x09, 0x0a, 0x14, 0x1d, 0x13, 0x69, 0x02, 0x71, 0x2a, 0x3e, 0x2a,
|
||||||
|
0x14, 0x18, 0x2e, 0x44, 0x2c, 0x02, 0x02, 0x27, 0x29, 0x07, 0x11, 0x1a, 0x12, 0x1d, 0x24, 0x1c,
|
||||||
|
0x1d, 0x2b, 0x40, 0x32, 0x2c, 0x3f, 0x29, 0x13, 0x1a, 0x31, 0x49, 0x2e, 0x30, 0x30, 0x06, 0x0f,
|
||||||
|
0x19, 0x13, 0x1e, 0x22, 0x0b, 0x0e, 0x20, 0x2f, 0x43, 0x30, 0xfe, 0x4b, 0x02, 0x52, 0x1d, 0x32,
|
||||||
|
0x42, 0x25, 0x2c, 0x42, 0x1d, 0x08, 0x0a, 0x08, 0xf1, 0x06, 0xd7, 0xd7, 0x01, 0x3f, 0x11, 0x19,
|
||||||
|
0x1f, 0x0e, 0x11, 0x20, 0x19, 0x0f, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12,
|
||||||
|
0x00, 0x12, 0x00, 0x32, 0x00, 0x72, 0x00, 0x8e, 0x00, 0xac, 0x00, 0xbe, 0x00, 0xf0, 0x01, 0x14,
|
||||||
|
0x01, 0x5c, 0x01, 0xb6, 0x02, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0xa2, 0x00, 0x01,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x02, 0x00, 0x07, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x2f,
|
||||||
|
0x00, 0x17, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x12, 0x00, 0x46, 0x00, 0x01,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x58, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x06, 0x00, 0x12, 0x00, 0x65, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x01, 0x00, 0x20,
|
||||||
|
0x00, 0x77, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x97, 0x00, 0x03,
|
||||||
|
0x00, 0x01, 0x04, 0x09, 0x00, 0x03, 0x00, 0x5e, 0x00, 0xa5, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09,
|
||||||
|
0x00, 0x04, 0x00, 0x24, 0x01, 0x03, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x05, 0x00, 0x1a,
|
||||||
|
0x01, 0x27, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x06, 0x00, 0x24, 0x01, 0x41, 0x00, 0x03,
|
||||||
|
0x00, 0x01, 0x04, 0x09, 0x00, 0x11, 0x00, 0x02, 0x01, 0x65, 0x59, 0x75, 0x7a, 0x75, 0x4f, 0x53,
|
||||||
|
0x53, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61,
|
||||||
|
0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x2e, 0x30, 0x30, 0x30, 0x3b, 0x3b,
|
||||||
|
0x59, 0x75, 0x7a, 0x75, 0x4f, 0x53, 0x53, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
|
||||||
|
0x2d, 0x52, 0x3b, 0x32, 0x30, 0x31, 0x39, 0x3b, 0x46, 0x4c, 0x56, 0x49, 0x2d, 0x36, 0x31, 0x34,
|
||||||
|
0x59, 0x75, 0x7a, 0x75, 0x4f, 0x53, 0x53, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
|
||||||
|
0x20, 0x52, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x2e, 0x30, 0x30, 0x30, 0x59,
|
||||||
|
0x75, 0x7a, 0x75, 0x4f, 0x53, 0x53, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2d,
|
||||||
|
0x52, 0x00, 0x59, 0x00, 0x75, 0x00, 0x7a, 0x00, 0x75, 0x00, 0x4f, 0x00, 0x53, 0x00, 0x53, 0x00,
|
||||||
|
0x45, 0x00, 0x78, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00,
|
||||||
|
0x6e, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x75, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x72, 0x00,
|
||||||
|
0x56, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x20, 0x00,
|
||||||
|
0x31, 0x00, 0x2e, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x3b, 0x00, 0x3b, 0x00, 0x59, 0x00,
|
||||||
|
0x75, 0x00, 0x7a, 0x00, 0x75, 0x00, 0x4f, 0x00, 0x53, 0x00, 0x53, 0x00, 0x45, 0x00, 0x78, 0x00,
|
||||||
|
0x74, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x2d, 0x00,
|
||||||
|
0x52, 0x00, 0x3b, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x39, 0x00, 0x3b, 0x00, 0x46, 0x00,
|
||||||
|
0x4c, 0x00, 0x56, 0x00, 0x49, 0x00, 0x2d, 0x00, 0x36, 0x00, 0x31, 0x00, 0x34, 0x00, 0x59, 0x00,
|
||||||
|
0x75, 0x00, 0x7a, 0x00, 0x75, 0x00, 0x4f, 0x00, 0x53, 0x00, 0x53, 0x00, 0x45, 0x00, 0x78, 0x00,
|
||||||
|
0x74, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x20, 0x00,
|
||||||
|
0x52, 0x00, 0x56, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00,
|
||||||
|
0x20, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x59, 0x00, 0x75, 0x00,
|
||||||
|
0x7a, 0x00, 0x75, 0x00, 0x4f, 0x00, 0x53, 0x00, 0x53, 0x00, 0x45, 0x00, 0x78, 0x00, 0x74, 0x00,
|
||||||
|
0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x52, 0x00,
|
||||||
|
0x52, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x9c, 0x00, 0x32,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x00, 0x03, 0x01, 0x04,
|
||||||
|
0x01, 0x05, 0x01, 0x06, 0x01, 0x07, 0x01, 0x08, 0x01, 0x09, 0x01, 0x0a, 0x01, 0x0b, 0x01, 0x0c,
|
||||||
|
0x01, 0x0d, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x30, 0x30, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x30,
|
||||||
|
0x30, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x45, 0x30, 0x45, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x45, 0x30,
|
||||||
|
0x45, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x45, 0x30, 0x45, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x45, 0x30,
|
||||||
|
0x45, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x45, 0x30, 0x45, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x45, 0x30,
|
||||||
|
0x45, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x45, 0x30, 0x45, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x45, 0x30,
|
||||||
|
0x45, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x45, 0x30, 0x45, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x45, 0x30,
|
||||||
|
0x45, 0x39, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0xff, 0xff, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x01,
|
||||||
|
0x00, 0x00, 0x00, 0x00,
|
||||||
|
}};
|
||||||
|
|
||||||
|
} // namespace FileSys::SystemArchive::SharedFontData
|
|
@ -0,0 +1,13 @@
|
||||||
|
// Copyright 2019 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
namespace FileSys::SystemArchive::SharedFontData {
|
||||||
|
|
||||||
|
extern const std::array<unsigned char, 2932> FONT_NINTENDO_EXTENDED;
|
||||||
|
|
||||||
|
} // namespace FileSys::SystemArchive::SharedFontData
|
13592
src/core/file_sys/system_archive/data/font_standard.cpp
Normal file
13592
src/core/file_sys/system_archive/data/font_standard.cpp
Normal file
File diff suppressed because it is too large
Load diff
13
src/core/file_sys/system_archive/data/font_standard.h
Normal file
13
src/core/file_sys/system_archive/data/font_standard.h
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
// Copyright 2019 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
namespace FileSys::SystemArchive::SharedFontData {
|
||||||
|
|
||||||
|
extern const std::array<unsigned char, 217276> FONT_STANDARD;
|
||||||
|
|
||||||
|
} // namespace FileSys::SystemArchive::SharedFontData
|
78
src/core/file_sys/system_archive/shared_font.cpp
Normal file
78
src/core/file_sys/system_archive/shared_font.cpp
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
// Copyright 2019 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#include "core/file_sys/system_archive/data/font_chinese_simplified.h"
|
||||||
|
#include "core/file_sys/system_archive/data/font_chinese_traditional.h"
|
||||||
|
#include "core/file_sys/system_archive/data/font_extended_chinese_simplified.h"
|
||||||
|
#include "core/file_sys/system_archive/data/font_korean.h"
|
||||||
|
#include "core/file_sys/system_archive/data/font_nintendo_extended.h"
|
||||||
|
#include "core/file_sys/system_archive/data/font_standard.h"
|
||||||
|
#include "core/file_sys/system_archive/shared_font.h"
|
||||||
|
#include "core/file_sys/vfs_vector.h"
|
||||||
|
#include "core/hle/service/ns/pl_u.h"
|
||||||
|
|
||||||
|
namespace FileSys::SystemArchive {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
template <std::size_t Size>
|
||||||
|
VirtualFile PackBFTTF(const std::array<u8, Size>& data, const std::string& name) {
|
||||||
|
std::vector<u32> vec(Size / sizeof(u32));
|
||||||
|
std::memcpy(vec.data(), data.data(), vec.size() * sizeof(u32));
|
||||||
|
|
||||||
|
std::vector<u8> bfttf(Size + sizeof(u64));
|
||||||
|
|
||||||
|
u64 offset = 0;
|
||||||
|
Service::NS::EncryptSharedFont(vec, bfttf, offset);
|
||||||
|
return std::make_shared<VectorVfsFile>(std::move(bfttf), name);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // Anonymous namespace
|
||||||
|
|
||||||
|
VirtualDir FontNintendoExtension() {
|
||||||
|
return std::make_shared<VectorVfsDirectory>(
|
||||||
|
std::vector<VirtualFile>{
|
||||||
|
PackBFTTF(SharedFontData::FONT_NINTENDO_EXTENDED, "nintendo_ext_003.bfttf"),
|
||||||
|
PackBFTTF(SharedFontData::FONT_NINTENDO_EXTENDED, "nintendo_ext2_003.bfttf"),
|
||||||
|
},
|
||||||
|
std::vector<VirtualDir>{});
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtualDir FontStandard() {
|
||||||
|
return std::make_shared<VectorVfsDirectory>(
|
||||||
|
std::vector<VirtualFile>{
|
||||||
|
PackBFTTF(SharedFontData::FONT_STANDARD, "nintendo_udsg-r_std_003.bfttf"),
|
||||||
|
},
|
||||||
|
std::vector<VirtualDir>{});
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtualDir FontKorean() {
|
||||||
|
return std::make_shared<VectorVfsDirectory>(
|
||||||
|
std::vector<VirtualFile>{
|
||||||
|
PackBFTTF(SharedFontData::FONT_KOREAN, "nintendo_udsg-r_ko_003.bfttf"),
|
||||||
|
},
|
||||||
|
std::vector<VirtualDir>{});
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtualDir FontChineseTraditional() {
|
||||||
|
return std::make_shared<VectorVfsDirectory>(
|
||||||
|
std::vector<VirtualFile>{
|
||||||
|
PackBFTTF(SharedFontData::FONT_CHINESE_TRADITIONAL,
|
||||||
|
"nintendo_udjxh-db_zh-tw_003.bfttf"),
|
||||||
|
},
|
||||||
|
std::vector<VirtualDir>{});
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtualDir FontChineseSimple() {
|
||||||
|
return std::make_shared<VectorVfsDirectory>(
|
||||||
|
std::vector<VirtualFile>{
|
||||||
|
PackBFTTF(SharedFontData::FONT_CHINESE_SIMPLIFIED,
|
||||||
|
"nintendo_udsg-r_org_zh-cn_003.bfttf"),
|
||||||
|
PackBFTTF(SharedFontData::FONT_EXTENDED_CHINESE_SIMPLIFIED,
|
||||||
|
"nintendo_udsg-r_ext_zh-cn_003.bfttf"),
|
||||||
|
},
|
||||||
|
std::vector<VirtualDir>{});
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace FileSys::SystemArchive
|
17
src/core/file_sys/system_archive/shared_font.h
Normal file
17
src/core/file_sys/system_archive/shared_font.h
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
// Copyright 2019 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "core/file_sys/vfs_types.h"
|
||||||
|
|
||||||
|
namespace FileSys::SystemArchive {
|
||||||
|
|
||||||
|
VirtualDir FontNintendoExtension();
|
||||||
|
VirtualDir FontStandard();
|
||||||
|
VirtualDir FontKorean();
|
||||||
|
VirtualDir FontChineseTraditional();
|
||||||
|
VirtualDir FontChineseSimple();
|
||||||
|
|
||||||
|
} // namespace FileSys::SystemArchive
|
|
@ -6,6 +6,7 @@
|
||||||
#include "core/file_sys/romfs.h"
|
#include "core/file_sys/romfs.h"
|
||||||
#include "core/file_sys/system_archive/mii_model.h"
|
#include "core/file_sys/system_archive/mii_model.h"
|
||||||
#include "core/file_sys/system_archive/ng_word.h"
|
#include "core/file_sys/system_archive/ng_word.h"
|
||||||
|
#include "core/file_sys/system_archive/shared_font.h"
|
||||||
#include "core/file_sys/system_archive/system_archive.h"
|
#include "core/file_sys/system_archive/system_archive.h"
|
||||||
#include "core/file_sys/system_archive/system_version.h"
|
#include "core/file_sys/system_archive/system_version.h"
|
||||||
|
|
||||||
|
@ -39,11 +40,11 @@ constexpr std::array<SystemArchiveDescriptor, SYSTEM_ARCHIVE_COUNT> SYSTEM_ARCHI
|
||||||
{0x010000000000080D, "UrlBlackList", nullptr},
|
{0x010000000000080D, "UrlBlackList", nullptr},
|
||||||
{0x010000000000080E, "TimeZoneBinary", nullptr},
|
{0x010000000000080E, "TimeZoneBinary", nullptr},
|
||||||
{0x010000000000080F, "CertStoreCruiser", nullptr},
|
{0x010000000000080F, "CertStoreCruiser", nullptr},
|
||||||
{0x0100000000000810, "FontNintendoExtension", nullptr},
|
{0x0100000000000810, "FontNintendoExtension", &FontNintendoExtension},
|
||||||
{0x0100000000000811, "FontStandard", nullptr},
|
{0x0100000000000811, "FontStandard", &FontStandard},
|
||||||
{0x0100000000000812, "FontKorean", nullptr},
|
{0x0100000000000812, "FontKorean", &FontKorean},
|
||||||
{0x0100000000000813, "FontChineseTraditional", nullptr},
|
{0x0100000000000813, "FontChineseTraditional", &FontChineseTraditional},
|
||||||
{0x0100000000000814, "FontChineseSimple", nullptr},
|
{0x0100000000000814, "FontChineseSimple", &FontChineseSimple},
|
||||||
{0x0100000000000815, "FontBfcpx", nullptr},
|
{0x0100000000000815, "FontBfcpx", nullptr},
|
||||||
{0x0100000000000816, "SystemUpdate", nullptr},
|
{0x0100000000000816, "SystemUpdate", nullptr},
|
||||||
{0x0100000000000817, "0100000000000817", nullptr},
|
{0x0100000000000817, "0100000000000817", nullptr},
|
||||||
|
|
|
@ -6,13 +6,6 @@
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <FontChineseSimplified.h>
|
|
||||||
#include <FontChineseTraditional.h>
|
|
||||||
#include <FontExtendedChineseSimplified.h>
|
|
||||||
#include <FontKorean.h>
|
|
||||||
#include <FontNintendoExtended.h>
|
|
||||||
#include <FontStandard.h>
|
|
||||||
|
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
#include "common/common_paths.h"
|
#include "common/common_paths.h"
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
|
@ -24,7 +17,9 @@
|
||||||
#include "core/file_sys/nca_metadata.h"
|
#include "core/file_sys/nca_metadata.h"
|
||||||
#include "core/file_sys/registered_cache.h"
|
#include "core/file_sys/registered_cache.h"
|
||||||
#include "core/file_sys/romfs.h"
|
#include "core/file_sys/romfs.h"
|
||||||
|
#include "core/file_sys/system_archive/system_archive.h"
|
||||||
#include "core/hle/ipc_helpers.h"
|
#include "core/hle/ipc_helpers.h"
|
||||||
|
#include "core/hle/kernel/physical_memory.h"
|
||||||
#include "core/hle/kernel/shared_memory.h"
|
#include "core/hle/kernel/shared_memory.h"
|
||||||
#include "core/hle/service/filesystem/filesystem.h"
|
#include "core/hle/service/filesystem/filesystem.h"
|
||||||
#include "core/hle/service/ns/pl_u.h"
|
#include "core/hle/service/ns/pl_u.h"
|
||||||
|
@ -94,15 +89,20 @@ static void DecryptSharedFont(const std::vector<u32>& input, Kernel::PhysicalMem
|
||||||
offset += transformed_font.size() * sizeof(u32);
|
offset += transformed_font.size() * sizeof(u32);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void EncryptSharedFont(const std::vector<u8>& input, Kernel::PhysicalMemory& output,
|
void EncryptSharedFont(const std::vector<u32>& input, std::vector<u8>& output,
|
||||||
std::size_t& offset) {
|
std::size_t& offset) {
|
||||||
ASSERT_MSG(offset + input.size() + 8 < SHARED_FONT_MEM_SIZE, "Shared fonts exceeds 17mb!");
|
ASSERT_MSG(offset + (input.size() * sizeof(u32)) < SHARED_FONT_MEM_SIZE,
|
||||||
const u32 KEY = EXPECTED_MAGIC ^ EXPECTED_RESULT;
|
"Shared fonts exceeds 17mb!");
|
||||||
std::memcpy(output.data() + offset, &EXPECTED_RESULT, sizeof(u32)); // Magic header
|
|
||||||
const u32 ENC_SIZE = static_cast<u32>(input.size()) ^ KEY;
|
const auto key = Common::swap32(EXPECTED_RESULT ^ EXPECTED_MAGIC);
|
||||||
std::memcpy(output.data() + offset + sizeof(u32), &ENC_SIZE, sizeof(u32));
|
std::vector<u32> transformed_font(input.size() + 2);
|
||||||
std::memcpy(output.data() + offset + (sizeof(u32) * 2), input.data(), input.size());
|
transformed_font[0] = Common::swap32(EXPECTED_MAGIC);
|
||||||
offset += input.size() + (sizeof(u32) * 2);
|
transformed_font[1] = Common::swap32(input.size() * sizeof(u32)) ^ key;
|
||||||
|
std::transform(input.begin(), input.end(), transformed_font.begin() + 2,
|
||||||
|
[key](u32 in) { return in ^ key; });
|
||||||
|
std::memcpy(output.data() + offset, transformed_font.data(),
|
||||||
|
transformed_font.size() * sizeof(u32));
|
||||||
|
offset += transformed_font.size() * sizeof(u32);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper function to make BuildSharedFontsRawRegions a bit nicer
|
// Helper function to make BuildSharedFontsRawRegions a bit nicer
|
||||||
|
@ -168,114 +168,49 @@ PL_U::PL_U(Core::System& system)
|
||||||
// Attempt to load shared font data from disk
|
// Attempt to load shared font data from disk
|
||||||
const auto* nand = fsc.GetSystemNANDContents();
|
const auto* nand = fsc.GetSystemNANDContents();
|
||||||
std::size_t offset = 0;
|
std::size_t offset = 0;
|
||||||
// Rebuild shared fonts from data ncas
|
// Rebuild shared fonts from data ncas or synthesize
|
||||||
if (nand->HasEntry(static_cast<u64>(FontArchives::Standard),
|
|
||||||
FileSys::ContentRecordType::Data)) {
|
impl->shared_font = std::make_shared<Kernel::PhysicalMemory>(SHARED_FONT_MEM_SIZE);
|
||||||
impl->shared_font = std::make_shared<Kernel::PhysicalMemory>(SHARED_FONT_MEM_SIZE);
|
for (auto font : SHARED_FONTS) {
|
||||||
for (auto font : SHARED_FONTS) {
|
FileSys::VirtualFile romfs;
|
||||||
const auto nca =
|
const auto nca =
|
||||||
nand->GetEntry(static_cast<u64>(font.first), FileSys::ContentRecordType::Data);
|
nand->GetEntry(static_cast<u64>(font.first), FileSys::ContentRecordType::Data);
|
||||||
if (!nca) {
|
if (nca) {
|
||||||
LOG_ERROR(Service_NS, "Failed to find {:016X}! Skipping",
|
romfs = nca->GetRomFS();
|
||||||
static_cast<u64>(font.first));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
const auto romfs = nca->GetRomFS();
|
|
||||||
if (!romfs) {
|
|
||||||
LOG_ERROR(Service_NS, "{:016X} has no RomFS! Skipping",
|
|
||||||
static_cast<u64>(font.first));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
const auto extracted_romfs = FileSys::ExtractRomFS(romfs);
|
|
||||||
if (!extracted_romfs) {
|
|
||||||
LOG_ERROR(Service_NS, "Failed to extract RomFS for {:016X}! Skipping",
|
|
||||||
static_cast<u64>(font.first));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
const auto font_fp = extracted_romfs->GetFile(font.second);
|
|
||||||
if (!font_fp) {
|
|
||||||
LOG_ERROR(Service_NS, "{:016X} has no file \"{}\"! Skipping",
|
|
||||||
static_cast<u64>(font.first), font.second);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
std::vector<u32> font_data_u32(font_fp->GetSize() / sizeof(u32));
|
|
||||||
font_fp->ReadBytes<u32>(font_data_u32.data(), font_fp->GetSize());
|
|
||||||
// We need to be BigEndian as u32s for the xor encryption
|
|
||||||
std::transform(font_data_u32.begin(), font_data_u32.end(), font_data_u32.begin(),
|
|
||||||
Common::swap32);
|
|
||||||
FontRegion region{
|
|
||||||
static_cast<u32>(offset + 8),
|
|
||||||
static_cast<u32>((font_data_u32.size() * sizeof(u32)) -
|
|
||||||
8)}; // Font offset and size do not account for the header
|
|
||||||
DecryptSharedFont(font_data_u32, *impl->shared_font, offset);
|
|
||||||
impl->shared_font_regions.push_back(region);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
if (!romfs) {
|
||||||
impl->shared_font = std::make_shared<Kernel::PhysicalMemory>(
|
romfs = FileSys::SystemArchive::SynthesizeSystemArchive(static_cast<u64>(font.first));
|
||||||
SHARED_FONT_MEM_SIZE); // Shared memory needs to always be allocated and a fixed size
|
|
||||||
|
|
||||||
const std::string user_path = FileUtil::GetUserPath(FileUtil::UserPath::SysDataDir);
|
|
||||||
const std::string filepath{user_path + SHARED_FONT};
|
|
||||||
|
|
||||||
// Create path if not already created
|
|
||||||
if (!FileUtil::CreateFullPath(filepath)) {
|
|
||||||
LOG_ERROR(Service_NS, "Failed to create sharedfonts path \"{}\"!", filepath);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool using_ttf = false;
|
if (!romfs) {
|
||||||
for (const char* font_ttf : SHARED_FONTS_TTF) {
|
LOG_ERROR(Service_NS, "Failed to find or synthesize {:016X}! Skipping",
|
||||||
if (FileUtil::Exists(user_path + font_ttf)) {
|
static_cast<u64>(font.first));
|
||||||
using_ttf = true;
|
continue;
|
||||||
FileUtil::IOFile file(user_path + font_ttf, "rb");
|
|
||||||
if (file.IsOpen()) {
|
|
||||||
std::vector<u8> ttf_bytes(file.GetSize());
|
|
||||||
file.ReadBytes<u8>(ttf_bytes.data(), ttf_bytes.size());
|
|
||||||
FontRegion region{
|
|
||||||
static_cast<u32>(offset + 8),
|
|
||||||
static_cast<u32>(ttf_bytes.size())}; // Font offset and size do not account
|
|
||||||
// for the header
|
|
||||||
EncryptSharedFont(ttf_bytes, *impl->shared_font, offset);
|
|
||||||
impl->shared_font_regions.push_back(region);
|
|
||||||
} else {
|
|
||||||
LOG_WARNING(Service_NS, "Unable to load font: {}", font_ttf);
|
|
||||||
}
|
|
||||||
} else if (using_ttf) {
|
|
||||||
LOG_WARNING(Service_NS, "Unable to find font: {}", font_ttf);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (using_ttf)
|
|
||||||
return;
|
|
||||||
FileUtil::IOFile file(filepath, "rb");
|
|
||||||
|
|
||||||
if (file.IsOpen()) {
|
const auto extracted_romfs = FileSys::ExtractRomFS(romfs);
|
||||||
// Read shared font data
|
if (!extracted_romfs) {
|
||||||
ASSERT(file.GetSize() == SHARED_FONT_MEM_SIZE);
|
LOG_ERROR(Service_NS, "Failed to extract RomFS for {:016X}! Skipping",
|
||||||
file.ReadBytes(impl->shared_font->data(), impl->shared_font->size());
|
static_cast<u64>(font.first));
|
||||||
impl->BuildSharedFontsRawRegions(*impl->shared_font);
|
continue;
|
||||||
} else {
|
|
||||||
LOG_WARNING(Service_NS,
|
|
||||||
"Shared Font file missing. Loading open source replacement from memory");
|
|
||||||
|
|
||||||
// clang-format off
|
|
||||||
const std::vector<std::vector<u8>> open_source_shared_fonts_ttf = {
|
|
||||||
{std::begin(FontChineseSimplified), std::end(FontChineseSimplified)},
|
|
||||||
{std::begin(FontChineseTraditional), std::end(FontChineseTraditional)},
|
|
||||||
{std::begin(FontExtendedChineseSimplified), std::end(FontExtendedChineseSimplified)},
|
|
||||||
{std::begin(FontKorean), std::end(FontKorean)},
|
|
||||||
{std::begin(FontNintendoExtended), std::end(FontNintendoExtended)},
|
|
||||||
{std::begin(FontStandard), std::end(FontStandard)},
|
|
||||||
};
|
|
||||||
// clang-format on
|
|
||||||
|
|
||||||
for (const std::vector<u8>& font_ttf : open_source_shared_fonts_ttf) {
|
|
||||||
const FontRegion region{static_cast<u32>(offset + 8),
|
|
||||||
static_cast<u32>(font_ttf.size())};
|
|
||||||
EncryptSharedFont(font_ttf, *impl->shared_font, offset);
|
|
||||||
impl->shared_font_regions.push_back(region);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
const auto font_fp = extracted_romfs->GetFile(font.second);
|
||||||
|
if (!font_fp) {
|
||||||
|
LOG_ERROR(Service_NS, "{:016X} has no file \"{}\"! Skipping",
|
||||||
|
static_cast<u64>(font.first), font.second);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
std::vector<u32> font_data_u32(font_fp->GetSize() / sizeof(u32));
|
||||||
|
font_fp->ReadBytes<u32>(font_data_u32.data(), font_fp->GetSize());
|
||||||
|
// We need to be BigEndian as u32s for the xor encryption
|
||||||
|
std::transform(font_data_u32.begin(), font_data_u32.end(), font_data_u32.begin(),
|
||||||
|
Common::swap32);
|
||||||
|
// Font offset and size do not account for the header
|
||||||
|
const FontRegion region{static_cast<u32>(offset + 8),
|
||||||
|
static_cast<u32>((font_data_u32.size() * sizeof(u32)) - 8)};
|
||||||
|
DecryptSharedFont(font_data_u32, *impl->shared_font, offset);
|
||||||
|
impl->shared_font_regions.push_back(region);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
#include "core/hle/service/service.h"
|
#include "core/hle/service/service.h"
|
||||||
|
|
||||||
namespace Service {
|
namespace Service {
|
||||||
|
@ -15,6 +16,8 @@ class FileSystemController;
|
||||||
|
|
||||||
namespace NS {
|
namespace NS {
|
||||||
|
|
||||||
|
void EncryptSharedFont(const std::vector<u32>& input, std::vector<u8>& output, std::size_t& offset);
|
||||||
|
|
||||||
class PL_U final : public ServiceFramework<PL_U> {
|
class PL_U final : public ServiceFramework<PL_U> {
|
||||||
public:
|
public:
|
||||||
explicit PL_U(Core::System& system);
|
explicit PL_U(Core::System& system);
|
||||||
|
|
Loading…
Reference in a new issue