From 76d8d209407e6b454123f8ff68d49008ef8db77a Mon Sep 17 00:00:00 2001 From: yosiokat Date: Mon, 21 Jan 2008 02:38:41 +0000 Subject: [PATCH] =?UTF-8?q?TwlIPL=E3=83=84=E3=83=AA=E3=83=BC=E3=81=AEsetti?= =?UTF-8?q?ngs=E3=83=A9=E3=82=A4=E3=83=96=E3=83=A9=E3=83=AA=E3=82=92?= =?UTF-8?q?=E5=89=8A=E9=99=A4=E3=81=97=E3=80=81TwlSDK=E5=81=B4=E3=81=AElcf?= =?UTF-8?q?g=E3=83=A9=E3=82=A4=E3=83=96=E3=83=A9=E3=83=AA=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@490 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- build/buildtools/commondefs.sysmenu | 2 +- build/libraries_sysmenu/Makefile | 2 +- .../libraries_sysmenu/settings/ARM9/Makefile | 51 -- .../settings/ARM9/src/NTRSettings.c | 545 ----------------- .../settings/ARM9/src/TWLHWInfo.c | 418 ------------- .../settings/ARM9/src/TWLSettings.c | 316 ---------- .../settings/ARM9/src/TWLStoreFile.c | 257 -------- build/libraries_sysmenu/settings/Makefile | 33 - build/libraries_sysmenu/sysmenu/ARM9/Makefile | 2 +- .../sysmenu/ARM9/src/settingsAPI.c | 286 --------- .../sysmenu/ARM9/src/sysmenu_lib.c | 44 +- .../sysmenu/ARM9/src/sysmenu_util.c | 6 +- .../systemMenu_RED/HWInfoWriter/ARM9/Makefile | 6 +- .../HWInfoWriter/ARM9/src/HWInfoWriter.c | 110 ++-- build/systemMenu_RED/Launcher/ARM9/Makefile | 7 +- .../Launcher/ARM9/src/launcher.c | 14 +- .../ARM9/src/CountryNameMappingData.c | 14 +- .../MachineSettings/ARM9/src/MachineSetting.c | 6 +- .../MachineSettings/ARM9/src/calibrationTP.c | 10 +- .../MachineSettings/ARM9/src/main.c | 4 +- .../MachineSettings/ARM9/src/selectCountry.c | 28 +- .../MachineSettings/ARM9/src/selectLanguage.c | 48 +- .../MachineSettings/ARM9/src/setOwnerInfo.c | 68 +-- .../MachineSettings/ARM9/src/setRTC.c | 14 +- doc/mb_childメモリマップ.vsd | Bin 95232 -> 96768 bytes doc/開発用各種本体とアプリバイナリ仕様.vsd | Bin 394752 -> 392704 bytes include/sysmenu.h | 3 +- include/sysmenu/settings.h | 35 -- include/sysmenu/settings/common/NTRSettings.h | 578 ------------------ include/sysmenu/settings/common/TWLHWInfo.h | 243 -------- include/sysmenu/settings/common/TWLSettings.h | 560 ----------------- .../sysmenu/settings/common/TWLStoreFile.h | 93 --- include/sysmenu/settings/common/countryCode.h | 198 ------ .../sysmenu/sysmenu_lib/ARM9/sysmenu_api.h | 6 - 34 files changed, 195 insertions(+), 3812 deletions(-) delete mode 100644 build/libraries_sysmenu/settings/ARM9/Makefile delete mode 100644 build/libraries_sysmenu/settings/ARM9/src/NTRSettings.c delete mode 100644 build/libraries_sysmenu/settings/ARM9/src/TWLHWInfo.c delete mode 100644 build/libraries_sysmenu/settings/ARM9/src/TWLSettings.c delete mode 100644 build/libraries_sysmenu/settings/ARM9/src/TWLStoreFile.c delete mode 100644 build/libraries_sysmenu/settings/Makefile delete mode 100644 build/libraries_sysmenu/sysmenu/ARM9/src/settingsAPI.c delete mode 100644 include/sysmenu/settings.h delete mode 100644 include/sysmenu/settings/common/NTRSettings.h delete mode 100644 include/sysmenu/settings/common/TWLHWInfo.h delete mode 100644 include/sysmenu/settings/common/TWLSettings.h delete mode 100644 include/sysmenu/settings/common/TWLStoreFile.h delete mode 100644 include/sysmenu/settings/common/countryCode.h diff --git a/build/buildtools/commondefs.sysmenu b/build/buildtools/commondefs.sysmenu index c203e28b..92ecc56a 100644 --- a/build/buildtools/commondefs.sysmenu +++ b/build/buildtools/commondefs.sysmenu @@ -60,8 +60,8 @@ SYSMENU_LIBDIR := $(SYSMENU_ROOT)/lib/$(TWL_LIBTYPE) ifeq ($(CODEGEN_PROC),ARM9) SYSMENU_LIBS ?= \ + liblcfg$(TWL_LIBSUFFIX).a \ libsysmenu$(TWL_LIBSUFFIX).a \ - libsettings$(TWL_LIBSUFFIX).a \ libmbloader$(TWL_LIBSUFFIX).a \ libacsign$(TWL_LIBSUFFIX).a \ libboot$(TWL_LIBSUFFIX).a \ diff --git a/build/libraries_sysmenu/Makefile b/build/libraries_sysmenu/Makefile index 527f733f..d5db837c 100644 --- a/build/libraries_sysmenu/Makefile +++ b/build/libraries_sysmenu/Makefile @@ -22,7 +22,7 @@ include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs #---------------------------------------------------------------------------- -SUBDIRS_P = reloc_info sysmenu settings mb_loader acsign boot hotsw +SUBDIRS_P = reloc_info sysmenu mb_loader acsign boot hotsw #---------------------------------------------------------------------------- diff --git a/build/libraries_sysmenu/settings/ARM9/Makefile b/build/libraries_sysmenu/settings/ARM9/Makefile deleted file mode 100644 index 14f6bca2..00000000 --- a/build/libraries_sysmenu/settings/ARM9/Makefile +++ /dev/null @@ -1,51 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: 2007-10-03#$ -# $Rev: 1319 $ -# $Author: kitase_hirotake $ -#---------------------------------------------------------------------------- - -SUBDIRS = - -MYSUBDIRS = ./ - -#---------------------------------------------------------------------------- -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED -TWL_PROC = ARM9 - -SRCS = NTRSettings.c TWLSettings.c \ - TWLHWInfo.c TWLStoreFile.c - -TARGET_LIB = libsettings$(TWL_LIBSUFFIX).a - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -INSTALL_TARGETS = $(TARGETS) -INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR) - -LINCLUDES = $(ROOT)/build/libraries/spi/ARM9/include \ - -#---------------------------------------------------------------------------- - -do-build: $(MYSUBDIRS) $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - - -$(MYSUBDIRS):: -# $(MAKE) -C $@ -f MakeCrt0 - -#===== End of Makefile ===== diff --git a/build/libraries_sysmenu/settings/ARM9/src/NTRSettings.c b/build/libraries_sysmenu/settings/ARM9/src/NTRSettings.c deleted file mode 100644 index 4f78fb37..00000000 --- a/build/libraries_sysmenu/settings/ARM9/src/NTRSettings.c +++ /dev/null @@ -1,545 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: NTRSettings.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "spi.h" - -// define data---------------------------------------------------------- -#if 0 -#define DEBUG_Printf OS_TPrintf -#else -#define DEBUG_Printf(...) ((void)0) -#endif - -#define SAVE_COUNT_MAX 0x0080 // NTRSettingsData.saveCount̍ől -#define SAVE_COUNT_MASK 0x007f // NTRSettingsData.saveCount̒l͈̔͂}XNB(0x00-0x7fj -#define NSD_NOT_CORRECT 0x00ff // NTRݒf[^ǂݏoĂȂ or LȂ̂ȂƂB -#define NVRAM_RETRY_NUM 8 // NVRAMgC - -// NVRAMXe[^XWX^l -#define SR_WIP 0x01 // 0:READY 1:CgAC[X -#define SR_WEN 0x02 // 0:Cg֎~ 1:Cg -#define SR_EER 0x20 // 1:C[XG[iSANYOFLASĤ݁j - -#define READ_IPL2_HEADER_ADDR 0x18 // IPL2wb_̂Aǂݍ݂Kvȕ̐擪AhX -#define READ_IPL2_HEADER_SIZE 0x0a // IPL2wb_̂Aǂݍ݂KvȃTCY -#define NSD_ROM_ADDR_SHIFT 3 - -// NVRAM֘AMR}hXe[g -static enum NvramCommState{ - COMM_READY = 0, - COMM_RD, - COMM_WE, - COMM_WR, - COMM_RDSR_WE, - COMM_RDSR_WR, - COMM_SRST -}NvramCommState; - - -// IPL2wb_̈ꕔi0x18̃f[^) -typedef struct IPL2HeaderPart { - struct { - u8 timestamp[5]; // NTR-IPL2^CX^v [0]:,[1]:,[2]:,[3]:,[4]:N - u8 ipl2_type; // NTR-IPL2^Cv - u8 rsv[2]; - } version; - - u16 nsd_rom_addr; - - u8 pad[ 0x16 ]; // LbVCɍ킹邽߂̃pfBOB{͕KvȂB -} IPL2HeaderPart; // 0x20bytes - - -// NTReݒf[^NVRAMۑtH[}bg -typedef struct NSDStore{ - NTRSettingsData nsd; // NTReݒf[^ - u16 saveCount; // 0x00-0x7f[văJEgAJEglVf[^LB - u16 crc16; // NTReݒf[^16bitCRC - u8 pad[ 128 - sizeof(NTRSettingsData) - 4]; -}NSDStore; // 128byte // {ȂAsaveCountcrc16256byte̍ŌɕtāAԂɃpfBO𖄂߂B - - -// NTReݒf[^EXNVRAMۑtH[}bgiLNCDStoreƌ݊Ƃ邽߂̖gj -typedef struct NSDStoreEx{ - NTRSettingsData nsd; // NTReݒf[^ - u16 saveCount; // 0x00-0x7f[văJEgAJEglVf[^LB - u16 crc16; // NTReݒf[^16bitCRC - NTRSettingsDataEx nsd_ex; - u16 crc16_ex; -}NSDStoreEx; // 256byte // {ȂAsaveCountcrc16256byte̍ŌɕtāAԂɃpfBO𖄂߂B - - -// function's prototype------------------------------------------------- -u32 NSD_GetNSDRomAddr( void ); // NTRSettingf[^NVRAMi[AhX擾 -u8 NSD_GetIPL2Type( void ); // NTR-IPL2^Cv擾 -const u8 *NSD_GetIPL2Timestamp( void ); // NTR-IPL2̃^CX^v擾 - -static void NSDi_ReadIPL2Header( void ); -static BOOL NSDi_CheckCorrectNSD( NSDStoreEx (*pNSDStoreExArray)[2], u32 validLangBitmap ); -static BOOL NSDi_CheckDataValue( NSDStoreEx *pNSDStore, u32 validLangBitmap ); -static BOOL NVRAMm_ExecuteCommand( int nvState, u32 addr, u16 size, u8 *pSrc ); -static void Callback_NVRAM( PXIFifoTag tag, u32 data, BOOL err ); - -// static variables----------------------------------------------------- -static NSDStoreEx s_NSDStoreEx[ 2 ] ATTRIBUTE_ALIGN(32); -static IPL2HeaderPart s_IPL2Header ATTRIBUTE_ALIGN(32); -static BOOL s_isReadIPL2H = FALSE; -static volatile BOOL s_nvCbOccurred; -static volatile u16 s_nvResult; -static int s_indexNSD = NSD_NOT_CORRECT; - -// global variables----------------------------------------------------- -NTRSettingsData *g_pNSD = &s_NSDStoreEx[ 0 ].nsd; -NTRSettingsDataEx *g_pNSDEx = &s_NSDStoreEx[ 0 ].nsd_ex; - -// const data----------------------------------------------------------- - -// function's description----------------------------------------------- - -//---------------------------------------------------------------------- -// IPL2wb_̓ǂݏo -//---------------------------------------------------------------------- -// R|[lgł̎gp - -// IPL2wb_̓ǂݏo -static void NSDi_ReadIPL2Header( void ) -{ - if( !s_isReadIPL2H ) { - OS_TPrintf( "IPL2Header:%x\n", sizeof(IPL2HeaderPart) ); - DC_InvalidateRange( &s_IPL2Header, sizeof(IPL2HeaderPart) ); - while( !NVRAMm_ExecuteCommand( COMM_RD, READ_IPL2_HEADER_ADDR, READ_IPL2_HEADER_SIZE, (u8 *)&s_IPL2Header ) ) {} - s_isReadIPL2H = TRUE; - } -} - -// IPL2^Cv̎擾 -u8 NSD_GetIPL2Type( void ) -{ - NSDi_ReadIPL2Header(); - return s_IPL2Header.version.ipl2_type; -} - -// IPL2^CX^v̎擾 -const u8 *NSD_GetIPL2Timestamp( void ) -{ - NSDi_ReadIPL2Header(); - return s_IPL2Header.version.timestamp; -} - -// NSDi[ROMAhX̎擾 -u32 NSD_GetNSDRomAddr( void ) -{ - NSDi_ReadIPL2Header(); - return (u32)( s_IPL2Header.nsd_rom_addr << NSD_ROM_ADDR_SHIFT ); -} - -//---------------------------------------------------------------------- -// NTRݒf[^̃[h -//---------------------------------------------------------------------- - -// NTRݒf[^[hς -BOOL NSD_IsReadSettings( void ) -{ - return ( s_indexNSD != NSD_NOT_CORRECT ); -} - - -BOOL NSD_ReadSettings( u32 validLangBitmap ) -{ - DC_InvalidateRange( s_NSDStoreEx, sizeof(NSDStoreEx) * 2 ); - - // tbVjdĂNTRݒf[^ǂݏoB - while( !NVRAMm_ExecuteCommand( COMM_RD, NSD_GetNSDRomAddr(), sizeof(NSDStoreEx), (u8 *)&s_NSDStoreEx[ 0 ] ) ) {} - while( !NVRAMm_ExecuteCommand( COMM_RD, NSD_GetNSDRomAddr() + SPI_NVRAM_PAGE_SIZE, sizeof(NSDStoreEx), (u8 *)&s_NSDStoreEx[ 1 ] ) ) {} - OS_TPrintf("NSD read addr=%08x\n", NSD_GetNSDRomAddr() ); - - // ǂݏof[^̂ǂ炪L𔻒肷B - if( NSDi_CheckCorrectNSD( &s_NSDStoreEx, validLangBitmap ) ) { - // LNTRݒf[^擪vfɃRs[ - if( s_indexNSD == 1 ) { - MI_CpuCopyFast( (void *)&s_NSDStoreEx[ s_indexNSD ], (void *)&s_NSDStoreEx[ 0 ], sizeof(NSDStoreEx) ); - } - }else { - // Lȃf[^ȂȂAobt@NA - OS_TPrintf( "NSD clear.\n" ); - NSD_ClearSettings(); - return FALSE; - } - - OS_TPrintf("Use NSD[%d] : saveCount = %d\n", s_indexNSD, s_NSDStoreEx[ 0 ].saveCount ); - - return TRUE; -} - - -//---------------------------------------------------------------------- -// NTRݒf[^̃Cg -//---------------------------------------------------------------------- -BOOL NSD_WriteSettings( void ) -{ - int retry; - u32 nvramAddr; - NSDStoreEx *pNSDStoreEx = &s_NSDStoreEx[ 0 ]; - - // ܂NTRݒf[^[hĂȂ΁A[hsĕKvȏ擾B - if( !NSD_IsReadSettings() ) { - OS_TPrintf( "ERROR: Need call NSD_ReadSetting.\n" ); - return FALSE; - } - - // NSD CRCAZ[uJEglACgAhX̎ZoB - pNSDStoreEx->nsd.version = NTR_SETTINGS_DATA_VERSION; // o[Ŵ݂̂ɐݒB - pNSDStoreEx->crc16 = SVC_GetCRC16( 0xffff, (const void *)&pNSDStoreEx->nsd, sizeof(NTRSettingsData) ); - pNSDStoreEx->saveCount = (u8)( ( pNSDStoreEx->saveCount + 1 ) & SAVE_COUNT_MASK ); - - // NSD_EXCRCZoB - pNSDStoreEx->nsd_ex.version = NTR_SETTINGS_DATA_EX_VERSION; // o[Ŵ݂̂ɐݒB - pNSDStoreEx->nsd_ex.valid_language_bitmap &= NTR_LANG_BITMAP_ALL; // NTR͓pƈɐ؂̂ - pNSDStoreEx->nsd_ex.valid_language_bitmap |= ( 0x0001 << NTR_LANG_ENGLISH ); // p͋ON(NTRAv΍j - pNSDStoreEx->crc16_ex = SVC_GetCRC16( 0xffff, (const void *)&pNSDStoreEx->nsd_ex, sizeof(NTRSettingsDataEx) ); - - // NTRݒf[^̃Cg - DC_FlushRange( pNSDStoreEx, sizeof(NSDStoreEx) ); - retry = NVRAM_RETRY_NUM; - while( retry-- ) { - s_indexNSD ^= 0x01; // gC̓xɏ݃AhX؂ւB - nvramAddr = NSD_GetNSDRomAddr() + s_indexNSD * SPI_NVRAM_PAGE_SIZE; - OS_TPrintf("NSD write addr=%08x\n", nvramAddr ); - - if( NVRAMm_ExecuteCommand( COMM_WE, nvramAddr, sizeof(NSDStoreEx), (u8 *)pNSDStoreEx ) ) { - OS_TPrintf("NVRAM Write succeeded.\n"); - break; - } - SVC_WaitByLoop( 0x4000 ); - OS_TPrintf("NVRAM Write retry = %d.\n", NVRAM_RETRY_NUM - retry ); - } - return TRUE; -} - - -//---------------------------------------------------------------------- -// ~[OĂNTRݒf[^̂ǂ炪L𔻒 -//---------------------------------------------------------------------- - -static BOOL NSDi_CheckCorrectNSD( NSDStoreEx (*pNSDStoreExArray)[2], u32 validLangBitmap ) -{ - NSDStoreEx *pNSDStoreEx = (NSDStoreEx *)pNSDStoreExArray; - u16 i; - u16 nsd_valid = 0; - - // e~[f[^CRC & saveCount`FbN - for( i = 0; i < 2; i++ ) { - u16 crc; - BOOL isInvalid = FALSE; - - // NSD CRC`FbNsB - crc = SVC_GetCRC16( 0xffff, (const void *)&pNSDStoreEx[i].nsd, sizeof(NTRSettingsData) ); - - if( ( pNSDStoreEx[ i ].crc16 != crc ) // CRCAsaveCountl0x80ȉŁAƒo[Wvf[^𐳓ƔfB - || ( pNSDStoreEx[ i ].nsd.version != NTR_SETTINGS_DATA_VERSION ) - || ( pNSDStoreEx[ i ].saveCount >= SAVE_COUNT_MAX ) ) { - OS_TPrintf("NSD crc error.\n"); - isInvalid = TRUE; - } - - // NSDEx CRC`FbNsB - crc = SVC_GetCRC16( 0xffff, (const void *)&pNSDStoreEx[i].nsd_ex, sizeof(NTRSettingsDataEx) ); - - if( ( pNSDStoreEx[ i ].crc16_ex != crc ) - || ( pNSDStoreEx[ i ].nsd_ex.version != NTR_SETTINGS_DATA_EX_VERSION ) ) { - OS_TPrintf("NSDEx crc error.\n"); - isInvalid = TRUE; - } - - // NSD, NSDExCRCȂAf[^̒g`FbNB - if( !isInvalid ) { - if( NSDi_CheckDataValue( &pNSDStoreEx[ i ], validLangBitmap ) ) { // f[^lłȂ`FbNB - nsd_valid |= 0x01 << i; // "L"tOZbg - s_indexNSD = i; // NCD̃CfbNX؂ւB - }else { - isInvalid = TRUE; - } - } - - if( nsd_valid & ( 0x01 << i ) ) { - OS_TPrintf("NSD[%d] valid : saveCount = %d\n", i, pNSDStoreEx[i].saveCount); - }else { - OS_TPrintf("NSD[%d] invalid.\n", i); - } - } - - - if( nsd_valid == 0 ) { - s_indexNSD = 1; // ŏWrite"0"ɂȂ悤"1"ɂĂ - return FALSE; - }else if( nsd_valid == 0x03 ) { - // ~[OꂽNSDƂɐȏꍇAZ[uJEgl傫LƂB - u16 saveCount = (u8)( ( pNSDStoreEx[ 0 ].saveCount + 1 ) & SAVE_COUNT_MASK ); - s_indexNSD = ( saveCount == pNSDStoreEx[ 1 ].saveCount ) ? (u16)1 : (u16)0; - } - return TRUE; -} - - -// NTRݒf[^̒ll`FbNB // FALSE:ȂBTRUEFB -static BOOL NSDi_CheckDataValue( NSDStoreEx *pNSDStoreEx, u32 validLangBitmap ) -{ - NTRSettingsData *pNSD = &pNSDStoreEx->nsd; - NTRSettingsDataEx *pNSDEx = &pNSDStoreEx->nsd_ex; - - // NTRW6ȊǑɑΉĂꍇ́AΉɉpljB(NTRAv΍j - if( validLangBitmap & ~NTR_LANG_BITMAP_WW ) { - validLangBitmap |= ( 0x0001 << NTR_LANG_ENGLISH ); - } - - //pNSD->option; - - // NSDNSDExlanguage`FbN - if( ( ~validLangBitmap & ( 0x0001 << pNSD->option.language ) ) || - ( ~validLangBitmap & ( 0x0001 << pNSDEx->language ) ) - ) { - OS_TPrintf("NSD: invalid language : org:%02d ex:%02d bitmap:%04x\n", - pNSD->option.language, pNSDEx->language, pNSDEx->valid_language_bitmap ); - return FALSE; - } - - //pNSD->owner; - - // favoriteColor4bitȂ̂Ŕ͈͊O͂ȂB - - // birthday - if( pNSD->option.isSetBirthday ) { - if( ( pNSD->owner.birthday.month > 12 ) || ( pNSD->owner.birthday.day > 31 ) ) { - OS_TPrintf("NSD: invalid birthday : %02d/%02d\n", pNSD->owner.birthday.month, pNSD->owner.birthday.day ); - return FALSE; - } - } - - // nickname - if( pNSD->option.isSetNickname ) { - if( pNSD->owner.nickname.length > NTR_NICKNAME_LENGTH ) { - OS_TPrintf("NSD: invalid nickname length : %02d\n", pNSD->owner.nickname.length ); - return FALSE; - } - } - - // comment - if( pNSD->owner.comment.length > NTR_COMMENT_LENGTH ) { - OS_TPrintf("NSD: invalid comment length : %02d\n", pNSD->owner.comment.length ); - return FALSE; - } - - //pNSD->alarm; - if( ( pNSD->alarm.hour > 23 ) || ( pNSD->alarm.minute > 59 ) ) { - OS_TPrintf("NSD: invalid alarm time : %02d:%02d\n", pNSD->alarm.hour, pNSD->alarm.minute ); - return FALSE; - } - - //pNSD->tp; - // TPLu[VĺATP_CalcCalibrateParamŒl̃`FbNĂ̂ŁA`FbNȂB - -// OS_TPrintf( "NSD: correct data.\n" ); - return TRUE; -} - - -// NTRݒf[^̃NA -void NSD_ClearSettings( void ) -{ - NSDStoreEx *pNSDStoreEx = &s_NSDStoreEx[ 0 ]; - - s_indexNSD = 1; // CgOɔ]̂ŁA"0"I悤"1"ɂĂ - - MI_CpuClear16( pNSDStoreEx, sizeof(NSDStoreEx) ); - // l0ȊÔ - pNSDStoreEx->nsd.version = NTR_SETTINGS_DATA_VERSION; - pNSDStoreEx->nsd_ex.version = NTR_SETTINGS_DATA_EX_VERSION; - pNSDStoreEx->nsd.owner.birthday.month = 1; - pNSDStoreEx->nsd.owner.birthday.day = 1; - OS_TPrintf( "NSDStoreEx cleared.\n" ); -} - - -// NTRݒf[^̃jbNl[EFEȁB -void NSD_ClearOwnerInfo( void ) -{ - MI_CpuClear16( &GetNSD()->owner, sizeof(NTROwnerInfo) ); - GetNSD()->owner.birthday.month = 1; - GetNSD()->owner.birthday.day = 1; - GetNSD()->option.isSetBirthday = 0; - GetNSD()->option.isSetUserColor = 0; - GetNSD()->option.isSetNickname = 0; -} - - -//---------------------------------------------------------------------- -// NVRAMւ̃ANZX[`{ ( nvState <- COMM_RD or COMM_WE ) -//---------------------------------------------------------------------- -static BOOL NVRAMm_ExecuteCommand( int nvState, u32 addr, u16 size, u8 *pSrc ) -{ - static u8 sr_buf[ 32 ] ATTRIBUTE_ALIGN(32); - OSTick start; - BOOL isSending = FALSE; - u8 *pSR = (u8 *)sr_buf; - - PXI_SetFifoRecvCallback( PXI_FIFO_TAG_NVRAM , Callback_NVRAM ); - - while( 1 ) { - //--------------------------------------- - // NVRAMR}h𔭍s - //--------------------------------------- - if( !isSending ) { - - s_nvCbOccurred = FALSE; - - switch( nvState ) { - case COMM_RD: - isSending = SPI_NvramReadDataBytes( addr, size, pSrc ); - break; - - case COMM_WE: - isSending = SPI_NvramWriteEnable(); - break; - - case COMM_WR: - isSending = SPI_NvramPageWrite( addr, size , pSrc ); - start = OS_GetTick(); - break; - - case COMM_RDSR_WE: - case COMM_RDSR_WR: - isSending = SPI_NvramReadStatusRegister( pSR ); - break; - - case COMM_SRST: - isSending = SPI_NvramSoftwareReset(); - break; - } - //--------------------------------------- - // R}hsʁiR[obNj҂Čʂ - //--------------------------------------- - }else { // isSending == TRUE - if( s_nvCbOccurred == TRUE ) { // R[obN҂B - - isSending = FALSE; - - if( s_nvResult == SPI_PXI_RESULT_SUCCESS ) { - switch( nvState ) { - case COMM_RD: - return TRUE; - - case COMM_WE: - nvState = COMM_RDSR_WE; - break; - - case COMM_WR: - nvState = COMM_RDSR_WR; - break; - - case COMM_RDSR_WE: - case COMM_RDSR_WR: - - DC_InvalidateRange( pSR, 1 ); - - if( nvState == COMM_RDSR_WE ) { // CgCl[umFXe[gȂ - if( ( *pSR & SR_WEN ) ) { - nvState = COMM_WR; - }else { - OS_TPrintf("NVRAM ERR: Write Enable Invalid.\n"); - return FALSE; - } - }else { - if( ( *pSR & SR_WIP ) == 0 ) { // Cg^C[XI - return TRUE; - }else { - if( ( *pSR & SR_EER ) // SR_EERĂG[ - || ( OS_TicksToMilliSeconds( OS_GetTick() - start ) > 4000 ) ) { - // R}hs4bo߂G[iیj - DEBUG_Printf( "NVRAM SR : %02x\n", *pSR ); - nvState = COMM_SRST; - }else { - SVC_WaitByLoop( 0x4000 ); - } - } - } - break; - - case COMM_SRST: - OS_TPrintf("NVRAM ERR: PageErase Timeout and SoftReset.\n"); - return FALSE; - } - }else { // s_nvResult != SPI_PXI_RESULT_SUCCESS - OS_TPrintf("NVRAM ERR: NVRAM PXI command failed.\n"); - return FALSE; - } - } - } - } -} - - -//---------------------------------------------------------------------- -// R[obN -//---------------------------------------------------------------------- -static void Callback_NVRAM( PXIFifoTag tag, u32 data, BOOL err ) -{ - #pragma unused(tag) - - u16 command = (u16)( ( ( data & SPI_PXI_DATA_MASK ) & 0x7f00 ) >> 8 ); - - s_nvResult = (u16)( data & 0x00ff ); - s_nvCbOccurred = TRUE; // R[obNtOTRUE - - if( err ) { - OS_TPrintf("NVRAM-ARM9: Received PXI data is error.\n"); - s_nvResult = 0x00ff; - } - - switch(command){ // R}h\ - case SPI_PXI_COMMAND_NVRAM_READ: - DEBUG_Printf("NVRAM-ARM9:ReadDataBytes"); - break; - case SPI_PXI_COMMAND_NVRAM_WREN: - DEBUG_Printf("NVRAM-ARM9:WriteEnable"); - break; - case SPI_PXI_COMMAND_NVRAM_PW: - DEBUG_Printf("NVRAM-ARM9:PageWrite"); - break; - case SPI_PXI_COMMAND_NVRAM_RDSR: - DEBUG_Printf("NVRAM-ARM9:ReadStatusRegister"); - break; - case SPI_PXI_COMMAND_NVRAM_WRDI: - DEBUG_Printf("NVRAM-ARM9:WriteDisable"); - break; - case SPI_PXI_COMMAND_NVRAM_PE: - DEBUG_Printf("NVRAM-ARM9:PageErase"); - break; - case SPI_PXI_COMMAND_NVRAM_SR: - DEBUG_Printf("NVRAM-ARM9:SoftwareReset"); - break; - default: - DEBUG_Printf("NVRAM-ARM9:?????"); - break; - } - if( s_nvResult != SPI_PXI_RESULT_SUCCESS ) { - OS_TPrintf(" Error! ->%x", s_nvResult ); - } - DEBUG_Printf("\n"); -} - diff --git a/build/libraries_sysmenu/settings/ARM9/src/TWLHWInfo.c b/build/libraries_sysmenu/settings/ARM9/src/TWLHWInfo.c deleted file mode 100644 index af1ccc9f..00000000 --- a/build/libraries_sysmenu/settings/ARM9/src/TWLHWInfo.c +++ /dev/null @@ -1,418 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: TWLHWInfo.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include - -// define data---------------------------------------------------------- -//#define USE_SHA1_SIGNATURE // ̃nbVSHA1gpi`ȂHMAC-SHA1gpj - -// function's prototype------------------------------------------------- -static BOOL THWi_CalcSignature( void *pDstSign, const void *pSrc, u32 len, const u8 *pPrivKeyDER ); -static BOOL THWi_CheckDigest( void *pTgt, u32 length, u8 *pDigest ); -static BOOL THWi_CheckNormalInfoValue( const TWLHWNormalInfo *pSrcInfo ); -static BOOL THWi_CheckSignature( void *pTgt, u32 length, u8 *pSignature ); -static BOOL THWi_CheckSecureInfoValue( const TWLHWSecureInfo *pSecure ); -static void DEBUG_PrintDigest( u8 *pDigest ); -static void DEBUG_Dump( u8 *pSrc, u32 len ); - -static inline u16 SCFG_GetBondingOption(void) -{ - return (u16)(*(u8*)(HW_SYS_CONF_BUF+HWi_WSYS08_OFFSET) & HWi_WSYS08_OP_OPT_MASK); -} - -// static variables----------------------------------------------------- -TWLHWNormalInfo s_hwInfoN ATTRIBUTE_ALIGN(32); -TWLHWSecureInfo s_hwInfoS ATTRIBUTE_ALIGN(32); -static BOOL s_isReadNormal; -static BOOL s_isReadSecure; -static BOOL s_isSignCheck; - -// global variables----------------------------------------------------- - -// const data----------------------------------------------------------- - -// m[}@ftHgl -static TWLHWNormalInfo s_normalDefault = { - 0x5a, - { 0x00 }, -}; - - -// m[}@o[W݊Xg -static const u8 s_normalVersionList[] = { 1, TSF_VERSION_TERMINATOR }; - - -// m[}@TSF[hp[^ -static const TSFParam s_normalParam = { - sizeof(TWLHWNormalInfo), - TWL_HWINFO_FILE_LENGTH, - s_normalVersionList, - (void (*)(void *))THW_ClearNormalInfoDirect, - THWi_CheckDigest, - (int (*)(void *))THWi_CheckNormalInfoValue, -}; - - -// ZLA@ftHgl -static TWLHWSecureInfo s_secureDefault = { - TWL_LANG_BITMAP_AMERICA, - TWL_REGION_AMERICA, - { "0123456789A\0\0\0\0" }, -}; - - -// ZLA@o[W݊Xg -static const u8 s_secureVersionList[] = { 1, TSF_VERSION_TERMINATOR }; - - -// ZLA@TSF[hp[^ -static const TSFParam s_secureParam = { - sizeof(TWLHWSecureInfo), - TWL_HWINFO_FILE_LENGTH, - s_secureVersionList, - (void (*)(void *))THW_ClearSecureInfoDirect, - THWi_CheckSignature, - (int (*)(void *))THWi_CheckSecureInfoValue, -}; - - -// ZLA@J -static const u8 s_publicKey[ RSA_KEY_LENGTH ] = { - 0xcf, 0x1a, 0xe0, 0xf7, 0xd1, 0x27, 0x59, 0xfb, 0x3a, 0x8c, 0xf5, 0x58, 0xc7, 0x17, 0xc1, 0xf2, - 0xa9, 0x77, 0xbd, 0x53, 0x59, 0xe4, 0xd3, 0x01, 0x27, 0xca, 0xb7, 0xc9, 0x92, 0x32, 0x2e, 0xb5, - 0xeb, 0x13, 0xbf, 0xca, 0xe2, 0x1b, 0xe7, 0x5c, 0xb0, 0x68, 0x5c, 0x58, 0x87, 0x84, 0x8c, 0x69, - 0xb2, 0x59, 0x6b, 0x89, 0xd7, 0xa1, 0x89, 0x4c, 0x46, 0x36, 0xd8, 0xbb, 0xbd, 0xc8, 0x9d, 0xf5, - 0xd2, 0x64, 0xb6, 0xeb, 0x71, 0x56, 0x2a, 0x69, 0xbd, 0x1d, 0xa3, 0xf6, 0xa1, 0x64, 0xe4, 0x8b, - 0xda, 0x9b, 0xd2, 0x67, 0x19, 0xb5, 0xf0, 0xe0, 0xbb, 0xe3, 0x2c, 0xa9, 0xb4, 0x5c, 0xfb, 0x2c, - 0x66, 0x61, 0xee, 0x18, 0x87, 0x23, 0x86, 0x34, 0xe7, 0xed, 0x1a, 0x75, 0x6e, 0x58, 0xb8, 0x81, - 0x61, 0x4e, 0x9d, 0x4f, 0x12, 0x44, 0x27, 0xf4, 0x16, 0x65, 0xa8, 0x9e, 0x0c, 0x18, 0x34, 0x43, -}; - - -// --------------------------------------------------------------------- -// HWm[} -// --------------------------------------------------------------------- - -// [h -TSFReadResult THW_ReadNormalInfo( void ) -{ - s_isReadNormal = TRUE; - return TSF_ReadFile( (char *)TWL_HWINFO_NORMAL_PATH, GetHWN(), &s_normalParam, NULL ); -} - - -// Cg -BOOL THW_WriteNormalInfo( void ) -{ - if( !s_isReadNormal ) { - return FALSE; - } - return THW_WriteNormalInfoDirect( GetHWN() ); -} - - -// ڃCg -BOOL THW_WriteNormalInfoDirect( const TWLHWNormalInfo *pSrcInfo ) -{ - // wb_̍쐬 - TSFHeader header; - MI_CpuClear8( &header, sizeof(TSFHeader) ); - header.version = TWL_HWINFO_NORMAL_VERSION; - header.bodyLength = sizeof( TWLHWNormalInfo ); - SVC_CalcSHA1( header.digest.sha1, pSrcInfo, sizeof(TWLHWNormalInfo) ); - // Cg - if( !TSF_WriteFile( (char *)TWL_HWINFO_NORMAL_PATH, - &header, - (const void *)pSrcInfo, - NULL ) ) { - return FALSE; - } - // [hAstaticobt@ւ̃Rs[s - if( !s_isReadNormal ) { - s_isReadNormal = TRUE; - MI_CpuCopy8( pSrcInfo, GetHWN(), sizeof(TWLHWNormalInfo) ); - } - return TRUE; -} - - -// t@C̃Jo -BOOL THW_RecoveryNormalInfo( TSFReadResult err ) -{ - return TSF_RecoveryFile( err, (char *)TWL_HWINFO_NORMAL_PATH, TWL_HWINFO_FILE_LENGTH ); - -} - - -// _CWFXg`FbN -static BOOL THWi_CheckDigest( void *pTgt, u32 length, u8 *pDigest ) -{ - u8 digest[ SVC_SHA1_DIGEST_SIZE ]; - - SVC_CalcSHA1( digest, pTgt, length ); - return SVC_CompareSHA1( digest, pDigest ); -} - - -// l`FbN -static BOOL THWi_CheckNormalInfoValue( const TWLHWNormalInfo *pSrcInfo ) -{ -#pragma unused(pSrcInfo) - return TRUE; -} - - -// VftHgl̃Zbg -void THW_SetDefaultNormalInfo( const TWLHWNormalInfo *pSrcInfo ) -{ - MI_CpuCopy8( pSrcInfo, &s_normalDefault, sizeof(TWLHWNormalInfo) ); -} - - -// l̃NA -void THW_ClearNormalInfoDirect( TWLHWNormalInfo *pDstInfo ) -{ - MI_CpuCopy8( &s_normalDefault, pDstInfo, sizeof(TWLHWNormalInfo) ); -} - - -// ftHgl̎擾 -const TWLHWNormalInfo *THW_GetDefaultNormalInfo( void ) -{ - return &s_normalDefault; -} - - -// ݒl̎擾 -const TWLHWNormalInfo *THW_GetNormalInfo( void ) -{ - return GetHWN(); -} - - -// --------------------------------------------------------------------- -// HWZLA -// --------------------------------------------------------------------- - -// [h -TSFReadResult THW_ReadSecureInfo( void ) -{ - s_isReadSecure = TRUE; - s_isSignCheck = TRUE; - return TSF_ReadFile( (char *)TWL_HWINFO_SECURE_PATH, GetHWS(), &s_secureParam, NULL ); -} - - -// m[`FbN[h -TSFReadResult THW_ReadSecureInfo_NoCheck( void ) -{ - s_isReadSecure = TRUE; - s_isSignCheck = FALSE; - return TSF_ReadFile( (char *)TWL_HWINFO_SECURE_PATH, GetHWS(), &s_secureParam, NULL ); -} - - -// Cg -BOOL THW_WriteSecureInfo( const u8 *pPrivKeyDER ) -{ - if( !s_isReadSecure ) { - return FALSE; - } - return THW_WriteSecureInfoDirect( GetHWS(), pPrivKeyDER ); -} - - -// ڃCg -BOOL THW_WriteSecureInfoDirect( const TWLHWSecureInfo *pSrcInfo, const u8 *pPrivKeyDER ) -{ - // wb_̍쐬 - TSFHeader header; - OSTick start = OS_GetTick(); - MI_CpuClear8( &header, sizeof(TSFHeader) ); - header.version = TWL_HWINFO_SECURE_VERSION; - header.bodyLength = sizeof( TWLHWSecureInfo ); - - if( !THWi_CalcSignature( (void *)header.digest.rsa, - (const void *)pSrcInfo, - sizeof(TWLHWSecureInfo), - pPrivKeyDER ) ) { - return FALSE; - } - - // Cg - if( !TSF_WriteFile( (char *)TWL_HWINFO_SECURE_PATH, - &header, - (const void *)pSrcInfo, - NULL ) ) { - return FALSE; - } - - OS_TPrintf( "RSA sign encrypt time = %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) ); - - // [hAstaticobt@ւ̃Rs[s - if( !s_isReadSecure ) { - s_isReadSecure = TRUE; - MI_CpuCopy8( pSrcInfo, GetHWS(), sizeof(TWLHWSecureInfo) ); - } - return TRUE; -} - - -// ̎Zo -static BOOL THWi_CalcSignature( void *pDstSign, const void *pSrc, u32 len, const u8 *pPrivKeyDER ) -{ -#ifdef HW_SIGNATURE_ENABLE_ - u8 digest[ SVC_SHA1_DIGEST_SIZE ]; - u8 key[ SVC_SHA1_DIGEST_SIZE ]; - u64 id = SCFG_ReadFuseData(); - - // 閧w肳ĂȂꍇ͏ȂB - if( !pPrivKeyDER ) { - return TRUE; - } - - // 閧w肳ꂽꍇ́A{fBOIvVɊ֌WȂtsB -#ifdef USE_SHA1_SIGNATURE - SVC_CalcSHA1( digest, pSrc, len ); -#else - SVC_CalcSHA1( key, &id, sizeof(u64) ); // idSHA1nbVlL[ƂĎgp - SVC_CalcHMACSHA1( digest, pSrc, len, key, SVC_SHA1_DIGEST_SIZE ); -#endif - return ACSign_Encrypto( pDstSign, - pPrivKeyDER, - digest, - SVC_SHA1_DIGEST_SIZE ); -#else // HW_SIGNATURE_ENABLE_ - return TRUE; -#endif // HW_SIGNATURE_ENABLE_ -} - - -// t@C̃Jo -BOOL THW_RecoverySecureInfo( TSFReadResult err ) -{ - return TSF_RecoveryFile( err, (char *)TWL_HWINFO_SECURE_PATH, TWL_HWINFO_FILE_LENGTH ); -} - - -// `FbN -static BOOL THWi_CheckSignature( void *pTgt, u32 length, u8 *pSignature ) -{ - static u32 heap[ 4096 / sizeof(u32) ]; - SVCSignHeapContext acmemoryPool; - u8 digest_sign[ SVC_SHA1_DIGEST_SIZE ]; - u8 digest_calc[ SVC_SHA1_DIGEST_SIZE ]; - u8 key[ SVC_SHA1_DIGEST_SIZE ]; - u64 id = SCFG_ReadFuseData(); - OSTick start = OS_GetTick(); - -#ifdef USE_SHA1_SIGNATURE - SVC_CalcSHA1( digest_calc, pTgt, length ); -#else - SVC_CalcSHA1( key, &id, sizeof(u64) ); // idSHA1nbVlL[ƂĎgp - SVC_CalcHMACSHA1( digest_calc, pTgt, length, key, SVC_SHA1_DIGEST_SIZE ); -#endif - SVC_InitSignHeap( &acmemoryPool, heap, 4096 ); - SVC_DecryptSign( &acmemoryPool, digest_sign, pSignature, s_publicKey ); - - OS_TPrintf( "RSA sign decrypt time = %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) ); - - // `FbN - { - BOOL retval = SVC_CompareSHA1( digest_sign, digest_calc ); - - // {fBOIvVuiŁv̎̂ݏ`FbNʂԂB - if( SCFG_GetBondingOption() == 0 ) { - return ( s_isSignCheck ) ? retval : TRUE; - }else { - OS_TPrintf( "Development Machine : signature check trough.\n" ); - return TRUE; - } - } -} - - -// HW Secure l`FbN -static BOOL THWi_CheckSecureInfoValue( const TWLHWSecureInfo *pSrcInfo ) -{ - int serialNoLen = STD_StrLen( (const char *)pSrcInfo->serialNo ); - if( - ( pSrcInfo->region >= TWL_REGION_MAX ) || - ( serialNoLen < TWL_HWINFO_SERIALNO_LEN_AMERICA ) || - ( serialNoLen > TWL_HWINFO_SERIALNO_LEN_OTHERS ) - ) { - return FALSE; - } - - return TRUE; -} - - -// VftHgl̃Zbg -void THW_SetDefaultSecureInfo( const TWLHWSecureInfo *pSrcInfo ) -{ - MI_CpuCopy8( pSrcInfo, &s_secureDefault, sizeof(TWLHWSecureInfo) ); -} - - -// l̃NA -void THW_ClearSecureInfoDirect( TWLHWSecureInfo *pDstInfo ) -{ - MI_CpuCopy8( &s_secureDefault, pDstInfo, sizeof(TWLHWSecureInfo) ); -} - - -// ftHgl̎擾 -const TWLHWSecureInfo *THW_GetDefaultSecureInfo( void ) -{ - return &s_secureDefault; -} - -// ݒl̎擾 -const TWLHWSecureInfo *THW_GetSecureInfo( void ) -{ - return GetHWS(); -} - - -// --------------------------------------------------------------------- -// fobO -// --------------------------------------------------------------------- - -static void DEBUG_PrintDigest( u8 *pDigest ) -{ - int i; - for( i = 0; i < SVC_SHA1_DIGEST_SIZE; i++ ) { - OS_TPrintf( "%02x", *pDigest++ ); - } - OS_TPrintf( "\n" ); -} - -static void DEBUG_Dump( u8 *pSrc, u32 len ) -{ - int i; - for( i = 0; i < len; i++ ) { - if( ( i & 0x0f ) == 0 ) { - OS_TPrintf( "\n" ); - } - OS_TPrintf( "%02x ", *pSrc++ ); - } - OS_TPrintf( "\n" ); -} - diff --git a/build/libraries_sysmenu/settings/ARM9/src/TWLSettings.c b/build/libraries_sysmenu/settings/ARM9/src/TWLSettings.c deleted file mode 100644 index 4f0213b0..00000000 --- a/build/libraries_sysmenu/settings/ARM9/src/TWLSettings.c +++ /dev/null @@ -1,316 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: TWLSettings.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include - -// define data---------------------------------------------------------- -#define TSD_FILE_MIRROR_NUM 2 -#define TSD_NOT_CORRECT 0x00ff // TSDݒf[^ǂݏoĂȂ or LȂ̂ȂƂB - -// function's prototype------------------------------------------------- -static BOOL TSDi_RecoveryFile( TSFReadResult err, char *pFilePath ); -static BOOL TSDi_CheckDigest( void *pTgt, u32 length, u8 *pDigest ); -static BOOL TSDi_CheckValue( const TWLSettingsData *pSecure ); -static void TSDi_ClearSettingsDirect( TWLSettingsData *pTSD ); -static BOOL TSDi_CheckDate( u8 month, u8 day ); -static BOOL TSDi_CheckTime( u8 hour, u8 minute ); -static BOOL TSDi_CheckString( const u16 *pStr, u8 maxLength ); - -// static variables----------------------------------------------------- -TWLSettingsData s_settings ATTRIBUTE_ALIGN(32); -static int s_indexTSD = TSD_NOT_CORRECT; -static u8 s_saveCount; - -// global variables----------------------------------------------------- - -// const data----------------------------------------------------------- -static const char *s_TSDPath[ TSD_FILE_MIRROR_NUM ] = { - (const char *)"nand:/shared1/TWLCFG0.dat", - (const char *)"nand:/shared1/TWLCFG1.dat", -}; - - -// o[W݊Xg -static const u8 s_settingsVersionList[] = { 1, TSF_VERSION_TERMINATOR }; - - -// TSF[hp[^ -static const TSFParam s_settingsParam = { - sizeof(TWLSettingsData), - TWL_SETTINGS_FILE_LENGTH, - s_settingsVersionList, - (void (*)(void *))TSDi_ClearSettingsDirect, - TSDi_CheckDigest, - (int (*)(void *))TSDi_CheckValue, -}; - -// e[Wł̍R[h͈̓Xg -static const u32 s_regionCountryList[ TWL_REGION_MAX ] = { - TWL_COUNTRY_MAPPING_JAPAN, - TWL_COUNTRY_MAPPING_AMERICA, - TWL_COUNTRY_MAPPING_EUROPE, - TWL_COUNTRY_MAPPING_AUSTRALIA, - TWL_COUNTRY_MAPPING_CHINA, - TWL_COUNTRY_MAPPING_KOREA, -}; - - -// --------------------------------------------------------------------- -// TWL{̐ݒf[^ -// --------------------------------------------------------------------- - -// t@CϐɃ[h -BOOL TSD_ReadSettings( void ) -{ - int i; - u8 saveCount[ TSD_FILE_MIRROR_NUM ]; - TWLSettingsData settings[ TSD_FILE_MIRROR_NUM ]; - BOOL retval = FALSE; - - // [h - s_saveCount = 0; - s_indexTSD = TSD_NOT_CORRECT; - for( i = 0; i < TSD_FILE_MIRROR_NUM; i++ ) { - TSFReadResult rdResult = TSF_ReadFile( (char *)s_TSDPath[ i ], - &settings[ i ], - &s_settingsParam, - &saveCount[ i ] ); - OS_TPrintf( "TSD[%d] saveCount = %d : ", i, saveCount[ i ] ); - if( rdResult == TSF_READ_RESULT_SUCCEEDED ) { - OS_TPrintf( "enable.\n" ); - // ǂTSDgp邩 - if( s_indexTSD == TSD_NOT_CORRECT ) { // ŏɗLTSDA܂͂gp邱ƂɁB - s_indexTSD = i; - s_saveCount = saveCount[ i ]; - }else { // P‚LȂAsaveCountlrđIB - if( ( ( saveCount[ 0 ] + 1 ) & SAVE_COUNT_MASK ) == saveCount[ 1 ] ) { - s_indexTSD = 1; - s_saveCount = saveCount[ 1 ]; - } - } - }else { - OS_TPrintf( "disable.\n" ); - // [hɎsꍇ̓t@CJo - (void)TSDi_RecoveryFile( rdResult, (char *)s_TSDPath[ i ] ); - (void)TSD_WriteSettingsDirect( &settings[ i ] ); - } - } - - // LTSDÓIobt@ɃRs[ - if( s_indexTSD != TSD_NOT_CORRECT ) { - MI_CpuCopyFast( &settings[ s_indexTSD ], GetTSD(), sizeof(TWLSettingsData) ); - retval = TRUE; - }else { - // LTSDȂȂÓIobt@ - TSDi_ClearSettingsDirect( GetTSD() ); - s_indexTSD = 1; - } - - OS_TPrintf( "TSD[%d] saveCount = %d : Use.\n", s_indexTSD, s_saveCount ); - - return retval; - -} - - -// ϐ̒lt@CɃCg -BOOL TSD_WriteSettings( void ) -{ - if( s_indexTSD == TSD_NOT_CORRECT ) { - return FALSE; - } - return TSD_WriteSettingsDirect( GetTSD() ); -} - - -// wf[^̒lt@CɒڃCg -BOOL TSD_WriteSettingsDirect( const TWLSettingsData *pSrcInfo ) -{ - // wb_̍쐬 - TSFHeader header; - MI_CpuClear8( &header, sizeof(TSFHeader) ); - header.version = TWL_SETTINGS_DATA_VERSION; - header.bodyLength = sizeof(TWLSettingsData); - SVC_CalcSHA1( header.digest.sha1, pSrcInfo, sizeof(TWLSettingsData) ); - // ܂x[hĂȂȂAstaticobt@ւ̃Rs[s - if( s_indexTSD == TSD_NOT_CORRECT ) { - s_saveCount = 0; - s_indexTSD = 1; - MI_CpuCopy8( pSrcInfo, GetTSD(), sizeof(TWLSettingsData) ); - } - // t@CɃCg - s_indexTSD ^= 0x01; - if( !TSF_WriteFile( (char *)s_TSDPath[ s_indexTSD ], - &header, - (const void *)pSrcInfo, - &s_saveCount ) ) { - return FALSE; - } - return TRUE; -} - - -// t@C̃Jo -static BOOL TSDi_RecoveryFile( TSFReadResult err, char *pFilePath ) -{ - return TSF_RecoveryFile( err, pFilePath, TWL_HWINFO_FILE_LENGTH ); - -} - - -// _CWFXg`FbN -static BOOL TSDi_CheckDigest( void *pTgt, u32 length, u8 *pDigest ) -{ - u8 digest[ SVC_SHA1_DIGEST_SIZE ]; - - SVC_CalcSHA1( digest, pTgt, length ); - return SVC_CompareSHA1( digest, pDigest ); -} - - -// TWLݒf[^̃NA -void TSD_ClearSettings( void ) -{ - TSDi_ClearSettingsDirect( GetTSD() ); -} - - -// TWLݒf[^̒ڃNA -static void TSDi_ClearSettingsDirect( TWLSettingsData *pTSD ) -{ - int i; - MI_CpuClearFast( pTSD, sizeof(TWLSettingsData) ); - // l"0"ȊÔ - pTSD->backLightBrightness = TWL_BACKLIGHT_LEVEL_MAX; - pTSD->owner.birthday.month = 1; - pTSD->owner.birthday.day = 1; - // R[hHW̌rbg}bvZo - for( i = 0; i < TWL_LANG_CODE_MAX; i++ ) { - if( THW_GetValidLanguageBitmap() & ( 0x0001 << i ) ) { - pTSD->language = (TWLLangCode)i; - break; - } - } -} - - -// --------------------------------------------------------------------- -// l`FbN -// --------------------------------------------------------------------- - -// l`FbN -static BOOL TSDi_CheckValue( const TWLSettingsData *pSrc ) -{ - // R[h - if( pSrc->flags.isSetCountry ) { - u32 countryStart = (u32)( s_regionCountryList[ THW_GetRegion() ] >> 16 ); - u32 countryEnd = (u32)( s_regionCountryList[ THW_GetRegion() ] & 0x0000ffff ); - if( ( pSrc->country < countryStart ) || - ( pSrc->country > countryEnd ) ) { - return FALSE; - } - }else if( pSrc->country != TWL_COUNTRY_UNDEFINED ) { - return FALSE; - } - - // R[h - if( pSrc->flags.isSetLanguage && - !( THW_GetValidLanguageBitmap() & ( 0x0001 << pSrc->language ) ) - ) { - return FALSE; - } - - // obNCgPx - if( pSrc->backLightBrightness > TWL_BACKLIGHT_LEVEL_MAX ) { - return FALSE; - } - - // u8 rtcLastSetYear; // RTC̑OݒNi`FbN̕KvȂj - // s64 rtcOffset; // RTCݒ莞̃ItZbgli`FbN̕KvȂj - - // I[i[ - if( !TSDi_CheckDate( pSrc->owner.birthday.month, pSrc->owner.birthday.day ) || - !TSDi_CheckString( pSrc->owner.nickname, TWL_NICKNAME_LENGTH ) || - !TSDi_CheckString( pSrc->owner.comment, TWL_COMMENT_LENGTH ) ) { - return FALSE; - } - - // A[ - if( !TSDi_CheckTime( pSrc->alarm.hour, pSrc->alarm.minute ) ) { - return FALSE; - } - - // TWLTPCalibData tp; // TP␳f[^i`FbN̕KvȂBmFς݁Bj - - // p^Rg[ - if( ( pSrc->parental.ogn >= TWL_RATING_OGN_MAX ) || - ( pSrc->parental.ratingAge > TWL_PARENTAL_CONTROL_RATING_AGE_MAX ) || -// ( pSrc->parental.secretQuestion > TWL_PARENTAL_CONTROL_SECRET_QUESTION_MAX ) || -// ( pSrc->parental.secretAnswerLength > TWL_PARENTAL_CONTROL_SECRET_ANSWER_LENGTH_MAX ) || - ( STD_StrLen( pSrc->parental.password ) > TWL_PARENTAL_CONTROL_PASSWORD_LENGTH ) || - !TSDi_CheckString( pSrc->parental.secretAnswer, TWL_PARENTAL_CONTROL_SECRET_ANSWER_LENGTH_MAX ) ) { - return FALSE; - } - // CXg[”\NANDAv - if( pSrc->freeSoftBoxCount > TWL_FREE_SOFT_BOX_COUNT_MAX ) { - return FALSE; - } - - return TRUE; -} - - -// t`FbN -static BOOL TSDi_CheckDate( u8 month, u8 day ) -{ - static const u8 dayNumList[ 12 ] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; - - if( ( month < 1 ) || - ( month > 12 ) || - ( day < 1 ) || - ( day > dayNumList[ month - 1 ] ) ) { - return FALSE; - } - return TRUE; -} - - -// `FbN -static BOOL TSDi_CheckTime( u8 hour, u8 minute ) -{ - if( ( hour > 23 ) || - ( minute > 59 ) ) { - return FALSE; - } - return TRUE; -} - - -// 񒷂`FbN -static BOOL TSDi_CheckString( const u16 *pStr, u8 maxLength ) -{ - while( maxLength-- ) { - if( *pStr++ == 0 ) { - return TRUE; - } - } - return FALSE; -} - diff --git a/build/libraries_sysmenu/settings/ARM9/src/TWLStoreFile.c b/build/libraries_sysmenu/settings/ARM9/src/TWLStoreFile.c deleted file mode 100644 index e0380ff3..00000000 --- a/build/libraries_sysmenu/settings/ARM9/src/TWLStoreFile.c +++ /dev/null @@ -1,257 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: TWLHWInfo.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include - -// define data---------------------------------------------------------- -// function's prototype------------------------------------------------- -// static variables----------------------------------------------------- -// global variables----------------------------------------------------- -// const data----------------------------------------------------------- - -// function's description----------------------------------------------- - -// TSFt@C̓ǂݏo -TSFReadResult TSF_ReadFile( char *pPath, void *pDstBody, const TSFParam *pParam, u8 *pSaveCount ) -{ - TSFHeader header; - TSFReadResult retval; - FSFile file; - FS_InitFile( &file ); - - // wb_pobt@̃NA - MI_CpuClear8( &header, sizeof(TSFHeader) ); - - // {fBpobt@̃NA - if( pParam->pClearFunc ) { - // NAp֐̎́Ao[Wʌ݊̏ꍇlāAftHglZbgĂ - pParam->pClearFunc( pDstBody ); - }else { - // łȂꍇ́A[hobt@NA - MI_CpuClear8( pDstBody, pParam->dataLength ); - } - - // t@CI[v - if( !FS_OpenFileEx( &file, pPath, FS_FILEMODE_R ) ) { - OS_TPrintf( "Read : file open error. %s\n", pPath ); - retval = TSF_READ_RESULT_ERROR_FILE_EXIST; - goto END2; - } - - // t@C`FbN - if( FS_GetFileLength( &file ) != pParam->fileLength ) { - OS_TPrintf( "Read : file length error. : %s length = %d\n", pPath, FS_GetFileLength( &file ) ); - retval = TSF_READ_RESULT_ERROR_FILE_LENGTH; - goto END; - } - - // wb_[h - if( FS_ReadFile( &file, &header, sizeof(TSFHeader) ) < sizeof(TSFHeader) ) { - OS_TPrintf( "Read : file read error. %s\n", pPath ); - retval = TSF_READ_RESULT_ERROR_DATA; - goto END; - } - - // wb_`FbN - if( header.bodyLength > pParam->dataLength ) { - OS_TPrintf( "Read : file header error. %s\n", pPath ); - retval = TSF_READ_RESULT_ERROR_DATA; - goto END; - } - - // {fB[h - if( FS_ReadFile( &file, pDstBody, (long)header.bodyLength ) < pParam->dataLength ) { - OS_TPrintf( "Read : file read error. %s\n", pPath ); - retval = TSF_READ_RESULT_ERROR_DATA; - goto END; - } - - // f[^̃_CWFXg`FbN - if( pParam->pCheckDigestFunc && - !pParam->pCheckDigestFunc( pDstBody, header.bodyLength, header.digest.dst ) ) { - OS_TPrintf( "Read : file digest error. %s\n", pPath ); - retval = TSF_READ_RESULT_ERROR_DATA; - goto END; - } - - // f[^̒l`FbN - if( pParam->pCheckValueFunc && - !pParam->pCheckValueFunc( pDstBody ) ) { - OS_TPrintf( "Read : file data value error. %s\n", pPath ); - retval = TSF_READ_RESULT_ERROR_DATA; - goto END; - } - - // o[W݊`FbN - if( pParam->conpatibleVerList ) { - const u8 *pVersion = pParam->conpatibleVerList; - while( *pVersion++ != TSF_VERSION_TERMINATOR ) { - if( *pVersion == header.version ) { - break; //@݊ - } - } - if( *pVersion == TSF_VERSION_TERMINATOR ) { - retval = TSF_READ_RESULT_ERROR_DATA; - goto END; - } - } - - if( pSaveCount ) { - *pSaveCount = header.saveCount; - } - retval = TSF_READ_RESULT_SUCCEEDED; -END: - // t@CN[Y - FS_CloseFile( &file ); -END2: - - if( retval != TSF_READ_RESULT_SUCCEEDED ) { - // {fBpobt@̃NA - if( pParam->pClearFunc ) { - // NAp֐̎́Ao[Wʌ݊̏ꍇlāAftHglZbgĂ - pParam->pClearFunc( pDstBody ); - }else { - // łȂꍇ́A[hobt@NA - MI_CpuClear8( pDstBody, pParam->dataLength ); - } - } - - return retval; -} - - -// TWLt@C̃Cg -BOOL TSF_WriteFile( char *pPath, TSFHeader *pHeader, const void *pSrcBody, u8 *pSaveCount ) -{ - BOOL retval = FALSE; - FSFile file; - FS_InitFile( &file ); - - if( pSaveCount ) { - *pSaveCount = (u8)( ( *pSaveCount + 1 ) & SAVE_COUNT_MASK ); - pHeader->saveCount = *pSaveCount; - }else { - pHeader->saveCount = 0; - } - - OS_TPrintf( "Write > %s : %d\n", pPath, pHeader->saveCount ); - - // t@CI[v - if( !FS_OpenFileEx( &file, pPath, FS_FILEMODE_R | FS_FILEMODE_W ) ) { // R|W[hŊJƁAt@Cc܂܍XVB - OS_TPrintf( "Write : file open error. %s\n", pPath ); - return FALSE; - } - - // Cg - if( FS_WriteFile( &file, pHeader, sizeof(TSFHeader) ) < sizeof(TSFHeader) ) { - OS_TPrintf( "Write : file header write error. %s\n", pPath ); - goto END; - } - if( FS_WriteFile( &file, pSrcBody, (long)pHeader->bodyLength ) < pHeader->bodyLength ) { - OS_TPrintf( "Write : file body write error. %s\n", pPath ); - goto END; - } - - retval = TRUE; -END: - // t@CN[Y - FS_CloseFile( &file ); - - return retval; -} - - -// TWLt@C̃Jo -BOOL TSF_RecoveryFile( TSFReadResult err, char *pPath, u32 fileLength ) -{ -#define INITIAL_DATA_PATTERN 0xffffffff -#define READ_SIZE 1024 - u32 buffer[ READ_SIZE / sizeof(u32) ]; - u32 length; - BOOL retval = FALSE; - BOOL isWrite = FALSE; - FSFile file; - FS_InitFile( &file ); - - if( err == TSF_READ_RESULT_SUCCEEDED ) { - return TRUE; - } - - // t@C - if( err == TSF_READ_RESULT_ERROR_FILE_EXIST ) { - if( !FS_CreateFile( pPath, FS_PERMIT_R | FS_PERMIT_W ) ) { - OS_TPrintf( "Recovery: create file error. %s\n", pPath ); - goto END2; - } - } - - // t@CI[v - if( !FS_OpenFileEx( &file, pPath, FS_FILEMODE_R | FS_FILEMODE_W ) ) { - OS_TPrintf( "Recovery : file open error. %s\n", pPath ); - goto END2; - } - - // t@CύX - if( ( err == TSF_READ_RESULT_ERROR_FILE_EXIST ) || - ( err == TSF_READ_RESULT_ERROR_FILE_LENGTH ) ) { - if( FS_SetFileLength( &file, fileLength ) != FS_RESULT_SUCCESS ) { - OS_TPrintf( "Recovery : set file length error. %s\n", pPath ); - goto END; - } - } - - // f[^xt@C - MI_CpuFillFast( buffer, INITIAL_DATA_PATTERN, sizeof(buffer) ); - length = fileLength; - while( length ) { - int i; - u32 rdSize = ( length > READ_SIZE ) ? READ_SIZE : length; - FS_ReadFile( &file, buffer, (s32)rdSize ); - for( i = 0; i < rdSize / sizeof(u32); i++ ) { - if( buffer[ i ] != INITIAL_DATA_PATTERN ) { - isWrite = TRUE; - goto NEXT; - } - } - length -= rdSize; - } - -NEXT: - // xt@CG[̏ꍇ́At@Cf[^i0xff߁j - if( isWrite ) { - FS_SeekFile( &file, 0, FS_SEEK_SET ); - length = fileLength; - while( length ) { - u32 wrSize = ( length > READ_SIZE ) ? READ_SIZE : length; - if( FS_WriteFile( &file, buffer, (s32)wrSize ) < wrSize ) { - OS_TPrintf( "Recovery : write error. %s\n", pPath ); - goto END; - } - length -= wrSize; - } - } - - retval = TRUE; -END: - // t@CN[Y - FS_CloseFile( &file ); -END2: - - return retval; -} - diff --git a/build/libraries_sysmenu/settings/Makefile b/build/libraries_sysmenu/settings/Makefile deleted file mode 100644 index 9f833282..00000000 --- a/build/libraries_sysmenu/settings/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: 2007-10-03#$ -# $Rev: 1319 $ -# $Author: kitase_hirotake $ -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -#---------------------------------------------------------------------------- - -SUBDIRS = ARM9 - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/libraries_sysmenu/sysmenu/ARM9/Makefile b/build/libraries_sysmenu/sysmenu/ARM9/Makefile index b4cbbf06..7a133db4 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/Makefile +++ b/build/libraries_sysmenu/sysmenu/ARM9/Makefile @@ -27,7 +27,7 @@ TWL_ARCHGEN = LIMITED TWL_PROC = ARM9 SRCS = sysmenu_lib.c sysmenu_card.c sysmenu_util.c ninLogoFunc.c \ - settingsAPI.c mountInfo.c + mountInfo.c TARGET_LIB = libsysmenu$(TWL_LIBSUFFIX).a diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/settingsAPI.c b/build/libraries_sysmenu/sysmenu/ARM9/src/settingsAPI.c deleted file mode 100644 index 953a1795..00000000 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/settingsAPI.c +++ /dev/null @@ -1,286 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: settingsAPI.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include - -// define data---------------------------------------------------------- - -// function's prototype------------------------------------------------- -BOOL SYSMi_VerifyNTRSettings( void ); -static BOOL VerifyData( const void *pTgt1, const void *pTgt2, u32 size ); -void SYSMi_ConvertTWL2NTRSettings( void ); -static u8 MY_StrLen( const u16 *pStr ); - -// global variables----------------------------------------------------- - -// static variables----------------------------------------------------- - -// const data----------------------------------------------------------- - -// function's description----------------------------------------------- - -// TWLݒf[^t@C̃[h -BOOL SYSM_ReadTWLSettingsFile( void ) -{ - BOOL retval; - // TWLݒf[^̃[h - retval = TSD_ReadSettings(); - // NTRݒf[^̃[h - if( !NSD_IsReadSettings() ) { - (void)NSD_ReadSettings( THW_GetValidLanguageBitmap() ); -#ifndef SDK_FINALROM - (void)SYSMi_VerifyNTRSettings(); // fobOpxt@C -#endif - } - SYSM_SetValidTSD( retval ); - return retval; -} - - -// TWLݒf[^t@Cւ̃Cg -BOOL SYSM_WriteTWLSettingsFile( void ) -{ - BOOL retval; - // TWLݒf[^̃Cg - retval = TSD_WriteSettings(); - - if( retval ) { - // CgɐATWLݒf[^LɂB - SYSM_SetValidTSD( TRUE ); - - // NTRݒf[^ɔflωĂANTRݒf[^݁B - if( !SYSMi_VerifyNTRSettings() ) { - SYSMi_ConvertTWL2NTRSettings(); - (void)NSD_WriteSettings(); - } - } - return retval; -} - - -// NTRݒTWLݒxt@CāAsv΁ANTRݒXV -void SYSM_VerifyAndRecoveryNTRSettings( void ) -{ - BOOL isRecovery = FALSE; - - // NVRAMNTRݒf[^[hāATWLݒf[^ƃxt@C - if( !NSD_ReadSettings( THW_GetValidLanguageBitmap() ) || - !SYSMi_VerifyNTRSettings() - ) { - // [h or xt@CsȂATWLݒf[^NTRݒf[^𐶐āA - SYSMi_ConvertTWL2NTRSettings(); - NSD_WriteSettings(); - } -} - - -// NTRݒTWLݒxt@C -BOOL SYSMi_VerifyNTRSettings( void ) -{ - BOOL isFailed = FALSE; - u32 twlValidLangBitmap; - - // lvKv - if( // NTRݒf[^o[W - ( NSD_GetVersion() != NTR_SETTINGS_DATA_VERSION ) || - ( NSD_GetExVersion() != NTR_SETTINGS_DATA_EX_VERSION ) || - // I[i[ - ( NSD_GetUserColor() != TSD_GetUserColor() ) || - !VerifyData( NSD_GetBirthdayPtr(), TSD_GetBirthdayPtr(), sizeof(NTRDate) ) || - !VerifyData( NSD_GetNicknamePtr()->buffer, TSD_GetNicknamePtr(), NTR_NICKNAME_LENGTH ) || - ( NSD_GetNicknamePtr()->length != MY_StrLen( TSD_GetNicknamePtr() ) ) || - !VerifyData( NSD_GetCommentPtr()->buffer, TSD_GetCommentPtr(), NTR_COMMENT_LENGTH ) || - ( NSD_GetCommentPtr()->length != MY_StrLen( TSD_GetCommentPtr() ) ) || - // A[ - !VerifyData( NSD_GetAlarmDataPtr(), TSD_GetAlarmDataPtr(), sizeof(NTRAlarm) ) || - // TP - !VerifyData( NSD_GetTPCalibrationPtr(), TSD_GetTPCalibrationPtr(), sizeof(NTRTPCalibData) ) - ) { - - OS_TPrintf( "VERSION : %d\n", ( NSD_GetVersion() != NTR_SETTINGS_DATA_VERSION ) ); - OS_TPrintf( "VERSION EX: %d\n", ( NSD_GetExVersion() != NTR_SETTINGS_DATA_EX_VERSION ) ); - OS_TPrintf( "UserColor : %d\n", ( NSD_GetUserColor() != TSD_GetUserColor() ) ); - OS_TPrintf( "Birthday : %d\n", !VerifyData( NSD_GetBirthdayPtr(), TSD_GetBirthdayPtr(), sizeof(NTRDate) ) ); - OS_TPrintf( "Nickname : %d\n", !VerifyData( NSD_GetNicknamePtr()->buffer, TSD_GetNicknamePtr(), NTR_NICKNAME_LENGTH ) ); - OS_TPrintf( " length : %d\n", ( NSD_GetNicknamePtr()->length != MY_StrLen( TSD_GetNicknamePtr() ) ) ); - OS_TPrintf( "Comment : %d\n", !VerifyData( NSD_GetCommentPtr()->buffer, TSD_GetCommentPtr(), NTR_COMMENT_LENGTH ) ); - OS_TPrintf( " length : %d\n", ( NSD_GetCommentPtr()->length != MY_StrLen( TSD_GetCommentPtr() ) ) ); - OS_TPrintf( "Alarm : %d\n", !VerifyData( NSD_GetAlarmDataPtr(), TSD_GetAlarmDataPtr(), sizeof(NTRAlarm) ) ); - OS_TPrintf( "TP : %d\n", !VerifyData( NSD_GetTPCalibrationPtr(), TSD_GetTPCalibrationPtr(), sizeof(NTRTPCalibData) ) ); - - isFailed = TRUE; - } - - // IvV - // "0"łׂ̃`FbN - if( ( - NSD_IsGBUseTopLCD() | - NSD_IsAutoBoot() | - NSD_IsBacklightOff() | - NSD_IsInitialSequence() | - NSD_GetRTCClockAdjust() - ) != 0 ) { - isFailed = TRUE; - } - - // "1"łׂ̃`FbN" - if( ( NSD_IsSetBirthday() & - NSD_IsSetUserColor() & - NSD_IsSetTP() & - NSD_IsSetLanguage() & - NSD_IsSetDateTime() & - NSD_IsSetNickname() - ) == 0 ) { - isFailed = TRUE; - } - - // lvKv - if( ( NSD_GetRTCLastSetYear() != TSD_GetRTCLastSetYear() ) || - ( NSD_GetRTCOffset() != TSD_GetRTCOffset() ) - ) { - isFailed = TRUE; - } - // SystemMenũ[WɂāAƓȏKvȂ - twlValidLangBitmap = ( THW_GetValidLanguageBitmap() & NTR_LANG_BITMAP_ALL ) | ( 0x0001 << NTR_LANG_ENGLISH ); - OS_TPrintf( "%08x %08x\n", twlValidLangBitmap, NSD_GetValidLanguageBitmap() ); - if( twlValidLangBitmap != NSD_GetValidLanguageBitmap() ) { - // Ήrbg}bvsv - isFailed = TRUE; - }else if( !( twlValidLangBitmap & ( 0x0001 << NSD_GetLanguage() ) & ( 0x0001 << NSD_GetLanguageEx() ) ) ) { - // NSDΉrbg}bvO̒lɂȂĂ - isFailed = TRUE; - }else if( TSD_GetLanguage() < NTR_LANG_CODE_MAX_WW ) { - if( ( NSD_GetLanguage() >= NTR_LANG_CODE_MAX_WW ) || - ( NSD_GetLanguageEx() >= NTR_LANG_CODE_MAX_WW ) ) { - isFailed = TRUE; - } - }else if( TSD_GetLanguage() <= NTR_LANG_KOREAN ) { - if( ( NSD_GetLanguage() != NTR_LANG_ENGLISH ) || - ( NSD_GetLanguageEx() > NTR_LANG_KOREAN ) ) { - isFailed = TRUE; - } - }else { - if( ( NSD_GetLanguage() != NTR_LANG_ENGLISH ) || - ( NSD_GetLanguageEx() != NTR_LANG_ENGLISH ) ) { - isFailed = TRUE; - } - } - - // lłȂ - // NSD_GetBacklightBrightness(); - - OS_TPrintf( "TSD & NSD verify %s.\n", isFailed ? "NG" : "OK" ); - - return !isFailed; -} - - -// wTCỸxt@C -static BOOL VerifyData( const void *pTgt1, const void *pTgt2, u32 size ) -{ - u8 *p1 = (u8 *)pTgt1; - u8 *p2 = (u8 *)pTgt2; - - while( size-- ) { - if( *p1++ != *p2++ ) { - return FALSE; - } - } - return TRUE; -} - - -// TWLݒf[^ -> NTRݒf[^̃Ro[g -void SYSMi_ConvertTWL2NTRSettings( void ) -{ - SVC_CpuClearFast( 0x0000, GetNSD(), sizeof(NTRSettingsData) ); - SVC_CpuClearFast( 0x0000, GetNSDEx(), sizeof(NTRSettingsDataEx) ); - - // NTRݒf[^o[W - NSD_SetVersion ( NTR_SETTINGS_DATA_VERSION ); - NSD_SetExVersion( NTR_SETTINGS_DATA_EX_VERSION ); - // I[i[ - NSD_SetUserColor( TSD_GetUserColor() ); - NSD_SetBirthday( TSD_GetBirthdayPtr() ); - MI_CpuCopy16( TSD_GetNicknamePtr(), NSD_GetNicknamePtr()->buffer, NTR_NICKNAME_BUFFERSIZE ); - NSD_GetNicknamePtr()->length = MY_StrLen( TSD_GetNicknamePtr() ); - MI_CpuCopy16( TSD_GetCommentPtr(), NSD_GetCommentPtr()->buffer, NTR_COMMENT_BUFFERSIZE ); - NSD_GetCommentPtr()->length = MY_StrLen( TSD_GetCommentPtr() ); - // A[ - NSD_SetAlarmData( TSD_GetAlarmDataPtr() ); - // TPLu[V - NSD_SetTPCalibration( &TSD_GetTPCalibrationPtr()->data ); - - // IvV - // "0"łׂ - NSD_SetFlagGBUseTopLCD( FALSE ); - NSD_SetFlagAutoBoot( FALSE ); - NSD_SetFlagBacklightOff( FALSE ); - NSD_SetFlagInitialSequence( FALSE ); - NSD_SetRTCClockAdjust( 0 ); - - // "1"łׂ - NSD_SetFlagBirthday( TRUE ); - NSD_SetFlagUserColor( TRUE ); - NSD_SetFlagTP( TRUE ); - NSD_SetFlagLanguage( TRUE ); - NSD_SetFlagDateTime( TRUE ); - NSD_SetFlagNickname( TRUE ); - - // lvKv - NSD_SetRTCLastSetYear( TSD_GetRTCLastSetYear() ); - NSD_SetRTCOffset( TSD_GetRTCOffset() ); - - // SystemMenũ[WɂāAƓȏKvȂ - if( TSD_GetLanguage() < NTR_LANG_CODE_MAX_WW ) { - // TSDNTRWU̎ATSD == NSD - NSD_SetLanguage ( (NTRLangCode)TSD_GetLanguage() ); - NSD_SetLanguageEx( (NTRLangCode)TSD_GetLanguage() ); - }else if( TSD_GetLanguage() <= TWL_LANG_KOREAN ) { - // TSDNTRWUȊO̒E؍̎ANSDlanguage͋ENGLISHiNCDExɂƂlj - NSD_SetLanguage ( NTR_LANG_ENGLISH ); - NSD_SetLanguageEx( (NTRLangCode)TSD_GetLanguage() ); - }else { - // ȊO̎͋ENGLISH - NSD_SetLanguage ( NTR_LANG_ENGLISH ); - NSD_SetLanguageEx( NTR_LANG_ENGLISH ); - } - // rbg}bv - { - u16 validLangBitmap = (u16)( ( THW_GetValidLanguageBitmap() & NTR_LANG_BITMAP_ALL ) | ( 0x0001 << NTR_LANG_ENGLISH ) ); - NSD_SetValidLanguageBitmap( validLangBitmap ); // Cg֐ł}XN邪AłĂB - } - - // lłȂ - NSD_SetBacklightBrightness( TSD_GetBacklightBrightness() & 0x03 ); - // [TODO:] TWL̃obNCgPxxSiKłȂ́AϊKvB -} - - -// UTF16̕񒷂̃`FbN -static u8 MY_StrLen( const u16 *pStr ) -{ - u8 len = 0; - while( *pStr++ ) { - ++len; - if( len == 255 ) { - break; - } - } - return len; -} diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index dd925ee3..3ec8fbee 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -30,6 +30,8 @@ typedef struct BannerCheckParam { }BannerCheckParam; // extern data----------------------------------------------------------------- +extern void LCFG_VerifyAndRecoveryNTRSettings( void ); + extern void SYSMi_SetLauncherMountInfo( void ); extern void SYSM_SetBootAppMountInfo( TitleProperty *pBootTitle ); // }Eg̃Zbg @@ -114,7 +116,7 @@ void SYSM_SetAllocFunc( void *(*pAlloc)(u32), void (*pFree)(void*) ) TitleProperty *SYSM_ReadParameters( void ) { TitleProperty *pBootTitle = NULL; - u8 brightness = TWL_BACKLIGHT_LEVEL_MAX; + u8 brightness = LCFG_TWL_BACKLIGHT_LEVEL_MAX; // ARM7̃Zbgp[^擾̂҂ while( !SYSMi_GetWork()->isARM9Start ) { @@ -153,12 +155,12 @@ TitleProperty *SYSM_ReadParameters( void ) // HW̃[h //----------------------------------------------------- // m[}񃊁[h - if( THW_ReadNormalInfo() != TSF_READ_RESULT_SUCCEEDED ) { + if( LCFG_ReadHWNormalInfo() != LCFG_TSF_READ_RESULT_SUCCEEDED ) { OS_TPrintf( "HW Normal Info Broken!\n" ); SYSMi_GetWork()->isBrokenHWNormalInfo = TRUE; } // ZLA񃊁[h - if( THW_ReadSecureInfo() != TSF_READ_RESULT_SUCCEEDED ) { + if( LCFG_ReadHWSecureInfo() != LCFG_TSF_READ_RESULT_SUCCEEDED ) { OS_TPrintf( "HW Secure Info Broken!\n" ); SYSMi_GetWork()->isBrokenHWSecureInfo = TRUE; } @@ -166,9 +168,9 @@ TitleProperty *SYSM_ReadParameters( void ) //----------------------------------------------------- // {̐ݒf[^̃[h //----------------------------------------------------- - if( SYSM_ReadTWLSettingsFile() ) { // NANDTWL{̐ݒf[^[h + if( LCFG_ReadTWLSettingsFile() ) { // NANDTWL{̐ݒf[^[h SYSM_CaribrateTP(); // ǂݏoTWL{̐ݒf[^ƂTPLu[VB - brightness = (u8)TSD_GetBacklightBrightness(); + brightness = (u8)LCFG_TSD_GetBacklightBrightness(); } //----------------------------------------------------- @@ -181,7 +183,7 @@ TitleProperty *SYSM_ReadParameters( void ) // RTCl̃`FbN SYSMi_CheckRTC(); - SYSM_VerifyAndRecoveryNTRSettings(); // NTRݒf[^ǂݏoāATWLݒf[^ƃxt@CAKvȂ烊Jo + LCFG_VerifyAndRecoveryNTRSettings(); // NTRݒf[^ǂݏoāATWLݒf[^ƃxt@CAKvȂ烊Jo //NAM̏ NAM_Init( SYSM_Alloc, SYSM_Free ); @@ -225,11 +227,11 @@ static TitleProperty *SYSMi_CheckShortcutBoot( void ) //----------------------------------------------------- #if 0 #ifdef ENABLE_INITIAL_SETTINGS_ - if( !TSD_IsSetTP() || - !TSD_IsSetLanguage() || - !TSD_IsSetDateTime() || - !TSD_IsSetUserColor() || - !TSD_IsSetNickname() ) { + if( !LCFG_TSD_IsSetTP() || + !LCFG_TSD_IsSetLanguage() || + !LCFG_TSD_IsSetDateTime() || + !LCFG_TSD_IsSetUserColor() || + !LCFG_TSD_IsSetNickname() ) { s_bootTitle.titleID = TITLE_ID_MACHINE_SETTINGS; s_bootTitle.flags.bootType = OS_BOOTTYPE_NAND; s_bootTitle.flags.isValid = TRUE; @@ -862,25 +864,25 @@ u32 PMi_WriteRegister(u16 registerAddr, u16 data) // obNCgPx void SYSM_SetBackLightBrightness( u8 brightness ) { - if( brightness > TWL_BACKLIGHT_LEVEL_MAX ) { + if( brightness > LCFG_TWL_BACKLIGHT_LEVEL_MAX ) { OS_Panic( "Backlight brightness over : %d\n", brightness ); } ( void )PMi_WriteRegister( 0x20, (u16)brightness ); - TSD_SetBacklightBrightness( brightness ); + LCFG_TSD_SetBacklightBrightness( brightness ); // [TODO:] obNCgPx͖Z[uɁAAvN⃊ZbgAdOFFɒlςĂZ[u悤ɂB - SYSM_WriteTWLSettingsFile(); + LCFG_WriteTWLSettingsFile(); } // ^b`plLu[V void SYSM_CaribrateTP( void ) { - TWLTPCalibData store; + LCFGTWLTPCalibData store; TPCalibrateParam calibParam; // {̐ݒf[^Lu[V擾 - TSD_GetTPCalibration( &store ); + LCFG_TSD_GetTPCalibration( &store ); // TPLu[V ( void )TP_CalcCalibrateParam( &calibParam, // ^b`pl @@ -897,7 +899,7 @@ void SYSM_CaribrateTP( void ) static void SYSMi_WriteAdjustRTC( void ) { RTCRawAdjust raw; - raw.adjust = THW_GetRTCAdjust(); + raw.adjust = LCFG_THW_GetRTCAdjust(); ( void )RTCi_SetRegAdjust( &raw ); } @@ -1088,10 +1090,10 @@ static void SYSMi_CheckRTC( void ) #endif ) { // RTCُ̈oArtc̓tOrtcOffset0ɂNVRAMɏ݁B OS_TPrintf("\"RTC reset\" or \"Illegal RTC data\" detect!\n"); - TSD_SetFlagDateTime( FALSE ); - TSD_SetRTCOffset( 0 ); - TSD_SetRTCLastSetYear( 0 ); - SYSM_WriteTWLSettingsFile(); + LCFG_TSD_SetFlagDateTime( FALSE ); + TSD_SetRTCOffset( 0 ); // [TODO:]{́ALCFG_TSD_SetRTCOffset( 0 ); SDK_5_00pr2ł͊ԈĂB + LCFG_TSD_SetRTCLastSetYear( 0 ); + LCFG_WriteTWLSettingsFile(); } } diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_util.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_util.c index 6c5d4ed5..ac51c715 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_util.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_util.c @@ -51,14 +51,14 @@ s64 SYSM_CalcRTCOffset( RTCDate *newDatep, RTCTime *newTimep ) oldTime.second = 0; // RTCݒ莞́A̐ݒłǂꂾRTClωibItZbgPʁjZoB - if( ( oldDate.year < TSD_GetRTCLastSetYear() ) && ( TSD_IsSetDateTime() ) ) { + if( ( oldDate.year < LCFG_TSD_GetRTCLastSetYear() ) && ( LCFG_TSD_IsSetDateTime() ) ) { oldDate.year += 100; // O̐ݒ`̐ݒ̊ԂRTCĂ܂Ayear100ZoffsetvZB } - TSD_SetRTCLastSetYear( (u8)newDatep->year ); + LCFG_TSD_SetRTCLastSetYear( (u8)newDatep->year ); offset0 = SYSMi_CalcRTCSecOffset( &oldDate, &oldTime ); // ݒ蒼ORTCl̃ItZbgZo offset1 = SYSMi_CalcRTCSecOffset( newDatep, newTimep ); // VZbgꂽRTCl̃ItZbgZo - offset = TSD_GetRTCOffset() + offset1 - offset0; // VRTC_ofs ݂RTC_ofs ̍̒lZă^[B + offset = LCFG_TSD_GetRTCOffset() + offset1 - offset0; // VRTC_ofs ݂RTC_ofs ̍̒lZă^[B OS_Printf ("Now Date = year:%3d month:%3d date:%3d hour:%3d minute:%3d second:%3d\n", oldDate.year, oldDate.month, oldDate.day, diff --git a/build/systemMenu_RED/HWInfoWriter/ARM9/Makefile b/build/systemMenu_RED/HWInfoWriter/ARM9/Makefile index be465e77..cabc4606 100644 --- a/build/systemMenu_RED/HWInfoWriter/ARM9/Makefile +++ b/build/systemMenu_RED/HWInfoWriter/ARM9/Makefile @@ -17,8 +17,7 @@ #---------------------------------------------------------------------------- SUBDIRS = \ -# ../../../libraries_sysmenu/sysmenu \ -# ../../../libraries_sysmenu/settings +# ../../../libraries_sysmenu/sysmenu #---------------------------------------------------------------------------- @@ -38,7 +37,8 @@ MISC_DIR = ../../misc SRCS = main.c HWInfoWriter.c \ $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c -LINCLUDES = $(MISC_DIR)/include +LINCLUDES = $(MISC_DIR)/include \ + $(ROOT)/build/libraries/lcfg/ARM9.TWL/include LLIBRARIES = libacsign_enc$(TWL_LIBSUFFIX).a MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' diff --git a/build/systemMenu_RED/HWInfoWriter/ARM9/src/HWInfoWriter.c b/build/systemMenu_RED/HWInfoWriter/ARM9/src/HWInfoWriter.c index c850a128..05b403d4 100644 --- a/build/systemMenu_RED/HWInfoWriter/ARM9/src/HWInfoWriter.c +++ b/build/systemMenu_RED/HWInfoWriter/ARM9/src/HWInfoWriter.c @@ -17,6 +17,8 @@ #include #include +#include "TWLHWInfo_api.h" +#include "TWLSettings_api.h" #include "misc.h" #include "HWInfoWriter.h" @@ -26,10 +28,10 @@ #define MSG_Y 19 // extern data------------------------------------------ -const TWLHWNormalInfo *THW_GetDefaultNormalInfo( void ); -const TWLHWSecureInfo *THW_GetDefaultSecureInfo( void ); -const TWLHWNormalInfo *THW_GetNormalInfo( void ); -const TWLHWSecureInfo *THW_GetSecureInfo( void ); +const LCFGTWLHWNormalInfo *LCFG_THW_GetDefaultNormalInfo( void ); +const LCFGTWLHWSecureInfo *LCFG_THW_GetDefaultSecureInfo( void ); +const LCFGTWLHWNormalInfo *LCFG_THW_GetNormalInfo( void ); +const LCFGTWLHWSecureInfo *LCFG_THW_GetSecureInfo( void ); // function's prototype declaration--------------------- static void ReadTWLSettings( void ); @@ -52,7 +54,7 @@ RTCDrawProperty g_rtcDraw = { // static variable ------------------------------------- static u16 s_csr; static u8 *s_pPrivKeyBuffer = NULL; -static TSFReadResult (*s_pReadSecureInfoFunc)( void ); +static LCFGReadResult (*s_pReadSecureInfoFunc)( void ); static BOOL s_isReadTSD; static u8 s_region_old; @@ -87,13 +89,13 @@ static const MenuParam s_writerParam = { (const u16 **)&s_pStrWriter, }; -static const u32 s_langBitmapList[ TWL_REGION_MAX ] = { - TWL_LANG_BITMAP_JAPAN, - TWL_LANG_BITMAP_AMERICA, - TWL_LANG_BITMAP_EUROPE, - TWL_LANG_BITMAP_AUSTRALIA, - TWL_LANG_BITMAP_CHINA, - TWL_LANG_BITMAP_KOREA, +static const u32 s_langBitmapList[ LCFG_TWL_REGION_MAX ] = { + LCFG_TWL_LANG_BITMAP_JAPAN, + LCFG_TWL_LANG_BITMAP_AMERICA, + LCFG_TWL_LANG_BITMAP_EUROPE, + LCFG_TWL_LANG_BITMAP_AUSTRALIA, + LCFG_TWL_LANG_BITMAP_CHINA, + LCFG_TWL_LANG_BITMAP_KOREA, }; static char *strLanguage[] = { @@ -138,10 +140,10 @@ void HWInfoWriterInit( void ) ReadPrivateKey(); ReadHWInfoFile(); // VerifyHWInfo(); - OS_TPrintf( "region = %d\n", THW_GetRegion() ); - PrintfSJISSub( 2 * 8, 18 * 8, TXT_COLOR_BLACK, "Region = %s", strRegion[ THW_GetRegion() ] ); - PrintfSJISSub( 2 * 8, 20 * 8, TXT_COLOR_BLACK, "SerialNo = %s", THW_GetSerialNoPtr() ); - s_region_old = THW_GetRegion(); + OS_TPrintf( "region = %d\n", LCFG_THW_GetRegion() ); + PrintfSJISSub( 2 * 8, 18 * 8, TXT_COLOR_BLACK, "Region = %s", strRegion[ LCFG_THW_GetRegion() ] ); + PrintfSJISSub( 2 * 8, 20 * 8, TXT_COLOR_BLACK, "SerialNo = %s", LCFG_THW_GetSerialNoPtr() ); + s_region_old = LCFG_THW_GetRegion(); s_csr = 0; DrawMenu( s_csr, &s_writerParam ); @@ -185,7 +187,7 @@ void HWInfoWriterMain( void ) // TWLݒf[^̃[h static void ReadTWLSettings( void ) { - s_isReadTSD = TSD_ReadSettings(); + s_isReadTSD = LCFGi_TSD_ReadSettings(); if( s_isReadTSD ) { OS_TPrintf( "TSD read succeeded.\n" ); }else { @@ -198,7 +200,7 @@ static void ReadTWLSettings( void ) static void ModifyLanguage( u8 region ) { u32 langBitmap = s_langBitmapList[ region ]; - u8 nowLanguage = TSD_GetLanguage(); + u8 nowLanguage = LCFG_TSD_GetLanguage(); // TSDǂݍ߂ĂȂȂA^[ if( !s_isReadTSD ) { @@ -209,17 +211,17 @@ static void ModifyLanguage( u8 region ) OS_TPrintf( "Language no change.\n" ); }else { int i; - for( i = 0; i < TWL_LANG_CODE_MAX; i++ ) { + for( i = 0; i < LCFG_TWL_LANG_CODE_MAX; i++ ) { if( langBitmap & ( 0x0001 << i ) ) { break; } } - TSD_SetLanguage( (TWLLangCode)i ); - TSD_SetFlagCountry( FALSE ); // ‚łɍR[hNAĂB - TSD_SetCountry( TWL_COUNTRY_UNDEFINED ); - TSD_WriteSettings(); + LCFG_TSD_SetLanguage( (LCFGTWLLangCode)i ); + LCFG_TSD_SetFlagCountry( FALSE ); // ‚łɍR[hNAĂB + LCFG_TSD_SetCountry( LCFG_TWL_COUNTRY_UNDEFINED ); + LCFGi_TSD_WriteSettings(); OS_TPrintf( "Language Change \"%s\" -> \"%s\"\n", - strLanguage[ nowLanguage ], strLanguage[ TSD_GetLanguage() ] ); + strLanguage[ nowLanguage ], strLanguage[ LCFG_TSD_GetLanguage() ] ); } } @@ -257,10 +259,10 @@ static void ReadPrivateKey( void ) if( s_pPrivKeyBuffer ) { // 閧LȂÃANZX - s_pReadSecureInfoFunc = THW_ReadSecureInfo; + s_pReadSecureInfoFunc = LCFGi_THW_ReadSecureInfo; }else { // 閧ȂAȂ̃ANZX - s_pReadSecureInfoFunc = THW_ReadSecureInfo_NoCheck; + s_pReadSecureInfoFunc = LCFGi_THW_ReadSecureInfo_NoCheck; PutStringUTF16( 14 * 8, 0 * 8, TXT_COLOR_RED, (const u16 *)L"[No Signature MODE]" ); } } @@ -269,11 +271,11 @@ static void ReadPrivateKey( void ) // HWŜ̃[h static void ReadHWInfoFile( void ) { - TSFReadResult retval; + LCFGReadResult retval; OSTick start = OS_GetTick(); - retval = THW_ReadNormalInfo(); - if( retval == TSF_READ_RESULT_SUCCEEDED ) { + retval = LCFGi_THW_ReadNormalInfo(); + if( retval == LCFG_TSF_READ_RESULT_SUCCEEDED ) { OS_TPrintf( "HW Normal Info read succeeded.\n" ); }else { OS_TPrintf( "HW Normal Info read failed.\n" ); @@ -283,7 +285,7 @@ static void ReadHWInfoFile( void ) start = OS_GetTick(); retval = s_pReadSecureInfoFunc(); - if( retval == TSF_READ_RESULT_SUCCEEDED ) { + if( retval == LCFG_TSF_READ_RESULT_SUCCEEDED ) { OS_TPrintf( "HW Secure Info read succeeded.\n" ); }else { OS_TPrintf( "HW Secure Info read failed.\n" ); @@ -326,8 +328,8 @@ static void WriteHWInfoFile( u8 region ) MSG_X * 8 , MSG_Y * 8, ( 32 - MSG_X ) * 8, ( MSG_Y + 4 ) * 8 ); PrintfSJISSub( 2 * 8, 18 * 8, TXT_COLOR_WHITE, "Region = %s", strRegion[ s_region_old ] ); - PrintfSJISSub( 2 * 8, 18 * 8, TXT_COLOR_BLACK, "Region = %s", strRegion[ THW_GetRegion() ] ); - s_region_old = THW_GetRegion(); + PrintfSJISSub( 2 * 8, 18 * 8, TXT_COLOR_BLACK, "Region = %s", strRegion[ LCFG_THW_GetRegion() ] ); + s_region_old = LCFG_THW_GetRegion(); } @@ -335,17 +337,17 @@ static void WriteHWInfoFile( u8 region ) static BOOL WriteHWNormalInfoFile( void ) { BOOL isWrite = TRUE; - TSFReadResult result; + LCFGReadResult result; - result = THW_ReadNormalInfo(); - if( result != TSF_READ_RESULT_SUCCEEDED ) { - if( !THW_RecoveryNormalInfo( result ) ) { + result = LCFGi_THW_ReadNormalInfo(); + if( result != LCFG_TSF_READ_RESULT_SUCCEEDED ) { + if( !LCFGi_THW_RecoveryNormalInfo( result ) ) { OS_TPrintf( "HW Normal Info Recovery failed.\n" ); isWrite = FALSE; } } if( isWrite && - !THW_WriteNormalInfo() ) { + !LCFGi_THW_WriteNormalInfo() ) { OS_TPrintf( "HW Normal Info Write failed.\n" ); } @@ -357,24 +359,24 @@ static BOOL WriteHWNormalInfoFile( void ) static BOOL WriteHWSecureInfoFile( u8 region ) { BOOL isWrite = TRUE; - TSFReadResult result; + LCFGReadResult result; // t@C̃[h result = s_pReadSecureInfoFunc(); // [hɎs烊Jo - if( result != TSF_READ_RESULT_SUCCEEDED ) { - if( !THW_RecoverySecureInfo( result ) ) { + if( result != LCFG_TSF_READ_RESULT_SUCCEEDED ) { + if( !LCFGi_THW_RecoverySecureInfo( result ) ) { OS_TPrintf( "HW Secure Info Recovery failed.\n" ); isWrite = FALSE; } } // [W̃Zbg - THW_SetRegion( region ); + LCFG_THW_SetRegion( region ); // Ήrbg}bṽZbg - THW_SetValidLanguageBitmap( s_langBitmapList[ region ] ); + LCFG_THW_SetValidLanguageBitmap( s_langBitmapList[ region ] ); // [TODO:]ʎYHłȂƃVANo.͗pӂłȂ̂ŁAłMACAhXƂɓKȒlZbgB // VANo.̃Zbg @@ -382,8 +384,8 @@ static BOOL WriteHWSecureInfoFile( u8 region ) u8 buffer[ 12 ] = "SERIAL"; // KȕMACAhXƌSHA1ASerialNoƂB u8 serialNo[ SVC_SHA1_DIGEST_SIZE ]; int i; - int len = ( THW_GetRegion() == TWL_REGION_AMERICA ) ? - TWL_HWINFO_SERIALNO_LEN_AMERICA : TWL_HWINFO_SERIALNO_LEN_OTHERS; + int len = ( LCFG_THW_GetRegion() == LCFG_TWL_REGION_AMERICA ) ? + LCFG_TWL_HWINFO_SERIALNO_LEN_AMERICA : LCFG_TWL_HWINFO_SERIALNO_LEN_OTHERS; OS_GetMacAddress( buffer + 6 ); SVC_CalcSHA1( serialNo, buffer, sizeof(buffer) ); for( i = 3; i < SVC_SHA1_DIGEST_SIZE; i++ ) { @@ -392,12 +394,12 @@ static BOOL WriteHWSecureInfoFile( u8 region ) MI_CpuCopy8( "SRN", serialNo, 3 ); MI_CpuClear8( &serialNo[ len ], sizeof(serialNo) - len ); OS_TPrintf( "serialNo : %s\n", serialNo ); - THW_SetSerialNo( serialNo ); + LCFG_THW_SetSerialNo( serialNo ); } // Cg if( isWrite && - !THW_WriteSecureInfo( s_pPrivKeyBuffer ) ) { + !LCFGi_THW_WriteSecureInfo( s_pPrivKeyBuffer ) ) { isWrite = FALSE; OS_TPrintf( "HW Secure Info Write failed.\n" ); } @@ -416,21 +418,21 @@ static void DeleteHWInfoFile( void ) // m[}t@C (void)PutStringUTF16( MSG_X * 8, MSG_Y * 8, TXT_COLOR_BLACK, pMsgNormalDeleting ); - if( FS_DeleteFile( (char *)TWL_HWINFO_NORMAL_PATH ) ) { - OS_TPrintf( "%s delete succeeded.\n", (char *)TWL_HWINFO_NORMAL_PATH ); + if( FS_DeleteFile( (char *)LCFG_TWL_HWINFO_NORMAL_PATH ) ) { + OS_TPrintf( "%s delete succeeded.\n", (char *)LCFG_TWL_HWINFO_NORMAL_PATH ); (void)PutStringUTF16( ( MSG_X + 19 ) * 8, MSG_Y * 8, TXT_COLOR_BLUE, pMsgSucceeded ); }else { - OS_TPrintf( "%s delete failed.\n", (char *)TWL_HWINFO_NORMAL_PATH ); + OS_TPrintf( "%s delete failed.\n", (char *)LCFG_TWL_HWINFO_NORMAL_PATH ); (void)PutStringUTF16( ( MSG_X + 19 ) * 8, MSG_Y * 8, TXT_COLOR_RED, pMsgFailed ); } // ZLAt@C (void)PutStringUTF16( MSG_X * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_BLACK, pMsgSecureDeleting ); - if( FS_DeleteFile( (char *)TWL_HWINFO_SECURE_PATH ) ) { - OS_TPrintf( "%s delete succeeded.\n", (char *)TWL_HWINFO_SECURE_PATH ); + if( FS_DeleteFile( (char *)LCFG_TWL_HWINFO_SECURE_PATH ) ) { + OS_TPrintf( "%s delete succeeded.\n", (char *)LCFG_TWL_HWINFO_SECURE_PATH ); (void)PutStringUTF16( ( MSG_X + 19 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_BLUE, pMsgSucceeded ); }else { - OS_TPrintf( "%s delete failed.\n", (char *)TWL_HWINFO_SECURE_PATH ); + OS_TPrintf( "%s delete failed.\n", (char *)LCFG_TWL_HWINFO_SECURE_PATH ); (void)PutStringUTF16( ( MSG_X + 19 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_RED, pMsgFailed ); } DispMessage( 0, 0, TXT_COLOR_NULL, NULL ); @@ -442,12 +444,12 @@ static void DeleteHWInfoFile( void ) // HWInfot@C̃xt@C static void VerifyHWInfo( void ) { - if( VerifyData( (const u8 *)THW_GetNormalInfo(), (const u8 *)THW_GetDefaultNormalInfo(), sizeof(TWLHWNormalInfo) ) ) { + if( VerifyData( (const u8 *)LCFG_THW_GetNormalInfo(), (const u8 *)LCFG_THW_GetDefaultNormalInfo(), sizeof(LCFGTWLHWNormalInfo) ) ) { OS_TPrintf( "HW normal Info verify succeeded.\n" ); }else { OS_TPrintf( "HW normal Info verify failed.\n" ); } - if( VerifyData( (const u8 *)THW_GetSecureInfo(), (const u8 *)THW_GetDefaultSecureInfo(), sizeof(TWLHWSecureInfo) ) ) { + if( VerifyData( (const u8 *)LCFG_THW_GetSecureInfo(), (const u8 *)LCFG_THW_GetDefaultSecureInfo(), sizeof(LCFGTWLHWSecureInfo) ) ) { OS_TPrintf( "HW secure Info verify succeeded.\n" ); }else { OS_TPrintf( "HW secure Info verify failed.\n" ); diff --git a/build/systemMenu_RED/Launcher/ARM9/Makefile b/build/systemMenu_RED/Launcher/ARM9/Makefile index d8940fb6..40df22a7 100644 --- a/build/systemMenu_RED/Launcher/ARM9/Makefile +++ b/build/systemMenu_RED/Launcher/ARM9/Makefile @@ -17,11 +17,10 @@ #---------------------------------------------------------------------------- SUBDIRS = \ - ../../../libraries_sysmenu/hotsw \ - ../../../libraries_sysmenu/sysmenu \ - ../../../components/hyena.TWL +# ../../../libraries_sysmenu/hotsw \ +# ../../../libraries_sysmenu/sysmenu \ +# ../../../components/hyena.TWL # ../../../libraries_sysmenu/reloc_info \ -# ../../../libraries_sysmenu/settings \ # ../../../libraries_sysmenu/boot \ #---------------------------------------------------------------------------- diff --git a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c index b6b1a07f..0ceeaa51 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c @@ -317,7 +317,7 @@ static void BannerDraw(int cursor, int selected, TitleProperty *titleprop) // Av\ if(selected != old_selected) { - NNSG2dChar *str = ((TWLBannerFile *)titleprop[selected].pBanner)->v1.comment[ TSD_GetLanguage() ]; + NNSG2dChar *str = ((TWLBannerFile *)titleprop[selected].pBanner)->v1.comment[ LCFG_TSD_GetLanguage() ]; NNSG2dTextRect rect = NNS_G2dTextCanvasGetTextRect( &gTextCanvas, str ); NNS_G2dCharCanvasClearArea( &gCanvas, TXT_COLOR_NULL, 0, 24, WINDOW_WIDTH, 32 ); PutStringUTF16( (WINDOW_WIDTH-rect.width)>>1, TITLE_V_CENTER - (rect.height>>1), TXT_COLOR_BLACK, str ); @@ -343,7 +343,7 @@ void LauncherInit( TitleProperty *pTitleList ) GX_DispOff(); GXS_DispOff(); - ChangeUserColor( TSD_GetUserColor() ); + ChangeUserColor( LCFG_TSD_GetUserColor() ); NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL ); // BGf[^̃[h @@ -485,17 +485,17 @@ static void ProcessBackLightPads( void ) } if( (pad.trg & PAD_BUTTON_START) || up_bl_trg ) { - brightness = TSD_GetBacklightBrightness() + 1; - if( brightness > TWL_BACKLIGHT_LEVEL_MAX ) { + brightness = LCFG_TSD_GetBacklightBrightness() + 1; + if( brightness > LCFG_TWL_BACKLIGHT_LEVEL_MAX ) { brightness = 0; } SYSM_SetBackLightBrightness( (u8)brightness ); DrawBackLightSwitch(); } if( ( pad.trg & PAD_BUTTON_SELECT) || dw_bl_trg ) { - brightness = TSD_GetBacklightBrightness() - 1; + brightness = LCFG_TSD_GetBacklightBrightness() - 1; if( brightness < 0 ) { - brightness = TWL_BACKLIGHT_LEVEL_MAX; + brightness = LCFG_TWL_BACKLIGHT_LEVEL_MAX; } SYSM_SetBackLightBrightness( (u8)brightness ); DrawBackLightSwitch(); @@ -692,5 +692,5 @@ static void DrawBackLightSwitch(void) PutStringUTF16( B_LIGHT_DW_BUTTON_TOP_X, B_LIGHT_DW_BUTTON_TOP_Y, TXT_COLOR_RED, L"\xE01c\xE01b" ); PrintfSJIS( B_LIGHT_DW_BUTTON_TOP_X + 24, B_LIGHT_DW_BUTTON_TOP_Y, TXT_COLOR_RED, - "BL:%d\n", TSD_GetBacklightBrightness() ); + "BL:%d\n", LCFG_TSD_GetBacklightBrightness() ); } diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/CountryNameMappingData.c b/build/systemMenu_RED/MachineSettings/ARM9/src/CountryNameMappingData.c index 338b5069..b3472b75 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/CountryNameMappingData.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/CountryNameMappingData.c @@ -291,12 +291,12 @@ const u16 *const s_pStrCountryName[] = { (const u16 *)L"UNKNOWN" }; -const u32 region_country_mapping[TWL_REGION_MAX] = +const u32 region_country_mapping[LCFG_TWL_REGION_MAX] = { - TWL_COUNTRY_MAPPING_JAPAN, - TWL_COUNTRY_MAPPING_AMERICA, - TWL_COUNTRY_MAPPING_EUROPE, - TWL_COUNTRY_MAPPING_AUSTRALIA, - TWL_COUNTRY_MAPPING_CHINA, - TWL_COUNTRY_MAPPING_KOREA + LCFG_TWL_COUNTRY_MAPPING_JAPAN, + LCFG_TWL_COUNTRY_MAPPING_AMERICA, + LCFG_TWL_COUNTRY_MAPPING_EUROPE, + LCFG_TWL_COUNTRY_MAPPING_AUSTRALIA, + LCFG_TWL_COUNTRY_MAPPING_CHINA, + LCFG_TWL_COUNTRY_MAPPING_KOREA }; \ No newline at end of file diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c b/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c index 3499a382..bfc01ef6 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c @@ -57,7 +57,7 @@ static const u16 *s_pStrSetting[ SETTING_MENU_ELEMENT_NUM ]; // //=============================================== // mainMenu.c //=============================================== -static const u16 *const s_pStrSettingElemTbl[ SETTING_MENU_ELEMENT_NUM ][ TWL_LANG_CODE_MAX ] = { +static const u16 *const s_pStrSettingElemTbl[ SETTING_MENU_ELEMENT_NUM ][ LCFG_TWL_LANG_CODE_MAX ] = { { (const u16 *)L"", (const u16 *)L"LANGUAGE", @@ -167,10 +167,10 @@ void MachineSettingInit( void ) // NITROݒf[^languageɉCj[\̐؂ւ for( i = 0; i < SETTING_MENU_ELEMENT_NUM; i++ ) { - s_pStrSetting[ i ] = s_pStrSettingElemTbl[ i ][ TSD_GetLanguage() ]; + s_pStrSetting[ i ] = s_pStrSettingElemTbl[ i ][ LCFG_TSD_GetLanguage() ]; } - ChangeUserColor( TSD_GetUserColor() ); + ChangeUserColor( LCFG_TSD_GetUserColor() ); DrawMenu( s_csr, &s_settingParam ); SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 ); diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/calibrationTP.c b/build/systemMenu_RED/MachineSettings/ARM9/src/calibrationTP.c index e4ef62d4..5d74440b 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/calibrationTP.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/calibrationTP.c @@ -70,7 +70,7 @@ typedef struct CalibWork { u16 last_x; u16 last_y; TPData sample[2]; - TWLTPCalibData calibTemp; + LCFGTWLTPCalibData calibTemp; }CalibWork; // extern data------------------------------------------ @@ -417,12 +417,12 @@ int TP_CalibrationMain( void ) s_pTPC->calibTemp.data.dx2 = DISP_X_SIZE - 32; s_pTPC->calibTemp.data.dy2 = DISP_Y_SIZE - 32; - TSD_SetTPCalibration( &s_pTPC->calibTemp ); - TSD_SetFlagTP( TRUE ); // ^b`pl̓tO𗧂ĂB + LCFG_TSD_SetTPCalibration( &s_pTPC->calibTemp ); + LCFG_TSD_SetFlagTP( TRUE ); // ^b`pl̓tO𗧂ĂB // :::::::::::::::::::::::::::::::::::::::::::::: // TWLݒf[^t@Cւ̏ // :::::::::::::::::::::::::::::::::::::::::::::: - (void)SYSM_WriteTWLSettingsFile(); + (void)LCFG_WriteTWLSettingsFile(); ReturnMenu(); return 0; @@ -442,7 +442,7 @@ int TP_CalibrationMain( void ) // Lu[VݒȌԂɖ߂B { TPCalibrateParam calibrate; - TSD_GetTPCalibration( &s_pTPC->calibTemp ); + LCFG_TSD_GetTPCalibration( &s_pTPC->calibTemp ); (void)TP_CalcCalibrateParam( &calibrate, s_pTPC->calibTemp.data.raw_x1, s_pTPC->calibTemp.data.raw_y1, (u16)s_pTPC->calibTemp.data.dx1, (u16)s_pTPC->calibTemp.data.dy1, diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/main.c b/build/systemMenu_RED/MachineSettings/ARM9/src/main.c index 4957aaef..9dc274bb 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/main.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/main.c @@ -76,8 +76,8 @@ void TwlMain(void) // :::::::::::::::::::::::::::::::::::::::::::::: // TWLݒf[^t@C̓ǂݍ // :::::::::::::::::::::::::::::::::::::::::::::: - (void)THW_ReadSecureInfo(); - g_isValidTSD = SYSM_ReadTWLSettingsFile(); + (void)LCFG_ReadHWSecureInfo(); + g_isValidTSD = LCFG_ReadTWLSettingsFile(); if( g_isValidTSD ) { SYSM_CaribrateTP(); } diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/selectCountry.c b/build/systemMenu_RED/MachineSettings/ARM9/src/selectCountry.c index 15b78fb9..7edceee3 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/selectCountry.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/selectCountry.c @@ -50,8 +50,8 @@ // global variable ------------------------------------- // static variable ------------------------------------- -static TWLCountryCode s_countryCode; // R[h -static TWLRegion s_regionCode; // [W +static LCFGTWLCountryCode s_countryCode; // R[h +static LCFGTWLRegion s_regionCode; // [W static u16 s_list_start, s_list_end; static u16 s_menu_display_start; @@ -64,7 +64,7 @@ static double s_dots_per_item; // const data ----------------------------------------- extern const u16 *const s_pStrCountryName[]; -extern const u32 region_country_mapping[TWL_REGION_MAX]; +extern const u32 region_country_mapping[LCFG_TWL_REGION_MAX]; static MenuPos s_countryPos[MENU_DISPLAY_SIZE] = { { TRUE, 4 * 8, 6 * 8 }, @@ -106,7 +106,7 @@ static void InitScrollMenuList( void ) // ݒ肳ĂR[hXg͈͂ɓĂȂ΃ftHglɂ if(s_countryCode < s_list_start || s_list_end < s_countryCode) { - s_countryCode = (TWLCountryCode)s_list_start; + s_countryCode = (LCFGTWLCountryCode)s_list_start; } // ۂɕ\͈͂̒ @@ -148,13 +148,13 @@ void SelectCountryInit( void ) // 炩TWLݒf[^t@Cǂݍݍς݂̐ݒ擾 // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // ݒς݃[WƍR[h̎擾 - s_regionCode = (TWLRegion)THW_GetRegion(); + s_regionCode = (LCFGTWLRegion)LCFG_THW_GetRegion(); if( !g_isValidTSD || - ( TSD_GetCountry() >= TWL_COUNTRY_MAX ) ) { - s_countryCode = (TWLCountryCode)0; + ( LCFG_TSD_GetCountry() >= LCFG_TWL_COUNTRY_MAX ) ) { + s_countryCode = (LCFGTWLCountryCode)0; }else { - s_countryCode = TSD_GetCountry(); + s_countryCode = LCFG_TSD_GetCountry(); } // XN[j[̏ @@ -259,8 +259,8 @@ static void MoveCursorByScrollBar( void ) // ^b`pbhɂXN[A\鍀ڂ̒ if( s_menu_display_start + countrySel.num - 1 > s_list_end ) s_menu_display_start = (u16)(s_list_end - countrySel.num + 1); if( s_menu_display_start < s_list_start ) s_menu_display_start = s_list_start; - if( s_countryCode < s_menu_display_start ) s_countryCode = (TWLCountryCode)s_menu_display_start; - else if( s_menu_display_start + countrySel.num - 1 < s_countryCode ) s_countryCode = (TWLCountryCode)(s_menu_display_start + countrySel.num - 1); + if( s_countryCode < s_menu_display_start ) s_countryCode = (LCFGTWLCountryCode)s_menu_display_start; + else if( s_menu_display_start + countrySel.num - 1 < s_countryCode ) s_countryCode = (LCFGTWLCountryCode)(s_menu_display_start + countrySel.num - 1); } // Iʂ̕`揈 @@ -306,7 +306,7 @@ int SelectCountryMain( void ) // ^b`pbhɂ郁j[ڂ̑I selecteditem = (u16)(s_countryCode - s_menu_display_start); tp_select = SelectMenuByTP( (u16 *)&selecteditem, &countrySel ); - s_countryCode = (TWLCountryCode)(s_menu_display_start + selecteditem); + s_countryCode = (LCFGTWLCountryCode)(s_menu_display_start + selecteditem); // ` DrawCountryMain(); @@ -318,12 +318,12 @@ int SelectCountryMain( void ) } if( ( pad.trg & PAD_BUTTON_A ) || tp_select ) { // j[ڂւ̕ - TSD_SetCountry( s_countryCode ); // R[hݒ - TSD_SetFlagCountry( TRUE ); // R[h̓tO𗧂Ă + LCFG_TSD_SetCountry( s_countryCode ); // R[hݒ + LCFG_TSD_SetFlagCountry( TRUE ); // R[h̓tO𗧂Ă // :::::::::::::::::::::::::::::::::::::::::::::: // TWLݒf[^t@Cւ̏ // :::::::::::::::::::::::::::::::::::::::::::::: - (void)SYSM_WriteTWLSettingsFile(); + (void)LCFG_WriteTWLSettingsFile(); MachineSettingInit(); return 0; diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/selectLanguage.c b/build/systemMenu_RED/MachineSettings/ARM9/src/selectLanguage.c index 6f678cfe..cb931462 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/selectLanguage.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/selectLanguage.c @@ -33,23 +33,23 @@ // static variable ------------------------------------- static int s_lang; // ỈԖڂIĂ邩 -static TWLRegion s_regionCode; // [WR[h +static LCFGTWLRegion s_regionCode; // [WR[h -static const u16* s_pStrLanguage[TWL_LANG_CODE_MAX]; -static TWLLangCode s_langCodeList[TWL_LANG_CODE_MAX]; +static const u16* s_pStrLanguage[LCFG_TWL_LANG_CODE_MAX]; +static LCFGTWLLangCode s_langCodeList[LCFG_TWL_LANG_CODE_MAX]; // const data ----------------------------------------- -static const u16 region_lang_Mapping[TWL_REGION_MAX] = +static const u16 region_lang_Mapping[LCFG_TWL_REGION_MAX] = { - TWL_LANG_BITMAP_JAPAN, - TWL_LANG_BITMAP_AMERICA, - TWL_LANG_BITMAP_EUROPE, - TWL_LANG_BITMAP_AUSTRALIA, - TWL_LANG_BITMAP_CHINA, - TWL_LANG_BITMAP_KOREA + LCFG_TWL_LANG_BITMAP_JAPAN, + LCFG_TWL_LANG_BITMAP_AMERICA, + LCFG_TWL_LANG_BITMAP_EUROPE, + LCFG_TWL_LANG_BITMAP_AUSTRALIA, + LCFG_TWL_LANG_BITMAP_CHINA, + LCFG_TWL_LANG_BITMAP_KOREA }; -static const u16 *const s_pStrLanguageData[TWL_LANG_CODE_MAX] = { +static const u16 *const s_pStrLanguageData[LCFG_TWL_LANG_CODE_MAX] = { (const u16 *)L"{", (const u16 *)L"English ", (const u16 *)L"Francais", @@ -60,7 +60,7 @@ static const u16 *const s_pStrLanguageData[TWL_LANG_CODE_MAX] = { (const u16 *)L"؍ij" }; -static MenuPos s_languagePos[TWL_LANG_CODE_MAX] = { +static MenuPos s_languagePos[LCFG_TWL_LANG_CODE_MAX] = { { TRUE, 4 * 8, 6 * 8 }, { TRUE, 4 * 8, 8 * 8 }, { TRUE, 4 * 8, 10 * 8 }, @@ -72,7 +72,7 @@ static MenuPos s_languagePos[TWL_LANG_CODE_MAX] = { }; static MenuParam langSel = { - TWL_LANG_CODE_MAX, + LCFG_TWL_LANG_CODE_MAX, TXT_COLOR_BLACK, TXT_COLOR_GREEN, TXT_COLOR_RED, @@ -107,24 +107,24 @@ void SelectLanguageInit( void ) // 炩TWLݒf[^t@Cǂݍݍς݂̐ݒ擾 // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // [W̎擾 - s_regionCode = (TWLRegion)THW_GetRegion(); + s_regionCode = (LCFGTWLRegion)LCFG_THW_GetRegion(); // ̎擾 if( !g_isValidTSD || - ( TSD_GetLanguage() >= TWL_LANG_CODE_MAX ) ) { - temp_langCode = TWL_LANG_ENGLISH; + ( LCFG_TSD_GetLanguage() >= LCFG_TWL_LANG_CODE_MAX ) ) { + temp_langCode = LCFG_TWL_LANG_ENGLISH; }else { - temp_langCode = TSD_GetLanguage(); + temp_langCode = LCFG_TSD_GetLanguage(); } // [W-}bsO񂩂Ã݂[WőIł錾XgAbv s_lang = 0; - for(l=0; lmonth, TSD_GetBirthdayPtr()->day); + PrintfSJIS( 128, 10*8, TXT_UCOLOR_G0, "%d^%d", LCFG_TSD_GetBirthdayPtr()->month, LCFG_TSD_GetBirthdayPtr()->day); // J[ - color = TSD_GetUserColor(); + color = LCFG_TSD_GetUserColor(); PutStringUTF16( 128 , 12*8, TXT_UCOLOR_G0, L"" ); // Rg - SVC_CpuCopy( TSD_GetCommentPtr(), tempbuf, 13 * 2, 16 ); + SVC_CpuCopy( LCFG_TSD_GetCommentPtr(), tempbuf, 13 * 2, 16 ); *(tempbuf+13)='\n'; - SVC_CpuCopy( TSD_GetCommentPtr()+13, tempbuf+14, 13 * 2, 16 ); - *(tempbuf+TWL_COMMENT_LENGTH+1)=0; + SVC_CpuCopy( LCFG_TSD_GetCommentPtr()+13, tempbuf+14, 13 * 2, 16 ); + *(tempbuf+LCFG_TWL_COMMENT_LENGTH+1)=0; PutStringUTF16( 128-78 , 16*8 , TXT_UCOLOR_G0, tempbuf ); } @@ -253,7 +253,7 @@ void SetOwnerInfoInit( void ) // NITROݒf[^languageɉCj[\̐؂ւ for( i = 0; i < USER_INFO_MENU_ELEMENT_NUM; i++ ) { - s_pStrSetting[ i ] = s_pStrSettingElemTbl[ i ][ TSD_GetLanguage() ]; + s_pStrSetting[ i ] = s_pStrSettingElemTbl[ i ][ LCFG_TSD_GetLanguage() ]; } // BGf[^̃[h @@ -391,13 +391,13 @@ static void PushKeys( u16 code, NameOrComment noc ) { buf = s_temp_name; length = &s_temp_name_length; - max_length = TWL_NICKNAME_LENGTH; - setflag = TSD_SetFlagNickname; + max_length = LCFG_TWL_NICKNAME_LENGTH; + setflag = LCFG_TSD_SetFlagNickname; }else if(noc == NOC_COMMENT) { buf = s_temp_comment; length = &s_temp_comment_length; - max_length = TWL_COMMENT_LENGTH; + max_length = LCFG_TWL_COMMENT_LENGTH; // setflag = TSD_SetFlagComment; setflag = NULL; }else @@ -425,14 +425,14 @@ static void PushKeys( u16 code, NameOrComment noc ) if(setflag) setflag(TRUE);// ݒ芮tO𗧂ĂĂ SVC_CpuClear(0, buf + *length, (max_length - *length) * 2, 16);// [NA if(noc == NOC_NAME) { - TSD_SetNickname( buf ); + LCFG_TSD_SetNickname( buf ); }else if(noc == NOC_COMMENT) { - TSD_SetComment( buf ); + LCFG_TSD_SetComment( buf ); } // :::::::::::::::::::::::::::::::::::::::::::::: // TWLݒf[^t@Cւ̏ // :::::::::::::::::::::::::::::::::::::::::::::: - (void)SYSM_WriteTWLSettingsFile();// t@C֏ + (void)LCFG_WriteTWLSettingsFile();// t@C֏ // Z[uɃLZƍ case CANCEL_BUTTON_: SetOwnerInfoInit(); @@ -580,11 +580,11 @@ static void SetNicknameInit( void ) // 炩TWLݒf[^t@Cǂݍݍς݂̐ݒ擾 // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // jbNl[pe|obt@̏ - TSD_GetNickname( s_temp_name ); + LCFG_TSD_GetNickname( s_temp_name ); s_temp_name_length = MY_StrLen( s_temp_name ); - if( s_temp_name_length < TWL_NICKNAME_LENGTH ) { + if( s_temp_name_length < LCFG_TWL_NICKNAME_LENGTH ) { SVC_CpuClear(CHAR_USCORE, &s_temp_name[ s_temp_name_length ], - ( TWL_NICKNAME_LENGTH - s_temp_name_length ) * 2, 16); + ( LCFG_TWL_NICKNAME_LENGTH - s_temp_name_length ) * 2, 16); } DrawSetNicknameScene(); @@ -651,7 +651,7 @@ static void SetBirthdayInit( void ) // 炩TWLݒf[^t@Cǂݍݍς݂̐ݒ擾 // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // a - TSD_GetBirthday( &s_temp_birthday ); + LCFG_TSD_GetBirthday( &s_temp_birthday ); // BGf[^̃[h GX_LoadBG1Char(bg_char_data, 0, sizeof(bg_char_data)); @@ -763,12 +763,12 @@ static int SetBirthdayMain( void ) DrawSetBirthdayScene(); if( pad.trg & PAD_BUTTON_A || (tp_touch && temp_ok_cancel == KEY_OK) ) { - TSD_SetBirthday(&s_temp_birthday); - TSD_SetFlagBirthday( TRUE ); + LCFG_TSD_SetBirthday(&s_temp_birthday); + LCFG_TSD_SetFlagBirthday( TRUE ); // :::::::::::::::::::::::::::::::::::::::::::::: // TWLݒf[^t@Cւ̏ // :::::::::::::::::::::::::::::::::::::::::::::: - (void)SYSM_WriteTWLSettingsFile();// t@C֏ + (void)LCFG_WriteTWLSettingsFile();// t@C֏ SetOwnerInfoInit(); g_pNowProcess = SetOwnerInfoMain; return 0; @@ -842,7 +842,7 @@ static void SetUserColorInit( void ) // 炩TWLݒf[^t@Cǂݍݍς݂̐ݒ擾 // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // [U[J[ - s_color_csr = TSD_GetUserColor(); + s_color_csr = LCFG_TSD_GetUserColor(); GX_SetVisiblePlane ( GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1); GXS_SetVisiblePlane( GX_PLANEMASK_BG0 ); @@ -885,16 +885,16 @@ static int SetUserColorMain( void ) } if( ( pad.trg & PAD_BUTTON_A ) || (tp_touch && temp_csr == KEY_OK) ) { // F - TSD_SetUserColor( (u8 )s_color_csr ); + LCFG_TSD_SetUserColor( (u8 )s_color_csr ); // :::::::::::::::::::::::::::::::::::::::::::::: // TWLݒf[^t@Cւ̏ // :::::::::::::::::::::::::::::::::::::::::::::: - (void)SYSM_WriteTWLSettingsFile();// t@C֏ + (void)LCFG_WriteTWLSettingsFile();// t@C֏ SetOwnerInfoInit(); g_pNowProcess = SetOwnerInfoMain; return 0; }else if( ( pad.trg & PAD_BUTTON_B ) || (tp_touch && temp_csr == KEY_CANCEL) ) { - ChangeUserColor( TSD_GetUserColor() ); // pbgFɂǂ + ChangeUserColor( LCFG_TSD_GetUserColor() ); // pbgFɂǂ SetOwnerInfoInit(); g_pNowProcess = SetOwnerInfoMain; return 0; @@ -909,13 +909,13 @@ static int SetUserColorMain( void ) // RgҏWʂ̕`揈 static void DrawSetCommentScene( void ) { - u16 tempbuf[TWL_COMMENT_LENGTH+2]; + u16 tempbuf[LCFG_TWL_COMMENT_LENGTH+2]; NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL ); PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"COMMENT" ); SVC_CpuCopy( s_temp_comment, tempbuf, 13 * 2, 16 ); *(tempbuf+13)='\n'; SVC_CpuCopy( s_temp_comment+13, tempbuf+14, 13 * 2, 16 ); - *(tempbuf+TWL_COMMENT_LENGTH+1)=0; + *(tempbuf+LCFG_TWL_COMMENT_LENGTH+1)=0; PutStringUTF16( 128-78 , 15 , TXT_UCOLOR_G0, tempbuf ); DrawCharKeys(); } @@ -930,11 +930,11 @@ static void SetCommentInit( void ) // 炩TWLݒf[^t@Cǂݍݍς݂̐ݒ擾 // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // Rgpe|obt@̏ - TSD_GetComment( s_temp_comment ); + LCFG_TSD_GetComment( s_temp_comment ); s_temp_comment_length = MY_StrLen( s_temp_comment ); - if( s_temp_comment_length < TWL_COMMENT_LENGTH ) { + if( s_temp_comment_length < LCFG_TWL_COMMENT_LENGTH ) { SVC_CpuClear(CHAR_USCORE, &s_temp_comment[ s_temp_comment_length ], - ( TWL_COMMENT_LENGTH - s_temp_comment_length ) * 2, 16); + ( LCFG_TWL_COMMENT_LENGTH - s_temp_comment_length ) * 2, 16); } DrawSetCommentScene(); diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/setRTC.c b/build/systemMenu_RED/MachineSettings/ARM9/src/setRTC.c index 41e37f1e..249bfa9a 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/setRTC.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/setRTC.c @@ -175,7 +175,7 @@ int SetRTCMain( void ) tp_return = WithinRangeTP( RETURN_BUTTON_TOP_X, RETURN_BUTTON_TOP_Y, RETURN_BUTTON_BOTTOM_X, RETURN_BUTTON_BOTTOM_Y, &tpd.disp ); } - if( g_initialSet && !TSD_IsSetDateTime() ) { + if( g_initialSet && !LCFG_TSD_IsSetDateTime() ) { tp_set = TRUE; } //-------------------------------------- @@ -379,11 +379,11 @@ static int InputRtcDateTimeMain( void ) TSD_SetRTCOffset( SYSM_CalcRTCOffset( &date, &s_pWork->dtp.Time ) ); } - TSD_SetFlagDateTime( TRUE ); // RTC̓tO𗧂ĂB + LCFG_TSD_SetFlagDateTime( TRUE ); // RTC̓tO𗧂ĂB // :::::::::::::::::::::::::::::::::::::::::::::: // TWLݒf[^t@Cւ̏ // :::::::::::::::::::::::::::::::::::::::::::::: - (void)SYSM_WriteTWLSettingsFile(); + (void)LCFG_WriteTWLSettingsFile(); // ʂ̕\XV GetAndDrawRTCData( &g_rtcDraw, TRUE ); @@ -543,11 +543,11 @@ void ClearRTC( void ) RTCDate date = { 0, 1, 1, RTC_WEEK_SUNDAY }; RTCTime time = { 0, 0, 0 }; (void)RTC_SetDateTime( &date, &time ); - TSD_SetFlagDateTime( TRUE ); - TSD_SetRTCOffset( 0 ); - TSD_SetRTCLastSetYear( 0 ); + LCFG_TSD_SetFlagDateTime( TRUE ); + TSD_SetRTCOffset( 0 ); // [TODO:]SDK̊֐ԈĂ + LCFG_TSD_SetRTCLastSetYear( 0 ); // :::::::::::::::::::::::::::::::::::::::::::::: // TWLݒf[^t@Cւ̏ // :::::::::::::::::::::::::::::::::::::::::::::: - (void)SYSM_WriteTWLSettingsFile(); + (void)LCFG_WriteTWLSettingsFile(); } diff --git a/doc/mb_childメモリマップ.vsd b/doc/mb_childメモリマップ.vsd index e9d8ccb462cb1e080d9d96c203f90d31e5a940ec..e4633458376bc06d24f5f8239fa8f0cf5e237717 100644 GIT binary patch delta 40718 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 delta 39083 zcmZ5{30w```}mpLo|tZm7EG5S>y*mQ+#A`Mc3G!Vk!?yv)~S#sj25!bjqF|{q{3@L zmTV(yh$%Z^ZrQiye=hI){eFLcpR4D&&w1v|xo4j9?34P@EcKPy;Th)Uhi?ZYehtr= zZJwb@Xma$sc^eyZ!`!}*bhJ(L_CDrzw)Pp(dvb;kxo)Cv=8&T?bLjwTdE<)rm@$XVCl9R6>ULl4#EMEKj~OdHT3L^gf*REZ=R;^n7`;F+-sT0exilRV@ zPN(}1{r^J(0s@{seVXGnYCQq(G;!iYb8~Y)Kfj2Gi1zKE9t(arDa%fU{0XR%A7-io;hos9IR%>O@UMF*tRJr)pR%>r>@8jbG5f2ZK9=<;E%i5fEjt+1( ztDM8m;s4BNqnS7^yu7?z{`cRHA3y5r>;L^GckI|PCt;A|KUan2gay0hggHB!z^k$X zT}*nyRs44t?t_y}PNxvJoOGw(EdR>L|Hl`W)A&C;fxZ9#dBSpThW?(z4Q>K_QZzm5 zKc6X6rp%liYevm~DALf$NDZmcyt+@vN>e3^J{`b?ZTUYqh z1VMl@JT*EBa%tdxgdLqfCKg2+3nMWkdupr62~7|HmLk9&K7+SYNu<3s0!Bbm(C^3k z_go(cBT}0KS7-O0E1IWS=0cqQwa6*eX zHU+;Lv*qN z>4qhUk2K#3=eVbBZk(iA0Ygs1Tjqx&ere#I4A*wEz9DI6ID*?hyz6cZG}ddsRx6v)`i7Ca!;!s5zpnGP8G29&MN}Q(E(HE(7k-{3k>E~n7q0y? z*D)nhhq!hIVElkc^PeZR$O0NpRu6xIak2^f!jYznauT!NAg(C}n0ciHU&Y
iyV$Ab4DTp9O?V#GM}1Y+kfaz%zppb=OyT41DGF%-Oimd7P1sFwPq;5P?VK6?uK}H#Na~Tth zG|*slA7B(O_UPDyVOC5R-&o}8Kqy|r|07;LS4pIW|2+Wq5h^%kdEC7*h%gZhi8QYs zvS&PE?q{5_zQKm>5sO&*ff$Pb1Z+VlJ2-(yo#An{vcLAbd7Z)P<;OO4hGz==iJrCq zu(!Jwkf&@WMU01-Na0Z`yHQ&mfqAEAi8H2{Y~a8+C6;|LJnV8{+O7oy>jed7~l zMtp_`=d%ZZTY36Wogn}Wsx!Pz1KMxBGtAl|Tb*JNtvnEb)xqYcd}8+?Ge_+=dsDBf zGnjO$Gnm#HEb0uFrl$7LBw#sMoLkQ0=Z)%|eNS(nNQKRipUo>?HIu@OdE<#x}AASB=Rhs(ZQ!}%21a4Dr zC1jN6_rNipQ1#rIT4#V;;ZtX*G|L%oTCKeLplWXVroIzYJEmo0kO!kd9SDQsuTk}Q zc5WPjc#`k|;Ho$E2x4j)>QHA;8VvAoN4)y*^ZUp81^~LZ0$mzwei#V2^aI zcOlHmrFDjCoBaQZg6aVru`UK5LoEDYU!!hfxN?Y~uH!iB2pcn%FKw zn%G&Wk%^{lG%C~NCbkiSHG^L_m^Jna`l0d*G8-DS(=53P1dV-DUuNmJuKL|TRSWIN z_MMSZqM=}7MNzmr$h-3VW|xcMyCx-uz6)fY*M*rl3^k$GxB50D#?;_ORgLLV zFeB0@`c3`jz>a=(2D`78C)DNY>*^-YOx>H+8PGaIuRt~2Q;qHW`e@B+&0vk@zNw>E zf!EMQD{2Pgz>y`V5m@|x|n&}*Gn`erZq zWDa@hHD|r9db#W25|I$EyIwV3{p$>~A!A~lA*s%gTxXc-WooZ!qv>2{SfW0ysn)#E z>^Epe))@lp3_(zu8QYg1`{-VLdfPnILVZ*7Y%X}_|2e6N8p&+p@HwdpK{CM)v(HJ% z5GjZ71RMY-)D0=+5GjZ7x{+`lB2^Hng0Q>s66b`56z2pa^DQL2HFBg!Hl)0SBQN0` zKm!Rt(~y!LiDWXX;K*8tfVB|m6^LZ^3T#N(U?gmSglQ0&2BEbE609{1DfSSthtN_7 z3GeG0QrbX58%Wr1B=mzwKS+QAmGTsUglI_U4hh{MjD`@*g2*h01V9)7Ap-`(wGM`B zO@WjYBg<-t42DQ>=;x$Ek&tjGvLR(O1+V3XW7GNT#D# zLrR#D5C#d3UPxwJNN5Woh=p^+!pSDVfk{S=(-1kPLzqlExFvS*S}+OnPJ+C%A)IZz zW+6ltLS!9;>x_iW5ZMfo0tnOL{Xsfh$eaWub524-N`aB%5F9xKkrD{?Mh-pXD1n5t zkZ{(>aTOw0Arb;%h!?y+xC^nnkWvF-jge)0LPN^-1SIovTXB)o|6w*ZeJauc#Xfv_4va0zm}fC#eebCSVG zsD_00ItIyn0TE9fq!=L5-RV{0-GoI|r;UX7k&CLnL*51mAHW5H&k%VGk&bX7PmF{I zkaZAbeGK7f<0Vg$KPQDlq!DtOdLfzG&A}h%L_vZIa!hJmJjfhEs&O$6$EU)tOf&d> zX5(Tz2xc`d1}z{w0%zU<;kZa7bI@*xq%dH<%iZEt zAfUO|irC0W2~z{rrxVsDtPWJWMI}!TR8LFpmY^nT3v1ivq^Z+t=Oi3UQ=hASR%>@B zO}#kzbDEkNQa`ocIbo%GLvpVy_4b6zk?E1@p=T4!vgT*0Z^pDwP(P0GTN|l<5tAKt zIe9~*`et(Wv`F>)n8Icam^VOA_m~ihT^`Ybrh3c_eB0|UY zOj1A9g!N5QtC9z=DpXJ064BgiaDv*$D>PzAk~%ChirE>h#v|9n?uk}Uffslkid2t{ zYmziNK|Og(L^PRHq_#_#!IrD(EfMi;mnW&`c;$KBKBL~99G0L~w@BEL(6dr~-|M^A zB=|KeKP&%arTSL>ipsi5wYn9eM}AeRW7W&mZEDr(QE3%$C)BevtfsKGP<>d_ph>G$ zGb{D_Rd*AU)R}ty>bXhkHRJU9wUvX^tX{uvLDF<}mR_IDB&l=s`t!L$i6{Rdag%U;2@z>YaLh!MP-L(JsAyH*c!mqu1}fd&5+H zK(9Y&XRrPXUVNx`h?>{y4_{=G4yX(D`XhrwkLvZu!Zz5e|JLhI&kRwI3OuOIZ=z8P zdVSgQ5OwGoz5eWWH}!PgWxf7xrAB=Rf;%DVdq?#8D!tyvOZ{B0f3d+TT3x5tzt!vK zc&Urt>Gki2N2|Z-_1|~ohp4lVBglO(wTo`khJP%2$`_^<7V7MypTi^{4duR>*YqIlaDoW3>9bUO)DN zULUJgU)1X_?TS92zM|J(b=-ALufKlbNVHni>+Q24q$2TFxphQh{v9 znx6gBCLl6j1(XQWqn_71dCwxDO--XspbB{&*w|PdsIrc*8VKn9BO_+{drlr3LB~cl zx-P2hp$kx~8yIwvsyc6B63T%Q!^1iG1ZHJ^X`c_i)Mcym|z zgl^EjH{=sf_?>>=_$G%X^CM3{Q`6^>)cTu;dJ6@+Zt@YEL8w>mu4ZS#bDuNtm*(kc z|C;9e7N$k{ukcDQY@T^ui7E{LNoc43MT8x=GwnHn3#P|Ls>`B}-XtjZ>Dg#%P#$zX z^0W~qkqH4c#e`X-Hqb;xuSWotU7=1~KPvFl9=rW}yXP4foilJ;c2Z!(rqjBDUF&$T z;1&&U)TS0GR+nX*X1bZ08JdE|e*5XP#PyG^^f=!1rcIGSXj)<|(f*IFgC-ZgTzefK zD7h9rIzRqY-+REObfZMApDy)y_)Cl$Y#9kgu20Gj&mAr&Y?-c$@}G826S7J-C9pUr zA;4q8#{KnQ!`CHl3(}2jpHmSncK=44GC$UpR}{Zhx@P%%iCu934Xp#1^Hd+`JLP<{$Ok3S}E<6U|F49^J9`Pv^v=7OW3vbQ`@U5P?QhNhdlG+7scWj$j`py(Mwj`S zX$PTBjH$Y8o(X6t`ies?$tuV_F!A6nUFP;*wiw>6Ql9P-|pk1^M?IS&?=Ijo&Jmknh z!%Pvy%_*tY!=uGA$$|j;q=Y6F(nIN;v~z&1Y)X{*$b;o@d78XXUMqtTaH;f=Tqb|_ zN9!NIwoiEf>eryqfE}LqJl}ZU(X9*^Wgc%G8Q>TD>z%2g!qai1#EeO{J|E%xEn)=l z>lXl;)ECwtD{T4m*iqLaA7!ut;_{CDJzH6-Y*6+pCzPv7z++`AszTe}B3}Ew)}Z#@ z=(JeZ*M1eDXb*Zj4Kh(3&7)_~Tj+E23+hq%^VPukh?9?I6+e6z?5fSB4v*Pc4cZ2pauXSnCez3qau-=l=DpIo7FCn)$*O%w zgr%5lG5%*cb5Q9yW<_K!L%144{BQl?&&(ueuKk~ck6qWENC-j3_Jh0i^hA+ zkq?4f<;T0iv2;0CGkX2}<7b4Pf0y2g+tCMDxCuRkp+c_drSKDNri9JjZQB9#a61J` zO9wD#4!%(YsxVi%QaCc`jU%uXi80W9)9 z$J}9FGT)dcY-<*0fsPGkV;FWWyOQ0){>2I`sAQkApV)T%d#*FrpCdUCiY9W)xIAtj zcapotNgSx>4xOasY13;ARHG|1b8646=vXz@wTFmI9Lo988A&;D6XyeTEAUP4jFVu5J9E*RQx1b zNKTTX^p{8pL`s;vOgby=lTJ!Ws3d^{WOK?vK2G+QN5~UpTKG|^y-xgX7 z;4JpaC*-U0W4S09e69Z}H&a}d?#dt~Oqr^H`O0c#yK-1LtK3#zC|?-`Sfj1bZm1Rw zLZi_+=n539We%dJ(HrPp<|As3Ibxs<+YcL!G0bdiDRzV1i-8l^RczOL;{_Gewj`dK$8uqkY$ev^GurJwf zY!ePVaok?&!wu$Enr$wO=H_rFAaWHK$J?Q0+)d6*2A?@g-kI;hr(gkm6#oPTAJL8c ze*P4Hov+~=_=?^jUu`c$9m`jH35)PhVT!ZO&N2B8bEFj#*eo5CPD?kW zC(=i$BjzZBPI5nav>YMNmY2#KGd&&yYHXkoKnU(6vP4~rmw+_ea3!f z`?8~0iUkSm5_UaXt9($dup^X-3ZRwdoIBT(8^(?2W^$Rih*i^qwOj3Xo#V`FpRp_UPgIQ#A4`PGLcaeQiC*YThi zUP@~OZ^2)fNpHm$9Cui~tjM9HZL3^iw@`p2f{zciA3#Kn`KLCPiFc@MddoWZ>(0R`^y zZd4D78A@G#`zRv?T_SKON%|57JHGs&(^J4e?~QXd7oDkj^tb_ zhrX8`>Sn$V`d-y;@vcp4`rnXsqs2{MDxWv!z(0b@aIIe*A$IdyIdGv_@C$TzCHIuO zfOh+8$Af-Y4}M-ib!=I=iz*H) zRy<2RFL>5?I^r9pF}<%%uz5tuV*ujSOY$Z(^eib=%9aWwa9p}1J&-oajgqa*yrg|( zaD;2k+#+<$TKO??L@t+a+?BJ5?{ejww1>&X53zT1PCjyb!~A51DPX+PeHr34PsvoG z*d#WC1smD@>?u}MYLy1oluJgza&!}V0R0<{=W5Xps2K)IxQ^HfdK3ou1Wd)O$G}j& z6dTSg=GXBD7`i#`jsrL~J|3TmyPj&}YjmdK=dVP(rVEQsd4pbeB0#o~ATALv2@ixX zRHI-k0;Bn!#)XU1#M|r(RxfIgh~?s4@s;>pw5e(e?Yw=@e)(;QS^QukoR~%|B*0oi zPaGl2iFEQ6VKjK44SA3DBRe${V#yTJN!Uu(93soeYrN6o*(^VYLbK+MQX0ye@~6Pe zPyO=qESn&0nSV{%75WhkWcriz$E5X_$1^h-z%a|?olFt)Lb}h?F+COV$D%P^#_pQH z&SHzc+4jp{$L?T{rS~|&ZsHDbz`&|Fd#*j#iyO{mDSJ_n%4Ks|Mde4L?PZ*QeNh^M(dIp#i7WW=yA z?OgSC@vwOIigjhc^Zs^E5wq*HZKW~jV2QDMdgDw~5vUgbw)%c8QCcSD{q~E%A`i~< zp=6~fl3~Qr_8v00B#)Fo4_((|wmg~IAm8r{j>{3$19|DBU$PUWQM?sTe`Smkrz}uF zNUlSka$}$JFmA5;$~Wh#A2R_J1y#gkC(pS1wn+3h!=QXGuLYQ?n-}8?y}CnK8FmwU zhJD5^lFoP+91OsJ;!!wgL3j{-h>^t4Nre5AAQ*Qo^FtgK z5`TnY<@M^c`vj;Xei0}%lHR00IfjfQ!2)s($&rQRIr0wqlKe)34s-*BQ#vY`ieadS z{7MRJq5h%-s**B#J#K;%4Nma=X_Ahl6X|7i9=+rns9tlPzDG|^s7|}`EjqjU%dgSZ zh9F>!giPLewo2Tb)t=##HfIfFzz=Z>Gmpt+wlO?&hPlPqK4*5aR;&wK-i_6=*Q=S= zNqx4B-s8Ue8K7BaPnD&-ojo9(T`@Gj+$&X8KC^kVi@rOXi#A-FjiX)m-14qzscn>Q z-5$Qq-2176Hk6yfUH93XwUh%JIL9l4_%MDdKc8RCi&bDBe^0o^?`t%B(SF@ezDfbE zr=Py9sTn9>=oF!IowWtX5_Sr`P?M%tmDj=#p{WQMO!N{5iuE(1pG&y^vHly1uoNx8Z!d zCWOCy2(O8g7szX5PA;rl{`Vy2w_s`mE8c@1zM@4B?*`danY-btx}5@il_88WR++9W zQdlKlIjVqK^dS0LQT4NiHlQ0?G!#7Q5rVd*QqXRFH=-DI3IzivNoW;mf;nIvu-@1R z%zPpSLS8$}!!ohWaaYygFHCR_kIeA8-73R7Jn|g|5T?WQjQ%*T!-Me{d@inEiEqKj z5(2)&gjgBHytaId8}J8nT%%ZMG!mP!U?@?@oMnxA=qr1WScWJ|{|SKUId{X*@W}RLkA%+sNp7}tI)a#}n4`hg`4`<=@YE{bgLg6-Qi9S= zS{(_*ij|6|05Qh-I{|VeSi4kWHU_kvZYUyLTph;xMJYA~^Uan_3}_4?jan?4*-E-D z39HX2Bi~cc$mmAq6A$)LRQ3=0Qv{X$AZseujRNxzyvi6u?c^6wUYU3H?4m$1)l<0s zS04Y1LTL@{O#`FtjCFh)vyfg(Z>R`4bK-DZo4=>SSd=-;bf0~-tQT|m);SoCUb9bk z(X>J@Zd=*$eAkK|3G1UiU0SeqZY|gAuEu-B&4C|;0SOC^@67${n5Jr1K(D)u^yykq zQCvW(#S<~)qi8PWo~;UBJ2%Yp0s|vbW5&X|ChgSR`#*2ax*L4A-^Fbi2;dSkyl<;L z(r#cAl6vm?$k4z=aKJk;{g~0rXnr=cl(F5wgs>-=PCvF);qRDK`mI1wRy@2 zwvR%uu>M}_hF-KeTixQrE4heWyu>8rw<2g7ptP~IG*zY9X>HdiQ6K--p8aqW;hJ;K z{x>|*ytsi}=(hepo*}B5H|8lvinA`dpUZ8{Y`R(tu5&%52F`TPCJ=>Q1yR6(@4y=) zQmC2fzvh^);NJ)b`Liy$pOKq)`TasSA-U-dEJ{c!Ejzud^rvfwe4&2N8x%1C=+WEw zPm_~ESU1=9Pq1$SXd<>2aZx7*i*ZxaTc?U;+2W>JkF>*a$8Rt29R!q-%x@L)#b7D-eN}G!C;kjJ+cFy4bL(}|_aw8}aHpQC++fM*Ub(NI8hIRD-4onI z8yVCVYm50{gRyXI8U_|(Yq7KB5v&}$i}fPDV_-ZL8rc@##SF%W&hU?zhJ$y^Tw(S2 zs<|cjQNf(8Tm&{VgNQI8G(E`cHb=ZHH*%%-W4UkEGGWsq6#c7s}WCi@RL zlr@5^;lO_rBo*XChI~h^I6$eXc2rRhYAAK|;9=sS(LZ?~Pc7rYJAOB{j=xM*Q|~E2 z+tEtOe=MCbdhv0#)j(@mQm`W4@#y1ldKz7}-|SG<3VJhrkUl-5jWY1+rb_xL{fV}i ztJuv(HaRkXBrSrOz3A$3*Gz^fWqGFY%A4Jf?=$mQ7_wgZyW((LHbEN9+Mb+n55%+S z>?$erQ5)$J`+$ARf=1SsYs($(b!Gh!ZY=lu_3cAh3pV+z*fP^0o&ujH2ON&G)klMF z;Eg_S6sGmZv`0OEcJQq5+?(T(Z+Vm(T@Tvtxy3!_=D&>mV8J^vd}luOmPqoEd?N29 zoaNmo5<9A%ye{K!@}cIgRZl9wM_z-jL^}yx(9tD^`opy#=9%hD!fQkQ7PFdP>x511 z{zpL_3h&Y)^SpIOErW)b-d}E3YIGCy3uDUbjh_C3x@Boq?HV_>`;!9-?!ZK%AE_*t&rL<(P#-)R{*;0Hjx+4h)&pZ@oM#q7Otq&U-p)&I%k-dPLzI0 zAWfRyI?i^tG=jJ+9cS@_{SV!|}u zDM25E()ztUOikS$_-K0j#)KWD+D>GA{o}3xi$8u{t{na;+{z+s;$WlpX$jR&&xlh6 zV>?D|30sjG7B|GP1>$TH`Qdn$6M*sMmt~RDm12he$MT$4?!o2#P@1AwP%m^K3UgIc zP*)-o9m5zCkWoyTF#~CZwP3np1ZJO!83RTeo88im)d@d!iRHfSwq)LOjJ69ifC*rlu}RE^ zmqnkBecdbXUwq|->oULm027bfS71U%kr8%>?7qS}s@838u}!Dy#ZLp|>1^Yho&Wfq zqqHXq+_azM%g>(tdXAJAvlXn~p{&xF0c^#l zwD!azg+yVQkSFXDz)2x{=%YI|LWA(5V_Btr#V;Stm6=e78xLcL)VQ`a#=|&KH_517 z{mRBnTK7w*^Mq#-9!WFn)lrN~2EB301g~0YEdegmE#;1KUwM>F$qDij8R(Qfa;dzI zc_feLFEHIm@CL>Jy-8QLJ3EMdM{vsb`5CE8mj!iNKYW)-kUEFm#lD9z!oy_~yg(b& z6K%q^=5S8O1#>YR_!Hay#hpU0qcvy)3QRF4p7Fr?U?Z_eJ|1&mKrXhAFTo}<)mS|b zpwoHRpPEUlAvNZ{E0PgxPfA)ilKi--!I$tS>3;yiJWcuo8u znvxj#hy(-4P;v@6kL=EDBjbcKB)CN;313Jn%7yX}2&(Y2!{YIwBg)gArcn#2wG_}( zc4nWlPE$9iC)7vEoCc0`C%PX!nvS4n(@W_MG}ud@ps&)8X#=fd?3wlq=*0|Y0_0f? zlgeZ>8|C8+xWqhQYUD=7met8V>|hpTE7RD8>{|9hmt(t(BIRjo^(m{4{l$XV;lQ2) zA2>69I5&Y~C1Z$Hz=7kO3Nyx7Gtk8-46%4Hm=EWt@eBF2yN6V23b}*8{pgTeC-|#8 z_szZZGjAyXXGQ?>03kq#5?sX$VQ+{0A`8@xI#3s^?AEq&t*+u<- zJY8{fk#q#jmoD#UxBQdGgdb0r*dHV|ULzT4@Q!vw=_j9k0X61dZDpMm7BXbD?{%q0 zf+-eLxrJQi@!hkB9IcF#O_z>u*5k!e*-hCif9PND39iXssCwC_?~^euN>{~}1`j6| zP>ISiB~RI>oK&tUsRb)!hX%zIrRNQ)Y;V=+yLS_7ZgH_Ot)Lk53dVX(Z&>8v^1CA* zYVM$i+SB9%2BWQ?(;p>v#{1(WK9)+vYnI`8cqs7#&;EPA{005-Yq9(c|BP2=AfmP% z@m&}~scCMnrs!7Vz|*lYFSbR5&$_0uW*lkP5benDT6Uy%=~jtlLMK_407Ml9cgcc z>3UcW0waO)r+O6x6cUUAOqJ(3Pm3~7>vneIQR7LRgq09GotCGnd#!!C|3*oCz15@H zTd_khj!2EFQe98LU~+rz*UFbnC%Fj=jD?Tib&ua=k0G3?vF@?=G5(DG_12SX$$^es zU+$JnaS7ZKZn?aNYYh6h_>T*tXtgj9WMCu+?s|4>RDJyJ`HoXK&B(8n1#Uc5+qo}) z>4|ety~)xm`P*xe%RAPpEzc!6AMLfPW;}^;kmJBlGgic<+6D{UGvwc>|aSu^8=y5#h#Sc4gX@#fkHeOE=`dB z%|aQIP~d^|_CA`QUJKr4JVgsy$)KC8?v?R+jBE@E`(vC83gvThn(|T}Ip$UvMZI0a zSlX{WhfiyU$9K2V9-#J2sR^#ownuxRj=RwO zF!YhmcP6@eaFBbXiOD{aAGHGwMU5t=6q@fx=*~Te^2HRvnq%&mKRpbK?gDaS6R|sZ z9=6Zn;Do;ID=?dfj`obAFyEWUvzyyF;=quS89M-P!A9X#RZ+r5yjsL^5HuFGu&L<$WKwhcgTHFthR9F(R%?YqT}GLy>xDYtDO)B5wG@ z3x3<0AvZuR(CX%sCL!8En@Ly*A#af23HgyB%NR$h6V;FUPDN0LZIrQ6=euel3^^?v zZ9bo(bkN8(P$LD|BQB{X8SQAOf1vq=%?jtN+!%`XN=D-FtIld5;4-; zyM2xlr9K~$arbV%B0Sv74wBe+G%sm*JU$QIF<(cFbl+UEZbUk}<1Y zb}42Oa#egR8bnofv$B?DWw9+PV;L8zt2BK+a%Pl7NfU@A(t2q#Q7VBe(j!Th5V^VR zE(a@Z6w~qY24`u3?4oco({+(6D3_OzujDe9Swrj;H)Sgcri}6=rzs1SwTfOjqLeG3 zYU2VkqeuB;>?8y>9qd+&+Q+DTa^853+!=t)ccJwZKslKEhnQ9 zk>e&a=vsQkc#t@`7_C4bqR$BhRb%Zik6M`YAKRLE6ZASBOUG1G=D3c`-G%uq-oiY< z1~A%2%ocBp`{0A|X97X0m{@;C!+%_IMy+Qe3Nk|R;wi5OZ5Yvm`pM=33s-1$pR zYa5G*iv&!$)ziO-XM-1KXh@RsC*N#QZJbj|lPHx#E?To7wSo`AJkfl}<6a)NZPTy8Bf-F9v3}sXL_;BGqwiIyLzMLxj_M7$E>E7Q}#Fr}dsg zfYr3}=+BX@Mi+NlIkjj;>8f*)>wPXQaG4vz&Ap&$>b>gh2jNQOiQO%7-xg%lel!Sk zFPs*Au4V0t+wmygLL+*M{$egt6@J2HZWw(W1_{%Bm{Z#06@731bs_u0g5pjYNS8#@ z#L2OU+ne%On|Ei{-&#b23MuO3p<6}tMfyH1aKC6*l+iE}6VHroU2}L;3e&jxeZcRm zYbDsh%#!cQRm?p3XG-tdyvp>zV>U>2=+h3e9~;)CEMr2ttM;m#|7?~P`EW+NmesS& zG55U6(`;jB+SPtV~^E3BG+q6FTIh$YX=;Yk0p(BbQH|+YUx;6zo z-yp|28_TCwSX67KGX{DI#;dfcRY0#trEZff3eDWv|b;ii)U~+DRq0CU5TfS3r`AYhexZCv0>46Ssko!TvTx8={8X)KOPgdU5INW&f(NKU%D( zQyEv;extPiUTzi`PF~=urBpJTEFh1Qmq^zKxaV`dpw^1=9Q=L0=ZtBd z!@w+9xt-uSkH{pp5j=5*xJ5iCEPv;DMs(;z_8W4!zK8=qm06@w6hyp1XHnv z_&4201S7>sq8XDX?i0tO*Te-Zs24HWK|+X9W`s0Rf+Zq^&5?FV#nLc#7V%EXCO{VJ zLHNo;$$r)ynd<`Hq+Uc$v# zyyPZ-!L0D-$3d~q1Mh>6#6846rFvit(Tebk_ zFh;bBXAm$twN(mqYRf#qItE$itaMQZC;>{8lB8rPmcN~=A04kKkG@PP45I+ENkGxn z)OPAHb(XqKy`XHrQpf35bT_(OM+eh0t}?;DldJAsa-rkxe`&W^NDmY5OzobQU65W| zXjyr%d)j$3lYK5ssG@cGQ$<$@?HkxRGk`nSQoB`5D1UETdCox#qM12NYqu$dMyEn` zpc@OcY!J&tvvb&)mvY!MTrq1ilmoQ-%4((~uP~Uw|GIP761L zC&EX;Tyzv|JHevjXfZ-8N)(rgbSuUzz)f|30jf|pOng{HB&Iqt?2v(4_9F}B{YgMB6sLZmUvnxs4BhVoB7^iENBH$Y}9Ep z8;H$gt0G_dRub!;5}$|@EkZgrGqr6{XDLJ7>{br4(`pr;-)h$x7Sr{g>#tS1ntfdS z)g$rK!j=K^M_S2)M(I93R3j@)9(BForAoFr=9+BXc+A!GS(FM`Bo{S}N@y}=j!EkA z0PU5=wimq2<5MD1QW?7)?bBLb=pHjWVz$Zj1asBiL?n53{Or=Cv+d4BUTt^#Ab#|& z$)h=DFK3%2@3pZ#-mwzd*3)quniQfKvo1kutyXyTyP&qW=6Yk>_!&K#Yqez&im_?U zRf_;Cx2grzbIl*kp_ZJDn#PtaT%}r`!vX|}NJml*u}s;@DTOLkd~YlJ>Mn;rFGoP? zoOtd0mEKDd4CyAHSxfFh_jnCf7wwTXY=bX{4CTgccfINEd*`A0MVA|@ZjEznVISd= z3)yG#&PH9x?qe53L=(-dcmh#jfh_TqT0iFQ!P{V2iDNstx#xVr{?L%x`AZ)*N372c zR-v{kCT-6(#8hpg1`%nGOe5pjaURW|(T?)CF|CoCo1TN^gFsK>ALh%Co-HGO)6#4%wOW3TiS(W^KaHq zoL)M;vVMZhP{6C4?d1DcId{uRd*u~ba|I0kVn?}AdlllBrD9Avfwh#LIzp9Gcf+?7 zy{3LpH!PgSCA6mT*aO2NDm;~c^q{Bmj~-kHyDj5h9CJL=D%GM_M~}^B+pV4#=1z4C zXZl~PEdE`sf{x2!+m$6jFS3g?!#=$$oa&+;+^ap3I@NJPb>~PtTE|YM!V!!_ZC`j0$BQ-(HhNHMfItyYUzlD;j1)p*N#s!cNv>l zvEN?#n!f96*XeCZUys_?pM0LR!r*ImL9%JIJm-a?30W?0k`Kt&2q4ODe!33+CXYv3 zE33!%=>Y~S&gga}JKUHOk`&m|Y=VBFI-oA}2$U(LXfzE4i^*N6G1M?jc5#1={y<;N zop&m$wNsl;F3=BejEFEg;?NJ5;VXYW5fLz39}tL5#*(oZ&HB433;yoVimpnmUB_ERpQbhrKsy)?<8ct21 zW-(MMl}&*H>Ns_YdO*FU8bn*VEe(9=K9aGXw2)4h^z;!LJQeTKuV8PD4bz74WNzAk zu=U2?wj-~5XRTp4rf@dWyO`O)?q!XUvYKtj0$+9ryH?(%EP^jxql!iW=h=JgYxW1* zl*72s4tujef6kt98)7zzi|5k0Ty8f9TWhw9)f{ZE>Lr&tV2{N82nkjqr8L;2^gTPqM=9fUB!g0QXbQX6i}uNrN_~q6-(3^?Sc+K z+b$2Y8rO^uT8MZhqa*V`al(4^HS;IEBcligjJchjuq|>tHWOp8EZ7@N7GW#d`&b>8 z%c8gjH+bVi*)ez=ZtTyuSmx*OZ?_~{1ZTU8zrw%cHVpLVJqbSogb=Yr3bBgVN*p4} zh?@j>MtmkLNoTSPIe-ixqeu`hWRM%l{bY%7ova}n;On7c3(A9v6h=~$s3T%J1&p!m zqPMq`MXHwaykDF!{L<@gcj`uUjPQsIo_b@$?s89Ap#dx9OTNqy=1&79%b4afLPGZvX1Rr`zKZctV2hQpf6Z8k2xF(R z^I6b~+s+vKQ>MNf}a%JXby?U6){G>reJOgF?uWvVjCD>Q61PM7}In%kO0i z0K83<%X1?m+bKCT81jGmNX{!BOJE<#4~3ZK_u3w9kAfL$816WLT?DD zfqsg9Vk{S1+nGa;=E(2Lsk4=K12aA8erK#dW_ld$P}?>;2h$!t=kyNepONP%?H$UQ>O#ef0aVmj6-|NT!Zi_g z2U5m@gfUuNp{Co>x2~&)%(@sA7wH4!^0*ldXExtTr>{#>P9D7l{#0Jdxj&VcXUxxJ z=GQNn$A@|Xk(oqh8MEibmEZl6cNvel@^@xHty^%hjd}IBr(e6sL)f+-7XIf|7h^h~ zH0JXw<=xMuRV>)bl5MtD8e6(&oW!%fE$iQ3^8vopQZ|@dAcARJ=IxE#e(n@^ovYz? zyaHtgz;_ee_5>Lz7BI^u(|RM)`-Gdr6+;xBOF5nf~0=L0} z7a(E2*c}Xv#m1)mR}@b(;0gAGF~?IFW0~2Xj=+Jj&Ro3YiEjaZ93Qahyw_Jl>GuS1 zX%z4S6b=Rg-S&t$H&8!?Y^=eZ$->!1F3mZ-|GN`DNpRoA?FTp+4?wk>=?gb3CoXhn7- zwPX+(P0k@#kb^1vgXC$F=$ifd9{HN=dI8{+QD^p{ehL5N|GpLqyQ$2ttBs0DGQMXb z?R|o2O~;5`%J092Js-~-+ZJ}9L2r5l{ioGDhc@a-@W+`{Xf@N0G3rUs`TX!3(M&eG zf;n6_=|Uj`0@*vv@mCFuDGR%Y*gh<9Q6{m3lFr_dce5odEQMCH?->?w_9jG;E7zUd zVwKdku&QI5=bhmxTxyWIgPtJv4wwuOpQVOf+){o6|B!pfd10n%zTG~RCqEZmi^cLO zJot)QV~2QS&&D(8lUSZso$AqZ)v->e4j-MU87Qzg@Mv~o?lg{c%-r$}TwMG;~ug=-rjJEthiy*P?w$$!dvuWc%2 z=fsumxaLGzWB%`SaGd-5UH5*EXTJGnIp2KW`#$gc3U-2rH=DoF%#V6K>iZ0@OuZ2? zX@=klU!gq$MV2+;NGr|19?PX40vLriq#f9ZoE00X>7M3Kcl0U_ z(L`xlPn+bFs;S(f>E2LRdZwbT9DE{Awp)t*iEiS6*RUSPwi}`s0+ucr!a5d<%d@7HiT+Ap1w`Y6rj++g%U3`mY*2*Vp~TkIkyUD&oL zZjw{3wdemDg4=!GhWM!$i=uf)@PsVbIBDc9)BuhBTH=$kfh~jIOlx0Pz7vnFEV`ec+8IH+f zPKxLfbBB4wd>0!j^LW->IYdIC$}jvP<$7tia*%LQx-Fr7{70oVTO)L5DK?0WvO&$$ z7PD*FdG|iY$_AkdGpzR`ypXtA?_u&LhJ#QFmLZ|yba5ZSYf3fuh$JoXjgXfi9;6>B z&F_O&KEu|oe$w-OD=tcst_8eD!5r8=SZ*S}gFDRqk4sebZltPN_jSYa;_$?)4l0vA zHi5e-bKJpnJ|3@Xju-t@wN|OnK6}MrMbYPt7MU{}4>YTcHCL>r`>T%*@vNSp-dWvk zp8BepNvqSCY5&~&)tE`b<>n#h|D!`;m-a}Fnur+R^wiK`cnJJZo*l;{&}H+%&A0KF zg+hK$w-^i5P?;uJ3)!8AHzx%6+ay_1*Y(Nz?32uM2Z4m?!9;5Cy-754PSgE{1 zJ{H2krJ`x3>8RkJ9F0oRcYL7Hs`SIx!n77ZT1fClGD&XCB z(N;oOm!!U7SaRQdWZg$94?;Ibhe{?&|9}^x*GVcVS4x^s$}7#!QUN{;CmZY4I(71E z`ydKURi)t*Rfq7uls9m&^hS`M7-d@5Rz#=*7SgPK`lhiQGmB;SBj2=F&mx8#EeYC4 zpgC$*ovz-e&R1Vi-&32Aotu$3?^L+5UBblB`Bl%R9;Vu<+_q#+rB0t1H0vofB(w5E zpy;!mwivTg!h1~}N~W<}*+VSi$lEjOV$`G^eT!r(cG@gJRlNM_KiJk$ps5IIqJZWK z3iU=IQhieRqH>|V!Q#hFpy$vm-RJm!p|Y0wWzp%9pjG#JWITYS_Mi5FW6c8@%Ru`3 zv5>c4@?fQHALs|!aU22*G(8z#=08nVs)g7>OzkRqMt<`Zj|-QCc^e0ML%y+wY`Rr= zc~;6Rl#;&GuK$Uy@5w8hmXG8oF+QQIO7DuV#cd4vw{@$J4JBz_L_$hlkJ8L(H=d!K zbU)2lO|<6og=XK&v<~l0`d9bs9ofHb^3>=j)yz&2wRtc( znpDb0#bc_4%0HC0JC);Do>fvG^9xP{NwsrL;yx7FvVEly?+;2N*Z?WB9Dk0>GiwnW zNZRjY>z#ToianCa{FzhZ4K@K)gP&|JY%f7z^xHlrk3+BENb!B)qJ1M)1rFnfx!BMD zT$>Pt6|6Gtj>Ve9v&DhoU*j8$46ip6Ua^dCbUdrF=uEb0Qjh8+#rO7DtVQv`+=FY9 zntY0Iz~-IYo4ePvL1C7~=Y81ay~TSQobXfHoW?rmna3Ye(8`?jX;XvGnV610nLB8A z`LOZf*;2?4E8!Bws7MoYFb($E_utaRp8mxq0IXiukg8 zZ2ZaZ1%X%3MHg5JWyiW4-W#)K^uy}&L$82+u(C+D4}Oa9Id3{t7$;!!VjRt4vwRj6 z@3_1|z_ts2-E^Ea%_KA-h@CxWP>*RRkN7D5Iqp!_ssbks!8WO$krC!J@f07@54i@79E`{q8-Vp z|KdL1V;j<&eZR-M(n!CbjiXo4UTXGFx{yXU=`rFvTE8~i$Btl74(K3Lm}8Rco3#-i zGT+}a3cc9x`-04!`d=cFHy*u|UHNg-zQ;~eE>xmFlslD2l)O?exy98;cK?8jgNXv+ul=l*o;J&_u5^mP3uZ;i4$wqRn&;cLTVv(mHJDgqz{A~SdO+xA@~{Tqx4wP zNwdgiIHH&Xj6d$r%*B)Njd(Wx;Uum|x@w*ezbea}?2Q)s9}-Rk=c9F{vba-k*;+|# zC(vKSIYJBctYsFqZ#CUZ?Y^_szVmcBjh@r%*#=A- zrUw|KmNJo({HRSEUoBzQF^x|;9%4|r`uV;=d=*orww`e)YgRgP+Lko@gO z0+bibeg$lMYik!@MI98q`9>$Ody4!mN>JfNnP$m;Y@OH6ywb?f|5dOC>*B_xSYJrd4_bE22>EX_ceSR)cMER`%|!HnlGTOHbpqO+U}f%6RZ;$@v4bzY6UvoIKo3 z-t+UatRkMDySV9@)4Pgx7Sr$t-&XgoicURd`L}dmdLwOqeb6fG{DCpeKY)*)lszvx zR5;1{sflffMIVdyA4^YSxAwK#7wZEN5I%G04cQ4k&LF@%N{?5AGq_$_rItlisr+lT zZJj!fapbXeNrQP<&UHXb!Ds16$}x+28P)g8PECIKy`t;a@L0$BGY+~uTzRmA9F%@0 zDl@@nny^sND*Lz$xX{5IWjuK$w8I-|8h6;r7Ei9)C!kd8;v0Q6BQ%pWF`5)jA&d5F z%Ehai81k)Vz1T!79FE3%^%1)=lf=w!OT|u1mWTo-Ulc1rf+9=c+DUE_#8=wx8!ye4 z_RiVmerEeFvoHOpjk>lW7(qm-1l#1t;1j%KQn%R;UT_C(1VglCmlFuW_YM%JiEG3o zLL@MfCw*N=Z}Or)Ig!*QmOM^HY2<}vUAZ&l4fb*8NT0ys%65@sj-07d$aembCz2aBOA82Fyw5`x=}1h{UN9X%sL0z zGi(C)n611p;7J7%g~;x9x82yPp4{V`ewyiA(o5l|IQts6zSQe`lZtoW zTYmOsb5&~)uuG-HC0E=Z49uv0*1ReSe$ey&k9;!V|?zYe;MSbOHWI#9ji6Y+e3+7jQPMl&Al zW6bc!>duW{Gv_21K3on7oxsoGL8=_8$mBDB12eWJC-s5mB^eiKY#$(&TC`XiBIT znlHCk4IJs`B`*>z)7h8Q0y@CAhbVh8(EF+Syd#;S9JP8|M26RUkQ5?CNk|SKo;oH+ zx`qEE3A0{FNLK7$SIUZgS+Ktd2W9bYd?H(nzfNAdgVQ}j6gAzk^FMoc4K4v>Zj zG91<<@APr?X)J>#RwZWb1M%Y(<{qPEzA;E2wIv5_>EoS|N|~#a1D;68~ju*^XjMt{b;dLNph_&FB2vY|q)n9p!32TP0?da0lA- zEFjEO|Eg+LsIO{-3LFn?z2~74KczxfRsQ%y9I2at=fO)oOl>w^?LNSNsXD~Fz;3tt z6@d(jJXw%O@#xzRMc#HkSUku7L82%8dww(NAaoJ>3ByQ6_!N8j-}mpG>Z7tu+biCX z-6c7oWLrpq9jX`NX;}TXQC5P5A%>cQWD8Cp;iR6hd zf|1{hJf$30j*d!cYs>BBP!6|61$GT_lc#Gvy5khyj&LL5@s&8z$1)3eYfg@3PGecL zmF-82Bp4!=SWaXRvyWf_rwH!AyX3osv#O40Od?0JC+SO$A!m?_$==i+$hAP8C(Fro z%qQ}qstwhHN)lAE+jjxAT(yHbOc7M$m9QG_D68s`EUPcO^e$O%@ug`LLC>et=&kf2 zS~gd(8X8s8ri?w)iRr@xFq0TC@g_5ym>lLWK`#h;FZ@_(_0x<~&Qk6YI3>zb{-=@S zQC}&G>hO#vtfMnK>(#sDA#7V4&l&7u7LDU(amU#6Y&rX!{lqrl&=^UMJ}nZ<#0A_c zZU={Cn?ni2pSG>b{lNKduFFRbDp{>OQYEXE#|jxLbU<}lwNU*?)k=-2o2su1$Qv9^ zvxqtB#*lA7-Uok@H^RsIy{?5YdsB4>If`9QP1DG)E*FLHQG5a~TW^o@u%zbEGyVf_ zCA1P;g@Hn#FhxLd!U}=iCg?L3RSM53q_@@fp!FZZ1vJ{M*{`_+(M1n6of!llLgXxd zo$cK}M2r&m2Yb6Givz=!fsqdNJ|wP!OihwTtQMUqNID?(kpd*NRjHJcB}~~=36Yo5 z0|~6dl4OU!Tp8|Efc3IDYl_%#7dcOh_t>-6Yw{z} z%JYXMhvW(56{nv+(m3rAR&Qyu_dkL1x%|7$#b?}U%?(0BR1=>}Nti@-tnzK2KJ1FK zt-?mUT;TJsxdO=Z3hsxt;%ue~2Gw6oXgu z$W*WwItg+HiTJRZOEE%aiqNl%rF$WBa}1=?klcQx(xBZMAkT|M!llu71+--03a3xP zDYA{Ghen|Z)_^8SBjLL{^PN%{xRW0k&7o8UsO{QkB zsSp>{xtVj-OQh>{x!~pC3>9qTKdf--BgsK!lKj4Hl5!+pwJDD5aR;goKAo6^uOX80 za|}A~h4G_^GW<%|&LN+0PbF%@5-2K|b8?I}=B5 zYB*&{%R7@(8>wu{q}i?{G4clWf?YpKWkOeTnH}lgv_CD&%$nb>n$3d2A?kR0g|Eu0 z<>nj57Hv9xg1$_5uf>y#c{p6Z9@Qf#N=~XUcKpX8WIro-iU*p~ z{rbnO#mkl9-=mlW2CZhYxuZ-*RQLU5pg8-$m@#Jqww!iU7AbvMrR$LzB}!1PR?gjX zu0T#9qvcPYLo6?=Y&}>%b}SpsHt4KyO_Q^F_}{~mgSxbt+|9*zisRtt^B@7KEw{ZB z+EnVsUDAYbQCtGIn%l*pqg)YJ#%)l^3Z8VzRn@?Hj-pT5t5DTUm;u+Q6!D^3Rjj(D zVr3~=yJWvK`jCmshGE~T#!UbA@4b3&=v}`}rFxTJD+akT@>Dm4ktaB3aTt&8DrfUM zgbn;vJm*7H)MWtpYxw?8mVyt_O{mqnI-pQtx-gz_Y5NvGBJe_~01^T@4b_r_V->EN zftu4@YBrUIv-jEyOT3ZE#Iv2_pDgr3o@T2UlV&=rZ5kVQ3y%|;zSNLzi12u$k-vre zaQ(N?syW1^t^bdj+g2?$9CgGG-4`nd4yAGFHRbW?sC$wV>g9aj$EV9t_i=uE2EflPVKKQW2MaS{Z{VPk|`e0EiI@;hwtkK8=^zoZVgz1 znal}sG)vuS|5tV!Z+tjD0iS~*lealix5)2m7Ej0T(D^vp)u!th4c>?}CAQ4+9deFG z*NH%4*9@mI3kYj=2Qf1M1qc@GW1{P_jRLQf_ZV*V8A4c+B~ge=ubpJc5i) zhQcY^*%uqfZ9xOKbXs|PNQ@cbv9r{x+J-{yJiV&BQ1R-K6hp;Q%PEvW9iUEA*Qh^e zk;3SvG;*OID~Hqeylj+pW#Pjgg zs`}Jqa%!z-Dt%@xGgnsazjuzWy0!N*yGZph0(#ynqX@+XXX=Z7bYU(8p>~WBp+|j(!eAP4(5h1#Z-i+)jCc0Sf`^mvDI& z`HD9p2*RDP9ZZB0(}}bub6H}{0rqq!RPW2nmiB_B4-Ou=ra{6U>KJvNLfbE$PS)=Rn%D0J&^O`|*jEP1L;GHVS@w+E9 zXsvRO@|bdE-R-n{O0BZztKO%RA;@i+2b$`^HsR1&O*FfNJ<5X)iIubRAty;r%eO|{ zE$XAwZ1q|B=CxdKhD&#-sYds?j<_7k&bC+SjWgh^PgM0)XR7j47ge`aoPfTlF5~Ug zZt7AzL@j$cU#8)^)bqWPm-gC!>lF@?OBZ=c)T+OMV7^yPwSG^a57I#^dHGv?ju&`& zOJFV_{hnZ?zzA~Yp9~PB3rDDH!Xs7?g<7hq#zlj?H3R4gnmL+1RJvxLMx@ad%{`4) zbAGm+c{8!2IA`3cn(AR9kqFbm7)6vR^3DlfD9Snbj)=U7OqKtNwW6goS~*QQK!R_r z!2BKwsgX?LZ5O6Q*43p&bf0gJN3iHiz>xVPS)9RR@v)Tbdbd4|FC?r8vC+ZE5C^Vh zJJff@`aY>ok^I57 z_#YW7Zy2P2^GUuf2f zN-Bvqqtg!RGuR+Gh0SaAI=V5ROJ}PqX!L^qOVyBR%aF{!$4A7|Ol1T!^B*#HIWzwG zPiISu{8|FgfBBvsGDnNO@Lya8t^{M-j3!&93CssOTZ{KC`f)M3{BbKY!O% zC%|m8kSPshQMx9MUBPZ+|6~iAx-0{4W| zz30p!+_B4+lMuDA62cbxZ2PBbFQhg72Tf8bRsJqa={l84m8-g-LKXUuZ*^NWsrF&j zqt$4ddZGFcbpd}weGuRF%K0REuKuJxjL-YjiEmE?@Woox$U%<$>PJ|#74RFphDX)B ze*M=!EU`ik4anTlg(*$?r*Vy^OM~1%Uo9GuT{I*qd^Va!LMe&4hXR!l0Vbd_;hFG3 zu+p^B$e-ZAhZwu4ecbeiF7q?olQdVTPTi2p{8JivzmbZ|`weID(^GN2IR3wS^@nL# zog5aPIb=I`Ox(z!axsSfB=+-(aBA+nJYDKi+0W;D7jn3d)Oxf*lDGIAB`0TUtGG(5 ze6cqnsx4B&o(%VMk|4Qut7X%Aw&>7mwEW4XPSlG$ohMAhoJ_uiys1gF|60=~&(0FJ zYKeEl2Utj_B1hrj_&gj%GF$MaZ3@N|;ctm&c!wpZbjTz15t!V%B(&q@ym0lqul4L1 zA`fPTVXO&>nvwR(-lS~TTe&>1S0Y)mo@~55!<|j~$MambVW?tk_IX;dVN{7DjVgTh z7cqOneZJ^?Q0T~mMIi@^f}c6gd`Wf&!5mfRp0Rw}l8~Y6l+7>0r}y5*_tU*+^ma)_ zjMu0>w(9Mxug1S{8t*<|bt+9&pQ;j#>D#wW!z;1dG7CrbS-qE`4z3t(y~KOkV5^dp z>1^rZa1EMw=Xusiss*2|k<%a8(n<1;M~)C~&Lq<7X^=x(fLFZ5>f^Mw5DTxMAwcQ4 zi(tq6%}ZjSozy|r;41Px|xIz9T#DT1nf8929}(JR^sy$EndQwLa_TaW$mi z>z|j7UaQTU<)vHln~84x0G{TNA^X8}LH;pdZR9wa>8^o-K1e-j0LcpJ!akvzxFX!U z@q~bco{d-T4cyjawsTSgjlB8EOP5nQ&3LqwMdI@suQi(88ns4_VyM!fj~Z*SwfLE! z#Hg;5#Ud#jgm*8uxysHQX8F@o@Py!dTxU_6%kS|1P_6H404zX`!h}@55I`t#$V!Ja2ui>VdX{) zB0^dx-piU!JddrMkCqe7xP)1s=bt6yt!EZpWJ=nToyaP30r}*AYc6qe_Qp7J1^M3! zN3@qb&RtsWqpeA>a`$IQ4bQLFQlnI^(z1t9crmX5C|B!+K3EBMZ446uw-^pY7)} z(YAh@N_=xlf(PZInR>P8@Z^lEcaIgiXQ$p*H+t^m;rR4DIg*z7wD}8#Ht-Wmh_rkp8R&C2#%(R;s6h$EG zVJY2f>#YNS5d+q(+d4L7m+GjhXnXKxE;KLoC>P{#dB|36bAk&inU4Z@EXD|%J$H{Z7A$;|Z5a}#~(k@g>0s*%mN?hQt*K=;m1i`?G z-T{2N4ciqpUF>0(yQ+z)9Msh+uR~1t(=DDfzd>M?#JhIraxagJ(dm=b9nIcT=8Ewh zed)1zDF>D(v@D&u;oE4PH-;Lu$_vMWlAGn#?&`V9Z~Erxlg><7@?yW2#ZA8FJk3-7 z38hfg4A(dcy{HQ3(nl^l{#uRB+M*3E6sLTO8TZ#Gsink z7{IRWZ};W!=>`s$n}>txYP?fSa%$V$TSC&-*S3C;8}YVtmUC8OvYqvx>Q#juLN1V| z^r+l<#ahgy!#>n?U#Ik`_@5Tx8t+W|{COSz5YbLC(m#@)Z|>A0i7yZa9^b&~!}x}! zv}<^)ZSJYSmLYj5_7wxppHQ#D8{TS8X6vYVSLXVsrY7H~9V7h*T*8>9WB%>yFm*#g zQ1iCAc8A`d>eKMnyy82dj%4=PA$LOKnL7!~dPs_osKvBkDNt&(;~ho%2XMJ3Wx zDVMXrTi`P`UGSFvE_AihvXo*db=~5Bw>{s=8I!+9HqK}_WzYkr4khC2ae3SFV_GmR zJ%-tbFMA*NrhSV9oVeBa<(jq4o65ZBljPLg za%OHF^G0xlrKwMiqY{-z=G3cYre20G#hifRHS^a^*}`Ve|5KScHR)XL|CC*}KUBV* zo_T6-?3#yG2`{JpJtg-|%vb7@Rzokac>D54Zm{RizLYkteeigYc%;JWfo2|i=7ej= zm2cJb>2tX+kFXWnHGi|S4sO1qt(B9dwpA!v*x>Tl*21>W+eXivVvf%FS3?Dry~5oG zo0;_?C>=X|eE73(p8`FX=7rm{Cy!5=B6T%eyu4|~%6a={Of<_r zzcKbO6@=GKwYYVQg33x;uidG7N_iGlc7c4W;9V+zA$2eIJaIDOr<~^XJl>|tDTd>F zT{?8Gqz=1PVbz*?uCcGu@hFq8wepR(YUlW&eOtR@i3AFa-{cqhCd$G7)dgbzv@I-w zB3gGQj-9y~kry#q2>Raw0Tut*?2_-il@a@=1$#PHEa@WE*BXFQ19J+On!KaDG?HXm zTGjZ^yGgStekD6 z=zjxx%BcXDkKxg8*~Q`0(C{HeQIPEzr3HcT6!kp1I%W!5)ZJ}bH@CS*2e=`(_-<~~ z+}#3ukUe3Uup(yWzBr0E3*t}o&p6S$;(gjXN&4soDdQUqde5(kT|Yz>SCpD=;S+8D z(Q6>Rz41VF4sA?ACRX8_GNKhNBX33=q%;iz<9*{dTP3jZVM!mytm_Cyk*Q`rg|1(?+R-RF^;v^+X zOc>3kyYGu_&s2Mj8=c;3T!MY{f8wD{vKY9ruAf3-rGu4oLtXCN25FJ^PE9*48}%pE z!kOhXqk5&^1xXhAq0dr7ye&@J)T=Wg01kb|lV|LUX-Nzv2N2df(-&Z;rxTXs8e-Sd z9WlpN9I|(}?o*fBvUiMo zsM~xu?`XHEg>KVYDcp8YJs1U3LZKzksI|Nq#EJ|x3CihCKjKH9Yng%K{08%(yyJDX z&-xtM)03p3tNnKzuo@dM_2%e?rO60VCyhPH7VlzS3PnsA^Nc|s7%OEfrK@tFvQ7zt zbR~k^RLUS#p>ma`Qu$7~NmJCE?acONhiWFXG3-!hT=t=^Vt25ISrCLz{BW}P5i7D7 z*OYVNyg4+So50QCST3F0$K`WZI0PAuxo;evs66g=LoR;=~uD34TR=-q}U1ClaH{jdwJ@O(@Z!aFnHu%~6GJXRuOXM!| zs0rmv)$#I7+Eefq#t4q}$>fARLg9s!0%84FRPBC8=s8qN4sMep;w@+9x08LtvInp<9=iLf{|T3V=zsK; zC1m}N2@d)nIcbdS+5D;hL4UG;UK0G_ z#(s8W2Xf~2YIiF?axB>+Z|bF(d1MeZl|sK~a~q`&SEJt4Db-b#oXkzOub-sQ-_(8T zQ%@qMh8pDOn%e}N!hHQ2k)BO2qc_ldY268W9>d|%~GXZbSb`?IhgOIE87VN-5;U3??ID5l?CbCGQEkOh@LwO6P<-yz$Q?Z)c0 zS7<)l>rzO`2KIm43HFS3#%1(~UCLox(aUxm>&8Lc0;JU9T%^_9aOo(g5zDw|;2zXi zsamOARqafN=gXermpRt1xk=l-*6oCKD32J3Dxe>skU#IC!5+u_s!+f^G@J&>>5xb0 zJ{DSwkXj|jb;#!R(L`%?_d^J(6sq^v>*eK?lSkE#vRn8s*PeGo!+e+Pd z%yx5ymCu~qO{FLY2W@h}?R+!4h552TA@E0{O8cn5o*xzwXboh4SxfC6AY8JtQ;Ny2 zE6<$1$~Sw^&S_IMI4~s05n-!PEFCDRgct9f6pEEni;?fvE`3TVsxR#_yZWNb;HNAV z)S2q;8}ilZ^X}sHCBeg|m~JbbTWVdGx4Zc6w}cHf`UK)4s2MkILEA?-K2kKIF`F(g z%VL}pUY1wb<_wjWkENBce4Ow^H3)-5eWNy4Y;0W7Ek{$A*J|{TO{G}ptz{j8>+*K( zd+E2K#&IxK*2%BqaK{lH6#=2_V83~~*OYnoty6Sl)nJD;HJOea5`jWw?5{dx2@wzP1Lt)pKT zzr60-N+b6@)0QqOwXF+b&*?(dkM?}&d^}=PwX{J_qTl~9B`J>8OaER^rxam3A{UkG zcqU#kIlk32_t?7p0r979Mzosd7`xyo`$xg;-2W+1zg*P`bk_Y#mpid{VmFE<1y*(y zc0JqYT5sz3kT*q4#V3|W8`(C(*cFaLqPgH3j-%!aNohABhn6sD_Pdp5^3yH^ooCXL znyJd0pzWjLcm+E|PPJfCUA?M~%}=|Yq}cJlzmhGB!z-&-bxclHl~!(1p{{9R+?TF) zn3bKJjjn~VeciB-*SUN115;WCXDi+{W6W>oofx?a4>g^^E--mq} z>FwOizuo3aZk}OQA=BMbL^sT>y?G^MR*+D8G{Wty+lB9^Geh0hx~*|D!Q8eudFB?C zR@iwK25*84iz8untXmSCp*MkkV~b=P=uqyVY8F>`_LNA}XD-^vWplMB(H4O%E2XlqNDK>j;zPKJdzL;;K@w;&Fv1eIhg<@o2Y+na!1tHX&(A3YBkBdr+)@w2~ zc@MsnDrzmB5fI~HEB2$nJM^+X#zVHCU!r95uUfRcgRY66B~k3F?RdF`bV}+kA;rs| zS(n)?DM!2{p?}0z5+gRkt<+JPcFIs3O~?1Vx6GGwzq?rbmY%h)d+W^C!a@|}`|4@S3272%(mcLsNBfZ0ZdmuKjZ`Ia`i8 zV6PRv3An~duFohn4;!Sa`BqyeBE}_nnk{KaQmUhu8(q_p?iB3sZrH9hn z@4f6T@s@a2G&=9z4?Tdg22pFM4O3o0=oU+=R-}+9np{GzBb8h(IkI#{MBB)ufu-N0N0xqz?(xSL zQe3{wAnF7IYgG|sh2i$3V)q76H0AMlbL;|YyvAczjc;jFmkxr*Z^pze0aGKKOg?Ys zJ(q{x^lXD7?o(FvCbl6`LAGpQX8mZ0hlr+AC!XB0iLPY|==Nt($%;z)1Vl)8J{8JL zXBIJN4YQkB#}_lXd=)d4w}za}%4TXgPs>#0iVL~%%atV=%0~A##}-7ly9jxumnM8T zRv$245pLh-!!gf)!)NNHORHNYXUx94q|t%3YV~a=7mxF0?E9#N(-)Y`yfk?M8oB7R zMtQ$y{_}`&v2tR$hfP>#uuhEW1I7vS*yPH>k&EU(l~+DzJ>k88f~)_6j%F(McvB^^0;U-@yj*xv5IyMP ztl@WUN1%A-uC32OTOTxXnS%92G=x%*N>qf>DGJ|Z{(gUl`yI4J!5VjQuqX=`Oc)R@ z+(X%3Rhm#nHr&Y-T!KW$sbah+X9RfaWu5<)OMybbpt?Zy6}aI)$ZoWS>Fa8-nuSWN zQ1~^piB{KCt81>+IY6U@R@YLi>!Q^`;nh&6wCbwWb=T^8K!eok+_XA(t*$3DJnGBo z_R{LSpy3TAWTE1&R@WCA{h*|k5Nm^a9R+j>eO8f&z=wOZXet!_OuIIV7jR+p~TZG^@qt!}ecmjR`4p{vlXTHQ9S zZo5{u0~$NEx?Nh`Zmn()G*nt$rdF4w)$N7GJ}8H-)#Ye)`=N0_t2?OG9n$LlgvMW5 z-C?cn2o%tThFYsTrq$(Yb$QS@uGO8;>hiU^lh7#8>P~5Or?t8>&^W8r6>4?o;QarC z7O&M6X?4X~-FawSfCAH6-6gH=GBmDeb$@Gh|7dkrp>a*CyROyU(CThNL(u9*Rb#?L9WG}3}L!IO@91FXG(84e65tJ%Vgreqx`k$?5yf9Y_8>rX*=%1}` zys$nN0)sK%N2u6|#REHNrF)b75~F1a-uJKox(=Q|&ke-0F|An-%2*yGH>F^8L49LQp zFx5hh^B*1ASO#Oqj1Ef$qzn)Prw)*Y0zw^s9TjI4jJX41IQ<(y!T>Q`Yov8B21;l& z@Yhif0l5bv$KS3#q(Ly&w4~tMKy0>|$@r3jS%WdmVQc#dnByilGuy4}CtytqLMC8y zG4>vG^Yb4ZW;yv^`5*aqNA?|zJ-UsM4g9}fJyO^)0DA=p6hHrglmqe^5PLv|)^pwf z(iq-=7QYa)P61d)Knxt`CjMAIKwRLa{Wxp{K;Zy6|3c#6^r?U}07QTKHqg;}Kn$n9 zm=uid0i@-xqdb9A07&CsM~wjF5+KcgaUubE0Eh#E^Xo?)2d94rkmD~>B9NNg{k@}S za56_gpyJ_=qs)?nvA%#9PM->c9u0`$o;d@D0i?~ZqkI8b0ti%yXMc1Q3D7n@^aI%i z1Ih=)Frdvapb9_?SAQ6gDkJ0~AhkwFD)ej)PuXz#Y(SgKF6(GYH zBcY?sfDper+6A2BMx0dOTrlFC0M1h*PBw7f8F8)y$L_(ebII@jMIbo=WH{L~ASnza z;5-9Ppb@7II7%aq*>cE-YQ$;QB>>xF#Bm1B(cd_5epevf0I0>UYkdRHwF(f!bM*y| z^}}DI2Bt4`)DjTGpeF*SHz0;v-K?oUHWCnd?)>p91CH`{4vYE&Db*SA-fXGv~en4y?bQBDbVbmv}qv?Pc zMqLh^Ka4mJfwRYm^9DFYMjW$d{#b<($E<4r_R)yr$^yye@$V;V1Ed~+7zPvqoWVvM zPvA^5;v@oRu@PqkaCRASvVoIp#EI<624J_0NY{b%(ukA@9W~JWKA;-l5P%r&&}QKH z7;)Oz`(tB_IER6gV8rpY_h+$nMx={CQX7$GLq`{lI1hpI+=#OoIA4u8HNa_G`TL*? zfzuNZ!=P=t1z>E55$PF_qK!z-Kw4wOv1#s)Wg2n%1LwRE#}hbrj5r~{`E10Q2%N_3 zlix=)8%S<|7@mD9ko=4|slb_T#5oL{L?g~F;OsHtlmq9u5$6PODxR>vpR5i@uZ>98 zfn@XacaF1zKjs98;Wj=4&R`?X2;hVnaq57x*oYGc9PTN6{|p^9a}B_9jYzwIblIq* z&G4Ik35a2CaD}7LzrPRhA{=E8h@s~|pL^&B|Aej;=Ql4wLS>keP4s^13`0-TP37zWe^IKu!j zJdQ-*gahLIYtWv+Nj2&x8#vqb{rp`2i~!PEBhqysmFP)7h8PK)cSf8V;8;HYeL#u8 z=>mx1F1Bgqj}0{9^oOrNI3V&6f2@BJi^8x}fDG4h0!X`lko0$`1~^4VoXv2uyMP!@ z<_jnL4-ms0It(2A#qT}O22LkH>hF+#{gc?)9}D;i=@;7P!!V`MVHcsJl}5;B=tyOB z)I;E00K_n$Lg3s5#4w;5;C%VTsbBv*0}}r7chcdm{+K%;hNn0Y1{4a2;SSmK2*Bn5 zVmO&iYkw@os2^wGWE*ijfpglxk>CIRKzd+Ang}GFfdrfo;52#l`^i#)(+Lp6mCXju za3juP;7m5+tabIrk^uR6VQ_xen_*ZsKn{jCwp|o<7LXplkkmfou~&c)zmQ0)@tD=? z-&eX9$B)H20^<3L)9hLpHXabeJuCP0$L0a@^Yk$PrNXGU0A#q0sS)P{aLly7FVP}liPj7d!=TF_g<&3m7zV^X>jJMHK)*(We1W7iB9+72u+oSV z2b{l*I5xn!V8po&19}07;liBT_+xc|7%t42eHezdd-MB9P($B0b~Z(;Zy&+cU`W)ZW|$< zfZR7i`UCRV2=N8vsSz>)kmp872q3SGkcogWZ;hZxfZiD)vjO>Fgv0^z#Ry3R2|#WdA%%dH86g(|xow182jspHQofvp=Vb&v z1kzI@tY{yA&keO0d5TN!0sl_!4t5BTc5^Z zY1TDo!?2d{H-TGY;<4=(HLJt0MV4Ff1z4uFFW6`wTY)B0{;P}zelR;UI}(Ozt+tL` zh=s5RO^%;x<#z;Wz83B{Zd%-YHsdFKU{Dr(o0_KMXAG zV0<5hG8|sieAVh4U%j)jC*t1gS~QiwxV?b>_~F0s%{XcWo`7ijD>nGOu5SZ`$_@{L z%$=yMR_8p<_Omz=Auy>2Bjgkp3EMNmqJR0T~?>_`FvRtyLzf{@Vc8c|Tsu}n}R9$Ul_yGBs# z8W9yeDzRWYmWbVBiM>TlKoJWvcMU<*@B9CIpPMJn?0MJPYqzym*%MSOc2?9oEepWd z1s%JS2Yfq}DyCrj855W+^j+-GKxVP$v3nqdUM?*A%6@^ByVbEgu>CfJTd)*$pY0pU zVjKrE$pWDZX^L)v5#%zSQ-NZo1ymp(N4F(SewJ*ROePkKNuKjgvdG7g9PEL!wOZ{D zXiK`+&qpUR(RCU7+_`fe9v&o@?+nb=Kd4S_+t_Ng+Rx9AtOkk)znP+ScOn_?%Pa_j zfEHYqxBG>%&0@@$F(9hB5t6s9V{~*hbPzsJ-N{XSHkrY9A@q7h1*ZwERkCK1)zEJGdvxiEhB8%J|y{1o}o;W-nF#n)FKbU^rZS7mP zcHxog5HGTY$j!0t{VSls6}~-s1^1Iq|Iy}&E*y6=-psRhMM20ADe&`n?j1XJB(r#q zd@nCAfuIv$0bN6m?BCnWd*|v!bED*BkuNmmsZh?IJki{s zlamvPdph$$Ie6~w=GGP|=QguL`M1^_++*d70)zWOr+)nkgZmAey6oo&t=&QVuMFn$ zsQFt#n!UX}t)G0IPUq<806@B84v35Z3>K@I3kt3t-mX3Z66?aZfGHxY!rkzIfPk6PvzxzUZh{xtF#&gO zM$Cn%K?D4|g|gXfa(8=Yvc8M8Gi)snpMd1V;mw?GuCCB3$xY!mny{*H9}Cc0lHJpn zj0(p|VT3hq)_YKQcdzzLCX-Zja3+PFtevf_tejljLF>#6a0PALxmisX^fe0$4DqoG z6bj8>8ylO@;S*>*!2F%bJ$*RNAgh^bEV}DOm0eaar~9HUwB^|4&F!^ z~liJVi+{g;7VReawg|@#7Vb~)@1AM zILAzxIChjUcmVk&01RG7jx*n{Q-1Coa}BsQ7f3}{K8cO=v1|L|)2dag-)D)_qD6}z z#I_`Vq%XN_q%#M0BkVT7aa-G8X2a7OM8i73m9*~Z)wF`_#<{8v_a$W!&NN52u0g=m zyiC7o6p%qTerOcApf8847kPp5*x`T!HB{6`DCk7<{Lq=uptk>Cdw|od-O01okpp03 z>=ttDhD}v9q{E@u*u8AaJH+Po4dOQ*`agC=H2Yv z*_nJ5_>;xn-oe}3w~+<5>i=q!$Y>wBjLGb3Phr^+XSy97&2dpPoly94>XtMmWTrN;1p-QhoELa%IE+BP@QEE5`{{aB;I zOzzVDSD7)*+`#1T?+@4iEtmik3)E)*>FRTCzQX3m=ElgY5=S2RkPC$7kBK zY35=`NC@~K=tW~k%y)_+6(dvgK2L{J#WH5*-ycR=T6|3FUY8FDRCfZb*9W;kr z5`zC%%jd+nquKI_;>M1gxz;>&Wo2cgLEOQ)dAR0{@N>8wLw!k3sCl@#p*|M$l(h@< zC96W6$s(ZHhB=dufNq}K|F>tbqaC4nSmrfo_78y}F5H31{vF!?syJk6FGteGA8+(A z;3ceq_`4=qH)|59?Ax(XUqMo0yaC~{|ZpZCfC-yEnqs>P1-dg*o&-lpFe8p+`(Ve$SpmQ0C=^Hc zj!rjEKQv`7kRJW`bRqTqT*&?XXxGIhd-Qi~0k#6Zu6*BA8M)8bmCWw%OosP2yRsww z?Z|okh2*#Xo}?XY=j{U=$%p~YdLP-r zK7ug-V*Ub^+zqocYlxk7W6;vbtV(hu#RKgcSBs8y%)*)^g$!y83LTpTm<#5-q|ty( z?u~O`qct;-swCe=Sy_YHL&tqd>o^X1c@W3hJXpAn{9~ngW+B+7&096JadnVOlhJBR zN(bY(kFY2G4eSk(@h<@+Er|20pdU7jd^DItZW;Wm>7ornhk#C#8$ZyXx!}s+gScxO)A?ZL4>Co0??C8;;NM; zKR$H&@?TqFFvNe~qFu-<(dJ+eb|pDH1}7iJ_>z~~Tazne@Sg!=KiPD0M|&6YQj9aX zKIVtl@v$@ScDO=c2d2;ZRY@ie<#5bo@Y-QC^#5Ba(=AY z7zrcjn3)2@;zBCIotO9IK-f%k&`d==9sdWbaAptr^0WT$vv*sG8p#rcx1@y_JiICCG(5im|>!y1>uT7UM% zNfPKEpxmJ|PTq`nBvaxAjZyONA+Y0**q8Hbno4dP-hrGbwB`tU_k;Yp$?W+I??|p2 z?o5s!?)(2rH95cef~E|C-8Ae8FfxynA4cRq?e%}h4fN>MBdqb}Ob-eWR*~ASw6Eqs zqG@d=fnu2pkSGdzMKtesk3h4J1?O~41L1+Iv)pK0g_<^pQ3n?iny#^*V)^AGu{=>1u zsQ#Bo1t+aiIM#y(4H5_hvaV*LHf@SCxgiCD6R9(KKc$1k znl)?4ANm^<=13Mv&H7sguK1DEy-|P9NX;&p_MpKsXFGF8;R@}TQ+RTe%$*FA*^xuw zJ`$4c<1%MbCu5VO%%yP)(N%3ztx5Y-M{;Yb3ppSax{=Buy`j7y6(XYMx!Y!N`t*wJJmPsei0krf^ApJ{Y&x22Z z{IZGLUbY2-@2uh;lU&SSlpdvtv`)$9gka2juAA z#yLR!45nGr>TuQ}IVyw&_!7HK4ssEjnnhz zA--i_<`A59JQN1dqj7rZc8~REvueYjUDc0v17HAoeW6{LpaanEM>+Zm?N-+W{fVXQ{q7zHCS6F%MtLgC2)4sVabK#GCDg=S$O0c*t=S#vVpVeuyzdjk;M&0`PV z41}apG4?b*YKVDGpu%n#IjKDr)59GyC_gSsD1pNPbK6Y1Q>xR$ z96r`VjrBmFn*dR9bd4{kBOFH3onpaTk*3+5br=XkD`Om1P)86eg(iR~7;_#is=PA7 zVb&3-ar$SC^>hu}Gs)b_5twTXLXPI9gN`6_&Y6A=;q>w?2E3_(N}B!dnIwm2RMiOV zIS`!96|(6D`kx)?z@)B?z~aG_G!Zgr!eJnI(S$QU3E?!s?_4KlSR%$C6VG`>_f5nS zK_5Vkz!Zt$dJK@GfWYK7ApzlumqH3jl%nY~tZWBx3Jr9x~;e6Decb5wxsX zfDVTRk8I|93&;~de%2frnTW-K=%2_XKn?=(vrobO5;1pR=-(`7Hz0EX`N`wjKM{NR z6Cr?gF+f9L1%HaJ2jmzaKdVg`kcc_L()>j312PSepTiwIFcG`{8_zL7M6eJ)c>)F{ zV(S6>o?>XAcucL;$XJV{6y#_sRZcSPY948m~Q=V$QD4}{)RZfbbt8`$peHv?6>&= z#QrxV1Loi37X+5%20$Hufe;FZCF%7Wa$s;-k4sls;%8u|`zL@K3u$&^$KK(r`6JL# zl+k3T!!_L)tT)N1Un)C8+l$ExOl)#vH)i2w{jd3RA}S>~D>enB3~iR;V8mG^Qjl`F zNy=NQfxxE75K0P3Wq<6+WL>5mE$wO7;?*@?bMUgm534z{Ez#hwPLBf}`{A$Rs&N)) z0{D$ZO_HR+)i$hEjc%2A3xX^sLVwg z7#Mt`8;R?0&mt=1Xb;^;bxj^M(4G|lEC2Sp#cCF3uszFp-Z`+Ts~B3mrg}vb2c5sHUEcH zCT_>N*cdpecXwm5J|)vJ&u8;e434p9eP$=4zN~0Wi_wx-f#kIENw(N#cGQYEoOQVk zB37DL8fGrsAqGp|05dnfN%{m^2+OWCN?+g2m&y9lD4iA#q0fO>d)BvPbe#eHUQZGY zVp_Pgyxs}hVmZVUi^o~g&7erJX7O_jCWlWrYyTDodfy~{ahi>m)v*NLu%@yDB+&U~ zO#vGSe->}gS}sRdFzC8DV)G$;zkOU@>w)ERiOON1TE<-n#r{w&ui|JdY|lq81hRWF z!f!-lweyluW-7a~E0cBPRb#(VzYo>J>+In8fkgX!R_eix zXh-8}yHd&atnY^rT2`?vbhQIzYmcxjjSpiiaC~xV=xxTLn9W?Q7zpH*fAK7BP$nm_?ech5{|`+%lAn!lU4uV zkvOa34GdyXvmS)6iovYk!XP#^NtZHjMq@jYQ9>%4y40D;!rq~#n4S}xh*_|6(GW{g za&39}pJTCj>;A6EIP1~J-$XJWN-+OVAachKk$EQ_SvMNp4>b!!y43v;SuaV%+(2YH zEpj87tPd)GH5Ci8>01wCaU2oRKX!w3Ry3O>bwL&8tj}N?Y_ehL-7u^%H|q>WYDv>f zL-rUx#-62GC7pwL5?)b>n4KGJqQwSNEV^JY1y32Cif!~qPoQ&rhUnuS25Y`&0IMBF zW$b0JR{0}TyCjwky?x#p(xqjw>~IZ(g@@jTY%7+1AQufE07aF6Au^aIgi(oD*I0y1 zm=vLC6b=hoff#40lFOOw2OBt-p=}>=PEIa!hI{6nA zwXy7HFvVp3YUo4Ueg>=ey04F{D?M$m6eCnHCzc&l#$d^IwQe(eOF!E#6$qV+Wm66Z z7_8f8z(XvJW#^5zeRt`R^~X=+ZMR+T)h6R0w80ajt(lfZwt}=bt=nkV4^6~kKDKVN zSP#>!XlUIg{7_^!TWf3$^G$VKwZ&^}r@_QBnAirBwZUWq4=o@SHkeu(Os(JnH<)Y< zCP;1Uh8j%vqoLqvFtxU4vYZX3HcX}iybe_R@bO8L2Z|?JcH4o!3Y1RgePVqxu*P!w{T*e-Y*7f&s z)};-Y7EK281NmbH1=(eA`8r32J;N!OdW^Hy6k+I!Sq3BSbet9&U4F)i!D9H%qMqWc z)0;7LqKO(#Q|FbKn?SE?dZPr!u76imw_$h^xiG6rg9&^&IEkh3u+CswZ!p0QEP{t( zgK4wDw8dcB3J=>2rd@DyU@+~42aUnB&tQV^=5Kg_jc~$Xsx+9+!NYlj2~_(ZgXuCn zTrrrg8cbCN(=~XwZZO?2m~IfJm7(EH2D}!zD83Ac<5#{^)Z^@BtiraVxuYCXzFh?4S01Y*sorS%ZZuJ_?2R8wxRzu?sA&B7rg|F5J?rVT zg?bLL0nB$^(*gw13y{9*t_$O(qbpSyj%l}HsMws5e!LxrrIy1nR1M~oM}dAF-HxF> zO%)H&6~~l6bZ6iU(45yet8yoX{xMT6KqI6}cQl66S5nSCD7}iNWe=jYa(>@C*m5Kh>eF1LTcAk zYcU{Gpi@72>H%2|-GbDPMoFIw<5$VrF+41fK__$&NkPiir!li)LW}qJV85hn*?_$M z4S5F0r{9qE&?}3*zt)O_7Hxk+Dgkl(4GDt$y+bpC^80!+%KLg+oZO5}T{Xm$;cj(} zHWvA8&sBSj3<+a0zN*2<2qOk7F;3y)Zua-w~4z>>4YsWmm zJIlMnd*c?@!gi`f%lFkd7ekYxeB#?i`Lv1hnHc5MJIW`*J<7*5%BM3H?U@zjvm&1x z?a7bw86D-b%yR6)D4*6*KI5Z&?gO zBt%kU`dTfNjFn`>ONv)<&NCg}RA+RF&v&?*B`TGij#RjqL>QZ^!#KziIkn)T6WLb4 zvW(aTCu%H~Jrx<{Lte<}eBryO&G1LYx^Lg-BpW*<92wck6Fmt|Xx%ntYJ6JEbJ;Kp z#~ISSYg`e7>dainaV~J))weUdJlQ0=kX(^4z0E32XYmrV_#9@*#gds%_zY%F3tL%Y zVC3r>Rzv+z+>V{b;-q=9a&X($W8YNE35!fHM$7q+n3dLyQTqDrPd}#>@9O)##ZYS~9ZE%0(17fFsc)(?tsI8&7u1G@Jz-4F85s~djQ^(E3Au)HAtHT>jpOT6 z{rIi!GWp&Ck1W_ya5BB_w=(W*Vh(Vax(&p@{1$N@>*~! z7Gd$IEDwhQPB@n3MYHI&2ZmLvy?%h41jXDm(xIWV8xysDhk`s;c{nk!V$oC@xCbnALFxkN%Du`|=wnunImuneRIFzzrk~`NZel9F#OyrD-ON;MS$T)Z z<~~qHKU79bbGexYW%OI9mc`9wDgrvD_Ri&sl+j{kbZpjm?n|cP)s}2-A7yl#5M}g* z$K1V4MQW-#%ahAjMo&sD%i{KmQKzmf&%zcfqn9Y7wOQQ26HG;6>gg=*pD@PMvrn_Q zl}v>uwWgYTZYNW5{#7=2UMTU;TNwOhrs9f{$*p24uATjy&GiwbDx;|^?)5~b;s(m& z>Xp%tl+i2Yx!eKJmJ*hX+w~q(ao;MBt7Iwyv(7H#a`TyrkgQTJcdIi~F(~UAm%E** zNXYuYP3KlH6`5HMeC|W0V)2x$u6%9>Wi*jBozD$?428v6=lR^p%IGy&XTR~e%(J1& zXq!Op3uk3?S(bkw_oXuWMAqQIbnZ%J^yRFHf!y0n#fWFh=zh7}=gMd`^h%P;eW#3m zuZ&KI8LU@Ee^*A2&gD|dm=n%fhqv=pD!WU$MTHo`;^eu4f->@wazTusU_lIftcs#` z5cxfo%F=hrgp!fU(!WkJP@F;;ch`d&i~>f-N^B5iMJ+1)bDCd{r8Q;qcuH}oprD{? zw*nQHt}Rh01qFh_p~_>SE0iDK#we5plbJQsjy|9!m2<`7-NSZKH^&`x7mJ-1QD@Rh z6Y53cvR#RLf|mL8Dtz0wu=QB+bnl_WTzvRY3yb2=zq6OKWRNoE923h@{;GT=Vl_-! z&d6T5ggIw9Ge;v{utr&$hhi6G#?+zqe+^THPFbP!4{SL5*zH`F>$$A;)uJ!z7F*|) zi6CT)<$#OAC>JegjmrzaU z(@;q&!ve(@mlhvXD4)W!;x7+P=&{hRxwk@LUfM4>7RtD?YGLdGB4#QxZ$AYMVT%eD zd@c!IX|2tV@T`a^MBMVP%FlbH+J8zuYeIIyq3*HJ;?T84`ns5;DRX%6;mMlx%t*E%5P(Gp><0PZ#Z!7OD6P6T*W)0eB3cam*tzv34^CQ=^ zUm!`HtsS{+mln<1G;^V%YM65I&EWN$^#}DxQME#O{a)NM;@!hq{U3MoBT(D-5i5g? zk#CoAHKBb}i}KJ4Wr}LDYOZR9>Ur#LRYe~DeZk4Ni>iM55qeBrZ?B%ha8sRoT0KMa zQ6%0PRA|?ya3_i^Ecy_)Z0Cn$wS2iIbcPx&+;I2PX7xe!IrUw&LCw}6T*KFN(L`v5 zYsPA3YL*Zhq}GhqpVr*eywsFvTWE*7prTKcc#+488b)iA-79(PwP-Z>l1M1OKG8 z(zVqE=ujuY0l`p#PB&jyENCS;`ba8)lIwHz&)weW z7aGwy{SkL7Nn1%P<5EXIV}b+?HqMf4|4girEHV1nZ808tCVSBJjPbVdwecIAl|HTc z>QFa;oP17rRe0J`xLeqn+ABIC8bkd_RV?A!D8q`PdoJ5+6IAHYr|>{zVMA=(GRt&y zijpr6@P14!UDIup72Xy{0eA==jgQB(@%i{_d?${M;aBiScn!|vT@v~6dhrM}m}euH z%sVi%Vc10?@_0iEy2Sf?4qt@{DhY3arKnJjk^~b41Z=fMDy~|i3KAiMfKrWDd#byt zBSbZq9&|;ML<&)l_`Ix*qRrBS(i)63IbLspPJP zHRh8B)kyZgXesq1ws(*QONU5h(w7Lev;CGIvqgBMVQF;m!d9a`kFp_qkvzU(<(7A_(_y1iVzKLz$jwz_jLu^5tvf5k**;o2kiRQRtJJf{ow*?5 z%SXr>lo|4A^0YBoU6;r&USprMu;8A|Xqfl6W-I1#8l(VK`Oq=c_#9#Kea zBT%O56QOWRKYLWa%Psv%dllOGkZVj)9njBJWvHjA53A5Ws{5+5Z>m^5JlOk!PK_R`^ACPgx76@7fttRW&hNMv3>vm};r0y77=x$dZHTrji(l(7 z>=>i|)Vs^*lIHf^nJ3<9w&Pqaa-VP(wdF~){cA>P4;+|vGhe$#Yucqft}U#+t%VGA z3Wdg^X=o72v_yX(la`@#(D~?k=sFF&JV&cPZ)%gOo2o-fT|(-B+ReIyx&`vJ<6G#F zn_i#~)yL{x@ag)$2>m)e8e!Dx>-A6dwfd!kHb#FV>SGL$92ZSB##5MRhw-QpT{h~C zc@i7xc8M?5llm+{8B$kiCn-rCT$k7NC{BOC47sE5jV=6KN7xK^@hcR7=UA*Hw9q%zur+utF!4m`u`U>I&qXlb< z>}@Do%fWtoFp|!cE$fstZ<}Dr#f-p<0_O*U)4H2F3yYM{PkkTH$FP)8Oz$GX zBT^lsDOZ0~-&4O+&o^>4$Wzl*RHiwjxviOnGkBYDo;Fa6O!!Ei z1J8%INV_L#-OVyBI-@PU`Lgt>wpMGYBiiWvb*PUn8Q%`d0=gm?C%8BXUDBxqrGjqy z{`!}K3HqukG*^H1M%7K)bf44T)t@8W@6Mskaa&`6F~nFOZA>$Y-Dzt~%>ZjG)7&;_ zYyWf+i=RHM^&+Oz8}*)OXgE{-Xk_1uJB+H_lEBl(n@04~NQ~ySpxh_{6-vcYE&?>2 z`iojejli{3{g>Ftd@1_;J$6VNd|Ju_=@48Yor0q{UZrF^{x^OJe~9;!!)wv;@?2gI z-ch+Pp_f<7m-EmT*OIPBd6#+0t|fs6-gllYF5nBg2pW(vhkaeu6;5KqEm@0}^uM+JLz0`lvw|I5piRhzj^p(a-M@x~ne3A6L zR3kkp_0c?+`s1h%Ua5`OisXD^4WY@A=gZL=`7XJuu2?75eUP(=Wja)^JD@wOlM*E^ zy$kb!4aF3?7nBnhhwA+mk40)PDt%q=!umhd+7JUA9-J4}^+lm&%c4;ZB68FAtgKL9RX+ixV()(U zeOgK=1W%^yUc`nW+q}V~`t3y@K8Q542h}`I*W_sOHI{m`OLJVK(>&IE&>Yn}Y1?a2 zZ|xVYRBPAf!zW+f>f;|8&=D;iOf2K^dG@+mT_%nO=#q33b%gE}Z<2r`IHyB*bt47m z1%yJdT+l_IH50EzN&1O;@7kKji}V}x8vRKCaZ1q zu{?*_F@6A2<31dbPwXF+Vd@!==#>CiDYo(|=HGoQ@CQ<}dKy9WD zQuXJkmL-mj{+8wb>T{Xj-m&Q|@R(g=Vvqn2#bfd7g6a5Q_&R(Kj*SKpsx~+)Lkl+hDqb3j_EgHvj!tR+&lG;nlKX$G zF~M45h_>^L!nDpaW=@^H>JX{pchQ`}KI|(mJ$!G=_Cu?VywF9iMGi`o$(ycU-iZ*; z9Gb(-{Fsu{cWeZI%Y3niZJia9t;J&FoU#P%_@qZ7abIQHm#-}kM<~-? zi(>pbio)Z*@xN%drUstQ*)no_*wh>g1|u(iDUr8Qhy##(b$8lS2z0l=~uHJVs4za1q?L#sFO zbx}v}{+ci%1#I)qk=q69<~2CXk8HJw&M{iPCG{d~*yMZLPtSMk9_KVMuGl~6^-dY6%H&JS}hVUs|b7?^sgwg zzcTGeOVObWllE;(L1qP(m&5#rg;%5sG8@>vd4lUsS+@QKV`8Sq_+|$T;EahWT!V%X zZd0oYf=Y=PUe{5?3<7miog?&v^rEd<#56 zver?1C@odEWZJc$2X;l%^+BhH<`kw(IWTfN9=>kgTbAhFwu>=(?7a`&U@pUmPy{OW1PUYB57tTRJ)BV$2gQ5>{S}x6nE2e08U#S@!o5 z>V_goi1?21wD8M`VsTAUV-R^Vr$K5fZzm6uM^1V-jcSY@#e}%l-S>$n*tv0&4#nom z5jnnHXoT=tswO$F1@^YHHyI!ad(^G##|J2ml#EuWVI39SY-MAyzyV7Wwpu3pd2XVL-n8rQawcVl!8ig6-rT<^bB># zTTdyZ7WfvaFOJSjb9Vg0O~O}g`G-3Lm&zZl$M@nV@N4)p8&JQK(`diY2K+)Fp4hP= z#<8xJHff#&lJTbS@^~jo|KV=r?c<%|p)kn{-e*Y4Tm_v3pCm&CC_^w!5F}bFxGks< zTorUD&_@AV~p!vywZKHoLySIoHnGKn5vKC~z?Xdf!z_g`7v6&$j zKdYV*taVrUi^UKBD8@&N#j;xmFP^4E*DKqOn6Ajl(pmfohfd#5S+H`v6?w!TE9@;! zW=~yV$F&gL>Nt1BA8tiN?A#ZrID?@W{6_J3nz-ma0Y3sbukliKQ!V2TUi>t-g*yCd z+V@jP@yF+7cGs~scg3EMr!Dz(^Ws@cc+nXrBSiCsu{f#rDj5CZEUtU^*K0Q1L zx_Z}Gx8##vYUEL`<{6h{EXZt2Y#7gs3!vbvX}nMw)0I+A66TOLXxv=i)vi0XeI4so z!r!r_s_@DBJ2S)bFXTZ=jrdEt^k96@8jId+eRGr_cJZ0kn>_)4^8KlD?E2Myx2RXt z`a3Ju-$@9|4?icRBarwy#+eLjkML7T>;YD5a=wnjKAq%`wLPB|D6b@Bl{rold8&M> z9G$uIPqkagX8a)jmEz#;I1=JvcpOeAMCl!LnSb4Ww6}P*e&@Yo4>rJ0ha%paw#4~4 z_)c~di>Z-&hV8mJjwLpV)gK4E@z9CH)UHO`{Yg~w+Dm(V-$yU-!QmR(2Vcm=6zTKd z_#f_L+KdryrQqyTPZ8F}t+Y#LOn^onmZf)qmu0c@HYmqrXBT`ZG6|=E>z%O~Rh_ug z>Dl!aS@%kM@{{$Yn`133&Sy=Y(qc7#edTuMRqy(M7Z%-L`?4eJy<2v@sjVNq<;o%i}%lwjyJ`{;>9kiuUje7HD^};KusYW$m8@KI>enw>^Dpd)20*q8RHDt*_`KR0<3ASk+9` z(*;g(YLzJ?lIY*_-Y`+hYK!ib|EMBoM}F|GRhcq}dKtSLjIOTHqD5zL`p7Y5#_pSu zIW6N+F7b+eZuT%@(=bz}^We^Zpo-KsDw79B5T`Ot^0>rL1s>b0wn`35{*h#CnD!v= zRT_W#o4n(5!%NOzJK%r#c@>(t?4K7q%QsYqpDBvj^SQ-IG&OesFUetQ?kL_I^+Miy z9@@)0!MnzL#-n&vg0_MH0SXZe(~Qw%3+4+}3pUA*3BI6Hoj(*o?o!a-=;a|6KiOnQ z{1r~sh{S(rN9;~czVm+5U+12lKG9$-!Jd5H)-t&L^{Kh0Q1Ltu(WcI#aM3W)7}18! zGwPq&H{A1ROwHeZ(0-W}qIMEL)IdCD3Wa!VrP9XspK>}LdnSZE!t5%&%$DA?mCO`v#%gBB;py2&r-%$R)Xhw^yx@ ztW|A-vp>~+$$QDh;sNp3#l#T)?Uk{yk3MT2<=+;@Ctcm~VQNhpyc%VT)&dt5r;38oqk!Pr!^5nkku zonQ+mJrtbu$c0%k2~^T(VU%!@koTIBnBLl9&m1NR?X*;eaJ+DwtH+>wLhP+wAM~6% zNm$Db@{@;nJWUChOt{1ig6JuX?eSe6EXzO=Gzk&og@4ajvT%f}$5V!o@BNzl+@2UM z%+Zp|h3ug*t{&swXLw-3Y%7m+G`^yhM>aYrtiNwNMlLKDzImldi9I(97ZtZmn8-4XBNh6;~2!q20k zgvUfGLKrs6X6Dwj1?W+Fduws#e>w#HRM zTFZbM3mLYch;!}ZW8UMuZR{FEYD#wbQ!!LJl|$L^*1%c}ebX&pdhz?4khc_lL}9gJ z_8h6_(1|1BlB)c97dCng;mO+iEY6rT)OStBKs)B8s!O*fMVuWZPnOH&F?y7Ki^tWL zoRZ&=zmR_(o9}pH%cyN7cWw}juC5~dToV=) zeUsXV+sje+t#vad#oH*~1k(o^4OwWQW6Yw-kB+>bs;ZlD_2%lO=tH;ts>;Q21p%QW zW8&5iv}ZeuC~7)3Xv0p?z}K^iHvOA(nz%{4B+l+F@XT=gu3A_Hp(DYWcTx+HKZM0E zmUASZMB+`x!uRBh+QKC-ID>Q+0g{kVk75>pV`+3DTe8P^M${(LF z(lfoY8)1GeBATb!Qn+fiRlP{|v@kW^(Yb&-1PQH!K8Qs>aoBW0fQl7qG$#bwv;zX;lb1@CBm(lyM% zZMlkT|5Xdfdd_hw(-4**TN4%_?5+e5AWDN z#Dj;J-tnFKe|#5!E?Zo$VvAVDqNA5tV$sl$*@pcd=Y?>fGQ^~&PgK%4UNd`p&2^v7 zNjui1HdB2{G`7l-YCJ)JvrLL-YsF;bwiAC7ml?Wd)4w_C2WQpSpE1M_o?hTc(2%0* zRfLbEhh$*mY0_&6`X*6mmun&9)zYU)WAtc|^uw1MFRbv&P(Jc?iv!EpAK zo$8b-QWe*-Sa5(4ELI^u)>c)G;2%|M(Y;q)L=nM`V>cnILmyq$PAgv@ti5r(O-c2N z4WAPp)>)!Hi~&J(ptEe#vP~n7wLH|*3-SF9X#c1l$nfW`e1Ua(-ny{O`XJ=9ULDx4 z???SiNv6N7Z-DW0N%cmD(cZyhTF%zWA;;5KT-_%eYj{M23x)~Sz1D+9QKQ49mL|R=;r(I*tf<8!+=m*svQ+X%{st)s)>iKed((P(Z{#K@;>`|?GGzY zpvFN;KrN*+=Q2NL(>C-7q4A?YWau;RhN zdjPMP@Kc>7vU&4)tyO5Qs+Vf8>JhKTWmE+1U*RvA288wy(5HQq1oSBunn#3-&I`gv z&Qvc^w-g2BAYai%^&pW^Ef?8q`V81xg`yJ)!s2byU8*E%e{E|;|YeZI~4)ohJx$Ma(>5Q1YRSGFuF5MzsqB<}A zSNc{;=d`FXscm*$o8*XgU2}<7@|v@w4>9!-Ez#%-5%J+lqCT7Wu3Js~sX}+OSBOVM z4Z&1Z>IWKM>CrY-imHcki*clJ5@9^7s&++%C684fRJ%&lrCc>Vr&j&cBh)h=Jc-e` zYBs5(AE1rYKI(n75?r@Sj83+O`f;tkGP?>4QS`X?5wb{{4@l z;kBCvpzyj)Q=EvFai4d2t$X>hXw3!F@iXm@_t6$zr%#Y6NL~q%*sGvF;br$11SwA= zQqT(fk#)t*gW7Z2eMS_g8>O3}Tc}&F%b-r^uIbP-U9sLuU)Fv_>+=Hl*(=;p znm&d|Cjv#M1jqCnjcfs`(KC&$jef?zM7U&+XtEK_HGUV3mC!E*?i(*II?O^$sx@_m zwGIm+DEj4HqvDKLj}wXUN@|5`nlxLAtnpXgp7?%gKm3-ozvioyF=2=6dVJ9~Y3eb& zK>i3f)!^x#DdE2Hv`$l6TBpH`SnLyi)>ui~N;_#M^7bvG=EAud9Gi(LF=+I>ld=w$ zV)5BR_r$5Yc?CzMsff7Bd&2w3%a$0l-?g}ouR~pQ5jqz^M}bHXBS;tI2vELYjbN8x ztVkz#K0k3^$-md$<);J34r$; z(V8^PCJFqF$gIrsl7A)3Go`7YC5=ZNoup#vPzagSO!)$7;w)64-K@PV4J&*peXMOE zXX&g2^7cBFwVO=7*K+Aeh5W<`-4^*F`SN*P4h%c^MkuWp9u~fQA+u>%MtQ(*F*Cus zb{~sUCo5X>+w*$!qN8|HUKVej-@*&)7^b;@MvNXlM{;DiEyFFHh>r~akhQvXVk zOx_?>;gR?dcmp>@o+n3}@JG96dtbos;iR{W{{=_wL_s0}FO*l1+(R%>K;-jKX37EL zEOCX`EB+Oasp1HPeyY445vnKw;-w0T&WTHNa|KUTC4zFn!M<%9E>iu`aQKsu0jN)S zOW_pQ-5vD7`p-l3GX0c?jc;lx`ZpP{tGz^xyZYA3hdW8MN3XqCntMca5e{L_%Ew92 zED3EGiT#p43Hl`as{|c}lk5vScCLJ=VSnGbafTH2qy|y_w0AVuqzB}#nx@D-M6T9) z>rQLu%U8>hJ-lYf-!U+ebF^-rU*zQxebhga{VyQ>XAFA1dpXwS072VGO;a zW7ipK@5x`d+PCuN!`8YZ<;vt1LuE3jg> z>`(1i<@6dodh~cl6_ibFCsi#qd6^GA*o~ zM!4G_FLy^nYH2&v)i>mLxg&bP6D&yQ^%aag-Z_-_RVm;y2B9g#PujG7bh{n)!1FOS zbhASNr_f{l5ER;AFAPUFg+;=8f$)*g=I~rT1flt;L*O;lNYN*imHMqkcI8(V)#&)a zM)GJQxzAG=y5^bD^vQUfc&qH1r;ZnAlu>slbW3UnKjHD`up>+z)P<(f)&GaDFAu1p zegD2sn}nt#m3>--h^a{SIR{x|S`jgYY+ljYC8G{vk+scIL5k6?X1zHL=g)!XNICKcX@wr=u5dh7!hsXP&Lgjp9WFah7|bhy z0O(0wBDeF)gdM~K{vBV*)4)hrO*N+vQ)7h?;U_hd1|8^Lbgppc{wU9PLZvXx6aF%m z;ywHgK0=%*&J}0D08-i~I{Sn$itk@Wdf zg{izeE%c;41w5z`R6W0$kE259C)_CtG=(5R!fRo<(3_?;G`K5xieCj;*i9c_u_Wyp z4W7{((}GhJhryQV4t*iu!}JpxVDc*TxN1g9`@rj8DD3EU)W8bGldi^K8ApukS+$2d$zA0%Vi^Z&Idi@}@5)z;zWfY6h6f(PPJUcF zSF=!5p5|)#od+g@t#B8eg8B%(#eGPE08)iR!a2bKJB-0xs@PftX_yK>kKKpq?&I`| z(KV?eI3!N5=~;C{EEGS9zr~gk=qwpwkEKA#wdHTTC9z8aI-4A6Eb&}gMEsGq61->g zc~eqfI&}Qm?c1+|X*L5s*Q-)%%qRD=YX*!OGXKp+M(z*rz4WQgU!zoaa3QABh0j+_ z8KnMJt4gYIssTdPH1-&sDpdK%Psx33g8ciBar?XJji;*wkJk}bE8*#y7nmnMmEX%h z<>r=l|KUk=>-;7GI!rlXCwI>r0e#wIL&D}FamYrbC4LIIhJa_t2c!<0oBMy z=#Q^@eI+OqkHW#Tpdn#f@csB1{1*NK|BQph%pSs?*u7vb7srJY-(qz%agIAcyy0#W zfJc8hciB&Fh_sj=6`pN(oh%^Nd?cqQ&p&ZaCe-9in2MaaYz2LA>6D4>VJ@;C%tb~| zikaN&w@T^zCl*tFDCl5Oalb)`dp0$8jXv?#eQzjas z_S)RdgIH);Xn1y9^XS@);Zck4-k^OVXR*&eA4v&j*pci%rDzrUV;e z_no@)%+GzHUen*uWqnxp>a+MrpZ=%M;~!^LYHTfgWtCSMVryzDPliFQunTQA8_B&s zI+BSrDL&;lIY#9g^Vg)FX>;_+-=l4#W5H~jUNxC$ct9B%i+-PE zWdkhU{bTn|H2|}E?0}Y-(pIQ0=J({3=*U~r3+c0TYtxc7^wr;ODu4>7mQoh$!atvwfhqy`C2CnQc$N5y zs-PMuE83CnOOK?%WcsXd5!p;b={mX_b3tL1p5L@N)tOn1262JR3<@k`==IEfY!&+% zastX2$O*VWJ)quEvgFIc3_R^mgPrU@?4=#gJs+_}>{rkFFwnqSagJPHZX`FE+d*0I zU^AD&ZDkHJh1@6Z6;r_g7!vc2Y~U4($Se4YGZv8`$xps|Aa5&Yk4sJleOU7 z=s3|+g>BqkdeM?dBeU3*r$S>X&GS%;{Ylvw)BR?EKj6U1>}?Qo-2&$OrwNCJZRF93 zA>O$`WkN%TqJQBHS@YuK4+st0L4MxS9blYqZ}tVQNsQR?WA=`v+MpJzdx^73-ULN{ zGK!ZDGE!#6`0UTAFL$QQnnmWkq~WDM;ncT)>~`#=Q=_k_TGl*i9yL0_-R#Hk?zhkF z2a8{4NBg~T(T%4v`qk`m_*@egR2`J`#zw`imMe_GL zond+l{pr4yrmMXw&)LCDzEw-U^sAE00f7hw;fD2yk{diiK0%;+dyjlW?xp}$ekb(Q zSJ}j4Ve>cicYo@&JRC`;{=9K5K;QiE8)CRSXb>G%0nMv>3w_EFMX^{>{!=Y5`A zfSWw034>+yx@?cF+d9Nv8*DS2XK7g_yXe>TN+b>~pRB!7GmH3i{;y8nF+L@<4Rm>B zNVq?QB*jQ^(c;IaAz%yS84$PK1>#nNVguz@eoPOunCoOt&Z}LglGVcR&``7>ZN3L+ zvv|OLO~ZT-)%F41{T#3Nb=N=CS`11sR*jzc?7QaAFC#x$+r3{)a;H~iyc=*O;UckQS-nJS+0Qc(vJhZ7m=l$=9F|0eV#-yz9Xo;*UBHyPv=TGIgEZgdCK{_o zbGc=A4+yv>xp?lRtz0~_qs@yhM1L4NWIn#qz3&!$Wj~`g1u7F=ADblbaM(ZiC42%? zgn!3P2wMVlCk7He#B^dYkwByphhWqM^GHh0WF@tZ97FXZ!TT_u;QZ}jWMXRek~Fr0 z1n1fFWc{8Cv2D1n+%&2!1vaP7Dl|tfJK(@{Y zyqon|T~7U>TG1%&P7kLmgXlT*a(V+yd;FKOX=!mZc7u!OITz1?*UgKDUk6Xli+X-^u^OU*a{7_#*y0uegKVZ*{WwG#Yqow1=n9tp~m^X;&Qd$0@mooY5r~x|qB0<+5%kwpV#p<)?oHO0IGRb+QH0 z5$TO+5PxJAjVwXxl9AoW?x_DpnEqM*N2S0X9W;+8ExA0MffUPDV}tH44hpCT?-7My z+o7FK+q2!Ni5e96qh;h0G#PcIj-&rNcGajE))wo54aTgbMd18irMP74Zl zEm-mwdsF5!(T%3p;(;^>#CNU?3gYNIx(?65U1C53J&bl_j0lG&e0oA1x%x%zVl52# zz=RfH#GEs|^u#tIi#SW@?h>zwuY}^#Ig#&5{`-(O_Z<;rd}#5+AmanGd|zz?O{|sn z?M+j9w(~r6mjtiLd7Mm>YU(iONsXd{6?$hp#ZZ}44t0}CW6LSf^ynR-=Q2U`n-bF$ zFulAgH<5l*mcQM=TQM(r@RsiM;8mK!2+=cxnUiP0YT-72SlGZE;uUJnQ^w>y^K(P* z#%GNk%uZl6O^@1k_6U2t#l#VGkj|!G(8L0>Ib_qtY6RBj_iT6J!vrpr`zEd7wsXK$ zzQ8@;-f@+j5wARJpg%vBZ!az4o51>B0{AMt;=?`G=YMorVrC&&;$SecLr|m?a|Z@7 z*O3MRoEJtiEl>i%P;0R_;w4&*5fu*PZ#o%k;y{8tQQ<)T6q`d1WH0GLI^85qMTDK| zz=wTHc9c1lFO$|wdn9l$7;!igjQ4vgy_cf#<}&CYL%!g@$*Q$7OjaF}FUx|=Vn1Y4 z#13&mz-c53C6P=c#9{IBKO-3gbQJQ4j_7lQE=OFZlsOM2fiJlM9f?kEvx&?nvdJ{` z@hRdwdLMn;xwF*atQ-9iGOV6Mrz&*EXSaaYZaxibytU?_4VDo$e0X=~mD=8zFmv{} z$2l{fc$KKp-=f2#s=>8n#lq3ft1-J{?p&rI*1a z;@sZJJ<`U0$@0IsrQoR}%=ev$`RVu)-xDJqjJ<17-xK+rW8|$JaG({Ax~~t>u9?$a zoi-xeXX>!SpULjlna1^!8q0)#^FS8gs5a=gJK| z(Zl@E!Ef7_B=(oA&xg-m_rz%wl+NtwD=eI(j})zduft~jkCYKHcRcC1#Lap#-Xtk; zk$%_gFZrg(n0)o*(Defk44#qDt5g69^` z&AU>*vv4v_&&MB#U^AY9TSzzXLi`i1#Jiv~;YI{9vzamiM75Ov$5&oQB^ZGW>h!GD zs>@V2w3t%3&pJEWg{BA5Wsv-AF0PL4Y~oaqy5!BiRkhXz`u2*|D)5s2Lf6yroRaeN zX7)+olypscCb3L5lY|s7t#^T1+a9>(-rCL>t7QY&Z8+$HuVW*)xfsvpv!!ee3%=ly z1VRkq2#zG~6RQc3MjYiX9&2rr&y{lBX&d-4D&CrR=Dqka{8at{-b#R2cx}fUWFc9| zkM*qN+fepxg#J{2A%qIK+ou*Ww*z@$w&)LPAnJqObTSKgV)lF{pi12qY8Ed7vBOh} z<|SDz0x?Gb-lT2WfbK=DI5ZD^iaHgPxfawy)`nSo%-AR|jP}5k3|Jun;;@a_KI{~B z4O>rs!0Iqy0TKP)cm(c`&%*E0$vD`JAIImgbxa9<$T6B7uY_2x=hh4lsc zaBQR6333Lfz6ybc zsYQJuK4fl}mRCaE7R(?#(1X?urYF#$bQHaYhS+`lH@4A>`C*l}qyXGsweM*OZQnC3 z&x~oy^nkJ%ZUPg^L@{fa?aXxk0s|f}@0dNT5qr6OU*QvJ&|a|bT?o5~)v<%*2U0G( zljeYxRKYf#z1!q=$XOZ8=T>sfkZ7bQG6aD^%`tHLW&>x%-?^EV*PGYy{ydn)FX5B< z73#=`gaorFuMRwzQl1rrl&-CfV^!m~N^9CC$p?CL9+3SL+`(a&6L zF9P3-AjLcBpLuF4H?n(MYBZ|X_gBUB$rYF|2_*MCdTqf7b z6j?)pZKR^oDkTZ38P$&Z2cf~IV@b}CIf(3Wp66f$)f=EI+8-T@hM>NrCAJlf8w?bJ z=5zFscNMymw!tpZ<^!-IdfnZA^RXkhz4hy%l7cyjUB#YYWmqj{jCUhX4N({QQywun!xHO zzwnB(5ACbpmoG~fjA7uMf_{h8!_lYq?>gScp?K@I;~qzi{c6YUUpwYSh~-lc8G`V% zBIv|-CdjF^&Ij=G?2Q9kibmdjENRyWpKj;hOxp6I-rw@65|egiQ6Z*p`W6riSjMmC_wY10$sZ(pP`}dudq;Ih^_~?E?cpxZXyph;OOeDcAajeJM0St1)oIMOi92!Zfd#ipCq*L#%XodcIvb`N-|)5~X5dT5)J z3pkeadslydyFLnO1knFtKu_HBR8RWQ9opQVJS^CvvJ(HjTw~*Hq(BX_S)E_p>K2+M z{-tt_+zbKj;9c|sBakq7E4iaP5O8=NI`I-!eFB|cg&bSdnudqAff|dtVp~WZ%yu6{ zK`zX98!;JlFlL2S(jiUR-T7F?gHhg!1ZbK!=%Kw1g||?~^9yT%_la+$a{J-UR!wB* zvODoN;ivJdhuA{=9@};DN7jx2gWaNLdH7@*Pa|ZxQm;D!M56FlZ84Ho$5^l(+3E@P zDRzCoHQvs0ldfy;1XVA3 zWKIq6Px)@VHaC98+7&xP?E1+6!Zv$S@N@jV+{c0E^Vcl!ElTZd@Wge81xHUt{qDGQYD7^8C2`l<)rgEAuRjw){{<6dssyZ=Q3$W4=?a2`0{)R5{lW_^xVU+B;VR zP{{n&A3MgU6|}IehmY1(2WeFNx;pnf00I_UOdvxA~67*m+nhs)s z4mnC+q#x2EZH%phQZmR*8o(^YO0jh81h$RI+6bI$E-{aoK{e)86_7dqiZgd)`?420 z-F4-DvMX44FucVjJdd4e^P25N$gCgH*4BIxq2a*L=5mLh^ee5-MQ%xsmr41ZG1{m6 z!{?#(MKDk4_Cr;<^@qwL;OcJqxO_!^ESJdDGF`49y=*t=-lK>+vO4>fb{sMdBApTj zwjo)_SwvwP9KdBnjRGgM7##%#4-sfQT0&-`AP1`DbhMiOgTBRrD0d7D$7n?X{DPj& z{G~Z84}+P;bBt060D_r=etHkbK@i?5=#@4aS4fdZ@ryWkh@Yov!kDlj&ak)GaRit~ z{ADdU1&tWN-JQTjx)ns0__##3B4v48%Ig#0FnMQPoF6DiB1;#1s_7yjef2fd-(G(u1tJ5yd^$4{Ham3xKR%pA=|qBCQk7{AMXF=K7v z&iat_ZA}|v6!aY+Y3G*rjq|Rl?cG9)CT2)lH5zFoq4n`9* zRTB@eF+1*<&9g0W@vXPHOV9Y0CkAQWgp&|lrLNS@j5-oUK{El!9 zeEhx%*YQ*&`>xi1dj5byt7x~YVZIBdLOIeLe-Iah<_EChyU~IZ!F23p@_CTv>pa5< z{eBmXv8J$W`bgtHWUGkB#V7^bso~UhW)8KS+Ax#KqhmX-xY2(*y?uLrDA88p&D~v`T>@6zLAe%Xdm@;;Z3p0p0 zi1on19c(p|#ajON4JQy0&vTjOR7CfuG z{^w;)hPo5awI4eEk?B=?#KSx?cO)_ynU5G7fw6fBNGfs&Veos%8wC6S(@+Z4qubCd z^elQ8ok)VOkiD;_v3s;9HVO;IA~4W}VX#bW4U>jH$I7uk7-)sBWHvJyOb|W?uVjo^ z(1zu3=$Lqp6~5vprkzLu)`Tf2I1D8&VXOd>Di4^7)0 z&{PU_fQnQ3WM8I~=MsdmrnC~iD|HlXl-f>8A%y_uJVbuq(vVdn0BgpX@nXJckw zQWd0nt>wBR{SlyW3>P6f#FV$=bCG$|Rl~>gnN5}F z5#g`B;PI%DU$Cr2HNJFC>BL9QP78%&5x`!ZA{?M$u>?<9IgRTDfQSxax$G@Y66cBC zq)j3iF~GTNFn;T;bMHoRxCE}@0k~Fjl6PQBrFBxe1gjgihb*R{M2*x;-c0-^fTGL| zliBnkHj27Ezy^NIdHKHlR+eNHVvYR4!A)cg;_Ui^G^I8p2WihE2pCR1K;}@D$OcMt z9#eNgK~x(|twkMaD8)q$d{trreh0vXh{sUUY29pt_Q!J)lN2Ze}NT57IrKG^7 z!7#Qbb&m&cctzRNTIeDir7lua1Pi3IcU5Tf8tP8owd-m+qgGgd@%8mF^gX@fmJa_3 zHE6AF)8Yg=l|Do#^7rUB%f9|6OY$H7G?>zA&(-pl?U~7rH}X885*`FIFFA!cn8_%_ z!A(49l2+Vj-PyA8sb;?EzRfda#)7T@f}2)yP3}D94+R@cf|me);jWVBAb7}_ljxV-3Rx$%NsN+%=vqc~r_AX!^^qQC z)N0RaKP3qEbFuKW-xHj`5XPXHq%g{3z9G32NjX+1{W6rSIf zBHs%RG}BxJ9mHNDF8YZx#aMBz_zrJ4R?u`}RIBid&*S!OeE31Edm=@uBw#H$OIgSm zX{xkPQiMhTDvik7(o1O#T`wU=sMd7d6GO&ULkLS2mr{Iw;?mwkMb|M1=0z5 z&w&WOIUkNJMS}U8JRQ$7Jjh2%TeM94g|t8&6QxMV6i`n2M*1vzi}S?Jqo8u*72&ba zfR4y&i&=_;F{mjD#U_ePX+|Z>2%6H2ZSbzRrq9LvVS~ZNd`%xKW{0G|zp`{Rlb2$$ zPd_8M*P4x?LX>cJK_n06JJu3(D?&_z0)hTTB{JApB@w&j6sFk& z1XLGIttn~E&esm>)0?f-u>S0m%QB(x@Kg_M$?oJp(q~ez??nIUlRylc#5PhE*fl~C z`<(?Q+%>K{_Xa}7RY=&0zy^@O6aX|r95g;y+L6?+d?G|~z zd`8}jy^uf4;IC|nKra9pflNdcHWt{3>_Zef)-z-)T8DU|pfBAU-4#NhPOH|_YtUXa zI6|ZAF>~r2T8SEAZLn$@#6ckSEVc-n%RFP0S|8A>Y4sq>y9zVLFM20y9bj&WoIom- zB96rm7o!Lc2lOh198!xbHK)3BLkYJd)Bav1xmW^>T}LeYsJWkcl&FUejz|bIJqo`3 zgwfFGQ%W#on%Ro>EkZ~Kav@8zlgPjG$Q6?={fEF@t{gI?5<$NDd2`_ACr;(Kc*Z89 zJm=+kGPw%e&wNTkO$u4Wbf9`sI0gKunUqrEL~&mgHvu%k{B}@vG>DEUEXoD(Vq|>L zm96xGcTZtqnI#IkK|f^tgeH7{5;H^s*QGG&H^ld|rA~5z^icvW*jKKfvid@HR72MN z%vr2`BEN&*%^qi~-@ZJ^Q5^We-hHbixdw213v9SKNa#{-1M>0Q5#$^P#y#Lb`lvSQ z3T`B7#XItS`H{SCGC!YJDAO7IX`Ws&DS>a|=og%O42rL~IMwlaQ`@LJ3cX>87T_Yo zdT2tjuv<7TC_5082-Sj_*j7|X&kE-mG6mO&XZpExy@f}{yYzl7g0G@1V#HP4Q?irO zu?PvoOOW*uxN}s86RKXlTGh{At z9^&6Fu1Zm*1O$BW+=HBgvXy648B#~_M^!#H=)1$yB0W)t4u&BXh({ST6U{+om{Bc9 z|DX*w&dyNw_EbkuaL(*dd2Z^V5m>7`(;~wmU<_l)DDnixV{|@@C2KIy3~z@+)+$cm zVYm`(0VUd+Lp;Rmw?`!*+=aIwYI7H&A2FI(#x>_w5uqd~W6lsw8uQ28M828>9^?pe z1b>R3%g6Ei$T@#NTb)Tre zLQC5IojFDi7cK0@Pp7-t9m-!tKYk(Zr_a#;Y#aP=#aTDGDGS-jUv8r151UL0@UeDHotIW(Xln7{H8UxQtn0i8j8Q6WT3KwqLpVQRz0u zKE#nelz)=B%G9QLzGiB-dUrXNY1}1ySkAawRhMkDS9(>8?~Dm+%XVi6vcQL(&MsyX z*i`lqyGXdlLYc)k_BeEx2(BMDnmc3;9=%`4#ag~W_H#6Hi#x)D3;bWslDFqQ_>t%X zbUq3S_>KGpv@53U_zyf6LWAoCitOWM!J&Lym@loAK&-Gi2~tG1stIS zrr319OVQ`gag(Jx*eh(a6bKU*AIrK$A&Zl5raLzOovYeBs3sBPB`q7|InK&icWavX`^gXF9P; zWeX6@MzGu7&cS22YFo8EdE!?w66t)@qJmOoy1=KznC7T}kE}SV zFp(nX4td7zMZhb0{m_@>7t#SCJug@dMXtJ1GZ5cJ$86_Q83+glXOO*z3z4vAh&f${ zSfH<*>Ro>y+rf4<=|Gzsn#+AqrOHX&Jah%RshuU1TDWy+>y**fqViyyGq&HNRpJda zC%Z7L>FWGKfUcOLX9E9pWiafP>EGP`4$o2Fd zI*U9@{@OcTNp;ne5BDk8#RzI5HJ8#X5jIk_@&D{J2uI9Ao>RJ8&D!Pvq{fMguAtMl z!3|E3PSJRd$!`D3i@5kXT|${(XI z(;M5{_|$!Gm(g}ulIa;+Z7J;8$P}vEp8{RG{L{R0)O_N9^FFO!g73m*K`S`4qA)$SR@f!zjtO@$K^XIO zR1v_}#2C-Mn!fu?H+MI+ji96}Og7(7$SL~;jtl)OkjBt^1{1RP~U`BPrPIBL)F z1yt8ZV3UwZxd}I^!*mN?VNC&rvG-Gm7dwd0AYm^;1kXi<%=VtX((ziFC1Vd|p=ntu zLm4F=j$x9RlMmsBVb}*u!lQgzDwV8RXBK#|J>{wFu@fWkNclucUcOsR-ibZnzzbHE zBZ~jj`%d9Lz3i1~ezVJ?=PlhUKDE4_DlI;d^7ICzve8Y<(a!6PWD|`>*}iRAMJY8n zvu3yPhmD!07mo|Zumn)%10z#?Y|YgVM-L3o%P%}|V3_d@y1}gO^xE1_Du=?WFhu=V zUXGy$wYKBVocAgFm{GK(63WZnrL>Q$-goAkQnRG4hM!k{BD6eSnMCJy3n=rHSfDI4zyLI z!)~)xSlQu9(eyy?1rI@4?*pdw7=q96+VQZ=Ik?u!2j7A%#;-l}ScJJahdAtj(WiT+ zMRcXfFja!ZaMiIK^GuKxUDnNc1Z>#_uDTs^`yn@$^S|q6A%o{`6;KNmVB~VjC(r&w zO0UeL?9Wtp)5Z5##iamn|AF3ph-&XK0mCisSt-;hRN+o7&$I7!bO>_Q_}*j%1j|Y> z-VBNs%don|T4Rmo&9EsqW2|eU0#0YF2)KI*CSNmqWhv)Z1NZT@Qcx5e<4rJItUERk zGZpNF3LFd)QszZXJVeDjjGCS%q%8t}se1xT(cgr}VkxO)>cMDnia49Dpx4v&;u-N3 z4Ms8zv=w71*;lxmdP!p>u+zI&<{W9cv_VqXnVsTQcMr=^a;@}zp%N($mcgy?iSiaU zPCmmfpPbKLl#RhWK`xdRa@s)B1u3#7$0H;XiHwMXusjJ1NYZM}mS#!mmY{jgY2*e{ zhLJmg3!l2Yo})?&H%0Svso zHYD?ki%a2C?Cp)_xnBh^9aoDz@t`*c@Fn7HJOS=${EBEKmWXfgVgV4X2`jn_ES)r( zm@<0)Y+~7{XT>0iFq8iwE)kE26Vi9Wgw&kix|2zq4_R|$-ozKt(?RhMSa)RVv*IRZ zgg*n6LL==drOf6I;iwQpfh20G^bZBv71!FJr3;H2fC+6&cc)jO2s)kCFaZcqFtBs< zJ-QI3L$KdyYX;)MW3k-E3vCs%Wkc0_a0q5cn$*g6@p9IQXvK{pfcw$O0mHc}kW3YEeRR(5GPvcclY zvH%Aj^x?hvNxTgtC1@khznPfCgPpt;b%}q(PoSE3w4l2%Q1B6^3rd0E!Q>+Z6e0J7 zH$u4REVUMWqK<1pua`TQ3=@4~mQ4(SNqHR&c8fPwwwB)0{iG_K)FAg8V}KEdCWOB`^=WDvgkOv{clH>!go1;DD4(+?EQ6FVZgp z`Bm!xPt;1k>3mFOzgf;SolfLC$x4=RhJ+{>Se_)sNB3jAr*&RP0WP$`~F8!w{ z#M4%*9rfM7tIswTuyt0Og)={Bmdq4=kTsdL4mzc_!+Indf1x@bRAw@8Ell-Ghzhkv zo$VepgDL%ykzRI6k+wPxD2GQkVl}Fq9pTu06x1wVINO5ByS#9bGxlp$C_{rOm@%^o z3&r12XRuq?3k-aQvMnDo*OMPd4%k0~1g8QAX42$SUa6#=6T$6B*^3@^_&8SAc*{{{X!j+9KQfH=mKu z&3H1Yy)5^bqtt<14-fj^1HXw3I0AAwVzUqO?~o#i}G@TDFn9 z$)K8uBioXcte5AK&&Z7=*hjvWtJBZImh(2qLz~@dpj5y9pTnnsz)^4=+2Q(-5-D?Z zm3PlifwX;h+7CVI8ig*T=U1JXn5XS{Z_?&@MV_C6AG@dB>7TvgRkzi+Ly|+Ez6n44 z`19`Bv$Iz?1h;s`J0wB6z`OWq-a8KUGjVJw@3henho6?mti8~tv8j_W^a^&!l986~ zh*%jXwrXLcvTS|MI#zYg+VmfTZ8L+dxxu!%!PWx4XkoC04W3#VY%TX2Y!QR)N4Q9B zux)+BVEe7=oOLIIZBK)(9b7oTU~6lz?O?EN)5BovWUz(*A7ZdwtIjxQ?E&9Y3jb?o zutnj@E(Y6P2HQafTP+P=4KvsdH`tCc*p7xT#u#kJ8f?cIY<+qdY{wgHXB%t@gY8oF zKj*Cd47UCT+W>=YAY2z@u$^eIon)|`4A%u4Y^NA(NrUb0D!4ApU^~NLJJVo03w|lw zU>j+$onx?ltb$*f2isN|Y$FV|3*fg{Xs}&G8*C|q?PB=K%wP-KS@l0V&UD~%Rb!8< z*!+>tv}2zQADTZhCV%ABVJ44>r@0zkgHnfibAj5_~s&!~Fop3*alh7BNsOWsVr0J}yRg}n!}&l%ga zrT(XD)C|}*YFvPa*`$S)_`HQ3r_Wv54t9;|=eX0qnfjv2BZ@(0Zr#$aBF(?V=$Xxe)8#XnE9h+7gwM9OXU^^ zmoJr{9ZbyKr#rwVPr2F#2c>0`<8swt*pbk^qr3NflL_vc8Sbg>Zter!qZ~?Aonham z)~bU_o2Py5N8C@lUvdw;?q) zOXW19FO}23RMxrwuCmwm&@OQYqqUD!A==s6#o9RS8trB+*r^?=9pOINT?ZRHUDcj+ z7-6ezsa1M;s$CtTzEmbGaGzQ}YrnRuU!Atv!E3Zt%sJTDYIP}H_uD$CnHmgquUb1S z$T+oy+A=*8jsSrZ#Kt%^R%Mxf!xS2xK*JNYoP1nsnSNX=CxbW8un8{x0LKsT3!oBC zD&gce9DgeY`1egWagdWO;b;j*&=yYG!iggs9TkHs4QH-!_EBY-{!#fD4K!$=VJsZS zDocjzEz^hV<>cMauv;;FtFlc0RwXAVK|_*ah=P+SI4M1V^?57JF#D7ch@OW&w0)8D9|;V?8DhK7^yEhm+?%!QM= zaMBvCXs!IZbOW?BK+96NbgA+&nBFoS)61}7m1TM#I07#?@q&{G z2+DiT!6j0nacWmT%k-{(&`<~8ycRwIB3!XT`HQSo!ynqc-uyN+bc7>l?GBg1iMb#A zW`5An5gJ}c)|+>QqXC$ z08SRb$wm0HUerT_4jOdOupW+^lpiD&PEw&^9~=>7g*9Ai4JUSRv{MWn;G_ebpm0PL zgA<%M!O18%j#3Qc;AEV>o;D}ogitI3oCt6d0LK8uFbPg3!O2uOPE`yfoRDxb6OJ<# z!&x{v3nw{n%ux(;;A9S*M8GjZF;s+ErdNd3n^Vw0DTZh`iH4Jw@JJU!t#;@VZxjZAKmEMO?>KIsh*>~;= z->7#94X~cW-Kjg{J8m%ozVp9l3nxxJ9+;{wKXIzp=c%dcK^?aY?zn|cQLA}c{mwlj zMJ>B~X!GFfgW8+gk`%R1)zm8E%$aI4FP%qo+Ycti^h^Pxr zIg+VXi@Me~#;3SsH}^{M(tXZUTlUN^8y{NmztJNm8dfH1jL#s}jeB#ujl+{|btElTG>b5_MRA2DYUG&mPk!n*9QP)S* zHAK1^6nT;c>XS|mckt4irT88QyA_UvUE6OMyfuB3&*hD>>b5ChtC5kZ?zX+=VnRWfm)<(1XO+rG&auAPGtoK)zFH^J z`s50|lm2kly6$jtGFxS~A_c7Pn>So8>$->05l_1OzFEBT5B<_3UY*4t%pyTt+H=PnkJu(yL3q8cmHzA%sN;oAf7M}_1 zmPIKgS#@Vs9d$huO#)#ICoL(U-3}+|F1SU=Ze!j2lp>vStkn#qAkIPA?F%eN@NdcC z0{;*~LIS!5S{$5Fp;szBtq-b53;wj?*xB|rnwCvUObb0$WnwMKFbw82ASz8dt-+u6q?@-kp*!@gSar`ysaL=C= z`jV_#P7b0q7eabNA4rC!Wyd#qr~|ucz9QF5o?AIuzcd+|8E&Xbt*ci_+mm_q^O?>QEHP>$n~UMUF&j+ZO|UsBT#Vby?1}F z#L1rDS}KKjeB41v7CY#<)vi64f7d|L?l_|%4J-+QRqSFa+D^!amD?^4sV z_qD(ZeOHs55nc)1u8t_#uXb0v-$>BdMOxOx5J|*NBB)ECm%h0R-5m~Uw=lDm_ry

KmgF*a?Tzn$24JTGTVawQ8P+u22f^g*85+gZ} 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Ī(<;v*j^(lslO#E@Y;ew0 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 kh`dwiMK(Y<2zBf5yx~{MMhq&T- #include #include - +#include #include #include #include -#include #include #include #include diff --git a/include/sysmenu/settings.h b/include/sysmenu/settings.h deleted file mode 100644 index 71f43860..00000000 --- a/include/sysmenu/settings.h +++ /dev/null @@ -1,35 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: settings.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2007-09-06$ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef SYSM_MACHINE_SETTINGS_H_ -#define SYSM_MACHINE_SETTINGS_H_ - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -/* SYSM_MACHINE_SETTINGS_H_ */ -#endif diff --git a/include/sysmenu/settings/common/NTRSettings.h b/include/sysmenu/settings/common/NTRSettings.h deleted file mode 100644 index d3086cc9..00000000 --- a/include/sysmenu/settings/common/NTRSettings.h +++ /dev/null @@ -1,578 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: NTRSettings.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - - -#ifndef NTR_SETTINGS_H_ -#define NTR_SETTINGS_H_ -#if defined(SDK_CW) // NTRConfigDataɃrbgtB[hgĂ̂ŁARpCˑŕs”\B - // āACWȊÕRpC̏ꍇ́Ãwb_𖳌ɂăG[o悤ɂčĊmFB - -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -// define data ------------------------------------ -#define NTR_SETTINGS_DATA_VERSION 5 // NTRݒf[^tH[}bgo[W -#define NTR_SETTINGS_DATA_EX_VERSION 1 // gNTRݒf[^tH[}bgo[W -#define NTR_NICKNAME_LENGTH 10 // jbNl[ -#define NTR_NICKNAME_BUFFERSIZE ( NTR_NICKNAME_LENGTH * 2 ) // jbNl[obt@TCY -#define NTR_COMMENT_LENGTH 26 // Rg -#define NTR_COMMENT_BUFFERSIZE ( NTR_COMMENT_LENGTH * 2 ) -#define NTR_USER_COLOR_MAX_NUM 16 // [U[J[̍ő吔 - -// ݒR[h -typedef enum NTRLangCode{ - NTR_LANG_JAPANESE = 0, // { - NTR_LANG_ENGLISH = 1, // p - NTR_LANG_FRENCH = 2, // tX - NTR_LANG_GERMAN = 3, // hCc - NTR_LANG_ITALIAN = 4, // C^A - NTR_LANG_SPANISH = 5, // XyC - NTR_LANG_CHINESE = 6, // - NTR_LANG_KOREAN = 7, // ؍ - NTR_LANG_CODE_MAX -}NTRLangCode; - -#define NTR_LANG_CODE_MAX_WW ( NTR_LANG_SPANISH + 1 ) - -#define NTR_LANG_BITMAP_WW ( ( 0x0001 << NTR_LANG_JAPANESE ) | \ - ( 0x0001 << NTR_LANG_ENGLISH ) | \ - ( 0x0001 << NTR_LANG_FRENCH ) | \ - ( 0x0001 << NTR_LANG_GERMAN ) | \ - ( 0x0001 << NTR_LANG_ITALIAN ) | \ - ( 0x0001 << NTR_LANG_SPANISH ) ) // NTR-IPL2-WWłł̑Ήrbg}bv - - -#define NTR_LANG_BITMAP_CHINA ( ( 0x0001 << NTR_LANG_CHINESE ) | \ - ( 0x0001 << NTR_LANG_ENGLISH ) | \ - ( 0x0001 << NTR_LANG_FRENCH ) | \ - ( 0x0001 << NTR_LANG_GERMAN ) | \ - ( 0x0001 << NTR_LANG_ITALIAN ) | \ - ( 0x0001 << NTR_LANG_SPANISH ) ) // NTR-IPL2-CNłł̑Ήrbg}bv - - -#define NTR_LANG_BITMAP_KOREA ( ( 0x0001 << NTR_LANG_KOREAN ) | \ - ( 0x0001 << NTR_LANG_JAPANESE ) | \ - ( 0x0001 << NTR_LANG_ENGLISH ) | \ - ( 0x0001 << NTR_LANG_FRENCH ) | \ - ( 0x0001 << NTR_LANG_GERMAN ) | \ - ( 0x0001 << NTR_LANG_SPANISH ) ) // NTR-IPL2-KRłł̑Ήrbg}bv - -#define NTR_LANG_BITMAP_ALL ( ( 0x0001 << NTR_LANG_JAPANESE ) | \ - ( 0x0001 << NTR_LANG_ENGLISH ) | \ - ( 0x0001 << NTR_LANG_FRENCH ) | \ - ( 0x0001 << NTR_LANG_GERMAN ) | \ - ( 0x0001 << NTR_LANG_ITALIAN ) | \ - ( 0x0001 << NTR_LANG_SPANISH ) | \ - ( 0x0001 << NTR_LANG_CHINESE ) | \ - ( 0x0001 << NTR_LANG_KOREAN ) ) // NTR-IPL2Ŝł̑Ήrbg}bv - -// tf[^ -typedef struct NTRDate{ - u8 month; // :01`12 - u8 day; // :01`31 -}NTRDate; // 2byte - -// jbNl[ -typedef struct NTRNickname{ - u16 buffer[ NTR_NICKNAME_LENGTH ]; // jbNl[iUnicode(UTF16)ōő10AI[R[hȂj - u8 length; // - u8 rsv; -}NTRNickname; // 22byte - -// Rg -typedef struct NTRComment{ - u16 buffer[ NTR_COMMENT_LENGTH ]; //RgiUnicode(UTF16)ōő26AI[R[hȂj - u8 length; // - u8 rsv; -}NTRComment; // 54byte - -// I[i[ -typedef struct NTROwnerInfo{ - u8 userColor : 4; // [U[J[ - u8 rsv : 4; // \B - NTRDate birthday; // N - u8 pad; - NTRNickname nickname; // jbNl[ - NTRComment comment; // Rg -}NTROwnerInfo; // 80byte - -// IPLpڊo܂vf[^ -typedef struct NTRAlarm{ - u8 hour; // A[:00`23 - u8 minute; // A[:00`59 - u8 rsv1; // \ - u8 pad; - u16 alarmOn : 1; // A[ON,OFFi0:OFF, 1:ONj - u16 rsv2 : 15; // \ -}NTRAlarm; // 6byte - -// ^b`plLu[Vf[^ -typedef struct NTRTPCalibData{ - u16 raw_x1; // PLu[V_TP擾lX - u16 raw_y1; // @@@@V@@@@@@@@TP擾lY - u8 dx1; // @@@@V@@@@@@@@LCDW X - u8 dy1; // @@@@V@@@@@@@@LCDW Y - u16 raw_x2; // QLu[V_TP擾lX - u16 raw_y2; // @@@@V@@@@@@@@TP擾lY - u8 dx2; // @@@@V@@@@@@@@LCDW X - u8 dy2; // @@@@V@@@@@@@@LCDW Y -}NTRTPCalibData; // 12byte - -// IvV -typedef struct NTROption{ - u16 language : 3; // R[hiNTR_LANG_SPANISH܂ł̕WR[hj - u16 isGBUseTopLCD : 1; // AGB[hŋN鎞ɂǂLCDŋN邩Hi0:TOP,1:BOTTOMj - u16 backlightBrightness : 2; // obNCgPxf[^ - u16 isAutoBoot : 1; // NV[PXŁAj[~ȂŎN邩ǂH(0:OFF, 1:ON) - u16 isBacklightOff : 1; // obNCgON,OFFtOi0:ON, 1:OFFj - u16 rsv2 : 1; // \ - u16 initialSequence : 1; // NV[PXtO - u16 isSetBirthday : 1; // a͂ꂽH - u16 isSetUserColor : 1; // [U[J[͂ꂽH - u16 isSetTP : 1; // ^b`plLu[VꂽHi V ) - u16 isSetLanguage : 1; // ͂ꂽH@ (0:ݒ, 1:ݒς) - u16 isSetDateTime : 1; // tEݒ肪ꂽH ( V@@@@@ ) - u16 isSetNickname : 1; // jbNl[͂ꂽH ( V@@@@@ ) - u8 rtcLastSetYear; // RTC̑OݒN - u8 rtcClockAdjust; // RTCNbNl - s64 rtcOffset; // RTCݒ莞̃ItZbgli[U[RTCݒύXxɂ̒lɉđ܂Bj -}NTROption; // 12byte - - -// NTReݒf[^ -typedef struct NTRSettingsData{ - u8 version; // tbVi[f[^tH[}bg̃o[W - u8 pad; - NTROwnerInfo owner; // I[i[ - NTRAlarm alarm; // IPLpڊo܂vf[^ - NTRTPCalibData tp; // ^b`plLu[Vf[^ - NTROption option; // IvV -}NTRSettingsData; // 112byte - - -// gNTRݒf[^ -typedef struct NTRSettingsDataEx{ - u8 version; // o[W - u8 language; // R[hiNTR_LANG_CHINESEȍ~ɊgꂽlBj - u16 valid_language_bitmap; // {IPL2ŗLȌR[hrbg}bv - u8 pad[ 256 - sizeof(NTRSettingsData) - 4 - 4 - 2 ]; // 4:saveCount+crc16, 2:NSDEx.version+NSDEx.language, 2:crc16_ex -}NTRSettingsDataEx; // 138bytes - - -#ifdef SDK_ARM9 - -//========================================================= -// NVRAMւ̃[hCg֐ -//========================================================= -extern void NSD_ClearSettings( void ); -extern BOOL NSD_IsReadSettings( void ); -extern BOOL NSD_ReadSettings( u32 validLangBitmap ); -extern BOOL NSD_WriteSettings( void ); // NSD_ReadSettingssĂKvB - -//========================================================= -// O[oϐ -//========================================================= -extern NTRSettingsData *g_pNSD; -extern NTRSettingsDataEx *g_pNSDEx; -#define GetNSD() ( g_pNSD ) -#define GetNSDEx() ( g_pNSDEx ) - -//========================================================= -// f[^擾iNSD_ReadSettingsœ[Nɓǂݏo̎擾j -//========================================================= - -// o[W̎擾B -static inline u8 NSD_GetVersion( void ) -{ - return (u8)GetNSD()->version; -} - -// EXo[W̎擾B -static inline u8 NSD_GetExVersion( void ) -{ - return (u8)GetNSDEx()->version; -} - -// I[i[Ŝւ̃|C^̎擾B -static inline NTROwnerInfo *NSD_GetOwnerInfoPtr( void ) -{ - return &GetNSD()->owner; -} - -// I[i[Ŝ̎擾B -static inline void NSD_GetOwnerInfo( NTROwnerInfo *pDst ) -{ - MI_CpuCopy8( &GetNSD()->owner, pDst, sizeof(NTROwnerInfo) ); -} - -// [U[J[̎擾B -static inline u8 NSD_GetUserColor( void ) -{ - return (u8)GetNSD()->owner.userColor; -} - -// aւ̃|C^̎擾B -static inline NTRDate *NSD_GetBirthdayPtr( void ) -{ - return &GetNSD()->owner.birthday; -} - -// a̎擾B -static inline void NSD_GetBirthday( NTRDate *pDst ) -{ - MI_CpuCopy8( &GetNSD()->owner.birthday, pDst, sizeof(NTRDate) ); -} - -// jbNl[ւ̃|C^̎擾B -static inline NTRNickname *NSD_GetNicknamePtr( void ) -{ - return &GetNSD()->owner.nickname; -} - -// jbNl[̎擾B -static inline void NSD_GetNickname( NTRNickname *pDst ) -{ - MI_CpuCopy8( &GetNSD()->owner.nickname, pDst, sizeof(NTRNickname) ); -} - -// Rgւ̃|C^̎擾B -static inline NTRComment *NSD_GetCommentPtr( void ) -{ - return &GetNSD()->owner.comment; -} - -// Rg̎擾B -static inline void NSD_GetComment( NTRComment *pDst ) -{ - MI_CpuCopy8( &GetNSD()->owner.comment, pDst, sizeof(NTRComment) ); -} - -// A[ւ̃|C^̎擾B -static inline NTRAlarm *NSD_GetAlarmDataPtr( void ) -{ - return &GetNSD()->alarm; -} - -// A[̎擾B -static inline void NSD_GetAlarmData( NTRAlarm *pDst ) -{ - MI_CpuCopy8( &GetNSD()->alarm, pDst, sizeof(NTRAlarm) ); -} - -// ^b`plLu[Vf[^ւ̃|C^̎擾B -static inline NTRTPCalibData *NSD_GetTPCalibrationPtr( void ) -{ - return &GetNSD()->tp; -} - -// ^b`plLu[Vf[^̎擾B -static inline void NSD_GetTPCalibration( NTRTPCalibData *pDst ) -{ - MI_CpuCopy8( &GetNSD()->tp, pDst, sizeof(NTRTPCalibData) ); -} - -// R[h̎擾 -static inline NTRLangCode NSD_GetLanguage( void ) -{ - return (NTRLangCode)GetNSD()->option.language; -} - -static inline NTRLangCode NSD_GetLanguageEx( void ) -{ - return (NTRLangCode)GetNSDEx()->language; -} - -// Ήrbg}bv̎擾 -static inline u16 NSD_GetValidLanguageBitmap( void ) -{ - return GetNSDEx()->valid_language_bitmap; -} - -// RTCItZbgl̎擾 -static inline s64 NSD_GetRTCOffset( void ) -{ - return GetNSD()->option.rtcOffset; -} - -// RTCNbNl̎擾 -static inline u8 NSD_GetRTCClockAdjust( void ) -{ - return GetNSD()->option.rtcClockAdjust; -} - -// RTC̑OZbgN̎擾 -static inline u8 NSD_GetRTCLastSetYear( void ) -{ - return GetNSD()->option.rtcLastSetYear; -} - -// NV[PX̎NONHi0:OFF, 1:ONj -static inline int NSD_IsAutoBoot( void ) -{ - return (int)GetNSD()->option.isAutoBoot; -} - -// obNCgPx擾i0-3j -static inline BOOL NSD_IsBacklightOff( void ) -{ - return (BOOL)GetNSD()->option.isBacklightOff; -} - -// obNCgPx擾i0-3j -static inline int NSD_GetBacklightBrightness( void ) -{ - return (int)GetNSD()->option.backlightBrightness; -} - -// tbVV[PXǂH -static inline BOOL NSD_IsInitialSequence( void ) -{ - return (int)GetNSD()->option.initialSequence; -} - -// af[^ZbgĂ邩H -static inline BOOL NSD_IsSetBirthday( void ) -{ - return (int)GetNSD()->option.isSetBirthday; -} - -// [U[J[f[^ZbgĂ邩H -static inline int NSD_IsSetUserColor( void ) -{ - return (int)GetNSD()->option.isSetUserColor; -} - -// TPLu[Vf[^ZbgĂ邩H -static inline int NSD_IsSetTP( void ) -{ - return (int)GetNSD()->option.isSetTP; -} - -// R[hZbgĂ邩H -static inline int NSD_IsSetLanguage( void ) -{ - return (int)GetNSD()->option.isSetLanguage; -} - -// tEZbgĂ邩H -static inline int NSD_IsSetDateTime( void ) -{ - return (int)GetNSD()->option.isSetDateTime; -} - -// I[i[̃jbNl[ZbgĂ邩H -static inline int NSD_IsSetNickname( void ) -{ - return (int)GetNSD()->option.isSetNickname; -} - -// GBAvȂǂPʃ\tgĝ͏ʁH -static inline BOOL NSD_IsGBUseTopLCD( void ) -{ - return (BOOL)GetNSD()->option.isGBUseTopLCD; -} - -//========================================================= -// f[^Zbg -//========================================================= - -// o[W̃ZbgB -static inline void NSD_SetVersion( u8 version ) -{ - GetNSD()->version = version; -} - -// o[WEX̃ZbgB -static inline void NSD_SetExVersion( u8 version ) -{ - GetNSDEx()->version = version; -} - -// I[i[̃NA -extern void NSD_ClearOwnerInfo( void ); - -// I[i[Ŝ̃ZbgB -static inline void NSD_SetOwnerInfo( const NTROwnerInfo *pOwner ) -{ - MI_CpuCopy16( pOwner, &GetNSD()->owner, sizeof(NTROwnerInfo) ); -} - -// [U[J[̃ZbgB -static inline void NSD_SetUserColor( u8 userColor ) -{ - GetNSD()->owner.userColor = userColor; -} - -// ãZbgB -static inline void NSD_SetBirthday( const NTRDate *pBirthday ) -{ - GetNSD()->owner.birthday.month = pBirthday->month; - GetNSD()->owner.birthday.day = pBirthday->day; -} - -// jbNl[̃ZbgB -static inline void NSD_SetNickname( const NTRNickname *pName ) -{ - MI_CpuCopy16( pName, &GetNSD()->owner.nickname, sizeof(NTRNickname) ); -} - -// Rg̃ZbgB -static inline void NSD_SetComment( const NTRComment *pComment ) -{ - MI_CpuCopy16( pComment, &GetNSD()->owner.comment, sizeof(NTRComment) ); -} - -// A[̃ZbgB -static inline void NSD_SetAlarmData( const NTRAlarm *pAlarm ) -{ - MI_CpuCopy16( pAlarm, &GetNSD()->alarm, sizeof(NTRAlarm) ); -} - -// ^b`plLu[Vf[^̃ZbgB -static inline void NSD_SetTPCalibration( const NTRTPCalibData *pTPCalib ) -{ - MI_CpuCopy16( pTPCalib, &GetNSD()->tp, sizeof(NTRTPCalibData) ); -} - -// R[h̃Zbg -#if 0 -static inline void NSD_SetLanguage( NTRLangCode language ) -{ - GetNSDEx()->language = language; - - if( language >= NTR_LANG_CODE_MAX_WW ) { - GetNSD()->option.language = NTR_LANG_ENGLISH; - }else { - GetNSD()->option.language = language; - } -} -#else -static inline void NSD_SetLanguage( NTRLangCode language ) -{ - GetNSD()->option.language = language; -} -static inline void NSD_SetLanguageEx( NTRLangCode language ) -{ - GetNSDEx()->language = language; -} -#endif - -// Ήrbg}bṽZbg -static inline void NSD_SetValidLanguageBitmap( u16 valid_language_bitmap ) -{ - GetNSDEx()->valid_language_bitmap = valid_language_bitmap; -} - -// RTCItZbgl̃Zbg -static inline void NSD_SetRTCOffset( s64 rtcOffset ) -{ - GetNSD()->option.rtcOffset = rtcOffset; -} - -// RTCNbNl̃Zbg -static inline void NSD_SetRTCClockAdjust( u8 rtcClockAdjust ) -{ - GetNSD()->option.rtcClockAdjust = rtcClockAdjust; -} - - -// RTCLastSetYearւ̃Zbg -static inline void NSD_SetRTCLastSetYear( u8 rtcLastSetYear ) -{ - GetNSD()->option.rtcLastSetYear = rtcLastSetYear; -} - - -// NV[PX̎NON,OFFtOZbgB -static inline void NSD_SetFlagAutoBoot( BOOL set ) -{ - GetNSD()->option.isAutoBoot = (u16)set; -} - -// obNCgON/OFFZbgB -static inline void NSD_SetFlagBacklightOff( BOOL set ) -{ - GetNSD()->option.isBacklightOff = (u16)set; -} - -// obNCgPxZbgB -static inline void NSD_SetBacklightBrightness( BOOL backlightBrightness ) -{ - GetNSD()->option.backlightBrightness = (u16)backlightBrightness; -} - -// NV[PXǂ̃tOZbgB -static inline void NSD_SetFlagInitialSequence( BOOL set ) -{ - GetNSD()->option.initialSequence = (u16)set; -} - -// af[^͍̓ς݃tOZbgB -static inline void NSD_SetFlagBirthday( BOOL set ) -{ - GetNSD()->option.isSetBirthday = (u16)set; -} - -// [U[J[͍̓ς݃tOZbgB -static inline void NSD_SetFlagUserColor( BOOL set ) -{ - GetNSD()->option.isSetUserColor = (u16)set; -} - -// TPLu[Vf[^͍̓ς݃tOZbgB -static inline void NSD_SetFlagTP( BOOL set ) -{ - GetNSD()->option.isSetTP = (u16)set; -} - -// R[h͍̓ς݃tOZbgB -static inline void NSD_SetFlagLanguage( BOOL set ) -{ - GetNSD()->option.isSetLanguage = (u16)set; -} - -// tE͍ς݃tOZbgB -static inline void NSD_SetFlagDateTime( BOOL set ) -{ - GetNSD()->option.isSetDateTime = (u16)set; -} - -// I[i[̃jbNl[͍̓ς݃tOZbgB -static inline void NSD_SetFlagNickname( BOOL set ) -{ - GetNSD()->option.isSetNickname = (u16)set; -} - -// GBAvȂǂPʃ\tggʃtOZbg -static inline void NSD_SetFlagGBUseTopLCD( BOOL set ) -{ - GetNSD()->option.isGBUseTopLCD = (u32)set; -} - -#endif // SDK_ARM9 - - -#ifdef __cplusplus -} -#endif - -#endif // SDK_CW -#endif // NTR_SETTINGS_H_ diff --git a/include/sysmenu/settings/common/TWLHWInfo.h b/include/sysmenu/settings/common/TWLHWInfo.h deleted file mode 100644 index 5b6fc2b3..00000000 --- a/include/sysmenu/settings/common/TWLHWInfo.h +++ /dev/null @@ -1,243 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: HWInfo.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - - -#ifndef TWL_HW_INFO_H_ -#define TWL_HW_INFO_H_ - - -#define HW_SIGNATURE_ENABLE_ // HWZLȀLRpCXCb` - -#include -#include - -#ifdef HW_SIGNATURE_ENABLE_ -#include -#endif // HW_SIGNATURE_ENABLE_ - -#ifdef __cplusplus -extern "C" { -#endif - - -// define data ------------------------------------ -#define TWL_HWINFO_FILE_LENGTH ( 16 * 1024 ) -#define TWL_HWINFO_NORMAL_PATH "nand:/sys/HWINFO_N.dat" -#define TWL_HWINFO_SECURE_PATH "nand:/sys/HWINFO_S.dat" - -#define TWL_HWINFO_NORMAL_VERSION 1 // HWtH[}bgo[W(JnNo.:1) -#define TWL_HWINFO_SECURE_VERSION 1 // HWtH[}bgo[W(JnNo.:1) -#define TWL_HWINFO_SERIALNO_LEN_AMERICA 11 // {̃VANo.MaxikČ11j -#define TWL_HWINFO_SERIALNO_LEN_OTHERS 12 // {̃VANo.Max -#define TWL_HWINFO_SERIALNO_LEN_MAX 15 // {̃VANo.Max(I[tȂ̂ŁA14bytes܂Ŋg) -#define TWL_HWINFO_CAMERA_LEN 1024 // J [TODO]TCY - - -// [WR[hi̎ЕʂɂȂ錩݁j -typedef enum TWLRegionCode { - TWL_REGION_JAPAN = 0, // NCL - TWL_REGION_AMERICA = 1, // NOA - TWL_REGION_EUROPE = 2, // NOE - TWL_REGION_AUSTRALIA = 3, // NAL - TWL_REGION_CHINA = 4, // IQue - TWL_REGION_KOREA = 5, // NOK - TWL_REGION_MAX -}TWLRegion; - -#define TWL_LANG_BITMAP_JAPAN ( ( 0x0001 << TWL_LANG_JAPANESE ) ) // JPNłł̑Ήrbg}bv -#define TWL_LANG_BITMAP_AMERICA ( ( 0x0001 << TWL_LANG_ENGLISH ) | \ - ( 0x0001 << TWL_LANG_FRENCH ) | \ - ( 0x0001 << TWL_LANG_SPANISH ) ) // AMEłł̑Ήrbg}bv -#define TWL_LANG_BITMAP_EUROPE ( ( 0x0001 << TWL_LANG_ENGLISH ) | \ - ( 0x0001 << TWL_LANG_FRENCH ) | \ - ( 0x0001 << TWL_LANG_GERMAN ) | \ - ( 0x0001 << TWL_LANG_ITALIAN ) | \ - ( 0x0001 << TWL_LANG_SPANISH ) ) // EURłł̑Ήrbg}bv -#define TWL_LANG_BITMAP_AUSTRALIA ( ( 0x0001 << TWL_LANG_ENGLISH ) ) // AUSłł̑Ήrbg}bv -#define TWL_LANG_BITMAP_CHINA ( ( 0x0001 << TWL_LANG_SIMP_CHINESE ) ) // CHIłł̑Ήrbg}bv -#define TWL_LANG_BITMAP_KOREA ( ( 0x0001 << TWL_LANG_KOREAN ) ) // KORłł̑Ήrbg}bv - - -// TWL_HWm[}ݒf[^iʼnی삷KvȂ́j -// {Aߋver݊lāAljȂjŁB -typedef struct TWLHWNormalInfo{ - u8 rtcAdjust; // RTCl - u8 camera[ TWL_HWINFO_CAMERA_LEN ]; // J -}TWLHWNormalInfo; // 1025byte - - -// TWL_HWZLAݒf[^iʼnی삷Kv́j -// {Aߋver݊lāAljȂjŁB -// SystemShared̈Ƀ[hĂ̂ŁATCYς͒ӂB -typedef struct TWLHWSecureInfo{ - u32 validLanguageBitmap; // {̂ŗLȌR[hrbgŕ\ - u8 region; // [W - u8 serialNo[ TWL_HWINFO_SERIALNO_LEN_MAX ]; // VANo.iI[tASCIIj -//------------------------------------------------------------- -// [TODO:]܂ł20bytes`[SystemSharedɃ[hB -//------------------------------------------------------------- - u8 launcherTitleID_Lo[ 4 ]; -}TWLHWSecureInfo; // 24bytes - - -#ifdef SDK_ARM9 - - -//========================================================= -// HW񃊁[hCg֐ -//========================================================= -// Normal - // ϐւ̃[h -extern TSFReadResult THW_ReadNormalInfo( void ); - // ϐ̒lCgiɃ[hĂKvj -extern BOOL THW_WriteNormalInfo( void ); - // ڒlw肵ẴCgiJpj -extern BOOL THW_WriteNormalInfoDirect( const TWLHWNormalInfo *pSrcInfo ); - // t@CJo[ -extern BOOL THW_RecoveryNormalInfo( TSFReadResult err ); - // LRead,Write֐ŎgpftHgl̃ZbgiJpj -extern void THW_SetDefaultNormalInfo( const TWLHWNormalInfo *pSrcInfo ); - -extern void THW_ClearNormalInfoDirect( TWLHWNormalInfo *pDstInfo ); -extern const TWLHWNormalInfo *THW_GetDefaultNormalInfo( void ); -extern const TWLHWNormalInfo *THW_GetNormalInfo( void ); - -// Secure - // ϐւ̃[h -extern TSFReadResult THW_ReadSecureInfo( void ); -extern TSFReadResult THW_ReadSecureInfo_NoCheck( void ); // m[`FbNŃ[h - // ϐ̒lCgiɃ[hĂKvj -extern BOOL THW_WriteSecureInfo( const u8 *pPrivKeyDER ); // pPrivKeyDERNULLȂ珐ȂŃCg - // ڒlw肵ẴCgiJpj -extern BOOL THW_WriteSecureInfoDirect( const TWLHWSecureInfo *pSrcInfo, const u8 *pPrivKeyDER ); // pPrivKeyDERNULLȂ珐ȂŃCg - // t@CJo[ -extern BOOL THW_RecoverySecureInfo( TSFReadResult err ); - // LRead,Write֐ŎgpftHgl̃ZbgiJpj -extern void THW_SetDefaultSecureInfo( const TWLHWSecureInfo *pSrcInfo ); - -extern void THW_ClearSecureInfoDirect( TWLHWSecureInfo *pDstInfo ); -extern const TWLHWSecureInfo *THW_GetDefaultSecureInfo( void ); -extern const TWLHWSecureInfo *THW_GetSecureInfo( void ); - -//========================================================= -// iLANZX֐gpstaticϐj -//========================================================= -extern TWLHWNormalInfo s_hwInfoN; -extern TWLHWSecureInfo s_hwInfoS; -#define GetHWN() ( &s_hwInfoN ) -#define GetHWS() ( &s_hwInfoS ) - - -//========================================================= -// f[^擾iTHW_ReadNormalInfo, THW_ReadSecureInfoœ[Nɓǂݏo̎擾j -//========================================================= - -// RTCItZbgl̎擾 -static inline u8 THW_GetRTCAdjust( void ) -{ - return GetHWN()->rtcAdjust; -} - - -// J̎擾 -static inline void THW_GetCameraInfo( u8 *pDst ) -{ - MI_CpuCopy8( GetHWN()->camera, pDst, TWL_HWINFO_CAMERA_LEN ); -} - - -// Jւ̃|C^̎擾 -static inline const u8 *THW_GetCameraInfoPtr( void ) -{ - return (const u8 *)GetHWN()->camera; -} - - -// rbg}bvl̎擾 -static inline u32 THW_GetValidLanguageBitmap( void ) -{ - return GetHWS()->validLanguageBitmap; -} - - -// [W̎擾B -static inline u8 THW_GetRegion( void ) -{ - return (u8)GetHWS()->region; -} - - -// {̃VANo.̎擾 -static inline void THW_GetSerialNo( u8 *pDst ) -{ - MI_CpuCopy8( &GetHWS()->serialNo, pDst, TWL_HWINFO_SERIALNO_LEN_MAX ); -} - - -// {̃VANo.ւ̃|C^̎擾 -static inline const u8 *THW_GetSerialNoPtr( void ) -{ - return (const u8 *)&GetHWS()->serialNo; -} - - -//========================================================= -// f[^ZbgiTSD_ReadSettingsœ[Nɓǂݏoւ̒lZbgj -//========================================================= - -// RTCItZbgl̃Zbg -static inline void THW_SetRTCAdjust( u8 adjust ) -{ - GetHWN()->rtcAdjust = adjust; -} - - -// J̃Zbg -static inline void THW_SetCameraInfo( const u8 *pCamera ) -{ - MI_CpuCopy8( pCamera, GetHWN()->camera, TWL_HWINFO_CAMERA_LEN ); -} - - -// rbg}bvl̃Zbg -static inline void THW_SetValidLanguageBitmap( u32 langBitmap ) -{ - GetHWS()->validLanguageBitmap = langBitmap; -} - - -// [W̃ZbgB -static inline void THW_SetRegion( u8 region ) -{ - GetHWS()->region = region; -} - -// {̃VANo.̃Zbg -static inline void THW_SetSerialNo( const u8 *pSrc ) -{ - MI_CpuCopy8( pSrc, &GetHWS()->serialNo, TWL_HWINFO_SERIALNO_LEN_MAX ); -} - - -#endif // SDK_ARM9 - - -#ifdef __cplusplus -} -#endif - -#endif // TWL_HWINFO_H_ diff --git a/include/sysmenu/settings/common/TWLSettings.h b/include/sysmenu/settings/common/TWLSettings.h deleted file mode 100644 index fbccfe73..00000000 --- a/include/sysmenu/settings/common/TWLSettings.h +++ /dev/null @@ -1,560 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: TWLSettings.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - - -#ifndef TWL_SETTINGS_H_ -#define TWL_SETTINGS_H_ -#if defined(SDK_CW) // TWLSettingsDataɃrbgtB[hgĂ̂ŁARpCˑŕs”\B - // āACWȊÕRpC̏ꍇ́Ãwb_𖳌ɂăG[o悤ɂčĊmFB - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -// define data ------------------------------------ -#define TWL_SETTINGS_FILE_LENGTH ( 16 * 1024 ) -#define TWL_SETTINGS_DATA_VERSION 1 // TWLݒf[^tH[}bgo[W(JnNo.:1) -// I[i[ -#define TWL_NICKNAME_LENGTH NTR_NICKNAME_LENGTH // jbNl[ -#define TWL_NICKNAME_BUFFERSIZE ( ( TWL_NICKNAME_LENGTH + 1 ) * 2 ) // jbNl[obt@TCY -#define TWL_COMMENT_LENGTH NTR_COMMENT_LENGTH // Rg -#define TWL_COMMENT_BUFFERSIZE ( ( TWL_COMMENT_LENGTH + 1 ) * 2 ) // Rgobt@TCY -#define TWL_FAVORITE_COLOR_MAX_NUM NTR_FAVORITE_COLOR_MAX_NUM // DȐF̍ő吔 -// obNCgPx -#define TWL_BACKLIGHT_LEVEL_MAX 31 // TWLobNCgőPxx [TODO:]ŏIIɂ22ɂ\B -// yA^Rg[ -#define TWL_PARENTAL_CONTROL_RATING_AGE_MAX 31 -#define TWL_PARENTAL_CONTROL_PASSWORD_LENGTH 4 // Ïؔԍ̌ -#define TWL_PARENTAL_CONTROL_PASSWORD_DEFAULT "0000" // ftHgÏؔԍ -#define TWL_PARENTAL_CONTROL_SECRET_ANSWER_LENGTH_MIN 6 // 閧̎̉񓚁AUTF-16ōŏ MIN -#define TWL_PARENTAL_CONTROL_SECRET_ANSWER_LENGTH_MAX 32 // 閧̎̉񓚁AUTF-16ōő MAX -// CXg[E\tg -#define TWL_FREE_SOFT_BOX_COUNT_MAX 35 // NANDAv̍őBox, - freeSoftBoxCountŃCXg[Soft - - -// R[h -// BƖkĂ̕\eLXg̈Ⴂ́A[WƌR[h𕹂Ĕf -typedef enum TWLLangCode{ - TWL_LANG_JAPANESE = 0, // { - TWL_LANG_ENGLISH = 1, // p - TWL_LANG_FRENCH = 2, // tX - TWL_LANG_GERMAN = 3, // hCc - TWL_LANG_ITALIAN = 4, // C^A - TWL_LANG_SPANISH = 5, // XyC - TWL_LANG_SIMP_CHINESE = 6, // iȑ̎j - TWL_LANG_KOREAN = 7, // ؍ -// TWL_LANG_DUTCH = 8, // I_iWiił͑݁j -// TWL_LANG_TRAD_CHINESE = 9, // piɑ̎jiWiił͑݁j - - TWL_LANG_CODE_MAX -}TWLLangCode; - -// t -#define TWLDate NTRDate - -// A[ -#define TWLAlarm NTRAlarm - - -// TPLu[ViNTRƂ̈Ⴂ́A\̈悠j -typedef struct TWLTPCalibData { - NTRTPCalibData data; // TPLu[Vf[^ - u8 rsv[ 8 ]; -}TWLTPCalibData; - - -// I[i[ -typedef struct TWLOwnerInfo{ - u8 userColor : 4; // DȐF - u8 rsv : 4; // \B - u8 pad; // pfBO - TWLDate birthday; // N - u16 nickname[ TWL_NICKNAME_LENGTH + 1 ]; // jbNl[iI[j - u16 comment[ TWL_COMMENT_LENGTH + 1 ]; // RgiI[j -}TWLOwnerInfo; // 80byte - - -// yA^Rg[ -// Rc -typedef enum TWLRatingOgn { - TWL_RATING_OGN_CERO = 0, // { - TWL_RATING_OGN_ESRB = 1, // AJ - TWL_RATING_OGN_USK = 2, // hCc - TWL_RATING_OGN_PEGI_GENERAL = 3, // B - TWL_RATING_OGN_PEGI_PORTUGAL = 4, // |gK - TWL_RATING_OGN_PEGI_BBFC = 5, // CMX - TWL_RATING_OGN_AGCB = 6, // I[XgA - TWL_RATING_OGN_OFLC = 7, // j[W[h - TWL_RATING_OGN_GRB = 8, // ؍ - TWL_RATING_OGN_MAX = 8 -}TWLRatingOgn; - -// f[^ -typedef struct TWLParentalControl { - TWLRatingOgn ogn; // Rc -// u8 flags; // Wiił́APARENTAL_CONTROL_USEtÔ --> isSetParentalControl ̂ŌKvȂ - u8 ratingAge; // [eBOiNjl - char password[ TWL_PARENTAL_CONTROL_PASSWORD_LENGTH + 1 ]; // ÏؔԍAI[R[h - u8 secretQuestion; // 閧̎╶ ID - u8 rsv_A; - u16 secretAnswer[ TWL_PARENTAL_CONTROL_SECRET_ANSWER_LENGTH_MAX + 1 ]; // UTF16,閧̎ւ̉񓚁AI[R[h - u16 secretAnswerLength; // 閧̎ւ̉񓚕iWiiu16,LENGTH_MAX ێł邩u8ł̂ł́Hj -// u8 rsv_B[ 16 ]; // 폜\i16oCg̃[eBO‚̂̓AvROMwb_j -}TWLParentalControl; - - -// TWLݒf[^i{Aߋver݊lāAljȂjŁBj -typedef struct TWLSettingsData{ - struct flags { - u32 initialSequence : 1; // NV[PXH - u32 isSetCountry : 1; // R[hݒς݁H - u32 isSetLanguage : 1; // ݒς݁H - u32 isSetDateTime : 1; // tEݒς݁H - u32 isSetNickname : 1; // jbNl[ݒς݁H - u32 isSetUserColor : 1; // [U[J[ݒς݁H - u32 isSetBirthday : 1; // aݒς݁H - u32 isSetTP : 1; // TPݒς݁H - u32 isSetParentalControl : 1; // p^Rg[ݒς݁H -// u32 isSetBrowserRestriction : 1; // Wiiő݁BtuEU𐧌邩ǂBTWLł͌B - u32 isAgreeEURA : 1; // EURAӍς݁H - // WiFiݒ͕ʃf[^Ȃ̂ŁAɐݒς݃tO͗pӂȂB - u32 isGBUseTopLCD : 1; // PʂGBQ[ɏʂgH - u32 isAvailableWireless : 1; // W[RFjbg̗L^ - u32 isAvailableBatteryExtension : 1; // obeGNXeV[h̗L^ - u32 rsv : 19; - }flags; - u8 rsv2[ 2 ]; // \ - u8 country; // R[h - u8 language; // (NTRƂ̈Ⴂ́Af[^TCY8bit) - u8 backLightBrightness; // obNCgPx(NTRƂ̈Ⴂ́Af[^TCY8bit) - u8 lastTimeBootSoftIndex; // ON\tg̃CfbNXԍ - u8 freeSoftBoxCount; // CXg[”\NANDAv - u8 rtcLastSetYear; // RTC̑OݒN - s64 rtcOffset; // RTCݒ莞̃ItZbgli[U[RTCݒύXxɂ̒lɉđ܂Bj - TWLOwnerInfo owner; // I[i[ - TWLAlarm alarm; // A[ - TWLTPCalibData tp; // ^b`plLu[Vf[^ - TWLParentalControl parental; -}TWLSettingsData; // xxbyte - - -#ifdef SDK_ARM9 - -//========================================================= -// O[oϐ -//========================================================= -extern TWLSettingsData s_settings; -#define GetTSD() ( &s_settings ) - -//========================================================= -// NANDt@Cւ̃[hCg֐ -//========================================================= - // ϐւ̃[h -extern BOOL TSD_ReadSettings( void ); - // ϐ̒l̃CgiɃ[hĂKvj -extern BOOL TSD_WriteSettings( void ); - // ڒlw肵ẴCgiJpj -extern BOOL TSD_WriteSettingsDirect( const TWLSettingsData *pSrc ); - // ϐ̒l̃NA -extern void TSD_ClearSettings( void ); - - -//========================================================= -// f[^擾iTSD_ReadSettingsœ[Nɓǂݏo̎擾j -//========================================================= - -// R[h̎擾B -static inline TWLCountryCode TSD_GetCountry( void ) -{ - return (TWLCountryCode)GetTSD()->country; -} - -// R[h̎擾 -static inline TWLLangCode TSD_GetLanguage( void ) -{ - return (TWLLangCode)GetTSD()->language; -} - -// obNCgPx擾 -static inline int TSD_GetBacklightBrightness( void ) -{ - return (int)GetTSD()->backLightBrightness; -} - -// ON\tg̃CfbNX̎擾 -static inline u8 TSD_GetLastTimeBootSoftIndex( void ) -{ - return GetTSD()->lastTimeBootSoftIndex; -} - -// t[\tgBOX̎擾 -static inline u8 TSD_GetFreeSoftBoxCount( void ) -{ - return GetTSD()->freeSoftBoxCount; -} - -// RTC̑OZbgN̎擾 -static inline u8 TSD_GetRTCLastSetYear( void ) -{ - return GetTSD()->rtcLastSetYear; -} - -// RTCItZbgl̎擾 -static inline s64 TSD_GetRTCOffset( void ) -{ - return GetTSD()->rtcOffset; -} - -// I[i[Ŝ̎擾B -static inline void TSD_GetOwnerInfo( TWLOwnerInfo *pDst ) -{ - MI_CpuCopy8( &GetTSD()->owner, pDst, sizeof(TWLOwnerInfo) ); -} - -// I[i[Ŝւ̃|C^̎擾B -static inline const TWLOwnerInfo *TSD_GetOwnerInfoPtr( void ) -{ - return (const TWLOwnerInfo *)&GetTSD()->owner; -} - -// DȐF̎擾B -static inline u8 TSD_GetUserColor( void ) -{ - return (u8)GetTSD()->owner.userColor; -} - -// a̎擾B -static inline void TSD_GetBirthday( TWLDate *pDst ) -{ - MI_CpuCopy8( &GetTSD()->owner.birthday, pDst, sizeof(TWLDate) ); -} - -// aւ̃|C^̎擾B -static inline const TWLDate *TSD_GetBirthdayPtr( void ) -{ - return (const TWLDate *)&GetTSD()->owner.birthday; -} - -// jbNl[̎擾B -static inline void TSD_GetNickname( u16 *pDst ) -{ - MI_CpuCopy16( GetTSD()->owner.nickname, pDst, TWL_NICKNAME_BUFFERSIZE ); -} - -// jbNl[ւ̃|C^̎擾B -static inline const u16 *TSD_GetNicknamePtr( void ) -{ - return (const u16 *)&GetTSD()->owner.nickname; -} - -// Rg̎擾B -static inline void TSD_GetComment( u16 *pDst ) -{ - MI_CpuCopy16( GetTSD()->owner.comment, pDst, TWL_COMMENT_BUFFERSIZE ); -} - -// Rgւ̃|C^̎擾B -static inline const u16 *TSD_GetCommentPtr( void ) -{ - return (const u16 *)&GetTSD()->owner.comment; -} - -// A[̎擾B -static inline void TSD_GetAlarmData( TWLAlarm *pAlarm ) -{ - MI_CpuCopy8( &GetTSD()->alarm, pAlarm, sizeof(TWLAlarm) ); -} - -// A[ւ̃|C^̎擾B -static inline const TWLAlarm *TSD_GetAlarmDataPtr( void ) -{ - return (const TWLAlarm *)&GetTSD()->alarm; -} - -// ^b`plLu[Vf[^̎擾B -static inline void TSD_GetTPCalibration( TWLTPCalibData *pDst ) -{ - MI_CpuCopy8( &GetTSD()->tp, pDst, sizeof(TWLTPCalibData) ); -} - -// ^b`plLu[Vf[^ւ̃|C^̎擾B -static inline const TWLTPCalibData *TSD_GetTPCalibrationPtr( void ) -{ - return (const TWLTPCalibData *)&GetTSD()->tp; -} - -// NV[PXH -static inline BOOL TSD_IsInitialSequence( void ) -{ - return (BOOL)GetTSD()->flags.initialSequence; -} - -// R[h͍ς݁H -static inline BOOL TSD_IsSetCountry( void ) -{ - return (BOOL)GetTSD()->flags.isSetCountry; -} - -// R[h͍ς݁H -static inline BOOL TSD_IsSetLanguage( void ) -{ - return (BOOL)GetTSD()->flags.isSetLanguage; -} - -// tEf[^͍ς݁H -static inline BOOL TSD_IsSetDateTime( void ) -{ - return (BOOL)GetTSD()->flags.isSetDateTime; -} - -// jbNl[͍ς݁H -static inline BOOL TSD_IsSetNickname( void ) -{ - return (BOOL)GetTSD()->flags.isSetNickname; -} - -// [U[J[͍ς݁H -static inline BOOL TSD_IsSetUserColor( void ) -{ - return (BOOL)GetTSD()->flags.isSetUserColor; -} - -// a͍ς݁H -static inline BOOL TSD_IsSetBirthday( void ) -{ - return (BOOL)GetTSD()->flags.isSetBirthday; -} - -// TPLu[Vf[^͍ς݁H -static inline BOOL TSD_IsSetTP( void ) -{ - return (BOOL)GetTSD()->flags.isSetTP; -} - -// p^Rg[͍ς݁H -static inline BOOL TSD_IsSetParentalControl( void ) -{ - return (BOOL)GetTSD()->flags.isSetParentalControl; -} - -// EURAr[AӍς݁H -static inline BOOL TSD_IsAgreeEURA( void ) -{ - return (BOOL)GetTSD()->flags.isAgreeEURA; -} - -// GBAvȂǂPʃ\tgĝ͏ʁH -static inline BOOL TSD_IsGBUseTopLCD( void ) -{ - return (BOOL)GetTSD()->flags.isGBUseTopLCD; -} - -// gp”\H -static inline BOOL TSD_IsAvailableWireless( void ) -{ - return (BOOL)GetTSD()->flags.isAvailableWireless; -} - -// obeGNXeV[hLH -static inline BOOL TSD_IsAvailableBatteryExtension( void ) -{ - return (BOOL)GetTSD()->flags.isAvailableBatteryExtension; -} - - -//========================================================= -// f[^ZbgiTSD_ReadSettingsœ[Nɓǂݏoւ̒lZbgj -//========================================================= - -// R[h̃ZbgB -static inline void TSD_SetCountry( TWLCountryCode country ) -{ - GetTSD()->country = (u8)country; -} - -// R[h̃Zbg -static inline void TSD_SetLanguage( TWLLangCode language ) -{ - GetTSD()->language = language; -} - -// obNCgPxZbgB -static inline void TSD_SetBacklightBrightness( u8 backLightBrightness ) -{ - GetTSD()->backLightBrightness = backLightBrightness; -} - -// ON\tg̃CfbNXZbg -static inline void TSD_SetLastTimeBootSoftIndex( u8 index ) -{ - GetTSD()->lastTimeBootSoftIndex = index; -} - -// t[\tgBOX̃Zbg -static inline void TSD_SetFreeSoftBoxCount( u8 count ) -{ - GetTSD()->freeSoftBoxCount = count; -} - -// RTCLastSetYearւ̃Zbg -static inline void TSD_SetRTCLastSetYear( u8 rtcLastSetYear ) -{ - GetTSD()->rtcLastSetYear = rtcLastSetYear; -} - -// RTCItZbgl̃Zbg -static inline void TSD_SetRTCOffset( s64 rtcOffset ) -{ - GetTSD()->rtcOffset = rtcOffset; -} - -// I[i[Ŝ̃ZbgB -static inline void TSD_SetOwnerInfo( const TWLOwnerInfo *pOwner ) -{ - MI_CpuCopy16( pOwner, &GetTSD()->owner, sizeof(TWLOwnerInfo) ); -} - -// [U[J[̃ZbgB -static inline void TSD_SetUserColor( u8 userColor ) -{ - GetTSD()->owner.userColor = userColor; -} - -// ãZbgB -static inline void TSD_SetBirthday( const TWLDate *pSrc ) -{ - MI_CpuCopy8( pSrc, &GetTSD()->owner.birthday, sizeof(TWLDate) ); -} - -// jbNl[̃ZbgB -static inline void TSD_SetNickname( const u16 *pSrc ) -{ - MI_CpuCopy16( pSrc, GetTSD()->owner.nickname, TWL_NICKNAME_BUFFERSIZE ); -} - -// Rg̃ZbgB -static inline void TSD_SetComment( const u16 *pSrc ) -{ - MI_CpuCopy16( pSrc, GetTSD()->owner.comment, TWL_COMMENT_BUFFERSIZE ); -} - -// A[̃ZbgB -static inline void TSD_SetAlarmData( const TWLAlarm *pAlarm ) -{ - MI_CpuCopy16( pAlarm, &GetTSD()->alarm, sizeof(TWLAlarm) ); -} - -// ^b`plLu[Vf[^̃ZbgB -static inline void TSD_SetTPCalibration( const TWLTPCalibData *pTPCalib ) -{ - MI_CpuCopy16( pTPCalib, &GetTSD()->tp, sizeof(TWLTPCalibData) ); -} - -// NV[PXǂ̃tOZbgB -static inline void TSD_SetFlagInitialSequence( BOOL initialSequence ) -{ - GetTSD()->flags.initialSequence = (u32)initialSequence; -} - -// R[h͍̓ς݃tOZbgB -static inline void TSD_SetFlagCountry( BOOL set ) -{ - GetTSD()->flags.isSetCountry = (u32)set; -} - -// R[h͍̓ς݃tOZbgB -static inline void TSD_SetFlagLanguage( BOOL set ) -{ - GetTSD()->flags.isSetLanguage = (u32)set; -} - -// tE͍̓ς݃tOZbgB -static inline void TSD_SetFlagDateTime( BOOL set ) -{ - GetTSD()->flags.isSetDateTime = (u32)set; -} - -// jbNl[͍̓ς݃tOZbgB -static inline void TSD_SetFlagNickname( BOOL set ) -{ - GetTSD()->flags.isSetNickname = (u32)set; -} - -// [U[J[͍̓ς݃tOZbgB -static inline void TSD_SetFlagUserColor( BOOL set ) -{ - GetTSD()->flags.isSetUserColor = (u32)set; -} - -// af[^͍̓ς݃tOZbgB -static inline void TSD_SetFlagBirthday( BOOL set ) -{ - GetTSD()->flags.isSetBirthday = (u32)set; -} - -// TPLu[V͍̓ς݃tOZbgB -static inline void TSD_SetFlagTP( BOOL set ) -{ - GetTSD()->flags.isSetTP = (u32)set; -} - -// p^Rg[͍̓ς݃tOZbgB -static inline void TSD_SetFlagParentalControl( BOOL set ) -{ - GetTSD()->flags.isSetNickname = (u32)set; -} - -// EURAr[AӍς݃tOZbgB -static inline void TSD_SetFlagAgreeEURA( BOOL set ) -{ - GetTSD()->flags.isSetNickname = (u32)set; -} - -// GBAvȂǂPʃ\tggʃtOZbg -static inline void TSD_SetFlagGBUseTopLCD( BOOL set ) -{ - GetTSD()->flags.isGBUseTopLCD = (u32)set; -} - -// gp”ۃtOZbg -static inline void TSD_SetFlagAvailableWireless( BOOL set ) -{ - GetTSD()->flags.isAvailableWireless = set; -} - -// obeGNXeV[hL^tOZbg -static inline void TSD_SetFlagAvailableBatteryExtension( BOOL set ) -{ - GetTSD()->flags.isAvailableBatteryExtension = set; -} - - -#endif // SDK_ARM9 - - - -#ifdef __cplusplus -} -#endif - -#endif // SDK_CW -#endif // TWL_SETTINGS_H_ diff --git a/include/sysmenu/settings/common/TWLStoreFile.h b/include/sysmenu/settings/common/TWLStoreFile.h deleted file mode 100644 index 9405dc55..00000000 --- a/include/sysmenu/settings/common/TWLStoreFile.h +++ /dev/null @@ -1,93 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: TWLFileStore.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - - -#ifndef TWL_STORE_FILE_H_ -#define TWL_STORE_FILE_H_ -#if defined(SDK_CW) - - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -// define data ------------------------------------ -#define TSF_VERSION_TERMINATOR 0xff // versionI[ -#define SAVE_COUNT_MAX 0x80 // saveCount̍ől -#define SAVE_COUNT_MASK 0x7f // saveCount̒l͈̔͂}XNB(0x00-0x7fj - -// TSF[h -typedef enum TSFReadResult { - TSF_READ_RESULT_SUCCEEDED = 0, - TSF_READ_RESULT_ERROR_FILE_EXIST = 1, - TSF_READ_RESULT_ERROR_FILE_LENGTH = 2, - TSF_READ_RESULT_ERROR_DATA = 3 -}TSFReadResult; - - -// TSFANZXpp[^ -typedef struct TSFParam { // TSF ( TWL Store File ) - u32 dataLength; // ۑf[^ - u32 fileLength; // ۑt@C - const u8 *conpatibleVerList; // ߋver.̌݊ver.XgBTSF_VERSION_TERMINATORŏI[B - void (*pClearFunc)( void *pDst ); // ۑf[^̒lNA֐ - BOOL (*pCheckDigestFunc)( void *pTgt, u32 len, u8 *pDigest ); // _CWFXg`FbN֐ւ̃|C^ - BOOL (*pCheckValueFunc)( void *pTgt ); // l`FbN֐ւ̃|C^ -}TSFParam; - - -// TSFwb_ -typedef struct TSFHeader{ - union digest { - u8 sha1[ SVC_SHA1_DIGEST_SIZE ]; // SHA-1_CWFXg - u8 rsa[ RSA_KEY_LENGTH ]; // RSA - u8 dst[ RSA_KEY_LENGTH ]; // ]p̍őTCYvf - }digest; - u8 version; // f[^ver. - u8 saveCount; // Z[uJEgi~[OȂt@C͎gpȂj - u8 rsv[2]; // \ - u32 bodyLength; // f[^ -}TSFHeader; // 134bytes - -// uTSFHeader+f[^{́v̌`Ńt@Cɕۑ܂B - -#ifdef SDK_ARM9 - -//========================================================= -// NANDt@Cւ̃[hCg֐ -//========================================================= - -// TSFtH[}bg̃t@C̃[h -extern TSFReadResult TSF_ReadFile ( char *pPath, void *pDstBody, const TSFParam *pParam, u8 *pSaveCount ); -// TSFtH[}bg̃t@C̃CgipSaveCountNULL^ꍇ́AsaveCount"0"Œɂ܂Bj -extern BOOL TSF_WriteFile( char *pPath, TSFHeader *pHeader, const void *pSrcBody, u8 *pSaveCount ); -// TSFtH[}bg̃t@C̃Jo -extern BOOL TSF_RecoveryFile( TSFReadResult err, char *pPath, u32 fileLength ); - -#endif // SDK_ARM9 - - -#ifdef __cplusplus -} -#endif - -#endif // SDK_CW -#endif // TWL_STORE_FILE_H_ diff --git a/include/sysmenu/settings/common/countryCode.h b/include/sysmenu/settings/common/countryCode.h deleted file mode 100644 index 18cb3836..00000000 --- a/include/sysmenu/settings/common/countryCode.h +++ /dev/null @@ -1,198 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: countryCode.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2007-11-06#$ - $Rev: 104 $ - $Author: yosiokat $ - *---------------------------------------------------------------------------*/ - - -#ifndef COUNTRY_CODE_H_ -#define COUNTRY_CODE_H_ -#if defined(SDK_CW) // NTRConfigDataɃrbgtB[hgĂ̂ŁARpCˑŕs”\B - // āACWȊÕRpC̏ꍇ́Ãwb_𖳌ɂăG[o悤ɂčĊmFB - -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -// define data ------------------------------------ - - -// ݒR[h -typedef enum TWLCountryCode{ - TWL_COUNTRY_UNDEFINED = 0, // ݒ - - // JPN[W - TWL_COUNTRY_JAPAN = 1, // { - - // USA[W - TWL_COUNTRY_Anguilla = 8, // AM - TWL_COUNTRY_ANTIGUA_AND_BARBUDA, // AeBOAEo[u[_ - TWL_COUNTRY_ARGENTINA = 10, // A[` - TWL_COUNTRY_ARUBA, // Ao - TWL_COUNTRY_BAHAMAS, // on} - TWL_COUNTRY_BARBADOS, // oohX - TWL_COUNTRY_BELIZE, // x[Y - TWL_COUNTRY_BOLIVIA, // {rA - TWL_COUNTRY_BRAZIL, // uW - TWL_COUNTRY_BRITISH_VIRGIN_ISLANDS, // p̃@[W - TWL_COUNTRY_CANADA, // Ji_ - TWL_COUNTRY_CAYMAN_ISLANDS, // PC} - TWL_COUNTRY_CHILE = 20, // ` - TWL_COUNTRY_COLOMBIA, // RrA - TWL_COUNTRY_COSTA_RICA, // RX^J - TWL_COUNTRY_DOMINICA, // h~jJ - TWL_COUNTRY_DOMINICAN_REPUBLIC, // h~jJa - TWL_COUNTRY_ECUADOR, // GNAh - TWL_COUNTRY_EL_SALVADOR, // GToh - TWL_COUNTRY_FRENCH_GUIANA, // tX̃MAi - TWL_COUNTRY_GRENADA, // Oi_ - TWL_COUNTRY_GUADELOUPE, // OAh[v - TWL_COUNTRY_GUATEMALA = 30, // OAe} - TWL_COUNTRY_GUYANA, // KCAi - TWL_COUNTRY_HAITI, // nC` - TWL_COUNTRY_HONDURAS, // zWX - TWL_COUNTRY_JAMAICA, // W}CJ - TWL_COUNTRY_MARTINIQUE, // }eBj[N - TWL_COUNTRY_MEXICO, // LVR - TWL_COUNTRY_MONTSERRAT, // gZg - TWL_COUNTRY_NETHERLANDS_ANTILLES, // I_̃AeB - TWL_COUNTRY_NICARAGUA, // jJOA - TWL_COUNTRY_PANAMA = 40, // pi} - TWL_COUNTRY_PARAGUAY, // pOAC - TWL_COUNTRY_PERU, // y[ - TWL_COUNTRY_ST_KITTS_AND_NEVIS, // ZgLbcElCrX - TWL_COUNTRY_ST_LUCIA, // ZgVA - TWL_COUNTRY_ST_VINCENT_AND_THE_GRENADINES, // ZgrZgEOifB[ - TWL_COUNTRY_SURINAME, // Xi - TWL_COUNTRY_TRINIDAD_AND_TOBAGO, // gj_[hEgoS - TWL_COUNTRY_TURKS_AND_CAICOS_ISLANDS, // ^[NXEJCRX - TWL_COUNTRY_UNITED_STATES, // AJ - TWL_COUNTRY_URUGUAY = 50, // EOAC - TWL_COUNTRY_US_VIRGIN_ISLANDS, // ė̃o[W - TWL_COUNTRY_VENEZUELA, // xlYG - - // EUR, NAL [W - TWL_COUNTRY_ALBANIA = 64, // AojA - TWL_COUNTRY_AUSTRALIA, // I[XgA - TWL_COUNTRY_AUSTRIA, // I[XgA - TWL_COUNTRY_BELGIUM, // xM[ - TWL_COUNTRY_BOSNIA_AND_HERZEGOVINA, // {XjAEwcFSri - TWL_COUNTRY_BOTSWANA, // {ci - TWL_COUNTRY_BULGARIA = 70, // uKA - TWL_COUNTRY_CROATIA, // NA`A - TWL_COUNTRY_CYPRUS, // LvX - TWL_COUNTRY_CZECH_REPUBLIC, // `FR - TWL_COUNTRY_DENMARK, // f}[N - TWL_COUNTRY_ESTONIA, // GXgjA - TWL_COUNTRY_FINLAND, // tBh - TWL_COUNTRY_FRANCE, // tX - TWL_COUNTRY_GERMANY, // hCc - TWL_COUNTRY_GREECE, // MV - TWL_COUNTRY_HUNGARY = 80, // nK[ - TWL_COUNTRY_ICELAND, // ACXh - TWL_COUNTRY_IRELAND, // ACh - TWL_COUNTRY_ITALY, // C^A - TWL_COUNTRY_LATVIA, // grA - TWL_COUNTRY_LESOTHO, // \g - TWL_COUNTRY_LIECHTENSTEIN, // qeV^C - TWL_COUNTRY_LITHUANIA, // gAjA - TWL_COUNTRY_LUXEMBOURG, // NZuN - TWL_COUNTRY_MACEDONIA, // }PhjA - TWL_COUNTRY_MALTA = 90, // }^ - TWL_COUNTRY_MONTENEGRO, // elO - TWL_COUNTRY_MOZAMBIQUE, // Ur[N - TWL_COUNTRY_NAMIBIA, // i~rA - TWL_COUNTRY_NETHERLANDS, // I_ - TWL_COUNTRY_NEW_ZEALAND, // j[W[h - TWL_COUNTRY_NORWAY, // mEF[ - TWL_COUNTRY_POLAND, // |[h - TWL_COUNTRY_PORTUGAL, // |gK - TWL_COUNTRY_ROMANIA, // [}jA - TWL_COUNTRY_RUSSIA = 100, // VA - TWL_COUNTRY_SERBIA, // ZrA - TWL_COUNTRY_SLOVAKIA, // XoLA - TWL_COUNTRY_SLOVENIA, // XxjA - TWL_COUNTRY_SOUTH_AFRICA, // AtJ - TWL_COUNTRY_SPAIN, // XyC - TWL_COUNTRY_SWAZILAND, // XWh - TWL_COUNTRY_SWEDEN, // XEF[f - TWL_COUNTRY_SWITZERLAND, // XCX - TWL_COUNTRY_TURKEY, // gR - TWL_COUNTRY_UNITED_KINGDOM = 110, // CMX - TWL_COUNTRY_ZAMBIA, // UrA - TWL_COUNTRY_ZIMBABWE, // WouG - - // TWN[W - TWL_COUNTRY_TAIWAN = 128, // p - - // KOR[W - TWL_COUNTRY_SOUTH_KOREA = 136, // ؍ - - // HKG[WiWii̍Xgɑ݁j - TWL_COUNTRY_HONG_KONG = 144, // zR - TWL_COUNTRY_MACAU, // }JI - - // ASI[WiWii̍Xgɑ݁j - TWL_COUNTRY_INDONESIA = 152, // ChlVA - - // USA[W - TWL_COUNTRY_SINGAPORE = 153, // VK|[ - - // ASI[WiĂсj - TWL_COUNTRY_THAILAND = 154, // ^C - TWL_COUNTRY_PHILIPPINES, // tBs - TWL_COUNTRY_MALAYSIA, // }[VA - - // `[WiIQue[WHj - TWL_COUNTRY_CHINA = 160, // - - // USA[W - TWL_COUNTRY_UAE = 168, // Au񒷍AM - - // `[W - TWL_COUNTRY_INDIA = 169, // Ch - TWL_COUNTRY_EGYPT = 170, // GWvg - TWL_COUNTRY_OMAN, // I}[ - TWL_COUNTRY_QATAR, // J^[ - TWL_COUNTRY_KUWAIT, // NEF[g - TWL_COUNTRY_SAUDI_ARABIA, // TEWArA - TWL_COUNTRY_SYRIA, // VA - TWL_COUNTRY_BAHRAIN, // o[[ - TWL_COUNTRY_JORDAN, // _ - - TWL_COUNTRY_OTHERS = 254, - TWL_COUNTRY_UNKNOWN = 255, - - TWL_COUNTRY_MAX - -}TWLCountryCode; - -// ΉJg[R[hBJnʒu16rbgVtĝƏIʒuorł܂Ƃ߂ -#define TWL_COUNTRY_MAPPING_JAPAN (u32)( TWL_COUNTRY_JAPAN << 16| TWL_COUNTRY_JAPAN ) // JPNłł̑ΉJg[R[h -#define TWL_COUNTRY_MAPPING_AMERICA (u32)( TWL_COUNTRY_Anguilla << 16| TWL_COUNTRY_VENEZUELA ) // AMEłł̑ΉJg[R[h -#define TWL_COUNTRY_MAPPING_EUROPE (u32)( TWL_COUNTRY_ALBANIA << 16| TWL_COUNTRY_ZIMBABWE ) // EURłł̑ΉJg[R[h -#define TWL_COUNTRY_MAPPING_AUSTRALIA (u32)( TWL_COUNTRY_ALBANIA << 16| TWL_COUNTRY_ZIMBABWE ) // AUSłł̑ΉJg[R[h -#define TWL_COUNTRY_MAPPING_CHINA (u32)( TWL_COUNTRY_CHINA << 16| TWL_COUNTRY_CHINA ) // CHIłł̑ΉJg[R[h -#define TWL_COUNTRY_MAPPING_KOREA (u32)( TWL_COUNTRY_SOUTH_KOREA << 16| TWL_COUNTRY_SOUTH_KOREA ) // KORłł̑ΉJg[R[h - - -#ifdef __cplusplus -} -#endif - -#endif // SDK_CW -#endif // COUNTRY_CODE_H_ diff --git a/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h b/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h index 0116af03..486a0e1e 100644 --- a/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h +++ b/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h @@ -22,7 +22,6 @@ #include #include #include -#include #include #include @@ -104,11 +103,6 @@ extern BOOL SYSM_IsValidTSD( void ); // TWL extern void SYSM_SetValidTSD( BOOL valid ); // TWLݒf[^̗L^tOݒ肷B extern const LauncherParamBody *SYSM_GetLauncherParamBody( void ); // Zbgp[^̎擾 -// {̐ݒf[^ANZX -extern BOOL SYSM_ReadTWLSettingsFile( void ); // TWLݒf[^̃[h -extern BOOL SYSM_WriteTWLSettingsFile( void ); // TWLݒf[^̃Cg -extern void SYSM_VerifyAndRecoveryNTRSettings( void ); - // NintendoS extern BOOL SYSM_CheckNintendoLogo( u16 *pLogoData ); // NintendoSf[^̃`FbN extern void SYSM_LoadNintendoLogo2D( u16 *pLogoData, u16 *pDst, int paletteColorIndex ); // NintendoSf[^OBJ_2D`Ń[hipTempBufferɂ0x700bytesKv)