From ce5930f2972f4a292a8bcb8871478e4750cee3cb Mon Sep 17 00:00:00 2001 From: "e.bovendeur" Date: Mon, 22 Feb 2010 21:29:47 +0000 Subject: [PATCH] * Added Hermes rev5 support! (issue 1438) * Updated to Hermes usb storage code * Fixed some bugs in ntfs while writing timestamps, resulting in different hashes (dimok) * Fixed codedump when switching partitions (issue 1454) * Fixed graphical glitch on 4:3 screens, where the prefetch cover was visible in the coverwall * Fixed a bug with installing games, due to the switch to C++ (dimok) --- HBC/META.XML | 4 +- data/ehcmodule_frag_v5.bin | Bin 52120 -> 27774 bytes data/fatffs_module.bin | Bin 0 -> 58212 bytes gui.pnproj | 2 +- source/fatmounter.c | 28 +- source/libfat/disc_fat.c | 4 +- source/libntfs/inode.c | 70 +- source/libntfs/ntfsinternal.c | 5 +- source/libwbfs/libwbfs.c | 1 + source/libwbfs/libwbfs.h | 20 +- source/libwiigui/gui_gamegrid.cpp | 6 +- source/main.cpp | 6 +- source/menu/menu_format.cpp | 4 +- source/menu/menu_install.cpp | 6 +- source/mload/fatffs_module.c | 2127 ----------------- source/mload/fatffs_module.h | 3 - source/mload/mload_modules.c | 4 +- source/mload/mload_modules.h | 2 +- source/prompts/ProgressWindow.cpp | 11 +- source/prompts/PromptWindows.cpp | 2 +- source/settings/Settings.cpp | 1 + source/settings/cfg.c | 12 +- source/sys.cpp | 8 +- source/usbloader/disc.h | 3 +- source/usbloader/frag.c | 2 +- source/usbloader/partition_usbloader.c | 12 +- source/usbloader/spinner.c | 17 + source/usbloader/spinner.h | 15 + source/usbloader/usbstorage.c | 382 --- source/usbloader/usbstorage.h | 26 - source/usbloader/usbstorage2.c | 456 ++++ source/usbloader/usbstorage2.h | 33 + source/usbloader/wbfs.cpp | 12 +- source/usbloader/wbfs.h | 5 +- source/usbloader/wbfs/wbfs_base.cpp | 22 +- source/usbloader/wbfs/wbfs_base.h | 12 +- source/usbloader/wbfs/wbfs_fat.cpp | 72 +- source/usbloader/wbfs/wbfs_fat.h | 20 +- source/usbloader/wbfs/wbfs_ntfs.h | 6 +- .../usbloader/wbfs/{wbfs_rw.cpp => wbfs_rw.c} | 28 +- source/usbloader/wbfs/wbfs_rw.h | 25 + source/usbloader/wbfs/wbfs_wbfs.cpp | 20 +- source/usbloader/wbfs/wbfs_wbfs.h | 10 +- source/usbloader/wbfs_fat.c | 739 ------ 44 files changed, 770 insertions(+), 3473 deletions(-) create mode 100644 data/fatffs_module.bin delete mode 100644 source/mload/fatffs_module.c delete mode 100644 source/mload/fatffs_module.h create mode 100644 source/usbloader/spinner.c create mode 100644 source/usbloader/spinner.h delete mode 100644 source/usbloader/usbstorage.c delete mode 100644 source/usbloader/usbstorage.h create mode 100644 source/usbloader/usbstorage2.c create mode 100644 source/usbloader/usbstorage2.h rename source/usbloader/wbfs/{wbfs_rw.cpp => wbfs_rw.c} (77%) create mode 100644 source/usbloader/wbfs/wbfs_rw.h delete mode 100644 source/usbloader/wbfs_fat.c diff --git a/HBC/META.XML b/HBC/META.XML index 6d088a1a..d4f6a527 100644 --- a/HBC/META.XML +++ b/HBC/META.XML @@ -2,8 +2,8 @@ USB Loader GX USB Loader GX Team - 1.0 r913 - 201002162013 + 1.0 r914 + 201002222228 Loads games from USB-devices USB Loader GX is a libwiigui based USB iso loader with a wii-like GUI. You can install games to your HDDs and boot them with shorter loading times. The interactive GUI is completely controllable with WiiMote, Classic Controller or GC Controller. diff --git a/data/ehcmodule_frag_v5.bin b/data/ehcmodule_frag_v5.bin index d62f50a80649d057cc9ae0922ab52209bb47d7db..894727ea067e18df8aa718be196106e49e455075 100644 GIT binary patch delta 8519 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 F{{e7g9pV50 delta 33150 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 diff --git a/data/fatffs_module.bin b/data/fatffs_module.bin new file mode 100644 index 0000000000000000000000000000000000000000..275ce23c6a6a1a50ad16ec7d3e51f42156bdfda9 GIT binary patch literal 58212 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 literal 0 HcmV?d00001 diff --git a/gui.pnproj b/gui.pnproj index 245d8234..853fa818 100644 --- a/gui.pnproj +++ b/gui.pnproj @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/source/fatmounter.c b/source/fatmounter.c index c886262d..55fb3bed 100644 --- a/source/fatmounter.c +++ b/source/fatmounter.c @@ -7,7 +7,7 @@ #include #include "usbloader/sdhc.h" -#include "usbloader/usbstorage.h" +#include "usbloader/usbstorage2.h" #include "usbloader/wbfs.h" #include "libfat/fat.h" #include "libntfs/ntfs.h" @@ -53,15 +53,15 @@ int USBDevice_Init() { //right now mounts first FAT-partition //try first mount with cIOS - if (!fatMount("USB", &__io_wiiums, 0, CACHE, SECTORS)) { - //try now mount with libogc - if (!fatMount("USB", &__io_usbstorage, 0, CACHE, SECTORS)) { +// if (!fatMount("USB", &__io_wiiums, 0, CACHE, SECTORS)) { +// //try now mount with libogc + if (!fatMount("USB", &__io_usbstorage2, 0, CACHE, SECTORS)) { #ifdef DEBUG_FAT gprintf(":-1"); #endif return -1; } - } +// } fat_usb_mount = 1; fat_usb_sec = _FAT_startSector; @@ -88,12 +88,12 @@ int WBFSDevice_Init(u32 sector) { //right now mounts first FAT-partition //try first mount with cIOS - if (!fatMount("WBFS", &__io_wiiums, 0, CACHE, SECTORS)) { +// if (!fatMount("WBFS", &__io_wiiums, 0, CACHE, SECTORS)) { //try now mount with libogc - if (!fatMount("WBFS", &__io_usbstorage, 0, CACHE, SECTORS)) { + if (!fatMount("WBFS", &__io_usbstorage2, 0, CACHE, SECTORS)) { return -1; } - } +// } fat_wbfs_mount = 1; fat_wbfs_sec = _FAT_startSector; @@ -180,19 +180,19 @@ s32 MountNTFS(u32 sector) if (wbfsDev == WBFS_DEVICE_USB) { /* Initialize WBFS interface */ - if (!__io_wiiums.startup()) { - ret = __io_usbstorage.startup(); +// if (!__io_wiiums.startup()) { + ret = __io_usbstorage2.startup(); if (!ret) { return -1; } - } +// } /* Mount device */ - if (!ntfsMount("NTFS", &__io_wiiums, sector, CACHE, SECTORS, NTFS_SHOW_HIDDEN_FILES | NTFS_RECOVER)) { - ret = ntfsMount("NTFS", &__io_usbstorage, sector, CACHE, SECTORS, NTFS_SHOW_HIDDEN_FILES | NTFS_RECOVER); +// if (!ntfsMount("NTFS", &__io_wiiums, sector, CACHE, SECTORS, NTFS_SHOW_HIDDEN_FILES | NTFS_RECOVER)) { + ret = ntfsMount("NTFS", &__io_usbstorage2, sector, CACHE, SECTORS, NTFS_SHOW_HIDDEN_FILES | NTFS_RECOVER); if (!ret) { return -2; } - } +// } } else if (wbfsDev == WBFS_DEVICE_SDHC) { if (sdhc_mode_sd == 0) { ret = ntfsMount("NTFS", &__io_sdhc, 0, CACHE, SECTORS, NTFS_SHOW_HIDDEN_FILES | NTFS_RECOVER); diff --git a/source/libfat/disc_fat.c b/source/libfat/disc_fat.c index f6753d7a..c17ca4c5 100644 --- a/source/libfat/disc_fat.c +++ b/source/libfat/disc_fat.c @@ -40,14 +40,14 @@ The list is terminated by a NULL/NULL entry. /* ====================== Wii ====================== */ #include -#include +#include "usbloader/usbstorage2.h" #include static const DISC_INTERFACE* get_io_wiisd (void) { return &__io_wiisd; } static const DISC_INTERFACE* get_io_usbstorage (void) { - return &__io_usbstorage; + return &__io_usbstorage2; } static const DISC_INTERFACE* get_io_gcsda (void) { diff --git a/source/libntfs/inode.c b/source/libntfs/inode.c index ad554b36..924e3bd5 100644 --- a/source/libntfs/inode.c +++ b/source/libntfs/inode.c @@ -120,7 +120,7 @@ ntfs_inode *ntfs_inode_allocate(ntfs_volume *vol) static void __ntfs_inode_release(ntfs_inode *ni) { if (NInoDirty(ni)) - ntfs_log_error("Releasing dirty inode %lld!\n", + ntfs_log_error("Releasing dirty inode %lld!\n", (long long)ni->mft_no); if (NInoAttrList(ni) && ni->attr_list) free(ni->attr_list); @@ -239,7 +239,7 @@ ntfs_inode *ntfs_inode_open(ntfs_volume *vol, const MFT_REF mref) if (l != ni->attr_list_size) { errno = EIO; ntfs_log_perror("Unexpected attrlist size (%lld <> %u), inode " - "%lld", (long long)l, ni->attr_list_size, + "%lld", (long long)l, ni->attr_list_size, (long long)MREF(mref)); goto put_err_out; } @@ -268,7 +268,7 @@ get_size: } } ntfs_attr_put_search_ctx(ctx); -out: +out: ntfs_log_leave("\n"); return ni; @@ -307,7 +307,7 @@ err_out: int ntfs_inode_close(ntfs_inode *ni) { int ret = -1; - + if (!ni) return 0; @@ -370,8 +370,8 @@ int ntfs_inode_close(ntfs_inode *ni) i = -1; break; } - - /* + + /* * We could successfully sync, so only log this error * and try to sync other inode extents too. */ @@ -379,7 +379,7 @@ int ntfs_inode_close(ntfs_inode *ni) ntfs_log_error("Extent inode %lld was not found\n", (long long)ni->mft_no); } - + __ntfs_inode_release(ni); ret = 0; err: @@ -424,11 +424,11 @@ ntfs_inode *ntfs_extent_inode_open(ntfs_inode *base_ni, const MFT_REF mref) ntfs_log_perror("%s", __FUNCTION__); return NULL; } - + ntfs_log_enter("Opening extent inode %lld (base mft record %lld).\n", (unsigned long long)mft_no, (unsigned long long)base_ni->mft_no); - + /* Is the extent inode already open and attached to the base inode? */ if (base_ni->nr_extents > 0) { extent_nis = base_ni->extent_nis; @@ -624,7 +624,7 @@ static int ntfs_inode_sync_file_name(ntfs_inode *ni) */ index_ni = ni; } else - index_ni = ntfs_inode_open(ni->vol, + index_ni = ntfs_inode_open(ni->vol, le64_to_cpu(fn->parent_directory)); if (!index_ni) { if (!err) @@ -768,8 +768,8 @@ int ntfs_inode_sync(ntfs_inode *ni) } NInoAttrListSetDirty(ni); goto sync_inode; - } - + } + if (na->data_size == ni->attr_list_size) { if (ntfs_attr_pwrite(na, 0, ni->attr_list_size, ni->attr_list) != ni->attr_list_size) { @@ -791,7 +791,7 @@ int ntfs_inode_sync(ntfs_inode *ni) } ntfs_attr_close(na); } - + sync_inode: /* Write this inode out to the $MFT (and $MFTMirr if applicable). */ if (NInoTestAndClearDirty(ni)) { @@ -817,8 +817,8 @@ sync_inode: eni = ni->extent_nis[i]; if (!NInoTestAndClearDirty(eni)) continue; - - if (ntfs_mft_record_write(eni->vol, eni->mft_no, + + if (ntfs_mft_record_write(eni->vol, eni->mft_no, eni->mrec)) { if (!err || errno == EIO) { err = errno; @@ -838,7 +838,7 @@ sync_inode: errno = err; ret = -1; } - + ntfs_log_leave("\n"); return ret; } @@ -885,19 +885,19 @@ int ntfs_inode_add_attrlist(ntfs_inode *ni) } /* Walk through all attributes. */ while (!ntfs_attr_lookup(AT_UNUSED, NULL, 0, 0, 0, NULL, 0, ctx)) { - + int ale_size; - + if (ctx->attr->type == AT_ATTRIBUTE_LIST) { err = EIO; ntfs_log_perror("Attribute list already present"); goto put_err_out; } - + ale_size = (sizeof(ATTR_LIST_ENTRY) + sizeof(ntfschar) * ctx->attr->name_length + 7) & ~7; al_len += ale_size; - + aln = realloc(al, al_len); if (!aln) { err = errno; @@ -906,9 +906,9 @@ int ntfs_inode_add_attrlist(ntfs_inode *ni) } ale = (ATTR_LIST_ENTRY *)(aln + ((u8 *)ale - al)); al = aln; - + memset(ale, 0, ale_size); - + /* Add attribute to attribute list. */ ale->type = ctx->attr->type; ale->length = cpu_to_le16((sizeof(ATTR_LIST_ENTRY) + @@ -975,7 +975,7 @@ int ntfs_inode_add_attrlist(ntfs_inode *ni) ntfs_attr_close(na); goto remove_attrlist_record;; } - + ntfs_attr_put_search_ctx(ctx); ntfs_attr_close(na); return 0; @@ -1076,12 +1076,12 @@ int ntfs_inode_free_space(ntfs_inode *ni, int size) * find next, because we don't need such. */ while (ctx->ntfs_ino->mft_no != ni->mft_no) { -retry: +retry: if (ntfs_attr_position(AT_UNUSED, ctx)) goto put_err_out; } - if (ntfs_inode_base(ctx->ntfs_ino)->mft_no == FILE_MFT && + if (ntfs_inode_base(ctx->ntfs_ino)->mft_no == FILE_MFT && ctx->attr->type == AT_DATA) goto retry; @@ -1102,10 +1102,10 @@ retry: return 0; } /* - * Reposition to first attribute after $STANDARD_INFORMATION - * and $ATTRIBUTE_LIST instead of simply skipping this attribute - * because in the case when we have got only in-memory attribute - * list then ntfs_attr_lookup will fail when it tries to find + * Reposition to first attribute after $STANDARD_INFORMATION + * and $ATTRIBUTE_LIST instead of simply skipping this attribute + * because in the case when we have got only in-memory attribute + * list then ntfs_attr_lookup will fail when it tries to find * $ATTRIBUTE_LIST. */ ntfs_attr_reinit_search_ctx(ctx); @@ -1129,6 +1129,8 @@ put_err_out: */ void ntfs_inode_update_times(ntfs_inode *ni, ntfs_time_update_flags mask) { + return; + time_t now; if (!ni) { @@ -1147,7 +1149,7 @@ void ntfs_inode_update_times(ntfs_inode *ni, ntfs_time_update_flags mask) ni->last_data_change_time = now; if (mask & NTFS_UPDATE_CTIME) ni->last_mft_change_time = now; - + set_nino_flag(ni, TimesDirty); NInoFileNameSetDirty(ni); NInoSetDirty(ni); @@ -1161,7 +1163,7 @@ void ntfs_inode_update_times(ntfs_inode *ni, ntfs_time_update_flags mask) * Check if the mft record given by @mft_no and @attr contains the bad sector * list. Please note that mft record numbers describing $Badclus extent inodes * will not match the current $Badclus:$Bad check. - * + * * On success return 1 if the file is $Badclus:$Bad, otherwise return 0. * On error return -1 with errno set to the error code. */ @@ -1175,7 +1177,7 @@ int ntfs_inode_badclus_bad(u64 mft_no, ATTR_RECORD *attr) errno = EINVAL; return -1; } - + if (mft_no != FILE_BadClus) return 0; @@ -1250,7 +1252,7 @@ int ntfs_inode_get_times(const char *path __attribute__((unused)), ret = -ERANGE; } ntfs_attr_put_search_ctx(ctx); - } + } return (ret ? ret : -errno); } @@ -1338,7 +1340,7 @@ int ntfs_inode_set_times(const char *path __attribute__((unused)), } } ntfs_attr_put_search_ctx(ctx); - } + } } else if (size < 8) errno = ERANGE; diff --git a/source/libntfs/ntfsinternal.c b/source/libntfs/ntfsinternal.c index 2b11c724..fb5aa096 100644 --- a/source/libntfs/ntfsinternal.c +++ b/source/libntfs/ntfsinternal.c @@ -41,11 +41,12 @@ #if defined(__wii__) #include #include -#include + +#include "usbloader/usbstorage2.h" const INTERFACE_ID ntfs_disc_interfaces[] = { { "sd", &__io_wiisd }, - { "usb", &__io_usbstorage }, + { "usb", &__io_usbstorage2 }, { "carda", &__io_gcsda }, { "cardb", &__io_gcsdb }, { NULL, NULL } diff --git a/source/libwbfs/libwbfs.c b/source/libwbfs/libwbfs.c index 02886357..09589b2a 100644 --- a/source/libwbfs/libwbfs.c +++ b/source/libwbfs/libwbfs.c @@ -536,6 +536,7 @@ u32 wbfs_add_disc(wbfs_t*p, read_wiidisc_callback_t read_src_wii_disc, } if (ret) break; info->wlba_table[i] = wbfs_htons(bl); + wbfs_sync(p); } // write disc info int disc_info_sz_lba = p->disc_info_sz>>p->hd_sec_sz_s; diff --git a/source/libwbfs/libwbfs.h b/source/libwbfs/libwbfs.h index 2b21de19..b4a9f132 100644 --- a/source/libwbfs/libwbfs.h +++ b/source/libwbfs/libwbfs.h @@ -20,7 +20,7 @@ typedef u32 be32_t; typedef u16 be16_t; - + typedef struct wbfs_head { be32_t magic; @@ -67,7 +67,7 @@ typedef struct wbfs_disc_info // callback definition. Return 1 on fatal error (callback is supposed to make retries until no hopes..) typedef int (*rw_sector_callback_t)(void*fp,u32 lba,u32 count,void*iobuf); -typedef void (*progress_callback_t)(int status,int total); +typedef void (*progress_callback_t)(u32 status, u32 total); typedef struct wbfs_s @@ -80,14 +80,14 @@ typedef struct wbfs_s u32 n_hd_sec; // the number of hd sector in the wbfs partition /* standard wii sector (0x8000 bytes) */ - u32 wii_sec_sz; + u32 wii_sec_sz; u8 wii_sec_sz_s; u32 n_wii_sec; u32 n_wii_sec_per_disc; - + /* The size of a wbfs sector */ u32 wbfs_sec_sz; - u32 wbfs_sec_sz_s; + u32 wbfs_sec_sz_s; u16 n_wbfs_sec; // this must fit in 16 bit! u16 n_wbfs_sec_per_disc; // size of the lookup table @@ -103,9 +103,9 @@ typedef struct wbfs_s u16 disc_info_sz; u8 *tmp_buffer; // pre-allocated buffer for unaligned read - + u32 n_disc_open; - + }wbfs_t; typedef struct wbfs_disc_s @@ -118,7 +118,7 @@ typedef struct wbfs_disc_s #define WBFS_MAGIC (('W'<<24)|('B'<<16)|('F'<<8)|('S')) -/*! @brief open a MSDOS partitionned harddrive. This tries to find a wbfs partition into the harddrive +/*! @brief open a MSDOS partitionned harddrive. This tries to find a wbfs partition into the harddrive @param read_hdsector,write_hdsector: accessors to a harddrive @hd_sector_size: size of the hd sector. Can be set to zero if the partition in already initialized @num_hd_sector: number of sectors in this disc. Can be set to zero if the partition in already initialized @@ -176,7 +176,7 @@ u32 wbfs_count_discs(wbfs_t*p); @param header: pointer to 0x100 bytes to write the header @size: optional pointer to a 32bit word that will get the size in 32bit words of the DVD taken on the partition. */ -u32 wbfs_get_disc_info(wbfs_t*p, u32 i,u8 *header,int header_size,u32 *size); +u32 wbfs_get_disc_info(wbfs_t*p, u32 i,u8 *header,int header_size,u32 *size); /*! get the number of used block of the partition. to be multiplied by p->wbfs_sec_sz (use 64bit multiplication) to have the number in bytes @@ -214,7 +214,7 @@ Even if the filesize is 4.7GB, the disc usage will be less. */ u32 wbfs_extract_disc(wbfs_disc_t*d, rw_sector_callback_t write_dst_wii_sector,void *callback_data,progress_callback_t spinner); -/*! extract a file from the wii disc filesystem. +/*! extract a file from the wii disc filesystem. E.G. Allows to extract the opening.bnr to install a game as a system menu channel */ int wbfs_extract_file(wbfs_disc_t*d, char *path, void **data); diff --git a/source/libwiigui/gui_gamegrid.cpp b/source/libwiigui/gui_gamegrid.cpp index 30acbcd2..9432a752 100644 --- a/source/libwiigui/gui_gamegrid.cpp +++ b/source/libwiigui/gui_gamegrid.cpp @@ -232,9 +232,9 @@ static int Pos3[45][2][2] = { {{591,153}, {633,153}}, {{591,250}, {633,250}}, - {{645,58}, {633,58}}, - {{645,153}, {633,153}}, - {{645,250}, {633,250}} + {{660,58}, {660,58}}, + {{660,153}, {660,153}}, + {{660,250}, {660,250}} }; #define VALUE4ROWS(rows, val1, val2, val3) (rows==3 ? val3 : (rows==2 ? val2 : val1)) diff --git a/source/main.cpp b/source/main.cpp index 870260e3..c79c7117 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -48,7 +48,7 @@ extern "C" #include "svnrev.h" #include "wad/title.h" #include "usbloader/partition_usbloader.h" -#include "usbloader/usbstorage.h" +#include "usbloader/usbstorage2.h" #include "memory/mem2.h" #include "lstub.h" @@ -413,7 +413,7 @@ main(int argc, char *argv[]) printf("\n\tReloading IOS to config setting (%d)...", Settings.cios == ios222 ? 222 : 223); SDCard_deInit(); // unmount SD for reloading IOS USBDevice_deInit(); // unmount USB for reloading IOS - USBStorage_Deinit(); + USBStorage2_Deinit(); ret = IOS_ReloadIOSsafe(Settings.cios == ios222 ? 222 : 223); printf("%d", ret); SDCard_Init(); @@ -436,7 +436,7 @@ main(int argc, char *argv[]) printf("\n\tReloading IOS to config setting (%d)...", ios249 ? 249 : 250); SDCard_deInit(); // unmount SD for reloading IOS USBDevice_deInit(); // unmount USB for reloading IOS - USBStorage_Deinit(); + USBStorage2_Deinit(); ret = IOS_ReloadIOSsafe(ios249 ? 249 : 250); printf("%d", ret); if (ret < 0) diff --git a/source/menu/menu_format.cpp b/source/menu/menu_format.cpp index ff97fd76..85089ab3 100644 --- a/source/menu/menu_format.cpp +++ b/source/menu/menu_format.cpp @@ -2,7 +2,7 @@ #include "menus.h" #include "fatmounter.h" -#include "usbloader/usbstorage.h" +#include "usbloader/usbstorage2.h" #include "usbloader/utils.h" #include "usbloader/wbfs.h" #include "libwiigui/gui_customoptionbrowser.h" @@ -18,7 +18,7 @@ int MenuFormat() { USBDevice_deInit(); sleep(1); - USBStorage_Init(); + USBStorage2_Init(); int menu = MENU_NONE; char imgPath[100]; diff --git a/source/menu/menu_install.cpp b/source/menu/menu_install.cpp index a9b8fe21..8f21ea43 100644 --- a/source/menu/menu_install.cpp +++ b/source/menu/menu_install.cpp @@ -1,5 +1,5 @@ #include "menus.h" -#include "usbloader/usbstorage.h" +#include "usbloader/usbstorage2.h" #include "usbloader/wbfs.h" #include "usbloader/disc.h" #include "usbloader/utils.h" @@ -104,11 +104,11 @@ int MenuInstall() { menu = MENU_DISCLIST; break; } else { - USBStorage_Watchdog(0); + USBStorage2_Watchdog(0); SetupGameInstallProgress(gametxt, name); ret = WBFS_AddGame(); ProgressStop(); - USBStorage_Watchdog(1); + USBStorage2_Watchdog(1); wiilight(0); if (ret != 0) { WindowPrompt(tr("Install Error!"),0,tr("Back")); diff --git a/source/mload/fatffs_module.c b/source/mload/fatffs_module.c deleted file mode 100644 index 37a2c3f2..00000000 --- a/source/mload/fatffs_module.c +++ /dev/null @@ -1,2127 +0,0 @@ -#define size_fatffs_module 58440 - -unsigned char fatffs_module[58440] __attribute__((aligned (32)))={ - 127, 69, 76, 70, 1, 2, 1, 97, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 40, 0, 0, 0, 1, 19, 115, 0, 0, 0, 0, 0, 52, 0, 0, 0, - 0, 0, 0, 6, 6, 0, 52, 0, 32, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, - 0, 0, 0, 160, 0, 240, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 212, 0, 0, 0, 160, 0, 0, 0, 160, 0, 0, 0, 52, 0, 0, 0, - 52, 0, 240, 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 212, 0, 240, 0, - 0, 0, 0, 64, 0, 0, 0, 0, 1, 0, 0, 1, 8, 19, 115, 0, 0, 19, 115, 0, 0, 0, 0, 146, 196, 0, 0, 146, 196, 0, 0, 0, 5, 0, - 0, 0, 4, 0, 0, 0, 1, 0, 0, 147, 204, 19, 115, 160, 0, 19, 115, 160, 0, 0, 0, 80, 124, 0, 2, 76, 204, 0, 0, 0, 6, 0, - 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 4, 0, 0, 0, 9, 19, 115, 0, 0, 0, 0, 0, 125, 0, 0, - 0, 98, 0, 0, 0, 126, 0, 0, 48, 0, 0, 0, 0, 127, 19, 117, 236, 204, 227, 160, 0, 0, 227, 160, 16, 0, 229, 159, 48, 104, - 225, 47, 255, 19, 229, 159, 192, 100, 229, 156, 192, 0, 225, 160, 0, 0, 231, 156, 193, 11, 225, 160, 0, 0, 225, 47, - 255, 28, 225, 160, 0, 0, 225, 160, 0, 0, 227, 160, 176, 63, 234, 255, 255, 245, 225, 160, 0, 0, 225, 160, 0, 0, 227, - 160, 176, 64, 234, 255, 255, 241, 227, 160, 0, 0, 238, 7, 15, 21, 225, 47, 255, 30, 225, 160, 0, 0, 225, 160, 0, 0, - 225, 160, 0, 0, 238, 19, 15, 16, 225, 47, 255, 30, 225, 160, 0, 0, 225, 160, 0, 0, 238, 3, 15, 16, 225, 47, 255, 30, - 19, 115, 25, 193, 19, 117, 188, 168, 70, 192, 71, 120, 234, 0, 25, 161, 70, 192, 71, 120, 234, 0, 25, 231, 70, 192, - 71, 120, 234, 0, 25, 211, 70, 192, 71, 120, 234, 0, 25, 243, 70, 192, 71, 120, 234, 0, 25, 223, 70, 192, 71, 120, 234, - 0, 26, 3, 70, 192, 71, 120, 234, 0, 25, 245, 70, 192, 71, 120, 234, 0, 25, 209, 70, 192, 71, 120, 234, 0, 25, 185, 70, - 192, 71, 120, 234, 255, 255, 221, 70, 192, 71, 120, 234, 255, 255, 225, 70, 192, 71, 120, 234, 255, 255, 215, 70, 192, - 71, 120, 234, 0, 25, 165, 70, 192, 71, 120, 234, 0, 25, 177, 70, 192, 71, 120, 234, 0, 25, 165, 70, 192, 71, 120, 234, - 0, 25, 229, 70, 192, 71, 120, 234, 0, 25, 153, 70, 192, 71, 120, 234, 255, 255, 215, 70, 192, 71, 120, 234, 0, 25, 185, - 70, 192, 71, 120, 234, 0, 25, 171, 70, 192, 71, 120, 234, 0, 25, 159, 70, 192, 71, 120, 234, 0, 25, 185, 70, 192, 71, - 120, 234, 0, 25, 173, 70, 192, 71, 120, 234, 0, 25, 173, 181, 0, 40, 0, 208, 8, 109, 67, 43, 0, 208, 5, 104, 3, 96, - 11, 104, 131, 32, 0, 96, 75, 224, 1, 32, 101, 66, 64, 188, 2, 71, 8, 181, 16, 76, 7, 28, 3, 28, 10, 33, 0, 96, 33, 28, - 32, 28, 25, 240, 4, 251, 132, 40, 0, 218, 0, 104, 32, 188, 16, 188, 2, 71, 8, 19, 115, 240, 128, 181, 16, 76, 7, 28, - 3, 28, 10, 33, 0, 96, 33, 28, 32, 28, 25, 240, 4, 250, 244, 40, 0, 218, 0, 104, 32, 188, 16, 188, 2, 71, 8, 19, 115, - 240, 128, 181, 16, 76, 7, 28, 3, 28, 10, 33, 0, 96, 33, 28, 32, 28, 25, 240, 4, 252, 128, 40, 0, 218, 0, 104, 32, 188, - 16, 188, 2, 71, 8, 19, 115, 240, 128, 181, 16, 76, 6, 35, 0, 28, 1, 96, 35, 28, 32, 240, 4, 253, 48, 40, 0, 218, 0, - 104, 32, 188, 16, 188, 2, 71, 8, 19, 115, 240, 128, 181, 16, 76, 12, 176, 154, 35, 0, 96, 35, 28, 2, 147, 0, 169, 3, - 28, 32, 75, 9, 240, 5, 252, 4, 28, 1, 40, 0, 218, 1, 104, 32, 224, 3, 28, 32, 240, 5, 251, 204, 32, 0, 176, 26, 188, - 16, 188, 2, 71, 8, 70, 192, 19, 115, 240, 128, 0, 0, 2, 2, 181, 0, 176, 129, 28, 1, 72, 3, 240, 5, 251, 188, 176, 1, - 188, 2, 71, 8, 70, 192, 19, 115, 240, 128, 181, 16, 76, 7, 35, 0, 28, 1, 96, 35, 28, 32, 34, 0, 240, 4, 251, 69, 40, - 0, 218, 0, 104, 32, 188, 16, 188, 2, 71, 8, 70, 192, 19, 115, 240, 128, 181, 112, 78, 8, 28, 4, 28, 13, 28, 19, 34, - 0, 96, 50, 28, 48, 28, 33, 28, 42, 240, 4, 255, 34, 40, 0, 218, 0, 104, 48, 188, 112, 188, 2, 71, 8, 19, 115, 240, 128, - 181, 112, 78, 8, 28, 4, 28, 13, 28, 19, 34, 0, 96, 50, 28, 48, 28, 33, 28, 42, 240, 4, 255, 200, 40, 0, 218, 0, 104, - 48, 188, 112, 188, 2, 71, 8, 19, 115, 240, 128, 181, 112, 78, 8, 28, 4, 28, 13, 28, 19, 34, 0, 96, 50, 28, 48, 28, 33, - 28, 42, 240, 5, 249, 136, 40, 0, 218, 0, 104, 48, 188, 112, 188, 2, 71, 8, 19, 115, 240, 128, 181, 240, 176, 131, 28, - 6, 32, 92, 28, 15, 240, 1, 255, 243, 28, 4, 40, 0, 209, 2, 32, 22, 66, 64, 224, 15, 77, 10, 35, 0, 96, 43, 28, 40, 147, - 0, 28, 33, 28, 50, 28, 59, 240, 5, 251, 129, 40, 0, 218, 3, 28, 32, 240, 1, 255, 210, 104, 40, 176, 3, 188, 240, 188, - 2, 71, 8, 70, 192, 19, 115, 240, 128, 181, 16, 28, 4, 28, 33, 72, 4, 240, 4, 249, 222, 104, 96, 240, 1, 255, 193, 188, - 16, 188, 1, 71, 0, 19, 115, 240, 128, 181, 240, 28, 7, 32, 164, 176, 129, 0, 64, 28, 14, 240, 1, 255, 192, 28, 5, 40, - 0, 209, 2, 32, 22, 66, 64, 224, 22, 34, 164, 33, 0, 0, 82, 240, 7, 248, 75, 76, 11, 35, 0, 96, 51, 96, 117, 28, 32, - 96, 35, 28, 49, 28, 58, 240, 4, 250, 59, 40, 0, 208, 1, 32, 0, 224, 3, 28, 40, 240, 1, 255, 152, 104, 32, 176, 1, 188, - 240, 188, 2, 71, 8, 70, 192, 19, 115, 240, 128, 181, 240, 76, 51, 68, 165, 172, 155, 145, 2, 28, 33, 144, 3, 146, 1, - 247, 255, 255, 202, 40, 0, 219, 81, 74, 44, 73, 43, 145, 4, 146, 5, 74, 44, 39, 1, 146, 0, 152, 0, 169, 155, 170, 71, - 171, 135, 240, 4, 249, 151, 40, 0, 209, 55, 172, 71, 120, 35, 43, 46, 208, 243, 43, 35, 208, 241, 28, 32, 240, 7, 254, - 36, 40, 12, 216, 236, 155, 137, 4, 89, 213, 30, 172, 7, 153, 3, 28, 32, 240, 7, 253, 246, 73, 30, 28, 32, 240, 7, 253, - 60, 169, 71, 28, 32, 240, 7, 253, 56, 28, 32, 169, 152, 170, 157, 247, 255, 255, 197, 40, 0, 219, 19, 155, 152, 156, - 153, 153, 4, 154, 5, 25, 18, 65, 89, 155, 157, 145, 4, 146, 5, 24, 255, 224, 8, 155, 141, 28, 30, 23, 221, 154, 4, 155, - 5, 25, 155, 65, 106, 146, 4, 147, 5, 55, 1, 231, 191, 153, 2, 155, 4, 156, 5, 96, 11, 96, 76, 154, 1, 168, 155, 96, - 23, 247, 255, 255, 105, 32, 0, 35, 159, 0, 155, 68, 157, 188, 240, 188, 2, 71, 8, 0, 0, 0, 0, 0, 0, 64, 0, 255, 255, - 253, 132, 19, 115, 240, 128, 19, 115, 167, 80, 70, 192, 70, 192, 181, 240, 176, 213, 172, 82, 28, 33, 28, 6, 247, 255, - 255, 93, 40, 0, 219, 40, 79, 22, 173, 33, 28, 56, 169, 82, 28, 42, 171, 65, 240, 4, 249, 47, 40, 0, 209, 26, 120, 43, - 43, 46, 208, 244, 172, 1, 28, 49, 28, 32, 240, 7, 253, 153, 73, 14, 28, 32, 240, 7, 252, 223, 28, 32, 28, 41, 240, 7, - 252, 219, 155, 67, 4, 90, 213, 2, 28, 32, 247, 255, 255, 215, 168, 1, 247, 255, 254, 126, 40, 0, 218, 220, 168, 82, - 247, 255, 255, 37, 32, 0, 176, 85, 188, 240, 188, 2, 71, 8, 19, 115, 240, 128, 19, 115, 167, 80, 181, 240, 176, 167, - 76, 36, 147, 0, 173, 36, 35, 0, 145, 2, 96, 35, 28, 41, 146, 1, 247, 255, 255, 30, 40, 0, 219, 56, 38, 0, 39, 0, 224, - 42, 72, 29, 169, 36, 170, 4, 35, 0, 240, 4, 248, 239, 144, 3, 40, 0, 209, 38, 154, 2, 25, 213, 70, 106, 124, 19, 43, - 46, 208, 27, 43, 35, 208, 25, 155, 2, 43, 0, 208, 19, 168, 4, 240, 7, 253, 118, 28, 4, 40, 12, 220, 16, 169, 4, 28, - 34, 28, 40, 240, 6, 254, 188, 35, 15, 70, 106, 92, 154, 28, 40, 85, 42, 240, 7, 253, 103, 48, 1, 224, 0, 32, 0, 54, - 1, 24, 63, 155, 0, 43, 0, 208, 209, 66, 179, 216, 207, 154, 1, 168, 36, 96, 22, 247, 255, 254, 214, 32, 0, 176, 39, - 188, 240, 188, 2, 71, 8, 70, 192, 19, 115, 240, 128, 181, 240, 176, 199, 76, 35, 147, 0, 173, 68, 35, 0, 145, 2, 96, - 35, 28, 41, 146, 1, 247, 255, 254, 208, 40, 0, 219, 54, 38, 0, 39, 0, 224, 40, 72, 28, 169, 68, 170, 4, 35, 0, 240, - 4, 248, 161, 144, 3, 40, 0, 209, 36, 154, 2, 25, 213, 70, 106, 124, 19, 43, 46, 208, 25, 43, 35, 208, 23, 155, 2, 43, - 0, 208, 17, 168, 4, 240, 7, 253, 40, 28, 4, 169, 4, 28, 34, 28, 40, 240, 6, 254, 112, 35, 15, 70, 106, 92, 154, 28, - 40, 85, 42, 240, 7, 253, 27, 48, 1, 224, 0, 32, 0, 54, 1, 24, 63, 155, 0, 43, 0, 208, 211, 66, 179, 216, 209, 154, 1, - 168, 68, 96, 22, 247, 255, 254, 138, 32, 0, 176, 71, 188, 240, 188, 2, 71, 8, 70, 192, 19, 115, 240, 128, 181, 16, 28, - 4, 34, 0, 28, 8, 92, 161, 92, 131, 41, 0, 209, 2, 43, 0, 209, 10, 224, 7, 43, 0, 208, 5, 43, 35, 208, 1, 66, 153, 209, - 3, 50, 1, 231, 240, 32, 0, 224, 1, 32, 1, 66, 64, 188, 16, 188, 2, 71, 8, 181, 16, 73, 33, 28, 4, 247, 255, 255, 225, - 40, 0, 208, 53, 73, 31, 28, 32, 247, 255, 255, 219, 40, 0, 208, 47, 73, 29, 28, 32, 247, 255, 255, 213, 40, 0, 208, - 41, 73, 27, 28, 32, 247, 255, 255, 207, 40, 0, 208, 37, 73, 25, 28, 32, 247, 255, 255, 201, 40, 0, 208, 29, 73, 23, - 28, 32, 247, 255, 255, 195, 40, 0, 208, 23, 73, 21, 28, 32, 247, 255, 255, 189, 40, 0, 208, 17, 73, 19, 28, 32, 247, - 255, 255, 183, 40, 0, 208, 11, 73, 17, 28, 32, 247, 255, 255, 177, 40, 0, 208, 5, 73, 15, 28, 32, 247, 255, 255, 171, - 40, 0, 209, 1, 32, 0, 224, 1, 32, 1, 66, 64, 188, 16, 188, 2, 71, 8, 19, 115, 167, 82, 19, 115, 167, 98, 19, 115, 167, - 114, 19, 115, 167, 130, 19, 115, 167, 146, 19, 115, 167, 151, 19, 115, 167, 168, 19, 115, 167, 185, 19, 115, 167, 202, - 19, 115, 167, 216, 32, 6, 66, 64, 71, 112, 70, 192, 32, 6, 66, 64, 71, 112, 70, 192, 32, 6, 66, 64, 71, 112, 70, 192, - 32, 6, 66, 64, 71, 112, 70, 192, 181, 240, 77, 53, 28, 3, 104, 40, 176, 131, 48, 64, 28, 14, 28, 25, 28, 23, 240, 2, - 251, 219, 104, 40, 33, 0, 28, 2, 50, 64, 14, 19, 112, 3, 12, 19, 112, 67, 10, 19, 112, 131, 112, 194, 35, 1, 50, 96, - 113, 131, 14, 19, 114, 3, 12, 19, 114, 67, 114, 194, 10, 19, 50, 4, 114, 131, 14, 19, 116, 3, 12, 19, 113, 1, 113, 65, - 113, 193, 115, 1, 115, 65, 115, 129, 116, 67, 117, 1, 10, 19, 117, 65, 117, 129, 36, 4, 33, 128, 116, 131, 116, 194, - 115, 196, 117, 196, 0, 73, 247, 255, 252, 178, 75, 26, 33, 15, 104, 24, 104, 43, 34, 1, 147, 0, 35, 2, 247, 255, 252, - 113, 40, 0, 209, 35, 104, 41, 28, 11, 51, 160, 120, 26, 51, 1, 120, 27, 6, 18, 4, 27, 67, 19, 28, 10, 50, 162, 120, - 18, 2, 18, 67, 26, 28, 11, 51, 163, 120, 27, 67, 19, 96, 51, 28, 11, 51, 164, 120, 26, 51, 1, 120, 27, 6, 18, 4, 27, - 67, 19, 28, 10, 50, 166, 120, 18, 49, 167, 2, 18, 67, 26, 120, 11, 67, 19, 96, 59, 176, 3, 188, 240, 188, 2, 71, 8, - 70, 192, 19, 115, 244, 168, 19, 115, 160, 12, 181, 16, 76, 21, 28, 1, 104, 32, 176, 130, 48, 64, 240, 2, 251, 110, 104, - 34, 32, 0, 28, 17, 49, 64, 14, 11, 112, 19, 12, 11, 112, 83, 10, 11, 112, 209, 112, 147, 104, 35, 34, 1, 113, 154, 113, - 24, 113, 88, 113, 216, 33, 128, 104, 32, 0, 73, 247, 255, 252, 92, 75, 7, 33, 6, 104, 24, 104, 35, 34, 1, 147, 0, 35, - 0, 247, 255, 252, 27, 176, 2, 188, 16, 188, 2, 71, 8, 70, 192, 19, 115, 244, 168, 19, 115, 160, 12, 181, 16, 76, 21, - 28, 1, 104, 32, 176, 130, 48, 64, 240, 2, 251, 62, 104, 34, 32, 0, 28, 17, 49, 64, 14, 11, 112, 19, 12, 11, 112, 83, - 10, 11, 112, 209, 112, 147, 104, 35, 34, 1, 113, 154, 113, 24, 113, 88, 113, 216, 33, 128, 104, 32, 0, 73, 247, 255, - 252, 44, 75, 7, 33, 7, 104, 24, 104, 35, 34, 1, 147, 0, 35, 0, 247, 255, 251, 235, 176, 2, 188, 16, 188, 2, 71, 8, 70, - 192, 19, 115, 244, 168, 19, 115, 160, 12, 181, 240, 76, 68, 28, 3, 104, 32, 176, 131, 48, 64, 28, 13, 28, 25, 28, 22, - 240, 2, 251, 11, 104, 34, 32, 0, 28, 17, 49, 64, 14, 11, 112, 19, 12, 11, 112, 83, 10, 11, 112, 209, 112, 147, 104, - 35, 34, 1, 113, 24, 113, 88, 113, 154, 113, 216, 104, 34, 39, 4, 28, 17, 49, 160, 14, 11, 114, 19, 12, 11, 114, 83, - 10, 11, 114, 147, 114, 209, 104, 35, 115, 24, 115, 88, 115, 152, 115, 223, 45, 0, 209, 1, 36, 1, 224, 50, 104, 34, 120, - 49, 28, 19, 51, 160, 112, 25, 120, 113, 51, 1, 112, 25, 120, 177, 51, 1, 112, 25, 120, 243, 50, 163, 112, 19, 104, 34, - 14, 43, 116, 19, 12, 43, 116, 83, 10, 43, 116, 147, 116, 213, 104, 50, 104, 33, 0, 83, 24, 155, 0, 155, 24, 155, 14, - 26, 117, 10, 12, 26, 117, 74, 10, 26, 117, 203, 117, 138, 104, 34, 28, 17, 49, 160, 14, 11, 118, 19, 12, 11, 118, 83, - 10, 11, 118, 147, 118, 209, 104, 35, 36, 2, 119, 24, 119, 88, 119, 152, 119, 223, 77, 19, 33, 128, 104, 40, 0, 73, 247, - 255, 251, 177, 75, 17, 33, 248, 104, 24, 104, 43, 28, 34, 147, 0, 28, 35, 247, 255, 251, 112, 40, 0, 209, 17, 104, 41, - 28, 11, 51, 160, 120, 26, 51, 1, 120, 27, 6, 18, 4, 27, 67, 19, 28, 10, 50, 162, 120, 18, 49, 163, 2, 18, 67, 26, 120, - 11, 67, 19, 96, 51, 176, 3, 188, 240, 188, 2, 71, 8, 19, 115, 244, 168, 19, 115, 160, 12, 181, 16, 76, 21, 28, 1, 104, - 32, 176, 130, 48, 64, 240, 2, 250, 128, 104, 34, 32, 0, 28, 17, 49, 64, 14, 11, 112, 19, 12, 11, 112, 83, 10, 11, 112, - 209, 112, 147, 104, 35, 34, 1, 113, 154, 113, 24, 113, 88, 113, 216, 33, 128, 104, 32, 0, 73, 247, 255, 251, 110, 75, - 7, 33, 9, 104, 24, 104, 35, 34, 1, 147, 0, 35, 0, 247, 255, 251, 45, 176, 2, 188, 16, 188, 2, 71, 8, 70, 192, 19, 115, - 244, 168, 19, 115, 160, 12, 181, 16, 76, 21, 28, 1, 104, 32, 176, 130, 48, 64, 240, 2, 250, 80, 104, 34, 32, 0, 28, - 17, 49, 64, 14, 11, 112, 19, 12, 11, 112, 83, 10, 11, 112, 209, 112, 147, 104, 35, 34, 1, 113, 154, 113, 24, 113, 88, - 113, 216, 33, 128, 104, 32, 0, 73, 247, 255, 251, 62, 75, 7, 33, 10, 104, 24, 104, 35, 34, 1, 147, 0, 35, 0, 247, 255, - 250, 253, 176, 2, 188, 16, 188, 2, 71, 8, 70, 192, 19, 115, 244, 168, 19, 115, 160, 12, 181, 48, 76, 32, 28, 3, 104, - 32, 176, 131, 28, 13, 48, 64, 28, 25, 240, 2, 250, 30, 104, 32, 28, 41, 48, 160, 240, 2, 250, 25, 104, 34, 32, 0, 28, - 17, 49, 64, 14, 11, 112, 19, 12, 11, 112, 83, 10, 11, 112, 209, 112, 147, 104, 35, 37, 1, 113, 157, 113, 24, 113, 88, - 113, 216, 104, 34, 28, 17, 49, 160, 14, 11, 114, 19, 12, 11, 114, 83, 10, 11, 114, 209, 114, 147, 104, 35, 33, 128, - 115, 157, 115, 24, 115, 88, 115, 216, 104, 32, 0, 73, 247, 255, 250, 248, 75, 7, 33, 11, 104, 24, 104, 35, 34, 2, 147, - 0, 35, 0, 247, 255, 250, 183, 176, 3, 188, 48, 188, 2, 71, 8, 70, 192, 19, 115, 244, 168, 19, 115, 160, 12, 181, 112, - 76, 36, 28, 3, 104, 32, 176, 130, 48, 64, 28, 14, 28, 25, 240, 2, 249, 216, 104, 34, 32, 0, 28, 17, 49, 64, 14, 11, - 112, 19, 12, 11, 112, 83, 10, 11, 112, 209, 112, 147, 104, 35, 34, 1, 113, 24, 113, 88, 113, 154, 113, 216, 104, 34, - 28, 17, 49, 160, 14, 11, 114, 19, 12, 11, 114, 83, 10, 11, 114, 209, 114, 147, 104, 35, 34, 68, 115, 218, 115, 24, 115, - 88, 115, 152, 33, 128, 104, 32, 0, 73, 247, 255, 250, 182, 75, 13, 33, 12, 104, 24, 104, 35, 34, 1, 147, 0, 35, 1, 247, - 255, 250, 117, 28, 5, 40, 0, 219, 7, 46, 0, 208, 5, 104, 33, 28, 48, 49, 160, 34, 68, 240, 2, 249, 142, 176, 2, 28, - 40, 188, 112, 188, 2, 71, 8, 70, 192, 19, 115, 244, 168, 19, 115, 160, 12, 181, 112, 76, 35, 28, 3, 104, 32, 176, 130, - 48, 64, 28, 14, 28, 25, 240, 2, 249, 138, 104, 34, 32, 0, 28, 17, 49, 64, 14, 11, 112, 19, 12, 11, 112, 83, 10, 11, - 112, 209, 112, 147, 104, 35, 34, 1, 113, 24, 113, 88, 113, 154, 113, 216, 104, 34, 28, 17, 49, 160, 14, 11, 114, 19, - 12, 11, 114, 83, 10, 11, 114, 209, 114, 147, 104, 35, 34, 44, 115, 218, 115, 24, 115, 88, 115, 152, 33, 128, 104, 32, - 0, 73, 247, 255, 250, 104, 75, 12, 33, 13, 104, 24, 104, 35, 34, 1, 147, 0, 35, 1, 247, 255, 250, 39, 28, 5, 40, 0, - 219, 5, 104, 33, 28, 48, 49, 160, 34, 44, 240, 2, 249, 66, 176, 2, 28, 40, 188, 112, 188, 2, 71, 8, 70, 192, 19, 115, - 244, 168, 19, 115, 160, 12, 181, 48, 75, 10, 28, 12, 104, 26, 73, 9, 0, 83, 24, 155, 0, 155, 28, 5, 24, 201, 176, 129, - 28, 32, 240, 2, 249, 58, 28, 41, 28, 32, 240, 2, 249, 70, 176, 1, 188, 48, 188, 1, 71, 0, 19, 115, 247, 40, 19, 115, - 171, 84, 181, 16, 75, 13, 104, 27, 43, 0, 218, 18, 76, 12, 104, 35, 43, 0, 209, 6, 33, 128, 32, 0, 0, 73, 34, 32, 247, - 255, 249, 239, 96, 32, 72, 7, 33, 0, 247, 255, 250, 42, 40, 0, 219, 2, 75, 2, 96, 24, 32, 0, 188, 16, 188, 2, 71, 8, - 19, 115, 160, 12, 19, 115, 244, 168, 19, 115, 167, 229, 181, 16, 76, 53, 104, 35, 43, 0, 218, 99, 247, 255, 255, 215, - 96, 32, 40, 0, 219, 94, 76, 49, 72, 50, 28, 33, 247, 255, 255, 181, 28, 32, 247, 255, 253, 132, 28, 33, 72, 47, 247, - 255, 255, 174, 28, 32, 247, 255, 254, 155, 28, 32, 247, 255, 253, 122, 28, 33, 72, 43, 247, 255, 255, 164, 28, 32, 247, - 255, 254, 145, 28, 32, 247, 255, 253, 112, 72, 39, 28, 33, 247, 255, 255, 154, 33, 128, 0, 73, 28, 32, 247, 255, 249, - 225, 28, 32, 247, 255, 253, 100, 28, 33, 72, 34, 247, 255, 255, 142, 28, 32, 247, 255, 253, 93, 72, 32, 28, 33, 247, - 255, 255, 135, 33, 128, 0, 73, 28, 32, 247, 255, 249, 206, 28, 32, 247, 255, 253, 81, 72, 27, 28, 33, 247, 255, 255, - 123, 33, 128, 0, 73, 28, 32, 247, 255, 249, 194, 28, 32, 247, 255, 253, 69, 72, 22, 28, 33, 247, 255, 255, 111, 33, - 128, 28, 32, 0, 73, 247, 255, 249, 182, 28, 32, 247, 255, 253, 57, 75, 17, 104, 27, 43, 0, 208, 7, 72, 16, 73, 16, 247, - 255, 249, 183, 40, 0, 219, 1, 247, 255, 249, 135, 188, 16, 188, 1, 71, 0, 19, 115, 160, 12, 19, 115, 245, 32, 19, 115, - 169, 60, 19, 115, 167, 146, 19, 115, 167, 233, 19, 115, 167, 241, 19, 115, 167, 246, 19, 115, 167, 82, 19, 115, 167, - 98, 19, 115, 167, 114, 19, 115, 247, 36, 19, 115, 167, 253, 0, 0, 6, 2, 181, 240, 35, 0, 176, 135, 145, 2, 96, 11, 75, - 117, 28, 4, 104, 27, 43, 0, 209, 0, 224, 221, 247, 255, 255, 109, 75, 114, 104, 27, 43, 0, 218, 0, 224, 214, 75, 112, - 104, 27, 43, 1, 221, 22, 123, 35, 123, 98, 6, 27, 4, 18, 67, 26, 123, 163, 123, 225, 2, 27, 67, 19, 67, 25, 122, 98, - 122, 35, 4, 18, 6, 27, 67, 26, 122, 163, 72, 103, 2, 27, 67, 19, 122, 226, 67, 26, 240, 1, 251, 109, 126, 35, 126, 98, - 6, 27, 4, 18, 67, 26, 126, 163, 2, 27, 67, 19, 126, 226, 28, 21, 67, 29, 125, 98, 125, 35, 4, 18, 6, 27, 67, 26, 125, - 163, 2, 27, 67, 19, 125, 226, 67, 26, 146, 1, 123, 35, 123, 98, 6, 27, 4, 18, 67, 26, 123, 163, 2, 27, 67, 19, 123, - 226, 28, 17, 67, 25, 41, 4, 208, 3, 41, 12, 208, 0, 224, 142, 224, 80, 39, 0, 151, 5, 104, 46, 104, 172, 28, 48, 247, - 255, 251, 221, 40, 0, 208, 2, 154, 2, 96, 23, 224, 136, 154, 2, 35, 1, 96, 19, 155, 1, 43, 1, 216, 3, 34, 0, 28, 37, - 146, 3, 224, 20, 104, 171, 104, 31, 151, 5, 105, 43, 147, 3, 75, 66, 105, 173, 104, 27, 43, 0, 208, 10, 33, 13, 104, - 40, 240, 5, 252, 254, 76, 63, 28, 2, 28, 57, 28, 32, 28, 51, 240, 1, 251, 27, 73, 61, 28, 48, 247, 255, 254, 187, 75, - 60, 104, 27, 43, 0, 208, 1, 240, 1, 255, 67, 72, 56, 153, 3, 170, 5, 247, 255, 252, 226, 75, 54, 28, 4, 104, 27, 43, - 0, 208, 1, 240, 1, 255, 43, 75, 47, 104, 27, 43, 0, 208, 5, 72, 50, 153, 5, 74, 47, 28, 35, 240, 1, 250, 251, 44, 0, - 219, 73, 155, 5, 36, 0, 96, 43, 224, 69, 104, 44, 28, 32, 247, 255, 251, 143, 40, 0, 208, 3, 154, 2, 35, 0, 96, 19, - 224, 57, 73, 37, 28, 32, 247, 255, 254, 139, 75, 36, 104, 27, 43, 0, 208, 1, 240, 1, 255, 19, 78, 32, 104, 169, 105, - 42, 28, 48, 247, 255, 251, 225, 28, 4, 40, 0, 219, 21, 240, 1, 254, 252, 104, 168, 33, 4, 247, 255, 248, 194, 105, 40, - 33, 4, 247, 255, 248, 190, 75, 19, 104, 27, 43, 0, 208, 7, 104, 171, 72, 23, 104, 25, 105, 43, 104, 26, 28, 51, 240, - 1, 250, 194, 75, 17, 104, 27, 43, 0, 208, 1, 240, 1, 254, 226, 154, 2, 35, 1, 96, 19, 224, 8, 75, 8, 104, 27, 43, 0, - 208, 2, 72, 13, 240, 1, 250, 177, 36, 6, 66, 100, 176, 7, 28, 32, 188, 240, 188, 2, 71, 8, 19, 115, 247, 32, 19, 115, - 160, 12, 19, 115, 247, 36, 19, 115, 168, 13, 19, 115, 168, 35, 19, 115, 245, 32, 19, 115, 160, 16, 19, 115, 168, 56, - 19, 115, 168, 83, 19, 115, 168, 102, 181, 240, 35, 0, 96, 11, 75, 189, 176, 131, 104, 27, 28, 4, 28, 14, 43, 0, 209, - 0, 226, 37, 247, 255, 254, 105, 75, 185, 104, 27, 43, 0, 218, 0, 226, 30, 75, 183, 104, 27, 43, 1, 221, 22, 123, 35, - 123, 98, 6, 27, 4, 18, 67, 26, 123, 163, 123, 225, 2, 27, 67, 19, 67, 25, 122, 98, 122, 35, 4, 18, 6, 27, 67, 26, 122, - 163, 72, 174, 2, 27, 67, 19, 122, 226, 67, 26, 240, 1, 250, 105, 123, 35, 123, 98, 6, 27, 4, 18, 67, 26, 123, 163, 2, - 27, 67, 19, 123, 226, 28, 17, 67, 25, 127, 98, 127, 35, 4, 18, 6, 27, 67, 26, 127, 163, 2, 27, 67, 19, 127, 226, 67, - 26, 146, 1, 126, 35, 126, 98, 6, 27, 4, 18, 67, 26, 126, 163, 2, 27, 67, 19, 126, 226, 28, 23, 67, 31, 124, 98, 124, - 35, 4, 18, 6, 27, 67, 26, 124, 163, 2, 27, 67, 19, 124, 226, 28, 21, 67, 29, 30, 75, 43, 10, 217, 0, 225, 202, 74, 148, - 0, 155, 88, 211, 70, 159, 29, 172, 28, 32, 247, 255, 250, 207, 40, 0, 208, 0, 225, 152, 35, 1, 96, 51, 73, 142, 28, - 32, 247, 255, 253, 204, 75, 141, 104, 27, 43, 0, 208, 1, 240, 1, 254, 84, 72, 137, 247, 255, 251, 149, 75, 137, 28, - 4, 104, 27, 43, 0, 208, 1, 240, 1, 254, 62, 75, 129, 104, 27, 43, 0, 209, 0, 225, 175, 72, 132, 225, 153, 75, 126, 104, - 27, 43, 0, 208, 3, 72, 130, 29, 169, 240, 1, 250, 9, 29, 172, 28, 32, 247, 255, 250, 163, 40, 0, 208, 0, 225, 108, 35, - 1, 96, 51, 73, 120, 28, 32, 247, 255, 253, 160, 75, 119, 104, 27, 43, 0, 208, 1, 240, 1, 254, 40, 72, 115, 247, 255, - 251, 153, 75, 115, 28, 4, 104, 27, 43, 0, 208, 1, 240, 1, 254, 18, 75, 107, 104, 27, 43, 0, 209, 0, 225, 131, 72, 112, - 225, 109, 28, 40, 247, 255, 250, 128, 40, 0, 208, 0, 225, 73, 35, 1, 96, 51, 73, 103, 28, 40, 247, 255, 253, 125, 75, - 102, 104, 27, 43, 0, 208, 1, 240, 1, 254, 5, 72, 98, 247, 255, 252, 52, 75, 97, 28, 4, 104, 27, 43, 0, 208, 1, 240, - 1, 253, 239, 75, 90, 104, 27, 43, 0, 209, 0, 225, 96, 72, 95, 225, 74, 45, 0, 208, 2, 120, 43, 43, 31, 216, 3, 35, 1, - 96, 51, 36, 101, 225, 84, 28, 40, 247, 255, 250, 84, 40, 0, 208, 0, 225, 29, 35, 1, 96, 51, 73, 81, 28, 40, 247, 255, - 253, 81, 28, 40, 48, 64, 73, 84, 247, 255, 253, 76, 75, 77, 104, 27, 43, 0, 208, 1, 240, 1, 253, 212, 77, 73, 76, 79, - 28, 40, 28, 33, 34, 64, 240, 1, 254, 77, 40, 0, 209, 5, 28, 40, 33, 0, 247, 255, 252, 159, 28, 4, 224, 38, 77, 73, 28, - 32, 28, 41, 247, 255, 252, 152, 40, 0, 219, 14, 104, 170, 35, 240, 2, 27, 64, 19, 34, 128, 1, 210, 66, 147, 209, 3, - 28, 32, 247, 255, 252, 21, 224, 2, 28, 32, 247, 255, 251, 225, 77, 55, 78, 60, 28, 40, 28, 49, 247, 255, 252, 59, 75, - 49, 28, 4, 104, 27, 43, 0, 208, 5, 72, 57, 28, 41, 28, 50, 28, 35, 240, 1, 249, 108, 75, 47, 104, 27, 43, 0, 209, 0, - 225, 3, 240, 1, 253, 139, 225, 0, 28, 40, 247, 255, 249, 255, 40, 0, 208, 0, 224, 200, 35, 1, 96, 51, 155, 1, 43, 27, - 216, 1, 76, 46, 224, 243, 72, 46, 73, 35, 247, 255, 252, 247, 75, 35, 104, 27, 43, 0, 208, 1, 240, 1, 253, 127, 72, - 31, 73, 41, 247, 255, 252, 161, 75, 30, 28, 4, 104, 27, 43, 0, 208, 1, 240, 1, 253, 104, 75, 22, 104, 27, 43, 0, 208, - 4, 72, 35, 73, 23, 28, 34, 240, 1, 249, 57, 44, 0, 218, 0, 224, 210, 28, 56, 154, 1, 33, 0, 240, 1, 253, 255, 74, 28, - 28, 56, 104, 19, 96, 59, 104, 211, 96, 123, 105, 147, 97, 123, 104, 147, 104, 210, 26, 155, 96, 187, 153, 1, 247, 254, - 255, 18, 224, 189, 75, 6, 104, 27, 43, 0, 209, 0, 224, 182, 72, 19, 240, 1, 249, 25, 224, 178, 19, 115, 247, 32, 19, - 115, 160, 12, 19, 115, 247, 36, 19, 115, 168, 135, 19, 115, 170, 12, 19, 115, 245, 32, 19, 115, 160, 16, 19, 115, 168, - 156, 19, 115, 168, 178, 19, 115, 168, 202, 19, 115, 168, 225, 19, 115, 246, 32, 19, 115, 244, 216, 19, 115, 168, 250, - 255, 255, 252, 7, 19, 115, 167, 80, 19, 115, 244, 172, 19, 115, 169, 22, 19, 115, 169, 42, 28, 40, 247, 255, 249, 141, - 40, 0, 209, 87, 35, 1, 96, 51, 75, 70, 104, 27, 43, 0, 208, 3, 72, 69, 28, 41, 240, 1, 248, 227, 73, 68, 28, 40, 247, - 255, 252, 131, 75, 67, 104, 27, 43, 0, 208, 1, 240, 1, 253, 11, 72, 63, 73, 64, 247, 255, 251, 223, 75, 62, 28, 4, 104, - 27, 43, 0, 208, 1, 240, 1, 252, 244, 75, 55, 104, 27, 43, 0, 208, 4, 72, 58, 73, 55, 28, 34, 240, 1, 248, 197, 44, 0, - 219, 95, 75, 56, 29, 184, 96, 59, 35, 4, 136, 27, 28, 41, 128, 187, 34, 64, 240, 1, 253, 149, 28, 58, 50, 73, 35, 0, - 112, 19, 73, 50, 28, 40, 247, 255, 249, 53, 28, 58, 28, 57, 50, 71, 49, 72, 40, 0, 209, 3, 35, 3, 112, 19, 112, 8, 224, - 2, 35, 3, 112, 19, 112, 11, 28, 58, 50, 70, 35, 3, 112, 19, 28, 56, 153, 1, 247, 254, 254, 140, 224, 42, 29, 172, 28, - 32, 247, 255, 249, 53, 40, 0, 208, 1, 35, 0, 224, 44, 35, 1, 96, 51, 73, 27, 28, 32, 247, 255, 252, 49, 75, 26, 104, - 27, 43, 0, 208, 1, 240, 1, 252, 185, 72, 22, 73, 23, 247, 255, 251, 141, 75, 21, 28, 4, 104, 27, 43, 0, 208, 1, 240, - 1, 252, 162, 75, 14, 104, 27, 43, 0, 208, 20, 72, 20, 73, 14, 28, 34, 240, 1, 248, 115, 224, 14, 35, 1, 96, 51, 36, - 0, 224, 10, 75, 7, 104, 27, 43, 0, 208, 2, 72, 14, 240, 1, 248, 103, 35, 1, 96, 51, 36, 6, 66, 100, 176, 3, 28, 32, - 188, 240, 188, 2, 71, 8, 19, 115, 247, 36, 19, 115, 169, 61, 19, 115, 245, 32, 19, 115, 160, 16, 19, 115, 244, 216, - 19, 115, 169, 74, 0, 0, 16, 1, 19, 115, 169, 94, 19, 115, 169, 131, 19, 115, 169, 152, 181, 16, 75, 14, 28, 4, 104, - 27, 43, 0, 208, 18, 247, 255, 252, 34, 75, 11, 104, 27, 43, 1, 221, 12, 123, 35, 123, 98, 6, 27, 4, 18, 67, 26, 123, - 163, 123, 225, 2, 27, 67, 19, 72, 6, 67, 25, 240, 1, 248, 49, 32, 6, 66, 64, 188, 16, 188, 2, 71, 8, 19, 115, 247, 32, - 19, 115, 247, 36, 19, 115, 169, 184, 181, 16, 75, 36, 28, 4, 104, 27, 43, 1, 221, 12, 123, 35, 123, 98, 6, 27, 4, 18, - 67, 26, 123, 163, 123, 225, 2, 27, 67, 19, 72, 30, 67, 25, 240, 1, 248, 19, 123, 34, 123, 99, 6, 18, 4, 27, 67, 19, - 123, 162, 2, 18, 67, 26, 123, 227, 67, 19, 43, 8, 209, 35, 126, 34, 126, 99, 6, 18, 4, 27, 67, 19, 126, 162, 2, 18, - 67, 26, 126, 227, 67, 19, 104, 27, 104, 25, 104, 90, 75, 14, 104, 27, 43, 0, 208, 2, 72, 14, 240, 0, 255, 243, 33, 0, - 72, 13, 247, 254, 253, 235, 72, 13, 33, 0, 34, 0, 240, 1, 252, 40, 75, 6, 104, 27, 43, 0, 208, 2, 72, 9, 240, 0, 255, - 227, 28, 32, 240, 5, 248, 195, 188, 16, 188, 2, 71, 8, 70, 192, 19, 115, 247, 36, 19, 115, 169, 197, 19, 115, 169, 214, - 19, 115, 169, 239, 19, 115, 31, 49, 19, 115, 169, 252, 181, 48, 176, 129, 28, 5, 240, 0, 254, 203, 240, 1, 252, 89, - 32, 128, 240, 0, 254, 162, 40, 0, 209, 2, 36, 22, 66, 100, 224, 19, 33, 32, 247, 254, 253, 178, 28, 4, 40, 0, 219, 13, - 28, 33, 72, 8, 247, 254, 253, 199, 28, 33, 72, 7, 247, 254, 253, 195, 28, 33, 72, 6, 247, 254, 253, 191, 96, 44, 36, - 0, 176, 1, 28, 32, 188, 48, 188, 2, 71, 8, 19, 115, 167, 229, 19, 115, 170, 56, 19, 115, 170, 60, 181, 240, 126, 3, - 126, 66, 6, 27, 4, 18, 67, 26, 126, 131, 176, 135, 2, 27, 67, 19, 126, 194, 28, 5, 28, 20, 67, 28, 124, 66, 124, 3, - 4, 18, 6, 27, 67, 26, 124, 131, 28, 38, 2, 27, 67, 19, 124, 194, 39, 0, 67, 26, 146, 1, 125, 3, 125, 66, 6, 27, 4, 18, - 67, 26, 125, 131, 2, 27, 67, 19, 125, 194, 28, 32, 67, 26, 155, 1, 146, 2, 24, 210, 0, 209, 146, 0, 247, 254, 253, 65, - 148, 3, 224, 5, 104, 48, 104, 113, 247, 254, 253, 59, 55, 1, 54, 8, 154, 0, 66, 151, 211, 246, 123, 43, 123, 106, 6, - 27, 4, 18, 67, 26, 123, 171, 2, 27, 67, 19, 123, 234, 67, 26, 42, 11, 209, 0, 224, 147, 42, 11, 216, 33, 42, 5, 208, - 90, 42, 5, 216, 13, 42, 2, 208, 67, 42, 2, 216, 3, 42, 1, 208, 0, 225, 101, 224, 55, 42, 3, 208, 64, 42, 4, 208, 0, - 225, 95, 224, 67, 42, 8, 208, 89, 42, 8, 216, 5, 42, 6, 208, 77, 42, 7, 208, 0, 225, 85, 224, 77, 42, 9, 208, 107, 42, - 10, 208, 0, 225, 79, 224, 107, 42, 128, 209, 0, 224, 167, 42, 128, 216, 9, 42, 13, 208, 114, 42, 13, 211, 107, 42, 14, - 208, 115, 42, 15, 208, 0, 225, 64, 224, 132, 42, 242, 209, 0, 224, 251, 42, 242, 216, 6, 42, 240, 209, 0, 224, 170, - 42, 241, 208, 0, 225, 52, 224, 215, 42, 243, 209, 0, 225, 19, 42, 248, 208, 0, 225, 45, 224, 55, 104, 163, 104, 32, - 104, 25, 247, 254, 253, 244, 224, 105, 104, 35, 104, 24, 247, 254, 253, 149, 224, 100, 104, 35, 104, 161, 104, 24, 104, - 226, 247, 254, 253, 212, 224, 93, 104, 35, 104, 161, 104, 24, 104, 226, 247, 254, 253, 185, 224, 86, 104, 35, 104, 24, - 104, 163, 104, 25, 105, 35, 104, 26, 247, 254, 253, 156, 224, 77, 104, 32, 247, 254, 253, 134, 224, 73, 104, 32, 247, - 254, 253, 88, 224, 69, 155, 2, 104, 32, 104, 162, 43, 1, 217, 3, 104, 19, 105, 33, 105, 162, 224, 1, 33, 0, 35, 0, 247, - 254, 255, 24, 224, 55, 155, 2, 104, 32, 104, 162, 43, 1, 217, 3, 104, 19, 105, 33, 105, 162, 224, 1, 33, 0, 35, 0, 247, - 254, 254, 188, 224, 41, 104, 32, 247, 254, 253, 40, 224, 37, 104, 32, 247, 254, 254, 122, 224, 33, 104, 32, 104, 161, - 247, 254, 253, 13, 224, 28, 104, 32, 104, 161, 247, 254, 252, 246, 224, 23, 104, 32, 104, 161, 247, 254, 252, 223, 224, - 18, 122, 43, 122, 106, 6, 27, 4, 18, 67, 26, 122, 171, 104, 33, 2, 27, 67, 19, 122, 234, 28, 16, 154, 1, 67, 24, 42, - 0, 208, 1, 104, 8, 104, 161, 247, 254, 252, 187, 28, 4, 224, 200, 104, 32, 104, 165, 105, 34, 36, 0, 35, 0, 147, 4, - 148, 5, 35, 0, 96, 19, 169, 4, 247, 254, 253, 217, 28, 4, 40, 101, 209, 0, 36, 0, 154, 4, 155, 5, 4, 146, 11, 155, 67, - 19, 96, 43, 224, 177, 104, 33, 72, 98, 104, 11, 34, 7, 64, 19, 96, 3, 104, 11, 34, 1, 72, 95, 9, 219, 64, 19, 96, 3, - 104, 11, 72, 94, 8, 219, 64, 19, 96, 3, 104, 11, 74, 92, 6, 155, 15, 155, 96, 19, 224, 153, 75, 91, 104, 27, 43, 0, - 219, 1, 36, 1, 224, 10, 75, 89, 104, 155, 240, 0, 248, 191, 40, 0, 209, 0, 224, 138, 74, 84, 35, 0, 96, 19, 36, 0, 77, - 82, 104, 43, 43, 0, 209, 25, 78, 81, 72, 82, 28, 49, 240, 4, 252, 183, 66, 68, 65, 68, 44, 0, 209, 10, 35, 1, 96, 43, - 72, 78, 33, 0, 247, 254, 253, 53, 40, 0, 219, 8, 247, 254, 252, 215, 224, 5, 105, 243, 240, 0, 248, 157, 35, 1, 66, - 91, 96, 43, 75, 67, 224, 58, 75, 66, 104, 27, 43, 0, 221, 5, 72, 66, 240, 4, 252, 37, 74, 63, 35, 0, 96, 19, 77, 61, - 104, 43, 43, 0, 208, 1, 36, 1, 224, 8, 75, 59, 105, 219, 240, 0, 248, 132, 66, 68, 65, 68, 35, 1, 66, 91, 96, 43, 75, - 54, 224, 60, 77, 57, 104, 43, 43, 0, 219, 1, 36, 1, 224, 9, 75, 55, 104, 155, 240, 0, 248, 115, 66, 68, 65, 68, 44, - 0, 209, 64, 35, 0, 96, 43, 77, 49, 104, 43, 43, 0, 209, 10, 72, 49, 73, 47, 240, 4, 252, 109, 40, 0, 209, 1, 36, 1, - 224, 2, 35, 1, 96, 43, 36, 0, 75, 41, 104, 27, 43, 0, 220, 42, 224, 42, 76, 39, 104, 35, 43, 0, 221, 4, 72, 39, 240, - 4, 251, 230, 35, 0, 96, 35, 77, 34, 104, 43, 43, 0, 208, 1, 36, 1, 224, 8, 75, 32, 105, 219, 240, 0, 248, 70, 66, 68, - 65, 68, 35, 1, 66, 91, 96, 43, 75, 27, 104, 27, 43, 0, 218, 14, 224, 12, 240, 1, 250, 26, 72, 26, 240, 1, 250, 73, 240, - 1, 250, 9, 72, 25, 240, 1, 250, 68, 231, 244, 36, 1, 224, 0, 36, 0, 37, 0, 224, 8, 155, 3, 53, 1, 104, 24, 104, 89, - 247, 254, 251, 196, 154, 3, 50, 8, 146, 3, 155, 0, 66, 157, 211, 243, 176, 7, 28, 32, 188, 240, 188, 2, 71, 8, 70, 192, - 19, 115, 247, 40, 19, 115, 247, 32, 19, 115, 160, 16, 19, 115, 247, 36, 19, 115, 160, 24, 19, 115, 171, 236, 19, 115, - 170, 65, 19, 115, 170, 56, 19, 115, 160, 20, 19, 115, 172, 12, 19, 115, 170, 68, 0, 76, 75, 64, 0, 15, 66, 64, 71, 24, - 70, 192, 181, 240, 176, 135, 240, 1, 250, 0, 28, 3, 72, 198, 33, 4, 96, 3, 247, 254, 251, 146, 74, 196, 35, 0, 96, 19, - 240, 1, 249, 233, 34, 0, 28, 1, 72, 194, 240, 1, 249, 214, 168, 5, 247, 255, 253, 197, 40, 0, 218, 3, 176, 7, 188, 240, - 188, 2, 71, 8, 74, 189, 146, 1, 35, 0, 152, 5, 169, 4, 34, 0, 147, 4, 247, 254, 251, 114, 144, 3, 155, 3, 43, 0, 209, - 244, 153, 4, 120, 10, 120, 75, 6, 18, 4, 27, 67, 19, 120, 138, 2, 18, 67, 26, 120, 203, 67, 19, 59, 1, 43, 6, 217, 0, - 226, 92, 74, 176, 0, 155, 88, 211, 70, 159, 123, 11, 123, 74, 6, 27, 4, 18, 67, 26, 123, 139, 2, 27, 67, 19, 123, 202, - 28, 22, 67, 30, 124, 74, 124, 11, 4, 18, 6, 27, 67, 26, 124, 139, 28, 48, 2, 27, 67, 19, 124, 202, 73, 164, 28, 21, - 67, 29, 240, 6, 250, 139, 40, 0, 209, 0, 226, 57, 73, 161, 28, 48, 240, 6, 250, 132, 40, 0, 209, 0, 226, 52, 73, 159, - 28, 48, 240, 6, 250, 125, 40, 0, 209, 2, 75, 150, 96, 24, 224, 8, 73, 155, 28, 48, 240, 6, 250, 116, 40, 0, 209, 4, - 74, 145, 35, 1, 96, 19, 77, 152, 226, 34, 73, 152, 28, 48, 240, 6, 250, 105, 28, 4, 40, 0, 209, 48, 75, 139, 77, 149, - 96, 24, 104, 43, 43, 0, 221, 3, 72, 147, 240, 4, 251, 13, 96, 44, 76, 144, 104, 35, 43, 0, 208, 1, 77, 140, 224, 8, - 75, 143, 105, 219, 240, 0, 250, 38, 66, 69, 65, 69, 35, 1, 66, 91, 96, 35, 76, 140, 104, 35, 43, 0, 221, 4, 72, 139, - 240, 4, 250, 246, 34, 0, 96, 34, 76, 135, 104, 35, 43, 0, 208, 0, 225, 244, 75, 135, 105, 219, 240, 0, 250, 15, 66, - 69, 65, 69, 35, 1, 66, 91, 96, 35, 225, 234, 28, 41, 28, 48, 247, 254, 251, 221, 28, 5, 40, 0, 219, 28, 73, 127, 28, - 48, 34, 8, 240, 6, 250, 245, 40, 0, 209, 2, 74, 125, 33, 0, 224, 7, 73, 124, 28, 48, 34, 9, 240, 6, 250, 235, 40, 0, - 208, 245, 224, 10, 104, 19, 51, 1, 208, 4, 49, 1, 50, 4, 41, 32, 209, 248, 224, 2, 74, 115, 0, 139, 80, 157, 74, 116, - 35, 1, 96, 19, 75, 115, 104, 27, 43, 0, 209, 0, 225, 164, 72, 114, 28, 41, 28, 50, 240, 0, 252, 206, 225, 158, 122, - 11, 122, 74, 6, 27, 4, 18, 67, 26, 122, 139, 2, 27, 67, 19, 122, 202, 73, 102, 28, 16, 67, 24, 34, 0, 104, 11, 66, 131, - 208, 4, 50, 1, 49, 4, 42, 32, 209, 248, 224, 4, 73, 96, 35, 1, 0, 146, 66, 91, 80, 83, 247, 254, 251, 57, 225, 163, - 123, 11, 123, 74, 6, 27, 4, 18, 67, 26, 123, 139, 36, 0, 2, 27, 67, 19, 123, 202, 28, 23, 67, 31, 124, 74, 124, 11, - 4, 18, 6, 27, 67, 26, 124, 139, 28, 56, 2, 27, 67, 19, 124, 202, 28, 22, 67, 30, 28, 49, 247, 254, 250, 97, 153, 4, - 122, 11, 122, 74, 6, 27, 4, 18, 67, 26, 122, 139, 2, 27, 67, 19, 122, 202, 73, 74, 67, 26, 104, 11, 66, 147, 208, 6, - 52, 1, 49, 4, 44, 32, 209, 248, 36, 6, 66, 100, 224, 5, 75, 73, 104, 27, 43, 0, 208, 1, 240, 1, 248, 171, 153, 4, 122, - 11, 122, 74, 6, 27, 4, 18, 67, 26, 122, 139, 122, 200, 2, 27, 67, 19, 67, 24, 28, 57, 28, 50, 247, 254, 251, 56, 28, - 5, 44, 0, 219, 5, 75, 61, 104, 27, 43, 0, 208, 1, 240, 1, 248, 135, 45, 0, 218, 14, 74, 54, 35, 1, 96, 19, 75, 53, 104, - 27, 43, 0, 208, 4, 72, 54, 28, 41, 28, 50, 240, 0, 252, 83, 75, 48, 34, 0, 96, 26, 28, 56, 28, 49, 247, 254, 250, 60, - 225, 54, 123, 11, 123, 74, 6, 27, 4, 18, 67, 26, 123, 139, 36, 0, 2, 27, 67, 19, 123, 202, 28, 22, 67, 30, 124, 74, - 124, 11, 4, 18, 6, 27, 67, 26, 124, 139, 28, 48, 2, 27, 67, 19, 124, 202, 28, 21, 67, 29, 28, 41, 247, 254, 249, 252, - 153, 4, 122, 11, 122, 74, 6, 27, 4, 18, 67, 26, 122, 139, 2, 27, 67, 19, 122, 202, 73, 23, 67, 26, 104, 11, 66, 147, - 208, 56, 52, 1, 49, 4, 44, 32, 209, 248, 36, 6, 66, 100, 224, 55, 19, 117, 188, 168, 19, 115, 247, 32, 19, 115, 32, - 61, 19, 115, 160, 160, 19, 115, 171, 56, 19, 115, 167, 229, 19, 115, 170, 72, 19, 115, 170, 85, 19, 115, 170, 93, 255, - 255, 251, 46, 19, 115, 169, 239, 19, 115, 160, 24, 19, 115, 170, 65, 19, 115, 171, 236, 19, 115, 160, 20, 19, 115, 170, - 68, 19, 115, 172, 12, 19, 115, 170, 100, 19, 115, 160, 32, 19, 115, 170, 109, 19, 117, 183, 96, 19, 115, 247, 36, 19, - 115, 170, 119, 19, 115, 160, 16, 19, 115, 170, 139, 75, 110, 104, 27, 43, 0, 208, 1, 240, 1, 248, 20, 153, 4, 122, 11, - 122, 74, 6, 27, 4, 18, 67, 26, 122, 139, 122, 200, 2, 27, 67, 19, 67, 24, 28, 42, 28, 49, 247, 254, 250, 141, 28, 5, - 44, 0, 218, 0, 224, 186, 75, 98, 104, 27, 43, 0, 209, 0, 224, 181, 240, 0, 255, 238, 224, 178, 123, 11, 123, 74, 6, - 27, 4, 18, 67, 26, 123, 139, 122, 200, 2, 27, 67, 19, 123, 202, 28, 22, 67, 30, 124, 74, 124, 11, 4, 18, 6, 27, 67, - 26, 124, 139, 2, 27, 67, 19, 124, 202, 28, 20, 67, 28, 122, 74, 122, 11, 4, 18, 6, 27, 67, 26, 122, 139, 28, 49, 2, - 27, 67, 19, 67, 24, 28, 34, 247, 254, 250, 73, 28, 5, 40, 0, 219, 0, 224, 138, 74, 75, 35, 1, 96, 19, 75, 74, 104, 27, - 43, 0, 208, 105, 72, 73, 28, 41, 28, 50, 28, 35, 224, 98, 122, 11, 122, 74, 6, 27, 4, 18, 67, 26, 122, 139, 72, 69, - 2, 27, 67, 19, 122, 202, 67, 26, 104, 3, 66, 147, 208, 4, 155, 1, 48, 4, 66, 152, 209, 248, 224, 112, 75, 60, 104, 27, - 43, 0, 208, 12, 123, 11, 123, 74, 6, 27, 4, 18, 67, 26, 123, 139, 123, 201, 2, 27, 67, 19, 72, 57, 67, 25, 240, 0, 251, - 111, 240, 0, 255, 159, 72, 55, 240, 0, 255, 206, 240, 0, 255, 142, 72, 53, 240, 0, 255, 201, 231, 244, 123, 11, 123, - 74, 6, 27, 4, 18, 67, 26, 123, 139, 78, 43, 2, 27, 67, 19, 123, 202, 67, 26, 42, 11, 209, 44, 126, 11, 126, 74, 6, 27, - 4, 18, 67, 26, 126, 139, 122, 200, 2, 27, 67, 19, 126, 202, 28, 20, 67, 28, 122, 74, 122, 11, 4, 18, 6, 27, 67, 26, - 122, 139, 28, 33, 2, 27, 67, 19, 67, 24, 247, 254, 249, 83, 33, 8, 28, 5, 28, 32, 247, 254, 249, 42, 74, 24, 35, 1, - 96, 19, 104, 51, 43, 0, 208, 5, 72, 28, 104, 34, 104, 99, 28, 41, 240, 0, 251, 46, 75, 18, 34, 0, 96, 26, 224, 21, 104, - 51, 43, 0, 208, 3, 72, 23, 28, 17, 240, 0, 251, 35, 240, 0, 255, 83, 72, 17, 240, 0, 255, 130, 240, 0, 255, 66, 72, - 15, 240, 0, 255, 125, 231, 244, 37, 0, 224, 1, 37, 101, 66, 109, 152, 4, 28, 41, 247, 254, 248, 208, 229, 129, 28, 8, - 247, 255, 251, 106, 28, 5, 231, 245, 19, 115, 160, 16, 19, 117, 183, 96, 19, 115, 247, 36, 19, 115, 170, 167, 19, 115, - 160, 32, 19, 115, 170, 195, 0, 76, 75, 64, 0, 15, 66, 64, 19, 115, 170, 237, 19, 115, 171, 13, 71, 24, 70, 192, 181, - 48, 74, 49, 35, 0, 176, 129, 96, 19, 28, 4, 247, 254, 248, 200, 28, 5, 32, 1, 66, 64, 247, 254, 248, 223, 247, 254, - 248, 189, 44, 38, 209, 16, 74, 42, 72, 42, 104, 19, 96, 3, 104, 81, 75, 41, 96, 25, 104, 146, 51, 4, 96, 26, 33, 12, - 247, 254, 248, 182, 75, 38, 72, 39, 104, 27, 224, 38, 44, 37, 209, 16, 74, 32, 72, 37, 104, 19, 96, 3, 104, 81, 75, - 36, 96, 25, 104, 146, 51, 4, 96, 26, 33, 12, 247, 254, 248, 163, 75, 29, 72, 32, 104, 27, 224, 19, 44, 57, 208, 1, 44, - 60, 209, 19, 74, 22, 72, 29, 104, 19, 96, 3, 104, 81, 75, 28, 96, 25, 104, 146, 51, 4, 96, 26, 33, 12, 247, 254, 248, - 142, 75, 18, 72, 25, 104, 27, 96, 3, 33, 4, 247, 254, 248, 135, 72, 23, 75, 23, 74, 24, 96, 3, 75, 24, 33, 8, 96, 26, - 247, 254, 248, 126, 73, 22, 34, 32, 104, 11, 28, 40, 67, 19, 96, 11, 247, 254, 248, 142, 176, 1, 32, 0, 188, 48, 188, - 2, 71, 8, 70, 192, 19, 115, 247, 32, 19, 115, 247, 56, 255, 255, 45, 64, 255, 255, 45, 68, 19, 115, 247, 44, 32, 0, - 33, 208, 255, 255, 46, 80, 255, 255, 46, 84, 32, 0, 95, 56, 255, 255, 48, 32, 255, 255, 48, 36, 32, 0, 97, 184, 32, - 16, 0, 204, 181, 112, 176, 136, 104, 133, 28, 1, 32, 16, 0, 208, 13, 128, 0, 192, 181, 112, 28, 4, 247, 254, 248, 70, - 28, 6, 32, 1, 66, 64, 247, 254, 248, 93, 247, 254, 248, 59, 77, 63, 75, 63, 28, 40, 96, 171, 33, 12, 247, 254, 248, - 60, 44, 38, 209, 26, 72, 60, 74, 61, 104, 3, 76, 61, 96, 19, 104, 35, 73, 60, 96, 83, 104, 11, 96, 147, 74, 59, 75, - 60, 96, 19, 104, 43, 96, 3, 104, 107, 96, 35, 104, 171, 96, 11, 33, 12, 247, 254, 248, 36, 74, 55, 75, 56, 72, 56, 96, - 19, 224, 59, 44, 37, 209, 26, 72, 55, 74, 46, 104, 3, 76, 54, 96, 19, 104, 35, 73, 54, 96, 83, 104, 11, 96, 147, 74, - 45, 75, 52, 96, 19, 104, 43, 96, 3, 104, 107, 96, 35, 104, 171, 96, 11, 33, 12, 247, 254, 248, 7, 74, 41, 75, 47, 72, - 48, 96, 19, 224, 30, 44, 57, 208, 1, 44, 60, 209, 34, 72, 45, 74, 31, 104, 3, 76, 45, 96, 19, 104, 35, 73, 44, 96, 83, - 104, 11, 96, 147, 74, 29, 75, 43, 96, 19, 74, 22, 104, 19, 96, 3, 104, 83, 96, 35, 104, 147, 96, 11, 33, 12, 247, 253, - 255, 231, 74, 25, 75, 37, 72, 38, 96, 19, 104, 2, 75, 37, 33, 4, 96, 26, 75, 37, 96, 3, 247, 253, 255, 219, 72, 36, - 75, 36, 104, 2, 33, 4, 96, 26, 75, 35, 34, 1, 67, 19, 96, 3, 247, 253, 255, 208, 33, 12, 72, 8, 247, 253, 255, 204, - 28, 48, 247, 253, 255, 225, 32, 0, 188, 112, 188, 2, 71, 8, 70, 192, 19, 115, 160, 160, 19, 115, 102, 144, 255, 255, - 45, 64, 19, 115, 247, 56, 255, 255, 45, 68, 255, 255, 45, 72, 19, 115, 247, 52, 255, 255, 45, 76, 19, 115, 160, 28, - 32, 0, 33, 156, 32, 0, 33, 208, 255, 255, 46, 80, 255, 255, 46, 84, 255, 255, 46, 88, 255, 255, 46, 92, 32, 0, 95, 10, - 32, 0, 95, 56, 255, 255, 48, 32, 255, 255, 48, 36, 255, 255, 48, 40, 255, 255, 48, 44, 32, 0, 97, 138, 32, 0, 97, 184, - 19, 115, 247, 44, 19, 115, 160, 172, 32, 16, 0, 208, 19, 115, 247, 72, 19, 115, 102, 209, 181, 48, 75, 53, 176, 129, - 96, 25, 75, 52, 28, 4, 104, 27, 28, 13, 43, 0, 208, 91, 75, 50, 104, 27, 43, 0, 221, 21, 73, 49, 247, 254, 250, 31, - 40, 0, 209, 16, 34, 0, 76, 47, 72, 48, 224, 3, 24, 131, 51, 32, 112, 25, 50, 1, 92, 161, 41, 0, 209, 248, 24, 131, 51, - 32, 28, 4, 112, 25, 52, 32, 224, 65, 120, 35, 43, 35, 209, 17, 34, 0, 72, 38, 224, 3, 24, 131, 51, 32, 112, 25, 50, - 1, 24, 163, 120, 89, 41, 0, 209, 247, 24, 131, 51, 32, 112, 25, 75, 27, 28, 4, 96, 29, 224, 44, 28, 32, 247, 254, 250, - 14, 40, 0, 209, 39, 75, 28, 33, 0, 104, 26, 72, 26, 0, 83, 24, 155, 74, 26, 0, 155, 24, 210, 224, 1, 84, 67, 49, 1, - 120, 19, 50, 1, 43, 0, 209, 249, 35, 47, 84, 67, 120, 35, 43, 47, 209, 0, 52, 1, 75, 16, 28, 72, 24, 25, 35, 0, 224, - 2, 112, 10, 51, 1, 49, 1, 92, 226, 42, 0, 209, 249, 73, 11, 24, 203, 84, 26, 74, 4, 35, 2, 96, 19, 28, 12, 176, 1, 28, - 32, 188, 48, 188, 2, 71, 8, 70, 192, 19, 115, 247, 48, 19, 115, 247, 32, 19, 115, 160, 24, 19, 115, 170, 75, 19, 115, - 171, 192, 19, 115, 160, 224, 19, 115, 247, 40, 19, 115, 171, 84, 181, 0, 75, 4, 176, 129, 28, 1, 104, 24, 247, 253, - 255, 53, 176, 1, 188, 1, 71, 0, 19, 115, 161, 224, 181, 0, 75, 15, 28, 1, 176, 129, 104, 24, 34, 32, 247, 253, 254, - 216, 40, 0, 209, 18, 33, 0, 34, 0, 35, 0, 32, 128, 247, 253, 254, 220, 72, 8, 240, 0, 253, 117, 33, 0, 34, 0, 35, 0, - 32, 129, 247, 253, 254, 211, 72, 4, 240, 0, 253, 108, 231, 236, 176, 1, 188, 2, 71, 8, 19, 115, 161, 224, 0, 7, 161, - 32, 181, 16, 76, 9, 104, 35, 43, 0, 218, 10, 33, 224, 72, 7, 2, 73, 247, 253, 254, 246, 96, 32, 40, 0, 218, 2, 32, 1, - 66, 64, 224, 0, 32, 0, 188, 16, 188, 2, 71, 8, 19, 115, 161, 224, 19, 115, 247, 96, 181, 240, 176, 129, 28, 7, 40, 0, - 209, 4, 74, 32, 35, 48, 112, 19, 112, 80, 224, 54, 77, 30, 28, 6, 28, 48, 33, 10, 240, 4, 251, 68, 28, 48, 28, 12, 33, - 10, 240, 4, 250, 245, 23, 227, 24, 228, 64, 92, 52, 48, 75, 24, 112, 44, 61, 1, 28, 6, 66, 157, 209, 236, 28, 42, 58, - 15, 35, 0, 118, 147, 47, 0, 219, 1, 32, 0, 224, 2, 35, 45, 112, 19, 32, 1, 34, 16, 73, 13, 224, 0, 50, 1, 92, 139, 43, - 48, 208, 251, 43, 0, 209, 0, 58, 1, 75, 8, 24, 153, 24, 27, 224, 2, 112, 26, 48, 1, 51, 1, 120, 10, 49, 1, 42, 0, 209, - 248, 75, 3, 84, 26, 176, 1, 188, 240, 188, 1, 71, 0, 70, 192, 19, 117, 188, 172, 19, 117, 188, 197, 19, 117, 188, 187, - 181, 240, 176, 129, 28, 6, 40, 0, 209, 4, 74, 26, 35, 48, 112, 19, 112, 80, 224, 42, 77, 24, 28, 47, 63, 10, 28, 48, - 33, 10, 240, 4, 250, 165, 28, 48, 28, 12, 33, 10, 240, 4, 250, 98, 52, 48, 112, 44, 61, 1, 28, 6, 66, 189, 209, 240, - 28, 42, 35, 0, 58, 15, 118, 147, 35, 16, 224, 0, 51, 1, 92, 209, 41, 48, 208, 251, 41, 0, 209, 0, 59, 1, 72, 8, 34, - 0, 24, 193, 28, 4, 224, 1, 84, 163, 50, 1, 120, 11, 49, 1, 43, 0, 209, 249, 84, 131, 176, 1, 188, 240, 188, 1, 71, 0, - 70, 192, 19, 117, 188, 172, 19, 117, 188, 197, 181, 16, 40, 0, 209, 4, 74, 25, 35, 48, 112, 19, 112, 80, 224, 42, 74, - 23, 36, 15, 28, 17, 57, 8, 28, 3, 64, 35, 9, 0, 43, 9, 221, 0, 51, 7, 51, 48, 112, 19, 58, 1, 66, 138, 209, 244, 58, - 15, 35, 0, 118, 19, 35, 48, 112, 19, 35, 120, 112, 83, 35, 16, 224, 0, 51, 1, 92, 209, 41, 48, 208, 251, 41, 0, 209, - 0, 59, 1, 72, 7, 34, 2, 24, 193, 28, 4, 224, 1, 84, 163, 50, 1, 120, 11, 49, 1, 43, 0, 209, 249, 84, 131, 188, 16, 188, - 1, 71, 0, 19, 117, 188, 172, 19, 117, 188, 195, 181, 240, 176, 129, 28, 7, 28, 13, 28, 8, 28, 17, 28, 22, 247, 253, - 254, 11, 76, 12, 104, 35, 43, 0, 208, 5, 28, 56, 28, 41, 28, 50, 247, 253, 254, 204, 224, 10, 35, 2, 96, 35, 28, 50, - 28, 56, 28, 41, 247, 253, 254, 18, 104, 35, 34, 1, 64, 19, 96, 35, 176, 1, 188, 240, 188, 1, 71, 0, 19, 117, 183, 96, - 180, 15, 181, 240, 75, 60, 176, 133, 104, 27, 174, 10, 206, 16, 7, 154, 212, 109, 72, 58, 43, 0, 208, 3, 33, 9, 247, - 253, 254, 211, 224, 2, 33, 9, 247, 253, 253, 233, 28, 7, 40, 0, 218, 78, 224, 95, 28, 98, 146, 3, 43, 37, 208, 11, 154, - 1, 112, 19, 152, 1, 240, 5, 253, 104, 153, 1, 28, 2, 28, 56, 156, 3, 247, 255, 255, 182, 224, 65, 120, 99, 43, 115, - 208, 44, 43, 115, 216, 4, 43, 100, 208, 7, 43, 105, 209, 49, 224, 4, 43, 117, 208, 10, 43, 120, 209, 44, 224, 21, 104, - 48, 247, 255, 254, 223, 72, 35, 29, 52, 240, 5, 253, 75, 224, 20, 104, 48, 247, 255, 255, 35, 152, 2, 240, 5, 253, 68, - 153, 2, 28, 2, 29, 52, 28, 56, 247, 255, 255, 146, 28, 38, 224, 21, 104, 48, 247, 255, 255, 83, 72, 24, 29, 52, 240, - 5, 253, 53, 28, 2, 73, 21, 28, 56, 231, 240, 104, 52, 29, 53, 28, 32, 240, 5, 253, 44, 28, 33, 28, 2, 28, 56, 247, 255, - 255, 123, 28, 46, 156, 3, 52, 1, 224, 3, 75, 13, 74, 13, 147, 2, 146, 1, 120, 35, 43, 0, 209, 170, 75, 7, 104, 27, 43, - 0, 208, 3, 28, 56, 247, 253, 254, 21, 224, 2, 28, 56, 247, 253, 253, 89, 176, 5, 188, 240, 188, 8, 176, 4, 71, 24, 19, - 117, 183, 96, 19, 115, 171, 224, 19, 117, 188, 172, 19, 115, 162, 0, 32, 1, 71, 112, 181, 16, 76, 11, 176, 130, 28, - 32, 33, 4, 247, 253, 253, 99, 75, 9, 33, 11, 104, 24, 35, 4, 147, 1, 34, 0, 35, 0, 148, 0, 247, 253, 253, 45, 40, 0, - 219, 0, 104, 32, 176, 2, 188, 16, 188, 2, 71, 8, 19, 117, 184, 32, 19, 115, 162, 32, 181, 0, 176, 129, 247, 255, 255, - 224, 35, 1, 176, 1, 64, 24, 188, 2, 71, 8, 70, 192, 181, 112, 176, 130, 28, 22, 42, 0, 209, 2, 32, 1, 66, 64, 224, 30, - 76, 17, 77, 18, 35, 0, 96, 43, 96, 19, 96, 99, 96, 163, 97, 35, 97, 99, 96, 32, 96, 225, 28, 40, 33, 4, 247, 253, 253, - 45, 28, 32, 33, 24, 247, 253, 253, 41, 75, 10, 33, 2, 104, 24, 35, 4, 147, 1, 28, 34, 35, 24, 149, 0, 247, 253, 252, - 243, 104, 43, 96, 51, 176, 2, 188, 112, 188, 2, 71, 8, 70, 192, 19, 117, 184, 64, 19, 117, 184, 32, 19, 115, 162, 32, - 181, 48, 76, 13, 37, 0, 176, 131, 96, 32, 96, 101, 96, 165, 96, 225, 97, 34, 97, 101, 28, 32, 33, 24, 247, 253, 253, - 4, 75, 7, 33, 1, 104, 24, 28, 34, 35, 24, 149, 0, 149, 1, 247, 253, 252, 207, 176, 3, 188, 48, 188, 2, 71, 8, 70, 192, - 19, 117, 184, 64, 19, 115, 162, 32, 181, 240, 176, 131, 28, 4, 72, 53, 157, 10, 96, 130, 154, 8, 96, 195, 28, 43, 97, - 2, 159, 9, 30, 90, 65, 147, 97, 195, 35, 0, 96, 65, 96, 4, 97, 71, 97, 133, 98, 3, 33, 36, 247, 253, 252, 219, 72, 44, - 33, 16, 247, 253, 252, 215, 45, 0, 208, 5, 155, 8, 28, 40, 28, 25, 67, 121, 247, 253, 252, 207, 74, 37, 105, 211, 43, - 0, 209, 3, 75, 37, 104, 27, 43, 1, 209, 26, 76, 36, 75, 32, 96, 165, 96, 35, 35, 36, 96, 99, 152, 8, 33, 24, 28, 3, - 67, 123, 96, 227, 75, 28, 28, 32, 97, 35, 35, 16, 97, 99, 247, 253, 252, 181, 75, 28, 33, 7, 104, 24, 34, 2, 35, 1, - 148, 0, 247, 253, 252, 117, 224, 9, 75, 23, 33, 7, 104, 24, 75, 19, 147, 0, 35, 16, 147, 1, 35, 36, 247, 253, 252, 118, - 28, 6, 45, 0, 208, 5, 154, 8, 28, 40, 28, 17, 67, 121, 247, 253, 252, 117, 76, 11, 33, 16, 28, 32, 247, 253, 252, 112, - 155, 11, 43, 0, 208, 7, 152, 12, 40, 16, 216, 4, 28, 24, 28, 33, 154, 12, 240, 4, 253, 111, 176, 3, 28, 48, 188, 240, - 188, 2, 71, 8, 19, 117, 183, 192, 19, 117, 184, 0, 19, 117, 183, 100, 19, 117, 183, 160, 19, 115, 162, 32, 181, 0, 75, - 9, 176, 135, 136, 27, 34, 0, 146, 0, 146, 1, 146, 2, 146, 3, 146, 4, 4, 27, 32, 7, 33, 3, 34, 2, 247, 255, 255, 120, - 176, 7, 188, 2, 71, 8, 70, 192, 19, 117, 183, 104, 181, 0, 176, 135, 35, 0, 32, 7, 33, 3, 34, 2, 147, 0, 147, 1, 147, - 2, 147, 3, 147, 4, 247, 255, 255, 101, 176, 7, 188, 2, 71, 8, 181, 112, 176, 134, 28, 5, 28, 14, 28, 20, 42, 0, 208, - 32, 247, 255, 255, 209, 40, 0, 219, 28, 2, 113, 28, 32, 247, 253, 252, 69, 75, 15, 104, 27, 43, 0, 209, 0, 2, 109, 35, - 128, 0, 155, 147, 1, 35, 0, 147, 3, 147, 4, 33, 3, 34, 1, 28, 43, 32, 25, 148, 2, 150, 0, 247, 255, 255, 64, 28, 4, - 67, 228, 247, 255, 255, 202, 15, 224, 224, 0, 32, 0, 176, 6, 188, 112, 188, 2, 71, 8, 70, 192, 19, 117, 183, 100, 181, - 240, 176, 129, 28, 7, 28, 14, 28, 21, 36, 0, 28, 56, 28, 49, 28, 42, 247, 255, 255, 197, 40, 0, 208, 1, 32, 1, 224, - 3, 52, 1, 44, 10, 209, 243, 32, 0, 176, 1, 188, 240, 188, 2, 71, 8, 70, 192, 181, 112, 176, 134, 28, 4, 28, 14, 28, - 21, 42, 0, 208, 32, 247, 255, 255, 137, 40, 0, 219, 28, 75, 17, 104, 27, 43, 0, 209, 0, 2, 100, 35, 128, 0, 155, 147, - 1, 35, 0, 34, 1, 147, 3, 147, 4, 33, 3, 28, 35, 32, 18, 150, 0, 149, 2, 247, 255, 254, 252, 28, 4, 2, 113, 28, 40, 67, - 228, 247, 253, 251, 196, 247, 255, 255, 130, 15, 224, 224, 0, 32, 0, 176, 6, 188, 112, 188, 2, 71, 8, 70, 192, 19, 117, - 183, 100, 181, 240, 176, 129, 28, 7, 28, 14, 28, 21, 36, 0, 28, 56, 28, 49, 28, 42, 247, 255, 255, 197, 40, 0, 208, - 1, 32, 1, 224, 3, 52, 1, 44, 10, 209, 243, 32, 0, 176, 1, 188, 240, 188, 2, 71, 8, 70, 192, 181, 0, 75, 9, 176, 129, - 104, 24, 40, 0, 219, 1, 247, 253, 251, 156, 74, 5, 35, 1, 66, 91, 96, 19, 74, 4, 35, 0, 176, 1, 32, 1, 96, 19, 188, - 2, 71, 8, 70, 192, 19, 115, 162, 32, 19, 117, 183, 112, 181, 16, 76, 7, 104, 35, 43, 0, 209, 1, 32, 0, 224, 4, 247, - 255, 255, 223, 35, 0, 96, 35, 32, 1, 188, 16, 188, 2, 71, 8, 70, 192, 19, 117, 183, 108, 181, 240, 176, 133, 144, 1, - 28, 15, 28, 22, 28, 29, 36, 10, 224, 17, 152, 1, 28, 57, 170, 3, 247, 255, 254, 73, 40, 0, 219, 15, 155, 3, 46, 0, 208, - 2, 66, 29, 209, 2, 224, 8, 66, 29, 209, 6, 72, 6, 240, 0, 249, 244, 60, 1, 210, 235, 28, 32, 224, 0, 32, 0, 176, 5, - 188, 240, 188, 2, 71, 8, 70, 192, 0, 0, 39, 16, 181, 240, 75, 199, 176, 141, 104, 27, 43, 1, 209, 0, 225, 106, 72, 197, - 33, 1, 247, 253, 251, 117, 76, 196, 96, 32, 40, 0, 218, 0, 225, 119, 79, 194, 33, 4, 28, 56, 247, 253, 251, 95, 77, - 193, 35, 0, 128, 43, 35, 4, 104, 32, 33, 4, 147, 1, 34, 0, 35, 0, 151, 0, 247, 253, 251, 39, 40, 0, 219, 1, 136, 59, - 128, 43, 247, 255, 253, 227, 37, 1, 66, 40, 209, 0, 225, 92, 3, 193, 213, 0, 224, 222, 76, 178, 104, 32, 247, 253, 251, - 34, 72, 175, 33, 1, 247, 253, 251, 74, 96, 32, 40, 0, 218, 0, 225, 77, 32, 47, 33, 1, 34, 7, 247, 255, 254, 35, 40, - 0, 218, 0, 225, 49, 32, 47, 33, 1, 34, 1, 35, 7, 247, 255, 255, 146, 40, 0, 218, 0, 225, 40, 33, 4, 74, 166, 32, 52, - 247, 255, 254, 18, 33, 4, 74, 164, 32, 56, 247, 255, 254, 13, 75, 163, 32, 41, 96, 29, 33, 1, 34, 14, 247, 255, 254, - 6, 40, 0, 218, 0, 225, 20, 32, 41, 33, 1, 34, 15, 247, 255, 253, 254, 40, 0, 218, 0, 225, 12, 32, 44, 33, 2, 34, 0, - 247, 255, 253, 246, 40, 0, 218, 0, 225, 4, 32, 44, 33, 2, 74, 150, 247, 255, 253, 238, 40, 0, 218, 0, 224, 252, 32, - 44, 33, 2, 34, 0, 35, 2, 247, 255, 255, 93, 40, 0, 218, 0, 224, 243, 32, 44, 33, 2, 74, 142, 247, 255, 253, 221, 40, - 0, 218, 0, 224, 235, 32, 46, 33, 1, 34, 14, 247, 255, 253, 213, 40, 0, 218, 0, 224, 227, 36, 0, 32, 0, 33, 0, 34, 0, - 35, 0, 148, 0, 148, 1, 148, 2, 148, 3, 148, 4, 247, 255, 253, 230, 40, 0, 218, 0, 224, 212, 35, 16, 147, 4, 35, 213, - 174, 7, 32, 8, 33, 0, 34, 7, 0, 91, 148, 0, 148, 1, 148, 2, 150, 3, 247, 255, 253, 213, 40, 0, 218, 0, 224, 195, 155, - 7, 34, 255, 64, 19, 43, 170, 208, 0, 224, 189, 37, 10, 224, 34, 32, 55, 33, 3, 34, 1, 35, 0, 148, 0, 148, 1, 148, 2, - 148, 3, 148, 4, 247, 255, 253, 191, 40, 0, 218, 0, 224, 173, 35, 16, 147, 4, 32, 41, 33, 0, 34, 4, 75, 107, 148, 0, - 148, 1, 148, 2, 150, 3, 247, 255, 253, 176, 40, 0, 218, 0, 224, 158, 104, 51, 43, 0, 219, 5, 72, 101, 240, 0, 249, 13, - 61, 1, 210, 218, 224, 149, 45, 0, 218, 0, 224, 146, 74, 93, 0, 89, 213, 2, 35, 1, 96, 19, 224, 0, 96, 20, 77, 87, 74, - 94, 136, 43, 146, 3, 34, 16, 36, 0, 146, 4, 4, 27, 32, 2, 33, 0, 34, 3, 148, 0, 148, 1, 148, 2, 247, 255, 253, 138, - 40, 0, 219, 121, 171, 11, 147, 3, 35, 4, 147, 4, 32, 3, 33, 0, 34, 6, 35, 0, 148, 0, 148, 1, 148, 2, 247, 255, 253, - 123, 40, 0, 219, 106, 155, 11, 12, 27, 128, 43, 224, 7, 35, 128, 3, 91, 74, 70, 64, 3, 208, 1, 96, 21, 224, 0, 96, 19, - 36, 0, 32, 40, 33, 1, 170, 11, 148, 11, 247, 255, 253, 20, 40, 0, 219, 105, 154, 11, 35, 253, 64, 26, 35, 2, 67, 26, - 32, 40, 33, 1, 146, 11, 247, 255, 253, 58, 40, 0, 219, 93, 37, 1, 28, 56, 33, 4, 96, 61, 247, 253, 250, 68, 75, 49, - 33, 6, 104, 24, 28, 58, 35, 4, 148, 0, 148, 1, 247, 253, 250, 15, 40, 0, 219, 76, 247, 255, 253, 189, 40, 0, 219, 72, - 35, 128, 32, 16, 33, 3, 34, 1, 0, 155, 148, 0, 148, 1, 148, 2, 148, 3, 148, 4, 247, 255, 253, 55, 40, 0, 219, 27, 75, - 37, 32, 55, 136, 27, 33, 3, 4, 27, 34, 1, 148, 0, 148, 1, 148, 2, 148, 3, 148, 4, 247, 255, 253, 40, 40, 0, 219, 12, - 32, 6, 33, 3, 34, 1, 35, 2, 148, 0, 148, 1, 148, 2, 148, 3, 148, 4, 247, 255, 253, 27, 40, 0, 218, 2, 247, 255, 253, - 165, 224, 27, 247, 255, 253, 162, 75, 28, 96, 29, 75, 15, 96, 29, 32, 1, 224, 22, 33, 1, 34, 7, 32, 47, 247, 255, 252, - 233, 33, 1, 34, 1, 35, 7, 32, 47, 247, 255, 254, 91, 76, 10, 104, 32, 247, 253, 249, 209, 72, 7, 33, 1, 247, 253, 249, - 249, 96, 32, 247, 255, 254, 38, 32, 0, 176, 13, 188, 240, 188, 2, 71, 8, 70, 192, 19, 117, 183, 112, 19, 115, 162, 64, - 19, 115, 162, 32, 19, 117, 184, 32, 19, 117, 183, 104, 1, 63, 0, 195, 19, 117, 183, 100, 0, 0, 1, 1, 0, 0, 1, 7, 64, - 48, 0, 0, 0, 0, 39, 16, 19, 117, 183, 116, 19, 117, 183, 108, 181, 0, 176, 129, 32, 129, 33, 0, 34, 0, 35, 0, 247, 253, - 249, 134, 176, 1, 188, 1, 71, 0, 70, 192, 181, 0, 176, 129, 32, 128, 33, 0, 34, 0, 35, 0, 247, 253, 249, 122, 176, 1, - 188, 1, 71, 0, 70, 192, 181, 48, 28, 13, 28, 4, 28, 19, 176, 129, 28, 42, 28, 33, 32, 16, 247, 253, 249, 108, 176, 1, - 188, 48, 188, 2, 71, 8, 181, 0, 176, 129, 32, 18, 33, 0, 34, 0, 35, 0, 247, 253, 249, 96, 176, 1, 188, 2, 71, 8, 70, - 192, 181, 0, 176, 129, 32, 17, 33, 0, 34, 0, 35, 0, 247, 253, 249, 84, 176, 1, 188, 2, 71, 8, 70, 192, 181, 240, 77, - 18, 176, 131, 28, 4, 73, 17, 34, 0, 104, 40, 247, 253, 249, 119, 75, 16, 28, 33, 104, 24, 247, 253, 249, 98, 78, 12, - 28, 47, 172, 1, 104, 56, 28, 33, 34, 0, 247, 253, 249, 114, 155, 1, 66, 179, 209, 247, 104, 40, 28, 33, 34, 0, 247, - 253, 249, 106, 75, 5, 104, 24, 247, 253, 249, 98, 176, 3, 188, 240, 188, 1, 71, 0, 19, 115, 162, 96, 0, 0, 5, 85, 19, - 115, 162, 100, 181, 16, 76, 12, 104, 35, 43, 0, 218, 16, 32, 64, 247, 255, 250, 68, 33, 16, 247, 253, 249, 89, 75, 8, - 28, 2, 96, 32, 33, 1, 72, 7, 247, 253, 249, 98, 75, 6, 96, 24, 247, 253, 249, 66, 188, 16, 188, 1, 71, 0, 70, 192, 19, - 115, 162, 96, 0, 0, 6, 102, 0, 15, 66, 64, 19, 115, 162, 100, 181, 48, 28, 5, 28, 12, 28, 16, 33, 0, 224, 15, 92, 106, - 92, 99, 66, 154, 210, 2, 32, 1, 66, 64, 224, 11, 66, 154, 217, 1, 32, 1, 224, 7, 42, 0, 208, 4, 43, 0, 208, 2, 49, 1, - 66, 129, 211, 237, 32, 0, 188, 48, 188, 2, 71, 8, 181, 16, 28, 12, 35, 0, 28, 17, 224, 1, 84, 196, 51, 1, 66, 139, 211, - 251, 247, 253, 249, 23, 188, 16, 188, 1, 71, 0, 181, 16, 28, 12, 28, 17, 34, 0, 224, 2, 92, 163, 84, 131, 50, 1, 66, - 138, 211, 250, 247, 253, 249, 8, 188, 16, 188, 1, 71, 0, 70, 192, 181, 0, 28, 10, 176, 129, 33, 0, 224, 1, 84, 67, 49, - 1, 92, 83, 43, 0, 209, 250, 84, 67, 247, 253, 248, 247, 176, 1, 188, 1, 71, 0, 181, 0, 176, 129, 120, 3, 28, 2, 48, - 1, 43, 0, 209, 250, 28, 16, 247, 255, 255, 230, 176, 1, 188, 1, 71, 0, 70, 192, 32, 1, 71, 112, 181, 16, 76, 6, 104, - 32, 40, 0, 219, 4, 247, 253, 248, 189, 35, 1, 66, 91, 96, 35, 32, 1, 188, 16, 188, 2, 71, 8, 19, 115, 162, 104, 181, - 240, 78, 24, 176, 163, 104, 51, 28, 7, 43, 0, 218, 2, 36, 6, 66, 100, 224, 34, 35, 31, 172, 18, 173, 2, 34, 32, 67, - 156, 67, 157, 24, 164, 24, 173, 35, 4, 96, 37, 96, 99, 28, 32, 33, 8, 247, 253, 248, 187, 35, 1, 104, 48, 73, 12, 34, - 0, 148, 0, 247, 253, 248, 124, 33, 4, 28, 4, 28, 40, 247, 253, 248, 175, 104, 45, 75, 7, 96, 29, 44, 0, 208, 2, 47, - 0, 208, 0, 96, 61, 176, 35, 28, 32, 188, 240, 188, 2, 71, 8, 19, 115, 162, 104, 85, 77, 83, 2, 19, 117, 184, 96, 181, - 0, 176, 129, 32, 0, 247, 255, 255, 195, 28, 3, 23, 192, 26, 192, 176, 1, 15, 192, 188, 2, 71, 8, 181, 16, 76, 16, 176, - 130, 104, 35, 43, 0, 218, 21, 72, 14, 33, 0, 247, 253, 248, 146, 96, 32, 40, 0, 219, 12, 35, 0, 73, 11, 34, 0, 147, - 0, 247, 253, 248, 69, 32, 0, 247, 255, 255, 166, 40, 0, 220, 3, 247, 255, 255, 146, 32, 0, 224, 0, 32, 1, 176, 2, 188, - 16, 188, 2, 71, 8, 70, 192, 19, 115, 162, 104, 19, 115, 162, 128, 85, 77, 83, 1, 181, 240, 176, 183, 147, 3, 75, 46, - 77, 46, 104, 27, 28, 6, 147, 5, 104, 43, 70, 140, 146, 4, 43, 0, 219, 76, 33, 31, 171, 38, 32, 32, 67, 139, 24, 28, - 171, 22, 67, 139, 170, 6, 24, 27, 67, 138, 96, 30, 70, 97, 24, 18, 28, 38, 96, 17, 54, 8, 96, 35, 35, 4, 96, 99, 96, - 162, 96, 115, 154, 4, 28, 39, 97, 34, 153, 5, 55, 16, 70, 99, 67, 75, 96, 123, 104, 32, 104, 97, 247, 253, 248, 58, - 104, 160, 104, 113, 247, 253, 248, 54, 105, 32, 104, 121, 247, 253, 248, 50, 28, 32, 33, 24, 247, 253, 248, 46, 154, - 3, 42, 0, 209, 5, 104, 40, 73, 18, 148, 0, 34, 2, 35, 1, 224, 4, 73, 17, 104, 40, 34, 3, 148, 0, 35, 0, 247, 252, 255, - 230, 40, 0, 219, 13, 104, 32, 104, 97, 247, 252, 255, 244, 104, 160, 104, 113, 247, 252, 255, 240, 105, 32, 104, 121, - 247, 252, 255, 236, 32, 1, 224, 0, 32, 0, 176, 55, 188, 240, 188, 2, 71, 8, 70, 192, 19, 117, 184, 96, 19, 115, 162, - 104, 85, 77, 83, 3, 85, 77, 83, 4, 181, 0, 176, 129, 35, 1, 247, 255, 255, 147, 176, 1, 188, 2, 71, 8, 181, 0, 75, 7, - 176, 129, 104, 27, 43, 0, 218, 1, 32, 0, 224, 3, 247, 255, 255, 238, 30, 67, 65, 152, 176, 1, 188, 2, 71, 8, 70, 192, - 19, 115, 162, 104, 181, 0, 176, 129, 35, 0, 247, 255, 255, 121, 176, 1, 188, 2, 71, 8, 181, 0, 75, 7, 176, 129, 104, - 27, 43, 0, 218, 1, 32, 0, 224, 3, 247, 255, 255, 238, 30, 67, 65, 152, 176, 1, 188, 2, 71, 8, 70, 192, 19, 115, 162, - 104, 181, 240, 176, 129, 28, 6, 39, 0, 37, 0, 224, 18, 105, 115, 25, 92, 104, 227, 43, 0, 208, 7, 104, 48, 104, 33, - 104, 98, 105, 35, 240, 1, 250, 125, 40, 0, 208, 9, 105, 115, 34, 0, 25, 91, 96, 218, 55, 1, 53, 20, 104, 179, 66, 159, - 211, 233, 32, 1, 176, 1, 188, 240, 188, 2, 71, 8, 70, 192, 181, 240, 176, 133, 144, 2, 28, 14, 146, 1, 147, 3, 224, - 89, 154, 2, 155, 2, 104, 146, 32, 1, 70, 148, 105, 92, 66, 64, 39, 0, 37, 0, 224, 22, 104, 33, 28, 74, 208, 15, 66, - 142, 217, 2, 26, 115, 104, 98, 224, 1, 154, 1, 27, 139, 66, 147, 65, 155, 66, 91, 43, 0, 208, 3, 66, 129, 210, 1, 28, - 39, 224, 0, 28, 1, 53, 1, 52, 20, 28, 8, 69, 101, 211, 230, 47, 0, 208, 44, 104, 60, 66, 180, 217, 15, 155, 2, 27, 164, - 104, 24, 28, 49, 28, 34, 155, 3, 240, 1, 250, 53, 154, 3, 2, 99, 24, 210, 155, 1, 146, 3, 27, 27, 25, 54, 147, 1, 104, - 59, 26, 242, 104, 123, 26, 157, 155, 1, 66, 157, 217, 0, 28, 29, 105, 56, 2, 83, 2, 108, 24, 192, 28, 34, 153, 3, 240, - 4, 248, 65, 154, 3, 155, 1, 25, 18, 146, 3, 27, 91, 34, 1, 147, 1, 25, 118, 96, 250, 224, 7, 155, 2, 28, 49, 104, 24, - 154, 1, 155, 3, 240, 1, 250, 12, 224, 2, 154, 1, 42, 0, 209, 162, 176, 5, 32, 1, 188, 240, 188, 2, 71, 8, 70, 192, 181, - 240, 176, 137, 145, 4, 105, 66, 28, 6, 146, 5, 104, 131, 104, 194, 39, 0, 32, 1, 70, 156, 146, 6, 153, 5, 37, 0, 151, - 7, 66, 64, 224, 28, 104, 11, 154, 4, 28, 12, 147, 1, 66, 154, 211, 8, 154, 1, 104, 75, 24, 211, 154, 4, 66, 154, 210, - 2, 155, 1, 51, 1, 209, 70, 47, 0, 209, 9, 154, 1, 50, 1, 209, 1, 39, 1, 224, 2, 104, 139, 66, 131, 210, 1, 104, 136, - 149, 7, 53, 1, 49, 20, 69, 101, 211, 224, 47, 0, 209, 17, 154, 7, 0, 147, 24, 155, 154, 5, 0, 155, 24, 212, 104, 227, - 43, 1, 209, 8, 104, 48, 104, 33, 104, 98, 105, 35, 240, 1, 249, 193, 40, 0, 208, 41, 96, 231, 155, 4, 105, 52, 153, - 6, 27, 24, 240, 3, 250, 226, 154, 6, 28, 19, 67, 67, 25, 29, 104, 115, 24, 169, 66, 153, 217, 0, 28, 25, 154, 7, 27, - 79, 0, 147, 24, 155, 154, 5, 0, 155, 24, 212, 35, 1, 66, 91, 96, 35, 104, 48, 105, 35, 28, 41, 28, 58, 240, 1, 249, - 181, 40, 0, 208, 7, 96, 37, 96, 103, 74, 6, 104, 19, 51, 1, 96, 19, 96, 163, 224, 0, 36, 0, 176, 9, 28, 32, 188, 240, - 188, 2, 71, 8, 70, 192, 19, 117, 184, 100, 181, 240, 176, 131, 145, 1, 153, 8, 38, 128, 147, 0, 0, 182, 24, 203, 28, - 23, 66, 179, 216, 26, 28, 17, 247, 255, 255, 124, 28, 5, 40, 0, 208, 20, 104, 4, 105, 0, 27, 60, 2, 100, 25, 0, 33, - 0, 28, 50, 240, 4, 248, 50, 154, 0, 105, 40, 24, 164, 25, 0, 153, 1, 154, 8, 240, 3, 255, 142, 35, 1, 96, 235, 32, 1, - 224, 0, 32, 0, 176, 3, 188, 240, 188, 2, 71, 8, 70, 192, 181, 240, 176, 129, 28, 30, 155, 6, 28, 21, 25, 154, 35, 128, - 0, 155, 28, 15, 66, 154, 216, 19, 28, 41, 247, 255, 255, 80, 28, 4, 40, 0, 208, 13, 104, 3, 105, 0, 26, 235, 2, 91, - 25, 155, 24, 192, 28, 57, 154, 6, 240, 3, 255, 105, 35, 1, 96, 227, 32, 1, 224, 0, 32, 0, 176, 1, 188, 240, 188, 2, - 71, 8, 181, 112, 176, 132, 28, 4, 152, 8, 28, 30, 35, 0, 28, 21, 147, 3, 170, 3, 40, 2, 208, 7, 40, 4, 208, 9, 40, 1, - 208, 1, 32, 0, 224, 19, 112, 17, 224, 10, 10, 11, 112, 17, 112, 83, 224, 6, 10, 11, 112, 83, 12, 11, 112, 147, 14, 11, - 112, 17, 112, 211, 144, 0, 169, 3, 28, 32, 28, 42, 28, 51, 247, 255, 255, 183, 176, 4, 188, 112, 188, 2, 71, 8, 70, - 192, 181, 240, 176, 129, 159, 6, 28, 20, 28, 29, 24, 250, 35, 128, 0, 155, 28, 14, 66, 154, 216, 16, 28, 33, 247, 255, - 255, 2, 40, 0, 208, 11, 104, 3, 105, 1, 26, 227, 2, 91, 25, 91, 24, 201, 28, 48, 28, 58, 240, 3, 255, 28, 32, 1, 224, - 0, 32, 0, 176, 1, 188, 240, 188, 2, 71, 8, 70, 192, 181, 112, 176, 132, 157, 8, 172, 3, 28, 14, 28, 33, 149, 0, 247, - 255, 255, 213, 40, 0, 208, 26, 45, 2, 208, 5, 45, 4, 208, 10, 45, 1, 209, 20, 120, 35, 224, 3, 120, 99, 120, 34, 2, - 27, 67, 19, 96, 51, 32, 1, 224, 12, 120, 98, 120, 163, 2, 18, 4, 27, 67, 26, 120, 35, 67, 26, 120, 227, 6, 27, 67, 26, - 96, 50, 231, 241, 32, 0, 176, 4, 188, 112, 188, 2, 71, 8, 70, 192, 181, 240, 176, 131, 144, 0, 28, 15, 28, 22, 147, - 1, 224, 25, 152, 0, 28, 57, 247, 255, 254, 183, 40, 0, 208, 22, 104, 3, 26, 250, 104, 67, 26, 157, 66, 181, 217, 0, - 28, 53, 105, 1, 2, 83, 2, 108, 24, 201, 152, 1, 28, 34, 240, 3, 254, 204, 155, 1, 25, 127, 25, 27, 147, 1, 27, 118, - 46, 0, 209, 227, 32, 1, 176, 3, 188, 240, 188, 2, 71, 8, 181, 112, 28, 6, 37, 0, 247, 255, 254, 9, 36, 0, 224, 5, 25, - 3, 105, 24, 247, 254, 254, 175, 53, 1, 52, 20, 104, 179, 105, 112, 66, 157, 211, 245, 247, 254, 254, 167, 28, 48, 247, - 254, 254, 164, 188, 112, 188, 1, 71, 0, 70, 192, 181, 240, 176, 133, 144, 0, 28, 14, 28, 20, 28, 31, 41, 1, 216, 0, - 38, 2, 44, 7, 216, 0, 36, 8, 32, 24, 247, 254, 254, 157, 28, 5, 40, 0, 208, 46, 96, 7, 155, 10, 96, 134, 96, 67, 96, - 196, 152, 0, 28, 49, 240, 3, 249, 207, 0, 176, 25, 128, 97, 41, 0, 128, 247, 254, 254, 139, 144, 3, 40, 0, 209, 4, 28, - 40, 247, 254, 254, 121, 37, 0, 224, 23, 2, 100, 148, 1, 35, 0, 39, 1, 156, 3, 147, 2, 66, 127, 35, 0, 96, 99, 96, 163, - 96, 227, 96, 39, 152, 1, 247, 254, 254, 116, 97, 32, 155, 2, 52, 20, 51, 1, 147, 2, 66, 179, 211, 240, 155, 3, 97, 107, - 176, 5, 28, 40, 188, 240, 188, 2, 71, 8, 181, 48, 28, 12, 33, 0, 112, 33, 120, 3, 28, 2, 43, 229, 208, 42, 43, 46, 208, - 1, 32, 0, 224, 12, 112, 35, 120, 64, 40, 46, 209, 2, 112, 96, 112, 161, 224, 31, 112, 97, 224, 29, 84, 35, 48, 1, 40, - 8, 208, 2, 92, 19, 43, 32, 209, 248, 122, 19, 28, 21, 53, 8, 43, 32, 208, 15, 28, 1, 24, 34, 35, 46, 112, 19, 48, 1, - 49, 4, 224, 5, 48, 1, 112, 83, 53, 1, 50, 1, 66, 136, 208, 2, 120, 43, 43, 32, 209, 246, 35, 0, 84, 35, 120, 32, 30, - 67, 65, 152, 188, 48, 188, 2, 71, 8, 70, 192, 181, 16, 122, 3, 126, 140, 126, 200, 43, 3, 209, 9, 125, 75, 125, 10, - 2, 27, 67, 19, 4, 27, 2, 2, 67, 34, 28, 24, 67, 16, 224, 2, 2, 3, 28, 24, 67, 32, 188, 16, 188, 2, 71, 8, 181, 112, - 104, 3, 28, 13, 104, 27, 28, 22, 96, 19, 247, 255, 255, 226, 96, 112, 122, 235, 6, 217, 212, 1, 74, 38, 224, 0, 74, - 38, 7, 217, 212, 1, 35, 146, 224, 0, 35, 0, 67, 19, 96, 179, 35, 1, 129, 179, 129, 243, 35, 2, 130, 51, 104, 51, 32, - 0, 97, 115, 127, 106, 127, 171, 2, 18, 4, 27, 67, 26, 127, 43, 36, 0, 67, 26, 127, 235, 6, 27, 67, 26, 97, 178, 124, - 233, 124, 171, 2, 9, 67, 25, 240, 2, 252, 176, 98, 52, 97, 240, 125, 232, 125, 171, 126, 105, 2, 0, 67, 24, 126, 43, - 2, 9, 67, 25, 240, 2, 252, 164, 98, 180, 98, 112, 123, 232, 123, 171, 124, 105, 2, 0, 67, 24, 124, 43, 2, 9, 67, 25, - 240, 2, 252, 152, 35, 128, 0, 155, 99, 115, 105, 178, 75, 8, 98, 240, 24, 210, 23, 211, 13, 219, 24, 155, 18, 91, 99, - 52, 99, 179, 99, 244, 100, 52, 188, 112, 188, 1, 71, 0, 0, 0, 129, 36, 0, 0, 65, 36, 0, 0, 1, 255, 181, 240, 35, 0, - 98, 11, 98, 75, 98, 139, 28, 10, 28, 11, 28, 12, 50, 44, 51, 32, 28, 7, 203, 35, 194, 35, 28, 37, 53, 56, 34, 128, 176, - 129, 38, 46, 28, 40, 0, 82, 33, 0, 240, 3, 254, 53, 112, 46, 28, 32, 33, 0, 34, 32, 240, 3, 254, 47, 28, 32, 33, 32, - 34, 11, 240, 3, 254, 42, 35, 16, 112, 38, 114, 227, 105, 251, 176, 1, 118, 163, 10, 27, 118, 227, 139, 187, 32, 1, 117, - 35, 10, 27, 117, 99, 188, 240, 188, 2, 71, 8, 181, 240, 176, 139, 144, 3, 145, 2, 146, 1, 42, 0, 209, 1, 32, 0, 224, - 61, 34, 0, 171, 6, 169, 4, 96, 90, 96, 74, 146, 6, 146, 4, 74, 29, 38, 0, 37, 0, 146, 0, 155, 3, 154, 2, 25, 155, 147, - 3, 155, 0, 25, 82, 146, 2, 153, 3, 104, 26, 168, 9, 171, 6, 240, 3, 249, 85, 155, 0, 28, 6, 104, 26, 168, 8, 153, 2, - 171, 4, 240, 3, 249, 77, 28, 5, 46, 0, 219, 18, 40, 0, 219, 16, 154, 1, 27, 146, 146, 1, 42, 0, 208, 11, 159, 9, 28, - 56, 240, 4, 253, 79, 28, 4, 152, 8, 240, 4, 253, 75, 66, 132, 209, 1, 47, 0, 209, 212, 152, 9, 240, 4, 253, 68, 28, - 4, 152, 8, 240, 4, 253, 64, 26, 32, 176, 11, 188, 240, 188, 2, 71, 8, 70, 192, 19, 115, 162, 160, 181, 240, 28, 14, - 104, 179, 104, 12, 51, 1, 176, 129, 28, 5, 28, 23, 104, 73, 43, 16, 209, 34, 106, 195, 49, 1, 66, 153, 209, 21, 44, - 0, 208, 21, 28, 33, 240, 2, 249, 240, 75, 17, 66, 152, 209, 10, 47, 0, 208, 25, 28, 40, 28, 33, 240, 2, 251, 173, 40, - 1, 217, 19, 107, 235, 66, 152, 216, 16, 28, 4, 33, 0, 224, 7, 44, 0, 209, 5, 106, 107, 105, 170, 26, 155, 66, 153, 208, - 6, 36, 0, 35, 0, 96, 52, 96, 113, 96, 179, 32, 1, 224, 0, 32, 0, 176, 1, 188, 240, 188, 2, 71, 8, 15, 255, 255, 255, - 181, 240, 176, 147, 171, 15, 28, 10, 28, 5, 50, 32, 28, 24, 202, 208, 192, 208, 107, 74, 39, 27, 146, 3, 107, 12, 32, - 1, 148, 4, 106, 201, 36, 0, 145, 5, 28, 30, 66, 127, 224, 61, 104, 50, 104, 104, 42, 1, 217, 5, 106, 235, 58, 2, 67, - 90, 106, 107, 24, 211, 224, 0, 105, 171, 104, 114, 33, 32, 24, 154, 104, 179, 145, 0, 1, 91, 169, 7, 247, 255, 253, - 151, 70, 106, 119, 23, 104, 50, 104, 104, 42, 1, 217, 5, 106, 235, 58, 2, 67, 90, 106, 107, 24, 211, 224, 0, 105, 171, - 104, 114, 169, 7, 24, 154, 104, 179, 36, 32, 1, 91, 148, 0, 247, 255, 253, 51, 104, 51, 153, 5, 66, 139, 209, 9, 104, - 115, 154, 4, 66, 147, 209, 5, 156, 3, 104, 179, 27, 27, 66, 92, 65, 92, 224, 0, 36, 0, 28, 40, 28, 49, 34, 0, 247, 255, - 255, 115, 40, 0, 208, 1, 44, 0, 208, 189, 176, 19, 30, 67, 65, 152, 188, 240, 188, 2, 71, 8, 70, 192, 181, 240, 176, - 135, 175, 0, 96, 250, 28, 58, 35, 0, 50, 16, 96, 83, 97, 59, 75, 28, 28, 14, 104, 27, 70, 105, 51, 14, 8, 219, 0, 219, - 26, 201, 70, 141, 104, 249, 70, 107, 57, 1, 28, 5, 96, 187, 36, 0, 96, 121, 224, 25, 28, 58, 104, 184, 50, 16, 240, - 5, 250, 1, 40, 0, 218, 2, 36, 1, 66, 100, 224, 23, 104, 251, 25, 1, 66, 153, 210, 17, 40, 0, 221, 15, 34, 0, 104, 188, - 92, 163, 50, 1, 112, 43, 53, 1, 66, 130, 219, 248, 54, 2, 28, 12, 104, 121, 66, 140, 210, 2, 136, 49, 41, 0, 209, 223, - 35, 0, 112, 43, 70, 189, 176, 7, 28, 32, 188, 240, 188, 2, 71, 8, 19, 115, 162, 160, 181, 240, 76, 72, 28, 11, 68, 165, - 172, 145, 51, 32, 28, 34, 28, 14, 28, 7, 203, 35, 194, 35, 106, 242, 107, 112, 107, 49, 51, 12, 146, 7, 34, 128, 144, - 5, 145, 6, 28, 24, 33, 0, 0, 82, 147, 4, 240, 3, 252, 215, 73, 61, 32, 1, 37, 0, 145, 3, 224, 72, 104, 34, 104, 120, - 42, 1, 217, 5, 106, 251, 58, 2, 67, 90, 106, 123, 24, 211, 224, 0, 105, 187, 104, 98, 33, 32, 24, 154, 104, 163, 145, - 0, 1, 91, 169, 137, 247, 255, 252, 236, 104, 35, 154, 7, 66, 147, 209, 14, 104, 99, 157, 6, 66, 171, 209, 10, 104, 163, - 152, 5, 66, 131, 209, 6, 28, 48, 169, 137, 34, 32, 240, 3, 252, 17, 37, 1, 224, 28, 169, 137, 120, 11, 34, 64, 67, 147, - 0, 90, 24, 210, 0, 146, 24, 210, 58, 13, 42, 247, 221, 0, 34, 241, 0, 82, 171, 9, 72, 33, 24, 153, 200, 4, 173, 137, - 24, 171, 120, 91, 92, 170, 2, 27, 67, 19, 128, 11, 154, 3, 49, 2, 66, 144, 209, 243, 37, 0, 28, 56, 28, 33, 34, 0, 247, - 255, 254, 189, 40, 0, 208, 2, 45, 0, 208, 178, 224, 1, 32, 0, 224, 29, 104, 35, 157, 7, 66, 171, 209, 12, 104, 99, 152, - 6, 66, 131, 209, 8, 104, 163, 153, 5, 66, 139, 209, 4, 28, 48, 153, 4, 247, 255, 253, 118, 224, 6, 34, 128, 152, 4, - 169, 9, 0, 82, 247, 255, 255, 55, 48, 1, 66, 67, 65, 67, 34, 1, 64, 83, 6, 27, 14, 24, 35, 149, 0, 155, 68, 157, 188, - 240, 188, 2, 71, 8, 255, 255, 253, 172, 19, 115, 172, 100, 19, 115, 172, 48, 181, 240, 76, 116, 28, 10, 68, 165, 144, - 5, 171, 149, 50, 44, 202, 81, 195, 81, 156, 149, 28, 13, 44, 0, 208, 1, 148, 9, 224, 2, 152, 5, 105, 192, 144, 9, 153, - 9, 170, 146, 145, 149, 171, 149, 28, 17, 203, 81, 193, 81, 28, 41, 72, 104, 35, 0, 49, 56, 145, 6, 147, 7, 147, 8, 39, - 0, 28, 20, 174, 138, 144, 4, 224, 153, 28, 33, 34, 0, 152, 5, 247, 255, 254, 98, 154, 5, 66, 65, 65, 65, 145, 7, 104, - 80, 104, 34, 42, 1, 217, 6, 153, 5, 58, 2, 106, 203, 67, 90, 106, 75, 24, 211, 224, 1, 154, 5, 105, 147, 104, 98, 33, - 32, 24, 154, 104, 163, 145, 0, 1, 91, 28, 49, 247, 255, 252, 66, 122, 243, 43, 15, 209, 69, 120, 51, 70, 156, 6, 27, - 43, 0, 218, 1, 39, 0, 224, 26, 70, 96, 33, 64, 66, 8, 208, 22, 171, 149, 28, 39, 207, 7, 195, 7, 35, 64, 70, 98, 67, - 154, 0, 83, 24, 155, 0, 155, 24, 153, 104, 39, 41, 255, 221, 0, 33, 255, 0, 73, 34, 0, 171, 10, 82, 202, 123, 112, 151, - 9, 144, 8, 39, 1, 123, 115, 153, 8, 66, 139, 208, 1, 39, 0, 224, 79, 47, 0, 208, 77, 35, 64, 70, 98, 67, 154, 0, 83, - 24, 155, 0, 155, 24, 155, 28, 26, 58, 13, 72, 57, 42, 247, 221, 0, 34, 247, 0, 82, 171, 10, 24, 153, 200, 4, 24, 179, - 120, 91, 92, 178, 2, 27, 67, 19, 128, 11, 154, 4, 49, 2, 66, 144, 209, 244, 224, 49, 7, 24, 212, 47, 120, 51, 43, 0, - 208, 71, 43, 229, 208, 42, 43, 32, 217, 40, 47, 0, 208, 27, 76, 43, 28, 49, 35, 0, 38, 1, 68, 108, 66, 51, 209, 1, 32, - 0, 224, 0, 32, 128, 120, 10, 8, 91, 24, 155, 6, 27, 14, 27, 24, 27, 6, 27, 49, 1, 14, 27, 66, 161, 209, 239, 153, 8, - 66, 139, 208, 48, 28, 42, 50, 56, 35, 0, 112, 19, 171, 149, 170, 146, 202, 81, 195, 81, 156, 146, 168, 138, 153, 6, - 247, 255, 252, 159, 148, 9, 224, 3, 153, 7, 41, 0, 209, 0, 231, 97, 154, 7, 42, 0, 209, 19, 156, 9, 28, 42, 148, 149, - 171, 149, 50, 32, 203, 67, 194, 67, 171, 146, 203, 81, 194, 81, 171, 138, 28, 42, 203, 82, 194, 82, 203, 19, 194, 19, - 203, 65, 194, 65, 32, 1, 224, 0, 32, 0, 35, 153, 0, 155, 68, 157, 188, 240, 188, 2, 71, 8, 34, 128, 152, 6, 169, 10, - 0, 82, 247, 255, 254, 61, 48, 1, 209, 217, 231, 239, 255, 255, 253, 156, 19, 115, 172, 100, 19, 115, 172, 48, 0, 0, - 2, 51, 181, 112, 35, 0, 98, 75, 35, 1, 66, 91, 98, 10, 98, 139, 28, 10, 28, 11, 50, 44, 51, 32, 203, 112, 194, 112, - 247, 255, 254, 255, 188, 112, 188, 2, 71, 8, 181, 240, 176, 213, 144, 1, 28, 15, 28, 8, 33, 128, 0, 73, 28, 22, 240, - 4, 250, 98, 28, 5, 40, 255, 216, 45, 28, 50, 172, 2, 78, 25, 152, 1, 28, 33, 247, 255, 255, 218, 68, 110, 224, 34, 33, - 128, 168, 16, 0, 73, 240, 4, 250, 81, 66, 133, 209, 6, 28, 56, 169, 16, 28, 42, 247, 255, 253, 24, 40, 0, 208, 24, 28, - 49, 28, 32, 247, 255, 252, 48, 28, 48, 33, 13, 240, 4, 250, 64, 66, 133, 209, 6, 28, 56, 28, 49, 28, 42, 247, 255, 253, - 7, 40, 0, 208, 7, 152, 1, 28, 33, 247, 255, 254, 195, 40, 0, 209, 218, 32, 0, 224, 0, 32, 1, 176, 85, 188, 240, 188, - 2, 71, 8, 0, 0, 1, 67, 181, 240, 76, 196, 68, 165, 145, 6, 49, 56, 144, 7, 145, 8, 28, 8, 33, 128, 0, 73, 146, 5, 240, - 4, 250, 27, 40, 0, 209, 0, 227, 55, 152, 8, 33, 128, 0, 73, 144, 165, 240, 4, 250, 18, 28, 4, 40, 255, 217, 0, 227, - 45, 73, 184, 152, 8, 240, 4, 250, 32, 40, 0, 208, 0, 227, 38, 34, 0, 224, 10, 153, 6, 24, 139, 51, 56, 120, 27, 59, - 32, 6, 27, 14, 27, 43, 207, 217, 0, 227, 26, 50, 1, 66, 162, 211, 242, 34, 128, 32, 0, 169, 165, 0, 82, 35, 0, 240, - 2, 254, 175, 144, 12, 40, 255, 217, 0, 227, 12, 152, 8, 240, 4, 248, 232, 155, 6, 30, 65, 48, 55, 24, 26, 32, 0, 224, - 2, 112, 16, 57, 1, 58, 1, 41, 0, 220, 4, 152, 8, 240, 4, 248, 218, 36, 0, 224, 4, 120, 19, 43, 32, 208, 242, 231, 246, - 52, 1, 66, 132, 218, 5, 157, 6, 25, 43, 51, 56, 120, 27, 43, 32, 208, 246, 44, 0, 221, 10, 158, 6, 52, 56, 25, 52, 28, - 32, 240, 4, 248, 195, 28, 33, 28, 2, 152, 8, 240, 3, 250, 80, 152, 8, 240, 4, 248, 187, 36, 128, 153, 6, 0, 100, 26, - 34, 48, 56, 24, 8, 33, 0, 240, 3, 250, 156, 152, 7, 153, 8, 154, 5, 247, 255, 255, 67, 28, 5, 40, 0, 208, 0, 226, 202, - 33, 32, 34, 11, 152, 6, 240, 3, 250, 142, 73, 133, 152, 8, 28, 34, 240, 4, 249, 25, 40, 0, 209, 7, 154, 6, 35, 46, 112, - 19, 36, 0, 35, 1, 147, 9, 148, 10, 225, 118, 73, 127, 152, 8, 28, 34, 240, 4, 249, 10, 40, 0, 209, 7, 157, 6, 35, 46, - 38, 1, 112, 43, 112, 107, 150, 9, 144, 10, 225, 103, 149, 159, 149, 160, 39, 0, 37, 0, 224, 1, 53, 1, 39, 1, 153, 8, - 93, 75, 43, 46, 208, 249, 35, 128, 34, 0, 0, 91, 146, 11, 147, 3, 224, 48, 156, 3, 168, 165, 27, 98, 171, 159, 240, - 2, 253, 181, 28, 6, 40, 0, 218, 0, 226, 140, 152, 165, 240, 4, 252, 44, 240, 4, 255, 78, 28, 4, 152, 165, 240, 4, 255, - 74, 66, 160, 208, 0, 39, 1, 44, 32, 209, 2, 25, 173, 39, 1, 224, 18, 28, 96, 209, 1, 36, 95, 39, 1, 72, 96, 28, 33, - 240, 3, 255, 158, 40, 0, 208, 1, 36, 95, 39, 1, 75, 93, 153, 11, 68, 107, 84, 92, 49, 1, 145, 11, 25, 173, 154, 11, - 42, 7, 220, 6, 155, 8, 25, 89, 120, 11, 43, 46, 208, 1, 43, 0, 209, 199, 156, 6, 25, 99, 51, 56, 120, 27, 43, 46, 208, - 2, 43, 0, 208, 0, 39, 1, 152, 8, 33, 46, 240, 4, 249, 108, 28, 4, 40, 0, 208, 82, 152, 8, 33, 46, 240, 3, 255, 117, - 66, 132, 208, 0, 226, 78, 226, 78, 75, 73, 152, 11, 34, 46, 68, 107, 84, 26, 35, 0, 48, 1, 170, 159, 144, 11, 147, 159, - 96, 83, 147, 13, 35, 128, 0, 91, 27, 91, 147, 4, 224, 50, 168, 165, 28, 49, 154, 4, 171, 159, 240, 2, 253, 84, 28, 5, - 40, 0, 218, 0, 226, 43, 152, 165, 240, 4, 251, 203, 240, 4, 254, 237, 28, 4, 152, 165, 240, 4, 254, 233, 66, 160, 208, - 0, 39, 1, 44, 32, 209, 2, 25, 118, 39, 1, 224, 18, 28, 97, 209, 1, 36, 95, 39, 1, 72, 48, 28, 33, 240, 3, 255, 61, 40, - 0, 208, 1, 36, 95, 39, 1, 75, 45, 154, 11, 68, 107, 84, 156, 50, 1, 146, 11, 25, 118, 155, 13, 51, 1, 147, 13, 43, 3, - 208, 2, 120, 51, 43, 0, 209, 201, 120, 51, 43, 0, 208, 0, 39, 1, 76, 35, 157, 11, 68, 108, 35, 0, 85, 99, 47, 0, 208, - 102, 45, 0, 208, 100, 152, 12, 33, 13, 48, 12, 240, 2, 252, 102, 48, 1, 144, 9, 153, 8, 28, 32, 34, 13, 240, 3, 255, - 245, 40, 0, 209, 6, 152, 7, 28, 33, 154, 5, 247, 255, 254, 84, 40, 0, 208, 81, 72, 20, 37, 7, 68, 104, 224, 0, 61, 1, - 93, 67, 43, 46, 208, 2, 45, 0, 220, 249, 224, 16, 45, 0, 221, 14, 25, 68, 240, 3, 255, 172, 27, 66, 72, 13, 28, 33, - 68, 104, 240, 3, 249, 56, 34, 8, 27, 82, 28, 32, 33, 95, 240, 3, 249, 138, 37, 1, 38, 1, 79, 7, 224, 44, 255, 255, 253, - 100, 19, 115, 172, 118, 19, 115, 172, 45, 19, 115, 172, 44, 19, 115, 172, 100, 0, 0, 2, 99, 0, 0, 2, 107, 0, 15, 66, - 64, 28, 40, 33, 10, 240, 2, 252, 108, 49, 48, 112, 33, 28, 40, 33, 10, 240, 2, 252, 28, 60, 1, 28, 5, 40, 0, 209, 241, - 32, 126, 73, 189, 112, 32, 152, 7, 68, 105, 154, 5, 247, 255, 254, 12, 40, 0, 208, 9, 54, 1, 28, 53, 66, 190, 209, 0, - 225, 144, 76, 183, 68, 108, 231, 223, 33, 1, 145, 9, 73, 179, 34, 0, 68, 105, 224, 4, 156, 6, 84, 163, 50, 1, 42, 8, - 208, 4, 92, 139, 43, 46, 208, 1, 43, 0, 209, 245, 157, 6, 28, 17, 24, 171, 32, 32, 224, 2, 112, 24, 49, 1, 51, 1, 41, - 7, 221, 250, 72, 167, 68, 104, 92, 131, 43, 46, 208, 3, 158, 6, 34, 32, 24, 115, 224, 17, 28, 83, 24, 195, 152, 6, 24, - 66, 224, 2, 112, 16, 49, 1, 50, 1, 120, 24, 51, 1, 40, 0, 208, 239, 41, 10, 221, 246, 231, 236, 112, 26, 49, 1, 51, - 1, 41, 10, 221, 250, 33, 0, 145, 10, 36, 1, 154, 10, 66, 34, 209, 1, 32, 0, 224, 0, 32, 128, 158, 6, 157, 10, 92, 114, - 8, 107, 24, 155, 6, 27, 14, 27, 24, 27, 6, 27, 14, 27, 49, 1, 147, 10, 41, 11, 209, 235, 171, 156, 34, 0, 96, 154, 96, - 90, 152, 5, 170, 159, 144, 156, 28, 24, 200, 112, 194, 112, 70, 111, 32, 1, 157, 9, 144, 14, 36, 0, 28, 30, 55, 66, - 224, 52, 153, 7, 104, 50, 104, 72, 42, 1, 217, 5, 106, 203, 58, 2, 67, 90, 106, 75, 24, 211, 224, 1, 154, 7, 105, 147, - 104, 114, 36, 32, 24, 154, 104, 179, 28, 57, 1, 91, 148, 0, 247, 255, 249, 14, 120, 59, 43, 0, 209, 6, 171, 159, 28, - 49, 201, 21, 195, 21, 61, 1, 36, 1, 224, 20, 43, 229, 208, 1, 157, 9, 224, 7, 152, 9, 66, 133, 209, 3, 171, 159, 28, - 49, 201, 21, 195, 21, 61, 1, 36, 0, 45, 0, 208, 5, 152, 7, 28, 49, 34, 1, 247, 255, 250, 246, 144, 14, 153, 14, 41, - 0, 208, 5, 44, 0, 209, 3, 45, 0, 209, 195, 28, 44, 224, 3, 154, 14, 42, 0, 209, 0, 224, 235, 154, 6, 171, 159, 50, 32, - 203, 67, 194, 67, 44, 0, 208, 57, 70, 108, 52, 66, 28, 32, 33, 0, 34, 32, 240, 3, 248, 166, 158, 6, 28, 111, 54, 44, - 173, 156, 224, 34, 28, 51, 28, 42, 202, 19, 195, 19, 34, 1, 152, 7, 28, 41, 247, 255, 250, 204, 154, 7, 144, 14, 104, - 80, 104, 42, 42, 1, 217, 6, 156, 7, 58, 2, 106, 227, 67, 90, 106, 99, 24, 211, 224, 1, 153, 7, 105, 139, 104, 106, 70, - 105, 24, 154, 104, 171, 36, 32, 1, 91, 49, 66, 63, 1, 148, 0, 247, 255, 248, 94, 47, 0, 208, 3, 152, 14, 40, 0, 209, - 215, 224, 175, 153, 14, 41, 0, 208, 0, 224, 185, 224, 170, 154, 6, 171, 156, 50, 44, 203, 112, 194, 112, 224, 178, 104, - 58, 168, 165, 28, 41, 171, 156, 240, 2, 251, 195, 40, 0, 221, 5, 155, 165, 24, 45, 128, 35, 54, 1, 52, 2, 224, 2, 40, - 0, 208, 4, 224, 5, 46, 254, 216, 1, 45, 0, 209, 234, 35, 0, 128, 35, 158, 9, 39, 1, 0, 115, 25, 155, 0, 155, 25, 155, - 59, 27, 147, 15, 32, 1, 66, 127, 224, 123, 46, 1, 208, 80, 152, 9, 66, 134, 208, 1, 34, 0, 224, 0, 34, 64, 73, 45, 30, - 115, 67, 19, 68, 105, 112, 11, 155, 15, 72, 43, 0, 90, 70, 107, 51, 66, 24, 157, 36, 0, 136, 106, 42, 0, 209, 14, 44, - 1, 221, 7, 136, 43, 43, 0, 209, 4, 104, 3, 84, 207, 24, 91, 112, 95, 224, 9, 104, 3, 34, 0, 84, 202, 24, 91, 224, 3, - 104, 3, 84, 202, 24, 91, 10, 18, 112, 90, 52, 1, 48, 4, 53, 2, 44, 13, 209, 227, 36, 43, 75, 24, 68, 108, 120, 36, 68, - 107, 37, 0, 34, 15, 114, 218, 115, 92, 115, 29, 118, 157, 118, 221, 153, 7, 154, 162, 104, 72, 42, 1, 217, 5, 106, 203, - 58, 2, 67, 90, 106, 75, 24, 209, 224, 1, 154, 7, 105, 145, 171, 162, 104, 90, 104, 155, 24, 138, 33, 32, 145, 0, 73, - 9, 1, 91, 68, 105, 224, 29, 155, 7, 154, 162, 104, 88, 42, 1, 217, 14, 106, 219, 58, 2, 67, 90, 156, 7, 106, 99, 24, - 209, 224, 9, 0, 0, 2, 99, 0, 0, 2, 106, 0, 0, 2, 67, 19, 115, 172, 48, 157, 7, 105, 169, 171, 162, 104, 90, 104, 155, - 24, 138, 33, 32, 145, 0, 153, 6, 1, 91, 247, 254, 255, 184, 169, 162, 152, 7, 34, 0, 247, 255, 250, 7, 153, 15, 62, - 1, 57, 13, 145, 15, 40, 0, 208, 2, 46, 0, 221, 0, 231, 126, 32, 1, 224, 0, 32, 0, 35, 167, 0, 155, 68, 157, 188, 240, - 188, 2, 71, 8, 39, 1, 120, 99, 28, 102, 43, 0, 209, 0, 229, 246, 229, 170, 154, 6, 171, 162, 50, 32, 202, 112, 195, - 112, 70, 108, 52, 66, 34, 128, 0, 146, 28, 32, 33, 0, 240, 2, 255, 173, 35, 0, 170, 156, 96, 83, 147, 156, 157, 8, 38, - 0, 79, 1, 231, 72, 70, 192, 19, 115, 162, 160, 181, 240, 176, 139, 28, 7, 28, 14, 28, 20, 147, 1, 43, 0, 209, 4, 28, - 16, 33, 0, 240, 3, 252, 248, 144, 1, 120, 35, 43, 47, 209, 16, 105, 250, 28, 37, 146, 4, 224, 0, 53, 1, 120, 43, 43, - 47, 208, 251, 155, 1, 66, 157, 211, 8, 28, 56, 28, 49, 247, 255, 249, 55, 36, 1, 224, 3, 108, 122, 28, 37, 146, 4, 36, - 0, 105, 251, 154, 4, 66, 154, 209, 10, 72, 78, 28, 41, 240, 3, 253, 57, 40, 0, 209, 4, 28, 56, 28, 49, 247, 255, 249, - 35, 36, 1, 28, 51, 51, 56, 147, 2, 224, 114, 28, 40, 33, 47, 240, 3, 252, 200, 144, 0, 40, 0, 208, 2, 27, 66, 146, 3, - 224, 3, 28, 40, 240, 3, 253, 115, 144, 3, 35, 128, 154, 3, 0, 91, 66, 154, 216, 114, 28, 56, 28, 49, 154, 4, 247, 255, - 251, 236, 36, 0, 144, 5, 224, 53, 33, 128, 152, 2, 0, 73, 240, 3, 254, 98, 155, 3, 66, 131, 209, 8, 28, 40, 153, 2, - 28, 26, 247, 255, 249, 40, 40, 0, 209, 1, 36, 1, 224, 0, 36, 0, 70, 105, 49, 27, 28, 48, 247, 255, 248, 60, 70, 104, - 48, 27, 33, 13, 240, 3, 254, 75, 154, 3, 66, 130, 209, 6, 70, 105, 28, 40, 49, 27, 247, 255, 249, 17, 40, 0, 208, 1, - 44, 0, 208, 8, 122, 243, 6, 218, 212, 2, 155, 0, 43, 0, 209, 1, 36, 1, 224, 5, 36, 0, 28, 56, 28, 49, 247, 255, 250, - 194, 144, 5, 154, 5, 42, 0, 208, 1, 44, 0, 208, 196, 155, 5, 43, 0, 208, 44, 154, 0, 42, 0, 208, 21, 155, 1, 66, 147, - 217, 18, 122, 243, 6, 218, 213, 16, 28, 56, 28, 49, 247, 255, 248, 66, 157, 0, 144, 4, 224, 0, 53, 1, 120, 43, 43, 47, - 208, 251, 155, 1, 66, 157, 210, 1, 36, 0, 224, 0, 36, 1, 44, 0, 208, 138, 122, 59, 43, 3, 209, 15, 122, 243, 6, 218, - 213, 12, 28, 56, 28, 49, 247, 255, 248, 41, 40, 0, 209, 6, 28, 56, 28, 49, 247, 255, 248, 153, 224, 1, 32, 0, 224, 0, - 32, 1, 176, 11, 188, 240, 188, 2, 71, 8, 70, 192, 19, 115, 172, 45, 181, 48, 176, 207, 28, 10, 35, 0, 70, 105, 28, 4, - 70, 109, 247, 255, 255, 47, 40, 0, 208, 9, 122, 235, 6, 218, 213, 6, 28, 32, 70, 105, 247, 255, 248, 6, 100, 96, 32, - 1, 224, 0, 32, 0, 176, 79, 188, 48, 188, 2, 71, 8, 181, 240, 28, 29, 28, 6, 28, 15, 28, 20, 176, 129, 2, 81, 28, 24, - 247, 251, 253, 52, 105, 115, 28, 56, 28, 42, 28, 33, 240, 0, 248, 4, 176, 1, 188, 240, 188, 2, 71, 8, 71, 24, 70, 192, - 181, 240, 176, 131, 2, 86, 28, 28, 28, 7, 28, 21, 145, 1, 28, 24, 28, 49, 247, 251, 253, 29, 105, 59, 28, 41, 28, 34, - 152, 1, 240, 0, 248, 10, 28, 49, 28, 5, 28, 32, 247, 251, 252, 238, 176, 3, 28, 40, 188, 240, 188, 2, 71, 8, 71, 24, - 35, 120, 66, 91, 96, 3, 32, 1, 66, 64, 71, 112, 104, 75, 34, 0, 51, 252, 32, 0, 100, 90, 71, 112, 181, 112, 104, 76, - 28, 30, 28, 33, 49, 252, 108, 75, 28, 5, 28, 16, 43, 0, 209, 4, 35, 1, 66, 91, 96, 43, 28, 24, 224, 27, 108, 139, 43, - 0, 209, 5, 35, 106, 66, 91, 32, 1, 96, 43, 66, 64, 224, 18, 28, 33, 49, 60, 240, 3, 252, 88, 46, 0, 208, 4, 28, 33, - 201, 1, 28, 50, 247, 254, 255, 179, 28, 33, 201, 1, 247, 255, 250, 3, 28, 35, 51, 252, 100, 152, 32, 0, 188, 112, 188, - 2, 71, 8, 181, 16, 104, 73, 28, 12, 52, 252, 108, 99, 43, 0, 209, 4, 35, 1, 66, 91, 96, 3, 28, 24, 224, 5, 201, 1, 108, - 34, 247, 255, 250, 222, 100, 160, 32, 0, 188, 16, 188, 2, 71, 8, 70, 192, 181, 240, 176, 209, 28, 6, 28, 8, 28, 12, - 146, 1, 240, 1, 253, 40, 28, 5, 40, 0, 209, 4, 35, 1, 66, 91, 96, 51, 28, 24, 224, 35, 28, 32, 33, 58, 240, 3, 251, - 140, 40, 0, 208, 0, 28, 68, 28, 32, 33, 58, 240, 3, 251, 133, 40, 0, 208, 1, 35, 101, 224, 9, 175, 2, 28, 40, 28, 57, - 28, 34, 35, 0, 247, 255, 254, 118, 40, 0, 209, 5, 35, 106, 66, 91, 32, 1, 96, 51, 66, 64, 224, 5, 28, 40, 28, 57, 154, - 1, 247, 254, 255, 95, 32, 0, 176, 81, 188, 240, 188, 2, 71, 8, 181, 240, 176, 209, 144, 1, 28, 16, 104, 79, 28, 20, - 240, 1, 252, 240, 28, 5, 96, 56, 40, 0, 209, 1, 35, 1, 224, 13, 28, 32, 33, 58, 240, 3, 251, 86, 40, 0, 208, 0, 28, - 68, 28, 32, 33, 58, 240, 3, 251, 79, 40, 0, 208, 5, 35, 101, 154, 1, 66, 91, 96, 19, 32, 0, 224, 32, 174, 2, 28, 40, - 28, 49, 28, 34, 35, 0, 247, 255, 254, 60, 40, 0, 209, 4, 35, 106, 154, 1, 66, 91, 96, 19, 224, 18, 122, 243, 6, 218, - 213, 232, 28, 49, 104, 56, 247, 254, 255, 14, 28, 60, 52, 252, 28, 57, 28, 2, 100, 32, 201, 1, 247, 255, 250, 98, 35, - 1, 100, 160, 100, 99, 28, 56, 176, 81, 188, 240, 188, 2, 71, 8, 181, 112, 28, 6, 28, 8, 28, 21, 240, 1, 252, 172, 28, - 4, 40, 0, 209, 4, 35, 1, 66, 91, 96, 51, 28, 24, 224, 29, 240, 1, 250, 96, 107, 35, 96, 43, 107, 35, 96, 107, 107, 227, - 96, 232, 59, 1, 96, 171, 97, 40, 107, 227, 97, 168, 59, 1, 97, 107, 97, 232, 104, 35, 104, 27, 98, 43, 109, 99, 43, - 0, 209, 1, 35, 2, 224, 0, 35, 3, 98, 107, 35, 128, 0, 91, 98, 171, 32, 0, 188, 112, 188, 2, 71, 8, 70, 192, 181, 240, - 176, 223, 144, 3, 28, 8, 28, 12, 240, 1, 252, 123, 28, 6, 40, 0, 209, 5, 35, 1, 153, 3, 66, 91, 96, 11, 28, 24, 224, - 213, 28, 32, 33, 58, 240, 3, 250, 222, 40, 0, 208, 0, 28, 68, 28, 32, 33, 58, 240, 3, 250, 215, 40, 0, 209, 35, 175, - 8, 28, 48, 28, 57, 28, 34, 35, 0, 247, 255, 253, 202, 40, 0, 208, 1, 35, 105, 224, 194, 109, 115, 43, 0, 208, 0, 224, - 179, 28, 32, 33, 47, 240, 3, 252, 178, 28, 5, 40, 0, 209, 2, 108, 119, 28, 33, 224, 18, 28, 48, 28, 57, 28, 34, 28, - 43, 247, 255, 253, 178, 40, 0, 208, 2, 122, 251, 6, 217, 212, 1, 35, 101, 224, 157, 28, 57, 28, 48, 247, 254, 254, 135, - 28, 105, 28, 7, 172, 8, 168, 22, 240, 3, 251, 53, 33, 0, 34, 32, 28, 32, 240, 2, 253, 62, 35, 0, 115, 99, 240, 1, 251, - 106, 115, 160, 10, 0, 115, 224, 240, 1, 251, 103, 116, 32, 10, 0, 116, 96, 240, 1, 251, 96, 117, 160, 10, 0, 117, 224, - 240, 1, 251, 93, 118, 32, 10, 0, 118, 96, 240, 1, 251, 88, 35, 16, 116, 160, 10, 0, 116, 224, 114, 227, 28, 48, 33, - 0, 240, 1, 251, 27, 28, 5, 40, 1, 216, 0, 224, 114, 107, 243, 66, 152, 217, 0, 224, 110, 4, 2, 2, 19, 14, 27, 147, 5, - 118, 163, 12, 3, 14, 18, 4, 27, 146, 4, 118, 226, 2, 26, 14, 18, 14, 27, 146, 7, 28, 48, 117, 34, 28, 33, 147, 6, 28, - 58, 117, 99, 247, 255, 249, 239, 40, 0, 209, 1, 35, 108, 224, 75, 172, 86, 33, 0, 34, 32, 28, 32, 240, 2, 252, 245, - 33, 32, 34, 11, 28, 32, 240, 2, 252, 240, 35, 46, 112, 35, 35, 16, 114, 227, 34, 23, 70, 105, 92, 81, 35, 19, 118, 161, - 70, 106, 92, 154, 33, 31, 118, 226, 70, 107, 92, 203, 34, 27, 117, 35, 70, 105, 92, 81, 61, 2, 117, 97, 106, 243, 104, - 112, 28, 26, 67, 106, 106, 115, 28, 33, 24, 210, 35, 32, 147, 0, 35, 0, 247, 254, 252, 131, 105, 243, 66, 159, 209, - 0, 39, 0, 169, 86, 35, 46, 112, 75, 10, 59, 118, 203, 12, 59, 117, 11, 10, 27, 118, 143, 117, 75, 106, 243, 104, 112, - 28, 26, 67, 106, 106, 115, 24, 210, 35, 32, 147, 0, 247, 254, 252, 151, 104, 112, 247, 254, 251, 102, 40, 0, 208, 1, - 32, 0, 224, 5, 35, 103, 154, 3, 66, 91, 96, 19, 32, 1, 66, 64, 176, 95, 188, 240, 188, 2, 71, 8, 35, 108, 153, 3, 66, - 91, 96, 11, 231, 244, 70, 192, 181, 240, 76, 72, 28, 7, 68, 165, 28, 8, 28, 12, 28, 21, 240, 1, 251, 137, 28, 6, 40, - 0, 208, 4, 28, 40, 240, 1, 251, 131, 66, 134, 208, 4, 35, 1, 66, 91, 96, 59, 28, 24, 224, 116, 109, 115, 43, 0, 209, - 108, 28, 32, 33, 58, 240, 3, 249, 229, 40, 0, 208, 0, 28, 68, 28, 32, 33, 58, 240, 3, 249, 222, 40, 0, 209, 54, 28, - 40, 33, 58, 240, 3, 249, 216, 40, 0, 208, 0, 28, 69, 28, 40, 33, 58, 240, 3, 249, 209, 40, 0, 209, 41, 28, 48, 169, - 80, 28, 34, 35, 0, 247, 255, 252, 197, 40, 0, 209, 1, 35, 106, 224, 73, 28, 48, 169, 2, 28, 42, 35, 0, 247, 255, 252, - 187, 40, 0, 208, 1, 35, 105, 224, 63, 28, 40, 33, 47, 240, 3, 251, 167, 28, 4, 40, 0, 209, 2, 108, 114, 146, 1, 224, - 19, 28, 48, 169, 2, 28, 42, 28, 35, 247, 255, 252, 167, 40, 0, 208, 3, 70, 106, 124, 211, 6, 218, 212, 1, 35, 101, 224, - 39, 28, 48, 169, 2, 247, 254, 253, 123, 28, 101, 144, 1, 172, 2, 34, 156, 0, 82, 169, 80, 28, 32, 240, 2, 251, 152, - 28, 41, 168, 16, 240, 3, 250, 34, 28, 48, 28, 33, 154, 1, 247, 255, 249, 27, 40, 0, 209, 1, 35, 108, 224, 13, 28, 48, - 169, 80, 247, 254, 254, 145, 40, 0, 208, 6, 104, 112, 247, 254, 250, 208, 40, 0, 208, 1, 32, 0, 224, 4, 35, 103, 66, - 91, 32, 1, 96, 59, 66, 64, 35, 159, 0, 155, 68, 157, 188, 240, 188, 2, 71, 8, 70, 192, 255, 255, 253, 132, 181, 112, - 28, 5, 28, 8, 28, 12, 240, 1, 250, 248, 28, 6, 40, 0, 209, 4, 35, 1, 66, 91, 96, 43, 28, 24, 224, 25, 28, 32, 33, 58, - 240, 3, 249, 92, 40, 0, 208, 0, 28, 68, 28, 32, 33, 58, 240, 3, 249, 85, 40, 0, 209, 7, 28, 48, 28, 33, 247, 255, 253, - 19, 40, 0, 208, 1, 32, 0, 224, 4, 35, 101, 66, 91, 32, 1, 96, 43, 66, 64, 188, 112, 188, 2, 71, 8, 70, 192, 181, 240, - 76, 68, 68, 165, 144, 1, 28, 8, 28, 12, 240, 1, 250, 202, 28, 5, 40, 0, 209, 5, 35, 1, 154, 1, 66, 91, 96, 19, 28, 24, - 224, 108, 109, 67, 43, 0, 209, 97, 28, 32, 33, 58, 240, 3, 249, 42, 40, 0, 208, 0, 28, 68, 28, 32, 33, 58, 240, 3, 249, - 35, 40, 0, 208, 1, 35, 101, 224, 97, 174, 80, 28, 40, 28, 49, 28, 34, 35, 0, 247, 255, 252, 20, 40, 0, 209, 1, 35, 106, - 224, 86, 28, 40, 28, 49, 247, 254, 252, 236, 122, 243, 28, 7, 6, 218, 213, 29, 172, 2, 28, 40, 28, 33, 28, 58, 247, - 255, 248, 62, 78, 39, 224, 19, 170, 16, 120, 19, 43, 46, 209, 65, 34, 65, 68, 106, 120, 19, 43, 0, 208, 6, 107, 163, - 28, 50, 64, 26, 35, 184, 3, 155, 66, 154, 209, 53, 28, 40, 28, 33, 247, 254, 255, 54, 40, 0, 209, 233, 47, 1, 217, 14, - 107, 235, 66, 159, 216, 11, 28, 40, 28, 57, 240, 1, 248, 229, 40, 0, 209, 5, 35, 103, 154, 1, 66, 91, 96, 19, 36, 1, - 224, 0, 36, 0, 28, 40, 169, 80, 247, 254, 253, 228, 40, 0, 209, 4, 35, 103, 154, 1, 66, 91, 96, 19, 36, 1, 104, 104, - 247, 254, 250, 30, 40, 0, 209, 1, 35, 103, 224, 12, 44, 0, 209, 1, 32, 0, 224, 1, 32, 1, 66, 64, 35, 159, 0, 155, 68, - 157, 188, 240, 188, 2, 71, 8, 35, 102, 154, 1, 66, 91, 96, 19, 231, 242, 70, 192, 255, 255, 253, 132, 0, 255, 255, 0, - 181, 240, 176, 129, 28, 7, 28, 12, 28, 21, 158, 6, 43, 0, 208, 37, 46, 0, 208, 2, 104, 51, 43, 0, 208, 34, 104, 98, - 106, 235, 66, 154, 217, 1, 35, 101, 224, 34, 66, 154, 209, 24, 104, 33, 28, 40, 240, 0, 255, 113, 75, 17, 66, 152, 208, - 1, 40, 0, 209, 3, 104, 33, 28, 40, 240, 1, 248, 240, 40, 1, 217, 16, 107, 235, 66, 152, 216, 13, 35, 0, 96, 99, 96, - 32, 224, 2, 35, 0, 96, 51, 224, 1, 32, 1, 224, 0, 32, 0, 176, 1, 188, 240, 188, 2, 71, 8, 35, 108, 66, 91, 96, 59, 46, - 0, 209, 240, 231, 244, 70, 192, 15, 255, 255, 255, 181, 240, 76, 111, 34, 128, 68, 165, 145, 3, 144, 4, 107, 205, 0, - 146, 104, 104, 33, 0, 144, 5, 168, 6, 240, 2, 251, 6, 153, 3, 75, 105, 104, 8, 175, 135, 64, 3, 96, 187, 107, 41, 240, - 1, 253, 165, 10, 73, 96, 121, 154, 3, 28, 40, 104, 81, 240, 0, 255, 186, 155, 3, 144, 135, 104, 26, 104, 155, 28, 1, - 26, 158, 46, 0, 208, 19, 42, 0, 208, 17, 104, 123, 43, 0, 209, 14, 104, 188, 44, 0, 209, 11, 28, 40, 240, 1, 248, 163, - 40, 1, 216, 0, 224, 159, 107, 235, 66, 152, 217, 0, 224, 155, 96, 56, 96, 124, 169, 135, 104, 143, 75, 82, 25, 186, - 66, 154, 216, 22, 154, 135, 42, 1, 217, 5, 106, 235, 58, 2, 67, 90, 106, 107, 24, 208, 224, 0, 105, 168, 172, 135, 104, - 98, 28, 59, 24, 130, 169, 6, 152, 5, 150, 0, 247, 254, 250, 161, 104, 163, 25, 155, 96, 163, 224, 109, 47, 0, 221, 70, - 104, 10, 42, 1, 217, 5, 106, 235, 58, 2, 67, 90, 106, 107, 24, 211, 224, 0, 105, 171, 172, 135, 104, 98, 152, 5, 24, - 154, 35, 128, 0, 155, 27, 219, 147, 0, 169, 6, 28, 59, 247, 254, 250, 133, 104, 163, 72, 57, 24, 243, 24, 30, 35, 0, - 96, 163, 104, 99, 51, 1, 96, 99, 224, 38, 104, 98, 106, 235, 66, 154, 211, 11, 33, 0, 96, 97, 28, 40, 104, 33, 240, - 1, 248, 81, 40, 1, 217, 83, 107, 235, 66, 152, 216, 80, 96, 32, 104, 34, 42, 1, 217, 5, 106, 235, 58, 2, 67, 90, 106, - 107, 24, 210, 224, 0, 105, 170, 104, 97, 28, 59, 24, 81, 152, 5, 34, 1, 247, 254, 249, 78, 104, 99, 74, 36, 51, 1, 24, - 182, 96, 99, 224, 1, 172, 135, 175, 6, 75, 31, 66, 158, 216, 211, 35, 0, 147, 0, 152, 4, 28, 33, 28, 42, 28, 51, 247, - 255, 255, 21, 40, 0, 208, 30, 46, 0, 208, 19, 104, 33, 41, 1, 217, 5, 106, 235, 30, 138, 67, 90, 106, 107, 24, 208, - 224, 0, 105, 168, 172, 135, 104, 98, 169, 6, 24, 130, 35, 0, 152, 5, 150, 0, 247, 254, 250, 48, 96, 166, 154, 3, 171, - 135, 50, 12, 203, 19, 194, 19, 154, 3, 32, 1, 104, 147, 96, 19, 35, 139, 0, 155, 68, 157, 188, 240, 188, 2, 71, 8, 35, - 108, 156, 4, 66, 91, 96, 35, 224, 3, 35, 108, 152, 4, 66, 91, 96, 3, 32, 0, 231, 238, 70, 192, 255, 255, 253, 212, 0, - 0, 1, 255, 255, 255, 254, 0, 181, 240, 176, 137, 144, 3, 28, 12, 28, 23, 42, 0, 218, 3, 35, 101, 66, 91, 96, 3, 224, - 17, 41, 0, 208, 2, 109, 75, 43, 0, 209, 5, 152, 3, 35, 1, 66, 91, 96, 3, 28, 24, 224, 110, 108, 203, 43, 0, 209, 6, - 35, 101, 153, 3, 66, 91, 96, 11, 32, 1, 66, 64, 224, 100, 104, 11, 107, 205, 66, 154, 217, 50, 104, 78, 46, 0, 209, - 12, 28, 40, 33, 0, 240, 0, 255, 195, 40, 1, 217, 91, 107, 235, 66, 152, 216, 88, 96, 96, 96, 224, 97, 38, 97, 102, 28, - 34, 171, 5, 50, 12, 202, 97, 195, 97, 104, 161, 145, 1, 96, 167, 152, 3, 28, 33, 247, 255, 254, 218, 40, 0, 209, 2, - 32, 1, 66, 64, 224, 0, 32, 0, 109, 35, 43, 0, 208, 5, 28, 34, 28, 35, 50, 24, 51, 12, 203, 98, 194, 98, 28, 34, 171, - 5, 50, 12, 203, 98, 194, 98, 154, 1, 96, 162, 224, 42, 66, 154, 210, 39, 104, 78, 42, 0, 209, 8, 28, 40, 28, 49, 240, - 0, 255, 48, 96, 103, 97, 167, 97, 231, 98, 39, 224, 27, 107, 41, 30, 80, 240, 1, 252, 47, 28, 2, 28, 49, 50, 1, 28, - 40, 240, 0, 255, 77, 109, 35, 28, 6, 43, 0, 208, 13, 75, 13, 28, 56, 64, 59, 98, 35, 107, 41, 240, 1, 252, 92, 41, 0, - 209, 1, 106, 235, 224, 0, 10, 75, 97, 227, 97, 166, 32, 0, 35, 1, 96, 39, 101, 163, 176, 9, 188, 240, 188, 2, 71, 8, - 35, 108, 157, 3, 66, 91, 96, 43, 231, 142, 0, 0, 1, 255, 181, 240, 176, 133, 28, 12, 144, 1, 28, 25, 28, 16, 44, 0, - 208, 2, 109, 99, 43, 0, 209, 5, 35, 1, 153, 1, 66, 91, 96, 11, 28, 24, 224, 107, 107, 226, 146, 2, 41, 1, 208, 5, 41, - 2, 208, 9, 41, 0, 209, 10, 28, 7, 224, 13, 104, 163, 24, 195, 28, 31, 43, 0, 218, 8, 224, 80, 104, 35, 24, 199, 224, - 4, 35, 101, 153, 1, 66, 91, 96, 11, 224, 76, 104, 35, 66, 159, 216, 78, 104, 99, 147, 3, 43, 0, 208, 74, 153, 2, 28, - 56, 107, 13, 28, 41, 240, 1, 251, 210, 28, 6, 104, 160, 66, 135, 211, 11, 28, 41, 240, 1, 251, 203, 153, 2, 105, 34, - 106, 203, 66, 154, 209, 0, 56, 1, 104, 226, 26, 54, 146, 3, 28, 56, 28, 41, 240, 1, 251, 252, 75, 27, 10, 73, 64, 59, - 97, 33, 97, 99, 152, 2, 153, 3, 240, 0, 253, 131, 224, 5, 152, 2, 28, 41, 240, 0, 253, 126, 62, 1, 149, 3, 28, 5, 46, - 0, 221, 5, 40, 0, 208, 3, 75, 18, 66, 152, 209, 241, 224, 1, 46, 0, 221, 19, 46, 1, 209, 10, 104, 35, 66, 187, 209, - 7, 105, 34, 42, 0, 209, 4, 153, 2, 106, 203, 97, 98, 97, 35, 224, 6, 35, 101, 154, 1, 66, 91, 96, 19, 32, 1, 66, 64, - 224, 3, 155, 3, 96, 227, 96, 167, 28, 56, 176, 5, 188, 240, 188, 2, 71, 8, 70, 192, 0, 0, 1, 255, 15, 255, 255, 255, - 181, 240, 176, 209, 28, 7, 28, 12, 28, 21, 41, 0, 208, 2, 109, 75, 43, 0, 209, 4, 35, 1, 66, 91, 96, 59, 28, 24, 224, - 31, 107, 200, 28, 11, 144, 1, 170, 10, 51, 36, 203, 67, 194, 67, 170, 13, 203, 67, 194, 67, 169, 2, 152, 1, 247, 254, - 252, 11, 40, 0, 209, 5, 35, 103, 66, 91, 32, 1, 96, 59, 66, 64, 224, 9, 152, 1, 169, 2, 28, 42, 247, 254, 250, 66, 104, - 99, 32, 0, 96, 107, 104, 35, 97, 171, 176, 81, 188, 240, 188, 2, 71, 8, 70, 192, 181, 240, 176, 149, 147, 5, 35, 1, - 144, 7, 28, 14, 146, 6, 147, 19, 41, 0, 208, 5, 109, 75, 43, 0, 208, 2, 108, 203, 43, 0, 209, 5, 152, 7, 35, 1, 66, - 91, 96, 3, 28, 24, 225, 175, 107, 205, 104, 48, 104, 105, 154, 5, 145, 8, 28, 4, 33, 0, 35, 0, 25, 18, 65, 89, 41, 0, - 208, 1, 67, 192, 144, 5, 154, 5, 42, 0, 209, 1, 32, 0, 225, 156, 104, 116, 44, 0, 209, 17, 28, 40, 33, 0, 240, 0, 254, - 116, 40, 1, 216, 0, 225, 150, 107, 235, 66, 152, 217, 0, 225, 146, 96, 112, 97, 176, 97, 244, 98, 52, 96, 240, 97, 52, - 97, 116, 109, 51, 43, 0, 208, 5, 28, 50, 171, 16, 50, 24, 202, 145, 195, 145, 224, 26, 104, 178, 104, 51, 66, 154, 217, - 6, 152, 7, 28, 49, 247, 255, 253, 129, 40, 0, 209, 0, 225, 123, 28, 50, 171, 16, 50, 12, 202, 145, 195, 145, 154, 5, - 104, 180, 35, 0, 33, 0, 25, 18, 65, 89, 104, 51, 41, 0, 209, 1, 66, 154, 217, 2, 33, 1, 145, 10, 224, 1, 34, 0, 146, - 10, 172, 16, 171, 19, 147, 0, 28, 33, 155, 5, 152, 7, 28, 42, 247, 255, 253, 34, 104, 164, 35, 128, 0, 155, 70, 164, - 27, 27, 156, 5, 66, 156, 217, 0, 28, 28, 75, 172, 66, 156, 216, 39, 155, 19, 43, 0, 208, 36, 154, 16, 42, 1, 217, 5, - 106, 235, 58, 2, 67, 90, 106, 107, 24, 211, 224, 0, 105, 171, 175, 16, 104, 122, 152, 8, 24, 154, 153, 6, 70, 99, 148, - 0, 247, 254, 248, 50, 152, 6, 155, 5, 25, 0, 27, 27, 147, 9, 144, 6, 104, 187, 74, 156, 24, 227, 96, 187, 66, 147, 221, - 7, 35, 0, 96, 187, 104, 123, 51, 1, 96, 123, 224, 1, 153, 5, 145, 9, 106, 232, 159, 17, 154, 9, 27, 196, 2, 99, 66, - 154, 216, 0, 10, 84, 44, 0, 209, 0, 224, 137, 66, 132, 211, 0, 224, 134, 155, 19, 43, 0, 209, 0, 224, 130, 155, 16, - 43, 1, 217, 5, 59, 2, 28, 2, 67, 90, 106, 107, 24, 209, 224, 0, 105, 169, 25, 201, 152, 8, 28, 34, 155, 6, 247, 253, - 254, 240, 40, 0, 209, 5, 35, 103, 156, 7, 66, 91, 144, 19, 96, 35, 224, 106, 159, 6, 152, 9, 2, 99, 24, 255, 26, 192, - 151, 6, 144, 9, 170, 16, 104, 83, 24, 227, 96, 83, 224, 94, 169, 19, 145, 0, 155, 9, 152, 7, 169, 16, 28, 42, 247, 255, - 252, 174, 155, 19, 43, 0, 208, 96, 154, 16, 155, 3, 146, 11, 154, 2, 107, 47, 202, 19, 195, 19, 156, 11, 224, 21, 106, - 235, 154, 9, 168, 19, 147, 14, 144, 0, 27, 211, 152, 7, 169, 13, 28, 42, 247, 255, 252, 151, 155, 19, 43, 0, 208, 15, - 155, 11, 156, 13, 51, 1, 66, 156, 209, 10, 107, 43, 148, 11, 24, 255, 155, 19, 43, 0, 208, 4, 107, 43, 153, 9, 24, 251, - 66, 139, 211, 225, 154, 16, 42, 1, 217, 5, 106, 235, 58, 2, 67, 90, 106, 107, 24, 209, 224, 0, 105, 169, 10, 122, 152, - 8, 155, 6, 247, 253, 254, 155, 40, 0, 209, 5, 35, 103, 154, 7, 66, 91, 144, 19, 96, 19, 224, 34, 155, 11, 66, 163, 208, - 7, 44, 1, 217, 5, 107, 235, 66, 156, 216, 2, 148, 16, 35, 0, 224, 2, 156, 11, 148, 16, 106, 235, 152, 6, 153, 9, 25, - 192, 27, 201, 147, 17, 144, 6, 145, 9, 224, 5, 70, 106, 70, 107, 50, 64, 51, 52, 146, 2, 147, 3, 107, 43, 156, 9, 66, - 156, 211, 2, 155, 19, 43, 0, 209, 147, 171, 19, 147, 0, 152, 7, 169, 16, 28, 42, 155, 9, 159, 9, 247, 255, 252, 65, - 152, 9, 10, 68, 44, 0, 208, 35, 155, 19, 43, 0, 208, 32, 153, 16, 41, 1, 217, 5, 106, 235, 30, 138, 67, 90, 106, 107, - 24, 209, 224, 0, 105, 169, 152, 8, 28, 34, 155, 6, 247, 253, 254, 81, 40, 0, 209, 5, 35, 103, 153, 7, 66, 91, 144, 19, - 96, 11, 224, 9, 154, 6, 2, 99, 24, 210, 152, 9, 146, 6, 170, 16, 26, 199, 104, 83, 24, 227, 96, 83, 47, 0, 208, 47, - 155, 19, 43, 0, 208, 44, 153, 10, 41, 0, 208, 18, 154, 16, 42, 1, 217, 5, 106, 235, 58, 2, 67, 90, 106, 107, 24, 208, - 224, 0, 105, 168, 154, 17, 153, 6, 24, 130, 35, 0, 152, 8, 151, 0, 247, 253, 255, 5, 224, 17, 154, 16, 42, 1, 217, 5, - 106, 235, 58, 2, 67, 90, 106, 107, 24, 208, 224, 0, 105, 168, 154, 17, 153, 6, 24, 130, 35, 0, 152, 8, 151, 0, 247, - 253, 255, 30, 170, 16, 104, 147, 24, 251, 96, 147, 39, 0, 35, 1, 154, 5, 101, 179, 109, 51, 27, 208, 172, 16, 43, 0, - 208, 7, 28, 51, 51, 24, 204, 162, 195, 162, 104, 51, 24, 27, 96, 51, 224, 10, 28, 51, 51, 12, 204, 162, 195, 162, 104, - 179, 24, 196, 104, 51, 96, 180, 66, 163, 210, 0, 96, 52, 176, 21, 188, 240, 188, 2, 71, 8, 35, 108, 154, 7, 66, 91, - 96, 19, 32, 1, 66, 64, 231, 244, 70, 192, 0, 0, 1, 255, 181, 240, 176, 143, 144, 7, 145, 6, 146, 5, 147, 4, 43, 0, 208, - 27, 153, 6, 41, 0, 208, 5, 109, 75, 43, 0, 208, 2, 108, 139, 43, 0, 209, 5, 35, 1, 154, 7, 66, 91, 96, 19, 28, 24, 225, - 57, 155, 6, 104, 152, 104, 30, 107, 221, 66, 176, 210, 2, 104, 91, 43, 0, 209, 5, 35, 121, 153, 7, 66, 91, 96, 11, 32, - 0, 225, 42, 154, 4, 33, 0, 28, 4, 35, 0, 25, 18, 65, 89, 41, 0, 209, 1, 66, 178, 217, 8, 154, 7, 35, 121, 66, 91, 96, - 19, 155, 6, 104, 26, 104, 155, 26, 211, 147, 4, 153, 6, 156, 4, 104, 202, 105, 15, 146, 12, 105, 75, 147, 13, 107, 203, - 153, 13, 104, 91, 147, 8, 35, 128, 0, 155, 26, 91, 66, 156, 217, 0, 28, 28, 75, 138, 66, 156, 217, 1, 158, 4, 224, 30, - 154, 12, 42, 1, 217, 5, 106, 235, 58, 2, 67, 90, 106, 107, 24, 210, 224, 0, 105, 170, 25, 210, 153, 5, 155, 13, 152, - 8, 148, 0, 247, 253, 254, 222, 155, 4, 153, 5, 154, 13, 27, 30, 75, 125, 25, 9, 24, 162, 145, 5, 146, 13, 66, 154, 221, - 2, 35, 0, 55, 1, 147, 13, 106, 233, 27, 204, 2, 99, 66, 158, 216, 0, 10, 116, 44, 0, 208, 30, 154, 12, 42, 1, 217, 6, - 28, 19, 59, 2, 28, 10, 67, 90, 106, 107, 24, 209, 224, 0, 105, 169, 25, 201, 152, 8, 28, 34, 155, 5, 247, 253, 255, - 5, 40, 0, 209, 5, 35, 103, 153, 7, 66, 91, 96, 11, 34, 0, 224, 6, 154, 5, 2, 99, 24, 210, 146, 5, 26, 246, 25, 63, 34, - 1, 106, 235, 66, 159, 211, 97, 42, 0, 208, 95, 28, 40, 153, 12, 240, 0, 250, 169, 46, 0, 209, 5, 75, 96, 66, 152, 209, - 2, 106, 239, 34, 1, 224, 83, 40, 1, 216, 0, 224, 170, 107, 235, 66, 152, 217, 0, 224, 166, 144, 12, 34, 1, 39, 0, 224, - 72, 155, 12, 33, 0, 147, 9, 145, 10, 28, 40, 153, 9, 240, 0, 250, 142, 107, 42, 155, 10, 28, 4, 24, 155, 147, 10, 155, - 9, 51, 1, 66, 152, 209, 5, 153, 10, 24, 139, 66, 179, 216, 1, 144, 9, 231, 236, 154, 12, 42, 1, 217, 5, 106, 235, 58, - 2, 67, 90, 106, 107, 24, 209, 224, 0, 105, 169, 155, 10, 152, 8, 10, 90, 155, 5, 247, 253, 254, 179, 40, 0, 209, 6, - 35, 103, 153, 7, 66, 91, 96, 11, 34, 0, 151, 11, 224, 33, 154, 10, 26, 182, 46, 0, 209, 7, 75, 61, 66, 156, 209, 4, - 153, 9, 106, 239, 34, 1, 145, 12, 224, 7, 44, 1, 217, 106, 107, 235, 66, 156, 216, 103, 148, 12, 34, 1, 39, 0, 155, - 5, 153, 10, 24, 91, 147, 5, 224, 2, 35, 103, 66, 91, 147, 3, 107, 43, 66, 158, 211, 1, 42, 0, 209, 174, 151, 11, 10, - 116, 44, 0, 208, 33, 42, 0, 208, 31, 153, 12, 41, 1, 217, 6, 28, 10, 106, 235, 58, 2, 67, 90, 106, 107, 24, 209, 224, - 0, 105, 169, 152, 8, 28, 34, 155, 5, 247, 253, 254, 115, 40, 0, 209, 5, 154, 7, 35, 103, 66, 91, 96, 19, 34, 0, 224, - 7, 153, 5, 2, 99, 24, 201, 25, 231, 145, 5, 26, 246, 151, 11, 34, 1, 46, 0, 208, 23, 42, 0, 208, 21, 154, 12, 42, 1, - 217, 5, 106, 235, 58, 2, 67, 90, 106, 107, 24, 208, 224, 0, 105, 168, 155, 11, 153, 5, 24, 194, 152, 8, 35, 0, 150, - 0, 247, 253, 253, 255, 153, 13, 24, 113, 145, 13, 38, 0, 155, 4, 153, 11, 27, 154, 155, 6, 28, 16, 97, 25, 153, 12, - 96, 217, 153, 13, 97, 89, 153, 6, 104, 139, 24, 155, 96, 139, 176, 15, 188, 240, 188, 2, 71, 8, 154, 7, 35, 103, 66, - 91, 96, 19, 34, 0, 231, 159, 155, 3, 153, 7, 34, 0, 96, 11, 231, 149, 0, 0, 1, 255, 15, 255, 255, 255, 181, 48, 176, - 139, 28, 5, 40, 0, 208, 98, 109, 67, 43, 0, 208, 95, 108, 195, 43, 0, 208, 88, 109, 131, 43, 0, 208, 85, 107, 193, 107, - 42, 104, 72, 42, 1, 217, 5, 106, 203, 58, 2, 67, 90, 106, 75, 24, 211, 224, 0, 105, 139, 107, 106, 172, 2, 24, 154, - 107, 171, 33, 32, 1, 91, 145, 0, 28, 33, 247, 253, 253, 182, 104, 43, 10, 26, 119, 35, 119, 98, 12, 26, 14, 27, 119, - 227, 104, 107, 119, 162, 118, 163, 10, 26, 12, 27, 117, 35, 10, 27, 118, 226, 117, 99, 240, 0, 251, 166, 117, 160, 10, - 0, 117, 224, 240, 0, 251, 163, 118, 32, 10, 0, 118, 96, 240, 0, 251, 158, 122, 227, 34, 32, 116, 160, 67, 19, 10, 0, - 107, 233, 107, 42, 116, 224, 114, 227, 104, 72, 42, 1, 217, 5, 106, 203, 58, 2, 67, 90, 106, 75, 24, 211, 224, 0, 105, - 139, 107, 106, 33, 32, 24, 154, 107, 171, 145, 0, 1, 91, 169, 2, 247, 253, 253, 48, 107, 235, 104, 88, 247, 253, 251, - 254, 40, 0, 209, 1, 32, 103, 224, 4, 35, 0, 101, 171, 32, 0, 224, 1, 32, 1, 66, 64, 176, 11, 188, 48, 188, 2, 71, 8, - 181, 16, 109, 75, 28, 4, 28, 8, 43, 0, 209, 4, 35, 1, 66, 91, 96, 35, 28, 24, 224, 6, 247, 255, 255, 133, 40, 0, 208, - 2, 96, 32, 32, 1, 66, 64, 188, 16, 188, 2, 71, 8, 70, 192, 181, 48, 109, 75, 176, 129, 28, 5, 28, 12, 43, 0, 209, 4, - 35, 1, 66, 91, 96, 3, 28, 24, 224, 31, 108, 203, 43, 0, 209, 1, 32, 0, 224, 7, 28, 8, 247, 255, 255, 104, 40, 0, 208, - 2, 96, 40, 32, 1, 66, 64, 107, 226, 35, 0, 101, 99, 108, 147, 59, 1, 100, 147, 108, 98, 42, 0, 208, 1, 108, 35, 100, - 19, 108, 35, 108, 98, 43, 0, 208, 1, 100, 90, 224, 1, 107, 227, 100, 218, 176, 1, 188, 48, 188, 2, 71, 8, 181, 240, - 176, 211, 144, 2, 28, 16, 28, 13, 28, 23, 147, 1, 240, 0, 251, 225, 28, 6, 40, 0, 209, 5, 152, 2, 35, 1, 66, 91, 96, - 3, 32, 6, 224, 17, 28, 56, 33, 58, 240, 2, 250, 68, 40, 0, 208, 0, 28, 71, 28, 56, 33, 58, 240, 2, 250, 61, 40, 0, 208, - 6, 35, 101, 153, 2, 66, 91, 96, 11, 32, 1, 66, 64, 225, 3, 154, 1, 35, 3, 64, 26, 209, 4, 35, 1, 100, 171, 100, 234, - 101, 42, 224, 13, 42, 1, 209, 2, 100, 168, 100, 234, 224, 4, 42, 2, 209, 4, 35, 1, 100, 171, 100, 235, 101, 40, 224, - 1, 35, 102, 224, 32, 108, 235, 43, 0, 208, 3, 109, 115, 43, 0, 208, 0, 224, 131, 172, 4, 35, 0, 28, 33, 28, 58, 28, - 48, 247, 254, 253, 11, 28, 1, 30, 75, 65, 153, 154, 1, 35, 160, 1, 27, 64, 26, 66, 154, 209, 3, 41, 0, 208, 11, 35, - 105, 224, 80, 41, 0, 208, 7, 122, 227, 6, 217, 213, 4, 35, 122, 154, 2, 66, 91, 96, 19, 231, 192, 35, 0, 101, 171, 40, - 0, 209, 79, 155, 1, 5, 155, 213, 70, 109, 115, 43, 0, 209, 91, 28, 56, 33, 47, 240, 2, 251, 218, 28, 4, 40, 0, 209, - 3, 108, 112, 28, 57, 144, 3, 224, 19, 28, 48, 169, 4, 28, 58, 28, 35, 247, 254, 252, 217, 40, 0, 208, 3, 70, 105, 126, - 203, 6, 218, 212, 1, 35, 101, 224, 67, 169, 4, 28, 48, 247, 253, 253, 173, 28, 97, 144, 3, 172, 4, 34, 255, 168, 18, - 240, 2, 251, 70, 33, 0, 34, 32, 28, 32, 240, 1, 252, 99, 35, 0, 115, 99, 240, 0, 250, 143, 115, 160, 10, 0, 115, 224, - 240, 0, 250, 140, 116, 32, 10, 0, 116, 96, 28, 33, 28, 48, 154, 3, 247, 254, 249, 66, 40, 0, 209, 4, 35, 108, 152, 2, - 66, 91, 96, 3, 231, 117, 35, 1, 101, 171, 224, 5, 35, 106, 153, 2, 66, 91, 96, 11, 32, 2, 231, 109, 169, 4, 127, 74, - 127, 139, 2, 18, 4, 27, 67, 26, 127, 11, 67, 26, 127, 203, 6, 27, 67, 26, 108, 235, 96, 42, 43, 0, 208, 7, 122, 203, - 7, 218, 213, 4, 35, 103, 156, 2, 66, 91, 96, 35, 231, 85, 169, 4, 99, 238, 28, 48, 247, 253, 253, 100, 28, 1, 96, 104, - 152, 1, 5, 64, 213, 12, 108, 235, 43, 0, 208, 9, 41, 0, 208, 7, 28, 48, 240, 0, 249, 123, 35, 0, 96, 107, 96, 43, 35, - 1, 101, 171, 28, 42, 50, 36, 171, 12, 203, 19, 194, 19, 171, 15, 203, 19, 194, 19, 35, 0, 104, 105, 154, 1, 96, 171, - 97, 43, 97, 107, 35, 8, 96, 233, 64, 19, 208, 27, 35, 1, 101, 43, 28, 48, 240, 0, 248, 193, 104, 44, 97, 168, 107, 49, - 28, 32, 240, 0, 254, 159, 75, 22, 10, 73, 64, 35, 97, 233, 98, 43, 44, 0, 208, 16, 28, 32, 107, 49, 240, 0, 254, 148, - 41, 0, 209, 10, 106, 243, 98, 41, 97, 235, 224, 6, 101, 43, 28, 42, 28, 43, 50, 24, 51, 12, 203, 19, 194, 19, 35, 1, - 101, 107, 108, 179, 51, 1, 100, 179, 108, 243, 43, 0, 208, 3, 100, 107, 108, 243, 100, 29, 224, 0, 100, 107, 35, 0, - 100, 43, 28, 40, 100, 245, 176, 83, 188, 240, 188, 2, 71, 8, 0, 0, 1, 255, 181, 240, 176, 135, 28, 5, 28, 15, 41, 0, - 209, 1, 32, 0, 224, 97, 35, 0, 147, 5, 122, 1, 41, 2, 208, 54, 41, 3, 208, 70, 41, 1, 208, 2, 32, 1, 66, 64, 224, 85, - 0, 124, 107, 67, 25, 228, 10, 162, 24, 211, 5, 164, 147, 3, 13, 228, 104, 64, 28, 26, 145, 0, 28, 35, 169, 5, 247, 253, - 251, 245, 35, 128, 28, 102, 0, 155, 66, 158, 209, 3, 155, 3, 38, 0, 51, 1, 147, 3, 35, 0, 147, 4, 154, 3, 28, 51, 104, - 104, 36, 1, 169, 4, 148, 0, 247, 253, 251, 226, 155, 4, 154, 5, 2, 27, 67, 26, 66, 39, 208, 1, 9, 19, 224, 1, 75, 23, - 64, 19, 147, 5, 154, 5, 75, 22, 224, 13, 107, 107, 0, 122, 10, 82, 24, 210, 35, 255, 64, 59, 104, 64, 0, 91, 145, 0, - 169, 5, 247, 253, 251, 200, 154, 5, 75, 16, 66, 154, 217, 20, 75, 15, 224, 17, 107, 107, 0, 186, 10, 82, 24, 210, 35, - 127, 33, 4, 64, 59, 104, 64, 0, 155, 145, 0, 169, 5, 247, 253, 251, 181, 154, 5, 75, 8, 66, 154, 217, 1, 51, 9, 147, - 5, 152, 5, 176, 7, 188, 240, 188, 2, 71, 8, 0, 0, 15, 255, 0, 0, 15, 246, 0, 0, 255, 246, 15, 255, 255, 255, 15, 255, - 255, 246, 181, 112, 28, 6, 37, 0, 36, 2, 224, 7, 28, 48, 28, 33, 247, 255, 255, 127, 40, 0, 209, 0, 53, 1, 52, 1, 107, - 243, 66, 156, 217, 244, 28, 40, 188, 112, 188, 2, 71, 8, 181, 112, 28, 5, 28, 12, 78, 11, 224, 4, 28, 33, 28, 40, 247, - 255, 255, 107, 28, 4, 28, 40, 28, 33, 247, 255, 255, 102, 40, 0, 208, 5, 28, 40, 28, 33, 247, 255, 255, 96, 66, 176, - 209, 238, 28, 32, 188, 112, 188, 2, 71, 8, 15, 255, 255, 255, 181, 240, 176, 137, 28, 6, 28, 12, 146, 3, 41, 1, 217, - 117, 107, 195, 66, 153, 216, 114, 122, 5, 45, 2, 208, 86, 45, 3, 208, 98, 45, 1, 209, 107, 0, 75, 24, 91, 10, 153, 5, - 155, 107, 66, 13, 219, 147, 4, 51, 1, 104, 64, 24, 143, 147, 2, 66, 44, 208, 36, 169, 7, 28, 58, 155, 4, 149, 0, 247, - 253, 251, 76, 155, 3, 34, 15, 1, 25, 155, 7, 104, 112, 64, 19, 67, 25, 35, 255, 145, 5, 28, 58, 64, 25, 155, 4, 149, - 0, 247, 253, 250, 241, 35, 128, 156, 2, 0, 155, 66, 156, 209, 1, 55, 1, 36, 0, 155, 5, 104, 112, 4, 25, 35, 1, 147, - 0, 14, 9, 28, 58, 28, 35, 224, 42, 155, 4, 153, 3, 28, 58, 149, 0, 247, 253, 250, 219, 35, 128, 157, 2, 0, 155, 66, - 157, 209, 1, 55, 1, 37, 0, 36, 1, 169, 7, 28, 58, 28, 43, 104, 112, 148, 0, 247, 253, 251, 24, 155, 3, 34, 240, 5, 25, - 155, 7, 15, 9, 64, 19, 67, 25, 104, 112, 148, 0, 28, 58, 28, 43, 224, 9, 107, 115, 0, 74, 10, 82, 24, 210, 35, 255, - 64, 11, 104, 64, 0, 91, 149, 0, 153, 3, 247, 253, 250, 180, 32, 1, 224, 11, 0, 138, 107, 115, 10, 82, 24, 210, 35, 127, - 64, 11, 33, 4, 104, 64, 0, 155, 145, 0, 231, 239, 32, 0, 176, 9, 188, 240, 188, 2, 71, 8, 181, 240, 176, 129, 28, 6, - 28, 13, 41, 1, 217, 27, 107, 195, 66, 153, 216, 24, 108, 3, 66, 153, 210, 13, 100, 49, 224, 11, 28, 41, 28, 48, 247, - 255, 254, 196, 28, 41, 28, 4, 34, 0, 28, 48, 247, 255, 255, 102, 28, 37, 224, 0, 79, 7, 66, 189, 208, 6, 45, 0, 208, - 4, 28, 107, 209, 236, 224, 1, 32, 0, 224, 0, 32, 1, 176, 1, 188, 240, 188, 2, 71, 8, 70, 192, 15, 255, 255, 255, 181, - 240, 176, 129, 28, 7, 28, 13, 42, 0, 209, 3, 247, 255, 255, 204, 38, 0, 224, 32, 30, 86, 247, 255, 254, 157, 224, 5, - 28, 56, 28, 33, 247, 255, 254, 152, 62, 1, 28, 37, 28, 4, 46, 0, 208, 4, 40, 0, 208, 2, 75, 11, 66, 152, 209, 241, 28, - 46, 44, 0, 208, 6, 75, 8, 66, 156, 208, 3, 28, 56, 28, 33, 247, 255, 255, 174, 28, 56, 28, 41, 74, 3, 247, 255, 255, - 39, 176, 1, 28, 48, 188, 240, 188, 2, 71, 8, 15, 255, 255, 255, 181, 240, 107, 199, 176, 131, 28, 5, 28, 14, 66, 185, - 216, 20, 247, 255, 254, 111, 40, 1, 217, 1, 66, 184, 217, 42, 108, 43, 43, 1, 216, 14, 35, 2, 224, 12, 52, 1, 66, 188, - 217, 12, 154, 1, 35, 2, 42, 0, 209, 1, 34, 1, 224, 4, 100, 44, 32, 1, 66, 64, 224, 24, 34, 0, 146, 1, 28, 28, 28, 40, - 28, 33, 247, 255, 254, 82, 40, 0, 209, 233, 100, 44, 46, 1, 217, 6, 66, 190, 210, 4, 28, 40, 28, 49, 28, 34, 247, 255, - 254, 238, 28, 40, 28, 33, 74, 3, 247, 255, 254, 233, 28, 32, 176, 3, 188, 240, 188, 2, 71, 8, 15, 255, 255, 255, 181, - 240, 176, 131, 28, 7, 247, 255, 255, 189, 30, 67, 28, 5, 51, 3, 217, 2, 37, 1, 66, 109, 224, 29, 76, 17, 34, 128, 33, - 0, 28, 32, 0, 146, 240, 1, 249, 239, 30, 169, 38, 0, 145, 1, 224, 15, 104, 120, 45, 1, 217, 5, 153, 1, 28, 26, 67, 74, - 106, 123, 24, 209, 224, 0, 105, 185, 25, 137, 34, 1, 28, 35, 247, 253, 248, 176, 54, 1, 106, 251, 66, 158, 211, 236, - 176, 3, 28, 40, 188, 240, 188, 2, 71, 8, 70, 192, 19, 117, 184, 128, 32, 0, 71, 112, 32, 0, 71, 112, 181, 0, 176, 139, - 170, 1, 10, 195, 96, 147, 5, 67, 14, 155, 96, 83, 35, 31, 64, 24, 64, 11, 96, 211, 5, 203, 15, 27, 59, 1, 0, 64, 97, - 19, 10, 73, 35, 0, 144, 1, 97, 81, 98, 19, 28, 16, 240, 1, 251, 25, 176, 11, 188, 2, 71, 8, 181, 240, 76, 16, 176, 129, - 28, 39, 28, 6, 55, 16, 104, 37, 45, 0, 208, 13, 104, 40, 34, 0, 224, 2, 43, 58, 208, 3, 50, 1, 92, 179, 43, 0, 209, - 249, 28, 49, 240, 2, 248, 43, 40, 0, 208, 5, 52, 4, 66, 188, 209, 235, 28, 35, 59, 16, 104, 29, 176, 1, 28, 40, 188, - 240, 188, 2, 71, 8, 19, 117, 186, 128, 181, 240, 176, 129, 28, 7, 247, 255, 255, 215, 28, 6, 40, 0, 208, 36, 74, 20, - 104, 131, 66, 147, 209, 32, 77, 19, 36, 0, 104, 40, 40, 0, 208, 17, 104, 0, 34, 0, 224, 2, 43, 58, 208, 3, 50, 1, 92, - 187, 43, 0, 209, 249, 28, 57, 240, 1, 255, 255, 40, 0, 209, 3, 74, 10, 0, 163, 80, 152, 224, 9, 52, 1, 53, 4, 44, 4, - 209, 230, 109, 176, 240, 0, 248, 94, 28, 48, 247, 252, 248, 189, 176, 1, 188, 240, 188, 1, 71, 0, 70, 192, 19, 115, - 90, 13, 19, 117, 186, 128, 181, 240, 176, 131, 144, 1, 28, 14, 28, 23, 28, 28, 240, 1, 255, 100, 48, 93, 247, 252, 248, - 181, 28, 5, 40, 0, 208, 10, 28, 48, 28, 33, 28, 58, 240, 0, 248, 85, 28, 6, 40, 0, 209, 4, 28, 40, 247, 252, 248, 155, - 32, 0, 224, 26, 28, 44, 34, 92, 52, 92, 73, 13, 28, 40, 240, 1, 248, 152, 153, 1, 28, 32, 240, 1, 255, 34, 74, 10, 96, - 44, 101, 174, 33, 0, 104, 19, 43, 0, 209, 3, 74, 7, 0, 139, 80, 157, 224, 3, 49, 1, 50, 4, 41, 4, 209, 244, 32, 1, 176, - 3, 188, 240, 188, 2, 71, 8, 19, 115, 172, 128, 19, 117, 186, 128, 181, 0, 176, 129, 34, 0, 35, 4, 247, 255, 255, 188, - 176, 1, 188, 2, 71, 8, 70, 192, 181, 0, 176, 129, 247, 255, 255, 90, 40, 0, 208, 0, 109, 128, 176, 1, 188, 2, 71, 8, - 181, 48, 176, 129, 28, 5, 108, 196, 224, 3, 28, 32, 247, 255, 251, 80, 108, 100, 44, 0, 209, 249, 104, 104, 247, 253, - 249, 154, 28, 40, 247, 252, 248, 81, 176, 1, 188, 48, 188, 1, 71, 0, 70, 192, 181, 240, 77, 213, 176, 159, 35, 0, 145, - 5, 146, 4, 112, 43, 28, 17, 28, 43, 34, 1, 144, 6, 247, 254, 250, 55, 40, 0, 209, 0, 225, 144, 35, 255, 0, 91, 92, 235, - 43, 85, 208, 0, 225, 138, 75, 203, 92, 235, 43, 170, 208, 0, 225, 133, 153, 4, 41, 0, 208, 0, 224, 172, 28, 46, 76, - 199, 54, 54, 28, 48, 28, 33, 34, 3, 240, 0, 255, 255, 40, 0, 209, 0, 224, 161, 28, 40, 48, 82, 28, 33, 34, 3, 240, 0, - 255, 246, 40, 0, 209, 0, 224, 152, 34, 223, 0, 82, 172, 14, 24, 169, 28, 32, 34, 64, 240, 1, 248, 23, 79, 184, 121, - 33, 122, 37, 122, 99, 122, 162, 122, 224, 41, 0, 208, 127, 4, 18, 2, 27, 67, 19, 67, 43, 6, 2, 67, 19, 147, 8, 41, 15, - 209, 88, 35, 228, 33, 0, 0, 91, 145, 9, 147, 3, 154, 8, 152, 6, 24, 142, 28, 49, 34, 1, 28, 59, 247, 254, 249, 235, - 40, 0, 209, 0, 225, 68, 75, 170, 153, 3, 92, 250, 92, 123, 2, 18, 4, 27, 67, 26, 35, 227, 0, 91, 92, 251, 152, 6, 67, - 26, 75, 165, 92, 251, 6, 27, 67, 26, 35, 235, 0, 91, 92, 251, 24, 181, 147, 13, 75, 162, 28, 41, 92, 251, 34, 1, 147, - 12, 35, 236, 0, 91, 92, 251, 147, 11, 75, 158, 92, 251, 147, 10, 28, 59, 247, 254, 249, 196, 40, 0, 209, 0, 225, 29, - 78, 150, 72, 154, 28, 49, 34, 3, 240, 0, 255, 157, 40, 0, 208, 60, 28, 56, 48, 82, 28, 49, 34, 3, 240, 0, 255, 149, - 40, 0, 208, 52, 154, 12, 153, 11, 2, 19, 4, 10, 67, 19, 154, 13, 153, 10, 67, 19, 6, 10, 28, 25, 67, 17, 208, 34, 154, - 9, 50, 1, 146, 9, 42, 8, 209, 172, 224, 28, 152, 6, 153, 8, 34, 1, 75, 129, 247, 254, 249, 153, 40, 0, 209, 0, 224, - 242, 72, 126, 78, 128, 48, 54, 28, 49, 34, 3, 240, 0, 255, 113, 40, 0, 208, 18, 72, 122, 28, 49, 48, 82, 34, 3, 240, - 0, 255, 105, 40, 0, 208, 10, 155, 8, 147, 4, 224, 0, 149, 4, 171, 26, 66, 156, 208, 5, 52, 16, 231, 115, 149, 4, 224, - 1, 153, 8, 145, 4, 76, 118, 77, 113, 28, 32, 28, 41, 34, 3, 240, 0, 255, 83, 40, 0, 208, 8, 28, 32, 48, 28, 28, 41, - 34, 3, 240, 0, 255, 75, 40, 0, 208, 0, 224, 194, 32, 88, 247, 251, 255, 119, 28, 7, 40, 0, 209, 0, 224, 188, 154, 6, - 73, 98, 96, 2, 125, 203, 125, 138, 2, 27, 67, 19, 99, 131, 43, 0, 209, 15, 29, 139, 127, 218, 29, 203, 127, 219, 2, - 18, 4, 27, 67, 26, 29, 75, 127, 219, 67, 26, 28, 11, 51, 8, 127, 219, 6, 27, 67, 26, 99, 130, 73, 86, 125, 11, 124, - 202, 2, 27, 67, 19, 98, 59, 43, 0, 209, 14, 28, 139, 127, 218, 28, 203, 127, 219, 2, 18, 4, 27, 67, 26, 28, 75, 127, - 219, 67, 26, 29, 11, 127, 219, 6, 27, 67, 26, 98, 58, 35, 128, 73, 74, 0, 155, 98, 187, 123, 11, 122, 202, 2, 27, 67, - 19, 123, 74, 28, 16, 67, 88, 18, 64, 144, 7, 98, 248, 154, 7, 106, 62, 2, 83, 99, 59, 123, 205, 123, 139, 2, 45, 67, - 29, 155, 4, 32, 0, 25, 93, 99, 125, 124, 10, 107, 187, 67, 83, 24, 237, 97, 189, 124, 139, 124, 74, 2, 27, 67, 19, 9, - 27, 24, 237, 98, 125, 154, 4, 28, 49, 26, 171, 28, 28, 35, 0, 27, 9, 65, 152, 75, 51, 74, 49, 240, 0, 250, 171, 97, - 56, 97, 121, 155, 4, 27, 118, 24, 246, 153, 7, 28, 48, 240, 0, 250, 8, 75, 53, 34, 2, 99, 248, 100, 58, 66, 152, 216, - 1, 35, 1, 224, 5, 75, 50, 66, 152, 216, 1, 114, 58, 224, 1, 35, 3, 114, 59, 122, 59, 43, 3, 208, 2, 35, 0, 97, 251, - 224, 30, 73, 35, 28, 11, 51, 45, 120, 26, 51, 1, 120, 27, 2, 18, 4, 27, 67, 26, 28, 11, 51, 44, 120, 27, 67, 26, 28, - 11, 51, 47, 120, 27, 49, 40, 6, 27, 67, 26, 97, 250, 120, 10, 6, 19, 43, 0, 219, 6, 35, 15, 64, 26, 107, 187, 67, 90, - 107, 123, 24, 155, 99, 123, 106, 252, 44, 16, 216, 1, 44, 15, 216, 0, 36, 16, 106, 58, 153, 4, 104, 59, 24, 138, 107, - 120, 153, 5, 146, 0, 28, 34, 247, 253, 248, 24, 105, 251, 96, 120, 100, 123, 155, 6, 104, 90, 35, 1, 8, 82, 67, 147, - 101, 123, 35, 0, 100, 187, 100, 251, 224, 0, 39, 0, 176, 31, 28, 56, 188, 240, 188, 2, 71, 8, 70, 192, 0, 0, 0, 0, 0, - 0, 2, 0, 19, 117, 186, 160, 0, 0, 1, 255, 19, 115, 172, 220, 0, 0, 1, 199, 0, 0, 1, 201, 0, 0, 1, 215, 0, 0, 1, 217, - 19, 117, 186, 214, 0, 0, 15, 244, 0, 0, 255, 244, 72, 82, 104, 0, 70, 192, 104, 0, 70, 192, 70, 135, 70, 192, 70, 192, - 28, 32, 180, 254, 247, 250, 255, 102, 40, 0, 218, 20, 72, 75, 104, 3, 104, 88, 188, 254, 70, 135, 70, 192, 70, 192, - 70, 192, 70, 192, 70, 192, 28, 32, 180, 254, 247, 250, 248, 150, 40, 0, 218, 4, 72, 67, 104, 3, 104, 152, 188, 254, - 70, 135, 188, 254, 28, 1, 72, 65, 104, 0, 70, 135, 28, 32, 180, 254, 247, 250, 248, 138, 40, 0, 218, 244, 72, 59, 104, - 3, 104, 216, 188, 254, 70, 135, 70, 192, 70, 192, 70, 192, 70, 192, 70, 192, 28, 32, 180, 254, 247, 250, 248, 126, 40, - 0, 218, 228, 72, 51, 104, 3, 105, 24, 188, 254, 70, 135, 70, 192, 70, 192, 70, 192, 70, 192, 70, 192, 28, 32, 180, 254, - 247, 250, 248, 114, 40, 0, 218, 212, 72, 43, 104, 3, 105, 88, 188, 254, 70, 135, 70, 192, 70, 192, 70, 192, 70, 192, - 70, 192, 28, 32, 180, 254, 180, 1, 70, 105, 247, 250, 252, 200, 188, 8, 43, 0, 209, 193, 40, 0, 218, 191, 72, 33, 104, - 3, 105, 152, 188, 254, 70, 135, 28, 32, 180, 254, 180, 1, 70, 105, 247, 250, 251, 180, 188, 8, 43, 0, 209, 177, 40, - 0, 218, 175, 72, 25, 104, 3, 105, 216, 188, 254, 70, 135, 233, 45, 64, 240, 233, 45, 0, 12, 225, 160, 0, 0, 229, 159, - 64, 80, 225, 47, 255, 20, 225, 160, 0, 0, 225, 160, 0, 0, 225, 160, 0, 0, 247, 251, 253, 134, 74, 16, 104, 17, 188, - 12, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240, 76, 13, 104, 36, 70, 192, 70, 167, 70, 192, 70, 192, 180, 124, 181, 0, - 247, 250, 254, 250, 188, 2, 188, 124, 71, 8, 181, 112, 176, 136, 104, 133, 28, 1, 75, 6, 71, 24, 0, 0, 19, 115, 247, - 44, 19, 115, 160, 28, 19, 115, 102, 177, 19, 115, 247, 48, 19, 115, 247, 52, 32, 16, 0, 213, 70, 192, 70, 192, 70, 192, - 70, 192, 70, 192, 70, 192, 239, 0, 0, 204, 225, 47, 255, 30, 225, 160, 0, 0, 225, 160, 0, 0, 230, 0, 0, 16, 225, 47, - 255, 30, 230, 0, 0, 48, 225, 47, 255, 30, 230, 0, 0, 80, 225, 47, 255, 30, 230, 0, 0, 112, 225, 47, 255, 30, 230, 0, - 0, 144, 225, 47, 255, 30, 230, 0, 0, 176, 225, 47, 255, 30, 230, 0, 0, 208, 225, 47, 255, 30, 230, 0, 0, 240, 225, 47, - 255, 30, 230, 0, 1, 16, 225, 47, 255, 30, 230, 0, 1, 48, 225, 47, 255, 30, 230, 0, 1, 80, 225, 47, 255, 30, 230, 0, - 1, 112, 225, 47, 255, 30, 230, 0, 1, 144, 225, 47, 255, 30, 230, 0, 1, 176, 225, 47, 255, 30, 230, 0, 1, 208, 225, 47, - 255, 30, 230, 0, 1, 240, 225, 47, 255, 30, 230, 0, 2, 16, 225, 47, 255, 30, 230, 0, 2, 48, 225, 47, 255, 30, 230, 0, - 2, 80, 225, 47, 255, 30, 230, 0, 2, 112, 225, 47, 255, 30, 230, 0, 2, 144, 225, 47, 255, 30, 230, 0, 2, 176, 225, 47, - 255, 30, 230, 0, 2, 208, 225, 47, 255, 30, 230, 0, 2, 240, 225, 47, 255, 30, 230, 0, 3, 16, 225, 47, 255, 30, 230, 0, - 3, 48, 225, 47, 255, 30, 230, 0, 3, 80, 225, 47, 255, 30, 230, 0, 3, 112, 225, 47, 255, 30, 230, 0, 3, 144, 225, 47, - 255, 30, 230, 0, 3, 176, 225, 47, 255, 30, 230, 0, 3, 208, 225, 47, 255, 30, 230, 0, 3, 240, 225, 47, 255, 30, 230, - 0, 4, 16, 225, 47, 255, 30, 230, 0, 4, 48, 225, 47, 255, 30, 230, 0, 4, 80, 225, 47, 255, 30, 230, 0, 4, 112, 225, 47, - 255, 30, 230, 0, 4, 144, 225, 47, 255, 30, 230, 0, 4, 176, 225, 47, 255, 30, 230, 0, 4, 208, 225, 47, 255, 30, 230, - 0, 4, 240, 225, 47, 255, 30, 230, 0, 5, 16, 225, 47, 255, 30, 230, 0, 5, 48, 225, 47, 255, 30, 230, 0, 5, 80, 225, 47, - 255, 30, 230, 0, 5, 112, 225, 47, 255, 30, 230, 0, 5, 176, 225, 47, 255, 30, 230, 0, 6, 144, 225, 47, 255, 30, 230, - 0, 7, 240, 225, 47, 255, 30, 230, 0, 8, 16, 225, 47, 255, 30, 230, 0, 8, 48, 225, 47, 255, 30, 230, 0, 8, 80, 225, 47, - 255, 30, 230, 0, 9, 240, 225, 47, 255, 30, 230, 0, 10, 16, 225, 47, 255, 30, 239, 0, 0, 204, 225, 47, 255, 30, 239, - 0, 0, 205, 225, 47, 255, 30, 41, 0, 208, 52, 35, 1, 34, 0, 180, 16, 66, 136, 211, 44, 36, 1, 7, 36, 66, 161, 210, 4, - 66, 129, 210, 2, 1, 9, 1, 27, 231, 248, 0, 228, 66, 161, 210, 4, 66, 129, 210, 2, 0, 73, 0, 91, 231, 248, 66, 136, 211, - 1, 26, 64, 67, 26, 8, 76, 66, 160, 211, 2, 27, 0, 8, 92, 67, 34, 8, 140, 66, 160, 211, 2, 27, 0, 8, 156, 67, 34, 8, - 204, 66, 160, 211, 2, 27, 0, 8, 220, 67, 34, 40, 0, 208, 3, 9, 27, 208, 1, 9, 9, 231, 227, 28, 16, 188, 16, 71, 112, - 181, 2, 240, 0, 248, 94, 32, 0, 188, 6, 71, 16, 70, 192, 181, 3, 247, 255, 255, 191, 188, 14, 67, 66, 26, 137, 71, 24, - 70, 192, 41, 0, 208, 65, 180, 16, 28, 4, 64, 76, 70, 164, 35, 1, 34, 0, 41, 0, 213, 0, 66, 73, 40, 0, 213, 0, 66, 64, - 66, 136, 211, 44, 36, 1, 7, 36, 66, 161, 210, 4, 66, 129, 210, 2, 1, 9, 1, 27, 231, 248, 0, 228, 66, 161, 210, 4, 66, - 129, 210, 2, 0, 73, 0, 91, 231, 248, 66, 136, 211, 1, 26, 64, 67, 26, 8, 76, 66, 160, 211, 2, 27, 0, 8, 92, 67, 34, - 8, 140, 66, 160, 211, 2, 27, 0, 8, 156, 67, 34, 8, 204, 66, 160, 211, 2, 27, 0, 8, 220, 67, 34, 40, 0, 208, 3, 9, 27, - 208, 1, 9, 9, 231, 227, 28, 16, 70, 100, 44, 0, 213, 0, 66, 64, 188, 16, 71, 112, 181, 2, 240, 0, 248, 11, 32, 0, 188, - 6, 71, 16, 181, 3, 247, 255, 255, 179, 188, 14, 67, 66, 26, 137, 71, 24, 70, 192, 71, 112, 70, 192, 181, 240, 70, 87, - 70, 70, 180, 192, 28, 30, 75, 22, 70, 144, 28, 10, 64, 26, 64, 51, 70, 130, 28, 16, 67, 88, 12, 12, 28, 15, 12, 49, - 70, 132, 67, 74, 28, 32, 67, 88, 28, 37, 67, 77, 70, 97, 24, 130, 12, 11, 24, 210, 66, 144, 217, 2, 35, 128, 2, 91, - 24, 237, 75, 9, 70, 97, 4, 20, 12, 16, 64, 11, 24, 42, 24, 225, 70, 64, 67, 120, 70, 83, 67, 115, 24, 192, 24, 128, - 188, 12, 70, 144, 70, 154, 188, 240, 188, 4, 71, 16, 0, 0, 255, 255, 181, 48, 176, 131, 156, 6, 28, 5, 44, 0, 208, 23, - 42, 0, 208, 13, 28, 40, 148, 0, 240, 0, 248, 166, 28, 67, 209, 3, 35, 0, 96, 35, 35, 138, 96, 43, 176, 3, 188, 48, 188, - 2, 71, 8, 74, 5, 28, 40, 33, 0, 35, 1, 148, 0, 240, 0, 248, 149, 231, 237, 32, 130, 0, 64, 24, 44, 231, 227, 19, 115, - 173, 16, 181, 112, 28, 22, 74, 7, 28, 13, 176, 130, 28, 4, 28, 33, 104, 16, 147, 0, 28, 42, 28, 51, 247, 255, 255, 207, - 176, 2, 188, 112, 188, 2, 71, 8, 70, 192, 19, 115, 163, 32, 181, 240, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240, 176, - 135, 70, 139, 153, 16, 70, 130, 28, 22, 147, 3, 70, 136, 41, 0, 208, 68, 70, 91, 43, 0, 208, 72, 154, 3, 42, 0, 208, - 76, 156, 3, 73, 38, 70, 93, 39, 0, 104, 50, 70, 137, 224, 10, 104, 50, 70, 91, 24, 18, 96, 50, 43, 0, 208, 34, 53, 4, - 60, 1, 55, 1, 44, 0, 208, 18, 70, 73, 104, 11, 70, 65, 145, 0, 70, 80, 28, 41, 247, 255, 255, 153, 40, 0, 220, 234, - 28, 129, 209, 19, 73, 24, 104, 50, 104, 11, 24, 210, 96, 50, 44, 0, 209, 236, 159, 3, 176, 7, 28, 56, 188, 60, 70, 144, - 70, 153, 70, 162, 70, 171, 188, 240, 188, 2, 71, 8, 37, 0, 231, 219, 40, 0, 208, 8, 35, 0, 70, 66, 96, 19, 70, 81, 35, - 138, 39, 1, 96, 11, 66, 127, 231, 232, 96, 48, 231, 230, 34, 134, 0, 82, 68, 82, 70, 91, 70, 144, 43, 0, 209, 182, 104, - 51, 36, 1, 66, 100, 147, 5, 174, 5, 148, 3, 231, 179, 39, 0, 231, 214, 19, 115, 162, 160, 181, 112, 28, 22, 74, 7, 28, - 13, 176, 130, 28, 4, 28, 33, 104, 16, 147, 0, 28, 42, 28, 51, 247, 255, 255, 141, 176, 2, 188, 112, 188, 2, 71, 8, 70, - 192, 19, 115, 163, 32, 181, 240, 70, 87, 70, 70, 180, 192, 176, 131, 28, 15, 28, 21, 28, 30, 41, 0, 208, 98, 45, 0, - 208, 11, 46, 0, 209, 9, 36, 2, 66, 100, 176, 3, 28, 32, 188, 12, 70, 144, 70, 154, 188, 240, 188, 2, 71, 8, 76, 203, - 28, 32, 240, 1, 250, 16, 40, 1, 217, 69, 73, 201, 28, 32, 240, 1, 249, 184, 40, 0, 209, 74, 45, 0, 208, 122, 152, 10, - 104, 1, 41, 0, 209, 112, 35, 1, 120, 42, 70, 156, 42, 0, 209, 0, 224, 153, 42, 127, 217, 112, 28, 19, 59, 192, 43, 31, - 216, 0, 225, 230, 28, 19, 59, 224, 43, 15, 216, 0, 225, 158, 28, 19, 59, 240, 43, 7, 216, 0, 225, 251, 28, 19, 59, 248, - 43, 3, 217, 0, 224, 140, 152, 10, 113, 2, 41, 0, 208, 0, 225, 15, 35, 1, 96, 3, 46, 1, 217, 190, 154, 10, 104, 17, 41, - 1, 209, 0, 226, 78, 155, 10, 121, 90, 152, 10, 121, 0, 70, 128, 40, 248, 209, 0, 226, 81, 28, 19, 59, 128, 43, 63, 216, - 0, 226, 90, 36, 1, 66, 100, 231, 171, 45, 0, 208, 58, 120, 42, 96, 58, 120, 43, 28, 28, 30, 98, 65, 148, 231, 162, 175, - 1, 231, 154, 73, 162, 28, 32, 240, 1, 249, 103, 40, 0, 209, 51, 45, 0, 208, 41, 152, 10, 120, 42, 104, 3, 28, 17, 43, - 0, 209, 81, 28, 19, 59, 129, 43, 30, 217, 0, 224, 211, 153, 10, 35, 1, 113, 10, 96, 11, 46, 1, 216, 0, 231, 132, 120, - 105, 32, 2, 28, 11, 59, 64, 43, 62, 217, 2, 59, 64, 43, 124, 216, 206, 154, 10, 121, 19, 2, 27, 24, 203, 96, 59, 35, - 0, 96, 19, 28, 4, 231, 116, 152, 10, 35, 0, 54, 1, 121, 2, 70, 156, 231, 139, 36, 0, 231, 108, 152, 10, 35, 0, 96, 3, - 36, 1, 96, 58, 231, 102, 73, 134, 28, 32, 240, 1, 249, 45, 40, 0, 208, 0, 224, 172, 45, 0, 208, 238, 152, 10, 120, 41, - 104, 3, 28, 10, 43, 0, 208, 0, 225, 12, 28, 11, 59, 161, 43, 93, 216, 169, 35, 1, 113, 1, 96, 3, 46, 1, 216, 0, 231, - 74, 120, 105, 32, 2, 28, 11, 59, 161, 43, 93, 216, 151, 231, 199, 157, 10, 96, 58, 36, 0, 96, 42, 231, 64, 43, 1, 209, - 149, 32, 1, 231, 183, 28, 19, 59, 252, 43, 1, 216, 137, 155, 10, 113, 26, 41, 0, 208, 0, 225, 213, 152, 10, 35, 1, 96, - 3, 46, 1, 216, 0, 231, 43, 154, 10, 104, 17, 41, 1, 209, 0, 226, 67, 155, 10, 121, 90, 152, 10, 121, 0, 70, 128, 40, - 252, 209, 0, 226, 68, 28, 19, 59, 128, 43, 63, 217, 0, 231, 108, 155, 10, 113, 90, 41, 1, 209, 0, 226, 54, 54, 1, 46, - 2, 216, 0, 231, 16, 154, 10, 104, 17, 41, 2, 209, 0, 226, 64, 155, 10, 121, 154, 28, 19, 59, 128, 43, 63, 217, 0, 231, - 87, 152, 10, 113, 130, 41, 2, 209, 0, 226, 49, 54, 1, 46, 3, 216, 0, 230, 251, 154, 10, 104, 17, 41, 3, 209, 0, 226, - 35, 155, 10, 121, 218, 28, 19, 59, 128, 43, 63, 217, 0, 231, 66, 152, 10, 113, 194, 41, 3, 209, 0, 226, 20, 54, 1, 46, - 4, 216, 0, 230, 230, 46, 5, 209, 0, 231, 54, 70, 97, 92, 110, 28, 51, 59, 128, 43, 63, 217, 0, 231, 47, 155, 10, 121, - 90, 33, 63, 64, 10, 6, 18, 70, 96, 35, 1, 70, 148, 70, 66, 64, 19, 7, 155, 70, 98, 67, 26, 155, 10, 121, 155, 64, 11, - 4, 155, 67, 26, 155, 10, 121, 219, 64, 11, 3, 27, 67, 26, 28, 51, 64, 11, 48, 1, 1, 155, 67, 26, 92, 43, 157, 10, 64, - 11, 67, 26, 35, 0, 96, 58, 28, 68, 96, 43, 230, 185, 59, 95, 43, 15, 217, 0, 231, 12, 231, 38, 54, 1, 230, 239, 73, - 45, 28, 32, 240, 1, 248, 121, 40, 0, 208, 0, 230, 255, 45, 0, 209, 0, 225, 64, 153, 10, 120, 200, 46, 0, 208, 42, 74, - 39, 75, 39, 28, 44, 70, 172, 70, 144, 37, 0, 70, 154, 120, 33, 41, 40, 209, 0, 225, 36, 41, 40, 216, 82, 41, 27, 209, - 0, 225, 37, 41, 36, 209, 0, 225, 32, 41, 0, 209, 83, 34, 6, 0, 195, 24, 27, 24, 155, 70, 66, 92, 208, 70, 82, 92, 211, - 43, 5, 217, 0, 230, 213, 74, 25, 0, 155, 88, 211, 70, 159, 154, 10, 113, 17, 28, 98, 53, 1, 28, 20, 66, 174, 216, 219, - 153, 10, 36, 2, 96, 8, 66, 100, 230, 116, 28, 98, 70, 148, 231, 243, 152, 10, 35, 1, 96, 3, 121, 3, 120, 34, 2, 27, - 24, 210, 96, 58, 28, 108, 230, 103, 152, 10, 35, 0, 96, 3, 70, 97, 120, 11, 28, 108, 96, 59, 230, 95, 19, 115, 162, - 164, 19, 115, 172, 228, 19, 115, 172, 252, 19, 115, 172, 244, 19, 115, 172, 236, 19, 115, 173, 160, 19, 115, 173, 88, - 19, 115, 173, 64, 157, 10, 35, 0, 96, 43, 36, 0, 96, 59, 230, 73, 43, 1, 208, 0, 230, 157, 32, 1, 230, 249, 41, 66, - 209, 0, 224, 202, 41, 74, 209, 0, 224, 197, 41, 64, 209, 0, 224, 200, 28, 11, 59, 33, 43, 93, 216, 0, 224, 210, 34, - 8, 231, 165, 152, 10, 113, 2, 41, 0, 208, 0, 224, 178, 35, 1, 96, 3, 46, 1, 216, 0, 230, 40, 153, 10, 104, 11, 43, 1, - 209, 0, 225, 49, 153, 10, 121, 74, 155, 10, 121, 27, 70, 152, 43, 224, 209, 0, 225, 20, 28, 19, 59, 128, 43, 63, 217, - 0, 230, 105, 152, 10, 35, 2, 113, 66, 96, 3, 46, 2, 209, 0, 230, 15, 70, 97, 92, 108, 28, 35, 59, 128, 43, 63, 217, - 0, 230, 91, 35, 0, 96, 3, 121, 67, 73, 159, 32, 63, 70, 69, 64, 3, 3, 42, 64, 10, 1, 155, 67, 19, 28, 34, 64, 2, 28, - 25, 72, 155, 67, 17, 75, 155, 24, 10, 66, 154, 216, 0, 230, 70, 70, 100, 52, 1, 96, 57, 229, 241, 153, 10, 35, 1, 113, - 10, 96, 11, 46, 1, 216, 0, 229, 232, 70, 99, 92, 234, 28, 19, 59, 128, 43, 63, 217, 0, 230, 52, 157, 10, 121, 41, 41, - 193, 216, 0, 230, 47, 35, 0, 96, 43, 35, 63, 64, 26, 35, 31, 64, 11, 1, 155, 70, 100, 67, 26, 52, 1, 96, 58, 229, 210, - 155, 10, 113, 26, 41, 0, 209, 83, 152, 10, 35, 1, 96, 3, 46, 1, 216, 0, 229, 198, 154, 10, 104, 17, 41, 1, 209, 0, 224, - 217, 155, 10, 121, 90, 152, 10, 121, 0, 70, 128, 40, 240, 208, 100, 28, 19, 59, 128, 43, 63, 217, 0, 230, 8, 155, 10, - 113, 90, 41, 1, 208, 87, 54, 1, 46, 2, 216, 0, 229, 173, 153, 10, 104, 11, 43, 2, 209, 0, 224, 187, 153, 10, 121, 138, - 28, 19, 59, 128, 43, 63, 217, 0, 229, 244, 155, 10, 113, 154, 152, 10, 35, 3, 96, 3, 46, 3, 209, 0, 229, 153, 70, 97, - 92, 104, 28, 3, 59, 128, 43, 63, 217, 0, 229, 229, 155, 10, 121, 90, 33, 63, 70, 69, 35, 7, 64, 43, 64, 10, 157, 10, - 4, 155, 3, 18, 67, 26, 121, 171, 64, 11, 1, 155, 67, 26, 28, 3, 64, 11, 67, 26, 70, 100, 35, 0, 96, 58, 52, 1, 96, 43, - 229, 124, 54, 1, 231, 76, 54, 1, 231, 172, 34, 5, 230, 231, 34, 4, 230, 229, 34, 2, 230, 227, 34, 3, 230, 225, 34, 1, - 230, 223, 34, 0, 230, 221, 70, 99, 32, 1, 92, 234, 68, 132, 229, 173, 155, 10, 36, 1, 96, 29, 229, 99, 34, 7, 230, 210, - 42, 135, 220, 0, 229, 175, 229, 169, 54, 1, 230, 42, 152, 10, 35, 2, 96, 3, 231, 164, 42, 143, 220, 0, 229, 165, 231, - 150, 155, 10, 113, 90, 41, 1, 208, 87, 54, 1, 46, 2, 216, 0, 229, 73, 154, 10, 104, 17, 41, 2, 208, 74, 155, 10, 121, - 154, 28, 19, 59, 128, 43, 63, 217, 0, 229, 145, 152, 10, 113, 130, 41, 2, 208, 60, 54, 1, 46, 3, 216, 0, 229, 54, 153, - 10, 104, 11, 43, 3, 208, 47, 153, 10, 121, 202, 28, 19, 59, 128, 43, 63, 217, 0, 229, 126, 155, 10, 113, 218, 152, 10, - 35, 4, 96, 3, 46, 4, 209, 0, 229, 35, 121, 66, 33, 63, 70, 64, 35, 3, 64, 10, 64, 3, 152, 10, 6, 27, 4, 146, 67, 26, - 121, 131, 64, 11, 3, 27, 67, 26, 121, 195, 64, 11, 1, 155, 70, 96, 67, 26, 92, 43, 64, 11, 153, 10, 67, 26, 70, 100, - 35, 0, 96, 58, 52, 1, 96, 11, 229, 8, 42, 159, 220, 0, 229, 86, 230, 230, 70, 99, 32, 1, 92, 234, 68, 132, 231, 204, - 35, 3, 96, 3, 231, 192, 70, 99, 32, 1, 92, 234, 68, 132, 231, 177, 152, 10, 35, 2, 96, 3, 231, 164, 70, 99, 32, 1, 92, - 234, 68, 132, 230, 202, 70, 99, 32, 1, 92, 234, 68, 132, 231, 64, 70, 99, 32, 1, 92, 234, 68, 132, 231, 34, 70, 99, - 32, 1, 92, 234, 68, 132, 229, 184, 152, 10, 35, 2, 96, 3, 229, 197, 42, 131, 220, 0, 229, 41, 229, 182, 35, 4, 96, 3, - 229, 232, 70, 99, 32, 1, 92, 234, 68, 132, 229, 216, 35, 3, 96, 3, 229, 203, 70, 99, 32, 1, 92, 234, 68, 132, 229, 187, - 0, 0, 255, 255, 255, 255, 40, 0, 0, 0, 7, 255, 181, 112, 28, 14, 28, 21, 28, 4, 42, 3, 217, 32, 28, 51, 67, 3, 7, 154, - 208, 18, 120, 35, 120, 8, 66, 131, 209, 27, 30, 106, 224, 6, 52, 1, 49, 1, 120, 35, 120, 8, 58, 1, 66, 131, 209, 18, - 42, 0, 209, 246, 32, 0, 188, 112, 188, 2, 71, 8, 104, 2, 104, 11, 66, 154, 209, 4, 61, 4, 48, 4, 49, 4, 45, 3, 216, - 246, 28, 4, 45, 0, 209, 224, 231, 238, 26, 24, 231, 237, 181, 240, 28, 7, 28, 14, 28, 4, 28, 21, 28, 8, 28, 17, 42, - 15, 217, 3, 28, 51, 67, 59, 7, 154, 208, 11, 41, 0, 208, 5, 34, 0, 92, 131, 84, 163, 50, 1, 66, 138, 209, 250, 28, 56, - 188, 240, 188, 2, 71, 8, 28, 58, 28, 49, 28, 40, 104, 11, 96, 19, 104, 75, 96, 83, 104, 139, 96, 147, 104, 203, 56, - 16, 96, 211, 49, 16, 50, 16, 40, 15, 216, 242, 28, 43, 59, 16, 9, 26, 1, 17, 50, 1, 1, 18, 26, 89, 24, 176, 24, 188, - 41, 3, 217, 216, 34, 0, 88, 131, 80, 163, 50, 4, 26, 139, 43, 3, 216, 249, 31, 11, 8, 154, 0, 145, 50, 1, 0, 146, 26, - 89, 24, 128, 24, 164, 231, 200, 181, 240, 28, 15, 70, 132, 28, 12, 28, 22, 28, 5, 28, 17, 69, 188, 217, 16, 24, 184, - 69, 132, 210, 13, 42, 0, 208, 7, 24, 169, 58, 1, 56, 1, 120, 3, 57, 1, 112, 11, 58, 1, 210, 249, 70, 96, 188, 240, 188, - 2, 71, 8, 46, 15, 216, 8, 41, 0, 208, 247, 34, 0, 92, 163, 84, 171, 50, 1, 66, 138, 209, 250, 231, 240, 70, 99, 67, - 59, 7, 154, 209, 242, 70, 98, 28, 57, 28, 48, 104, 11, 96, 19, 104, 75, 96, 83, 104, 139, 96, 147, 104, 203, 56, 16, - 96, 211, 49, 16, 50, 16, 40, 15, 216, 242, 28, 51, 59, 16, 9, 26, 1, 17, 50, 1, 1, 18, 26, 89, 70, 99, 24, 190, 24, - 156, 41, 3, 217, 14, 34, 0, 88, 179, 80, 163, 50, 4, 26, 139, 43, 3, 216, 249, 31, 11, 8, 154, 0, 145, 50, 1, 0, 146, - 26, 89, 24, 182, 24, 164, 28, 37, 28, 52, 231, 196, 70, 192, 181, 240, 28, 7, 70, 140, 28, 16, 28, 57, 7, 186, 208, - 14, 40, 0, 208, 73, 70, 98, 6, 19, 56, 1, 14, 27, 34, 3, 224, 2, 40, 0, 208, 65, 56, 1, 112, 11, 49, 1, 66, 17, 209, - 248, 28, 5, 28, 10, 40, 3, 217, 46, 35, 255, 70, 98, 64, 26, 2, 19, 67, 19, 4, 26, 28, 20, 28, 14, 67, 28, 40, 15, 217, - 18, 28, 2, 28, 11, 58, 16, 96, 28, 96, 92, 96, 156, 96, 220, 51, 16, 42, 15, 216, 247, 28, 3, 59, 16, 28, 29, 9, 27, - 51, 1, 34, 15, 1, 27, 64, 21, 24, 206, 45, 3, 217, 13, 34, 0, 80, 180, 50, 4, 26, 171, 43, 3, 216, 250, 31, 43, 28, - 29, 8, 155, 51, 1, 34, 3, 0, 155, 64, 21, 24, 246, 28, 50, 45, 0, 208, 7, 70, 97, 6, 11, 14, 25, 35, 0, 84, 209, 51, - 1, 66, 157, 209, 251, 28, 56, 188, 240, 188, 2, 71, 8, 70, 192, 181, 240, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240, - 104, 1, 176, 131, 28, 6, 41, 59, 217, 0, 224, 216, 104, 65, 41, 59, 217, 0, 224, 193, 104, 177, 41, 23, 217, 0, 224, - 171, 105, 53, 45, 11, 221, 0, 224, 152, 105, 119, 7, 185, 209, 69, 28, 56, 33, 100, 247, 255, 250, 131, 41, 0, 208, - 55, 104, 244, 34, 29, 44, 0, 220, 63, 33, 11, 70, 138, 73, 111, 35, 3, 70, 153, 70, 136, 224, 13, 41, 1, 209, 0, 224, - 203, 28, 16, 0, 139, 70, 65, 88, 90, 24, 163, 96, 243, 43, 0, 220, 75, 105, 53, 28, 2, 28, 28, 30, 105, 97, 49, 28, - 75, 209, 237, 28, 61, 70, 81, 63, 1, 70, 75, 97, 119, 97, 49, 66, 31, 208, 0, 224, 176, 28, 56, 33, 100, 247, 255, 250, - 87, 41, 0, 209, 8, 73, 93, 24, 104, 33, 200, 0, 73, 247, 255, 250, 79, 41, 0, 208, 0, 224, 161, 32, 29, 33, 11, 231, - 214, 75, 88, 33, 200, 24, 248, 0, 73, 247, 255, 250, 67, 41, 0, 208, 191, 104, 244, 34, 28, 44, 0, 221, 191, 73, 80, - 35, 0, 70, 136, 70, 138, 33, 3, 70, 155, 70, 137, 224, 16, 0, 171, 70, 65, 88, 91, 66, 163, 218, 16, 45, 1, 208, 23, - 0, 171, 70, 81, 88, 91, 53, 1, 26, 227, 96, 243, 97, 53, 45, 12, 208, 21, 28, 28, 45, 1, 209, 236, 28, 19, 66, 163, - 219, 238, 176, 3, 188, 60, 70, 144, 70, 153, 70, 162, 70, 171, 188, 240, 188, 1, 71, 0, 28, 19, 26, 227, 53, 1, 96, - 243, 97, 53, 45, 12, 209, 233, 28, 60, 70, 91, 55, 1, 70, 73, 97, 119, 97, 51, 66, 15, 209, 17, 28, 56, 33, 100, 247, - 255, 250, 3, 41, 0, 209, 7, 75, 53, 33, 200, 24, 224, 0, 73, 247, 255, 249, 251, 41, 0, 209, 3, 34, 29, 104, 244, 105, - 53, 231, 208, 34, 28, 104, 244, 105, 53, 231, 204, 28, 41, 70, 104, 34, 12, 240, 1, 253, 116, 105, 119, 155, 0, 153, - 1, 24, 255, 97, 119, 97, 49, 41, 0, 219, 62, 28, 13, 231, 88, 34, 24, 70, 104, 240, 1, 253, 102, 104, 242, 155, 0, 24, - 210, 155, 1, 96, 242, 96, 179, 43, 0, 219, 0, 231, 70, 51, 24, 96, 179, 30, 83, 96, 243, 231, 65, 70, 104, 34, 60, 240, - 1, 253, 84, 104, 177, 155, 0, 24, 201, 155, 1, 96, 177, 96, 115, 43, 0, 219, 0, 231, 49, 51, 60, 96, 115, 30, 75, 96, - 179, 28, 25, 231, 43, 70, 104, 34, 60, 240, 1, 253, 65, 104, 113, 155, 0, 24, 201, 155, 1, 96, 113, 96, 51, 43, 0, 219, - 0, 231, 26, 51, 60, 96, 51, 30, 75, 96, 115, 28, 25, 231, 20, 32, 28, 33, 11, 231, 52, 28, 16, 231, 53, 28, 10, 50, - 12, 30, 123, 97, 50, 97, 115, 28, 21, 28, 31, 231, 19, 70, 192, 19, 115, 174, 24, 0, 0, 7, 107, 0, 0, 7, 108, 0, 0, - 7, 109, 181, 240, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240, 176, 131, 28, 6, 240, 1, 253, 52, 70, 130, 28, 48, 247, - 255, 254, 228, 104, 49, 104, 178, 104, 115, 105, 48, 145, 1, 73, 149, 70, 145, 70, 155, 104, 242, 0, 131, 88, 91, 58, - 1, 24, 213, 40, 1, 220, 0, 224, 236, 105, 119, 7, 188, 209, 0, 224, 134, 75, 142, 24, 250, 75, 142, 97, 245, 66, 154, - 217, 0, 224, 141, 47, 70, 220, 0, 224, 149, 33, 3, 36, 70, 70, 136, 224, 19, 28, 32, 33, 100, 247, 255, 249, 96, 41, - 0, 209, 7, 75, 134, 33, 200, 24, 224, 0, 73, 247, 255, 249, 88, 41, 0, 209, 8, 35, 183, 0, 91, 52, 1, 24, 237, 66, 167, - 221, 7, 70, 66, 66, 20, 208, 232, 75, 127, 52, 1, 24, 237, 66, 167, 220, 247, 29, 40, 33, 7, 247, 255, 249, 68, 97, - 177, 41, 0, 218, 0, 224, 165, 70, 74, 1, 19, 26, 155, 1, 25, 70, 92, 26, 201, 1, 35, 27, 27, 0, 155, 1, 9, 24, 201, - 154, 1, 0, 107, 25, 91, 24, 137, 1, 26, 26, 210, 1, 19, 26, 155, 1, 219, 106, 53, 24, 201, 70, 136, 45, 0, 221, 0, 37, - 1, 75, 108, 104, 27, 43, 0, 209, 0, 224, 142, 75, 104, 70, 84, 24, 248, 104, 99, 66, 131, 208, 0, 224, 130, 70, 81, - 106, 12, 107, 139, 27, 24, 105, 202, 107, 207, 70, 164, 69, 128, 219, 0, 224, 147, 27, 209, 70, 82, 104, 19, 43, 0, - 209, 0, 224, 162, 70, 67, 23, 218, 70, 68, 15, 203, 66, 140, 65, 90, 35, 1, 69, 128, 219, 0, 224, 164, 28, 20, 64, 28, - 45, 0, 219, 106, 28, 35, 64, 107, 43, 1, 209, 102, 70, 97, 27, 205, 44, 0, 209, 0, 66, 109, 104, 51, 25, 91, 96, 51, - 28, 48, 247, 255, 254, 75, 68, 168, 224, 89, 28, 56, 33, 100, 247, 255, 248, 231, 41, 0, 208, 93, 53, 1, 75, 71, 24, - 250, 75, 71, 97, 245, 66, 154, 216, 0, 231, 113, 32, 1, 66, 64, 176, 3, 188, 60, 70, 144, 70, 153, 70, 162, 70, 171, - 188, 240, 188, 2, 71, 8, 47, 70, 209, 0, 231, 134, 47, 69, 208, 98, 33, 3, 36, 69, 70, 136, 224, 19, 28, 32, 33, 100, - 247, 255, 248, 197, 41, 0, 209, 7, 75, 57, 33, 200, 24, 224, 0, 73, 247, 255, 248, 189, 41, 0, 209, 8, 35, 183, 0, 91, - 60, 1, 26, 237, 66, 167, 218, 7, 70, 66, 66, 20, 208, 232, 75, 49, 60, 1, 26, 237, 66, 167, 219, 247, 7, 188, 209, 64, - 28, 56, 33, 100, 247, 255, 248, 167, 41, 0, 208, 50, 35, 183, 0, 91, 26, 237, 29, 40, 33, 7, 247, 255, 248, 158, 97, - 177, 41, 0, 219, 0, 231, 89, 29, 203, 97, 179, 231, 86, 240, 0, 248, 75, 40, 0, 208, 0, 231, 119, 28, 44, 44, 1, 208, - 22, 70, 82, 106, 19, 70, 65, 24, 200, 98, 52, 231, 173, 105, 119, 231, 20, 73, 27, 24, 120, 33, 200, 0, 73, 247, 255, - 248, 129, 41, 0, 208, 0, 231, 11, 53, 1, 231, 151, 27, 219, 69, 152, 219, 230, 231, 103, 70, 82, 107, 211, 70, 65, 24, - 200, 98, 52, 231, 150, 73, 16, 24, 120, 33, 200, 0, 73, 247, 255, 248, 108, 41, 0, 208, 196, 75, 13, 26, 237, 231, 196, - 70, 67, 23, 218, 70, 68, 15, 203, 66, 140, 65, 90, 35, 1, 69, 128, 218, 4, 28, 20, 67, 28, 231, 92, 35, 0, 231, 88, - 35, 0, 231, 248, 70, 192, 19, 115, 173, 232, 0, 0, 39, 16, 0, 0, 78, 32, 0, 0, 7, 108, 0, 0, 1, 109, 19, 117, 188, 160, - 181, 240, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240, 176, 133, 28, 6, 240, 1, 251, 234, 75, 92, 70, 130, 66, 158, 220, - 0, 224, 143, 73, 91, 75, 91, 24, 117, 74, 91, 33, 100, 96, 70, 66, 73, 24, 240, 24, 180, 247, 254, 255, 230, 0, 235, - 25, 91, 73, 87, 0, 219, 25, 91, 16, 164, 0, 154, 24, 36, 24, 112, 33, 200, 24, 155, 0, 73, 24, 228, 247, 254, 255, 215, - 33, 100, 24, 36, 28, 48, 247, 255, 248, 28, 145, 1, 33, 200, 28, 48, 0, 73, 247, 255, 248, 22, 66, 74, 65, 74, 0, 83, - 24, 155, 1, 27, 147, 3, 35, 3, 64, 30, 75, 72, 34, 0, 145, 2, 147, 0, 70, 161, 70, 87, 70, 144, 70, 179, 122, 59, 43, - 74, 208, 89, 43, 68, 208, 107, 70, 90, 42, 0, 208, 77, 155, 3, 152, 0, 24, 198, 104, 248, 40, 1, 221, 110, 28, 49, 70, - 77, 34, 1, 201, 8, 50, 1, 24, 237, 66, 130, 219, 250, 33, 1, 26, 67, 0, 156, 29, 40, 33, 7, 247, 254, 255, 233, 105, - 123, 26, 88, 212, 90, 105, 58, 0, 211, 26, 155, 59, 7, 24, 24, 89, 51, 66, 152, 219, 7, 31, 196, 33, 7, 26, 192, 247, - 254, 255, 73, 0, 195, 26, 192, 25, 0, 25, 64, 105, 187, 106, 57, 24, 201, 0, 67, 24, 27, 1, 26, 26, 210, 1, 19, 26, - 155, 34, 1, 1, 219, 68, 144, 24, 201, 70, 67, 97, 249, 55, 28, 43, 2, 209, 188, 70, 80, 105, 194, 107, 131, 33, 1, 66, - 154, 219, 0, 33, 0, 70, 82, 96, 17, 32, 1, 176, 5, 188, 60, 70, 144, 70, 153, 70, 162, 70, 171, 188, 240, 188, 2, 71, - 8, 155, 1, 43, 0, 208, 174, 35, 48, 231, 173, 32, 0, 231, 239, 70, 88, 105, 121, 40, 0, 208, 19, 155, 2, 43, 0, 209, - 20, 34, 59, 15, 203, 32, 0, 66, 138, 65, 67, 34, 1, 64, 83, 6, 27, 14, 26, 70, 72, 24, 67, 24, 152, 231, 191, 105, 123, - 70, 73, 24, 200, 231, 187, 154, 1, 42, 0, 209, 235, 231, 231, 34, 0, 231, 241, 48, 7, 231, 162, 70, 77, 36, 0, 231, - 152, 0, 0, 7, 177, 255, 255, 248, 78, 255, 255, 248, 147, 255, 255, 248, 79, 255, 255, 249, 191, 19, 115, 174, 72, 181, - 240, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240, 176, 129, 70, 147, 70, 129, 28, 15, 240, 1, 251, 24, 70, 73, 104, 12, - 70, 130, 73, 200, 28, 32, 247, 254, 255, 29, 73, 198, 70, 128, 28, 32, 247, 254, 255, 98, 28, 14, 41, 0, 218, 17, 74, - 194, 67, 200, 24, 141, 28, 17, 247, 254, 254, 201, 0, 67, 24, 27, 1, 26, 26, 210, 70, 68, 1, 19, 60, 1, 26, 155, 26, - 36, 1, 219, 70, 160, 24, 238, 75, 186, 66, 158, 221, 17, 75, 185, 24, 245, 28, 40, 73, 182, 247, 254, 254, 180, 0, 66, - 24, 18, 1, 19, 26, 155, 70, 68, 1, 26, 52, 1, 26, 155, 24, 36, 1, 219, 70, 160, 24, 238, 33, 225, 1, 9, 28, 48, 247, - 254, 254, 233, 33, 225, 96, 184, 1, 9, 28, 48, 247, 254, 255, 45, 28, 12, 28, 8, 33, 60, 247, 254, 254, 222, 33, 60, - 96, 120, 28, 32, 247, 254, 255, 35, 70, 64, 96, 57, 48, 4, 33, 7, 247, 254, 255, 29, 70, 69, 97, 185, 41, 0, 218, 0, - 224, 199, 70, 68, 44, 0, 218, 0, 224, 166, 33, 3, 76, 159, 78, 159, 70, 136, 224, 12, 28, 32, 33, 100, 247, 254, 255, - 11, 41, 0, 208, 9, 34, 1, 0, 147, 88, 243, 66, 157, 219, 15, 52, 1, 26, 237, 70, 66, 66, 20, 208, 239, 33, 200, 28, - 32, 0, 73, 247, 254, 254, 250, 66, 74, 65, 74, 0, 147, 88, 243, 66, 157, 218, 239, 73, 145, 24, 99, 97, 123, 0, 83, - 24, 155, 74, 144, 1, 27, 24, 210, 35, 0, 97, 253, 97, 59, 104, 19, 70, 144, 66, 157, 219, 8, 28, 17, 49, 4, 34, 0, 50, - 1, 97, 58, 26, 237, 201, 8, 66, 171, 221, 249, 28, 107, 70, 90, 96, 251, 42, 0, 208, 11, 35, 0, 98, 59, 176, 1, 28, - 56, 188, 60, 70, 144, 70, 153, 70, 162, 70, 171, 188, 240, 188, 2, 71, 8, 240, 1, 248, 149, 75, 126, 104, 27, 43, 0, - 209, 119, 70, 90, 98, 58, 70, 84, 106, 37, 33, 225, 28, 40, 1, 9, 247, 254, 254, 188, 28, 12, 28, 8, 33, 60, 247, 254, - 254, 183, 104, 59, 26, 94, 28, 32, 33, 60, 96, 62, 247, 254, 254, 102, 104, 124, 33, 225, 26, 36, 1, 9, 28, 40, 96, - 124, 247, 254, 254, 94, 104, 189, 26, 41, 28, 13, 96, 185, 46, 59, 220, 0, 224, 140, 28, 51, 28, 98, 59, 60, 96, 122, - 96, 59, 28, 20, 44, 59, 221, 124, 28, 35, 28, 77, 59, 60, 96, 189, 96, 123, 45, 23, 221, 89, 105, 251, 51, 1, 97, 251, - 105, 187, 51, 1, 97, 187, 43, 6, 221, 1, 35, 0, 97, 187, 104, 251, 28, 90, 28, 43, 59, 24, 105, 56, 96, 187, 96, 250, - 0, 131, 70, 68, 89, 25, 66, 138, 221, 11, 26, 83, 96, 251, 28, 67, 97, 59, 43, 12, 209, 5, 105, 123, 34, 0, 51, 1, 97, - 58, 97, 123, 97, 250, 240, 1, 248, 60, 231, 151, 35, 3, 76, 75, 78, 76, 70, 152, 224, 11, 28, 32, 33, 100, 247, 254, - 254, 100, 41, 0, 208, 9, 34, 1, 0, 147, 88, 243, 24, 237, 212, 0, 231, 103, 60, 1, 70, 65, 66, 12, 208, 239, 33, 200, - 28, 32, 0, 73, 247, 254, 254, 83, 66, 74, 65, 74, 231, 238, 29, 203, 97, 187, 231, 52, 70, 81, 104, 75, 66, 163, 208, - 4, 28, 32, 247, 255, 253, 252, 40, 0, 208, 72, 70, 82, 104, 19, 43, 0, 208, 53, 70, 75, 104, 24, 105, 211, 66, 152, - 218, 67, 35, 0, 98, 59, 231, 116, 45, 0, 218, 197, 105, 251, 59, 1, 97, 251, 105, 187, 59, 1, 97, 187, 43, 0, 219, 62, - 104, 251, 28, 42, 59, 1, 50, 24, 96, 251, 96, 186, 43, 0, 209, 181, 105, 59, 59, 1, 97, 59, 43, 0, 219, 52, 0, 155, - 70, 68, 89, 27, 96, 251, 231, 171, 44, 0, 218, 133, 28, 35, 30, 77, 51, 60, 96, 189, 96, 123, 231, 127, 46, 0, 219, - 0, 231, 117, 28, 51, 30, 98, 51, 60, 96, 122, 96, 59, 28, 20, 231, 110, 70, 76, 70, 81, 104, 32, 105, 203, 66, 152, - 218, 15, 107, 139, 34, 1, 66, 152, 219, 0, 34, 0, 98, 58, 42, 1, 208, 9, 231, 55, 35, 1, 66, 91, 98, 59, 231, 51, 107, - 147, 66, 152, 218, 184, 35, 1, 98, 59, 70, 83, 107, 221, 231, 45, 35, 6, 97, 187, 231, 189, 35, 11, 97, 59, 105, 123, - 30, 92, 97, 124, 7, 161, 209, 26, 28, 32, 33, 100, 247, 254, 253, 225, 41, 0, 208, 20, 35, 183, 0, 91, 97, 251, 105, - 59, 231, 184, 0, 1, 81, 128, 0, 1, 81, 127, 255, 254, 174, 128, 0, 0, 7, 178, 19, 115, 174, 168, 255, 255, 248, 148, - 19, 115, 174, 72, 19, 117, 188, 160, 33, 200, 28, 32, 0, 73, 247, 254, 253, 197, 66, 75, 65, 75, 74, 1, 24, 155, 231, - 226, 0, 0, 1, 109, 181, 112, 28, 4, 28, 13, 7, 129, 209, 18, 104, 34, 78, 13, 25, 147, 67, 147, 74, 13, 66, 19, 209, - 11, 28, 17, 48, 4, 104, 2, 78, 9, 25, 147, 67, 147, 66, 11, 208, 248, 120, 3, 43, 0, 208, 3, 48, 1, 120, 3, 43, 0, 209, - 251, 28, 41, 240, 0, 248, 152, 28, 32, 188, 112, 188, 2, 71, 8, 254, 254, 254, 255, 128, 128, 128, 128, 181, 112, 6, - 9, 14, 9, 41, 0, 208, 42, 7, 131, 208, 14, 120, 3, 43, 0, 208, 81, 66, 153, 208, 70, 34, 3, 224, 4, 120, 3, 43, 0, 208, - 74, 66, 153, 208, 63, 48, 1, 66, 16, 209, 247, 2, 11, 67, 11, 4, 26, 28, 21, 78, 33, 104, 2, 67, 29, 76, 33, 25, 147, - 67, 147, 66, 35, 208, 7, 224, 53, 48, 4, 104, 2, 78, 28, 25, 147, 67, 147, 66, 35, 209, 46, 64, 106, 25, 147, 67, 147, - 66, 35, 208, 243, 224, 40, 7, 132, 208, 10, 120, 3, 43, 0, 208, 29, 34, 3, 224, 2, 120, 3, 43, 0, 208, 24, 48, 1, 66, - 16, 209, 249, 104, 2, 78, 15, 25, 147, 67, 147, 74, 15, 66, 19, 209, 7, 28, 17, 48, 4, 104, 2, 76, 11, 25, 19, 67, 147, - 66, 11, 208, 248, 120, 3, 43, 0, 208, 3, 48, 1, 120, 3, 43, 0, 209, 251, 188, 112, 188, 2, 71, 8, 66, 153, 208, 250, - 48, 1, 120, 3, 43, 0, 209, 249, 32, 0, 231, 244, 254, 254, 254, 255, 128, 128, 128, 128, 181, 48, 28, 11, 67, 3, 7, - 154, 209, 28, 104, 2, 104, 11, 66, 154, 209, 24, 76, 16, 25, 19, 67, 147, 74, 15, 66, 19, 209, 11, 28, 20, 48, 4, 49, - 4, 104, 2, 104, 11, 66, 154, 209, 11, 77, 9, 25, 83, 67, 147, 66, 35, 208, 244, 32, 0, 224, 9, 120, 10, 66, 154, 209, - 5, 48, 1, 49, 1, 120, 3, 43, 0, 209, 247, 120, 10, 26, 152, 188, 48, 188, 2, 71, 8, 254, 254, 254, 255, 128, 128, 128, - 128, 181, 112, 28, 11, 67, 3, 28, 5, 7, 154, 209, 14, 104, 10, 76, 12, 25, 19, 76, 12, 67, 147, 66, 35, 209, 7, 192, - 4, 49, 4, 104, 10, 78, 7, 25, 147, 67, 147, 66, 35, 208, 247, 34, 0, 92, 139, 84, 131, 50, 1, 43, 0, 209, 250, 28, 40, - 188, 112, 188, 2, 71, 8, 70, 192, 254, 254, 254, 255, 128, 128, 128, 128, 181, 48, 28, 4, 7, 129, 208, 10, 120, 3, 43, - 0, 208, 33, 34, 3, 224, 2, 120, 3, 43, 0, 208, 24, 48, 1, 66, 16, 209, 249, 104, 2, 77, 13, 25, 83, 67, 147, 74, 13, - 66, 19, 209, 11, 28, 17, 48, 4, 104, 2, 77, 9, 25, 83, 67, 147, 66, 11, 208, 248, 120, 3, 43, 0, 208, 3, 48, 1, 120, - 3, 43, 0, 209, 251, 27, 0, 188, 48, 188, 2, 71, 8, 32, 0, 231, 250, 70, 192, 254, 254, 254, 255, 128, 128, 128, 128, - 181, 240, 70, 87, 70, 78, 70, 69, 180, 224, 28, 6, 28, 13, 42, 0, 208, 59, 75, 31, 104, 27, 32, 1, 30, 84, 70, 156, - 70, 128, 224, 8, 44, 0, 208, 28, 41, 0, 208, 26, 42, 0, 208, 24, 54, 1, 53, 1, 60, 1, 120, 49, 70, 98, 24, 83, 120, - 91, 70, 64, 28, 15, 66, 3, 208, 0, 55, 32, 120, 42, 70, 99, 24, 155, 120, 88, 70, 67, 70, 145, 66, 24, 208, 2, 32, 32, - 24, 128, 70, 129, 69, 79, 208, 224, 70, 96, 24, 67, 120, 91, 7, 216, 213, 0, 49, 32, 28, 16, 70, 98, 24, 19, 120, 91, - 7, 218, 212, 7, 26, 8, 188, 28, 70, 144, 70, 153, 70, 162, 188, 240, 188, 2, 71, 8, 48, 32, 231, 245, 32, 0, 231, 244, - 70, 192, 19, 115, 162, 220, 181, 112, 28, 4, 42, 0, 208, 65, 28, 11, 67, 3, 7, 152, 209, 44, 28, 32, 28, 13, 42, 3, - 217, 38, 104, 36, 104, 11, 66, 156, 209, 34, 58, 4, 42, 0, 208, 50, 73, 27, 24, 99, 73, 27, 67, 163, 66, 11, 209, 44, - 28, 12, 224, 11, 104, 1, 104, 43, 66, 153, 209, 19, 58, 4, 42, 0, 208, 35, 78, 19, 25, 139, 67, 139, 66, 35, 209, 30, - 48, 4, 53, 4, 42, 3, 216, 239, 28, 4, 28, 41, 42, 0, 209, 5, 120, 3, 120, 40, 26, 24, 224, 19, 28, 4, 28, 41, 120, 35, - 120, 8, 58, 1, 66, 152, 208, 9, 231, 245, 40, 0, 208, 8, 52, 1, 49, 1, 120, 35, 120, 8, 66, 152, 209, 237, 58, 1, 42, - 0, 209, 244, 32, 0, 188, 112, 188, 2, 71, 8, 254, 254, 254, 255, 128, 128, 128, 128, 181, 240, 28, 11, 67, 3, 28, 6, - 28, 20, 7, 154, 209, 1, 44, 3, 216, 29, 28, 50, 44, 0, 208, 22, 120, 11, 30, 96, 112, 19, 50, 1, 43, 0, 208, 8, 49, - 1, 40, 0, 208, 13, 120, 11, 56, 1, 112, 19, 50, 1, 43, 0, 209, 246, 40, 0, 208, 5, 35, 0, 33, 0, 84, 209, 51, 1, 66, - 152, 209, 251, 28, 48, 188, 240, 188, 2, 71, 8, 77, 7, 104, 10, 79, 7, 25, 211, 67, 147, 66, 43, 209, 4, 60, 4, 192, - 4, 49, 4, 44, 3, 216, 244, 28, 2, 231, 212, 70, 192, 128, 128, 128, 128, 254, 254, 254, 255, 181, 0, 28, 2, 41, 0, 208, - 14, 120, 3, 43, 0, 208, 11, 57, 1, 224, 3, 120, 3, 57, 1, 43, 0, 208, 2, 48, 1, 41, 0, 209, 248, 26, 128, 188, 2, 71, - 8, 32, 0, 231, 251, 70, 192, 181, 48, 28, 13, 120, 1, 41, 0, 208, 19, 120, 44, 44, 0, 208, 20, 66, 140, 208, 15, 28, - 42, 224, 1, 66, 153, 208, 11, 50, 1, 120, 19, 43, 0, 209, 249, 48, 1, 120, 1, 41, 0, 209, 239, 120, 19, 43, 0, 209, - 0, 32, 0, 188, 48, 188, 2, 71, 8, 48, 1, 120, 1, 28, 42, 41, 0, 209, 227, 231, 242, 70, 192, 181, 48, 176, 129, 28, - 3, 28, 13, 41, 0, 208, 14, 36, 0, 224, 1, 28, 67, 28, 4, 28, 24, 28, 41, 247, 255, 254, 2, 40, 0, 209, 247, 176, 1, - 28, 32, 188, 48, 188, 2, 71, 8, 33, 0, 247, 255, 253, 248, 28, 4, 231, 245, 181, 48, 76, 160, 120, 35, 176, 129, 28, - 5, 43, 67, 209, 2, 120, 99, 43, 0, 208, 42, 73, 156, 28, 32, 247, 255, 254, 74, 40, 0, 209, 12, 28, 40, 33, 1, 240, - 0, 255, 40, 28, 5, 45, 255, 216, 44, 28, 43, 59, 65, 43, 25, 216, 86, 53, 32, 224, 33, 73, 148, 28, 32, 247, 255, 254, - 55, 40, 0, 208, 47, 73, 146, 28, 32, 247, 255, 254, 49, 40, 0, 209, 5, 28, 40, 33, 3, 240, 0, 255, 15, 28, 5, 231, 229, - 73, 141, 28, 32, 247, 255, 254, 37, 40, 0, 208, 223, 45, 254, 216, 7, 75, 138, 104, 27, 25, 91, 120, 91, 28, 40, 7, - 218, 212, 26, 28, 5, 176, 1, 28, 40, 188, 48, 188, 2, 71, 8, 75, 132, 66, 157, 216, 19, 74, 132, 24, 171, 43, 46, 217, - 3, 58, 50, 24, 171, 43, 4, 216, 42, 7, 235, 212, 237, 53, 1, 231, 235, 28, 40, 33, 2, 240, 0, 254, 229, 28, 5, 231, - 187, 48, 32, 231, 226, 75, 123, 66, 157, 216, 64, 74, 122, 24, 171, 43, 26, 217, 98, 74, 121, 24, 171, 43, 22, 216, - 1, 7, 235, 213, 232, 74, 119, 24, 171, 43, 111, 216, 0, 224, 173, 75, 118, 66, 157, 209, 206, 77, 117, 231, 204, 59, - 127, 43, 30, 217, 165, 45, 181, 209, 199, 37, 239, 0, 173, 231, 196, 58, 24, 24, 171, 43, 44, 217, 208, 58, 148, 24, - 171, 43, 16, 217, 204, 58, 26, 24, 171, 43, 38, 217, 200, 58, 42, 24, 171, 43, 16, 217, 196, 74, 105, 24, 171, 43, 14, - 217, 49, 75, 104, 24, 234, 75, 104, 66, 154, 217, 44, 74, 104, 24, 171, 43, 127, 216, 0, 225, 38, 35, 136, 0, 155, 66, - 157, 209, 162, 37, 207, 0, 109, 231, 159, 75, 99, 66, 157, 216, 39, 74, 98, 24, 171, 43, 15, 217, 114, 74, 97, 24, 171, - 43, 31, 216, 0, 231, 111, 74, 96, 24, 171, 43, 32, 217, 159, 58, 42, 24, 171, 43, 52, 217, 155, 58, 70, 24, 171, 43, - 36, 217, 151, 35, 159, 0, 219, 66, 157, 208, 147, 74, 89, 24, 171, 43, 12, 217, 0, 231, 126, 7, 235, 212, 0, 231, 123, - 53, 1, 231, 121, 75, 85, 66, 157, 208, 153, 53, 32, 231, 116, 75, 83, 66, 157, 216, 25, 74, 83, 24, 171, 43, 14, 216, - 0, 231, 124, 74, 81, 24, 171, 43, 148, 216, 0, 231, 119, 58, 160, 24, 171, 43, 88, 216, 0, 231, 114, 74, 77, 24, 171, - 43, 37, 216, 0, 224, 219, 75, 76, 66, 157, 208, 0, 231, 89, 77, 75, 231, 87, 75, 75, 66, 157, 217, 0, 224, 176, 74, - 74, 24, 171, 43, 7, 217, 39, 58, 16, 24, 171, 43, 5, 217, 35, 58, 16, 24, 171, 43, 7, 217, 31, 58, 16, 24, 171, 43, - 7, 217, 27, 58, 16, 24, 171, 43, 5, 217, 23, 58, 32, 24, 171, 43, 7, 217, 19, 58, 32, 24, 171, 43, 7, 217, 15, 58, 16, - 24, 171, 43, 7, 217, 11, 58, 16, 24, 171, 43, 7, 217, 7, 74, 57, 24, 171, 43, 6, 217, 0, 224, 180, 7, 235, 212, 0, 231, - 39, 61, 8, 231, 37, 53, 80, 231, 35, 74, 52, 0, 155, 88, 211, 70, 159, 72, 51, 231, 28, 72, 51, 231, 26, 72, 51, 231, - 24, 32, 240, 0, 128, 231, 21, 72, 49, 231, 19, 72, 49, 231, 17, 72, 49, 231, 15, 72, 49, 231, 13, 32, 243, 0, 128, 231, - 10, 72, 48, 231, 8, 72, 48, 231, 6, 72, 48, 231, 4, 32, 235, 0, 128, 231, 1, 32, 238, 0, 128, 230, 254, 72, 45, 230, - 252, 70, 192, 19, 115, 162, 164, 19, 115, 172, 236, 19, 115, 172, 252, 19, 115, 172, 244, 19, 115, 172, 228, 19, 115, - 162, 220, 0, 0, 2, 255, 255, 255, 255, 0, 0, 0, 3, 255, 255, 255, 252, 111, 255, 255, 252, 40, 255, 255, 252, 122, 0, - 0, 3, 69, 0, 0, 3, 185, 255, 255, 254, 199, 255, 255, 254, 51, 0, 0, 144, 14, 255, 255, 254, 136, 0, 0, 4, 255, 255, - 255, 252, 0, 255, 255, 251, 240, 255, 255, 251, 160, 255, 255, 251, 63, 0, 0, 3, 162, 0, 0, 30, 255, 255, 255, 251, - 0, 255, 255, 226, 0, 255, 255, 250, 207, 0, 0, 30, 155, 0, 0, 30, 97, 0, 0, 31, 255, 255, 255, 224, 248, 255, 255, 224, - 167, 19, 115, 174, 176, 0, 0, 3, 181, 0, 0, 3, 193, 0, 0, 3, 186, 0, 0, 3, 198, 0, 0, 3, 178, 0, 0, 3, 143, 0, 0, 3, - 205, 0, 0, 3, 175, 0, 0, 3, 174, 0, 0, 3, 173, 0, 0, 3, 195, 74, 71, 24, 171, 43, 15, 217, 24, 74, 70, 24, 171, 43, - 25, 217, 22, 74, 69, 24, 171, 43, 25, 216, 0, 230, 113, 74, 68, 24, 171, 43, 37, 217, 21, 75, 67, 66, 157, 208, 22, - 75, 66, 66, 157, 208, 17, 75, 66, 66, 157, 208, 0, 230, 135, 37, 229, 230, 133, 53, 16, 230, 131, 53, 26, 230, 129, - 53, 48, 230, 127, 74, 61, 0, 155, 88, 211, 70, 159, 53, 40, 230, 121, 37, 107, 230, 119, 77, 58, 230, 117, 74, 58, 24, - 171, 43, 68, 217, 0, 230, 112, 74, 56, 0, 155, 88, 211, 70, 159, 72, 55, 230, 105, 72, 55, 230, 103, 72, 55, 230, 101, - 28, 43, 59, 126, 43, 0, 209, 0, 230, 97, 28, 29, 230, 95, 72, 52, 230, 92, 28, 43, 59, 112, 231, 245, 28, 43, 59, 100, - 231, 242, 72, 49, 230, 84, 28, 43, 59, 86, 231, 237, 72, 47, 230, 79, 72, 47, 230, 77, 28, 43, 59, 74, 231, 230, 28, - 43, 59, 8, 231, 227, 28, 168, 230, 69, 72, 43, 230, 67, 72, 43, 230, 65, 72, 43, 230, 63, 32, 162, 0, 128, 230, 60, - 72, 42, 230, 58, 32, 160, 0, 128, 230, 55, 72, 40, 230, 53, 72, 40, 230, 51, 72, 40, 230, 49, 32, 154, 0, 128, 230, - 46, 72, 39, 230, 44, 72, 39, 230, 42, 32, 152, 0, 128, 230, 39, 72, 37, 230, 37, 72, 37, 230, 35, 72, 37, 230, 33, 72, - 37, 230, 31, 72, 37, 230, 29, 32, 149, 0, 128, 230, 26, 72, 36, 230, 24, 32, 115, 230, 22, 28, 104, 230, 20, 32, 255, - 230, 18, 70, 192, 255, 255, 222, 160, 255, 255, 219, 74, 255, 255, 0, 223, 255, 254, 252, 0, 0, 0, 33, 38, 0, 0, 33, - 42, 0, 0, 33, 43, 19, 115, 176, 112, 0, 0, 3, 201, 255, 255, 224, 72, 19, 115, 178, 112, 0, 0, 1, 191, 0, 0, 1, 149, - 0, 0, 31, 243, 0, 0, 31, 229, 0, 0, 31, 195, 0, 0, 3, 185, 0, 0, 31, 179, 0, 0, 2, 146, 0, 0, 2, 139, 0, 0, 2, 138, - 0, 0, 2, 131, 0, 0, 2, 117, 0, 0, 2, 114, 0, 0, 2, 111, 0, 0, 2, 105, 0, 0, 2, 99, 0, 0, 2, 91, 0, 0, 2, 89, 0, 0, 1, - 221, 0, 0, 2, 87, 0, 0, 2, 86, 0, 0, 2, 83, 181, 48, 76, 169, 120, 35, 176, 129, 28, 5, 43, 67, 209, 2, 120, 99, 43, - 0, 208, 48, 73, 165, 28, 32, 247, 255, 251, 220, 40, 0, 209, 18, 28, 40, 33, 1, 240, 0, 252, 186, 28, 5, 45, 255, 216, - 54, 45, 181, 208, 104, 28, 43, 59, 224, 43, 30, 216, 88, 61, 32, 176, 1, 28, 40, 188, 48, 188, 2, 71, 8, 73, 154, 28, - 32, 247, 255, 251, 195, 40, 0, 208, 29, 73, 152, 28, 32, 247, 255, 251, 189, 40, 0, 209, 5, 28, 40, 33, 3, 240, 0, 252, - 155, 28, 5, 231, 223, 73, 147, 28, 32, 247, 255, 251, 177, 40, 0, 208, 217, 45, 254, 216, 224, 75, 144, 104, 27, 25, - 91, 120, 91, 28, 40, 7, 154, 213, 0, 56, 32, 28, 5, 231, 214, 28, 40, 33, 2, 240, 0, 252, 131, 28, 5, 45, 255, 217, - 200, 75, 136, 66, 157, 216, 51, 74, 136, 24, 171, 43, 46, 217, 40, 58, 50, 24, 171, 43, 4, 217, 36, 58, 24, 24, 171, - 43, 44, 217, 32, 58, 148, 24, 171, 43, 16, 217, 28, 58, 26, 24, 171, 43, 38, 217, 24, 58, 42, 24, 171, 43, 16, 217, - 20, 74, 125, 24, 171, 43, 14, 217, 4, 58, 148, 24, 171, 43, 14, 217, 0, 225, 65, 7, 235, 212, 169, 61, 1, 231, 167, - 51, 127, 43, 25, 217, 163, 45, 255, 209, 162, 37, 188, 0, 109, 231, 159, 7, 235, 213, 157, 61, 1, 231, 155, 37, 231, - 0, 173, 231, 152, 75, 112, 66, 157, 216, 72, 33, 235, 0, 137, 66, 141, 208, 27, 75, 109, 28, 42, 64, 26, 35, 232, 0, - 155, 66, 154, 208, 125, 74, 107, 24, 171, 43, 26, 216, 3, 75, 106, 66, 157, 208, 0, 231, 129, 75, 104, 66, 157, 209, - 0, 224, 175, 74, 103, 24, 171, 43, 41, 217, 0, 231, 121, 74, 101, 0, 155, 88, 211, 70, 159, 77, 100, 231, 115, 72, 100, - 28, 5, 231, 112, 72, 100, 28, 5, 231, 109, 72, 99, 28, 5, 231, 106, 72, 99, 28, 5, 231, 103, 30, 107, 43, 0, 209, 0, - 231, 99, 28, 29, 231, 97, 32, 232, 0, 128, 28, 5, 231, 93, 72, 93, 28, 5, 231, 90, 32, 230, 0, 128, 28, 5, 231, 86, - 72, 91, 28, 5, 231, 83, 28, 43, 59, 63, 231, 233, 32, 227, 0, 128, 28, 5, 231, 76, 75, 87, 66, 157, 216, 31, 74, 86, - 24, 171, 43, 15, 217, 116, 74, 85, 24, 171, 43, 31, 216, 0, 231, 63, 74, 84, 24, 171, 43, 32, 217, 156, 58, 42, 24, - 171, 43, 52, 217, 152, 58, 70, 24, 171, 43, 36, 217, 148, 74, 79, 24, 171, 43, 12, 217, 132, 75, 78, 66, 157, 208, 0, - 231, 44, 37, 159, 0, 237, 231, 41, 75, 75, 66, 157, 216, 30, 74, 75, 24, 171, 43, 14, 217, 130, 74, 74, 24, 171, 43, - 148, 216, 0, 231, 125, 58, 160, 24, 171, 43, 88, 216, 0, 231, 120, 74, 70, 24, 171, 43, 37, 216, 0, 224, 201, 75, 68, - 66, 157, 208, 0, 231, 15, 37, 243, 1, 109, 231, 12, 66, 141, 216, 0, 231, 126, 61, 21, 231, 7, 75, 63, 66, 157, 217, - 0, 224, 133, 74, 62, 24, 171, 43, 7, 217, 50, 58, 16, 24, 171, 43, 5, 217, 46, 58, 16, 24, 171, 43, 7, 217, 42, 58, - 16, 24, 171, 43, 7, 217, 38, 58, 16, 24, 171, 43, 5, 217, 34, 58, 32, 24, 171, 43, 7, 217, 30, 58, 32, 24, 171, 43, - 7, 217, 26, 58, 16, 24, 171, 43, 7, 217, 22, 58, 16, 24, 171, 43, 7, 217, 18, 74, 45, 24, 171, 43, 6, 216, 1, 7, 235, - 212, 12, 74, 43, 24, 171, 43, 131, 217, 0, 230, 212, 74, 42, 0, 155, 88, 211, 70, 159, 61, 80, 230, 206, 77, 19, 230, - 204, 53, 8, 230, 202, 70, 192, 19, 115, 162, 164, 19, 115, 172, 236, 19, 115, 172, 252, 19, 115, 172, 244, 19, 115, - 172, 228, 19, 115, 162, 220, 0, 0, 2, 255, 255, 255, 254, 255, 255, 255, 254, 198, 0, 0, 3, 255, 0, 0, 255, 240, 255, - 255, 252, 79, 0, 0, 3, 194, 255, 255, 252, 52, 19, 115, 179, 132, 0, 0, 3, 134, 0, 0, 3, 149, 0, 0, 3, 163, 0, 0, 3, - 161, 0, 0, 3, 154, 0, 0, 3, 166, 0, 0, 3, 146, 0, 0, 4, 255, 255, 255, 251, 176, 255, 255, 251, 208, 255, 255, 251, - 159, 255, 255, 251, 62, 0, 0, 4, 249, 0, 0, 30, 255, 255, 255, 250, 255, 255, 255, 225, 255, 255, 255, 250, 159, 0, - 0, 30, 155, 0, 0, 31, 255, 255, 255, 225, 0, 255, 255, 224, 175, 255, 255, 224, 144, 19, 115, 180, 44, 74, 118, 24, - 171, 43, 15, 217, 43, 74, 117, 24, 171, 43, 25, 217, 41, 74, 116, 24, 171, 43, 25, 216, 0, 230, 111, 74, 115, 24, 171, - 43, 37, 217, 0, 230, 107, 61, 40, 230, 105, 75, 112, 66, 157, 208, 30, 35, 189, 0, 91, 66, 157, 209, 0, 230, 183, 35, - 190, 0, 91, 66, 157, 209, 0, 230, 178, 35, 191, 0, 91, 66, 157, 209, 0, 230, 173, 75, 104, 24, 234, 75, 104, 66, 154, - 217, 0, 230, 81, 0, 147, 74, 103, 88, 211, 70, 159, 61, 16, 230, 75, 61, 26, 230, 73, 61, 48, 230, 71, 37, 73, 230, - 69, 32, 217, 0, 64, 28, 5, 230, 65, 72, 96, 28, 5, 230, 62, 32, 215, 0, 64, 28, 5, 230, 58, 72, 94, 28, 5, 230, 55, - 32, 211, 0, 64, 28, 5, 230, 51, 72, 91, 28, 5, 230, 48, 72, 91, 28, 5, 230, 45, 32, 206, 0, 64, 28, 5, 230, 41, 32, - 203, 0, 64, 28, 5, 230, 37, 72, 86, 28, 5, 230, 34, 32, 202, 0, 64, 28, 5, 230, 30, 72, 84, 28, 5, 230, 27, 32, 200, - 0, 64, 28, 5, 230, 23, 72, 81, 28, 5, 230, 20, 32, 197, 0, 64, 28, 5, 230, 16, 72, 79, 28, 5, 230, 13, 32, 195, 0, 64, - 28, 5, 230, 9, 72, 76, 28, 5, 230, 6, 72, 76, 28, 5, 230, 3, 32, 199, 0, 64, 28, 5, 229, 255, 30, 171, 230, 150, 72, - 72, 28, 5, 229, 250, 32, 136, 0, 128, 28, 5, 229, 246, 32, 204, 0, 64, 28, 5, 229, 242, 72, 68, 28, 5, 229, 239, 32, - 83, 28, 5, 229, 236, 32, 194, 0, 64, 28, 5, 229, 232, 32, 193, 0, 64, 28, 5, 229, 228, 32, 251, 0, 64, 28, 5, 229, 224, - 72, 60, 28, 5, 229, 221, 72, 59, 28, 5, 229, 218, 72, 59, 28, 5, 229, 215, 72, 58, 28, 5, 229, 212, 72, 58, 28, 5, 229, - 209, 72, 57, 28, 5, 229, 206, 72, 57, 28, 5, 229, 203, 72, 56, 28, 5, 229, 200, 72, 56, 28, 5, 229, 197, 72, 55, 28, - 5, 229, 194, 72, 55, 28, 5, 229, 191, 72, 54, 28, 5, 229, 188, 72, 54, 28, 5, 229, 185, 72, 53, 28, 5, 229, 182, 72, - 53, 28, 5, 229, 179, 72, 52, 28, 5, 229, 176, 72, 52, 28, 5, 229, 173, 72, 51, 28, 5, 229, 170, 72, 51, 28, 5, 229, - 167, 72, 50, 28, 5, 229, 164, 72, 50, 28, 5, 229, 161, 72, 49, 28, 5, 229, 158, 72, 49, 28, 5, 229, 155, 72, 48, 28, - 5, 229, 152, 72, 48, 28, 5, 229, 149, 72, 47, 28, 5, 229, 146, 72, 47, 28, 5, 229, 143, 255, 255, 222, 144, 255, 255, - 219, 48, 255, 255, 0, 191, 255, 254, 251, 216, 0, 0, 1, 49, 255, 255, 254, 129, 0, 0, 1, 19, 19, 115, 182, 60, 0, 0, - 1, 177, 0, 0, 1, 169, 0, 0, 1, 159, 0, 0, 1, 157, 0, 0, 1, 151, 0, 0, 1, 147, 0, 0, 1, 143, 0, 0, 1, 137, 0, 0, 1, 129, - 0, 0, 1, 241, 0, 0, 1, 247, 0, 0, 1, 183, 0, 0, 1, 145, 0, 0, 1, 139, 0, 0, 1, 135, 0, 0, 31, 252, 0, 0, 31, 236, 0, - 0, 31, 233, 0, 0, 31, 232, 0, 0, 31, 217, 0, 0, 31, 216, 0, 0, 3, 153, 0, 0, 31, 188, 0, 0, 31, 185, 0, 0, 31, 184, - 0, 0, 31, 251, 0, 0, 31, 250, 0, 0, 31, 235, 0, 0, 31, 234, 0, 0, 31, 249, 0, 0, 31, 248, 0, 0, 31, 219, 0, 0, 31, 218, - 0, 0, 31, 203, 0, 0, 31, 202, 0, 0, 31, 201, 0, 0, 31, 200, 0, 0, 31, 187, 0, 0, 31, 186, 71, 112, 70, 192, 71, 112, - 70, 192, 181, 48, 176, 133, 28, 5, 28, 28, 43, 0, 208, 23, 41, 0, 208, 13, 28, 40, 28, 35, 240, 0, 248, 72, 28, 67, - 209, 3, 35, 0, 96, 35, 35, 138, 96, 43, 176, 5, 188, 48, 188, 2, 71, 8, 70, 105, 28, 40, 49, 6, 34, 0, 28, 35, 240, - 0, 248, 55, 231, 237, 35, 138, 0, 91, 24, 196, 231, 227, 181, 48, 28, 19, 74, 6, 28, 13, 28, 4, 176, 129, 104, 16, 28, - 33, 28, 42, 247, 255, 255, 211, 176, 1, 188, 48, 188, 2, 71, 8, 70, 192, 19, 115, 163, 32, 181, 112, 176, 132, 172, - 1, 28, 5, 33, 0, 34, 8, 28, 32, 247, 254, 250, 249, 70, 110, 75, 9, 54, 15, 104, 24, 28, 42, 28, 49, 28, 35, 240, 0, - 248, 14, 53, 1, 208, 1, 40, 1, 208, 5, 32, 1, 66, 64, 176, 4, 188, 112, 188, 2, 71, 8, 120, 48, 231, 249, 19, 115, 163, - 32, 181, 240, 76, 160, 176, 129, 28, 32, 28, 14, 28, 21, 28, 31, 247, 255, 248, 239, 40, 1, 217, 29, 73, 156, 28, 32, - 247, 255, 248, 151, 40, 0, 209, 31, 46, 0, 208, 66, 45, 127, 217, 61, 28, 42, 75, 151, 58, 128, 66, 154, 216, 61, 5, - 106, 35, 64, 66, 91, 14, 210, 67, 26, 112, 50, 35, 63, 28, 42, 64, 26, 35, 128, 66, 91, 67, 26, 112, 114, 32, 2, 224, - 3, 46, 0, 208, 42, 112, 53, 32, 1, 176, 1, 188, 240, 188, 2, 71, 8, 73, 139, 28, 32, 247, 255, 248, 113, 40, 0, 209, - 99, 46, 0, 208, 28, 4, 43, 14, 25, 41, 0, 208, 237, 28, 11, 51, 127, 6, 27, 14, 27, 43, 30, 217, 0, 224, 166, 72, 130, - 6, 43, 14, 26, 24, 27, 14, 27, 43, 62, 217, 3, 35, 128, 64, 83, 43, 124, 216, 95, 112, 49, 112, 114, 32, 2, 231, 217, - 112, 53, 32, 1, 231, 214, 32, 0, 231, 212, 72, 121, 75, 122, 24, 42, 66, 154, 217, 118, 72, 121, 75, 121, 24, 42, 66, - 154, 216, 22, 2, 234, 35, 16, 66, 91, 15, 82, 67, 26, 112, 50, 3, 171, 34, 128, 66, 82, 14, 155, 67, 19, 112, 115, 5, - 43, 14, 155, 28, 113, 67, 19, 112, 75, 35, 63, 64, 43, 67, 19, 112, 139, 32, 4, 231, 179, 75, 109, 24, 234, 75, 109, - 66, 154, 217, 0, 224, 143, 1, 170, 35, 8, 66, 91, 15, 146, 67, 26, 112, 50, 2, 43, 34, 128, 66, 82, 14, 155, 67, 19, - 112, 115, 3, 171, 14, 155, 28, 113, 67, 19, 112, 75, 5, 43, 14, 155, 28, 72, 67, 19, 112, 67, 35, 63, 64, 43, 67, 19, - 112, 131, 32, 5, 231, 145, 73, 94, 28, 32, 247, 255, 248, 7, 40, 0, 209, 16, 46, 0, 208, 178, 4, 43, 14, 25, 41, 0, - 209, 0, 231, 130, 28, 11, 51, 95, 6, 27, 14, 27, 43, 93, 216, 0, 224, 133, 32, 1, 66, 64, 231, 122, 73, 83, 28, 32, - 247, 254, 255, 240, 40, 0, 208, 0, 231, 111, 46, 0, 209, 0, 231, 111, 6, 43, 14, 28, 4, 43, 14, 25, 41, 0, 209, 47, - 104, 59, 43, 0, 208, 11, 35, 27, 96, 57, 28, 114, 112, 51, 35, 40, 112, 115, 35, 66, 28, 150, 112, 83, 32, 4, 112, 52, - 231, 91, 32, 1, 112, 52, 231, 88, 75, 67, 24, 234, 75, 67, 66, 154, 217, 213, 4, 42, 35, 32, 66, 91, 15, 18, 67, 26, - 112, 50, 5, 43, 34, 128, 66, 82, 14, 155, 67, 19, 112, 115, 35, 63, 64, 43, 67, 19, 112, 179, 32, 3, 231, 65, 28, 11, - 51, 32, 6, 27, 14, 27, 43, 15, 216, 189, 231, 81, 28, 11, 59, 33, 6, 27, 14, 27, 43, 93, 216, 182, 28, 35, 59, 33, 6, - 27, 14, 27, 43, 93, 216, 176, 104, 59, 43, 0, 209, 61, 35, 1, 96, 59, 35, 27, 112, 51, 35, 36, 112, 115, 28, 114, 35, - 66, 112, 83, 28, 150, 32, 5, 112, 49, 112, 116, 231, 29, 72, 40, 75, 40, 24, 42, 66, 154, 216, 154, 0, 106, 35, 4, 66, - 91, 15, 210, 67, 26, 112, 50, 0, 171, 34, 128, 66, 82, 14, 155, 67, 19, 112, 115, 2, 43, 14, 155, 28, 113, 67, 19, 112, - 75, 3, 171, 14, 155, 28, 72, 67, 19, 112, 67, 5, 43, 14, 155, 28, 65, 67, 19, 112, 75, 35, 63, 64, 43, 67, 19, 112, - 139, 32, 6, 230, 247, 32, 190, 6, 43, 5, 192, 14, 26, 24, 27, 14, 27, 43, 93, 216, 0, 231, 16, 231, 111, 32, 2, 231, - 202, 70, 192, 19, 115, 162, 164, 19, 115, 172, 228, 0, 0, 7, 127, 19, 115, 172, 252, 192, 0, 0, 0, 255, 255, 248, 0, - 0, 0, 247, 255, 255, 255, 0, 0, 0, 30, 255, 255, 255, 224, 0, 0, 3, 223, 255, 255, 19, 115, 172, 244, 19, 115, 172, - 236, 255, 255, 40, 0, 0, 0, 7, 255, 252, 0, 0, 0, 123, 255, 255, 255, 181, 240, 28, 12, 176, 129, 28, 6, 28, 8, 28, - 17, 28, 21, 247, 253, 252, 37, 28, 41, 28, 7, 28, 32, 247, 253, 252, 106, 44, 0, 219, 8, 41, 0, 219, 11, 176, 1, 96, - 55, 28, 48, 96, 113, 188, 240, 188, 2, 71, 8, 41, 0, 221, 246, 63, 1, 25, 73, 231, 243, 55, 1, 27, 73, 231, 240, 70, - 192, 72, 0, 71, 112, 19, 115, 162, 224, 181, 16, 41, 2, 208, 69, 41, 3, 208, 62, 41, 1, 208, 4, 32, 1, 66, 64, 188, - 16, 188, 2, 71, 8, 10, 3, 59, 128, 6, 27, 14, 25, 28, 3, 59, 128, 6, 27, 14, 28, 28, 11, 51, 80, 6, 27, 14, 27, 43, - 31, 216, 2, 75, 65, 66, 152, 217, 18, 28, 11, 51, 48, 6, 27, 14, 27, 43, 36, 216, 22, 75, 62, 66, 152, 216, 19, 1, 203, - 26, 91, 0, 91, 73, 60, 25, 27, 74, 60, 24, 91, 0, 91, 90, 208, 231, 216, 1, 203, 26, 91, 0, 91, 73, 57, 25, 27, 74, - 57, 24, 91, 0, 91, 90, 208, 231, 206, 28, 11, 51, 95, 6, 27, 14, 27, 43, 7, 216, 198, 74, 52, 0, 155, 88, 211, 70, 159, - 4, 3, 14, 25, 6, 3, 14, 28, 231, 202, 4, 3, 14, 26, 6, 3, 14, 27, 43, 158, 217, 13, 51, 35, 6, 27, 14, 28, 33, 128, - 42, 159, 216, 13, 28, 19, 59, 112, 6, 91, 14, 27, 24, 203, 6, 27, 14, 25, 231, 182, 59, 126, 6, 27, 14, 28, 33, 127, - 42, 159, 217, 241, 28, 19, 51, 80, 231, 240, 44, 192, 216, 158, 28, 35, 74, 33, 59, 161, 0, 91, 90, 208, 231, 154, 44, - 241, 217, 0, 231, 149, 74, 30, 28, 35, 59, 161, 0, 91, 90, 208, 40, 0, 208, 0, 231, 143, 231, 140, 44, 216, 217, 0, - 231, 137, 74, 25, 231, 242, 44, 246, 217, 0, 231, 132, 35, 192, 1, 155, 24, 224, 231, 130, 44, 243, 217, 0, 231, 125, - 73, 20, 24, 96, 231, 124, 75, 19, 25, 27, 59, 161, 120, 27, 43, 0, 209, 0, 231, 115, 75, 17, 24, 224, 231, 114, 74, - 16, 231, 217, 28, 35, 74, 16, 59, 161, 0, 91, 90, 208, 231, 106, 0, 0, 207, 211, 0, 0, 244, 166, 255, 255, 48, 255, - 19, 115, 210, 218, 255, 255, 80, 191, 19, 115, 187, 176, 19, 115, 187, 144, 19, 115, 240, 60, 19, 115, 239, 154, 19, - 115, 239, 42, 0, 0, 47, 160, 19, 115, 238, 206, 0, 0, 254, 96, 19, 115, 238, 18, 19, 115, 237, 86, 73, 79, 83, 32, 109, - 111, 100, 117, 108, 101, 0, 0, 255, 255, 255, 255, 0, 0, 0, 1, 255, 255, 255, 255, 255, 255, 255, 255, 32, 0, 33, 156, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 71, 120, 70, 192, 229, 31, 240, 4, 0, 0, 0, 0, 19, 115, 101, 160, 19, 115, 101, - 176, 19, 115, 101, 208, 19, 115, 101, 240, 19, 115, 102, 16, 19, 115, 102, 48, 19, 115, 102, 80, 19, 115, 102, 112, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 100, 58, 47, 110, 97, 110, 100, 47, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 100, 101, 118, 47, - 115, 100, 105, 111, 47, 115, 108, 111, 116, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 100, 101, 118, - 47, 117, 115, 98, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 67, 45, 85, 84, - 70, 45, 56, 0, 0, 0, 0, 0, 19, 115, 173, 32, 67, 45, 85, 84, 70, 45, 56, 0, 0, 0, 0, 0, 67, 45, 85, 84, 70, 45, 56, - 0, 0, 0, 0, 0, 67, 45, 85, 84, 70, 45, 56, 0, 0, 0, 0, 0, 19, 115, 186, 141, 19, 115, 186, 140, 0, 0, 0, 1, 0, 0, 0, - 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 115, 163, 40, 0, 0, 0, 0, 0, 0, 0, 0, 19, 115, 166, 20, - 19, 115, 166, 124, 19, 115, 166, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 115, 172, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 51, 14, 171, 205, 18, 52, 230, 109, 222, 236, 0, 5, 0, 11, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 47, 116, 105, 116, 108, 101, 47, 48, 48, 48, 49, 48, 48, 48, - 48, 0, 47, 116, 105, 116, 108, 101, 47, 48, 48, 48, 49, 48, 48, 48, 49, 0, 47, 116, 105, 116, 108, 101, 47, 48, 48, - 48, 49, 48, 48, 48, 52, 0, 47, 116, 109, 112, 47, 108, 97, 117, 110, 99, 104, 46, 115, 121, 115, 0, 47, 116, 109, 112, - 0, 47, 116, 105, 99, 107, 101, 116, 47, 48, 48, 48, 49, 48, 48, 48, 48, 0, 47, 116, 105, 99, 107, 101, 116, 47, 48, - 48, 48, 49, 48, 48, 48, 49, 0, 47, 116, 105, 99, 107, 101, 116, 47, 48, 48, 48, 49, 48, 48, 48, 52, 0, 47, 115, 121, - 115, 47, 100, 105, 115, 99, 46, 115, 121, 115, 0, 47, 115, 121, 115, 47, 117, 105, 100, 46, 115, 121, 115, 0, 102, 97, - 116, 0, 47, 116, 105, 99, 107, 101, 116, 0, 47, 115, 121, 115, 0, 47, 116, 105, 116, 108, 101, 0, 115, 100, 58, 47, - 102, 102, 115, 95, 108, 111, 103, 46, 116, 120, 116, 0, 109, 115, 103, 32, 105, 111, 99, 108, 116, 118, 32, 48, 120, - 37, 120, 32, 48, 120, 37, 120, 10, 0, 82, 101, 97, 100, 32, 100, 105, 114, 32, 49, 32, 37, 105, 32, 37, 105, 32, 37, - 115, 10, 0, 82, 101, 97, 100, 32, 100, 105, 114, 32, 50, 32, 37, 105, 32, 37, 115, 32, 114, 101, 116, 58, 32, 37, 105, - 32, 10, 0, 71, 101, 116, 85, 115, 97, 103, 101, 32, 37, 105, 32, 37, 105, 32, 37, 115, 10, 0, 85, 110, 115, 117, 112, - 112, 111, 114, 116, 101, 100, 32, 105, 111, 99, 108, 116, 118, 32, 99, 111, 109, 109, 97, 110, 100, 32, 48, 120, 37, - 120, 10, 0, 109, 115, 103, 32, 105, 111, 99, 108, 116, 32, 48, 120, 37, 120, 32, 48, 120, 37, 120, 10, 0, 67, 114, 101, - 97, 116, 101, 32, 100, 105, 114, 32, 37, 115, 32, 114, 101, 116, 32, 37, 105, 10, 0, 84, 114, 121, 105, 110, 103, 32, - 67, 114, 101, 97, 116, 101, 32, 102, 105, 108, 101, 32, 37, 115, 32, 10, 0, 67, 114, 101, 97, 116, 101, 32, 102, 105, - 108, 101, 32, 37, 115, 32, 114, 101, 116, 32, 37, 105, 10, 0, 68, 101, 108, 101, 116, 105, 110, 103, 32, 102, 105, 108, - 101, 32, 37, 115, 32, 114, 101, 116, 32, 37, 105, 10, 0, 82, 101, 110, 97, 109, 105, 110, 103, 32, 102, 105, 108, 101, - 32, 37, 115, 32, 37, 115, 32, 114, 101, 116, 32, 37, 105, 10, 0, 86, 70, 83, 83, 116, 97, 116, 115, 32, 37, 115, 32, - 114, 101, 116, 32, 37, 105, 10, 0, 70, 70, 83, 32, 71, 69, 84, 70, 73, 76, 69, 83, 84, 65, 84, 83, 32, 10, 0, 71, 69, - 84, 65, 84, 84, 82, 49, 32, 37, 115, 10, 0, 71, 69, 84, 65, 84, 84, 82, 50, 32, 37, 115, 32, 114, 101, 116, 32, 37, - 105, 10, 0, 47, 116, 105, 116, 108, 101, 47, 48, 48, 48, 49, 48, 48, 48, 35, 47, 35, 35, 35, 35, 35, 35, 35, 35, 47, - 100, 97, 116, 97, 47, 110, 111, 99, 111, 112, 121, 0, 83, 101, 116, 32, 65, 84, 84, 82, 32, 32, 37, 115, 32, 114, 101, - 116, 32, 37, 105, 10, 0, 85, 110, 115, 117, 112, 112, 111, 114, 116, 101, 100, 32, 105, 111, 99, 108, 116, 32, 99, 111, - 109, 109, 97, 110, 100, 32, 48, 120, 37, 120, 10, 0, 102, 102, 115, 32, 111, 112, 101, 110, 32, 37, 115, 10, 0, 69, - 83, 32, 105, 111, 99, 116, 108, 118, 58, 32, 48, 120, 37, 120, 10, 0, 76, 97, 117, 110, 99, 104, 32, 84, 105, 116, 108, - 101, 58, 32, 48, 120, 37, 120, 45, 48, 120, 37, 120, 10, 0, 102, 97, 116, 58, 115, 104, 117, 116, 100, 111, 119, 110, - 0, 70, 70, 83, 32, 83, 104, 117, 116, 100, 111, 119, 110, 10, 0, 0, 0, 19, 115, 20, 52, 19, 115, 18, 80, 19, 115, 16, - 174, 19, 115, 20, 60, 19, 115, 19, 226, 19, 115, 19, 52, 19, 115, 17, 78, 19, 115, 17, 148, 19, 115, 16, 246, 19, 115, - 20, 60, 19, 115, 18, 214, 115, 100, 58, 0, 117, 115, 98, 58, 0, 115, 100, 0, 117, 115, 98, 0, 102, 97, 116, 47, 100, - 101, 118, 47, 115, 100, 105, 111, 0, 102, 97, 116, 58, 111, 102, 102, 0, 102, 97, 116, 58, 111, 110, 0, 115, 100, 58, - 47, 110, 97, 110, 100, 0, 117, 115, 98, 58, 47, 110, 97, 110, 100, 0, 70, 65, 84, 32, 111, 112, 101, 110, 32, 114, 101, - 116, 32, 37, 105, 32, 37, 115, 10, 0, 69, 114, 114, 32, 70, 65, 84, 32, 82, 101, 97, 100, 32, 114, 101, 116, 32, 37, - 105, 32, 108, 101, 110, 32, 105, 32, 10, 0, 69, 114, 114, 32, 70, 65, 84, 32, 83, 101, 101, 107, 32, 114, 101, 116, - 32, 37, 105, 32, 37, 117, 32, 37, 117, 32, 10, 0, 101, 104, 33, 32, 121, 111, 117, 32, 99, 97, 110, 110, 111, 116, 32, - 99, 97, 108, 108, 32, 105, 111, 99, 116, 108, 118, 32, 48, 120, 32, 102, 114, 111, 109, 32, 104, 101, 114, 101, 33, - 10, 0, 70, 65, 84, 32, 71, 101, 116, 70, 105, 108, 101, 83, 116, 97, 116, 115, 32, 114, 101, 116, 32, 37, 105, 32, 37, - 117, 32, 37, 117, 32, 10, 0, 101, 104, 33, 32, 121, 111, 117, 32, 99, 97, 110, 110, 111, 116, 32, 99, 97, 108, 108, - 32, 105, 111, 99, 116, 108, 32, 48, 120, 32, 102, 114, 111, 109, 32, 104, 101, 114, 101, 33, 10, 0, 0, 0, 19, 115, 26, - 58, 19, 115, 27, 126, 19, 115, 27, 184, 19, 115, 28, 130, 19, 115, 29, 138, 19, 115, 30, 80, 19, 115, 29, 242, 115, - 100, 58, 47, 110, 97, 110, 100, 0, 0, 0, 0, 117, 115, 98, 58, 47, 110, 97, 110, 100, 0, 0, 0, 115, 100, 58, 47, 110, - 97, 110, 100, 50, 0, 0, 0, 117, 115, 98, 58, 47, 110, 97, 110, 100, 50, 0, 0, 115, 100, 58, 47, 110, 97, 110, 100, 51, - 0, 0, 0, 117, 115, 98, 58, 47, 110, 97, 110, 100, 51, 0, 0, 115, 100, 58, 47, 110, 97, 110, 100, 52, 0, 0, 0, 117, 115, - 98, 58, 47, 110, 97, 110, 100, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 97, 116, 47, 100, 101, 118, 47, 115, - 100, 105, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 100, 58, 47, 108, 111, 103, 46, 116, - 120, 116, 0, 87, 73, 83, 68, 0, 0, 1, 3, 19, 115, 42, 17, 19, 115, 38, 93, 19, 115, 41, 65, 19, 115, 40, 177, 19, 115, - 38, 33, 19, 115, 41, 161, 87, 85, 83, 66, 0, 0, 2, 3, 19, 115, 47, 217, 19, 115, 47, 193, 19, 115, 49, 61, 19, 115, - 49, 9, 19, 115, 47, 45, 19, 115, 47, 49, 46, 46, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 7, 0, 0, 0, 9, 0, - 0, 0, 14, 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 20, 0, 0, 0, 22, 0, 0, 0, 24, 0, 0, 0, 28, 0, 0, 0, 30, 92, 47, 58, 59, - 42, 63, 34, 60, 62, 124, 38, 43, 44, 61, 91, 93, 32, 0, 92, 47, 58, 42, 63, 34, 60, 62, 124, 0, 19, 115, 167, 229, 0, - 0, 0, 92, 19, 115, 90, 13, 19, 115, 89, 173, 19, 115, 82, 53, 19, 115, 85, 221, 19, 115, 80, 193, 19, 115, 81, 205, - 19, 115, 71, 129, 19, 115, 70, 225, 19, 115, 76, 61, 19, 115, 75, 229, 19, 115, 74, 189, 19, 115, 72, 221, 0, 0, 1, - 72, 19, 115, 71, 241, 19, 115, 71, 85, 19, 115, 70, 249, 19, 115, 70, 237, 19, 115, 72, 125, 19, 115, 79, 161, 19, 115, - 89, 129, 0, 0, 0, 0, 70, 65, 84, 0, 67, 0, 0, 0, 67, 45, 85, 84, 70, 45, 56, 0, 67, 45, 74, 73, 83, 0, 0, 0, 67, 45, - 69, 85, 67, 74, 80, 0, 67, 45, 83, 74, 73, 83, 0, 0, 67, 45, 73, 83, 79, 45, 56, 56, 53, 57, 45, 49, 0, 0, 0, 0, 73, - 83, 79, 45, 56, 56, 53, 57, 45, 49, 0, 0, 85, 84, 70, 45, 56, 0, 0, 0, 74, 73, 83, 0, 69, 85, 67, 74, 80, 0, 0, 0, 83, - 74, 73, 83, 0, 0, 0, 0, 46, 0, 0, 0, 19, 115, 111, 32, 19, 115, 110, 238, 19, 115, 111, 12, 19, 115, 111, 6, 19, 115, - 110, 242, 19, 115, 111, 80, 4, 0, 0, 0, 0, 0, 5, 0, 0, 4, 1, 1, 1, 1, 1, 6, 1, 6, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 4, 0, 0, 0, 0, 6, 2, 2, 2, 2, 2, 6, 2, 6, 6, 6, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 6, 6, 6, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 4, 4, 4, 4, 7, 4, 7, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 7, 1, 1, 1, 1, 1, 7, 1, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 31, 0, 0, 0, 59, 0, 0, 0, 90, 0, 0, 0, 120, 0, 0, 0, 151, 0, 0, 0, 181, 0, 0, 0, 212, 0, 0, 0, 243, 0, 0, - 1, 17, 0, 0, 1, 48, 0, 0, 1, 78, 0, 0, 0, 31, 0, 0, 0, 28, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, - 0, 31, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 31, 0, 0, 0, 28, 0, 0, 0, 31, 0, 0, - 0, 30, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, - 0, 31, 0, 0, 0, 29, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 31, 0, 0, 0, 30, 0, 0, - 0, 31, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 1, 109, 0, 0, 1, 110, 19, 115, 133, 70, 19, 115, 131, 174, 19, 115, 133, 66, - 19, 115, 133, 62, 19, 115, 133, 58, 19, 115, 131, 174, 19, 115, 133, 52, 19, 115, 131, 174, 19, 115, 133, 48, 19, 115, - 133, 44, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, - 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, - 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, - 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, - 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, - 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, - 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, - 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, - 131, 174, 19, 115, 133, 82, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, - 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, - 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 133, 40, 19, 115, 133, 76, 19, 115, 131, 174, 19, 115, 131, 174, 19, - 115, 131, 174, 19, 115, 133, 36, 19, 115, 133, 30, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, - 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, - 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, - 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, - 115, 131, 174, 19, 115, 131, 174, 19, 115, 131, 174, 19, 115, 133, 26, 19, 115, 133, 22, 19, 115, 133, 82, 19, 115, - 131, 174, 19, 115, 133, 76, 19, 115, 133, 18, 19, 115, 135, 38, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 34, - 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 30, 19, 115, 132, 4, 19, 115, 135, 26, 19, 115, 135, - 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 20, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, - 135, 16, 19, 115, 135, 12, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 135, 8, 19, 115, 135, 4, 19, - 115, 135, 0, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 134, 250, 19, 115, 134, 246, 19, 115, 132, 4, 19, 115, 134, - 242, 19, 115, 134, 236, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 134, 232, 19, - 115, 134, 228, 19, 115, 132, 4, 19, 115, 134, 224, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, - 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 134, 218, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 134, 214, 19, 115, - 132, 4, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 134, 208, 19, 115, 135, 34, 19, 115, 132, 4, 19, - 115, 134, 204, 19, 115, 134, 200, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 134, - 196, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, - 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 134, 192, 19, - 115, 135, 34, 19, 115, 132, 4, 19, 115, 134, 192, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 134, 192, 19, 115, 135, - 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, - 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, - 115, 135, 34, 19, 115, 132, 4, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, - 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, - 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, - 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 132, 4, 19, 115, 134, 192, 19, 115, 135, 34, 19, 115, 132, 4, 19, 115, - 135, 34, 19, 115, 132, 4, 19, 115, 134, 124, 19, 115, 134, 120, 19, 115, 134, 186, 19, 115, 134, 186, 19, 115, 134, - 180, 19, 115, 134, 180, 19, 115, 134, 176, 19, 115, 131, 82, 19, 115, 134, 172, 19, 115, 131, 82, 19, 115, 131, 82, - 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, - 131, 82, 19, 115, 134, 166, 19, 115, 134, 166, 19, 115, 134, 166, 19, 115, 134, 166, 19, 115, 134, 162, 19, 115, 131, - 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, - 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 134, 186, 19, 115, 134, 186, 19, 115, 134, - 156, 19, 115, 134, 156, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, - 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, - 82, 19, 115, 134, 186, 19, 115, 134, 186, 19, 115, 134, 150, 19, 115, 134, 150, 19, 115, 134, 146, 19, 115, 131, 82, - 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, - 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 131, 82, 19, 115, 134, 132, - 19, 115, 134, 132, 19, 115, 134, 128, 19, 115, 137, 74, 19, 115, 137, 68, 19, 115, 137, 68, 19, 115, 135, 236, 19, 115, - 137, 62, 19, 115, 137, 54, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 48, 19, 115, 137, - 40, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, - 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, - 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, - 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, - 115, 137, 22, 19, 115, 137, 16, 19, 115, 137, 10, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 4, 19, 115, 140, - 198, 19, 115, 140, 192, 19, 115, 140, 186, 19, 115, 140, 180, 19, 115, 140, 174, 19, 115, 140, 168, 19, 115, 140, 162, - 19, 115, 140, 156, 19, 115, 140, 150, 19, 115, 140, 144, 19, 115, 140, 138, 19, 115, 140, 132, 19, 115, 140, 126, 19, - 115, 140, 120, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, - 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, - 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, - 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, - 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, - 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, - 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, - 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, - 115, 135, 236, 19, 115, 140, 114, 19, 115, 140, 108, 19, 115, 135, 236, 19, 115, 140, 102, 19, 115, 135, 236, 19, 115, - 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, - 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 140, 96, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, - 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, - 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, - 135, 236, 19, 115, 135, 236, 19, 115, 140, 90, 19, 115, 140, 84, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, - 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, - 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 140, 78, 19, - 115, 140, 72, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 140, 66, 19, 115, 135, 236, 19, 115, - 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, - 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 140, 60, - 19, 115, 140, 12, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 140, 26, 19, 115, 135, 236, 19, - 115, 140, 18, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 140, 54, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, - 135, 236, 19, 115, 140, 48, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, - 236, 19, 115, 140, 42, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 140, 34, 19, 115, 135, 236, 19, 115, 135, 236, - 19, 115, 135, 236, 19, 115, 139, 254, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, - 115, 139, 246, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, - 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 135, - 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 28, - 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 137, 28, 19, - 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, - 137, 28, 19, 115, 135, 236, 19, 115, 139, 240, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, - 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 139, 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 139, 236, - 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 139, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, - 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, - 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, - 236, 19, 115, 139, 228, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, - 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, - 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, - 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 137, 28, 19, 115, 139, 222, 19, 115, 135, 236, 19, 115, 137, - 28, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, - 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, - 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, - 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, - 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, - 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, - 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, - 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, - 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, - 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, - 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, - 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, - 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, - 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, - 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, - 139, 216, 19, 115, 139, 208, 19, 115, 135, 236, 19, 115, 139, 202, 19, 115, 139, 194, 19, 115, 135, 236, 19, 115, 139, - 188, 19, 115, 135, 236, 19, 115, 139, 180, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, - 19, 115, 139, 174, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 139, 166, 19, 115, 135, 236, 19, 115, 135, 236, 19, - 115, 135, 236, 19, 115, 135, 236, 19, 115, 139, 160, 19, 115, 139, 152, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, - 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 139, 144, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 139, - 138, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 139, 132, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, - 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, - 115, 135, 236, 19, 115, 139, 124, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 139, 118, 19, 115, 135, 236, 19, 115, - 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 139, 110, 19, 115, 135, 236, 19, 115, 139, 104, 19, 115, 139, - 96, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, 19, 115, 135, 236, - 19, 115, 140, 6, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 136, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 16, 16, 16, 16, 16, 16, 16, 65, 65, 65, 65, 65, 65, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 16, 16, 16, 16, 16, 16, 66, 66, 66, 66, 66, 66, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, - 16, 16, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 115, 146, 124, 19, 115, 146, 120, 19, 115, 146, 100, 19, 115, - 146, 88, 19, 115, 146, 74, 19, 115, 146, 64, 19, 115, 146, 40, 19, 115, 146, 24, 78, 156, 85, 22, 90, 3, 150, 63, 84, - 192, 97, 27, 99, 40, 89, 246, 144, 34, 132, 117, 131, 28, 122, 80, 96, 170, 99, 225, 110, 37, 101, 237, 132, 102, 130, - 166, 155, 245, 104, 147, 87, 39, 101, 161, 98, 113, 91, 155, 89, 208, 134, 123, 152, 244, 125, 98, 125, 190, 155, 142, - 98, 22, 124, 159, 136, 183, 91, 137, 94, 181, 99, 9, 102, 151, 104, 72, 149, 199, 151, 141, 103, 79, 78, 229, 79, 10, - 79, 77, 79, 157, 80, 73, 86, 242, 89, 55, 89, 212, 90, 1, 92, 9, 96, 223, 97, 15, 97, 112, 102, 19, 105, 5, 112, 186, - 117, 79, 117, 112, 121, 251, 125, 173, 125, 239, 128, 195, 132, 14, 136, 99, 139, 2, 144, 85, 144, 122, 83, 59, 78, - 149, 78, 165, 87, 223, 128, 178, 144, 193, 120, 239, 78, 0, 88, 241, 110, 162, 144, 56, 122, 50, 131, 40, 130, 139, - 156, 47, 81, 65, 83, 112, 84, 189, 84, 225, 86, 224, 89, 251, 95, 21, 152, 242, 109, 235, 128, 228, 133, 45, 150, 98, - 150, 112, 150, 160, 151, 251, 84, 11, 83, 243, 91, 135, 112, 207, 127, 189, 143, 194, 150, 232, 83, 111, 157, 92, 122, - 186, 78, 17, 120, 147, 129, 252, 110, 38, 86, 24, 85, 4, 107, 29, 133, 26, 156, 59, 89, 229, 83, 169, 109, 102, 116, - 220, 149, 143, 86, 66, 78, 145, 144, 75, 150, 242, 131, 79, 153, 12, 83, 225, 85, 182, 91, 48, 95, 113, 102, 32, 102, - 243, 104, 4, 108, 56, 108, 243, 109, 41, 116, 91, 118, 200, 122, 78, 152, 52, 130, 241, 136, 91, 138, 96, 146, 237, - 109, 178, 117, 171, 118, 202, 153, 197, 96, 166, 139, 1, 141, 138, 149, 178, 105, 142, 83, 173, 81, 134, 87, 18, 88, - 48, 89, 68, 91, 180, 94, 246, 96, 40, 99, 169, 99, 244, 108, 191, 111, 20, 112, 142, 113, 20, 113, 89, 113, 213, 115, - 63, 126, 1, 130, 118, 130, 209, 133, 151, 144, 96, 146, 91, 157, 27, 88, 105, 101, 188, 108, 90, 117, 37, 81, 249, 89, - 46, 89, 101, 95, 128, 95, 220, 98, 188, 101, 250, 106, 42, 107, 39, 107, 180, 115, 139, 127, 193, 137, 86, 157, 44, - 157, 14, 158, 196, 92, 161, 108, 150, 131, 123, 81, 4, 92, 75, 97, 182, 129, 198, 104, 118, 114, 97, 78, 89, 79, 250, - 83, 120, 96, 105, 110, 41, 122, 79, 151, 243, 78, 11, 83, 22, 78, 238, 79, 85, 79, 61, 79, 161, 79, 115, 82, 160, 83, - 239, 86, 9, 89, 15, 90, 193, 91, 182, 91, 225, 121, 209, 102, 135, 103, 156, 103, 182, 107, 76, 108, 179, 112, 107, - 115, 194, 121, 141, 121, 190, 122, 60, 123, 135, 130, 177, 130, 219, 131, 4, 131, 119, 131, 239, 131, 211, 135, 102, - 138, 178, 86, 41, 140, 168, 143, 230, 144, 78, 151, 30, 134, 138, 79, 196, 92, 232, 98, 17, 114, 89, 117, 59, 129, 229, - 130, 189, 134, 254, 140, 192, 150, 197, 153, 19, 153, 213, 78, 203, 79, 26, 137, 227, 86, 222, 88, 74, 88, 202, 94, - 251, 95, 235, 96, 42, 96, 148, 96, 98, 97, 208, 98, 18, 98, 208, 101, 57, 155, 65, 102, 102, 104, 176, 109, 119, 112, - 112, 117, 76, 118, 134, 125, 117, 130, 165, 135, 249, 149, 139, 150, 142, 140, 157, 81, 241, 82, 190, 89, 22, 84, 179, - 91, 179, 93, 22, 97, 104, 105, 130, 109, 175, 120, 141, 132, 203, 136, 87, 138, 114, 147, 167, 154, 184, 109, 108, 153, - 168, 134, 217, 87, 163, 103, 255, 134, 206, 146, 14, 82, 131, 86, 135, 84, 4, 94, 211, 98, 225, 100, 185, 104, 60, 104, - 56, 107, 187, 115, 114, 120, 186, 122, 107, 137, 154, 137, 210, 141, 107, 143, 3, 144, 237, 149, 163, 150, 148, 151, - 105, 91, 102, 92, 179, 105, 125, 152, 77, 152, 78, 99, 155, 123, 32, 106, 43, 106, 127, 104, 182, 156, 13, 111, 95, - 82, 114, 85, 157, 96, 112, 98, 236, 109, 59, 110, 7, 110, 209, 132, 91, 137, 16, 143, 68, 78, 20, 156, 57, 83, 246, - 105, 27, 106, 58, 151, 132, 104, 42, 81, 92, 122, 195, 132, 178, 145, 220, 147, 140, 86, 91, 157, 40, 104, 34, 131, - 5, 132, 49, 124, 165, 82, 8, 130, 197, 116, 230, 78, 126, 79, 131, 81, 160, 91, 210, 82, 10, 82, 216, 82, 231, 93, 251, - 85, 154, 88, 42, 89, 230, 91, 140, 91, 152, 91, 219, 94, 114, 94, 121, 96, 163, 97, 31, 97, 99, 97, 190, 99, 219, 101, - 98, 103, 209, 104, 83, 104, 250, 107, 62, 107, 83, 108, 87, 111, 34, 111, 151, 111, 69, 116, 176, 117, 24, 118, 227, - 119, 11, 122, 255, 123, 161, 124, 33, 125, 233, 127, 54, 127, 240, 128, 157, 130, 102, 131, 158, 137, 179, 138, 204, - 140, 171, 144, 132, 148, 81, 149, 147, 149, 145, 149, 162, 150, 101, 151, 211, 153, 40, 130, 24, 78, 56, 84, 43, 92, - 184, 93, 204, 115, 169, 118, 76, 119, 60, 92, 169, 127, 235, 141, 11, 150, 193, 152, 17, 152, 84, 152, 88, 79, 1, 79, - 14, 83, 113, 85, 156, 86, 104, 87, 250, 89, 71, 91, 9, 91, 196, 92, 144, 94, 12, 94, 126, 95, 204, 99, 238, 103, 58, - 101, 215, 101, 226, 103, 31, 104, 203, 104, 196, 106, 95, 94, 48, 107, 197, 108, 23, 108, 125, 117, 127, 121, 72, 91, - 99, 122, 0, 125, 0, 95, 189, 137, 143, 138, 24, 140, 180, 141, 119, 142, 204, 143, 29, 152, 226, 154, 14, 155, 60, 78, - 128, 80, 125, 81, 0, 89, 147, 91, 156, 98, 47, 98, 128, 100, 236, 107, 58, 114, 160, 117, 145, 121, 71, 127, 169, 135, - 251, 138, 188, 139, 112, 99, 172, 131, 202, 151, 160, 84, 9, 84, 3, 85, 171, 104, 84, 106, 88, 138, 112, 120, 39, 103, - 117, 158, 205, 83, 116, 91, 162, 129, 26, 134, 80, 144, 6, 78, 24, 78, 69, 78, 199, 79, 17, 83, 202, 84, 56, 91, 174, - 95, 19, 96, 37, 101, 81, 103, 61, 108, 66, 108, 114, 108, 227, 112, 120, 116, 3, 122, 118, 122, 174, 123, 8, 125, 26, - 124, 254, 125, 102, 101, 231, 114, 91, 83, 187, 92, 69, 93, 232, 98, 210, 98, 224, 99, 25, 110, 32, 134, 90, 138, 49, - 141, 221, 146, 248, 111, 1, 121, 166, 155, 90, 78, 168, 78, 171, 78, 172, 79, 155, 79, 160, 80, 209, 81, 71, 122, 246, - 81, 113, 81, 246, 83, 84, 83, 33, 83, 127, 83, 235, 85, 172, 88, 131, 92, 225, 95, 55, 95, 74, 96, 47, 96, 80, 96, 109, - 99, 31, 101, 89, 106, 75, 108, 193, 114, 194, 114, 237, 119, 239, 128, 248, 129, 5, 130, 8, 133, 78, 144, 247, 147, - 225, 151, 255, 153, 87, 154, 90, 78, 240, 81, 221, 92, 45, 102, 129, 105, 109, 92, 64, 102, 242, 105, 117, 115, 137, - 104, 80, 124, 129, 80, 197, 82, 228, 87, 71, 93, 254, 147, 38, 101, 164, 107, 35, 107, 61, 116, 52, 121, 129, 121, 189, - 123, 75, 125, 202, 130, 185, 131, 204, 136, 127, 137, 95, 139, 57, 143, 209, 145, 209, 84, 31, 146, 128, 78, 93, 80, - 54, 83, 229, 83, 58, 114, 215, 115, 150, 119, 233, 130, 230, 142, 175, 153, 198, 153, 200, 153, 210, 81, 119, 97, 26, - 134, 94, 85, 176, 122, 122, 80, 118, 91, 211, 144, 71, 150, 133, 78, 50, 106, 219, 145, 231, 92, 81, 92, 72, 99, 152, - 122, 159, 108, 147, 151, 116, 143, 97, 122, 170, 113, 138, 150, 136, 124, 130, 104, 23, 126, 112, 104, 81, 147, 108, - 82, 242, 84, 27, 133, 171, 138, 19, 127, 164, 142, 205, 144, 225, 83, 102, 136, 136, 121, 65, 79, 194, 80, 190, 82, - 17, 81, 68, 85, 83, 87, 45, 115, 234, 87, 139, 89, 81, 95, 98, 95, 132, 96, 117, 97, 118, 97, 103, 97, 169, 99, 178, - 100, 58, 101, 108, 102, 111, 104, 66, 110, 19, 117, 102, 122, 61, 124, 251, 125, 76, 125, 153, 126, 75, 127, 107, 131, - 14, 131, 74, 134, 205, 138, 8, 138, 99, 139, 102, 142, 253, 152, 26, 157, 143, 130, 184, 143, 206, 155, 232, 82, 135, - 98, 31, 100, 131, 111, 192, 150, 153, 104, 65, 80, 145, 107, 32, 108, 122, 111, 84, 122, 116, 125, 80, 136, 64, 138, - 35, 103, 8, 78, 246, 80, 57, 80, 38, 80, 101, 81, 124, 82, 56, 82, 99, 85, 167, 87, 15, 88, 5, 90, 204, 94, 250, 97, - 178, 97, 248, 98, 243, 99, 114, 105, 28, 106, 41, 114, 125, 114, 172, 115, 46, 120, 20, 120, 111, 125, 121, 119, 12, - 128, 169, 137, 139, 139, 25, 140, 226, 142, 210, 144, 99, 147, 117, 150, 122, 152, 85, 154, 19, 158, 120, 81, 67, 83, - 159, 83, 179, 94, 123, 95, 38, 110, 27, 110, 144, 115, 132, 115, 254, 125, 67, 130, 55, 138, 0, 138, 250, 150, 80, 78, - 78, 80, 11, 83, 228, 84, 124, 86, 250, 89, 209, 91, 100, 93, 241, 94, 171, 95, 39, 98, 56, 101, 69, 103, 175, 110, 86, - 114, 208, 124, 202, 136, 180, 128, 161, 128, 225, 131, 240, 134, 78, 138, 135, 141, 232, 146, 55, 150, 199, 152, 103, - 159, 19, 78, 148, 78, 146, 79, 13, 83, 72, 84, 73, 84, 62, 90, 47, 95, 140, 95, 161, 96, 159, 104, 167, 106, 142, 116, - 90, 120, 129, 138, 158, 138, 164, 139, 119, 145, 144, 78, 94, 155, 201, 78, 164, 79, 124, 79, 175, 80, 25, 80, 22, 81, - 73, 81, 108, 82, 159, 82, 185, 82, 254, 83, 154, 83, 227, 84, 17, 84, 14, 85, 137, 87, 81, 87, 162, 89, 125, 91, 84, - 91, 93, 91, 143, 93, 229, 93, 231, 93, 247, 94, 120, 94, 131, 94, 154, 94, 183, 95, 24, 96, 82, 97, 76, 98, 151, 98, - 216, 99, 167, 101, 59, 102, 2, 102, 67, 102, 244, 103, 109, 104, 33, 104, 151, 105, 203, 108, 95, 109, 42, 109, 105, - 110, 47, 110, 157, 117, 50, 118, 135, 120, 108, 122, 63, 124, 224, 125, 5, 125, 24, 125, 94, 125, 177, 128, 21, 128, - 3, 128, 175, 128, 177, 129, 84, 129, 143, 130, 42, 131, 82, 136, 76, 136, 97, 139, 27, 140, 162, 140, 252, 144, 202, - 145, 117, 146, 113, 120, 63, 146, 252, 149, 164, 150, 77, 152, 5, 153, 153, 154, 216, 157, 59, 82, 91, 82, 171, 83, - 247, 84, 8, 88, 213, 98, 247, 111, 224, 140, 106, 143, 95, 158, 185, 81, 75, 82, 59, 84, 74, 86, 253, 122, 64, 145, - 119, 157, 96, 158, 210, 115, 68, 111, 9, 129, 112, 117, 17, 95, 253, 96, 218, 154, 168, 114, 219, 143, 188, 107, 100, - 152, 3, 78, 202, 86, 240, 87, 100, 88, 190, 90, 90, 96, 104, 97, 199, 102, 15, 102, 6, 104, 57, 104, 177, 109, 247, - 117, 213, 125, 58, 130, 110, 155, 66, 78, 155, 79, 80, 83, 201, 85, 6, 93, 111, 93, 230, 93, 238, 103, 251, 108, 153, - 116, 115, 120, 2, 138, 80, 147, 150, 136, 223, 87, 80, 94, 167, 99, 43, 80, 181, 80, 172, 81, 141, 103, 0, 84, 201, - 88, 94, 89, 187, 91, 176, 95, 105, 98, 77, 99, 161, 104, 61, 107, 115, 110, 8, 112, 125, 145, 199, 114, 128, 120, 21, - 120, 38, 121, 109, 101, 142, 125, 48, 131, 220, 136, 193, 143, 9, 150, 155, 82, 100, 87, 40, 103, 80, 127, 106, 140, - 161, 81, 180, 87, 66, 150, 42, 88, 58, 105, 138, 128, 180, 84, 178, 93, 14, 87, 252, 120, 149, 157, 250, 79, 92, 82, - 74, 84, 139, 100, 62, 102, 40, 103, 20, 103, 245, 122, 132, 123, 86, 125, 34, 147, 47, 104, 92, 155, 173, 123, 57, 83, - 25, 81, 138, 82, 55, 91, 223, 98, 246, 100, 174, 100, 230, 103, 45, 107, 186, 133, 169, 150, 209, 118, 144, 155, 214, - 99, 76, 147, 6, 155, 171, 118, 191, 102, 82, 78, 9, 80, 152, 83, 194, 92, 113, 96, 232, 100, 146, 101, 99, 104, 95, - 113, 230, 115, 202, 117, 35, 123, 151, 126, 130, 134, 149, 139, 131, 140, 219, 145, 120, 153, 16, 101, 172, 102, 171, - 107, 139, 78, 213, 78, 212, 79, 58, 79, 127, 82, 58, 83, 248, 83, 242, 85, 227, 86, 219, 88, 235, 89, 203, 89, 201, - 89, 255, 91, 80, 92, 77, 94, 2, 94, 43, 95, 215, 96, 29, 99, 7, 101, 47, 91, 92, 101, 175, 101, 189, 101, 232, 103, - 157, 107, 98, 107, 123, 108, 15, 115, 69, 121, 73, 121, 193, 124, 248, 125, 25, 125, 43, 128, 162, 129, 2, 129, 243, - 137, 150, 138, 94, 138, 105, 138, 102, 138, 140, 138, 238, 140, 199, 140, 220, 150, 204, 152, 252, 107, 111, 78, 139, - 79, 60, 79, 141, 81, 80, 91, 87, 91, 250, 97, 72, 99, 1, 102, 66, 107, 33, 110, 203, 108, 187, 114, 62, 116, 189, 117, - 212, 120, 193, 121, 58, 128, 12, 128, 51, 129, 234, 132, 148, 143, 158, 108, 80, 158, 127, 95, 15, 139, 88, 157, 43, - 122, 250, 142, 248, 91, 141, 150, 235, 78, 3, 83, 241, 87, 247, 89, 49, 90, 201, 91, 164, 96, 137, 110, 127, 111, 6, - 117, 190, 140, 234, 91, 159, 133, 0, 123, 224, 80, 114, 103, 244, 130, 157, 92, 97, 133, 74, 126, 30, 130, 14, 81, 153, - 92, 4, 99, 104, 141, 102, 101, 156, 113, 110, 121, 62, 125, 23, 128, 5, 139, 29, 142, 202, 144, 110, 134, 199, 144, - 170, 80, 31, 82, 250, 92, 58, 103, 83, 112, 124, 114, 53, 145, 76, 145, 200, 147, 43, 130, 229, 91, 194, 95, 49, 96, - 249, 78, 59, 83, 214, 91, 136, 98, 75, 103, 49, 107, 138, 114, 233, 115, 224, 122, 46, 129, 107, 141, 163, 145, 82, - 153, 150, 81, 18, 83, 215, 84, 106, 91, 255, 99, 136, 106, 57, 125, 172, 151, 0, 86, 218, 83, 206, 84, 104, 91, 151, - 92, 49, 93, 222, 79, 238, 97, 1, 98, 254, 109, 50, 121, 192, 121, 203, 125, 66, 126, 77, 127, 210, 129, 237, 130, 31, - 132, 144, 136, 70, 137, 114, 139, 144, 142, 116, 143, 47, 144, 49, 145, 75, 145, 108, 150, 198, 145, 156, 78, 192, 79, - 79, 81, 69, 83, 65, 95, 147, 98, 14, 103, 212, 108, 65, 110, 11, 115, 99, 126, 38, 145, 205, 146, 131, 83, 212, 89, - 25, 91, 191, 109, 209, 121, 93, 126, 46, 124, 155, 88, 126, 113, 159, 81, 250, 136, 83, 143, 240, 79, 202, 92, 251, - 102, 37, 119, 172, 122, 227, 130, 28, 153, 255, 81, 198, 95, 170, 101, 236, 105, 111, 107, 137, 109, 243, 110, 150, - 111, 100, 118, 254, 125, 20, 93, 225, 144, 117, 145, 135, 152, 6, 81, 230, 82, 29, 98, 64, 102, 145, 102, 217, 110, - 26, 94, 182, 125, 210, 127, 114, 102, 248, 133, 175, 133, 247, 138, 248, 82, 169, 83, 217, 89, 115, 94, 143, 95, 144, - 96, 85, 146, 228, 150, 100, 80, 183, 81, 31, 82, 221, 83, 32, 83, 71, 83, 236, 84, 232, 85, 70, 85, 49, 86, 23, 89, - 104, 89, 190, 90, 60, 91, 181, 92, 6, 92, 15, 92, 17, 92, 26, 94, 132, 94, 138, 94, 224, 95, 112, 98, 127, 98, 132, - 98, 219, 99, 140, 99, 119, 102, 7, 102, 12, 102, 45, 102, 118, 103, 126, 104, 162, 106, 31, 106, 53, 108, 188, 109, - 136, 110, 9, 110, 88, 113, 60, 113, 38, 113, 103, 117, 199, 119, 1, 120, 93, 121, 1, 121, 101, 121, 240, 122, 224, 123, - 17, 124, 167, 125, 57, 128, 150, 131, 214, 132, 139, 133, 73, 136, 93, 136, 243, 138, 31, 138, 60, 138, 84, 138, 115, - 140, 97, 140, 222, 145, 164, 146, 102, 147, 126, 148, 24, 150, 156, 151, 152, 78, 10, 78, 8, 78, 30, 78, 87, 81, 151, - 82, 112, 87, 206, 88, 52, 88, 204, 91, 34, 94, 56, 96, 197, 100, 254, 103, 97, 103, 86, 109, 68, 114, 182, 117, 115, - 122, 99, 132, 184, 139, 114, 145, 184, 147, 32, 86, 49, 87, 244, 152, 254, 98, 237, 105, 13, 107, 150, 113, 237, 126, - 84, 128, 119, 130, 114, 137, 230, 152, 223, 135, 85, 143, 177, 92, 59, 79, 56, 79, 225, 79, 181, 85, 7, 90, 32, 91, - 221, 91, 233, 95, 195, 97, 78, 99, 47, 101, 176, 102, 75, 104, 238, 105, 155, 109, 120, 109, 241, 117, 51, 117, 185, - 119, 31, 121, 94, 121, 230, 125, 51, 129, 227, 130, 175, 133, 170, 137, 170, 138, 58, 142, 171, 143, 155, 144, 50, 145, - 221, 151, 7, 78, 186, 78, 193, 82, 3, 88, 117, 88, 236, 92, 11, 117, 26, 92, 61, 129, 78, 138, 10, 143, 197, 150, 99, - 151, 109, 123, 37, 138, 207, 152, 8, 145, 98, 86, 243, 83, 168, 144, 23, 84, 57, 87, 130, 94, 37, 99, 168, 108, 52, - 112, 138, 119, 97, 124, 139, 127, 224, 136, 112, 144, 66, 145, 84, 147, 16, 147, 24, 150, 143, 116, 94, 154, 196, 93, - 7, 93, 105, 101, 112, 103, 162, 141, 168, 150, 219, 99, 110, 103, 73, 105, 25, 131, 197, 152, 23, 150, 192, 136, 254, - 111, 132, 100, 122, 91, 248, 78, 22, 112, 44, 117, 93, 102, 47, 81, 196, 82, 54, 82, 226, 89, 211, 95, 129, 96, 39, - 98, 16, 101, 63, 101, 116, 102, 31, 102, 116, 104, 242, 104, 22, 107, 99, 110, 5, 114, 114, 117, 31, 118, 219, 124, - 190, 128, 86, 88, 240, 136, 253, 137, 127, 138, 160, 138, 147, 138, 203, 144, 29, 145, 146, 151, 82, 151, 89, 101, 137, - 122, 14, 129, 6, 150, 187, 94, 45, 96, 220, 98, 26, 101, 165, 102, 20, 103, 144, 119, 243, 122, 77, 124, 77, 126, 62, - 129, 10, 140, 172, 141, 100, 141, 225, 142, 95, 120, 169, 82, 7, 98, 217, 99, 165, 100, 66, 98, 152, 138, 45, 122, 131, - 123, 192, 138, 172, 150, 234, 125, 118, 130, 12, 135, 73, 78, 217, 81, 72, 83, 67, 83, 96, 91, 163, 92, 2, 92, 22, 93, - 221, 98, 38, 98, 71, 100, 176, 104, 19, 104, 52, 108, 201, 109, 69, 109, 23, 103, 211, 111, 92, 113, 78, 113, 125, 101, - 203, 122, 127, 123, 173, 125, 218, 126, 74, 127, 168, 129, 122, 130, 27, 130, 57, 133, 166, 138, 110, 140, 206, 141, - 245, 144, 120, 144, 119, 146, 173, 146, 145, 149, 131, 155, 174, 82, 77, 85, 132, 111, 56, 113, 54, 81, 104, 121, 133, - 126, 85, 129, 179, 124, 206, 86, 76, 88, 81, 92, 168, 99, 170, 102, 254, 102, 253, 105, 90, 114, 217, 117, 143, 117, - 142, 121, 14, 121, 86, 121, 223, 124, 151, 125, 32, 125, 68, 134, 7, 138, 52, 150, 59, 144, 97, 159, 32, 80, 231, 82, - 117, 83, 204, 83, 226, 80, 9, 85, 170, 88, 238, 89, 79, 114, 61, 91, 139, 92, 100, 83, 29, 96, 227, 96, 243, 99, 92, - 99, 131, 99, 63, 99, 187, 100, 205, 101, 233, 102, 249, 93, 227, 105, 205, 105, 253, 111, 21, 113, 229, 78, 137, 117, - 233, 118, 248, 122, 147, 124, 223, 125, 207, 125, 156, 128, 97, 131, 73, 131, 88, 132, 108, 132, 188, 133, 251, 136, - 197, 141, 112, 144, 1, 144, 109, 147, 151, 151, 28, 154, 18, 80, 207, 88, 151, 97, 142, 129, 211, 133, 53, 141, 8, 144, - 32, 79, 195, 80, 116, 82, 71, 83, 115, 96, 111, 99, 73, 103, 95, 110, 44, 141, 179, 144, 31, 79, 215, 92, 94, 140, 202, - 101, 207, 125, 154, 83, 82, 136, 150, 81, 118, 99, 195, 91, 88, 91, 107, 92, 10, 100, 13, 103, 81, 144, 92, 78, 214, - 89, 26, 89, 42, 108, 112, 138, 81, 85, 62, 88, 21, 89, 165, 96, 240, 98, 83, 103, 193, 130, 53, 105, 85, 150, 64, 153, - 196, 154, 40, 79, 83, 88, 6, 91, 254, 128, 16, 92, 177, 94, 47, 95, 133, 96, 32, 97, 75, 98, 52, 102, 255, 108, 240, - 110, 222, 128, 206, 129, 127, 130, 212, 136, 139, 140, 184, 144, 0, 144, 46, 150, 138, 158, 219, 155, 219, 78, 227, - 83, 240, 89, 39, 123, 44, 145, 141, 152, 76, 157, 249, 110, 221, 112, 39, 83, 83, 85, 68, 91, 133, 98, 88, 98, 158, - 98, 211, 108, 162, 111, 239, 116, 34, 138, 23, 148, 56, 111, 193, 138, 254, 131, 56, 81, 231, 134, 248, 83, 234, 83, - 233, 79, 70, 144, 84, 143, 176, 89, 106, 129, 49, 93, 253, 122, 234, 143, 191, 104, 218, 140, 55, 114, 248, 156, 72, - 106, 61, 138, 176, 78, 57, 83, 88, 86, 6, 87, 102, 98, 197, 99, 162, 101, 230, 107, 78, 109, 225, 110, 91, 112, 173, - 119, 237, 122, 239, 123, 170, 125, 187, 128, 61, 128, 198, 134, 203, 138, 149, 147, 91, 86, 227, 88, 199, 95, 62, 101, - 173, 102, 150, 106, 128, 107, 181, 117, 55, 138, 199, 80, 36, 119, 229, 87, 48, 95, 27, 96, 101, 102, 122, 108, 96, - 117, 244, 122, 26, 127, 110, 129, 244, 135, 24, 144, 69, 153, 179, 123, 201, 117, 92, 122, 249, 123, 81, 132, 196, 144, - 16, 121, 233, 122, 146, 131, 54, 90, 225, 119, 64, 78, 45, 78, 242, 91, 153, 95, 224, 98, 189, 102, 60, 103, 241, 108, - 232, 134, 107, 136, 119, 138, 59, 145, 78, 146, 243, 153, 208, 106, 23, 112, 38, 115, 42, 130, 231, 132, 87, 140, 175, - 78, 1, 81, 70, 81, 203, 85, 139, 91, 245, 94, 22, 94, 51, 94, 129, 95, 20, 95, 53, 95, 107, 95, 180, 97, 242, 99, 17, - 102, 162, 103, 29, 111, 110, 114, 82, 117, 58, 119, 58, 128, 116, 129, 57, 129, 120, 135, 118, 138, 191, 138, 220, 141, - 133, 141, 243, 146, 154, 149, 119, 152, 2, 156, 229, 82, 197, 99, 87, 118, 244, 103, 21, 108, 136, 115, 205, 140, 195, - 147, 174, 150, 115, 109, 37, 88, 156, 105, 14, 105, 204, 143, 253, 147, 154, 117, 219, 144, 26, 88, 90, 104, 2, 99, - 180, 105, 251, 79, 67, 111, 44, 103, 216, 143, 187, 133, 38, 125, 180, 147, 84, 105, 63, 111, 112, 87, 106, 88, 247, - 91, 44, 125, 44, 114, 42, 84, 10, 145, 227, 157, 180, 78, 173, 79, 78, 80, 92, 80, 117, 82, 67, 140, 158, 84, 72, 88, - 36, 91, 154, 94, 29, 94, 149, 94, 173, 94, 247, 95, 31, 96, 140, 98, 181, 99, 58, 99, 208, 104, 175, 108, 64, 120, 135, - 121, 142, 122, 11, 125, 224, 130, 71, 138, 2, 138, 230, 142, 68, 144, 19, 144, 184, 145, 45, 145, 216, 159, 14, 108, - 229, 100, 88, 100, 226, 101, 117, 110, 244, 118, 132, 123, 27, 144, 105, 147, 209, 110, 186, 84, 242, 95, 185, 100, - 164, 143, 77, 143, 237, 146, 68, 81, 120, 88, 107, 89, 41, 92, 85, 94, 151, 109, 251, 126, 143, 117, 28, 140, 188, 142, - 226, 152, 91, 112, 185, 79, 29, 107, 191, 111, 177, 117, 48, 150, 251, 81, 78, 84, 16, 88, 53, 88, 87, 89, 172, 92, - 96, 95, 146, 101, 151, 103, 92, 110, 33, 118, 123, 131, 223, 140, 237, 144, 20, 144, 253, 147, 77, 120, 37, 120, 58, - 82, 170, 94, 166, 87, 31, 89, 116, 96, 18, 80, 18, 81, 90, 81, 172, 81, 205, 82, 0, 85, 16, 88, 84, 88, 88, 89, 87, - 91, 149, 92, 246, 93, 139, 96, 188, 98, 149, 100, 45, 103, 113, 104, 67, 104, 188, 104, 223, 118, 215, 109, 216, 110, - 111, 109, 155, 112, 111, 113, 200, 95, 83, 117, 216, 121, 119, 123, 73, 123, 84, 123, 82, 124, 214, 125, 113, 82, 48, - 132, 99, 133, 105, 133, 228, 138, 14, 139, 4, 140, 70, 142, 15, 144, 3, 144, 15, 148, 25, 150, 118, 152, 45, 154, 48, - 149, 216, 80, 205, 82, 213, 84, 12, 88, 2, 92, 14, 97, 167, 100, 158, 109, 30, 119, 179, 122, 229, 128, 244, 132, 4, - 144, 83, 146, 133, 92, 224, 157, 7, 83, 63, 95, 151, 95, 179, 109, 156, 114, 121, 119, 99, 121, 191, 123, 228, 107, - 210, 114, 236, 138, 173, 104, 3, 106, 97, 81, 248, 122, 129, 105, 52, 92, 74, 156, 246, 130, 235, 91, 197, 145, 73, - 112, 30, 86, 120, 92, 111, 96, 199, 101, 102, 108, 140, 140, 90, 144, 65, 152, 19, 84, 81, 102, 199, 146, 13, 89, 72, - 144, 163, 81, 133, 78, 77, 81, 234, 133, 153, 139, 14, 112, 88, 99, 122, 147, 75, 105, 98, 153, 180, 126, 4, 117, 119, - 83, 87, 105, 96, 142, 223, 150, 227, 108, 93, 78, 140, 92, 60, 95, 16, 143, 233, 83, 2, 140, 209, 128, 137, 134, 121, - 94, 255, 101, 229, 78, 115, 81, 101, 89, 130, 92, 63, 151, 238, 78, 251, 89, 138, 95, 205, 138, 141, 111, 225, 121, - 176, 121, 98, 91, 231, 132, 113, 115, 43, 113, 177, 94, 116, 95, 245, 99, 123, 100, 154, 113, 195, 124, 152, 78, 67, - 94, 252, 78, 75, 87, 220, 86, 162, 96, 169, 111, 195, 125, 13, 128, 253, 129, 51, 129, 191, 143, 178, 137, 151, 134, - 164, 93, 244, 98, 138, 100, 173, 137, 135, 103, 119, 108, 226, 109, 62, 116, 54, 120, 52, 90, 70, 127, 117, 130, 173, - 153, 172, 79, 243, 94, 195, 98, 221, 99, 146, 101, 87, 103, 111, 118, 195, 114, 76, 128, 204, 128, 186, 143, 41, 145, - 77, 80, 13, 87, 249, 90, 146, 104, 133, 105, 115, 113, 100, 114, 253, 140, 183, 88, 242, 140, 224, 150, 106, 144, 25, - 135, 127, 121, 228, 119, 231, 132, 41, 79, 47, 82, 101, 83, 90, 98, 205, 103, 207, 108, 202, 118, 125, 123, 148, 124, - 149, 130, 54, 133, 132, 143, 235, 102, 221, 111, 32, 114, 6, 126, 27, 131, 171, 153, 193, 158, 166, 81, 253, 123, 177, - 120, 114, 123, 184, 128, 135, 123, 72, 106, 232, 94, 97, 128, 140, 117, 81, 117, 96, 81, 107, 146, 98, 110, 140, 118, - 122, 145, 151, 154, 234, 79, 16, 127, 112, 98, 156, 123, 79, 149, 165, 156, 233, 86, 122, 88, 89, 134, 228, 150, 188, - 79, 52, 82, 36, 83, 74, 83, 205, 83, 219, 94, 6, 100, 44, 101, 145, 103, 127, 108, 62, 108, 78, 114, 72, 114, 175, 115, - 237, 117, 84, 126, 65, 130, 44, 133, 233, 140, 169, 123, 196, 145, 198, 113, 105, 152, 18, 152, 239, 99, 61, 102, 105, - 117, 106, 118, 228, 120, 208, 133, 67, 134, 238, 83, 42, 83, 81, 84, 38, 89, 131, 94, 135, 95, 124, 96, 178, 98, 73, - 98, 121, 98, 171, 101, 144, 107, 212, 108, 204, 117, 178, 118, 174, 120, 145, 121, 216, 125, 203, 127, 119, 128, 165, - 136, 171, 138, 185, 140, 187, 144, 127, 151, 94, 152, 219, 106, 11, 124, 56, 80, 153, 92, 62, 95, 174, 103, 135, 107, - 216, 116, 53, 119, 9, 127, 142, 159, 59, 103, 202, 122, 23, 83, 57, 117, 139, 154, 237, 95, 102, 129, 157, 131, 241, - 128, 152, 95, 60, 95, 197, 117, 98, 123, 70, 144, 60, 104, 103, 89, 235, 90, 155, 125, 16, 118, 126, 139, 44, 79, 245, - 95, 106, 106, 25, 108, 55, 111, 2, 116, 226, 121, 104, 136, 104, 138, 85, 140, 121, 94, 223, 99, 207, 117, 197, 121, - 210, 130, 215, 147, 40, 146, 242, 132, 156, 134, 237, 156, 45, 84, 193, 95, 108, 101, 140, 109, 92, 112, 21, 140, 167, - 140, 211, 152, 59, 101, 79, 116, 246, 78, 13, 78, 216, 87, 224, 89, 43, 90, 102, 91, 204, 81, 168, 94, 3, 94, 156, 96, - 22, 98, 118, 101, 119, 101, 167, 102, 110, 109, 110, 114, 54, 123, 38, 129, 80, 129, 154, 130, 153, 139, 92, 140, 160, - 140, 230, 141, 116, 150, 28, 150, 68, 79, 174, 100, 171, 107, 102, 130, 30, 132, 97, 133, 106, 144, 232, 92, 1, 105, - 83, 152, 168, 132, 122, 133, 87, 79, 15, 82, 111, 95, 169, 94, 69, 103, 13, 121, 143, 129, 121, 137, 7, 137, 134, 109, - 245, 95, 23, 98, 85, 108, 184, 78, 207, 114, 105, 155, 146, 82, 6, 84, 59, 86, 116, 88, 179, 97, 164, 98, 110, 113, - 26, 89, 110, 124, 137, 124, 222, 125, 27, 150, 240, 101, 135, 128, 94, 78, 25, 79, 117, 81, 117, 88, 64, 94, 99, 94, - 115, 95, 10, 103, 196, 78, 38, 133, 61, 149, 137, 150, 91, 124, 115, 152, 1, 80, 251, 88, 193, 118, 86, 120, 167, 82, - 37, 119, 165, 133, 17, 123, 134, 80, 79, 89, 9, 114, 71, 123, 199, 125, 232, 143, 186, 143, 212, 144, 77, 79, 191, 82, - 201, 90, 41, 95, 1, 151, 173, 79, 221, 130, 23, 146, 234, 87, 3, 99, 85, 107, 105, 117, 43, 136, 220, 143, 20, 122, - 66, 82, 223, 88, 147, 97, 85, 98, 10, 102, 174, 107, 205, 124, 63, 131, 233, 80, 35, 79, 248, 83, 5, 84, 70, 88, 49, - 89, 73, 91, 157, 92, 240, 92, 239, 93, 41, 94, 150, 98, 177, 99, 103, 101, 62, 101, 185, 103, 11, 108, 213, 108, 225, - 112, 249, 120, 50, 126, 43, 128, 222, 130, 179, 132, 12, 132, 236, 135, 2, 137, 18, 138, 42, 140, 74, 144, 166, 146, - 210, 152, 253, 156, 243, 157, 108, 78, 79, 78, 161, 80, 141, 82, 86, 87, 74, 89, 168, 94, 61, 95, 216, 95, 217, 98, - 63, 102, 180, 103, 27, 103, 208, 104, 210, 81, 146, 125, 33, 128, 170, 129, 168, 139, 0, 140, 140, 140, 191, 146, 126, - 150, 50, 84, 32, 152, 44, 83, 23, 80, 213, 83, 92, 88, 168, 100, 178, 103, 52, 114, 103, 119, 102, 122, 70, 145, 230, - 82, 195, 108, 161, 107, 134, 88, 0, 94, 76, 89, 84, 103, 44, 127, 251, 81, 225, 118, 198, 100, 105, 120, 232, 155, 84, - 158, 187, 87, 203, 89, 185, 102, 39, 103, 154, 107, 206, 84, 233, 105, 217, 94, 85, 129, 156, 103, 149, 155, 170, 103, - 254, 156, 82, 104, 93, 78, 166, 79, 227, 83, 200, 98, 185, 103, 43, 108, 171, 143, 196, 79, 173, 126, 109, 158, 191, - 78, 7, 97, 98, 110, 128, 111, 43, 133, 19, 84, 115, 103, 42, 155, 69, 93, 243, 123, 149, 92, 172, 91, 198, 135, 28, - 110, 74, 132, 209, 122, 20, 129, 8, 89, 153, 124, 141, 108, 17, 119, 32, 82, 217, 89, 34, 113, 33, 114, 95, 119, 219, - 151, 39, 157, 97, 105, 11, 90, 127, 90, 24, 81, 165, 84, 13, 84, 125, 102, 14, 118, 223, 143, 247, 146, 152, 156, 244, - 89, 234, 114, 93, 110, 197, 81, 77, 104, 201, 125, 191, 125, 236, 151, 98, 158, 186, 100, 120, 106, 33, 131, 2, 89, - 132, 91, 95, 107, 219, 115, 27, 118, 242, 125, 178, 128, 23, 132, 153, 81, 50, 103, 40, 158, 217, 118, 238, 103, 98, - 82, 255, 153, 5, 92, 36, 98, 59, 124, 126, 140, 176, 85, 79, 96, 182, 125, 11, 149, 128, 83, 1, 78, 95, 81, 182, 89, - 28, 114, 58, 128, 54, 145, 206, 95, 37, 119, 226, 83, 132, 95, 121, 125, 4, 133, 172, 138, 51, 142, 141, 151, 86, 103, - 243, 133, 174, 148, 83, 97, 9, 97, 8, 108, 185, 118, 82, 138, 237, 143, 56, 85, 47, 79, 81, 81, 42, 82, 199, 83, 203, - 91, 165, 94, 125, 96, 160, 97, 130, 99, 214, 103, 9, 103, 218, 110, 103, 109, 140, 115, 54, 115, 55, 117, 49, 121, 80, - 136, 213, 138, 152, 144, 74, 144, 145, 144, 245, 150, 196, 135, 141, 89, 21, 78, 136, 79, 89, 78, 14, 138, 137, 143, - 63, 152, 16, 80, 173, 94, 124, 89, 150, 91, 185, 94, 184, 99, 218, 99, 250, 100, 193, 102, 220, 105, 74, 105, 216, 109, - 11, 110, 182, 113, 148, 117, 40, 122, 175, 127, 138, 128, 0, 132, 73, 132, 201, 137, 129, 139, 33, 142, 10, 144, 101, - 150, 125, 153, 10, 97, 126, 98, 145, 107, 50, 108, 131, 109, 116, 127, 204, 127, 252, 109, 192, 127, 133, 135, 186, - 136, 248, 103, 101, 131, 177, 152, 60, 150, 247, 109, 27, 125, 97, 132, 61, 145, 106, 78, 113, 83, 117, 93, 80, 107, - 4, 111, 235, 133, 205, 134, 45, 137, 167, 82, 41, 84, 15, 92, 101, 103, 78, 104, 168, 116, 6, 116, 131, 117, 226, 136, - 207, 136, 225, 145, 204, 150, 226, 150, 120, 95, 139, 115, 135, 122, 203, 132, 78, 99, 160, 117, 101, 82, 137, 109, - 65, 110, 156, 116, 9, 117, 89, 120, 107, 124, 146, 150, 134, 122, 220, 159, 141, 79, 182, 97, 110, 101, 197, 134, 92, - 78, 134, 78, 174, 80, 218, 78, 33, 81, 204, 91, 238, 101, 153, 104, 129, 109, 188, 115, 31, 118, 66, 119, 173, 122, - 28, 124, 231, 130, 111, 138, 210, 144, 124, 145, 207, 150, 117, 152, 24, 82, 155, 125, 209, 80, 43, 83, 152, 103, 151, - 109, 203, 113, 208, 116, 51, 129, 232, 143, 42, 150, 163, 156, 87, 158, 159, 116, 96, 88, 65, 109, 153, 125, 47, 152, - 94, 78, 228, 79, 54, 79, 139, 81, 183, 82, 177, 93, 186, 96, 28, 115, 178, 121, 60, 130, 211, 146, 52, 150, 183, 150, - 246, 151, 10, 158, 151, 159, 98, 102, 166, 107, 116, 82, 23, 82, 163, 112, 200, 136, 194, 94, 201, 96, 75, 97, 144, - 111, 35, 113, 73, 124, 62, 125, 244, 128, 111, 132, 238, 144, 35, 147, 44, 84, 66, 155, 111, 106, 211, 112, 137, 140, - 194, 141, 239, 151, 50, 82, 180, 90, 65, 94, 202, 95, 4, 103, 23, 105, 124, 105, 148, 109, 106, 111, 15, 114, 98, 114, - 252, 123, 237, 128, 1, 128, 126, 135, 75, 144, 206, 81, 109, 158, 147, 121, 132, 128, 139, 147, 50, 138, 214, 80, 45, - 84, 140, 138, 113, 107, 106, 140, 196, 129, 7, 96, 209, 103, 160, 157, 242, 78, 153, 78, 152, 156, 16, 138, 107, 133, - 193, 133, 104, 105, 0, 110, 126, 120, 151, 129, 85, 95, 12, 78, 16, 78, 21, 78, 42, 78, 49, 78, 54, 78, 60, 78, 63, - 78, 66, 78, 86, 78, 88, 78, 130, 78, 133, 140, 107, 78, 138, 130, 18, 95, 13, 78, 142, 78, 158, 78, 159, 78, 160, 78, - 162, 78, 176, 78, 179, 78, 182, 78, 206, 78, 205, 78, 196, 78, 198, 78, 194, 78, 215, 78, 222, 78, 237, 78, 223, 78, - 247, 79, 9, 79, 90, 79, 48, 79, 91, 79, 93, 79, 87, 79, 71, 79, 118, 79, 136, 79, 143, 79, 152, 79, 123, 79, 105, 79, - 112, 79, 145, 79, 111, 79, 134, 79, 150, 81, 24, 79, 212, 79, 223, 79, 206, 79, 216, 79, 219, 79, 209, 79, 218, 79, - 208, 79, 228, 79, 229, 80, 26, 80, 40, 80, 20, 80, 42, 80, 37, 80, 5, 79, 28, 79, 246, 80, 33, 80, 41, 80, 44, 79, 254, - 79, 239, 80, 17, 80, 6, 80, 67, 80, 71, 103, 3, 80, 85, 80, 80, 80, 72, 80, 90, 80, 86, 80, 108, 80, 120, 80, 128, 80, - 154, 80, 133, 80, 180, 80, 178, 80, 201, 80, 202, 80, 179, 80, 194, 80, 214, 80, 222, 80, 229, 80, 237, 80, 227, 80, - 238, 80, 249, 80, 245, 81, 9, 81, 1, 81, 2, 81, 22, 81, 21, 81, 20, 81, 26, 81, 33, 81, 58, 81, 55, 81, 60, 81, 59, - 81, 63, 81, 64, 81, 82, 81, 76, 81, 84, 81, 98, 122, 248, 81, 105, 81, 106, 81, 110, 81, 128, 81, 130, 86, 216, 81, - 140, 81, 137, 81, 143, 81, 145, 81, 147, 81, 149, 81, 150, 81, 164, 81, 166, 81, 162, 81, 169, 81, 170, 81, 171, 81, - 179, 81, 177, 81, 178, 81, 176, 81, 181, 81, 189, 81, 197, 81, 201, 81, 219, 81, 224, 134, 85, 81, 233, 81, 237, 81, - 240, 81, 245, 81, 254, 82, 4, 82, 11, 82, 20, 82, 14, 82, 39, 82, 42, 82, 46, 82, 51, 82, 57, 82, 79, 82, 68, 82, 75, - 82, 76, 82, 94, 82, 84, 82, 106, 82, 116, 82, 105, 82, 115, 82, 127, 82, 125, 82, 141, 82, 148, 82, 146, 82, 113, 82, - 136, 82, 145, 143, 168, 143, 167, 82, 172, 82, 173, 82, 188, 82, 181, 82, 193, 82, 205, 82, 215, 82, 222, 82, 227, 82, - 230, 152, 237, 82, 224, 82, 243, 82, 245, 82, 248, 82, 249, 83, 6, 83, 8, 117, 56, 83, 13, 83, 16, 83, 15, 83, 21, 83, - 26, 83, 35, 83, 47, 83, 49, 83, 51, 83, 56, 83, 64, 83, 70, 83, 69, 78, 23, 83, 73, 83, 77, 81, 214, 83, 94, 83, 105, - 83, 110, 89, 24, 83, 123, 83, 119, 83, 130, 83, 150, 83, 160, 83, 166, 83, 165, 83, 174, 83, 176, 83, 182, 83, 195, - 124, 18, 150, 217, 83, 223, 102, 252, 113, 238, 83, 238, 83, 232, 83, 237, 83, 250, 84, 1, 84, 61, 84, 64, 84, 44, 84, - 45, 84, 60, 84, 46, 84, 54, 84, 41, 84, 29, 84, 78, 84, 143, 84, 117, 84, 142, 84, 95, 84, 113, 84, 119, 84, 112, 84, - 146, 84, 123, 84, 128, 84, 118, 84, 132, 84, 144, 84, 134, 84, 199, 84, 162, 84, 184, 84, 165, 84, 172, 84, 196, 84, - 200, 84, 168, 84, 171, 84, 194, 84, 164, 84, 190, 84, 188, 84, 216, 84, 229, 84, 230, 85, 15, 85, 20, 84, 253, 84, 238, - 84, 237, 84, 250, 84, 226, 85, 57, 85, 64, 85, 99, 85, 76, 85, 46, 85, 92, 85, 69, 85, 86, 85, 87, 85, 56, 85, 51, 85, - 93, 85, 153, 85, 128, 84, 175, 85, 138, 85, 159, 85, 123, 85, 126, 85, 152, 85, 158, 85, 174, 85, 124, 85, 131, 85, - 169, 85, 135, 85, 168, 85, 218, 85, 197, 85, 223, 85, 196, 85, 220, 85, 228, 85, 212, 86, 20, 85, 247, 86, 22, 85, 254, - 85, 253, 86, 27, 85, 249, 86, 78, 86, 80, 113, 223, 86, 52, 86, 54, 86, 50, 86, 56, 86, 107, 86, 100, 86, 47, 86, 108, - 86, 106, 86, 134, 86, 128, 86, 138, 86, 160, 86, 148, 86, 143, 86, 165, 86, 174, 86, 182, 86, 180, 86, 194, 86, 188, - 86, 193, 86, 195, 86, 192, 86, 200, 86, 206, 86, 209, 86, 211, 86, 215, 86, 238, 86, 249, 87, 0, 86, 255, 87, 4, 87, - 9, 87, 8, 87, 11, 87, 13, 87, 19, 87, 24, 87, 22, 85, 199, 87, 28, 87, 38, 87, 55, 87, 56, 87, 78, 87, 59, 87, 64, 87, - 79, 87, 105, 87, 192, 87, 136, 87, 97, 87, 127, 87, 137, 87, 147, 87, 160, 87, 179, 87, 164, 87, 170, 87, 176, 87, 195, - 87, 198, 87, 212, 87, 210, 87, 211, 88, 10, 87, 214, 87, 227, 88, 11, 88, 25, 88, 29, 88, 114, 88, 33, 88, 98, 88, 75, - 88, 112, 107, 192, 88, 82, 88, 61, 88, 121, 88, 133, 88, 185, 88, 159, 88, 171, 88, 186, 88, 222, 88, 187, 88, 184, - 88, 174, 88, 197, 88, 211, 88, 209, 88, 215, 88, 217, 88, 216, 88, 229, 88, 220, 88, 228, 88, 223, 88, 239, 88, 250, - 88, 249, 88, 251, 88, 252, 88, 253, 89, 2, 89, 10, 89, 16, 89, 27, 104, 166, 89, 37, 89, 44, 89, 45, 89, 50, 89, 56, - 89, 62, 122, 210, 89, 85, 89, 80, 89, 78, 89, 90, 89, 88, 89, 98, 89, 96, 89, 103, 89, 108, 89, 105, 89, 120, 89, 129, - 89, 157, 79, 94, 79, 171, 89, 163, 89, 178, 89, 198, 89, 232, 89, 220, 89, 141, 89, 217, 89, 218, 90, 37, 90, 31, 90, - 17, 90, 28, 90, 9, 90, 26, 90, 64, 90, 108, 90, 73, 90, 53, 90, 54, 90, 98, 90, 106, 90, 154, 90, 188, 90, 190, 90, - 203, 90, 194, 90, 189, 90, 227, 90, 215, 90, 230, 90, 233, 90, 214, 90, 250, 90, 251, 91, 12, 91, 11, 91, 22, 91, 50, - 90, 208, 91, 42, 91, 54, 91, 62, 91, 67, 91, 69, 91, 64, 91, 81, 91, 85, 91, 90, 91, 91, 91, 101, 91, 105, 91, 112, - 91, 115, 91, 117, 91, 120, 101, 136, 91, 122, 91, 128, 91, 131, 91, 166, 91, 184, 91, 195, 91, 199, 91, 201, 91, 212, - 91, 208, 91, 228, 91, 230, 91, 226, 91, 222, 91, 229, 91, 235, 91, 240, 91, 246, 91, 243, 92, 5, 92, 7, 92, 8, 92, 13, - 92, 19, 92, 32, 92, 34, 92, 40, 92, 56, 92, 57, 92, 65, 92, 70, 92, 78, 92, 83, 92, 80, 92, 79, 91, 113, 92, 108, 92, - 110, 78, 98, 92, 118, 92, 121, 92, 140, 92, 145, 92, 148, 89, 155, 92, 171, 92, 187, 92, 182, 92, 188, 92, 183, 92, - 197, 92, 190, 92, 199, 92, 217, 92, 233, 92, 253, 92, 250, 92, 237, 93, 140, 92, 234, 93, 11, 93, 21, 93, 23, 93, 92, - 93, 31, 93, 27, 93, 17, 93, 20, 93, 34, 93, 26, 93, 25, 93, 24, 93, 76, 93, 82, 93, 78, 93, 75, 93, 108, 93, 115, 93, - 118, 93, 135, 93, 132, 93, 130, 93, 162, 93, 157, 93, 172, 93, 174, 93, 189, 93, 144, 93, 183, 93, 188, 93, 201, 93, - 205, 93, 211, 93, 210, 93, 214, 93, 219, 93, 235, 93, 242, 93, 245, 94, 11, 94, 26, 94, 25, 94, 17, 94, 27, 94, 54, - 94, 55, 94, 68, 94, 67, 94, 64, 94, 78, 94, 87, 94, 84, 94, 95, 94, 98, 94, 100, 94, 71, 94, 117, 94, 118, 94, 122, - 158, 188, 94, 127, 94, 160, 94, 193, 94, 194, 94, 200, 94, 208, 94, 207, 94, 214, 94, 227, 94, 221, 94, 218, 94, 219, - 94, 226, 94, 225, 94, 232, 94, 233, 94, 236, 94, 241, 94, 243, 94, 240, 94, 244, 94, 248, 94, 254, 95, 3, 95, 9, 95, - 93, 95, 92, 95, 11, 95, 17, 95, 22, 95, 41, 95, 45, 95, 56, 95, 65, 95, 72, 95, 76, 95, 78, 95, 47, 95, 81, 95, 86, - 95, 87, 95, 89, 95, 97, 95, 109, 95, 115, 95, 119, 95, 131, 95, 130, 95, 127, 95, 138, 95, 136, 95, 145, 95, 135, 95, - 158, 95, 153, 95, 152, 95, 160, 95, 168, 95, 173, 95, 188, 95, 214, 95, 251, 95, 228, 95, 248, 95, 241, 95, 221, 96, - 179, 95, 255, 96, 33, 96, 96, 96, 25, 96, 16, 96, 41, 96, 14, 96, 49, 96, 27, 96, 21, 96, 43, 96, 38, 96, 15, 96, 58, - 96, 90, 96, 65, 96, 106, 96, 119, 96, 95, 96, 74, 96, 70, 96, 77, 96, 99, 96, 67, 96, 100, 96, 66, 96, 108, 96, 107, - 96, 89, 96, 129, 96, 141, 96, 231, 96, 131, 96, 154, 96, 132, 96, 155, 96, 150, 96, 151, 96, 146, 96, 167, 96, 139, - 96, 225, 96, 184, 96, 224, 96, 211, 96, 180, 95, 240, 96, 189, 96, 198, 96, 181, 96, 216, 97, 77, 97, 21, 97, 6, 96, - 246, 96, 247, 97, 0, 96, 244, 96, 250, 97, 3, 97, 33, 96, 251, 96, 241, 97, 13, 97, 14, 97, 71, 97, 62, 97, 40, 97, - 39, 97, 74, 97, 63, 97, 60, 97, 44, 97, 52, 97, 61, 97, 66, 97, 68, 97, 115, 97, 119, 97, 88, 97, 89, 97, 90, 97, 107, - 97, 116, 97, 111, 97, 101, 97, 113, 97, 95, 97, 93, 97, 83, 97, 117, 97, 153, 97, 150, 97, 135, 97, 172, 97, 148, 97, - 154, 97, 138, 97, 145, 97, 171, 97, 174, 97, 204, 97, 202, 97, 201, 97, 247, 97, 200, 97, 195, 97, 198, 97, 186, 97, - 203, 127, 121, 97, 205, 97, 230, 97, 227, 97, 246, 97, 250, 97, 244, 97, 255, 97, 253, 97, 252, 97, 254, 98, 0, 98, - 8, 98, 9, 98, 13, 98, 12, 98, 20, 98, 27, 98, 30, 98, 33, 98, 42, 98, 46, 98, 48, 98, 50, 98, 51, 98, 65, 98, 78, 98, - 94, 98, 99, 98, 91, 98, 96, 98, 104, 98, 124, 98, 130, 98, 137, 98, 126, 98, 146, 98, 147, 98, 150, 98, 212, 98, 131, - 98, 148, 98, 215, 98, 209, 98, 187, 98, 207, 98, 255, 98, 198, 100, 212, 98, 200, 98, 220, 98, 204, 98, 202, 98, 194, - 98, 199, 98, 155, 98, 201, 99, 12, 98, 238, 98, 241, 99, 39, 99, 2, 99, 8, 98, 239, 98, 245, 99, 80, 99, 62, 99, 77, - 100, 28, 99, 79, 99, 150, 99, 142, 99, 128, 99, 171, 99, 118, 99, 163, 99, 143, 99, 137, 99, 159, 99, 181, 99, 107, - 99, 105, 99, 190, 99, 233, 99, 192, 99, 198, 99, 227, 99, 201, 99, 210, 99, 246, 99, 196, 100, 22, 100, 52, 100, 6, - 100, 19, 100, 38, 100, 54, 101, 29, 100, 23, 100, 40, 100, 15, 100, 103, 100, 111, 100, 118, 100, 78, 101, 42, 100, - 149, 100, 147, 100, 165, 100, 169, 100, 136, 100, 188, 100, 218, 100, 210, 100, 197, 100, 199, 100, 187, 100, 216, 100, - 194, 100, 241, 100, 231, 130, 9, 100, 224, 100, 225, 98, 172, 100, 227, 100, 239, 101, 44, 100, 246, 100, 244, 100, - 242, 100, 250, 101, 0, 100, 253, 101, 24, 101, 28, 101, 5, 101, 36, 101, 35, 101, 43, 101, 52, 101, 53, 101, 55, 101, - 54, 101, 56, 117, 75, 101, 72, 101, 86, 101, 85, 101, 77, 101, 88, 101, 94, 101, 93, 101, 114, 101, 120, 101, 130, 101, - 131, 139, 138, 101, 155, 101, 159, 101, 171, 101, 183, 101, 195, 101, 198, 101, 193, 101, 196, 101, 204, 101, 210, 101, - 219, 101, 217, 101, 224, 101, 225, 101, 241, 103, 114, 102, 10, 102, 3, 101, 251, 103, 115, 102, 53, 102, 54, 102, 52, - 102, 28, 102, 79, 102, 68, 102, 73, 102, 65, 102, 94, 102, 93, 102, 100, 102, 103, 102, 104, 102, 95, 102, 98, 102, - 112, 102, 131, 102, 136, 102, 142, 102, 137, 102, 132, 102, 152, 102, 157, 102, 193, 102, 185, 102, 201, 102, 190, 102, - 188, 102, 196, 102, 184, 102, 214, 102, 218, 102, 224, 102, 63, 102, 230, 102, 233, 102, 240, 102, 245, 102, 247, 103, - 15, 103, 22, 103, 30, 103, 38, 103, 39, 151, 56, 103, 46, 103, 63, 103, 54, 103, 65, 103, 56, 103, 55, 103, 70, 103, - 94, 103, 96, 103, 89, 103, 99, 103, 100, 103, 137, 103, 112, 103, 169, 103, 124, 103, 106, 103, 140, 103, 139, 103, - 166, 103, 161, 103, 133, 103, 183, 103, 239, 103, 180, 103, 236, 103, 179, 103, 233, 103, 184, 103, 228, 103, 222, 103, - 221, 103, 226, 103, 238, 103, 185, 103, 206, 103, 198, 103, 231, 106, 156, 104, 30, 104, 70, 104, 41, 104, 64, 104, - 77, 104, 50, 104, 78, 104, 179, 104, 43, 104, 89, 104, 99, 104, 119, 104, 127, 104, 159, 104, 143, 104, 173, 104, 148, - 104, 157, 104, 155, 104, 131, 106, 174, 104, 185, 104, 116, 104, 181, 104, 160, 104, 186, 105, 15, 104, 141, 104, 126, - 105, 1, 104, 202, 105, 8, 104, 216, 105, 34, 105, 38, 104, 225, 105, 12, 104, 205, 104, 212, 104, 231, 104, 213, 105, - 54, 105, 18, 105, 4, 104, 215, 104, 227, 105, 37, 104, 249, 104, 224, 104, 239, 105, 40, 105, 42, 105, 26, 105, 35, - 105, 33, 104, 198, 105, 121, 105, 119, 105, 92, 105, 120, 105, 107, 105, 84, 105, 126, 105, 110, 105, 57, 105, 116, - 105, 61, 105, 89, 105, 48, 105, 97, 105, 94, 105, 93, 105, 129, 105, 106, 105, 178, 105, 174, 105, 208, 105, 191, 105, - 193, 105, 211, 105, 190, 105, 206, 91, 232, 105, 202, 105, 221, 105, 187, 105, 195, 105, 167, 106, 46, 105, 145, 105, - 160, 105, 156, 105, 149, 105, 180, 105, 222, 105, 232, 106, 2, 106, 27, 105, 255, 107, 10, 105, 249, 105, 242, 105, - 231, 106, 5, 105, 177, 106, 30, 105, 237, 106, 20, 105, 235, 106, 10, 106, 18, 106, 193, 106, 35, 106, 19, 106, 68, - 106, 12, 106, 114, 106, 54, 106, 120, 106, 71, 106, 98, 106, 89, 106, 102, 106, 72, 106, 56, 106, 34, 106, 144, 106, - 141, 106, 160, 106, 132, 106, 162, 106, 163, 106, 151, 134, 23, 106, 187, 106, 195, 106, 194, 106, 184, 106, 179, 106, - 172, 106, 222, 106, 209, 106, 223, 106, 170, 106, 218, 106, 234, 106, 251, 107, 5, 134, 22, 106, 250, 107, 18, 107, - 22, 155, 49, 107, 31, 107, 56, 107, 55, 118, 220, 107, 57, 152, 238, 107, 71, 107, 67, 107, 73, 107, 80, 107, 89, 107, - 84, 107, 91, 107, 95, 107, 97, 107, 120, 107, 121, 107, 127, 107, 128, 107, 132, 107, 131, 107, 141, 107, 152, 107, - 149, 107, 158, 107, 164, 107, 170, 107, 171, 107, 175, 107, 178, 107, 177, 107, 179, 107, 183, 107, 188, 107, 198, 107, - 203, 107, 211, 107, 223, 107, 236, 107, 235, 107, 243, 107, 239, 158, 190, 108, 8, 108, 19, 108, 20, 108, 27, 108, 36, - 108, 35, 108, 94, 108, 85, 108, 98, 108, 106, 108, 130, 108, 141, 108, 154, 108, 129, 108, 155, 108, 126, 108, 104, - 108, 115, 108, 146, 108, 144, 108, 196, 108, 241, 108, 211, 108, 189, 108, 215, 108, 197, 108, 221, 108, 174, 108, 177, - 108, 190, 108, 186, 108, 219, 108, 239, 108, 217, 108, 234, 109, 31, 136, 77, 109, 54, 109, 43, 109, 61, 109, 56, 109, - 25, 109, 53, 109, 51, 109, 18, 109, 12, 109, 99, 109, 147, 109, 100, 109, 90, 109, 121, 109, 89, 109, 142, 109, 149, - 111, 228, 109, 133, 109, 249, 110, 21, 110, 10, 109, 181, 109, 199, 109, 230, 109, 184, 109, 198, 109, 236, 109, 222, - 109, 204, 109, 232, 109, 210, 109, 197, 109, 250, 109, 217, 109, 228, 109, 213, 109, 234, 109, 238, 110, 45, 110, 110, - 110, 46, 110, 25, 110, 114, 110, 95, 110, 62, 110, 35, 110, 107, 110, 43, 110, 118, 110, 77, 110, 31, 110, 67, 110, - 58, 110, 78, 110, 36, 110, 255, 110, 29, 110, 56, 110, 130, 110, 170, 110, 152, 110, 201, 110, 183, 110, 211, 110, 189, - 110, 175, 110, 196, 110, 178, 110, 212, 110, 213, 110, 143, 110, 165, 110, 194, 110, 159, 111, 65, 111, 17, 112, 76, - 110, 236, 110, 248, 110, 254, 111, 63, 110, 242, 111, 49, 110, 239, 111, 50, 110, 204, 111, 62, 111, 19, 110, 247, 111, - 134, 111, 122, 111, 120, 111, 129, 111, 128, 111, 111, 111, 91, 111, 243, 111, 109, 111, 130, 111, 124, 111, 88, 111, - 142, 111, 145, 111, 194, 111, 102, 111, 179, 111, 163, 111, 161, 111, 164, 111, 185, 111, 198, 111, 170, 111, 223, 111, - 213, 111, 236, 111, 212, 111, 216, 111, 241, 111, 238, 111, 219, 112, 9, 112, 11, 111, 250, 112, 17, 112, 1, 112, 15, - 111, 254, 112, 27, 112, 26, 111, 116, 112, 29, 112, 24, 112, 31, 112, 48, 112, 62, 112, 50, 112, 81, 112, 99, 112, 153, - 112, 146, 112, 175, 112, 241, 112, 172, 112, 184, 112, 179, 112, 174, 112, 223, 112, 203, 112, 221, 112, 217, 113, 9, - 112, 253, 113, 28, 113, 25, 113, 101, 113, 85, 113, 136, 113, 102, 113, 98, 113, 76, 113, 86, 113, 108, 113, 143, 113, - 251, 113, 132, 113, 149, 113, 168, 113, 172, 113, 215, 113, 185, 113, 190, 113, 210, 113, 201, 113, 212, 113, 206, 113, - 224, 113, 236, 113, 231, 113, 245, 113, 252, 113, 249, 113, 255, 114, 13, 114, 16, 114, 27, 114, 40, 114, 45, 114, 44, - 114, 48, 114, 50, 114, 59, 114, 60, 114, 63, 114, 64, 114, 70, 114, 75, 114, 88, 114, 116, 114, 126, 114, 130, 114, - 129, 114, 135, 114, 146, 114, 150, 114, 162, 114, 167, 114, 185, 114, 178, 114, 195, 114, 198, 114, 196, 114, 206, 114, - 210, 114, 226, 114, 224, 114, 225, 114, 249, 114, 247, 80, 15, 115, 23, 115, 10, 115, 28, 115, 22, 115, 29, 115, 52, - 115, 47, 115, 41, 115, 37, 115, 62, 115, 78, 115, 79, 158, 216, 115, 87, 115, 106, 115, 104, 115, 112, 115, 120, 115, - 117, 115, 123, 115, 122, 115, 200, 115, 179, 115, 206, 115, 187, 115, 192, 115, 229, 115, 238, 115, 222, 116, 162, 116, - 5, 116, 111, 116, 37, 115, 248, 116, 50, 116, 58, 116, 85, 116, 63, 116, 95, 116, 89, 116, 65, 116, 92, 116, 105, 116, - 112, 116, 99, 116, 106, 116, 118, 116, 126, 116, 139, 116, 158, 116, 167, 116, 202, 116, 207, 116, 212, 115, 241, 116, - 224, 116, 227, 116, 231, 116, 233, 116, 238, 116, 242, 116, 240, 116, 241, 116, 248, 116, 247, 117, 4, 117, 3, 117, - 5, 117, 12, 117, 14, 117, 13, 117, 21, 117, 19, 117, 30, 117, 38, 117, 44, 117, 60, 117, 68, 117, 77, 117, 74, 117, - 73, 117, 91, 117, 70, 117, 90, 117, 105, 117, 100, 117, 103, 117, 107, 117, 109, 117, 120, 117, 118, 117, 134, 117, - 135, 117, 116, 117, 138, 117, 137, 117, 130, 117, 148, 117, 154, 117, 157, 117, 165, 117, 163, 117, 194, 117, 179, 117, - 195, 117, 181, 117, 189, 117, 184, 117, 188, 117, 177, 117, 205, 117, 202, 117, 210, 117, 217, 117, 227, 117, 222, 117, - 254, 117, 255, 117, 252, 118, 1, 117, 240, 117, 250, 117, 242, 117, 243, 118, 11, 118, 13, 118, 9, 118, 31, 118, 39, - 118, 32, 118, 33, 118, 34, 118, 36, 118, 52, 118, 48, 118, 59, 118, 71, 118, 72, 118, 70, 118, 92, 118, 88, 118, 97, - 118, 98, 118, 104, 118, 105, 118, 106, 118, 103, 118, 108, 118, 112, 118, 114, 118, 118, 118, 120, 118, 124, 118, 128, - 118, 131, 118, 136, 118, 139, 118, 142, 118, 150, 118, 147, 118, 153, 118, 154, 118, 176, 118, 180, 118, 184, 118, 185, - 118, 186, 118, 194, 118, 205, 118, 214, 118, 210, 118, 222, 118, 225, 118, 229, 118, 231, 118, 234, 134, 47, 118, 251, - 119, 8, 119, 7, 119, 4, 119, 41, 119, 36, 119, 30, 119, 37, 119, 38, 119, 27, 119, 55, 119, 56, 119, 71, 119, 90, 119, - 104, 119, 107, 119, 91, 119, 101, 119, 127, 119, 126, 119, 121, 119, 142, 119, 139, 119, 145, 119, 160, 119, 158, 119, - 176, 119, 182, 119, 185, 119, 191, 119, 188, 119, 189, 119, 187, 119, 199, 119, 205, 119, 215, 119, 218, 119, 220, 119, - 227, 119, 238, 119, 252, 120, 12, 120, 18, 121, 38, 120, 32, 121, 42, 120, 69, 120, 142, 120, 116, 120, 134, 120, 124, - 120, 154, 120, 140, 120, 163, 120, 181, 120, 170, 120, 175, 120, 209, 120, 198, 120, 203, 120, 212, 120, 190, 120, 188, - 120, 197, 120, 202, 120, 236, 120, 231, 120, 218, 120, 253, 120, 244, 121, 7, 121, 18, 121, 17, 121, 25, 121, 44, 121, - 43, 121, 64, 121, 96, 121, 87, 121, 95, 121, 90, 121, 85, 121, 83, 121, 122, 121, 127, 121, 138, 121, 157, 121, 167, - 159, 75, 121, 170, 121, 174, 121, 179, 121, 185, 121, 186, 121, 201, 121, 213, 121, 231, 121, 236, 121, 225, 121, 227, - 122, 8, 122, 13, 122, 24, 122, 25, 122, 32, 122, 31, 121, 128, 122, 49, 122, 59, 122, 62, 122, 55, 122, 67, 122, 87, - 122, 73, 122, 97, 122, 98, 122, 105, 159, 157, 122, 112, 122, 121, 122, 125, 122, 136, 122, 151, 122, 149, 122, 152, - 122, 150, 122, 169, 122, 200, 122, 176, 122, 182, 122, 197, 122, 196, 122, 191, 144, 131, 122, 199, 122, 202, 122, 205, - 122, 207, 122, 213, 122, 211, 122, 217, 122, 218, 122, 221, 122, 225, 122, 226, 122, 230, 122, 237, 122, 240, 123, 2, - 123, 15, 123, 10, 123, 6, 123, 51, 123, 24, 123, 25, 123, 30, 123, 53, 123, 40, 123, 54, 123, 80, 123, 122, 123, 4, - 123, 77, 123, 11, 123, 76, 123, 69, 123, 117, 123, 101, 123, 116, 123, 103, 123, 112, 123, 113, 123, 108, 123, 110, - 123, 157, 123, 152, 123, 159, 123, 141, 123, 156, 123, 154, 123, 139, 123, 146, 123, 143, 123, 93, 123, 153, 123, 203, - 123, 193, 123, 204, 123, 207, 123, 180, 123, 198, 123, 221, 123, 233, 124, 17, 124, 20, 123, 230, 123, 229, 124, 96, - 124, 0, 124, 7, 124, 19, 123, 243, 123, 247, 124, 23, 124, 13, 123, 246, 124, 35, 124, 39, 124, 42, 124, 31, 124, 55, - 124, 43, 124, 61, 124, 76, 124, 67, 124, 84, 124, 79, 124, 64, 124, 80, 124, 88, 124, 95, 124, 100, 124, 86, 124, 101, - 124, 108, 124, 117, 124, 131, 124, 144, 124, 164, 124, 173, 124, 162, 124, 171, 124, 161, 124, 168, 124, 179, 124, 178, - 124, 177, 124, 174, 124, 185, 124, 189, 124, 192, 124, 197, 124, 194, 124, 216, 124, 210, 124, 220, 124, 226, 155, 59, - 124, 239, 124, 242, 124, 244, 124, 246, 124, 250, 125, 6, 125, 2, 125, 28, 125, 21, 125, 10, 125, 69, 125, 75, 125, - 46, 125, 50, 125, 63, 125, 53, 125, 70, 125, 115, 125, 86, 125, 78, 125, 114, 125, 104, 125, 110, 125, 79, 125, 99, - 125, 147, 125, 137, 125, 91, 125, 143, 125, 125, 125, 155, 125, 186, 125, 174, 125, 163, 125, 181, 125, 199, 125, 189, - 125, 171, 126, 61, 125, 162, 125, 175, 125, 220, 125, 184, 125, 159, 125, 176, 125, 216, 125, 221, 125, 228, 125, 222, - 125, 251, 125, 242, 125, 225, 126, 5, 126, 10, 126, 35, 126, 33, 126, 18, 126, 49, 126, 31, 126, 9, 126, 11, 126, 34, - 126, 70, 126, 102, 126, 59, 126, 53, 126, 57, 126, 67, 126, 55, 126, 50, 126, 58, 126, 103, 126, 93, 126, 86, 126, 94, - 126, 89, 126, 90, 126, 121, 126, 106, 126, 105, 126, 124, 126, 123, 126, 131, 125, 213, 126, 125, 143, 174, 126, 127, - 126, 136, 126, 137, 126, 140, 126, 146, 126, 144, 126, 147, 126, 148, 126, 150, 126, 142, 126, 155, 126, 156, 127, 56, - 127, 58, 127, 69, 127, 76, 127, 77, 127, 78, 127, 80, 127, 81, 127, 85, 127, 84, 127, 88, 127, 95, 127, 96, 127, 104, - 127, 105, 127, 103, 127, 120, 127, 130, 127, 134, 127, 131, 127, 136, 127, 135, 127, 140, 127, 148, 127, 158, 127, 157, - 127, 154, 127, 163, 127, 175, 127, 178, 127, 185, 127, 174, 127, 182, 127, 184, 139, 113, 127, 197, 127, 198, 127, 202, - 127, 213, 127, 212, 127, 225, 127, 230, 127, 233, 127, 243, 127, 249, 152, 220, 128, 6, 128, 4, 128, 11, 128, 18, 128, - 24, 128, 25, 128, 28, 128, 33, 128, 40, 128, 63, 128, 59, 128, 74, 128, 70, 128, 82, 128, 88, 128, 90, 128, 95, 128, - 98, 128, 104, 128, 115, 128, 114, 128, 112, 128, 118, 128, 121, 128, 125, 128, 127, 128, 132, 128, 134, 128, 133, 128, - 155, 128, 147, 128, 154, 128, 173, 81, 144, 128, 172, 128, 219, 128, 229, 128, 217, 128, 221, 128, 196, 128, 218, 128, - 214, 129, 9, 128, 239, 128, 241, 129, 27, 129, 41, 129, 35, 129, 47, 129, 75, 150, 139, 129, 70, 129, 62, 129, 83, 129, - 81, 128, 252, 129, 113, 129, 110, 129, 101, 129, 102, 129, 116, 129, 131, 129, 136, 129, 138, 129, 128, 129, 130, 129, - 160, 129, 149, 129, 164, 129, 163, 129, 95, 129, 147, 129, 169, 129, 176, 129, 181, 129, 190, 129, 184, 129, 189, 129, - 192, 129, 194, 129, 186, 129, 201, 129, 205, 129, 209, 129, 217, 129, 216, 129, 200, 129, 218, 129, 223, 129, 224, 129, - 231, 129, 250, 129, 251, 129, 254, 130, 1, 130, 2, 130, 5, 130, 7, 130, 10, 130, 13, 130, 16, 130, 22, 130, 41, 130, - 43, 130, 56, 130, 51, 130, 64, 130, 89, 130, 88, 130, 93, 130, 90, 130, 95, 130, 100, 130, 98, 130, 104, 130, 106, 130, - 107, 130, 46, 130, 113, 130, 119, 130, 120, 130, 126, 130, 141, 130, 146, 130, 171, 130, 159, 130, 187, 130, 172, 130, - 225, 130, 227, 130, 223, 130, 210, 130, 244, 130, 243, 130, 250, 131, 147, 131, 3, 130, 251, 130, 249, 130, 222, 131, - 6, 130, 220, 131, 9, 130, 217, 131, 53, 131, 52, 131, 22, 131, 50, 131, 49, 131, 64, 131, 57, 131, 80, 131, 69, 131, - 47, 131, 43, 131, 23, 131, 24, 131, 133, 131, 154, 131, 170, 131, 159, 131, 162, 131, 150, 131, 35, 131, 142, 131, 135, - 131, 138, 131, 124, 131, 181, 131, 115, 131, 117, 131, 160, 131, 137, 131, 168, 131, 244, 132, 19, 131, 235, 131, 206, - 131, 253, 132, 3, 131, 216, 132, 11, 131, 193, 131, 247, 132, 7, 131, 224, 131, 242, 132, 13, 132, 34, 132, 32, 131, - 189, 132, 56, 133, 6, 131, 251, 132, 109, 132, 42, 132, 60, 133, 90, 132, 132, 132, 119, 132, 107, 132, 173, 132, 110, - 132, 130, 132, 105, 132, 70, 132, 44, 132, 111, 132, 121, 132, 53, 132, 202, 132, 98, 132, 185, 132, 191, 132, 159, - 132, 217, 132, 205, 132, 187, 132, 218, 132, 208, 132, 193, 132, 198, 132, 214, 132, 161, 133, 33, 132, 255, 132, 244, - 133, 23, 133, 24, 133, 44, 133, 31, 133, 21, 133, 20, 132, 252, 133, 64, 133, 99, 133, 88, 133, 72, 133, 65, 134, 2, - 133, 75, 133, 85, 133, 128, 133, 164, 133, 136, 133, 145, 133, 138, 133, 168, 133, 109, 133, 148, 133, 155, 133, 234, - 133, 135, 133, 156, 133, 119, 133, 126, 133, 144, 133, 201, 133, 186, 133, 207, 133, 185, 133, 208, 133, 213, 133, 221, - 133, 229, 133, 220, 133, 249, 134, 10, 134, 19, 134, 11, 133, 254, 133, 250, 134, 6, 134, 34, 134, 26, 134, 48, 134, - 63, 134, 77, 78, 85, 134, 84, 134, 95, 134, 103, 134, 113, 134, 147, 134, 163, 134, 169, 134, 170, 134, 139, 134, 140, - 134, 182, 134, 175, 134, 196, 134, 198, 134, 176, 134, 201, 136, 35, 134, 171, 134, 212, 134, 222, 134, 233, 134, 236, - 134, 223, 134, 219, 134, 239, 135, 18, 135, 6, 135, 8, 135, 0, 135, 3, 134, 251, 135, 17, 135, 9, 135, 13, 134, 249, - 135, 10, 135, 52, 135, 63, 135, 55, 135, 59, 135, 37, 135, 41, 135, 26, 135, 96, 135, 95, 135, 120, 135, 76, 135, 78, - 135, 116, 135, 87, 135, 104, 135, 110, 135, 89, 135, 83, 135, 99, 135, 106, 136, 5, 135, 162, 135, 159, 135, 130, 135, - 175, 135, 203, 135, 189, 135, 192, 135, 208, 150, 214, 135, 171, 135, 196, 135, 179, 135, 199, 135, 198, 135, 187, 135, - 239, 135, 242, 135, 224, 136, 15, 136, 13, 135, 254, 135, 246, 135, 247, 136, 14, 135, 210, 136, 17, 136, 22, 136, 21, - 136, 34, 136, 33, 136, 49, 136, 54, 136, 57, 136, 39, 136, 59, 136, 68, 136, 66, 136, 82, 136, 89, 136, 94, 136, 98, - 136, 107, 136, 129, 136, 126, 136, 158, 136, 117, 136, 125, 136, 181, 136, 114, 136, 130, 136, 151, 136, 146, 136, 174, - 136, 153, 136, 162, 136, 141, 136, 164, 136, 176, 136, 191, 136, 177, 136, 195, 136, 196, 136, 212, 136, 216, 136, 217, - 136, 221, 136, 249, 137, 2, 136, 252, 136, 244, 136, 232, 136, 242, 137, 4, 137, 12, 137, 10, 137, 19, 137, 67, 137, - 30, 137, 37, 137, 42, 137, 43, 137, 65, 137, 68, 137, 59, 137, 54, 137, 56, 137, 76, 137, 29, 137, 96, 137, 94, 137, - 102, 137, 100, 137, 109, 137, 106, 137, 111, 137, 116, 137, 119, 137, 126, 137, 131, 137, 136, 137, 138, 137, 147, 137, - 152, 137, 161, 137, 169, 137, 166, 137, 172, 137, 175, 137, 178, 137, 186, 137, 189, 137, 191, 137, 192, 137, 218, 137, - 220, 137, 221, 137, 231, 137, 244, 137, 248, 138, 3, 138, 22, 138, 16, 138, 12, 138, 27, 138, 29, 138, 37, 138, 54, - 138, 65, 138, 91, 138, 82, 138, 70, 138, 72, 138, 124, 138, 109, 138, 108, 138, 98, 138, 133, 138, 130, 138, 132, 138, - 168, 138, 161, 138, 145, 138, 165, 138, 166, 138, 154, 138, 163, 138, 196, 138, 205, 138, 194, 138, 218, 138, 235, 138, - 243, 138, 231, 138, 228, 138, 241, 139, 20, 138, 224, 138, 226, 138, 247, 138, 222, 138, 219, 139, 12, 139, 7, 139, - 26, 138, 225, 139, 22, 139, 16, 139, 23, 139, 32, 139, 51, 151, 171, 139, 38, 139, 43, 139, 62, 139, 40, 139, 65, 139, - 76, 139, 79, 139, 78, 139, 73, 139, 86, 139, 91, 139, 90, 139, 107, 139, 95, 139, 108, 139, 111, 139, 116, 139, 125, - 139, 128, 139, 140, 139, 142, 139, 146, 139, 147, 139, 150, 139, 153, 139, 154, 140, 58, 140, 65, 140, 63, 140, 72, - 140, 76, 140, 78, 140, 80, 140, 85, 140, 98, 140, 108, 140, 120, 140, 122, 140, 130, 140, 137, 140, 133, 140, 138, 140, - 141, 140, 142, 140, 148, 140, 124, 140, 152, 98, 29, 140, 173, 140, 170, 140, 189, 140, 178, 140, 179, 140, 174, 140, - 182, 140, 200, 140, 193, 140, 228, 140, 227, 140, 218, 140, 253, 140, 250, 140, 251, 141, 4, 141, 5, 141, 10, 141, 7, - 141, 15, 141, 13, 141, 16, 159, 78, 141, 19, 140, 205, 141, 20, 141, 22, 141, 103, 141, 109, 141, 113, 141, 115, 141, - 129, 141, 153, 141, 194, 141, 190, 141, 186, 141, 207, 141, 218, 141, 214, 141, 204, 141, 219, 141, 203, 141, 234, 141, - 235, 141, 223, 141, 227, 141, 252, 142, 8, 142, 9, 141, 255, 142, 29, 142, 30, 142, 16, 142, 31, 142, 66, 142, 53, 142, - 48, 142, 52, 142, 74, 142, 71, 142, 73, 142, 76, 142, 80, 142, 72, 142, 89, 142, 100, 142, 96, 142, 42, 142, 99, 142, - 85, 142, 118, 142, 114, 142, 124, 142, 129, 142, 135, 142, 133, 142, 132, 142, 139, 142, 138, 142, 147, 142, 145, 142, - 148, 142, 153, 142, 170, 142, 161, 142, 172, 142, 176, 142, 198, 142, 177, 142, 190, 142, 197, 142, 200, 142, 203, 142, - 219, 142, 227, 142, 252, 142, 251, 142, 235, 142, 254, 143, 10, 143, 5, 143, 21, 143, 18, 143, 25, 143, 19, 143, 28, - 143, 31, 143, 27, 143, 12, 143, 38, 143, 51, 143, 59, 143, 57, 143, 69, 143, 66, 143, 62, 143, 76, 143, 73, 143, 70, - 143, 78, 143, 87, 143, 92, 143, 98, 143, 99, 143, 100, 143, 156, 143, 159, 143, 163, 143, 173, 143, 175, 143, 183, 143, - 218, 143, 229, 143, 226, 143, 234, 143, 239, 144, 135, 143, 244, 144, 5, 143, 249, 143, 250, 144, 17, 144, 21, 144, - 33, 144, 13, 144, 30, 144, 22, 144, 11, 144, 39, 144, 54, 144, 53, 144, 57, 143, 248, 144, 79, 144, 80, 144, 81, 144, - 82, 144, 14, 144, 73, 144, 62, 144, 86, 144, 88, 144, 94, 144, 104, 144, 111, 144, 118, 150, 168, 144, 114, 144, 130, - 144, 125, 144, 129, 144, 128, 144, 138, 144, 137, 144, 143, 144, 168, 144, 175, 144, 177, 144, 181, 144, 226, 144, 228, - 98, 72, 144, 219, 145, 2, 145, 18, 145, 25, 145, 50, 145, 48, 145, 74, 145, 86, 145, 88, 145, 99, 145, 101, 145, 105, - 145, 115, 145, 114, 145, 139, 145, 137, 145, 130, 145, 162, 145, 171, 145, 175, 145, 170, 145, 181, 145, 180, 145, 186, - 145, 192, 145, 193, 145, 201, 145, 203, 145, 208, 145, 214, 145, 223, 145, 225, 145, 219, 145, 252, 145, 245, 145, 246, - 146, 30, 145, 255, 146, 20, 146, 44, 146, 21, 146, 17, 146, 94, 146, 87, 146, 69, 146, 73, 146, 100, 146, 72, 146, 149, - 146, 63, 146, 75, 146, 80, 146, 156, 146, 150, 146, 147, 146, 155, 146, 90, 146, 207, 146, 185, 146, 183, 146, 233, - 147, 15, 146, 250, 147, 68, 147, 46, 147, 25, 147, 34, 147, 26, 147, 35, 147, 58, 147, 53, 147, 59, 147, 92, 147, 96, - 147, 124, 147, 110, 147, 86, 147, 176, 147, 172, 147, 173, 147, 148, 147, 185, 147, 214, 147, 215, 147, 232, 147, 229, - 147, 216, 147, 195, 147, 221, 147, 208, 147, 200, 147, 228, 148, 26, 148, 20, 148, 19, 148, 3, 148, 7, 148, 16, 148, - 54, 148, 43, 148, 53, 148, 33, 148, 58, 148, 65, 148, 82, 148, 68, 148, 91, 148, 96, 148, 98, 148, 94, 148, 106, 146, - 41, 148, 112, 148, 117, 148, 119, 148, 125, 148, 90, 148, 124, 148, 126, 148, 129, 148, 127, 149, 130, 149, 135, 149, - 138, 149, 148, 149, 150, 149, 152, 149, 153, 149, 160, 149, 168, 149, 167, 149, 173, 149, 188, 149, 187, 149, 185, 149, - 190, 149, 202, 111, 246, 149, 195, 149, 205, 149, 204, 149, 213, 149, 212, 149, 214, 149, 220, 149, 225, 149, 229, 149, - 226, 150, 33, 150, 40, 150, 46, 150, 47, 150, 66, 150, 76, 150, 79, 150, 75, 150, 119, 150, 92, 150, 94, 150, 93, 150, - 95, 150, 102, 150, 114, 150, 108, 150, 141, 150, 152, 150, 149, 150, 151, 150, 170, 150, 167, 150, 177, 150, 178, 150, - 176, 150, 180, 150, 182, 150, 184, 150, 185, 150, 206, 150, 203, 150, 201, 150, 205, 137, 77, 150, 220, 151, 13, 150, - 213, 150, 249, 151, 4, 151, 6, 151, 8, 151, 19, 151, 14, 151, 17, 151, 15, 151, 22, 151, 25, 151, 36, 151, 42, 151, - 48, 151, 57, 151, 61, 151, 62, 151, 68, 151, 70, 151, 72, 151, 66, 151, 73, 151, 92, 151, 96, 151, 100, 151, 102, 151, - 104, 82, 210, 151, 107, 151, 113, 151, 121, 151, 133, 151, 124, 151, 129, 151, 122, 151, 134, 151, 139, 151, 143, 151, - 144, 151, 156, 151, 168, 151, 166, 151, 163, 151, 179, 151, 180, 151, 195, 151, 198, 151, 200, 151, 203, 151, 220, 151, - 237, 159, 79, 151, 242, 122, 223, 151, 246, 151, 245, 152, 15, 152, 12, 152, 56, 152, 36, 152, 33, 152, 55, 152, 61, - 152, 70, 152, 79, 152, 75, 152, 107, 152, 111, 152, 112, 152, 113, 152, 116, 152, 115, 152, 170, 152, 175, 152, 177, - 152, 182, 152, 196, 152, 195, 152, 198, 152, 233, 152, 235, 153, 3, 153, 9, 153, 18, 153, 20, 153, 24, 153, 33, 153, - 29, 153, 30, 153, 36, 153, 32, 153, 44, 153, 46, 153, 61, 153, 62, 153, 66, 153, 73, 153, 69, 153, 80, 153, 75, 153, - 81, 153, 82, 153, 76, 153, 85, 153, 151, 153, 152, 153, 165, 153, 173, 153, 174, 153, 188, 153, 223, 153, 219, 153, - 221, 153, 216, 153, 209, 153, 237, 153, 238, 153, 241, 153, 242, 153, 251, 153, 248, 154, 1, 154, 15, 154, 5, 153, 226, - 154, 25, 154, 43, 154, 55, 154, 69, 154, 66, 154, 64, 154, 67, 154, 62, 154, 85, 154, 77, 154, 91, 154, 87, 154, 95, - 154, 98, 154, 101, 154, 100, 154, 105, 154, 107, 154, 106, 154, 173, 154, 176, 154, 188, 154, 192, 154, 207, 154, 209, - 154, 211, 154, 212, 154, 222, 154, 223, 154, 226, 154, 227, 154, 230, 154, 239, 154, 235, 154, 238, 154, 244, 154, 241, - 154, 247, 154, 251, 155, 6, 155, 24, 155, 26, 155, 31, 155, 34, 155, 35, 155, 37, 155, 39, 155, 40, 155, 41, 155, 42, - 155, 46, 155, 47, 155, 50, 155, 68, 155, 67, 155, 79, 155, 77, 155, 78, 155, 81, 155, 88, 155, 116, 155, 147, 155, 131, - 155, 145, 155, 150, 155, 151, 155, 159, 155, 160, 155, 168, 155, 180, 155, 192, 155, 202, 155, 185, 155, 198, 155, 207, - 155, 209, 155, 210, 155, 227, 155, 226, 155, 228, 155, 212, 155, 225, 156, 58, 155, 242, 155, 241, 155, 240, 156, 21, - 156, 20, 156, 9, 156, 19, 156, 12, 156, 6, 156, 8, 156, 18, 156, 10, 156, 4, 156, 46, 156, 27, 156, 37, 156, 36, 156, - 33, 156, 48, 156, 71, 156, 50, 156, 70, 156, 62, 156, 90, 156, 96, 156, 103, 156, 118, 156, 120, 156, 231, 156, 236, - 156, 240, 157, 9, 157, 8, 156, 235, 157, 3, 157, 6, 157, 42, 157, 38, 157, 175, 157, 35, 157, 31, 157, 68, 157, 21, - 157, 18, 157, 65, 157, 63, 157, 62, 157, 70, 157, 72, 157, 93, 157, 94, 157, 100, 157, 81, 157, 80, 157, 89, 157, 114, - 157, 137, 157, 135, 157, 171, 157, 111, 157, 122, 157, 154, 157, 164, 157, 169, 157, 178, 157, 196, 157, 193, 157, 187, - 157, 184, 157, 186, 157, 198, 157, 207, 157, 194, 157, 217, 157, 211, 157, 248, 157, 230, 157, 237, 157, 239, 157, 253, - 158, 26, 158, 27, 158, 30, 158, 117, 158, 121, 158, 125, 158, 129, 158, 136, 158, 139, 158, 140, 158, 146, 158, 149, - 158, 145, 158, 157, 158, 165, 158, 169, 158, 184, 158, 170, 158, 173, 151, 97, 158, 204, 158, 206, 158, 207, 158, 208, - 158, 212, 158, 220, 158, 222, 158, 221, 158, 224, 158, 229, 158, 232, 158, 239, 158, 244, 158, 246, 158, 247, 158, 249, - 158, 251, 158, 252, 158, 253, 159, 7, 159, 8, 118, 183, 159, 21, 159, 33, 159, 44, 159, 62, 159, 74, 159, 82, 159, 84, - 159, 99, 159, 95, 159, 96, 159, 97, 159, 102, 159, 103, 159, 108, 159, 106, 159, 119, 159, 114, 159, 118, 159, 149, - 159, 156, 159, 160, 88, 47, 105, 199, 144, 89, 116, 100, 81, 220, 113, 153, 48, 0, 48, 1, 48, 2, 255, 12, 255, 14, 48, - 251, 255, 26, 255, 27, 255, 31, 255, 1, 48, 155, 48, 156, 0, 180, 255, 64, 0, 168, 255, 62, 32, 62, 255, 63, 48, 253, - 48, 254, 48, 157, 48, 158, 48, 3, 78, 221, 48, 5, 48, 6, 48, 7, 48, 252, 32, 20, 32, 16, 255, 15, 255, 60, 48, 28, 32, - 22, 255, 92, 32, 38, 32, 37, 32, 24, 32, 25, 32, 28, 32, 29, 255, 8, 255, 9, 48, 20, 48, 21, 255, 59, 255, 61, 255, - 91, 255, 93, 48, 8, 48, 9, 48, 10, 48, 11, 48, 12, 48, 13, 48, 14, 48, 15, 48, 16, 48, 17, 255, 11, 34, 18, 0, 177, - 0, 215, 0, 247, 255, 29, 34, 96, 255, 28, 255, 30, 34, 102, 34, 103, 34, 30, 34, 52, 38, 66, 38, 64, 0, 176, 32, 50, - 32, 51, 33, 3, 0, 165, 255, 4, 0, 162, 0, 163, 255, 5, 255, 3, 255, 6, 255, 10, 255, 32, 0, 167, 38, 6, 38, 5, 37, 203, - 37, 207, 37, 206, 37, 199, 37, 198, 37, 161, 37, 160, 37, 179, 37, 178, 37, 189, 37, 188, 32, 59, 48, 18, 33, 146, 33, - 144, 33, 145, 33, 147, 48, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 8, 34, 11, 34, - 134, 34, 135, 34, 130, 34, 131, 34, 42, 34, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 39, 34, 40, 0, 172, - 33, 210, 33, 212, 34, 0, 34, 3, 34, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 32, 34, 165, - 35, 18, 34, 2, 34, 7, 34, 97, 34, 82, 34, 106, 34, 107, 34, 26, 34, 61, 34, 29, 34, 53, 34, 43, 34, 44, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 43, 32, 48, 38, 111, 38, 109, 38, 106, 32, 32, 32, 33, 0, 182, 34, 44, 0, 0, 0, 0, - 0, 0, 37, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 145, 3, 146, 3, 147, 3, 148, 3, 149, 3, 150, 3, 151, 3, - 152, 3, 153, 3, 154, 3, 155, 3, 156, 3, 157, 3, 158, 3, 159, 3, 160, 3, 161, 3, 163, 3, 164, 3, 165, 3, 166, 3, 167, - 3, 168, 3, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 177, 3, 178, 3, 179, 3, 180, 3, 181, 3, 182, 3, 183, - 3, 184, 3, 185, 3, 186, 3, 187, 3, 188, 3, 189, 3, 190, 3, 191, 3, 192, 3, 193, 3, 195, 3, 196, 3, 197, 3, 198, 3, 199, - 3, 200, 3, 201, 4, 16, 4, 17, 4, 18, 4, 19, 4, 20, 4, 21, 4, 1, 4, 22, 4, 23, 4, 24, 4, 25, 4, 26, 4, 27, 4, 28, 4, - 29, 4, 30, 4, 31, 4, 32, 4, 33, 4, 34, 4, 35, 4, 36, 4, 37, 4, 38, 4, 39, 4, 40, 4, 41, 4, 42, 4, 43, 4, 44, 4, 45, - 4, 46, 4, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 48, 4, 49, - 4, 50, 4, 51, 4, 52, 4, 53, 4, 81, 4, 54, 4, 55, 4, 56, 4, 57, 4, 58, 4, 59, 4, 60, 4, 61, 4, 62, 4, 63, 4, 64, 4, 65, - 4, 66, 4, 67, 4, 68, 4, 69, 4, 70, 4, 71, 4, 72, 4, 73, 4, 74, 4, 75, 4, 76, 4, 77, 4, 78, 4, 79, 37, 0, 37, 2, 37, - 12, 37, 16, 37, 24, 37, 20, 37, 28, 37, 44, 37, 36, 37, 52, 37, 60, 37, 1, 37, 3, 37, 15, 37, 19, 37, 27, 37, 23, 37, - 35, 37, 51, 37, 43, 37, 59, 37, 75, 37, 32, 37, 47, 37, 40, 37, 55, 37, 63, 37, 29, 37, 48, 37, 37, 37, 56, 37, 66 -}; diff --git a/source/mload/fatffs_module.h b/source/mload/fatffs_module.h deleted file mode 100644 index 8f591c37..00000000 --- a/source/mload/fatffs_module.h +++ /dev/null @@ -1,3 +0,0 @@ -#define size_fatffs_module 58440 - -extern unsigned char fatffs_module[58440]; diff --git a/source/mload/mload_modules.c b/source/mload/mload_modules.c index c3346241..a1090d51 100644 --- a/source/mload/mload_modules.c +++ b/source/mload/mload_modules.c @@ -5,6 +5,8 @@ #define ALIGNED(x) __attribute__((aligned(x))) +#define DEBUG_MLOAD + /* Used for Hermes NAND emulation */ int global_mount; int sd_ok=0; @@ -287,7 +289,7 @@ int load_fatffs_module(u8 *discid) if(mload_init()<0) return -1; - mload_elf((void *) fatffs_module, &my_data_elf); + mload_elf((void *) fatffs_module_bin, &my_data_elf); my_thread_id= mload_run_thread(my_data_elf.start, my_data_elf.stack, my_data_elf.size_stack, my_data_elf.prio); if(my_thread_id<0) return -1; diff --git a/source/mload/mload_modules.h b/source/mload/mload_modules.h index 12a54af2..1d4efd12 100644 --- a/source/mload/mload_modules.h +++ b/source/mload/mload_modules.h @@ -3,7 +3,7 @@ #include "dip_plugin.h" #include "mload.h" -#include "fatffs_module.h" +#include "fatffs_module_bin.h" #ifdef __cplusplus extern "C" { diff --git a/source/prompts/ProgressWindow.cpp b/source/prompts/ProgressWindow.cpp index b1ae11f7..3dfb0db4 100644 --- a/source/prompts/ProgressWindow.cpp +++ b/source/prompts/ProgressWindow.cpp @@ -17,6 +17,7 @@ #include "prompts/ProgressWindow.h" #include "usbloader/wbfs.h" #include "usbloader/utils.h" +#include "usbloader/spinner.h" /*** Variables used only in this file ***/ static lwp_t progressthread = LWP_THREAD_NULL; @@ -32,8 +33,8 @@ static f32 progressDone = 0.0; static bool showTime = false; static bool showSize = false; static bool changed = true; -static s32 gameinstalldone = 0; -static s32 gameinstalltotal = -1; +static u32 gameinstalldone = 0; +static u32 gameinstalltotal = 0; static time_t start; /*** Extern variables ***/ @@ -51,10 +52,10 @@ extern void HaltGui(); ***************************************************************************/ static void GameInstallProgress() { - if (gameinstalltotal <= 0) + if (gameinstalltotal == 0) return; - int oldinstalldone = gameinstalldone; + u32 oldinstalldone = gameinstalldone; GetProgressValue(&gameinstalldone, &gameinstalltotal); @@ -312,7 +313,7 @@ static void * ProgressThread (void *arg) { ***************************************************************************/ void ProgressStop() { showProgress = 0; - gameinstalltotal = -1; + gameinstalltotal = 0; // wait for thread to finish while (!LWP_ThreadIsSuspended(progressthread)) diff --git a/source/prompts/PromptWindows.cpp b/source/prompts/PromptWindows.cpp index cc6d0b5e..22909ee3 100644 --- a/source/prompts/PromptWindows.cpp +++ b/source/prompts/PromptWindows.cpp @@ -10,7 +10,7 @@ #include "usbloader/wbfs.h" #include "usbloader/wdvd.h" #include "usbloader/partition_usbloader.h" -#include "usbloader/usbstorage.h" +#include "usbloader/usbstorage2.h" #include "usbloader/getentries.h" #include "language/gettext.h" #include "libwiigui/gui.h" diff --git a/source/settings/Settings.cpp b/source/settings/Settings.cpp index 73797047..29e899b5 100644 --- a/source/settings/Settings.cpp +++ b/source/settings/Settings.cpp @@ -2201,6 +2201,7 @@ int MenuSettings() if (Settings.partition != settingspartitionold) { reloaddatabasefile = true; CloseXMLDatabase(); + CFG_Cleanup(); } OpenXMLDatabase(Settings.titlestxt_path, Settings.db_language, Settings.db_JPtoEN, reloaddatabasefile, Settings.titlesOverride==1?true:false, true); // open file, reload titles, keep in memory } diff --git a/source/settings/cfg.c b/source/settings/cfg.c index f6df6c15..e66fc208 100644 --- a/source/settings/cfg.c +++ b/source/settings/cfg.c @@ -1882,12 +1882,12 @@ void CFG_LoadGlobal(void) { void CFG_Cleanup(void) { int i = 0; - for(i = 0; i < num_title; i++) - { - if(cfg_title[i].title) - free(cfg_title[i].title); - cfg_title[i].title = NULL; - } + for(i = 0; i < num_title; i++) + { + if(cfg_title[i].title) + free(cfg_title[i].title); + cfg_title[i].title = NULL; + } if (cfg_title) { free(cfg_title); cfg_title = NULL; diff --git a/source/sys.cpp b/source/sys.cpp index 243beeec..eb56c0ce 100644 --- a/source/sys.cpp +++ b/source/sys.cpp @@ -3,7 +3,7 @@ #include #include "usbloader/wdvd.h" -#include "usbloader/usbstorage.h" +#include "usbloader/usbstorage2.h" #include "usbloader/disc.h" #include "usbloader/wbfs.h" #include "usbloader/partition_usbloader.h" @@ -78,7 +78,7 @@ int Sys_ChangeIos(int ios) { WDVD_Close(); - USBStorage_Deinit(); + USBStorage2_Deinit(); s32 ret = IOS_ReloadIOSsafe(ios); if (ret < 0) { @@ -122,7 +122,7 @@ int Sys_IosReload(int IOS) { WDVD_Close(); - USBStorage_Deinit(); + USBStorage2_Deinit(); if (IOS == 249 || IOS == 222 || IOS == 223) { for (int i = 0; i < 10; i++) { @@ -132,7 +132,7 @@ int Sys_IosReload(int IOS) { ret = WBFS_Init(WBFS_DEVICE_USB); if (!(ret < 0)) break; sleep(1); - USBStorage_Deinit(); + USBStorage2_Deinit(); } if (ret>=0) { ret = Disc_Init(); diff --git a/source/usbloader/disc.h b/source/usbloader/disc.h index a06827e9..7d1f6d24 100644 --- a/source/usbloader/disc.h +++ b/source/usbloader/disc.h @@ -19,7 +19,8 @@ extern "C" { u8 bufsize; /* Padding */ - u8 unused1[14]; + u8 is_ciso; + u8 unused1[13]; /* Magic word */ u32 magic; diff --git a/source/usbloader/frag.c b/source/usbloader/frag.c index 3bb4651d..c30c009b 100644 --- a/source/usbloader/frag.c +++ b/source/usbloader/frag.c @@ -8,7 +8,7 @@ #include "libntfs/ntfs.h" #include "libwbfs/libwbfs.h" #include "wbfs.h" -#include "usbstorage.h" +#include "usbstorage2.h" #include "frag.h" #include "utils.h" diff --git a/source/usbloader/partition_usbloader.c b/source/usbloader/partition_usbloader.c index 082972fe..590e2651 100644 --- a/source/usbloader/partition_usbloader.c +++ b/source/usbloader/partition_usbloader.c @@ -7,7 +7,7 @@ #include "partition_usbloader.h" #include "sdhc.h" -#include "usbstorage.h" +#include "usbstorage2.h" #include "utils.h" #include "wbfs.h" #include "libwbfs/libwbfs.h" @@ -33,12 +33,12 @@ s32 Partition_GetEntries(u32 device, partitionEntry *outbuf, u32 *outval) switch (device) { case WBFS_DEVICE_USB: { /* Get sector size */ - ret = USBStorage_GetCapacity(§or_size); + ret = USBStorage2_GetCapacity(§or_size); if (ret == 0) return -1; /* Read partition table */ - ret = USBStorage_ReadSectors(0, 1, &table); + ret = USBStorage2_ReadSectors(0, 1, &table); if (ret < 0) return ret; @@ -86,7 +86,7 @@ bool Device_ReadSectors(u32 device, u32 sector, u32 count, void *buffer) /* Read from specified device */ switch (device) { case WBFS_DEVICE_USB: - ret = USBStorage_ReadSectors(sector, count, buffer); + ret = USBStorage2_ReadSectors(sector, count, buffer); if (ret < 0) return false; return true; @@ -105,7 +105,7 @@ bool Device_WriteSectors(u32 device, u32 sector, u32 count, void *buffer) /* Read from specified device */ switch (device) { case WBFS_DEVICE_USB: - ret = USBStorage_WriteSectors(sector, count, buffer); + ret = USBStorage2_WriteSectors(sector, count, buffer); if (ret < 0) return false; return true; @@ -129,7 +129,7 @@ s32 Partition_GetEntriesEx(u32 device, partitionEntry *outbuf, u32 *psect_size, // Get sector size switch (device) { case WBFS_DEVICE_USB: - ret = USBStorage_GetCapacity(§or_size); + ret = USBStorage2_GetCapacity(§or_size); if (ret == 0) return -1; break; case WBFS_DEVICE_SDHC: diff --git a/source/usbloader/spinner.c b/source/usbloader/spinner.c new file mode 100644 index 00000000..14d22c6d --- /dev/null +++ b/source/usbloader/spinner.c @@ -0,0 +1,17 @@ +#include +#include "libwbfs/libwbfs.h" + +static u32 done = 0; +static u32 total = 0; + +void WBFS_Spinner(u32 d, u32 t) +{ + done = d; + total = t; +} + +void GetProgressValue(u32 * d, u32 * t) +{ + *d = done; + *t = total; +} diff --git a/source/usbloader/spinner.h b/source/usbloader/spinner.h new file mode 100644 index 00000000..dc0e9c3a --- /dev/null +++ b/source/usbloader/spinner.h @@ -0,0 +1,15 @@ +#ifndef SPINNER_H_ +#define SPINNER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +void WBFS_Spinner(u32 d, u32 t); +void GetProgressValue(u32 * d, u32 * t); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/source/usbloader/usbstorage.c b/source/usbloader/usbstorage.c deleted file mode 100644 index d9657a00..00000000 --- a/source/usbloader/usbstorage.c +++ /dev/null @@ -1,382 +0,0 @@ -/*------------------------------------------------------------- - -usbstorage_starlet.c -- USB mass storage support, inside starlet -Copyright (C) 2009 Kwiirk - -If this driver is linked before libogc, this will replace the original -usbstorage driver by svpe from libogc -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any -damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you -must not claim that you wrote the original software. If you use -this software in a product, an acknowledgment in the product -documentation would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and -must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source -distribution. - --------------------------------------------------------------*/ - -#include -#include -#include -#include - -/* IOCTL commands */ -#define UMS_BASE (('U'<<24)|('M'<<16)|('S'<<8)) -#define USB_IOCTL_UMS_INIT (UMS_BASE+0x1) -#define USB_IOCTL_UMS_GET_CAPACITY (UMS_BASE+0x2) -#define USB_IOCTL_UMS_READ_SECTORS (UMS_BASE+0x3) -#define USB_IOCTL_UMS_WRITE_SECTORS (UMS_BASE+0x4) -#define USB_IOCTL_UMS_READ_STRESS (UMS_BASE+0x5) -#define USB_IOCTL_UMS_SET_VERBOSE (UMS_BASE+0x6) -#define USB_IOCTL_UMS_UNMOUNT (UMS_BASE+0x10) -#define USB_IOCTL_UMS_WATCHDOG (UMS_BASE+0x80) - -#define WBFS_BASE (('W'<<24)|('F'<<16)|('S'<<8)) -#define USB_IOCTL_WBFS_OPEN_DISC (WBFS_BASE+0x1) -#define USB_IOCTL_WBFS_READ_DISC (WBFS_BASE+0x2) -#define USB_IOCTL_WBFS_READ_DIRECT_DISC (WBFS_BASE+0x3) -#define USB_IOCTL_WBFS_STS_DISC (WBFS_BASE+0x4) -#define USB_IOCTL_WBFS_SET_DEVICE (WBFS_BASE+0x50) -#define USB_IOCTL_WBFS_SET_FRAGLIST (WBFS_BASE+0x51) - -#define UMS_HEAPSIZE 0x1000 - -/* Variables */ -static char fs[] ATTRIBUTE_ALIGN(32) = "/dev/usb2"; -static char fs2[] ATTRIBUTE_ALIGN(32) = "/dev/usb/ehc"; - -static s32 hid = -1, fd = -1; -static u32 sector_size; - -s32 USBStorage_GetCapacity(u32 *_sector_size) { - if (fd > 0) { - s32 ret; - - ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_GET_CAPACITY, ":i", §or_size); - - if (ret && _sector_size) - *_sector_size = sector_size; - - return ret; - } - - return IPC_ENOENT; -} - -s32 USBStorage_Init(void) { - s32 ret; - - /* Already open */ - if (fd > 0) - return 0; - - /* Create heap */ - if (hid < 0) { - hid = iosCreateHeap(UMS_HEAPSIZE); - if (hid < 0) - return IPC_ENOMEM; - } - - /* Open USB device */ - fd = IOS_Open(fs, 0); - if (fd < 0) - fd = IOS_Open(fs2, 0); - if (fd < 0) - return fd; - - /* Initialize USB storage */ - ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_INIT, ":"); - if (ret<0) goto err; - - /* Get device capacity */ - ret = USBStorage_GetCapacity(NULL); - if (!ret) - goto err; - - return 0; - -err: - /* Close USB device */ - if (fd > 0) { - IOS_Close(fd); - fd = -1; - } - - return -1; -} - -/** Hermes **/ -s32 USBStorage_Watchdog(u32 on_off) { - if (fd >= 0) { - s32 ret; - - ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_WATCHDOG, "i:", on_off); - - return ret; - } - - return IPC_ENOENT; -} - -s32 USBStorage_Umount(void) { - if (fd >= 0) { - s32 ret; - ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_UNMOUNT, ":"); - return ret; - } - - return IPC_ENOENT; -} - -void USBStorage_Deinit(void) { - /* Close USB device */ - if (fd > 0) { - IOS_Close(fd); - fd = -1; - } -} - -s32 USBStorage_ReadSectors(u32 sector, u32 numSectors, void *buffer) { - -// void *buf = (void *)buffer; - u32 len = (sector_size * numSectors); - - s32 ret; - - /* Device not opened */ - if (fd < 0) - return fd; - - - ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_READ_SECTORS, "ii:d", sector, numSectors, buffer, len); - return ret; -} - -s32 USBStorage_WriteSectors(u32 sector, u32 numSectors, const void *buffer) { - u32 len = (sector_size * numSectors); - - s32 ret; - - /* Device not opened */ - if (fd < 0) - return fd; - - /* Write data */ - ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_WRITE_SECTORS, "ii:d", sector, numSectors, buffer, len); - - return ret; -} - -static bool __io_usb_Startup(void) -{ - return USBStorage_Init() >= 0; -} - -static bool __io_usb_IsInserted(void) -{ - s32 ret; - if (fd < 0) return false; - ret = USBStorage_GetCapacity(NULL); - if (ret == 0) return false; - return true; -} - -bool __io_usb_ReadSectors(u32 sector, u32 count, void *buffer) -{ - s32 ret = USBStorage_ReadSectors(sector, count, buffer); - return ret > 0; -} - -bool __io_usb_WriteSectors(u32 sector, u32 count, void *buffer) -{ - s32 ret = USBStorage_WriteSectors(sector, count, buffer); - return ret > 0; -} - -static bool __io_usb_ClearStatus(void) -{ - return true; -} - -static bool __io_usb_Shutdown(void) -{ - // do nothing - return true; -} - -static bool __io_usb_NOP(void) -{ - // do nothing - return true; -} - -const DISC_INTERFACE __io_usbstorage_ro = { - DEVICE_TYPE_WII_USB, - FEATURE_MEDIUM_CANREAD | FEATURE_WII_USB, - (FN_MEDIUM_STARTUP) &__io_usb_Startup, - (FN_MEDIUM_ISINSERTED) &__io_usb_IsInserted, - (FN_MEDIUM_READSECTORS) &__io_usb_ReadSectors, - (FN_MEDIUM_WRITESECTORS) &__io_usb_NOP, //&__io_usb_WriteSectors, - (FN_MEDIUM_CLEARSTATUS) &__io_usb_ClearStatus, - (FN_MEDIUM_SHUTDOWN) &__io_usb_Shutdown -}; - -s32 USBStorage_WBFS_Open(char *buffer) -{ - u32 len = 8; - - s32 ret; - - /* Device not opened */ - if (fd < 0) - return fd; - - extern u32 wbfs_part_lba; - u32 part = wbfs_part_lba; - - /* Read data */ - ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_WBFS_OPEN_DISC, "dd:", buffer, len, &part, 4); - - return ret; -} - -// woffset is in 32bit words, len is in bytes -s32 USBStorage_WBFS_Read(u32 woffset, u32 len, void *buffer) -{ - s32 ret; - - USBStorage_Init(); - /* Device not opened */ - if (fd < 0) - return fd; - - /* Read data */ - ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_WBFS_READ_DISC, "ii:d", woffset, len, buffer, len); - - return ret; -} - - -s32 USBStorage_WBFS_SetDevice(int dev) -{ - s32 ret; - static s32 retval = 0; - retval = 0; - USBStorage_Init(); - // Device not opened - if (fd < 0) return fd; - // ioctl - ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_WBFS_SET_DEVICE, "i:i", dev, &retval); - if (retval) return retval; - return ret; -} - -s32 USBStorage_WBFS_SetFragList(void *p, int size) -{ - s32 ret; - USBStorage_Init(); - // Device not opened - if (fd < 0) return fd; - // ioctl - ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_WBFS_SET_FRAGLIST, "d:", p, size); - return ret; -} - -#define DEVICE_TYPE_WII_UMS (('W'<<24)|('U'<<16)|('M'<<8)|'S') - -bool umsio_Startup() { - return USBStorage_Init() == 0; -} - -bool umsio_IsInserted() { - return true; // allways true -} - -bool umsio_ReadSectors(sec_t sector, sec_t numSectors, u8 *buffer) { - u32 cnt = 0; - s32 ret; - /* Do reads */ - while (cnt < numSectors) { - u32 sectors = (numSectors - cnt); - - /* Read sectors is too big */ - if (sectors > 32) - sectors = 32; - - /* USB read */ - ret = USBStorage_ReadSectors(sector + cnt, sectors, &buffer[cnt*512]); - if (ret < 0) - return false; - - /* Increment counter */ - cnt += sectors; - } - - return true; -} - -bool umsio_WriteSectors(sec_t sector, sec_t numSectors, const u8* buffer) { - u32 cnt = 0; - s32 ret; - - /* Do writes */ - while (cnt < numSectors) { - u32 sectors = (numSectors - cnt); - - /* Write sectors is too big */ - if (sectors > 32) - sectors = 32; - - /* USB write */ - ret = USBStorage_WriteSectors(sector + cnt, sectors, &buffer[cnt * 512]); - if (ret < 0) - return false; - - /* Increment counter */ - cnt += sectors; - } - - return true; -} - -bool umsio_ClearStatus(void) { - return true; -} - -bool umsio_Shutdown() { - USBStorage_Deinit(); - return true; -} - -const DISC_INTERFACE __io_wiiums = { - DEVICE_TYPE_WII_UMS, - FEATURE_MEDIUM_CANREAD | FEATURE_MEDIUM_CANWRITE | FEATURE_WII_USB, - (FN_MEDIUM_STARTUP) &umsio_Startup, - (FN_MEDIUM_ISINSERTED) &umsio_IsInserted, - (FN_MEDIUM_READSECTORS) &umsio_ReadSectors, - (FN_MEDIUM_WRITESECTORS) &umsio_WriteSectors, - (FN_MEDIUM_CLEARSTATUS) &umsio_ClearStatus, - (FN_MEDIUM_SHUTDOWN) &umsio_Shutdown -}; - -const DISC_INTERFACE __io_wiiums_ro = { - DEVICE_TYPE_WII_UMS, - FEATURE_MEDIUM_CANREAD | FEATURE_MEDIUM_CANWRITE | FEATURE_WII_USB, - (FN_MEDIUM_STARTUP) &umsio_Startup, - (FN_MEDIUM_ISINSERTED) &umsio_IsInserted, - (FN_MEDIUM_READSECTORS) &umsio_ReadSectors, - (FN_MEDIUM_WRITESECTORS) &__io_usb_NOP, - (FN_MEDIUM_CLEARSTATUS) &umsio_ClearStatus, - (FN_MEDIUM_SHUTDOWN) &umsio_Shutdown -}; diff --git a/source/usbloader/usbstorage.h b/source/usbloader/usbstorage.h deleted file mode 100644 index 4a148f0c..00000000 --- a/source/usbloader/usbstorage.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef _USBSTORAGE_H_ -#define _USBSTORAGE_H_ - -#ifdef __cplusplus -extern "C" { -#endif - /* Prototypes */ - s32 USBStorage_GetCapacity(u32 *); - s32 USBStorage_Init(void); - void USBStorage_Deinit(void); - s32 USBStorage_Watchdog(u32 on_off); - s32 USBStorage_ReadSectors(u32, u32, void *); - s32 USBStorage_WriteSectors(u32, u32, const void *); - - s32 USBStorage_WBFS_Open(char *buf_id); - s32 USBStorage_WBFS_Read(u32 woffset, u32 len, void *buffer); - s32 USBStorage_WBFS_SetDevice(int dev); - s32 USBStorage_WBFS_SetFragList(void *p, int size); - - extern const DISC_INTERFACE __io_wiiums; - extern const DISC_INTERFACE __io_wiiums_ro; -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source/usbloader/usbstorage2.c b/source/usbloader/usbstorage2.c new file mode 100644 index 00000000..b0567125 --- /dev/null +++ b/source/usbloader/usbstorage2.c @@ -0,0 +1,456 @@ +/*------------------------------------------------------------- + +usbstorage_starlet.c -- USB mass storage support, inside starlet +Copyright (C) 2009 Kwiirk + +If this driver is linked before libogc, this will replace the original +usbstorage driver by svpe from libogc +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#include +#include +#include +#include +#include "usbstorage2.h" + +/* IOCTL commands */ +#define UMS_BASE (('U'<<24)|('M'<<16)|('S'<<8)) +#define USB_IOCTL_UMS_INIT (UMS_BASE+0x1) +#define USB_IOCTL_UMS_GET_CAPACITY (UMS_BASE+0x2) +#define USB_IOCTL_UMS_READ_SECTORS (UMS_BASE+0x3) +#define USB_IOCTL_UMS_WRITE_SECTORS (UMS_BASE+0x4) +#define USB_IOCTL_UMS_READ_STRESS (UMS_BASE+0x5) +#define USB_IOCTL_UMS_SET_VERBOSE (UMS_BASE+0x6) +#define USB_IOCTL_UMS_UMOUNT (UMS_BASE+0x10) +#define USB_IOCTL_UMS_WATCHDOG (UMS_BASE+0x80) + +#define USB_IOCTL_UMS_TESTMODE (UMS_BASE+0x81) + +#define WBFS_BASE (('W'<<24)|('F'<<16)|('S'<<8)) +#define USB_IOCTL_WBFS_OPEN_DISC (WBFS_BASE+0x1) +#define USB_IOCTL_WBFS_READ_DISC (WBFS_BASE+0x2) +#define USB_IOCTL_WBFS_READ_DIRECT_DISC (WBFS_BASE+0x3) +#define USB_IOCTL_WBFS_STS_DISC (WBFS_BASE+0x4) +#define USB_IOCTL_WBFS_SET_DEVICE (WBFS_BASE+0x50) +#define USB_IOCTL_WBFS_SET_FRAGLIST (WBFS_BASE+0x51) + +#define UMS_HEAPSIZE 0x1000 //0x10000 + +/* Variables */ +static char fs[] ATTRIBUTE_ALIGN(32) = "/dev/usb2"; +static char fs2[] ATTRIBUTE_ALIGN(32) = "/dev/usb/ehc"; + +static char fsoff[] ATTRIBUTE_ALIGN(32) = "/dev/usb2/OFF"; + +static s32 hid = -1, fd = -1; +static u32 sector_size; +static int mounted=0; + +s32 USBStorage2_Umount(void) +{ + if (fd >= 0 && mounted) { + s32 ret; + + ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_UMOUNT, ":"); + + return ret; + } + + return IPC_ENOENT; +} + + +s32 USBStorage2_Watchdog(u32 on_off) +{ + if (fd >= 0) { + s32 ret; + + ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_WATCHDOG, "i:", on_off); + + return ret; + } + + return IPC_ENOENT; +} + +s32 USBStorage2_TestMode(u32 on_off) +{ + if (fd >= 0) { + s32 ret; + + ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_TESTMODE, "i:", on_off); + + return ret; + } + + return IPC_ENOENT; +} + + +inline s32 __USBStorage2_isMEM2Buffer(const void *buffer) +{ + u32 high_addr = ((u32)buffer) >> 24; + + return (high_addr == 0x90) || (high_addr == 0xD0); +} + + +s32 USBStorage2_GetCapacity(u32 *_sector_size) +{ + if (fd >= 0) { + s32 ret; + + ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_GET_CAPACITY, ":i", §or_size); + + if (ret && _sector_size) + *_sector_size = sector_size; + + return ret; + } + + return IPC_ENOENT; +} + +s32 USBStorage2_EHC_Off(void) +{ + USBStorage2_Deinit(); + fd=IOS_Open(fsoff, 0); + USBStorage2_Deinit(); + return 0; + +} + +s32 USBStorage2_Init(void) +{ + s32 ret,ret2; + static u32 sector_size=0; + + /* Already open */ + if (fd >= 0) + return 0; + + /* Create heap */ + if (hid < 0) { + hid = iosCreateHeap(UMS_HEAPSIZE); + if (hid < 0) + return IPC_ENOMEM; + } + + /* Open USB device */ + fd = IOS_Open(fs, 0); + if (fd < 0) fd = IOS_Open(fs2, 0); + + if (fd < 0) + return fd; + + /* Initialize USB storage */ + ret=IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_INIT, ":"); + if(ret<0) goto err; + if(ret>1) ret=0; + ret2=ret; + + /* Get device capacity */ + ret = USBStorage2_GetCapacity(§or_size); + if (!ret) + { + ret=-1; + goto err; + } + if(ret2==0 && sector_size!=512) // check for HD sector size 512 bytes + { + ret=-20001; + goto err; + } + if(ret2==1 && sector_size!=2048) // check for DVD sector size 2048 bytes + { + ret=-20002; + goto err; + } + mounted=1; + return ret2; // 0->HDD, 1->DVD + +err: + /* Close USB device */ + if (fd >= 0) { + IOS_Close(fd); + fd = -1; + } + + + return ret; +} + +void USBStorage2_Deinit(void) +{ +mounted = 0; + + + /* Close USB device */ + if (fd >= 0) { + IOS_Close(fd); + fd = -1; + } +} + +extern void* SYS_AllocArena2MemLo(u32 size,u32 align); + +static void *mem2_ptr=NULL; + +s32 USBStorage2_ReadSectors(u32 sector, u32 numSectors, void *buffer) +{ + void *buf = (void *)buffer; + u32 len = (sector_size * numSectors); + + s32 ret; + + /* Device not opened */ + if (fd < 0) + return fd; + if(!mem2_ptr) mem2_ptr=SYS_AllocArena2MemLo(2048*256,32); + /* MEM1 buffer */ + if (!__USBStorage2_isMEM2Buffer(buffer)) { + /* Allocate memory */ + buf = mem2_ptr; //iosAlloc(hid, len); + if (!buf) + return IPC_ENOMEM; + } + + /* Read data */ + ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_READ_SECTORS, "ii:d", sector, numSectors, buf, len); + + /* Copy data */ + if (buf != buffer) { + memcpy(buffer, buf, len); + //iosFree(hid, buf); + } + + return ret; +} + +s32 USBStorage2_WriteSectors(u32 sector, u32 numSectors, const void *buffer) +{ + void *buf = (void *)buffer; + u32 len = (sector_size * numSectors); + + s32 ret; + + /* Device not opened */ + if (fd < 0) + return fd; + if(!mem2_ptr) mem2_ptr=SYS_AllocArena2MemLo(2048*256,32); + + + /* MEM1 buffer */ + if (!__USBStorage2_isMEM2Buffer(buffer)) { + /* Allocate memory */ + buf = mem2_ptr; //buf = iosAlloc(hid, len); + if (!buf) + return IPC_ENOMEM; + + /* Copy data */ + memcpy(buf, buffer, len); + } + + /* Write data */ + ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_WRITE_SECTORS, "ii:d", sector, numSectors, buf, len); + + /* Free memory */ + if (buf != buffer) + iosFree(hid, buf); + + return ret; +} + +static bool __usbstorage_Startup(void) +{ + + +return USBStorage2_Init()==0; +} + +static bool __usbstorage_IsInserted(void) +{ + return ( USBStorage2_GetCapacity(NULL)>=0); +} + +static bool __usbstorage_ReadSectors(u32 sector, u32 numSectors, void *buffer) +{ + s32 retval; + + retval = USBStorage2_ReadSectors( sector, numSectors, buffer); + + if(retval < 0) + return false; + return true; +} + +static bool __usbstorage_WriteSectors(u32 sector, u32 numSectors, const void *buffer) +{ + s32 retval; + + retval = USBStorage2_WriteSectors( sector, numSectors, buffer); + + if(retval < 0) + return false; + + return true; +} + +static bool __usbstorage_ClearStatus(void) +{ + return true; +} + +static bool __usbstorage_Shutdown(void) +{ + //if(mounted) USBStorage2_Umount(); + USBStorage2_Deinit(); + + mounted = 0; + return true; +} + +const DISC_INTERFACE __io_usbstorage2 = { + DEVICE_TYPE_WII_UMS, + FEATURE_MEDIUM_CANREAD | FEATURE_MEDIUM_CANWRITE | FEATURE_WII_USB, + (FN_MEDIUM_STARTUP)&__usbstorage_Startup, + (FN_MEDIUM_ISINSERTED)&__usbstorage_IsInserted, + (FN_MEDIUM_READSECTORS)&__usbstorage_ReadSectors, + (FN_MEDIUM_WRITESECTORS)&__usbstorage_WriteSectors, + (FN_MEDIUM_CLEARSTATUS)&__usbstorage_ClearStatus, + (FN_MEDIUM_SHUTDOWN)&__usbstorage_Shutdown +}; + +static bool __io_usb_Startup(void) +{ + return USBStorage2_Init() >= 0; +} + +static bool __io_usb_IsInserted(void) +{ + s32 ret; + if (fd < 0) return false; + ret = USBStorage2_GetCapacity(NULL); + if (ret == 0) return false; + return true; +} + +bool __io_usb_ReadSectors(u32 sector, u32 count, void *buffer) +{ + s32 ret = USBStorage2_ReadSectors(sector, count, buffer); + return ret > 0; +} + +bool __io_usb_WriteSectors(u32 sector, u32 count, void *buffer) +{ + s32 ret = USBStorage2_WriteSectors(sector, count, buffer); + return ret > 0; +} + +static bool __io_usb_ClearStatus(void) +{ + return true; +} + +static bool __io_usb_Shutdown(void) +{ + // do nothing + return true; +} + +static bool __io_usb_NOP(void) +{ + // do nothing + return true; +} + +const DISC_INTERFACE __io_usbstorage2_ro = { + DEVICE_TYPE_WII_UMS, + FEATURE_MEDIUM_CANREAD | FEATURE_MEDIUM_CANWRITE | FEATURE_WII_USB, + (FN_MEDIUM_STARTUP)&__usbstorage_Startup, + (FN_MEDIUM_ISINSERTED)&__usbstorage_IsInserted, + (FN_MEDIUM_READSECTORS)&__usbstorage_ReadSectors, + (FN_MEDIUM_WRITESECTORS)&__io_usb_NOP, + (FN_MEDIUM_CLEARSTATUS)&__usbstorage_ClearStatus, + (FN_MEDIUM_SHUTDOWN)&__usbstorage_Shutdown +}; + +s32 USBStorage_WBFS_Open(char *buffer) +{ + u32 len = 8; + + s32 ret; + + /* Device not opened */ + if (fd < 0) + return fd; + + extern u32 wbfs_part_lba; + u32 part = wbfs_part_lba; + + /* Read data */ + ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_WBFS_OPEN_DISC, "dd:", buffer, len, &part, 4); + + return ret; +} + +// woffset is in 32bit words, len is in bytes +s32 USBStorage_WBFS_Read(u32 woffset, u32 len, void *buffer) +{ + s32 ret; + + USBStorage2_Init(); + /* Device not opened */ + if (fd < 0) + return fd; + + /* Read data */ + ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_WBFS_READ_DISC, "ii:d", woffset, len, buffer, len); + + return ret; +} + + +s32 USBStorage_WBFS_SetDevice(int dev) +{ + s32 ret; + static s32 retval = 0; + retval = 0; + USBStorage2_Init(); + // Device not opened + if (fd < 0) return fd; + // ioctl + ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_WBFS_SET_DEVICE, "i:i", dev, &retval); + if (retval) return retval; + return ret; +} + +s32 USBStorage_WBFS_SetFragList(void *p, int size) +{ + s32 ret; + USBStorage2_Init(); + // Device not opened + if (fd < 0) return fd; + // ioctl + ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_WBFS_SET_FRAGLIST, "d:", p, size); + return ret; +} diff --git a/source/usbloader/usbstorage2.h b/source/usbloader/usbstorage2.h new file mode 100644 index 00000000..75f1cb17 --- /dev/null +++ b/source/usbloader/usbstorage2.h @@ -0,0 +1,33 @@ +#ifndef _USBSTORAGE2_H_ +#define _USBSTORAGE2_H_ + +#include "ogc/disc_io.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Prototypes */ +s32 USBStorage2_GetCapacity(u32 *); +s32 USBStorage2_Init(void); +void USBStorage2_Deinit(void); +s32 USBStorage2_Umount(void); + +s32 USBStorage2_ReadSectors(u32, u32, void *); +s32 USBStorage2_WriteSectors(u32, u32, const void *); + +s32 USBStorage2_Watchdog(u32 on_off); + +s32 USBStorage2_TestMode(u32 on_off); + +s32 USBStorage2_EHC_Off(void); + +#define DEVICE_TYPE_WII_UMS (('W'<<24)|('U'<<16)|('M'<<8)|'S') + +extern const DISC_INTERFACE __io_usbstorage2; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/source/usbloader/wbfs.cpp b/source/usbloader/wbfs.cpp index 1a7932d9..6d9e58b5 100644 --- a/source/usbloader/wbfs.cpp +++ b/source/usbloader/wbfs.cpp @@ -30,10 +30,6 @@ void WBFS_CloseDisc(wbfs_disc_t *disc) { current->CloseDisc(disc); } -void GetProgressValue(s32 * d, s32 * m) { - current->GetProgressValue(d, m); -} - wbfs_t *GetHddInfo(void) { return current->GetHddInfo(); } @@ -44,7 +40,7 @@ s32 WBFS_Init(u32 device) { s32 WBFS_Open(void) { WBFS_Close(); - + current = new Wbfs_Wbfs(WBFS_DEVICE_USB, 0, 0); // Fix me! wbfs_part_fs = wbfs_part_idx = wbfs_part_lba = 0; @@ -169,7 +165,7 @@ s32 WBFS_OpenLBA(u32 lba, u32 size) delete part; return -1; } - + WBFS_Close(); current = part; return 0; @@ -187,7 +183,7 @@ bool WBFS_Close(void) wbfs_part_idx = 0; wbfs_part_lba = 0; wbfs_fs_drive[0] = '\0'; - + ResetGamelist(); return 0; @@ -262,6 +258,6 @@ int WBFS_GetFragList(u8 *id) { return current->GetFragList(id); } -bool WBFS_ShowFreeSpace(void) { +bool WBFS_ShowFreeSpace(void) { return current->ShowFreeSpace(); } diff --git a/source/usbloader/wbfs.h b/source/usbloader/wbfs.h index 8bbee634..96c2068c 100644 --- a/source/usbloader/wbfs.h +++ b/source/usbloader/wbfs.h @@ -15,7 +15,7 @@ extern "C" { /* Macros */ #define WBFS_MIN_DEVICE 1 #define WBFS_MAX_DEVICE 2 - + extern s32 wbfsDev; extern int wbfs_part_fs; extern u32 wbfs_part_idx; @@ -23,7 +23,6 @@ extern "C" { extern char wbfs_fs_drive[16]; /* Prototypes */ - void GetProgressValue(s32 * d, s32 * m); s32 WBFS_Init(u32); s32 WBFS_Open(void); s32 WBFS_Format(u32, u32); @@ -40,7 +39,7 @@ extern "C" { s32 WBFS_RenameGame(u8 *, const void *); s32 WBFS_ReIDGame(u8 *discid, const void *newID); f32 WBFS_EstimeGameSize(void); - + int WBFS_GetFragList(u8 *id); /* s32 __WBFS_ReadUSB(void *fp, u32 lba, u32 count, void *iobuf); diff --git a/source/usbloader/wbfs/wbfs_base.cpp b/source/usbloader/wbfs/wbfs_base.cpp index 3da06130..b5f57315 100644 --- a/source/usbloader/wbfs/wbfs_base.cpp +++ b/source/usbloader/wbfs/wbfs_base.cpp @@ -5,17 +5,15 @@ #include #include "usbloader/sdhc.h" -#include "usbloader/usbstorage.h" +#include "usbloader/usbstorage2.h" #include "fatmounter.h" +#include "wbfs_rw.h" #include "wbfs_base.h" -rw_sector_callback_t Wbfs::readCallback = NULL; -rw_sector_callback_t Wbfs::writeCallback = NULL; s32 Wbfs::done = -1; s32 Wbfs::total = -1; u32 Wbfs::nb_sectors; -u32 Wbfs::sector_size; Wbfs::Wbfs(u32 device, u32 lba, u32 size) : hdd(NULL) { @@ -36,14 +34,14 @@ s32 Wbfs::Init(u32 device) switch (device) { case WBFS_DEVICE_USB: /* Initialize USB storage */ - ret = USBStorage_Init(); + ret = USBStorage2_Init(); if (ret >= 0) { /* Setup callbacks */ readCallback = __ReadUSB; writeCallback = __WriteUSB; /* Device info */ /* Get USB capacity */ - nb_sectors = USBStorage_GetCapacity(§or_size); + nb_sectors = USBStorage2_GetCapacity(§or_size); if (!nb_sectors) return -1; } else @@ -85,7 +83,7 @@ s32 Wbfs::Format() return -1; } -s32 Wbfs::CheckGame(u8 *discid) +s32 Wbfs::CheckGame(u8 *discid) { wbfs_disc_t *disc = NULL; @@ -101,7 +99,7 @@ s32 Wbfs::CheckGame(u8 *discid) return 0; } -s32 Wbfs::GameSize(u8 *discid, f32 *size) +s32 Wbfs::GameSize(u8 *discid, f32 *size) { wbfs_disc_t *disc = NULL; @@ -124,13 +122,7 @@ s32 Wbfs::GameSize(u8 *discid, f32 *size) return 0; } -void Wbfs::Spinner(s32 x, s32 max) -{ - done = x; - total = max; -} - -wbfs_t *Wbfs::GetHddInfo() +wbfs_t *Wbfs::GetHddInfo() { return hdd; } diff --git a/source/usbloader/wbfs/wbfs_base.h b/source/usbloader/wbfs/wbfs_base.h index 78299f5a..9d1d76ef 100644 --- a/source/usbloader/wbfs/wbfs_base.h +++ b/source/usbloader/wbfs/wbfs_base.h @@ -40,23 +40,13 @@ public: static s32 OpenLBA(u32 lba, u32 size); */ protected: - static rw_sector_callback_t readCallback; - static rw_sector_callback_t writeCallback; - static s32 __ReadDVD(void *fp, u32 lba, u32 len, void *iobuf); - static void Spinner(s32 x, s32 max); - static u32 nb_sectors; - static u32 sector_size; /* WBFS HDD */ wbfs_t *hdd; - + u32 device, lba, size; private: - static s32 __ReadUSB(void *fp, u32 lba, u32 count, void *iobuf); - static s32 __WriteUSB(void *fp, u32 lba, u32 count, void *iobuf); - static s32 __ReadSDHC(void *fp, u32 lba, u32 count, void *iobuf); - static s32 __WriteSDHC(void *fp, u32 lba, u32 count, void *iobuf); static s32 total, done; }; diff --git a/source/usbloader/wbfs/wbfs_fat.cpp b/source/usbloader/wbfs/wbfs_fat.cpp index 5c9663f1..072ebefd 100644 --- a/source/usbloader/wbfs/wbfs_fat.cpp +++ b/source/usbloader/wbfs/wbfs_fat.cpp @@ -15,6 +15,8 @@ #include "usbloader/disc.h" #include "fatmounter.h" #include "wbfs_fat.h" +#include "../spinner.h" +#include "wbfs_rw.h" #include "gecko.h" @@ -51,7 +53,7 @@ s32 Wbfs_Fat::Open() if (WBFSDevice_Init(lba)) return -1; strcpy(wbfs_fs_drive, "WBFS:"); } - + return 0; } @@ -170,7 +172,7 @@ s32 Wbfs_Fat::AddGame(void) } wbfs_t *old_hdd = hdd; hdd = part; // used by spinner - ret = wbfs_add_disc(part, __ReadDVD, NULL, Spinner, part_sel, copy_1_1); + ret = wbfs_add_disc(part, __ReadDVD, NULL, WBFS_Spinner, part_sel, copy_1_1); hdd = old_hdd; wbfs_trim(part); ClosePart(part); @@ -258,7 +260,7 @@ s32 Wbfs_Fat::ReIDGame(u8 *discid, const void *newID) wbfs_t *part = OpenPart((char *) discid); if (!part) return -1; - + s32 ret = wbfs_rID_disc(part, discid,(u8*)newID); ClosePart(part); @@ -287,7 +289,7 @@ s32 Wbfs_Fat::ReIDGame(u8 *discid, const void *newID) return ret; } -f32 Wbfs_Fat::EstimateGameSize() +f32 Wbfs_Fat::EstimateGameSize() { wbfs_t *part = NULL; u64 size = (u64)143432*2*0x8000ULL; @@ -321,7 +323,7 @@ bool Wbfs_Fat::CheckLayoutB(char *fname, int len, u8* id, char *fname_title) // cut at '[' fname_title[len-8] = 0; int n = strlen(fname_title); - if (n == 0) return false; + if (n == 0) return false; // cut trailing _ or ' ' if (fname_title[n - 1] == ' ' || fname_title[n - 1] == '_' ) { fname_title[n - 1] = 0; @@ -375,7 +377,7 @@ s32 Wbfs_Fat::GetHeadersCount() memcpy(id, fname, 6); id[6] = 0; - *fname_title = 0; + *fname_title = 0; is_dir = S_ISDIR(st.st_mode); //printf("mode: %d %d %x\n", is_dir, st.st_mode, st.st_mode); @@ -408,14 +410,18 @@ s32 Wbfs_Fat::GetHeadersCount() strcpy(strrchr(fpath, '.'), ".iso"); // replace .wbfs with .iso if (stat(fpath, &st) == -1) { //printf("missing: %s\n", fpath); - if (lay_a && lay_b == 1) { - // mark lay_b so that the stat check is still done, - // but lay_b is not re-tried again - lay_b = 2; - // retry with layout b - goto try_lay_b; + // try .ciso + strcpy(strrchr(fpath, '.'), ".ciso"); // replace .iso with .ciso + if (stat(fpath, &st) == -1 ) { + if (lay_a && lay_b == 1) { + // mark lay_b so that the stat check is still done, + // but lay_b is not re-tried again + lay_b = 2; + // retry with layout b + goto try_lay_b; + } + continue; } - continue; } } } else { @@ -424,10 +430,12 @@ s32 Wbfs_Fat::GetHeadersCount() } else { // usb:/wbfs/GAMEID.wbfs // or usb:/wbfs/GAMEID.iso + // or usb:/wbfs/GAMEID.ciso p = strrchr(fname, '.'); if (!p) continue; if ( (strcasecmp(p, ".wbfs") != 0) - && (strcasecmp(p, ".iso") != 0) ) continue; + && (strcasecmp(p, ".iso") != 0) + && (strcasecmp(p, ".ciso") != 0) ) continue; int n = p - fname; // length withouth .wbfs if (n != 6) { // TITLE [GAMEID].wbfs @@ -461,6 +469,7 @@ s32 Wbfs_Fat::GetHeadersCount() fseek(fp, 512, SEEK_SET); fread(&tmpHdr, sizeof(struct discHdr), 1, fp); fclose(fp); + tmpHdr.is_ciso = 0; if ((tmpHdr.magic == 0x5D1C9EA3) && (memcmp(tmpHdr.id, id, 6) == 0)) { goto add_hdr; } @@ -472,7 +481,7 @@ s32 Wbfs_Fat::GetHeadersCount() if (!part) { continue; } - // Get header + // Get header ret = wbfs_get_disc_info(part, 0, (u8*)&tmpHdr, sizeof(struct discHdr), &size); ClosePart(part); @@ -486,6 +495,19 @@ s32 Wbfs_Fat::GetHeadersCount() fseek(fp, 0, SEEK_SET); fread(&tmpHdr, sizeof(struct discHdr), 1, fp); fclose(fp); + tmpHdr.is_ciso = 0; + if ((tmpHdr.magic == 0x5D1C9EA3) && (memcmp(tmpHdr.id, id, 6) == 0)) { + goto add_hdr; + } + } + } else if (strcasecmp(strrchr(fpath,'.'), ".ciso") == 0) { + // ciso file + FILE *fp = fopen(fpath, "rb"); + if (fp != NULL) { + fseek(fp, 0x8000, SEEK_SET); + fread(&tmpHdr, sizeof(struct discHdr), 1, fp); + fclose(fp); + tmpHdr.is_ciso = 1; if ((tmpHdr.magic == 0x5D1C9EA3) && (memcmp(tmpHdr.id, id, 6) == 0)) { goto add_hdr; } @@ -504,7 +526,7 @@ s32 Wbfs_Fat::GetHeadersCount() } dirclose(dir_iter); //dbg_time2("\nFAT_GetCount"); Wpad_WaitButtonsCommon(); - + return 0; } @@ -517,6 +539,9 @@ int Wbfs_Fat::FindFilename(u8 *id, char *fname, int len) // look for direct .iso file strcpy(strrchr(fname, '.'), ".iso"); // replace .wbfs with .iso if (stat(fname, &st) == 0) return 1; + // look for direct .ciso file + strcpy(strrchr(fname, '.'), ".ciso"); // replace .iso with .ciso + if (stat(fname, &st) == 0) return 1; // direct file not found, check subdirs *fname = 0; DIR_ITER *dir_iter; @@ -549,6 +574,9 @@ int Wbfs_Fat::FindFilename(u8 *id, char *fname, int len) if (stat(fname, &st) == 0) break; // look for .iso file snprintf(fname, len, "%s/%s/%.6s.iso", path, name, id); + if (stat(fname, &st) == 0) break; + // look for .ciso file + snprintf(fname, len, "%s/%s/%.6s.ciso", path, name, id); } else { // TITLE [GAMEID].wbfs char fn_title[TITLE_LEN]; @@ -556,7 +584,8 @@ int Wbfs_Fat::FindFilename(u8 *id, char *fname, int len) char *p = strrchr(name, '.'); if (!p) continue; if ( (strcasecmp(p, ".wbfs") != 0) - && (strcasecmp(p, ".iso") != 0) ) continue; + && (strcasecmp(p, ".iso") != 0) + && (strcasecmp(p, ".ciso") != 0) ) continue; int n = p - name; // length withouth .wbfs if (!CheckLayoutB(name, n, fn_id, fn_title)) continue; if (strncmp((char*)fn_id, (char*)id, 6) != 0) continue; @@ -745,10 +774,10 @@ int Wbfs_Fat::GetFragList(u8 *id) int i; int is_wbfs = 0; int ret_val = -1; - + ret = FindFilename(id, fname, sizeof(fname)); if (!ret) return -1; - + if (strcasecmp(strrchr(fname,'.'), ".wbfs") == 0) { is_wbfs = 1; } @@ -784,7 +813,8 @@ int Wbfs_Fat::GetFragList(u8 *id) ret = wbfs_get_fragments(d, &_frag_append, fw); if (ret) goto out; CloseDisc(d); - // DEBUG: frag_list->num = MAX_FRAG-10; // stress test + // DEBUG: + frag_list->num = MAX_FRAG-10; // stress test ret = frag_remap(frag_list, fw, fa); if (ret) goto out; } else { @@ -808,7 +838,7 @@ out: int Wbfs_Fat::GetFragList(char *filename, _frag_append_t append_fragment, FragList *fs) { - return _FAT_get_fragments(filename, append_fragment, fs); + return _FAT_get_fragments(filename, append_fragment, fs); } bool Wbfs_Fat::ShowFreeSpace(void) diff --git a/source/usbloader/wbfs/wbfs_fat.h b/source/usbloader/wbfs/wbfs_fat.h index 9c477add..4d1e73b3 100644 --- a/source/usbloader/wbfs/wbfs_fat.h +++ b/source/usbloader/wbfs/wbfs_fat.h @@ -15,20 +15,20 @@ public: virtual s32 Open(); wbfs_disc_t* OpenDisc(u8 *); void CloseDisc(wbfs_disc_t *); - + s32 GetCount(u32 *); s32 GetHeaders(struct discHdr *, u32, u32); - + s32 AddGame(); s32 RemoveGame(u8 *); - + s32 DiskSpace(f32 *, f32 *); - + s32 RenameGame(u8 *, const void *); s32 ReIDGame(u8 *, const void *); - + f32 EstimateGameSize(); - + int GetFragList(u8 *); virtual int GetFragList(char *, _frag_append_t, FragList *); virtual bool ShowFreeSpace(void); @@ -37,13 +37,13 @@ protected: static char wbfs_fs_drive[16]; private: split_info_t split; - + static u32 fat_sector_size; static char wbfs_fat_dir[16]; static char invalid_path[]; static struct discHdr *fat_hdr_list; static u32 fat_hdr_count; - + wbfs_t* OpenPart(char *fname); void ClosePart(wbfs_t* part); wbfs_t* CreatePart(u8 *id, char *path); @@ -52,12 +52,12 @@ private: bool CheckLayoutB(char *fname, int len, u8* id, char *fname_title); s32 GetHeadersCount(); void GetDir(struct discHdr *header, char *path); - + void mk_title_txt(struct discHdr *header, char *path); void mk_gameid_title(struct discHdr *header, char *name, int re_space, int layout); void title_filename(char *title); bool is_gameid(char *id); - + static int nop_rw_sector(void *_fp, u32 lba, u32 count, void* buf) { return 0; } }; diff --git a/source/usbloader/wbfs/wbfs_ntfs.h b/source/usbloader/wbfs/wbfs_ntfs.h index 7c1961c0..cdcc0eec 100644 --- a/source/usbloader/wbfs/wbfs_ntfs.h +++ b/source/usbloader/wbfs/wbfs_ntfs.h @@ -7,9 +7,9 @@ class Wbfs_Ntfs : public Wbfs_Fat { public: Wbfs_Ntfs(u32 device, u32 lba, u32 size) : Wbfs_Fat(device, lba, size) {} - - virtual s32 Open(); - + + virtual s32 Open(); + int GetFragList(char *filename, _frag_append_t append_fragment, FragList *fs); bool ShowFreeSpace(void); }; diff --git a/source/usbloader/wbfs/wbfs_rw.cpp b/source/usbloader/wbfs/wbfs_rw.c similarity index 77% rename from source/usbloader/wbfs/wbfs_rw.cpp rename to source/usbloader/wbfs/wbfs_rw.c index 0cdbc2e0..5a2f056b 100644 --- a/source/usbloader/wbfs/wbfs_rw.cpp +++ b/source/usbloader/wbfs/wbfs_rw.c @@ -1,15 +1,25 @@ #include #include +#include #include "usbloader/sdhc.h" -#include "usbloader/usbstorage.h" +#include "usbloader/usbstorage2.h" #include "usbloader/wdvd.h" -#include "wbfs_base.h" +#include "wbfs_rw.h" /* Constants */ #define MAX_NB_SECTORS 32 -s32 Wbfs::__ReadDVD(void *fp, u32 lba, u32 len, void *iobuf) { +u32 sector_size = 512; +rw_sector_callback_t readCallback = NULL; +rw_sector_callback_t writeCallback = NULL; + +void SetSectorSize(u32 size) +{ + sector_size = size; +} + +s32 __ReadDVD(void *fp, u32 lba, u32 len, void *iobuf) { void *buffer = NULL; u64 offset; @@ -58,7 +68,7 @@ out: return ret; } -s32 Wbfs::__ReadUSB(void *fp, u32 lba, u32 count, void *iobuf) { +s32 __ReadUSB(void *fp, u32 lba, u32 count, void *iobuf) { u32 cnt = 0; s32 ret; @@ -72,7 +82,7 @@ s32 Wbfs::__ReadUSB(void *fp, u32 lba, u32 count, void *iobuf) { sectors = MAX_NB_SECTORS; /* USB read */ - ret = USBStorage_ReadSectors(lba + cnt, sectors, ptr); + ret = USBStorage2_ReadSectors(lba + cnt, sectors, ptr); if (ret < 0) return ret; @@ -83,7 +93,7 @@ s32 Wbfs::__ReadUSB(void *fp, u32 lba, u32 count, void *iobuf) { return 0; } -s32 Wbfs::__WriteUSB(void *fp, u32 lba, u32 count, void *iobuf) { +s32 __WriteUSB(void *fp, u32 lba, u32 count, void *iobuf) { u32 cnt = 0; s32 ret; @@ -97,7 +107,7 @@ s32 Wbfs::__WriteUSB(void *fp, u32 lba, u32 count, void *iobuf) { sectors = MAX_NB_SECTORS; /* USB write */ - ret = USBStorage_WriteSectors(lba + cnt, sectors, ptr); + ret = USBStorage2_WriteSectors(lba + cnt, sectors, ptr); if (ret < 0) return ret; @@ -108,7 +118,7 @@ s32 Wbfs::__WriteUSB(void *fp, u32 lba, u32 count, void *iobuf) { return 0; } -s32 Wbfs::__ReadSDHC(void *fp, u32 lba, u32 count, void *iobuf) { +s32 __ReadSDHC(void *fp, u32 lba, u32 count, void *iobuf) { u32 cnt = 0; s32 ret; @@ -133,7 +143,7 @@ s32 Wbfs::__ReadSDHC(void *fp, u32 lba, u32 count, void *iobuf) { return 0; } -s32 Wbfs::__WriteSDHC(void *fp, u32 lba, u32 count, void *iobuf) { +s32 __WriteSDHC(void *fp, u32 lba, u32 count, void *iobuf) { u32 cnt = 0; s32 ret; diff --git a/source/usbloader/wbfs/wbfs_rw.h b/source/usbloader/wbfs/wbfs_rw.h new file mode 100644 index 00000000..2357fa37 --- /dev/null +++ b/source/usbloader/wbfs/wbfs_rw.h @@ -0,0 +1,25 @@ +#ifndef _WBFS_RW_H +#define _WBFS_RW_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "libwbfs/libwbfs.h" + +extern u32 sector_size; +extern rw_sector_callback_t readCallback; +extern rw_sector_callback_t writeCallback; + +s32 __ReadDVD(void *fp, u32 lba, u32 len, void *iobuf); +s32 __ReadUSB(void *fp, u32 lba, u32 count, void *iobuf); +s32 __WriteUSB(void *fp, u32 lba, u32 count, void *iobuf); +s32 __ReadSDHC(void *fp, u32 lba, u32 count, void *iobuf); +s32 __WriteSDHC(void *fp, u32 lba, u32 count, void *iobuf); + +#ifdef __cplusplus +} +#endif + + +#endif //_WBFS_RW_H diff --git a/source/usbloader/wbfs/wbfs_wbfs.cpp b/source/usbloader/wbfs/wbfs_wbfs.cpp index fd879e3e..ab538b98 100644 --- a/source/usbloader/wbfs/wbfs_wbfs.cpp +++ b/source/usbloader/wbfs/wbfs_wbfs.cpp @@ -1,5 +1,7 @@ #include "wbfs_wbfs.h" +#include "../spinner.h" #include "settings/cfg.h" +#include "wbfs_rw.h" extern u32 sector_size; @@ -17,7 +19,7 @@ s32 Wbfs_Wbfs::Open() // Save the new sector size, so it will be used in read and write calls sector_size = 1 << hdd->head->hd_sec_sz_s; - + return 0; } @@ -41,7 +43,7 @@ void Wbfs_Wbfs::CloseDisc(wbfs_disc_t *disc) wbfs_close_disc(disc); } -s32 Wbfs_Wbfs::Format() +s32 Wbfs_Wbfs::Format() { wbfs_t *partition = NULL; @@ -56,7 +58,7 @@ s32 Wbfs_Wbfs::Format() return 0; } -s32 Wbfs_Wbfs::GetCount(u32 *count) +s32 Wbfs_Wbfs::GetCount(u32 *count) { /* No device open */ if (!hdd) @@ -68,7 +70,7 @@ s32 Wbfs_Wbfs::GetCount(u32 *count) return 0; } -s32 Wbfs_Wbfs::GetHeaders(struct discHdr *outbuf, u32 cnt, u32 len) +s32 Wbfs_Wbfs::GetHeaders(struct discHdr *outbuf, u32 cnt, u32 len) { u32 idx, size; s32 ret; @@ -89,7 +91,7 @@ s32 Wbfs_Wbfs::GetHeaders(struct discHdr *outbuf, u32 cnt, u32 len) return 0; } -s32 Wbfs_Wbfs::AddGame() +s32 Wbfs_Wbfs::AddGame() { s32 ret; @@ -100,7 +102,7 @@ s32 Wbfs_Wbfs::AddGame() /* Add game to device */ partition_selector_t part_sel; int copy_1_1 = 0; - + if (Settings.fullcopy) { part_sel = ALL_PARTITIONS; copy_1_1 = 1; @@ -108,7 +110,7 @@ s32 Wbfs_Wbfs::AddGame() part_sel = Settings.partitions_to_install == install_game_only ? ONLY_GAME_PARTITION : ALL_PARTITIONS; } - ret = wbfs_add_disc(hdd, __ReadDVD, NULL, Spinner, part_sel, copy_1_1); + ret = wbfs_add_disc(hdd, __ReadDVD, NULL, WBFS_Spinner, part_sel, copy_1_1); if (ret < 0) return ret; @@ -131,7 +133,7 @@ s32 Wbfs_Wbfs::RemoveGame(u8 *discid) return 0; } -s32 Wbfs_Wbfs::DiskSpace(f32 *used, f32 *free) +s32 Wbfs_Wbfs::DiskSpace(f32 *used, f32 *free) { f32 ssize; u32 cnt; @@ -181,7 +183,7 @@ s32 Wbfs_Wbfs::ReIDGame(u8 *discid, const void *newID) return 0; } -f32 Wbfs_Wbfs::EstimateGameSize() +f32 Wbfs_Wbfs::EstimateGameSize() { partition_selector_t part_sel = ONLY_GAME_PARTITION; if (Settings.fullcopy) { diff --git a/source/usbloader/wbfs/wbfs_wbfs.h b/source/usbloader/wbfs/wbfs_wbfs.h index 69a9739b..0124f853 100644 --- a/source/usbloader/wbfs/wbfs_wbfs.h +++ b/source/usbloader/wbfs/wbfs_wbfs.h @@ -12,19 +12,19 @@ public: s32 Open(); wbfs_disc_t* OpenDisc(u8 *); void CloseDisc(wbfs_disc_t *); - + s32 Format(); s32 GetCount(u32 *); s32 GetHeaders(struct discHdr *, u32, u32); - + s32 AddGame(); s32 RemoveGame(u8 *); - + s32 DiskSpace(f32 *, f32 *); - + s32 RenameGame(u8 *, const void *); s32 ReIDGame(u8 *, const void *); - + f32 EstimateGameSize(); }; diff --git a/source/usbloader/wbfs_fat.c b/source/usbloader/wbfs_fat.c deleted file mode 100644 index b432f4c5..00000000 --- a/source/usbloader/wbfs_fat.c +++ /dev/null @@ -1,739 +0,0 @@ -// WBFS FAT by oggzee - - -// WBFS FAT by oggzee - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "libwbfs/libwbfs.h" -#include "usbloader/disc.h" -#include "usbloader/sdhc.h" -#include "usbloader/usbstorage.h" -#include "usbloader/utils.h" -#include "usbloader/wbfs.h" -#include "usbloader/wdvd.h" -#include "usbloader/splits.h" -#include "usbloader/wbfs_fat.h" -#include "usbloader/partition_usbloader.h" -#include "libfat/fat.h" -#include "settings/cfg.h" - -// max fat fname = 256 -#define MAX_FAT_PATH 1024 - -char wbfs_fs_drive[16]; -char wbfs_fat_dir[16] = "/wbfs"; -char invalid_path[] = "/\\:|<>?*\"'"; - -split_info_t split; - -static u32 fat_sector_size = 512; - -static struct discHdr *fat_hdr_list = NULL; -static int fat_hdr_count = 0; - - -void WBFS_Spinner(s32 x, s32 max); -s32 __WBFS_ReadDVD(void *fp, u32 lba, u32 len, void *iobuf); - -bool is_gameid(char *id) -{ - int i; - for (i=0; i<6; i++) { - if (!isalnum((u32) id[i])) return false; - } - return true; -} - - -s32 _WBFS_FAT_GetHeadersCount() -{ - DIR_ITER *dir_iter; - char path[MAX_FAT_PATH]; - char fname[MAX_FAT_PATH]; - char fpath[MAX_FAT_PATH]; - struct discHdr tmpHdr; - struct stat st; - wbfs_t *part = NULL; - u8 id[8]; - int ret; - char *p; - u32 size; - int is_dir; - int len; - char dir_title[65]; - char *title; - - //dbg_time1(); - - SAFE_FREE(fat_hdr_list); - fat_hdr_count = 0; - - strcpy(path, wbfs_fs_drive); - strcat(path, wbfs_fat_dir); - dir_iter = diropen(path); - if (!dir_iter) return 0; - - while (dirnext(dir_iter, fname, &st) == 0) { - //printf("found: %s\n", fname); Wpad_WaitButtonsCommon(); - if ((char)fname[0] == '.') continue; - len = strlen(fname); - if (len < 8) continue; // "GAMEID_x" - - memcpy(id, fname, 6); - id[6] = 0; - - is_dir = S_ISDIR(st.st_mode); - //printf("mode: %d %d %x\n", is_dir, st.st_mode, st.st_mode); - if (is_dir) { - int lay_a = 0; - int lay_b = 0; - if (fname[6] == '_' && is_gameid((char*)id)) { - // usb:/wbfs/GAMEID_TITLE/GAMEID.wbfs - lay_a = 1; - } - if (fname[len-8] == '[' && fname[len-1] == ']' && is_gameid(&fname[len-7])) { - // usb:/wbfs/TITLE[GAMEID]/GAMEID.wbfs - lay_b = 1; - } - if (!lay_a && !lay_b) continue; - if (lay_a) { - strncpy(dir_title, &fname[7], sizeof(dir_title)); - } else { - try_lay_b: - memcpy(id, &fname[len-7], 6); - id[6] = 0; - strncpy(dir_title, fname, sizeof(dir_title)); - dir_title[len-8] = 0; // cut at '[' - int n = strlen(dir_title); - if (n == 0) continue; - // cut trailing _ or ' ' - if (dir_title[n - 1] == ' ' || dir_title[n - 1] == '_' ) { - dir_title[n - 1] = 0; - } - if (strlen(dir_title) == 0) continue; - } - snprintf(fpath, sizeof(fpath), "%s/%s/%s.wbfs", path, fname, id); - //printf("path2: %s\n", fpath); - // if more than 50 games, skip second stat to improve speed - // but if ambiguous layout check anyway - if (fat_hdr_count < 50 || (lay_a && lay_b)) { - if (stat(fpath, &st) == -1) { - //printf("missing: %s\n", fpath); - // try .iso - strcpy(strrchr(fpath, '.'), ".iso"); // replace .wbfs with .iso - if (stat(fpath, &st) == -1) { - //printf("missing: %s\n", fpath); - if (lay_a && lay_b == 1) { - // mark lay_b so that the stat check is still done, - // but lay_b is not re-tried again - lay_b = 2; - // retry with layout b - goto try_lay_b; - } - continue; - } - } - } else { - st.st_size = 1024*1024; - } - } else { - // usb:/wbfs/GAMEID.wbfs - // or usb:/wbfs/GAMEID.iso - p = strrchr(fname, '.'); - if (!p) continue; - if ( (strcasecmp(p, ".wbfs") != 0) - && (strcasecmp(p, ".iso") != 0) ) continue; - if (p - fname != 6) continue; // GAMEID. - snprintf(fpath, sizeof(fpath), "%s/%s", path, fname); - } - - //printf("found: %s %d MB\n", fpath, (int)(st.st_size/1024/1024)); - // size must be at least 1MB to be considered a valid wbfs file - if (st.st_size < 1024*1024) continue; - // if we have titles.txt entry use that - title = cfg_get_title(id); - // if directory, and no titles.txt get title from dir name - if (!title && is_dir) { - title = dir_title; - } - if (title) { - memset(&tmpHdr, 0, sizeof(tmpHdr)); - memcpy(tmpHdr.id, id, 6); - strncpy(tmpHdr.title, title, sizeof(tmpHdr.title)-1); - tmpHdr.magic = 0x5D1C9EA3; - goto add_hdr; - } - - // else read it from file directly - if (strcasecmp(strrchr(fpath,'.'), ".wbfs") == 0) { - // wbfs file directly - FILE *fp = fopen(fpath, "rb"); - if (fp != NULL) { - fseek(fp, 512, SEEK_SET); - fread(&tmpHdr, sizeof(struct discHdr), 1, fp); - fclose(fp); - if ((tmpHdr.magic == 0x5D1C9EA3) && (memcmp(tmpHdr.id, id, 6) == 0)) { - goto add_hdr; - } - } - // no title found, read it from wbfs file - // but this is a little bit slower - // open 'partition' file - part = WBFS_FAT_OpenPart(fpath); - if (!part) { - printf("bad wbfs file: %s\n", fpath); - sleep(2); - continue; - } - /* Get header */ - ret = wbfs_get_disc_info(part, 0, (u8*)&tmpHdr, - sizeof(struct discHdr), &size); - WBFS_FAT_ClosePart(part); - if (ret == 0) { - goto add_hdr; - } - } else if (strcasecmp(strrchr(fpath,'.'), ".iso") == 0) { - // iso file - FILE *fp = fopen(fpath, "rb"); - if (fp != NULL) { - fseek(fp, 0, SEEK_SET); - fread(&tmpHdr, sizeof(struct discHdr), 1, fp); - fclose(fp); - if ((tmpHdr.magic == 0x5D1C9EA3) && (memcmp(tmpHdr.id, id, 6) == 0)) { - goto add_hdr; - } - } - } - // fail: - continue; - - // succes: add tmpHdr to list: - add_hdr: - memset(&st, 0, sizeof(st)); - //printf("added: %.6s %.20s\n", tmpHdr.id, tmpHdr.title); Wpad_WaitButtons(); - fat_hdr_count++; - fat_hdr_list = realloc(fat_hdr_list, fat_hdr_count * sizeof(struct discHdr)); - memcpy(&fat_hdr_list[fat_hdr_count-1], &tmpHdr, sizeof(struct discHdr)); - } - dirclose(dir_iter); - //dbg_time2("\nFAT_GetCount"); Wpad_WaitButtonsCommon(); - return 0; -} - - -s32 WBFS_FAT_GetCount(u32 *count) -{ - *count = 0; - _WBFS_FAT_GetHeadersCount(); - if (fat_hdr_count && fat_hdr_list) { - // for compacter mem - move up as it will be freed later - int size = fat_hdr_count * sizeof(struct discHdr); - struct discHdr *buf = malloc(size); - if (buf) { - memcpy(buf, fat_hdr_list, size); - SAFE_FREE(fat_hdr_list); - fat_hdr_list = buf; - } - } - *count = fat_hdr_count; - return 0; -} - -s32 WBFS_FAT_GetHeaders(void *outbuf, u32 cnt, u32 len) -{ - int i; - int slen = len; - if (slen > sizeof(struct discHdr)) { - slen = sizeof(struct discHdr); - } - for (i=0; ip = &wbfs_iso_file; - iso_file->header = (void*)fd; - return iso_file; - } - - wbfs_t *part = WBFS_FAT_OpenPart(fname); - if (!part) return NULL; - return wbfs_open_disc(part, discid); -} - -void WBFS_FAT_CloseDisc(wbfs_disc_t* disc) -{ - if (!disc) return; - wbfs_t *part = disc->p; - - // is this really a .iso file? - if (part == &wbfs_iso_file) { - close((int)disc->header); - free(disc); - return; - } - - wbfs_close_disc(disc); - WBFS_FAT_ClosePart(part); - return; -} - -s32 WBFS_FAT_DiskSpace(f32 *used, f32 *free) -{ - f32 size; - int ret; - struct statvfs wbfs_fat_vfs; - - *used = 0; - *free = 0; - ret = statvfs(wbfs_fs_drive, &wbfs_fat_vfs); - if (ret) return -1; - - /* FS size in GB */ - size = (f32)wbfs_fat_vfs.f_frsize * (f32)wbfs_fat_vfs.f_blocks / GB_SIZE; - *free = (f32)wbfs_fat_vfs.f_frsize * (f32)wbfs_fat_vfs.f_bfree / GB_SIZE; - *used = size - *free; - - return 0; -} - -static int nop_read_sector(void *_fp,u32 lba,u32 count,void*buf) -{ - //printf("read %d %d\n", lba, count); //Wpad_WaitButtons(); - return 0; -} - -static int nop_write_sector(void *_fp,u32 lba,u32 count,void*buf) -{ - //printf("write %d %d\n", lba, count); //Wpad_WaitButtons(); - return 0; -} - -void WBFS_FAT_fname(u8 *id, char *fname, int len, char *path) -{ - if (path == NULL) { - snprintf(fname, len, "%s%s/%.6s.wbfs", wbfs_fs_drive, wbfs_fat_dir, id); - } else { - snprintf(fname, len, "%s/%.6s.wbfs", path, id); - } -} - -// format title so that it is usable in a filename -void title_filename(char *title) -{ - int i, len; - // trim leading space - len = strlen(title); - while (*title == ' ') { - memmove(title, title+1, len); - len--; - } - // trim trailing space - not allowed on windows directories - while (len && title[len-1] == ' ') { - title[len-1] = 0; - len--; - } - // replace silly chars with '_' - for (i=0; iid, 6); - name[6] = 0; - strncpy(title, get_title(header), sizeof(title)); - title_filename(title); - - if (layout == 0) { - sprintf(name, "%s_%s", id, title); - } else { - sprintf(name, "%s [%s]", title, id); - } - - // replace space with '_' - if (re_space) { - len = strlen(name); - for (i = 0; i < len; i++) { - if(name[i]==' ') name[i] = '_'; - } - } -} - -void WBFS_FAT_get_dir(struct discHdr *header, char *path) -{ - strcpy(path, wbfs_fs_drive); - strcat(path, wbfs_fat_dir); - if (Settings.FatInstallToDir) { - strcat(path, "/"); - int layout = 0; - if (Settings.FatInstallToDir == 2) layout = 1; - mk_gameid_title(header, path + strlen(path), 0, layout); - } -} - -void mk_title_txt(struct discHdr *header, char *path) -{ - char fname[MAX_FAT_PATH]; - FILE *f; - - strcpy(fname, path); - strcat(fname, "/"); - mk_gameid_title(header, fname+strlen(fname), 1, 0); - strcat(fname, ".txt"); - - f = fopen(fname, "wb"); - if (!f) return; - fprintf(f, "%.6s = %.64s\n", header->id, get_title(header)); - fclose(f); - printf("Info file: %s\n", fname); -} - - -int WBFS_FAT_find_fname(u8 *id, char *fname, int len) -{ - struct stat st; - // look for direct .wbfs file - WBFS_FAT_fname(id, fname, len, NULL); - if (stat(fname, &st) == 0) return 1; - // look for direct .iso file - strcpy(strrchr(fname, '.'), ".iso"); // replace .wbfs with .iso - if (stat(fname, &st) == 0) return 1; - // direct file not found, check subdirs - *fname = 0; - DIR_ITER *dir_iter; - char path[MAX_FAT_PATH]; - char name[MAX_FAT_PATH]; - strcpy(path, wbfs_fs_drive); - strcat(path, wbfs_fat_dir); - dir_iter = diropen(path); - //printf("dir: %s %p\n", path, dir); Wpad_WaitButtons(); - if (!dir_iter) { - return 0; - } - while (dirnext(dir_iter, name, &st) == 0) { - if (name[0] == '.') continue; - int n = strlen(name); - if (n < 8) continue; - if (name[6] == '_') { - // GAMEID_TITLE - if (strncmp(name, (char*)id, 6) != 0) goto try_alter; - } else { - try_alter: - // TITLE [GAMEID] - if (name[n-8] != '[' || name[n-1] != ']') continue; - if (strncmp(&name[n-7], (char*)id, 6) != 0) continue; - } - // look for .wbfs file - snprintf(fname, len, "%s/%s/%.6s.wbfs", path, name, id); - if (stat(fname, &st) == 0) { - break; - } - // look for .iso file - snprintf(fname, len, "%s/%s/%.6s.iso", path, name, id); - if (stat(fname, &st) == 0) { - break; - } - *fname = 0; - } - dirclose(dir_iter); - if (*fname) { - // found - //printf("found:%s\n", fname); - return 2; - } - // not found - return 0; -} - -wbfs_t* WBFS_FAT_OpenPart(char *fname) -{ - wbfs_t *part = NULL; - int ret; - - // wbfs 'partition' file - ret = split_open(&split, fname); - if (ret) return NULL; - part = wbfs_open_partition( - split_read_sector, - nop_write_sector, //readonly //split_write_sector, - &split, fat_sector_size, split.total_sec, 0, 0); - if (!part) { - split_close(&split); - } - return part; -} - -wbfs_t* WBFS_FAT_CreatePart(u8 *id, char *path) -{ - char fname[MAX_FAT_PATH]; - wbfs_t *part = NULL; - u64 size = (u64)143432*2*0x8000ULL; - u32 n_sector = size / 512; - int ret; - - //printf("CREATE PART %s %lld %d\n", id, size, n_sector); - snprintf(fname, sizeof(fname), "%s%s", wbfs_fs_drive, wbfs_fat_dir); - mkdir(fname, 0777); // base usb:/wbfs - mkdir(path, 0777); // game subdir - WBFS_FAT_fname(id, fname, sizeof(fname), path); - printf("Writing to %s\n", fname); - ret = split_create(&split, fname, OPT_split_size, size, true); - if (ret) return NULL; - - // force create first file - u32 scnt = 0; - int fd = split_get_file(&split, 0, &scnt, 0); - if (fd<0) { - printf("ERROR creating file\n"); - sleep(2); - split_close(&split); - return NULL; - } - - part = wbfs_open_partition( - split_read_sector, - split_write_sector, - &split, fat_sector_size, n_sector, 0, 1); - if (!part) { - split_close(&split); - } - return part; -} - -void WBFS_FAT_ClosePart(wbfs_t* part) -{ - if (!part) return; - split_info_t *s = (split_info_t*)part->callback_data; - wbfs_close(part); - if (s) split_close(s); -} - -s32 WBFS_FAT_RemoveGame(u8 *discid) -{ - char fname[MAX_FAT_PATH]; - int loc; - // wbfs 'partition' file - loc = WBFS_FAT_find_fname(discid, fname, sizeof(fname)); - if ( !loc ) return -1; - split_create(&split, fname, 0, 0, true); - split_close(&split); - if (loc == 1) return 0; - - // game is in subdir - // remove optional .txt file - DIR_ITER *dir_iter; - struct stat st; - char path[MAX_FAT_PATH]; - char name[MAX_FAT_PATH]; - strncpy(path, fname, sizeof(path)); - char *p = strrchr(path, '/'); - if (p) *p = 0; - dir_iter = diropen(path); - if (!dir_iter) return 0; - while (dirnext(dir_iter, name, &st) == 0) { - if (name[0] == '.') continue; - if (name[6] != '_') continue; - if (strncmp(name, (char*)discid, 6) != 0) continue; - p = strrchr(name, '.'); - if (!p) continue; - if (strcasecmp(p, ".txt") != 0) continue; - snprintf(fname, sizeof(fname), "%s/%s", path, name); - remove(fname); - break; - } - dirclose(dir_iter); - // remove game subdir - unlink(path); - - return 0; -} - - -s32 WBFS_FAT_AddGame(void) -{ - static struct discHdr header ATTRIBUTE_ALIGN(32); - char path[MAX_FAT_PATH]; - wbfs_t *part = NULL; - s32 ret; - - // read ID from DVD - Disc_ReadHeader(&header); - // path - WBFS_FAT_get_dir(&header, path); - // create wbfs 'partition' file - part = WBFS_FAT_CreatePart(header.id, path); - if (!part) return -1; - /* Add game to device */ - partition_selector_t part_sel = ALL_PARTITIONS; - int copy_1_1 = Settings.fullcopy; - switch (Settings.partitions_to_install) { - case install_game_only: - part_sel = ONLY_GAME_PARTITION; - break; - case install_all: - part_sel = ALL_PARTITIONS; - break; - case install_all_but_update: - part_sel = REMOVE_UPDATE_PARTITION; - break; - } - if (copy_1_1) { - part_sel = ALL_PARTITIONS; - } - extern wbfs_t *hdd; - wbfs_t *old_hdd = hdd; - hdd = part; // used by spinner - ret = wbfs_add_disc(part, __WBFS_ReadDVD, NULL, WBFS_Spinner, part_sel, copy_1_1); - hdd = old_hdd; - wbfs_trim(part); - WBFS_FAT_ClosePart(part); - - if (ret < 0) return ret; - mk_title_txt(&header, path); - - return 0; -} - -s32 WBFS_FAT_DVD_Size(u64 *comp_size, u64 *real_size) -{ - s32 ret; - u32 comp_sec = 0, last_sec = 0; - - wbfs_t *part = NULL; - u64 size = (u64)143432*2*0x8000ULL; - u32 n_sector = size / fat_sector_size; - u32 wii_sec_sz; - - // init a temporary dummy part - // as a placeholder for wbfs_size_disc - part = wbfs_open_partition( - nop_read_sector, nop_write_sector, - NULL, fat_sector_size, n_sector, 0, 1); - if (!part) return -1; - wii_sec_sz = part->wii_sec_sz; - - /* Add game to device */ - partition_selector_t part_sel; - if (Settings.partitions_to_install) { - part_sel = ALL_PARTITIONS; - } else { - part_sel = ONLY_GAME_PARTITION; - } - ret = wbfs_size_disc(part, __WBFS_ReadDVD, NULL, part_sel, &comp_sec, &last_sec); - wbfs_close(part); - if (ret < 0) - return ret; - - *comp_size = (u64)wii_sec_sz * comp_sec; - *real_size = (u64)wii_sec_sz * last_sec; - - return 0; -} - -s32 WBFS_FAT_RenameGame(u8 *discid, const void *newname) -{ - wbfs_t *part = WBFS_FAT_OpenPart((char *) discid); - if (!part) - return -1; - - s32 ret = wbfs_ren_disc(part, discid,(u8*)newname); - - WBFS_FAT_ClosePart(part); - - return ret; -} - -s32 WBFS_FAT_ReIDGame(u8 *discid, const void *newID) -{ - wbfs_t *part = WBFS_FAT_OpenPart((char *) discid); - if (!part) - return -1; - - s32 ret = wbfs_rID_disc(part, discid,(u8*)newID); - - WBFS_FAT_ClosePart(part); - - if(ret == 0) - { - char fname[100]; - char fnamenew[100]; - s32 cnt = 0x31; - - WBFS_FAT_fname(discid, fname, sizeof(fname), NULL); - WBFS_FAT_fname((u8*) newID, fnamenew, sizeof(fnamenew), NULL); - - int stringlength = strlen(fname); - - while(rename(fname, fnamenew) == 0) - { - fname[stringlength] = cnt; - fname[stringlength+1] = 0; - fnamenew[stringlength] = cnt; - fnamenew[stringlength+1] = 0; - cnt++; - } - } - - return ret; -} - -s32 WBFS_FAT_EstimateGameSize(void) { - wbfs_t *part = NULL; - u64 size = (u64)143432*2*0x8000ULL; - u32 n_sector = size / fat_sector_size; - u32 wii_sec_sz; - - // init a temporary dummy part - // as a placeholder for wbfs_size_disc - part = wbfs_open_partition( - nop_read_sector, nop_write_sector, - NULL, fat_sector_size, n_sector, 0, 1); - if (!part) return -1; - wii_sec_sz = part->wii_sec_sz; - - partition_selector_t part_sel; - if (Settings.fullcopy) { - part_sel = ALL_PARTITIONS; - } else { - part_sel = Settings.partitions_to_install == install_game_only ? ONLY_GAME_PARTITION : ALL_PARTITIONS; - } - return wbfs_estimate_disc(part, __WBFS_ReadDVD, NULL, part_sel); -}